{"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","display","position","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","strict","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","internalParseDate","tzoffset","dateRegExp","offsetRegExp","timezone","convert","nonBreakingSpaceRegExp","exponentRegExp","2","3","4","parseDate","parseExactDate","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","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","opacity","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","diff","fromLocalOffset","toLocalOffset","tempToOffset","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","toInvariantTime","isInTimeRange","msValue","msMin","msMax","isInDateRange","setTime","ignoreDST","difference","MS_PER_MINUTE","today","isToday","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","focusElement","scrollTopPositions","scrollableParents","parentsUntil","setActive","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","show","multiple","single","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","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","startIndex","endIndex","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","dirtyFields","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","inPlace","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","inPlaceSort","online","sync","offlineData","_isServerGrouped","_push","_readData","_flatData","useRanges","getByUid","_getByUid","_storeData","_addRange","_process","_observeView","insert","_createNewModel","_wrapInEmptyGroup","_insertModelInRange","pushInsert","pushed","autoSync","pristine","_updatePristineForModel","_removeItems","destroyed","found","_eachItem","_removePristineForModel","hasGroups","currentRangeStart","_removeModelFromRanges","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","requestParams","itemIds","_aggregateResult","endless","_changeHandler","updatePristine","_skip","timestamp","xhr","errorThrown","_requestInProgress","_pending","_shouldWrap","arrayType","_updateTotalForAction","_calculateAggregates","_take","_queryProcess","_mergeState","_currentRangeStart","moreItemsCount","remote","fetch","_query","next","totalPages","_emptyAggregates","ceil","inRange","_findRange","lastRange","firstItemUid","enableRequestsInProgress","_skipRequestsInProgress","_timeStamp","pageSkip","paging","sorting","filtering","_currentRequestTimeStamp","_rangeExists","prefetch","skipIdx","takeIdx","rangeData","rangeEnd","processed","flatData","_mergeGroups","prevGroup","_prefetchSuccessHandler","_timeout","_multiplePrefetch","_updateRangesLength","rangesLength","mismatchFound","mismatchLength","lengthDifference","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","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","defaultAction","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","scrollArea","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","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","sortedElements","_focusableElements","_sortFocusableElements","_nextFocusable","_focus","tabIndex","attrName","_haveSelectionRange","elementType","restoreTitle","restoreTitleAttributeForElement","saveTitleAttributeForElement","saveTitleAttributes","DOCUMENT","ARIAIDSUFFIX","DESCRIBEDBY","CONTENTLOAD","KCONTENTFRAME","TEMPLATE","IFRAMETEMPLATE","POSITIONS","REVERSE","DIRCLASSES","DIMENSIONS","DEFAULTCONTENT","Tooltip","_documentKeyDownHandler","_documentKeyDown","showOn","_showOn","_isShownOnFocus","_mouseenter","autoHide","_mouseleave","_blur","showAfter","callout","_show","_appendContent","iframe","contentOptions","showIframe","src","_ajaxRequest","_initPopup","activate","ariaId","_positionCallout","arrow","_closeButtonClick","_closePopup","arrowBorder","elementOffset","offsetAmount","createPromise","promiseAll","util","hex","hue2rgb","p","q","parseColor","color","BaseColor","matchNamedColor","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","regexp","colorNames","toHSV","toRGB","toHex","toBytes","toCss","toCssRgba","rgb","r","toDisplay","other","c1","c2","NaN","h","ref","toHSL","l","resolvedColor","formatRegex","processor","channels","this$1","resolveColor","re","normalizeByte","padDigit","brightness","percBrightness","fromBytes","fromRGB","fromHSV","fromHSL","normalizeText","REPLACE_REGEX","SPACE","objectKey","hashKey","zeroSize","baseline","measureText","measureBox","TextMetrics","LRUCache","DEFAULT_OPTIONS","defaultMeasureBox","_length","put","entry","_head","_tail","newer","older","baselineMarkerSize","styleKey","cacheKey","cachedResult","baselineMarker","textStr","_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","alignStartReverse","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","supportBrowser","refUrl","skipBaseHref","alignToScreen","ctm","getScreenCTM","decodeEntities","ENTITY_REGEX","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","splitElement","makePage","pages","pageNum","cacheImages","whenImagesAreActuallyLoaded","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","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","_pdfLink","clipit","isFormField","maybeRenderWidget","renderContents","pxlen","scaledAngle","implicit","atan","fromRect","LinearGradient","userSpace","visual","wrap$$1","_kendoExportVisual","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","startOffset","drawText","getFontHeight","textTransform","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","forEachReverse","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","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","revers","_fieldMap","_initMap","fieldMap","groupsSizeField","groupAxis","groupsAxis","justifyAlign","reflow","groupsSize","ref$1","groupOrigin","elementOrigin","groupStart","elementStart","groupBox","arrangeElements","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","renderId","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","isString","convertableToNumber","isObject","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","userSetMin","userSetMax","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","DIRECTION_ANGLE","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","limitSlot","limittedSlot","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","rangeAreaSeries","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","rangeArea","verticalRangeArea","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","toGeometryPoint","lintPoint","stepAxis","stepDir","GeometryPoint","anyHasZIndex","hasGradientOverlay","areNumbers","wrapData","seriesItem","paneID","ID","segmentVisible","pointVisibility","bindSegments","SeriesBinder","bindPoint","valueFields","equalsIgnoreCase","filterSeriesByType","currentSeries","seriesTypes","getDateField","isDateAxis","sampleCategory","dateCategory","singleItemOrArray","axisGroupBox","axisBox","paneAnchor","setValue","appendIfNotNull","updateAxisOptions","targetOptions","axesOptions","axisIndex","groupSeries","axisIx","acceptKey","mouseKey","ctrlKey","altKey","toChartAxisRanges","axisRanges","axisRange","createDiv","closestHandle","updateAxisOptions$1","yAxis","xAxis","tooltipAlignment","RAD_60","RAD_30","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","ChartAxis","ChartPane","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","ABOVE","BELOW","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_AREA","RANGE_BAR","RANGE_COLUMN","SCATTER","SCATTER_LINE","VERTICAL_AREA","VERTICAL_BOX_PLOT","VERTICAL_BULLET","VERTICAL_LINE","VERTICAL_RANGE_AREA","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","LinePoint","LineSegment","StepLineMixin","StepLineSegment","SplineSegment","LineChartMixin","ClipAnimation","ClipAnimationMixin","LineChart","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","RangeLinePoint","DEFAULT_FROM_FORMAT","DEFAULT_TO_FORMAT","RangeAreaPoint","RangeAreaSegment","SplineRangeAreaSegment","StepRangeAreaSegment","RangeAreaChart","OHLCPoint","OHLCChart","WaterfallSegment","WaterfallChart","AREA_SERIES","OUT_OF_RANGE_SERIES","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","chartsVisual","chartContainer","_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","limitPoints","limitPoint","crossingValues","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","unclipElements","toGeometryPoints","aliasFor","coords","getNearestPoint","calculateStepPoints","stepPoint","previousPoint","curveProcessor","curve","renderSegments","sortedPoints","pointCount","_segments","sortPoints","seriesMissingValues","createSegment","_addSegment","missingValues","assumeZero","nearestPoint","pointBox","allPoints","nearestPointDistance","_setEnd","setX","_setChildrenAnimation","animationPoints","prevSegment","stackPoints","createFill","createStroke","strokeSegments","_strokeSegments","createStrokeSegments","segmentsFromPoints","stackSegments","createStackSegments","hasStackSegment","fillSegments","hasStackSegments","fillToAxes","fillPath","crossingValue","endSlot","firstPoint","lastPoint","previousSegment","_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","yAxisName","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","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","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","initLabelsFormat","fromPoint","toPoint","copyFields","fromBox","toBox","positionLabels","fromLabelPosition","toLabelPosition","toPoints","fromSegments","fromPath","createCurveSegments","fromSlot","toSlot","oPoints","cPoints","lhPoints","oSlot","cSlot","createSegments","summary","totalCategories","prevPoint","namedCategoryAxes","valueAxisRangeTracker","stack100","createCategoryAxes","aggregateCategories","createCategoryAxesLabels","createCharts","createValueAxes","paneSeries","visibleSeries","groupIx","groupSeriesByCategoryAxis","createChartGroup","createAreaChart","createRangeAreaChart","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","rangeAreaChart","waterfallChart","axisRequiresRounding","categoryAxisName","categoryAxisIndex","seriesAxis","centeredSeries","aggregatedAxis","primaryAxis","defaultAxisRange","tracker","defaultRange","eventType","_eventCoordinates","pointPane","_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","centerSegment","_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","findPaneByName","findPaneByIndex","seriesName","categoryName","togglePointsHighlight","_sharedTooltip","_surfaceWrap","renderAs","_getModel","_destroyView","_createTooltip","_setupSelection","_createPannable","_createZoomSelection","_createMousewheelZoom","_navState","_cancelDomEvents","exportOptions","currentOptions","pannable","_pannable","zoomable","_zoomSelection","_toggleDomDrag","domEvents","toggleDrag","_mousewheelZoom","_toggleDomZoom","toggleZoom","_createSharedTooltip","seriesColor","_createPlotArea","_modelOptions","skipSeries","_hasSelection","_selections","selections","_selectStart","_selectEnd","_clickHandler","_surfaceMouseenterHandler","_mouseover","_surfaceMouseleaveHandler","_mouseout","_toDocumentCoordinates","obj$1","_shouldAttachMouseMove","_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","normalizeStyle","ChartInstanceObserver","proxyMembers","SeriesVisibilityState","geom","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","findSeries","findSeriesByName","_createSeries","findSeriesByIndex","_seriesOptions","_initChart","_createChart","_isRtl","_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","_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","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","_setOptions","_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","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","_linePoints","_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","_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","_preventNextFocus","_getNextElement","directionNumber","searchIndex","focusableItem","elementToFocus","prevElement","prevElements","prevAll","containerWidth","_markVisibles","_childrenWidth","childrenWidth","commandElement","visibleCommands","_hideItem","hiddenCommands","_showItem","overflowItems","toolbarItems","visibleOverflowItems","visibleToolbarItems","elementPosition","Selectable","ARIASELECTED","SELECTED","SELECTABLE","UNSELECTING","INPUTSELECTOR","supportEventDelegation","_lastActive","inputSelectors","aria","_isElement","whichCode","buttonCode","_allowSelection","selectRange","_firstSelectee","_unselect","_notify","_downTarget","currentElement","useAllItems","_selectElement","_invalidateSelectables","toSelect","selectElement","preventNotify","resetTouchEvents","continuousItems","asLowerString","modular","minYear","maxYear","build","weekNumberBuild","isWeekColumnVisible","cellsPerRow","perRow","weekNumberTemplate","cellTemplate","emptyCellTemplate","createDate","disableDates","isInRange","date1","date2","year1","getToday","restrictValue","shiftArray","daysBetweenTwoDates","endDate","fromDateUTC","endDateUTC","addDaysToArray","numberOfDays","fromDate","mousetoggle","HOVER","MOUSEENTER","FOCUS","prevent","leapYear","dateObject","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","CELLSELECTORVALID","WEEKCOLUMNSELECTOR","BLUR","FOCUS_WITH_NS","MOUSEENTER_WITH_NS","MOUSELEAVE","PREVARROW","NEXTARROW","ARIA_DISABLED","ARIA_SELECTED","ARIA_LABEL","decade","century","Calendar","unescape","_templates","_selectable","_header","_footer","footer","_toDateObject","_focusView","focusOnNav","_cellID","_isMultipleSelection","_class","_selectDates","_addClassProxy","_cell","todayString","toDateString","_cellByDate","_removeClassProxy","selectDates","weekColumnHeader","_today","_title","_destroySelectable","_table","_bindTable","_option","navigateToPast","navigateToFuture","navigateUp","navigateDown","future","_oldTable","_changeView","_animate","_visualizeSelectedDatesInView","validSelectedDates","datesUnique","_validateValue","selectedDates","selectableOptions","_onSelect","_onRelatedTarget","_toggleSelection","_cellsBySelector","_deselect","_addSelectedCellsToArray","_rangeSelection","currentCell","toDateCell","daysDifference","currentDateIndex","_dateInView","firstDateInView","lastDateInView","focusedDate","isDisabled","_keyboardToggleSelection","_nextNavigatable","_keyboardRangeSelection","navigatableDate","insertAfter","_horizontal","viewWidth","float","margin-left","_vertical","disabledDate","firstDayCurrentMonth","isBigger","isTodayDisabled","_todayClick","firstVisibleDay","calendarInfo","tzOffsetBefore","resultDATE","tzOffsetDiff","navigateUrl","hasUrl","currentCalendar","firstDayIdx","shortNames","linkClass","dateString","month1","month2","year2","setMonth","viewsEnum","approximateStringMatching","oldText","oldFormat","newText","deletedSymbol","oldTextSeparator","knownSymbols","customDateTime","INPUT_EVENT_NAME","STATEDISABLED","STATEDEFAULT","STATEINVALID","READONLY","DateInput","insidePicker","_form","weekday","hour","minute","dayperiod","_unbindInput","_bindInput","_updateElementValue","_formElement","_resetHandler","_dateTime","getDateObject","stringAndFromat","toPair","_oldText","_format","_editable","_paste","_input","_mouseUp","navigationOnly","valid","difSym","newEvent","stateInvalid","blinkInvalid","parsePart","_selectSegment","_blinkInvalidTimeout","_selectNearestSegment","returnValue","formId","keycode","modifyPart","initDate","initFormat","initCulture","initMessages","generateMatcher","retFormat","returnsFormat","matcher","setExisting","typedMonthPart","typedDayPeriodPart","sampleFormat","placeholders","mins","formatResult","newMonth","currentChar","newHours","monthNames","newYear","newMinutes","newSeconds","parseFormats","DatePicker","DIV","SPAN","DEFAULT","HOVEREVENTS","ARIA_EXPANDED","ARIA_HIDDEN","DateView","_dateViewID","_calendar","selectIsClicked","handled","_initialOptions","_wrapper","dateView","_updateARIA","_icon","aria-expanded","aria-owns","dateInput","_dateInput","_old","_update","ARIATemplate","_dateIcon","_inputWrapper","_toggleHover","dateChanged","valueUpdated","textFormatted","_typing","stopImmediatePropagation","aria-controls","isSameType","_ariaTemplate","buttonHtml","CLASS_ICON","truncate","placeholderSupported","INPUT","SPIN","TOUCHEND","STATE_INVALID","INTEGER_REGEXP","NumericTextBox","isStep","_focusout","_arrows","_validation","_text","_toggleText","restrictDecimals","spinners","upArrowText","downArrowText","_upArrowEventHandler","_downArrowEventHandler","_spin","_upArrow","_downArrow","_keypress","_keyup","adjusted","_adjust","_focusin","arrows","_spinning","_validationIcon","_focusing","groupRegExp","extractRegExp","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","CHECKBOXSELECTOR","NUMBERINPUTSELECTOR","NAME","FORM","NOVALIDATE","VALIDATE","VALIDATE_INPUT","patternMatcher","hasAttribute","validateAttributeSelector","_errorTemplate","errorTemplate","_inputSelector","_checkboxSelector","_errors","_isValidated","required","email","dateCompare","checkbox","raise","validateOnBlur","_checkElement","validateInput","inputs","invalid","messageText","wasValid","messageLabel","lblId","_checkValidity","_findMessageContainer","_extractMessage","_decorateMessageContainer","hideMessages","locators","messageLocators","locate","ruleKey","nonDefaultMessage","customMessage","fieldType","convertToValueBinding","bindAttr","createAttributes","ruleName","validation","DATATYPE","BINDING","specialRules","convertItems","addValidationRules","modelField","oldIE","nameSpecialCharRegExp","ERRORTEMPLATE","editors","kendoNumericTextBox","kendoDatePicker","Editable","$angular","_validateProxy","_validate","clearContainer","skipFocus","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","KDIALOGCONTENT","KOVERLAY","LOADING","KHOVERSTATE","KFOCUSEDSTATE","MAXIMIZEDSTATE","CURSOR","REFRESH","MINIMIZE","MAXIMIZE","RESIZESTART","RESIZEEND","DATADOCOVERFLOWRULE","ZINDEX","MINIMIZE_MAXIMIZE","KPIN","KUNPIN","PIN_UNPIN","TITLEBAR_BUTTONS","REFRESHICON","WINDOWEVENTSHANDLED","zero","Window","windowContent","windowFrame","globalWindow","isVisible","suppressActions","actions","_createWindow","_dimensions","_overlay","_buttonEnter","_buttonLeave","_windowActionHandler","windowInstance","pinned","pin","aria-labelledby","_onDocumentResize","_marker","_tabKeyTrap","maxHeight","_animationOptions","basicAnimation","resizing","toggleMaximization","templates","resizeHandle","_actions","titlebar","windowSpecificCommands","cachedOptions","fade","autoFocus","isMaximized","isMinimized","_closable","newWidth","newHeight","_close","unpin","maximize","minimize","_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","_stopDocumentScrolling","_isPinned","_removeOverlay","suppressAnimation","modals","hideOverlay","hideOptions","systemTriggered","userTriggered","_enableDocumentScrolling","lastModal","_actionable","_shouldFocus","windowTop","currentWindow","originalZIndex","windowObject","zIndexNew","restoreOptions","_sizingAction","actionId","before","$html","$body","_storeOverflowRule","_restoreOverflowRule","$element","overflowRule","win","lrBorderWidth","tbBorderWidth","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","_clearButton","clearButton","_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","_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","lastFrom","isPrimitive","getItemCount","listScreens","getDefaultItemHeight","mockList","bufferSizes","opposite","listValidator","downThreshold","upThreshold","lastScrollTop","scrollCallback","syncList","reorder","webkitTransform","map2","ITEMCHANGE","reshift","placeholderTemplate","GROUPITEM","isActivePromise","WRAPPER","VIRTUALLIST","CONTENT","LIST","HEADER","VIRTUALITEM","ITEM","HEIGHTCONTAINER","LISTBOUND","VIRTUAL_LIST_NS","_fetching","_selectedDataItems","_selectedIndexes","_rangesList","_promisesList","_renderItems","_triggerListBound","oppositeBuffer","mapValueTo","_selectProxy","_clean","_deferValueSet","mute","_selectingValue","_mute","_createList","_forcePrefetch","shouldClear","_prefetchByValue","dataView","_dataView","forSelection","mapValueToIndex","mapValueToDataItem","indexes","_getElementByDataItem","_getIndecies","deferredRange","itemCount","_","existingRange","isEmptyList","_activeDeferred","_getSkip","_findDataItem","_getRange","triggerEvent","_getElementByIndex","_focusedIndex","_getElementLocation","_screenHeight","heightContainer","isAlreadySelected","prefetchStarted","_selectDeferred","_deselectCurrentValues","_listCreated","_lastScrollTop","hasData","setScreenHeight","yPosition","yDownPostion","screenEnd","_generateItems","_saveInitialRanges","_buildValueGetter","_setHeight","getList","_listItems","_whenChanged","_reorderList","padHeight","lastRequestedRange","lastRangeStart","flatGroups","rangeStart","flatGroup","groupLength","_getterDeferred","firstItemIndex","_indexConstraint","firstVisibleGroup","fixedGroupText","currentVisibleGroup","firstVisibleDataItemIndex","firstVisibleDataItem","_itemMapper","listType","_currentGroup","_getDataItemsCollection","_listIndex","theValidator","theNew","currentOffset","list2","range2","_bufferSizes","buffers","selectedIndexes","removedindexesCounter","_deselectSingleItem","oldSkip","firstItem","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","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","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","_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","popupZIndex","_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","_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","_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","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","_checkBoxSelection","angularDataItem","templateSettings","encoded","terminal","pre","viewOptions","post","_scroller","kAttr","MobileScrollView","Pager","templateDirectives","templateName","outerHTML"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;CAwBC,SAAUA,EAAGC,QACVA,OAAO,cAAe,UAAWD,IACnC,WAy0GE,MAl0GC,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,EAuiCX,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,YA8C/F,OA7CK5B,GAAQ6B,SAASC,SAAS,0BAuBvBR,EAAUtB,EAAQ6B,OAAO,0BAA2BN,EAAeD,EAAQ,GAAGS,MAC9ET,EAAQU,GAAG,YACXV,EAAQpB,KACJ+B,QAAS,GACTC,SAAU,KAGlBjB,EAAakB,GAAcC,KAAKb,EAAaL,QAAUiB,GAAcC,KAAKb,EAAaJ,QAClFF,GACDK,EAAQpB,KACJgB,MAAOF,EAAWS,EAAWzB,GAAW,EAAIyB,EAAWzB,GACvDmB,OAAQQ,EAAY3B,GACpBqC,UAAW,cACXC,aAAc,cACdC,gBAAiB,kBApCrBrB,EAAQlB,EAAQ,GAAG+B,MAAMb,MAAOC,EAASnB,EAAQ,GAAG+B,MAAMZ,OAAQC,EAAee,GAAcC,KAAKlB,GAAQG,EAAgBc,GAAcC,KAAKjB,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,UAAU6D,SAAS,yBAAyBtC,KACvDgB,MAAOA,EACPC,OAAQA,KAERF,GACAjB,EAAQE,KACJgB,MAAO,OACPC,OAAQ,OACRkB,UAAW,aACXC,aAAc,aACdC,gBAAiB,gBAsBzBf,EAAQiB,MAAQ/B,GAAKgC,MAAMlB,EAAQmB,UAAY,IAC/C3C,EAAQE,KAAM0C,KAAM,IACpB5C,EAAQ6C,SAAS,WAAW3B,MAAMlB,EAAQkB,UAEvClB,EAAQ6B,SAEnB,QAASiB,GAAWC,GAChB,GAAIC,GAAI,EAAGnD,EAASoD,UAAUpD,MAC9B,KAAKmD,EAAI,EAAGA,EAAInD,EAAQmD,IACpBE,EAAcH,EAAaE,UAAUD,GAEzC,OAAOD,GAEX,QAASG,GAAcH,EAAaI,GAChC,GAAwMC,GAAUC,EAAWC,EAAUC,EAAUC,EAA7OC,EAAkBtD,GAAMuD,KAAKD,gBAAiBE,EAAsBxD,GAAMuD,KAAKC,oBAAqBC,EAAazD,GAAMuD,KAAKE,WAAYC,EAAyB1D,GAAMuD,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,KAAS7F,EAAY6F,EAAOF,EAEvC,QAASK,GAAUC,GACf,MAAOA,GAAI1F,QAAQ,gBAAiB,SAAU2F,GAC1C,MAAOA,GAAEzF,OAAO,GAAK,IAAMyF,EAAEzF,OAAO,GAAG0F,gBAG/C,QAASC,GAAYH,GACjB,MAAOA,GAAI1F,QAAQ,UAAW,SAAU8F,EAAUC,GAC9C,MAAOA,GAAGC,gBAGlB,QAASC,GAAkBrF,EAASsF,GAChC,GAAiBC,GAAbC,IAmBJ,OAlBIC,UAASC,aAAeD,SAASC,YAAYC,kBAC7CJ,EAAgBE,SAASC,YAAYC,iBAAiB3F,EAAS,IAC3DsF,GACA3G,EAAEiH,KAAKN,EAAY,SAAUO,EAAKC,GAC9BN,EAAOM,GAASP,EAAcQ,iBAAiBD,OAIvDP,EAAgBvF,EAAQgG,aACpBV,GACA3G,EAAEiH,KAAKN,EAAY,SAAUO,EAAKC,GAC9BN,EAAOM,GAASP,EAAcN,EAAYa,OAIjD3F,GAAM8F,KAAKT,KACZA,EAASD,GAENC,EAEX,QAASU,GAAalG,GAClB,GAAIA,GAAWA,EAAQmG,WAA0C,gBAAtBnG,GAAQmG,WAA0BnG,EAAQmG,UAAUC,QAAQ,wBACnG,OAAO,CAEX,IAAIC,GAAWhB,EAAkBrF,GAAU,aAAaqG,QACxD,OAAmB,QAAZA,GAAkC,UAAZA,EAEjC,QAASC,GAAWtG,EAAS8F,GAA7B,GAIQS,GAHAC,EAASpG,GAAQoB,QAAQgF,OACzBC,EAASrG,GAAQoB,QAAQkF,QACzBC,EAAK3G,YAAmBrB,GAAIqB,EAAQ,GAAKA,CAE7C,IAAKA,EAIL,MADAuG,GAAQnG,GAAQmG,MAAMvG,GAClB8F,IAAUjH,EASN0H,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,GAAUnH,EAASoH,EAAMC,GAAlC,GAIQC,GACAJ,EAOIK,CAIR,OAfKH,KACDA,EAAO,UAEPE,EAAStH,EAAQoH,KACjBF,GACAM,IAAKF,EAAOE,IACZ3G,MAAOyG,EAAOzG,MACdC,OAAQwG,EAAOxG,OACfF,KAAM0G,EAAO1G,MAEbR,GAAQoB,QAAQiB,OAASrC,GAAQqH,UAAYrH,GAAQsH,cAAgBL,IACjEE,EAAOnH,GAAQmG,MAAMvG,GAAW,KACpCkH,EAAOM,KAAO5I,EAAO+I,YAAclC,SAASmC,gBAAgBC,UAC5DX,EAAOtG,MAAQhC,EAAOkJ,YAAcP,EAAO9B,SAASmC,gBAAgBtB,YAEjEY,EAYX,QAASa,GAAaC,GAClB,GAAIC,KAIJ,OAHArC,IAAsB,gBAAVoC,GAAqBA,EAAM9I,MAAM,KAAO8I,EAAO,SAAUnC,GACjEoC,EAAQpC,GAAOqC,OAEZD,EAEX,QAASE,GAAGnI,GACR,MAAO,IAAIG,IAAM8H,QAAQG,QAAQpI,GAiCrC,QAASqI,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,GAAQlJ,EAASsI,EAASC,EAAUC,EAASC,GAElD,IADA,GAAsCU,GAAlCtD,EAAM,EAAGhG,EAASG,EAAQH,OACvBgG,EAAMhG,EAAQgG,IACjBsD,EAAWxK,EAAEqB,EAAQ6F,IACrBsD,EAASC,MAAM,WACXnB,EAAQoB,QAAQF,EAAUd,EAAwBC,EAASC,EAAUC,EAASC,KAGtF,OAAOzI,GAEX,QAASsJ,GAAYtJ,EAASuJ,EAASjB,EAASkB,GAO5C,MANID,KACAA,EAAUA,EAAQrK,MAAM,KACxB0G,GAAK2D,EAAS,SAAU1D,EAAKC,GACzB9F,EAAQsJ,YAAYxD,EAAO0D,MAG5BxJ,EAsBX,QAASyJ,GAAW3D,GAChB,OAAQ,GAAKA,GAAO1G,QAAQsK,EAAW,SAAStK,QAAQuK,EAAU,QAAQvK,QAAQwK,EAAU,QAAQxK,QAAQyK,EAAa,UAAUzK,QAAQ0K,EAAY,SA2U3J,QAASC,GAAY/J,EAASgK,GAC1B,GAAIlE,EAoBJ,OAnB+B,KAA3BkE,EAAO5D,QAAQ,UACf4D,EAASA,EAAOxK,UAAU,GAC1BwK,EAASA,EAAO1K,OAAO,GAAG0F,cAAgBgF,EAAOxK,UAAU,IAE/DwK,EAASA,EAAO5K,QAAQ6K,GAAY,OACpCnE,EAAQ9F,EAAQkK,aAAa,QAAU/J,GAAMgK,GAAKH,GACpC,OAAVlE,EACAA,EAAQjH,EACS,SAAViH,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,GAAazK,EAASsI,GAC3B,GAAiB0B,GAAQlE,EAArBoB,IACJ,KAAK8C,IAAU1B,GACXxC,EAAQiE,EAAY/J,EAASgK,GACzBlE,IAAUjH,IACN6L,GAAetI,KAAK4H,KAEhBlE,EADiB,gBAAVA,GACC3F,GAAMwK,SAAShM,EAAE,IAAMmH,GAAO8E,QAE9B5K,EAAQkK,aAAaF,IAGrC9C,EAAO8C,GAAUlE,EAGzB,OAAOoB,GA0FX,QAAS2D,GAAoBC,EAAGC,GAC5B,MAAOpM,GAAEqM,SAASF,EAAGC,MAAU,EAEnC,QAASE,KACL,GAAIC,GAASvM,EAAEuJ,KACf,OAAOvJ,GAAEwM,QAAQD,EAAOE,KAAK,QAAUjL,GAAMgK,GAAK,SAC9C,SACA,oBACOe,EAAOlJ,GAAG,YA0OzB,QAASqJ,GAAUrL,EAASsL,GACxB,GAAIC,GAAWvL,EAAQuL,SAASvG,aAChC,QAAQ,sCAAsC5C,KAAKmJ,IAAavL,EAAQwL,SAAW,MAAQD,EAAWvL,EAAQyL,MAAQH,EAAmBA,IAAqBI,EAAQ1L,GAE1K,QAAS0L,GAAQ1L,GACb,MAAOrB,GAAEgN,KAAKC,QAAQF,QAAQ1L,KAAarB,EAAEqB,GAAS6L,UAAUC,UAAUC,OAAO,WAC7E,MAAqC,WAA9BpN,EAAEuB,IAAIgI,KAAM,gBACpBrI,OAsHP,QAASmM,GAAYC,EAAUC,GAC3B,MAAO,IAAIF,GAAYG,GAAGtD,KAAKoD,EAAUC,GA9nFhD,GACoKE,GAyB7JhI,EAGAiI,EAGAC,EAGAC,EA6FAC,EAA6BC,EAAiCC,EAA8BC,EAA4BC,EAA6BC,EAA4B/M,EAskDjLgN,EAoBA7E,EAuGAyB,EAAkBC,EAAiBE,EAAoBC,EAAmBF,EAI1EmD,EA4DAC,EAmBGC,EA4IHC,EAkFAC,GA2BAzC,GAA+BJ,GAAkEC,GAA4DN,GAqO7JmD,GAOAC,GAsJAC,GAUAC,GACAC,GAwCAC,GAgDAC,GAEGC,GAQHC,GAcAC,GA8ZAC,GAMAC,GA7iGA5N,GAAQvB,EAAOuB,MAAQvB,EAAOuB,QAAW6N,aAAgBpF,GAASjK,EAAEiK,OAAQhD,GAAOjH,EAAEiH,KAAMqI,GAAUtP,EAAEsP,QAASC,GAAQvP,EAAEuP,MAAOpF,GAAOnK,EAAEmK,KAAMpI,GAAOoG,KAAgBqH,GAAOvP,EAAOuP,SAAY/N,MAAc+B,GAAgB,IAAKiM,GAAe,uBAAwB5N,GAAkB,sEAAuE4J,GAAe,uBAAwBiE,GAAW,WAAY3F,GAAS,SAAU4F,GAAS,SAAUxK,GAAS,SAAUyK,GAAO,OAAQ5F,GAAU,UAAWrE,GAAY,YAAakK,MAAkBC,MAAkBC,MAAWA,KAC3kBvO,IAAMwC,QAAU,cAAcvD,QAAQ,aAAc,IAGpDN,EAAM8J,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,GAEXjQ,EAAMmQ,UAAUE,aAAe,SAAU7G,GACrCJ,KAAKI,QAAUxF,KAAeoF,KAAKI,QAASA,IAE5ClE,EAAajE,GAAMiE,WAAa,SAAU+H,GAC1C,MAAqB,kBAAPA,IAEdE,EAAiB,WACjBnE,KAAKkH,mBAAoB,GAEzB9C,EAAqB,WACrB,MAAOpE,MAAKkH,qBAAsB,GAElC7C,EAAazN,EAAM8J,QACnBC,KAAM,WACFX,KAAKmH,YAETC,KAAM,SAAUC,EAAWC,EAAUC,GACjC,GAAiB5J,GAAyEhG,EAAQ6P,EAAUC,EAA4DC,EAApKd,EAAO5G,KAAW2H,QAAoBN,KAAc7G,IAAU6G,GAAaA,EAAsCO,QAA4BN,KAAanB,EAC9J,IAAImB,IAAa3Q,EAAW,CACxB,IAAKgH,IAAO0J,GACRT,EAAKQ,KAAKzJ,EAAK0J,EAAU1J,GAE7B,OAAOiJ,GAEX,IAAKjJ,EAAM,EAAGhG,EAASgQ,EAAWhQ,OAAQgG,EAAMhG,EAAQgG,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,IAE3CnQ,MAAO,SAAUkQ,EAAWC,GACxB,GAAiB3J,GAAyEhG,EAAQ8P,EAA4DC,EAA1Jd,EAAO5G,KAAW2H,QAAoBN,KAAc7G,IAAU6G,GAAaA,EAA4BO,QAA4BN,KAAanB,EACpJ,KAAKxI,EAAM,EAAGhG,EAASgQ,EAAWhQ,OAAQgG,EAAMhG,EAAQgG,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,GAAKhG,EAApDiP,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,EAAGhG,EAAS+P,EAAO/P,OAAQgG,EAAMhG,EAAQgG,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,IAAc1Q,EACdiQ,EAAKO,eACF,IAAIO,EACP,GAAID,EACA,IAAK9J,EAAM+J,EAAO/P,OAAS,EAAGgG,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,aAAc/M,GAC7K,GACA,IACA,KACA,MACA,QAERsM,GACImE,UAAW,OACXC,cAAc,EACdC,OAAQ,SAAU9F,EAAUjH,GACxB,GAAImC,GAAKhG,EAAQ+K,EAAO,EACxB,KAAK/E,EAAM,EAAGhG,EAAS6D,EAAK7D,OAAQgG,EAAMhG,EAAQgG,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,EAAUhQ,MAAMiM,GAAoB,GAAIgE,EAAeI,EAASJ,aAAcM,EAAe,wDACtL,IAAI1M,EAAWuG,GACX,MAAOA,EAKX,KAHAmG,GAAgBN,EAAe,QAAUD,EAAY,KAAO,GAC5DO,GAAgB,gBAChBH,EAAQhG,EAASvL,QAAQsN,EAAoB,aAAatN,QAAQqN,EAAc,2BAA2BrN,QAAQuN,EAAa,KAAKvN,QAAQwN,EAAoB,aAAa1N,MAAM,KAC/K2G,EAAM,EAAGA,EAAM8K,EAAM9Q,OAAQgG,IAC9BiL,GAAgB/R,EAAY4R,EAAM9K,GAAMA,EAAM,IAAM,EAExDiL,IAAgBN,EAAe,KAAO,IACtCM,GAAgB,uBAChBA,EAAeA,EAAa1R,QAAQyN,EAAa,IACjD,KAGI,MAFAV,GAAS3B,SAASqG,EAAcC,GAChC3E,EAAG4E,WAAajK,KAAKpE,MAAMiO,EAAM9Q,OAAS,GACnCsM,EACT,MAAOgE,GACL,KAAUa,OAAM7Q,GAAM8Q,OAAO,8CAAmDtG,EAAUmG,OAarG,WAmBG,QAASI,GAAMC,GAEX,MADAC,GAAUC,UAAY,EACfD,EAAUhP,KAAK+O,GAAU,IAAMA,EAAO/R,QAAQgS,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,EAAG/R,EAAoBgS,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,IADAjG,EAASiG,EAAMjG,OACVmD,EAAI,EAAGA,EAAInD,EAAQmD,IACpB6O,EAAQ7O,GAAK8B,EAAI9B,EAAG8C,IAAUyI,EAIlC,OAFAqD,GAAuB,IAAnBC,EAAQhS,OAAe,KAAOkS,EAAM,MAAQA,EAAMF,EAAQ1S,KAAK,MAAQ4S,GAAO,KAAOD,EAAO,IAAM,IAAMD,EAAQ1S,KAAK,KAAO,IAChI4S,EAAMD,EACCF,EAEX,GAAIK,SAAcA,KAAQnO,GAEtB,IADAjE,EAASoS,EAAIpS,OACRmD,EAAI,EAAGA,EAAInD,EAAQmD,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,EAAQhS,OAAe,KAAOkS,EAAM,MAAQA,EAAMF,EAAQ1S,KAAK,MAAQ4S,GAAO,KAAOD,EAAO,IAAM,IAAMD,EAAQ1S,KAAK,KAAO,IAChI4S,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,WAAanT,EAAIqP,EAAK+D,iBAAkB,GAAK,IAAMpT,EAAIqP,EAAKgE,cAAgB,GAAK,IAAMrT,EAAIqP,EAAKiE,cAAgB,IAAMtT,EAAIqP,EAAKkE,eAAiB,IAAMvT,EAAIqP,EAAKmE,iBAAmB,IAAMxT,EAAIqP,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,GAASzT,SAAWyO,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,GAAW7N,GAAM6N,QACrB,OAAOA,GAAS0F,IAAY1F,EAAS0F,EAAQxU,MAAM,KAAK,KAAO,KAEnE,MAAO,MAEX,MAAO,MAEX,QAAS0U,GAAWF,GAIhB,MAHIA,KACAA,EAAUD,EAAYC,IAEnBA,GAAWvT,GAAM6N,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,EAAO7R,QAAQkV,EAAkB,SAAU/T,GAAV,GAChCgU,GACArN,EACAK,CA8DJ,OA7Dc,MAAVhH,EACA2G,EAAS6M,EAAKS,UACG,OAAVjU,EACP2G,EAASzH,EAAIsU,EAAKS,WACD,QAAVjU,EACP2G,EAASiN,EAAKM,UAAUV,EAAKW,UACZ,SAAVnU,EACP2G,EAASiN,EAAKQ,MAAMZ,EAAKW,UACR,MAAVnU,EACP2G,EAAS6M,EAAKa,WAAa,EACV,OAAVrU,EACP2G,EAASzH,EAAIsU,EAAKa,WAAa,GACd,QAAVrU,EACP2G,EAASkN,EAAOK,UAAUV,EAAKa,YACd,SAAVrU,EACP2G,EAASkN,EAAOO,MAAMZ,EAAKa,YACV,OAAVrU,EACP2G,EAASzH,EAAIsU,EAAKc,cAAgB,KACjB,SAAVtU,EACP2G,EAASzH,EAAIsU,EAAKc,cAAe,GAChB,MAAVtU,EACP2G,EAAS6M,EAAKe,WAAa,IAAM,GAChB,OAAVvU,EACP2G,EAASzH,EAAIsU,EAAKe,WAAa,IAAM,IACpB,MAAVvU,EACP2G,EAAS6M,EAAKe,WACG,OAAVvU,EACP2G,EAASzH,EAAIsU,EAAKe,YACD,MAAVvU,EACP2G,EAAS6M,EAAKgB,aACG,OAAVxU,EACP2G,EAASzH,EAAIsU,EAAKgB,cACD,MAAVxU,EACP2G,EAAS6M,EAAKiB,aACG,OAAVzU,EACP2G,EAASzH,EAAIsU,EAAKiB,cACD,MAAVzU,EACP2G,EAASxG,GAAKgC,MAAMqR,EAAKkB,kBAAoB,KAC5B,OAAV1U,GACP2G,EAAS6M,EAAKkB,kBACV/N,EAAS,KACTA,EAASxG,GAAKgC,MAAMwE,EAAS,KAEjCA,EAASzH,EAAIyH,IACI,QAAV3G,EACP2G,EAASzH,EAAIsU,EAAKkB,kBAAmB,GACpB,OAAV1U,EACP2G,EAAS6M,EAAKe,WAAa,GAAKd,EAASkB,GAAG,GAAKlB,EAASmB,GAAG,GAC5C,QAAV5U,GACPgU,EAAUR,EAAKqB,oBACf7N,EAAOgN,EAAU,EACjBrN,GAASxG,GAAAA,GAAKqG,IAAIwN,EAAU,KAAerV,MAAM,KAAK,GACtDqV,EAAU7T,GAAKqG,IAAIwN,GAAoB,GAATrN,EAC9BA,GAAUK,EAAO,IAAM,KAAO9H,EAAIyH,GAClCA,GAAU,IAAMzH,EAAI8U,IACH,OAAVhU,GAA4B,MAAVA,IACzB2G,EAAS6M,EAAKqB,oBAAsB,GACpC7N,EAAOL,EAAS,EAChBA,GAASxG,GAAAA,GAAKqG,IAAIG,IAAmBhI,MAAM,KAAK,GAChDgI,GAAUK,EAAO,IAAM,MAAkB,OAAVhH,EAAiBd,EAAIyH,GAAUA,IAE3DA,IAAWrI,EAAYqI,EAAS3G,EAAMmO,MAAM,EAAGnO,EAAMV,OAAS,KAG7E,QAASwV,GAAa3V,EAAQuR,EAAQyC,GAClCA,EAAUE,EAAWF,EACrB,IAA6J4B,GAAQC,EAAYC,EAAWC,EAAiBC,EAA2CC,EAASC,EAAUC,EAAeC,EAAoDjQ,EAAKhG,EAAQkW,EAAIC,EAAUC,EAAmBC,EAAcC,EAAYC,EAAWC,EAASC,EAAUC,EAAcC,EAAeC,EAA4B7W,EAAze+T,EAAeD,EAAQC,aAAc+C,EAAU/C,EAAagD,GAAQC,EAAYjD,EAAakD,SAAUC,EAAUnD,EAAamD,QAAQ,GAAIC,KAAmFC,EAAWtX,EAAS,EAAqDuX,EAAcC,EAAOpR,EAAQoR,EAA0JC,IACje,IAAIzX,IAAWb,EACX,MAAOqY,EAEX,KAAKhF,SAASxS,GACV,MAAOA,EAEX,KAAKuR,EACD,MAAOyC,GAAQ0D,KAAKvX,OAASH,EAAO2X,iBAAmB3X,GAAAA,CAG3D,IADAgW,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,GAAkB/V,EAAOgY,cAAcd,GAAalX,EAAOgY,eAiBtE,IAfIlC,IACA9V,GAAU,KAEdA,EAASiY,EAAMjY,EAAQkX,GACvBI,EAAWtX,EAAS,EACpBA,EAASA,EAAOR,MAAMyX,GACtBhB,EAAUjW,EAAO,GACjBkW,EAAWlW,EAAO,GACdsX,IACArB,EAAUA,EAAQnW,UAAU,IAEhCsG,EAAQ8R,EAAajC,EAAS,EAAGA,EAAQ9V,OAAQ8T,GAC7CiC,IACA9P,GAAS4Q,EAAUd,GAER,MAAX3E,IAAmB+F,EACnB,MAAOlR,EAGX,KADApG,EAASwX,EACJrR,EAAM,EAAGhG,EAASiX,EAAQjX,OAAQgG,EAAMhG,EAAQgG,IACjDkQ,EAAKe,EAAQxX,OAAOuG,GAEhBnG,GADO,MAAPqW,EACUjQ,EACI,MAAPiQ,GAAqB,MAAPA,EACXT,EAEAS,CAGlB,OAAOrW,GAaX,GAXIsX,IACAtX,GAAUA,IAEVuR,EAAO7K,QAAQ,SAAc6K,EAAO7K,QAAQ,SAAa6K,EAAO7K,QAAQ,YACxE6K,EAASA,EAAO7R,QAAQyY,EAAe,SAAUtX,GAC7C,GAAIuX,GAAYvX,EAAMjB,OAAO,GAAGF,QAAQ,KAAM,IAAK2Y,EAAUxX,EAAMmO,MAAM,GAAGtP,QAAQ0Y,EAAW,GAE/F,OADAf,GAAS/G,KAAK+H,GACPC,KAGf/G,EAASA,EAAO/R,MAAM,KAClB8X,GAAY/F,EAAO,GACnBA,EAASA,EAAO,GAChBgF,GAAoB,MACjB,IAAe,IAAXvW,GAEP,GADAuR,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,IACA9V,GAAU,KAEV6V,GAA4C,OAA9BtE,EAAOuF,EAAgB,KACrCvF,EAASA,EAAO/R,MAAM,MAAMC,KAAK,IACjCoW,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,EAAO7R,QAAQgZ,EAAalB,IAEzChB,EAAejF,EAAO7K,QAAQuQ,GAC9B9W,EAASoR,EAAOpR,OACZqW,OACAN,GAAWlW,GAAAA,GAAkBR,MAAM,KAE/B0W,EADAA,EAAS,GACE+B,EAAMjY,EAAQoH,KAAKC,IAAI6O,EAAS,KAEhCA,EAAS,GAExBA,EAAWA,EAAS1W,MAAMyX,GAAO,IAAMO,EACvCd,EAAYnF,EAAOoH,YAAYH,GAAQhC,EACvCC,EAAalF,EAAOoH,YAAYJ,GAAS/B,EACzCG,EAAUD,KACVE,EAAWH,KACXtQ,EAAM+P,EAAS/V,OACVwW,GAAYC,IACbrF,EAASA,EAAOzR,UAAU,EAAG0W,GAAgBjF,EAAOzR,UAAU0W,EAAe,GAC7ErW,EAASoR,EAAOpR,OAChBqW,KACArQ,EAAM,GAENwQ,GAAWD,EAAYD,EACvBtQ,EAAMuQ,EACCD,EAAaC,IAChBE,GAAYzQ,EAAMsQ,EAClBtQ,EAAMsQ,EACCE,GAAWxQ,EAAMuQ,IACxBvQ,EAAMuQ,IAGVvQ,OACAnG,EAASiY,EAAMjY,EAAQmG,KAG3BnG,EAASiY,EAAMjY,GAEnByW,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,GAE3BtY,EADAuW,OAAoBC,MACdA,EACCD,OAAoBC,MACrBD,EAEAA,EAAaC,EAAYD,EAAaC,EAE5Ce,GAAStX,IACTD,EAAMuX,GAENA,MAAa,CAab,IAZArR,GAAQpG,GAAAA,GAAkBR,MAAMyX,GAChChB,EAAU7P,EAAM,GAChB8P,EAAW9P,EAAM,IAAMoR,EACvBrB,EAAgBF,EAAQ9V,OACxBiW,EAAiBF,EAAS/V,OACtBmX,GAAYtX,MAAe,IAC3BsX,GAAW,GAEftX,EAASuR,EAAOzR,UAAU,EAAG2X,GACzBH,IAAaf,IACbvW,GAAU,KAETmG,EAAMsR,EAAOtR,EAAMhG,EAAQgG,IAAO,CAEnC,GADAkQ,EAAK9E,EAAO3R,OAAOuG,GACfqQ,OACA,GAAItW,EAAMiG,EAAMgQ,EAAe,CAC3BnW,GAAUiW,CACV,YAUJ,IAPIS,OAAmBA,EAAYvQ,IAC/BoR,EAAcC,GAEdhB,EAAerQ,GAAOgQ,GAAiBK,EAAerQ,OACtDnG,GAAUiW,EACV9P,EAAMqQ,GAENA,IAAiBrQ,EAAK,CACtBnG,IAAWkW,EAAWc,EAAUQ,GAAStB,EACzC/P,GAAOjG,EAAMsW,EAAe,CAC5B,UAGJH,IAAOmC,GACPxY,GAAUqW,EACVkB,EAAclB,GACPA,IAAOkC,IACdvY,GAAUuX,GASlB,GANIjB,IACAtW,EAASkY,EAAalY,EAAQyX,GAASH,IAAaf,EAAoB,EAAI,GAAInP,KAAKnG,IAAIf,EAAKiW,EAAgBsB,GAAQxD,IAEtH/T,GAAOuX,IACPzX,GAAUuR,EAAOzR,UAAUI,EAAM,IAEjC2V,GAAcC,EAAW,CAEzB,IADA1P,EAAQoR,EACHrR,EAAM,EAAGhG,EAASH,EAAOG,OAAQgG,EAAMhG,EAAQgG,IAChDkQ,EAAKrW,EAAOJ,OAAOuG,GACnBC,GAAgB,MAAPiQ,GAAqB,MAAPA,EAAaT,EAASS,CAEjDrW,GAASoG,EAGb,GADAjG,EAASkX,EAASlX,OAEd,IAAKgG,EAAM,EAAGA,EAAMhG,EAAQgG,IACxBnG,EAASA,EAAON,QAAQ4Y,EAAajB,EAASlR,IAI1D,MAAOnG,GAxcd,GA0cOkY,GAiCAD,EAQAlG,EAlfA6C,EAAmB,gGAAiGgD,EAAuB,oBAAqBO,EAAgB,uCAAwCO,EAAc,MAAOlB,EAAQ,GAAIP,EAAQ,IAAKwB,EAAQ,IAAKF,EAAQ,IAAKC,EAAO,IAAKF,EAAc,KAAMM,EAAK,QAASC,KAAoB9G,QACtWtR,IAAM6N,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,QAuB7BzZ,GAAMuT,QAAU,SAAUmG,GACtB,GAA+BnG,GAA3B1F,EAAW7N,GAAM6N,QACrB,OAAI6L,KAAgBhb,EAKTmP,EAAS6F,SAJhBH,EAAUD,EAAYoG,IAAgB7L,EAASsK,GAC/C5E,EAAQM,SAAWN,EAAQO,UAAUC,SACrClG,EAAS6F,QAAUH,EAFnBA,IAORvT,GAAMsT,YAAcA,EACpBtT,GAAMyT,WAAaA,EACnBzT,GAAMuT,QAAQ4E,GA2SVV,EAAe,SAAUlY,EAAQyX,EAAOvX,EAAK+T,GAA9B,GAIXgC,GAASE,EACThQ,EAAK8K,EAAO7K,EACZgU,EALA5D,EAAexW,EAAO0G,QAAQuN,EAAagD,IAC3CoD,EAAapG,EAAa+E,UAAUhK,QACpCgK,EAAYqB,EAAWC,OAO3B,IAHApa,EAAMsW,OAAsBA,EAAetW,EAAM,EACjD+V,EAAUjW,EAAOF,UAAU2X,EAAOvX,GAClCiW,EAAgBF,EAAQ9V,OACpBgW,GAAiB6C,EAAW,CAG5B,IAFA7S,EAAMgQ,EACNlF,KACO9K,MAQH,GAPAC,EAAQ6P,EAAQnW,UAAUqG,EAAM6S,EAAW7S,GACvCC,GACA6K,EAAMX,KAAKlK,GAEfD,GAAO6S,EACPoB,EAAeC,EAAWC,QAC1BtB,EAAYoB,IAAiBjb,EAAYib,EAAepB,EACtC,IAAdA,EAAiB,CACb7S,EAAM,GACN8K,EAAMX,KAAK2F,EAAQnW,UAAU,EAAGqG,GAEpC,OAGR8P,EAAUhF,EAAMnI,UAAUrJ,KAAKwU,EAAawE,IAC5CzY,EAASA,EAAOF,UAAU,EAAG2X,GAASxB,EAAUjW,EAAOF,UAAUI,GAErE,MAAOF,IAEPiY,EAAQ,SAAU7R,EAAO8Q,GAMzB,MALAA,GAAYA,GAAa,EACzB9Q,GAAQA,GAAAA,GAAiB5G,MAAM,KAC/B4G,EAAQgB,KAAK6Q,QAAQ7R,EAAM,GAAK,KAAOA,EAAM,IAAMA,EAAM,GAAK8Q,EAAYA,KAC1E9Q,GAAQA,GAAAA,GAAiB5G,MAAM,KAC/B4G,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,KAAUjH,EAAYiH,EAAQ,IAEzC3F,GAAM8Q,OAAS,SAAUkJ,GACrB,GAAIC,GAASnX,SACb,OAAOkX,GAAI/a,QAAQgP,GAAc,SAAU7N,EAAO8Z,EAAOC,GACrD,GAAIxU,GAAQsU,EAAOG,SAASF,EAAO,IAAM,EACzC,OAAO5I,GAAS3L,EAAOwU,EAAoBA,EAAkB9a,UAAU,GAAK,OAGpFW,GAAMqa,eAAiB,SAAUvJ,GAI7B,MAH2B,QAAvBA,EAAOvC,MAAM,EAAG,KAChBuC,EAASA,EAAOvC,MAAM,EAAGuC,EAAOpR,OAAS,IAEtCoR,GAEX9Q,GAAMsa,eAAiB,WACnB,IACI,MAAOhV,UAASiV,cAClB,MAAOvK,GACL,MAAO1K,UAASmC,gBAAgB8S,gBAGxCva,GAAMwa,OAAShD,EACfxX,GAAMuB,YAAc,SAAU1B,EAAS4a,GACnC,MAAOjc,GAAEqB,GAASyB,WAAWmZ,IAAiB,IAAU,GAE5Dza,GAAMyB,aAAe,SAAU5B,EAAS4a,GACpC,MAAOjc,GAAEqB,GAAS2B,YAAYiZ,IAAiB,IAAU,GAE7Dza,GAAMsR,SAAWA,KAEpB,WA8CG,QAASoJ,GAAW/U,EAAOqR,EAAOvX,GAC9B,QAASkG,GAASqR,GAASrR,GAASlG,GAExC,QAASkb,GAAoBC,GACzB,MAAOA,GAAWzb,OAAO,GAE7B,QAAS0b,GAAeC,GACpB,MAAOtc,GAAEuc,IAAID,EAAaH,GAE9B,QAASK,GAAUpH,EAAMqH,GAChBA,GAA6B,KAApBrH,EAAKe,YACff,EAAKsH,SAAStH,EAAKe,WAAa,GAGxC,QAASwG,GAAW5X,GAEhB,IADA,GAAImC,GAAM,EAAGhG,EAAS6D,EAAK7D,OAAQ0b,KAC5B1V,EAAMhG,EAAQgG,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,EAASkI,GACxC,IAAK9V,EACD,MAAO,KAEX,IA4CySiQ,GAAI8F,EAAOhc,EAAQiX,EAASgF,EAAQC,EAAKC,EAASC,EAAeC,EAAeC,EAAaC,EAAeC,EAAS9b,EA5C1Z+b,EAAY,SAAU/b,GAElB,IADA,GAAIyC,GAAI,EACDiO,EAAOpL,KAAStF,GACnByC,IACA6C,GAKJ,OAHI7C,GAAI,IACJ6C,GAAO,GAEJ7C,GACRuZ,EAAY,SAAUtW,GACrB,GAAIuW,GAAKpS,EAAanE,IAAahC,OAAO,UAAYgC,EAAO,KAAM1F,EAAQuF,EAAM2W,OAAOC,EAAUzW,GAAM1F,MAAMic,EAC9G,OAAIjc,IACAA,EAAQA,EAAM,GACdmc,GAAYnc,EAAMV,OACX0a,SAASha,EAAO,KAEpB,MACRoc,EAAiB,SAAUhI,EAAOiI,GAEjC,IADA,GAAkCxF,GAAMyF,EAA2CC,EAA/E9Z,EAAI,EAAGnD,EAAS8U,EAAM9U,OAA0Bkd,EAAc,EAAGC,EAAW,EACzEha,EAAInD,EAAQmD,IACfoU,EAAOzC,EAAM3R,GACb6Z,EAAazF,EAAKvX,OAClBid,EAAWhX,EAAM2W,OAAOC,EAAUG,GAC9BD,IACAE,EAAWA,EAAS9X,eAEpB8X,GAAY1F,GAAQyF,EAAaE,IACjCA,EAAcF,EACdG,EAAWha,EAGnB,OAAI+Z,IACAL,GAAYK,EACLC,EAAW,GAEf,MACRC,EAAe,WACd,GAAI/V,IAAS,CAKb,OAJIpB,GAAMxG,OAAOod,KAAczL,EAAOpL,KAClC6W,IACAxV,GAAS,GAENA,GACR8M,EAAWN,EAAQO,UAAUC,SAAUgJ,EAAO,KAAMC,EAAQ,KAAMC,EAAM,KAAMhC,EAAQ,KAAM7G,EAAU,KAAM8I,EAAU,KAAMC,EAAe,KAAMzX,EAAM,EAAG6W,EAAW,EAAG3E,GAAU,EAAOhE,EAAO,GAAI7P,MAAQ0V,EAAkB5F,EAAS4F,iBAAmB,KAAM2D,EAAcxJ,EAAKc,aAU1R,KATK5D,IACDA,EAAS,KAEb6F,EAAU9C,EAASK,SAASpD,GACxB6F,IACA7F,EAAS6F,GAEb7F,EAASA,EAAO/R,MAAM,IACtBW,EAASoR,EAAOpR,OACTgG,EAAMhG,EAAQgG,IAEjB,GADAkQ,EAAK9E,EAAOpL,GACRkS,EACW,MAAPhC,EACAgC,GAAU,EAEVkF,QAGJ,IAAW,MAAPlH,EAAY,CAKZ,GAJA8F,EAAQS,EAAU,KACbtI,EAASwJ,aACVxJ,EAASwJ,WAAahC,EAAexH,EAASG,OAEtC,OAARiJ,GAAgBvB,EAAQ,EACxB,QAGJ,IADAuB,EAAMvB,EAAQ,EAAIU,EAAU,GAAKI,EAAe3I,EAASwJ,WAAoB,GAAT3B,EAAa,YAAc,UAAU,GAC7F,OAARuB,GAAgBvC,EAAWuC,EAAK,EAAG,IACnC,MAAO,UAER,IAAW,MAAPrH,EAAY,CAMnB,GALA8F,EAAQS,EAAU,KACbtI,EAASyJ,eACVzJ,EAASyJ,aAAejC,EAAexH,EAASI,SAEpD+I,EAAQtB,EAAQ,EAAIU,EAAU,GAAKI,EAAe3I,EAASyJ,aAAsB,GAAT5B,EAAa,YAAc,UAAU,GAC/F,OAAVsB,GAAkBtC,EAAWsC,EAAO,EAAG,IACvC,MAAO,KAEXA,IAAS,MACN,IAAW,MAAPpH,EAAY,CAGnB,GAFA8F,EAAQS,EAAU,KAClBY,EAAOX,EAAUV,GACJ,OAATqB,EACA,MAAO,KAEE,IAATrB,IAC+B,gBAApBjC,KACPA,EAAkB2D,EAAchD,SAASX,EAAiB,KAE9DsD,EAAOK,EAAcA,EAAc,IAAML,EACrCA,EAAOtD,IACPsD,GAAQ,UAGb,IAAW,MAAPnH,GAMP,GALAuG,EAAU,KACVlB,EAAQmB,EAAU,GACL,IAATnB,IACAA,EAAQ,GAEE,OAAVA,GAAkBP,EAAWO,EAAO,EAAG,IACvC,MAAO,UAER,IAAW,MAAPrF,GAGP,GAFAuG,EAAU,KACVlB,EAAQmB,EAAU,GACJ,OAAVnB,GAAkBP,EAAWO,EAAO,EAAG,IACvC,MAAO,UAER,IAAW,MAAPrF,GAGP,GAFAuG,EAAU,KACV/H,EAAUgI,EAAU,GACJ,OAAZhI,GAAoBsG,EAAWtG,EAAS,EAAG,IAC3C,MAAO,UAER,IAAW,MAAPwB,GAGP,GAFAuG,EAAU,KACVe,EAAUd,EAAU,GACJ,OAAZc,GAAoBxC,EAAWwC,EAAS,EAAG,IAC3C,MAAO,UAER,IAAW,MAAPtH,GASP,GARA8F,EAAQS,EAAU,KAClB/b,EAAQuF,EAAM2W,OAAOC,EAAUb,GAAOtb,MAAM6J,EAAa,IACzDkT,EAAef,EAAUV,GACJ,OAAjByB,IACAA,EAAejT,WAAW,KAAO9J,EAAM,GAAI,IAC3C+c,EAAend,GAAMwa,OAAO2C,EAAc,GAC1CA,GAAgB,KAEC,OAAjBA,GAAyBzC,EAAWyC,EAAc,EAAG,KACrD,MAAO,UAER,IAAW,MAAPvH,GASP,GARA8F,EAAQS,EAAU,KAClBL,EAAgBjI,EAASkB,GACzBgH,EAAgBlI,EAASmB,GACX,IAAV0G,IACAI,EAAgBjB,EAAeiB,GAC/BC,EAAgBlB,EAAekB,IAEnCJ,EAASa,EAAeT,IACnBJ,IAAWa,EAAeV,GAC3B,MAAO,UAER,IAAW,MAAPlG,EAAY,CAGnB,GAFAgG,GAAM,EACNF,EAAQS,EAAU,KACgB,MAA9BxW,EAAM2W,OAAOC,EAAU,GAAY,CACnCO,GACA,UAGJ,GADAjB,EAAUlW,EAAM2W,OAAOC,EAAU,GAAGnc,MAAMsb,EAAQ,EAAI6B,EAAqBC,IACtE3B,EACD,MAAO,KAWX,IATAA,EAAUA,EAAQ,GAAG9c,MAAM,KAC3Bid,EAAcH,EAAQ,GACtBI,EAAgBJ,EAAQ,IACnBI,GAAiBD,EAAYtc,OAAS,IACvC6c,EAAWP,EAAYtc,OAAS,EAChCuc,EAAgBD,EAAY3c,UAAUkd,GACtCP,EAAcA,EAAY3c,UAAU,EAAGkd,IAE3CP,EAAc5B,SAAS4B,EAAa,IAChCtB,EAAWsB,MAAkB,IAC7B,MAAO,KAEX,IAAIN,EAAQ,IACRO,EAAgB7B,SAAS6B,EAAe,IACpCwB,MAAMxB,IAAkBvB,EAAWuB,EAAe,EAAG,KACrD,MAAO,UAGZ,IAAW,MAAPrG,EACPgC,GAAU,EACVkF,QACG,KAAKA,IACR,MAAO,KAInB,OAAIrB,KAAW,QAAQxZ,KAAK0D,EAAM2W,OAAOC,IAC9B,MAEXL,EAAoB,OAAVjB,GAA8B,OAAZ7G,GAAoB8I,GAAW,KAC9C,OAATH,GAA2B,OAAVC,GAA0B,OAARC,GAAgBf,GACnDa,EAAOK,EACPJ,EAAQpJ,EAAKa,WACbwI,EAAMrJ,EAAKS,YAEE,OAAT0I,IACAA,EAAOK,GAEC,OAARH,IACAA,EAAM,IAGVtB,GAAUV,EAAQ,KAClBA,GAAS,IAETW,GACII,IACAf,IAAUe,GAEVC,IACA7H,IAAY6H,GAEhBtW,EAAQ,GAAI5B,MAAKA,KAAK6X,IAAImB,EAAMC,EAAOC,EAAKhC,EAAO7G,EAAS8I,EAASC,MAErExX,EAAQ,GAAI5B,MAAKgZ,EAAMC,EAAOC,EAAKhC,EAAO7G,EAAS8I,EAASC,GAC5DnC,EAAUrV,EAAOsV,IAEjB8B,EAAO,KACPpX,EAAM+X,YAAYX,GAElBpX,EAAM0O,YAAc4I,GAAOrB,IAAQld,EAC5B,KAEJiH,GAEX,QAASgY,GAA2BxW,GAChC,GAAIC,GAA+B,MAAxBD,EAAOmV,OAAO,EAAG,MAAkB,CAG9C,OAFAnV,GAASA,EAAO9H,UAAU,GAC1B8H,EAA6C,GAApCiT,SAASjT,EAAOmV,OAAO,EAAG,GAAI,IAAWlC,SAASjT,EAAO9H,UAAU,GAAI,IACzE+H,EAAOD,EAElB,QAASyW,GAAkBrK,GAA3B,GAGQsK,GAAgBC,EAAWpY,EAF3BhG,EAASa,GAAKC,IAAIud,EAAiBre,OAAQse,EAAiBte,QAC5DwU,EAAWX,EAAQM,SAASK,SAE5B+J,IACJ,KAAKvY,EAAM,EAAGA,EAAMhG,EAAQgG,IAAO,CAE/B,IADAmY,EAAiBE,EAAiBrY,GAC7BoY,EAAY,EAAGA,EAAYD,EAAene,OAAQoe,IACnDG,EAAQpO,KAAKqE,EAAS2J,EAAeC,IAEzCG,GAAUA,EAAQC,OAAOF,EAAiBtY,IAE9C,MAAOuY,GAEX,QAASE,GAAkBxY,EAAOsY,EAAS1K,EAASkI,GAApD,GAIQ/V,GACAkO,EACAlU,EACA0e,CANJ,IAAmC,kBAA/BhG,EAAelI,KAAKvK,GACpB,MAAOA,EAMX,IAJID,EAAM,EACNkO,EAAO,KAGPjO,GAAiC,IAAxBA,EAAMM,QAAQ,QACvB2N,EAAOyK,EAAWjH,KAAKzR,IAUnB,MARAiO,GAAOA,EAAK,GACZwK,EAAWE,EAAalH,KAAKxD,EAAKvU,UAAU,IAC5CuU,EAAO,GAAI7P,MAAKqW,SAASxG,EAAM,KAC3BwK,IACAA,EAAWT,EAA2BS,EAAS,IAC/CxK,EAAO5T,GAAMue,SAAS1P,MAAM+E,EAAM,GAClCA,EAAO5T,GAAMue,SAASC,QAAQ5K,EAAM,KAAQwK,IAEzCxK,CASf,KANAL,EAAUvT,GAAMyT,WAAWF,GACtB0K,IACDA,EAAUL,EAAkBrK,IAEhC0K,EAAUnQ,GAAQmQ,GAAWA,GAAWA,GACxCve,EAASue,EAAQve,OACVgG,EAAMhG,EAAQgG,IAEjB,GADAkO,EAAO4H,EAAW7V,EAAOsY,EAAQvY,GAAM6N,EAASkI,GAE5C,MAAO7H,EAGf,OAAOA,GAtWX,GAAI6K,GAAyB,UAAWC,EAAiB,mBAAoBlB,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,UAEL/T,GACC0U,EAAG,WACHC,EAAG,WACHC,EAAG,UACJzG,KAAoB9G,QA4T3BtR,IAAM8e,UAAY,SAAUnZ,EAAOsY,EAAS1K,GACxC,MAAO4K,GAAkBxY,EAAOsY,EAAS1K,GAAS,IAEtDvT,GAAM+e,eAAiB,SAAUpZ,EAAOsY,EAAS1K,GAC7C,MAAO4K,GAAkBxY,EAAOsY,EAAS1K,GAAS,IAEtDvT,GAAMoa,SAAW,SAAUzU,EAAO4N,GAC9B,GAAIxM,GAAS/G,GAAMkK,WAAWvE,EAAO4N,EAIrC,OAHIxM,KACAA,EAAkB,EAATA,GAENA,GAEX/G,GAAMkK,WAAa,SAAUvE,EAAO4N,EAASzC,GACzC,IAAKnL,GAAmB,IAAVA,EACV,MAAO,KAEX,UAAWA,KAAUwI,GACjB,MAAOxI,EAEXA,GAAQA,GAAAA,EACR4N,EAAUvT,GAAMyT,WAAWF,EAC3B,IAAkL/C,GAAO6E,EAArL9V,EAASgU,EAAQC,aAAc8D,EAAU/X,EAAO+X,QAASD,EAAW9X,EAAO8X,SAAUlC,EAASkC,EAASlC,OAAQ6J,EAAgB1H,EAAQnC,OAAQ0B,EAAWlR,EAAMM,QAAQ,IAC5K,OAAIyY,GAAezc,KAAK0D,IACpBA,EAAQuE,WAAWvE,EAAM1G,QAAQM,EAAO,KAAM,MAC1Cke,MAAM9X,KACNA,EAAQ,MAELA,GAEPkR,EAAW,EACJ,MAEPA,EAAWA,KAEXlR,EAAMM,QAAQkP,OAAgBrE,GAAUA,EAAOjM,cAAcoB,QAAQ,SACrE1G,EAAS8X,EACT7G,EAAQjR,EAAOoX,QAAQ,GAAG1X,QAAQ,IAAKkW,GAAQpW,MAAM,KACjD4G,EAAMM,QAAQuK,EAAM,QAAY7K,EAAMM,QAAQuK,EAAM,SACpD7K,EAAQA,EAAM1G,QAAQuR,EAAM,GAAI,IAAIvR,QAAQuR,EAAM,GAAI,IACtDqG,GAAW,IAERlR,EAAMM,QAAQ+Y,QACrB3J,GAAY,EACZ9V,EAAS+X,EACTnC,EAAS6J,GAEbrZ,EAAQA,EAAM1G,QAAQ,IAAK,IAAIA,QAAQkW,EAAQ,IAAIlW,QAAQwf,EAAwB,KAAK1f,MAAMQ,EAAO,KAAKN,QAAQwf,EAAwB,MAAMzf,KAAK,IAAIC,QAAQM,EAAO,KAAM,KAC9KoG,EAAQuE,WAAWvE,GACf8X,MAAM9X,GACNA,EAAQ,KACDkR,IACPlR,OAEAA,GAAS0P,IACT1P,GAAS,KAENA,OAqLd,WAAA,GAkBOsZ,GAQAC,EACAhf,EAA2Cif,EAAyCC,EA+FpFC,EAyGAxX,EAwDAyX,EAGAC,CA7RJtf,IAAQuf,WAAa9gB,EACrBuB,GAAQwf,UAAY,SAAUC,GAC1B,GAAKjC,MAAMxd,GAAQuf,aAAgBE,EAE5B,CACH,GAAyC3Y,GAArC4Y,EAAMra,SAASsa,cAAc,MAMjC,OALAD,GAAI/d,MAAMie,QAAU,oEACpBF,EAAIG,UAAY,SAChBxa,SAASya,KAAKC,YAAYL,GAC1B1f,GAAQuf,WAAazY,EAAS4Y,EAAIM,YAAcN,EAAIlZ,YACpDnB,SAASya,KAAKG,YAAYP,GACnB5Y,EARP,MAAO9G,IAAQuf,YAWvBvf,GAAQmG,MAAQ,SAAUvG,GACtB,MAAOrB,GAAEqB,GAASsgB,QAAQ,UAAUzgB,OAAS,GAE7Cuf,EAAQ3Z,SAASsa,cAAc,QACnC,KACIX,EAAMa,UAAY,qBAClB7f,GAAQmgB,gBAAiB,EAC3B,MAAOpQ,GACL/P,GAAQmgB,gBAAiB,EAE7BngB,GAAQogB,MAAQ,gBAAkB5hB,GAC9BygB,EAAW5Z,SAASmC,gBAAgB7F,MACpC1B,EAAcD,GAAQC,aAAc,EAAOif,EAAalf,GAAQkf,YAAa,EAAOC,EAAe,eAAiB3gB,GAAS6hB,YAAYxR,aAC7I7O,GAAQsgB,QAAU,mBAAqB9hB,IAAU,OAAS,IAAIA,GAAO+hB,iBAAqB,kBAAoBtB,IAAY,iBAAmBA,GAC7Ijf,GAAQwgB,WAAa,YAAcvB,IAAY,kBAAoBA,IAAY,cAAgBA,GAC/FzZ,IACI,MACA,SACA,IACA,MACD,WAAA,GAGSib,GAFJC,EAAS5Y,GAAAA,KAAiB6Y,QAAwB3B,GAAMrd,MAAM+e,EAAS,gBAAkBpY,EAC7F,IAAIqY,SAAyB3B,GAAMrd,MAAM+e,EAAS,eAAiBpY,GAW/D,MAVImY,GAAYC,EAAO9b,cACvBsa,GACIpf,IAAkB,MAAb2gB,EAAoB,IAAMA,EAAY,IAAM,GACjDC,OAAQA,EACRE,MAAqB,MAAdH,GAAmC,WAAdA,EAAyBA,EAAY,IAEjEE,IACA1gB,EAAcif,EACdjf,EAAY2gB,MAAQ3gB,EAAY2gB,MAAQ3gB,EAAY2gB,MAAQ,gBAAkB,kBAE3E,IAGf5B,EAAQ,KACRhf,GAAQkf,WAAaA,EACrBlf,GAAQC,YAAcA,EACtBD,GAAQ6gB,iBAAmBriB,EAAOqiB,mBAAqBpiB,EAAY,EAAID,EAAOqiB,gBAC9E,KACI7gB,GAAQ8gB,YAActiB,EAAO6C,YAAc7C,EAAOuiB,OAASviB,EAAOuiB,OAAOC,WAAaxiB,EAAOyiB,WAC7FjhB,GAAQkhB,aAAe1iB,EAAO+C,aAAe/C,EAAOuiB,OAASviB,EAAOuiB,OAAOI,YAAc3iB,EAAO4iB,YAClG,MAAOrR,GACL/P,GAAQ8gB,YAActiB,EAAOuiB,OAAOC,WACpChhB,GAAQkhB,aAAe1iB,EAAOuiB,OAAOI,YAEzCnhB,GAAQqhB,SAAW,SAAUC,GAAV,GACCC,GA+BPnd,EA/BLod,GAAK,EAAqBrhB,KAAYshB,GAAmB,iBAAiBzf,KAAKsf,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,gBACRlZ,OAAQ,UAEhB,KAAShC,IAASsd,GACd,GAAIA,EAASld,eAAeJ,KACxBjE,EAAQmhB,EAAGnhB,MAAMuhB,EAAStd,KACf,CACP,GAAa,WAATA,GAAsB,WAAa+e,WACnC,OAAO,CAEX3B,MACAA,EAAG4B,OAAShf,EACZod,EAAGoB,OAASze,EAAOC,EAAOue,GAAe,GACzCnB,EAAGpgB,QAAU+C,EAAOmd,EAAIuB,EAAY,WACpCrB,EAAGxK,KAAO7S,EAAOC,EAAOoe,GACxBhB,EAAGA,EAAGxK,OAAQ,EACdwK,EAAG6B,aAAeljB,EAAM,GACxBqhB,EAAGD,aAAephB,EAAM,GAAGnB,QAAQ,IAAK,KACxCuiB,EAAeC,EAAGD,aAAaviB,QAAQ,IAAK,IAAIqd,OAAO,EAAG,GAC1DmF,EAAG8B,YAAc9B,EAAG6B,aAAe9B,EAAmB3d,MAAM,GAAK2d,EAAa9hB,OAAS,EAAI8hB,EAAa9hB,OAAS,IAAIV,KAAK,KAC1HyiB,EAAG+B,cAAiB/kB,GAAOglB,WAAatf,UAAoB1F,GAAO+kB,UAAYrf,GAC/Esd,EAAGiC,QAAUjlB,EAAO2kB,UAAUO,YAAc,mBAAmB1hB,KAAKxD,EAAOmlB,SAASC,WAAapC,EAAG+B,QAChG/B,EAAGK,UAAY7hB,GAAQ6gB,iBAAmB,KAAOW,EAAG8B,YAAc,KAAO7B,KAAqBzhB,GAAQ8gB,YAAc,KAAO9gB,GAAQkhB,aAAe,OAClJM,EAAGoB,OAASxe,EAEhB,OAIZ,MAAOod,IAEPpC,EAAWpf,GAAQof,SAAWpf,GAAQqhB,SAAS8B,UAAUU,WAC7D7jB,GAAQ8jB,mBAAqB1E,EAASuC,GAAKZ,OAAOjgB,MAAQ,IAAM,EAChEd,GAAQ+jB,oBAAqB,GACzB3E,EAASqD,KAAOrD,EAASyC,SAAWzC,EAASiE,aAAe,GAAKjE,EAASuC,MAC1E3hB,GAAQ+jB,mBAAqB3E,GAEjCpf,GAAQgkB,aAAe,WACnB,GAAIhkB,GAAQogB,MAAO,CACf,GAAIhB,EAASqD,IACT,OAAO,CAEX,IAAIrD,EAASyC,QACT,OAAK7hB,GAAQoB,QAAQke,UAGjBtf,GAAQoB,QAAQmB,QAAU,OAGrBhE,EAAE,uBAAuByM,KAAK,YAAc,IAAI7K,MAAM,qBAGvE,OAAO,GAEXH,GAAQikB,qBAAuBjkB,GAAQogB,SAAWpgB,GAAQof,SAASqD,KAAOziB,GAAQof,SAASyC,SAC3F7hB,GAAQkkB,cAAgB,SAAU5C,GAAV,GASXld,GARLhD,GAAU,EAAOjB,KAAY0iB,GACzBsB,KAAM,uBACN/d,OAAQ,yBACRge,OAAQ,yBACRC,MAAO,sCACPhiB,KAAM,mCACNiE,QAAS,iCAEjB,KAASlC,IAASye,GACd,GAAIA,EAAWre,eAAeJ,KAC1BjE,EAAQmhB,EAAGnhB,MAAM0iB,EAAWze,KACjB,CACPhD,KACAA,EAAQgD,IAAS,EACjBhD,EAAQjB,EAAM,GAAGyE,cAAc9F,MAAM,KAAK,GAAGA,MAAM,KAAK,KAAM,EAC9DsC,EAAQmB,QAAU4X,SAAS9U,SAASga,cAAgBlf,EAAM,GAAI,GAC9D,OAIZ,MAAOiB,IAEXpB,GAAQoB,QAAUpB,GAAQkkB,cAAcf,UAAUU,WAClD7jB,GAAQskB,sBAAwB,WAC5B,GAAIC,IACAC,OAAMnf,SAASof,uBAAwBpf,SAASof,sBAAsB,QACtEC,MAAKrf,SAASof,uBAAwBpf,SAASof,sBAAsB,OACrEE,QAAOtf,SAASof,uBAAwBpf,SAASof,sBAAsB,SAS3E,OAPIzkB,IAAQoB,QAAQke,SAChBiF,EAASI,OAAQ,EACb3kB,GAAQoB,QAAQmB,SAAW,KAC3BgiB,EAASC,MAAO,EAChBD,EAASG,KAAM,IAGhBH,GAEXvkB,GAAQ4kB,UAAY5kB,GAAQskB,wBAC5BtkB,GAAQ6kB,UAAY,WAAA,GAERzjB,GACA0jB,EACAC,CAHR,KAOI,MANI3jB,GAAUpB,GAAQoB,QAClB0jB,EAAsB,EACtBC,EAAQ1f,SAASmC,gBACjBpG,EAAQiB,MAA2B,IAAnBjB,EAAQmB,SAAiBwiB,EAAMC,aAAeD,EAAME,eAAiBjlB,GAAQogB,QAC7F0E,EAAsB9kB,GAAQwf,aAE3Bxf,GAAQogB,MAAQ2E,EAAMte,YAAcjI,EAAOyiB,WAAa7f,EAAQiB,MAAQjB,EAAQmB,SAAW,KAAO6E,KAAO5I,GAAQ6G,SAASmC,gBAAgBwY,YAAc8E,IAAwB1d,KAAO5I,GAAQyiB,WAAa,EACrN,MAAOlR,GACL,MAAO,KAGf/P,GAAQklB,iBAAoD,IAA1BjG,EAASkG,iBAAkCnlB,GAAQoB,QAAQiB,MAAQrC,GAAQoB,QAAQmB,QAAU,GAC9H,SAAUnB,GACP,GAAIgkB,GAAW,GAAIC,EAAa9mB,EAAE8G,SAASmC,iBAAkB6b,EAAelJ,SAAS/Y,EAAQmB,QAAS,GAClGnB,GAAQiB,KACR+iB,EAAW,KACJhkB,EAAQkF,QACf8e,EAAW,KACJhkB,EAAQgjB,OACfgB,EAAW,SACJhkB,EAAQgF,OACfgf,EAAW,SACJhkB,EAAQijB,MACfe,EAAW,QACJhkB,EAAQ+iB,OACfiB,EAAW,QAEXA,IACAA,EAAW,KAAOA,EAAW,MAAQA,EAAW/B,GAEhDrjB,GAAQof,WACRgG,GAAY,aAEXplB,GAAQwgB,aACT4E,GAAY,iBAEhBC,EAAWjjB,SAASgjB,IACtBplB,GAAQoB,SACVpB,GAAQslB,aAAejgB,SAASmC,gBAAgB+d,iBAC5C3d,EAAQvC,SAASsa,cAAc,SACnC3f,GAAQwlB,YAAc,eAAiB5d,GACvC5H,GAAQylB,oBAAsB,oBAAsB7d,GACpD5H,GAAQ4H,MAAQ,WAeZ,IAfY,GAcRZ,GAbA0e,GACA,SACA,OACA,OACA,QACA,OACA,WACA,kBAEAjmB,EAASimB,EAAMjmB,OACfiG,EAAQ,OACRoB,KACArB,EAAM,EAEHA,EAAMhG,EAAQgG,IACjBuB,EAAO0e,EAAMjgB,GACbmC,EAAM+d,aAAa,OAAQ3e,GAC3BY,EAAMlC,MAAQA,EACdoB,EAAOE,EAAKhI,QAAQ,IAAK,KAAsB,SAAf4I,EAAMZ,MAAmBY,EAAMlC,QAAUA,CAE7E,OAAOoB,MAEXc,EAAMjG,MAAMie,QAAU,cACtB5f,GAAQ4lB,WAAahe,EAAMjG,MAAMikB,SACjChe,EAAQ,KACR5H,GAAQ6lB,WAAa,WAAA,GAMRjjB,GALLkjB,EAAY,IACZC,IACI9L,MAAO,EACP+L,MAAO,KAEf,KAASpjB,EAAI,EAAGA,EAAIkjB,EAAWljB,IAC3BmjB,EAAOnW,MACHqK,MAAOrX,EACPojB,MAAO,KAMf,OAHAD,GAAOE,KAAK,SAAUvb,EAAGC,GACrB,MAAOD,GAAEsb,MAAQrb,EAAEqb,MAAQ,EAAItb,EAAEsb,MAAQrb,EAAEqb,SAAa,IAEjC,IAApBD,EAAO,GAAG9L,SAErBja,GAAQkmB,gBAAkB/G,EAAagH,uBAAyBhH,EAAaiH,oBAAsBjH,EAAakH,mBAAqBlH,EAAamH,kBAAoBnH,EAAa+G,iBAAmB/G,EAAavD,SAAW,SAAU/P,GAEpO,IADA,GAAI0a,GAAWlhB,SAASmhB,kBAAoB1e,KAAK2e,YAAcphB,UAAUmhB,iBAAiB3a,OAAkBtN,EAAEsN,GAAWjJ,EAAI2jB,EAAS9mB,OAC/HmD,KACH,GAAI2jB,EAAS3jB,IAAMkF,KACf,OAAO,CAGf,QAAO,GAEX9H,GAAQ0mB,UAAYloB,EAAOmoB,SAAWnoB,EAAOmoB,QAAQD,UACjDrH,EAAeha,SAASga,aAC5Brf,GAAQ4mB,WAAa,gBAAkBpoB,MAAYwB,GAAQoB,QAAQiB,QAAUgd,GAAgBA,GAAgB,IAC7Grf,GAAQ6mB,eAAiB,mBAAqBroB,GAAO6G,SACjDia,EAAStf,GAAQoB,QAAQke,OAC7Btf,GAAQsH,YAAcgY,GAAU9gB,EAAOsoB,eACvC9mB,GAAQqH,UAAYiY,GAAU9gB,EAAOuoB,aACrC/mB,GAAQgnB,oBAAsB5H,IAAapf,GAAQogB,OAASpgB,GAAQsH,YAActH,GAAQqH,aA6B1FqF,GACAlM,MAAQ4H,QAAS,SACjB3H,OAAS2H,QAAS,QAClB6e,MAAQ7e,QAAS,MACjB8e,IAAM9e,QAAS,QACfhB,KAAOgB,QAAS,UAChB1H,QAAU0H,QAAS,OACnB+e,MAAQ/e,QAAS,OACjBgf,KAAOhf,QAAS,OAYhBP,KACJtJ,EAAEiK,OAAOX,GACLwf,SAAS,EACTrf,QAAS,SAAUpI,GACfkI,KAAKlI,QAAUrB,EAAEqB,IAErBqJ,QAAS,SAAUrJ,EAASsI,GACnBtI,EAAQgC,GAAG,aACZhC,EAAQE,KAAM+B,QAASjC,EAAQ0D,KAAK,eAAiB,UAAWxD,IAAI,WAEpEoI,EAAQU,MACRhJ,EAAQ0D,KAAK,aAAc1D,EAAQE,IAAI,YAAY8I,OAEnDV,EAAQO,MACRP,EAAQO,OAERP,EAAQW,kBACRX,EAAQW,iBAAiBjJ,GAE7BA,EAAQ0nB,WAEZC,QAAS,WACLzf,KAAKuf,SAAU,EACfvf,KAAKmB,QAAUnB,KAAK0f,aAExBC,OAAQ,WACJ3f,KAAKuf,SAAU,EACfvf,KAAKmB,QAAUnB,KAAK4f,mBAG5B7f,EAAQ2f,YAAc3f,EAAQoB,QAsDxB,gBAAkB1K,GAAEwN,IACtBvD,GAAOjK,EAAEwN,IACL4b,UAAW,SAAUC,EAAYC,GAC7B,MAAO/f,MAAKggB,KAAKF,EAAYC,IAEjCE,aAAc,SAAU7f,EAASC,EAAUC,EAASC,GAChD,MAAOS,GAAQhB,KAAMI,EAASC,EAAUC,EAASC,IAErD2f,cAAe,SAAU7e,EAASjB,GAC9B,MAAOnI,IAAMmJ,YAAYpB,KAAMqB,EAASjB,GAAS,IAErD+f,iBAAkB,SAAU9e,EAASjB,GACjC,MAAOnI,IAAMmJ,YAAYpB,KAAMqB,EAASjB,GAAS,IAErDggB,iBAAkB,SAAU/e,EAASjB,EAASigB,GAC1C,MAAOpoB,IAAMmJ,YAAYpB,KAAMqB,EAASjB,EAASigB,MAIzD7e,EAAY,KAAMC,EAAW,KAAME,EAAc,KAAMC,EAAa,KAAMF,EAAW,KAIrFmD,EAAc,SAAUoD,GACxB,MAAOA,GAAEqY,QAETpoB,GAAQogB,QACRzT,EAAc,SAAUoD,GACpB,GAAIsY,GAAU,iBAAmBtY,GAAIA,EAAEuY,cAAcC,eAAiB,kBAAoBxY,GAAIA,EAAEwY,eAAiB,IACjH,OAAOF,GAAUhjB,SAASmjB,iBAAiBH,EAAQ,GAAGI,QAASJ,EAAQ,GAAGK,SAAW3Y,EAAEqY,QAE3F5iB,IACI,QACA,YACA,aACA,UACA,YACA,YACA,OACD,SAAUqT,EAAGnT,GACZnH,EAAEwN,GAAGrG,GAAS,SAAUijB,GACpB,MAAO7gB,MAAKoH,KAAKxJ,EAAOijB,OAIhC3oB,GAAQogB,MACHpgB,GAAQof,UAQTpf,GAAQ4oB,UAAY,aACpB5oB,GAAQ6oB,QAAU,WAClB7oB,GAAQ8oB,UAAY,YACpB9oB,GAAQ+oB,YAAc,cACtB/oB,GAAQgpB,MAAQ,WAChBhpB,GAAQipB,OAAS,sBAZjBjpB,GAAQ4oB,UAAY,uBACpB5oB,GAAQ6oB,QAAU,mBAClB7oB,GAAQ8oB,UAAY,sBACpB9oB,GAAQ+oB,YAAc,yBACtB/oB,GAAQgpB,MAAQ,QAChBhpB,GAAQipB,OAAS,UASdjpB,GAAQqH,UACfrH,GAAQ8oB,UAAY,cACpB9oB,GAAQ4oB,UAAY,cACpB5oB,GAAQ6oB,QAAU,YAClB7oB,GAAQ+oB,YAAc,gBACtB/oB,GAAQgpB,MAAQ,YAChBhpB,GAAQipB,OAAS,4BACVjpB,GAAQsH,YACftH,GAAQ8oB,UAAY,gBACpB9oB,GAAQ4oB,UAAY,gBACpB5oB,GAAQ6oB,QAAU,cAClB7oB,GAAQ+oB,YAAc,kBACtB/oB,GAAQgpB,MAAQ,cAChBhpB,GAAQipB,OAAS,6BAEjBjpB,GAAQ8oB,UAAY,YACpB9oB,GAAQ4oB,UAAY,YACpB5oB,GAAQ6oB,QAAU,UAClB7oB,GAAQ+oB,YAAc,aACtB/oB,GAAQgpB,MAAQ,QAChBhpB,GAAQipB,OAAS,UAEjBrc,EAAiB,SAAUsc,EAAS/Y,GAChC,GAA+B8J,GAAOxU,EAAKhG,EAAQ+O,EAA/C1H,EAASqJ,GAAa,IAAiCsL,EAAQ,CACnE,KAAKhW,EAAM,EAAGhG,EAASypB,EAAQzpB,OAAQgG,EAAMhG,EAAQgG,IACjD+I,EAAS0a,EAAQzjB,GACF,KAAX+I,IACAyL,EAAQzL,EAAOxI,QAAQ,KACT,IAAViU,IACIA,MACAzL,EAAS,IAAMA,GAEfiN,IACAjN,EAAS,IAAMA,EAAOpP,UAAU,EAAG6a,GAAS,UAAYzL,EAAOpP,UAAU6a,KAGjFwB,IACA3U,GAAU0H,GAAU/I,EAAMhG,EAAS,EAAI,UAAY,KAG3D,OAAWmE,OAAM6X,GAAO1c,KAAK,KAAO+H,GACrC+F,EAAa,mBACpBrE,GAAOzI,IACHopB,WACAC,8BACAC,GAAItpB,GAAMspB,OACVthB,GAAIhI,GAAMgI,IAAMA,EAChBF,QAAS9H,GAAM8H,SAAWA,EAC1ByhB,OAAQvpB,GAAMupB,WACdhmB,KAAMvD,GAAMuD,SACZimB,QAASxpB,GAAMwpB,YACfC,QAASzpB,GAAMypB,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,KAEhBhrB,QAASD,GAAMC,SAAWA,GAC1B8I,QAAS/I,GAAM+I,SAAWA,EAC1BiB,GAAI,GACJiB,KAAM,SAAUtF,GACZ,MAAO,QAAU3F,GAAMgK,GAAKrE,GAEhC/F,WAAYA,EACZgB,KAAMA,EACN+B,WAAYA,EACZuC,kBAAmBA,EACnBgmB,cAAelrB,GAAMkrB,kBACrBnlB,aAAcA,EACdI,WAAYA,EACZL,KAAMA,EACNhB,YAAaA,EACbJ,UAAWA,EACXsC,UAAWhH,GAAMgH,WAAaA,EAC9BY,aAAc5H,GAAM4H,cAAgBA,EACpCuB,YAAanJ,GAAMmJ,aAAeA,EAClCwD,WAAY3M,GAAM2M,YAAcA,EAChCP,WAAYA,EACZzN,MAAOA,EACPsN,SAAUA,EACVzB,SAAUuD,GAAM9B,EAASsE,QAAStE,GAClCqE,OAAQvC,GAAM9B,EAASqE,OAAQrE,GAC/BiH,UAAWnF,GAAMC,GAAKkF,UAAWlF,IACjCpB,YAAaA,EACbtD,WAAYA,EACZ6hB,WAAY,SAAUC,GAClB,MAAOA,KAAQte,EAAW7K,KAAKmpB,IAEnC5f,KAAM,SAAU6f,EAAYC,EAAMlb,GAkB9B,MAjBAib,GAAaA,GAAc,SAChBC,IAAQ/iB,KACf6H,EAAYkb,EACZA,GAAO,GAEXlb,EAAYA,GAAa,IACrBib,GAAuC,MAAzBA,EAAWlsB,OAAO,KAChCksB,EAAa,IAAMA,GAEnBC,GACAD,EAAaA,EAAWpsB,QAAQ,sBAAuB,iBACvDosB,EAAaA,EAAWpsB,QAAQ,sBAAuB,iBACvDosB,EAAaxe,EAAewe,EAAWtsB,MAAM,KAAMqR,GACnDib,EAAaA,EAAWpsB,QAAQ,aAAc,MAE9CosB,EAAajb,EAAYib,EAEtBA,GAEXE,OAAQ,SAAUF,EAAYC,GAC1B,GAAIxkB,GAAMukB,EAAaC,CACvB,OAAOjd,IAAYvH,GAAOuH,GAAYvH,IAAYuD,SAAS,IAAK,UAAYrK,GAAMwL,KAAK6f,EAAYC,KAEvGE,OAAQ,SAAUH,GACd,MAAO/c,IAAY+c,GAAc/c,GAAY+c,IAAmBhhB,SAAS,UAAWrK,GAAMwL,KAAK6f,GAAc,WAEjHI,SAAU,SAAUJ,GAChB,OACIK,IAAK1rB,GAAMurB,OAAOF,GAClBM,IAAK3rB,GAAMwrB,OAAOH,KAG1BO,KAAM,WACF,GAAa/oB,GAAGgpB,EAAZC,EAAK,EACT,KAAKjpB,EAAI,EAAGA,EAAI,GAAIA,IAChBgpB,EAAyB,GAAhBtrB,GAAKsrB,SAAgB,EACrB,GAALhpB,GAAe,IAALA,GAAgB,IAALA,GAAgB,IAALA,IAChCipB,GAAM,KAEVA,IAAY,IAALjpB,EAAU,EAAS,IAALA,EAAmB,EAATgpB,EAAa,EAAIA,GAAQva,SAAS,GAErE,OAAOwa,IAEXC,aAAc,SAAUC,GACpB,MAAOA,GAAK/sB,QAAQ,SAAU,IAAMe,GAAMiL,KAAK,QAAU,SAASsD,MAAM,OAE5E0d,kBAAmB,SAAUC,GAAV,GAGFrpB,GAFTspB,EAAYD,EAAWntB,MAAM,IACjC,IAAIotB,EACA,IAAStpB,EAAI,EAAGA,EAAIspB,EAAUzsB,OAAQmD,IACd,QAAhBspB,EAAUtpB,KACVspB,EAAUtpB,GAAKspB,EAAUtpB,GAAG5D,QAAQ,8BAA+B,SAI/E,OAAOktB,GAAUntB,KAAK,KAAKC,QAAQ,SAAU,oBAAoBsP,MAAM,OAE3E6d,iBAAkB,SAAUpc,GACxB,MAAO,mCAAmC/N,KAAK+N,EAAEqY,OAAOgE,UAE5DC,mBAAoB,SAAU1D,GAC1B,IAAK,GAAI/lB,GAAI,EAAG0pB,EAAMvsB,GAAMopB,QAAQ1pB,OAAQmD,EAAI0pB,EAAK1pB,IACjD+lB,EAAS5oB,GAAMopB,QAAQvmB,GAE3B7C,IAAMqpB,2BAA2BxZ,KAAK+Y;EAE1C4D,aAAc,SAAUC,EAASxlB,GAC7B,GAAIylB,GAAUjuB,EAAOiuB,SAChB1sB,GAAM2sB,aAAiC,IAAXD,GAA0BA,EAAQE,KAC/DF,EAAQzlB,GAAQ,OAAOwlB,MAI/B1f,EAASX,EAAW3D,QACpBC,KAAM,SAAU7I,EAASsI,GAAnB,GAKE0kB,GAJAle,EAAO5G,IACX4G,GAAK9O,QAAUG,GAAM8sB,OAAOjtB,GAAS2P,QAAQb,GAC7CA,EAAKoe,QAAQ,OAAQ5kB,GACrBiE,EAAWJ,GAAGtD,KAAKwH,KAAKvB,GACpBke,EAAa1kB,EAAUA,EAAQ0kB,WAAa,KAC5CA,IACA1kB,EAAUM,MAAWN,GAAW0kB,iBAEpC1kB,EAAUwG,EAAKxG,QAAUM,IAAO,KAAUkG,EAAKxG,QAASA,GACpD0kB,IACA1kB,EAAQ0kB,WAAaA,GAEpBle,EAAK9O,QAAQoL,KAAKjL,GAAMiL,KAAK,UAC9B0D,EAAK9O,QAAQoL,KAAKjL,GAAMiL,KAAK,SAAU9C,EAAQ8O,MAAQ,IAAIpS,eAE/D8J,EAAK9O,QAAQ0D,KAAK,QAAU4E,EAAQwY,OAASxY,EAAQ8O,KAAMtI,GAC3DA,EAAKQ,KAAKR,EAAKc,OAAQtH,IAE3BsH,UACAtH,SAAWwY,OAAQ,IACnBqM,kBAAmB,WACf,QAASjlB,KAAKlI,QAAQ,GAAGotB,oBAE7BC,UAAW,SAAU7E,GACjBA,EAASA,GAAUtgB,KAAK5G,OACxB,IAAItB,GAAUkI,KAAKlI,QAASstB,EAAW,WAAYC,EAAW/E,EAAOpd,KAAKkiB,IAAattB,EAAQoL,KAAKkiB,EACpGttB,GAAQwtB,WAAWF,GACnB9E,EAAOpd,KAAKkiB,EAAW1P,MAAM2P,GAAuB,EAAXA,IAE7CE,WAAY,SAAUnlB,GAClBJ,KAAKwlB,WAAWplB,GAChB3J,EAAEiK,OAAOV,KAAKI,QAASA,IAE3BolB,WAAY,SAAUplB,GAElB,IADA,GAAuD6H,GAAnDrB,EAAO5G,KAAMrC,EAAM,EAAGhG,EAASiP,EAAKc,OAAO/P,OACxCgG,EAAMhG,EAAQgG,IACjBsK,EAAIrB,EAAKc,OAAO/J,GACZiJ,EAAKxG,QAAQ6H,IAAM7H,EAAQ6H,IAC3BrB,EAAKiB,OAAOI,EAAGrB,EAAKxG,QAAQ6H,GAGpCrB,GAAKQ,KAAKR,EAAKc,OAAQtH,IAE3B+gB,OAAQ,SAAUsE,GACd,GAAI1nB,GAAOiC,KAAK0lB,UAAWC,EAAc3lB,KAAK4lB,OAC1CH,IAAU1nB,EAAK/E,MAAQ,GAAK+E,EAAK9E,OAAS,MAAQ0sB,GAAe5nB,EAAK/E,QAAU2sB,EAAY3sB,OAAS+E,EAAK9E,SAAW0sB,EAAY1sB,WACjI+G,KAAK4lB,MAAQ7nB,EACbiC,KAAK6lB,QAAQ9nB,EAAM0nB,GACnBzlB,KAAKgI,QAAQ,SAAUjK,KAG/B2nB,QAAS,WACL,MAAOztB,IAAM6tB,WAAW9lB,KAAKlI,UAEjCiG,KAAM,SAAUA,GACZ,MAAKA,IAGDiC,KAAK+lB,QAAQhoB,GAAbiC,GAFOA,KAAK0lB,WAKpBK,QAAStvB,EAAEmK,KACXilB,QAASpvB,EAAEmK,KACXolB,QAAS,WACL,GAAIpf,GAAO5G,IACX4G,GAAK9O,QAAQmuB,WAAW,QAAUrf,EAAKxG,QAAQwY,OAAShS,EAAKxG,QAAQ8O,MACrEtI,EAAK9O,QAAQmuB,WAAW,WACxBrf,EAAKiB,UAETqe,SAAU,WACNlmB,KAAKgmB,WAEThB,QAAS,aAETmB,mBAAoB,SAAUtF,GAC1B7gB,KAAKomB,aAAc,EACnBvF,EAAS1Y,KAAKnI,MACdA,KAAKomB,aAAc,KAGvBnhB,GAAkBD,EAAOtE,QACzB2lB,UAAW,WACP,MAAOrmB,MAAK8kB,WAAWwB,YAE3BC,cAAe,SAAUC,GACrB,GAAI5f,GAAO5G,IACX4G,GAAKoe,QAAQwB,EAAK,WACd,OACIC,SAAU7f,EAAK8f,QACflrB,KAAM/E,EAAEuc,IAAIpM,EAAKyf,YAAa,SAAUM,GACpC,OAASA,SAAUA,WAMvC1uB,GAAM6tB,WAAa,SAAUhuB,EAASguB,GAClC,GAAIc,GAAa9uB,EAAQ,EAIzB,OAHIguB,IACAhuB,EAAQE,IAAI8tB,IAGZ9sB,MAAO4tB,EAAW1O,YAClBjf,OAAQ2tB,EAAWC,eAG3B5uB,GAAM6uB,OAASlmB,GACX4B,GAAiB,aAAcJ,GAAa,oDAAqDC,GAAmB,wCAAyCN,GAAa,WAyC9K9J,GAAM8uB,WAAa,SAAUjvB,EAASsI,EAAS4mB,GAA5B,GACXhoB,GAAQ8C,EAAQkB,EAAQrF,EAAKhG,EAAQssB,EAAMrmB,EAAOknB,EAAYmC,EAAUC,EAiBxE1rB,EAA0B2rB,EAMrBpoB,CAfT,IAPKioB,EAEMA,EAAMA,QACbA,EAAQA,EAAMA,OAFdA,EAAQ/uB,GAAMspB,GAAGyF,MAIrBlvB,EAAUA,EAAQsvB,SAAWtvB,EAAUA,EAAQ,GAC/CmsB,EAAOnsB,EAAQkK,aAAa,QAAU/J,GAAMgK,GAAK,QACjD,CAGAglB,EAAWhD,EAAK/lB,QAAQ,UAEpB8E,EADAikB,EACSD,EAAM/C,GAENhsB,GAAMurB,OAAOS,GAAMvtB,GAE5B8E,EAAO/E,EAAEqB,GAAS0D,OAAQ2rB,EAAYnkB,EAAS,QAAUA,EAAOiB,GAAG7D,QAAQwY,OAAS5V,EAAOiB,GAAG7D,QAAQ8O,KAAO,GAE7GgY,EADAD,EACsBlrB,OAAO,WAAakoB,EAAO,IAAK,KAEhCloB,OAAO,IAAMorB,EAAY,IAAK,IAExD,KAASpoB,IAAOvD,GACZ,GAAIuD,EAAI1G,MAAM6uB,GAAkB,CAC5B,GAAInoB,IAAQooB,EAGR,MAAO3rB,GAAKuD,EAFZC,GAASxD,EAAKuD,GAM1B,GAAKiE,EAAL,CAYA,IATA8hB,EAAajjB,EAAY/J,EAAS,cAClCsI,EAAU3J,EAAEiK,UAAW6B,EAAazK,EAASkL,EAAOiB,GAAG7D,SAAUA,GAC7D0kB,IAEI1kB,EAAQ0kB,iBADDA,KAAetkB,GACDvI,GAAMurB,OAAOsB,GAAYpuB,GAEzBouB,GAGxBnnB,EAAM,EAAGhG,EAASqL,EAAOiB,GAAGyD,OAAO/P,OAAQgG,EAAMhG,EAAQgG,IAC1DmE,EAASkB,EAAOiB,GAAGyD,OAAO/J,GAC1BC,EAAQiE,EAAY/J,EAASgK,GACzBlE,IAAUjH,IACVyJ,EAAQ0B,GAAU7J,GAAMurB,OAAO5lB,GAAOlH,GAQ9C,OALKsI,GAEOvI,EAAE4wB,cAAcjnB,IACxBpB,EAAOumB,WAAWnlB,GAFlBpB,EAAS,GAAIgE,GAAOlL,EAASsI,GAI1BpB,KAEX/G,GAAMqvB,oBAAsB,SAAUC,GAClC,GAAgB5pB,GAAKhG,EAAjBqvB,IAOJ,KANKO,EAAW,KACZA,GACItvB,GAAMspB,GACNtpB,GAAMwpB,QAAQF,KAGjB5jB,EAAM,EAAGhG,EAAS4vB,EAAW5vB,OAAQgG,EAAMhG,EAAQgG,IACpDqpB,EAAMrpB,GAAO4pB,EAAW5pB,GAAKqpB,KAEjC,OAAOtmB,IAAOoG,MAAM,UAAWqP,OAAO6Q,EAAM1mB,aAEhDrI,GAAM0I,KAAO,SAAU7I,GACnB,GAAIkvB,GAAQ/uB,GAAMqvB,oBAAoB9gB,GAAM2B,KAAKpN,UAAW,GAC5DtE,GAAEqB,GAAS0vB,KAAK,SAAWvvB,GAAMgK,GAAK,SAAS2B,UAAUlG,KAAK,WAC1DzF,GAAM8uB,WAAW/mB,QAAUgnB,MAGnC/uB,GAAM+tB,QAAU,SAAUluB,GACtBrB,EAAEqB,GAAS0vB,KAAK,SAAWvvB,GAAMgK,GAAK,SAAS2B,UAAUlG,KAAK,WAAA,GAEjDqB,GADLvD,EAAO/E,EAAEuJ,MAAMxE,MACnB,KAASuD,IAAOvD,GACiB,IAAzBuD,EAAIb,QAAQ,gBAAyB1C,GAAKuD,GAAKinB,UAAY7f,IAC3D3K,EAAKuD,GAAKinB,aAe1B/tB,GAAMkpB,OAAS,SAAUrpB,EAAS2tB,GAAnB,GAKPgC,GAJApG,EAAU5qB,EAAEqB,GAAS0vB,KAAK,SAAWvvB,GAAMgK,GAAK,SAAS2B,UAAUC,OAAOd,EACzEse,GAAQ1pB,SAGT8vB,EAAehxB,EAAEixB,UAAUrG,GAC/BoG,EAAatJ,KAAKxb,GAClBlM,EAAEiH,KAAK+pB,EAAc,WACjB,GAAIzkB,GAAS/K,GAAM0vB,eAAelxB,EAAEuJ,MAChCgD,IACAA,EAAOme,OAAOsE,OAI1BxtB,GAAMsK,aAAeA,EACrB7B,GAAOzI,GAAMspB,IACTvc,OAAQA,EACRC,gBAAiBA,GACjB+hB,SACAY,SAAU,SAAUC,EAAWxH,EAAQjgB,GACnC,GAAkG/B,GAAOypB,EAAWC,EAAkBC,EAAqB1K,EAAvJ2K,EAAOJ,EAAUL,KAAK,mBAAoBtvB,EAAUD,GAAMC,QAASoB,EAAUpB,EAAQoB,OACzF8G,GAAU3J,EAAEiK,WACR1H,MAAO,OACPC,OAAQ,OACRqG,IAAKuoB,EAAUloB,YACfuoB,SAAS,GACV9nB,GACHkd,EAAWld,EAAQ8nB,QAAU,0BAA4B,iBACrD7H,EACK4H,EAAKtwB,SACN0G,EAAQnG,EAAQmG,MAAMwpB,GACtBC,EAAYzpB,EAAQ,QAAU,OAC9B2pB,EAAsBH,EAAUzpB,aAChC2pB,EAAmBzuB,EAAQgF,QAAUD,EAAYwpB,EAAU,GAAGnpB,YAAcmpB,EAAU7uB,QAAU,EAAIgvB,EAAsB,EAC1HC,EAAOxxB,EAAEwB,GAAM8Q,OAAO,6HAAsIuU,EAAUrlB,GAAMspB,GAAGqG,SAAShG,SAASuG,UAAUnvB,MAAMoH,EAAQpH,OAAOC,OAAOmH,EAAQnH,QAAQjB,IAAI,MAAOoI,EAAQd,KAAKtH,IAAI8vB,EAAWlpB,KAAKC,IAAImpB,GAAuBD,GAAkBK,UAAUP,IAEvVI,GACPA,EAAKI,UAGbC,OAAQ,SAAUtlB,EAAQulB,EAAU3P,GAA5B,GAC+B4K,GAO/BgF,EAMK1tB,EAAO0pB,EAbZtV,EAAOlM,EAAOiB,GAAG7D,QAAQ8O,IAa7B,KAZAqZ,EAAWA,GAAYtwB,GAAMspB,GAC7B3I,EAASA,GAAU,GACnB2P,EAASrZ,GAAQlM,EACjBulB,EAASvB,MAAM9X,EAAKpS,eAAiBkG,EACrCwgB,EAAS,WAAa5K,EAAS1J,EAC/BA,EAAO,QAAU0J,EAAS1J,EACtBsZ,GACAtZ,KAAMA,EACNlM,OAAQA,EACR4V,OAAQA,GAAU,IAEtB3gB,GAAMopB,QAAQvZ,KAAK0gB,GACV1tB,EAAI,EAAG0pB,EAAMvsB,GAAMqpB,2BAA2B3pB,OAAQmD,EAAI0pB,EAAK1pB,IACpE7C,GAAMqpB,2BAA2BxmB,GAAG0tB,EAExC/xB,GAAEwN,GAAGiL,GAAQ,SAAU9O,GACnB,GAAkBqoB,GAAd7qB,EAAQoC,IAuBZ,cAtBWI,KAAYI,IACnBioB,EAAOjiB,GAAM2B,KAAKpN,UAAW,GAC7BiF,KAAKtC,KAAK,WACN,GAAiCgrB,GAAQ1pB,EAArCgE,EAASvM,EAAE+E,KAAKwE,KAAMkP,EAC1B,KAAKlM,EACD,KAAU8F,OAAM7Q,GAAM8Q,OAAO,2DAA8D3I,EAAS8O,GAGxG,IADAwZ,EAAS1lB,EAAO5C,SACLsoB,KAAWviB,GAClB,KAAU2C,OAAM7Q,GAAM8Q,OAAO,kCAAqC3I,EAAS8O,GAG/E,IADAlQ,EAAS0pB,EAAO5hB,MAAM9D,EAAQylB,GAC1BzpB,IAAWrI,EAEX,MADAiH,GAAQoB,GACD,KAIfgB,KAAKtC,KAAK,WACN,MAAO,IAAIsF,GAAOhD,KAAMI,KAGzBxC,GAEXnH,EAAEwN,GAAGiL,GAAMlM,OAASA,EACpBvM,EAAEwN,GAAGuf,GAAU,WACX,MAAOxjB,MAAKxE,KAAK0T,OAI7BjX,GAAMspB,GAAGqG,SAAShG,UAAauG,QAAS,cACpCjjB,IACAkC,KAAM,WACF,MAAOpH,OAEX2oB,YAAY,EACZvoB,YAEA+E,GAAeH,EAAOtE,QACtBC,KAAM,SAAU7I,EAASsI,GACrB4E,EAAOf,GAAGtD,KAAKwH,KAAKnI,KAAMlI,EAASsI,GACnCJ,KAAKlI,QAAQ8wB,cACb5oB,KAAK5G,QAAU4G,KAAKlI,QACpBkI,KAAKlI,QAAQwC,SAAS,cAE1B0rB,QAAS,WACLhhB,EAAOf,GAAG+hB,QAAQ7d,KAAKnI,MACvBA,KAAKlI,QAAQ+wB,gBAEjBzoB,SAAWwY,OAAQ,UACnBlR,UACAohB,KAAM,WACF,GAAIC,GAAc/oB,KAAKlI,QAAQsgB,QAAQngB,GAAM+rB,aAAa,mCAC1D,OAAO/rB,IAAM0vB,eAAeoB,EAAa9wB,GAAMupB,OAAOD,KAAOrc,IAEjE8jB,uBAAwB,WACpB,GAAIF,GAAO9oB,KAAK8oB,MAChB,OAAOA,IAAQA,EAAK1oB,QAAQ6oB,oBAEhCpB,UAAW,WACP,GAAI/vB,GAAUkI,KAAKlI,QAAQsgB,QAAQngB,GAAM+rB,aAAa,0CACtD,OAAO/rB,IAAM0vB,eAAe7vB,EAAQoxB,GAAG,GAAIjxB,GAAMupB,OAAOD,KAAOrc,MAGvExE,GAAOzI,GAAMupB,QACT7gB,KAAM,SAAU7I,GACZG,GAAM0I,KAAK7I,EAASG,GAAMupB,OAAOD,GAAItpB,GAAMspB,GAAItpB,GAAMwpB,QAAQF,KAEjE4H,wBAAyB,WACrB,MAAOlxB,IAAMupB,OAAO4H,aAAenxB,GAAMupB,OAAO4H,YAAYhpB,SAAWnI,GAAMupB,OAAO4H,YAAYhpB,QAAQ6oB,oBAE5GjC,SACAzF,IACIvc,OAAQG,GACRF,gBAAiBA,GAAgBvE,OAAOyE,GAAa4B,WACrDigB,SACAsB,OAAQ,SAAUtlB,GACd/K,GAAMspB,GAAG+G,OAAOtlB,EAAQ/K,GAAMupB,OAAOD,GAAI,cAIrD3mB,EAAW3C,GAAMwpB,SACb9gB,KAAM,SAAU7I,GACZG,GAAM0I,KAAK7I,EAASG,GAAMwpB,QAAQF,KAEtCA,IACIyF,SACAqC,UACAC,SACAhB,OAAQ,SAAUtlB,GACd/K,GAAMspB,GAAG+G,OAAOtlB,EAAQ/K,GAAMwpB,QAAQF,MAG9CyF,WAEJ/uB,GAAMsxB,cAAgB,SAAU9C,EAAUrmB,GAKtC,MAJKA,KACDA,MAEJA,EAAQopB,WAAY,EACb/yB,EAAEgwB,GAAUzT,IAAI,SAAUrV,EAAK7F,GAElC,MADAA,GAAUrB,EAAEqB,MACRI,GAAQgnB,sBAAuBjnB,GAAMupB,OAAOD,GAAGkI,UAAa3xB,EAAQ0D,KAAK,0BACzE1D,EAAQ4xB,oBAAoBtpB,GACrBtI,EAAQ0D,KAAK,0BAIzB,IAEPvD,GAAMkM,eAAiB,SAAU8D,GAC7BA,EAAE9D,kBAENlM,GAAM0vB,eAAiB,SAAU7vB,EAAS6xB,GAAnB,GACuC7uB,GAAGnD,EAwBjDqL,EAEI/B,EA1BZgjB,EAAOnsB,EAAQ0D,KAAKvD,GAAMgK,GAAK,QAASof,IAC5C,IAAI4C,EAAM,CAIN,GAHa,YAATA,IACAA,EAAO,YAEP0F,EACA,GAAIA,EAAO,GACP,IAAK7uB,EAAI,EAAGnD,EAASgyB,EAAOhyB,OAAQmD,EAAInD,EAAQmD,IAC5CumB,EAAQvZ,KAAK6hB,EAAO7uB,GAAGksB,MAAM/C,QAGjC5C,GAAQvZ,KAAK6hB,EAAO3C,MAAM/C,QAG9B5C,IACIppB,GAAMspB,GAAGyF,MAAM/C,GACfhsB,GAAMwpB,QAAQF,GAAGyF,MAAM/C,GACvBhsB,GAAMupB,OAAOD,GAAGyF,MAAM/C,GAM9B,KAHIA,EAAK/lB,QAAQ,MAAQ,IACrBmjB,GAAWppB,GAAMurB,OAAOS,GAAMvtB,KAE7BoE,EAAI,EAAGnD,EAAS0pB,EAAQ1pB,OAAQmD,EAAInD,EAAQmD,IAE7C,GADIkI,EAASqe,EAAQvmB,GACjBkI,IACI/B,EAAWnJ,EAAQ0D,KAAK,QAAUwH,EAAOiB,GAAG7D,QAAQwY,OAAS5V,EAAOiB,GAAG7D,QAAQ8O,OAE/E,MAAOjO,KAM3BhJ,GAAM2xB,SAAW,SAAU/I,GACvB,GAAIpZ,GAAUoZ,CAOd,OANI3oB,IAAQof,SAASyC,UACjBtS,EAAU,WACNoiB,WAAWhJ,EAAU,OAG7BpqB,EAAEC,GAAQgP,GAAGxN,GAAQipB,OAAQ1Z,GACtBA,GAEXxP,GAAM6xB,aAAe,SAAUjJ,GAC3BpqB,EAAEC,GAAQqzB,IAAI7xB,GAAQipB,OAAQN,IAElC5oB,GAAM+xB,UAAY,SAAUlyB,EAASiH,GACjC,MAAOjH,GAAQ0D,KAAKvD,GAAMgK,GAAKlD,IAEnC9G,GAAMgU,MACFge,OAAQ,EACRC,OAAQ,EACRC,QAAS,EACTC,UAAW,EACXC,SAAU,EACVC,OAAQ,EACRC,SAAU,GAWd9zB,EAAEiK,OAAOjK,EAAEgN,KAAK,MACZ+mB,eAAgB,SAAU1yB,GACtB,GAAI6F,GAAMlH,EAAEyM,KAAKpL,EAAS,WAC1B,OAAOqL,GAAUrL,GAAU4d,MAAM/X,IAAQA,SAG7CyH,IACA,YACA,YACA,aACA,aACA,YACA,WACA,UACA,SAEAC,GAA8B,oCAC9BC,IACAmlB,eAAgB,WAAA,GAQRhjB,GAPA9J,EAAM,EAAGhG,EAASyN,GAAazN,OAAQG,EAAUyF,SAASmC,eAC9D,KAAI4F,GAAqBolB,WAAcxyB,GAAQslB,aAkB/C,IAfAlY,GAAqBolB,WAAY,EACjCplB,GAAqBqlB,WAAY,EACjCrlB,GAAqBslB,cAAe,EAChCnjB,EAAU,SAAUQ,GAChB3C,GAAqBslB,eACN,UAAX3iB,EAAE/I,KACEoG,GAAqBqlB,YAAcl0B,EAAEwR,EAAEqY,QAAQxmB,GAAGuL,MAClD4C,EAAE9D,iBACF8D,EAAE4iB,mBAGN5iB,EAAE4iB,oBAIPltB,EAAMhG,EAAQgG,IACjB7F,EAAQ2lB,iBAAiBrY,GAAazH,GAAM8J,GAAS,IAG7DqjB,UAAW,SAAU7iB,GACjB3C,GAAqBslB,cAAe,EAChC3iB,EAAEzM,KAAKmvB,YACPrlB,GAAqBqlB,WAAY,GAErCI,aAAazlB,GAAqB0lB,qBAEtCC,YAAa,WACTF,aAAazlB,GAAqB0lB,oBAClC1lB,GAAqB0lB,mBAAqBnB,WAAW,WACjDvkB,GAAqBslB,cAAe,EACpCtlB,GAAqBqlB,WAAY,GAClC,OAGPplB,IACA4Z,KAAM,uBACN+L,KAAM,sBACN9L,GAAI,+BACJ+L,OAAQ,0BAERjzB,GAAQogB,QAAUpgB,GAAQof,SAASqD,KAAOziB,GAAQof,SAASyC,SAC3DxU,IACI4Z,KAAM,aACN+L,KAAM,YACN9L,GAAI,uBACJ+L,OAAQ,eAELjzB,GAAQqH,SACfgG,IACI4Z,KAAM,cACN+L,KAAM,cACN9L,GAAI,YACJ+L,OAAQ,8BAELjzB,GAAQsH,aACf+F,IACI4Z,KAAM,gBACN+L,KAAM,gBACN9L,GAAI,cACJ+L,OAAQ,oCAGZjzB,GAAQsH,YAAgB,oBAAsB9I,IAC9CD,EAAEiH,MACE0tB,eAAgB,gBAChBC,eAAgB,gBACjB,SAAUC,EAAMC,GACf90B,EAAEqiB,MAAM0S,QAAQF,IACZG,aAAcF,EACdG,SAAUH,EACVI,OAAQ,SAAU7S,GACd,GAAI8S,GAAKtL,EAAStgB,KAAM6rB,EAAU/S,EAAMgT,cAAeC,EAAYjT,EAAMiT,SAMzE,OALKF,KAAWA,IAAYvL,GAAW7pB,EAAEqM,SAASwd,EAAQuL,MACtD/S,EAAM5Z,KAAO6sB,EAAUC,SACvBJ,EAAMG,EAAUtkB,QAAQX,MAAM9G,KAAMjF,WACpC+d,EAAM5Z,KAAOqsB,GAEVK,MAKnBpmB,GAAc,SAAUyC,GACpB,MAAO1C,IAAS0C,IAAMA,GACvBxC,GAAa,WACpBxN,GAAMg0B,cAAgB,SAAUvkB,EAAQzF,GAKpC,MAJAyF,GAASA,EAAOxQ,QAAQuO,GAAYD,IAChCvD,IACAyF,EAASA,EAAOxQ,QAAQuO,GAAY,MAAQxD,IAEzCyF,GAEPhC,GAAKjP,EAAEwN,GAAGyB,GAIdhF,IAAO,EAAMoD,EAAarN,GAC1BqN,EAAYG,GAAKH,EAAYiD,UAAY,GAAItQ,GAC7CqN,EAAYG,GAAGpI,YAAciI,EAC7BA,EAAYG,GAAGtD,KAAO,SAAUoD,EAAUC,GAItC,MAHIA,IAAWA,YAAmBvN,MAAOuN,YAAmBF,MACxDE,EAAUF,EAAYE,IAEnBvN,EAAEwN,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,MAEX4oB,YAAa,SAAU3mB,GAEnB,MADAjC,MAAKxE,KAAK,UAAWyG,GAAMhK,GAAM4rB,QAC1B7jB,MAEX0F,GAAI,WAAA,GAKI1B,GAAgBykB,EAIhB5H,EAAkCnZ,EAG9B3D,EAA+C4mB,EAXnD/jB,EAAO5G,KAAMiC,EAAK2E,EAAKpL,KAAK,UAChC,OAAyB,KAArBT,UAAUpD,OACH+N,GAAGyC,KAAKvB,EAAM7L,UAAU,KAE/BiJ,EAAU4C,EAAM6hB,EAAOjiB,GAAM2B,KAAKpN,iBAC3B0tB,GAAKA,EAAK9wB,OAAS,KAAOyE,IACjCqsB,EAAKyD,MAELrL,EAAW4H,EAAKA,EAAK9wB,OAAS,GAAI+P,EAASzP,GAAMg0B,cAAcxD,EAAK,GAAIxmB,GACxE/J,GAAQikB,sBAAwBzU,EAAOykB,OAAO,mBAAuBnsB,KAAK,KAAOzC,SAASmC,kBAC1F4F,GAAqBmlB,iBACjB1mB,EAA2B,IAAhB0kB,EAAK9wB,OAAe,KAAO8wB,EAAK,GAAIkC,EAAYjjB,EAAOxJ,QAAQ,aAAiBwJ,EAAOxJ,QAAQ,eAC9GwH,GAAGyC,KAAKnI,MACJosB,WAAY9mB,GAAqBwlB,UACjCuB,SAAU/mB,GAAqB2lB,aAChClnB,GAAY4mB,UAAWA,WAEnB9J,KAAargB,KACpBwD,EAAU4C,EAAKpL,KAAK,WACpBqlB,EAAW7c,EAAQ6c,GACnB4H,EAAKA,EAAK9wB,OAAS,GAAK,SAAUsQ,GAC9B4Y,EAAS1Y,KAAKnE,EAASiE,KAG/BwgB,EAAK,GAAK/gB,EACVhC,GAAGoB,MAAMF,EAAM6hB,GACR7hB,IAEXiiB,aAAc,SAAU5mB,GAKpB,MAJAA,GAAKA,GAAMjC,KAAKxE,KAAK,WACjByG,GACAjC,KAAK+pB,IAAI,IAAM9nB,GAEZjC,QAGf/H,GAAM8sB,OAASjhB,EACf7L,GAAMsN,SAAWA,GACjBtN,GAAMue,SAAW,WAwBb,QAAS8V,GAAWtX,EAAMuX,GAA1B,GACQ1gB,GACA2gB,EACAC,EACAxX,EAAQsX,EAAK,GACb7mB,EAAK6mB,EAAK,GACVG,EAAOH,EAAK,GACZI,EAAQJ,EAAK,EAIjB,OAHKI,KACDJ,EAAK,GAAKI,MAEVA,EAAM3X,GACC2X,EAAM3X,IAEZU,MAAMhQ,GAEuB,IAAvBA,EAAGxH,QAAQ,SAClB2N,EAAO,GAAI7P,MAAKA,KAAK6X,IAAImB,EAAM9I,EAAO+I,GAAS,EAAG,EAAGyX,EAAK,GAAK,GAAIA,EAAK,GAAIA,EAAK,GAAI,IACrFF,EAAYvgB,EAAKvG,EAAG6O,OAAO,EAAG,IAC9BkY,EAAS5gB,EAAK+gB,YACd/gB,EAAKghB,WAAWhhB,EAAKhB,aAAe2hB,EAAYC,GAAUD,EAAYC,EAAS,EAAI,KAC5E/mB,EAAGxH,QAAQ,OAAS,IAC3B2N,EAAO,GAAI7P,MAAKA,KAAK6X,IAAImB,EAAM9I,EAAO+I,GAAQvP,EAAG6O,OAAO,GAAImY,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAI,IACvFF,EAAYvgB,EAAKvG,EAAG6O,OAAO,EAAG,IAC9BkY,EAAS5gB,EAAK+gB,YACd/gB,EAAKghB,WAAWhhB,EAAKhB,aAAe2hB,EAAYC,GAAUD,EAAYC,EAAS,EAAI,KAVnF5gB,EAAO,GAAI7P,MAAKA,KAAK6X,IAAImB,EAAM9I,EAAO+I,GAAQvP,EAAIgnB,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAI,IAY1EC,EAAM3X,GAAQnJ,GAEzB,QAASihB,GAASC,EAASC,EAAOC,GAAlC,GAGYP,GACAttB,EAmBJ4V,EAgBAuX,CArCJ,QADAS,EAAQA,EAAMC,KAsBVjY,EAAO,GAAIhZ,MAAK+wB,GAASpiB,iBAC7BqiB,EAAQjI,OAAOmI,KAAKF,EAAO,SAAUT,GAAV,GACnBY,GAAOZ,EAAK,GACZa,EAAKb,EAAK,EACd,OAAOY,IAAQnY,IAASoY,GAAMpY,GAAQmY,GAAQnY,GAAc,QAANoY,GAAsB,OAANA,KAE1EJ,EAAMllB,KAAKilB,GACXC,EAAM7O,KAAK,SAAUvb,EAAGC,GAOpB,MANgB,gBAALD,KACPA,GAAW0pB,EAAWtX,EAAMpS,IAEhB,gBAALC,KACPA,GAAWypB,EAAWtX,EAAMnS,IAEzBD,EAAIC,IAEX0pB,EAAOS,EAAMjI,OAAO9hB,QAAQ8pB,EAASC,GAAS,IAAMA,EAAMA,EAAMr1B,OAAS,GACtE+d,MAAM6W,GAAQA,EAAO,OArCpBG,EAAOO,EAAKj2B,MAAM,KAClBoI,EAAS,EACTstB,EAAK/0B,OAAS,IACdyH,EAAmB,GAAVstB,EAAK,KAAiBA,EAAK,UAIpC,MACA,IACA,MACA,GAEI,EACA,EACA,GAEJttB,EACA,MAsBZ,QAASiuB,GAASN,EAASO,EAAO9W,GAAlC,GAQa7Y,GACD4vB,EAKJN,EAbAO,EAAYF,EAAM9W,EAItB,IAHyB,gBAAdgX,KACPA,EAAYF,EAAME,KAEjBA,EACD,KAAU1kB,OAAM,aAAe0N,EAAW,oEAE9C,KAAS7Y,EAAM6vB,EAAU71B,OAAS,EAAGgG,GAAO,IACpC4vB,EAAQC,EAAU7vB,GAAK,KACvB4vB,GAASR,EAAUQ,IAFoB5vB,KAO/C,GADIsvB,EAAOO,EAAU7vB,EAAM,IACtBsvB,EACD,KAAUnkB,OAAM,aAAe0N,EAAW,kBAAoBuW,EAAU,IAE5E,OAAOE,GAEX,QAASQ,GAAYV,EAASO,EAAON,EAAOxW,SAC7BuW,IAAW3mB,KAClB2mB,EAAU/wB,KAAK6X,IAAIkZ,EAAQpgB,cAAeogB,EAAQrgB,WAAYqgB,EAAQzgB,UAAWygB,EAAQngB,WAAYmgB,EAAQlgB,aAAckgB,EAAQjgB,aAAcigB,EAAQhgB,mBAE7J,IAAIkgB,GAAOI,EAASN,EAASO,EAAO9W,EACpC,QACIyW,KAAMA,EACNV,KAAMO,EAASC,EAASC,EAAOC,EAAK,KAG5C,QAAS7tB,GAAO2tB,EAASvW,GAAzB,GAIQkX,GACAT,EACAV,CALJ,OAAgB,WAAZ/V,GAAqC,WAAZA,EAClB,GAEPkX,EAAOD,EAAYV,EAAS/sB,KAAKstB,MAAOttB,KAAKgtB,MAAOxW,GACpDyW,EAAOS,EAAKT,KACZV,EAAOmB,EAAKnB,KACTt0B,GAAMkK,WAAWoqB,EAAOU,EAAK,GAAKV,EAAK,GAAKU,EAAK,KAE5D,QAASxc,GAAKsc,EAASvW,GAAvB,GACQkX,GAAOD,EAAYV,EAAS/sB,KAAKstB,MAAOttB,KAAKgtB,MAAOxW,GACpDyW,EAAOS,EAAKT,KACZV,EAAOmB,EAAKnB,KACZ5lB,EAAOsmB,EAAK,EAChB,OAAItmB,GAAKzI,QAAQ,MAAQ,EACdyI,EAAK3P,MAAM,KAAKu1B,IAASA,EAAK,GAAK,EAAI,GACvC5lB,EAAKzI,QAAQ,OAAS,EACtByI,EAAKzP,QAAQ,KAAOq1B,GAAmB,KAAXA,EAAK,GAAiBA,EAAK,GAAV,IAEjD5lB,EAEX,QAAS8P,GAAQ5K,EAAM8hB,EAAYC,GAAnC,GAEQC,GAOAC,EAEAC,EAVAC,EAAeJ,CAenB,cAbWD,IAAcntB,KACrBmtB,EAAa3tB,KAAKZ,OAAOyM,EAAM8hB,UAExBC,IAAYptB,KACnBotB,EAAW5tB,KAAKZ,OAAOyM,EAAM+hB,IAE7BE,EAAkBjiB,EAAKqB,oBAC3BrB,EAAO,GAAI7P,MAAK6P,EAAK5P,UAAsC,KAAzB0xB,EAAaC,IAC3CG,EAAgBliB,EAAKqB,0BACd8gB,IAAgBxtB,KACvBwtB,EAAehuB,KAAKZ,OAAOyM,EAAMmiB,IAErCH,EAAOE,EAAgBD,GAAmBF,EAAWI,GAC9C,GAAIhyB,MAAK6P,EAAK5P,UAAmB,IAAP4xB,GAErC,QAAS/mB,GAAM+E,EAAM2K,GACjB,MAAOxW,MAAKyW,QAAQ5K,EAAMA,EAAKqB,oBAAqBsJ,GAExD,QAAS6R,GAAOxc,EAAM2K,GAClB,MAAOxW,MAAKyW,QAAQ5K,EAAM2K,EAAU3K,EAAKqB,qBAE7C,QAAS+gB,GAAYvB,GACjB,MAAO1sB,MAAK8G,MAAM,GAAI9K,MAAK0wB,GAAO,WA3KzB,GACTxgB,IACAgiB,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,IAAK,GACLC,IAAK,IAEL5iB,GACA6iB,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,IAAK,EACLC,IAAK,EAuJT,QACI9B,SACAN,SACA5tB,OAAQA,EACRqX,QAASA,EACT3P,MAAOA,EACPuhB,OAAQA,EACR5X,KAAMA,EACNwd,YAAaA,MAGrBh2B,GAAM4T,KAAO,WAET,QAASoH,GAAUpH,EAAMqH,GACrB,MAAc,KAAVA,GAAmC,KAApBrH,EAAKe,aACpBf,EAAKsH,SAAStH,EAAKe,WAAa,IACzB,GAIf,QAASyiB,GAAaxjB,EAAMqJ,EAAKoa,GAC7B,GAAIpc,GAAQrH,EAAKe,UACjB0iB,GAAMA,GAAO,EACbpa,GAAOA,EAAMrJ,EAAKW,SAAW,EAAI8iB,GAAO,EACxCzjB,EAAK0jB,QAAQ1jB,EAAKS,UAAY4I,GAC9BjC,EAAUpH,EAAMqH,GAEpB,QAASsc,GAAU3jB,EAAMqJ,EAAKoa,GAG1B,MAFAzjB,GAAO,GAAI7P,MAAK6P,GAChBwjB,EAAaxjB,EAAMqJ,EAAKoa,GACjBzjB,EAEX,QAAS4jB,GAAgB5jB,GACrB,MAAO,IAAI7P,MAAK6P,EAAKc,cAAed,EAAKa,WAAY,GAEzD,QAASgjB,GAAe7jB,GACpB,GAAI8jB,GAAO,GAAI3zB,MAAK6P,EAAKc,cAAed,EAAKa,WAAa,EAAG,GAAIvV,EAAQs4B,EAAgB5jB,GAAO+jB,EAAahxB,KAAKC,IAAI8wB,EAAKziB,oBAAsB/V,EAAM+V,oBAIvJ,OAHI0iB,IACAD,EAAKxc,SAAShc,EAAMyV,WAAagjB,EAAa,IAE3CD,EAEX,QAASE,GAAoBhkB,EAAMikB,GAC/B,MAAqB,KAAjBA,EACOC,EAAQP,EAAU3jB,EAAMikB,MAAmB,GAE/CC,EAAQlkB,EAAM,GAAKA,EAAKW,UAAY,IAE/C,QAASwjB,GAAenkB,EAAMikB,GAA9B,GACQG,GAAkB,GAAIj0B,MAAK6P,EAAKc,cAAe,EAAG,QAClDujB,EAAUL,EAAoBhkB,EAAMikB,GACpCK,EAAWD,EAAQj0B,UAAYg0B,EAAgBh0B,UAC/CgQ,EAAOrN,KAAKpE,MAAM21B,EAAWC,EACjC,OAAO,GAAIxxB,KAAKpE,MAAMyR,EAAO,GAEjC,QAASokB,GAAWxkB,EAAMikB,GAA1B,GAIQQ,GACAC,EACAC,CACJ,OANIV,KAAiBn5B,IACjBm5B,EAAe73B,GAAMuT,UAAUM,SAAS2F,UAExC6e,EAAeP,EAAQlkB,MACvB0kB,EAAeR,EAAQlkB,EAAM,GAC7B2kB,EAAaR,EAAenkB,EAAMikB,GACnB,IAAfU,EACOR,EAAeM,EAAcR,GAAgB,EAErC,KAAfU,GAAqBR,EAAeO,EAAcT,GAAgB,EAC3D,EAEJU,EAEX,QAASlkB,GAAQT,GAGb,MAFAA,GAAO,GAAI7P,MAAK6P,EAAKc,cAAed,EAAKa,WAAYb,EAAKS,UAAW,EAAG,EAAG,GAC3E2G,EAAUpH,EAAM,GACTA,EAEX,QAAS4kB,GAAU5kB,GACf,MAAO7P,MAAK6X,IAAIhI,EAAKc,cAAed,EAAKa,WAAYb,EAAKS,UAAWT,EAAKe,WAAYf,EAAKgB,aAAchB,EAAKiB,aAAcjB,EAAKkB,mBAErI,QAASA,GAAgBlB,GACrB,MAAO6kB,GAAgB7kB,GAAM5P,UAAYqQ,EAAQokB,EAAgB7kB,IAErE,QAAS8kB,GAAc/yB,EAAOoU,EAAKvZ,GAC/B,GAAgEm4B,GAA5DC,EAAQ9jB,EAAgBiF,GAAM8e,EAAQ/jB,EAAgBtU,EAC1D,QAAKmF,GAASizB,GAASC,IAGnB9e,GAAOvZ,IACPA,GAAO23B,GAEXQ,EAAU7jB,EAAgBnP,GACtBizB,EAAQD,IACRA,GAAWR,GAEXU,EAAQD,IACRC,GAASV,GAENQ,GAAWC,GAASD,GAAWE,GAE1C,QAASC,GAAcnzB,EAAOoU,EAAKvZ,GAC/B,GAAkDm4B,GAA9CC,EAAQ7e,EAAI/V,UAAW60B,EAAQr4B,EAAIwD,SAKvC,OAJI40B,IAASC,IACTA,GAASV,GAEbQ,EAAUhzB,EAAM3B,UACT20B,GAAWC,GAASD,GAAWE,EAE1C,QAASf,GAAQlkB,EAAMzM,GACnB,GAAI8T,GAAQrH,EAAKe,UAIjB,OAHAf,GAAO,GAAI7P,MAAK6P,GAChBmlB,EAAQnlB,EAAMzM,EAASgxB,GACvBnd,EAAUpH,EAAMqH,GACTrH,EAEX,QAASmlB,GAAQnlB,EAAMuJ,EAAc6b,GAArC,GAEQC,GADA9xB,EAASyM,EAAKqB,mBAElBrB,GAAKmlB,QAAQnlB,EAAK5P,UAAYmZ,GACzB6b,IACDC,EAAarlB,EAAKqB,oBAAsB9N,EACxCyM,EAAKmlB,QAAQnlB,EAAK5P,UAAYi1B,EAAaC,IAGnD,QAAShe,GAAStH,EAAM6gB,GAGpB,MAFA7gB,GAAO,GAAI7P,MAAK/D,GAAM4T,KAAKS,QAAQT,GAAM5P,UAAYhE,GAAM4T,KAAKkB,gBAAgB2f,IAChFzZ,EAAUpH,EAAM6gB,EAAK9f,YACdf,EAEX,QAASulB,KACL,MAAO9kB,GAAQ,GAAItQ,OAEvB,QAASq1B,GAAQxlB,GACb,MAAOS,GAAQT,GAAM5P,WAAam1B,IAAQn1B,UAE9C,QAASy0B,GAAgB7kB,GACrB,GAAIylB,GAAa,GAAIt1B,MAAK,KAAM,EAAG,EAAG,EAAG,EAAG,EAI5C,OAHI6P,IACAylB,EAAWne,SAAStH,EAAKe,WAAYf,EAAKgB,aAAchB,EAAKiB,aAAcjB,EAAKkB,mBAE7EukB,EA9HX,GAAIH,GAAgB,IAAOf,EAAa,KAgIxC,QACInd,UAAWA,EACXuc,UAAWA,EACXH,aAAcA,EACd/iB,QAASA,EACTykB,cAAeA,EACfJ,cAAeA,EACfU,QAASA,EACTE,QAAS,SAAU1lB,GACf,MAAOkkB,GAAQlkB,EAAM,IAEzB2lB,YAAa,SAAU3lB,GACnB,MAAOkkB,GAAQlkB,OAEnB4kB,UAAWA,EACXL,WAAYA,EACZqB,YAAa,GAAKN,EAClBA,cAAeA,EACfH,QAASA,EACT7d,SAAUA,EACV4c,QAASA,EACTqB,MAAOA,EACPV,gBAAiBA,EACjBjB,gBAAiBA,EACjBC,eAAgBA,EAChBW,WAAYA,EACZtjB,gBAAiBA,MAGzB9U,GAAMy5B,gBAAkB,SAAU55B,GAAV,GAEZ65B,GASK72B,EACD82B,CAXZ,IAAIr0B,SAASs0B,mBAIT,IAHIF,EAAWp0B,SAASs0B,mBAAmB/5B,EAASg6B,WAAWC,UAAW,SAAUC,GAChF,MAAOA,GAAKrT,YAAc7mB,EAAUg6B,WAAWG,cAAgBH,WAAWI,gBAC3E,GACIP,EAASQ,YACRR,EAASS,gBAAkBT,EAASS,cAAcC,YAAYC,QAC9DX,EAASS,cAAczT,WAAWxG,YAAYwZ,EAASS,mBAI/D,KAASt3B,EAAI,EAAGA,EAAIhD,EAAQy6B,WAAW56B,OAAQmD,IACvC82B,EAAQ95B,EAAQy6B,WAAWz3B,GACT,GAAlB82B,EAAMxK,UAAkB,KAAKltB,KAAK03B,EAAMY,aACxC16B,EAAQqgB,YAAYyZ,GACpB92B,KAEkB,GAAlB82B,EAAMxK,UACNnvB,GAAMy5B,gBAAgBE,IAKlChsB,GAAiBlP,EAAO+7B,uBAAyB/7B,EAAOg8B,6BAA+Bh8B,EAAOi8B,0BAA4Bj8B,EAAOk8B,wBAA0Bl8B,EAAOm8B,yBAA2B,SAAUhS,GACvMgJ,WAAWhJ,EAAU,IAAO,KAEhC5oB,GAAM2N,eAAiB,SAAUib,GAC7Bjb,GAAeuC,KAAKzR,EAAQmqB,IAE5Bhb,MACJ5N,GAAM66B,eAAiB,SAAUjS,GAC7Bhb,GAAeA,GAAelO,QAAUkpB,EACV,IAA1Bhb,GAAelO,QACfM,GAAM86B,oBAGd96B,GAAM86B,iBAAmB,WACrB96B,GAAM2N,eAAe,WACbC,GAAe,KACfA,GAAeiM,UACXjM,GAAe,IACf5N,GAAM86B,uBAKtB96B,GAAM+6B,uBAAyB,SAAU3P,GAErC,IADA,GAAI4P,GAAc5P,EAAIrsB,MAAM,KAAK,IAAM,GAAIk8B,KAAaC,EAAaF,EAAYj8B,MAAM,OAAQW,EAASw7B,EAAWx7B,OAAQgG,EAAM,EAC1HA,EAAMhG,EAAQgG,GAAO,EACA,KAApBw1B,EAAWx1B,KACXu1B,EAAOE,mBAAmBD,EAAWx1B,KAASy1B,mBAAmBD,EAAWx1B,EAAM,IAG1F,OAAOu1B,IAEXj7B,GAAMo7B,mBAAqB,SAAUprB,GACjC,GAAyB,IAAdA,EAAEqrB,EAAEC,OACX,MAAOh2B,UAASmjB,iBAAiBzY,EAAEqrB,EAAEC,OAAQtrB,EAAEoJ,EAAEkiB,SAGzDt7B,GAAMu7B,YAAc,SAAUC,GAC1B,GAA2DC,GAAvDzrB,EAAIwrB,EAAYjT,cAAemT,EAAS1rB,EAAEurB,WAQ9C,OAPIvrB,GAAE2rB,YACED,IAAWh9B,GAAag9B,KACxBD,EAAQzrB,EAAE2rB,YAEP3rB,EAAE4rB,QAAU5rB,EAAE6rB,OAAS7rB,EAAE8rB,gBAChCL,EAAoB,IAAXzrB,EAAE4rB,QAERH,GAEXz7B,GAAM+7B,SAAW,SAAU/vB,EAAIgwB,GAAd,GACTC,GAKAC,EAJAC,EAAe,CACnB,QAAKH,GAASA,GAAS,EACZhwB,GAEPkwB,EAAY,WAIZ,QAAS9kB,KACLpL,EAAG6C,MAAMF,EAAM6hB,GACf2L,GAAgB,GAAIp4B,MANZ,GACR4K,GAAO5G,KACPq0B,GAAW,GAAIr4B,MAASo4B,EACxB3L,EAAO1tB,SAKX,OAAKq5B,IAGDF,GACAnJ,aAAamJ,GAEbG,EAAUJ,EACV5kB,IAEA6kB,EAAUrK,WAAWxa,EAAM4kB,EAAQI,GANvC,GAFWhlB,KAWf8kB,EAAUhJ,OAAS,WACfJ,aAAamJ,IAEVC,IAEXl8B,GAAMq8B,MAAQ,SAAUx8B,EAASmX,EAAOvX,GAA1B,GACN68B,GAeY/S,EAyBAgT,EAA4CC,EAAgBC,EAvCxEC,EAAa1lB,IAAUtY,CAO3B,IANIe,IAAQf,IACRe,EAAMuX,GAENnX,EAAQ,KACRA,EAAUA,EAAQ,KAElB68B,IAAc78B,EAAQwL,SAA1B,CAGA,IACQxL,EAAQ28B,iBAAmB99B,EACvBg+B,GACA78B,EAAQ88B,QACJpT,EAAStpB,GAAQof,SACjBkK,EAAO3H,IAAM2H,EAAOzH,QACpB8P,WAAW,WACP/xB,EAAQ+8B,kBAAkB5lB,EAAOvX,IAClC,GAEHI,EAAQ+8B,kBAAkB5lB,EAAOvX,IAGrCuX,GACInX,EAAQ28B,eACR38B,EAAQ48B,cAGTn3B,SAASu3B,YACZr+B,EAAEqB,GAASgC,GAAG,aACdhC,EAAQ88B,QAEZL,EAAez8B,EAAQi9B,kBACnBJ,GACAJ,EAAaS,UAAS,GACtBT,EAAaU,UAAU,YAAahmB,GACpCslB,EAAaW,QAAQ,YAAax9B,EAAMuX,GACxCslB,EAAaY,WAETX,EAAkBD,EAAaa,YACnCb,EAAac,eAAe93B,SAASu3B,UAAUQ,cAAcC,eAC7Df,EAAgBgB,YAAY,aAAcjB,GAC1CE,EAAiBD,EAAgBiB,KAAK99B,OACtC+8B,EAAeD,EAAiBF,EAAakB,KAAK99B,OAClDsX,GACIwlB,EACAC,KAId,MAAOzsB,GACLgH,KAEJ,MAAOA,KAEXhX,GAAMy9B,uBAAyB,SAAU59B,EAAS69B,GAC9C,GAAI3Q,GAAUtuB,EAAOsuB,OAWrB,OAVAltB,GAAQoL,KAAK,QAAUjL,GAAMgK,GAAK,OAAQnK,EAAQ,GAAGwsB,QAAQxnB,cAAc5F,QAAQ,gBAAiB,IAAIA,QAAQ,IAAK,KACrH8tB,EAAQltB,QAAQA,GAAS89B,WAAWC,QAChC,WACA,SAAUC,GACNA,EAASh+B,GAAS69B,GACb,qBAAqBz7B,KAAKy7B,EAAMI,UACjCJ,EAAMK,aAIX/9B,GAAM0vB,eAAe7vB,EAASG,GAAMupB,OAAOD,KAEtDtpB,GAAMg+B,kBAAoB,WACtB,GAAIC,MAAaC,EAAa1/B,EAAE,0CAA0CyM,KAAK,WAAYkzB,EAAa3/B,EAAE,iDAAiDyM,KAAK,UAOhK,OANAzM,GAAE,6CAA+CiH,KAAK,WAClDw4B,EAAOl2B,KAAKkP,MAAQlP,KAAKpC,QAEzBw4B,IAAez/B,GAAaw/B,IAAex/B,IAC3Cu/B,EAAOE,GAAcD,GAElBD,GAEXj+B,GAAMo+B,UAAY,SAAUC,GAGxB,QAAS1B,GAAMn2B,GACX,GAAIuE,GAAS/K,GAAM0vB,eAAelpB,EAC9BuE,IAAUA,EAAO4xB,MACjB5xB,EAAO4xB,QAEPn2B,EAAGm2B,QARG,GACV2B,GAAeD,EAAK9O,KAAK,oBAAoBrwB,QAC7Cq/B,EAAcF,EAAK9O,KAAK,qBAAqBmI,MASjD6G,GAAY9wB,GAAG,UAAW,SAAUuC,GAC5BA,EAAEwuB,SAAWx+B,GAAM4pB,KAAKI,KAAQha,EAAEyuB,WAClCzuB,EAAE9D,iBACFywB,EAAM2B,MAGdA,EAAa7wB,GAAG,UAAW,SAAUuC,GAC7BA,EAAEwuB,SAAWx+B,GAAM4pB,KAAKI,KAAOha,EAAEyuB,WACjCzuB,EAAE9D,iBACFywB,EAAM4B,OAIlBv+B,GAAM0+B,aAAe,SAAU7+B,GAAV,GACb8+B,MACAC,EAAoB/+B,EAAQg/B,aAAa,QAAQjzB,OAAO,SAAUsO,EAAOra,GACzE,GAAIuF,GAAgBpF,GAAMkF,kBAAkBrF,GAAU,YACtD,OAAkC,YAA3BuF,EAAcc,WACtBmD,IAAI5K,EACPmgC,GAAkBn5B,KAAK,SAAUyU,EAAOxY,GACpCi9B,EAAmBzkB,GAAS1b,EAAEkD,GAAQgG,aAE1C,KACI7H,EAAQ,GAAGi/B,YACb,MAAO9uB,GACLnQ,EAAQ,GAAG88B,QAEfiC,EAAkBn5B,KAAK,SAAUyU,EAAOxY,GACpClD,EAAEkD,GAAQgG,UAAUi3B,EAAmBzkB,OAG9C,WACG,QAAS6kB,GAAYC,EAASC,EAAUC,EAAUC,GAAlD,GAQQ3uB,GAGKyG,EAVLonB,EAAO7/B,EAAE,UAAUyM,MACnBm0B,OAAQF,EACRzO,OAAQ,OACRpI,OAAQ8W,IAER57B,EAAOvD,GAAMg+B,mBACjBz6B,GAAK07B,SAAWA,EACZzuB,EAAQwuB,EAAQjgC,MAAM,YAC1BwE,EAAK87B,YAAc7uB,EAAM,GAAGvR,QAAQ,QAAS,IAC7CsE,EAAK+7B,OAAS9uB,EAAM,EACpB,KAASyG,IAAQ1T,GACTA,EAAKkB,eAAewS,IACpBzY,EAAE,WAAWyM,MACTtF,MAAOpC,EAAK0T,GACZA,KAAMA,EACNhQ,KAAM,WACPs4B,SAASlB,EAGpBA,GAAKkB,SAAS,QAAQC,SAASpP,SAInC,QAASqP,GAAWT,EAASC,GAA7B,GAGYzuB,GACA6uB,EACAC,EACAlkB,EACK1V,EANTg6B,EAAOV,CACX,IAAsB,gBAAXA,GAAqB,CAK5B,IAJIxuB,EAAQwuB,EAAQjgC,MAAM,YACtBsgC,EAAc7uB,EAAM,GACpB8uB,EAASK,KAAKnvB,EAAM,IACpB4K,EAAQ,GAAIwkB,YAAWN,EAAO5/B,QACzBgG,EAAM,EAAGA,EAAM45B,EAAO5/B,OAAQgG,IACnC0V,EAAM1V,GAAO45B,EAAOjuB,WAAW3L,EAEnCg6B,GAAO,GAAIG,OAAMzkB,EAAM0kB,SAAW74B,KAAMo4B,IAE5Cjc,UAAU2c,WAAWL,EAAMT,GAE/B,QAASe,GAAchB,EAASC,GACxBxgC,EAAOohC,MAAQb,YAAmBa,QAClCb,EAAUiB,IAAIC,gBAAgBlB,IAElCmB,EAAUC,SAAWnB,EACrBkB,EAAU70B,KAAO0zB,CACjB,IAAIhvB,GAAI1K,SAAS+6B,YAAY,cAC7BrwB,GAAEswB,eAAe,SAAS,GAAM,EAAO7hC,EAAQ,EAAG,EAAG,EAAG,EAAG,GAAG,GAAO,GAAO,GAAO,EAAO,EAAG,MAC7F0hC,EAAUI,cAAcvwB,GACxB4hB,WAAW,WACPqO,IAAIO,gBAAgBxB,KAjD/B,GAuBOmB,GAAY76B,SAASsa,cAAc,KACnC6gB,EAAoB,YAAcN,KAAcngC,GAAMC,QAAQoB,QAAQ+iB,IA4B1EpkB,IAAM0gC,OAAS,SAAUv4B,GACrB,GAAIw4B,GAAO5B,CACN52B,GAAQy4B,aACLH,EACAE,EAAOX,EACA5c,UAAU2c,aACjBY,EAAOlB,IAGfkB,EAAKx4B,EAAQ62B,QAAS72B,EAAQ82B,SAAU92B,EAAQ+2B,SAAU/2B,EAAQg3B,iBAG1En/B,GAAM6gC,kBAAoB,SAA2Bt9B,GACjD,GAAIu9B,KAYJ,OAXA/xB,QAAO6a,KAAKrmB,OAAYw9B,QAAQ,SAAU99B,GACtC8L,OAAOiyB,eAAeF,EAAY79B,GAC9ByoB,IAAK,WACD,MAAOnoB,GAAKN,IAEhB0oB,IAAK,SAAUhmB,GACXpC,EAAKN,GAAY0C,EACjBpC,EAAK09B,OAAQ,OAIlBH,IAEbhU,OAAQruB,QACHA,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAO2iC,IAAM3iC,OAAS,SAAU4iC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAU9iC,EAAGC,QACVA,OAAO,YAAa,cAAeD,IACrC,WAupCE,MA/oCC,UAAUE,EAAGE,GA4KV,QAAS4iC,GAAa37B,GAClB,MAAOyU,UAASzU,EAAO,IAE3B,QAAS47B,GAAS1hC,EAASoD,GACvB,MAAOq+B,GAAazhC,EAAQE,IAAIkD,IAEpC,QAAS2mB,GAAK/iB,GAAd,GAEa26B,GADLC,IACJ,KAASD,IAAgB36B,GACrB46B,EAAI5xB,KAAK2xB,EAEb,OAAOC,GAEX,QAASC,GAAkBv8B,GACvB,IAAK,GAAI2B,KAAO3B,GACRw8B,EAAe17B,QAAQa,QAAc86B,EAAY37B,QAAQa,cAClD3B,GAAW2B,EAG1B,OAAO3B,GAEX,QAAS08B,GAAahiC,EAASsF,GAC3B,GAAyC28B,GAAUh7B,EAAKnB,EAAOo8B,EAA3DC,KAAqBC,IACzB,KAAKn7B,IAAO3B,GACR28B,EAAWh7B,EAAIjC,cACfk9B,EAAgB5iB,GAAcwiB,EAAe17B,QAAQ67B,QAChD7hC,EAAQsgB,SAAWwhB,GAAiBH,EAAY37B,QAAQ67B,aAClD38B,GAAW2B,IAElBnB,EAAQR,EAAW2B,GACfi7B,EACAC,EAAenyB,KAAK/I,EAAM,IAAMnB,EAAQ,KAExCs8B,EAAUn7B,GAAOnB,EAO7B,OAHIq8B,GAAetiC,SACfuiC,EAAUC,IAAaF,EAAehjC,KAAK,MAExCijC,EAuDX,QAASE,GAAkBtiC,EAASoD,GAApC,GAEYm/B,GAIAhiC,EAAyEiiC,CALjF,OAAIljB,IACIijB,EAAYviC,EAAQE,IAAImiC,IACxBE,GAAaE,EACM,SAAZr/B,EAAsB,EAAI,GAEjC7C,EAAQgiC,EAAUhiC,MAAU0D,OAAOb,EAAW,0BAA2Bo/B,EAAW,EACpFjiC,EACAiiC,EAAWf,EAAalhC,EAAM,KAE9BA,EAAQgiC,EAAUhiC,MAAMmiC,KACpB,EACA,EACA,EACA,EACA,GAEJt/B,EAAWA,EAAS4B,cAChB29B,EAAiBvgC,KAAKgB,GACtBo/B,EAAWn4B,WAAW9J,EAAM,GAAKA,EAAM,IACpB,cAAZ6C,EACPo/B,EAAWn4B,WAAW9J,EAAM,GAAKA,EAAM,IACpB,SAAZ6C,EACPo/B,EAAWn4B,WAAW9J,EAAM,IACT,UAAZ6C,IACPo/B,EAAWn4B,WAAWvD,KAAK87B,MAAMriC,EAAM,GAAIA,EAAM,OAGlDiiC,IAEAn4B,WAAWrK,EAAQE,IAAIkD,IAkVtC,QAASy/B,GAAWC,GAChB,MAAOA,GAAKxjC,OAAO,GAAG8F,cAAgB09B,EAAKtjC,UAAU,GAEzD,QAASujC,GAAa3rB,EAAM4rB,GACxB,GAAIC,GAAcC,EAAOt6B,OAAOo6B,GAAal2B,EAAam2B,EAAYh0B,UAAUnC,UAChF3E,GAAG06B,EAAWzrB,IAAS6rB,EACvB96B,EAAGC,QAAQ6G,UAAUmI,GAAQ,SAAU+rB,EAAWC,EAAMC,EAAMC,GAC1D,MAAO,IAAIL,GAAY/6B,KAAKlI,QAASmjC,EAAWC,EAAMC,EAAMC,IAEhE19B,EAAKkH,EAAY,SAAUjH,EAAK09B,GAC5Bp7B,EAAGC,QAAQ6G,UAAUmI,EAAOyrB,EAAWU,IAAiB,SAAUH,EAAMC,EAAMC,GAC1E,MAAO,IAAIL,GAAY/6B,KAAKlI,QAASujC,EAAcH,EAAMC,EAAMC,MAsD3E,QAASE,GAAmBpsB,EAAMhU,EAAUqgC,EAAcC,GACtDX,EAAa3rB,GACTtK,WAAY62B,EACZC,WAAY,SAAU99B,GAElB,MADAoC,MAAK27B,YAAc/9B,EACZoC,MAEX47B,SAAU,SAAUh+B,GAEhB,MADAoC,MAAK67B,UAAYj+B,EACVoC,MAEX87B,WAAY,WACR,MAAO97B,MAAK+7B,aAEhBC,QAAS,SAAU/sB,EAAOvX,GACtB,GAAiBgkC,GAAYE,EAAzBh1B,EAAO5G,KAA4Bsf,EAA0B,QAApBtf,KAAKi8B,WAAsBC,EAAiBt1B,EAAK9O,QAAQ0D,KAAKN,GAAWihC,IAAwBzmB,MAAMwmB,IAAmBA,GAAkBX,EAErLG,GADAS,EACaD,EACsB,IAArBl8B,KAAK27B,YACN37B,KAAK27B,YAELrc,EAAMic,EAAeC,EAGlCI,EAD0B,IAAnB57B,KAAK67B,UACD77B,KAAK67B,UAELvc,EAAMkc,EAAaD,EAE9Bv7B,KAAKo8B,UACLntB,EAAM/T,GAAY0gC,EAClBlkC,EAAIwD,GAAYwgC,IAEhBzsB,EAAM/T,GAAYwgC,EAClBhkC,EAAIwD,GAAY0gC,GAEpBh1B,EAAKm1B,YAAcrkC,EAAIwD,KAAcsgC,KAgHjD,QAASa,GAAWxU,EAAWoT,GAC3B,GAAIqB,GAAWrkC,EAAM2M,WAAWq2B,GAAWqB,SAAUv+B,EAAO8pB,EAAUyU,EAAWC,EAASC,KAAW,EAAI,IACzG,OAAOC,GAAMxB,GAAW/jC,QAAQ,QAAS6G,GAj1BhD,GAyHW2+B,GAmLJC,EAuNA3B,EAuIA4B,EAKGnB,EAyIHoB,EA+BAJ,EAMAK,EA+IAC,EACAC,EA2FAC,EA0CAC,EAjlCAjlC,EAAQvB,OAAOuB,MAAOgI,EAAKhI,EAAM8H,QAASrC,EAAOjH,EAAEiH,KAAMgD,EAASjK,EAAEiK,OAAQsF,EAAQvP,EAAEuP,MAAO9N,EAAUD,EAAMC,QAASoB,EAAUpB,EAAQoB,QAAS8d,EAAalf,EAAQkf,WAAYjf,EAAcD,EAAQC,YAAaglC,GACjNC,MAAO,EACPC,OAAQ,EACRC,OAAQ,EACRC,QAAS,GACVC,GACCC,UAAW,EACXC,WAAY,EACZC,WAAY,EACZC,YAAa,GACdC,EAAyD,IAAxCtgC,SAASmC,gBAAgB7F,MAAMa,OAAyB0c,EAAYojB,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,EAAYjnB,EAAWpf,IAAKyX,EAAQ7Q,KAAK6Q,MAAO6uB,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,IAAKv6B,IAC1jBlM,MACI4H,QAAS,QACTpF,SAAU,OACVmkC,WAAY,aACZ/C,UAAU,EACVgD,aAEJ3mC,OACI2H,QAAS,OACTpF,SAAU,OACVmkC,WAAY,aACZ/C,UAAU,EACVgD,SAAU,GAEdngB,MACI7e,QAAS,KACTpF,SAAU,MACVmkC,WAAY,aACZ/C,UAAU,EACVgD,SAAU,GAEdlgB,IACI9e,QAAS,OACTpF,SAAU,MACVmkC,WAAY,aACZ/C,UAAU,EACVgD,aAEJhgC,KAAOgB,QAAS,UAChB1H,QAAU0H,QAAS,OACnB+e,MACI/e,QAAS,MACTg/B,aAEJhgB,KACIhf,QAAS,KACTg/B,SAAU,GAEdhD,UAAYh8B,QAAS,YACrBi/B,YAAcj/B,QAAS,cAE/BrI,GAAM2M,WAAaA,GACnBlE,EAAOjK,EAAEwN,IACL4b,UAAW,SAAUC,EAAYC,GAC7B,MAAI5nB,GACO8H,EAAGu/B,UAAUx/B,KAAM8f,IAAc,EAAOC,IAAW,GAEnD/f,KAAKggB,KAAKF,EAAYC,MAIrC3I,IAAejf,IACfuF,EAAKm8B,EAAa,SAAUl8B,EAAKC,GAC7BnH,EAAEwN,GAAGrG,GAAS,SAAU6hC,GACpB,GAAkB,IAAPA,EACP,MAAOrF,GAAkBp6B,KAAMpC,EAE/B,IAAIgJ,GAAOnQ,EAAEuJ,MAAM,GAAI0/B,EAAiB9hC,EAAQ,IAAM6hC,EAAMvB,EAAgBtgC,EAAM1G,QAAQ+mC,EAAY,KAAO,GAOjH,OANQr3B,GAAK/M,MAAMie,QAAQ5Z,QAAQi8B,QAC3B1jC,EAAEuJ,MAAMhI,IAAImiC,GAAWuF,GAEvB94B,EAAK/M,MAAMie,QAAUlR,EAAK/M,MAAMie,QAAQ5gB,QAAY6E,OAAO6B,EAAQ,YAAa,KAAM8hC,GAGvF1/B,MAEXvJ,EAAEwJ,GAAG0/B,KAAK/hC,GAAS,SAAUqC,GACzBxJ,EAAEwJ,EAAG2/B,MAAMhiC,GAAOqC,EAAG4/B,QAGzBnD,EAAWjmC,EAAEwJ,GAAG8G,UAAU+4B,IAC9BrpC,EAAEwJ,GAAG8G,UAAU+4B,IAAM,WACjB,MAAIjG,GAAY37B,QAAQ8B,KAAK+/B,UAClB59B,WAAW1L,EAAEuJ,KAAK4/B,MAAM5/B,KAAK+/B,SAEjCrD,EAAS51B,MAAM9G,KAAMjF,aAGpC9C,EAAMmJ,YAAc,SAAUtJ,EAASuJ,EAASjB,EAASkB,GAkBrD,MAjBID,KACAA,EAAUA,EAAQrK,MAAM,KACpBmB,IACAiI,EAAUM,GACNs/B,UAAW,MACX3/B,SAAU,IACV4/B,KAAM,YACP7/B,GACHtI,EAAQE,IAAIgnC,GAAY5+B,EAAQ4/B,UAAY,IAAM5/B,EAAQC,SAAW,MAAQD,EAAQ6/B,MACrFpW,WAAW,WACP/xB,EAAQE,IAAIgnC,GAAY,IAAIhnC,IAAIukC,IACjCn8B,EAAQC,WAEf3C,EAAK2D,EAAS,SAAU1D,EAAKC,GACzB9F,EAAQsJ,YAAYxD,EAAO0D,MAG5BxJ,GAEXG,EAAM4H,aAAe,SAAUC,EAAOogC,GAClC,GAAIngC,KAoBJ,OAnBqB,gBAAVD,GACPpC,EAAKoC,EAAM9I,MAAM,KAAM,SAAU2G,EAAKC,GAClC,GAAIuiC,IAAoBnC,EAAmB9jC,KAAK0D,GAAQwiC,EAAWxiC,EAAM1G,QAAQ6mC,EAAkB,SAAU1lC,EAAOgoC,EAAIC,GAChH,MAAOD,GAAK,IAAMC,EAAGxjC,gBACrByjC,EAASH,EAASppC,MAAM,KAAMikC,EAAYsF,EAAO,GAAIC,IACzDD,GAAO5oC,OAAS,IAChB6oC,EAAWvF,UAAYiF,GAAUC,EAAmBv7B,GAAWq2B,GAAW36B,QAAU26B,GAExFl7B,EAAQwgC,EAAO,IAAMC,IAGzB9iC,EAAKoC,EAAO,SAAUnC,GAClB,GAAIs9B,GAAYj7B,KAAKi7B,SACjBA,IAAaiF,IAAWlC,EAAmB9jC,KAAKyD,KAChDqC,KAAKi7B,UAAYr2B,GAAWq2B,GAAW36B,SAE3CP,EAAQpC,GAAOqC,OAGhBD,GA4CP5H,GACAuI,EAAOT,GACHo/B,WAAY,SAAUvnC,EAASsF,EAAYgD,GAA/B,GACJpI,GAAsDyoC,EAOtDC,EACAC,EARK1M,EAAQ,EAAG2M,EAAU9oC,EAAQ0D,KAAK,WAC3C4E,GAAUM,GACNL,SAAU,IACV4/B,KAAM,WACN1/B,SAAU,KACVy/B,UAAW,OACZ5/B,GACCsgC,GAAuB,EACvBC,EAAiB,WACZD,IACDA,GAAuB,EACnBD,IACA1V,aAAa0V,GACbA,EAAY,MAEhB3oC,EAAQmuB,WAAW0Y,IAAUnf,UAAUxnB,IAAIgnC,GAAY,IAAIhnC,IAAIgnC,IAC/D5+B,EAAQG,SAAS4H,KAAKrQ,KAG9BsI,EAAQC,SAAW5J,EAAEwJ,GAAKxJ,EAAEwJ,GAAG4gC,OAAOzgC,EAAQC,WAAaD,EAAQC,SAAWD,EAAQC,SACtFrI,EAAM8hC,EAAahiC,EAASsF,GAC5B3G,EAAEqqC,MAAMF,EAAS/e,EAAK7pB,IACtBF,EAAQ0D,KAAK,OAAQ/E,EAAEsqC,OAAOH,IAAU3nC,SACxCnB,EAAQE,IAAIgnC,GAAY5+B,EAAQ4/B,UAAY,IAAM5/B,EAAQC,SAAW,MAAQD,EAAQ6/B,MAAMjoC,IAAIgnC,IAC/FlnC,EAAQE,IAAIA,GAAKA,IAAImiC,IACjBhiC,EAAY2gB,QACZhhB,EAAQyP,IAAIpP,EAAY2gB,MAAO6nB,GACN,IAArBvgC,EAAQC,WACR4zB,EAAQ,MAGhBwM,EAAY5W,WAAW8W,EAAgBvgC,EAAQC,SAAW4zB,GAC1Dn8B,EAAQ0D,KAAKmjC,GAAU8B,GACvB3oC,EAAQ0D,KAAKujC,GAAmB4B,IAEpCnB,UAAW,SAAU1nC,EAASgoB,EAAYC,GACtC,GAAIma,GAAW8G,EAAWlpC,EAAQ0D,KAAK,QAASylC,GAAkBlhB,GAAWihB,EAAUjgC,EAAmBjJ,EAAQ0D,KAAKujC,GAUvH,OATIkC,KACA/G,EAAYjiC,EAAMkF,kBAAkBrF,EAAQ,GAAIkpC,IAEhDjgC,GACAA,IAEAkgC,GACAnpC,EAAQE,IAAIkiC,GAETpiC,EAAQmuB,WAAW,QAAQjG,KAAKF,MAqC/C6c,EAAY1kC,EAAMrB,MAAM8J,QACxBC,KAAM,SAAU7I,EAASsI,GACrB,GAAIwG,GAAO5G,IACX4G,GAAK9O,QAAUA,EACf8O,EAAK7G,WACL6G,EAAKxG,QAAUA,EACfwG,EAAKs6B,YAETC,IAAK,SAAUphC,GAAV,GACgBwgC,GAAQ5iC,EAAKyjC,EAA6H9gB,EAAQ3lB,EAAU0mC,EAepKC,EAfL16B,EAAO5G,KAAwBrI,EAASoI,EAAQpI,OAAQG,EAAU8O,EAAK9O,QAASsI,EAAUwG,EAAKxG,QAASmhC,EAAW9qC,EAAE+qC,WAAYvyB,KAAYvX,IAIjJ,KAHAkP,EAAK7G,QAAUA,EACfwhC,EAASE,KAAKhrC,EAAEuP,MAAMY,EAAM,aAC5B9O,EAAQ0D,KAAK,aAAa,GACrBmC,EAAM,EAAGA,EAAMhG,EAAQgG,IAOxB,IANA4iC,EAASxgC,EAAQpC,GACjB4iC,EAAOmB,WAAWthC,EAAQE,SAC1BigC,EAAOhb,WAAWnlB,GAClBwG,EAAK+6B,qBAAqBpB,EAAOW,SACjCX,EAAOvE,QAAQ/sB,EAAOvX,GACtBiD,EAAW4lC,EAAO5lC,WACbymC,EAAM,EAAGC,EAAiB1mC,EAAShD,OAAQypC,EAAMC,EAAgBD,IAClEzmC,EAASymC,GAAK/gC,SAASD,EAAQC,UAAU8gC,KAGjD,KAASG,IAAclhC,GAAQL,QAC3BW,EAAOhJ,EAAK0I,EAAQL,QAAQuhC,GAAYlkC,WAgB5C,KAdKtF,EAAQgC,GAAG,aACZ4G,EAAOuO,GAASlV,QAASjC,EAAQ0D,KAAK,eAAiB,UAEvD4b,IAAehX,EAAQwhC,QACvBthB,EAASxoB,EAAQ0D,KAAK,mBAClB8kB,IACArR,EAAQvO,EAAO4f,EAAQrR,KAG/BA,EAAQ6qB,EAAahiC,EAASmX,GAC1BmI,IAAejf,IACf8W,EAAQ0qB,EAAkB1qB,IAE9BnX,EAAQE,IAAIiX,GAAOjX,IAAImiC,IAClBx8B,EAAM,EAAGA,EAAMhG,EAAQgG,IACxBoC,EAAQpC,GAAKkkC,OAOjB,OALIzhC,GAAQO,MACRP,EAAQO,OAEZ7I,EAAQ0D,KAAK,kBAAmB9D,GAChCuI,EAAGe,QAAQlJ,EAASJ,EAAKgJ,KAAWN,GAAWG,SAAUghC,EAASO,WAC3DP,EAASpgC,WAEpB6e,KAAM,WACFvpB,EAAEuJ,KAAKlI,SAAS+nB,WAAU,GAAM,IAEpC8hB,qBAAsB,SAAUT,GAE5B,IADA,GAA4BtjC,GAAxB9F,EAAUkI,KAAKlI,QAAgBgD,EAAI,EAAGnD,EAASupC,EAAQvpC,OACpDmD,EAAInD,EAAQmD,IACf8C,EAAQsjC,EAAQpmC,GAChBkF,KAAKkhC,QAAQp5B,KAAKlK,GACb9F,EAAQ0D,KAAKoC,IACd9F,EAAQ0D,KAAKoC,EAAO9F,EAAQE,IAAI4F,KAI5CmkC,gBAAiB,WAAA,GAEJjnC,GAAOnD,EACRiG,EAFJ9F,EAAUkI,KAAKlI,OACnB,KAASgD,EAAI,EAAGnD,EAASqI,KAAKkhC,QAAQvpC,OAAQmD,EAAInD,EAAQmD,IAClD8C,EAAQoC,KAAKkhC,QAAQpmC,GACzBhD,EAAQE,IAAI4F,EAAO9F,EAAQ0D,KAAKoC,KAGxC2C,SAAU,WACN,GAAIqG,GAAO5G,KAAMrC,EAAM,EAAG7F,EAAU8O,EAAK9O,QAASsI,EAAUwG,EAAKxG,QAASL,EAAU6G,EAAK7G,QAASpI,EAASoI,EAAQpI,MASnH,KARAG,EAAQmuB,WAAW,aAAazG,UAC5Bpf,EAAQU,MACRhJ,EAAQ0D,KAAK,aAAc1D,EAAQE,IAAI,YAAY8I,OAEvDd,KAAK+hC,kBACDlE,IAAYzmB,GACZyS,WAAWpzB,EAAEuP,MAAMhG,KAAM,mBAAoB,GAE1CrC,EAAMhG,EAAQgG,IACjBoC,EAAQpC,GAAKkD,UAEbT,GAAQW,kBACRX,EAAQW,iBAAiBjJ,MAIrCmI,EAAGkB,QAAU,SAAUrJ,EAASsI,GAAnB,GACS26B,GAA+GwF,EAExHe,EAFLvhC,KAA2BiiC,EAAY,GAAIrF,GAAU7kC,EAASsI,GAAU6hC,EAAgBhqC,EAAM4H,aAAaO,EAAQL,QACvHK,GAAQL,QAAUkiC,CAClB,KAASX,IAAcW,GACnBlH,EAAc96B,EAAG06B,EAAW2G,IACxBvG,IACAwF,EAAS,GAAIxF,GAAYjjC,EAASmqC,EAAcX,GAAYrG,WAC5Dl7B,EAAQ+H,KAAKy4B,GAGjBxgC,GAAQ,GACRiiC,EAAUb,IAAIphC,IAETjI,EAAQgC,GAAG,aACZhC,EAAQE,KAAM+B,QAASjC,EAAQ0D,KAAK,eAAiB,UAAWxD,IAAI,WAEpEoI,EAAQO,MACRP,EAAQO,OAEZ7I,EAAQ0nB,UACRwiB,EAAUzhC,aAGlBG,EAAOT,GACHe,QAAS,SAAUylB,EAAUrpB,EAAYgD,GACrC,GAAI8hC,GAAgB9hC,EAAQi/B,cAAe,QACpCj/B,GAAQi/B,WACXlnC,GAAe,cAAgB8H,IAAMiiC,EACrCjiC,EAAGo/B,WAAW5Y,EAAUrpB,EAAYgD,GAEhCgX,EACAqP,EAASzlB,QAAQ24B,EAAkBv8B,IAC/B8D,OAAO,EACPihC,MAAM,EACNrhC,MAAM,EACNT,SAAUD,EAAQC,SAClBE,SAAUH,EAAQG,WAGtBkmB,EAAS/oB,KAAK,WACV,GAAI5F,GAAUrB,EAAEuJ,MAAOoiC,IACvB1kC,GAAKk8B,EAAgB,SAAUj8B,EAAKC,GAAf,GACbs1B,GAEImP,EAQQroC,EAAkCsoC,EAgBlCC,EAGIC,EAAoDC,EA7B5DC,EAAetlC,EAAaA,EAAWQ,GAAS,IAAM,IAC9D8kC,KACIL,EAASjlC,EACTQ,IAASu/B,IAAmB//B,EAAWQ,KAAWjH,GAClDu8B,EAASwP,EAAarqC,MAAMylC,GACxB1mB,GACA1W,EAAO2hC,GAAUjF,OAAQlK,EAAO,MAGhCt1B,IAAS4/B,IAAuBpgC,EAAWQ,KAAWjH,IAClDqD,EAAWlC,EAAQE,IAAI8mC,IAAWwD,EAAsB,YAAZtoC,GAAsC,SAAZA,EACrElC,EAAQ0D,KAAKqjC,MACVyD,EACAxqC,EAAQ0D,KAAKqjC,IACTv/B,IAAKk6B,EAAS1hC,EAAS,QAAU,EACjCY,KAAM8gC,EAAS1hC,EAAS,SAAW,EACnCc,OAAQ4gC,EAAS1hC,EAAS,UAC1Ba,MAAO6gC,EAAS1hC,EAAS,WAG7BA,EAAQ0D,KAAKqjC,IACTv/B,IAAKk6B,EAAS1hC,EAAS,cAAgB,EACvCY,KAAM8gC,EAAS1hC,EAAS,eAAiB,KAIjDyqC,EAAmBzqC,EAAQ0D,KAAKqjC,IACpC3L,EAASwP,EAAarqC,MAAMylC,GACxB5K,IACIsP,EAAK5kC,GAASihC,GAAY,IAAM,GAAS3L,EAAO,GAAIuP,EAAK7kC,GAASihC,GAAY,KAAO3L,EAAO,IAAMA,EAAO,GACzGoP,GACK5sB,MAAM6sB,EAAiB5pC,OAKnB+c,MAAM8sB,IACP9hC,EAAO2hC,GAAU3pC,KAAM6pC,EAAiB7pC,KAAO8pC,IAL9C9sB,MAAM8sB,IACP9hC,EAAO2hC,GAAU1pC,MAAO4pC,EAAiB5pC,MAAQ6pC,IAOpD9sB,MAAM6sB,EAAiB3pC,QAKnB8c,MAAM+sB,IACP/hC,EAAO2hC,GAAU/iC,IAAKijC,EAAiBjjC,IAAMmjC,IAL5C/sB,MAAM+sB,IACP/hC,EAAO2hC,GAAUzpC,OAAQ2pC,EAAiB3pC,OAAS6pC,MAQtD/sB,MAAM8sB,IACP9hC,EAAO2hC,GAAUM,WAAYJ,EAAiB7pC,KAAO8pC,IAEpD9sB,MAAM+sB,IACP/hC,EAAO2hC,GAAUO,UAAWL,EAAiBjjC,IAAMmjC,QAMlErrB,GAAuB,SAATxZ,GAAoBA,IAASykC,UACrCA,GAAOzkC,GAEdykC,GACA3hC,EAAO0hC,EAAUC,MAIzB/oC,EAAQiB,YACD6nC,GAAShF,MAEpBtlC,EAAQkJ,QAAQohC,GACZlhC,OAAO,EACPihC,MAAM,EACNrhC,MAAM,EACNT,SAAUD,EAAQC,SAClBE,SAAUH,EAAQG,gBAO1CN,EAAG2f,gBAAkB3f,EAAGkB,QACpB65B,EAAS/iC,EAAMrB,MAAM8J,QACrBC,KAAM,SAAU7I,EAASmjC,GACrB,GAAIr0B,GAAO5G,IACX4G,GAAK9O,QAAUA,EACf8O,EAAKq1B,WAAahB,EAClBr0B,EAAKxG,WACLwG,EAAKi8B,sBACAj8B,EAAKs6B,UACNt6B,EAAKs6B,aAGb5gC,QAAS,WAEL,MADAN,MAAKo8B,UAAW,EACTp8B,KAAKmhC,OAEhB2B,KAAM,WAEF,MADA9iC,MAAKo8B,UAAW,EACTp8B,KAAKmhC,OAEhB7/B,IAAK,SAAUyhC,GAEX,MADA/iC,MAAK6iC,mBAAmB/6B,KAAKi7B,GACtB/iC,MAEXi7B,UAAW,SAAUr9B,GAEjB,MADAoC,MAAKi8B,WAAar+B,EACXoC,MAEXK,SAAU,SAAUA,GAEhB,MADAL,MAAKgjC,UAAY3iC,EACVL,MAEXijC,aAAc,WACV,GAAIr8B,GAAO5G,KAAMgiC,EAAY,GAAIrF,GAAU/1B,EAAK9O,SACxCwI,QAASsG,EAAKw1B,SACd/7B,SAAUuG,EAAKo8B,YACfjjC,EAAU6G,EAAKi8B,mBAAmB1sB,QAAQvP,GAClD,OAAOo7B,GAAUb,IAAIphC,IAEzBohC,IAAK,WACD,GAAInhC,KAAK6iC,oBAAsB7iC,KAAK6iC,mBAAmB,GACnD,MAAO7iC,MAAKijC,cAEhB,IAAmGrlC,GAAsD0iB,EAArJ1Z,EAAO5G,KAAMlI,EAAU8O,EAAK9O,QAAS6F,EAAM,EAAGujC,EAAUt6B,EAAKs6B,QAASvpC,EAASupC,EAAQvpC,OAAe4pC,EAAW9qC,EAAE+qC,WAAYvyB,KAAYvX,KAAkBiD,EAAWiM,EAAKjM,WAAY0mC,EAAiB1mC,EAAShD,MAGvN,KAFA4pC,EAASE,KAAKhrC,EAAEuP,MAAMY,EAAM,cAC5B9O,EAAQ0D,KAAK,aAAa,GACrBmC,EAAM,EAAGA,EAAMhG,EAAQgG,IACxBC,EAAQsjC,EAAQvjC,GACX7F,EAAQ0D,KAAKoC,IACd9F,EAAQ0D,KAAKoC,EAAO9F,EAAQE,IAAI4F,GAGxC,KAAKD,EAAM,EAAGA,EAAM0jC,EAAgB1jC,IAChChD,EAASgD,GAAK0C,SAASuG,EAAKo8B,WAAW7B,KAuB3C,OArBAv6B,GAAKo1B,QAAQ/sB,EAAOvX,GACfI,EAAQgC,GAAG,aACZ4G,EAAOuO,GAASlV,QAASjC,EAAQ0D,KAAK,eAAiB,UAEvD4b,IACAkJ,EAASxoB,EAAQ0D,KAAK,mBAClB8kB,IACArR,EAAQvO,EAAO4f,EAAQrR,KAG/BA,EAAQ6qB,EAAahiC,EAASmX,GAC1BmI,IAAejf,IACf8W,EAAQ0qB,EAAkB1qB,IAE9BnX,EAAQE,IAAIiX,GAAOjX,IAAImiC,IACvBvzB,EAAKi7B,QACL/pC,EAAQ0D,KAAK,kBAAmB9D,GAChCuI,EAAGe,QAAQlJ,EAASJ,GAChB2I,SAAUuG,EAAKo8B,UACfziC,SAAUghC,EAASO,UAEhBP,EAASpgC,WAEpB6e,KAAM,WACF,GAAIriB,GAAM,EAAGhD,EAAWqF,KAAKrF,WAAY0mC,EAAiB1mC,EAAShD,MACnE,KAAKgG,EAAM,EAAGA,EAAM0jC,EAAgB1jC,IAChChD,EAASgD,GAAKqiB,MAGlB,OADAvpB,GAAEuJ,KAAKlI,SAAS+nB,WAAU,GAAM,GACzB7f,MAEX+hC,gBAAiB,WAAA,GAEJjnC,GAAOnD,EACRiG,EAFJ9F,EAAUkI,KAAKlI,OACnB,KAASgD,EAAI,EAAGnD,EAASqI,KAAKkhC,QAAQvpC,OAAQmD,EAAInD,EAAQmD,IAClD8C,EAAQoC,KAAKkhC,QAAQpmC,GACzBhD,EAAQE,IAAI4F,EAAO9F,EAAQ0D,KAAKoC,KAGxCslC,UAAW,WACP,GAAIt8B,GAAO5G,KAAMlI,EAAU8O,EAAK9O,OAChCA,GAAQmuB,WAAW,aAAazG,UAChC5Y,EAAKm7B,kBACDn7B,EAAKk1B,cACLhkC,EAAQ0D,KAAK,aAAc1D,EAAQE,IAAI,YAAY8I,OAEnD+8B,IAAYzmB,GACZyS,WAAWpzB,EAAEuP,MAAMY,EAAM,mBAAoB,GAEjDA,EAAK/F,YAET0kB,WAAY,SAAUnlB,GAClBM,GAAO,EAAMV,KAAKI,QAASA,IAE/BzF,SAAU,WACN,UAEJmhC,WAAYrlC,EAAEmK,KACdihC,MAAOprC,EAAEmK,KACTo7B,QAASvlC,EAAEmK,KACXC,SAAUpK,EAAEmK,KACZgE,cACA88B,WAAY,SAAUphC,GAElB,MADAN,MAAKo8B,SAAW97B,EACTN,QAkBX48B,GACI,OACA,QACA,KACA,QACDnB,GACC,KACA,OAERZ,EAAa,WACTj2B,WAAYg4B,EACZuG,QAAS,SAAUvlC,GAEf,MADAoC,MAAKI,QAAQ+iC,QAAUvlC,EAChBoC,MAEXg8B,QAAS,SAAU/sB,EAAOvX,GACtB,GAAiB0rC,GAAbx8B,EAAO5G,KAAWlI,EAAU8O,EAAK9O,QAASyB,EAAatB,EAAMuB,YAAaC,EAAcxB,EAAMyB,aAAcuhC,EAAYr2B,GAAWgC,EAAKq1B,YAAa78B,GAAU67B,EAAUqE,UAAYrE,EAAUqB,SAAW7iC,EAAY3B,GAAWyB,EAAWzB,IAAW4jC,EAAat8B,GAAUwH,EAAKxG,SAAWwG,EAAKxG,QAAQ+iC,SAAW,GAAK5E,EAAI3C,EAAW,KAC1Uh1B,GAAKw1B,WACLgH,EAAMn0B,EACNA,EAAQvX,EACRA,EAAM0rC,GAENhsB,GACAnI,EAAMgsB,EAAUoE,YAAc3D,EAC9BhkC,EAAIujC,EAAUoE,YAAczD,IAE5B3sB,EAAMgsB,EAAU//B,UAAYwgC,EAC5BhkC,EAAIujC,EAAU//B,UAAY0gC,MAItCf,EAAa,QACTj2B,WAAYg4B,EACZj8B,KAAM,SAAU7I,EAASmjC,EAAWoI,GAChCrI,EAAOj0B,UAAUpG,KAAKwH,KAAKnI,KAAMlI,EAASmjC,GAC1Cj7B,KAAKI,SAAYijC,SAAUA,IAE/BC,gBAAiB,SAAU1lC,GAEvB,MADAoC,MAAKI,QAAQkjC,gBAAkB1lC,EACxBoC,MAEXrF,SAAU,WAAA,GACFiM,GAAO5G,KAAMM,EAAUsG,EAAKw1B,SAAUiH,EAAWz8B,EAAKxG,QAAQijC,SAAUF,EAAUv8B,EAAKxG,QAAQkjC,iBAAmB,EAAGhU,EAAM1oB,EAAKq1B,WAChIthC,GAAY1C,EAAMgI,GAAG2G,EAAK9O,SAASyrC,QAAQjU,GAAKoS,WAAWphC,GAI/D,OAHI+iC,IACA1oC,EAASmN,KAAK7P,EAAMgI,GAAGojC,GAAUE,QAAQ3+B,GAAW0qB,GAAKhvB,SAAS6iC,QAAQA,GAASzB,YAAYphC,IAE5F3F,KA0Cf2gC,EAAmB,OAAQ,UAAW,EAAG,GACzCA,EAAmB,OAAQ,QAAS,EAAG,KACvCT,EAAa,eACTmB,QAAS,SAAU/sB,EAAOvX,GACtB,GAAyH8rC,GAArH58B,EAAO5G,KAAMlI,EAAU8O,EAAK9O,QAASsI,EAAUwG,EAAKxG,QAASqjC,EAAS3rC,EAAQ0D,KAAKkjC,IAASt/B,EAASgB,EAAQhB,OAAgBkB,EAAUsG,EAAKw1B,QAC3I97B,IAAsB,OAAXmjC,GACZ3rC,EAAQ0D,KAAKkjC,GAAQv8B,WAAWrK,EAAQE,IAAI,UAAYoI,EAAQ0zB,QAEpE0P,EAAS1rC,EAAQ0D,KAAKkjC,KAAW,EACjChnC,EAAI,UAAY0I,EAAQ0zB,MAASxzB,EAA4BkjC,EAAlBA,EAASpkC,KAG5Dy7B,EAAa,WACTmB,QAAS,SAAU/sB,EAAOvX,GACtB,GAAIkP,GAAO5G,KAAMlI,EAAU8O,EAAK9O,QAASsI,EAAUwG,EAAKxG,QAAShB,EAASgB,EAAQhB,OAAOpI,MAAM,KAAMsJ,EAAUsG,EAAKw1B,QAChHhlB,IACA1f,EAAIgmC,WAAcp9B,EAAsB,EAAZlB,EAAO,GACnC1H,EAAIimC,WAAcr9B,EAAsB,EAAZlB,EAAO,KAEnC1H,EAAIgB,KAAQ4H,EAAsB,EAAZlB,EAAO,GAC7B1H,EAAI4H,IAAOgB,EAAsB,EAAZlB,EAAO,IAEhCtH,EAAQE,IAAI,WAGpB6iC,EAAa,UACTj2B,YACI,aACA,YAEJs8B,SAAUtC,IACV5C,QAAS,SAAU/sB,EAAOvX,GACtB,GAAIkP,GAAO5G,KAAMlI,EAAU8O,EAAK9O,QAASsI,EAAUwG,EAAKxG,QAASE,EAAUsG,EAAKw1B,SAAUlhC,EAA+B,aAApB0L,EAAKq1B,WAA4BM,EAASC,EAAOkH,EAAY5rC,EAAQ,GAAG+B,MAAMqB,GAAWyoC,EAAY7rC,EAAQ0D,KAAKN,GAAWvD,EAASwK,WAAWwhC,GAAaD,GAAYE,EAAan0B,EAAM3X,EAAQE,IAAIkD,EAAUsjC,GAAMtjC,KAC9T+T,GAAM9Q,SAAWsgC,EACjB9mC,EAASyI,GAAWA,EAAQwhC,MAAQgC,GAAcjsC,EAASA,GAAUisC,EACrElsC,EAAIwD,IAAaoF,EAAU,EAAI3I,GAAU4mC,EACzCtvB,EAAM/T,IAAaoF,EAAU3I,EAAS,GAAK4mC,EACvCoF,IAAchtC,GACdmB,EAAQ0D,KAAKN,EAAUwoC,IAG/B5H,WAAY,WACR,MAAO97B,MAAKo8B,UAEhBv7B,SAAU,WACN,GAAI+F,GAAO5G,KAAMlI,EAAU8O,EAAK9O,QAASoD,EAA+B,aAApB0L,EAAKq1B,WAA4BM,EAASC,EAAO7kC,EAASG,EAAQ0D,KAAKN,EACvHvD,IAAU6mC,GAAQ7mC,IAAW2mC,GAC7BzU,WAAW,WACP/xB,EAAQE,IAAIkD,EAAUsjC,GAAMxmC,IAAIkD,IACjC,MAIX2hC,GACA7iC,SAAU,WACV2oC,WAAY,EACZC,UAAW,EACXxF,MAAO,GAEXvC,EAAa,YACTl6B,KAAM,SAAU7I,EAASwoB,GACrBtgB,KAAKlI,QAAUA,EACfkI,KAAKI,SAAYkgB,OAAQA,GACzBtgB,KAAKkhC,YAETW,MAAO,WACH7hC,KAAKlI,QAAQ0/B,SAASj6B,SAASya,OAEnCgkB,QAAS,SAAU/sB,EAAOvX,GACtB,GAAIkP,GAAO5G,KAAMlI,EAAU8O,EAAK9O,QAAS+rC,EAAW5jC,EAAG6jC,IAAIhsC,GAAUisC,EAAW9jC,EAAG6jC,IAAIl9B,EAAKxG,QAAQkgB,QAAS0jB,EAAe5J,EAAkBtiC,EAAS,SAAUslC,EAAQn9B,EAAGgkC,UAAUF,EAAUF,GAAWK,EAAkBjkC,EAAGikC,gBAAgBH,EAAUF,EAC1PnjC,GAAOuO,EAAO4tB,GACdnlC,EAAI0lC,MAAQ,EACZtlC,EAAQE,IAAImiC,GAAW,YAAYniC,IAAImiC,IACvCriC,EAAQE,IAAImiC,GAAW,SAAW6J,EAAe,KACjD/0B,EAAM3P,IAAMukC,EAASvkC,IACrB2P,EAAMvW,KAAOmrC,EAASnrC,KACtBuW,EAAMi1B,gBAAkBA,EAAgB5Q,EAAIiL,EAAK,IAAM2F,EAAgB7yB,EAAIktB,EACvE33B,EAAKw1B,SACLntB,EAAMmuB,MAAQA,EAEd1lC,EAAI0lC,MAAQA,KAIpBX,GACAn9B,IAAK,6BACL1G,OAAQ,6BACRF,KAAM,6BACNC,MAAO,8BAEPmkC,GACAx9B,KACI2P,MAAO,gBACPvX,IAAK,mBAETkB,QACIqW,MAAO,mBACPvX,IAAK,iBAETgB,MACIuW,MAAO,gBACPvX,IAAK;EAETiB,OACIsW,MAAO,kBACPvX,IAAK,kBAObmjC,EAAa,eACTj2B,WAAYg4B,EACZj8B,KAAM,SAAU7I,EAASmjC,EAAWpT,GAChCmT,EAAOj0B,UAAUpG,KAAKwH,KAAKnI,KAAMlI,EAASmjC,GAC1Cj7B,KAAKmkC,WAAatc,GAEtBmU,QAAS,SAAU/sB,EAAOvX,GACtB,GAAIkP,GAAO5G,KAAMM,EAAUsG,EAAKw1B,SAAUnB,EAAY36B,EAAUsE,GAAWgC,EAAKq1B,YAAY37B,QAAUsG,EAAKq1B,WAAYmI,EAAWtH,EAAU7B,EAC5IhsB,GAAMo1B,OAAS,EACXz9B,EAAK09B,cACLr1B,EAAMs1B,KAAOlI,EAAWz1B,EAAKu9B,WAAYlsC,EAAM2M,WAAWq2B,GAAW36B,UAEzE2O,EAAMgwB,IAAYR,EAClB/mC,EAAIyiC,IAAaiF,IAAyB9+B,EAAU8jC,EAASn1B,MAAQm1B,EAAS1sC,KAC9EuX,EAAMkrB,IAAaiF,IAAyB9+B,EAAU8jC,EAAS1sC,IAAM0sC,EAASn1B,QAElF4yB,MAAO,WACH7hC,KAAKmkC,WAAWK,OAAOxkC,KAAKlI,UAEhC2sC,KAAM,SAAU7mC,GAEZ,MADAoC,MAAK0kC,MAAQ9mC,EACNoC,MAEX87B,WAAY,WACR,GAAIl1B,GAAO5G,KAAMM,EAAUsG,EAAKw1B,SAAUqI,EAAO79B,EAAK89B,KACtD,OAAOpkC,KAAYmkC,IAASnkC,GAAWmkC,GAE3CpI,WAAY,SAAUz+B,GAElB,MADAoC,MAAKskC,YAAc1mC,EACZoC,MAEX2kC,UAAW,WAEP,MADA3kC,MAAKlI,QAAQwC,SAAS,aACf0F,QAGf66B,EAAa,cACTj2B,WAAYg4B,EACZj8B,KAAM,SAAU7I,EAASmjC,EAAWpT,GAChCmT,EAAOj0B,UAAUpG,KAAKwH,KAAKnI,KAAMlI,EAASmjC,GAC1Cj7B,KAAKmkC,WAAatc,GAEtBqZ,SAAU,QACVlF,QAAS,SAAU/sB,EAAOvX,GACtB,GAAIkP,GAAO5G,KAAMi7B,EAAYr0B,EAAKw1B,SAAWx3B,GAAWgC,EAAKq1B,YAAY37B,QAAUsG,EAAKq1B,UACxFhtB,GAAMs1B,KAAOlI,EAAWz1B,EAAKu9B,WAAYlJ,GACzChsB,EAAMiZ,QAAU,KAChBxwB,EAAIwwB,QAAU,GAElB4T,WAAY,WACR,GAAIl1B,GAAO5G,KAAMM,EAAUsG,EAAKw1B,SAAUqI,EAAO79B,EAAK89B,KACtD,OAAOpkC,KAAYmkC,IAASnkC,GAAWmkC,GAE3CA,KAAM,SAAU7mC,GAEZ,MADAoC,MAAK0kC,MAAQ9mC,EACNoC,QAGf66B,EAAa,YACTj2B,YACI,aACA,YAEJjE,KAAM,SAAU7I,EAASmjC,EAAWwJ,EAAMG,GACtC5J,EAAOj0B,UAAUpG,KAAKwH,KAAKnI,KAAMlI,EAASmjC,GAC1Cj7B,KAAKI,WACLJ,KAAKI,QAAQqkC,KAAOA,EACpBzkC,KAAKI,QAAQwkC,KAAOA,GAExBjqC,SAAU,WACN,GAAyLkqC,GAArLj+B,EAAO5G,KAAMI,EAAUwG,EAAKxG,QAAS66B,EAAgC,eAApBr0B,EAAKq1B,WAA8B,OAAS,MAAO6I,EAAmB7sC,EAAM2M,WAAWq2B,GAAW36B,QAASA,EAAUsG,EAAKw1B,SAAgB2I,EAAY3kC,EAAQqkC,KAAKtoC,OAAM,GAAMmpB,WAAW,MAAO0f,EAAY5kC,EAAQwkC,KAAKzoC,OAAM,GAAMmpB,WAAW,MAAOxtB,EAAU8O,EAAK9O,OAM5T,OALIwI,KACAukC,EAAO5J,EACPA,EAAY6J,EACZA,EAAmBD,IAGnB5sC,EAAMgI,GAAGG,EAAQqkC,MAAMQ,WAAWhK,EAAWnjC,GAAS2sC,MAAK,GAAM/C,WAAWphC,GAC5ErI,EAAMgI,GAAGG,EAAQwkC,MAAMK,WAAWH,EAAkBhtC,GAAS4pC,WAAWphC,GACxErI,EAAMgI,GAAG8kC,GAAWG,YAAYjK,EAAWnjC,GAAS2sC,MAAK,GAAMpI,YAAW,GAAMsI,YAAYjD,WAAWphC,GACvGrI,EAAMgI,GAAG+kC,GAAWE,YAAYJ,EAAkBhtC,GAASukC,YAAW,GAAMsI,YAAYjD,WAAWphC,KAG3G07B,QAAS,SAAU/sB,EAAOvX,GACtBuX,EAAMiwB,IAAeC,GACrBlwB,EAAMk2B,eAAiB,cACvBl2B,EAAMiZ,QAAU,KAChBxwB,EAAIwwB,QAAU,GAElBrnB,SAAU,WACNb,KAAKlI,QAAQ0vB,KAAK,cAAca,YAGxCwS,EAAa,QACTj2B,YACI,aACA,YAEJjE,KAAM,SAAU7I,EAASmjC,EAAWwJ,EAAMG,GACtC5J,EAAOj0B,UAAUpG,KAAKwH,KAAKnI,KAAMlI,EAASmjC,GAC1Cj7B,KAAKI,WACLJ,KAAKI,QAAQqkC,KAAOA,EACpBzkC,KAAKI,QAAQwkC,KAAOA,GAExBjqC,SAAU,WACN,GAAyLkqC,GAArLj+B,EAAO5G,KAAMI,EAAUwG,EAAKxG,QAAS66B,EAAgC,eAApBr0B,EAAKq1B,WAA8B,OAAS,MAAO6I,EAAmB7sC,EAAM2M,WAAWq2B,GAAW36B,QAASA,EAAUsG,EAAKw1B,SAAgBtkC,EAAU8O,EAAK9O,OAM9M,OALIwI,KACAukC,EAAO5J,EACPA,EAAY6J,EACZA,EAAmBD,IAGnB5sC,EAAMgI,GAAGG,EAAQqkC,MAAMS,YAAYjK,EAAWnjC,GAAS2sC,MAAK,GAAM/C,WAAWphC,GAC7ErI,EAAMgI,GAAGG,EAAQwkC,MAAMM,YAAYJ,EAAkBhtC,GAAS4pC,WAAWphC,KAGjF07B,QAAS,SAAU/sB,GACfA,EAAMiwB,IAAeC,GACrBlwB,EAAMk2B,eAAiB,iBAG3BpI,GAAoB7kC,EAAQof,SAASyC,QACrCijB,EAAmC,+CACvCnC,EAAa,WACTuK,QAAS3uC,EAAEmK,KACXykC,OAAQ5uC,EAAEmK,KACVD,KAAM,SAAU7I,EAASurC,EAAUiC,GAC/BtK,EAAOj0B,UAAUpG,KAAKwH,KAAKnI,KAAMlI,GACjCkI,KAAKulC,UAAY9uC,EAAE4sC,GACnBrjC,KAAKwlC,iBAAmBF,GAE5BjlC,SAAU,WACN,KAAUyI,OAAM,kIAEpB28B,iBAAkB,SAAU5kB,GAExB,MADA7gB,MAAKolC,QAAUvkB,EACR7gB,MAEX0lC,gBAAiB,SAAU7kB,GAEvB,MADA7gB,MAAKqlC,OAASxkB,EACP7gB,MAEX2lC,MAAO,WACH,MAAOlvC,KAAI6K,IAAItB,KAAK4lC,UAAUtkC,IAAItB,KAAKulC,YAE3CM,gBAAiB,WACb,GAAI5K,GAAYj7B,KAAKi8B,WAAY6J,EAAiB,wBAA0B9lC,KAAKwlC,gBAOjF,OANIvK,KACA6K,GAAkB,SAAW7K,GAE7Bj7B,KAAKo8B,WACL0J,GAAkB,iBAEfA,GAEXvlC,SAAU,SAAU0H,GAChB,MAAKjI,KAAKuhC,UAAYt5B,GAAKxR,EAAEwR,EAAEqY,QAAQxmB,GAAGkjC,IAA1C,CAGA,GAAInV,GAAY7nB,KAAK6nB,SACrBA,GAAUke,YAAY,YAAYA,YAAY/lC,KAAK6lC,mBAAmB9b,IAAI5xB,EAAY2gB,MAAO9Y,KAAKgmC,eAClGhmC,KAAKulC,UAAUzkC,OAAOilC,YAAY,gBAClC/lC,KAAKlI,QAAQiuC,YAAY,aACrBhJ,GACAlV,EAAU7vB,IAAI4mC,GAAU,IAEvB5+B,KAAKimC,YACNjmC,KAAK2lC,QAAQ3tC,IAAI8mC,GAAU,IAE/B9+B,KAAKuhC,SAASO,gBACP9hC,MAAKuhC,WAEhBJ,IAAK,WACD,GAAInhC,KAAK6iC,oBAAsB7iC,KAAK6iC,mBAAmB,GACnD,MAAO7iC,MAAKijC,cAEhB,IAA8NiD,GAA1Nt/B,EAAO5G,KAAMlI,EAAU8O,EAAK9O,QAASurC,EAAWz8B,EAAK2+B,UAAW1d,EAAY/vB,EAAQ6L,UAAUE,OAAOw/B,EAAS1/B,WAAWxM,QAASgvC,EAAOv/B,EAAK++B,QAASpE,EAAW9qC,EAAE+qC,WAAYe,EAAmBzqC,EAAQE,IAAI8mC,GA+BnN,OA9BKjX,GAAUlwB,SACXkwB,EAAY/vB,EAAQ6B,UAExBqG,KAAK6nB,UAAYA,EACjB7nB,KAAKuhC,SAAWA,EAChBvhC,KAAKimC,WAAiC,YAApB1D,EACbviC,KAAKimC,YACNE,EAAKnuC,IAAI8mC,GAAU,YAEnB/B,IACAmJ,EAAmBre,EAAU7vB,IAAI4mC,IACjC/W,EAAU7vB,IAAI4mC,GAAU,WAEvBzmC,GAGDL,EAAQwC,SAAS,eACjButB,EAAUvtB,SAAS0F,KAAK6lC,mBACxB7lC,KAAKgmC,cAAgBvvC,EAAEuP,MAAMhG,KAAM,YACnC6nB,EAAUniB,GAAGvN,EAAY2gB,MAAO9Y,KAAKgmC,eACrC/tC,EAAM2N,eAAe,WACjB9N,EAAQiuC,YAAY,eAAezrC,SAAS,aAC5C+oC,EAASrrC,IAAI,UAAW,IAAIsC,SAAS,gBACrCsM,EAAKw+B,QAAQ/B,EAAUvrC,GACvBG,EAAM2N,eAAe,WACjBiiB,EAAUke,YAAY,cAAczrC,SAAS,YAC7CsM,EAAKy+B,OAAOhC,EAAUvrC,QAZ9BkI,KAAKO,WAgBFghC,EAASpgC,WAEpB6e,KAAM,WACFhgB,KAAKO,cAGT08B,EAAYhlC,EAAMrB,MAAM8J,QACxBC,KAAM,WACF,GAAIiG,GAAO5G,IACX4G,GAAKw/B,WAAapgC,EAAMY,EAAKy/B,MAAOz/B,GACpCA,EAAK0/B,UAAW,GAEpBC,KAAM9vC,EAAEmK,KACR4lC,KAAM/vC,EAAEmK,KACR6lC,MAAOhwC,EAAEmK,KACT8lC,SAAUjwC,EAAEmK,KACZqO,MAAO,WACEjP,KAAKuf,YAGLvf,KAAKwmC,OAINxmC,KAAKymC,SAHLzmC,KAAKsmC,UAAW,EAChBruC,EAAM2N,eAAe5F,KAAKomC,eAKlC7mB,QAAS,WACL,OAAO,GAEX4L,OAAQ,WACJnrB,KAAKsmC,UAAW,EAChBtmC,KAAK0mC,YAETL,MAAO,WACH,GAAIz/B,GAAO5G,IACN4G,GAAK0/B,WAGV1/B,EAAK2/B,OACA3/B,EAAK4/B,QAGN5/B,EAAK0/B,UAAW,EAChB1/B,EAAK6/B,SAHLxuC,EAAM2N,eAAegB,EAAKw/B,gBAOlClJ,EAAaD,EAAUv8B,QACvBC,KAAM,SAAUP,GACZ,GAAIwG,GAAO5G,IACXU,GAAOkG,EAAMxG,GACb68B,EAAUh5B,GAAGtD,KAAKwH,KAAKvB,IAE3B4/B,KAAM,WACF,MAAOxmC,MAAK2mC,cAAgB3mC,KAAKK,UAErCsmC,WAAY,WACR,MAAO/nC,MAAKoT,IAAIhS,KAAKK,SAAU,GAAIrE,MAASgE,KAAK4mC,YAErDC,OAAQ,SAAUzmC,GACd,GAAIwG,GAAO5G,KAAM8mC,EAAUlgC,EAAKkgC,OAChClgC,GAAKmgC,QAAUD,EAAQlgC,EAAKktB,MAC5BltB,EAAK8sB,MAAQtzB,EAAQyb,SAAWjV,EAAKmgC,QACrCngC,EAAKvG,SAAsC,gBAApBD,GAAQC,SAAuBD,EAAQC,SAAW,IACzEuG,EAAK2/B,KAAO3/B,EAAKogC,WAAW5mC,EAAQ6/B,MACpCr5B,EAAKggC,UAAY,GAAI5qC,MACrB4K,EAAKqI,SAET+3B,WAAY,SAAU/G,GAClB,GAAIr5B,GAAO5G,IACX,OAAO,YACH4G,EAAKkgC,QAAQG,SAASrgC,EAAKktB,KAAMmM,EAAKr5B,EAAK+/B,aAAc//B,EAAKmgC,QAASngC,EAAK8sB,MAAO9sB,EAAKvG,eAIpGK,EAAOw8B,GACHgK,YAAa,SAAUh2B,EAAGrO,EAAGuG,EAAGuH,GAC5B,MAAOO,IAAKP,EAAI9N,EAAIuG,EAAIA,IAAMxK,KAAKuoC,IAAI,MAASj2B,EAAIP,GAAK,GAAK9N,GAElEukC,YAAa,SAAUl2B,EAAGrO,EAAGuG,EAAGuH,EAAGM,GAE/B,MADAA,GAAI,QACG7H,IAAM8H,EAAIA,EAAIP,EAAI,GAAKO,IAAMD,EAAI,GAAKC,EAAID,GAAK,GAAKpO,KAGnE5C,EAAGg9B,UAAYA,EACfh9B,EAAGi9B,WAAaA,EAChBj9B,EAAG46B,aAAeA,EAClB56B,EAAG6jC,IAAM,SAAUhsC,GACfA,EAAUrB,EAAEqB,EACZ,IAAIkH,GAASlH,EAAQsH,QAGrB,OAFAJ,GAAOhG,MAAQf,EAAMuB,YAAY1B,GACjCkH,EAAO/F,OAAShB,EAAMyB,aAAa5B,GAC5BkH,GAEXiB,EAAGikC,gBAAkB,SAAUmD,EAAOC,GAClC,GAAIhU,IAAK+T,EAAM3uC,KAAO4uC,EAAM5uC,MAAQ4uC,EAAMtuC,OAASsuC,EAAMtuC,MAAQquC,EAAMruC,OAAQqY,GAAKg2B,EAAM/nC,IAAMgoC,EAAMhoC,KAAOgoC,EAAMruC,QAAUquC,EAAMruC,OAASouC,EAAMpuC,OAClJ,QACIq6B,EAAG5d,MAAM4d,GAAK,EAAIA,EAClBjiB,EAAGqE,MAAMrE,GAAK,EAAIA,IAG1BpR,EAAGgkC,UAAY,SAAUoD,EAAOC,GAC5B,MAAO1oC,MAAKoT,IAAIq1B,EAAMruC,MAAQsuC,EAAMtuC,MAAOquC,EAAMpuC,OAASquC,EAAMruC,SAEpEgH,EAAGsnC,SAAW,SAAUF,EAAOC,GAC3B,MAAO1oC,MAAKnG,IAAI4uC,EAAMruC,MAAQsuC,EAAMtuC,MAAOquC,EAAMpuC,OAASquC,EAAMruC,UAEtEvC,OAAOuB,MAAM8sB,QACRruB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAO2iC,IAAM3iC,OAAS,SAAU4iC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAU9iC,EAAGC,QACVA,OAAO,gBAAiB,cAAeD,IACzC,WAqaE,MA5ZC,UAAUE,EAAGE,GAEV,QAAS6wC,GAAYC,EAAMC,GACvB,IAAKA,EACD,MAAOD,EAEPA,GAAO,MAAQC,IACfD,EAAOC,EAEX,IAAIC,GAAY5rC,OAAO,IAAM2rC,EAAY,IAIzC,OAHKC,GAAMztC,KAAKutC,KACZA,EAAOC,EAAa,IAAMD,GAEvB5rB,EAASC,SAAW,MAAQD,EAAS+rB,KAAO,IAAMH,GAAMvwC,QAAQ,SAAU,KAErF,QAAS2wC,GAAcC,GACnB,MAAOA,GAAO,KAAO,IAEzB,QAASC,GAAaF,GAClB,GAAItkC,GAAOsY,EAAStY,IACpB,OAAsB,OAAlBskC,GAA0BtkC,EAAKrF,QAAQ,SAAaqF,EAAKrF,QAAQ,MAAQ,EAClE,KAEJqF,EAAKvM,MAAM6wC,GAAe,IAAM,GAE3C,QAASG,GAAUC,EAAM5kB,GACrB,MAA0B,KAAtBA,EAAInlB,QAAQ+pC,GACL5kB,EAAI9O,OAAO0zB,EAAKtwC,QAAQT,QAAQ,QAAS,KAEzCmsB,EAoEf,QAAS6kB,GAAQ7kB,GACb,MAAOA,GAAInsB,QAAQ,QAAS,KAEhC,QAASixC,GAAQ9kB,GACb,MAAOA,GAAInsB,QAAQ,YAAa,MArGvC,GACOe,GAAQvB,OAAOuB,MAAOmwC,EAAS,SAAUC,EAAO,OAAQC,EAAO,OAAQpwC,EAAUD,EAAMC,QAAS2jB,EAAWnlB,OAAOmlB,SAAUgD,EAAUnoB,OAAOmoB,QAAS0pB,EAAqB,GAAIC,EAAkBvwC,EAAMC,QAAQoB,QAAQiB,KAAMkuC,EAAY,MAAOlrC,EAAW7G,OAAO6G,SA+BlQmrC,EAAiBzwC,EAAMrB,MAAM8J,QAC7BkkC,KAAM,WACE4D,EACA3e,WAAW,WACPhL,EAAQ+lB,SAGZ/lB,EAAQ+lB,QAGhB+D,QAAS,WACDH,EACA3e,WAAW,WACPhL,EAAQ8pB,YAGZ9pB,EAAQ8pB,WAGhBhxC,OAAQ,WACJ,MAAOknB,GAAQlnB,QAEnBixC,gBAAiB,SAAUvlB,GACvBxH,EAAS3kB,QAAQmsB,MAGrBwlB,EAAmBH,EAAehoC,QAClCC,KAAM,SAAUsnC,GACZjoC,KAAKioC,KAAOA,GAEhBa,SAAU,SAAU1b,GAChBvO,EAAQD,aAAcrhB,EAASwrC,MAAOvB,EAAYpa,EAAIptB,KAAKioC,QAE/D/wC,QAAS,SAAUk2B,GACfvO,EAAQmqB,gBAAiBzrC,EAASwrC,MAAOvB,EAAYpa,EAAIptB,KAAKioC,QAElEgB,UAAW,SAAU5lB,GACjB,MAAO2kB,GAAUhoC,KAAKioC,KAAM5kB,IAEhC1X,QAAS,WACL,GAAIA,GAAUkQ,EAASqtB,QAIvB,OAHIrtB,GAASsQ,SACTxgB,GAAWkQ,EAASsQ,QAEjB6b,EAAUhoC,KAAKioC,KAAMt8B,IAEhCw9B,OAAQ,SAAUtoB,GACdpqB,EAAEC,QAAQ0Q,KAAK,iBAAkByZ,IAErCb,KAAM,WACFvpB,EAAEC,QAAQmR,OAAO,mBAErBuhC,iBAAkB,SAAUhpC,GACxB,GAAIipC,GAAUpB,EAAO7nC,EAAQ6nC,KAAMiB,EAAWrtB,EAASqtB,SAAUI,EAAOvB,EAAaF,EAAcznC,EAAQmpC,UACvGtB,KAASiB,EAAW,MACpBG,EAAWpB,GAEXA,IAASiB,GAAYI,IACrBD,EAAW7B,EAAY8B,EAAKpyC,QAAQuxC,EAAW,IAAKR,IAEpDoB,GACAxqB,EAAQD,aAAcrhB,EAASwrC,MAAOM,MAU9CG,EAAcd,EAAehoC,QAC7BC,KAAM,SAAUmnC,GACZ9nC,KAAKypC,IAAMxxC,EAAM4rB,OACjB7jB,KAAK4Y,OAASivB,EAAcC,GAC5B9nC,KAAKurB,IAAMuc,EAAOK,EAAUD,GAEhCY,SAAU,SAAU1b,GAChBvR,EAASytB,KAAOtpC,KAAKurB,IAAI6B,IAE7Bl2B,QAAS,SAAUk2B,GACfptB,KAAK4oC,gBAAgB5oC,KAAKurB,IAAI6B,KAElC6b,UAAW,SAAU5lB,GACjB,MAAIA,GAAInlB,QAAQ8B,KAAK4Y,QAAU,EACpByK,EAEAA,EAAIrsB,MAAMgJ,KAAK4Y,QAAQ,IAGtCuwB,OAAQ,SAAUtoB,GACV3oB,EAAQ4mB,WACRroB,EAAEC,QAAQgP,GAAG,cAAgB1F,KAAKypC,IAAK5oB,GAEvC7gB,KAAK0pC,UAAYC,YAAY9oB,EAAU0nB,IAG/CvoB,KAAM,WACFvpB,EAAEC,QAAQqzB,IAAI,cAAgB/pB,KAAKypC,KACnCG,cAAc5pC,KAAK0pC,YAEvB/9B,QAAS,WACL,MAAOo8B,GAAa/nC,KAAK4Y,SAE7BwwB,iBAAkB,SAAUhpC,GACxB,GAAI8oC,GAAWrtB,EAASqtB,SAAUjB,EAAO7nC,EAAQ6nC,IACjD,UAAI7nC,EAAQwe,WAAaqpB,IAASiB,KAC9BlpC,KAAK4oC,gBAAgBX,EAAOjoC,KAAK4Y,OAASovB,EAAUC,EAAMiB,KACnD,MAKfW,EAAU5xC,EAAMoM,WAAW3D,QAC3BuO,MAAO,SAAU7O,GAOb,GANAA,EAAUA,MACVJ,KAAKoH,MACDghC,EACAC,EACAC,GACDloC,IACCJ,KAAKsmC,SAAT,CAGAtmC,KAAKsmC,UAAW,EAChBlmC,EAAQ6nC,KAAO7nC,EAAQ6nC,MAAQ,GAC/B,IAA2Ct8B,GAAvCm+B,EAAU9pC,KAAK+pC,cAAc3pC,EAC7B0pC,GAAQV,iBAAiBhpC,KAG7BuL,EAAUm+B,EAAQn+B,UAClBlV,EAAEiK,OAAOV,MACL8pC,QAASA,EACT7B,KAAM7nC,EAAQ6nC,KACd+B,cAAeF,EAAQnyC,SACvBgU,QAASA,EACTs+B,WAAYt+B,KAEhBm+B,EAAQX,OAAO1yC,EAAEuP,MAAMhG,KAAM,iBAEjC+pC,cAAe,SAAU3pC,GACrB,MAAOlI,GAAQ0mB,WAAaxe,EAAQwe,UAAY,GAAIiqB,GAAiBzoC,EAAQ6nC,MAAQ,GAAIuB,GAAYppC,EAAQmpC,WAEjHvpB,KAAM,WACGhgB,KAAKsmC,WAGVtmC,KAAK8pC,QAAQ9pB,OACbhgB,KAAK6H,OAAOugC,GACZpoC,KAAKsmC,UAAW,IAEpB6C,OAAQ,SAAUtoB,GACd7gB,KAAKoH,KAAKghC,EAAQvnB,IAEtB3pB,QAAS,SAAUk2B,EAAI8c,GACnBlqC,KAAKmqC,UAAU/c,EAAI8c,EAAQ,SAAUJ,GACjCA,EAAQ5yC,QAAQk2B,GAChBptB,KAAKiqC,UAAUjqC,KAAKiqC,UAAUtyC,OAAS,GAAKqI,KAAK2L,WAGzDm9B,SAAU,SAAU1b,EAAI8c,GACpB,MAAW,WAAP9c,GACAptB,KAAKoqC,YAAa,EAClBpqC,KAAK8pC,QAAQlF,OACb,IAEJ5kC,KAAKmqC,UAAU/c,EAAI8c,EAAQ,SAAUJ,GACjCA,EAAQhB,SAAS1b,GACjBptB,KAAKiqC,UAAUniC,KAAK9H,KAAK2L,WAF7B3L,IAKJmqC,UAAW,SAAU/c,EAAI8c,EAAQrpB,GAC7B,GAAIipB,GAAU9pC,KAAK8pC,OAEnB,OADA1c,GAAK0c,EAAQb,UAAU7b,GACnBptB,KAAK2L,UAAYyhB,GAAMptB,KAAK2L,UAAYynB,mBAAmBhG,IAC3DptB,KAAKgI,QAAQsgC,GACb,KAEC4B,GACGlqC,KAAKgI,QAAQogC,GACT/kB,IAAK+J,EACLid,QAAQ,MAKpBrqC,KAAK2L,QAAUyhB,EACfvM,EAAS1Y,KAAKnI,KAAM8pC,GACpB9pC,KAAKgqC,cAAgBF,EAAQnyC,UAV7B,IAYJ2yC,UAAW,WACP,GAAIR,GAAU9pC,KAAK8pC,QAASn+B,EAAUm+B,EAAQn+B,UAAW4+B,EAAYT,EAAQnyC,SAAU6yC,EAAuBxqC,KAAKgqC,gBAAkBO,EAAW3F,EAAOj5B,IAAY3L,KAAKiqC,UAAUjqC,KAAKiqC,UAAUtyC,OAAS,IAAM6yC,EAAsBJ,EAAapqC,KAAKoqC,WAAYK,EAAOzqC,KAAK2L,OAChR,OAAgB,QAAZA,GAAoB3L,KAAK2L,UAAYA,GAAW3L,KAAK2L,UAAYynB,mBAAmBznB,KAGxF3L,KAAKgqC,cAAgBO,EACrBvqC,KAAKoqC,YAAa,EAClBpqC,KAAK2L,QAAUA,EACXi5B,GAAQ5kC,KAAKgI,QAAQ,QACjBqb,IAAKonB,EACLrd,GAAIzhB,KAERm+B,EAAQnB,UACR3oC,KAAK2L,QAAU8+B,EACf,GAEAzqC,KAAKgI,QAAQogC,GACT/kB,IAAK1X,EACL++B,mBAAoBN,KAEpBxF,EACAkF,EAAQnB,WAERmB,EAAQlF,OACR5kC,KAAKgqC,iBAEThqC,KAAK2L,QAAU8+B,EACf,IAEA7F,EACA5kC,KAAKiqC,UAAU/d,MAEflsB,KAAKiqC,UAAUniC,KAAK6D,GAHxB,MAOR1T,GAAM4xC,QAAUA,EAChB5xC,EAAM4xC,QAAQnB,eAAiBA,EAC/BzwC,EAAM4xC,QAAQL,YAAcA,EAC5BvxC,EAAM4xC,QAAQhB,iBAAmBA,EACjC5wC,EAAMuvC,YAAcA,EACpBvvC,EAAM4mB,QAAU,GAAIgrB,IACtBnzC,OAAOuB,MAAM8sB,QACd,WAEG,QAAS4lB,GAAkBtyC,EAAOuyC,GAC9B,MAAOA,GAAWvyC,EAAQ,UAE9B,QAASwyC,GAAcC,EAAOC,GAC1B,MAAWhvC,QAAO,IAAM+uC,EAAM5zC,QAAQ8zC,EAAc,QAAQ9zC,QAAQ+zC,EAAe,WAAW/zC,QAAQg0C,EAAYP,GAAmBzzC,QAAQi0C,EAAY,SAAW,IAAKJ,EAAa,IAAM,IAEhM,QAASK,GAAS/nB,GACd,MAAOA,GAAInsB,QAAQ,gBAAiB,IAT3C,GACOe,GAAQvB,OAAOuB,MAAO4mB,EAAU5mB,EAAM4mB,QAASxa,EAAapM,EAAMoM,WAAYgnC,EAAO,OAAQC,EAAgB,eAAgBlD,EAAS,SAAUC,EAAO,OAAQC,EAAO,OAAQ2C,EAAgB,aAAcC,EAAa,eAAgBC,EAAa,SAAUH,EAAe,2BAU/QO,EAAQtzC,EAAMrB,MAAM8J,QACpBC,KAAM,SAAUmqC,EAAOjqB,EAAUkqB,GACvBD,YAAiB/uC,UACnB+uC,EAAQD,EAAcC,EAAOC,IAEjC/qC,KAAK8qC,MAAQA,EACb9qC,KAAKwrC,UAAY3qB,GAErBA,SAAU,SAAUwC,EAAKuhB,EAAMyF,GAC3B,GAAInX,GAAiBv7B,EAATgG,EAAM,EAAW8tC,EAAoBxzC,EAAM+6B,uBAAuB3P,EAK9E,IAJAooB,EAAkBC,MAAQ9G,EAC1BvhB,EAAM+nB,EAAS/nB,GACf6P,EAASlzB,KAAK8qC,MAAMz7B,KAAKgU,GAAK7c,MAAM,GACpC7O,EAASu7B,EAAOv7B,OACZ0yC,EACA,KAAO1sC,EAAMhG,EAAQgG,IACU,SAAhBu1B,EAAOv1B,KACdu1B,EAAOv1B,GAAOy1B,mBAAmBF,EAAOv1B,IAIpDu1B,GAAOprB,KAAK2jC,GACZzrC,KAAKwrC,UAAU1kC,MAAM,KAAMosB,IAE/ByY,UAAW,SAAUtoB,EAAKuhB,EAAMyF,GAC5B,QAAIrqC,KAAK8qC,MAAM5wC,KAAKkxC,EAAS/nB,MACzBrjB,KAAK6gB,SAASwC,EAAKuhB,EAAMyF,IAClB,MAMfuB,EAASvnC,EAAW3D,QACpBC,KAAM,SAAUP,GACPA,IACDA,MAEJiE,EAAWJ,GAAGtD,KAAKwH,KAAKnI,MACxBA,KAAK6rC,UACL7rC,KAAK4e,UAAYxe,EAAQwe,UACzB5e,KAAKupC,SAAWnpC,EAAQmpC,SACxBvpC,KAAKioC,KAAO7nC,EAAQ6nC,KACpBjoC,KAAK+qC,WAAa3qC,EAAQ2qC,cAAe,EACzC/qC,KAAKoH,MACDikC,EACAC,EACAlD,EACAE,GACDloC,IAEP4lB,QAAS,WACLnH,EAAQhX,OAAOugC,EAAQpoC,KAAK8rC,kBAC5BjtB,EAAQhX,OAAOygC,EAAMtoC,KAAK+rC,YAC1BltB,EAAQhX,OAAOwgC,EAAMroC,KAAKgsC,YAC1BhsC,KAAK6H,UAEToH,MAAO,WAAA,GAgBCg9B,GAfArlC,EAAO5G,KAAMksC,EAAY,WACrBtlC,EAAKulC,SACNC,EAAY,SAAUnkC,GACrBrB,EAAK8kC,MAAMzjC,IACZokC,EAAkB,SAAUpkC,GAC3BrB,EAAK0lC,YAAYrkC,GAEzB4W,GAAQ5P,OACJs9B,KAAML,EACN/C,OAAQkD,EACRzH,KAAMwH,EACNxtB,UAAWhY,EAAKgY,UAChB2qB,SAAU3iC,EAAK2iC,SACftB,KAAMrhC,EAAKqhC,OAEXgE,GACA5oB,IAAKxE,EAAQlT,SAAW,IACxBxH,eAAgB1N,EAAEmK,MAEjBgG,EAAKoB,QAAQqjC,EAAMY,IACpBrlC,EAAK0lC,YAAYL,GAErBjsC,KAAK8rC,iBAAmBO,EACxBrsC,KAAKgsC,WAAaI,GAEtBtB,MAAO,SAAUA,EAAOjqB,GACpB7gB,KAAK6rC,OAAO/jC,KAAK,GAAIyjC,GAAMT,EAAOjqB,EAAU7gB,KAAK+qC,cAErDjC,SAAU,SAAUzlB,EAAK6mB,GACrBjyC,EAAM4mB,QAAQiqB,SAASzlB,EAAK6mB,IAEhChzC,QAAS,SAAUmsB,EAAK6mB,GACpBjyC,EAAM4mB,QAAQ3nB,QAAQmsB,EAAK6mB,IAE/BwB,MAAO,SAAUzjC,GACTjI,KAAKgI,QAAQqgC,GACThlB,IAAKpb,EAAEob,IACP+J,GAAInlB,EAAEmlB,MAEVnlB,EAAE9D,kBAGVgoC,MAAO,WACHnsC,KAAKgI,QAAQsgC,IAEjBgE,YAAa,SAAUrkC,GAAV,GAeLtK,GAASkuC,EAAsBf,EAAOnzC,EAdtC0rB,EAAMpb,EAAEob,IACRgnB,IAAWpiC,EAAEoiC,OACbzF,EAAO38B,EAAEyiC,iBAIb,IAHKrnB,IACDA,EAAM,KAENrjB,KAAKgI,QAAQogC,GACT/kB,IAAKpb,EAAEob,IACP6P,OAAQj7B,EAAM+6B,uBAAuB/qB,EAAEob,KACvCqnB,kBAAmB9F,IAGvB,WADA38B,GAAE9D,gBAIN,KADIxG,EAAM,EAAGkuC,EAAS7rC,KAAK6rC,OAAel0C,EAASk0C,EAAOl0C,OACnDgG,EAAMhG,EAAQgG,IAEjB,GADAmtC,EAAQe,EAAOluC,GACXmtC,EAAMa,UAAUtoB,EAAKuhB,EAAMyF,GAC3B,MAGJrqC,MAAKgI,QAAQsjC,GACTjoB,IAAKA,EACL6P,OAAQj7B,EAAM+6B,uBAAuB3P,GACrCqnB,kBAAmB9F,KAEvB38B,EAAE9D,mBAIdlM,GAAM2zC,OAASA,KAEZl1C,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAO2iC,IAAM3iC,OAAS,SAAU4iC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAU9iC,EAAGC,QACVA,OAAO,oBAAqB,cAAeD,IAC7C,WA8PE,MAtPC,UAAUE,EAAGE,GAkDV,QAAS61C,GAAc3oC,EAAQ4oC,GAC3B,GAAgD9uC,GAAKhG,EAAQumB,EAAOhf,EAAM6J,EAAQ2jC,EAAU9uC,EAAOmtC,EAA/F/rC,KAAa2tC,EAAQ9oC,EAAO8oC,OAAS,MAAsEjpC,EAAUG,EAAOH,OAChI,KAAK/F,EAAM,EAAGhG,EAAS+L,EAAQ/L,OAAQgG,EAAMhG,EAAQgG,IACjDkG,EAASH,EAAQ/F,GACjBugB,EAAQra,EAAOqa,MACftgB,EAAQiG,EAAOjG,MACf8uC,EAAW7oC,EAAO6oC,SACd7oC,EAAOH,QACPG,EAAS2oC,EAAc3oC,EAAQ4oC,IAE/B1B,EAAalnC,EAAOknC,WACpB7sB,EAAQA,EAAMhnB,QAAQ,MAAO,KAC7B2M,EAAS+oC,EAAaF,GAClBD,IACA5oC,EAASgpC,EAAwBH,IAEpB,WAAbA,GAAsC,cAAbA,EACzB7oC,EAAS5L,EAAM8Q,OAAO,eAAgBmV,EAAOra,GACzB,YAAb6oC,GAAuC,eAAbA,EACjC7oC,EAAS5L,EAAM8Q,OAAO,aAAgBmV,EAAOra,GACtCA,GAAUjG,IAAUjH,IAC3BuI,EAAOzI,EAAEyI,KAAKtB,GACD,WAATsB,GACA6J,EAAS,QACTnL,EAAQA,EAAM1G,QAAQ,KAAM,MACxB6zC,KAAe,IACf7sB,EAAQ,WAAaA,EAAQ,MAEjB,SAAThf,EACHutC,GACA1jC,EAAS,gCACTnL,EAAQ3F,EAAMue,SAAS1P,MAAMlJ,EAAO,YAEpCmL,EAAS,oCAGbA,EAAS,MAETlF,EAAOlM,OAAS,EACD,gBAAXkM,EACAkF,EAAS,WAAaA,EAAS,KAE/BA,EAAS,OAASA,EAAS,QACV,mBAAb2jC,IACID,GACA1jC,EAAS,uBACTlF,EAAS,WAETkF,GAAU,cAKtBA,EAAS,WAAaA,EAE1BlF,EAAS5L,EAAM8Q,OAAOA,EAAQlF,EAAQjG,EAAOsgB,KAGrDlf,EAAO8I,KAAKjE,EAMhB,OAJAA,GAAS7E,EAAO/H,KAAK,IAAM01C,EAAQ,KAC/B3tC,EAAOrH,OAAS,IAChBkM,EAAS,IAAMA,EAAS,KAErBA,EAEX,QAASipC,GAAchuC,GACnB,IAAK,GAAIoQ,KAAQpQ,GACkB,IAA3BoQ,EAAKhR,QAAQ,iBACNY,GAAIoQ,GAtHvB,GAAIjX,GAAQvB,OAAOuB,MAAOyI,EAASjK,EAAEiK,OAAQksC,GACrC1jB,GAAI,KACJ6jB,IAAK,KACLC,GAAI,KACJC,IAAK,KACLC,GAAI,KACJC,IAAK,KACLrqC,SAAU,cACVsqC,eAAgB,cAChBC,SAAU,WACVC,WAAY,aACZC,OAAQ,KACRC,UAAW,KACXC,QAAS,KACTC,WAAY,MACbb,EAA0BnsC,KAAWksC,GAAgB9pC,SAAU,aAAe6qC,GAC7EC,SAAUn3C,EAAEmK,KACZitC,KAAMp3C,EAAEmK,KACRiD,OAAQ,SAAUqvB,EAAQrvB,EAAQiqC,GAC1BjqC,IACAA,EAAS2oC,EAAc3oC,EAAQiqC,GAC3BjqC,IACAqvB,EAAO6a,QAAUlqC,KAI7Bsa,KAAM,SAAU+U,EAAQ8a,GACpB,GAAIvqC,GAAOhN,EAAEuc,IAAIg7B,EAAS,SAAUpwC,GAChC,GAAIqwC,GAAQrwC,EAAMsgB,MAAMhnB,QAAQ,MAAO,IAIvC,OAHkB,SAAd0G,EAAM0xB,MACN2e,GAAS,SAENA,IACRh3C,KAAK,IACJwM,KACAyvB,EAAOgb,SAAWzqC,IAG1B0qC,KAAM,SAAUjb,EAAQib,GAChBA,IACAjb,EAAOkb,MAAQD,IAGvBE,KAAM,SAAUnb,EAAQmb,GAChBA,IACAnb,EAAOob,KAAOD,KAGvBE,GAAoBC,MAAQC,SAAU,SA0E7C/tC,IAAO,EAAMzI,EAAMuD,MACfkzC,SACIC,OACIzvC,KAAM,OACN1D,KAAM,SAAUA,GACZ,MAAOA,GAAKmV,EAAEi+B,UAAYpzC,EAAKmV,IAEnCk+B,MAAO,cAGfC,YACIH,OACIH,MACI7hB,OAAO,EACP8hB,SAAU,QACVM,MAAO,aAEXC,QACIriB,OAAO,EACP8hB,SAAU,OACVnX,YAAa,mBACbp4B,KAAM,OAEV+vC,QACItiB,OAAO,EACP8hB,SAAU,OACVnX,YAAa,mBACbp4B,KAAM,QAEV8mB,SACI2G,OAAO,EACP8hB,SAAU,OACVvvC,KAAM,UAEVgwC,aAAc,SAAU9uC,EAASlB,EAAM4uC,GACnC,GAAI5a,GAAQt1B,EAAOkE,EAAQ2sC,CAK3B,IAJAruC,EAAUA,MACVlB,EAAOA,GAAQ,OACfuvC,GAAYzuC,KAAKI,SAAWmuC,GAAiBrvC,GAC7CuvC,EAAWA,EAAWA,EAASA,SAAW,OAC7B,SAATvvC,EAAiB,CACjBg0B,GAAWic,aAAc,YACT,QAAZV,IACAvb,EAAOkc,QAAU,OAErB,KAAKttC,IAAU1B,GACPutC,EAAQ7rC,GACR6rC,EAAQ7rC,GAAQoxB,EAAQ9yB,EAAQ0B,GAASgsC,GAEzC5a,EAAOpxB,GAAU1B,EAAQ0B,OAG9B,CACH,GAAiB,SAAb2sC,EACA,KAAU3lC,OAAM,sCAAwC5J,EAAO,cAEnE,IAAa,YAATA,EAAoB,CACpB,IAAK4C,IAAU1B,GACXxC,EAAQwC,EAAQ0B,GACK,gBAAVlE,KACPwC,EAAQ0B,GAAUlE,EAAQ,GAGlCs1B,GAASj7B,EAAMkT,UAAU/K,IAGjC,MAAO8yB,QAKvBxyB,GAAO,EAAMzI,EAAMuD,MACfkzC,SACIW,YACInwC,KAAM,OACN1D,KAAM,SAAUA,GAGZ,MAFAA,GAAO/E,EAAEiK,UAAWlF,GACpBsxC,EAActxC,GACVA,EAAKoC,MACEpC,EAAKoC,OAERpC,IAEZqzC,MAAO,SAAUrzC,GACb,MAAOA,GAAK,mBAIxBszC,YACIO,YACIb,MACI7hB,OAAO,EACP8hB,SAAU,QAEdO,QACIriB,OAAO,EACP8hB,SAAU,OACVnX,YAAa,0CACbp4B,KAAM,OAEV+vC,QACItiB,OAAO,EACP8hB,SAAU,OACVnX,YAAa,0CACbp4B,KAAM,QAEV8mB,SACI2G,OAAO,EACP8hB,SAAU,OACVvvC,KAAM,UAEVgwC,aAAc,SAAU9uC,EAASlB,GAC7B,GAAIF,GAAS/G,EAAMuD,KAAKszC,WAAWH,MAAMO,aAAa9uC,EAASlB,GAAM,EAKrE,OAJY,QAARA,IACAF,EAAOswC,QAAS,QACTtwC,GAAOmwC,cAEXnwC,QAKzBtI,OAAOuB,MAAM8sB,QACRruB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAO2iC,IAAM3iC,OAAS,SAAU4iC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAU9iC,EAAGC,QACVA,OAAO,kBAAmB,cAAeD,IAC3C,WAkLE,MA1KC,UAAUE,EAAGE,GAAb,GACOsB,GAAQvB,OAAOuB,MAAO8N,EAAUtP,EAAEsP,QAASwpC,EAAgB94C,EAAE84C,cAAev8B,EAAMvc,EAAEuc,IAAKtV,EAAOjH,EAAEiH,KAAMgD,EAASjK,EAAEiK,OAAQ8iB,EAASvrB,EAAMurB,OAAQ5sB,EAAQqB,EAAMrB,MAChK44C,EAAgB54C,EAAM8J,QACtBC,KAAM,SAAUP,GAAV,GAIUuG,GAaAod,EAEI0rB,EAsDRC,EAxEJ9oC,EAAO5G,KAAM6uC,EAAQzuC,EAAQyuC,MAAOc,EAAQvvC,EAAQuvC,MAAOC,EAAQxvC,EAAQwvC,MAAOC,EAASzvC,EAAQyvC,OAAQC,EAAY1vC,EAAQ0vC,UAAWt0C,EAAO4E,EAAQ5E,IACzJm0C,KACIJ,EAAcI,KACVhpC,EAAOvG,EAAQ2vC,WAAa93C,EAAMuD,KAAKw0C,MACvCL,EAAMM,QACNvyC,EAAKiyC,EAAMM,OAAQ,SAAU/xB,EAAOtgB,GAC5B2xC,EAAc3xC,IAAUA,EAAMsgB,MACzBznB,EAAEyF,WAAW0B,EAAMsgB,SACpBtgB,EAAQ8C,EAAO9C,GAASsgB,MAAOtX,EAAK4c,OAAO5lB,EAAMsgB,UAGrDtgB,GAAUsgB,MAAOtX,EAAK4c,OAAO5lB,IAEjC+xC,EAAMM,OAAO/xB,GAAStgB,IAG1BmmB,EAAK4rB,EAAM5rB,GACXA,IACI0rB,KACJA,EAAQ7oC,EAAKspC,cAAcnsB,GAAI,KAAW7F,MAAOtX,EAAK4c,OAAOO,IAC7D4rB,EAAMM,OAASvvC,EAAO+uC,EAASE,EAAMM,QACrCN,EAAM5rB,GAAKnd,EAAKspC,cAAcnsB,IAElC4rB,EAAQhpC,EAAKnQ,OAAOm5C,IAExB/oC,EAAK+oC,MAAQA,GAEbd,IACoB,gBAATA,IACPA,EAAQjoC,EAAK4c,OAAOqrB,GACpBjoC,EAAKioC,MAAQ,SAAUrzC,GACnB,MAAO6W,UAASw8B,EAAMrzC,GAAO,MAEV,kBAATqzC,KACdjoC,EAAKioC,MAAQA,IAGjBgB,IACqB,gBAAVA,IACPA,EAASjpC,EAAK4c,OAAOqsB,GACrBjpC,EAAKipC,OAAS,SAAUr0C,GACpB,MAAOq0C,GAAOr0C,IAAS,OAEH,kBAAVq0C,KACdjpC,EAAKipC,OAASA,IAGlBr0C,IACmB,gBAARA,IACPA,EAAOoL,EAAKspC,cAAc10C,GAC1BoL,EAAKpL,KAAO,SAAUoC,GAClB,GAAyCuyC,GAArCnxC,EAAS4H,EAAKwpC,SAASxyC,EAAOpC,EAElC,OADAwD,GAAS+G,EAAQ/G,GAAUA,GAAUA,GACjC4H,EAAK+oC,OAASA,EAAMM,QACpBE,EAAgB,GAAIvpC,GAAK+oC,MAClB38B,EAAIhU,EAAQ,SAAUpB,GACzB,GAAIA,EAAO,CACP,GAAiBsgB,GAAbmyB,IACJ,KAAKnyB,IAASyxB,GAAMM,OAChBI,EAAOnyB,GAASiyB,EAAcG,OAAOpyB,EAAOyxB,EAAMM,OAAO/xB,GAAOA,MAAMtgB,GAE1E,OAAOyyC,OAIZrxC,IAEW,kBAARxD,KACdoL,EAAKpL,KAAOA,IAGA,kBAATo0C,KACHF,EAAW9oC,EAAKgpC,MACpBhpC,EAAKgpC,MAAQ,SAAUp0C,GACnB,GAAI+0C,GAAMX,EAAMznC,KAAKvB,EAAMpL,EAC3B,OAAOk0C,GAASvnC,KAAKvB,EAAM2pC,KAGX,kBAAbT,KACPlpC,EAAKkpC,UAAYA,IAGzBjB,MAAO,SAAU7vC,GACb,MAAOgB,MAAKxE,KAAKwD,GAAQrH,QAE7Bk4C,OAAQ,SAAUr0C,GACd,MAAOA,GAAOA,EAAKq0C,OAAS,MAEhCC,UAAW,SAAUt0C,GACjB,MAAOA,IAEXg1C,SAAU,SAAU14C,GAChB,GAAiB24C,GAAYze,EAAM5K,EAAU/jB,EAAUqD,EAAQgqC,EAAgF/yC,EAA3IqB,KAAsE2xC,EAAa74C,EAAQ64C,WAAYC,EAAiBD,EAAWh5C,MACvI,KAAKgG,EAAM,EAAGA,EAAMizC,EAAgBjzC,IAChC+yC,EAAYC,EAAWhzC,GACvBqB,EAAO,IAAM0xC,EAAUrtC,UAAYqtC,EAAUle,SAEjD,KAAKR,EAAOl6B,EAAQ+4C,WAAY7e,EAAMA,EAAOA,EAAK8e,YAC9C1pB,EAAW4K,EAAK5K,SACC,IAAbA,GAA+B,IAAbA,EAClBpoB,EAAO,SAAWgzB,EAAKQ,UACH,IAAbpL,IACPqpB,EAAazwC,KAAKwwC,SAASxe,GAC3B3uB,EAAW2uB,EAAK3uB,SAChBqD,EAAS1H,EAAOqE,GACZ0C,EAAQW,GACRA,EAAOoB,KAAK2oC,GAEZ/pC,EADOA,IAAW/P,GAEd+P,EACA+pC,GAGKA,EAEbzxC,EAAOqE,GAAYqD,EAG3B,OAAO1H,IAEXoxC,SAAU,SAAUxyC,EAAO0lB,GAEvB,IADA,GAAqC5c,GAAQ1H,EAAQrH,EAAQo5C,EAAoBpzC,EAA7EyjB,EAAUkC,EAAWtsB,MAAM,KACxB0P,EAAS0a,EAAQtP,SAEpB,GADAlU,EAAQA,EAAM8I,GACVX,EAAQnI,GAAQ,CAGhB,IAFAoB,KACAskB,EAAalC,EAAQnqB,KAAK,KACrB0G,EAAM,EAAGhG,EAASiG,EAAMjG,OAAQgG,EAAMhG,EAAQgG,IAC/CozC,EAAqB/wC,KAAKowC,SAASxyC,EAAMD,GAAM2lB,GAC/CytB,EAAqBhrC,EAAQgrC,GAAsBA,GAAsBA,GACzE/xC,EAAO8I,KAAKhB,MAAM9H,EAAQ+xC,EAE9B,OAAO/xC,GAGf,MAAOpB,IAEXgyC,MAAO,SAAUW,GACb,GAAI7wC,GAAiBsxC,EAAMhyC,IAI3B,OAHAU,GAAkB6wC,EAAI7wC,iBAAmBjJ,EAAEw6C,SAASV,GAAK7wC,gBACzDsxC,EAAOhxC,KAAKwwC,SAAS9wC,GACrBV,EAAOU,EAAgB2D,UAAY2tC,EAC5BhyC,GAEXkxC,cAAe,SAAUxpC,EAAQwqC,GAC7B,MAAKxqC,IAGLA,EAASA,EAAOxP,QAAQ,MAAO,IAAIA,QAAQ,MAAO,KAC9CwP,EAAOxI,QAAQ,MAAQ,EAChBwI,EAAOxP,QAAQ,WAAYg6C,EAAM,KAAO,UAE/CxqC,EAAOxI,QAAQ,WAAa,EACrBwI,EAAOxP,QAAQ,gBAAiBg6C,EAAM,QAAU,aAEpDxqC,GATI,IAWf8c,OAAQ,SAAU9c,GACd,MAAO8c,GAAOxjB,KAAKkwC,cAAcxpC,IAAS,KAGlDjQ,GAAEiK,QAAO,EAAMzI,EAAMuD,MACjBg0C,cAAeA,EACf2B,SAAWZ,IAAKf,MAEtB94C,OAAOuB,MAAM8sB,QACRruB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAO2iC,IAAM3iC,OAAS,SAAU4iC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAU9iC,EAAGC,QACVA,OAAO,cACH,aACA,mBACA,kBACDD,IACL,WA85HE,MAl4HC,UAAUE,EAAGE,GA+PV,QAASy6C,GAAaptC,EAAS9E,EAAMgf,EAAOtF,GACxC,MAAO,UAAU3Q,GACb,GAAgBlJ,GAAZ+Z,IACJ,KAAK/Z,IAAOkJ,GACR6Q,EAAM/Z,GAAOkJ,EAAElJ,EAGf+Z,GAAMoF,MADNtF,EACcsF,EAAQ,IAAMjW,EAAEiW,MAEhBA,EAEdhf,GAAQkpC,IAAUpkC,EAAQqtC,eAC1BrtC,EAAQqtC,cAAcv4B,GAE1B9U,EAAQgE,QAAQ9I,EAAM4Z,IAkI9B,QAASw4B,GAAMhe,EAAGjiB,GACd,GAAIiiB,IAAMjiB,EACN,OAAO,CAEX,IAA0C6M,GAAtCqzB,EAAQ96C,EAAEyI,KAAKo0B,GAAIke,EAAQ/6C,EAAEyI,KAAKmS,EACtC,IAAIkgC,IAAUC,EACV,OAAO,CAEX,IAAc,SAAVD,EACA,MAAOje,GAAEr3B,YAAcoV,EAAEpV,SAE7B,IAAc,WAAVs1C,GAAgC,UAAVA,EACtB,OAAO,CAEX,KAAKrzB,IAASoV,GACV,IAAKge,EAAMhe,EAAEpV,GAAQ7M,EAAE6M,IACnB,OAAO,CAGf,QAAO,EA6BX,QAASuzB,GAAe3yC,EAAKoQ,GACzB,GAAIgP,GAAOwzB,CACX,KAAKA,IAAa5yC,GAAK,CAEnB,GADAof,EAAQpf,EAAI4yC,GACRnC,GAAcrxB,IAAUA,EAAMA,OAASA,EAAMA,QAAUhP,EACvD,MAAOgP,EACJ,IAAIA,IAAUhP,EACjB,MAAOgP,GAGf,MAAO,MAuXX,QAASyzB,GAAMn2C,GACXwE,KAAKxE,KAAOA,MA4ChB,QAASo2C,GAAc1zB,EAAOoR,GAC1B,GAAIpR,EAAO,CACP,GAAI2zB,SAAoB3zB,KAAU1d,IAC1B0d,MAAOA,EACPoR,IAAKA,GACLpR,EAAO4zB,EAAc/rC,GAAQ8rC,GAAcA,EAAaA,IAAel7C,GAAak7C,KAC5F,OAAO3kB,IAAK4kB,EAAa,SAAUnhC,GAC/B,QAASA,EAAE2e,OAqCvB,QAASyiB,GAAkBzuB,GACvB,GAAI3lB,GAAKhG,EAAQkM,EAAQ6oC,EAAUhpC,EAAU4f,EAAW5f,OACxD,IAAIA,EACA,IAAK/F,EAAM,EAAGhG,EAAS+L,EAAQ/L,OAAQgG,EAAMhG,EAAQgG,IACjDkG,EAASH,EAAQ/F,GACjB+uC,EAAW7oC,EAAO6oC,SACdA,SAAmBA,KAAalsC,KAChCqD,EAAO6oC,SAAWsF,EAAYtF,EAAS5vC,gBAAkB4vC,GAE7DqF,EAAkBluC,GAI9B,QAASouC,GAAgB3uB,GACrB,GAAIA,IAAe+D,GAAc/D,GAQ7B,OAPIvd,GAAQud,IAAgBA,EAAW5f,UACnC4f,GACIqpB,MAAO,MACPjpC,QAASqC,GAAQud,GAAcA,GAAcA,KAGrDyuB,EAAkBzuB,GACXA,EAIf,QAAS4uB,GAAkBC,EAAIC,GAC3B,OAAID,EAAGxF,QAASyF,EAAGzF,QAGZwF,EAAGj0B,QAAUk0B,EAAGl0B,OAASi0B,EAAGv0C,QAAUw0C,EAAGx0C,OAASu0C,EAAGzF,WAAa0F,EAAG1F,UAEhF,QAAS2F,GAAoBxuC,GAEzB,MADAA,GAASA,MACLwjB,GAAcxjB,IAEV8oC,MAAO,MACPjpC,YAGDuuC,EAAgBpuC,GAE3B,QAASyuC,GAAc1vC,EAAGC,GACtB,MAAIA,GAAE8pC,OAAS/pC,EAAEsb,MAAQrb,EAAEqb,MAChB,EACAtb,EAAEsb,MAAQrb,EAAEqb,SAGZ,EAGf,QAASq0B,GAAeC,EAAOC,GAA/B,GAMQN,GAAIC,EACJM,EACAC,EAMKh1C,CAXT,IAFA60C,EAAQH,EAAoBG,GAC5BC,EAAQJ,EAAoBI,GACxBD,EAAM7F,QAAU8F,EAAM9F,MACtB,OAAO,CAKX,IAFI+F,GAAYF,EAAM9uC,aAAe8C,QACjCmsC,GAAYF,EAAM/uC,aAAe8C,QACjCksC,EAAS/6C,SAAWg7C,EAASh7C,OAC7B,OAAO,CAIX,KAFA+6C,EAAWA,EAASv0B,KAAKm0B,GACzBK,EAAWA,EAASx0B,KAAKm0B,GAChB30C,EAAM,EAAGA,EAAM+0C,EAAS/6C,OAAQgG,IAGrC,GAFAw0C,EAAKO,EAAS/0C,GACdy0C,EAAKO,EAASh1C,GACVw0C,EAAGxF,OAASyF,EAAGzF,OACf,IAAK4F,EAAeJ,EAAIC,GACpB,OAAO,MAER,KAAKF,EAAkBC,EAAIC,GAC9B,OAAO,CAGf,QAAO,EAGX,QAASQ,GAAmBC,GACxB,MAAO9sC,IAAQ8sC,GAAeA,GAAeA,GAEjD,QAASC,GAAe50B,EAAOoR,GAC3B,GAAIuiB,SAAoB3zB,KAAU1d,IAC1B0d,MAAOA,EACPoR,IAAKA,GACLpR,EAAO4zB,EAAc/rC,GAAQ8rC,GAAcA,EAAaA,IAAel7C,GAAak7C,KAC5F,OAAO7+B,GAAI8+B,EAAa,SAAUnhC,GAC9B,OACIuN,MAAOvN,EAAEuN,MACToR,IAAK3e,EAAE2e,KAAO,MACdyjB,WAAYpiC,EAAEoiC,cAmJ1B,QAASC,GAAmBpwC,EAAGC,GAC3B,MAAID,IAAKA,EAAE3G,SAAW4G,GAAKA,EAAE5G,QAClB2G,EAAE3G,YAAc4G,EAAE5G,UAEtB2G,IAAMC,EAEjB,QAASowC,GAAmBC,EAAaH,EAAYI,EAAMhhC,EAAOxa,EAAQy7C,GAA1E,GAEQz1C,GAAK01C,EAAMC,EAAc9uB,EAIrBtG,CAHR,KAFA60B,EAAaA,MACgBvuB,EAAMuuB,EAAWp7C,OACzCgG,EAAM,EAAGA,EAAM6mB,EAAK7mB,IACrB01C,EAAON,EAAWp1C,GAClB21C,EAAeD,EAAKE,UAChBr1B,EAAQm1B,EAAKn1B,MACjBg1B,EAAYh1B,GAASg1B,EAAYh1B,OACjCk1B,EAAMl1B,GAASk1B,EAAMl1B,OACrBk1B,EAAMl1B,GAAOo1B,GAAgBF,EAAMl1B,GAAOo1B,OAC1CJ,EAAYh1B,GAAOo1B,GAAgBE,EAAUF,EAAax2C,eAAeo2C,EAAYh1B,GAAOo1B,GAAeH,EAAMl7C,GAAMyrB,SAASxF,GAAQ/L,EAAOxa,EAAQy7C,EAAMl1B,GAAOo1B,IAuD5K,QAASG,GAAShU,GACd,MAAsB,gBAARA,KAAqB/pB,MAAM+pB,GAE7C,QAASiU,GAAOjU,GACZ,MAAOA,IAAOA,EAAIxjC,QAEtB,QAAS6N,GAAOuJ,GACZ,GAAI1V,GAAKhG,EAAS0b,EAAM1b,OAAQqH,EAAalD,MAAMnE,EACnD,KAAKgG,EAAM,EAAGA,EAAMhG,EAAQgG,IACxBqB,EAAOrB,GAAO0V,EAAM1V,GAAKmM,QAE7B,OAAO9K,GA4JX,QAAS20C,GAAiBn4C,EAAMo4C,EAASzD,EAAe0D,EAAoBC,GACxE,GAAIzD,GAAQ7sB,EAAQuwB,EAAcp2C,EAAmBhG,EAAdq8C,IACvC,KAAKr2C,EAAM,EAAGhG,EAAS6D,EAAK7D,OAAQgG,EAAMhG,EAAQgG,IAAO,CACrD0yC,EAAS70C,EAAKmC,EACd,KAAK6lB,IAAUowB,GACXG,EAAeD,EAAWtwB,GACtBuwB,GAAgBA,IAAiBvwB,IAC5BwwB,EAAQD,KACTC,EAAQD,GAAgB97C,GAAMwrB,OAAOswB,IAEzCC,EAAQD,GAAc1D,EAAQuD,EAAQpwB,GAAQ6sB,UACvCA,GAAO7sB,KAK9B,QAASywB,GAAez4C,EAAMo4C,EAASzD,EAAe0D,EAAoBC,GACtE,GAAIzD,GAAQ7sB,EAAQuwB,EAAcp2C,EAAKhG,CACvC,KAAKgG,EAAM,EAAGhG,EAAS6D,EAAK7D,OAAQgG,EAAMhG,EAAQgG,IAAO,CACrD0yC,EAAS70C,EAAKmC,EACd,KAAK6lB,IAAUowB,GACXvD,EAAO7sB,GAAU2sB,EAAcG,OAAO9sB,EAAQowB,EAAQpwB,GAAQ6sB,IAC9D0D,EAAeD,EAAWtwB,GACtBuwB,GAAgBA,IAAiBvwB,SAC1B6sB,GAAO0D,IAK9B,QAASG,GAAa14C,EAAMo4C,EAASzD,EAAe0D,EAAoBC,GACpE,GAAIzD,GAAQ1yC,EAAK+zC,EAAW/5C,CAC5B,KAAKgG,EAAM,EAAGhG,EAAS6D,EAAK7D,OAAQgG,EAAMhG,EAAQgG,IAC9C0yC,EAAS70C,EAAKmC,GACd+zC,EAAYmC,EAAmBxD,EAAOnyB,OAClCwzB,GAAaA,GAAarB,EAAOnyB,QACjCmyB,EAAOnyB,MAAQwzB,GAEnBrB,EAAOzyC,MAAQuyC,EAAcG,OAAOD,EAAOnyB,MAAOmyB,EAAOzyC,OACrDyyC,EAAO8D,aACPD,EAAa7D,EAAO3pB,MAAOktB,EAASzD,EAAe0D,EAAoBC,GAEvEG,EAAe5D,EAAO3pB,MAAOktB,EAASzD,EAAe0D,EAAoBC,GAIrF,QAASM,GAAeC,EAAkB1E,EAAO2E,EAAWV,EAASC,EAAoBC,GACrF,MAAO,UAAUt4C,GAQb,MAPAA,GAAO64C,EAAiB74C,GACpBA,IAAS6rB,GAAcusB,KACK,mBAAxBrqC,GAASpB,KAAK3M,IAAgCA,YAAgBD,MAC9DC,GAAQA,IAEZ84C,EAAU94C,EAAMo4C,EAAS,GAAIjE,GAASkE,EAAoBC,IAEvDt4C,OA+Df,QAAS+4C,GAAYj0B,EAAQk0B,EAAMrG,EAAME,GAErC,IAFJ,GACQoG,GAAgB/tB,EAIZ/uB,EAJGgG,EAAM,EACV62C,EAAK78C,QAAU02C,IAClBoG,EAAQD,EAAK72C,GACb+oB,EAAQ+tB,EAAM/tB,MACV/uB,EAAS+uB,EAAM/uB,OACf2oB,GAAUA,EAAOpC,QAAUu2B,EAAMv2B,OAASoC,EAAO1iB,QAAU62C,EAAM72C,OAC7D0iB,EAAO6zB,cAAgB7zB,EAAOoG,MAAM/uB,OACpC48C,EAAYj0B,EAAOoG,MAAMpG,EAAOoG,MAAM/uB,OAAS,GAAI88C,EAAM/tB,MAAOynB,EAAME,IAEtE3nB,EAAQA,EAAMlgB,MAAM2nC,EAAMA,EAAOE,GACjC/tB,EAAOoG,MAAQpG,EAAOoG,MAAMvQ,OAAOuQ,IAEvC8tB,EAAKpsC,OAAOzK,IAAO,IACZ82C,EAAMN,cAAgBztB,EAAM/uB,QACnC48C,EAAYE,EAAO/tB,EAAOynB,EAAME,GAC3BoG,EAAM/tB,MAAM/uB,QACb68C,EAAKpsC,OAAOzK,IAAO,KAGvB+oB,EAAQA,EAAMlgB,MAAM2nC,EAAMA,EAAOE,GACjCoG,EAAM/tB,MAAQA,EACT+tB,EAAM/tB,MAAM/uB,QACb68C,EAAKpsC,OAAOzK,IAAO,IAGN,IAAjB+oB,EAAM/uB,OACNw2C,GAAQx2C,GAERw2C,EAAO,EACPE,GAAQ3nB,EAAM/uB,YAEZgG,GAAO62C,EAAK78C,WAIlBgG,EAAM62C,EAAK78C,QACX68C,EAAKpsC,OAAOzK,EAAK62C,EAAK78C,OAASgG,GAGvC,QAAS+2C,GAAcl5C,GAAvB,GACQmC,GAAkBhG,EAAQ+uB,EAAOiuB,EAE7BF,EAFCz1C,IACT,KAAKrB,EAAM,EAAGhG,EAAS6D,EAAK7D,OAAQgG,EAAMhG,EAAQgG,IAE9C,GADI82C,EAAQj5C,EAAKo5C,GAAGj3C,GAChB82C,EAAMN,aACNn1C,EAASA,EAAOmX,OAAOu+B,EAAcD,EAAM/tB,YAG3C,KADAA,EAAQ+tB,EAAM/tB,MACTiuB,EAAY,EAAGA,EAAYjuB,EAAM/uB,OAAQg9C,IAC1C31C,EAAO8I,KAAK4e,EAAMkuB,GAAGD,GAIjC,OAAO31C,GAEX,QAAS61C,GAAer5C,EAAMm0C,GAC1B,GAAIhyC,GAAKhG,EAAQ88C,CACjB,IAAI9E,EACA,IAAKhyC,EAAM,EAAGhG,EAAS6D,EAAK7D,OAAQgG,EAAMhG,EAAQgG,IAC9C82C,EAAQj5C,EAAKo5C,GAAGj3C,GACZ82C,EAAMN,aACNU,EAAeJ,EAAM/tB,MAAOipB,GAE5B8E,EAAM/tB,MAAQ,GAAIjrB,GAAoBg5C,EAAM/tB,MAAOipB,GAKnE,QAASmF,GAAet5C,EAAMu5C,GAC1B,IAAK,GAAIp3C,GAAM,EAAGhG,EAAS6D,EAAK7D,OAAQgG,EAAMhG,EAAQgG,IAClD,GAAInC,EAAKmC,GAAKw2C,cACV,GAAIW,EAAet5C,EAAKmC,GAAK+oB,MAAOquB,GAChC,OAAO,MAER,IAAIA,EAAKv5C,EAAKmC,GAAK+oB,MAAOlrB,EAAKmC,IAClC,OAAO,EAInB,QAASq3C,GAAgBC,EAAQz5C,EAAM23C,EAAMpa,GACzC,IAAK,GAAIp7B,GAAM,EAAGA,EAAMs3C,EAAOt9C,QACvBs9C,EAAOt3C,GAAKnC,OAASA,IAGrB05C,EAAeD,EAAOt3C,GAAKnC,KAAM23C,EAAMpa,GAJRp7B,MAS3C,QAASu3C,GAAexuB,EAAOysB,EAAMpa,GACjC,IAAK,GAAIp7B,GAAM,EAAGhG,EAAS+uB,EAAM/uB,OAAQgG,EAAMhG,EAAQgG,IAAO,CAC1D,GAAI+oB,EAAM/oB,IAAQ+oB,EAAM/oB,GAAKw2C,aACzB,MAAOe,GAAexuB,EAAM/oB,GAAK+oB,MAAOysB,EAAMpa,EAC3C,IAAIrS,EAAM/oB,KAASw1C,GAAQzsB,EAAM/oB,KAASo7B,EAE7C,MADArS,GAAM/oB,GAAOo7B,GACN,GAInB,QAASoc,GAAsBrsB,EAAMttB,EAAMy5C,EAAQ/1C,EAAMk2C,GAAzD,GACaC,GAAe19C,EAChBw7C,EAOSx1C,CARjB,KAAS03C,EAAY,EAAG19C,EAASmxB,EAAKnxB,OAAQ09C,EAAY19C,EAAQ09C,IAE9D,GADIlC,EAAOrqB,EAAKusB,GACXlC,KAAQA,YAAgBj0C,IAG7B,GAAIi0C,EAAKgB,eAAiBx9C,GAAcy+C,GAGpC,IAASz3C,EAAM,EAAGA,EAAMnC,EAAK7D,OAAQgG,IACjC,GAAInC,EAAKmC,KAASw1C,EAAM,CACpBrqB,EAAKusB,GAAa75C,EAAKo5C,GAAGj3C,GAC1Bq3C,EAAgBC,EAAQz5C,EAAM23C,EAAMrqB,EAAKusB,GACzC,YANRF,GAAsBhC,EAAKzsB,MAAOlrB,EAAMy5C,EAAQ/1C,EAAMk2C,GAYlE,QAASE,GAAY95C,EAAMm0C,EAAOxB,EAAME,GAAxC,GAIQ1wC,GAEIgpB,EALJhvB,EAAS6D,EAAK7D,OACd49C,EAAapH,GAAQ,EACrBqH,EAA2B,IAATnH,EAAuB71C,GAAKwZ,IAAIujC,EAAalH,EAAM12C,GAAUA,CAEnF,KAAKgG,EAAM43C,EAAY53C,EAAM63C,EAAU73C,IAEnC,GADIgpB,EAAWnrB,EAAKo5C,GAAGj3C,GACnBgpB,EAAS8uB,KAAO9F,EAAM8F,IAEtB,MADAj6C,GAAK4M,OAAOzK,EAAK,GACVgpB,EAInB,QAAS+uB,GAAqBl6C,EAAMm0C,GAChC,MAAIA,GACOzxC,EAAQ1C,EAAM,SAAU23C,GAC3B,MAAOA,GAAKsC,KAAOtC,EAAKsC,KAAO9F,EAAM8F,KAAOtC,EAAKxD,EAAMF,WAAaE,EAAM5rB,IAAM4rB,EAAM5rB,KAAO4rB,EAAMgG,gBAK/G,QAASC,GAAap6C,EAAMm0C,GACxB,MAAIA,GACOzxC,EAAQ1C,EAAM,SAAU23C,GAC3B,MAAOA,GAAKsC,KAAO9F,EAAM8F,SAKrC,QAASv3C,GAAQ1C,EAAMq6C,GACnB,GAAIl4C,GAAKhG,CACT,KAAKgG,EAAM,EAAGhG,EAAS6D,EAAK7D,OAAQgG,EAAMhG,EAAQgG,IAC9C,GAAIk4C,EAASr6C,EAAKmC,IACd,MAAOA,EAGf,UAEJ,QAASm4C,GAAmB7F,EAAQ/gC,GAApC,GAEY2iC,GACAH,CAFR,OAAIzB,KAAW5oB,GAAc4oB,IACrB4B,EAAa5B,EAAO/gC,GAGpBwiC,EADAnC,GAAcsC,GACFA,EAAW1kB,MAAQ0kB,EAAW3zB,OAAShP,EAEvC+gC,EAAO/gC,IAASA,EAE5BhT,GAAWw1C,GACJxiC,EAEJwiC,GAEJxiC,EAEX,QAAS6mC,GAA8BlE,EAAYlC,GAAnD,GACQhyC,GAAKhG,EACAumB,EADQoC,IACjB,KAASpC,IAAS2zB,GACA,YAAV3zB,IACAoC,EAAOpC,GAAS2zB,EAAW3zB,GAGnC,IAAI2zB,EAAWnuC,QAEX,IADA4c,EAAO5c,WACF/F,EAAM,EAAGhG,EAASk6C,EAAWnuC,QAAQ/L,OAAQgG,EAAMhG,EAAQgG,IAC5D2iB,EAAO5c,QAAQ/F,GAAOo4C,EAA8BlE,EAAWnuC,QAAQ/F,GAAMgyC,OAGjFrvB,GAAOpC,MAAQ43B,EAAmBnG,EAAMM,OAAQ3vB,EAAOpC,MAE3D,OAAOoC,GAEX,QAAS01B,GAAwBlE,EAAanC,GAA9C,GACQhyC,GAAKhG,EAAqB2oB,EAAQuxB,EAIzB3zB,EAJIlf,IACjB,KAAKrB,EAAM,EAAGhG,EAASm6C,EAAYn6C,OAAQgG,EAAMhG,EAAQgG,IAAO,CAC5D2iB,KACAuxB,EAAaC,EAAYn0C,EACzB,KAASugB,IAAS2zB,GACdvxB,EAAOpC,GAAS2zB,EAAW3zB,EAE/BoC,GAAOpC,MAAQ43B,EAAmBnG,EAAMM,OAAQ3vB,EAAOpC,OACnDoC,EAAOyyB,YAAchtC,GAAQua,EAAOyyB,cACpCzyB,EAAOyyB,WAAaiD,EAAwB11B,EAAOyyB,WAAYpD,IAEnE3wC,EAAO8I,KAAKwY,GAEhB,MAAOthB,GAqkDX,QAASi3C,GAAY9gB,EAAQ8a,GAA7B,GAEQ7vC,GACA81C,EACAC,EACA36C,EACAmC,EAAKhG,EACLy+C,EACAt0C,EACAuuC,EACAzyC,CACJ,KAVAu3B,EAAS1+B,EAAE0+B,GAAQ,GACf/0B,EAAU+0B,EAAO/0B,QACjB81C,EAAajG,EAAO,GACpBkG,EAAclG,EAAO,GACrBz0C,KAMCmC,EAAM,EAAGhG,EAASyI,EAAQzI,OAAQgG,EAAMhG,EAAQgG,IACjD0yC,KACAvuC,EAAS1B,EAAQzC,GACjBy4C,EAAWt0C,EAAO6c,WACdy3B,IAAajhB,IACbihB,EAAW,MAEXt0C,EAAOwB,UAAY8yC,GAAYA,EAAS9yC,WAGxC8yC,IACA/F,EAAO+F,SAAWA,EAASC,OAE/BhG,EAAO6F,EAAWh4B,OAASpc,EAAO2zB,KAClC73B,EAAQkE,EAAO6uC,WAAW/yC,MAEtBA,EADAA,GAASA,EAAM04C,UACPx0C,EAAOlE,MAEPkE,EAAO2zB,KAEnB4a,EAAO8F,EAAYj4B,OAAStgB,EAC5BpC,EAAKsM,KAAKuoC,GAEd,OAAO70C,GAEX,QAAS+6C,GAAWr/B,EAAO+4B,GACvB,GAAoEtyC,GAAKhG,EAAQ6+C,EAAmDC,EAAOpG,EAAQqG,EAAMC,EAArJC,EAAQngD,EAAEygB,GAAO,GAAG2/B,QAAQ,GAAIC,EAAOF,EAAQA,EAAME,QAAoCC,EAAa9G,EAAOt4C,OAAQ6D,IACzH,KAAKmC,EAAM,EAAGhG,EAASm/C,EAAKn/C,OAAQgG,EAAMhG,EAAQgG,IAAO,CAIrD,IAHA0yC,KACAsG,GAAQ,EACRF,EAAQK,EAAKn5C,GAAK84C,MACbD,EAAa,EAAGA,EAAaO,EAAYP,IAC1CE,EAAOD,EAAMD,GACuB,OAAhCE,EAAKrzC,SAASvG,gBACd65C,GAAQ,EACRtG,EAAOJ,EAAOuG,GAAYt4B,OAASw4B,EAAK3+B,UAG3C4+B,IACDn7C,EAAKsM,KAAKuoC,GAGlB,MAAO70C,GA0IX,QAASw7C,GAAW9nC,GAChB,MAAO,YACH,GAAI1T,GAAOwE,KAAKi3C,MAAOj4C,EAAStD,GAAWuI,GAAGiL,GAAMpI,MAAM9G,KAAMwG,GAAM2B,KAAKpN,WAI3E,OAHIiF,MAAKi3C,OAASz7C,GACdwE,KAAKk3C,wBAEFl4C,GA2Jf,QAASm4C,GAAUC,EAAMnH,GAErB,QAASxpB,GAAS4wB,EAAY/yB,GAC1B,MAAO+yB,GAAWxzC,OAAOygB,GAAShjB,IAAI+1C,EAAW7vB,KAAKlD,IAF1D,GAAgC3mB,GAAKhG,EAAmB04C,EAAgL8C,EAAMpvB,EAAIuzB,EAAWr5C,EAAWtD,EAApQ+rB,EAAQjwB,EAAE2gD,GAAMz8C,WAAyBa,KAAmB+7C,EAAYtH,EAAO,GAAG/xB,MAAOs5B,EAAWvH,EAAO,IAAMA,EAAO,GAAG/xB,MAAOu5B,EAAsBxH,EAAO,IAAMA,EAAO,GAAG/xB,MAAOw5B,EAAgBzH,EAAO,IAAMA,EAAO,GAAG/xB,KAIjO,KAAKvgB,EAAM,EAAGhG,EAAS+uB,EAAM/uB,OAAQgG,EAAMhG,EAAQgG,IAC/C0yC,GAAWsH,SAAS,GACpBxE,EAAOzsB,EAAMwC,GAAGvrB,GAChB25C,EAAYnE,EAAK,GAAGtC,WACpBl2C,EAAWw4C,EAAKx4C,WAChBy8C,EAAOz8C,EAASkJ,OAAO,MACvBlJ,EAAWA,EAASkJ,OAAO,YAC3BkgB,EAAKovB,EAAKjwC,KAAK,WACX6gB,IACAssB,EAAOtsB,GAAKA,GAEZuzB,IACAjH,EAAOkH,GAAmC,GAAtBD,EAAUlwB,SAAgBkwB,EAAU9kB,UAAY73B,EAAS86B,QAE7E+hB,IACAnH,EAAOmH,GAAY/wB,EAAS9rB,EAAU,KAAKuI,KAAK,SAEhDw0C,IACArH,EAAOqH,GAAiBjxB,EAAS9rB,EAAU,OAAOuI,KAAK,QAEvDu0C,IACAx5C,EAAYwoB,EAAS9rB,EAAU,aAAaolC,KAAK,aACjDsQ,EAAOoH,GAAuBx5C,GAAaxH,EAAE67B,KAAKr0B,EAAU/G,QAAQ,WAAY,MAEhFkgD,EAAKz/C,SACL04C,EAAO3pB,MAAQywB,EAAUC,EAAKluB,GAAG,GAAI+mB,IAEJ,QAAjCkD,EAAKjwC,KAAK,sBACVmtC,EAAOuH,aAAc,GAEzBp8C,EAAKsM,KAAKuoC,EAEd,OAAO70C,GA/nHd,GACgKwX,GAwOzJvX,EAuCAo8C,EAoJAC,EAoBAC,EAmBA/H,EAiJAgI,EA2CAC,EA4DAC,EAqLAlG,EAkSAwB,EAgGA2E,EAiBAC,GAyEAC,GA0FAC,GAyQA58C,GAsgDA68C,GAoHAC,GAiJA78C,GA6MA88C,GAmKAC,GAjzHAh4C,GAASjK,EAAEiK,OAAQsF,GAAQvP,EAAEuP,MAAOupC,GAAgB94C,EAAE84C,cAAeloB,GAAgB5wB,EAAE4wB,cAAethB,GAAUtP,EAAEsP,QAASmnB,GAAOz2B,EAAEy2B,KAAMyrB,GAAOliD,EAAEkiD,KAAWj7C,GAAOjH,EAAEiH,KAAMkD,GAAOnK,EAAEmK,KAAM3I,GAAQvB,OAAOuB,MAAOiE,GAAajE,GAAMiE,WAAYmI,GAAapM,GAAMoM,WAAYzN,GAAQqB,GAAMrB,MAAO4J,GAAS,SAAU2F,GAAW,WAAYyyC,GAAS,SAAUC,GAAO,OAAQC,GAAS,SAAUC,GAAU,UAAW3Q,GAAS,SAAU4Q,GAAO,OAAQC,GAAM,MAAOC,GAAQ,QAASC,GAAe,eAAgBC,GAAW,WAAYC,GAAa,aAAcC,IACtiBV,GACAC,GACAC,GACAC,IACDQ,GAAW,SAAUC,GACpB,MAAOA,IACRh2B,GAASvrB,GAAMurB,OAAQrY,GAAYlT,GAAMkT,UAAW3S,GAAOoG,KAAMkJ,MAAUA,KAAM7Q,MAAUA,KAAMi1B,MAASA,IAAK9jB,MAAYA,OAAQ0J,MAAWA,MAAOtL,MAAWA,MAAOuB,MAAaA,QAASwB,MAAcA,SAAUwU,GAAa9lB,GAAMC,QAAQ6lB,WAAYzH,GAAa,sBAC5Q/a,GAAkB8I,GAAW3D,QAC7BC,KAAM,SAAU0S,EAAOnU,GACnB,GAAI0H,GAAO5G,IACX4G,GAAK1H,KAAOA,GAAQ24C,EACpBxzC,GAAWJ,GAAGtD,KAAKwH,KAAKvB,GACxBA,EAAKjP,OAAS0b,EAAM1b,OACpBiP,EAAK6yC,QAAQpmC,EAAOzM,IAExBguC,GAAI,SAAUziC,GACV,MAAOnS,MAAKmS,IAEhBrI,OAAQ,WACJ,GAAInM,GAA2BC,EAAtBjG,EAASqI,KAAKrI,OAAe+hD,EAAW59C,MAAMnE,EACvD,KAAKgG,EAAM,EAAGA,EAAMhG,EAAQgG,IACxBC,EAAQoC,KAAKrC,GACTC,YAAiBi6C,KACjBj6C,EAAQA,EAAMkM,UAElB4vC,EAAK/7C,GAAOC,CAEhB,OAAO87C,IAEX//C,OAAQiH,GACR64C,QAAS,SAAUx+C,EAAQqlB,GACvB,GAAiB3iB,GAAKhG,EAAlBiP,EAAO5G,KAAmBrG,EAAS,WAC/B,MAAOiN,GAGf,KADA0Z,EAASA,MACJ3iB,EAAM,EAAGhG,EAASsD,EAAOtD,OAAQgG,EAAMhG,EAAQgG,IAChD2iB,EAAO3iB,GAAOiJ,EAAK/N,KAAKoC,EAAO0C,GAAMhE,EAEzC,OAAO2mB,IAEXznB,KAAM,SAAU8gD,EAAQhgD,GACpB,GAAiBo/B,GAAbnyB,EAAO5G,IAkBX,OAjBe,QAAX25C,GAA6C,oBAA1BpwC,GAASpB,KAAKwxC,KACjC5gB,EAAa4gB,YAAkB/yC,GAAK1H,MAAQy6C,YAAkB3J,GACzDjX,IACD4gB,EAASA,YAAkB9B,GAAmB8B,EAAO7vC,SAAW6vC,EAChEA,EAAS,GAAI/yC,GAAK1H,KAAKy6C,IAE3BA,EAAOhgD,OAASA,EAChBggD,EAAOvyC,KAAKghC,GAAQ,SAAUngC,GAC1BrB,EAAKoB,QAAQogC,IACTlqB,MAAOjW,EAAEiW,MACT8T,KAAM/pB,EAAE+pB,KACR7f,MAAOlK,EAAEkK,MACTuU,MAAOze,EAAEye,QAAU1mB,MACnBq3B,OAAQpvB,EAAE+pB,KAAO/pB,EAAEovB,QAAU,aAAe,kBAIjDsiB,GAEX7xC,KAAM,WACF,GAA0D9I,GAAtDmT,EAAQnS,KAAKrI,OAAQ+uB,EAAQ1mB,KAAKy5C,QAAQ1+C,UAO9C,OANAiE,GAAS8I,GAAKhB,MAAM9G,KAAM0mB,GAC1B1mB,KAAKgI,QAAQogC,IACT/Q,OAAQ,MACRllB,MAAOA,EACPuU,MAAOA,IAEJ1nB,GAEXwH,MAAOA,GACP2X,QAASA,KACTlnB,KAAMA,GACNi1B,IAAK,WACD,GAAIv0B,GAASqI,KAAKrI,OAAQqH,EAASktB,GAAIplB,MAAM9G,KAQ7C,OAPIrI,IACAqI,KAAKgI,QAAQogC,IACT/Q,OAAQ,SACRllB,MAAOxa,EAAS,EAChB+uB,OAAQ1nB,KAGTA,GAEXoJ,OAAQ,SAAU+J,EAAOynC,EAASzG,GAC9B,GAAoDn0C,GAAQlE,EAAG0pB,EAA3DkC,EAAQ1mB,KAAKy5C,QAAQjzC,GAAM2B,KAAKpN,UAAW,GAK/C,IAJAiE,EAASoJ,GAAOtB,MAAM9G,MAClBmS,EACAynC,GACFzjC,OAAOuQ,IACL1nB,EAAOrH,OAMP,IALAqI,KAAKgI,QAAQogC,IACT/Q,OAAQ,SACRllB,MAAOA,EACPuU,MAAO1nB,IAENlE,EAAI,EAAG0pB,EAAMxlB,EAAOrH,OAAQmD,EAAI0pB,EAAK1pB,IAClCkE,EAAOlE,IAAMkE,EAAOlE,GAAGH,UACvBqE,EAAOlE,GAAG+M,OAAOugC,GAW7B,OAPI+K,IACAnzC,KAAKgI,QAAQogC,IACT/Q,OAAQ,MACRllB,MAAOA,EACPuU,MAAOA,IAGR1nB,GAEX8S,MAAO,WACH,GAAIna,GAASqI,KAAKrI,OAAQqH,EAAS8S,GAAMhL,MAAM9G,KAQ/C,OAPIrI,IACAqI,KAAKgI,QAAQogC,IACT/Q,OAAQ,SACRllB,MAAO,EACPuU,OAAQ1nB,KAGTA,GAEX+I,QAAS,WACL,GAAqC/I,GAAjC0nB,EAAQ1mB,KAAKy5C,QAAQ1+C,UAOzB,OANAiE,GAAS+I,GAAQjB,MAAM9G,KAAM0mB,GAC7B1mB,KAAKgI,QAAQogC,IACT/Q,OAAQ,MACRllB,MAAO,EACPuU,MAAOA,IAEJ1nB,GAEXd,QAAS,SAAUi1C,GACf,GAAiBx1C,GAAKhG,EAAlBiP,EAAO5G,IACX,KAAKrC,EAAM,EAAGhG,EAASiP,EAAKjP,OAAQgG,EAAMhG,EAAQgG,IAC9C,GAAIiJ,EAAKjJ,KAASw1C,EACd,MAAOx1C,EAGf,WAEJq7B,QAAS,SAAUnY,GAEf,IADA,GAAIljB,GAAM,EAAGhG,EAASqI,KAAKrI,OACpBgG,EAAMhG,EAAQgG,IACjBkjB,EAAS7gB,KAAKrC,GAAMA,EAAKqC,OAGjCgT,IAAK,SAAU6N,GAEX,IADA,GAAIljB,GAAM,EAAGqB,KAAarH,EAASqI,KAAKrI,OACjCgG,EAAMhG,EAAQgG,IACjBqB,EAAOrB,GAAOkjB,EAAS7gB,KAAKrC,GAAMA,EAAKqC,KAE3C,OAAOhB,IAEX66C,OAAQ,SAAUh5B,GACd,GAAa7hB,GAATrB,EAAM,EAAWhG,EAASqI,KAAKrI,MAMnC,KALwB,GAApBoD,UAAUpD,OACVqH,EAASjE,UAAU,GACZ4C,EAAMhG,IACbqH,EAASgB,KAAKrC,MAEXA,EAAMhG,EAAQgG,IACjBqB,EAAS6hB,EAAS7hB,EAAQgB,KAAKrC,GAAMA,EAAKqC,KAE9C,OAAOhB,IAEX86C,YAAa,SAAUj5B,GACnB,GAA2B7hB,GAAvBrB,EAAMqC,KAAKrI,OAAS,CAMxB,KALwB,GAApBoD,UAAUpD,OACVqH,EAASjE,UAAU,GACZ4C,EAAM,IACbqB,EAASgB,KAAKrC,MAEXA,GAAO,EAAGA,IACbqB,EAAS6hB,EAAS7hB,EAAQgB,KAAKrC,GAAMA,EAAKqC,KAE9C,OAAOhB,IAEX6E,OAAQ,SAAUgd,GAEd,IADA,GAA0BsyB,GAAtBx1C,EAAM,EAAGqB,KAAmBrH,EAASqI,KAAKrI,OACvCgG,EAAMhG,EAAQgG,IACjBw1C,EAAOnzC,KAAKrC,GACRkjB,EAASsyB,EAAMx1C,EAAKqC,QACpBhB,EAAOA,EAAOrH,QAAUw7C,EAGhC,OAAOn0C,IAEXwoB,KAAM,SAAU3G,GAEZ,IADA,GAAasyB,GAATx1C,EAAM,EAAShG,EAASqI,KAAKrI,OAC1BgG,EAAMhG,EAAQgG,IAEjB,GADAw1C,EAAOnzC,KAAKrC,GACRkjB,EAASsyB,EAAMx1C,EAAKqC,MACpB,MAAOmzC,IAInB4G,MAAO,SAAUl5B,GAEb,IADA,GAAasyB,GAATx1C,EAAM,EAAShG,EAASqI,KAAKrI,OAC1BgG,EAAMhG,EAAQgG,IAEjB,GADAw1C,EAAOnzC,KAAKrC,IACPkjB,EAASsyB,EAAMx1C,EAAKqC,MACrB,OAAO,CAGf,QAAO,GAEXg6C,KAAM,SAAUn5B,GAEZ,IADA,GAAasyB,GAATx1C,EAAM,EAAShG,EAASqI,KAAKrI,OAC1BgG,EAAMhG,EAAQgG,IAEjB,GADAw1C,EAAOnzC,KAAKrC,GACRkjB,EAASsyB,EAAMx1C,EAAKqC,MACpB,OAAO,CAGf,QAAO,GAEXqoB,OAAQ,SAAU8qB,GACd,GAAIx1C,GAAMqC,KAAK9B,QAAQi1C,EACnBx1C,SACAqC,KAAKoI,OAAOzK,EAAK,IAGzBg5C,MAAO,WACH32C,KAAKoI,OAAO,EAAGpI,KAAKrI,UAGN,oBAAXsiD,SAA0BA,OAAOtoB,WAAap2B,GAAgBwL,UAAUkzC,OAAOtoB,YACtFp2B,GAAgBwL,UAAUkzC,OAAOtoB,aAAesoB,OAAOtoB,WAEvDl2B,EAAsBF,GAAgBmF,QACtCC,KAAM,SAAUnF,EAAM0D,GAClBmF,GAAWJ,GAAGtD,KAAKwH,KAAKnI,MACxBA,KAAKd,KAAOA,GAAQ24C,CACpB,KAAK,GAAIl6C,GAAM,EAAGA,EAAMnC,EAAK7D,OAAQgG,IACjCqC,KAAKrC,GAAOnC,EAAKmC,EAErBqC,MAAKrI,OAASgG,EACdqC,KAAKk6C,QAAUl0C,GAAM,WACjB,MAAOhG,OACRA,OAEP40C,GAAI,SAAUziC,GACV,GAAIghC,GAAOnzC,KAAKmS,EAMhB,OALMghC,aAAgBnzC,MAAKd,KAGvBi0C,EAAKx5C,OAASqG,KAAKk6C,QAFnB/G,EAAOnzC,KAAKmS,GAASnS,KAAKnH,KAAKs6C,EAAMnzC,KAAKk6C,SAIvC/G,KAoBX0E,EAAmBxzC,GAAW3D,QAC9BC,KAAM,SAAU/C,GACZ,GAAiB8I,GAAQwX,EAArBtX,EAAO5G,KAAqBrG,EAAS,WACjC,MAAOiN,GAEfvC,IAAWJ,GAAGtD,KAAKwH,KAAKnI,MACxBA,KAAKm6C,YACL,KAAKj8B,IAAStgB,GACV8I,EAAS9I,EAAMsgB,GACO,gBAAXxX,IAAuBA,IAAWA,EAAOzK,SAA8B,KAAnBiiB,EAAM9mB,OAAO,KACxEsP,EAASE,EAAK/N,KAAK6N,EAAQwX,EAAOvkB,IAEtCiN,EAAKsX,GAASxX,CAElBE,GAAK6uC,IAAMx9C,GAAM4rB,QAErBu2B,gBAAiB,SAAUl8B,GACvB,MAAOle,MAAKtD,eAAewhB,IAAoB,cAAVA,GAAmC,YAAVA,SAA8Ble,MAAKke,KAAW/X,IAAsB,QAAV+X,GAE5H8a,QAAS,SAAUziC,GACf,IAAK,GAAIuE,KAAKkF,MACNA,KAAKo6C,gBAAgBt/C,IACrBvE,EAAEyJ,KAAKlF,GAAIA,IAIvBgP,OAAQ,WACJ,GAAiBlM,GAAOsgB,EAApBlf,IACJ,KAAKkf,IAASle,MACNA,KAAKo6C,gBAAgBl8B,KACrBtgB,EAAQoC,KAAKke,IACTtgB,YAAiBi6C,IAAoBj6C,YAAiBrC,OACtDqC,EAAQA,EAAMkM,UAElB9K,EAAOkf,GAAStgB,EAGxB,OAAOoB,IAEX2kB,IAAK,SAAUzF,GACX,GAAiBlf,GAAb4H,EAAO5G,IAOX,OANA4G,GAAKoB,QAAQixC,IAAO/6B,MAAOA,IAEvBlf,EADU,SAAVkf,EACStX,EAEA3O,GAAMurB,OAAOtF,GAAO,GAAMtX,IAI3CyzC,KAAM,SAAUn8B,EAAOtgB,GAAjB,GAIM08C,GAA0B7S,EAGtB3oC,EANR8H,EAAO5G,KACPu6C,EAAYr8B,EAAMhgB,QAAQ,MAAQ,CACtC,IAAIq8C,EAEA,IADID,EAAQp8B,EAAMlnB,MAAM,KAAMywC,EAAO,GAC9B6S,EAAM3iD,OAAS,GAAG,CAGrB,GAFA8vC,GAAQ6S,EAAMxoC,QACVhT,EAAM7G,GAAMurB,OAAOikB,GAAM,GAAM7gC,GAC/B9H,YAAe+4C,GAEf,MADA/4C,GAAI8kB,IAAI02B,EAAMrjD,KAAK,KAAM2G,GAClB28C,CAEX9S,IAAQ,IAIhB,MADAxvC,IAAMwrB,OAAOvF,GAAOtX,EAAMhJ,GACnB28C,GAEX32B,IAAK,SAAU1F,EAAOtgB,GAClB,GAAIgJ,GAAO5G,KAAMw6C,GAAiB,EAAOD,EAAYr8B,EAAMhgB,QAAQ,MAAQ,EAAGyN,EAAU1T,GAAMurB,OAAOtF,GAAO,GAAMtX,EAuBlH,OAtBI+E,KAAY/N,IACR+N,YAAmBtH,KAAcrE,KAAKm6C,UAAUj8B,KAC5Cle,KAAKm6C,UAAUj8B,GAAOyF,KACtBhY,EAAQ9D,OAAOoxC,GAAKj5C,KAAKm6C,UAAUj8B,GAAOyF,KAE9ChY,EAAQ9D,OAAOugC,GAAQpoC,KAAKm6C,UAAUj8B,GAAOirB,SAEjDqR,EAAiB5zC,EAAKoB,QAAQ,OAC1BkW,MAAOA,EACPtgB,MAAOA,IAEN48C,IACID,IACD38C,EAAQgJ,EAAK/N,KAAK+E,EAAOsgB,EAAO,WAC5B,MAAOtX,QAGVA,EAAKyzC,KAAKn8B,EAAOtgB,IAAUsgB,EAAMhgB,QAAQ,MAAQ,GAAKggB,EAAMhgB,QAAQ,MAAQ,IAC7E0I,EAAKoB,QAAQogC,IAAUlqB,MAAOA,MAInCs8B,GAEX7gD,OAAQiH,GACR/H,KAAM,SAAU8gD,EAAQz7B,EAAOvkB,GAAzB,GAEEgqB,GACAwlB,EAGIsR,EACAC,EANJ9zC,EAAO5G,KAGPd,EAAOqK,GAASpB,KAAKwxC,EA0BzB,OAzBc,OAAVA,GAA4B,oBAATz6C,GAAuC,mBAATA,IAC7Cu7C,EAAoBd,YAAkBp+C,IACtCm/C,EAAef,YAAkBj+C,IACxB,oBAATwD,GAA+Bw7C,GAAiBD,GAYhC,mBAATv7C,GAA6Bu7C,GAAqBC,KACpDD,GAAsBC,IACvBf,EAAS,GAAIp+C,IAAgBo+C,IAEjCxQ,EAASiI,EAAaxqC,EAAMwhC,GAAQlqB,GAAO,GAC3Cy7B,EAAOvyC,KAAKghC,GAAQe,GACpBviC,EAAKuzC,UAAUj8B,IAAWirB,OAAQA,KAjB5BwQ,YAAkB9B,KACpB8B,EAAS,GAAI9B,GAAiB8B,IAElCh2B,EAAMytB,EAAaxqC,EAAMqyC,GAAK/6B,GAAO,GACrCy7B,EAAOvyC,KAAK6xC,GAAKt1B,GACjBwlB,EAASiI,EAAaxqC,EAAMwhC,GAAQlqB,GAAO,GAC3Cy7B,EAAOvyC,KAAKghC,GAAQe,GACpBviC,EAAKuzC,UAAUj8B,IACXyF,IAAKA,EACLwlB,OAAQA,IAUhBwQ,EAAOhgD,OAASA,GAEbggD,KAwBX7B,GACAtgD,OAAU,SAAUoG,GAChB,MAAO3F,IAAMkK,WAAWvE,IAE5BiO,KAAQ,SAAUjO,GACd,MAAO3F,IAAM8e,UAAUnZ,IAE3B+8C,UAAW,SAAU/8C,GACjB,aAAWA,KAAU4C,GACc,SAAxB5C,EAAMd,cAED,MAATc,IAAkBA,EAAQA,GAErCqL,OAAU,SAAUrL,GAChB,MAAgB,OAATA,EAAgBA,EAAQ,GAAKA,GAExCg9C,UAAW,SAAUh9C,GACjB,MAAOA,KAGXm6C,GACA9uC,OAAU,GACVzR,OAAU,EACVqU,KAAQ,GAAI7P,MACZ2+C,WAAW,EACXC,UAAW,IAcX5K,EAAQ6H,EAAiBn3C,QACzBC,KAAM,SAAUnF,GAAV,GAKemC,GACDuR,EALZtI,EAAO5G,IACX,MAAKxE,GAAQ/E,EAAE4wB,cAAc7rB,MACzBA,EAAO/E,EAAEiK,UAAWkG,EAAKi0C,SAAUr/C,GAC/BoL,EAAKk0C,eACL,IAASn9C,EAAM,EAAGA,EAAMiJ,EAAKk0C,cAAcnjD,OAAQgG,IAC3CuR,EAAOtI,EAAKk0C,cAAcn9C,GAC9BnC,EAAK0T,GAAQtI,EAAKi0C,SAAS3rC,IAIvC2oC,GAAiB5zC,GAAGtD,KAAKwH,KAAKvB,EAAMpL,GACpCoL,EAAKsyB,OAAQ,EACbtyB,EAAKm0C,eACDn0C,EAAK6oC,UACL7oC,EAAKmd,GAAKnd,EAAK+c,IAAI/c,EAAK6oC,SACpB7oC,EAAKmd,KAAOptB,IACZiQ,EAAKmd,GAAKnd,EAAK+uC,cAI3ByE,gBAAiB,SAAUl8B,GACvB,MAAO25B,GAAiB5zC,GAAGm2C,gBAAgBjyC,KAAKnI,KAAMke,IAAoB,QAAVA,KAAsC,OAAjBle,KAAKyvC,SAA8B,OAAVvxB,IAA6B,UAAVA,GAA+B,gBAAVA,GAAqC,eAAVA,GAErLoyB,OAAQ,SAAUpyB,EAAOtgB,GACrB,GAAgEgyC,GAA5DhpC,EAAO5G,KAAM0xC,EAAYxzB,EAAO+xB,EAASrpC,EAAKqpC,UAWlD,OAVA/xB,GAAQ+xB,EAAO/xB,GACVA,IACDA,EAAQuzB,EAAexB,EAAQyB,IAE/BxzB,IACA0xB,EAAQ1xB,EAAM0xB,OACTA,GAAS1xB,EAAMhf,OAChB0wC,EAAQkI,EAAQ55B,EAAMhf,KAAKpC,iBAG5B8yC,EAAQA,EAAMhyC,GAASA,GAElCyzC,cAAe,SAAUppC,GACrB,GAAIovB,GAASpvB,EAAEovB,MACD,QAAVA,GAA6B,UAAVA,IACnBr3B,KAAKk5B,OAAQ,EACbl5B,KAAK+6C,YAAY9yC,EAAEiW,QAAS,IAGpC88B,SAAU,SAAU98B,GAEhB,MADAA,IAASle,KAAKiwC,YAAc/xB,IACrBA,GAAQA,EAAM88B,YAAa,GAEtCp3B,IAAK,SAAU1F,EAAOtgB,EAAOq9C,GAAxB,GACGr0C,GAAO5G,KACPk5B,EAAQtyB,EAAKsyB,KACbtyB,GAAKo0C,SAAS98B,KACdtgB,EAAQgJ,EAAK0pC,OAAOpyB,EAAOtgB,GACtB0zC,EAAM1zC,EAAOgJ,EAAK+c,IAAIzF,MACvBtX,EAAKsyB,OAAQ,EACbtyB,EAAKm0C,YAAY78B,IAAS,EACtB25B,EAAiB5zC,GAAG2f,IAAIzb,KAAKvB,EAAMsX,EAAOtgB,EAAOq9C,KAAe/hB,IAChEtyB,EAAKsyB,MAAQA,EACRtyB,EAAKsyB,QACNtyB,EAAKm0C,YAAY78B,IAAS,OAM9Cg9B,OAAQ,SAAU1/C,GAAV,GAGG0iB,GAECtgB,EAJJgJ,EAAO5G,KAAMrG,EAAS,WAClB,MAAOiN,GAEf,KAAKsX,IAAS1iB,GACNoC,EAAQpC,EAAK0iB,GACM,KAAnBA,EAAM9mB,OAAO,KACbwG,EAAQgJ,EAAK/N,KAAK2C,EAAK0iB,GAAQA,EAAOvkB,IAE1CiN,EAAKyzC,KAAKn8B,EAAOtgB,EAEjBgJ,GAAK6oC,UACL7oC,EAAKmd,GAAKnd,EAAK+c,IAAI/c,EAAK6oC,UAE5B7oC,EAAKsyB,OAAQ,EACbtyB,EAAKm0C,gBAETI,MAAO,WACH,MAAOn7C,MAAK+jB,KAAO/jB,KAAK21C,cAGhC3F,EAAMx5C,OAAS,SAAUmQ,EAAMvG,GACvBA,IAAYzJ,IACZyJ,EAAUuG,EACVA,EAAOqpC,EAEX,IAAIL,GAAkDzgC,EAAMgP,EAAOhf,EAAMtB,EAAOD,EAAKhG,EAAqBo8C,EAA/FttC,EAAQ/F,IAASm6C,aAAgBz6C,GAAiD6vC,KAA2BlsB,EAAKtd,EAAMsd,GAAIq3B,IAUvI,IATIr3B,IACAtd,EAAMgpC,QAAU1rB,GAEhBtd,EAAMsd,UACCtd,GAAMsd,GAEbA,IACAtd,EAAMo0C,SAAS92B,GAAMtd,EAAMkvC,WAAa,IAER,mBAAhCpsC,GAASpB,KAAK1B,EAAMwpC,QAA8B,CAClD,IAAKtyC,EAAM,EAAGhG,EAAS8O,EAAMwpC,OAAOt4C,OAAQgG,EAAMhG,EAAQgG,IACtDugB,EAAQzX,EAAMwpC,OAAOtyC,SACVugB,KAAU1d,GACjByvC,EAAO/xB,MACAA,EAAMA,QACb+xB,EAAO/xB,EAAMA,OAASA,EAG9BzX,GAAMwpC,OAASA,EAEnB,IAAK/gC,IAAQzI,GAAMwpC,OACf/xB,EAAQzX,EAAMwpC,OAAO/gC,GACrBhQ,EAAOgf,EAAMhf,MAAQ,UACrBtB,EAAQ,KACRm2C,EAAe7kC,EACfA,QAAcgP,GAAMA,QAAU1d,GAAS0d,EAAMA,MAAQhP,EAChDgP,EAAMm9B,WACPz9C,EAAQ6I,EAAMo0C,SAAS9G,IAAiB7kC,EAAO6kC,EAAe7kC,GAAQgP,EAAMo9B,eAAiB3kD,EAAYunB,EAAMo9B,aAAevD,EAAc74C,EAAKpC,eAC5H,kBAAVc,IACPw9C,EAAetzC,KAAKoH,IAGxB9O,EAAQ2jB,KAAO7U,IACfzI,EAAMkvC,WAAa/3C,GAEvB6I,EAAMo0C,SAAS9G,IAAiB7kC,EAAO6kC,EAAe7kC,GAAQtR,EAC9DsgB,EAAM0xB,MAAQ1xB,EAAM0xB,OAASkI,EAAQ54C,EAazC,OAXIk8C,GAAezjD,OAAS,IACxB8O,EAAMq0C,cAAgBM,GAE1BzL,EAAQhpC,EAAKjG,OAAO+F,GACpBkpC,EAAMn5C,OAAS,SAAU4J,GACrB,MAAO4vC,GAAMx5C,OAAOm5C,EAAOvvC,IAE3BqG,EAAMwpC,SACNN,EAAMM,OAASxpC,EAAMwpC,OACrBN,EAAMF,QAAUhpC,EAAMgpC,SAEnBE,GAEPqI,GACAj0C,SAAU,SAAUma,GAChB,MAAOhiB,IAAWgiB,GAASA,EAAQsF,GAAOtF,IAE9Cq9B,QAAS,SAAUr9B,GACf,GAAIna,GAAW/D,KAAK+D,SAASma,EAC7B,OAAO,UAAUtb,EAAGC,GAGhB,MAFAD,GAAImB,EAASnB,GACbC,EAAIkB,EAASlB,GACJ,MAALD,GAAkB,MAALC,EACN,EAEF,MAALD,KAGK,MAALC,EACO,EAEPD,EAAE44C,cACK54C,EAAE44C,cAAc34C,GAEpBD,EAAIC,EAAI,EAAID,EAAIC,KAAS,IAGxCosC,OAAQ,SAAU9wB,GACd,GAAIo9B,GAAUp9B,EAAKo9B,SAAWv7C,KAAKu7C,QAAQp9B,EAAKD,MAChD,OAAgB,QAAZC,EAAKmR,IACE,SAAU1sB,EAAGC;AAChB,MAAO04C,GAAQ14C,EAAGD,GAAG,IAGtB24C,GAEXE,QAAS,SAAUC,GACf,MAAO,UAAU94C,EAAGC,GAChB,GAAiClF,GAAKhG,EAAlCqH,EAAS08C,EAAU,GAAG94C,EAAGC,EAC7B,KAAKlF,EAAM,EAAGhG,EAAS+jD,EAAU/jD,OAAQgG,EAAMhG,EAAQgG,IACnDqB,EAASA,GAAU08C,EAAU/9C,GAAKiF,EAAGC,EAEzC,OAAO7D,MAIfi5C,EAAiBv3C,MAAWs3C,GAC5B2D,IAAK,SAAUz9B,GACX,GAAIna,GAAW/D,KAAK+D,SAASma,EAC7B,OAAO,UAAUtb,EAAGC,GAAb,GACC+4C,GAAS73C,EAASnB,GAClBi5C,EAAS93C,EAASlB,EAKtB,OAJI+4C,IAAUA,EAAO3/C,SAAW4/C,GAAUA,EAAO5/C,UAC7C2/C,EAASA,EAAO3/C,UAChB4/C,EAASA,EAAO5/C,WAEhB2/C,IAAWC,EACJj5C,EAAEk5C,WAAaj5C,EAAEi5C,WAEd,MAAVF,KAGU,MAAVC,EACO,EAEPD,EAAOJ,cACAI,EAAOJ,cAAcK,GAEzBD,EAASC,EAAS,OAGjCE,KAAM,SAAU79B,GACZ,GAAIna,GAAW/D,KAAK+D,SAASma,EAC7B,OAAO,UAAUtb,EAAGC,GAAb,GACC+4C,GAAS73C,EAASnB,GAClBi5C,EAAS93C,EAASlB,EAKtB,OAJI+4C,IAAUA,EAAO3/C,SAAW4/C,GAAUA,EAAO5/C,UAC7C2/C,EAASA,EAAO3/C,UAChB4/C,EAASA,EAAO5/C,WAEhB2/C,IAAWC,EACJj5C,EAAEk5C,WAAaj5C,EAAEi5C,WAEd,MAAVF,EACO,EAEG,MAAVC,KAGAA,EAAOL,cACAK,EAAOL,cAAcI,GAEzBA,EAASC,EAAS,OAGjC5M,OAAQ,SAAU9wB,GACd,MAAOne,MAAKme,EAAKmR,KAAKnR,EAAKD,UAGnClL,EAAM,SAAUK,EAAOwN,GACnB,GAAIljB,GAAKhG,EAAS0b,EAAM1b,OAAQqH,EAAalD,MAAMnE,EACnD,KAAKgG,EAAM,EAAGA,EAAMhG,EAAQgG,IACxBqB,EAAOrB,GAAOkjB,EAASxN,EAAM1V,GAAMA,EAAK0V,EAE5C,OAAOrU,IAEPk5C,EAAY,WACZ,QAASlvC,GAAMpM,GAIX,MAHkB,gBAAPA,KACPA,EAAMA,EAAI1F,QAAQ,WAAY,KAE3B+O,KAAKkF,UAAUvO,GAE1B,QAASo/C,GAAOC,GACZ,MAAO,UAAUr5C,EAAGC,EAAGq5C,GAMnB,MALAr5C,IAAK,GACDq5C,IACAt5C,EAAI,IAAMA,EAAI,wBACdC,EAAIA,EAAE/F,eAEHm/C,EAAKr5C,EAAGoG,EAAMnG,GAAIq5C,IAGjC,QAASxP,GAASyP,EAAIv5C,EAAGC,EAAGq5C,GACxB,GAAS,MAALr5C,EAAW,CACX,SAAWA,KAAMrC,GAAQ,CACrB,GAAIqL,GAAOyK,GAAWjH,KAAKxM,EACvBgJ,GACAhJ,EAAI,GAAI7G,QAAM6P,EAAK,KACZqwC,GACPr5C,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,IAAMu5C,EAAK,IAAMt5C,EAEhC,QAASu5C,GAAextC,GAAxB,GACanS,GAAW4/C,EAAavhD,EACzB+S,CADR,KAASpR,EAAK,KAAM4/C,GAAM,EAAOvhD,EAAI,EAAGA,EAAI8T,EAAQjX,SAAUmD,EAAG,CAE7D,GADI+S,EAAKe,EAAQxX,OAAO0D,GACpBuhD,EACA5/C,GAAM,KAAOoR,MACV,CAAA,GAAU,KAANA,EAAW,CAClBwuC,GAAM,CACN,UAEA5/C,GADa,KAANoR,EACD,KACO,KAANA,EACD,IACC,kCAAqC3P,QAAQ2P,IAAO,EACrD,KAAOA,EAEPA,EAEVwuC,GAAM,EAEV,MAAO5/C,GAAK,KAEhB,OACIuM,MAAO,SAAUpL,GACb,MAAIA,IAASA,EAAM3B,QACR,YAAc2B,EAAM3B,UAAY,IAEpC+M,EAAMpL,IAEjBsrB,GAAI,SAAUtmB,EAAGC,EAAGq5C,GAChB,MAAOxP,GAAS,KAAM9pC,EAAGC,EAAGq5C,IAEhCnP,IAAK,SAAUnqC,EAAGC,EAAGq5C,GACjB,MAAOxP,GAAS,KAAM9pC,EAAGC,EAAGq5C,IAEhClP,GAAI,SAAUpqC,EAAGC,EAAGq5C,GAChB,MAAOxP,GAAS,IAAK9pC,EAAGC,EAAGq5C,IAE/BjP,IAAK,SAAUrqC,EAAGC,EAAGq5C,GACjB,MAAOxP,GAAS,KAAM9pC,EAAGC,EAAGq5C,IAEhChP,GAAI,SAAUtqC,EAAGC,EAAGq5C,GAChB,MAAOxP,GAAS,IAAK9pC,EAAGC,EAAGq5C,IAE/B/O,IAAK,SAAUvqC,EAAGC,EAAGq5C,GACjB,MAAOxP,GAAS,KAAM9pC,EAAGC,EAAGq5C,IAEhC5O,WAAY0O,EAAO,SAAUp5C,EAAGC,GAC5B,MAAOD,GAAI,gBAAkBC,EAAI,cAErCy5C,iBAAkBN,EAAO,SAAUp5C,EAAGC,GAClC,MAAOD,GAAI,gBAAkBC,EAAI,eAErCwqC,SAAU2O,EAAO,SAAUp5C,EAAGC,GAC1B,GAAI05C,GAAI15C,EAAIA,EAAElL,OAAS,EAAI,CAC3B,OAAOiL,GAAI,YAAcC,EAAI,KAAOD,EAAI,aAAe25C,EAAI,WAE/DC,eAAgBR,EAAO,SAAUp5C,EAAGC,GAChC,GAAI05C,GAAI15C,EAAIA,EAAElL,OAAS,EAAI,CAC3B,OAAOiL,GAAI,YAAcC,EAAI,KAAOD,EAAI,aAAe25C,EAAI,UAE/Dz5C,SAAUk5C,EAAO,SAAUp5C,EAAGC,GAC1B,MAAOD,GAAI,YAAcC,EAAI,WAEjCuqC,eAAgB4O,EAAO,SAAUp5C,EAAGC,GAChC,MAAOD,GAAI,YAAcC,EAAI,YAEjCiR,QAASkoC,EAAO,SAAUp5C,EAAGC,GAEzB,MADAA,GAAIA,EAAEvL,UAAU,EAAGuL,EAAElL,OAAS,GACvBykD,EAAev5C,GAAK,SAAWD,EAAI,MAE9C65C,aAAcT,EAAO,SAAUp5C,EAAGC,GAE9B,MADAA,GAAIA,EAAEvL,UAAU,EAAGuL,EAAElL,OAAS,GACvB,IAAMykD,EAAev5C,GAAK,SAAWD,EAAI,MAEpD6qC,QAAS,SAAU7qC,GACf,MAAOA,GAAI,WAEf8qC,WAAY,SAAU9qC,GAClB,MAAOA,GAAI,WAEf2qC,OAAQ,SAAU3qC,GACd,MAAO,IAAMA,EAAI,aAErB4qC,UAAW,SAAU5qC,GACjB,MAAO,IAAMA,EAAI,iBAO7B+uC,EAAM+K,WAAa,SAAUp5B,GACzB,GAGO3lB,GAAKhG,EAAQkM,EAAQJ,EAAmDya,EAAOwuB,EAHlFmG,KAAkBlG,GACdgQ,IAAK,OACLC,GAAI,QACsBC,KAAqBC,KAAyCp5C,EAAU4f,EAAW5f,OACrH,KAAK/F,EAAM,EAAGhG,EAAS+L,EAAQ/L,OAAQgG,EAAMhG,EAAQgG,IACjDkG,EAASH,EAAQ/F,GACjBugB,EAAQra,EAAOqa,MACfwuB,EAAW7oC,EAAO6oC,SACd7oC,EAAOH,SACPD,EAAOkuC,EAAM+K,WAAW74C,GACxBA,EAASJ,EAAK6f,WAAWpsB,QAAQ,gBAAiB,SAAUmB,EAAO8Z,GAE/D,MADAA,IAASA,EACF,QAAU2qC,EAAkBnlD,OAASwa,GAAS,MACtDjb,QAAQ,gBAAiB,SAAUmB,EAAO8Z,GAEzC,MADAA,IAASA,EACF,QAAU0qC,EAAellD,OAASwa,GAAS,MAEtD2qC,EAAkBh1C,KAAKhB,MAAMg2C,EAAmBr5C,EAAKy0C,WACrD2E,EAAe/0C,KAAKhB,MAAM+1C,EAAgBp5C,EAAKwsC,gBAEpC/xB,KAAU/X,IACjB1C,EAAO,OAASo5C,EAAellD,OAAS,OACxCklD,EAAe/0C,KAAKoW,IAEpBza,EAAOxL,GAAMwL,KAAKya,SAEXwuB,KAAavmC,IACpBtC,EAAS,OAASi5C,EAAkBnlD,OAAS,KAAO8L,EAAO,KAAOy0C,EAAUlvC,MAAMnF,EAAOjG,OAAS,IAClGk/C,EAAkBh1C,KAAK4kC,IAEvB7oC,EAASq0C,GAAWxL,GAAY,MAAM5vC,eAAe2G,EAAMI,EAAOjG,MAAOiG,EAAOknC,aAAep0C,GAAYkN,EAAOknC,aAG1H8H,EAAY/qC,KAAKjE,EAErB,QACIyf,WAAY,IAAMuvB,EAAY57C,KAAK01C,EAAMrpB,EAAWqpB,QAAU,IAC9DsD,OAAQ4M,EACR3E,UAAW4E,IAcf9K,GACA+K,KAAM,KACNC,OAAQ,KACRC,UAAW,KACXC,QAAS,KACT5L,MAAO,KACP6L,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,iBAChBlR,OAAQ,SACRE,QAAS,UACTC,WAAY,cA2BhBiE,EAAMM,gBAAkBA,EAqDxBN,EAAMY,eAAiBA,EAiBvBZ,EAAM5qC,WACF23C,QAAS,WACL,MAAO1+C,MAAKxE,MAEhBmjD,MAAO,SAAUxsC,EAAOwB,GACpB,MAAO,IAAIg+B,GAAM3xC,KAAKxE,KAAKgL,MAAM2L,EAAOA,EAAQwB,KAEpDw6B,KAAM,SAAUx6B,GACZ,MAAO,IAAIg+B,GAAM3xC,KAAKxE,KAAKgL,MAAMmN,KAErC06B,KAAM,SAAU16B,GACZ,MAAO,IAAIg+B,GAAM3xC,KAAKxE,KAAKgL,MAAM,EAAGmN,KAExCwhB,OAAQ,SAAUpxB,GACd,MAAO,IAAI4tC,GAAM3+B,EAAIhT,KAAKxE,KAAMuI,KAEpCkqC,MAAO,SAAUlqC,EAAUurB,EAAKsvB,GAC5B,GAAIzgC,IAASmR,IAAKA,EAQlB,OAPIvrB,KACIA,EAASw3C,QACTp9B,EAAKo9B,QAAUx3C,EAASw3C,QAExBp9B,EAAKD,MAAQna,GAIV,GAAI4tC,GADXiN,EACiB5+C,KAAKxE,KAAK2iB,KAAK65B,EAAS/I,OAAO9wB,IAEnCne,KAAKxE,KAAKgL,MAAM,GAAG2X,KAAK65B,EAAS/I,OAAO9wB,MAE7D0gC,QAAS,SAAU96C,EAAU66C,GACzB,MAAO5+C,MAAKiuC,MAAMlqC,EAAU,MAAO66C,IAEvCE,kBAAmB,SAAU/6C,EAAU66C,GACnC,MAAO5+C,MAAKiuC,MAAMlqC,EAAU,OAAQ66C,IAExCzgC,KAAM,SAAUD,EAAOoR,EAAKumB,EAAU+I,GAClC,GAAIjhD,GAAKhG,EAAQm6C,EAAcF,EAAc1zB,EAAOoR,GAAMosB,IAE1D,IADA7F,EAAWA,GAAYmC,EACnBlG,EAAYn6C,OAAQ,CACpB,IAAKgG,EAAM,EAAGhG,EAASm6C,EAAYn6C,OAAQgG,EAAMhG,EAAQgG,IACrD+9C,EAAU5zC,KAAK+tC,EAAS5G,OAAO6C,EAAYn0C,IAE/C,OAAOqC,MAAK6+C,SAAUtD,QAAS1F,EAAS4F,QAAQC,IAAckD,GAElE,MAAO5+C,OAEX6D,OAAQ,SAAUgvC,GACd,GAAIl1C,GAAKgO,EAAShU,EAAQonD,EAAUC,EAA6B/O,EAAQiI,EAAwBr0C,EAAlDrI,EAAOwE,KAAKxE,KAAyBwD,IAEpF,IADA6zC,EAAcZ,EAAgBY,IACzBA,GAA8C,IAA/BA,EAAYnvC,QAAQ/L,OACpC,MAAOqI,KAWX,KATA++C,EAAWpN,EAAM+K,WAAW7J,GAC5B5C,EAAS8O,EAAS9O,OAClBiI,EAAY6G,EAAS7G,UACrB8G,EAAYn7C,EAAavB,SAAS,cAAe,UAAYy8C,EAASz7B,aAClE2sB,EAAOt4C,QAAUugD,EAAUvgD,UAC3BkM,EAAS,SAAU8M,GACf,MAAOquC,GAAUruC,EAAGs/B,EAAQiI,KAG/Bv6C,EAAM,EAAGhG,EAAS6D,EAAK7D,OAAQgG,EAAMhG,EAAQgG,IAC9CgO,EAAUnQ,EAAKmC,GACXkG,EAAO8H,IACP3M,EAAO8I,KAAK6D,EAGpB,OAAO,IAAIgmC,GAAM3yC,IAErBy1C,MAAO,SAAU3C,EAAamN,GAC1BnN,EAAcgB,EAAehB,OAC7BmN,EAAUA,GAAWj/C,KAAKxE,IAC1B,IAAgDq2C,GAA5CjrC,EAAO5G,KAAMhB,EAAS,GAAI2yC,GAAM/qC,EAAKpL,KAmBzC,OAlBIs2C,GAAYn6C,OAAS,IACrBk6C,EAAaC,EAAY,GACzB9yC,EAASA,EAAOkgD,QAAQrN,GAAY1c,OAAO,SAAUsf,GACjD,GAAIj5C,GAAO,GAAIm2C,GAAMsN,GAASp7C,SACtBqa,MAAOu2B,EAAMv2B,MACbwuB,SAAU,KACV9uC,MAAO62C,EAAM72C,MACbmtC,YAAY,IAEpB,QACI7sB,MAAOu2B,EAAMv2B,MACbtgB,MAAO62C,EAAM72C,MACb8oB,MAAOorB,EAAYn6C,OAAS,EAAI,GAAIg6C,GAAM8C,EAAM/tB,OAAO+tB,MAAM3C,EAAYtrC,MAAM,GAAIhL,EAAKkjD,WAAWA,UAAYjK,EAAM/tB,MACrHytB,aAAcrC,EAAYn6C,OAAS,EACnCo7C,WAAYv3C,EAAK+3C,UAAU1B,EAAWkB,gBAI3C/zC,GAEXkgD,QAAS,SAAUrN,GACf,GAAIxqB,GAAcwqB,KAAgB7xC,KAAKxE,KAAK7D,OACxC,MAAO,IAAIg6C,MAEf,IAAgIwB,GAIzHzQ,EAAc/kC,EAAK6mB,EAJtBtG,EAAQ2zB,EAAW3zB,MAAOD,EAASje,KAAKm/C,iBAAiBjhC,EAAO2zB,EAAWviB,KAAO,OAAQ5L,EAAWzrB,GAAMyrB,SAASxF,GAAckhC,EAAa17B,EAASC,IAAI1F,EAAO,GAAIC,GAAQu2B,GAC3Kv2B,MAAOA,EACPtgB,MAAOwhD,EACP14B,UACuB1nB,GAAUy1C,EACzC,KAAK92C,EAAM,EAAG6mB,EAAMvG,EAAOtmB,OAAQgG,EAAM6mB,EAAK7mB,IAC1Cw1C,EAAOl1B,EAAOtgB,GACd+kC,EAAehf,EAASC,IAAIwvB,EAAMj1B,GAC7B80B,EAAmBoM,EAAY1c,KAChC0c,EAAa1c,EACb+R,GACIv2B,MAAOA,EACPtgB,MAAOwhD,EACP14B,UAEJ1nB,EAAO8I,KAAK2sC,IAEhBA,EAAM/tB,MAAM5e,KAAKqrC,EAErB,OAAO,IAAIxB,GAAM3yC,IAErBmgD,iBAAkB,SAAUjhC,EAAOoR,GAC/B,GAAI3xB,GAAKhG,EAAQ6D,EAAOwE,KAAKxE,IAC7B,KAAKuiB,GAAY,CACb,IAAKpgB,EAAM,EAAGhG,EAAS6D,EAAK7D,OAAQgG,EAAMhG,EAAQgG,IAC9CnC,EAAKmC,GAAKm+C,WAAan+C,CAG3B,KADAnC,EAAO,GAAIm2C,GAAMn2C,GAAM2iB,KAAKD,EAAOoR,EAAK2oB,GAAgByG,UACnD/gD,EAAM,EAAGhG,EAAS6D,EAAK7D,OAAQgG,EAAMhG,EAAQgG,UACvCnC,GAAKmC,GAAKm+C,UAErB,OAAOtgD,GAEX,MAAOwE,MAAKme,KAAKD,EAAOoR,GAAKovB,WAEjCnL,UAAW,SAAUR,GACjB,GAAIp1C,GAAK6mB,EAAKxlB,KAAao0C,IAC3B,IAAIL,GAAcA,EAAWp7C,OACzB,IAAKgG,EAAM,EAAG6mB,EAAMxkB,KAAKxE,KAAK7D,OAAQgG,EAAM6mB,EAAK7mB,IAC7Cs1C,EAAmBj0C,EAAQ+zC,EAAY/yC,KAAKxE,KAAKmC,GAAMA,EAAK6mB,EAAK4uB,EAGzE,OAAOp0C,KAsBXw0C,GACA6L,IAAK,SAAUnM,EAAaC,EAAMzvB,GAC9B,GAAI9lB,GAAQ8lB,EAASC,IAAIwvB,EAMzB,OALKM,GAASP,GAEHO,EAAS71C,KAChBs1C,GAAet1C,GAFfs1C,EAAct1C,EAIXs1C,GAEXv/B,MAAO,SAAUu/B,GACb,OAAQA,GAAe,GAAK,GAEhCoM,QAAS,SAAUpM,EAAaC,EAAMzvB,EAAUvR,EAAOxa,EAAQy7C,GAC3D,GAAIx1C,GAAQ8lB,EAASC,IAAIwvB,EAezB,OAdIC,GAAMz/B,QAAUhd,IAChBy8C,EAAMz/B,MAAQ,GAEb8/B,EAASP,GAEHO,EAAS71C,KAChBs1C,GAAet1C,GAFfs1C,EAAct1C,EAId61C,EAAS71C,IACTw1C,EAAMz/B,QAENxB,GAASxa,EAAS,GAAK87C,EAASP,KAChCA,GAA4BE,EAAMz/B,OAE/Bu/B,GAEXz6C,IAAK,SAAUy6C,EAAaC,EAAMzvB,GAC9B,GAAI9lB,GAAQ8lB,EAASC,IAAIwvB,EAOzB,OANKM,GAASP,IAAiBQ,EAAOR,KAClCA,EAAct1C,GAEds1C,EAAct1C,IAAU61C,EAAS71C,IAAU81C,EAAO91C,MAClDs1C,EAAct1C,GAEXs1C,GAEXlhC,IAAK,SAAUkhC,EAAaC,EAAMzvB,GAC9B,GAAI9lB,GAAQ8lB,EAASC,IAAIwvB,EAOzB,OANKM,GAASP,IAAiBQ,EAAOR,KAClCA,EAAct1C,GAEds1C,EAAct1C,IAAU61C,EAAS71C,IAAU81C,EAAO91C,MAClDs1C,EAAct1C,GAEXs1C,IAgBfvB,EAAM4N,QAAU,SAAU/jD,EAAM4E,EAASw+C,GACrCx+C,EAAUA,KACV,IAAkIyuC,GAA9H2Q,EAAQ,GAAI7N,GAAMn2C,GAAOi5C,EAAQr0C,EAAQq0C,MAAOt2B,EAAO20B,EAAe2B,OAAat+B,OAAOy7B,EAAcxxC,EAAQ+d,WAAqBshC,EAAiBr/C,EAAQq/C,eAAgB57C,EAASzD,EAAQyD,OAAQsqC,EAAO/tC,EAAQ+tC,KAAME,EAAOjuC,EAAQiuC,IAwB/O,OAvBIxqC,KACA27C,EAAQA,EAAM37C,OAAOA,GACjB47C,IACAD,EAAQC,EAAeD,IAE3B3Q,EAAQ2Q,EAAMd,UAAU/mD,QAExBwmB,IAEIqhC,EADAZ,EACQY,EAAMrhC,KAAKA,EAAMxnB,EAAWA,EAAWioD,GAEvCY,EAAMrhC,KAAKA,GAEnBs2B,IACAj5C,EAAOgkD,EAAMd,YAGjBvQ,IAASx3C,GAAa03C,IAAS13C,IAC/B6oD,EAAQA,EAAMb,MAAMxQ,EAAME,IAE1BoG,IACA+K,EAAQA,EAAM/K,MAAMA,EAAOj5C,KAG3BqzC,MAAOA,EACPrzC,KAAMgkD,EAAMd,YAGhBvG,EAAiBvhD,GAAM8J,QACvBC,KAAM,SAAUP,GACZJ,KAAKxE,KAAO4E,EAAQ5E,MAExBgzC,KAAM,SAAUpuC,GACZA,EAAQs/C,QAAQ1/C,KAAKxE,OAEzBwzC,OAAQ,SAAU5uC,GACdA,EAAQs/C,QAAQt/C,EAAQ5E,OAE5ByzC,OAAQ,SAAU7uC,GACdA,EAAQs/C,QAAQt/C,EAAQ5E,OAE5BwqB,QAAS,SAAU5lB,GACfA,EAAQs/C,QAAQt/C,EAAQ5E,SAG5B48C,GAAkBxhD,GAAM8J,QACxBC,KAAM,SAAUP,GACZ,GAAiB8uC,GAAbtoC,EAAO5G,IACXI,GAAUwG,EAAKxG,QAAUM,MAAWkG,EAAKxG,QAASA,GAClD1C,GAAK47C,GAAM,SAAUnnC,EAAOjT,SACbkB,GAAQlB,KAAUsB,KACzBJ,EAAQlB,IAAUmkB,IAAKjjB,EAAQlB,OAGvC0H,EAAK+lB,MAAQvsB,EAAQusB,MAAQ0rB,GAAMpJ,OAAO7uC,EAAQusB,QAC9CnF,KAAM5mB,GACNU,IAAKV,IAETsuC,EAAe9uC,EAAQ8uC,aACnBhzC,GAAWkE,EAAQ0H,QACnBlB,EAAKkB,KAAO1H,EAAQ0H,MAEnBlB,EAAKkB,OACNlB,EAAKkB,KAAOyxC,IAEhB3yC,EAAKsoC,aAAehzC,GAAWgzC,GAAgBA,EAAe,SAAU9uC,GACpE,GAAIpB,KAWJ,OAVAtB,IAAK0C,EAAS,SAAU0B,EAAQlE,GACxBkE,IAAUotC,KACVptC,EAASotC,EAAaptC,GAClBytC,GAAcztC,KACdlE,EAAQkE,EAAOlE,MAAMA,GACrBkE,EAASA,EAAO/C,MAGxBC,EAAO8C,GAAUlE,IAEdoB,IAGfoB,SAAW8uC,aAAcqK,IACzBtK,OAAQ,SAAU7uC,GACd,MAAOu4C,IAAK34C,KAAK6hC,MAAMzhC,EAASw4C,MAEpCpK,KAAM,SAAUpuC,GACZ,GAAiBs/C,GAASC,EAAO3gD,EAA7B4H,EAAO5G,KAA8B2sB,EAAQ/lB,EAAK+lB,KACtDvsB,GAAUwG,EAAKi7B,MAAMzhC,EAASy4C,IAC9B6G,EAAUt/C,EAAQs/C,SAAW9+C,GAC7B++C,EAAQv/C,EAAQu/C,OAAS/+C,GACzB5B,EAAS2tB,EAAMnF,KAAKpnB,EAAQ5E,MACxBwD,IAAWrI,EACX+oD,EAAQ1gD,IAERoB,EAAQs/C,QAAU,SAAU1gD,GACxB2tB,EAAMrrB,IAAIlB,EAAQ5E,KAAMwD,GACxB0gD,EAAQ1gD,IAEZvI,EAAEkiD,KAAKv4C,KAGf4uC,OAAQ,SAAU5uC,GACd,MAAOu4C,IAAK34C,KAAK6hC,MAAMzhC,EAAS04C,MAEpC9yB,QAAS,SAAU5lB,GACf,MAAOu4C,IAAK34C,KAAK6hC,MAAMzhC,EAAS24C,MAEpClX,MAAO,SAAUzhC,EAASlB,GACtBkB,EAAUA,KACV,IAAiBw/C,GAAbh5C,EAAO5G,KAAkB6/C,EAAYj5C,EAAKxG,QAAQlB,GAAO1D,EAAOU,GAAW2jD,EAAUrkD,MAAQqkD,EAAUrkD,KAAK4E,EAAQ5E,MAAQqkD,EAAUrkD,IAO1I,OANA4E,GAAUM,IAAO,KAAUm/C,EAAWz/C,GACtCw/C,EAAal/C,IAAO,KAAUlF,EAAM4E,EAAQ5E,MAC5C4E,EAAQ5E,KAAOoL,EAAKsoC,aAAa0Q,EAAY1gD,GACzChD,GAAWkE,EAAQijB,OACnBjjB,EAAQijB,IAAMjjB,EAAQijB,IAAIu8B,IAEvBx/C,KAGXi4C,GAAQzhD,GAAM8J,QACdC,KAAM,WACFX,KAAK8/C,WAETx+C,IAAK,SAAUvC,EAAKvD,GACZuD,IAAQpI,IACRqJ,KAAK8/C,OAAO30C,GAAUpM,IAAQvD,IAGtCgsB,KAAM,SAAUzoB,GACZ,MAAOiB,MAAK8/C,OAAO30C,GAAUpM,KAEjCghD,MAAO,WACH//C,KAAK8/C,WAETz3B,OAAQ,SAAUtpB,SACPiB,MAAK8/C,OAAO30C,GAAUpM,OAGrCs5C,GAAMpJ,OAAS,SAAU7uC,GACrB,GAAI4/C,IACAC,SAAY,WACR,MAAO,IAAI5H,KAGnB,OAAI9I,IAAcnvC,IAAYlE,GAAWkE,EAAQonB,MACtCpnB,EAEPA,KAAY,EACL,GAAIi4C,IAER2H,EAAM5/C,MA2Dbk4C,GAAa1hD,GAAM8J,QACnBC,KAAM,SAAUu/C,GAAV,GACex5C,GAAQid,EAAKgsB,EAAOhpC,EAUjCw5C,EAGIC,EAA2CC,EAAiDxM,EAAyBD,EAAc0M,EAAuBxM,EAAiBsG,EAAyB1I,EAbxM9qC,EAAO5G,IACXkgD,GAASA,KACT,KAAKx5C,IAAUw5C,GACXv8B,EAAMu8B,EAAOx5C,GACbE,EAAKF,SAAiBid,KAAQnjB,GAASgjB,GAAOG,GAAOA,CAEzDhd,GAAOu5C,EAAOnQ,WAAaC,EACvBT,GAAc3oC,EAAK+oC,SACnB/oC,EAAK+oC,MAAQA,EAAQhpC,EAAKnQ,OAAOoQ,EAAK+oC,QAEtCwQ,EAAen6C,GAAMY,EAAKpL,KAAMoL,GACpCA,EAAK25C,oBAAsBJ,EACvBv5C,EAAK+oC,QACDyQ,EAAiBp6C,GAAMY,EAAK45C,OAAQ55C,GAAOy5C,EAAoBr6C,GAAMY,EAAKkpC,UAAWlpC,GAAOitC,KAAyBD,KAAc0M,KAAuBxM,KAAiBsG,GAAkB,EACjMzK,EAAQ/oC,EAAK+oC,MACTA,EAAMM,SACNvyC,GAAKiyC,EAAMM,OAAQ,SAAU/xB,EAAOtgB,GAChC,GAAI6iD,EACJ/O,GAAYxzB,EACRqxB,GAAc3xC,IAAUA,EAAMsgB,MAC9BwzB,EAAY9zC,EAAMsgB,YACJtgB,KAAU4C,KACxBkxC,EAAY9zC,GAEZ2xC,GAAc3xC,IAAUA,EAAMuvB,OAC9BszB,EAAW7iD,EAAMuvB,MAErBitB,EAAkBA,GAAmBqG,GAAYA,IAAaviC,GAASwzB,IAAcxzB,EACrF01B,EAAQ11B,GAASsF,GAAOi9B,GAAY/O,GACpC4O,EAAiBpiC,GAASsF,GAAOtF,GACjC21B,EAAmB4M,GAAY/O,GAAaxzB,EAC5C41B,EAAW51B,GAASuiC,GAAY/O,KAE/BwO,EAAOpQ,WAAasK,IACrBxzC,EAAKkpC,UAAYsE,EAAeiM,EAAmB1Q,EAAOgE,EAAkB2M,EAAkBzM,EAAoBC,KAG1HltC,EAAK25C,oBAAsBJ,EAC3Bv5C,EAAKpL,KAAO44C,EAAe+L,EAAcxQ,EAAOsE,EAAgBL,EAASC,EAAoBC,GAC7FltC,EAAK45C,OAASpM,EAAegM,EAAgBzQ,EAAOuE,EAAcN,EAASC,EAAoBC,KAGvGjE,OAAQ,SAAUr0C,GACd,MAAOA,GAAOA,EAAKq0C,OAAS,MAEhCD,MAAO2J,GACP/9C,KAAM+9C,GACN1K,MAAO,SAAUrzC,GACb,MAAOA,GAAK7D,QAEhB6oD,OAAQjH,GACRxG,WAAY,WACR,UAEJjD,UAAW,SAAUt0C,GACjB,MAAOA,MAgNXE,GAAa2I,GAAW3D,QACxBC,KAAM,SAAUP,GAAV,GACeuvC,GAAOn0C,EAgCZuD,EAhCR6H,EAAO5G,IACPI,KACA5E,EAAO4E,EAAQ5E,MAEnB4E,EAAUwG,EAAKxG,QAAUM,MAAWkG,EAAKxG,QAASA,GAClDwG,EAAK85C,QACL95C,EAAK+5C,aACL/5C,EAAKqwC,SACLrwC,EAAKg6C,iBACLh6C,EAAKi6C,WACLj6C,EAAKk6C,SACLl6C,EAAKm6C,eAAiB,EACtBn6C,EAAKo6C,cACLp6C,EAAKq6C,UAAY7gD,EAAQwtC,SACzBhnC,EAAKs6C,MAAQ9gD,EAAQytC,OAASztC,EAAQwtC,SAAW,EAAIj3C,GACrDiQ,EAAKu6C,MAAQvP,EAAcxxC,EAAQ+d,MACnCvX,EAAKw6C,QAAUnP,EAAgB7xC,EAAQyD,QACvC+C,EAAKy6C,OAASvO,EAAe1yC,EAAQq0C,OACrC7tC,EAAK06C,WAAalhD,EAAQmzC,UAC1B3sC,EAAK26C,OAASnhD,EAAQyuC,MACtBjoC,EAAK46C,gCAAiC,EACtCn9C,GAAWJ,GAAGtD,KAAKwH,KAAKvB,GACxBA,EAAK66C,UAAYlJ,GAAUtJ,OAAO7uC,EAAS5E,EAAMoL,GAC7C1K,GAAW0K,EAAK66C,UAAU35C,OAC1BlB,EAAK66C,UAAU35C,MACX45C,WAAY17C,GAAMY,EAAK+6C,YAAa/6C,GACpCg7C,WAAY57C,GAAMY,EAAKi7C,YAAaj7C,GACpCk7C,YAAa97C,GAAMY,EAAKm7C,aAAcn7C,KAGhB,MAA1BxG,EAAQ4hD,iBAC6B,gBAA1B5hD,GAAQ4hD,gBACXjjD,EAAMqB,EAAQ4hD,eAClBp7C,EAAKq7C,UACDC,QAAS,WACL,MAAOj8C,MAAK2pC,MAAMuS,aAAaD,QAAQnjD,KAE3CqjD,QAAS,SAAUjP,GACfgP,aAAaC,QAAQrjD,EAAKoM,GAAUvE,EAAKy7C,OAAOvS,UAAUqD,QAIlEvsC,EAAKq7C,SAAW7hD,EAAQ4hD,gBAGhCp7C,EAAKy7C,OAAS,GAAIpqD,IAAMuD,KAAK21C,QAAQ/wC,EAAQ8/C,OAAOhhD,MAAQ,QAAQkB,EAAQ8/C,QAC5EvQ,EAAQ/oC,EAAKy7C,OAAO1S,UACpB/oC,EAAK07C,2BACL17C,EAAKqwC,MAAQrwC,EAAK27C,SAAS37C,EAAKqwC,OAChCrwC,EAAK47C,SAAU,EACf57C,EAAKQ,MACD,OACA8xC,GACA9Q,GACA+Q,GACAH,GACAK,GACAD,IACDh5C,IAEPA,SACI5E,KAAM,KACN0kD,QAAUnQ,UAAWC,GACrBgS,eAAgB,KAChBS,eAAe,EACfC,cAAc,EACdC,iBAAiB,EACjBvN,gBAAgB,EAChBwN,kBAAkB,EAClBC,OAAO,EACPC,aAAa,GAEjB3mD,MAAO,WACH,MAAO6D,OAEX+iD,OAAQ,SAAUnlD,GACd,MAAIA,KAAUjH,EACNqJ,KAAKwiD,SAAW5kD,IAChBoC,KAAKwiD,QAAU5kD,EACXA,GACOoC,KAAKgjD,OAGbvsD,EAAE+qC,WAAWM,UAAU3gC,UAEvBnB,KAAKwiD,SAGpBS,YAAa,SAAU7P,GACnB,MAAmC,OAA/BpzC,KAAKI,QAAQ4hD,eACN,KAEP5O,IAAUz8C,EACHqJ,KAAKiiD,SAASG,QAAQhP,GAE1BpzC,KAAKiiD,SAASC,eAEzBgB,iBAAkB,WACd,GAAIzO,GAAQz0C,KAAKy0C,WACjB,OAAOz0C,MAAKI,QAAQg1C,gBAAkBX,EAAM98C,QAEhDgqD,YAAa,SAAU3iD,GACnBgB,KAAKmjD,MAAMnkD,EAAQ,eAEvB6iD,YAAa,SAAU7iD,GACnBgB,KAAKmjD,MAAMnkD,EAAQ,eAEvB+iD,aAAc,SAAU/iD,GACpBgB,KAAKmjD,MAAMnkD,EAAQ,gBAEvBmkD,MAAO,SAAUnkD,EAAQ6gD,GACrB,GAAIrkD,GAAOwE,KAAKojD,UAAUpkD,EACrBxD,KACDA,EAAOwD,GAEXgB,KAAK6/C,GAAWrkD,IAEpB6nD,UAAW,SAAU7nD,EAAM2yC,GACvB,GAAI3yC,EAAM,CACN,GAAIwE,KAAKkjD,mBACL,MAAOxO,GAAcl5C,EAEzB,KAAK2yC,EACD,IAAK,GAAIxwC,GAAM,EAAGA,EAAMnC,EAAK7D,OAAQgG,IACjCnC,EAAKo5C,GAAGj3C,GAIpB,MAAOnC,IAEX7B,OAAQiH,GACR+iB,IAAK,SAAUI,GACX,GAAIpmB,GAAKhG,EAAQ6D,EAAOwE,KAAKqjD,UAAUrjD,KAAKi3C,MAAOj3C,KAAKI,QAAQkjD,UAChE,KAAK3lD,EAAM,EAAGhG,EAAS6D,EAAK7D,OAAQgG,EAAMhG,EAAQgG,IAC9C,GAAInC,EAAKmC,GAAKomB,IAAMA,EAChB,MAAOvoB,GAAKmC,IAIxB4lD,SAAU,SAAUx/B,GAChB,MAAO/jB,MAAKwjD,UAAUz/B,EAAI/jB,KAAKi3C,QAEnCuM,UAAW,SAAUz/B,EAAIsC,GACrB,GAAI1oB,GAAKhG,EAAQ6D,EAAOwE,KAAKqjD,UAAUh9B,EAAWrmB,KAAKI,QAAQkjD,UAC/D,IAAK9nD,EAGL,IAAKmC,EAAM,EAAGhG,EAAS6D,EAAK7D,OAAQgG,EAAMhG,EAAQgG,IAC9C,GAAInC,EAAKmC,GAAK83C,KAAO1xB,EACjB,MAAOvoB,GAAKmC,IAIxBO,QAAS,SAAUyxC,GACf,MAAOiG,GAAa51C,KAAKi3C,MAAOtH,IAEpCiF,GAAI,SAAUziC,GACV,MAAOnS,MAAKi3C,MAAMrC,GAAGziC,IAEzB3W,KAAM,SAAUoC,GAAV,GAeeD,GAdbiJ,EAAO5G,IACX,IAAIpC,IAAUjH,EAWP,CACH,GAAIiQ,EAAKqwC,MACL,IAASt5C,EAAM,EAAGA,EAAMiJ,EAAKqwC,MAAMt/C,OAAQgG,IACvCiJ,EAAKqwC,MAAMrC,GAAGj3C,EAGtB,OAAOiJ,GAAKqwC,MAhBZrwC,EAAK07C,2BACL17C,EAAKqwC,MAAQj3C,KAAKuiD,SAAS3kD,GAC3BgJ,EAAKg6C,cAAgBhjD,EAAM4I,MAAM,GACjCI,EAAK68C,aACL78C,EAAKi6C,WACLj6C,EAAKoB,QAAQ,SACbpB,EAAK88C,UAAU98C,EAAKqwC,OACpBrwC,EAAK26C,OAAS36C,EAAKqwC,MAAMt/C,OACzBiP,EAAKm6C,eAAiBn6C,EAAK26C,OAC3B36C,EAAK+8C,SAAS/8C,EAAKqwC,QAU3BnuB,KAAM,SAAUlrB,GACZ,MAAIA,KAAUjH,EACHqJ,KAAK8gD,OAEZ9gD,KAAK8gD,MAAQ9gD,KAAK4jD,aAAahmD,GAA/BoC,IAGR4jD,aAAc,SAAUpoD,GAAV,GAGNstB,GAFAliB,EAAO5G,IAMX,OALAm1C,GAAsB35C,EAAMoL,EAAKqwC,MAAOrwC,EAAKi6C,QAASj6C,EAAKy7C,OAAO1S,OAASkI,EAAkBjxC,EAAKs8C,oBAC9Fp6B,EAAO,GAAIrtB,GAAoBD,EAAMoL,EAAKy7C,OAAO1S,OACrD7mB,EAAKnvB,OAAS,WACV,MAAOiN,GAAKjN,UAETmvB,GAEXxC,SAAU,WACN,GAAIk6B,GAASxgD,KAAKy0C,WAClB,OAAI+L,GAAO7oD,OACA+8C,EAAc10C,KAAK8gD,OAEnB9gD,KAAK8gD,OAGpBx/C,IAAK,SAAUquC,GACX,MAAO3vC,MAAK6jD,OAAO7jD,KAAKi3C,MAAMt/C,OAAQg4C,IAE1CmU,gBAAiB,SAAUnU,GACvB,MAAI3vC,MAAKqiD,OAAO1S,MACL,GAAI3vC,MAAKqiD,OAAO1S,MAAMA,GAE7BA,YAAiBkI,GACVlI,EAEJ,GAAIkI,GAAiBlI,IAEhCkU,OAAQ,SAAU1xC,EAAOw9B,GAcrB,MAbKA,KACDA,EAAQx9B,EACRA,EAAQ,GAENw9B,YAAiBK,KACnBL,EAAQ3vC,KAAK8jD,gBAAgBnU,IAE7B3vC,KAAKkjD,mBACLljD,KAAKi3C,MAAM7uC,OAAO+J,EAAO,EAAGnS,KAAK+jD,kBAAkBpU,IAEnD3vC,KAAKi3C,MAAM7uC,OAAO+J,EAAO,EAAGw9B,GAEhC3vC,KAAKgkD,oBAAoB7xC,EAAOw9B,GACzBA,GAEXsU,WAAY,SAAU9xC,EAAOuU,GAAjB,GAQJw9B,GACAC,EAGSxmD,EACDw1C,EACAn0C,EAEAolD,CAfP19B,KACDA,EAAQvU,EACRA,EAAQ,GAEPpM,GAAQ2gB,KACTA,GAASA,IAETw9B,KACAC,EAAWnkD,KAAKI,QAAQ+jD,SAC5BnkD,KAAKI,QAAQ+jD,UAAW,CACxB,KACI,IAASxmD,EAAM,EAAGA,EAAM+oB,EAAM/uB,OAAQgG,IAC9Bw1C,EAAOzsB,EAAM/oB,GACbqB,EAASgB,KAAK6jD,OAAO1xC,EAAOghC,GAChC+Q,EAAOp8C,KAAK9I,GACRolD,EAAWplD,EAAO8K,SAClB9J,KAAKkjD,qBACLkB,EAAWpkD,KAAK+jD,kBAAkBK,IAEtCpkD,KAAK4gD,cAAc94C,KAAKs8C,GACxBjyC,IAEN,QACEnS,KAAKI,QAAQ+jD,SAAWA,EAExBD,EAAOvsD,QACPqI,KAAKgI,QAAQ,QACT9I,KAAM,SACNwnB,MAAOw9B,KAInBxC,WAAY,SAAUh7B,GAClB1mB,KAAKikD,WAAWjkD,KAAKi3C,MAAMt/C,OAAQ+uB,IAEvCk7B,WAAY,SAAUl7B,GAAV,GAIJw9B,GACKvmD,EACDw1C,EACAxD,EACArvB,CAHR,KAJKva,GAAQ2gB,KACTA,GAASA,IAETw9B,KACKvmD,EAAM,EAAGA,EAAM+oB,EAAM/uB,OAAQgG,IAC9Bw1C,EAAOzsB,EAAM/oB,GACbgyC,EAAQ3vC,KAAK8jD,gBAAgB3Q,GAC7B7yB,EAAStgB,KAAK2jB,IAAIgsB,EAAM5rB,IACxBzD,GACA4jC,EAAOp8C,KAAKwY,GACZA,EAAO46B,OAAO/H,GACd7yB,EAAOtY,QAAQogC,IACfpoC,KAAKqkD,wBAAwB/jC,EAAQ6yB,IAErCnzC,KAAK0hD,WAAWvO,EAGpB+Q,GAAOvsD,QACPqI,KAAKgI,QAAQ,QACT9I,KAAM,SACNwnB,MAAOw9B,KAInBpC,YAAa,SAAUp7B,GACnB,GAAIw9B,GAASlkD,KAAKskD,aAAa59B,EAC3Bw9B,GAAOvsD,QACPqI,KAAKgI,QAAQ,QACT9I,KAAM,UACNwnB,MAAOw9B,KAInBI,aAAc,SAAU59B,GAAV,GAIN69B,GACAJ,EAGSxmD,EACDw1C,EACAxD,EACA6U,CAVPz+C,IAAQ2gB,KACTA,GAASA,IAET69B,KACAJ,EAAWnkD,KAAKI,QAAQ+jD,SAC5BnkD,KAAKI,QAAQ+jD,UAAW,CACxB,KACI,IAASxmD,EAAM,EAAGA,EAAM+oB,EAAM/uB,OAAQgG,IAC9Bw1C,EAAOzsB,EAAM/oB,GACbgyC,EAAQ3vC,KAAK8jD,gBAAgB3Q,GAC7BqR,GAAQ,EACZxkD,KAAKykD,UAAUzkD,KAAKi3C,MAAO,SAAUvwB,GAAV,GACd/oB,GACDw1C,CADR,KAASx1C,EAAM,EAAGA,EAAM+oB,EAAM/uB,OAAQgG,IAElC,GADIw1C,EAAOzsB,EAAMkuB,GAAGj3C,GAChBw1C,EAAKpvB,KAAO4rB,EAAM5rB,GAAI,CACtBwgC,EAAUz8C,KAAKqrC,GACfzsB,EAAMte,OAAOzK,EAAK,GAClB6mD,GAAQ,CACR,UAIRA,IACAxkD,KAAK0kD,wBAAwB/U,GAC7B3vC,KAAKghD,WAAW90B,OAG1B,QACElsB,KAAKI,QAAQ+jD,SAAWA,EAE5B,MAAOI,IAEXl8B,OAAQ,SAAUsnB,GACd,GAAI3wC,GAAQ4H,EAAO5G,KAAM2kD,EAAY/9C,EAAKs8C,kBAe1C,OAdAljD,MAAKykD,UAAU79C,EAAKqwC,MAAO,SAAUvwB,GAMjC,GAJI1nB,EADA4H,EAAKxG,QAAQkjD,YAAc18C,EAAKxG,QAAQsiD,aAC/BpN,EAAY5uB,EAAOipB,EAAO/oC,EAAKg+C,oBAAqBh+C,EAAKynC,QAEzDiH,EAAY5uB,EAAOipB,GAE5B3wC,GAAU2lD,EAIV,MAHK3lD,GAAOm8C,OAAUn8C,EAAOm8C,SACzBv0C,EAAKo6C,WAAWl5C,KAAK9I,IAElB,IAGfgB,KAAK6kD,uBAAuBlV,GACrBA,GAEX4U,UAAW,WACP,MAAOvkD,MAAKghD,YAEhB8D,QAAS,WACL,GAAInnD,GAAKhG,EAAQqH,KAAaxD,EAAOwE,KAAKqjD,UAAUrjD,KAAKi3C,MAAOj3C,KAAKI,QAAQkjD,UAC7E,KAAK3lD,EAAM,EAAGhG,EAAS6D,EAAK7D,OAAQgG,EAAMhG,EAAQgG,IAC1CnC,EAAKmC,GAAKw9C,OAAS3/C,EAAKmC,GAAKw9C,SAC7Bn8C,EAAO8I,KAAKtM,EAAKmC,GAGzB,OAAOqB,IAEX+lD,QAAS,WACL,GAAIpnD,GAAKhG,EAAQqH,KAAaxD,EAAOwE,KAAKqjD,UAAUrjD,KAAKi3C,MAAOj3C,KAAKI,QAAQkjD,UAC7E,KAAK3lD,EAAM,EAAGhG,EAAS6D,EAAK7D,OAAQgG,EAAMhG,EAAQgG,IAC1CnC,EAAKmC,GAAKw9C,QAAU3/C,EAAKmC,GAAKw9C,SAAW3/C,EAAKmC,GAAKu7B,OACnDl6B,EAAO8I,KAAKtM,EAAKmC,GAGzB,OAAOqB,IAEXgkD,KAAM,WAAA,GASMgC,GARJp+C,EAAO5G,KAAM8kD,KAAcC,KAAcR,EAAY39C,EAAKo6C,WAC1D7/C,EAAU1K,EAAE+qC,WAAWM,UAAU3gC,SACrC,IAAIyF,EAAKm8C,SAAU,CACf,IAAKn8C,EAAKy7C,OAAO1S,MACb,MAAOxuC,EAEX2jD,GAAUl+C,EAAKk+C,UACfC,EAAUn+C,EAAKm+C,UACXC,KACAp+C,EAAKxG,QAAQyiD,OAASj8C,EAAK66C,UAAUhqB,OACrCutB,EAAWp+C,EAAKq+C,YAAYH,EAASC,EAASR,IAE9CS,EAASl9C,KAAKhB,MAAMk+C,EAAUp+C,EAAKs+C,MAAM,SAAUJ,IACnDE,EAASl9C,KAAKhB,MAAMk+C,EAAUp+C,EAAKs+C,MAAM,SAAUH,IACnDC,EAASl9C,KAAKhB,MAAMk+C,EAAUp+C,EAAKs+C,MAAM,UAAWX,KAExDpjD,EAAU1K,EAAE0uD,KAAKr+C,MAAM,KAAMk+C,GAAUvjB,KAAK,WACxC,GAAI9jC,GAAKhG,CACT,KAAKgG,EAAM,EAAGhG,EAASoD,UAAUpD,OAAQgG,EAAMhG,EAAQgG,IAC/C5C,UAAU4C,IACViJ,EAAKw+C,QAAQrqD,UAAU4C,GAG/BiJ,GAAK68C,YAAW,GAChB78C,EAAKy+C,SAAUhuB,OAAQ,SACvBzwB,EAAKoB,QAAQgxC,UAGjBpyC,GAAK68C,YAAW,GAChB78C,EAAKy+C,SAAUhuB,OAAQ,QAE3B,OAAOl2B,IAEXmkD,cAAe,SAAU3V,GACrB,GAAI/oC,GAAO5G,IACP2vC,aAAiB13C,IAAMuD,KAAKw0C,MAC5BppC,EAAK2+C,aAAa5V,IAElB/oC,EAAKo6C,cACLp6C,EAAK07C,2BACL17C,EAAKqwC,MAAQrwC,EAAK27C,SAAS37C,EAAKg6C,eAC5Bh6C,EAAKxG,QAAQsiD,eACb97C,EAAK26C,OAAS36C,EAAKm6C,gBAEvBn6C,EAAKi6C,WACLj6C,EAAK88C,UAAU98C,EAAKqwC,MAAO,GAC3BrwC,EAAKy+C,UACLz+C,EAAK4+C,+BAGbA,2BAA4B,WACxB,GAAI5+C,GAAO5G,IACwB,OAA/B4G,EAAKxG,QAAQ4hD,gBACbp7C,EAAK69C,UAAU79C,EAAKqwC,MAAO,SAAUvwB,GAAV,GACd/oB,GACDw1C,CADR,KAASx1C,EAAM,EAAGA,EAAM+oB,EAAM/uB,OAAQgG,IAC9Bw1C,EAAOzsB,EAAMkuB,GAAGj3C,GACE,UAAlBw1C,EAAKsS,WAA2C,UAAlBtS,EAAKsS,YACnCtS,EAAKja,OAAQ,MAMjCwsB,WAAY,WACR,GAAI/nD,GAAKhG,EAAQ6D,EAAOwE,KAAKqjD,UAAUrjD,KAAKi3C,MAAOj3C,KAAKI,QAAQkjD,UAChE,IAAItjD,KAAKghD,WAAWrpD,OAChB,OAAO,CAEX,KAAKgG,EAAM,EAAGhG,EAAS6D,EAAK7D,OAAQgG,EAAMhG,EAAQgG,IAC9C,GAAInC,EAAKmC,GAAKw9C,OAAS3/C,EAAKmC,GAAKw9C,SAAW3/C,EAAKmC,GAAKu7B,MAClD,OAAO,CAGf,QAAO,GAEXksB,QAAS,SAAUpmD,GACf,GAAwKrH,GAApKiP,EAAO5G,KAAM2lD,EAAS3mD,EAAO2mD,OAAQC,EAAW5mD,EAAO4mD,SAAUjoD,EAAM,EAAGkoD,EAAcj/C,EAAKs8C,mBAAoBkB,EAAWx9C,EAAKg6C,cAAe1hD,EAAOF,EAAOE,IAKlK,IAJA0H,EAAKoB,QAAQqxC,IACTuM,SAAUA,EACV1mD,KAAMA,IAEN0mD,IAAav+B,GAAcu+B,GAAW,CAEtC,GADAA,EAAWh/C,EAAKy7C,OAAOzS,MAAMgW,GACzBh/C,EAAKk/C,oBAAoBF,GACzB,MAEJA,GAAWh/C,EAAKy7C,OAAO7mD,KAAKoqD,GACvB7/C,GAAQ6/C,KACTA,GAAYA,QAGhBA,GAAWnvD,EAAEuc,IAAI2yC,EAAQ,SAAUhW,GAC/B,MAAOA,GAAM7lC,UAMrB,KAHa,YAAT5K,IACA0H,EAAKo6C,eAEJrjD,EAAM,EAAGhG,EAASguD,EAAOhuD,OAAQgG,EAAMhG,EAAQgG,IACnC,YAATuB,GACAymD,EAAOhoD,GAAKu9C,OAAO0K,EAASjoD,IACf,WAATuB,EACAklD,EAASt8C,KAAK+9C,EAAcj/C,EAAKm9C,kBAAkB4B,EAAOhoD,IAAQioD,EAASjoD,IAC3D,WAATuB,GACP0H,EAAKy9C,wBAAwBsB,EAAOhoD,GAAMioD,EAASjoD,KAGvDiJ,EAAK89C,wBAAwBiB,EAAOhoD,KAIhD0mD,wBAAyB,SAAU1U,EAAOz9B,GACtClS,KAAK+lD,2BAA2BpW,EAAO,SAAUx9B,EAAOuU,GACpDzuB,GAAM2C,WAAW8rB,EAAMvU,GAAQD,MAGvC6zC,2BAA4B,SAAUpW,EAAO9uB,GACzC7gB,KAAKgmD,kBAAkB,SAAUt/B,GAC7B,GAAIvU,GAAQujC,EAAqBhvB,EAAOipB,EACxC,IAAIx9B,KAEA,MADA0O,GAAS1O,EAAOuU,IACT,KAInBg+B,wBAAyB,SAAU/U,GAC/B3vC,KAAK+lD,2BAA2BpW,EAAO,SAAUx9B,EAAOuU,GACpDA,EAAMte,OAAO+J,EAAO,MAG5BixC,UAAW,SAAU5nD,GACjB,GAAIgzC,GAAQxuC,KAAKkjD,mBAAwCljD,KAAKqiD,OAAO7B,OAA/BxgD,KAAKqiD,OAAO7mD,IAClD,OAAOgzC,GAAKrmC,KAAKnI,KAAKqiD,OAAQ7mD,IAElCwqD,kBAAmB,SAAUnlC,GACzB7gB,KAAKykD,UAAUzkD,KAAK4gD,cAAe//B,IAEvC4jC,UAAW,SAAUjpD,EAAMqlB,GACnBrlB,GAAQA,EAAK7D,SACTqI,KAAKkjD,mBACLpO,EAAet5C,EAAMqlB,GAErBA,EAASrlB,KAIrByqD,kBAAmB,SAAUtW,GACzB,GAAIyU,GAAUzmD,EAAKkjB,EAAW,SAAU6F,GAEhC,GADA/oB,EAAM+3C,EAAqBhvB,EAAOipB,GAC9BhyC,KAEA,MADAymD,GAAW19B,EAAM/oB,IACV,EAInB,OADAqC,MAAKgmD,kBAAkBnlC,GAChBujC,GAEXmB,aAAc,SAAU5V,GAAV,GACN/oC,GAAO5G,KACPokD,EAAWpkD,KAAKimD,kBAAkBtW,EACtC3vC,MAAKykD,UAAUzkD,KAAKi3C,MAAO,SAAUvwB,GACjC,GAAI/oB,GAAMi4C,EAAalvB,EAAOipB,EAC1BhyC,IAAO,KACHymD,GAAczU,EAAMwL,UAAWiJ,EAASqB,WAMxC/+B,EAAMte,OAAOzK,EAAK,GAClBiJ,EAAKi+C,uBAAuBlV,KAN5BjpB,EAAM/oB,GAAKu9C,OAAOkJ,GACQ,UAAtBA,EAASqB,YACT/+B,EAAM/oB,GAAKu7B,OAAQ,QASvCgtB,QAAS,SAAUlB,EAAUxpD,GACzB,GAAIoL,GAAO5G,IACX4G,GAAKoB,QAAQmxC,IAAgBj6C,KAAM,WACnC0H,EAAKoB,QAAQoxC,IACbxyC,EAAK66C,UAAUhqB,OAAO/2B,IAClBg/C,QAAS,SAAUkG,EAAU1mD,GACzB,GAAIiC,GAAU1K,EAAEy2B,KAAK83B,EAAU,SAAU1xB,GACrC,MAAOA,GAAEp0B,MAAQA,IAClB,EACCiC,IACAA,EAAQ2gC,SACJ8jB,SAAUA,EACVD,OAAQxkD,EAAQwkD,OAChBzmD,KAAMA,KAIlBygD,MAAO,SAAUiG,EAAUO,EAAQxG,GAC/B,IAAK,GAAIhiD,GAAM,EAAGA,EAAMqnD,EAASrtD,OAAQgG,IACrCqnD,EAASrnD,GAAKyoD,OAAOR,EAEzBh/C,GAAK+4C,MAAMiG,EAAUO,EAAQxG,KAElCnkD,KAEPypD,YAAa,SAAUH,EAASC,EAASR,GACrC,GAAI39C,GAAO5G,KAAMglD,IA4BjB,OA3BIp+C,GAAKxG,QAAQyiD,QACTiC,EAAQntD,QACRqtD,EAASl9C,KAAKrR,EAAE+qC,SAAS,SAAUD,GAC/BA,EAASriC,KAAO,SAChBqiC,EAASokB,OAASb,KAGtBC,EAAQptD,QACRqtD,EAASl9C,KAAKrR,EAAE+qC,SAAS,SAAUD,GAC/BA,EAASriC,KAAO,SAChBqiC,EAASokB,OAASZ,KAGtBR,EAAU5sD,QACVqtD,EAASl9C,KAAKrR,EAAE+qC,SAAS,SAAUD,GAC/BA,EAASriC,KAAO,UAChBqiC,EAASokB,OAASpB,KAG1B39C,EAAKs/C,QAAQlB,GACTxpD,MACIspD,QAASl+C,EAAKy7C,OAAOvS,UAAUhmC,EAAOg7C,IACtCC,QAASn+C,EAAKy7C,OAAOvS,UAAUhmC,EAAOi7C,IACtCR,UAAW39C,EAAKy7C,OAAOvS,UAAUhmC,EAAOy6C,QAI7CS,GAEXqB,SAAU,SAAU7qD,EAAMmqD,EAAQzmD,GAC9B,GAAI0H,GAAO5G,IACX,OAAOvJ,GAAE+qC,SAAS,SAAUD,GACxB36B,EAAKoB,QAAQmxC,IAAgBj6C,KAAMA,IACnC0H,EAAKoB,QAAQoxC,IACbxyC,EAAK66C,UAAUviD,GAAMiJ,KAAKvB,EAAK66C,UAAW/gD,IACtCg/C,QAAS,SAAUkG,GACfrkB,EAASO,SACL8jB,SAAUA,EACVD,OAAQA,EACRzmD,KAAMA,KAGdygD,MAAO,SAAUiG,EAAUO,EAAQxG,GAC/Bpe,EAAS6kB,OAAOR,GAChBh/C,EAAK+4C,MAAMiG,EAAUO,EAAQxG,KAElCnkD,MACJ2F,WAEP+jD,MAAO,SAAUx8B,EAAQltB,GACrB,GAAiBmC,GAAKhG,EAAlBiP,EAAO5G,KAAmBglD,KAAesB,EAAY1/C,EAAKy7C,OAAOvS,UAAUhmC,EAAOtO,GACtF,IAAIoL,EAAKxG,QAAQyiD,MACTrnD,EAAK7D,QACLqtD,EAASl9C,KAAKlB,EAAKy/C,UAAW7qD,MAAQmqD,OAAQW,IAAe9qD,EAAMktB,QAGvE,KAAK/qB,EAAM,EAAGhG,EAAS6D,EAAK7D,OAAQgG,EAAMhG,EAAQgG,IAC9CqnD,EAASl9C,KAAKlB,EAAKy/C,UAAW7qD,KAAM8qD,EAAU3oD,KAASnC,EAAKmC,IAAO+qB,GAG3E,OAAOs8B,IAEXxW,KAAM,SAAUhzC,GAAV,GACEoL,GAAO5G,KAAMkzB,EAAStsB,EAAK2/C,QAAQ/qD,GACnC+lC,EAAW9qC,EAAE+qC,UA8BjB,OA7BA56B,GAAK4/C,cAActzB,EAAQ,WACvB,GAAIuzB,GAAc7/C,EAAKoB,QAAQmxC,IAAgBj6C,KAAM,QAChDunD,IAuBD7/C,EAAK8/C,kBACLnlB,EAASO,QAAQ2kB,KAvBjB7/C,EAAKoB,QAAQoxC,IACbxyC,EAAKi6C,WACLj6C,EAAKoB,QAAQ,SACTpB,EAAKm8C,SACLn8C,EAAK66C,UAAUjT,MACXhzC,KAAM03B,EACNwsB,QAAS,SAAUlkD,GACfoL,EAAKi6C,WACLj6C,EAAK84C,QAAQlkD,EAAM03B,GACnBqO,EAASO,WAEb6d,MAAO,WACH,GAAIl3B,GAAOjiB,GAAM2B,KAAKpN,UACtB6L,GAAK+4C,MAAM74C,MAAMF,EAAM6hB,GACvB8Y,EAAS6kB,OAAOt/C,MAAMy6B,EAAU9Y,MAGF,MAA/B7hB,EAAKxG,QAAQ4hD,iBACpBp7C,EAAK84C,QAAQ94C,EAAKq8C,cAAe/vB,GACjCqO,EAASO,cAOdP,EAASpgC,WAEpBwlD,gBAAiB,SAAUnrD,GACvB,MAAOwE,MAAKqiD,OAAOtP,WAAWv3C,IAElCkkD,QAAS,SAAUlkD,GAAV,GACoCorD,GAoBjClgC,EACAmgC,EACAlX,EACAF,EACA9xC,EAEIomB,EAIAovB,EACAC,EAkBCt4C,EAjDT8L,EAAO5G,KAAMI,EAAUwG,EAAKxG,OAKhC,IAJAwG,EAAKoB,QAAQqxC,IACTuM,SAAUpqD,EACV0D,KAAM,SAEN0H,EAAKm8C,SAAU,CAEf,GADAvnD,EAAOoL,EAAKy7C,OAAOzS,MAAMp0C,GACrBoL,EAAKk/C,oBAAoBtqD,GAEzB,MADAoL,GAAK8/C,kBACL,CAEJ9/C,GAAK26C,OAAS36C,EAAKy7C,OAAOxT,MAAMrzC,GAC5BoL,EAAK06C,YAAclhD,EAAQwiD,mBAC3Bh8C,EAAKkgD,iBAAmBlgD,EAAK+/C,gBAAgBnrD,IAEjDorD,EAAgB7rD,UAAUpD,OAAS,EAAIoD,UAAU,GAAKpE,EACtD6E,EAAOoL,EAAKw8C,UAAU5nD,EAAMorD,GAC5BhgD,EAAKo6C,kBACF,CAOH,IANAxlD,EAAOoL,EAAKw8C,UAAU5nD,GAClBkrB,KACAmgC,KACAlX,EAAQ/oC,EAAKy7C,OAAO1S,MACpBF,EAAUE,EAAQA,EAAMF,QAAU,KAEjC9xC,EAAM,EAAGA,EAAMqC,KAAKghD,WAAWrpD,OAAQgG,IACpComB,EAAK/jB,KAAKghD,WAAWrjD,GAAK8xC,GAC9BoX,EAAQ9iC,GAAMA,CAElB,KAAKpmB,EAAM,EAAGA,EAAMnC,EAAK7D,OAAQgG,IACzBw1C,EAAO33C,EAAKmC,GACZy1C,EAAQD,EAAKsS,UACJ,WAATrS,EACKyT,EAAQ1T,EAAK1D,KACdzvC,KAAKghD,WAAWl5C,KAAK9H,KAAK8jD,gBAAgB3Q,IAG9CzsB,EAAM5e,KAAKqrC,EAGnB33C,GAAOkrB,EACP9f,EAAK26C,OAAS/lD,EAAK7D,OAKvB,GAHAiP,EAAKm6C,eAAiBn6C,EAAK26C,OAC3B36C,EAAKg6C,cAAgBplD,EAAKgL,MAAM,GAChCI,EAAK07C,2BACD17C,EAAKxG,QAAQ2mD,QAAS,CAGtB,IAFAngD,EAAKqwC,MAAMpvC,OAAOugC,GAAQxhC,EAAKogD,gBAC/BxrD,EAAOoL,EAAK27C,SAAS/mD,GACZV,EAAI,EAAGA,EAAIU,EAAK7D,OAAQmD,IAC7B8L,EAAKqwC,MAAMnvC,KAAKtM,EAAKV,GAEzB8L,GAAKqwC,MAAM7vC,KAAKghC,GAAQxhC,EAAKogD,oBAE7BpgD,GAAKqwC,MAAQrwC,EAAK27C,SAAS/mD,EAE/BoL,GAAK4+C,6BACL5+C,EAAK68C,aACL78C,EAAK88C,UAAU98C,EAAKqwC,OACpBrwC,EAAK+8C,SAAS/8C,EAAKqwC,OACnBrwC,EAAK8/C,mBAETpE,yBAA0B,WACtB,GAAItiD,KAAKi3C,OAASj3C,KAAKwhD,+BACnB,IAAK,GAAI7jD,GAAM,EAAGA,EAAMqC,KAAKi3C,MAAMt/C,OAAQgG,IACnCqC,KAAKi3C,MAAMt5C,GAAKhE,SAChBqG,KAAKi3C,MAAMt5C,GAAKhE,OAASiH,KAKzC6iD,WAAY,SAAUwD,GAGlB,QAASvgC,GAAMlrB,GAAf,GAEamC,GACDgpB,EACAwsB,EAHJC,IACJ,KAASz1C,EAAM,EAAGA,EAAMnC,EAAK7D,OAAQgG,IAC7BgpB,EAAWnrB,EAAKo5C,GAAGj3C,GACnBw1C,EAAOxsB,EAAS7c,SAChBsrC,GAAkBzuB,EAASD,MAC3BysB,EAAKzsB,MAAQA,EAAMC,EAASD,QAE5BysB,EAAKsC,IAAM9uB,EAAS8uB,IAChB9F,IACIhpB,EAASw0B,QACThI,EAAKsS,UAAY,SACV9+B,EAASuS,QAChBia,EAAKsS,UAAY,YAI7BrS,EAAMtrC,KAAKqrC,EAEf,OAAOC,GAtBH,GAyBAA,GACAmR,EACK5mD,EACDw1C,EA3BRiC,EAAiBp1C,KAAKkjD,mBACtBvT,EAAQ3vC,KAAKqiD,OAAO1S,KAsBxB,IAAmC,MAA/B3vC,KAAKI,QAAQ4hD,eAAwB,CAGrC,IAFI5O,EAAQ1sB,EAAM1mB,KAAKi3C,OACnBsN,KACK5mD,EAAM,EAAGA,EAAMqC,KAAKghD,WAAWrpD,OAAQgG,IACxCw1C,EAAOnzC,KAAKghD,WAAWrjD,GAAKmM,SAChCqpC,EAAKsS,UAAY,UACjBlB,EAAUz8C,KAAKqrC,EAEnBnzC,MAAKijD,YAAY7P,EAAMj9B,OAAOouC,IAC1B0C,IACAjnD,KAAK4gD,cAAgB5gD,KAAKojD,UAAUhQ,MAIhDsQ,UAAW,SAAUloD,EAAM2yC,GACvB,GAAIvnC,GAAO5G,KAAMiP,EAAwB,IAATk/B,EAAuBA,EAAOvnC,EAAKsgD,OAAS,EAAGxvD,EAAMuX,EAAQrI,EAAKy8C,UAAU7nD,GAAM,GAAM7D,MACxHiP,GAAKi6C,QAAQ/4C,MACTmH,MAAOA,EACPvX,IAAKA,EACL8D,KAAMA,EACN2rD,WAAW,GAAInrD,OAAOC,YAE1B2K,EAAKi6C,QAAQ1iC,KAAK,SAAUmV,EAAGjiB,GAC3B,MAAOiiB,GAAErkB,MAAQoC,EAAEpC,SAG3B0wC,MAAO,SAAUyH,EAAKjB,EAAQkB,GAC1BrnD,KAAK0mD,kBACL1mD,KAAKgI,QAAQqxC,OACbr5C,KAAKgI,QAAQkxC,IACTkO,IAAKA,EACLjB,OAAQA,EACRkB,YAAaA,KAGrBd,QAAS,SAAU/qD,GACf,GAAIoL,GAAO5G,KAAMI,EAAUM,IACnB2tC,KAAMznC,EAAKynC,OACXF,KAAMvnC,EAAKunC,OACXN,KAAMjnC,EAAKinC,OACXD,SAAUhnC,EAAKgnC,WACfzvB,KAAMvX,EAAKu6C,MACXt9C,OAAQ+C,EAAKw6C,QACb3M,MAAO7tC,EAAKy6C,OACZ9N,UAAW3sC,EAAK06C,YACjB9lD,EA2BP,OA1BKoL,GAAKxG,QAAQsiD,qBACPtiD,GAAQiuC,WACRjuC,GAAQ+tC,WACR/tC,GAAQytC,WACRztC,GAAQwtC,UAEdhnC,EAAKxG,QAAQg1C,eAEPxuC,EAAKy7C,OAAO1S,OAASvvC,EAAQq0C,QACpCr0C,EAAQq0C,MAAQuB,EAAwB51C,EAAQq0C,MAAO7tC,EAAKy7C,OAAO1S,cAF5DvvC,GAAQq0C,MAId7tC,EAAKxG,QAAQuiD,gBAEP/7C,EAAKy7C,OAAO1S,OAASvvC,EAAQyD,SACpCzD,EAAQyD,OAASkyC,EAA8B31C,EAAQyD,OAAQ+C,EAAKy7C,OAAO1S,cAFpEvvC,GAAQyD,OAId+C,EAAKxG,QAAQqiD,cAEP77C,EAAKy7C,OAAO1S,OAASvvC,EAAQ+d,OACpC/d,EAAQ+d,KAAO63B,EAAwB51C,EAAQ+d,KAAMvX,EAAKy7C,OAAO1S,cAF1DvvC,GAAQ+d,KAIdvX,EAAKxG,QAAQwiD,iBAEPh8C,EAAKy7C,OAAO1S,OAASvvC,EAAQmzC,YACpCnzC,EAAQmzC,UAAYyC,EAAwB51C,EAAQmzC,UAAW3sC,EAAKy7C,OAAO1S,cAFpEvvC,GAAQmzC,UAIZnzC,GAEXomD,cAAe,SAAUpmD,EAASygB,GAC9B,GAAIja,GAAO5G,IACN4G,GAAK0gD,mBAKN1gD,EAAK2gD,UACD1mC,SAAU7a,GAAM6a,EAAUja,GAC1BxG,QAASA,IANbwG,EAAK0gD,oBAAqB,EAC1B1gD,EAAK2gD,SAAW5wD,EAChBkqB,MAQR6lC,gBAAiB,WACb,GAAI9/C,GAAO5G,IACX4G,GAAK0gD,oBAAqB,EACtB1gD,EAAK2gD,UACL3gD,EAAK4/C,cAAc5/C,EAAK2gD,SAASnnD,QAASwG,EAAK2gD,SAAS1mC,WAGhEilC,oBAAqB,SAAUF,GAC3B,GAAI5lD,KAAKqiD,OAAOxS,OAAQ,CACpB,GAAIA,GAAS7vC,KAAKqiD,OAAOxS,OAAO+V,EAChC,IAAI/V,EAOA,MANA7vC,MAAKgI,QAAQkxC,IACTkO,IAAK,KACLjB,OAAQ,cACRkB,YAAa,eACbxX,OAAQA,KAEL,EAGf,OAAO,GAEX2X,YAAa,SAAUhsD,GACnB,GAAIm0C,GAAQ3vC,KAAKqiD,OAAO1S,KACxB,UAAIA,IAASn0C,EAAK7D,WACL6D,EAAK,YAAcm0C,KAIpC4S,SAAU,SAAU/mD,GAAV,GAUEisD,GATJ7gD,EAAO5G,KAAM2vC,EAAQ/oC,EAAKy7C,OAAO1S,KAuBrC,OAtBA/oC,GAAK46C,gCAAiC,EAClChmD,YAAgBD,KAChBqL,EAAK46C,gCAAiC,EAClC56C,EAAK4gD,YAAYhsD,KACjBA,EAAK0D,KAAO0H,EAAKy7C,OAAO1S,MACxBn0C,EAAKi+C,QAAQj+C,EAAMA,MAGnBisD,EAAY7gD,EAAKgnC,aAAehnC,EAAKxG,QAAQsiD,aAAejnD,EAAsBF,GACtFC,EAAO,GAAIisD,GAAUjsD,EAAMoL,EAAKy7C,OAAO1S,OACvCn0C,EAAK7B,OAAS,WACV,MAAOiN,GAAKjN,WAGhBiN,EAAKs8C,oBACLrO,EAAer5C,EAAMm0C,GAErB/oC,EAAKogD,gBAAkBpgD,EAAKqwC,OAASrwC,EAAKqwC,gBAAiB17C,IAC3DqL,EAAKqwC,MAAMpvC,OAAOugC,GAAQxhC,EAAKogD,gBAE/BpgD,EAAKogD,eAAiBhhD,GAAMY,EAAKy+C,QAASz+C,GAEvCpL,EAAK4L,KAAKghC,GAAQxhC,EAAKogD,iBAElCU,sBAAuB,SAAUrwB,EAAQ3Q,GAAlB,GACf9f,GAAO5G,KACP6uC,EAAQx8B,SAASzL,EAAK26C,OAAQ,GAC7B9N,GAAS7sC,EAAK26C,UACf1S,EAAQx8B,SAASzL,EAAKm6C,eAAgB,KAE3B,QAAX1pB,EACAwX,GAASnoB,EAAM/uB,OACG,WAAX0/B,EACPwX,GAASnoB,EAAM/uB,OACG,eAAX0/B,GAAsC,SAAXA,GAAsBzwB,EAAKxG,QAAQsiD,aAEnD,SAAXrrB,IACPwX,EAAQjoC,EAAKm6C,eAAiB1uC,SAASzL,EAAK26C,OAAQ,KAFpD1S,EAAQjoC,EAAKm6C,eAIjBn6C,EAAK26C,OAAS1S,GAElBwW,QAAS,SAAUp9C,GAAV,GACYtK,GAAKhG,EASd8P,EATJb,EAAO5G,KAAmBq3B,EAASpvB,EAAIA,EAAEovB,OAAS,EACtD,IAAe,WAAXA,EACA,IAAK15B,EAAM,EAAGhG,EAASsQ,EAAEye,MAAM/uB,OAAQgG,EAAMhG,EAAQgG,IAC5CsK,EAAEye,MAAM/oB,GAAKw9C,OAAUlzC,EAAEye,MAAM/oB,GAAKw9C,SACrCv0C,EAAKo6C,WAAWl5C,KAAKG,EAAEye,MAAM/oB,KAIrCiJ,EAAKxG,QAAQ+jD,UAAwB,QAAX9sB,GAA+B,WAAXA,GAAkC,eAAXA,GAUrEzwB,EAAK8gD,sBAAsBrwB,EAAQpvB,EAAIA,EAAEye,UACzC9f,EAAK+8C,SAAS/8C,EAAKqwC,MAAOhvC,KAVtBR,EAAU,SAAUghB,GACA,SAAhBA,EAAK4O,SACLzwB,EAAKiB,OAAO,SAAUJ,GACtBb,EAAK8gD,sBAAsBrwB,EAAQpvB,EAAEye,SAG7C9f,EAAKzP,MAAM,SAAUsQ,GACrBb,EAAKo8C,SAMb2E,qBAAsB,SAAUnsD,EAAM4E,GAClCA,EAAUA,KACV,IAAIo/C,GAAQ,GAAI7N,GAAMn2C,GAAOu3C,EAAa3yC,EAAQmzC,UAAW1vC,EAASzD,EAAQyD,MAI9E,OAHIA,KACA27C,EAAQA,EAAM37C,OAAOA,IAElB27C,EAAMjM,UAAUR,IAE3B4Q,SAAU,SAAUnoD,EAAMyM,GACtB,GAA+BjJ,GAA3B4H,EAAO5G,KAAMI,IACbwG,GAAKxG,QAAQsiD,gBAAiB,IAC9BtiD,EAAQ+tC,KAAOvnC,EAAKsgD,MACpB9mD,EAAQiuC,KAAOznC,EAAKghD,OAAShhD,EAAKq6C,UAC9B7gD,EAAQ+tC,OAASx3C,GAAaiQ,EAAKs6C,QAAUvqD,GAAaiQ,EAAKq6C,YAActqD,IAC7EyJ,EAAQ+tC,MAAQvnC,EAAKs6C,MAAQ,GAAKt6C,EAAKq6C,YAG3Cr6C,EAAKxG,QAAQqiD,iBAAkB,IAC/BriD,EAAQ+d,KAAOvX,EAAKu6C,OAEpBv6C,EAAKxG,QAAQuiD,mBAAoB,IACjCviD,EAAQyD,OAAS+C,EAAKw6C,SAEtBx6C,EAAKxG,QAAQg1C,kBAAmB,IAChCh1C,EAAQq0C,MAAQ7tC,EAAKy6C,QAErBz6C,EAAKxG,QAAQwiD,oBAAqB,IAClCxiD,EAAQmzC,UAAY3sC,EAAK06C,WACzB16C,EAAKkgD,iBAAmBlgD,EAAK+gD,qBAAqBnsD,EAAM4E,IAE5DpB,EAAS4H,EAAKihD,cAAcrsD,EAAM4E,GAClCwG,EAAKkiB,KAAK9pB,EAAOxD,MACbwD,EAAO6vC,QAAUl4C,GAAciQ,EAAKxG,QAAQuiD,kBAC5C/7C,EAAK26C,OAASviD,EAAO6vC,OAEzB5mC,EAAIA,MACJA,EAAEye,MAAQze,EAAEye,OAAS9f,EAAKk6C,MAC1Bl6C,EAAKoB,QAAQogC,GAAQngC,IAEzB4/C,cAAe,SAAUrsD,EAAM4E,GAC3B,MAAIJ,MAAKI,QAAQ0iD,YACNnR,EAAM4N,QAAQ/jD,EAAM4E,EAASJ,KAAKI,QAAQ0iD,aAE1CnR,EAAM4N,QAAQ/jD,EAAM4E,IAGnC0nD,YAAa,SAAU1nD,GACnB,GAAIwG,GAAO5G,IA+BX,OA9BII,KAAYzJ,IACZiQ,EAAKq6C,UAAY7gD,EAAQwtC,SACzBhnC,EAAKs6C,MAAQ9gD,EAAQytC,KACrBjnC,EAAKu6C,MAAQ/gD,EAAQ+d,KACrBvX,EAAKw6C,QAAUhhD,EAAQyD,OACvB+C,EAAKy6C,OAASjhD,EAAQq0C,MACtB7tC,EAAK06C,WAAalhD,EAAQmzC,UAC1B3sC,EAAKsgD,MAAQtgD,EAAKmhD,mBAAqB3nD,EAAQ+tC,KAC/CvnC,EAAKghD,MAAQxnD,EAAQiuC,KACjBznC,EAAKsgD,QAAUvwD,IACfiQ,EAAKsgD,MAAQtgD,EAAKmhD,mBAAqBnhD,EAAKunC,OAC5C/tC,EAAQ+tC,KAAOvnC,EAAKunC,QAEpBvnC,EAAKghD,QAAUjxD,GAAaiQ,EAAKq6C,YAActqD,IAC/CiQ,EAAKghD,MAAQhhD,EAAKq6C,UAClB7gD,EAAQiuC,KAAOznC,EAAKghD,OAEpBxnD,EAAQ+d,OACRvX,EAAKu6C,MAAQ/gD,EAAQ+d,KAAOyzB,EAAcxxC,EAAQ+d,OAElD/d,EAAQyD,SACR+C,EAAKw6C,QAAUhhD,EAAQyD,OAASouC,EAAgB7xC,EAAQyD,SAExDzD,EAAQq0C,QACR7tC,EAAKy6C,OAASjhD,EAAQq0C,MAAQ3B,EAAe1yC,EAAQq0C,QAErDr0C,EAAQmzC,YACR3sC,EAAK06C,WAAalhD,EAAQmzC,UAAYX,EAAmBxyC,EAAQmzC,aAGlEnzC,GAEXo/C,MAAO,SAAUp/C,GAAV,GACCpB,GAIQgpD,EAYRvB,EAfAwB,EAASjoD,KAAKI,QAAQqiD,eAAiBziD,KAAKI,QAAQsiD,cAAgB1iD,KAAKI,QAAQuiD,iBAAmB3iD,KAAKI,QAAQg1C,gBAAkBp1C,KAAKI,QAAQwiD,gBACpJ,OAAIqF,KAAWjoD,KAAKi3C,QAAUtgD,GAAmC,IAAtBqJ,KAAKi3C,MAAMt/C,UAAkBqI,KAAKghD,WAAWrpD,QAChFqI,KAAKI,QAAQ2mD,UACTiB,EAAiB5nD,EAAQwtC,SAAW5tC,KAAK4tC,WACzCoa,EAAiB,GACjBA,EAAiBhoD,KAAK4tC,WACtBxtC,EAAQytC,KAAOztC,EAAQwtC,SAAWoa,EAClC5nD,EAAQwtC,SAAWoa,IAEnB5nD,EAAQytC,KAAO,EACf7tC,KAAKI,QAAQ2mD,SAAU,IAGxB/mD,KAAKwuC,KAAKxuC,KAAK8nD,YAAY1nD,MAElCqmD,EAAczmD,KAAKgI,QAAQmxC,IAAgBj6C,KAAM,SAChDunD,IACDzmD,KAAKgI,QAAQoxC,IACbp6C,EAASgB,KAAK6nD,cAAc7nD,KAAKi3C,MAAOj3C,KAAK8nD,YAAY1nD,IACpDJ,KAAKI,QAAQuiD,kBAEV3iD,KAAKuhD,OADLviD,EAAO6vC,QAAUl4C,EACHqI,EAAO6vC,MAEP7uC,KAAKi3C,MAAMt/C,QAGjCqI,KAAK8mD,iBAAmB9mD,KAAK2nD,qBAAqB3nD,KAAKi3C,MAAO72C,GAC9DJ,KAAK8oB,KAAK9pB,EAAOxD,MACjBwE,KAAKgI,QAAQqxC,IAAcn6C,KAAM,SACjCc,KAAKgI,QAAQogC,IAAU1hB,MAAO1nB,EAAOxD,QAElC/E,EAAE+qC,WAAWM,QAAQ2kB,GAAatlD,YAE7C+mD,MAAO,SAAUrnC,GAAV,GACCja,GAAO5G,KACPiE,EAAK,SAAUwiD,GACXA,KAAgB,GAAQvqD,GAAW2kB,IACnCA,EAAS1Y,KAAKvB,GAGtB,OAAO5G,MAAKmoD,SAAS1mB,KAAKx9B,IAE9BkkD,OAAQ,SAAU/nD,GACd,GAAIwG,GAAO5G,IACX,OAAO4G,GAAK44C,MAAM9+C,OACdmtC,KAAMjnC,EAAKinC,OACXD,SAAUhnC,EAAKgnC,WACfzvB,KAAMvX,EAAKuX,OACXta,OAAQ+C,EAAK/C,SACb4wC,MAAO7tC,EAAK6tC,QACZlB,UAAW3sC,EAAK2sC,aACjBnzC,KAEPgoD,KAAM,SAAUhoD,GACZ,GAAIwG,GAAO5G,KAAM6tC,EAAOjnC,EAAKinC,OAAQgB,EAAQjoC,EAAKioC,OAElD,IADAzuC,EAAUA,MACLytC,KAAQgB,GAAShB,EAAO,EAAIjnC,EAAKyhD,cAOtC,MAJAzhD,GAAKsgD,MAAQtgD,EAAKmhD,mBAAqBla,EAAOjnC,EAAKynC,OACnDR,GAAQ,EACRztC,EAAQytC,KAAOA,EACfjnC,EAAKuhD,OAAO/nD,GACLytC,GAEXpD,KAAM,SAAUrqC,GACZ,GAAIwG,GAAO5G,KAAM6tC,EAAOjnC,EAAKinC,MAE7B,IADAztC,EAAUA,MACLytC,GAAiB,IAATA,EAOb,MAJAjnC,GAAKsgD,MAAQtgD,EAAKmhD,mBAAqBnhD,EAAKsgD,MAAQtgD,EAAKynC,OACzDR,GAAQ,EACRztC,EAAQytC,KAAOA,EACfjnC,EAAKuhD,OAAO/nD,GACLytC,GAEXA,KAAM,SAAUpO,GACZ,GAAiB0O,GAAbvnC,EAAO5G,IACX,OAAIy/B,KAAQ9oC,GACR8oC,EAAMjnC,GAAKC,IAAID,GAAKwZ,IAAIxZ,GAAKC,IAAIgnC,EAAK,GAAI74B,EAAKyhD,cAAe,GAC9DzhD,EAAKuhD,QAASta,KAAMpO,IACpB,IAEJ0O,EAAOvnC,EAAKunC,OACLA,IAASx3C,EAAY6B,GAAKiX,OAAO0+B,GAAQ,IAAMvnC,EAAKynC,QAAU,IAAM,EAAI13C,IAEnFi3C,SAAU,SAAUnO,GAChB,GAAI74B,GAAO5G,IACX,OAAIy/B,KAAQ9oC,GACRiQ,EAAKuhD,QACDva,SAAUnO,EACVoO,KAAM,IAEV,GAEGjnC,EAAKynC,QAEhBlwB,KAAM,SAAUshB,GACZ,GAAI74B,GAAO5G,IACX,OAAIy/B,KAAQ9oC,GACRiQ,EAAKuhD,QAAShqC,KAAMshB,IACpB,GAEG74B,EAAKu6C,OAEhBt9C,OAAQ,SAAU47B,GACd,GAAI74B,GAAO5G,IACX,OAAIy/B,KAAQ9oC,EACDiQ,EAAKw6C,SAEhBx6C,EAAKoB,QAAQ,SACbpB,EAAKuhD,QACDtkD,OAAQ47B,EACRoO,KAAM,IAHVjnC,IAMJ6tC,MAAO,SAAUhV,GACb,GAAI74B,GAAO5G,IACX,OAAIy/B,KAAQ9oC,GACRiQ,EAAKuhD,QAAS1T,MAAOhV,IACrB,GAEG74B,EAAKy6C,QAEhBxS,MAAO,WACH,MAAOx8B,UAASrS,KAAKuhD,QAAU,EAAG,KAEtChO,UAAW,SAAU9T,GACjB,GAAI74B,GAAO5G,IACX,OAAIy/B,KAAQ9oC,GACRiQ,EAAKuhD,QAAS5U,UAAW9T,IACzB,GAEG74B,EAAK06C,YAEhBvO,WAAY,WACR,GAAI/zC,GAASgB,KAAK8mD,gBAIlB,OAHIz/B,IAAcroB,KACdA,EAASgB,KAAKsoD,iBAAiBtoD,KAAKuzC,cAEjCv0C,GAEXspD,iBAAkB,SAAUvV,GAAV,GAGNQ,GAIK51C,EANTqB,IACJ,KAAKqoB,GAAc0rB,GAKf,IAJIQ,KACCxtC,GAAQgtC,KACTA,GAAcA,IAETp1C,EAAM,EAAGA,EAAMo1C,EAAWp7C,OAAQgG,IACvC41C,EAAUR,EAAWp1C,GAAK41C,WAAa,EACvCv0C,EAAO+zC,EAAWp1C,GAAKugB,OAASq1B,CAGxC,OAAOv0C,IAEX+kD,kBAAmB,SAAUpU,GACzB,GAA2Bh2C,GAAQ86C,EAAO92C,EAAKhG,EAA3C6oD,EAASxgD,KAAKy0C,OAClB,KAAK92C,EAAM6iD,EAAO7oD,OAAS,EAAGA,EAAS,EAAGgG,GAAOhG,EAAQgG,IACrD82C,EAAQ+L,EAAO7iD,GACfhE,GACIiE,MAAO+xC,EAAMhsB,IAAI8wB,EAAMv2B,OACvBA,MAAOu2B,EAAMv2B,MACbwI,MAAO/sB,GAAUA,IAAWg2C,GAC5BwE,eAAgBx6C,EAChBo5C,WAAY/yC,KAAKsoD,iBAAiB7T,EAAM1B,YAGhD,OAAOp5C,IAEX0uD,WAAY,WACR,GAAIzhD,GAAO5G,KAAM4tC,EAAWhnC,EAAKgnC,YAAchnC,EAAKioC,OACpD,OAAOr2C,IAAK+vD,MAAM3hD,EAAKioC,SAAW,GAAKjB,IAE3C4a,QAAS,SAAUra,EAAME,GACrB,GAAIznC,GAAO5G,KAAMtI,EAAMc,GAAKwZ,IAAIm8B,EAAOE,EAAMznC,EAAKioC,QAClD,QAAKjoC,EAAKxG,QAAQsiD,cAAgB97C,EAAKqwC,MAAMt/C,OAAS,GAG/CiP,EAAK6hD,WAAWta,EAAMz2C,GAAKC,OAAS,GAE/C+wD,UAAW,WACP,GAAIzT,GAASj1C,KAAK6gD,OAClB,OAAO5L,GAAOA,EAAOt9C,OAAS,KAC1BsX,MAAO,EACPvX,IAAK,EACL8D,UAGRmtD,aAAc,WACV,GAAI1T,GAASj1C,KAAK6gD,OAClB,OAAO5L,GAAOt9C,QAAUs9C,EAAO,GAAGz5C,KAAK7D,QAAUs9C,EAAO,GAAGz5C,KAAK,GAAGi6C,KAEvEmT,yBAA0B,WACtB5oD,KAAK6oD,yBAA0B,GAEnCC,WAAY,WACR,OAAO,GAAI9sD,OAAOC,WAEtB0iD,MAAO,SAAUxQ,EAAME,EAAMxtB,GAAtB,GAICja,GAAamiD,EAAwDhrD,EAAgDvC,EAOjHwtD,EACAC,EACAC,EACAnW,CARR,IALA/yC,KAAKmpD,yBAA2BnpD,KAAK8oD,aACrC9oD,KAAK6oD,yBAA0B,EAC/B1a,EAAO31C,GAAKwZ,IAAIm8B,GAAQ,EAAGnuC,KAAK6uC,SAC5BjoC,EAAO5G,KAAM+oD,EAAWvwD,GAAKC,IAAID,GAAKgC,MAAM2zC,EAAOE,GAAO,GAAKA,EAAMtwC,EAAOvF,GAAKwZ,IAAI+2C,EAAW1a,EAAMznC,EAAKioC,SAC/GrzC,EAAOoL,EAAK6hD,WAAWta,EAAM31C,GAAKwZ,IAAIm8B,EAAOE,EAAMznC,EAAKioC,UACpDrzC,EAAK7D,OAAQ,CACbiP,EAAK2gD,SAAW5wD,EAChBiQ,EAAKsgD,MAAQ/Y,EAAOvnC,EAAKunC,OAAS31C,GAAKwZ,IAAIjU,GAAO6I,EAAKyhD,aAAe,GAAKzhD,EAAKynC,QAAU0a,EAC1FniD,EAAKmhD,mBAAqB5Z,EAC1BvnC,EAAKghD,MAAQvZ,EACT2a,EAASpiD,EAAKxG,QAAQsiD,aACtBuG,EAAUriD,EAAKxG,QAAQqiD,cACvByG,EAAYtiD,EAAKxG,QAAQuiD,gBACzB5P,EAAansC,EAAKxG,QAAQwiD,gBAC9B,KACIh8C,EAAKxG,QAAQsiD,cAAe,EACvB97C,EAAKs8C,oBAAwBt8C,EAAK6tC,SAAW7tC,EAAK6tC,QAAQ98C,SAC3DiP,EAAKxG,QAAQqiD,eAAgB,GAEjC77C,EAAKxG,QAAQuiD,iBAAkB,EAC/B/7C,EAAKxG,QAAQsiD,cAAe,EAC5B97C,EAAKxG,QAAQwiD,kBAAmB,EAC5BoG,IACApiD,EAAK07C,2BACL17C,EAAKqwC,MAAQz7C,EAAOoL,EAAK27C,SAAS/mD,IAEtCoL,EAAK+8C,SAASnoD,GAChB,QACEoL,EAAKxG,QAAQsiD,aAAesG,EAC5BpiD,EAAKxG,QAAQqiD,cAAgBwG,EAC7BriD,EAAKxG,QAAQuiD,gBAAkBuG,EAC/BtiD,EAAKxG,QAAQwiD,iBAAmB7P,EAKpC,MAHI72C,IAAW2kB,IACXA,IAEJ,EAEAwtB,IAAS13C,IACJiQ,EAAKwiD,aAAaL,EAAUhrD,GAUtBgrD,EAAW5a,GAClBvnC,EAAKyiD,SAAStrD,EAAMswC,EAAM,WACtBznC,EAAK+3C,MAAMxQ,EAAME,EAAMxtB,KAX3Bja,EAAKyiD,SAASN,EAAU1a,EAAM,WACtBF,EAAO4a,GAAYhrD,EAAO6I,EAAKioC,UAAYjoC,EAAKwiD,aAAarrD,EAAMvF,GAAKwZ,IAAIjU,EAAOswC,EAAMznC,EAAKioC,UAC9FjoC,EAAKyiD,SAAStrD,EAAMswC,EAAM,WACtBznC,EAAK+3C,MAAMxQ,EAAME,EAAMxtB,KAG3Bja,EAAK+3C,MAAMxQ,EAAME,EAAMxtB,OAU3C4nC,WAAY,SAAUx5C,EAAOvX,GAAjB,GACgCinD,GAAkB2K,EAASC,EAAShU,EAAYC,EAAUgU,EAAWC,EAAUC,EAA4KC,EAAUh2C,EAAOhc,EAexRwmB,EAfxBvX,EAAO5G,KAAMi1C,EAASruC,EAAKi6C,QAAgBrlD,KAAmF4E,EAAUwG,EAAKxG,QAAS6nD,EAAS7nD,EAAQqiD,eAAiBriD,EAAQsiD,cAAgBtiD,EAAQuiD,iBAAmBviD,EAAQg1C,gBAAkBh1C,EAAQwiD,gBACjR,KAAK0G,EAAU,EAAG3xD,EAASs9C,EAAOt9C,OAAQ2xD,EAAU3xD,EAAQ2xD,IAExD,GADA3K,EAAQ1J,EAAOqU,GACXr6C,GAAS0vC,EAAM1vC,OAASA,GAAS0vC,EAAMjnD,IAAK,CAE5C,IADAic,EAAQ,EACH41C,EAAUD,EAASC,EAAU5xD,EAAQ4xD,IAGtC,GAFA5K,EAAQ1J,EAAOsU,GACfI,EAAW/iD,EAAKy8C,UAAU1E,EAAMnjD,MAAM,GAClCmuD,EAAShyD,QAAUsX,EAAQ0E,GAASgrC,EAAM1vC,QAC1Cu6C,EAAY7K,EAAMnjD,KAClBiuD,EAAW9K,EAAMjnD,IACZuwD,IACG7nD,EAAQ0iD,YACR4G,EAAY9iD,EAAKihD,cAAclJ,EAAMnjD,MAAQqI,OAAQ+C,EAAK/C,YAEtDsa,EAAO20B,EAAelsC,EAAK6tC,aAAet+B,OAAOy7B,EAAchrC,EAAKuX,aACxEurC,EAAY9iD,EAAKihD,cAAclJ,EAAMnjD,MACjC2iB,KAAMA,EACNta,OAAQ+C,EAAK/C,YAGrB8lD,EAAWH,EAAYE,EAAUluD,KAC7BkuD,EAAU7a,QAAUl4C,IACpB8yD,EAAWC,EAAU7a,QAG7B0G,EAAa,EACTtmC,EAAQ0E,EAAQgrC,EAAM1vC,QACtBsmC,EAAatmC,EAAQ0E,EAAQgrC,EAAM1vC,OAEvCumC,EAAWmU,EAAShyD,OAChB8xD,EAAW/xD,IACX89C,GAAuBiU,EAAW/xD,GAEtCic,GAAS6hC,EAAWD,EACpB/5C,EAAOoL,EAAKgjD,aAAapuD,EAAMguD,EAAWjU,EAAYC,GAClD99C,GAAOinD,EAAMjnD,KAAOic,GAASjc,EAAMuX,GACnC,MAAOzT,EAInB,OAGR,UAEJouD,aAAc,SAAUpuD,EAAMmjD,EAAOxQ,EAAME,GACvC,GAAIruC,KAAKkjD,mBAAoB,CACzB,GAA2B2G,GAAvBhlB,EAAO8Z,EAAM70C,QAKjB,OAJItO,GAAK7D,SACLkyD,EAAYruD,EAAKA,EAAK7D,OAAS,IAEnC48C,EAAYsV,EAAWhlB,EAAMsJ,EAAME,GAC5B7yC,EAAK2a,OAAO0uB,GAEvB,MAAOrpC,GAAK2a,OAAOwoC,EAAMn4C,MAAM2nC,EAAME,KAEzCF,KAAM,WACF,GAAIvnC,GAAO5G,IACX,OAAI4G,GAAKsgD,QAAUvwD,EACRiQ,EAAKs6C,QAAUvqD,GAAaiQ,EAAKs6C,MAAQ,IAAMt6C,EAAKynC,QAAU,GAAK13C,EAEvEiQ,EAAKsgD,OAEhBtC,kBAAmB,WACf,MAAO5kD,MAAK+nD,oBAAsB,GAEtC1Z,KAAM,WACF,MAAOruC,MAAK4nD,OAAS5nD,KAAKihD,WAE9B6I,wBAAyB,SAAU3b,EAAMpwC,EAAM8iB,EAAU4E,GAAhC,GACjB7e,GAAO5G,KACPmnD,EAAYvgD,EAAKkiD,YACrB,OAAO,UAAUttD,GACb,GAKOmC,GAAKhG,EAAQktC,EALhB2f,GAAQ,EAAO7F,GACX1vC,MAAOk/B,EACPz2C,IAAKqG,EACLvC,QACA2rD,UAAWvgD,EAAKkiD,aASxB,IAPAliD,EAAK8/C,kBACL9/C,EAAKoB,QAAQqxC,IACTuM,SAAUpqD,EACV0D,KAAM,SAEV1D,EAAOoL,EAAKy7C,OAAOzS,MAAMp0C,GACzBqpC,EAAOj+B,EAAKw8C,UAAU5nD,GAClBqpC,EAAKltC,OAAQ,CACb,IAAKgG,EAAM,EAAGhG,EAASiP,EAAKi6C,QAAQlpD,OAAQgG,EAAMhG,EAAQgG,IACtD,GAAIiJ,EAAKi6C,QAAQljD,GAAKsR,QAAUk/B,EAAM,CAClCqW,GAAQ,EACR7F,EAAQ/3C,EAAKi6C,QAAQljD,EACrB,OAGH6mD,GACD59C,EAAKi6C,QAAQ/4C,KAAK62C,GAG1BA,EAAMnjD,KAAOoL,EAAK27C,SAAS1d,GAC3B8Z,EAAMjnD,IAAMinD,EAAM1vC,MAAQrI,EAAKy8C,UAAU1E,EAAMnjD,MAAM,GAAM7D,OAC3DiP,EAAKi6C,QAAQ1iC,KAAK,SAAUmV,EAAGjiB,GAC3B,MAAOiiB,GAAErkB,MAAQoC,EAAEpC,QAEvBrI,EAAK26C,OAAS36C,EAAKy7C,OAAOxT,MAAMrzC,IAC5BiqB,GAAU0hC,GAAavgD,EAAKuiD,2BAA6BviD,EAAKiiD,2BAC1DhoC,GAAYgkB,EAAKltC,OACjBkpB,IAEAja,EAAKoB,QAAQogC,UAK7BihB,SAAU,SAAUlb,EAAME,EAAMxtB,GAC5B,GAAIja,GAAO5G,KAAMjC,EAAOvF,GAAKwZ,IAAIm8B,EAAOE,EAAMznC,EAAKioC,SAAUzuC,GACrDiuC,KAAMA,EACNF,KAAMA,EACNN,KAAMM,EAAOE,EAAO,EACpBT,SAAUS,EACVlwB,KAAMvX,EAAKu6C,MACXt9C,OAAQ+C,EAAKw6C,QACb3M,MAAO7tC,EAAKy6C,OACZ9N,UAAW3sC,EAAK06C,WAEnB16C,GAAKwiD,aAAajb,EAAMpwC,GAkBlB8iB,GACPA,KAlBAkK,aAAankB,EAAKmjD,UAClBnjD,EAAKmjD,SAAWlgC,WAAW,WACvBjjB,EAAK4/C,cAAcpmD,EAAS,WACnBwG,EAAKoB,QAAQmxC,IAAgBj6C,KAAM,SAUpC0H,EAAK8/C,kBATL9/C,EAAK66C,UAAUjT,MACXhzC,KAAMoL,EAAK2/C,QAAQnmD,GACnBs/C,QAAS94C,EAAKkjD,wBAAwB3b,EAAMpwC,EAAM8iB,GAClD8+B,MAAO,WACH,GAAIl3B,GAAOjiB,GAAM2B,KAAKpN,UACtB6L,GAAK+4C,MAAM74C,MAAMF,EAAM6hB,SAOxC,OAKXuhC,kBAAmB,SAAU7b,EAAME,EAAMxtB,GACrC,GAAIja,GAAO5G,KAAMjC,EAAOvF,GAAKwZ,IAAIm8B,EAAOE,EAAMznC,EAAKioC,SAAUzuC,GACrDiuC,KAAMA,EACNF,KAAMA,EACNN,KAAMM,EAAOE,EAAO,EACpBT,SAAUS,EACVlwB,KAAMvX,EAAKu6C,MACXt9C,OAAQ+C,EAAKw6C,QACb3M,MAAO7tC,EAAKy6C,OACZ9N,UAAW3sC,EAAK06C,WAEnB16C,GAAKwiD,aAAajb,EAAMpwC,GAOlB8iB,GACPA,IAPKja,EAAKoB,QAAQmxC,IAAgBj6C,KAAM,UACpC0H,EAAK66C,UAAUjT,MACXhzC,KAAMoL,EAAK2/C,QAAQnmD,GACnBs/C,QAAS94C,EAAKkjD,wBAAwB3b,EAAMpwC,EAAM8iB,GAAU,MAO5EuoC,aAAc,SAAUn6C,EAAOvX,GAC3B,GAAwCiG,GAAKhG,EAAzCiP,EAAO5G,KAAMi1C,EAASruC,EAAKi6C,OAC/B,KAAKljD,EAAM,EAAGhG,EAASs9C,EAAOt9C,OAAQgG,EAAMhG,EAAQgG,IAChD,GAAIs3C,EAAOt3C,GAAKsR,OAASA,GAASgmC,EAAOt3C,GAAKjG,KAAOA,EACjD,OAAO,CAGf,QAAO,GAEXmtD,uBAAwB,SAAUlV,GAAV,GAEhB3wC,GAAQwlD,EAAO7F,EACVhhD,EAAShG,EAFdiP,EAAO5G,IAEX,KAASrC,EAAM,EAAGhG,EAASqI,KAAK6gD,QAAQlpD,OAAQgG,EAAMhG,IAClDgnD,EAAQ3+C,KAAK6gD,QAAQljD,GACrBqC,KAAKykD,UAAU9F,EAAMnjD,KAAM,SAAUkrB,GAE7B1nB,EADA4H,EAAKxG,QAAQkjD,YAAc18C,EAAKxG,QAAQsiD,aAC/BpN,EAAY5uB,EAAOipB,EAAO/oC,EAAKg+C,oBAAqBh+C,EAAKynC,QAEzDiH,EAAY5uB,EAAOipB,GAE5B3wC,IACAwlD,GAAQ,MAGZA,GAZsD7mD,KAgB9DiJ,EAAKqjD,uBAETjG,oBAAqB,SAAU7xC,EAAOw9B,GAAjB,GAIbgP,GACA7jD,EAJA8L,EAAO5G,KACPi1C,EAASruC,EAAKi6C,YACdqJ,EAAejV,EAAOt9C,MAG1B,KAAKmD,EAAI,EAAGA,EAAIovD,EAAcpvD,IAE1B,GADA6jD,EAAQ1J,EAAOn6C,GACX6jD,EAAM1vC,OAASkD,GAASwsC,EAAMjnD,KAAOya,EAAO,CACvCvL,EAAK48C,UAAU7T,EAAM8F,IAAKkJ,EAAMnjD,QAC7BoL,EAAKs8C,mBACLvE,EAAMnjD,KAAK4M,OAAO+J,EAAO,EAAGvL,EAAKm9C,kBAAkBpU,IAEnDgP,EAAMnjD,KAAK4M,OAAO+J,EAAO,EAAGw9B,GAGpC,OAGR/oC,EAAKqjD,uBAETA,oBAAqB,WAAA,GAObtL,GACA7jD,EAPA8L,EAAO5G,KACPi1C,EAASruC,EAAKi6C,YACdqJ,EAAejV,EAAOt9C,OACtBwyD,GAAgB,EAChBC,EAAiB,EACjBC,EAAmB,CAGvB,KAAKvvD,EAAI,EAAGA,EAAIovD,EAAcpvD,IAC1B6jD,EAAQ1J,EAAOn6C;AACfuvD,EAAmBzjD,EAAKy8C,UAAU1E,EAAMnjD,MAAM,GAAM7D,OAASa,GAAKqG,IAAI8/C,EAAMjnD,IAAMinD,EAAM1vC,OACnFk7C,GAAsC,IAArBE,EAMlBF,IACAxL,EAAM1vC,OAASm7C,EACfzL,EAAMjnD,KAAO0yD,IAPbD,GAAgB,EAChBC,EAAiBC,EACjB1L,EAAMjnD,KAAO0yD,MAUzB7R,MACJA,GAAUtJ,OAAS,SAAU7uC,EAAS5E,EAAMspB,GACxC,GAAI28B,GAAW6I,EAAmBlqD,EAAQqhD,UAAYhrD,EAAEiK,UAAWN,EAAQqhD,WAAa,IAwBxF,OAvBI6I,IACAA,EAAiB9b,WAAc8b,GAAiB9b,OAAShuC,IAAW6iB,IAAKinC,EAAiB9b,MAAS8b,EAAiB9b,KAC/F,SAAjBpuC,EAAQlB,OACRorD,EAAiBxlC,WAAaA,GAE9B1kB,EAAQlB,OACRjH,GAAMuD,KAAKszC,WAAa72C,GAAMuD,KAAKszC,eACnC72C,GAAMuD,KAAKkzC,QAAUz2C,GAAMuD,KAAKkzC,YAC3Bz2C,GAAMuD,KAAKszC,WAAW1uC,EAAQlB,MAEvBqwC,GAAct3C,GAAMuD,KAAKszC,WAAW1uC,EAAQlB,OAGpDorD,EAAmB5pD,IAAO,KAAUzI,GAAMuD,KAAKszC,WAAW1uC,EAAQlB,MAAOorD,GAFzE7I,EAAY,GAAIxpD,IAAMuD,KAAKszC,WAAW1uC,EAAQlB,MAAMwB,GAAO4pD,GAAoB9uD,KAAMA,KAFrFvD,GAAMwsB,aAAa,sCAAyCrkB,EAAQlB,KAAO,8FAAgG,QAM/KkB,EAAQ8/C,OAASx/C,IAAO,KAAUzI,GAAMuD,KAAKkzC,QAAQtuC,EAAQlB,MAAOkB,EAAQ8/C,SAE3EuB,IACDA,EAAYvlD,GAAWouD,EAAiB9b,MAAQ8b,EAAmB,GAAIlS,IAAgBkS,KAG3F7I,EAAY,GAAItJ,IAAiB38C,KAAM4E,EAAQ5E,WAE5CimD,GAEX/lD,GAAWuzC,OAAS,SAAU7uC,IACtB2F,GAAQ3F,IAAYA,YAAmB7E,OACvC6E,GAAY5E,KAAM4E,GAEtB,IAA0IzC,GAAKhG,EAAoBumB,EAA/J4G,EAAa1kB,MAAe5E,EAAOspB,EAAWtpB,KAAMy0C,EAASnrB,EAAWmrB,OAAQ/4B,EAAQ4N,EAAW5N,MAAOie,EAASrQ,EAAWqQ,OAAqBwa,IAWvJ,IAVKn0C,IAAQy0C,GAAWnrB,EAAW28B,YAC3BvqC,EACA1b,EAAO+6C,EAAWr/B,EAAO+4B,GAClB9a,IACP35B,EAAOy6C,EAAY9gB,EAAQ8a,GACvBnrB,EAAW2vB,QAAU99C,GAAa6E,EAAK,IAAMA,EAAK,GAAG46C,WAAaz/C,IAClEmuB,EAAW2vB,MAAQ,cAI3Bx8C,GAAMuD,KAAKw0C,OAASC,KAAYnrB,EAAWo7B,SAAWp7B,EAAWo7B,OAAOvQ,OAAQ,CAChF,IAAKhyC,EAAM,EAAGhG,EAASs4C,EAAOt4C,OAAQgG,EAAMhG,EAAQgG,IAChDugB,EAAQ+xB,EAAOtyC,GACXugB,EAAMhf,OACNywC,EAAMzxB,EAAMA,OAASA,EAGxBmJ,IAAcsoB,KACf7qB,EAAWo7B,OAASx/C,IAAO,EAAMokB,EAAWo7B,QAAUvQ,OAASM,OAAQN,MAQ/E,MALA7qB,GAAWtpB,KAAOA,EAClB25B,EAAS,KACTrQ,EAAWqQ,OAAS,KACpBje,EAAQ,KACR4N,EAAW5N,MAAQ,KACZ4N,YAAsBppB,IAAaopB,EAAa,GAAIppB,IAAWopB,IAyDtE0zB,GAAOxI,EAAMx5C,QACbi5C,QAAS,KACT9uC,KAAM,SAAU/C,GAAV,GA2BM2sD,GA1BJ3jD,EAAO5G,KAAM43C,EAAchxC,EAAKgxC,aAAeh6C,GAASA,EAAMg6C,YAAa4S,EAAgB,QAASC,IACxGxyD,IAAMuD,KAAKw0C,MAAM/rC,GAAGtD,KAAKwH,KAAKvB,EAAMhJ,SACzBgJ,GAAKjM,WAAa6F,KACzBgqD,EAAgB5jD,EAAKjM,UAEzB8vD,GACIvK,QACI1kD,KAAMgvD,EACN7a,OACIiI,YAAaA,EACb7zB,GAAInd,EAAK6oC,QACTQ,OAAQrpC,EAAKqpC,gBAIdrpC,GAAKjM,WAAa6F,IACzBE,GAAO+pD,EAAiB7jD,EAAKjM,UAEjC8vD,EAAgBjvD,KAAOoC,EAClBg6C,IACDA,EAAc6S,EAAgBvK,OAAO1kD,YAE9Bo8C,KAAgBp3C,KACvBo3C,EAAc3/C,GAAMurB,OAAOo0B,IAE3B17C,GAAW07C,KACP2S,EAAoB3S,EAAYzvC,KAAKvB,EAAMA,GAE3CA,EAAKgxC,cADL2S,GAAkD,IAA7BA,EAAkB5yD,WAGlB4yD,GAG7B3jD,EAAK8jD,iBAAmBD,EACpB7jD,EAAKgxC,aACLhxC,EAAK+jD,gBAET/jD,EAAK+wC,WAAa/5C,IAASA,EAAM+5C,UAErCgT,cAAe,WAAA,GAEPhwD,GAAU8mD,EAAWvS,EADrBtoC,EAAO5G,IAEL4G,GAAKjM,mBAAoBgB,MAC3BhB,EAAWiM,EAAKjM,SAAW,GAAIgB,IAAuBiL,EAAK8jD,kBAC3DjJ,EAAY9mD,EAAS8mD,UACrBvS,EAAeuS,EAAUvS,aACzBuS,EAAUvS,aAAe,SAAU1zC,EAAM0D,GAKrC,MAJA1D,GAAKoL,EAAK6oC,SAAW,MAAQ7oC,EAAKmd,GAC9BmrB,IACA1zC,EAAO0zC,EAAa1zC,EAAM0D,IAEvB1D,GAEXb,EAAShB,OAAS,WACd,MAAOiN,IAEXjM,EAASyM,KAAKghC,GAAQ,SAAUngC,GAC5BA,EAAE+pB,KAAO/pB,EAAE+pB,MAAQprB,EACnBA,EAAKoB,QAAQogC,GAAQngC,KAEzBtN,EAASyM,KAAK8xC,GAAO,SAAUjxC,GAC3B,GAAIovC,GAAazwC,EAAKjN,QAClB09C,KACApvC,EAAE+pB,KAAO/pB,EAAE+pB,MAAQprB,EACnBywC,EAAWrvC,QAAQkxC,GAAOjxC,MAGlCrB,EAAKgkD,yBAGbpmB,OAAQ,SAAUmL,GACd3vC,KAAK2qD,gBACL3qD,KAAK6qD,QAAO,GACZ7qD,KAAKrF,SAAS2G,IAAIquC,IAEtBiI,aAAa,EACbkT,MAAO,WAEH,IADA,GAAInsC,GAAa3e,KAAK2e,aAAcmsC,EAAQ,EACrCnsC,GAAcA,EAAWA,YAC5BmsC,IACAnsC,EAAaA,EAAWA,WAAaA,EAAWA,aAAe,IAEnE,OAAOmsC,IAEXF,qBAAsB,WAClB,GAAIlZ,GAAY1xC,KAAK0qD,iBAAiBxK,OAAO1kD,IAC7CwE,MAAK0xC,GAAa,SAAW1xC,KAAKrF,SAASa,QAE/CuvD,gBAAiB,WACb/qD,KAAK23C,SAAU,EACf33C,KAAK4qD,wBAETI,KAAM,WAAA,GAGErwD,GAAUwG,EAFVf,KACAsoB,EAAS,QAsBb,OApBI1oB,MAAK43C,aACL53C,KAAK2qD,gBACLhwD,EAAWqF,KAAKrF,SAChByF,EAAQJ,KAAKyvC,SAAW,MAAQzvC,KAAK+jB,GAChC/jB,KAAK23C,UACNh9C,EAASs8C,MAAQtgD,EACjB+xB,EAAS,QAEb/tB,EAAS4M,IAAI6gC,GAAQpiC,GAAMhG,KAAK+qD,gBAAiB/qD,OAC7CA,KAAKirD,eACL7qD,EAAQyD,QACJqa,MAAO,eACPwuB,SAAU,KACV9uC,OAAO,IAGfuD,EAAUxG,EAAS+tB,GAAQtoB,IAE3BJ,KAAK6qD,QAAO,GAET1pD,GAAW1K,EAAE+qC,WAAWM,UAAU3gC,WAE7Cwd,WAAY,WACR,GAAItL,GAAQrT,KAAKrG,QACjB,OAAO0Z,GAAM1Z,UAEjBkxD,OAAQ,SAAUjtD,GACd,MAAIA,KAAUjH,EAGHqJ,KAAK23C,SAFZ33C,KAAK23C,QAAU/5C,EAAfoC,IAKRo6C,gBAAiB,SAAUl8B,GACvB,MAAO8xB,GAAM/rC,GAAGm2C,gBAAgBjyC,KAAKnI,KAAMke,IAAoB,aAAVA,GAAkC,YAAVA,GAAiC,gBAAVA,GAAqC,qBAAVA,KAYnIviB,GAAyBD,GAAWgF,QACpCC,KAAM,SAAUP,GACZ,GAAI4xB,GAAOwmB,GAAKhiD,QAASmE,SAAUyF,GAC/BA,GAAQyD,SAAWzD,EAAQuiD,kBAC3B3iD,KAAKkrD,oBAAsB9qD,EAAQyD,OACnCzD,EAAQyD,OAAS,MAErBnI,GAAWuI,GAAGtD,KAAKwH,KAAKnI,KAAMU,IAAO,MACjCw/C,QACInQ,UAAW/d,EACX2d,MAAO3d,IAEZ5xB,IACHJ,KAAKk3C,yBAETA,sBAAuB,WACnB,GAAItwC,GAAO5G,IACX4G,GAAKqwC,MAAM7vC,KAAK8xC,GAAO,SAAUjxC,GAC7BrB,EAAKoB,QAAQkxC,GAAOjxC,MAG5BumC,KAAM,SAAUhzC,GACZ,GAAIwD,GAAStD,GAAWuI,GAAGuqC,KAAKrmC,KAAKnI,KAAMxE,EAU3C,OATIwE,MAAKkrD,sBACDlrD,KAAKi3C,OAASj3C,KAAKi3C,MAAMt/C,OAAS,EAClCqI,KAAK6D,OAAO7D,KAAKkrD,sBAEjBlrD,KAAKI,QAAQyD,OAAS7D,KAAKkrD,oBAC3BlrD,KAAKohD,QAAUnP,EAAgBjyC,KAAKI,QAAQyD,QAC5C7D,KAAKkrD,oBAAsB,OAG5BlsD,GAEXqpB,OAAQ,SAAU2J,GACd,GAAuDhzB,GAAnD2f,EAAaqT,EAAKrT,aAAcmG,EAAa9kB,IAQjD,OAPI2e,IAAcA,EAAWgsC,gBACzB7lC,EAAanG,EAAWhkB,UAE5BqE,EAAStD,GAAWuI,GAAGokB,OAAOlgB,KAAK2c,EAAYkN,GAC3CrT,IAAemG,EAAWtpB,OAAO7D,SACjCgnB,EAAWi5B,aAAc,GAEtB54C,GAEX0gD,QAAS1I,EAAW,WACpBx7C,KAAMw7C,EAAW,QACjB6M,OAAQ,SAAU1xC,EAAOw9B,GACrB,GAAIhxB,GAAa3e,KAAKrG,QAKtB,OAJIglB,IAAcA,EAAWgsC,gBACzBhsC,EAAWi5B,aAAc,EACzBj5B,EAAWgsC,iBAERjvD,GAAWuI,GAAG4/C,OAAO17C,KAAKnI,KAAMmS,EAAOw9B,IAElD9rC,OAAQ,SAAU47B,GACd,MAAIA,KAAQ9oC,EACDqJ,KAAKohD,UAEXphD,KAAKI,QAAQuiD,iBAAmB3iD,KAAKmrD,uBAAuB1rB,KAC7DA,GACIkN,MAAO,KACPjpC,SACI+7B,GAEIvhB,MAAO,eACPwuB,SAAU,SACV9uC,OAAO,MAKvBoC,KAAKgI,QAAQ,SACbhI,KAAKmoD,QACDtkD,OAAQ47B,EACRoO,KAAM,IAhBV,IAmBJsd,uBAAwB,SAAUtY,GAAV,GAChBkM,GACAC,EACA/O,EACAiI,EACAr0C,CAEJ,OADAgvC,GAAcZ,EAAgBY,GACzBA,GAA8C,IAA/BA,EAAYnvC,QAAQ/L,QAMxConD,EAAWpN,EAAM+K,WAAW7J,GAC5B5C,EAAS8O,EAAS9O,OAClBiI,EAAY6G,EAAS7G,UACrB8G,EAAYn7C,EAAavB,SAAS,cAAe,UAAYy8C,EAASz7B,aAClE2sB,EAAOt4C,QAAUugD,EAAUvgD,UAC3BkM,EAAS,SAAU8M,GACf,MAAOquC,GAAUruC,EAAGs/B,EAAQiI,KAGpCl4C,KAAKorD,0BAA0BvnD,IACxB,IAfH7D,KAAKorD,0BAA0B,WAC3B,OAAO,KAEJ,IAcfA,0BAA2B,SAAUvnD,GAAV,GACnB8H,GAGKhO,EAFLnC,EAAOwE,KAAKi3C,MACZj4C,GAAS,CACb,KAASrB,EAAM,EAAGA,EAAMnC,EAAK7D,OAAQgG,IACjCgO,EAAUnQ,EAAKmC,GACXgO,EAAQisC,aACRjsC,EAAQs/C,aAAet/C,EAAQhR,SAASywD,0BAA0BvnD,GAC7D8H,EAAQs/C,eACTt/C,EAAQs/C,aAAepnD,EAAO8H,KAGlCA,EAAQs/C,aAAepnD,EAAO8H,GAE9BA,EAAQs/C,eACRjsD,GAAS,EAGjB,OAAOA,IAEXqsD,MAAO,SAAU3iC,EAAQ9qB,GAAlB,GACCD,GAAKhG,EAAQq6B,EAAMr3B,EACnBa,EAAOwE,KAAKi3C,KAChB,IAAKz7C,EAAL,CAIA,GADAw2B,EAAOt2B,GAAWuI,GAAGykB,GAAQvgB,KAAKnI,KAAMpC,GAEpC,MAAOo0B,EAGX,KADAx2B,EAAOwE,KAAKqjD,UAAUrjD,KAAKi3C,OACtBt5C,EAAM,EAAGhG,EAAS6D,EAAK7D,OAAQgG,EAAMhG,EAAQgG,IAE9C,GADAhD,EAAWa,EAAKmC,GAAKhD,SACfA,YAAoBgB,MAG1Bq2B,EAAOr3B,EAAS+tB,GAAQ9qB,IAEpB,MAAOo0B,KAInBrO,IAAK,SAAUI,GACX,MAAO/jB,MAAKqrD,MAAM,MAAOtnC,IAE7Bw/B,SAAU,SAAU9N,GAChB,MAAOz1C,MAAKqrD,MAAM,WAAY5V,MA0CtC95C,GAAuBszC,OAAS,SAAU7uC,GACtCA,EAAUA,GAAWA,EAAQ0H,MAAStM,KAAM4E,GAAYA,CACxD,IAAI0kB,GAAa1kB,MAAe5E,EAAOspB,EAAWtpB,KAAMy0C,EAASnrB,EAAWmrB,OAAQmH,EAAOtyB,EAAWsyB,IACtG,OAAI57C,IAAQA,EAAK8vD,YACN9vD,EAAK8vD,aAEX9vD,IAAQy0C,GAAWnrB,EAAW28B,WAC3BrK,IACA57C,EAAO27C,EAAUC,EAAMnH,IAG/BnrB,EAAWtpB,KAAOA,EACXspB,YAAsBnpB,IAAyBmpB,EAAa,GAAInpB,IAAuBmpB,KAE9F2zB,GAASxgD,GAAMoM,WAAW3D,QAC1BC,KAAM,SAAUmkB,EAAYymC,EAAUC,GAClCvzD,GAAMoM,WAAWJ,GAAGtD,KAAKwH,KAAKnI,MAC9BA,KAAKyrD,cAAe,EACpBzrD,KAAK8kB,WAAaA,EAClB9kB,KAAKqpD,UAAYmC,CACjB,IAAIzzB,GAAS/3B,IACb8kB,GAAW1d,KAAK,SAAU,WACtB2wB,EAAOstB,YAEXvgC,EAAW1d,KAAK,QAAS,WACrB2wB,EAAO2zB,WAEX1rD,KAAK2rD,sBACL3rD,KAAK4rD,YAAYL,IAErBK,YAAa,SAAUL,GACnBvrD,KAAKurD,SAAWA,EAChBvrD,KAAK6rD,gBAETjX,GAAI,SAAUziC,GACV,GAAIy7B,GAAW5tC,KAAK4tC,SAAUke,GAAc,CAC5C,OAAI35C,IAASnS,KAAK6uC,SACd7uC,KAAKgI,QAAQ,cAAgBmK,MAAOA,IAC7B,MAENnS,KAAKsjD,UAGNtjD,KAAKsjD,YACDnxC,EAAQnS,KAAK+rD,YAAc55C,GAASnS,KAAKmuC,KAAOP,KAChDke,EAAc9rD,KAAK2+C,MAAM//C,KAAKpE,MAAM2X,EAAQy7B,GAAYA,IAExDz7B,IAAUnS,KAAKgsD,mBACfhsD,KAAK2gD,YAELxuC,IAAUnS,KAAKisD,iBACfjsD,KAAK2+C,MAAM3+C,KAAKksD,cAAc,GACvB/5C,IAAUnS,KAAKmsD,kBACtBnsD,KAAK2+C,MAAM3+C,KAAKosD,eACTj6C,IAAUnS,KAAKqsD,mBAElBrsD,KAAK2+C,MADL3+C,KAAKZ,SAAWY,KAAKmuC,KACVnuC,KAAKssD,iBAELtsD,KAAKusD,mBAGpBT,EACO9rD,KAAK8kB,WAAW8vB,GAAGziC,EAAQnS,KAAK+rD,aAEvC/rD,KAAKgI,QAAQ,cAAgBmK,MAAOA,IAC7B,OAtBf,EAFWnS,KAAK8kB,WAAWgE,OAAO3W,IA4BtCjU,QAAS,SAAUi1C,GACf,MAAOnzC,MAAK8kB,WAAWtpB,OAAO0C,QAAQi1C,GAAQnzC,KAAK+rD,YAEvDld,MAAO,WACH,MAAOx8B,UAASrS,KAAK8kB,WAAW+pB,QAAS,KAE7CuZ,KAAM,WACF,GAAIrwB,GAAS/3B,KAAM4tC,EAAW7V,EAAO6V,SAAUxuC,EAAS24B,EAAOoW,KAAOpW,EAAOwzB,SAAW3d,EAAUmb,EAAWvwD,GAAKC,IAAID,GAAKgC,MAAM4E,EAASwuC,GAAW,GAAKA,CAC1J5tC,MAAKZ,OAASA,EACdY,KAAK8kB,WAAWukC,SAASN,EAAUnb,EAAU,WACzC7V,EAAOy0B,WAAWptD,GAAQ,MAGlCu/C,MAAO,SAAUv/C,EAAQqtD,GACrB,GAAIzsD,KAAKZ,SAAWA,EAChB,OAAO,CAEX,IAAI24B,GAAS/3B,KAAM4tC,EAAW5tC,KAAK4tC,SAAUmb,EAAWvwD,GAAKC,IAAID,GAAKgC,MAAM4E,EAASwuC,GAAW,GAAKA,EAAU9oB,EAAa9kB,KAAK8kB,UAIjI,OAHI2nC,KACA1D,GAAYnb,GAEZ9oB,EAAW0jC,QAAQppD,EAAQwuC,IAC3B5tC,KAAKZ,OAASA,EACdY,KAAK6rD,eACL7rD,KAAKwsD,WAAWptD,IACT,IACAY,KAAKqpD,WACZvkC,EAAWukC,SAASN,EAAUnb,EAAU,WACpC7V,EAAO34B,OAASA,EAChB24B,EAAO8zB,eACP9zB,EAAOy0B,WAAWptD,GAAQ,MAEvB,IAIfstD,eAAgB,WACZ,GAAIttD,GAASY,KAAKZ,MAClBY,MAAKZ,OAAS,KACdY,KAAK2+C,MAAMv/C,IAEf4mB,QAAS,WACLhmB,KAAK6H,UAET84C,UAAW,WACP,GAAI5oB,GAAS/3B,KAAM4tC,EAAW5tC,KAAK4tC,SAAU+e,EAAiB3sD,KAAKmuC,KAAOP,EAAU9oB,EAAa9kB,KAAK8kB,UACjGA,GAAW0jC,QAAQmE,EAAgB/e,IAAc5tC,KAAKyrD,eAAgBzrD,KAAKqpD,WAC5ErpD,KAAKyrD,cAAe,EACpBzrD,KAAKgI,QAAQ,eACTmmC,KAAMwe,EACNte,KAAMT,IAEV9oB,EAAWukC,SAASsD,EAAgB/e,EAAU,WAC1C7V,EAAO0zB,cAAe,EACtB1zB,EAAO/vB,QAAQ,cACXmmC,KAAMwe,EACNte,KAAMT,QAKtB4e,WAAY,SAAUptD,EAAQwtD,GACtB5sD,KAAKZ,SAAWA,IAGpBY,KAAK+rD,WAAa3sD,EAClBY,KAAK6sD,WAAaD,EAClB5sD,KAAK8kB,WAAW65B,MAAMv/C,EAAQY,KAAK4tC,UACnC5tC,KAAK8kB,WAAW8jC,6BAEpB8C,OAAQ,WACJ1rD,KAAK8sD,cAAe,GAExBzH,QAAS,WACL,GAAIvgC,GAAa9kB,KAAK8kB,UACtB9kB,MAAKrI,OAASqI,KAAKsjD,UAAYx+B,EAAW4jC,YAAYhxD,IAAMotB,EAAWgE,OAAOnxB,OAC1EqI,KAAK8sD,eACL9sD,KAAK2rD,sBACL3rD,KAAK6rD,eACL7rD,KAAK8sD,cAAe,EACpB9sD,KAAKgI,QAAQ,SAAW5I,OAAQY,KAAKZ,UAEzCY,KAAKgI,QAAQ,UACThI,KAAK6sD,YACL7sD,KAAKgI,QAAQ,gBAEVhI,MAAK6sD,YAEhBlB,oBAAqB,WACjB,GAAI7mC,GAAa9kB,KAAK8kB,UACtB9kB,MAAK+sD,cAAgBjoC,EAAW6jC,eAChC3oD,KAAK+rD,WAAa/rD,KAAKZ,OAAS0lB,EAAWqpB,QAAU,EACrDnuC,KAAK4tC,SAAW9oB,EAAW8oB,WAC3B5tC,KAAKsjD,UAAYx+B,EAAW1kB,QAAQsiD,cAExCmJ,aAAc,WACV,GAAIje,GAAW5tC,KAAK4tC,SAAUxuC,EAASY,KAAKZ,OAAQmsD,EAAWvrD,KAAKurD,SAAUpd,EAAOvvC,KAAK2pD,KAAKnpD,EAASwuC,GAAYA,CACpH5tC,MAAKmuC,KAAOA,EACZnuC,KAAKisD,iBAAmB9d,EAAOP,EAAW,EAC1C5tC,KAAKmsD,kBAAoBhe,EAAOod,EAAW,EAC3CvrD,KAAKgsD,kBAAoB7d,EAAOvvC,KAAKpE,MAAMozC,EAAW,EAAI,GAC1D5tC,KAAKqsD,kBAAoBrsD,KAAKZ,OAAS,EACvCY,KAAKksD,aAAe/d,EAAOP,EAAW2d,EACtCvrD,KAAKosD,cAAgBje,EACrBnuC,KAAKssD,iBAAmBltD,EAASmsD,EACjCvrD,KAAKusD,kBAAoBpe,EAAOP,KAGpC8K,GAAczgD,GAAMoM,WAAW3D,QAC/BC,KAAM,SAAUmkB,EAAYkoC,GACxB,GAAIC,GAAcjtD,IAClB/H,IAAMoM,WAAWJ,GAAGtD,KAAKwH,KAAK8kD,GAC9BjtD,KAAK8kB,WAAaA,EAClB9kB,KAAKgtD,UAAYA,EACjBhtD,KAAKuhD,OAAS,EACdvhD,KAAK+3B,OAAS,GAAI0gB,IAAO3zB,EAAwB,EAAZkoC,GACrChtD,KAAK+3B,OAAO3wB,MACR8lD,WAAc,SAAUjlD,GACpBglD,EAAYjlD,QAAQ,cAAgBmK,MAAOlK,EAAEkK,SAEjDg7C,YAAe,SAAUllD,GACrBglD,EAAYjlD,QAAQ,eAChBmmC,KAAMlmC,EAAEkmC,KACRE,KAAMpmC,EAAEomC,QAGhB+e,WAAc,SAAUnlD,GACpBglD,EAAYjlD,QAAQ,cAChBmmC,KAAMlmC,EAAEkmC,KACRE,KAAMpmC,EAAEomC,QAGhBzM,MAAS,WACLqrB,EAAY1L,OAAS,EACrB0L,EAAYjlD,QAAQ,UAExBmZ,OAAU,WACN8rC,EAAY1L,OAAS3iD,KAAK2pD,KAAKvoD,KAAKrI,OAASs1D,EAAYD,WACzDC,EAAYjlD,QAAQ,UAChB6mC,MAAOoe,EAAYpe,QACnBzvC,OAAQY,KAAKZ,aAK7BstD,eAAgB,WACZ1sD,KAAK+3B,OAAO20B,kBAEhB9X,GAAI,SAAUziC,GAAV,GAC2FghC,GAIlFr4C,EAJLi9B,EAAS/3B,KAAK+3B,OAAQoW,EAAOh8B,EAAQnS,KAAKgtD,UAAW3e,EAAOruC,KAAKgtD,UAAWlkC,IAIhF,KAHIiP,EAAO34B,OAAS+uC,GAChBpW,EAAO6c,GAAG7c,EAAO34B,OAAS,GAErBtE,EAAI,EAAGA,EAAIuzC,IAChB8E,EAAOpb,EAAO6c,GAAGzG,EAAOrzC,GACX,OAATq4C,GAFkBr4C,IAKtBguB,EAAKhhB,KAAKqrC,EAEd,OAAOrqB,IAEX+lB,MAAO,WACH,MAAO7uC,MAAKuhD,QAEhBv7B,QAAS,WACLhmB,KAAK+3B,OAAO/R,UACZhmB,KAAK6H,YAGbnH,IAAO,EAAMzI,GAAMuD,MACf21C,SAAWuI,KAAMpB,IACjB3G,MAAOA,EACPj2C,WAAYA,GACZC,uBAAwBA,GACxB68C,KAAMA,GACNX,iBAAkBA,EAClBt8C,gBAAiBA,GACjBE,oBAAqBA,EACrB08C,eAAgBA,EAChBC,gBAAiBA,GACjBC,MAAOA,GACPC,WAAYA,GACZtI,MAAOA,EACPyI,OAAQA,GACRC,YAAaA,MAEnBhiD,OAAOuB,MAAM8sB,QACRruB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAO2iC,IAAM3iC,OAAS,SAAU4iC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAU9iC,EAAGC,QACVA,OAAO,gBACH,aACA,cACDD,IACL,WA82CE,MAn2CC,UAAUE,EAAGE,GA4oBV,QAAS02D,GAAkBC,EAAa5b,EAAWjuB,GAC/C,MAAO8pC,GAAO7sD,QACVC,KAAM,SAAUqC,EAAQwqD,EAAUptD,GAC9B,GAAIwG,GAAO5G,IACXutD,GAAOtpD,GAAGtD,KAAKwH,KAAKvB,EAAM5D,EAAOlL,QAAQ,GAAI01D,EAAUptD,GACvDwG,EAAK5D,OAASA,EACd4D,EAAK6mD,aAAeznD,EAAMY,EAAK8mD,YAAa9mD,GAC5CA,EAAK+mD,WAAa3nD,EAAMY,EAAKgnD,UAAWhnD,GACxCA,EAAKinD,YAAc7nD,EAAMY,EAAKknD,WAAYlnD,IAE9CknD,WAAY,SAAU7lD,GAClB8lD,EAAY9lD,EAAEkrC,KAAK,GAAIlrC,EAAEzM,KAAMwE,KAAKguD,IAAI/lD,EAAEhG,KAAMgG,EAAEzM,MAAM2a,OAAOnW,KAAKwtD,SAASF,GAAaW,cAE9FP,YAAa,SAAUzlD,GACnB,GAAItK,GAAKhG,EAAQqL,EAAShD,KAAKgD,OAAQ0jB,EAAQze,EAAEimD,cAAgBlrD,EAAO0jB,OACxE,KAAK/oB,EAAM,EAAGhG,EAAS+uB,EAAM/uB,OAAQgG,EAAMhG,EAAQgG,IAC/CwwD,EAAkBznC,EAAM/oB,IAAM,IAGtCqwD,IAAK,SAAU/rD,GACXA,EAAKA,GAAMhK,EAAMspB,EACjB,IAAI6sC,IACAn2D,EAAMspB,GACNtpB,EAAMwpB,QAAQF,GACdtpB,EAAMupB,OAAOD,GAIjB,OAFA6sC,GAAIhmD,OAAO3R,EAAEwM,QAAQhB,EAAImsD,GAAM,GAC/BA,EAAIrmD,QAAQ9F,GACLhK,EAAMqvB,oBAAoB8mC,IAErCR,UAAW,SAAU3lD,GACjB,GAAItK,GAAKhG,EAAsGmxB,EAAMnlB,EAApGX,EAAShD,KAAKgD,OAAQ0jB,EAAQze,EAAEomD,YAAcrrD,EAAO0jB,QAAS5B,EAAa9hB,EAAO0uC,GAA2B4c,EAAMr2D,EAAMuD,KAAKG,sBAC/I,MAAI2yD,GAAOxpC,YAAsBwpC,KAG7B5nC,EAAM/uB,OAGN,IAFAmxB,EAAO7gB,EAAEsmD,gBAAkBzpC,EAAWwB,WACtC3iB,EAAU3D,KAAKwtD,SAASF,GAAaW,WAChCtwD,EAAM,EAAGhG,EAASmxB,EAAKnxB,OAAQgG,EAAMhG,EAAQgG,IAC1C+oB,EAAM/oB,IACNowD,EAAYrnC,EAAM/oB,GAAMmrB,EAAKnrB,GAAMqC,KAAKguD,IAAI/lD,EAAEhG,KAAM6mB,EAAKnrB,IAAMwY,OAAOxS,KAKtFgU,QAAS,SAAU1P,GACf,GAAiBhN,GAA8Bk6B,EAAQq5B,EAAnD5nD,EAAO5G,KAAcgD,EAAS4D,EAAK5D,MACvCiF,GAAIA,MACCA,EAAEovB,SACHzwB,EAAKof,UACLhjB,EAAOoE,KAAK,cAAeR,EAAK6mD,cAChCzqD,EAAOoE,KAAK,YAAaR,EAAK+mD,YAC9B3qD,EAAOoE,KAAK,aAAcR,EAAKinD,aAC/B5yD,EAAS2L,EAAK4mD,SAASF,GAAa3pC,MAChC3gB,EAAO0uC,YAAsBz5C,GAAMuD,KAAKE,YAAcsH,EAAO0uC,IAAcz2C,IACvEA,YAAkBhD,GAAMuD,KAAKE,WAC7BsH,EAAOygB,GAAQxoB,GACRA,GAAUA,EAAOqwD,YACxBtoD,EAAOygB,GAAQxoB,EAAOqwD,cAEtBtoD,EAAO0uC,GAAWl2C,KAAKP,GACvBk6B,EAASl9B,EAAMspB,GAAGktC,QAAUzrD,YAAkB/K,GAAMspB,GAAGktC,OACvDD,EAAcv2D,EAAMspB,GAAGmtC,aAAe1rD,YAAkB/K,GAAMspB,GAAGmtC,YAC7D9nD,EAAK4mD,SAAS5vD,QAAUu3B,GAAUq5B,IAClCxrD,EAAOpF,MAAM+wD,EAAwB/nD,EAAK4mD,SAAS5vD,MAAM+lB,MAAO3gB,EAAO5C,QAAQwuD,qBAMnG5oC,QAAS,WACL,GAAIhjB,GAAShD,KAAKgD,MAClBA,GAAO6E,OAAO,cAAe7H,KAAKytD,cAClCzqD,EAAO6E,OAAO,YAAa7H,KAAK2tD,YAChC3qD,EAAO6E,OAAO,aAAc7H,KAAK6tD,gBAyc7C,QAASgB,GAAqB/2D,EAASkvB,GACnC,GAAIhkB,GAAS/K,EAAM8uB,WAAWjvB,KAAakvB,EAC3C,IAAIhkB,EACA,MAAO,IAAI8rD,GAAoB9rD,GAIvC,QAAS+rD,GAAc3nD,GACnB,GAAiBzJ,GAAKhG,EAAQq3D,EAAOC,EAAYlwD,EAAKnB,EAAOs4B,EAAzDl3B,IAEJ,KADAk3B,EAAS9uB,EAAK/O,MAAM62D,GACfvxD,EAAM,EAAGhG,EAASu+B,EAAOv+B,OAAQgG,EAAMhG,EAAQgG,IAChDqxD,EAAQ94B,EAAOv4B,GACfsxD,EAAaD,EAAM9wD,QAAQ,KAC3Ba,EAAMiwD,EAAM13D,UAAU,EAAG23D,GACzBrxD,EAAQoxD,EAAM13D,UAAU23D,EAAa,GACd,KAAnBrxD,EAAMxG,OAAO,KACbwG,EAAQmxD,EAAcnxD,IAE1BoB,EAAOD,GAAOnB,CAElB,OAAOoB,GAEX,QAASmwD,GAAe3B,EAAUvyD,EAAQiE,GACtC,GAAIkwD,GAASpwD,IACb,KAAKowD,IAAW5B,GACZxuD,EAAOowD,GAAW,GAAIlwD,GAAKjE,EAAQuyD,EAAS4B,GAEhD,OAAOpwD,GAEX,QAAS+uD,GAAYj2D,EAASmD,EAAQ+rB,EAAOrjB,GAA7C,GACkEhG,GAA+F6vD,EAAwBltC,EAqDjL3lB,EArDAspB,EAAOnsB,EAAQkK,aAAa,QAAU/J,EAAMgK,GAAK,QAAcmF,EAAOtP,EAAQkK,aAAa,QAAU/J,EAAMgK,GAAK,QAASotD,KAAmBC,GAAO,EAAgBlvD,IAsDvK,IArDAuD,EAAUA,IAAY1I,IAClBgpB,GAAQ7c,IACRmoD,EAAcz3D,GAAS,GAEvBmsB,IACA3D,EAASuuC,EAAqB/2D,EAASkvB,IAEvC5f,IACAA,EAAO2nD,EAAc3nD,EAAKlQ,QAAQs4D,EAAkB,KAC/ClvC,IACDlgB,EAAUnI,EAAMsK,aAAazK,GACzBy/C,UAAW,GACXkY,WAAY,GACZhtD,SAAU,GACVitD,YAAatnB,EACbunB,gBAAgB,EAChBC,UAAU,IAEdxvD,EAAQ4mB,MAAQA,EAChB1G,EAAS,GAAIuvC,GAAc/3D,EAASsI,IAExCkgB,EAAOrlB,OAASA,EAChBuyD,EAAW2B,EAAe/nD,EAAMzD,EAASmsD,GACrC1vD,EAAQqC,WACR+qD,EAAS/qD,SAAW,GAAIstD,GAAgBpsD,EAAS,GAAIvD,EAAQqC,WAE7D+qD,EAAStsC,QACT9Z,EAAKM,OAASN,EAAKM,WACnBN,EAAKM,OAAOwZ,MAAQ9Z,EAAK8Z,MACzBssC,EAAStsC,MAAM8E,gBACRwnC,GAAStsC,OAEhBssC,EAASvyD,SACTq0D,GAAO,GAEPloD,EAAKlE,OACLsqD,EAAStqD,KAAOisD,EAAe/nD,EAAKlE,KAAMS,EAASmsD,IAEnD1oD,EAAKvN,QACL2zD,EAAS3zD,MAAQs1D,EAAe/nD,EAAKvN,MAAO8J,EAASmsD,IAErD1oD,EAAKM,SACL8lD,EAAS9lD,OAASynD,EAAe/nD,EAAKM,OAAQ/D,EAASqsD,IAEvD5oD,EAAKpP,MACLw1D,EAASx1D,IAAMm3D,EAAe/nD,EAAKpP,IAAK2L,EAASmsD,IAErDxvC,EAAOlZ,KAAKomD,IAEZltC,IACAxoB,EAAQotB,mBAAqB5E,GAE7B3lB,EAAW7C,EAAQ6C,SACnB20D,GAAQ30D,EAAU,CAClB,IAAKgD,EAAM,EAAGA,EAAMhD,EAAShD,OAAQgG,IACjC0xD,EAAa1xD,GAAOhD,EAASgD,EAEjC,KAAKA,EAAM,EAAGA,EAAM0xD,EAAa13D,OAAQgG,IACrCowD,EAAYsB,EAAa1xD,GAAM1C,EAAQ+rB,EAAOrjB,IAI1D,QAASyD,GAAK6oD,EAAKtW,GACf,GAAIh8C,GAAKhG,EAAQq6B,EAAMhL,EAAQ/uB,EAAMqvB,uBAAuB9gB,MAAM2B,KAAKpN,UAAW,GAGlF,KAFA4+C,EAAS1hD,EAAM8gC,WAAW4gB,GAC1BsW,EAAMx5D,EAAEw5D,GACHtyD,EAAM,EAAGhG,EAASs4D,EAAIt4D,OAAQgG,EAAMhG,EAAQgG,IAC7Cq0B,EAAOi+B,EAAItyD,GACW,IAAlBq0B,EAAK5K,UACL2mC,EAAY/7B,EAAM2nB,EAAQ3yB,GAItC,QAASuoC,GAAcz3D,EAASo4D,GAAhC,GAaYltD,GAZJmtD,EAAgBr4D,EAAQotB,kBACxBirC,KACAA,EAAcnqC,UACVoqC,QACOt4D,GAAQotB,mBACRptB,EAAQu4D,gBACfv4D,EAAQu4D,gBAAgB,sBAExBv4D,EAAQotB,mBAAqB,MAGjCgrC,IACIltD,EAAS/K,EAAM0vB,eAAelxB,EAAEqB,IAChCkL,SAAiBA,GAAOgjB,UAAY7f,GACpCnD,EAAOgjB,WAInB,QAASmoC,GAAkBr2D,EAASw4D,GAChCf,EAAcz3D,EAASw4D,GACvBC,EAAsBz4D,EAASw4D,GAEnC,QAASC,GAAsBz4D,EAASw4D,GAAxC,GAGiB3yD,GAAShG,EAFlBgD,EAAW7C,EAAQ6C,QACvB,IAAIA,EACA,IAASgD,EAAM,EAAGhG,EAASgD,EAAShD,OAAQgG,EAAMhG,EAAQgG,IACtDwwD,EAAkBxzD,EAASgD,GAAM2yD,GAI7C,QAASzoD,GAAOooD,GACZ,GAAItyD,GAAKhG,CAET,KADAs4D,EAAMx5D,EAAEw5D,GACHtyD,EAAM,EAAGhG,EAASs4D,EAAIt4D,OAAQgG,EAAMhG,EAAQgG,IAC7CwwD,EAAkB8B,EAAItyD,IAAM,GAGpC,QAASmpB,GAAO9jB,EAAQwtD,GACpB,GAAI14D,GAAUkL,EAAOlL,QAASq4D,EAAgBr4D,EAAQ,GAAGotB,kBACrDirC,IACA/oD,EAAKtP,EAASq4D,EAAcl1D,OAAQu1D,GAG5C,QAAS7B,GAAwB/wD,EAAO6xD,GAAxC,GAGQ93D,GACAw7C,EAHAjhC,KACAvU,EAAM,CAGV,KAAK8xD,EACD,MAAO7xD,EAEX,IAAIA,YAAiBrC,GAAiB,CAClC,IAAK5D,EAASiG,EAAMjG,OAAQgG,EAAMhG,EAAQgG,IACtCw1C,EAAOv1C,EAAMD,GACbuU,EAAOvU,GAAOw1C,EAAKxvB,IAAMwvB,EAAKxvB,IAAI8rC,GAActc,EAAKsc,EAEzD7xD,GAAQsU,MACDtU,aAAiBi6C,KACxBj6C,EAAQA,EAAM+lB,IAAI8rC,GAEtB,OAAO7xD,GAp0Cd,GAUOkyD,GAsHAE,EAaAD,EAcAxC,EAiBAkD,EAm3BAC,EAsCAb,EAmEAf,EA6BAI,EAA0DM,EApqC1Dv3D,EAAQvB,OAAOuB,MAAOoM,EAAapM,EAAMoM,WAAYwzC,EAAmB5/C,EAAMuD,KAAKq8C,iBAAkBt8C,EAAkBtD,EAAMuD,KAAKD,gBAAiBgO,KAAcA,SAAUonD,KAAc/5D,EAAQqB,EAAMrB,MAAOoP,EAAQvP,EAAEuP,MAAO4qD,EAAQ,QAASC,EAAS,SAAUC,EAAS,SAAUC,EAAU,UAAWC,EAAM,MAAOZ,GAAgB,EAAMjqD,EAAW,WAAYiiC,EAAS,UACjX,WACG,GAAIxlC,GAAIrF,SAASsa,cAAc,IAC/B,WACWjV,GAAE1I,KACX,MAAO+N,GACLmoD,GAAgB,MAGpBN,EAAUzrD,EAAW3D,QACrBC,KAAM,SAAUgD,EAAS8jC,GACrB,GAAI7gC,GAAO5G,IACXqE,GAAWJ,GAAGtD,KAAKwH,KAAKvB,GACxBA,EAAK3L,OAAS0I,EAAQ,GACtBiD,EAAKjD,QAAUA,EACfiD,EAAK6gC,KAAOA,EACZ7gC,EAAKqqD,gBACLrqD,EAAKqqD,aAAaxpB,IAAQ,EAC1B7gC,EAAKmyB,WAAanyB,EAAK3L,iBAAkBoJ,GACzCuC,EAAKsqD,QAAU,SAAUjpD,GACrBrB,EAAKqqD,aAAahpD,EAAEiW,QAAS,GAE7BtX,EAAKmyB,aACLnyB,EAAKy+C,QAAU,SAAUp9C,GACrBrB,EAAKuiC,OAAOlhC,IAEhBrB,EAAK3L,OAAOmM,KAAKghC,EAAQxhC,EAAKy+C,WAGtC4I,SAAU,WAAA,GAIEt0D,GAHJgK,EAAU3D,KAAK2D,QACf/F,EAAQoC,KAAK2jB,KAOjB,OANI/lB,IAAgC,kBAAhBA,GAAMjE,SAClBA,EAASiE,EAAMjE,SACflD,EAAEwM,QAAQtJ,EAAQgK,GAAW,IAC7BA,GAAWhK,GAAQwc,OAAOxS,KAG3BA,GAEXwlC,OAAQ,SAAUlhC,GACd,GAAIkpD,GAAYtjD,EAAIqQ,EAAQjW,EAAEiW,MAAOtX,EAAO5G,IAC5C,IAAkB,SAAd4G,EAAK6gC,KACL7gC,EAAKoB,QAAQogC,EAAQngC,OAErB,KAAKkpD,IAAcvqD,GAAKqqD,aACpB,GAAkC,IAA9BE,EAAWjzD,QAAQggB,KACnBrQ,EAAKsjD,EAAW/5D,OAAO8mB,EAAMvmB,SACxBkW,GAAa,MAAPA,GAAqB,MAAPA,GAAY,CACjCjH,EAAKoB,QAAQogC,EAAQngC,EACrB,SAMpBgH,MAAO,SAAUhU,GACbA,EAAOmM,KAAK,MAAOpH,KAAKkxD,UAE5BlxC,KAAM,SAAU/kB,GACZA,EAAO4M,OAAO,MAAO7H,KAAKkxD,UAE9BvtC,IAAK,WACD,GAAI/c,GAAO5G,KAAM/E,EAAS2L,EAAK3L,OAAQkX,EAAQ,EAAGs1B,EAAO7gC,EAAK6gC,KAAMzoC,EAAS/D,CAC7E,KAAK2L,EAAKmyB,WACN,MAAO/5B,EAIX,KAFA4H,EAAKqI,MAAMrI,EAAK3L,QAChB+D,EAAS/D,EAAO0oB,IAAI8jB,GACbzoC,IAAWrI,GAAasE,GAC3BA,EAAS2L,EAAKjD,UAAUwO,GACpBlX,YAAkB48C,KAClB74C,EAAS/D,EAAO0oB,IAAI8jB,GAG5B,IAAIzoC,IAAWrI,EAEX,IADAsE,EAAS2L,EAAK3L,OACP+D,IAAWrI,GAAasE,GAC3BA,EAASA,EAAOtB,SACZsB,YAAkB48C,KAClB74C,EAAS/D,EAAO0oB,IAAI8jB,GAsBhC,OAlBsB,kBAAXzoC,KACPmT,EAAQs1B,EAAKt3B,YAAY,KACrBgC,EAAQ,IACRlX,EAASA,EAAO0oB,IAAI8jB,EAAKnwC,UAAU,EAAG6a,KAE1CvL,EAAKqI,MAAMhU,GAEP+D,EADA/D,IAAW2L,EAAK3L,OACP+D,EAAOmJ,KAAKlN,EAAQ2L,EAAK3L,QAEzB+D,EAAOmJ,KAAKlN,GAEzB2L,EAAKoZ,KAAK/kB,IAEVA,GAAUA,IAAW2L,EAAK3L,SAC1B2L,EAAKwqD,cAAgBn2D,EACrBA,EAAO4M,OAAOugC,EAAQxhC,EAAKy+C,SAASj+C,KAAKghC,EAAQxhC,EAAKy+C,UAE1Dz+C,EAAKoZ,KAAKpZ,EAAK3L,QACR+D,GAEX4kB,IAAK,SAAUhmB,GAAV,GACG3C,GAAS+E,KAAKoxD,eAAiBpxD,KAAK/E,OACpCijB,EAAQjmB,EAAMurB,OAAOxjB,KAAKynC,MAAMxsC,EACf,mBAAVijB,GACHjjB,IAAW+E,KAAK/E,OAChBijB,EAAM/V,KAAKlN,EAAQ+E,KAAK/E,OAAQ2C,GAEhCsgB,EAAM/V,KAAKlN,EAAQ2C,GAGvB3C,EAAO2oB,IAAI5jB,KAAKynC,KAAM7pC,IAG9BooB,QAAS,WACDhmB,KAAK+4B,aACL/4B,KAAK/E,OAAO4M,OAAOugC,EAAQpoC,KAAKqlD,SAC5BrlD,KAAKoxD,eACLpxD,KAAKoxD,cAAcvpD,OAAOugC,EAAQpoC,KAAKqlD,UAG/CrlD,KAAK6H,YAGTmoD,EAAeF,EAAQpvD,QACvBijB,IAAK,WACD,GAAuDlc,GAAnDxM,EAAS+E,KAAK/E,OAAQwsC,EAAOznC,KAAKynC,KAAMt1B,EAAQ,CAEpD,KADA1K,EAAUxM,EAAO0oB,IAAI8jB,IACbhgC,GAAWxM,GACfA,EAAS+E,KAAK2D,UAAUwO,GACpBlX,YAAkB48C,KAClBpwC,EAAUxM,EAAO0oB,IAAI8jB,GAG7B,OAAOzhC,GAAMyB,EAASxM,MAG1B80D,EAAkBD,EAAQpvD,QAC1BC,KAAM,SAAU1F,EAAQwsC,EAAMhlC,GAC1B,GAAImE,GAAO5G,IACX8vD,GAAQ7rD,GAAGtD,KAAKwH,KAAKvB,EAAM3L,EAAQwsC,GACnC7gC,EAAKnE,SAAWA,GAEpB8F,OAAQ,SAAU3K,GACd,GAAI8E,EAIJ,OAHA1C,MAAKiP,MAAMjP,KAAK/E,QAChByH,EAAOzK,EAAMsQ,OAAOvI,KAAKyC,SAAU7E,GACnCoC,KAAKggB,KAAKhgB,KAAK/E,QACRyH,KAGX6qD,EAAS32D,EAAM8J,QACfC,KAAM,SAAU7I,EAAS01D,EAAUptD,GAC/BJ,KAAKlI,QAAUA,EACfkI,KAAKwtD,SAAWA,EAChBxtD,KAAKI,QAAUA,GAEnBgH,KAAM,SAAUgoD,EAAS1e,GACrB,GAAI9pC,GAAO5G,IACXovD,GAAU1e,EAAY0e,EAAQ1e,GAAa0e,EAC3CA,EAAQhoD,KAAKghC,EAAQ,SAAUngC,GAC3BrB,EAAK+Q,QAAQ+4B,GAAazoC,KAE9BrB,EAAK+Q,QAAQ+4B,IAEjB1qB,QAAS,eAGTyqC,EAAclD,EAAO7sD,QACrB+tC,SAAU,WACN,GAAIA,GAAWzuC,KAAKlI,QAAQkK,aAAa,cAAgBhC,KAAKlI,QAAQoH,MAAQ,MAC9E,OAAOuvC,GAAS3xC,eAEpBu0D,YAAa,WACT,MAAOrxD,MAAKsxD,YAAYtxD,KAAKlI,QAAQ8F,MAAOoC,KAAKyuC,aAErD6iB,YAAa,SAAU1zD,EAAO6wC,GAkB1B,MAjBgB,QAAZA,EACA7wC,EAAQ3F,EAAM8e,UAAUnZ,EAAO,cACZ,kBAAZ6wC,EACP7wC,EAAQ3F,EAAM8e,UAAUnZ,GACpB,sBACA,qBAEe,UAAZ6wC,EACP7wC,EAAQ3F,EAAMkK,WAAWvE,GACN,WAAZ6wC,IACP7wC,EAAQA,EAAMd,cAEVc,EAD4B,OAA5B3F,EAAMkK,WAAWvE,KACD3F,EAAMkK,WAAWvE,GAED,SAAxBA,EAAMd,eAGfc,KAGf+yD,EAAQztD,KAAOqqD,EAAO7sD,QAClBiX,QAAS,SAAU5Y,GACfiB,KAAKlI,QAAQ+lB,aAAa9e,EAAKiB,KAAKwtD,SAAStqD,KAAKnE,GAAK4kB,UAG/DgtC,EAAQ34D,IAAMu1D,EAAO7sD,QACjBC,KAAM,SAAU7I,EAAS01D,EAAUptD,GAC/BmtD,EAAOtpD,GAAGtD,KAAKwH,KAAKnI,KAAMlI,EAAS01D,EAAUptD,GAC7CJ,KAAKqB,YAETsW,QAAS,SAAU1Z,GACf,GAAInG,GAAUrB,EAAEuJ,KAAKlI,SAAUs3D,EAAUpvD,KAAKwtD,SAASx1D,IAAIiG,GAAYrE,EAAWoG,KAAKqB,QAAQpD,GAAamxD,EAAQzrC,KAChH/pB,GACA9B,EAAQwC,SAAS2D,GAEjBnG,EAAQiuC,YAAY9nC,MAIhC0yD,EAAQ92D,MAAQ0zD,EAAO7sD,QACnBiX,QAAS,SAAU5Y,GACfiB,KAAKlI,QAAQ+B,MAAMkF,GAAOiB,KAAKwtD,SAAS3zD,MAAMkF,GAAK4kB,OAAS,MAGpEgtC,EAAQpxC,QAAUguC,EAAO7sD,QACrBiX,QAAS,WACD3X,KAAKwtD,SAASjuC,QAAQoE,MACtB3jB,KAAKlI,QAAQu4D,gBAAgB,YAE7BrwD,KAAKlI,QAAQ+lB,aAAa,WAAY,eAIlD8yC,EAAQY,SAAWhE,EAAO7sD,QACtBiX,QAAS,WACD3X,KAAKwtD,SAAS+D,SAAS5tC,MACvB3jB,KAAKlI,QAAQ+lB,aAAa,WAAY,YAEtC7d,KAAKlI,QAAQu4D,gBAAgB,eAIzCM,EAAQrtD,SAAWiqD,EAAO7sD,QACtBiX,QAAS,WACD3X,KAAKwtD,SAASlqD,SAASqgB,MACvB3jB,KAAKlI,QAAQ+lB,aAAa,WAAY,YAEtC7d,KAAKlI,QAAQu4D,gBAAgB,eAIzCM,EAAQjpD,OAAS6lD,EAAO7sD,QACpBC,KAAM,SAAU7I,EAAS01D,EAAUptD,GAC/BmtD,EAAOtpD,GAAGtD,KAAKwH,KAAKnI,KAAMlI,EAAS01D,EAAUptD,GAC7CJ,KAAKsH,aAETqQ,QAAS,SAAU5Y,GACf,GAAIjH,GAAUrB,EAAEuJ,KAAKlI,SAAUs3D,EAAUpvD,KAAKwtD,SAAS9lD,OAAO3I,GAAM0I,EAAUzH,KAAKsH,SAASvI,EACxF0I,IACA3P,EAAQiyB,IAAIhrB,EAAK0I,GAErBA,EAAUzH,KAAKsH,SAASvI,GAAOqwD,EAAQzrC,MACvC7rB,EAAQ4N,GAAG3G,EAAKqwD,EAAQn0D,OAAQwM,IAEpCue,QAAS,WACL,GAA+Bve,GAA3B3P,EAAUrB,EAAEuJ,KAAKlI,QACrB,KAAK2P,IAAWzH,MAAKsH,SACjBxP,EAAQiyB,IAAItiB,EAASzH,KAAKsH,SAASG,OAI/CkpD,EAAQl7B,KAAO83B,EAAO7sD,QAClBiX,QAAS,WAAA,GACD8d,GAAOz1B,KAAKwtD,SAAS/3B,KAAK9R,MAC1B6tC,EAAaxxD,KAAKlI,QAAQkK,aAAa,gBAAkB,EACjD,OAARyzB,IACAA,EAAO,IAEXh/B,EAAEuJ,KAAKlI,SAAS29B,KAAKx9B,EAAMsR,SAASksB,EAAM+7B,OAGlDb,EAAQntD,QAAU+pD,EAAO7sD,QACrBiX,QAAS,WAED3X,KAAKlI,QAAQ+B,MAAME,QADnBiG,KAAKwtD,SAAShqD,QAAQmgB,MACO,GAEA,UAIzCgtC,EAAQc,UAAYlE,EAAO7sD,QACvBiX,QAAS,WAID3X,KAAKlI,QAAQ+B,MAAME,QAHlBiG,KAAKwtD,SAASiE,UAAU9tC,MAGI,OAFA,MAMzCgtC,EAAQjuD,KAAO6qD,EAAO7sD,QAClBiX,QAAS,WACL3X,KAAKlI,QAAQigB,UAAY/X,KAAKwtD,SAAS9qD,KAAKihB,SAGpDgtC,EAAQ/yD,MAAQ6yD,EAAY/vD,QACxBC,KAAM,SAAU7I,EAAS01D,EAAUptD,GAC/BqwD,EAAYxsD,GAAGtD,KAAKwH,KAAKnI,KAAMlI,EAAS01D,EAAUptD,GAClDJ,KAAKqlD,QAAUr/C,EAAMhG,KAAKmpC,OAAQnpC,MAClCA,KAAKqH,UAAYjH,EAAQsvD,aAAetnB,EACxC3xC,EAAEuJ,KAAKlI,SAAS4N,GAAG1F,KAAKqH,UAAWrH,KAAKqlD,SACxCrlD,KAAK0xD,aAAc,GAEvBvoB,OAAQ,WACJnpC,KAAK0xD,YAAc1xD,KAAKqH,WAAa+gC,EACrCpoC,KAAKwtD,SAASoD,GAAOhtC,IAAI5jB,KAAKqxD,eAC9BrxD,KAAK0xD,aAAc,GAEvB/5C,QAAS,WAAA,GAEG/Z,GAIAsB,CALHc,MAAK0xD,cACF9zD,EAAQoC,KAAKwtD,SAASoD,GAAOjtC,MACpB,MAAT/lB,IACAA,EAAQ,IAERsB,EAAOc,KAAKyuC,WACJ,QAARvvC,EACAtB,EAAQ3F,EAAMsR,SAAS3L,EAAO,cACf,kBAARsB,IACPtB,EAAQ3F,EAAMsR,SAAS3L,EAAO,wBAElCoC,KAAKlI,QAAQ8F,MAAQA,GAEzBoC,KAAK0xD,aAAc,GAEvB1rC,QAAS,WACLvvB,EAAEuJ,KAAKlI,SAASiyB,IAAI/pB,KAAKqH,UAAWrH,KAAKqlD,YAGjDsL,EAAQ11D,OAASsyD,EAAO7sD,QACpBC,KAAM,SAAU7I,EAAS01D,EAAUptD,GAC/BmtD,EAAOtpD,GAAGtD,KAAKwH,KAAKnI,KAAMlI,EAAS01D,EAAUptD,EAC7C,IAAInF,GAAS+E,KAAKwtD,SAASvyD,OAAO0oB,KAC9B1oB,aAAkBhD,GAAMuD,KAAKE,YAAc0E,EAAQwvD,YAAa,GAChE30D,EAAOitD,SAGfvwC,QAAS,SAAU1P,GACf,GAAIrB,GAAO5G,KAAM/E,EAAS2L,EAAK4mD,SAASvyD,OAAO0oB,KAC3C1oB,aAAkBM,IAAmBN,YAAkBhD,GAAMuD,KAAKE,YAClEuM,EAAIA,MACY,OAAZA,EAAEovB,OACFzwB,EAAKtF,IAAI2G,EAAEkK,MAAOlK,EAAEye,OACD,UAAZze,EAAEovB,OACTzwB,EAAKyhB,OAAOpgB,EAAEkK,MAAOlK,EAAEye,OACJ,cAAZze,EAAEovB,QACTzwB,EAAK2B,UAGT3B,EAAK2B,UAGbsf,UAAW,WACP,GAAI/vB,GAAUkI,KAAKlI,OAOnB,OANsC,SAAlCA,EAAQuL,SAASvG,gBACZhF,EAAQ++C,QAAQ,IACjB/+C,EAAQmgB,YAAY1a,SAASsa,cAAc,UAE/C/f,EAAUA,EAAQ++C,QAAQ,IAEvB/+C,GAEX2K,SAAU,WACN,GAAIrC,GAAUJ,KAAKI,QAASqC,EAAWrC,EAAQqC,SAAUY,EAAWrD,KAAK6nB,YAAYxkB,SAASvG,aAiB9F,OAhBK2F,KAGOA,EAFQ,UAAZY,EACIjD,EAAQqvD,YAAcrvD,EAAQm3C,UACnBt/C,EAAM8Q,OAAO,yCAA0C3I,EAAQqvD,YAAcrvD,EAAQm3C,UAAWn3C,EAAQm3C,WAAan3C,EAAQqvD,YAE7H,2BAEI,SAAZpsD,EACI,4BACQ,MAAZA,GAAgC,MAAZA,EAChB,mBAEA,UAEfZ,EAAWxK,EAAMwK,SAASA,IAEvBA,GAEXnB,IAAK,SAAU6Q,EAAOuU,GAClB,GAAgC/iB,GAAShG,EAAKhG,EAAQi6B,EAAlD95B,EAAUkI,KAAK6nB,YAA0C1rB,EAAQrE,EAAQ65D,WAAU,GAAQC,EAAY95D,EAAQ6C,SAASwX,EAE5H,IADA1b,EAAE0F,GAAOuG,KAAKzK,EAAMsQ,OAAOvI,KAAKyC,WAAYikB,IACxCvqB,EAAMxB,SAAShD,OAEf,IADAgM,EAAU3D,KAAKwtD,SAASvyD,OAAOgzD,WAC1BtwD,EAAM,EAAGhG,EAAS+uB,EAAM/uB,OAAQgG,EAAMhG,EAAQgG,IAC/Ci0B,EAAQz1B,EAAMxB,SAAS,GACvB7C,EAAQ+5D,aAAajgC,EAAOggC,GAAa,MACzC7D,EAAYn8B,EAAOlL,EAAM/oB,GAAMqC,KAAKI,QAAQ4mB,OAAQN,EAAM/oB,IAAMwY,OAAOxS,KAInF0kB,OAAQ,SAAUlW,EAAOuU,GAAjB,GACA/oB,GAEIi0B,EAFC95B,EAAUkI,KAAK6nB,WACxB,KAAKlqB,EAAM,EAAGA,EAAM+oB,EAAM/uB,OAAQgG,IAC1Bi0B,EAAQ95B,EAAQ6C,SAASwX,GAC7Bg8C,EAAkBv8B,GAAO,GACrBA,EAAMjT,YAAc7mB,GACpBA,EAAQqgB,YAAYyZ,IAIhCrpB,OAAQ,WACJ,GAAyC5E,GAAShG,EAAKhG,EAAnDsD,EAAS+E,KAAKwtD,SAASvyD,OAAO0oB,MAA6B7rB,EAAUkI,KAAK6nB,YAAaplB,EAAWzC,KAAKyC,UAC3G,IAAc,MAAVxH,EASJ,GANIA,YAAkBhD,GAAMuD,KAAKE,aAC7BT,EAASA,EAAO6tB,QAEd7tB,YAAkBM,IAA8C,mBAA1BgO,EAASpB,KAAKlN,KACtDA,GAAUA,IAEV+E,KAAKwtD,SAAS/qD,UAGd,GAFA8tD,EAAsBz4D,GAAS,GAC/BrB,EAAEqB,GAAS4K,KAAK1C,KAAKwtD,SAAS/qD,SAAS8F,OAAOtN,IAC1CnD,EAAQ6C,SAAShD,OAEjB,IADAgM,EAAU3D,KAAKwtD,SAASvyD,OAAOgzD,WAC1BtwD,EAAM,EAAGhG,EAASsD,EAAOtD,OAAQgG,EAAMhG,EAAQgG,IAChDowD,EAAYj2D,EAAQ6C,SAASgD,GAAM1C,EAAO0C,GAAMqC,KAAKI,QAAQ4mB,OAAQ/rB,EAAO0C,IAAMwY,OAAOxS,QAIjGlN,GAAEqB,GAAS4K,KAAKzK,EAAMsQ,OAAO9F,EAAUxH,OAInD01D,EAAQ7wD,OACJgyD,QAASrB,EAAY/vD,QACjBC,KAAM,SAAU7I,EAAS01D,EAAUptD,GAC/BqwD,EAAYxsD,GAAGtD,KAAKwH,KAAKnI,KAAMlI,EAAS01D,EAAUptD,GAClDJ,KAAKqlD,QAAUr/C,EAAMhG,KAAKmpC,OAAQnpC,MAClCvJ,EAAEuJ,KAAKlI,SAASqxC,OAAOnpC,KAAKqlD,UAEhClc,OAAQ,WAAA,GAOIluC,GACAkX,EAIarX,EAXjBhD,EAAUkI,KAAKlI,QACf8F,EAAQoC,KAAKpC,OACjB,IAAoB,SAAhB9F,EAAQoH,KACRtB,EAAQoC,KAAKqxD,cACbrxD,KAAKwtD,SAASuD,GAASntC,IAAIhmB,OACxB,IAAoB,YAAhB9F,EAAQoH,KAGf,GAFIjE,EAAS+E,KAAKwtD,SAASuD,GAASptC,MAEhC1oB,YAAkBM,GAAiB,CAEnC,GADAqC,EAAQoC,KAAKqxD,cACTzzD,YAAiB5B,OACjB,IAASlB,EAAI,EAAGA,EAAIG,EAAOtD,OAAQmD,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,MAAKwtD,SAASuD,GAASntC,IAAIhmB,IAIvC+Z,QAAS,WAAA,GAIOxF,GAGSrX,EANjB8C,EAAQoC,KAAKwtD,SAASuD,GAASptC,MAAO1oB,EAAS2C,EAAOsB,EAAOc,KAAKyuC,WAAY32C,EAAUkI,KAAKlI,OACjG,IAAoB,YAAhBA,EAAQoH,KACR,GAAIjE,YAAkBM,GAAiB,CAGnC,GAFI4W,KACJvU,EAAQoC,KAAKqxD,cACTzzD,YAAiB5B,OACjB,IAASlB,EAAI,EAAGA,EAAIG,EAAOtD,OAAQmD,IAC/B,GAAIG,EAAOH,YAAckB,QAASf,EAAOH,MAAQ8C,EAAO,CACpDuU,EAAQrX,CACR,YAIRqX,GAAQlX,EAAOiD,QAAQN,EAE3B9F,GAAQg6D,QAAU3/C,GAAS,MAE3Bra,GAAQg6D,QAAU72D,MAEC,SAAhBnD,EAAQoH,MAA4B,MAATtB,IACtB,QAARsB,EACAtB,EAAQ3F,EAAMsR,SAAS3L,EAAO,cACf,kBAARsB,IACPtB,EAAQ3F,EAAMsR,SAAS3L,EAAO,wBAG9B9F,EAAQg6D,QADRh6D,EAAQ8F,QAAUA,GAAAA,IAO9BA,MAAO,WACH,GAAI9F,GAAUkI,KAAKlI,QAAS8F,EAAQ9F,EAAQ8F,KAI5C,OAHoB,YAAhB9F,EAAQoH,OACRtB,EAAQ9F,EAAQg6D,SAEbl0D,GAEXooB,QAAS,WACLvvB,EAAEuJ,KAAKlI,SAASiyB,IAAIqe,EAAQpoC,KAAKqlD,aAI7CsL,EAAQx7B,QACJl6B,OAAQ01D,EAAQ11D,OAAOyF,QACnBiX,QAAS,SAAU1P,GAAV,GAYew3B,GAXhB74B,EAAO5G,KAAM/E,EAAS2L,EAAK4mD,SAASvyD,OAAO0oB,KAC3C1oB,aAAkBM,IAAmBN,YAAkBhD,GAAMuD,KAAKE,YAClEuM,EAAIA,MACY,OAAZA,EAAEovB,OACFzwB,EAAKtF,IAAI2G,EAAEkK,MAAOlK,EAAEye,OACD,UAAZze,EAAEovB,OACTzwB,EAAKyhB,OAAOpgB,EAAEkK,MAAOlK,EAAEye,OACJ,cAAZze,EAAEovB,QAA0BpvB,EAAEovB,SAAW1gC,IAChDiQ,EAAK2B,SACD3B,EAAK4mD,SAAS5vD,OACVgJ,EAAK4mD,SAAS5vD,QACV6hC,EAAMkvB,EAAwB/nD,EAAK4mD,SAAS5vD,MAAM+lB,MAAOltB,EAAEmQ,EAAK9O,SAAS0D,KAAK,eACtE,OAARikC,EACA74B,EAAK9O,QAAQi6D,iBAEbnrD,EAAK9O,QAAQ8F,MAAQ6hC,KAMrC74B,EAAK2B,YAIjB3K,MAAO6yD,EAAY/vD,QACfC,KAAM,SAAU2f,EAAQktC,EAAUptD,GAC9BqwD,EAAYxsD,GAAGtD,KAAKwH,KAAKnI,KAAMsgB,EAAQktC,EAAUptD,GACjDJ,KAAKqlD,QAAUr/C,EAAMhG,KAAKmpC,OAAQnpC,MAClCvJ,EAAEuJ,KAAKlI,SAASqxC,OAAOnpC,KAAKqlD,UAEhCgM,YAAa,WAAA,GAGLzzD,GAAOkE,EAAQnE,EAAKhG,EAFpB82C,EAAWzuC,KAAKyuC,WAChBv8B,IAEJ,KAAKvU,EAAM,EAAGhG,EAASqI,KAAKlI,QAAQsI,QAAQzI,OAAQgG,EAAMhG,EAAQgG,IAC9DmE,EAAS9B,KAAKlI,QAAQsI,QAAQzC,GAC1BmE,EAAOkwD,WACPp0D,EAAQkE,EAAO6uC,WAAW/yC,MAEtBA,EADAA,GAASA,EAAM04C,UACPx0C,EAAOlE,MAEPkE,EAAO2zB,KAEnBvjB,EAAOpK,KAAK9H,KAAKsxD,YAAY1zD,EAAO6wC,IAG5C,OAAOv8B,IAEXi3B,OAAQ,WAAA,GACqCluC,GAAiH6G,EAAQmwD,EAAYr0D,EAAOD,EAAKhG,EAwB1Ku6D,EACA75D,EAzBZ6Z,KAAapa,EAAUkI,KAAKlI,QAAiBomB,EAAQle,KAAKI,QAAQqvD,YAAczvD,KAAKI,QAAQm3C,UAAWoY,EAAiB3vD,KAAKI,QAAQuvD,cAC1I,KAAKhyD,EAAM,EAAGhG,EAASG,EAAQsI,QAAQzI,OAAQgG,EAAMhG,EAAQgG,IACzDmE,EAAShK,EAAQsI,QAAQzC,GACrBmE,EAAOkwD,WACPp0D,EAAQkE,EAAO6uC,WAAW/yC,MAEtBA,EADAA,GAASA,EAAM04C,UACPx0C,EAAOlE,MAEPkE,EAAO2zB,KAGfvjB,EAAOpK,KADPoW,EACYtgB,EAEAoC,KAAKsxD,YAAY1zD,EAAOoC,KAAKyuC,aAIrD,IAAIvwB,EAKA,IAJAjjB,EAAS+E,KAAKwtD,SAASvyD,OAAO0oB,MAC1B1oB,YAAkBhD,GAAMuD,KAAKE,aAC7BT,EAASA,EAAO6tB,QAEfmpC,EAAa,EAAGA,EAAa//C,EAAOva,OAAQs6D,IAC7C,IAAKt0D,EAAM,EAAGhG,EAASsD,EAAOtD,OAAQgG,EAAMhG,EAAQgG,IAGhD,GAFIu0D,EAAcj3D,EAAO0C,GAAKgmB,IAAIzF,GAC9B7lB,EAAe65D,EAAPjoD,KAAwBiI,EAAO+/C,GAChC,CACP//C,EAAO+/C,GAAch3D,EAAO0C,EAC5B,OAKhBC,EAAQoC,KAAKwtD,SAASoD,GAAOjtC,MACzB/lB,YAAiBrC,GACjBqC,EAAMwK,OAAOtB,MAAMlJ,GACf,EACAA,EAAMjG,QACRwe,OAAOjE,IAITlS,KAAKwtD,SAASoD,GAAOhtC,IAHb+rC,KAAmB/xD,YAAiBi6C,IAA8B,OAAVj6C,GAAkBA,IAAUjH,IAAcunB,EAGjFhM,EAAO,GAAGyR,IAAIzF,GAFdhM,EAAO,KAKxCyF,QAAS,WAAA,GACDw6C,GAAsNC,EAKjNH,EALQn6D,EAAUkI,KAAKlI,QAASsI,EAAUtI,EAAQsI,QAASxC,EAAQoC,KAAKwtD,SAASoD,GAAOjtC,MAAOzR,EAAStU,EAAOsgB,EAAQle,KAAKI,QAAQqvD,YAAczvD,KAAKI,QAAQm3C,UAAWiN,GAAQ,EAAOtlD,EAAOc,KAAKyuC,UAK9M,KAJMv8B,YAAkB3W,KACpB2W,EAAS,GAAI3W,IAAiBqC,KAElC9F,EAAQi6D,iBACCE,EAAa,EAAGA,EAAa//C,EAAOva,OAAQs6D,IAUjD,IATAr0D,EAAQsU,EAAO+/C,GACX/zC,GAAStgB,YAAiBi6C,KAC1Bj6C,EAAQA,EAAM+lB,IAAIzF,IAEV,QAARhf,EACAtB,EAAQ3F,EAAMsR,SAAS2I,EAAO+/C,GAAa,cAC5B,kBAAR/yD,IACPtB,EAAQ3F,EAAMsR,SAAS2I,EAAO+/C,GAAa,wBAE1CE,EAAc,EAAGA,EAAc/xD,EAAQzI,OAAQw6D,IAChDC,EAAchyD,EAAQ+xD,GAAav0D,MACf,KAAhBw0D,GAAgC,KAAVx0D,IACtBw0D,EAAchyD,EAAQ+xD,GAAa18B,MAE1B,MAAT73B,GAAiBw0D,GAAex0D,GAAAA,IAChCwC,EAAQ+xD,GAAaH,UAAW,EAChCxN,GAAQ,IAKxBx+B,QAAS,WACLvvB,EAAEuJ,KAAKlI,SAASiyB,IAAIqe,EAAQpoC,KAAKqlD,aAkF7CsL,EAAQ3tD,QACJ0E,OAAQ6lD,EAAO7sD,QACXC,KAAM,SAAUqC,EAAQwqD,EAAUptD,GAC9BmtD,EAAOtpD,GAAGtD,KAAKwH,KAAKnI,KAAMgD,EAAOlL,QAAQ,GAAI01D,EAAUptD,GACvDJ,KAAKgD,OAASA,EACdhD,KAAKsH,aAETqQ,QAAS,SAAU5Y,GACf,GAAIqwD,GAAUpvD,KAAKwtD,SAAS9lD,OAAO3I,GAAM0I,EAAUzH,KAAKsH,SAASvI,EAC7D0I,IACAzH,KAAKgD,OAAO6E,OAAO9I,EAAK0I,GAE5BA,EAAU2nD,EAAQzrC,MAClB3jB,KAAKsH,SAASvI,GAAO,SAAUkJ,GAC3BA,EAAEzM,KAAO4zD,EAAQn0D,OACjBwM,EAAQQ,GACJA,EAAEzM,OAAS4zD,EAAQn0D,cACZgN,GAAEzM,MAGjBwE,KAAKgD,OAAOoE,KAAKrI,EAAKiB,KAAKsH,SAASvI,KAExCinB,QAAS,WACL,GAAIve,EACJ,KAAKA,IAAWzH,MAAKsH,SACjBtH,KAAKgD,OAAO6E,OAAOJ,EAASzH,KAAKsH,SAASG,OAItDqqD,QAASvE,EAAO7sD,QACZC,KAAM,SAAUqC,EAAQwqD,EAAUptD,GAC9BmtD,EAAOtpD,GAAGtD,KAAKwH,KAAKnI,KAAMgD,EAAOlL,QAAQ,GAAI01D,EAAUptD,GACvDJ,KAAKgD,OAASA,EACdhD,KAAKqlD,QAAUr/C,EAAMhG,KAAKmpC,OAAQnpC,MAClCA,KAAKgD,OAAOoE,KAAKghC,EAAQpoC,KAAKqlD,UAElClc,OAAQ,WACJnpC,KAAKwtD,SAASuD,GAASntC,IAAI5jB,KAAKpC,UAEpC+Z,QAAS,WACL3X,KAAKgD,OAAOqvD,MAAMryD,KAAKwtD,SAASuD,GAASptC,SAAU,IAEvD/lB,MAAO,WACH,GAAI9F,GAAUkI,KAAKlI,QAAS8F,EAAQ9F,EAAQ8F,KAI5C,OAHa,MAATA,GAA0B,OAATA,IACjBA,EAAQ9F,EAAQg6D,SAEbl0D,GAEXooB,QAAS,WACLhmB,KAAKgD,OAAO6E,OAAOugC,EAAQpoC,KAAKqlD,YAGxC7hD,QAAS+pD,EAAO7sD,QACZC,KAAM,SAAUqC,EAAQwqD,EAAUptD,GAC9BmtD,EAAOtpD,GAAGtD,KAAKwH,KAAKnI,KAAMgD,EAAOlL,QAAQ,GAAI01D,EAAUptD,GACvDJ,KAAKgD,OAASA,GAElB2U,QAAS,WACL,GAAInU,GAAUxD,KAAKwtD,SAAShqD,QAAQmgB,KACpC3jB,MAAKgD,OAAO5J,QAAQ,GAAGS,MAAME,QAAUyJ,EAAU,GAAK,UAG9DiuD,UAAWlE,EAAO7sD,QACdC,KAAM,SAAUqC,EAAQwqD,EAAUptD,GAC9BmtD,EAAOtpD,GAAGtD,KAAKwH,KAAKnI,KAAMgD,EAAOlL,QAAQ,GAAI01D,EAAUptD,GACvDJ,KAAKgD,OAASA,GAElB2U,QAAS,WACL,GAAI85C,GAAYzxD,KAAKwtD,SAASiE,UAAU9tC,KACxC3jB,MAAKgD,OAAO5J,QAAQ,GAAGS,MAAME,QAAU03D,EAAY,OAAS,MAGpElyC,QAASguC,EAAO7sD,QACZC,KAAM,SAAUqC,EAAQwqD,EAAUptD,GAC9BmtD,EAAOtpD,GAAGtD,KAAKwH,KAAKnI,KAAMgD,EAAOlL,QAAQ,GAAI01D,EAAUptD,GACvDJ,KAAKgD,OAASA,GAElB2U,QAAS,WACD3X,KAAKgD,OAAO2c,QACZ3f,KAAKgD,OAAO2c,OAAO3f,KAAKwtD,SAASjuC,QAAQoE,UAIrDrgB,SAAUiqD,EAAO7sD,QACbC,KAAM,SAAUqC,EAAQwqD,EAAUptD,GAC9BmtD,EAAOtpD,GAAGtD,KAAKwH,KAAKnI,KAAMgD,EAAOlL,QAAQ,GAAI01D,EAAUptD,GACvDJ,KAAKgD,OAASA,GAElB2U,QAAS,WACD3X,KAAKgD,OAAO2c,QACZ3f,KAAKgD,OAAO2c,QAAQ3f,KAAKwtD,SAASlqD,SAASqgB,UAIvD1oB,OAAQoyD,EAAkB,SAAU,aAAc,iBAClDzvD,MAAO2vD,EAAO7sD,QACVC,KAAM,SAAUqC,EAAQwqD,EAAUptD,GAC9BmtD,EAAOtpD,GAAGtD,KAAKwH,KAAKnI,KAAMgD,EAAOlL,QAAQ,GAAI01D,EAAUptD,GACvDJ,KAAKgD,OAASA,EACdhD,KAAKqlD,QAAU5uD,EAAEuP,MAAMhG,KAAKmpC,OAAQnpC,MACpCA,KAAKgD,OAAO7L,MAAMixC,EAAQpoC,KAAKqlD,QAC/B,IAAIznD,GAAQoC,KAAKwtD,SAAS5vD,MAAM+lB,KAChC3jB,MAAKsyD,0BAA4BlyD,EAAQuvD,iBAA4B,MAAT/xD,GAAiBA,YAAiBi6C,IAC9F73C,KAAKuyD,wBAA0B30D,YAAiBrC,GAChDyE,KAAK0xD,aAAc,GAEvBc,QAAS,WACL,GAAIv3D,EACJ,OAAI+E,MAAKgD,OAAO2jB,WACZ1rB,EAAS+E,KAAKgD,OAAO2jB,WACjB1rB,GAAUA,YAAkB48C,KACpB58C,IAGZ+E,KAAKwtD,SAASvyD,SACdA,EAAS+E,KAAKwtD,SAASvyD,OAAO0oB,SAE7B1oB,GAAUA,YAAkBhD,GAAMuD,KAAKE,cACxCT,EAAS+E,KAAKgD,OAAO8hB,WAAWwB,YAE7BrrB,IAEXkuC,OAAQ,WACJ,GAA6M8oB,GAAYQ,EAA0BC,EAAYR,EAAav0D,EAAKhG,EAAQsD,EAArR2C,EAAQoC,KAAKgD,OAAOpF,QAASsgB,EAAQle,KAAKI,QAAQwuD,gBAAkB5uD,KAAKI,QAAQuyD,cAAe5sD,EAAmC,mBAAzBwD,EAASpB,KAAKvK,GAA6Bg1D,EAAqB5yD,KAAKsyD,yBAAmDpgD,IAEtO,IADAlS,KAAK0xD,aAAc,EACfxzC,EACA,GAAc,KAAVtgB,IAAiBg1D,GAAsB5yD,KAAKI,QAAQuvD,gBACpD/xD,EAAQ,SACL,CAMH,IALA3C,EAAS+E,KAAKwyD,UACVzsD,IACA0sD,EAAc70D,EAAMjG,OACpBua,EAAStU,EAAM4I,MAAM,IAEpB7I,EAAM,EAAGhG,EAASsD,EAAOtD,OAAQgG,EAAMhG,EAAQgG,IAGhD,GAFA+0D,EAAaz3D,EAAO0C,GACpBu0D,EAAcQ,EAAW/uC,IAAIzF,GACzBnY,GACA,IAAKksD,EAAa,EAAGA,EAAaQ,EAAaR,IAC3C,GAAIC,GAAehgD,EAAO+/C,GAAa,CACnC//C,EAAO+/C,GAAcS,CACrB,YAGL,IAAIR,GAAet0D,EAAO,CAC7BA,EAAQg1D,EAAqBF,EAAaR,CAC1C,OAGJhgD,EAAO,KAEHtU,EADAoC,KAAKuyD,wBACGrgD,EACD0gD,IAAuB10C,EACtBhM,EAAO,GAEPA,EAAO,GAAGyR,IAAIzF,IAKtCle,KAAKwtD,SAAS5vD,MAAMgmB,IAAIhmB,GACxBoC,KAAK0xD,aAAc,GAEvB/5C,QAAS,WAAA,GAEG3U,GACA5C,EACAm3C,EACAkY,EACA7xD,EACA63B,EACA93B,EAAShG,EACTua,CARR,KAAKlS,KAAK0xD,YAAa,CAYnB,GAXI1uD,EAAShD,KAAKgD,OACd5C,EAAU4C,EAAO5C,QACjBm3C,EAAYn3C,EAAQuyD,cACpBlD,EAAarvD,EAAQwuD,gBAAkBrX,EACvC35C,EAAQoC,KAAKwtD,SAAS5vD,MAAM+lB,MAC5B8R,EAAOr1B,EAAQq1B,MAAQ,GACvB93B,EAAM,EACNuU,KACAtU,IAAUjH,IACViH,EAAQ,MAER6xD,EACA,GAAI7xD,YAAiBrC,GAAiB,CAClC,IAAK5D,EAASiG,EAAMjG,OAAQgG,EAAMhG,EAAQgG,IACtCuU,EAAOvU,GAAOC,EAAMD,GAAKgmB,IAAI8rC,EAEjC7xD,GAAQsU,MACDtU,aAAiBi6C,KACxBpiB,EAAO73B,EAAM+lB,IAAI4zB,GACjB35C,EAAQA,EAAM+lB,IAAI8rC,GAGtBrvD,GAAQwvD,YAAa,GAAUxvD,EAAQyyD,cAAe7vD,EAAO8vD,UAAa9vD,EAAO8vD,SAASC,QAU1F/vD,EAAOpF,MAAMA,IATT25C,IAAckY,GAAeh6B,IAC7BA,EAAO73B,GAEN63B,IAAS73B,GAAmB,IAAVA,IAAgBwC,EAAQuvD,eAG3C3sD,EAAOgwD,WAAWp1D,EAAO63B,GAFzBzyB,EAAOpF,MAAMA,IAQzBoC,KAAK0xD,aAAc,GAEvB1rC,QAAS,WACLhmB,KAAKgD,OAAO6E,OAAOugC,EAAQpoC,KAAKqlD,YAGxC4N,OAAShC,aAAc5D,EAAkB,eAAgB,eAAgB,8BACzEmB,aACI5wD,MAAO2vD,EAAO7sD,QACVC,KAAM,SAAUqC,EAAQwqD,EAAUptD,GAC9BmtD,EAAOtpD,GAAGtD,KAAKwH,KAAKnI,KAAMgD,EAAOlL,QAAQ,GAAI01D,EAAUptD,GACvDJ,KAAKgD,OAASA,EACdhD,KAAKqlD,QAAU5uD,EAAEuP,MAAMhG,KAAKmpC,OAAQnpC,MACpCA,KAAKgD,OAAO7L,MAAMixC,EAAQpoC,KAAKqlD,SAC/BrlD,KAAK0xD,aAAc,GAEvBvoB,OAAQ,WAAA,GAMI9gB,GACAkiB,EACAzvC,EAAOo4D,EACPC,EACA5mB,EACA6mB,EACAC,EACA7O,EAZJ59C,EAAO5G,KAAMszD,EAAY1sD,EAAK4mD,SAASoD,GAAOjtC,MAAOgsC,EAAiB/oD,EAAKxG,QAAQuvD,eAAgB4D,EAAY5D,EAAiB/oD,EAAK5D,OAAOpF,QAAUgJ,EAAK5D,OAAOqjB,YAClKnI,EAAQle,KAAKI,QAAQwuD,gBAAkB5uD,KAAKI,QAAQuyD,aAGxD,IAFAY,EAAYA,EAAU/sD,MAAM,GAC5BI,EAAK8qD,aAAc,EACf4B,YAAqB/3D,GAAiB,CAStC,IARI8sB,KACAkiB,EAAYgpB,EAAU57D,OACtBmD,EAAI,EAAGo4D,EAAI,EACXC,EAAMG,EAAUx4D,GAChByxC,GAAO,EAIJ4mB,IAAQx8D,GAAW,CAEtB,IADA6tD,GAAQ,EACH0O,EAAI,EAAGA,EAAI3oB,EAAW2oB,IAQvB,GAPIvD,EACApjB,EAAOgnB,EAAUL,IAAMC,GAEvBE,EAAWE,EAAUL,GACrBG,EAAWA,EAAS1vC,IAAM0vC,EAAS1vC,IAAIzF,GAASm1C,EAChD9mB,EAAO8mB,IAAaF,EAAIxvC,IAAMwvC,EAAIxvC,IAAIzF,GAASi1C,IAE/C5mB,EAAM,CACNgnB,EAAUnrD,OAAO8qD,EAAG,GACpB3oB,GAAa,EACbia,GAAQ,CACR,OAGHA,EAKD1pD,GAAK,GAJLutB,EAAOvgB,KAAKqrD,GACZzC,EAAY4C,EAAWx4D,EAAG,GAC1Bs4D,EAAct4D,GAIlBq4D,EAAMG,EAAUx4D,GAEpB41D,EAAY4C,EAAWA,EAAU37D,OAAQ,EAAG47D,GACxClrC,EAAO1wB,QACP27D,EAAUtrD,QAAQ,UACdqvB,OAAQ,SACR3Q,MAAO2B,EACPlW,MAAOihD,IAGXG,EAAU57D,QACV27D,EAAUtrD,QAAQ,UACdqvB,OAAQ,MACR3Q,MAAO6sC,EACPphD,MAAOmhD,EAAU37D,OAAS,QAIlCiP,GAAK4mD,SAASoD,GAAOhtC,IAAI2vC,EAE7B3sD,GAAK8qD,aAAc,GAEvB/5C,QAAS,WACL,IAAK3X,KAAK0xD,YAAa,CACnB,GAAqK/5D,GAAqB67D,EAAtLpzD,EAAUJ,KAAKI,QAAS4C,EAAShD,KAAKgD,OAAQkb,EAAQ9d,EAAQwuD,gBAAkBxuD,EAAQuyD,cAAe/0D,EAAQoC,KAAKwtD,SAAS5vD,MAAM+lB,MAAOnoB,EAAOoC,EAAOD,EAAM,EAAWuU,IAI7K,IAHItU,IAAUjH,IACViH,EAAQ,MAERsgB,EACA,GAAItgB,YAAiBrC,GAAiB,CAClC,IAAK5D,EAASiG,EAAMjG,OAAQgG,EAAMhG,EAAQgG,IACtC61D,EAAgB51D,EAAMD,GACtBuU,EAAOvU,GAAO61D,EAAc7vC,IAAM6vC,EAAc7vC,IAAIzF,GAASs1C,CAEjE51D,GAAQsU,MACDtU,aAAiBi6C,KACxBj6C,EAAQA,EAAM+lB,IAAIzF,GAGtB9d,GAAQwvD,YAAa,GAASxvD,EAAQuvD,kBAAmB,GAAS3sD,EAAOywD,WAGzEzwD,EAAOpF,MAAMA,GAFboF,EAAOgwD,WAAWx3D,EAAMoC,KAMpCooB,QAAS,WACLhmB,KAAKgD,OAAO6E,OAAOugC,EAAQpoC,KAAKqlD,aAI5CqO,WACIz4D,OAAQoyD,EAAkB,SAAU,aAAc,iBAAiB3sD,QAC/DktD,UAAW,SAAU3lD,GAAV,GACHtK,GACAhG,EAGA6D,EAAMmI,EAFNX,EAAShD,KAAKgD,OACdyjB,EAAWxe,EAAEomD,YAAcrrD,EAAO0jB,OAEtC,IAAID,EAAS9uB,OAGT,IAFA6D,EAAOyM,EAAEsmD,gBAAkBvrD,EAAOqjB,YAClC1iB,EAAU3D,KAAKwtD,SAASvyD,OAAOgzD,WAC1BtwD,EAAM,EAAGhG,EAAS6D,EAAK7D,OAAQgG,EAAMhG,EAAQgG,IAC9CowD,EAAYtnC,EAAS9oB,GAAMnC,EAAKmC,GAAMqC,KAAKguD,IAAI/lD,EAAEhG,KAAMzG,EAAKmC,IAAMwY,OAAOxS,SAO7F+sD,EAAc,SAAUiD,EAAKh2D,EAAK0qB,EAAQ/mB,GAA5B,GAGVsyD,GACAjwB,EACAkwB,EACAC,EACA3hD,CACJ,IAPA7Q,EAAMA,MACN+mB,EAASA,GAAU,EACfurC,EAAYtyD,EAAI3J,OAChBgsC,EAAYgwB,EAAIh8D,OAChBk8D,KAAartD,MAAM2B,KAAKwrD,EAAKh2D,EAAM0qB,GACnCyrC,EAAgBD,EAAQl8D,OAExBi8D,EAAW,CAGX,IAFAA,EAAYj2D,EAAMi2D,EAClBzhD,EAAQ,EACDxU,EAAMi2D,EAAWj2D,IACpBg2D,EAAIh2D,GAAO2D,EAAI6Q,GACfA,GAEJwhD,GAAIh8D,OAASi8D,MACV,IAAIvrC,EAGP,IAFAsrC,EAAIh8D,OAASgG,EACb0qB,GAAU1qB,EACHA,EAAM0qB,SACFsrC,KAAMtrC,EAGrB,IAAIyrC,EAAe,CAGf,IAFAA,EAAgBn2D,EAAMm2D,EACtB3hD,EAAQ,EACDxU,EAAMm2D,EAAen2D,IACxBg2D,EAAIh2D,GAAOk2D,EAAQ1hD,GACnBA,GAEJwhD,GAAIh8D,OAASm8D,EAGjB,IADAn2D,EAAMg2D,EAAIh8D,OACHgG,EAAMgmC,SACFgwB,GAAIh2D,GACXA,KAGJkyD,EAAgBj5D,EAAM8J,QACtBC,KAAM,SAAU2f,EAAQlgB,GACpBJ,KAAKsgB,OAASA,EACdtgB,KAAKI,QAAUA,EACfJ,KAAK+zD,cAET3sD,KAAM,SAAUomD,GACZ,GAAIzuD,GAAKi1D,EAAUC,EAAWC,EAAWC,EAAYC,EAAQC,EAAgBr0D,eAAgB8uD,GAAqBwF,EAAkBt0D,KAAK2wD,SACzI,KAAK5xD,IAAOyuD,GACJzuD,GAAO6xD,EACPoD,GAAW,EACJj1D,GAAO8xD,EACdoD,GAAY,EACLl1D,GAAO+xD,GAAWuD,EAElBt1D,GAAOgyD,EACdoD,GAAa,EACNp1D,GAAOiyD,EACdoD,GAAS,EAETp0D,KAAKu0D,aAAax1D,EAAKyuD,EAAU8G,GANjCJ,GAAY,CAShBD,IACAj0D,KAAKu0D,aAAa1D,EAAQrD,EAAU8G,GAEpCN,GACAh0D,KAAKu0D,aAAa3D,EAAOpD,EAAU8G,GAEnCH,GACAn0D,KAAKu0D,aAAaxD,EAASvD,EAAU8G,GAErCJ,IAAcG,GACdr0D,KAAKu0D,aAAazD,EAAQtD,EAAU8G,GAEpCF,IAAWC,GACXr0D,KAAKu0D,aAAavD,EAAKxD,EAAU8G,IAGzC3D,QAAS,WACL,MAAOA,GAAQ3wD,KAAKsgB,OAAOjd,SAASvG,oBAExCy3D,aAAc,SAAUrlD,EAAMs+C,EAAU8G,GACpC,GAAiF5jB,GAA7E8jB,EAASF,EAAgBplD,IAASyhD,EAAQzhD,GAAO6kD,EAAY/zD,KAAK+zD,UAAsB3E,EAAU5B,EAASt+C,EAC/G,IAAIslD,EAGA,GAFAA,EAAS,GAAIA,GAAOx0D,KAAKsgB,OAAQktC,EAAUxtD,KAAKI,SAChD2zD,EAAUjsD,KAAK0sD,GACXpF,YAAmBU,GACnB0E,EAAOptD,KAAKgoD,GACZ2E,EAAUjsD,KAAKsnD,OAEf,KAAK1e,IAAa0e,GACdoF,EAAOptD,KAAKgoD,EAAS1e,GACrBqjB,EAAUjsD,KAAKsnD,EAAQ1e,QAG5B,IAAa,aAATxhC,EACP,KAAUpG,OAAM,OAASoG,EAAO,oCAAsClP,KAAKsgB,OAAOjd,SAASvG,cAAgB,aAGnHkpB,QAAS,WACL,GAAIroB,GAAKhG,EAAQo8D,EAAY/zD,KAAK+zD,SAClC,KAAKp2D,EAAM,EAAGhG,EAASo8D,EAAUp8D,OAAQgG,EAAMhG,EAAQgG,IACnDo2D,EAAUp2D,GAAKqoB,aAIvB8oC,EAAsBe,EAAcnvD,QACpCiwD,QAAS,WACL,MAAOA,GAAQ3tD,OAAOhD,KAAKsgB,OAAOlgB,QAAQ8O,KAAKpS,oBAEnDy3D,aAAc,SAAUrlD,EAAMs+C,EAAU8G,GACpC,GAAwF5jB,GAApF8jB,EAASF,EAAgBplD,IAASyhD,EAAQ3tD,OAAOkM,GAAO6kD,EAAY/zD,KAAK+zD,UAAsB3E,EAAU5B,EAASt+C,EACtH,KAAIslD,EAaA,KAAU1rD,OAAM,OAASoG,EAAO,oCAAsClP,KAAKsgB,OAAOlgB,QAAQ8O,KAAO,UAVjG,IAFAslD,EAAS,GAAIA,GAAOx0D,KAAKsgB,OAAQktC,EAAUxtD,KAAKsgB,OAAOlgB,SACvD2zD,EAAUjsD,KAAK0sD,GACXpF,YAAmBU,GACnB0E,EAAOptD,KAAKgoD,GACZ2E,EAAUjsD,KAAKsnD,OAEf,KAAK1e,IAAa0e,GACdoF,EAAOptD,KAAKgoD,EAAS1e,GACrBqjB,EAAUjsD,KAAKsnD,EAAQ1e,OAcvCwe,EAAiB,wCAAyCM,EAAmB,MAiKjFv3D,EAAM4P,OAASA,EACf5P,EAAMmP,KAAOA,EACbnP,EAAMuD,KAAKm1D,QAAUA,EACrB14D,EAAMuD,KAAK+xD,OAASA,EACpBt1D,EAAM6uB,OAASA,EACf7uB,EAAM8gC,WAAa,SAAU4gB,GAIzB,MAHMA,aAAkB9B,KACpB8B,EAAS,GAAI9B,GAAiB8B,IAE3BA,GAEX1hD,EAAMw8D,oBAAsB,SAAUphD,GAElC,QAASqhD,GAAcl5D,GACnB,GAAIV,GAAGH,CACP,KAAKG,EAAI,EAAGA,EAAIU,EAAK7D,OAAQmD,IACzBU,EAAKV,GAAG6vD,gBACRhwD,EAAWa,EAAKV,GAAGH,SACnBA,EAASutD,QACT1sD,EAAKV,GAAG4rB,MAAQ/rB,EAASa,OACzBk5D,EAAcl5D,EAAKV,GAAG4rB,OAR9B,GAAI5B,GAAa7sB,EAAMuD,KAAKG,uBAAuBszC,OAAO57B,EAc1D,OAHAyR,GAAWojC,QACXwM,EAAc5vC,EAAWtpB,QACzBspB,EAAWmyB,MAAMqU,YAAcxmC,EACxBA,EAAWmyB,QAExBvgD,OAAOuB,MAAM8sB,QACRruB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAO2iC,IAAM3iC,OAAS,SAAU4iC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAU9iC,EAAGC,QACVA,OAAO,cACH,aACA,eACA,YACDD,IACL,WAsRE,MAzQC,UAAUE,EAAGE,GAgLV,QAASg+D,GAAgBt1B,GACrB,IAAKA,EACD,QAEJ,IAAIvrB,GAAUurB,EAAWhnC,MAAMu8D,MAC/B,QACI11D,KAAM4U,EAAQ,GACdmnB,UAAWnnB,EAAQ,GACnBxT,QAAwB,YAAfwT,EAAQ,IAxL5B,GACO7b,GAAQvB,OAAOuB,MAAOoM,EAAapM,EAAMoM,WAAYwwD,EAAS,SAAUxpB,EAAO,OAAQypB,EAAO,OAAQC,EAAO,OAAQC,EAAmB,kBAAmBC,EAAiB,gBAAiBC,EAAS,SAAUC,EAAS,SAAUC,EAAoB,0BACvPC,EAAOhxD,EAAW3D,QAClBC,KAAM,SAAU20D,EAASl1D,GACrB,GAAIwG,GAAO5G,IACXI,GAAUA,MACViE,EAAWJ,GAAGtD,KAAKwH,KAAKvB,GACxBA,EAAK0uD,QAAUA,EACf1uD,EAAKmd,GAAK9rB,EAAM4rB,OAChBjd,EAAK0d,QAAUlkB,EAAQkkB,SAAW,MAClC1d,EAAK+oC,MAAQvvC,EAAQuvC,MACrB/oC,EAAK2uD,MAAQn1D,EAAQvH,QAAS,EAC9BmH,KAAKw1D,cAAgBp1D,EAAQq1D,eAAgB,EAC7C7uD,EAAK8uD,cACL9uD,EAAKQ,MACDikC,EACAypB,EACAC,EACAC,EACAC,GACD70D,IAEPmI,OAAQ,SAAUsf,GACd,GAAIjhB,GAAO5G,KAAM21D,GAAkB/uD,EAAK9O,OAexC,OAdI69D,KACA/uD,EAAK9O,QAAU8O,EAAKgvD,kBAEpB/tC,GACApxB,EAAEoxB,GAAW2c,OAAO59B,EAAK9O,SAEzB69D,IACA19D,EAAMmP,KAAKR,EAAK9O,QAAS8O,EAAK+oC,OAC9B/oC,EAAKoB,QAAQqjC,IAEbxjB,IACAjhB,EAAKivD,cAAcX,GACnBtuD,EAAKoB,QAAQ8sD,IAEVluD,EAAK9O,SAEhBqE,MAAO,WACH,MAAO,IAAI25D,GAAU91D,OAEzB+1D,kBAAmB,WACf,OAAO,GAEXC,kBAAmB,WACf,OAAO,GAEXC,UAAW,WACPj2D,KAAKlI,QAAQE,IAAI,UAAW,KAEhCk+D,QAAS,aAETC,QAAS,WACLn2D,KAAKc,QAET2kC,iBAAkB,SAAUvmC,GACxBc,KAAKgI,QAAQgtD,GAAoB91D,KAAMA,KAE3CwmC,gBAAiB,SAAUxmC,GACvBc,KAAKgI,QAAQitD,GAAkB/1D,KAAMA,KAEzC4B,KAAM,WACFd,KAAK61D,cAAcV,GACnBn1D,KAAKlI,QAAQs+D,SACbp2D,KAAKgI,QAAQ+sD,IAEjB/uC,QAAS,WACL,GAAIluB,GAAUkI,KAAKlI,OACfA,KACAG,EAAM4P,OAAO/P,GACbG,EAAM+tB,QAAQluB,GACdA,EAAQuwB,WAGhBguC,UAAW,SAAUA,GACjB5/D,EAAEiK,OAAOV,KAAK01D,WAAYW,IAE9BR,cAAe,SAAUS,GACrB,IAAK,GAAI54C,KAAe1d,MAAK01D,WACzB11D,KAAK01D,WAAWh4C,GAAa44C,GAAYt2D,KAAM0d,IAGvDk4C,eAAgB,WAAA,GAC2C99D,GAASw9D,EAuBpDt2D,EAvBR4H,EAAO5G,KAAM5G,EAAU,IAAMwN,EAAK0d,QAAU;AAChD,IACIgxC,EAAU7+D,EAAE8G,SAASg5D,eAAe3vD,EAAK0uD,UAAY1uD,EAAK0uD,SACtDA,EAAQ,GAAGhxC,UAAYuwC,IACvBS,EAAUA,EAAQ5yD,QAExB,MAAOuF,GACDmtD,EAAkBl7D,KAAK+N,EAAEyc,WACzB4wC,EAAU1uD,EAAK0uD,SAyBvB,MAtBuB,gBAAZA,IACPA,EAAUA,EAAQp+D,QAAQ,aAAc,IACpC0P,EAAK4uD,gBACLF,EAAUr9D,EAAMwK,SAAS6yD,GAAS1uD,EAAK+oC,YAE3C73C,EAAUrB,EAAE2C,GAASorC,OAAO8wB,GACvB1uD,EAAK2uD,QACNz9D,EAAUA,EAAQ0+D,cAGtB1+D,EAAUw9D,EACN1uD,EAAK4uD,gBACDx2D,EAASvI,EAAEwB,EAAMwK,SAAShM,EAAE,WAAW+tC,OAAO1sC,EAAQqE,OAAM,IAAOuG,QAAQkE,EAAK+oC,YAChFl5C,EAAEqM,SAASvF,SAAUzF,EAAQ,KAC7BA,EAAQ2+D,YAAYz3D,GAExBlH,EAAUkH,GAEV4H,EAAK2uD,QACLz9D,EAAUA,EAAQ2hD,QAAQrgD,GAASO,WAGpC7B,KAGXg+D,EAAY79D,EAAMrB,MAAM8J,QACxBC,KAAM,SAAUmoB,GACZryB,EAAEiK,OAAOV,MACLlI,QAASgxB,EAAKhxB,QAAQqE,OAAM,GAC5BkjC,WAAYvW,EAAKuW,WACjBtb,GAAI+E,EAAK/E,KAEb+E,EAAKhxB,QAAQ6B,SAAS6qC,OAAOxkC,KAAKlI,UAEtCq+D,QAAS,WACLn2D,KAAKlI,QAAQuwB,UAEjBod,iBAAkBhvC,EAAEmK,KACpB8kC,gBAAiBjvC,EAAEmK,OAEnB81D,EAASrB,EAAK30D,QACdC,KAAM,SAAU20D,EAASl1D,GACrBi1D,EAAKpxD,GAAGtD,KAAKwH,KAAKnI,KAAMs1D,EAASl1D,GACjCJ,KAAK22D,eAET9uC,UAAW,SAAU9jB,GACjB,GAAI8jB,GAAY7nB,KAAK22D,WAAW5yD,EAKhC,OAJK8jB,KACDA,EAAY7nB,KAAK42D,iBAAiB7yD,GAClC/D,KAAK22D,WAAW5yD,GAAY8jB,GAEzBA,GAEXgvC,OAAQ,SAAU9yD,EAAU+kB,EAAMuW,GAC9Br/B,KAAK6nB,UAAU9jB,GAAUo+B,KAAKrZ,EAAMuW,IAExCu3B,iBAAkB,SAAU7yD,GACxB,GAAyD8jB,GAArDogB,EAAOjoC,KAAKuI,SAAUzQ,EAAUmwC,EAAKzgB,KAAKzjB,EAC9C,KAAKjM,EAAQH,QAAUswC,EAAKnuC,GAAGiK,GAAW,CACtC,IAAIkkC,EAAKnuC,GAAGiK,GAGR,KAAU+E,OAAM,6CAAgD/E,EAAW,YAF3EjM,GAAUmwC,EASlB,MAJApgB,GAAY,GAAIivC,GAAch/D,GAC9B+vB,EAAUzgB,KAAK,WAAY,SAAUa,GACjCA,EAAE6gB,KAAKvgB,OAAOzQ,KAEX+vB,KAGXkvC,EAAW1B,EAAK30D,QAChBs2D,OAAQ,SAAUluC,EAAMpL,GACpBoL,EAAKhxB,QAAQ0vB,KAAK9J,GAAa+4C,YAAYz2D,KAAKuI,WAEpD6tD,OAAQ,eAGRxB,EAAmB,4BAYnBkC,EAAgBzyD,EAAW3D,QAC3BC,KAAM,SAAUknB,GACZxjB,EAAWJ,GAAGtD,KAAKwH,KAAKnI,MACxBA,KAAK6nB,UAAYA,EACjB7nB,KAAK6e,WACL7e,KAAK8oB,KAAO,KACZ9oB,KAAKi3D,SAAU,GAEnBC,MAAO,WACHl3D,KAAKi3D,SAAU,EACfj3D,KAAKgI,QAAQ,YAAc8gB,KAAM9oB,KAAK8oB,OACtC9oB,KAAKgI,QAAQ,UAEjBtQ,IAAK,WACDsI,KAAK8oB,KAAKotC,UACVl2D,KAAKqjC,SAAS8yB,UACdn2D,KAAKk3D,SAET/0B,KAAM,SAAUrZ,EAAMuW,EAAY83B,GAC9B,IAAKruC,EAAKitC,qBAAuB/1D,KAAK8oB,OAAS9oB,KAAK8oB,KAAKktC,oBAErD,MADAh2D,MAAKgI,QAAQ,UACN,CAEXmvD,GAAaA,GAAcruC,EAAK/E,EAChC,IAAInd,GAAO5G,KAAM2L,EAAUmd,IAASliB,EAAKkiB,KAAOA,EAAK3sB,QAAUyK,EAAKkiB,KAAMjK,EAAUjY,EAAKiY,QAASu4C,EAAgBv4C,EAAQA,EAAQlnB,OAAS,OAAUitC,EAAOwyB,EAAcrzC,KAAOozC,EAAYE,EAAgBh4B,IAAeuF,EAAO/lB,EAAQA,EAAQlnB,OAAS,GAAG0nC,WAAavW,EAAKuW,YAAai4B,EAAiB3C,EAAgB0C,EAmB/T,OAlBIzwD,GAAKqwD,SACLrwD,EAAK25B,OAAOvgB,OAEM,SAAlBq3C,IACAA,EAAgB,MAEpBzwD,EAAKoB,QAAQ,YAAc8gB,KAAMA,IACjCliB,EAAKkiB,KAAOA,EACZliB,EAAKy8B,SAAW13B,EAChB/E,EAAKqwD,SAAU,EACVryB,EAMD/lB,EAAQqN,MALRrN,EAAQ/W,MACJic,GAAIozC,EACJ93B,WAAYg4B,IAKf1rD,GAMA0rD,GAAkBp/D,EAAM8H,QAAQwf,SAIjCuJ,EAAKhxB,QAAQwC,SAAS,eACtBwuB,EAAKmtC,YACDrxB,IAASvF,IACTi4B,EAAeh3D,SAAWg3D,EAAeh3D,SAE7CsG,EAAK25B,OAAStoC,EAAMgI,GAAG6oB,EAAKhxB,SAASZ,QAAQyU,EAAQ7T,QAASw/D,EAAep4D,MAAMumC,iBAAiB,WAChG3c,EAAK2c,iBAAiB,QACtB95B,EAAQ85B,iBAAiB,UAC1BC,gBAAgB,WACf5c,EAAK4c,gBAAgB,QACrB/5B,EAAQ+5B,gBAAgB,UACzBzK,UAAUq8B,EAAer8B,WAAWyG,WAAW41B,EAAeh3D,SACjEsG,EAAK25B,OAAOY,MAAMM,KAAK,WACnB76B,EAAKlP,UAhBToxB,EAAKmtC,YACLrvD,EAAKlP,QAkBF,IAzBHoxB,EAAKmtC,YACLntC,EAAKotC,UACLtvD,EAAKswD,SACE,KAyBnBj/D,GAAM6+D,cAAgBA,EACtB7+D,EAAM8+D,SAAWA,EACjB9+D,EAAMy+D,OAASA,EACfz+D,EAAMo9D,KAAOA,EACbp9D,EAAM69D,UAAYA,GACpBp/D,OAAOuB,MAAM8sB,QACRruB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAO2iC,IAAM3iC,OAAS,SAAU4iC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAU9iC,EAAGC,QACVA,OAAO,sBAAuB,cAAeD,IAC/C,WAwEE,MAhEC,UAAUE,GACP,GAAIgrD,GAAYxpD,MAAMuD,KAAK48C,gBAAgB13C,QACvCC,KAAM,SAAUP,GAAV,GAUEm3D,GATAC,EAAUp3D,GAAWA,EAAQo3D,QAAUp3D,EAAQo3D,WAC/Cr2D,EAAUq2D,EAAQr2D,OACtB,KAAKA,EACD,KAAU2H,OAAM,oCAEpB,IAA2B,kBAAhB3H,GAAQqlC,MAA6C,kBAAhBrlC,GAAQs2D,KACpD,KAAU3uD,OAAM,0CAIpB,IAFA9I,KAAKmB,QAAUA,EACXo2D,EAAMC,EAAQD,KACbA,EACD,KAAUzuD,OAAM,gCAEpB,IAAqB,kBAAVyuD,GAAI7xD,IAAyC,kBAAd6xD,GAAI1hC,OAC1C,KAAU/sB,OAAM,qDAEpB9I,MAAKu3D,IAAMA,EACXt/D,MAAMuD,KAAK48C,gBAAgBn0C,GAAGtD,KAAKwH,KAAKnI,KAAMI,IAElD0H,KAAM,SAAU4vD,GACZ,GAAInkC,GAASvzB,KAAKI,QAAQo3D,QAAQjkC,UAC9BA,GAAO0b,QACPjvC,KAAKu3D,IAAI7xD,GAAG6tB,EAAO0b,OAAQyoB,EAAUhW,YAErCnuB,EAAOyb,QACPhvC,KAAKu3D,IAAI7xD,GAAG6tB,EAAOyb,OAAQ0oB,EAAU9V,YAErCruB,EAAOvN,SACPhmB,KAAKu3D,IAAI7xD,GAAG6tB,EAAOvN,QAAS0xC,EAAU5V,cAG9C6V,MAAO,SAAUv3D,EAASlB,GAAnB,GAMCupB,GACAjtB,EANA+7D,EAAMv3D,KAAKu3D,IACXK,EAAS53D,KAAKI,QAAQo3D,QAAQI,MAClC,KAAKA,IAAWA,EAAO14D,GACnB,KAAU4J,OAAM7Q,MAAM8Q,OAAO,uCAAwC7J,GAErEupB,IAAQmvC,EAAO14D,IACf1D,EAAOwE,KAAKkvC,aAAa9uC,EAAQ5E,KAAM0D,GACtCzI,EAAE4wB,cAAc7rB,IACjBitB,EAAK3gB,KAAKtM,GAEdwE,KAAKmB,QAAQqlC,KAAK,WACd+wB,EAAI1hC,OAAO/uB,MAAMywD,EAAK9uC,GAAM+d,KAAKpmC,EAAQs/C,SAAS+X,KAAKr3D,EAAQu/C,UAGvEnR,KAAM,SAAUpuC,GACZJ,KAAK23D,MAAMv3D,EAAS,SAExB6uC,OAAQ,SAAU7uC,GACdJ,KAAK23D,MAAMv3D,EAAS,WAExB4uC,OAAQ,SAAU5uC,GACdJ,KAAK23D,MAAMv3D,EAAS,WAExB4lB,QAAS,SAAU5lB,GACfJ,KAAK23D,MAAMv3D,EAAS,aAG5B3J,GAAEiK,QAAO,EAAMzI,MAAMuD,MAAQszC,YAAc0oB,QAAS/V,MACtD/qD,OAAOuB,MAAM8sB,QACRruB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAO2iC,IAAM3iC,OAAS,SAAU4iC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAU9iC,EAAGC,QACVA,OAAO,oBAAqB,cAAeD,IAC7C,WAicE,MAzbC,UAAUE,EAAGE,GASV,QAASkhE,GAAWC,EAAQC,GACxB,GAAIC,GAAKF,EAAOxkC,EAAEzX,SAAUo8C,EAAKH,EAAOzmD,EAAEwK,SAAUq8C,EAAKH,EAAOzkC,EAAEzX,SAAUs8C,EAAKJ,EAAO1mD,EAAEwK,SAAUu8C,EAAKJ,EAAKE,EAAIG,EAAKJ,EAAKE,CAC5H,QACIG,QACIhlC,GAAI0kC,EAAKE,GAAM,EACf7mD,GAAI4mD,EAAKE,GAAM,GAEnBI,SAAU35D,KAAK45D,KAAKJ,EAAKA,EAAKC,EAAKA,IAG3C,QAASI,GAAWxwD,GAChB,GAA6FtQ,GAAQ8oB,EAAgBnI,EAAjHiI,KAAcC,EAAgBvY,EAAEuY,cAAek4C,EAAgBzwD,EAAEywD,cAAe/6D,EAAM,CAC1F,IAAIsK,EAAE0wD,IACFp4C,EAAQzY,MACJic,GAAI,EACJjL,MAAO7Q,EACPqY,OAAQrY,EAAEqY,OACVo4C,cAAezwD,EAAEqY,OACjBzE,SAAU5T,EACV/I,KAAM,YAEP,IAAI+I,EAAE/I,KAAK7G,MAAM,SAEpB,IADAooB,EAAiBD,EAAgBA,EAAcC,kBAC1C9oB,EAAS8oB,EAAe9oB,OAAQgG,EAAMhG,EAAQgG,IAC/C2a,EAAQmI,EAAe9iB,GACvB4iB,EAAQzY,MACJ+T,SAAUvD,EACVQ,MAAO7Q,EACPqY,OAAQhI,EAAMgI,OACdo4C,cAAeA,EACf30C,GAAIzL,EAAMsgD,WACV15D,KAAM,cAIdqhB,GAAQzY,KADD5P,EAAQqH,UAAYrH,EAAQsH,YAE/Bqc,SAAU2E,EACV1H,MAAO7Q,EACPqY,OAAQrY,EAAEqY,OACVo4C,cAAeA,EACf30C,GAAIvD,EAAcq4C,UAClB35D,KAAM,YAIN6kB,GAAI,EACJjL,MAAO7Q,EACPqY,OAAQrY,EAAEqY,OACVo4C,cAAeA,EACf78C,SAAU5T,EACV/I,KAAM,SAGd,OAAOqhB,GAmIX,QAASu4C,GAAgBj4C,GAErB,IADA,GAAIk4C,GAAa9gE,EAAMsN,SAAS6Z,GAAGpoB,MAAM,KAAM2G,EAAM,EAAGhG,EAASohE,EAAWphE,OACrEgG,EAAMhG,EAAQgG,IACjBkjB,EAASk4C,EAAWp7D,IApM/B,GACO1F,GAAQvB,OAAOuB,MAAOC,EAAUD,EAAMC,QAAStB,EAAQqB,EAAMrB,MAAOyN,EAAapM,EAAMoM,WAAYw7B,EAAMppC,EAAEopC,IAAKn/B,EAASjK,EAAEiK,OAAQs4D,EAAK9gE,EAAQof,SAAU2hD,EAAoBD,GAAMA,EAAGj/C,QAASm/C,EAAmB,IAAKC,EAAoBjhE,EAAQoB,QAAQiB,KAAO,EAAI,EAAG6+D,EAAQ,QAASC,EAAO,OAAQC,EAAS,SAAUC,EAAQ,QAASC,EAAO,OAAQh3C,EAAM,MAAOi3C,EAAS,SAAUC,EAAM,MAAOC,EAAU,UAAWC,EAAe,eAAgBC,EAAgB,gBAAiBC,EAAa,aAAcC,EAAa,aACvgBC,GACArB,IAAO,EACPrgD,MAAS,EACT2hD,MAAS,EACTC,QAAW,GAEXC,GAAyBjiE,EAAQogB,OAASpgB,EAAQikB,qBAwDlDi+C,EAAYxjE,EAAM8J,QAClBC,KAAM,SAAUmzB,EAAMjY,GAClB,GAAIjV,GAAO5G,IACX4G,GAAKktB,KAAOA,EACZltB,EAAKyzD,oBAAoBx+C,GACzBjV,EAAK0zD,cAAgB1zD,EAAKiV,SAC1BjV,EAAK2zD,SAAW3zD,EAAK8sB,MAAQ,EAC7B9sB,EAAK4zD,UAAY36B,KAErB3U,KAAM,SAAUrP,GACZ,GAAIjV,GAAO5G,KAAMZ,EAASyc,EAAS,OAASjV,EAAKktB,MAAO0mC,EAAY36B,IAAO46B,EAAYD,EAAY5zD,EAAK4zD,WAAa,GAChHp7D,GAAU65D,IAGfryD,EAAK8sB,MAAQt0B,EAASwH,EAAKiV,SAC3BjV,EAAKyzD,oBAAoBx+C,GACzBjV,EAAK8zD,aAAet7D,EAASwH,EAAK0zD,cAClC1zD,EAAK2zD,SAAW3zD,EAAK8sB,MAAQ+mC,EAC7B7zD,EAAK4zD,UAAYA,IAErBH,oBAAqB,SAAUx+C,GAC3B,GAAIjV,GAAO5G,KAAM8zB,EAAOltB,EAAKktB,IAC7BltB,GAAKiV,SAAWA,EAAS,OAASiY,GAClCltB,EAAK2sB,OAAS1X,EAAS,SAAWiY,GAClCltB,EAAKqS,OAAS4C,EAAS,SAAWiY,MAGtC6mC,EAAQ/jE,EAAM8J,QACdC,KAAM,SAAUi6D,EAAYt6C,EAAQu6C,GAChCn6D,EAAOV,MACHszB,EAAG,GAAI8mC,GAAU,IAAKS,EAAUh/C,UAChCxK,EAAG,GAAI+oD,GAAU,IAAKS,EAAUh/C,UAChC3c,KAAM27D,EAAU37D,KAChB47D,cAAeF,EAAWE,cAC1B98C,UAAW48C,EAAW58C,WAAag8C,EAAUa,EAAU37D,MACvD07D,WAAYA,EACZt6C,OAAQA,EACRo4C,cAAemC,EAAUnC,cACzBqC,aAAcF,EAAUv6C,OACxByD,GAAI82C,EAAU92C,GACdi3C,WAAYH,EACZI,QAAQ,EACRC,WAAW,KAGnBC,MAAO,WACHn7D,KAAKo7D,aAAevxC,WAAWpzB,EAAEuP,MAAMhG,KAAM,SAAUA,KAAK46D,WAAWS,SACvEr7D,KAAKs7D,SAASlC,EAAOp5D,KAAKg7D,aAE9BO,MAAO,WACHv7D,KAAKs7D,SAASjC,EAAMr5D,KAAKg7D,aAE7B9vC,KAAM,SAAU2vC,GACZ,GAAIj0D,GAAO5G,IACX,KAAI4G,EAAKs0D,UAAT,CAKA,GAFAt0D,EAAK0sB,EAAEpI,KAAK2vC,EAAUh/C,UACtBjV,EAAKyK,EAAE6Z,KAAK2vC,EAAUh/C,WACjBjV,EAAKq0D,OAAQ,CACd,GAAIr0D,EAAK40D,yBACL,MAEJ,IAAKC,EAAW9vD,SAAW8vD,EAAW9vD,UAAY/E,EAAKg0D,WAGnD,MAAOh0D,GAAK80D,SAFZ90D,GAAK+0D,OAAOd,GAKfj0D,EAAKs0D,WACNt0D,EAAK00D,SAAS9B,EAAMqB,KAG5BnjE,IAAK,SAAUmjE,GACX76D,KAAK47D,QAAU/7B,IACX7/B,KAAKk7D,YAGTl7D,KAAKk7D,WAAY,EACjBl7D,KAAKs7D,SAAS3B,EAASkB,GACnB76D,KAAKi7D,OACLj7D,KAAKs7D,SAAS94C,EAAKq4C,GAEd76D,KAAK86D,eACN96D,KAAKs7D,SAAS5B,EAAKmB,GAG3B9vC,aAAa/qB,KAAKo7D,cAClBp7D,KAAK07D,YAETA,QAAS,WACL,GAAId,GAAa56D,KAAK46D,WAAYiB,EAAgBjB,EAAWr6C,OAC7DvgB,MAAKk7D,WAAY,EACjBl7D,KAAKg7D,WAAa,KAClBjwC,aAAa/qB,KAAKo7D,cAClBS,EAAczzD,OAAO3R,EAAEwM,QAAQjD,KAAM67D,GAAgB,IAEzD1tB,KAAM,WACFnuC,KAAK07D,WAETvwC,OAAQ,WACJnrB,KAAK07D,WAETI,QAAS,WACL,MAAO97D,MAAKi7D,QAEhBU,OAAQ,SAAUd,GACd9vC,aAAa/qB,KAAKo7D,cAClBp7D,KAAK+7D,UAAYl8B,IACjB7/B,KAAKi7D,QAAS,EACdj7D,KAAKs7D,SAAS/B,EAAOsB,IAEzBS,SAAU,SAAUpsD,EAAM2rD,GACtB,GAAIj0D,GAAO5G,KAAMyzB,EAAconC,EAAU/hD,MAAOtd,GACxC8c,MAAO1R,EACP0sB,EAAG1sB,EAAK0sB,EACRjiB,EAAGzK,EAAKyK,EACRiP,OAAQ1Z,EAAK0Z,OACbxH,MAAO2a,EAEX7sB,GAAKg0D,WAAW9zC,OAAO5X,EAAM1T,IAC7Bi4B,EAAYtvB,kBAGpBq3D,uBAAwB,WACpB,GAAIQ,GAASh8D,KAAKszB,EAAEonC,aAAcuB,EAASj8D,KAAKqR,EAAEqpD,YAClD,OAAO97D,MAAK45D,KAAKwD,EAASA,EAASC,EAASA,IAAWj8D,KAAKge,aAShEy9C,EAAap3D,EAAW3D,QACxBC,KAAM,SAAU7I,EAASsI,GAAnB,GACeyD,GA0BLq4D,EAWJC,EAAkCC,EArCtCx1D,EAAO5G,KAAciC,EAAKhK,EAAM4rB,MACpCzjB,GAAUA,MACVyD,EAAS+C,EAAK/C,OAASzD,EAAQyD,OAC/B+C,EAAKoX,UAAY5d,EAAQ4d,WAAam7C,EACtCvyD,EAAKy0D,QAAUj7D,EAAQi7D,SAAWnC,EAClCtyD,EAAK2Z,WACL3Z,EAAKy1D,YAAcj8D,EAAQk8D,WAAa,EAAI,EAC5C11D,EAAK21D,eAAiBn8D,EAAQm8D,eAC9B31D,EAAK41D,iBAAmBp8D,EAAQo8D,iBAChC51D,EAAKk0D,eAAiB16D,EAAQq8D,UAAYvkE,EAAQgkB,eAClDtV,EAAK81D,QAAUz6D,EACfnK,EAAUrB,EAAEqB,GAAS2P,QAAQb,GAC7BvC,EAAWJ,GAAGtD,KAAKwH,KAAKvB,GACxBlG,EAAOkG,GACH9O,QAASA,EACT6kE,QAAmDlmE,EAA1C2J,EAAQw8D,QAAUzC,EAA0BriE,EAAQ,GAAG+kE,cAAcn9D,gBAAqBU,EAAQu8D,SAAW7kE,GACtH+yB,gBAAiBzqB,EAAQyqB,gBACzBiyC,SAAS,IAEbl2D,EAAK+1D,QAAQl1D,QAAQb,GAAMlB,GAAGzN,EAAMg0B,cAAc,OAAQhqB,GAAK,SAASyD,GAAGzN,EAAMg0B,cAAc,YAAahqB,GAAK,QACjHnK,EAAQ4N,GAAGzN,EAAMg0B,cAAc,OAAQhqB,GAAK4B,EAAQ,UAChD+C,EAAKk0D,eACLhjE,EAAQ4N,GAAGzN,EAAMg0B,cAAc,QAAShqB,GAAK4B,EAAQ,WAErD3L,EAAQqH,UAAYrH,EAAQsH,cACxBtH,EAAQoB,QAAQmB,QAAU,IACtByhE,EAAgB,6BACpBpkE,EAAQE,IAAI,mBAAoBoI,EAAQ28D,aAAsC,QAAvB38D,EAAQ28D,YAAwBb,EAAgB,IAAM97D,EAAQ28D,YAAcb,IAEnIpkE,EAAQE,IAAI,eAAgBoI,EAAQ28D,aAAe,SAGvD38D,EAAQ48D,kBACRllE,EAAQ4N,GAAGzN,EAAMg0B,cAAc,YAAahqB,GAAKhK,EAAMkM,gBAE3DrM,EAAQ4N,GAAGzN,EAAMg0B,cAAc,YAAahqB,GAAK4B,GAAUokC,KAAMnwC,GAAW,WACxE8O,EAAK41D,kBAAoBtkE,EAAQslB,eAC7B2+C,EAAiBv1D,EAAK+1D,QAAQ,GAAIP,EAAuB3lE,EAAEuP,MAAMY,EAAKq2D,gBAAiBr2D,GAC3FkyD,EAAgB,SAAUzxD,GACtB80D,EAAe1+C,iBAAiBpW,EAAW+0D,GAAsB,MAGzEx1D,EAAKQ,MACDgyD,EACAC,EACAK,EACAH,EACAC,EACAh3C,EACAm3C,EACAF,EACAG,EACAC,EACAC,EACAC,EACAT,GACDl5D,IAEP68D,gBAAiB,SAAUh1D,GACnBjI,KAAKk9D,YACLj1D,EAAE9D,kBAGV6hB,QAAS,WAAA,GAOGm2C,GANJv1D,EAAO5G,IACP4G,GAAKo6C,aAGTp6C,EAAKo6C,YAAa,EACdp6C,EAAK41D,kBAAoBtkE,EAAQslB,eAC7B2+C,EAAiBv1D,EAAK+1D,QAAQ,GAClC7D,EAAgB,SAAUzxD,GACtB80D,EAAegB,oBAAoB91D,EAAWT,EAAKq2D,oBAG3Dr2D,EAAK9O,QAAQ+wB,aAAajiB,EAAK81D,SAC/B91D,EAAK+1D,QAAQ9zC,aAAajiB,EAAK81D,SAC/B91D,EAAK9O,QAAQmuB,WAAW,WACxBrf,EAAK+1D,QAAQ12C,WAAW,WACxBrf,EAAKw2D,cACLx2D,EAAKiB,eACEjB,GAAK+1D,cACL/1D,GAAK9O,cACL8O,GAAK8xD,gBAEhB2E,QAAS,WACL5B,EAAW9vD,QAAU3L,MAEzBmrB,OAAQ,WACJnrB,KAAKo9D,cACLp9D,KAAKgI,QAAQyxD,IAEjB3yC,OAAQ,SAAUzf,EAAW7L,GACzB,GAAIoL,GAAO5G,KAAMugB,EAAU3Z,EAAK2Z,OAChC,IAAIvgB,KAAKs9D,gBAAiB,CACtB,OAAQj2D,GACR,IAAKmyD,GACDnyD,EAAYwyD,CACZ,MACJ,KAAKr3C,GACDnb,EAAYyyD,CACZ,MACJ,KAAKJ,GACDryD,EAAY0yD,EAGhBr5D,EAAOlF,GAAQ+kB,QAASA,GAAWs3C,EAAWt3C,EAAQ,GAAIA,EAAQ,KAEtE,MAAOvgB,MAAKgI,QAAQX,EAAW3G,EAAOlF,GAAQ0D,KAAMmI,MAExD8zD,MAAO,SAAU7nC,EAAGjiB,EAAGiP,GACnBtgB,KAAKu9D,SAAS,SAAUjqC,EAAGjiB,EAAGiP,IAElC4K,KAAM,SAAUoI,EAAGjiB,GACfrR,KAAKu9D,SAAS,QAASjqC,EAAGjiB,IAE9B3Z,IAAK,SAAU47B,EAAGjiB,GACdrR,KAAKu9D,SAAS,OAAQjqC,EAAGjiB,IAE7BisD,cAAe,WACX,MAAOt9D,MAAKugB,QAAQ5oB,OAAS,GAEjC6lE,mBAAoB,WAChB,MAAOx9D,MAAKugB,QAAQ5oB,QAAUqI,KAAKq8D,aAEvCe,YAAa,WAET,IADA,GAAI78C,GAAUvgB,KAAKugB,QACZA,EAAQ5oB,OAAS,GACpB4oB,EAAQ2L,MAAMwvC,WAGtBwB,SAAU,WACN,MAAOzmE,GAAEy2B,KAAKltB,KAAKugB,QAAS,SAAUjI,GAClC,MAAOA,GAAMwjD,YACdnkE,QAEP8lE,QAAS,SAAUx1D,GACVjI,KAAKu8D,iBAAkBv8D,KAAKgI,QAAQsxD,GAAUxgD,MAAO7Q,KACtDA,EAAE9D,kBAGVw3D,OAAQ,SAAU1zD,GACd,GAAgDqY,GAA0DhI,EAAtG1R,EAAO5G,KAAMrC,EAAM,EAAGkG,EAAS+C,EAAK/C,OAAgB0c,EAAUk4C,EAAWxwD,GAAItQ,EAAS4oB,EAAQ5oB,OAAe+lE,EAAQz1D,EAAEy1D,KAC3H,MAAIA,GAASA,EAAQ,GAAK92D,EAAK42D,sBAQ/B,IALA/B,EAAW9vD,QAAU,KACrB/E,EAAK8xD,cAAgBzwD,EAAEywD,cACnB9xD,EAAKikB,iBACL5iB,EAAE4iB,kBAECltB,EAAMhG,IACLiP,EAAK42D,qBADQ7/D,IAIjB2a,EAAQiI,EAAQ5iB,GAEZ2iB,EADAzc,EACSpN,EAAE6hB,EAAMogD,eAER9xD,EAAK9O,QAEbwoB,EAAO3oB,SAGZ2gB,EAAQ,GAAIqiD,GAAM/zD,EAAM0Z,EAAQhI,GAChC1R,EAAK2Z,QAAQzY,KAAKwQ,GAClBA,EAAM6iD,QACFv0D,EAAK02D,iBACL12D,EAAKkgB,OAAO,qBAIxB62C,MAAO,SAAU11D,GACbjI,KAAK49D,WAAW,OAAQ31D,IAE5B41D,KAAM,SAAU51D,GACZjI,KAAK49D,WAAW,MAAO31D,IAE3B61D,OAAQ,SAAU71D,GACd,GAAIzM,IACA8c,OACIyiD,aAAc9yD,EAAEqY,OAChBA,OAAQ7pB,EAAEwR,EAAEywD,eACZkD,QAAS/7B,IACTvM,GACIzX,SAAU5T,EAAE81D,MACZxqC,OAAQtrB,EAAE0Y,SAEdtP,GACIwK,SAAU5T,EAAE+1D,MACZzqC,OAAQtrB,EAAE2Y,UAGlB0S,EAAGrrB,EAAE81D,MACL1sD,EAAGpJ,EAAE+1D,MACL19C,OAAQ7pB,EAAEwR,EAAEywD,eACZ5/C,MAAO7Q,EACP/I,KAAM,MAENc,MAAKgI,QAAQ,MAAOxM,IACpByM,EAAE9D,kBAGVy5D,WAAY,SAAUtH,EAAYruD,GAC9B,GAAmFtK,GAAK2a,EAAOuiD,EAAWoD,EAAtGr3D,EAAO5G,KAAMk+D,KAAW39C,EAAUk4C,EAAWxwD,GAAI4zD,EAAgBj1D,EAAK2Z,OAC1E,KAAK5iB,EAAM,EAAGA,EAAMk+D,EAAclkE,OAAQgG,IACtC2a,EAAQujD,EAAcl+D,GACtBugE,EAAK5lD,EAAMyL,IAAMzL,CAErB,KAAK3a,EAAM,EAAGA,EAAM4iB,EAAQ5oB,OAAQgG,IAChCk9D,EAAYt6C,EAAQ5iB,GACpBsgE,EAAgBC,EAAKrD,EAAU92C,IAC3Bk6C,GACAA,EAAc3H,GAAYuE,IAItC0C,SAAU,SAAUr+D,EAAMo0B,EAAGjiB,EAAGiP,GAC5BtgB,KAAKd,IACDy5D,KAAK,EACLoF,MAAOzqC,EACP0qC,MAAO3sD,EACPsP,QAAS2S,EACT1S,QAASvP,EACTiP,OAAQ7pB,EAAE6pB,GAAUtgB,KAAKlI,SAAS,GAClC+yB,gBAAiBp0B,EAAEmK,KACnBuD,eAAgB1N,EAAEmK,SAI9B66D,GAAW0C,iBAAmB,SAAUvgE,GACpCu7D,EAAoBv7D,GAExB69D,EAAWJ,QAAU,SAAUz9D,GAC3Bs7D,EAAmBt7D,GAEvB3F,EAAMwgE,WAAaA,EACnBxgE,EAAM4/D,WAAaA,EACnB5/D,EAAMwjE,WAAaA,GACrB/kE,OAAOuB,MAAM8sB,QACRruB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAO2iC,IAAM3iC,OAAS,SAAU4iC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAU9iC,EAAGC,QACVA,OAAO,qBACH,aACA,oBACDD,IACL,WAk0BE,MAvzBC,UAAUE,EAAGE,GAEV,QAASmM,GAASnJ,EAAQi4B,GACtB,IACI,MAAOn7B,GAAEqM,SAASnJ,EAAQi4B,IAAUj4B,GAAUi4B,EAChD,MAAO3pB,GACL,OAAO,GAGf,QAASm2D,GAAkBtmE,EAASoD,GAChC,MAAOmX,UAASva,EAAQE,IAAIkD,GAAW,KAAO,EAElD,QAASmjE,GAAOzgE,EAAO+gD,GACnB,MAAO//C,MAAKoT,IAAIpT,KAAKnG,IAAImF,EAAO+gD,EAAM3sC,KAAM2sC,EAAMlmD,KAEtD,QAAS6lE,GAAoBz2C,EAAW/vB,GACpC,GAAIsH,GAASH,EAAU4oB,GAAYtuB,EAAatB,EAAMuB,YAAaC,EAAcxB,EAAMyB,aAAc6kE,EAAOn/D,EAAO1G,KAAO0lE,EAAkBv2C,EAAW,mBAAqBu2C,EAAkBv2C,EAAW,eAAgB22C,EAAOp/D,EAAOE,IAAM8+D,EAAkBv2C,EAAW,kBAAoBu2C,EAAkBv2C,EAAW,cAAe42C,EAAOF,EAAO12C,EAAU7uB,QAAUO,EAAWzB,GAAS,GAAO4mE,EAAOF,EAAO32C,EAAU5uB,SAAWQ,EAAY3B,GAAS,EAC/b,QACIw7B,GACIthB,IAAKusD,EACL9lE,IAAKgmE,GAETptD,GACIW,IAAKwsD,EACL/lE,IAAKimE,IAIjB,QAASC,GAAYr+C,EAAQs+C,EAASC,GAElC,IADA,GAAIC,GAAWC,EAAWjkE,EAAI,EAAGkkE,EAAYJ,GAAWA,EAAQjnE,OAAQsnE,EAAUJ,GAASA,EAAMlnE,OAC1F2oB,GAAUA,EAAO3B,YAAY,CAChC,IAAK7jB,EAAI,EAAGA,EAAIkkE,EAAWlkE,IAEvB,GADAgkE,EAAYF,EAAQ9jE,GAChBgkE,EAAUhnE,QAAQ,KAAOwoB,EACzB,OACIA,OAAQw+C,EACRI,cAAe5+C,EAI3B,KAAKxlB,EAAI,EAAGA,EAAImkE,EAASnkE,IAErB,GADAikE,EAAYF,EAAM/jE,GACdrE,EAAEqM,SAASi8D,EAAUjnE,QAAQ,GAAIwoB,IAAWpoB,EAAQkmB,gBAAgBjW,KAAKmY,EAAQy+C,EAAU3+D,QAAQyD,QACnG,OACIyc,OAAQy+C,EACRG,cAAe5+C,EAI3BA,GAASA,EAAO3B,WAEpB,MAAOhoB,GAmTX,QAASwoE,GAAiB9nB,EAAYr0C,GAClC,GAA0ElI,GAAtEskE,EAAYp8D,EAAO5C,QAAQq0C,MAAO4qB,EAAahoB,EAAW+nB,EAE9D,IADAp6D,EAAOf,GAAG+hB,QAAQ7d,KAAKnF,GACnBq8D,EAAW1nE,OAAS,GACpB,IAAKmD,EAAI,EAAGA,EAAIukE,EAAW1nE,OAAQmD,IAC/B,GAAIukE,EAAWvkE,IAAMkI,EAAQ,CACzBq8D,EAAWj3D,OAAOtN,EAAG,EACrB,YAIRukE,GAAW1nE,OAAS,QACb0/C,GAAW+nB,GA0Y1B,QAASE,GAAmBxnE,GACxB,GAAgCsH,GAAQE,EAAK5G,EAAzCuvC,EAAOs3B,IAAiB,EAC5B,OAAIznE,GAAQ,KAAOmwC,GACf3oC,EAAM2oC,EAAKtoC,UACXjH,EAAOuvC,EAAK7pC,YAERkB,IAAKA,EACL5G,KAAMA,EACNE,OAAQ0G,EAAMkgE,EAAQvmE,SACtBN,MAAOD,EAAO8mE,EAAQxmE,WAG1BoG,EAAStH,EAAQsH,SACjBA,EAAOxG,OAASwG,EAAOE,IAAMxH,EAAQmB,SACrCmG,EAAOzG,MAAQyG,EAAO1G,KAAOZ,EAAQkB,QAC9BoG,GAGf,QAASmgE,KACL,MAAO9oE,GAAEwB,EAAMC,QAAQoB,QAAQke,OAASja,EAASya,KAAOza,EAASmC,iBAErE,QAAS+/D,GAAqB3nE,GAA9B,GAKQ6B,GAJAsuC,EAAOs3B,GACX,KAAKznE,GAAWA,IAAYyF,EAASya,MAAQlgB,IAAYyF,EAASmC,gBAC9D,MAAOuoC,EAGX,KADItuC,EAASlD,EAAEqB,GAAS,GACjB6B,IAAW1B,EAAM+F,aAAarE,IAAWA,IAAW4D,EAASya,MAChEre,EAASA,EAAOglB,UAEpB,OAAIhlB,KAAW4D,EAASya,KACbiwB,EAEJxxC,EAAEkD,GAEb,QAAS+lE,GAAmBC,EAAQC,EAAQC,GAA5C,GACQtF,IACAjnC,EAAG,EACHjiB,EAAG,GAEHyuD,EAAmB,EAWvB,OAVIH,GAASE,EAAKnnE,KAAOonE,EACrBvF,EAASjnC,IAAMwsC,GAAoBH,EAASE,EAAKnnE,OAC1CmnE,EAAKlnE,MAAQgnE,EAASG,IAC7BvF,EAASjnC,EAAIwsC,GAAoBD,EAAKlnE,MAAQgnE,IAE9CC,EAASC,EAAKvgE,IAAMwgE,EACpBvF,EAASlpD,IAAMyuD,GAAoBF,EAASC,EAAKvgE,MAC1CugE,EAAKjnE,OAASgnE,EAASE,IAC9BvF,EAASlpD,EAAIyuD,GAAoBD,EAAKjnE,OAASgnE,IAE5CrF,EA/yBd,GACwUwF,GAgSrQtiC,EAU5DuiC,EA0EAC,EAyDAC,EAoBAC,EAjcAloE,EAAQvB,OAAOuB,MAAOC,EAAUD,EAAMC,QAASqF,EAAW7G,OAAO6G,SAAUiiE,EAAU/oE,EAAEC,QAASE,EAAQqB,EAAMrB,MAAOoO,EAAS/M,EAAMspB,GAAGvc,OAAQX,EAAapM,EAAMoM,WAAYo3D,EAAaxjE,EAAMwjE,WAAYz1D,EAAQvP,EAAEuP,MAAOtF,EAASjK,EAAEiK,OAAQzB,EAAYhH,EAAMgH,UAAWmhE,KAAiBC,KAAkBC,KAAgCjtC,EAAqBp7B,EAAMo7B,mBAAoBktC,EAAQ,QAASn4B,EAAS,SAAUo4B,EAAY,YAAanH,EAAO,OAAQoH,EAAO,OAAQC,EAAU,UAAWC,EAAa,aAAcC,EAAgB,gBAAiBC,EAAY,YAAaC,EAAY,YAAaC,EAAO,OAoDrmBC,EAAa38D,EAAW3D,QACxBC,KAAM,SAAU7I,EAASsI,GACrB,GAAIwG,GAAO5G,KAAM4mB,EAAa9uB,EAAQ,EACtC8O,GAAKy2D,SAAU,EACXz2C,EAAWnJ,kBACXhnB,EAAEiH,KAAKzF,EAAMsN,SAAS4Z,KAAKnoB,MAAM,KAAM,WACnC4vB,EAAWnJ,iBAAiBzd,KAAMgG,EAAMY,EAAKq6D,OAAQr6D,IAAO,KAEhEnQ,EAAEiH,KAAKzF,EAAMsN,SAAS6Z,GAAGpoB,MAAM,KAAM,WACjC4vB,EAAWnJ,iBAAiBzd,KAAMgG,EAAMY,EAAKs6D,SAAUt6D,IAAO,OAGlEnQ,EAAEiH,KAAKzF,EAAMsN,SAAS4Z,KAAKnoB,MAAM,KAAM,WACnC4vB,EAAWu6C,YAAYnhE,KAAMgG,EAAMY,EAAKq6D,OAAQr6D,MAEpDnQ,EAAEiH,KAAKzF,EAAMsN,SAAS6Z,GAAGpoB,MAAM,KAAM,WACjC4vB,EAAWu6C,YAAYnhE,KAAMgG,EAAMY,EAAKs6D,SAAUt6D,OAG1DvC,EAAWJ,GAAGtD,KAAKwH,KAAKvB,GACxBA,EAAKQ,MACD,QACA,WACDhH,QAEPghE,YAAa,WACTphE,KAAKq9D,SAAU,GAEnBgE,cAAe,WACXrhE,KAAKq9D,SAAU,GAEnB4D,OAAQ,SAAUh5D,GACd,GAAIrB,GAAO5G,IACX4G,GAAKoB,QAAQ,SACTpB,EAAKy2D,SACLp1D,EAAE9D,kBAGV+8D,SAAU,SAAUj5D,GAChB,GAAIrB,GAAO5G,IACX4G,GAAKoB,QAAQ,WACTpB,EAAKy2D,UACLp1D,EAAE9D,iBACFyC,EAAKy6D,oBAIbC,EAAgBj9D,EAAW3D,QAC3BC,KAAM,SAAUP,GACZ,GAAIwG,GAAO5G,IACXqE,GAAWJ,GAAGtD,KAAKwH,KAAKvB,GACxBA,EAAK26D,eAAgB,EACrB9qE,EAAEiK,OAAOkG,EAAMxG,GACfwG,EAAKw2B,MAAQ,EACTx2B,EAAK24B,YACL34B,EAAK46D,QAAU,cACf56D,EAAK66D,WAAa,cAClB76D,EAAKktB,KAAO,MAEZltB,EAAK46D,QAAU,eACf56D,EAAK66D,WAAa,eAClB76D,EAAKktB,KAAO,MAGpB4tC,YAAa,WACTjrE,EAAEiK,OAAOV,MACL2hE,SAAS,EACTJ,eAAe,EACfK,YAAa,EACbC,YAAa,KAGrBC,YAAa,SAAU9vD,EAAKvZ,GACpBuH,KAAK4hE,cAAgB5vD,GAAOhS,KAAK6hE,cAAgBppE,IACjDuH,KAAK4hE,YAAc5vD,EACnBhS,KAAK6hE,YAAcppE,EACnBuH,KAAKgvC,WAGb+yB,YAAa,SAAU3iE,GACnB,MAAOA,GAASY,KAAKvH,KAAO2G,EAASY,KAAKgS,KAE9CgwD,aAAc,WACVhiE,KAAKuhE,eAAgB,GAEzB77C,QAAS,WACL,MAAO1lB,MAAK6nB,UAAU,GAAG7nB,KAAKwhE,UAElCS,SAAU,WACN,MAAOjiE,MAAKlI,QAAQ,GAAGkI,KAAKyhE,aAEhCS,QAAS,SAAU9kC,GACfp9B,KAAKo9B,MAAQA,GAEjB4R,OAAQ,SAAU9E,GACd,GAAItjC,GAAO5G,KAAM6uC,EAAQjoC,EAAK+6D,QAAU/6D,EAAKi7D,YAAcj7D,EAAKq7D,WAAYE,EAActzB,EAAQjoC,EAAKw2B,MAAOr/B,EAAO6I,EAAK8e,WAC5G,IAAVmpB,GAAgBjoC,EAAK26D,iBAGzB36D,EAAKnO,IAAMmO,EAAK+6D,SAAW/6D,EAAKg7D,YAAc,EAC9Ch7D,EAAK7I,KAAOA,EACZ6I,EAAKioC,MAAQszB,EACbv7D,EAAKoL,IAAMpT,KAAKoT,IAAIpL,EAAKnO,IAAKsF,EAAOokE,GACrCv7D,EAAKw7D,SAAWrkE,EAAO8wC,EACvBjoC,EAAKy7D,cAAgBF,EAAcpkE,GAAQ,EAC3C6I,EAAK2Y,QAAU3Y,EAAK26D,eAAiBY,EAAcpkE,EAC9CmsC,GACDtjC,EAAKoB,QAAQogC,EAAQxhC,OAI7B07D,EAAiBj+D,EAAW3D,QAC5BC,KAAM,SAAUP,GACZ,GAAIwG,GAAO5G,IACXqE,GAAWJ,GAAGtD,KAAKwH,KAAKvB,GACxBA,EAAK0sB,EAAI,GAAIguC,GAAc5gE,GAAS6+B,YAAY,GAAQn/B,IACxDwG,EAAKyK,EAAI,GAAIiwD,GAAc5gE,GAAS6+B,YAAY,GAASn/B,IACzDwG,EAAKihB,UAAYznB,EAAQynB,UACzBjhB,EAAK27D,eAAiBniE,EAAQgiE,SAC9Bx7D,EAAK47D,SAAWpiE,EAAQoiE,UAAY,IACpC57D,EAAKQ,KAAKghC,EAAQhoC,IAEtB8hE,QAAS,SAAUO,GACfziE,KAAKszB,EAAE4uC,QAAQO,GACfziE,KAAKqR,EAAE6wD,QAAQO,GACfziE,KAAK2X,WAET+qD,kBAAmB,WACf,OACIpvC,EAAG10B,KAAKoT,IAAI,GAAIhS,KAAKszB,EAAE+uC,cACvBhxD,EAAGzS,KAAKoT,IAAI,GAAIhS,KAAKqR,EAAEgxD,gBAG/B1qD,QAAS,WACL,GAAI/Q,GAAO5G,IACX4G,GAAK0sB,EAAE0b,SACPpoC,EAAKyK,EAAE29B,SACPpoC,EAAK2Y,QAAU3Y,EAAK0sB,EAAE/T,SAAW3Y,EAAKyK,EAAEkO,QACxC3Y,EAAKw7D,SAAWx7D,EAAK27D,gBAAkB3jE,KAAKoT,IAAIpL,EAAK0sB,EAAE8uC,SAAUx7D,EAAKyK,EAAE+wD,UACxEx7D,EAAK2gC,SAAW3oC,KAAKnG,IAAImO,EAAK0sB,EAAE8uC,SAAUx7D,EAAKyK,EAAE+wD,UACjDx7D,EAAKoB,QAAQogC,MAGjBu6B,EAAWt+D,EAAW3D,QACtBC,KAAM,SAAUP,GACZ,GAAIwG,GAAO5G,IACXU,GAAOkG,EAAMxG,GACbiE,EAAWJ,GAAGtD,KAAKwH,KAAKvB,IAE5Bm7D,YAAa,WACT,MAAO/hE,MAAK4iE,UAAUb,YAAY/hE,KAAK8mC,QAAQ9mC,KAAK8zB,QAExD+uC,SAAU,SAAUnvC,GAChB,GAAI9sB,GAAO5G,KAAM4iE,EAAYh8D,EAAKg8D,UAAW9uC,EAAOltB,EAAKktB,KAAMgT,EAAUlgC,EAAKkgC,QAAS9sC,EAAW8sC,EAAQhT,GAAQJ,CAC7GkvC,GAAUrjD,WAGXvlB,EAAW4oE,EAAU5wD,KAAO0hB,EAAQ,GAAK15B,EAAW4oE,EAAUnqE,KAAOi7B,EAAQ,KAC7EA,GAAS9sB,EAAKk8D,YAElBh8B,EAAQi8B,cAAcjvC,EAAMJ,GAC5B9sB,EAAKoB,QAAQogC,EAAQxhC,OAGzBo8D,EAAOpsE,EAAM8J,QACbC,KAAM,SAAUP,GACZ,GAAiBkzB,GAAGjiB,EAAGyxD,EAAYh8B,EAA/BlgC,EAAO5G,IACXU,GAAOkG,GAAQq8D,SAAS,GAAQ7iE,GAChC0iE,EAAal8D,EAAKq8D,QAAU,GAAM,EAClCn8B,EAAUlgC,EAAKkgC,QACflgC,EAAK0sB,EAAIA,EAAI,GAAIqvC,IACb7uC,KAAM,IACN8uC,UAAWh8D,EAAKkf,WAAWwN,EAC3BwvC,WAAYA,EACZh8B,QAASA,IAEblgC,EAAKyK,EAAIA,EAAI,GAAIsxD,IACb7uC,KAAM,IACN8uC,UAAWh8D,EAAKkf,WAAWzU,EAC3ByxD,WAAYA,EACZh8B,QAASA,IAEblgC,EAAKg0D,WAAWxzD,MACZ,QACA,OACA,MACA,eACA,kBAEA87D,aAAc,SAAUj7D,GACpBrB,EAAKu8D,QAAUl7D,EACfrB,EAAKxH,OAASwH,EAAKkf,WAAW+B,UAAUzoB,UAE5C+7D,MAAO,SAAUlzD,GACTxR,EAAEwR,EAAE6Q,MAAMwH,QAAQlI,QAAQ,KAAKte,GAAG,kCAClCmO,EAAEC,OAAOijB,UAGjBi4C,cAAe,SAAUn7D,GAAV,GACmNo7D,GAO1NC,EAAwCC,EAPxCC,EAAkB58D,EAAKu8D,QAASM,EAAiBD,EAAgBlL,OAAQA,EAASrwD,EAAEqwD,OAAQoL,EAAaz7D,EAAEswD,SAAWiL,EAAgBjL,SAAU6J,EAAWx7D,EAAKkf,WAAWs8C,SAAUI,EAAW57D,EAAKkf,WAAW08C,QAChN17B,GAAQ1J,OAASglC,GAAYsB,EAAa,IAC1CA,GAAiC,IAAlB,EAAIA,IAEnB58B,EAAQ1J,MAAQsmC,GAAclB,IAC9BkB,EAAalB,EAAW17B,EAAQ1J,OAEhCkmC,EAAUx8B,EAAQxT,EAAI1sB,EAAKxH,OAAO1G,KAAM6qE,EAAUz8B,EAAQz1B,EAAIzK,EAAKxH,OAAOE,IAC9E+jE,GACI/vC,GAAIgwC,EAAUG,EAAenwC,GAAKowC,EAAapL,EAAOhlC,EAAIgwC,EAC1DjyD,GAAIkyD,EAAUE,EAAepyD,GAAKqyD,EAAapL,EAAOjnD,EAAIkyD,GAE9Dz8B,EAAQ68B,UAAUD,GAClBpwC,EAAEuvC,SAASQ,EAAY/vC,GACvBjiB,EAAEwxD,SAASQ,EAAYhyD,GACvBzK,EAAKkf,WAAWo8C,QAAQp7B,EAAQ1J,OAChCx2B,EAAKu8D,QAAUl7D,EACfA,EAAE9D,kBAEN+mB,KAAM,SAAUjjB,GACRA,EAAE6Q,MAAMwH,OAAOgE,QAAQjsB,MAAM,qBAG7Bi7B,EAAEsvC,UAAUrjD,SAAWlO,EAAEuxD,UAAUrjD,SACnC+T,EAAEuvC,SAAS56D,EAAEqrB,EAAEI,OACfriB,EAAEwxD,SAAS56D,EAAEoJ,EAAEqiB,OACfzrB,EAAE9D,kBAEF8D,EAAEqQ,MAAM61B,SAGhBz2C,IAAK,SAAUuQ,GACXA,EAAE9D,uBAKdy/D,EAAkB1rE,EAAQC,YAAYygB,OAAS,WAE/C6kB,GADAvlC,EAAQsgB,QACI,SAAU8a,EAAGjiB,EAAG+rB,GACxB,MAAO,eAAiB9J,EAAI,MAAQjiB,EAAI,eAAiB+rB,EAAQ,KAGzD,SAAU9J,EAAGjiB,EAAG+rB,GACxB,MAAO,aAAe9J,EAAI,MAAQjiB,EAAI,aAAe+rB,EAAQ,KAGjE4iC,EAAU37D,EAAW3D,QACrBC,KAAM,SAAU7I,GACZ,GAAI8O,GAAO5G,IACXqE,GAAWJ,GAAGtD,KAAKwH,KAAKvB,GACxBA,EAAK9O,QAAUrB,EAAEqB,GACjB8O,EAAK9O,QAAQ,GAAG+B,MAAMgqE,sBAAwB,WAC9Cj9D,EAAK0sB,EAAI,EACT1sB,EAAKyK,EAAI,EACTzK,EAAKw2B,MAAQ,EACbx2B,EAAKk9D,iBAAiBrmC,EAAU72B,EAAK0sB,EAAG1sB,EAAKyK,EAAGzK,EAAKw2B,SAEzD2lC,cAAe,SAAUjvC,EAAMiwC,GAC3B/jE,KAAK8zB,IAASiwC,EACd/jE,KAAK2X,WAETqsD,QAAS,SAAU5mC,GACfp9B,KAAKo9B,MAAQA,EACbp9B,KAAK2X,WAETgsD,UAAW,SAAUD,GACjB1jE,KAAKo9B,OAASsmC,EACd1jE,KAAK2X,WAET8lB,UAAW,SAAU4lC,GACjBrjE,KAAKszB,GAAK+vC,EAAY/vC,EACtBtzB,KAAKqR,GAAKgyD,EAAYhyD,EACtBrR,KAAK2X,WAETsvB,SAAU,SAAUnT,EAAMl2B,GACtBoC,KAAK8zB,GAAQl2B,EACboC,KAAK2X,WAETkvB,OAAQ,SAAUw8B,GACd3iE,EAAOV,KAAMqjE,GACbrjE,KAAK2X,WAETA,QAAS,WACL,GAAyCssD,GAArCr9D,EAAO5G,KAAMszB,EAAI1sB,EAAK0sB,EAAGjiB,EAAIzK,EAAKyK,CAClCzK,GAAK6I,QACL6jB,EAAI10B,KAAK6Q,MAAM6jB,GACfjiB,EAAIzS,KAAK6Q,MAAM4B,IAEnB4yD,EAAiBxmC,EAAUnK,EAAGjiB,EAAGzK,EAAKw2B,OAClC6mC,GAAkBr9D,EAAKy8D,cACnBprE,EAAMC,QAAQoB,QAAQiB,MAAQtC,EAAMC,QAAQoB,QAAQmB,QAAU,IAC9DmM,EAAK9O,QAAQ,GAAG+B,MAAMG,SAAW,WACjC4M,EAAK9O,QAAQ,GAAG+B,MAAMnB,KAAOkO,EAAK0sB,EAAI,KACtC1sB,EAAK9O,QAAQ,GAAG+B,MAAMyF,IAAMsH,EAAKyK,EAAI,MAErCzK,EAAK9O,QAAQ,GAAG+B,MAAM+pE,GAAmBK,EAE7Cr9D,EAAKk9D,iBAAiBG,GACtBr9D,EAAKoB,QAAQogC,KAGrB07B,iBAAkB,SAAUT,GACxBrjE,KAAKqjE,YAAcA,KAkBvBpD,EAAaj7D,EAAOtE,QACpBC,KAAM,SAAU7I,EAASsI,GAAnB,GAGEq0C,GAFA7tC,EAAO5G,IACXgF,GAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM9O,EAASsI,GAC/Bq0C,EAAQ7tC,EAAKxG,QAAQq0C,MACnBA,IAAS4rB,GAGXA,EAAY5rB,GAAO3sC,KAAKlB,GAFxBy5D,EAAY5rB,IAAU7tC,IAK9Bc,QACIm5D,EACAC,EACAC,GAEJ3gE,SACI8O,KAAM,aACNulC,MAAO,WAEXzuB,QAAS,WACLm5C,EAAiBkB,EAAargE,OAElCs7D,SAAU,SAAUj0D,EAAWY,GAC3B,GAAIrB,GAAO5G,KAAMkkE,EAAY9D,EAAWx5D,EAAKxG,QAAQq0C,MACrD,IAAIyvB,EACA,MAAOt9D,GAAKoB,QAAQX,EAAW3G,KAAWuH,EAAE6Q,OACxCorD,UAAWA,EACXC,WAAYl8D,EAAEk8D,eAI1BC,MAAO,SAAUn8D,GACbjI,KAAKs7D,SAASuF,EAAW54D,IAE7Bo8D,KAAM,SAAUp8D,GACZjI,KAAKs7D,SAASwF,EAAW74D,IAE7Bq8D,MAAO,SAAUr8D,GACb,GAAIrB,GAAO5G,KAAMkkE,EAAY9D,EAAWx5D,EAAKxG,QAAQq0C,MACjDyvB,KACAA,EAAUK,SAAW39D,EAAK00D,SAASyF,EAAM94D,OAIrDg4D,EAAWuE,aAAe,SAAUpF,GAChC,GAA4DtkE,GAAxD25C,EAAQ4rB,EAAYjB,IAAckB,EAAUlB,EAChD,IAAI3qB,EAAO,CACP,IAAK35C,EAAI,EAAGA,EAAI25C,EAAM98C,OAAQmD,IAC1BkK,EAAOf,GAAG+hB,QAAQ7d,KAAKssC,EAAM35C,GAEjC25C,GAAM98C,OAAS,QACR0oE,GAAYjB,SACZkB,GAAUlB,KAGzBa,EAAWwE,OAASpE,EAChBH,EAAiBD,EAAWv/D,QAC5BC,KAAM,SAAU7I,EAASsI,GAAnB,GAGEq0C,GAFA7tC,EAAO5G,IACXgF,GAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM9O,EAASsI,GAC/Bq0C,EAAQ7tC,EAAKxG,QAAQq0C,MACnBA,IAAS6rB,GAGXA,EAAU7rB,GAAO3sC,KAAKlB,GAFtB05D,EAAU7rB,IAAU7tC,IAK5Bof,QAAS,WACLm5C,EAAiBmB,EAAWtgE,OAEhCI,SACI8O,KAAM,iBACNulC,MAAO,UACP5wC,OAAQ,QAGZs8D,EAAYn7D,EAAOtE,QACnBC,KAAM,SAAU7I,EAASsI,GACrB,GAAIwG,GAAO5G,IACXgF,GAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM9O,EAASsI,GACnCwG,EAAK89D,YAAa,EAClB99D,EAAKg0D,WAAa,GAAIa,GAAW70D,EAAK9O,SAClC8kE,QAAQ,EACRL,gBAAgB,EAChB14D,OAAQ+C,EAAKxG,QAAQyD,OACrBma,UAAWpX,EAAKxG,QAAQm4D,SACxBtpD,MAAOjJ,EAAMY,EAAK+0D,OAAQ/0D,GAC1B+9D,KAAM3+D,EAAMY,EAAK20D,MAAO30D,GACxBskB,KAAMllB,EAAMY,EAAKg+D,MAAOh+D,GACxBlP,IAAKsO,EAAMY,EAAKi3D,KAAMj3D,GACtBukB,OAAQnlB,EAAMY,EAAKi+D,QAASj+D,GAC5BuuB,OAAQnvB,EAAMY,EAAK62D,QAAS72D,KAEhCA,EAAKk+D,iBAAmB9+D,EAAMY,EAAKm+D,UAAWn+D,GAC9CA,EAAKo+D,eAAiBh/D,EAAMY,EAAKo+D,eAAgBp+D,IAErDc,QACI2xD,EACAmH,EACAC,EACAC,EACAC,EACAC,GAEJxgE,SACI8O,KAAM,YACNqpD,SAAUtgE,EAAMC,QAAQogB,MAAQ,EAAI,EACpCm8B,MAAO,UACPwwB,aAAc,KACdnxC,KAAM,KACNjM,UAAW,KACXhkB,OAAQ,KACRq4C,OAAQ,KACRgpB,YAAY,EACZC,YAAY,EACZZ,SAAS,GAEba,WAAY,WACRplE,KAAK0kE,YAAa,GAEtBM,eAAgB,SAAU/8D,GACtB,GAAIrB,GAAO5G,IACPiI,GAAEwuB,UAAYx+B,EAAM4pB,KAAKM,MACzBvb,EAAK00D,SAASqF,GAAc7nD,MAAO7Q,IACnCrB,EAAKg0D,WAAWzvC,WAGxBk6C,YAAa,SAAUp9D,GACnB,GAAiBo7D,GAAbz8D,EAAO5G,KAAmBI,EAAUwG,EAAKxG,QAASklE,EAAa1+D,EAAK0+D,WAAYxxC,EAAO1zB,EAAQ0zB,KAAMmxC,EAAer+D,EAAKxG,QAAQ6kE,YACjIA,GACA5B,GACI3qE,KAAMuP,EAAEqrB,EAAEzX,SAAWopD,EAAavsE,KAClC4G,IAAK2I,EAAEoJ,EAAEwK,SAAWopD,EAAa3lE,MAGrCsH,EAAK2+D,WAAW7sE,MAAQuP,EAAEqrB,EAAEI,MAC5B9sB,EAAK2+D,WAAWjmE,KAAO2I,EAAEoJ,EAAEqiB,MAC3B2vC,EAAc5sE,EAAEiK,UAAWkG,EAAK2+D,aAEhCD,IACAjC,EAAY/jE,IAAM++D,EAAOgF,EAAY/jE,IAAKgmE,EAAWj0D,GACrDgyD,EAAY3qE,KAAO2lE,EAAOgF,EAAY3qE,KAAM4sE,EAAWhyC,IAE9C,MAATQ,QACOuvC,GAAY/jE,IACH,MAATw0B,SACAuvC,GAAY3qE,KAEvBkO,EAAK4+D,KAAKxtE,IAAIqrE,IAElBoC,oBAAqB,SAAUnlD,GAC3B,GAAIolD,GAAiB1lE,KAAKI,QAAQ87C,MAClC,OAAOwpB,IAAkBjvE,EAAE6pB,GAAQxmB,GAAG4rE,IAE1CjI,QAAS,SAAUx1D,GACVjI,KAAKylE,oBAAoBx9D,EAAE6Q,MAAMwH,SAClCrY,EAAE9D,kBAGVw3D,OAAQ,SAAU1zD,GAAV,GAaI7I,GAZJwH,EAAO5G,KAAMI,EAAUwG,EAAKxG,QAASynB,EAAYznB,EAAQynB,UAAW29C,EAAOplE,EAAQolE,IACvF,OAAIxlE,MAAKylE,oBAAoBx9D,EAAEqQ,MAAMyiD,eAAiB36D,EAAQ8kE,aAAet+D,EAAK89D,YAC9E99D,EAAKg0D,WAAWzvC,SAChB,IAEJvkB,EAAK8xD,cAAgBzwD,EAAEqY,OACvB1Z,EAAK++D,oBAAsB1mE,EAAU2H,EAAK8xD,eACtC8M,IACI5+D,EAAK4+D,MACL5+D,EAAK4+D,KAAKxlD,MAAK,GAAM,GAAMqI,SAE/BzhB,EAAK4+D,KAAOvtE,EAAMiE,WAAWspE,GAAQ/uE,EAAE+uE,EAAKr9D,KAAKvB,EAAMA,EAAK8xD,gBAAkB8M,EAC1EpmE,EAASH,EAAU2H,EAAK8xD,eAC5B9xD,EAAK2+D,WAAanmE,EAClBwH,EAAK4+D,KAAKxtE,KACNgC,SAAU,WACVqqC,OAAQ,IACR3rC,KAAM0G,EAAO1G,KACb4G,IAAKF,EAAOE,MACbk4B,SAASj6B,EAASya,MACrBpR,EAAKoe,QAAQ,UAAW,WACpBpe,EAAK4+D,KAAKlgD,WAAW,YAErB,KADA,GAAIsgD,GAAcnvE,EAAEwR,EAAEqY,SACdslD,EAAYpqE,KAAK,iBAAmBoqE,EAAYjuE,QACpDiuE,EAAcA,EAAYjsE,QAE9B,QACI8sB,SAAU7f,EAAK4+D,KAAK7hD,MACpBkiD,UAAWD,EAAYpqE,KAAK,oBAIxC4kE,EAAWhgE,EAAQq0C,OAAS7tC,EAC5BA,EAAK29D,SAAU,EACX18C,IACAjhB,EAAK0+D,WAAahH,EAAoBz2C,EAAWjhB,EAAK4+D,OAE1D/uE,EAAE8G,GAAUmI,GAAG66D,EAAO35D,EAAKo+D,gBACvBp+D,EAAK00D,SAASkF,EAAWv4D,KACzBrB,EAAKg0D,WAAWzvC,SAChBvkB,EAAKm+D,aAETn+D,EAAKg0D,WAAWyC,UArChBz2D,IAuCJ20D,MAAO,SAAUtzD,GACbjI,KAAK04D,cAAgBzwD,EAAEqY,OACnBtgB,KAAKs7D,SAASjC,EAAMpxD,GACpBjI,KAAK46D,WAAWzvC,SAEhBnrB,KAAK0kE,YAAa,GAG1BE,MAAO,SAAU38D,GAAV,GAEC69D,GASQvL,CAVZtyD,GAAE9D,iBACE2hE,EAAgB9lE,KAAK+lE,oBAAoB99D,GACzCjI,KAAKI,QAAQ+kE,YAAcnlE,KAAKgmE,iBAAmBF,IACnD9lE,KAAKimE,kBAAoBxG,EAAqBqG,GAC9C9lE,KAAKgmE,eAAiBF,GAE1B9lE,KAAKkmE,WAAaj+D,EAClBjI,KAAKmmE,iBAAiBl+D,EAAG69D,GACrB9lE,KAAKI,QAAQ+kE,YACTnlE,KAAKimE,kBAAkB,KACnB1L,EAAWmF,EAAmBz3D,EAAEqrB,EAAEzX,SAAU5T,EAAEoJ,EAAEwK,SAAUyjD,EAAmBt/D,KAAKimE,oBACtFjmE,KAAKomE,qBAAuB3vE,EAAEiK,UAAWV,KAAKulE,YAC9CvlE,KAAKqmE,gBAAkB9L,EACJ,IAAfA,EAASlpD,GAA0B,IAAfkpD,EAASjnC,GAC7BsW,cAAc5pC,KAAKsmE,iBACnBtmE,KAAKsmE,gBAAkB,MACftmE,KAAKsmE,kBACbtmE,KAAKsmE,gBAAkB38B,YAAYlzC,EAAEuP,MAAMhG,KAAM,eAAgB,MAIzEA,KAAKwlE,MACLxlE,KAAKqlE,YAAYp9D,IAGzBk+D,iBAAkB,SAAUl+D,EAAG69D,GAC3B9lE,KAAKumE,gBAAgBT,EAAe,SAAUxlD,EAAQ4+C,GAClD,IAAK5+C,EAKD,MAJIy/C,KACAA,EAAezE,SAASwF,EAAWpgE,EAAOuH,GAAKk8D,WAAY1tE,EAAEspE,EAAeb,kBAC5Ea,EAAiB,MAErB,CAEJ,IAAIA,EAAgB,CAChB,GAAIb,IAAkBa,EAAeb,cACjC,MAEJa,GAAezE,SAASwF,EAAWpgE,EAAOuH,GAAKk8D,WAAY1tE,EAAEspE,EAAeb,kBAEhF5+C,EAAOg7C,SAASuF,EAAWngE,EAAOuH,GAAKk8D,WAAY1tE,EAAEyoE,MACrDa,EAAiBr/D,EAAO4f,GAAU4+C,cAAeA,MAErDl/D,KAAKs7D,SAASmF,EAAM//D,EAAOuH,GACvBk8D,WAAYpE,EACZ1sC,mBAAoByyC,MAG5BU,YAAa,WAAA,GAKLV,GAEAW,EAAeC,EACfC,EAQA1K,EACA2K,EACA5K,EACA6K,EAlBAltE,EAASqG,KAAKimE,kBAAkB,GAAI1L,EAAWv6D,KAAKqmE,gBAAiBS,EAAe9mE,KAAKomE,oBACxFzsE,KAGDmsE,EAAgB9lE,KAAK+lE,oBAAoB/lE,KAAKkmE,YAClDlmE,KAAKmmE,iBAAiBnmE,KAAKkmE,WAAYJ,GAEnCa,EAAahtE,IAAW4lE,IAAiB,GACzCoH,GACAF,EAAgBlpE,EAASya,KAAKkF,aAAesiD,EAAQvmE,SACrDytE,EAAgBnpE,EAASya,KAAKtZ,YAAc8gE,EAAQxmE,UAEpDytE,EAAgB9sE,EAAOktB,cAAgBltB,EAAOujB,aAC9CwpD,EAAgB/sE,EAAOue,aAAeve,EAAO+E,aAE7Cu9D,EAAStiE,EAAOgG,UAAY46D,EAASlpD,EACrCu1D,EAAYH,GAAiBxK,EAAS,GAAKA,EAAStiE,EAAOujB,aAC3D8+C,EAASriE,EAAOyE,WAAam8D,EAASjnC,EACtCuzC,EAAYH,GAAiB1K,EAAS,GAAKA,EAASriE,EAAO+E,YAC3DkoE,IACAjtE,EAAOgG,WAAa46D,EAASlpD,GAE7Bw1D,IACAltE,EAAOyE,YAAcm8D,EAASjnC,GAE9BtzB,KAAKwlE,MAAQmB,IAAeE,GAAaD,KACrCA,IACAE,EAAaxnE,KAAOi7D,EAASlpD,GAE7Bw1D,IACAC,EAAapuE,MAAQ6hE,EAASjnC,GAElCtzB,KAAKwlE,KAAKxtE,IAAI8uE,MAGtBjJ,KAAM,SAAU51D,GACZjI,KAAKumE,gBAAgBvmE,KAAK+lE,oBAAoB99D,GAAI,SAAUqY,EAAQ4+C,GAC5D5+C,IACAA,EAAOgkD,MAAM5jE,KAAWuH,GAAKk8D,WAAY1tE,EAAEyoE,MAC3Ca,EAAiB,QAGzB//D,KAAK6kE,QAAQ7kE,KAAKs7D,SAASoF,EAASz4D,KAExC48D,QAAS,SAAUzgE,GACf,GAAIwC,GAAO5G,IACX4G,GAAKq/D,kBAAoB,KACzBjmE,KAAKgmE,eAAiB,KACtBp8B,cAAc5pC,KAAKsmE,iBACnB1/D,EAAK89D,YAAa,EACd99D,EAAK4+D,OAAS5+D,EAAK29D,QACnB16C,WAAW,WACPjjB,EAAK4+D,KAAKxlD,MAAK,GAAM,GACjB5b,EACAwC,EAAKk+D,mBAELl+D,EAAK4+D,KAAKxkE,QAAQ4F,EAAK++D,oBAAqB,OAAQ/+D,EAAKk+D,mBAE9D,GAEHl+D,EAAKm+D,aAGbzJ,SAAU,SAAUj0D,EAAWY,GAC3B,GAAIrB,GAAO5G,IACX,OAAO4G,GAAKoB,QAAQX,EAAW3G,KAAWuH,EAAE6Q,OACxCwa,EAAGrrB,EAAEqrB,EACLjiB,EAAGpJ,EAAEoJ,EACLqnD,cAAe9xD,EAAK8xD,cACpBqO,cAAe9+D,EAAEqQ,MAAQrQ,EAAEqQ,MAAMyiD,aAAe,KAChDoJ,WAAYl8D,EAAEk8D,WACd9wC,mBAAoBprB,EAAEorB,uBAG9B0yC,oBAAqB,SAAU99D,GAC3B,GAAIqY,GAAS+S,EAAmBprB,GAAIu9D,EAAOxlE,KAAKwlE,IAShD,OARIA,IAAQ1iE,EAAS0iE,EAAK,GAAIllD,KAC1BklD,EAAK1kE,OACLwf,EAAS+S,EAAmBprB,GACvBqY,IACDA,EAAS+S,EAAmBprB,IAEhCu9D,EAAKrjC,QAEF7hB,GAEXimD,gBAAiB,SAAUzuE,EAAS+oB,GAChC,GAAI7hB,GAAQy1C,EAAQz0C,KAAKI,QAAQq0C,MAAOmqB,EAAUyB,EAAY5rB,GAAQoqB,EAAQyB,EAAU7rB,IACpFmqB,GAAWA,EAAQjnE,QAAUknE,GAASA,EAAMlnE,UAC5CqH,EAAS2/D,EAAY7mE,EAAS8mE,EAASC,GACnC7/D,EACA6hB,EAAS7hB,EAAOshB,OAAQthB,EAAOkgE,eAE/Br+C,MAIZmF,QAAS,WACL,GAAIpf,GAAO5G,IACXgF,GAAOf,GAAG+hB,QAAQ7d,KAAKvB,GACvBA,EAAKm+D,YACLn+D,EAAKg0D,WAAW50C,UAChBhmB,KAAKimE,kBAAoB,KACzBjmE,KAAKgmE,eAAiB,KACtBp8B,cAAc5pC,KAAKsmE,iBACnB1/D,EAAK8xD,cAAgB,MAEzBqM,UAAW,WACP,GAAIn+D,GAAO5G,IACP4G,GAAK4+D,MACL5+D,EAAK4+D,KAAKn9C,eAEP+3C,GAAWx5D,EAAKxG,QAAQq0C,OAC/B7tC,EAAKoB,QAAQ,WACbpB,EAAKoB,QAAQ44D,GACbnqE,EAAE8G,GAAUwsB,IAAIw2C,EAAO35D,EAAKo+D,mBAGpC/sE,EAAMspB,GAAG+G,OAAO23C,GAChBhoE,EAAMspB,GAAG+G,OAAO43C,GAChBjoE,EAAMspB,GAAG+G,OAAO63C,GAChBloE,EAAM+oE,WAAaA,EACnB/oE,EAAMqmE,oBAAsBA,EAC5B59D,EAAOzI,EAAMspB,IACTyhD,KAAMA,EACNV,eAAgBA,EAChBtC,QAASA,IAuDb/nE,EAAMspB,GAAG4+C,UAAU6G,OACftH,mBAAoBA,EACpBJ,mBAAoBA,EACpBG,qBAAsBA,IAE5B/oE,OAAOuB,MAAM8sB,QACRruB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAO2iC,IAAM3iC,OAAS,SAAU4iC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAU9iC,EAAGC,QACVA,OAAO,yBACH,WACA,qBACDD,IACL,WAmgBE,MAxfC,UAAUE,EAAGE,GAAb,GACOsB,GAAQvB,OAAOuB,MAAOupB,EAASvpB,EAAMupB,OAAQvhB,EAAKhI,EAAM8H,QAASwhB,EAAKC,EAAOD,GAAIvb,EAAQvP,EAAEuP,MAAOtF,EAASjK,EAAEiK,OAAQsE,EAASuc,EAAGvc,OAAQpO,EAAQqB,EAAMrB,MAAOopE,EAAU/nE,EAAMspB,GAAGy+C,QAASgD,EAAO/qE,EAAMspB,GAAGyhD,KAAMV,EAAiBrqE,EAAMspB,GAAG+gD,eAAgBplC,EAAaj9B,EAAGi9B,WAAYD,EAAYh9B,EAAGg9B,UAAWp+B,EAAMD,KAAKC,IAAKooE,EAAoB,IAAKC,EAAoB,GAAKC,EAAW,IAAMC,EAAsB,GAAIC,EAAe,GAAIC,EAAyB,GAAKC,EAA8B,EAAGC,EAAe,sBAAuBC,EAAe,sBAAuBC,EAAO,OAAQt/B,EAAS,SAAUu/B,EAAS,SAAUC,EAAS,SAAUC,EAAiB,EACppBC,EAAe7qC,EAAUv8B,QACzBC,KAAM,SAAUP,GACZ,GAAIwG,GAAO5G,IACXi9B,GAAUh5B,GAAGtD,KAAKwH,KAAKvB,GACvBlG,EAAOkG,EAAMxG,GACbwG,EAAKg0D,WAAWxzD,KAAK,aAAcpB,EAAMY,EAAKqI,MAAOrI,IACrDA,EAAKmhE,WAAW3gE,KAAK,QAASpB,EAAMY,EAAKukB,OAAQvkB,KAErD2Y,QAAS,WACL,MAAOvf,MAAK8mC,QAAQ1J,MAAQp9B,KAAK8lB,WAAWs8C,UAEhD57B,KAAM,WACF,MAAOxmC,MAAK8lB,WAAWs8C,SAAWpiE,KAAK8mC,QAAQ1J,MAAQ,KAE3DmJ,KAAM,WACF,GAAIO,GAAU9mC,KAAK8mC,OACnBA,GAAQ68B,UAAU,KAClB3jE,KAAK8lB,WAAWo8C,QAAQp7B,EAAQ1J,QAEpCqJ,MAAO,WACH,GAAIK,GAAU9mC,KAAK8mC,OACnBA,GAAQk9B,QAAQhkE,KAAK8lB,WAAWs8C,UAChCpiE,KAAK8lB,WAAWo8C,QAAQp7B,EAAQ1J,UAGpC4qC,EAAc/qC,EAAUv8B,QACxBC,KAAM,SAAUP,GACZ,GAAIwG,GAAO5G,IACXi9B,GAAUh5B,GAAGtD,KAAKwH,KAAKvB,GACvBlG,EAAOkG,EAAMxG,GACTi/B,WAAY,GAAInC,IACZpJ,KAAM1zB,EAAQ0zB,KACdgT,QAAS1mC,EAAQ0mC,QACjBL,MAAO,WACH7/B,EAAKi3D,YAIjBj3D,EAAKmhE,WAAW3gE,KAAK,QAAS,WAC1BR,EAAKukB,WAETvkB,EAAKg0D,WAAWxzD,KAAK,MAAOpB,EAAMY,EAAKqI,MAAOrI,IAC9CA,EAAKg0D,WAAWxzD,KAAK,aAAcpB,EAAMY,EAAKqI,MAAOrI,IACrDA,EAAKg0D,WAAWxzD,KAAK,MAAOpB,EAAMY,EAAK6/B,MAAO7/B,KAElD8/B,SAAU,WACN1mC,KAAKq/B,WAAWlU,UAEpB88C,OAAQ,SAAUpsD,GACd,GAAIjV,GAAO5G,IACX4G,GAAKukB,SACLvkB,EAAKshE,QAAQrsD,IAEjB4qB,MAAO,WACH,GAAI7/B,GAAO5G,IACP4G,GAAKuhE,SAASpG,cACdn7D,EAAKwhE,YAELxhE,EAAKi3D,QAGbr3B,KAAM,WACF,MAAO3nC,GAAImB,KAAKu6D,UAAY,GAEhCtrD,MAAO,SAAUhH,GACb,GAAiBsyD,GAAb3zD,EAAO5G,IACN4G,GAAKg8D,UAAUrjD,UAGhB3Y,EAAKuhE,SAASpG,cACdn7D,EAAKwhE,aAEL7N,EAAWtyD,EAAEqQ,MAAMyL,KAAO8jD,EAAiB,EAAI5/D,EAAEqQ,MAAM1R,EAAKktB,MAAMymC,SAClE3zD,EAAK2zD,SAAW37D,KAAKnG,IAAImG,KAAKoT,IAAIuoD,EAAW3zD,EAAKyhE,mBAAoBhB,IAAgBA,GACtFzgE,EAAKmhE,WAAW3G,cAChBnkC,EAAUh5B,GAAGgL,MAAM9G,KAAKvB,MAGhC2/B,KAAM,WACF,GAAI3/B,GAAO5G,KAAM4iE,EAAYh8D,EAAKg8D,UAAW0F,EAAW1hE,EAAKuhE,SAASpG,cAAgBuF,EAAyB1gE,EAAK0hE,SAAU50C,EAAQ9sB,EAAK2zD,UAAY+N,EAAUzsD,EAAWjV,EAAKkgC,QAAQlgC,EAAKktB,MAAQJ,GACjM9sB,EAAKq8D,SAAWL,EAAUb,YAAYlmD,KACvCA,EAAWjd,KAAKnG,IAAImG,KAAKoT,IAAI6J,EAAU+mD,EAAUnqE,KAAMmqE,EAAU5wD,KACjEpL,EAAK2zD,SAAW,GAEpB3zD,EAAKkgC,QAAQG,SAASrgC,EAAKktB,KAAMjY,IAErCgiD,KAAM,WACF79D,KAAK+nE,WAAW1G,gBAChBrhE,KAAKtI,OAET0wE,UAAW,WACP,GAAIxhE,GAAO5G,KAAM4iE,EAAYh8D,EAAKg8D,UAAW2F,EAAW3hE,EAAKkgC,QAAQlgC,EAAKktB,MAAQ8uC,EAAUnqE,IAAMmqE,EAAUnqE,IAAMmqE,EAAU5wD,GAC5HpL,GAAKshE,QAAQK,IAEjBL,QAAS,SAAUrsD,GACf7b,KAAKq/B,WAAWwH,QACZhrB,SAAUA,EACVxb,SAAU4mE,EACVhnC,KAAM/C,EAAWgK,iBAIzBshC,EAAmBvrC,EAAUv8B,QAC7BC,KAAM,SAAUP,GACZ,GAAIwG,GAAO5G,IACX/H,GAAM8H,QAAQk9B,UAAUh5B,GAAGtD,KAAKwH,KAAKnI,MACrCU,EAAOkG,EAAMxG,GACTqjC,UACA5oC,eACAuE,aAGRmnC,KAAM,WACFvmC,KAAKyoE,qBACLzoE,KAAK6mC,OAAO7mC,KAAKyjC,SAErB+C,KAAM,WACF,MAAO3nC,GAAImB,KAAKZ,OAAOiS,GAAKk2D,GAA+B1oE,EAAImB,KAAKZ,OAAOk0B,GAAKi0C,GAEpF9gC,MAAO,WACHzmC,KAAK6mC,OAAO7mC,KAAKnF,aACbmF,KAAK6gB,UACL7gB,KAAK6gB,SAAS1Y,QAGtBugE,eAAgB,SAAUv7C,EAAMC,GAC5BptB,KAAKZ,UACLY,KAAKyjC,OAAStW,EACdntB,KAAKnF,YAAcuyB,GAEvBu7C,YAAa,SAAU9nD,GACfA,GAAY5oB,EAAMiE,WAAW2kB,GAC7B7gB,KAAK6gB,SAAWA,EAEhBA,EAAWlqB,GAGnB8xE,mBAAoB,WAChBzoE,KAAKZ,QACDk0B,GAAItzB,KAAKnF,YAAYy4B,EAAItzB,KAAKyjC,OAAOnQ,GAAK,EAC1CjiB,GAAIrR,KAAKnF,YAAYwW,EAAIrR,KAAKyjC,OAAOpyB,GAAK,GAE9CrR,KAAKyjC,QACDpyB,EAAGrR,KAAKyjC,OAAOpyB,EAAIrR,KAAKZ,OAAOiS,EAC/BiiB,EAAGtzB,KAAKyjC,OAAOnQ,EAAItzB,KAAKZ,OAAOk0B,MAIvCs1C,EAAYhyE,EAAM8J,QAClBC,KAAM,SAAUP,GACZ,GAAIwG,GAAO5G,KAAMu/B,EAA8B,MAAjBn/B,EAAQ0zB,KAAch8B,EAAUrB,EAAE,sCAAwC8oC,EAAa,aAAe,YAAc,iBAClJ7+B,GAAOkG,EAAMxG,GACTtI,QAASA,EACT+wE,YAAa,EACb/hC,QAAS,GAAIk5B,GAAQloE,GACrBgxE,cAAe1oE,EAAQ0mC,QACvBiiC,cAAe3oE,EAAQ2oE,cACvBhrE,KAAMwhC,EAAa,QAAU,WAEjC34B,EAAKkiE,cAAc1hE,KAAKghC,EAAQpiC,EAAMY,EAAK+Q,QAAS/Q,IACpDA,EAAKihB,UAAU2c,OAAO1sC,GAClBsI,EAAQ2oE,eACRniE,EAAKu7B,QAGbxqB,QAAS,WACL,GAAI/Q,GAAO5G,KAAM8zB,EAAOltB,EAAKktB,KAAM8uC,EAAYh8D,EAAKg8D,UAAWoG,EAAWpG,EAAU7kE,KAAM+qE,EAAgBliE,EAAKkiE,cAAeG,EAAYD,EAAWpG,EAAU/zB,MAAO70C,EAAW4E,KAAK6Q,OAAOq5D,EAAch1C,GAAQm1C,GAAYlrE,EAAOa,KAAK6Q,MAAMu5D,EAAWC,EACxPA,IAAa,EACbjpE,KAAKlI,QAAQE,IAAI,UAAW,QAE5BgI,KAAKlI,QAAQE,IAAI,UAAW,IAE5BgC,EAAW+D,EAAOirE,EAClBjrE,EAAOirE,EAAWhvE,EACXA,EAAW,IAClB+D,GAAQ/D,EACRA,EAAW,GAEX4M,EAAKiiE,aAAe9qE,IACpB6I,EAAK9O,QAAQE,IAAI4O,EAAK7I,KAAMA,EAAO,MACnC6I,EAAKiiE,YAAc9qE,GAEvB6I,EAAKkgC,QAAQG,SAASnT,EAAM95B,IAEhCmoC,KAAM,WACFniC,KAAKlI,QAAQE,KACTkwB,QAASg/C,EACTgC,WAAY,aAGpBpoE,KAAM,WACGd,KAAK+oE,eACN/oE,KAAKlI,QAAQE,KAAMkwB,QAAS,OAIpCuB,EAAWzkB,EAAOtE,QAClBC,KAAM,SAAU7I,EAASsI,GAAnB,GAcEinC,GAAkC0gC,EAA4CjhC,EAA8BhhB,EAIxGqjD,EAA8CvO,EAgB9CwO,EAKAC,EAKAC,EA3CJ1iE,EAAO5G,IAIX,OAHAgF,GAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM9O,EAASsI,GACnCtI,EAAU8O,EAAK9O,SACf8O,EAAK2iE,QAAU3iE,EAAKxG,QAAQopB,WAAavxB,EAAMC,QAAQ+jB,qBAEnDnkB,EAAQwC,SAAS,sBAAsBkvE,QAAQ,mCAC/C9oE,EAAOkG,GACH6iE,cAAe3xE,EACf4xE,eAAgB5xE,EAAQ6C,WAAWxD,UAEvC,IAEJW,EAAQE,IAAI,WAAY,UAAUsC,SAAS,qBAAqBqvE,UAAU,sCAAsCH,QAAQ,mCACpHniC,EAAQvvC,EAAQ6C,WAAWuuB,GAAG,GAAI6+C,EAAa,GAAI9vE,GAAM+oE,WAAWlpE,GAAUgvC,EAAU,GAAIk5B,GAAQ34B,GAAQvhB,EAAa,GAAIw8C,IACzHxqE,QAASuvC,EACTxf,UAAW/vB,EACXypE,cAAe36D,EAAKxG,QAAQ1F,OAC5ByuE,EAAiBnpE,KAAKI,QAAQ+oE,eAAgBvO,EAAa,GAAI3iE,GAAMwjE,WAAW3jE,GAChFilE,YAAa,QACbN,SAAS,EACTF,gBAAgB,EAChBS,kBAAkB,EAClBR,kBAAkB,EAClBF,WAAY11D,EAAKxG,QAAQ1F,KACzBuU,MAAO,SAAUhH,GACb6d,EAAWnO,SACX,IAAIiyD,GAAY/qE,EAAIoJ,EAAEqrB,EAAEinC,UAAWsP,EAAYhrE,EAAIoJ,EAAEoJ,EAAEkpD,UAAWuP,EAA8B,EAAZF,GAAiBC,EAAWE,EAA+BtzE,EAAEqM,SAAS8D,EAAK8iE,eAAe,GAAIzhE,EAAE6Q,MAAMwH,QAAS0pD,EAA4B,EAAZH,GAAiBD,GAC/NG,IAAiCZ,EAAelhE,IAAMrB,EAAK2Y,UAAYuG,EAAWwN,EAAE/T,SAAWuqD,GAAmBhkD,EAAWzU,EAAEkO,SAAWyqD,GAC3IpP,EAAWyC,UAEXzC,EAAWzvC,YAGnBi+C,EAAO,GAAIpG,IACXl8B,QAASA,EACThhB,WAAYA,EACZ80C,WAAYA,EACZqI,QAASr8D,EAAKxG,QAAQ6iE,UACtBoG,EAAe,GAAIvB,IACnBhhC,QAASA,EACThhB,WAAYA,EACZ80C,WAAYA,EACZmN,WAAYA,IACZuB,EAAmB,GAAId,IACvB3hC,OAAQ,SAAUw8B,GACdz8D,EAAKqjE,SAAS5G,EAAY/vC,EAAG+vC,EAAYhyD,MAGrDy1B,EAAQ1/B,KAAKghC,EAAQ,WACjBxhC,EAAKjH,WAAamnC,EAAQz1B,EAC1BzK,EAAKxI,YAAc0oC,EAAQxT,EAC3B1sB,EAAKoB,QAAQ4/D,GACTjoE,UAAWiH,EAAKjH,UAChBvB,WAAYwI,EAAKxI,eAGrBwI,EAAKxG,QAAQ8pE,qBACbpyE,EAAQ4N,GAAG,4BAA6BM,EAAMhG,KAAM,iBAExDU,EAAOkG,GACHkgC,QAASA,EACThhB,WAAYA,EACZujD,aAAcA,EACdC,iBAAkBA,EAClB1O,WAAYA,EACZwO,KAAMA,EACNrB,WAAYA,EACZoC,QAAQ,EACR5qD,SAAS,EACTkqD,cAAepiC,EACf1nC,UAAW,EACXvB,WAAY,EACZsrE,eAAgB5xE,EAAQ6C,WAAWxD,UAEvCyP,EAAKwjE,UAAU,KACfxjE,EAAKwjE,UAAU,KACfxjE,EAAKyjE,UAAY,WACbzjE,EAAK0jE,QAAS,EACd1jE,EAAKg0D,WAAWljE,IAAI,EAAGkP,EAAK2jE,UAEhCzkD,EAAWnO,UACP/Q,EAAKxG,QAAQoqE,eACb5jE,EAAK6jE,qBAtET3yE,IAyEJ4yE,aAAc,SAAUziE,GACfjI,KAAKsqE,SACNtqE,KAAKsqE,QAAS,EACdtqE,KAAKuqE,QAAU,EACfvqE,KAAK46D,WAAWO,MAAM,EAAGn7D,KAAKuqE,UAElCx/C,aAAa/qB,KAAK2qE,eAClB3qE,KAAK2qE,cAAgB9gD,WAAW7pB,KAAKqqE,UAAW,GAChD,IAAI32C,GAAQz7B,EAAMu7B,YAAYvrB,EAC1ByrB,KACA1zB,KAAKuqE,SAAW72C,EAChB1zB,KAAK46D,WAAW1vC,KAAK,EAAGlrB,KAAKuqE,UAEjCtiE,EAAE9D,kBAENu9D,YAAa,WACT1hE,KAAK8lB,WAAWzU,EAAEqwD,eAEtBI,YAAa,SAAU9vD,EAAKvZ,GACxBuH,KAAK8lB,WAAWzU,EAAEywD,YAAY9vD,EAAKvZ,IAEvCQ,OAAQ,WACJ,MAAO+G,MAAK8lB,WAAWzU,EAAEtT,MAE7Bmf,aAAc,WACV,MAAOld,MAAKypE,cAAc,GAAGvsD,cAEjCxe,YAAa,WACT,MAAOsB,MAAKypE,cAAc,GAAG/qE,aAEjC0B,SACI8O,KAAM,WACNxU,MAAM,EACNkwE,WAAY,IACZC,oBAAoB,EACpB5H,SAAS,EACTz5C,WAAW,EACX0gD,qBAAqB,EACrBf,eAAgB,WACZ,OAAO,GAEXqB,eAAe,EACf5oD,UACIkpD,aAAc,kBACdC,gBAAiB,qBACjBC,gBAAiB,eAGzBtjE,QACIggE,EACAE,EACAD,GAEJ9hD,QAAS,WACA7lB,KAAKupE,SACNvpE,KAAKirE,kBAGb1lD,WAAY,SAAUnlB,GAClB,GAAIwG,GAAO5G,IACXgF,GAAOf,GAAGshB,WAAWpd,KAAKvB,EAAMxG,GAC5BA,EAAQoqE,eACR5jE,EAAK6jE,sBAGb7oC,MAAO,WACC5hC,KAAKupE,QACLvpE,KAAKypE,cAAc9pE,UAAU,IAE7BK,KAAK8mC,QAAQD,QACTvT,EAAG,EACHjiB,EAAG,IAEPrR,KAAKkrE,OAAO,KAGpBD,eAAgB,WACZjrE,KAAK8lB,WAAWnO,UACZ3X,KAAKopE,KAAK91C,EAAEyuC,eACZ/hE,KAAK8mC,QAAQG,SAAS,IAAKjnC,KAAK8lB,WAAWwN,EAAEthB,KAE7ChS,KAAKopE,KAAK/3D,EAAE0wD,eACZ/hE,KAAK8mC,QAAQG,SAAS,IAAKjnC,KAAK8lB,WAAWzU,EAAEW,MAGrDm5D,QAAS,WACL,GAAIrlD,GAAa9lB,KAAK8lB,UACtBA,GAAWnO,UACX3X,KAAKkrE,OAAOplD,EAAWyhB,UACvBvnC,KAAK8mC,QAAQD,OAAO/gB,EAAW48C,sBAEnC/iD,OAAQ,WACJ3f,KAAKuf,SAAU,GAEnBE,QAAS,WACLzf,KAAKuf,SAAU,GAEnB0qD,SAAU,SAAU32C,EAAGjiB,GACfrR,KAAKupE,SACLvpE,KAAKypE,cAAcrrE,WAAWS,EAAIy0B,IAClCtzB,KAAKypE,cAAc9pE,UAAUd,EAAIwS,MAEjCrR,KAAK8lB,WAAWnO,UAChB3X,KAAK8mC,QAAQD,QACTvT,EAAGA,EACHjiB,EAAGA,MAIf+5D,iBAAkB,SAAU93C,EAAGjiB,EAAGwP,GAC9B,GAAIsM,GAAMC,CACNptB,MAAKupE,QACLvpE,KAAKiqE,SAAS32C,EAAGjiB,IAEjB8b,GACImG,EAAGtzB,KAAK8mC,QAAQxT,EAChBjiB,EAAGrR,KAAK8mC,QAAQz1B,GAEpB+b,GACIkG,EAAGA,EACHjiB,EAAGA,GAEPrR,KAAKspE,iBAAiBZ,eAAev7C,EAAMC,GAC3CptB,KAAKspE,iBAAiBX,YAAY9nD,GAClC7gB,KAAKspE,iBAAiBr6D,UAG9Bo8D,YAAa,WACT,GAAIzkE,GAAO5G,IACX4G,GAAK0kE,YAAYvlC,YAAY0hC,GAC7B7gE,EAAK2kE,cAAc7oE,KAAKkE,EAAKkkE,kBAC7BlkE,EAAK4kE,SAAS/kC,QACd7/B,EAAK6kE,SAAShlC,QACd7/B,EAAKg0D,WAAWzvC,UAEpBnF,QAAS,WACLhhB,EAAOf,GAAG+hB,QAAQ7d,KAAKnI,MACnBA,KAAK46D,YACL56D,KAAK46D,WAAW50C,WAGxBklD,OAAQ,SAAU9tC,GACdp9B,KAAK8lB,WAAWo8C,QAAQ9kC,GACxBp9B,KAAK8mC,QAAQk9B,QAAQ5mC,IAEzBqtC,mBAAoB,WAChB,GAAI7jE,GAAO5G,IACX4G,GAAKkf,WAAWzU,EAAE2wD,eAClBp7D,EAAKkkE,aAAe7yE,EAAMwK,SAASmE,EAAKxG,QAAQwhB,SAASkpD,cACzDlkE,EAAKmkE,gBAAkB9yE,EAAMwK,SAASmE,EAAKxG,QAAQwhB,SAASmpD,iBAC5DnkE,EAAKokE,gBAAkB/yE,EAAMwK,SAASmE,EAAKxG,QAAQwhB,SAASopD;AAC5DpkE,EAAK6iE,cAAcD,QAAQ,oKAAsK5iE,EAAKkkE,iBAAmB,kBACzNlkE,EAAK0kE,YAAc1kE,EAAK6iE,cAAc9uE,WAAWxD,QACjDyP,EAAK2kE,cAAgB3kE,EAAK0kE,YAAY3wE,SAAS,gBAC/CiM,EAAKwiE,KAAK/3D,EAAEjK,KAAK,SAAUpB,EAAMY,EAAK8kE,YAAa9kE,IACnDA,EAAKg0D,WAAWxzD,KAAK,MAAOpB,EAAMY,EAAK+kE,SAAU/kE,KAErD+kE,SAAU,WACN,GAAI/kE,GAAO5G,IACN4G,GAAKujE,SAGVvjE,EAAKujE,QAAS,EACdvjE,EAAK0kE,YAAYvlC,YAAYyhC,GAAcltE,SAASmtE,GACpD7gE,EAAK2kE,cAAc7oE,KAAKkE,EAAKokE,qBAC7BpkE,EAAK4kE,SAASvD,OAAOrhE,EAAKxG,QAAQwqE,WAAa,GAC/ChkE,EAAKoB,QAAQ,UAEjB0jE,YAAa,WACT,GAAI9kE,GAAO5G,IACP4G,GAAKkgC,QAAQz1B,EAAIi2D,EAAyB1gE,EAAKxG,QAAQwqE,WAClDhkE,EAAKujE,SACNvjE,EAAKujE,QAAS,EACdvjE,EAAK0kE,YAAYvlC,YAAY0hC,GAAcntE,SAASktE,GACpD5gE,EAAK2kE,cAAc7oE,KAAKkE,EAAKmkE,sBAE1BnkE,EAAKujE,SACZvjE,EAAKujE,QAAS,EACdvjE,EAAK0kE,YAAYvlC,YAAYyhC,GAC7B5gE,EAAK2kE,cAAc7oE,KAAKkE,EAAKkkE,oBAGrCV,UAAW,SAAUt2C,GACjB,GAAIltB,GAAO5G,KAAM8mC,EAAUlgC,EAAKkgC,QAAS87B,EAAYh8D,EAAKkf,WAAWgO,GAAOi0C,EAAanhE,EAAKmhE,WAAYI,EAAWvhE,EAAKwiE,KAAKt1C,GAAO83C,EAAY,GAAIhD,IAC9I90C,KAAMA,EACNgT,QAASA,EACT87B,UAAWA,EACX/6C,UAAWjhB,EAAK9O,QAChBixE,cAAeniE,EAAKxG,QAAQyqE,oBAEpCjI,GAAUx7D,KAAKghC,EAAQ,WACnBwjC,EAAUj0D,YAEdwwD,EAAS/gE,KAAKghC,EAAQ,WAClBwjC,EAAUzpC,SAEdv7B,EAAKktB,EAAO,WAAa,GAAIk0C,IACzBl0C,KAAMA,EACNq0C,SAAUA,EACVrhC,QAASA,EACTihC,WAAYA,EACZnN,WAAYh0D,EAAKg0D,WACjBgI,UAAWA,EACXK,QAASr8D,EAAKxG,QAAQ6iE,QACtBqF,SAAU1hE,EAAKxG,QAAQkoE,UAAYnB,EACnCkB,mBAAoBzhE,EAAKxG,QAAQioE,oBAAsBjB,EACvD1vE,IAAK,WACDk0E,EAAU9qE,OACV8F,EAAKoB,QAAQ,aACT8rB,KAAMA,EACNn0B,UAAWiH,EAAKjH,UAChBvB,WAAYwI,EAAKxI,kBAMrCmjB,GAAG+G,OAAOmB,IACZ/yB,OAAOuB,MAAM8sB,QACRruB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAO2iC,IAAM3iC,OAAS,SAAU4iC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAU9iC,EAAGC,QACVA,OAAO,eAAgB,cAAeD,IACxC,WAijBE,MAziBC,UAAUE,EAAGE,GASV,QAASmM,GAAS+kB,EAAWvH,GACzB,SAAKuH,IAAcvH,KAGZuH,IAAcvH,GAAU7pB,EAAEqM,SAAS+kB,EAAWvH,IAb5D,GA6dOvC,GACA8tD,EACAC,EACAC,EA/dA9zE,EAAQvB,OAAOuB,MAAOspB,EAAKtpB,EAAMspB,GAAIvc,EAASuc,EAAGvc,OAAQpO,EAAQqB,EAAMrB,MAAOsB,EAAUD,EAAMC,QAAS+G,EAAYhH,EAAMgH,UAAW1F,EAAatB,EAAMuB,YAAaC,EAAcxB,EAAMyB,aAAcsyE,EAAO,OAAQC,EAAQ,QAASC,EAAa,aAAcC,EAAW,WAAYC,EAAS,SAAUhqD,EAAO,OAAQE,EAAQ,QAAS+pD,EAAM,MAAOC,EAAS,SAAUC,EAAW,WAAY9tC,EAAS,SAAU+tC,EAAO,OAAQC,EAAW,WAAY3tC,EAAW,WAAY4tC,EAAU,UAAWC,EAAU,UAAWC,EAAS,iBAAkBC,EAAe,iBAAkBC,EAAqB,uBAAwBC,EAAiB,4CAA6CC,EAAY,OAAQC,EAAmBx2E,EAAE8G,SAASmC,iBAAkBsG,EAAQvP,EAAEuP,MAAOknE,EAASz2E,EAAEC,QAASkxE,EAAS,SAAUvpC,EAAYnmC,EAAQC,YAAYH,IAAKmiC,EAAYkE,EAAY,YAAa39B,EAASjK,EAAEiK,OAAQysE,EAAK,cAAe7vE,GAC54B,YACA,cACA,eACA,aACA,cACA,eAQJ8vE,EAAQpoE,EAAOtE,QACfC,KAAM,SAAU7I,EAASsI,GACrB,GAAiBitE,GAAbzmE,EAAO5G,IACXI,GAAUA,MACNA,EAAQ/B,QACR+B,EAAQqjC,OAASrjC,EAAQqjC,QAAU6oC,EAAS,IAAMhqD,EAClDliB,EAAQpG,SAAWoG,EAAQpG,UAAYqyE,EAAM,IAAM/pD,GAEvDtd,EAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM9O,EAASsI,GACnCtI,EAAU8O,EAAK9O,QACfsI,EAAUwG,EAAKxG,QACfwG,EAAK0mE,WAAaltE,EAAQmtE,UAAYntE,EAAQmtE,UAAUv2E,MAAM,QAC9D4P,EAAK4mE,UAAYv1E,EAAMg0B,cAAc+gD,EAAW/0E,EAAM4rB,QACvB,IAA3Bjd,EAAK0mE,WAAW31E,QAChBiP,EAAK0mE,WAAWxlE,KAAKlB,EAAK0mE,WAAW,IAEzCD,EAAc52E,EAAEmQ,EAAKxG,QAAQqtE,QAAQr1D,QAAQ,qBAAqBvU,OAAO,sBACzEzD,EAAQo3B,SAAW/gC,EAAEA,EAAE2J,EAAQo3B,UAAU,IAAM61C,EAAY,IAAM9vE,SAASya,MAC1EpR,EAAK9O,QAAQgJ,OAAOxG,SAAS,2BAA2B8G,YAAY,UAAWhB,EAAQ/B,OAAOrG,KAAMgC,SAAUuyE,IAAY/0C,SAASp3B,EAAQo3B,UAAUt0B,KAAK,eAAe,GAAMwC,GAAG,aAAeynE,EAAI,WACjMvmE,EAAK8mE,UAAW,IACjBhoE,GAAG,QAAUynE,EAAI,SAAUllE,GAC1B,GAAI0lE,GAAal3E,EAAEuJ,MAAMwnB,KAAK,WAAW7tB,UACV,IAA3Bg0E,EAAWhuE,aAAqBsI,EAAEuY,cAAcmT,OAAS,GAAKg6C,EAAWhuE,cAAgBguE,EAAW5tC,KAAK,gBAAkB4tC,EAAW5tC,KAAK,iBAAmB93B,EAAEuY,cAAcmT,OAAS,IACvL1rB,EAAE9D,mBAEPuB,GAAG,aAAeynE,EAAI,WACrBvmE,EAAK8mE,UAAW,IAEpB9mE,EAAKxN,QAAU3C,IACX2J,EAAQwtE,aAAc,IACtBxtE,EAAQwtE,WACJC,MAAQ9tE,YACR+tE,OACIhtE,MAAM,EACNf,cAIZW,EAAON,EAAQwtE,UAAUC,MACrBttE,SAAU,WACNqG,EAAKxN,QAAQpB,KAAMmG,SAAUuuE,IAC7B9lE,EAAK89D,YAAa,EAClB99D,EAAK00D,SAAS6Q,MAGtBzrE,EAAON,EAAQwtE,UAAUE,OACrBvtE,SAAU,WACNqG,EAAKmnE,qBAGbnnE,EAAKonE,gBAAkB,SAAU/lE,GAC7BrB,EAAKqnE,WAAWhmE,IAGhBrB,EAAKsnE,aADLh2E,EAAQof,SAASyC,QACG,SAAU9R,GAC1B4hB,WAAW,WACPjjB,EAAKif,QAAQ5d,IACd,MAGa,SAAUA,GAC1BrB,EAAKif,QAAQ5d,IAGjB7H,EAAQ+tE,cACR13E,EAAE2J,EAAQ+tE,cAAczoE,GAAGtF,EAAQguE,YAAcjB,EAAI12E,EAAEuP,MAAMY,EAAKyZ,OAAQzZ,KAGlFc,QACIskE,EACAG,EACAF,EACAC,GAEJ9rE,SACI8O,KAAM,QACNk/D,YAAa,QACb3qC,OAAQ6oC,EAAS,IAAMlqD,EACvBpoB,SAAUqyE,EAAM,IAAMjqD,EACtBqrD,OAAQjB,EACRh1C,SAAU,KACV+1C,UAAW,WACXc,SAAU33E,OACV43E,kBAAkB,EAClBx1E,UAAU,EACVy1E,OAAO,EACPC,YACIx1E,MAAO,EACPC,OAAQ,GAEZ20E,WACIC,MACI9tE,QAAS,eACTs/B,YAAY,EACZh/B,SAAU,KAEdytE,OACIztE,SAAU,IACVS,MAAM,KAIlBitE,gBAAiB,WAAA,GACTnnE,GAAO5G,KACP6b,EAAWjV,EAAKxN,QAAQoC,KAAKixE,EACjC7lE,GAAKxN,QAAQ0H,OACT+a,GACAjV,EAAKxN,QAAQpB,IAAI6jB,GAEjBjV,EAAKxG,QAAQqtE,QAAUjB,GACvB5lE,EAAK6nE,gBAET7nE,EAAK8nE,UAAW,EAChB9nE,EAAK00D,SAAS4Q,IAElBlmD,QAAS,WACL,GAAyErsB,GAArEiN,EAAO5G,KAAMI,EAAUwG,EAAKxG,QAAStI,EAAU8O,EAAK9O,QAAQiyB,IAAIojD,EACpEnoE,GAAOf,GAAG+hB,QAAQ7d,KAAKvB,GACnBxG,EAAQ+tE,cACR13E,EAAE2J,EAAQ+tE,cAAcpkD,IAAIojD,GAE3B/sE,EAAQmuE,QACTtB,EAAiBplE,OAAOjB,EAAK4mE,UAAW5mE,EAAKonE,iBAC7CpnE,EAAK+nE,eAAc,IAEvB12E,EAAM+tB,QAAQpf,EAAK9O,QAAQ6C,YAC3B7C,EAAQmuB,aACJ7lB,EAAQo3B,SAAS,KAAOj6B,SAASya,OACjCre,EAAS7B,EAAQ6B,OAAO,0BACpBA,EAAO,GACPA,EAAO0uB,SAEPvwB,EAAQuwB,WAIpBwlD,KAAM,SAAUv6C,EAAGjiB,GACf,GAIuDu8D,GAAWx0E,EAJ9DwN,EAAO5G,KAAM4uE,GACTtsC,SAAU5sB,MAAMrD,SAAShB,EAAG,KAC5BiiB,EAAGA,EACHjiB,EAAGA,GACJvZ,EAAU8O,EAAK9O,QAASsI,EAAUwG,EAAKxG,QAA6BqtE,EAASh3E,EAAE2J,EAAQqtE,QAASjsD,EAAS1pB,EAAQ,IAAMA,EAAQ8B,SAAS,YAC/I,KAAKgN,EAAKpD,UAAW,CAOjB,GANIpD,EAAQkuE,mBACJ9sD,GAAuB,aAAblkB,EAAO,IACjBA,EAAOwU,QAEXha,EAAQE,IAAIC,EAAMkF,kBAAkBswE,EAAO,GAAInwE,KAE/CxF,EAAQ0D,KAAK,cAAgBoL,EAAK00D,SAAS0Q,GAC3C,MAEJplE,GAAK89D,YAAa,EACbtkE,EAAQmuE,QACTtB,EAAiBplE,OAAOjB,EAAK4mE,UAAW5mE,EAAKonE,iBAAiB5mE,KAAKR,EAAK4mE,UAAW5mE,EAAKonE,iBACxFpnE,EAAK+nE,eAAc,GACnB/nE,EAAK+nE,eAAc,IAEvB/nE,EAAKxN,QAAUA,EAAUnB,EAAMY,KAAKf,EAASsI,EAAQtH,UAAUd,KAC3DmG,SAAUsgC,EACV1kC,QAAS,QACTC,SAAUuyE,IACXrpE,KAAK,eAAe,GACnBhL,EAAQof,SAASyC,SACjB3gB,EAAQpB,IAAImiC,EAAW,iBAE3B/gC,EAAQpB,IAAI8mC,GACRroC,EAAE2J,EAAQo3B,UAAU,IAAMj6B,SAASya,MACnC5e,EAAQpB,IAAIq0E,EAAK,YAErBzlE,EAAKioE,QAAUjoE,EAAKkoE,UAAUF,GAC9BhB,EAAYhnE,EAAKmoE,iBACb3uE,EAAQqtE,QAAUjB,GAClB5lE,EAAKooE,cAAcpB,GAEvB91E,EAAQ0D,KAAKmxE,EAASiB,EAAU7tE,SAAS8f,WAAU,GAAMI,aAAa2tD,GAAW1qE,KAAK,eAAe,KAG7G+rE,UAAW,SAAU3sC,GAAV,GAC0DlpC,GAoB7DgG,EApBAwH,EAAO5G,KAAMlI,EAAU8O,EAAK9O,QAASsI,EAAUwG,EAAKxG,QAAkBqtE,EAASh3E,EAAE2J,EAAQqtE,QAASjsD,EAAS1pB,EAAQ,IAAMA,EAAQ8B,SAAS,YAqB9I,OApBIwG,GAAQkuE,mBACJ9sD,GAAuB,aAAblkB,EAAO,IACjBA,EAAOwU,QAEXha,EAAQE,IAAIC,EAAMkF,kBAAkBswE,EAAO,GAAInwE,KAEnDsJ,EAAKxN,QAAUA,EAAUnB,EAAMY,KAAKf,EAASsI,EAAQtH,UAAUd,KAC3DmG,SAAUsgC,EACV1kC,QAAS,QACTC,SAAUuyE,IAEVr0E,EAAQof,SAASyC,SACjB3gB,EAAQpB,IAAImiC,EAAW,iBAE3B/gC,EAAQpB,IAAI8mC,GACRroC,EAAE2J,EAAQo3B,UAAU,IAAMj6B,SAASya,MACnC5e,EAAQpB,IAAIq0E,EAAK,YAErBzlE,EAAKkoE,UAAUxsC,OACXljC,EAAShG,EAAQgG,UAEjBpG,MAAOf,EAAMuB,YAAYJ,GACzBH,OAAQhB,EAAMyB,aAAaN,GAC3BV,KAAM0G,EAAO1G,KACb4G,IAAKF,EAAOE,MAGpByvE,eAAgB,WACZ,GAAInB,GAAYltE,GAAO,KAAUV,KAAKI,QAAQwtE,UAAUC,KAExD,OADAD,GAAU7tE,QAAU9H,EAAM4H,aAAa+tE,EAAU7tE,QAASC,KAAK6uE,SACxDjB,GAEXa,cAAe,WAAA,GACPhB,GAASh3E,EAAEuJ,KAAKI,QAAQqtE,QACxBxyC,IAAcwyC,EAAOvqE,KAAK,UAAY,IAAI7K,MAAMy0E,KAChD,GACA,SACD,GACCoC,EAAWrC,EAAe,IAAM5xC,CACpCwyC,GAAO1nC,YAAYmpC,GAAUv0E,SAASoyE,GAAgBhnC,YAAY6mC,GAAQ7mC,YAAYmpC,GACtFlvE,KAAKlI,QAAQiuC,YAAY8mC,EAAe,IAAM50E,EAAM2M,WAAWq2B,GAAW36B,UAE9E0uE,cAAe,SAAUpB,GAAV,GACP3yC,GAAY2yC,EAAU7tE,QAAQwjC,QAAUqqC,EAAU7tE,QAAQwjC,QAAQtI,UAAY,OAC9Ei0C,EAAWrC,EAAe,IAAM5xC,CACpCxkC,GAAEuJ,KAAKI,QAAQqtE,QAAQnzE,SAAS40E,GAAUv0E,SAASoyE,GAAgBzyE,SAASsyE,GAAQtyE,SAAS40E,GAC7FlvE,KAAKlI,QAAQwC,SAASuyE,EAAe,IAAM50E,EAAM2M,WAAWq2B,GAAW36B,UAE3EtG,SAAU,WACFgG,KAAKwD,YACLxD,KAAK6uE,QAAU7uE,KAAK8uE,cAG5BzuD,OAAQ,WACJ,GAAIzZ,GAAO5G,IACX4G,GAAKA,EAAKpD,UAAYyoE,EAAQD,MAElCxoE,QAAS,WACL,MAAOxD,MAAKlI,QAAQgC,GAAG,IAAM4yE,IAEjCoB,MAAO,SAAUqB,GACb,GAAyCt2E,GAAM+0E,EAAWwB,EAAaC,EAAnEzoE,EAAO5G,KAAMI,EAAUwG,EAAKxG,OAChC,IAAIwG,EAAKpD,UAAW,CAGhB,GAFA3K,EAAO+N,EAAKxN,QAAQ,GAAKwN,EAAKxN,QAAUnB,EAAMY,KAAK+N,EAAK9O,SAASgJ,OACjE8F,EAAK+nE,eAAc,GACf/nE,EAAK8nE,UAAY9nE,EAAK00D,SAAS2Q,GAE/B,MADArlE,GAAK+nE,eAAc,GACnB,CAEJ/nE,GAAK9O,QAAQ0vB,KAAK,YAAY9pB,KAAK,WAC/B,GAAIkJ,GAAOnQ,EAAEuJ,MAAOsvE,EAAQ1oE,EAAKpL,KAAK,aAClC8zE,IACAA,EAAMxB,MAAMqB,KAGpBlC,EAAiBplE,OAAOjB,EAAK4mE,UAAW5mE,EAAKonE,iBACzCmB,EACAvB,GACI9sE,MAAM,EACNf,aAGJ6tE,EAAYltE,GAAO,KAAUN,EAAQwtE,UAAUE,OAC/CsB,EAAcxoE,EAAK9O,QAAQ0D,KAAKmxE,GAChC0C,EAAezB,EAAU7tE,SACpBsvE,IAAiBp3E,EAAM8F,KAAKsxE,IAAiBD,GAAen3E,EAAM8F,KAAKqxE,KACxExB,EAAU7tE,QAAUqvE,EACpBxB,EAAUttE,SAAU,GAExBsG,EAAK8nE,UAAW,GAEpB9nE,EAAK9O,QAAQ+nB,WAAU,GAAM3c,KAAK,eAAe,GACjDrK,EAAKb,KAAMmG,SAAUsgC,IAAUv7B,KAAK,eAAe,GACnD0D,EAAK9O,QAAQmoB,aAAa2tD,GACtBuB,GACAvoE,EAAKmnE,oBAIjBzS,SAAU,SAAUiU,GAChB,MAAOvvE,MAAKgI,QAAQunE,GAAMrwE,KAAMqwE,KAEpC1pD,QAAS,SAAU5d,GACf,GAAIrB,GAAO5G,IACP9H,GAAQipB,OAAOjjB,QAAQ+J,EAAE/I,YACzB6rB,aAAankB,EAAK4oE,gBAClB5oE,EAAK4oE,eAAiB3lD,WAAW,WAC7BjjB,EAAKkoE,YACLloE,EAAK4oE,eAAiB,MACvB,OAEE5oE,EAAK8mE,UAAY9mE,EAAK89D,YAAc99D,EAAK9O,QAAQ8B,SAAS,sBAC3DgN,EAAKknE,SAIjBa,cAAe,SAAUtuD,GAAV,GACPqI,GAASrI,EAAS,KAAO,MACzB1Y,EAAazP,EAAQipB,MACnBjpB,GAAQof,SAASqD,KAAOziB,EAAQof,SAASyC,UAC3CpS,GAAc,IAAMigE,GAExB5nE,KAAKyvE,qBAAqB/mD,GAAQk/C,EAAQ5nE,KAAKkuE,cAC/ChB,EAAOxkD,GAAQ/gB,EAAY3H,KAAKkuE,eAEpCD,WAAY,SAAUhmE,GAClB,GAAIrB,GAAO5G,KAAM6nB,EAAYjhB,EAAK9O,QAAQ,GAAIsI,EAAUwG,EAAKxG,QAASqtE,EAASh3E,EAAE2J,EAAQqtE,QAAQ,GAAIU,EAAe/tE,EAAQ+tE,aAAc7tD,EAASroB,EAAM4M,YAAYoD,GAAIqnE,EAAQ74E,EAAE6pB,GAAQlI,QAAQ,YAAaoJ,EAAS8tD,EAAM31E,SAASA,OAAO,YAAYhC,MAC3P23E,GAAQA,EAAM,IACT9tD,GAAU8tD,GAASA,IAAU1oE,EAAK9O,QAAQ,IAGF,YAAzCrB,EAAEwR,EAAEqY,QAAQlI,QAAQ,KAAK5c,KAAK,SAG7BsH,EAAS+kB,EAAWvH,IAAYxd,EAAS2qE,EAAQntD,IAAa6tD,GAAgBrrE,EAASrM,EAAE03E,GAAc,GAAI7tD,IAC5G1Z,EAAKknE,UAGb4B,KAAM,SAAU11E,EAAU+D,EAAM4xE,GAC5B,GAAIC,GAAS,CAOb,OANI51E,GAAW+D,EAAO4xE,IAClBC,EAASD,GAAgB31E,EAAW+D,IAEpC/D,EAAW,IACX41E,GAAU51E,GAEP41E,GAEXC,MAAO,SAAUzwE,EAAQrB,EAAM+xE,EAAYH,EAAclsC,EAAQzpC,EAAU+1E,GACvE,GAAIH,GAAS,CAUb,OATAG,GAAUA,GAAWhyE,EACjB/D,IAAaypC,GAAUzpC,IAAaoyE,GAAU3oC,IAAW2oC,IACrDhtE,EAAS2wE,EAAUJ,IACnBC,KAAYE,EAAa/xE,IAEzBqB,EAASwwE,EAAS,IAClBA,GAAUE,EAAa/xE,IAGxB6xE,GAEXH,mBAAoB,WAChB,MAAOh5E,GAAEuJ,KAAKI,QAAQqtE,QAAQ32C,aAAa,QAAQjzB,OAAO,SAAUsO,EAAOra,GACvE,MAAOG,GAAM+F,aAAalG,MAGlCg3E,UAAW,SAAUF,GAAV,GACuYoB,GAAkBrsE,EAASssE,EAAyEt4E,EAAQu4E,EAAgBC,EAAeC,EAiBjhB/wE,EA2BJgxE,EAA6EjxE,EAA6BkxE,EAU1GC,EAA8B10D,EAA4B2yD,EAO1DgC,EACAC,EACAC,EA/DA9pE,EAAO5G,KAAMlI,EAAU8O,EAAK9O,QAASsB,EAAUwN,EAAKxN,QAASgH,EAAUwG,EAAKxG,QAASiuE,EAAW53E,EAAE2J,EAAQiuE,UAAWtxD,EAAY7kB,EAAQ6kB,YAAa4zD,KAActC,EAAS,IAAM33E,QAAUA,OAAOyiB,YAAc4D,GAAa,MAAO0wD,EAASh3E,EAAE2J,EAAQqtE,QAASmD,EAAUxwE,EAAQqjC,OAAO3mC,cAAc9F,MAAM,KAAM65E,EAAYzwE,EAAQpG,SAAS8C,cAAc9F,MAAM,KAAMs2E,EAAa1mE,EAAK0mE,WAAqDjpC,EAAS,MAAO1mC,EAAM,EAAGsf,EAAQ1f,SAASmC,eAqBje,IAnBIwwE,EADA9vE,EAAQiuE,WAAa33E,QAEjB4I,IAAK5I,OAAO+I,aAAelC,SAASmC,gBAAgBC,WAAa,EACjEjH,KAAMhC,OAAOkJ,aAAerC,SAASmC,gBAAgBtB,YAAc,GAGtDiwE,EAASjvE,SAE1BuxE,GACAR,EAAgBz5E,OAAOyiB,WACvBi3D,EAAiB15E,OAAO4iB,cAExB62D,EAAgB9B,EAASr1E,QACzBo3E,EAAiB/B,EAASp1E,UAE1B03E,GAAY1zD,EAAMC,aAAeD,EAAME,aAAe,IAClD9d,EAAOe,EAAQ/B,SAAa,EAChC8xE,GAAiB9wE,EAAOpH,EAAMC,QAAQwf,aAE1Cs4D,EAAmBvC,EAAO9pE,UAAUE,OAAOzK,EAAQ03E,YAC/Cd,EAAiB,GAEjB,GADAC,EAAerxE,KAAKnG,KAAWu3E,EAAiBh4E,IAAI,UAAY,GAE5DqsC,EAAS4rC,EAAe,OAGxB,KADAtsE,EAAU8pE,EAAO32C,aAAak5C,GACzBr4E,EAASgM,EAAQhM,OAAQgG,EAAMhG,EAAQgG,IACxCsyE,GAAsBx5E,EAAEkN,EAAQhG,IAAM3F,IAAI,UACtCi4E,GAAgB5rC,EAAS4rC,IACzB5rC,EAAS4rC,EAAe,GA6CxC,OAxCA72E,GAAQpB,IAAI,SAAUqsC,GAElBjrC,EAAQpB,IADR42E,GAASA,EAAMtsC,SAEX5pC,KAAMk2E,EAAMt7C,EACZh0B,IAAKsvE,EAAMv9D,GAGHzK,EAAKmqE,OAAOH,EAASC,IAEjCR,EAAMpxE,EAAU7F,EAAS0lC,EAAU2uC,EAAO,KAAOr0E,EAAQ43E,eAAe,IAAK5xE,EAASH,EAAU7F,GAAUk3E,EAAe7C,EAAOuD,eAAer3E,OAAO,4CACtJ22E,EAAa34E,SACb04E,EAAMpxE,EAAU7F,EAAS0lC,GAAU,GACnC1/B,EAASH,EAAU7F,IAEvBgG,EAAOE,KAAO4wE,EAAe5wE,IAC7BF,EAAO1G,MAAQw3E,EAAex3E,KACzBkO,EAAKxN,QAAQoC,KAAKixE,IACnBrzE,EAAQoC,KAAKixE,EAAU/rE,KAAW2vE,IAElCE,EAAU7vE,KAAWtB,GAASyc,EAAWnb,KAAW2vE,GAAM7B,EAAapuE,EAAQouE,WAC7D,QAAlBlB,EAAW,KACXzxD,EAASvc,KAAOsH,EAAK8oE,KAAKa,EAAQjxE,IAAK7F,EAAYL,GAAWo1E,EAAWv1E,OAAQm3E,EAAiBrzD,IAEhF,QAAlBuwD,EAAW,KACXzxD,EAASnjB,MAAQkO,EAAK8oE,KAAKa,EAAQ73E,KAAMa,EAAWH,GAAWo1E,EAAWx1E,MAAOm3E,EAAgBpzD,IAEjGyzD,EAAU9vE,KAAWmb,GACrB40D,EAAgBh3E,EAAY3B,GAC5B44E,EAAgBj3E,EAAYL,IAC3BA,EAAQH,UAAYw3E,IACrBC,GAAgCD,GAEd,SAAlBnD,EAAW,KACXzxD,EAASvc,KAAOsH,EAAKipE,MAAMU,EAAQjxE,IAAKmxE,EAAeh3E,EAAYg0E,GAAS2C,EAAiBrzD,EAAW6zD,EAAQ,GAAIC,EAAU,GAAIH,IAEhH,SAAlBpD,EAAW,KACXzxD,EAASnjB,MAAQkO,EAAKipE,MAAMU,EAAQ73E,KAAMa,EAAWzB,GAAUyB,EAAWk0E,GAAS0C,EAAgBpzD,EAAW6zD,EAAQ,GAAIC,EAAU,GAAIt3E,EAAWH,KAEvJtB,EAAQE,IAAI8mC,EAAUytC,GACtBnzE,EAAQpB,IAAI6jB,GACLA,EAASnjB,MAAQ83E,EAAQ93E,MAAQmjB,EAASvc,KAAOkxE,EAAQlxE,KAEpEyxE,OAAQ,SAAUttC,EAAQzpC,GACtB,GAA6Qi3E,GAAzQrqE,EAAO5G,KAAMlI,EAAU8O,EAAKxN,QAASq0E,EAASh3E,EAAEmQ,EAAKxG,QAAQqtE,QAASyD,EAAiBztC,EAAO,GAAI0tC,EAAmB1tC,EAAO,GAAI2tC,EAAmBp3E,EAAS,GAAIq3E,EAAqBr3E,EAAS,GAAIs3E,EAAeryE,EAAUwuE,GAASj2C,EAAW/gC,EAAEmQ,EAAKxG,QAAQo3B,UAA2Bx+B,EAAQO,EAAWzB,GAAUmB,EAASQ,EAAY3B,IAAY2B,EAAY3B,EAAQ6C,WAAWxD,SAAUo6E,EAAch4E,EAAWk0E,GAAS+D,EAAe/3E,EAAYg0E,GAASnuE,EAAMgyE,EAAahyE,IAAK5G,EAAO44E,EAAa54E,KAAM+W,EAAQ7Q,KAAK6Q,KA8BzgB,OA7BI+nB,GAAS,IAAMj6B,SAASya,OACxBi5D,EAAiBhyE,EAAUu4B,GAC3Bl4B,GAAO2xE,EAAe3xE,IACtB5G,GAAQu4E,EAAev4E,MAEvBw4E,IAAmB5E,IACnBhtE,GAAOkyE,GAEPN,IAAmB9E,IACnB9sE,GAAOmQ,EAAM+hE,EAAe,IAE5BJ,IAAqB9E,IACrBhtE,GAAOrG,GAEPm4E,IAAqBhF,IACrB9sE,GAAOmQ,EAAMxW,EAAS,IAEtBk4E,IAAqB7uD,IACrB5pB,GAAQ64E,GAERJ,IAAqB/E,IACrB1zE,GAAQ+W,EAAM8hE,EAAc,IAE5BF,IAAuB/uD,IACvB5pB,GAAQM,GAERq4E,IAAuBjF,IACvB1zE,GAAQ+W,EAAMzW,EAAQ,KAGtBsG,IAAKA,EACL5G,KAAMA,KAIlB6oB,GAAG+G,OAAO8kD,GACNrvD,EAAa9lB,EAAMC,QAAQ6lB,WAC3B8tD,EAAe,kBACfC,EAAyB,8KACzBC,EAAan1E,EAAM8J,QACnBC,KAAM,SAAU7I,GACZkI,KAAKlI,QAAUrB,EAAEqB,GACjBkI,KAAKlI,QAAQ8wB,YAAYijD,IAE7B4F,KAAM,WACFzxE,KAAKlI,QAAQ4N,GAAG,UAAWM,EAAMhG,KAAK0xE,YAAa1xE,QAEvD2xE,WAAY,WACR3xE,KAAKlI,QAAQ+wB,aAAagjD,IAE9B7lD,QAAS,WACLhmB,KAAKlI,QAAQ+wB,aAAagjD,GAC1B7rE,KAAKlI,QAAUnB,GAEnBi7E,WAAY,WACR,OAAO,GAEXF,YAAa,SAAUzpE,GAAV,GAILwe,GACAorD,EACAzpB,CALY,KAAZngD,EAAEy1D,OAAgB19D,KAAK4xE,eAAgB3pE,EAAE7D,uBAGzCqiB,EAAWzmB,KAAK8xE,qBAChBD,EAAiB7xE,KAAK+xE,uBAAuBtrD,GAC7C2hC,EAAOpoD,KAAKgyE,eAAe/pE,EAAG4pE,GAClC7xE,KAAKiyE,OAAO7pB,GACZngD,EAAE9D,mBAEN2tE,mBAAoB,WAChB,GAAIrrD,GAAWzmB,KAAKlI,QAAQ0vB,KAAKskD,GAAwBjoE,OAAO,SAAU/I,EAAGq4C,GACzE,MAAOA,GAAK++B,UAAY,GAAKz7E,EAAE08C,GAAMr5C,GAAG,cAAgBrD,EAAE08C,GAAMr5C,GAAG,cAKvE,OAHIkG,MAAKlI,QAAQgC,GAAG,eAChB2sB,EAAS3e,KAAK9H,KAAKlI,QAAQ,IAExB2uB,GAEXsrD,uBAAwB,SAAUtrD,GAAV,GAChBorD,GAMIM,CASR,OAdIp0D,GACA8zD,EAAiBprD,EAAStI,KAAK,SAAUssB,EAAM2d,GAC3C,MAAO3d,GAAKynC,SAAW9pB,EAAK8pB,YAG5BC,EAAW,YACf1rD,EAAS/oB,KAAK,SAAU5C,EAAGq4C,GACvBA,EAAKt1B,aAAas0D,EAAUr3E,KAEhC+2E,EAAiBprD,EAAStI,KAAK,SAAUssB,EAAM2d,GAC3C,MAAO3d,GAAKynC,WAAa9pB,EAAK8pB,SAAW7/D,SAASo4B,EAAKzoC,aAAamwE,GAAW,IAAM9/D,SAAS+1C,EAAKpmD,aAAamwE,GAAW,IAAM1nC,EAAKynC,SAAW9pB,EAAK8pB,WAE1JzrD,EAASnB,WAAW6sD,IAEjBN,GAEXG,eAAgB,SAAU/pE,EAAGwe,GAAb,GACR9S,GAAQ8S,EAAS9uB,OACjBgU,EAAU8a,EAAStU,MAAMlK,EAAEqY,OAC/B,OAAOmG,GAAS9C,KAAKhY,GAAW1D,EAAEyuB,YAAgB,IAAM/iB,IAE5Ds+D,OAAQ,SAAUn6E,GACdA,EAAQ88B,QACgB,SAApB98B,EAAQuL,UAAuBvL,EAAQ+8B,mBAAqB70B,KAAKoyE,oBAAoBt6E,IACrFA,EAAQ+8B,kBAAkB,EAAG/8B,EAAQ8F,MAAMjG,SAGnDy6E,oBAAqB,SAAUt6E,GAC3B,GAAIu6E,GAAcv6E,EAAQoH,KAAKpC,aAC/B,OAAuB,SAAhBu1E,GAA0C,WAAhBA,GAA4C,QAAhBA,GAAyC,QAAhBA,GAAyC,aAAhBA,KAGvH9wD,EAAG6rD,MAAMrB,WAAaA,GACxBr1E,OAAOuB,MAAM8sB,QACRruB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAO2iC,IAAM3iC,OAAS,SAAU4iC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAU9iC,EAAGC,QACVA,OAAO,iBACH,aACA,eACDD,IACL,WA2VE,MA1UC,UAAUE,EAAGE,GAgDV,QAAS27E,GAAax6E,GAClB,KAAOA,EAAQH,SACP46E,EAAgCz6E,IAGpCA,EAAUA,EAAQ6B,SAG1B,QAAS44E,GAAgCz6E,GACrC,GAAIixC,GAAQjxC,EAAQ0D,KAAKvD,EAAMgK,GAAK,QACpC,IAAI8mC,EAGA,MAFAjxC,GAAQoL,KAAK,QAAS6lC,GACtBjxC,EAAQmuB,WAAWhuB,EAAMgK,GAAK,UACvB,EAGf,QAASuwE,GAA6B16E,GAClC,GAAIixC,GAAQjxC,EAAQoL,KAAK,QACzB,IAAI6lC,EAGA,MAFAjxC,GAAQ0D,KAAKvD,EAAMgK,GAAK,QAAS8mC,GACjCjxC,EAAQoL,KAAK,QAAS,KACf,EAGf,QAASuvE,GAAoB36E,GACzB,KAAOA,EAAQH,SAAWG,EAAQgC,GAAG,UAC7B04E,EAA6B16E,IAGjCA,EAAUA,EAAQ6B,SA7E7B,GACO1B,GAAQvB,OAAOuB,MAAO+M,EAAS/M,EAAMspB,GAAGvc,OAAQooE,EAAQn1E,EAAMspB,GAAG6rD,MAAOlxE,EAAajE,EAAMiE,WAAYqzC,EAAgB94C,EAAE84C,cAAe7uC,EAASjK,EAAEiK,OAAQsF,EAAQvP,EAAEuP,MAAO0sE,EAAWj8E,EAAE8G,UAAW6lB,EAAanrB,EAAMmrB,WAAYuvD,EAAe,aAAcC,EAAc,mBAAoB9d,EAAO,OAAQC,EAAO,OAAQ7b,EAAQ,QAAS25B,EAAc,cAAe15B,EAAe,eAAgB25B,EAAgB,kBAAmBC,EAAW,0TAA0UC,EAAiB/6E,EAAMwK,SAAS,kCAAuCqwE,EAAgB,wFAA2G3F,EAAK,gBAAiB8F,GACz9Br6E,QACI6qC,OAAQ,gBACRzpC,SAAU,cAEdsF,KACImkC,OAAQ,aACRzpC,SAAU,iBAEdtB,MACI+qC,OAAQ,cACRzpC,SAAU,eACVuzE,UAAW,YAEf50E,OACI8qC,OAAQ,eACRzpC,SAAU,cACVuzE,UAAW,YAEfjV,QACIt+D,SAAU,gBACVypC,OAAQ,kBAEbyvC,GACC5zE,IAAO,SACP1G,OAAU,MACVF,KAAQ,QACRC,MAAS,OACT2/D,OAAU,UACX6a,GACCv6E,OAAQ,IACR0G,IAAK,IACL5G,KAAM,IACNC,MAAO,IACP2/D,OAAQ,KACT8a,GACC7zC,YACIngC,OAAQ,MACRrB,KAAM,eAEVu+B,UACIl9B,OAAQ,OACRrB,KAAM,eAEXs1E,EAAiB,SAAUprE,GAC1B,MAAOA,GAAEqY,OAAO9kB,KAAKvD,EAAMgK,GAAK,UAkCpCqxE,EAAUtuE,EAAOtE,QACjBC,KAAM,SAAU7I,EAASsI,GACrB,GAAiB0zB,GAAbltB,EAAO5G,IACXgF,GAAOf,GAAGtD,KAAKwH,KAAKvB,EAAM9O,EAASsI,GACnC0zB,EAAOltB,EAAKxG,QAAQpG,SAAS3B,MAAM,cAAgB,aAAe,WAClEuO,EAAKkf,WAAastD,EAAWt/C,GAC7BltB,EAAK2sE,wBAA0BvtE,EAAMY,EAAK4sE,iBAAkB5sE,GAC5DA,EAAK9O,QAAQ4N,GAAGkB,EAAKxG,QAAQqzE,OAAStG,EAAIvmE,EAAKxG,QAAQyD,OAAQmC,EAAMY,EAAK8sE,QAAS9sE,IAC9E5G,KAAK2zE,mBACN/sE,EAAK9O,QAAQ4N,GAAG,aAAeynE,EAAIvmE,EAAKxG,QAAQyD,OAAQmC,EAAMY,EAAKgtE,YAAahtE,IAEhF5G,KAAKI,QAAQyzE,WAAa7zE,KAAK2zE,mBAC/B/sE,EAAK9O,QAAQ4N,GAAG,aAAeynE,EAAIvmE,EAAKxG,QAAQyD,OAAQmC,EAAMY,EAAKktE,YAAaltE,IAEhF5G,KAAKI,QAAQyzE,UAAY7zE,KAAK2zE,mBAC9B/sE,EAAK9O,QAAQ4N,GAAG,OAASynE,EAAIvmE,EAAKxG,QAAQyD,OAAQmC,EAAMY,EAAKmtE,MAAOntE,KAG5ExG,SACI8O,KAAM,UACNrL,OAAQ,GACRyxD,QAAS+d,EACTW,UAAW,IACXC,SAAS,EACTj6E,SAAU,SACVy5E,OAAQ,aACRI,UAAU,EACV76E,MAAO,KACPC,OAAQ,KACR20E,WACIC,MACI9tE,QAAS,UACTM,SAAU,GAEdytE,OACIztE,SAAU,GACVS,MAAM,KAIlB4G,QACIotD,EACAC,EACA8d,EACA35B,EACAC,GAEJw6B,gBAAiB,WACb,MAAO3zE,MAAKI,QAAQqzE,QAAUzzE,KAAKI,QAAQqzE,OAAOp7E,MAAM,UAE5Du7E,YAAa,SAAU3rE,GACnBwqE,EAAoBh8E,EAAEwR,EAAEywD,iBAE5Bgb,QAAS,SAAUzrE,GAAV,GACDrB,GAAO5G,KACP04D,EAAgBjiE,EAAEwR,EAAEywD,cACpB9xD,GAAKxG,QAAQqzE,QAAU7sE,EAAKxG,QAAQqzE,OAAOp7E,MAAM,SACjDuO,EAAKstE,MAAMxb,GACJ9xD,EAAK+sE,mBACZlB,EAAoB/Z,GACpB9xD,EAAKstE,MAAMxb,KAEX3tC,aAAankB,EAAKstB,SAClBttB,EAAKstB,QAAUrK,WAAW,WACtBjjB,EAAKstE,MAAMxb,IACZ9xD,EAAKxG,QAAQ4zE,aAGxBG,eAAgB,SAAU7zD,GACtB,GAAkH8zD,GAA9GxtE,EAAO5G,KAAMq0E,EAAiBztE,EAAKxG,QAAQk1D,QAASx9D,EAAU8O,EAAK0uD,QAASgf,EAAa1tE,EAAKxG,QAAQg0E,MACtG7kC,GAAc8kC,IAAmBA,EAAehxD,KAC1C,UAAYzc,GAAKxG,UACnBk0E,GAAclxD,EAAWixD,EAAehxD,MAE5Czc,EAAKoB,QAAQmxC,GACT/4C,QAASi0E,EACT/zD,OAAQA,IAEPg0D,GAKDx8E,EAAQgJ,OACRszE,EAASt8E,EAAQ0vB,KAAK,IAAMsrD,GAAe,GACvCsB,EACAA,EAAOG,IAAMF,EAAehxD,KAAO+wD,EAAOG,IAE1Cz8E,EAAQ4K,KAAKswE,GAAiB1d,QAAS+e,KAE3Cv8E,EAAQ0vB,KAAK,IAAMsrD,GAAe/oD,IAAI,OAASojD,GAAIznE,GAAG,OAASynE,EAAI,WAC/DvmE,EAAKoB,QAAQ6qE,GACb/6E,EAAQqqC,WAbZrqC,EAAQ6+C,QACR1+C,EAAMspB,GAAGqG,SAAS9vB,GAAS,GAC3B8O,EAAK4tE,aAAaH,KAcfA,GAAkBn4E,EAAWm4E,IACpCA,EAAiBA,GACbnsE,OAAQlI,KACRsgB,OAAQA,IAEZxoB,EAAQ4K,KAAK2xE,GAAkB,KAE/Bv8E,EAAQ4K,KAAK2xE,GAEjBztE,EAAKoe,QAAQ,UAAW,WACpB,OAASyB,SAAU3uB,MAG3B08E,aAAc,SAAUp0E,GACpB,GAAIwG,GAAO5G,IACX+kB,QAAO4zB,KAAKj4C,GACRxB,KAAM,MACNuvC,SAAU,OACV9hB,OAAO,EACPgzB,MAAO,SAAUyH,EAAKjB,GAClBluD,EAAMspB,GAAGqG,SAAShhB,EAAK0uD,SAAS,GAChC1uD,EAAKoB,QAAQkxC,GACTiN,OAAQA,EACRiB,IAAKA,KAGb1H,QAAS15C,EAAM,SAAUxK,GACrBvD,EAAMspB,GAAGqG,SAAShhB,EAAK0uD,SAAS,GAChC1uD,EAAK0uD,QAAQ5yD,KAAKlH,GAClBoL,EAAKoB,QAAQ6qE,IACdjsE,IACJxG,KAEPozE,iBAAkB,SAAUvrE,GACpBA,EAAEwuB,UAAYx+B,EAAM4pB,KAAKM,KACzBniB,KAAKc,QAGb6W,QAAS,WACL,GAAI/Q,GAAO5G,KAAMsvE,EAAQ1oE,EAAK0oE,KAC1BA,IAASA,EAAMlvE,QAAQqtE,QACvB7mE,EAAKutE,eAAe7E,EAAMlvE,QAAQqtE,SAG1C3sE,KAAM,WACEd,KAAKsvE,OACLtvE,KAAKsvE,MAAMxB,SAGnB3rC,KAAM,SAAU7hB,GACZA,EAASA,GAAUtgB,KAAKlI,QACxB26E,EAAoBnyD,GACpBtgB,KAAKk0E,MAAM5zD,IAEf4zD,MAAO,SAAU5zD,GACb,GAAI1Z,GAAO5G,KAAM2L,EAAU/E,EAAK0Z,QAC3B1Z,GAAK0oE,OACN1oE,EAAK6tE,aAEL9oE,GAAWA,EAAQ,IAAM2U,EAAO,KAChC1Z,EAAK0oE,MAAMxB,QACXlnE,EAAK0oE,MAAMx3E,QAAQ+nB,WAAU,GAAM,IAElClU,GAAWA,EAAQ,IAAM2U,EAAO,KACjC1Z,EAAKutE,eAAe7zD,GACpB1Z,EAAK0oE,MAAMlvE,QAAQqtE,OAASntD,GAEhC1Z,EAAK0oE,MAAM/nE,IAAI,aAAc,WACzB+qE,EAAahyD,GACbA,EAAOgF,WAAWstD,GAClB5yE,KAAKlI,QAAQwtB,WAAW,MAAMpiB,KAAK,eAAe,GAClDwvE,EAAS3oD,IAAI,UAAYojD,EAAIvmE,EAAK2sE,2BAEtC3sE,EAAK0oE,MAAMzB,QAEf4G,WAAY,WACR,GAAI7tE,GAAO5G,KAAMI,EAAUwG,EAAKxG,QAAShH,EAAU3C,EAAEwB,EAAMwK,SAASswE,IAC5DkB,QAAS7zE,EAAQ6zE,SAAgC,WAArB7zE,EAAQpG,SACpCs1B,IAAK6jD,EAAW/yE,EAAQpG,UACxB65E,SAAUzzE,EAAQyzE,WAE1BjtE,GAAK0oE,MAAQ,GAAIlC,GAAMh0E,EAASsH,GAC5Bg0E,SAAU,WACN,GAAIjH,GAASztE,KAAKI,QAAQqtE,OAAQkH,EAASlH,EAAO,GAAG1pD,IAAMnd,EAAK9O,QAAQ,GAAGisB,EACvE4wD,KACAlH,EAAOvqE,KAAK0vE,EAAa+B,EAAShC,GAClC3yE,KAAKlI,QAAQoL,KAAK,KAAMyxE,EAAShC,IAEjCvyE,EAAQ6zE,SACRrtE,EAAKguE,mBAET50E,KAAKlI,QAAQwtB,WAAW,eACxBotD,EAAShtE,GAAG,UAAYynE,EAAIvmE,EAAK2sE,yBACjC3sE,EAAKoB,QAAQ8sD,IAEjBgZ,MAAO,WACHlnE,EAAKoB,QAAQ+sD,IAEjBuZ,kBAAkB,EAClBV,UAAWxtE,EAAQwtE,WACpBqF,EAAU7yE,EAAQpG,YACrBZ,EAAQpB,KACJgB,MAAOoH,EAAQpH,MACfC,OAAQmH,EAAQnH,SAEpB2N,EAAK0uD,QAAUl8D,EAAQouB,KAAK,sBAC5B5gB,EAAKiuE,MAAQz7E,EAAQouB,KAAK,cACtBpnB,EAAQyzE,WAAa7zE,KAAK2zE,kBAC1Bv6E,EAAQsM,GAAG,aAAeynE,EAAInnE,EAAMY,EAAKktE,YAAaltE,IAEtDxN,EAAQsM,GAAG,QAAUynE,EAAI,oBAAqBnnE,EAAMY,EAAKkuE,kBAAmBluE,KAGpFkuE,kBAAmB,SAAU7sE,GACzBA,EAAE9D,iBACFnE,KAAKc,QAETgzE,YAAa,SAAU7rE,GACnBjI,KAAK+0E,YAAY9sE,EAAEywD,eACnB3tC,aAAa/qB,KAAKk0B,UAEtB6/C,MAAO,SAAU9rE,GACbjI,KAAK+0E,YAAY9sE,EAAEywD,gBAEvBqc,YAAa,SAAUz0D,GACftgB,KAAKsvE,MACLtvE,KAAKsvE,MAAMxB,QAEXwE,EAAa77E,EAAE6pB,KAGvBs0D,iBAAkB,WACd,GAAIhuE,GAAO5G,KAAMhG,EAAW4M,EAAKxG,QAAQpG,SAAU8rB,EAAalf,EAAKkf,WAAY1mB,EAAS0mB,EAAW1mB,OAAQkwE,EAAQ1oE,EAAK0oE,MAAO7B,EAAS6B,EAAMlvE,QAAQqtE,OAAQ6D,EAAe76E,EAAEg3E,GAAQruE,SAAU41E,EAAc3iE,SAASzL,EAAKiuE,MAAM78E,IAAI,oBAAqB,IAAKi9E,EAAgBx+E,EAAE64E,EAAMx3E,SAASsH,SAAUke,EAAW61D,EAAW7D,EAAMT,QAAUqE,EAAQl5E,GAAYA,GAAWk7E,EAAe5D,EAAalyE,GAAU61E,EAAc71E,GAAU3I,EAAEg3E,GAAQ3nD,EAAW/nB,QAAU,EAAIi3E,CACpdpuE,GAAKiuE,MAAM9uC,YAAY,mDAAmDzrC,SAAS,aAAegjB,GAAUtlB,IAAIoH,EAAQ81E,IAE5H50D,OAAQ,WACJ,MAAItgB,MAAKsvE,MACEtvE,KAAKsvE,MAAMlvE,QAAQqtE,OAEvB,MAEXznD,QAAS,WACL,GAAIspD,GAAQtvE,KAAKsvE,KACbA,KACAA,EAAMx3E,QAAQiyB,IAAIojD,GAClBmC,EAAMtpD,WAEV+E,aAAa/qB,KAAKk0B,SAClBl0B,KAAKlI,QAAQiyB,IAAIojD,GACjBuF,EAAS3oD,IAAI,UAAYojD,EAAIntE,KAAKuzE,yBAClCvuE,EAAOf,GAAG+hB,QAAQ7d,KAAKnI,QAG/B/H,GAAMspB,GAAG+G,OAAOgrD,IAClB58E,OAAOuB,MAAM8sB,QACRruB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAO2iC,IAAM3iC,OAAS,SAAU4iC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAU9iC,EAAGC,QACVA,OAAO,gBAAiB,cAAeD,IACzC,WAcE,MAbC,UAAUE,GACP,QAAS0+E,KACL,MAAO1+E,GAAE+qC,WAEb,QAAS4zC,GAAWpwB,GAChB,MAAOvuD,GAAE0uD,KAAKr+C,MAAMrQ,EAAGuuD,GAE3B/sD,MAAMypB,QAAQ2zD,KAAOp9E,MAAMypB,QAAQ2zD,SACnCp9E,MAAM2C,WAAW3C,MAAMypB,QAAQ2zD,MAC3BF,cAAeA,EACfC,WAAYA,KAElB1+E,OAAOuB,MAAM8sB,QACRruB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAO2iC,IAAM3iC,OAAS,SAAU4iC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAU9iC,EAAGC,QACVA,OAAO,eAAgB,cAAeD,IACxC,WA0TE,QAAS++E,GAAI/4B,EAAGvjD,EAAOzB,GACP,SAARA,IACAA,EAAM,IAGV,KADA,GAAIyH,GAASu9C,EAAEhzC,SAAS,IACjBvQ,EAAQgG,EAAOrH,QAClBqH,EAASzH,EAAMyH,CAEnB,OAAOA,GAsGX,QAASu2E,GAAQC,EAAGC,EAAGxkE,GACnB,GAAIC,GAAID,CAOR,OANIC,GAAI,IACJA,GAAK,GAELA,EAAI,IACJA,GAAK,GAELA,EAAI,EAAI,EACDskE,EAAc,GAATC,EAAID,GAAStkE,EAEzBA,EAAI,GACGukE,EAEPvkE,EAAI,EAAI,EACDskE,GAAKC,EAAID,IAAM,EAAI,EAAItkE,GAAK,EAEhCskE,EAEX,QAASE,GAAW93E,EAAO2lB,GAA3B,GACQxS,GAAG6a,EAOH+pD,CANJ,IAAa,MAAT/3E,GAA2B,SAAVA,EACjB,MAAO,KAEX,IAAIA,YAAiBg4E,GACjB,MAAOh4E,EAGX,IADI+3E,EAAQ/3E,EAAMd,cACdiU,EAAI8kE,EAAgBF,GAOpB,MALIA,GADS,gBAAT5kE,EAAE,GACM,GAAI+kE,GAAI,EAAG,EAAG,EAAG,GAEjBJ,EAAWK,EAAYhlE,EAAE,IAAKwS,GAE1CoyD,EAAMt9E,OAAS0Y,EAAE,IACV4kE,CAeX,KAbI5kE,EAAI,gDAAgD1B,KAAKsmE,IACzD/pD,EAAM,GAAIoqD,GAAM3jE,SAAStB,EAAE,GAAI,IAAKsB,SAAStB,EAAE,GAAI,IAAKsB,SAAStB,EAAE,GAAI,IAAK,IACrEA,EAAI,uCAAuC1B,KAAKsmE,IACvD/pD,EAAM,GAAIoqD,GAAM3jE,SAAStB,EAAE,GAAKA,EAAE,GAAI,IAAKsB,SAAStB,EAAE,GAAKA,EAAE,GAAI,IAAKsB,SAAStB,EAAE,GAAKA,EAAE,GAAI,IAAK,IAC1FA,EAAI,uDAAuD1B,KAAKsmE,IACvE/pD,EAAM,GAAIoqD,GAAM3jE,SAAStB,EAAE,GAAI,IAAKsB,SAAStB,EAAE,GAAI,IAAKsB,SAAStB,EAAE,GAAI,IAAK,IACrEA,EAAI,wEAAwE1B,KAAKsmE,IACxF/pD,EAAM,GAAIoqD,GAAM3jE,SAAStB,EAAE,GAAI,IAAKsB,SAAStB,EAAE,GAAI,IAAKsB,SAAStB,EAAE,GAAI,IAAK5O,WAAW4O,EAAE,MAClFA,EAAI,qFAAqF1B,KAAKsmE,IACrG/pD,EAAM,GAAIkqD,GAAI3zE,WAAW4O,EAAE,IAAM,IAAK5O,WAAW4O,EAAE,IAAM,IAAK5O,WAAW4O,EAAE,IAAM,IAAK,IAC/EA,EAAI,sGAAsG1B,KAAKsmE,MACtH/pD,EAAM,GAAIkqD,GAAI3zE,WAAW4O,EAAE,IAAM,IAAK5O,WAAW4O,EAAE,IAAM,IAAK5O,WAAW4O,EAAE,IAAM,IAAK5O,WAAW4O,EAAE,MAEnG6a,EACAA,EAAIvzB,MAAQ0Y,MACT,KAAKwS,EACR,KAAUza,OAAM,uBAAyB6sE,EAE7C,OAAO/pD,GA/db,GAUMh1B,GACAsB,EACA69E,EAqJAz8E,EACAu8E,EASAD,EA+CAE,EA4EAE,EA8BAC,EAiEAC,EA4FAC,CAxdJz/E,QAAOuB,MAAQvB,OAAOuB,UAClBrB,EAAQqB,MAAMrB,MACdsB,EAAUD,MAAMC,QAChB69E,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,UAEbhmF,EAAUpB,EAAQoB,QAClBu8E,EAAkB,SAAUF,GAAV,GAGd4J,GAFAC,EAAax4E,OAAO6a,KAAKk0D,EAM7B,OALAyJ,GAAW13E,KAAK,eACZy3E,EAAaxjF,OAAO,KAAOyjF,EAAWvoF,KAAK,KAAO,WAAY,KAClE4+E,EAAkB,SAAUF,GACxB,MAAO4J,GAAOlwE,KAAKsmE,IAEhB4J,EAAOlwE,KAAKsmE,IAEnBC,EAAYh/E,EAAM8J,QAClBC,KAAM,aAEN8+E,MAAO,WACH,MAAOz/E,OAEX0/E,MAAO,WACH,MAAO1/E,OAEX2/E,MAAO,WACH,MAAO3/E,MAAK4/E,UAAUD,SAE1BC,QAAS,WACL,MAAO5/E,OAEX6/E,MAAO,WACH,MAAO,IAAM7/E,KAAK2/E,SAEtBG,UAAW,WACP,GAAIC,GAAM//E,KAAK4/E,SACf,OAAO,QAAUG,EAAIC,EAAI,KAAOD,EAAIljF,EAAI,KAAOkjF,EAAIl9E,EAAI,KAAOV,aAAkBnC,KAAK4C,GAAGmP,QAAQ,IAAM,KAE1GkuE,UAAW,WACP,MAAI3mF,GAAQiB,MAAQjB,EAAQmB,QAAU,EAC3BuF,KAAK6/E,QAET7/E,KAAK8/E,aAEhB9iC,OAAQ,SAAU5zC,GACd,MAAOA,KAAMpJ,MAAc,OAANoJ,GAAcpJ,KAAK8/E,cAAgBpK,EAAWtsE,GAAG02E,aAE1EjyD,KAAM,SAAUqyD,GAAV,GAIEC,GACAC,CAJJ,OAAc,QAAVF,EACOG,KAEPF,EAAKngF,KAAK4/E,UACVQ,EAAKF,EAAMN,UACRhhF,KAAK45D,KAAK55D,KAAKuoC,IAAoB,IAAfg5C,EAAGH,EAAII,EAAGJ,GAAU,GAAKphF,KAAKuoC,IAAoB,KAAfg5C,EAAGtjF,EAAIujF,EAAGvjF,GAAW,GAAK+B,KAAKuoC,IAAoB,KAAfg5C,EAAGt9E,EAAIu9E,EAAGv9E,GAAW,MAE3H1G,MAAO,WACH,GAAIiN,GAAIpJ,KAAK4/E,SAIb,OAHIx2E,KAAMpJ,OACNoJ,EAAI,GAAI4sE,GAAM5sE,EAAE42E,EAAG52E,EAAEvM,EAAGuM,EAAEvG,EAAGuG,EAAExG,IAE5BwG,KAGX0sE,EAAMF,EAAUl1E,QAChBC,KAAM,SAAUq/E,EAAGnjF,EAAGgG,EAAGD,GACrBgzE,EAAU3xE,GAAGtD,KAAKwH,KAAKnI,MACvBA,KAAKggF,EAAIA,EACThgF,KAAKnD,EAAIA,EACTmD,KAAK6C,EAAIA,EACT7C,KAAK4C,EAAIA,GAEb68E,MAAO,WAAA,GASCa,GAAGrvE,EARHsvE,EAAMvgF,KACNggF,EAAIO,EAAIP,EACRnjF,EAAI0jF,EAAI1jF,EACRgG,EAAI09E,EAAI19E,EACRmP,EAAMpT,KAAKoT,IAAIguE,EAAGnjF,EAAGgG,GACrBpK,EAAMmG,KAAKnG,IAAIunF,EAAGnjF,EAAGgG,GACrB6wB,EAAQj7B,EAAMuZ,EACdtI,EAAIjR,CAER,OAAc,KAAVi7B,EACO,GAAIuiD,GAAI,EAAG,EAAGvsE,EAAG1J,KAAK4C,IAErB,IAARnK,GACAwY,EAAIyiB,EAAQj7B,EAER6nF,EADAN,IAAMvnF,GACDoE,EAAIgG,GAAK6wB,EACP72B,IAAMpE,EACT,GAAKoK,EAAIm9E,GAAKtsD,EAEd,GAAKssD,EAAInjF,GAAK62B,EAEtB4sD,GAAK,GACDA,EAAI,IACJA,GAAK,OAGTrvE,EAAI,EACJqvE,MAEG,GAAIrK,GAAIqK,EAAGrvE,EAAGvH,EAAG1J,KAAK4C,KAEjC49E,MAAO,WAAA,GAOCF,GAAGrvE,EAICN,EAVJ4vE,EAAMvgF,KACNggF,EAAIO,EAAIP,EACRnjF,EAAI0jF,EAAI1jF,EACRgG,EAAI09E,EAAI19E,EACRpK,EAAMmG,KAAKnG,IAAIunF,EAAGnjF,EAAGgG,GACrBmP,EAAMpT,KAAKoT,IAAIguE,EAAGnjF,EAAGgG,GACf49E,GAAKhoF,EAAMuZ,GAAO,CAC5B,IAAIvZ,IAAQuZ,EACRsuE,EAAIrvE,EAAI,MACL,CAGH,OAFIN,EAAIlY,EAAMuZ,EACdf,EAAIwvE,EAAI,GAAM9vE,GAAK,EAAIlY,EAAMuZ,GAAOrB,GAAKlY,EAAMuZ,GACvCvZ,GACR,IAAKunF,GACDM,GAAKzjF,EAAIgG,GAAK8N,GAAK9T,EAAIgG,EAAI,EAAI,EAC/B,MACJ,KAAKhG,GACDyjF,GAAKz9E,EAAIm9E,GAAKrvE,EAAI,CAClB,MACJ,KAAK9N,GACDy9E,GAAKN,EAAInjF,GAAK8T,EAAI,EAKtB2vE,GAAK,GACLrvE,GAAK,IACLwvE,GAAK,IAET,MAAO,IAAIvK,GAAIoK,EAAGrvE,EAAGwvE,EAAGzgF,KAAK4C,IAEjCg9E,QAAS,WACL,MAAO,IAAI5J,GAAe,IAATh2E,KAAKggF,EAAkB,IAAThgF,KAAKnD,EAAkB,IAATmD,KAAK6C,EAAS7C,KAAK4C,MAGpEozE,EAAQF,EAAIp1E,QACZC,KAAM,SAAUq/E,EAAGnjF,EAAGgG,EAAGD,GACrBkzE,EAAI7xE,GAAGtD,KAAKwH,KAAKnI,KAAMpB,KAAK6Q,MAAMuwE,GAAIphF,KAAK6Q,MAAM5S,GAAI+B,KAAK6Q,MAAM5M,GAAID,IAExE88E,MAAO,WACH,MAAO,IAAI5J,GAAI91E,KAAKggF,EAAI,IAAKhgF,KAAKnD,EAAI,IAAKmD,KAAK6C,EAAI,IAAK7C,KAAK4C,IAElE68E,MAAO,WACH,MAAOz/E,MAAK0/E,QAAQD,SAExBe,MAAO,WACH,MAAOxgF,MAAK0/E,QAAQc,SAExBb,MAAO,WACH,MAAOrK,GAAIt1E,KAAKggF,EAAG,GAAK1K,EAAIt1E,KAAKnD,EAAG,GAAKy4E,EAAIt1E,KAAK6C,EAAG,IAEzD+8E,QAAS,WACL,MAAO5/E,SAaXi2E,EAAML,EAAUl1E,QAChBC,KAAM,SAAU2/E,EAAGrvE,EAAGvH,EAAG9G,GACrBgzE,EAAU3xE,GAAGtD,KAAKwH,KAAKnI,MACvBA,KAAKsgF,EAAIA,EACTtgF,KAAKiR,EAAIA,EACTjR,KAAK0J,EAAIA,EACT1J,KAAK4C,EAAIA,GAEb88E,MAAO,WAAA,GAKCM,GAAGnjF,EAAGgG,EAKF/H,EACAvE,EACAi/E,EACAC,EACAvkE,EAbJqvE,EAAMvgF,KACNsgF,EAAIC,EAAID,EACRrvE,EAAIsvE,EAAItvE,EACRvH,EAAI62E,EAAI72E,CAEZ,IAAU,IAANuH,EACA+uE,EAAInjF,EAAIgG,EAAI6G,MAQZ,QANA42E,GAAK,GACDxlF,EAAI8D,KAAKpE,MAAM8lF,GACf/pF,EAAI+pF,EAAIxlF,EACR06E,EAAI9rE,GAAK,EAAIuH,GACbwkE,EAAI/rE,GAAK,EAAIuH,EAAI1a,GACjB2a,EAAIxH,GAAK,EAAIuH,GAAK,EAAI1a,IAClBuE,GACR,IAAK,GACDklF,EAAIt2E,EACJ7M,EAAIqU,EACJrO,EAAI2yE,CACJ,MACJ,KAAK,GACDwK,EAAIvK,EACJ54E,EAAI6M,EACJ7G,EAAI2yE,CACJ,MACJ,KAAK,GACDwK,EAAIxK,EACJ34E,EAAI6M,EACJ7G,EAAIqO,CACJ,MACJ,KAAK,GACD8uE,EAAIxK,EACJ34E,EAAI44E,EACJ5yE,EAAI6G,CACJ,MACJ,KAAK,GACDs2E,EAAI9uE,EACJrU,EAAI24E,EACJ3yE,EAAI6G,CACJ,MACJ,SACIs2E,EAAIt2E,EACJ7M,EAAI24E,EACJ3yE,EAAI4yE,EAIZ,MAAO,IAAIK,GAAIkK,EAAGnjF,EAAGgG,EAAG7C,KAAK4C,IAEjC49E,MAAO,WACH,MAAOxgF,MAAK0/E,QAAQc,SAExBZ,QAAS,WACL,MAAO5/E,MAAK0/E,QAAQE,aAGxB1J,EAAMN,EAAUl1E,QAChBC,KAAM,SAAU2/E,EAAGrvE,EAAGwvE,EAAG79E,GACrBgzE,EAAU3xE,GAAGtD,KAAKwH,KAAKnI,MACvBA,KAAKsgF,EAAIA,EACTtgF,KAAKiR,EAAIA,EACTjR,KAAKygF,EAAIA,EACTzgF,KAAK4C,EAAIA,GAEb88E,MAAO,WAAA,GAKCM,GAAGnjF,EAAGgG,EAOF4yE,EACAD,EAZJ+K,EAAMvgF,KACNsgF,EAAIC,EAAID,EACRrvE,EAAIsvE,EAAItvE,EACRwvE,EAAIF,EAAIE,CAcZ,OAZU,KAANxvE,EACA+uE,EAAInjF,EAAIgG,EAAI49E,GAEZH,GAAK,IACLrvE,GAAK,IACLwvE,GAAK,IACDhL,EAAIgL,EAAI,GAAMA,GAAK,EAAIxvE,GAAKwvE,EAAIxvE,EAAIwvE,EAAIxvE,EACxCukE,EAAI,EAAIiL,EAAIhL,EAChBuK,EAAIzK,EAAQC,EAAGC,EAAG6K,EAAI,EAAI,GAC1BzjF,EAAI04E,EAAQC,EAAGC,EAAG6K,GAClBz9E,EAAI0yE,EAAQC,EAAGC,EAAG6K,EAAI,EAAI,IAEvB,GAAIxK,GAAIkK,EAAGnjF,EAAGgG,EAAG7C,KAAK4C,IAEjC68E,MAAO,WACH,MAAOz/E,MAAK0/E,QAAQD,SAExBG,QAAS,WACL,MAAO5/E,MAAK0/E,QAAQE,aA4DxBzJ,EAAQv/E,EAAM8J,QACdC,KAAM,SAAU/C,GAAV,GAGMsY,GACAwqE,EACK/iF,EACDgjF,EACAC,EACAn4E,EAEIo4E,EATZC,EAAS9gF,IACb,IAAyB,IAArBjF,UAAUpD,OAGV,IAFIue,EAAUigE,EAAMjgE,QAChBwqE,EAAgB1gF,KAAK+gF,aAAanjF,GAC7BD,EAAM,EAAGA,EAAMuY,EAAQve,OAAQgG,IAChCgjF,EAAczqE,EAAQvY,GAAKqjF,GAC3BJ,EAAY1qE,EAAQvY,GAAK4hD,QACzB92C,EAAQk4E,EAAYtxE,KAAKqxE,GACzBj4E,IACIo4E,EAAWD,EAAUn4E,GACzBq4E,EAAOd,EAAIa,EAAS,GACpBC,EAAOjkF,EAAIgkF,EAAS,GACpBC,EAAOj+E,EAAIg+E,EAAS,QAI5B7gF,MAAKggF,EAAIjlF,UAAU,GACnBiF,KAAKnD,EAAI9B,UAAU,GACnBiF,KAAK6C,EAAI9H,UAAU,EAEvBiF,MAAKggF,EAAIhgF,KAAKihF,cAAcjhF,KAAKggF,GACjChgF,KAAKnD,EAAImD,KAAKihF,cAAcjhF,KAAKnD,GACjCmD,KAAK6C,EAAI7C,KAAKihF,cAAcjhF,KAAK6C,IAErC88E,MAAO,WAAA,GACCpoF,GAAMyI,KAAKkhF,SACXlB,EAAIhgF,KAAKggF,EAAEz2E,SAAS,IACpB1M,EAAImD,KAAKnD,EAAE0M,SAAS,IACpB1G,EAAI7C,KAAK6C,EAAE0G,SAAS,GACxB,OAAO,IAAMhS,EAAIyoF,GAAKzoF,EAAIsF,GAAKtF,EAAIsL,IAEvCk+E,aAAc,SAAUnjF,GACpB,GAAI+3E,GAAQ/3E,GAAS,OAOrB,OANwB,MAApB+3E,EAAMv+E,OAAO,KACbu+E,EAAQA,EAAMphE,OAAO,EAAG,IAE5BohE,EAAQA,EAAMz+E,QAAQ,KAAM,IAC5By+E,EAAQA,EAAM74E,cACd64E,EAAQQ,EAAMJ,YAAYJ,IAAUA,GAGxCsL,cAAe,SAAUrjF,GACrB,MAAIA,GAAQ,GAAK8X,MAAM9X,GACZ,EAEJA,EAAQ,IAAM,IAAMA,GAE/BsjF,SAAU,SAAUtjF,GAChB,MAAwB,KAAjBA,EAAMjG,OAAe,IAAMiG,EAAQA,GAE9CujF,WAAY,SAAUvjF,GAClB,GAAI6R,GAAQ7Q,KAAK6Q,KAIjB,OAHAzP,MAAKggF,EAAIvwE,EAAMzP,KAAKihF,cAAcjhF,KAAKggF,EAAIpiF,IAC3CoC,KAAKnD,EAAI4S,EAAMzP,KAAKihF,cAAcjhF,KAAKnD,EAAIe,IAC3CoC,KAAK6C,EAAI4M,EAAMzP,KAAKihF,cAAcjhF,KAAK6C,EAAIjF,IACpCoC,MAEXohF,eAAgB,WACZ,MAAOxiF,MAAK45D,KAAK,KAAQx4D,KAAKggF,EAAIhgF,KAAKggF,EAAI,KAAQhgF,KAAKnD,EAAImD,KAAKnD,EAAI,KAAQmD,KAAK6C,EAAI7C,KAAK6C,MAGnGszE,EAAMkL,UAAY,SAAUrB,EAAGnjF,EAAGgG,EAAGD,GACjC,MAAO,IAAIozE,GAAMgK,EAAGnjF,EAAGgG,EAAQ,MAALD,EAAYA,EAAI,IAE9CuzE,EAAMmL,QAAU,SAAUtB,EAAGnjF,EAAGgG,EAAGD,GAC/B,MAAO,IAAIkzE,GAAIkK,EAAGnjF,EAAGgG,EAAQ,MAALD,EAAYA,EAAI,IAE5CuzE,EAAMoL,QAAU,SAAUjB,EAAGrvE,EAAGvH,EAAG9G,GAC/B,MAAO,IAAIqzE,GAAIqK,EAAGrvE,EAAGvH,EAAQ,MAAL9G,EAAYA,EAAI,IAE5CuzE,EAAMqL,QAAU,SAAUlB,EAAGrvE,EAAGwvE,EAAG79E,GAC/B,MAAO,IAAIszE,GAAIoK,EAAGrvE,EAAGwvE,EAAQ,MAAL79E,EAAYA,EAAI,IAE5CuzE,EAAMjgE,UAEE8qE,GAAI,+CACJzhC,QAAS,SAAU92C,GACf,OACI4J,SAAS5J,EAAM,GAAI,IACnB4J,SAAS5J,EAAM,GAAI,IACnB4J,SAAS5J,EAAM,GAAI,QAK3Bu4E,GAAI,0BACJzhC,QAAS,SAAU92C,GACf,OACI4J,SAAS5J,EAAM,GAAI,IACnB4J,SAAS5J,EAAM,GAAI,IACnB4J,SAAS5J,EAAM,GAAI,QAK3Bu4E,GAAI,0BACJzhC,QAAS,SAAU92C,GACf,OACI4J,SAAS5J,EAAM,GAAKA,EAAM,GAAI,IAC9B4J,SAAS5J,EAAM,GAAKA,EAAM,GAAI,IAC9B4J,SAAS5J,EAAM,GAAKA,EAAM,GAAI,QAK9C0tE,EAAMJ,YAAcA,EACpB99E,MAAM2C,WAAW3C,OACby9E,WAAYA,EACZS,MAAOA,KAEK,kBAAV3/E,SAAwBA,OAAO2iC,IAAM3iC,OAAS,SAAU4iC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAU9iC,EAAGC,QACVA,OAAO,qBAAsB,cAAeD,IAC9C,YACG,SAAUE,GAqDP,QAASgrF,GAAchsD,GACnB,OAAcA,EAAPxrB,IAAa/S,QAAQwqF,EAAeC,GAE/C,QAASC,GAAUjoC,GAAnB,GAEa56C,GADL0J,IACJ,KAAS1J,IAAO46C,GACZlxC,EAAMX,KAAK/I,EAAM46C,EAAO56C,GAE5B,OAAO0J,GAAM0V,OAAOlnB,KAAK,IAE7B,QAAS4qF,GAAQjlF,GAAjB,GAEa9B,GADLwuC,EAAO,UACX,KAASxuC,EAAI,EAAGA,EAAI8B,EAAIjF,SAAUmD,EAC9BwuC,IAASA,GAAQ,IAAMA,GAAQ,IAAMA,GAAQ,IAAMA,GAAQ,IAAMA,GAAQ,IACzEA,GAAQ1sC,EAAI0M,WAAWxO,EAE3B,OAAOwuC,KAAS,EAEpB,QAASw4C,KACL,OACI9oF,MAAO,EACPC,OAAQ,EACR8oF,SAAU,GA0DlB,QAASC,GAAYvsD,EAAM57B,EAAOooF,GAC9B,MAAOC,GAAYv2E,QAAQ61D,QAAQ/rC,EAAM57B,EAAOooF,GAtIvD,GAEOE,GAiDAT,EACAC,EA0BAS,EACAC,EAKAH,CAnFJxrF,QAAOuB,MAAMo9E,KAAO3+E,OAAOuB,MAAMo9E,SAC7B8M,EAAWlqF,MAAMrB,MAAM8J,QACvBC,KAAM,SAAU5C,GACZiC,KAAK4lB,MAAQ7nB,EACbiC,KAAKsiF,QAAU,EACftiF,KAAK0gD,SAET6hC,IAAK,SAAUxjF,EAAKnB,GAAf,GACGoV,GAAMhT,KAAK0gD,KACX8hC,GACAzjF,IAAKA,EACLnB,MAAOA,EAEXoV,GAAIjU,GAAOyjF,EACNxiF,KAAKyiF,OAGNziF,KAAK0iF,MAAMC,MAAQH,EACnBA,EAAMI,MAAQ5iF,KAAK0iF,MACnB1iF,KAAK0iF,MAAQF,GAJbxiF,KAAKyiF,MAAQziF,KAAK0iF,MAAQF,EAM1BxiF,KAAKsiF,SAAWtiF,KAAK4lB,OACrB5S,EAAIhT,KAAKyiF,MAAM1jF,KAAO,KACtBiB,KAAKyiF,MAAQziF,KAAKyiF,MAAME,MACxB3iF,KAAKyiF,MAAMG,MAAQ,MAEnB5iF,KAAKsiF,WAGb3+D,IAAK,SAAU5kB,GACX,GAAIyjF,GAAQxiF,KAAK0gD,KAAK3hD,EACtB,IAAIyjF,EAeA,MAdIA,KAAUxiF,KAAKyiF,OAASD,IAAUxiF,KAAK0iF,QACvC1iF,KAAKyiF,MAAQD,EAAMG,MACnB3iF,KAAKyiF,MAAMG,MAAQ,MAEnBJ,IAAUxiF,KAAK0iF,QACXF,EAAMI,QACNJ,EAAMI,MAAMD,MAAQH,EAAMG,MAC1BH,EAAMG,MAAMC,MAAQJ,EAAMI,OAE9BJ,EAAMI,MAAQ5iF,KAAK0iF,MACnBF,EAAMG,MAAQ,KACd3iF,KAAK0iF,MAAMC,MAAQH,EACnBxiF,KAAK0iF,MAAQF,GAEVA,EAAM5kF,SAIrB8jF,EAAgB,eAChBC,EAAQ,IA0BRS,GAAoBS,mBAAoB,GAEpB,mBAAbtlF,YACP8kF,EAAoB9kF,SAASsa,cAAc,OAC3CwqE,EAAkBxoF,MAAMie,QAAU,wQAElCoqE,EAAcjqF,MAAMrB,MAAM8J,QAC1BC,KAAM,SAAUP,GACZJ,KAAKykE,OAAS,GAAI0d,GAAS,KAC3BniF,KAAKI,QAAU3J,EAAEiK,UAAW0hF,EAAiBhiF,IAEjDohE,QAAS,SAAU/rC,EAAM57B,EAAOuG,GAAvB,GAOD0iF,GACAC,EACAC,EAIAjlF,EACAkkF,EACAgB,EACKlkF,EACDnB,EAKJslF,CAlBJ,IAHgB,SAAZ9iF,IACAA,OAECq1B,EACD,MAAOqsD,IAKX,IAHIgB,EAAWlB,EAAU/nF,GACrBkpF,EAAWlB,EAAQpsD,EAAOqtD,GAC1BE,EAAehjF,KAAKykE,OAAO9gD,IAAIo/D,GAE/B,MAAOC,EAEPjlF,GAAO+jF,IACPG,EAAa7hF,EAAQ0jC,KAAOu+C,EAC5BY,EAAiBjjF,KAAKmjF,kBAAkBxxB,WAAU,EACtD,KAAS5yD,IAAOlF,GACR+D,EAAQ/D,EAAMkF,GACG,SAAVnB,IACPqkF,EAAWpoF,MAAMkF,GAAOnB,EAgBhC,OAbIslF,GAAU9iF,EAAQqhF,iBAAkB,EAAQA,EAAchsD,GAAeA,EAAPxrB,GACtEg4E,EAAW5vD,YAAc6wD,EACzBjB,EAAWhqE,YAAYgrE,GACvB1lF,SAASya,KAAKC,YAAYgqE,GACtBiB,EAAQvrF,SACRoG,EAAK/E,MAAQipF,EAAW/pE,YAAclY,KAAKI,QAAQyiF,mBACnD9kF,EAAK9E,OAASgpF,EAAWp7D,aACzB9oB,EAAKgkF,SAAWkB,EAAeG,UAAYpjF,KAAKI,QAAQyiF,oBAExD9kF,EAAK/E,MAAQ,GAAK+E,EAAK9E,OAAS,GAChC+G,KAAKykE,OAAO8d,IAAIQ,EAAUhlF,GAE9BkkF,EAAWtjE,WAAWxG,YAAY8pE,GAC3BlkF,GAEXolF,gBAAiB,WACb,GAAIE,GAAS9lF,SAASsa,cAAc,MAEpC,OADAwrE,GAAOxpF,MAAMie,QAAU,0DAA4D9X,KAAKI,QAAQyiF,mBAAqB,eAAiB7iF,KAAKI,QAAQyiF,mBAAqB,uBACjKQ,KAGfnB,EAAYv2E,QAAU,GAAIu2E,GAI1BjqF,MAAM2C,WAAW3C,MAAMo9E,MACnB8M,SAAUA,EACVD,YAAaA,EACbF,YAAaA,EACbJ,UAAWA,EACXC,QAASA,EACTJ,cAAeA,KAErB/qF,OAAOuB,MAAM8sB,SACC,kBAAVvuB,SAAwBA,OAAO2iC,IAAM3iC,OAAS,SAAU4iC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAU9iC,EAAGC,QACVA,OAAO,yBACH,eACA,cACA,qBACDD,IACL,YACG,SAAUE,GA6EP,QAAS+tC,GAAOrtC,EAAOmsF,GAEnB,MADAnsF,GAAM2Q,KAAKhB,MAAM3P,EAAOmsF,GACjBnsF,EAgCX,QAASosF,GAAchnC,GAgCnB,IAhCJ,GACQrqC,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,GAEAsxE,EAAQ,GACLjnC,EAAI,GACHA,EAAIrqC,EAAO,GACXA,EAAOJ,SAEP0xE,GAAS30E,GAASqD,EAAO,IACzBqqC,GAAKrqC,EAAO,GAGpB,OAAOsxE,GAGX,QAASC,GAAQ7lF,GACb,aAAcA,KAAUxB,GAG5B,QAASsnF,KACL,MAAO,OAASC,KAKpB,QAASC,GAAIC,GACT,MAAOA,GAAUC,GAIrB,QAASC,GAAWjkF,GAApB,GAEahF,GACDsO,EAFJwmE,EAAS,EACb,KAAS90E,EAAI,EAAGA,EAAIgF,EAAMnI,OAAQmD,IAC1BsO,EAAItJ,EAAMwJ,WAAWxO,GACrBsO,EAAI,IACJwmE,GAAUoU,GAAa56E,GAChBA,EAAI,MACXwmE,GAAUoU,GAAa,IAAM56E,IAAM,GACnCwmE,GAAUoU,GAAa,IAAU,GAAJ56E,IACtBA,EAAI,QACXwmE,GAAUoU,GAAa,IAAM56E,IAAM,IACnCwmE,GAAUoU,GAAa,IAAM56E,IAAM,EAAI,IACvCwmE,GAAUoU,GAAa,IAAU,GAAJ56E,GAGrC,OAAOwmE,GAEX,QAASqU,GAAankF,GAIlB,IAJJ,GAKYokF,GACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAVJ5U,EAAS,GACT90E,EAAI,EACJ2pF,EAAWV,EAAWjkF,GACnBhF,EAAI2pF,EAAS9sF,QACZusF,EAAOO,EAASn7E,WAAWxO,KAC3BqpF,EAAOM,EAASn7E,WAAWxO,KAC3BspF,EAAOK,EAASn7E,WAAWxO,KAC3BupF,EAAOH,GAAQ,EACfI,GAAe,EAAPJ,IAAa,EAAIC,GAAQ,EACjCI,GAAe,GAAPJ,IAAc,EAAIC,GAAQ,EAClCI,EAAc,GAAPJ,EACP1uE,MAAMyuE,GACNI,EAAOC,EAAO,GACP9uE,MAAM0uE,KACbI,EAAO,IAEX5U,EAASA,EAAS8U,GAAQttF,OAAOitF,GAAQK,GAAQttF,OAAOktF,GAAQI,GAAQttF,OAAOmtF,GAAQG,GAAQttF,OAAOotF,EAE1G,OAAO5U,GAEX,QAAS+U,GAAiB18E,GACtB,MAAIw7E,IAASx7E,EAAEqrB,OAASzX,WAEhByX,EAAGrrB,EAAEqrB,EAAEzX,SACPxK,EAAGpJ,EAAEoJ,EAAEwK,WAIXyX,EAAGrrB,EAAE81D,OAAS91D,EAAE0Y,SAAW,EAC3BtP,EAAGpJ,EAAE+1D,OAAS/1D,EAAE2Y,SAAW,GAGnC,QAASgkE,GAAa38E,GAIlB,MAHU,UAANA,IACAA,MAEGA,EAAEqQ,MAAQrQ,EAAEqQ,MAAMyiD,aAAe9yD,EAAEqY,OAE9C,QAASukE,GAAclP,GACnB,MAAiB,KAAVA,GAA0B,OAAVA,GAA4B,SAAVA,GAA8B,gBAAVA,IAA4B8N,EAAQ9N,GAErG,QAAShmD,GAAKtc,GACV,GAAIA,EACA,MAAOA,GAAMA,EAAM1b,OAAS,GAGpC,QAASmtF,GAAWlnF,EAAOoU,EAAKvZ,GAC5B,MAAOmG,MAAKnG,IAAImG,KAAKoT,IAAIpU,EAAOnF,GAAMuZ,GAE1C,QAAS+yE,GAAUniF,EAAGoiF,GAIlB,QAASlkD,GAAMl+B,EAAGC,GAEd,IADA,GAAIm9E,MAAQiF,EAAK,EAAGC,EAAK,EAAGpqF,EAAI,EACzBmqF,EAAKriF,EAAEjL,QAAUutF,EAAKriF,EAAElL,QACvBqtF,EAAIpiF,EAAEqiF,GAAKpiF,EAAEqiF,KAAQ,EACrBlF,EAAEllF,KAAO8H,EAAEqiF,KAEXjF,EAAEllF,KAAO+H,EAAEqiF,IASnB,OANID,GAAKriF,EAAEjL,QACPqoF,EAAEl4E,KAAKhB,MAAMk5E,EAAGp9E,EAAE4D,MAAMy+E,IAExBC,EAAKriF,EAAElL,QACPqoF,EAAEl4E,KAAKhB,MAAMk5E,EAAGn9E,EAAE2D,MAAM0+E,IAErBlF,EAlBX,MAAIp9E,GAAEjL,OAAS,EACJiL,EAAE4D,QAmBN,QAAS2X,GAAKvb,GAAd,GAICmO,GACArY,EACAC,CALJ,OAAIiK,GAAEjL,QAAU,EACLiL,GAEPmO,EAAInS,KAAKpE,MAAMoI,EAAEjL,OAAS,GAC1Be,EAAOkK,EAAE4D,MAAM,EAAGuK,GAClBpY,EAAQiK,EAAE4D,MAAMuK,GACpBrY,EAAOylB,EAAKzlB,GACZC,EAAQwlB,EAAKxlB,GACNmoC,EAAMpoC,EAAMC,KACrBiK,GAEN,QAASuiF,GAAIC,GACT,MAAOA,GAAUtB,GAErB,QAAS38C,GAAIquC,GACT,MAAIA,GACO52E,KAAKuoC,IAAI,GAAIquC,GAEjB,EAEX,QAAS/lE,GAAM7R,EAAO8Q,GAClB,GAAI22E,GAAQl+C,EAAIz4B,EAChB,OAAO9P,MAAK6Q,MAAM7R,EAAQynF,GAASA,EAEvC,QAASC,GAAe1nF,EAAO09C,GAC3B,MAAOmoC,GAAQ7lF,GAASA,EAAQ09C,EAEpC,QAASiqC,GAAWztF,EAAS4P,GAA7B,GACaL,GACDM,EACKhK,CAFb,KAAS0J,IAAaK,GAElB,IADIC,EAAaN,EAAUirB,OAAOt7B,MAAM,KAC/B2G,EAAM,EAAGA,EAAMgK,EAAWhQ,OAAQgG,IACvC7F,EAAQ2lB,iBAAiB9V,EAAWhK,GAAM+J,EAAOL,IAAY,GAIzE,QAAS4tE,GAAcn9E,GAAvB,GACQgsC,GAAMhsC,EAAQ0tF,wBACd9lF,EAAkBnC,SAASmC;AAC/B,OACIJ,IAAKwkC,EAAIxkC,KAAO5I,OAAO+I,aAAeC,EAAgBC,YAAcD,EAAgB+lF,WAAa,GACjG/sF,KAAMorC,EAAIprC,MAAQhC,OAAOkJ,aAAeF,EAAgBtB,aAAesB,EAAgBgmF,YAAc,IAG7G,QAASC,GAAc7tF,EAASwF,GAAhC,GAIaK,GACDugB,EAJJlf,KACAnF,EAAQnD,OAAO+G,iBAAiB3F,GAChC8tF,EAAc9pF,MAAMiK,QAAQzI,GAAUA,GAAUA,EACpD,KAASK,EAAM,EAAGA,EAAMioF,EAAYjuF,OAAQgG,IACpCugB,EAAQ0nE,EAAYjoF,GACxBqB,EAAOkf,GAASrkB,EAAMqkB,EAE1B,OAAOlf,GAEX,QAAS6mF,GAAUjoF,GACf,MAAI8X,OAAM9X,GACCA,EAEJA,EAAQ,KAEnB,QAASirE,GAAY/wE,EAASiG,GAA9B,GAEY/E,GACAC,EAQA6sF,CAVR,OAAI/nF,IACI/E,EAAQ+E,EAAK/E,MACbC,EAAS8E,EAAK9E,OACdwqF,EAAQzqF,KACRlB,EAAQ+B,MAAMb,MAAQ6sF,EAAU7sF,IAEhCyqF,EAAQxqF,KACRnB,EAAQ+B,MAAMZ,OAAS4sF,EAAU5sF,IANjCD,SASA8sF,EAASH,EAAc7tF,GACvB,QACA,YAGAkB,MAAOqZ,SAASyzE,EAAO9sF,MAAO,IAC9BC,OAAQoZ,SAASyzE,EAAO7sF,OAAQ,MAI5C,QAAS8sF,GAAajuF,EAAS4P,GAA/B,GAIawH,GACDvH,EACKhK,CALE,UAAX+J,IACAA,KAEJ,KAASwH,IAAQxH,GAEb,IADIC,EAAauH,EAAKojB,OAAOt7B,MAAM,KAC1B2G,EAAM,EAAGA,EAAMgK,EAAWhQ,OAAQgG,IACvC7F,EAAQqlE,oBAAoBx1D,EAAWhK,GAAM+J,EAAOwH,IAAO,GA2GvE,QAAS82E,GAAY9nE,GACjB,MAAO,UAAUtgB,GAKb,MAJIoC,MAAKke,KAAWtgB,IAChBoC,KAAKke,GAAStgB,EACdoC,KAAKimF,kBAEFjmF,MAGf,QAASkmF,GAAYhoE,GACjB,MAAO,YACH,MAAOle,MAAKke,IAGpB,QAASioE,GAAgBliF,EAAIgsC,GAA7B,GACan1C,GACDoU,EACAk3E,CAFR,KAAStrF,EAAI,EAAGA,EAAIm1C,EAAOt4C,OAAQmD,IAC3BoU,EAAO+gC,EAAOn1C,GACdsrF,EAAcl3E,EAAK9X,OAAO,GAAG8F,cAAgBgS,EAAK5X,UAAU,EAAG4X,EAAKvX,QACxEsM,EAAG,MAAQmiF,GAAeJ,EAAY92E,GACtCjL,EAAG,MAAQmiF,GAAeF,EAAYh3E,GA4G9C,QAASm3E,GAASpsD,GACd,MAAIA,IAAmD,kBAA1BA,GAAeqsD,OACjCrsD,EAAeqsD,SAEnBrsD,EAiXX,QAASI,GAAUisD,GACf,MAAe,QAAXA,EACO,KAEPA,YAAkBC,IACXD,EAEJ,GAAIC,IAAeD,GAoH9B,QAASE,GAAqBluB,EAAQ77D,EAAIgqF,EAAIH,GAA9C,GACQI,GAAW,EACXC,EAAW,CAOf,OANIL,KACAI,EAAW9nF,KAAK87B,MAAM4rD,EAAOl9E,EAAIq9E,EAAIH,EAAO1jF,EAAInG,GAC/B,IAAb6pF,EAAOzjF,IACP8jF,EAAW/nF,KAAK87B,MAAM4rD,EAAO31E,EAAI81E,EAAIH,EAAOzjF,EAAIpG,MAIpD62B,EAAGozD,EACHr1E,EAAGs1E,GAqIX,QAASC,GAAiB13E,GACtB,GAAIwiC,GAAY,IAAMxiC,CACtB,OAAO,UAAUtR,GACb,MAAI6lF,GAAQ7lF,IACRoC,KAAK6mF,eAAen1C,EAAW9zC,GAC/BoC,KAAKimF,iBACEjmF,MAEJA,KAAK0xC,IAGpB,QAASo1C,GAAwB7iF,EAAIwI,GACjC,IAAK,GAAI3R,GAAI,EAAGA,EAAI2R,EAAM9U,OAAQmD,IAC9BmJ,EAAGwI,EAAM3R,IAAM8rF,EAAiBn6E,EAAM3R,IAoC9C,QAASgzE,GAAMlrE,EAAGC,EAAGkkF,GAIjB,MAHkB,UAAdA,IACAA,EAAYC,IAE6B,IAAtCv3E,EAAM7Q,KAAKC,IAAI+D,EAAIC,GAAIkkF,GAElC,QAASE,GAAYrkF,EAAGC,EAAGkkF,GACvB,MAAOnkF,GAAIC,GAAKirE,EAAMlrE,EAAGC,EAAGkkF,GAEhC,QAASG,GAAiBC,EAAIC,EAAIC,EAAIC,GAAtC,GACQC,GAAMH,EAAG9zD,EAAI6zD,EAAG7zD,EAChBk0D,EAAMF,EAAGh0D,EAAI+zD,EAAG/zD,EAChBm0D,EAAML,EAAG/1E,EAAI81E,EAAG91E,EAChBq2E,EAAMJ,EAAGj2E,EAAIg2E,EAAGh2E,EAChBs2E,EAAKR,EAAG7zD,EAAI+zD,EAAG/zD,EACfs0D,EAAKT,EAAG91E,EAAIg2E,EAAGh2E,EACfV,EAAI42E,EAAMG,EAAMF,EAAMC,EACtBx2E,GAAKs2E,EAAMK,EAAKH,EAAME,GAAMh3E,EAC5BO,GAAKs2E,EAAMI,EAAKF,EAAMC,GAAMh3E,CAChC,IAAIM,GAAK,GAAKA,GAAK,GAAKC,GAAK,GAAKA,GAAK,EACnC,MAAO,IAAI22E,IAAMV,EAAG7zD,EAAIpiB,EAAIq2E,EAAKJ,EAAG91E,EAAIH,EAAIu2E,GA6MpD,QAASK,GAAeC,EAAIC,EAAIvrF,EAAIgqF,EAAInzD,EAAGjiB,GAA3C,GACQ42E,GAAMx4E,GAAO6jB,EAAIy0D,GAAMtrF,EAAI,GAC3ByrF,EAAMz4E,GAAO4B,EAAI22E,GAAMvB,EAAI,EAC/B,OAAOh3E,GAAMm0E,EAAIhlF,KAAK87B,MAAMwtD,EAAKD,KAErC,QAASE,GAAuBvoC,GAAhC,GAaQikC,GACAuE,EACAC,EACAC,EACAC,EACAlpF,EACAmpF,EACAC,EACAC,EACAC,EACAj1D,EAQAk1D,EAIAC,EACAC,EACAf,EACAC,EACAe,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAOAC,EACAC,EApDAvxB,EAAKpY,EAAWoY,GAChBC,EAAKrY,EAAWqY,GAChBC,EAAKtY,EAAWsY,GAChBC,EAAKvY,EAAWuY,GAChB17D,EAAKmjD,EAAWnjD,GAChBgqF,EAAK7mC,EAAW6mC,GAChB+C,EAAW5pC,EAAW4pC,SACtBC,EAAQ7pC,EAAW6pC,MACnBrlD,EAAWwb,EAAWxb,QA8C1B,OA7CiB,UAAbA,IACAA,EAAW,GAEXy/C,EAAUsB,EAAI/gD,GACdgkD,EAASxpF,KAAKqpF,IAAIpE,GAClBwE,EAAOzpF,KAAKspF,IAAIrE,GAChByE,EAAKF,GAAUpwB,EAAKE,GAAM,EAAImwB,GAAQpwB,EAAKE,GAAM,EACjDowB,GAAMF,GAAQrwB,EAAKE,GAAM,EAAIkwB,GAAUnwB,EAAKE,GAAM,EAClD94D,EAAOmqF,IAAaC,EAAQ,KAC5BjB,EAAM5pF,KAAKuoC,IAAImhD,EAAI,GACnBG,EAAM7pF,KAAKuoC,IAAIohD,EAAI,GACnBG,EAAM9pF,KAAKuoC,IAAI1qC,EAAI,GACnBksF,EAAM/pF,KAAKuoC,IAAIs/C,EAAI,GACnB/yD,EAAQ80D,EAAME,EAAMD,EAAME,EAC1Bj1D,EAAQ,IACRA,EAAQ90B,KAAK45D,KAAKgwB,EAAME,EAAMD,EAAME,GACpClsF,EAAKi3B,EAAQj3B,EACbisF,EAAM9pF,KAAKuoC,IAAI1qC,EAAI,GACnBgqF,EAAK/yD,EAAQ+yD,EACbkC,EAAM/pF,KAAKuoC,IAAIs/C,EAAI,IAEnBmC,EAASvpF,EAAOT,KAAK45D,MAAMkwB,EAAMC,EAAMD,EAAMD,EAAME,EAAMH,IAAQE,EAAMD,EAAME,EAAMH,IACnF9yE,MAAMkzE,KACNA,EAAS,GAETC,EAAMD,GAAUnsF,EAAK8rF,GAAM9B,EAC3BqC,GAAOF,GAAUnC,EAAK6B,GAAM7rF,EAC5BsrF,EAAKK,EAASS,EAAMR,EAAOS,GAAO9wB,EAAKE,GAAM,EAC7C8vB,EAAKK,EAAOQ,EAAMT,EAASU,GAAO7wB,EAAKE,GAAM,EAC7C4wB,GAAMT,EAAKO,GAAOpsF,EAClBusF,GAAMT,EAAKO,GAAOrC,EAClBwC,IAAOX,EAAKO,GAAOpsF,EACnBysF,IAAOX,EAAKO,GAAOrC,EACnB0C,GAAcH,GAAM,EAAI,MAAUpF,EAAIhlF,KAAK8qF,KAAKX,EAAKnqF,KAAK45D,KAAKuwB,EAAKA,EAAKC,EAAKA,KAC9EI,EAAc35E,GAAOs5E,EAAKE,EAAKD,EAAKE,IAAOtqF,KAAK45D,KAAKuwB,EAAKA,EAAKC,EAAKA,GAAMpqF,KAAK45D,KAAKywB,EAAKA,EAAKC,EAAKA,IAAM,IACzGG,GAASN,EAAKG,EAAKF,EAAKC,GAAM,EAAI,MAAUrF,EAAIhlF,KAAK8qF,KAAKN,KACzDK,GAASJ,EAAQ,IAClBA,GAAS,KAETI,GAASJ,EAAQ,IACjBA,GAAS,KAETC,EAAWH,EAAaE,EACxBE,EAAeD,GAAY,EAAI,KACnCA,EAAW1qF,KAAKC,IAAIyqF,GAAY,IAAMC,GAElCjxB,OAAQ,GAAIuvB,IAAME,EAAIC,GACtBmB,WAAYA,EACZG,SAAUA,EACVK,QAASltF,EACTmtF,QAASnD,EACToD,UAAWzlD,GAGnB,QAAS0lD,GAAeT,EAAOp6E,GAE3B,IADA,GAAIk6E,GAAaE,EACVF,EAAal6E,GAChBk6E,GAAc,EAElB,OAAOA,GA6GX,QAASY,GAAc76E,GACnB,GAAIwiC,GAAY,IAAMxiC,CACtB,OAAO,UAAUtR,GACb,MAAI6lF,GAAQ7lF,IACRoC,KAAK6mF,eAAen1C,EAAWm2C,GAAM54C,OAAOrxC,IAC5CoC,KAAKimF,iBACEjmF,MAEJA,KAAK0xC,IAGpB,QAASs4C,GAAqB/lF,EAAIwI,GAC9B,IAAK,GAAI3R,GAAI,EAAGA,EAAI2R,EAAM9U,OAAQmD,IAC9BmJ,EAAGwI,EAAM3R,IAAMivF,EAAct9E,EAAM3R,IAG3C,QAASmvF,GAAgBC,EAAUC,EAAcC,GAAjD,GACQf,GAAQzF,EAAIhlF,KAAK87B,MAAMyvD,EAAa94E,EAAI64E,EAAS74E,EAAG84E,EAAa72D,EAAI42D,EAAS52D,IAC9E+2D,EAAeD,EAAME,cAAcjwD,IAAY8D,QAAQkrD,EAAOa,GAClE,OAAOG,GAAa/2D,EAAI42D,EAAS52D,EAErC,QAASi3D,GAAiBr5E,EAAGgN,EAAOssE,GAChC,GAAIC,GAAK,EAAIv5E,CACb,OAAOtS,MAAKuoC,IAAIsjD,EAAI,GAAKD,EAAO,GAAGtsE,GAAS,EAAItf,KAAKuoC,IAAIsjD,EAAI,GAAKv5E,EAAIs5E,EAAO,GAAGtsE,GAAS,EAAItf,KAAKuoC,IAAIj2B,EAAG,GAAKu5E,EAAKD,EAAO,GAAGtsE,GAAStf,KAAKuoC,IAAIj2B,EAAG,GAAKs5E,EAAO,GAAGtsE,GAErK,QAASwsE,GAAkBF,EAAQtsE,GAC/B,QACKssE,EAAO,GAAGtsE,GAAS,EAAIssE,EAAO,GAAGtsE,GAAS,EAAIssE,EAAO,GAAGtsE,GAASssE,EAAO,GAAGtsE,GAC5E,GAAKssE,EAAO,GAAGtsE,GAAS,EAAIssE,EAAO,GAAGtsE,GAASssE,EAAO,GAAGtsE,IACzD,IAAMssE,EAAO,GAAGtsE,GAASssE,EAAO,GAAGtsE,IACnCssE,EAAO,GAAGtsE,IA0ClB,QAASysE,GAAWr3D,GAChB,MAAOA,GAAI,KAAS,EAExB,QAASs3D,GAAuBhoF,EAAGC,EAAGuG,GAClC,GAAIyhF,GAAajsF,KAAK45D,KAAK55D,KAAKuoC,IAAItkC,EAAG,GAAK,EAAID,EAAIwG,EACpD,UACMvG,EAAIgoF,IAAe,EAAIjoF,KACvBC,EAAIgoF,IAAe,EAAIjoF,IAGjC,QAASkoF,GAAmBloF,EAAGC,EAAGuG,EAAGuH,GAArC,GAIQ6kE,GACAC,EACAsV,EACAjwF,EACAkwF,EACAhzB,EAAIE,EAAID,EAAIE,EAAI8yB,EAAIC,EAAIC,EAexBnsF,CAvBJ,OAAU,KAAN4D,EACOgoF,EAAuB/nF,EAAGuG,EAAGuH,IAEpC6kE,GAAK,EAAI5yE,EAAIwG,EAAIxK,KAAKuoC,IAAItkC,EAAG,KAAO,EAAIjE,KAAKuoC,IAAIvkC,EAAG,IACpD6yE,GAAK,EAAI72E,KAAKuoC,IAAItkC,EAAG,GAAK,EAAID,EAAIC,EAAIuG,EAAI,GAAKxK,KAAKuoC,IAAIvkC,EAAG,GAAK+N,IAAM,GAAK/R,KAAKuoC,IAAIvkC,EAAG,IACvFmoF,EAAInsF,KAAKuoC,IAAIquC,EAAI,EAAG,GAAK52E,KAAKuoC,IAAIsuC,EAAI,EAAG,GACzC36E,EAAI,GAAIswF,IAAc,EAAG,GACzBJ,GAAOnoF,GAAK,EAAID,GAEhBmoF,EAAI,GACJ/yB,EAAK,GAAIozB,KAAe3V,EAAI,EAAG72E,KAAK45D,MAAMuyB,IAAIM,QAAQ,GACtDnzB,EAAK,GAAIkzB,KAAe3V,EAAI,IAAI72E,KAAK45D,MAAMuyB,KAAIM,QAAQ,KAEvDrzB,GAAMyd,EAAI,EAAI72E,KAAK45D,KAAKuyB,GACxB/yB,EAAK,GAAIozB,IAAcT,EAAW3yB,GAAMp5D,KAAKuoC,IAAIvoC,KAAKC,IAAIm5D,GAAK,EAAI,IACnEE,GAAMud,EAAI,EAAI72E,KAAK45D,KAAKuyB,GACxB7yB,EAAK,GAAIkzB,IAAcT,EAAWzyB,GAAMt5D,KAAKuoC,IAAIvoC,KAAKC,IAAIq5D,GAAK,EAAI,KAEvED,EAAKD,EAAG12D,IAAI42D,GACZgzB,EAAKlzB,EAAG12D,IAAI42D,GAAIozB,sBAChBH,EAAKnzB,EAAG12D,IAAI42D,EAAGqzB,UAAUD,iBAAiB1sF,KAAK45D,KAAK,GAAK,GACzDL,EAAK+yB,EAAG5pF,IAAIxG,EAAE0wF,SAASL,IACvBF,EAAKC,EAAG5pF,IAAIxG,EAAEywF,SAASC,SAASL,IAC5BnsF,KACAi5D,EAAGwzB,UACHzsF,EAAO8I,KAAK2H,EAAMwoD,EAAGyzB,KAAOV,EAAKhE,KAEjC7uB,EAAGszB,UACHzsF,EAAO8I,KAAK2H,EAAM0oD,EAAGuzB,KAAOV,EAAKhE,KAEjCiE,EAAGQ,UACHzsF,EAAO8I,KAAK2H,EAAMw7E,EAAGS,KAAOV,EAAKhE,KAE9BhoF,GAEX,QAAS2sF,GAAgBnB,EAAQJ,EAAOlsE,EAAO0tE,EAAWjtC,GAA1D,GAGQktC,GACKluF,EAHLmuF,EAAapB,EAAkBF,EAAQoB,GACvCG,EAAQjB,EAAmBgB,EAAW,GAAIA,EAAW,GAAIA,EAAW,GAAIA,EAAW,GAAK1B,EAAMwB,GAElG,KAASjuF,EAAM,EAAGA,EAAMouF,EAAMp0F,OAAQgG,IAClC,GAAI,GAAKouF,EAAMpuF,IAAQouF,EAAMpuF,IAAQ,IACjCkuF,EAAetB,EAAiBwB,EAAMpuF,GAAMugB,EAAOssE,GAC/C5rF,KAAKC,IAAIgtF,EAAezB,EAAMlsE,KAAWygC,GACzC,OAAO,EAKvB,QAASqtC,GAAwBxB,EAAQJ,EAAO6B,GAAhD,GAGQC,GAAiBC,EAEZrxF,EAJLgxF,EAAapB,EAAkBF,EAAQ,KACvCuB,EAAQjB,EAAmBgB,EAAW,GAAIA,EAAW,GAAIA,EAAW,GAAIA,EAAW,GAAK1B,EAAM92D,GAE9F3f,EAAQ,CACZ,KAAS7Y,EAAI,EAAGA,EAAIixF,EAAMp0F,OAAQmD,IAC9BoxF,EAAkB3B,EAAiBwB,EAAMjxF,GAAI,IAAK0vF,GAClD2B,EAAgBre,EAAMoe,EAAiB9B,EAAM/4E,IAAM66E,EAAkB9B,EAAM/4E,EACvE86E,KAAgC,IAAbJ,EAAMjxF,IAAyB,IAAbixF,EAAMjxF,KAAamxF,EAAKG,cAAc94D,EAAI82D,EAAM92D,GAAK,EAAIy4D,EAAMjxF,IAAMixF,EAAMjxF,GAAK,IACrH6Y,GAGR,OAAOA,GAEX,QAAS04E,GAAuBzpF,EAAGC,EAAGunF,GAAtC,GACQkC,GAEI/tB,EACAE,EACAD,EACAE,EACAlW,CAOR,OAZI5lD,GAAE0wB,IAAMzwB,EAAEywB,IACNirC,EAAO3/D,KAAKoT,IAAIpP,EAAE0wB,EAAGzwB,EAAEywB,GACvBmrC,EAAO7/D,KAAKnG,IAAImK,EAAE0wB,EAAGzwB,EAAEywB,GACvBkrC,EAAO5/D,KAAKoT,IAAIpP,EAAEyO,EAAGxO,EAAEwO,GACvBqtD,EAAO9/D,KAAKnG,IAAImK,EAAEyO,EAAGxO,EAAEwO,GACvBm3C,EAAU+V,GAAQ6rB,EAAM92D,GAAK82D,EAAM92D,EAAImrC,EAEvC6tB,EADA9tB,IAASE,EACI0rB,EAAM/4E,GAAKmtD,GAAQhW,EAEnBA,IAAYkW,EAAOF,KAAU57D,EAAE0wB,EAAIzwB,EAAEywB,IAAM1wB,EAAEyO,EAAIxO,EAAEwO,GAAK,EAAI+4E,EAAM92D,EAAIirC,EAAOE,EAAO2rB,EAAM92D,IAAMmrC,EAAOF,GAAQC,EAAO4rB,EAAM/4E,GAAK,GAG/Ii7E,EAAa,EAAI,EA0J5B,QAASC,GAAY54B,GAArB,GAIa74D,GAHLnD,EAASg8D,EAAIh8D,OACbqa,EAAMw6E,GACN/zF,EAAMg0F,EACV,KAAS3xF,EAAI,EAAGA,EAAInD,EAAQmD,IACxBrC,EAAMmG,KAAKnG,IAAIA,EAAKk7D,EAAI74D,IACxBkX,EAAMpT,KAAKoT,IAAIA,EAAK2hD,EAAI74D,GAE5B,QACIkX,IAAKA,EACLvZ,IAAKA,GAkNb,QAASi0F,GAAoBjmE,EAAUkmE,EAAgB1yD,GAAvD,GACQ2yD,GACK9xF,EACDhD,EAEI+0F,CAHZ,KAAS/xF,EAAI,EAAGA,EAAI2rB,EAAS9uB,OAAQmD,IAC7BhD,EAAU2uB,EAAS3rB,GACnBhD,EAAQ0L,YACJqpF,EAAqBF,EAAiB70F,EAAQm0F,KAAKhyD,GAAkBniC,EAAQg1F,UAC7ED,IAEID,EADAA,EACcG,GAAKC,MAAMJ,EAAaC,GAExBA,GAK9B,OAAOD,GAEX,QAASK,GAA2BxmE,EAAUwT,GAA9C,GACQ2yD,GACK9xF,EACDhD,EAEI+0F,CAHZ,KAAS/xF,EAAI,EAAGA,EAAI2rB,EAAS9uB,OAAQmD,IAC7BhD,EAAU2uB,EAAS3rB,GACnBhD,EAAQ0L,YACJqpF,EAAqB/0F,EAAQo1F,YAAYjzD,GACzC4yD,IAEID,EADAA,EACcG,GAAKC,MAAMJ,EAAaC,GAExBA,GAK9B,OAAOD,GAiRX,QAASO,GAAiB/C,EAAO6B,EAAMn0F,GAAvC,GACQs1F,GAAYt1F,EAAQuiC,aAAeA,IACnCisD,EAAS8G,EAAU9G,QACvBA,GAAOr+E,GAAKmiF,EAAM92D,EAAI24D,EAAKxoD,OAAOnQ,EAClCgzD,EAAO/vF,GAAK6zF,EAAM/4E,EAAI46E,EAAKxoD,OAAOpyB,EAClC+7E,EAAU9G,OAAOA,GACjBxuF,EAAQuiC,UAAU+yD,GAEtB,QAASC,GAAWtvF,EAAM8hE,EAAMytB,EAAOx5D,EAAMy5D,GACzC,GAAIt+E,EAQJ,OANIA,GADU,UAAVq+E,EACQztB,EAAKp8B,OAAO3P,GACH,QAAVw5D,EACCztB,EAAKp8B,OAAO3P,GAAQ+rC,EAAK9hE,KAAKwvF,GAAaxvF,EAE3C8hE,EAAKp8B,OAAO3P,IAAS+rC,EAAK9hE,KAAKwvF,GAAaxvF,GAAQ,EAIpE,QAASyvF,IAAkBzvF,EAAM8hE,EAAMytB,EAAOx5D,EAAMy5D,GAChD,GAAIt+E,EAQJ,OANIA,GADU,UAAVq+E,EACQztB,EAAKp8B,OAAO3P,GAAQ+rC,EAAK9hE,KAAKwvF,GAAaxvF,EAClC,QAAVuvF,EACCztB,EAAKp8B,OAAO3P,GAEZ+rC,EAAKp8B,OAAO3P,IAAS+rC,EAAK9hE,KAAKwvF,GAAaxvF,GAAQ,EA2MpE,QAAS0vF,IAAchnE,EAAUo5C,EAAM6tB,EAAW55D,EAAMy5D,GAAxD,GACa5vF,GACDsuF,EAEI7B,CAHZ,KAASzsF,EAAM,EAAGA,EAAM8oB,EAAS9uB,OAAQgG,IACjCsuF,EAAOxlE,EAAS9oB,GAAKuvF,cACrBjB,IACI7B,EAAQ6B,EAAKxoD,OAAOtnC,QACxBiuF,EAAMt2D,GAAQu5D,EAAWpB,EAAKluF,KAAKwvF,GAAY1tB,EAAM6tB,GAAa,QAAS55D,EAAMy5D,GACjFJ,EAAiB/C,EAAO6B,EAAMxlE,EAAS9oB,KAInD,QAAS2vF,IAAM7mE,EAAUo5C,EAAM6tB,GAC3BD,GAAchnE,EAAUo5C,EAAM6tB,EAAW,IAAK,SAElD,QAASC,IAAOlnE,EAAUo5C,EAAM6tB,GAC5BD,GAAchnE,EAAUo5C,EAAM6tB,EAAW,IAAK,UAElD,QAASE,IAAcnnE,EAAUonE,EAAWC,EAAWP,GAAvD,GAEY9pD,GACAsqD,EACKpwF,EACD7F,EACAm0F,CALZ,IAAIxlE,EAAS9uB,OAAS,EAGlB,IAFI8rC,EAAS,GAAIokD,IACbkG,EAAetnE,EAAS,GAAGwlE,KACtBtuF,EAAM,EAAGA,EAAM8oB,EAAS9uB,OAAQgG,IACjC7F,EAAU2uB,EAAS9oB,GAAK7F,QACxBm0F,EAAOxlE,EAAS9oB,GAAKsuF,KACzBxoD,EAAOoqD,GAAaE,EAAatqD,OAAOoqD,GAAaE,EAAahwF,KAAKwvF,GACvE9pD,EAAOqqD,GAAa7B,EAAKxoD,OAAOqqD,GAChCX,EAAiB1pD,EAAQwoD,EAAMn0F,GAC/Bm0F,EAAKxoD,OAAOoqD,GAAapqD,EAAOoqD,GAChCE,EAAe9B,EAI3B,QAAS+B,IAAoBvnE,GAA7B,GAEa9oB,GACD7F,EACAm0F,EAHJ2B,IACJ,KAASjwF,EAAM,EAAGA,EAAM8oB,EAAS9uB,OAAQgG,IACjC7F,EAAU2uB,EAAS9oB,GACnBsuF,EAAOn0F,EAAQo1F,cACfjB,GACA2B,EAAc9lF,MACVhQ,QAASA,EACTm0F,KAAMA,GAIlB,OAAO2B,GAEX,QAASK,IAAMxnE,GACXmnE,GAAcI,GAAoBvnE,GAAW,IAAK,IAAK,SAE3D,QAASynE,IAAOznE,GACZmnE,GAAcI,GAAoBvnE,GAAW,IAAK,IAAK,UAE3D,QAAS0nE,IAAU1nE,EAAUo5C,EAAM0tB,GAAnC,GAKQz1F,GAASm0F,EAOJtuF,EAIGI,EAfRqwF,EAAUvuB,EAAK9hE,KAAKwvF,GACpBc,KACAJ,KACAK,EAAY,EAEZC,EAAoB,WACpBN,EAAMnmF,MACFhQ,QAASA,EACTm0F,KAAMA,IAGd,KAAStuF,EAAM,EAAGA,EAAM8oB,EAAS9uB,OAAQgG,IACrC7F,EAAU2uB,EAAS9oB,GACnBsuF,EAAOn0F,EAAQo1F,cACXjB,IACIluF,EAAOkuF,EAAKluF,KAAKwvF,GACjBe,EAAYvwF,EAAOqwF,EACfH,EAAMt2F,QACN02F,EAAOvmF,KAAKmmF,GACZA,KACAM,IACAD,EAAYvwF,IAEZwwF,IACAF,EAAOvmF,KAAKmmF,GACZA,KACAK,EAAY,IAGhBC,IACAD,GAAavwF,GAOzB,OAHIkwF,GAAMt2F,QACN02F,EAAOvmF,KAAKmmF,GAETI,EAEX,QAASG,IAAa/nE,EAAUo5C,EAAM/rC,EAAMg6D,EAAWP,GAAvD,GAIa5vF,GACDswF,EACAQ,EAMKC,EAXTL,EAASF,GAAU1nE,EAAUo5C,EAAM0tB,GACnC9pD,EAASo8B,EAAKp8B,OAAOtnC,QACrB6C,IACJ,KAASrB,EAAM,EAAGA,EAAM0wF,EAAO12F,OAAQgG,IAQnC,IAPIswF,EAAQI,EAAO1wF,GACf8wF,EAAeR,EAAM,GACzBxqD,EAAOqqD,GAAaW,EAAaxC,KAAKxoD,OAAOqqD,GAC7CX,EAAiB1pD,EAAQgrD,EAAaxC,KAAMwC,EAAa32F,SACzD22F,EAAaxC,KAAKxoD,OAAO3P,GAAQ2P,EAAO3P,GACxC85D,GAAcK,EAAOn6D,EAAMg6D,EAAWP,GACtCvuF,EAAO8I,SACE4mF,EAAa,EAAGA,EAAaT,EAAMt2F,OAAQ+2F,IAChD1vF,EAAOrB,GAAKmK,KAAKmmF,EAAMS,GAAY52F,QAG3C,OAAOkH,GAEX,QAASnG,IAAK4tB,EAAUo5C,GACpB,MAAO2uB,IAAa/nE,EAAUo5C,EAAM,IAAK,IAAK,SAElD,QAAS8uB,IAAMloE,EAAUo5C,GACrB,MAAO2uB,IAAa/nE,EAAUo5C,EAAM,IAAK,IAAK,UAElD,QAAS+uB,IAAI92F,EAAS+nE,GAAtB,GAGYgJ,GACAgmB,EAEIzxD,EACA0xD,EANR7C,EAAOn0F,EAAQo1F,aACfjB,KACIpjB,EAAcojB,EAAKluF,KACnB8wF,EAAWhvB,EAAK9hE,MAChB8wF,EAAS71F,MAAQ6vE,EAAY7vE,OAAS61F,EAAS51F,OAAS4vE,EAAY5vE,UAChEmkC,EAAQx+B,KAAKoT,IAAI68E,EAAS71F,MAAQ6vE,EAAY7vE,MAAO61F,EAAS51F,OAAS4vE,EAAY5vE,QACnF61F,EAAeh3F,EAAQuiC,aAAeA,IAC1Cy0D,EAAa1xD,MAAMA,EAAOA,GAC1BtlC,EAAQuiC,UAAUy0D,KAS9B,QAASC,IAAgB7/E,GACrB,MAAO,UAAUtR,GACb,MAAI6lF,GAAQ7lF,IACRoC,KAAKI,QAAQwjB,IAAI1U,EAAMtR,GAChBoC,MAEJA,KAAKI,QAAQujB,IAAIzU,IAGhC,QAAS8/E,IAAuB/qF,EAAIwI,GAChC,IAAK,GAAI3R,GAAI,EAAGA,EAAI2R,EAAM9U,OAAQmD,IAC9BmJ,EAAGwI,EAAM3R,IAAMi0F,GAAgBtiF,EAAM3R,IA6H7C,QAASm0F,IAAMj1F,GACX,MAAO,GAAM4E,KAAKqpF,IAAIjuF,EAAW4E,KAAKswF,IAAM,EAEhD,QAASC,IAAOn1F,GACZ,MAAOA,GAEX,QAASo1F,IAAep1F,EAAU0yB,EAAMzd,EAAO4e,GAC3C,GAAI5c,GAAI,QAASukE,EAAI,EAAG5yE,EAAIirB,CAC5B,OAAiB,KAAb7zB,EACOiV,EAEM,IAAbjV,EACOiV,EAAQ4e,GAEd2nD,IACDA,EAAI,IAEJ5yE,EAAIhE,KAAKC,IAAIgvB,IACbjrB,EAAIirB,EACJ5c,EAAIukE,EAAI,GAERvkE,EAAIukE,GAAK,EAAI52E,KAAKswF,IAAMtwF,KAAKywF,KAAKxhE,EAAOjrB,GAEtCA,EAAIhE,KAAKuoC,IAAI,MAASntC,GAAY4E,KAAKspF,MAAYluF,EAAYiX,IAAM,IAAMrS,KAAKswF,IAAM1Z,GAAK3nD,EAAO5e,GAkO7G,QAASqgF,IAAiB1vC,EAAY2vC,EAAY3xF,GAAlD,GAEa9C,GADL00F,EAAiBD,EAAa,EAAI,CACtC,KAASz0F,EAAI,EAAGA,EAAI8kD,EAAWjoD,OAAQmD,GAAK,EACxC8kD,EAAWx3C,OAAOtN,EAAI00F,EAAgB,EAAG5xF,GAGjD,QAAS6xF,IAAgBrF,EAAO9xB,GAC5B,GAAI8xB,GAAS9xB,EACT,MAAOA,GAAOo3B,UAAU,GAAGjyD,WAAW2sD,EAAM92D,GAAI82D,EAAM/4E,GAI9D,QAASs+E,IAA8B31F,EAAUmwF,EAAcD,GAC3D,GAAI0F,GAAczF,EAAahuF,QAAQihC,MAAM,EAAI,EACjD,QACIyyD,WAAYD,EAAYzzF,QAAQ2zF,cAAc91F,EAAS01F,UAAUK,KACjEC,UAAWJ,EAAYE,cAAc5F,EAASwF,UAAUK,MAOhE,QAASE,IAAgBrzF,GACrB,GAAIgjD,KAIJ,OAHAhjD,GAAI1F,QAAQg5F,GAAa,SAAU73F,EAAOb,GACtCooD,EAAW93C,KAAK3F,WAAW3K,MAExBooD,EA8RX,QAASuwC,IAAWjhF,EAAMtR,GACtB,MAAO6lF,GAAQ7lF,IAAoB,OAAVA,EAAiB,IAAMsR,EAAO,KAAQtR,EAAQ,KAAQ,GAEnF,QAASwyF,IAAcC,GAAvB,GAEav1F,GADL80E,EAAS,EACb,KAAS90E,EAAI,EAAGA,EAAIu1F,EAAM14F,OAAQmD,IAC9B80E,GAAUugB,GAAWE,EAAMv1F,GAAG,GAAIu1F,EAAMv1F,GAAG,GAE/C,OAAO80E,GAEX,QAAS0gB,IAAYD,GAArB,GAEav1F,GACD8C,EAFJgyE,EAAS,EACb,KAAS90E,EAAI,EAAGA,EAAIu1F,EAAM14F,OAAQmD,IAC1B8C,EAAQyyF,EAAMv1F,GAAG,GACjB2oF,EAAQ7lF,KACRgyE,GAAUygB,EAAMv1F,GAAG,GAAK,IAAM8C,EAAQ,IAG9C,IAAe,KAAXgyE,EACA,MAAOA,GA8Bf,QAAS2gB,IAAarxF,EAAMtB,GACxB,MAAgB,SAATsB,GAA4B,SAATA,KAAqBtB,GAA4B,aAAnBA,EAAMwpB,UAElE,QAASopE,MAAT,GACQ7pF,GAAOpJ,SAASkzF,qBAAqB,QAAQ,GAC7CltF,EAAOhG,SAASse,SAAStY,KACzBmtF,EAAYntF,EAAKrF,QAAQ,KACzBmlB,EAAM,EAOV,OANI1c,KAASgqF,GAAep2F,OACpBm2F,SACAntF,EAAOA,EAAKjM,UAAU,EAAGo5F,IAE7BrtE,EAAM9f,GAEH8f,EAEX,QAASutE,IAAO7sE,EAAI8sE,GAChB,GAAIlqF,GAAOkqF,EAAe,GAAKL,IAC/B,OAAO,OAAS7pF,EAAO,IAAMod,EAAK,IAyftC,QAAS+sE,IAAch5F,GAAvB,GACQi5F,GAMIr4F,EACA4G,EACAzF,CAPR,KACIk3F,EAAMj5F,EAAQk5F,aAAel5F,EAAQk5F,eAAiB,KACxD,MAAO/oF,IAEL8oF,IACIr4F,GAAQq4F,EAAI9oF,EAAI,EAChB3I,GAAOyxF,EAAIx6F,EAAI,EACfsD,EAAQ/B,EAAQ+B,MACP,IAATnB,GAAsB,IAAR4G,IACdzF,EAAMnB,KAAOA,EAAO,KACpBmB,EAAMyF,IAAMA,EAAM,OAsZ9B,QAAS2xF,IAAex7D,GACpB,IAAKA,GAAwB,gBAATA,KAAsBy7D,GAAah3F,KAAKu7B,GACxD,MAAOA,EAEX,IAAI39B,GAAUm5F,GAAerrD,QAE7B,OADAsrD,IAAa/nF,UAAY,EAClBssB,EAAKv+B,QAAQg6F,GAAc,SAAU74F,GAExC,MADAP,GAAQigB,UAAY1f,EACbP,EAAQu6B,aAAev6B,EAAQq5F,YAsF9C,QAASC,IAAY38C,GAArB,GAKYhR,GACA4tD,EAMJC,EAXArpD,EAAO,GAAIspD,KAAWV,cAAc,IACpC5E,EAAOx3C,EAAMy4C,cACbsE,EAAY/8C,CAWhB,OAVIw3C,KACIxoD,EAASwoD,EAAKwF,YACdJ,EAAa,GAAIK,IACrBL,EAAWh3D,UAAUA,IAAYoD,WAAWgG,EAAOnQ,GAAImQ,EAAOpyB,IAC9DggF,EAAW12F,SAASmN,KAAK2sC,GACzB+8C,EAAYH,GAEhBppD,EAAK+iB,MAAMwmC,IACPF,EAAM,qCAA0CK,GAAS,8DAAqE1pD,EAAK1/B,SAAW,SAClJ0/B,EAAKjiB,UACEsrE,EAsBX,QAASM,IAAWC,EAAKpqD,GAAzB,GAKQqqD,GACArkB,EAEK3yE,EAGDi3F,EACAC,EACAhC,EAZJiC,EAAWxqD,EAAKwqD,QACpB,IAAwB,IAApBA,EAASt6F,OAAb,CAMA,IAHIm6F,EAAUG,EAAS,GACnBxkB,EAASqkB,EAAQrkB,SACrBokB,EAAIhrD,OAAO4mC,EAAOn6C,EAAGm6C,EAAOp8D,GACnBvW,EAAI,EAAGA,EAAIm3F,EAASt6F,OAAQmD,IACjCg3F,EAAUG,EAASn3F,GACnB2yE,EAASqkB,EAAQrkB,SACbskB,EAAUE,EAASn3F,EAAI,GACvBk3F,EAAUD,EAAQlC,aAClBG,EAAY8B,EAAQ9B,YACpBgC,GAAWhC,EACX6B,EAAIK,cAAcF,EAAQ1+D,EAAG0+D,EAAQ3gF,EAAG2+E,EAAU18D,EAAG08D,EAAU3+E,EAAGo8D,EAAOn6C,EAAGm6C,EAAOp8D,GAEnFwgF,EAAIM,OAAO1kB,EAAOn6C,EAAGm6C,EAAOp8D,EAGhCo2B,GAAKrnC,QAAQgyF,QACbP,EAAIQ,aAmaZ,QAASC,IAAet6B,EAAIE,GACxB,MAAIF,GAAGu6B,QAAUr6B,EAAGq6B,QACT,EAEPv6B,EAAGu6B,QAAUr6B,EAAGq6B,WAGb,EAmNX,QAASC,IAAiBC,EAAUC,GAApC,GACa/0F,GACDqiB,EACA21D,CAFR,KAASh4E,EAAM,EAAGA,EAAM+0F,EAAM/6F,OAAQgG,IAC9BqiB,EAAO0yE,EAAM/0F,GACbg4E,EAAQ19E,MAAMy9E,WAAW11D,EAAK21D,SAClCA,EAAM/yE,GAAKod,EAAKkI,UAChBuqE,EAASE,aAAa3yE,EAAK5gB,SAAUu2E,EAAMmK,aAiOnD,QAAS8S,IAAYn+C,EAAOr0C,GAA5B,GASYqjC,GAIA1lC,EAIJ80F,EACAhrE,EACAhuB,EAKA8iE,EAGAx7D,EACA6kB,EA3BA60B,GACA7hD,MAAO,QACPC,OAAQ,QACR65F,KAAM,aAENzB,EAAa58C,EACbw3C,EAAOx3C,EAAMy4C,aA0BjB,OAzBIjB,KACIxoD,EAASwoD,EAAKwF,YAClBJ,EAAa,GAAIK,IACjBL,EAAWh3D,UAAUA,IAAYoD,WAAWgG,EAAOnQ,GAAImQ,EAAOpyB,IAC9DggF,EAAW12F,SAASmN,KAAK2sC,GACrB12C,EAAOkuF,EAAKvmE,UAChBm1B,EAAS7hD,MAAQ+E,EAAK/E,MAAQ,KAC9B6hD,EAAS5hD,OAAS8E,EAAK9E,OAAS,MAEhC45F,EAAiBp8F,EAAEiK,OAAOm6C,EAAUz6C,GACpCynB,EAAYtqB,SAASsa,cAAc,OACnChe,EAAQguB,EAAUhuB,MACtBA,EAAME,QAAU,OAChBF,EAAMb,MAAQ65F,EAAe75F,MAC7Ba,EAAMZ,OAAS45F,EAAe55F,OAC9BsE,SAASya,KAAKC,YAAY4P,GACtB80C,EAAU,GAAIo2B,IAAUlrE,EAAWgrE,GACvCl2B,EAAQq2B,kBACRr2B,EAAQs2B,KAAK5B,GACTlwF,EAAUw7D,EAAQu2B,QAClBltE,EAAU,WACV22C,EAAQ32C,UACRzoB,SAASya,KAAKG,YAAY0P,IAE9B1mB,EAAQsgC,KAAKzb,EAASA,GACf7kB,EAEX,QAASgyF,IAAU1+C,EAAOr0C,GACtB,GAAIkxF,GAAMF,GAAY38C,EAItB,OAHKr0C,IAAYA,EAAQ8wC,MACrBogD,EAAM,6BAA+BrN,EAAaqN,IAE/Cnc,KAAgBrzC,QAAQwvD,GAGnC,QAAS8B,IAAQC,GACb,MAAOv3F,OAAMiL,UAAUP,MAAM2B,KAAKkrF,GAkBtC,QAAS/4F,IAASmE,EAAI60F,GACd70F,EAAG80F,UACH90F,EAAG80F,UAAUjyF,IAAIgyF,GAEjB70F,EAAGR,WAAa,IAAMq1F,EAG9B,QAASvtD,IAAYtnC,EAAI60F,GACjB70F,EAAG80F,UACH90F,EAAG80F,UAAUlrE,OAAOirE,GAEpB70F,EAAGR,UAAYQ,EAAGR,UAAUjH,MAAM,OAAO6iD,OAAO,SAAUj3C,EAAGg4B,GAIzD,MAHIA,IAAQ04D,GACR1wF,EAAEkF,KAAK8yB,GAEJh4B,OACJ3L,KAAK,KAGpB,QAASu8F,IAAO/0F,EAAInB,GAChB0J,OAAO6a,KAAKvkB,GAAQ07B,QAAQ,SAAUj6B,GAClCN,EAAG5E,MAAMkF,GAAOzB,EAAOyB,KA4B/B,QAASqZ,IAAQ3Z,EAAIsF,GACjB,GAAItF,EAAG2Z,QACH,MAAO3Z,GAAG2Z,QAAQrU,EAEtB,MAAOtF,IAAO,iCAAiCvE,KAAYuE,EAAPwL,KAAa,CAC7D,GAAI6J,GAAQrV,EAAIsF,GACZ,MAAOtF,EAEXA,GAAKA,EAAGkgB,YA0DhB,QAAS80E,IAAMJ,GACX,MAAoB,gBAATA,IAEH//D,EAAG+/D,EACHhiF,EAAGgiF,GAGPv3F,MAAMiK,QAAQstF,IAEV//D,EAAG+/D,EAAM,GACThiF,EAAGgiF,EAAM,KAIb//D,EAAG+/D,EAAM//D,EACTjiB,EAAGgiF,EAAMhiF,GAGjB,QAASqiF,IAAQ57F,EAASsI,GAatB,QAASuzF,GAAM77F,GAAf,GACQ28C,GAAQ,GAAIi9C,IACZrhB,EAAMv4E,EAAQ0tF,uBAuBlB,OAtBAoO,IAAan/C,GACTrX,EAAM9J,EACN,EACA,EACA8J,EAAM/rB,GACLg/D,EAAI33E,KAAO0kC,EAAM9J,GACjB+8C,EAAI/wE,IAAM89B,EAAM/rB,IAErBwiF,GAASC,UAAW,EACpBD,GAASE,QAAUC,GAAOC,OAC1BJ,GAASK,kBACLp8F,QAASA,EACT28C,MAAOA,GAGPo/C,GAASM,YADT/zF,EAAQg0F,cAAe,EACA,IAEAh0F,EAAQg0F,WAEnC95F,GAASxC,EAAS,gBAClBu8F,GAAcv8F,EAAS28C,GACvB1O,GAAYjuC,EAAS,gBACd28C,EA8EX,QAAS6/C,GAAaC,GAClB,GAAmB,MAAfA,EAIA,MAH0B,gBAAfA,KACPA,EAAct8F,MAAMwK,SAAS8xF,EAAYr9F,QAAQ,aAAc,MAEzC,kBAAfq9F,GACA,SAAU/4F,GAAV,GAGKoc,GAFJnZ,EAAK81F,EAAY/4F,EAMrB,OALIiD,IAAmB,gBAANA,KACTmZ,EAAMra,SAASsa,cAAc,OACjCD,EAAIG,UAAYtZ,EAChBA,EAAKmZ,EAAI48E,mBAEN/1F,GAGR,WACH,MAAO81F,GAAY5iC,WAAU,IAIzC,QAAS8iC,GAAiB5zE,EAAU/oB,EAAS48F,EAAYC,EAAWC,EAAYpxD,EAAQpjC,GAuCpF,QAASy0F,MACa,KAAdH,GAAqBE,IACrBE,EAAap4E,EAGb,IAAImxB,GAAOknD,GACXr4E,GAAKiC,WAAWkzC,aAAahkB,EAAMnxB,GACnCmxB,EAAK51B,YAAYyE,GAEjB63E,GACAS,EAAMh8D,QAAQ,SAAU6U,EAAM/yC,GAC1B,GAAI2D,GAAK81F,GACLz8F,QAAS+1C,EACTonD,QAASn6F,EAAI,EACbutD,WAAY2sC,EAAMr9F,QAElB8G,IACAovC,EAAK51B,YAAYxZ,KAI7By2F,GAAYF,EAAO,WACfG,GAA4BH,EAAO,WAC/Bn0E,GACIm0E,MAAOA,EACPntE,UAAWA,QAK3B,QAASutE,GAAa32F,GAClB,GAAI2B,EAAQg1F,cAAgBthF,GAAQrV,EAAI2B,EAAQg1F,eAAiB32F,EAAGooB,cAAgB+tE,EAAaS,EAC7F,OAAO,CAEX,IAAIC,GAAM72F,EAAG6lB,OACb,SAAI,YAAYpqB,KAAKo7F,IAAQ72F,EAAGooB,cAAgB+tE,EAAaS,KAGtD52F,EAAGuD,aAAa,qBAAuB,0FAA0F9H,KAAKuE,EAAG6lB,UAEpJ,QAASwwE,GAAah9F,GAAtB,GAIQ+B,GACA07F,EACAC,EACAC,EAEAC,EACKj3F,EAcGk3F,CAdZ,KATuB,SAAnB79F,EAAQwsB,SACRkvE,GAAO17F,GAAW89F,YAAa,UAE/B/7F,EAAQ4D,GAAiB3F,GACzBy9F,EAAgBpzF,WAAWtE,GAAiBhE,EAAO,mBACnD27F,EAAerzF,WAAWtE,GAAiBhE,EAAO,wBAClD47F,EAAaJ,EACjBA,GAAUE,EAAgBC,EACtBE,GAAU,EACLj3F,EAAK3G,EAAQ+4C,WAAYpyC,EAAIA,EAAKA,EAAGqyC,YAC1C,GAAmB,GAAfryC,EAAG2oB,SAAe,CAElB,GADAsuE,GAAU,EACN5hF,GAAQrV,EAAIi2F,GAAa,CACzBmB,EAAep3F,EACf,UAEJ,IAAKm2F,EAAY,CACbE,EAAar2F,EACb,UAEJ,IAAK,wBAAwBvE,KAAK2D,GAAiBJ,GAAiBgB,GAAK,aACrE,QAEAk3F,GAAOG,EAAcr3F,GACb,GAARk3F,EACAE,EAAep3F,GACRk3F,GACHP,EAAa32F,GACbo3F,EAAep3F,GAKnBq2F,EAAar2F,OAEK,IAAfA,EAAG2oB,UAAiBwtE,IAC3BmB,EAAUt3F,EAAIi3F,GACdA,GAAU,EAGlBL,GAASI,EAEb,QAASO,GAAcv3F,GACnB,GAAI+2E,GAAI/2E,EAAGkgB,WAAYxnB,EAAQq+E,EAAE3kC,UACjC,IAAIpyC,IAAOtH,EACP,OAAO,CAEX,IAAIsH,IAAO+2E,EAAE76E,SAAS,GAAI,CACtB,GAAsB,GAAlBxD,EAAMiwB,UAAmC,GAAlBjwB,EAAMiwB,SAC7B,OAAO,CAEX,IAAsB,GAAlBjwB,EAAMiwB,SACN,OAAQ,KAAKltB,KAAK/C,EAAMqE,MAGhC,OAAO,EAEX,QAASq6F,GAAep3F,GAAxB,GAIQyY,GAAO++E,EAAUC,EAAOC,EAAMC,EAU9BvoD,EACA8Q,CAdJ,OAAmB,IAAflgD,EAAG2oB,UAAiB3oB,IAAOie,GAAQs5E,EAAcv3F,GAC1Co3F,EAAep3F,EAAGkgB,aAG7BzH,EAAQkB,GAAQ3Z,EAAI,SACpBw3F,EAAW/+E,GAASA,EAAMm/E,cAAc,YACpCj2F,EAAQk2F,gBACRJ,EAAQh/E,GAASA,EAAMm/E,cAAc,SACrCF,EAAO/9E,GAAQ3Z,EAAI,oBACf03F,GAAQA,EAAKE,cAAc,wBAC3BD,EAAWD,EAAKE,cAAc,oBAGlCxoD,EAAOknD,IACPp2C,EAAQ43C,EAAIjhE,cAChBqpB,EAAM63C,eAAe95E,GACrBiiC,EAAM83C,aAAah4F,GACnBovC,EAAK51B,YAAY0mC,EAAM+3C,mBACvBh6E,EAAKiC,WAAWkzC,aAAahkB,EAAMnxB,GACnCi6E,EAAwBl4F,EAAGkgB,YACvBzH,IACAA,EAAQkB,GAAQ3Z,EAAI,SAChB2B,EAAQk2F,eAAiBJ,GACzBh/E,EAAM26C,aAAaqkC,EAAMvkC,WAAU,GAAOz6C,EAAM25B,YAEhDolD,GACA/+E,EAAM26C,aAAaokC,EAAStkC,WAAU,GAAOz6C,EAAM25B,kBAGvDzwC,EAAQk2F,eAAiBF,IACzBD,EAAO/9E,GAAQ3Z,EAAI,oBACnB03F,EAAKtkC,aAAaukC,EAASzkC,WAAU,GAAOwkC,EAAKtlD,eAGzD,QAASkkD,KACL,GAAIlnD,GAAO0oD,EAAI1+E,cAAc,iBAe7B,OAdA27E,IAAO3lD,GACH9zC,QAAS,QACTI,UAAW,cACXnB,MAAO27F,EAAYA,EAAY,KAAO,OACtCiC,QAASpzD,EAAOlkC,IAAM,MAAQkkC,EAAO7qC,MAAQ,MAAQ6qC,EAAO5qC,OAAS,MAAQ4qC,EAAO9qC,KAAO,KAC3FsB,SAAU,WACVf,OAAQ27F,EAAaA,EAAa,KAAO,OACzCz2F,SAAUy2F,GAAcD,EAAY,SAAW,UAC/C50C,MAAO,SAEP3/C,GAAWA,EAAQy2F,gBACnBhpD,EAAK5vC,UAAYmC,EAAQy2F,eAE7B7B,EAAMltF,KAAK+lC,GACJA,EAEX,QAASioD,GAAczC,GAAvB,GAKQ/zF,GACAw3F,EALAhzD,EAAMuvD,EAAM7N,uBAChB,OAAkB,KAAd1hD,EAAI9qC,OAA8B,IAAf8qC,EAAI7qC,OAChB,GAEPqG,EAAMod,EAAK8oE,wBAAwBlmF,IACnCw3F,EAAYlC,EAAaS,EACtBvxD,EAAI7qC,OAAS69F,EAAY,EAAIhzD,EAAIxkC,IAAMA,EAAMw3F,EAAY,EAAIhzD,EAAIlrC,OAAS0G,EAAMw3F,EAAY,EAAI,GAE3G,QAASf,GAAU/jE,EAAM0jE,GAAzB,GAIQlxE,GACAm6B,EAEAg3C,EAIAoB,EAuBQlpD,CAjCP,MAAK3zC,KAAK83B,EAAKx2B,QAGhBgpB,EAAMwN,EAAKx2B,KAAK7D,OAChBgnD,EAAQ43C,EAAIjhE,cAChBqpB,EAAMq4C,mBAAmBhlE,GACrB2jE,EAAOG,EAAcn3C,GACpBg3C,IAGDoB,EAAW/kE,EACH,GAAR2jE,EAEIE,EADAH,EACe1jE,EAAKrT,WAELqT,KAGlB,QAASilE,GAAQjlF,EAAKq+D,EAAK53E,GAExB,MADAkmD,GAAMu4C,OAAOllE,EAAMq+C,GACfr+D,GAAOq+D,GAAOA,GAAO53E,EACd43E,EAEPylB,EAAcn3C,GACPs4C,EAAQjlF,EAAKA,EAAMq+D,GAAO,EAAGA,GAE7B4mB,EAAQ5mB,EAAKA,EAAM53E,GAAO,EAAGA,IAE1C,EAAG+rB,GAAO,EAAGA,IACV,KAAKtqB,KAAKykD,GAAAA,IAAqB+2C,EAChCG,EAAe7jE,EAAKrT,aAEpBo4E,EAAW/kE,EAAK+jE,UAAUp3C,EAAMw4C,WAC5BtpD,EAAOknD,IACXp2C,EAAM63C,eAAe95E,GACrBmxB,EAAK51B,YAAY0mC,EAAM+3C,mBACvBh6E,EAAKiC,WAAWkzC,aAAahkB,EAAMnxB,GACnCi6E,EAAwBI,EAASp4E,cAGzCo3E,EAAUgB,KAEd,QAASJ,GAAwBl4F,GAC7B,GAAI24F,GAAKh/E,GAAQ3Z,EAAI,KACjB24F,KACAA,EAAGv5E,aAAa,kBAAmB,KACnC84E,EAAwBS,EAAGz4E,aAtPvC,GACQ41E,GAAcD,EAAal0F,EAAQqC,UACnC8zF,EAAMz+F,EAAQ+kE,cACdm4B,KACAt4E,EAAOtc,EAAQi3F,aAAev/F,EAAUw/F,GAAWx/F,GACnD+vB,EAAY0uE,EAAI1+E,cAAc,sBAC9Bw9E,EAAS,CACbjC,IAAQ12E,EAAKgC,iBAAiB,UAAUsa,QAAQ,SAAUu+D,GACtDA,EAAM54E,WAAW1G,YAAYs/E,KAEjCnE,GAAQ12E,EAAKgC,iBAAiB,OAAOsa,QAAQ,SAAUw+D,GACnDpE,GAAQoE,EAAG78F,UAAUq+B,QAAQ,SAAUo+D,EAAIjlF,GACvCilF,EAAGv5E,aAAa,oBAAqB1L,OAG7CqhF,GAAO3rE,GACH9tB,QAAS,QACTC,SAAU,WACVG,UAAW,cACXzB,KAAM,WACN4G,IAAK,aAELq1F,IACAnB,GAAO3rE,GACH7uB,MAAO27F,EAAY,KACnB8C,YAAaj0D,EAAO9qC,KAAO,KAC3Bg/F,aAAcl0D,EAAO7qC,MAAQ,OAEjC66F,GAAO92E,GAAQve,SAAU,YAE7BrG,EAAQ6mB,WAAWkzC,aAAahqC,EAAW/vB,GAC3C+vB,EAAU5P,YAAYyE,GAClBtc,EAAQu3F,gBACR9tE,WAAW,WACPzpB,EAAQu3F,gBAAgB9vE,EAAWgtE,IACpC,IAEHhrE,WAAWgrE,EAAa,IA9KpC,GAIQ1zF,GAQAi8B,CAPJ,IAJKh9B,IACDA,MAEAe,EAAUg0E,MACTr9E,EACD,MAAOqJ,GAAQilD,OAAO,uBAE1B,IAAsC,kBAA3B1vD,QAAO+G,iBACd,KAAUqL,OAAM,mLA0XpB,OAxXA7Q,OAAM2/F,IAAIC,WAAWC,GAAahgG,EAAQ+kE,gBACtCz/B,EAAQq2D,GAAMrzF,EAAQg9B,OAAS,GA4BnC83D,GAAYp9F,EAAS,WAAA,GAgCT28C,GA/BJigD,EAAat0F,GAAWA,EAAQ23F,eAChCC,EAAe53F,GAAWA,EAAQ63F,WAAkC,QAArB73F,EAAQ63F,UACvDC,EAAejgG,MAAM2/F,IAAIO,gBAAgB,SAAUp5F,EAAKq5F,GACxD,MAAW,aAAPr5F,EACOi5F,EAAe53F,EAAQrB,GAAO,KAElCA,IAAOqB,GAAUA,EAAQrB,GAAOq5F,IAEvCzD,EAAYqD,GAAgBE,EAAaD,UAAU,GACnDrD,EAAaoD,GAAgBE,EAAaD,UAAU,GACpDz0D,EAASpjC,EAAQojC,QAAU00D,EAAa10D,OACxC60D,IAAoB70D,CACpBkxD,IAAcE,GACTpxD,IACDA,GACI9qC,KAAM,EACN4G,IAAK,EACL3G,MAAO,EACPC,OAAQ,IAGZ+7F,IACAA,GAAav3D,EAAM9J,GAEnBshE,IACAA,GAAcx3D,EAAM/rB,GAExBmyB,EAAO9qC,MAAQ0kC,EAAM9J,EACrBkQ,EAAO7qC,OAASykC,EAAM9J,EACtBkQ,EAAOlkC,KAAO89B,EAAM/rB,EACpBmyB,EAAO5qC,QAAUwkC,EAAM/rB,EACnBojC,EAAQ,GAAIi9C,KACZkG,KACIU,WAAW,EACXL,UAAWD,EAAeE,EAAaD,UAAY,OACnDM,cAAeF,KAGvB5D,EAAiB,SAAUnhE,GACvB,GAAIlzB,EAAQwnB,SAAU,CAClB,GAAI4wE,IAAW,EAAOvD,EAAU,GAC/B,QAAS7sC,KACN,GAAI6sC,EAAU3hE,EAAE0hE,MAAMr9F,OAAQ,CAC1B,GAAIk2C,GAAO8lD,EAAMrgE,EAAE0hE,MAAMC,GACzBxgD,GAAMjQ,OAAOqJ,GACbztC,EAAQwnB,UACJimB,KAAMA,EACNonD,UAAWA,EACX5sC,WAAY/0B,EAAE0hE,MAAMr9F,OACpBwzB,OAAQ,WACJqtE,GAAW,KAGdA,EAGDllE,EAAEzL,UAAUlJ,WAAWxG,YAAYmb,EAAEzL,WAFrCgC,WAAWu+B,OAKf90B,GAAEzL,UAAUlJ,WAAWxG,YAAYmb,EAAEzL,WACrC1mB,EAAQ2gC,QAAQ2S,UAIxBnhB,GAAE0hE,MAAMh8D,QAAQ,SAAU6U,GACtB4G,EAAMjQ,OAAOmvD,EAAM9lD,MAEvBva,EAAEzL,UAAUlJ,WAAWxG,YAAYmb,EAAEzL,WACrC1mB,EAAQ2gC,QAAQ2S,IAErB38C,EAAS48F,EAAYC,EAAYA,EAAYnxD,EAAO9qC,KAAO8qC,EAAO7qC,MAAQ,KAAMi8F,EAAaA,EAAapxD,EAAOlkC,IAAMkkC,EAAO5qC,OAAS,KAAM4qC,EAAQpjC,IAExJe,EAAQ2gC,QAAQ6xD,EAAM77F,MAkRvBqJ,EAmOX,QAAS22F,IAAavB,GASlB,QAASkC,GAAaC,GAClB,GAAIA,EAAI,CACJ,GAAI1rE,GAAQ,IACZ,KACIA,EAAQ0rE,EAAGC,SACb,MAAOC,IAEL5rE,GACA6rE,EAASH,EAAI1rE,IAIzB,QAAS8rE,GAAUvsE,GAAnB,GAWYwsE,GAVJxkB,EAAM12E,GAAiB0uB,EAAK1yB,MAAO,MACvC,OAAI06E,GACOykB,GAAczkB,GAAK16B,OAAO,SAAUj3C,EAAGnE,GAC1C,GAAIs6F,GAAOE,GAAWx6F,EAItB,OAHIs6F,IACAn2F,EAAEkF,KAAKixF,GAEJn2F,QAGPm2F,EAAOE,GAAW1sE,EAAKzU,SACpBihF,GAAQA,OAGvB,QAASF,GAASK,EAAYlsE,GAA9B,GACalyB,GACDklF,EAMInmF,EACAs/F,EACAC,EACAC,EACA9kB,CAXZ,KAASz5E,EAAI,EAAGA,EAAIkyB,EAAMr1B,SAAUmD,EAEhC,OADIklF,EAAIhzD,EAAMlyB,GACNklF,EAAE9gF,MACV,IAAK,GACDu5F,EAAazY,EAAEkZ,WACf,MACJ,KAAK,GACGr/F,EAAQmmF,EAAEnmF,MACVs/F,EAASH,GAAcn7F,GAAiBhE,EAAO,gBAC/Cu/F,EAAO,sBAAsBl/F,KAAK2D,GAAiBhE,EAAO,gBAC1Dw/F,EAAS,UAAYx7F,GAAiBhE,EAAO,cAC7C06E,EAAMukB,EAAU9Y,GAChBzL,EAAI58E,OAAS,GACb2hG,EAAQJ,EAAYC,EAAQC,EAAMC,EAAQ9kB,EAAI,KAK9D,QAAS+kB,GAAQJ,EAAYzsF,EAAO2sF,EAAMC,EAAQh2E,GACzC,UAAUnpB,KAAKmpB,IACV,gBAAgBnpB,KAAKmpB,IAAQ,MAAMnpB,KAAKmpB,KAC1CA,GAAa61E,EAAW31F,KAAlB0G,IAAwB/S,QAAQ,UAAW,IAAMmsB,GAG/D5W,EAAMusB,QAAQ,SAAU9pB,GACpBA,EAAOA,EAAKhY,QAAQ,mBAAoB,MACpCkiG,IACAlqF,GAAQ,SAERmqF,IACAnqF,GAAQ,WAEZlQ,EAAOkQ,GAAQmU,IArE3B,GAIQrkB,GACKlE,CAAT,KAJW,MAAPy7F,IACAA,EAAMh5F,UAENyB,KACKlE,EAAI,EAAGA,EAAIy7F,EAAIgD,YAAY5hG,SAAUmD,EAC1C29F,EAAalC,EAAIgD,YAAYz+F,GAEjC,OAAOkE,GAiEX,QAAStC,IAAeoC,EAAKC,GACzB,MAAOiI,QAAOD,UAAUrK,eAAeyL,KAAKrJ,EAAKC,GAErD,QAASy6F,IAAWtqF,GAEhB,MADAA,GAAO,YAAcA,EACd2kF,GAAS3kF,GAEpB,QAASuqF,IAAevqF,GACpB,GAAIgD,MAAasjE,EAAIqe,EAErB,KADA3kF,EAAO,YAAcA,EACdsmE,GACC94E,GAAe84E,EAAGtmE,IAClBgD,EAAOpK,KAAK0tE,EAAEtmE,IAElBsmE,EAAIxuE,OAAO0yF,eAAelkB,EAE9B,OAAOtjE,GAAO5R,UAElB,QAASq5F,IAAWzqF,EAAM0qF,GACtB,GAAIpkB,GAAIqe,EAER,KADA3kF,EAAO,YAAcA,EACdsmE,IAAM94E,GAAe84E,EAAGtmE,IAC3BsmE,EAAIxuE,OAAO0yF,eAAelkB,EAEzBA,KACDA,EAAIqe,GAASgG,OAEjBrkB,EAAEtmE,IAASsmE,EAAEtmE,IAAS,IAAa,MAAP0qF,EAAc,EAAIA,GAElD,QAASE,IAAa5qF,EAAMuwB,GACxBvwB,EAAO,YAAcA,EACrB2kF,GAAS3kF,GAAe,MAAPuwB,EAAc,EAAIA,EAEvC,QAASs6D,IAAWn3F,EAAGrM,EAAG6hG,GAA1B,GACat9F,GACDoU,EACAuwB,CAFR,KAAS3kC,EAAI,EAAGA,EAAI8H,EAAEjL,QACduX,EAAOtM,EAAE9H,KACT2kC,EAAMt9B,WAAWS,EAAE9H,IACnB4a,MAAM+pB,GACNlpC,EAAE2Y,EAAMkpF,IAER7hG,EAAE2Y,EAAMuwB,KACN3kC,GAId,QAASk/F,IAAengG,GAAxB,GAKQogG,GAJAC,EAAer8F,GAAiBhE,EAAO,gBACvCqgG,IACAH,GAAWf,GAAckB,EAAc,QAASJ,GAAc,GAE9DG,EAAmBp8F,GAAiBhE,EAAO,qBAC3CogG,GACAF,GAAWf,GAAciB,EAAkB,QAASN,GAAY,GAGxE,QAASQ,IAAav9F,EAAK5E,GACvB,GAAI29E,GAAQ19E,MAAMy9E,WAAW94E,GAAK,EASlC,OARI+4E,KACAA,EAAQA,EAAM+J,QACV1nF,EACA29E,EAAQA,EAAMmK,YACK,IAAZnK,EAAM/yE,IACb+yE,EAAQ,OAGTA,EAEX,QAASwf,IAA4B1uE,EAAU5F,GAe3C,QAASunC,OACCgyC,GAAW,GACbv5E,IAhBR,GAAIu5E,GAAU,CACd3zE,GAASuS,QAAQ,SAAUv6B,GAAV,GAEJ3D,GACDu/F,EAFJC,EAAS77F,EAAGigB,iBAAiB,MACjC,KAAS5jB,EAAI,EAAGA,EAAIw/F,EAAO3iG,SAAUmD,EAC7Bu/F,EAAMC,EAAOx/F,GACZu/F,EAAI95F,WACL65F,IACAC,EAAIE,OAASF,EAAIG,QAAUpyC,KAIlCgyC,GACDhyC,IAQR,QAAS8sC,IAAYp9F,EAAS+oB,GAE1B,QAASvf,GAAI+hB,GACJo3E,GAAYp3E,KACbo3E,GAAYp3E,IAAO,EACnBq3E,EAAK5yF,KAAKub,IAGlB,QAASs3E,GAAK7iG,GACN,SAASoC,KAAKpC,EAAQwsB,UACtBhjB,EAAIxJ,EAAQy8E,KAEhBqmB,GAAqB/8F,GAAiBJ,GAAiB3F,GAAU,qBAAqBkhC,QAAQ,SAAU6hE,GACrF,OAAXA,EAAG37F,MACHoC,EAAIu5F,EAAGx3E,OAGXvrB,EAAQ6C,UACRy4F,GAAQt7F,EAAQ6C,UAAUq+B,QAAQ2hE,GAS1C,QAASvyC,OACCz0C,GAAS,GACXkN,IA7BZ,GA0BQlN,GAzBA+mF,IAoBA5+F,OAAMiK,QAAQjO,GACdA,EAAQkhC,QAAQ2hE,GAEhBA,EAAK7iG,GAEL6b,EAAQ+mF,EAAK/iG,OAMH,IAAVgc,GACAy0C,IAEJsyC,EAAK1hE,QAAQ,SAAU3V,GACnB,GAAIg3E,GAAMI,GAAYp3E,GAAO,GAAI3sB,QAAOokG,KACnC,WAAU5gG,KAAKmpB,KAChBg3E,EAAIU,YAAc,aAEtBV,EAAI9lB,IAAMlxD,EACNg3E,EAAI95F,SACJ6nD,KAEAiyC,EAAIE,OAASnyC,EACbiyC,EAAIG,QAAU,WACVC,GAAYp3E,GAAO,KACnB+kC,QAKhB,QAAS4yC,IAAaz+C,GAAtB,GAGYyjC,GAFJhhF,EAAS,EACb,GACQghF,GAAIzjC,EAAI,GACZv9C,EAASiL,OAAO+5E,aAAa,GAAKhE,GAAKhhF,EACvCu9C,EAAI39C,KAAKpE,MAAM+hD,EAAI,UACdA,EAAI,EACb,OAAOv9C,GAEX,QAASi8F,IAAanjG,EAAS+B,EAAO46C,GAAtC,GAMQymD,GAEIvlB,CAPRke,IAAW7sF,OAAOioC,OAAO4kD,IACzBA,GAAS/7F,EAAQwsB,QAAQxnB,gBACrBhF,QAASA,EACT+B,MAAOA,GAEPqhG,EAAar9F,GAAiBhE,EAAO,mBACrCqhG,GAA4B,QAAdA,IACVvlB,EAAQ93E,GAAiBhE,EAAO,SACpCqhG,EAAWlkG,MAAM,QAAQgiC,QAAQ,SAAU9pB,GAClC2kF,GAAS3kF,KACV2kF,GAAS3kF,GAAQymE,MAIzBwlB,GAAuBthG,KACvBg6F,GAASK,kBACLp8F,QAASA,EACT28C,MAAOA,IAInB,QAAS2mD,MACLvH,GAAW7sF,OAAO0yF,eAAe7F,IAErC,QAASwH,IAAc5zD,GACnB,GAAyB,MAArBosD,GAASC,SAAkB,CAC3B,GAAIhwD,GAAM2D,EAAKwkD,KAAK4H,GAASE,QAEzBF,IAASC,SADTD,GAASC,SACW/G,GAAKuO,UAAUzH,GAASC,SAAUhwD,GAElCA,GAIhC,QAASy3D,MACL,GAAIC,GAAK3H,GAASC,QAClB,OAAU,OAAN0H,IAGAA,EACsB,IAAfA,EAAGxiG,SAAiC,IAAhBwiG,EAAGviG,SADlC,QAIJ,QAASkiG,IAAuBthG,GAC5B,QAASkmC,GAAK7wB,GACV,MAAOrR,IAAiBhE,EAAOqV,GAEnC,GAAyB,QAArB6wB,EAAK,cAA8C,UAApBA,EAAK,aAA8C,QAAnBA,EAAK,YAAwBA,EAAK,WAAa,EAC9G,OAAO,EAGf,QAAStiC,IAAiB3F,EAAS2jG,GAC/B,MAAO/kG,QAAO+G,iBAAiB3F,EAAS2jG,GAAa,MAEzD,QAAS59F,IAAiBhE,EAAOkmC,EAAM27D,GACnC,GAAIj8D,GAAM5lC,EAAMgE,iBAAiBkiC,EAYjC,OAXW,OAAPN,GAAuB,KAARA,IACXnmC,GAAQgF,OACRmhC,EAAM5lC,EAAMgE,iBAAiB,WAAakiC,GACnCzmC,GAAQkF,QACfihC,EAAM5lC,EAAMgE,iBAAiB,QAAUkiC,GAChCzmC,GAAQijB,MACfkjB,EAAM5lC,EAAMgE,iBAAiB,MAAQkiC,IAC9BzmC,GAAQiB,MAAQjB,GAAQ+iB,QAC/BojB,EAAM5lC,EAAMgE,iBAAiB,OAASkiC,KAG1ChlC,UAAUpD,OAAS,IAAa,MAAP8nC,GAAuB,KAARA,GACjCi8D,EAEAj8D,EAGf,QAASk8D,IAAuB9hG,EAAOkmC,EAAMniC,EAAOg+F,GAChD/hG,EAAMgiG,YAAY97D,EAAMniC,EAAOg+F,GAC3BtiG,GAAQgF,OACRzE,EAAMgiG,YAAY,WAAa97D,EAAMniC,EAAOg+F,GACrCtiG,GAAQkF,QACf3E,EAAMgiG,YAAY,QAAU97D,EAAMniC,EAAOg+F,GAClCtiG,GAAQijB,MACf1iB,EAAMgiG,YAAY,MAAQ97D,EAAMniC,EAAOg+F,IAChCtiG,GAAQiB,MAAQjB,GAAQ+iB,QAC/BxiB,EAAMgiG,YAAY,OAAS97D,EAAMniC,EAAOg+F,GACxC77D,EAAO,KAAOA,EAAK7oC,QAAQ,gBAAiB,SAAU+Z,EAAGm2E,EAAIC,GACzD,MAAOD,GAAKC,EAAGnqF,gBAEnBrD,EAAMkmC,GAAQniC,GAGtB,QAASk+F,IAAUjiG,EAAOkiG,GAEtB,MADAA,GAAO,UAAYA,GAEf/iG,MAAOmJ,WAAWtE,GAAiBhE,EAAOkiG,EAAO,WACjDliG,MAAOgE,GAAiBhE,EAAOkiG,EAAO,UACtCpmB,MAAOwkB,GAAat8F,GAAiBhE,EAAOkiG,EAAO,WAAW,IAGtE,QAASC,IAAUlkG,EAASi9C,GAA5B,GACQtK,GAAO3yC,EAAQ+B,MAAMie,QACrB9Y,EAAS+1C,GAEb,OADAj9C,GAAQ+B,MAAMie,QAAU2yB,EACjBzrC,EAEX,QAASi9F,IAAgBpiG,EAAOkiG,GAC5B,GAAI/b,GAAIniF,GAAiBhE,EAAO,UAAYkiG,EAAO,WAAW/kG,MAAM,QAAQgc,IAAI7Q,WAIhF,OAHgB,IAAZ69E,EAAEroF,QACFqoF,EAAEl4E,KAAKk4E,EAAE,IAENkc,IACH5oE,EAAG0sD,EAAE,GACL3uE,EAAG2uE,EAAE,KAGb,QAASmc,IAAcrkG,GACnB,GAAIgsC,GAAMhsC,EAAQ0tF,uBAGlB,OAFA1hD,GAAMC,GAASD,EAAK,iBAAkBhsC,GACtCgsC,EAAMC,GAASD,EAAK,YAAahsC,GAGrC,QAASisC,IAASD,EAAK/D,EAAMjoC,GACzB,GAAI+B,GAAOuiG,EAAIC,EAAIC,EAAIC,CAUvB,OATmB,gBAARx8D,IACPlmC,EAAQ4D,GAAiB3F,GACzBskG,EAAKj6F,WAAWtE,GAAiBhE,EAAOkmC,EAAK7oC,QAAQ,IAAK,SAC1DmlG,EAAKl6F,WAAWtE,GAAiBhE,EAAOkmC,EAAK7oC,QAAQ,IAAK,WAC1DolG,EAAKn6F,WAAWtE,GAAiBhE,EAAOkmC,EAAK7oC,QAAQ,IAAK,YAC1DqlG,EAAKp6F,WAAWtE,GAAiBhE,EAAOkmC,EAAK7oC,QAAQ,IAAK,WACpC,gBAAR6oC,KACdq8D,EAAKC,EAAKC,EAAKC,EAAKx8D,IAGpBzgC,IAAKwkC,EAAIxkC,IAAM88F,EACfzjG,MAAOmrC,EAAInrC,MAAQ0jG,EACnBzjG,OAAQkrC,EAAIlrC,OAAS0jG,EACrB5jG,KAAMorC,EAAIprC,KAAO6jG,EACjBvjG,MAAO8qC,EAAInrC,MAAQmrC,EAAIprC,KAAO2jG,EAAKE,EACnCtjG,OAAQ6qC,EAAIlrC,OAASkrC,EAAIxkC,IAAMg9F,EAAKF,GAG5C,QAASI,IAAa3iG,GAAtB,GAKQysF,GAEI7iD,EANJqrD,EAAejxF,GAAiBhE,EAAO,YAC3C,OAAoB,QAAhBi1F,EACO,MAEPxI,EAAS,gCAAgCj3E,KAAKy/E,GAC9CxI,GACI7iD,EAAS5lC,GAAiBhE,EAAO,oBACrCysF,EAASA,EAAO,GAAGtvF,MAAM,YAAYgc,IAAI7Q,YACzCshC,EAASA,EAAOzsC,MAAM,QAAQgc,IAAI7Q,aAE9BmkF,OAAQA,EACR7iD,OAAQA,IANhB,QAUJ,QAASg5D,IAAiB5Y,GACtB,MAAO,KAAMA,EAAUjlF,KAAKswF,GAAK,IAErC,QAASwN,IAAWrT,GAChB,GAAIsT,GAAMx6F,WAAWknF,EACrB,OAAI,QAAQnvF,KAAKmvF,GACNzqF,KAAKswF,GAAKyN,EAAM,IAChB,OAAOziG,KAAKmvF,GACZsT,EACA,QAAQziG,KAAKmvF,GACbzqF,KAAKswF,GAAKyN,EAAM,EAChB,OAAOziG,KAAKmvF,GACZzqF,KAAKswF,GAAKyN,EAAM,IADpB,OAIX,QAAS/I,IAAagJ,EAAO7rF,GAGzB,MAFAA,GAAI,GAAIijF,IAAOjjF,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAIA,EAAE,IAC/C6rF,EAAMviE,UAAUtpB,GACTA,EAEX,QAAS8rF,IAAYD,EAAOE,GACxBF,EAAMr4D,KAAKu4D,GAEf,QAASC,IAAat1D,EAAMnU,EAAGjiB,EAAGjR,GAK9B,IAJA,GAAIoqF,GAAS,GAAIwS,KACT1pE,EACAjiB,GACDjR,GAAS68F,cAAeniG,EAAI,EAC5BA,EAAI0vF,EAAO7yF,QACd8vC,EAAKy1D,QAAQ1S,EAAO1vF,KAAM0vF,EAAO1vF,KAAM0vF,EAAO1vF,MAGtD,QAASohG,IAAelc,GAIpB,OAHIA,EAAE1sD,GAAK,GAAK0sD,EAAE3uE,GAAK,KACnB2uE,EAAE1sD,EAAI0sD,EAAE3uE,EAAI,GAET2uE,EAEX,QAASmd,IAAyBr5D,EAAKs5D,EAAKC,EAAKC,EAAKC,GAAtD,GACQC,GAAO5+F,KAAKnG,IAAI,EAAG2kG,EAAI9pE,GAAImqE,EAAO7+F,KAAKnG,IAAI,EAAG2kG,EAAI/rF,GAClDqsF,EAAO9+F,KAAKnG,IAAI,EAAG4kG,EAAI/pE,GAAIqqE,EAAO/+F,KAAKnG,IAAI,EAAG4kG,EAAIhsF,GAClDusF,EAAOh/F,KAAKnG,IAAI,EAAG6kG,EAAIhqE,GAAIuqE,EAAOj/F,KAAKnG,IAAI,EAAG6kG,EAAIjsF,GAClDysF,EAAOl/F,KAAKnG,IAAI,EAAG8kG,EAAIjqE,GAAIyqE,EAAOn/F,KAAKnG,IAAI,EAAG8kG,EAAIlsF,GAClD9a,EAAIqI,KAAKoT,IAAI8xB,EAAI9qC,OAASwkG,EAAOE,GAAO55D,EAAI7qC,QAAU0kG,EAAOE,GAAO/5D,EAAI9qC,OAAS4kG,EAAOE,GAAOh6D,EAAI7qC,QAAU8kG,EAAON,GAWxH,OAVIlnG,GAAI,IACJinG,GAAQjnG,EACRknG,GAAQlnG,EACRmnG,GAAQnnG,EACRonG,GAAQpnG,EACRqnG,GAAQrnG,EACRsnG,GAAQtnG,EACRunG,GAAQvnG,EACRwnG,GAAQxnG,IAGRynG,IACI1qE,EAAGkqE,EACHnsF,EAAGosF,GAEPQ,IACI3qE,EAAGoqE,EACHrsF,EAAGssF,GAEPO,IACI5qE,EAAGsqE,EACHvsF,EAAGwsF,GAEPM,IACI7qE,EAAGwqE,EACHzsF,EAAG0sF,IAIf,QAASK,IAAgBtmG,EAASgsC,EAAK5kC,GAAvC,GAOYm/F,GACAH,EACAI,EACAH,EAUII,EACAC,EACAC,EACAC,EAtBR7kG,EAAQ4D,GAAiB3F,GACzBslG,EAAMnB,GAAgBpiG,EAAO,YAC7BwjG,EAAMpB,GAAgBpiG,EAAO,aAC7B0jG,EAAMtB,GAAgBpiG,EAAO,eAC7ByjG,EAAMrB,GAAgBpiG,EAAO,eAuCjC,OAtCY,WAARqF,GAA6B,WAARA,IACjBm/F,EAAKvC,GAAUjiG,EAAO,OACtBqkG,EAAKpC,GAAUjiG,EAAO,SACtBykG,EAAKxC,GAAUjiG,EAAO,UACtBskG,EAAKrC,GAAUjiG,EAAO,QAC1BujG,EAAI9pE,GAAK6qE,EAAGnlG,MACZokG,EAAI/rF,GAAKgtF,EAAGrlG,MACZqkG,EAAI/pE,GAAK4qE,EAAGllG,MACZqkG,EAAIhsF,GAAKgtF,EAAGrlG,MACZskG,EAAIhqE,GAAK4qE,EAAGllG,MACZskG,EAAIjsF,GAAKitF,EAAGtlG,MACZukG,EAAIjqE,GAAK6qE,EAAGnlG,MACZukG,EAAIlsF,GAAKitF,EAAGtlG,MACA,WAARkG,IACIq/F,EAAKp8F,WAAWtE,GAAiBhE,EAAO,gBACxC2kG,EAAKr8F,WAAWtE,GAAiBhE,EAAO,kBACxC4kG,EAAKt8F,WAAWtE,GAAiBhE,EAAO,mBACxC6kG,EAAKv8F,WAAWtE,GAAiBhE,EAAO,iBAC5CujG,EAAI9pE,GAAKorE,EACTtB,EAAI/rF,GAAKktF,EACTlB,EAAI/pE,GAAKkrE,EACTnB,EAAIhsF,GAAKktF,EACTjB,EAAIhqE,GAAKkrE,EACTlB,EAAIjsF,GAAKotF,EACTlB,EAAIjqE,GAAKorE,EACTnB,EAAIlsF,GAAKotF,IAGE,gBAARv/F,KACPk+F,EAAI9pE,GAAKp0B,EACTk+F,EAAI/rF,GAAKnS,EACTm+F,EAAI/pE,GAAKp0B,EACTm+F,EAAIhsF,GAAKnS,EACTo+F,EAAIhqE,GAAKp0B,EACTo+F,EAAIjsF,GAAKnS,EACTq+F,EAAIjqE,GAAKp0B,EACTq+F,EAAIlsF,GAAKnS,GAENy/F,GAAS76D,EAAKs5D,EAAKC,EAAKC,EAAKC,GAExC,QAASoB,IAAS76D,EAAK86D,EAAMC,EAAMC,EAAMC,GAAzC,GACQ37D,GAAM+5D,GAAyBr5D,EAAK86D,EAAMC,EAAMC,EAAMC,GACtD3B,EAAMh6D,EAAI46D,GACVX,EAAMj6D,EAAI66D,GACVX,EAAMl6D,EAAI86D,GACVX,EAAMn6D,EAAI+6D,GACV12D,EAAO,GAAIu3D,KACXC,KAAM,KACNC,OAAQ,MAsCZ,OApCAz3D,GAAKZ,OAAO/C,EAAIprC,KAAMorC,EAAIxkC,IAAM89F,EAAI/rF,GAChC+rF,EAAI9pE,GACJypE,GAAat1D,EAAM3D,EAAIprC,KAAO0kG,EAAI9pE,EAAGwQ,EAAIxkC,IAAM89F,EAAI/rF,GAC/C83E,gBACAG,aACAK,QAASyT,EAAI9pE,EACbs2D,QAASwT,EAAI/rF,IAGrBo2B,EAAK0qD,OAAOruD,EAAInrC,MAAQ0kG,EAAI/pE,EAAGwQ,EAAIxkC,KAC/B+9F,EAAI/pE,GACJypE,GAAat1D,EAAM3D,EAAInrC,MAAQ0kG,EAAI/pE,EAAGwQ,EAAIxkC,IAAM+9F,EAAIhsF,GAChD83E,eACAG,SAAU,EACVK,QAAS0T,EAAI/pE,EACbs2D,QAASyT,EAAIhsF,IAGrBo2B,EAAK0qD,OAAOruD,EAAInrC,MAAOmrC,EAAIlrC,OAAS0kG,EAAIjsF,GACpCisF,EAAIhqE,GACJypE,GAAat1D,EAAM3D,EAAInrC,MAAQ2kG,EAAIhqE,EAAGwQ,EAAIlrC,OAAS0kG,EAAIjsF,GACnD83E,WAAY,EACZG,SAAU,GACVK,QAAS2T,EAAIhqE,EACbs2D,QAAS0T,EAAIjsF,IAGrBo2B,EAAK0qD,OAAOruD,EAAIprC,KAAO6kG,EAAIjqE,EAAGwQ,EAAIlrC,QAC9B2kG,EAAIjqE,GACJypE,GAAat1D,EAAM3D,EAAIprC,KAAO6kG,EAAIjqE,EAAGwQ,EAAIlrC,OAAS2kG,EAAIlsF,GAClD83E,WAAY,GACZG,SAAU,IACVK,QAAS4T,EAAIjqE,EACbs2D,QAAS2T,EAAIlsF,IAGdo2B,EAAKqmC,QAEhB,QAASqxB,IAAc1/D,EAAK5lC,GACxB,GAAI+C,GAAauF,WAAWs9B,GAAlBx1B,EACV,QAAQpQ,GACR,IAAK,uBAID,MAHI+C,GAAIjF,OAAS,IACbiF,EAAM,IAAMA,GAETA,CACX,KAAK,cACD,MAAO2mF,GAAc9jD,GAAK3iC,aAC9B,KAAK,cACD,MAAOymF,GAAc9jD,GAAKviC,aAC9B,KAAK,cACL,IAAK,cACD,MAAO89F,IAAav7D,EAAM,EAC9B,KAAK,cACL,IAAK,cACD,MAAOu7D,IAAav7D,EAAM,GAAGviC,aACjC,SACI,MAAON,IAGf,QAASwiG,IAAyBtnG,EAASw9D,GACvC,QAAS+pC,GAAenwF,EAAMrV,EAAOylG,GACjC,MAAKA,IAGLA,EAAYA,EAAUpoG,QAAQ,uBAAwB,MAC/CuiG,GAAevqF,GAAM8D,IAAI,SAAUysB,GACtC,MAAO0/D,IAAc1/D,EAAK5lC,KAC3B5C,KAAKqoG,IALGH,GAAc3F,GAAWtqF,IAAS,EAAGrV,GAHxD,GAWqBkX,GADbnO,EAAIo2F,GAAc1jC,EAAS,QAC3Bt2D,IAmBJ,OAlBA4D,GAAEo2B,QAAQ,SAAUv6B,GAChB,GAAI2kC,IACAryB,EAAI,uBAAuB1B,KAAK5Q,IAChCO,EAAO8I,KAAKiJ,EAAE,GAAG7Z,QAAQ,oBAAqB,SAAU+Z,EAAGukE,GACvD,MAAOvrE,QAAO+5E,aAAa3xE,SAASmjE,EAAG,SAEpCzkE,EAAI,2BAA2B1B,KAAK5Q,KAC3C2kC,EAAM41D,GAAcjoF,EAAE,IACtB/R,EAAO8I,KAAKu3F,EAAej8D,EAAI,GAAIA,EAAI,OAChCryB,EAAI,4BAA4B1B,KAAK5Q,KAC5C2kC,EAAM41D,GAAcjoF,EAAE,IACtB/R,EAAO8I,KAAKu3F,EAAej8D,EAAI,GAAIA,EAAI,GAAIA,EAAI,MAE/CpkC,EAAO8I,MADAiJ,EAAI,wBAAwB1B,KAAK5Q,IAC5B3G,EAAQkK,aAAa+O,EAAE,KAAO,GAE9BtS,KAGbO,EAAO/H,KAAK,IAEvB,QAASsoG,IAAW1lG,GAApB,GAIQmF,GACKlE,CAJT,IAAIjB,EAAMie,QACN,MAAOje,GAAMie,OAGjB,KADI9Y,KACKlE,EAAI,EAAGA,EAAIjB,EAAMlC,SAAUmD,EAChCkE,EAAO8I,KAAKjO,EAAMiB,GAAK,KAAO+C,GAAiBhE,EAAOA,EAAMiB,IAEhE,OAAOkE,GAAO/H,KAAK,OAEvB,QAASuoG,IAA0B1nG,EAAS28C,GAMxC,QAASgrD,GAAOC,EAAMC,GAAtB,GAIYC,GAHJ/lG,EAAQ4D,GAAiB3F,EAAS4nG,EACtC1F,IAAengG,GACXA,EAAMy7D,SAA4B,UAAjBz7D,EAAMy7D,SAAwC,QAAjBz7D,EAAMy7D,SAAoC,OAAfz7D,EAAMb,QAC3E4mG,EAAO9nG,EAAQ+kE,cAAchlD,cAAcgoF,IAC/CD,EAAK/lG,MAAMie,QAAUynF,GAAW1lG,GAChC+lG,EAAKvtE,YAAc+sE,GAAyBtnG,EAAS+B,EAAMy7D,SAC3Dx9D,EAAQ+5D,aAAa+tC,EAAMD,GAC3BG,EAAKh4F,KAAK83F,IAdtB,GAKQE,GAcAC,CAlBJ,OAAIjoG,GAAQwsB,SAAWu7E,OACnBG,IAAeloG,EAAS28C,IAGxBqrD,KAYJL,EAAO,UAAW3nG,EAAQ+4C,YAC1B4uD,EAAO,SAAU,MACbM,EAAYjoG,EAAQmG,UACxBnG,EAAQmG,WAAa,kCACrB+hG,GAAeloG,EAAS28C,GACxB38C,EAAQmG,UAAY8hG,MACpBD,GAAK9mE,QAAQ,SAAUv6B,GACnB3G,EAAQqgB,YAAY1Z,MAG5B,QAASuhG,IAAeloG,EAAS28C,GAmG7B,QAASwrD,GAAYC,GAArB,GAEYhpF,GAEIipF,EACAC,EAIAC,EACAC,EACAC,CAVZ,IAAI,QAAQrmG,KAAKpC,EAAQwsB,WACjBpN,EAAQ28E,GAAS38E,MACjBA,GAA6D,YAApDrZ,GAAiBqZ,EAAMrd,MAAO,oBAAkC,CAGzE,GAFIsmG,EAAkBrE,GAAU5kF,EAAMrd,MAAO,QAAQb,MACjDonG,EAAiBtE,GAAU5kF,EAAMrd,MAAO,OAAOb,MAC3B,IAApBmnG,GAA4C,IAAnBC,EACzB,MAAOF,EAKX,IAHIG,EAAWnpF,EAAMpf,QAAQ0tF,wBACzB8a,EAAYppF,EAAMpf,QAAQg/C,KAAK,GAAGL,MAAM,GACxC8pD,EAAeD,EAAU9a,wBACzB+a,EAAajhG,KAAO+gG,EAAS/gG,KAAOihG,EAAa7nG,MAAQ2nG,EAAS3nG,KAClE,MAAO06F,IAAQ8M,GAAOltF,IAAI,SAAU8wB,GAChC,OACIprC,KAAMorC,EAAIprC,KAAOynG,EACjB7gG,IAAKwkC,EAAIxkC,IAAM8gG,EACfznG,MAAOmrC,EAAInrC,MAAQwnG,EACnBvnG,OAAQkrC,EAAIlrC,OAASwnG,EACrBnnG,OAAQ6qC,EAAI7qC,OACZD,MAAO8qC,EAAI9qC,SAM/B,MAAOknG,GAEX,QAASM,GAAS7qB,EAAOnxD,EAAKi8E,EAAMC,EAAOC,EAAQC,EAAIC,EAAI/R,GAmCvD,QAASgS,GAAgBH,EAAQ3gB,EAAG8O,GAApC,GACQzF,GAAQzqF,KAAKswF,GAAK,EAAIyR,GAAUA,EAASF,GACzCM,GACAztE,EAAG0sD,EAAE1sD,EAAIqtE,EACTtvF,EAAG2uE,EAAE3uE,EAAIovF,GAETh5D,EAAO,GAAIu3D,KACXC,MAAQtpB,MAAOA,GACfupB,OAAQ,OACTr4D,OAAO,EAAG,EACb+sD,IAAansD,EAAMqnD,GACnBiO,GAAat1D,EAAM,EAAGu4C,EAAE3uE,GACpB83E,eACAG,UAAWmT,GAAiBpT,GAC5BM,QAAS3J,EAAE1sD,EACXs2D,QAAS5J,EAAE3uE,IAEX0vF,EAAGztE,EAAI,GAAKytE,EAAG1vF,EAAI,GACnBo2B,EAAK0qD,OAAO4O,EAAGztE,EAAI10B,KAAKqpF,IAAIoB,GAAQrJ,EAAE3uE,EAAI0vF,EAAG1vF,EAAIzS,KAAKspF,IAAImB,IAC1D0T,GAAat1D,EAAM,EAAGu4C,EAAE3uE,GACpB83E,YAAasT,GAAiBpT,GAC9BC,aACAK,QAASoX,EAAGztE,EACZs2D,QAASmX,EAAG1vF,EACZ2vF,eAAe,KAEZD,EAAGztE,EAAI,EACdmU,EAAK0qD,OAAO4O,EAAGztE,EAAGmtE,GAAMtO,OAAO,EAAGsO,GAElCh5D,EAAK0qD,OAAO4O,EAAGztE,EAAGmtE,GAAMtO,OAAO4O,EAAGztE,EAAG,GAEzCjX,EAAKmoB,OAAOiD,EAAKqmC,SAjErB,KAAI2yB,GAAQ,GAAZ,CAGA,GAAIh5D,GAAMprB,EAAO,GAAIq1E,GACrBkC,IAAav3E,EAAMyyE,GACnBr6C,EAAMjQ,OAAOnoB,GACb6/E,GAAe0E,GACf1E,GAAe2E,GACfp5D,EAAO,GAAIu3D,KACPC,MAAQtpB,MAAOA,GACfupB,OAAQ,OAEZ7iF,EAAKmoB,OAAOiD,GACZA,EAAKZ,OAAO+5D,EAAGttE,EAAI10B,KAAKnG,IAAImoG,EAAGttE,EAAGotE,GAAS,EAAG,GAAGvO,OAAO3tE,GAAOq8E,EAAGvtE,EAAI10B,KAAKnG,IAAIooG,EAAGvtE,EAAGqtE,GAAU,GAAI,GAAGxO,OAAO3tE,EAAM5lB,KAAKnG,IAAIooG,EAAGvtE,EAAGqtE,GAASF,GAAMtO,OAAOvzF,KAAKnG,IAAImoG,EAAGttE,EAAGotE,GAAQD,GAAM3yB,QACjL8yB,EAAGttE,GACHwtE,EAAgBJ,EAAOE,MAEnB,EACA,EACA,EACAA,EAAGttE,EACH,IAGJutE,EAAGvtE,GACHwtE,EAAgBH,EAAQE,GACpB,EACA,EACA,EACA,EACAr8E,EAAMq8E,EAAGvtE,EACT,KAqCZ,QAAS2tE,GAAen9D,GAAxB,GAKY2D,GAOC3sC,EAXLomG,EAAa,GAAIxP,GAWrB,KAVAmL,GAAYqE,EAAYvC,GAAS76D,EAAK86D,EAAMC,EAAMC,EAAMC,IACxDtqD,EAAMjQ,OAAO08D,GACTC,IACI15D,EAAO,GAAIu3D,KACXC,MAAQtpB,MAAOwrB,EAAgBrhB,aAC/Bof,OAAQ,OAEZz3D,EAAKZ,OAAO/C,EAAIprC,KAAMorC,EAAIxkC,KAAK6yF,OAAOruD,EAAInrC,MAAOmrC,EAAIxkC,KAAK6yF,OAAOruD,EAAInrC,MAAOmrC,EAAIlrC,QAAQu5F,OAAOruD,EAAIprC,KAAMorC,EAAIlrC,QAAQk1E,QACrHozB,EAAW18D,OAAOiD,IAEb3sC,EAAIsmG,EAAgBzpG,SAAUmD,GAAK,GACxCumG,EAAkBH,EAAYp9D,EAAKs9D,EAAgBtmG,GAAIwmG,EAAiBxmG,EAAIwmG,EAAiB3pG,QAAS4pG,EAAmBzmG,EAAIymG,EAAmB5pG,QAAS6pG,EAAiB1mG,EAAI0mG,EAAiB7pG,QAAS8pG,EAAe3mG,EAAI2mG,EAAe9pG,SAGlP,QAAS0pG,GAAkB5sD,EAAO3Q,EAAKo9D,EAAYI,EAAkBC,EAAoBC,EAAkBC,GAmBvG,QAASC,GAAoBjtD,EAAO3Q,EAAK69D,EAAWC,EAAYC,GAyE5D,QAASC,KACL,KAAOjiC,EAAKp8B,OAAOnQ,EAAIwQ,EAAIprC,MACvBmnE,EAAKp8B,OAAOnQ,GAAKquE,EAGzB,QAASI,KACL,KAAOliC,EAAKp8B,OAAOpyB,EAAIyyB,EAAIxkC,KACvBugE,EAAKp8B,OAAOpyB,GAAKuwF,EAGzB,QAASI,KACL,KAAOniC,EAAKp8B,OAAOnQ,EAAIwQ,EAAInrC,OACvBkpG,EAASptD,EAAOorB,EAAK1jE,SACrB0jE,EAAKp8B,OAAOnQ,GAAKquE,EAtF7B,GAC+CprG,GAkB/BwH,EAeRsyE,EAgCAxQ,EAqCIp8B,EAtGJw+D,EAAeN,EAAYC,EAC3BM,EAASp+D,CAiCb,QAhCwB,eAApB09D,GACAU,EAASn+D,GAASm+D,EAAQ,iBAAkBpqG,GAC5CoqG,EAASn+D,GAASm+D,EAAQ,YAAapqG,IACZ,eAApB0pG,IACPU,EAASn+D,GAASm+D,EAAQ,iBAAkBpqG,IAE3C,yBAAyBoC,KAAKunG,KACT,WAAlBA,GACAlrG,EAAIqI,KAAKoT,IAAIkwF,EAAOlpG,MAAQ2oG,EAAWO,EAAOjpG,OAAS2oG,GACvDD,GAAaprG,EACbqrG,GAAcrrG,GACW,SAAlBkrG,GACPlrG,EAAIqI,KAAKnG,IAAIypG,EAAOlpG,MAAQ2oG,EAAWO,EAAOjpG,OAAS2oG,GACvDD,GAAaprG,EACbqrG,GAAcrrG,IAEVwH,EAAO0jG,EAAezqG,MAAM,QAE5B2qG,EADA,KAAKznG,KAAK6D,EAAK,IACHmkG,EAAOlpG,MAAQmJ,WAAWpE,EAAK,IAAM,IAErCoE,WAAWpE,EAAK,IAG5B6jG,EADe,GAAf7jG,EAAKpG,QAA0B,QAAXoG,EAAK,GACZ4jG,EAAYM,EAClB,KAAK/nG,KAAK6D,EAAK,IACTmkG,EAAOjpG,OAASkJ,WAAWpE,EAAK,IAAM,IAEtCoE,WAAWpE,EAAK,MAIrCsyE,EAAakxB,EAAPt3F,IAEV,IAAK,SACDomE,EAAM,UACN,MACJ,KAAK,MACDA,EAAM,OACN,MACJ,KAAK,OACDA,EAAM,OACN,MACJ,KAAK,QACDA,EAAM,UACN,MACJ,KAAK,SACDA,EAAM,UAwCV,GArCAA,EAAMA,EAAIr5E,MAAM,OACE,GAAdq5E,EAAI14E,SACJ04E,EAAI,GAAK,OAGTA,EAAI,GADJ,KAAKn2E,KAAKm2E,EAAI,IACLluE,WAAWkuE,EAAI,IAAM,KAAO6xB,EAAOlpG,MAAQ2oG,GAE3Cx/F,WAAWkuE,EAAI,IAGxBA,EAAI,GADJ,KAAKn2E,KAAKm2E,EAAI,IACLluE,WAAWkuE,EAAI,IAAM,KAAO6xB,EAAOjpG,OAAS2oG,GAE5Cz/F,WAAWkuE,EAAI,IAExBxQ,EAAO,GAAIktB,KACXmV,EAAOxpG,KAAO23E,EAAI,GAClB6xB,EAAO5iG,IAAM+wE,EAAI,KAEjBsxB,EACAC,IAkBoB,aAApBN,EACAO,EAASptD,EAAOorB,OACb,IAAwB,YAApByhC,EACPQ,IACAE,QACG,IAAwB,YAApBV,EAEP,IADAS,IACOliC,EAAKp8B,OAAOpyB,EAAIyyB,EAAIlrC,QACvBipG,EAASptD,EAAOorB,EAAK1jE,SACrB0jE,EAAKp8B,OAAOpyB,GAAKuwF,MAElB,IAAwB,UAApBN,EAIP,IAHAQ,IACAC,IACIt+D,EAASo8B,EAAKp8B,OAAOtnC,QAClB0jE,EAAKp8B,OAAOpyB,EAAIyyB,EAAIlrC,QACvBinE,EAAKp8B,OAAOnQ,EAAImQ,EAAOnQ,EACvB0uE,IACAniC,EAAKp8B,OAAOpyB,GAAKuwF,EA7H7B,GAAKV,GAA4B,QAAdA,EAGnB,GAAuB,OAAnBA,EAAWhiG,KAAe,CAC1B,GAAI,2BAA2BhF,KAAKgnG,EAAW79E,KAC3C,MAEJ,IAAIg3E,GAAMI,GAAYyG,EAAW79E,IAC7Bg3E,IAAOA,EAAIrhG,MAAQ,GAAKqhG,EAAIphG,OAAS,GACrCyoG,EAAoBjtD,EAAO3Q,EAAKu2D,EAAIrhG,MAAOqhG,EAAIphG,OAAQ,SAAUw7C,EAAOorB,GACpEprB,EAAMjQ,OAAO,GAAI29D,IAAQjB,EAAW79E,IAAKw8C,UAG9C,CAAA,GAAuB,UAAnBqhC,EAAWhiG,KAGlB,MAFAwiG,GAAoBjtD,EAAO3Q,EAAKA,EAAI9qC,MAAO8qC,EAAI7qC,OAAQmpG,GAAiBlB,KAoHhF,QAASmB,KAML,QAASC,GAAY/rG,GACjBylG,GAAUlkG,EAAS,WACfA,EAAQ+B,MAAMG,SAAW,UACzB,IAAIuoG,GAASzqG,EAAQ+kE,cAAchlD,cAAcgoF,GACjD0C,GAAO1oG,MAAMG,SAAW,WACxBuoG,EAAO1oG,MAAMM,UAAY,aACA,WAArBqoG,GACAD,EAAO1oG,MAAMb,MAAQ,MACrBupG,EAAO1oG,MAAMnB,KAAO,SACpB6pG,EAAO1oG,MAAM4oG,UAAY,SAEzBF,EAAO1oG,MAAMnB,KAAO,MAExBnC,EAAEgsG,GACFzqG,EAAQ+5D,aAAa0wC,EAAQzqG,EAAQ+4C,YACrCwjD,GAAckO,EAAQ9tD,GACtB38C,EAAQqgB,YAAYoqF,KAG5B,QAASG,GAAansG,GAAtB,GAMauE,GALL8H,EAAI9K,EAAQ6mB,WAAWhkB,SACvB8O,EAAI3R,EAAQkK,aAAa,oBAC7B,IAAS,MAALyH,EACA,MAAOlT,GAAM,EAAJkT,EAAO7G,EAAEjL,OAEtB,KAASmD,EAAI,EAAGA,EAAI8H,EAAEjL,SAAUmD,EAC5B,GAAI8H,EAAE9H,KAAOhD,EACT,MAAOvB,GAAEuE,EAAG8H,EAAEjL,QAjC9B,GAKQ6qG,GAJAG,EAAgB9kG,GAAiBhE,EAAO,kBAC5C,IAAqB,QAAjB8oG,EAmCJ,OAhCIH,EAAoB3kG,GAAiBhE,EAAO,uBAgCxC8oG,GACR,IAAK,SACL,IAAK,OACL,IAAK,SACDL,EAAY,SAAUC,GAClBA,EAAO1oG,MAAM+oG,SAAW,MACxBL,EAAO1oG,MAAMgpG,WAAa,OAC1BN,EAAO1oG,MAAM69F,aAAe,QAC5B6K,EAAO1oG,MAAMipG,WAAa,eAC1BP,EAAOxqF,WACHgrF,KAAQ,IACRC,OAAU,IACVC,OAAU,KACZN,IAEN,MACJ,KAAK,UACL,IAAK,uBACDL,EAAY,SAAUC,GAClBG,EAAa,SAAU/kG,KACjBA,EACmB,wBAAjBglG,GAA2ChlG,EAAM,KACjDA,EAAM,IAAMA,GAEhB4kG,EAAOxqF,UAAYpa,EAAM,OAGjC,MACJ,KAAK,cACL,IAAK,cACD2kG,EAAY,SAAUC,GAClBG,EAAa,SAAU/kG,GACnBA,EAAM4lF,EAAc5lF,EAAM,GACL,eAAjBglG,IACAhlG,EAAMA,EAAIT,eAEdqlG,EAAOxqF,UAAYpa,EAAM,OAGjC,MACJ,KAAK,cACL,IAAK,cACL,IAAK,cACL,IAAK,cACD2kG,EAAY,SAAUC,GAClBG,EAAa,SAAU/kG,GACnBA,EAAMq9F,GAAar9F,GACf,UAAUzD,KAAKyoG,KACfhlG,EAAMA,EAAIT,eAEdqlG,EAAOxqF,UAAYpa,EAAM,SAMzC,QAASulG,GAAWp/D,EAAK4xD,EAASyN,GAkF9B,QAASC,GAAI5tB,GACT,OACIliD,EAAGkiD,EAAEnkE,EACLA,EAAGmkE,EAAEliD,GArFjB,GAKQ+vE,GACAC,EAQY77D,EA+CZrE,EACAg6D,EACAC,EACAC,EACAC,CAhEJ,IAAkB,IAAdz5D,EAAI9qC,OAA8B,IAAf8qC,EAAI7qC,SAG3BgoG,EAAen9D,GACXu/D,EAAiB3qG,EAAKM,MAAQ,IAAM08F,GAAkB,OAAPpmE,GAAgB6zE,GAAiB,OAAP7zE,GACzEg0E,EAAkB3qG,EAAMK,MAAQ,IAAMmqG,GAAiB,OAAP7zE,GAAgBomE,GAAkB,OAAPpmE,GAC7D,IAAdhwB,EAAItG,OAA8B,IAAfN,EAAKM,OAA+B,IAAhBL,EAAMK,OAAgC,IAAjBJ,EAAOI,OAAvE,CAGA,GAAIsG,EAAIq2E,OAASh9E,EAAMg9E,OAASr2E,EAAIq2E,OAAS/8E,EAAO+8E,OAASr2E,EAAIq2E,OAASj9E,EAAKi9E,OACvEr2E,EAAItG,OAASL,EAAMK,OAASsG,EAAItG,OAASJ,EAAOI,OAASsG,EAAItG,OAASN,EAAKM,OACvEqqG,GAAkBC,EAQlB,MAPAx/D,GAAMC,GAASD,EAAKxkC,EAAItG,MAAQ,GAC5ByuC,EAAO22D,GAAgBtmG,EAASgsC,EAAKxkC,EAAItG,MAAQ,GACrDyuC,EAAKrnC,QAAQ8+F,QACTvpB,MAAOr2E,EAAIq2E,MACX38E,MAAOsG,EAAItG,WAEfy7C,GAAMjQ,OAAOiD,EAKzB,IAAe,IAAXm3D,EAAKtrE,GAAsB,IAAXurE,EAAKvrE,GAAsB,IAAXwrE,EAAKxrE,GAAsB,IAAXyrE,EAAKzrE,GACjDh0B,EAAItG,MAAQ,GAAKN,EAAKM,MAAQ,GAAKL,EAAMK,MAAQ,GAAKJ,EAAOI,MAAQ,EAiCrE,MAhCIsG,GAAItG,MAAQ,GACZy7C,EAAMjQ,OAAO,GAAIw6D,KACbE,QACIlmG,MAAOsG,EAAItG,MACX28E,MAAOr2E,EAAIq2E,SAEhB9uC,OAAO/C,EAAIprC,KAAMorC,EAAIxkC,IAAMA,EAAItG,MAAQ,GAAGm5F,OAAOruD,EAAInrC,MAAOmrC,EAAIxkC,IAAMA,EAAItG,MAAQ,IAErFJ,EAAOI,MAAQ,GACfy7C,EAAMjQ,OAAO,GAAIw6D,KACbE,QACIlmG,MAAOJ,EAAOI,MACd28E,MAAO/8E,EAAO+8E,SAEnB9uC,OAAO/C,EAAIprC,KAAMorC,EAAIlrC,OAASA,EAAOI,MAAQ,GAAGm5F,OAAOruD,EAAInrC,MAAOmrC,EAAIlrC,OAASA,EAAOI,MAAQ,IAEjGqqG,GACA5uD,EAAMjQ,OAAO,GAAIw6D,KACbE,QACIlmG,MAAON,EAAKM,MACZ28E,MAAOj9E,EAAKi9E,SAEjB9uC,OAAO/C,EAAIprC,KAAOA,EAAKM,MAAQ,EAAG8qC,EAAIxkC,KAAK6yF,OAAOruD,EAAIprC,KAAOA,EAAKM,MAAQ,EAAG8qC,EAAIlrC,cAEpF0qG,GACA7uD,EAAMjQ,OAAO,GAAIw6D,KACbE,QACIlmG,MAAOL,EAAMK,MACb28E,MAAOh9E,EAAMg9E,SAElB9uC,OAAO/C,EAAInrC,MAAQA,EAAMK,MAAQ,EAAG8qC,EAAIxkC,KAAK6yF,OAAOruD,EAAInrC,MAAQA,EAAMK,MAAQ,EAAG8qC,EAAIlrC,SAKhGwqC,GAAM+5D,GAAyBr5D,EAAK86D,EAAMC,EAAMC,EAAMC,GACtD3B,EAAMh6D,EAAI46D,GACVX,EAAMj6D,EAAI66D,GACVX,EAAMl6D,EAAI86D,GACVX,EAAMn6D,EAAI+6D,GACdqC,EAASlhG,EAAIq2E,MAAO7xC,EAAI9qC,MAAOsG,EAAItG,MAAON,EAAKM,MAAOL,EAAMK,MAAOokG,EAAKC,GACpE,EACA,EACA,EACA,EACAv5D,EAAIprC,KACJorC,EAAIxkC,MAERkhG,EAAS5nG,EAAO+8E,MAAO7xC,EAAI9qC,MAAOJ,EAAOI,MAAOL,EAAMK,MAAON,EAAKM,MAAOskG,EAAKC,MAE1E,EACA,KAEAz5D,EAAInrC,MACJmrC,EAAIlrC,SAQR4nG,EAAS9nG,EAAKi9E,MAAO7xC,EAAI7qC,OAAQP,EAAKM,MAAOJ,EAAOI,MAAOsG,EAAItG,MAAOoqG,EAAI7F,GAAM6F,EAAIhG,IAChF,KAEA,EACA,EACAt5D,EAAIprC,KACJorC,EAAIlrC,SAER4nG,EAAS7nG,EAAMg9E,MAAO7xC,EAAI7qC,OAAQN,EAAMK,MAAOsG,EAAItG,MAAOJ,EAAOI,MAAOoqG,EAAI/F,GAAM+F,EAAI9F,IAClF,EACA,KAEA,EACAx5D,EAAInrC,MACJmrC,EAAIxkC,OA1hBhB,GAaQ8hG,GACAE,EACAC,EACAC,EACAC,EAIA8B,EAkBArD,EAAOplG,EAAG27C,EACV18C,EAkBQimF,EAzDRnmF,EAAQ4D,GAAiB3F,GACzBwH,EAAMw8F,GAAUjiG,EAAO,OACvBlB,EAAQmjG,GAAUjiG,EAAO,SACzBjB,EAASkjG,GAAUjiG,EAAO,UAC1BnB,EAAOojG,GAAUjiG,EAAO,QACxB+kG,EAAO3C,GAAgBpiG,EAAO,YAC9BglG,EAAO5C,GAAgBpiG,EAAO,aAC9BklG,EAAO9C,GAAgBpiG,EAAO,eAC9BilG,EAAO7C,GAAgBpiG,EAAO,gBAC9By1B,EAAMzxB,GAAiBhE,EAAO,aAC9BsnG,EAAkBtjG,GAAiBhE,EAAO,mBA8B9C,IA7BAsnG,EAAkBhH,GAAagH,GAC3BC,EAAkBxG,GAAqB/8F,GAAiBhE,EAAO,qBAC/DynG,EAAmBtI,GAAcn7F,GAAiBhE,EAAO,sBACzD0nG,EAAqBvI,GAAcn7F,GAAiBhE,EAAO,wBAC3D2nG,EAAmBxI,GAAcn7F,GAAiBhE,EAAO,sBACzD4nG,EAAiBzI,GAAcn7F,GAAiBhE,EAAO,oBACvDP,GAAQiB,MAAQjB,GAAQmB,QAAU,KAClC8mG,EAAqBvI,GAAclhG,EAAQgG,aAAayjG,qBAExDgC,EAAWx/D,GAASjsC,EAAQ0tF,wBAAyB,iBAAkB1tF,GAC1E,WAAA,GAIW8K,GACAtD,EACA3G,EACAC,EACAF,EACA0qC,EACA05D,EATJv4D,EAAO1mC,GAAiBhE,EAAO,QAC/BkX,EAAI,uBAAuB1B,KAAKk1B,EAChCxzB,KACInO,EAAImO,EAAE,GAAG/Z,MAAM,UACfsI,EAAc,QAARsD,EAAE,GAAe2gG,EAASjkG,IAAM6C,WAAWS,EAAE,IAAM2gG,EAASjkG,IAClE3G,EAAgB,QAARiK,EAAE,GAAe2gG,EAAS5qG,MAAQwJ,WAAWS,EAAE,IAAM2gG,EAAS7qG,KACtEE,EAAiB,QAARgK,EAAE,GAAe2gG,EAAS3qG,OAASuJ,WAAWS,EAAE,IAAM2gG,EAASjkG,IACxE5G,EAAe,QAARkK,EAAE,GAAe2gG,EAAS7qG,KAAOyJ,WAAWS,EAAE,IAAM2gG,EAAS7qG,KACpE0qC,EAAM,GAAIsuD,IACVoL,GAAW,GAAIkC,KAAOn4D,OAAOnuC,EAAM4G,GAAK6yF,OAAOx5F,EAAO2G,GAAK6yF,OAAOx5F,EAAOC,GAAQu5F,OAAOz5F,EAAME,GAAQk1E,QAC1G+uB,GAAYz5D,EAAK05D,GACjBroD,EAAMjQ,OAAOpB,GACbqR,EAAQrR,EACRi4D,GAAcyB,OAIlB/iG,EAAU8D,GAAiBhE,EAAO,WACvB,aAAXE,EAEA,IADAmmG,KACKplG,EAAI,EAAG27C,EAAQ3+C,EAAQ6C,SAAUG,EAAI27C,EAAM9+C,SAAUmD,EACtDolG,EAAMp4F,KAAK2uC,EAAM37C,GAAG0qF,6BAGxB0a,GAAQpoG,EAAQ0rG,iBACI,GAAhBtD,EAAMvoG,SACNuoG,GAASpoG,EAAQ0tF,yBAIzB,KADA0a,EAAQD,EAAYC,GACfplG,EAAI,EAAGA,EAAIolG,EAAMvoG,SAAUmD,EAC5BooG,EAAWhD,EAAMplG,GAAU,IAANA,EAASA,GAAKolG,EAAMvoG,OAAS,EA4CtD,OA1CuB,KAAnBG,EAAQwsB,SAAkBxsB,EAAQyL,OAAS,OAAOrJ,KAAKpC,EAAQkK,aAAa,WACvE6xF,GAASM,aAAgBrgF,GAAQhc,EAAS+7F,GAASM,eAChDnU,EAAIziF,SAAS+3B,cACjB0qD,EAAEgX,mBAAmBl/F,GACrBs7F,GAAQpT,EAAEwjB,kBAAkBxqE,QAAQ,SAAU8K,GAC1C,GAAIjnC,GAAI,GAAI60F,GACZ70F,GAAE4mG,UACEpgF,IAAKvrB,EAAQyL,KACbjE,IAAKwkC,EAAIxkC,IACT3G,MAAOmrC,EAAInrC,MACXC,OAAQkrC,EAAIlrC,OACZF,KAAMorC,EAAIprC,MAEd+7C,EAAMjQ,OAAO3nC,OAIrBqjG,EAAMvoG,OAAS,GAAgB,aAAXoC,IAA2BjC,EAAQkK,aAAa,oBACpEqgG,EAAWnC,EAAM,IAEpB,WACG,QAASwD,KAAT,GACQ5G,GAAWsB,GAAgBtmG,EAASyrG,EAAU,WAC9CngE,EAAM,GAAIsuD,GACdmL,IAAYz5D,EAAK05D,GACjBroD,EAAMjQ,OAAOpB,GACbqR,EAAQrR,EACRi4D,GAAcyB,GAEd6G,GAAY7rG,GACZ4rG,IACO,wBAAwBxpG,KAAK2D,GAAiBhE,EAAO,aAC5D6pG,IACO,wBAAwBxpG,KAAK2D,GAAiBhE,EAAO,eAC5D6pG,IACO,wBAAwBxpG,KAAK2D,GAAiBhE,EAAO,gBAC5D6pG,OAGHE,GAAkB9rG,EAAS28C,IAC5BovD,GAAe/rG,EAAS28C,GAErBA,EA4bX,QAAS2tD,IAAiB3P,GACtB,MAAO,UAAUh+C,EAAOorB,GAAjB,GAIKwpB,GAsCAya,EACAC,EACA7b,EAA6BD,EAC7BzjE,EACA8O,EACAjiB,EAKA2yF,EAAerrG,EACf+5F,EA8BAzjF,EAIAvX,EAtFJsB,EAAQ6mE,EAAK7mE,QAASC,EAAS4mE,EAAK5mE,QACxC,QAAQw5F,EAASvzF,MACjB,IAAK,SAED,OADImqF,EAA0B,MAAlBoJ,EAASpJ,MAAgBoJ,EAASpJ,MAAQzqF,KAAKswF,GACnDuD,EAASrlE,IACjB,IAAK,MACDi8D,EAAQ,CACR,MACJ,KAAK;AACDA,GAASzqF,KAAKswF,GAAK,CACnB,MACJ,KAAK,SACD7F,EAAQzqF,KAAKswF,EACb,MACJ,KAAK,QACD7F,EAAQzqF,KAAKswF,GAAK,CAClB,MACJ,KAAK,WACL,IAAK,WACD7F,GAASzqF,KAAK87B,MAAMzhC,EAAQD,EAC5B,MACJ,KAAK,YACL,IAAK,YACDqwF,EAAQzqF,KAAK87B,MAAMzhC,EAAQD,EAC3B,MACJ,KAAK,cACL,IAAK,cACDqwF,EAAQzqF,KAAKswF,GAAKtwF,KAAK87B,MAAMzhC,EAAQD,EACrC,MACJ,KAAK,eACL,IAAK,eACDqwF,EAAQzqF,KAAKswF,GAAKtwF,KAAK87B,MAAMzhC,EAAQD,GAGrCy5F,EAASnyF,UACT+oF,GAASzqF,KAAKswF,IAElB7F,GAAS,EAAIzqF,KAAKswF,GACd7F,EAAQ,IACRA,GAAS,EAAIzqF,KAAKswF,IAElB4U,EAAQllG,KAAKC,IAAI7F,EAAQ4F,KAAKspF,IAAImB,IAAUzqF,KAAKC,IAAI5F,EAAS2F,KAAKqpF,IAAIoB,IACvE0a,EAAcnlG,KAAKqlG,KAAKjrG,EAAQ4F,KAAKggF,IAAIyK,GAASpwF,GAClDivF,EAAMtpF,KAAKspF,IAAI6b,GAAc9b,EAAMrpF,KAAKqpF,IAAI8b,GAC5Cv/E,EAAM5lB,KAAKC,IAAIqpF,GAAOtpF,KAAKC,IAAIopF,GAC/B30D,EAAI9O,EAAM,EAAI0jE,EACd72E,EAAImT,EAAM,EAAIyjE,EACdoB,EAAQzqF,KAAKswF,GAAK,GAAK7F,GAAS,EAAIzqF,KAAKswF,GAAK,IAC9C57D,GAAKA,EACLjiB,GAAKA,GAEL2yF,KAAerrG,EAAQ,EACvB+5F,EAAQD,EAASC,MAAM1/E,IAAI,SAAU/B,EAAGnW,GAAb,GAWvBklB,GAVA5gB,EAAS6R,EAAE1B,OA2Bf,OA1BInQ,GACAA,EAAS+C,WAAW/C,GAAU,IACvB6R,EAAEtZ,OACTyH,EAAS+C,WAAW8O,EAAEtZ,QAAUmsG,EACnB,IAANhpG,EACPsE,EAAS,EACFtE,GAAK23F,EAASC,MAAM/6F,OAAS,IACpCyH,EAAS,GAET4gB,GACA21D,MAAO1kE,EAAE0kE,MAAMmK,YACf1gF,OAAQA,GAEE,MAAVA,GACAzG,EAAQyG,EACR4kG,EAAShrE,QAAQ,SAAU/nB,EAAGnW,GAC1B,GAAIklB,GAAO/O,EAAE+O,IACbA,GAAK5gB,OAAS6R,EAAEvY,MAAQC,EAAQsY,EAAEvY,OAASoC,EAAI,IAAMkpG,EAASrsG,OAAS,KAE3EqsG,MAEAA,EAASl8F,MACLpP,KAAMC,EACNqnB,KAAMA,IAGPA,IAEP/Q,GACA,GAAMqkB,EACN,GAAMjiB,GAEN3Z,GACA,GAAM47B,EACN,GAAMjiB,GAEVojC,EAAMjQ,OAAOw6D,GAAKkF,SAASrkC,GAAMq/B,OAAO,MAAMD,KAAK,GAAIkF,KACnDl1F,MAAOA,EACPvX,IAAKA,EACLg7F,MAAOA,EACP0R,WAAW,KAEf,MACJ,KAAK,SACG1tG,OAAOiuB,SAAWjuB,OAAOiuB,QAAQE,KACjCnuB,OAAOiuB,QAAQE,IAAI,6DAMnC,QAAS++E,IAAkB9rG,EAAS28C,GAApC,GACQ4vD,GAIIrhG,EAYJshG,EAEArY,CALJ,OAZIn0F,GAAQysG,mBACRF,EAASvsG,EAAQysG,qBACV7tG,OAAOuB,OAASvB,OAAOuB,MAAM8sB,QAAUjtB,EAAQkK,aAAatL,OAAOuB,MAAMiL,KAAK,WACjFF,EAAStM,OAAOuB,MAAM0vB,eAAejxB,OAAOuB,MAAM8sB,OAAOjtB,IACzDkL,IAAWA,EAAOwhG,iBAAmBxhG,EAAOyhG,gBAExCJ,EADArhG,EAAOwhG,gBACExhG,EAAOwhG,kBAEPxhG,EAAOyhG,mBAIvBJ,IAGDC,EAAU,GAAI5S,IAClB4S,EAAQ3pG,SAASmN,KAAKu8F,GAClBpY,EAAOn0F,EAAQ0tF,wBACnB8e,EAAQjqE,UAAUA,IAAYoD,UAAUwuD,EAAKvzF,KAAMuzF,EAAK3sF,MACxDm1C,EAAMjQ,OAAO8/D,IACN,GAEX,QAASI,IAAY5sG,EAASurB,EAAKoxB,GAAnC,GACQ3Q,GAAMq4D,GAAcrkG,GACpB+nE,EAAO,GAAIktB,KACXjpD,EAAIprC,KACJorC,EAAIxkC,MAEJwkC,EAAI9qC,MACJ8qC,EAAI7qC,SAEJi6F,EAAQ,GAAIiP,IAAQ9+E,EAAKw8C,EAC7Bg9B,IAAY3J,EAAOkL,GAAgBtmG,EAASgsC,EAAK,YACjD2Q,EAAMjQ,OAAO0uD,GAEjB,QAASyR,IAAW/hG,EAAGC,GAAvB,GACQ+hG,GAAKnnG,GAAiBmF,GACtBiiG,EAAKpnG,GAAiBoF,GACtBiiG,EAAK3iG,WAAWtE,GAAiB+mG,EAAI,YACrCG,EAAK5iG,WAAWtE,GAAiBgnG,EAAI,YACrCG,EAAKnnG,GAAiB+mG,EAAI,YAC1BnG,EAAK5gG,GAAiBgnG,EAAI,WAC9B,OAAInvF,OAAMovF,IAAOpvF,MAAMqvF,GACf,kBAAkB7qG,KAAK8qG,IAAO,kBAAkB9qG,KAAKukG,GAC9C,EAED,UAANuG,KAGM,UAANvG,EACO,EAEJ,EAEP/oF,MAAMovF,GACQ,IAAPC,EAAW,EAAIA,EAAK,KAAS,EAEpCrvF,MAAMqvF,GACQ,IAAPD,EAAW,EAAIA,EAAK,EAAI,KAE5B3iG,WAAW2iG,GAAM3iG,WAAW4iG,GAEvC,QAASpB,IAAY7rG,GACjB,MAAO,+BAA+BoC,KAAKpC,EAAQwsB,SAEvD,QAAS2gF,IAAkBntG,GACvB,MAAIA,GAAQotG,iBAAmBptG,EAAQotG,gBAAgBvtG,OAAS,EACrDG,EAAQotG,gBAAgB,GAE5BptG,EAAQsI,QAAQtI,EAAQi6D,eAEnC,QAASozC,IAAertG,EAAS28C,GAAjC,GACQ56C,GAAQ4D,GAAiB3F,GACzB69E,EAAQ93E,GAAiBhE,EAAO,SAChCiqC,EAAMhsC,EAAQ0tF,uBACE,aAAhB1tF,EAAQoH,MACRu1C,EAAMjQ,OAAOw6D,GAAKkF,SAAS,GAAInX,KAC3BjpD,EAAIprC,KAAO,EACXorC,EAAIxkC,IAAM,IAEVwkC,EAAI9qC,MAAQ,EACZ8qC,EAAI7qC,OAAS,KACbimG,OAAOvpB,EAAO,IACd79E,EAAQg6D,SACRrd,EAAMjQ,QAAO,GAAIw6D,KAAOE,OAAOvpB,EAAO,KAAK9uC,OAAO/C,EAAIprC,KAAO,IAAOorC,EAAI9qC,MAAO8qC,EAAIxkC,IAAM,IAAOwkC,EAAI7qC,QAAQk5F,OAAOruD,EAAIprC,KAAO,IAAOorC,EAAI9qC,MAAO8qC,EAAIxkC,IAAM,IAAOwkC,EAAI7qC,QAAQk5F,OAAOruD,EAAIprC,KAAO,IAAOorC,EAAI9qC,MAAO8qC,EAAIxkC,IAAM,IAAOwkC,EAAI9qC,UAG1Oy7C,EAAMjQ,OAAO,GAAI4gE,IAAO,GAAIC,MACvBvhE,EAAIprC,KAAOorC,EAAInrC,OAAS,GACxBmrC,EAAIxkC,IAAMwkC,EAAIlrC,QAAU,GAC1BgG,KAAKoT,IAAI8xB,EAAI9qC,MAAQ,EAAG8qC,EAAI7qC,OAAS,GAAK,IAAIimG,OAAOvpB,EAAO,IAC3D79E,EAAQg6D,SACRrd,EAAMjQ,OAAO,GAAI4gE,IAAO,GAAIC,MACvBvhE,EAAIprC,KAAOorC,EAAInrC,OAAS,GACxBmrC,EAAIxkC,IAAMwkC,EAAIlrC,QAAU,GAC1BgG,KAAKoT,IAAI8xB,EAAI9qC,MAAQ,EAAG8qC,EAAI7qC,OAAS,GAAK,IAAIgmG,KAAKtpB,GAAOupB,OAAO,QAIhF,QAASoG,IAAgBxtG,EAAS28C,GAAlC,GAKQ+gC,GACA+gB,EACA93F,EACAqD,EAUahH,EAjBbw6F,EAAMx9F,EAAQwsB,QAAQxnB,aAC1B,IAAW,SAAPw4F,IAAmC,YAAhBx9F,EAAQoH,MAAsC,SAAhBpH,EAAQoH,MACzD,MAAOimG,IAAertG,EAAS28C,EAanC,IAXI+gC,EAAI19E,EAAQ6mB,WACZ43E,EAAMz+F,EAAQ+kE,cACdp+D,EAAK83F,EAAI1+E,cAAcgoF,IAE3BphG,EAAG5E,MAAMie,QAAUynF,GAAW9hG,GAAiB3F,IACpC,SAAPw9F,IACA72F,EAAG5E,MAAM0rG,WAAa,OAEf,UAAPjQ,GAA0B,YAAPA,IACnB72F,EAAG5E,MAAMsE,SAAW,QAEb,UAAPm3F,EACA,GAAIx9F,EAAQsqC,SACR,IAAStnC,EAAI,EAAGA,EAAIhD,EAAQsI,QAAQzI,SAAUmD,EAC1CgH,EAASy0F,EAAI1+E,cAAcgoF,IAC3B/9F,EAAOjI,MAAMie,QAAUynF,GAAW9hG,GAAiB3F,EAAQsI,QAAQtF,KACnEgH,EAAOjI,MAAME,QAAU,QACvB+H,EAAOuwB,YAAcv6B,EAAQsI,QAAQtF,GAAGu3B,YACxC5zB,EAAGwZ,YAAYnW,OAGnBA,GAASmjG,GAAkBntG,GACvBgK,IACArD,EAAG4zB,YAAcvwB,EAAOuwB,iBAIhC5zB,GAAG4zB,YAAcv6B,EAAQ8F,KAE7B43E,GAAE3jB,aAAapzD,EAAI3G,GACnB2G,EAAGL,WAAatG,EAAQsG,WACxBK,EAAGkB,UAAY7H,EAAQ6H,UACvB7H,EAAQ+B,MAAME,QAAU,OACxB8pG,GAAeplG,EAAIg2C,GACnB38C,EAAQ+B,MAAME,QAAU,GACxBy7E,EAAEr9D,YAAY1Z,GAElB,QAASolG,IAAe/rG,EAAS28C,GAAjC,GAoBY95C,GAAe6qG,EAAarmG,EACvBrE,EAQGjB,EACA4rG,EACAzrG,CA3BhB,QAHI65F,GAASK,iBAAiBp8F,UAAYA,IACtC+7F,GAASK,iBAAiBz/C,MAAQA,GAE9B38C,EAAQwsB,QAAQxnB,eACxB,IAAK,MACD4nG,GAAY5sG,EAASA,EAAQy8E,IAAK9/B,EAClC,MACJ,KAAK,SACD,IACIiwD,GAAY5sG,EAASA,EAAQ4tG,UAAU,aAAcjxD,GACvD,MAAOmkD,IAET,KACJ,KAAK,WACL,IAAK,QACL,IAAK,SACD0M,GAAgBxtG,EAAS28C,EACzB,MACJ,SAEI,IADI95C,KAAe6qG,KAAarmG,KACvBrE,EAAIhD,EAAQ+4C,WAAY/1C,EAAGA,EAAIA,EAAEg2C,YACtC,OAAQh2C,EAAEssB,UACV,IAAK,GACG,KAAKltB,KAAKY,EAAEU,OACZmqG,GAAW7tG,EAASgD,EAAG25C,EAE3B,MACJ,KAAK,GACG56C,EAAQ4D,GAAiB3C,GACzB2qG,EAAW5nG,GAAiBhE,EAAO,SACnCG,EAAW6D,GAAiBhE,EAAO,YACvB,UAAZG,EACAmF,EAAW2I,KAAKhN,GACG,QAAZ2qG,EACPD,EAAO19F,KAAKhN,GAEZH,EAASmN,KAAKhN,GAK1BiqF,EAAUpqF,EAAUgqG,IAAY3rE,QAAQ,SAAUv6B,GAC9C41F,GAAc51F,EAAIg2C,KAEtBswC,EAAUygB,EAAQb,IAAY3rE,QAAQ,SAAUv6B,GAC5C41F,GAAc51F,EAAIg2C,KAEtBswC,EAAU5lF,EAAYwlG,IAAY3rE,QAAQ,SAAUv6B,GAChD41F,GAAc51F,EAAIg2C,MAI9B,QAASkxD,IAAW7tG,EAASk6B,EAAMyiB,GA8D/B,QAASmxD,GAA6BjnD,GAAtC,GAEYknD,GAAqC/hE,EAMhChpC,EACD+H,CARZ,IAAIvJ,GAAQiB,MAAQjB,GAAQ+iB,MAAQ/iB,GAAQke,OAAQ,CAOhD,IANIquF,EAAalnD,EAAM6kD,iBAAkB1/D,GACjCxkC,IAAKwmG,EAAAA,EACLntG,QAAQmtG,EAAAA,GACRltG,SAASktG,EAAAA,GACTptG,KAAMotG,EAAAA,GAELhrG,EAAI,EAAGA,EAAI+qG,EAAWluG,SAAUmD,EACjC+H,EAAIgjG,EAAW/qG,GACf+H,EAAE7J,OAAS,GAAK6J,EAAEjK,SAAWmtG,IAGjCjiE,EAAIprC,KAAOkG,KAAKoT,IAAInP,EAAEnK,KAAMorC,EAAIprC,MAChCorC,EAAIxkC,IAAMV,KAAKoT,IAAInP,EAAEvD,IAAKwkC,EAAIxkC,KAC9BwkC,EAAInrC,MAAQiG,KAAKnG,IAAIoK,EAAElK,MAAOmrC,EAAInrC,OAClCmrC,EAAIlrC,OAASgG,KAAKnG,IAAIoK,EAAEjK,OAAQkrC,EAAIlrC,QAIxC,OAFAkrC,GAAI9qC,MAAQ8qC,EAAInrC,MAAQmrC,EAAIprC,KAC5BorC,EAAI7qC,OAAS6qC,EAAIlrC,OAASkrC,EAAIxkC,IACvBwkC,EAEX,MAAO6a,GAAM6mC,wBAEjB,QAASwgB,KAAT,GAEQliE,GAQA0gB,EAKQw7B,EAyCRpjF,EAIIqpG,EAEIC,EAUAh8F,EAvERi8F,EAAYl3F,EACPohE,EAAM56C,EAAKlhB,OAAOtF,GAAOkd,OAAO,KAEzC,IADAld,GAASohE,EACLA,EAAM,GAAKphE,GAASvX,EACpB,OAAO,CAkBX,IAhBAinD,EAAMynD,SAASp0E,EAAM/iB,GACrB0vC,EAAMu4C,OAAOllE,EAAM/iB,EAAQ,GAC3B60B,EAAM8hE,EAA6BjnD,GAC/B6F,GAAQ,GACR6hD,GAAeC,EAAc,KAC7Bj2B,EAAM56C,EAAKlhB,OAAOtF,GAAOkd,OAAO,MAC5BkkD,GAAO,IACP1xB,EAAMu4C,OAAOllE,EAAM/iB,EAAQohE,GACvB2P,EAAI4lB,EAA6BjnD,GACjCqhC,EAAEpnF,QAAUkrC,EAAIlrC,SAChBkrC,EAAMk8C,EACNx7B,GAAQ,EACRv1C,GAASohE,MAIhB7rB,EAAO,CAiBR,GAhBA6rB,EAAM,QAASk2B,GAAQv0F,EAAKw0F,EAAK/tG,GAC7BkmD,EAAMu4C,OAAOllE,EAAMw0E,EACnB,IAAIxmB,GAAI4lB,EAA6BjnD,EACrC,OAAIqhC,GAAEpnF,QAAUkrC,EAAIlrC,QAAUoZ,EAAMw0F,EACzBD,EAAQv0F,EAAKA,EAAMw0F,GAAO,EAAGA,GAC7BxmB,EAAErnF,OAASmrC,EAAInrC,OACtBmrC,EAAMk8C,EACFwmB,EAAM/tG,EACC8tG,EAAQC,EAAKA,EAAM/tG,GAAO,EAAGA,GAE7B+tG,GAGJA,GAEbv3F,EAAOrQ,KAAKoT,IAAIta,EAAKuX,EAAQw3F,GAAqB/uG,GAChD24E,GAAOphE,EACP,OAAO,CAIX,IAFAA,EAAQohE,EACRA,GAAM1xB,GAAAA,GAAiBxyB,OAAO,QAClB,IAARkkD,EACA,OAAO,CAEPA,GAAM,IACN1xB,EAAMu4C,OAAOllE,EAAM2sB,EAAM+nD,YAAcr2B,GACvCvsC,EAAM8hE,EAA6BjnD,IAO3C,IAJIrlD,GAAQiB,MAAQjB,GAAQ+iB,QACxBynB,EAAM6a,EAAM6kD,iBAAiB,IAE7B5mG,EAAM+hD,GAAAA,EACL,sBAAsBzkD,KAAKqrG,IAEzB,GAAI,KAAKrrG,KAAK0C,GAAM,CAEvB,IADIqpG,EAAK,EACJ51B,EAAM81B,EAAW91B,EAAM1xB,EAAM+nD,cAAer2B,EACzC61B,EAAOzwE,EAAKnsB,WAAW+mE,GACf,GAAR61B,EACAD,GAAM,EAAIA,EAAK,EACA,IAARC,GAAsB,IAARA,EACrBD,EAAK,EAELA,GAGR,OAAQ51B,EAAMzzE,EAAIuvB,OAAO,QAAU,GAC3BjiB,EAAS,WAAWqK,OAAO,EAAG,GAAK0xF,EAAK51B,GAAO,GACnDzzE,EAAMA,EAAI2X,OAAO,EAAG87D,GAAOnmE,EAAStN,EAAI2X,OAAO87D,EAAM,QAfzDzzE,GAAMA,EAAI1F,QAAQ,OAAQ,IAkBzBstD,KACDuhD,EAAiBjiE,EAAIlrC,QAEzB+tG,EAAS/pG,EAAKknC,GAElB,QAAS6iE,GAAS/pG,EAAKknC,GAAvB,GAEY7qC,GACAqG,EAuBJm2B,CAbJ,SAZKn8B,GAAQiB,OAAQjB,GAAQ+iB,MAAU3G,MAAMmtF,KACrC5pG,EAAS2tG,GAAc7N,GACvBz5F,GAAOwkC,EAAIxkC,IAAMwkC,EAAIlrC,OAASK,GAAU,EAC5C6qC,GACIxkC,IAAKA,EACL3G,MAAOmrC,EAAInrC,MACXC,OAAQ0G,EAAMrG,EACdP,KAAMorC,EAAIprC,KACVO,OAAQA,EACRD,MAAO8qC,EAAInrC,MAAQmrC,EAAIprC,OAGvBmuG,GACR,IAAK,YACDjqG,EAAMA,EAAIM,aACV,MACJ,KAAK,YACDN,EAAMA,EAAIE,aACV,MACJ,KAAK,aACDF,EAAMA,EAAI1F,QAAQ,cAAe,SAAUupF,GACvC,MAAOA,GAAEvjF,gBAIbu4B,EAAO,GAAIqxE,IAASlqG,EAAK,GAAImwF,KAC7BjpD,EAAIprC,KACJorC,EAAIxkC,MAEJwkC,EAAI9qC,MACJ8qC,EAAI7qC,UAEJ8/F,KAAMA,EACNkG,MAAQtpB,MAAOA,KAEnBlhC,EAAMjQ,OAAO/O,GAEjB,QAASsxE,GAASjjE,GAId,QAASkjE,GAAKrxB,EAAOsxB,GAArB,GAEYjuG,GACAyuC,CAFJkuC,KACI38E,EAAQ4pG,EAAW,GACnBn7D,EAAO,GAAIu3D,KACXE,QACIlmG,MAAOA,EACP28E,MAAOA,KAGfsxB,GAAQjuG,EACRyuC,EAAKZ,OAAO/C,EAAIprC,KAAMuuG,GAAM9U,OAAOruD,EAAInrC,MAAOsuG,GAC9CxyD,EAAMjQ,OAAOiD,IAdrBu/D,EAAKE,EAAWpjE,EAAIlrC,QACpBouG,EAAKG,EAAarjE,EAAIlrC,OAASkrC,EAAI7qC,OAAS,KAC5C+tG,EAAKI,EAAUtjE,EAAIxkC,KAhN3B,GAIQzF,GAIA47B,EACAxmB,EACAvX,EAIAkrG,EACAC,EACA9J,EAYApjB,EACAh3B,EACA0oD,EACAhB,EACAC,EACAf,EACAsB,EACAS,EAAcC,EAQdd,EAIAV,EACAmB,EACAC,EACAC,EACAI,CAlDJ,KAAIjM,OAGA1hG,EAAQ4D,GAAiB3F,KACzBqK,WAAWtE,GAAiBhE,EAAO,wBAGnC47B,EAAOzD,EAAKx2B,KACZyT,EAAQ,EACRvX,EAAM+9B,EAAKtJ,OAAO,UAAY,EAC7Bz0B,IAGDkrG,EAAW/kG,GAAiBhE,EAAO,aACnCgpG,EAAahlG,GAAiBhE,EAAO,eACrCk/F,GACAl7F,GAAiBhE,EAAO,cACxBgE,GAAiBhE,EAAO,gBACxBgE,GAAiBhE,EAAO,eACxB+oG,EACA/kG,GAAiBhE,EAAO,gBAC1B5C,KAAK,KACP2rG,EAAWzgG,WAAWygG,GACtBC,EAAa1gG,WAAW0gG,GACP,IAAbD,KAAJ,CA2BA,IAxBIjtB,EAAQ93E,GAAiBhE,EAAO,SAChC8kD,EAAQ7mD,EAAQ+kE,cAAcvnC,cAC9B+xE,EAAWxpG,GAAiBhE,EAAO,cACnCwsG,EAA0B,WAAZgB,EACdf,EAAczoG,GAAiBhE,EAAO,eAAgB,GACtD0rG,EAAa1nG,GAAiBhE,EAAO,eACrCgtG,EAAgBhpG,GAAiBhE,EAAO,mBAExCP,GAAQiB,MAAQjB,GAAQ+iB,QACxBirF,EAAeztG,EAAMytG,aACD,YAAhBA,IACAC,EAAmBzvG,EAAQ+B,MAAMytG,aACjCxvG,EAAQ+B,MAAMytG,aAAe,SAGjCb,EAAqB3uG,EAAQ0tF,wBAAwBxsF,MAAQ4pG,EAAW,EACjD,IAAvB6D,IACAA,EAAqB,KAErBV,EAAiB,KACjBmB,EAAYrT,GAAoB,UAChCsT,EAActT,GAAS,gBACvBuT,EAAWvT,GAAmB,SAC9B2T,EAAgBN,GAAaC,GAAeC,GACxCpB,OAEH1sG,GAAQiB,MAAQjB,GAAQ+iB,OAAyB,YAAhBirF,IAClCxvG,EAAQ+B,MAAMytG,aAAeC,GAE7BC,IACA7oD,EAAM8oD,WAAWz1E,GACjBohE,GAAQz0C,EAAM6kD,kBAAkBxqE,QAAQ+tE,KAsKhD,QAASW,IAAuB5vG,EAAS28C,EAAOpQ,GAAhD,GACQsjE,GAQA/kG,EACK9H,EAKLsoC,EAKQryB,EACAivE,CAXZ,KARc,QAAV37C,GACAsjE,EAAO9T,GAASK,iBAAiBz/C,MACjCpQ,EAASliC,WAAWkiC,KAEpBsjE,EAAOlzD,EACPpQ,EAAS,GAETzhC,EAAI+kG,EAAKhtG,SACJG,EAAI,EAAGA,EAAI8H,EAAEjL,UACM,MAApBiL,EAAE9H,GAAG8sG,aAAuBhlG,EAAE9H,GAAG8sG,YAAcvjE,KADvBvpC,GAehC,MAVIsoC,GAAM,GAAIsuD,IACdiW,EAAK9jD,OAAO/oD,EAAGsoC,GACfA,EAAIwkE,YAAcvjE,EACdsjE,IAASlzD,GACLo/C,GAASC,WACL/iF,EAAI8iF,GAASE,QAAQ8T,SACrB7nB,EAAI6T,GAASC,SAASxJ,cAAcv5E,GACxC8rF,GAAYz5D,EAAK47D,GAAKkF,SAASlkB,KAGhC58C,EAEX,QAASixD,IAAcv8F,EAAS+vB,GAAhC,GASQK,GACAghD,EACAnvE,EAIAkkG,EACAxpD,EACApQ,EAhBAxqC,EAAQ4D,GAAiB3F,EAC7BkiG,IAAengG,GACX,sDAAsDK,KAAKpC,EAAQwsB,UAG9C,MAArBuvE,GAASC,WAGT5rE,EAAU/lB,WAAWtE,GAAiBhE,EAAO,YAC7CqvE,EAAarrE,GAAiBhE,EAAO,cACrCE,EAAU8D,GAAiBhE,EAAO,WACtB,IAAZquB,GAA+B,UAAdghD,GAAqC,QAAXnvE,IAG3CkkG,EAAKzB,GAAa3iG,GAElBwqC,EAASxmC,GAAiBhE,EAAO,YAChCokG,GAAM/1E,EAAU,IAAgB,QAAVmc,IACvBA,EAAS,GAEboQ,EAAQizD,GAAuB5vG,EAAS+vB,EAAWwc,GAC/Cnc,EAAU,GACVusB,EAAMvsB,QAAQA,EAAUusB,EAAMvsB,WAElC+yE,GAAanjG,EAAS+B,EAAO46C,GACxBwpD,EAGDjC,GAAUlkG,EAAS,WAAA,GAMXm0F,GACA34D,EACAjiB,EACAN,CARJ4qF,IAAuB7jG,EAAQ+B,MAAO,YAAa,OAAQ,aAC3D8hG,GAAuB7jG,EAAQ+B,MAAO,aAAc,OAAQ,aACjB,UAAvCgE,GAAiBhE,EAAO,aACxB8hG,GAAuB7jG,EAAQ+B,MAAO,WAAY,WAAY,aAE9DoyF,EAAOn0F,EAAQ0tF,wBACflyD,EAAI24D,EAAKvzF,KAAOulG,EAAGx6D,OAAO,GAC1BpyB,EAAI46E,EAAK3sF,IAAM2+F,EAAGx6D,OAAO,GACzB1yB,GACA,EACA,EACA,EACA,GACCuiB,GACAjiB,GAELN,EAAI+2F,GAAK/2F,EAAGktF,EAAG3X,QACfv1E,EAAI+2F,GAAK/2F,GACL,EACA,EACA,EACA,EACAuiB,EACAjiB,IAEJN,EAAI6iF,GAAan/C,EAAO1jC,GACxB8iF,GAASE,QAAUF,GAASE,QAAQgU,aAAah3F,GACjDyuF,GAA0B1nG,EAAS28C,KA9BvC+qD,GAA0B1nG,EAAS28C,GAiCvC2mD,OAEJ,QAAS0M,IAAKllG,EAAGC,GAAjB,GACQu2B,GAAKx2B,EAAE,GAAIolG,EAAKplG,EAAE,GAAIu9E,EAAKv9E,EAAE,GAAIqlG,EAAKrlG,EAAE,GAAIslG,EAAKtlG,EAAE,GAAIuvC,EAAKvvC,EAAE,GAC9Dy2B,EAAKx2B,EAAE,GAAIslG,EAAKtlG,EAAE,GAAIu9E,EAAKv9E,EAAE,GAAIulG,EAAKvlG,EAAE,GAAIwlG,EAAKxlG,EAAE,GAAIuvC,EAAKvvC,EAAE,EAClE,QACIu2B,EAAKC,EAAK2uE,EAAK5nB,EACfhnD,EAAK+uE,EAAKH,EAAKI,EACfjoB,EAAK9mD,EAAK4uE,EAAK7nB,EACfD,EAAKgoB,EAAKF,EAAKG,EACfF,EAAK7uE,EAAK8Y,EAAKiuC,EAAKioB,EACpBH,EAAKC,EAAKh2D,EAAKi2D,EAAKh2D,GApgQ/B,GAEOk2D,IACAC,GACA3xG,GACA4xG,GACAtwG,GACAy4F,GACAxb,GACAC,GACAqzB,GAuEA55F,GAwEAzS,GAIAunF,GAIAG,GACA0I,GACAC,GAIA/H,GACAV,GAqLA3O,GA2BA9rE,GACAm/F,GAiGA1U,GA+GAnM,GA+IA8gB,GA6CA5b,GAkHAxG,GA0EAqiB,GAgIAC,GACAxD,GAiEAyD,GACAC,GAmCAC,GACAC,GA2CAC,GACA9D,GA+BApe,GAwBAmiB,GACAC,GACApM,GAoRAl1F,GACAokB,GACA9jB,GACA0J,GACAtL,GACAuB,GACAshG,GAgGAC,GAsCAle,GAgIAme,GAqKAvK,GAoKAwK,GACAC,GA4EAC,GA6EAC,GACAC,GACAC,GAmDA1H,GAmCA2H,GAgBApY,GAwHAtP,GAUAppD,GAGA+wE,GAMArzC,GAqJAszC,GA+JAC,GAmBAC,GA6BAC,GAmDAhG,GAcAiG,GAqDAC,GAKAxqE,GAGA5C,GAuDAqtE,GA+BAC,GA6IAxa,GAQAya,GACAta,GACA12B,GACAyS,GAQAw+B,GA6CAC,GAqCAhjG,GAOAijG,GA6HAC,GA4FAC,GACAlZ,GACAp3D,GACAuwE,GAIIC,GACAC,GACAC,GAYJC,GACA/wE,GACAgxE,GAwBA3yD,GAiRA4yD,GA4BAC,GAoCAC,GA8BAC,GA0BAC,GAWAC,GA8EAla,GAoBAma,GAiBAC,GAwEAC,GAYAC,GAkCAC,GACAC,GACAC,GAMArqB,GACAsqB,GA+KAC,GAMAC,GAmBAC,GAoBAC,GAsDAnb,GAeAob,GAsDAC,GAcAC,GA4BAlb,GAmBAmb,GAyBAC,GAyFAC,GAqBAC,GACAC,GA4BAC,GAoCAC,GAgFAC,GACAC,GACAC,GACAC,GAuKAC,GAsDAra,GAmKAsa,GAuGAC,GAOAC,GASAC,GASAC,GAiDAC,GAuBAC,GASAC,GAuDAt0G,GAIAumG,GACApF,GACA5G,GAEAiT,GAoCAhzF,GAoCAwjF,GAgeAsD,GA+HA5B,GAyDAC,GAcA2N,GAwxDAllF,EAtgQJhrB,QAAOuB,MAAQvB,OAAOuB,UAClBqwG,GAAerwG,MAAMypB,QACrB6mF,GAAmBD,GAAajzB,KAChCz+E,GAAQqB,MAAMrB,MACd4xG,GAAYvwG,MAAMo9E,KAClBn9E,GAAUD,MAAMC,QAChBy4F,GAAiBz4F,GAAQoB,QACzB67E,GAAgBozB,GAAiBpzB,cACjCC,GAAamzB,GAAiBnzB,WAC9BqzB,IACA/nG,OAAQ,SAAU+F,GAAV,GAEKiiB,GADLo4D,EAAS9gF,IACb,KAAS0oB,IAAU1oB,MACA,WAAX0oB,IACAjiB,EAAMiiB,GAAUo4D,EAAOp4D,KAInCmlF,UAAW,WAEP,MADA7tG,MAAK8tG,WAAa9tG,KAAK8tG,gBAG3BC,YAAa,SAAUj2G,GAMnB,MALKkI,MAAK8tG,WAGN9tG,KAAK8tG,WAAWhmG,KAAKhQ,GAFrBkI,KAAK8tG,YAAch2G,GAIhBkI,MAEXguG,eAAgB,SAAUl2G,GAAV,GACR+1G,GAAY7tG,KAAK6tG,YACjB17F,EAAQ07F,EAAU3vG,QAAQpG,EAI9B,OAHIqa,SACA07F,EAAUzlG,OAAO+J,EAAO,GAErBnS,MAEXgI,QAAS,SAAUsuD,EAAYx9C,GAAtB,GAGQnb,GACDswG,EAHRJ,EAAY7tG,KAAK8tG,UACrB,IAAID,IAAc7tG,KAAKkuG,WACnB,IAASvwG,EAAM,EAAGA,EAAMkwG,EAAUl2G,OAAQgG,IAClCswG,EAAWJ,EAAUlwG,GACrBswG,EAAS33C,IACT23C,EAAS33C,GAAYx9C,EAIjC,OAAO9Y,OAEXmuG,cAAe,SAAUlmG,GACX,SAANA,IACAA,MAEJA,EAAEnQ,QAAUkI,KACZA,KAAKgI,QAAQ,gBAAiBC,IAElCg+E,eAAgB,WACZjmF,KAAKgI,QAAQ,kBAAoBlQ,QAASkI,QAE9CouG,QAAS,WAEL,MADApuG,MAAKkuG,YAAcluG,KAAKkuG,YAAc,GAAK,EACpCluG,MAEXquG,OAAQ,WAEJ,MADAruG,MAAKkuG,WAAatvG,KAAKnG,KAAKuH,KAAKkuG,YAAc,GAAK,EAAG,GAChDluG,MAEX6mF,eAAgB,SAAU3oE,EAAOtgB,GACzBoC,KAAKke,IACLle,KAAKke,GAAO8vF,eAAehuG,MAE/BA,KAAKke,GAAStgB,EACdA,EAAMmwG,YAAY/tG,QAOtB6O,IACAy/F,EAAG,IACHC,GAAI,IACJC,IAAK,IACL53F,EAAG,KACH63F,GAAI,KACJC,IAAK,KACL73F,EAAG,MACH83F,GAAI,MACJC,IAAK,MACL93F,EAAG,KACH+3F,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,KA4CN1zG,GAAY,YAIZunF,GAAQ,EAIRG,GAAallF,KAAKswF,GAAK,IACvB1C,GAAUvhF,OAAO8kG,UACjBtjB,IAAWxhF,OAAO8kG,UAIlBrrB,GAAU,oEACVV,GAAe/5E,OAAO+5E,aAqLtB3O,IACA7wC,OAAQA,EACR++C,cAAeA,EACfpO,cAAeA,GACfsO,QAASA,EACTC,aAAcA,EACdE,IAAKA,EACLK,aAAcA,EACdU,iBAAkBA,EAClBC,aAAcA,EACdC,cAAeA,EACfl1D,KAAMA,EACNm1D,WAAYA,EACZC,UAAWA,EACX3P,WAAYA,GACZ+P,IAAKA,EACL11E,MAAOA,EACP61E,eAAgBA,EAChBC,WAAYA,EACZtQ,cAAeA,EACfpM,YAAaA,EACb8c,cAAeA,EACfI,aAAcA,EACdjC,WAAYA,GACZ0I,QAASA,GACTC,QAASA,IAETljF,MAAcA,SACdm/F,GAAe9xG,GAAM8J,QACrBC,KAAM,SAAUP,EAASwY,GAAnB,GAMOsF,GACDxX,EANJo6E,EAAS9gF,IACE,UAAX4Y,IACAA,EAAS,IAEb5Y,KAAK4Y,OAASA,CACd,KAASsF,IAAS9d,GACVsG,EAAStG,EAAQ8d,GACrBxX,EAASo6E,EAAOvrB,MAAM7uD,EAAQwX,GAC9B4iE,EAAO5iE,GAASxX,GAGxBid,IAAK,SAAUzF,GAGX,IAHC,GAIOpnB,GAHJ2R,EAAQyV,EAAMlnB,MAAM,KACpBgI,EAASgB,KACNyI,EAAM9Q,QAAUqH,GACflI,EAAO2R,EAAMqJ,QACjB9S,EAASA,EAAOlI,EAEpB,OAAOkI,IAEX4kB,IAAK,SAAU1F,EAAOtgB,GAClB,GAAI+N,GAAU3L,KAAK2jB,IAAIzF,EACnBvS,KAAY/N,IACZoC,KAAKq6C,KAAKn8B,EAAOle,KAAKu1D,MAAM33D,EAAOsgB,IACnCle,KAAKmuG,eACDjwF,MAAOle,KAAK4Y,OAASsF,EACrBtgB,MAAOA,MAInBy8C,KAAM,SAAUn8B,EAAOtgB,GAAjB,GAMM6K,GACAmQ,EAII9Z,EAVRgiF,EAAS9gF,KACTu6C,EAAYr8B,EAAMhgB,QAAQ,MAAQ,EAClC8xG,EAAYhwG,KACZ0xC,EAAYxzB,CAChB,IAAIq8B,EAAW,CAGX,IAFI9xC,EAAQipC,EAAU16C,MAAM,KACxB4hB,EAAS5Y,KAAK4Y,OACXnQ,EAAM9Q,OAAS,GAClB+5C,EAAYjpC,EAAMqJ,QAClB8G,GAAU84B,EAAY,IAClB5yC,EAAMkxG,EAAUt+D,GACf5yC,IACDA,EAAM,GAAI4pG,OAAiB9vF,GAC3B9Z,EAAIivG,YAAYjtB,GAChBkvB,EAAUt+D,GAAa5yC,GAE3BkxG,EAAYlxG,CAEhB4yC,GAAYjpC,EAAM,GAEtBunG,EAAUC,OAAOv+D,GACjBs+D,EAAUt+D,GAAa9zC,GAE3BqyG,OAAQ,SAAU/xF,GACd,GAAIvS,GAAU3L,KAAKke,EACfvS,IAAWA,EAAQqiG,gBACnBriG,EAAQqiG,eAAehuG,OAG/Bu1D,MAAO,SAAU5b,EAAQz7B,GAAlB,GACChf,GAAOqK,GAASpB,KAAKwxC,GACrBu2D,EAAUv2D,CAOd,OANgB,QAAZu2D,GAAoBzsB,EAAQysB,IAAqB,oBAAThxG,IAClCy6C,YAAkB+uD,KAAmB/uD,YAAkB/iD,MACzDs5G,EAAU,GAAIxH,IAAawH,EAASlwG,KAAK4Y,OAASsF,EAAQ,MAE9DgyF,EAAQnC,YAAY/tG,OAEjBkwG,KAGfzH,GAAe/nG,OAAOgoG,GAAa3hG,WAuB/BitF,GAASp9F,GAAM8J,QACfC,KAAM,SAAUiC,EAAGC,EAAGuG,EAAGuH,EAAG1I,EAAG1R,GACjB,SAANqM,IACAA,EAAI,GAEE,SAANC,IACAA,EAAI,GAEE,SAANuG,IACAA,EAAI,GAEE,SAANuH,IACAA,EAAI,GAEE,SAAN1I,IACAA,EAAI,GAEE,SAAN1R,IACAA,EAAI,GAERyJ,KAAK4C,EAAIA,EACT5C,KAAK6C,EAAIA,EACT7C,KAAKoJ,EAAIA,EACTpJ,KAAK2Q,EAAIA,EACT3Q,KAAKiI,EAAIA,EACTjI,KAAKzJ,EAAIA,GAEbwxG,aAAc,SAAUzhB,GACpB,MAAO,IAAI0N,IAAOh0F,KAAK4C,EAAI0jF,EAAO1jF,EAAI5C,KAAKoJ,EAAIk9E,EAAOzjF,EAAG7C,KAAK6C,EAAIyjF,EAAO1jF,EAAI5C,KAAK2Q,EAAI21E,EAAOzjF,EAAG7C,KAAK4C,EAAI0jF,EAAOl9E,EAAIpJ,KAAKoJ,EAAIk9E,EAAO31E,EAAG3Q,KAAK6C,EAAIyjF,EAAOl9E,EAAIpJ,KAAK2Q,EAAI21E,EAAO31E,EAAG3Q,KAAK4C,EAAI0jF,EAAOr+E,EAAIjI,KAAKoJ,EAAIk9E,EAAO/vF,EAAIyJ,KAAKiI,EAAGjI,KAAK6C,EAAIyjF,EAAOr+E,EAAIjI,KAAK2Q,EAAI21E,EAAO/vF,EAAIyJ,KAAKzJ,IAE/QsxG,OAAQ,WAAA,GACAtnB,GAAMvgF,KACN4C,EAAI29E,EAAI39E,EACRC,EAAI09E,EAAI19E,EACR8N,EAAI4vE,EAAIn3E,EACRnB,EAAIs4E,EAAI5vE,EACR9T,EAAI0jF,EAAIt4E,EACRq4E,EAAIC,EAAIhqF,EACR45G,EAAMvtG,EAAIqF,EAAIpF,EAAI8N,CACtB,OAAY,KAARw/F,EACO,KAEJ,GAAInc,IAAO/rF,EAAIkoG,GAAMttG,EAAIstG,GAAMx/F,EAAIw/F,EAAKvtG,EAAIutG,GAAMx/F,EAAI2vE,EAAIr4E,EAAIpL,GAAKszG,GAAMttG,EAAIhG,EAAI+F,EAAI09E,GAAK6vB,IAErGh0G,MAAO,WACH,MAAO,IAAI63F,IAAOh0F,KAAK4C,EAAG5C,KAAK6C,EAAG7C,KAAKoJ,EAAGpJ,KAAK2Q,EAAG3Q,KAAKiI,EAAGjI,KAAKzJ,IAEnEymD,OAAQ,SAAUkjC,GACd,QAAKA,IAGElgF,KAAK4C,IAAMs9E,EAAMt9E,GAAK5C,KAAK6C,IAAMq9E,EAAMr9E,GAAK7C,KAAKoJ,IAAM82E,EAAM92E,GAAKpJ,KAAK2Q,IAAMuvE,EAAMvvE,GAAK3Q,KAAKiI,IAAMi4E,EAAMj4E,GAAKjI,KAAKzJ,IAAM2pF,EAAM3pF,IAE1IkZ,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,KAAKzJ,EAAIkZ,EAAMzP,KAAKzJ,EAAGmY,GAChB1O,MAEX0+C,QAAS,SAAUhwC,GAAV,GAUQ5T,GATTkE,GACAgB,KAAK4C,EACL5C,KAAK6C,EACL7C,KAAKoJ,EACLpJ,KAAK2Q,EACL3Q,KAAKiI,EACLjI,KAAKzJ,EAET,IAAIktF,EAAQ/0E,GACR,IAAS5T,EAAI,EAAGA,EAAIkE,EAAOrH,OAAQmD,IAC/BkE,EAAOlE,GAAK2U,EAAMzQ,EAAOlE,GAAI4T,EAGrC,OAAO1P,IAEXuK,SAAU,SAAUmF,EAAW4wF,GAI3B,MAHkB,UAAdA,IACAA,EAAY,KAETt/F,KAAK0+C,QAAQhwC,GAAWzX,KAAKqoG,MAG5CtL,GAAOv2D,UAAY,SAAUnK,EAAGjiB,GAC5B,MAAO,IAAI2iF,IAAO,EAAG,EAAG,EAAG,EAAG1gE,EAAGjiB,IAErC2iF,GAAOC,KAAO,WACV,MAAO,IAAID,IAAO,EAAG,EAAG,EAAG,EAAG,EAAG,IAErCA,GAAO71D,OAAS,SAAUkrD,EAAO/1D,EAAGjiB,GAChC,GAAIi1E,GAAS,GAAI0N,GAOjB,OANA1N,GAAO1jF,EAAIhE,KAAKqpF,IAAI9C,EAAIkE,IACxB/C,EAAOzjF,EAAIjE,KAAKspF,IAAI/C,EAAIkE,IACxB/C,EAAOl9E,GAAKk9E,EAAOzjF,EACnByjF,EAAO31E,EAAI21E,EAAO1jF,EAClB0jF,EAAOr+E,EAAIqrB,EAAIA,EAAIgzD,EAAO1jF,EAAIyO,EAAIi1E,EAAOzjF,GAAK,EAC9CyjF,EAAO/vF,EAAI8a,EAAIA,EAAIi1E,EAAO1jF,EAAI0wB,EAAIgzD,EAAOzjF,GAAK,EACvCyjF,GAEX0N,GAAO52D,MAAQ,SAAUgzE,EAAQC,GAC7B,MAAO,IAAIrc,IAAOoc,EAAQ,EAAG,EAAGC,EAAQ,EAAG,IAE/Crc,GAAOsc,SAAWtc,GAAOC,OAOrBpM,GAAQjxF,GAAM8J,QACdC,KAAM,SAAU2yB,EAAGjiB,GACfrR,KAAKszB,EAAIA,GAAK,EACdtzB,KAAKqR,EAAIA,GAAK,GAElB2rC,OAAQ,SAAUkjC,GACd,MAAOA,IAASA,EAAM5sD,IAAMtzB,KAAKszB,GAAK4sD,EAAM7uE,IAAMrR,KAAKqR,GAE3DlV,MAAO,WACH,MAAO,IAAI0rF,IAAM7nF,KAAKszB,EAAGtzB,KAAKqR,IAElC8sB,OAAQ,SAAUkrD,EAAO5lD,GACrB,GAAI8sE,GAAc1oB,GAAM54C,OAAOxL,IAAWokD,GAAM73E,IAChD,OAAOhQ,MAAKq6B,UAAU25D,GAAO71D,OAAOkrD,EAAOknB,EAAYj9E,EAAGi9E,EAAYl/F,KAE1EosB,UAAW,SAAUnK,EAAGjiB,GAIpB,MAHArR,MAAKszB,GAAKA,EACVtzB,KAAKqR,GAAKA,EACVrR,KAAKimF,iBACEjmF,MAEX8vF,cAAe,SAAU1F,GACrB,MAAOpqF,MAAKy9B,UAAU2sD,EAAM92D,EAAG82D,EAAM/4E,IAEzC6Z,KAAM,SAAUoI,EAAGjiB,GAEf,MADArR,MAAKszB,EAAItzB,KAAKqR,EAAI,EACXrR,KAAKy9B,UAAUnK,EAAGjiB,IAE7B+rB,MAAO,SAAUgzE,EAAQC,GAOrB,MANe,UAAXA,IACAA,EAASD,GAEbpwG,KAAKszB,GAAK88E,EACVpwG,KAAKqR,GAAKg/F,EACVrwG,KAAKimF,iBACEjmF,MAEX0vF,UAAW,SAAU0gB,EAAQC,GACzB,MAAOrwG,MAAK7D,QAAQihC,MAAMgzE,EAAQC,IAEtCh2E,UAAW,SAAUJ,GAAV,GACHqsD,GAASD,EAASpsD,GAClBsmD,EAAMvgF,KACNszB,EAAIitD,EAAIjtD,EACRjiB,EAAIkvE,EAAIlvE,CAIZ,OAHArR,MAAKszB,EAAIgzD,EAAO1jF,EAAI0wB,EAAIgzD,EAAOl9E,EAAIiI,EAAIi1E,EAAOr+E,EAC9CjI,KAAKqR,EAAIi1E,EAAOzjF,EAAIywB,EAAIgzD,EAAO31E,EAAIU,EAAIi1E,EAAO/vF,EAC9CyJ,KAAKimF,iBACEjmF,MAEXsqF,cAAe,SAAUrwD,GACrB,GAAImwD,GAAQpqF,KAAK7D,OAIjB,OAHI89B,IACAmwD,EAAM/vD,UAAUJ,GAEbmwD,GAEXomB,WAAY,SAAUpmB,GAAV,GACJhyB,GAAKp4D,KAAKszB,EAAI82D,EAAM92D,EACpB+kC,EAAKr4D,KAAKqR,EAAI+4E,EAAM/4E,CACxB,OAAOzS,MAAK45D,KAAKJ,EAAKA,EAAKC,EAAKA,IAEpC5oD,MAAO,SAAUhY,GAIb,MAHAuI,MAAKszB,EAAI7jB,EAAMzP,KAAKszB,EAAG77B,GACvBuI,KAAKqR,EAAI5B,EAAMzP,KAAKqR,EAAG5Z,GACvBuI,KAAKimF,iBACEjmF,MAEX0+C,QAAS,SAAUjnD,GAAV,GACDg5G,GAAUhtB,EAAQhsF,GAClB67B,EAAIm9E,EAAUhhG,EAAMzP,KAAKszB,EAAG77B,GAAUuI,KAAKszB,EAC3CjiB,EAAIo/F,EAAUhhG,EAAMzP,KAAKqR,EAAG5Z,GAAUuI,KAAKqR,CAC/C,QACIiiB,EACAjiB,IAGR9H,SAAU,SAAU9R,EAAQ6nG,GAAlB,GAIF/e,GACAjtD,EACAjiB,CAKJ,OAVkB,UAAdiuF,IACAA,EAAY,KAEZ/e,EAAMvgF,KACNszB,EAAIitD,EAAIjtD,EACRjiB,EAAIkvE,EAAIlvE,EACRoyE,EAAQhsF,KACR67B,EAAI7jB,EAAM6jB,EAAG77B,GACb4Z,EAAI5B,EAAM4B,EAAG5Z,IAEV67B,EAAIgsE,EAAYjuF,KAG/Bw2E,GAAM54C,OAAS,SAAUyhE,EAAMC,GAC3B,GAAIltB,EAAQitB,GACR,MAAIA,aAAgB7oB,IACT6oB,EACqB,IAArB31G,UAAUpD,QAAgC,IAAhB+4G,EAAK/4G,OAC/B,GAAIkwF,IAAM6oB,EAAK,GAAIA,EAAK,IAE5B,GAAI7oB,IAAM6oB,EAAMC,IAG/B9oB,GAAM71E,IAAM,WAAA,GAIClX,GACDsvF,EAJJwmB,EAAc71G,UACdwjE,EAAOiuB,GACPhuB,EAAOguB,EACX,KAAS1xF,EAAI,EAAGA,EAAIC,UAAUpD,OAAQmD,IAC9BsvF,EAAQwmB,EAAY91G,GACxByjE,EAAO3/D,KAAKoT,IAAIo4E,EAAM92D,EAAGirC,GACzBC,EAAO5/D,KAAKoT,IAAIo4E,EAAM/4E,EAAGmtD,EAE7B,OAAO,IAAIqpB,IAAMtpB,EAAMC,IAE3BqpB,GAAMpvF,IAAM,WAAA,GAICqC,GACDsvF,EAJJwmB,EAAc71G,UACd0jE,EAAOguB,GACP/tB,EAAO+tB,EACX,KAAS3xF,EAAI,EAAGA,EAAIC,UAAUpD,OAAQmD,IAC9BsvF,EAAQwmB,EAAY91G,GACxB2jE,EAAO7/D,KAAKnG,IAAI2xF,EAAM92D,EAAGmrC,GACzBC,EAAO9/D,KAAKnG,IAAI2xF,EAAM/4E,EAAGqtD,EAE7B,OAAO,IAAImpB,IAAMppB,EAAMC,IAE3BmpB,GAAMgpB,SAAW,WACb,MAAO,IAAIhpB,IAAM4E,GAASA,KAE9B5E,GAAMipB,SAAW,WACb,MAAO,IAAIjpB,IAAM2E,GAASA,KAE1BxlF,OAAO+pG,kBACP/pG,OAAO+pG,iBAAiBlpB,IACpB73E,MACI2T,IAAK,WACD,MAAO,IAAIkkE,IAAM,EAAG,OAKpC1B,EAAgB0B,GAAM9gF,WAClB,IACA,MAEJ0hG,GAAe/nG,OAAOmnF,GAAM9gF,WACxB4hG,GAAO/xG,GAAM8J,QACbC,KAAM,SAAU3H,EAAOC,GACnB+G,KAAKhH,MAAQA,GAAS,EACtBgH,KAAK/G,OAASA,GAAU,GAE5B+jD,OAAQ,SAAUkjC,GACd,MAAOA,IAASA,EAAMlnF,QAAUgH,KAAKhH,OAASknF,EAAMjnF,SAAW+G,KAAK/G,QAExEkD,MAAO,WACH,MAAO,IAAIwsG,IAAK3oG,KAAKhH,MAAOgH,KAAK/G,SAErCylD,QAAS,SAAUjnD,GAAV,GACDg5G,GAAUhtB,EAAQhsF,GAClBuB,EAAQy3G,EAAUhhG,EAAMzP,KAAKhH,MAAOvB,GAAUuI,KAAKhH,MACnDC,EAASw3G,EAAUhhG,EAAMzP,KAAK/G,OAAQxB,GAAUuI,KAAK/G,MACzD,QACID,EACAC,MAIZ0vG,GAAK15D,OAAS,SAAUyhE,EAAMC,GAC1B,GAAIltB,EAAQitB,GACR,MAAIA,aAAgB/H,IACT+H,EACqB,IAArB31G,UAAUpD,QAAgC,IAAhB+4G,EAAK/4G,OAC/B,GAAIgxG,IAAK+H,EAAK,GAAIA,EAAK,IAE3B,GAAI/H,IAAK+H,EAAMC,IAG1B3pG,OAAO+pG,kBACP/pG,OAAO+pG,iBAAiBpI,IACpB34F,MACI2T,IAAK,WACD,MAAO,IAAIglF,IAAK,EAAG,OAKnCxiB,EAAgBwiB,GAAK5hG,WACjB,QACA,WAEJ0hG,GAAe/nG,OAAOioG,GAAK5hG,WACvBgmF,GAAOn2F,GAAM8J,QACbC,KAAM,SAAU8iC,EAAQ1lC,GACL,SAAX0lC,IACAA,EAAS,GAAIokD,KAEJ,SAAT9pF,IACAA,EAAO,GAAI4qG,KAEf3oG,KAAKgxG,UAAUvtE,GACfzjC,KAAK+lB,QAAQhoB,IAEjB5B,MAAO,WACH,MAAO,IAAI4wF,IAAK/sF,KAAKyjC,OAAOtnC,QAAS6D,KAAKjC,KAAK5B,UAEnD6gD,OAAQ,SAAUkjC,GACd,MAAOA,IAASA,EAAMz8C,OAAOuZ,OAAOh9C,KAAKyjC,SAAWy8C,EAAMniF,KAAKi/C,OAAOh9C,KAAKjC,OAE/EizG,UAAW,SAAUpzG,GAGjB,MAFAoC,MAAK6mF,eAAe,SAAUgB,GAAM54C,OAAOrxC,IAC3CoC,KAAKimF,iBACEjmF,MAEXyxF,UAAW,WACP,MAAOzxF,MAAKyjC,QAEhB1d,QAAS,SAAUnoB,GAGf,MAFAoC,MAAK6mF,eAAe,OAAQ8hB,GAAK15D,OAAOrxC,IACxCoC,KAAKimF,iBACEjmF,MAEX0lB,QAAS,WACL,MAAO1lB,MAAKjC,MAEhB/E,MAAO,WACH,MAAOgH,MAAKjC,KAAK/E,OAErBC,OAAQ,WACJ,MAAO+G,MAAKjC,KAAK9E,QAErBg4G,QAAS,WACL,MAAOjxG,MAAKyjC,OAAOtnC,SAEvBiwF,YAAa,WACT,MAAOpsF,MAAKyjC,OAAOtnC,QAAQshC,UAAUz9B,KAAKhH,QAASgH,KAAK/G,WAE5Di4G,SAAU,WACN,MAAOlxG,MAAKyjC,OAAOtnC,QAAQshC,UAAUz9B,KAAKhH,QAAS,IAEvDm4G,WAAY,WACR,MAAOnxG,MAAKyjC,OAAOtnC,QAAQshC,UAAU,EAAGz9B,KAAK/G,WAEjDq/D,OAAQ,WACJ,MAAOt4D,MAAKyjC,OAAOtnC,QAAQshC,UAAUz9B,KAAKhH,QAAU,EAAGgH,KAAK/G,SAAW,IAE3EgzF,KAAM,SAAU3F,GAAV,GACE0X,GAAKh+F,KAAKixG,UAAU3mB,cAAchE,GAClC2X,EAAKj+F,KAAKkxG,WAAW5mB,cAAchE,GACnC4X,EAAKl+F,KAAKosF,cAAc9B,cAAchE,GACtC6X,EAAKn+F,KAAKmxG,aAAa7mB,cAAchE,EACzC,OAAOyG,IAAKqkB,WAAWpT,EAAIC,EAAIC,EAAIC,IAEvC7T,cAAe,SAAUv5E,GACrB,MAAOg8E,IAAKqkB,WAAWpxG,KAAKixG,UAAU52E,UAAUtpB,GAAI/Q,KAAKosF,cAAc/xD,UAAUtpB,KAErFsgG,OAAQ,SAAU/9E,EAAGjiB,GAOjB,MANU,UAANA,IACAA,EAAIiiB,GAERtzB,KAAKjC,KAAK/E,OAAS,EAAIs6B,EACvBtzB,KAAKjC,KAAK9E,QAAU,EAAIoY,EACxBrR,KAAKyjC,OAAOhG,WAAWnK,GAAIjiB,GACpBrR,MAEXsxG,WAAY,SAAUh+E,EAAGjiB,GACrB,MAAOrR,MAAK7D,QAAQk1G,OAAO/9E,EAAGjiB,IAElCkgG,cAAe,SAAUnnB,GAAV,GACP3mD,GAASzjC,KAAKyjC,OACd2oD,EAAcpsF,KAAKosF,aACvB,SAAShC,EAAM92D,EAAImQ,EAAOnQ,GAAK82D,EAAM/4E,EAAIoyB,EAAOpyB,GAAK+6E,EAAY94D,EAAI82D,EAAM92D,GAAK84D,EAAY/6E,EAAI+4E,EAAM/4E,IAE1GmgG,UAAW,SAAUpnB,EAAOpxF,GAAjB,GACHy4G,GAAYzxG,KAAKsxG,WAAWt4G,EAAOA,GACnC04G,EAAY1xG,KAAKsxG,YAAYt4G,GAAQA,EACzC,OAAOy4G,GAAUF,cAAcnnB,KAAWsnB,EAAUH,cAAcnnB,MAG1E2C,GAAKqkB,WAAa,WAAA,GACVH,GAAUppB,GAAM71E,IAAIlL,MAAM,KAAM/L,WAChCqxF,EAAcvE,GAAMpvF,IAAIqO,MAAM,KAAM/L,WACpCgD,EAAO,GAAI4qG,IAAKvc,EAAY94D,EAAI29E,EAAQ39E,EAAG84D,EAAY/6E,EAAI4/F,EAAQ5/F,EACvE,OAAO,IAAI07E,IAAKkkB,EAASlzG,IAE7BgvF,GAAKC,MAAQ,SAAUpqF,EAAGC,GACtB,MAAOkqF,IAAKqkB,WAAWvpB,GAAM71E,IAAIpP,EAAEquG,UAAWpuG,EAAEouG,WAAYppB,GAAMpvF,IAAImK,EAAEwpF,cAAevpF,EAAEupF,iBAE7FW,GAAKuO,UAAY,SAAU14F,EAAGC,GAAb,GACT8uG,IACAj5G,KAAMkK,EAAEquG,UAAU39E,EAClBh0B,IAAKsD,EAAEquG,UAAU5/F,EACjB1Y,MAAOiK,EAAEwpF,cAAc94D,EACvB16B,OAAQgK,EAAEwpF,cAAc/6E,GAExBugG,GACAl5G,KAAMmK,EAAEouG,UAAU39E,EAClBh0B,IAAKuD,EAAEouG,UAAU5/F,EACjB1Y,MAAOkK,EAAEupF,cAAc94D,EACvB16B,OAAQiK,EAAEupF,cAAc/6E,EAE5B,IAAIsgG,EAAMj5G,MAAQk5G,EAAMj5G,OAASi5G,EAAMl5G,MAAQi5G,EAAMh5G,OAASg5G,EAAMryG,KAAOsyG,EAAMh5G,QAAUg5G,EAAMtyG,KAAOqyG,EAAM/4G,OAC1G,MAAOm0F,IAAKqkB,WAAW,GAAIvpB,IAAMjpF,KAAKnG,IAAIk5G,EAAMj5G,KAAMk5G,EAAMl5G,MAAOkG,KAAKnG,IAAIk5G,EAAMryG,IAAKsyG,EAAMtyG,MAAO,GAAIuoF,IAAMjpF,KAAKoT,IAAI2/F,EAAMh5G,MAAOi5G,EAAMj5G,OAAQiG,KAAKoT,IAAI2/F,EAAM/4G,OAAQg5G,EAAMh5G,WAGvL6vG,GAAe/nG,OAAOqsF,GAAKhmF,WACvBw/E,GAAiB3vF,GAAM8J,QACvBC,KAAM,SAAU2lF,GACG,SAAXA,IACAA,EAAS0N,GAAOC,QAEpBj0F,KAAK+zF,QAAUzN,GAEnBnqF,MAAO,WACH,MAAO,IAAIoqF,IAAevmF,KAAK+zF,QAAQ53F,UAE3C6gD,OAAQ,SAAUkjC,GACd,MAAOA,IAASA,EAAM6T,QAAQ/2C,OAAOh9C,KAAK+zF,UAE9Ct2D,UAAW,SAAUnK,EAAGjiB,GAGpB,MAFArR,MAAK+zF,QAAU/zF,KAAK+zF,QAAQgU,aAAa/T,GAAOv2D,UAAUnK,EAAGjiB,IAC7DrR,KAAK6xG,iBACE7xG,MAEXo9B,MAAO,SAAUgzE,EAAQC,EAAQ5sE,GACd,SAAX4sE,IACAA,EAASD,GAEE,SAAX3sE,IACAA,EAAS,KAEb,IAAI8sE,GAAc9sE,CAUlB,OATI8sE,KACAA,EAAc1oB,GAAM54C,OAAOshE,GAC3BvwG,KAAK+zF,QAAU/zF,KAAK+zF,QAAQgU,aAAa/T,GAAOv2D,UAAU8yE,EAAYj9E,EAAGi9E,EAAYl/F,KAEzFrR,KAAK+zF,QAAU/zF,KAAK+zF,QAAQgU,aAAa/T,GAAO52D,MAAMgzE,EAAQC,IAC1DE,IACAvwG,KAAK+zF,QAAU/zF,KAAK+zF,QAAQgU,aAAa/T,GAAOv2D,WAAW8yE,EAAYj9E,GAAIi9E,EAAYl/F,KAE3FrR,KAAK6xG,iBACE7xG,MAEXm+B,OAAQ,SAAUkrD,EAAO5lD,GACrB,GAAI8sE,GAAc1oB,GAAM54C,OAAOxL,IAAWokD,GAAM73E,IAGhD,OAFAhQ,MAAK+zF,QAAU/zF,KAAK+zF,QAAQgU,aAAa/T,GAAO71D,OAAOkrD,EAAOknB,EAAYj9E,EAAGi9E,EAAYl/F,IACzFrR,KAAK6xG,iBACE7xG,MAEXwrF,SAAU,SAAUvxD,GAChB,GAAIqsD,GAASD,EAASpsD,EAGtB,OAFAj6B,MAAK+zF,QAAU/zF,KAAK+zF,QAAQgU,aAAazhB,GACzCtmF,KAAK6xG,iBACE7xG,MAEXsmF,OAAQ,SAAU1oF,GACd,MAAIA,IACAoC,KAAK+zF,QAAUn2F,EACfoC,KAAK6xG,iBACE7xG,MAEJA,KAAK+zF,SAEhB8d,eAAgB,WACZ7xG,KAAKmuG,eACDjwF,MAAO,YACPtgB,MAAOoC,UAInByoG,GAAe/nG,OAAO6lF,GAAex/E,WAUjC6hG,GAAYhyG,GAAM8J,QAClBC,KAAM,SAAUP,GACZJ,KAAKiH,aAAa7G,IAEtB6G,aAAc,SAAU7G,GAAV,GAINmkC,GACAuqD,CAJY,UAAZ1uF,IACAA,MAEAmkC,EAAOnkC,EAAQmkC,KACfuqD,EAAe1uF,EAAQi6B,UACvBy0D,IACA1uF,EAAQi6B,UAAYA,EAAUy0D,IAE9BvqD,IAASA,EAAKxgB,KACdwgB,EAAKxgB,GAAK2/D,KAEd1jF,KAAKI,QAAU,GAAIsoG,IAAatoG,GAChCJ,KAAKI,QAAQ2tG,YAAY/tG,OAE7Bq6B,UAAW,SAAUz8B,GACjB,MAAI6lF,GAAQ7lF,OACRoC,MAAKI,QAAQwjB,IAAI,YAAayW,EAAUz8B,IAEjCoC,KAAKI,QAAQujB,IAAI,cAGhCmuF,gBAAiB,WAGb,IAHa,GAETC,GAGI93E,EAJJniC,EAAUkI,KAEPlI,EAAQ6B,QACX7B,EAAUA,EAAQ6B,OACdsgC,EAAiBniC,EAAQuiC,YACzBJ,IACA83E,EAAe93E,EAAeqsD,SAASyhB,aAAagK,GAAgB/d,GAAOC,QAGnF,IAAI8d,EACA,MAAO13E,GAAU03E,IAGzBC,iBAAkB,SAAUF,GAAV,GAIVG,GACAC,EACAH,EACAI,CAMJ,IAZwB,SAApBL,IACAA,EAAkB9xG,KAAK8xG,mBAEvBG,EAAmBjyG,KAAKq6B,YACxB63E,EAAgB7rB,EAAS4rB,GACzBF,EAAe1rB,EAASyrB,GAGxBK,EADAD,GAAiBH,EACAA,EAAahK,aAAamK,GAE1BA,GAAiBH,EAGlC,MAAO13E,GAAU83E,IAGzB3uG,QAAS,SAAU5F,GACf,MAAI6lF,GAAQ7lF,IACRoC,KAAKI,QAAQwjB,IAAI,UAAWhmB,GACrBoC,MAEJA,KAAKI,QAAQujB,IAAI,cAAe,GAE3C4gB,KAAM,SAAU3mC,GACZ,GAAIwC,GAAUJ,KAAKI,OACnB,OAAIqjF,GAAQ7lF,IACJA,IAAUA,EAAMmmB,KAChBnmB,EAAMmmB,GAAK2/D,KAEftjF,EAAQwjB,IAAI,OAAQhmB,GACboC,MAEJI,EAAQujB,IAAI,SAEvBuE,QAAS,SAAUtqB,GACf,MAAI6lF,GAAQ7lF,IACRoC,KAAKI,QAAQwjB,IAAI,UAAWhmB,GACrBoC,MAEJslF,EAAetlF,KAAKI,QAAQujB,IAAI,WAAY,IAEvDupE,YAAa,SAAUjzD,GAAV,GAGDsK,GAFJ0nD,EAAOjsF,KAAKoyG,aAAan4E,EAC7B,IAAIgyD,EAEA,MADI1nD,GAAOvkC,KAAKukC,OACTA,EAAOwoD,GAAKuO,UAAUrP,EAAM1nD,EAAK0nD,KAAKhyD,IAAmBgyD,GAGxEslB,cAAe,SAAUnnB,EAAO0nB,GAAjB,GAEHhjB,GACAujB,CAFR,SAAIryG,KAAKwD,YACDsrF,EAAe9uF,KAAKgyG,iBAAiBF,GACrCO,EAAmBjoB,EACnB0E,IACAujB,EAAmBjoB,EAAME,cAAcwE,EAAaxI,SAASuhB,WAE1D7nG,KAAKsyG,YAActyG,KAAKuyG,eAAeF,IAAqBryG,KAAKwxG,WAAaxxG,KAAKwyG,cAAgBxyG,KAAKwxG,UAAUa,KAIjIC,SAAU,WACN,GAAIrT,GAAOj/F,KAAKI,QAAQ6+F,IACxB,OAAOA,KAASpa,EAAcoa,EAAKtpB,QAEvC68B,WAAY,WACR,GAAItT,GAASl/F,KAAKI,QAAQ8+F,MAC1B,OAAOA,IAAUA,EAAOlmG,MAAQ,IAAM6rF,EAAcqa,EAAOvpB,QAE/Dy8B,aAAc,SAAUn4E,GACpB,MAAOj6B,MAAKisF,KAAKhyD,MAGzB2uE,GAAU7hG,UAAUqgB,SAAW,UAC/BqhF,GAAe/nG,OAAOkoG,GAAU7hG,WAe5B8hG,GAAWjqG,KAAKswF,GAAK,EACrBmW,GAAWzuG,GAAM8J,QACjBC,KAAM,SAAU23D,EAAQlgE,GACL,SAAXkgE,IACAA,EAAS,GAAIuvB,KAEF,SAAXzvF,IACAA,EAAS,GAEb4H,KAAKyyG,UAAUn6C,GACft4D,KAAK0yG,UAAUt6G,IAEnBq6G,UAAW,SAAU70G,GAGjB,MAFAoC,MAAK6mF,eAAe,SAAUgB,GAAM54C,OAAOrxC,IAC3CoC,KAAKimF,iBACEjmF,MAEX2yG,UAAW,WACP,MAAO3yG,MAAKs4D,QAEhBtb,OAAQ,SAAUkjC,GACd,MAAOA,IAASA,EAAM5nB,OAAOtb,OAAOh9C,KAAKs4D,SAAW4nB,EAAM9nF,SAAW4H,KAAK5H,QAE9E+D,MAAO,WACH,MAAO,IAAIkpG,IAASrlG,KAAKs4D,OAAOn8D,QAAS6D,KAAK5H,SAElDw6G,QAAS,SAAUvpB,GACf,MAAOrpF,MAAK6yG,SAAS1tB,EAAIkE,KAE7B4C,KAAM,SAAU3F,GAAV,GAKOxrF,GACDg4G,EACAC,EACAC,EAPJlyB,EAAS9gF,KACTizG,EAAgBzsB,EAAqBxmF,KAAKs4D,OAAQt4D,KAAK5H,OAAQ4H,KAAK5H,OAAQkuF,GAC5EuqB,EAAWhpB,GAAMipB,WACjBA,EAAWjpB,GAAMgpB,UACrB,KAAS/1G,EAAI,EAAGA,EAAI,EAAGA,IACfg4G,EAAgBhyB,EAAO+xB,SAASI,EAAc3/E,EAAIx4B,EAAI+tG,IAAUve,cAAchE,GAC9EysB,EAAgBjyB,EAAO+xB,SAASI,EAAc5hG,EAAIvW,EAAI+tG,IAAUve,cAAchE,GAC9E0sB,EAAe,GAAInrB,IAAMirB,EAAcx/E,EAAGy/E,EAAc1hG,GAC5Dw/F,EAAWhpB,GAAM71E,IAAI6+F,EAAUmC,GAC/BlC,EAAWjpB,GAAMpvF,IAAIq4G,EAAUkC,EAEnC,OAAOjmB,IAAKqkB,WAAWP,EAAUC,IAErC+B,SAAU,SAAUxpB,GAAV,GACF9I,GAAMvgF,KACNs4D,EAASioB,EAAIjoB,OACblgE,EAASmoF,EAAInoF,MACjB,OAAO,IAAIyvF,IAAMvvB,EAAOhlC,EAAIl7B,EAASwG,KAAKqpF,IAAIoB,GAAQ/wB,EAAOjnD,EAAIjZ,EAASwG,KAAKspF,IAAImB,KAEvFkoB,cAAe,SAAUnnB,GAAV,GACP7J,GAAMvgF,KACNs4D,EAASioB,EAAIjoB,OACblgE,EAASmoF,EAAInoF,OACb86G,EAAWt0G,KAAKuoC,IAAIijD,EAAM92D,EAAIglC,EAAOhlC,EAAG,GAAK10B,KAAKuoC,IAAIijD,EAAM/4E,EAAIinD,EAAOjnD,EAAG,IAAMzS,KAAKuoC,IAAI/uC,EAAQ,EACrG,OAAO86G,IAEX1B,UAAW,SAAUpnB,EAAOpxF,GAAjB,GACHunF,GAAMvgF,KACNs4D,EAASioB,EAAIjoB,OACblgE,EAASmoF,EAAInoF,OACb+6G,EAAgB76C,EAAOk4C,WAAWpmB,EACtC,OAAOhyF,GAASY,GAASm6G,GAAiBA,GAAiB/6G,EAASY,KAG5EmtF,EAAgBkf,GAASt+F,WAAY,WACrC0hG,GAAe/nG,OAAO2kG,GAASt+F,WAC3B+hG,GAAW,WACXC,IACAroG,OAAQ,SAAU+F,GACdA,EAAMw4F,KAAOj/F,KAAKi/F,KAClBx4F,EAAMy4F,OAASl/F,KAAKk/F,QAExBD,KAAM,SAAUtpB,EAAOztD,GAAjB,GAIUkrF,GAHRhzG,EAAUJ,KAAKI,OACnB,OAAIqjF,GAAQ9N,IACJA,GAASA,EAAMvuD,WAAa0hF,IACxBsK,GAAYz9B,MAAOA,GACnB8N,EAAQv7D,KACRkrF,EAAQlrF,QAAUA,GAEtB9nB,EAAQwjB,IAAI,OAAQwvF,IAEpBhzG,EAAQwjB,IAAI,OAAQ+xD,GAEjB31E,MAEJI,EAAQujB,IAAI,SAEvBu7E,OAAQ,SAAUvpB,EAAO38E,EAAOkvB,GAC5B,MAAIu7D,GAAQ9N,IACR31E,KAAKI,QAAQwjB,IAAI,eAAgB+xD,GAC7B8N,EAAQzqF,IACRgH,KAAKI,QAAQwjB,IAAI,eAAgB5qB,GAEjCyqF,EAAQv7D,IACRloB,KAAKI,QAAQwjB,IAAI,iBAAkBsE,GAEhCloB,MAEJA,KAAKI,QAAQujB,IAAI,YAG5BqlF,GAAuBhV,GAAAA,GAAOsc,SAC9BrH,IACAvoG,OAAQ,SAAU+F,GACdA,EAAMwlF,KAAOjsF,KAAKisF,KAClBxlF,EAAMw/E,eAAiBjmF,KAAKimF,gBAEhCgG,KAAM,SAAUhyD,GAAV,GAGEgyD,GAQAonB,EAVAlB,EAAiB9rB,EAASrmF,KAAKgyG,iBAAiB/3E,IAChDq5E,EAAanB,EAAiBA,GAAAA,EAA4BnJ,EAa9D,OAXIhpG,MAAKuzG,YAAcvzG,KAAKwzG,cAAgBF,EACxCrnB,EAAOjsF,KAAKuzG,WAAWp3G,SAEvB8vF,EAAOjsF,KAAKyzG,MAAMtB,GAClBnyG,KAAKuzG,WAAatnB,EAAOA,EAAK9vF,QAAU,KACxC6D,KAAKwzG,YAAcF,GAEnBD,EAAcrzG,KAAKI,QAAQujB,IAAI,gBAC/B0vF,GAAepnB,GACfA,EAAKolB,OAAOgC,EAAc,GAEvBpnB,GAEXhG,eAAgB,iBACLjmF,MAAKuzG,WACZvzG,KAAKgI,QAAQ,kBAAoBlQ,QAASkI,SAmB9CkpG,GAAiB,OACjB9D,GAASwD,GAAUloG,QACnBC,KAAM,SAAU6rG,EAAUpsG,GACL,SAAbosG,IACAA,EAAW,GAAInH,KAEH,SAAZjlG,IACAA,MAEJwoG,GAAU3kG,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAC7BJ,KAAKwsG,SAASA,GACT/oB,EAAQzjF,KAAKI,QAAQ8+F,SACtBl/F,KAAKk/F,OAAOgK,KAGpBpc,QAAS,WACL,MAAO9sF,MAAK0zG,UAAUznB,QAE1BwnB,MAAO,SAAUntB,GACb,MAAOtmF,MAAK0zG,UAAUznB,KAAK3F,IAE/BisB,eAAgB,SAAUnoB,GACtB,MAAOpqF,MAAKwsG,WAAW+E,cAAcnnB,IAEzConB,UAAW,SAAUpnB,GACjB,MAAOpqF,MAAKwsG,WAAWgF,UAAUpnB,EAAOpqF,KAAKI,QAAQ8+F,OAAOlmG,MAAQ,MAG5EosG,GAAOr+F,UAAUqgB,SAAW,SAC5B2hF,GAAUroG,OAAO0kG,GAAOr+F,WACxBkiG,GAAWvoG,OAAO0kG,GAAOr+F,WACzB+/E,EAAwBse,GAAOr+F,WAAY,aACvCigF,GAAY,GAwBZmiB,GAAe,GACfC,GAAQxqG,KAAKuoC,IACb61D,GAAQpmG,GAAM8J,QACdC,KAAM,SAAU23D,EAAQl4D,GACL,SAAXk4D,IACAA,EAAS,GAAIuvB,KAED,SAAZznF,IACAA,MAEJJ,KAAKyyG,UAAUn6C,GACft4D,KAAK2pF,QAAUvpF,EAAQupF,QACvB3pF,KAAK4pF,QAAUxpF,EAAQwpF,SAAWxpF,EAAQupF,QAC1C3pF,KAAKmpF,WAAa/oF,EAAQ+oF,WAC1BnpF,KAAKspF,SAAWlpF,EAAQkpF,SACxBtpF,KAAKghG,cAAgB5gG,EAAQ4gG,gBAAiB,EAC9ChhG,KAAK6pF,UAAYzpF,EAAQypF,WAE7B1tF,MAAO,WACH,MAAO,IAAI6gG,IAAMh9F,KAAKs4D,QAClBqxB,QAAS3pF,KAAK2pF,QACdC,QAAS5pF,KAAK4pF,QACdT,WAAYnpF,KAAKmpF,WACjBG,SAAUtpF,KAAKspF,SACf0X,cAAehhG,KAAKghG,iBAG5ByR,UAAW,SAAU70G,GAGjB,MAFAoC,MAAK6mF,eAAe,SAAUgB,GAAM54C,OAAOrxC,IAC3CoC,KAAKimF,iBACEjmF,MAEX2yG,UAAW,WACP,MAAO3yG,MAAKs4D,QAEhBs6C,QAAS,SAAUvpB,GAAV,GACD/wB,GAASt4D,KAAKs4D,OACdq7C,EAASxuB,EAAIkE,EACjB,OAAO,IAAIxB,IAAMvvB,EAAOhlC,EAAItzB,KAAK2pF,QAAU/qF,KAAKqpF,IAAI0rB,GAASr7C,EAAOjnD,EAAIrR,KAAK4pF,QAAUhrF,KAAKspF,IAAIyrB,KAEpG1W,YAAa,WAAA,GAULhjE,GAIKn/B,EACD84G,EACAppB,EAfJ1J,EAAS9gF,KACTmpF,EAAanpF,KAAKmpF,WAClB75D,EAAMtvB,KAAKghG,iBAAqB,EAChC/D,GAAej9F,KAAK4yG,QAAQzpB,IAC5B0qB,EAAW7zG,KAAK8zG,eAChBC,EAAgBF,EAASvqB,SAAWuqB,EAAS1qB,WAC7C6qB,EAAoBp1G,KAAK2pD,KAAKwrD,EAAgB5K,IAC9C8K,EAAmBF,EAAgBC,EACnCE,EAAe/qB,CAKnB,KAHInpF,KAAK6pF,YACL5vD,EAAiBI,IAAY8D,OAAOn+B,KAAK6pF,UAAW7pF,KAAKs4D,SAEpDx9D,EAAI,EAAGA,GAAKk5G,EAAmBl5G,IAChC84G,EAAYM,EAAe5kF,EAAM2kF,EACjCzpB,EAAS1J,EAAOqzB,qBAAqBD,EAAcN,EAAW35E,GAClEgjE,EAAYn1F,KAAK0iF,EAAO4pB,IAAK5pB,EAAO6pB,IAAK7pB,EAAOnD,IAChD6sB,EAAeN,CAEnB,OAAO3W,IAEXhR,KAAM,SAAU3F,GAcZ,IAdE,GAeMwsB,GAKAC,EAnBJjyB,EAAS9gF,KACT6zG,EAAW7zG,KAAK8zG,eAChB3qB,EAAa0qB,EAAS1qB,WACtBG,EAAWuqB,EAASvqB,SACpB2pB,EAAgBzsB,EAAqBxmF,KAAKs4D,OAAQt4D,KAAK2pF,QAAS3pF,KAAK4pF,QAAStD,GAC9EI,EAAW9C,EAAIqvB,EAAc3/E,GAC7BqzD,EAAW/C,EAAIqvB,EAAc5hG,GAC7B64E,EAAWlqF,KAAK4yG,QAAQtpB,GAAUgB,cAAchE,GAChDguB,EAAgBxqB,EAAepD,EAAUyC,GACzCorB,EAAgBzqB,EAAenD,EAAUwC,GACzC6pB,EAAehzG,KAAK4yG,QAAQzpB,GAAYmB,cAAchE,GACtDuqB,EAAWhpB,GAAM71E,IAAIghG,EAAc9oB,GACnC4mB,EAAWjpB,GAAMpvF,IAAIu6G,EAAc9oB,GAChCoqB,EAAgBhrB,GAAYirB,EAAgBjrB,GAC3CwpB,EAAgB,OAChBwB,EAAgBhrB,IAChBwpB,EAAgBhyB,EAAO8xB,QAAQ0B,GAAehqB,cAAchE,GAC5DguB,GAAiB,IAEjBvB,EAAgB,OAChBwB,EAAgBjrB,IAChBypB,EAAgBjyB,EAAO8xB,QAAQ2B,GAAejqB,cAAchE,GAC5DiuB,GAAiB,IAErBvB,EAAe,GAAInrB,IAAMirB,EAAcx/E,EAAGy/E,EAAc1hG,GACxDw/F,EAAWhpB,GAAM71E,IAAI6+F,EAAUmC,GAC/BlC,EAAWjpB,GAAMpvF,IAAIq4G,EAAUkC,EAEnC,OAAOjmB,IAAKqkB,WAAWP,EAAUC,IAErCgD,aAAc,WAAA,GAMFU,GALJj0B,EAAMvgF,KACNmpF,EAAa5I,EAAI4I,WACjBG,EAAW/I,EAAI+I,SACf0X,EAAgBzgB,EAAIygB,aASxB,OARIA,KACIwT,EAAWrrB,EACfA,EAAaG,EACbA,EAAWkrB,IAEXrrB,EAAaG,GAAY0X,GAAiB7X,IAAeG,KACzDA,GAAY,MAGZH,WAAYA,EACZG,SAAUA,IAGlB6qB,qBAAsB,SAAUhrB,EAAYG,EAAUrvD,GAAhC,GACdmtD,GAAKpnF,KAAK4yG,QAAQzpB,GAClB9B,EAAKrnF,KAAK4yG,QAAQtpB,GAClBmrB,EAAez0G,KAAK00G,cAAcvrB,GAClCwrB,EAAe30G,KAAK00G,cAAcprB,GAClCp4E,GAAKi0E,EAAImE,GAAYnE,EAAIgE,IAAe,EACxCirB,EAAM,GAAIvsB,IAAMT,EAAG9zD,EAAIpiB,EAAIujG,EAAanhF,EAAG8zD,EAAG/1E,EAAIH,EAAIujG,EAAapjG,GACnEgjG,EAAM,GAAIxsB,IAAMR,EAAG/zD,EAAIpiB,EAAIyjG,EAAarhF,EAAG+zD,EAAGh2E,EAAIH,EAAIyjG,EAAatjG,EAOvE,OANI4oB,KACAmtD,EAAG/sD,UAAUJ,GACbotD,EAAGhtD,UAAUJ,GACbm6E,EAAI/5E,UAAUJ,GACdo6E,EAAIh6E,UAAUJ,KAGdmtD,GAAIA,EACJgtB,IAAKA,EACLC,IAAKA,EACLhtB,GAAIA,IAGZqtB,cAAe,SAAUrrB,GACrB,GAAIsqB,GAASxuB,EAAIkE,EACjB,OAAO,IAAIxB,KAAO7nF,KAAK2pF,QAAU/qF,KAAKspF,IAAIyrB,GAAS3zG,KAAK4pF,QAAUhrF,KAAKqpF,IAAI0rB,KAE/EpC,cAAe,SAAUnnB,GAAV,GAaPmnB,GAIIloB,EAIAurB,EApBJf,EAAW7zG,KAAK8zG,eAChBC,EAAgBF,EAASvqB,SAAWuqB,EAAS1qB,WAC7C5I,EAAMvgF,KACNs4D,EAASioB,EAAIjoB,OACbqxB,EAAUpJ,EAAIoJ,QACdC,EAAUrJ,EAAIqJ,QACdrxB,EAAWD,EAAOk4C,WAAWpmB,GAC7ByqB,EAAWj2G,KAAK87B,MAAM0vD,EAAM/4E,EAAIinD,EAAOjnD,EAAG+4E,EAAM92D,EAAIglC,EAAOhlC,GAC3DwhF,EAAcnrB,EAAUC,EAAUhrF,KAAK45D,KAAK4wC,GAAMzf,EAAS,GAAKyf,GAAMxqG,KAAKspF,IAAI2sB,GAAW,GAAKzL,GAAMxf,EAAS,GAAKwf,GAAMxqG,KAAKqpF,IAAI4sB,GAAW,IAC7IE,EAAa/0G,KAAK4yG,QAAQ5yG,KAAKmpF,YAAY15E,MAAMu3E,IACjDkD,EAAWlqF,KAAK4yG,QAAQ5yG,KAAKspF,UAAU75E,MAAMu3E,IAC7C6E,EAAe3E,EAAiB5uB,EAAQ8xB,EAAM36E,MAAMu3E,IAAY+tB,EAAY7qB,EAYhF,OAVI6pB,GAAgB,IAChBxC,EAAgB1lB,GAAgB5E,EAAY3uB,EAAOk4C,WAAW3kB,GAAetzB,IAAa0uB,EAAY1uB,EAAUu8C,IAE5GzrB,EAAQvB,EAAexvB,EAAOhlC,EAAGglC,EAAOjnD,EAAGs4E,EAASC,EAASQ,EAAM92D,EAAG82D,EAAM/4E,GAClE,MAAVg4E,IACAA,GAAS,IAAMA,GAAS,KAExBurB,EAAef,EAAS1qB,YAAcE,GAASA,GAASwqB,EAASvqB,SACrEioB,EAAgBqD,GAAgB3tB,EAAY1uB,EAAUu8C,KAAiBF,KAAkB/oB,GAAgBA,EAAa7uC,OAAOotC,KAE1HmnB,GAEXC,UAAW,SAAUpnB,EAAOpxF,GAAjB,GAOH47G,GANAf,EAAW7zG,KAAK8zG,eAChBx7C,EAASt4D,KAAKs4D,OACd+wB,EAAQvB,EAAexvB,EAAOhlC,EAAGglC,EAAOjnD,EAAGrR,KAAK2pF,QAAS3pF,KAAK4pF,QAASQ,EAAM92D,EAAG82D,EAAM/4E,EAK1F,OAJc,OAAVg4E,IACAA,GAAS,IAAMA,GAAS,KAExBurB,EAAef,EAAS1qB,YAAcE,GAASA,GAASwqB,EAASvqB,SAC9DsrB,GAAgB50G,KAAK4yG,QAAQvpB,GAAOmnB,WAAWpmB,IAAUpxF,KAGxEgkG,GAAMoU,WAAa,SAAUniG,EAAOvX,EAAK+E,EAAIgqF,EAAI+C,EAAUC,EAAOrlD,GAC9D,GAAI4wE,GAAgB7sB,GAChBnwB,GAAI/oD,EAAMqkB,EACV2kC,GAAIhpD,EAAMoC,EACV6mD,GAAIxgE,EAAI47B,EACR6kC,GAAIzgE,EAAI2Z,EACR5U,GAAIA,EACJgqF,GAAIA,EACJ+C,SAAUA,EACVC,MAAOA,EACPrlD,SAAUA,GAEd,OAAO,IAAI44D,IAAMgY,EAAc18C,QAC3B6wB,WAAY6rB,EAAc7rB,WAC1BG,SAAU0rB,EAAc1rB,SACxBK,QAASqrB,EAAcrrB,QACvBC,QAASorB,EAAcprB,QACvBC,UAAWmrB,EAAcnrB,UACzBmX,cAAyB,IAAVvX,KAGvBtD,EAAgB6W,GAAMj2F,WAClB,UACA,UACA,aACA,WACA,kBAEJ0hG,GAAe/nG,OAAOs8F,GAAMj2F,WA6ExBe,MAAUA,KACVokB,MAASA,IACT9jB,MAAYA,OACZ0J,MAAWA,MACXtL,MAAWA,MACXuB,MAAaA,QACbshG,GAAgBzyG,GAAM8J,QACtBC,KAAM,SAAU0S,GACE,SAAVA,IACAA,MAEJrT,KAAKrI,OAAS,EACdqI,KAAKi1G,QAAQ,EAAG5hG,EAAM1b,OAAQ0b,IAElCoT,SAAU,SAAU7oB,GAChB,MAAIA,IACAoC,KAAKi1G,QAAQ,EAAGj1G,KAAKrI,OAAQiG,GAC7BoC,KAAKqlD,UACErlD,MAEJA,KAAKwG,MAAM,IAEtBsB,KAAM,WAAA,GACE2e,GAAW1rB,UACXiE,EAAS8I,GAAKhB,MAAM9G,KAAMymB,EAE9B,OADAzmB,MAAKk1G,KAAKzuF,GACHznB,GAEXwH,MAAO,WACH,MAAOA,IAAM2B,KAAKnI,OAEtBksB,IAAK,WAAA,GACGv0B,GAASqI,KAAKrI,OACdqH,EAASktB,GAAIplB,MAAM9G,KAIvB,OAHIrI,IACAqI,KAAKm1G,SAASn2G,IAEXA,GAEXoJ,OAAQ,SAAU+J,EAAOynC,GAAjB,GACAnzB,GAAWjgB,GAAM2B,KAAKpN,UAAW,GACjCiE,EAASgB,KAAKi1G,QAAQ9iG,EAAOynC,EAASnzB,EAE1C,OADAzmB,MAAKqlD,UACErmD,GAEX8S,MAAO,WAAA,GACCna,GAASqI,KAAKrI,OACdqH,EAAS8S,GAAMhL,MAAM9G,KAIzB,OAHIrI,IACAqI,KAAKm1G,SAASn2G,IAEXA,GAEX+I,QAAS,WAAA,GACD0e,GAAW1rB,UACXiE,EAAS+I,GAAQjB,MAAM9G,KAAMymB,EAEjC,OADAzmB,MAAKk1G,KAAKzuF,GACHznB,GAEXd,QAAS,SAAUpG,GAAV,GAGI6F,GAFLmjF,EAAS9gF,KACTrI,EAASqI,KAAKrI,MAClB,KAASgG,EAAM,EAAGA,EAAMhG,EAAQgG,IAC5B,GAAImjF,EAAOnjF,KAAS7F,EAChB,MAAO6F,EAGf,WAEJs3G,QAAS,SAAU9iG,EAAOynC,EAASnzB,GAC/B,GAAIznB,GAASoJ,GAAOtB,MAAM9G,MACtBmS,EACAynC,GACFzjC,OAAOsQ,GAGT,OAFAzmB,MAAKo1G,eAAep2G,GACpBgB,KAAKq1G,aAAa5uF,GACXznB,GAEXk2G,KAAM,SAAUzuF,GACZzmB,KAAKq1G,aAAa5uF,GAClBzmB,KAAKqlD,WAET8vD,QAAS,SAAU1uF,GACfzmB,KAAKo1G,eAAe3uF,GACpBzmB,KAAKqlD,WAETgwD,aAAc,SAAU5uF,GAAV,GAED9oB,GADLmjF,EAAS9gF,IACb,KAASrC,EAAM,EAAGA,EAAM8oB,EAAS9uB,OAAQgG,IACrC8oB,EAAS9oB,GAAKowG,YAAYjtB,IAGlCs0B,eAAgB,SAAU3uF,GAAV,GAEH9oB,GADLmjF,EAAS9gF,IACb,KAASrC,EAAM,EAAGA,EAAM8oB,EAAS9uB,OAAQgG,IACrC8oB,EAAS9oB,GAAKqwG,eAAeltB,IAGrCz7B,QAAS,eAGbojD,GAAe/nG,OAAO2oG,GAActiG,WAChCuiG,GAAwBD,GAAc3oG,QACtC2kD,QAAS,WACLrlD,KAAKimF,oBAoCTmF,GAAgBx0F,GAAM8J,QACtBC,KAAM,SAAU+qF,EAAM2O,GACL,SAAT3O,IACAA,EAAO,GAEC,SAAR2O,IACAA,EAAM,GAEVr6F,KAAK0rF,KAAOA,EACZ1rF,KAAKq6F,IAAMA,GAEf/4F,IAAK,SAAUg0G,GACX,MAAO,IAAIlqB,IAAc37E,EAAMzP,KAAK0rF,KAAO4pB,EAAQ5pB,KAAM1E,IAAYv3E,EAAMzP,KAAKq6F,IAAMib,EAAQjb,IAAKrT,MAEvGuuB,YAAa,SAAU33G,GACnB,MAAO,IAAIwtF,IAAcprF,KAAK0rF,KAAO9tF,EAAOoC,KAAKq6F,MAErD9O,OAAQ,WACJ,MAAO,IAAIH,MAAeprF,KAAK0rF,QAAO1rF,KAAKq6F,OAE/C7O,SAAU,SAAU8pB,GAChB,MAAO,IAAIlqB,IAAcprF,KAAK0rF,KAAO4pB,EAAQ5pB,KAAO1rF,KAAKq6F,IAAMib,EAAQjb,IAAKr6F,KAAK0rF,KAAO4pB,EAAQjb,IAAMr6F,KAAKq6F,IAAMib,EAAQ5pB,OAE7HJ,iBAAkB,SAAU1tF,GACxB,MAAO,IAAIwtF,IAAcprF,KAAK0rF,KAAO9tF,EAAOoC,KAAKq6F,IAAMz8F,IAE3DytF,QAAS,SAAU9uC,GAAV,GACDi5D,GAAS52G,KAAK87B,MAAM16B,KAAKq6F,IAAKr6F,KAAK0rF,MACnC1L,EAAIphF,KAAK45D,KAAK55D,KAAKuoC,IAAInnC,KAAKq6F,IAAK,GAAKz7F,KAAKuoC,IAAInnC,KAAK0rF,KAAM,IAC1D+pB,EAAO72G,KAAKuoC,IAAI64C,EAAG,EAAIzjC,EAC3B,OAAO,IAAI6uC,IAAcqqB,EAAO72G,KAAKqpF,IAAIutB,EAASj5D,GAAIk5D,EAAO72G,KAAKspF,IAAIstB,EAASj5D,KAEnFS,OAAQ,SAAUs4D,GACd,MAAOt1G,MAAK0rF,OAAS4pB,EAAQ5pB,MAAQ1rF,KAAKq6F,MAAQib,EAAQjb,KAE9D5O,OAAQ,WACJ,MAAoB,KAAbzrF,KAAKq6F,OA4FhBkP,GAAU3yG,GAAM8J,QAChBC,KAAM,SAAU8sE,EAAQuiB,EAAWH,GAC/B7vF,KAAKytE,OAAOA,GAAU,GAAIoa,KAC1B7nF,KAAKgwF,UAAUA,GACfhwF,KAAK6vF,WAAWA,IAEpB6lB,OAAQ,SAAUC,EAAWrvB,GAArB,GAGAzmB,GAFA+1C,EAAgB51G,KAAKytE,SAAS6c,cAAchE,GAC5CuvB,EAAkBF,EAAUloC,SAAS6c,cAAchE,EAOvD,OAJIzmB,GADA7/D,KAAK6vF,cAAgB8lB,EAAU3lB,YACxBhwF,KAAK81G,kBAAkBF,EAAe51G,KAAK6vF,aAAavF,cAAchE,GAASqvB,EAAU3lB,YAAY1F,cAAchE,GAASuvB,GAE5H71G,KAAK+1G,iBAAiBH,EAAeC,IAIpDE,iBAAkB,SAAU3uB,EAAIC,GAC5B,MAAO0F,IAAKqkB,WAAWhqB,EAAIC,IAE/ByuB,kBAAmB,SAAU1uB,EAAIgtB,EAAKC,EAAKhtB,GAAxB,GACXmD,IACApD,EACAgtB,EACAC,EACAhtB,GAEA2uB,EAAYh2G,KAAKi2G,kBAAkBzrB,EAAQ,KAC3C0rB,EAAYl2G,KAAKi2G,kBAAkBzrB,EAAQ,KAC3C2rB,EAAU5pB,GACVypB,EAAUhkG,IACVgkG,EAAUv9G,IACV2uF,EAAG9zD,EACH+zD,EAAG/zD,IAEH8iF,EAAU7pB,GACV2pB,EAAUlkG,IACVkkG,EAAUz9G,IACV2uF,EAAG/1E,EACHg2E,EAAGh2E,GAEP,OAAO07E,IAAKqkB,WAAW,GAAIvpB,IAAMsuB,EAAQnkG,IAAKokG,EAAQpkG,KAAM,GAAI61E,IAAMsuB,EAAQ19G,IAAK29G,EAAQ39G,OAE/Fw9G,kBAAmB,SAAUzrB,EAAQtsE,GACjC,GAAIm4F,GAAWr2G,KAAKs2G,eAAe9rB,EAAO,GAAGtsE,GAAQssE,EAAO,GAAGtsE,GAAQssE,EAAO,GAAGtsE,GAAQssE,EAAO,GAAGtsE,GACnG,QACIlM,IAAKu4E,EAAiB8rB,EAASrkG,IAAKkM,EAAOssE,GAC3C/xF,IAAK8xF,EAAiB8rB,EAAS59G,IAAKylB,EAAOssE,KAGnD8rB,eAAgB,SAAUt+C,EAAIE,EAAIq+C,EAAIC,GAAtB,GAeRxkG,GAIAvZ,EAlBAmK,EAAIo1D,EAAK,EAAIE,EAAK,EAAIq+C,EAAKC,EAC3B3zG,MAAUm1D,EAAK,EAAIE,EAAKq+C,GACxBntG,EAAI4uD,EAAKE,EACTM,EAAO55D,KAAK45D,KAAK31D,EAAIA,EAAI,EAAID,EAAIwG,GACjCqhF,EAAK,EACLgsB,EAAK,CAiBT,OAhBU,KAAN7zG,EACU,IAANC,IACA4nF,EAAKgsB,GAAMrtG,EAAIvG,GAEX6S,MAAM8iD,KACdiyB,IAAO5nF,EAAI21D,IAAS,EAAI51D,GACxB6zG,IAAO5zG,EAAI21D,IAAS,EAAI51D,IAExBoP,EAAMpT,KAAKnG,IAAImG,KAAKoT,IAAIy4E,EAAIgsB,GAAK,IACjCzkG,EAAM,GAAKA,EAAM,KACjBA,EAAM,GAENvZ,EAAMmG,KAAKoT,IAAIpT,KAAKnG,IAAIgyF,EAAIgsB,GAAK,IACjCh+G,EAAM,GAAKA,EAAM,KACjBA,EAAM,IAGNuZ,IAAKA,EACLvZ,IAAKA,IAGbi+G,iBAAkB,SAAU5kB,EAAS1H,GACjC,GAAIusB,EAWJ,OATIA,GADA32G,KAAK6vF,cAAgBiC,EAAQ9B,YACRhE,GACjBhsF,KAAKytE,SACLztE,KAAK6vF,aACLiC,EAAQ9B,YACR8B,EAAQrkB,UACT2c,EAAOpqF,KAAK01G,OAAO5jB,IAEDzF,EAAuBrsF,KAAKytE,SAAUqkB,EAAQrkB,SAAU2c,IAIrFwsB,aAAc,SAAU9kB,EAAS1H,EAAOpxF,EAAO69G,GAAjC,GAGFzvB,GACAC,EACAC,EACAwvB,EAMAtsB,EASApmD,EACA2yE,EArBJ9qB,EAAOjsF,KAAK01G,OAAO5jB,GAASuf,OAAOr4G,EAAOA,EAC9C,IAAIizF,EAAKslB,cAAcnnB,GAKnB,MAJIhD,GAAKpnF,KAAKytE,SACV4Z,EAAKrnF,KAAK6vF,aACVvI,EAAKwK,EAAQ9B,YACb8mB,EAAKhlB,EAAQrkB,SACE,UAAfopC,GAA0BzvB,EAAGopB,WAAWpmB,IAAUpxF,GAC1CixF,EAAgB7C,EAAIC,EAAI+C,GACV,QAAfysB,GAAwBC,EAAGtG,WAAWpmB,IAAUpxF,GAC/CixF,EAAgB6sB,EAAIxvB,EAAI8C,IAEhCI,GACApD,EACAC,EACAC,EACAwvB,MAEAnrB,EAAgBnB,EAAQJ,EAAO,IAAK,IAAKpxF,KAAU2yF,EAAgBnB,EAAQJ,EAAO,IAAK,IAAKpxF,MAG5ForC,EAAW/J,IAAY8D,OAAO,GAAIisD,GAClC2sB,GACA3vB,EAAGkD,cAAclmD,GACjBijD,EAAGiD,cAAclmD,GACjBkjD,EAAGgD,cAAclmD,GACjB0yE,EAAGxsB,cAAclmD,IAEdunD,EAAgBorB,EAAe3sB,EAAO,IAAK,IAAKpxF,IAAU2yF,EAAgBorB,EAAe3sB,EAAO,IAAK,IAAKpxF,MAGzHg+G,YAAa,SAAUllB,EAAS1H,EAAOpxF,GAA1B,GACLouF,GAAKpnF,KAAKytE,SACV4Z,EAAKyK,EAAQrkB,SACb4b,EAAQzF,EAAIhlF,KAAK87B,MAAM2sD,EAAGh2E,EAAI+1E,EAAG/1E,EAAGg2E,EAAG/zD,EAAI8zD,EAAG9zD,IAC9CusC,EAAO,GAAIktB,KACX3F,EAAG9zD,EACH8zD,EAAG/1E,EAAIrY,EAAQ,IAEfouF,EAAGopB,WAAWnpB,GACdruF,GAEJ,OAAO6mE,GAAK0xC,cAAcnnB,EAAME,cAAcjwD,IAAY8D,QAAQkrD,EAAOjC,MAE7E6vB,YAAa,SAAUnlB,EAAS1H,EAAOpxF,EAAO69G,GAC1C,GAAIK,EAMJ,OAJIA,GADAl3G,KAAK6vF,cAAgBiC,EAAQ9B,YAClBhwF,KAAK42G,aAAa9kB,EAAS1H,EAAOpxF,EAAQ,EAAG69G,GAE7C72G,KAAKg3G,YAAYllB,EAAS1H,EAAOpxF,MAKxDgxF,EAAqBuf,GAAQxiG,WACzB,SACA,YACA,eAEJ0hG,GAAe/nG,OAAO6oG,GAAQxiG,WAc1Bi4F,GAAO4J,GAAUloG,QACjBC,KAAM,SAAUP,GACZwoG,GAAU3kG,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAC7BJ,KAAKiyF,SAAW,GAAIqX,IACpBtpG,KAAKiyF,SAAS8b,YAAY/tG,MACrByjF,EAAQzjF,KAAKI,QAAQ8+F,UACtBl/F,KAAKk/F,OAAO,QACPzb,EAAQzjF,KAAKI,QAAQ8+F,OAAOiY,WAC7Bn3G,KAAKI,QAAQwjB,IAAI,kBAAmB,WAIhDijB,OAAQ,SAAUvT,EAAGjiB,GAKjB,MAJArR,MAAKouG,UACLpuG,KAAKiyF,SAASxrE,aACdzmB,KAAKquG,SACLruG,KAAKmyF,OAAO7+D,EAAGjiB,GACRrR,MAEXmyF,OAAQ,SAAU7+D,EAAGjiB,GAAb,GACA+4E,GAAQ3G,EAAQpyE,GAAK,GAAIw2E,IAAMv0D,EAAGjiB,GAAKiiB,EACvCw+D,EAAU,GAAIyX,IAAQnf,EAE1B,OADApqF,MAAKiyF,SAASnqF,KAAKgqF,GACZ9xF,MAEXk9F,QAAS,SAAUrN,EAAYG,EAAW5F,GAAjC,GAEGgtB,GACAtlB,CAMR,OARI9xF,MAAKiyF,SAASt6F,OAAS,IACnBy/G,EAAcznF,EAAK3vB,KAAKiyF,UACxBH,EAAU,GAAIyX,IAAQnf,EAAO4F,GACjChwF,KAAKouG,UACLgJ,EAAYvnB,WAAWA,GACvB7vF,KAAKquG,SACLruG,KAAKiyF,SAASnqF,KAAKgqF,IAEhB9xF,MAEXq3G,IAAK,SAAUluB,EAAYG,EAAUK,EAASC,EAASoX,GAAlD,GAEOoW,GACA3pC,EACAx+D,EACAqpD,EACA++C,CASR,OAdIr3G,MAAKiyF,SAASt6F,OAAS,IACnBy/G,EAAcznF,EAAK3vB,KAAKiyF,UACxBxkB,EAAS2pC,EAAY3pC,SACrBx+D,EAAQk2E,EAAIgE,GACZ7wB,EAAS,GAAIuvB,IAAMpa,EAAOn6C,EAAIq2D,EAAU/qF,KAAKqpF,IAAIh5E,GAAQw+D,EAAOp8D,EAAIu4E,EAAUhrF,KAAKspF,IAAIj5E,IACvFooG,EAAM,GAAIra,IAAM1kC,GAChB6wB,WAAYA,EACZG,SAAUA,EACVK,QAASA,EACTC,QAASA,EACToX,cAAeA,IAEnBhhG,KAAKs3G,gBAAgBD,IAElBr3G,MAEXu3G,MAAO,SAAU7/G,EAAK+E,EAAIgqF,EAAI+C,EAAUC,EAAOrlD,GAAxC,GAEKgzE,GACA3pC,EACA4pC,CAGR,OANIr3G,MAAKiyF,SAASt6F,OAAS,IACnBy/G,EAAcznF,EAAK3vB,KAAKiyF,UACxBxkB,EAAS2pC,EAAY3pC,SACrB4pC,EAAMra,GAAMoU,WAAW3jC,EAAQ/1E,EAAK+E,EAAIgqF,EAAI+C,EAAUC,EAAOrlD,GACjEpkC,KAAKs3G,gBAAgBD,IAElBr3G,MAEXs3G,gBAAiB,SAAUD,GAAV,GAGTpa,GACKniG,EAHLgmF,EAAS9gF,IAGb,KAFAA,KAAKouG,UACDnR,EAAcoa,EAAIpa,cACbniG,EAAI,EAAGA,EAAImiG,EAAYtlG,OAAQmD,GAAK,EACzCgmF,EAAOoc,QAAQD,EAAYniG,GAAImiG,EAAYniG,EAAI,GAAImiG,EAAYniG,EAAI,GAEvEkF,MAAKquG,SACLruG,KAAKimF,kBAETnY,MAAO,WAGH,MAFA9tE,MAAKI,QAAQgyF,QAAS,EACtBpyF,KAAKimF,iBACEjmF,MAEX8sF,QAAS,WACL,MAAO9sF,MAAKyzG,SAEhBlB,eAAgB,SAAUnoB,GAAV,GAIR/mD,GAAU13B,EACLhO,EAJLs0F,EAAWjyF,KAAKiyF,SAChBt6F,EAASs6F,EAASt6F,OAClBg/G,EAAqB,CAEzB,KAASh5G,EAAM,EAAGA,EAAMhG,EAAQgG,IAC5B0lC,EAAW4uD,EAASt0F,EAAM,GAC1BgO,EAAUsmF,EAASt0F,GACnBg5G,GAAsBtzE,EAASqzE,iBAAiB/qG,EAASy+E,EAK7D,QAHIpqF,KAAKI,QAAQgyF,QAAWH,EAAS,GAAGxkB,SAASzwB,OAAOi1C,EAASt6F,EAAS,GAAG81E,YACzEkpC,GAAsBtqB,EAAuB4F,EAAS,GAAGxkB,SAAUwkB,EAASt6F,EAAS,GAAG81E,SAAU2c,IAE/FusB,EAAqB,IAAM,GAEtCnF,UAAW,SAAUpnB,EAAOpxF,GAAjB,GAQM2E,GAPTs0F,EAAWjyF,KAAKiyF,SAChBt6F,EAASs6F,EAASt6F,OAClB6/G,EAAYx+G,GAASgH,KAAKI,QAAQ8+F,OAAOlmG,KAC7C,IAAIrB,EAAS,EAAG,CACZ,GAAIs6F,EAAS,GAAGglB,YAAYhlB,EAAS,GAAI7H,EAAOotB,EAAW,SACvD,OAAO,CAEX,KAAS75G,EAAM,EAAGA,GAAOhG,EAAS,EAAGgG,IACjC,GAAIs0F,EAASt0F,EAAM,GAAGs5G,YAAYhlB,EAASt0F,GAAMysF,EAAOotB,GACpD,OAAO,CAGf,IAAIvlB,EAASt6F,EAAS,GAAGs/G,YAAYhlB,EAASt6F,EAAS,GAAIyyF,EAAOotB,EAAW,OACzE,OAAO,EAGf,OAAO,GAEX/D,MAAO,SAAUntB,GAAV,GAGCsG,GAEInf,EAGK3yE,EACD28G,EARRxlB,EAAWjyF,KAAKiyF,SAChBt6F,EAASs6F,EAASt6F,MAEtB,IAAe,IAAXA,EACI81E,EAASwkB,EAAS,GAAGxkB,SAAS6c,cAAchE,GAChDsG,EAAc,GAAIG,IAAKtf,EAAQk7B,GAAK34F,UACjC,IAAIrY,EAAS,EAChB,IAASmD,EAAI,EAAGA,EAAInD,EAAQmD,IACpB28G,EAAaxlB,EAASn3F,EAAI,GAAG46G,OAAOzjB,EAASn3F,GAAIwrF,GAEjDsG,EADAA,EACcG,GAAKC,MAAMJ,EAAa6qB,GAExBA,CAI1B,OAAO7qB,MAGfoS,GAAKkF,SAAW,SAAUrkC,EAAMz/D,GAC5B,MAAO,IAAI4+F,IAAK5+F,GAASymC,OAAOg5B,EAAKoxC,WAAW9e,OAAOtyB,EAAKqxC,YAAY/e,OAAOtyB,EAAKusB,eAAe+F,OAAOtyB,EAAKsxC,cAAcrjC;EAEjIkxB,GAAKoS,WAAa,SAAU5mB,EAAQpqF,GAAlB,GAENqnC,GACK3sC,EACDsvF,CAHZ,IAAII,EAAQ,CAER,IADI/iD,EAAO,GAAIu3D,IAAK5+F,GACXtF,EAAI,EAAGA,EAAI0vF,EAAO7yF,OAAQmD,IAC3BsvF,EAAQvC,GAAM54C,OAAOu7C,EAAO1vF,IAC5BsvF,IACU,IAANtvF,EACA2sC,EAAKZ,OAAOujD,GAEZ3iD,EAAK0qD,OAAO/H,GAIxB,OAAO3iD,KAGfu3D,GAAK0Y,QAAU,SAAUL,EAAKj3G,GAAf,GACPqnC,GAAO,GAAIu3D,IAAK5+F,GAChB+oF,EAAakuB,EAAIluB,WACjBl6E,EAAQooG,EAAIzE,QAAQzpB,EAGxB,OAFA1hD,GAAKZ,OAAO53B,EAAMqkB,EAAGrkB,EAAMoC,GAC3Bo2B,EAAK4vE,IAAIluB,EAAYkuB,EAAI/tB,SAAU+tB,EAAI1tB,QAAS0tB,EAAIztB,QAASytB,EAAIrW,eAC1Dv5D,GAEXu3D,GAAKj4F,UAAUqgB,SAAW,OAC1B2hF,GAAUroG,OAAOs+F,GAAKj4F,WACtBkiG,GAAWvoG,OAAOs+F,GAAKj4F,WACnByiG,GAAmB,OACnBC,GAAMb,GAAUloG,QAChBC,KAAM,SAAU6rG,EAAUpsG,GACL,SAAbosG,IACAA,EAAW,GAAIxP,KAEH,SAAZ58F,IACAA,MAEJwoG,GAAU3kG,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAC7BJ,KAAKwsG,SAASA,GACT/oB,EAAQzjF,KAAKI,QAAQ8+F,SACtBl/F,KAAKk/F,OAAOsK,KAGpBiK,MAAO,SAAUntB,GACb,MAAOtmF,MAAK0zG,UAAUznB,KAAK3F,IAE/BwG,QAAS,WACL,MAAO9sF,MAAKwsG,WAAWvgB,QAE3B0rB,OAAQ,WAAA,GAKS78G,GAJT2sC,EAAO,GAAIu3D,IACX/B,EAAcj9F,KAAKwsG,WAAWvP,aAClC,IAAIA,EAAYtlG,OAAS,EAErB,IADA8vC,EAAKZ,OAAOo2D,EAAY,GAAG3pE,EAAG2pE,EAAY,GAAG5rF,GACpCvW,EAAI,EAAGA,EAAImiG,EAAYtlG,OAAQmD,GAAK,EACzC2sC,EAAKy1D,QAAQD,EAAYniG,GAAImiG,EAAYniG,EAAI,GAAImiG,EAAYniG,EAAI,GAGzE,OAAO2sC,IAEX8qE,eAAgB,SAAUnoB,GACtB,MAAOpqF,MAAKwsG,WAAW+E,cAAcnnB,IAEzConB,UAAW,SAAUpnB,GACjB,MAAOpqF,MAAKwsG,WAAWgF,UAAUpnB,EAAOpqF,KAAKI,QAAQ8+F,OAAOlmG,MAAQ,MAG5EywG,GAAI1iG,UAAUqgB,SAAW,MACzB2hF,GAAUroG,OAAO+oG,GAAI1iG,WACrBkiG,GAAWvoG,OAAO+oG,GAAI1iG,WACtB+/E,EAAwB2iB,GAAI1iG,WAAY,aAmCpC2iG,GAAYd,GAAUloG,QACtBC,KAAM,SAAUP,GACZwoG,GAAU3kG,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAC7BJ,KAAKs6C,MAAQ,GAAIgvD,IACjBtpG,KAAKs6C,MAAMyzD,YAAY/tG,MAClByjF,EAAQzjF,KAAKI,QAAQ8+F,SACtBl/F,KAAKk/F,OAAO,SAGpBr4D,OAAQ,SAAUvT,EAAGjiB,GACjB,GAAIo2B,GAAO,GAAIu3D,GAGf,OAFAv3D,GAAKZ,OAAOvT,EAAGjiB,GACfrR,KAAKs6C,MAAMxyC,KAAK2/B,GACTznC,MAEXmyF,OAAQ,SAAU7+D,EAAGjiB,GAIjB,MAHIrR,MAAKs6C,MAAM3iD,OAAS,GACpBg4B,EAAK3vB,KAAKs6C,OAAO63C,OAAO7+D,EAAGjiB,GAExBrR,MAEXk9F,QAAS,SAAUrN,EAAYG,EAAW5F,GAItC,MAHIpqF,MAAKs6C,MAAM3iD,OAAS,GACpBg4B,EAAK3vB,KAAKs6C,OAAO4iD,QAAQrN,EAAYG,EAAW5F,GAE7CpqF,MAEXq3G,IAAK,SAAUluB,EAAYG,EAAUK,EAASC,EAASoX,GAInD,MAHIhhG,MAAKs6C,MAAM3iD,OAAS,GACpBg4B,EAAK3vB,KAAKs6C,OAAO+8D,IAAIluB,EAAYG,EAAUK,EAASC,EAASoX,GAE1DhhG,MAEXu3G,MAAO,SAAU7/G,EAAK+E,EAAIgqF,EAAI+C,EAAUC,EAAOrlD,GAI3C,MAHIpkC,MAAKs6C,MAAM3iD,OAAS,GACpBg4B,EAAK3vB,KAAKs6C,OAAOi9D,MAAM7/G,EAAK+E,EAAIgqF,EAAI+C,EAAUC,EAAOrlD,GAElDpkC,MAEX8tE,MAAO,WAIH,MAHI9tE,MAAKs6C,MAAM3iD,OAAS,GACpBg4B,EAAK3vB,KAAKs6C,OAAOwzB,QAEd9tE,MAEXyzG,MAAO,SAAUntB,GACb,MAAOoG,GAAoB1sF,KAAKs6C,OAAO,EAAMgsC,IAEjDwG,QAAS,WACL,MAAOJ,GAAoB1sF,KAAKs6C,OAAO,IAE3Ci4D,eAAgB,SAAUnoB,GAAV,GAEHzsF,GADL28C,EAAQt6C,KAAKs6C,KACjB,KAAS38C,EAAM,EAAGA,EAAM28C,EAAM3iD,OAAQgG,IAClC,GAAI28C,EAAM38C,GAAK40G,eAAenoB,GAC1B,OAAO,CAGf,QAAO,GAEXonB,UAAW,SAAUpnB,GAAV,GAGEzsF,GAFL28C,EAAQt6C,KAAKs6C,MACbthD,EAAQgH,KAAKI,QAAQ8+F,OAAOlmG,KAChC,KAAS2E,EAAM,EAAGA,EAAM28C,EAAM3iD,OAAQgG,IAClC,GAAI28C,EAAM38C,GAAK6zG,UAAUpnB,EAAOpxF,GAC5B,OAAO,CAGf,QAAO,GAEXo5G,aAAc,SAAUn4E,GACpB,MAAOgzD,GAA2BjtF,KAAKs6C,MAAOt6C,KAAKgyG,iBAAiB/3E,OAG5EyvE,GAAU3iG,UAAUqgB,SAAW,YAC/B2hF,GAAUroG,OAAOgpG,GAAU3iG,WAC3BkiG,GAAWvoG,OAAOgpG,GAAU3iG,WACxB4iG,GAAe,kBACfC,GAAe,OACfC,GAAOjB,GAAUloG,QACjBC,KAAM,SAAU20D,EAASt7D,EAAUoG,GACd,SAAbpG,IACAA,EAAW,GAAI6tF,KAEH,SAAZznF,IACAA,MAEJwoG,GAAU3kG,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAC7BJ,KAAKs1D,QAAQA,GACbt1D,KAAKhG,SAASA,GACTgG,KAAKI,QAAQ24F,OACd/4F,KAAKI,QAAQ24F,KAAO4Q,IAEnBlmB,EAAQzjF,KAAKI,QAAQ6+F,OACtBj/F,KAAKi/F,KAAK2K,KAGlBt0C,QAAS,SAAU13D,GACf,MAAI6lF,GAAQ7lF,IACRoC,KAAKI,QAAQwjB,IAAI,UAAWhmB,GACrBoC,MAEJA,KAAKI,QAAQujB,IAAI,YAE5B69C,QAAS,WACL,GAAIo2C,GAAUpP,GAAUxmB,YAAYhiF,KAAKs1D,WAAayjC,KAAM/4F,KAAKI,QAAQujB,IAAI,SAC7E,OAAOi0F,IAEX/3C,KAAM,WAAA,GACE9hE,GAAOiC,KAAKwhE,UACZ6O,EAAMrwE,KAAKhG,WAAWmC,OAC1B,OAAO,IAAI4wF,IAAK1c,GACZtyE,EAAK/E,MACL+E,EAAK9E,UAGbgzF,KAAM,SAAUhyD,GACZ,GAAIk4E,GAAiB9rB,EAASrmF,KAAKgyG,iBAAiB/3E,GACpD,OAAOj6B,MAAK6/D,OAAOosB,KAAKkmB,IAE5BrlB,QAAS,WACL,MAAO9sF,MAAK6/D,OAAOosB,QAEvBsmB,eAAgB,SAAUnoB,GACtB,MAAOpqF,MAAK6/D,OAAO0xC,cAAcnnB,MAGzCyf,GAAK9iG,UAAUqgB,SAAW,OAC1B2hF,GAAUroG,OAAOmpG,GAAK9iG,WACtBijF,EAAqB6f,GAAK9iG,WAAY,aAClCo7F,GAAUyG,GAAUloG,QACpBC,KAAM,SAAU4zE,EAAK1U,EAAMz/D,GACV,SAATy/D,IACAA,EAAO,GAAIktB,KAEC,SAAZ3sF,IACAA,MAEJwoG,GAAU3kG,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAC7BJ,KAAKu0E,IAAIA,GACTv0E,KAAK6/D,KAAKA,IAEd0U,IAAK,SAAU32E,GACX,MAAI6lF,GAAQ7lF,IACRoC,KAAKI,QAAQwjB,IAAI,MAAOhmB,GACjBoC,MAEJA,KAAKI,QAAQujB,IAAI,QAE5BsoE,KAAM,SAAUhyD,GACZ,GAAIk4E,GAAiB9rB,EAASrmF,KAAKgyG,iBAAiB/3E,GACpD,OAAOj6B,MAAK63G,MAAM5rB,KAAKkmB,IAE3BrlB,QAAS,WACL,MAAO9sF,MAAK63G,MAAM5rB,QAEtBsmB,eAAgB,SAAUnoB,GACtB,MAAOpqF,MAAK63G,MAAMtG,cAAcnnB,IAEpCkoB,SAAU,WACN,MAAOtyG,MAAKu0E,SAGpB4tB,GAAQp7F,UAAUqgB,SAAW,QAC7B0/D,EAAwBqb,GAAQp7F,WAAY,SACxC+iG,IACAppG,OAAQ,SAAU+F,EAAO+jD,GACrB/jD,EAAMqxG,SAAW,SAAUj3F,GAAV,GAEJ/lB,GACD82B,EAFJj3B,EAAWqF,KAAKwqD,EACpB,KAAS1vD,EAAI,EAAGA,EAAIH,EAAShD,OAAQmD,IAC7B82B,EAAQj3B,EAASG,GACjB82B,EAAMkmF,SACNlmF,EAAMkmF,SAASj3F,GAEfA,EAAS+Q,EAGjB,OAAO5xB,SAIf0xF,GAAQkX,GAAUloG,QAClBC,KAAM,SAAUP,GACZwoG,GAAU3kG,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAC7BJ,KAAKrF,aAETo9G,eAAgB,SAAU1gF,EAAQ3Q,EAAOvU,GACrCnS,KAAKgI,QAAQ,kBACTqvB,OAAQA,EACR3Q,MAAOA,EACPvU,MAAOA,KAGfqyB,OAAQ,WAIJ,MAHAA,GAAOxkC,KAAKrF,SAAUI,WACtBiF,KAAKg4G,UAAUj9G,UAAWiF,MAC1BA,KAAK+3G,eAAe,MAAOh9G,WACpBiF,MAEX6jD,OAAQ,SAAU1xC,EAAOra,GAIrB,MAHAkI,MAAKrF,SAASyN,OAAO+J,EAAO,EAAGra,GAC/BA,EAAQ6B,OAASqG,KACjBA,KAAK+3G,eAAe,OAAQjgH,GAAUqa,GAC/BnS,MAEXi4G,SAAU,SAAUngH,EAASqa,GACzB,MAAOnS,MAAK6jD,OAAO1xC,EAAOra,IAE9BuwB,OAAQ,SAAUvwB,GACd,GAAIqa,GAAQnS,KAAKrF,SAASuD,QAAQpG,EAMlC,OALIqa,IAAS,IACTnS,KAAKrF,SAASyN,OAAO+J,EAAO,GAC5Bra,EAAQ6B,OAAS,KACjBqG,KAAK+3G,eAAe,UAAWjgH,GAAUqa,IAEtCnS,MAEXk4G,SAAU,SAAU/lG,GAChB,GAAI,GAAKA,GAASA,EAAQnS,KAAKrF,SAAShD,OAAQ,CAC5C,GAAIG,GAAUkI,KAAKrF,SAASwX,EAC5BnS,MAAKrF,SAASyN,OAAO+J,EAAO,GAC5Bra,EAAQ6B,OAAS,KACjBqG,KAAK+3G,eAAe,UAAWjgH,GAAUqa,GAE7C,MAAOnS,OAEX+/C,MAAO,WACH,GAAIr5B,GAAQ1mB,KAAKrF,QAIjB,OAHAqF,MAAKrF,YACLqF,KAAKg4G,UAAUtxF,EAAO,MACtB1mB,KAAK+3G,eAAe,SAAUrxF,EAAO,GAC9B1mB,MAEXisF,KAAM,SAAUhyD,GACZ,MAAOyyD,GAAoB1sF,KAAKrF,UAAU,EAAMqF,KAAKgyG,iBAAiB/3E,KAE1E6yD,QAAS,WACL,MAAOJ,GAAoB1sF,KAAKrF,UAAU,IAE9Cy3G,aAAc,SAAUn4E,GACpB,MAAOgzD,GAA2BjtF,KAAKrF,SAAUqF,KAAKgyG,iBAAiB/3E,KAE3E+3E,iBAAkB,SAAU/3E,GACxB,MAAO2uE,IAAU7hG,UAAUirG,iBAAiB7pG,KAAKnI,KAAMi6B,IAAmB,MAE9Es3E,cAAe,SAAUnnB,EAAO0nB,GAAjB,GAEHn3G,GACA0/B,EACK18B,CAHb,IAAIqC,KAAKwD,UAGL,IAFI7I,EAAWqF,KAAKrF,SAChB0/B,EAAYr6B,KAAKgyG,iBAAiBF,GAC7Bn0G,EAAM,EAAGA,EAAMhD,EAAShD,OAAQgG,IACrC,GAAIhD,EAASgD,GAAK4zG,cAAcnnB,EAAO/vD,GACnC,OAAO,CAInB,QAAO,GAEX29E,UAAW,SAAUvxF,EAAU0xF,GAApB,GAEEr9G,GACD82B,EACAj4B,EAHJmnF,EAAS9gF,IACb,KAASlF,EAAI,EAAGA,EAAI2rB,EAAS9uB,OAAQmD,IAC7B82B,EAAQnL,EAAS3rB,GACjBnB,EAASi4B,EAAMj4B,OACfA,GAAUA,IAAWmnF,GAAUnnF,EAAO0uB,QACtC1uB,EAAO0uB,OAAOuJ,GAElBA,EAAMj4B,OAASw+G,KAI3BzmB,GAAM3qF,UAAUqgB,SAAW,QAC3B0iF,GAAYppG,OAAOgxF,GAAM3qF,UAAW,YA+BhCq7E,IACAg2B,aAAc,QACdC,eAAgB,QAChBC,WAAY,QACZC,QAAS,EACTC,YAAa,aACbC,YAAa,EACb5/G,MAAM,EACN6/G,QAAQ,GAER1/E,GAAU,SAAUvS,EAAU5F,GAC9B4F,EAASuS,QAAQnY,IAEjBkpF,GAAiB,SAAUtjF,EAAU5F,GAApB,GAERljB,GADLhG,EAAS8uB,EAAS9uB,MACtB,KAASgG,EAAMhG,EAAS,EAAGgG,GAAO,EAAGA,IACjCkjB,EAAS4F,EAAS9oB,GAAMA,IAG5B+4D,GAASg7B,GAAMhxF,QACfC,KAAM,SAAUk/D,EAAMz/D,GAClBsxF,GAAMztF,GAAGtD,KAAKwH,KAAKnI,KAAMvJ,EAAEiK,UAAW0hF,GAAiBhiF,IACvDJ,KAAK63G,MAAQh4C,EACb7/D,KAAK24G,cAET94C,KAAM,SAAUjiE,GACZ,MAAIA,IACAoC,KAAK63G,MAAQj6G,EACNoC,MAEJA,KAAK63G,OAEhBe,SAAU,WAAA,GACFx4G,GAAUJ,KAAKI,QACfy4G,EAAW74G,KAAK24G,SACQ,gBAAxBv4G,EAAQo4G,aACRK,EAAStrB,UAAY,QACrBsrB,EAASC,gBAAkB,SAC3BD,EAASE,UAAY,IACrBF,EAASG,WAAa,MAEtBH,EAAStrB,UAAY,SACrBsrB,EAASC,gBAAkB,QAC3BD,EAASE,UAAY,IACrBF,EAASG,WAAa,KAEtB54G,EAAQE,SACRN,KAAKg5B,QAAU+wE,GACf/pG,KAAKi5G,aAAezrB,KAEpBxtF,KAAKg5B,QAAUA,GACfh5B,KAAKi5G,aAAe5rB,IAG5B6rB,OAAQ,WAAA,GASA94G,GACAy/D,EACA0gB,EACA//B,EACA24D,EACAC,EACA7rB,EACAurB,EACAC,EACAC,EACAK,EACAC,EACAv7G,EACAw7G,EACAC,EAAc/kE,EAAOglE,EACrBC,EAOKC,EAWDv8E,EACAw8E,EACAC,EACAC,EACAhrB,EA7CJhO,EAAS9gF,IACb,IAAKA,KAAK63G,OAAkC,IAAzB73G,KAAKrF,SAAShD,OAAjC,CA6BA,IA1BAqI,KAAK44G,WACD54G,KAAKI,QAAQi6B,WACbr6B,KAAKq6B,UAAU,MAEfj6B,EAAUJ,KAAKI,QACfy/D,EAAO7/D,KAAK63G,MACZt3B,EAAMvgF,KAAK+5G,cACXv5D,EAAS+/B,EAAI//B,OACb24D,EAAa54B,EAAI44B,WACjBC,EAAQp5G,KAAK24G,UACbprB,EAAY6rB,EAAM7rB,UAClBurB,EAAkBM,EAAMN,gBACxBC,EAAYK,EAAML,UAClBC,EAAaI,EAAMJ,WACnBK,EAAc,GAAIxxB,IAClByxB,EAAgB,GAAIzxB,IACpB9pF,EAAO,GAAI4qG,IACX4Q,EAAalsB,EAAW8rB,EAAYt5C,EAAMz/D,EAAQg4G,aAAcY,EAAYF,GAE5EY,EAAkB,SAAUztB,EAAMtuF,GAClC,GAAI7F,GAAU28C,EAAMhuB,SAAS9oB,EAC7B27G,GAAcP,GAAaS,EAC3BF,EAAcN,GAAc3rB,EAAWpB,EAAKluF,KAAK+6G,GAAkBW,EAAUr5G,EAAQk4G,WAAYU,EAAYF,GAC7G3rB,EAAiBmsB,EAAertB,EAAMn0F,GACtC0hH,GAAgBvtB,EAAKluF,KAAKwvF,GAAantF,EAAQm4G,SAE1CoB,EAAW,EAAGA,EAAWn5D,EAAO7oD,OAAQgiH,IAC7CllE,EAAQ+L,EAAOm5D,GACfN,EAAYN,GAAaS,EAAe14B,EAAOm4B,aAAaxkE,EAAM12C,KAAM8hE,EAAMz/D,EAAQi4G,eAAgBU,EAAWxrB,GACjH8rB,EAAYL,GAAcO,EAC1Bx7G,EAAKwvF,GAAa94C,EAAM12C,KACxBA,EAAK+6G,GAAmBrkE,EAAMulE,SAC9BP,EAAW,GAAI1sB,IAAKssB,EAAat7G,GACjC+iF,EAAO9nD,QAAQyb,EAAMwlE,OAAQP,GAC7BH,GAAc9kE,EAAMulE,SAAW55G,EAAQq4G,aAEtCr4G,EAAQvH,MAAQ47C,EAAM12C,KAAO8hE,EAAK9hE,KAAKwvF,KACpCnwD,EAAQyiC,EAAK9hE,KAAKwvF,GAAaksB,EAAS17G,KAAKwvF,GAC7CqsB,EAAcH,EAASxI,UAAU7zE,MAAMA,EAAOA,GAC9Cy8E,EAAaJ,EAAS17G,KAAK+6G,GAAmB17E,EAC9C08E,EAAWzsB,EAAWwsB,EAAYh6C,EAAMz/D,EAAQg4G,aAAcY,EAAYF,GAC1EhqB,EAAez0D,IACD,MAAd0+E,EACAjqB,EAAarxD,UAAUoiC,EAAKp8B,OAAOnQ,EAAIsmF,EAAYtmF,EAAGwmF,EAAWF,EAAYvoG,GAE7Ey9E,EAAarxD,UAAUq8E,EAAWF,EAAYtmF,EAAGusC,EAAKp8B,OAAOpyB,EAAIuoG,EAAYvoG,GAEjFy9E,EAAa1xD,MAAMA,EAAOA,GAC1Bp9B,KAAKq6B,UAAUy0D,MAGvBirB,YAAa,WAAA,GAgBAp8G,GACD7F,EACAm0F,EAjBJnL,EAAS9gF,KACTugF,EAAMvgF,KACNI,EAAUmgF,EAAIngF,QACdzF,EAAW4lF,EAAI5lF,SACf89G,EAAcr4G,EAAQq4G,YACtB5/G,EAAOuH,EAAQvH,KACf0/G,EAAUn4G,EAAQm4G,QAClBhrB,EAAYvtF,KAAK24G,UAAUprB,UAC3B94C,EAAQz0C,KAAKk6G,YACb15D,KACA25D,EAAW,WACX35D,EAAO14C,KAAK2sC,GACZ0kE,GAAc1kE,EAAMulE,SAAWvB,GAE/BU,GAAcV,CAClB,KAAS96G,EAAM,EAAGA,EAAMhD,EAAShD,OAAQgG,IACjC7F,EAAU6C,EAASgD,GACnBsuF,EAAOtxF,EAASgD,GAAKuvF,cACrBp1F,EAAQ0L,WAAayoF,IACjBpzF,GAAQ47C,EAAM12C,KAAOkuF,EAAKluF,KAAKwvF,GAAagrB,EAAUz3B,EAAO+2B,MAAM95G,KAAKwvF,GAC5C,IAAxB94C,EAAMwlE,OAAOtiH,QACbmpF,EAAOs5B,YAAY3lE,EAAOw3C,EAAMn0F,GAChCqiH,IACA1lE,EAAQqsC,EAAOo5B,cAEfC,IACA1lE,EAAQqsC,EAAOo5B,YACfp5B,EAAOs5B,YAAY3lE,EAAOw3C,EAAMn0F,IAGpCgpF,EAAOs5B,YAAY3lE,EAAOw3C,EAAMn0F,GAO5C,OAHI28C,GAAMwlE,OAAOtiH,QACbwiH,KAGA35D,OAAQA,EACR24D,WAAYA,IAGpBiB,YAAa,SAAU3lE,EAAOw3C,EAAMn0F,GAChC28C,EAAM12C,MAAQkuF,EAAKluF,KAAKiC,KAAK24G,UAAUprB,WAAavtF,KAAKI,QAAQm4G,QACjE9jE,EAAMulE,SAAWp7G,KAAKnG,IAAIwzF,EAAKluF,KAAKiC,KAAK24G,UAAUG,iBAAkBrkE,EAAMulE,UAC3EvlE,EAAMwlE,OAAOnyG,KAAKmkF,GAClBx3C,EAAMhuB,SAAS3e,KAAKhQ,IAExBoiH,UAAW,WACP,OACIF,SAAU,EACVj8G,MAAOiC,KAAKI,QAAQm4G,QACpB0B,UACAxzF,gBAIRujF,GAASpB,GAAUloG,QACnBC,KAAM,SAAU6rG,EAAUpsG,GACL,SAAbosG,IACAA,EAAW,GAAIzf,KAEH,SAAZ3sF,IACAA,MAEJwoG,GAAU3kG,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAC7BJ,KAAKwsG,SAASA,GACT/oB,EAAQzjF,KAAKI,QAAQ8+F,SACtBl/F,KAAKk/F,OAAO,SAGpBuU,MAAO,SAAUntB,GACb,MAAOtmF,MAAK0zG,UAAUznB,KAAK3F,IAE/BwG,QAAS,WACL,MAAO9sF,MAAK0zG,UAAUznB,QAE1BsmB,eAAgB,SAAUnoB,GACtB,MAAOpqF,MAAK0zG,UAAUnC,cAAcnnB,IAExConB,UAAW,SAAUpnB,GACjB,MAAOpqF,MAAKwsG,WAAWgF,UAAUpnB,EAAOpqF,KAAKI,QAAQ8+F,OAAOlmG,MAAQ,MAG5EgxG,GAAOjjG,UAAUqgB,SAAW,OAC5B2hF,GAAUroG,OAAOspG,GAAOjjG,WACxBkiG,GAAWvoG,OAAOspG,GAAOjjG,WACzB+/E,EAAwBkjB,GAAOjjG,WAAY,aAiIvCkjG,GAAaZ,GAAc3oG,QAC3B2kD,QAAS,WACLrlD,KAAKmuG,eAAgBjwF,MAAO,aAiBhCgsF,GAAetzG,GAAM8J,QACrBC,KAAM,SAAUvB,EAAQu2E,EAAOztD,GAC3BloB,KAAKI,QAAU,GAAIsoG,KACftpG,OAAQA,EACRu2E,MAAOA,EACPztD,QAASu7D,EAAQv7D,GAAWA,EAAU,IAE1CloB,KAAKI,QAAQ2tG,YAAY/tG,SAGjCkqG,GAAaj7D,OAAS,SAAUorE,GAC5B,GAAI52B,EAAQ42B,GAAM,CACd,GAAIr6F,EAQJ,OANIA,GADAq6F,YAAenQ,IACRmQ,EACAA,EAAI1iH,OAAS,EACb,GAAIuyG,IAAamQ,EAAI,GAAIA,EAAI,GAAIA,EAAI,IAErC,GAAInQ,IAAamQ,EAAIj7G,OAAQi7G,EAAI1kC,MAAO0kC,EAAInyF,WAK/D8mE,GAAuBkb,GAAanjG,WAChC,SACA,QACA,YAEJ0hG,GAAe/nG,OAAOwpG,GAAanjG,WAC/BojG,GAAWvzG,GAAM8J,QACjBC,KAAM,SAAUP,GACI,SAAZA,IACAA,MAEJJ,KAAK0yF,MAAQ,GAAIuX,IAAWjqG,KAAKs6G,aAAal6G,EAAQsyF,QACtD1yF,KAAK0yF,MAAMqb,YAAY/tG,MACvBA,KAAKu6G,WAAan6G,EAAQgkG,UAC1BpkG,KAAK+jB,GAAK2/D,KAEd0gB,UAAW,SAAUxmG,GACjB,MAAI6lF,GAAQ7lF,IACRoC,KAAKu6G,WAAa38G,EAClBoC,KAAKmuG,gBACEnuG,MAEJA,KAAKu6G,YAEhBD,aAAc,SAAU5nB,GAAV,GAIN1zF,GACKrB,CAAT,KAJc,SAAV+0F,IACAA,MAEA1zF,KACKrB,EAAM,EAAGA,EAAM+0F,EAAM/6F,OAAQgG,IAClCqB,EAAO8I,KAAKoiG,GAAaj7D,OAAOyjD,EAAM/0F,IAE1C,OAAOqB,IAEXw7G,QAAS,SAAUp7G,EAAQu2E,EAAOztD,GAC9BloB,KAAK0yF,MAAM5qF,KAAK,GAAIoiG,IAAa9qG,EAAQu2E,EAAOztD,KAEpDuyF,WAAY,SAAUz6F,GAClB,GAAI7N,GAAQnS,KAAK0yF,MAAMx0F,QAAQ8hB,EAC3B7N,IAAS,GACTnS,KAAK0yF,MAAMtqF,OAAO+J,EAAO,MAIrCg4F,GAASpjG,UAAUqgB,SAAW,WAC9BqhF,GAAe/nG,OAAOypG,GAASpjG,WAC/BtQ,EAAEiK,OAAOypG,GAASpjG,WACdonG,cAAe,SAAUlmG,GACrBjI,KAAKgI,QAAQ,iBACTkW,MAAO,YAAcjW,EAAI,IAAMA,EAAEiW,MAAQ,IACzCtgB,MAAOoC,QAGfimF,eAAgB,WACZjmF,KAAKmuG,mBAGThK,GAAiBgG,GAASzpG,QAC1BC,KAAM,SAAUP,GACI,SAAZA,IACAA,MAEJ+pG,GAASlmG,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAC5BJ,KAAKiP,MAAM7O,EAAQ6O,OAAS,GAAI44E,KAChC7nF,KAAKtI,IAAI0I,EAAQ1I,KAAO,GAAImwF,IAAM,EAAG,OAG7CmC,EAAqBma,GAAep9F,WAChC,QACA,QAEAqjG,GAAiBD,GAASzpG,QAC1BC,KAAM,SAAUP,GACI,SAAZA,IACAA,MAEJ+pG,GAASlmG,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAC5BJ,KAAKs4D,OAAOl4D,EAAQk4D,QAAU,GAAIuvB,KAClC7nF,KAAK06G,QAAUj3B,EAAQrjF,EAAQhI,QAAUgI,EAAQhI,OAAS,EAC1D4H,KAAK26G,cAAgBv6G,EAAQw6G,cAEjCxiH,OAAQ,SAAUwF,GACd,MAAI6lF,GAAQ7lF,IACRoC,KAAK06G,QAAU98G,EACfoC,KAAKimF,iBACEjmF,MAEJA,KAAK06G,SAEhBE,aAAc,SAAUh9G,GACpB,MAAI6lF,GAAQ7lF,IACRoC,KAAK26G,cAAgB/8G,EACrBoC,KAAKmuG,gBACEnuG,MAEJA,KAAK26G,iBAGpB3wB,EAAqBogB,GAAerjG,WAAY,WA0B5CsjG,IACApb,MAAOA,GACPE,OAAQA,GACRC,eAAgBA,IAEhBvvD,GAAM7jC,KAAK6jC,KAAO,WAClB,OAAO,GAAI7jC,OAAOC,WAElBghC,GAAYrmC,GAAM8J,QAClBC,KAAM,SAAU7I,EAASsI,GACrBJ,KAAKI,QAAU3J,EAAEiK,UAAWV,KAAKI,QAASA,GAC1CJ,KAAKlI,QAAUA,GAEnB+pC,MAAO,aAEPlC,KAAM,aAENmD,KAAM,WAAA,GAQE+3E,GACA5rG,EACA6rG,EATAh6B,EAAS9gF,KACTI,EAAUJ,KAAKI,QACfC,EAAWD,EAAQC,SACnB4zB,EAAQ7zB,EAAQ6zB,KACN,UAAVA,IACAA,EAAQ,GAER4mF,EAASxQ,GAAgBjqG,EAAQy6G,QACjC5rG,EAAQ4wB,KAAQ5L,EAChB6mF,EAAS7rG,EAAQ5O,EACJ,IAAbA,GACAL,KAAK2/B,KAAK,GACV3/B,KAAK+6G,SAELlxF,WAAW,WACP,GAAImxF,GAAO,WAAA,GAIHC,GACAvuF,EACA1yB,EACAkhH,CANAp6B,GAAOq6B,WAGPF,EAAWp7E,KACXnT,EAAOo4D,EAAWm2B,EAAWhsG,EAAO,EAAG5O,GACvCrG,EAAW0yB,EAAOrsB,EAClB66G,EAAiBL,EAAO7gH,EAAU0yB,EAAM,EAAG,EAAGrsB,GAClDygF,EAAOnhD,KAAKu7E,GACRD,EAAWH,EACX7iH,MAAM2N,eAAeo1G,GAErBl6B,EAAOi6B,SAGfC,MACD/mF,IAGX8mF,MAAO,WACH/6G,KAAKm7G,UAAW,GAEpBn1F,QAAS,WACLhmB,KAAK+6G,WAGb99E,GAAUl2B,UAAU3G,SAChBC,SAAU,IACVw6G,OAAQ,SAERvQ,GAAmB1zG,GAAM8J,QACzBC,KAAM,WACFX,KAAKo7G,WAET7yF,SAAU,SAAUrZ,EAAMhQ,GACtBc,KAAKo7G,OAAOtzG,MACRoH,KAAMA,EACNhQ,KAAMA,KAGd+vC,OAAQ,SAAUn3C,EAASsI,GAAnB,GAEA/H,GAEI6G,EACKpE,EAJT4rB,EAAQ1mB,KAAKo7G,MAEjB,IAAIh7G,GAAWA,EAAQlB,KAEnB,IADIA,EAAOkB,EAAQlB,KAAKpC,cACfhC,EAAI,EAAGA,EAAI4rB,EAAM/uB,OAAQmD,IAC9B,GAAI4rB,EAAM5rB,GAAGoU,KAAKpS,gBAAkBoC,EAAM,CACtC7G,EAAQquB,EAAM5rB,EACd,OAIZ,GAAIzC,EACA,MAAO,IAAIA,GAAM6G,KAAKpH,EAASsI,MAI3CkqG,GAAiB3+F,QAAU,GAAI2+F,IAC/BrtE,GAAUgS,OAAS,SAAU/vC,EAAMpH,EAASsI,GACxC,MAAOkqG,IAAiB3+F,QAAQsjC,OAAO/vC,EAAMpH,EAASsI,IAEtDmqG,IACA9pB,EAAG,SAAUh5C,EAAMrnC,GAAhB,GAGUtF,GACDsvF,EAHJxqC,EAAax/C,EAAQw/C,WACrB5lD,EAAWoG,EAAQpG,QACvB,KAASc,EAAI,EAAGA,EAAI8kD,EAAWjoD,OAAQmD,GAAK,EACpCsvF,EAAQ,GAAIvC,IAAMjoC,EAAW9kD,GAAI8kD,EAAW9kD,EAAI,IAChDsF,EAAQi7G,YACRjxB,EAAM0F,cAAc91F,GAExBytC,EAAK0qD,OAAO/H,EAAM92D,EAAG82D,EAAM/4E,GAC3BrX,EAASs5B,EAAI82D,EAAM92D,EACnBt5B,EAASqX,EAAI+4E,EAAM/4E,GAG3BjI,EAAG,SAAUq+B,EAAMrnC,GAAhB,GAGUtF,GACD+0F,EACAG,EACA5F,EALJxqC,EAAax/C,EAAQw/C,WACrB5lD,EAAWoG,EAAQpG,QACvB,KAASc,EAAI,EAAGA,EAAI8kD,EAAWjoD,OAAQmD,GAAK,EACpC+0F,EAAa,GAAIhI,IAAMjoC,EAAW9kD,GAAI8kD,EAAW9kD,EAAI,IACrDk1F,EAAY,GAAInI,IAAMjoC,EAAW9kD,EAAI,GAAI8kD,EAAW9kD,EAAI,IACxDsvF,EAAQ,GAAIvC,IAAMjoC,EAAW9kD,EAAI,GAAI8kD,EAAW9kD,EAAI,IACpDsF,EAAQi7G,aACRrrB,EAAUF,cAAc91F,GACxB61F,EAAWC,cAAc91F,GACzBowF,EAAM0F,cAAc91F,IAExBytC,EAAKy1D,QAAQrN,EAAYG,EAAW5F,GACpCpwF,EAASs5B,EAAI82D,EAAM92D,EACnBt5B,EAASqX,EAAI+4E,EAAM/4E,GAG3B3H,EAAG,SAAU+9B,EAAMrnC,GACf,GAAIxC,GAAQwC,EAAQi7G,WAAa,EAAIj7G,EAAQpG,SAASs5B,CACtDg8D,IAAiBlvF,EAAQw/C,YAAY,EAAMhiD,GAC3CoC,KAAKygF,EAAEh5C,EAAMrnC,IAEjBkgF,EAAG,SAAU74C,EAAMrnC,GACf,GAAIxC,GAAQwC,EAAQi7G,WAAa,EAAIj7G,EAAQpG,SAASqX,CACtDi+E,IAAiBlvF,EAAQw/C,YAAY,EAAOhiD,GAC5CoC,KAAKygF,EAAEh5C,EAAMrnC,IAEjBwC,EAAG,SAAU6kC,EAAMrnC,GAAhB,GAGUtF,GACD6uF,EACAC,EACAxlD,EACAolD,EACAC,EACAS,EARJtqC,EAAax/C,EAAQw/C,WACrB5lD,EAAWoG,EAAQpG,QACvB,KAASc,EAAI,EAAGA,EAAI8kD,EAAWjoD,OAAQmD,GAAK,EACpC6uF,EAAU/pC,EAAW9kD,GACrB8uF,EAAUhqC,EAAW9kD,EAAI,GACzBspC,EAAWwb,EAAW9kD,EAAI,GAC1B0uF,EAAW5pC,EAAW9kD,EAAI,GAC1B2uF,EAAQ7pC,EAAW9kD,EAAI,GACvBovF,EAAW,GAAIrC,IAAMjoC,EAAW9kD,EAAI,GAAI8kD,EAAW9kD,EAAI,IACvDsF,EAAQi7G,YACRnxB,EAAS4F,cAAc91F,GAEvBA,EAASs5B,IAAM42D,EAAS52D,GAAKt5B,EAASqX,IAAM64E,EAAS74E,IACrDo2B,EAAK8vE,MAAMrtB,EAAUP,EAASC,EAASJ,EAAUC,EAAOrlD,GACxDpqC,EAASs5B,EAAI42D,EAAS52D,EACtBt5B,EAASqX,EAAI64E,EAAS74E,IAIlCJ,EAAG,SAAUw2B,EAAMrnC,GAAhB,GAIKk7G,GAIKxgH,EACDk1F,EACA9F,EACA2F,EAVJjwC,EAAax/C,EAAQw/C,WACrB5lD,EAAWoG,EAAQpG,SACnBuhH,EAAkBn7G,EAAQm7G,eAK9B,KAHwB,MAApBA,GAA+C,MAApBA,IAC3BD,EAAgB3rF,EAAKA,EAAK8X,EAAK6S,OAAO23C,UAAUjC,aAE3Cl1F,EAAI,EAAGA,EAAI8kD,EAAWjoD,OAAQmD,GAAK,EACpCk1F,EAAY,GAAInI,IAAMjoC,EAAW9kD,GAAI8kD,EAAW9kD,EAAI,IACpDovF,EAAW,GAAIrC,IAAMjoC,EAAW9kD,EAAI,GAAI8kD,EAAW9kD,EAAI,IACvD+0F,EAAa,OACbzvF,EAAQi7G,aACRrrB,EAAUF,cAAc91F,GACxBkwF,EAAS4F,cAAc91F,IAGvB61F,EADAyrB,EACa7rB,GAAgB6rB,EAAethH,GAE/BA,EAASmC,QAE1Bm/G,EAAgBtrB,EAChBvoD,EAAKy1D,QAAQrN,EAAYG,EAAW9F,GACpClwF,EAASs5B,EAAI42D,EAAS52D,EACtBt5B,EAASqX,EAAI64E,EAAS74E,GAG9BokE,EAAG,SAAUhuC,EAAMrnC,GAAhB,GAGUtF,GACDqvF,EACAD,EAKAsxB,EATJ57D,EAAax/C,EAAQw/C,WACrB5lD,EAAWoG,EAAQpG,QACvB,KAASc,EAAI,EAAGA,EAAI8kD,EAAWjoD,OAAQmD,GAAK,EACpCqvF,EAAe,GAAItC,IAAMjoC,EAAW9kD,GAAI8kD,EAAW9kD,EAAI,IACvDovF,EAAW,GAAIrC,IAAMjoC,EAAW9kD,EAAI,GAAI8kD,EAAW9kD,EAAI,IACvDsF,EAAQi7G,aACRlxB,EAAa2F,cAAc91F,GAC3BkwF,EAAS4F,cAAc91F,IAEvBwhH,EAAqB7rB,GAA8B31F,EAAUmwF,EAAcD,GAC/EziD,EAAKy1D,QAAQse,EAAmB3rB,WAAY2rB,EAAmBxrB,UAAW9F,GAC1ElwF,EAASs5B,EAAI42D,EAAS52D,EACtBt5B,EAASqX,EAAI64E,EAAS74E,GAG9BH,EAAG,SAAUu2B,EAAMrnC,GAAhB,GAIK+pF,GAEIitB,EAGCt8G,EACDovF,EASAsxB,EAlBJ57D,EAAax/C,EAAQw/C,WACrB5lD,EAAWoG,EAAQpG,SACnBuhH,EAAkBn7G,EAAQm7G,eAM9B,KAJwB,MAApBA,GAA+C,MAApBA,IACvBnE,EAAcznF,EAAKA,EAAK8X,EAAK6S,OAAO23C,UACxC9H,EAAeitB,EAAYpnB,YAAY7zF,QAAQ2zF,cAAc91F,EAAS01F,aAAe,IAAItyD,MAAM,MAE1FtiC,EAAI,EAAGA,EAAI8kD,EAAWjoD,OAAQmD,GAAK,EACpCovF,EAAW,GAAIrC,IAAMjoC,EAAW9kD,GAAI8kD,EAAW9kD,EAAI,IACnDsF,EAAQi7G,YACRnxB,EAAS4F,cAAc91F,GAGvBmwF,EADAA,EACesF,GAAgBtF,EAAcnwF,GAE9BA,EAASmC,QAExBq/G,EAAqB7rB,GAA8B31F,EAAUmwF,EAAcD,GAC/EziD,EAAKy1D,QAAQse,EAAmB3rB,WAAY2rB,EAAmBxrB,UAAW9F,GAC1ElwF,EAASs5B,EAAI42D,EAAS52D,EACtBt5B,EAASqX,EAAI64E,EAAS74E,IAe9B0+E,GAAQ,EAAI,EAQZya,GAAgB,kCAChBta,GAAc,oDACd12B,GAAO,IACPyS,GAAQ,IAQRw+B,GAAa7zG,GAAM8J,QACnBkvC,MAAO,SAAUhzC,EAAKwD,GAAf,GAGCm7G,GAFAE,EAAY,GAAI/R,IAAUtpG,GAC1BpG,EAAW,GAAI6tF,GAmCnB,OAjCAjrF,GAAI1F,QAAQszG,GAAe,SAAUnyG,EAAOP,EAASo7B,EAAQm/D,GAAlC,GACnBqpB,GAAU5jH,EAAQgF,cAClBu+G,EAAaK,IAAY5jH,EACzB8nD,EAAaqwC,GAAgB/8D,EAAOZ,OAexC,IAdIopF,IAAYliD,KACR6hD,GACArhH,EAASs5B,GAAKssB,EAAW,GACzB5lD,EAASqX,GAAKuuC,EAAW,KAEzB5lD,EAASs5B,EAAIssB,EAAW,GACxB5lD,EAASqX,EAAIuuC,EAAW,IAE5B67D,EAAU50E,OAAO7sC,EAASs5B,EAAGt5B,EAASqX,GAClCuuC,EAAWjoD,OAAS,IACpB+jH,EAAU,IACV97D,EAAWx3C,OAAO,EAAG,KAGzBmiG,GAASmR,GACTnR,GAASmR,GAASD,GACd77D,WAAYA,EACZ5lD,SAAUA,EACVqhH,WAAYA,EACZE,gBAAiBA,IAEjBlpB,GAAaA,EAAUv1F,gBAAkBmvE,IACzCwvC,EAAU3tC,YAEX,IAAI4tC,IAAYliD,GACnB,KAAU1wD,OAAM,sDAAwD4yG,EAE5EH,GAAkBG,IAEfD,KAGfhR,GAAW9+F,QAAU,GAAI8+F,IACzBzL,GAAKpvD,MAAQ,SAAUhzC,EAAKwD,GACxB,MAAOqqG,IAAW9+F,QAAQikC,MAAMhzC,EAAKwD,IAErCsqG,GAAiB9zG,GAAM8J,QACvBC,KAAM,WACFX,KAAKo7G,WAET7yF,SAAU,SAAUrZ,EAAMhQ,EAAM+uC,GAAtB,GACFvnB,GAAQ1mB,KAAKo7G,OACbjkH,EAAQuvB,EAAM,GACd87D,GACAtzE,KAAMA,EACNhQ,KAAMA,EACN+uC,MAAOA,IAEN92C,GAAS82C,EAAQ92C,EAAM82C,MACxBvnB,EAAM3e,QAAQy6E,GAEd97D,EAAM5e,KAAK06E,IAGnBvzC,OAAQ,SAAUn3C,EAASsI,GAAnB,GAIIu7G,GACK7gH,EAJT4rB,EAAQ1mB,KAAKo7G,OACb/iH,EAAQquB,EAAM,EAClB,IAAItmB,GAAWA,EAAQlB,KAEnB,IADIy8G,EAAYv7G,EAAQlB,KAAKpC,cACpBhC,EAAI,EAAGA,EAAI4rB,EAAM/uB,OAAQmD,IAC9B,GAAI4rB,EAAM5rB,GAAGoU,OAASysG,EAAW,CAC7BtjH,EAAQquB,EAAM5rB,EACd,OAIZ,MAAIzC,GACO,GAAIA,GAAM6G,KAAKpH,EAASsI,OAEnCnI,OAAMwsB,aAAa,oIAA2IpJ,UAAUU,cAGhL2uF,GAAe/+F,QAAU,GAAI++F,IACzBhjG,IACA,QACA,aACA,aACA,YACA,UAEAijG,GAAU1yG,MAAMoM,WAAW3D,QAC3BC,KAAM,SAAU7I,EAASsI,GACrBnI,MAAMoM,WAAWJ,GAAGtD,KAAKwH,KAAKnI,MAC9BA,KAAKI,QAAU3J,EAAEiK,UAAWN,GAC5BJ,KAAKlI,QAAUA,EACfkI,KAAKlI,QAAQysG,mBAAqBvkG,KAAKykG,aAAar9F,KAAKpH,MACzDA,KAAK89D,OAAS99D,KAAK47G,SAAS,SAC5B57G,KAAK4zE,YAAc5zE,KAAK47G,SAAS,cACjC57G,KAAK8zE,YAAc9zE,KAAK47G,SAAS,cACjC57G,KAAK67G,WAAa77G,KAAK47G,SAAS,aAChC57G,KAAK87G,QAAU,GAAIpqB,IACnB7oB,EAAY/wE,EAASkI,KAAKI,SAC1BJ,KAAKoH,KAAKM,GAAQ1H,KAAKI,SACvBJ,KAAK+7G,mBAET9oB,KAAM,SAAUn7F,GACZkI,KAAK87G,QAAQnhH,SAASmN,KAAKhQ,IAE/BioD,MAAO,WACH//C,KAAK87G,QAAQnhH,aAEjBqrB,QAAS,WACLhmB,KAAK87G,QAAU,KACf97G,KAAKlI,QAAQysG,mBAAqB,KAClCvkG,KAAK6H,UAEThD,YAAa,SAAUoD,GAInB,IAJS,GAGL+pB,GAFA8uD,EAAS9gF,KACTg8G,EAAUp3B,EAAa38E,IAEnB+pB,GAAQgqF,IACZhqF,EAAOgqF,EAAQC,WACXD,IAAYl7B,EAAOhpF,UAGvBkkH,EAAUA,EAAQE,aAEtB,IAAIlqF,EACA,MAAOA,GAAKmqF,YAGpB1X,aAAc,WACV,MAAOzkG,MAAK87G,SAEhBp2F,QAAS,WACL,MAAOmjD,GAAY7oE,KAAKlI,UAE5B6tB,YAAa,SAAU5nB,GACnB,MAAIA,QACAiC,KAAK4lB,MAAQ7nB,GAENiC,KAAK4lB,OAGpBG,QAAS,SAAUhoB,GACf8qE,EAAY7oE,KAAKlI,QAASiG,GAC1BiC,KAAK2lB,YAAY5nB,GACjBiC,KAAK6lB,WAET1E,OAAQ,SAAUsE,GAAV,GACA1nB,GAAOiC,KAAK0lB,UACZC,EAAc3lB,KAAK2lB,eACnBF,IAAU1nB,EAAK/E,MAAQ,GAAK+E,EAAK9E,OAAS,MAAQ0sB,GAAe5nB,EAAK/E,QAAU2sB,EAAY3sB,OAAS+E,EAAK9E,SAAW0sB,EAAY1sB,WACjI+G,KAAK2lB,YAAY5nB,GACjBiC,KAAK6lB,QAAQ9nB,EAAM0nB,GACnBzlB,KAAKgI,QAAQ,SAAUjK,KAG/BA,KAAM,SAAUH,GACZ,MAAKA,OAGLoC,MAAK+lB,QAAQnoB,GAFFoC,KAAK0lB,WAIpBstE,gBAAiB,WACbhzF,KAAKo8G,oBAAqB,GAE9BC,eAAgB,WACZr8G,KAAKo8G,oBAAqB,GAE9BL,gBAAiB,aAEjBl2F,QAAS,aAET+1F,SAAU,SAAUv0G,GAChB,GAAIy5E,GAAS9gF,IACb,OAAO,UAAUiI,GACb,GAAI+pB,GAAO8uD,EAAOj8E,YAAYoD,EAC1B+pB,KAAS8uD,EAAOs7B,oBAChBt7B,EAAO94E,QAAQX,GACXvP,QAASk6B,EACTxR,cAAevY,EACf/I,KAAMmI,MAKtBi1G,eAAgB,WAAA,GACRxkH,GAAUkI,KAAKlI,QACfyoF,EAAMoF,EAAc7tF,GACpB,cACA,eAEA2/F,EAAclX,EAAIkX,YAClB8kB,EAAah8B,EAAIg8B,WACjBnD,EAAQnkC,EAAcn9E,GACtBY,EAAO0gH,EAAM1gH,KACb4G,EAAM85G,EAAM95G,GAChB,QACI5G,KAAMA,EAAO2Z,SAASolF,EAAa,IACnCn4F,IAAKA,EAAM+S,SAASkqG,EAAY,MAGxCC,cAAe,SAAUv0G,GAAV,GACP7I,GAASY,KAAKs8G,iBACdG,EAAQ93B,EAAiB18E,GACzBqrB,EAAImpF,EAAMnpF,EAAIl0B,EAAO1G,KACrB2Y,EAAIorG,EAAMprG,EAAIjS,EAAOE,GACzB,OAAO,IAAIuoF,IAAMv0D,EAAGjiB,MAG5Bs5F,GAAQ17D,OAAS,SAAUn3C,EAASsI,GAChC,MAAOsqG,IAAe/+F,QAAQsjC,OAAOn3C,EAASsI,IAElDuqG,GAAQzyG,WACJ0yG,GAAWh0G,GAAM8J,QACjBC,KAAM,SAAUw7G,GACZn8G,KAAKuyB,cACLvyB,KAAKrG,OAAS,KACVwiH,IACAn8G,KAAKm8G,WAAaA,EAClBn8G,KAAK08G,YAGb12F,QAAS,WAAA,GAKDrrB,GACKG,EALLgmF,EAAS9gF,IAKb,KAJIA,KAAKm8G,YACLn8G,KAAKm8G,WAAWnO,eAAehuG,MAE/BrF,EAAWqF,KAAKuyB,WACXz3B,EAAI,EAAGA,EAAIH,EAAShD,OAAQmD,IACjCgmF,EAAOvuD,WAAWz3B,GAAGkrB,SAEzBhmB,MAAKrG,OAAS,MAElBqxD,KAAM,aAEN0xD,QAAS,WACD18G,KAAKm8G,YACLn8G,KAAKm8G,WAAWpO,YAAY/tG,OAGpCwkC,OAAQ,SAAUxS,GACdhyB,KAAKuyB,WAAWzqB,KAAKkqB,GACrBA,EAAKr4B,OAASqG,MAElBi4G,SAAU,SAAUjmF,EAAMq+C,GACtBrwE,KAAKuyB,WAAWnqB,OAAOioE,EAAK,EAAGr+C,GAC/BA,EAAKr4B,OAASqG,MAElBqoB,OAAQ,SAAUlW,EAAOwB,GAAjB,GAGK7Y,GAFLgmF,EAAS9gF,KACTtI,EAAMya,EAAQwB,CAClB,KAAS7Y,EAAIqX,EAAOrX,EAAIpD,EAAKoD,IACzBgmF,EAAOvuD,WAAWz3B,GAAG6hH,YAEzB38G,MAAKuyB,WAAWnqB,OAAO+J,EAAOwB,IAElCgpG,WAAY,WACR38G,KAAK+/C,QACL//C,KAAKgmB,WAET+5B,MAAO,WACH//C,KAAKqoB,OAAO,EAAGroB,KAAKuyB,WAAW56B,SAEnCilH,WAAY,WACJ58G,KAAKrG,QACLqG,KAAKrG,OAAOijH,cAGpB32B,eAAgB,WACZjmF,KAAK48G,cAETzO,cAAe,WACXnuG,KAAK48G,cAET7E,eAAgB,SAAU9vG,GACL,QAAbA,EAAEovB,OACFr3B,KAAKgrD,KAAK/iD,EAAEye,MAAOze,EAAEkK,OACD,WAAblK,EAAEovB,QACTr3B,KAAKqoB,OAAOpgB,EAAEkK,MAAOlK,EAAEye,MAAM/uB,QAEjCqI,KAAK48G,gBAyBT/R,MACAlZ,GAAS,6BACTp3D,GAAO,OACPuwE,GAAY,SAAUjjF,EAAWypE,GACjCzpE,EAAU9P,UAAYu5E,GAEF,mBAAb/zF,YACHwtG,GAAe,eAAkBpZ,GAAS,WAC1CqZ,GAAgBztG,SAASsa,cAAc,OACvCozF,GAAiC,mBAAd4R,WACvB7R,GAAcjzF,UAAYgzF,GACtBE,IAAaD,GAAcn6D,WAAWisE,eAAiBnrB,KACvDmZ,GAAY,SAAUjjF,EAAWypE,GAArB,GACJyrB,GAAS,GAAIF,WACbG,EAAWD,EAAOE,gBAAgB3rB,EAAK,YACvC4rB,EAAc3/G,SAAS4/G,UAAUH,EAASt9G,gBAC9CmoB,GAAU9P,UAAY,GACtB8P,EAAU5P,YAAYilG,MAI9BhS,GAAcJ,GACd3wE,GAAY,YACZgxE,IACA5mE,KAAM,YACN06D,KAAM,QAsBNzmD,GAAOoyD,GAASlqG,QAChBC,KAAM,SAAUw7G,EAAY/7G,GACxBwqG,GAAS3mG,GAAGtD,KAAKwH,KAAKnI,KAAMm8G,GAC5Bn8G,KAAKo9G,eACLp9G,KAAKI,QAAUA,GAEnB4lB,QAAS,WACDhmB,KAAKlI,UACLkI,KAAKlI,QAAQmkH,WAAa,KAC1Bj8G,KAAKlI,QAAU,MAEnBkI,KAAKq9G,mBACLzS,GAAS3mG,GAAG+hB,QAAQ7d,KAAKnI,OAE7BgrD,KAAM,SAAUvkC,EAAU4pD,GAApB,GAEOv1E,GACDqhH,EACAxhH,EACA2iH,EAUAxlH,EAdJgpF,EAAS9gF,IACb,KAASlF,EAAI,EAAGA,EAAI2rB,EAAS9uB,OAAQmD,IAC7BqhH,EAAa11F,EAAS3rB,GACtBH,EAAWwhH,EAAWxhH,SACtB2iH,EAAY,GAAIzS,IAASsR,EAAW/0F,UAAU+0F,EAAYr7B,EAAO1gF,SACjEqjF,EAAQpT,GACRyQ,EAAOm3B,SAASqF,EAAWjtC,GAE3ByQ,EAAOt8C,OAAO84E,GAElBA,EAAUC,oBACN5iH,GAAYA,EAAShD,OAAS,GAC9B2lH,EAAUtyD,KAAKrwD,GAEf7C,EAAUgpF,EAAOhpF,QACjBA,GACAwlH,EAAUE,SAAS1lH,EAASu4E,IAIxCpoC,KAAM,WAEF,IADA,GAAIA,GAAOjoC,KACJioC,EAAKtuC,QACRsuC,EAAOA,EAAKtuC,MAEhB,OAAOsuC,IAEXu1E,SAAU,SAAU52F,EAAYypD,GAAtB,GAGFv4E,GAFA+vB,EAAYtqB,SAASsa,cAAc,MACvCqzF,IAAYrjF,EAAW,eAAkB8pE,GAAS,mBAAwB3xF,KAAKuI,SAAW,UACtFzQ,EAAU+vB,EAAUgpB,WAAWA,WAC/B/4C,IACI2rF,EAAQpT,GACRzpD,EAAWirC,aAAa/5D,EAAS8uB,EAAW2L,WAAW89C,IAAQ,MAE/DzpD,EAAW3O,YAAYngB,GAE3BkI,KAAKy9G,WAAW3lH,KAGxB2lH,WAAY,SAAU3lH,GAAV,GAMJ4lH,GACK5iH,EACD6iH,CADR,KANI39G,KAAKlI,UACLkI,KAAKlI,QAAQmkH,WAAa,MAE9Bj8G,KAAKlI,QAAUA,EACfkI,KAAKlI,QAAQmkH,WAAaj8G,KACtB09G,EAAQ19G,KAAKuyB,WACRz3B,EAAI,EAAGA,EAAI4iH,EAAM/lH,OAAQmD,IAC1B6iH,EAAe7lH,EAAQy6B,WAAWz3B,GACtC4iH,EAAM5iH,GAAG2iH,WAAWE,IAG5B59D,MAAO,WAAA,GAKCplD,GACKG,CAAT,KALAkF,KAAKq9G,mBACDr9G,KAAKlI,UACLkI,KAAKlI,QAAQigB,UAAY,IAEzBpd,EAAWqF,KAAKuyB,WACXz3B,EAAI,EAAGA,EAAIH,EAAShD,OAAQmD,IACjCH,EAASG,GAAGkrB,SAEhBhmB,MAAKuyB,eAEToqF,WAAY,WACR,GAAI38G,KAAKlI,QAAS,CACd,GAAI6mB,GAAa3e,KAAKlI,QAAQ6mB,UAC1BA,IACAA,EAAWxG,YAAYnY,KAAKlI,SAEhCkI,KAAKlI,QAAU,KAEnB8yG,GAAS3mG,GAAG04G,WAAWx0G,KAAKnI,OAEhCyC,SAAU,WACN,MAAOzC,MAAK49G,kBAEhBr1G,OAAQ,WACJ,MAAOvI,MAAKyC,YAEhBm7G,eAAgB,WAAA,GAGH9iH,GAFL4iH,EAAQ19G,KAAKuyB,WACbq9C,EAAS,EACb,KAAS90E,EAAI,EAAGA,EAAI4iH,EAAM/lH,OAAQmD,IAC9B80E,GAAU8tC,EAAM5iH,GAAGyN,QAEvB,OAAOqnE,IAEXu+B,cAAe,SAAUlmG,GAAV,GACPiW,GAAQjW,EAAEiW,MACVtgB,EAAQqK,EAAErK,KACA,aAAVsgB,EACAle,KAAKhI,IAAI,UAAW4F,EAAQ,GAAK28B,IAC1B4wE,GAAcjtF,IAAUqyE,GAAaryE,EAAOtgB,GACnDoC,KAAK69G,iBAAiB3/F,EAAOtgB,GACZ,YAAVsgB,EACPle,KAAKkD,KAAK,UAAWtF,GACJ,WAAVsgB,EACPle,KAAKhI,IAAI,SAAU4F,GACF,OAAVsgB,IACHtgB,EACAoC,KAAKkD,KAAK,KAAMtF,GAEhBoC,KAAKslB,WAAW,OAGxBslF,GAAS3mG,GAAGkqG,cAAchmG,KAAKnI,KAAMiI,IAEzC/E,KAAM,SAAUgM,EAAMtR,GACdoC,KAAKlI,SACLkI,KAAKlI,QAAQ+lB,aAAa3O,EAAMtR,IAGxCkgH,QAAS,SAAUztB,GAAV,GAEIv1F,GADLgmF,EAAS9gF,IACb,KAASlF,EAAI,EAAGA,EAAIu1F,EAAM14F,OAAQmD,IAC9BgmF,EAAO59E,KAAKmtF,EAAMv1F,GAAG,GAAIu1F,EAAMv1F,GAAG,KAG1C9C,IAAK,SAAUkX,EAAMtR,GACboC,KAAKlI,UACLkI,KAAKlI,QAAQ+B,MAAMqV,GAAQtR,IAGnCmgH,OAAQ,SAAUzgH,GAAV,GAEKxC,GADLgmF,EAAS9gF,IACb,KAASlF,EAAI,EAAGA,EAAIwC,EAAO3F,OAAQmD,IAC/BgmF,EAAO9oF,IAAIsF,EAAOxC,GAAG,GAAIwC,EAAOxC,GAAG,KAG3CwqB,WAAY,SAAUpW,GACdlP,KAAKlI,SACLkI,KAAKlI,QAAQu4D,gBAAgBnhD,IAGrC8uG,aAAc,SAAU3jF,GACpB,GAAIg2D,KAOJ,OANIh2D,IACAg2D,EAAMvoF,MACFqyB,GACA,UAAYE,EAAUisD,SAAS/8E,SAAS,GAAK,MAG9C8mF,GAEX4tB,gBAAiB,WACb,MAAO7tB,IAAcpwF,KAAKg+G,aAAah+G,KAAKm8G,WAAW9hF,eAE3D6jF,gBAAiB,SAAUtgH,GACnBA,EACAoC,KAAK89G,QAAQ99G,KAAKg+G,aAAapgH,IAE/BoC,KAAKslB,WAAW6U,KAGxBgkF,SAAU,WAAA,GACF/9G,GAAUJ,KAAKm8G,WAAW/7G,QAC1BvG,IACI,SACAuG,EAAQg+G,QAQhB,OANIh+G,GAAQoD,WAAY,GACpB3J,EAAMiO,MACF,UACAyyB,KAGD1gC,GAEXy2F,YAAa,WACT,MAAOH,IAAW,QAASG,GAAYtwF,KAAKm+G,UAAS,MAEzDE,cAAe,WACX,MAAOluB,IAAW,UAAWnwF,KAAKm8G,WAAW/7G,QAAQ8nB,UAEzDo2F,SAAU,WACN,MAAOnuB,IAAW,KAAMnwF,KAAKm8G,WAAW/7G,QAAQ2jB,KAEpDw5F,kBAAmB,WAAA,GAIPn9G,GACAm+G,EACKrgG,EACD4c,EANRqhF,EAAan8G,KAAKm8G,WAClBiB,EAAcp9G,KAAKo9G,WACvB,IAAIjB,EAAY,CACR/7G,EAAU+7G,EAAW/7G,OAEzB,KAAS8d,IAASitF,IACVrwE,EAAa16B,EAAQujB,IAAIzF,GACzB4c,GAAcy1D,GAAaryE,EAAO4c,KAClCsiF,EAAYl/F,GAAS4c,EACrByjF,GAAiB,EAGrBA,IACAv+G,KAAKw+G,kBACDnnF,OAAQ,MACR+lF,YAAaA,MAK7BoB,iBAAkB,SAAUv2G,GACpBjI,KAAKrG,QACLqG,KAAKrG,OAAO6kH,iBAAiBv2G,IAGrC41G,iBAAkB,SAAU3+G,EAAMtB,GAAhB,GACVw/G,GAAcp9G,KAAKo9G,YACnBzxG,EAAUyxG,EAAYl+G,GACtBgE,EAAOioG,GAAcjsG,GACrB47B,IACAnvB,KACAmvB,EAAW57B,GAAQyM,EACnB3L,KAAKw+G,kBACDnnF,OAAQ,SACR+lF,YAAatiF,UAEVsiF,GAAYl+G,IAElBtB,GAKDk9B,EAAW57B,GAAQtB,EACnBoC,KAAKw+G,kBACDnnF,OAAQ,MACR+lF,YAAatiF,IAEjBsiF,EAAYl+G,GAAQtB,EACpBoC,KAAKkD,KAAKA,EAAMlD,KAAK4wF,OAAOhzF,EAAMmmB,MAV9BpY,GACA3L,KAAKslB,WAAWpiB,IAY5Bm6G,iBAAkB,WACd,GAAID,GAAcp9G,KAAKo9G,WACvBp9G,MAAKw+G,kBACDnnF,OAAQ,SACR+lF,YAAaA,IAEjBp9G,KAAKo9G,gBAETqB,kBAAmB,WACf,MAAOruB,IAAcpwF,KAAK0+G,mBAE9BA,eAAgB,WAAA,GAIHxgG,GAHL4iE,EAAS9gF,KACTo9G,EAAcp9G,KAAKo9G,YACnB/sB,IACJ,KAASnyE,IAASk/F,GACd/sB,EAAMvoF,MACFqjG,GAAcjtF,GACd4iE,EAAO8P,OAAOwsB,EAAYl/F,GAAO6F,KAGzC,OAAOssE,IAEXO,OAAQ,SAAU7sE,GACd,GAAI8sE,IAAgB7wF,KAAKI,aAAeywF,YACxC,OAAOD,IAAO7sE,EAAI8sE,MAGtBua,GAAmB5yD,GAAK93C,QACxB+B,SAAU,WACN,MAAO,SAAWzC,KAAK2+G,eAAiB,IAAM3+G,KAAKswF,cAAgB,OAEvEquB,aAAc,WACV,MAAOxuB,IAAW,SAAUnwF,KAAKm8G,WAAW/8G,WAEhD++G,SAAU,WACN,GAAIhC,GAAan8G,KAAKm8G,UACtB,SAEQ,aACAA,EAAWxmC,UAGX,eACAwmC,EAAWj0F,aAIvBimF,cAAe,SAAUlmG,GACL,WAAZA,EAAEiW,MACFle,KAAKkD,KAAK+E,EAAEiW,MAAOjW,EAAErK,OACF,UAAZqK,EAAEiW,OAAiC,YAAZjW,EAAEiW,OAChCle,KAAKhI,IAAI,QAAUiQ,EAAEiW,MAAOjW,EAAErK,UAItCytG,GAAe7yD,GAAK93C,QACpBC,KAAM,SAAUw7G,GACZ3jE,GAAKv0C,GAAGtD,KAAKwH,KAAKnI,KAAMm8G,GACxBn8G,KAAK+jB,GAAKo4F,EAAWp4F,GACrB/jB,KAAK4+G,aAETA,UAAW,WAAA,GAIEjhH,GACDkhH,EAJJ/9B,EAAS9gF,KACT0yF,EAAQ1yF,KAAKm8G,WAAWzpB,MACxB56F,EAAUkI,KAAKlI,OACnB,KAAS6F,EAAM,EAAGA,EAAM+0F,EAAM/6F,OAAQgG,IAC9BkhH,EAAW,GAAIzT,IAAiB1Y,EAAM/0F,IAC1CmjF,EAAOt8C,OAAOq6E,GACV/mH,GACA+mH,EAASrB,SAAS1lH,IAI9Bq2G,cAAe,SAAUlmG,GACL,mBAAZA,EAAEiW,OACF0sF,GAAS7jG,UAAUg5C,MAAM53C,KAAKnI,MAC9BA,KAAK4+G,aACc,aAAZ32G,EAAEiW,OACTle,KAAK89G,QAAQ99G,KAAK8+G,mBAG1BC,kBAAmB,WACf,MAAO3uB,IAAcpwF,KAAK8+G,mBAE9BE,SAAU,WACN,OACI,gBACAh/G,KAAKm8G,WAAW/X,YAAc,iBAAmB,wBAIzDkH,GAAqBD,GAAa3qG,QAClC+B,SAAU,WACN,MAAO,uBAA0BzC,KAAK+jB,GAAK,KAAQ/jB,KAAK++G,oBAAsB,IAAM/+G,KAAK49G,iBAAmB,qBAEhHkB,eAAgB,WAAA,GACR3C,GAAan8G,KAAKm8G,WAClBltG,EAAQktG,EAAWltG,QACnBvX,EAAMykH,EAAWzkH,MACjB24F,IAEI,KACAphF,EAAMqkB,IAGN,KACArkB,EAAMoC,IAGN,KACA3Z,EAAI47B,IAGJ,KACA57B,EAAI2Z,GAERrR,KAAKg/G,WAET,OAAO3uB,MAGXkb,GAAqBF,GAAa3qG,QAClC+B,SAAU,WACN,MAAO,uBAA0BzC,KAAK+jB,GAAK,KAAQ/jB,KAAK++G,oBAAsB,IAAM/+G,KAAK49G,iBAAmB,qBAEhHkB,eAAgB,WAAA,GACR3C,GAAan8G,KAAKm8G,WAClB7jD,EAAS6jD,EAAW7jD,SACpBlgE,EAAS+jH,EAAW/jH,SACpBi4F,IAEI,KACA/3B,EAAOhlC,IAGP,KACAglC,EAAOjnD,IAGP,IACAjZ,GAEJ4H,KAAKg/G,WAET,OAAO3uB,MAGXmb,GAAWhzD,GAAK93C,QAChBC,KAAM,SAAUw7G,GACZ3jE,GAAKv0C,GAAGtD,KAAKwH,KAAKnI,MAClBA,KAAKm8G,WAAaA,EAClBn8G,KAAK+jB,GAAKo4F,EAAWp4F,GACrB/jB,KAAKgrD,MAAMmxD,KAEf15G,SAAU,WACN,MAAO,iBAAoBzC,KAAK+jB,GAAK,KAAQ/jB,KAAK49G,iBAAmB,iBAGzEnS,GAAiBjzD,GAAK93C,QACtBC,KAAM,WACF63C,GAAKv0C,GAAGtD,KAAKwH,KAAKnI,MAClBA,KAAKi/G,kBAETzB,SAAU,SAAU52F,GAChB5mB,KAAKlI,QAAU8uB,GAEnBnkB,SAAU,WACN,MAAO,SAAWzC,KAAK49G,iBAAmB,WAE9CY,iBAAkB,SAAUv2G,GAAV,GACVm1G,GAAcn1G,EAAEm1G,YAChB/lF,EAASpvB,EAAEovB,MACA,SAAXA,EACAr3B,KAAKk/G,eAAe9B,GACF,WAAX/lF,GACPr3B,KAAKm/G,kBAAkB/B,IAG/BgC,iBAAkB,SAAUlgH,EAAMi0C,GAC9B,GAAI/rB,EAUJ,OATa,SAATloB,EACAkoB,EAAWokF,GACK,SAATtsG,IACHi0C,YAAgBgxD,IAChB/8E,EAAWkkF,GACJn4D,YAAgBi3D,MACvBhjF,EAAWmkF,KAGZ,GAAInkF,GAAS+rB,IAExB+rE,eAAgB,SAAU9B,GAAV,GAEHl/F,GADL4iE,EAAS9gF,IACb,KAASke,IAASk/F,GACdt8B,EAAOu+B,cAAcnhG,EAAOk/F,EAAYl/F,KAGhDmhG,cAAe,SAAUngH,EAAMi9G,GAAhB,GAOHnqF,GANJuuD,EAAMvgF,KACNlI,EAAUyoF,EAAIzoF,QACdmnH,EAAgB1+B,EAAI0+B,cACpBl7F,EAAKo4F,EAAWp4F,GAChBu7F,EAAUL,EAAcl7F,EACvBu7F,GAWDA,EAAQ3rG,SAVJqe,EAAOhyB,KAAKo/G,iBAAiBlgH,EAAMi9G,GACvC8C,EAAcl7F,IACVjsB,QAASk6B,EACTre,MAAO,GAEX3T,KAAKwkC,OAAOxS,GACRl6B,GACAk6B,EAAKwrF,SAASx9G,KAAKlI,WAM/BqnH,kBAAmB,SAAU/B,GAAV,GAENl/F,GADL4iE,EAAS9gF,IACb,KAASke,IAASk/F,GACdt8B,EAAOy+B,iBAAiBnC,EAAYl/F,KAG5CqhG,iBAAkB,SAAUpD,GAAV,GACV8C,GAAgBj/G,KAAKi/G,cACrBl7F,EAAKo4F,EAAWp4F,GAChBu7F,EAAUL,EAAcl7F,EACxBu7F,KACAA,EAAQ3rG,QACc,IAAlB2rG,EAAQ3rG,QACR3T,KAAKqoB,OAAOroB,KAAKuyB,WAAWr0B,QAAQohH,EAAQxnH,SAAU,SAC/CmnH,GAAcl7F,QAKjCwtE,GAAW/4C,GAAK93C,QAChBC,KAAM,SAAUP,GACZo4C,GAAKv0C,GAAGtD,KAAKwH,KAAKnI,MAClBA,KAAKI,QAAUA,EACfJ,KAAKw/G,KAAO,GAAI/T,KAEpB+R,SAAU,SAAU52F,GAChB5mB,KAAKlI,QAAU8uB,EACf5mB,KAAKw/G,KAAKhC,SAAS52F,EAAW4tE,oBAElCz0C,MAAO,WACH6qD,GAAS7jG,UAAUg5C,MAAM53C,KAAKnI,OAElCyC,SAAU,WACN,MAAOzC,MAAKw/G,KAAKj3G,SAAWvI,KAAK49G,kBAErCY,iBAAkB,SAAUv2G,GACxBjI,KAAKw/G,KAAKhB,iBAAiBv2G,MAG/ByjG,GAAM,MAiBNC,GAAYhB,GAAQjqG,QACpBC,KAAM,SAAU7I,EAASsI,GACrBuqG,GAAQ1mG,GAAGtD,KAAKwH,KAAKnI,KAAMlI,EAASsI,GACpCJ,KAAK65F,MAAQ,GAAItI,IAAS96F,EAAEiK,QAAS++G,IAAK95B,EAAc7tF,EAAS,aAAamjC,YAAcywE,IAAO1rG,KAAKI,UACxG8qG,GAAYlrG,KAAKlI,QAASkI,KAAK0/G,aAC/B1/G,KAAK2/G,aAAe3/G,KAAKlI,QAAQ08F,kBACjC1D,GAAc9wF,KAAK2/G,cACnB3/G,KAAK65F,MAAM2jB,SAASx9G,KAAK2/G,cACzBp6B,EAAWvlF,KAAKlI,SACZopB,MAAOlhB,KAAK89D,OACZ8hD,UAAW5/G,KAAK4zE,YAChBisC,SAAU7/G,KAAK8zE,YACf9yD,UAAWhhB,KAAK67G,aAEpB77G,KAAKmhB,UAET6E,QAAS,WACDhmB,KAAK65F,QACL75F,KAAK65F,MAAM7zE,UACXhmB,KAAK65F,MAAQ,KACb75F,KAAK2/G,aAAe,KACpB55B,EAAa/lF,KAAKlI,SACdopB,MAAOlhB,KAAK89D,OACZ8hD,UAAW5/G,KAAK4zE,YAChBisC,SAAU7/G,KAAK8zE,YACf9yD,UAAWhhB,KAAK67G,cAGxBlR,GAAQ1mG,GAAG+hB,QAAQ7d,KAAKnI,OAE5By9B,UAAW,SAAUr+B,GACjB,GAAI0gH,GAAUlhH,KAAK6Q,MAAMrQ,EAAOk0B,GAAK,IAAM10B,KAAK6Q,MAAMrQ,EAAOiS,GAAK,IAAMrR,KAAK4lB,MAAM5sB,MAAQ,IAAMgH,KAAK4lB,MAAM3sB,MAC5G+G,MAAK+/G,QAAU3gH,EACfY,KAAK2/G,aAAa9hG,aAAa,UAAWiiG,IAE9C7sB,KAAM,SAAUn7F,GACZ6yG,GAAQ1mG,GAAGgvF,KAAK9qF,KAAKnI,KAAMlI,GAC3BkI,KAAK65F,MAAM7uC,MAAMlzD,KAErBioD,MAAO,WACH4qD,GAAQ1mG,GAAG87C,MAAM53C,KAAKnI,MACtBA,KAAK65F,MAAM95C,SAEfuxC,IAAK,WACD,MAAO,yBAA6BtxF,KAAK0/G,aAE7Cjb,aAAc,WAAA,GAKF5rG,GAJJ0nF,EAAMvgF,KACNqkG,EAAS9jB,EAAIu7B,QACb18G,EAASmhF,EAAIw/B,OAOjB,OANI3gH,KACIvG,EAAO,GAAI64F,IACf74F,EAAK8B,SAASmN,KAAKu8F,GACnBxrG,EAAKwhC,UAAUA,IAAYoD,WAAWr+B,EAAOk0B,GAAIl0B,EAAOiS,IACxDgzF,EAASxrG,GAENwrG,GAEXx+E,QAAS,WACD7lB,KAAK+/G,SACL//G,KAAKy9B,UAAUz9B,KAAK+/G,UAG5BL,UAAW,WACP,MAAO,oEAAyE/tB,GAAS,8DAAqE3xF,KAAK65F,MAAMtxF,SAAW,YAG5LojG,GAAU5kG,UAAU7H,KAAO,MACH,mBAAb3B,WAA4BA,SAASyiH,eAAeC,WAAW,oDAAqD,SAC3HtV,GAAQzyG,QAAQo5F,KAAM,EACtBoZ,GAAe/+F,QAAQ4c,SAAS,MAAOojF,GAAW,KAElDC,GAAYpzD,GAAK93C,QACjB+B,SAAU,WACN,MAAO,MAAQzC,KAAKs+G,WAAat+G,KAAKi+G,kBAAoBj+G,KAAKswF,cAAgBtwF,KAAKq+G,gBAAkBr+G,KAAKy+G,qBAAuB,IAAMz+G,KAAK49G,iBAAmB,QAEpKzP,cAAe,SAAUlmG,GACL,cAAZA,EAAEiW,OACFle,KAAKk+G,gBAAgBj2G,EAAErK,OAE3B46C,GAAKv0C,GAAGkqG,cAAchmG,KAAKnI,KAAMiI,MAGzC4iG,GAASnZ,MAAQka,GACbC,IACAqU,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,MAGJzU,GAAQ,QACRC,GAAO,OACPC,IACAwU,eAAgB,eAChBC,eAAgB,SAChBC,eAAgB,eAChBC,iBAAkB,kBAElBh/B,GAAQ,IACRsqB,GAAWzzD,GAAK93C,QAChBulF,eAAgB,WACZjmF,KAAKkD,KAAK,IAAKlD,KAAK4gH,cACpB5gH,KAAK48G,cAETzO,cAAe,SAAUlmG,GACrB,OAAQA,EAAEiW,OACV,IAAK,OACGjW,EAAErK,MACFoC,KAAK89G,QAAQ99G,KAAK6gH,QAAQ54G,EAAErK,QAE5BoC,KAAKslB,WAAW,OAEpB,MACJ,KAAK,aACDtlB,KAAK89G,QAAQ99G,KAAK6gH,SAAUlrC,MAAO1tE,EAAErK,QACrC,MACJ,KAAK,SACGqK,EAAErK,MACFoC,KAAK89G,QAAQ99G,KAAK8gH,UAAU74G,EAAErK,QAE9BoC,KAAKslB,WAAW,SAEpB,MACJ,KAAK,YACDtlB,KAAKk+G,gBAAgBj2G,EAAErK,MACvB,MACJ,SACI,GAAIsR,GAAO88F,GAAc/jG,EAAEiW,MACvBhP,IACAlP,KAAKkD,KAAKgM,EAAMjH,EAAErK,OAI1B46C,GAAKv0C,GAAGkqG,cAAchmG,KAAKnI,KAAMiI,IAErCqtD,QAAS,WACDt1D,KAAKlI,UACLkI,KAAKlI,QAAQu6B,YAAcryB,KAAKm8G,WAAW7mD,YAGnDsrD,WAAY,WACR,MAAO5gH,MAAK+gH,UAAU/gH,KAAKm8G,aAE/B4E,UAAW,SAAUt5E,GAAV,GAKCh/B,GACAmnE,EAAQoxC,EACHlmH,EACDmmH,EAPRngC,EAAS9gF,KACTiyF,EAAWxqD,EAAKwqD,SAChBt6F,EAASs6F,EAASt6F,MACtB,IAAIA,EAAS,EAAG,CAGZ,IAFI8Q,KAEK3N,EAAI,EAAGA,EAAInD,EAAQmD,IACpBmmH,EAAcngC,EAAOmgC,YAAYhvB,EAASn3F,EAAI,GAAIm3F,EAASn3F,IAC3DmmH,IAAgBD,IAChBA,EAAcC,EACdx4G,EAAMX,KAAKm5G,IAGXx4G,EAAMX,KADU,MAAhBm5G,EACWngC,EAAOogC,YAAYjvB,EAASn3F,GAAG2yE,UAE/BqT,EAAOogC,YAAYjvB,EAASn3F,EAAI,GAAG+0F,aAAcoC,EAASn3F,GAAGk1F,YAAaiC,EAASn3F,GAAG2yE,UAOzG,OAJAmC,GAAS,IAAM5vE,KAAKkhH,YAAYjvB,EAAS,GAAGxkB,UAAYkU,GAAQl5E,EAAMxR,KAAK0qF,IACvEl6C,EAAKrnC,QAAQgyF,SACbxiB,GAAU,KAEPA,IAGfsxC,YAAa,WAAA,GAIApmH,GAHL0vF,EAASzvF,UACTpD,EAAS6yF,EAAO7yF,OAChBqH,IACJ,KAASlE,EAAI,EAAGA,EAAInD,EAAQmD,IACxBkE,EAAO8I,KAAK0iF,EAAO1vF,GAAGyO,SAAS,GAEnC,OAAOvK,GAAO/H,KAAK,MAEvBgqH,YAAa,SAAUE,EAAcC,GACjC,MAAOD,GAAatxB,cAAgBuxB,EAAWpxB,YAAc,IAAM,KAEvE8wB,UAAW,SAAU5hB,GACjB,GAAI7O,KAoCJ,OAnCI6O,KAAWra,EAAcqa,EAAOvpB,QAChC0a,EAAMvoF,MACF,SACAo3F,EAAOvpB,QAEX0a,EAAMvoF,MACF,eACAo3F,EAAOlmG,QAEXq3F,EAAMvoF,MACF,iBACA9H,KAAKqhH,cAAcniB,KAEvB7O,EAAMvoF,MACF,kBACAo3F,EAAOiY,WAEP1zB,EAAQyb,EAAOh3E,UACfmoE,EAAMvoF,MACF,iBACAo3F,EAAOh3E,UAGXu7D,EAAQyb,EAAOoiB,WACfjxB,EAAMvoF,MACF,mBACA9H,KAAKuhH,eAAeriB,MAI5B7O,EAAMvoF,MACF,SACAyyB,KAGD81D,GAEXmxB,aAAc,WACV,MAAOpxB,IAAcpwF,KAAK8gH,UAAU9gH,KAAKm8G,WAAW/7G,QAAQ8+F,UAEhEqiB,eAAgB,SAAUriB,GAAV,GAOJuiB,GACAziH,EACKlE,EARTwmH,EAAWpiB,EAAOoiB,SAClBtoH,EAAQkmG,EAAOlmG,KAInB,IAHc,SAAVA,IACAA,EAAQ,GAERsoH,GAAYA,IAAaxV,GAAO,CAGhC,IAFI2V,EAAY5V,GAAYyV,EAASxkH,eACjCkC,KACKlE,EAAI,EAAGA,EAAI2mH,EAAU9pH,OAAQmD,IAClCkE,EAAO8I,KAAK25G,EAAU3mH,GAAK9B,EAE/B,OAAOgG,GAAO/H,KAAK,OAG3BoqH,cAAe,SAAUniB,GAAV,GACPoiB,GAAWpiB,EAAOoiB,SAClBI,EAAUxiB,EAAOwiB,OACrB,OAAOJ,IAAyB,UAAbA,EAAuBvV,GAAO2V,GAErDb,QAAS,SAAU5hB,GACf,GAAI5O,KAoBJ,OAnBM4O,IAA0B,aAAlBA,EAAK73E,WACX63E,IAASpa,EAAcoa,EAAKtpB,QAC5B0a,EAAMvoF,MACF,OACAm3F,EAAKtpB,QAEL8N,EAAQwb,EAAK/2E,UACbmoE,EAAMvoF,MACF,eACAm3F,EAAK/2E,WAIbmoE,EAAMvoF,MACF,OACAyyB,MAIL81D,GAEXsxB,WAAY,WACR,MAAOvxB,IAAcpwF,KAAK6gH,QAAQ7gH,KAAKm8G,WAAW/7G,QAAQ6+F,QAE9Dx8F,SAAU,WACN,MAAO,SAAWzC,KAAKs+G,WAAa,IAAMt+G,KAAKswF,cAAgB,IAAMtwF,KAAKq+G,gBAAkB,IAAMluB,GAAW,IAAKnwF,KAAK4gH,cAAqB5gH,KAAKwhH,eAAiBxhH,KAAK2hH,aAAe3hH,KAAKy+G,oBAAsBz+G,KAAKi+G,kBAAoB,cAGlPpT,GAAS7L,KAAOiN,GACZC,GAAUD,GAASvrG,QACnBkgH,WAAY,WACR,MAAO5gH,MAAK+gH,UAAU/gH,KAAKm8G,WAAWxE,aAG9C9M,GAASpB,IAAMyC,GACXC,GAAaF,GAASvrG,QACtBulF,eAAgB,WACZ,GAAI3tB,GAASt4D,KAAKs4D,QAClBt4D,MAAKkD,KAAK,KAAMo1D,EAAOhlC,GACvBtzB,KAAKkD,KAAK,KAAMo1D,EAAOjnD,GACvBrR,KAAKkD,KAAK,IAAKlD,KAAK5H,UACpB4H,KAAK48G,cAETtkD,OAAQ,WACJ,MAAOt4D,MAAKm8G,WAAW3P,WAAWl0C,QAEtClgE,OAAQ,WACJ,MAAO4H,MAAKm8G,WAAW3P,WAAWp0G,QAEtCqK,SAAU,WACN,MAAO,WAAazC,KAAKs+G,WAAa,IAAMt+G,KAAKswF,cAAgB,IAAMtwF,KAAKq+G,gBAAkB,OAAUr+G,KAAKs4D,SAAShlC,EAAI,SAAatzB,KAAKs4D,SAASjnD,EAAI,QAAYrR,KAAK5H,SAAW,IAAO4H,KAAKwhH,eAAiB,IAAMxhH,KAAK2hH,aAAe,IAAM3hH,KAAKy+G,oBAAsBz+G,KAAKi+G,kBAAoB,iBAG9SpT,GAASzF,OAAS+G,GACdC,GAAWH,GAASvrG,QACpBulF,eAAgB,WACZ,GAAIumB,GAAWxsG,KAAKm8G,WAAW3P,UAC/BxsG,MAAKkD,KAAK,IAAKspG,EAAS/oE,OAAOnQ,GAC/BtzB,KAAKkD,KAAK,IAAKspG,EAAS/oE,OAAOpyB,GAC/BrR,KAAKkD,KAAK,QAASspG,EAASzuG,KAAK/E,OACjCgH,KAAKkD,KAAK,SAAUspG,EAASzuG,KAAK9E,QAClC+G,KAAK48G,cAET7+G,KAAM,WACF,MAAOiC,MAAKm8G,WAAW3P,WAAWzuG,MAEtC0lC,OAAQ,WACJ,MAAOzjC,MAAKm8G,WAAW3P,WAAW/oE,QAEtChhC,SAAU,WACN,MAAO,SAAWzC,KAAKs+G,WAAa,IAAMt+G,KAAKswF,cAAgB,IAAMtwF,KAAKq+G,gBAAkB,OAAUr+G,KAAKyjC,SAASnQ,EAAI,QAAYtzB,KAAKyjC,SAASpyB,EAAI,YAAqBrR,KAAKjC,OAAO/E,MAAQ,aAAiBgH,KAAKjC,OAAO9E,OAAS,KAAQ+G,KAAKwhH,eAAiB,IAAMxhH,KAAK2hH,aAAe,IAAM3hH,KAAKy+G,oBAAsB,IAAMz+G,KAAKi+G,kBAAoB,SAGrWpT,GAAS9d,KAAOqf,GACZC,GAAYJ,GAASvrG,QACrBulF,eAAgB,WACZjmF,KAAK89G,QAAQ99G,KAAK4hH,eAClB5hH,KAAK48G,cAETzO,cAAe,SAAUlmG,GACL,QAAZA,EAAEiW,OACFle,KAAK89G,QAAQ99G,KAAK6hH,aAEtB5V,GAAShoG,GAAGkqG,cAAchmG,KAAKnI,KAAMiI,IAEzC25G,YAAa,WAAA,GACL/hD,GAAO7/D,KAAKm8G,WAAWt8C,OACvBm+B,EAAKn+B,EAAKoxC,SACd,SAEQ,IACAjT,EAAG1qE,IAGH,IACA0qE,EAAG3sF,IAGH,QACAwuD,EAAK7mE,QAAU,OAGf,SACA6mE,EAAK5mE,SAAW,QAI5B6oH,eAAgB,WACZ,MAAO1xB,IAAcpwF,KAAK4hH,gBAE9BC,UAAW,SAAUE,GACjB,GAAIxtC,GAAMv0E,KAAKm8G,WAAW5nC,KAI1B,OAHIwtC,KACAxtC,EAAMt8E,MAAMsJ,WAAWgzE,MAGnB,aACAA,KAGZytC,aAAc,WACV,MAAO5xB,IAAcpwF,KAAK6hH,WAAU,KAExCp/G,SAAU,WACN,MAAO,qCAAyCzC,KAAKs+G,WAAa,IAAMt+G,KAAKswF,cAAgB,IAAMtwF,KAAKi+G,kBAAoB,IAAMj+G,KAAKq+G,gBAAkBr+G,KAAK8hH,iBAAmB,IAAM9hH,KAAKgiH,eAAiB,IAAMhiH,KAAKy+G,oBAAsB,eAGtP5T,GAAS/P,MAAQuR,GACbnb,GAAe,wBAYK,mBAAb3zF,YACP0zF,GAAerrD,SAAWroC,SAASsa,cAAc,SAEjDy0F,GAAWL,GAASvrG,QACpBulF,eAAgB,WACZ,GAAI5V,GAAMrwE,KAAKqwE,KACfrwE,MAAKkD,KAAK,IAAKmtE,EAAI/8C,GACnBtzB,KAAKkD,KAAK,IAAKmtE,EAAIh/D,GACnBrR,KAAK48G,cAETzO,cAAe,SAAUlmG,GACL,SAAZA,EAAEiW,OACFle,KAAKkD,KAAK,QAASotF,GAAYtwF,KAAKm+G,aACpCn+G,KAAKimF,kBACc,YAAZh+E,EAAEiW,OACT+tF,GAAShoG,GAAGqxD,QAAQntD,KAAKnI,KAAMA,KAAKm8G,WAAW7mD,WAEnD22C,GAAShoG,GAAGkqG,cAAchmG,KAAKnI,KAAMiI,IAEzCk2G,SAAU,SAAU4D,GAAV,GACFloH,GAAQoyG,GAAShoG,GAAGk6G,SAASh2G,KAAKnI,KAAM+hH,GACxChpB,EAAO/4F,KAAKm8G,WAAW/7G,QAAQ24F,IAWnC,OAVIgpB,KACAhpB,EAAO9gG,MAAMsJ,WAAWw3F,IAE5Bl/F,EAAMiO,MACF,OACAixF,IAEA,cACA,QAEGl/F,GAEXw2E,IAAK,WAAA,GACGA,GAAMrwE,KAAKm8G,WAAWniH,WACtB+D,EAAOiC,KAAKm8G,WAAW36C,SAC3B,OAAO6O,GAAIl0E,QAAQ8lH,KAAK5xC,EAAIh/D,EAAItT,EAAKgkF,WAEzCmgC,cAAe,WACX,GAAI5sD,GAAUt1D,KAAKm8G,WAAW7mD,SAG9B,OAFAA,GAAU27B,GAAe37B,GACzBA,EAAUr9D,MAAMsJ,WAAW+zD,GACpBkzC,GAAU/mB,cAAcnsB,IAEnC6sD,iBAAkB,WACd,GAAI10C,EAIJ,SAHKztE,KAAKI,aAAeq/G,KAAS9uB,GAAep2F,MAAQo2F,GAAet0E,OACpEoxD,EAAS,OAEN0iB,GAAW,cAAe1iB,IAErChrE,SAAU,WACN,MAAO,SAAWzC,KAAKs+G,WAAa,IAAMt+G,KAAKmiH,mBAAqB,IAAMniH,KAAKswF,cAAgB,IAAMtwF,KAAKq+G,gBAAkB,MAASr+G,KAAKqwE,MAAM/8C,EAAI,QAAYtzB,KAAKqwE,MAAMh/D,EAAI,KAAQrR,KAAKwhH,eAAiB,IAAMxhH,KAAKi+G,kBAAoB,IAAMj+G,KAAKy+G,oBAAsBz+G,KAAK2hH,aAAe,IAAM3hH,KAAKkiH,gBAAkB,aAGtUrX,GAAShB,KAAOyC,GACZC,GAAgBN,GAASvrG;AACzBkgH,WAAY,WAAA,GAIA5hH,GACKlE,EAJTgmF,EAAS9gF,KACTs6C,EAAQt6C,KAAKm8G,WAAW7hE,KAC5B,IAAIA,EAAM3iD,OAAS,EAAG,CAElB,IADIqH,KACKlE,EAAI,EAAGA,EAAIw/C,EAAM3iD,OAAQmD,IAC9BkE,EAAO8I,KAAKg5E,EAAOigC,UAAUzmE,EAAMx/C,IAEvC,OAAOkE,GAAO/H,KAAK,SAI/B4zG,GAASnB,UAAY6C,GACjBC,IACApH,OAAQC,GACRoE,IAAKzM,GACLjQ,KAAMA,GACNlF,MAAOA,GACP0hB,QAASA,GACTvV,OAAQA,GACR2U,KAAMA,GACNtiB,SAAUA,EACVE,eAAgBA,GAChBlsD,UAAWA,GAkBXi3D,IACAqZ,QAASgB,GACTpa,SAAUA,GACV/4C,KAAMA,GACNozD,UAAWA,GACXM,QAASA,GACTC,WAAYA,GACZC,SAAUA,GACVC,UAAWA,GACXC,SAAUA,GACVL,SAAUA,GACVM,cAAeA,GACfd,eAAgBA,GAChBD,SAAUA,GACVJ,iBAAkBA,GAClBE,mBAAoBA,GACpBC,mBAAoBA,GACpBna,YAAaA,IAEbqb,MAyBAC,GAAS9B,GAASlqG,QAClBC,KAAM,SAAUw7G,GACZvR,GAAS3mG,GAAGtD,KAAKwH,KAAKnI,KAAMm8G,GACxBA,GACAn8G,KAAKoiH,YAGbA,SAAU,WACN,GAAI79E,GAAOvkC,KAAKm8G,WAAW53E,MACvBA,KACAvkC,KAAKukC,KAAOA,EACZA,EAAKwpE,YAAY/tG,QAGzB+/C,MAAO,WACC//C,KAAKm8G,YACLn8G,KAAKm8G,WAAWnO,eAAehuG,MAEnCA,KAAKqiH,YACLzX,GAAS3mG,GAAG87C,MAAM53C,KAAKnI,OAE3BqiH,UAAW,WACHriH,KAAKukC,OACLvkC,KAAKukC,KAAKypE,eAAehuG,YAClBA,MAAKukC,OAGpB+9E,QAAS,SAAUzwB,GACX7xF,KAAKukC,OACLstD,EAAI0wB,YACJ3wB,GAAWC,EAAK7xF,KAAKukC,MACrBstD,EAAIttD,SAGZ4pE,cAAe,SAAUlmG,GACL,SAAZA,EAAEiW,QACFle,KAAKqiH,YACLriH,KAAKoiH,YAETxX,GAAS3mG,GAAGkqG,cAAchmG,KAAKnI,KAAMiI,IAEzC2rF,aAAc,SAAU/B,GACpB,GAAI7xF,KAAKm8G,WAAY,CACjB,GAAI9hF,GAAYr6B,KAAKm8G,WAAW9hF,WAC5BA,IACAw3D,EAAIx3D,UAAUvzB,MAAM+qF,EAAKx3D,EAAUisD,SAAS5nC,QAAQ,MAIhE8jE,aAAc,SAAU/7F,EAAU4pD,EAAKyiB,GAAzB,GAEDh4F,GACDqhH,EACAxhH,EACA2iH,EAJJx8B,EAAS9gF,IACb,KAASlF,EAAI,EAAGA,EAAI2rB,EAAS9uB,OAAQmD,IAC7BqhH,EAAa11F,EAAS3rB,GACtBH,EAAWwhH,EAAWxhH,SACtB2iH,EAAY,GAAI7Q,IAAW0P,EAAW/0F,UAAU+0F,EAAYrpB,GAC5Dn4F,GAAYA,EAAShD,OAAS,GAC9B2lH,EAAUtyD,KAAKrwD,EAAU01E,EAAKyiB,GAE9BrP,EAAQpT,GACRyQ,EAAOm3B,SAASqF,EAAWjtC,GAE3ByQ,EAAOt8C,OAAO84E,IAI1BtyD,KAAM,SAAUvkC,EAAU4pD,EAAKyiB,GAC3B9yF,KAAKwiH,aAAa/7F,EAAU4pD,EAAKyiB,GACjC9yF,KAAK48G,cAET6F,WAAY,SAAU5wB,GAClB,GAAI7xF,KAAKm8G,WAAY,CACjB,GAAIj0F,GAAUloB,KAAKm8G,WAAWj0F,SAC1Bu7D,GAAQv7D,IACRloB,KAAK0iH,YAAY7wB,EAAK3pE,KAIlCw6F,YAAa,SAAU7wB,EAAKj0F,GACxB,GAAI+kH,GAAW/kH,CACX+kH,IAAY9wB,EAAI6wB,cAChBC,GAAY9wB,EAAI6wB,aAEpB7wB,EAAI6wB,YAAcC,GAEtBn/G,QAAS,WACL,GAAI+wE,GAAMv0E,KAAKm8G,UACf,QAAQ5nC,GAAOA,GAAOA,EAAIn0E,QAAQoD,WAAY,KAGlDmpG,GAAcD,GAAOhsG,QACrBkiH,SAAU,SAAU/wB,GAAV,GAQFt/D,GACKz3B,EACD82B,CATR,IAAK5xB,KAAKwD,UAAV,CAQA,IALAquF,EAAIj5D,OACJ54B,KAAK4zF,aAAa/B,GAClB7xF,KAAKsiH,QAAQzwB,GACb7xF,KAAKyiH,WAAW5wB,GACZt/D,EAAavyB,KAAKuyB,WACbz3B,EAAI,EAAGA,EAAIy3B,EAAW56B,OAAQmD,IAC/B82B,EAAQW,EAAWz3B,GACnB82B,EAAMpuB,WACNouB,EAAMgxF,SAAS/wB,EAGvBA,GAAI3wD,cAGZ4oE,GAAYppG,OAAOisG,GAAY5lG,UAAW,cAC1C0lG,GAAW/a,MAAQib,GACfC,GAAc,IAAO,GACrBC,GAAaF,GAAYjsG,QACzBC,KAAM,SAAUitG,GACZjB,GAAY1oG,GAAGtD,KAAKwH,KAAKnI,MACzBA,KAAK4tG,OAASA,EACd5tG,KAAK6xF,IAAM+b,EAAOiV,WAAW,KAC7B,IAAIC,GAAoB9iH,KAAK+iH,YAAY37G,KAAKpH,KAC9CA,MAAK48G,WAAa3kH,MAAM+7B,SAAS,WAC7B/7B,MAAM2N,eAAek9G,IACtBlW,KAEP5mF,QAAS,WACL2mF,GAAY1oG,GAAG+hB,QAAQ7d,KAAKnI,MAC5BA,KAAK4tG,OAAS,KACd5tG,KAAK6xF,IAAM,MAEf7mC,KAAM,SAAUvkC,EAAU4pD,EAAKyiB,GAC3B9yF,KAAKwiH,aAAa/7F,EAAU4pD,EAAKyiB,GACjC9yF,KAAK+iH,eAETA,YAAa,WACJ/iH,KAAK6xF,MAGV7xF,KAAK6xF,IAAImxB,UAAU,EAAG,EAAGhjH,KAAK4tG,OAAO50G,MAAOgH,KAAK4tG,OAAO30G,QACxD+G,KAAK4iH,SAAS5iH,KAAK6xF,SAG3BiY,GAAYppG,OAAOmsG,GAAW9lG,UAAW,cACrC+lG,GAAWl2G,GAAM8J,QACjBC,KAAM,WACFX,KAAKijH,WAET/N,KAAM,SAAUtY,EAAO3Q,GACnBjsF,KAAKijH,OAAOn7G,MACRmkF,KAAMA,EACN2Q,MAAOA,IAEXA,EAAMsmB,UAAYljH,MAEtBmjH,YAAa,SAAU/4B,GAAV,GAIAzsF,GAHLslH,EAASjjH,KAAKijH,OACdtrH,EAASsrH,EAAOtrH,OAChBqH,IACJ,KAASrB,EAAM,EAAGA,EAAMhG,EAAQgG,IACxBslH,EAAOtlH,GAAKsuF,KAAKslB,cAAcnnB,IAC/BprF,EAAO8I,KAAKm7G,EAAOtlH,GAAKi/F,MAGhC,OAAO59F,IAEX6kD,OAAQ,SAAU+4C,EAAO3Q,GACrBjsF,KAAKk1G,KAAKtY,EAAO3Q,IAErB5jE,OAAQ,SAAUu0E,GAAV,GAGKj/F,GAFLslH,EAASjjH,KAAKijH,OACdtrH,EAASsrH,EAAOtrH,MACpB,KAASgG,EAAM,EAAGA,EAAMhG,EAAQgG,IAC5B,GAAIslH,EAAOtlH,GAAKi/F,QAAUA,EAAO,CAC7BqmB,EAAO76G,OAAOzK,EAAK,EACnB,WAKZovG,GAAWD,GAASpsG,QACpBC,KAAM,SAAUk/D,GACZitC,GAAS7oG,GAAGtD,KAAKwH,KAAKnI,MACtBA,KAAKrF,YACLqF,KAAK6/D,KAAOA,GAEhBujD,SAAU,SAAUvjD,GAAV,GACFwjD,GAAWrjH,KAAK6/D,KAChByjD,EAAkBD,EAASj3B,cAC3BA,EAAcvsB,EAAKusB,cACnBg3B,EAAWC,EAAS5/E,OAAOnQ,GAAKusC,EAAKp8B,OAAOnQ,GAAK+vF,EAAS5/E,OAAOpyB,GAAKwuD,EAAKp8B,OAAOpyB,GAAK+6E,EAAY94D,GAAKgwF,EAAgBhwF,GAAK84D,EAAY/6E,GAAKiyG,EAAgBjyG,CAClK,OAAO+xG,IAEXD,YAAa,SAAU/4B,GAAV,GAIAzsF,GAHLhD,EAAWqF,KAAKrF,SAChBhD,EAASgD,EAAShD,OAClBqH,EAAS8tG,GAAS7oG,GAAGk/G,YAAYh7G,KAAKnI,KAAMoqF,EAChD,KAASzsF,EAAM,EAAGA,EAAMhG,EAAQgG,IAC5B6mC,EAAOxlC,EAAQrE,EAASgD,GAAKwlH,YAAY/4B,GAE7C,OAAOprF,IAEX6kD,OAAQ,SAAU+4C,EAAO3Q,GAAjB,GAUatuF,GATbhD,EAAWqF,KAAKrF,SAChB4oH,GAAW,CACf,IAAIvjH,KAAKojH,SAASn3B,GAAO,CACrB,GAAIjsF,KAAKijH,OAAOtrH,OAAS,EACrBqI,KAAKk1G,KAAKtY,EAAO3Q,OACd,CAIH,IAHKtxF,EAAShD,QACVqI,KAAK2qD,gBAEAhtD,EAAM,EAAGA,EAAMhD,EAAShD,OAAQgG,IACrC,GAAIhD,EAASgD,GAAKkmD,OAAO+4C,EAAO3Q,GAAO,CACnCs3B,GAAW,CACX,OAGHA,GACDvjH,KAAKk1G,KAAKtY,EAAO3Q,GAGzBs3B,GAAW,EAEf,MAAOA,IAEX54D,cAAe,WAAA,GACP41B,GAAMvgF,KACN6/D,EAAO0gB,EAAI1gB,KACXllE,EAAW4lF,EAAI5lF,SACf29D,EAASuH,EAAKvH,SACdkrD,EAAY3jD,EAAK7mE,QAAU,EAC3ByqH,EAAa5jD,EAAK5mE,SAAW,CACjC0B,GAASmN,KAAK,GAAIilG,IAAS,GAAIhgB,KAC3BltB,EAAKp8B,OAAOnQ,EACZusC,EAAKp8B,OAAOpyB,IAEZmyG,EACAC,KACC,GAAI1W,IAAS,GAAIhgB,KAClBz0B,EAAOhlC,EACPusC,EAAKp8B,OAAOpyB,IAEZmyG,EACAC,KACC,GAAI1W,IAAS,GAAIhgB,KAClBltB,EAAKp8B,OAAOnQ,EACZglC,EAAOjnD,IAEPmyG,EACAC,KACC,GAAI1W,IAAS,GAAIhgB,KAClBz0B,EAAOhlC,EACPglC,EAAOjnD,IAEPmyG,EACAC,SAIRzW,GAAY,IACZC,GAAa,IACbC,GAAY,GACZC,GAAiBv2G,GAAM8J,QACvBC,KAAM,WACFX,KAAK0jH,aAETA,UAAW,WACP1jH,KAAK2jH,WACL3jH,KAAKioC,KAAO,GAAI6kE,IAChB9sG,KAAK4jH,iBAET7jE,MAAO,WAAA,GAGMpiD,GAFLmjF,EAAS9gF,KACT4jH,EAAe5jH,KAAK4jH,YACxB,KAASjmH,EAAM,EAAGA,EAAMimH,EAAajsH,OAAQgG,IACzCmjF,EAAOz4D,OAAOu7F,EAAajmH,GAE/BqC,MAAK0jH,aAETG,WAAY,SAAUz5B,GAAV,GAQCzsF,GAPLmmH,GAAc9jH,KAAK2jH,QAAQ/kH,KAAKpE,MAAM4vF,EAAM92D,EAAI05E,UAAmBpuG,KAAKpE,MAAM4vF,EAAM/4E,EAAI27F,KACxFhuG,EAASgB,KAAKioC,KAAKk7E,YAAY/4B,EAMnC,KALI05B,IACA9kH,EAASA,EAAOmX,OAAO2tG,EAAWX,YAAY/4B,KAElDpqF,KAAK+jH,aAAa/kH,GAClBA,EAAOmf,KAAKm0E,IACH30F,EAAM,EAAGA,EAAMqB,EAAOrH,OAAQgG,IACnC,GAAIqB,EAAOrB,GAAK4zG,cAAcnnB,GAC1B,MAAOprF,GAAOrB,IAI1BomH,aAAc,SAAUt9F,GAAV,GAED9oB,GACD7F,EACAusC,EACA2/E,EACArgH,EALJm9E,EAAS9gF,IACb,KAASrC,EAAM,EAAGA,EAAM8oB,EAAS9uB,OAAQgG,IAAO,CAK5C,IAJI7F,EAAU2uB,EAAS9oB,GACnB0mC,EAAS,EACT2/E,EAAcplH,KAAKuoC,IAAI8lE,GAAYC,IACnCvpG,KACG7L,GACH6L,EAAQmE,KAAKhQ,GACbA,EAAUA,EAAQ6B,MAEtB,MAAOgK,EAAQhM,QACXG,EAAU6L,EAAQuoB,MAClBmY,KAAYvsC,EAAQ6B,OAAS7B,EAAQ6B,OAAOgB,SAAWmmF,EAAO8iC,cAAc1lH,QAAQpG,GAAW,GAAKksH,EACpGA,GAAe/W,EAEnBxmF,GAAS9oB,GAAK40F,QAAUluD,IAGhC8pE,cAAe,SAAUlmG,GACL,cAAZA,EAAEiW,OAAqC,iBAAZjW,EAAEiW,OAC7Ble,KAAKikH,WAAWh8G,EAAEnQ,UAG1BmuF,eAAgB,SAAUh+E,GACtBjI,KAAKikH,WAAWh8G,EAAEnQ,UAEtBmsH,WAAY,SAAUnsH,GAAV,GAGK6F,GAFTmjF,EAAS9gF,IACb,IAAyB,UAArBlI,EAAQsvB,SACR,IAASzpB,EAAM,EAAGA,EAAM7F,EAAQ6C,SAAShD,OAAQgG,IAC7CmjF,EAAOmjC,WAAWnsH,EAAQ6C,SAASgD,QAGnC7F,GAAQorH,WACRprH,EAAQorH,UAAU76F,OAAOvwB,GAE7BkI,KAAKkkH,aAAapsH,IAG1BwJ,IAAK,SAAUmlB,GACX,GAAI09F,GAAgBroH,MAAMiK,QAAQ0gB,GAAYA,EAASjgB,MAAM,IAAMigB,EACnE+d,GAAOxkC,KAAK4jH,aAAcO,GAC1BnkH,KAAKokH,QAAQD,IAEjBpM,eAAgB,SAAU9vG,GAAV,GAGCtK,GAFTmjF,EAAS9gF,IACb,IAAiB,WAAbiI,EAAEovB,OACF,IAAS15B,EAAM,EAAGA,EAAMsK,EAAEye,MAAM/uB,OAAQgG,IACpCmjF,EAAOz4D,OAAOpgB,EAAEye,MAAM/oB,QAG1BqC,MAAKokH,QAAQtoH,MAAMiL,UAAUP,MAAM2B,KAAKF,EAAEye,MAAO,KAGzD09F,QAAS,SAAU39F,GAGf,IAHK,GAED3uB,GADAgpF,EAAS9gF,KAENymB,EAAS9uB,OAAS,GACrBG,EAAU2uB,EAASyF,MACnBp0B,EAAQi2G,YAAYjtB,GACK,UAArBhpF,EAAQsvB,SACRod,EAAO/d,EAAU3uB,EAAQ6C,UAEzBmmF,EAAOojC,aAAapsH,IAIhCosH,aAAc,SAAUtnB,GAAV,GAGFynB,GACA/wF,EACAjiB,EAIIsyG,EARR13B,EAAO2Q,EAAM3Q,MACbA,KACIo4B,EAAUrkH,KAAKskH,WAAWr4B,GAC1B34D,EAAI+wF,EAAQ,GAAG,GACfhzG,EAAIgzG,EAAQ,GAAG,GACfrkH,KAAKukH,OAAOF,GACZrkH,KAAKioC,KAAK4b,OAAO+4C,EAAO3Q,IAEpB03B,EAAU3jH,KAAK2jH,QACdA,EAAQrwF,KACTqwF,EAAQrwF,OAEPqwF,EAAQrwF,GAAGjiB,KACZsyG,EAAQrwF,GAAGjiB,GAAK,GAAI07F,IAAS,GAAIhgB,KAC7Bz5D,EAAI05E,GACJ37F,EAAI27F,KAEJA,GACAA,OAGR2W,EAAQrwF,GAAGjiB,GAAGwyC,OAAO+4C,EAAO3Q,MAIxC5jE,OAAQ,SAAUvwB,GAAV,GAII6C,GACKgD,EAJTmjF,EAAS9gF,IAEb,IADAlI,EAAQk2G,eAAehuG,MACE,UAArBlI,EAAQsvB,SAER,IADIzsB,EAAW7C,EAAQ6C,SACdgD,EAAM,EAAGA,EAAMhD,EAAShD,OAAQgG,IACrCmjF,EAAOz4D,OAAO1tB,EAASgD,QAEpB7F,GAAQorH,YACfprH,EAAQorH,UAAU76F,OAAOvwB,SAClBA,GAAQorH,YAGvBqB,OAAQ,SAAUF,GACd,MAAOA,GAAQ,GAAG1sH,OAAS,GAAK0sH,EAAQ,GAAG1sH,OAAS,GAExD2sH,WAAY,SAAUzkD,GAAV,GAQCvsC,GAGAjiB,EAVL+6E,EAAcvsB,EAAKusB,cACnBo4B,EAAU5lH,KAAKpE,MAAM4xF,EAAY94D,EAAI05E,IACrCyX,EAAU7lH,KAAKpE,MAAM4xF,EAAY/6E,EAAI27F,IACrCqX,SAIJ,KAAS/wF,EAAI10B,KAAKpE,MAAMqlE,EAAKp8B,OAAOnQ,EAAI05E,IAAY15E,GAAKkxF,EAASlxF,IAC9D+wF,EAAQ,GAAGv8G,KAAKwrB,EAEpB,KAASjiB,EAAIzS,KAAKpE,MAAMqlE,EAAKp8B,OAAOpyB,EAAI27F,IAAY37F,GAAKozG,EAASpzG,IAC9DgzG,EAAQ,GAAGv8G,KAAKuJ,EAEpB,OAAOgzG,MAYXjX,GAAgBx2G,GAAM8J,QACtBC,KAAM,SAAUg8D,GACZA,EAAQv1D,KAAK,aAAcpH,KAAK4zE,YAAYxsE,KAAKpH,OACjD28D,EAAQv1D,KAAK,aAAcpH,KAAK8zE,YAAY1sE,KAAKpH,OACjDA,KAAKlI,QAAU6kE,EAAQ7kE,SAE3BioD,MAAO,WACH//C,KAAK0kH,gBAET1+F,QAAS,WACLhmB,KAAK0kH,qBACE1kH,MAAKlI,SAEhB87E,YAAa,SAAU3rE,GACnB,GAAIm2G,GAASp+G,KAAK2kH,aAAa18G,EAC1Bm2G,IAGIp+G,KAAK4kH,WACN5kH,KAAK6kH,eAAiB7kH,KAAK8kH,cAE/B9kH,KAAK+kH,WAAW3G,IALhBp+G,KAAK0kH,gBAQb5wC,YAAa,WACT9zE,KAAK0kH,gBAETC,aAAc,SAAU18G,GAEpB,IADA,GAAI20F,GAAQ30F,EAAEnQ,QACP8kG,IAAUnZ,EAAQmZ,EAAMx8F,QAAQg+G,SACnCxhB,EAAQA,EAAMjjG,MAElB,IAAIijG,EACA,MAAOA,GAAMx8F,QAAQg+G,QAG7B0G,WAAY,WACR,GAAI9kH,KAAKlI,QACL,MAAOkI,MAAKlI,QAAQ+B,MAAMukH,QAGlC2G,WAAY,SAAU3G,GACdp+G,KAAKlI,UACLkI,KAAKlI,QAAQ+B,MAAMukH,OAASA,EAC5Bp+G,KAAK4kH,SAAWxG,IAGxBsG,aAAc,WACN1kH,KAAK4kH,WACL5kH,KAAK+kH,WAAW/kH,KAAK6kH,gBAAkB,UAChC7kH,MAAK4kH,aAIpB7xB,GAAY4X,GAAQjqG,QACpBC,KAAM,SAAU7I,EAASsI,GAAnB,GAGEwtG,GACA7vG,CAHJ4sG,IAAQ1mG,GAAGtD,KAAKwH,KAAKnI,KAAMlI,EAASsI,GACpCJ,KAAKlI,QAAQigB,UAAY/X,KAAK0/G,UAAU1/G,MACpC4tG,EAAS5tG,KAAKlI,QAAQ08F,kBACtBz2F,EAAO8qE,EAAY/wE,GACvB81G,EAAO50G,MAAQ+E,EAAK/E,MACpB40G,EAAO30G,OAAS8E,EAAK9E,OACrB+G,KAAK2/G,aAAe/R,EACpB5tG,KAAK65F,MAAQ,GAAIgT,IAAWe,GAC5B5tG,KAAKglH,mBAAqBhlH,KAAKilH,YAAY79G,KAAKpH,MAChDulF,EAAWvlF,KAAKlI,SACZopB,MAAOlhB,KAAKglH,mBACZhkG,UAAWhhB,KAAKglH,sBAGxBh/F,QAAS,WACL2kF,GAAQ1mG,GAAG+hB,QAAQ7d,KAAKnI,MACpBA,KAAK65F,QACL75F,KAAK65F,MAAM7zE,UACXhmB,KAAK65F,MAAQ,MAEb75F,KAAKklH,cACLllH,KAAKklH,YAAYnlE,cACV//C,MAAKklH,aAEZllH,KAAKmlH,UACLnlH,KAAKmlH,QAAQn/F,gBACNhmB,MAAKmlH,SAEhBp/B,EAAa/lF,KAAKlI,SACdopB,MAAOlhB,KAAKglH,mBACZhkG,UAAWhhB,KAAKglH,sBAGxB/xB,KAAM,SAAUn7F,GACZ6yG,GAAQ1mG,GAAGgvF,KAAK9qF,KAAKnI,KAAMlI,GAC3BkI,KAAK65F,MAAM7uC,MAAMlzD,GAAUnB,OAAWqJ,KAAKI,QAAQ0yF,MAC/C9yF,KAAKklH,aACLllH,KAAKklH,YAAY5jH,KAAKxJ,KAG9BioD,MAAO,WACH4qD,GAAQ1mG,GAAG87C,MAAM53C,KAAKnI,MACtBA,KAAK65F,MAAM95C,QACP//C,KAAKklH,aACLllH,KAAKklH,YAAYnlE,QAEjB//C,KAAKmlH,SACLnlH,KAAKmlH,QAAQplE,SAGrBl7C,YAAa,SAAUoD,GAAV,GAEDmiF,GACAwS,CAFR,IAAI58F,KAAKklH,YAGL,MAFI96B,GAAQpqF,KAAKw8G,cAAcv0G,GAC3B20F,EAAQ58F,KAAKklH,YAAYrB,WAAWz5B,IAIhD8I,MAAO,WAAA,GAUC/xF,GACAikH,EAVA7kC,EAAMvgF,KACNioC,EAAOs4C,EAAIsZ,MACXwrB,EAAc9kC,EAAIo/B,aAClB2F,IAiBJ,OAhBAr9E,GAAK6vE,SAAS,SAAUwF,GAChBA,EAAUn1F,SACVm9F,EAAcx9G,KAAKw1G,EAAUn1F,WAGjChnB,EAAUg0E,KACViwC,EAAiB,WACjBn9E,EAAK86E,aACL,KACI,GAAIvnH,GAAO6pH,EAAY3f,WACvBvkG,GAAQ2gC,QAAQtmC,GAClB,MAAOyM,GACL9G,EAAQilD,OAAOn+C,KAGvBmtE,GAAWkwC,GAAe7jF,KAAK2jF,EAAgBA,GACxCjkH,GAEX6xF,gBAAiB,WACb2X,GAAQ1mG,GAAG+uF,gBAAgB7qF,KAAKnI,MAC5BA,KAAKklH,cACLllH,KAAKklH,YAAYnlE,cACV//C,MAAKklH,cAGpB7I,eAAgB,WAAA,GAIJ9pF,GACAqxF,EACKjmH,CAJb,IADAgtG,GAAQ1mG,GAAGo4G,eAAel0G,KAAKnI,OAC1BA,KAAKklH,YAAa,CAInB,IAHAllH,KAAKklH,YAAc,GAAI/X,IACnB56E,EAAavyB,KAAK65F,MAAMtnE,WACxBqxF,KACKjmH,EAAM,EAAGA,EAAM40B,EAAW56B,OAAQgG,IACvCimH,EAAa97G,KAAKyqB,EAAW50B,GAAKw+G,WAEtCn8G,MAAKklH,YAAY5jH,IAAIsiH,KAG7B/9F,QAAS,WACL7lB,KAAK2/G,aAAa3mH,MAAQgH,KAAK4lB,MAAM5sB,MACrCgH,KAAK2/G,aAAa1mH,OAAS+G,KAAK4lB,MAAM3sB,OACtC+G,KAAK65F,MAAM+iB,cAEf8C,UAAW,WACP,MAAO,wDAEX3D,gBAAiB,WACb/7G,KAAKklH,YAAc,GAAI/X,IACvBntG,KAAKmlH,QAAU,GAAI/X,IAAcptG,MACjC2qG,GAAQ1mG,GAAG83G,gBAAgB5zG,KAAKnI,OAEpCilH,YAAa,SAAUh9G,GAAV,GAIL20F,GAEI2oB,CALJvlH,MAAKo8G,qBAGLxf,EAAQ58F,KAAK6E,YAAYoD,GACd,UAAXA,EAAE/I,MACEqmH,EAAevlH,KAAKwlH,cACpBD,GAAgBA,IAAiB3oB,GACjC58F,KAAKgI,QAAQ,cACTlQ,QAASytH,EACT/kG,cAAevY,EACf/I,KAAM,eAGV09F,GAAS2oB,IAAiB3oB,GAC1B58F,KAAKgI,QAAQ,cACTlQ,QAAS8kG,EACTp8E,cAAevY,EACf/I,KAAM,eAGdc,KAAKgI,QAAQ,aACTlQ,QAAS8kG,EACTp8E,cAAevY,EACf/I,KAAM,cAEVc,KAAKwlH,cAAgB5oB,GACdA,GACP58F,KAAKgI,QAAQ,SACTlQ,QAAS8kG,EACTp8E,cAAevY,EACf/I,KAAM,cAKtB6zF,GAAUhsF,UAAU7H,KAAO,SACH,mBAAb3B,WAA4BA,SAASsa,cAAc,UAAUgrG,aACpElY,GAAQzyG,QAAQ01G,QAAS,EACzBlD,GAAe/+F,QAAQ4c,SAAS,SAAUwqE,GAAW,KAUrDsa,GAAaX,GAAOhsG,QACpBkiH,SAAU,SAAU/wB,GAChBA,EAAIj5D,OACJ54B,KAAK4zF,aAAa/B,GAClB7xF,KAAKsiH,QAAQzwB,GACb7xF,KAAKyiH,WAAW5wB,GAChBA,EAAI0wB,YACJviH,KAAKylH,aAAa5zB,EAAK7xF,KAAKm8G,YAC5Bn8G,KAAK0lH,YAAY7zB,GACjB7xF,KAAK2lH,WAAW9zB,GAChB7xF,KAAK4lH,YAAY/zB,GACjB7xF,KAAK6lH,QAAQh0B,GACb7xF,KAAK8lH,UAAUj0B,GACfA,EAAI3wD,WAER2kF,QAAS,SAAUh0B,GAAV,GACDoN,GAAOj/F,KAAKm8G,WAAW/7G,QAAQ6+F,KAC/B8mB,GAAU,CAcd,OAbI9mB,KACsB,aAAlBA,EAAK73E,UACLpnB,KAAKgmH,gBAAgBn0B,EAAKoN,GAC1B8mB,GAAU,GACFlhC,EAAcoa,EAAKtpB,SAC3Bkc,EAAIo0B,UAAYhnB,EAAKtpB,MACrBkc,EAAIj5D,OACJ54B,KAAK0iH,YAAY7wB,EAAKoN,EAAK/2E,SAC3B2pE,EAAIoN,OACJpN,EAAI3wD,UACJ6kF,GAAU,IAGXA,GAEXC,gBAAiB,SAAUn0B,EAAKoN,GAAf,GAETxM,GAEIxjF,EACAvX,EAGA4gE,EAPJ2zB,EAAOjsF,KAAKm8G,WAAWrvB,SAEvBmS,aAAgBkF,KACZl1F,EAAQgwF,EAAKhwF,QACbvX,EAAMunG,EAAKvnG,MACf+6F,EAAWZ,EAAIq0B,qBAAqBj3G,EAAMqkB,EAAGrkB,EAAMoC,EAAG3Z,EAAI47B,EAAG57B,EAAI2Z,IAC1D4tF,YAAgBmL,MACnB9xC,EAAS2mC,EAAK3mC,SAClBm6B,EAAWZ,EAAIs0B,qBAAqB7tD,EAAOhlC,EAAGglC,EAAOjnD,EAAG,EAAGinD,EAAOhlC,EAAGglC,EAAOjnD,EAAG4tF,EAAK7mG,WAExFo6F,GAAiBC,EAAUwM,EAAKvM,OAChCb,EAAIj5D,OACCqmE,EAAKmF,aACNvS,EAAIx3D,UAAU4xD,EAAKjzF,QAAS,EAAG,EAAGizF,EAAKhzF,SAAUgzF,EAAKxoD,OAAOnQ,EAAG24D,EAAKxoD,OAAOpyB,GAEhFwgF,EAAIo0B,UAAYxzB,EAChBZ,EAAIoN,OACJpN,EAAI3wD,WAER4kF,UAAW,SAAUj0B,GACjB,GAAIqN,GAASl/F,KAAKm8G,WAAW/7G,QAAQ8+F,MACrC,IAAIA,IAAWra,EAAcqa,EAAOvpB,QAAUupB,EAAOlmG,MAAQ,EAOzD,MANA64F,GAAIu0B,YAAclnB,EAAOvpB,MACzBkc,EAAIw0B,UAAY/gC,EAAe4Z,EAAOlmG,MAAO,GAC7C64F,EAAIj5D,OACJ54B,KAAK0iH,YAAY7wB,EAAKqN,EAAOh3E,SAC7B2pE,EAAIqN,SACJrN,EAAI3wD,WACG,GAGfogF,SAAU,WACN,GAAIpiB,GAASl/F,KAAKm8G,WAAW/7G,QAAQ8+F,MACrC,IAAIA,GAAUA,EAAOoiB,SACjB,MAAOpiB,GAAOoiB,SAASxkH,eAG/B4oH,YAAa,SAAU7zB,GAAV,GAGD4vB,GAFJH,EAAWthH,KAAKshH,UAChBA,IAAYA,IAAaxV,KACrB2V,EAAY5V,GAAYyV,GACxBzvB,EAAI6zB,YACJ7zB,EAAI6zB,YAAYjE,IAEhB5vB,EAAIy0B,QAAU7E,EACd5vB,EAAI00B,eAAiB9E,KAIjCkE,WAAY,SAAU9zB,GAAV,GACJyvB,GAAWthH,KAAKshH,WAChBpiB,EAASl/F,KAAKm8G,WAAW/7G,QAAQ8+F,MACjCoiB,IAAYA,IAAaxV,GACzBja,EAAI6vB,QAAU3V,GACP7M,GAAUA,EAAOwiB,UACxB7vB,EAAI6vB,QAAUxiB,EAAOwiB,UAG7BkE,YAAa,SAAU/zB,GACnB,GAAIqN,GAASl/F,KAAKm8G,WAAW/7G,QAAQ8+F,MACjCA,IAAUA,EAAOiY,WACjBtlB,EAAIslB,SAAWjY,EAAOiY,WAG9BsO,aAAc,SAAU5zB,EAAKpqD,GACzBmqD,GAAWC,EAAKpqD,MAGxBglE,GAAWzN,KAAOqO,GACdC,GAAYD,GAAW3sG,QACvB+kH,aAAc,SAAU5zB,GACpB,GAAIpqD,GAAOznC,KAAKm8G,WAAWxE,QAC3B/lB,IAAWC,EAAKpqD,MAGxBglE,GAAWhD,IAAM6D,GACbC,GAAeF,GAAW3sG,QAC1B+kH,aAAc,SAAU5zB,GAAV,GACNtR,GAAMvgF,KAAKm8G,WAAW3P,WACtBl0C,EAASioB,EAAIjoB,OACblgE,EAASmoF,EAAInoF,MACjBy5F,GAAIwlB,IAAI/+C,EAAOhlC,EAAGglC,EAAOjnD,EAAGjZ,EAAQ,EAAa,EAAVwG,KAAKswF,OAGpDud,GAAWrH,OAASmI,GAChBC,GAAaH,GAAW3sG,QACxB+kH,aAAc,SAAU5zB,GAAV,GACNtR,GAAMvgF,KAAKm8G,WAAW3P,WACtB/oE,EAAS88C,EAAI98C,OACb1lC,EAAOwiF,EAAIxiF,IACf8zF,GAAIhyB,KAAKp8B,EAAOnQ,EAAGmQ,EAAOpyB,EAAGtT,EAAK/E,MAAO+E,EAAK9E,WAGtDwzG,GAAW1f,KAAOygB,GACdC,GAAcJ,GAAW3sG,QACzBC,KAAM,SAAUw7G,EAAYrpB,GACxBua,GAAWppG,GAAGtD,KAAKwH,KAAKnI,KAAMm8G,GAC9Bn8G,KAAKwmH,OAASxmH,KAAKwmH,OAAOp/G,KAAKpH,MAC/BA,KAAKymH,QAAUzmH,KAAKymH,QAAQr/G,KAAKpH,MACjCA,KAAKmoB,QAAUgtD,IACf,IAAIklB,GAAMr6F,KAAKq6F,IAAM,GAAIS,MACrBhI,KAAS,UAAU54F,KAAKiiH,EAAW5nC,SACnC8lB,EAAIU,YAAcjI,GAEtBuH,EAAI9lB,IAAM4nC,EAAW5nC,MACjB8lB,EAAI95F,SACJP,KAAKwmH,UAELnsB,EAAIE,OAASv6F,KAAKwmH,OAClBnsB,EAAIG,QAAUx6F,KAAKymH,UAG3B7D,SAAU,SAAU/wB,GACa,aAAzB7xF,KAAKmoB,QAAQirB,UACby+C,EAAIj5D,OACJ54B,KAAK4zF,aAAa/B,GAClB7xF,KAAKsiH,QAAQzwB,GACb7xF,KAAK0mH,UAAU70B,GACfA,EAAI3wD,YAGZitE,cAAe,SAAUlmG,GACL,QAAZA,EAAEiW,OACFle,KAAKmoB,QAAUgtD,KACfn1E,KAAKq6F,IAAI9lB,IAAMv0E,KAAKm8G,WAAW5nC,OAE/B84B,GAAWppG,GAAGkqG,cAAchmG,KAAKnI,KAAMiI,IAG/Cu+G,OAAQ,WACJxmH,KAAKmoB,QAAQ2Z,UACb9hC,KAAK48G,cAET6J,QAAS,WACLzmH,KAAKmoB,QAAQi+B,OAAWt9C,MAAM,yBAA4B9I,KAAKq6F,IAAI9lB,IAAM,wDAE7EmyC,UAAW,SAAU70B,GAAV,GACHhyB,GAAO7/D,KAAKm8G,WAAWt8C,OACvBoxC,EAAUpxC,EAAKoxC,SACnBpf,GAAI60B,UAAU1mH,KAAKq6F,IAAK4W,EAAQ39E,EAAG29E,EAAQ5/F,EAAGwuD,EAAK7mE,QAAS6mE,EAAK5mE,aAGzEwzG,GAAW3R,MAAQ2S,GACfC,GAAaL,GAAW3sG,QACxBkiH,SAAU,SAAU/wB,GAAV,GACFp8D,GAAOz1B,KAAKm8G,WACZ9rC,EAAM56C,EAAKz7B,WACX+D,EAAO03B,EAAK+rC,SAChBqwB,GAAIj5D,OACJ54B,KAAK4zF,aAAa/B,GAClB7xF,KAAKsiH,QAAQzwB,GACb7xF,KAAKyiH,WAAW5wB,GAChBA,EAAI0wB,YACJ1wB,EAAIkH,KAAOtjE,EAAKr1B,QAAQ24F,KACxBlH,EAAI4Q,UAAY,OACZziG,KAAK6lH,QAAQh0B,IACbA,EAAI80B,SAASlxF,EAAK6/B,UAAW+a,EAAI/8C,EAAG+8C,EAAIh/D,EAAItT,EAAKgkF,UAEjD/hF,KAAK8lH,UAAUj0B,KACf7xF,KAAK0lH,YAAY7zB,GACjBA,EAAI+0B,WAAWnxF,EAAK6/B,UAAW+a,EAAI/8C,EAAG+8C,EAAIh/D,EAAItT,EAAKgkF,WAEvD8P,EAAI3wD,aAGZurE,GAAW5C,KAAO6D,GACdC,GAAkBN,GAAW3sG,QAC7B+kH,aAAc,SAAU5zB,GAAV,GAED/2F,GADLw/C,EAAQt6C,KAAKm8G,WAAW7hE,KAC5B,KAASx/C,EAAI,EAAGA,EAAIw/C,EAAM3iD,OAAQmD,IAC9B82F,GAAWC,EAAKv3C,EAAMx/C,OAIlC2xG,GAAW/C,UAAYiE,GACnBC,IACAjD,QAAS5X,GACTxB,SAAUsb,GACVr0D,KAAMk0D,GACNd,UAAWe,GACXT,QAASoB,GACTnB,WAAYoB,GACZnB,SAAUoB,GACVnB,UAAWoB,GACXnB,SAAUoB,GACVzB,SAAUoB,GACVd,cAAeoB,IA4Cfr0G,GAAUq3F,GAIVkP,GAAuB,uBACvBpF,MACA5G,MACJA,GAASgG,MAAQhG,GACbiT,GAAW+C,GAAKnpG,QAChBC,KAAM,SAAU/D,EAAKijE,EAAMz/D,GACvBypG,GAAK5lG,GAAGtD,KAAKwH,KAAKnI,KAAMpD,EAAKijE,EAAK4xB,YAAarxF,GAC/CJ,KAAK6mH,SAAWhnD,GAEpBA,KAAM,WACF,MAAO7/D,MAAK6mH,UAEhB/5B,QAAS,WACL,MAAO9sF,MAAK6mH,YA2BhB/yG,GAA6B,mBAAZ5T,UAA2BA,QAAQ6G,WAAa,SAAUyuE,GAC3E,MAAIA,GAAE1hE,QACK,SAAUrV,EAAIsF,GACjB,MAAOtF,GAAGqV,QAAQ/P,IAGtByxE,EAAEn3D,sBACK,SAAU5f,EAAIsF,GACjB,MAAOtF,GAAG4f,sBAAsBta,IAGpCyxE,EAAEl3D,mBACK,SAAU7f,EAAIsF,GACjB,MAAOtF,GAAG6f,mBAAmBva,IAGjCyxE,EAAEj3D,kBACK,SAAU9f,EAAIsF,GACjB,MAAOtF,GAAG8f,kBAAkBxa,IAG7B,SAAUkN,GACb,SAAU/S,QAAQiK,KAAK5K,SAASmhB,iBAAiBzN,GAAIjR,aAE3DE,QAAQ6G,WAYNuwF,GAAa,SAAU7gG,GACvB,MAAIA,GACO,QAAS6gG,GAAW74F,GAApB,GAGKqoH,GAAaC,EAAmBjsH,EAChCU,EAHJW,EAAQsC,EAAGkzD,WAAU,EACzB,IAAmB,GAAflzD,EAAG2oB,SAAe,CACd0/F,EAAMrwH,EAAEgI,GAAKsoH,EAAStwH,EAAE0F,GACxBX,EAAOsrH,EAAItrH,MACf,KAAKV,IAAKU,GACNurH,EAAOvrH,KAAKV,EAAGU,EAAKV,GAWxB,KATI,YAAYZ,KAAKuE,EAAG6lB,SACpBnoB,EAAM0mH,WAAW,MAAM6D,UAAUjoH,EAAI,EAAG,GACjC,sCAAsCvE,KAAKuE,EAAG6lB,WACrDnoB,EAAMk0D,gBAAgB,MACtBl0D,EAAMk0D,gBAAgB,QACtBl0D,EAAMyB,MAAQa,EAAGb,MACjBzB,EAAM21D,QAAUrzD,EAAGqzD,QACnB31D,EAAM61D,SAAWvzD,EAAGuzD,UAEnBl3D,EAAI2D,EAAGoyC,WAAY/1C,EAAGA,EAAIA,EAAEg2C,YAC7B30C,EAAM8b,YAAYq/E,EAAWx8F,IAGrC,MAAOqB,IAGJ,SAAoBsC,GAApB,GAiBC6sB,GAhBAnvB,EAAQ,QAASw+F,GAAK3oE,GAAd,GAKCl3B,GAJLqB,EAAQ61B,EAAK2/B,WAAU,EAI3B,KAHI3/B,EAAKuyE,qBACLpoG,EAAMooG,mBAAqBvyE,EAAKuyE,oBAE3BzpG,EAAIk3B,EAAK6e,WAAY/1C,EAAGA,EAAIA,EAAEg2C,YACnC30C,EAAM8b,YAAY0iF,EAAK7/F,GAE3B,OAAOqB,IACTsC,GACEuoH,EAAWvoH,EAAGigB,iBAAiB,SAcnC,OAbIsoG,GAASrvH,QACTy7F,GAAQj3F,EAAMuiB,iBAAiB,WAAWsa,QAAQ,SAAUiuF,EAAWnsH,GACnEmsH,EAAUpE,WAAW,MAAM6D,UAAUM,EAASlsH,GAAI,EAAG,KAGzDwwB,EAAO7sB,EAAGigB,iBAAiB,mCAC/B00E,GAAQj3F,EAAMuiB,iBAAiB,oCAAoCsa,QAAQ,SAAUv6B,EAAI3D,GACrF2D,EAAG4xD,gBAAgB,MACnB5xD,EAAG4xD,gBAAgB,QACnB5xD,EAAGb,MAAQ0tB,EAAKxwB,GAAG8C,MACnBa,EAAGqzD,QAAUxmC,EAAKxwB,GAAGg3D,QACrBrzD,EAAGuzD,SAAW1mC,EAAKxwB,GAAGk3D,WAEnB71D,IAGC,mBAAXzF,SAA0BA,OAAOuB,OAASvB,OAAOuB,MAAM8sB,QAwZhE2uE,GAAQoE,aAAeA,GACvBpE,GAAQiT,SAAW,SAAU7uG,GACzB,GAAI28C,GAAQ,GAAIi9C,GAchB,OAbAmC,IAASC,UAAW,EACpBD,GAASE,QAAUC,GAAOC,OAC1BJ,GAASK,kBACLp8F,QAASA,EACT28C,MAAOA,GAEXwmD,GAAanjG,EAAS2F,GAAiB3F,GAAU28C,GACd,GAA/B38C,EAAQ+4C,WAAWzpB,SACnBu+E,GAAW7tG,EAASA,EAAQ+4C,WAAY4D,GAExCurD,GAAeloG,EAAS28C,GAE5B2mD,KACO3mD,GAEPmmD,GAAuB,WAavB,QAAShrD,GAAM9vC,GAKX,QAASonH,KACL,GAAIn2G,GAAIo2G,EAAe93G,KAAKvP,EACxBiR,KACAjR,EAAQA,EAAMyU,OAAOxD,EAAE,GAAGpZ,SAGlC,QAAS62C,GAAKwgB,GACVk4D,GACA,IAAIn2G,GAAIi+C,EAAM3/C,KAAKvP,EACnB,IAAIiR,EAEA,MADAjR,GAAQA,EAAMyU,OAAOxD,EAAE,GAAGpZ,QACnBoZ,EAAE,GAGjB,QAASq2G,KAAT,GAEQzvH,GAAQ4X,EAEJlX,EAHJs9E,EAAQ19E,MAAMy9E,WAAW51E,GAAO,EAEpC,IAAI61E,EAOA,MANIt9E,GAAQ,eAAegX,KAAKvP,IAAU,iBAAiBuP,KAAKvP,IAAU,UAAUuP,KAAKvP,GACzFA,EAAQA,EAAMyU,OAAOlc,EAAM,GAAGV,QAC9Bg+E,EAAQA,EAAM+J,SACR/nF,EAAS62C,EAAK64E,MAChB93G,EAAUi/B,EAAK84E,KAGf3xC,MAAOA,EACPh+E,OAAQA,EACR4X,QAASA,GAIrB,QAASg4G,GAAqBC,GAA9B,GACQn+B,GACAo+B,EAAKC,EAmBGp0F,EAAuBjiB,EAevB2O,EAjCR0yE,KACApyF,GAAU,CACd,IAAIkuC,EAAKm5E,GAAY,CA8BjB,IA7BAt+B,EAAQ76C,EAAKo5E,GACTv+B,GACAA,EAAQqT,GAAWrT,GACnB76C,EAAKq5E,KAELJ,EAAMj5E,EAAKs5E,GACA,MAAPL,EACAA,EAAMj5E,EAAKs5E,GACJL,GAAO,KAAKvtH,KAAKstH,KACxBlnH,GAAU,GAEdonH,EAAMl5E,EAAKs5E,GACXt5E,EAAKq5E,IAEL,QAAQ3tH,KAAKstH,IAAsB,MAATn+B,GAAwB,MAAPo+B,IACvCn0F,EAAIkb,EAAK84E,GAAcj2G,EAAIm9B,EAAK84E,GACpChnH,GAAU,EACD,MAALgzB,EACAm0F,EAAM,OACM,QAALn0F,IACPm0F,EAAM,SAED,MAALp2G,EACAq2G,EAAM,MACM,QAALr2G,IACPq2G,EAAM,UAEVl5E,EAAKq5E,IAEF/nH,IAAU0uC,EAAKu5E,KACd/nG,EAAOonG,MAIX10B,EAAM5qF,KAAKkY,GACXwuB,EAAKq5E,EAET,QACI3oH,KAAM,SACNmqF,MAAOA,EACPj8D,GAAIq6F,GAAOC,EAAMD,EAAM,IAAMC,EAAMD,EAAMA,EAAMC,EAAMA,EAAM,KAC3Dh1B,MAAOA,EACPpyF,QAASA,IAIrB,QAAS0nH,KACL,GAAIx5E,EAAKm5E,GAAY,CACjB,GAAItkG,GAAMmrB,EAAKy5E,EAGf,OAFA5kG,GAAMA,EAAInsB,QAAQ,iBAAkB,IACpCs3C,EAAKu5E,IAED7oH,KAAM,MACNmkB,IAAKA,IA/FrB,GAmGQ6kG,GAlGA58F,EAAOxrB,CACX,OAAIpD,IAAeyrH,EAAQ78F,GAChB68F,EAAO78F,KAiGd48F,EAAM15E,EAAK45E,IACXF,EAAMX,EAAqBW,IACpBA,EAAM15E,EAAK65E,MAClBH,EAAMF,KAEHG,EAAO78F,GAAQ48F,IAAShpH,KAAM,SAtHlB,GACnBkpH,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,UAAUxoH,GACb,MAAIpD,IAAe4rH,EAAQxoH,GAChBwoH,EAAOxoH,GAEXwoH,EAAOxoH,GAASk5F,GAAcl5F,GAAOkT,IAAI48B,OAGpDopD,GAAgB,WAChB,GAAIrsE,KACJ,OAAO,UAAU7sB,EAAOw/F,GAapB,QAASipB,GAAW9rH,GAChB,MAAOsU,GAAItU,EAAG4S,KAAKvP,EAAMyU,OAAO87D,IAEpC,QAAS/9C,GAAK11B,GACV,MAAOA,GAAI1F,QAAQ,aAAc,IAjBlC,GAIC6rF,GAIAn3D,EACA48F,EAAan4C,EACbo4C,EACAC,EACA33G,CAPJ,IAJKuuF,IACDA,EAAY,YAEZvc,EAAWjjF,EAAQw/F,EACnB5iG,GAAeiwB,EAAOo2D,GACtB,MAAOp2D,GAAMo2D,EAajB,KAXIn3D,KACA48F,EAAU,EAAGn4C,EAAM,EACnBo4C,EAAW,EACXC,GAAY,EAQTr4C,EAAMvwE,EAAMnI,SACV+wH,GAAaH,EAAW,cACzBE,IACAp4C,MACQq4C,GAAaH,EAAW,cAChCE,IACAp4C,MACQq4C,GAAaH,EAAW,YAChCG,EAAY33G,EAAE,GACds/D,KACoB,KAAbq4C,GAAqBH,EAAW,SACvCl4C,GAAO,EACa,KAAbq4C,GAAoBH,EAAW,SACtCl4C,GAAO,EACa,KAAbq4C,GAAqBH,EAAW,QACvCG,GAAY,EACZr4C,KACoB,KAAbq4C,GAAoBH,EAAW,QACtCG,GAAY,EACZr4C,KACOk4C,EAAWjpB,KACbopB,IAAcD,GAAYp4C,EAAMm4C,IACjC58F,EAAI9jB,KAAKwqB,EAAKxyB,EAAMxI,UAAUkxH,EAASn4C,KACvCm4C,EAAUn4C,EAAMt/D,EAAE,GAAGpZ,QAEzB04E,GAAOt/D,EAAE,GAAGpZ,QAEZ04E,GAMR,OAHIm4C,GAAUn4C,GACVzkD,EAAI9jB,KAAKwqB,EAAKxyB,EAAMxI,UAAUkxH,EAASn4C,KAEpC1jD,EAAMo2D,GAAYn3D,MAG7BqtE,GAAa,SAAUtsE,GACvB,MAAO,UAAUluB,GAAV,GAGKsS,GAFJsS,EAAMsJ,EAAMluB,EAShB,OARK4kB,MAEGtS,EAAI,2DAA2D1B,KAAK5Q,IACpE4kB,EAAMsJ,EAAMluB,GAAMsS,EAAE,IACbA,EAAI,kCAAkC1B,KAAK5Q,MAClD4kB,EAAMsJ,EAAMluB,GAAMsS,EAAE,KAGrBsS,IAEbrc,OAAOioC,OAASjoC,OAAOioC,OAAO,UAC5B23D,GAAgB,SAAUj6E,GAC1B,MAAO,UAAUosE,GACb,GAAI9/F,GAAS0zB,EAAMosE,EAInB,OAHc,OAAV9/F,IACAA,EAAS0zB,EAAMosE,GAAQyP,GAAUxmB,YAAY,QAAU+W,KAAMA,IAAQ9/F,QAElEA,IAEb+N,OAAOioC,OAASjoC,OAAOioC,OAAO,UAgxD5BvtB,IACA4vE,IAAKA,GACLsc,OAAQA,GACRv4B,KAAMA,GACNo1B,WAAYA,GACZE,QAASA,GACTC,SAAUA,GACVF,eAAgBA,GAChBhC,aAAcA,GACd9V,YAAaA,GACbO,UAAWA,GACX4Z,SAAUA,GACVI,eAAgBA,GAChB1E,eAAgBA,GAChBvoG,QAAS0oG,GACTxD,OAAQA,GACRqE,IAAKA,GACLzK,KAAMA,GACN0K,UAAWA,GACXG,KAAMA,GACN/O,MAAOqH,GACPzQ,MAAOA,GACPh7B,OAAQA,GACRq2B,KAAMid,GACN1c,MAAOA,GACPK,OAAQA,GACRM,MAAOA,GACPC,OAAQA,GACRr1F,KAAMA,GACN81F,MAAOA,GACPC,IAAKA,GACLuV,eAAgBA,GAChBiG,eAAgBA,GAChBF,aAAcA,GACdC,SAAUA,GACVltE,UAAWA,GACXqtE,iBAAkBA,GAClB5W,QAASA,IAEbz7F,MAAM2C,WAAW3C,OACbypB,QAASA,GACT8qF,SAAUA,KAEdv0G,MAAMypB,QAAQ6nF,QAAUtxG,MAAMu0G,SAASjD,QACvCtxG,MAAMwpB,QAAQC,QAAUzpB,MAAMypB,QAC9BzpB,MAAMwpB,QAAQ+qF,SAAWv0G,MAAMu0G,SAC/Bv0G,MAAMypB,QAAQ2zD,KAAK2M,YAAc/pF,MAAMo9E,KAAK2M,YAC5C/pF,MAAMypB,QAAQ2zD,KAAKuM,UAAY3pF,MAAMo9E,KAAKuM,UAC1C3pF,MAAMypB,QAAQy0D,MAAQl+E,MAAMk+E,MAC5Bl+E,MAAMo9E,KAAK4O,aAAehsF,MAAMypB,QAAQ2zD,KAAK4O,cAC/CvtF,OAAOuB,MAAM8sB,SACC,kBAAVvuB,SAAwBA,OAAO2iC,IAAM3iC,OAAS,SAAU4iC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAU9iC,EAAGC,QACVA,OAAO,2BACH,cACA,yBACDD,IACL,YACG,SAAUE,GAAV,GACO02E,GAAK,SACLl1E,EAAQvB,OAAOuB,MACf2C,EAAa3C,EAAM2C,WACnBosE,EAAQ/uE,EAAMypB,QAAQ2zD,KACtBoO,EAAUzc,EAAMyc,QAChBqB,EAAa9d,EAAM8d,WACnBH,EAAmB3d,EAAM2d,iBACzBprF,EAAatB,EAAMuB,YACnBC,EAAcxB,EAAMyB,aACpBsM,EAAQvP,EAAEuP,MACV2iH,EAAmB,qEACnBC,EAAyB,uFACzBC,EAAiB5wH,EAAMrB,MAAM8J,QAC7BC,KAAM,SAAUg8D,EAASv8D,GACrBJ,KAAKlI,QAAUrB,EAAEkyH,GACjB3oH,KAAKs1D,QAAUt1D,KAAKlI,QAAQ6C,SAAS,sBACrCyF,EAAUA,MACVJ,KAAKI,QAAUxF,KAAeoF,KAAKI,QAASJ,KAAK8oH,gBAAgB1oH,IACjEJ,KAAK+oH,cACDvxF,SAAUp3B,EAAQo3B,SAClBo2C,UAAWxtE,EAAQwtE,UACnBU,kBAAkB,EAClBf,UAAW,WAEfvtE,KAAKgpH,kBAAoBvyH,EAAEuP,MAAMhG,KAAKipH,WAAYjpH,MAClDA,KAAK28D,QAAUA,EACf38D,KAAKkpH,eAET9oH,SACIpG,SAAU,MACVy5E,OAAQ,aACRr0E,OAAQ,EACRy0E,UAAU,EACVs1C,UAAW,EACXn1C,UAAW,KAEfk1C,YAAa,WACTlpH,KAAKopH,aAAepjH,EAAMhG,KAAKqpH,WAAYrpH,MAC3CA,KAAKspH,qBAAuBtjH,EAAMhG,KAAKupH,cAAevpH,MACtDA,KAAKwpH,mBAAqBxjH,EAAMhG,KAAK8zE,YAAa9zE,MAClDA,KAAKypH,kBAAoBzjH,EAAMhG,KAAK67G,WAAY77G,MAChDA,KAAK28D,QAAQv1D,KAAK,QAASpH,KAAKopH,cAChCppH,KAAK28D,QAAQv1D,KAAK,aAAcpH,KAAKopH,cACrCppH,KAAK28D,QAAQv1D,KAAK,aAAcpH,KAAKwpH,oBACrCxpH,KAAK28D,QAAQv1D,KAAK,YAAapH,KAAKypH,mBACpCzpH,KAAK28D,QAAQ7kE,QAAQ4N,GAAG,aAAeynE,EAAIntE,KAAKspH,sBAChDtpH,KAAKlI,QAAQ4N,GAAG,QAAUynE,EAAI,oBAAqBnnE,EAAMhG,KAAK0pH,WAAY1pH,QAE9E2pH,SAAU,WAIN,MAHK3pH,MAAKsvE,QACNtvE,KAAKsvE,MAAQ,GAAIr3E,GAAMspB,GAAG6rD,MAAMptE,KAAKlI,QAASkI,KAAK+oH,eAEhD/oH,KAAKsvE,OAEhBtpD,QAAS,WACL,GAAIspD,GAAQtvE,KAAKsvE,KACjBtvE,MAAK28D,QAAQ90D,OAAO,QAAS7H,KAAKopH,cAClCppH,KAAK28D,QAAQ90D,OAAO,aAAc7H,KAAKopH,cACvCppH,KAAK28D,QAAQ90D,OAAO,aAAc7H,KAAKwpH,oBACvCxpH,KAAK28D,QAAQ90D,OAAO,YAAa7H,KAAKypH,mBACtCzpH,KAAK28D,QAAQ7kE,QAAQiyB,IAAI,aAAeojD,EAAIntE,KAAKspH,sBACjDtpH,KAAKlI,QAAQiyB,IAAI,QAAUojD,GACvBmC,IACAA,EAAMtpD,gBACChmB,MAAKsvE,aAETtvE,MAAK+oH,aACZh+F,aAAa/qB,KAAK+pD,gBACX/pD,MAAKlI,cACLkI,MAAKs1D,cACLt1D,MAAK28D,SAEhBmsD,gBAAiB,SAAU1oH,GAEvB,MADAA,GAAUA,OAENpG,SAAUoG,EAAQpG,SAClBy5E,OAAQrzE,EAAQqzE,OAChBr0E,OAAQgB,EAAQhB,OAChBy0E,SAAUzzE,EAAQyzE,SAClB76E,MAAOoH,EAAQpH,MACfC,OAAQmH,EAAQnH,OAChBq8D,QAASl1D,EAAQk1D,QACjBs0D,OAAQxpH,EAAQwpH,OAChBT,UAAW/oH,EAAQ+oH,UACnBn1C,UAAW5zE,EAAQ4zE,YAG3B61C,cAAe,SAAUjtB,GACrB,KAAOA,IAAUA,EAAMx8F,QAAQ0pH,SAC3BltB,EAAQA,EAAMjjG,MAElB,OAAOijG,IAEXmtB,eAAgB,SAAUzpG,EAAQs8E,EAAOx8F,GACrC,GAAIk1D,GAAUl1D,EAAQk1D,OAOtB,IANIr9D,EAAMiE,WAAWo5D,KACjBA,EAAUA,GACNx9D,QAAS8kG,EACTt8E,OAAQA,KAGZg1C,EAEA,MADAt1D,MAAKs1D,QAAQ5yD,KAAK4yD,IACX,GAGfwZ,UAAW,SAAU8tB,EAAOx8F,EAASyoE,EAAa/vD,GAAvC,GAgBC2jG,GAfJziH,EAAWoG,EAAQpG,SACnBgwH,EAAgB5pH,EAAQhB,QAAU,EAClCu9D,EAAU38D,KAAK28D,QACfv9D,EAASu9D,EAAQstD,UAAU3N,iBAC3Bv+G,EAAO4+D,EAAQj3C,UACfwkG,EAAgBvtD,EAAQstD,UAAUlK,QAClC9zB,EAAO2Q,EAAM3Q,OACbjzF,EAAQ6vE,EAAY7vE,MACpBC,EAAS4vE,EAAY5vE,OACrBP,EAAO,EAAG4G,EAAM,CAsBpB,OArBA2sF,GAAKxoD,OAAOhG,UAAUr+B,EAAO1G,KAAM0G,EAAOE,KACtC4qH,GACAj+B,EAAKxoD,OAAOhG,WAAWysF,EAAc52F,GAAI42F,EAAc74G,GAE3C,UAAZrX,GAAwB8e,GACpB2jG,EAAQ93B,EAAiB7rE,GAC7BpgB,EAAO+jH,EAAMnpF,EAAIt6B,EAAQ,EACzBsG,EAAMm9G,EAAMprG,EAAIpY,EAAS+wH,GACN,QAAZhwH,GACPtB,EAAOuzF,EAAKxoD,OAAOnQ,EAAIt6B,EAAQgxH,EAC/B1qH,EAAM2sF,EAAK3zB,SAASjnD,EAAIpY,EAAS,GACd,SAAZe,GACPtB,EAAOuzF,EAAKG,cAAc94D,EAAI02F,EAC9B1qH,EAAM2sF,EAAK3zB,SAASjnD,EAAIpY,EAAS,GACd,UAAZe,GACPtB,EAAOuzF,EAAK3zB,SAAShlC,EAAIt6B,EAAQ,EACjCsG,EAAM2sF,EAAKG,cAAc/6E,EAAI24G,IAE7BtxH,EAAOuzF,EAAK3zB,SAAShlC,EAAIt6B,EAAQ,EACjCsG,EAAM2sF,EAAKxoD,OAAOpyB,EAAIpY,EAAS+wH,IAG/BtxH,KAAMosF,EAAWpsF,EAAM0G,EAAO1G,KAAM0G,EAAO1G,KAAOqF,EAAK/E,OACvDsG,IAAKwlF,EAAWxlF,EAAKF,EAAOE,IAAKF,EAAOE,IAAMvB,EAAK9E,UAG3DkpC,KAAM,SAAUy6D,EAAOx8F,GACnBJ,KAAKk0E,MAAM0oB,EAAOA,EAAOhiG,KAAeoF,KAAKI,QAASJ,KAAK8oH,gBAAgBlsB,EAAMx8F,QAAQ0pH,SAAU1pH,KAEvGU,KAAM,WAAA,GACEwuE,GAAQtvE,KAAKsvE,MACb3jE,EAAU3L,KAAK4kH,eACZ5kH,MAAK4kH,SACZ75F,aAAa/qB,KAAKmqH,cACd76C,GAASA,EAAM9rE,WAAamI,IAAY3L,KAAK28D,QAAQ30D,QAAQ,gBACzDlQ,QAAS6T,EAAQixF,MACjBt8E,OAAQ3U,EAAQ2U,OAChBgvD,MAAOA,KAEXA,EAAMxB,SAGd47C,WAAY,SAAUzhH,GAClBA,EAAE9D,iBACFnE,KAAKc,QAETozE,MAAO,SAAU5zD,EAAQs8E,EAAOx8F,EAAS0Y,EAAOmb,GAAzC,GAOCq7C,GAOIzG,EAbJl9D,EAAU3L,KAAK4kH,QACnB75F,cAAa/qB,KAAK+pD,UACdp+C,IAAYA,EAAQixF,QAAUA,GAASx8F,EAAQwpH,QAAUj+G,EAAQ2U,SAAWA,KAGhFyK,aAAa/qB,KAAKmqH,cACd76C,EAAQtvE,KAAK2pH,YACZ3pH,KAAK28D,QAAQ30D,QAAQ,eAClBlQ,QAAS8kG,EACTt8E,OAAQA,EACRgvD,MAAOA,KACLtvE,KAAK+pH,eAAezpG,EAAQs8E,EAAOx8F,KACzCJ,KAAKoqH,UAAUhqH,GACXyoE,EAAc7oE,KAAKqqH,SAASjqH,GAC5BkvE,EAAM9rE,WACN8rE,EAAMxB,OAAM,GAEhB9tE,KAAK4kH,UACDxkH,QAASA,EACTyoE,YAAaA,EACb+zB,MAAOA,EACPt8E,OAAQA,EACRtmB,SAAUgG,KAAK8uE,UAAU1uE,EAAQwpH,OAAShtB,EAAQt8E,EAAQlgB,EAASyoE,EAAa/vD,IAEhFmb,EACAj0B,KAAKmqH,aAAetgG,WAAW7pB,KAAKgpH,kBAAmB5oH,EAAQ4zE,WAAa,GAE5Eh0E,KAAKipH,gBAIjBA,WAAY,WAAA,GACJt9G,GAAU3L,KAAK4kH,SACf5qH,EAAW2R,EAAQ3R,QACvBgG,MAAK2pH,WAAW97C,KAAK7zE,EAAStB,KAAMsB,EAASsF,MAEjD8qH,UAAW,SAAUhqH,GACbA,EAAQyzE,UAAY7zE,KAAKsqH,eACzBtqH,KAAKlI,QAAQiuC,YAAY,sBACzB/lC,KAAKsqH,aAAajiG,eACXroB,MAAKsqH,cAEXlqH,EAAQyzE,UAAa7zE,KAAKsqH,eAC3BtqH,KAAKlI,QAAQwC,SAAS,sBACtB0F,KAAKsqH,aAAe7zH,EAAEmyH,GAAwBxgG,UAAUpoB,KAAKlI,WAGrEuxH,WAAY,SAAUphH,GAAV,GAGA7H,GAFJw8F,EAAQ58F,KAAK6pH,cAAc5hH,EAAEnQ,QAC7B8kG,KACIx8F,EAAUxF,KAAeoF,KAAKI,QAASJ,KAAK8oH,gBAAgBlsB,EAAMx8F,QAAQ0pH,UAC1E1pH,GAAWA,EAAQqzE,QAAUxrE,EAAE/I,MAC/Bc,KAAKk0E,MAAMjsE,EAAEnQ,QAAS8kG,EAAOx8F,EAAS6H,EAAEuY,eAAe,KAInE6pG,SAAU,SAAUjqH,GAAV,GAEFpH,GAAOC,EAKPuK,EANA8rE,EAAQtvE,KAAK2pH,UAmBjB,OAjBA3pH,MAAKlI,QAAQE,KACTgB,MAAO,OACPC,OAAQ,SAERuK,EAAU8rE,EAAM9rE,UACfA,GACD8rE,EAAMl2E,QAAQ+oC,OAElBniC,KAAKlI,QAAQE,KACTgB,MAAOyqF,EAAQrjF,EAAQpH,OAASoH,EAAQpH,MAAQ,OAChDC,OAAQwqF,EAAQrjF,EAAQnH,QAAUmH,EAAQnH,OAAS,SAEvDD,EAAQO,EAAWyG,KAAKlI,SACxBmB,EAASQ,EAAYuG,KAAKlI,SACrB0L,GACD8rE,EAAMl2E,QAAQ0H,QAGd9H,MAAOA,EACPC,OAAQA,IAGhB66E,YAAa,SAAU7rE,GAAV,GAED6hH,GACAn+G,CAFJ3L,MAAKsvE,QAAUtvE,KAAKuqH,oBAAoBtiH,EAAEuY,iBACtCspG,EAAU9pH,KACV2L,EAAUm+G,EAAQlF,SAClBj5G,GAAWA,EAAQvL,QAAQyzE,WAC3Bi2C,EAAQ//D,SAAWlgC,WAAW,WAC1BkB,aAAa++F,EAAQK,cACrBL,EAAQhpH,QACT6K,EAAQvL,QAAQ+oH,WAAa,MAI5CtN,WAAY,SAAU5zG,GAAV,GAGA7H,GAEIpG,EAJR2R,EAAU3L,KAAK4kH,QACfj5G,IAAW1D,EAAEnQ,UACTsI,EAAUuL,EAAQvL,QACE,UAApBA,EAAQpG,WACJA,EAAWgG,KAAK8uE,UAAU7mE,EAAEnQ,QAASsI,EAASuL,EAAQk9D,YAAa5gE,EAAEuY,eACzE7U,EAAQ3R,SAAWA,EACnBgG,KAAK2pH,WAAWvwH,QAAQpB,KACpBU,KAAMsB,EAAStB,KACf4G,IAAKtF,EAASsF,SAK9BiqH,cAAe,SAAUthH,GACjBjI,KAAKsvE,QAAUtvE,KAAKuqH,oBAAoBtiH,KACxC8iB,aAAa/qB,KAAKmqH,cAClBnqH,KAAKc,SAGbypH,oBAAqB,SAAUtiH,GAC3B,MAAOA,GAAE6jB,eAAiBr1B,EAAEwR,EAAE6jB,eAAe1T,QAAQpY,KAAKsvE,MAAMl2E,SAASzB,SAGjFM,GAAMypB,QAAQmnG,eAAiBA,GACjCnyH,OAAOuB,MAAM8sB,SACC,kBAAVvuB,SAAwBA,OAAO2iC,IAAM3iC,OAAS,SAAU4iC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAU9iC,EAAGC,QACVA,OAAO,mBACH,wBACA,2BACDD,IACL,YACG,SAAUE,GAoHP,QAASgnC,GAAUr+B,GACfY,KAAKiqH,UAAUxsF,UAAUr+B,GArHhC,GASOurG,GARA1yG,EAAQvB,OAAOuB,MACfg7F,EAAOh7F,EAAMypB,QACb8oG,EAAiBv3B,EAAK0X,QACtB3lG,EAAS/M,EAAMspB,GAAGvc,OAClBpK,EAAa3C,EAAM2C,WACnBoL,EAAQvP,EAAEuP,KACd/N,GAAMC,QAAQo5F,IAAMk5B,EAAetyH,QAAQo5F,IAC3Cr5F,EAAMC,QAAQ01G,OAAS4c,EAAetyH,QAAQ01G,OAC1CjD,EAAU3lG,EAAOtE,QACjBC,KAAM,SAAU7I,EAASsI,GACrB4E,EAAOf,GAAGtD,KAAKwH,KAAKnI,KAAMlI,MAC1BkI,KAAKI,QAAUxF,KAAeoF,KAAKI,QAASA,GAC5CJ,KAAKiqH,UAAYO,EAAev7E,OAAOjvC,KAAKlI,QAAQ,GAAIsI,GACpDJ,KAAKiqH,UAAUxsF,YACfz9B,KAAKy9B,UAAYA,GAErBz9B,KAAKyqH,wBAA0BzkH,EAAMhG,KAAK0qH,sBAAuB1qH,MACjEA,KAAK2qH,aAAa,SAClB3qH,KAAK2qH,aAAa,cAClB3qH,KAAK2qH,aAAa,cAClB3qH,KAAK2qH,aAAa,aAClB3qH,KAAK+7G,mBAET37G,SACI8O,KAAM,UACN46G,YAEJpiH,QACI,QACA,aACA,aACA,YACA,SACA,cACA,gBAEJgjH,sBAAuB,SAAUziH,GAC7BjI,KAAKgI,QAAQC,EAAE/I,KAAM+I,IAEzB0iH,aAAc,SAAU7xG,GACpB9Y,KAAKiqH,UAAU7iH,KAAK0R,EAAO9Y,KAAKyqH,0BAEpCx3B,KAAM,SAAUn7F,GACZkI,KAAKiqH,UAAUh3B,KAAKn7F,IAExBioD,MAAO,WACC//C,KAAKiqH,WACLjqH,KAAKiqH,UAAUlqE,QAEnB//C,KAAK4qH,eAET5kG,QAAS,WACDhmB,KAAKiqH,YACLjqH,KAAKiqH,UAAUjkG,gBACRhmB,MAAKiqH,WAEZjqH,KAAK6qH,WACL7qH,KAAK6qH,SAAS7kG,gBACPhmB,MAAK6qH,UAEhB7lH,EAAOf,GAAG+hB,QAAQ7d,KAAKnI,OAE3BykG,aAAc,WACV,MAAOzkG,MAAKiqH,UAAUxlB,gBAE1B5/F,YAAa,SAAUoD,GACnB,MAAOjI,MAAKiqH,UAAUplH,YAAYoD,IAEtC6iH,YAAa,SAAUluB,EAAOx8F,GACtBJ,KAAK6qH,UACL7qH,KAAK6qH,SAAS1oF,KAAKy6D,EAAOx8F,IAGlCwqH,YAAa,WACL5qH,KAAK6qH,UACL7qH,KAAK6qH,SAAS/pH,QAGtBkyF,gBAAiB,WACbhzF,KAAKiqH,UAAUj3B,kBACfhzF,KAAK4qH,eAETvO,eAAgB,WACZr8G,KAAKiqH,UAAU5N,kBAEnB32F,QAAS,WACL,OACI1sB,MAAOgH,KAAKlI,QAAQkB,QACpBC,OAAQ+G,KAAKlI,QAAQmB,WAG7B8sB,QAAS,SAAUhoB,GACfiC,KAAKlI,QAAQE,KACTgB,MAAO+E,EAAK/E,MACZC,OAAQ8E,EAAK9E,SAEjB+G,KAAK4lB,MAAQ7nB,EACbiC,KAAKiqH,UAAUtkG,YAAY5nB,GAC3BiC,KAAK6lB,WAETA,QAAS,WACL7lB,KAAKiqH,UAAUtkG,YAAY3lB,KAAK4lB,OAChC5lB,KAAKiqH,UAAUpkG,WAEnBk2F,gBAAiB,WACT9jH,EAAMspB,GAAG6rD,QACTptE,KAAK6qH,SAAW,GAAI53B,GAAK41B,eAAe7oH,KAAMA,KAAKI,QAAQ0pH,iBAIvE7xH,EAAMspB,GAAG+G,OAAOqiF,GAChBA,EAAQ17D,OAAS,SAAUn3C,EAASsI,GAChC,MAAO,IAAIuqG,GAAQ7yG,EAASsI,IAEhCnI,EAAMypB,QAAQipF,QAAUA,GAI1Bj0G,OAAOuB,MAAM8sB,SACC,kBAAVvuB,SAAwBA,OAAO2iC,IAAM3iC,OAAS,SAAU4iC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAU9iC,EAAGC,QACVA,OAAO,gBAAiB,yBAA0BD,IACpD,YACG,SAAUE,GAAV,GACOwB,GAAQvB,OAAOuB,MACfypB,EAAUzpB,EAAMypB,QAChBgyE,EAAUhyE,EAAQgyE,OACtBhyE,GAAQgyE,QAAU,SAAU57F,EAASsI,GACjC,MAAOszF,GAAQj9F,EAAEqB,GAAS,GAAIsI,IAElCshB,EAAQgyE,QAAQiT,SAAWjT,EAAQiT,SACnCjlF,EAAQgyE,QAAQoE,aAAepE,EAAQoE,cACzCphG,OAAOuB,MAAM8sB,SACC,kBAAVvuB,SAAwBA,OAAO2iC,IAAM3iC,OAAS,SAAU4iC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAU9iC,EAAGC,QACVA,OAAO,iBACH,eACA,wBACA,0BACA,kBACA,gBACDD,IACL,aAYkB,kBAAVC,SAAwBA,OAAO2iC,IAAM3iC,OAAS,SAAU4iC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAU9iC,EAAGC,QACVA,OAAO,2BACH,aACA,iBACDD,IACL,YACG,SAAUE,GAsFP,QAASsP,GAAQnI,GACb,MAAO9B,OAAMiK,QAAQnI,GAEzB,QAAStD,GAASxC,EAASuJ,GAA3B,GAEa1D,GACDM,EAFJ8sH,EAAahlH,EAAQ1E,GAAWA,GAAWA,EAC/C,KAAS1D,EAAM,EAAGA,EAAMotH,EAAWpzH,OAAQgG,IACnCM,EAAY8sH,EAAWptH,GACvB7F,EAAQmG,UAAUC,QAAQD,UAC1BnG,EAAQmG,WAAa,IAAMA,GAKvC,QAAS8nC,GAAYjuC,EAASmG,GACtBnG,GAAWA,EAAQmG,YACnBnG,EAAQmG,UAAYnG,EAAQmG,UAAU/G,QAAQ+G,EAAW,IAAI/G,QAAQ8zH,GAAa,MAG1F,QAASC,GAAiBxjF,GAA1B,GAOa3sC,GANLsE,EAAS,EAMb,KALIqoC,EAAKrnC,QAAQ8+F,QAAUjnG,MAAMypB,QAAQ2zD,KAAKoO,QAAQh8C,EAAKrnC,QAAQ8+F,OAAOlmG,QAClEyuC,EAAKrnC,QAAQ8+F,OAAOlmG,MAAQ,IAAM,IAClCoG,EAAS,GAGRtE,EAAI,EAAGA,EAAI2sC,EAAKwqD,SAASt6F,OAAQmD,IACtC2sC,EAAKwqD,SAASn3F,GAAG2yE,SAASh+D,MAAM,GAAGguB,UAAUr+B,EAAQA,EAEzD,OAAOqoC,GAEX,QAASyjF,GAAUC,EAAQC,GACvB,OAAQD,EAAO73F,EAAI83F,EAAO/5G,EAAI85G,EAAO95G,EAAI+5G,EAAO93F,EAAI,EAExD,QAASmgB,GAAS71C,GACd,MAAwB,gBAAVA,KAAuB8X,MAAM9X,GAE/C,QAASytH,GAASztH,GACd,aAAcA,KAAU4C,GAE5B,QAAS8qH,GAAoB1tH,GACzB,MAAO61C,GAAS71C,IAAUytH,EAASztH,IAAUoM,SAASpM,GAE1D,QAAS2tH,GAAS3tH,GACd,MAAwB,gBAAVA,GAElB,QAAS4tH,GAAW5tH,GAChB,MAAI61C,GAAS71C,GACFA,EAAQ,KAEZA,EAGX,QAAS6tH,GAAYvtG,GACjB,MAAOwtG,IAAkBxxH,KAAKgkB,GAElC,QAASynE,GAAc7tF,EAASwF,GAAhC,GAGY0B,GACAnF,EACK8D,EACDugB,EAKCytG,EAVT/lC,EAAcylC,EAAS/tH,IAAWA,GAAUA,CAChD,IAAIyI,EAAQ6/E,GAAc,CAGtB,IAFI5mF,KACAnF,EAAQnD,OAAO+G,iBAAiB3F,GAC3B6F,EAAM,EAAGA,EAAMioF,EAAYjuF,OAAQgG,IACpCugB,EAAQ0nE,EAAYjoF,GACxBqB,EAAOkf,GAASutG,EAAYvtG,GAAS/b,WAAWtI,EAAMqkB,IAAUrkB,EAAMqkB,EAE1E,OAAOlf,GACJ,GAAIusH,EAASjuH,GAChB,IAASquH,IAAWruH,GAChBxF,EAAQ+B,MAAM8xH,GAAWH,EAAWluH,EAAOquH,IAIvD,QAASC,GAAWhuH,EAAOiuH,GACA,SAAnBA,IACAA,EAAiB,EAErB,IAAItT,IACAj5G,IAAK,EACL3G,MAAO,EACPC,OAAQ,EACRF,KAAM,EAUV,OARqB,gBAAVkF,GACP26G,EAAQlsC,IAAOksC,EAAQj2F,IAASi2F,EAAQjsC,IAAUisC,EAAQn2F,IAAQxkB,GAElE26G,EAAQlsC,IAAOzuE,EAAMyuE,KAAQw/C,EAC7BtT,EAAQj2F,IAAS1kB,EAAM0kB,KAAUupG,EACjCtT,EAAQjsC,IAAU1uE,EAAM0uE,KAAWu/C,EACnCtT,EAAQn2F,IAAQxkB,EAAMwkB,KAASypG,GAE5BtT,EAsHX,QAASuT,GAAY1rH,GACD,SAAZA,IACAA,KAEJ,IAAIqC,EAMJ,OALIrC,GAAQqC,SACRrC,EAAQqC,SAAWA,EAAWspH,GAAgBvjH,QAAQpI,EAAQqC,UACvDvG,GAAWkE,EAAQk1D,WAC1B7yD,EAAWrC,EAAQk1D,SAEhB7yD,EAEX,QAASyqB,GAAK7Z,EAAOwN,GAArB,GAGaljB,GAFLhG,EAAS0b,EAAM1b,OACfqH,IACJ,KAASrB,EAAM,EAAGA,EAAMhG,EAAQgG,IACxBkjB,EAASxN,EAAM1V,KACfqB,EAAO8I,KAAKuL,EAAM1V,GAG1B,OAAOqB,GAEX,QAASgtH,GAAWl0H,EAASm0H,GAA7B,GAEYx/G,GACK9O,CAFb,IAAI7F,EAAQmG,UAER,IADIwO,EAAQw/G,EAAWj1H,MAAM,KACpB2G,EAAM,EAAGA,EAAM8O,EAAM9U,OAAQgG,IAClC,GAAI7F,EAAQmG,UAAUC,QAAQuO,EAAM9O,SAChC,OAAO,EAKvB,QAASsF,GAAQrF,EAAOyV,GACpB,GAAIA,EACA,MAAOA,GAAMnV,QAAQN,QAG7B,QAASsuH,GAAiBj9G,EAAOvX,EAAKkwB,GAClC,MAAO3vB,OAAMypB,QAAQ2zD,KAAK5lE,MAAMR,GAASvX,EAAMuX,GAAS2Y,EAAUukG,IAsCtE,QAASn5G,GAAIK,EAAOwN,GAApB,GAGaljB,GACDC,EAHJjG,EAAS0b,EAAM1b,OACfqH,IACJ,KAASrB,EAAM,EAAGA,EAAMhG,EAAQgG,IACxBC,EAAQijB,EAASxN,EAAM1V,IACvB1F,MAAMypB,QAAQ2zD,KAAKoO,QAAQ7lF,IAC3BoB,EAAO8I,KAAKlK,EAGpB,OAAOoB,GAEX,QAASotH,GAAgBnkH,GACrB,GAAIyrB,GAAQ,CAQZ,OAPIzrB,GAAE2rB,aACFF,GAASzrB,EAAE2rB,WAAa,IACxBF,EAAQA,EAAQ,EAAI90B,KAAK2pD,KAAK70B,GAAS90B,KAAKpE,MAAMk5B,IAElDzrB,EAAE4rB,SACFH,EAAQz7B,MAAMypB,QAAQ2zD,KAAK5lE,MAAMxH,EAAE4rB,OAAS,IAEzCH,EA6DX,QAAS24F,GAAkBntH,EAAMkB,GAC7B,GAAIqG,GAAQvH,EAAK6H,SAEbN,GAAMrG,QADNqG,EAAMrG,QACUxF,MAAe6L,EAAMrG,QAASA,GAE9BA,EAGxB,QAASksH,GAAkB34D,GAA3B,GAGah2D,GAAShG,EACViG,EAHJoU,EAAM+9F,GACNt3G,EAAM8zH,EACV,KAAS5uH,EAAM,EAAGhG,EAASg8D,EAAIh8D,OAAQgG,EAAMhG,EAAQgG,IAC7CC,EAAQ+1D,EAAIh2D,GACF,OAAVC,GAAkBoM,SAASpM,KAC3BoU,EAAMpT,KAAKoT,IAAIA,EAAKpU,GACpBnF,EAAMmG,KAAKnG,IAAIA,EAAKmF,GAG5B,QACIoU,IAAKA,IAAQ+9F,GAAYp5G,OAAYqb,EACrCvZ,IAAKA,IAAQ8zH,GAAY51H,OAAY8B,GAkO7C,QAAS+zH,GAAYl5F,EAAGjiB,EAAG02E,EAAIC,EAAIqB,GAC/B,GAAIojC,GAAQtnC,GAAIkE,EAChB,OAAO,IAAIxB,IAAME,GAAMz0D,EAAIy0D,GAAMnpF,KAAKqpF,IAAIwkC,IAAUp7G,EAAI22E,GAAMppF,KAAKspF,IAAIukC,GAAQzkC,GAAM10D,EAAIy0D,GAAMnpF,KAAKspF,IAAIukC,IAAUp7G,EAAI22E,GAAMppF,KAAKqpF,IAAIwkC,IA4GzI,QAASC,GAAgB9pH,EAAGC,GACxB,MAAOD,GAAIC,EAwlBf,QAAS8pH,GAAQ3sC,EAAG/uE,GAApB,GAIQrO,GACAC,EACAuG,EACAuH,EACA1I,EACA1R,EACAsG,EACAyjF,EACA4f,CAXJ,OAAIlgB,GAAEhoB,KAAO/mD,EAAE+mD,IAAMgoB,EAAE/nB,KAAOhnD,EAAEgnD,IAAM+nB,EAAE9nB,KAAOjnD,EAAEinD,IAAM8nB,EAAE7nB,KAAOlnD,EAAEknD,GACvDlnD,GAEPrO,EAAIhE,KAAKoT,IAAIguE,EAAEhoB,GAAI/mD,EAAE+mD,IACrBn1D,EAAIjE,KAAKnG,IAAIunF,EAAEhoB,GAAI/mD,EAAE+mD,IACrB5uD,EAAIxK,KAAKoT,IAAIguE,EAAE9nB,GAAIjnD,EAAEinD,IACrBvnD,EAAI/R,KAAKnG,IAAIunF,EAAE9nB,GAAIjnD,EAAEinD,IACrBjwD,EAAIrJ,KAAKoT,IAAIguE,EAAE/nB,GAAIhnD,EAAEgnD,IACrB1hE,EAAIqI,KAAKnG,IAAIunF,EAAE/nB,GAAIhnD,EAAEgnD,IACrBp7D,EAAI+B,KAAKoT,IAAIguE,EAAE7nB,GAAIlnD,EAAEknD,IACrBmoB,EAAI1hF,KAAKnG,IAAIunF,EAAE7nB,GAAIlnD,EAAEknD,IACrB+nC,KACJA,EAAM,GAAK,GAAI0sB,IAAI/pH,EAAGoF,EAAGmB,EAAG7S,GAC5B2pG,EAAM,GAAK,GAAI0sB,IAAIhqH,EAAGrM,EAAGsM,EAAGhG,GAC5BqjG,EAAM,GAAK,GAAI0sB,IAAIxjH,EAAG7S,EAAGoa,EAAG9T,GAC5BqjG,EAAM,GAAK,GAAI0sB,IAAI/pH,EAAGhG,EAAGuM,EAAGk3E,GACxBN,EAAEhoB,KAAOp1D,GAAKo9E,EAAE/nB,KAAOhwD,GAAKgJ,EAAE+mD,KAAOp1D,GAAKqO,EAAEgnD,KAAOhwD,GACnDi4F,EAAM,GAAK,GAAI0sB,IAAIhqH,EAAGqF,EAAGpF,EAAGtM,GAC5B2pG,EAAM,GAAK,GAAI0sB,IAAIxjH,EAAGvM,EAAG8T,EAAG2vE,KAE5B4f,EAAM,GAAK,GAAI0sB,IAAIxjH,EAAGnB,EAAG0I,EAAGpa,GAC5B2pG,EAAM,GAAK,GAAI0sB,IAAIhqH,EAAG/F,EAAGgG,EAAGy9E,IAEzBpzD,EAAKgzE,EAAO,SAAUp8D,GACzB,MAAOA,GAAI7qC,SAAW,GAAK6qC,EAAI9qC,QAAU,IAC1C,IAgFP,QAAS6zH,GAAiBzsH,GAA1B,GAKatF,GACDgyH,EALJp6B,EAAQtyF,EAAQsyF,MAChBq6B,EAAY3sH,EAAQ4sH,YAAc5sH,EAAQhI,OAAS,IACnDT,EAAS+6F,EAAM/6F,OACfs1H,IACJ,KAASnyH,EAAI,EAAGA,EAAInD,EAAQmD,IACpBgyH,EAAcr2H,EAAEiK,UAAWgyF,EAAM53F,IACrCgyH,EAAY1tH,QAAU0tH,EAAY1tH,QAAU,IAAM2tH,GAAaA,GAAa,IAC5EE,EAAanlH,KAAKglH,EAEtB,OAAOG,GAsLX,QAASC,GAAUrtD,GAAnB,GACQp8B,GAASo8B,EAAKp8B,OACd2oD,EAAcvsB,EAAKusB,aACvB,OAAO,IAAIwgC,IAAInpF,EAAOnQ,EAAGmQ,EAAOpyB,EAAG+6E,EAAY94D,EAAG84D,EAAY/6E,GAuflE,QAAS87G,GAAe/sH,EAASgtH,GAAjC,GACQC,GAAQjtH,EAAQitH,MAChBC,EAAQltH,EAAQktH,MAChBtzH,EAAWoG,EAAQpG,SACnBusC,EAAO,GAAIy4D,KACXE,QACIlmG,MAAOo0H,EAAYp0H,MACnB28E,MAAOy3C,EAAYz3C,QAS3B,OANIv1E,GAAQk8B,SACRiK,EAAKM,OAAOwmF,EAAOrzH,GAAUm4F,OAAOk7B,EAAQD,EAAYrvH,KAAM/D,GAE9DusC,EAAKM,OAAO7sC,EAAUszH,GAAOn7B,OAAOn4F,EAAUszH,EAAQF,EAAYrvH,MAEtEktH,EAAiB1kF,GACVA,EAEX,QAASgnF,GAAmBntH,EAASotH,GAArC,GACQC,GAAYrtH,EAAQqtH,UACpBC,EAAUttH,EAAQstH,QAClB1zH,EAAWoG,EAAQpG,SACnBgtG,EAAO,GAAIhI,KACXE,QACIlmG,MAAOw0H,EAASx0H,MAChB28E,MAAO63C,EAAS73C,MAChB2rC,SAAUkM,EAASlM,WAS3B,OANIlhH,GAAQk8B,SACR0qE,EAAKngE,OAAO4mF,EAAWzzH,GAAUm4F,OAAOu7B,EAAS1zH,GAEjDgtG,EAAKngE,OAAO7sC,EAAUyzH,GAAWt7B,OAAOn4F,EAAU0zH,GAEtDzC,EAAiBjkB,GACVA,EAgnBX,QAAS2mB,GAAiB/qH,EAAGC,GAA7B,GACQgrB,GAAOjrB,EAAE3G,UAAY4G,EACrB+qH,EAAahrH,EAAEsK,oBAAsBrK,EAAEqK,mBAC3C,OAAO2gB,GAAO+/F,EAAaC,GAE/B,QAASC,GAASjiH,EAAMkiH,GACpB,MAAO,IAAI/xH,MAAK6P,EAAK5P,UAAY8xH,GAErC,QAASC,GAAOpwH,GACZ,GAAIoB,EAMJ,OALIpB,aAAiB5B,MACjBgD,EAASpB,EACFA,IACPoB,EAAS,GAAIhD,MAAK4B,IAEfoB,EAEX,QAASivH,GAAYpiH,EAAMikB,GAA3B,GAIQo+F,GACAh5G,CACJ,IALqB,SAAjB4a,IACAA,EAAe,GAEfo+F,EAAiB,EACjBh5G,EAAMrJ,EAAKW,UACVkJ,MAAMR,GACP,KAAOA,IAAQ4a,GACC,IAAR5a,EACAA,EAAM,EAENA,IAEJg5G,GAGR,OAAOJ,GAASjiH,GAAOqiH,EAAiBC,IAE5C,QAASl7G,GAAUpH,EAAMqH,GACrB,MAAc,KAAVA,GAAmC,KAApBrH,EAAKe,aACpBf,EAAKsH,SAAStH,EAAKe,WAAa,IACzB,GAIf,QAASwhH,GAASviH,EAAMqH,GAAxB,GAGQm7G,GAFAC,EAAc,GAAItyH,MAAK6P,EAG3B,OAFAyiH,GAAYC,WAAW,EAAG,EAAG,GACzBF,GAAUxiH,EAAKqB,oBAAsBohH,EAAYphH,qBAAuB2gH,GACrEC,EAASQ,EAAaD,EAASn7G,EAAQs7G,IAElD,QAASC,GAAYC,EAAW9wH,EAAOq2F,EAAMnkE,GAA7C,GAGYjkB,GACAqH,EAHJlU,EAAS0vH,CAgCb,OA/BIA,KACI7iH,EAAOmiH,EAAOU,GACdx7G,EAAQrH,EAAKe,WACbqnF,IAAS06B,IACT3vH,EAAS,GAAIhD,MAAK6P,EAAKc,cAAgB/O,EAAO,EAAG,GACjDqV,EAAUjU,EAAQ,IACXi1F,IAAS26B,IAChB5vH,EAAS,GAAIhD,MAAK6P,EAAKc,cAAed,EAAKa,WAAa9O,EAAO,GAC/DqV,EAAUjU,EAAQkU,IACX+gF,IAAS46B,IAChB7vH,EAASyvH,EAAYR,EAAYpiH,EAAMikB,GAAuB,EAARlyB,EAAWkxH,IACjE77G,EAAUjU,EAAQkU,IACX+gF,IAAS66B,IAChB9vH,EAAS,GAAIhD,MAAK6P,EAAKc,cAAed,EAAKa,WAAYb,EAAKS,UAAY1O,GACxEqV,EAAUjU,EAAQkU,IACX+gF,IAAS86B,GAChB/vH,EAASovH,EAASviH,EAAMjO,GACjBq2F,IAAS+6B,IAChBhwH,EAAS8uH,EAASjiH,EAAMjO,EAAQiwH,IAC5B7uH,EAAO8N,aAAe,GACtB9N,EAAOiwH,WAAW,IAEfh7B,IAASi7B,GAChBlwH,EAAS8uH,EAASjiH,EAAMjO,EAAQuxH,IACzBl7B,IAASm7B,KAChBpwH,EAAS8uH,EAASjiH,EAAMjO,IAExBq2F,IAASm7B,IAAgBpwH,EAAO+N,kBAAoB,GACpD/N,EAAOqwH,gBAAgB,IAGxBrwH,EAEX,QAASswH,GAAUzjH,EAAMooF,EAAMnkE,GAC3B,MAAO2+F,GAAYT,EAAOniH,GAAO,EAAGooF,EAAMnkE,GAE9C,QAASy/F,GAASb,EAAWz6B,EAAMnkE,GAC/B,GAAIjkB,GAAOmiH,EAAOU,EAClB,OAAI7iH,IAAQyjH,EAAUzjH,EAAMooF,EAAMnkE,GAAc7zB,YAAc4P,EAAK5P,UACxD4P,EAEJ4iH,EAAY5iH,EAAM,EAAGooF,EAAMnkE,GAEtC,QAAS0/F,GAAa5sH,EAAGC,GACrB,MAAID,IAAKC,EACED,EAAE3G,UAAY4G,EAAE5G,aAI/B,QAASwzH,GAAS7sH,EAAGC,GACjB,MAAOD,GAAE3G,UAAY4G,EAEzB,QAAS6sH,GAAO9xH,GAAhB,GAEYoB,GACKrB,CAFb,IAAIoI,EAAQnI,GAAQ,CAEhB,IADIoB,KACKrB,EAAM,EAAGA,EAAMC,EAAMjG,OAAQgG,IAClCqB,EAAO8I,KAAK4nH,EAAO9xH,EAAMD,IAE7B,OAAOqB,GACJ,GAAIpB,EACP,MAAOowH,GAAOpwH,GAAO3B,UAG7B,QAAS0zH,GAAW/sH,EAAGC,GACnB,MAAID,IAAKC,EACE6sH,EAAO9sH,KAAO8sH,EAAO7sH,GAEzBD,IAAMC,EAEjB,QAAS+sH,GAAU/jH,EAAMoD,EAAO4gH,GAC5B,MAAOlC,GAAiB9hH,EAAMoD,GAAS6gH,GAAcD,GAEzD,QAASE,GAAUnyH,EAAOqR,EAAO4gH,EAAUG,GAA3C,GAGQ79G,GAFAtG,EAAOmiH,EAAOpwH,GACdgpC,EAAYonF,EAAO/+G,EAWvB,OARIkD,GADA09G,IAAajB,GACL/iH,EAAKa,WAAak6B,EAAUl6B,WAA8D,IAAhDb,EAAKc,cAAgBi6B,EAAUj6B,eAAsBijH,EAAU/jH,EAAM,GAAI7P,MAAK6P,EAAKc,cAAed,EAAKa,YAAaoiH,IAAQ,GAAI9yH,MAAK6P,EAAKc,cAAed,EAAKa,WAAa,EAAG,GAAGJ,UAC5NujH,IAAalB,GACZ9iH,EAAKc,cAAgBi6B,EAAUj6B,cAAgBojH,EAAUlkH,EAAM,GAAI7P,MAAK6P,EAAKc,cAAe,GAAIiiH,GAAQ,GAAK,GAC9GiB,IAAaf,IAAQe,IAAahB,GACjCe,EAAU/jH,EAAM+6B,EAAWipF,GAE3BJ,EAAS5jH,EAAMoD,GAAS6gH,GAAcD,GAE3C19G,EAAQ69G,EAEnB,QAAS3vH,GAASuC,EAAGC,EAAGoxF,GACpB,GAAIpmE,EAUJ,OARIA,GADAomE,IAAS06B,GACF9rH,EAAE8J,cAAgB/J,EAAE+J,cACpBsnF,IAAS26B,GACe,GAAxBvuH,EAASuC,EAAGC,EAAG8rH,IAAc9rH,EAAE6J,WAAa9J,EAAE8J,WAC9CunF,IAAS66B,GACTlwH,KAAKpE,MAAMi1H,EAAS5sH,EAAGD,GAAKurH,IAE5BvvH,KAAKpE,MAAMi1H,EAAS5sH,EAAGD,GAAKktH,GAAc77B,IAIzD,QAASg8B,GAAapkH,EAAMqkH,GAIxB,IAJJ,GAGQ/9G,GAGIg+G,EALJC,EAAM,EACNC,EAAOH,EAAYv4H,OAAS,EAEzBy4H,GAAOC,GAGV,GAFAl+G,EAAQvT,KAAKpE,OAAO41H,EAAMC,GAAQ,GAC9BF,EAAcD,EAAY/9G,GAC1Bg+G,EAActkH,EACdukH,EAAMj+G,EAAQ,MADlB,CAIA,KAAIg+G,EAActkH,GAAlB,CAIA,KAAO8jH,EAAWO,EAAY/9G,EAAQ,GAAItG,IACtCsG,GAEJ,OAAOA,GANHk+G,EAAOl+G,EAAQ,EAQvB,MAAI+9G,GAAY/9G,IAAUtG,EACfsG,EAEJA,EAAQ,EAEnB,QAAS4E,GAAUu5G,EAAazkH,GAC5B,GAAI7M,EAMJ,OAJIA,GADAqsH,EAASx/G,GACAykH,EAAYv5G,UAAUlL,IAASmiH,EAAOniH,GAEtCmiH,EAAOniH,GAIxB,QAAS0kH,GAAWD,EAAaE;AAAjC,GAEYxxH,GACKrB,CAFb,IAAIoI,EAAQyqH,GAAQ,CAEhB,IADIxxH,KACKrB,EAAM,EAAGA,EAAM6yH,EAAM74H,OAAQgG,IAClCqB,EAAO8I,KAAKiP,EAAUu5G,EAAaE,EAAM7yH,IAE7C,OAAOqB,GAEX,MAAO+X,GAAUu5G,EAAaE,GAGlC,QAAStyH,GAAQN,EAAO+1D,GAAxB,GAEYh8D,GACKgG,CAFb,IAAIC,YAAiB5B,MAAM,CAEvB,IADIrE,EAASg8D,EAAIh8D,OACRgG,EAAM,EAAGA,EAAMhG,EAAQgG,IAC5B,GAAIgyH,EAAWh8D,EAAIh2D,GAAMC,GACrB,MAAOD,EAGf,UAEJ,MAAOg2D,GAAIz1D,QAAQN,GAi6BvB,QAAS6yH,GAAcz+G,EAAKvZ,GAA5B,GAQQ2kC,GACAszF,EACAC,EATA9iG,EAAOpe,GAAMhX,EAAMuZ,EAAK4+G,GAAoB,EAChD,IAAa,IAAT/iG,EAAY,CACZ,GAAY,IAARp1B,EACA,MAAO,EAEXo1B,GAAOjvB,KAAKC,IAAIpG,GAcpB,MAZI2kC,GAAQx+B,KAAKuoC,IAAI,GAAIvoC,KAAKpE,MAAMoE,KAAKimB,IAAIgJ,GAAQjvB,KAAKimB,IAAI,MAC1D6rG,EAAgBjhH,GAAMoe,EAAOuP,EAAOwzF,IACpCD,EAAkB,EAElBA,EADAD,EAAgB,SACE,GACXA,EAAgB,SACL,GACXA,EAAgB,SACL,EAEA,EAEfjhH,GAAM2tB,EAAQuzF,EAAiBC,IAE1C,QAASC,GAAY7+G,EAAKvZ,EAAKq4H,GAA/B,GAIQC,GAEIC,EACAnjG,CANR,KAAK7b,IAAQvZ,EACT,MAAO,EAGX,IAAIuZ,GAAO,GAAKvZ,GAAO,EAAG,CAGtB,GAFIu4H,EAAWh/G,IAAQvZ,EAAM,EAAIuZ,EAC7B6b,GAAQp1B,EAAMu4H,GAAYv4H,EAC1Bq4H,KAAW,IAAUA,GAAUjjG,EAAOojG,GACtC,MAAO,EAEXF,GAAUnyH,KAAKnG,IAAI,EAAGu4H,GAAYv4H,EAAMu4H,GAAY,OAEpDD,GAAU/+G,CAEd,OAAO++G,GAEX,QAASG,GAAYl/G,EAAKvZ,EAAKq4H,GAA/B,GAIQK,GAEIC,EACAvjG,CANR,KAAK7b,IAAQvZ,EACT,MAAO,EAGX,IAAIuZ,GAAO,GAAKvZ,GAAO,EAAG,CAGtB,GAFI24H,EAAWp/G,IAAQvZ,EAAM,EAAIA,EAC7Bo1B,EAAOjvB,KAAKC,KAAKuyH,EAAWp/G,GAAOo/G,GACnCN,KAAW,IAAUA,GAAUjjG,EAAOojG,GACtC,MAAO,EAEXE,GAAUvyH,KAAKoT,IAAI,EAAGo/G,GAAYp/G,EAAMo/G,GAAY,OAEpDD,GAAU14H,CAEd,OAAO04H,GAEX,QAAS32H,GAAMoD,EAAO+hC,GAClB,MAAOlwB,IAAM7Q,KAAKpE,MAAMoD,EAAQ+hC,GAAQA,EAAMixF,IAElD,QAASroE,IAAK3qD,EAAO+hC,GACjB,MAAOlwB,IAAM7Q,KAAK2pD,KAAK3qD,EAAQ+hC,GAAQA,EAAMixF,IAEjD,QAASS,IAAgBzzH,GACrB,MAAOgB,MAAKnG,IAAImG,KAAKoT,IAAIpU,EAAO0zH,KAAoBA,IAoMxD,QAASC,IAAgBC,EAAWC,EAAWrxH,GAA/C,GACQsxH,GAActxH,EAAQsxH,YACtBC,EAAUd,EAAYW,EAAWC,EAAWC,GAC5CE,EAAUV,EAAYM,EAAWC,EAAWC,GAC5CG,EAAYpB,EAAckB,EAASC,GACnCE,GAAgBD,UAAWA,EAW/B,OAVIzxH,GAAQ2xH,oBAAqB,IACzBJ,EAAU,GAAKK,GAAeL,EAASE,EAAW,EAAI,KACtDF,GAAWE,GAEXD,EAAU,GAAKI,GAAeJ,EAASC,EAAW,EAAI,KACtDD,GAAWC,IAGnBC,EAAY9/G,IAAMxX,EAAMm3H,EAASE,GACjCC,EAAYr5H,IAAM8vD,GAAKqpE,EAASC,GACzBC,EAEX,QAASG,IAAiBH,EAAa1xH,GACnC,OACI4R,IAAKyxE,GAAQrjF,EAAQ4R,KAAOpT,KAAKoT,IAAI8/G,EAAY9/G,IAAK5R,EAAQ4R,KAAO8/G,EAAY9/G,IACjFvZ,IAAKgrF,GAAQrjF,EAAQ3H,KAAOmG,KAAKnG,IAAIq5H,EAAYr5H,IAAK2H,EAAQ3H,KAAOq5H,EAAYr5H,IACjFo5H,UAAWC,EAAYD,WAG/B,QAASK,IAAYJ,EAAaK,GAAlC,GAEQC,GAAYC,EAIRC,EAmBJtzH,EAxBAoB,EAAU+xH,CAgCd,OA9BIA,KACAC,EAAa3uC,GAAQ0uC,EAAYngH,KACjCqgH,EAAa5uC,GAAQ0uC,EAAY15H,KAC7B65H,EAAgBF,GAAcC,EAC9BC,GACIH,EAAYngH,MAAQmgH,EAAY15H,MAC5B05H,EAAYngH,IAAM,EAClBmgH,EAAYngH,IAAM,EAElBmgH,EAAY15H,IAAM,GAI1B05H,EAAYN,WACZC,EAAY9/G,IAAMxX,EAAMs3H,EAAY9/G,IAAKmgH,EAAYN,WACrDC,EAAYr5H,IAAM8vD,GAAKupE,EAAYr5H,IAAK05H,EAAYN,YAC7CS,IACPlyH,EAAUxF,GAAWk3H,EAAaK,GAClCL,EAAYD,UAAYpB,EAAcrwH,EAAQ4R,IAAK5R,EAAQ3H,OAGnEq5H,EAAYS,WAAanyH,EAAQyxH,WAAaC,EAAYD,WAAa,EACnE7yH,EAASpE,GAAWk3H,EAAa1xH,GACjCpB,EAAOgT,KAAOhT,EAAOvG,MACjB25H,IAAeC,EACfrzH,EAAOvG,IAAMuG,EAAOgT,IAAMhT,EAAO6yH,WACzBO,GAAcC,IACtBrzH,EAAOgT,IAAMhT,EAAOvG,IAAMuG,EAAO6yH,YAGlC7yH,EAEX,QAASgzH,IAAep0H,EAAOulC,EAASqvF,GAAxC,GACQC,GAAYhjH,GAAM7Q,KAAKC,IAAIjB,EAAQulC,GAAUytF,IAC7C5yG,EAAYmlB,GAAW,EAAIqvF,EAC/B,OAAqB,KAAdC,GAAmBA,EAAYz0G,EAsK1C,QAAS00G,IAAUh/F,GACf,GAAIugE,GAAO86B,EAUX,OATIr7F,IAASi/F,GACT1+B,EAAO06B,GACAj7F,GAASk/F,GAChB3+B,EAAO26B,GACAl7F,GAASm/F,GAChB5+B,EAAO46B,GACAn7F,GAASy6F,KAChBl6B,EAAO66B,IAEJ76B,EAEX,QAAS6+B,IAActB,EAAWC,EAAWrxH,GAA7C,GACQ4R,GAAM5R,EAAQ4R,KAAOw/G,EACrB/4H,EAAM2H,EAAQ3H,KAAOg5H,EACrB5B,EAAWzvH,EAAQyvH,WAAap3H,GAAOuZ,EAAM0gH,GAAU/E,EAAiBl1H,EAAKuZ,IAAQ+8G,IACrFgE,EAAejD,GAAcD,GAC7B8B,EAAUrC,EAAUI,EAAO19G,GAAO,EAAG69G,IAAa7B,EAAOv1H,GACzDm5H,EAAUrC,EAASG,EAAOj3H,GAAO,EAAGo3H,GACpCmD,EAAgB5yH,EAAQyxH,UAAYzxH,EAAQyxH,UAAYl7H,OACxDk7H,EAAYmB,GAAiBzqE,GAAKkoE,EAAckB,EAAQ11H,UAAW21H,EAAQ31H,WAAY82H,GAAgBA,EACvGE,EAAc5yH,EAASsxH,EAASC,EAAS/B,GACzCqD,EAAa3qE,GAAK0qE,EAAapB,GAC/BsB,EAAaD,EAAaD,EAC1BG,EAAOx0H,KAAKpE,MAAM24H,EAAa,GAC/BE,EAAOF,EAAaC,CASxB,OARKhzH,GAAQyvH,gBACFzvH,GAAQyvH,SAEnBzvH,EAAQyvH,SAAWzvH,EAAQyvH,UAAYA,EACvCzvH,EAAQ4R,IAAM5R,EAAQ4R,KAAOy8G,EAAYkD,GAAUyB,EAAMvD,GACzDzvH,EAAQ3H,IAAM2H,EAAQ3H,KAAOg2H,EAAYmD,EAASyB,EAAMxD,GACxDzvH,EAAQmyH,UAAYnyH,EAAQmyH,WAAaV,EAAY,EACrDzxH,EAAQyxH,UAAYA,EACbzxH,EA+TX,QAASkzH,IAAU3B,EAASC,EAASM,EAAa9xH,GAAlD,GACQ4R,GAAMkgH,EAAYlgH,IAClBvZ,EAAMy5H,EAAYz5H,GActB,OAbIgrF,IAAQyuC,EAAYqB,oBAAsBrB,EAAYqB,mBAAqB,GAC3EC,KAEC/vC,GAAQrjF,EAAQ3H,KAEV2H,EAAQ3H,KAAO,GACtB+6H,KAFA/6H,EAAMm5H,EAILnuC,GAAQrjF,EAAQ4R,KAEV5R,EAAQ4R,KAAO,GACtBwhH,KAFAxhH,EAAM2/G,GAKN3/G,IAAKA,EACLvZ,IAAKA,GAGb,QAASg7H,IAAczhH,EAAKvZ,EAAK2H,GAAjC,GACQuG,GAAOvG,EAAQyxH,UACfF,EAAU3/G,CAMd,OALIA,IAAO,EACP2/G,EAAUl5H,GAAO,EAAImG,KAAKuoC,IAAIxgC,MAAY,EAClCvG,EAAQsxH,cAChBC,EAAU/yH,KAAKuoC,IAAIxgC,EAAM/H,KAAKpE,MAAMqqB,GAAI7S,EAAKrL,MAE1CgrH,EAEX,QAAS+B,IAAcj7H,EAAKkO,GAA5B,GAEQirH,GADA+B,EAAkBlkH,GAAMoV,GAAIpsB,EAAKkO,GAAOiqH,IAAqB,CASjE,OANIgB,GADAn5H,GAAO,EACGkO,EACiB,IAApBgtH,IAA0BA,EAAkB,IAAOA,EAAkB,IAClE/0H,KAAKuoC,IAAIxgC,EAAMke,GAAIpsB,EAAKkO,GAAQ,IAEhC/H,KAAKuoC,IAAIxgC,EAAM/H,KAAK2pD,KAAK1jC,GAAIpsB,EAAKkO,KAIpD,QAAS6sH,MACL,KAAU1qH,OAAM,6DAEpB,QAAS+b,IAAIxT,EAAGiiB,GACZ,MAAO10B,MAAKimB,IAAIxT,GAAKzS,KAAKimB,IAAIyO,GA0iBlC,QAASsgG,IAAgBhxH,EAAGC,GACxB,MAAO,KAAMjE,KAAKC,IAAID,KAAKC,IAAI+D,EAAIC,GAAK,KAsQ5C,QAAS8nF,IAAW/sF,GAChB,MAAOA,IAAS,KAAS,EA/kLhC,GAEO8jB,IACA2zD,GACA2pB,GACAtN,GACA96F,GACA41G,GACAzf,GACAqY,GACAyuB,GACAtqB,GACA9nF,GACA7mB,GACAsB,GACA43H,GACAC,GACAziH,GACA+6D,GACAC,GACAlqD,GACAE,GACA8pD,GACA5vC,GACAD,GACA4vF,GACApc,GACAwc,GACAyH,GACAC,GACAC,GACAC,GACAxqB,GACAinB,GACAwD,GACAC,GACAC,GACAC,GACAh6F,GACAi6F,GACAC,GACAC,GACAC,GACAC,GACAhkE,GACApwD,GACA5E,GACAi5H,GACAC,GACAC,GACAC,GAgDAhK,GAuCAU,GAwCAuJ,GAWAtpH,GACAupH,GAaAC,GACAC,GAqCAC,GAwBAC,GACAC,GASAC,GAKAzJ,GAOA0J,GA+CAC,GACAC,GAyDAp1C,GACA/7C,GACA+gD,GACA9B,GACAG,GACA3O,GACApM,GACA+b,GACAD,GACAh1D,GACAm1D,GACAlD,GACAuD,GACA11E,GACAs2E,GACAT,GACAswC,GAkEA/tC,GAuCA+kC,GA4LAiJ,GA6GAC,GAeAC,GACAC,GA6BAC,GAmOAC,GAkGAC,GAkGAC,GACAC,GACAC,GA4JAC,GA0FAC,GAmJAC,GACA5sB,GAqCA6sB,GACAC,GA+IAC,GA8BAC,GA+EAC,GACAC,GACAC,GA2RAC,GAolBA7H,GACAF,GACAF,GACAD,GACAD,GACAD,GACAD,GACAD,GACAuI,GACA/H,GACAtB,GACAW,GACAL,GACA0E,GACAD,GACAD,GACA7C,GA4MAqH,GAaAC,GAmZA9F,GACA+F,GAUApG,GACAzyF,GACA84F,GAUAC,GACAC,GAqjBAC,GACAC,GA+QAC,GAqMAC,GACAC,GAkXAC,GA8DAC,GAqLAC,GAsKAC,GAoIAC,GAiBAC,GAoBAC,GACAC,GACAC,EAh3KJ5hI,QAAOuB,MAAMwpB,QAAU/qB,OAAOuB,MAAMwpB,YAChCC,GAAUzpB,MAAMypB,QAChB2zD,GAAO3zD,GAAQ2zD,KACf2pB,GAAOt9E,GAAQs9E,KACftN,GAAQhwE,GAAQgwE,MAChB96F,GAAQqB,MAAMrB,MACd41G,GAAWv0G,MAAMu0G,SACjBzf,GAAOyf,GAASzf,KAChBqY,GAASoH,GAASpH,OAClByuB,GAAoBrnB,GAASnyE,UAC7BkvE,GAAUiD,GAASjD,QACnB9nF,GAAUxpB,MAAMwpB,QAChB7mB,GAAa3C,MAAM2C,WACnBsB,GAAajE,MAAMiE,WACnB43H,GAAqB77H,MAAMurB,OAC3BuwG,GAAI,IACJziH,GAAI,IACJ+6D,GAAM,MACNC,GAAS,SACTlqD,GAAO,OACPE,GAAQ,QACR8pD,GAAS,SACT5vC,GAAQ,QACRD,GAAS,SACT4vF,GAAkB,EAClBpc,GAAY9kG,OAAO8kG,UACnBwc,IAAathH,OAAO8kG,UACpBikB,GAAgB,IAChBC,GAAiB,IACjBC,GAAQ,OACRC,GAAQ,OACRxqB,GAAe,kBACfinB,GAAoB,GACpBwD,GAAmB,iBACnBC,GAAa,YACbC,GAAa,YACbC,GAAU,UACVh6F,GAAO,OACPi6F,GAAS,SACTC,GAAW,WACXC,GAAQ,QACRC,GAAM,MACNC,GAAS,SACThkE,GAAQ,QACRpwD,GAAS,SACT5E,GAAS,SACTi5H,GAAO,OACPC,GAAe,UACfC,GAAmB,IACnBC,IACAjB,EAAGA,GACHziH,EAAGA,GACHkrB,MAAOA,GACPD,OAAQA,GACR03F,eAAgBA,GAChBD,cAAeA,GACf3nD,IAAKA,GACLjqD,KAAMA,GACNkqD,OAAQA,GACRhqD,MAAOA,GACP8pD,OAAQA,GACR+/C,gBAAiBA,GACjByE,kBAAmBA,GACnB4D,OAAQA,GACRC,SAAUA,GACVC,MAAOA,GACP3kB,UAAWA,GACXwc,UAAWA,GACX2H,MAAOA,GACPC,MAAOA,GACPxqB,aAAcA,GACdyqB,iBAAkBA,GAClBG,QAASA,GACTK,OAAQA,GACRr6F,KAAMA,GACN85F,WAAYA,GACZC,WAAYA,GACZ1jE,MAAOA,GACPpwD,OAAQA,GACR5E,OAAQA,GACRi5H,KAAMA,GACNF,IAAKA,GACLG,aAAcA,GACdC,iBAAkBA,IAclB/J,GAAc,OAuCdU,GAAoB,sCAwCpBuJ,IACAlsH,OAAQ,SAAUA,EAAQnL,GACtB,MAAOA,IAEX2L,SAAU,SAAU3L,GAChB,MAAOA,IAEXmZ,UAAW,SAAUnZ,GACjB,MAAO,IAAI5B,MAAK4B,KAGpB+N,GAAUspH,GACVC,GAAct+H,GAAM8J,WACxBw0H,GAAY3sG,SAAW,SAAUgwG,GAC7B5sH,GAAU4sH,GAEVvxH,OAAO+pG,kBACP/pG,OAAO+pG,iBAAiBmkB,IACpBlV,gBACIr8F,IAAK,WACD,MAAOhY,QAKnBwpH,GAAuB,uBACvBC,GAAgBx+H,GAAM8J,QACtBC,KAAM,SAAU2vH,GACZtwH,KAAKw4H,aAAelI,GAExBmI,KAAM,SAAUC,GAEZ,IAFE,GAIEC,GAHAzmH,KAAasS,EAAMzpB,UAAUpD,OAAS,EACnC6sB,KAAQ,GACXtS,EAAOsS,GAAOzpB,UAAUypB,EAAM,EAElC,OADIm0G,GAAO34H,KAAKswH,YACZjF,EAASqN,IAAiBA,EAAargI,MAAMy8H,IACtC6D,EAAK5vH,OAAOjC,MAAM6xH,GAAOD,GAAcviH,OAAOjE,IAElDymH,EAAKpvH,SAAS2I,EAAO,GAAIwmH,IAEpCE,WAAY,SAAUF,EAAcxmH,EAAQ2mH,GAAhC,GAEJ75H,GADA25H,EAAO34H,KAAKswH,WAUhB,OAPItxH,GADAqsH,EAASqN,IAAiBA,EAAargI,MAAMy8H,IACpC4D,EAAaxhI,QAAQi+H,GAAsB,SAAU98H,EAAO8Z,EAAOC,GACxE,GAAIxU,GAAQsU,EAAOG,SAASF,EAAO,IACnC,OAAOwmH,GAAKpvH,SAAS3L,EAAOwU,EAAoBA,EAAkB9a,UAAU,GAAK,GAAIuhI,KAGhFF,EAAKpvH,SAAS2I,EAAO,GAAIwmH,EAAcG,MAKxD7xH,OAAO+pG,kBACP/pG,OAAO+pG,iBAAiBqkB,GAAcnxH,IAClCqsH,aACI3sG,IAAK,WACD,MAAO3jB,MAAKw4H,cAAgBtD,GAAYlV,mBAKpDqV,GAAez+H,GAAM8J,QACrBC,KAAM,SAAUm4H,EAAO90H,GACH,SAAZA,IACAA,MAEJhE,KAAKw4H,aAAex0H,EAAQssH,YAC5BtwH,KAAKkI,OAASlE,EAAQkE,QAAU4wH,EAChC94H,KAAK+I,OAAS,GAAIqsH,IAAcpxH,EAAQssH,aACxCtwH,KAAK84H,MAAQA,EACb94H,KAAKy/G,IAAMz7G,EAAQy7G,KAEvB34F,OAAQ,SAAU5X,EAAMuZ,GACpBzoB,KAAK84H,MAAM9wH,QAAQkH,EAAMuZ,MAG7BzhB,OAAO+pG,kBACP/pG,OAAO+pG,iBAAiBskB,GAAapxH,IACjC00H,MACIh1G,IAAK,WACD,MAAO3jB,MAAKw4H,cAAgBtD,GAAYlV,mBAMpDuV,GAAmB3+H,GAAM8J,WAC7B60H,GAAiBhtG,SAAW,SAAUgwG,GAClCjD,GAAYiD,GAEhBhD,GAAiBtmF,OAAS,SAAUn3C,EAAS4P,GACzC,GAAI4tH,GACA,MAAOA,IAAUrmF,OAAOn3C,EAAS4P,IAGrC8tH,IACAhtH,QAAS,SAAU/F,GACf,MAAOA,KAGXspH,GAAkBn1H,GAAM8J,WAC5BqrH,GAAgBxjG,SAAW,SAAUgwG,GACjC/C,GAAY+C,GAEhBxM,GAAgBvjH,QAAU,SAAU/F,GAChC,MAAO+yH,IAAUhtH,QAAQ/F,IAEzBgzH,IACAJ,aAAcA,GACdE,iBAAkBA,GAClBH,cAAeA,GACfF,YAAaA,GACbnJ,gBAAiBA,IA0CjB2J,GAAU,UACVC,GAAmB/+H,GAAM8J,QACzBC,KAAM,SAAUstG,EAAU3mG,GACtBtH,KAAKiuG,SAAWA,EAChBjuG,KAAK+4H,WAAan+H,MAAeoF,KAAK+4H,WAAYzxH,IAEtDU,QAAS,SAAUkH,EAAMuZ,GAAhB,GAIDrkB,GAHAm8E,EAAMvgF,KACNiuG,EAAW1tB,EAAI0tB,SACf8qB,EAAax4C,EAAIw4C,UAOrB,OALIA,GAAW7pH,GACX9K,EAAqBpE,KAAKg5H,aAAaD,EAAW7pH,GAAOuZ,GAClDwlF,EAASynB,MAChBtxH,EAAqBpE,KAAKg5H,aAAatD,GAASxmH,EAAMuZ,IAEnDrkB,GAEX40H,aAAc,SAAUC,GAEpB,IADA,GAAIxwG,MAAWjE,EAAMzpB,UAAUpD,OAAS,EACjC6sB,KAAQ,GACXiE,EAAKjE,GAAOzpB,UAAUypB,EAAM,EAChC,OAAOxkB,MAAKiuG,SAASgrB,GAAQnyH,MAAM9G,KAAKiuG,SAAUxlF,IAEtDywG,iBAAkB,SAAUzsH,GAAV,GAKL9O,GAJLmjF,EAAS9gF,IACb,IAAIA,KAAKiuG,SAASirB,iBACd,MAAOl5H,MAAKiuG,SAASirB,iBAAiBzsH,EAE1C,KAAS9O,EAAM,EAAGA,EAAM8O,EAAM9U,OAAQgG,IAClC,GAAImjF,EAAOi4C,WAAWtsH,EAAM9O,IACxB,OAAO,KA2BnB4iF,GAAMtoF,MAAMypB,QAAQ2zD,KACpB7wC,GAAS+7C,GAAI/7C,OACb+gD,GAAahF,GAAIgF,WACjB9B,GAAUlD,GAAIkD,QACdG,GAAMrD,GAAIqD,IACV3O,GAAgBsL,GAAItL,cACpBpM,GAAc0X,GAAI1X,YAClB+b,GAAerE,GAAIqE,aACnBD,GAAmBpE,GAAIoE,iBACvBh1D,GAAO4wD,GAAI5wD,KACXm1D,GAAavE,GAAIuE,WACjBlD,GAAYrB,GAAIqB,UAChBuD,GAAM5E,GAAI4E,IACV11E,GAAQ8wE,GAAI9wE,MACZs2E,GAAexF,GAAIwF,aACnBT,GAAiB/E,GAAI+E,eACrBswC,GAAah/H,GAAM8J,WACvBk1H,GAAWuD,WAAa,SAAU/4H,EAASg5H,EAAOhmF,GAChC,SAAVA,IACAA,GAAUimF,MAAO,GAErB,IAAIC,GAAY,GACXl5H,GAAWgzC,EAAMimF,MAAQC,IAAc/7H,SAAS67H,OAGrDpyH,OAAO6a,KAAKzhB,GAAS44B,QAAQ,SAAUj6B,GACnC,GAAInB,GAAQwC,EAAQrB,EACR,gBAARA,GAAmC,MAAXA,EAAI,IAAenB,IAGnC,SAARmB,EACAq6H,EAAMtxH,KAAKlK,GACa,gBAAVA,KACdw1C,EAAMimF,QACNzD,GAAWuD,WAAWv7H,EAAOw7H,EAAOhmF,GACpCA,EAAMimF,aAIlBzD,GAAW2D,UAAY,SAAUH,EAAOv4G,GACpC,GAAImkC,KACJ,IAAIo0E,EAAMzhI,OAAS,GAAK4F,SAAS67H,MAAO,CACpC,IACIp0E,EAAWo0E,EAAMpmH,IAAI,SAAU+lF,GAC3B,MAAOx7F,UAAS67H,MAAMpuE,KAAK+tC,KAEjC,MAAO9wF,GACLhQ,MAAMwsB,aAAaxc,GAEvBuxH,QAAQprE,IAAIpJ,GAAUvjB,KAAK5gB,EAAUA,OAErCA,MAGR+0G,GAAW6D,aAAe,SAAUr5H,EAASygB,GACzC,GAAIu4G,KACJxD,IAAWuD,WAAW/4H,EAASg5H,GAC/BxD,GAAW2D,UAAUH,EAAOv4G,IAyB5BgnE,GAAQjxF,GAAM8J,QACdC,KAAM,SAAU2yB,EAAGjiB,GACfrR,KAAKszB,EAAIA,GAAK,EACdtzB,KAAKqR,EAAIA,GAAK,GAElBlV,MAAO,WACH,MAAO,IAAI0rF,IAAM7nF,KAAKszB,EAAGtzB,KAAKqR,IAElC2rC,OAAQ,SAAUotC,GACd,MAAOA,IAASpqF,KAAKszB,IAAM82D,EAAM92D,GAAKtzB,KAAKqR,IAAM+4E,EAAM/4E,GAE3D8sB,OAAQ,SAAUm6B,EAAQ8sB,GAAlB,GACAqnC,GAAQtnC,GAAIC,GACZs0C,EAAO96H,KAAKqpF,IAAIwkC,GAChBkN,EAAO/6H,KAAKspF,IAAIukC,GAChB1kC,EAAKzvB,EAAOhlC,EACZ00D,EAAK1vB,EAAOjnD,EACZkvE,EAAMvgF,KACNszB,EAAIitD,EAAIjtD,EACRjiB,EAAIkvE,EAAIlvE,CAGZ,OAFArR,MAAKszB,EAAI7jB,GAAMs4E,GAAMz0D,EAAIy0D,GAAM2xC,GAAQroH,EAAI22E,GAAM2xC,EAAMxN,IACvDnsH,KAAKqR,EAAI5B,GAAMu4E,GAAM32E,EAAI22E,GAAM0xC,GAAQpmG,EAAIy0D,GAAM4xC,EAAMxN,IAChDnsH,MAEXwrF,SAAU,SAAU5oF,GAGhB,MAFA5C,MAAKszB,GAAK1wB,EACV5C,KAAKqR,GAAKzO,EACH5C,MAEXwwG,WAAY,SAAUpmB,GAAV,GACJhyB,GAAKp4D,KAAKszB,EAAI82D,EAAM92D,EACpB+kC,EAAKr4D,KAAKqR,EAAI+4E,EAAM/4E,CACxB,OAAOzS,MAAK45D,KAAKJ,EAAKA,EAAKC,EAAKA,MAGxCwvB,GAAM+xC,SAAW,SAAUthE,EAAQ+wB,EAAOjxF,GACtC,GAAIyrF,GAAUsB,GAAIkE,EAClB,OAAO,IAAIxB,IAAMvvB,EAAOhlC,EAAIl7B,EAASwG,KAAKqpF,IAAIpE,GAAUvrB,EAAOjnD,EAAIjZ,EAASwG,KAAKspF,IAAIrE,KAErF+oC,GAAMh2H,GAAM8J,QACZC,KAAM,SAAUq3D,EAAIC,EAAIC,EAAIC,GACxBn4D,KAAKg4D,GAAKA,GAAM,EAChBh4D,KAAKi4D,GAAKA,GAAM,EAChBj4D,KAAKk4D,GAAKA,GAAM,EAChBl4D,KAAKm4D,GAAKA,GAAM,GAEpBnb,OAAQ,SAAUlZ,GACd,MAAO9jC,MAAKg4D,KAAOl0B,EAAIk0B,IAAMh4D,KAAKk4D,KAAOp0B,EAAIo0B,IAAMl4D,KAAKi4D,KAAOn0B,EAAIm0B,IAAMj4D,KAAKm4D,KAAOr0B,EAAIq0B,IAE7Fn/D,MAAO,WACH,MAAOgH,MAAKk4D,GAAKl4D,KAAKg4D,IAE1B/+D,OAAQ,WACJ,MAAO+G,MAAKm4D,GAAKn4D,KAAKi4D,IAE1Bx6B,UAAW,SAAU26B,EAAIC,GAKrB,MAJAr4D,MAAKg4D,IAAMI,EACXp4D,KAAKk4D,IAAME,EACXp4D,KAAKi4D,IAAMI,EACXr4D,KAAKm4D,IAAME,EACJr4D,MAEXkrB,KAAM,SAAUoI,EAAGjiB,GAAb,GACEpY,GAAS+G,KAAK/G,SACdD,EAAQgH,KAAKhH,OASjB,OARIyqF,IAAQnwD,KACRtzB,KAAKg4D,GAAK1kC,EACVtzB,KAAKk4D,GAAKl4D,KAAKg4D,GAAKh/D,GAEpByqF,GAAQpyE,KACRrR,KAAKi4D,GAAK5mD,EACVrR,KAAKm4D,GAAKn4D,KAAKi4D,GAAKh/D,GAEjB+G,MAEXnH,KAAM,SAAUghI,GAKZ,MAJA75H,MAAKg4D,GAAKp5D,KAAKoT,IAAIhS,KAAKg4D,GAAI6hE,EAAU7hE,IACtCh4D,KAAKi4D,GAAKr5D,KAAKoT,IAAIhS,KAAKi4D,GAAI4hE,EAAU5hE,IACtCj4D,KAAKk4D,GAAKt5D,KAAKnG,IAAIuH,KAAKk4D,GAAI2hE,EAAU3hE,IACtCl4D,KAAKm4D,GAAKv5D,KAAKnG,IAAIuH,KAAKm4D,GAAI0hE,EAAU1hE,IAC/Bn4D,MAEX85H,UAAW,SAAU1vC,GAAV,GACH2vC,GAAah0H,EAAQqkF,GACrB92D,EAAIymG,EAAa3vC,EAAM,GAAKA,EAAM92D,EAClCjiB,EAAI0oH,EAAa3vC,EAAM,GAAKA,EAAM/4E,CAEtC,OADArR,MAAKnH,KAAK,GAAI+zH,IAAIt5F,EAAGjiB,EAAGiiB,EAAGjiB,IACpBrR,MAEXg6H,OAAQ,SAAUH,EAAW/lG,GASzB,MARIA,KAASigG,IAAMjgG,IACf9zB,KAAKg4D,GAAK6hE,EAAU7hE,GACpBh4D,KAAKk4D,GAAK2hE,EAAU3hE,IAEpBpkC,IAASxiB,IAAMwiB,IACf9zB,KAAKi4D,GAAK4hE,EAAU5hE,GACpBj4D,KAAKm4D,GAAK0hE,EAAU1hE,IAEjBn4D,MAEXi6H,QAAS,SAAUJ,EAAWpsD,GAArB,GAMGysD,GACA5hE,EANJr/D,EAAS+G,KAAK/G,SACdD,EAAQgH,KAAKhH,QACb86B,EAAO25C,IAAWpB,IAAOoB,IAAWnB,GAASh7D,GAAIyiH,GACjD30H,EAAS00B,IAASxiB,GAAIrY,EAASD,CAanC,OAZIy0E,KAAWrB,IACP8tD,EAAeL,EAAUvhE,SACzBA,EAASt4D,KAAKs4D,SAClBt4D,KAAKg4D,IAAMkiE,EAAa5mG,EAAIglC,EAAOhlC,EACnCtzB,KAAKi4D,IAAMiiE,EAAa7oH,EAAIinD,EAAOjnD,GAEnCrR,KAAK8zB,EAAO,GADL25C,IAAWpB,IAAOoB,IAAWrrD,GACnBy3G,EAAU/lG,EAAO,GAAK10B,EAEtBy6H,EAAU/lG,EAAO,GAEtC9zB,KAAKk4D,GAAKl4D,KAAKg4D,GAAKh/D,EACpBgH,KAAKm4D,GAAKn4D,KAAKi4D,GAAKh/D,EACb+G,MAEXm6H,OAAQ,SAAUC,EAAIC,GAGlB,MAFAr6H,MAAKk4D,IAAMkiE,EACXp6H,KAAKm4D,IAAMkiE,EACJr6H,MAEXqxG,OAAQ,SAAU+oB,EAAIC,GAElB,MADAr6H,MAAKm6H,QAAQC,GAAKC,GACXr6H,MAEXzI,IAAK,SAAUq/F,GACX,GAAI2hB,GAAUqT,EAAWh1B,EAKzB,OAJA52F,MAAKg4D,IAAMugD,EAAQ7/G,KACnBsH,KAAKk4D,IAAMqgD,EAAQ5/G,MACnBqH,KAAKi4D,IAAMsgD,EAAQj5G,IACnBU,KAAKm4D,IAAMogD,EAAQ3/G,OACZoH,MAEXs6H,MAAO,SAAU1jC,GACb,GAAI2hB,GAAUqT,EAAWh1B,EAKzB,OAJA2hB,GAAQ7/G,MAAQ6/G,EAAQ7/G,KACxB6/G,EAAQj5G,KAAOi5G,EAAQj5G,IACvBi5G,EAAQ5/G,OAAS4/G,EAAQ5/G,MACzB4/G,EAAQ3/G,QAAU2/G,EAAQ3/G,OACnBoH,KAAKzI,IAAIghH,IAEpBp8G,MAAO,WACH,MAAO,IAAIywH,IAAI5sH,KAAKg4D,GAAIh4D,KAAKi4D,GAAIj4D,KAAKk4D,GAAIl4D,KAAKm4D,KAEnDG,OAAQ,WACJ,MAAO,IAAIuvB,IAAM7nF,KAAKg4D,GAAKh4D,KAAKhH,QAAU,EAAGgH,KAAKi4D,GAAKj4D,KAAK/G,SAAW,IAE3Es4G,cAAe,SAAUnnB,GACrB,MAAOA,GAAM92D,GAAKtzB,KAAKg4D,IAAMoyB,EAAM92D,GAAKtzB,KAAKk4D,IAAMkyB,EAAM/4E,GAAKrR,KAAKi4D,IAAMmyB,EAAM/4E,GAAKrR,KAAKm4D,IAE7FqyB,OAAQ,WACJ,OACI,GAAI3C,IAAM7nF,KAAKg4D,GAAIh4D,KAAKi4D,IACxB,GAAI4vB,IAAM7nF,KAAKk4D,GAAIl4D,KAAKi4D,IACxB,GAAI4vB,IAAM7nF,KAAKk4D,GAAIl4D,KAAKm4D,IACxB,GAAI0vB,IAAM7nF,KAAKg4D,GAAIh4D,KAAKm4D,MAGhCoiE,QAAS,WACL,OACIv6H,KAAKg4D,GACLh4D,KAAKi4D,GACLj4D,KAAKk4D,GACLl4D,KAAKm4D,IACPlhE,KAAK,MAEXujI,SAAU,SAAU12F,GAChB,QAASA,EAAIq0B,GAAKn4D,KAAKi4D,IAAMj4D,KAAKm4D,GAAKr0B,EAAIm0B,IAAMn0B,EAAIo0B,GAAKl4D,KAAKg4D,IAAMh4D,KAAKk4D,GAAKp0B,EAAIk0B,KAEvF75B,OAAQ,SAAUiG,GAAV,GACAprC,GAAQgH,KAAKhH,QACbC,EAAS+G,KAAK/G,SACdsnF,EAAMvgF,KAAKs4D,SACXyvB,EAAKxH,EAAIjtD,EACT00D,EAAKzH,EAAIlvE,EACTopH,EAAKjO,EAAY,EAAG,EAAGzkC,EAAIC,EAAI5jD,GAC/Bs2F,EAAKlO,EAAYxzH,EAAO,EAAG+uF,EAAIC,EAAI5jD,GACnCu2F,EAAKnO,EAAYxzH,EAAOC,EAAQ8uF,EAAIC,EAAI5jD,GACxCw2F,EAAKpO,EAAY,EAAGvzH,EAAQ8uF,EAAIC,EAAI5jD,EAKxC,OAJAprC,GAAQ4F,KAAKnG,IAAIgiI,EAAGnnG,EAAGonG,EAAGpnG,EAAGqnG,EAAGrnG,EAAGsnG,EAAGtnG,GAAK10B,KAAKoT,IAAIyoH,EAAGnnG,EAAGonG,EAAGpnG,EAAGqnG,EAAGrnG,EAAGsnG,EAAGtnG,GACzEr6B,EAAS2F,KAAKnG,IAAIgiI,EAAGppH,EAAGqpH,EAAGrpH,EAAGspH,EAAGtpH,EAAGupH,EAAGvpH,GAAKzS,KAAKoT,IAAIyoH,EAAGppH,EAAGqpH,EAAGrpH,EAAGspH,EAAGtpH,EAAGupH,EAAGvpH,GAC1ErR,KAAKk4D,GAAKl4D,KAAKg4D,GAAKh/D,EACpBgH,KAAKm4D,GAAKn4D,KAAKi4D,GAAKh/D,EACb+G,MAEX66H,OAAQ,WACJ,MAAO,IAAI9tC,KACP/sF,KAAKg4D,GACLh4D,KAAKi4D,KAELj4D,KAAKhH,QACLgH,KAAK/G,YAGb6hI,QAAS,WACL,MAAwB,KAAjB96H,KAAKhH,SAAmC,IAAlBgH,KAAK/G,UAEtCq0F,MAAO,SAAUusC,EAAW/lG,EAAM45D,GAA3B,GACCvN,GAAKrsD,EAAO,EACZssD,EAAKtsD,EAAO,EACZinG,EAAWjnG,IAASigG,GAAIv3F,GAAQD,GAChCx+B,EAAOiC,KAAK+6H,IACZ93H,GAAQyqF,GACJtrE,GACAiqD,MAEJrsE,KAAKmgF,GAAM05C,EAAU15C,GACrBngF,KAAKogF,GAAMpgF,KAAKmgF,GAAMpiF,GACfkF,EAAQyqF,GACXprE,GACAgqD,MAEJtsE,KAAKogF,GAAMy5C,EAAUz5C,GACrBpgF,KAAKmgF,GAAMngF,KAAKogF,GAAMriF,GACf2vF,IAActhB,KACrBpsE,KAAKmgF,GAAM05C,EAAU15C,IAAO05C,EAAUkB,KAAch9H,GAAQ,EAC5DiC,KAAKogF,GAAMpgF,KAAKmgF,GAAMpiF,MAQ9B83H,GAAOj/H,GAAM8J,QACbC,KAAM,SAAU23D,EAAQ00D,EAAa50H,EAAQ+wF,EAAYE,GACrDrpF,KAAKs4D,OAASA,EACdt4D,KAAKgtH,YAAcA,EACnBhtH,KAAK5H,OAASA,EACd4H,KAAKmpF,WAAaA,EAClBnpF,KAAKqpF,MAAQA,GAEjBltF,MAAO,WACH,MAAO,IAAI05H,IAAK71H,KAAKs4D,OAAQt4D,KAAKgtH,YAAahtH,KAAK5H,OAAQ4H,KAAKmpF,WAAYnpF,KAAKqpF,QAEtF2xC,OAAQ,WACJ,MAAOh7H,MAAKmpF,WAAanpF,KAAKqpF,MAAQ,GAE1CqpB,UAAW,SAAUuoB,EAAWjO,GAM5B,MALIA,GACAhtH,KAAKgtH,YAAciO,EAEnBj7H,KAAK5H,OAAS6iI,EAEXj7H,MAEXoqF,MAAO,SAAUf,EAAO2jC,GAAjB,GACCkO,GAAc/1C,GAAIkE,GAClB8xC,EAAKv8H,KAAKqpF,IAAIizC,GACdE,EAAKx8H,KAAKspF,IAAIgzC,GACd9iI,EAAS40H,EAAchtH,KAAKgtH,YAAchtH,KAAK5H,OAC/Ck7B,EAAI7jB,GAAMzP,KAAKs4D,OAAOhlC,EAAI6nG,EAAK/iI,EAAQ+zH,IACvC96G,EAAI5B,GAAMzP,KAAKs4D,OAAOjnD,EAAI+pH,EAAKhjI,EAAQ+zH,GAC3C,OAAO,IAAItkC,IAAMv0D,EAAGjiB,IAExBgqH,YAAa,SAAU9iE,EAAUv/D,EAAOC,GAA3B,GACLqiI,GAASt7H,KAAK7D,QAAQk1G,OAAO94C,GAC7BgjE,EAAWD,EAAON,SAClBQ,EAAWF,EAAOlxC,MAAMmxC,GACxBE,EAAKziI,EAAQ,EACb0iI,EAAKziI,EAAS,EACd2rG,EAAKhmG,KAAKspF,IAAI/C,GAAIo2C,IAClBI,EAAK/8H,KAAKqpF,IAAI9C,GAAIo2C,IAClBjoG,EAAIkoG,EAASloG,EAAImoG,EACjBpqH,EAAImqH,EAASnqH,EAAIqqH,CAOrB,OANI98H,MAAKC,IAAI+lG,GAAM,KACftxE,GAAKmoG,GAAME,EAAK/8H,KAAKC,IAAI88H,IAEzB/8H,KAAKC,IAAI88H,GAAM,KACftqH,GAAKqqH,GAAM92B,EAAKhmG,KAAKC,IAAI+lG,IAEtB,GAAIgoB,IAAIt5F,EAAGjiB,EAAGiiB,EAAIt6B,EAAOqY,EAAIpY,IAExCs4G,cAAe,SAAU/7B,GAAV,GACPld,GAASt4D,KAAKs4D,OACd00D,EAAchtH,KAAKgtH,YACnB50H,EAAS4H,KAAK5H,OACd+wF,EAAanpF,KAAKmpF,WAClBG,EAAWtpF,KAAKmpF,WAAanpF,KAAKqpF,MAClCjxB,EAAKod,EAAEliD,EAAIglC,EAAOhlC,EAClB+kC,EAAKmd,EAAEnkE,EAAIinD,EAAOjnD,EAClBuqH,EAAS,GAAI/zC,IAAMzvB,EAAIC,GACvB08C,EAAa/0G,KAAKoqF,MAAMjB,GACxB0yC,EAAc,GAAIh0C,IAAMktB,EAAWzhF,EAAIglC,EAAOhlC,EAAGyhF,EAAW1jG,EAAIinD,EAAOjnD,GACvE64E,EAAWlqF,KAAKoqF,MAAMd,GACtBwyC,EAAY,GAAIj0C,IAAMqC,EAAS52D,EAAIglC,EAAOhlC,EAAG42D,EAAS74E,EAAIinD,EAAOjnD,GACjE0qH,EAAOtsH,GAAM2oD,EAAKA,EAAKC,EAAKA,EAAI8zD,GACpC,QAAQ0P,EAAY7+E,OAAO4+E,IAAW1Q,EAAU2Q,EAAaD,MAAa1Q,EAAU4Q,EAAWF,IAAWG,GAAQ/O,EAAcA,GAAe+O,GAAQ3jI,EAASA,GAEpK4jI,QAAS,WAAA,GAgBDC,GAUKnhI,EACDsvF,EA1BJtJ,EAAS9gF,KACT8jC,EAAM,GAAI8oF,IAAI7c,GAAWA,GAAWwc,GAAWA,IAC/CpjC,EAAa15E,GAAMzP,KAAKmpF,WAAa,KACrCG,EAAW75E,IAAO05E,EAAanpF,KAAKqpF,OAAS,KAC7C2jC,EAAchtH,KAAKgtH,YACnBkP,GACA,EACA,GACA,IACA,IACA/yC,EACAG,GACFnrE,KAAKuuG,GACHyP,EAAkBD,EAAUh+H,QAAQirF,GACpCizC,EAAgBF,EAAUh+H,QAAQorF,EAWtC,KARI2yC,EADA9yC,IAAeG,EACN4yC,EAELC,EAAkBC,EACTF,EAAU11H,MAAM21H,EAAiBC,EAAgB,MAE9CjmH,OAAO+lH,EAAU11H,MAAM,EAAG41H,EAAgB,GAAIF,EAAU11H,MAAM21H,EAAiBD,EAAUvkI,SAGpGmD,EAAI,EAAGA,EAAImhI,EAAOtkI,OAAQmD,IAC3BsvF,EAAQtJ,EAAOsJ,MAAM6xC,EAAOnhI,IAChCgpC,EAAIg2F,UAAU1vC,GACdtmD,EAAIg2F,UAAU1vC,EAAO4iC,EAKzB,OAHKA,IACDlpF,EAAIg2F,UAAU95H,KAAKs4D,QAEhBx0B,GAEXutE,OAAQ,SAAUzzG,GAEd,MADAoC,MAAK5H,QAAUwF,EACRoC,QAMX81H,GAASD,GAAKn1H,QACdC,KAAM,SAAU23D,EAAQlgE,EAAQ+wF,EAAYE,GACxCwsC,GAAK5xH,GAAGtD,KAAKwH,KAAKnI,KAAMs4D,EAAQ,EAAGlgE,EAAQ+wF,EAAYE,IAE3DgoB,OAAQ,SAAUzzG,GACd,MAAOi4H,IAAK5xH,GAAGotG,OAAOlpG,KAAKnI,KAAMpC,IAErCzB,MAAO,WACH,MAAO,IAAI25H,IAAO91H,KAAKs4D,OAAQt4D,KAAK5H,OAAQ4H,KAAKmpF,WAAYnpF,KAAKqpF,QAEtEqpB,UAAW,SAAUuoB,GAEjB,MADAj7H,MAAK5H,OAAS6iI,EACPj7H,QAGX+1H,GAAkB,KAClBC,GAAep/H,GAAM8J,QACrB27H,WAAY,SAAUf,EAAQl7H,GAAlB,GAMJk4D,GACAlgE,EACA40H,EACA3V,EAMA5vE,EAGI60F,EAjBJnzC,EAAamyC,EAAOnyC,WAAa,IACjCG,EAAWgyC,EAAOjyC,MAAQF,CAsB9B,OArBImyC,GAAOjyC,MAAQ,GAAKF,IAAeG,IACnCA,GAAYysC,IAEZz9D,EAAS,GAAIk0C,IAAS3kB,MAAMyzC,EAAOhjE,OAAOhlC,EAAGgoG,EAAOhjE,OAAOjnD,GAC3DjZ,EAASwG,KAAKnG,IAAI6iI,EAAOljI,OAAQ,GACjC40H,EAAcpuH,KAAKnG,IAAI6iI,EAAOtO,YAAa,GAC3C3V,EAAM,GAAI7K,IAAS/C,IAAInxC,GACvB6wB,WAAYA,EACZG,SAAUA,EACVK,QAASvxF,EACTwxF,QAASxxF,IAETqvC,EAAOu3D,GAAK0Y,QAAQL,EAAKj3G,GAAS0tE,QAClCk/C,GACA3V,EAAI1tB,QAAU0tB,EAAIztB,QAAUojC,EACxBsP,EAAWjlB,EAAIzE,QAAQtpB,GAC3B7hD,EAAK0qD,OAAOmqC,EAAShpG,EAAGgpG,EAASjrH,GACjCo2B,EAAK4vE,IAAI/tB,EAAUH,EAAY6jC,EAAaA,GAAa,IAEzDvlF,EAAK0qD,OAAO75B,EAAOhlC,EAAGglC,EAAOjnD,GAE1Bo2B,KAGfuuF,GAAarqH,QAAU,GAAIqqH,IACvBC,GAAer/H,GAAM8J,QACrBC,KAAM,SAAUP,GACZJ,KAAKrF,YACLqF,KAAKI,QAAUxF,MAAeoF,KAAKI,QAASA,IAEhD84G,OAAQ,SAAU2gB,GAAV,GAEA/1F,GACKhpC,EACDyhI,EAHJ5hI,EAAWqF,KAAKrF,QAEpB,KAASG,EAAI,EAAGA,EAAIH,EAAShD,OAAQmD,IAC7ByhI,EAAe5hI,EAASG,GAC5ByhI,EAAarjB,OAAO2gB,GACpB/1F,EAAMA,EAAMA,EAAIjrC,KAAK0jI,EAAaz4F,KAAOy4F,EAAaz4F,IAAI3nC,OAE9D6D,MAAK8jC,IAAMA,GAAO+1F,GAEtB7zG,QAAS,WAAA,GAKIlrB,GAJLH,EAAWqF,KAAKrF,QAIpB,KAHIqF,KAAK4tE,WACL5tE,KAAK4tE,UAAU5nD,UAEVlrB,EAAI,EAAGA,EAAIH,EAAShD,OAAQmD,IACjCH,EAASG,GAAGkrB,WAGpBw2G,QAAS,WACL,GAAI7iI,GAASqG,KAAKrG,MAClB,OAAOA,GAASA,EAAO6iI,UAAY,MAEvCC,UAAW,WACP,GAAIC,GAAU18H,KAAK28H,YACnB,IAAID,EACA,MAAOA,GAAQx0H,QAGvBy0H,WAAY,WAER,IADA,GAAI7kI,GAAUkI,KACPlI,GAAS,CACZ,GAAIA,EAAQ8kI,aACR,MAAO9kI,GAAQ8kI,YAEnB9kI,GAAUA,EAAQ6B,SAG1BkjI,kBAAmB,SAAUzkE,EAAIC,GAAd,GAGNv9D,GAFLH,EAAWqF,KAAKrF,SAChBmiI,EAAgBniI,EAAShD,MAC7B,KAASmD,EAAI,EAAGA,EAAIgiI,EAAehiI,IAC/BH,EAASG,GAAGgpC,IAAIrG,UAAU26B,EAAIC,IAGtC7zB,OAAQ,WAAA,GAGK1pC,GACDq4C,EAHJy9D,EAAc71G,UACd+lF,EAAS9gF,IACb,KAASlF,EAAI,EAAGA,EAAIC,UAAUpD,OAAQmD,IAC9Bq4C,EAAOy9D,EAAY91G,GACvBgmF,EAAOnmF,SAASmN,KAAKqrC,GACrBA,EAAKx5C,OAASmnF,GAGtBi8C,aAAc,WACN/8H,KAAKI,QAAQoD,WAAY,IAG7BxD,KAAKg9H,eACLh9H,KAAKi9H,YACLj9H,KAAK49G,iBACL59G,KAAKk9H,kBACLl9H,KAAKm9H,mBAETF,UAAW,WACHj9H,KAAKqkG,SACLrkG,KAAKqkG,OAAO+4B,aAAep9H,KACvBA,KAAKrG,QACLqG,KAAKrG,OAAO0jI,aAAar9H,KAAKqkG,UAI1CuZ,eAAgB,WAAA,GAGH9iH,GAFLH,EAAWqF,KAAKrF,SAChBhD,EAASgD,EAAShD,MACtB,KAASmD,EAAI,EAAGA,EAAInD,EAAQmD,IACxBH,EAASG,GAAGiiI,gBAGpBC,aAAc,WACVh9H,KAAKqkG,OAAS,GAAI3S,KACdrtD,OAAQrkC,KAAKI,QAAQikC,OACrB7gC,QAAS8hF,GAAetlF,KAAKI,QAAQoD,SAAS,MAGtD05H,gBAAiB,WACTl9H,KAAKqkG,SACLrkG,KAAK4tE,UAAYlsD,GAAQub,UAAUgS,OAAOjvC,KAAKqkG,OAAQrkG,KAAKI,QAAQwtE,aAG5EyvD,aAAc,SAAUC,GACfA,EAAYF,eACbE,EAAYF,aAAep9H,MAE3Bs9H,EAAYl9H,QAAQm9H,OACpBv9H,KAAKw9H,WAAWn5B,OAAO7/D,OAAO84F,GACvB75C,GAAQ65C,EAAYl9H,QAAQikC,QACnCrkC,KAAKy9H,YAAYC,YAAYJ,GACtBt9H,KAAK29H,YACZ39H,KAAK09H,YAAYJ,GACVt9H,KAAKqkG,OACZrkG,KAAKqkG,OAAO7/D,OAAO84F,GAEnBt9H,KAAKrG,OAAO0jI,aAAaC,IAGjCE,SAAU,WACN,MAAIx9H,MAAKrG,OACEqG,KAAKrG,OAAO6jI,WAEhBx9H,MAEXy9H,UAAW,WACP,MAAIz9H,MAAKrG,OACEqG,KAAKrG,OAAO8jI,YAEhBz9H,MAEX09H,YAAa,SAAUJ,GAAV,GAILjtD,GAEIutD,EACAC,EANJx5F,EAASi5F,EAAYl9H,QAAQikC,QAAU,EACvCy5F,EAAU99H,KAAKqkG,OAAO1pG,SACtBhD,EAASmmI,EAAQnmI,MAErB,KAAK04E,EAAM,EAAGA,EAAM14E,IACZimI,EAAUE,EAAQztD,GAClBwtD,EAAOv4C,GAAes4C,EAAQx9H,QAAQikC,OAAQ,KAC9Cw5F,EAAOx5F,IAHagsC,KAO5BrwE,KAAKqkG,OAAOxgD,OAAOwsB,EAAKitD,IAE5BxlB,SAAU,SAAUj3F,GAAV,GAGG/lB,GACD82B,EAHJj3B,EAAWqF,KAAKrF,SAChBhD,EAASgD,EAAShD,MACtB,KAASmD,EAAI,EAAGA,EAAInD,EAAQmD,IACpB82B,EAAQj3B,EAASG,GACrB+lB,EAAS+Q,GACLA,EAAMkmF,UACNlmF,EAAMkmF,SAASj3F,IAI3BzI,QAAS,SAAU/f,GAGf,IAHK,GACDP,GAAUkI,KACV+9H,GAAU,EACPjmI,IAAYimI,GACfA,EAAU1lI,EAAMP,GACXimI,IACDjmI,EAAUA,EAAQ6B,OAG1B,IAAIokI,EACA,MAAOjmI,IAGfqlI,eAAgB,aAEhBa,aAAc,WACV,GAAI59H,IAAWJ,KAAKI,aAAe69H,SACnC,UAAUj+H,KAAKk+H,iBAAmB99H,GAAWA,EAAQoD,WAAY,IAErE26H,gBAAiB,SAAUh8F,GAAV,GAMLi8F,GALJt9C,EAAS9gF,KACTI,GAAWJ,KAAKI,aAAe69H,cAC/BI,EAAej+H,EAAQikG,OACvB45B,EAAYj+H,KAAKs+H,UACrB,KAAKL,EAAW,CAYZ,GAXIG,GACAn/B,MACItpB,MAAOu+C,GACPhsG,QAAS,IAEbg3E,QACIvpB,MAAOu+C,GACPl7H,MAAO,EACPkvB,QAAS,KAGbm2G,GAcA,GAbAJ,EAAYj+H,KAAKs+H,WAAaD,EAAa5nI,EAAEiK,OAAOV,KAAKu+H,uBACrDvB,aAAc,WACV,MAAOl8C,GAAOo9C,gBAAgBE,IAElCl2H,OAAQlI,KAAKy8H,YACb+B,OAAQx+H,KAAKw+H,OACb73G,SAAU3mB,KAAK2mB,SACf83G,SAAUz+H,KAAKy+H,SACf7gI,MAAOoC,KAAKpC,MACZ7E,WAAYiH,KAAKjH,WACjB2lI,aAAc1+H,KAAK0+H,aACnB7vF,MAAO7uC,KAAK6uC,UAEXovF,EACD,WAGJA,GAAYj+H,KAAKs+H,WAAat+H,KAAKk+H,gBAAgBE,EAElD36C,IAAQw6C,EAAU79H,QAAQikC,UAC3B45F,EAAU79H,QAAQikC,OAASihD,GAAellF,EAAQikC,OAAQrkC,KAAKI,QAAQikC,SAE3ErkC,KAAKq9H,aAAaY,GAEtBA,EAAUz6H,QAAQ2+B,IAEtBw8F,sBAAuB,SAAU7mI,EAASsI,EAASw+H,GAC/C,GAAIC,GAAU,GAAI7/B,IAAKvoG,EAAEiK,QACrBw+F,QAAUvpB,MAAO,QACjBspB,KAAMj/F,KAAK8+H,eAAeF,GAC1BxsC,OAAQt6F,EAAQsI,QAAQgyF,QACzBhyF,GAEH,OADAy+H,GAAQ5sC,SAASxrE,SAAS3uB,EAAQm6F,SAASxrE,YACpCo4G,GAEXC,eAAgB,SAAU1+H,GACtB,GAAIJ,KAAKrG,OACL,MAAOqG,MAAKrG,OAAOmlI,eAAe1+H,MAI9C61H,GAAalvH,UAAU3G,WACnB81H,GAAaD,GAAav1H,QAC1BC,KAAM,SAAUP,GACZ61H,GAAahyH,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAChCJ,KAAKI,QAAQojC,OAASooF,EAAW5rH,KAAKI,QAAQojC,QAC9CxjC,KAAKI,QAAQw2F,QAAUg1B,EAAW5rH,KAAKI,QAAQw2F,UAEnDsiB,OAAQ,SAAU2gB,GAAV,GAUA/1F,GA6BAnpC,EACKG,EACDq4C,EAxCJ2tC,EAAS9gF,KACTI,EAAUJ,KAAKI,QACfpH,EAAQoH,EAAQpH,MAChBC,EAASmH,EAAQnH,OACjB8lI,EAAc3+H,EAAQ2+H,YACtBC,EAAahmI,GAASC,EACtBuqC,EAASpjC,EAAQojC,OACjBozD,EAAUx2F,EAAQw2F,QAClBqoC,EAAc7+H,EAAQ8+H,OAAOlmI,MAE7BmmI,EAAmB,WACnBr+C,EAAOwM,MAAMusC,EAAW9F,GAAG3zH,EAAQktF,OACnCxM,EAAOwM,MAAMusC,EAAWvoH,GAAGlR,EAAQutF,QACnC7M,EAAOs+C,WAAat7F,EAAI3nC,QAAQm+H,MAAM92F,GAAQ82F,MAAM2E,IAEpDI,EAAaxF,EAAU19H,OAwB3B,KAvBI6iI,IACAK,EAAWnnE,GAAKmnE,EAAWrnE,GAAKh/D,EAChCqmI,EAAWlnE,GAAKknE,EAAWpnE,GAAKh/D,GAEhC8lI,GACAM,EAAW/E,MAAM92F,GAAQ82F,MAAM2E,GAAa3E,MAAM1jC,GAEtDq/B,GAAahyH,GAAGi1G,OAAO/wG,KAAKnI,KAAMq/H,GAE9Bv7F,EADAk7F,EACMh/H,KAAK8jC,IAAM,GAAI8oF,IAAI,EAAG,EAAG5zH,EAAOC,GAEhC+G,KAAK8jC,IAEXi7F,GAAeC,GACfG,IACAE,EAAar/H,KAAKq/H,WAAar/H,KAAKo/H,WAAWjjI,QAAQm+H,MAAM1jC,KAE7DyoC,EAAar/H,KAAKq/H,WAAav7F,EAAI3nC,QACnC2nC,EAAIvsC,IAAIq/F,GAASr/F,IAAI0nI,GAAa1nI,IAAIisC,GACtC27F,KAEJn/H,KAAK68H,kBAAkB/4F,EAAIk0B,GAAKqnE,EAAWrnE,GAAKx0B,EAAO9qC,KAAOumI,EAAcroC,EAAQl+F,KAAMorC,EAAIm0B,GAAKonE,EAAWpnE,GAAKz0B,EAAOlkC,IAAM2/H,EAAcroC,EAAQt3F,KAClJ3E,EAAWqF,KAAKrF,SACXG,EAAI,EAAGA,EAAIH,EAAShD,OAAQmD,IAC7Bq4C,EAAOx4C,EAASG,GACpBq4C,EAAK+lE,OAAO/lE,EAAKrP,MAGzBwpD,MAAO,SAAUusC,EAAW/lG,EAAM45D,GAC9B1tF,KAAK8jC,IAAIwpD,MAAMusC,EAAW/lG,EAAM45D,IAEpC4xC,OAAQ,WACJ,GAAIl/H,GAAUJ,KAAKI,OACnB,OAAOA,GAAQ8+H,OAAOlmI,OAASoH,EAAQ8gG,YAE3C87B,aAAc,WACV/G,GAAahyH,GAAG+4H,aAAa70H,KAAKnI,KAClC,IAAII,GAAUJ,KAAKI,OACfA,GAAQoD,SAAWxD,KAAKs/H,UACxBt/H,KAAKqkG,OAAO7/D,OAAOw6D,GAAKkF,SAASlkG,KAAKo/H,WAAWvE,SAAU76H,KAAKu/H,iBAGxEA,YAAa,WAAA,GACLn/H,GAAUJ,KAAKI,QACf8+H,EAAS9+H,EAAQ8+H,UACrB,QACIhgC,QACIlmG,MAAOkmI,EAAOlmI,MACd28E,MAAOupD,EAAOvpD,MACdztD,QAASo9D,GAAe45C,EAAOh3G,QAAS9nB,EAAQ8nB,SAChDo5F,SAAU4d,EAAO5d,UAErBriB,MACItpB,MAAOv1E,EAAQ8gG,WACfh5E,QAAS9nB,EAAQ8nB,SAErBk2F,OAAQh+G,EAAQg+G,WAI5BiO,EAAkB6J,IACd5oC,MAAOlrE,GACPurE,OAAQthB,GACR7oC,UACAozD,WACAsoC,QACIvpD,MAAOw+C,GACPn7H,MAAO,GAEXkoG,WAAY,GACZ69B,aAAa,EACb/lI,MAAO,EACPC,OAAQ,EACRuK,SAAS,IAET2yH,GAAeD,GAAWx1H,QAC1BC,KAAM,SAAUP,EAASo/H,GACrBtJ,GAAWjyH,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAC9BJ,KAAKw/H,UAAYA,GAErBC,WAAY,WAAA,GAWJ5lI,GACA/B,EAXAyoF,EAAMvgF,KACNI,EAAUmgF,EAAIngF,QACd0jC,EAAMy8C,EAAI6+C,WACVlgI,EAAOkB,EAAQlB,KACfklC,EAAWhkC,EAAQgkC,SACnBk0B,EAASx0B,EAAIw0B,SACbkrD,EAAY1/E,EAAI9qC,QAAU,CAC9B,OAAKoH,GAAQoD,SAAYxD,KAAKs/H,UAG1BzlI,EAAQmG,KAAKu/H,cAEbrgI,IAASs1H,GACT18H,EAAU,GAAI4pB,IAAQ0jF,OAAO,GAAIA,KAC7B31F,GAAMq0B,EAAIk0B,GAAKwrD,EAAW2I,IAC1B18G,GAAMq0B,EAAIm0B,GAAKn0B,EAAI7qC,SAAW,EAAGkzH,KAClC3I,GAAY3pH,GACRqF,IAASu1H,GAChB38H,EAAUknG,GAAKoS,aAEPttE,EAAIk0B,GAAKwrD,EACT1/E,EAAIm0B,KAGJn0B,EAAIk0B,GACJl0B,EAAIq0B,KAGJr0B,EAAIo0B,GACJp0B,EAAIq0B,KAETt+D,GAAOi0E,QACH5uE,IAASw1H,IAChB58H,EAAU,GAAI4pB,IAAQgoF,UAAU7vG,GAChC/B,EAAQ+uC,OAAO/C,EAAIk0B,GAAIl0B,EAAIm0B,IAAIk6B,OAAOruD,EAAIo0B,GAAIp0B,EAAIq0B,IAClDrgE,EAAQ+uC,OAAO/C,EAAIk0B,GAAIl0B,EAAIq0B,IAAIg6B,OAAOruD,EAAIo0B,GAAIp0B,EAAIm0B,KAElDngE,EAAUknG,GAAKkF,SAASpgE,EAAI+2F,SAAUhhI,GAEtCuqC,GACAtsC,EAAQuiC,UAAUw5F,KAAoB11F,QAAQiG,GAC1Ck0B,EAAOhlC,EACPglC,EAAOjnD,KAGfvZ,EAAQsI,QAAQikC,OAASjkC,EAAQikC,OAC1BvsC,GAtCI,MAwCf+f,cAAe,WAAA,GAIPwsF,GAHAvjB,EAAS9gF,KACTq+H,EAAer+H,KAAKI,QAAQikG,OAC5Bm7B,EAAYx/H,KAAKw/H,aAkBrB,OAfIn7B,GADAg6B,EACSA,GACLzgI,MAAO4hI,EAAU5hI,MACjB+oB,SAAU64G,EAAU74G,SACpBze,OAAQlI,KAAKy8H,YACb+B,OAAQgB,EAAUhB,OAClBC,SAAUe,EAAUf,SACpB5+D,KAAM7/D,KAAKo/H,WAAWvE,SACtBz6H,QAASJ,KAAK0/H,gBACd1C,aAAc,WACV,MAAOl8C,GAAO2+C,gBAIbz/H,KAAKy/H,cAItBC,cAAe,WACX,GAAIt/H,GAAUJ,KAAKI,OACnB,QACI8gG,WAAY9gG,EAAQ8gG,WACpBg+B,OAAQ9+H,EAAQ8+H,OAChB17F,OAAQpjC,EAAQojC,OAChBozD,QAASx2F,EAAQw2F,QACjB13F,KAAMkB,EAAQlB,KACdnB,KAAMqC,EAAQpH,MACdwK,QAASpD,EAAQoD,UAGzBw5H,aAAc,WACVh9H,KAAKqkG,OAASrkG,KAAK6X,mBAG3Bw0G,EAAkB8J,IACdj3H,KAAMs1H,GACNlnC,MAAOlhB,GACPuhB,OAAQvhB,KAERgqD,GAAS,SACTC,GAAS,SACTC,IACAqJ,OACIzgI,KAAMk3H,GACNhyF,SAAU,EACVsuD,QAEQtzF,OAAQ,EACRu2E,MAAOu+C,GACPhsG,QAAS,IAGT9oB,OAAQ,IACRu2E,MAAOu+C,GACPhsG,QAAS,KAGT9oB,OAAQ,EACRu2E,MAAOu+C,GACPhsG,QAAS,KAIrB03G,YACI1gI,KAAMm3H,GACN3jC,QAEQtzF,OAAQ,EACRu2E,MAAOu+C,GACPhsG,QAAS,MAGT9oB,OAAQ,IACRu2E,MAAOu+C,GACPhsG,QAAS,IAGT9oB,OAAQ,IACRu2E,MAAOu+C,GACPhsG,QAAS,OAIrB23G,cACI3gI,KAAMm3H,GACN3jC,QAEQtzF,OAAQ,IACRu2E,MAAOu+C,GACPhsG,QAAS,MAGT9oB,OAAQ,IACRu2E,MAAOu+C,GACPhsG,QAAS,KAGT9oB,OAAQ,IACRu2E,MAAOu+C,GACPhsG,QAAS,KAIrB43G,cACI5gI,KAAMm3H,GACN0J,YAAY,EACZrtC,QAEQtzF,OAAQ,EACRu2E,MAAOu+C,GACPhsG,QAAS,IAGT9oB,OAAQ,GACRu2E,MAAOu+C,GACPhsG,QAAS,KAGT9oB,OAAQ,IACRu2E,MAAOu+C,GACPhsG,QAAS,KAIrB83G,YACI9gI,KAAMm3H,GACN0J,YAAY,EACZrtC,QAEQtzF,OAAQ,EACRu2E,MAAOu+C,GACPhsG,QAAS,KAGT9oB,OAAQ,IACRu2E,MAAOu+C,GACPhsG,QAAS,MAGT9oB,OAAQ,IACRu2E,MAAOu+C,GACPhsG,QAAS,MAGT9oB,OAAQ,IACRu2E,MAAOu+C,GACPhsG,QAAS,MAGT9oB,OAAQ,IACRu2E,MAAOu+C,GACPhsG,QAAS,MAGT9oB,OAAQ,IACRu2E,MAAOu+C,GACPhsG,QAAS,KAIrB+3G,cACI/gI,KAAMm3H,GACN/9D,QACI,GACA,IAEJlgE,OAAQ,KA+BZm+H,GAAcN,GAAav1H,QAC3BC,KAAM,SAAUP,GACZ61H,GAAahyH,GAAGtD,KAAKwH,KAAKnI,KAAMI,EAChC,IAAI8/H,GAAclgI,KAAKI,OACvB8/H,GAAYlnI,MAAQqZ,SAAS6tH,EAAYlnI,MAAO,IAChDknI,EAAYjnI,OAASoZ,SAAS6tH,EAAYjnI,OAAQ,IAClD+G,KAAKmgI,cAETjnB,OAAQ,WAAA,GAMKp+G,GALLylF,EAAMvgF,KACNI,EAAUmgF,EAAIngF,QACdzF,EAAW4lF,EAAI5lF,SACfylI,EAAa,GAAIxT,IAAI,EAAG,EAAGxsH,EAAQpH,MAAOoH,EAAQnH,OAEtD,KADA+G,KAAK8jC,IAAMs8F,EAAW9F,MAAMl6H,EAAQojC,QAC3B1oC,EAAI,EAAGA,EAAIH,EAAShD,OAAQmD,IACjCH,EAASG,GAAGo+G,OAAOknB,GACnBA,EAAazT,EAAQyT,EAAYzlI,EAASG,GAAGgpC,MAAQ,GAAI8oF,KAGjEoQ,aAAc,WACVh9H,KAAKqkG,OAAS,GAAI3S,IAClB1xF,KAAKqgI,oBAETA,iBAAkB,WAAA,GACVjgI,GAAUJ,KAAKI,QACf8+H,EAAS9+H,EAAQ8+H,WACjBp7F,EAAM9jC,KAAK8jC,IAAI3nC,QAAQ5E,IAAI6I,EAAQojC,QAAQ82F,MAAM4E,EAAOlmI,OACxDkoG,EAAalC,GAAKkF,SAASpgE,EAAI+2F,UAC/B37B,QACIvpB,MAAOupD,EAAOlmI,MAAQkmI,EAAOvpD,MAAQ,GACrC38E,MAAOkmI,EAAOlmI,MACdsoH,SAAU4d,EAAO5d,UAErBriB,MACItpB,MAAOv1E,EAAQ8gG,WACfh5E,QAAS9nB,EAAQ8nB,SAErBmc,YAEJrkC,MAAKqkG,OAAO7/D,OAAO08D,IAEvBs7B,QAAS,WACL,MAAOx8H,OAEX8+H,eAAgB,SAAU1+H,GAAV,GAIRkgI,GAII1B,EAPJuB,EAAYngI,KAAKmgI,UACjBI,EAAW3+C,GAAUxhF,GACrBqyF,EAAW6jC,GAAUl2H,EAAQqyF,SAiBjC,OAfI0tC,GAAUI,GACVD,EAAkBH,EAAUI,IAExB3B,EAAkBnoI,EAAEiK,UAAW+xF,EAAUryF,GACvB,WAAlBqyF,EAASvzF,KACTohI,EAAkB,GAAI5+G,IAAQyiF,eAAey6B,IAEzCx+H,EAAQ4sH,cACR4R,EAAgBlsC,MAAQm6B,EAAiB+R,IAE7C0B,EAAkB,GAAI5+G,IAAQ0oF,eAAew0B,GAC7C0B,EAAgBP,WAAattC,EAASstC,cAAe,GAEzDI,EAAUI,GAAYD,GAEnBA,KAGfjU,EAAkBkK,IACdv9H,MAAOg7H,GACP/6H,OAAQg7H,GACR/yB,WAAYgzB,GACZgL,QACIvpD,MAAOw+C,GACPn7H,MAAO,GAEXwqC,OAAQooF,EAAW,GACnBvnF,YAcAmyF,GAAeP,GAAav1H,QAC5BC,KAAM,SAAUP,GACZ61H,GAAahyH,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAChCJ,KAAKwgI,kBAETA,eAAgB,WACZ,GAAIpgI,GAAUJ,KAAKI,OACfA,GAAQk8B,UACRt8B,KAAK+4G,UAAYgb,GACjB/zH,KAAKygI,YAAcnvH,GACnBtR,KAAK0gI,eAAiBlkG,GACtBx8B,KAAK2gI,iBAAmBpkG,GACxBv8B,KAAK4gI,aAAexgI,EAAQm4G,QAC5Bv4G,KAAK6gI,eAAiBzgI,EAAQ0gI,WAE9B9gI,KAAK+4G,UAAYznG,GACjBtR,KAAKygI,YAAc1M,GACnB/zH,KAAK0gI,eAAiBnkG,GACtBv8B,KAAK2gI,iBAAmBnkG,GACxBx8B,KAAK4gI,aAAexgI,EAAQ0gI,SAC5B9gI,KAAK6gI,eAAiBzgI,EAAQm4G,UAGtCW,OAAQ,SAAU2gB,GACd75H,KAAK8jC,IAAM+1F,EAAU19H,QACrB6D,KAAK+gI,kBAETA,eAAgB,WAAA,GAeJxnB,GACKI,EACDllE,EACAusF,EACAxnB,EACAynB,EACKtjI,EACD7F,EACAopI,EACAC,EACAC,EAxBZtgD,EAAS9gF,KACTugF,EAAMvgF,KACN8jC,EAAMy8C,EAAIz8C,IACV28F,EAAclgD,EAAIkgD,YAClB1nB,EAAYx4B,EAAIw4B,UAChB4nB,EAAmBpgD,EAAIogD,iBACvBD,EAAiBngD,EAAImgD,eACrBtnB,EAAQp5G,KAAKqhI,eACb7gF,EAAS44D,EAAM54D,OACf24D,EAAaC,EAAMD,WACnBmoB,EAAuBloB,EAAMkoB,qBAC7BC,EAAc/gF,EAAO7oD,OACrB6pI,EAAc19F,EAAIi1E,EAAY,GAAK/4G,KAAKqtF,WAAW8rB,EAAYr1E,EAAI48F,KACvE,IAAIa,EAAa,CAEb,IADIhoB,EAAaioB,EACR7nB,EAAW,EAAGA,EAAW4nB,EAAa5nB,IAAY,CAKvD,IAJIllE,EAAQ+L,EAAOm5D,GACfqnB,EAAgBvsF,EAAMusF,cACtBxnB,EAAe11E,EAAI28F,EAAc,GACjCQ,EAAqBD,EAAcrpI,OAC9BgG,EAAM,EAAGA,EAAMsjI,EAAoBtjI,IACpC7F,EAAUkpI,EAAcrjI,GACxBujI,EAAiBpgD,EAAOjY,YAAY/wE,GACpCqpI,EAAoB5nB,EAAaz4B,EAAOuM,WAAW6zC,EAAeR,GAAiBjsF,EAAMjkC,WACzF4wH,EAAa,GAAIxU,IACrBwU,EAAWroB,EAAY,GAAKooB,EAC5BC,EAAWroB,EAAY,GAAKooB,EAAoBD,EAAeR,GAC/DU,EAAWX,EAAc,GAAKjnB,EAC9B4nB,EAAWX,EAAc,GAAKjnB,EAAe0nB,EAAeP,GAC5D7oI,EAAQohH,OAAOkoB,GACf5nB,GAAgB0nB,EAAeP,GAAoB7/C,EAAO+/C,cAE9DtnB,IAAc9kE,EAAMjkC,UAAYswE,EAAO8/C,aAE3C98F,EAAIi1E,EAAY,GAAKyoB,EACrB19F,EAAIi1E,EAAY,GAAKyoB,EAAcroB,EACnCr1E,EAAI28F,EAAc,GAAK38F,EAAI28F,EAAc,GAAKa,IAGtDj0C,WAAY,SAAUtvF,EAAMqwF,GAAhB,GACJn/E,GAAQ,EACRq+E,EAAQttF,KAAKI,QAAQktF,KAMzB,OALIA,KAAUhrE,IAASgrE,IAAUhhB,GAC7Br9D,EAAQm/E,EAAUrwF,EACXuvF,IAAUlhB,KACjBn9D,GAASm/E,EAAUrwF,GAAQ,GAExBkR,GAEXoyH,aAAc,WAAA,GAiBD1jI,GACD7F,EAIAopI,EArBJpgD,EAAS9gF,KACTugF,EAAMvgF,KACN8jC,EAAMy8C,EAAIz8C,IACVnpC,EAAW4lF,EAAI5lF,SACfgmI,EAAmBpgD,EAAIogD,iBACvBD,EAAiBngD,EAAImgD,eACrBG,EAAiBtgD,EAAIsgD,eACrBD,EAAergD,EAAIqgD,aACnBxyC,EAAU3+E,GAAMq0B,EAAI68F,MACpB7D,EAAgBniI,EAAShD,OACzB6oD,KACAhwC,EAAY,EACZixH,EAAoB,EACpBtoB,EAAa,EACbmoB,EAAuB,EACvBN,IACJ,KAASrjI,EAAM,EAAGA,EAAMm/H,EAAen/H,IAC/B7F,EAAU6C,EAASgD,GAClB7F,EAAQgsC,KACThsC,EAAQohH,OAAOp1E,GAEfo9F,EAAiBpgD,EAAOjY,YAAY/wE,GACpCgpF,EAAO1gF,QAAQvH,MAAQ4W,GAAMgyH,EAAoBZ,EAAiBK,EAAeP,IAAqBvyC,IACtG5tC,EAAO14C,MACHk5H,cAAeA,EACfxwH,UAAWA,EACXixH,kBAAmBA,IAEvBH,EAAuB1iI,KAAKnG,IAAI6oI,EAAsBG,GACtDtoB,GAAcynB,EAAepwH,EAC7BA,EAAY,EACZixH,EAAoB,EACpBT,MAEJxwH,EAAY5R,KAAKnG,IAAI+X,EAAW0wH,EAAeR,IAC3Ce,EAAoB,IACpBA,GAAqBZ,GAEzBY,GAAqBP,EAAeP,GACpCK,EAAcl5H,KAAKhQ,EASvB,OAPA0oD,GAAO14C,MACHk5H,cAAeA,EACfxwH,UAAWA,EACXixH,kBAAmBA,IAEvBH,EAAuB1iI,KAAKnG,IAAI6oI,EAAsBG,GACtDtoB,GAAc3oG,GAEVgwC,OAAQA,EACR24D,WAAYA,EACZmoB,qBAAsBA,IAG9Bz4D,YAAa,SAAU/wE,GACnB,OACIkB,MAAOlB,EAAQgsC,IAAI9qC,QACnBC,OAAQnB,EAAQgsC,IAAI7qC,WAG5B+jI,aAAc,eAGlB3Q,EAAkBmK,IACdl6F,UAAU,EACVzjC,MAAM,EACNioI,SAAU,EACVvoB,QAAS,IAETke,GAAc/0G,GAAQmoF,KACtBA,GAAOosB,GAAav1H,QACpBC,KAAM,SAAU20D,EAASl1D,GACrB61H,GAAahyH,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAChCJ,KAAKs1D,QAAUA,EACft1D,KAAKk5G,OAAO,GAAI0T,MAEpB1T,OAAQ,SAAU2gB,GAAV,GACAz5H,GAAUJ,KAAKI,QACfrC,EAAOqC,EAAQrC,KAAOs3E,GAAK2M,YAAYhiF,KAAKs1D,SAAWyjC,KAAM34F,EAAQ24F,MACzE/4F,MAAK+hF,SAAWhkF,EAAKgkF,SACrB/hF,KAAK8jC,IAAM,GAAI8oF,IAAIiN,EAAU7hE,GAAI6hE,EAAU5hE,GAAI4hE,EAAU7hE,GAAKj6D,EAAK/E,MAAO6gI,EAAU5hE,GAAKl6D,EAAK9E,SAElG+jI,aAAc,WAAA,GACNz8C,GAAMvgF,KAAKI,QACX24F,EAAOxY,EAAIwY,KACXpjB,EAAQ4K,EAAI5K,MACZztD,EAAUq4D,EAAIr4D,QACdk2F,EAAS79B,EAAI69B,MACjBp+G,MAAKqkG,OAAS,GAAIoyB,IAAYz2H,KAAKs1D,QAASt1D,KAAK8jC,IAAI+2F,SAAS5pB,WAC1DlY,KAAMA,EACNkG,MACItpB,MAAOA,EACPztD,QAASA,GAEbk2F,OAAQA,OAIpBiO,EAAkBxiB,IACd9Q,KAAM4Q,GACNh0B,MAAOw+C,KAOPuC,GAAmB,MACnBC,GAAUT,GAAWx1H,QACrBC,KAAM,SAAU20D,EAASl1D,GACrB81H,GAAWjyH,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAC9BJ,KAAKs1D,QAAUA,EACft1D,KAAK0hI,iBACD1hI,KAAKI,QAAQuhI,eAAgB,GAC7B3hI,KAAKk5G,OAAO,GAAI0T,MAGxB8U,eAAgB,WAAA,GAcHE,GACDnsG,EAdJr1B,EAAUJ,KAAKI,QACf02C,GAAc92C,KAAKs1D,QAAZrrD,IAAqBjT,MAAM0/H,IAClCmL,EAAe,GAAIrL,KACnBl6F,UAAU,EACVgxD,MAAOltF,EAAQktF,MACfz0F,MAAM,IAENipI,EAAclnI,MAAewF,GAC7B8nB,QAAS,EACT0lD,UAAW,MAIf,KAFA5tE,KAAK6nB,UAAYg6G,EACjB7hI,KAAKwkC,OAAOq9F,GACHD,EAAS,EAAGA,EAAS9qF,EAAKn/C,OAAQiqI,IACnCnsG,EAAO,GAAIo0E,IAAK/yD,EAAK8qF,GAAQtvG,OAAQwvG,GACzCD,EAAar9F,OAAO/O,IAG5ByjF,OAAQ,SAAU2gB,GAAV,GAKIkI,GAOA19B,EASI7gE,EACAM,EArBR1jC,EAAUJ,KAAKI,QACf4hI,EAAW5hI,EAAQikG,MACvBrkG,MAAK6nB,UAAUznB,QAAQktF,MAAQltF,EAAQktF,MACnC00C,IAAahiI,KAAKiiI,YACdF,EAAYlI,EACXkI,EAAUjH,YACX96H,KAAKiiI,YAAa,EAClBjiI,KAAKk5G,OAAO6oB,GACZ/hI,KAAKiiI,YAAa,EAClBF,EAAY/hI,KAAK8jC,KAEjBugE,EAASrkG,KAAKqkG,OAAS29B,EAAShiI,KAAKkiI,cAAcH,IACnD19B,IACA09B,EAAY7U,EAAU7oB,EAAOnX,eAAiB,GAAIH,KAClDsX,EAAOjkG,QAAQikC,OAASjkC,EAAQikC,QAEpCrkC,KAAK8jC,IAAM9jC,KAAKq/H,WAAar/H,KAAKo/H,WAAa2C,IAE/C7L,GAAWjyH,GAAGi1G,OAAO/wG,KAAKnI,KAAM65H,GAC5Bz5H,EAAQgkC,WACJZ,EAASooF,EAAWxrH,EAAQojC,QAC5BM,EAAM9jC,KAAK8jC,IAAIw2F,MAAM92F,GACzBxjC,KAAK65H,UAAYA,EACjB75H,KAAKmiI,UAAYr+F,EAAI3nC,QACrB2nC,EAAM9jC,KAAKm+B,SACX2F,EAAIrG,UAAU+F,EAAO9qC,KAAO8qC,EAAO7qC,MAAO6qC,EAAOlkC,IAAMkkC,EAAO5qC,QAC9DoH,KAAKoiI,WAAat+F,EAAI3nC,QACtB2nC,EAAIvsC,IAAIisC,MAIpBw5F,aAAc,WAAA,GAWFl5F,GAVJ1jC,EAAUJ,KAAKI,OACdA,GAAQoD,UAGbxD,KAAKqkG,OAAS,GAAI3S,KACdr3D,UAAWr6B,KAAKqiI,oBAChBh+F,OAAQjkC,EAAQikC,OAChBk5F,OAAQn9H,EAAQm9H,SAEhBv9H,KAAKs/H,WACDx7F,EAAMk7D,GAAKkF,SAASlkG,KAAKo/H,WAAWvE,SAAU76H,KAAKu/H,eACvDv/H,KAAKqkG,OAAO7/D,OAAOV,MAG3Bi5F,aAAc,WACV,GAAI/8H,KAAKI,QAAQikG,OAAQ,CACrB,GAAIA,GAASrkG,KAAKqkG,MACdA,KAAW5gB,GAAQ4gB,EAAOjkG,QAAQm9H,UAClCl5B,EAAOjkG,QAAQm9H,OAASv9H,KAAKI,QAAQm9H,QAEzCv9H,KAAKi9H,YACLj9H,KAAKk9H,sBAELhH,IAAWjyH,GAAG84H,aAAa50H,KAAKnI,OAGxC0/H,cAAe,WACX,GAAIt/H,GAAUJ,KAAKI,OACnB,QACI8gG,WAAY9gG,EAAQ8gG,WACpBg+B,OAAQ9+H,EAAQ8+H,OAChBvpD,MAAOv1E,EAAQu1E,MACfojB,KAAM34F,EAAQ24F,KACdv1D,OAAQpjC,EAAQojC,OAChBozD,QAASx2F,EAAQw2F,QACjBpzF,QAASpD,EAAQoD,UAGzB0+H,cAAe,SAAUrI,GACrB,GAAI/4C,GAAS9gF,IACb,QACIy1B,KAAMz1B,KAAKs1D,QACXuK,KAAMg6D,EAAUgB,SAChB3yH,OAAQlI,KAAKy8H,YACbr8H,QAASJ,KAAK0/H,gBACd1C,aAAc,WAIV,MAHAl8C,GAAOmhD,YAAa,EACpBnhD,EAAOo4B,OAAO2gB,GACd/4C,EAAOmhD,YAAa,EACbnhD,EAAOwhD,sBAI1BA,iBAAkB,WACdtiI,KAAKg9H,eACLh9H,KAAK49G,gBACL,IAAIvZ,GAASrkG,KAAKqkG,MAElB,cADOrkG,MAAKqkG,OACLA,GAEXlmE,OAAQ,WACJ,GAAI/9B,GAAUJ,KAAKI,OAInB,OAHAJ,MAAK8jC,IAAI3F,OAAO/9B,EAAQgkC,UACxBpkC,KAAKstF,MAAMttF,KAAK65H,UAAW9F,GAAG3zH,EAAQktF,OACtCttF,KAAKstF,MAAMttF,KAAK65H,UAAWvoH,GAAGlR,EAAQutF,QAC/B3tF,KAAK8jC,KAEhBu+F,kBAAmB,WAAA,GAKX9hD,GACAwH,EACAC,EACAu6C,EAPAn+F,EAAWpkC,KAAKI,QAAQgkC,QAC5B,OAAKA,IAGDm8C,EAAMvgF,KAAKmiI,UAAU7pE,SACrByvB,EAAKxH,EAAIjtD,EACT00D,EAAKzH,EAAIlvE,EACTkxH,EAAYviI,KAAKoiI,WAAW9pE,SACzBu7D,KAAoBp2F,UAAU8kG,EAAUjvG,EAAIy0D,EAAIw6C,EAAUlxH,EAAI22E,GAAI7pD,OAAOiG,GAC5E2jD,EACAC,KARO,QAYf4uC,GAAQX,GAAav1H,QACrBC,KAAM,SAAUP,GACZ61H,GAAahyH,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAChCJ,KAAKwkC,OAAO,GAAImyF,IAAQ32H,KAAKI,QAAQq1B,KAAMh/B,EAAEiK,UAAWV,KAAKI,SAAWutF,OAAQ3tF,KAAKI,QAAQpG,cAEjGk/G,OAAQ,SAAU2gB,GACd5D,GAAahyH,GAAGi1G,OAAO/wG,KAAKnI,KAAM65H,GAClC75H,KAAK8jC,IAAIk2F,OAAOH,EAAW9F,OAGnC6C,GAAM4L,WAAa,SAAUpiI,EAASzG,EAAQ8oI,GAA3B,GAMX15F,GALA25F,EAAetiI,CAUnB,OATuB,gBAAZA,KACPsiI,GAAiBjtG,KAAMr1B,IAE3BsiI,EAAejsI,EAAEiK,QAAS8C,SAAS,GAAQi/H,EAAgBC,GAEvDA,GAAgBA,EAAal/H,SAAWk/H,EAAajtG,OACrDsT,EAAQ,GAAI6tF,IAAM8L,GAClB/oI,EAAO6qC,OAAOuE,IAEXA,GAEXsjF,EAAkBuK,IACdjhD,MAAOw+C,GACPn6H,SAAUqyE,GACVihB,MAAOlhB,GACP5oC,OAAQooF,EAAW,GACnBh1B,QAASg1B,EAAW,KAEpBiL,GAAYF,GAAQj2H,QACpBC,KAAM,SAAU/C,EAAO63B,EAAMtjB,EAAOwU,EAAUvmB,GAC1Cu2H,GAAQ1yH,GAAGtD,KAAKwH,KAAKnI,KAAMy1B,EAAMr1B,GACjCJ,KAAKy1B,KAAOA,EACZz1B,KAAKpC,MAAQA,EACboC,KAAKmS,MAAQA,EACbnS,KAAK2mB,SAAWA,EAChB3mB,KAAKk5G,OAAO,GAAI0T,MAEpBsV,cAAe,SAAUrI,GACrB,GAAI71H,GAAU2yH,GAAQ1yH,GAAGi+H,cAAc/5H,KAAKnI,KAAM65H,EAKlD,OAJA71H,GAAQpG,MAAQoC,KAAKpC,MACrBoG,EAAQ2iB,SAAW3mB,KAAK2mB,SACxB3iB,EAAQ+E,OAAS/I,KAAKI,QAAQ2I,OAC9B/E,EAAQwH,QAAUxL,KAAKI,QAAQoL,QACxBxH,GAEXkd,MAAO,SAAUle,EAAQiF,GACrBjF,EAAOgF,QAAQosH,IACXt8H,QAAS8sF,GAAa38E,GACtBrK,MAAOoC,KAAKpC,MACZ63B,KAAMz1B,KAAKy1B,KACXtjB,MAAOnS,KAAKmS,MACZwU,SAAU3mB,KAAK2mB,SACfmN,KAAM9zB,KAAKrG,OAAOyG,WAG1B+9B,OAAQ,WAAA,GAEI2F,GACAzJ,CAKR,OAPIr6B,MAAKI,QAAQuiI,gBAAkBv2D,IAC3BtoC,EAAM9jC,KAAKmiI,UAAUtH,SACrBxgG,EAAYr6B,KAAKqiI,oBACrBriI,KAAK8jC,IAAMopF,EAAUppF,EAAImoD,KAAK5xD,EAAUisD,YAExCqwC,GAAQ1yH,GAAGk6B,OAAOh2B,KAAKnI,MAEpBA,KAAK8jC,KAEhBu+F,kBAAmB,WAAA,GASXO,GACA9+F,EACA+7B,EACAgjE,EACAC,EACAC,EACAC,EACA/xB,EACAC,EACA9kB,EACA+kB,EACAixB,EACA3kG,EAEAwlG,EACAC,EACA71C,EAAY81C,EAWZC,EAnCAhjI,EAAUJ,KAAKI,QACfgkC,EAAWhkC,EAAQgkC,QACvB,OAAKA,GAGDhkC,EAAQuiI,gBAAkBv2D,GACnBuqD,GAAQ1yH,GAAGo+H,kBAAkBl6H,KAAKnI,OAEzC4iI,EAAiB/O,KAAoB11F,OAAOiG,GAAUkiD,SACtDxiD,EAAM9jC,KAAKmiI,UAAUtH,SACrBh7D,EAAO7/D,KAAK65H,UAAUgB,SACtBgI,EAAiBziI,EAAQyiI,gBAAkBx2D,GAC3Cy2D,EAAYD,IAAmBx2D,IAAOw2D,IAAmBv2D,GAASynD,GAAIziH,GACtEyxH,EAAeF,IAAmBx2D,IAAOw2D,IAAmBv2D,GAASh7D,GAAIyiH,GACzEiP,EAAaH,IAAmBx2D,IAAOw2D,IAAmBzgH,GAAOy9C,EAAKp8B,OAASo8B,EAAKusB,cACpF6kB,EAAUntE,EAAImtE,UAAU3mB,cAAcs4C,GACtC1xB,EAAWptE,EAAIotE,WAAW5mB,cAAcs4C,GACxCx2C,EAActoD,EAAIsoD,cAAc9B,cAAcs4C,GAC9CzxB,EAAartE,EAAIqtE,aAAa7mB,cAAcs4C,GAC5CR,EAAar1C,GAAKqkB,WAAWH,EAASC,EAAU9kB,EAAa+kB,GAC7D1zE,KACJA,EAAUslG,GAAgBljE,EAAKp8B,OAAOs/F,GAAgBX,EAAW3+F,OAAOs/F,GACpEE,EAAerkI,KAAKC,IAAIoyG,EAAQ8xB,GAAgBtlG,EAAUslG,GAAgBC,EAAWD,IACrFG,EAAgBtkI,KAAKC,IAAIqyG,EAAS6xB,GAAgBtlG,EAAUslG,GAAgBC,EAAWD,IAEvFtzH,GAAMwzH,EAAcrS,MAAuBnhH,GAAMyzH,EAAetS,KAChEvjC,EAAa4jB,EACbkyB,EAAWjyB,GACJgyB,EAAgBD,GACvB51C,EAAa6jB,EACbiyB,EAAW/2C,IAEXiB,EAAa4jB,EACbkyB,EAAWhyB,GAEXiyB,EAAc/1C,EAAWy1C,IAAcK,EAASL,GAAaz1C,EAAWy1C,IAAc,EAC1FrlG,EAAUqlG,GAAajjE,EAAKvH,SAASwqE,GAAaM,EAC3CvP,KAAoBp2F,UAAUA,EAAUnK,EAAGmK,EAAUpsB,GAAG8sB,OAAOiG,IAlC3D,QAqCnBioF,EAAkBwK,IAAa8K,aAAa,IACxC7K,GAAoB,EACpBC,GAAsB,OACtBC,GAAOd,GAAWx1H,QAClBC,KAAM,SAAUsvC,EAAQ7vC,EAASw8H,GAC7B1G,GAAWjyH,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAC9BJ,KAAKiwC,OAASA,EACdjwC,KAAK48H,aAAeA,EACpB58H,KAAKuI,UAETzH,KAAM,WACFd,KAAKI,QAAQoD,SAAU,GAE3B2+B,KAAM,WACFniC,KAAKI,QAAQoD,SAAU,GAE3B+E,OAAQ,WAAA,GAGI8tC,GACAgtF,EACAv/F,EACA/lC,EACA03B,EACAz8B,EAAOC,EAEHqqI,EAsBJjgD,EA/BJjjF,EAAUJ,KAAKI,OACfA,GAAQoD,UACJ6yC,EAAQj2C,EAAQi2C,MAChBgtF,EAAOjjI,EAAQijI,KACfv/F,EAAM,GAAI8oF,IACV7uH,EAAOslI,EAAKtlI,KACZ03B,EAAOz1B,KAAKiwC,OAAOxa,KAEnBguD,GAAQptC,IAAUA,EAAM7yC,UACpB8/H,EAAexX,EAAYz1E,GAC3BitF,EACA7tG,EAAO6tG,EAAatjI,KAAKiwC,QAClBoG,EAAMttC,SACb0sB,EAAOz1B,KAAK48H,aAAa7zH,OAAO0vH,KAAKpiF,EAAMttC,OAAQ0sB,IAElD4gB,EAAMs/B,QACPt/B,EAAMs/B,MAAQt/B,EAAMr8C,WAAa46H,GAASmC,GAAsBsM,EAAKniC,YAEzElhG,KAAKq2C,MAAQ,GAAIsgF,IAAQlhG,EAAM76B,MAAey7C,IAC1CA,EAAMr8C,WAAa46H,IAAWnxC,GAAQ1lF,KAClCslI,EAAKnkI,OAASs1H,GACdz2H,EAAOa,KAAKnG,IAAIuH,KAAKq2C,MAAMvS,IAAI9qC,QAASgH,KAAKq2C,MAAMvS,IAAI7qC,WAEvDD,EAAQgH,KAAKq2C,MAAMvS,IAAI9qC,QACvBC,EAAS+G,KAAKq2C,MAAMvS,IAAI7qC,UAE5B6qC,EAAIjrC,KAAKmH,KAAKq2C,MAAMvS,OAG5Bu/F,EAAKrqI,MAAQA,GAAS+E,GAAQ+4H,GAC9BuM,EAAKpqI,OAASA,GAAU8E,GAAQ+4H,GAC5BzzC,EAAS,GAAI8yC,IAAav7H,MAAeyoI,IAC7CrjI,KAAKqjF,OAASA,EACdrjF,KAAKwkC,OAAO6+C,GACRrjF,KAAKq2C,OACLr2C,KAAKwkC,OAAOxkC,KAAKq2C,OAErBgtC,EAAO61B,OAAO,GAAI0T,KAClB5sH,KAAKujI,WAAaz/F,EAAIjrC,KAAKwqF,EAAOv/C,OAG1Co1E,OAAQ,SAAU2gB,GAAV,GAUIpM,GAAW3pF,EAAKu7F,EATpB9+C,EAAMvgF,KACNI,EAAUmgF,EAAIngF,QACdi2C,EAAQkqC,EAAIlqC,MACZgtC,EAAS9C,EAAI8C,OACbkgD,EAAahjD,EAAIgjD,WACjBjrE,EAASuhE,EAAUvhE,SACnB3gE,EAASyI,EAAQ4mG,KAAKrvG,OACtBqC,EAAWoG,EAAQpG,QACnBoG,GAAQoD,UAEJP,EAAQjJ,GACJooB,GACAE,KAEAtoB,IAAaooB,IACbi9G,EAAakE,EAAWtJ,QAAQJ,EAAW7/H,GAAUyjC,WAAW9lC,EAAQkiI,EAAUvhE,SAASjnD,EAAIkyH,EAAWjrE,SAASjnD,GAC/GjR,EAAQ4mG,KAAKxjG,UACbiqH,GACIoM,EAAU7hE,GACVM,EAAOjnD,GAEXrR,KAAKwjI,YACD/V,GAEI4R,EAAWnnE,GACXI,EAAOjnD,IAGfyyB,EAAMu7F,EAAWljI,QAAQ29H,UAAUrM,MAGvC4R,EAAakE,EAAWtJ,QAAQJ,EAAW7/H,GAAUyjC,UAAU9lC,EAAQkiI,EAAUvhE,SAASjnD,EAAIkyH,EAAWjrE,SAASjnD,GAC9GjR,EAAQ4mG,KAAKxjG,UACbiqH,GACIoM,EAAU3hE,GACVI,EAAOjnD,GAEXrR,KAAKwjI,YACD/V,GAEI4R,EAAWrnE,GACXM,EAAOjnD,IAGfyyB,EAAMu7F,EAAWljI,QAAQ29H,UAAUrM,KAIvCzzH,IAAasyE,IACb+yD,EAAakE,EAAWtJ,QAAQJ,EAAW7/H,GAAUyjC,UAAUo8F,EAAUvhE,SAAShlC,EAAIiwG,EAAWjrE,SAAShlC,EAAG37B,GACzGyI,EAAQ4mG,KAAKxjG,UACbiqH,GACIn1D,EAAOhlC,EACPumG,EAAU1hE,IAEdn4D,KAAKwjI,YACD/V,GAEIn1D,EAAOhlC,EACP+rG,EAAWpnE,KAGnBn0B,EAAMu7F,EAAWljI,QAAQ29H,UAAUrM,MAGvC4R,EAAakE,EAAWtJ,QAAQJ,EAAW7/H,GAAUyjC,UAAUo8F,EAAUvhE,SAAShlC,EAAIiwG,EAAWjrE,SAAShlC,GAAI37B,GAC1GyI,EAAQ4mG,KAAKxjG,UACbiqH,GACIn1D,EAAOhlC,EACPumG,EAAU5hE,IAEdj4D,KAAKwjI,YACD/V,GAEIn1D,EAAOhlC,EACP+rG,EAAWlnE,KAGnBr0B,EAAMu7F,EAAWljI,QAAQ29H,UAAUrM,KAI3CpqC,GACAA,EAAO61B,OAAOmmB,GAEdhpF,IACAA,EAAM6iE,OAAOmmB,GACTh8C,IACIjjF,EAAQi2C,MAAMr8C,WAAau6H,IAC3Bl+E,EAAMvS,IAAIm2F,QAAQ52C,EAAOv/C,IAAK9pC,GAElCq8C,EAAM6iE,OAAO7iE,EAAMvS,OAG3B9jC,KAAKq/H,WAAaA,EAClBr/H,KAAK65H,UAAYA,EACjB75H,KAAK8jC,IAAMA,GAAOu7F,IAG1BrC,aAAc,WACV9G,GAAWjyH,GAAG+4H,aAAa70H,KAAKnI,MAChCA,KAAKqkG,OAAOjkG,QAAQm9H,OAASv9H,KAAKI,QAAQm9H,OACtCv9H,KAAKI,QAAQoD,SACbxD,KAAKyjI,cAGb1G,aAAc,WAAA,GACNj8C,GAAS9gF,KACTI,EAAUJ,KAAKI,QACfi+H,EAAej+H,EAAQikG,MACvBjkG,GAAQoD,SAAW66H,GACnBr+H,KAAKqkG,OAASg6B,EAAa5nI,EAAEiK,OAAOV,KAAKiwC,QACrC/nC,OAAQlI,KAAKy8H,YACb58D,KAAM7/D,KAAK65H,UAAUgB,SACrBz6H,SACI8gG,WAAY9gG,EAAQ8gG,WACpBg+B,OAAQ9+H,EAAQ8gG,WAChBmiC,KAAMjjI,EAAQijI,KACdhtF,MAAOj2C,EAAQi2C,MACf2wD,KAAM5mG,EAAQ4mG,KACdhtG,SAAUoG,EAAQpG,SAClBwJ,QAASpD,EAAQoD,SAErBw5H,aAAc,WACVl8C,EAAOk8C,eACPl8C,EAAO88B,gBACP,IAAI8lB,GAAgB5iD,EAAOujB,MAE3B,cADOvjB,GAAOujB,OACPq/B,MAGf1jI,KAAKi9H,aAEL/G,GAAWjyH,GAAG84H,aAAa50H,KAAKnI,OAGxCyjI,WAAY,WAAA,GAGAh8F,GAFJrnC,EAAUJ,KAAKI,QAAQ4mG,IACvBhnG,MAAKwjI,aACD/7F,EAAOu3D,GAAKoS,WAAWpxG,KAAKwjI,YAC5BtkC,QACIvpB,MAAOv1E,EAAQu1E,MACf38E,MAAOoH,EAAQpH,MACfsoH,SAAUlhH,EAAQkhH,YAG1B2J,EAAiBxjF,GACjBznC,KAAKqkG,OAAO7/D,OAAOiD,KAG3BvmB,MAAO,SAAUle,EAAQiF,GACrB,GAAIwgB,GAAOzoB,KAAK2jI,UAAU17H,EACrBjF,GAAOgF,QAAQqsH,GAAY5rG,IAC5BxgB,EAAE9D,kBAGVy/H,MAAO,SAAU5gI,EAAQiF,GACrB,GAAIwgB,GAAOzoB,KAAK2jI,UAAU17H,EACrBjF,GAAOgF,QAAQssH,GAAY7rG,IAC5BxgB,EAAE9D,kBAGV0/H,MAAO,SAAU7gI,GACbA,EAAO8gI,qBAEXH,UAAW,SAAU17H,GACjB,GAAI7H,GAAUJ,KAAKI,OACnB,OAAO3J,GAAEiK,OAAOV,KAAKiwC,QACjBn4C,QAAS8sF,GAAa38E,GACtBwtB,KAAMguD,GAAQrjF,EAAQi2C,OAASj2C,EAAQi2C,MAAM5gB,KAAO,GACpD4uE,OAAQrkG,KAAKqkG,YAIzBgoB,EAAkB2K,IACdqM,MACI7/H,SAAS,EACTtE,KAAMs1H,IAEVn+E,OACIr8C,SAAU46H,GACVpxH,SAAS,EACT8pF,MAAOlhB,GACPuhB,OAAQvhB,IAEZ46B,MAAQxjG,SAAS,GACjBA,SAAS,EACTxJ,SAAUqyE,GACVhoC,OAAQ,IAuCR4yF,GAAOhB,GAAav1H,QACpBC,KAAM,SAAUP,EAASw8H,GACA,SAAjBA,IACAA,EAAe,GAAIvH,KAEvBY,GAAahyH,GAAGtD,KAAKwH,KAAKnI,KAAMI,GAChCJ,KAAK48H,aAAeA,EACf58H,KAAKI,QAAQoD,UACdxD,KAAKI,QAAUxF,MAAeoF,KAAKI,SAC/B2jI,QAAUvgI,SAAS,GACnBwjG,MAAQxjG,SAAS,GACjBggC,OAAQ,EACRwgG,cAAe,EACfC,cAAe,KAGvBjkI,KAAKI,QAAQ8jI,WAAatpI,OACtB+6E,MAAO31E,KAAKI,QAAQ4mG,KAAKrxB,MACzB38E,MAAOgH,KAAKI,QAAQ4mG,KAAKhuG,MACzBwK,QAASxD,KAAKI,QAAQ+jI,gBAAkB5pG,IACzCv6B,KAAKI,QAAQ8jI,YACZnmI,KAAMiC,KAAKI,QAAQ6jI,cACnB32C,MAAOttF,KAAKI,QAAQ+jI,gBAExBnkI,KAAKI,QAAQgkI,WAAaxpI,OACtB+6E,MAAO31E,KAAKI,QAAQ4mG,KAAKrxB,MACzB38E,MAAOgH,KAAKI,QAAQ4mG,KAAKhuG,MACzBwK,QAASxD,KAAKI,QAAQikI,gBAAkB9pG,IACzCv6B,KAAKI,QAAQgkI,YACZrmI,KAAMiC,KAAKI,QAAQ4jI,cACnB12C,MAAOttF,KAAKI,QAAQikI,gBAEnBrkI,KAAKI,QAAQkkI,cACdtkI,KAAKukI,eAETvkI,KAAKwkI,cACLxkI,KAAKykI,eAETC,YAAa,WACT,OACI1yH,IAAKhS,KAAKI,QAAQ2jI,OAAO51F,KACzB11C,IAAKuH,KAAK2kI,gBAGlBJ,aAAc,WAAA,GAcF5lF,GACAva,EASKzmC,EACD04C,EAxBRyqC,EAAS9gF,KACTI,EAAUJ,KAAKI,QACfktF,EAAQltF,EAAQk8B,SAAWha,GAAQ8pD,GACnCw4D,EAAehqI,MAAewF,EAAQ2jI,QACtCz2C,MAAOA,EACPjpD,OAAQjkC,EAAQikC,SAEhB1E,EAAO/gC,KAAKnG,IAAI,EAAGmsI,EAAajlG,KAKpC,IAJA3/B,KAAKrF,SAAWuyB,EAAKltB,KAAKrF,SAAU,SAAUi3B,GAC1C,QAASA,YAAiBilG,OAE9B72H,KAAK+jI,UACDa,EAAaphI,QAWb,IAVIm7C,EAAQ3+C,KAAK0kI,cACbtgG,EAAWwgG,EAAaxgG,SACxBmnF,EAASnnF,KACTwgG,EAAajC,cAAgBv+F,EAASkpD,MACtCs3C,EAAaxgG,SAAWA,EAASilD,OAEP,SAA1Bu7C,EAAaxgG,WACbwgG,EAAaxgG,SAAW,EACxBhkC,EAAQykI,kBAAmB,GAEtBlnI,EAAMghD,EAAM3sC,IAAKrU,EAAMghD,EAAMlmD,IAAKkF,GAAOgiC,EAC1C0W,EAAQyqC,EAAOgkD,gBAAgBnnI,EAAKinI,GACpCvuF,IACAyqC,EAAOt8C,OAAO6R,GACdyqC,EAAOijD,OAAOj8H,KAAKuuC,KAKnC0uF,QAAS,WAAA,GACDxkD,GAAMvgF,KACNI,EAAUmgF,EAAIngF,QACd0jC,EAAMy8C,EAAIz8C,IACVxH,EAAWl8B,EAAQk8B,SACnB4D,EAAS9/B,EAAQ2jI,OAAO7jG,OACxB8kG,EAAQ9kG,EAAS4D,EAAIk0B,GAAKl0B,EAAIo0B,GAC9B+sE,EAAQ/kG,EAAS4D,EAAIq0B,GAAKr0B,EAAIm0B,GAC9BouD,EAAYjmH,EAAQ4mG,KAAKhuG,OAAS,CACtC,OAAOsjC,GAAW,GAAIswF,IAAIoY,EAAOlhG,EAAIm0B,GAAI+sE,EAAOlhG,EAAIq0B,GAAKkuD,GAAa,GAAIuG,IAAI9oF,EAAIk0B,GAAIitE,EAAOnhG,EAAIo0B,GAAKmuD,EAAW4e,IAErHT,YAAa,WAAA,GASDz7F,GARJ3oC,EAAUJ,KAAKI,QACfsiI,EAAe9nI,IACfwpC,SAAUhkC,EAAQk8B,aAAiB,EACnC7G,KAAM,GACN4O,OAAQ,EACR6gG,YAAY,GACb9kI,EAAQ2oC,MACP25F,GAAal/H,SAAWk/H,EAAajtG,OACjCsT,EAAQ,GAAI4tF,IAAQ+L,EAAajtG,KAAMitG,GAC3C1iI,KAAKwkC,OAAOuE,GACZ/oC,KAAK+oC,MAAQA,IAGrB07F,YAAa,WAAA,GAMA3pI,GACDq4C,EAEAgyF,EARJrkD,EAAS9gF,KACTI,EAAUJ,KAAKI,QACfglI,EAAQhlI,EAAQglI,MAChB1+G,EAAQ0+G,EAAM5pI,QAElB,KADAwE,KAAKolI,SACItqI,EAAI,EAAGA,EAAI4rB,EAAM/uB,OAAQmD,IAC1Bq4C,EAAOv4C,MAAewqI,EAAO1+G,EAAM5rB,IACvCq4C,EAAKv1C,MAAQkjF,EAAOukD,eAAelyF,EAAKv1C,OACpCunI,EAAO,GAAInO,KACXp5H,MAAOu1C,EAAKv1C,MACZ63B,KAAM0d,EAAKkD,MAAM5gB,KACjB9O,SAAUwsB,GACXA,EAAM2tC,EAAO87C,cACZuI,EAAK/kI,QAAQoD,UACTigF,GAAQ0hD,EAAK/kI,QAAQpG,UACjBoG,EAAQk8B,WAAar5B,EAAQkiI,EAAK/kI,QAAQpG,UACtCooB,GACAE,KAEJ6iH,EAAK/kI,QAAQpG,SAAWoG,EAAQE,QAAU8hB,GAAOE,GACzCliB,EAAQk8B,UAAar5B,EAAQkiI,EAAK/kI,QAAQpG,UAC9CqyE,GACAC,OAEJ64D,EAAK/kI,QAAQpG,SAAWoG,EAAQE,QAAUgsE,GAASD,IAInD84D,EAAK/kI,QAAQpG,SADboG,EAAQk8B,SACgBl8B,EAAQE,QAAU8hB,GAAOE,GAEzBliB,EAAQE,QAAUgsE,GAASD;AAG3DyU,EAAOt8C,OAAO2gG,GACdrkD,EAAOskD,MAAMt9H,KAAKq9H,KAI9BE,eAAgB,SAAUznI,GACtB,MAAOA,IAEXm/H,aAAc,WACV9G,GAAahyH,GAAG84H,aAAa50H,KAAKnI,MAClCA,KAAKslI,mBAETtI,aAAc,WACV/G,GAAahyH,GAAG+4H,aAAa70H,KAAKnI,MAClCA,KAAKqgI,mBACLrgI,KAAKyjI,cAET8B,gBAAiB,WACb,GAAIC,GAAYxlI,KAAKylI,UAKrB,OAJKD,KACDA,EAAYxlI,KAAKylI,WAAa,GAAI/zC,KAAQrtD,YAC1CrkC,KAAKq9H,aAAar9H,KAAKylI,aAEpBD,GAEXE,YAAa,SAAUC,GAMnB,QAASp9H,GAAOq9H,EAAexY,EAAayY,GAA5C,GAIiB/qI,GAHT6Y,EAAQiyH,EAAcjuI,OACtBgoC,EAAO/gC,KAAKnG,IAAI,EAAG20H,EAAYztF,KACnC,IAAIytF,EAAY5pH,QACZ,IAAS1I,EAAIsyH,EAAYj/E,KAAMrzC,EAAI6Y,EAAO7Y,GAAK6kC,EACvC8jD,GAAQoiD,IAAa/qI,EAAI+qI,IAAa,IAG1CC,EAAgBzY,MAAQntF,EAAS6kG,EAAQ7sE,GAAK6sE,EAAQ7sE,GAAKk1D,EAAYrvH,KACvE+nI,EAAgBxY,MAAQptF,EAAS6kG,EAAQ9sE,GAAKm1D,EAAYrvH,KAAOgnI,EAAQ9sE,GACzE6tE,EAAgB9rI,SAAW4rI,EAAc9qI,GACzC6qI,EAAUnhG,OAAO2oF,EAAe2Y,EAAiB1Y,KAjBpD,GACLhtH,GAAUJ,KAAKI,QACf2kI,EAAU/kI,KAAK+kI,UACf7kG,EAAS9/B,EAAQ2jI,OAAO7jG,OACxB2xF,EAAYzxH,EAAQgkI,WAAW5gI,QAAUpD,EAAQyxH,UAAY,EAC7DiU,GAAoBxpG,SAAUl8B,EAAQk8B,SAgB1C/zB,GAAOvI,KAAK+lI,wBAAyB3lI,EAAQgkI,YAC7C77H,EAAOvI,KAAKgmI,wBAAyB5lI,EAAQ8jI,WAAYrS,EAAYzxH,EAAQmyH,YAEjFkR,WAAY,WAAA,GAKAh8F,GAWAgN,EAfJr0C,EAAUJ,KAAKI,QACf4mG,EAAO5mG,EAAQ4mG,KACf+9B,EAAU/kI,KAAK+kI,SACf/9B,GAAKhuG,MAAQ,GAAKguG,EAAKxjG,UACnBikC,EAAO,GAAIu3D,KACXE,QACIlmG,MAAOguG,EAAKhuG,MACZ28E,MAAOqxB,EAAKrxB,MACZ2rC,SAAUta,EAAKsa,YAGvB75E,EAAKZ,OAAOk+F,EAAQ/sE,GAAI+sE,EAAQ9sE,IAAIk6B,OAAO4yC,EAAQ7sE,GAAI6sE,EAAQ5sE,IAC3D/3D,EAAQ6lI,aACRhb,EAAiBxjF,GAEjBgN,EAAQz0C,KAAKkmI,WAAa,GAAIx0C,IAClCj9C,EAAMjQ,OAAOiD,GACbznC,KAAKqkG,OAAO7/D,OAAOiQ,GACnBz0C,KAAK0lI,YAAYjxF,KAGzB0xF,kBAAmB,WAAA,GACX/lI,GAAUJ,KAAKI,QACfgmI,EAAW,CAQf,OAPIhmI,GAAQgkI,WAAW5gI,SAAWpD,EAAQ8jI,WAAW1gI,QACjD4iI,EAAWxnI,KAAKnG,IAAI2H,EAAQgkI,WAAWrmI,KAAMqC,EAAQ8jI,WAAWnmI,MACzDqC,EAAQgkI,WAAW5gI,QAC1B4iI,EAAWhmI,EAAQgkI,WAAWrmI,KACvBqC,EAAQ8jI,WAAW1gI,UAC1B4iI,EAAWhmI,EAAQ8jI,WAAWnmI,MAE3BqoI,GAEX/F,iBAAkB,WAAA,GACV9/C,GAAMvgF,KACNI,EAAUmgF,EAAIngF,QACd0jC,EAAMy8C,EAAIz8C,IACVo9D,EAAa9gG,EAAQ8gG,UACrBA,KACAlhG,KAAKqmI,gBAAkBrnC,GAAKkF,SAASpgE,EAAI+2F,UACrC57B,MAAQtpB,MAAOurB,GACfhC,OAAQ,OAEZl/F,KAAKqkG,OAAO7/D,OAAOxkC,KAAKqmI,mBAGhCf,gBAAiB,WAAA,GAST7wF,GACA6xF,EAGK3oI,EACDw1C,EACAozF,EAAgBC,EASZC,EAOAh/F,EA9BRq5C,EAAS9gF,KACTI,EAAUJ,KAAKI,QACfsmI,EAAYtmI,EAAQsmI,cACpBpqG,EAAWl8B,EAAQk8B,SACnBqqG,EAAW3mI,KAAK2mI,QACpB,IAAyB,IAArBD,EAAU/uI,OAAd,CAOA,IAJI88C,EAAQz0C,KAAK4mI,eAAiB,GAAIl1C,KAAQrtD,YAC1CiiG,EAAUp5G,EAAKltB,KAAKopE,KAAKy9D,KAAM,SAAU/yG,GACzC,MAAOA,GAAK1zB,QAAQk8B,WAAawkD,EAAO1gF,QAAQk8B,WACjD,GACM3+B,EAAM,EAAGA,EAAM+oI,EAAU/uI,OAAQgG,IAClCw1C,EAAOuzF,EAAU/oI,GACjB4oI,EAAQ,OAAQC,EAAQ,OACxBlqG,GACAiqG,GAASD,GAAWK,EAAS3B,OAAOD,UACpCyB,EAAQ1lD,EAAOgmD,QAAQ3zF,EAAKhmB,KAAMgmB,EAAK/lB,IAAI,KAE3Cm5G,EAAQzlD,EAAOgmD,QAAQ3zF,EAAKhmB,KAAMgmB,EAAK/lB,IAAI,GAC3Co5G,GAASF,GAAWK,EAAS1B,OAAOF,WAElB,IAAlBwB,EAAMvtI,SAAoC,IAAnBwtI,EAAMvtI,WACzBwtI,EAAW,GAAI15C,KACfw5C,EAAMvuE,GACNwuE,EAAMvuE,KAENsuE,EAAMvtI,QACNwtI,EAAMvtI,WAENwuC,EAAOu3D,GAAKkF,SAASuiC,GACrBxnC,MACItpB,MAAOxiC,EAAKwiC,MACZztD,QAASirB,EAAKjrB,SAElBg3E,OAAQ,OAEZzqD,EAAMjQ,OAAOiD,GAGrBznC,MAAKq9H,aAAa5oF,KAEtBsyF,gBAAiB,SAAUT,GAiBvB,QAAS/9H,GAAOq9H,EAAepY,EAAUqY,GAAzC,GAIiB/qI,GACDu1E,EAJR18D,EAAQiyH,EAAcjuI,OACtBgoC,EAAO/gC,KAAKnG,IAAI,EAAG+0H,EAAS7tF,KAChC,IAAI6tF,EAAShqH,QACT,IAAS1I,EAAI0yH,EAASr/E,KAAMrzC,EAAI6Y,EAAO7Y,GAAK6kC,EACpC0wC,EAAM5gE,GAAMm2H,EAAc9qI,IACzBmI,EAAQotE,EAAK+zD,IACVtpI,EAAI+qI,IAAa,GAAOmB,GAAmBC,IAAY52D,IACvD62D,EAAYltI,SAAWq2E,EACvBxoD,EAAU2c,OAAO+oF,EAAmB2Z,EAAa1Z,IACjD4W,EAAWt8H,KAAKuoE,IA3BvB,GACTjwE,GAAUJ,KAAKI,QACf+mI,EAAiB/mI,EAAQ+mI,eACzBC,EAAiBhnI,EAAQgnI,eACzB7U,EAAYnyH,EAAQmyH,UACpBj2F,EAAWl8B,EAAQk8B,SACnB0qG,EAAkBV,EAAQlmI,QAAQ4mG,KAAKxjG,QACvCquH,EAAYuV,EAAe5jI,QAAUpD,EAAQyxH,UAAY,EACzDkT,EAAUuB,EAAQvB,UAClBkC,EAAUlC,EAAQzoG,EAAW,KAAO,MACpC4qG,GACAzZ,UAAWsX,EAAQzoG,EAAW,KAAO,MACrCoxF,QAASqX,EAAQzoG,EAAW,KAAO,MACnCA,SAAUA,GAEV8nG,KACAv8G,EAAY7nB,KAAKulI,iBAmBrB,OAFAh9H,GAAOvI,KAAK+lI,wBAAyBqB,GACrC7+H,EAAOvI,KAAKgmI,wBAAyBmB,EAAgBtV,EAAYU,GAC1D1qG,EAAUltB,UAErBu+G,OAAQ,SAAUp1E,GAAV,GAaKhpC,GACDusI,EAbJ9mD,EAAMvgF,KACNI,EAAUmgF,EAAIngF,QACd2jI,EAASxjD,EAAIwjD,OACbh7F,EAAQw3C,EAAIx3C,MACZzM,EAAWl8B,EAAQk8B,SACnB3oB,EAAQowH,EAAOpsI,OACf2vI,EAAShrG,EAAWE,GAAQD,GAC5BgrG,EAAYx+F,EAAQA,EAAMjF,IAAIwjG,KAAY,EAC1Cj8H,EAAQrL,KAAKmmI,oBAAsB/lI,EAAQojC,OAAS+jG,EACpDC,GAAWxnI,KAAKw8H,eAAiB14F,KAAOA,EACxCisC,EAAUy3D,EAAQF,KAClBG,EAAe,CACnB,KAAS3sI,EAAI,EAAGA,EAAI6Y,EAAO7Y,IACnBusI,EAAYtD,EAAOjpI,GAAGgpC,IAAIwjG,KAC1BD,EAAYh8H,GAAS0kE,IACrB03D,EAAe7oI,KAAKnG,IAAIgvI,EAAcJ,GAI1CrnI,MAAK8jC,IADLxH,EACW,GAAIswF,IAAI9oF,EAAIk0B,GAAIl0B,EAAIm0B,GAAIn0B,EAAIk0B,GAAKyvE,EAAep8H,EAAOy4B,EAAIq0B,IAE3D,GAAIy0D,IAAI9oF,EAAIk0B,GAAIl0B,EAAIm0B,GAAIn0B,EAAIo0B,GAAIp0B,EAAIm0B,GAAKwvE,EAAep8H,GAEvErL,KAAK0nI,eACL1nI,KAAK2nI,gBACL3nI,KAAK4nI,gBAETC,uBAAwB,WACpB,MAAO7nI,MAAK+lI,yBAEhB+B,eAAgB,SAAUzxF,GACtB,MAAOA,GAAMlkC,OAEjBw1H,cAAe,WAAA,GAWFhqI,GACD04C,EACA0xF,EACAV,EACAW,EACAC,EAAmBC,EAA4BC,EAKvCnN,EAGJoN,EAiBAC,EAxCRvnD,EAAS9gF,KACTugF,EAAMvgF,KACNI,EAAUmgF,EAAIngF,QACd2jI,EAASxjD,EAAIwjD,OACbuE,GAAsBloI,EAAQmoI,UAC9BjsG,EAAWl8B,EAAQk8B,SACnByoG,EAAU/kI,KAAK+kI,UACf7kG,EAAS9/B,EAAQ2jI,OAAO7jG,OACxB0lG,EAAgB5lI,KAAK6nI,yBACrBW,EAAcxoI,KAAKmmI,oBAAsB/lI,EAAQojC,MACrD,KAAS7lC,EAAM,EAAGA,EAAMomI,EAAOpsI,OAAQgG,IAC/B04C,EAAQ0tF,EAAOpmI,GACfoqI,EAASjnD,EAAOgnD,eAAezxF,GAC/BgxF,EAAY/qG,EAAW+Z,EAAMvS,IAAI7qC,SAAWo9C,EAAMvS,IAAI9qC,QACtDgvI,EAAWpC,EAAcmC,GAAUV,EAAY,EAC/CY,EAAW,OAAQC,EAAoB,OAAQC,EAAmB,OAClE7rG,GACIgsG,IACAJ,EAAoBtC,EAAcmC,GAClCI,EAAmBvC,EAAcmC,EAAS,GACtC/M,EAASkN,GAAqBC,EAAmBD,GAAqB,EAC1EF,EAAWhN,EAASqM,EAAY,GAEhCe,EAASrD,EAAQ7sE,GACjBh4B,GACAkoG,GAAUI,EACVnyF,EAAMj2C,QAAQyiI,eAAiBzgH,KAE/BgmH,GAAUI,EAAcnyF,EAAMvS,IAAI9qC,QAClCq9C,EAAMj2C,QAAQyiI,eAAiBvgH,IAEnC2lH,EAAW5xF,EAAMvS,IAAI5Y,KAAKk9G,EAAQJ,KAE9BM,GACAJ,EAAoBtC,EAAcmC,GAClCI,EAAmBvC,EAAcmC,EAAS,KAE1CG,EAAoBF,EACpBG,EAAmBH,EAAWX,GAE9BgB,EAAStD,EAAQ9sE,GACjB/3B,GACAmoG,GAAUG,EAAcnyF,EAAMvS,IAAI7qC,SAClCo9C,EAAMj2C,QAAQyiI,eAAiBv2D,KAE/B+7D,GAAUG,EACVnyF,EAAMj2C,QAAQyiI,eAAiBx2D,IAEnC47D,EAAW,GAAIrb,IAAIsb,EAAmBG,EAAQF,EAAkBE,EAAShyF,EAAMvS,IAAI7qC,WAEvFo9C,EAAM6iE,OAAO+uB,IAGrBpD,iBAAkB,WAAA,GAENe,GACA7B,EACA16C,EACK1rF,EACD3E,EACAivI,EAUKQ,CAhBjB,IAAIzoI,KAAKI,QAAQykI,mBAAqB7kI,KAAKI,QAAQk8B,SAAU,CAIzD,IAHIspG,EAAgB5lI,KAAK+lI,wBACrBhC,EAAS/jI,KAAK+jI,OAETpmI,EAAM,EAAGA,EAAMomI,EAAOpsI,OAAQgG,IAGnC,GAFI3E,EAAQ4F,KAAKC,IAAI+mI,EAAcjoI,EAAM,GAAKioI,EAAcjoI,IACxDsqI,EAAWlE,EAAOpmI,GAAKmmC,IACvBmkG,EAASjvI,QAAUA,EAAO,CAC1B,GAAIivI,EAAShvI,SAAWD,EAAO,CAC3BqwF,KACA,OAEJA,MAGR,GAAIA,EAAO,CACP,IAASo/C,EAAQ,EAAGA,EAAQ1E,EAAOpsI,OAAQ8wI,IACvC1E,EAAO0E,GAAOroI,QAAQgkC,SAAWilD,EACjC06C,EAAO0E,GAAOvvB,OAAO,GAAI0T,IAE7B,QAAO,KAInB8a,aAAc,WAAA,GACNnnD,GAAMvgF,KACNI,EAAUmgF,EAAIngF,QACd2oC,EAAQw3C,EAAIx3C,MACZ7I,EAAS9/B,EAAQ2jI,OAAO7jG,OACxB5D,EAAWl8B,EAAQk8B,QACnByM,KACIzM,GACAyM,EAAM3oC,QAAQktF,MAAQptD,EAAS5d,GAAQF,GACvC2mB,EAAM3oC,QAAQutF,OAAS5kD,EAAM3oC,QAAQpG,WAErC+uC,EAAM3oC,QAAQktF,MAAQvkD,EAAM3oC,QAAQpG,SACpC+uC,EAAM3oC,QAAQutF,OAASztD,EAASmsC,GAAMC,IAE1CvjC,EAAMmwE,OAAOl5G,KAAK8jC,OAG1B8jG,aAAc,WAAA,GAEDjqI,GACDw1C,EACAv1C,EACA8qI,EAJJ5nD,EAAS9gF,IACb,KAASrC,EAAM,EAAGA,EAAMqC,KAAKolI,MAAMztI,OAAQgG,IACnCw1C,EAAO2tC,EAAOskD,MAAMznI,GACpBC,EAAQu1C,EAAK/yC,QAAQxC,MACrB8qI,EAAO,OACPjlD,GAAQ7lF,IACJkjF,EAAO6nD,iBAAiB/qI,GACxBu1C,EAAKhR,OAELgR,EAAKryC,OAET4nI,EAAO5nD,EAAO8nD,SAAShrI,IAEvBu1C,EAAKryC,OAETqyC,EAAK+lE,OAAOwvB,GAAQ5nD,EAAOikD,YAGnC6D,SAAU,SAAUhrI,GAChB,MAAOoC,MAAK8mI,QAAQlpI,IAExBq8H,QAAS,SAAU4O,GAAV,GACD9D,GAAU8D,EAAW9D,UACrBzoG,EAAWt8B,KAAKI,QAAQk8B,SACxB+zC,EAAM/zC,EAAWhrB,GAAIyiH,EACzB/zH,MAAK8jC,IAAIk2F,OAAO+K,EAAS10D,GACrB/zC,EACAt8B,KAAK8jC,IAAIq2F,OAAO,EAAGn6H,KAAK+kI,UAAU9rI,SAAW8rI,EAAQ9rI,UAErD+G,KAAK8jC,IAAIq2F,OAAOn6H,KAAK+kI,UAAU/rI,QAAU+rI,EAAQ/rI,QAAS,GAE9DgH,KAAK8jC,IAAIusC,EAAM,IAAMrwE,KAAK+kI,UAAU10D,EAAM,GAAK00D,EAAQ10D,EAAM,GAC7DrwE,KAAK8jC,IAAIusC,EAAM,IAAMrwE,KAAK+kI,UAAU10D,EAAM,GAAK00D,EAAQ10D,EAAM,IAEjEy4D,cAAe,SAAUlrI,EAAO+oB,EAAUvmB,GAA3B,GACP2oI,GAAOjd,EAAY1rH,GACnBq1B,EAAO73B,CAWX,OAVImrI,GACAtzG,EAAOszG,GACHnrI,MAAOA,EACP+oB,SAAUA,EACV5d,OAAQ3I,EAAQ2I,OAChByC,QAASpL,EAAQoL,UAEdpL,EAAQ2I,SACf0sB,EAAOz1B,KAAK48H,aAAa7zH,OAAO6vH,WAAWx4H,EAAQ2I,QAASnL,GAAQwC,EAAQoL,UAEzEiqB,GAEXizG,KAAM,SAAUv7G,EAAMC,EAAI47G,GACtB,GAAIN,GAAO1oI,KAAK8mI,QAAQ35G,EAAMC,EAAI47G,EAClC,IAAIN,EACA,MAAOA,GAAK7N,UAGpBwE,WAAY,WAAA,GAOA4J,GANJnlG,EAAM9jC,KAAK8jC,IAAI3nC,QACf4nI,EAAS/jI,KAAK+jI,MAUlB,OATIA,GAAOpsI,SACHosI,EAAO,GAAG3jI,QAAQoD,SAClBsgC,EAAIjrC,KAAKkrI,EAAO,GAAGjgG,KAEnBmlG,EAAYlF,EAAOA,EAAOpsI,OAAS,GACnCsxI,EAAU7oI,QAAQoD,SAClBsgC,EAAIjrC,KAAKowI,EAAUnlG,MAGpBA,GAEXolG,WAAY,SAAU/7G,EAAMC,EAAIpb,EAAKvZ,EAAK2G,GAA9B,GAWJ+pI,GACAnY,EACAI,EAZAhxH,EAAUJ,KAAKI,OACnB,OAAI+sB,GAAOnb,GAAO5S,EAAS,KAAOqkF,GAAQrjF,EAAQ4R,MAAQ5R,EAAQ4R,KAAOA,IAAQvZ,EAAM20B,GAAMhuB,EAAS,KAAOqkF,GAAQrjF,EAAQ3H,MAAQA,GAAO2H,EAAQ3H,KACzI,KAEP20B,EAAKpb,GAAO5S,EAAS,GAAK3G,EAAM00B,GAAQ/tB,EAAS,GAE7C4S,IAAKmb,EACL10B,IAAK20B,IAGT+7G,EAAY/7G,EAAKD,EACjB6jG,EAAW7jG,EACXikG,EAAWhkG,EACXD,EAAOnb,GACPg/G,EAAWlsC,GAAW33D,EAAMnb,EAAKvZ,GACjC24H,EAAWtsC,GAAW33D,EAAOg8G,EAAWn3H,EAAMm3H,EAAW1wI,IAClD20B,EAAK30B,IACZ24H,EAAWtsC,GAAW13D,EAAIpb,EAAKvZ,GAC/Bu4H,EAAWlsC,GAAW13D,EAAK+7G,EAAWn3H,EAAKvZ,EAAM0wI,KAGjDn3H,IAAKg/G,EACLv4H,IAAK24H,KAGbgY,WAAY,WACR,OACIp3H,IAAKhS,KAAKwxH,UACV/4H,IAAKuH,KAAKyxH,cAItBpF,EAAkB4K,IACd8M,QACIvgI,SAAS,EACT4gC,SAAU,EACVlE,QAAQ,EACRP,KAAM,EACNwO,KAAM,GAEV64D,MACIhuG,MAAO,EACP28E,MAAOw+C,GACP3wH,SAAS,GAEbulC,OACIvlC,SAAS,EACTxJ,SAAUoyE,IAEdg4D,YACI92C,MAAOinC,GACPx2H,KAAM,EACNowC,KAAM,EACNxO,KAAM,GAEVukG,YACI52C,MAAOinC,GACPx2H,KAAM,EACNowC,KAAM,EACNxO,KAAM,GAEV4zF,kBAAmB,EACnB8Q,cAAe9P,GACf4P,cAAe5pG,GACf6sG,gBACIj5F,KAAM,EACNxO,KAAM,GAEVwnG,gBACI3jI,SAAS,EACTxK,MAAO,EACP28E,MAAOw+C,GACPhmF,KAAM,EACNxO,KAAM,GAEV6D,OAAQ,EACRhgC,SAAS,EACTlD,SAAS,EACTioI,WAAW,EACXnD,OAAS/uF,OAAS5gB,KAAM,KACxBwwG,aAAa,EACb3B,cAAc,IAEdlV,GAAe,eACfF,GAAU,UACVF,GAAU,UACVD,GAAQ,QACRD,GAAO,OACPD,GAAQ,QACRD,GAAS,SACTD,GAAQ,QACRuI,GAAuB,EACvB/H,GAAkB,IAClBtB,GAAkB,GAAKsB,GACvBX,GAAgB,GAAKX,GACrBM,GAAe,GAAKK,GACpBqE,GAAgB,EAAI1E,GACpByE,GAAiB,GAAKzE,GACtBwE,GAAgB,IAAMxE,GACtB2B,IACAuZ,MAAS1W,GACTzmH,OAAU0mH,GACV0W,MAASzW,GACT5mH,KAAQkiH,GACRj7G,MAASs7G,GACTniH,QAAWwhH,GACX14G,QAAWg6G,GACX/5G,aAAgB8hH,IAoMhBC,GAA4B,IAa5BC,GAAeH,GAAKv2H,QACpBC,KAAM,SAAUP,EAASw8H,GACrB3F,GAAKhzH,GAAGtD,KAAKwH,KAAKnI,KAAMI,EAASw8H,GACjC58H,KAAKupI,UACLvpI,KAAKwpI,gBAAgBxpI,KAAKI,UAE9BopI,gBAAiB,SAAUppI,GAAV,GAOL4R,GACAvZ,EAPJgxI,GAAcrpI,EAAQqpI,gBAAkBjjI,MAAM,GAC9CkjI,EAAajmD,GAAQrjF,EAAQ4R,KAC7B23H,EAAalmD,GAAQrjF,EAAQ3H,IACjC2H,GAAQqpI,WAAaA,GAChBC,GAAcC,IAAeF,EAAW9xI,SACzCyI,EAAQwpI,cAAgBxpI,EAAQqpI,WAC5Bz3H,EAAM03H,EAAa9qI,KAAKpE,MAAM4F,EAAQ4R,KAAO,EAG7CvZ,EADAkxI,EACMvpI,EAAQmoI,UAAY3pI,KAAKpE,MAAM4F,EAAQ3H,KAAO,EAAImG,KAAK2pD,KAAKnoD,EAAQ3H,KAEpEgxI,EAAW9xI,OAErByI,EAAQqpI,WAAarpI,EAAQqpI,WAAWjjI,MAAMwL,EAAKvZ,KAG3DoxI,aAAc,WAAA,GAINpxI,GAHA2H,EAAUJ,KAAKI,QACfzI,EAASyI,EAAQqpI,WAAW9xI,QAAU,EACtCqa,EAAMyhC,EAASrzC,EAAQ4R,KAAO5R,EAAQ4R,IAAM,EAAI,CAOpD,OAJIvZ,GADAg7C,EAASrzC,EAAQ3H,MAAQ2H,EAAQ3H,IAAM,IAAM,GAAK2H,EAAQ3H,IAAMuH,KAAK8pI,aAAarxI,IAC5Ed,GAAU,EAAIyI,EAAQ3H,IAAM,GAE5Bd,GAAUyI,EAAQmoI,UAAY,EAAI,IAGxCv2H,IAAKA,EACLvZ,IAAKA,IAGbsxI,kBAAmB,SAAUf,GAAV,GAGXvwI,GASIqxI,EAXJ1pI,EAAUJ,KAAKI,QACf4R,EAAMyhC,EAASrzC,EAAQ4R,KAAO5R,EAAQ4R,IAAM,CAchD,OAXIvZ,GADAg7C,EAASrzC,EAAQ3H,KACX2H,EAAQ3H,IACPg7C,EAASrzC,EAAQ4R,KAClBA,EAAM5R,EAAQqpI,WAAW9xI,QAExByI,EAAQwpI,eAAiBxpI,EAAQqpI,YAAY9xI,QAAUyI,EAAQmoI,UAAY,EAAI,IAAM,EAE5FS,IACIc,EAAa9pI,KAAK8pI,aACtB93H,EAAM8yE,GAAW9yE,EAAK,EAAG83H,EAAWrxI,KACpCA,EAAMqsF,GAAWrsF,EAAK,EAAGqxI,EAAWrxI,OAGpCuZ,IAAKA,EACLvZ,IAAKA,IAGbkmD,MAAO,WACH,GAAIv+C,GAAUJ,KAAKI,OACnB,QACI4R,IAAKyhC,EAASrzC,EAAQ4R,KAAO5R,EAAQ4R,IAAM,EAC3CvZ,IAAKg7C,EAASrzC,EAAQ3H,KAAO2H,EAAQ3H,IAAM2H,EAAQqpI,WAAW9xI,SAGtEmyI,WAAY,WACR,GAAI1pI,GAAUJ,KAAKI,OACnB,QACI4R,IAAK,EACLvZ,IAAKmG,KAAKnG,IAAIuH,KAAKgqI,YAAc,GAAI5pI,EAAQwpI,eAAiBxpI,EAAQqpI,YAAY9xI,SAAWyI,EAAQmoI,UAAY,EAAI,KAG7H0B,SAAU,WAAA,GACF1pD,GAAMvgF,KAAK6pI,eACX73H,EAAMuuE,EAAIvuE,IACVvZ,EAAM8nF,EAAI9nF,IACVssI,EAAU/kI,KAAK+kI,UACfhnI,EAAOiC,KAAKI,QAAQk8B,SAAWyoG,EAAQ9rI,SAAW8rI,EAAQ/rI,QAC1DokC,EAAQr/B,GAAQtF,EAAMuZ,GAAO,EACjC,OAAOorB,IAASp9B,KAAKI,QAAQE,WAAe,IAEhD4pI,iBAAkB,SAAUC,GAYxB,IAZc,GACV5pD,GAAMvgF,KAAKI,QACXk8B,EAAWikD,EAAIjkD,SACfh8B,EAAUigF,EAAIjgF,QACd84G,EAAQp5G,KAAK6pI,eACb73H,EAAMonG,EAAMpnG,IACZvZ,EAAM2gH,EAAM3gH,IACZssI,EAAU/kI,KAAK+kI,UACf3nG,EAAQp9B,KAAKiqI,WACb55D,EAAM00D,GAASzoG,EAAWhrB,GAAIyiH,KAAMzzH,EAAU,EAAI,IAClDuwE,KACAllE,EAAUqG,EAAM,IAAM,EAAIpT,KAAKpE,MAAMwX,EAAM,GAAKm4H,EAAWn4H,EACxDrG,GAAWlT,GACdo4E,EAAU/oE,KAAKuoE,EAAM5gE,GAAM2tB,GAASzxB,EAAUqG,GAAMm6G,KACpDxgH,GAAWw+H,CAEf,OAAOt5D,IAEXg3D,uBAAwB,WAAA,GAChBjC,GAAgB5lI,KAAK+lI,wBAAwBv/H,MAAM,GACnDm4C,EAAQ3+C,KAAK6pI,eACbzsG,EAAQp9B,KAAKiqI,WACbnmG,EAAM9jC,KAAK+kI,UACX3kI,EAAUJ,KAAKI,QACf0zB,EAAO1zB,EAAQk8B,SAAWhrB,GAAIyiH,GAC9B9kH,EAAQ7O,EAAQE,QAAU,EAAI,EAC9B5I,EAAM0I,EAAQE,QAAU,EAAI,CAOhC,OANIq+C,GAAM3sC,IAAM,IAAM,GAClB4zH,EAAc79H,QAAQ+7B,EAAIhQ,EAAO7kB,GAASmuB,GAASuhB,EAAM3sC,IAAM,IAE/D2sC,EAAMlmD,IAAM,IAAM,GAClBmtI,EAAc99H,KAAKg8B,EAAIhQ,EAAOp8B,GAAO0lC,GAAS,EAAIuhB,EAAMlmD,IAAM,IAE3DmtI,GAEXkC,eAAgB,SAAUzxF,GAAV,GACRsI,GAAQ3+C,KAAK6pI,eACb13H,EAAQkkC,EAAMlkC,KAIlB,OAHIwsC,GAAM3sC,IAAM,IACZG,GAAgBvT,KAAKpE,MAAMmkD,EAAM3sC,MAE9BG,GAEXw1H,cAAe,WACX1Q,GAAKhzH,GAAG0jI,cAAcx/H,KAAKnI,MAC3BA,KAAKoqI,wBAETA,qBAAsB,WAAA,GAKVC,GACAp7H,EACAvX,EACA4yI,EACArB,EARJ1oD,EAAMvgF,KACN8jC,EAAMy8C,EAAIz8C,IACVigG,EAASxjD,EAAIwjD,MACbA,GAAOpsI,SACH0yI,EAAYrqI,KAAKI,QAAQk8B,SAAWhrB,GAAIyiH,GACxC9kH,EAAQ60B,EAAIumG,EAAY,GACxB3yI,EAAMosC,EAAIumG,EAAY,GACtBC,EAAavG,EAAO,GACpBkF,EAAYt5G,GAAKo0G,IACjBuG,EAAWxmG,IAAIumG,EAAY,GAAK3yI,GAAO4yI,EAAWxmG,IAAIumG,EAAY,GAAKp7H,KACvEq7H,EAAWlqI,QAAQoD,SAAU,IAE7BylI,EAAUnlG,IAAIumG,EAAY,GAAK3yI,GAAOuxI,EAAUnlG,IAAIumG,EAAY,GAAKp7H,KACrEg6H,EAAU7oI,QAAQoD,SAAU,KAIxCuiI,sBAAuB,WACnB,MAAO/lI,MAAKuqI,WAAWnG,YAE3B4B,sBAAuB,WACnB,MAAOhmI,MAAKuqI,WAAWrG,YAE3BqG,SAAU,WAAA,GACFhqD,GAAMvgF,KAAKI,QACXE,EAAUigF,EAAIjgF,QACdioI,EAAYhoD,EAAIgoD,UAChB57G,EAAQ3sB,KAAKupI,OACb5qF,EAAQ3+C,KAAK6pI,eACb9E,EAAU/kI,KAAK+kI,UACfz7F,EAAOy7F,EAAQxK,UAAY57E,EAAM3sC,IAAM,IAAM2sC,EAAMlmD,IAAM6H,EAAUioI,CAMvE,OALI57G,GAAM69G,QAAUlhG,IAChB3c,EAAM69G,MAAQlhG,EACd3c,EAAMy3G,WAAapkI,KAAKkqI,iBAAiB,GACzCv9G,EAAMu3G,WAAalkI,KAAKkqI,iBAAiB,KAEtCv9G,GAEXm6G,QAAS,SAAU35G,EAAMC,EAAI47G,GAApB,GAiBD5hD,GACAC,EAjBAjnF,EAAUJ,KAAKI,QACfE,EAAUF,EAAQE,QAClBioI,EAAYnoI,EAAQmoI,UACpBjsG,EAAWl8B,EAAQk8B,SACnBikD,EAAMvgF,KAAK6pI,eACX73H,EAAMuuE,EAAIvuE,IACVq4H,EAAY/tG,EAAWhrB,GAAIyiH,GAC3BgR,EAAU/kI,KAAK+kI,UACf3nG,EAAQp9B,KAAKiqI,WACbxc,EAAYsX,EAAQsF,GAAa/pI,EAAU,EAAI,IAC/CmqI,EAAU1F,EAAQ5oI,QAClBuuI,GAAcjnD,GAAQr2D,GACtBne,EAAQq2E,GAAen4D,EAAM,GAC7Bz1B,EAAM4tF,GAAel4D,EAAIne,EAc7B,OAbAvX,GAAMkH,KAAKnG,IAAIf,EAAM,EAAGuX,GACxBvX,EAAMkH,KAAKnG,IAAIwW,EAAOvX,GAClB0vF,EAAKqmC,GAAax+G,EAAQ+C,GAAOorB,EACjCiqD,EAAKomC,GAAa/1H,EAAM,EAAIsa,GAAOorB,EACnCstG,GAAcnC,IACdlhD,EAAKD,GAEL4hD,IACA5hD,EAAKtC,GAAWsC,EAAI29C,EAAQsF,EAAY,GAAItF,EAAQsF,EAAY,IAChEhjD,EAAKvC,GAAWuC,EAAI09C,EAAQsF,EAAY,GAAItF,EAAQsF,EAAY,KAEpEI,EAAQJ,EAAY,GAAK/pI,EAAU+mF,EAAKD,EACxCqjD,EAAQJ,EAAY,GAAK/pI,EAAU8mF,EAAKC,EACjCojD,GAEXE,UAAW,SAAUjC,GAAV,GACHpsG,GAAWt8B,KAAKI,QAAQk8B,SACxB+tG,EAAY/tG,EAAWhrB,GAAIyiH,GAC3BgR,EAAU/kI,KAAK+kI,UACf6F,EAAelC,EAAKvsI,OAGxB,OAFAyuI,GAAaP,EAAY,GAAKvlD,GAAW4jD,EAAK2B,EAAY,GAAItF,EAAQsF,EAAY,GAAItF,EAAQsF,EAAY,IAC1GO,EAAaP,EAAY,GAAKvlD,GAAW4jD,EAAK2B,EAAY,GAAItF,EAAQsF,EAAY,GAAItF,EAAQsF,EAAY,IACnGO,GAEXlC,KAAM,SAAUv7G,EAAMC,EAAI47G,GAApB,GACE/5H,GAAQke,EACRz1B,EAAM01B,CAOV,OANqB,gBAAVne,KACPA,EAAQjP,KAAK6qI,cAAc57H,IAEZ,gBAARvX,KACPA,EAAMsI,KAAK6qI,cAAcnzI,IAEtBu/H,GAAKhzH,GAAGykI,KAAKvgI,KAAKnI,KAAMiP,EAAOvX,EAAKsxI,IAE/C8B,mBAAoB,SAAU1gD,GAAV,GAgBZxsF,GACAiwB,EAhBA0yD,EAAMvgF,KAAKI,QACXE,EAAUigF,EAAIjgF,QACdioI,EAAYhoD,EAAIgoD,UAChBjsG,EAAWikD,EAAIjkD,SACf+tG,EAAY/tG,EAAWhrB,GAAIyiH,GAC3BgR,EAAU/kI,KAAK+kI,UACfpmF,EAAQ3+C,KAAK6pI,eACbnuG,EAAap7B,EAAUq+C,EAAMlmD,IAAMkmD,EAAM3sC,IACzCorB,EAAQp9B,KAAKiqI,WACbxc,EAAYsX,EAAQsF,EAAY,GAChC3c,EAAUqX,EAAQsF,EAAY,GAC9Bh6D,EAAM+Z,EAAMigD,EAChB,OAAIh6D,GAAMo9C,GAAap9C,EAAMq9C,EAClB,MAEP9vH,EAAQ89B,GAAc20C,EAAMo9C,GAAarwF,EACzCvP,EAAOjwB,EAAQ,EACf2qI,EACA3qI,EAAQgB,KAAK6Q,MAAM7R,GACH,IAATiwB,GAAcjwB,EAAQ,GAC7BA,IAEGgB,KAAKpE,MAAMoD,KAEtBmtI,YAAa,SAAU3gD,GACnB,GAAIj4E,GAAQnS,KAAK8qI,mBAAmB1gD,EACpC,OAAc,QAAVj4E,EACO,KAEJnS,KAAKI,QAAQqpI,WAAWt3H,IAEnC04H,cAAe,SAAUjtI,GAAV,GACPwC,GAAUJ,KAAKI,QACf+R,EAAQjU,EAAQN,EAAOwC,EAAQwpI,eAAiBxpI,EAAQqpI,WAC5D,OAAOt3H,GAAQvT,KAAKpE,MAAM4F,EAAQ4R,KAAO,IAE7Cg5H,eAAgB,SAAUt3G,GAAV,GACRtzB,GAAUJ,KAAKI,QACf2kI,EAAU/kI,KAAK+kI,UACfhnI,EAAOqC,EAAQk8B,SAAWyoG,EAAQ9rI,SAAW8rI,EAAQ/rI,QACrD2lD,EAAQv+C,EAAQqpI,WAAW9xI,OAC3BylC,EAAQr/B,EAAO4gD,EACfv/C,EAASqQ,GAAMikB,EAAQ0J,EAAOwzF,GAClC,QACI5+G,IAAK5S,EACL3G,IAAKkmD,EAAQv/C,IAGrB6rI,UAAW,SAAUC,GAAV,GACHrB,GAAe7pI,KAAK+pI,oBACpBxpD,EAAMvgF,KAAK8pI,aACXqB,EAAW5qD,EAAIvuE,IACfo5H,EAAW7qD,EAAI9nF,IACfuZ,EAAM8yE,GAAW+kD,EAAa73H,IAAMk5H,EAAMC,EAAUC,GACpD3yI,EAAMqsF,GAAW+kD,EAAapxI,IAAMyyI,EAAMC,EAAUC,EACxD,IAAI3yI,EAAMuZ,EAAM,EACZ,OACIA,IAAKA,EACLvZ,IAAKA,IAIjB4yI,WAAY,SAAUjuG,GAAV,GACJuhB,GAAQ3+C,KAAKI,QAAQqpI,WAAW9xI,OAChC+7B,EAAQ0J,EAAQuhB,CACpB,QACI3sC,KAAM0hB,EACNj7B,IAAKkmD,EAAQjrB,IAGrBixG,YAAa,WACT,GAAID,GAAc1kI,KAAK0kI,aACvB,OAAOA,GAAYjsI,IAAMisI,EAAY1yH,KAEzC0yH,YAAa,WAAA,GAeLv2F,GAdA/tC,EAAUJ,KAAKI,QACfmoI,EAAYnoI,EAAQmoI,UACpB3D,EAAexkI,EAAQ2jI,OACvBxjD,EAAMvgF,KAAK+pI,mBAAkB,GAC7B/3H,EAAMuuE,EAAIvuE,IACVvZ,EAAM8nF,EAAI9nF,IACVwW,EAAQrQ,KAAKpE,MAAMwX,EAcvB,OAbKu2H,IAIDv2H,EAAMpT,KAAK2pD,KAAKv2C,GAChBvZ,EAAMmG,KAAKpE,MAAM/B,KAJjBuZ,EAAMpT,KAAKpE,MAAMwX,GACjBvZ,EAAMmG,KAAK2pD,KAAK9vD,IAOhB01C,EADAn8B,EAAM4yH,EAAaz2F,KACZy2F,EAAaz2F,KAAOy2F,EAAajlG,KAAO/gC,KAAK2pD,MAAMv2C,EAAM4yH,EAAaz2F,MAAQy2F,EAAajlG,MAE3FilG,EAAaz2F,MAGpBn8B,IAAKm8B,EAAOl/B,EACZxW,KAAM2H,EAAQqpI,WAAW9xI,OAASc,GAAO8vI,EAAY,EAAI,GAAK,GAAKt5H,IAG3E61H,gBAAiB,SAAU3yH,EAAOyyH,GAAjB,GACTxkI,GAAUJ,KAAKI,QACfumB,EAAWvmB,EAAQimB,UAAYjmB,EAAQimB,UAAUlU,GAAS,KAC1DssH,EAAWn5C,GAAellF,EAAQqpI,WAAWt3H,GAAQ,IACrDsjB,EAAOz1B,KAAK8oI,cAAcrK,EAAU93G,EAAUi+G,EAClD,OAAO,IAAI/N,IAAU4H,EAAUhpG,EAAMtjB,EAAOwU,EAAUi+G,IAE1D+D,iBAAkB,SAAU/qI,GACxB,GAAI+gD,GAAQ3+C,KAAK+pI,mBACjB,OAAOnrI,MAAKpE,MAAMmkD,EAAM3sC,MAAQpU,GAASA,GAASgB,KAAK2pD,KAAK5J,EAAMlmD,MAEtEmwI,SAAU,SAAUhrI,GAAV,GACFwC,GAAUJ,KAAKI,QACf+R,EAAQvU,EAAQgB,KAAKpE,MAAM4F,EAAQ4R,KAAO,EAC9C,OAAOhS,MAAK8mI,QAAQ30H,IAExBy1H,aAAc,WACV3Q,GAAKhzH,GAAG2jI,aAAaz/H,KAAKnI,MAC1BA,KAAKsrI,uBAETA,oBAAqB,WAAA,GAKTjB,GACAp7H,EACAvX,EACKiG,EACDwnI,EARR5kD,EAAMvgF,KACNolI,EAAQ7kD,EAAI6kD,MACZthG,EAAMy8C,EAAIz8C,GACd,IAAIshG,GAASA,EAAMztI,OAIf,IAHI0yI,EAAYrqI,KAAKI,QAAQk8B,SAAWhrB,GAAIyiH,GACxC9kH,EAAQ60B,EAAIumG,EAAY,GACxB3yI,EAAMosC,EAAIumG,EAAY,GACjB1sI,EAAM,EAAGA,EAAMynI,EAAMztI,OAAQgG,IAC9BwnI,EAAOC,EAAMznI,GACbwnI,EAAKrhG,MAAQpsC,EAAMytI,EAAKrhG,IAAIumG,EAAY,IAAMlF,EAAKrhG,IAAIumG,EAAY,GAAKp7H,IACxEk2H,EAAKrkI,QAKrByqI,IAAK,SAAU73G,GAAV,GACGirB,GAAQ3+C,KAAK+pI,mBAAkB,GAC/B3sG,EAAQp9B,KAAKiqI,WACb7qI,EAASqQ,GAAMikB,EAAQ0J,EAAOwzF,IAC9BkZ,EAAa9pI,KAAK8pI,aAClB93H,EAAM2sC,EAAM3sC,IAAM5S,EAClB3G,EAAMkmD,EAAMlmD,IAAM2G,CACtB,OAAOY,MAAKkpI,WAAWl3H,EAAKvZ,EAAK,EAAGqxI,EAAWrxI,IAAK2G,IAExDosI,YAAa,SAAUv8H,EAAOvX,GAAjB,GACL6oF,GAAMvgF,KAAKI,QACXE,EAAUigF,EAAIjgF,QACdg8B,EAAWikD,EAAIjkD,SACf+tG,EAAY/tG,EAAWhrB,GAAIyiH,GAC3BgR,EAAU/kI,KAAK+kI,UACfpmF,EAAQ3+C,KAAK+pI,mBAAkB,GAC/B3sG,EAAQp9B,KAAKiqI,WACbxc,EAAYsX,EAAQsF,GAAa/pI,EAAU,EAAI,IAC/CmrI,EAAYx8H,EAAMo7H,GAAa5c,EAC/Bie,EAAUh0I,EAAI2yI,GAAa5c,EAC3Bz7G,EAAM2sC,EAAM3sC,IAAMy5H,EAAYruG,EAC9B3kC,EAAMkmD,EAAM3sC,IAAM05H,EAAUtuG,EAC5BuuG,EAAW/sI,KAAKoT,IAAIA,EAAKvZ,GACzBmzI,EAAWhtI,KAAKnG,IAAIuZ,EAAKvZ,EAC7B,IAAImzI,EAAWD,GAAYxU,GACvB,OACInlH,IAAK25H,EACLlzI,IAAKmzI,IAIjBxC,WAAY,WACR,MAAOppI,MAAK2+C,WAGpB0tE,EAAkB+K,IACdl4H,KAAM,WACNuqI,cACAntG,UAAU,EACV8qG,gBACI5jI,SAAS,EACTxK,MAAO,EACP28E,MAAOw+C,IAEX4P,QAAU1/F,OAAQ,GAClBkkG,WAAW,EACXjE,cAAc,IAEdhT,GAAmB,IACnB+F,IACAjiH,aAAc,eACdD,QAAS,WACT9I,QAAS,QACT6G,MAAO,QACPjH,KAAM,MACNq9H,MAAO,MACPp9H,OAAQ,UACRm9H,MAAO,QAEPpY,GAAiB,GACjBzyF,GAAO,OACP84F,IACAlI,GACAF,GACAF,GACAD,GACAD,GACAD,GACAD,GACAD,IAEA4I,GAAM,MACNC,GAAmBJ,GAAa12H,QAChCC,KAAM,SAAUuxH,EAAa0K,GAAvB,GAEEtM,GACAlwH,EASIyvH,EACAgc,CAZRzU,IAAanzH,GAAGtD,KAAKwH,KAAKnI,KAAMkyH,EAAa0K,GACzCtM,EAAcsM,EAAajE,KAC3Bv4H,EAAUJ,KAAKI,QACnBA,EAAUxF,IAAakxI,iBAAiB,GAAQ1rI,GAC5CqpI,WAAYlZ,EAAWD,EAAalwH,EAAQqpI,YAC5Cz3H,IAAK+E,EAAUu5G,EAAalwH,EAAQ4R,KACpCvZ,IAAKse,EAAUu5G,EAAalwH,EAAQ3H,OAExC2H,EAAQ2rI,gBAAkB3rI,EAAQ2rI,iBAAmB3rI,EAAQyvH,SAC7DzvH,EAAQ4rI,oBAAsB5rI,EAAQ4rI,qBAAuB5rI,EAAQ4vH,aACjE5vH,EAAQqpI,YAAcrpI,EAAQqpI,WAAW9xI,OAAS,GAC9Ck4H,GAAYzvH,EAAQyvH,UAAY,IAAI/yH,cACpC+uI,EAAahc,IAAa0H,KAAQt0H,EAAQ4sH,EAAUyH,IACpDuU,IACAzrI,EAAQyvH,SAAW7vH,KAAKisI,gBAAgB7rI,IAExCyvH,IAAa0H,IAAOn3H,EAAQ4vH,eAAiBxxF,IAC7Cx+B,KAAKksI,aAAa9rI,GAEtBJ,KAAKmsI,aAAe1d,EAAYruH,EAAQqpI,WAAW,GAAI,EAAGrpI,EAAQyvH,SAAUzvH,EAAQ0vB,cACpF9vB,KAAKosI,gBAAgBhsI,IAErBA,EAAQyvH,SAAWzvH,EAAQyvH,UAAYf,GAE3C9uH,KAAKI,QAAUA,GAEnBopI,gBAAiB,aAEjBb,iBAAkB,SAAU/qI,GAAV,GACV+gD,GAAQ3+C,KAAK2+C,QACb8qF,EAAazpI,KAAKI,QAAQqpI,cAC9B,OAAOja,GAAa5xH,EAAO+gD,EAAM3sC,MAAQ,GAAKw9G,EAAa5xH,EAAO+gD,EAAMlmD,MAAQ,GAAKgxI,EAAW9xI,QAEpG0tI,eAAgB,SAAUznI,GACtB,MAAOmZ,GAAU/W,KAAK48H,aAAajE,KAAM/6H,IAE7CgrI,SAAU,SAAUhrI,GAChB,MAAOoC,MAAK8mI,QAAQlpI,IAExBotI,eAAgB,SAAUt3G,GAAV,GAWJvG,GACAC,EAXJhtB,EAAUJ,KAAKI,QACfyvH,EAAWzvH,EAAQyvH,SACnB//F,EAAe1vB,EAAQ0vB,aACvBwM,EAAWl8B,EAAQk8B,SACnByoG,EAAU/kI,KAAK+kI,UACfhnI,EAAOu+B,EAAWyoG,EAAQ9rI,SAAW8rI,EAAQ/rI,QAC7C2lD,EAAQ3+C,KAAK2+C,QACbvhB,EAAQr/B,GAAQ4gD,EAAMlmD,IAAMkmD,EAAM3sC,KAClC5S,EAASqQ,GAAMikB,EAAQ0J,EAAOwzF,GASlC,OARIjyE,GAAM3sC,KAAO2sC,EAAMlmD,MACf00B,EAAO2gG,EAAS1tH,EAAQ4R,KAAO2sC,EAAM3sC,IAAK5S,GAC1CguB,EAAK0gG,EAAS1tH,EAAQ3H,KAAOkmD,EAAMlmD,IAAK2G,GAC5Cu/C,GACI3sC,IAAKy8G,EAAYthG,EAAM,EAAG0iG,EAAU//F,GACpCr3B,IAAKg2H,EAAYrhG,EAAI,EAAGyiG,EAAU//F,KAGnC6uB,GAEX0sF,WAAY,SAAU33G,GAAV,GAOIirB,GACAhf,EAPR0sG,EAASztI,KAAKC,IAAI60B,GAClB10B,EAASgB,KAAK2+C,QACdxxB,EAAOnuB,EAAOgT,IACdob,EAAKpuB,EAAOvG,GAChB,IAAI00B,GAAQC,EAAI,CACZ,KAAOi/G,KACC1tF,EAAQ8wE,EAAStiG,EAAMC,GACvBuS,EAAO/gC,KAAK6Q,MAAc,GAARkvC,GAClBjrB,EAAQ,GACRvG,EAAO2gG,EAAS3gG,EAAMwS,GACtBvS,EAAK0gG,EAAS1gG,GAAKuS,KAEnBxS,EAAO2gG,EAAS3gG,GAAOwS,GACvBvS,EAAK0gG,EAAS1gG,EAAIuS,GAG1B3gC,IACIgT,IAAKmb,EACL10B,IAAK20B,GAGb,MAAOpuB,IAEXitI,gBAAiB,SAAU7rI,GAAV,GAITksI,GAAcr4C,EACTs4C,EACD9N,EAEI5wG,EAPR47G,EAAarpI,EAAQqpI,WACrB91H,EAAQ8vE,GAAQgmD,GAAcA,EAAW9xI,OAAS,EAClD60I,EAAUz8B,EAEd,KAASw8B,EAAa,EAAGA,EAAa54H,EAAO44H,IACrC9N,EAAWgL,EAAW8C,GACtB9N,GAAY6N,IACRz+G,EAAO8/F,EAAiB8Q,EAAU6N,GAClCz+G,EAAO,IACP2+G,EAAU5tI,KAAKoT,IAAIw6H,EAAS3+G,GAExBomE,EADAu4C,GAAW7Z,GACJhE,GACA6d,GAAW5Z,GAAgC,EAAfzE,GAC5BS,GACA4d,GAAW3Z,GACXhE,GACA2d,GAAWre,GACXW,GACA0d,GAAWhe,GACXO,GACAyd,GAAW3e,GACXmB,GAEAE,KAInBod,EAAe7N,CAEnB,OAAOxqC,IAAQ66B,IAEnB2d,eAAgB,SAAUhD,GACtB,GAAI9qF,GAAQ8qF,EAAWiD,MAIvB,OAHK/tF,KACDA,EAAQ8qF,EAAWiD,OAASpgB,EAAkBmd,IAE3C9qF,GAEXmrF,WAAY,WACR,OACI93H,IAAK,EACLvZ,IAAKuH,KAAKI,QAAQqpI,WAAW9xI,SAGrCkyI,aAAc,WAAA,GACNzpI,GAAUJ,KAAKI,QACfqpI,EAAarpI,EAAQqpI,WACrB5Z,EAAWzvH,EAAQyvH,SACnBG,EAAe5vH,EAAQ4vH,cAAgB,EACvC2c,EAAiB3sI,KAAK4sI,kBACtB56H,EAAMg8G,EAAO5tH,EAAQ4R,KAAO26H,EAAe36H,KAC3CvZ,EAAMu1H,EAAO5tH,EAAQ3H,KAAOk0I,EAAel0I,KAC3Co0I,EAAS,EAAGC,EAAS,CASzB,OARIrD,GAAW9xI,SACXk1I,EAAS9c,EAAU/9G,EAAKy3H,EAAW,GAAI5Z,EAAUG,GACjD8c,EAAS/c,EAAUt3H,EAAKgxI,EAAW,GAAI5Z,EAAUG,GAC7C5vH,EAAQ0rI,kBACRe,EAASjuI,KAAKpE,MAAMqyI,GACpBC,EAAS1sI,EAAQmoI,UAAY3pI,KAAKpE,MAAMsyI,GAAUluI,KAAK2pD,KAAKukF,MAIhE96H,IAAK66H,EACLp0I,IAAKq0I,IAGbpI,YAAa,WAAA,GACLtkI,GAAUJ,KAAKI,QACfwkI,EAAexkI,EAAQ2jI,OACvBplF,EAAQ3+C,KAAK6pI,eACb73H,EAAMpT,KAAKpE,MAAMmkD,EAAM3sC,KACvBvZ,EAAMmG,KAAK2pD,KAAK5J,EAAMlmD,IAC1B,QACIuZ,IAAKA,EAAM4yH,EAAaz2F,KACxB11C,IAAK2H,EAAQqpI,WAAW9xI,OAASc,GAAO2H,EAAQmoI,UAAY,EAAI,GAAK,IAG7EqE,gBAAiB,WAAA,GACTxsI,GAAUJ,KAAKI,QACfu+C,EAAQ3+C,KAAKysI,eAAersI,EAAQwpI,eAAiBxpI,EAAQqpI,YAC7DhxI,EAAMu1H,EAAOrvE,EAAMlmD,IAIvB,QAHK2H,EAAQmoI,WAAa5Y,EAAWl3H,EAAKuH,KAAK+sI,kBAAkBt0I,EAAK2H,GAAS,MAC3E3H,EAAMuH,KAAK+sI,kBAAkBt0I,EAAK2H,GAAS,GAAM,KAGjD4R,IAAKg8G,EAAOrvE,EAAM3sC,KAClBvZ,IAAKA,IAGbu0I,aAAc,WAAA,GACN5sI,GAAUJ,KAAKI,QACf6sI,EAAW7sI,EAAQ0rI,mBAAoB,EACvChC,EAAa9pI,KAAK4sI,kBAClB56H,EAAM5R,EAAQ4R,IACdvZ,EAAM2H,EAAQ3H,GAOlB,OANKuZ,KACDA,EAAMi7H,EAAWjtI,KAAK+sI,kBAAkBjD,EAAW93H,IAAK5R,GAAS,GAAS0pI,EAAW93H,KAEpFvZ,IACDA,EAAMw0I,EAAWjtI,KAAK+sI,kBAAkBjD,EAAWrxI,IAAK2H,GAAUA,EAAQmoI,WAAauB,EAAWrxI,MAGlGuZ,IAAKA,EACLvZ,IAAKA,IAGby0I,WAAY,WACR,GAAIvuF,GAAQ3+C,KAAKysI,eAAezsI,KAAKI,QAAQwpI,eAAiB5pI,KAAKI,QAAQqpI,WAC3E,QACIz3H,IAAKg8G,EAAOrvE,EAAM3sC,KAClBvZ,IAAKu1H,EAAOrvE,EAAMlmD,OAG1B8yI,IAAK,SAAU73G,GAAV,GACGtzB,GAAUJ,KAAKI,QACf2kI,EAAU/kI,KAAK+kI,UACfhnI,EAAOqC,EAAQk8B,SAAWyoG,EAAQ9rI,SAAW8rI,EAAQ/rI,QACrDunF,EAAMvgF,KAAKgtI,eACXh7H,EAAMuuE,EAAIvuE,IACVvZ,EAAM8nF,EAAI9nF,IACV00I,EAAcntI,KAAKmtI,cACnB/vG,EAAQr/B,GAAQtF,EAAMuZ,GACtB5S,EAASqQ,GAAMikB,EAAQ0J,EAAOwzF,IAC9BzjG,EAAO2gG,EAAS97G,EAAK5S,GACrBguB,EAAK0gG,EAASr1H,EAAK2G,GACnBguI,EAAWptI,KAAKkpI,WAAWxZ,EAAOviG,GAAOuiG,EAAOtiG,GAAKsiG,EAAOyd,EAAYn7H,KAAM09G,EAAOyd,EAAY10I,KAAM2G,EAC3G,IAAIguI,EAOA,MANAA,GAASp7H,IAAMg8G,EAAOof,EAASp7H,KAC/Bo7H,EAAS30I,IAAMu1H,EAAOof,EAAS30I,KAC/B20I,EAASvd,SAAWzvH,EAAQyvH,SAC5Bud,EAASpd,aAAe5vH,EAAQ4vH,cAAgB,EAChDod,EAASrB,gBAAkB3rI,EAAQ2rI,gBACnCqB,EAASpB,oBAAsB5rI,EAAQ4rI,oBAChCoB,GAGf5B,YAAa,SAAUv8H,EAAOvX,GAAjB,GACL8zI,GAAcpU,GAAanzH,GAAGunI,YAAYrjI,KAAKnI,KAAMiP,EAAOvX,GAC5Dw1I,EAAaltI,KAAKgtI,eAClBK,EAAertI,KAAK6pI,eACpBzsG,EAAQqyF,EAASyd,EAAWz0I,IAAKy0I,EAAWl7H,MAAQq7H,EAAa50I,IAAM40I,EAAar7H,KACpF5R,EAAUJ,KAAKI,QACf4R,EAAM87G,EAASof,EAAWl7H,IAAKw5H,EAAYx5H,IAAMorB,GACjD3kC,EAAMq1H,EAASof,EAAWl7H,IAAKw5H,EAAY/yI,IAAM2kC,EACrD,QACIprB,IAAKA,EACLvZ,IAAKA,EACLo3H,SAAUzvH,EAAQ2rI,gBAClB/b,aAAc5vH,EAAQ4rI,sBAG9Bf,UAAW,SAAUv3G,GAAV,GAYC45G,GACAC,EACAC,EACAC,EACA5/G,EACA6/G,EACAC,EAAkB5f,EAQd6f,EAzBRxtI,EAAUJ,KAAKI,QACf+sI,EAAcntI,KAAKmtI,cACnBr9G,EAAe1vB,EAAQ0vB,aACvB+/F,EAAWzvH,EAAQyvH,SACnBG,EAAe5vH,EAAQ4vH,cAAgB,EACvCzvC,EAAMvgF,KAAKgtI,eACXrB,EAAWprD,EAAIvuE,IACf45H,EAAWrrD,EAAI9nF,IACfuZ,EAAMy8G,EAAYkd,EAAUj4G,EAAQs8F,EAAcH,EAAU//F,GAC5Dr3B,EAAMg2H,EAAYmd,GAAWl4G,EAAQs8F,EAAcH,EAAU//F,EACjE,IAAI1vB,EAAQ2rI,kBAAoBxU,GAQ5B,GAPI+V,EAAoBltI,EAAQktI,kBAC5BC,EAAgBntI,EAAQmtI,cACxBC,EAAU79G,GAAK29G,EAAkBzd,IAAa0d,EAAgBzd,GAAcD,GAC5E4d,EAAYhe,EAASmc,EAAUD,GAC/B99G,EAAO4hG,EAASh3H,EAAKuZ,GACrB07H,EAAgBpW,GAAWp5H,QAAQ2xH,GAEnChiG,EAAOiiG,GAAcD,IAAaA,IAAaT,GAC/CS,EAAWyH,GAAWoW,EAAgB,GACtCC,EAAmBh+G,GAAK29G,EAAkBzd,IAC1C9B,GAAS0f,GAAaF,EAAgB,GAAKI,EAAmB7d,GAAcD,IAAa,EACzF79G,EAAM87G,EAAS6d,EAAU5d,GACzBt1H,EAAMq1H,EAAS8d,GAAW7d,OACvB,IAAIlgG,EAAO2/G,GAAW3d,IAAalB,GAAO,CACzCif,EAAY,CAChB,GAAG,CACCF,IACA7d,EAAWyH,GAAWoW,GACtBE,EAAY,EACZ7f,EAAQ,EAAI+B,GAAcD,EAC1B,GACI8d,GAAmBL,EAAkBzd,GAAU+d,GAC/CA,UACKA,EAAYN,EAAkBzd,GAAUl4H,QAAUo2H,EAAQ4f,EAAmBF,SACjF5d,IAAalB,IAASZ,EAAQ4f,EAAmBF,EAC1D1f,IAASA,EAAQ4f,EAAmBF,GAAa,EAC7C1f,EAAQ,IACR/7G,EAAM87G,EAAS6d,GAAW5d,GAC1Bt1H,EAAMq1H,EAAS8d,EAAU7d,GACzB/7G,EAAM87G,EAAS97G,EAAK8yE,GAAWrsF,EAAK00I,EAAYn7H,IAAKm7H,EAAY10I,KAAOA,GACxEA,EAAMq1H,EAASr1H,EAAKqsF,GAAW9yE,EAAKm7H,EAAYn7H,IAAKm7H,EAAY10I,KAAOuZ,IAMpF,GAFAA,EAAMg8G,EAAOlpC,GAAW9yE,EAAKm7H,EAAYn7H,IAAKm7H,EAAY10I,MAC1DA,EAAMu1H,EAAOlpC,GAAWrsF,EAAK00I,EAAYn7H,IAAKm7H,EAAY10I,MACtDuZ,GAAOvZ,GAAOg3H,EAASh3H,EAAKuZ,GAAO,EACnC,OACIA,IAAKA,EACLvZ,IAAKA,EACLo3H,SAAUzvH,EAAQ2rI,gBAClB/b,aAAc5vH,EAAQ4rI,sBAIlCmB,YAAa,WAAA,GACL/sI,GAAUJ,KAAKI,QACf8sI,EAAaltI,KAAKktI,aAClBl7H,EAAMhS,KAAK+sI,kBAAkB/e,EAAOkf,EAAWl7H,KAAM5R,GAAS,GAC9D3H,EAAMy0I,EAAWz0I,GAIrB,OAHK2H,GAAQmoI,YACT9vI,EAAMuH,KAAK+sI,kBAAkBt0I,EAAK2H,GAAS,EAAMuvH,EAAWl3H,EAAKuH,KAAK+sI,kBAAkBt0I,EAAK2H,GAAS,OAGtG4R,IAAKA,EACLvZ,IAAKA,IAGbkmD,MAAO,SAAUkvF,GAAV,GACCztI,GAAUytI,GAAgB7tI,KAAKI,QAC/BqpI,EAAarpI,EAAQqpI,WACrBqE,EAAW1tI,EAAQyvH,WAAa0H,GAChC1H,EAAWie,EAAWxW,GAAW,GAAKl3H,EAAQyvH,SAC9CG,EAAe5vH,EAAQ4vH,cAAgB,EACvC+d,GACAle,SAAUA,EACVG,aAAcA,EACdlgG,aAAc1vB,EAAQ0vB,cAEtB68G,EAAiB3sI,KAAKysI,eAAehD,GACrCz3H,EAAMg8G,EAAO5tH,EAAQ4R,KAAO26H,EAAe36H,KAC3CvZ,EAAMu1H,EAAO5tH,EAAQ3H,KAAOk0I,EAAel0I,IAC/C,QACIuZ,IAAKhS,KAAK+sI,kBAAkB/6H,EAAK+7H,GAAa,GAC9Ct1I,IAAKuH,KAAK+sI,kBAAkBt0I,EAAKs1I,GAAa,GAAM,KAG5D7B,aAAc,SAAU9rI,GAWpB,IAXU,GAUN4tI,GAAWruG,EAAMsuG,EATjBtB,EAAiB3sI,KAAKysI,eAAersI,EAAQqpI,YAC7CyE,EAAOlgB,EAAO5tH,EAAQ3H,KAAOk0I,EAAel0I,KAAOu1H,EAAO5tH,EAAQ4R,KAAO26H,EAAe36H,KACxFu7H,EAAgBntI,EAAQmtI,eAAiBvtI,KAAKI,QAAQmtI,cACtDO,EAAW1tI,EAAQyvH,WAAa0H,GAChC4W,EAAa,EACbte,EAAWie,EAAWxW,GAAW6W,KAAgB/tI,EAAQyvH,SACzDue,EAAQF,EAAOpe,GAAcD,GAC7BqD,EAAakb,EACbd,EAAoB1yI,MAAeoF,KAAKI,QAAQktI,kBAAmBltI,EAAQktI,oBAEvE3tG,GAAQyuG,GAASb,GAGrB,GAFAS,EAAYA,GAAaV,EAAkBzd,GAAUrpH,MAAM,GAC3DynI,EAAWD,EAAUl8H,QAEjB6tB,EAAOsuG,EACPG,EAAQlb,EAAavzF,MAClB,CAAA,GAAIkwF,IAAalgG,GAAK2nG,IAAa,CACtC33F,EAAO/gC,KAAK2pD,KAAK2qE,EAAaqa,EAC9B,OACG,IAAIO,EAIJ,CACCM,EAAQb,IACR5tG,EAAO/gC,KAAK2pD,KAAK2qE,EAAaqa,GAElC,OAPA1d,EAAWyH,GAAW6W,MAAiBx+G,GAAK2nG,IAC5CpE,EAAagb,EAAOpe,GAAcD,GAClCme,EAAY,KAQpB5tI,EAAQ4vH,aAAerwF,EACvBv/B,EAAQyvH,SAAWA,GAEvBuc,gBAAiB,SAAUhsI,GAAV,GASTiuI,GACKxiI,EATL49H,EAAarpI,EAAQqpI,WACrB5Z,EAAWzvH,EAAQyvH,SACnBG,EAAe5vH,EAAQ4vH,cAAgB,EACvCse,EAActgB,EAAO1B,EAAkBmd,GAAYhxI,KACnD8nF,EAAMvgF,KAAK2+C,MAAMv+C,GACjB4R,EAAMuuE,EAAIvuE,IACVvZ,EAAM8nF,EAAI9nF,IACV+nD,IAEJ,KAAS30C,EAAOmG,EAAKnG,EAAOpT,IACxB+nD,EAAO14C,KAAK+D,GACZwiI,EAAW5f,EAAY5iH,EAAMmkH,EAAcH,EAAUzvH,EAAQ0vB,gBACzDu+G,EAAWC,IAAgBluI,EAAQ3H,KAHVoT,EAAOwiI,GAOxCjuI,EAAQwpI,cAAgBH,EACxBrpI,EAAQqpI,WAAajpF,GAEzBusF,kBAAmB,SAAUnvI,EAAOs0H,EAAaqc,EAAOC,GAArC,GAMP7uG,GACA8uG,EANJruI,EAAU8xH,GAAelyH,KAAKI,QAC9ByvH,EAAWzvH,EAAQyvH,SACnBG,EAAe5vH,EAAQ4vH,cAAgB,EACvC/gH,EAAQjP,KAAKmsI,YACjB,OAAIl9H,IACI0wB,EAAOowF,EAAUnyH,EAAOqR,EAAO4gH,EAAUG,GACzCye,EAAcF,EAAQ3vI,KAAK2pD,KAAK5oB,GAAQ/gC,KAAKpE,MAAMmlC,GACnD6uG,GACAC,IAEGhgB,EAAYx/G,EAAOw/H,EAAcze,EAAcH,EAAUzvH,EAAQ0vB,eAErE2+F,EAAY7wH,EAAO2wI,EAAQve,EAAe,EAAGH,EAAUzvH,EAAQ0vB,eAE1Eg1G,gBAAiB,SAAU3yH,EAAOyyH,GAAjB,GAQLtW,GAOA74F,EAdJr1B,EAAUJ,KAAKI,QACfumB,EAAWvmB,EAAQimB,UAAYjmB,EAAQimB,UAAUlU,GAAS,KAC1DtG,EAAOzL,EAAQqpI,WAAWt3H,GAC1B09G,EAAWzvH,EAAQyvH,SACnB6e,EAAa9J,EAAa+J,YAAY9e,GACtCrsH,GAAU,CAOd,IANIpD,EAAQmoI,WACJja,EAAcgB,EAAUzjH,EAAMgkH,EAAUzvH,EAAQ0vB,cACpDtsB,EAAUmsH,EAAWrB,EAAaziH,IAC1BzL,EAAQ0rI,kBAChBtoI,GAAWmsH,EAAW3vH,KAAK2+C,QAAQlmD,IAAKoT,IAExCrI,IACAohI,EAAa77H,OAAS67H,EAAa77H,QAAU2lI,EACzCj5G,EAAOz1B,KAAK8oI,cAAcj9H,EAAM8a,EAAUi+G,IAE1C,MAAO,IAAI/N,IAAUhrH,EAAM4pB,EAAMtjB,EAAOwU,EAAUi+G,IAI9DiG,cAAe,SAAUjtI,GAAV,GACPwC,GAAUJ,KAAKI,QACfqpI,EAAarpI,EAAQqpI,WACrBt3H,IAIJ,OAHIs3H,GAAW9xI,SACXwa,EAAQvT,KAAKpE,MAAMu1H,EAAU/B,EAAOpwH,GAAQ6rI,EAAW,GAAIrpI,EAAQyvH,SAAUzvH,EAAQ4vH,cAAgB,KAElG79G,GAEX20H,QAAS,SAAUlkI,EAAGC,EAAGmmI,GAAhB,GACD/5H,GAAQrM,EACRlL,EAAMmL,CAOV,cANWoM,KAAUrT,KACjBqT,EAAQjP,KAAK6qI,cAAc57H,UAEpBvX,KAAQkE,KACflE,EAAMsI,KAAK6qI,cAAcnzI,IAEtB0/H,GAAanzH,GAAG6iI,QAAQ3+H,KAAKnI,KAAMiP,EAAOvX,EAAKsxI,IAE1DI,WAAY,WAAA,GACJhpI,GAAUJ,KAAKI,QACfu+C,EAAQ3+C,KAAKysI,eAAersI,EAAQwpI,eAAiBxpI,EAAQqpI,WACjE,QACIz3H,IAAKg8G,EAAOrvE,EAAM3sC,KAClBvZ,IAAKu1H,EAAOrvE,EAAMlmD,SAI9B4zH,EAAkBmL,IACdt4H,KAAM21H,GACNkP,QAAU4K,YAAatX,IACvBiW,mBACIl4H,cACI,EACA,GACA,KAEJD,SACI,EACA,EACA,EACA,GACA,IAEJ9I,SACI,EACA,EACA,EACA,GACA,IAEJ6G,OACI,EACA,EACA,GAEJjH,MACI,EACA,EACA,GAEJq9H,OACI,EACA,GAEJp9H,QACI,EACA,EACA,EACA,GAEJm9H,OACI,EACA,EACA,EACA,EACA,GACA,GACA,KAGRkE,cAAe,KAmEf9V,GAAkB74H,KAAKuoC,IAAI,IAAKypF,GAAoB,GACpD8G,GAAcT,GAAKv2H,QACnBC,KAAM,SAAU6wH,EAAWC,EAAWrxH,EAASw8H,GAAzC,GACE9K,GAAcP,GAAgBC,EAAWC,EAAWrxH,GACpDwuI,EAAe3c,GAAiBH,EAAa1xH,EACjD62H,IAAKhzH,GAAGtD,KAAKwH,KAAKnI,KAAMkyH,GAAYJ,EAAa1xH,GAAUw8H,GAC3D58H,KAAKmrI,SAAWyD,EAAa58H,IAC7BhS,KAAKorI,SAAWwD,EAAan2I,IAC7BuH,KAAK6uI,eAAiBD,EAAa/c,UACnC7xH,KAAKwxH,UAAYA,EACjBxxH,KAAKyxH,UAAYA,GAErB/1F,WAAY,WACR,MAAO,IAEXijB,MAAO,WACH,GAAIv+C,GAAUJ,KAAKI,OACnB,QACI4R,IAAK5R,EAAQ4R,IACbvZ,IAAK2H,EAAQ3H,MAGrBq2I,aAAc,SAAUC,GAAV,GAIN3uI,GACAu+C,CAJJ,OAAkB,KAAdowF,EACO,GAEP3uI,EAAUJ,KAAKI,QACfu+C,EAAQv+C,EAAQ3H,IAAM2H,EAAQ4R,IAC3BpT,KAAKpE,MAAMiV,GAAMkvC,EAAQowF,EAAW5iB,KAAoB,IAEnE+d,iBAAkB,SAAUj2C,EAAM4xC,GAAhB,GAkBLloI,GAjBLyC,EAAUJ,KAAKI,QACfk8B,EAAWl8B,EAAQk8B,SACnBh8B,EAAUF,EAAQE,QAClBykI,EAAU/kI,KAAK+kI,UACf/qB,EAAW19E,EAAWyoG,EAAQ9rI,SAAW8rI,EAAQ/rI,QACjD2lD,EAAQv+C,EAAQ3H,IAAM2H,EAAQ4R,IAC9BorB,EAAQ48E,EAAWr7D,EACnBhf,EAAOs0D,EAAO72D,EACd4xG,EAAYhvI,KAAK8uI,aAAa76C,GAC9B3kE,GAAOgN,KAAgB,IAAMh8B,KAAe,GAC5C2uI,EAAoB,IAAR3/G,EAAY,EAAI,EAC5BuhD,KACAR,EAAM00D,GAASzoG,EAAWhrB,GAAIyiH,IAAKkb,GACnCC,EAAW,CAIf,KAHIrJ,IACAqJ,EAAWrJ,EAAW5xC,GAEjBt2F,EAAM,EAAGA,EAAMqxI,EAAWrxI,IAC3BA,EAAMuxI,IAAa,GACnBr+D,EAAU/oE,KAAK2H,GAAM4gE,EAAK87C,KAE9B97C,GAAY1wC,EAAOrQ,CAEvB,OAAOuhD,IAEXk1D,sBAAuB,WACnB,MAAO/lI,MAAKkqI,iBAAiBlqI,KAAKI,QAAQyxH,YAE9CmU,sBAAuB,WACnB,MAAOhmI,MAAKkqI,iBAAiBlqI,KAAKI,QAAQmyH,YAE9CuU,QAAS,SAAUlkI,EAAGC,EAAGmmI,GAAhB,GAID5oI,GACAk8B,EACAh8B,EACA+pI,EACAtF,EACAtX,EACAzT,EACA1qF,EACAqQ,EACA8qG,EACAx7H,EACAvX,EAWA0vF,EAAIC,CAUR,OAnCc,UAAV2hD,IACAA,GAAQ,GAER5oI,EAAUJ,KAAKI,QACfk8B,EAAWl8B,EAAQk8B,SACnBh8B,EAAUF,EAAQE,QAClB+pI,EAAY/tG,EAAWhrB,GAAIyiH,GAC3BgR,EAAU/kI,KAAK+kI,UACftX,EAAYsX,EAAQsF,GAAa/pI,EAAU,EAAI,IAC/C05G,EAAW19E,EAAWyoG,EAAQ9rI,SAAW8rI,EAAQ/rI,QACjDs2B,EAAMhvB,KAAe,EACrBq/B,EAAOrQ,GAAO0qF,GAAY55G,EAAQ3H,IAAM2H,EAAQ4R,MAChDy4H,EAAU,GAAI7d,IAAImY,EAAQ/sE,GAAI+sE,EAAQ9sE,GAAI8sE,EAAQ/sE,GAAI+sE,EAAQ9sE,IAC9DhpD,EAAQrM,EACRlL,EAAMmL,EACL4gF,GAAQx0E,KACTA,EAAQvX,GAAO,GAEd+rF,GAAQ/rF,KACTA,EAAMuX,GAAS,GAEf+5H,IACA/5H,EAAQrQ,KAAKnG,IAAImG,KAAKoT,IAAI/C,EAAO7O,EAAQ3H,KAAM2H,EAAQ4R,KACvDta,EAAMkH,KAAKnG,IAAImG,KAAKoT,IAAIta,EAAK0I,EAAQ3H,KAAM2H,EAAQ4R,MAGnDsqB,GACA8qD,EAAKhnF,EAAQ3H,IAAMmG,KAAKnG,IAAIwW,EAAOvX,GACnC2vF,EAAKjnF,EAAQ3H,IAAMmG,KAAKoT,IAAI/C,EAAOvX,KAEnC0vF,EAAKxoF,KAAKoT,IAAI/C,EAAOvX,GAAO0I,EAAQ4R,IACpCq1E,EAAKzoF,KAAKnG,IAAIwW,EAAOvX,GAAO0I,EAAQ4R,KAExCy4H,EAAQJ,EAAY,GAAKhZ,GAAgB5D,EAAY9tF,GAAQr/B,EAAU+mF,EAAKD,IAC5EqjD,EAAQJ,EAAY,GAAKhZ,GAAgB5D,EAAY9tF,GAAQr/B,EAAU8mF,EAAKC,IACrEojD,GAEX0E,SAAU,SAAU/kD,GAAV,GAiBFxsF,GAhBAwC,EAAUJ,KAAKI,QACfk8B,EAAWl8B,EAAQk8B,SACnBh8B,EAAUF,EAAQE,QAClB7H,GAAa2H,EAAQ3H,IACrBuZ,GAAa5R,EAAQ4R,IACrBq4H,EAAY/tG,EAAWhrB,GAAIyiH,GAC3BgR,EAAU/kI,KAAK+kI,UACftX,EAAYsX,EAAQsF,GAAa/pI,EAAU,EAAI,IAC/C05G,EAAW19E,EAAWyoG,EAAQ9rI,SAAW8rI,EAAQ/rI,QACjDs2B,EAAMhvB,KAAe,EACrBlB,EAASkwB,GAAO86D,EAAMigD,GAAa5c,GACnC9tF,GAAQlnC,EAAMuZ,GAAOgoG,EACrBo1B,EAAchwI,EAASugC,CAC3B,OAAIvgC,GAAS,GAAKA,EAAS46G,EAChB,MAEPp8G,EAAQ0+B,EAAW7jC,EAAM22I,EAAcp9H,EAAMo9H,EAC1C3/H,GAAM7R,EAAOgzH,MAExBoa,eAAgB,SAAUt3G,GAAV,GACRtzB,GAAUJ,KAAKI,QACfk8B,EAAWl8B,EAAQk8B,SACnBh8B,EAAUF,EAAQE,QAClB7H,EAAM2H,EAAQ3H,IACduZ,EAAM5R,EAAQ4R,IACd+yH,EAAU/kI,KAAK+kI,UACfhnI,EAAOu+B,EAAWyoG,EAAQ9rI,SAAW8rI,EAAQ/rI,QAC7C2lD,EAAQlmD,EAAMuZ,EACdorB,EAAQr/B,EAAO4gD,EACfv/C,EAASqQ,GAAMikB,EAAQ0J,EAAOwzF,GAIlC,QAHKt0F,IAAYh8B,GAAcg8B,GAAYh8B,IACvClB,GAAUA,IAGV4S,IAAKA,EAAM5S,EACX3G,IAAKA,EAAM2G,IAGnBisI,WAAY,SAAU33G,GAAV,GACJtzB,GAAUJ,KAAKI,QACfhB,GAAUs0B,EAAQtzB,EAAQyxH,SAC9B,QACI7/G,IAAK5R,EAAQ4R,IAAM5S,EACnB3G,IAAK2H,EAAQ3H,IAAM2G,IAG3BulI,YAAa,WACT,MAAO3kI,MAAK8uI,aAAa9uI,KAAKI,QAAQyxH,YAE1CiT,gBAAiB,SAAU3yH,EAAOyyH,GAAjB,GACTxkI,GAAUJ,KAAKI,QACfxC,EAAQ6R,GAAMrP,EAAQ4R,IAAMG,EAAQ/R,EAAQyxH,UAAWjB,IACvDn7F,EAAOz1B,KAAK8oI,cAAclrI,EAAO,KAAMgnI,EAC3C,OAAO,IAAI/N,IAAUj5H,EAAO63B,EAAMtjB,EAAO,KAAMyyH,IAEnD+D,iBAAkB,SAAU/qI,GACxB,GAAI+gD,GAAQ3+C,KAAK2+C,OACjB,OAAOA,GAAM3sC,KAAOpU,GAASA,GAAS+gD,EAAMlmD,KAEhD8yI,IAAK,SAAU73G,GACX,GAAIirB,GAAQ3+C,KAAKgrI,eAAet3G,EAChC,OAAO1zB,MAAKkpI,WAAWvqF,EAAM3sC,IAAK2sC,EAAMlmD,IAAKuH,KAAKmrI,SAAUnrI,KAAKorI,WAErEI,YAAa,SAAUv8H,EAAOvX,GAAjB,GACLgkC,GAAa17B,KAAKmvI,SAASlgI,GAC3B2sB,EAAW57B,KAAKmvI,SAASz3I,GACzBsa,EAAMpT,KAAKoT,IAAI0pB,EAAYE,GAC3BnjC,EAAMmG,KAAKnG,IAAIijC,EAAYE,EAC/B,IAAI57B,KAAKqvI,aAAar9H,EAAKvZ,GACvB,OACIuZ,IAAKA,EACLvZ,IAAKA,IAIjBwyI,UAAW,SAAUv3G,GAAV,GACH6sD,GAAMvgF,KACNmrI,EAAW5qD,EAAI4qD,SACfC,EAAW7qD,EAAI6qD,SACfkE,EAAWtvI,KAAKqrI,WAAW33G,GAC3B1hB,EAAM8yE,GAAWwqD,EAASt9H,IAAKm5H,EAAUC,GACzC3yI,EAAMqsF,GAAWwqD,EAAS72I,IAAK0yI,EAAUC,EAC7C,IAAIprI,KAAKqvI,aAAar9H,EAAKvZ,GACvB,OACIuZ,IAAKA,EACLvZ,IAAKA,IAIjB42I,aAAc,SAAUr9H,EAAKvZ,GACzB,MAAOA,GAAMuZ,EAAMylH,MAoE3BpL,EAAkBqL,IACdx4H,KAAM,UACN8S,IAAK,EACLvZ,IAAK,EACL6jC,UAAU,EACV8qG,gBACI5jI,SAAS,EACTxK,MAAO,EACP28E,MAAOw+C,IAEX4P,QAAUh7H,OAAQ,0BAClBs7B,OAAQ,IAERszF,GAAgBV,GAAKv2H,QACrBC,KAAM,SAAU6wH,EAAWC,EAAWS,EAAa0K,GAA7C,GACE5qH,GAAMg8G,EAAOwD,GACb/4H,EAAMu1H,EAAOyD,GACbnB,EAAcsM,EAAajE,KAC3Bv4H,EAAU8xH,KACd9xH,GAAUxF,GAAWwF,OACjB4R,IAAK+E,EAAUu5G,EAAalwH,EAAQ4R,KACpCvZ,IAAKse,EAAUu5G,EAAalwH,EAAQ3H,KACpC86H,kBAAmBhD,EAAWD,EAAalwH,EAAQmvI,oBAAsBnvI,EAAQmzH,qBAErFnzH,EAAU0yH,GAAc9gH,EAAKvZ,EAAK2H,GAClC62H,GAAKhzH,GAAGtD,KAAKwH,KAAKnI,KAAMI,EAASw8H,GACjC58H,KAAKwxH,UAAYx/G,EACjBhS,KAAKyxH,UAAYh5H,EACjBuH,KAAKmrI,SAAWzb,EAAOJ,EAAUI,EAAO19G,GAAO,EAAG5R,EAAQyvH,WAC1D7vH,KAAKorI,SAAW1b,EAAOH,EAASG,EAAOj3H,GAAO,EAAG2H,EAAQyvH,YAE7DlxE,MAAO,WACH,GAAIv+C,GAAUJ,KAAKI,OACnB,QACI4R,IAAK5R,EAAQ4R,IACbvZ,IAAK2H,EAAQ3H,MAGrBq2I,aAAc,SAAUC,GACpB,GAAI3uI,GAAUJ,KAAKI,OACnB,OAAOxB,MAAKpE,MAAM6F,EAASD,EAAQ4R,IAAK5R,EAAQ3H,IAAK2H,EAAQyvH,UAAYkf,EAAY,IAEzF7E,iBAAkB,SAAUvqG,GAAV,GAYL7kC,GACD+Q,EACAwkE,EAbJjwE,EAAUJ,KAAKI,QACfk8B,EAAWl8B,EAAQk8B,SACnByoG,EAAU/kI,KAAK+kI,UACfz1G,GAAOgN,KAAgB,IAAMl8B,EAAQE,WAAe,GACpD2uI,EAAoB,IAAR3/G,EAAY,EAAI,EAC5BrgB,EAAQ81H,GAASzoG,EAAWhrB,GAAIyiH,IAAKkb,GACrCD,EAAYhvI,KAAK8uI,aAAanvG,GAC9B6vG,EAAY/f,EAASrvH,EAAQ3H,IAAK2H,EAAQ4R,KAC1CgoG,EAAW19E,EAAWyoG,EAAQ9rI,SAAW8rI,EAAQ/rI,QACjDokC,EAAQ48E,EAAWw1B,EACnB3+D,GAAa5hE,EACjB,KAASnU,EAAI,EAAGA,EAAIk0I,EAAWl0I,IACvB+Q,EAAO4iH,EAAYruH,EAAQ4R,IAAKlX,EAAI6kC,EAAMv/B,EAAQyvH,UAClDx/C,EAAMphE,EAAQwgH,EAAS5jH,EAAMzL,EAAQ4R,KAAOorB,EAAQ9N,EACxDuhD,EAAU/oE,KAAK2H,GAAM4gE,EAAK87C,IAE9B,OAAOt7C,IAEXk1D,sBAAuB,WACnB,MAAO/lI,MAAKkqI,iBAAiBlqI,KAAKI,QAAQyxH,YAE9CmU,sBAAuB,WACnB,MAAOhmI,MAAKkqI,iBAAiBlqI,KAAKI,QAAQmyH,YAE9CuU,QAAS,SAAUlkI,EAAGC,EAAGmmI,GACrB,MAAOtR,IAAY3wH,UAAU+/H,QAAQ3+H,KAAKnI,KAAMguH,EAAOprH,GAAIorH,EAAOnrH,GAAImmI,IAE1EmG,SAAU,SAAU/kD,GAChB,GAAIxsF,GAAQ85H,GAAY3wH,UAAUooI,SAAShnI,KAAKnI,KAAMoqF,EACtD,OAAiB,QAAVxsF,EAAiBowH,EAAOpwH,GAAS,MAE5C+mI,YAAa,WACT,MAAO3kI,MAAK8uI,aAAa9uI,KAAKI,QAAQyxH,YAE1CiT,gBAAiB,SAAU3yH,EAAOyyH,GAAjB,GAOT8J,GAEAj5G,EARAr1B,EAAUJ,KAAKI,QACfhB,EAAS+S,EAAQ/R,EAAQyxH,UACzBhmH,EAAOzL,EAAQ4R,GAOnB,OANI5S,GAAS,IACTyM,EAAO4iH,EAAY5iH,EAAMzM,EAAQgB,EAAQyvH,WAEzC6e,EAAa9J,EAAa+J,YAAYvuI,EAAQyvH,UAClD+U,EAAa77H,OAAS67H,EAAa77H,QAAU2lI,EACzCj5G,EAAOz1B,KAAK8oI,cAAcj9H,EAAM,KAAM+4H,GACnC,GAAI/N,IAAUhrH,EAAM4pB,EAAMtjB,EAAO,KAAMyyH,IAElDoG,eAAgB,SAAUt3G,EAAO+7G,GAAjB,GACRrvI,GAAUJ,KAAKI,QACfyvH,EAAWzvH,EAAQyvH,SACnB//F,EAAe1vB,EAAQ0vB,aACvBi1G,EAAU/kI,KAAK+kI,UACfhnI,EAAOqC,EAAQk8B,SAAWyoG,EAAQ9rI,SAAW8rI,EAAQ/rI,QACrD2lD,EAAQ3+C,KAAK2+C,QACbvhB,EAAQr/B,EAAO0xH,EAAS9wE,EAAMlmD,IAAKkmD,EAAM3sC,KACzC5S,EAASqQ,GAAMikB,EAAQ0J,EAAOwzF,IAC9BzjG,EAAO2gG,EAAS1tH,EAAQ4R,IAAK5S,GAC7BguB,EAAK0gG,EAAS1tH,EAAQ3H,IAAK2G,EAK/B,OAJKqwI,KACDtiH,EAAOshG,EAAYthG,EAAM,EAAG0iG,EAAU//F,GACtC1C,EAAKqhG,EAAYrhG,EAAI,EAAGyiG,EAAU//F,KAGlC9d,IAAKmb,EACL10B,IAAK20B,IAGbi+G,WAAY,SAAU33G,GAKlB,IALQ,GAMAirB,GACAhf,EANJ4gD,EAAMvgF,KAAKI,QACX+sB,EAAOozD,EAAIvuE,IACXob,EAAKmzD,EAAI9nF,IACT4zI,EAASztI,KAAKC,IAAI60B,GACf24G,KACC1tF,EAAQ8wE,EAAStiG,EAAMC,GACvBuS,EAAO/gC,KAAK6Q,MAAc,GAARkvC,GAClBjrB,EAAQ,GACRvG,EAAO2gG,EAAS3gG,EAAMwS,GACtBvS,EAAK0gG,EAAS1gG,GAAKuS,KAEnBxS,EAAO2gG,EAAS3gG,GAAOwS,GACvBvS,EAAK0gG,EAAS1gG,EAAIuS,GAG1B,QACI3tB,IAAKmb,EACL10B,IAAK20B,IAGbu7G,iBAAkB,SAAU/qI,GACxB,GAAI+gD,GAAQ3+C,KAAK2+C,OACjB,OAAO6wE,GAAa5xH,EAAO+gD,EAAM3sC,MAAQ,GAAKw9G,EAAa5xH,EAAO+gD,EAAMlmD,MAAQ,GAEpF8yI,IAAK,SAAU73G,GAAV,GACGirB,GAAQ3+C,KAAKgrI,eAAet3G,GAAO,GACnCg8G,EAAgB1vI,KAAKkpI,WAAWxZ,EAAO/wE,EAAM3sC,KAAM09G,EAAO/wE,EAAMlmD,KAAMuH,KAAKmrI,SAAUnrI,KAAKorI,SAC9F,IAAIsE,EACA,OACI19H,IAAKg8G,EAAO0hB,EAAc19H,KAC1BvZ,IAAKu1H,EAAO0hB,EAAcj3I,OAItC+yI,YAAa,SAAUv8H,EAAOvX,GAAjB,GACLgkC,GAAa17B,KAAKmvI,SAASlgI,GAC3B2sB,EAAW57B,KAAKmvI,SAASz3I,GACzBsa,EAAMpT,KAAKoT,IAAI0pB,EAAYE,GAC3BnjC,EAAMmG,KAAKnG,IAAIijC,EAAYE,EAC/B,QACI5pB,IAAKg8G,EAAOh8G,GACZvZ,IAAKu1H,EAAOv1H,KAGpBwyI,UAAW,SAAUv3G,GAAV,GACHirB,GAAQ3+C,KAAKqrI,WAAW33G,GACxB1hB,EAAMg8G,EAAOlpC,GAAW4qC,EAAO/wE,EAAM3sC,KAAMhS,KAAKmrI,SAAUnrI,KAAKorI,WAC/D3yI,EAAMu1H,EAAOlpC,GAAW4qC,EAAO/wE,EAAMlmD,KAAMuH,KAAKmrI,SAAUnrI,KAAKorI,UACnE,QACIp5H,IAAKA,EACLvZ,IAAKA,MAyCjB4zH,EAAkBsL,IACdz4H,KAAM21H,GACNuS,gBACI5jI,SAAS,EACTxK,MAAO,EACP28E,MAAOw+C,IAEX4P,QAAU4K,YAAatX,MAEvBO,GAAqB,GACrBC,GAAkBZ,GAAKv2H,QACvBC,KAAM,SAAU6wH,EAAWC,EAAWrxH,EAASw8H,GAAzC,GACE1K,GAAct3H,IACdi3H,UAAW+F,GACX5lH,IAAKw/G,EACL/4H,IAAKg5H,GACNrxH,GACCuG,EAAOurH,EAAYL,UACnBD,EAAU8B,GAAcjC,EAAW9qH,GACnCgrH,EAAU8B,GAAcjC,EAAWC,EAAWS,GAC9CvzE,EAAQ20E,GAAU3B,EAASC,EAASM,EAAa9xH,EACrD8xH,GAAYz5H,IAAMkmD,EAAMlmD,IACxBy5H,EAAYlgH,IAAM2sC,EAAM3sC,IACxBkgH,EAAYK,UAAYnyH,EAAQmyH,WAAa9iH,GAAM9I,EAAO,EAAGiqH,IAC7DqG,GAAKhzH,GAAGtD,KAAKwH,KAAKnI,KAAMkyH,EAAa0K,GACrC58H,KAAKmrI,SAAW1nD,GAAQrjF,EAAQ4R,KAAOpT,KAAKoT,IAAI2/G,EAASvxH,EAAQ4R,KAAO2/G,EACxE3xH,KAAKorI,SAAW3nD,GAAQrjF,EAAQ3H,KAAOmG,KAAKnG,IAAIm5H,EAASxxH,EAAQ3H,KAAOm5H,EACxE5xH,KAAK2vI,OAASlgI,GAAMoV,GAAI85B,EAAM3sC,IAAKrL,GAAOiqH,IAC1C5wH,KAAK4vI,OAASngI,GAAMoV,GAAI85B,EAAMlmD,IAAKkO,GAAOiqH,IAC1C5wH,KAAKwxH,UAAYA,EACjBxxH,KAAKyxH,UAAYA,EACjBzxH,KAAKukI,gBAET7oG,WAAY,WACR,MAAO17B,MAAKI,QAAQ4R,KAExB80H,QAAS,SAAUlkI,EAAGC,EAAGmmI,GAAhB,GAgCD5hD,GAAIC,EA/BJ9G,EAAMvgF,KACNI,EAAUmgF,EAAIngF,QACduvI,EAASpvD,EAAIovD,OACbC,EAASrvD,EAAIqvD,OACbtvI,EAAUF,EAAQE,QAClBg8B,EAAWl8B,EAAQk8B,SACnB31B,EAAOvG,EAAQyxH,UACfwY,EAAY/tG,EAAWhrB,GAAIyiH,GAC3BgR,EAAU/kI,KAAK+kI,UACftX,EAAYsX,EAAQsF,GAAa/pI,EAAU,EAAI,IAC/C05G,EAAW19E,EAAWyoG,EAAQ9rI,SAAW8rI,EAAQ/rI,QACjDs2B,EAAMhvB,KAAe,EACrBq/B,EAAOrQ,GAAO0qF,GAAY41B,EAASD,IACnClF,EAAU,GAAI7d,IAAImY,EAAQ/sE,GAAI+sE,EAAQ9sE,GAAI8sE,EAAQ/sE,GAAI+sE,EAAQ9sE,IAC9DhpD,EAAQrM,EACRlL,EAAMmL,CAOV,OANK4gF,IAAQx0E,KACTA,EAAQvX,GAAO,GAEd+rF,GAAQ/rF,KACTA,EAAMuX,GAAS,GAEfA,GAAS,GAAKvX,GAAO,EACd,MAEPsxI,IACA/5H,EAAQrQ,KAAKnG,IAAImG,KAAKoT,IAAI/C,EAAO7O,EAAQ3H,KAAM2H,EAAQ4R,KACvDta,EAAMkH,KAAKnG,IAAImG,KAAKoT,IAAIta,EAAK0I,EAAQ3H,KAAM2H,EAAQ4R,MAEvD/C,EAAQ4V,GAAI5V,EAAOtI,GACnBjP,EAAMmtB,GAAIntB,EAAKiP,GAEX21B,GACA8qD,EAAKwoD,EAAShxI,KAAKnG,IAAIwW,EAAOvX,GAC9B2vF,EAAKuoD,EAAShxI,KAAKoT,IAAI/C,EAAOvX,KAE9B0vF,EAAKxoF,KAAKoT,IAAI/C,EAAOvX,GAAOi4I,EAC5BtoD,EAAKzoF,KAAKnG,IAAIwW,EAAOvX,GAAOi4I,GAEhClF,EAAQJ,EAAY,GAAKhZ,GAAgB5D,EAAY9tF,GAAQr/B,EAAU+mF,EAAKD,IAC5EqjD,EAAQJ,EAAY,GAAKhZ,GAAgB5D,EAAY9tF,GAAQr/B,EAAU8mF,EAAKC,IACrEojD,IAEX0E,SAAU,SAAU/kD,GAAV,GAoBFxsF,GAnBA2iF,EAAMvgF,KACNI,EAAUmgF,EAAIngF,QACduvI,EAASpvD,EAAIovD,OACbC,EAASrvD,EAAIqvD,OACbtvI,EAAUF,EAAQE,QAClBg8B,EAAWl8B,EAAQk8B,SACnB31B,EAAOvG,EAAQyxH,UACfkT,EAAU/kI,KAAK+kI,UACfz1G,EAAMgN,IAAah8B,EAAU,KAC7B2uI,EAAoB,IAAR3/G,EAAY,EAAI,EAC5B0qF,EAAW19E,EAAWyoG,EAAQ9rI,SAAW8rI,EAAQ/rI,QACjD2mC,GAAQiwG,EAASD,GAAU31B,EAC3BqwB,EAAY/tG,EAAWhrB,GAAIyiH,GAC3BtG,EAAYsX,EAAQsF,EAAY4E,GAChC7vI,EAASkwB,GAAO86D,EAAMigD,GAAa5c,GACnC2hB,EAAchwI,EAASugC,CAC3B,OAAIvgC,GAAS,GAAKA,EAAS46G,EAChB,MAEPp8G,EAAQ+xI,EAASP,EACd3/H,GAAM7Q,KAAKuoC,IAAIxgC,EAAM/I,GAAQgzH,MAExCjyE,MAAO,WACH,GAAIv+C,GAAUJ,KAAKI,OACnB,QACI4R,IAAK5R,EAAQ4R,IACbvZ,IAAK2H,EAAQ3H,MAGrB4yI,WAAY,SAAU33G,GAAV,GACJ/sB,GAAO3G,KAAKI,QAAQyxH,UACpBzyH,GAAUs0B,CACd,QACI1hB,IAAKpT,KAAKuoC,IAAIxgC,EAAM3G,KAAK2vI,OAASvwI,GAClC3G,IAAKmG,KAAKuoC,IAAIxgC,EAAM3G,KAAK4vI,OAASxwI,KAG1C4rI,eAAgB,SAAUt3G,GAAV,GACR6sD,GAAMvgF,KACNI,EAAUmgF,EAAIngF,QACduvI,EAASpvD,EAAIovD,OACbC,EAASrvD,EAAIqvD,OACbtvI,EAAUF,EAAQE,QAClBg8B,EAAWl8B,EAAQk8B,SACnB31B,EAAOvG,EAAQyxH,UACfkT,EAAU/kI,KAAK+kI,UACfhnI,EAAOu+B,EAAWyoG,EAAQ9rI,SAAW8rI,EAAQ/rI,QAC7CokC,EAAQr/B,GAAQ6xI,EAASD,GACzBvwI,EAASqQ,GAAMikB,EAAQ0J,EAAOwzF,GAIlC,QAHKt0F,IAAYh8B,GAAcg8B,GAAYh8B,IACvClB,GAAUA,IAGV4S,IAAKpT,KAAKuoC,IAAIxgC,EAAMgpI,EAASvwI,GAC7B3G,IAAKmG,KAAKuoC,IAAIxgC,EAAMipI,EAASxwI,KAGrCulI,YAAa,WAAA,GACLkL,GAAWjxI,KAAKpE,MAAMwF,KAAK4vI,QAC3Bj8H,EAAQ/U,KAAKpE,MAAMq1I,EAAW7vI,KAAK2vI,QAAU,CACjD,OAAOh8H,IAEXoyH,sBAAuB,WACnB,GAAIhY,KAOJ,OANA/tH,MAAK8vI,4BAA4B,SAAU91I,GACvC+zH,EAAMjmH,KAAK9N,KAEX2lC,KAAM,EACNwO,KAAM,IAEH4/E,GAEX2X,YAAa,SAAUC,GASnB,QAASp9H,GAAOwnI,EAAc3iB,GAC1B0Y,EAAgBzY,MAAQntF,EAAS6kG,EAAQ7sE,GAAK6sE,EAAQ7sE,GAAKk1D,EAAYrvH,KACvE+nI,EAAgBxY,MAAQptF,EAAS6kG,EAAQ9sE,GAAKm1D,EAAYrvH,KAAOgnI,EAAQ9sE,GACzE6tE,EAAgB9rI,SAAW+1I,EAC3BpK,EAAUnhG,OAAO2oF,EAAe2Y,EAAiB1Y,IAb5C,GACLhtH,GAAUJ,KAAKI,QACfgkI,EAAahkI,EAAQgkI,WACrBF,EAAa9jI,EAAQ8jI,WACrB5nG,EAAWl8B,EAAQk8B,SACnB4D,EAAS9/B,EAAQ2jI,OAAO7jG,OACxB6kG,EAAU/kI,KAAK+kI,UACfhX,KACA+X,GAAoBxpG,SAAUA,EAalC,OANI8nG,GAAW5gI,SACXxD,KAAK8vI,4BAA4BvnI,EAAQ67H,GAEzCF,EAAW1gI,SACXxD,KAAKgwI,4BAA4BznI,EAAQ27H,GAEtCnW,GAEXgZ,gBAAiB,SAAUT,GAavB,QAAS/9H,GAAOwnI,EAAcviB,GACrBvqH,EAAQ8sI,EAAc3L,KACvB8C,EAAYltI,SAAW+1I,EACvBloH,EAAU2c,OAAO+oF,EAAmB2Z,EAAa1Z,IACjD4W,EAAWt8H,KAAKioI,IAjBX,GACT3vI,GAAUJ,KAAKI,QACf+mI,EAAiB/mI,EAAQ+mI,eACzBC,EAAiBhnI,EAAQgnI,eACzB9qG,EAAWl8B,EAAQk8B,SACnByoG,EAAUuB,EAAQvB,UAClBmC,GACAzZ,UAAWsX,EAAQzoG,EAAW,KAAO,MACrCoxF,QAASqX,EAAQzoG,EAAW,KAAO,MACnCA,SAAUA,GAEV8nG,KACAv8G,EAAY7nB,KAAKulI,iBAcrB,OANI6B,GAAe5jI,SACfxD,KAAK8vI,4BAA4BvnI,EAAQ6+H,GAEzCD,EAAe3jI,SACfxD,KAAKgwI,4BAA4BznI,EAAQ4+H,GAEtCt/G,EAAUltB,UAErBm1I,4BAA6B,SAAUjvH,EAAUusG,GAApB,GAOhB/nC,GACDrrF,EAPJumF,EAAMvgF,KAAKiwI,eACXxiB,EAAYltC,EAAIktC,UAChB9tF,EAAO4gD,EAAI5gD,KACXy5E,EAAQp5G,KACR2vI,EAASv2B,EAAMu2B,OACfC,EAASx2B,EAAMw2B,MACnB,KAASvqD,EAAQzmF,KAAK2pD,KAAKonF,GAAUviB,EAAYj/E,KAAMk3C,GAASuqD,EAAQvqD,GAAS+nC,EAAYztF,KACrF3lC,EAAWyV,GAAMg+G,EAAY9tF,GAAQ0lD,EAAQsqD,GAAS/e,IAC1D/vG,EAAS7mB,EAAUozH,IAG3B4iB,4BAA6B,SAAUnvH,EAAUusG,GAApB,GAchB/nC,GACD6qD,EACKvyI,EACDC,EAKI5D,EArBZ8mF,EAAS9gF,KACTugF,EAAMvgF,KAAKI,QACX4R,EAAMuuE,EAAIvuE,IACVvZ,EAAM8nF,EAAI9nF,IACV85H,EAAYhyC,EAAIgyC,UAChB5rH,EAAO45E,EAAIsxC,UACXzY,EAAQp5G,KAAKiwI,eACbxiB,EAAYrU,EAAMqU,UAClB9tF,EAAOy5E,EAAMz5E,KACbwwG,EAAQnwI,KACR2vI,EAASQ,EAAMR,OACfC,EAASO,EAAMP,OACf3gI,EAAQrQ,KAAKpE,MAAMm1I,EACvB,KAAStqD,EAAQp2E,EAAOo2E,EAAQuqD,EAAQvqD,IAEpC,IADI6qD,EAAepvD,EAAOsvD,sBAAsB/qD,GACvC1nF,EAAMyvH,EAAYj/E,KAAMxwC,EAAM40H,IAC/B30H,EAAQsyI,EAAatyI,MAAQD,EAAMuyI,EAAaG,YAChDzyI,EAAQnF,IAFkCkF,GAAOyvH,EAAYztF,KAK7D/hC,GAASoU,IACLhY,EAAWyV,GAAMg+G,EAAY9tF,GAAQ9a,GAAIjnB,EAAO+I,GAAQgpI,GAAS/e,IACrE/vG,EAAS7mB,EAAUozH,KAKnC0X,gBAAiB,SAAU3yH,EAAOyyH,GAAjB,GACTv/C,GAAQzmF,KAAK2pD,KAAKvoD,KAAK2vI,OAASx9H,GAChCvU,EAAQgB,KAAKuoC,IAAInnC,KAAKI,QAAQyxH,UAAWxsC,GACzC5vD,EAAOz1B,KAAK8oI,cAAclrI,EAAO,KAAMgnI,EAC3C,OAAO,IAAI/N,IAAUj5H,EAAO63B,EAAMtjB,EAAO,KAAMyyH,IAEnD+D,iBAAkB,SAAU/qI,GACxB,GAAI+gD,GAAQ3+C,KAAK2+C,OACjB,OAAOA,GAAM3sC,KAAOpU,GAASA,GAAS+gD,EAAMlmD,KAEhD8yI,IAAK,SAAU73G,GACX,GAAIirB,GAAQ3+C,KAAKgrI,eAAet3G,EAChC,OAAO1zB,MAAKkpI,WAAWvqF,EAAM3sC,IAAK2sC,EAAMlmD,IAAKuH,KAAKmrI,SAAUnrI,KAAKorI,UAAW13G,IAEhF83G,YAAa,SAAUv8H,EAAOvX,GAAjB,GACLgkC,GAAa17B,KAAKmvI,SAASlgI,GAC3B2sB,EAAW57B,KAAKmvI,SAASz3I,GACzBsa,EAAMpT,KAAKoT,IAAI0pB,EAAYE,GAC3BnjC,EAAMmG,KAAKnG,IAAIijC,EAAYE,EAC/B,QACI5pB,IAAKA,EACLvZ,IAAKA,IAGbwyI,UAAW,SAAUv3G,GAAV,GACH6sD,GAAMvgF,KACNI,EAAUmgF,EAAIngF,QACd+qI,EAAW5qD,EAAI4qD,SACfC,EAAW7qD,EAAI6qD,SACfkE,EAAWtvI,KAAKqrI,WAAW33G,GAC3B1hB,EAAM8yE,GAAWwqD,EAASt9H,IAAKm5H,EAAUC,GACzC3yI,EAAMqsF,GAAWwqD,EAAS72I,IAAK0yI,EAAUC,GACzCzkI,EAAOvG,EAAQyxH,UACfye,EAAqB73I,EAAMuZ,GAAO5R,EAAQ4R,KAAO5R,EAAQ3H,KAAOgX,GAAMoV,GAAIzkB,EAAQ3H,IAAKkO,GAAQke,GAAIzkB,EAAQ4R,IAAKrL,GAAOiqH,IAAqB,EAC5I2f,IAAmBnwI,EAAQ4R,MAAQm5H,GAAY/qI,EAAQ3H,MAAQ2yI,IAAa37H,GAAMoV,GAAIpsB,EAAKkO,GAAQke,GAAI7S,EAAKrL,GAAOiqH,KAAsB,CAC7I,IAAI0f,GAAsBC,EACtB,OACIv+H,IAAKA,EACLvZ,IAAKA,IAIjB23I,sBAAuB,SAAU/qD,GAAV,GACf9E,GAAMvgF,KAAKI,QACXmyH,EAAYhyC,EAAIgyC,UAChB5rH,EAAO45E,EAAIsxC,UACXj0H,EAAQgB,KAAKuoC,IAAIxgC,EAAM0+E,GACvBmrD,EAAY5xI,KAAKuoC,IAAIxgC,EAAM0+E,EAAQ,GACnCn0D,EAAas/G,EAAY5yI,EACzByyI,EAAYn/G,EAAaqhG,CAC7B,QACI30H,MAAOA,EACPyyI,UAAWA,IAGnBJ,aAAc,WAAA,GACN1vD,GAAMvgF,KAAKI,QACXE,EAAUigF,EAAIjgF,QACdg8B,EAAWikD,EAAIjkD,SACf+tG,EAAY/tG,EAAWhrB,GAAIyiH,GAC3BgR,EAAU/kI,KAAK+kI,UACfz1G,EAAMgN,IAAah8B,EAAU,KAC7B2uI,EAAoB,IAAR3/G,EAAY,EAAI,EAC5B0qF,EAAW19E,EAAWyoG,EAAQ9rI,SAAW8rI,EAAQ/rI,QACjD2mC,EAAOrQ,GAAO0qF,GAAYh6G,KAAK4vI,OAAS5vI,KAAK2vI,SAC7CliB,EAAYsX,EAAQsF,EAAY4E,EACpC,QACItvG,KAAMA,EACN8tF,UAAWA,EACXsX,QAASA,MAqDrB1Y,EAAkBwL,IACd34H,KAAM,MACN2yH,UAAW+F,GACXrF,UAAW,EACXgB,kBAAmB,EACnBj3F,UAAU,EACV8qG,gBACI5jI,SAAS,EACTxK,MAAO,EACP28E,MAAOw+C,IAEX9vF,OAAQ,EACRigG,cAAc,IAEdxM,IACAiP,gBAAiB,SAAUT,GAAV,GAKTmK,GAAaC,EAJbtwI,EAAUJ,KAAKI,QACfhI,EAASwG,KAAKC,IAAImB,KAAK8jC,IAAIw0B,SAASjnD,EAAIi1H,EAAQvB,UAAU9sE,IAC1DutE,KACAmL,GAAY,CAWhB,OATIvwI,GAAQgnI,eAAe5jI,UACvBitI,EAAczwI,KAAK4wI,oBAAoBtK,GACvCqK,GAAY,EACZnL,EAAYxlI,KAAK6wI,qBAAqBJ,EAAar4I,EAAQgI,EAAQgnI,iBAEnEhnI,EAAQ+mI,eAAe3jI,UACvBktI,EAAc1wI,KAAK8wI,oBAAoBxK,EAASqK,GAChDnsG,GAAOghG,EAAWxlI,KAAK+wI,qBAAqBL,EAAat4I,EAAQgI,EAAQ+mI,eAAgBb,EAASqK,KAE/FnL,GAEXqL,qBAAsB,SAAU5U,EAAQ7jI,EAAQgI,GAC5C,MAAOJ,MAAKgxI,gBAAgB/U,EAAQ7jI,EAAQgI,IAEhD2wI,qBAAsB,SAAU9U,EAAQ7jI,EAAQgI,EAASkmI,EAASqK,GAC9D,GAAIM,GAAiBjxI,KAAKixI,gBAAkBjxI,KAAKixI,eAAe74I,EAAQkuI,EAASqK,EACjF,OAAO3wI,MAAKgxI,gBAAgB/U,EAAQ7jI,EAAQgI,EAAS6wI,IAEzDD,gBAAiB,SAAU/U,EAAQ7jI,EAAQgI,EAAS6wI,GAAnC,GAcJn2I,GACDksG,EAdJntG,GACAqlG,QACIlmG,MAAOoH,EAAQpH,MACf28E,MAAOv1E,EAAQu1E,MACf2rC,SAAUlhH,EAAQkhH,WAGtBhpD,EAASt4D,KAAK8jC,IAAIw0B,SAClB0qC,EAAS,GAAIoC,KACb9sC,EAAOhlC,EACPglC,EAAOjnD,GACRjZ,GACCyvB,EAAY7nB,KAAKulI,iBACrB,KAASzqI,EAAI,EAAGA,EAAImhI,EAAOtkI,OAAQmD,IAC3BksG,EAAO,GAAIhI,IAAKnlG,GAChBo3I,IACAjuC,EAAO5qG,OAAS64I,EAAehV,EAAOnhI,KAE1CksG,EAAKngE,OAAOm8D,EAAO1qC,QAAQ65B,OAAO6Q,EAAO4P,QAAQqpB,EAAOnhI,GAAK,MAC7D+sB,EAAU2c,OAAOwiE,EAErB,OAAOn/E,GAAUltB,UAErBu2I,eAAgB,SAAU5K,EAASvoI,EAAMowC,EAAMxO,EAAMwxG,GAArC,GACRrwD,GAAS9gF,KACToxI,EAAOpxI,KAAKqxI,UAAUtzI,EAAMowC,EAAMxO,EAAMwxG,GACxC/wI,EAAUkmI,EAAQlmI,QAClBkxI,EAAiBlxI,EAAQoD,UAAYpD,EAAQ4mG,UAAYxjG,WAAY,CACzE,OAAOwP,GAAIo+H,EAAM,SAAUzgI,GACvB,GAAI4gI,GAAQzwD,EAAOizB,cAAcpjG,EACjC,KAAK2gI,GAA4B,KAAVC,EACnB,MAAOA,OAKnBxZ,GAAoBX,GAAa12H,QACjCi+C,MAAO,WACH,OACI3sC,IAAK,EACLvZ,IAAKuH,KAAKI,QAAQqpI,WAAW9xI,SAGrCuhH,OAAQ,SAAUp1E,GACd9jC,KAAK8jC,IAAMA,EACX9jC,KAAKwxI,gBAETzM,QAAS,WACL,MAAO/kI,MAAK8jC,KAEhB0tG,aAAc,WAAA,GAQD12I,GAEDmtI,EATJnnD,EAAS9gF,KACTugF,EAAMvgF,KACN+jI,EAASxjD,EAAIwjD,OACba,EAAerkD,EAAIngF,QAAQ2jI,OAC3B51F,EAAOy2F,EAAaz2F,MAAQ,EAC5BxO,EAAOilG,EAAajlG,MAAQ,EAC5BsiD,EAAa,GAAI2qC,GACrB,KAAS9xH,EAAI,EAAGA,EAAIipI,EAAOpsI,OAAQmD,IAC/BipI,EAAOjpI,GAAGo+G,OAAOj3B,GACbgmD,EAAWlE,EAAOjpI,GAAGgpC,IACzBigG,EAAOjpI,GAAGo+G,OAAOp4B,EAAOgmD,QAAQ34F,EAAOrzC,EAAI6kC,GAAM07F,YAAY,EAAG4M,EAASjvI,QAASivI,EAAShvI,YAGnGo4I,UAAW,SAAUtzI,EAAM0zI,EAAYC,EAAYP,GAAxC,GAIH/wI,GACAqpI,EACAkI,EACAC,EACAzjG,EACAxO,EACAyxG,EACA/nD,EACKvuF,CAAT,KAXmB,SAAfq2I,IACAA,GAAa,GAEb/wI,EAAUJ,KAAKI,QACfqpI,EAAarpI,EAAQqpI,WAAW9xI,OAChCg6I,EAAWlI,EAAa1rI,GAAQ,EAChC6zI,EAAW,IAAMD,EACjBxjG,EAAOsjG,GAAc,EACrB9xG,EAAO+xG,GAAc,EACrBN,KACA/nD,EAAQ,EACHvuF,EAAIqzC,EAAMrzC,EAAI62I,EAAU72I,GAAK6kC,EAE9B0pD,EADAjpF,EAAQE,QACA,IAAMxF,EAAI82I,EAEV92I,EAAI82I,EAEhBvoD,EAAQ55E,GAAM45E,EAAO8iC,IAAmB,IAClCglB,GAAcluI,EAAQomF,EAAO8nD,IAC/BC,EAAKtpI,KAAKuhF,EAGlB,OAAO+nD,IAEXS,eAAgB,WACZ,MAAO7xI,MAAKqxI,UAAU,IAE1BS,eAAgB,WACZ,MAAO9xI,MAAKqxI,UAAU,KAE1Bt9B,cAAe,SAAUF,GACrB,OAAQ,IAAMA,EAAW7zG,KAAKI,QAAQ+oF,YAAc,KAExDsnD,YAAa,WACT,GAAI3vD,GAAS9gF,IACb,OAAOgT,GAAIhT,KAAK6xI,iBAAkB,SAAUh+B,GACxC,MAAO/yB,GAAOizB,cAAcF,MAGpC4vB,WAAY,WACR,UAEJmN,oBAAqB,SAAUtK,GAC3B,GAAIc,GAAiBpnI,KAAKI,QAAQgnI,cAClC,OAAOpnI,MAAKkxI,eAAe5K,EAAS,EAAGc,EAAej5F,KAAMi5F,EAAeznG,OAE/EmxG,oBAAqB,SAAUxK,EAASqK,GAAnB,GACbpwD,GAAMvgF,KAAKI,QACX+mI,EAAiB5mD,EAAI4mD,eACrBC,EAAiB7mD,EAAI6mD,eACrBwJ,EAAsBD,EAAY3wI,KAAKqxI,UAAU,EAAGjK,EAAej5F,KAAMi5F,EAAeznG,MAAQ,IACpG,OAAO3/B,MAAKkxI,eAAe5K,EAAS,GAAKa,EAAeh5F,KAAMg5F,EAAexnG,KAAMixG,IAEvFK,eAAgB,SAAU74I,EAAQkuI,EAASqK,GAA3B,GAEJoB,GACAC,EACAvB,EACAQ,CAJR,IAAI3K,EAAQlmI,QAAQlB,OAASy1H,GAUzB,MATIod,GAAa5sD,GAAI,KAAwC,EAAjCnlF,KAAKI,QAAQqpI,WAAW9xI,SAChDq6I,EAAcpzI,KAAKqpF,IAAI8pD,GAAc35I,EACrCq4I,EAAczwI,KAAKywI,cACnBQ,EAAiB,SAAU5nD,GAC3B,OAAKsnD,GAAa1tI,EAAQomF,EAAOonD,GACtBr4I,EAEJ45I,IAKnB1M,gBAAiB,WAAA,GAIJxqI,GACDm3I,EACAvJ,EACAgC,EACAtX,EAEAC,EAEA6e,EAXJpxD,EAAS9gF,KACT0mI,EAAY1mI,KAAKI,QAAQsmI,cACzBjyF,EAAQz0C,KAAK4mI,eAAiB,GAAIl1C,KAAQrtD,WAC9C,KAASvpC,EAAI,EAAGA,EAAI4rI,EAAU/uI,OAAQmD,IAC9Bm3I,EAAOvL,EAAU5rI,GACjB4tI,EAAO5nD,EAAOqxD,aAAaF,GAC3BvH,EAAa5pD,EAAOgmD,QAAQmL,EAAK9kH,MACjCimG,EAAO6e,EAAK9kH,KAAOvuB,KAAKpE,MAAMy3I,EAAK9kH,MACvCu7G,EAAKv/C,YAAciqC,EAAOsX,EAAWrhD,MACjCgqC,EAAOz0H,KAAK2pD,KAAK0pF,EAAK7kH,IAAM6kH,EAAK7kH,GACrCs7G,EAAKr/C,QAAUgqC,EAAOD,GAAQsX,EAAWrhD,MACrC6oD,EAAOlc,GAAarqH,QAAQ0wH,WAAWqM,GACvCzpC,MACItpB,MAAOs8D,EAAKt8D,MACZztD,QAAS+pH,EAAK/pH,SAElBg3E,QAAUh3E,QAAS+pH,EAAK/pH,WAE5BusB,EAAMjQ,OAAO0tG,EAEjBlyI,MAAKq9H,aAAa5oF;EAEtB09F,aAAc,SAAUF,GACpB,MAAOjyI,MAAK8mI,QAAQmL,EAAK9kH,KAAM8kH,EAAK7kH,GAAK,IAE7C05G,QAAS,SAAU35G,EAAMC,GAAhB,GAYDglH,GAOAC,EACAC,EACAjpD,EApBAjpF,EAAUJ,KAAKI,QACfmoI,EAAYnoI,EAAQmoI,UACpBzkG,EAAM9jC,KAAK8jC,IACXstG,EAAOpxI,KAAKywI,cACZ8B,EAAYnB,EAAKz5I,OACjB66I,EAAY,IAAMD,EAClBE,EAAYtlH,CAehB,OAdI/sB,GAAQE,UAAYioI,IACpBkK,GAAaA,EAAY,GAAKF,GAElCE,EAAY3tD,GAAWlmF,KAAKpE,MAAMi4I,GAAY,EAAGF,EAAY,GACzDH,EAAYhB,EAAKqB,GACjBlK,IACA6J,GAAwBI,EAAY,EAChCJ,EAAY,IACZA,GAAa,MAGjBC,EAAUvtD,GAAWlmF,KAAK2pD,KAAKn7B,GAAMqlH,GAAYA,EAAWF,EAAY,GACxED,EAAQD,EAAUI,EAAY,EAC9BppD,EAAQmpD,EAAYF,EACjB,GAAIzc,IAAK/xF,EAAIw0B,SAAU,EAAGx0B,EAAI7qC,SAAW,EAAGm5I,EAAW/oD,IAElEq/C,KAAM,SAAUv7G,EAAMC,GAAhB,GACEs7G,GAAO1oI,KAAK8mI,QAAQ35G,EAAMC,GAC1B+7D,EAAau/C,EAAKv/C,WAAa,IAC/BG,EAAWH,EAAau/C,EAAKr/C,KACjC,OAAO,IAAImjB,IAAS/C,KAChBi/B,EAAKpwE,OAAOhlC,EACZo1G,EAAKpwE,OAAOjnD,IAEZ83E,WAAYA,EACZG,SAAUA,EACVK,QAAS++C,EAAKtwI,OACdwxF,QAAS8+C,EAAKtwI,UAGtB0yI,mBAAoB,SAAU1gD,GAAV,GAIPtvF,GACD4tI,EAJJ5nD,EAAS9gF,KACTrI,EAASqI,KAAKI,QAAQqpI,WAAW9xI,OACjCwa,EAAQ,IACZ,KAASrX,EAAI,EAAGA,EAAInD,EAAQmD,IAExB,GADI4tI,EAAO5nD,EAAOgmD,QAAQhsI,GACtB4tI,EAAKn3B,cAAcnnB,GAAQ,CAC3Bj4E,EAAQrX,CACR,OAGR,MAAOqX,MAGfk6G,EAAkB0L,IACd5uC,WAAY,GACZ46C,QAAUvgG,OAAQooF,EAAW,KAC7Bwb,gBAAkB5jI,SAAS,GAC3B+kI,WAAW,IAEf3tI,GAAWm9H,GAAkBhxH,UAAW+wH,IACpCE,GAAYf,GAAKv2H,QACjBC,KAAM,SAAUP,EAASw8H,GACrB3F,GAAKhzH,GAAGtD,KAAKwH,KAAKnI,KAAMI,EAASw8H,EACjC,IAAI8V,GAAkB1yI,KAAKI,OAC3BsyI,GAAgBngB,UAAYmgB,EAAgBngB,WAAamgB,EAAgB7gB,UAAY,GAEzFid,aAAc,SAAUC,GACpB,MAAOrX,IAAY3wH,UAAU+nI,aAAa3mI,KAAKnI,KAAM+uI,GAAa,GAEtE71B,OAAQ,SAAUp1E,GACd9jC,KAAK8jC,IAAMA,EACX9jC,KAAKwxI,gBAETA,aAAc,WAAA,GAUD12I,GAEDmtI,EAXJnnD,EAAS9gF,KACTugF,EAAMvgF,KACNI,EAAUmgF,EAAIngF,QACd2jI,EAASxjD,EAAIwjD,OACba,EAAerkD,EAAIngF,QAAQ2jI,OAC3B51F,EAAOy2F,EAAaz2F,MAAQ,EAC5BxO,EAAOilG,EAAajlG,MAAQ,EAC5BsiD,EAAa,GAAI2qC,IACjBwkB,EAAOpxI,KAAKqxI,UAAUjxI,EAAQyxH,UAAW1jF,EAAMxO,EACnD,KAAS7kC,EAAI,EAAGA,EAAIipI,EAAOpsI,OAAQmD,IAC/BipI,EAAOjpI,GAAGo+G,OAAOj3B,GACbgmD,EAAWlE,EAAOjpI,GAAGgpC,IACzBigG,EAAOjpI,GAAGo+G,OAAOp4B,EAAOgmD,QAAQsK,EAAKt2I,IAAIugI,YAAY,EAAG4M,EAASjvI,QAASivI,EAAShvI,YAG3F8rI,QAAS,WACL,MAAO/kI,MAAK8jC,KAEhButG,UAAW,SAAUtzI,EAAM0zI,EAAYC,EAAYP,GAAxC,GAIHn/H,GACAg9H,EACAoC,EACAjjG,EACAxO,EACK7kC,EACD6Q,CADR,KARmB,SAAfwlI,IACAA,GAAa,GAEbn/H,EAAMhS,KAAKI,QAAQ4R,IACnBg9H,EAAYhvI,KAAK8uI,aAAa/wI,GAC9BqzI,KACAjjG,EAAOsjG,GAAc,EACrB9xG,EAAO+xG,GAAc,EAChB52I,EAAIqzC,EAAMrzC,EAAIk0I,EAAWl0I,GAAK6kC,EAC/Bh0B,GAAW,IAAMqG,EAAMlX,EAAIiD,GAAQ,IACjCozI,GAAcluI,EAAQ0I,EAASwlI,IACjCC,EAAKtpI,KAAK6D,EAGlB,OAAOylI,IAEXS,eAAgB,WACZ,MAAO7xI,MAAKqxI,UAAUrxI,KAAKI,QAAQyxH,YAEvCigB,eAAgB,WACZ,MAAO9xI,MAAKqxI,UAAUrxI,KAAKI,QAAQmyH,YAEvCxe,cAAe,SAAUj5G,GACrB,OAAQ,IAAMA,EAAIkF,KAAKI,QAAQ+oF,YAAc,KAEjDs6C,WAAY,WACR,UAEJmN,oBAAqB,SAAUtK,GAC3B,GAAIc,GAAiBpnI,KAAKI,QAAQgnI,cAClC,OAAOpnI,MAAKkxI,eAAe5K,EAAStmI,KAAKI,QAAQyxH,UAAWuV,EAAej5F,KAAMi5F,EAAeznG,OAEpGmxG,oBAAqB,SAAUxK,EAASqK,GAAnB,GACbvwI,GAAUJ,KAAKI,QACf+mI,EAAiB/mI,EAAQ+mI,eACzBC,EAAiBhnI,EAAQgnI,eACzBwJ,EAAsBD,EAAY3wI,KAAKqxI,UAAUjxI,EAAQyxH,UAAWuV,EAAej5F,KAAMi5F,EAAeznG,MAAQ,IACpH,OAAO3/B,MAAKkxI,eAAe5K,EAASlmI,EAAQmyH,UAAW4U,EAAeh5F,KAAMg5F,EAAexnG,KAAMixG,IAErGuB,aAAc,SAAUF,GACpB,MAAOjyI,MAAK8mI,QAAQmL,EAAK9kH,KAAM8kH,EAAK7kH,KAExC05G,QAAS,SAAUlkI,EAAGC,GAAb,GAcGugC,GAbJm9C,EAAMvgF,KACNI,EAAUmgF,EAAIngF,QACd0jC,EAAMy8C,EAAIz8C,IACVqlD,EAAa/oF,EAAQ+oF,WACrBl6E,EAAQ61E,GAAWliF,EAAGxC,EAAQ4R,IAAK5R,EAAQ3H,KAC3Cf,EAAMotF,GAAWjiF,GAAKoM,EAAOA,EAAO7O,EAAQ3H,IAYhD,OAXI2H,GAAQE,UACR2O,MACAvX,OAEJuX,GAAS,IAAMA,EAAQk6E,GAAc,IACrCzxF,GAAO,IAAMA,EAAMyxF,GAAc,IAC7BzxF,EAAMuX,IACFm0B,EAAMn0B,EACVA,EAAQvX,EACRA,EAAM0rC,GAEH,GAAIyyF,IAAK/xF,EAAIw0B,SAAU,EAAGx0B,EAAI7qC,SAAW,EAAGgW,EAAOvX,EAAMuX,IAEpEy5H,KAAM,SAAUv7G,EAAMC,GAAhB,GAIEhtB,GACA6O,EACAy5H,EACA12H,EACAvZ,EACA0wF,EAAYG,CAUhB,OAlBW,UAAPl8D,IACAA,EAAKD,GAEL/sB,EAAUJ,KAAKI,QACf6O,EAAQ,IAAM7O,EAAQ+oF,WACtBu/C,EAAO1oI,KAAK8mI,QAAQ35G,EAAMC,GAC1Bpb,EAAMpT,KAAKoT,IAAImb,EAAMC,GACrB30B,EAAMmG,KAAKnG,IAAI00B,EAAMC,GAErBhtB,EAAQE,SACR6oF,EAAan3E,EACbs3E,EAAW7wF,IAEX0wF,EAAa,IAAM1wF,EACnB6wF,EAAW,IAAMt3E,GAErBm3E,GAAcA,EAAal6E,GAAS,IACpCq6E,GAAYA,EAAWr6E,GAAS,IACzB,GAAIu9F,IAAS/C,KAChBi/B,EAAKpwE,OAAOhlC,EACZo1G,EAAKpwE,OAAOjnD,IAEZ83E,WAAYA,EACZG,SAAUA,EACVK,QAAS++C,EAAKtwI,OACdwxF,QAAS8+C,EAAKtwI,UAGtB+2I,SAAU,SAAU/kD,GAAV,GACFhqF,GAAUJ,KAAKI,QACfk4D,EAASt4D,KAAK8jC,IAAIw0B,SAClBF,EAAKgyB,EAAM92D,EAAIglC,EAAOhlC,EACtB+kC,EAAK+xB,EAAM/4E,EAAIinD,EAAOjnD,EACtBo7G,EAAQ7tH,KAAK6Q,MAAMm0E,GAAIhlF,KAAK87B,MAAM29B,EAAID,KACtCnpD,EAAQ7O,EAAQ+oF,UAKpB,OAJK/oF,GAAQE,UACTmsH,MACAx9G,QAEIw9G,EAAQx9G,EAAQ,KAAO,KAEnCm6H,WAAY,WACR,OACIp3H,IAAK,EACLvZ,IAAe,EAAVmG,KAAKswF,OAItBm9B,EAAkB2L,IACd94H,KAAM,QACNiqF,WAAY,EACZ7oF,SAAS,EACTuxH,UAAW,GACX7/G,IAAK,EACLvZ,IAAK,IACLsrI,QAAUvgG,OAAQooF,EAAW,KAC7Bwb,gBACIzxD,MAAOw+C,GACP3wH,SAAS,EACTxK,MAAO,GAEXmuI,gBAAkBxxD,MAAO,UAE7B/6E,GAAWo9H,GAAUjxH,UAAW+wH,IAC5BwN,gBAAiBvN,GAAkBhxH,UAAUu+H,gBAC7CmL,YAAa1Y,GAAkBhxH,UAAU0pI,YACzC9xF,MAAO+4E,GAAY3wH,UAAU43C,MAC7BgmF,YAAajN,GAAY3wH,UAAU49H,YACnCG,gBAAiBpN,GAAY3wH,UAAU+9H,kBAEvC7M,IACA73H,SAAWgnI,gBAAkB5jI,SAAS,IACtC8hI,gBAAiB,WAAA,GAQTgB,GACAmK,EACAn4E,EACA7jB,EACK35C,EACDm3I,EACAU,EAOAjK,EACAwJ,EACAt1C,EAtBJ9b,EAAS9gF,KACTugF,EAAMvgF,KAAKI,QACXlB,EAAOqhF,EAAI6mD,eAAeloI,KAC1BwnI,EAAYnmD,EAAImmD,SAQpB,KAPkB,SAAdA,IACAA,MAEAJ,EAAUtmI,KAAK2mI,SAASiM,UACxBnC,EAAcnK,EAAQmK,cACtBn4E,EAASguE,EAAQxiG,IAAIw0B,SACrB7jB,EAAQz0C,KAAK4mI,eAAiB,GAAIl1C,KAAQrtD,YACrCvpC,EAAI,EAAGA,EAAI4rI,EAAU/uI,OAAQmD,IAC9Bm3I,EAAOvL,EAAU5rI,GACjB63I,GACA1zC,MACItpB,MAAOs8D,EAAKt8D,MACZztD,QAAS+pH,EAAK/pH,SAElBg3E,QAAUh3E,QAAS+pH,EAAK/pH,UAExBwgH,EAAO5nD,EAAOgmD,QAAQmL,EAAK9kH,KAAM8kH,EAAK7kH,IAAI,GAC1C8kH,EAAO,GAAIrc,IAAKv9D,EAAQA,EAAOjnD,EAAIq3H,EAAKvwE,GAAIG,EAAOjnD,EAAIq3H,EAAKzwE,GAAI,EAAG,KACnE2kC,EAAQ,OAERA,EADA19F,IAASy1H,GACDqB,GAAarqH,QAAQ0wH,WAAW6V,EAAMS,GAEtC3zC,GAAKoS,WAAWtwB,EAAO+xD,eAAeX,EAAMzB,GAAckC,GAAW7kE,QAEjFr5B,EAAMjQ,OAAOo4D,EAEjB58F,MAAKq9H,aAAa5oF,IAEtBo+F,eAAgB,SAAUX,EAAMjW,GAAhB,GASHnhI,GARLg4I,KACAC,KACAz6E,GACA45E,EAAK55E,OAAOhlC,EACZ4+G,EAAK55E,OAAOjnD,GAEZ2hI,EAAc,GAAI5tC,IAAO9sC,EAAQ45E,EAAKllB,aACtCimB,EAAc,GAAI7tC,IAAO9sC,EAAQ45E,EAAK95I,OAC1C,KAAS0C,EAAI,EAAGA,EAAImhI,EAAOtkI,OAAQmD,IAC/Bg4I,EAAYhrI,KAAKkrI,EAAYpgC,QAAQqpB,EAAOnhI,GAAK,MACjDi4I,EAAYjrI,KAAKmrI,EAAYrgC,QAAQqpB,EAAOnhI,GAAK,KAKrD,OAHAg4I,GAAYxyI,UACZwyI,EAAYhrI,KAAKgrI,EAAY,IAC7BC,EAAYjrI,KAAKirI,EAAY,IACtBA,EAAY58H,OAAO28H,IAE9B/L,gBAAiB,SAAUT,GAAV,GAULpC,GATJ9jI,EAAUJ,KAAKI,QACfgkI,EAAapkI,KAAKkzI,8BAClBzC,EAAcnK,EAAQmK,cACtBn4E,EAASguE,EAAQxiG,IAAIw0B,SACrBktE,IAQJ,OAPIplI,GAAQgnI,eAAe5jI,UACvBgiI,EAAYxlI,KAAKgxI,gBAAgB14E,EAAQ8rE,EAAYqM,EAAarwI,EAAQgnI,iBAE1EhnI,EAAQ+mI,eAAe3jI,UACnB0gI,EAAalkI,KAAKmzI,8BACtB3uG,GAAOghG,EAAWxlI,KAAKgxI,gBAAgB14E,EAAQ4rE,EAAYuM,EAAarwI,EAAQ+mI,kBAE7E3B,GAEXwL,gBAAiB,SAAU14E,EAAQy1D,EAAOkO,EAAQ77H,GAAjC,GAYTu/B,GAIA9X,EACKkgH,EACDqL,EAEIpwC,EAOIgE,EACKqsC,EA3BjBx5I,GACAqlG,QACIlmG,MAAOoH,EAAQpH,MACf28E,MAAOv1E,EAAQu1E,MACf2rC,SAAUlhH,EAAQkhH,WAGtBnzE,EAAO/tC,EAAQ+tC,IASnB,KARa,SAATA,IACAA,EAAO,GAEPxO,EAAOv/B,EAAQu/B,KACN,SAATA,IACAA,EAAO,GAEP9X,EAAY7nB,KAAKulI,kBACZwC,EAAS55F,EAAM45F,EAASha,EAAMp2H,OAAQowI,GAAUpoG,EAErD,GADIyzG,EAAa96E,EAAOjnD,EAAI08G,EAAMga,GAC9BqL,EAAa,EAKb,GAJIpwC,EAAS,GAAIoC,KACb9sC,EAAOhlC,EACPglC,EAAOjnD,GACR+hI,GACChzI,EAAQlB,OAASy1H,GACjB9sG,EAAU2c,OAAO,GAAI9iB,IAAQ0jF,OAAOpC,EAAQnpG,QACzC,CAEH,IADImtG,EAAO,GAAIhI,IAAKnlG,GACXw5I,EAAU,EAAGA,EAAUpX,EAAOtkI,OAAQ07I,IAC3CrsC,EAAK7U,OAAO6Q,EAAO4P,QAAQqpB,EAAOoX,GAAW,KAEjDrsC,GAAKl5B,QACLjmD,EAAU2c,OAAOwiE,GAI7B,MAAOn/E,GAAUltB,UAErBw0I,SAAU,SAAU/kD,GAAV,GAQEhyB,GACAC,EACAo0D,EAIA6mB,EACA/B,EACAgC,EACAC,EAhBJzO,EAAU/kI,KAAK+kI,UACfuB,EAAUtmI,KAAK2mI,SAASiM,UACxBnC,EAAcnK,EAAQmK,cACtBn4E,EAASguE,EAAQxiG,IAAIw0B,SACrBlgE,EAASgyF,EAAMomB,WAAWl4C,GAC1BC,EAAWngE,CAcf,OAbI4H,MAAKI,QAAQgnI,eAAeloI,OAASy1H,IAAO8b,EAAY94I,OAAS,IAC7DygE,EAAKgyB,EAAM92D,EAAIglC,EAAOhlC,EACtB+kC,EAAK+xB,EAAM/4E,EAAIinD,EAAOjnD,EACtBo7G,GAAS7oC,GAAIhlF,KAAK87B,MAAM29B,EAAID,IAAO,KAAO,IAC9Cq4E,EAAYtyH,KAAK,SAAUvb,EAAGC,GAC1B,MAAO+wH,IAAgBhxH,EAAG6pH,GAASmH,GAAgB/wH,EAAG4pH,KAEtD6mB,EAAW1f,GAAgB6c,EAAY,GAAIA,EAAY,IAAM,EAC7Dc,EAAQ3d,GAAgBnH,EAAOgkB,EAAY,IAC3C8C,EAAQ,GAAKD,EACbE,EAAO,IAAMjC,EAAQgC,EACzBh7E,EAAWngE,GAAUwG,KAAKspF,IAAI/C,GAAIquD,IAAS50I,KAAKspF,IAAI/C,GAAIouD,MAErDvzI,KAAKyzI,WAAW1sI,UAAUooI,SAAShnI,KAAKnI,KAAM,GAAI6nF,IAAMk9C,EAAQ/sE,GAAI+sE,EAAQ5sE,GAAKI,MAM5F2/D,GAAmBR,GAAYh3H,QAC/BwyI,4BAA6B,WACzB,MAAOlzI,MAAKkqI,iBAAiBlqI,KAAKI,QAAQyxH,YAE9CshB,4BAA6B,WAAA,GACrB/yI,GAAUJ,KAAKI,QACfszI,EAAgB,CAIpB,OAHItzI,GAAQgnI,eAAe5jI,UACvBkwI,EAAgBtzI,EAAQyxH,WAErB7xH,KAAKkqI,iBAAiB9pI,EAAQmyH,UAAWmhB,IAEpDD,SAAU,WACN,MAAO/b,OAGf98H,GAAWs9H,GAAiBnxH,UAAWkxH,IACnCE,GAAuBN,GAAgBn3H,QACvCwyI,4BAA6B,WACzB,GAAIriE,KAIJ,OAHA7wE,MAAK8vI,4BAA4B,SAAU91I,GACvC62E,EAAU/oE,KAAK9N,IAChBgG,KAAKI,QAAQgnI,gBACTv2D,GAEXsiE,4BAA6B,WACzB,GAAItiE,KAIJ,OAHA7wE,MAAKgwI,4BAA4B,SAAUh2I,GACvC62E,EAAU/oE,KAAK9N,IAChBgG,KAAKI,QAAQ+mI,gBACTt2D,GAEX4iE,SAAU,WACN,MAAO5b,OAGfj9H,GAAWu9H,GAAqBpxH,UAAWkxH,IACvCG,GAAS,KACTC,GAA6B,IAC7BC,GAAiB1hI,GAAM8J,QACvBC,KAAM,SAAUyxF,GACZpyF,KAAKoyF,OAASA,GAElB7yC,QAAS,SAAUo0F,GAAV,GAaDxsD,GACAC,EACAC,EAQIusD,EAKJC,EAAqBC,EAKjBC,EAIAC,EAGJC,EACKt2I,EAOGu2I,EAGA9/B,EAQJ+/B,EAMAC,EAhEJtzD,EAAS9gF,KACTwqF,EAASmpD,EAAWntI,MAAM,GAC1ByrF,KACAG,EAASpyF,KAAKoyF,OACdz6F,EAAS6yF,EAAO7yF,MAKpB,IAJIA,EAAS,IACTqI,KAAKq0I,iBAAiB,EAAG7pD,GACzB7yF,EAAS6yF,EAAO7yF,QAEhBA,EAAS,GAAgB,IAAXA,GAAgB6yF,EAAO,GAAGxtC,OAAOwtC,EAAO,IACtD,MAAOyH,EAMX,KAJI9K,EAAKqD,EAAO,GACZpD,EAAKoD,EAAO,GACZnD,EAAKmD,EAAO,GAChByH,EAASnqF,KAAK,GAAIyhG,IAAQpiB,IACnBA,EAAGnqC,OAAOwtC,EAAO7yF,EAAS,KAC7By6F,GAAS,EACT5H,EAAOt+D,MACPv0B,GAEJ,IAAe,IAAXA,EAIA,MAHIi8I,GAAU5zI,KAAK4zI,QAAQzsD,EAAIC,EAAI2sC,GAAGziH,IACtCqe,GAAKsiE,GAAUpC,WAAW7vF,KAAKs0I,kBAAkBV,EAASzsD,EAAIC,EAAI2sC,GAAGziH,KACrE2gF,EAASnqF,KAAK,GAAIyhG,IAAQniB,EAAIpnF,KAAKu0I,mBAAmBX,EAASzsD,EAAIC,EAAI2sC,GAAGziH,MACnE2gF,CAeX,KAZIG,GACAjL,EAAKqD,EAAO7yF,EAAS,GACrByvF,EAAKoD,EAAO,GACZnD,EAAKmD,EAAO,GACRupD,EAAgB/zI,KAAK+zI,cAAc5sD,EAAIC,EAAIC,GAC/CwsD,EAAsBE,EAAc,GACpCD,EAAmBC,EAAc,KAE7BC,EAAYh0I,KAAK4zI,QAAQzsD,EAAIC,EAAI2sC,GAAGziH,IACxCuiI,EAAsB7zI,KAAKs0I,kBAAkBN,EAAW7sD,EAAIC,EAAI2sC,GAAGziH,KAEnE2iI,EAAMJ,EACDl2I,EAAM,EAAGA,GAAOhG,EAAS,EAAGgG,IACjCmjF,EAAOuzD,iBAAiB12I,EAAK6sF,GAC7B7yF,EAAS6yF,EAAO7yF,OACZgG,EAAM,GAAKhG,IACXwvF,EAAKqD,EAAO7sF,GACZypF,EAAKoD,EAAO7sF,EAAM,GAClB0pF,EAAKmD,EAAO7sF,EAAM,GACdu2I,EAAkBpzD,EAAOizD,cAAc5sD,EAAIC,EAAIC,GACnD13D,GAAKsiE,GAAUpC,WAAWokD,GAC1BA,EAAMC,EAAgB,GAClB9/B,EAAM8/B,EAAgB,GAC1BjiD,EAASnqF,KAAK,GAAIyhG,IAAQniB,EAAIgtB,IAiBtC,OAdIhiB,IACAjL,EAAKqD,EAAO7yF,EAAS,GACrByvF,EAAKoD,EAAO7yF,EAAS,GACrB0vF,EAAKmD,EAAO,GACR2pD,EAAkBn0I,KAAK+zI,cAAc5sD,EAAIC,EAAIC,GACjD13D,GAAKsiE,GAAUpC,WAAWokD,GAC1BhiD,EAASnqF,KAAK,GAAIyhG,IAAQniB,EAAI+sD,EAAgB,KAC9CxkH,GAAKsiE,GAAUpC,WAAWskD,EAAgB,IAC1CliD,EAASnqF,KAAK,GAAIyhG,IAAQliB,EAAIysD,MAE1BM,EAAYp0I,KAAK4zI,QAAQxsD,EAAIC,EAAI0sC,GAAGziH,IACxCqe,GAAKsiE,GAAUpC,WAAWokD,GAC1BhiD,EAASnqF,KAAK,GAAIyhG,IAAQliB,EAAIrnF,KAAKu0I,mBAAmBH,EAAWhtD,EAAIC,EAAI0sC,GAAGziH,OAEzE2gF,GAEXoiD,iBAAkB,SAAU12I,EAAK6sF,GAC7B,KAAOA,EAAO7sF,EAAM,KAAO6sF,EAAO7sF,GAAKq/C,OAAOwtC,EAAO7sF,EAAM,KAAO6sF,EAAO7sF,EAAM,GAAGq/C,OAAOwtC,EAAO7sF,EAAM,MAClG6sF,EAAOpiF,OAAOzK,EAAM,EAAG,IAG/B62I,WAAY,SAAUrtD,EAAIC,EAAIC,GAAlB,GASApjF,GACAk0D,EATJq8E,GAAa,CAcjB,OAbIrtD,GAAG7zD,IAAM8zD,EAAG9zD,EACZkhH,GAAa,EACNptD,EAAG9zD,IAAM+zD,EAAG/zD,GACf8zD,EAAG/1E,EAAIg2E,EAAGh2E,GAAK81E,EAAG91E,GAAK+1E,EAAG/1E,GAAKg2E,EAAGh2E,EAAI+1E,EAAG/1E,GAAK+1E,EAAG/1E,GAAK81E,EAAG91E,KACzDmjI,GAAa,IAGbvwI,EAAKjE,KAAKy0I,aAAattD,EAAIC,GAC3BjvB,EAAKn4D,KAAK00I,kBAAkBzwI,EAAIojF,EAAG/zD,GACjC6zD,EAAG91E,GAAK+1E,EAAG/1E,GAAKg2E,EAAGh2E,GAAK8mD,GAASivB,EAAG/1E,GAAK81E,EAAG91E,GAAKg2E,EAAGh2E,GAAK8mD,IAC3Dq8E,GAAa,IAGdA,GAEXG,OAAQ,SAAUxtD,EAAIC,EAAIC,GAAlB,GACApjF,GAAKjE,KAAKy0I,aAAattD,EAAIC,GAC3BjvB,EAAKn4D,KAAK00I,kBAAkBzwI,EAAIojF,EAAG/zD,EACvC,OAAO6zD,GAAG7zD,IAAM8zD,EAAG9zD,GAAK8zD,EAAG9zD,IAAM+zD,EAAG/zD,GAAK7jB,GAAM0oD,EAAI,KAAO1oD,GAAM43E,EAAGh2E,EAAG,IAE1EojI,aAAc,SAAUrtD,EAAIC,GAAd,GACNzkF,IAAKykF,EAAGh2E,EAAI+1E,EAAG/1E,IAAMg2E,EAAG/zD,EAAI8zD,EAAG9zD,GAC/BzwB,EAAIukF,EAAG/1E,EAAIzO,EAAIwkF,EAAG9zD,CACtB,QACIzwB,EACAD,IAGRmxI,cAAe,SAAU5sD,EAAIC,EAAIC,GAAlB,GAKPusD,GAIIgB,EAeQv1I,EAWZk1I,EAEIM,EAIJP,EAxCAQ,EAAS/gB,GACTghB,EAASzjI,GACT0jI,GAAW,EACXC,GAAoB,CA0CxB,OAxCIj1I,MAAK20I,OAAOxtD,EAAIC,EAAIC,GACpBusD,EAAU5zI,KAAK4zI,QAAQzsD,EAAIC,EAAI2sC,GAAGziH,KAE9BsjI,GACAthH,EAAGtzB,KAAKk1I,mBAAmB/tD,EAAIC,EAAIC,EAAI0sC,IACvC1iH,EAAGrR,KAAKk1I,mBAAmB/tD,EAAIC,EAAIC,EAAI/1E,KAEvCsjI,EAAUthH,GAAKshH,EAAUvjI,GACzBuiI,EAAU5zI,KAAK4zI,QAAQzsD,EAAIE,EAAI0sC,GAAGziH,IAClC0jI,GAAW,IAEPh1I,KAAKw0I,WAAWrtD,EAAIC,EAAIC,KACxBytD,EAASxjI,GACTyjI,EAAShhB,IAET6gB,EAAUE,GACVlB,EAAU,GAINv0I,EADAgoF,EAAG0tD,GAAU5tD,EAAG4tD,IAAW5tD,EAAG4tD,IAAW3tD,EAAG2tD,IAAW5tD,EAAG4tD,GAAU1tD,EAAG0tD,IAAW3tD,EAAG2tD,IAAW5tD,EAAG4tD,GAC5FpqD,IAAYtD,EAAG0tD,GAAU5tD,EAAG4tD,KAAY3tD,EAAG0tD,GAAU3tD,EAAG2tD,MAEvDnqD,IAAYtD,EAAGytD,GAAU3tD,EAAG2tD,KAAY1tD,EAAG2tD,GAAU5tD,EAAG4tD,KAEpEnB,EAAUvb,GAA6Bh5H,EACvC41I,GAAoB,KAI5BV,EAAqBv0I,KAAKu0I,mBAAmBX,EAASzsD,EAAIC,EAAI0tD,EAAQC,GACtEE,IACIJ,EAAYC,EAChBA,EAASC,EACTA,EAASF,GAETP,EAAoBt0I,KAAKs0I,kBAAkBV,EAASxsD,EAAIC,EAAIytD,EAAQC,GACpEC,IACAh1I,KAAKm1I,qBAAqBhuD,EAAIC,EAAImtD,EAAoBX,GACtD5zI,KAAKm1I,qBAAqB/tD,EAAIC,EAAIitD,EAAmBV,KAGrDW,EACAD,IAGRa,qBAAsB,SAAU/tD,EAAIC,EAAI+tD,EAAIxB,GACpCxsD,EAAG/1E,EAAIg2E,EAAGh2E,EACNg2E,EAAGh2E,EAAI+jI,EAAG/jI,GACV+jI,EAAG9hH,EAAI8zD,EAAG9zD,GAAK+zD,EAAGh2E,EAAI+1E,EAAG/1E,GAAKuiI,EAC9BwB,EAAG/jI,EAAIg2E,EAAGh2E,GACH+jI,EAAG/jI,EAAI+1E,EAAG/1E,IACjB+jI,EAAG9hH,EAAI+zD,EAAG/zD,GAAK+zD,EAAGh2E,EAAI+1E,EAAG/1E,GAAKuiI,EAC9BwB,EAAG/jI,EAAI+1E,EAAG/1E,GAGV+jI,EAAG/jI,EAAIg2E,EAAGh2E,GACV+jI,EAAG9hH,EAAI8zD,EAAG9zD,GAAK8zD,EAAG/1E,EAAIg2E,EAAGh2E,GAAKuiI,EAC9BwB,EAAG/jI,EAAIg2E,EAAGh2E,GACH+1E,EAAG/1E,EAAI+jI,EAAG/jI,IACjB+jI,EAAG9hH,EAAI+zD,EAAG/zD,GAAK8zD,EAAG/1E,EAAIg2E,EAAGh2E,GAAKuiI,EAC9BwB,EAAG/jI,EAAI+1E,EAAG/1E,IAItBuiI,QAAS,SAAUzsD,EAAIC,EAAI0tD,EAAQC,GAA1B,GAGDnB,GAFAtgH,EAAI8zD,EAAG0tD,GAAU3tD,EAAG2tD,GACpBzjI,EAAI+1E,EAAG2tD,GAAU5tD,EAAG4tD,EAOxB,OAJInB,GADM,IAANtgH,EACU,EAEAjiB,EAAIiiB,GAItB4hH,mBAAoB,SAAU/tD,EAAIC,EAAIC,EAAInpE,GACtC,MAAOmpE,GAAGnpE,GAASkpE,EAAGlpE,IAAUkpE,EAAGlpE,GAASipE,EAAGjpE,IAAUmpE,EAAGnpE,GAASkpE,EAAGlpE,IAAUkpE,EAAGlpE,GAASipE,EAAGjpE,IAErGo2H,kBAAmB,SAAUV,EAASzsD,EAAIG,EAAIwtD,EAAQC,GAAnC,GACXtqD,GAAKtD,EAAG2tD,GACRr+B,EAAKnvB,EAAGwtD,GACRv8E,GAAYk+C,EAAKhsB,GAAM2tC,EAC3B,OAAOp4H,MAAKoqF,MAAMK,EAAKlyB,EAAU4uB,EAAG4tD,GAAUx8E,EAAWq7E,EAASkB,EAAQC,IAE9ER,mBAAoB,SAAUX,EAASzsD,EAAIG,EAAIwtD,EAAQC,GAAnC,GACZtqD,GAAKtD,EAAG2tD,GACRr+B,EAAKnvB,EAAGwtD,GACRv8E,GAAYk+C,EAAKhsB,GAAM2tC,EAC3B,OAAOp4H,MAAKoqF,MAAMqsB,EAAKl+C,EAAU+uB,EAAGytD,GAAUx8E,EAAWq7E,EAASkB,EAAQC,IAE9E3qD,MAAO,SAAUirD,EAAQC,EAAQR,EAAQC,GACrC,GAAI5qD,GAAe,GAAIqiB,IAAS3kB,KAGhC,OAFAsC,GAAa2qD,GAAUO,EACvBlrD,EAAa4qD,GAAUO,EAChBnrD,GAEXuqD,kBAAmB,SAAUzwI,EAAIqvB,GAAd,GAGNx4B,GAFLnD,EAASsM,EAAGtM,OACZqH,EAAS,CACb,KAASlE,EAAI,EAAGA,EAAInD,EAAQmD,IACxBkE,GAAUJ,KAAKuoC,IAAI7T,EAAGx4B,GAAKmJ,EAAGnJ,EAElC,OAAOkE,MAMfyiB,GAAQ8zH,UAAYjf,GACpBr+H,MAAM2C,WAAW3C,MAAMwpB,SACnBuzG,UAAWA,GACXS,SAAUA,GACVhF,cAAeA,EACf5oC,MAAOA,GACP+kC,IAAKA,GACLiJ,KAAMA,GACNC,OAAQA,GACRE,aAAcA,GACdG,aAAcA,GACdF,aAAcA,GACdC,WAAYA,GACZK,YAAaA,GACbC,aAAcA,GACd3sB,KAAMA,GACN8sB,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,GAChBpL,UAAWA,EACX5yH,SAAUA,EACVyrC,YAAaA,EACbklF,iBAAkBA,EAClBC,UAAWA,EACXI,oBAAqBA,EACrB1wH,WAAYA,GACZ+qF,cAAeA,EACfimC,WAAYA,EACZE,YAAaA,EACbtoG,OAAQswG,GACR5mG,KAAMA,EACN8+F,WAAYA,EACZ/oH,QAASA,EACTipH,iBAAkBA,EAClByJ,iBAAkBA,GAClB5vH,QAASA,EACT7J,WAAYA,GACZu3C,SAAUA,EACV83E,SAAUA,EACVF,SAAUA,EACVr4G,IAAKA,EACLo5G,gBAAiBA,EACjBwJ,WAAYA,GACZvJ,kBAAmBA,EACnBC,kBAAmBA,EACnBd,WAAYA,EACZhnF,OAAQA,GACR+gD,WAAYA,GACZ3uF,MAAOA,GACP6sF,QAASA,GACTG,IAAKA,GACL3O,cAAeA,GACfpM,YAAaA,GACb+b,aAAcA,GACdD,iBAAkBA,GAClBh1D,KAAMA,GACNm1D,WAAYA,GACZrgE,aAAcxsB,MAAMwsB,aACpBm9D,UAAWA,GACXuD,IAAKA,GACL11E,MAAOA,GACPs2E,aAAcA,GACdT,eAAgBA,GAChBqoC,iBAAkBA,EAClBc,YAAaA,EACbX,SAAUA,EACVyB,SAAUA,EACVC,aAAcA,EACdC,SAAUA,EACVE,WAAYA,EACZI,UAAWA,EACX1vH,SAAUA,EACVivH,UAAWA,EACXW,aAAcA,EACdhC,YAAaA,EACbD,OAAQA,EACRj3G,UAAWA,EACXw5G,WAAYA,EACZb,OAAQA,KAEdh5H,OAAOuB,MAAM8sB,SACC,kBAAVvuB,SAAwBA,OAAO2iC,IAAM3iC,OAAS,SAAU4iC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAU9iC,EAAGC,QACVA,OAAO,qBAAsB,2BAA4BD,IAC3D,YACG,SAAUE,GAAV,GACOgrB,GAAUxpB,MAAMwpB,QAChBg0G,EAAWh0G,EAAQg0G,SACnBxiC,EAAOh7F,MAAMypB,OACjBD,GAAQ+zH,aACJ90I,OAAQ,SAAU+F,EAAOgvI,GACrB,IAAKhvI,EAAMg+F,aACP,KAAU37F,OAAM,mDAEpBrC,GAAM0sF,UAAYnzF,KAAKmzF,UACvB1sF,EAAMmsF,YAAc5yF,KAAK4yF,YACzBnsF,EAAMivI,UAAY11I,KAAK01I,UAClBD,IACDhvI,EAAM6qF,IAAMtxF,KAAKsxF,IACjB7qF,EAAMkvI,aAAe31I,KAAK21I,eAGlCxiD,UAAW,SAAU/yF,GACjB,MAAO6yF,GAAKE,UAAUnzF,KAAKykG,eAAgBrkG,IAE/CwyF,YAAa,SAAUxyF,GACnB,MAAO6yF,GAAKL,YAAY5yF,KAAKykG,aAAarkG,GAAUA,IAExDs1I,UAAW,SAAUt1I,GACjB,MAAO6yF,GAAKyiD,UAAU11I,KAAKykG,eAAgBrkG,IAE/CkxF,IAAK,WACD,GAAI2B,EAAK3B,IAAIqZ,QACT,MAAO1X,GAAK3B,IAAIF,YAAYpxF,KAAKykG,eAEjC,MAAU37F,OAAM,8EAGxB6sI,aAAc,WAAA,GAKF9tH,GAKA80C,EAEAu2B,CAXR,KAAKj7F,MAAMC,QAAQ01G,OACf,MAAO,KAEX,IAAI3a,EAAK2a,OAAOjD,QAWZ,MAVI9iF,GAAYpxB,EAAE,WAAWuB,KACzB+B,QAAS,OACTf,MAAOgH,KAAKlI,QAAQkB,QACpBC,OAAQ+G,KAAKlI,QAAQmB,WACtBu+B,SAASj6B,SAASya,MACjB2kD,EAAU,GAAIs2B,GAAK2a,OAAOjD,QAAQ9iF,EAAU,IAChD80C,EAAQs2B,KAAKjzF,KAAKykG,gBACdvR,EAAQv2B,EAAQgjD,aAAaja,YACjC/oC,EAAQ32C,UACR6B,EAAUQ,SACH6qE,CAEP,MAAUpqF,OAAM,oFAI5B2sH,EAASP,YAAY3sG,UACjBxf,OAAQ,SAAUA,GACd,MAAO9Q,OAAM8Q,OAAOjC,MAAM,MAAOiC,GAAQoN,OAAOra,MAAMiL,UAAUP,MAAM2B,KAAKpN,UAAW,MAE1FwO,SAAUtR,MAAMsR,SAChBwN,UAAW9e,MAAM8e,YAErB0+G,EAAS1J,gBAAgBxjG,UAAW/f,QAASvQ,MAAMwK,WACnDgf,EAAQm0H,QAAUn0H,EAAQomE,MAC1BpmE,EAAQo0H,MAAQp0H,EAAQmrG,IACxBnrG,EAAQq0H,QAAU,SAAU7tI,GACxB,MAAOwZ,GAAQ2qG,gBAAgBnkH,EAAEuY,iBAEvC9pB,OAAOuB,MAAM8sB,SACC,kBAAVvuB,SAAwBA,OAAO2iC,IAAM3iC,OAAS,SAAU4iC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAU9iC,EAAGC,QACVA,OAAO,sBACH,0BACA,qBACDD,IACL,aAYkB,kBAAVC,SAAwBA,OAAO2iC,IAAM3iC,OAAS,SAAU4iC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAU9iC,EAAGC,QACVA,OAAO,mCAAoC,sBAAuBD,IACpE,YACG,WAAA,GAEOw/I,GACAC,EACA7hB,EACA8hB,EACAC,EACAC,EACAC,EACAC,EACAniB,EACAkR,EAcAkR,EAUAC,EAcAC,EAcAC,EAMAC,EAyBAC,EAOAC,EAOAC,EAsBAC,EAMAC,EAGAC,EAGAC,EAaAC,EAaAC,EAMAC,EAMAC,EAMAC,EAGAC,EAUAC,EAcAC,EAcAC,EAmCA3uG,EAGA4uG,EAGAC,CA3QJlhJ,QAAOuB,MAAMwpB,QAAU/qB,OAAOuB,MAAMwpB,YAChCs0H,EAAU,IACVC,EAAc,GACd7hB,EAAQ,OACR8hB,EAAO,+BACPC,EAAS,QAAUD,EACnBE,EAAS,QAAUF,EACnBG,EAAS,QAAUH,EACnBI,EAAc,cACdniB,EAAQ,OACRkR,EAAQ,WACR,OACI/B,MAAQnE,QAAUlmI,MAAO,IACzBq9C,OACI0iD,KAAMo9C,EACNv/C,QAAS,GAEboQ,MACIrvG,OAAQ,GACRqB,MAAO,GAEXwK,SAAS,IAGb8yI,EAAe,WACf,OACIvS,QAAUhrC,KAAMo9C,GAChB/Q,MAAOA,IACPr8F,OACIgwD,KAAMq9C,EACN5yG,OAAQ,KAIhB+yG,EAAa,WACb,OACItY,WAAa4Z,SAAW3Y,YACxBl4B,MACI9+E,QAAS,EACTlvB,MAAO,GAEX6+I,SACI95I,KAAM,EACNyF,SAAS,GAEb0kB,QAAS,KAGbsuH,EAAkB,WAClB,OACIvY,WAAa4Z,SAAW3Y,YACxBl4B,MACI9+E,QAAS,EACTlvB,MAAO,GAEX6+I,SACI95I,KAAM,EACNyF,SAAS,GAEb0kB,QAAS,KAGbuuH,EAAY,WACZ,OACI5sI,IAAKksI,EACLx9B,QAASy9B,IAGbU,EAAgB,WAChB,OACIoB,cAAe,GACfC,UAAW,GACX7Y,QACI8Y,YAAa,GACbh/I,MAAO,GAEXi/I,UAAW/jB,EACXrqH,IAAK,EACLo0H,WACIiB,QACIh3G,QAAS,EACTlvB,MAAO,GAEXk/I,UAAYl/I,MAAO,GACnBm/I,MAAQn/I,MAAO,GACfo/I,QAAUp/I,MAAO,IAErBm/I,MAAQn/I,MAAO,GACfo/I,QAAUp/I,MAAO,GACjBu/G,QAAS,GACT2/B,UAAYl/I,MAAO,KAGvB29I,EAAe,WACf,OACIzX,QAAUlmI,MAAO,GACjB+qI,QAAU7iC,WAAYm1C,GACtBnuH,QAAS,KAGb0uH,EAAe,WACf,OACI/sI,IAAKksI,EACLx9B,QAASy9B,EACT11H,QAAUq1D,MAAO,aAGrBkhE,EAAoB,WACpB,OACI3X,QACI8Y,YAAa,GACbh/I,MAAO,GAEXi/I,UAAW/jB,EACXrqH,IAAK,EACLo0H,WACIiB,QACIh3G,QAAS,EACTlvB,MAAO,GAEXguG,MAAQhuG,MAAO,IAEnBguG,MACIrxB,MAAOw+C,EACPn7H,MAAO,GAEXu/G,QAAS,KAGbu+B,EAAe,WACf,OACIjtI,IAAKksI,EACLx9B,QAASy9B,IAGbe,EAAc,WACd,OAASvzG,OAAQ,IAEjBwzG,EAAa,WACb,OAASh+I,MAAO,IAEhBi+I,EAAa,WACb,OACIptI,IAAK,EACLo0H,WACIj3B,MACI9+E,QAAS,EACTlvB,MAAO,IAGfguG,MAAQhuG,MAAO,GACfu/G,QAAS,KAGb2+B,EAAkB,WAClB,OACIlwC,MACI9+E,QAAS,EACTlvB,MAAO,GAEX6+I,SACI95I,KAAM,EACNyF,SAAS,GAEb0kB,QAAS,KAGbivH,EAAkB,WAClB,OACIU,SAAWr0I,SAAS,GACpBxK,MAAO,IAGXo+I,EAAiB,WACjB,OACIvtI,IAAKksI,EACLx9B,QAASy9B,IAGbqB,EAAoB,WACpB,OACIxtI,IAAKksI,EACLx9B,QAASy9B,IAGbsB,EAAoB,WACpB,OAASt+I,MAAO,IAEhBu+I,EAAkB,WAClB,OACI1tI,IAAK,GACLm9F,MACIrxB,MAAOw+C,EACPn7H,MAAO,GAEXu/G,QAASy9B,IAGbwB,EAAY,WACZ,OACIzT,QACI7iC,WAAY,GACZvrB,MAAO,GACPihB,SACIt3F,IAAK,EACL1G,OAAQ,EACRF,KAAM,EACNC,MAAO,MAKnB8+I,EAAe,WACf,OACI1T,QACI7iC,WAAY,GACZvrB,MAAO,GACPihB,SACIt3F,IAAK,EACL1G,OAAQ,EACRF,KAAM,EACNC,MAAO,MAKnB++I,EAAiB,SAAUt3I,GAC3B,OACIoD,SAAS,EACTugI,QAAUhrC,KAAMm9C,GAChBrX,QAASz+H,EAAQ+/H,cAAmB1tC,SAAU,QAC9C4lD,KAAM9B,IACN+B,UAAW9B,IACX+B,kBAAmB/B,IACnBgC,IAAK/B,IACLgC,QAAS/B,IACTgC,OAAQ/B,IACRp0C,OAAQq0C,IACR+B,YAAa9B,IACb+B,OAAQ9B,IACR+B,IAAKrB,IACLsB,MAAO/B,IACPgC,OAAQtB,IACRuB,oBAAqBzB,IACrBvwC,KAAMgwC,IACN5R,MAAOA,IACP6T,KAAMhC,IACNiC,UAAWhC,IACXiC,UAAWhC,IACXiC,UAAWlC,IACXmC,UAAWlC,IACXmC,SAAUlC,IACVmC,YAAalC,IACbmC,YAAalC,IACbmC,aAAclD,IACdmD,gBAAiBhD,IACjBiD,eAAgB/C,IAChBgD,aAAc5C,IACd6C,UAAWtC,MAGfxuG,EAAQ,WACR,OAASgwD,KAAMq9C,IAEfuB,EAAS,WACT,OAAS5T,QAAUhrC,KAAMo9C,KAEzByB,EAAY,SAAUx3I,GAItB,MAHgB,UAAZA,IACAA,OAGAk2I,aAAcA,IACdwD,cAAgB1S,gBAAkB5jI,SAAS,IAC3C6X,WACI+tD,MACInwE,OAAQ,GACRuqC,QAAUlkC,IAAK,MAGvBo4I,eAAgBA,EAAet3I,GAC/B2oC,MAAOA,IACP4uG,OAAQA,MAGhB1/I,MAAM2C,WAAW3C,MAAMwpB,SAAWs4H,eAAgBnC,QAEtC,kBAAVphJ,SAAwBA,OAAO2iC,IAAM3iC,OAAS,SAAU4iC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAU9iC,EAAGC,QACVA,OAAO,6BAA8B,sBAAuBD,IAC9D,WAEE,QAASyjJ,GAAUv0H,GAMf,QAASw0H,GAASl7I,EAAKm7I,GACnBt2H,EAAI7kB,EAAKo7I,EAAWD,EAAS,oBAEjC,QAASC,GAAWD,EAASn6G,GACzB,MAAOq6G,GAAK5yH,KAAK,WAAa0yH,GAASliJ,IAAI+nC,GAE/C,QAASnc,GAAI6jB,EAAM7pC,GAIf,IAJJ,GACQoiD,GAAQq6F,EACR5xI,EAAQg/B,EAAKzwC,MAAM,KACnB+H,EAAM0J,EAAMqJ,QACTrJ,EAAM9Q,OAAS,GAClBqoD,EAAQA,EAAMjhD,GAAOihD,EAAMjhD,OAC3BA,EAAM0J,EAAMqJ,OAEhBkuC,GAAMjhD,GAAOnB,EApBrB,GAIQy8I,GACAD,CAJJ,QAAK30H,GAASkH,EACHA,GAEP0tH,GAAUvhB,MAAO7gI,MAAMwpB,QAAQs4H,kBAC/BK,EAAO3jJ,EAAE,m0CAAw+C+gC,SAASj6B,SAASya,MAiBtgD,WACGiiI,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,qBAC9Br2H,EAAI,sCAAuCu2H,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,QAASlhD,GAAKmhD,GACV,MAAOC,GAAWD,EAAS,YAAc,IAAMC,EAAWD,EAAS,cAF1E,GAIOI,GAAcvhD,EAAK,cACnBwhD,EAAYxhD,EAAK,oBACjByhD,EAAYzhD,EAAK,mBACrBn1E,GAAI,iCAAkC42H,GACtC52H,EAAI,sCAAuC02H,GAC3C12H,EAAI,gCAAiC02H,GACrC12H,EAAI,2BAA4B02H,GAChC12H,EAAI,mCAAoC42H,GACxC52H,EAAI,wCAAyC02H,GAC7C12H,EAAI,mBAAoB22H,MAE3B,WACG,QAASE,GAAUC,GACf,MAAOA,GAAO59I,cAAcwM,WAAW,GAAK,IAAIA,WAAW,GAE/D,QAASqxI,GAAUzrI,GACf,MAAOurI,GAAUvrI,EAAK7W,MAAM,mBAAmB,IALtD,GAOOmmI,GAAS/nI,EAAE,sBAAsBioD,UACjCk8F,EAAepc,EAAO3kF,OAAO,SAAU8Z,EAAKl1D,GAC5C,GAAI4xE,GAAMsqE,EAAUl8I,EAAGR,UAEvB,OADA01D,GAAI0c,GAAO55E,EAAEgI,GAAIzG,IAAI,mBACd27D,MAEX/vC,GAAI,qBAAsBg3H,MAE9BR,EAAK/xH,SACLsE,EAAQ0tH,EACDA,GA7GX,GAAI1tH,EA+GJ10B,OAAMwpB,QAAQu4H,UAAYA,GACV,kBAAVxjJ,SAAwBA,OAAO2iC,IAAM3iC,OAAS,SAAU4iC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAU9iC,EAAGC,QACVA,OAAO,yBAA0B,mCAAoCD,IACvE,WAs5EE,MAr5EC,UAAUE,GA44EP,QAASokJ,GAAKC,EAAMC,GAChB,MAAOtkJ,GAAEuc,IAAI8nI,EAAM,SAAU3nG,EAAMhhC,GAC/B,QACQghC,EACA4nG,EAAK5oI,OAh5ExB,GACOla,GAAQvB,OAAOuB,MAAOspB,EAAKtpB,EAAMwpB,QAAQF,GAAI3mB,EAAa3C,EAAM2C,WAChEu5H,EAAQ,OAAQ8hB,EAAO,6BAA8BE,EAAS,QAAUF,EAAM/hB,EAAQ,OACtF6lB,EAAiB9hJ,EAAMwpB,QAAQs4H,gBAAiB5Z,WAAW,IAC3D6a,GAAmB59G,OAAS2mG,QAAUhrC,KAAMo9C,KAC5C8E,GACAC,eACItX,OAAS17G,QAAS,IAClBg3E,QAAUlmG,MAAO,IAErBgiD,UACI75B,QACIg6H,SACIniJ,MAAO,EACPC,OAAQ,KAIpBmiJ,YACIl8C,QACIlmG,MAAO,EACPsoH,SAAU,QAGlB+5B,oBACIn8C,QAAUlmG,MAAO,GACjB87B,WACIqmH,SACIniJ,MAAO,EACPC,OAAQ,IAGhB+hD,UACIsgG,OACI,OACA,aAKZjyH,EAAS9H,EAAG8H,OAAQkyH,EAAgBh6H,EAAGg6H,cAAgB,SAAUC,EAAWp7I,GAArB,GAM/Cy6C,GALA77C,IACJA,GAAO85H,MAAQl+H,KAAem/I,EAAgB35I,EAAQ04H,OACtD95H,EAAOy8I,MAAQ7gJ,KAAeogJ,EAAgB56I,EAAQq7I,OACtDz8I,EAAO08I,QAAU9gJ,KAAeqgJ,EAAkB76I,EAAQs7I,SAC1D18I,EAAO28I,QAAU/gJ,KAAewF,EAAQu7I,SACpC9gG,EAAW77C,EAAO85H,MAAM4e,eAC5B78F,EAAS++F,aAAeh/I,KAAeigD,EAASmsD,MAChDnsD,EAAS4+F,aAAe7+I,KAAeigD,EAASw9F,MAChDx9F,EAASy9F,UAAY19I,KAAeigD,EAASw9F,MAC7Cx9F,EAAS09F,kBAAoB39I,KAAeigD,EAASy9F,WACrDz9F,EAAS6+F,gBAAkB9+I,KAAeigD,EAAS49F,SACnD59F,EAASu+F,UAAYx+I,KAAeigD,EAASq+F,WAC7Cr+F,EAASw+F,UAAYz+I,KAAeigD,EAASs+F,WAC7C9vH,EAAOmyH,GAAax8I,EAE5Bu8I,GAAc,SACVziB,OACI/vF,OAAS4sC,MAAOu+C,GAChByjB,QACI5T,QAAUpuD,MAAOu+C,GACjB0nB,eACI7X,QAAUpuD,MAAO,WACjBkiE,SAAWliE,MAAO,aAG1B+hE,gBACI3T,QAAUpuD,MAAOu+C,GACjB2nB,WAAalmE,MAAOu+C,GACpBkR,OACI/B,MACIniC,WAAY,UACZg+B,QAAUvpD,MAAO,YAErBt/B,OAASs/B,MAAOu+C,GAChBltB,MAAQrxB,MAAO,YAEnBkjE,KAAOha,SAAWpsC,SAAU,eAC5BqmD,OAASja,SAAWpsC,SAAU,eAC9BuU,MAAQ6wC,SAAW32C,WAAY,YAC/B46C,SAAWjE,SAAW32C,WAAY,YAClCs4C,aAAe3B,SAAW32C,WAAY,YACtC24C,WAAa7yC,MAAQrxB,MAAO,YAC5BqjE,qBAAuBhyC,MAAQrxB,MAAO,YACtCgjE,aACIV,UAAW,OACXjxC,MAAQrxB,MAAOu+C,GACfgL,QACI8Y,YAAa,IACb9vH,QAAS,GAEb+1G,WACIiB,QACIvpD,MAAOu+C,EACPhsG,QAAS,MAIrB+wH,MAAQjyC,MAAQrxB,MAAOu+C,KAE3B6nB,WAAa76C,WAAY,WACzB05C,cACI,UACA,UACA,UACA,UACA,UACA,WAEJtE,cACItvC,MAAQrxB,MAAO,WACfouD,QAAUpuD,MAAOu+C,GACjBkT,gBAAkBzxD,MAAO,WACzBwxD,gBAAkBxxD,MAAO,WACzB5sC,OAAS4sC,MAAOu+C,GAChB8nB,WAAarmE,MAAO,WACpByvD,OACI/B,MACIniC,WAAY,UACZg+B,QAAUvpD,MAAO,YAErBt/B,OAASs/B,MAAOu+C,GAChBltB,MAAQrxB,MAAO,cAI3B8lE,OACIvhF,SAAWyb,MAAO,WAClBv4C,OACI6+G,sBAAuB,UACvBlY,QAAUpuD,MAAOu+C,GACjBgQ,YAAcvuD,MAAOu+C,GACrBkQ,YAAczuD,MAAOu+C,GACrBltB,MAAQrxB,MAAOu+C,KAGvBwnB,SACIR,eACIj8C,MAAQtpB,MAAO,WACfumE,mBACIj9C,MAAQtpB,MAAOu+C,GACfh1B,QAAUvpB,MAAO,WACjBiuD,OACI3kC,MAAQtpB,MAAO,WACfupB,QAAUvpB,MAAO,aAGzBrgB,SAAWqgB,MAAOu+C,IAEtBl5E,UACI75B,QACIg6H,SACIl8C,MAAQtpB,MAAO,WACfupB,QAAUvpB,MAAOu+C,GACjB0P,OACI3kC,MAAQtpB,MAAOu+C,GACfh1B,QAAUvpB,MAAOu+C,MAI7B/1F,QACIg+G,OACIj9C,QAAUvpB,MAAOu+C,GACjBj1B,MAAQtpB,MAAOu+C,MAI3BknB,YAAcl8C,QAAUvpB,MAAOu+C,IAC/BmnB,oBACIn8C,QAAUvpB,MAAOu+C,GACjB5+D,SAAWqgB,MAAOu+C,GAClBp/F,WACIqmH,SACIl8C,MAAQtpB,MAAO,WACfupB,QAAUvpB,MAAO,eAKjCgmE,SACIS,SAEQ,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,eAKhBb,EAAc,YACVziB,OACI/vF,OAAS4sC,MAAO,WAChBgiE,QACI5T,QAAUpuD,MAAO,WACjBimE,eACI7X,QAAUpuD,MAAO,WACjBkiE,SAAWliE,MAAO,aAG1B+hE,gBACI3T,QACIpuD,MAAOw+C,EACPjzB,WAAYgzB,EACZhsG,QAAS,IAEb2zH,WAAalmE,MAAO,WACpBgjE,aACIV,UAAW,UACXjxC,MAAQrxB,MAAO,YAEnBkkE,WAAa7yC,MAAQrxB,MAAO,YAC5BqjE,qBAAuBhyC,MAAQrxB,MAAO,YACtCyvD,OACI/B,MACIniC,WAAY,cACZg+B,QAAUvpD,MAAO,YAErBt/B,OAASs/B,MAAO,WAChBqxB,MAAQrxB,MAAO,aAGvBilE,cACI,UACA,UACA,UACA,UACA,UACA,WAEJtE,cACItvC,MAAQrxB,MAAO,WACfouD,QAAUpuD,MAAO,WACjByxD,gBAAkBzxD,MAAO,WACzBwxD,gBAAkBxxD,MAAO,WACzB5sC,OAAS4sC,MAAO,WAChBqmE,WAAarmE,MAAO,WACpByvD,OACI/B,MACIniC,WAAY,cACZg+B,QAAUvpD,MAAO,YAErBt/B,OAASs/B,MAAO,WAChBqxB,MAAQrxB,MAAO,cAI3B8lE,OACIvhF,SAAWyb,MAAO,WAClBv4C,OACI6+G,sBAAuB,UACvBlY,QAAUpuD,MAAO,WACjBuuD,YAAcvuD,MAAO,WACrByuD,YAAczuD,MAAO,WACrBqxB,MAAQrxB,MAAO,aAGvB+lE,SACIR,eACIj8C,MAAQtpB,MAAO,WACfumE,mBACIj9C,MAAQtpB,MAAO,WACfupB,QAAUvpB,MAAOu+C,GACjB0P,OACI3kC,MAAQtpB,MAAOu+C,GACfh1B,QAAUvpB,MAAO,aAGzBrgB,SAAWqgB,MAAO,YAEtB36B,UACI75B,QACIg6H,SACIl8C,MAAQtpB,MAAOu+C,GACfh1B,QAAUvpB,MAAO,WACjBiuD,OACI3kC,MAAQtpB,MAAO,WACfupB,QAAUvpB,MAAO,cAI7Bx3C,QACIg+G,OACIj9C,QAAUvpB,MAAO,WACjBspB,MAAQtpB,MAAO,cAI3BylE,YAAcl8C,QAAUvpB,MAAO,YAC/B0lE,oBACIn8C,QAAUvpB,MAAO,WACjBrgB,SAAWqgB,MAAO,WAClB7gD,WACIqmH,SACIl8C,MAAQtpB,MAAO,WACfupB,QAAUvpB,MAAO,eAKjCgmE,SACIS,SAEQ,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,eAKhBb,EAAc,gBACVziB,OACI/vF,OAAS4sC,MAAO,WAChBgiE,QACI5T,QAAUpuD,MAAO,WACjBimE,eACI7X,QAAUpuD,MAAO,WACjBkiE,SAAWliE,MAAO,aAG1B+hE,gBACI3T,QAAUpuD,MAAO,WACjBkmE,WAAalmE,MAAO,WACpByvD,OACI/B,MACIniC,WAAY,cACZg+B,QAAUvpD,MAAO,YAErBt/B,OAASs/B,MAAO,WAChBqxB,MAAQrxB,MAAO,YAEnBkjE,KAAOha,SAAWpsC,SAAU,eAC5BqmD,OAASja,SAAWpsC,SAAU,eAC9BuU,MAAQ6wC,SAAW32C,WAAY,YAC/B46C,SAAWjE,SAAW32C,WAAY,YAClCs4C,aAAe3B,SAAW32C,WAAY,YACtCm3C,MAAQnwH,QAAS,IACjB2xH,WAAa7yC,MAAQrxB,MAAO,YAC5BqjE,qBAAuBhyC,MAAQrxB,MAAO,YACtCgjE,aACIV,UAAW,UACXjxC,MAAQrxB,MAAO,WACfupD,QACI8Y,YAAa,IACb9vH,QAAS,GAEb+1G,WACIiB,QACIvpD,MAAO,UACPztD,QAAS,KAIrB+wH,MAAQjyC,MAAQrxB,MAAO,aAE3BomE,WAAa76C,WAAY,WACzB05C,cACI,UACA,UACA,UACA,UACA,UACA,WAEJtE,cACItvC,MAAQrxB,MAAO,WACfouD,QAAUpuD,MAAO,WACjByxD,gBAAkBzxD,MAAO,WACzBwxD,gBAAkBxxD,MAAO,WACzB5sC,OAAS4sC,MAAO,WAChBqmE,WAAarmE,MAAO,WACpByvD,OACI/B,MACIniC,WAAY,cACZg+B,QAAUvpD,MAAO,YAErBt/B,OAASs/B,MAAO,WAChBqxB,MAAQrxB,MAAO,cAI3B8lE,OACIvhF,SAAWyb,MAAO,WAClBv4C,OACI6+G,sBAAuB,UACvBlY,QAAUpuD,MAAO,WACjBuuD,YAAcvuD,MAAO,WACrByuD,YAAczuD,MAAO,WACrBqxB,MAAQrxB,MAAO,aAGvB+lE,SACIR,eACIj8C,MAAQtpB,MAAO,WACfumE,mBACIj9C,MAAQtpB,MAAOu+C,GACfh1B,QAAUvpB,MAAO,WACjBiuD,OACI3kC,MAAQtpB,MAAO,WACfupB,QAAUvpB,MAAOu+C,KAGzB5+D,SAAWqgB,MAAOu+C,IAEtBl5E,UACI75B,QACIg6H,SACIl8C,MAAQtpB,MAAO,WACfupB,QAAUvpB,MAAOu+C,GACjB0P,OACI3kC,MAAQtpB,MAAOu+C,GACfh1B,QAAUvpB,MAAOu+C,MAI7B/1F,QACIg+G,OACIj9C,QAAUvpB,MAAOu+C,GACjBj1B,MAAQtpB,MAAOu+C,MAI3BknB,YAAcl8C,QAAUvpB,MAAOu+C,IAC/BmnB,oBACIn8C,QAAUvpB,MAAOu+C,GACjB5+D,SAAWqgB,MAAOu+C,GAClBp/F,WACIqmH,SACIl8C,MAAQtpB,MAAO,WACfupB,QAAUvpB,MAAOu+C,OAKjCynB,SACIS,SAEQ,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,eAKhBb,EAAc,WACVziB,OACI/vF,OAAS4sC,MAAO,WAChBgiE,QACI5T,QAAUpuD,MAAO,WACjBimE,eACI7X,QAAUpuD,MAAO,WACjBkiE,SAAWliE,MAAO,aAG1B+hE,gBACI3T,QACIpuD,MAAOw+C,EACPjzB,WAAYgzB,EACZhsG,QAAS,IAEb2zH,WAAalmE,MAAO,WACpBgjE,aACIV,UAAW,UACXjxC,MAAQrxB,MAAO,YAEnBkkE,WAAa7yC,MAAQrxB,MAAO,YAC5BqjE,qBAAuBhyC,MAAQrxB,MAAO,YACtCyvD,OACI/B,MACIniC,WAAY,cACZg+B,QAAUvpD,MAAO,YAErBt/B,OAASs/B,MAAO,WAChBqxB,MAAQrxB,MAAO,aAGvBilE,cACI,UACA,UACA,UACA,UACA,UACA,WAEJtE,cACItvC,MAAQrxB,MAAO,WACfouD,QAAUpuD,MAAO,WACjBwxD,gBAAkBxxD,MAAO,WACzByxD,gBAAkBzxD,MAAO,WACzB5sC,OAAS4sC,MAAO,WAChBqmE,WAAarmE,MAAO,WACpByvD,OACI/B,MACIniC,WAAY,cACZg+B,QAAUvpD,MAAO,YAErBt/B,OAASs/B,MAAO,WAChBqxB,MAAQrxB,MAAO,cAI3B8lE,OACIvhF,SAAWyb,MAAO,WAClBv4C,OACI6+G,sBAAuB,UACvBlY,QAAUpuD,MAAO,WACjBuuD,YAAcvuD,MAAO,WACrByuD,YAAczuD,MAAO,WACrBqxB,MAAQrxB,MAAO,aAGvB+lE,SACIR,eACIj8C,MAAQtpB,MAAO,WACfumE,mBACIj9C,MAAQtpB,MAAO,WACfupB,QAAUvpB,MAAOu+C,GACjB0P,OACI3kC,MAAQtpB,MAAOu+C,GACfh1B,QAAUvpB,MAAO,aAGzBrgB,SAAWqgB,MAAO,YAEtB36B,UACI75B,QACIg6H,SACIl8C,MAAQtpB,MAAOu+C,GACfh1B,QAAUvpB,MAAO,WACjBiuD,OACI3kC,MAAQtpB,MAAO,WACfupB,QAAUvpB,MAAO,cAI7Bx3C,QACIg+G,OACIj9C,QAAUvpB,MAAO,WACjBspB,MAAQtpB,MAAO,cAI3BylE,YAAcl8C,QAAUvpB,MAAO,YAC/B0lE,oBACIn8C,QAAUvpB,MAAO,WACjBrgB,SAAWqgB,MAAO,WAClB7gD,WACIqmH,SACIl8C,MAAQtpB,MAAOu+C,GACfh1B,QAAUvpB,MAAO,eAKjCgmE,SACIS,SAEQ,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,eAKhBb,EAAc,UACVziB,OACI/vF,OAAS4sC,MAAO,WAChBgiE,QACI5T,QAAUpuD,MAAO,WACjBimE,eACI7X,QAAUpuD,MAAO,WACjBkiE,SAAWliE,MAAO,aAG1B+hE,gBACI3T,QACIpuD,MAAO,UACPurB,WAAY,UACZh5E,QAAS,IAEb2zH,WAAalmE,MAAO,WACpByvD,OACI/B,MACIniC,WAAY,cACZg+B,QAAUvpD,MAAO,YAErBt/B,OAASs/B,MAAO,WAChBqxB,MAAQrxB,MAAO,YAEnBqxB,MAAQ6wC,SAAW32C,WAAY,YAC/B46C,SAAWjE,SAAW32C,WAAY,YAClCs4C,aAAe3B,SAAW32C,WAAY,YACtC23C,KAAOwD,YAAc1mE,MAAO,YAC5BmjE,OAASuD,YAAc1mE,MAAO,YAC9BkkE,WAAa7yC,MAAQrxB,MAAO,YAC5BqjE,qBAAuBhyC,MAAQrxB,MAAO,YACtCgjE,aAAeV,UAAW,YAE9B8D,WAAa76C,WAAY,WACzB05C,cACI,UACA,UACA,UACA,UACA,UACA,WAEJtE,cACItvC,MAAQrxB,MAAO,WACfouD,QAAUpuD,MAAO,WACjByxD,gBAAkBzxD,MAAO,WACzBwxD,gBAAkBxxD,MAAO,WACzB5sC,OAAS4sC,MAAO,WAChBqmE,WAAarmE,MAAO,WACpByvD,OACI/B,MACIniC,WAAY,cACZg+B,QAAUvpD,MAAO,YAErBt/B,OAASs/B,MAAO,WAChBqxB,MAAQrxB,MAAO,cAI3B8lE,OACIvhF,SAAWyb,MAAO,WAClBv4C,OACI6+G,sBAAuB,UACvBlY,QAAUpuD,MAAO,WACjBuuD,YAAcvuD,MAAO,WACrByuD,YAAczuD,MAAO,WACrBqxB,MAAQrxB,MAAO,aAGvB+lE,SACIR,eACIj8C,MAAQtpB,MAAO,WACfumE,mBACIj9C,MAAQtpB,MAAO,WACfupB,QAAUvpB,MAAOu+C,GACjB0P,OACI3kC,MAAQtpB,MAAOu+C,GACfh1B,QAAUvpB,MAAO,aAGzBrgB,SAAWqgB,MAAO,YAEtB36B,UACI75B,QACIg6H,SACIl8C,MAAQtpB,MAAOu+C,GACfh1B,QAAUvpB,MAAO,WACjBiuD,OACI3kC,MAAQtpB,MAAO,WACfupB,QAAUvpB,MAAO,cAI7Bx3C,QACIg+G,OACIj9C,QAAUvpB,MAAO,WACjBspB,MAAQtpB,MAAO,cAI3BylE,YAAcl8C,QAAUvpB,MAAO,YAC/B0lE,oBACIn8C,QAAUvpB,MAAO,WACjBrgB,SAAWqgB,MAAO,WAClB7gD,WACIqmH,SACIl8C,MAAQtpB,MAAOu+C,GACfh1B,QAAUvpB,MAAO,eAKjCgmE,SACIS,SAEQ,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,eAKhBb,EAAc,SACVziB,OACI/vF,OAAS4sC,MAAO,WAChBgiE,QACI5T,QAAUpuD,MAAO,WACjBimE,eACI7X,QAAUpuD,MAAO,WACjBkiE,SAAWliE,MAAO,aAG1B+hE,gBACI3T,QAAUpuD,MAAOw+C,GACjB0nB,WAAalmE,MAAO,WACpByvD,OACI/B,MACIniC,WAAY,cACZg+B,QAAUvpD,MAAO,YAErBt/B,OAASs/B,MAAO,WAChBqxB,MAAQrxB,MAAO,YAEnBgjE,aACIV,UAAW,UACXjxC,MAAQrxB,MAAO,YAEnBkkE,WAAa7yC,MAAQrxB,MAAO,YAC5BqjE,qBAAuBhyC,MAAQrxB,MAAO,YACtCkpD,SAAWpsC,SAAU,QACrBysC,QAAU8Y,YAAa,IAE3B4C,cACI,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WAEJtE,cACItvC,MAAQrxB,MAAO,WACfouD,QAAUpuD,MAAO,WACjBwxD,gBAAkBxxD,MAAO,WACzByxD,gBAAkBzxD,MAAO;EACzB5sC,OAAS4sC,MAAO,WAChBqmE,WAAarmE,MAAO,WACpByvD,OACI/B,MACIniC,WAAY,cACZg+B,QAAUvpD,MAAO,YAErBt/B,OAASs/B,MAAO,WAChBqxB,MAAQrxB,MAAO,cAI3B8lE,OACIvhF,SAAWyb,MAAO,WAClBv4C,OACI6+G,sBAAuB,UACvBlY,QAAUpuD,MAAO,QACjBuuD,YAAcvuD,MAAO,QACrByuD,YAAczuD,MAAO,QACrBqxB,MAAQrxB,MAAO,UAGvB+lE,SACIR,eACIj8C,MAAQtpB,MAAO,WACfumE,mBACIj9C,MAAQtpB,MAAOw+C,GACfj1B,QAAUvpB,MAAOu+C,GACjB0P,OACI3kC,MAAQtpB,MAAOu+C,GACfh1B,QAAUvpB,MAAOw+C,KAGzB7+D,SAAWqgB,MAAO,SAEtB36B,UACI75B,QACIg6H,SACIl8C,MAAQtpB,MAAOu+C,GACfh1B,QAAUvpB,MAAO,WACjBiuD,OACI3kC,MAAQtpB,MAAO,WACfupB,QAAUvpB,MAAO,cAI7Bx3C,QACIg+G,OACIj9C,QAAUvpB,MAAO,WACjBspB,MAAQtpB,MAAO,cAI3BylE,YAAcl8C,QAAUvpB,MAAO,YAC/B0lE,oBACIn8C,QAAUvpB,MAAO,WACjBrgB,SAAWqgB,MAAO,QAClB7gD,WACIqmH,SACIl8C,MAAQtpB,MAAOu+C,GACfh1B,QAAUvpB,MAAO,eAKjCgmE,SACIS,SAEQ,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,eAKhBb,EAAc,cACVziB,OACI/vF,OAAS4sC,MAAO,WAChBgiE,QACI5T,QAAUpuD,MAAO,WACjBimE,eACI7X,QAAUpuD,MAAO,WACjBkiE,SAAWliE,MAAO,aAG1B+hE,gBACIxY,QAAU8Y,YAAa,GACvBjU,QAAUpuD,MAAO,WACjBkmE,WAAalmE,MAAO,WACpByvD,OACI/B,MACIniC,WAAY,cACZg+B,QAAUvpD,MAAO,YAErBt/B,OAASs/B,MAAO,WAChBqxB,MAAQrxB,MAAO,YAEnBqxB,MAAQ6wC,SAAW32C,WAAY,YAC/Bw3C,QAAUxwH,QAAS,IACnB4zH,SAAWjE,SAAW32C,WAAY,YAClCs4C,aAAe3B,SAAW32C,WAAY,YACtCy3C,aACIV,UAAW,UACXjxC,MAAQrxB,MAAO,YAEnBkkE,WAAa7yC,MAAQrxB,MAAO,YAC5BqjE,qBAAuBhyC,MAAQrxB,MAAO,YACtCkpD,SAAWpsC,SAAU,SAEzBspD,WAAa76C,WAAY,WACzB05C,cACI,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WAEJtE,cACItvC,MAAQrxB,MAAO,WACfouD,QAAUpuD,MAAO,WACjBwxD,gBAAkBxxD,MAAO,WACzByxD,gBAAkBzxD,MAAO,WACzB5sC,OAAS4sC,MAAO,WAChBqmE,WAAarmE,MAAO,WACpByvD,OACI/B,MACIniC,WAAY,cACZg+B,QAAUvpD,MAAO,YAErBt/B,OAASs/B,MAAO,WAChBqxB,MAAQrxB,MAAO,cAI3B8lE,OACIvhF,SAAWyb,MAAO,WAClBv4C,OACI6+G,sBAAuB,UACvBlY,QAAUpuD,MAAO,WACjBuuD,YAAcvuD,MAAO,WACrByuD,YAAczuD,MAAO,WACrBqxB,MAAQrxB,MAAO,aAGvB+lE,SACIR,eACIj8C,MAAQtpB,MAAO,WACfumE,mBACIj9C,MAAQtpB,MAAOu+C,GACfh1B,QAAUvpB,MAAO,WACjBiuD,OACI3kC,MAAQtpB,MAAO,WACfupB,QAAUvpB,MAAOu+C,KAGzB5+D,SAAWqgB,MAAOu+C,IAEtBl5E,UACI75B,QACIg6H,SACIl8C,MAAQtpB,MAAO,WACfupB,QAAUvpB,MAAO,WACjBiuD,OACI3kC,MAAQtpB,MAAO,WACfupB,QAAUvpB,MAAO,cAI7Bx3C,QACIg+G,OACIj9C,QAAUvpB,MAAOu+C,GACjBj1B,MAAQtpB,MAAOu+C,MAI3BknB,YAAcl8C,QAAUvpB,MAAO,YAC/B0lE,oBACIn8C,QAAUvpB,MAAOu+C,GACjB5+D,SAAWqgB,MAAOu+C,GAClBp/F,WACIqmH,SACIl8C,MAAQtpB,MAAO,WACfupB,QAAUvpB,MAAOu+C,OAKjCynB,SACIS,SAEQ,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,eAKhBb,EAAc,aACVziB,OACI/vF,OAAS4sC,MAAO,WAChBgiE,QACI5T,QAAUpuD,MAAO,WACjBimE,eACI7X,QAAUpuD,MAAO,WACjBkiE,SAAWliE,MAAO,aAG1B+hE,gBACI3T,QAAUpuD,MAAO,WACjBkmE,WAAalmE,MAAO,WACpByvD,OACI/B,MACIniC,WAAY,cACZg+B,QAAUvpD,MAAO,YAErBt/B,OAASs/B,MAAO,WAChBqxB,MAAQrxB,MAAO,YAEnBkjE,KAAOha,SAAWpsC,SAAU,eAC5BqmD,OAASja,SAAWpsC,SAAU,eAC9BuU,MAAQ6wC,SAAW32C,WAAY,YAC/Bw3C,QAAUxwH,QAAS,IACnB4zH,SAAWjE,SAAW32C,WAAY,YAClCs4C,aAAe3B,SAAW32C,WAAY,YACtCm3C,MAAQnwH,QAAS,IACjBywH,aACIV,UAAW,UACXjxC,MAAQrxB,MAAO,WACfupD,QACI8Y,YAAa,IACb9vH,QAAS,GAEb+1G,WACIiB,QACIvpD,MAAOu+C,EACPhsG,QAAS,MAIrB2xH,WAAa7yC,MAAQrxB,MAAO,YAC5BqjE,qBAAuBhyC,MAAQrxB,MAAO,YACtCsjE,MAAQjyC,MAAQrxB,MAAO,aAE3BomE,WAAa76C,WAAY,WACzB05C,cACI,UACA,UACA,UACA,UACA,UACA,WAEJtE,cACItvC,MAAQrxB,MAAO,WACfuuD,YAAcvuD,MAAO,WACrByuD,YAAczuD,MAAO,WACrBouD,QAAUpuD,MAAO,WACjByxD,gBAAkBzxD,MAAO,WACzBwxD,gBAAkBxxD,MAAO,WACzB5sC,OAAS4sC,MAAO,WAChBqmE,WAAarmE,MAAO,WACpByvD,OACI/B,MACIniC,WAAY,cACZg+B,QAAUvpD,MAAO,YAErBt/B,OAASs/B,MAAO,WAChBqxB,MAAQrxB,MAAO,cAI3B8lE,OACIvhF,SAAWyb,MAAO,WAClBv4C,OACI6+G,sBAAuB,UACvBlY,QAAUpuD,MAAOu+C,GACjBgQ,YAAcvuD,MAAO,WACrByuD,YAAczuD,MAAO,WACrBqxB,MAAQrxB,MAAO,aAGvB+lE,SACIR,eACIj8C,MAAQtpB,MAAO,WACfumE,mBACIj9C,MAAQtpB,MAAOu+C,GACfh1B,QAAUvpB,MAAO,WACjBiuD,OACI3kC,MAAQtpB,MAAO,WACfupB,QAAUvpB,MAAOu+C,KAGzB5+D,SAAWqgB,MAAOu+C,IAEtBl5E,UACI75B,QACIg6H,SACIl8C,MAAQtpB,MAAO,WACfupB,QAAUvpB,MAAOu+C,GACjB0P,OACI3kC,MAAQtpB,MAAOu+C,GACfh1B,QAAUvpB,MAAOu+C,MAI7B/1F,QACIg+G,OACIj9C,QAAUvpB,MAAOu+C,GACjBj1B,MAAQtpB,MAAOu+C,MAI3BknB,YAAcl8C,QAAUvpB,MAAOu+C,IAC/BmnB,oBACIn8C,QAAUvpB,MAAOu+C,GACjB5+D,SAAWqgB,MAAOu+C,GAClBp/F,WACIqmH,SACIl8C,MAAQtpB,MAAO,WACfupB,QAAUvpB,MAAOu+C,OAKjCynB,SACIS,SAEQ,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,eAKhBb,EAAc,WACVziB,OACI/vF,OAAS4sC,MAAO,WAChBgiE,QACI5T,QAAUpuD,MAAO,WACjBimE,eACI7X,QAAUpuD,MAAO,WACjBkiE,SAAWliE,MAAO,aAG1B+hE,gBACI3T,QAAUpuD,MAAO,WACjBkmE,WAAalmE,MAAO,WACpByvD,OACI/B,MACIniC,WAAY,cACZg+B,QAAUvpD,MAAO,YAErBt/B,OAASs/B,MAAO,WAChBqxB,MAAQrxB,MAAO,YAEnBkjE,KAAOha,SAAWpsC,SAAU,eAC5BqmD,OAASja,SAAWpsC,SAAU,eAC9BuU,MAAQ6wC,SAAW32C,WAAY,YAC/Bw3C,QAAUxwH,QAAS,IACnB4zH,SAAWjE,SAAW32C,WAAY,YAClCs4C,aAAe3B,SAAW32C,WAAY,YACtCm3C,MAAQnwH,QAAS,IACjBywH,aACIV,UAAW,UACXjxC,MAAQrxB,MAAO,WACfupD,QACI8Y,YAAa,IACb9vH,QAAS,GAEb+1G,WACIiB,QACIvpD,MAAO,UACPztD,QAAS,MAIrB2xH,WAAa7yC,MAAQrxB,MAAO,YAC5BqjE,qBAAuBhyC,MAAQrxB,MAAO,YACtCsjE,MAAQjyC,MAAQrxB,MAAO,aAE3BomE,WAAa76C,WAAY,WACzB05C,cACI,UACA,UACA,UACA,UACA,UACA,WAEJtE,cACItvC,MAAQrxB,MAAO,WACfuuD,YAAcvuD,MAAO,WACrByuD,YAAczuD,MAAO,WACrBouD,QAAUpuD,MAAO,WACjByxD,gBAAkBzxD,MAAO,WACzBwxD,gBAAkBxxD,MAAO,WACzB5sC,OAAS4sC,MAAO,WAChBqmE,WAAarmE,MAAO,WACpByvD,OACI/B,MACIniC,WAAY,cACZg+B,QAAUvpD,MAAO,YAErBt/B,OAASs/B,MAAO,WAChBqxB,MAAQrxB,MAAO,cAI3B8lE,OACIvhF,SAAWyb,MAAO,WAClBv4C,OACI6+G,sBAAuB,UACvBlY,QAAUpuD,MAAO,WACjBuuD,YAAcvuD,MAAO,WACrByuD,YAAczuD,MAAO,WACrBqxB,MAAQrxB,MAAO,aAGvB+lE,SACIR,eACIj8C,MAAQtpB,MAAO,WACfumE,mBACIj9C,MAAQtpB,MAAO,WACfupB,QAAUvpB,MAAOu+C,GACjB0P,OACI3kC,MAAQtpB,MAAOu+C,GACfh1B,QAAUvpB,MAAO,aAGzBrgB,SAAWqgB,MAAO,YAEtB36B,UACI75B,QACIg6H,SACIl8C,MAAQtpB,MAAOu+C,GACfh1B,QAAUvpB,MAAO,WACjBiuD,OACI3kC,MAAQtpB,MAAO,WACfupB,QAAUvpB,MAAO,cAI7Bx3C,QACIg+G,OACIj9C,QAAUvpB,MAAO,WACjBspB,MAAQtpB,MAAO,cAI3BylE,YAAcl8C,QAAUvpB,MAAO,YAC/B0lE,oBACIn8C,QAAUvpB,MAAO,WACjBrgB,SAAWqgB,MAAO,WAClB7gD,WACIqmH,SACIl8C,MAAQtpB,MAAOu+C,GACfh1B,QAAUvpB,MAAO,eAKjCgmE,SACIS,SAEQ,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,eAKhBb,EAAc,aACVziB,OACI/vF,OAAS4sC,MAAO,WAChBgiE,QACI5T,QAAUpuD,MAAO,WACjBimE,eACI7X,QAAUpuD,MAAO,WACjBkiE,SAAWliE,MAAO,aAG1B+hE,gBACI3T,QAAUpuD,MAAO,WACjBkpD,SAAWpsC,SAAU,QACrBopD,WAAalmE,MAAO,WACpByvD,OACI/B,MACIniC,WAAY,UACZg+B,QAAUvpD,MAAO,YAErBt/B,OAASs/B,MAAO,WAChBqxB,MAAQrxB,MAAO,YAEnBkjE,KAAOha,SAAWpsC,SAAU,SAC5BqmD,OAASja,SAAWpsC,SAAU,SAC9BuU,MAAQ6wC,SAAW32C,WAAY,YAC/Bw3C,QAAUxwH,QAAS,IACnB4zH,SAAWjE,SAAW32C,WAAY,YAClCs4C,aAAe3B,SAAW32C,WAAY,YACtCm3C,MAAQnwH,QAAS,IACjBywH,aACIV,UAAW,UACXjxC,MAAQrxB,MAAO,WACfupD,QACI8Y,YAAa,IACb9vH,QAAS,GAEb+1G,WACIiB,QACIvpD,MAAO,UACPztD,QAAS,MAIrB2xH,WAAa7yC,MAAQrxB,MAAO,YAC5BqjE,qBAAuBhyC,MAAQrxB,MAAO,YACtCsjE,MAAQjyC,MAAQrxB,MAAO,aAE3BomE,WAAa76C,WAAY,WACzB05C,cACI,UACA,UACA,UACA,UACA,UACA,WAEJtE,cACItvC,MAAQrxB,MAAO,WACfuuD,YAAcvuD,MAAO,WACrByuD,YAAczuD,MAAO,WACrBouD,QAAUpuD,MAAO,WACjByxD,gBAAkBzxD,MAAO,WACzBwxD,gBAAkBxxD,MAAO,WACzB5sC,OAAS4sC,MAAO,WAChBqmE,WAAarmE,MAAO,WACpByvD,OACI/B,MACIniC,WAAY,UACZg+B,QAAUvpD,MAAO,YAErBt/B,OAASs/B,MAAO,WAChBqxB,MAAQrxB,MAAO,cAI3B8lE,OACIvhF,SAAWyb,MAAO,WAClBv4C,OACI6+G,sBAAuB,UACvBlY,QAAUpuD,MAAO,WACjBuuD,YAAcvuD,MAAO,WACrByuD,YAAczuD,MAAO,WACrBqxB,MAAQrxB,MAAO,aAGvB+lE,SACIR,eACIj8C,MAAQtpB,MAAO,WACfumE,mBACIj9C,MAAQtpB,MAAO,WACfupB,QAAUvpB,MAAOu+C,GACjB0P,OACI3kC,MAAQtpB,MAAOu+C,GACfh1B,QAAUvpB,MAAO,aAGzBrgB,SAAWqgB,MAAO,YAEtB36B,UACI75B,QACIg6H,SACIl8C,MAAQtpB,MAAOu+C,GACfh1B,QAAUvpB,MAAO,WACjBiuD,OACI3kC,MAAQtpB,MAAO,WACfupB,QAAUvpB,MAAO,cAI7Bx3C,QACIg+G,OACIj9C,QAAUvpB,MAAO,WACjBspB,MAAQtpB,MAAO,cAI3BylE,YAAcl8C,QAAUvpB,MAAO,YAC/B0lE,oBACIn8C,QAAUvpB,MAAO,WACjBrgB,SAAWqgB,MAAO,WAClB7gD,WACIqmH,SACIl8C,MAAQtpB,MAAOu+C,GACfh1B,QAAUvpB,MAAO,YAErBupB,QAAUvpB,MAAO,cAI7BgmE,SACIS,SAEQ,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,eAKhBb,EAAc,QACVziB,OACI/vF,OAAS4sC,MAAO,WAChBgiE,QACI5T,QAAUpuD,MAAO,WACjBimE,eACI7X,QAAUpuD,MAAO,WACjBkiE,SAAWliE,MAAO,aAG1B+hE,gBACI3T,QAAUpuD,MAAO,WACjBkmE,WAAalmE,MAAO,WACpByvD,OACI/B,MACIniC,WAAY,cACZg+B,QAAUvpD,MAAO,YAErBt/B,OAASs/B,MAAO,WAChBqxB,MAAQrxB,MAAO,YAEnBgjE,aACIV,UAAW,UACXjxC,MAAQrxB,MAAO,YAEnB0iE,MAAQnwH,QAAS,IACjB2xH,WAAa7yC,MAAQrxB,MAAO,YAC5BqjE,qBAAuBhyC,MAAQrxB,MAAO,YACtCkpD,SAAWpsC,SAAU,QACrBysC,QAAU8Y,YAAa,IAE3B4C,cACI,UACA,UACA,UACA,UACA,UACA,UACA,WAEJtE,cACItvC,MAAQrxB,MAAO,WACfouD,QAAUpuD,MAAO,WACjBwxD,gBAAkBxxD,MAAO,WACzByxD,gBAAkBzxD,MAAO,WACzB5sC,OAAS4sC,MAAO,WAChBqmE,WAAarmE,MAAO,WACpByvD,OACI/B,MACIniC,WAAY,cACZg+B,QAAUvpD,MAAO,YAErBt/B,OAASs/B,MAAO,WAChBqxB,MAAQrxB,MAAO,cAI3B8lE,OACIvhF,SAAWyb,MAAO,WAClBv4C,OACI6+G,sBAAuB,UACvBlY,QAAUpuD,MAAO,WACjBuuD,YAAcvuD,MAAO,WACrByuD,YAAczuD,MAAO,WACrBqxB,MAAQrxB,MAAO,aAGvB+lE,SACIR,eACIj8C,MAAQtpB,MAAO,WACfumE,mBACIj9C,MAAQtpB,MAAO,WACfupB,QAAUvpB,MAAOu+C,GACjB0P,OACI3kC,MAAQtpB,MAAOu+C,GACfh1B,QAAUvpB,MAAO,aAGzBrgB,SAAWqgB,MAAO,YAEtB36B,UACI75B,QACIg6H,SACIl8C,MAAQtpB,MAAOu+C,GACfh1B,QAAUvpB,MAAO,WACjBiuD,OACI3kC,MAAQtpB,MAAO,WACfupB,QAAUvpB,MAAO,cAI7Bx3C,QACIg+G,OACIj9C,QAAUvpB,MAAO,WACjBspB,MAAQtpB,MAAO,cAI3BylE,YAAcl8C,QAAUvpB,MAAO,YAC/B0lE,oBACIn8C,QAAUvpB,MAAO,WACjBrgB,SAAWqgB,MAAO,WAClB7gD,WACIqmH,SACIl8C,MAAQtpB,MAAOu+C,GACfh1B,QAAUvpB,MAAO,YAErBupB,QAAUvpB,MAAO,cAI7BgmE,SACIS,SAEQ,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,eAKhBb,EAAc,YACVziB,OACI/vF,OAAS4sC,MAAO,WAChBgiE,QACI5T,QAAUpuD,MAAO,WACjBimE,eACI7X,QAAUpuD,MAAO,WACjBkiE,SAAWliE,MAAO,aAG1B+hE,gBACI3T,QAAUpuD,MAAO,WACjBkmE,WAAalmE,MAAO,WACpByvD,OACI/B,MACIniC,WAAY,cACZg+B,QAAUvpD,MAAO,YAErBt/B,OAASs/B,MAAO,WAChBqxB,MAAQrxB,MAAO,YAEnBgjE,aACIV,UAAW,UACXjxC,MAAQrxB,MAAO,YAEnB0iE,MAAQnwH,QAAS,IACjB2xH,WAAa7yC,MAAQrxB,MAAO,YAC5BqjE,qBAAuBhyC,MAAQrxB,MAAO,YACtCkpD,SAAWpsC,SAAU,QACrBysC,QAAU8Y,YAAa,IAE3B4C,cACI,UACA,UACA,UACA,UACA,UACA,WAEJtE,cACItvC,MAAQrxB,MAAO,WACfouD,QAAUpuD,MAAO,WACjBwxD,gBAAkBxxD,MAAO,WACzByxD,gBAAkBzxD,MAAO,WACzB5sC,OAAS4sC,MAAO,WAChBqmE,WAAarmE,MAAO,WACpByvD,OACI/B,MACIniC,WAAY,cACZg+B,QAAUvpD,MAAO,YAErBt/B,OAASs/B,MAAO,WAChBqxB,MAAQrxB,MAAO,cAI3B8lE,OACIvhF,SAAWyb,MAAO,WAClBv4C,OACI6+G,sBAAuB,UACvBlY,QAAUpuD,MAAO,WACjBuuD,YAAcvuD,MAAO,WACrByuD,YAAczuD,MAAO,WACrBqxB,MAAQrxB,MAAO,aAGvB+lE,SACIR,eACIj8C,MAAQtpB,MAAO,WACfumE,mBACIj9C,MAAQtpB,MAAO,WACfupB,QAAUvpB,MAAOu+C,GACjB0P,OACI3kC,MAAQtpB,MAAOu+C,GACfh1B,QAAUvpB,MAAO,aAGzBrgB,SAAWqgB,MAAO,YAEtB36B,UACI75B,QACIg6H,SACIl8C,MAAQtpB,MAAOu+C,GACfh1B,QAAUvpB,MAAO,WACjBiuD,OACI3kC,MAAQtpB,MAAO,WACfupB,QAAUvpB,MAAO,cAI7Bx3C,QACIg+G,OACIj9C,QAAUvpB,MAAO,WACjBspB,MAAQtpB,MAAO,cAI3BylE,YAAcl8C,QAAUvpB,MAAO,YAC/B0lE,oBACIn8C,QAAUvpB,MAAO,WACjBrgB,SAAWqgB,MAAO,WAClB7gD,WACIqmH,SACIl8C,MAAQtpB,MAAOu+C,GACfh1B,QAAUvpB,MAAO,YAErBupB,QAAUvpB,MAAO,cAI7BgmE,SACIS,SAEQ,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,eAKhBb,EAAc,iBACVziB,OACI/vF,OAAS4sC,MAAO,QAChBgiE,QACI5T,QAAUpuD,MAAO,QACjBimE,eACI7X,QAAUpuD,MAAO,WACjBkiE,SAAWliE,MAAO,aAG1B+hE,gBACI3T,QAAUpuD,MAAO,QACjBkmE,WAAalmE,MAAO,QACpByvD,OACI/B,MACIniC,WAAY,cACZg+B,QAAUvpD,MAAO,YAErBt/B,OAASs/B,MAAO,QAChBqxB,MAAQrxB,MAAO,YAEnBgjE,aACIV,UAAW,UACXjxC,MAAQrxB,MAAO,YAEnB0iE,MAAQnwH,QAAS,IACjB2xH,WAAa7yC,MAAQrxB,MAAO,YAC5BqjE,qBAAuBhyC,MAAQrxB,MAAO,YACtCkpD,SAAWpsC,SAAU,QACrBysC,QAAU8Y,YAAa,IAE3B+D,WAAa76C,WAAY,WACzB05C,cACI,UACA,UACA,UACA,UACA,UACA,WAEJtE,cACItvC,MAAQrxB,MAAO,WACfouD,QAAUpuD,MAAO,QACjBwxD,gBAAkBxxD,MAAO,WACzByxD,gBAAkBzxD,MAAO,WACzB5sC,OAAS4sC,MAAO,QAChBqmE,WAAarmE,MAAO,WACpByvD,OACI/B,MACIniC,WAAY,cACZg+B,QAAUvpD,MAAO,YAErBt/B,OAASs/B,MAAO,QAChBqxB,MAAQrxB,MAAO,cAI3B8lE,OACIvhF,SAAWyb,MAAO,WAClBv4C,OACI6+G,sBAAuB,UACvBlY,QAAUpuD,MAAO,QACjBuuD,YAAcvuD,MAAO,QACrByuD,YAAczuD,MAAO,QACrBqxB,MAAQrxB,MAAO,UAGvB+lE,SACIR,eACIj8C,MAAQtpB,MAAO,WACfumE,mBACIj9C,MAAQtpB,MAAO,WACfupB,QAAUvpB,MAAOu+C,GACjB0P,OACI3kC,MAAQtpB,MAAOu+C,GACfh1B,QAAUvpB,MAAO,aAGzBrgB,SAAWqgB,MAAO,SAEtB36B,UACI75B,QACIg6H,SACIl8C,MAAQtpB,MAAOu+C,GACfh1B,QAAUvpB,MAAO,QACjBiuD,OACI3kC,MAAQtpB,MAAO,QACfupB,QAAUvpB,MAAO,WAI7Bx3C,QACIg+G,OACIj9C,QAAUvpB,MAAO,QACjBspB,MAAQtpB,MAAO,WAI3BylE,YAAcl8C,QAAUvpB,MAAO,SAC/B0lE,oBACIn8C,QAAUvpB,MAAO,WACjBrgB,SAAWqgB,MAAO,QAClB7gD,WACIqmH,SACIl8C,MAAQtpB,MAAOu+C,GACfh1B,QAAUvpB,MAAO,SAErBupB,QAAUvpB,MAAO,WAI7BgmE,SACIS,SAEQ,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,YAGA,UACA,eAKf,WAwBG,QAASE,KACL,OACIjZ,MACIniC,WAAY,UACZg+B,QAAUvpD,MAAO,YAErBt/B,OAASs/B,MAAO,WAChBqxB,MAAQrxB,MAAO4mE,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,EAAgB7oB,CAWpBqnB,GAAc,SACVziB,OACI/vF,OAAS4sC,MAAO6mE,GAChB7E,QACI5T,QAAUpuD,MAAO6mE,GACjBZ,eACI7X,QAAUpuD,MAAO8mE,GACjB5E,SAAWliE,MAAO8mE,KAG1B/E,gBACI3T,QAAUpuD,MAAO6mE,GACjBX,WAAalmE,MAAO6mE,GACpBpX,MAAOkX,IACP3D,aACIV,UAAWsE,EACXv1C,MAAQrxB,MAAO+mE,IAEnBrE,MAAQnwH,QAAS,IACjB2xH,WAAa7yC,MAAQrxB,MAAO4mE,IAC5BvD,qBAAuBhyC,MAAQrxB,MAAO4mE,IACtC1d,SAAWpsC,SAAU,QACrBysC,QAAU8Y,YAAa,IAE3B4C,aAAcgC,EACdtG,cACItvC,MAAQrxB,MAAO4mE,GACfxY,QAAUpuD,MAAO6mE,GACjBrV,gBAAkBxxD,MAAOgnE,GACzBvV,gBAAkBzxD,MAAO4mE,GACzBxzG,OAAS4sC,MAAO6mE,GAChBR,WAAarmE,MAAO8mE,GACpBrX,MAAOkX,MAGfb,OACIvhF,SAAWyb,MAAOmnE,GAClB1/G,OACI6+G,sBAAuBM,EACvBxY,QAAUpuD,MAAO6mE,GACjBtY,YAAcvuD,MAAO6mE,GACrBpY,YAAczuD,MAAO6mE,GACrBx1C,MAAQrxB,MAAO6mE,KAGvBd,SACIR,eACIj8C,MAAQtpB,MAAOmnE,GACfZ,mBACIj9C,MAAQtpB,MAAO6mE,GACft9C,QAAUvpB,MAAOonE,GACjBnZ,OACI3kC,MAAQtpB,MAAOonE,GACf79C,QAAUvpB,MAAO6mE,KAGzBlnF,SAAWqgB,MAAO6mE,IAEtBxhG,UACI75B,QACIg6H,SACIl8C,MAAQtpB,MAAOonE,GACf79C,QAAUvpB,MAAO+mE,GACjB9Y,OACI3kC,MAAQtpB,MAAO+mE,GACfx9C,QAAUvpB,MAAO+mE,MAI7Bv+G,QACIg+G,OACIj9C,QAAUvpB,MAAO+mE,GACjBz9C,MAAQtpB,MAAO+mE,MAI3BtB,YAAcl8C,QAAUvpB,MAAO+mE,IAC/BrB,oBACIn8C,QAAUvpB,MAAO+mE,GACjBpnF,SAAWqgB,MAAO+mE,GAClB5nH,WACIqmH,SACIl8C,MAAQtpB,MAAOonE,GACf79C,QAAUvpB,MAAO+mE,IAErBx9C,QAAUvpB,MAAO+mE,MAI7Bf,SAAWS,OAAQvB,EAAK+B,EAAQC,SAGvC,WAwBG,QAASP,KACL,OACIjZ,MACIniC,WAAY,UACZg+B,QAAUvpD,MAAO,YAErBt/B,OAASs/B,MAAO,WAChBqxB,MAAQrxB,MAAO4mE,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,EAAgB7oB,CAWpBqnB,GAAc,aACVziB,OACI/vF,OAAS4sC,MAAO6mE,GAChB7E,QACI5T,QAAUpuD,MAAO6mE,GACjBZ,eACI7X,QAAUpuD,MAAO8mE,GACjB5E,SAAWliE,MAAO8mE,KAG1B/E,gBACI3T,QAAUpuD,MAAO6mE,GACjBX,WAAalmE,MAAO6mE,GACpBpX,MAAOkX,IACP3D,aACIV,UAAWsE,EACXv1C,MAAQrxB,MAAO+mE,IAEnBrE,MAAQnwH,QAAS,IACjB2xH,WAAa7yC,MAAQrxB,MAAO4mE,IAC5BvD,qBAAuBhyC,MAAQrxB,MAAO4mE,IACtC1d,SAAWpsC,SAAU,QACrBysC,QAAU8Y,YAAa,IAE3B4C,aAAcgC,EACdtG,cACItvC,MAAQrxB,MAAO4mE,GACfxY,QAAUpuD,MAAO6mE,GACjBrV,gBAAkBxxD,MAAOgnE,GACzBvV,gBAAkBzxD,MAAO4mE,GACzBxzG,OAAS4sC,MAAO6mE,GAChBR,WAAarmE,MAAO8mE,GACpBrX,MAAOkX,MAGfb,OACIvhF,SAAWyb,MAAOmnE,GAClB1/G,OACI6+G,sBAAuBM,EACvBxY,QAAUpuD,MAAO6mE,GACjBtY,YAAcvuD,MAAO6mE,GACrBpY,YAAczuD,MAAO6mE,GACrBx1C,MAAQrxB,MAAO6mE,KAGvBd,SACIR,eACIj8C,MAAQtpB,MAAOmnE,GACfZ,mBACIj9C,MAAQtpB,MAAO6mE,GACft9C,QAAUvpB,MAAOonE,GACjBnZ,OACI3kC,MAAQtpB,MAAOonE,GACf79C,QAAUvpB,MAAO6mE,KAGzBlnF,SAAWqgB,MAAO6mE,IAEtBxhG,UACI75B,QACIg6H,SACIl8C,MAAQtpB,MAAOonE,GACf79C,QAAUvpB,MAAO+mE,GACjB9Y,OACI3kC,MAAQtpB,MAAO+mE,GACfx9C,QAAUvpB,MAAO+mE,MAI7Bv+G,QACIg+G,OACIj9C,QAAUvpB,MAAO+mE,GACjBz9C,MAAQtpB,MAAO+mE,MAI3BtB,YAAcl8C,QAAUvpB,MAAO+mE,IAC/BrB,oBACIn8C,QAAUvpB,MAAO+mE,GACjBpnF,SAAWqgB,MAAO+mE,GAClB5nH,WACIqmH,SACIl8C,MAAQtpB,MAAOonE,GACf79C,QAAUvpB,MAAO+mE,IAErBx9C,QAAUvpB,MAAO+mE,MAI7Bf,SAAWS,OAAQvB,EAAK+B,EAAQC,SAGvC,WAwBG,QAASP,KACL,OACIjZ,MACIniC,WAAY,UACZg+B,QAAUvpD,MAAO,YAErBt/B,OAASs/B,MAAO,WAChBqxB,MAAQrxB,MAAO4mE,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,EAAgB7oB,CAWpBqnB,GAAc,QACVziB,OACI/vF,OAAS4sC,MAAO6mE,GAChB7E,QACI5T,QAAUpuD,MAAO6mE,GACjBZ,eACI7X,QAAUpuD,MAAO8mE,GACjB5E,SAAWliE,MAAO8mE,KAG1B/E,gBACI3T,QAAUpuD,MAAO6mE,GACjBX,WAAalmE,MAAO6mE,GACpBpX,MAAOkX,IACP3D,aACIV,UAAWsE,EACXv1C,MAAQrxB,MAAO+mE,IAEnBrE,MAAQnwH,QAAS,IACjB2xH,WAAa7yC,MAAQrxB,MAAO4mE,IAC5BvD,qBAAuBhyC,MAAQrxB,MAAO4mE,IACtC1d,SAAWpsC,SAAU,QACrBysC,QAAU8Y,YAAa,IAE3B4C,aAAcgC,EACdtG,cACItvC,MAAQrxB,MAAO4mE,GACfxY,QAAUpuD,MAAO6mE,GACjBrV,gBAAkBxxD,MAAOgnE,GACzBvV,gBAAkBzxD,MAAO4mE,GACzBxzG,OAAS4sC,MAAO6mE,GAChBR,WAAarmE,MAAO6mE,GACpBpX,MAAOkX,MAGfb,OACIvhF,SAAWyb,MAAOmnE,GAClB1/G,OACI6+G,sBAAuBM,EACvBxY,QAAUpuD,MAAO6mE,GACjBtY,YAAcvuD,MAAO6mE,GACrBpY,YAAczuD,MAAO6mE,GACrBx1C,MAAQrxB,MAAO6mE,KAGvBd,SACIR,eACIj8C,MAAQtpB,MAAOmnE,GACfZ,mBACIj9C,MAAQtpB,MAAO6mE,GACft9C,QAAUvpB,MAAOonE,GACjBnZ,OACI3kC,MAAQtpB,MAAOonE,GACf79C,QAAUvpB,MAAO6mE,KAGzBlnF,SAAWqgB,MAAO6mE,IAEtBxhG,UACI75B,QACIg6H,SACIl8C,MAAQtpB,MAAOonE,GACf79C,QAAUvpB,MAAO+mE,GACjB9Y,OACI3kC,MAAQtpB,MAAO+mE,GACfx9C,QAAUvpB,MAAO+mE,MAI7Bv+G,QACIg+G,OACIj9C,QAAUvpB,MAAO+mE,GACjBz9C,MAAQtpB,MAAO+mE,MAI3BtB,YAAcl8C,QAAUvpB,MAAO+mE,IAC/BrB,oBACIn8C,QAAUvpB,MAAO+mE,GACjBpnF,SAAWqgB,MAAO+mE,GAClB5nH,WACIqmH,SACIl8C,MAAQtpB,MAAOonE,GACf79C,QAAUvpB,MAAO+mE,IAErBx9C,QAAUvpB,MAAO+mE,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,cACVziB,SACA2iB,OACIvhF,SAAWyb,MAAOmnE,GAClB1/G,OACI6+G,sBAAuBM,EACvBxY,QAAUpuD,MAAO6mE,GACjBtY,YAAcvuD,MAAO6mE,GACrBpY,YAAczuD,MAAO6mE,GACrBx1C,MAAQrxB,MAAO6mE,KAGvBd,WACAC,SAAWS,OAAQvB,EAAK+B,EAAQC,MAEpCxzH,EAAO2zH,KAAO3zH,EAAO,iBAExB,WAAA,GACOmzH,GAAO,UACPD,EAAO,qBACPK,GACA,UACA,UACA,UACA,UACA,UACA,WAEAC,GACA,UACA,UACA,UACA,UACA,UACA,WAEAC,EAAUF,EAAO,EACrBrB,GAAc,gBACVziB,SACA2iB,OACIvhF,SAAWyb,MAAOmnE,GAClB1/G,OACI6+G,sBAAuBM,EACvBxY,QAAUpuD,MAAO6mE,GACjBtY,YAAcvuD,MAAO6mE,GACrBpY,YAAczuD,MAAO6mE,GACrBx1C,MAAQrxB,MAAO6mE,KAGvBd,WACAC,SAAWS,OAAQvB,EAAK+B,EAAQC,UAW1CnmJ,OAAOuB,MAAM8sB,QACRruB,OAAOuB,OACE,kBAAVzB,SAAwBA,OAAO2iC,IAAM3iC,OAAS,SAAU4iC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAU9iC,EAAGC,QACVA,OAAO,wBACH,qBACA,kCACA,4BACA,yBACDD,IACL,aASkB,kBAAVC,SAAwBA,OAAO2iC,IAAM3iC,OAAS,SAAU4iC,EAAIC,EAAIC,IACrEA,GAAMD,OAEV,SAAU9iC,EAAGC,QACVA,OAAO,6BACH,aACA,cACA,gBACA,sBACDD,IACL,YACG,SAAUE,GAuGP,QAASwmJ,GAAa/qI,GAAtB,GAGapX,GACD6hG,EAHJhlG,EAASua,EAAOva,OAChBgc,EAAQ,CACZ,KAAS7Y,EAAI,EAAGA,EAAInD,EAAQmD,IACpB6hG,EAAMzqF,EAAOpX,GACb24C,EAASkpD,IACThpF,GAGR,OAAOA,GAyEX,QAASupI,GAASh/H,EAAOi/H,GACrB,GAAY,OAARA,EACA,MAAOA,EAEX,IAAIx5H,GAAMH,GAAOtF,GAAO,EACxB,OAAOyF,GAAIw5H,GAoff,QAASC,GAAYh9I,EAAS4D,EAASovC,EAAOiqG,GAA9C,GAOQxiG,GACAw+E,EACAikB,EAKKpiJ,EAEGC,CALZ,IAVc,SAAVi4C,IACAA,MAEW,SAAXiqG,IACAA,GAAS,GAETxiG,EAAWzH,EAAMyH,SAAWzH,EAAMyH,aAClCw+E,EAAQjmF,EAAMimF,MAAQjmF,EAAMimF,OAAS,EACrCikB,GAAY,EAChBlqG,EAAMmqG,SAAWnqG,EAAMmqG,aACnBlkB,EAAQmkB,GACR,MAAO,KAEX,KAAStiJ,IAAYkF,IACZ6C,GAAQ/H,EAAUk4C,EAAMmqG,WAAan9I,EAAQ1D,eAAexB,KACzDC,EAAYiF,EAAQlF,GACpBgB,GAAWf,IACXmiJ,GAAY,EACPD,IACDj9I,EAAQlF,GAAYoqF,GAAenqF,EAAU6I,GAAU62C,EAAS3/C,MAE7DqwH,GAASpwH,KACXkiJ,IACDjqG,EAAMyH,SAAWA,EAAS3/C,IAE9Bk4C,EAAMimF,QACNikB,EAAYF,EAAYjiJ,EAAW6I,EAASovC,EAAOiqG,IAAWC,EAC9DlqG,EAAMimF,SAIlB,OAAOikB,GAEX,QAASG,GAAgBjf,GAAzB,GAGa1jI,GAFL4iJ,EAAclf,EAAO7mI,OACrB8xI,EAAa,CACjB,KAAS3uI,EAAI,EAAGA,EAAI4iJ,EAAa5iJ,IAC7B2uI,EAAa7qI,KAAKnG,IAAIgxI,EAAYjL,EAAO1jI,GAAGU,KAAK7D,OAErD,OAAO8xI,GAq1BX,QAASkU,GAAgBC,EAAWC,EAAUC,EAAShqH,EAAMxE,GAA7D,GACQwU,GAAM85G,EAAU95G,IAChB9kC,EAAS,GAAI++I,GAGjB,OAFA/+I,GAAO6+I,GAAY/5G,EAAI+5G,EAAWC,GAClC9+I,EAAO80B,GAAQgQ,EAAIhQ,EAAOxE,GACnBtwB,EAqHX,QAASg/I,GAAav3H,GAClB,IAAK,GAAI9oB,GAAM,EAAGA,EAAM8oB,EAAS9uB,OAAQgG,IACrC,GAAI8lF,GAAQh9D,EAAS9oB,GAAK0mC,QACtB,OAAO,EA+bnB,QAAS45G,GAAmB79I,GACxB,GAAIy+H,GAAUz+H,EAAQy+H,OACtB,OAAOA,IAAWA,EAAQpsC,UAAiC,SAArBosC,EAAQpsC,SAoOlD,QAASz5D,GAAQvS,EAAU5F,GACvB4F,EAASuS,QAAQnY,GAErB,QAASkpF,GAAetjF,EAAU5F,GAAlC,GAEaljB,GADLhG,EAAS8uB,EAAS9uB,MACtB,KAASgG,EAAMhG,EAAS,EAAGgG,GAAO,EAAGA,IACjCkjB,EAAS4F,EAAS9oB,GAAMA,EAAMhG,EAAS,GAqY/C,QAASumJ,GAAWhsI,GAChB,MAAO+qI,GAAa/qI,KAAYA,EAAOva,OA6f3C,QAASq8D,GAASp2D,GACd,MAAO6lF,IAAQ7lF,IAAoB,OAAVA,EA8oB7B,QAASugJ,GAAS/9I,GAAlB,GAEatF,GACDsjJ,EACA5iJ,EAHJgjI,EAASp+H,EAAQo+H,MACrB,KAAS1jI,EAAI,EAAGA,EAAI0jI,EAAO7mI,OAAQmD,IAC3BsjJ,EAAa5f,EAAO1jI,GACpBU,EAAO4iJ,EAAW5iJ,MAClBA,GAASuK,GAAQvK,EAAK,KAAQ+vH,GAAS/vH,EAAK,MAC5C4iJ,EAAW5iJ,MAAQA,IA0b/B,QAAS6iJ,KACL,MAAO,OAASC,KASpB,QAASC,GAAe/f,EAAQvuF,EAAQ99B,GAAxC,GAKQqsI,GAJAh7I,EAAUysC,EAAOzsC,OACrB,OAAIigF,IAAQjgF,GACDA,GAEPg7I,EAAkBhgB,EAAOggB,gBACzBA,EACOA,EAAgBrsI,GAD3B,QAIJ,QAASssI,GAAajgB,GAAtB,GAKa7gI,GACD6hI,EACA5hI,EANJpC,EAAOgjI,EAAOhjI,KACdgvF,KACAnrC,EAAM,EACN1rC,EAAQ,CACZ,KAAShW,EAAM,EAAGA,EAAMnC,EAAK7D,OAAQgG,IAC7B6hI,EAAYkf,GAAa/yI,QAAQgzI,UAAUngB,EAAQ7gI,GACnDC,EAAQ4hI,EAAUof,YAAYhhJ,MAC9BytH,GAASztH,KACTA,EAAQuE,WAAWvE,IAEnB61C,EAAS71C,IACT4hI,EAAUh8H,QAAU+6I,EAAe/f,EAAQgB,EAAUvvF,OAAQtyC,MAAS,EACtE6hI,EAAU5hI,MAAQgB,KAAKC,IAAIjB,GAC3B4sF,EAAO1iF,KAAK03H,GACRA,EAAUh8H,UACV67C,GAAOmgF,EAAU5hI,OAEP,IAAVA,GACA+V,KAGJ62E,EAAO1iF,KAAK,KAGpB,QACI+mC,MAAOwQ,EACPmrC,OAAQA,EACR72E,MAAOA,GAGf,QAASkrI,GAAiBj8I,EAAGC,GACzB,MAAID,IAAKC,EACED,EAAE9F,gBAAkB+F,EAAE/F,cAE1B8F,IAAMC,EAEjB,QAASi8I,GAAmBtgB,EAAQ5gH,GAApC,GAGajgB,GACDohJ,EAHJ//I,KACAggJ,KAAiB7oI,OAAOyH,EAC5B,KAASjgB,EAAM,EAAGA,EAAM6gI,EAAO7mI,OAAQgG,IAC/BohJ,EAAgBvgB,EAAO7gI,GACvBsF,GAAQ87I,EAAc7/I,KAAM8/I,IAC5BhgJ,EAAO8I,KAAKi3I,EAGpB,OAAO//I,GAEX,QAASigJ,GAAa/gI,EAAOi/H,EAAK7sB,GAAlC,GAIQvxH,GACAnB,CAJJ,OAAY,QAARu/I,EACOA,GAEPp+I,EAAM,SAAWmf,EACjBtgB,EAAQu/I,EAAIp+I,GACXnB,IACDA,EAAQmZ,GAAUu5G,EAAa9sG,GAAOtF,GAAO,GAAMi/H,IACnDA,EAAIp+I,GAAOnB,GAERA,GAEX,QAASshJ,GAAWhtB,EAAaitB,GAAjC,GACQjgJ,GAAOgzH,EAAYhzH,KACnBkgJ,EAAeD,YAA0BnjJ,KAC7C,QAAQkD,GAAQkgJ,GAAgBP,EAAiB3/I,EAAM21H,IAE3D,QAASwqB,GAAkBhsI,GACvB,MAAwB,KAAjBA,EAAM1b,OAAe0b,EAAM,GAAKA,EAqqB3C,QAASisI,GAAazY,GAAtB,GAEQ/iG,GAEShpC,EACDykJ,EAJR5nJ,EAASkvI,EAAKlvI,MAElB,IAAIA,EAAS,EACT,IAASmD,EAAI,EAAGA,EAAInD,EAAQmD,IACpBykJ,EAAU1Y,EAAK/rI,GAAGukI,aACjBv7F,EAGDA,EAAIjrC,KAAK0mJ,GAFTz7G,EAAMy7G,EAAQpjJ,OAM1B,OAAO2nC,IAAO,GAAI8oF,IAEtB,QAAS4yB,GAAW3Y,EAAMz9D,GAA1B,GACatuE,GACD2yE,CADR,KAAS3yE,EAAI,EAAGA,EAAI+rI,EAAKlvI,OAAQmD,IAE7B,GADI2yE,EAASo5D,EAAK/rI,GACd2yE,GAAUA,EAAOrE,OAASA,EAC1B,MAAOqE,GAInB,QAASoX,GAAclP,GACnB,MAAiB,KAAVA,GAA0B,OAAVA,GAA4B,SAAVA,GAA8B,gBAAVA,IAA4B8N,GAAQ9N,GAoHrG,QAAS8pE,GAAS/tG,EAAWpxB,EAAQ1iB,GAArC,GAIY6K,GAHJunG,EAAY1vF,EACZpC,EAAQwzB,CACZ,IAAIA,EAAUxzC,QAAQ,QAAW,CAE7B,IADIuK,EAAQipC,EAAU16C,MAAM,KACrByR,EAAM9Q,OAAS,GAClBumB,EAAQzV,EAAMqJ,QACT2xE,GAAQusB,EAAU9xF,MACnB8xF,EAAU9xF,OAEd8xF,EAAYA,EAAU9xF,EAE1BA,GAAQzV,EAAMqJ,QAElBk+F,EAAU9xF,GAAStgB,EA4qBvB,QAAS8hJ,GAAgBrsI,EAAOvb,GACZ,OAAZA,GACAub,EAAMvL,KAAKhQ,GAqoBnB,QAAS6nJ,GAAkBC,EAAe9rH,EAAM1zB,GAC5C,GAAIy/I,MAAgD1pI,OAAlC2d,YAAgBsjG,IAAyBwoB,EAAc9F,aAA0B8F,EAAcvV,UACjHzvI,IAAWilJ,EAAY/rH,EAAKgsH,WAAY1/I,GAE5C,QAAS2/I,GAAYvhB,EAAQ1qG,EAAMksH,GAC/B,MAAO9yH,IAAKsxG,EAAQ,SAAUvtH,GAC1B,MAAkB,KAAX+uI,IAAiB/uI,EAAE6oI,cAAgB7oI,EAAE6oI,eAAiBhmH,IAkErE,QAAS3vB,KACLnE,KAAKkH,mBAAoB,EAE7B,QAAS+4I,GAAUh4I,EAAGi4I,GAAtB,GACQnhJ,IAAOmhJ,GAAY,IAAIpjJ,cACvBgc,EAAQ7Q,EAAE6Q,MACVoiC,EAAiB,SAARn8C,KAAoB+Z,EAAMqnI,SAAWrnI,EAAM4d,UAAY5d,EAAMsnI,SAAWtnI,EAAM/Z,EAAM,MACjG,OAAOm8C,GAEX,QAASmlG,GAAkBC,GAA3B,GAEa3iJ,GACD4iJ,EAFJtrG,IACJ,KAASt3C,EAAM,EAAGA,EAAM2iJ,EAAW3oJ,OAAQgG,IACnC4iJ,EAAYD,EAAW3iJ,GACvB4iJ,EAAUzsH,KAAK1zB,QAAQ8O,OACvB+lC,EAAOsrG,EAAUzsH,KAAK1zB,QAAQ8O,OAC1B8C,IAAKuuI,EAAU5hG,MAAM3sC,IACrBvZ,IAAK8nJ,EAAU5hG,MAAMlmD,KAIjC,OAAOw8C,GAkoBX,QAASurG,GAAUviJ,GACf,GAAInG,GAAUyF,SAASsa,cAAc,MAIrC,OAHI5Z,KACAnG,EAAQmG,UAAYA,GAEjBnG,EAEX,QAAS2oJ,GAAc3oJ,GAEnB,IADA,GAAI6T,GAAU7T,EACP6T,IAAYqgH,GAAWrgH,EAAS,aACnCA,EAAUA,EAAQgT,UAEtB,OAAOhT,GAuZX,QAASkf,GAAgB5iB,GACrBA,EAAE4iB,kBA6YN,QAAS61H,GAAoBd,EAAeE,EAAWxjH,EAAUl8B,GAC7D,GAAI8xH,MAAiB/7G,OAAOmmB,EAAWsjH,EAAce,MAAQf,EAAcgB,OAAOd,EAClFllJ,IAAWs3H,EAAa9xH,GAiP5B,QAASygJ,GAAiBx3D,GAA1B,GAIQ9pD,GAQAjD,EAXAunD,EAAUpiE,EAAQ0jE,IAAIkE,GACtBhB,EAAO54E,GAAM7Q,KAAKspF,IAAIrE,GAAU+sC,IAChCxoC,EAAS34E,GAAM7Q,KAAKqpF,IAAIpE,GAAU+sC,GAiBtC,OAdIrxF,GADA3gC,KAAKC,IAAIwpF,GAAQy4D,GACJ10E,GACNgc,EAAS,EACH9lE,GAEAF,GAIbka,EADA19B,KAAKC,IAAIwpF,GAAQ04D,GACN30E,GACJic,EAAO,EACH/b,GAEAD,IAGX9sC,WAAYA,EACZjD,SAAUA,GAmblB,QAASuvD,GAAazyD,EAAIC,EAAI2uE,EAAIG,GAAlC,GAGQnpG,GAEIwa,EAJJwnI,GAAO74C,EAAG70E,EAAI00E,EAAG10E,IAAM8F,EAAG/nB,EAAI22F,EAAG32F,IAAM82F,EAAG92F,EAAI22F,EAAG32F,IAAM+nB,EAAG9F,EAAI00E,EAAG10E,GACjE2tH,GAAM94C,EAAG92F,EAAI22F,EAAG32F,IAAMgoB,EAAG/F,EAAI8F,EAAG9F,IAAM60E,EAAG70E,EAAI00E,EAAG10E,IAAM+F,EAAGhoB,EAAI+nB,EAAG/nB,EAMpE,OAJW,KAAP4vI,IACIznI,EAAKwnI,EAAMC,EACfjiJ,EAAS,GAAI6oF,IAAMzuD,EAAG9F,EAAI9Z,GAAM6f,EAAG/F,EAAI8F,EAAG9F,GAAI8F,EAAG/nB,EAAImI,GAAM6f,EAAGhoB,EAAI+nB,EAAG/nB,KAElErS,EA4UX,QAASkiJ,GAAUt+I,EAAGC,GAClB,MAAOD,GAAEhF,MAAM01B,EAAIzwB,EAAEjF,MAAM01B,EA8gE/B,QAAS6tH,GAAmB/gJ,GAA5B,GAEazC,GACDyjJ,EAFJC,EAAUC,EACd,KAAS3jJ,EAAM,EAAGA,EAAM0jJ,EAAQ1pJ,OAAQgG,IAChCyjJ,EAAQC,EAAQ1jJ,GAAO,OACvByC,EAAQghJ,KACRhhJ,EAAQihJ,EAAQ1jJ,GAAO,QAAUyC,EAAQghJ,SAClChhJ,GAAQghJ,IAI3B,QAASG,GAAoB/2D,EAAQt7E,GACjC,GAAIs7E,EACA,IAAK,GAAI7sF,GAAM,EAAGA,EAAM6sF,EAAO7yF,OAAQgG,IACnC,GAAI6sF,EAAO7sF,GAAK8gI,WAAavvH,EACzB,OAAQs7E,EAAO7sF,IAK/B,QAAS6jJ,GAAkBphJ,EAASqhJ,GAGhC,QAASC,GAAexvB,GAAxB,GACQyvB,IAAazvB,OAAmBv8C,OAAS2gE,EAAa3gE,MACtD32E,EAASpE,MAAegnJ,EAAmBA,EAAkBC,GAAWvL,EAAcA,EAAauL,IACnG76C,MAAQrxB,MAAOgsE,GACf5d,QAAUpuD,MAAOgsE,GACjB54G,OAAS4sC,MAAOgsE,IACjBzvB,EAEH,cADOlzH,GAAO6iJ,GACP7iJ,EAXf,GAEQ6iJ,GAAUvL,EAAczP,EAWnBlpI,EAZLikJ,GAAqBH,OAAoBnL,gBAY7C,KAAS34I,EAAM,EAAGA,EAAM2jJ,GAAW3pJ,OAAQgG,IACvCkkJ,EAAWP,GAAW3jJ,GAAO,OAC7B24I,EAAel2I,EAAQk2I,iBACvBzP,KAAU1wH,OAAO/V,EAAQyhJ,IACzBhb,EAAOA,EAAK7zH,IAAI0uI,GAChBthJ,EAAQyhJ,GAAYhb,EAAKlvI,OAAS,EAAIkvI,EAAOA,EAAK,GAG1D,QAASib,GAAoB1hJ,EAASqhJ,GAAtC,GASa3mJ,GACDinJ,EACAC,EAVJxjB,EAASp+H,EAAQo+H,OACjByjB,EAAezjB,EAAO7mI,OACtB+/I,EAAiBt3I,EAAQs3I,eACzBwK,EAAiBtnJ,MAAewF,EAAQs3I,gBACxCyK,EAAsBV,EAAe7mJ,MAAe6mJ,EAAa/J,mBACjE0K,EAAsBxnJ,MAAeunJ,EAGzC,KAFAE,EAA4BH,GAC5BG,EAA4BD,GACnBtnJ,EAAI,EAAGA,EAAImnJ,EAAcnnJ,IAC1BinJ,EAAavjB,EAAO1jI,GAAGoE,MAAQkB,EAAQs3I,eAAex4I,KACtD8iJ,EAAcpnJ,IAAaY,SAAY4mJ,EAAqBD,EAAoBJ,IAAej4B,QAAS1pH,EAAQ0pH,SAAWo4B,EAAgBxK,EAAeqK,IAC9JvjB,EAAO1jI,GAAGwnJ,UAAYN,EACtBxjB,EAAO1jI,GAAKF,MAAeonJ,EAAaxjB,EAAO1jI,IAGvD,QAASunJ,GAA4B3K,SAC1BA,GAAec,UACfd,GAAekB,aACflB,GAAe6B,kBACf7B,GAAe1wC,WACf0wC,GAAekC,mBACflC,GAAemB,UACfnB,GAAeoB,YACfpB,GAAeW,WACfX,GAAe+B,mBACf/B,GAAeoE,cACfpE,GAAe8B,kBACf9B,GAAegB,aACfhB,GAAeiB,kBACfjB,GAAeuB,WACfvB,GAAee,cACff,GAAen1C,aACfm1C,GAAeiC,qBACfjC,GAAe0B,gBACf1B,GAAe2B,gBACf3B,GAAewB,gBACfxB,GAAeyB,gBACfzB,GAAemC,UAE1B,QAASyG,GAAWzZ,GAApB,GAEa/rI,GACDg5B,EACA+tH,EAHJ5sG,IACJ,KAASn6C,EAAI,EAAGA,EAAI+rI,EAAKlvI,OAAQmD,IACzBg5B,EAAO+yG,EAAK/rI,GACZ+mJ,EAAW/tH,EAAK1zB,QAAQ8O,KACxB2yI,IACA5sG,EAAO4sG,GAAY/tH,EAAK6qB,QAGhC,OAAO1J,GAEX,QAASstG,GAAU/xB,EAAO36E,GACL,SAAbA,IACAA,EAAWp0B,EAAQ+tG,aAEvB,KAAK,GAAI10H,GAAI,EAAGnD,EAAS64H,EAAM74H,OAAQmD,EAAInD,EAAQmD,IAC/C,GAAI+6C,EAAS26E,EAAM11H,GAAI01H,EAAM11H,EAAI,IAAM,EAAG,CACtC01H,EAAMryG,KAAK03B,EACX,OAGR,MAAO26E,GAEX,QAASgyB,GAAYC,EAAU5sG,GAA/B,GAIQ26E,GACA74H,EACAqH,EACKlE,CAAT,KANiB,SAAb+6C,IACAA,EAAWp0B,EAAQ+tG,cAEnBgB,EAAQ+xB,EAAUE,EAAU5sG,GAC5Bl+C,EAAS64H,EAAM74H,OACfqH,EAASrH,EAAS,GAAK64H,EAAM,OACxB11H,EAAI,EAAGA,EAAInD,EAAQmD,IACiB,IAArC+6C,EAAS26E,EAAM11H,GAAI60B,GAAK3wB,KACxBA,EAAO8I,KAAK0oH,EAAM11H,GAG1B,OAAOkE,GAEX,QAAS0jJ,GAAU5rG,GAAnB,GAGa6rG,GACDxF,EACAyF,EACKC,EALTC,EAAWhsG,EAAKn/C,OAChBqH,IACJ,KAAS2jJ,EAAQ,EAAGA,EAAQG,EAAUH,IAGlC,IAFIxF,EAAMrmG,EAAK6rG,GACXC,EAAWzF,EAAIxlJ,OACVkrJ,EAAQ,EAAGA,EAAQD,EAAUC,IAClC7jJ,EAAO6jJ,GAAS7jJ,EAAO6jJ,OACvB7jJ,EAAO6jJ,GAAO/6I,KAAKq1I,EAAI0F,GAG/B,OAAO7jJ,GAEX,QAAS+jJ,GAAmBC,EAAiB5iJ,GAA7C,GACa8d,GACD+kI,EACAC,EAEIC,CAJZ,KAASjlI,IAAS9d,GACV6iJ,EAAa7iJ,EAAQ8d,GACrBglI,EAAgBF,EAAgB9kI,GAChCulE,GAAQy/D,KACJC,EAA2B,OAAfF,EACZE,IAAc1/D,GAAQw/D,UACfD,GAAgB9kI,GACnBilI,SACO/iJ,GAAQ8d,IAEZglI,GAAiB33B,GAAS03B,IAC7B13B,GAAS23B,IACTH,EAAmBG,EAAeD,IA9qWzD,GAEOxhI,GACA7qB,EACA68C,EACA2vG,EACArzC,EACAwc,EACA37D,GACAwb,GACAC,GACAC,GACAlqD,GACA8xG,GACAM,GACAT,GACAziH,GACAgR,GACA6xG,GACAU,GACAjE,GACA+D,GACAlxC,GACAjgE,GACAzd,GACAkwH,GACApuC,GACA+kC,GACA3B,GACAoB,GACAppH,GACA/G,GACAopF,GACAimC,GACA3wH,GACA+0B,GACAi1D,GACAknC,GACA6K,GACAR,GACAvK,GACA0M,GACA9zF,GACA6mF,GACAt0G,GACAy0G,GACA4L,GACAlB,GACAzmH,GACAyd,GACAsqG,GACA7xC,GACAqmC,GACAzmC,GACAkwC,GACA1vC,GACAjB,GACA5sF,GACAwpB,GACAs9E,GACA/hE,GACAqtE,GACA5Y,GACAvb,GACAq2B,GACAuxC,GACA1jH,GACAgpH,GAuBAC,GAMAC,GAkBAC,GA8EA9E,GA+GA+E,GACAC,GACAC,GACAC,GACAC,GA2GAvqJ,GACAwqJ,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACA10I,GACA20I,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,GACAC,GACAC,GACAC,GACAC,GAaAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACA5mF,GACA6mF,GACAC,GACAC,GACAC,GACAC,GACAC,GACAruF,GACAsuF,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAtzB,GA8EAuzB,GACAC,GAqGAC,GAMAjL,GA2CAkL,GAodAC,GAuBAC,GAgBAC,GA0QAC,GA+CAC,GAsCAC,GAMAC,GAuBAC,GAiEAC,GA4BAC,GAuBAC,GA8EAC,GAgGAC,GASAC,GAgBAC,GAqGAC,GAwBAC,GAoGAC,GACAC,GA0OAC,GAiCAC,GAsBAC,GA6IAC,GAiMAC,GA4GAC,GAkOAC,GA2EAC,GA2FAC,GAUAC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AAWjpH,EAAK5N,OAAS4N,EAAKssH,WAAatsH,EAAKqvL,kBAEzD6C,WAAY,SAAU5yF,GAAV,GACuDtoG,GACtD9C,EADL8L,EAAO5G,KAAM4O,EAAUhI,GAAAA,EAAKowL,aAAa9wF,EAC7C,KAASprG,EAAI,EAAGA,EAAI8T,EAAQjX,OAAQmD,IAChC8C,EAAQyU,SAASzD,EAAQxX,OAAO0D,GAAI,IACpC8L,EAAKgI,QAAQ9G,KAAKlK,GAClBgJ,EAAKssH,YAAct1H,CAEvBgJ,GAAKg4L,UAAY14F,EAAOt/F,EAAK5M,YAEjC6kM,aAAc,SAAU9C,EAAeH,GACnC,IAAK,GAAI9gM,GAAI,EAAGA,EAAI8gM,EAAOjkM,OAAQmD,IAC/B,GAAIkF,KAAK47L,EAAO9gM,IAAIhB,GAAGiiM,EAAcn+L,MAAOm+L,EAAc5pL,OACtD,MAAOypL,GAAO9gM,EAGtBkF,MAAKs2L,sBAAsByF,EAAcn+L,MAAMxG,OAAO2kM,EAAc5pL,SAExE6kL,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,EAAY/0L,QAC7BwO,KAAM,aACN0sL,QAAS,OAEbpF,EAAUwI,SAAWvJ,EAAY/0L,QAC7BwO,KAAM,aAC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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.3.1026'.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 if (idx > 0) {\n parts.push(integer.substring(0, idx));\n }\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, strict) {\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 if (strict && !/^\\s*$/.test(value.substr(valueIdx))) {\n return null;\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 function internalParseDate(value, formats, culture, strict) {\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, strict);\n if (date) {\n return date;\n }\n }\n return date;\n }\n kendo.parseDate = function (value, formats, culture) {\n return internalParseDate(value, formats, culture, false);\n };\n kendo.parseExactDate = function (value, formats, culture) {\n return internalParseDate(value, formats, culture, true);\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.css({\n display: '',\n position: ''\n });\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, options) {\n var mask = container.find('.k-loading-mask'), support = kendo.support, browser = support.browser, isRtl, leftRight, webkitCorrection, containerScrollLeft, cssClass;\n options = $.extend({}, {\n width: '100%',\n height: '100%',\n top: container.scrollTop(),\n opacity: false\n }, options);\n cssClass = options.opacity ? 'k-loading-mask k-opaque' : 'k-loading-mask';\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.format('
{1}
', cssClass, kendo.ui.progress.messages.loading)).width(options.width).height(options.height).css('top', options.top).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 var tempToOffset = toOffset;\n var diff;\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 if (typeof tempToOffset == STRING) {\n tempToOffset = this.offset(date, tempToOffset);\n }\n diff = toLocalOffset - fromLocalOffset + (toOffset - tempToOffset);\n return new Date(date.getTime() + diff * 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 if (weekStartDay === undefined) {\n weekStartDay = kendo.culture().calendar.firstDay;\n }\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 toInvariantTime(date).getTime() - getDate(toInvariantTime(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 kendo.focusElement = function (element) {\n var scrollTopPositions = [];\n var scrollableParents = element.parentsUntil('body').filter(function (index, element) {\n var computedStyle = kendo.getComputedStyles(element, ['overflow']);\n return computedStyle.overflow !== 'visible';\n }).add(window);\n scrollableParents.each(function (index, parent) {\n scrollTopPositions[index] = $(parent).scrollTop();\n });\n try {\n element[0].setActive();\n } catch (e) {\n element[0].focus();\n }\n scrollableParents.each(function (index, parent) {\n $(parent).scrollTop(scrollTopPositions[index]);\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 = !!e.decode;\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 that.dirtyFields = {};\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 !== 'dirtyFields' && 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 this.dirtyFields[e.field] = 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 that.dirtyFields[field] = true;\n if (ObservableObject.fn.set.call(that, field, value, initiator) && !dirty) {\n that.dirty = dirty;\n if (!that.dirty) {\n that.dirtyFields[field] = false;\n }\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 that.dirtyFields = {};\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, inPlace) {\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 if (inPlace) {\n return new Query(this.data.sort(Comparer.create(sort)));\n }\n return new Query(this.data.slice(0).sort(Comparer.create(sort)));\n },\n orderBy: function (selector, inPlace) {\n return this.order(selector, 'asc', inPlace);\n },\n orderByDescending: function (selector, inPlace) {\n return this.order(selector, 'desc', inPlace);\n },\n sort: function (field, dir, comparer, inPlace) {\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) }, inPlace);\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, inPlace) {\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 if (inPlace) {\n query = query.sort(sort, undefined, undefined, inPlace);\n } else {\n query = query.sort(sort);\n }\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, skip, take) {\n var length = data.length;\n var startIndex = skip || 0;\n var endIndex = typeof take !== 'undefined' ? math.min(startIndex + take, length) : length;\n var idx;\n for (idx = startIndex; idx < endIndex; 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 inPlaceSort: 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, this.options.useRanges);\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 return this._getByUid(id, this._data);\n },\n _getByUid: function (id, dataItems) {\n var idx, length, data = this._flatData(dataItems, this.options.useRanges);\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 this._insertModelInRange(index, model);\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 if (that.options.useRanges && !that.options.serverPaging) {\n result = removeModel(items, model, that.currentRangeStart(), that.take());\n } else {\n result = removeModel(items, model);\n }\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 return model;\n },\n destroyed: function () {\n return this._destroyed;\n },\n created: function () {\n var idx, length, result = [], data = this._flatData(this._data, this.options.useRanges);\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, this.options.useRanges);\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, 0);\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, this.options.useRanges);\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 that = this;\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 that._removeModelFromRanges(model);\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, requestParams;\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 requestParams = arguments.length > 1 ? arguments[1] : undefined;\n data = that._readData(data, requestParams);\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 if (that.options.endless) {\n that._data.unbind(CHANGE, that._changeHandler);\n data = that._observe(data);\n for (var i = 0; i < data.length; i++) {\n that._data.push(data[i]);\n }\n that._data.bind(CHANGE, that._changeHandler);\n } else {\n that._data = that._observe(data);\n }\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, skip) {\n var that = this, start = typeof skip !== 'undefined' ? skip : 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 if (this.options.inPlaceSort) {\n return Query.process(data, options, this.options.inPlaceSort);\n } else {\n return Query.process(data, options);\n }\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 if (this.options.endless) {\n var moreItemsCount = options.pageSize - this.pageSize();\n if (moreItemsCount > 0) {\n moreItemsCount = this.pageSize();\n options.page = options.pageSize / moreItemsCount;\n options.pageSize = moreItemsCount;\n } else {\n options.page = 1;\n this.options.endless = false;\n }\n }\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, callback) {\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 if (isFunction(callback)) {\n callback();\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, callback);\n });\n } else {\n that.range(skip, take, callback);\n }\n });\n } else if (pageSkip < skip) {\n that.prefetch(size, take, function () {\n that.range(skip, take, callback);\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 if (options.inPlaceSort) {\n processed = that._queryProcess(range.data, { filter: that.filter() });\n } else {\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 }\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 that = this;\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 if (that.options.useRanges && !that.options.serverPaging) {\n result = removeModel(items, model, that.currentRangeStart(), that.take());\n } else {\n result = removeModel(items, model);\n }\n if (result) {\n found = true;\n }\n });\n if (found) {\n break;\n }\n }\n that._updateRangesLength();\n },\n _insertModelInRange: function (index, model) {\n var that = this;\n var ranges = that._ranges || [];\n var rangesLength = ranges.length;\n var range;\n var i;\n for (i = 0; i < rangesLength; i++) {\n range = ranges[i];\n if (range.start <= index && range.end >= index) {\n if (!that._getByUid(model.uid, range.data)) {\n if (that._isServerGrouped()) {\n range.data.splice(index, 0, that._wrapInEmptyGroup(model));\n } else {\n range.data.splice(index, 0, model);\n }\n }\n break;\n }\n }\n that._updateRangesLength();\n },\n _updateRangesLength: function () {\n var that = this;\n var ranges = that._ranges || [];\n var rangesLength = ranges.length;\n var mismatchFound = false;\n var mismatchLength = 0;\n var lengthDifference = 0;\n var range;\n var i;\n for (i = 0; i < rangesLength; i++) {\n range = ranges[i];\n lengthDifference = that._flatData(range.data, true).length - math.abs(range.end - range.start);\n if (!mismatchFound && lengthDifference !== 0) {\n mismatchFound = true;\n mismatchLength = lengthDifference;\n range.end += mismatchLength;\n continue;\n }\n if (mismatchFound) {\n range.start += mismatchLength;\n range.end += mismatchLength;\n }\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 if (this._data && this._data.length > 0) {\n this.filter(this._hierarchicalFilter);\n } else {\n this.options.filter = this._hierarchicalFilter;\n this._filter = normalizeFilter(this.options.filter);\n this._hierarchicalFilter = null;\n }\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 && 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 this._updateHierarchicalFilter(function () {\n return true;\n });\n return false;\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 return true;\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 if (items[idx]) {\n bindElement(items[idx], view[idx], this._ns(e.ns), [view[idx]].concat(parents));\n }\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 var defaultAction = 'pinch-zoom double-tap-zoom';\n element.css('-ms-touch-action', options.touchAction && options.touchAction != 'none' ? defaultAction + ' ' + options.touchAction : defaultAction);\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).attr('aria-hidden', true).on('mouseenter' + NS, function () {\n that._hovered = true;\n }).on('wheel' + NS, function (e) {\n var scrollArea = $(this).find('.k-list').parent();\n if (scrollArea.scrollTop() === 0 && e.originalEvent.deltaY < 0 || scrollArea.scrollTop() === scrollArea.prop('scrollHeight') - scrollArea.prop('offsetHeight') && e.originalEvent.deltaY > 0) {\n e.preventDefault();\n }\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 }).attr('aria-hidden', false);\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).attr('aria-hidden', false);\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).attr('aria-hidden', true);\n wrap.css({ overflow: HIDDEN }).attr('aria-hidden', true);\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) || outerHeight(element.children().first()), 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 stableSort = kendo.support.stableSort;\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() || e.isDefaultPrevented()) {\n return;\n }\n var elements = this._focusableElements();\n var sortedElements = this._sortFocusableElements(elements);\n var next = this._nextFocusable(e, sortedElements);\n this._focus(next);\n e.preventDefault();\n },\n _focusableElements: function () {\n var elements = this.element.find(focusableNodesSelector).filter(function (i, item) {\n return item.tabIndex >= 0 && $(item).is(':visible') && !$(item).is(':disabled');\n });\n if (this.element.is('[tabindex]')) {\n elements.push(this.element[0]);\n }\n return elements;\n },\n _sortFocusableElements: function (elements) {\n var sortedElements;\n if (stableSort) {\n sortedElements = elements.sort(function (prev, next) {\n return prev.tabIndex - next.tabIndex;\n });\n } else {\n var attrName = '__k_index';\n elements.each(function (i, item) {\n item.setAttribute(attrName, i);\n });\n sortedElements = elements.sort(function (prev, next) {\n return prev.tabIndex === next.tabIndex ? parseInt(prev.getAttribute(attrName), 10) - parseInt(next.getAttribute(attrName), 10) : prev.tabIndex - next.tabIndex;\n });\n elements.removeAttr(attrName);\n }\n return sortedElements;\n },\n _nextFocusable: function (e, elements) {\n var count = elements.length;\n var current = elements.index(e.target);\n return elements.get((current + (e.shiftKey ? -1 : 1)) % count);\n },\n _focus: function (element) {\n element.focus();\n if (element.nodeName == 'INPUT' && element.setSelectionRange && this._haveSelectionRange(element)) {\n element.setSelectionRange(0, element.value.length);\n }\n },\n _haveSelectionRange: function (element) {\n var elementType = element.type.toLowerCase();\n return elementType === 'text' || elementType === 'search' || elementType === 'url' || elementType === 'tel' || elementType === 'password';\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 if (restoreTitleAttributeForElement(element)) {\n break;\n }\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 return true;\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 return true;\n }\n }\n function saveTitleAttributes(element) {\n while (element.length && !element.is('body')) {\n if (saveTitleAttributeForElement(element)) {\n break;\n }\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));\n if (!this._isShownOnFocus()) {\n that.element.on('mouseenter' + NS, that.options.filter, proxy(that._mouseenter, that));\n }\n if (this.options.autoHide && !this._isShownOnFocus()) {\n that.element.on('mouseleave' + NS, that.options.filter, proxy(that._mouseleave, that));\n }\n if (this.options.autoHide && this._isShownOnFocus()) {\n that.element.on('blur' + NS, that.options.filter, proxy(that._blur, 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 duration: 40,\n hide: true\n }\n }\n },\n events: [\n SHOW,\n HIDE,\n CONTENTLOAD,\n ERROR,\n REQUESTSTART\n ],\n _isShownOnFocus: function () {\n return this.options.showOn && this.options.showOn.match(/focus/);\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/)) {\n that._show(currentTarget);\n } else if (that._isShownOnFocus()) {\n saveTitleAttributes(currentTarget);\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 && !this._isShownOnFocus()) {\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 this._closePopup(e.currentTarget);\n clearTimeout(this.timeout);\n },\n _blur: function (e) {\n this._closePopup(e.currentTarget);\n },\n _closePopup: function (target) {\n if (this.popup) {\n this.popup.close();\n } else {\n restoreTitle($(target));\n }\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 matchNamedColor = function (color) {\n var colorNames = Object.keys(namedColors);\n colorNames.push('transparent');\n var regexp = new RegExp('^(' + colorNames.join('|') + ')(\\\\W|$)', 'i');\n matchNamedColor = function (color) {\n return regexp.exec(color);\n };\n return regexp.exec(color);\n };\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 = matchNamedColor(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 var REPLACE_REGEX = /\\r?\\n|\\r|\\t/g;\n var SPACE = ' ';\n function normalizeText(text) {\n return String(text).replace(REPLACE_REGEX, SPACE);\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: pre!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, options) {\n if (options === void 0) {\n options = {};\n }\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 = options.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 var textStr = options.normalizeText !== false ? normalizeText(text) : String(text);\n measureBox.textContent = textStr;\n measureBox.appendChild(baselineMarker);\n document.body.appendChild(measureBox);\n if (textStr.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 normalizeText: normalizeText\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 supportBrowser = support.browser;\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 function alignStartReverse(size, rect, align, axis, sizeField) {\n var start;\n if (align === 'start') {\n start = rect.origin[axis] + rect.size[sizeField] - size;\n } else if (align === 'end') {\n start = rect.origin[axis];\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 revers: false\n };\n var forEach = function (elements, callback) {\n elements.forEach(callback);\n };\n var forEachReverse = function (elements, callback) {\n var length = elements.length;\n for (var idx = length - 1; idx >= 0; idx--) {\n callback(elements[idx], idx);\n }\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 if (options.reverse) {\n this.forEach = forEachReverse;\n this.justifyAlign = alignStartReverse;\n } else {\n this.forEach = forEach;\n this.justifyAlign = alignStart;\n }\n },\n reflow: function () {\n var this$1 = this;\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, group, groupBox;\n var arrangeElements = function (bbox, idx) {\n var element = group.elements[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 for (var groupIdx = 0; groupIdx < groups.length; groupIdx++) {\n group = groups[groupIdx];\n groupOrigin[groupAxis] = elementStart = this$1.justifyAlign(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 this$1.forEach(group.bboxes, arrangeElements);\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 ];\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.element._kendoExportVisual = this.exportVisual.bind(this);\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.element._kendoExportVisual = 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 && !supportBrowser.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 } else if (field === 'id') {\n if (value) {\n this.attr('id', value);\n } else {\n this.removeAttr('id');\n }\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 renderId: function () {\n return renderAttr('id', this.srcElement.options.id);\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 var ENTITY_REGEX = /&(?:[a-zA-Z]+|#\\d+);/g;\n function decodeEntities(text) {\n if (!text || typeof text !== 'string' || !ENTITY_REGEX.test(text)) {\n return text;\n }\n var element = decodeEntities._element;\n ENTITY_REGEX.lastIndex = 0;\n return text.replace(ENTITY_REGEX, function (match) {\n element.innerHTML = match;\n return element.textContent || element.innerText;\n });\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 'white-space',\n 'pre'\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 kendoUtil.normalizeText(content);\n },\n renderTextAnchor: function () {\n var anchor;\n if ((this.options || {}).rtl && !(supportBrowser.msie || supportBrowser.edge)) {\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 = supportBrowser;\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 = function dive(node) {\n var clone = node.cloneNode(false);\n if (node._kendoExportVisual) {\n clone._kendoExportVisual = node._kendoExportVisual;\n }\n for (var i = node.firstChild; i; i = i.nextSibling) {\n clone.appendChild(dive(i));\n }\n return clone;\n }(el);\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 {\n var page = makePage();\n copy.parentNode.insertBefore(page, copy);\n page.appendChild(copy);\n }\n if (template$$1) {\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 }\n });\n }\n cacheImages(pages, function () {\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 }\n if (Array.isArray(element)) {\n element.forEach(dive);\n } else {\n dive(element);\n }\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 || browser.edge) {\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 || browser.edge) {\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 (element.tagName == 'A' && element.href && !/^#?$/.test(element.getAttribute('href'))) {\n if (!nodeInfo._avoidLinks || !matches(element, nodeInfo._avoidLinks)) {\n var r = document.createRange();\n r.selectNodeContents(element);\n slice$1(r.getClientRects()).forEach(function (box) {\n var g = new Group();\n g._pdfLink = {\n url: element.href,\n top: box.top,\n right: box.right,\n bottom: box.bottom,\n left: box.left\n };\n group.append(g);\n });\n }\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 (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 var visual;\n if (element._kendoExportVisual) {\n visual = element._kendoExportVisual();\n } else 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 if (widget.exportDOMVisual) {\n visual = widget.exportDOMVisual();\n } else {\n visual = widget.exportVisual();\n }\n }\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 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 textTransform = getPropertyValue(style, 'text-transform');\n var textOverflow, saveTextOverflow;\n if (browser.msie || browser.edge) {\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 || browser.edge) && 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.edge || 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 || browser.edge) {\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 || browser.edge) && !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 switch (textTransform) {\n case 'uppercase':\n str = str.toUpperCase();\n break;\n case 'lowercase':\n str = str.toLowerCase();\n break;\n case 'capitalize':\n str = str.replace(/(?:^|\\s)\\S/g, function (l) {\n return l.toUpperCase();\n });\n break;\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 Widget.fn.init.call(this, element, {});\n this.options = deepExtend({}, this.options, 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 isNumber(value) {\n return typeof value === 'number' && !isNaN(value);\n }\n function isString(value) {\n return typeof value === STRING;\n }\n function convertableToNumber(value) {\n return isNumber(value) || isString(value) && isFinite(value);\n }\n function isObject(value) {\n return typeof value === 'object';\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 equals: function (box) {\n return this.x1 === box.x1 && this.x2 === box.x2 && this.y1 === box.y1 && this.y2 === box.y2;\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 DIRECTION_ANGLE = 0.001;\n var ShapeBuilder = Class.extend({\n createRing: function (sector, options) {\n var startAngle = sector.startAngle + 180;\n var endAngle = sector.angle + startAngle;\n if (sector.angle > 0 && startAngle === endAngle) {\n endAngle += DIRECTION_ANGLE;\n }\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, this.options.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/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 }\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 var visual = this.visual;\n if (visual && !defined(visual.options.noclip)) {\n visual.options.noclip = this.options.noclip;\n }\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 = Math.abs(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 options = this.options;\n var reverse = options.reverse;\n var justified = options.justified;\n var vertical = options.vertical;\n var ref = this.rangeIndices();\n var min = ref.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 limitSlot: function (slot) {\n var vertical = this.options.vertical;\n var valueAxis = vertical ? Y : X;\n var lineBox = this.lineBox();\n var limittedSlot = slot.clone();\n limittedSlot[valueAxis + 1] = limitValue(slot[valueAxis + 1], lineBox[valueAxis + 1], lineBox[valueAxis + 2]);\n limittedSlot[valueAxis + 2] = limitValue(slot[valueAxis + 2], lineBox[valueAxis + 1], lineBox[valueAxis + 2]);\n return limittedSlot;\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 var userSetMin, userSetMax;\n if (userOptions) {\n userSetMin = defined(userOptions.min);\n userSetMax = defined(userOptions.max);\n var userSetLimits = userSetMin || userSetMax;\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 var result = deepExtend(autoOptions, options);\n if (result.min >= result.max) {\n if (userSetMin && !userSetMax) {\n result.max = result.min + result.majorUnit;\n } else if (!userSetMin && userSetMax) {\n result.min = result.max - result.majorUnit;\n }\n }\n return result;\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 convertableToNumber: convertableToNumber,\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 rangeAreaSeries = 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 rangeArea: rangeAreaSeries(),\n verticalRangeArea: rangeAreaSeries(),\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.rangeArea = deepExtend({}, defaults.area);\n defaults.verticalRangeArea = deepExtend({}, defaults.rangeArea);\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 X = datavizConstants.X;\n var Y = datavizConstants.Y;\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 last = dataviz.last;\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 CurveProcessor = dataviz.CurveProcessor;\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 limitValue = dataviz.limitValue;\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 ChartPane = kendo.Class.extend({\n init: function (pane) {\n this.visual = pane.visual;\n this.chartsVisual = pane.chartContainer.visual;\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 ABOVE = 'above';\n var BELOW = 'below';\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_AREA = 'rangeArea';\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 VERTICAL_RANGE_AREA = 'verticalRangeArea';\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_AREA: RANGE_AREA,\n VERTICAL_RANGE_AREA: VERTICAL_RANGE_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 ABOVE: ABOVE,\n BELOW: BELOW\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 dataviz.convertableToNumber(point.value) ? 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 = this$1.valueSlot(valueAxis, plotRange);\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 if (!this.options.clip && this.options.limitPoints && this.points.length) {\n this.limitPoints();\n }\n this.box = targetBox;\n },\n valueSlot: function (valueAxis, plotRange) {\n return valueAxis.getSlot(plotRange[0], plotRange[1], !this.options.clip);\n },\n limitPoints: function () {\n var this$1 = this;\n var categoryPoints = this.categoryPoints;\n var points = categoryPoints[0].concat(last(categoryPoints));\n for (var idx = 0; idx < points.length; idx++) {\n if (points[idx]) {\n this$1.limitPoint(points[idx]);\n }\n }\n },\n limitPoint: function (point) {\n var limittedSlot = this.categoryAxis.limitSlot(point.box);\n if (!limittedSlot.equals(point.box)) {\n point.reflow(limittedSlot);\n }\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 limitPoints: 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 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 unclipElements: function () {\n if (this.label) {\n this.label.options.noclip = true;\n }\n if (this.note) {\n this.note.options.noclip = true;\n }\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 zIndex: datavizConstants.HIGHLIGHT_ZINDEX\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 () {\n return this.toGeometryPoints(this.linePoints);\n },\n toGeometryPoints: function (points) {\n var result = [];\n for (var i = 0, length = points.length; i < length; i++) {\n if (points[i] && points[i].visible !== false) {\n result.push(points[i]._childBox.toRect().center());\n }\n }\n return result;\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 StepLineMixin = {\n calculateStepPoints: function (points) {\n var categoryAxis = this.parent.plotArea.seriesCategoryAxis(this.series);\n var ref = categoryAxis.options;\n var justified = ref.justified;\n var vertical = ref.vertical;\n var reverse = ref.reverse;\n var stepAxis = vertical ? X : Y;\n var axis = vertical ? Y : X;\n var stepDir = reverse ? 2 : 1;\n var dir = stepDir;\n var previousPoint = toGeometryPoint(points[0], stepAxis, stepDir, axis, dir);\n var result = [previousPoint];\n for (var idx = 1; idx < points.length; idx++) {\n var point = toGeometryPoint(points[idx], stepAxis, stepDir, axis, dir);\n if (previousPoint[stepAxis] !== point[stepAxis]) {\n var stepPoint = new GeometryPoint();\n stepPoint[stepAxis] = previousPoint[stepAxis];\n stepPoint[axis] = point[axis];\n result.push(stepPoint, point);\n }\n previousPoint = point;\n }\n if (!justified) {\n result.push(toGeometryPoint(last(points), stepAxis, stepDir, axis, reverse ? 1 : 2));\n } else if (previousPoint !== last(result)) {\n result.push(previousPoint);\n }\n return result;\n }\n };\n function toGeometryPoint(lintPoint, stepAxis, stepDir, axis, dir) {\n var box = lintPoint.box;\n var result = new GeometryPoint();\n result[stepAxis] = box[stepAxis + stepDir];\n result[axis] = box[axis + dir];\n return result;\n }\n var StepLineSegment = LineSegment.extend({\n points: function () {\n return this.calculateStepPoints(this.linePoints);\n }\n });\n deepExtend(StepLineSegment.prototype, StepLineMixin);\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 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 AreaSegment = LineSegment.extend({\n init: function (linePoints, currentSeries, seriesIx, prevSegment, stackPoints) {\n LineSegment.fn.init.call(this, linePoints, currentSeries, seriesIx);\n this.prevSegment = prevSegment;\n this.stackPoints = stackPoints;\n },\n createVisual: function () {\n var series = this.series;\n var defaults = series._defaults;\n var lineOptions = series.line || {};\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 if (lineOptions.width > 0 && lineOptions.visible !== false) {\n this.createStroke({\n stroke: deepExtend({\n color: color,\n opacity: series.opacity,\n lineCap: 'butt'\n }, lineOptions)\n });\n }\n },\n strokeSegments: function () {\n var segments = this._strokeSegments;\n if (!segments) {\n segments = this._strokeSegments = this.createStrokeSegments();\n }\n return segments;\n },\n createStrokeSegments: function () {\n return this.segmentsFromPoints(this.points());\n },\n stackSegments: function () {\n if (this.prevSegment) {\n return this.prevSegment.createStackSegments(this.stackPoints);\n }\n return this.createStackSegments(this.stackPoints);\n },\n createStackSegments: function (stackPoints) {\n return this.segmentsFromPoints(this.toGeometryPoints(stackPoints)).reverse();\n },\n segmentsFromPoints: function (points) {\n return points.map(function (point) {\n return new geometry.Segment(point);\n });\n },\n createStroke: function (style) {\n var stroke = new Path(style);\n stroke.segments.push.apply(stroke.segments, this.strokeSegments());\n this.visual.append(stroke);\n },\n hasStackSegment: function () {\n return this.prevSegment || this.stackPoints && this.stackPoints.length;\n },\n createFill: function (style) {\n var strokeSegments = this.strokeSegments();\n var fillSegments = strokeSegments.slice(0);\n var hasStackSegments = this.hasStackSegment();\n if (hasStackSegments) {\n var stackSegments = this.stackSegments();\n append(fillSegments, stackSegments);\n }\n var fill = new Path(style);\n fill.segments.push.apply(fill.segments, fillSegments);\n if (!hasStackSegments && strokeSegments.length > 1) {\n this.fillToAxes(fill);\n }\n this.visual.append(fill);\n },\n fillToAxes: function (fillPath) {\n var chart = this.parent;\n var invertAxes = chart.options.invertAxes;\n var valueAxis = chart.seriesValueAxis(this.series);\n var crossingValue = chart.categoryAxisCrossingValue(valueAxis);\n var endSlot = valueAxis.getSlot(crossingValue, crossingValue, true);\n var segments = this.strokeSegments();\n var firstPoint = segments[0].anchor();\n var lastPoint = last(segments).anchor();\n var end = invertAxes ? endSlot.x1 : endSlot.y1;\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 var StepAreaSegment = AreaSegment.extend({\n createStrokeSegments: function () {\n return this.segmentsFromPoints(this.calculateStepPoints(this.linePoints));\n },\n createStackSegments: function (stackPoints) {\n return this.segmentsFromPoints(this.calculateStepPoints(stackPoints)).reverse();\n }\n });\n deepExtend(StepAreaSegment.prototype, StepLineMixin);\n var SplineAreaSegment = AreaSegment.extend({\n createStrokeSegments: function () {\n var curveProcessor = new CurveProcessor(this.options.closed);\n var linePoints = this.points();\n return curveProcessor.process(linePoints);\n },\n createStackSegments: function () {\n var strokeSegments = this.strokeSegments();\n var stackSegments = [];\n for (var idx = strokeSegments.length - 1; idx >= 0; idx--) {\n var segment = strokeSegments[idx];\n stackSegments.push(new geometry.Segment(segment.anchor(), segment.controlOut(), segment.controlIn()));\n }\n return stackSegments;\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 previousSegment;\n var stackPoints;\n if (isStacked && seriesIx > 0 && prevSegment) {\n var missingValues = this.seriesMissingValues(currentSeries);\n if (missingValues !== 'gap') {\n stackPoints = prevSegment.linePoints;\n previousSegment = prevSegment;\n } else {\n stackPoints = this._gapStackPoints(linePoints, seriesIx, style);\n }\n }\n var pointType;\n if (style === STEP) {\n pointType = StepAreaSegment;\n } else if (style === SMOOTH) {\n pointType = SplineAreaSegment;\n } else {\n pointType = AreaSegment;\n }\n return new pointType(linePoints, currentSeries, seriesIx, previousSegment, stackPoints);\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 function forEach(elements, callback) {\n elements.forEach(callback);\n }\n function forEachReverse(elements, callback) {\n var length = elements.length;\n for (var idx = length - 1; idx >= 0; idx--) {\n callback(elements[idx], idx - length - 1);\n }\n }\n var ClusterLayout = ChartElement.extend({\n init: function (options) {\n ChartElement.fn.init.call(this, options);\n this.forEach = options.rtl ? forEachReverse : forEach;\n },\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 this.forEach(children, function (child, idx) {\n var childBox = (child.box || box).clone();\n childBox[axis + 1] = position;\n childBox[axis + 2] = position + slotSize;\n child.reflow(childBox);\n if (idx < 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 rtl: !options.invertAxes && (this.chartService || {}).rtl\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 rtl: !options.invertAxes && (this.chartService || {}).rtl\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 rtl: !options.invertAxes && (this.chartService || {}).rtl\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 Bubble.prototype.defaults.highlight.zIndex = undefined;\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 rtl: !options.invertAxes && (this.chartService || {}).rtl\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 if (point.unclipElements) {\n point.unclipElements();\n } else {\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 },\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 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 function equalsIgnoreCase(a, b) {\n if (a && b) {\n return a.toLowerCase() === b.toLowerCase();\n }\n return a === b;\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 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 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 singleItemOrArray(array) {\n return array.length === 1 ? array[0] : array;\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.originalOptions = options;\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: hasValue(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 (hasValue(text) && 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 RangeLinePoint = LinePoint.extend({\n aliasFor: function () {\n return this.parent;\n }\n });\n var AUTO = 'auto';\n var DEFAULT_FROM_FORMAT = '{0}';\n var DEFAULT_TO_FORMAT = '{1}';\n var RangeAreaPoint = 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 this.initLabelsFormat();\n },\n render: function () {\n if (this._rendered) {\n return;\n }\n this._rendered = true;\n var ref = this.options;\n var markers = ref.markers;\n var labels = ref.labels;\n var value = this.value;\n var fromPoint = this.fromPoint = new RangeLinePoint(value, deepExtend({}, this.options, {\n labels: labels.from,\n markers: markers.from\n }));\n var toPoint = this.toPoint = new RangeLinePoint(value, deepExtend({}, this.options, {\n labels: labels.to,\n markers: markers.to\n }));\n this.copyFields(fromPoint);\n this.copyFields(toPoint);\n this.append(fromPoint);\n this.append(toPoint);\n },\n reflow: function (targetBox) {\n this.render();\n var fromBox = targetBox.from;\n var toBox = targetBox.to;\n this.positionLabels(fromBox, toBox);\n this.fromPoint.reflow(fromBox);\n this.toPoint.reflow(toBox);\n this.box = this.fromPoint.markerBox().clone().wrap(this.toPoint.markerBox());\n },\n createHighlight: function () {\n var group = new Group();\n group.append(this.fromPoint.createHighlight());\n group.append(this.toPoint.createHighlight());\n return group;\n },\n highlightVisual: function () {\n return this.visual;\n },\n highlightVisualArgs: function () {\n return {\n options: this.options,\n from: this.fromPoint.highlightVisualArgs(),\n to: this.toPoint.highlightVisualArgs()\n };\n },\n tooltipAnchor: function () {\n var clipBox = this.owner.pane.clipBox();\n var showTooltip = !clipBox || clipBox.overlaps(this.box);\n if (showTooltip) {\n var box = this.box;\n var center = box.center();\n var horizontalAlign = LEFT;\n var x, y, verticalAlign;\n if (this.options.vertical) {\n x = center.x;\n y = box.y1 - TOOLTIP_OFFSET;\n verticalAlign = BOTTOM;\n } else {\n x = box.x2 + TOOLTIP_OFFSET;\n y = center.y;\n verticalAlign = CENTER;\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 return this.box.overlaps(box);\n },\n unclipElements: function () {\n this.fromPoint.unclipElements();\n this.toPoint.unclipElements();\n },\n initLabelsFormat: function () {\n var labels = this.options.labels;\n if (!labels.format) {\n if (!labels.from || !labels.from.format) {\n labels.from = $.extend({}, labels.from, { format: DEFAULT_FROM_FORMAT });\n }\n if (!labels.to || !labels.to.format) {\n labels.to = $.extend({}, labels.to, { format: DEFAULT_TO_FORMAT });\n }\n }\n },\n positionLabels: function (fromBox, toBox) {\n var ref = this.options;\n var labels = ref.labels;\n var vertical = ref.vertical;\n if (labels.position === AUTO) {\n var fromLabelPosition, toLabelPosition;\n if (vertical) {\n if (toBox.y1 <= fromBox.y1) {\n toLabelPosition = ABOVE;\n fromLabelPosition = BELOW;\n } else {\n toLabelPosition = BELOW;\n fromLabelPosition = ABOVE;\n }\n } else {\n if (toBox.x1 <= fromBox.x1) {\n toLabelPosition = LEFT;\n fromLabelPosition = RIGHT;\n } else {\n toLabelPosition = RIGHT;\n fromLabelPosition = LEFT;\n }\n }\n if (!labels.from || !labels.from.position) {\n this.fromPoint.options.labels.position = fromLabelPosition;\n }\n if (!labels.to || !labels.to.position) {\n this.toPoint.options.labels.position = toLabelPosition;\n }\n }\n },\n copyFields: function (point) {\n point.dataItem = this.dataItem;\n point.category = this.category;\n point.series = this.series;\n point.color = this.color;\n point.owner = this.owner;\n }\n });\n deepExtend(RangeAreaPoint.prototype, PointEventsMixin);\n deepExtend(RangeAreaPoint.prototype, NoteMixin);\n RangeAreaPoint.prototype.defaults = {\n markers: {\n visible: false,\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 margin: getSpacing(3),\n padding: getSpacing(4),\n animation: {\n type: FADEIN,\n delay: INITIAL_ANIMATION_DURATION\n },\n position: AUTO\n },\n notes: { label: {} },\n highlight: {\n markers: {\n border: {\n color: WHITE,\n width: 2\n }\n },\n zIndex: datavizConstants.HIGHLIGHT_ZINDEX\n },\n tooltip: { format: '{0} - {1}' }\n };\n var RangeAreaSegment = AreaSegment.extend({\n createStrokeSegments: function () {\n return this.segmentsFromPoints(this.toGeometryPoints(this.toPoints()));\n },\n stackSegments: function () {\n var fromSegments = this.fromSegments;\n if (!this.fromSegments) {\n fromSegments = this.fromSegments = this.segmentsFromPoints(this.toGeometryPoints(this.fromPoints().reverse()));\n }\n return fromSegments;\n },\n createStroke: function (style) {\n var toPath = new Path(style);\n var fromPath = new Path(style);\n toPath.segments.push.apply(toPath.segments, this.strokeSegments());\n fromPath.segments.push.apply(fromPath.segments, this.stackSegments());\n this.visual.append(toPath);\n this.visual.append(fromPath);\n },\n hasStackSegment: function () {\n return true;\n },\n fromPoints: function () {\n return this.linePoints.map(function (point) {\n return point.fromPoint;\n });\n },\n toPoints: function () {\n return this.linePoints.map(function (point) {\n return point.toPoint;\n });\n }\n });\n var SplineRangeAreaSegment = RangeAreaSegment.extend({\n createStrokeSegments: function () {\n return this.createCurveSegments(this.toPoints());\n },\n stackSegments: function () {\n var fromSegments = this.fromSegments;\n if (!this.fromSegments) {\n fromSegments = this.fromSegments = this.createCurveSegments(this.fromPoints().reverse());\n }\n return fromSegments;\n },\n createCurveSegments: function (points) {\n var curveProcessor = new CurveProcessor();\n return curveProcessor.process(this.toGeometryPoints(points));\n }\n });\n var StepRangeAreaSegment = RangeAreaSegment.extend({\n createStrokeSegments: function () {\n return this.segmentsFromPoints(this.calculateStepPoints(this.toPoints()));\n },\n stackSegments: function () {\n var fromSegments = this.fromSegments;\n if (!this.fromSegments) {\n fromSegments = this.fromSegments = this.segmentsFromPoints(this.calculateStepPoints(this.fromPoints()));\n fromSegments.reverse();\n }\n return fromSegments;\n }\n });\n deepExtend(StepRangeAreaSegment.prototype, StepLineMixin);\n var RangeAreaChart = CategoricalChart.extend({\n render: function () {\n CategoricalChart.fn.render.call(this);\n this.renderSegments();\n },\n pointType: function () {\n return RangeAreaPoint;\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 value = data.valueFields;\n if (!hasValue(value.from) && !hasValue(value.to)) {\n if (this.seriesMissingValues(series) === ZERO) {\n value = {\n from: 0,\n to: 0\n };\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 RangeAreaPoint(value, pointOptions);\n point.color = color;\n this.append(point);\n return point;\n },\n createSegment: function (linePoints, currentSeries, seriesIx) {\n var style = (currentSeries.line || {}).style;\n var segmentType;\n if (style === 'smooth') {\n segmentType = SplineRangeAreaSegment;\n } else if (style === 'step') {\n segmentType = StepRangeAreaSegment;\n } else {\n segmentType = RangeAreaSegment;\n }\n return new segmentType(linePoints, currentSeries, seriesIx);\n },\n plotRange: function (point, startValue) {\n if (!point) {\n return [\n startValue,\n startValue\n ];\n }\n return [\n point.value.from,\n point.value.to\n ];\n },\n valueSlot: function (valueAxis, plotRange) {\n var fromSlot = valueAxis.getSlot(plotRange[0], plotRange[0], !this.options.clip);\n var toSlot = valueAxis.getSlot(plotRange[1], plotRange[1], !this.options.clip);\n if (fromSlot && toSlot) {\n return {\n from: fromSlot,\n to: toSlot\n };\n }\n },\n pointSlot: function (categorySlot, valueSlot) {\n var from = valueSlot.from;\n var to = valueSlot.to;\n var fromSlot, toSlot;\n if (this.options.invertAxes) {\n fromSlot = new Box(from.x1, categorySlot.y1, from.x2, categorySlot.y2);\n toSlot = new Box(to.x1, categorySlot.y1, to.x2, categorySlot.y2);\n } else {\n fromSlot = new Box(categorySlot.x1, from.y1, categorySlot.x2, from.y2);\n toSlot = new Box(categorySlot.x1, to.y1, categorySlot.x2, to.y2);\n }\n return {\n from: fromSlot,\n to: toSlot\n };\n },\n addValue: function (data, fields) {\n var valueFields = data.valueFields;\n if (!isNumber(valueFields.from)) {\n valueFields.from = valueFields.to;\n }\n if (!isNumber(valueFields.to)) {\n valueFields.to = valueFields.from;\n }\n CategoricalChart.fn.addValue.call(this, data, fields);\n },\n updateRange: function (value, fields) {\n if (value !== null && isNumber(value.from) && isNumber(value.to)) {\n var axisName = fields.series.axis;\n var axisRange = this.valueAxisRanges[axisName] = this.valueAxisRanges[axisName] || {\n min: MAX_VALUE,\n max: MIN_VALUE\n };\n var from = value.from;\n var to = value.to;\n axisRange.min = Math.min(axisRange.min, from, to);\n axisRange.max = Math.max(axisRange.max, from, to);\n }\n },\n formatPointValue: function (point, format) {\n var value = point.value;\n return this.chartService.format.auto(format, value.from, value.to);\n },\n animationPoints: function () {\n var points = this.points;\n var result = [];\n for (var idx = 0; idx < points.length; idx++) {\n var point = points[idx];\n if (point) {\n result.push((point.fromPoint || {}).marker);\n result.push((point.toPoint || {}).marker);\n }\n }\n return result.concat(this._segments);\n }\n });\n deepExtend(RangeAreaChart.prototype, LineChartMixin, ClipAnimationMixin);\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 appendIfNotNull(array, element) {\n if (element !== null) {\n array.push(element);\n }\n }\n var AREA_SERIES = [\n AREA,\n VERTICAL_AREA,\n RANGE_AREA,\n VERTICAL_RANGE_AREA\n ];\n var OUT_OF_RANGE_SERIES = [\n LINE,\n VERTICAL_LINE\n ].concat(AREA_SERIES);\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 VERTICAL_RANGE_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.createRangeAreaChart(filterSeriesByType(series, [\n RANGE_AREA,\n VERTICAL_RANGE_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, OUT_OF_RANGE_SERIES);\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, OUT_OF_RANGE_SERIES);\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 createRangeAreaChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var rangeAreaChart = new RangeAreaChart(this, {\n invertAxes: this.invertAxes,\n series: series,\n clip: pane.options.clip\n });\n this.appendChart(rangeAreaChart, 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 (inArray(currentSeries.type, AREA_SERIES)) {\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 reverse: !invertAxes && this$1.chartService.rtl,\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, AREA_SERIES)) {\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 = {\n vertical: !invertAxes,\n reverse: invertAxes && this.chartService.rtl\n };\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 updateAxisOptions(this.options, axis, options);\n updateAxisOptions(this.originalOptions, axis, options);\n }\n });\n function updateAxisOptions(targetOptions, axis, options) {\n var axesOptions = axis instanceof CategoryAxis ? [].concat(targetOptions.categoryAxis) : [].concat(targetOptions.valueAxis);\n deepExtend(axesOptions[axis.axisIndex], options);\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 reverse: options.rtl,\n alignItems: vertical ? 'start' : 'center'\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 if (!options.rtl) {\n this.createMarker();\n this.createLabel();\n } else {\n this.createLabel();\n this.createMarker();\n }\n },\n createContainer: function () {\n this.container = new dataviz.FloatElement({\n vertical: false,\n wrap: false,\n align: CENTER,\n spacing: this.options.spacing\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 if (chartService === void 0) {\n chartService = {};\n }\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 rtl: chartService.rtl\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 rtl: chartService.rtl\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 offsetX: 0,\n offsetY: 0,\n margin: getSpacing(5),\n padding: getSpacing(5),\n border: {\n color: BLACK,\n width: 0\n },\n item: {\n cursor: POINTER,\n spacing: 6\n },\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({ reverse: !vertical && this.chartService.rtl }, 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 updateAxisOptions$1(this.options, index, vertical, options);\n updateAxisOptions$1(this.originalOptions, index, vertical, options);\n }\n });\n function updateAxisOptions$1(targetOptions, axisIndex, vertical, options) {\n var axisOptions = [].concat(vertical ? targetOptions.yAxis : targetOptions.xAxis)[axisIndex];\n deepExtend(axisOptions, options);\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 (hasValue(text) && 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 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: defined(fields.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 fillToAxes: 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 CurveProcessor(false);\n var linePoints = this.points();\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 fillToAxes: function (fillPath) {\n var polarAxis = this.parent.plotArea.polarAxis;\n var center = polarAxis.box.center();\n var centerSegment = new geometry.Segment([\n center.x,\n center.y\n ]);\n fillPath.segments.unshift(centerSegment);\n fillPath.segments.push(centerSegment);\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, 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, {\n clip: false,\n limitPoints: false\n });\n var SplineRadarAreaSegment = SplineAreaSegment.extend({\n fillToAxes: function () {\n }\n });\n var RadarAreaSegment = AreaSegment.extend({\n fillToAxes: function () {\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 previousSegment;\n var stackPoints;\n var segment;\n if (isStacked && seriesIx > 0 && prevSegment) {\n stackPoints = prevSegment.linePoints.slice(0);\n previousSegment = prevSegment;\n }\n if (style === SMOOTH) {\n segment = new SplineRadarAreaSegment(linePoints, currentSeries, seriesIx, previousSegment, stackPoints);\n segment.options.closed = true;\n } else {\n linePoints.push(linePoints[0]);\n segment = new RadarAreaSegment(linePoints, currentSeries, seriesIx, previousSegment, stackPoints);\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 init: function (options) {\n ChartElement.fn.init.call(this, options);\n this.forEach = options.rtl ? forEachReverse : forEach;\n },\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 this.forEach(children, function (child) {\n var slotSector = sector.clone();\n slotSector.startAngle = angle;\n slotSector.angle = slotAngle;\n if (child.sector) {\n slotSector.radius = child.sector.radius;\n }\n child.reflow(slotSector);\n child.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 limitPoints: 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 RANGE_AREA,\n VERTICAL_RANGE_AREA\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 RANGE_AREA,\n VERTICAL_RANGE_AREA\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 RANGE_AREA,\n VERTICAL_RANGE_AREA\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 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(panes[idx]);\n }\n }\n },\n findPaneByIndex: function (idx) {\n var panes = this._plotArea.panes;\n if (panes[idx]) {\n return new ChartPane(panes[idx]);\n }\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 (exportOptions) {\n var visual;\n if (exportOptions && (exportOptions.width || exportOptions.height || exportOptions.options)) {\n var currentOptions = this.options;\n var options = deepExtend({}, exportOptions.options, {\n chartArea: {\n width: exportOptions.width,\n height: exportOptions.height\n }\n });\n clearMissingValues(this._originalOptions, options);\n this.options = deepExtend({}, this._originalOptions, options);\n this._initTheme(this.options, this._theme);\n this.bindCategories();\n var model = this._getModel();\n model.renderVisual();\n visual = model.visual;\n this.options = currentOptions;\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 _toggleDomDrag: function () {\n if (!this.domEvents || !this.domEvents.toggleDrag) {\n return;\n }\n var pannable = this.options.pannable;\n var zoomable = this.options.zoomable;\n var selection = (zoomable || {}).selection;\n if (!pannable && (zoomable === false || selection === false) && !this.requiresHandlers([\n DRAG_START,\n DRAG,\n DRAG_END\n ])) {\n this.domEvents.toggleDrag(false);\n } else {\n this.domEvents.toggleDrag(true);\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 _toggleDomZoom: function () {\n if (!this.domEvents || !this.domEvents.toggleZoom) {\n return;\n }\n var zoomable = this.options.zoomable;\n var mousewheel = (zoomable || {}).mousewheel;\n if ((zoomable === false || mousewheel === false) && !this.requiresHandlers([\n ZOOM_START,\n ZOOM,\n ZOOM_END\n ])) {\n this.domEvents.toggleZoom(false);\n } else {\n this.domEvents.toggleZoom(true);\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 this._toggleDomDrag();\n this._toggleDomZoom();\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 if (chartElement && chartElement.aliasFor) {\n chartElement = chartElement.aliasFor();\n }\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 this._toggleDomDrag();\n this._toggleDomZoom();\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 RangeAreaPoint: RangeAreaPoint,\n RangeAreaChart: RangeAreaChart,\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 ChartPane: ChartPane,\n ChartPlotArea: ChartPlotArea,\n anyHasZIndex: anyHasZIndex,\n appendIfNotNull: areNumbers,\n areNumbers: areNumbers,\n bindSegments: bindSegments,\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 var RTL = 'rtl';\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 rtl: this._isRtl()\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 point = currentSeries.data[pointIndex];\n if (point && defined(point.visible)) {\n point.visible = !point.visible;\n } else {\n var pointVisibility = currentSeries.pointVisibility = currentSeries.pointVisibility || {};\n var visible = pointVisibility[pointIndex];\n pointVisibility[pointIndex] = defined(visible) ? !visible : false;\n }\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, extend({}, this.options.tooltip, { rtl: this._isRtl() }));\n },\n _tooltipleave: function () {\n if (this._instance) {\n this._instance.hideElements();\n }\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 _isRtl: function () {\n return kendo.support.isRtl(this.element) && this.element.css('direction') === RTL;\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 function normalizeStyle(style) {\n for (var field in style) {\n if (style[field] === undefined) {\n style[field] = '';\n }\n }\n return style;\n }\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(normalizeStyle(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 }\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 if (options && defined(options.value)) {\n that.redraw();\n }\n },\n setOptions: function (options) {\n this._setOptions(options);\n this.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 _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 },\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 rtl: this._isRtl()\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 extend = $.extend;\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 rtl: this._isRtl()\n });\n },\n _createTooltip: function () {\n return new SparklineTooltip(this.element, extend({}, this.options.tooltip, { rtl: this._isRtl() }));\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 }(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.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 } else if (e.keyCode === keys.HOME) {\n li.parent().find(':kendoFocusable').first().focus();\n } else if (e.keyCode === keys.END) {\n li.parent().find(':kendoFocusable').last().focus();\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 that.overflowAnchor.focus();\n } else if (e.keyCode === keys.HOME) {\n li.parent().find(':kendoFocusable').first().focus();\n } else if (e.keyCode === keys.END) {\n li.parent().find(':kendoFocusable').last().focus();\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'), direction = this._isRtl ? -1 : 1;\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 this._preventNextFocus = false;\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 if (keyCode === keys.HOME) {\n if (target.is('.k-dropdown')) {\n return;\n }\n if (this.overflowAnchor) {\n items.eq(1).focus();\n } else {\n items.first().focus();\n }\n e.preventDefault();\n } else if (keyCode === keys.END) {\n if (target.is('.k-dropdown')) {\n return;\n }\n if (this.overflowAnchor && $(this.overflowAnchor).css('visibility') != 'hidden') {\n this.overflowAnchor.focus();\n } else {\n items.last().focus();\n }\n e.preventDefault();\n } else if (keyCode === keys.RIGHT && !this._preventNextFocus && !target.is('input, select, .k-dropdown, .k-colorpicker') && this._getNextElement(e.target, 1 * direction)) {\n this._getNextElement(e.target, 1 * direction).focus();\n e.preventDefault();\n } else if (keyCode === keys.LEFT && !this._preventNextFocus && !target.is('input, select, .k-dropdown, .k-colorpicker') && this._getNextElement(e.target, -1 * direction)) {\n this._getNextElement(e.target, -1 * direction).focus();\n e.preventDefault();\n }\n },\n _getNextElement: function (item, direction) {\n var items = this.element.children(':not(.k-separator):visible');\n var itemIndex = items.index(item) === -1 ? items.index(item.parentElement) : items.index(item);\n var startIndex = this.overflowAnchor ? 1 : 0;\n var directionNumber = direction;\n var searchIndex = direction === 1 ? items.length - 1 : startIndex;\n var index = direction === 1 ? startIndex : items.length - 1;\n var focusableItem = items[itemIndex + direction];\n this._preventNextFocus = false;\n if ($(item).closest('.' + BUTTON_GROUP).length && !$(item).is(direction === 1 ? ':last-child' : ':first-child')) {\n return $(item).closest('.' + BUTTON_GROUP).children()[$(item).closest('.' + BUTTON_GROUP).children().index(item) + direction];\n }\n if (this.overflowAnchor && item === this.overflowAnchor[0] && direction === -1) {\n focusableItem = items[items.length - 1];\n }\n if (itemIndex === searchIndex) {\n focusableItem = !this.overflowAnchor || this.overflowAnchor && $(this.overflowAnchor).css('visibility') === 'hidden' ? items[index] : this.overflowAnchor;\n }\n while (!$(focusableItem).is(':kendoFocusable')) {\n if (direction === -1 && $(focusableItem).closest('.' + BUTTON_GROUP).length) {\n focusableItem = $(focusableItem).children(':not(label, div)').last();\n } else {\n focusableItem = $(focusableItem).children(':not(label, div)').first();\n }\n if (!focusableItem.length) {\n directionNumber = directionNumber + direction;\n focusableItem = items[itemIndex + directionNumber];\n if (!focusableItem) {\n return this.overflowAnchor;\n }\n }\n this._preventNextFocus = $(focusableItem).closest('.' + BUTTON_GROUP).length ? false : true;\n }\n return focusableItem;\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.selectable', [\n 'kendo.core',\n 'kendo.userevents'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'selectable',\n name: 'Selectable',\n category: 'framework',\n depends: [\n 'core',\n 'userevents'\n ],\n advanced: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, proxy = $.proxy, abs = Math.abs, ARIASELECTED = 'aria-selected', SELECTED = 'k-state-selected', ACTIVE = 'k-state-selecting', SELECTABLE = 'k-selectable', CHANGE = 'change', NS = '.kendoSelectable', UNSELECTING = 'k-state-unselecting', INPUTSELECTOR = 'input,a,textarea,.k-multiselect-wrap,select,button,.k-button>span,.k-button>img,span.k-icon.k-i-arrow-60-down,span.k-icon.k-i-arrow-60-up', msie = kendo.support.browser.msie, supportEventDelegation = false;\n (function ($) {\n (function () {\n $('
        ').on('click', '>*', function () {\n supportEventDelegation = true;\n }).find('span').click().end().off();\n }());\n }($));\n var Selectable = Widget.extend({\n init: function (element, options) {\n var that = this, multiple;\n Widget.fn.init.call(that, element, options);\n that._marquee = $('
        ');\n that._lastActive = null;\n that.element.addClass(SELECTABLE);\n that.relatedTarget = that.options.relatedTarget;\n multiple = that.options.multiple;\n INPUTSELECTOR = that.options.inputSelectors;\n if (this.options.aria && multiple) {\n that.element.attr('aria-multiselectable', true);\n }\n that.userEvents = new kendo.UserEvents(that.element, {\n global: true,\n allowSelection: true,\n filter: (!supportEventDelegation ? '.' + SELECTABLE + ' ' : '') + that.options.filter,\n tap: proxy(that._tap, that),\n touchAction: multiple ? 'none' : 'pan-x pan-y'\n });\n if (multiple) {\n that.userEvents.bind('start', proxy(that._start, that)).bind('move', proxy(that._move, that)).bind('end', proxy(that._end, that)).bind('select', proxy(that._select, that));\n }\n },\n events: [CHANGE],\n options: {\n name: 'Selectable',\n filter: '>*',\n inputSelectors: INPUTSELECTOR,\n multiple: false,\n relatedTarget: $.noop\n },\n _isElement: function (target) {\n var elements = this.element;\n var idx, length = elements.length, result = false;\n target = target[0];\n for (idx = 0; idx < length; idx++) {\n if (elements[idx] === target) {\n result = true;\n break;\n }\n }\n return result;\n },\n _tap: function (e) {\n var target = $(e.target), that = this, ctrlKey = e.event.ctrlKey || e.event.metaKey, multiple = that.options.multiple, shiftKey = multiple && e.event.shiftKey, selected, whichCode = e.event.which, buttonCode = e.event.button;\n if (!that._isElement(target.closest('.' + SELECTABLE)) || whichCode && whichCode == 3 || buttonCode && buttonCode == 2) {\n return;\n }\n if (!this._allowSelection(e.event.target)) {\n return;\n }\n selected = target.hasClass(SELECTED);\n if (!multiple || !ctrlKey) {\n that.clear();\n }\n target = target.add(that.relatedTarget(target));\n if (shiftKey) {\n that.selectRange(that._firstSelectee(), target, e);\n } else {\n if (selected && ctrlKey) {\n that._unselect(target);\n that._notify(CHANGE, e);\n } else {\n that.value(target, e);\n }\n that._lastActive = that._downTarget = target;\n }\n },\n _start: function (e) {\n var that = this, target = $(e.target), selected = target.hasClass(SELECTED), currentElement, ctrlKey = e.event.ctrlKey || e.event.metaKey;\n if (!this._allowSelection(e.event.target)) {\n return;\n }\n that._downTarget = target;\n if (!that._isElement(target.closest('.' + SELECTABLE))) {\n that.userEvents.cancel();\n return;\n }\n if (that.options.useAllItems) {\n that._items = that.element.find(that.options.filter);\n } else {\n currentElement = target.closest(that.element);\n that._items = currentElement.find(that.options.filter);\n }\n e.sender.capture();\n that._marquee.appendTo(document.body).css({\n left: e.x.client + 1,\n top: e.y.client + 1,\n width: 0,\n height: 0\n });\n if (!ctrlKey) {\n that.clear();\n }\n target = target.add(that.relatedTarget(target));\n if (selected) {\n that._selectElement(target, true);\n if (ctrlKey) {\n target.addClass(UNSELECTING);\n }\n }\n },\n _move: function (e) {\n var that = this, position = {\n left: e.x.startLocation > e.x.location ? e.x.location : e.x.startLocation,\n top: e.y.startLocation > e.y.location ? e.y.location : e.y.startLocation,\n width: abs(e.x.initialDelta),\n height: abs(e.y.initialDelta)\n };\n that._marquee.css(position);\n that._invalidateSelectables(position, e.event.ctrlKey || e.event.metaKey);\n e.preventDefault();\n },\n _end: function (e) {\n var that = this;\n that._marquee.remove();\n that._unselect(that.element.find(that.options.filter + '.' + UNSELECTING)).removeClass(UNSELECTING);\n var target = that.element.find(that.options.filter + '.' + ACTIVE);\n target = target.add(that.relatedTarget(target));\n that.value(target, e);\n that._lastActive = that._downTarget;\n that._items = null;\n },\n _invalidateSelectables: function (position, ctrlKey) {\n var idx, length, target = this._downTarget[0], items = this._items, related, toSelect;\n for (idx = 0, length = items.length; idx < length; idx++) {\n toSelect = items.eq(idx);\n related = toSelect.add(this.relatedTarget(toSelect));\n if (collision(toSelect, position)) {\n if (toSelect.hasClass(SELECTED)) {\n if (ctrlKey && target !== toSelect[0]) {\n related.removeClass(SELECTED).addClass(UNSELECTING);\n }\n } else if (!toSelect.hasClass(ACTIVE) && !toSelect.hasClass(UNSELECTING)) {\n related.addClass(ACTIVE);\n }\n } else {\n if (toSelect.hasClass(ACTIVE)) {\n related.removeClass(ACTIVE);\n } else if (ctrlKey && toSelect.hasClass(UNSELECTING)) {\n related.removeClass(UNSELECTING).addClass(SELECTED);\n }\n }\n }\n },\n value: function (val, e) {\n var that = this, selectElement = proxy(that._selectElement, that);\n if (val) {\n val.each(function () {\n selectElement(this);\n });\n that._notify(CHANGE, e);\n return;\n }\n return that.element.find(that.options.filter + '.' + SELECTED);\n },\n _firstSelectee: function () {\n var that = this, selected;\n if (that._lastActive !== null) {\n return that._lastActive;\n }\n selected = that.value();\n return selected.length > 0 ? selected[0] : that.element.find(that.options.filter)[0];\n },\n _selectElement: function (element, preventNotify) {\n var toSelect = $(element), isPrevented = !preventNotify && this._notify('select', { element: element });\n toSelect.removeClass(ACTIVE);\n if (!isPrevented) {\n toSelect.addClass(SELECTED);\n if (this.options.aria) {\n toSelect.attr(ARIASELECTED, true);\n }\n }\n },\n _notify: function (name, args) {\n args = args || {};\n return this.trigger(name, args);\n },\n _unselect: function (element) {\n element.removeClass(SELECTED);\n if (this.options.aria) {\n element.attr(ARIASELECTED, false);\n }\n return element;\n },\n _select: function (e) {\n if (this._allowSelection(e.event.target)) {\n if (!msie || msie && !$(kendo._activeElement()).is(INPUTSELECTOR)) {\n e.preventDefault();\n }\n }\n },\n _allowSelection: function (target) {\n if ($(target).is(INPUTSELECTOR)) {\n this.userEvents.cancel();\n this._downTarget = null;\n return false;\n }\n return true;\n },\n resetTouchEvents: function () {\n this.userEvents.cancel();\n },\n clear: function () {\n var items = this.element.find(this.options.filter + '.' + SELECTED);\n this._unselect(items);\n },\n selectRange: function (start, end, e) {\n var that = this, idx, tmp, items;\n that.clear();\n if (that.element.length > 1) {\n items = that.options.continuousItems();\n }\n if (!items || !items.length) {\n items = that.element.find(that.options.filter);\n }\n start = $.inArray($(start)[0], items);\n end = $.inArray($(end)[0], items);\n if (start > end) {\n tmp = start;\n start = end;\n end = tmp;\n }\n if (!that.options.useAllItems) {\n end += that.element.length - 1;\n }\n for (idx = start; idx <= end; idx++) {\n that._selectElement(items[idx]);\n }\n that._notify(CHANGE, e);\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n that.element.off(NS);\n that.userEvents.destroy();\n that._marquee = that._lastActive = that.element = that.userEvents = null;\n }\n });\n Selectable.parseOptions = function (selectable) {\n var asLowerString = typeof selectable === 'string' && selectable.toLowerCase();\n return {\n multiple: asLowerString && asLowerString.indexOf('multiple') > -1,\n cell: asLowerString && asLowerString.indexOf('cell') > -1\n };\n };\n function collision(element, position) {\n if (!element.is(':visible')) {\n return false;\n }\n var elementPosition = kendo.getOffset(element), right = position.left + position.width, bottom = position.top + position.height;\n elementPosition.right = elementPosition.left + kendo._outerWidth(element);\n elementPosition.bottom = elementPosition.top + kendo._outerHeight(element);\n return !(elementPosition.left > right || elementPosition.right < position.left || elementPosition.top > bottom || elementPosition.bottom < position.top);\n }\n kendo.ui.plugin(Selectable);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.calendar', [\n 'kendo.core',\n 'kendo.selectable'\n ], 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: [\n 'core',\n 'selectable'\n ]\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, weekInYear = kendo.date.weekInYear, Selectable = kendo.ui.Selectable, 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)', CELLSELECTORVALID = 'td:has(.k-link):not(.' + DISABLED + ')', WEEKCOLUMNSELECTOR = 'td:not(:has(.k-link))', SELECTED = 'k-state-selected', 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._selectable();\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 if (that._view.name != 'month' || options.selectable == 'single') {\n that._click($(link));\n }\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 if (that._isMultipleSelection() && that.options.weekNumber) {\n element.on(CLICK, WEEKCOLUMNSELECTOR, function (e) {\n var first = $(e.currentTarget).closest('tr').find(CELLSELECTORVALID).first(), last = that.selectable._lastActive = $(e.currentTarget).closest('tr').find(CELLSELECTORVALID).last();\n that.selectable.selectRange(first, last, { event: e });\n that._current = that._value = that._toDateObject(last.find('a'));\n that._class(FOCUSED, that._current);\n });\n }\n normalize(options);\n value = parse(options.value, options.format, options.culture);\n that._selectDates = [];\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 if (that._isMultipleSelection() && options.selectDates.length > 0) {\n that.selectDates(options.selectDates);\n }\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 disableDates: null,\n url: '',\n culture: '',\n footer: '',\n format: '',\n month: {},\n weekNumber: false,\n selectable: 'single',\n selectDates: [],\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._selectable();\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 that._destroySelectable();\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, 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 if (that[PREVARROW].hasClass(DISABLED)) {\n that[PREVARROW].removeClass(HOVER);\n }\n disabled = compare(value, max) > -1;\n that[NEXTARROW].toggleClass(DISABLED, disabled).attr(ARIA_DISABLED, disabled);\n if (that[NEXTARROW].hasClass(DISABLED)) {\n that[NEXTARROW].removeClass(HOVER);\n }\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] && that._selectDates.length > 0) {\n that._visualizeSelectedDatesInView();\n }\n if (that.options.selectable === 'single') {\n if (view === views[options.depth] && that._value && !that.options.disableDates(that._value)) {\n that._class('k-state-selected', that._value);\n }\n }\n that._class(FOCUSED, value);\n if (!from && that._cell) {\n that._cell.removeClass(FOCUSED);\n }\n that._changeView = true;\n },\n selectDates: function (dates) {\n var that = this, validSelectedDates, datesUnique;\n if (dates === undefined) {\n return that._selectDates;\n }\n datesUnique = dates.map(function (date) {\n return date.getTime();\n }).filter(function (date, position, array) {\n return array.indexOf(date) === position;\n }).map(function (time) {\n return new Date(time);\n });\n validSelectedDates = $.grep(datesUnique, function (value) {\n if (value) {\n return +that._validateValue(new Date(value.setHours(0, 0, 0, 0))) === +value;\n }\n });\n that._selectDates = validSelectedDates.length > 0 ? validSelectedDates : that._selectDates;\n that._visualizeSelectedDatesInView();\n },\n value: function (value) {\n var that = this, old = that._view, view = that._view;\n if (value === undefined) {\n return that._value;\n }\n value = that._validateValue(value);\n if (value && that._isMultipleSelection()) {\n var date = new Date(+value);\n date.setHours(0, 0, 0, 0);\n that._selectDates = [date];\n that.selectable._lastActive = null;\n }\n if (old && value === null && that._cell) {\n that._cell.removeClass(SELECTED);\n } else {\n that._changeView = !value || view && view.compare(value, that._current) !== 0;\n that.navigate(value);\n }\n },\n _validateValue: function (value) {\n var that = this, options = that.options, min = options.min, max = options.max;\n if (value === null) {\n that._current = createDate(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(new Date(+value))) {\n that._value = value;\n } else if (that._value === undefined) {\n that._value = null;\n }\n return that._value;\n },\n _visualizeSelectedDatesInView: function () {\n var that = this;\n var selectedDates = {};\n $.each(that._selectDates, function (index, value) {\n selectedDates[kendo.calendar.views[0].toDateString(value)] = value;\n });\n that.selectable.clear();\n var cells = that._table.find(CELLSELECTOR).filter(function (index, element) {\n return selectedDates[$(element.firstChild).attr(kendo.attr(VALUE))];\n });\n if (cells.length > 0) {\n that.selectable._selectElement(cells, true);\n }\n },\n _isMultipleSelection: function () {\n var that = this;\n return that.options.selectable === 'multiple';\n },\n _selectable: function () {\n var that = this;\n if (!that._isMultipleSelection()) {\n return;\n }\n var selectable = that.options.selectable, selectableOptions = Selectable.parseOptions(selectable);\n if (selectableOptions.multiple) {\n that.element.attr('aria-multiselectable', 'true');\n }\n that.selectable = new Selectable(that.wrapper, {\n aria: true,\n inputSelectors: 'input,textarea,.k-multiselect-wrap,select,button,.k-button>span,.k-button>img,span.k-icon.k-i-arrow-60-down,span.k-icon.k-i-arrow-60-up',\n multiple: selectableOptions.multiple,\n filter: 'table.k-month:eq(0) ' + CELLSELECTORVALID,\n change: proxy(that._onSelect, that),\n relatedTarget: proxy(that._onRelatedTarget, that)\n });\n },\n _onRelatedTarget: function (target) {\n var that = this;\n if (that.selectable.options.multiple && target.is(CELLSELECTORVALID)) {\n that._current = that._toDateObject(target.find('a'));\n that._class(FOCUSED, that._toDateObject(target.find('a')));\n }\n },\n _onSelect: function (e) {\n var that = this, eventArgs = e, selectableOptions = Selectable.parseOptions(that.options.selectable);\n if (!selectableOptions.multiple) {\n if ($(eventArgs.event.currentTarget).is('td') && !$(eventArgs.event.currentTarget).hasClass('k-state-selected')) {\n $(eventArgs.event.currentTarget).addClass('k-state-selected');\n } else {\n that._click($(eventArgs.event.currentTarget).find('a'));\n }\n return;\n }\n if (eventArgs.event.ctrlKey) {\n if ($(eventArgs.event.currentTarget).is(CELLSELECTORVALID)) {\n that._toggleSelection($(eventArgs.event.currentTarget));\n } else {\n that._cellsBySelector(CELLSELECTORVALID).each(function (index, element) {\n var value = that._toDateObject($(element).find('a'));\n that._deselect(value);\n });\n that._addSelectedCellsToArray();\n }\n } else if (eventArgs.event.shiftKey) {\n that._rangeSelection(that._cell);\n } else if ($(eventArgs.event.currentTarget).is(CELLSELECTOR)) {\n that.value(that._toDateObject($(eventArgs.event.currentTarget).find('a')));\n } else {\n that._selectDates = [];\n that._addSelectedCellsToArray();\n }\n that.trigger(CHANGE);\n },\n _destroySelectable: function () {\n var that = this;\n if (that.selectable) {\n that.selectable.destroy();\n that.selectable = null;\n }\n },\n _toggleSelection: function (currentCell) {\n var that = this, date = that._toDateObject(currentCell.find('a'));\n if (currentCell.hasClass('k-state-selected')) {\n that._selectDates.push(date);\n } else {\n that._deselect(date);\n }\n },\n _rangeSelection: function (toDateCell, startDate) {\n var that = this, fromDate = startDate || that._toDateObject(that.selectable.value().first().find('a')), toDate = that._toDateObject(toDateCell.find('a')), daysDifference;\n if (that.selectable._lastActive || that._value) {\n fromDate = that.selectable._lastActive ? that._toDateObject(that.selectable._lastActive.find('a')) : new Date(+that._value);\n } else {\n that.selectable._lastActive = startDate ? that._cellByDate(that._view.toDateString(startDate), CELLSELECTORVALID) : that.selectable.value().first();\n }\n that._selectDates = [];\n daysDifference = daysBetweenTwoDates(fromDate, toDate);\n addDaysToArray(that._selectDates, daysDifference, fromDate, that.options.disableDates);\n that._visualizeSelectedDatesInView();\n },\n _cellsBySelector: function (selector) {\n var that = this;\n return that._table.find(selector);\n },\n _addSelectedCellsToArray: function () {\n var that = this;\n that.selectable.value().each(function (index, item) {\n var date = that._toDateObject($(item.firstChild));\n if (!that.options.disableDates(date)) {\n that._selectDates.push(date);\n }\n });\n },\n _deselect: function (date) {\n var that = this;\n var currentDateIndex = that._selectDates.map(Number).indexOf(+date);\n if (currentDateIndex != -1) {\n that._selectDates.splice(currentDateIndex, 1);\n }\n },\n _dateInView: function (date) {\n var that = this, firstDateInView = that._toDateObject(that._cellsBySelector(CELLSELECTOR + ':first').find('a')), lastDateInView = that._toDateObject(that._cellsBySelector(CELLSELECTOR + ':last').find('a'));\n return +date <= +lastDateInView && +date >= +firstDateInView;\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 (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.SPACEBAR) {\n value = 0;\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 currentValue.setFullYear(temp.getFullYear());\n prevent = 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 } else if ((key == keys.ENTER || key == keys.SPACEBAR) && that._isMultipleSelection()) {\n that._keyboardToggleSelection(e);\n var focusedDate = that._toDateObject($(that._cell[0]).find('a'));\n that._class(FOCUSED, focusedDate);\n }\n } else if (e.shiftKey) {\n if (value !== undefined || method) {\n if (!method) {\n view.setDate(currentValue, value);\n }\n if (isDisabled(currentValue)) {\n currentValue = that._nextNavigatable(currentValue, value);\n }\n min = createDate(min.getFullYear(), min.getMonth(), min.getDate());\n if (isInRange(currentValue, min, max)) {\n if (that._isMultipleSelection()) {\n that._keyboardRangeSelection(e, currentValue);\n } else {\n that._focus(restrictValue(currentValue, options.min, options.max));\n }\n }\n }\n } else {\n if (key == keys.ENTER || key == keys.SPACEBAR) {\n if (view.name == 'month' && that._isMultipleSelection()) {\n that.value(that._toDateObject($(that._cell.find('a'))));\n that.selectable._lastActive = $(that._cell[0]);\n that.trigger(CHANGE);\n } else {\n that._click($(that._cell[0].firstChild));\n }\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 = createDate(min.getFullYear(), min.getMonth(), min.getDate());\n if (isInRange(currentValue, min, max)) {\n if (that._isMultipleSelection()) {\n if (!that._dateInView(currentValue)) {\n that.navigate(currentValue);\n } else {\n that._current = currentValue;\n that._class(FOCUSED, currentValue);\n }\n } else {\n that._focus(restrictValue(currentValue, options.min, options.max));\n }\n }\n }\n }\n if (prevent) {\n e.preventDefault();\n }\n return that._current;\n },\n _keyboardRangeSelection: function (event, currentValue) {\n var that = this, fromDate, daysDifference;\n if (!that._dateInView(currentValue)) {\n that._selectDates = [];\n fromDate = that.selectable._lastActive ? that._toDateObject(that.selectable._lastActive.find('a')) : currentValue;\n daysDifference = daysBetweenTwoDates(fromDate, new Date(+currentValue));\n addDaysToArray(that._selectDates, daysDifference, fromDate, that.options.disableDates);\n that.navigate(currentValue);\n that._current = currentValue;\n that.selectable._lastActive = that.selectable._lastActive || that._cellByDate(that._view.toDateString(currentValue), CELLSELECTORVALID);\n that.trigger(CHANGE);\n return;\n }\n that.selectable.options.filter = that.wrapper.find('table').length > 1 && +currentValue > +that._current ? 'table.k-month:eq(1) ' + CELLSELECTORVALID : 'table.k-month:eq(0) ' + CELLSELECTORVALID;\n that._class(FOCUSED, currentValue);\n that._current = currentValue;\n that._rangeSelection(that._cellByDate(that._view.toDateString(currentValue), CELLSELECTORVALID), currentValue);\n that.trigger(CHANGE);\n that.selectable.options.filter = 'table.k-month:eq(0) ' + CELLSELECTORVALID;\n },\n _keyboardToggleSelection: function (event) {\n var that = this;\n event.currentTarget = that._cell[0];\n that.selectable._lastActive = $(that._cell[0]);\n if ($(that._cell[0]).hasClass(SELECTED)) {\n that.selectable._unselect($(that._cell[0]));\n that.selectable.trigger(CHANGE, { event: event });\n } else {\n that.selectable.value($(that._cell[0]), { event: event });\n }\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, selector) {\n return this._table.find(selector ? selector : '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 that._cellsBySelector(that._isMultipleSelection() ? CELLSELECTOR : 'td:not(.' + OTHERMONTH + ')').removeClass(className);\n cell = that._cellByDate(value, that.options.selectable == 'multiple' ? CELLSELECTOR : 'td:not(.' + OTHERMONTH + ')').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 if (that._isMultipleSelection()) {\n var firstDayCurrentMonth = that._table.find('td:not(.k-other-month)').has('.k-link').first();\n currentValue = that._toDateObject(firstDayCurrentMonth.find('a'));\n that._current = new Date(+currentValue);\n }\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 if (that._isMultipleSelection()) {\n that._selectDates = [today];\n that.selectable._lastActive = null;\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 = createDate(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 createDate(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(), 1, date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n firstVisibleDay.setFullYear(date.getFullYear());\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 = getToday(), html = '';\n if (isWeekColumnVisible) {\n html += '';\n }\n for (; idx < 7; idx++) {\n html += '';\n }\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: createDate(min.getFullYear(), min.getMonth(), min.getDate()),\n max: createDate(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 = createDate(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: createDate(min.getFullYear(), min.getMonth(), 1),\n max: createDate(max.getFullYear(), max.getMonth(), 1),\n start: createDate(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 createDate(date.getFullYear(), 0, date.getDate());\n },\n last: function (date) {\n return createDate(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: createDate(year - year % 10 - 1, 0, 1),\n min: createDate(options.min.getFullYear(), 0, 1),\n max: createDate(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 createDate(year - year % 10, date.getMonth(), date.getDate());\n },\n last: function (date) {\n var year = date.getFullYear();\n return createDate(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: createDate(year - year % 100 - 10, 0, 1),\n min: createDate(minYear, 0, 1),\n max: createDate(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 createDate(year - year % 100, date.getMonth(), date.getDate());\n },\n last: function (date) {\n var year = date.getFullYear();\n return createDate(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 = createDate(start.getFullYear(), start.getMonth(), start.getDate());\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 daysBetweenTwoDates(startDate, endDate) {\n if (+endDate < +startDate) {\n var temp = +startDate;\n calendar.views[0].setDate(startDate, endDate);\n calendar.views[0].setDate(endDate, new Date(temp));\n }\n var fromDateUTC = Date.UTC(startDate.getFullYear(), startDate.getMonth(), startDate.getDate());\n var endDateUTC = Date.UTC(endDate.getFullYear(), endDate.getMonth(), endDate.getDate());\n return Math.ceil((+endDateUTC - +fromDateUTC) / kendo.date.MS_PER_DAY);\n }\n function addDaysToArray(array, numberOfDays, fromDate, disableDates) {\n for (var i = 0; i <= numberOfDays; i++) {\n var nextDay = new Date(fromDate.getTime());\n nextDay = new Date(nextDay.setDate(nextDay.getDate() + i));\n if (!disableDates(nextDay)) {\n array.push(nextDay);\n }\n }\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 createDate(year, month, date) {\n var leapYear = 1904;\n var dateObject = new DATE(leapYear, month, date);\n dateObject.setFullYear(year);\n return dateObject;\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 && window.kendo.jQuery.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 && window.kendo.jQuery.inArray(date.getDay(),[' + disabledDates + ']) > -1;' + searchExpression;\n }\n callback = new Function('date', body);\n return callback;\n }\n function isEqualDate(oldValue, newValue) {\n if (oldValue instanceof Date && newValue instanceof Date) {\n oldValue = oldValue.getTime();\n newValue = newValue.getTime();\n }\n return oldValue === newValue;\n }\n calendar.isEqualDatePart = isEqualDatePart;\n calendar.isEqualDate = isEqualDate;\n calendar.makeUnselectable = makeUnselectable;\n calendar.restrictValue = restrictValue;\n calendar.isInRange = isInRange;\n calendar.addClassToViewContainer = addClassToViewContainer;\n calendar.normalize = normalize;\n calendar.viewsEnum = views;\n calendar.disabled = getDisabledExpr;\n kendo.calendar = calendar;\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dateinput', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'dateinput',\n name: 'DateInput',\n category: 'web',\n description: 'The DateInput widget allows to edit date by typing.',\n depends: ['core']\n };\n (function ($, undefined) {\n var global = window;\n var kendo = global.kendo;\n var caret = kendo.caret;\n var ui = kendo.ui;\n var Widget = ui.Widget;\n var keys = kendo.keys;\n var ns = '.kendoDateInput';\n var proxy = $.proxy;\n var objectToString = {}.toString;\n var INPUT_EVENT_NAME = (kendo.support.propertyChangeEvent ? 'propertychange.kendoDateInput input' : 'input') + ns;\n var STATEDISABLED = 'k-state-disabled';\n var STATEDEFAULT = 'k-state-default';\n var STATEINVALID = 'k-state-invalid';\n var DISABLED = 'disabled';\n var READONLY = 'readonly';\n var CHANGE = 'change';\n var knownSymbols = 'dMyHhmftsz';\n var DateInput = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n options.format = kendo._extractFormat(options.format || kendo.getCulture(options.culture).calendars.standard.patterns.d);\n options.min = kendo.parseDate(element.attr('min')) || kendo.parseDate(options.min);\n options.max = kendo.parseDate(element.attr('max')) || kendo.parseDate(options.max);\n var insidePicker = (element.parent().attr('class') || '').indexOf('k-picker-wrap') >= 0;\n if (insidePicker) {\n that.wrapper = element.parent();\n } else {\n that.wrapper = element.wrap('').parent();\n that.wrapper.addClass(element[0].className);\n that.wrapper[0].style.cssText = element[0].style.cssText;\n element.css({\n width: '100%',\n height: element[0].style.height\n });\n }\n $('').insertAfter(element);\n that._form();\n that.element.addClass(insidePicker ? ' ' : 'k-textbox').attr('autocomplete', 'off').on('focusout' + ns, function () {\n that._change();\n });\n try {\n element[0].setAttribute('type', 'text');\n } catch (e) {\n element[0].type = 'text';\n }\n var disabled = element.is('[disabled]') || $(that.element).parents('fieldset').is(':disabled');\n if (disabled) {\n that.enable(false);\n } else {\n that.readonly(element.is('[readonly]'));\n }\n that.value(that.options.value || element.val());\n kendo.notify(that);\n },\n options: {\n name: 'DateInput',\n culture: '',\n value: '',\n format: '',\n min: new Date(1900, 0, 1),\n max: new Date(2099, 11, 31),\n messages: {\n 'year': 'year',\n 'month': 'month',\n 'day': 'day',\n 'weekday': 'day of the week',\n 'hour': 'hours',\n 'minute': 'minutes',\n 'second': 'seconds',\n 'dayperiod': 'AM/PM'\n }\n },\n events: [CHANGE],\n min: function (value) {\n if (value !== undefined) {\n this.options.min = value;\n } else {\n return this.options.min;\n }\n },\n max: function (value) {\n if (value !== undefined) {\n this.options.max = value;\n } else {\n return this.options.max;\n }\n },\n setOptions: function (options) {\n var that = this;\n Widget.fn.setOptions.call(that, options);\n this._unbindInput();\n this._bindInput();\n this._updateElementValue();\n },\n destroy: function () {\n var that = this;\n that.element.off(ns);\n if (that._formElement) {\n that._formElement.off('reset', that._resetHandler);\n }\n Widget.fn.destroy.call(that);\n },\n value: function (value) {\n if (value === undefined) {\n return this._dateTime.getDateObject();\n }\n if (value === null) {\n value = '';\n }\n if (objectToString.call(value) !== '[object Date]') {\n value = kendo.parseDate(value, this.options.format, this.options.culture);\n }\n if (value && !value.getTime()) {\n value = null;\n }\n this._dateTime = new customDateTime(value, this.options.format, this.options.culture, this.options.messages);\n this._updateElementValue();\n this._oldValue = value;\n },\n _updateElementValue: function () {\n var stringAndFromat = this._dateTime.toPair(this.options.format, this.options.culture, this.options.messages);\n this.element.val(stringAndFromat[0]);\n this._oldText = stringAndFromat[0];\n this._format = stringAndFromat[1];\n },\n readonly: function (readonly) {\n this._editable({\n readonly: readonly === undefined ? true : readonly,\n disable: false\n });\n },\n enable: function (enable) {\n this._editable({\n readonly: false,\n disable: !(enable = enable === undefined ? true : enable)\n });\n },\n _bindInput: function () {\n var that = this;\n that.element.on('paste' + ns, proxy(that._paste, that)).on('keydown' + ns, proxy(that._keydown, that)).on(INPUT_EVENT_NAME, proxy(that._input, that)).on('mouseup' + ns, proxy(that._mouseUp, that)).on('DOMMouseScroll' + ns + ' mousewheel' + ns, proxy(that._scroll, that));\n },\n _unbindInput: function () {\n this.element.off('keydown' + ns).off('paste' + ns).off(INPUT_EVENT_NAME).off('mouseup' + ns).off('DOMMouseScroll' + ns + ' mousewheel' + ns);\n },\n _editable: function (options) {\n var that = this;\n var element = that.element;\n var disable = options.disable;\n var readonly = options.readonly;\n var wrapper = that.wrapper;\n that._unbindInput();\n if (!readonly && !disable) {\n wrapper.addClass(STATEDEFAULT).removeClass(STATEDISABLED);\n element.removeAttr(DISABLED).removeAttr(READONLY);\n that._bindInput();\n } else {\n if (disable) {\n wrapper.addClass(STATEDISABLED).removeClass(STATEDEFAULT);\n element.attr(DISABLED, disable);\n element.removeAttr(READONLY);\n }\n if (readonly) {\n element.attr(READONLY, readonly);\n }\n }\n },\n _change: function () {\n var that = this;\n var oldValue = that._oldValue;\n var value = that.value();\n if (value && that.min() && value < that.min()) {\n that.value(that.min());\n value = that.value();\n }\n if (value && that.max() && value > that.max()) {\n that.value(that.max());\n value = that.value();\n }\n if (oldValue && value && value.getTime() !== oldValue.getTime() || oldValue && !value || !oldValue && value) {\n that._oldValue = value;\n that.trigger(CHANGE);\n that.element.trigger(CHANGE);\n }\n },\n _input: function () {\n var that = this;\n var element = that.element[0];\n var blinkInvalid = false;\n if (kendo._activeElement() !== element) {\n return;\n }\n var diff = approximateStringMatching(this._oldText, this._format, this.element[0].value, caret(this.element[0])[0]);\n var navigationOnly = diff.length === 1 && diff[0][1] === ' ';\n if (!navigationOnly) {\n for (var i = 0; i < diff.length; i++) {\n var valid = this._dateTime.parsePart(diff[i][0], diff[i][1]);\n blinkInvalid = blinkInvalid || !valid;\n }\n }\n this._updateElementValue();\n if (diff.length && diff[0][0] !== ' ') {\n this._selectSegment(diff[0][0]);\n if (!navigationOnly) {\n var difSym = diff[0][0];\n setTimeout(function () {\n that._selectSegment(difSym);\n });\n }\n }\n if (navigationOnly) {\n var newEvent = {\n keyCode: 39,\n preventDefault: function () {\n }\n };\n this._keydown(newEvent);\n }\n if (blinkInvalid) {\n clearTimeout(that._blinkInvalidTimeout);\n var stateInvalid = STATEINVALID;\n that.wrapper.addClass(STATEINVALID);\n that._blinkInvalidTimeout = setTimeout(function () {\n that.wrapper.removeClass(stateInvalid);\n }, 100);\n }\n },\n _mouseUp: function () {\n var selection = caret(this.element[0]);\n if (selection[0] === selection[1]) {\n this._selectNearestSegment();\n }\n },\n _scroll: function (e) {\n if (kendo._activeElement() !== this.element[0] || this.element.is('[readonly]')) {\n return;\n }\n e = window.event || e;\n var newEvent = {\n keyCode: 37,\n preventDefault: function () {\n }\n };\n if (e.shiftKey) {\n newEvent.keyCode = (e.wheelDelta || -e.detail) > 0 ? 37 : 39;\n } else {\n newEvent.keyCode = (e.wheelDelta || -e.detail) > 0 ? 38 : 40;\n }\n this._keydown(newEvent);\n e.returnValue = false;\n if (e.preventDefault) {\n e.preventDefault();\n }\n if (e.stopPropagation) {\n e.stopPropagation();\n }\n },\n _form: function () {\n var that = this;\n var element = that.element;\n var formId = element.attr('form');\n var form = formId ? $('#' + formId) : element.closest('form');\n if (form[0]) {\n that._resetHandler = function () {\n setTimeout(function () {\n that.value(element[0].value);\n });\n };\n that._formElement = form.on('reset', that._resetHandler);\n }\n },\n _paste: function (e) {\n e.preventDefault();\n },\n _keydown: function (e) {\n var key = e.keyCode;\n var selection;\n if (key == 37 || key == 39) {\n e.preventDefault();\n selection = caret(this.element[0]);\n if (selection[0] != selection[1]) {\n this._selectNearestSegment();\n }\n var dir = key == 37 ? -1 : 1;\n var index = dir == -1 ? caret(this.element[0])[0] - 1 : caret(this.element[0])[1] + 1;\n while (index >= 0 && index < this._format.length) {\n if (knownSymbols.indexOf(this._format[index]) >= 0) {\n this._selectSegment(this._format[index]);\n break;\n }\n index += dir;\n }\n }\n if (key == 38 || key == 40) {\n e.preventDefault();\n selection = caret(this.element[0]);\n var symbol = this._format[selection[0]];\n if (knownSymbols.indexOf(symbol) >= 0) {\n this._dateTime.modifyPart(symbol, key == 38 ? 1 : -1);\n this._updateElementValue();\n this._selectSegment(symbol);\n }\n }\n if (kendo.support.browser.msie && kendo.support.browser.version < 10) {\n var keycode = e.keyCode ? e.keyCode : e.which;\n if (keycode === 8 || keycode === 46) {\n var that = this;\n setTimeout(function () {\n that._input();\n }, 0);\n }\n }\n if (key === keys.ENTER) {\n this._change();\n }\n },\n _selectNearestSegment: function () {\n var selection = caret(this.element[0]);\n var start = selection[0];\n for (var i = start, j = start - 1; i < this._format.length || j >= 0; i++, j--) {\n if (i < this._format.length && knownSymbols.indexOf(this._format[i]) !== -1) {\n this._selectSegment(this._format[i]);\n return;\n }\n if (j >= 0 && knownSymbols.indexOf(this._format[j]) !== -1) {\n this._selectSegment(this._format[j]);\n return;\n }\n }\n },\n _selectSegment: function (symbol) {\n var begin = -1, end = 0;\n for (var i = 0; i < this._format.length; i++) {\n if (this._format[i] === symbol) {\n end = i + 1;\n if (begin === -1) {\n begin = i;\n }\n }\n }\n if (begin < 0) {\n begin = 0;\n }\n caret(this.element, begin, end);\n }\n });\n ui.plugin(DateInput);\n var customDateTime = function (initDate, initFormat, initCulture, initMessages) {\n var value = null;\n var year = true, month = true, date = true, hours = true, minutes = true, seconds = true, milliseconds = true;\n var typedMonthPart = '';\n var typedDayPeriodPart = '';\n var placeholders = {};\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000'\n ];\n function pad(number, digits, end) {\n number = number + '';\n digits = digits || 2;\n end = digits - number.length;\n if (end) {\n return zeros[digits].substring(0, end) + number;\n }\n return number;\n }\n var dateFormatRegExp = /dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|HH|H|hh|h|mm|m|fff|ff|f|tt|ss|s|zzz|zz|z|\"[^\"]*\"|'[^']*'/g;\n var months = null, calendar = null, days = null, returnsFormat = false;\n var matcher = function (match) {\n var mins, sign;\n var result;\n switch (match) {\n case 'd':\n result = date ? value.getDate() : placeholders.day;\n break;\n case 'dd':\n result = date ? pad(value.getDate()) : placeholders.day;\n break;\n case 'ddd':\n result = date && month && year ? days.namesAbbr[value.getDay()] : placeholders.weekday;\n break;\n case 'dddd':\n result = date && month && year ? days.names[value.getDay()] : placeholders.weekday;\n break;\n case 'M':\n result = month ? value.getMonth() + 1 : placeholders.month;\n break;\n case 'MM':\n result = month ? pad(value.getMonth() + 1) : placeholders.month;\n break;\n case 'MMM':\n result = month ? months.namesAbbr[value.getMonth()] : placeholders.month;\n break;\n case 'MMMM':\n result = month ? months.names[value.getMonth()] : placeholders.month;\n break;\n case 'yy':\n result = year ? pad(value.getFullYear() % 100) : placeholders.year;\n break;\n case 'yyyy':\n result = year ? pad(value.getFullYear(), 4) : placeholders.year;\n break;\n case 'h':\n result = hours ? value.getHours() % 12 || 12 : placeholders.hour;\n break;\n case 'hh':\n result = hours ? pad(value.getHours() % 12 || 12) : placeholders.hour;\n break;\n case 'H':\n result = hours ? value.getHours() : placeholders.hour;\n break;\n case 'HH':\n result = hours ? pad(value.getHours()) : placeholders.hour;\n break;\n case 'm':\n result = minutes ? value.getMinutes() : placeholders.minute;\n break;\n case 'mm':\n result = minutes ? pad(value.getMinutes()) : placeholders.minute;\n break;\n case 's':\n result = seconds ? value.getSeconds() : placeholders.second;\n break;\n case 'ss':\n result = seconds ? pad(value.getSeconds()) : placeholders.second;\n break;\n case 'f':\n result = milliseconds ? Math.floor(value.getMilliseconds() / 100) : milliseconds;\n break;\n case 'ff':\n result = value.getMilliseconds();\n if (result > 99) {\n result = Math.floor(result / 10);\n }\n result = milliseconds ? pad(result) : match;\n break;\n case 'fff':\n result = milliseconds ? pad(value.getMilliseconds(), 3) : match;\n break;\n case 'tt':\n result = hours ? value.getHours() < 12 ? calendar.AM[0] : calendar.PM[0] : placeholders.dayperiod;\n break;\n case 'zzz':\n mins = value.getTimezoneOffset();\n sign = mins < 0;\n result = Math.abs(mins / 60).toString().split('.')[0];\n mins = Math.abs(mins) - result * 60;\n result = (sign ? '+' : '-') + pad(result);\n result += ':' + pad(mins);\n break;\n case 'z':\n case 'zz':\n result = value.getTimezoneOffset() / 60;\n sign = result < 0;\n result = Math.abs(result).toString().split('.')[0];\n result = (sign ? '+' : '-') + (match === 'zz' ? pad(result) : result);\n break;\n }\n result = result !== undefined ? result : match.slice(1, match.length - 1);\n if (returnsFormat) {\n result = '' + result;\n var formatResult = '';\n if (match == 'ddd') {\n match = 'EEE';\n }\n if (match == 'dddd') {\n match = 'EEEE';\n }\n for (var i = 0; i < result.length; i++) {\n formatResult += match[0];\n }\n return formatResult;\n } else {\n return result;\n }\n };\n function generateMatcher(retFormat) {\n returnsFormat = retFormat;\n return matcher;\n }\n function setExisting(symbol, val) {\n switch (symbol) {\n case 'y':\n year = val;\n break;\n case 'M':\n month = val;\n if (!val) {\n value.setMonth(0);\n typedMonthPart = '';\n }\n break;\n case 'd':\n date = val;\n break;\n case 'H':\n case 'h':\n hours = val;\n if (!val) {\n typedDayPeriodPart = '';\n }\n break;\n case 'm':\n minutes = val;\n break;\n case 's':\n seconds = val;\n break;\n default:\n return;\n }\n }\n this.setValue = function (val) {\n date = val;\n };\n this.getValue = function () {\n return date;\n };\n this.modifyPart = function (symbol, offset) {\n var newValue = new Date(value && value.getTime ? value.getTime() : value);\n switch (symbol) {\n case 'y':\n newValue.setFullYear(newValue.getFullYear() + offset);\n break;\n case 'M':\n var newMonth = newValue.getMonth() + offset;\n newValue.setMonth(newMonth);\n if (newValue.getMonth() % 12 !== (newMonth + 12) % 12) {\n newValue.setDate(1);\n newValue.setMonth(newMonth);\n }\n break;\n case 'd':\n case 'E':\n newValue.setDate(newValue.getDate() + offset);\n break;\n case 'H':\n case 'h':\n newValue.setHours(newValue.getHours() + offset);\n break;\n case 'm':\n newValue.setMinutes(newValue.getMinutes() + offset);\n break;\n case 's':\n newValue.setSeconds(newValue.getSeconds() + offset);\n break;\n case 't':\n newValue.setHours((newValue.getHours() + 12) % 24);\n break;\n default:\n break;\n }\n if (newValue.getFullYear() > 0) {\n setExisting(symbol, true);\n value = newValue;\n }\n };\n this.parsePart = function (symbol, currentChar) {\n if (!currentChar) {\n setExisting(symbol, false);\n return true;\n }\n var newValue = new Date(value && value.getTime ? value.getTime() : value);\n var newHours;\n switch (symbol) {\n case 'd':\n var newDate = (date ? newValue.getDate() * 10 : 0) + parseInt(currentChar, 10);\n if (isNaN(newDate)) {\n return;\n }\n while (newDate > 31) {\n newDate = parseInt(newDate.toString().slice(1), 10);\n }\n if (newDate < 1) {\n date = false;\n } else {\n newValue.setDate(newDate);\n if (newValue.getMonth() !== value.getMonth()) {\n return;\n }\n date = true;\n }\n break;\n case 'M':\n var newMonth = (month ? (newValue.getMonth() + 1) * 10 : 0) + parseInt(currentChar, 10);\n if (!isNaN(newMonth)) {\n while (newMonth > 12) {\n newMonth = parseInt(newMonth.toString().slice(1), 10);\n }\n if (newMonth < 1) {\n month = false;\n } else {\n newValue.setMonth(newMonth - 1);\n if (newValue.getMonth() !== newMonth - 1) {\n newValue.setDate(1);\n newValue.setMonth(newMonth - 1);\n }\n month = true;\n }\n } else {\n var monthNames = calendar.months.names;\n typedMonthPart += currentChar.toLowerCase();\n while (typedMonthPart.length > 0) {\n for (var i = 0; i < monthNames.length; i++) {\n if (monthNames[i].toLowerCase().indexOf(typedMonthPart) === 0) {\n newValue.setMonth(i);\n month = true;\n value = newValue;\n return true;\n }\n }\n typedMonthPart = typedMonthPart.substring(1, typedMonthPart.length);\n }\n return false;\n }\n break;\n case 'y':\n var newYear = (year ? newValue.getFullYear() * 10 : 0) + parseInt(currentChar, 10);\n if (isNaN(newYear)) {\n return;\n }\n while (newYear > 9999) {\n newYear = parseInt(newYear.toString().slice(1), 10);\n }\n if (newYear < 1) {\n year = false;\n } else {\n newValue.setFullYear(newYear);\n year = true;\n }\n break;\n case 'h':\n newHours = (hours ? (newValue.getHours() % 12 || 12) * 10 : 0) + parseInt(currentChar, 10);\n if (isNaN(newHours)) {\n return;\n }\n while (newHours > 12) {\n newHours = parseInt(newHours.toString().slice(1), 10);\n }\n newValue.setHours(Math.floor(newValue.getHours() / 12) * 12 + newHours % 12);\n hours = true;\n break;\n case 'H':\n newHours = (hours ? newValue.getHours() * 10 : 0) + parseInt(currentChar, 10);\n if (isNaN(newHours)) {\n return;\n }\n while (newHours > 23) {\n newHours = parseInt(newHours.toString().slice(1), 10);\n }\n newValue.setHours(newHours);\n hours = true;\n break;\n case 'm':\n var newMinutes = (minutes ? newValue.getMinutes() * 10 : 0) + parseInt(currentChar, 10);\n if (isNaN(newMinutes)) {\n return;\n }\n while (newMinutes > 59) {\n newMinutes = parseInt(newMinutes.toString().slice(1), 10);\n }\n newValue.setMinutes(newMinutes);\n minutes = true;\n break;\n case 's':\n var newSeconds = (seconds ? newValue.getSeconds() * 10 : 0) + parseInt(currentChar, 10);\n if (isNaN(newSeconds)) {\n return;\n }\n while (newSeconds > 59) {\n newSeconds = parseInt(newSeconds.toString().slice(1), 10);\n }\n newValue.setSeconds(newSeconds);\n seconds = true;\n break;\n case 't':\n if (hours) {\n typedDayPeriodPart += currentChar.toLowerCase();\n while (typedDayPeriodPart.length > 0) {\n if (calendar.AM[0].toLowerCase().indexOf(typedDayPeriodPart) === 0 && newValue.getHours() >= 12 || calendar.PM[0].toLowerCase().indexOf(typedDayPeriodPart) === 0 && newValue.getHours() < 12) {\n newValue.setHours((newValue.getHours() + 12) % 24);\n value = newValue;\n return true;\n }\n typedDayPeriodPart = typedDayPeriodPart.substring(1, typedDayPeriodPart.length);\n }\n return false;\n }\n break;\n default:\n break;\n }\n value = newValue;\n return true;\n };\n this.toPair = function (format, culture, messages) {\n if (!format) {\n return [\n '',\n ''\n ];\n }\n culture = kendo.getCulture(culture);\n calendar = culture.calendars.standard;\n format = calendar.patterns[format] || format;\n days = calendar.days;\n months = calendar.months;\n placeholders = messages;\n return [\n format.replace(dateFormatRegExp, generateMatcher(false)),\n format.replace(dateFormatRegExp, generateMatcher(true))\n ];\n };\n this.getDateObject = function () {\n return year && month && date && hours && minutes && seconds && milliseconds ? new Date(value.getTime()) : null;\n };\n if (!initDate) {\n value = new Date();\n var sampleFormat = this.toPair(initFormat, initCulture, initMessages)[1];\n for (var i = 0; i < sampleFormat.length; i++) {\n setExisting(sampleFormat[i], false);\n }\n } else {\n value = new Date(initDate.getTime());\n }\n };\n function approximateStringMatching(oldText, oldFormat, newText, caret) {\n var oldTextSeparator = oldText[caret + oldText.length - newText.length];\n oldText = oldText.substring(0, caret + oldText.length - newText.length);\n newText = newText.substring(0, caret);\n var diff = [];\n var i;\n if (oldText === newText && caret > 0) {\n diff.push([\n oldFormat[caret - 1],\n newText[caret - 1]\n ]);\n return diff;\n }\n if (oldText.indexOf(newText) === 0 && (newText.length === 0 || oldFormat[newText.length - 1] !== oldFormat[newText.length])) {\n var deletedSymbol = '';\n for (i = newText.length; i < oldText.length; i++) {\n if (oldFormat[i] !== deletedSymbol && knownSymbols.indexOf(oldFormat[i]) >= 0) {\n deletedSymbol = oldFormat[i];\n diff.push([\n deletedSymbol,\n ''\n ]);\n }\n }\n return diff;\n }\n if (newText[newText.length - 1] === ' ' || newText[newText.length - 1] === oldTextSeparator) {\n return [[\n oldFormat[caret - 1],\n ' '\n ]];\n }\n if (newText.indexOf(oldText) === 0 || knownSymbols.indexOf(oldFormat[caret - 1]) === -1) {\n var symbol = oldFormat[0];\n for (i = Math.max(0, oldText.length - 1); i < oldFormat.length; i++) {\n if (knownSymbols.indexOf(oldFormat[i]) >= 0) {\n symbol = oldFormat[i];\n break;\n }\n }\n return [[\n symbol,\n newText[caret - 1]\n ]];\n }\n return [[\n oldFormat[caret - 1],\n newText[caret - 1]\n ]];\n }\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.datepicker', [\n 'kendo.calendar',\n 'kendo.popup',\n 'kendo.dateinput'\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 disableDates: null,\n ARIATemplate: 'Current focused date is #=kendo.toString(data.current, \"D\")#',\n dateInput: false,\n weekNumber: 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 && date) {\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), nonDefaultMessage;\n if (!kendo.ui.Validator.prototype.options.messages[ruleKey]) {\n nonDefaultMessage = kendo.isFunction(customMessage) ? customMessage(input) : customMessage;\n }\n customMessage = kendo.isFunction(customMessage) ? customMessage(input) : customMessage;\n return kendo.format(input.attr(kendo.attr(ruleKey + '-msg')) || input.attr('validationMessage') || nonDefaultMessage || 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, .k-combobox .k-input, [' + kendo.attr('role') + '=listbox], [' + kendo.attr('role') + '=upload], [' + kendo.attr('skip') + '], [type=file])').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 popupZIndex: parseInt(diagram.element.closest('.k-window').css('zIndex'), 10) + 10\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 var popupZIndex = parseInt(this.options.popupZIndex, 10);\n if (this._popup) {\n this._popup.open(point.x, point.y);\n if (popupZIndex) {\n this._popup.wrapper.css('zIndex', popupZIndex);\n }\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() || 0;\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 || 0;\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 if (widget._checkBoxSelection) {\n multiple = true;\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}));"]}