From 710eababa48ef116646af7acaf3cf899191e07bd Mon Sep 17 00:00:00 2001 From: Felix Hayashi Date: Sat, 13 Dec 2014 00:20:54 +0100 Subject: [PATCH 01/20] Update ManipulationMixin.js see https://github.com/almende/vis/issues/511 --- lib/network/mixins/ManipulationMixin.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/network/mixins/ManipulationMixin.js b/lib/network/mixins/ManipulationMixin.js index 264b5166..ed405336 100644 --- a/lib/network/mixins/ManipulationMixin.js +++ b/lib/network/mixins/ManipulationMixin.js @@ -652,7 +652,7 @@ exports._deleteSelected = function() { if (this.triggerFunctions.del) { var me = this; var data = {nodes: selectedNodes, edges: selectedEdges}; - if (this.triggerFunctions.del.length = 2) { + if (this.triggerFunctions.del.length == 2) { this.triggerFunctions.del(data, function (finalizedData) { me.edgesData.remove(finalizedData.edges); me.nodesData.remove(finalizedData.nodes); From aee4d5848a9a8b882c189b1d33c25ddf502dd1c1 Mon Sep 17 00:00:00 2001 From: AlexDM0 Date: Tue, 16 Dec 2014 11:04:49 +0100 Subject: [PATCH 02/20] Fixed flipping of hierachical network on update when using RL and DU. --- HISTORY.md | 1 + dist/vis.js | 6 +++--- dist/vis.map | 2 +- dist/vis.min.js | 6 +++--- lib/network/mixins/HierarchicalLayoutMixin.js | 2 +- 5 files changed, 9 insertions(+), 8 deletions(-) diff --git a/HISTORY.md b/HISTORY.md index c8d2f413..ea20d4e8 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -108,6 +108,7 @@ http://visjs.org ### Network - Fixed dashed and arrow lines not using inheritColor. +- Fixed flipping of hierachical network on update when using RL and DU. ### DataSet diff --git a/dist/vis.js b/dist/vis.js index 09a122a7..905a1130 100644 --- a/dist/vis.js +++ b/dist/vis.js @@ -5,7 +5,7 @@ * A dynamic, browser-based visualization library. * * @version 3.7.2-SNAPSHOT - * @date 2014-12-09 + * @date 2014-12-16 * * @license * Copyright (C) 2011-2014 Almende B.V, http://almende.com @@ -31981,7 +31981,7 @@ return /******/ (function(modules) { // webpackBootstrap if (this.triggerFunctions.del) { var me = this; var data = {nodes: selectedNodes, edges: selectedEdges}; - if (this.triggerFunctions.del.length = 2) { + if (this.triggerFunctions.del.length == 2) { this.triggerFunctions.del(data, function (finalizedData) { me.edgesData.remove(finalizedData.edges); me.nodesData.remove(finalizedData.nodes); @@ -32214,7 +32214,7 @@ return /******/ (function(modules) { // webpackBootstrap exports._setupHierarchicalLayout = function() { if (this.constants.hierarchicalLayout.enabled == true && this.nodeIndices.length > 0) { if (this.constants.hierarchicalLayout.direction == "RL" || this.constants.hierarchicalLayout.direction == "DU") { - this.constants.hierarchicalLayout.levelSeparation *= -1; + this.constants.hierarchicalLayout.levelSeparation = this.constants.hierarchicalLayout.levelSeparation < 0 ? this.constants.hierarchicalLayout.levelSeparation : this.constants.hierarchicalLayout.levelSeparation * -1; } else { this.constants.hierarchicalLayout.levelSeparation = Math.abs(this.constants.hierarchicalLayout.levelSeparation); diff --git a/dist/vis.map b/dist/vis.map index fa15bdff..250231b2 100644 --- a/dist/vis.map +++ b/dist/vis.map @@ -1 +1 @@ -{"version":3,"file":"vis.map","sources":["./dist/vis.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","util","DOMutil","DataSet","DataView","Queue","Graph3d","graph3d","Camera","Filter","Point2d","Point3d","Slider","StepNumber","Timeline","Graph2d","timeline","DateUtil","DataStep","Range","stack","TimeStep","components","items","Item","BackgroundItem","BoxItem","PointItem","RangeItem","Component","CurrentTime","CustomTime","DataAxis","GraphGroup","Group","BackgroundGroup","ItemSet","Legend","LineGraph","TimeAxis","Network","network","Edge","Groups","Images","Node","Popup","dotparser","gephiParser","Graph","Error","moment","hammer","isNumber","object","Number","isString","String","isDate","Date","match","ASPDateRegex","exec","isNaN","parse","isDataTable","google","visualization","DataTable","randomUUID","S4","Math","floor","random","toString","extend","a","i","len","arguments","length","other","prop","hasOwnProperty","selectiveExtend","props","Array","isArray","selectiveDeepExtend","b","TypeError","constructor","Object","undefined","deepExtend","selectiveNotDeepExtend","indexOf","equalArray","convert","type","Boolean","valueOf","isMoment","toDate","getType","toISOString","value","getAbsoluteLeft","elem","getBoundingClientRect","left","window","pageXOffset","getAbsoluteTop","top","pageYOffset","addClassName","className","classes","split","push","join","removeClassName","index","splice","forEach","callback","toArray","array","updateProperty","key","addEventListener","element","action","listener","useCapture","navigator","userAgent","attachEvent","removeEventListener","detachEvent","preventDefault","event","returnValue","getTarget","target","srcElement","nodeType","parentNode","option","asBoolean","defaultValue","asNumber","asString","asSize","asElement","GiveDec","Hex","Value","eval","GiveHex","Dec","parseColor","color","isValidRGB","rgb","substr","RGBToHex","isValidHex","hsv","hexToHSV","lighterColorHSV","h","s","v","min","darkerColorHSV","darkerColorHex","HSVToHex","lighterColorHex","background","border","highlight","hover","hexToRGB","hex","replace","toUpperCase","substring","d","e","f","r","g","red","green","blue","RGBToHSV","minRGB","maxRGB","max","hue","saturation","cssUtil","cssText","styles","style","trim","parts","keys","map","addCssText","currentStyles","newStyles","removeCssText","removeStyles","HSVToRGB","q","t","isOk","test","selectiveBridgeObject","fields","referenceObject","objectTo","create","bridgeObject","mergeOptions","mergeTarget","options","enabled","binarySearchCustom","orderedItems","searchFunction","field","field2","maxIterations","iteration","low","high","middle","item","searchResult","binarySearchValue","sidePreference","prevValue","nextValue","easeInOutQuad","start","end","duration","change","easingFunctions","linear","easeInQuad","easeOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","prepareElements","JSONcontainer","elementType","redundant","used","cleanupElements","removeChild","getSVGElement","svgContainer","shift","document","createElementNS","appendChild","getDOMElement","DOMContainer","insertBefore","createElement","drawPoint","x","y","group","point","drawPoints","setAttributeNS","size","drawBar","width","height","rect","data","_options","_data","_fieldId","fieldId","_type","_subscribers","add","setOptions","prototype","queue","_queue","destroy","on","subscribers","subscribe","off","filter","unsubscribe","_trigger","params","senderId","concat","subscriber","addedIds","me","_addItem","columns","_getColumnNames","row","rows","getNumberOfRows","col","cols","getValue","update","updatedIds","updatedData","addOrUpdate","_updateItem","get","ids","firstType","returnType","allowedValues","itemId","_getItem","order","_sort","_filterFields","_appendRow","result","getIds","getDataSet","mappedItems","filteredItem","name","sort","av","bv","remove","removedId","removedIds","_remove","clear","maxField","itemField","minField","distinct","values","fieldType","count","exists","types","raw","converted","JSON","stringify","dataTable","getNumberOfColumns","getColumnId","getColumnLabel","addRow","setValue","_ids","_onEvent","apply","setData","viewOptions","getArguments","defaultFilter","dataSet","added","updated","removed","delay","Infinity","_timeout","_extended","_flushIfNeeded","flush","methods","original","method","args","fn","context","entry","clearTimeout","setTimeout","container","SyntaxError","containerElement","margin","defaultXCenter","defaultYCenter","xLabel","yLabel","zLabel","passValueFn","xValueLabel","yValueLabel","zValueLabel","filterLabel","legendLabel","STYLE","DOT","showPerspective","showGrid","keepAspectRatio","showShadow","showGrayBottom","showTooltip","verticalRatio","animationInterval","animationPreload","camera","eye","dataPoints","colX","colY","colZ","colValue","colFilter","xMin","xStep","xMax","yMin","yStep","yMax","zMin","zStep","zMax","valueMin","valueMax","xBarWidth","yBarWidth","colorAxis","colorGrid","colorDot","colorDotBorder","getMouseX","clientX","targetTouches","getMouseY","clientY","Emitter","_setScale","scale","z","xCenter","yCenter","zCenter","setArmLocation","_convert3Dto2D","point3d","translation","_convertPointToTranslation","_convertTranslationToScreen","ax","ay","az","cx","getCameraLocation","cy","cz","sinTx","sin","getCameraRotation","cosTx","cos","sinTy","cosTy","sinTz","cosTz","dx","dy","dz","bx","by","ex","ey","ez","getArmLength","xcenter","frame","canvas","clientWidth","ycenter","_setBackgroundColor","backgroundColor","fill","stroke","strokeWidth","borderColor","borderWidth","borderStyle","BAR","BARCOLOR","BARSIZE","DOTLINE","DOTCOLOR","DOTSIZE","GRID","LINE","SURFACE","_getStyleNumber","styleName","_determineColumnIndexes","counter","column","getDistinctValues","distinctValues","getColumnRange","minMax","_dataInitialize","rawData","_onChange","dataFilter","setOnLoadCallback","redraw","withBars","defaultXBarWidth","dataX","defaultYBarWidth","dataY","xRange","defaultXMin","defaultXMax","defaultXStep","yRange","defaultYMin","defaultYMax","defaultYStep","zRange","defaultZMin","defaultZMax","defaultZStep","valueRange","defaultValueMin","defaultValueMax","_getDataPoints","obj","sortNumber","dataMatrix","xIndex","yIndex","trans","screen","bottom","pointRight","pointTop","pointCross","hasChildNodes","firstChild","position","overflow","noCanvas","fontWeight","padding","innerHTML","onmousedown","_onMouseDown","ontouchstart","_onTouchStart","onmousewheel","_onWheel","ontooltip","_onTooltip","onkeydown","setSize","_resizeCanvas","clientHeight","animationStart","slider","play","animationStop","stop","_resizeCenter","charAt","parseFloat","setCameraPosition","pos","horizontal","vertical","setArmRotation","distance","setArmLength","getCameraPosition","getArmRotation","_readData","_redrawFilter","animationAutoStart","cameraPosition","styleNumber","tooltip","showAnimationControls","_redrawSlider","_redrawClear","_redrawAxis","_redrawDataGrid","_redrawDataLine","_redrawDataBar","_redrawDataDot","_redrawInfo","_redrawLegend","ctx","getContext","clearRect","widthMin","widthMax","dotSize","right","lineWidth","font","ymin","ymax","_hsv2rgb","strokeStyle","beginPath","moveTo","lineTo","strokeRect","fillStyle","closePath","gridLineLen","step","getCurrent","next","textAlign","textBaseline","fillText","label","visible","setValues","setPlayInterval","onchange","getIndex","selectValue","setOnChangeCallback","lineStyle","getLabel","getSelectedValue","from","to","prettyStep","text","xText","yText","zText","offset","xOffset","yOffset","xMin2d","xMax2d","gridLenX","gridLenY","textMargin","armAngle","H","S","V","R","G","B","C","Hi","X","abs","parseInt","cross","topSideVisible","zAvg","transBottom","dist","sortDepth","aDiff","subtract","bDiff","crossproduct","crossProduct","radius","arc","PI","j","surface","corners","xWidth","yWidth","surfaces","center","avg","transCenter","diff","leftButtonDown","_onMouseUp","which","button","touchDown","startMouseX","startMouseY","startStart","startEnd","startArmRotation","cursor","onmousemove","_onMouseMove","onmouseup","diffX","diffY","horizontalNew","verticalNew","snapAngle","snapValue","round","parameters","emit","mouseX","mouseY","tooltipTimeout","_hideTooltip","dataPoint","_dataPointFromXY","_showTooltip","ontouchmove","_onTouchMove","ontouchend","_onTouchEnd","delta","wheelDelta","detail","oldLength","newLength","_insideTriangle","triangle","sign","as","bs","cs","distMax","closestDataPoint","closestDist","triangle1","triangle2","distX","distY","sqrt","content","line","dot","dom","borderRadius","boxShadow","borderLeft","contentWidth","offsetWidth","contentHeight","offsetHeight","lineHeight","dotWidth","dotHeight","armLocation","armRotation","armLength","cameraLocation","cameraRotation","calculateCameraOrientation","rot","graph","onLoadCallback","loadInBackground","isLoaded","getLoadedProgress","getColumn","getValues","dataView","progress","sub","sum","prev","bar","MozBorderRadius","slide","onclick","togglePlay","onChangeCallback","playTimeout","playInterval","playLoop","setIndex","playNext","interval","clearInterval","getPlayInterval","setPlayLoop","doLoop","onChange","indexToLeft","startClientX","startSlideX","leftToIndex","_start","_end","_step","precision","_current","setRange","setStep","calculatePrettyStep","log10","log","LN10","step1","pow","step2","step5","toPrecision","getStep","groups","forthArgument","defaultOptions","autoResize","orientation","maxHeight","minHeight","_create","body","domProps","emitter","bind","hiddenDates","snap","toScreen","_toScreen","toGlobalScreen","_toGlobalScreen","toTime","_toTime","toGlobalTime","_toGlobalTime","range","timeAxis","currentTime","customTime","itemSet","itemsData","groupsData","setGroups","setItems","Core","newDataSet","initialLoad","dataRange","_getDataRange","setWindow","animate","fit","setSelection","focus","getSelection","itemData","getItemRange","dataset","minItem","maxStartItem","maxEndItem","linegraph","getLegend","groupId","isGroupVisible","visibility","convertHiddenOptions","repeat","dateItem","updateHiddenDates","centerContainer","totalRange","pixelTime","startDate","endDate","_d","runUntil","clone","day","dayOfYear","year","dayOffset","date","month","console","removeDuplicates","startHidden","isHidden","endHidden","rangeStart","rangeEnd","hidden","startToFront","endToFront","_applyRange","safeDates","printDates","dates","stepOverHiddenDates","timeStep","previousTime","stepInHidden","currentValue","current","newValue","switchedYear","switchedMonth","switchedDay","time","conversion","getHiddenDurationBetween","correctTimeForHidden","hiddenDuration","totalDuration","partialDuration","accumulatedHiddenDuration","getAccumulatedHiddenDuration","newTime","getHiddenDurationBefore","timeOffset","requiredDuration","previousPoint","snapAwayFromHidden","direction","correctionEnabled","minimumStep","containerHeight","customRange","alignZeros","autoScale","stepIndex","marginStart","marginEnd","deadSpace","majorSteps","minorSteps","setMinimumStep","setFirst","safeSize","minimumStepValue","orderOfMagnitude","minorStepIdx","magnitudefactor","solutionFound","stepSize","niceStart","niceEnd","roundToMinor","marginRange","rounded","hasNext","previous","decimals","slice","exp","cnt","isMajor","now","hours","minutes","seconds","milliseconds","deltaDifference","scaleOffset","moveable","zoomable","zoomMin","zoomMax","touch","animateTimer","_onDragStart","_onDrag","_onDragEnd","_onHold","_onMouseWheel","_onTouch","_onPinch","validateDirection","getPointer","pageX","pageY","hammerUtil","_cancelAnimation","initStart","initEnd","initTime","anyChanged","dragging","done","changed","newStart","newEnd","getRange","totalHidden","previousDelta","allowDragging","gesture","deltaX","deltaY","diffRange","safeStart","safeEnd","fakeGesture","pointer","pointerDate","_pointerToDate","zoom","touches","centerDate","hiddenDurationBefore","hiddenDurationAfter","move","EPSILON","orderByStart","orderByEnd","aTime","bTime","force","iMax","axis","collidingItem","jj","collision","nostack","subgroups","newTop","subgroup","SCALE","DAY","MILLISECOND","SECOND","MINUTE","HOUR","WEEKDAY","MONTH","YEAR","first","setFullYear","getFullYear","setMonth","setDate","setHours","setMinutes","setSeconds","setMilliseconds","getMilliseconds","getSeconds","getMinutes","getHours","getDate","getMonth","setScale","newScale","newStep","setAutoScale","enable","stepYear","stepMonth","stepDay","stepHour","stepMinute","stepSecond","stepMillisecond","getLabelMinor","format","getLabelMajor","_isResized","resized","_previousWidth","_previousHeight","showCurrentTime","locales","locale","parent","backgroundVertical","title","currentTimeTimer","setCurrentTime","getCurrentTime","showCustomTime","eventParams","Hammer","drag","prevent_default","setCustomTime","getCustomTime","stopPropagation","svg","linegraphOptions","showMinorLabels","showMajorLabels","icons","majorLinesOffset","minorLinesOffset","labelOffsetX","labelOffsetY","iconWidth","linegraphSVG","DOMelements","lines","labels","conversionFactor","minWidth","stepPixels","stepPixelsForced","zeroCrossing","lineOffset","master","svgElements","iconsRemoved","amountOfGroups","lineContainer","scrollTop","addGroup","graphOptions","updateGroup","removeGroup","hide","show","display","_redrawGroupIcons","iconHeight","iconOffset","drawIcon","_cleanupIcons","backgroundHorizontal","changeCalled","activeGroups","_calculateCharSize","minorLabelHeight","minorCharHeight","majorLabelHeight","majorCharHeight","minorLineWidth","minorLineHeight","majorLineWidth","majorLineHeight","_redrawLabels","_redrawTitle","amountOfSteps","stepDifference","zeroStepDifference","valueAtZero","marginStartPos","maxLabelSize","_redrawLabel","_redrawLine","titleWidth","titleCharHeight","convertValue","invertedValue","convertedValue","characterHeight","largestWidth","majorCharWidth","minorCharWidth","textMinor","createTextNode","measureCharMinor","textMajor","measureCharMajor","textTitle","measureCharTitle","titleCharWidth","groupsUsingDefaultStyles","usingDefaultStyle","zeroPosition","Line","Bar","Points","setZeroPosition","catmullRom","parametrization","alpha","SVGcontainer","path","fillPath","fillHeight","outline","shaded","barWidth","bar1Height","bar2Height","icon","yAxisOrientation","getYRange","groupData","draw","framework","subgroupIndex","subgroupOrderer","subgroupOrder","visibleItems","byStart","byEnd","checkRangedItems","inner","foreground","marker","Element","getLabelWidth","restack","_updateVisibleItems","markerHeight","lastMarkerHeight","dirty","displayed","_calculateHeight","offsetTop","offsetLeft","ii","repositionY","resetSubgroups","labelSet","setParent","orderSubgroups","_checkIfVisible","sortArray","sortField","removeFromDataSet","removeItem","startArray","endArray","oldVisibleItems","visibleItemsLookup","lowerBound","upperBound","_checkIfVisibleWithReference","initialPosByStart","_traceVisible","initialPosByEnd","repositionX","initialPos","breakCondition","isVisible","align","groupOrder","selectable","editable","updateTime","onAdd","onUpdate","onMove","onRemove","onMoving","itemOptions","itemListeners","_onAdd","_onUpdate","_onRemove","groupListeners","_onAddGroups","_onUpdateGroups","_onRemoveGroups","groupIds","selection","stackDirty","touchParams","UNGROUPED","BACKGROUND","box","_updateUngrouped","backgroundGroup","_onSelectItem","_onMultiSelectItem","_onAddItem","addCallback","Function","markDirty","unselect","select","getVisibleItems","rawVisibleItems","_deselect","_orderGroups","visibleInterval","zoomed","lastVisibleInterval","lastWidth","firstGroup","_firstGroup","firstMargin","nonFirstMargin","groupMargin","groupResized","firstGroupIndex","firstGroupId","ungrouped","_getGroupId","getLabelSet","oldItemsData","getItems","_order","getGroups","_getType","_removeItem","groupOptions","oldGroupId","oldGroup","_constructByEndArray","itemFromTarget","selected","dragLeftItem","dragRightItem","initialX","itemProps","newProps","initial","groupFromTarget","_updateItemProps","_moveToGroup","changes","ctrlKey","srcEvent","shiftKey","oldSelection","newSelection","xAbs","newItem","_getItemRange","_item","itemSetFromTarget","side","iconSize","iconSpacing","textArea","scrollableHeight","drawLegendIcons","getComputedStyle","paddingTop","defaultGroup","sampling","graphHeight","barChart","handleOverlap","dataAxis","legend","abortedGraphUpdate","autoSizeSVG","lastStart","COUNTER","BarGraphFunctions","yAxisLeft","yAxisRight","legendLeft","legendRight","_updateAllGroupData","_updateGroup","groupsContent","ungroupedCounter","forceGraphUpdate","_updateGraph","rangePerPixelInv","preprocessedGroupData","processedGroupData","groupRanges","minDate","maxDate","_getRelevantData","_applySampling","_convertXcoordinates","_getYRanges","_updateYAxis","MAX_CYCLES","_convertYcoordinates","dataContainer","guess","increment","amountOfPoints","xDistance","pointsPerPixel","ceil","sampledData","barCombinedDataLeft","barCombinedDataRight","getStackedBarYRange","minVal","maxVal","yAxisLeftUsed","yAxisRightUsed","minLeft","minRight","maxLeft","maxRight","ignore","_toggleAxisVisiblity","drawIcons","axisUsed","datapoints","xValue","yValue","extractedData","svgHeight","majorLines","majorTexts","minorLines","minorTexts","lineTop","lang","parentChanged","foregroundNextSibling","nextSibling","backgroundNextSibling","_repaintLabels","timeLabelsize","xFirstMajorLabel","cur","_repaintMinorText","_repaintMajorText","_repaintMajorLine","_repaintMinorLine","leftTime","leftText","widthText","arr","pop","childNodes","nodeValue","_repaintDeleteButton","anchor","deleteButton","_updateContents","template","_updateTitle","removeAttribute","_updateDataAttributes","dataAttributes","attributes","setAttribute","_updateStyle","emptyContent","baseClassName","onTop","itemSubgroup","itemSetHeight","marginLeft","maxWidth","_repaintDragLeft","_repaintDragRight","contentLeft","parentWidth","boxWidth","dragLeft","dragRight","_initializeMixinLoaders","renderRefreshRate","renderTimestep","renderTime","maxPhysicsTicksPerRender","physicsDiscreteStepsize","initializing","triggerFunctions","edit","editEdge","connect","del","nodes","mass","radiusMin","radiusMax","shape","image","fontColor","fontSize","fontFace","fontFill","level","highlightColor","borderWidthSelected","edges","widthSelectionMultiplier","hoverWidth","arrowScaleFactor","dash","gap","altLength","inheritColor","configurePhysics","physics","barnesHut","theta","gravitationalConstant","centralGravity","springLength","springConstant","damping","repulsion","nodeDistance","hierarchicalRepulsion","clustering","initialMaxNodes","clusterThreshold","reduceToNodes","chainThreshold","clusterEdgeThreshold","sectorThreshold","screenSizeThreshold","fontSizeMultiplier","maxFontSize","forceAmplification","distanceAmplification","edgeGrowth","nodeScaling","maxNodeSizeIncrements","activeAreaBoxSize","clusterLevelDifference","navigation","keyboard","speed","dataManipulation","initiallyVisible","hierarchicalLayout","levelSeparation","nodeSpacing","layout","freezeForStabilization","smoothCurves","dynamic","roundness","maxVelocity","minVelocity","stabilize","stabilizationIterations","dragNetwork","dragNodes","hideEdgesOnDrag","hideNodesOnDrag","constants","pixelRatio","hoverObj","controlNodesActive","navigationHammers","existing","_new","animationSpeed","animationEasingFunction","easingTime","sourceScale","targetScale","sourceTranslation","targetTranslation","lockedOnNodeId","lockedOnNodeOffset","touchTime","images","setOnloadCallback","_redraw","xIncrement","yIncrement","zoomIncrement","_loadPhysicsSystem","_loadSectorSystem","_loadClusterSystem","_loadSelectionSystem","_loadHierarchySystem","_setTranslation","freezeSimulation","cachedFunctions","startedStabilization","stabilized","draggingNodes","calculationNodes","calculationNodeIndices","nodeIndices","canvasTopLeft","canvasBottomRight","pointerPosition","areaCenter","previousScale","nodesData","edgesData","nodesListeners","_addNodes","_updateNodes","_removeNodes","edgesListeners","_addEdges","_updateEdges","_removeEdges","moving","timer","_setupHierarchicalLayout","zoomExtent","startWithClustering","keycharm","MixinLoader","Activator","_getScriptPath","scripts","getElementsByTagName","src","_getRange","node","minY","maxY","minX","maxX","nodeId","_findCenter","animationOptions","initialZoom","disableStart","zoomLevel","numberOfNodes","factor","yDistance","xZoomLevel","yZoomLevel","animation","_updateNodeIndexList","_clearNodeIndexList","idx","dotData","DOTToGraph","gephi","gephiData","parseGephi","_setNodes","_setEdges","_putDataInSector","_resetLevels","_stabilize","onEdit","onEditEdge","onConnect","onDelete","editMode","newColorObj","groupname","clickToUse","activator","_createKeyBinds","_loadNavigationControls","_loadManipulationSystem","_configureSmoothCurves","devicePixelRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","backingStorePixelRatio","setTransform","pinch","_onTap","_onDoubleTap","_onMouseMoveTitle","hammerFrame","_onRelease","reset","isActive","_moveUp","_yStopMoving","_moveDown","_moveLeft","_xStopMoving","_moveRight","_zoomIn","_stopZoom","_zoomOut","_createManipulatorBar","_deleteSelected","_getPointer","pinched","_getScale","_handleTouch","_handleDragStart","_getNodeAt","_getTranslation","isSelected","_selectObject","nodeIds","objectId","selectionObj","xFixed","yFixed","_handleOnDrag","releaseNode","_XconvertDOMtoCanvas","_XconvertCanvasToDOM","_YconvertDOMtoCanvas","_YconvertCanvasToDOM","_handleDragEnd","_handleTap","_handleDoubleTap","_handleOnHold","_handleOnRelease","_zoom","scaleOld","preScaleDragPointer","DOMtoCanvas","scaleFrac","tx","ty","updateClustersDefault","postScaleDragPointer","canvasToDOM","popupObj","_checkHidePopup","checkShow","_checkShowPopup","popupTimer","edgeId","_getEdgeAt","_hoverObject","_blurObject","lastPopupNode","getTitle","isOverlappingWith","edge","connected","popup","setPosition","setText","emitEvent","oldWidth","oldHeight","oldNodesData","_updateSelection","angle","_updateCalculationNodes","_reconnectEdges","_updateValueRange","updateLabels","changedData","setProperties","properties","oldEdgesData","oldEdge","disconnect","showInternalIds","_createBezierNodes","via","sectors","dynamicEdges","setValueRange","w","save","translate","_doInAllSectors","restore","offsetX","offsetY","_drawNodes","alwaysShow","setScaleAndPos","inArea","sMax","_drawEdges","_drawControlNodes","_freezeDefinedNodes","_physicsTick","_restoreFrozenNodes","fixedData","_isMoving","vmin","isMoving","_discreteStepNodes","nodesPresent","discreteStepLimited","discreteStep","vminCorrected","mainMovingStatus","supportMovingStatus","_doInAllActiveSectors","mainMoving","_doInSupportSector","_animationStep","_handleNavigation","calculationTime","maxSteps","timeRequired","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","ua","toLowerCase","requiresTimeout","iterations","toggleFreeze","parentEdgeId","internalMultiplier","positionBezierNode","mixin","storePosition","storePositions","dataArray","allowedToMoveX","allowedToMoveY","getPositions","focusOnNode","nodePosition","lockedOnNode","easingFunction","animateView","locked","_transitionRedraw","viewCenter","distanceFromCenter","_classicRedraw","_lockedRedraw","active","getScale","getCenterCoordinates","networkConstants","fromId","toId","widthSelected","labelDimensions","yLine","dirtyLabel","fromBackup","toBackup","originalFromId","originalToId","widthFixed","lengthFixed","controlNodesEnabled","controlNodes","positions","connectedNode","_drawLine","_drawArrow","_drawArrowCenter","_drawDashLine","attachEdge","detachEdge","xFrom","yFrom","xTo","yTo","xObj","yObj","_getDistanceToEdge","_getColor","colorObj","_getLineWidth","_line","midpointX","midpointY","_pointOnLine","_label","resize","_circle","_pointOnCircle","networkScaleInv","_getViaCoordinates","xVia","yVia","quadraticCurveTo","lineCount","measureText","fillRect","mozDash","setLineDash","pattern","lineDashOffset","mozDashOffset","lineCap","dashedLine","percentage","atan2","arrow","edgeSegmentLength","fromBorderDist","distanceToBorder","fromBorderPoint","toBorderDist","toBorderPoint","x1","y1","x2","y2","x3","y3","lastX","lastY","minDistance","_getDistanceToLine","px","py","something","u","nodeIdFrom","nodeIdTo","getControlNodePositions","_enableControlNodes","_disableControlNodes","_getSelectedControlNode","fromDistance","toDistance","_restoreControlNodes","defaultIndex","DEFAULT","load","url","brokenUrl","img","Image","onload","onerror","imagelist","grouplist","reroutedEdges","fontDrawThreshold","horizontalAlignLeft","verticalAlignTop","baseRadiusValue","radiusFixed","preassignedLevel","hierarchyEnumerated","fx","fy","vx","vy","resetCluster","dynamicEdgesLength","clusterSession","clusterSizeWidthFactor","clusterSizeHeightFactor","clusterSizeRadiusFactor","growthIndicator","networkScale","formationScale","clusterSize","containedNodes","containedEdges","clusterSessions","originalLabel","triggerFunction","groupObj","imageObj","brokenImage","_drawDatabase","_resizeDatabase","_drawBox","_resizeBox","_drawCircle","_resizeCircle","_drawEllipse","_resizeEllipse","_drawImage","_resizeImage","_drawText","_resizeText","_drawDot","_resizeShape","_drawSquare","_drawTriangle","_drawTriangleDown","_drawStar","_reset","clearSizeCache","_setForce","_addForce","isFixed","velocity","getDistance","globalAlpha","drawImage","textSize","getTextSize","clusterLineWidth","selectionLineWidth","roundRect","database","diameter","circle","defaultSize","ellipse","_drawShape","radiusMultiplier","baseline","labelUnderNode","inView","clearVelocity","updateVelocity","massBeforeClustering","energyBefore","styleAttr","fontFamily","WebkitBorderRadius","whiteSpace","parseDOT","parseGraph","nextPreview","isAlphaNumeric","regexAlphaNumeric","merge","o","addNode","graphs","attr","addEdge","createEdge","getToken","tokenType","TOKENTYPE","NULL","token","isComment","DELIMITER","c2","DELIMITERS","IDENTIFIER","newSyntaxError","UNKNOWN","chop","strict","parseStatements","parseStatement","subgraph","parseSubgraph","parseEdge","parseAttributeStatement","parseNodeStatement","subgraphs","parseAttributeList","message","maxLength","forEach2","array1","array2","elem1","elem2","graphData","dotNode","graphNode","convertEdge","dotEdge","graphEdge","subEdge","{","}","[","]",";","=",",","->","--","gephiJSON","allowedToMove","gEdges","gNodes","gEdge","source","gNode","leftContainer","rightContainer","shadowTop","shadowBottom","shadowTopLeft","shadowBottomLeft","shadowTopRight","shadowBottomRight","_redrawTimer","listeners","events","scrollTopMin","redrawCount","_initAutoResize","component","_stopAutoResize","what","getWindow","borderRootHeight","borderRootWidth","autoHeight","centerWidth","_updateScrollTop","visibilityTop","visibilityBottom","MAX_REDRAWS","repaint","_startAutoResize","_onResize","lastHeight","watchTimer","setInterval","initialScrollTop","oldScrollTop","_getScrollTop","newScrollTop","_setScrollTop","eventType","getTouchList","collectEventData","custom","back","editNode","addDescription","edgeDescription","editEdgeDescription","createEdgeError","deleteClusterError","CanvasRenderingContext2D","square","s2","ir","triangleDown","star","n","r2d","kappa","ox","oy","xe","ye","xm","ym","bezierCurveTo","wEllipse","hEllipse","ymb","yeb","xt","yt","xi","yi","xl","yl","xr","yr","dashArray","dashLength","dashCount","slope","distRemaining","dashIndex","_catmullRom","_linear","dFill","_catmullRomUniform","p0","p1","p2","p3","bp1","bp2","normalization","d1","d2","d3","A","N","M","d3powA","d2powA","d3pow2A","d2pow2A","d1pow2A","d1powA","Bargraph","barCombinedData","coreDistance","drawData","combinedData","intersections","barPoints","_getDataIntersections","heightOffset","_getSafeDrawData","nextKey","amount","resolved","prevKey","accumulated","groupLabel","_getStackedBarYRange","xpos","PhysicsMixin","ClusterMixin","SectorsMixin","SelectionMixin","ManipulationMixin","NavigationMixin","HierarchicalLayoutMixin","_loadMixin","sourceVariable","mixinFunction","_clearMixin","_loadSelectedForceSolver","_loadPhysicsConfiguration","hubThreshold","activeSector","drawingNode","blockConnectingEdgeSelection","forceAppendSelection","manipulationDiv","editModeDiv","closeDiv","_cleanNavigation","_loadNavigationElements","overlay","_onTapOverlay","windowHammer","_hasParent","deactivate","escListener","activate","unbind","_callbacks","once","self","removeListener","removeAllListeners","callbacks","cb","hasListeners","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","_exportFunctions","_bound","keydown","keyup","_keys","fromCharCode","code","down","handleEvent","up","keyCode","bound","bindAll","getKey","newBindings","global","dfl","hasOwnProp","defaultParsingFlags","empty","unusedTokens","unusedInput","charsLeftOver","nullInput","invalidMonth","invalidFormat","userInvalidated","iso","printMsg","msg","suppressDeprecationWarnings","warn","deprecate","firstTime","deprecateSimple","deprecations","padToken","func","leftZeroFill","ordinalizeToken","period","localeData","ordinal","Locale","Moment","config","skipOverflow","checkOverflow","copyConfig","Duration","normalizedInput","normalizeObjectUnits","years","quarters","quarter","months","weeks","week","days","hour","minute","second","millisecond","_milliseconds","_days","_months","_locale","_bubble","val","_isAMomentObject","_i","_f","_l","_strict","_tzm","_isUTC","_offset","_pf","momentProperties","absRound","number","targetLength","forceSign","output","positiveMomentsDifference","base","res","isAfter","momentsDifference","makeAs","isBefore","createAdder","dur","tmp","addOrSubtractDurationFromMoment","mom","isAdding","updateOffset","setTime","rawSetter","rawGetter","rawMonthSetter","input","compareArrays","dontConvert","lengthDiff","diffs","toInt","normalizeUnits","units","lowered","unitAliases","camelFunctions","inputObject","normalizedProp","makeList","setter","getter","results","utc","set","argumentForCoercion","coercedNumber","isFinite","daysInMonth","UTC","getUTCDate","weeksInYear","dow","doy","weekOfYear","daysInYear","isLeapYear","_a","DATE","_overflowDayOfYear","isValid","_isValid","getTime","bigHour","normalizeLocale","chooseLocale","names","loadLocale","oldLocale","hasModule","model","local","removeFormattingTokens","makeFormatFunction","formattingTokens","formatTokenFunctions","formatMoment","expandFormat","formatFunctions","invalidDate","replaceLongDateFormatTokens","longDateFormat","localFormattingTokens","lastIndex","getParseRegexForToken","parseTokenOneDigit","parseTokenThreeDigits","parseTokenFourDigits","parseTokenOneToFourDigits","parseTokenSignedNumber","parseTokenSixDigits","parseTokenOneToSixDigits","parseTokenTwoDigits","parseTokenOneToThreeDigits","parseTokenWord","_meridiemParse","parseTokenOffsetMs","parseTokenTimestampMs","parseTokenTimezone","parseTokenT","parseTokenDigits","parseTokenOneOrTwoDigits","_ordinalParse","_ordinalParseLenient","RegExp","regexpEscape","unescapeFormat","timezoneMinutesFromString","string","possibleTzMatches","tzChunk","parseTimezoneChunker","addTimeToArrayFromToken","datePartArray","monthsParse","_dayOfYear","parseTwoDigitYear","_isPm","isPM","_useUTC","weekdaysParse","_w","invalidWeekday","dayOfYearFromWeekInfo","weekYear","weekday","temp","GG","W","E","_week","gg","dayOfYearFromWeeks","dateFromConfig","currentDate","yearToUse","currentDateArray","makeUTCDate","getUTCMonth","_nextDay","makeDate","setUTCMinutes","getUTCMinutes","dateFromObject","getUTCFullYear","makeDateFromStringAndFormat","ISO_8601","parseISO","parsedInput","tokens","skipped","stringLength","totalParsedInputLength","matched","p4","makeDateFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","NaN","score","l","isoRegex","isoDates","isoTimes","makeDateFromString","createFromInputFallback","makeDateFromInput","aspNetJsonRegex","ms","setUTCFullYear","parseWeekday","substituteTimeAgo","withoutSuffix","isFuture","relativeTime","posNegDuration","relativeTimeThresholds","firstDayOfWeek","firstDayOfWeekOfYear","adjustedMoment","daysToDayOfWeek","daysToAdd","getUTCDay","makeMoment","invalid","preparse","pickBy","moments","dayOfMonth","unit","makeAccessor","keepTime","daysToYears","yearsToDays","makeDurationGetter","makeGlobal","shouldDeprecate","ender","oldGlobalMoment","globalScope","VERSION","aspNetTimeSpanJsonRegex","isoDurationRegex","isoFormat","unitMillisecondFactors","Milliseconds","Seconds","Minutes","Hours","Days","Months","Years","D","Q","DDD","dayofyear","isoweekday","isoweek","weekyear","isoweekyear","ordinalizeTokens","paddedTokens","MMM","monthsShort","MMMM","dd","weekdaysMin","ddd","weekdaysShort","dddd","weekdays","isoWeek","YY","YYYY","YYYYY","YYYYYY","gggg","ggggg","isoWeekYear","GGGG","GGGGG","isoWeekday","meridiem","SS","SSS","SSSS","Z","zone","ZZ","zoneAbbr","zz","zoneName","unix","lists","DDDD","_monthsShort","monthName","regex","_monthsParse","_longMonthsParse","_shortMonthsParse","_weekdays","_weekdaysShort","_weekdaysMin","weekdayName","_weekdaysParse","_longDateFormat","LTS","LT","L","LL","LLL","LLLL","isLower","_calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","calendar","_relativeTime","future","past","mm","hh","MM","yy","pastFuture","_ordinal","postformat","_invalidDate","ret","parseIso","diffRes","isDuration","inp","version","defaultFormat","relativeTimeThreshold","threshold","limit","defineLocale","_abbr","abbr","langData","flags","parseZone","isDSTShifted","parsingFlags","invalidAt","keepLocalTime","_dateTzOffset","inputString","asFloat","daysAdjust","that","zoneDiff","startOf","humanize","fromNow","sod","isDST","getDay","endOf","inputMs","isSame","localAdjust","_changeInProgress","hasAlignedHourOffset","isoWeeksInYear","weekInfo","newLocaleData","getTimezoneOffset","isoWeeks","toJSON","withSuffix","toIsoString","asSeconds","asMilliseconds","asMinutes","asHours","asDays","asWeeks","asMonths","asYears","ordinalParse","require","noGlobal","setup","READY","Event","determineEventTypes","Utils","each","gestures","Detection","register","onTouch","DOCUMENT","EVENT_MOVE","detect","EVENT_END","Instance","defaults","behavior","userSelect","touchAction","touchCallout","contentZooming","userDrag","tapHighlightColor","HAS_POINTEREVENTS","pointerEnabled","msPointerEnabled","HAS_TOUCHEVENTS","IS_MOBILE","NO_MOUSEEVENTS","CALCULATE_INTERVAL","EVENT_TYPES","DIRECTION_DOWN","DIRECTION_LEFT","DIRECTION_UP","DIRECTION_RIGHT","POINTER_MOUSE","POINTER_TOUCH","POINTER_PEN","EVENT_START","EVENT_RELEASE","EVENT_TOUCH","plugins","utils","dest","handler","iterator","inStr","find","inArray","hasParent","getCenter","getVelocity","deltaTime","getAngle","touch1","touch2","getDirection","getRotation","isVertical","setPrefixedCss","toggle","prefixes","toCamelCase","toggleBehavior","falseFn","onselectstart","ondragstart","str","preventMouseEvents","started","shouldDetect","hook","onTouchHandler","ev","triggerType","srcType","isPointer","isMouse","buttons","PointerEvent","matchType","updatePointer","doDetect","touchList","touchListLength","triggerChange","trigger","changedLength","changedTouches","evData","identifiers","identifier","pointerType","timeStamp","preventManipulation","stopDetect","pointers","touchlist","pointerEvent","pointerId","pt","MSPOINTER_TYPE_MOUSE","MSPOINTER_TYPE_TOUCH","MSPOINTER_TYPE_PEN","detection","stopped","startDetect","inst","eventData","startEvent","lastEvent","lastCalcEvent","futureCalcEvent","lastCalcData","extendEventData","instOptions","getCalculatedData","recalc","calcEv","calcData","velocityX","velocityY","interimAngle","interimDirection","startEv","lastEv","rotation","eventStartHandler","eventHandlers","createEvent","initEvent","dispatchEvent","state","dispose","eh","dragGesture","dragMaxTouches","triggered","dragMinDistance","startCenter","dragDistanceCorrection","dragLockToAxis","dragLockMinDistance","lastDirection","dragBlockVertical","dragBlockHorizontal","Drag","Gesture","holdGesture","holdTimeout","holdThreshold","Hold","Release","Swipe","swipeMinTouches","swipeMaxTouches","swipeVelocityX","swipeVelocityY","tapGesture","sincePrev","didDoubleTap","hasMoved","tapMaxDistance","tapMaxTime","doubleTapInterval","doubleTapDistance","tapAlways","Tap","Touch","preventMouse","transformGesture","scaleThreshold","rotationThreshold","transformMinScale","transformMinRotation","Transform","clusterToFit","maxNumberOfNodes","reposition","maxLevels","forceAggregateHubs","normalizeClusterLevels","increaseClusterLevel","repositionNodes","openCluster","isMovingBeforeClustering","_nodeInActiveArea","_sector","_addSector","decreaseClusterLevel","_expandClusterNode","_updateDynamicEdges","updateClusters","zoomDirection","recursive","doNotStart","amountOfNodes","_collapseSector","_formClusters","_openClusters","_openClustersBySize","_aggregateHubs","handleChains","chainPercentage","_getChainFraction","_reduceAmountOfChains","_getHubSize","_formClustersByHub","openAll","containedNodeId","childNode","_expelChildFromParent","_unselectAll","_releaseContainedEdges","_connectEdgeBackToChild","_validateEdges","othersPresent","childNodeId","_repositionBezierNodes","_formClustersByZoom","_forceClustersByZoom","minLength","_addToCluster","_clusterToSmallestNeighbour","smallestNeighbour","smallestNeighbourNode","neighbour","onlyEqual","_formClusterFromHub","hubNode","absorptionSizeOffset","allowCluster","edgesIdarray","amountOfInitialEdges","_addToContainedEdges","_connectEdgeToCluster","_containCircularEdgesFromNode","massBefore","correction","edgeToId","edgeFromId","k","_addToReroutedEdges","maxLevel","minLevel","clusterLevel","targetLevel","average","averageSquared","hubCounter","largestHub","variance","standardDeviation","fraction","reduceAmount","chains","total","_switchToSector","sectorId","sectorType","_switchToActiveSector","_switchToFrozenSector","_switchToSupportSector","_loadLatestSector","_previousSector","_setActiveSector","newId","_forgetLastSector","_createNewSector","_deleteActiveSector","_deleteFrozenSector","_freezeSector","_activateSector","_mergeThisWithFrozen","_collapseThisToSingleCluster","sector","unqiueIdentifier","previousSector","runFunction","argument","returnValues","_doInAllFrozenSectors","_drawSectorNodes","_drawAllSectorNodes","_getNodesOverlappingWith","overlappingNodes","_getAllNodesOverlappingWith","_pointerToPositionObject","positionObject","_getEdgesOverlappingWith","overlappingEdges","_getAllEdgesOverlappingWith","_addToSelection","_addToHover","_removeFromSelection","doNotTrigger","_unselectClusters","_getSelectedNodeCount","_getSelectedNode","_getSelectedEdge","_getSelectedEdgeCount","_getSelectedObjectCount","_selectionIsEmpty","_clusterInSelection","_selectConnectedEdges","_hoverConnectedEdges","_unselectConnectedEdges","append","highlightEdges","overrideSelectable","DOM","_manipulationReleaseOverload","_navigationReleaseOverload","getSelectedNodes","edgeIds","getSelectedEdges","idArray","selectNodes","RangeError","selectEdges","_clearManipulatorBar","manipulationDOM","_restoreOverloadedFunctions","functionName","_toggleEditMode","toolbar","boundFunction","edgeBeingEdited","selectedControlNode","_createAddNodeToolbar","_createAddEdgeToolbar","_editNode","_createEditEdgeToolbar","_addNode","_handleConnect","_finishConnect","_selectControlNode","_controlNodeDrag","_releaseControlNode","newNode","_editEdge","alert","supportNodes","targetNode","connectionEdge","connectFromId","_createEdge","defaultData","finalizedData","sourceNodeId","targetNodeId","selectedNodes","selectedEdges","navigationDivs","navigationDivActions","_stopMovement","_zoomExtent","hubsize","definedLevel","undefinedLevel","_changeConstants","_determineLevels","_determineLevelsDirected","distribution","_getDistribution","_placeNodesByHierarchy","minPos","_placeBranchNodes","maxCount","_setLevel","_setLevelDirected","parentId","parentLevel","nodeMoved","_restoreNodes","graphToggleSmoothCurves","graph_toggleSmooth","getElementById","graphRepositionNodes","showValueOfRange","graphGenerateOptions","optionsSpecific","radioButton1","radioButton2","checked","backupConstants","optionsDiv","switchConfigurations","radioButton","querySelector","tableId","table","constantsVariableName","valueId","rangeValue","_overWriteGraphConstants","RepulsionMixin","HierarchialRepulsionMixin","BarnesHutMixin","_toggleBarnesHut","barnesHutTree","_initializeForceCalculation","_calculateForces","_calculateGravitationalForces","_calculateNodeForces","_calculateSpringForcesWithSupport","_calculateHierarchicalSpringForces","_calculateSpringForces","supportNodeId","gravity","gravityForce","edgeLength","springForce","combinedClusterSize","node1","node2","node3","_calculateSpringForce","physicsConfiguration","hierarchicalLayoutDirections","parentElement","rangeElement","radioButton3","graph_repositionNodes","graph_generateOptions","dynamicSmoothCurves","nameArray","webpackContext","req","resolve","repulsingForce","a_base","minimumDistance","steepness","springFx","springFy","totalFx","totalFy","correctionFx","correctionFy","nodeCount","_formBarnesHutTree","_getForceContribution","children","NW","NE","SW","SE","parentBranch","childrenCount","centerOfMass","calcSize","MAX_VALUE","sizeDiff","minimumTreeSize","rootSize","halfRootSize","centerX","centerY","_splitBranch","_placeInTree","_updateBranchMass","totalMass","totalMassInv","biggestSize","skipMassUpdate","_placeInRegion","region","containedNode","_insertRegion","childSize","_drawTree","_drawBranch","branch","webpackPolyfill","paths"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAyBA,cAEA,SAA2CA,EAAMC,GAC1B,gBAAZC,UAA0C,gBAAXC,QACxCA,OAAOD,QAAUD,IACQ,kBAAXG,SAAyBA,OAAOC,IAC9CD,OAAOH,GACmB,gBAAZC,SACdA,QAAa,IAAID,IAEjBD,EAAU,IAAIC,KACbK,KAAM,WACT,MAAgB,UAAUC,GAKhB,QAASC,GAAoBC,GAG5B,GAAGC,EAAiBD,GACnB,MAAOC,GAAiBD,GAAUP,OAGnC,IAAIC,GAASO,EAAiBD,IAC7BP,WACAS,GAAIF,EACJG,QAAQ,EAUT,OANAL,GAAQE,GAAUI,KAAKV,EAAOD,QAASC,EAAQA,EAAOD,QAASM,GAG/DL,EAAOS,QAAS,EAGTT,EAAOD,QAvBf,GAAIQ,KAqCJ,OATAF,GAAoBM,EAAIP,EAGxBC,EAAoBO,EAAIL,EAGxBF,EAAoBQ,EAAI,GAGjBR,EAAoB,KAK/B,SAASL,EAAQD,EAASM,GAG9BN,EAAQe,KAAOT,EAAoB,GACnCN,EAAQgB,QAAUV,EAAoB,GAGtCN,EAAQiB,QAAUX,EAAoB,GACtCN,EAAQkB,SAAWZ,EAAoB,GACvCN,EAAQmB,MAAQb,EAAoB,GAGpCN,EAAQoB,QAAUd,EAAoB,GACtCN,EAAQqB,SACNC,OAAQhB,EAAoB,GAC5BiB,OAAQjB,EAAoB,GAC5BkB,QAASlB,EAAoB,GAC7BmB,QAASnB,EAAoB,IAC7BoB,OAAQpB,EAAoB,IAC5BqB,WAAYrB,EAAoB,KAIlCN,EAAQ4B,SAAWtB,EAAoB,IACvCN,EAAQ6B,QAAUvB,EAAoB,IACtCN,EAAQ8B,UACNC,SAAUzB,EAAoB,IAC9B0B,SAAU1B,EAAoB,IAC9B2B,MAAO3B,EAAoB,IAC3B4B,MAAO5B,EAAoB,IAC3B6B,SAAU7B,EAAoB,IAE9B8B,YACEC,OACEC,KAAMhC,EAAoB,IAC1BiC,eAAgBjC,EAAoB,IACpCkC,QAASlC,EAAoB,IAC7BmC,UAAWnC,EAAoB,IAC/BoC,UAAWpC,EAAoB,KAGjCqC,UAAWrC,EAAoB,IAC/BsC,YAAatC,EAAoB,IACjCuC,WAAYvC,EAAoB,IAChCwC,SAAUxC,EAAoB,IAC9ByC,WAAYzC,EAAoB,IAChC0C,MAAO1C,EAAoB,IAC3B2C,gBAAiB3C,EAAoB,IACrC4C,QAAS5C,EAAoB,IAC7B6C,OAAQ7C,EAAoB,IAC5B8C,UAAW9C,EAAoB,IAC/B+C,SAAU/C,EAAoB,MAKlCN,EAAQsD,QAAUhD,EAAoB,IACtCN,EAAQuD,SACNC,KAAMlD,EAAoB,IAC1BmD,OAAQnD,EAAoB,IAC5BoD,OAAQpD,EAAoB,IAC5BqD,KAAMrD,EAAoB,IAC1BsD,MAAOtD,EAAoB,IAC3BuD,UAAWvD,EAAoB,IAC/BwD,YAAaxD,EAAoB,KAInCN,EAAQ+D,MAAQ,WACd,KAAM,IAAIC,OAAM,+EAIlBhE,EAAQiE,OAAS3D,EAAoB,IACrCN,EAAQkE,OAAS5D,EAAoB,KAKjC,SAASL,OAAQD,QAASM,qBAM9B,GAAI2D,QAAS3D,oBAAoB,GAOjCN,SAAQmE,SAAW,SAASC,GAC1B,MAAQA,aAAkBC,SAA2B,gBAAVD,IAQ7CpE,QAAQsE,SAAW,SAASF,GAC1B,MAAQA,aAAkBG,SAA2B,gBAAVH,IAQ7CpE,QAAQwE,OAAS,SAASJ,GACxB,GAAIA,YAAkBK,MACpB,OAAO,CAEJ,IAAIzE,QAAQsE,SAASF,GAAS,CAEjC,GAAIM,GAAQC,aAAaC,KAAKR,EAC9B,IAAIM,EACF,OAAO,CAEJ,KAAKG,MAAMJ,KAAKK,MAAMV,IACzB,OAAO,EAIX,OAAO,GAQTpE,QAAQ+E,YAAc,SAASX,GAC7B,MAA4B,mBAAb,SACVY,OAAoB,eACpBA,OAAOC,cAAuB,WAC9Bb,YAAkBY,QAAOC,cAAcC,WAQ9ClF,QAAQmF,WAAa,WACnB,GAAIC,GAAK,WACP,MAAOC,MAAKC,MACQ,MAAhBD,KAAKE,UACPC,SAAS,IAGb,OACIJ,KAAOA,IAAO,IACVA,IAAO,IACPA,IAAO,IACPA,IAAO,IACPA,IAAOA,IAAOA,KAWxBpF,QAAQyF,OAAS,SAAUC,GACzB,IAAK,GAAIC,GAAI,EAAGC,EAAMC,UAAUC,OAAYF,EAAJD,EAASA,IAAK,CACpD,GAAII,GAAQF,UAAUF,EACtB,KAAK,GAAIK,KAAQD,GACXA,EAAME,eAAeD,KACvBN,EAAEM,GAAQD,EAAMC,IAKtB,MAAON,IAWT1F,QAAQkG,gBAAkB,SAAUC,EAAOT,GACzC,IAAKU,MAAMC,QAAQF,GACjB,KAAM,IAAInC,OAAM,uDAGlB,KAAK,GAAI2B,GAAI,EAAGA,EAAIE,UAAUC,OAAQH,IAGpC,IAAK,GAFDI,GAAQF,UAAUF,GAEb7E,EAAI,EAAGA,EAAIqF,EAAML,OAAQhF,IAAK,CACrC,GAAIkF,GAAOG,EAAMrF,EACbiF,GAAME,eAAeD,KACvBN,EAAEM,GAAQD,EAAMC,IAItB,MAAON,IAWT1F,QAAQsG,oBAAsB,SAAUH,EAAOT,EAAGa,GAEhD,GAAIH,MAAMC,QAAQE,GAChB,KAAM,IAAIC,WAAU,yCAEtB,KAAK,GAAIb,GAAI,EAAGA,EAAIE,UAAUC,OAAQH,IAEpC,IAAK,GADDI,GAAQF,UAAUF,GACb7E,EAAI,EAAGA,EAAIqF,EAAML,OAAQhF,IAAK,CACrC,GAAIkF,GAAOG,EAAMrF,EACjB,IAAIiF,EAAME,eAAeD,GACvB,GAAIO,EAAEP,IAASO,EAAEP,GAAMS,cAAgBC,OACrBC,SAAZjB,EAAEM,KACJN,EAAEM,OAEAN,EAAEM,GAAMS,cAAgBC,OAC1B1G,QAAQ4G,WAAWlB,EAAEM,GAAOO,EAAEP,IAG9BN,EAAEM,GAAQO,EAAEP,OAET,CAAA,GAAII,MAAMC,QAAQE,EAAEP,IACzB,KAAM,IAAIQ,WAAU,yCAEpBd,GAAEM,GAAQO,EAAEP,IAMpB,MAAON,IAWT1F,QAAQ6G,uBAAyB,SAAUV,EAAOT,EAAGa,GAEnD,GAAIH,MAAMC,QAAQE,GAChB,KAAM,IAAIC,WAAU,yCAEtB,KAAK,GAAIR,KAAQO,GACf,GAAIA,EAAEN,eAAeD,IACQ,IAAvBG,EAAMW,QAAQd,GAChB,GAAIO,EAAEP,IAASO,EAAEP,GAAMS,cAAgBC,OACrBC,SAAZjB,EAAEM,KACJN,EAAEM,OAEAN,EAAEM,GAAMS,cAAgBC,OAC1B1G,QAAQ4G,WAAWlB,EAAEM,GAAOO,EAAEP,IAG9BN,EAAEM,GAAQO,EAAEP,OAET,CAAA,GAAII,MAAMC,QAAQE,EAAEP,IACzB,KAAM,IAAIQ,WAAU,yCAEpBd,GAAEM,GAAQO,EAAEP,GAKpB,MAAON,IAST1F,QAAQ4G,WAAa,SAASlB,EAAGa,GAE/B,GAAIH,MAAMC,QAAQE,GAChB,KAAM,IAAIC,WAAU,yCAGtB,KAAK,GAAIR,KAAQO,GACf,GAAIA,EAAEN,eAAeD,GACnB,GAAIO,EAAEP,IAASO,EAAEP,GAAMS,cAAgBC,OACrBC,SAAZjB,EAAEM,KACJN,EAAEM,OAEAN,EAAEM,GAAMS,cAAgBC,OAC1B1G,QAAQ4G,WAAWlB,EAAEM,GAAOO,EAAEP,IAG9BN,EAAEM,GAAQO,EAAEP,OAET,CAAA,GAAII,MAAMC,QAAQE,EAAEP,IACzB,KAAM,IAAIQ,WAAU,yCAEpBd,GAAEM,GAAQO,EAAEP,GAIlB,MAAON,IAUT1F,QAAQ+G,WAAa,SAAUrB,EAAGa,GAChC,GAAIb,EAAEI,QAAUS,EAAET,OAAQ,OAAO,CAEjC,KAAK,GAAIH,GAAI,EAAGC,EAAMF,EAAEI,OAAYF,EAAJD,EAASA,IACvC,GAAID,EAAEC,IAAMY,EAAEZ,GAAI,OAAO,CAG3B,QAAO,GAYT3F,QAAQgH,QAAU,SAAS5C,EAAQ6C,GACjC,GAAIvC,EAEJ,IAAeiC,SAAXvC,EACF,MAAOuC,OAET,IAAe,OAAXvC,EACF,MAAO,KAGT,KAAK6C,EACH,MAAO7C,EAET,IAAsB,gBAAT6C,MAAwBA,YAAgB1C,SACnD,KAAM,IAAIP,OAAM,wBAIlB,QAAQiD,GACN,IAAK,UACL,IAAK,UACH,MAAOC,SAAQ9C,EAEjB,KAAK,SACL,IAAK,SACH,MAAOC,QAAOD,EAAO+C,UAEvB,KAAK,SACL,IAAK,SACH,MAAO5C,QAAOH,EAEhB,KAAK,OACH,GAAIpE,QAAQmE,SAASC,GACnB,MAAO,IAAIK,MAAKL,EAElB,IAAIA,YAAkBK,MACpB,MAAO,IAAIA,MAAKL,EAAO+C,UAEpB,IAAIlD,OAAOmD,SAAShD,GACvB,MAAO,IAAIK,MAAKL,EAAO+C,UAEzB,IAAInH,QAAQsE,SAASF,GAEnB,MADAM,GAAQC,aAAaC,KAAKR,GACtBM,EAEK,GAAID,MAAKJ,OAAOK,EAAM,KAGtBT,OAAOG,GAAQiD,QAIxB,MAAM,IAAIrD,OACN,iCAAmChE,QAAQsH,QAAQlD,GAC/C,gBAGZ,KAAK,SACH,GAAIpE,QAAQmE,SAASC,GACnB,MAAOH,QAAOG,EAEhB,IAAIA,YAAkBK,MACpB,MAAOR,QAAOG,EAAO+C,UAElB,IAAIlD,OAAOmD,SAAShD,GACvB,MAAOH,QAAOG,EAEhB,IAAIpE,QAAQsE,SAASF,GAEnB,MADAM,GAAQC,aAAaC,KAAKR,GAGjBH,OAFLS,EAEYL,OAAOK,EAAM,IAGbN,EAIhB,MAAM,IAAIJ,OACN,iCAAmChE,QAAQsH,QAAQlD,GAC/C,gBAGZ,KAAK,UACH,GAAIpE,QAAQmE,SAASC,GACnB,MAAO,IAAIK,MAAKL,EAEb,IAAIA,YAAkBK,MACzB,MAAOL,GAAOmD,aAEX,IAAItD,OAAOmD,SAAShD,GACvB,MAAOA,GAAOiD,SAASE,aAEpB,IAAIvH,QAAQsE,SAASF,GAExB,MADAM,GAAQC,aAAaC,KAAKR,GACtBM,EAEK,GAAID,MAAKJ,OAAOK,EAAM,KAAK6C,cAG3B,GAAI9C,MAAKL,GAAQmD,aAI1B,MAAM,IAAIvD,OACN,iCAAmChE,QAAQsH,QAAQlD,GAC/C,mBAGZ,KAAK,UACH,GAAIpE,QAAQmE,SAASC,GACnB,MAAO,SAAWA,EAAS,IAExB,IAAIA,YAAkBK,MACzB,MAAO,SAAWL,EAAO+C,UAAY,IAElC,IAAInH,QAAQsE,SAASF,GAAS,CACjCM,EAAQC,aAAaC,KAAKR,EAC1B,IAAIoD,EAQJ,OALEA,GAFE9C,EAEM,GAAID,MAAKJ,OAAOK,EAAM,KAAKyC,UAG3B,GAAI1C,MAAKL,GAAQ+C,UAEpB,SAAWK,EAAQ,KAG1B,KAAM,IAAIxD,OACN,iCAAmChE,QAAQsH,QAAQlD,GAC/C,mBAGZ,SACE,KAAM,IAAIJ,OAAM,iBAAmBiD,EAAO,MAOhD,IAAItC,cAAe,qBAOnB3E,SAAQsH,QAAU,SAASlD,GACzB,GAAI6C,SAAc7C,EAElB,OAAY,UAAR6C,EACY,MAAV7C,EACK,OAELA,YAAkB8C,SACb,UAEL9C,YAAkBC,QACb,SAELD,YAAkBG,QACb,SAEL6B,MAAMC,QAAQjC,GACT,QAELA,YAAkBK,MACb,OAEF,SAEQ,UAARwC,EACA,SAEQ,WAARA,EACA,UAEQ,UAARA,EACA,SAGFA,GASTjH,QAAQyH,gBAAkB,SAASC,GACjC,MAAOA,GAAKC,wBAAwBC,KAAOC,OAAOC,aASpD9H,QAAQ+H,eAAiB,SAASL,GAChC,MAAOA,GAAKC,wBAAwBK,IAAMH,OAAOI,aAQnDjI,QAAQkI,aAAe,SAASR,EAAMS,GACpC,GAAIC,GAAUV,EAAKS,UAAUE,MAAM,IACD,KAA9BD,EAAQtB,QAAQqB,KAClBC,EAAQE,KAAKH,GACbT,EAAKS,UAAYC,EAAQG,KAAK,OASlCvI,QAAQwI,gBAAkB,SAASd,EAAMS,GACvC,GAAIC,GAAUV,EAAKS,UAAUE,MAAM,KAC/BI,EAAQL,EAAQtB,QAAQqB,EACf,KAATM,IACFL,EAAQM,OAAOD,EAAO,GACtBf,EAAKS,UAAYC,EAAQG,KAAK,OAalCvI,QAAQ2I,QAAU,SAASvE,EAAQwE,GACjC,GAAIjD,GACAC,CACJ,IAAIQ,MAAMC,QAAQjC,GAEhB,IAAKuB,EAAI,EAAGC,EAAMxB,EAAO0B,OAAYF,EAAJD,EAASA,IACxCiD,EAASxE,EAAOuB,GAAIA,EAAGvB,OAKzB,KAAKuB,IAAKvB,GACJA,EAAO6B,eAAeN,IACxBiD,EAASxE,EAAOuB,GAAIA,EAAGvB,IAY/BpE,QAAQ6I,QAAU,SAASzE,GACzB,GAAI0E,KAEJ,KAAK,GAAI9C,KAAQ5B,GACXA,EAAO6B,eAAeD,IAAO8C,EAAMR,KAAKlE,EAAO4B,GAGrD,OAAO8C,IAUT9I,QAAQ+I,eAAiB,SAAS3E,EAAQ4E,EAAKxB,GAC7C,MAAIpD,GAAO4E,KAASxB,GAClBpD,EAAO4E,GAAOxB,GACP,IAGA,GAYXxH,QAAQiJ,iBAAmB,SAASC,EAASC,EAAQC,EAAUC,GACzDH,EAAQD,kBACStC,SAAf0C,IACFA,GAAa,GAEA,eAAXF,GAA2BG,UAAUC,UAAUzC,QAAQ,YAAc,IACvEqC,EAAS,kBAGXD,EAAQD,iBAAiBE,EAAQC,EAAUC,IAE3CH,EAAQM,YAAY,KAAOL,EAAQC,IAWvCpJ,QAAQyJ,oBAAsB,SAASP,EAASC,EAAQC,EAAUC,GAC5DH,EAAQO,qBAES9C,SAAf0C,IACFA,GAAa,GAEA,eAAXF,GAA2BG,UAAUC,UAAUzC,QAAQ,YAAc,IACvEqC,EAAS,kBAGXD,EAAQO,oBAAoBN,EAAQC,EAAUC,IAG9CH,EAAQQ,YAAY,KAAOP,EAAQC,IAOvCpJ,QAAQ2J,eAAiB,SAAUC,GAC5BA,IACHA,EAAQ/B,OAAO+B,OAEbA,EAAMD,eACRC,EAAMD,iBAGNC,EAAMC,aAAc,GASxB7J,QAAQ8J,UAAY,SAASF,GAEtBA,IACHA,EAAQ/B,OAAO+B,MAGjB,IAAIG,EAcJ,OAZIH,GAAMG,OACRA,EAASH,EAAMG,OAERH,EAAMI,aACbD,EAASH,EAAMI,YAGMrD,QAAnBoD,EAAOE,UAA4C,GAAnBF,EAAOE,WAEzCF,EAASA,EAAOG,YAGXH,GAGT/J,QAAQmK,UAQRnK,QAAQmK,OAAOC,UAAY,SAAU5C,EAAO6C,GAK1C,MAJoB,kBAAT7C,KACTA,EAAQA,KAGG,MAATA,EACe,GAATA,EAGH6C,GAAgB,MASzBrK,QAAQmK,OAAOG,SAAW,SAAU9C,EAAO6C,GAKzC,MAJoB,kBAAT7C,KACTA,EAAQA,KAGG,MAATA,EACKnD,OAAOmD,IAAU6C,GAAgB,KAGnCA,GAAgB,MASzBrK,QAAQmK,OAAOI,SAAW,SAAU/C,EAAO6C,GAKzC,MAJoB,kBAAT7C,KACTA,EAAQA,KAGG,MAATA,EACKjD,OAAOiD,GAGT6C,GAAgB,MASzBrK,QAAQmK,OAAOK,OAAS,SAAUhD,EAAO6C,GAKvC,MAJoB,kBAAT7C,KACTA,EAAQA,KAGNxH,QAAQsE,SAASkD,GACZA,EAEAxH,QAAQmE,SAASqD,GACjBA,EAAQ,KAGR6C,GAAgB,MAU3BrK,QAAQmK,OAAOM,UAAY,SAAUjD,EAAO6C,GAK1C,MAJoB,kBAAT7C,KACTA,EAAQA,KAGHA,GAAS6C,GAAgB,MAKlCrK,QAAQ0K,QAAU,SAASC,KACzB,GAAIC,MAiBJ,OAdEA,OADS,KAAPD,IACM,GACM,KAAPA,IACC,GACM,KAAPA,IACC,GACM,KAAPA,IACC,GACM,KAAPA,IACC,GACM,KAAPA,IACC,GAEAE,KAAKF,MAKjB3K,QAAQ8K,QAAU,SAASC,GACzB,GAAIH,EAiBJ,OAdEA,GADQ,IAAPG,EACO,IACM,IAAPA,EACC,IACM,IAAPA,EACC,IACM,IAAPA,EACC,IACM,IAAPA,EACC,IACM,IAAPA,EACC,IAEA,GAAKA,GAWjB/K,QAAQgL,WAAa,SAASC,GAC5B,GAAIpK,EACJ,IAAIb,QAAQsE,SAAS2G,GAAQ,CAC3B,GAAIjL,QAAQkL,WAAWD,GAAQ,CAC7B,GAAIE,GAAMF,EAAMG,OAAO,GAAGA,OAAO,EAAEH,EAAMnF,OAAO,GAAGuC,MAAM,IACzD4C,GAAQjL,QAAQqL,SAASF,EAAI,GAAGA,EAAI,GAAGA,EAAI,IAE7C,GAAInL,QAAQsL,WAAWL,GAAQ,CAC7B,GAAIM,GAAMvL,QAAQwL,SAASP,GACvBQ,GAAmBC,EAAEH,EAAIG,EAAEC,EAAU,IAARJ,EAAII,EAASC,EAAEvG,KAAKwG,IAAI,EAAU,KAARN,EAAIK,IAC3DE,GAAmBJ,EAAEH,EAAIG,EAAEC,EAAEtG,KAAKwG,IAAI,EAAU,KAARN,EAAIK,GAAUA,EAAQ,GAANL,EAAIK,GAC5DG,EAAkB/L,QAAQgM,SAASF,EAAeJ,EAAGI,EAAeJ,EAAGI,EAAeF,GACtFK,EAAkBjM,QAAQgM,SAASP,EAAgBC,EAAED,EAAgBE,EAAEF,EAAgBG,EAE3F/K,IACEqL,WAAYjB,EACZkB,OAAOJ,EACPK,WACEF,WAAWD,EACXE,OAAOJ,GAETM,OACEH,WAAWD,EACXE,OAAOJ,QAKXlL,IACEqL,WAAWjB,EACXkB,OAAOlB,EACPmB,WACEF,WAAWjB,EACXkB,OAAOlB,GAEToB,OACEH,WAAWjB,EACXkB,OAAOlB,QAMbpK,MACAA,EAAEqL,WAAajB,EAAMiB,YAAc,QACnCrL,EAAEsL,OAASlB,EAAMkB,QAAUtL,EAAEqL,WAEzBlM,QAAQsE,SAAS2G,EAAMmB,WACzBvL,EAAEuL,WACAD,OAAQlB,EAAMmB,UACdF,WAAYjB,EAAMmB,YAIpBvL,EAAEuL,aACFvL,EAAEuL,UAAUF,WAAajB,EAAMmB,WAAanB,EAAMmB,UAAUF,YAAcrL,EAAEqL,WAC5ErL,EAAEuL,UAAUD,OAASlB,EAAMmB,WAAanB,EAAMmB,UAAUD,QAAUtL,EAAEsL,QAGlEnM,QAAQsE,SAAS2G,EAAMoB,OACzBxL,EAAEwL,OACAF,OAAQlB,EAAMoB,MACdH,WAAYjB,EAAMoB,QAIpBxL,EAAEwL,SACFxL,EAAEwL,MAAMH,WAAajB,EAAMoB,OAASpB,EAAMoB,MAAMH,YAAcrL,EAAEqL,WAChErL,EAAEwL,MAAMF,OAASlB,EAAMoB,OAASpB,EAAMoB,MAAMF,QAAUtL,EAAEsL,OAI5D,OAAOtL,IASTb,QAAQsM,SAAW,SAASC,GAC1BA,EAAMA,EAAIC,QAAQ,IAAI,IAAIC,aAE1B,IAAI/G,GAAI1F,QAAQ0K,QAAQ6B,EAAIG,UAAU,EAAG,IACrCnG,EAAIvG,QAAQ0K,QAAQ6B,EAAIG,UAAU,EAAG,IACrC7L,EAAIb,QAAQ0K,QAAQ6B,EAAIG,UAAU,EAAG,IACrCC,EAAI3M,QAAQ0K,QAAQ6B,EAAIG,UAAU,EAAG,IACrCE,EAAI5M,QAAQ0K,QAAQ6B,EAAIG,UAAU,EAAG,IACrCG,EAAI7M,QAAQ0K,QAAQ6B,EAAIG,UAAU,EAAG,IAErCI,EAAS,GAAJpH,EAAUa,EACfwG,EAAS,GAAJlM,EAAU8L,EACfpG,EAAS,GAAJqG,EAAUC,CAEnB,QAAQC,EAAEA,EAAEC,EAAEA,EAAExG,EAAEA,IAGpBvG,QAAQqL,SAAW,SAAS2B,EAAIC,EAAMC,GACpC,GAAIxH,GAAI1F,QAAQ8K,QAAQzF,KAAKC,MAAM0H,EAAM,KACrCzG,EAAIvG,QAAQ8K,QAAQkC,EAAM,IAC1BnM,EAAIb,QAAQ8K,QAAQzF,KAAKC,MAAM2H,EAAQ,KACvCN,EAAI3M,QAAQ8K,QAAQmC,EAAQ,IAC5BL,EAAI5M,QAAQ8K,QAAQzF,KAAKC,MAAM4H,EAAO,KACtCL,EAAI7M,QAAQ8K,QAAQoC,EAAO,IAE3BX,EAAM7G,EAAIa,EAAI1F,EAAI8L,EAAIC,EAAIC,CAC9B,OAAO,IAAMN,GAafvM,QAAQmN,SAAW,SAASH,EAAIC,EAAMC,GACpCF,GAAQ,IAAKC,GAAY,IAAKC,GAAU,GACxC,IAAIE,GAAS/H,KAAKwG,IAAImB,EAAI3H,KAAKwG,IAAIoB,EAAMC,IACrCG,EAAShI,KAAKiI,IAAIN,EAAI3H,KAAKiI,IAAIL,EAAMC,GAGzC,IAAIE,GAAUC,EACZ,OAAQ3B,EAAE,EAAEC,EAAE,EAAEC,EAAEwB,EAIpB,IAAIT,GAAKK,GAAKI,EAAUH,EAAMC,EAASA,GAAME,EAAUJ,EAAIC,EAAQC,EAAKF,EACpEtB,EAAKsB,GAAKI,EAAU,EAAMF,GAAME,EAAU,EAAI,EAC9CG,EAAM,IAAI7B,EAAIiB,GAAGU,EAASD,IAAS,IACnCI,GAAcH,EAASD,GAAQC,EAC/B7F,EAAQ6F,CACZ,QAAQ3B,EAAE6B,EAAI5B,EAAE6B,EAAW5B,EAAEpE,GAG/B,IAAIiG,UAEFpF,MAAO,SAAUqF,GACf,GAAIC,KAWJ,OATAD,GAAQrF,MAAM,KAAKM,QAAQ,SAAUiF,GACnC,GAAoB,IAAhBA,EAAMC,OAAc,CACtB,GAAIC,GAAQF,EAAMvF,MAAM,KACpBW,EAAM8E,EAAM,GAAGD,OACfrG,EAAQsG,EAAM,GAAGD,MACrBF,GAAO3E,GAAOxB,KAIXmG,GAITpF,KAAM,SAAUoF,GACd,MAAOjH,QAAOqH,KAAKJ,GACdK,IAAI,SAAUhF,GACb,MAAOA,GAAM,KAAO2E,EAAO3E,KAE5BT,KAAK,OASdvI,SAAQiO,WAAa,SAAU/E,EAASwE,GACtC,GAAIQ,GAAgBT,QAAQpF,MAAMa,EAAQ0E,MAAMF,SAC5CS,EAAYV,QAAQpF,MAAMqF,GAC1BC,EAAS3N,QAAQyF,OAAOyI,EAAeC,EAE3CjF,GAAQ0E,MAAMF,QAAUD,QAAQlF,KAAKoF,IAQvC3N,QAAQoO,cAAgB,SAAUlF,EAASwE,GACzC,GAAIC,GAASF,QAAQpF,MAAMa,EAAQ0E,MAAMF,SACrCW,EAAeZ,QAAQpF,MAAMqF,EAEjC,KAAK,GAAI1E,KAAOqF,GACVA,EAAapI,eAAe+C,UACvB2E,GAAO3E,EAIlBE,GAAQ0E,MAAMF,QAAUD,QAAQlF,KAAKoF,IAWvC3N,QAAQsO,SAAW,SAAS5C,EAAGC,EAAGC,GAChC,GAAIkB,GAAGC,EAAGxG,EAENZ,EAAIN,KAAKC,MAAU,EAAJoG,GACfmB,EAAQ,EAAJnB,EAAQ/F,EACZ7E,EAAI8K,GAAK,EAAID,GACb4C,EAAI3C,GAAK,EAAIiB,EAAIlB,GACjB6C,EAAI5C,GAAK,GAAK,EAAIiB,GAAKlB,EAE3B,QAAQhG,EAAI,GACV,IAAK,GAAGmH,EAAIlB,EAAGmB,EAAIyB,EAAGjI,EAAIzF,CAAG,MAC7B,KAAK,GAAGgM,EAAIyB,EAAGxB,EAAInB,EAAGrF,EAAIzF,CAAG,MAC7B,KAAK,GAAGgM,EAAIhM,EAAGiM,EAAInB,EAAGrF,EAAIiI,CAAG,MAC7B,KAAK,GAAG1B,EAAIhM,EAAGiM,EAAIwB,EAAGhI,EAAIqF,CAAG,MAC7B,KAAK,GAAGkB,EAAI0B,EAAGzB,EAAIjM,EAAGyF,EAAIqF,CAAG,MAC7B,KAAK,GAAGkB,EAAIlB,EAAGmB,EAAIjM,EAAGyF,EAAIgI,EAG5B,OAAQzB,EAAEzH,KAAKC,MAAU,IAAJwH,GAAUC,EAAE1H,KAAKC,MAAU,IAAJyH,GAAUxG,EAAElB,KAAKC,MAAU,IAAJiB,KAGrEvG,QAAQgM,SAAW,SAASN,EAAGC,EAAGC,GAChC,GAAIT,GAAMnL,QAAQsO,SAAS5C,EAAGC,EAAGC,EACjC,OAAO5L,SAAQqL,SAASF,EAAI2B,EAAG3B,EAAI4B,EAAG5B,EAAI5E,IAG5CvG,QAAQwL,SAAW,SAASe,GAC1B,GAAIpB,GAAMnL,QAAQsM,SAASC,EAC3B,OAAOvM,SAAQmN,SAAShC,EAAI2B,EAAG3B,EAAI4B,EAAG5B,EAAI5E,IAG5CvG,QAAQsL,WAAa,SAASiB,GAC5B,GAAIkC,GAAO,qCAAqCC,KAAKnC,EACrD,OAAOkC,IAGTzO,QAAQkL,WAAa,SAASC,GAC5BA,EAAMA,EAAIqB,QAAQ,IAAI,GACtB,IAAIiC,GAAO,wCAAwCC,KAAKvD,EACxD,OAAOsD,IAUTzO,QAAQ2O,sBAAwB,SAASC,EAAQC,GAC/C,GAA8B,gBAAnBA,GAA6B,CAEtC,IAAK,GADDC,GAAWpI,OAAOqI,OAAOF,GACpBlJ,EAAI,EAAGA,EAAIiJ,EAAO9I,OAAQH,IAC7BkJ,EAAgB5I,eAAe2I,EAAOjJ,KACC,gBAA9BkJ,GAAgBD,EAAOjJ,MAChCmJ,EAASF,EAAOjJ,IAAM3F,QAAQgP,aAAaH,EAAgBD,EAAOjJ,KAIxE,OAAOmJ,GAGP,MAAO,OAWX9O,QAAQgP,aAAe,SAASH,GAC9B,GAA8B,gBAAnBA,GAA6B,CACtC,GAAIC,GAAWpI,OAAOqI,OAAOF,EAC7B,KAAK,GAAIlJ,KAAKkJ,GACRA,EAAgB5I,eAAeN,IACA,gBAAtBkJ,GAAgBlJ,KACzBmJ,EAASnJ,GAAK3F,QAAQgP,aAAaH,EAAgBlJ,IAIzD,OAAOmJ,GAGP,MAAO,OAcX9O,QAAQiP,aAAe,SAAUC,EAAaC,EAAShF,GACrD,GAAwBxD,SAApBwI,EAAQhF,GACV,GAA8B,iBAAnBgF,GAAQhF,GACjB+E,EAAY/E,GAAQiF,QAAUD,EAAQhF,OAEnC,CACH+E,EAAY/E,GAAQiF,SAAU,CAC9B,KAAK,GAAIpJ,KAAQmJ,GAAQhF,GACnBgF,EAAQhF,GAAQlE,eAAeD,KACjCkJ,EAAY/E,GAAQnE,GAAQmJ,EAAQhF,GAAQnE,MAmBtDhG,QAAQqP,mBAAqB,SAASC,EAAcC,EAAgBC,EAAOC,GAMzE,IALA,GAAIC,GAAgB,IAChBC,EAAY,EACZC,EAAM,EACNC,EAAOP,EAAaxJ,OAAS,EAEnB+J,GAAPD,GAA2BF,EAAZC,GAA2B,CAC/C,GAAIG,GAASzK,KAAKC,OAAOsK,EAAMC,GAAQ,GAEnCE,EAAOT,EAAaQ,GACpBtI,EAAoBb,SAAX8I,EAAwBM,EAAKP,GAASO,EAAKP,GAAOC,GAE3DO,EAAeT,EAAe/H,EAClC,IAAoB,GAAhBwI,EACF,MAAOF,EAEgB,KAAhBE,EACPJ,EAAME,EAAS,EAGfD,EAAOC,EAAS,EAGlBH,IAGF,MAAO,IAeT3P,QAAQiQ,kBAAoB,SAASX,EAAcvF,EAAQyF,EAAOU,GAOhE,IANA,GAIIC,GAAW3I,EAAO4I,EAAWN,EAJ7BJ,EAAgB,IAChBC,EAAY,EACZC,EAAM,EACNC,EAAOP,EAAaxJ,OAAS,EAGnB+J,GAAPD,GAA2BF,EAAZC,GAA2B,CAO/C,GALAG,EAASzK,KAAKC,MAAM,IAAKuK,EAAKD,IAC9BO,EAAYb,EAAajK,KAAKiI,IAAI,EAAEwC,EAAS,IAAIN,GACjDhI,EAAY8H,EAAaQ,GAAQN,GACjCY,EAAYd,EAAajK,KAAKwG,IAAIyD,EAAaxJ,OAAO,EAAEgK,EAAS,IAAIN,GAEjEhI,GAASuC,EACX,MAAO+F,EAEJ,IAAgB/F,EAAZoG,GAAsB3I,EAAQuC,EACrC,MAAyB,UAAlBmG,EAA6B7K,KAAKiI,IAAI,EAAEwC,EAAS,GAAKA,CAE1D,IAAY/F,EAARvC,GAAkB4I,EAAYrG,EACrC,MAAyB,UAAlBmG,EAA6BJ,EAASzK,KAAKwG,IAAIyD,EAAaxJ,OAAO,EAAEgK,EAAS,EAGzE/F,GAARvC,EACFoI,EAAME,EAAS,EAGfD,EAAOC,EAAS,EAGpBH,IAIF,MAAO,IAYT3P,QAAQqQ,cAAgB,SAAU7B,EAAG8B,EAAOC,EAAKC,GAC/C,GAAIC,GAASF,EAAMD,CAEnB,OADA9B,IAAKgC,EAAS,EACN,EAAJhC,EAAciC,EAAO,EAAEjC,EAAEA,EAAI8B,GACjC9B,KACQiC,EAAO,GAAKjC,GAAGA,EAAE,GAAK,GAAK8B,IAUrCtQ,QAAQ0Q,iBAENC,OAAQ,SAAUnC,GAChB,MAAOA,IAGToC,WAAY,SAAUpC,GACpB,MAAOA,GAAIA,GAGbqC,YAAa,SAAUrC,GACrB,MAAOA,IAAK,EAAIA,IAGlB6B,cAAe,SAAU7B,GACvB,MAAW,GAAJA,EAAS,EAAIA,EAAIA,EAAI,IAAM,EAAI,EAAIA,GAAKA,GAGjDsC,YAAa,SAAUtC,GACrB,MAAOA,GAAIA,EAAIA,GAGjBuC,aAAc,SAAUvC,GACtB,QAAUA,EAAKA,EAAIA,EAAI,GAGzBwC,eAAgB,SAAUxC,GACxB,MAAW,GAAJA,EAAS,EAAIA,EAAIA,EAAIA,GAAKA,EAAI,IAAM,EAAIA,EAAI,IAAM,EAAIA,EAAI,GAAK,GAGxEyC,YAAa,SAAUzC,GACrB,MAAOA,GAAIA,EAAIA,EAAIA,GAGrB0C,aAAc,SAAU1C,GACtB,MAAO,MAAOA,EAAKA,EAAIA,EAAIA,GAG7B2C,eAAgB,SAAU3C,GACxB,MAAW,GAAJA,EAAS,EAAIA,EAAIA,EAAIA,EAAIA,EAAI,EAAI,IAAOA,EAAKA,EAAIA,EAAIA,GAG9D4C,YAAa,SAAU5C,GACrB,MAAOA,GAAIA,EAAIA,EAAIA,EAAIA,GAGzB6C,aAAc,SAAU7C,GACtB,MAAO,KAAOA,EAAKA,EAAIA,EAAIA,EAAIA,GAGjC8C,eAAgB,SAAU9C,GACxB,MAAW,GAAJA,EAAS,GAAKA,EAAIA,EAAIA,EAAIA,EAAIA,EAAI,EAAI,KAAQA,EAAKA,EAAIA,EAAIA,EAAIA,KAMtE,SAASvO,EAAQD,GASrBA,EAAQuR,gBAAkB,SAASC,GAEjC,IAAK,GAAIC,KAAeD,GAClBA,EAAcvL,eAAewL,KAC/BD,EAAcC,GAAaC,UAAYF,EAAcC,GAAaE,KAClEH,EAAcC,GAAaE,UAYjC3R,EAAQ4R,gBAAkB,SAASJ,GAEjC,IAAK,GAAIC,KAAeD,GACtB,GAAIA,EAAcvL,eAAewL,IAC3BD,EAAcC,GAAaC,UAAW,CACxC,IAAK,GAAI/L,GAAI,EAAGA,EAAI6L,EAAcC,GAAaC,UAAU5L,OAAQH,IAC/D6L,EAAcC,GAAaC,UAAU/L,GAAGuE,WAAW2H,YAAYL,EAAcC,GAAaC,UAAU/L,GAEtG6L,GAAcC,GAAaC,eAgBnC1R,EAAQ8R,cAAgB,SAAUL,EAAaD,EAAeO,GAC5D,GAAI7I,EAqBJ,OAnBIsI,GAAcvL,eAAewL,GAE3BD,EAAcC,GAAaC,UAAU5L,OAAS,GAChDoD,EAAUsI,EAAcC,GAAaC,UAAU,GAC/CF,EAAcC,GAAaC,UAAUM,UAIrC9I,EAAU+I,SAASC,gBAAgB,6BAA8BT,GACjEM,EAAaI,YAAYjJ,KAK3BA,EAAU+I,SAASC,gBAAgB,6BAA8BT,GACjED,EAAcC,IAAgBE,QAAUD,cACxCK,EAAaI,YAAYjJ,IAE3BsI,EAAcC,GAAaE,KAAKrJ,KAAKY,GAC9BA,GAcTlJ,EAAQoS,cAAgB,SAAUX,EAAaD,EAAea,EAAcC,GAC1E,GAAIpJ,EA+BJ,OA7BIsI,GAAcvL,eAAewL,GAE3BD,EAAcC,GAAaC,UAAU5L,OAAS,GAChDoD,EAAUsI,EAAcC,GAAaC,UAAU,GAC/CF,EAAcC,GAAaC,UAAUM,UAIrC9I,EAAU+I,SAASM,cAAcd,GACZ9K,SAAjB2L,EACFD,EAAaC,aAAapJ,EAASoJ,GAGnCD,EAAaF,YAAYjJ,KAM7BA,EAAU+I,SAASM,cAAcd,GACjCD,EAAcC,IAAgBE,QAAUD,cACnB/K,SAAjB2L,EACFD,EAAaC,aAAapJ,EAASoJ,GAGnCD,EAAaF,YAAYjJ,IAG7BsI,EAAcC,GAAaE,KAAKrJ,KAAKY,GAC9BA,GAkBTlJ,EAAQwS,UAAY,SAASC,EAAGC,EAAGC,EAAOnB,EAAeO,GACvD,GAAIa,EAmBJ,OAlBsC,UAAlCD,EAAMxD,QAAQ0D,WAAWjF,OAC3BgF,EAAQ5S,EAAQ8R,cAAc,SAASN,EAAcO,GACrDa,EAAME,eAAe,KAAM,KAAML,GACjCG,EAAME,eAAe,KAAM,KAAMJ,GACjCE,EAAME,eAAe,KAAM,IAAK,GAAMH,EAAMxD,QAAQ0D,WAAWE,QAG/DH,EAAQ5S,EAAQ8R,cAAc,OAAON,EAAcO,GACnDa,EAAME,eAAe,KAAM,IAAKL,EAAI,GAAIE,EAAMxD,QAAQ0D,WAAWE,MACjEH,EAAME,eAAe,KAAM,IAAKJ,EAAI,GAAIC,EAAMxD,QAAQ0D,WAAWE,MACjEH,EAAME,eAAe,KAAM,QAASH,EAAMxD,QAAQ0D,WAAWE,MAC7DH,EAAME,eAAe,KAAM,SAAUH,EAAMxD,QAAQ0D,WAAWE,OAGzBpM,SAApCgM,EAAMxD,QAAQ0D,WAAWlF,QAC1BiF,EAAME,eAAe,KAAM,QAASH,EAAMA,MAAMxD,QAAQ0D,WAAWlF,QAErEiF,EAAME,eAAe,KAAM,QAASH,EAAMxK,UAAY,UAC/CyK,GAUT5S,EAAQgT,QAAU,SAAUP,EAAGC,EAAGO,EAAOC,EAAQ/K,EAAWqJ,EAAeO,GACzE,GAAc,GAAVmB,EAAa,CACF,EAATA,IACFA,GAAU,GACVR,GAAKQ,EAEP,IAAIC,GAAOnT,EAAQ8R,cAAc,OAAON,EAAeO,EACvDoB,GAAKL,eAAe,KAAM,IAAKL,EAAI,GAAMQ,GACzCE,EAAKL,eAAe,KAAM,IAAKJ,GAC/BS,EAAKL,eAAe,KAAM,QAASG,GACnCE,EAAKL,eAAe,KAAM,SAAUI,GACpCC,EAAKL,eAAe,KAAM,QAAS3K,MAMnC,SAASlI,EAAQD,EAASM,GAgD9B,QAASW,GAASmS,EAAMjE,GActB,IAZIiE,GAAShN,MAAMC,QAAQ+M,IAAUrS,EAAKgE,YAAYqO,KACpDjE,EAAUiE,EACVA,EAAO,MAGThT,KAAKiT,SAAWlE,MAChB/O,KAAKkT,SACLlT,KAAKmT,SAAWnT,KAAKiT,SAASG,SAAW,KACzCpT,KAAKqT,SAIDrT,KAAKiT,SAASpM,KAChB,IAAK,GAAIuI,KAASpP,MAAKiT,SAASpM,KAC9B,GAAI7G,KAAKiT,SAASpM,KAAKhB,eAAeuJ,GAAQ,CAC5C,GAAIhI,GAAQpH,KAAKiT,SAASpM,KAAKuI,EAE7BpP,MAAKqT,MAAMjE,GADA,QAAThI,GAA4B,WAATA,GAA+B,WAATA,EACvB,OAGAA,EAO5B,GAAIpH,KAAKiT,SAASrM,QAChB,KAAM,IAAIhD,OAAM,sDAGlB5D,MAAKsT,gBAGDN,GACFhT,KAAKuT,IAAIP,GAGXhT,KAAKwT,WAAWzE,GAtFlB,GAAIpO,GAAOT,EAAoB,GAC3Ba,EAAQb,EAAoB,EAiGhCW,GAAQ4S,UAAUD,WAAa,SAASzE,GAClCA,GAA6BxI,SAAlBwI,EAAQ2E,QACjB3E,EAAQ2E,SAAU,EAEhB1T,KAAK2T,SACP3T,KAAK2T,OAAOC,gBACL5T,MAAK2T,SAKT3T,KAAK2T,SACR3T,KAAK2T,OAAS5S,EAAMsE,OAAOrF,MACzBoM,SAAU,MAAO,SAAU,aAIF,gBAAlB2C,GAAQ2E,OACjB1T,KAAK2T,OAAOH,WAAWzE,EAAQ2E,UAevC7S,EAAQ4S,UAAUI,GAAK,SAASrK,EAAOhB,GACrC,GAAIsL,GAAc9T,KAAKsT,aAAa9J,EAC/BsK,KACHA,KACA9T,KAAKsT,aAAa9J,GAASsK,GAG7BA,EAAY5L,MACVM,SAAUA,KAKd3H,EAAQ4S,UAAUM,UAAYlT,EAAQ4S,UAAUI,GAOhDhT,EAAQ4S,UAAUO,IAAM,SAASxK,EAAOhB,GACtC,GAAIsL,GAAc9T,KAAKsT,aAAa9J,EAChCsK,KACF9T,KAAKsT,aAAa9J,GAASsK,EAAYG,OAAO,SAAUjL,GACtD,MAAQA,GAASR,UAAYA,MAMnC3H,EAAQ4S,UAAUS,YAAcrT,EAAQ4S,UAAUO,IASlDnT,EAAQ4S,UAAUU,SAAW,SAAU3K,EAAO4K,EAAQC,GACpD,GAAa,KAAT7K,EACF,KAAM,IAAI5F,OAAM,yBAGlB,IAAIkQ,KACAtK,KAASxJ,MAAKsT,eAChBQ,EAAcA,EAAYQ,OAAOtU,KAAKsT,aAAa9J,KAEjD,KAAOxJ,MAAKsT,eACdQ,EAAcA,EAAYQ,OAAOtU,KAAKsT,aAAa,MAGrD,KAAK,GAAI/N,GAAI,EAAGA,EAAIuO,EAAYpO,OAAQH,IAAK,CAC3C,GAAIgP,GAAaT,EAAYvO,EACzBgP,GAAW/L,UACb+L,EAAW/L,SAASgB,EAAO4K,EAAQC,GAAY,QAYrDxT,EAAQ4S,UAAUF,IAAM,SAAUP,EAAMqB,GACtC,GACIhU,GADAmU,KAEAC,EAAKzU,IAET,IAAIgG,MAAMC,QAAQ+M,GAEhB,IAAK,GAAIzN,GAAI,EAAGC,EAAMwN,EAAKtN,OAAYF,EAAJD,EAASA,IAC1ClF,EAAKoU,EAAGC,SAAS1B,EAAKzN,IACtBiP,EAAStM,KAAK7H,OAGb,IAAIM,EAAKgE,YAAYqO,GAGxB,IAAK,GADD2B,GAAU3U,KAAK4U,gBAAgB5B,GAC1B6B,EAAM,EAAGC,EAAO9B,EAAK+B,kBAAyBD,EAAND,EAAYA,IAAO,CAElE,IAAK,GADDlF,MACKqF,EAAM,EAAGC,EAAON,EAAQjP,OAAcuP,EAAND,EAAYA,IAAO,CAC1D,GAAI5F,GAAQuF,EAAQK,EACpBrF,GAAKP,GAAS4D,EAAKkC,SAASL,EAAKG,GAGnC3U,EAAKoU,EAAGC,SAAS/E,GACjB6E,EAAStM,KAAK7H,OAGb,CAAA,KAAI2S,YAAgB1M,SAMvB,KAAM,IAAI1C,OAAM,mBAJhBvD,GAAKoU,EAAGC,SAAS1B,GACjBwB,EAAStM,KAAK7H,GAUhB,MAJImU,GAAS9O,QACX1F,KAAKmU,SAAS,OAAQlS,MAAOuS,GAAWH,GAGnCG,GAST3T,EAAQ4S,UAAU0B,OAAS,SAAUnC,EAAMqB,GACzC,GAAIG,MACAY,KACAC,KACAZ,EAAKzU,KACLoT,EAAUqB,EAAGtB,SAEbmC,EAAc,SAAU3F,GAC1B,GAAItP,GAAKsP,EAAKyD,EACVqB,GAAGvB,MAAM7S,IAEXA,EAAKoU,EAAGc,YAAY5F,GACpByF,EAAWlN,KAAK7H,GAChBgV,EAAYnN,KAAKyH,KAIjBtP,EAAKoU,EAAGC,SAAS/E,GACjB6E,EAAStM,KAAK7H,IAIlB,IAAI2F,MAAMC,QAAQ+M,GAEhB,IAAK,GAAIzN,GAAI,EAAGC,EAAMwN,EAAKtN,OAAYF,EAAJD,EAASA,IAC1C+P,EAAYtC,EAAKzN,QAGhB,IAAI5E,EAAKgE,YAAYqO,GAGxB,IAAK,GADD2B,GAAU3U,KAAK4U,gBAAgB5B,GAC1B6B,EAAM,EAAGC,EAAO9B,EAAK+B,kBAAyBD,EAAND,EAAYA,IAAO,CAElE,IAAK,GADDlF,MACKqF,EAAM,EAAGC,EAAON,EAAQjP,OAAcuP,EAAND,EAAYA,IAAO,CAC1D,GAAI5F,GAAQuF,EAAQK,EACpBrF,GAAKP,GAAS4D,EAAKkC,SAASL,EAAKG,GAGnCM,EAAY3F,OAGX,CAAA,KAAIqD,YAAgB1M,SAKvB,KAAM,IAAI1C,OAAM,mBAHhB0R,GAAYtC,GAad,MAPIwB,GAAS9O,QACX1F,KAAKmU,SAAS,OAAQlS,MAAOuS,GAAWH,GAEtCe,EAAW1P,QACb1F,KAAKmU,SAAS,UAAWlS,MAAOmT,EAAYpC,KAAMqC,GAAchB,GAG3DG,EAASF,OAAOc,IAsCzBvU,EAAQ4S,UAAU+B,IAAM,WACtB,GAGInV,GAAIoV,EAAK1G,EAASiE,EAHlByB,EAAKzU,KAIL0V,EAAY/U,EAAKuG,QAAQzB,UAAU,GACtB,WAAbiQ,GAAsC,UAAbA,GAE3BrV,EAAKoF,UAAU,GACfsJ,EAAUtJ,UAAU,GACpBuN,EAAOvN,UAAU,IAEG,SAAbiQ,GAEPD,EAAMhQ,UAAU,GAChBsJ,EAAUtJ,UAAU,GACpBuN,EAAOvN,UAAU,KAIjBsJ,EAAUtJ,UAAU,GACpBuN,EAAOvN,UAAU,GAInB,IAAIkQ,EACJ,IAAI5G,GAAWA,EAAQ4G,WAAY,CACjC,GAAIC,IAAiB,YAAa,QAAS,SAG3C,IAFAD,EAA0D,IAA7CC,EAAclP,QAAQqI,EAAQ4G,YAAoB,QAAU5G,EAAQ4G,WAE7E3C,GAAS2C,GAAchV,EAAKuG,QAAQ8L,GACtC,KAAM,IAAIpP,OAAM,6BAA+BjD,EAAKuG,QAAQ8L,GAAQ,sDACVjE,EAAQlI,KAAO,IAE3E,IAAkB,aAAd8O,IAA8BhV,EAAKgE,YAAYqO,GACjD,KAAM,IAAIpP,OAAM,6EAKlB+R,GADO3C,GAC6B,aAAtBrS,EAAKuG,QAAQ8L,GAAwB,YAGtC,OAIf,IAEgBrD,GAAMkG,EAAQtQ,EAAGC,EAF7BqB,EAAOkI,GAAWA,EAAQlI,MAAQ7G,KAAKiT,SAASpM,KAChDoN,EAASlF,GAAWA,EAAQkF,OAC5BhS,IAGJ,IAAUsE,QAANlG,EAEFsP,EAAO8E,EAAGqB,SAASzV,EAAIwG,GACnBoN,IAAWA,EAAOtE,KACpBA,EAAO,UAGN,IAAWpJ,QAAPkP,EAEP,IAAKlQ,EAAI,EAAGC,EAAMiQ,EAAI/P,OAAYF,EAAJD,EAASA,IACrCoK,EAAO8E,EAAGqB,SAASL,EAAIlQ,GAAIsB,KACtBoN,GAAUA,EAAOtE,KACpB1N,EAAMiG,KAAKyH,OAMf,KAAKkG,IAAU7V,MAAKkT,MACdlT,KAAKkT,MAAMrN,eAAegQ,KAC5BlG,EAAO8E,EAAGqB,SAASD,EAAQhP,KACtBoN,GAAUA,EAAOtE,KACpB1N,EAAMiG,KAAKyH,GAYnB,IALIZ,GAAWA,EAAQgH,OAAexP,QAANlG,GAC9BL,KAAKgW,MAAM/T,EAAO8M,EAAQgH,OAIxBhH,GAAWA,EAAQP,OAAQ,CAC7B,GAAIA,GAASO,EAAQP,MACrB,IAAUjI,QAANlG,EACFsP,EAAO3P,KAAKiW,cAActG,EAAMnB,OAGhC,KAAKjJ,EAAI,EAAGC,EAAMvD,EAAMyD,OAAYF,EAAJD,EAASA,IACvCtD,EAAMsD,GAAKvF,KAAKiW,cAAchU,EAAMsD,GAAIiJ,GAM9C,GAAkB,aAAdmH,EAA2B,CAC7B,GAAIhB,GAAU3U,KAAK4U,gBAAgB5B,EACnC,IAAUzM,QAANlG,EAEFoU,EAAGyB,WAAWlD,EAAM2B,EAAShF,OAI7B,KAAKpK,EAAI,EAAGA,EAAItD,EAAMyD,OAAQH,IAC5BkP,EAAGyB,WAAWlD,EAAM2B,EAAS1S,EAAMsD,GAGvC,OAAOyN,GAEJ,GAAkB,UAAd2C,EAAwB,CAC/B,GAAIQ,KACJ,KAAK5Q,EAAI,EAAGA,EAAItD,EAAMyD,OAAQH,IAC5B4Q,EAAOlU,EAAMsD,GAAGlF,IAAM4B,EAAMsD,EAE9B,OAAO4Q,GAIP,GAAU5P,QAANlG,EAEF,MAAOsP,EAIP,IAAIqD,EAAM,CAER,IAAKzN,EAAI,EAAGC,EAAMvD,EAAMyD,OAAYF,EAAJD,EAASA,IACvCyN,EAAK9K,KAAKjG,EAAMsD,GAElB,OAAOyN,GAIP,MAAO/Q,IAcfpB,EAAQ4S,UAAU2C,OAAS,SAAUrH,GACnC,GAIIxJ,GACAC,EACAnF,EACAsP,EACA1N,EARA+Q,EAAOhT,KAAKkT,MACZe,EAASlF,GAAWA,EAAQkF,OAC5B8B,EAAQhH,GAAWA,EAAQgH,MAC3BlP,EAAOkI,GAAWA,EAAQlI,MAAQ7G,KAAKiT,SAASpM,KAMhD4O,IAEJ,IAAIxB,EAEF,GAAI8B,EAAO,CAET9T,IACA,KAAK5B,IAAM2S,GACLA,EAAKnN,eAAexF,KACtBsP,EAAO3P,KAAK8V,SAASzV,EAAIwG,GACrBoN,EAAOtE,IACT1N,EAAMiG,KAAKyH,GAOjB,KAFA3P,KAAKgW,MAAM/T,EAAO8T,GAEbxQ,EAAI,EAAGC,EAAMvD,EAAMyD,OAAYF,EAAJD,EAASA,IACvCkQ,EAAIlQ,GAAKtD,EAAMsD,GAAGvF,KAAKmT,cAKzB,KAAK9S,IAAM2S,GACLA,EAAKnN,eAAexF,KACtBsP,EAAO3P,KAAK8V,SAASzV,EAAIwG,GACrBoN,EAAOtE,IACT8F,EAAIvN,KAAKyH,EAAK3P,KAAKmT,gBAQ3B,IAAI4C,EAAO,CAET9T,IACA,KAAK5B,IAAM2S,GACLA,EAAKnN,eAAexF,IACtB4B,EAAMiG,KAAK8K,EAAK3S,GAMpB,KAFAL,KAAKgW,MAAM/T,EAAO8T,GAEbxQ,EAAI,EAAGC,EAAMvD,EAAMyD,OAAYF,EAAJD,EAASA,IACvCkQ,EAAIlQ,GAAKtD,EAAMsD,GAAGvF,KAAKmT,cAKzB,KAAK9S,IAAM2S,GACLA,EAAKnN,eAAexF,KACtBsP,EAAOqD,EAAK3S,GACZoV,EAAIvN,KAAKyH,EAAK3P,KAAKmT,WAM3B,OAAOsC,IAOT5U,EAAQ4S,UAAU4C,WAAa,WAC7B,MAAOrW,OAaTa,EAAQ4S,UAAUlL,QAAU,SAAUC,EAAUuG,GAC9C,GAGIY,GACAtP,EAJA4T,EAASlF,GAAWA,EAAQkF,OAC5BpN,EAAOkI,GAAWA,EAAQlI,MAAQ7G,KAAKiT,SAASpM,KAChDmM,EAAOhT,KAAKkT,KAIhB,IAAInE,GAAWA,EAAQgH,MAIrB,IAAK,GAFD9T,GAAQjC,KAAKwV,IAAIzG,GAEZxJ,EAAI,EAAGC,EAAMvD,EAAMyD,OAAYF,EAAJD,EAASA,IAC3CoK,EAAO1N,EAAMsD,GACblF,EAAKsP,EAAK3P,KAAKmT,UACf3K,EAASmH,EAAMtP,OAKjB,KAAKA,IAAM2S,GACLA,EAAKnN,eAAexF,KACtBsP,EAAO3P,KAAK8V,SAASzV,EAAIwG,KACpBoN,GAAUA,EAAOtE,KACpBnH,EAASmH,EAAMtP,KAkBzBQ,EAAQ4S,UAAU7F,IAAM,SAAUpF,EAAUuG,GAC1C,GAIIY,GAJAsE,EAASlF,GAAWA,EAAQkF,OAC5BpN,EAAOkI,GAAWA,EAAQlI,MAAQ7G,KAAKiT,SAASpM,KAChDyP,KACAtD,EAAOhT,KAAKkT,KAIhB,KAAK,GAAI7S,KAAM2S,GACTA,EAAKnN,eAAexF,KACtBsP,EAAO3P,KAAK8V,SAASzV,EAAIwG,KACpBoN,GAAUA,EAAOtE,KACpB2G,EAAYpO,KAAKM,EAASmH,EAAMtP,IAUtC,OAJI0O,IAAWA,EAAQgH,OACrB/V,KAAKgW,MAAMM,EAAavH,EAAQgH,OAG3BO,GAUTzV,EAAQ4S,UAAUwC,cAAgB,SAAUtG,EAAMnB,GAChD,GAAI+H,KAEJ,KAAK,GAAInH,KAASO,GACZA,EAAK9J,eAAeuJ,IAAoC,IAAzBZ,EAAO9H,QAAQ0I,KAChDmH,EAAanH,GAASO,EAAKP,GAI/B,OAAOmH,IAST1V,EAAQ4S,UAAUuC,MAAQ,SAAU/T,EAAO8T,GACzC,GAAIpV,EAAKuD,SAAS6R,GAAQ,CAExB,GAAIS,GAAOT,CACX9T,GAAMwU,KAAK,SAAUnR,EAAGa,GACtB,GAAIuQ,GAAKpR,EAAEkR,GACPG,EAAKxQ,EAAEqQ,EACX,OAAQE,GAAKC,EAAM,EAAWA,EAALD,EAAW,GAAK,QAGxC,CAAA,GAAqB,kBAAVX,GAOd,KAAM,IAAI3P,WAAU,uCALpBnE,GAAMwU,KAAKV,KAgBflV,EAAQ4S,UAAUmD,OAAS,SAAUvW,EAAIgU,GACvC,GACI9O,GAAGC,EAAKqR,EADRC,IAGJ,IAAI9Q,MAAMC,QAAQ5F,GAChB,IAAKkF,EAAI,EAAGC,EAAMnF,EAAGqF,OAAYF,EAAJD,EAASA,IACpCsR,EAAY7W,KAAK+W,QAAQ1W,EAAGkF,IACX,MAAbsR,GACFC,EAAW5O,KAAK2O,OAKpBA,GAAY7W,KAAK+W,QAAQ1W,GACR,MAAbwW,GACFC,EAAW5O,KAAK2O,EAQpB,OAJIC,GAAWpR,QACb1F,KAAKmU,SAAS,UAAWlS,MAAO6U,GAAazC,GAGxCyC,GASTjW,EAAQ4S,UAAUsD,QAAU,SAAU1W,GACpC,GAAIM,EAAKoD,SAAS1D,IAAOM,EAAKuD,SAAS7D,IACrC,GAAIL,KAAKkT,MAAM7S,GAEb,aADOL,MAAKkT,MAAM7S,GACXA,MAGN,IAAIA,YAAciG,QAAQ,CAC7B,GAAIuP,GAASxV,EAAGL,KAAKmT,SACrB,IAAI0C,GAAU7V,KAAKkT,MAAM2C,GAEvB,aADO7V,MAAKkT,MAAM2C,GACXA,EAGX,MAAO,OAQThV,EAAQ4S,UAAUuD,MAAQ,SAAU3C,GAClC,GAAIoB,GAAMnP,OAAOqH,KAAK3N,KAAKkT,MAM3B,OAJAlT,MAAKkT,SAELlT,KAAKmU,SAAS,UAAWlS,MAAOwT,GAAMpB,GAE/BoB,GAQT5U,EAAQ4S,UAAUvG,IAAM,SAAUkC,GAChC,GAAI4D,GAAOhT,KAAKkT,MACZhG,EAAM,KACN+J,EAAW,IAEf,KAAK,GAAI5W,KAAM2S,GACb,GAAIA,EAAKnN,eAAexF,GAAK,CAC3B,GAAIsP,GAAOqD,EAAK3S,GACZ6W,EAAYvH,EAAKP,EACJ,OAAb8H,KAAuBhK,GAAOgK,EAAYD,KAC5C/J,EAAMyC,EACNsH,EAAWC,GAKjB,MAAOhK,IAQTrM,EAAQ4S,UAAUhI,IAAM,SAAU2D,GAChC,GAAI4D,GAAOhT,KAAKkT,MACZzH,EAAM,KACN0L,EAAW,IAEf,KAAK,GAAI9W,KAAM2S,GACb,GAAIA,EAAKnN,eAAexF,GAAK,CAC3B,GAAIsP,GAAOqD,EAAK3S,GACZ6W,EAAYvH,EAAKP,EACJ,OAAb8H,KAAuBzL,GAAmB0L,EAAZD,KAChCzL,EAAMkE,EACNwH,EAAWD,GAKjB,MAAOzL,IAUT5K,EAAQ4S,UAAU2D,SAAW,SAAUhI,GACrC,GAII7J,GAJAyN,EAAOhT,KAAKkT,MACZmE,KACAC,EAAYtX,KAAKiT,SAASpM,MAAQ7G,KAAKiT,SAASpM,KAAKuI,IAAU,KAC/DmI,EAAQ,CAGZ,KAAK,GAAI3R,KAAQoN,GACf,GAAIA,EAAKnN,eAAeD,GAAO,CAC7B,GAAI+J,GAAOqD,EAAKpN,GACZwB,EAAQuI,EAAKP,GACboI,GAAS,CACb,KAAKjS,EAAI,EAAOgS,EAAJhS,EAAWA,IACrB,GAAI8R,EAAO9R,IAAM6B,EAAO,CACtBoQ,GAAS,CACT,OAGCA,GAAqBjR,SAAVa,IACdiQ,EAAOE,GAASnQ,EAChBmQ,KAKN,GAAID,EACF,IAAK/R,EAAI,EAAGA,EAAI8R,EAAO3R,OAAQH,IAC7B8R,EAAO9R,GAAK5E,EAAKiG,QAAQyQ,EAAO9R,GAAI+R,EAIxC,OAAOD,IASTxW,EAAQ4S,UAAUiB,SAAW,SAAU/E,GACrC,GAAItP,GAAKsP,EAAK3P,KAAKmT,SAEnB,IAAU5M,QAANlG,GAEF,GAAIL,KAAKkT,MAAM7S,GAEb,KAAM,IAAIuD,OAAM,iCAAmCvD,EAAK,uBAK1DA,GAAKM,EAAKoE,aACV4K,EAAK3P,KAAKmT,UAAY9S,CAGxB,IAAIkM,KACJ,KAAK,GAAI6C,KAASO,GAChB,GAAIA,EAAK9J,eAAeuJ,GAAQ,CAC9B,GAAIkI,GAAYtX,KAAKqT,MAAMjE,EAC3B7C,GAAE6C,GAASzO,EAAKiG,QAAQ+I,EAAKP,GAAQkI,GAKzC,MAFAtX,MAAKkT,MAAM7S,GAAMkM,EAEVlM,GAUTQ,EAAQ4S,UAAUqC,SAAW,SAAUzV,EAAIoX,GACzC,GAAIrI,GAAOhI,EAGPsQ,EAAM1X,KAAKkT,MAAM7S,EACrB,KAAKqX,EACH,MAAO,KAIT,IAAIC,KACJ,IAAIF,EACF,IAAKrI,IAASsI,GACRA,EAAI7R,eAAeuJ,KACrBhI,EAAQsQ,EAAItI,GACZuI,EAAUvI,GAASzO,EAAKiG,QAAQQ,EAAOqQ,EAAMrI,SAMjD,KAAKA,IAASsI,GACRA,EAAI7R,eAAeuJ,KACrBhI,EAAQsQ,EAAItI,GACZuI,EAAUvI,GAAShI,EAIzB,OAAOuQ,IAWT9W,EAAQ4S,UAAU8B,YAAc,SAAU5F,GACxC,GAAItP,GAAKsP,EAAK3P,KAAKmT,SACnB,IAAU5M,QAANlG,EACF,KAAM,IAAIuD,OAAM,6CAA+CgU,KAAKC,UAAUlI,GAAQ,IAExF,IAAIpD,GAAIvM,KAAKkT,MAAM7S,EACnB,KAAKkM,EAEH,KAAM,IAAI3I,OAAM,uCAAyCvD,EAAK,SAIhE,KAAK,GAAI+O,KAASO,GAChB,GAAIA,EAAK9J,eAAeuJ,GAAQ,CAC9B,GAAIkI,GAAYtX,KAAKqT,MAAMjE,EAC3B7C,GAAE6C,GAASzO,EAAKiG,QAAQ+I,EAAKP,GAAQkI,GAIzC,MAAOjX,IASTQ,EAAQ4S,UAAUmB,gBAAkB,SAAUkD,GAE5C,IAAK,GADDnD,MACKK,EAAM,EAAGC,EAAO6C,EAAUC,qBAA4B9C,EAAND,EAAYA,IACnEL,EAAQK,GAAO8C,EAAUE,YAAYhD,IAAQ8C,EAAUG,eAAejD,EAExE,OAAOL,IAUT9T,EAAQ4S,UAAUyC,WAAa,SAAU4B,EAAWnD,EAAShF,GAG3D,IAAK,GAFDkF,GAAMiD,EAAUI,SAEXlD,EAAM,EAAGC,EAAON,EAAQjP,OAAcuP,EAAND,EAAYA,IAAO,CAC1D,GAAI5F,GAAQuF,EAAQK,EACpB8C,GAAUK,SAAStD,EAAKG,EAAKrF,EAAKP,MAItCvP,EAAOD,QAAUiB,GAKb,SAAShB,EAAQD,EAASM,GAe9B,QAASY,GAAUkS,EAAMjE,GACvB/O,KAAKkT,MAAQ,KACblT,KAAKoY,QACLpY,KAAKiT,SAAWlE,MAChB/O,KAAKmT,SAAW,KAChBnT,KAAKsT,eAEL,IAAImB,GAAKzU,IACTA,MAAKgJ,SAAW,WACdyL,EAAG4D,SAASC,MAAM7D,EAAIhP,YAGxBzF,KAAKuY,QAAQvF,GAzBf,GAAIrS,GAAOT,EAAoB,GAC3BW,EAAUX,EAAoB,EAkClCY,GAAS2S,UAAU8E,QAAU,SAAUvF,GACrC,GAAIyC,GAAKlQ,EAAGC,CAEZ,IAAIxF,KAAKkT,MAAO,CAEVlT,KAAKkT,MAAMgB,aACblU,KAAKkT,MAAMgB,YAAY,IAAKlU,KAAKgJ,UAInCyM,IACA,KAAK,GAAIpV,KAAML,MAAKoY,KACdpY,KAAKoY,KAAKvS,eAAexF,IAC3BoV,EAAIvN,KAAK7H,EAGbL,MAAKoY,QACLpY,KAAKmU,SAAS,UAAWlS,MAAOwT,IAKlC,GAFAzV,KAAKkT,MAAQF,EAEThT,KAAKkT,MAAO,CAQd,IANAlT,KAAKmT,SAAWnT,KAAKiT,SAASG,SACzBpT,KAAKkT,OAASlT,KAAKkT,MAAMnE,SAAW/O,KAAKkT,MAAMnE,QAAQqE,SACxD,KAGJqC,EAAMzV,KAAKkT,MAAMkD,QAAQnC,OAAQjU,KAAKiT,UAAYjT,KAAKiT,SAASgB,SAC3D1O,EAAI,EAAGC,EAAMiQ,EAAI/P,OAAYF,EAAJD,EAASA,IACrClF,EAAKoV,EAAIlQ,GACTvF,KAAKoY,KAAK/X,IAAM,CAElBL,MAAKmU,SAAS,OAAQlS,MAAOwT,IAGzBzV,KAAKkT,MAAMW,IACb7T,KAAKkT,MAAMW,GAAG,IAAK7T,KAAKgJ,YAuC9BlI,EAAS2S,UAAU+B,IAAM,WACvB,GAGIC,GAAK1G,EAASiE,EAHdyB,EAAKzU,KAIL0V,EAAY/U,EAAKuG,QAAQzB,UAAU,GACtB,WAAbiQ,GAAsC,UAAbA,GAAsC,SAAbA,GAEpDD,EAAMhQ,UAAU,GAChBsJ,EAAUtJ,UAAU,GACpBuN,EAAOvN,UAAU,KAIjBsJ,EAAUtJ,UAAU,GACpBuN,EAAOvN,UAAU,GAInB,IAAI+S,GAAc7X,EAAK0E,UAAWrF,KAAKiT,SAAUlE,EAG7C/O,MAAKiT,SAASgB,QAAUlF,GAAWA,EAAQkF,SAC7CuE,EAAYvE,OAAS,SAAUtE,GAC7B,MAAO8E,GAAGxB,SAASgB,OAAOtE,IAASZ,EAAQkF,OAAOtE,IAKtD,IAAI8I,KAOJ,OANWlS,SAAPkP,GACFgD,EAAavQ,KAAKuN,GAEpBgD,EAAavQ,KAAKsQ,GAClBC,EAAavQ,KAAK8K,GAEXhT,KAAKkT,OAASlT,KAAKkT,MAAMsC,IAAI8C,MAAMtY,KAAKkT,MAAOuF,IAWxD3X,EAAS2S,UAAU2C,OAAS,SAAUrH,GACpC,GAAI0G,EAEJ,IAAIzV,KAAKkT,MAAO,CACd,GACIe,GADAyE,EAAgB1Y,KAAKiT,SAASgB,MAK9BA,GAFAlF,GAAWA,EAAQkF,OACjByE,EACO,SAAU/I,GACjB,MAAO+I,GAAc/I,IAASZ,EAAQkF,OAAOtE,IAItCZ,EAAQkF,OAIVyE,EAGXjD,EAAMzV,KAAKkT,MAAMkD,QACfnC,OAAQA,EACR8B,MAAOhH,GAAWA,EAAQgH,YAI5BN,KAGF,OAAOA,IAQT3U,EAAS2S,UAAU4C,WAAa,WAE9B,IADA,GAAIsC,GAAU3Y,KACP2Y,YAAmB7X,IACxB6X,EAAUA,EAAQzF,KAEpB,OAAOyF,IAAW,MAYpB7X,EAAS2S,UAAU4E,SAAW,SAAU7O,EAAO4K,EAAQC,GACrD,GAAI9O,GAAGC,EAAKnF,EAAIsP,EACZ8F,EAAMrB,GAAUA,EAAOnS,MACvB+Q,EAAOhT,KAAKkT,MACZ0F,KACAC,KACAC,IAEJ,IAAIrD,GAAOzC,EAAM,CACf,OAAQxJ,GACN,IAAK,MAEH,IAAKjE,EAAI,EAAGC,EAAMiQ,EAAI/P,OAAYF,EAAJD,EAASA,IACrClF,EAAKoV,EAAIlQ,GACToK,EAAO3P,KAAKwV,IAAInV,GACZsP,IACF3P,KAAKoY,KAAK/X,IAAM,EAChBuY,EAAM1Q,KAAK7H,GAIf,MAEF,KAAK,SAGH,IAAKkF,EAAI,EAAGC,EAAMiQ,EAAI/P,OAAYF,EAAJD,EAASA,IACrClF,EAAKoV,EAAIlQ,GACToK,EAAO3P,KAAKwV,IAAInV,GAEZsP,EACE3P,KAAKoY,KAAK/X,GACZwY,EAAQ3Q,KAAK7H,IAGbL,KAAKoY,KAAK/X,IAAM,EAChBuY,EAAM1Q,KAAK7H,IAITL,KAAKoY,KAAK/X,WACLL,MAAKoY,KAAK/X,GACjByY,EAAQ5Q,KAAK7H,GAQnB,MAEF,KAAK,SAEH,IAAKkF,EAAI,EAAGC,EAAMiQ,EAAI/P,OAAYF,EAAJD,EAASA,IACrClF,EAAKoV,EAAIlQ,GACLvF,KAAKoY,KAAK/X,WACLL,MAAKoY,KAAK/X,GACjByY,EAAQ5Q,KAAK7H,IAOjBuY,EAAMlT,QACR1F,KAAKmU,SAAS,OAAQlS,MAAO2W,GAAQvE,GAEnCwE,EAAQnT,QACV1F,KAAKmU,SAAS,UAAWlS,MAAO4W,GAAUxE,GAExCyE,EAAQpT,QACV1F,KAAKmU,SAAS,UAAWlS,MAAO6W,GAAUzE,KAMhDvT,EAAS2S,UAAUI,GAAKhT,EAAQ4S,UAAUI,GAC1C/S,EAAS2S,UAAUO,IAAMnT,EAAQ4S,UAAUO,IAC3ClT,EAAS2S,UAAUU,SAAWtT,EAAQ4S,UAAUU,SAGhDrT,EAAS2S,UAAUM,UAAYjT,EAAS2S,UAAUI,GAClD/S,EAAS2S,UAAUS,YAAcpT,EAAS2S,UAAUO,IAEpDnU,EAAOD,QAAUkB,GAIb,SAASjB,GAeb,QAASkB,GAAMgO,GAEb/O,KAAK+Y,MAAQ,KACb/Y,KAAKkN,IAAM8L,IAGXhZ,KAAK2T,UACL3T,KAAKiZ,SAAW,KAChBjZ,KAAKkZ,UAAY,KAEjBlZ,KAAKwT,WAAWzE,GAgBlBhO,EAAM0S,UAAUD,WAAa,SAAUzE,GACjCA,GAAoC,mBAAlBA,GAAQgK,QAC5B/Y,KAAK+Y,MAAQhK,EAAQgK,OAEnBhK,GAAkC,mBAAhBA,GAAQ7B,MAC5BlN,KAAKkN,IAAM6B,EAAQ7B,KAGrBlN,KAAKmZ,kBAsBPpY,EAAMsE,OAAS,SAAUrB,EAAQ+K,GAC/B,GAAI2E,GAAQ,GAAI3S,GAAMgO,EAEtB,IAAqBxI,SAAjBvC,EAAOoV,MACT,KAAM,IAAIxV,OAAM,6CAElBI,GAAOoV,MAAQ,WACb1F,EAAM0F,QAGR,IAAIC,KACF7C,KAAM,QACN8C,SAAU/S,QAGZ,IAAIwI,GAAWA,EAAQ3C,QACrB,IAAK,GAAI7G,GAAI,EAAGA,EAAIwJ,EAAQ3C,QAAQ1G,OAAQH,IAAK,CAC/C,GAAIiR,GAAOzH,EAAQ3C,QAAQ7G,EAC3B8T,GAAQnR,MACNsO,KAAMA,EACN8C,SAAUtV,EAAOwS,KAEnB9C,EAAMtH,QAAQpI,EAAQwS,GAS1B,MALA9C,GAAMwF,WACJlV,OAAQA,EACRqV,QAASA,GAGJ3F,GAOT3S,EAAM0S,UAAUG,QAAU,WAGxB,GAFA5T,KAAKoZ,QAEDpZ,KAAKkZ,UAAW,CAGlB,IAAK,GAFDlV,GAAShE,KAAKkZ,UAAUlV,OACxBqV,EAAUrZ,KAAKkZ,UAAUG,QACpB9T,EAAI,EAAGA,EAAI8T,EAAQ3T,OAAQH,IAAK,CACvC,GAAIgU,GAASF,EAAQ9T,EACjBgU,GAAOD,SACTtV,EAAOuV,EAAO/C,MAAQ+C,EAAOD,eAGtBtV,GAAOuV,EAAO/C,MAGzBxW,KAAKkZ,UAAY,OASrBnY,EAAM0S,UAAUrH,QAAU,SAASpI,EAAQuV,GACzC,GAAI9E,GAAKzU,KACLsZ,EAAWtV,EAAOuV,EACtB,KAAKD,EACH,KAAM,IAAI1V,OAAM,UAAY2V,EAAS,aAGvCvV,GAAOuV,GAAU,WAGf,IAAK,GADDC,MACKjU,EAAI,EAAGA,EAAIE,UAAUC,OAAQH,IACpCiU,EAAKjU,GAAKE,UAAUF,EAItBkP,GAAGf,OACD8F,KAAMA,EACNC,GAAIH,EACJI,QAAS1Z,SASfe,EAAM0S,UAAUC,MAAQ,SAASiG,GAE7B3Z,KAAK2T,OAAOzL,KADO,kBAAVyR,IACSF,GAAIE,GAGLA,GAGnB3Z,KAAKmZ,kBAOPpY,EAAM0S,UAAU0F,eAAiB,WAQ/B,GANInZ,KAAK2T,OAAOjO,OAAS1F,KAAKkN,KAC5BlN,KAAKoZ,QAIPQ,aAAa5Z,KAAKiZ,UACdjZ,KAAK0T,MAAMhO,OAAS,GAA2B,gBAAf1F,MAAK+Y,MAAoB,CAC3D,GAAItE,GAAKzU,IACTA,MAAKiZ,SAAWY,WAAW,WACzBpF,EAAG2E,SACFpZ,KAAK+Y,SAOZhY,EAAM0S,UAAU2F,MAAQ,WACtB,KAAOpZ,KAAK2T,OAAOjO,OAAS,GAAG,CAC7B,GAAIiU,GAAQ3Z,KAAK2T,OAAO/B,OACxB+H,GAAMF,GAAGnB,MAAMqB,EAAMD,SAAWC,EAAMF,GAAIE,EAAMH,YAIpD3Z,EAAOD,QAAUmB,GAKb,SAASlB,EAAQD,EAASM,GAwB9B,QAASc,GAAQ8Y,EAAW9G,EAAMjE,GAChC,KAAM/O,eAAgBgB,IACpB,KAAM,IAAI+Y,aAAY,mDAIxB/Z,MAAKga,iBAAmBF,EACxB9Z,KAAK6S,MAAQ,QACb7S,KAAK8S,OAAS,QACd9S,KAAKia,OAAS,GACdja,KAAKka,eAAiB,MACtBla,KAAKma,eAAiB,MAEtBna,KAAKoa,OAAS,IACdpa,KAAKqa,OAAS,IACdra,KAAKsa,OAAS,GAEd,IAAIC,GAAc,SAAS/O,GAAK,MAAOA,GACvCxL,MAAKwa,YAAcD,EACnBva,KAAKya,YAAcF,EACnBva,KAAK0a,YAAcH,EAEnBva,KAAK2a,YAAc,OACnB3a,KAAK4a,YAAc,QAEnB5a,KAAKwN,MAAQxM,EAAQ6Z,MAAMC,IAC3B9a,KAAK+a,iBAAkB,EACvB/a,KAAKgb,UAAW,EAChBhb,KAAKib,iBAAkB,EACvBjb,KAAKkb,YAAa,EAClBlb,KAAKmb,gBAAiB,EACtBnb,KAAKob,aAAc,EACnBpb,KAAKqb,cAAgB,GAErBrb,KAAKsb,kBAAoB,IACzBtb,KAAKub,kBAAmB,EAExBvb,KAAKwb,OAAS,GAAIta,GAClBlB,KAAKyb,IAAM,GAAIpa,GAAQ,EAAG,EAAG,IAE7BrB,KAAK8X,UAAY,KACjB9X,KAAK0b,WAAa,KAGlB1b,KAAK2b,KAAOpV,OACZvG,KAAK4b,KAAOrV,OACZvG,KAAK6b,KAAOtV,OACZvG,KAAK8b,SAAWvV,OAChBvG,KAAK+b,UAAYxV,OAEjBvG,KAAKgc,KAAO,EACZhc,KAAKic,MAAQ1V,OACbvG,KAAKkc,KAAO,EACZlc,KAAKmc,KAAO,EACZnc,KAAKoc,MAAQ7V,OACbvG,KAAKqc,KAAO,EACZrc,KAAKsc,KAAO,EACZtc,KAAKuc,MAAQhW,OACbvG,KAAKwc,KAAO,EACZxc,KAAKyc,SAAW,EAChBzc,KAAK0c,SAAW,EAChB1c,KAAK2c,UAAY,EACjB3c,KAAK4c,UAAY,EAIjB5c,KAAK6c,UAAY,UACjB7c,KAAK8c,UAAY,UACjB9c,KAAK+c,SAAW,UAChB/c,KAAKgd,eAAiB,UAGtBhd,KAAK2O,SAGL3O,KAAKwT,WAAWzE,GAGZiE,GACFhT,KAAKuY,QAAQvF,GAinEjB,QAASiK,GAAWzT,GAClB,MAAI,WAAaA,GAAcA,EAAM0T,QAC9B1T,EAAM2T,cAAc,IAAM3T,EAAM2T,cAAc,GAAGD,SAAW,EAQrE,QAASE,GAAW5T,GAClB,MAAI,WAAaA,GAAcA,EAAM6T,QAC9B7T,EAAM2T,cAAc,IAAM3T,EAAM2T,cAAc,GAAGE,SAAW,EAluErE,GAAIC,GAAUpd,EAAoB,IAC9BW,EAAUX,EAAoB,GAC9BY,EAAWZ,EAAoB,GAC/BS,EAAOT,EAAoB,GAC3BmB,EAAUnB,EAAoB,IAC9BkB,EAAUlB,EAAoB,GAC9BgB,EAAShB,EAAoB,GAC7BiB,EAASjB,EAAoB,GAC7BoB,EAASpB,EAAoB,IAC7BqB,EAAarB,EAAoB,GAiGrCod,GAAQtc,EAAQyS,WAKhBzS,EAAQyS,UAAU8J,UAAY,WAC5Bvd,KAAKwd,MAAQ,GAAInc,GAAQ,GAAKrB,KAAKkc,KAAOlc,KAAKgc,MAC7C,GAAKhc,KAAKqc,KAAOrc,KAAKmc,MACtB,GAAKnc,KAAKwc,KAAOxc,KAAKsc,OAGpBtc,KAAKib,kBACHjb,KAAKwd,MAAMnL,EAAIrS,KAAKwd,MAAMlL,EAE5BtS,KAAKwd,MAAMlL,EAAItS,KAAKwd,MAAMnL,EAI1BrS,KAAKwd,MAAMnL,EAAIrS,KAAKwd,MAAMlL,GAK9BtS,KAAKwd,MAAMC,GAAKzd,KAAKqb,cAIrBrb,KAAKwd,MAAMpW,MAAQ,GAAKpH,KAAK0c,SAAW1c,KAAKyc,SAG7C,IAAIiB,IAAW1d,KAAKkc,KAAOlc,KAAKgc,MAAQ,EAAIhc,KAAKwd,MAAMnL,EACnDsL,GAAW3d,KAAKqc,KAAOrc,KAAKmc,MAAQ,EAAInc,KAAKwd,MAAMlL,EACnDsL,GAAW5d,KAAKwc,KAAOxc,KAAKsc,MAAQ,EAAItc,KAAKwd,MAAMC,CACvDzd,MAAKwb,OAAOqC,eAAeH,EAASC,EAASC,IAU/C5c,EAAQyS,UAAUqK,eAAiB,SAASC,GAC1C,GAAIC,GAAche,KAAKie,2BAA2BF,EAClD,OAAO/d,MAAKke,4BAA4BF,IAW1Chd,EAAQyS,UAAUwK,2BAA6B,SAASF,GACtD,GAAII,GAAKJ,EAAQ1L,EAAIrS,KAAKwd,MAAMnL,EAC9B+L,EAAKL,EAAQzL,EAAItS,KAAKwd,MAAMlL,EAC5B+L,EAAKN,EAAQN,EAAIzd,KAAKwd,MAAMC,EAE5Ba,EAAKte,KAAKwb,OAAO+C,oBAAoBlM,EACrCmM,EAAKxe,KAAKwb,OAAO+C,oBAAoBjM,EACrCmM,EAAKze,KAAKwb,OAAO+C,oBAAoBd,EAGrCiB,EAAQzZ,KAAK0Z,IAAI3e,KAAKwb,OAAOoD,oBAAoBvM,GACjDwM,EAAQ5Z,KAAK6Z,IAAI9e,KAAKwb,OAAOoD,oBAAoBvM,GACjD0M,EAAQ9Z,KAAK0Z,IAAI3e,KAAKwb,OAAOoD,oBAAoBtM,GACjD0M,EAAQ/Z,KAAK6Z,IAAI9e,KAAKwb,OAAOoD,oBAAoBtM,GACjD2M,EAAQha,KAAK0Z,IAAI3e,KAAKwb,OAAOoD,oBAAoBnB,GACjDyB,EAAQja,KAAK6Z,IAAI9e,KAAKwb,OAAOoD,oBAAoBnB,GAGjD0B,EAAKH,GAASC,GAASb,EAAKI,GAAMU,GAASf,EAAKG,IAAOS,GAASV,EAAKI,GACrEW,EAAKV,GAASM,GAASX,EAAKI,GAAMM,GAASE,GAASb,EAAKI,GAAMU,GAASf,EAAKG,KAAQO,GAASK,GAASd,EAAKI,GAAMS,GAASd,EAAGG,IAC9He,EAAKR,GAASG,GAASX,EAAKI,GAAMM,GAASE,GAASb,EAAKI,GAAMU,GAASf,EAAKG,KAAQI,GAASQ,GAASd,EAAKI,GAAMS,GAASd,EAAGG,GAEhI,OAAO,IAAIjd,GAAQ8d,EAAIC,EAAIC,IAU7Bre,EAAQyS,UAAUyK,4BAA8B,SAASF,GACvD,GAQIsB,GACAC,EATAC,EAAKxf,KAAKyb,IAAIpJ,EAChBoN,EAAKzf,KAAKyb,IAAInJ,EACdoN,EAAK1f,KAAKyb,IAAIgC,EACd0B,EAAKnB,EAAY3L,EACjB+M,EAAKpB,EAAY1L,EACjB+M,EAAKrB,EAAYP,CAgBnB,OAXIzd,MAAK+a,iBACPuE,GAAMH,EAAKK,IAAOE,EAAKL,GACvBE,GAAMH,EAAKK,IAAOC,EAAKL,KAGvBC,EAAKH,IAAOO,EAAK1f,KAAKwb,OAAOmE,gBAC7BJ,EAAKH,IAAOM,EAAK1f,KAAKwb,OAAOmE,iBAKxB,GAAIve,GACTpB,KAAK4f,QAAUN,EAAKtf,KAAK6f,MAAMC,OAAOC,YACtC/f,KAAKggB,QAAUT,EAAKvf,KAAK6f,MAAMC,OAAOC,cAO1C/e,EAAQyS,UAAUwM,oBAAsB,SAASC,GAC/C,GAAIC,GAAO,QACPC,EAAS,OACTC,EAAc,CAElB,IAAgC,gBAAtB,GACRF,EAAOD,EACPE,EAAS,OACTC,EAAc,MAEX,IAAgC,gBAAtB,GACgB9Z,SAAzB2Z,EAAgBC,OAAuBA,EAAOD,EAAgBC,MACnC5Z,SAA3B2Z,EAAgBE,SAAyBA,EAASF,EAAgBE,QAClC7Z,SAAhC2Z,EAAgBG,cAA2BA,EAAcH,EAAgBG,iBAE1E,IAAyB9Z,SAApB2Z,EAIR,KAAM,qCAGRlgB,MAAK6f,MAAMrS,MAAM0S,gBAAkBC,EACnCngB,KAAK6f,MAAMrS,MAAM8S,YAAcF,EAC/BpgB,KAAK6f,MAAMrS,MAAM+S,YAAcF,EAAc,KAC7CrgB,KAAK6f,MAAMrS,MAAMgT,YAAc,SAKjCxf,EAAQ6Z,OACN4F,IAAK,EACLC,SAAU,EACVC,QAAS,EACT7F,IAAM,EACN8F,QAAU,EACVC,SAAU,EACVC,QAAS,EACTC,KAAO,EACPC,KAAM,EACNC,QAAU,GASZjgB,EAAQyS,UAAUyN,gBAAkB,SAASC,GAC3C,OAAQA,GACN,IAAK,MAAW,MAAOngB,GAAQ6Z,MAAMC,GACrC,KAAK,WAAa,MAAO9Z,GAAQ6Z,MAAM+F,OACvC,KAAK,YAAe,MAAO5f,GAAQ6Z,MAAMgG,QACzC,KAAK,WAAa,MAAO7f,GAAQ6Z,MAAMiG,OACvC,KAAK,OAAW,MAAO9f,GAAQ6Z,MAAMmG,IACrC,KAAK,OAAW,MAAOhgB,GAAQ6Z,MAAMkG,IACrC,KAAK,UAAa,MAAO/f,GAAQ6Z,MAAMoG,OACvC,KAAK,MAAW,MAAOjgB,GAAQ6Z,MAAM4F,GACrC,KAAK,YAAe,MAAOzf,GAAQ6Z,MAAM6F,QACzC,KAAK,WAAa,MAAO1f,GAAQ6Z,MAAM8F,QAGzC,MAAO,IAQT3f,EAAQyS,UAAU2N,wBAA0B,SAASpO,GACnD,GAAIhT,KAAKwN,QAAUxM,EAAQ6Z,MAAMC,KAC/B9a,KAAKwN,QAAUxM,EAAQ6Z,MAAM+F,SAC7B5gB,KAAKwN,QAAUxM,EAAQ6Z,MAAMmG,MAC7BhhB,KAAKwN,QAAUxM,EAAQ6Z,MAAMkG,MAC7B/gB,KAAKwN,QAAUxM,EAAQ6Z,MAAMoG,SAC7BjhB,KAAKwN,QAAUxM,EAAQ6Z,MAAM4F,IAE7BzgB,KAAK2b,KAAO,EACZ3b,KAAK4b,KAAO,EACZ5b,KAAK6b,KAAO,EACZ7b,KAAK8b,SAAWvV,OAEZyM,EAAK+E,qBAAuB,IAC9B/X,KAAK+b,UAAY,OAGhB,CAAA,GAAI/b,KAAKwN,QAAUxM,EAAQ6Z,MAAMgG,UACpC7gB,KAAKwN,QAAUxM,EAAQ6Z,MAAMiG,SAC7B9gB,KAAKwN,QAAUxM,EAAQ6Z,MAAM6F,UAC7B1gB,KAAKwN,QAAUxM,EAAQ6Z,MAAM8F,QAY7B,KAAM,kBAAoB3gB,KAAKwN,MAAQ,GAVvCxN,MAAK2b,KAAO,EACZ3b,KAAK4b,KAAO,EACZ5b,KAAK6b,KAAO,EACZ7b,KAAK8b,SAAW,EAEZ9I,EAAK+E,qBAAuB,IAC9B/X,KAAK+b,UAAY,KAQvB/a,EAAQyS,UAAUsB,gBAAkB,SAAS/B,GAC3C,MAAOA,GAAKtN,QAId1E,EAAQyS,UAAUsE,mBAAqB,SAAS/E,GAC9C,GAAIqO,GAAU,CACd,KAAK,GAAIC,KAAUtO,GAAK,GAClBA,EAAK,GAAGnN,eAAeyb,IACzBD,GAGJ,OAAOA,IAITrgB,EAAQyS,UAAU8N,kBAAoB,SAASvO,EAAMsO,GAEnD,IAAK,GADDE,MACKjc,EAAI,EAAGA,EAAIyN,EAAKtN,OAAQH,IACgB,IAA3Cic,EAAe9a,QAAQsM,EAAKzN,GAAG+b,KACjCE,EAAetZ,KAAK8K,EAAKzN,GAAG+b,GAGhC,OAAOE,IAITxgB,EAAQyS,UAAUgO,eAAiB,SAASzO,EAAKsO,GAE/C,IAAK,GADDI,IAAUjW,IAAIuH,EAAK,GAAGsO,GAAQpU,IAAI8F,EAAK,GAAGsO,IACrC/b,EAAI,EAAGA,EAAIyN,EAAKtN,OAAQH,IAC3Bmc,EAAOjW,IAAMuH,EAAKzN,GAAG+b,KAAWI,EAAOjW,IAAMuH,EAAKzN,GAAG+b,IACrDI,EAAOxU,IAAM8F,EAAKzN,GAAG+b,KAAWI,EAAOxU,IAAM8F,EAAKzN,GAAG+b,GAE3D,OAAOI,IAST1gB,EAAQyS,UAAUkO,gBAAkB,SAAUC,GAC5C,GAAInN,GAAKzU,IAOT,IAJIA,KAAK2Y,SACP3Y,KAAK2Y,QAAQ3E,IAAI,IAAKhU,KAAK6hB,WAGbtb,SAAZqb,EAAJ,CAGI5b,MAAMC,QAAQ2b,KAChBA,EAAU,GAAI/gB,GAAQ+gB,GAGxB,IAAI5O,EACJ,MAAI4O,YAAmB/gB,IAAW+gB,YAAmB9gB,IAInD,KAAM,IAAI8C,OAAM,uCAGlB;GANEoP,EAAO4O,EAAQpM,MAME,GAAfxC,EAAKtN,OAAT,CAGA1F,KAAK2Y,QAAUiJ,EACf5hB,KAAK8X,UAAY9E,EAGjBhT,KAAK6hB,UAAY,WACfpN,EAAG8D,QAAQ9D,EAAGkE,UAEhB3Y,KAAK2Y,QAAQ9E,GAAG,IAAK7T,KAAK6hB,WAS1B7hB,KAAK2b,KAAO,IACZ3b,KAAK4b,KAAO,IACZ5b,KAAK6b,KAAO,IACZ7b,KAAK8b,SAAW,QAChB9b,KAAK+b,UAAY,SAKb/I,EAAK,GAAGnN,eAAe,WACDU,SAApBvG,KAAK8hB,aACP9hB,KAAK8hB,WAAa,GAAI3gB,GAAOygB,EAAS5hB,KAAK+b,UAAW/b,MACtDA,KAAK8hB,WAAWC,kBAAkB,WAAYtN,EAAGuN,WAKrD,IAAIC,GAAWjiB,KAAKwN,OAASxM,EAAQ6Z,MAAM4F,KACzCzgB,KAAKwN,OAASxM,EAAQ6Z,MAAM6F,UAC5B1gB,KAAKwN,OAASxM,EAAQ6Z,MAAM8F,OAG9B,IAAIsB,EAAU,CACZ,GAA8B1b,SAA1BvG,KAAKkiB,iBACPliB,KAAK2c,UAAY3c,KAAKkiB,qBAEnB,CACH,GAAIC,GAAQniB,KAAKuhB,kBAAkBvO,EAAKhT,KAAK2b,KAC7C3b,MAAK2c,UAAawF,EAAM,GAAKA,EAAM,IAAO,EAG5C,GAA8B5b,SAA1BvG,KAAKoiB,iBACPpiB,KAAK4c,UAAY5c,KAAKoiB,qBAEnB,CACH,GAAIC,GAAQriB,KAAKuhB,kBAAkBvO,EAAKhT,KAAK4b,KAC7C5b,MAAK4c,UAAayF,EAAM,GAAKA,EAAM,IAAO,GAK9C,GAAIC,GAAStiB,KAAKyhB,eAAezO,EAAKhT,KAAK2b,KACvCsG,KACFK,EAAO7W,KAAOzL,KAAK2c,UAAY,EAC/B2F,EAAOpV,KAAOlN,KAAK2c,UAAY,GAEjC3c,KAAKgc,KAA6BzV,SAArBvG,KAAKuiB,YAA6BviB,KAAKuiB,YAAcD,EAAO7W,IACzEzL,KAAKkc,KAA6B3V,SAArBvG,KAAKwiB,YAA6BxiB,KAAKwiB,YAAcF,EAAOpV,IACrElN,KAAKkc,MAAQlc,KAAKgc,OAAMhc,KAAKkc,KAAOlc,KAAKgc,KAAO,GACpDhc,KAAKic,MAA+B1V,SAAtBvG,KAAKyiB,aAA8BziB,KAAKyiB,cAAgBziB,KAAKkc,KAAKlc,KAAKgc,MAAM,CAE3F,IAAI0G,GAAS1iB,KAAKyhB,eAAezO,EAAKhT,KAAK4b,KACvCqG,KACFS,EAAOjX,KAAOzL,KAAK4c,UAAY,EAC/B8F,EAAOxV,KAAOlN,KAAK4c,UAAY,GAEjC5c,KAAKmc,KAA6B5V,SAArBvG,KAAK2iB,YAA6B3iB,KAAK2iB,YAAcD,EAAOjX,IACzEzL,KAAKqc,KAA6B9V,SAArBvG,KAAK4iB,YAA6B5iB,KAAK4iB,YAAcF,EAAOxV,IACrElN,KAAKqc,MAAQrc,KAAKmc,OAAMnc,KAAKqc,KAAOrc,KAAKmc,KAAO,GACpDnc,KAAKoc,MAA+B7V,SAAtBvG,KAAK6iB,aAA8B7iB,KAAK6iB,cAAgB7iB,KAAKqc,KAAKrc,KAAKmc,MAAM,CAE3F,IAAI2G,GAAS9iB,KAAKyhB,eAAezO,EAAKhT,KAAK6b,KAM3C,IALA7b,KAAKsc,KAA6B/V,SAArBvG,KAAK+iB,YAA6B/iB,KAAK+iB,YAAcD,EAAOrX,IACzEzL,KAAKwc,KAA6BjW,SAArBvG,KAAKgjB,YAA6BhjB,KAAKgjB,YAAcF,EAAO5V,IACrElN,KAAKwc,MAAQxc,KAAKsc,OAAMtc,KAAKwc,KAAOxc,KAAKsc,KAAO,GACpDtc,KAAKuc,MAA+BhW,SAAtBvG,KAAKijB,aAA8BjjB,KAAKijB,cAAgBjjB,KAAKwc,KAAKxc,KAAKsc,MAAM,EAErE/V,SAAlBvG,KAAK8b,SAAwB,CAC/B,GAAIoH,GAAaljB,KAAKyhB,eAAezO,EAAKhT,KAAK8b,SAC/C9b,MAAKyc,SAAqClW,SAAzBvG,KAAKmjB,gBAAiCnjB,KAAKmjB,gBAAkBD,EAAWzX,IACzFzL,KAAK0c,SAAqCnW,SAAzBvG,KAAKojB,gBAAiCpjB,KAAKojB,gBAAkBF,EAAWhW,IACrFlN,KAAK0c,UAAY1c,KAAKyc,WAAUzc,KAAK0c,SAAW1c,KAAKyc,SAAW,GAItEzc,KAAKud,eAUPvc,EAAQyS,UAAU4P,eAAiB,SAAUrQ,GAE3C,GAAIX,GAAGC,EAAG/M,EAAGkY,EAAG6F,EAAK9Q,EAEjBkJ,IAEJ,IAAI1b,KAAKwN,QAAUxM,EAAQ6Z,MAAMkG,MAC/B/gB,KAAKwN,QAAUxM,EAAQ6Z,MAAMoG,QAAS,CAKtC,GAAIkB,MACAE,IACJ,KAAK9c,EAAI,EAAGA,EAAIvF,KAAK+U,gBAAgB/B,GAAOzN,IAC1C8M,EAAIW,EAAKzN,GAAGvF,KAAK2b,OAAS,EAC1BrJ,EAAIU,EAAKzN,GAAGvF,KAAK4b,OAAS,EAED,KAArBuG,EAAMzb,QAAQ2L,IAChB8P,EAAMja,KAAKmK,GAEY,KAArBgQ,EAAM3b,QAAQ4L,IAChB+P,EAAMna,KAAKoK,EAIf,IAAIiR,GAAa,SAAUje,EAAGa,GAC5B,MAAOb,GAAIa,EAEbgc,GAAM1L,KAAK8M,GACXlB,EAAM5L,KAAK8M,EAGX,IAAIC,KACJ,KAAKje,EAAI,EAAGA,EAAIyN,EAAKtN,OAAQH,IAAK,CAChC8M,EAAIW,EAAKzN,GAAGvF,KAAK2b,OAAS,EAC1BrJ,EAAIU,EAAKzN,GAAGvF,KAAK4b,OAAS,EAC1B6B,EAAIzK,EAAKzN,GAAGvF,KAAK6b,OAAS,CAE1B,IAAI4H,GAAStB,EAAMzb,QAAQ2L,GACvBqR,EAASrB,EAAM3b,QAAQ4L,EAEA/L,UAAvBid,EAAWC,KACbD,EAAWC,MAGb,IAAI1F,GAAU,GAAI1c,EAClB0c,GAAQ1L,EAAIA,EACZ0L,EAAQzL,EAAIA,EACZyL,EAAQN,EAAIA,EAEZ6F,KACAA,EAAI9Q,MAAQuL,EACZuF,EAAIK,MAAQpd,OACZ+c,EAAIM,OAASrd,OACb+c,EAAIO,OAAS,GAAIxiB,GAAQgR,EAAGC,EAAGtS,KAAKsc,MAEpCkH,EAAWC,GAAQC,GAAUJ,EAE7B5H,EAAWxT,KAAKob,GAIlB,IAAKjR,EAAI,EAAGA,EAAImR,EAAW9d,OAAQ2M,IACjC,IAAKC,EAAI,EAAGA,EAAIkR,EAAWnR,GAAG3M,OAAQ4M,IAChCkR,EAAWnR,GAAGC,KAChBkR,EAAWnR,GAAGC,GAAGwR,WAAczR,EAAImR,EAAW9d,OAAO,EAAK8d,EAAWnR,EAAE,GAAGC,GAAK/L,OAC/Eid,EAAWnR,GAAGC,GAAGyR,SAAczR,EAAIkR,EAAWnR,GAAG3M,OAAO,EAAK8d,EAAWnR,GAAGC,EAAE,GAAK/L,OAClFid,EAAWnR,GAAGC,GAAG0R,WACd3R,EAAImR,EAAW9d,OAAO,GAAK4M,EAAIkR,EAAWnR,GAAG3M,OAAO,EACnD8d,EAAWnR,EAAE,GAAGC,EAAE,GAClB/L,YAOV,KAAKhB,EAAI,EAAGA,EAAIyN,EAAKtN,OAAQH,IAC3BiN,EAAQ,GAAInR,GACZmR,EAAMH,EAAIW,EAAKzN,GAAGvF,KAAK2b,OAAS,EAChCnJ,EAAMF,EAAIU,EAAKzN,GAAGvF,KAAK4b,OAAS,EAChCpJ,EAAMiL,EAAIzK,EAAKzN,GAAGvF,KAAK6b,OAAS,EAEVtV,SAAlBvG,KAAK8b,WACPtJ,EAAMpL,MAAQ4L,EAAKzN,GAAGvF,KAAK8b,WAAa,GAG1CwH,KACAA,EAAI9Q,MAAQA,EACZ8Q,EAAIO,OAAS,GAAIxiB,GAAQmR,EAAMH,EAAGG,EAAMF,EAAGtS,KAAKsc,MAChDgH,EAAIK,MAAQpd,OACZ+c,EAAIM,OAASrd,OAEbmV,EAAWxT,KAAKob,EAIpB,OAAO5H,IAST1a,EAAQyS,UAAU9E,OAAS,WAEzB,KAAO3O,KAAKga,iBAAiBiK,iBAC3BjkB,KAAKga,iBAAiBvI,YAAYzR,KAAKga,iBAAiBkK,WAG1DlkB,MAAK6f,MAAQhO,SAASM,cAAc,OACpCnS,KAAK6f,MAAMrS,MAAM2W,SAAW,WAC5BnkB,KAAK6f,MAAMrS,MAAM4W,SAAW,SAG5BpkB,KAAK6f,MAAMC,OAASjO,SAASM,cAAe,UAC5CnS,KAAK6f,MAAMC,OAAOtS,MAAM2W,SAAW,WACnCnkB,KAAK6f,MAAM9N,YAAY/R,KAAK6f,MAAMC,OAGhC,IAAIuE,GAAWxS,SAASM,cAAe,MACvCkS,GAAS7W,MAAM3C,MAAQ,MACvBwZ,EAAS7W,MAAM8W,WAAc,OAC7BD,EAAS7W,MAAM+W,QAAW,OAC1BF,EAASG,UAAa,mDACtBxkB,KAAK6f,MAAMC,OAAO/N,YAAYsS,GAGhCrkB,KAAK6f,MAAM5L,OAASpC,SAASM,cAAe,OAC5CnS,KAAK6f,MAAM5L,OAAOzG,MAAM2W,SAAW,WACnCnkB,KAAK6f,MAAM5L,OAAOzG,MAAMqW,OAAS,MACjC7jB,KAAK6f,MAAM5L,OAAOzG,MAAMhG,KAAO,MAC/BxH,KAAK6f,MAAM5L,OAAOzG,MAAMqF,MAAQ,OAChC7S,KAAK6f,MAAM9N,YAAY/R,KAAK6f,MAAM5L,OAGlC,IAAIQ,GAAKzU,KACLykB,EAAc,SAAUjb,GAAQiL,EAAGiQ,aAAalb,IAChDmb,EAAe,SAAUnb,GAAQiL,EAAGmQ,cAAcpb,IAClDqb,EAAe,SAAUrb,GAAQiL,EAAGqQ,SAAStb,IAC7Cub,EAAY,SAAUvb,GAAQiL,EAAGuQ,WAAWxb,GAGhD7I,GAAKkI,iBAAiB7I,KAAK6f,MAAMC,OAAQ,UAAWmF,WACpDtkB,EAAKkI,iBAAiB7I,KAAK6f,MAAMC,OAAQ,YAAa2E,GACtD9jB,EAAKkI,iBAAiB7I,KAAK6f,MAAMC,OAAQ,aAAc6E,GACvDhkB,EAAKkI,iBAAiB7I,KAAK6f,MAAMC,OAAQ,aAAc+E,GACvDlkB,EAAKkI,iBAAiB7I,KAAK6f,MAAMC,OAAQ,YAAaiF,GAGtD/kB,KAAKga,iBAAiBjI,YAAY/R,KAAK6f,QAWzC7e,EAAQyS,UAAUyR,QAAU,SAASrS,EAAOC,GAC1C9S,KAAK6f,MAAMrS,MAAMqF,MAAQA,EACzB7S,KAAK6f,MAAMrS,MAAMsF,OAASA,EAE1B9S,KAAKmlB,iBAMPnkB,EAAQyS,UAAU0R,cAAgB,WAChCnlB,KAAK6f,MAAMC,OAAOtS,MAAMqF,MAAQ,OAChC7S,KAAK6f,MAAMC,OAAOtS,MAAMsF,OAAS,OAEjC9S,KAAK6f,MAAMC,OAAOjN,MAAQ7S,KAAK6f,MAAMC,OAAOC,YAC5C/f,KAAK6f,MAAMC,OAAOhN,OAAS9S,KAAK6f,MAAMC,OAAOsF,aAG7CplB,KAAK6f,MAAM5L,OAAOzG,MAAMqF,MAAS7S,KAAK6f,MAAMC,OAAOC,YAAc,GAAU,MAM7E/e,EAAQyS,UAAU4R,eAAiB,WACjC,IAAKrlB,KAAK6f,MAAM5L,SAAWjU,KAAK6f,MAAM5L,OAAOqR,OAC3C,KAAM,wBAERtlB,MAAK6f,MAAM5L,OAAOqR,OAAOC,QAO3BvkB,EAAQyS,UAAU+R,cAAgB,WAC3BxlB,KAAK6f,MAAM5L,QAAWjU,KAAK6f,MAAM5L,OAAOqR,QAE7CtlB,KAAK6f,MAAM5L,OAAOqR,OAAOG,QAU3BzkB,EAAQyS,UAAUiS,cAAgB,WAG9B1lB,KAAK4f,QAD0D,MAA7D5f,KAAKka,eAAeyL,OAAO3lB,KAAKka,eAAexU,OAAO,GAEtDkgB,WAAW5lB,KAAKka,gBAAkB,IAChCla,KAAK6f,MAAMC,OAAOC,YAGP6F,WAAW5lB,KAAKka,gBAK/Bla,KAAKggB,QAD0D,MAA7DhgB,KAAKma,eAAewL,OAAO3lB,KAAKma,eAAezU,OAAO,GAEtDkgB,WAAW5lB,KAAKma,gBAAkB,KAC/Bna,KAAK6f,MAAMC,OAAOsF,aAAeplB,KAAK6f,MAAM5L,OAAOmR,cAGzCQ,WAAW5lB,KAAKma,iBAoBnCnZ,EAAQyS,UAAUoS,kBAAoB,SAASC,GACjCvf,SAARuf,IAImBvf,SAAnBuf,EAAIC,YAA6Cxf,SAAjBuf,EAAIE,UACtChmB,KAAKwb,OAAOyK,eAAeH,EAAIC,WAAYD,EAAIE,UAG5Bzf,SAAjBuf,EAAII,UACNlmB,KAAKwb,OAAO2K,aAAaL,EAAII,UAG/BlmB,KAAKgiB,WASPhhB,EAAQyS,UAAU2S,kBAAoB,WACpC,GAAIN,GAAM9lB,KAAKwb,OAAO6K,gBAEtB,OADAP,GAAII,SAAWlmB,KAAKwb,OAAOmE,eACpBmG,GAMT9kB,EAAQyS,UAAU6S,UAAY,SAAStT,GAErChT,KAAK2hB,gBAAgB3O,EAAMhT,KAAKwN,OAK9BxN,KAAK0b,WAFH1b,KAAK8hB,WAEW9hB,KAAK8hB,WAAWuB,iBAIhBrjB,KAAKqjB,eAAerjB,KAAK8X,WAI7C9X,KAAKumB,iBAOPvlB,EAAQyS,UAAU8E,QAAU,SAAUvF,GACpChT,KAAKsmB,UAAUtT,GACfhT,KAAKgiB,SAGDhiB,KAAKwmB,oBAAsBxmB,KAAK8hB,YAClC9hB,KAAKqlB,kBAQTrkB,EAAQyS,UAAUD,WAAa,SAAUzE,GACvC,GAAI0X,GAAiBlgB,MAIrB,IAFAvG,KAAKwlB,gBAEWjf,SAAZwI,EAAuB,CAkBzB,GAhBsBxI,SAAlBwI,EAAQ8D,QAA2B7S,KAAK6S,MAAQ9D,EAAQ8D,OACrCtM,SAAnBwI,EAAQ+D,SAA2B9S,KAAK8S,OAAS/D,EAAQ+D,QAErCvM,SAApBwI,EAAQ2O,UAA2B1d,KAAKka,eAAiBnL,EAAQ2O,SAC7CnX,SAApBwI,EAAQ4O,UAA2B3d,KAAKma,eAAiBpL,EAAQ4O,SAEzCpX,SAAxBwI,EAAQ4L,cAA+B3a,KAAK2a,YAAc5L,EAAQ4L,aAC1CpU,SAAxBwI,EAAQ6L,cAA+B5a,KAAK4a,YAAc7L,EAAQ6L,aAC/CrU,SAAnBwI,EAAQqL,SAA0Bpa,KAAKoa,OAASrL,EAAQqL,QACrC7T,SAAnBwI,EAAQsL,SAA0Bra,KAAKqa,OAAStL,EAAQsL,QACrC9T,SAAnBwI,EAAQuL,SAA0Bta,KAAKsa,OAASvL,EAAQuL,QAEhC/T,SAAxBwI,EAAQyL,cAA+Bxa,KAAKwa,YAAczL,EAAQyL,aAC1CjU,SAAxBwI,EAAQ0L,cAA+Bza,KAAKya,YAAc1L,EAAQ0L,aAC1ClU,SAAxBwI,EAAQ2L,cAA+B1a,KAAK0a,YAAc3L,EAAQ2L,aAEhDnU,SAAlBwI,EAAQvB,MAAqB,CAC/B,GAAIkZ,GAAc1mB,KAAKkhB,gBAAgBnS,EAAQvB,MAC3B,MAAhBkZ,IACF1mB,KAAKwN,MAAQkZ,GAGQngB,SAArBwI,EAAQiM,WAA6Bhb,KAAKgb,SAAWjM,EAAQiM,UACjCzU,SAA5BwI,EAAQgM,kBAAiC/a,KAAK+a,gBAAkBhM,EAAQgM,iBACjDxU,SAAvBwI,EAAQmM,aAA6Blb,KAAKkb,WAAanM,EAAQmM,YAC3C3U,SAApBwI,EAAQ4X,UAA6B3mB,KAAKob,YAAcrM,EAAQ4X,SAC9BpgB,SAAlCwI,EAAQ6X,wBAAqC5mB,KAAK4mB,sBAAwB7X,EAAQ6X,uBACtDrgB,SAA5BwI,EAAQkM,kBAAiCjb,KAAKib,gBAAkBlM,EAAQkM,iBAC9C1U,SAA1BwI,EAAQsM,gBAA+Brb,KAAKqb,cAAgBtM,EAAQsM,eAEtC9U,SAA9BwI,EAAQuM,oBAAiCtb,KAAKsb,kBAAoBvM,EAAQuM,mBAC7C/U,SAA7BwI,EAAQwM,mBAAiCvb,KAAKub,iBAAmBxM,EAAQwM,kBAC1ChV,SAA/BwI,EAAQyX,qBAAiCxmB,KAAKwmB,mBAAqBzX,EAAQyX,oBAErDjgB,SAAtBwI,EAAQ4N,YAAyB3c,KAAKkiB,iBAAmBnT,EAAQ4N,WAC3CpW,SAAtBwI,EAAQ6N,YAAyB5c,KAAKoiB,iBAAmBrT,EAAQ6N,WAEhDrW,SAAjBwI,EAAQiN,OAAoBhc,KAAKuiB,YAAcxT,EAAQiN,MACrCzV,SAAlBwI,EAAQkN,QAAqBjc,KAAKyiB,aAAe1T,EAAQkN,OACxC1V,SAAjBwI,EAAQmN,OAAoBlc,KAAKwiB,YAAczT,EAAQmN,MACtC3V,SAAjBwI,EAAQoN,OAAoBnc,KAAK2iB,YAAc5T,EAAQoN,MACrC5V,SAAlBwI,EAAQqN,QAAqBpc,KAAK6iB,aAAe9T,EAAQqN,OACxC7V,SAAjBwI,EAAQsN,OAAoBrc,KAAK4iB,YAAc7T,EAAQsN,MACtC9V,SAAjBwI,EAAQuN,OAAoBtc,KAAK+iB,YAAchU,EAAQuN,MACrC/V,SAAlBwI,EAAQwN,QAAqBvc,KAAKijB,aAAelU,EAAQwN,OACxChW,SAAjBwI,EAAQyN,OAAoBxc,KAAKgjB,YAAcjU,EAAQyN,MAClCjW,SAArBwI,EAAQ0N,WAAwBzc,KAAKmjB,gBAAkBpU,EAAQ0N,UAC1ClW,SAArBwI,EAAQ2N,WAAwB1c,KAAKojB,gBAAkBrU,EAAQ2N,UAEpCnW,SAA3BwI,EAAQ0X,iBAA8BA,EAAiB1X,EAAQ0X,gBAE5ClgB,SAAnBkgB,GACFzmB,KAAKwb,OAAOyK,eAAeQ,EAAeV,WAAYU,EAAeT,UACrEhmB,KAAKwb,OAAO2K,aAAaM,EAAeP,YAGxClmB,KAAKwb,OAAOyK,eAAe,EAAK,IAChCjmB,KAAKwb,OAAO2K,aAAa,MAI7BnmB,KAAKigB,oBAAoBlR,GAAWA,EAAQmR,iBAE5ClgB,KAAKklB,QAAQllB,KAAK6S,MAAO7S,KAAK8S,QAG1B9S,KAAK8X,WACP9X,KAAKuY,QAAQvY,KAAK8X,WAIhB9X,KAAKwmB,oBAAsBxmB,KAAK8hB,YAClC9hB,KAAKqlB,kBAOTrkB,EAAQyS,UAAUuO,OAAS,WACzB,GAAwBzb,SAApBvG,KAAK0b,WACP,KAAM,mCAGR1b,MAAKmlB,gBACLnlB,KAAK0lB,gBACL1lB,KAAK6mB,gBACL7mB,KAAK8mB,eACL9mB,KAAK+mB,cAED/mB,KAAKwN,QAAUxM,EAAQ6Z,MAAMkG,MAC/B/gB,KAAKwN,QAAUxM,EAAQ6Z,MAAMoG,QAC7BjhB,KAAKgnB,kBAEEhnB,KAAKwN,QAAUxM,EAAQ6Z,MAAMmG,KACpChhB,KAAKinB,kBAEEjnB,KAAKwN,QAAUxM,EAAQ6Z,MAAM4F,KACpCzgB,KAAKwN,QAAUxM,EAAQ6Z,MAAM6F,UAC7B1gB,KAAKwN,QAAUxM,EAAQ6Z,MAAM8F,QAC7B3gB,KAAKknB,iBAILlnB,KAAKmnB,iBAGPnnB,KAAKonB,cACLpnB,KAAKqnB,iBAMPrmB,EAAQyS,UAAUqT,aAAe,WAC/B,GAAIhH,GAAS9f,KAAK6f,MAAMC,OACpBwH,EAAMxH,EAAOyH,WAAW,KAE5BD,GAAIE,UAAU,EAAG,EAAG1H,EAAOjN,MAAOiN,EAAOhN,SAO3C9R,EAAQyS,UAAU4T,cAAgB,WAChC,GAAI/U,EAEJ,IAAItS,KAAKwN,QAAUxM,EAAQ6Z,MAAMgG,UAC/B7gB,KAAKwN,QAAUxM,EAAQ6Z,MAAMiG,QAAS,CAEtC,GAEI2G,GAAUC,EAFVC,EAAmC,IAAzB3nB,KAAK6f,MAAME,WAGrB/f,MAAKwN,QAAUxM,EAAQ6Z,MAAMiG,SAC/B2G,EAAWE,EAAU,EACrBD,EAAWC,EAAU,EAAc,EAAVA,IAGzBF,EAAW,GACXC,EAAW,GAGb,IAAI5U,GAAS7N,KAAKiI,IAA8B,IAA1BlN,KAAK6f,MAAMuF,aAAqB,KAClDxd,EAAM5H,KAAKia,OACX2N,EAAQ5nB,KAAK6f,MAAME,YAAc/f,KAAKia,OACtCzS,EAAOogB,EAAQF,EACf7D,EAASjc,EAAMkL,EAGrB,GAAIgN,GAAS9f,KAAK6f,MAAMC,OACpBwH,EAAMxH,EAAOyH,WAAW,KAI5B,IAHAD,EAAIO,UAAY,EAChBP,EAAIQ,KAAO,aAEP9nB,KAAKwN,QAAUxM,EAAQ6Z,MAAMgG,SAAU,CAEzC,GAAIkH,GAAO,EACPC,EAAOlV,CACX,KAAKR,EAAIyV,EAAUC,EAAJ1V,EAAUA,IAAK,CAC5B,GAAI7F,IAAK6F,EAAIyV,IAASC,EAAOD,GAGzB5a,EAAU,IAAJV,EACN5B,EAAQ7K,KAAKioB,SAAS9a,EAAK,EAAG,EAElCma,GAAIY,YAAcrd,EAClByc,EAAIa,YACJb,EAAIc,OAAO5gB,EAAMI,EAAM0K,GACvBgV,EAAIe,OAAOT,EAAOhgB,EAAM0K,GACxBgV,EAAIlH,SAGNkH,EAAIY,YAAeloB,KAAK6c,UACxByK,EAAIgB,WAAW9gB,EAAMI,EAAK8f,EAAU5U,GAiBtC,GAdI9S,KAAKwN,QAAUxM,EAAQ6Z,MAAMiG,UAE/BwG,EAAIY,YAAeloB,KAAK6c,UACxByK,EAAIiB,UAAavoB,KAAK+c,SACtBuK,EAAIa,YACJb,EAAIc,OAAO5gB,EAAMI,GACjB0f,EAAIe,OAAOT,EAAOhgB,GAClB0f,EAAIe,OAAOT,EAAQF,EAAWD,EAAU5D,GACxCyD,EAAIe,OAAO7gB,EAAMqc,GACjByD,EAAIkB,YACJlB,EAAInH,OACJmH,EAAIlH,UAGFpgB,KAAKwN,QAAUxM,EAAQ6Z,MAAMgG,UAC/B7gB,KAAKwN,QAAUxM,EAAQ6Z,MAAMiG,QAAS,CAEtC,GAAI2H,GAAc,EACdC,EAAO,GAAInnB,GAAWvB,KAAKyc,SAAUzc,KAAK0c,UAAW1c,KAAK0c,SAAS1c,KAAKyc,UAAU,GAAG,EAKzF,KAJAiM,EAAKxY,QACDwY,EAAKC,aAAe3oB,KAAKyc,UAC3BiM,EAAKE,QAECF,EAAKvY,OACXmC,EAAIuR,GAAU6E,EAAKC,aAAe3oB,KAAKyc,WAAazc,KAAK0c,SAAW1c,KAAKyc,UAAY3J,EAErFwU,EAAIa,YACJb,EAAIc,OAAO5gB,EAAOihB,EAAanW,GAC/BgV,EAAIe,OAAO7gB,EAAM8K,GACjBgV,EAAIlH,SAEJkH,EAAIuB,UAAY,QAChBvB,EAAIwB,aAAe,SACnBxB,EAAIiB,UAAYvoB,KAAK6c,UACrByK,EAAIyB,SAASL,EAAKC,aAAcnhB,EAAO,EAAIihB,EAAanW,GAExDoW,EAAKE,MAGPtB,GAAIuB,UAAY,QAChBvB,EAAIwB,aAAe,KACnB,IAAIE,GAAQhpB,KAAK4a,WACjB0M,GAAIyB,SAASC,EAAOpB,EAAO/D,EAAS7jB,KAAKia,UAO7CjZ,EAAQyS,UAAU8S,cAAgB,WAGhC,GAFAvmB,KAAK6f,MAAM5L,OAAOuQ,UAAY,GAE1BxkB,KAAK8hB,WAAY,CACnB,GAAI/S,IACFka,QAAWjpB,KAAK4mB,uBAEdtB,EAAS,GAAIhkB,GAAOtB,KAAK6f,MAAM5L,OAAQlF,EAC3C/O,MAAK6f,MAAM5L,OAAOqR,OAASA,EAG3BtlB,KAAK6f,MAAM5L,OAAOzG,MAAM+W,QAAU,OAGlCe,EAAO4D,UAAUlpB,KAAK8hB,WAAWzK,QACjCiO,EAAO6D,gBAAgBnpB,KAAKsb,kBAG5B,IAAI7G,GAAKzU,KACLopB,EAAW,WACb,GAAI/gB,GAAQid,EAAO+D,UAEnB5U,GAAGqN,WAAWwH,YAAYjhB,GAC1BoM,EAAGiH,WAAajH,EAAGqN,WAAWuB,iBAE9B5O,EAAGuN,SAELsD,GAAOiE,oBAAoBH,OAG3BppB,MAAK6f,MAAM5L,OAAOqR,OAAS/e,QAO/BvF,EAAQyS,UAAUoT,cAAgB,WACEtgB,SAA7BvG,KAAK6f,MAAM5L,OAAOqR,QACrBtlB,KAAK6f,MAAM5L,OAAOqR,OAAOtD,UAQ7BhhB,EAAQyS,UAAU2T,YAAc,WAC9B,GAAIpnB,KAAK8hB,WAAY,CACnB,GAAIhC,GAAS9f,KAAK6f,MAAMC,OACpBwH,EAAMxH,EAAOyH,WAAW,KAE5BD,GAAIQ,KAAO,aACXR,EAAIkC,UAAY,OAChBlC,EAAIiB,UAAY,OAChBjB,EAAIuB,UAAY,OAChBvB,EAAIwB,aAAe,KAEnB,IAAIzW,GAAIrS,KAAKia,OACT3H,EAAItS,KAAKia,MACbqN,GAAIyB,SAAS/oB,KAAK8hB,WAAW2H,WAAa,KAAOzpB,KAAK8hB,WAAW4H,mBAAoBrX,EAAGC,KAQ5FtR,EAAQyS,UAAUsT,YAAc,WAC9B,GAEE4C,GAAMC,EAAIlB,EAAMmB,EAChBC,EAAMC,EAAOC,EAAOC,EACpBC,EAAQC,EAASC,EACjBC,EAAQC,EALNxK,EAAS9f,KAAK6f,MAAMC,OACtBwH,EAAMxH,EAAOyH,WAAW,KAQ1BD,GAAIQ,KAAO,GAAK9nB,KAAKwb,OAAOmE,eAAiB,UAG7C,IAAI4K,GAAW,KAAQvqB,KAAKwd,MAAMnL,EAC9BmY,EAAW,KAAQxqB,KAAKwd,MAAMlL,EAC9BmY,EAAa,EAAIzqB,KAAKwb,OAAOmE,eAC7B+K,EAAW1qB,KAAKwb,OAAO6K,iBAAiBN,UAU5C,KAPAuB,EAAIO,UAAY,EAChBgC,EAAoCtjB,SAAtBvG,KAAKyiB,aACnBiG,EAAO,GAAInnB,GAAWvB,KAAKgc,KAAMhc,KAAKkc,KAAMlc,KAAKic,MAAO4N,GACxDnB,EAAKxY,QACDwY,EAAKC,aAAe3oB,KAAKgc,MAC3B0M,EAAKE,QAECF,EAAKvY,OAAO,CAClB,GAAIkC,GAAIqW,EAAKC,YAET3oB,MAAKgb,UACP2O,EAAO3pB,KAAK8d,eAAe,GAAIzc,GAAQgR,EAAGrS,KAAKmc,KAAMnc,KAAKsc,OAC1DsN,EAAK5pB,KAAK8d,eAAe,GAAIzc,GAAQgR,EAAGrS,KAAKqc,KAAMrc,KAAKsc,OACxDgL,EAAIY,YAAcloB,KAAK8c,UACvBwK,EAAIa,YACJb,EAAIc,OAAOuB,EAAKtX,EAAGsX,EAAKrX,GACxBgV,EAAIe,OAAOuB,EAAGvX,EAAGuX,EAAGtX,GACpBgV,EAAIlH,WAGJuJ,EAAO3pB,KAAK8d,eAAe,GAAIzc,GAAQgR,EAAGrS,KAAKmc,KAAMnc,KAAKsc,OAC1DsN,EAAK5pB,KAAK8d,eAAe,GAAIzc,GAAQgR,EAAGrS,KAAKmc,KAAKoO,EAAUvqB,KAAKsc,OACjEgL,EAAIY,YAAcloB,KAAK6c,UACvByK,EAAIa,YACJb,EAAIc,OAAOuB,EAAKtX,EAAGsX,EAAKrX,GACxBgV,EAAIe,OAAOuB,EAAGvX,EAAGuX,EAAGtX,GACpBgV,EAAIlH,SAEJuJ,EAAO3pB,KAAK8d,eAAe,GAAIzc,GAAQgR,EAAGrS,KAAKqc,KAAMrc,KAAKsc,OAC1DsN,EAAK5pB,KAAK8d,eAAe,GAAIzc,GAAQgR,EAAGrS,KAAKqc,KAAKkO,EAAUvqB,KAAKsc,OACjEgL,EAAIY,YAAcloB,KAAK6c,UACvByK,EAAIa,YACJb,EAAIc,OAAOuB,EAAKtX,EAAGsX,EAAKrX,GACxBgV,EAAIe,OAAOuB,EAAGvX,EAAGuX,EAAGtX,GACpBgV,EAAIlH,UAGN4J,EAAS/kB,KAAK6Z,IAAI4L,GAAY,EAAK1qB,KAAKmc,KAAOnc,KAAKqc,KACpDyN,EAAO9pB,KAAK8d,eAAe,GAAIzc,GAAQgR,EAAG2X,EAAOhqB,KAAKsc,OAClDrX,KAAK6Z,IAAe,EAAX4L,GAAgB,GAC3BpD,EAAIuB,UAAY,SAChBvB,EAAIwB,aAAe,MACnBgB,EAAKxX,GAAKmY,GAEHxlB,KAAK0Z,IAAe,EAAX+L,GAAgB,GAChCpD,EAAIuB,UAAY,QAChBvB,EAAIwB,aAAe,WAGnBxB,EAAIuB,UAAY,OAChBvB,EAAIwB,aAAe,UAErBxB,EAAIiB,UAAYvoB,KAAK6c,UACrByK,EAAIyB,SAAS,KAAO/oB,KAAKwa,YAAYkO,EAAKC,cAAgB,KAAMmB,EAAKzX,EAAGyX,EAAKxX,GAE7EoW,EAAKE,OAWP,IAPAtB,EAAIO,UAAY,EAChBgC,EAAoCtjB,SAAtBvG,KAAK6iB,aACnB6F,EAAO,GAAInnB,GAAWvB,KAAKmc,KAAMnc,KAAKqc,KAAMrc,KAAKoc,MAAOyN,GACxDnB,EAAKxY,QACDwY,EAAKC,aAAe3oB,KAAKmc,MAC3BuM,EAAKE,QAECF,EAAKvY,OACPnQ,KAAKgb,UACP2O,EAAO3pB,KAAK8d,eAAe,GAAIzc,GAAQrB,KAAKgc,KAAM0M,EAAKC,aAAc3oB,KAAKsc,OAC1EsN,EAAK5pB,KAAK8d,eAAe,GAAIzc,GAAQrB,KAAKkc,KAAMwM,EAAKC,aAAc3oB,KAAKsc,OACxEgL,EAAIY,YAAcloB,KAAK8c,UACvBwK,EAAIa,YACJb,EAAIc,OAAOuB,EAAKtX,EAAGsX,EAAKrX,GACxBgV,EAAIe,OAAOuB,EAAGvX,EAAGuX,EAAGtX,GACpBgV,EAAIlH,WAGJuJ,EAAO3pB,KAAK8d,eAAe,GAAIzc,GAAQrB,KAAKgc,KAAM0M,EAAKC,aAAc3oB,KAAKsc,OAC1EsN,EAAK5pB,KAAK8d,eAAe,GAAIzc,GAAQrB,KAAKgc,KAAKwO,EAAU9B,EAAKC,aAAc3oB,KAAKsc,OACjFgL,EAAIY,YAAcloB,KAAK6c,UACvByK,EAAIa,YACJb,EAAIc,OAAOuB,EAAKtX,EAAGsX,EAAKrX,GACxBgV,EAAIe,OAAOuB,EAAGvX,EAAGuX,EAAGtX,GACpBgV,EAAIlH,SAEJuJ,EAAO3pB,KAAK8d,eAAe,GAAIzc,GAAQrB,KAAKkc,KAAMwM,EAAKC,aAAc3oB,KAAKsc,OAC1EsN,EAAK5pB,KAAK8d,eAAe,GAAIzc,GAAQrB,KAAKkc,KAAKsO,EAAU9B,EAAKC,aAAc3oB,KAAKsc,OACjFgL,EAAIY,YAAcloB,KAAK6c,UACvByK,EAAIa,YACJb,EAAIc,OAAOuB,EAAKtX,EAAGsX,EAAKrX,GACxBgV,EAAIe,OAAOuB,EAAGvX,EAAGuX,EAAGtX,GACpBgV,EAAIlH,UAGN2J,EAAS9kB,KAAK0Z,IAAI+L,GAAa,EAAK1qB,KAAKgc,KAAOhc,KAAKkc,KACrD4N,EAAO9pB,KAAK8d,eAAe,GAAIzc,GAAQ0oB,EAAOrB,EAAKC,aAAc3oB,KAAKsc,OAClErX,KAAK6Z,IAAe,EAAX4L,GAAgB,GAC3BpD,EAAIuB,UAAY,SAChBvB,EAAIwB,aAAe,MACnBgB,EAAKxX,GAAKmY,GAEHxlB,KAAK0Z,IAAe,EAAX+L,GAAgB,GAChCpD,EAAIuB,UAAY,QAChBvB,EAAIwB,aAAe,WAGnBxB,EAAIuB,UAAY,OAChBvB,EAAIwB,aAAe,UAErBxB,EAAIiB,UAAYvoB,KAAK6c,UACrByK,EAAIyB,SAAS,KAAO/oB,KAAKya,YAAYiO,EAAKC,cAAgB,KAAMmB,EAAKzX,EAAGyX,EAAKxX,GAE7EoW,EAAKE,MAaP,KATAtB,EAAIO,UAAY,EAChBgC,EAAoCtjB,SAAtBvG,KAAKijB,aACnByF,EAAO,GAAInnB,GAAWvB,KAAKsc,KAAMtc,KAAKwc,KAAMxc,KAAKuc,MAAOsN,GACxDnB,EAAKxY,QACDwY,EAAKC,aAAe3oB,KAAKsc,MAC3BoM,EAAKE,OAEPmB,EAAS9kB,KAAK6Z,IAAI4L,GAAa,EAAK1qB,KAAKgc,KAAOhc,KAAKkc,KACrD8N,EAAS/kB,KAAK0Z,IAAI+L,GAAa,EAAK1qB,KAAKmc,KAAOnc,KAAKqc,MAC7CqM,EAAKvY,OAEXwZ,EAAO3pB,KAAK8d,eAAe,GAAIzc,GAAQ0oB,EAAOC,EAAOtB,EAAKC,eAC1DrB,EAAIY,YAAcloB,KAAK6c,UACvByK,EAAIa,YACJb,EAAIc,OAAOuB,EAAKtX,EAAGsX,EAAKrX,GACxBgV,EAAIe,OAAOsB,EAAKtX,EAAIoY,EAAYd,EAAKrX,GACrCgV,EAAIlH,SAEJkH,EAAIuB,UAAY,QAChBvB,EAAIwB,aAAe,SACnBxB,EAAIiB,UAAYvoB,KAAK6c,UACrByK,EAAIyB,SAAS/oB,KAAK0a,YAAYgO,EAAKC,cAAgB,IAAKgB,EAAKtX,EAAI,EAAGsX,EAAKrX,GAEzEoW,EAAKE,MAEPtB,GAAIO,UAAY,EAChB8B,EAAO3pB,KAAK8d,eAAe,GAAIzc,GAAQ0oB,EAAOC,EAAOhqB,KAAKsc,OAC1DsN,EAAK5pB,KAAK8d,eAAe,GAAIzc,GAAQ0oB,EAAOC,EAAOhqB,KAAKwc,OACxD8K,EAAIY,YAAcloB,KAAK6c,UACvByK,EAAIa,YACJb,EAAIc,OAAOuB,EAAKtX,EAAGsX,EAAKrX,GACxBgV,EAAIe,OAAOuB,EAAGvX,EAAGuX,EAAGtX,GACpBgV,EAAIlH,SAGJkH,EAAIO,UAAY,EAEhBwC,EAASrqB,KAAK8d,eAAe,GAAIzc,GAAQrB,KAAKgc,KAAMhc,KAAKmc,KAAMnc,KAAKsc,OACpEgO,EAAStqB,KAAK8d,eAAe,GAAIzc,GAAQrB,KAAKkc,KAAMlc,KAAKmc,KAAMnc,KAAKsc,OACpEgL,EAAIY,YAAcloB,KAAK6c,UACvByK,EAAIa,YACJb,EAAIc,OAAOiC,EAAOhY,EAAGgY,EAAO/X,GAC5BgV,EAAIe,OAAOiC,EAAOjY,EAAGiY,EAAOhY,GAC5BgV,EAAIlH,SAEJiK,EAASrqB,KAAK8d,eAAe,GAAIzc,GAAQrB,KAAKgc,KAAMhc,KAAKqc,KAAMrc,KAAKsc,OACpEgO,EAAStqB,KAAK8d,eAAe,GAAIzc,GAAQrB,KAAKkc,KAAMlc,KAAKqc,KAAMrc,KAAKsc,OACpEgL,EAAIY,YAAcloB,KAAK6c,UACvByK,EAAIa,YACJb,EAAIc,OAAOiC,EAAOhY,EAAGgY,EAAO/X,GAC5BgV,EAAIe,OAAOiC,EAAOjY,EAAGiY,EAAOhY,GAC5BgV,EAAIlH,SAGJkH,EAAIO,UAAY,EAEhB8B,EAAO3pB,KAAK8d,eAAe,GAAIzc,GAAQrB,KAAKgc,KAAMhc,KAAKmc,KAAMnc,KAAKsc,OAClEsN,EAAK5pB,KAAK8d,eAAe,GAAIzc,GAAQrB,KAAKgc,KAAMhc,KAAKqc,KAAMrc,KAAKsc,OAChEgL,EAAIY,YAAcloB,KAAK6c,UACvByK,EAAIa,YACJb,EAAIc,OAAOuB,EAAKtX,EAAGsX,EAAKrX,GACxBgV,EAAIe,OAAOuB,EAAGvX,EAAGuX,EAAGtX,GACpBgV,EAAIlH,SAEJuJ,EAAO3pB,KAAK8d,eAAe,GAAIzc,GAAQrB,KAAKkc,KAAMlc,KAAKmc,KAAMnc,KAAKsc,OAClEsN,EAAK5pB,KAAK8d,eAAe,GAAIzc,GAAQrB,KAAKkc,KAAMlc,KAAKqc,KAAMrc,KAAKsc,OAChEgL,EAAIY,YAAcloB,KAAK6c,UACvByK,EAAIa,YACJb,EAAIc,OAAOuB,EAAKtX,EAAGsX,EAAKrX,GACxBgV,EAAIe,OAAOuB,EAAGvX,EAAGuX,EAAGtX,GACpBgV,EAAIlH,QAGJ,IAAIhG,GAASpa,KAAKoa,MACdA,GAAO1U,OAAS,IAClB0kB,EAAU,GAAMpqB,KAAKwd,MAAMlL,EAC3ByX,GAAS/pB,KAAKgc,KAAOhc,KAAKkc,MAAQ,EAClC8N,EAAS/kB,KAAK6Z,IAAI4L,GAAY,EAAK1qB,KAAKmc,KAAOiO,EAASpqB,KAAKqc,KAAO+N,EACpEN,EAAO9pB,KAAK8d,eAAe,GAAIzc,GAAQ0oB,EAAOC,EAAOhqB,KAAKsc,OACtDrX,KAAK6Z,IAAe,EAAX4L,GAAgB,GAC3BpD,EAAIuB,UAAY,SAChBvB,EAAIwB,aAAe,OAEZ7jB,KAAK0Z,IAAe,EAAX+L,GAAgB,GAChCpD,EAAIuB,UAAY,QAChBvB,EAAIwB,aAAe,WAGnBxB,EAAIuB,UAAY,OAChBvB,EAAIwB,aAAe,UAErBxB,EAAIiB,UAAYvoB,KAAK6c,UACrByK,EAAIyB,SAAS3O,EAAQ0P,EAAKzX,EAAGyX,EAAKxX,GAIpC,IAAI+H,GAASra,KAAKqa,MACdA,GAAO3U,OAAS,IAClBykB,EAAU,GAAMnqB,KAAKwd,MAAMnL,EAC3B0X,EAAS9kB,KAAK0Z,IAAI+L,GAAa,EAAK1qB,KAAKgc,KAAOmO,EAAUnqB,KAAKkc,KAAOiO,EACtEH,GAAShqB,KAAKmc,KAAOnc,KAAKqc,MAAQ,EAClCyN,EAAO9pB,KAAK8d,eAAe,GAAIzc,GAAQ0oB,EAAOC,EAAOhqB,KAAKsc,OACtDrX,KAAK6Z,IAAe,EAAX4L,GAAgB,GAC3BpD,EAAIuB,UAAY,SAChBvB,EAAIwB,aAAe,OAEZ7jB,KAAK0Z,IAAe,EAAX+L,GAAgB,GAChCpD,EAAIuB,UAAY,QAChBvB,EAAIwB,aAAe,WAGnBxB,EAAIuB,UAAY,OAChBvB,EAAIwB,aAAe,UAErBxB,EAAIiB,UAAYvoB,KAAK6c,UACrByK,EAAIyB,SAAS1O,EAAQyP,EAAKzX,EAAGyX,EAAKxX,GAIpC,IAAIgI,GAASta,KAAKsa,MACdA,GAAO5U,OAAS,IAClBwkB,EAAS,GACTH,EAAS9kB,KAAK6Z,IAAI4L,GAAa,EAAK1qB,KAAKgc,KAAOhc,KAAKkc,KACrD8N,EAAS/kB,KAAK0Z,IAAI+L,GAAa,EAAK1qB,KAAKmc,KAAOnc,KAAKqc,KACrD4N,GAASjqB,KAAKsc,KAAOtc,KAAKwc,MAAQ,EAClCsN,EAAO9pB,KAAK8d,eAAe,GAAIzc,GAAQ0oB,EAAOC,EAAOC,IACrD3C,EAAIuB,UAAY,QAChBvB,EAAIwB,aAAe,SACnBxB,EAAIiB,UAAYvoB,KAAK6c,UACrByK,EAAIyB,SAASzO,EAAQwP,EAAKzX,EAAI6X,EAAQJ,EAAKxX,KAU/CtR,EAAQyS,UAAUwU,SAAW,SAAS0C,EAAGC,EAAGC,GAC1C,GAAIC,GAAGC,EAAGC,EAAGC,EAAGC,EAAIC,CAMpB,QAJAF,EAAIJ,EAAID,EACRM,EAAKjmB,KAAKC,MAAMylB,EAAE,IAClBQ,EAAIF,GAAK,EAAIhmB,KAAKmmB,IAAMT,EAAE,GAAM,EAAK,IAE7BO,GACN,IAAK,GAAGJ,EAAIG,EAAGF,EAAII,EAAGH,EAAI,CAAG,MAC7B,KAAK,GAAGF,EAAIK,EAAGJ,EAAIE,EAAGD,EAAI,CAAG,MAC7B,KAAK,GAAGF,EAAI,EAAGC,EAAIE,EAAGD,EAAIG,CAAG,MAC7B,KAAK,GAAGL,EAAI,EAAGC,EAAII,EAAGH,EAAIC,CAAG,MAC7B,KAAK,GAAGH,EAAIK,EAAGJ,EAAI,EAAGC,EAAIC,CAAG,MAC7B,KAAK,GAAGH,EAAIG,EAAGF,EAAI,EAAGC,EAAIG,CAAG,MAE7B,SAASL,EAAI,EAAGC,EAAI,EAAGC,EAAI,EAG7B,MAAO,OAASK,SAAW,IAAFP,GAAS,IAAMO,SAAW,IAAFN,GAAS,IAAMM,SAAW,IAAFL,GAAS,KAQpFhqB,EAAQyS,UAAUuT,gBAAkB,WAClC,GAEExU,GAAOoV,EAAOhgB,EAAK0jB,EACnB/lB,EACAgmB,EAAgBhD,EAAWL,EAAaL,EACxCvc,EAAGC,EAAGC,EAAGggB,EALP1L,EAAS9f,KAAK6f,MAAMC,OACtBwH,EAAMxH,EAAOyH,WAAW,KAO1B,MAAwBhhB,SAApBvG,KAAK0b,YAA4B1b,KAAK0b,WAAWhW,QAAU,GAA/D,CAIA,IAAKH,EAAI,EAAGA,EAAIvF,KAAK0b,WAAWhW,OAAQH,IAAK,CAC3C,GAAIoe,GAAQ3jB,KAAKie,2BAA2Bje,KAAK0b,WAAWnW,GAAGiN,OAC3DoR,EAAS5jB,KAAKke,4BAA4ByF,EAE9C3jB,MAAK0b,WAAWnW,GAAGoe,MAAQA,EAC3B3jB,KAAK0b,WAAWnW,GAAGqe,OAASA,CAG5B,IAAI6H,GAAczrB,KAAKie,2BAA2Bje,KAAK0b,WAAWnW,GAAGse,OACrE7jB,MAAK0b,WAAWnW,GAAGmmB,KAAO1rB,KAAK+a,gBAAkB0Q,EAAY/lB,UAAY+lB,EAAYhO,EAIvF,GAAIkO,GAAY,SAAUrmB,EAAGa,GAC3B,MAAOA,GAAEulB,KAAOpmB,EAAEomB,KAIpB,IAFA1rB,KAAK0b,WAAWjF,KAAKkV,GAEjB3rB,KAAKwN,QAAUxM,EAAQ6Z,MAAMoG,SAC/B,IAAK1b,EAAI,EAAGA,EAAIvF,KAAK0b,WAAWhW,OAAQH,IAMtC,GALAiN,EAAQxS,KAAK0b,WAAWnW,GACxBqiB,EAAQ5nB,KAAK0b,WAAWnW,GAAGue,WAC3Blc,EAAQ5H,KAAK0b,WAAWnW,GAAGwe,SAC3BuH,EAAQtrB,KAAK0b,WAAWnW,GAAGye,WAEbzd,SAAViM,GAAiCjM,SAAVqhB,GAA+BrhB,SAARqB,GAA+BrB,SAAV+kB,EAAqB,CAE1F,GAAItrB,KAAKmb,gBAAkBnb,KAAKkb,WAAY,CAK1C,GAAI0Q,GAAQvqB,EAAQwqB,SAASP,EAAM3H,MAAOnR,EAAMmR,OAC5CmI,EAAQzqB,EAAQwqB,SAASjkB,EAAI+b,MAAOiE,EAAMjE,OAC1CoI,EAAe1qB,EAAQ2qB,aAAaJ,EAAOE,GAC3CtmB,EAAMumB,EAAarmB,QAGvB6lB,GAAkBQ,EAAatO,EAAI,MAGnC8N,IAAiB,CAGfA,IAEFC,GAAQhZ,EAAMA,MAAMiL,EAAImK,EAAMpV,MAAMiL,EAAI7V,EAAI4K,MAAMiL,EAAI6N,EAAM9Y,MAAMiL,GAAK,EACvEnS,EAAoE,KAA/D,GAAKkgB,EAAOxrB,KAAKsc,MAAQtc,KAAKwd,MAAMC,EAAKzd,KAAKqb,eACnD9P,EAAI,EAEAvL,KAAKkb,YACP1P,EAAIvG,KAAKwG,IAAI,EAAKsgB,EAAa1Z,EAAI7M,EAAO,EAAG,GAC7C+iB,EAAYvoB,KAAKioB,SAAS3c,EAAGC,EAAGC,GAChC0c,EAAcK,IAGd/c,EAAI,EACJ+c,EAAYvoB,KAAKioB,SAAS3c,EAAGC,EAAGC,GAChC0c,EAAcloB,KAAK6c,aAIrB0L,EAAY,OACZL,EAAcloB,KAAK6c,WAErBgL,EAAY,GAEZP,EAAIO,UAAYA,EAChBP,EAAIiB,UAAYA,EAChBjB,EAAIY,YAAcA,EAClBZ,EAAIa,YACJb,EAAIc,OAAO5V,EAAMoR,OAAOvR,EAAGG,EAAMoR,OAAOtR,GACxCgV,EAAIe,OAAOT,EAAMhE,OAAOvR,EAAGuV,EAAMhE,OAAOtR,GACxCgV,EAAIe,OAAOiD,EAAM1H,OAAOvR,EAAGiZ,EAAM1H,OAAOtR,GACxCgV,EAAIe,OAAOzgB,EAAIgc,OAAOvR,EAAGzK,EAAIgc,OAAOtR,GACpCgV,EAAIkB,YACJlB,EAAInH,OACJmH,EAAIlH,cAKR,KAAK7a,EAAI,EAAGA,EAAIvF,KAAK0b,WAAWhW,OAAQH,IACtCiN,EAAQxS,KAAK0b,WAAWnW,GACxBqiB,EAAQ5nB,KAAK0b,WAAWnW,GAAGue,WAC3Blc,EAAQ5H,KAAK0b,WAAWnW,GAAGwe,SAEbxd,SAAViM,IAEAqV,EADE7nB,KAAK+a,gBACK,GAAKvI,EAAMmR,MAAMlG,EAGjB,IAAMzd,KAAKyb,IAAIgC,EAAIzd,KAAKwb,OAAOmE,iBAIjCpZ,SAAViM,GAAiCjM,SAAVqhB,IAEzB4D,GAAQhZ,EAAMA,MAAMiL,EAAImK,EAAMpV,MAAMiL,GAAK,EACzCnS,EAAoE,KAA/D,GAAKkgB,EAAOxrB,KAAKsc,MAAQtc,KAAKwd,MAAMC,EAAKzd,KAAKqb,eAEnDiM,EAAIO,UAAYA,EAChBP,EAAIY,YAAcloB,KAAKioB,SAAS3c,EAAG,EAAG,GACtCgc,EAAIa,YACJb,EAAIc,OAAO5V,EAAMoR,OAAOvR,EAAGG,EAAMoR,OAAOtR,GACxCgV,EAAIe,OAAOT,EAAMhE,OAAOvR,EAAGuV,EAAMhE,OAAOtR,GACxCgV,EAAIlH,UAGQ7Z,SAAViM,GAA+BjM,SAARqB,IAEzB4jB,GAAQhZ,EAAMA,MAAMiL,EAAI7V,EAAI4K,MAAMiL,GAAK,EACvCnS,EAAoE,KAA/D,GAAKkgB,EAAOxrB,KAAKsc,MAAQtc,KAAKwd,MAAMC,EAAKzd,KAAKqb,eAEnDiM,EAAIO,UAAYA,EAChBP,EAAIY,YAAcloB,KAAKioB,SAAS3c,EAAG,EAAG,GACtCgc,EAAIa,YACJb,EAAIc,OAAO5V,EAAMoR,OAAOvR,EAAGG,EAAMoR,OAAOtR,GACxCgV,EAAIe,OAAOzgB,EAAIgc,OAAOvR,EAAGzK,EAAIgc,OAAOtR,GACpCgV,EAAIlH,YAWZpf,EAAQyS,UAAU0T,eAAiB,WACjC,GAEI5hB,GAFAua,EAAS9f,KAAK6f,MAAMC,OACpBwH,EAAMxH,EAAOyH,WAAW,KAG5B,MAAwBhhB,SAApBvG,KAAK0b,YAA4B1b,KAAK0b,WAAWhW,QAAU,GAA/D,CAIA,IAAKH,EAAI,EAAGA,EAAIvF,KAAK0b,WAAWhW,OAAQH,IAAK,CAC3C,GAAIoe,GAAQ3jB,KAAKie,2BAA2Bje,KAAK0b,WAAWnW,GAAGiN,OAC3DoR,EAAS5jB,KAAKke,4BAA4ByF,EAC9C3jB,MAAK0b,WAAWnW,GAAGoe,MAAQA,EAC3B3jB,KAAK0b,WAAWnW,GAAGqe,OAASA,CAG5B,IAAI6H,GAAczrB,KAAKie,2BAA2Bje,KAAK0b,WAAWnW,GAAGse,OACrE7jB,MAAK0b,WAAWnW,GAAGmmB,KAAO1rB,KAAK+a,gBAAkB0Q,EAAY/lB,UAAY+lB,EAAYhO,EAIvF,GAAIkO,GAAY,SAAUrmB,EAAGa,GAC3B,MAAOA,GAAEulB,KAAOpmB,EAAEomB,KAEpB1rB,MAAK0b,WAAWjF,KAAKkV,EAGrB,IAAIhE,GAAmC,IAAzB3nB,KAAK6f,MAAME,WACzB,KAAKxa,EAAI,EAAGA,EAAIvF,KAAK0b,WAAWhW,OAAQH,IAAK,CAC3C,GAAIiN,GAAQxS,KAAK0b,WAAWnW,EAE5B,IAAIvF,KAAKwN,QAAUxM,EAAQ6Z,MAAM+F,QAAS,CAGxC,GAAI+I,GAAO3pB,KAAK8d,eAAetL,EAAMqR,OACrCyD,GAAIO,UAAY,EAChBP,EAAIY,YAAcloB,KAAK8c,UACvBwK,EAAIa,YACJb,EAAIc,OAAOuB,EAAKtX,EAAGsX,EAAKrX,GACxBgV,EAAIe,OAAO7V,EAAMoR,OAAOvR,EAAGG,EAAMoR,OAAOtR,GACxCgV,EAAIlH,SAIN,GAAIzN,EAEFA,GADE3S,KAAKwN,QAAUxM,EAAQ6Z,MAAMiG,QACxB6G,EAAQ,EAAI,EAAEA,GAAWnV,EAAMA,MAAMpL,MAAQpH,KAAKyc,WAAazc,KAAK0c,SAAW1c,KAAKyc,UAGpFkL,CAGT,IAAIsE,EAEFA,GADEjsB,KAAK+a,gBACEpI,GAAQH,EAAMmR,MAAMlG,EAGpB9K,IAAS3S,KAAKyb,IAAIgC,EAAIzd,KAAKwb,OAAOmE,gBAEhC,EAATsM,IACFA,EAAS,EAGX,IAAI9e,GAAKtC,EAAOyV,CACZtgB,MAAKwN,QAAUxM,EAAQ6Z,MAAMgG,UAE/B1T,EAAqE,KAA9D,GAAKqF,EAAMA,MAAMpL,MAAQpH,KAAKyc,UAAYzc,KAAKwd,MAAMpW,OAC5DyD,EAAQ7K,KAAKioB,SAAS9a,EAAK,EAAG,GAC9BmT,EAActgB,KAAKioB,SAAS9a,EAAK,EAAG,KAE7BnN,KAAKwN,QAAUxM,EAAQ6Z,MAAMiG,SACpCjW,EAAQ7K,KAAK+c,SACbuD,EAActgB,KAAKgd,iBAInB7P,EAA+E,KAAxE,GAAKqF,EAAMA,MAAMiL,EAAIzd,KAAKsc,MAAQtc,KAAKwd,MAAMC,EAAKzd,KAAKqb,eAC9DxQ,EAAQ7K,KAAKioB,SAAS9a,EAAK,EAAG,GAC9BmT,EAActgB,KAAKioB,SAAS9a,EAAK,EAAG,KAItCma,EAAIO,UAAY,EAChBP,EAAIY,YAAc5H,EAClBgH,EAAIiB,UAAY1d,EAChByc,EAAIa,YACJb,EAAI4E,IAAI1Z,EAAMoR,OAAOvR,EAAGG,EAAMoR,OAAOtR,EAAG2Z,EAAQ,EAAW,EAARhnB,KAAKknB,IAAM,GAC9D7E,EAAInH,OACJmH,EAAIlH,YAQRpf,EAAQyS,UAAUyT,eAAiB,WACjC,GAEI3hB,GAAG6mB,EAAGC,EAASC,EAFfxM,EAAS9f,KAAK6f,MAAMC,OACpBwH,EAAMxH,EAAOyH,WAAW,KAG5B,MAAwBhhB,SAApBvG,KAAK0b,YAA4B1b,KAAK0b,WAAWhW,QAAU,GAA/D,CAIA,IAAKH,EAAI,EAAGA,EAAIvF,KAAK0b,WAAWhW,OAAQH,IAAK,CAC3C,GAAIoe,GAAQ3jB,KAAKie,2BAA2Bje,KAAK0b,WAAWnW,GAAGiN,OAC3DoR,EAAS5jB,KAAKke,4BAA4ByF,EAC9C3jB,MAAK0b,WAAWnW,GAAGoe,MAAQA,EAC3B3jB,KAAK0b,WAAWnW,GAAGqe,OAASA,CAG5B,IAAI6H,GAAczrB,KAAKie,2BAA2Bje,KAAK0b,WAAWnW,GAAGse,OACrE7jB,MAAK0b,WAAWnW,GAAGmmB,KAAO1rB,KAAK+a,gBAAkB0Q,EAAY/lB,UAAY+lB,EAAYhO,EAIvF,GAAIkO,GAAY,SAAUrmB,EAAGa,GAC3B,MAAOA,GAAEulB,KAAOpmB,EAAEomB,KAEpB1rB,MAAK0b,WAAWjF,KAAKkV,EAGrB,IAAIY,GAASvsB,KAAK2c,UAAY,EAC1B6P,EAASxsB,KAAK4c,UAAY,CAC9B,KAAKrX,EAAI,EAAGA,EAAIvF,KAAK0b,WAAWhW,OAAQH,IAAK,CAC3C,GAGI4H,GAAKtC,EAAOyV,EAHZ9N,EAAQxS,KAAK0b,WAAWnW,EAIxBvF,MAAKwN,QAAUxM,EAAQ6Z,MAAM6F,UAE/BvT,EAAqE,KAA9D,GAAKqF,EAAMA,MAAMpL,MAAQpH,KAAKyc,UAAYzc,KAAKwd,MAAMpW,OAC5DyD,EAAQ7K,KAAKioB,SAAS9a,EAAK,EAAG,GAC9BmT,EAActgB,KAAKioB,SAAS9a,EAAK,EAAG,KAE7BnN,KAAKwN,QAAUxM,EAAQ6Z,MAAM8F,SACpC9V,EAAQ7K,KAAK+c,SACbuD,EAActgB,KAAKgd,iBAInB7P,EAA+E,KAAxE,GAAKqF,EAAMA,MAAMiL,EAAIzd,KAAKsc,MAAQtc,KAAKwd,MAAMC,EAAKzd,KAAKqb,eAC9DxQ,EAAQ7K,KAAKioB,SAAS9a,EAAK,EAAG,GAC9BmT,EAActgB,KAAKioB,SAAS9a,EAAK,EAAG,KAIlCnN,KAAKwN,QAAUxM,EAAQ6Z,MAAM8F,UAC/B4L,EAAUvsB,KAAK2c,UAAY,IAAOnK,EAAMA,MAAMpL,MAAQpH,KAAKyc,WAAazc,KAAK0c,SAAW1c,KAAKyc,UAAY,GAAM,IAC/G+P,EAAUxsB,KAAK4c,UAAY,IAAOpK,EAAMA,MAAMpL,MAAQpH,KAAKyc,WAAazc,KAAK0c,SAAW1c,KAAKyc,UAAY,GAAM,IAIjH,IAAIhI,GAAKzU,KACL+d,EAAUvL,EAAMA,MAChB5K,IACD4K,MAAO,GAAInR,GAAQ0c,EAAQ1L,EAAIka,EAAQxO,EAAQzL,EAAIka,EAAQzO,EAAQN,KACnEjL,MAAO,GAAInR,GAAQ0c,EAAQ1L,EAAIka,EAAQxO,EAAQzL,EAAIka,EAAQzO,EAAQN,KACnEjL,MAAO,GAAInR,GAAQ0c,EAAQ1L,EAAIka,EAAQxO,EAAQzL,EAAIka,EAAQzO,EAAQN,KACnEjL,MAAO,GAAInR,GAAQ0c,EAAQ1L,EAAIka,EAAQxO,EAAQzL,EAAIka,EAAQzO,EAAQN,KAElEoG,IACDrR,MAAO,GAAInR,GAAQ0c,EAAQ1L,EAAIka,EAAQxO,EAAQzL,EAAIka,EAAQxsB,KAAKsc,QAChE9J,MAAO,GAAInR,GAAQ0c,EAAQ1L,EAAIka,EAAQxO,EAAQzL,EAAIka,EAAQxsB,KAAKsc,QAChE9J,MAAO,GAAInR,GAAQ0c,EAAQ1L,EAAIka,EAAQxO,EAAQzL,EAAIka,EAAQxsB,KAAKsc,QAChE9J,MAAO,GAAInR,GAAQ0c,EAAQ1L,EAAIka,EAAQxO,EAAQzL,EAAIka,EAAQxsB,KAAKsc,OAInE1U,GAAIW,QAAQ,SAAU+a,GACpBA,EAAIM,OAASnP,EAAGqJ,eAAewF,EAAI9Q,SAErCqR,EAAOtb,QAAQ,SAAU+a,GACvBA,EAAIM,OAASnP,EAAGqJ,eAAewF,EAAI9Q,QAIrC,IAAIia,KACDH,QAAS1kB,EAAK8kB,OAAQrrB,EAAQsrB,IAAI9I,EAAO,GAAGrR,MAAOqR,EAAO,GAAGrR,SAC7D8Z,SAAU1kB,EAAI,GAAIA,EAAI,GAAIic,EAAO,GAAIA,EAAO,IAAK6I,OAAQrrB,EAAQsrB,IAAI9I,EAAO,GAAGrR,MAAOqR,EAAO,GAAGrR,SAChG8Z,SAAU1kB,EAAI,GAAIA,EAAI,GAAIic,EAAO,GAAIA,EAAO,IAAK6I,OAAQrrB,EAAQsrB,IAAI9I,EAAO,GAAGrR,MAAOqR,EAAO,GAAGrR,SAChG8Z,SAAU1kB,EAAI,GAAIA,EAAI,GAAIic,EAAO,GAAIA,EAAO,IAAK6I,OAAQrrB,EAAQsrB,IAAI9I,EAAO,GAAGrR,MAAOqR,EAAO,GAAGrR,SAChG8Z,SAAU1kB,EAAI,GAAIA,EAAI,GAAIic,EAAO,GAAIA,EAAO,IAAK6I,OAAQrrB,EAAQsrB,IAAI9I,EAAO,GAAGrR,MAAOqR,EAAO,GAAGrR,QAKnG,KAHAA,EAAMia,SAAWA,EAGZL,EAAI,EAAGA,EAAIK,EAAS/mB,OAAQ0mB,IAAK,CACpCC,EAAUI,EAASL,EACnB,IAAIQ,GAAc5sB,KAAKie,2BAA2BoO,EAAQK,OAC1DL,GAAQX,KAAO1rB,KAAK+a,gBAAkB6R,EAAYlnB,UAAYknB,EAAYnP,EAwB5E,IAjBAgP,EAAShW,KAAK,SAAUnR,EAAGa,GACzB,GAAI0mB,GAAO1mB,EAAEulB,KAAOpmB,EAAEomB,IACtB,OAAImB,GAAaA,EAGbvnB,EAAEgnB,UAAY1kB,EAAY,EAC1BzB,EAAEmmB,UAAY1kB,EAAY,GAGvB,IAIT0f,EAAIO,UAAY,EAChBP,EAAIY,YAAc5H,EAClBgH,EAAIiB,UAAY1d,EAEXuhB,EAAI,EAAGA,EAAIK,EAAS/mB,OAAQ0mB,IAC/BC,EAAUI,EAASL,GACnBE,EAAUD,EAAQC,QAClBhF,EAAIa,YACJb,EAAIc,OAAOkE,EAAQ,GAAG1I,OAAOvR,EAAGia,EAAQ,GAAG1I,OAAOtR,GAClDgV,EAAIe,OAAOiE,EAAQ,GAAG1I,OAAOvR,EAAGia,EAAQ,GAAG1I,OAAOtR,GAClDgV,EAAIe,OAAOiE,EAAQ,GAAG1I,OAAOvR,EAAGia,EAAQ,GAAG1I,OAAOtR,GAClDgV,EAAIe,OAAOiE,EAAQ,GAAG1I,OAAOvR,EAAGia,EAAQ,GAAG1I,OAAOtR,GAClDgV,EAAIe,OAAOiE,EAAQ,GAAG1I,OAAOvR,EAAGia,EAAQ,GAAG1I,OAAOtR,GAClDgV,EAAInH,OACJmH,EAAIlH,YAUVpf,EAAQyS,UAAUwT,gBAAkB,WAClC,GAEEzU,GAAOjN,EAFLua,EAAS9f,KAAK6f,MAAMC,OACtBwH,EAAMxH,EAAOyH,WAAW,KAG1B,MAAwBhhB,SAApBvG,KAAK0b,YAA4B1b,KAAK0b,WAAWhW,QAAU,GAA/D,CAIA,IAAKH,EAAI,EAAGA,EAAIvF,KAAK0b,WAAWhW,OAAQH,IAAK,CAC3C,GAAIoe,GAAQ3jB,KAAKie,2BAA2Bje,KAAK0b,WAAWnW,GAAGiN,OAC3DoR,EAAS5jB,KAAKke,4BAA4ByF,EAE9C3jB,MAAK0b,WAAWnW,GAAGoe,MAAQA,EAC3B3jB,KAAK0b,WAAWnW,GAAGqe,OAASA,EAc9B,IAVI5jB,KAAK0b,WAAWhW,OAAS,IAC3B8M,EAAQxS,KAAK0b,WAAW,GAExB4L,EAAIO,UAAY,EAChBP,EAAIY,YAAc,OAClBZ,EAAIa,YACJb,EAAIc,OAAO5V,EAAMoR,OAAOvR,EAAGG,EAAMoR,OAAOtR,IAIrC/M,EAAI,EAAGA,EAAIvF,KAAK0b,WAAWhW,OAAQH,IACtCiN,EAAQxS,KAAK0b,WAAWnW,GACxB+hB,EAAIe,OAAO7V,EAAMoR,OAAOvR,EAAGG,EAAMoR,OAAOtR,EAItCtS,MAAK0b,WAAWhW,OAAS,GAC3B4hB,EAAIlH,WASRpf,EAAQyS,UAAUiR,aAAe,SAASlb,GAWxC,GAVAA,EAAQA,GAAS/B,OAAO+B,MAIpBxJ,KAAK8sB,gBACP9sB,KAAK+sB,WAAWvjB,GAIlBxJ,KAAK8sB,eAAiBtjB,EAAMwjB,MAAyB,IAAhBxjB,EAAMwjB,MAAiC,IAAjBxjB,EAAMyjB,OAC5DjtB,KAAK8sB,gBAAmB9sB,KAAKktB,UAAlC,CAGAltB,KAAKmtB,YAAclQ,EAAUzT,GAC7BxJ,KAAKotB,YAAchQ,EAAU5T,GAE7BxJ,KAAKqtB,WAAa,GAAIhpB,MAAKrE,KAAKkQ,OAChClQ,KAAKstB,SAAW,GAAIjpB,MAAKrE,KAAKmQ,KAC9BnQ,KAAKutB,iBAAmBvtB,KAAKwb,OAAO6K,iBAEpCrmB,KAAK6f,MAAMrS,MAAMggB,OAAS,MAK1B,IAAI/Y,GAAKzU,IACTA,MAAKytB,YAAc,SAAUjkB,GAAQiL,EAAGiZ,aAAalkB,IACrDxJ,KAAK2tB,UAAc,SAAUnkB,GAAQiL,EAAGsY,WAAWvjB,IACnD7I,EAAKkI,iBAAiBgJ,SAAU,YAAa4C,EAAGgZ,aAChD9sB,EAAKkI,iBAAiBgJ,SAAU,UAAW4C,EAAGkZ,WAC9ChtB,EAAK4I,eAAeC,KAStBxI,EAAQyS,UAAUia,aAAe,SAAUlkB,GACzCA,EAAQA,GAAS/B,OAAO+B,KAGxB,IAAIokB,GAAQhI,WAAW3I,EAAUzT,IAAUxJ,KAAKmtB,YAC5CU,EAAQjI,WAAWxI,EAAU5T,IAAUxJ,KAAKotB,YAE5CU,EAAgB9tB,KAAKutB,iBAAiBxH,WAAa6H,EAAQ,IAC3DG,EAAc/tB,KAAKutB,iBAAiBvH,SAAW6H,EAAQ,IAEvDG,EAAY,EACZC,EAAYhpB,KAAK0Z,IAAIqP,EAAY,IAAM,EAAI/oB,KAAKknB,GAIhDlnB,MAAKmmB,IAAInmB,KAAK0Z,IAAImP,IAAkBG,IACtCH,EAAgB7oB,KAAKipB,MAAOJ,EAAgB7oB,KAAKknB,IAAOlnB,KAAKknB,GAAK,MAEhElnB,KAAKmmB,IAAInmB,KAAK6Z,IAAIgP,IAAkBG,IACtCH,GAAiB7oB,KAAKipB,MAAOJ,EAAe7oB,KAAKknB,GAAK,IAAQ,IAAOlnB,KAAKknB,GAAK,MAI7ElnB,KAAKmmB,IAAInmB,KAAK0Z,IAAIoP,IAAgBE,IACpCF,EAAc9oB,KAAKipB,MAAOH,EAAc9oB,KAAKknB,IAAOlnB,KAAKknB,IAEvDlnB,KAAKmmB,IAAInmB,KAAK6Z,IAAIiP,IAAgBE,IACpCF,GAAe9oB,KAAKipB,MAAOH,EAAa9oB,KAAKknB,GAAK,IAAQ,IAAOlnB,KAAKknB,IAGxEnsB,KAAKwb,OAAOyK,eAAe6H,EAAeC,GAC1C/tB,KAAKgiB,QAGL,IAAImM,GAAanuB,KAAKomB,mBACtBpmB,MAAKouB,KAAK,uBAAwBD,GAElCxtB,EAAK4I,eAAeC,IAStBxI,EAAQyS,UAAUsZ,WAAa,SAAUvjB,GACvCxJ,KAAK6f,MAAMrS,MAAMggB,OAAS,OAC1BxtB,KAAK8sB,gBAAiB,EAGtBnsB,EAAK0I,oBAAoBwI,SAAU,YAAa7R,KAAKytB,aACrD9sB,EAAK0I,oBAAoBwI,SAAU,UAAa7R,KAAK2tB,WACrDhtB,EAAK4I,eAAeC,IAOtBxI,EAAQyS,UAAUuR,WAAa,SAAUxb,GACvC,GAAIuP,GAAQ,IACRsV,EAASpR,EAAUzT,GAAS7I,EAAK0G,gBAAgBrH,KAAK6f,OACtDyO,EAASlR,EAAU5T,GAAS7I,EAAKgH,eAAe3H,KAAK6f,MAEzD,IAAK7f,KAAKob,YAAV,CASA,GALIpb,KAAKuuB,gBACP3U,aAAa5Z,KAAKuuB,gBAIhBvuB,KAAK8sB,eAEP,WADA9sB,MAAKwuB,cAIP,IAAIxuB,KAAK2mB,SAAW3mB,KAAK2mB,QAAQ8H,UAAW,CAE1C,GAAIA,GAAYzuB,KAAK0uB,iBAAiBL,EAAQC,EAC1CG,KAAczuB,KAAK2mB,QAAQ8H,YAEzBA,EACFzuB,KAAK2uB,aAAaF,GAGlBzuB,KAAKwuB,oBAIN,CAEH,GAAI/Z,GAAKzU,IACTA,MAAKuuB,eAAiB1U,WAAW,WAC/BpF,EAAG8Z,eAAiB,IAGpB,IAAIE,GAAYha,EAAGia,iBAAiBL,EAAQC,EACxCG,IACFha,EAAGka,aAAaF,IAEjB1V,MAOP/X,EAAQyS,UAAUmR,cAAgB,SAASpb,GACzCxJ,KAAKktB,WAAY,CAEjB,IAAIzY,GAAKzU,IACTA,MAAK4uB,YAAc,SAAUplB,GAAQiL,EAAGoa,aAAarlB,IACrDxJ,KAAK8uB,WAAc,SAAUtlB,GAAQiL,EAAGsa,YAAYvlB,IACpD7I,EAAKkI,iBAAiBgJ,SAAU,YAAa4C,EAAGma,aAChDjuB,EAAKkI,iBAAiBgJ,SAAU,WAAY4C,EAAGqa,YAE/C9uB,KAAK0kB,aAAalb,IAMpBxI,EAAQyS,UAAUob,aAAe,SAASrlB,GACxCxJ,KAAK0tB,aAAalkB,IAMpBxI,EAAQyS,UAAUsb,YAAc,SAASvlB,GACvCxJ,KAAKktB,WAAY,EAEjBvsB,EAAK0I,oBAAoBwI,SAAU,YAAa7R,KAAK4uB,aACrDjuB,EAAK0I,oBAAoBwI,SAAU,WAAc7R,KAAK8uB,YAEtD9uB,KAAK+sB,WAAWvjB,IASlBxI,EAAQyS,UAAUqR,SAAW,SAAStb,GAC/BA,IACHA,EAAQ/B,OAAO+B,MAGjB,IAAIwlB,GAAQ,CAYZ,IAXIxlB,EAAMylB,WACRD,EAAQxlB,EAAMylB,WAAW,IAChBzlB,EAAM0lB,SAGfF,GAASxlB,EAAM0lB,OAAO,GAMpBF,EAAO,CACT,GAAIG,GAAYnvB,KAAKwb,OAAOmE,eACxByP,EAAYD,GAAa,EAAIH,EAAQ,GAEzChvB,MAAKwb,OAAO2K,aAAaiJ,GACzBpvB,KAAKgiB,SAELhiB,KAAKwuB,eAIP,GAAIL,GAAanuB,KAAKomB,mBACtBpmB,MAAKouB,KAAK,uBAAwBD,GAKlCxtB,EAAK4I,eAAeC,IAUtBxI,EAAQyS,UAAU4b,gBAAkB,SAAU7c,EAAO8c,GAKnD,QAASC,GAAMld,GACb,MAAOA,GAAI,EAAI,EAAQ,EAAJA,EAAQ,GAAK,EALlC,GAAI/M,GAAIgqB,EAAS,GACfnpB,EAAImpB,EAAS,GACb7uB,EAAI6uB,EAAS,GAMXE,EAAKD,GAAMppB,EAAEkM,EAAI/M,EAAE+M,IAAMG,EAAMF,EAAIhN,EAAEgN,IAAMnM,EAAEmM,EAAIhN,EAAEgN,IAAME,EAAMH,EAAI/M,EAAE+M,IACrEod,EAAKF,GAAM9uB,EAAE4R,EAAIlM,EAAEkM,IAAMG,EAAMF,EAAInM,EAAEmM,IAAM7R,EAAE6R,EAAInM,EAAEmM,IAAME,EAAMH,EAAIlM,EAAEkM,IACrEqd,EAAKH,GAAMjqB,EAAE+M,EAAI5R,EAAE4R,IAAMG,EAAMF,EAAI7R,EAAE6R,IAAMhN,EAAEgN,EAAI7R,EAAE6R,IAAME,EAAMH,EAAI5R,EAAE4R,GAGzE,SAAc,GAANmd,GAAiB,GAANC,GAAWD,GAAMC,GAC3B,GAANA,GAAiB,GAANC,GAAWD,GAAMC,GACtB,GAANF,GAAiB,GAANE,GAAWF,GAAME,IAUjC1uB,EAAQyS,UAAUib,iBAAmB,SAAUrc,EAAGC,GAChD,GAAI/M,GACFoqB,EAAU,IACVlB,EAAY,KACZmB,EAAmB,KACnBC,EAAc,KACdnD,EAAS,GAAItrB,GAAQiR,EAAGC,EAE1B,IAAItS,KAAKwN,QAAUxM,EAAQ6Z,MAAM4F,KAC/BzgB,KAAKwN,QAAUxM,EAAQ6Z,MAAM6F,UAC7B1gB,KAAKwN,QAAUxM,EAAQ6Z,MAAM8F,QAE7B,IAAKpb,EAAIvF,KAAK0b,WAAWhW,OAAS,EAAGH,GAAK,EAAGA,IAAK,CAChDkpB,EAAYzuB,KAAK0b,WAAWnW,EAC5B,IAAIknB,GAAYgC,EAAUhC,QAC1B,IAAIA,EACF,IAAK,GAAIlhB,GAAIkhB,EAAS/mB,OAAS,EAAG6F,GAAK,EAAGA,IAAK,CAE7C,GAAI8gB,GAAUI,EAASlhB,GACnB+gB,EAAUD,EAAQC,QAClBwD,GAAaxD,EAAQ,GAAG1I,OAAQ0I,EAAQ,GAAG1I,OAAQ0I,EAAQ,GAAG1I,QAC9DmM,GAAazD,EAAQ,GAAG1I,OAAQ0I,EAAQ,GAAG1I,OAAQ0I,EAAQ,GAAG1I,OAClE,IAAI5jB,KAAKqvB,gBAAgB3C,EAAQoD,IAC/B9vB,KAAKqvB,gBAAgB3C,EAAQqD,GAE7B,MAAOtB,QAQf,KAAKlpB,EAAI,EAAGA,EAAIvF,KAAK0b,WAAWhW,OAAQH,IAAK,CAC3CkpB,EAAYzuB,KAAK0b,WAAWnW,EAC5B,IAAIiN,GAAQic,EAAU7K,MACtB,IAAIpR,EAAO,CACT,GAAIwd,GAAQ/qB,KAAKmmB,IAAI/Y,EAAIG,EAAMH,GAC3B4d,EAAQhrB,KAAKmmB,IAAI9Y,EAAIE,EAAMF,GAC3BoZ,EAAQzmB,KAAKirB,KAAKF,EAAQA,EAAQC,EAAQA,IAEzB,OAAhBJ,GAA+BA,EAAPnE,IAA8BiE,EAAPjE,IAClDmE,EAAcnE,EACdkE,EAAmBnB,IAO3B,MAAOmB,IAQT5uB,EAAQyS,UAAUkb,aAAe,SAAUF,GACzC,GAAI0B,GAASC,EAAMC,CAEdrwB,MAAK2mB,SAiCRwJ,EAAUnwB,KAAK2mB,QAAQ2J,IAAIH,QAC3BC,EAAQpwB,KAAK2mB,QAAQ2J,IAAIF,KACzBC,EAAQrwB,KAAK2mB,QAAQ2J,IAAID,MAlCzBF,EAAUte,SAASM,cAAc,OACjCge,EAAQ3iB,MAAM2W,SAAW,WACzBgM,EAAQ3iB,MAAM+W,QAAU,OACxB4L,EAAQ3iB,MAAMzB,OAAS,oBACvBokB,EAAQ3iB,MAAM3C,MAAQ,UACtBslB,EAAQ3iB,MAAM1B,WAAa,wBAC3BqkB,EAAQ3iB,MAAM+iB,aAAe,MAC7BJ,EAAQ3iB,MAAMgjB,UAAY,qCAE1BJ,EAAOve,SAASM,cAAc,OAC9Bie,EAAK5iB,MAAM2W,SAAW,WACtBiM,EAAK5iB,MAAMsF,OAAS,OACpBsd,EAAK5iB,MAAMqF,MAAQ,IACnBud,EAAK5iB,MAAMijB,WAAa,oBAExBJ,EAAMxe,SAASM,cAAc,OAC7Bke,EAAI7iB,MAAM2W,SAAW,WACrBkM,EAAI7iB,MAAMsF,OAAS,IACnBud,EAAI7iB,MAAMqF,MAAQ,IAClBwd,EAAI7iB,MAAMzB,OAAS,oBACnBskB,EAAI7iB,MAAM+iB,aAAe,MAEzBvwB,KAAK2mB,SACH8H,UAAW,KACX6B,KACEH,QAASA,EACTC,KAAMA,EACNC,IAAKA,KAUXrwB,KAAKwuB,eAELxuB,KAAK2mB,QAAQ8H,UAAYA,EAEvB0B,EAAQ3L,UADsB,kBAArBxkB,MAAKob,YACMpb,KAAKob,YAAYqT,EAAUjc,OAG3B,6BACMic,EAAUjc,MAAMH,EAAI,gCACpBoc,EAAUjc,MAAMF,EAAI,gCACpBmc,EAAUjc,MAAMiL,EAAI,qBAIhD0S,EAAQ3iB,MAAMhG,KAAQ,IACtB2oB,EAAQ3iB,MAAM5F,IAAQ,IACtB5H,KAAK6f,MAAM9N,YAAYoe,GACvBnwB,KAAK6f,MAAM9N,YAAYqe,GACvBpwB,KAAK6f,MAAM9N,YAAYse,EAGvB,IAAIK,GAAgBP,EAAQQ,YACxBC,EAAkBT,EAAQU,aAC1BC,EAAgBV,EAAKS,aACrBE,EAAcV,EAAIM,YAClBK,EAAgBX,EAAIQ,aAEpBrpB,EAAOinB,EAAU7K,OAAOvR,EAAIqe,EAAe,CAC/ClpB,GAAOvC,KAAKwG,IAAIxG,KAAKiI,IAAI1F,EAAM,IAAKxH,KAAK6f,MAAME,YAAc,GAAK2Q,GAElEN,EAAK5iB,MAAMhG,KAASinB,EAAU7K,OAAOvR,EAAI,KACzC+d,EAAK5iB,MAAM5F,IAAU6mB,EAAU7K,OAAOtR,EAAIwe,EAAc,KACxDX,EAAQ3iB,MAAMhG,KAAQA,EAAO,KAC7B2oB,EAAQ3iB,MAAM5F,IAAS6mB,EAAU7K,OAAOtR,EAAIwe,EAAaF,EAAiB,KAC1EP,EAAI7iB,MAAMhG,KAAWinB,EAAU7K,OAAOvR,EAAI0e,EAAW,EAAK,KAC1DV,EAAI7iB,MAAM5F,IAAW6mB,EAAU7K,OAAOtR,EAAI0e,EAAY,EAAK,MAO7DhwB,EAAQyS,UAAU+a,aAAe,WAC/B,GAAIxuB,KAAK2mB,QAAS,CAChB3mB,KAAK2mB,QAAQ8H,UAAY,IAEzB,KAAK,GAAI7oB,KAAQ5F,MAAK2mB,QAAQ2J,IAC5B,GAAItwB,KAAK2mB,QAAQ2J,IAAIzqB,eAAeD,GAAO,CACzC,GAAI0B,GAAOtH,KAAK2mB,QAAQ2J,IAAI1qB,EACxB0B,IAAQA,EAAKwC,YACfxC,EAAKwC,WAAW2H,YAAYnK,MA8BtCzH,EAAOD,QAAUoB,GAKb,SAASnB,EAAQD,EAASM,GAc9B,QAASgB,KACPlB,KAAKixB,YAAc,GAAI5vB,GACvBrB,KAAKkxB,eACLlxB,KAAKkxB,YAAYnL,WAAa,EAC9B/lB,KAAKkxB,YAAYlL,SAAW,EAC5BhmB,KAAKmxB,UAAY,IAEjBnxB,KAAKoxB,eAAiB,GAAI/vB,GAC1BrB,KAAKqxB,eAAkB,GAAIhwB,GAAQ,GAAI4D,KAAKknB,GAAI,EAAG,GAEnDnsB,KAAKsxB,6BAtBP,GAAIjwB,GAAUnB,EAAoB,GA+BlCgB,GAAOuS,UAAUoK,eAAiB,SAASxL,EAAGC,EAAGmL,GAC/Czd,KAAKixB,YAAY5e,EAAIA,EACrBrS,KAAKixB,YAAY3e,EAAIA,EACrBtS,KAAKixB,YAAYxT,EAAIA,EAErBzd,KAAKsxB,8BAWPpwB,EAAOuS,UAAUwS,eAAiB,SAASF,EAAYC,GAClCzf,SAAfwf,IACF/lB,KAAKkxB,YAAYnL,WAAaA,GAGfxf,SAAbyf,IACFhmB,KAAKkxB,YAAYlL,SAAWA,EACxBhmB,KAAKkxB,YAAYlL,SAAW,IAAGhmB,KAAKkxB,YAAYlL,SAAW,GAC3DhmB,KAAKkxB,YAAYlL,SAAW,GAAI/gB,KAAKknB,KAAInsB,KAAKkxB,YAAYlL,SAAW,GAAI/gB,KAAKknB,MAGjE5lB,SAAfwf,GAAyCxf,SAAbyf,IAC9BhmB,KAAKsxB,8BAQTpwB,EAAOuS,UAAU4S,eAAiB,WAChC,GAAIkL,KAIJ,OAHAA,GAAIxL,WAAa/lB,KAAKkxB,YAAYnL,WAClCwL,EAAIvL,SAAWhmB,KAAKkxB,YAAYlL,SAEzBuL,GAOTrwB,EAAOuS,UAAU0S,aAAe,SAASzgB,GACxBa,SAAXb,IAGJ1F,KAAKmxB,UAAYzrB,EAKb1F,KAAKmxB,UAAY,MAAMnxB,KAAKmxB,UAAY,KACxCnxB,KAAKmxB,UAAY,IAAKnxB,KAAKmxB,UAAY,GAE3CnxB,KAAKsxB,+BAOPpwB,EAAOuS,UAAUkM,aAAe,WAC9B,MAAO3f,MAAKmxB,WAOdjwB,EAAOuS,UAAU8K,kBAAoB,WACnC,MAAOve,MAAKoxB,gBAOdlwB,EAAOuS,UAAUmL,kBAAoB,WACnC,MAAO5e,MAAKqxB,gBAOdnwB,EAAOuS,UAAU6d,2BAA6B,WAE5CtxB,KAAKoxB,eAAe/e,EAAIrS,KAAKixB,YAAY5e,EAAIrS,KAAKmxB,UAAYlsB,KAAK0Z,IAAI3e,KAAKkxB,YAAYnL,YAAc9gB,KAAK6Z,IAAI9e,KAAKkxB,YAAYlL,UAChIhmB,KAAKoxB,eAAe9e,EAAItS,KAAKixB,YAAY3e,EAAItS,KAAKmxB,UAAYlsB,KAAK6Z,IAAI9e,KAAKkxB,YAAYnL,YAAc9gB,KAAK6Z,IAAI9e,KAAKkxB,YAAYlL,UAChIhmB,KAAKoxB,eAAe3T,EAAIzd,KAAKixB,YAAYxT,EAAIzd,KAAKmxB,UAAYlsB,KAAK0Z,IAAI3e,KAAKkxB,YAAYlL,UAGxFhmB,KAAKqxB,eAAehf,EAAIpN,KAAKknB,GAAG,EAAInsB,KAAKkxB,YAAYlL,SACrDhmB,KAAKqxB,eAAe/e,EAAI,EACxBtS,KAAKqxB,eAAe5T,GAAKzd,KAAKkxB,YAAYnL,YAG5ClmB,EAAOD,QAAUsB,GAIb,SAASrB,EAAQD,EAASM,GAW9B,QAASiB,GAAQ6R,EAAMsO,EAAQkQ,GAC7BxxB,KAAKgT,KAAOA,EACZhT,KAAKshB,OAASA,EACdthB,KAAKwxB,MAAQA,EAEbxxB,KAAKqI,MAAQ9B,OACbvG,KAAKoH,MAAQb,OAGbvG,KAAKqX,OAASma,EAAMjQ,kBAAkBvO,EAAKwC,MAAOxV,KAAKshB,QAGvDthB,KAAKqX,OAAOZ,KAAK,SAAUnR,EAAGa,GAC5B,MAAOb,GAAIa,EAAI,EAAQA,EAAJb,EAAQ,GAAK,IAG9BtF,KAAKqX,OAAO3R,OAAS,GACvB1F,KAAKspB,YAAY,GAInBtpB,KAAK0b,cAEL1b,KAAKM,QAAS,EACdN,KAAKyxB,eAAiBlrB,OAElBirB,EAAMjW,kBACRvb,KAAKM,QAAS,EACdN,KAAK0xB,oBAGL1xB,KAAKM,QAAS,EAxClB,GAAIQ,GAAWZ,EAAoB,EAiDnCiB,GAAOsS,UAAUke,SAAW,WAC1B,MAAO3xB,MAAKM,QAQda,EAAOsS,UAAUme,kBAAoB,WAInC,IAHA,GAAIpsB,GAAMxF,KAAKqX,OAAO3R,OAElBH,EAAI,EACDvF,KAAK0b,WAAWnW,IACrBA,GAGF,OAAON,MAAKipB,MAAM3oB,EAAIC,EAAM,MAQ9BrE,EAAOsS,UAAUgW,SAAW,WAC1B,MAAOzpB,MAAKwxB,MAAM7W,aAQpBxZ,EAAOsS,UAAUoe,UAAY,WAC3B,MAAO7xB,MAAKshB,QAOdngB,EAAOsS,UAAUiW,iBAAmB,WAClC,MAAmBnjB,UAAfvG,KAAKqI,MACA9B,OAEFvG,KAAKqX,OAAOrX,KAAKqI,QAO1BlH,EAAOsS,UAAUqe,UAAY,WAC3B,MAAO9xB,MAAKqX,QAQdlW,EAAOsS,UAAUyB,SAAW,SAAS7M,GACnC,GAAIA,GAASrI,KAAKqX,OAAO3R,OACvB,KAAM,2BAER,OAAO1F,MAAKqX,OAAOhP;EASrBlH,EAAOsS,UAAU4P,eAAiB,SAAShb,GAIzC,GAHc9B,SAAV8B,IACFA,EAAQrI,KAAKqI,OAED9B,SAAV8B,EACF,QAEF,IAAIqT,EACJ,IAAI1b,KAAK0b,WAAWrT,GAClBqT,EAAa1b,KAAK0b,WAAWrT,OAE1B,CACH,GAAIoE,KACJA,GAAE6U,OAASthB,KAAKshB,OAChB7U,EAAErF,MAAQpH,KAAKqX,OAAOhP,EAEtB,IAAI0pB,GAAW,GAAIjxB,GAASd,KAAKgT,MAAMiB,OAAQ,SAAUtE,GAAO,MAAQA,GAAKlD,EAAE6U,SAAW7U,EAAErF,SAAWoO,KACvGkG,GAAa1b,KAAKwxB,MAAMnO,eAAe0O,GAEvC/xB,KAAK0b,WAAWrT,GAASqT,EAG3B,MAAOA,IAQTva,EAAOsS,UAAUsO,kBAAoB,SAASvZ,GAC5CxI,KAAKyxB,eAAiBjpB,GASxBrH,EAAOsS,UAAU6V,YAAc,SAASjhB,GACtC,GAAIA,GAASrI,KAAKqX,OAAO3R,OACvB,KAAM,2BAER1F,MAAKqI,MAAQA,EACbrI,KAAKoH,MAAQpH,KAAKqX,OAAOhP,IAO3BlH,EAAOsS,UAAUie,iBAAmB,SAASrpB,GAC7B9B,SAAV8B,IACFA,EAAQ,EAEV,IAAIwX,GAAQ7f,KAAKwxB,MAAM3R,KAEvB,IAAIxX,EAAQrI,KAAKqX,OAAO3R,OAAQ,CAC9B,CAAqB1F,KAAKqjB,eAAehb,GAIlB9B,SAAnBsZ,EAAMmS,WACRnS,EAAMmS,SAAWngB,SAASM,cAAc,OACxC0N,EAAMmS,SAASxkB,MAAM2W,SAAW,WAChCtE,EAAMmS,SAASxkB,MAAM3C,MAAQ,OAC7BgV,EAAM9N,YAAY8N,EAAMmS,UAE1B,IAAIA,GAAWhyB,KAAK4xB,mBACpB/R,GAAMmS,SAASxN,UAAY,wBAA0BwN,EAAW,IAEhEnS,EAAMmS,SAASxkB,MAAMqW,OAAS,OAC9BhE,EAAMmS,SAASxkB,MAAMhG,KAAO,MAE5B,IAAIiN,GAAKzU,IACT6Z,YAAW,WAAYpF,EAAGid,iBAAiBrpB,EAAM,IAAM,IACvDrI,KAAKM,QAAS,MAGdN,MAAKM,QAAS,EAGSiG,SAAnBsZ,EAAMmS,WACRnS,EAAMpO,YAAYoO,EAAMmS,UACxBnS,EAAMmS,SAAWzrB,QAGfvG,KAAKyxB,gBACPzxB,KAAKyxB,kBAIX5xB,EAAOD,QAAUuB,GAKb,SAAStB,GAOb,QAASuB,GAASiR,EAAGC,GACnBtS,KAAKqS,EAAU9L,SAAN8L,EAAkBA,EAAI,EAC/BrS,KAAKsS,EAAU/L,SAAN+L,EAAkBA,EAAI,EAGjCzS,EAAOD,QAAUwB,GAKb,SAASvB,GAQb,QAASwB,GAAQgR,EAAGC,EAAGmL,GACrBzd,KAAKqS,EAAU9L,SAAN8L,EAAkBA,EAAI,EAC/BrS,KAAKsS,EAAU/L,SAAN+L,EAAkBA,EAAI,EAC/BtS,KAAKyd,EAAUlX,SAANkX,EAAkBA,EAAI,EASjCpc,EAAQwqB,SAAW,SAASvmB,EAAGa,GAC7B,GAAI8rB,GAAM,GAAI5wB,EAId,OAHA4wB,GAAI5f,EAAI/M,EAAE+M,EAAIlM,EAAEkM,EAChB4f,EAAI3f,EAAIhN,EAAEgN,EAAInM,EAAEmM,EAChB2f,EAAIxU,EAAInY,EAAEmY,EAAItX,EAAEsX,EACTwU,GAST5wB,EAAQkS,IAAM,SAASjO,EAAGa,GACxB,GAAI+rB,GAAM,GAAI7wB,EAId,OAHA6wB,GAAI7f,EAAI/M,EAAE+M,EAAIlM,EAAEkM,EAChB6f,EAAI5f,EAAIhN,EAAEgN,EAAInM,EAAEmM,EAChB4f,EAAIzU,EAAInY,EAAEmY,EAAItX,EAAEsX,EACTyU,GAST7wB,EAAQsrB,IAAM,SAASrnB,EAAGa,GACxB,MAAO,IAAI9E,IACFiE,EAAE+M,EAAIlM,EAAEkM,GAAK,GACb/M,EAAEgN,EAAInM,EAAEmM,GAAK,GACbhN,EAAEmY,EAAItX,EAAEsX,GAAK,IAWxBpc,EAAQ2qB,aAAe,SAAS1mB,EAAGa,GACjC,GAAI4lB,GAAe,GAAI1qB,EAMvB,OAJA0qB,GAAa1Z,EAAI/M,EAAEgN,EAAInM,EAAEsX,EAAInY,EAAEmY,EAAItX,EAAEmM,EACrCyZ,EAAazZ,EAAIhN,EAAEmY,EAAItX,EAAEkM,EAAI/M,EAAE+M,EAAIlM,EAAEsX,EACrCsO,EAAatO,EAAInY,EAAE+M,EAAIlM,EAAEmM,EAAIhN,EAAEgN,EAAInM,EAAEkM,EAE9B0Z,GAQT1qB,EAAQoS,UAAU/N,OAAS,WACzB,MAAOT,MAAKirB,KACJlwB,KAAKqS,EAAIrS,KAAKqS,EACdrS,KAAKsS,EAAItS,KAAKsS,EACdtS,KAAKyd,EAAIzd,KAAKyd,IAIxB5d,EAAOD,QAAUyB,GAKb,SAASxB,EAAQD,EAASM,GAa9B,QAASoB,GAAOwY,EAAW/K,GACzB,GAAkBxI,SAAduT,EACF,KAAM,qCAKR,IAHA9Z,KAAK8Z,UAAYA,EACjB9Z,KAAKipB,QAAWla,GAA8BxI,QAAnBwI,EAAQka,QAAwBla,EAAQka,SAAU,EAEzEjpB,KAAKipB,QAAS,CAChBjpB,KAAK6f,MAAQhO,SAASM,cAAc,OAEpCnS,KAAK6f,MAAMrS,MAAMqF,MAAQ,OACzB7S,KAAK6f,MAAMrS,MAAM2W,SAAW,WAC5BnkB,KAAK8Z,UAAU/H,YAAY/R,KAAK6f,OAEhC7f,KAAK6f,MAAMsS,KAAOtgB,SAASM,cAAc,SACzCnS,KAAK6f,MAAMsS,KAAKtrB,KAAO,SACvB7G,KAAK6f,MAAMsS,KAAK/qB,MAAQ,OACxBpH,KAAK6f,MAAM9N,YAAY/R,KAAK6f,MAAMsS,MAElCnyB,KAAK6f,MAAM0F,KAAO1T,SAASM,cAAc,SACzCnS,KAAK6f,MAAM0F,KAAK1e,KAAO,SACvB7G,KAAK6f,MAAM0F,KAAKne,MAAQ,OACxBpH,KAAK6f,MAAM9N,YAAY/R,KAAK6f,MAAM0F,MAElCvlB,KAAK6f,MAAM+I,KAAO/W,SAASM,cAAc,SACzCnS,KAAK6f,MAAM+I,KAAK/hB,KAAO,SACvB7G,KAAK6f,MAAM+I,KAAKxhB,MAAQ,OACxBpH,KAAK6f,MAAM9N,YAAY/R,KAAK6f,MAAM+I,MAElC5oB,KAAK6f,MAAMuS,IAAMvgB,SAASM,cAAc,SACxCnS,KAAK6f,MAAMuS,IAAIvrB,KAAO,SACtB7G,KAAK6f,MAAMuS,IAAI5kB,MAAM2W,SAAW,WAChCnkB,KAAK6f,MAAMuS,IAAI5kB,MAAMzB,OAAS,gBAC9B/L,KAAK6f,MAAMuS,IAAI5kB,MAAMqF,MAAQ,QAC7B7S,KAAK6f,MAAMuS,IAAI5kB,MAAMsF,OAAS,MAC9B9S,KAAK6f,MAAMuS,IAAI5kB,MAAM+iB,aAAe,MACpCvwB,KAAK6f,MAAMuS,IAAI5kB,MAAM6kB,gBAAkB,MACvCryB,KAAK6f,MAAMuS,IAAI5kB,MAAMzB,OAAS,oBAC9B/L,KAAK6f,MAAMuS,IAAI5kB,MAAM0S,gBAAkB,UACvClgB,KAAK6f,MAAM9N,YAAY/R,KAAK6f,MAAMuS,KAElCpyB,KAAK6f,MAAMyS,MAAQzgB,SAASM,cAAc,SAC1CnS,KAAK6f,MAAMyS,MAAMzrB,KAAO,SACxB7G,KAAK6f,MAAMyS,MAAM9kB,MAAMyM,OAAS,MAChCja,KAAK6f,MAAMyS,MAAMlrB,MAAQ,IACzBpH,KAAK6f,MAAMyS,MAAM9kB,MAAM2W,SAAW,WAClCnkB,KAAK6f,MAAMyS,MAAM9kB,MAAMhG,KAAO,SAC9BxH,KAAK6f,MAAM9N,YAAY/R,KAAK6f,MAAMyS,MAGlC,IAAI7d,GAAKzU,IACTA,MAAK6f,MAAMyS,MAAM7N,YAAc,SAAUjb,GAAQiL,EAAGiQ,aAAalb,IACjExJ,KAAK6f,MAAMsS,KAAKI,QAAU,SAAU/oB,GAAQiL,EAAG0d,KAAK3oB,IACpDxJ,KAAK6f,MAAM0F,KAAKgN,QAAU,SAAU/oB,GAAQiL,EAAG+d,WAAWhpB,IAC1DxJ,KAAK6f,MAAM+I,KAAK2J,QAAU,SAAU/oB,GAAQiL,EAAGmU,KAAKpf,IAGtDxJ,KAAKyyB,iBAAmBlsB,OAExBvG,KAAKqX,UACLrX,KAAKqI,MAAQ9B,OAEbvG,KAAK0yB,YAAcnsB,OACnBvG,KAAK2yB,aAAe,IACpB3yB,KAAK4yB,UAAW,EA3ElB,GAAIjyB,GAAOT,EAAoB,EAiF/BoB,GAAOmS,UAAU0e,KAAO,WACtB,GAAI9pB,GAAQrI,KAAKqpB,UACbhhB,GAAQ,IACVA,IACArI,KAAK6yB,SAASxqB,KAOlB/G,EAAOmS,UAAUmV,KAAO,WACtB,GAAIvgB,GAAQrI,KAAKqpB,UACbhhB,GAAQrI,KAAKqX,OAAO3R,OAAS,IAC/B2C,IACArI,KAAK6yB,SAASxqB,KAOlB/G,EAAOmS,UAAUqf,SAAW,WAC1B,GAAI5iB,GAAQ,GAAI7L,MAEZgE,EAAQrI,KAAKqpB,UACbhhB,GAAQrI,KAAKqX,OAAO3R,OAAS,GAC/B2C,IACArI,KAAK6yB,SAASxqB,IAEPrI,KAAK4yB,WAEZvqB,EAAQ,EACRrI,KAAK6yB,SAASxqB,GAGhB,IAAI8H,GAAM,GAAI9L,MACVwoB,EAAQ1c,EAAMD,EAId6iB,EAAW9tB,KAAKiI,IAAIlN,KAAK2yB,aAAe9F,EAAM,GAG9CpY,EAAKzU,IACTA,MAAK0yB,YAAc7Y,WAAW,WAAYpF,EAAGqe,YAAcC,IAM7DzxB,EAAOmS,UAAU+e,WAAa,WACHjsB,SAArBvG,KAAK0yB,YACP1yB,KAAKulB,OAELvlB,KAAKylB,QAOTnkB,EAAOmS,UAAU8R,KAAO,WAElBvlB,KAAK0yB,cAET1yB,KAAK8yB,WAED9yB,KAAK6f,QACP7f,KAAK6f,MAAM0F,KAAKne,MAAQ,UAO5B9F,EAAOmS,UAAUgS,KAAO,WACtBuN,cAAchzB,KAAK0yB,aACnB1yB,KAAK0yB,YAAcnsB,OAEfvG,KAAK6f,QACP7f,KAAK6f,MAAM0F,KAAKne,MAAQ,SAQ5B9F,EAAOmS,UAAU8V,oBAAsB,SAAS/gB,GAC9CxI,KAAKyyB,iBAAmBjqB,GAO1BlH,EAAOmS,UAAU0V,gBAAkB,SAAS4J,GAC1C/yB,KAAK2yB,aAAeI,GAOtBzxB,EAAOmS,UAAUwf,gBAAkB,WACjC,MAAOjzB,MAAK2yB,cASdrxB,EAAOmS,UAAUyf,YAAc,SAASC,GACtCnzB,KAAK4yB,SAAWO,GAOlB7xB,EAAOmS,UAAU2f,SAAW,WACI7sB,SAA1BvG,KAAKyyB,kBACPzyB,KAAKyyB,oBAOTnxB,EAAOmS,UAAUuO,OAAS,WACxB,GAAIhiB,KAAK6f,MAAO,CAEd7f,KAAK6f,MAAMuS,IAAI5kB,MAAM5F,IAAO5H,KAAK6f,MAAMuF,aAAa,EAChDplB,KAAK6f,MAAMuS,IAAIvB,aAAa,EAAK,KACrC7wB,KAAK6f,MAAMuS,IAAI5kB,MAAMqF,MAAS7S,KAAK6f,MAAME,YACrC/f,KAAK6f,MAAMsS,KAAKpS,YAChB/f,KAAK6f,MAAM0F,KAAKxF,YAChB/f,KAAK6f,MAAM+I,KAAK7I,YAAc,GAAO,IAGzC,IAAIvY,GAAOxH,KAAKqzB,YAAYrzB,KAAKqI,MACjCrI,MAAK6f,MAAMyS,MAAM9kB,MAAMhG,KAAO,EAAS,OAS3ClG,EAAOmS,UAAUyV,UAAY,SAAS7R,GACpCrX,KAAKqX,OAASA,EAEVrX,KAAKqX,OAAO3R,OAAS,EACvB1F,KAAK6yB,SAAS,GAEd7yB,KAAKqI,MAAQ9B,QAOjBjF,EAAOmS,UAAUof,SAAW,SAASxqB,GACnC,KAAIA,EAAQrI,KAAKqX,OAAO3R,QAOtB,KAAM,2BANN1F,MAAKqI,MAAQA,EAEbrI,KAAKgiB,SACLhiB,KAAKozB,YAWT9xB,EAAOmS,UAAU4V,SAAW,WAC1B,MAAOrpB,MAAKqI,OAQd/G,EAAOmS,UAAU+B,IAAM,WACrB,MAAOxV,MAAKqX,OAAOrX,KAAKqI,QAI1B/G,EAAOmS,UAAUiR,aAAe,SAASlb,GAEvC,GAAIsjB,GAAiBtjB,EAAMwjB,MAAyB,IAAhBxjB,EAAMwjB,MAAiC,IAAjBxjB,EAAMyjB,MAChE,IAAKH,EAAL,CAEA9sB,KAAKszB,aAAe9pB,EAAM0T,QAC1Bld,KAAKuzB,YAAc3N,WAAW5lB,KAAK6f,MAAMyS,MAAM9kB,MAAMhG,MAErDxH,KAAK6f,MAAMrS,MAAMggB,OAAS,MAK1B,IAAI/Y,GAAKzU,IACTA,MAAKytB,YAAc,SAAUjkB,GAAQiL,EAAGiZ,aAAalkB,IACrDxJ,KAAK2tB,UAAc,SAAUnkB,GAAQiL,EAAGsY,WAAWvjB,IACnD7I,EAAKkI,iBAAiBgJ,SAAU,YAAa7R,KAAKytB,aAClD9sB,EAAKkI,iBAAiBgJ,SAAU,UAAa7R,KAAK2tB,WAClDhtB,EAAK4I,eAAeC,KAItBlI,EAAOmS,UAAU+f,YAAc,SAAUhsB,GACvC,GAAIqL,GAAQ+S,WAAW5lB,KAAK6f,MAAMuS,IAAI5kB,MAAMqF,OACxC7S,KAAK6f,MAAMyS,MAAMvS,YAAc,GAC/B1N,EAAI7K,EAAO,EAEXa,EAAQpD,KAAKipB,MAAM7b,EAAIQ,GAAS7S,KAAKqX,OAAO3R,OAAO,GAIvD,OAHY,GAAR2C,IAAWA,EAAQ,GACnBA,EAAQrI,KAAKqX,OAAO3R,OAAO,IAAG2C,EAAQrI,KAAKqX,OAAO3R,OAAO,GAEtD2C,GAGT/G,EAAOmS,UAAU4f,YAAc,SAAUhrB,GACvC,GAAIwK,GAAQ+S,WAAW5lB,KAAK6f,MAAMuS,IAAI5kB,MAAMqF,OACxC7S,KAAK6f,MAAMyS,MAAMvS,YAAc,GAE/B1N,EAAIhK,GAASrI,KAAKqX,OAAO3R,OAAO,GAAKmN,EACrCrL,EAAO6K,EAAI,CAEf,OAAO7K,IAKTlG,EAAOmS,UAAUia,aAAe,SAAUlkB,GACxC,GAAIqjB,GAAOrjB,EAAM0T,QAAUld,KAAKszB,aAC5BjhB,EAAIrS,KAAKuzB,YAAc1G,EAEvBxkB,EAAQrI,KAAKwzB,YAAYnhB,EAE7BrS,MAAK6yB,SAASxqB,GAEd1H,EAAK4I,kBAIPjI,EAAOmS,UAAUsZ,WAAa,WAC5B/sB,KAAK6f,MAAMrS,MAAMggB,OAAS,OAG1B7sB,EAAK0I,oBAAoBwI,SAAU,YAAa7R,KAAKytB,aACrD9sB,EAAK0I,oBAAoBwI,SAAU,UAAW7R,KAAK2tB,WAEnDhtB,EAAK4I,kBAGP1J,EAAOD,QAAU0B,GAKb,SAASzB,GA2Bb,QAAS0B,GAAW2O,EAAOC,EAAKuY,EAAMmB,GAEpC7pB,KAAKyzB,OAAS,EACdzzB,KAAK0zB,KAAO,EACZ1zB,KAAK2zB,MAAQ,EACb3zB,KAAK6pB,YAAa,EAClB7pB,KAAK4zB,UAAY,EAEjB5zB,KAAK6zB,SAAW,EAChB7zB,KAAK8zB,SAAS5jB,EAAOC,EAAKuY,EAAMmB,GAYlCtoB,EAAWkS,UAAUqgB,SAAW,SAAS5jB,EAAOC,EAAKuY,EAAMmB,GACzD7pB,KAAKyzB,OAASvjB,EAAQA,EAAQ,EAC9BlQ,KAAK0zB,KAAOvjB,EAAMA,EAAM,EAExBnQ,KAAK+zB,QAAQrL,EAAMmB,IASrBtoB,EAAWkS,UAAUsgB,QAAU,SAASrL,EAAMmB,GAC/BtjB,SAATmiB,GAA8B,GAARA,IAGPniB,SAAfsjB,IACF7pB,KAAK6pB,WAAaA,GAGlB7pB,KAAK2zB,MADH3zB,KAAK6pB,cAAe,EACTtoB,EAAWyyB,oBAAoBtL,GAE/BA,IAUjBnnB,EAAWyyB,oBAAsB,SAAUtL,GACzC,GAAIuL,GAAQ,SAAU5hB,GAAI,MAAOpN,MAAKivB,IAAI7hB,GAAKpN,KAAKkvB,MAGhDC,EAAQnvB,KAAKovB,IAAI,GAAIpvB,KAAKipB,MAAM+F,EAAMvL,KACtC4L,EAAQ,EAAIrvB,KAAKovB,IAAI,GAAIpvB,KAAKipB,MAAM+F,EAAMvL,EAAO,KACjD6L,EAAQ,EAAItvB,KAAKovB,IAAI,GAAIpvB,KAAKipB,MAAM+F,EAAMvL,EAAO,KAGjDmB,EAAauK,CASjB,OARInvB,MAAKmmB,IAAIkJ,EAAQ5L,IAASzjB,KAAKmmB,IAAIvB,EAAanB,KAAOmB,EAAayK,GACpErvB,KAAKmmB,IAAImJ,EAAQ7L,IAASzjB,KAAKmmB,IAAIvB,EAAanB,KAAOmB,EAAa0K,GAGtD,GAAd1K,IACFA,EAAa,GAGRA,GAOTtoB,EAAWkS,UAAUkV,WAAa,WAChC,MAAO/C,YAAW5lB,KAAK6zB,SAASW,YAAYx0B,KAAK4zB,aAOnDryB,EAAWkS,UAAUghB,QAAU,WAC7B,MAAOz0B,MAAK2zB,OAOdpyB,EAAWkS,UAAUvD,MAAQ,WAC3BlQ,KAAK6zB,SAAW7zB,KAAKyzB,OAASzzB,KAAKyzB,OAASzzB,KAAK2zB,OAMnDpyB,EAAWkS,UAAUmV,KAAO,WAC1B5oB,KAAK6zB,UAAY7zB,KAAK2zB,OAOxBpyB,EAAWkS,UAAUtD,IAAM,WACzB,MAAQnQ,MAAK6zB,SAAW7zB,KAAK0zB,MAG/B7zB,EAAOD,QAAU2B,GAKb,SAAS1B,EAAQD,EAASM,GAuB9B,QAASsB,GAAUsY,EAAW7X,EAAOyyB,EAAQ3lB,GAC3C,KAAM/O,eAAgBwB,IACpB,KAAM,IAAIuY,aAAY,mDAIxB,MAAM/T,MAAMC,QAAQyuB,IAAWA,YAAkB7zB,KAAY6zB,YAAkBpuB,QAAQ,CACrF,GAAIquB,GAAgB5lB,CACpBA,GAAU2lB,EACVA,EAASC,EAGX,GAAIlgB,GAAKzU,IACTA,MAAK40B,gBACH1kB,MAAO,KACPC,IAAO,KAEP0kB,YAAY,EAEZC,YAAa,SACbjiB,MAAO,KACPC,OAAQ,KACRiiB,UAAW,KACXC,UAAW,MAEbh1B,KAAK+O,QAAUpO,EAAK6F,cAAexG,KAAK40B,gBAGxC50B,KAAKi1B,QAAQnb,GAGb9Z,KAAKgC,cAELhC,KAAKk1B,MACH5E,IAAKtwB,KAAKswB,IACV6E,SAAUn1B,KAAK+F,MACfqvB,SACEvhB,GAAI7T,KAAK6T,GAAGwhB,KAAKr1B,MACjBgU,IAAKhU,KAAKgU,IAAIqhB,KAAKr1B,MACnBouB,KAAMpuB,KAAKouB,KAAKiH,KAAKr1B,OAEvBs1B,eACA30B,MACE40B,KAAM,KACNC,SAAU/gB,EAAGghB,UAAUJ,KAAK5gB,GAC5BihB,eAAgBjhB,EAAGkhB,gBAAgBN,KAAK5gB,GACxCmhB,OAAQnhB,EAAGohB,QAAQR,KAAK5gB,GACxBqhB,aAAerhB,EAAGshB,cAAcV,KAAK5gB,KAKzCzU,KAAKg2B,MAAQ,GAAIn0B,GAAM7B,KAAKk1B,MAC5Bl1B,KAAKgC,WAAWkG,KAAKlI,KAAKg2B,OAC1Bh2B,KAAKk1B,KAAKc,MAAQh2B,KAAKg2B,MAGvBh2B,KAAKi2B,SAAW,GAAIhzB,GAASjD,KAAKk1B,MAClCl1B,KAAKgC,WAAWkG,KAAKlI,KAAKi2B,UAC1Bj2B,KAAKk1B,KAAKv0B,KAAK40B,KAAOv1B,KAAKi2B,SAASV,KAAKF,KAAKr1B,KAAKi2B,UAGnDj2B,KAAKk2B,YAAc,GAAI1zB,GAAYxC,KAAKk1B,MACxCl1B,KAAKgC,WAAWkG,KAAKlI,KAAKk2B,aAI1Bl2B,KAAKm2B,WAAa,GAAI1zB,GAAWzC,KAAKk1B,MACtCl1B,KAAKgC,WAAWkG,KAAKlI,KAAKm2B,YAG1Bn2B,KAAKo2B,QAAU,GAAItzB,GAAQ9C,KAAKk1B,MAChCl1B,KAAKgC,WAAWkG,KAAKlI,KAAKo2B,SAE1Bp2B,KAAKq2B,UAAY,KACjBr2B,KAAKs2B,WAAa,KAGdvnB,GACF/O,KAAKwT,WAAWzE,GAId2lB,GACF10B,KAAKu2B,UAAU7B,GAIbzyB,EACFjC,KAAKw2B,SAASv0B,GAGdjC,KAAKgiB,SAjHT,GAEIrhB,IAFUT,EAAoB,IACrBA,EAAoB,IACtBA,EAAoB,IAC3BW,EAAUX,EAAoB,GAC9BY,EAAWZ,EAAoB,GAC/B2B,EAAQ3B,EAAoB,IAC5Bu2B,EAAOv2B,EAAoB,IAC3B+C,EAAW/C,EAAoB,IAC/BsC,EAActC,EAAoB,IAClCuC,EAAavC,EAAoB,IACjC4C,EAAU5C,EAAoB,GA4GlCsB,GAASiS,UAAY,GAAIgjB,GAMzBj1B,EAASiS,UAAU+iB,SAAW,SAASv0B,GACrC,GAGIy0B,GAHAC,EAAiC,MAAlB32B,KAAKq2B,SAwBxB,IAhBEK,EAJGz0B,EAGIA,YAAiBpB,IAAWoB,YAAiBnB,GACvCmB,EAIA,GAAIpB,GAAQoB,GACvB4E,MACEqJ,MAAO,OACPC,IAAK,UAVI,KAgBfnQ,KAAKq2B,UAAYK,EACjB12B,KAAKo2B,SAAWp2B,KAAKo2B,QAAQI,SAASE,GAElCC,EACF,GAA0BpwB,QAAtBvG,KAAK+O,QAAQmB,OAA0C3J,QAApBvG,KAAK+O,QAAQoB,IAAkB,CACpE,GAA0B5J,QAAtBvG,KAAK+O,QAAQmB,OAA0C3J,QAApBvG,KAAK+O,QAAQoB,IAClD,GAAIymB,GAAY52B,KAAK62B,eAGvB,IAAI3mB,GAA8B3J,QAAtBvG,KAAK+O,QAAQmB,MAAqBlQ,KAAK+O,QAAQmB,MAAQ0mB,EAAU1mB,MACzEC,EAA4B5J,QAApBvG,KAAK+O,QAAQoB,IAAqBnQ,KAAK+O,QAAQoB,IAAQymB,EAAUzmB,GAE7EnQ,MAAK82B,UAAU5mB,EAAOC,GAAM4mB,SAAS,QAGrC/2B,MAAKg3B,KAAKD,SAAS,KASzBv1B,EAASiS,UAAU8iB,UAAY,SAAS7B,GAEtC,GAAIgC,EAKFA,GAJGhC,EAGIA,YAAkB7zB,IAAW6zB,YAAkB5zB,GACzC4zB,EAIA,GAAI7zB,GAAQ6zB,GAPZ,KAUf10B,KAAKs2B,WAAaI,EAClB12B,KAAKo2B,QAAQG,UAAUG,IAmBzBl1B,EAASiS,UAAUwjB,aAAe,SAASxhB,EAAK1G,GAC9C/O,KAAKo2B,SAAWp2B,KAAKo2B,QAAQa,aAAaxhB,GAEtC1G,GAAWA,EAAQmoB,OACrBl3B,KAAKk3B,MAAMzhB,EAAK1G,IAQpBvN,EAASiS,UAAU0jB,aAAe,WAChC,MAAOn3B,MAAKo2B,SAAWp2B,KAAKo2B,QAAQe,oBAetC31B,EAASiS,UAAUyjB,MAAQ,SAAS72B,EAAI0O,GACtC,GAAK/O,KAAKq2B,WAAmB9vB,QAANlG,EAAvB,CAEA,GAAIoV,GAAMzP,MAAMC,QAAQ5F,GAAMA,GAAMA,GAGhCg2B,EAAYr2B,KAAKq2B,UAAUhgB,aAAab,IAAIC,GAC9C5O,MACEqJ,MAAO,OACPC,IAAK,UAKLD,EAAQ,KACRC,EAAM,IAcV,IAbAkmB,EAAU9tB,QAAQ,SAAU6uB,GAC1B,GAAI7rB,GAAI6rB,EAASlnB,MAAMnJ,UACnByF,EAAI,OAAS4qB,GAAWA,EAASjnB,IAAIpJ,UAAYqwB,EAASlnB,MAAMnJ,WAEtD,OAAVmJ,GAAsBA,EAAJ3E,KACpB2E,EAAQ3E,IAGE,OAAR4E,GAAgB3D,EAAI2D,KACtBA,EAAM3D,KAII,OAAV0D,GAA0B,OAARC,EAAc,CAElC,GAAIT,IAAUQ,EAAQC,GAAO,EACzB4iB,EAAW9tB,KAAKiI,IAAKlN,KAAKg2B,MAAM7lB,IAAMnQ,KAAKg2B,MAAM9lB,MAAwB,KAAfC,EAAMD,IAEhE6mB,EAAWhoB,GAA+BxI,SAApBwI,EAAQgoB,QAAyBhoB,EAAQgoB,SAAU,CAC7E/2B,MAAKg2B,MAAMlC,SAASpkB,EAASqjB,EAAW,EAAGrjB,EAASqjB,EAAW,EAAGgE,MAUtEv1B,EAASiS,UAAU4jB,aAAe,WAEhC,GAAIC,GAAUt3B,KAAKq2B,UAAUhgB,aAC3B5K,EAAM,KACNyB,EAAM,IAER,IAAIoqB,EAAS,CAEX,GAAIC,GAAUD,EAAQ7rB,IAAI,QAC1BA,GAAM8rB,EAAU52B,EAAKiG,QAAQ2wB,EAAQrnB,MAAO,QAAQnJ,UAAY,IAKhE,IAAIywB,GAAeF,EAAQpqB,IAAI,QAC3BsqB,KACFtqB,EAAMvM,EAAKiG,QAAQ4wB,EAAatnB,MAAO,QAAQnJ,UAEjD,IAAI0wB,GAAaH,EAAQpqB,IAAI,MACzBuqB,KAEAvqB,EADS,MAAPA,EACIvM,EAAKiG,QAAQ6wB,EAAWtnB,IAAK,QAAQpJ,UAGrC9B,KAAKiI,IAAIA,EAAKvM,EAAKiG,QAAQ6wB,EAAWtnB,IAAK,QAAQpJ,YAK/D,OACE0E,IAAa,MAAPA,EAAe,GAAIpH,MAAKoH,GAAO,KACrCyB,IAAa,MAAPA,EAAe,GAAI7I,MAAK6I,GAAO,OAKzCrN,EAAOD,QAAU4B,GAKb,SAAS3B,EAAQD,EAASM,GAsB9B,QAASuB,GAASqY,EAAW7X,EAAOyyB,EAAQ3lB,GAE1C,KAAM/I,MAAMC,QAAQyuB,IAAWA,YAAkB7zB,KAAY6zB,YAAkBpuB,QAAQ,CACrF,GAAIquB,GAAgB5lB,CACpBA,GAAU2lB,EACVA,EAASC,EAGX,GAAIlgB,GAAKzU,IACTA,MAAK40B,gBACH1kB,MAAO,KACPC,IAAO,KAEP0kB,YAAY,EAEZC,YAAa,SACbjiB,MAAO,KACPC,OAAQ,KACRiiB,UAAW,KACXC,UAAW,MAEbh1B,KAAK+O,QAAUpO,EAAK6F,cAAexG,KAAK40B,gBAGxC50B,KAAKi1B,QAAQnb,GAGb9Z,KAAKgC,cAELhC,KAAKk1B,MACH5E,IAAKtwB,KAAKswB,IACV6E,SAAUn1B,KAAK+F,MACfqvB,SACEvhB,GAAI7T,KAAK6T,GAAGwhB,KAAKr1B,MACjBgU,IAAKhU,KAAKgU,IAAIqhB,KAAKr1B,MACnBouB,KAAMpuB,KAAKouB,KAAKiH,KAAKr1B,OAEvBs1B,eACA30B,MACE40B,KAAM,KACNC,SAAU/gB,EAAGghB,UAAUJ,KAAK5gB,GAC5BihB,eAAgBjhB,EAAGkhB,gBAAgBN,KAAK5gB,GACxCmhB,OAAQnhB,EAAGohB,QAAQR,KAAK5gB,GACxBqhB,aAAerhB,EAAGshB,cAAcV,KAAK5gB,KAKzCzU,KAAKg2B,MAAQ,GAAIn0B,GAAM7B,KAAKk1B,MAC5Bl1B,KAAKgC,WAAWkG,KAAKlI,KAAKg2B,OAC1Bh2B,KAAKk1B,KAAKc,MAAQh2B,KAAKg2B,MAGvBh2B,KAAKi2B,SAAW,GAAIhzB,GAASjD,KAAKk1B,MAClCl1B,KAAKgC,WAAWkG,KAAKlI,KAAKi2B,UAC1Bj2B,KAAKk1B,KAAKv0B,KAAK40B,KAAOv1B,KAAKi2B,SAASV,KAAKF,KAAKr1B,KAAKi2B,UAGnDj2B,KAAKk2B,YAAc,GAAI1zB,GAAYxC,KAAKk1B,MACxCl1B,KAAKgC,WAAWkG,KAAKlI,KAAKk2B,aAI1Bl2B,KAAKm2B,WAAa,GAAI1zB,GAAWzC,KAAKk1B,MACtCl1B,KAAKgC,WAAWkG,KAAKlI,KAAKm2B,YAG1Bn2B,KAAK03B,UAAY,GAAI10B,GAAUhD,KAAKk1B,MACpCl1B,KAAKgC,WAAWkG,KAAKlI,KAAK03B,WAE1B13B,KAAKq2B,UAAY,KACjBr2B,KAAKs2B,WAAa,KAGdvnB,GACF/O,KAAKwT,WAAWzE,GAId2lB,GACF10B,KAAKu2B,UAAU7B,GAIbzyB,EACFjC,KAAKw2B,SAASv0B,GAGdjC,KAAKgiB,SA5GT,GAEIrhB,IAFUT,EAAoB,IACrBA,EAAoB,IACtBA,EAAoB,IAC3BW,EAAUX,EAAoB,GAC9BY,EAAWZ,EAAoB,GAC/B2B,EAAQ3B,EAAoB,IAC5Bu2B,EAAOv2B,EAAoB,IAC3B+C,EAAW/C,EAAoB,IAC/BsC,EAActC,EAAoB,IAClCuC,EAAavC,EAAoB,IACjC8C,EAAY9C,EAAoB,GAuGpCuB,GAAQgS,UAAY,GAAIgjB,GAMxBh1B,EAAQgS,UAAU+iB,SAAW,SAASv0B,GACpC,GAGIy0B,GAHAC,EAAiC,MAAlB32B,KAAKq2B,SAwBxB,IAhBEK,EAJGz0B,EAGIA,YAAiBpB,IAAWoB,YAAiBnB,GACvCmB,EAIA,GAAIpB,GAAQoB,GACvB4E,MACEqJ,MAAO,OACPC,IAAK,UAVI,KAgBfnQ,KAAKq2B,UAAYK,EACjB12B,KAAK03B,WAAa13B,KAAK03B,UAAUlB,SAASE,GAEtCC,EACF,GAA0BpwB,QAAtBvG,KAAK+O,QAAQmB,OAA0C3J,QAApBvG,KAAK+O,QAAQoB,IAAkB,CACpE,GAAID,GAA8B3J,QAAtBvG,KAAK+O,QAAQmB,MAAqBlQ,KAAK+O,QAAQmB,MAAQ,KAC/DC,EAA4B5J,QAApBvG,KAAK+O,QAAQoB,IAAqBnQ,KAAK+O,QAAQoB,IAAM,IAEjEnQ,MAAK82B,UAAU5mB,EAAOC,GAAM4mB,SAAS,QAGrC/2B,MAAKg3B,KAAKD,SAAS,KASzBt1B,EAAQgS,UAAU8iB,UAAY,SAAS7B,GAErC,GAAIgC,EAKFA,GAJGhC,EAGIA,YAAkB7zB,IAAW6zB,YAAkB5zB,GACzC4zB,EAIA,GAAI7zB,GAAQ6zB,GAPZ,KAUf10B,KAAKs2B,WAAaI,EAClB12B,KAAK03B,UAAUnB,UAAUG,IAS3Bj1B,EAAQgS,UAAUkkB,UAAY,SAASC,EAAS/kB,EAAOC,GAGrD,MAFevM,UAAXsM,IAAuBA,EAAS,IACrBtM,SAAXuM,IAAuBA,EAAS,IACGvM,SAAnCvG,KAAK03B,UAAUhD,OAAOkD,GACjB53B,KAAK03B,UAAUhD,OAAOkD,GAASD,UAAU9kB,EAAMC,GAG/C,qBAAwB8kB,GASnCn2B,EAAQgS,UAAUokB,eAAiB,SAASD,GAC1C,MAAuCrxB,UAAnCvG,KAAK03B,UAAUhD,OAAOkD,GAChB53B,KAAK03B,UAAUhD,OAAOkD,GAAS3O,UAAkE1iB,SAAtDvG,KAAK03B,UAAU3oB,QAAQ2lB,OAAOoD,WAAWF,IAA+E,GAArD53B,KAAK03B,UAAU3oB,QAAQ2lB,OAAOoD,WAAWF,KAGxJ,GAWXn2B,EAAQgS,UAAU4jB,aAAe,WAC/B,GAAI5rB,GAAM,KACNyB,EAAM,IAGV,KAAK,GAAI0qB,KAAW53B,MAAK03B,UAAUhD,OACjC,GAAI10B,KAAK03B,UAAUhD,OAAO7uB,eAAe+xB,IACO,GAA1C53B,KAAK03B,UAAUhD,OAAOkD,GAAS3O,QACjC,IAAK,GAAI1jB,GAAI,EAAGA,EAAIvF,KAAK03B,UAAUhD,OAAOkD,GAASvB,UAAU3wB,OAAQH,IAAK,CACxE,GAAIoK,GAAO3P,KAAK03B,UAAUhD,OAAOkD,GAASvB,UAAU9wB,GAChD6B,EAAQzG,EAAKiG,QAAQ+I,EAAK0C,EAAG,QAAQtL,SACzC0E,GAAa,MAAPA,EAAcrE,EAAQqE,EAAMrE,EAAQA,EAAQqE,EAClDyB,EAAa,MAAPA,EAAc9F,EAAcA,EAAN8F,EAAc9F,EAAQ8F,EAM1D,OACEzB,IAAa,MAAPA,EAAe,GAAIpH,MAAKoH,GAAO,KACrCyB,IAAa,MAAPA,EAAe,GAAI7I,MAAK6I,GAAO,OAMzCrN,EAAOD,QAAU6B,GAKb,SAAS5B,EAAQD,EAASM,GAK9B,GAAI2D,GAAS3D,EAAoB,GAQjCN,GAAQm4B,qBAAuB,SAAS7C,EAAMI,GAE5C,GADAJ,EAAKI,eACDA,GACgC,GAA9BtvB,MAAMC,QAAQqvB,GAAsB,CACtC,IAAK,GAAI/vB,GAAI,EAAGA,EAAI+vB,EAAY5vB,OAAQH,IACtC,GAA8BgB,SAA1B+uB,EAAY/vB,GAAGyyB,OAAsB,CACvC,GAAIC,KACJA,GAAS/nB,MAAQrM,EAAOyxB,EAAY/vB,GAAG2K,OAAOjJ,SAASF,UACvDkxB,EAAS9nB,IAAMtM,EAAOyxB,EAAY/vB,GAAG4K,KAAKlJ,SAASF,UACnDmuB,EAAKI,YAAYptB,KAAK+vB,GAG1B/C,EAAKI,YAAY7e,KAAK,SAAUnR,EAAGa,GACjC,MAAOb,GAAE4K,MAAQ/J,EAAE+J,UAY3BtQ,EAAQs4B,kBAAoB,SAAUhD,EAAMI,GAC1C,GAAIA,GAAuD/uB,SAAxC2uB,EAAKC,SAASgD,gBAAgBtlB,MAAqB,CACpEjT,EAAQm4B,qBAAqB7C,EAAMI,EAQnC,KAAK,GANDplB,GAAQrM,EAAOqxB,EAAKc,MAAM9lB,OAC1BC,EAAMtM,EAAOqxB,EAAKc,MAAM7lB,KAExBioB,EAAclD,EAAKc,MAAM7lB,IAAM+kB,EAAKc,MAAM9lB,MAC1CmoB,EAAYD,EAAalD,EAAKC,SAASgD,gBAAgBtlB,MAElDtN,EAAI,EAAGA,EAAI+vB,EAAY5vB,OAAQH,IACtC,GAA8BgB,SAA1B+uB,EAAY/vB,GAAGyyB,OAAsB,CACvC,GAAIM,GAAYz0B,EAAOyxB,EAAY/vB,GAAG2K,OAClCqoB,EAAU10B,EAAOyxB,EAAY/vB,GAAG4K,IAEpC,IAAoB,gBAAhBmoB,EAAUE,GACZ,KAAM,IAAI50B,OAAM,qCAAuC0xB,EAAY/vB,GAAG2K,MAExE,IAAkB,gBAAdqoB,EAAQC,GACV,KAAM,IAAI50B,OAAM,mCAAqC0xB,EAAY/vB,GAAG4K,IAGtE,IAAIC,GAAWmoB,EAAUD,CACzB,IAAIloB,GAAY,EAAIioB,EAAW,CAE7B,GAAInO,GAAS,EACTuO,EAAWtoB,EAAIuoB,OACnB,QAAQpD,EAAY/vB,GAAGyyB,QACrB,IAAK,QACCM,EAAUK,OAASJ,EAAQI,QAC7BzO,EAAS,GAEXoO,EAAUM,UAAU1oB,EAAM0oB,aAC1BN,EAAUO,KAAK3oB,EAAM2oB,QACrBP,EAAUzM,SAAS,EAAE,QAErB0M,EAAQK,UAAU1oB,EAAM0oB,aACxBL,EAAQM,KAAK3oB,EAAM2oB,QACnBN,EAAQ1M,SAAS,EAAI3B,EAAO,QAE5BuO,EAASllB,IAAI,EAAG,QAChB,MACF,KAAK,SACH,GAAIulB,GAAYP,EAAQ1L,KAAKyL,EAAU,QACnCK,EAAML,EAAUK,KAGpBL,GAAUS,KAAK7oB,EAAM6oB,QACrBT,EAAUU,MAAM9oB,EAAM8oB,SACtBV,EAAUO,KAAK3oB,EAAM2oB,QACrBN,EAAUD,EAAUI,QAGpBJ,EAAUK,IAAIA,GACdJ,EAAQI,IAAIA,GACZJ,EAAQhlB,IAAIulB,EAAU,QAEtBR,EAAUzM,SAAS,EAAE,SACrB0M,EAAQ1M,SAAS,EAAE,SAEnB4M,EAASllB,IAAI,EAAG,QAChB,MACF,KAAK,UACC+kB,EAAUU,SAAWT,EAAQS,UAC/B9O,EAAS,GAEXoO,EAAUU,MAAM9oB,EAAM8oB,SACtBV,EAAUO,KAAK3oB,EAAM2oB,QACrBP,EAAUzM,SAAS,EAAE,UAErB0M,EAAQS,MAAM9oB,EAAM8oB,SACpBT,EAAQM,KAAK3oB,EAAM2oB,QACnBN,EAAQ1M,SAAS,EAAE,UACnB0M,EAAQhlB,IAAI2W,EAAO,UAEnBuO,EAASllB,IAAI,EAAG,SAChB,MACF,KAAK,SACC+kB,EAAUO,QAAUN,EAAQM,SAC9B3O,EAAS,GAEXoO,EAAUO,KAAK3oB,EAAM2oB,QACrBP,EAAUzM,SAAS,EAAE,SACrB0M,EAAQM,KAAK3oB,EAAM2oB,QACnBN,EAAQ1M,SAAS,EAAE,SACnB0M,EAAQhlB,IAAI2W,EAAO,SAEnBuO,EAASllB,IAAI,EAAG,QAChB,MACF,SAEE,WADA0lB,SAAQ/E,IAAI,2EAA4EoB,EAAY/vB,GAAGyyB,QAG3G,KAAmBS,EAAZH,GAEL,OADApD,EAAKI,YAAYptB,MAAMgI,MAAOooB,EAAUvxB,UAAWoJ,IAAKooB,EAAQxxB,YACxDuuB,EAAY/vB,GAAGyyB,QACrB,IAAK,QACHM,EAAU/kB,IAAI,EAAG,QACjBglB,EAAQhlB,IAAI,EAAG,OACf,MACF,KAAK,SACH+kB,EAAU/kB,IAAI,EAAG,SACjBglB,EAAQhlB,IAAI,EAAG,QACf,MACF,KAAK,UACH+kB,EAAU/kB,IAAI,EAAG,UACjBglB,EAAQhlB,IAAI,EAAG,SACf,MACF,KAAK,SACH+kB,EAAU/kB,IAAI,EAAG,KACjBglB,EAAQhlB,IAAI,EAAG,IACf,MACF,SAEE,WADA0lB,SAAQ/E,IAAI,2EAA4EoB,EAAY/vB,GAAGyyB,QAI7G9C,EAAKI,YAAYptB,MAAMgI,MAAOooB,EAAUvxB,UAAWoJ,IAAKooB,EAAQxxB,aAKtEnH,EAAQs5B,iBAAiBhE,EAEzB,IAAIiE,GAAcv5B,EAAQw5B,SAASlE,EAAKc,MAAM9lB,MAAOglB,EAAKI,aACtD+D,EAAYz5B,EAAQw5B,SAASlE,EAAKc,MAAM7lB,IAAI+kB,EAAKI,aACjDgE,EAAapE,EAAKc,MAAM9lB,MACxBqpB,EAAWrE,EAAKc,MAAM7lB,GACA,IAAtBgpB,EAAYK,SAAiBF,EAAwC,GAA3BpE,EAAKc,MAAMyD,aAAuBN,EAAYb,UAAY,EAAIa,EAAYZ,QAAU,GAC1G,GAApBc,EAAUG,SAAmBD,EAAsC,GAAzBrE,EAAKc,MAAM0D,WAAuBL,EAAUf,UAAY,EAAMe,EAAUd,QAAU,IACtG,GAAtBY,EAAYK,QAAsC,GAApBH,EAAUG,SAC1CtE,EAAKc,MAAM2D,YAAYL,EAAYC,KAYzC35B,EAAQs5B,iBAAmB,SAAShE,GAGlC,IAAK,GAFDI,GAAcJ,EAAKI,YACnBsE,KACKr0B,EAAI,EAAGA,EAAI+vB,EAAY5vB,OAAQH,IACtC,IAAK,GAAI6mB,GAAI,EAAGA,EAAIkJ,EAAY5vB,OAAQ0mB,IAClC7mB,GAAK6mB,GAA8B,GAAzBkJ,EAAYlJ,GAAGxV,QAA2C,GAAzB0e,EAAY/vB,GAAGqR,SAExD0e,EAAYlJ,GAAGlc,OAASolB,EAAY/vB,GAAG2K,OAASolB,EAAYlJ,GAAGjc,KAAOmlB,EAAY/vB,GAAG4K,IACvFmlB,EAAYlJ,GAAGxV,QAAS,EAGjB0e,EAAYlJ,GAAGlc,OAASolB,EAAY/vB,GAAG2K,OAASolB,EAAYlJ,GAAGlc,OAASolB,EAAY/vB,GAAG4K,KAC9FmlB,EAAY/vB,GAAG4K,IAAMmlB,EAAYlJ,GAAGjc,IACpCmlB,EAAYlJ,GAAGxV,QAAS,GAGjB0e,EAAYlJ,GAAGjc,KAAOmlB,EAAY/vB,GAAG2K,OAASolB,EAAYlJ,GAAGjc,KAAOmlB,EAAY/vB,GAAG4K,MAC1FmlB,EAAY/vB,GAAG2K,MAAQolB,EAAYlJ,GAAGlc,MACtColB,EAAYlJ,GAAGxV,QAAS,GAMhC,KAAK,GAAIrR,GAAI,EAAGA,EAAI+vB,EAAY5vB,OAAQH,IAClC+vB,EAAY/vB,GAAGqR,UAAW,GAC5BgjB,EAAU1xB,KAAKotB,EAAY/vB,GAI/B2vB,GAAKI,YAAcsE,EACnB1E,EAAKI,YAAY7e,KAAK,SAAUnR,EAAGa,GACjC,MAAOb,GAAE4K,MAAQ/J,EAAE+J,SAIvBtQ,EAAQi6B,WAAa,SAASC,GAC5B,IAAK,GAAIv0B,GAAG,EAAGA,EAAIu0B,EAAMp0B,OAAQH,IAC/B0zB,QAAQ/E,IAAI3uB,EAAG,GAAIlB,MAAKy1B,EAAMv0B,GAAG2K,OAAO,GAAI7L,MAAKy1B,EAAMv0B,GAAG4K,KAAM2pB,EAAMv0B,GAAG2K,MAAO4pB,EAAMv0B,GAAG4K,IAAK2pB,EAAMv0B,GAAGqR,SAS3GhX,EAAQm6B,oBAAsB,SAASC,EAAUC,GAG/C,IAAK,GAFDC,IAAe,EACfC,EAAeH,EAASI,QAAQrzB,UAC3BxB,EAAI,EAAGA,EAAIy0B,EAAS1E,YAAY5vB,OAAQH,IAAK,CACpD,GAAI+yB,GAAY0B,EAAS1E,YAAY/vB,GAAG2K,MACpCqoB,EAAUyB,EAAS1E,YAAY/vB,GAAG4K,GACtC,IAAIgqB,GAAgB7B,GAA4BC,EAAf4B,EAAwB,CACvDD,GAAe,CACf,QAIJ,GAAoB,GAAhBA,GAAwBC,EAAeH,EAAStG,KAAK3sB,WAAaozB,GAAgBF,EAAc,CAClG,GAAIlqB,GAAYlM,EAAOo2B,GACnBI,EAAWx2B,EAAO00B,EAElBxoB,GAAU8oB,QAAUwB,EAASxB,OAASmB,EAASM,cAAe,EACzDvqB,EAAUipB,SAAWqB,EAASrB,QAAUgB,EAASO,eAAgB,EACjExqB,EAAU6oB,aAAeyB,EAASzB,cAAcoB,EAASQ,aAAc,GAEhFR,EAASI,QAAUC,EAASpzB,WAmChCrH,EAAQ41B,SAAW,SAASiB,EAAMgE,EAAM5nB,GACtC,GAAoC,GAAhC4jB,EAAKvB,KAAKI,YAAY5vB,OAAa,CACrC,GAAIg1B,GAAajE,EAAKT,MAAM0E,WAAW7nB,EACvC,QAAQ4nB,EAAK1zB,UAAY2zB,EAAWxQ,QAAUwQ,EAAWld,MAGzD,GAAIgc,GAAS55B,EAAQw5B,SAASqB,EAAMhE,EAAKvB,KAAKI,YACzB,IAAjBkE,EAAOA,SACTiB,EAAOjB,EAAOlB,UAGhB,IAAIloB,GAAWxQ,EAAQ+6B,yBAAyBlE,EAAKvB,KAAKI,YAAamB,EAAKT,MAAM9lB,MAAOumB,EAAKT,MAAM7lB,IACpGsqB,GAAO76B,EAAQg7B,qBAAqBnE,EAAKvB,KAAKI,YAAamB,EAAKT,MAAOyE,EAEvE,IAAIC,GAAajE,EAAKT,MAAM0E,WAAW7nB,EAAOzC,EAC9C,QAAQqqB,EAAK1zB,UAAY2zB,EAAWxQ,QAAUwQ,EAAWld,OAa7D5d,EAAQg2B,OAAS,SAASa,EAAMpkB,EAAGQ,GACjC,GAAoC,GAAhC4jB,EAAKvB,KAAKI,YAAY5vB,OAAa,CACrC,GAAIg1B,GAAajE,EAAKT,MAAM0E,WAAW7nB,EACvC,OAAO,IAAIxO,MAAKgO,EAAIqoB,EAAWld,MAAQkd,EAAWxQ,QAGlD,GAAI2Q,GAAiBj7B,EAAQ+6B,yBAAyBlE,EAAKvB,KAAKI,YAAamB,EAAKT,MAAM9lB,MAAOumB,EAAKT,MAAM7lB,KACtG2qB,EAAgBrE,EAAKT,MAAM7lB,IAAMsmB,EAAKT,MAAM9lB,MAAQ2qB,EACpDE,EAAkBD,EAAgBzoB,EAAIQ,EACtCmoB,EAA4Bp7B,EAAQq7B,6BAA6BxE,EAAKvB,KAAKI,YAAamB,EAAKT,MAAO+E,GAEpGG,EAAU,GAAI72B,MAAK22B,EAA4BD,EAAkBtE,EAAKT,MAAM9lB,MAChF,OAAOgrB,IAYXt7B,EAAQ+6B,yBAA2B,SAASrF,EAAaplB,EAAOC,GAE9D,IAAK,GADDC,GAAW,EACN7K,EAAI,EAAGA,EAAI+vB,EAAY5vB,OAAQH,IAAK,CAC3C,GAAI+yB,GAAYhD,EAAY/vB,GAAG2K,MAC3BqoB,EAAUjD,EAAY/vB,GAAG4K,GAEzBmoB,IAAapoB,GAAmBC,EAAVooB,IACxBnoB,GAAYmoB,EAAUD,GAG1B,MAAOloB,IAWTxQ,EAAQg7B,qBAAuB,SAAStF,EAAaU,EAAOyE,GAG1D,MAFAA,GAAO52B,EAAO42B,GAAMxzB,SAASF,UAC7B0zB,GAAQ76B,EAAQu7B,wBAAwB7F,EAAYU,EAAMyE,IAI5D76B,EAAQu7B,wBAA0B,SAAS7F,EAAaU,EAAOyE,GAC7D,GAAIW,GAAa,CACjBX,GAAO52B,EAAO42B,GAAMxzB,SAASF,SAE7B,KAAK,GAAIxB,GAAI,EAAGA,EAAI+vB,EAAY5vB,OAAQH,IAAK,CAC3C,GAAI+yB,GAAYhD,EAAY/vB,GAAG2K,MAC3BqoB,EAAUjD,EAAY/vB,GAAG4K,GAEzBmoB,IAAatC,EAAM9lB,OAASqoB,EAAUvC,EAAM7lB,KAC1CsqB,GAAQlC,IACV6C,GAAe7C,EAAUD,GAI/B,MAAO8C,IAWTx7B,EAAQq7B,6BAA+B,SAAS3F,EAAaU,EAAOqF,GAKlE,IAAK,GAJDR,GAAiB,EACjBzqB,EAAW,EACXkrB,EAAgBtF,EAAM9lB,MAEjB3K,EAAI,EAAGA,EAAI+vB,EAAY5vB,OAAQH,IAAK,CAC3C,GAAI+yB,GAAYhD,EAAY/vB,GAAG2K,MAC3BqoB,EAAUjD,EAAY/vB,GAAG4K,GAE7B,IAAImoB,GAAatC,EAAM9lB,OAASqoB,EAAUvC,EAAM7lB,IAAK,CAGnD,GAFAC,GAAYkoB,EAAYgD,EACxBA,EAAgB/C,EACZnoB,GAAYirB,EACd,KAGAR,IAAkBtC,EAAUD,GAKlC,MAAOuC,IAaTj7B,EAAQ27B,mBAAqB,SAASjG,EAAamF,EAAMe,EAAWC,GAClE,GAAIrC,GAAWx5B,EAAQw5B,SAASqB,EAAMnF,EACtC,OAAuB,IAAnB8D,EAASI,OACK,EAAZgC,EACuB,GAArBC,EACKrC,EAASd,WAAac,EAASb,QAAUkC,GAAQ,EAGjDrB,EAASd,UAAY,EAIL,GAArBmD,EACKrC,EAASb,SAAWkC,EAAOrB,EAASd,WAAa,EAGjDc,EAASb,QAAU,EAKvBkC,GAaX76B,EAAQw5B,SAAW,SAASqB,EAAMnF,GAChC,IAAK,GAAI/vB,GAAI,EAAGA,EAAI+vB,EAAY5vB,OAAQH,IAAK,CAC3C,GAAI+yB,GAAYhD,EAAY/vB,GAAG2K,MAC3BqoB,EAAUjD,EAAY/vB,GAAG4K,GAE7B,IAAIsqB,GAAQnC,GAAoBC,EAAPkC,EACvB,OAAQjB,QAAQ,EAAMlB,UAAWA,EAAWC,QAASA,GAIzD,OAAQiB,QAAQ,EAAOlB,UAAWA,EAAWC,QAASA,KAKpD,SAAS14B,GA4Bb,QAAS+B,GAASsO,EAAOC,EAAKurB,EAAaC,EAAiBC,EAAaC,GAEvE77B,KAAKo6B,QAAU,EAEfp6B,KAAK87B,WAAY,EACjB97B,KAAK+7B,UAAY,EACjB/7B,KAAK0oB,KAAO,EACZ1oB,KAAKwd,MAAQ,EAEbxd,KAAKg8B,YACLh8B,KAAKi8B,UACLj8B,KAAKk8B,UAAY,EAEjBl8B,KAAKm8B,YAAc,EAAO,EAAM,EAAI,IACpCn8B,KAAKo8B,YAAc,IAAO,GAAM,EAAI,GAEpCp8B,KAAK67B,WAAaA,EAElB77B,KAAK8zB,SAAS5jB,EAAOC,EAAKurB,EAAaC,EAAiBC,GAe1Dh6B,EAAS6R,UAAUqgB,SAAW,SAAS5jB,EAAOC,EAAKurB,EAAaC,EAAiBC,GAC/E57B,KAAKyzB,OAA6BltB,SAApBq1B,EAAYnwB,IAAoByE,EAAQ0rB,EAAYnwB,IAClEzL,KAAK0zB,KAA2BntB,SAApBq1B,EAAY1uB,IAAoBiD,EAAMyrB,EAAY1uB,IAE1DlN,KAAKyzB,QAAUzzB,KAAK0zB,OACtB1zB,KAAKyzB,QAAU,IACfzzB,KAAK0zB,MAAQ,GAGO,GAAlB1zB,KAAK87B,WACP97B,KAAKq8B,eAAeX,EAAaC,GAGnC37B,KAAKs8B,SAASV,IAOhBh6B,EAAS6R,UAAU4oB,eAAiB,SAASX,EAAaC,GAExD,GAAIhpB,GAAO3S,KAAK0zB,KAAO1zB,KAAKyzB,OACxB8I,EAAkB,IAAP5pB,EACX6pB,EAAmBd,GAAea,EAAWZ,GAC7Cc,EAAmBx3B,KAAKipB,MAAMjpB,KAAKivB,IAAIqI,GAAUt3B,KAAKkvB,MAEtDuI,EAAe,GACfC,EAAkB13B,KAAKovB,IAAI,GAAGoI,GAE9BvsB,EAAQ,CACW,GAAnBusB,IACFvsB,EAAQusB,EAIV,KAAK,GADDG,IAAgB,EACXr3B,EAAI2K,EAAOjL,KAAKmmB,IAAI7lB,IAAMN,KAAKmmB,IAAIqR,GAAmBl3B,IAAK,CAClEo3B,EAAkB13B,KAAKovB,IAAI,GAAG9uB,EAC9B,KAAK,GAAI6mB,GAAI,EAAGA,EAAIpsB,KAAKo8B,WAAW12B,OAAQ0mB,IAAK,CAC/C,GAAIyQ,GAAWF,EAAkB38B,KAAKo8B,WAAWhQ,EACjD,IAAIyQ,GAAYL,EAAkB,CAChCI,GAAgB,EAChBF,EAAetQ,CACf,QAGJ,GAAqB,GAAjBwQ,EACF,MAGJ58B,KAAK+7B,UAAYW,EACjB18B,KAAKwd,MAAQmf,EACb38B,KAAK0oB,KAAOiU,EAAkB38B,KAAKo8B,WAAWM,IAShD96B,EAAS6R,UAAU6oB,SAAW,SAASV,GACjBr1B,SAAhBq1B,IACFA,KAGF,IAAIkB,GAAgCv2B,SAApBq1B,EAAYnwB,IAAoBzL,KAAKyzB,OAAuB,EAAbzzB,KAAKwd,MAAYxd,KAAKo8B,WAAWp8B,KAAK+7B,WAAcH,EAAYnwB,IAC3HsxB,EAA8Bx2B,SAApBq1B,EAAY1uB,IAAoBlN,KAAK0zB,KAAQ1zB,KAAKwd,MAAQxd,KAAKo8B,WAAWp8B,KAAK+7B,WAAcH,EAAY1uB,GAEvHlN,MAAKi8B,UAAgC11B,SAApBq1B,EAAY1uB,IAAoBlN,KAAKg9B,aAAaD,GAAWnB,EAAY1uB,IAC1FlN,KAAKg8B,YAAkCz1B,SAApBq1B,EAAYnwB,IAAoBzL,KAAKg9B,aAAaF,GAAalB,EAAYnwB,IAGvE,GAAnBzL,KAAK67B,aAAuB77B,KAAKi8B,UAAYj8B,KAAKg8B,aAAeh8B,KAAK0oB,MAAQ,IAChF1oB,KAAKi8B,WAAaj8B,KAAKi8B,UAAYj8B,KAAK0oB,MAG1C1oB,KAAKk8B,UAAYl8B,KAAKg9B,aAAaD,GAAWA,EAAU/8B,KAAKg9B,aAAaF,GAAaA,EACvF98B,KAAKi9B,YAAcj9B,KAAKi8B,UAAYj8B,KAAKg8B,YAGzCh8B,KAAKo6B,QAAUp6B,KAAKi8B,WAGtBr6B,EAAS6R,UAAUupB,aAAe,SAAS51B,GACzC,GAAI81B,GAAU91B,EAASA,GAASpH,KAAKwd,MAAQxd,KAAKo8B,WAAWp8B,KAAK+7B,WAClE,OAAI30B,IAASpH,KAAKwd,MAAQxd,KAAKo8B,WAAWp8B,KAAK+7B,YAAc,GAAO/7B,KAAKwd,MAAQxd,KAAKo8B,WAAWp8B,KAAK+7B,WAC7FmB,EAAWl9B,KAAKwd,MAAQxd,KAAKo8B,WAAWp8B,KAAK+7B,WAG7CmB,GASXt7B,EAAS6R,UAAU0pB,QAAU,WAC3B,MAAQn9B,MAAKo6B,SAAWp6B,KAAKg8B,aAM/Bp6B,EAAS6R,UAAUmV,KAAO,WACxB,GAAIuJ,GAAOnyB,KAAKo6B,OAChBp6B,MAAKo6B,SAAWp6B,KAAK0oB,KAGjB1oB,KAAKo6B,SAAWjI,IAClBnyB,KAAKo6B,QAAUp6B,KAAK0zB,OAOxB9xB,EAAS6R,UAAU2pB,SAAW,WAC5Bp9B,KAAKo6B,SAAWp6B,KAAK0oB,KACrB1oB,KAAKi8B,WAAaj8B,KAAK0oB,KACvB1oB,KAAKi9B,YAAcj9B,KAAKi8B,UAAYj8B,KAAKg8B,aAS3Cp6B,EAAS6R,UAAUkV,WAAa,SAAS0U,GACvC,GAAI7I,GAAc,GAAKvwB,OAAOjE,KAAKo6B,SAAS5F,YAAY,EAExD,IAAgBjuB,SAAb82B,GAA2B54B,MAAMR,OAAOo5B,KAqCzC,GAAgC,IAA5B7I,EAAY9tB,QAAQ,MAA0C,IAA5B8tB,EAAY9tB,QAAQ,KAExD,IAAK,GAAInB,GAAIivB,EAAY9uB,OAAS,EAAGH,EAAI,EAAGA,IAAK,CAC/C,GAAsB,KAAlBivB,EAAYjvB,GAGX,CAAA,GAAsB,KAAlBivB,EAAYjvB,IAA+B,KAAlBivB,EAAYjvB,GAAW,CACvDivB,EAAcA,EAAY8I,MAAM,EAAG/3B,EACnC,OAGA,MAPAivB,EAAcA,EAAY8I,MAAM,EAAG/3B,QAzCY,CAErD,GAAIg4B,GAAM,GACNl1B,EAAQmsB,EAAY9tB,QAAQ,IAoBhC,IAnBY,IAAT2B,IAEDk1B,EAAM/I,EAAY8I,MAAMj1B,GAExBmsB,EAAcA,EAAY8I,MAAM,EAAGj1B,IAErCA,EAAQpD,KAAKiI,IAAIsnB,EAAY9tB,QAAQ,KAAM8tB,EAAY9tB,QAAQ,MAClD,KAAV2B,GAEe,IAAbg1B,IACD7I,GAAe,KAGjBnsB,EAAQmsB,EAAY9uB,OAAS23B,GAEV,IAAbA,IAENh1B,GAASg1B,EAAW,GAEnBh1B,EAAQmsB,EAAY9uB,OAErB,IAAI,GAAI83B,GAAMn1B,EAAQmsB,EAAY9uB,OAAQ83B,EAAM,EAAGA,IACjDhJ,GAAe,QAKjBA,GAAcA,EAAY8I,MAAM,EAAGj1B,EAGrCmsB,IAAe+I,EAoBjB,MAAO/I,IAWT5yB,EAAS6R,UAAU8hB,KAAO,aAS1B3zB,EAAS6R,UAAUgqB,QAAU,WAC3B,MAAQz9B,MAAKo6B,SAAWp6B,KAAKwd,MAAQxd,KAAKm8B,WAAWn8B,KAAK+7B,aAAe,GAG3El8B,EAAOD,QAAUgC,GAKb,SAAS/B,EAAQD,EAASM,GAgB9B,QAAS2B,GAAMqzB,EAAMnmB,GACnB,GAAI2uB,GAAM75B,IAAS85B,MAAM,GAAGC,QAAQ,GAAGC,QAAQ,GAAGC,aAAa,EAC/D99B,MAAKkQ,MAAQwtB,EAAIhF,QAAQnlB,IAAI,GAAI,QAAQxM,UACzC/G,KAAKmQ,IAAMutB,EAAIhF,QAAQnlB,IAAI,EAAG,QAAQxM,UAEtC/G,KAAKk1B,KAAOA,EACZl1B,KAAK+9B,gBAAkB,EACvB/9B,KAAKg+B,YAAc,EACnBh+B,KAAKy5B,cAAe,EACpBz5B,KAAK05B,YAAa,EAGlB15B,KAAK40B,gBACH1kB,MAAO,KACPC,IAAK,KACLqrB,UAAW,aACXyC,UAAU,EACVC,UAAU,EACVzyB,IAAK,KACLyB,IAAK,KACLixB,QAAS,GACTC,QAAS,UAEXp+B,KAAK+O,QAAUpO,EAAK0E,UAAWrF,KAAK40B,gBAEpC50B,KAAK+F,OACHs4B,UAEFr+B,KAAKs+B,aAAe,KAGpBt+B,KAAKk1B,KAAKE,QAAQvhB,GAAG,YAAa7T,KAAKu+B,aAAalJ,KAAKr1B,OACzDA,KAAKk1B,KAAKE,QAAQvhB,GAAG,OAAa7T,KAAKw+B,QAAQnJ,KAAKr1B,OACpDA,KAAKk1B,KAAKE,QAAQvhB,GAAG,UAAa7T,KAAKy+B,WAAWpJ,KAAKr1B,OAGvDA,KAAKk1B,KAAKE,QAAQvhB,GAAG,OAAQ7T,KAAK0+B,QAAQrJ,KAAKr1B,OAG/CA,KAAKk1B,KAAKE,QAAQvhB,GAAG,aAAmB7T,KAAK2+B,cAActJ,KAAKr1B,OAChEA,KAAKk1B,KAAKE,QAAQvhB,GAAG,iBAAmB7T,KAAK2+B,cAActJ,KAAKr1B,OAGhEA,KAAKk1B,KAAKE,QAAQvhB,GAAG,QAAS7T,KAAK4+B,SAASvJ,KAAKr1B,OACjDA,KAAKk1B,KAAKE,QAAQvhB,GAAG,QAAS7T,KAAK6+B,SAASxJ,KAAKr1B,OAEjDA,KAAKwT,WAAWzE,GAsClB,QAAS+vB,GAAmBtD,GAC1B,GAAiB,cAAbA,GAA0C,YAAbA,EAC/B,KAAM,IAAIp1B,WAAU,sBAAwBo1B,EAAY,yCA0e5D,QAASuD,GAAYV,EAAOv1B,GAC1B,OACEuJ,EAAGgsB,EAAMW,MAAQr+B,EAAK0G,gBAAgByB,GACtCwJ,EAAG+rB,EAAMY,MAAQt+B,EAAKgH,eAAemB,IAjlBzC,GAAInI,GAAOT,EAAoB,GAC3Bg/B,EAAah/B,EAAoB,IACjC2D,EAAS3D,EAAoB,IAC7BqC,EAAYrC,EAAoB,IAChCyB,EAAWzB,EAAoB,GA2DnC2B,GAAM4R,UAAY,GAAIlR,GAkBtBV,EAAM4R,UAAUD,WAAa,SAAUzE,GACrC,GAAIA,EAAS,CAEX,GAAIP,IAAU,YAAa,MAAO,MAAO,UAAW,UAAW,WAAY,WAAY,WAAY,cACnG7N,GAAKmF,gBAAgB0I,EAAQxO,KAAK+O,QAASA,IAEvC,SAAWA,IAAW,OAASA,KAEjC/O,KAAK8zB,SAAS/kB,EAAQmB,MAAOnB,EAAQoB,OA2B3CtO,EAAM4R,UAAUqgB,SAAW,SAAS5jB,EAAOC,EAAK4mB,GAC9C,GAAItD,GAAkBltB,QAAT2J,EAAqBvP,EAAKiG,QAAQsJ,EAAO,QAAQnJ,UAAY,KACtE2sB,EAAgBntB,QAAP4J,EAAqBxP,EAAKiG,QAAQuJ,EAAK,QAAQpJ,UAAc,IAG1E,IAFA/G,KAAKm/B,mBAEDpI,EAAS,CACX,GAAItiB,GAAKzU,KACLo/B,EAAYp/B,KAAKkQ,MACjBmvB,EAAUr/B,KAAKmQ,IACfC,EAA8B,gBAAZ2mB,GAAuBA,EAAU,IACnDuI,GAAW,GAAIj7B,OAAO0C,UACtBw4B,GAAa,EAEb3W,EAAO,WACT,IAAKnU,EAAG1O,MAAMs4B,MAAMmB,SAAU,CAC5B,GAAI9B,IAAM,GAAIr5B,OAAO0C,UACjB0zB,EAAOiD,EAAM4B,EACbG,EAAOhF,EAAOrqB,EACd7E,EAAKk0B,GAAmB,OAAXhM,EAAmBA,EAAS9yB,EAAKsP,cAAcwqB,EAAM2E,EAAW3L,EAAQrjB,GACrF5D,EAAKizB,GAAiB,OAAT/L,EAAmBA,EAAS/yB,EAAKsP,cAAcwqB,EAAM4E,EAAS3L,EAAMtjB,EAErFsvB,GAAUjrB,EAAGklB,YAAYpuB,EAAGiB,GAC5B7K,EAASu2B,kBAAkBzjB,EAAGygB,KAAMzgB,EAAG1F,QAAQumB,aAC/CiK,EAAaA,GAAcG,EACvBA,GACFjrB,EAAGygB,KAAKE,QAAQhH,KAAK,eAAgBle,MAAO,GAAI7L,MAAKoQ,EAAGvE,OAAQC,IAAK,GAAI9L,MAAKoQ,EAAGtE,OAG/EsvB,EACEF,GACF9qB,EAAGygB,KAAKE,QAAQhH,KAAK,gBAAiBle,MAAO,GAAI7L,MAAKoQ,EAAGvE,OAAQC,IAAK,GAAI9L,MAAKoQ,EAAGtE,OAMpFsE,EAAG6pB,aAAezkB,WAAW+O,EAAM,KAKzC,OAAOA,KAGP,GAAI8W,GAAU1/B,KAAK25B,YAAYlG,EAAQC,EAEvC,IADA/xB,EAASu2B,kBAAkBl4B,KAAKk1B,KAAMl1B,KAAK+O,QAAQumB,aAC/CoK,EAAS,CACX,GAAItrB,IAAUlE,MAAO,GAAI7L,MAAKrE,KAAKkQ,OAAQC,IAAK,GAAI9L,MAAKrE,KAAKmQ,KAC9DnQ,MAAKk1B,KAAKE,QAAQhH,KAAK,cAAeha,GACtCpU,KAAKk1B,KAAKE,QAAQhH,KAAK,eAAgBha,KAS7CvS,EAAM4R,UAAU0rB,iBAAmB,WAC7Bn/B,KAAKs+B,eACP1kB,aAAa5Z,KAAKs+B,cAClBt+B,KAAKs+B,aAAe,OAaxBz8B,EAAM4R,UAAUkmB,YAAc,SAASzpB,EAAOC,GAC5C,GAII0c,GAJA8S,EAAqB,MAATzvB,EAAiBvP,EAAKiG,QAAQsJ,EAAO,QAAQnJ,UAAY/G,KAAKkQ,MAC1E0vB,EAAmB,MAAPzvB,EAAiBxP,EAAKiG,QAAQuJ,EAAK,QAAQpJ,UAAc/G,KAAKmQ,IAC1EjD,EAA2B,MAApBlN,KAAK+O,QAAQ7B,IAAevM,EAAKiG,QAAQ5G,KAAK+O,QAAQ7B,IAAK,QAAQnG,UAAY,KACtF0E,EAA2B,MAApBzL,KAAK+O,QAAQtD,IAAe9K,EAAKiG,QAAQ5G,KAAK+O,QAAQtD,IAAK,QAAQ1E,UAAY,IAI1F,IAAItC,MAAMk7B,IAA0B,OAAbA,EACrB,KAAM,IAAI/7B,OAAM,kBAAoBsM,EAAQ,IAE9C,IAAIzL,MAAMm7B,IAAsB,OAAXA,EACnB,KAAM,IAAIh8B,OAAM,gBAAkBuM,EAAM,IAyC1C,IArCawvB,EAATC,IACFA,EAASD,GAIC,OAARl0B,GACaA,EAAXk0B,IACF9S,EAAQphB,EAAMk0B,EACdA,GAAY9S,EACZ+S,GAAU/S,EAGC,MAAP3f,GACE0yB,EAAS1yB,IACX0yB,EAAS1yB,IAOL,OAARA,GACE0yB,EAAS1yB,IACX2f,EAAQ+S,EAAS1yB,EACjByyB,GAAY9S,EACZ+S,GAAU/S,EAGC,MAAPphB,GACaA,EAAXk0B,IACFA,EAAWl0B,IAOU,OAAzBzL,KAAK+O,QAAQovB,QAAkB,CACjC,GAAIA,GAAUvY,WAAW5lB,KAAK+O,QAAQovB,QACxB,GAAVA,IACFA,EAAU,GAEcA,EAArByB,EAASD,IACP3/B,KAAKmQ,IAAMnQ,KAAKkQ,QAAWiuB,GAE9BwB,EAAW3/B,KAAKkQ,MAChB0vB,EAAS5/B,KAAKmQ,MAId0c,EAAQsR,GAAWyB,EAASD,GAC5BA,GAAY9S,EAAO,EACnB+S,GAAU/S,EAAO,IAMvB,GAA6B,OAAzB7sB,KAAK+O,QAAQqvB,QAAkB,CACjC,GAAIA,GAAUxY,WAAW5lB,KAAK+O,QAAQqvB,QACxB,GAAVA,IACFA,EAAU,GAEPwB,EAASD,EAAYvB,IACnBp+B,KAAKmQ,IAAMnQ,KAAKkQ,QAAWkuB,GAE9BuB,EAAW3/B,KAAKkQ,MAChB0vB,EAAS5/B,KAAKmQ,MAId0c,EAAS+S,EAASD,EAAYvB,EAC9BuB,GAAY9S,EAAO,EACnB+S,GAAU/S,EAAO,IAKvB,GAAI6S,GAAW1/B,KAAKkQ,OAASyvB,GAAY3/B,KAAKmQ,KAAOyvB,CAUrD,OAPOD,IAAY3/B,KAAKkQ,OAASyvB,GAAc3/B,KAAKmQ,KAASyvB,GAAY5/B,KAAKkQ,OAAS0vB,GAAY5/B,KAAKmQ,KACjGnQ,KAAKkQ,OAASyvB,GAAY3/B,KAAKkQ,OAAS0vB,GAAc5/B,KAAKmQ,KAAOwvB,GAAc3/B,KAAKmQ,KAAOyvB,GACjG5/B,KAAKk1B,KAAKE,QAAQhH,KAAK,oBAGzBpuB,KAAKkQ,MAAQyvB,EACb3/B,KAAKmQ,IAAMyvB,EACJF,GAOT79B,EAAM4R,UAAUosB,SAAW,WACzB,OACE3vB,MAAOlQ,KAAKkQ,MACZC,IAAKnQ,KAAKmQ,MAUdtO,EAAM4R,UAAUinB,WAAa,SAAU7nB,EAAOitB,GAC5C,MAAOj+B,GAAM64B,WAAW16B,KAAKkQ,MAAOlQ,KAAKmQ,IAAK0C,EAAOitB,IAWvDj+B,EAAM64B,WAAa,SAAUxqB,EAAOC,EAAK0C,EAAOitB,GAI9C,MAHoBv5B,UAAhBu5B,IACFA,EAAc,GAEH,GAATjtB,GAAe1C,EAAMD,GAAS,GAE9Bga,OAAQha,EACRsN,MAAO3K,GAAS1C,EAAMD,EAAQ4vB,KAK9B5V,OAAQ,EACR1M,MAAO,IAUb3b,EAAM4R,UAAU8qB,aAAe,WAC7Bv+B,KAAK+9B,gBAAkB,EACvB/9B,KAAK+/B,cAAgB,EAEhB//B,KAAK+O,QAAQkvB,UAIbj+B,KAAK+F,MAAMs4B,MAAM2B,gBAEtBhgC,KAAK+F,MAAMs4B,MAAMnuB,MAAQlQ,KAAKkQ,MAC9BlQ,KAAK+F,MAAMs4B,MAAMluB,IAAMnQ,KAAKmQ,IAC5BnQ,KAAK+F,MAAMs4B,MAAMmB,UAAW,EAExBx/B,KAAKk1B,KAAK5E,IAAI5wB,OAChBM,KAAKk1B,KAAK5E,IAAI5wB,KAAK8N,MAAMggB,OAAS,UAStC3rB,EAAM4R,UAAU+qB,QAAU,SAAUh1B,GAElC,GAAKxJ,KAAK+O,QAAQkvB,UAGbj+B,KAAK+F,MAAMs4B,MAAM2B,cAAtB,CAEA,GAAIxE,GAAYx7B,KAAK+O,QAAQysB,SAC7BsD,GAAkBtD,EAElB,IAAIxM,GAAsB,cAAbwM,EAA6BhyB,EAAMy2B,QAAQC,OAAS12B,EAAMy2B,QAAQE,MAC/EnR,IAAShvB,KAAK+9B,eACd,IAAIhL,GAAY/yB,KAAK+F,MAAMs4B,MAAMluB,IAAMnQ,KAAK+F,MAAMs4B,MAAMnuB,MAGpDE,EAAWzO,EAASg5B,yBAAyB36B,KAAKk1B,KAAKI,YAAat1B,KAAKkQ,MAAOlQ,KAAKmQ,IACzF4iB,IAAY3iB,CAEZ,IAAIyC,GAAsB,cAAb2oB,EAA6Bx7B,KAAKk1B,KAAKC,SAASzI,OAAO7Z,MAAQ7S,KAAKk1B,KAAKC,SAASzI,OAAO5Z,OAClGstB,GAAapR,EAAQnc,EAAQkgB,EAC7B4M,EAAW3/B,KAAK+F,MAAMs4B,MAAMnuB,MAAQkwB,EACpCR,EAAS5/B,KAAK+F,MAAMs4B,MAAMluB,IAAMiwB,EAIhCC,EAAY1+B,EAAS45B,mBAAmBv7B,KAAKk1B,KAAKI,YAAaqK,EAAU3/B,KAAK+/B,cAAc/Q,GAAO,GACnGsR,EAAU3+B,EAAS45B,mBAAmBv7B,KAAKk1B,KAAKI,YAAasK,EAAQ5/B,KAAK+/B,cAAc/Q,GAAO,EACnG,IAAIqR,GAAaV,GAAYW,GAAWV,EAKtC,MAJA5/B,MAAK+9B,iBAAmB/O,EACxBhvB,KAAK+F,MAAMs4B,MAAMnuB,MAAQmwB,EACzBrgC,KAAK+F,MAAMs4B,MAAMluB,IAAMmwB,MACvBtgC,MAAKw+B,QAAQh1B,EAIfxJ,MAAK+/B,cAAgB/Q,EACrBhvB,KAAK25B,YAAYgG,EAAUC,GAG3B5/B,KAAKk1B,KAAKE,QAAQhH,KAAK,eACrBle,MAAO,GAAI7L,MAAKrE,KAAKkQ,OACrBC,IAAO,GAAI9L,MAAKrE,KAAKmQ,SASzBtO,EAAM4R,UAAUgrB,WAAa,WAEtBz+B,KAAK+O,QAAQkvB,UAIbj+B,KAAK+F,MAAMs4B,MAAM2B,gBAEtBhgC,KAAK+F,MAAMs4B,MAAMmB,UAAW,EACxBx/B,KAAKk1B,KAAK5E,IAAI5wB,OAChBM,KAAKk1B,KAAK5E,IAAI5wB,KAAK8N,MAAMggB,OAAS,QAIpCxtB,KAAKk1B,KAAKE,QAAQhH,KAAK,gBACrBle,MAAO,GAAI7L,MAAKrE,KAAKkQ,OACrBC,IAAO,GAAI9L,MAAKrE,KAAKmQ,SAUzBtO,EAAM4R,UAAUkrB,cAAgB,SAASn1B,GAEvC,GAAMxJ,KAAK+O,QAAQmvB,UAAYl+B,KAAK+O,QAAQkvB,SAA5C,CAGA,GAAIjP,GAAQ,CAYZ,IAXIxlB,EAAMylB,WACRD,EAAQxlB,EAAMylB,WAAa,IAClBzlB,EAAM0lB,SAGfF,GAASxlB,EAAM0lB,OAAS,GAMtBF,EAAO,CAKT,GAAIxR,EAEFA,GADU,EAARwR,EACM,EAAKA,EAAQ,EAGb,GAAK,EAAKA,EAAQ,EAI5B,IAAIiR,GAAUf,EAAWqB,YAAYvgC,KAAMwJ,GACvCg3B,EAAUzB,EAAWkB,EAAQvT,OAAQ1sB,KAAKk1B,KAAK5E,IAAI5D,QACnD+T,EAAczgC,KAAK0gC,eAAeF,EAEtCxgC,MAAK2gC,KAAKnjB,EAAOijB,EAAazR,GAKhCxlB,EAAMD,mBAOR1H,EAAM4R,UAAUmrB,SAAW,WACzB5+B,KAAK+F,MAAMs4B,MAAMnuB,MAAQlQ,KAAKkQ,MAC9BlQ,KAAK+F,MAAMs4B,MAAMluB,IAAMnQ,KAAKmQ,IAC5BnQ,KAAK+F,MAAMs4B,MAAM2B,eAAgB,EACjChgC,KAAK+F,MAAMs4B,MAAM3R,OAAS,KAC1B1sB,KAAKg+B,YAAc,EACnBh+B,KAAK+9B,gBAAkB,GAOzBl8B,EAAM4R,UAAUirB,QAAU,WACxB1+B,KAAK+F,MAAMs4B,MAAM2B,eAAgB,GAQnCn+B,EAAM4R,UAAUorB,SAAW,SAAUr1B,GAEnC,GAAMxJ,KAAK+O,QAAQmvB,UAAYl+B,KAAK+O,QAAQkvB,WAE5Cj+B,KAAK+F,MAAMs4B,MAAM2B,eAAgB,EAE7Bx2B,EAAMy2B,QAAQW,QAAQl7B,OAAS,GAAG,CAC/B1F,KAAK+F,MAAMs4B,MAAM3R,SACpB1sB,KAAK+F,MAAMs4B,MAAM3R,OAASqS,EAAWv1B,EAAMy2B,QAAQvT,OAAQ1sB,KAAKk1B,KAAK5E,IAAI5D,QAG3E,IAAIlP,GAAQ,GAAKhU,EAAMy2B,QAAQziB,MAAQxd,KAAKg+B,aACxC6C,EAAa7gC,KAAK0gC,eAAe1gC,KAAK+F,MAAMs4B,MAAM3R,QAElDmO,EAAiBl5B,EAASg5B,yBAAyB36B,KAAKk1B,KAAKI,YAAat1B,KAAKkQ,MAAOlQ,KAAKmQ,KAC3F2wB,EAAuBn/B,EAASw5B,wBAAwBn7B,KAAKk1B,KAAKI,YAAat1B,KAAM6gC,GACrFE,EAAsBlG,EAAiBiG,EAGvCnB,EAAYkB,EAAaC,GAAyB9gC,KAAK+F,MAAMs4B,MAAMnuB,OAAS2wB,EAAaC,IAAyBtjB,EAClHoiB,EAAUiB,EAAaE,GAAwB/gC,KAAK+F,MAAMs4B,MAAMluB,KAAO0wB,EAAaE,IAAwBvjB,CAGhHxd,MAAKy5B,aAAe,EAAIjc,EAAQ,GAAI,GAAQ,EAC5Cxd,KAAK05B,WAAalc,EAAQ,EAAI,GAAI,GAAQ,CAE1C,IAAI6iB,GAAY1+B,EAAS45B,mBAAmBv7B,KAAKk1B,KAAKI,YAAaqK,EAAU,EAAIniB,GAAO,GACpF8iB,EAAU3+B,EAAS45B,mBAAmBv7B,KAAKk1B,KAAKI,YAAasK,EAAQpiB,EAAQ,GAAG,IAChF6iB,GAAaV,GAAYW,GAAWV,KACtC5/B,KAAK+F,MAAMs4B,MAAMnuB,MAAQmwB,EACzBrgC,KAAK+F,MAAMs4B,MAAMluB,IAAMmwB,EACvBtgC,KAAKg+B,YAAc,EAAIx0B,EAAMy2B,QAAQziB,MACrCmiB,EAAWU,EACXT,EAASU,GAGXtgC,KAAK8zB,SAAS6L,EAAUC,GAExB5/B,KAAKy5B,cAAe,EACpBz5B,KAAK05B,YAAa,IAUtB73B,EAAM4R,UAAUitB,eAAiB,SAAUF,GACzC,GAAI9F,GACAc,EAAYx7B,KAAK+O,QAAQysB,SAI7B,IAFAsD,EAAkBtD,GAED,cAAbA,EACF,MAAOx7B,MAAKk1B,KAAKv0B,KAAKi1B,OAAO4K,EAAQnuB,GAAGtL,SAGxC,IAAI+L,GAAS9S,KAAKk1B,KAAKC,SAASzI,OAAO5Z,MAEvC,OADA4nB,GAAa16B,KAAK06B,WAAW5nB,GACtB0tB,EAAQluB,EAAIooB,EAAWld,MAAQkd,EAAWxQ,QA4BrDroB,EAAM4R,UAAUktB,KAAO,SAASnjB,EAAOkP,EAAQsC,GAE/B,MAAVtC,IACFA,GAAU1sB,KAAKkQ,MAAQlQ,KAAKmQ,KAAO,EAGrC,IAAI0qB,GAAiBl5B,EAASg5B,yBAAyB36B,KAAKk1B,KAAKI,YAAat1B,KAAKkQ,MAAOlQ,KAAKmQ,KAC3F2wB,EAAuBn/B,EAASw5B,wBAAwBn7B,KAAKk1B,KAAKI,YAAat1B,KAAM0sB,GACrFqU,EAAsBlG,EAAiBiG,EAGvCnB,EAAYjT,EAAOoU,GAAyB9gC,KAAKkQ,OAASwc,EAAOoU,IAAyBtjB,EAC1FoiB,EAAYlT,EAAOqU,GAAwB/gC,KAAKmQ,KAAOuc,EAAOqU,IAAwBvjB,CAG1Fxd,MAAKy5B,aAAezK,EAAQ,GAAI,GAAQ,EACxChvB,KAAK05B,YAAc1K,EAAS,GAAI,GAAQ,CACxC,IAAIqR,GAAY1+B,EAAS45B,mBAAmBv7B,KAAKk1B,KAAKI,YAAaqK,EAAU3Q,GAAO,GAChFsR,EAAU3+B,EAAS45B,mBAAmBv7B,KAAKk1B,KAAKI,YAAasK,GAAS5Q,GAAO,IAC7EqR,GAAaV,GAAYW,GAAWV,KACtCD,EAAWU,EACXT,EAASU,GAGXtgC,KAAK8zB,SAAS6L,EAAUC,GAExB5/B,KAAKy5B,cAAe,EACpBz5B,KAAK05B,YAAa,GAWpB73B,EAAM4R,UAAUutB,KAAO,SAAShS,GAE9B,GAAInC,GAAQ7sB,KAAKmQ,IAAMnQ,KAAKkQ,MAGxByvB,EAAW3/B,KAAKkQ,MAAQ2c,EAAOmC,EAC/B4Q,EAAS5/B,KAAKmQ,IAAM0c,EAAOmC,CAI/BhvB,MAAKkQ,MAAQyvB,EACb3/B,KAAKmQ,IAAMyvB,GAOb/9B,EAAM4R,UAAU2U,OAAS,SAASA,GAChC,GAAIsE,IAAU1sB,KAAKkQ,MAAQlQ,KAAKmQ,KAAO,EAEnC0c,EAAOH,EAAStE,EAGhBuX,EAAW3/B,KAAKkQ,MAAQ2c,EACxB+S,EAAS5/B,KAAKmQ,IAAM0c,CAExB7sB,MAAK8zB,SAAS6L,EAAUC,IAG1B//B,EAAOD,QAAUiC,GAKb,SAAShC,EAAQD,GAGrB,GAAIqhC,GAAU,IAMdrhC,GAAQshC,aAAe,SAASj/B,GAC9BA,EAAMwU,KAAK,SAAUnR,EAAGa,GACtB,MAAOb,GAAE0N,KAAK9C,MAAQ/J,EAAE6M,KAAK9C,SASjCtQ,EAAQuhC,WAAa,SAASl/B,GAC5BA,EAAMwU,KAAK,SAAUnR,EAAGa,GACtB,GAAIi7B,GAAS,OAAS97B,GAAE0N,KAAQ1N,EAAE0N,KAAK7C,IAAM7K,EAAE0N,KAAK9C,MAChDmxB,EAAS,OAASl7B,GAAE6M,KAAQ7M,EAAE6M,KAAK7C,IAAMhK,EAAE6M,KAAK9C,KAEpD,OAAOkxB,GAAQC,KAenBzhC,EAAQkC,MAAQ,SAASG,EAAOgY,EAAQqnB,GACtC,GAAI/7B,GAAGg8B,CAEP,IAAID,EAEF,IAAK/7B,EAAI,EAAGg8B,EAAOt/B,EAAMyD,OAAY67B,EAAJh8B,EAAUA,IACzCtD,EAAMsD,GAAGqC,IAAM,IAKnB,KAAKrC,EAAI,EAAGg8B,EAAOt/B,EAAMyD,OAAY67B,EAAJh8B,EAAUA,IAAK,CAC9C,GAAIoK,GAAO1N,EAAMsD,EACjB,IAAIoK,EAAK7N,OAAsB,OAAb6N,EAAK/H,IAAc,CAEnC+H,EAAK/H,IAAMqS,EAAOunB,IAElB,GAAG,CAID,IAAK,GADDC,GAAgB,KACXrV,EAAI,EAAGsV,EAAKz/B,EAAMyD,OAAYg8B,EAAJtV,EAAQA,IAAK,CAC9C,GAAIzmB,GAAQ1D,EAAMmqB,EAClB,IAAkB,OAAdzmB,EAAMiC,KAAgBjC,IAAUgK,GAAQhK,EAAM7D,OAASlC,EAAQ+hC,UAAUhyB,EAAMhK,EAAOsU,EAAOtK,MAAO,CACtG8xB,EAAgB97B,CAChB,QAIiB,MAAjB87B,IAEF9xB,EAAK/H,IAAM65B,EAAc75B,IAAM65B,EAAc3uB,OAASmH,EAAOtK,KAAKqW,gBAE7Dyb,MAaf7hC,EAAQgiC,QAAU,SAAS3/B,EAAOgY,EAAQ4nB,GACxC,GAAIt8B,GAAGg8B,EAAMO,CAGb,KAAKv8B,EAAI,EAAGg8B,EAAOt/B,EAAMyD,OAAY67B,EAAJh8B,EAAUA,IACzC,GAA+BgB,SAA3BtE,EAAMsD,GAAGyN,KAAK+uB,SAAwB,CACxCD,EAAS7nB,EAAOunB,IAChB,KAAK,GAAIO,KAAYF,GACfA,EAAUh8B,eAAek8B,IACQ,GAA/BF,EAAUE,GAAU9Y,SAAmB4Y,EAAUE,GAAU15B,MAAQw5B,EAAU5/B,EAAMsD,GAAGyN,KAAK+uB,UAAU15B,QACvGy5B,GAAUD,EAAUE,GAAUjvB,OAASmH,EAAOtK,KAAKqW,SAIzD/jB,GAAMsD,GAAGqC,IAAMk6B,MAGf7/B,GAAMsD,GAAGqC,IAAMqS,EAAOunB,MAe5B5hC,EAAQ+hC,UAAY,SAASr8B,EAAGa,EAAG8T,GACjC,MAAS3U,GAAEkC,KAAOyS,EAAO8L,WAAakb,EAAkB96B,EAAEqB,KAAOrB,EAAE0M,OAC9DvN,EAAEkC,KAAOlC,EAAEuN,MAAQoH,EAAO8L,WAAakb,EAAW96B,EAAEqB,MACpDlC,EAAEsC,IAAMqS,EAAO+L,SAAWib,EAAyB96B,EAAEyB,IAAMzB,EAAE2M,QAC7DxN,EAAEsC,IAAMtC,EAAEwN,OAASmH,EAAO+L,SAAWib,EAAa96B,EAAEyB,MAMvD,SAAS/H,EAAQD,EAASM,GA+B9B,QAAS6B,GAASmO,EAAOC,EAAKurB,EAAapG,GAEzCt1B,KAAKo6B,QAAU,GAAI/1B,MACnBrE,KAAKyzB,OAAS,GAAIpvB,MAClBrE,KAAK0zB,KAAO,GAAIrvB,MAEhBrE,KAAK87B,WAAa,EAClB97B,KAAKwd,MAAQzb,EAASigC,MAAMC,IAC5BjiC,KAAK0oB,KAAO,EAGZ1oB,KAAK8zB,SAAS5jB,EAAOC,EAAKurB,GAG1B17B,KAAKw6B,aAAc,EACnBx6B,KAAKu6B,eAAgB,EACrBv6B,KAAKs6B,cAAe,EACpBt6B,KAAKs1B,YAAcA,EACC/uB,SAAhB+uB,IACFt1B,KAAKs1B,gBAhDT,GAAIzxB,GAAS3D,EAAoB,IAC7ByB,EAAWzB,EAAoB,GAoDnC6B,GAASigC,OACPE,YAAa,EACbC,OAAQ,EACRC,OAAQ,EACRC,KAAM,EACNJ,IAAK,EACLK,QAAS,EACTC,MAAO,EACPC,KAAM,GAcRzgC,EAAS0R,UAAUqgB,SAAW,SAAS5jB,EAAOC,EAAKurB,GACjD,KAAMxrB,YAAiB7L,OAAW8L,YAAe9L,OAC/C,KAAO,+CAGTrE,MAAKyzB,OAAmBltB,QAAT2J,EAAsB,GAAI7L,MAAK6L,EAAMnJ,WAAa,GAAI1C,MACrErE,KAAK0zB,KAAentB,QAAP4J,EAAoB,GAAI9L,MAAK8L,EAAIpJ,WAAa,GAAI1C,MAE3DrE,KAAK87B,WACP97B,KAAKq8B,eAAeX,IAOxB35B,EAAS0R,UAAUgvB,MAAQ,WACzBziC,KAAKo6B,QAAU,GAAI/1B,MAAKrE,KAAKyzB,OAAO1sB,WACpC/G,KAAKg9B,gBAOPj7B,EAAS0R,UAAUupB,aAAe,WAIhC,OAAQh9B,KAAKwd,OACX,IAAKzb,GAASigC,MAAMQ,KAClBxiC,KAAKo6B,QAAQsI,YAAY1iC,KAAK0oB,KAAOzjB,KAAKC,MAAMlF,KAAKo6B,QAAQuI,cAAgB3iC,KAAK0oB,OAClF1oB,KAAKo6B,QAAQwI,SAAS,EACxB,KAAK7gC,GAASigC,MAAMO,MAAcviC,KAAKo6B,QAAQyI,QAAQ,EACvD,KAAK9gC,GAASigC,MAAMC,IACpB,IAAKlgC,GAASigC,MAAMM,QAActiC,KAAKo6B,QAAQ0I,SAAS,EACxD,KAAK/gC,GAASigC,MAAMK,KAAcriC,KAAKo6B,QAAQ2I,WAAW,EAC1D,KAAKhhC,GAASigC,MAAMI,OAAcpiC,KAAKo6B,QAAQ4I,WAAW,EAC1D,KAAKjhC,GAASigC,MAAMG,OAAcniC,KAAKo6B,QAAQ6I,gBAAgB,GAIjE,GAAiB,GAAbjjC,KAAK0oB,KAEP,OAAQ1oB,KAAKwd,OACX,IAAKzb,GAASigC,MAAME,YAAcliC,KAAKo6B,QAAQ6I,gBAAgBjjC,KAAKo6B,QAAQ8I,kBAAoBljC,KAAKo6B,QAAQ8I,kBAAoBljC,KAAK0oB,KAAQ,MAC9I,KAAK3mB,GAASigC,MAAMG,OAAcniC,KAAKo6B,QAAQ4I,WAAWhjC,KAAKo6B,QAAQ+I,aAAenjC,KAAKo6B,QAAQ+I,aAAenjC,KAAK0oB,KAAO,MAC9H,KAAK3mB,GAASigC,MAAMI,OAAcpiC,KAAKo6B,QAAQ2I,WAAW/iC,KAAKo6B,QAAQgJ,aAAepjC,KAAKo6B,QAAQgJ,aAAepjC,KAAK0oB,KAAO,MAC9H,KAAK3mB,GAASigC,MAAMK,KAAcriC,KAAKo6B,QAAQ0I,SAAS9iC,KAAKo6B,QAAQiJ,WAAarjC,KAAKo6B,QAAQiJ,WAAarjC,KAAK0oB,KAAO,MACxH,KAAK3mB,GAASigC,MAAMM,QACpB,IAAKvgC,GAASigC,MAAMC,IAAcjiC,KAAKo6B,QAAQyI,QAAS7iC,KAAKo6B,QAAQkJ,UAAU,GAAMtjC,KAAKo6B,QAAQkJ,UAAU,GAAKtjC,KAAK0oB,KAAO,EAAI;KACjI,KAAK3mB,GAASigC,MAAMO,MAAcviC,KAAKo6B,QAAQwI,SAAS5iC,KAAKo6B,QAAQmJ,WAAavjC,KAAKo6B,QAAQmJ,WAAavjC,KAAK0oB,KAAQ,MACzH,KAAK3mB,GAASigC,MAAMQ,KAAcxiC,KAAKo6B,QAAQsI,YAAY1iC,KAAKo6B,QAAQuI,cAAgB3iC,KAAKo6B,QAAQuI,cAAgB3iC,KAAK0oB,QAUhI3mB,EAAS0R,UAAU0pB,QAAU,WAC3B,MAAQn9B,MAAKo6B,QAAQrzB,WAAa/G,KAAK0zB,KAAK3sB,WAM9ChF,EAAS0R,UAAUmV,KAAO,WACxB,GAAIuJ,GAAOnyB,KAAKo6B,QAAQrzB,SAIxB,IAAI/G,KAAKo6B,QAAQmJ,WAAa,EAC5B,OAAQvjC,KAAKwd,OACX,IAAKzb,GAASigC,MAAME,YAElBliC,KAAKo6B,QAAU,GAAI/1B,MAAKrE,KAAKo6B,QAAQrzB,UAAY/G,KAAK0oB,KAAO,MAC/D,KAAK3mB,GAASigC,MAAMG,OAAcniC,KAAKo6B,QAAU,GAAI/1B,MAAKrE,KAAKo6B,QAAQrzB,UAAwB,IAAZ/G,KAAK0oB,KAAc,MACtG,KAAK3mB,GAASigC,MAAMI,OAAcpiC,KAAKo6B,QAAU,GAAI/1B,MAAKrE,KAAKo6B,QAAQrzB,UAAwB,IAAZ/G,KAAK0oB,KAAc,GAAK,MAC3G,KAAK3mB,GAASigC,MAAMK,KAClBriC,KAAKo6B,QAAU,GAAI/1B,MAAKrE,KAAKo6B,QAAQrzB,UAAwB,IAAZ/G,KAAK0oB,KAAc,GAAK,GAEzE,IAAIpd,GAAItL,KAAKo6B,QAAQiJ,UACrBrjC,MAAKo6B,QAAQ0I,SAASx3B,EAAKA,EAAItL,KAAK0oB,KACpC,MACF,KAAK3mB,GAASigC,MAAMM,QACpB,IAAKvgC,GAASigC,MAAMC,IAAcjiC,KAAKo6B,QAAQyI,QAAQ7iC,KAAKo6B,QAAQkJ,UAAYtjC,KAAK0oB,KAAO,MAC5F,KAAK3mB,GAASigC,MAAMO,MAAcviC,KAAKo6B,QAAQwI,SAAS5iC,KAAKo6B,QAAQmJ,WAAavjC,KAAK0oB,KAAO,MAC9F,KAAK3mB,GAASigC,MAAMQ,KAAcxiC,KAAKo6B,QAAQsI,YAAY1iC,KAAKo6B,QAAQuI,cAAgB3iC,KAAK0oB,UAK/F,QAAQ1oB,KAAKwd,OACX,IAAKzb,GAASigC,MAAME,YAAcliC,KAAKo6B,QAAU,GAAI/1B,MAAKrE,KAAKo6B,QAAQrzB,UAAY/G,KAAK0oB,KAAO,MAC/F,KAAK3mB,GAASigC,MAAMG,OAAcniC,KAAKo6B,QAAQ4I,WAAWhjC,KAAKo6B,QAAQ+I,aAAenjC,KAAK0oB,KAAO,MAClG,KAAK3mB,GAASigC,MAAMI,OAAcpiC,KAAKo6B,QAAQ2I,WAAW/iC,KAAKo6B,QAAQgJ,aAAepjC,KAAK0oB,KAAO,MAClG,KAAK3mB,GAASigC,MAAMK,KAAcriC,KAAKo6B,QAAQ0I,SAAS9iC,KAAKo6B,QAAQiJ,WAAarjC,KAAK0oB,KAAO,MAC9F,KAAK3mB,GAASigC,MAAMM,QACpB,IAAKvgC,GAASigC,MAAMC,IAAcjiC,KAAKo6B,QAAQyI,QAAQ7iC,KAAKo6B,QAAQkJ,UAAYtjC,KAAK0oB,KAAO,MAC5F,KAAK3mB,GAASigC,MAAMO,MAAcviC,KAAKo6B,QAAQwI,SAAS5iC,KAAKo6B,QAAQmJ,WAAavjC,KAAK0oB,KAAO,MAC9F,KAAK3mB,GAASigC,MAAMQ,KAAcxiC,KAAKo6B,QAAQsI,YAAY1iC,KAAKo6B,QAAQuI,cAAgB3iC,KAAK0oB,MAKjG,GAAiB,GAAb1oB,KAAK0oB,KAEP,OAAQ1oB,KAAKwd,OACX,IAAKzb,GAASigC,MAAME,YAAiBliC,KAAKo6B,QAAQ8I,kBAAoBljC,KAAK0oB,MAAM1oB,KAAKo6B,QAAQ6I,gBAAgB,EAAK,MACnH,KAAKlhC,GAASigC,MAAMG,OAAiBniC,KAAKo6B,QAAQ+I,aAAenjC,KAAK0oB,MAAM1oB,KAAKo6B,QAAQ4I,WAAW,EAAK,MACzG,KAAKjhC,GAASigC,MAAMI,OAAiBpiC,KAAKo6B,QAAQgJ,aAAepjC,KAAK0oB,MAAM1oB,KAAKo6B,QAAQ2I,WAAW,EAAK,MACzG,KAAKhhC,GAASigC,MAAMK,KAAiBriC,KAAKo6B,QAAQiJ,WAAarjC,KAAK0oB,MAAM1oB,KAAKo6B,QAAQ0I,SAAS,EAAK,MACrG,KAAK/gC,GAASigC,MAAMM,QACpB,IAAKvgC,GAASigC,MAAMC,IAAiBjiC,KAAKo6B,QAAQkJ,UAAYtjC,KAAK0oB,KAAK,GAAG1oB,KAAKo6B,QAAQyI,QAAQ,EAAI,MACpG,KAAK9gC,GAASigC,MAAMO,MAAiBviC,KAAKo6B,QAAQmJ,WAAavjC,KAAK0oB,MAAM1oB,KAAKo6B,QAAQwI,SAAS,EAAK,MACrG,KAAK7gC,GAASigC,MAAMQ,MAMpBxiC,KAAKo6B,QAAQrzB,WAAaorB,IAC5BnyB,KAAKo6B,QAAU,GAAI/1B,MAAKrE,KAAK0zB,KAAK3sB,YAGpCpF,EAASo4B,oBAAoB/5B,KAAMmyB,IAQrCpwB,EAAS0R,UAAUkV,WAAa,WAC9B,MAAO3oB,MAAKo6B,SAgBdr4B,EAAS0R,UAAU+vB,SAAW,SAASC,EAAUC,GAC/C1jC,KAAKwd,MAAQimB,EAETC,EAAU,IACZ1jC,KAAK0oB,KAAOgb,GAGd1jC,KAAK87B,WAAY,GAOnB/5B,EAAS0R,UAAUkwB,aAAe,SAAUC,GAC1C5jC,KAAK87B,UAAY8H,GAQnB7hC,EAAS0R,UAAU4oB,eAAiB,SAASX,GAC3C,GAAmBn1B,QAAfm1B,EAAJ,CAMA,GAAImI,GAAiB,QACjBC,EAAiB,OACjBC,EAAiB,MACjBC,EAAiB,KACjBC,EAAiB,IACjBC,EAAiB,IACjBC,EAAiB,CAGR,KAATN,EAAgBnI,IAAqB17B,KAAKwd,MAAQzb,EAASigC,MAAMQ,KAAaxiC,KAAK0oB,KAAO,KACjF,IAATmb,EAAenI,IAAsB17B,KAAKwd,MAAQzb,EAASigC,MAAMQ,KAAaxiC,KAAK0oB,KAAO,KACjF,IAATmb,EAAenI,IAAsB17B,KAAKwd,MAAQzb,EAASigC,MAAMQ,KAAaxiC,KAAK0oB,KAAO,KACjF,GAATmb,EAAcnI,IAAuB17B,KAAKwd,MAAQzb,EAASigC,MAAMQ,KAAaxiC,KAAK0oB,KAAO,IACjF,GAATmb,EAAcnI,IAAuB17B,KAAKwd,MAAQzb,EAASigC,MAAMQ,KAAaxiC,KAAK0oB,KAAO,IACjF,EAATmb,EAAanI,IAAwB17B,KAAKwd,MAAQzb,EAASigC,MAAMQ,KAAaxiC,KAAK0oB,KAAO,GAC1Fmb,EAAWnI,IAA0B17B,KAAKwd,MAAQzb,EAASigC,MAAMQ,KAAaxiC,KAAK0oB,KAAO,GAChF,EAAVob,EAAcpI,IAAuB17B,KAAKwd,MAAQzb,EAASigC,MAAMO,MAAaviC,KAAK0oB,KAAO,GAC1Fob,EAAYpI,IAAyB17B,KAAKwd,MAAQzb,EAASigC,MAAMO,MAAaviC,KAAK0oB,KAAO,GAClF,EAARqb,EAAYrI,IAAyB17B,KAAKwd,MAAQzb,EAASigC,MAAMC,IAAajiC,KAAK0oB,KAAO,GAClF,EAARqb,EAAYrI,IAAyB17B,KAAKwd,MAAQzb,EAASigC,MAAMC,IAAajiC,KAAK0oB,KAAO,GAC1Fqb,EAAUrI,IAA2B17B,KAAKwd,MAAQzb,EAASigC,MAAMC,IAAajiC,KAAK0oB,KAAO,GAC1Fqb,EAAQ,EAAIrI,IAAyB17B,KAAKwd,MAAQzb,EAASigC,MAAMM,QAAatiC,KAAK0oB,KAAO,GACjF,EAATsb,EAAatI,IAAwB17B,KAAKwd,MAAQzb,EAASigC,MAAMK,KAAariC,KAAK0oB,KAAO,GAC1Fsb,EAAWtI,IAA0B17B,KAAKwd,MAAQzb,EAASigC,MAAMK,KAAariC,KAAK0oB,KAAO,GAC/E,GAAXub,EAAgBvI,IAAqB17B,KAAKwd,MAAQzb,EAASigC,MAAMI,OAAapiC,KAAK0oB,KAAO,IAC/E,GAAXub,EAAgBvI,IAAqB17B,KAAKwd,MAAQzb,EAASigC,MAAMI,OAAapiC,KAAK0oB,KAAO,IAC/E,EAAXub,EAAevI,IAAsB17B,KAAKwd,MAAQzb,EAASigC,MAAMI,OAAapiC,KAAK0oB,KAAO,GAC1Fub,EAAavI,IAAwB17B,KAAKwd,MAAQzb,EAASigC,MAAMI,OAAapiC,KAAK0oB,KAAO,GAC/E,GAAXwb,EAAgBxI,IAAqB17B,KAAKwd,MAAQzb,EAASigC,MAAMG,OAAaniC,KAAK0oB,KAAO,IAC/E,GAAXwb,EAAgBxI,IAAqB17B,KAAKwd,MAAQzb,EAASigC,MAAMG,OAAaniC,KAAK0oB,KAAO,IAC/E,EAAXwb,EAAexI,IAAsB17B,KAAKwd,MAAQzb,EAASigC,MAAMG,OAAaniC,KAAK0oB,KAAO,GAC1Fwb,EAAaxI,IAAwB17B,KAAKwd,MAAQzb,EAASigC,MAAMG,OAAaniC,KAAK0oB,KAAO,GAC1E,IAAhByb,EAAsBzI,IAAe17B,KAAKwd,MAAQzb,EAASigC,MAAME,YAAaliC,KAAK0oB,KAAO,KAC1E,IAAhByb,EAAsBzI,IAAe17B,KAAKwd,MAAQzb,EAASigC,MAAME,YAAaliC,KAAK0oB,KAAO,KAC1E,GAAhByb,EAAqBzI,IAAgB17B,KAAKwd,MAAQzb,EAASigC,MAAME,YAAaliC,KAAK0oB,KAAO,IAC1E,GAAhByb,EAAqBzI,IAAgB17B,KAAKwd,MAAQzb,EAASigC,MAAME,YAAaliC,KAAK0oB,KAAO,IAC1E,EAAhByb,EAAoBzI,IAAiB17B,KAAKwd,MAAQzb,EAASigC,MAAME,YAAaliC,KAAK0oB,KAAO,GAC1Fyb,EAAkBzI,IAAmB17B,KAAKwd,MAAQzb,EAASigC,MAAME,YAAaliC,KAAK0oB,KAAO,KAShG3mB,EAAS0R,UAAU8hB,KAAO,SAASwD,GACjC,GAAIL,GAAQ,GAAIr0B,MAAK00B,EAAKhyB,UAE1B,IAAI/G,KAAKwd,OAASzb,EAASigC,MAAMQ,KAAM,CACrC,GAAI3J,GAAOH,EAAMiK,cAAgB19B,KAAKipB,MAAMwK,EAAM6K,WAAa,GAC/D7K,GAAMgK,YAAYz9B,KAAKipB,MAAM2K,EAAO74B,KAAK0oB,MAAQ1oB,KAAK0oB,MACtDgQ,EAAMkK,SAAS,GACflK,EAAMmK,QAAQ,GACdnK,EAAMoK,SAAS,GACfpK,EAAMqK,WAAW,GACjBrK,EAAMsK,WAAW,GACjBtK,EAAMuK,gBAAgB,OAEnB,IAAIjjC,KAAKwd,OAASzb,EAASigC,MAAMO,MAChC7J,EAAM4K,UAAY,IACpB5K,EAAMmK,QAAQ,GACdnK,EAAMkK,SAASlK,EAAM6K,WAAa,IAIlC7K,EAAMmK,QAAQ,GAGhBnK,EAAMoK,SAAS,GACfpK,EAAMqK,WAAW,GACjBrK,EAAMsK,WAAW,GACjBtK,EAAMuK,gBAAgB,OAEnB,IAAIjjC,KAAKwd,OAASzb,EAASigC,MAAMC,IAAK,CAEzC,OAAQjiC,KAAK0oB,MACX,IAAK,GACL,IAAK,GACHgQ,EAAMoK,SAA6C,GAApC79B,KAAKipB,MAAMwK,EAAM2K,WAAa,IAAW,MAC1D,SACE3K,EAAMoK,SAA6C,GAApC79B,KAAKipB,MAAMwK,EAAM2K,WAAa,KAEjD3K,EAAMqK,WAAW,GACjBrK,EAAMsK,WAAW,GACjBtK,EAAMuK,gBAAgB,OAEnB,IAAIjjC,KAAKwd,OAASzb,EAASigC,MAAMM,QAAS,CAE7C,OAAQtiC,KAAK0oB,MACX,IAAK,GACL,IAAK,GACHgQ,EAAMoK,SAA6C,GAApC79B,KAAKipB,MAAMwK,EAAM2K,WAAa,IAAW,MAC1D,SACE3K,EAAMoK,SAA4C,EAAnC79B,KAAKipB,MAAMwK,EAAM2K,WAAa,IAEjD3K,EAAMqK,WAAW,GACjBrK,EAAMsK,WAAW,GACjBtK,EAAMuK,gBAAgB,OAEnB,IAAIjjC,KAAKwd,OAASzb,EAASigC,MAAMK,KAAM,CAC1C,OAAQriC,KAAK0oB,MACX,IAAK,GACHgQ,EAAMqK,WAAiD,GAAtC99B,KAAKipB,MAAMwK,EAAM0K,aAAe,IAAW,MAC9D,SACE1K,EAAMqK,WAAiD,GAAtC99B,KAAKipB,MAAMwK,EAAM0K,aAAe,KAErD1K,EAAMsK,WAAW,GACjBtK,EAAMuK,gBAAgB,OACjB,IAAIjjC,KAAKwd,OAASzb,EAASigC,MAAMI,OAAQ,CAE9C,OAAQpiC,KAAK0oB,MACX,IAAK,IACL,IAAK,IACHgQ,EAAMqK,WAAgD,EAArC99B,KAAKipB,MAAMwK,EAAM0K,aAAe,IACjD1K,EAAMsK,WAAW,EACjB,MACF,KAAK,GACHtK,EAAMsK,WAAiD,GAAtC/9B,KAAKipB,MAAMwK,EAAMyK,aAAe,IAAW,MAC9D,SACEzK,EAAMsK,WAAiD,GAAtC/9B,KAAKipB,MAAMwK,EAAMyK,aAAe,KAErDzK,EAAMuK,gBAAgB,OAEnB,IAAIjjC,KAAKwd,OAASzb,EAASigC,MAAMG,OAEpC,OAAQniC,KAAK0oB,MACX,IAAK,IACL,IAAK,IACHgQ,EAAMsK,WAAgD,EAArC/9B,KAAKipB,MAAMwK,EAAMyK,aAAe,IACjDzK,EAAMuK,gBAAgB,EACtB,MACF,KAAK,GACHvK,EAAMuK,gBAA6D,IAA7Ch+B,KAAKipB,MAAMwK,EAAMwK,kBAAoB,KAAe,MAC5E,SACExK,EAAMuK,gBAA4D,IAA5Ch+B,KAAKipB,MAAMwK,EAAMwK,kBAAoB,UAG5D,IAAIljC,KAAKwd,OAASzb,EAASigC,MAAME,YAAa,CACjD,GAAIxZ,GAAO1oB,KAAK0oB,KAAO,EAAI1oB,KAAK0oB,KAAO,EAAI,CAC3CgQ,GAAMuK,gBAAgBh+B,KAAKipB,MAAMwK,EAAMwK,kBAAoBxa,GAAQA,GAGrE,MAAOgQ,IAQT32B,EAAS0R,UAAUgqB,QAAU,WAC3B,GAAyB,GAArBz9B,KAAKs6B,aAEP,OADAt6B,KAAKs6B,cAAe,EACZt6B,KAAKwd,OACX,IAAKzb,GAASigC,MAAMQ,KACpB,IAAKzgC,GAASigC,MAAMO,MACpB,IAAKxgC,GAASigC,MAAMM,QACpB,IAAKvgC,GAASigC,MAAMC,IACpB,IAAKlgC,GAASigC,MAAMK,KACpB,IAAKtgC,GAASigC,MAAMI,OACpB,IAAKrgC,GAASigC,MAAMG,OACpB,IAAKpgC,GAASigC,MAAME,YAClB,OAAO,CACT,SACE,OAAO,MAGR,IAA0B,GAAtBliC,KAAKu6B,cAEZ,OADAv6B,KAAKu6B,eAAgB,EACbv6B,KAAKwd,OACX,IAAKzb,GAASigC,MAAMM,QACpB,IAAKvgC,GAASigC,MAAMC,IACpB,IAAKlgC,GAASigC,MAAMK,KACpB,IAAKtgC,GAASigC,MAAMI,OACpB,IAAKrgC,GAASigC,MAAMG,OACpB,IAAKpgC,GAASigC,MAAME,YAClB,OAAO,CACT,SACE,OAAO,MAGR,IAAwB,GAApBliC,KAAKw6B,YAEZ,OADAx6B,KAAKw6B,aAAc,EACXx6B,KAAKwd,OACX,IAAKzb,GAASigC,MAAME,YACpB,IAAKngC,GAASigC,MAAMG,OACpB,IAAKpgC,GAASigC,MAAMI,OACpB,IAAKrgC,GAASigC,MAAMK,KAClB,OAAO,CACT,SACE,OAAO,EAIb,OAAQriC,KAAKwd,OACX,IAAKzb,GAASigC,MAAME,YAClB,MAA0C,IAAlCliC,KAAKo6B,QAAQ8I,iBACvB,KAAKnhC,GAASigC,MAAMG,OAClB,MAAqC,IAA7BniC,KAAKo6B,QAAQ+I,YACvB,KAAKphC,GAASigC,MAAMI,OAClB,MAAmC,IAA3BpiC,KAAKo6B,QAAQiJ,YAAkD,GAA7BrjC,KAAKo6B,QAAQgJ,YACzD,KAAKrhC,GAASigC,MAAMK,KAClB,MAAmC,IAA3BriC,KAAKo6B,QAAQiJ,UACvB,KAAKthC,GAASigC,MAAMM,QACpB,IAAKvgC,GAASigC,MAAMC,IAClB,MAAkC,IAA1BjiC,KAAKo6B,QAAQkJ,SACvB,KAAKvhC,GAASigC,MAAMO,MAClB,MAAmC,IAA3BviC,KAAKo6B,QAAQmJ,UACvB,KAAKxhC,GAASigC,MAAMQ,KAClB,OAAO,CACT,SACE,OAAO,IAWbzgC,EAAS0R,UAAU2wB,cAAgB,SAASrL,GAK1C,OAJYxyB,QAARwyB,IACFA,EAAO/4B,KAAKo6B,SAGNp6B,KAAKwd,OACX,IAAKzb,GAASigC,MAAME,YAAc,MAAOr+B,GAAOk1B,GAAMsL,OAAO,MAC7D,KAAKtiC,GAASigC,MAAMG,OAAc,MAAOt+B,GAAOk1B,GAAMsL,OAAO,IAC7D,KAAKtiC,GAASigC,MAAMI,OAAc,MAAOv+B,GAAOk1B,GAAMsL,OAAO,QAC7D,KAAKtiC,GAASigC,MAAMK,KAAc,MAAOx+B,GAAOk1B,GAAMsL,OAAO,QAC7D,KAAKtiC,GAASigC,MAAMM,QAAc,MAAOz+B,GAAOk1B,GAAMsL,OAAO,QAC7D,KAAKtiC,GAASigC,MAAMC,IAAc,MAAOp+B,GAAOk1B,GAAMsL,OAAO,IAC7D,KAAKtiC,GAASigC,MAAMO,MAAc,MAAO1+B,GAAOk1B,GAAMsL,OAAO,MAC7D,KAAKtiC,GAASigC,MAAMQ,KAAc,MAAO3+B,GAAOk1B,GAAMsL,OAAO,OAC7D,SAAkC,MAAO,KAW7CtiC,EAAS0R,UAAU6wB,cAAgB,SAASvL,GAM1C,OALYxyB,QAARwyB,IACFA,EAAO/4B,KAAKo6B,SAINp6B,KAAKwd,OACX,IAAKzb,GAASigC,MAAME,YAAY,MAAOr+B,GAAOk1B,GAAMsL,OAAO,WAC3D,KAAKtiC,GAASigC,MAAMG,OAAY,MAAOt+B,GAAOk1B,GAAMsL,OAAO,eAC3D,KAAKtiC,GAASigC,MAAMI,OACpB,IAAKrgC,GAASigC,MAAMK,KAAY,MAAOx+B,GAAOk1B,GAAMsL,OAAO,aAC3D,KAAKtiC,GAASigC,MAAMM,QACpB,IAAKvgC,GAASigC,MAAMC,IAAY,MAAOp+B,GAAOk1B,GAAMsL,OAAO,YAC3D,KAAKtiC,GAASigC,MAAMO,MAAY,MAAO1+B,GAAOk1B,GAAMsL,OAAO,OAC3D,KAAKtiC,GAASigC,MAAMQ,KAAY,MAAO,EACvC,SAAgC,MAAO,KAI3C3iC,EAAOD,QAAUmC,GAKb,SAASlC,GAOb,QAAS0C,KACPvC,KAAK+O,QAAU,KACf/O,KAAK+F,MAAQ,KAQfxD,EAAUkR,UAAUD,WAAa,SAASzE,GACpCA,GACFpO,KAAK0E,OAAOrF,KAAK+O,QAASA,IAQ9BxM,EAAUkR,UAAUuO,OAAS,WAE3B,OAAO,GAMTzf,EAAUkR,UAAUG,QAAU,aAU9BrR,EAAUkR,UAAU8wB,WAAa,WAC/B,GAAIC,GAAWxkC,KAAK+F,MAAM0+B,iBAAmBzkC,KAAK+F,MAAM8M,OACpD7S,KAAK+F,MAAM2+B,kBAAoB1kC,KAAK+F,MAAM+M,MAK9C,OAHA9S,MAAK+F,MAAM0+B,eAAiBzkC,KAAK+F,MAAM8M,MACvC7S,KAAK+F,MAAM2+B,gBAAkB1kC,KAAK+F,MAAM+M,OAEjC0xB,GAGT3kC,EAAOD,QAAU2C,GAKb,SAAS1C,EAAQD,EAASM,GAe9B,QAASsC,GAAa0yB,EAAMnmB,GAC1B/O,KAAKk1B,KAAOA,EAGZl1B,KAAK40B,gBACH+P,iBAAiB,EAEjBC,QAASA,EACTC,OAAQ,MAEV7kC,KAAK+O,QAAUpO,EAAK0E,UAAWrF,KAAK40B,gBACpC50B,KAAKkqB,OAAS,EAEdlqB,KAAKi1B,UAELj1B,KAAKwT,WAAWzE,GA5BlB,GAAIpO,GAAOT,EAAoB,GAC3BqC,EAAYrC,EAAoB,IAChC2D,EAAS3D,EAAoB,IAC7B0kC,EAAU1kC,EAAoB,GA4BlCsC,GAAYiR,UAAY,GAAIlR,GAM5BC,EAAYiR,UAAUwhB,QAAU,WAC9B,GAAI7C,GAAMvgB,SAASM,cAAc,MACjCigB,GAAIrqB,UAAY,cAChBqqB,EAAI5kB,MAAM2W,SAAW,WACrBiO,EAAI5kB,MAAM5F,IAAM,MAChBwqB,EAAI5kB,MAAMsF,OAAS,OAEnB9S,KAAKoyB,IAAMA,GAMb5vB,EAAYiR,UAAUG,QAAU,WAC9B5T,KAAK+O,QAAQ41B,iBAAkB,EAC/B3kC,KAAKgiB,SAELhiB,KAAKk1B,KAAO,MAQd1yB,EAAYiR,UAAUD,WAAa,SAASzE,GACtCA,GAEFpO,EAAKmF,iBAAiB,kBAAmB,SAAU,WAAY9F,KAAK+O,QAASA,IAQjFvM,EAAYiR,UAAUuO,OAAS,WAC7B,GAAIhiB,KAAK+O,QAAQ41B,gBAAiB,CAChC,GAAIG,GAAS9kC,KAAKk1B,KAAK5E,IAAIyU,kBACvB/kC,MAAKoyB,IAAItoB,YAAcg7B,IAErB9kC,KAAKoyB,IAAItoB,YACX9J,KAAKoyB,IAAItoB,WAAW2H,YAAYzR,KAAKoyB,KAEvC0S,EAAO/yB,YAAY/R,KAAKoyB,KAExBpyB,KAAKkQ,QAGP,IAAIwtB,GAAM,GAAIr5B,OAAK,GAAIA,OAAO0C,UAAY/G,KAAKkqB,QAC3C7X,EAAIrS,KAAKk1B,KAAKv0B,KAAK60B,SAASkI,GAE5BmH,EAAS7kC,KAAK+O,QAAQ61B,QAAQ5kC,KAAK+O,QAAQ81B,QAC3CG,EAAQH,EAAOzK,QAAU,IAAMyK,EAAOpK,KAAO,KAAO52B,EAAO65B,GAAK2G,OAAO,8BAC3EW,GAAQA,EAAMrf,OAAO,GAAGtZ,cAAgB24B,EAAM14B,UAAU,GAExDtM,KAAKoyB,IAAI5kB,MAAMhG,KAAO6K,EAAI,KAC1BrS,KAAKoyB,IAAI4S,MAAQA,MAIbhlC,MAAKoyB,IAAItoB,YACX9J,KAAKoyB,IAAItoB,WAAW2H,YAAYzR,KAAKoyB,KAEvCpyB,KAAKylB,MAGP,QAAO,GAMTjjB,EAAYiR,UAAUvD,MAAQ,WAG5B,QAASiF,KACPV,EAAGgR,MAGH,IAAIjI,GAAQ/I,EAAGygB,KAAKc,MAAM0E,WAAWjmB,EAAGygB,KAAKC,SAASzI,OAAO7Z,OAAO2K,MAChEuV,EAAW,EAAIvV,EAAQ,EACZ,IAAXuV,IAAiBA,EAAW,IAC5BA,EAAW,MAAMA,EAAW,KAEhCte,EAAGuN,SAGHvN,EAAGwwB,iBAAmBprB,WAAW1E,EAAQ4d,GAd3C,GAAIte,GAAKzU,IAiBTmV,MAMF3S,EAAYiR,UAAUgS,KAAO,WACGlf,SAA1BvG,KAAKilC,mBACPrrB,aAAa5Z,KAAKilC,wBACXjlC,MAAKilC,mBAUhBziC,EAAYiR,UAAUyxB,eAAiB,SAASzK,GAC9C,GAAIrsB,GAAIzN,EAAKiG,QAAQ6zB,EAAM,QAAQ1zB,UAC/B22B,GAAM,GAAIr5B,OAAO0C,SACrB/G,MAAKkqB,OAAS9b,EAAIsvB,EAClB19B,KAAKgiB,UAOPxf,EAAYiR,UAAU0xB,eAAiB,WACrC,MAAO,IAAI9gC,OAAK,GAAIA,OAAO0C,UAAY/G,KAAKkqB,SAG9CrqB,EAAOD,QAAU4C,GAKb,SAAS3C,EAAQD,EAASM,GAiB9B,QAASuC,GAAYyyB,EAAMnmB,GACzB/O,KAAKk1B,KAAOA,EAGZl1B,KAAK40B,gBACHwQ,gBAAgB,EAChBR,QAASA,EACTC,OAAQ,MAEV7kC,KAAK+O,QAAUpO,EAAK0E,UAAWrF,KAAK40B,gBAEpC50B,KAAKm2B,WAAa,GAAI9xB,MACtBrE,KAAKqlC,eAGLrlC,KAAKi1B,UAELj1B,KAAKwT,WAAWzE,GAhClB,GAAIu2B,GAASplC,EAAoB,IAC7BS,EAAOT,EAAoB,GAC3BqC,EAAYrC,EAAoB,IAChC2D,EAAS3D,EAAoB,IAC7B0kC,EAAU1kC,EAAoB,GA+BlCuC,GAAWgR,UAAY,GAAIlR,GAO3BE,EAAWgR,UAAUD,WAAa,SAASzE,GACrCA,GAEFpO,EAAKmF,iBAAiB,iBAAkB,SAAU,WAAY9F,KAAK+O,QAASA,IAQhFtM,EAAWgR,UAAUwhB,QAAU,WAC7B,GAAI7C,GAAMvgB,SAASM,cAAc,MACjCigB,GAAIrqB,UAAY,aAChBqqB,EAAI5kB,MAAM2W,SAAW,WACrBiO,EAAI5kB,MAAM5F,IAAM,MAChBwqB,EAAI5kB,MAAMsF,OAAS,OACnB9S,KAAKoyB,IAAMA,CAEX,IAAImT,GAAO1zB,SAASM,cAAc,MAClCozB,GAAK/3B,MAAM2W,SAAW,WACtBohB,EAAK/3B,MAAM5F,IAAM,MACjB29B,EAAK/3B,MAAMhG,KAAO,QAClB+9B,EAAK/3B,MAAMsF,OAAS,OACpByyB,EAAK/3B,MAAMqF,MAAQ,OACnBuf,EAAIrgB,YAAYwzB,GAGhBvlC,KAAK8D,OAASwhC,EAAOlT,GACnBoT,iBAAiB,IAEnBxlC,KAAK8D,OAAO+P,GAAG,YAAa7T,KAAKu+B,aAAalJ,KAAKr1B,OACnDA,KAAK8D,OAAO+P,GAAG,OAAa7T,KAAKw+B,QAAQnJ,KAAKr1B,OAC9CA,KAAK8D,OAAO+P,GAAG,UAAa7T,KAAKy+B,WAAWpJ,KAAKr1B,QAMnDyC,EAAWgR,UAAUG,QAAU,WAC7B5T,KAAK+O,QAAQq2B,gBAAiB,EAC9BplC,KAAKgiB,SAELhiB,KAAK8D,OAAO8/B,QAAO,GACnB5jC,KAAK8D,OAAS,KAEd9D,KAAKk1B,KAAO,MAOdzyB,EAAWgR,UAAUuO,OAAS,WAC5B,GAAIhiB,KAAK+O,QAAQq2B,eAAgB,CAC/B,GAAIN,GAAS9kC,KAAKk1B,KAAK5E,IAAIyU,kBACvB/kC,MAAKoyB,IAAItoB,YAAcg7B,IAErB9kC,KAAKoyB,IAAItoB,YACX9J,KAAKoyB,IAAItoB,WAAW2H,YAAYzR,KAAKoyB,KAEvC0S,EAAO/yB,YAAY/R,KAAKoyB,KAG1B,IAAI/f,GAAIrS,KAAKk1B,KAAKv0B,KAAK60B,SAASx1B,KAAKm2B,YAEjC0O,EAAS7kC,KAAK+O,QAAQ61B,QAAQ5kC,KAAK+O,QAAQ81B,QAC3CG,EAAQH,EAAOpK,KAAO,KAAO52B,EAAO7D,KAAKm2B,YAAYkO,OAAO,8BAChEW,GAAQA,EAAMrf,OAAO,GAAGtZ,cAAgB24B,EAAM14B,UAAU,GAExDtM,KAAKoyB,IAAI5kB,MAAMhG,KAAO6K,EAAI,KAC1BrS,KAAKoyB,IAAI4S,MAAQA,MAIbhlC,MAAKoyB,IAAItoB,YACX9J,KAAKoyB,IAAItoB,WAAW2H,YAAYzR,KAAKoyB,IAIzC,QAAO,GAOT3vB,EAAWgR,UAAUgyB,cAAgB,SAAShL,GAC5Cz6B,KAAKm2B,WAAax1B,EAAKiG,QAAQ6zB,EAAM,QACrCz6B,KAAKgiB,UAOPvf,EAAWgR,UAAUiyB,cAAgB,WACnC,MAAO,IAAIrhC,MAAKrE,KAAKm2B,WAAWpvB,YAQlCtE,EAAWgR,UAAU8qB,aAAe,SAAS/0B,GAC3CxJ,KAAKqlC,YAAY7F,UAAW,EAC5Bx/B,KAAKqlC,YAAYlP,WAAan2B,KAAKm2B,WAEnC3sB,EAAMm8B,kBACNn8B,EAAMD,kBAQR9G,EAAWgR,UAAU+qB,QAAU,SAAUh1B,GACvC,GAAKxJ,KAAKqlC,YAAY7F,SAAtB,CAEA,GAAIU,GAAS12B,EAAMy2B,QAAQC,OACvB7tB,EAAIrS,KAAKk1B,KAAKv0B,KAAK60B,SAASx1B,KAAKqlC,YAAYlP,YAAc+J,EAC3DzF,EAAOz6B,KAAKk1B,KAAKv0B,KAAKi1B,OAAOvjB,EAEjCrS,MAAKylC,cAAchL,GAGnBz6B,KAAKk1B,KAAKE,QAAQhH,KAAK,cACrBqM,KAAM,GAAIp2B,MAAKrE,KAAKm2B,WAAWpvB,aAGjCyC,EAAMm8B,kBACNn8B,EAAMD,mBAQR9G,EAAWgR,UAAUgrB,WAAa,SAAUj1B,GACrCxJ,KAAKqlC,YAAY7F,WAGtBx/B,KAAKk1B,KAAKE,QAAQhH,KAAK,eACrBqM,KAAM,GAAIp2B,MAAKrE,KAAKm2B,WAAWpvB,aAGjCyC,EAAMm8B,kBACNn8B,EAAMD,mBAGR1J,EAAOD,QAAU6C,GAKb,SAAS5C,EAAQD,EAASM,GAe9B,QAASwC,GAAUwyB,EAAMnmB,EAAS62B,EAAKC,GACrC7lC,KAAKK,GAAKM,EAAKoE,aACf/E,KAAKk1B,KAAOA,EAEZl1B,KAAK40B,gBACHE,YAAa,OACbgR,iBAAiB,EACjBC,iBAAiB,EACjBC,OAAO,EACPC,iBAAkB,EAClBC,iBAAkB,EAClBC,aAAc,GACdC,aAAc,EACdC,UAAW,GACXxzB,MAAO,OACPoW,SAAS,EACT4S,YAAY,EACZD,aACEp0B,MAAOiE,IAAIlF,OAAW2G,IAAI3G,QAC1BqhB,OAAQnc,IAAIlF,OAAW2G,IAAI3G,SAE7By+B,OACEx9B,MAAOsiB,KAAKvjB,QACZqhB,OAAQkC,KAAKvjB,SAEf89B,QACE78B,MAAO61B,SAAU92B,QACjBqhB,OAAQyV,SAAU92B,UAItBvG,KAAK6lC,iBAAmBA,EACxB7lC,KAAKsmC,aAAeV,EACpB5lC,KAAK+F,SACL/F,KAAKumC,aACHC,SACAC,UACAzB,UAGFhlC,KAAKswB,OAELtwB,KAAKg2B,OAAS9lB,MAAM,EAAGC,IAAI,GAE3BnQ,KAAK+O,QAAUpO,EAAK0E,UAAWrF,KAAK40B,gBACpC50B,KAAK0mC,iBAAmB,EAExB1mC,KAAKwT,WAAWzE,GAChB/O,KAAK6S,MAAQ5O,QAAQ,GAAKjE,KAAK+O,QAAQ8D,OAAOzG,QAAQ,KAAK,KAC3DpM,KAAK2mC,SAAW3mC,KAAK6S,MACrB7S,KAAK8S,OAAS9S,KAAKsmC,aAAazV,aAChC7wB,KAAKw5B,QAAS,EAEdx5B,KAAK4mC,WAAa,GAClB5mC,KAAK6mC,iBAAmB,GACxB7mC,KAAK8mC,aAAe,GAEpB9mC,KAAK+mC,WAAa,EAClB/mC,KAAKgnC,QAAS,EACdhnC,KAAKinC,eACLjnC,KAAKknC,cAAe,EAGpBlnC,KAAK00B,UACL10B,KAAKmnC,eAAiB,EAGtBnnC,KAAKi1B,SAEL,IAAIxgB,GAAKzU,IACTA,MAAKk1B,KAAKE,QAAQvhB,GAAG,eAAgB,WACnCY,EAAG6b,IAAI8W,cAAc55B,MAAM5F,IAAM6M,EAAGygB,KAAKC,SAASkS,UAAY,OApFlE,GAAI1mC,GAAOT,EAAoB,GAC3BU,EAAUV,EAAoB,GAC9BqC,EAAYrC,EAAoB,IAChC0B,EAAW1B,EAAoB,GAqFnCwC,GAAS+Q,UAAY,GAAIlR,GAGzBG,EAAS+Q,UAAU6zB,SAAW,SAASte,EAAOue,GACvCvnC,KAAK00B,OAAO7uB,eAAemjB,KAC9BhpB,KAAK00B,OAAO1L,GAASue,GAEvBvnC,KAAKmnC,gBAAkB,GAGzBzkC,EAAS+Q,UAAU+zB,YAAc,SAASxe,EAAOue,GAC/CvnC,KAAK00B,OAAO1L,GAASue,GAGvB7kC,EAAS+Q,UAAUg0B,YAAc,SAASze,GACpChpB,KAAK00B,OAAO7uB,eAAemjB,WACtBhpB,MAAK00B,OAAO1L,GACnBhpB,KAAKmnC,gBAAkB,IAK3BzkC,EAAS+Q,UAAUD,WAAa,SAAUzE,GACxC,GAAIA,EAAS,CACX,GAAIiT,IAAS,CACThiB,MAAK+O,QAAQ+lB,aAAe/lB,EAAQ+lB,aAAuCvuB,SAAxBwI,EAAQ+lB,cAC7D9S,GAAS,EAEX,IAAIxT,IACF,cACA,kBACA,kBACA,QACA,mBACA,mBACA,eACA,eACA,YACA,QACA,UACA,cACA,QACA,SACA,aAEF7N,GAAKmF,gBAAgB0I,EAAQxO,KAAK+O,QAASA,GAE3C/O,KAAK2mC,SAAW1iC,QAAQ,GAAKjE,KAAK+O,QAAQ8D,OAAOzG,QAAQ,KAAK,KAEhD,GAAV4V,GAAkBhiB,KAAKswB,IAAIzQ,QAC7B7f,KAAK0nC,OACL1nC,KAAK2nC,UASXjlC,EAAS+Q,UAAUwhB,QAAU,WAC3Bj1B,KAAKswB,IAAIzQ,MAAQhO,SAASM,cAAc,OACxCnS,KAAKswB,IAAIzQ,MAAMrS,MAAMqF,MAAQ7S,KAAK+O,QAAQ8D,MAC1C7S,KAAKswB,IAAIzQ,MAAMrS,MAAMsF,OAAS9S,KAAK8S,OAEnC9S,KAAKswB,IAAI8W,cAAgBv1B,SAASM,cAAc,OAChDnS,KAAKswB,IAAI8W,cAAc55B,MAAMqF,MAAQ,OACrC7S,KAAKswB,IAAI8W,cAAc55B,MAAMsF,OAAS9S,KAAK8S,OAC3C9S,KAAKswB,IAAI8W,cAAc55B,MAAM2W,SAAW,WAGxCnkB,KAAK4lC,IAAM/zB,SAASC,gBAAgB,6BAA6B,OACjE9R,KAAK4lC,IAAIp4B,MAAM2W,SAAW,WAC1BnkB,KAAK4lC,IAAIp4B,MAAM5F,IAAM,MACrB5H,KAAK4lC,IAAIp4B,MAAMsF,OAAS,OACxB9S,KAAK4lC,IAAIp4B,MAAMqF,MAAQ,OACvB7S,KAAK4lC,IAAIp4B,MAAMo6B,QAAU,QACzB5nC,KAAKswB,IAAIzQ,MAAM9N,YAAY/R,KAAK4lC,MAGlCljC,EAAS+Q,UAAUo0B,kBAAoB,WACrCjnC,EAAQuQ,gBAAgBnR,KAAKinC,YAE7B,IAAI50B,GACAg0B,EAAYrmC,KAAK+O,QAAQs3B,UACzByB,EAAa,GACbC,EAAa,EACbz1B,EAAIy1B,EAAa,GAAMD,CAGzBz1B,GAD8B,QAA5BrS,KAAK+O,QAAQ+lB,YACXiT,EAGA/nC,KAAK6S,MAAQwzB,EAAY0B,CAG/B,KAAK,GAAInQ,KAAW53B,MAAK00B,OACnB10B,KAAK00B,OAAO7uB,eAAe+xB,KACO,GAAhC53B,KAAK00B,OAAOkD,GAAS3O,SAAkE1iB,SAA9CvG,KAAK6lC,iBAAiB/N,WAAWF,IAAuE,GAA7C53B,KAAK6lC,iBAAiB/N,WAAWF,KACvI53B,KAAK00B,OAAOkD,GAASoQ,SAAS31B,EAAGC,EAAGtS,KAAKinC,YAAajnC,KAAK4lC,IAAKS,EAAWyB,GAC3Ex1B,GAAKw1B,EAAaC,GAKxBnnC,GAAQ4Q,gBAAgBxR,KAAKinC,aAC7BjnC,KAAKknC,cAAe,GAGtBxkC,EAAS+Q,UAAUw0B,cAAgB,WACR,GAArBjoC,KAAKknC,eACPtmC,EAAQuQ,gBAAgBnR,KAAKinC,aAC7BrmC,EAAQ4Q,gBAAgBxR,KAAKinC,aAC7BjnC,KAAKknC,cAAe,IAOxBxkC,EAAS+Q,UAAUk0B,KAAO,WACxB3nC,KAAKw5B,QAAS,EACTx5B,KAAKswB,IAAIzQ,MAAM/V,aACc,QAA5B9J,KAAK+O,QAAQ+lB,YACf90B,KAAKk1B,KAAK5E,IAAI9oB,KAAKuK,YAAY/R,KAAKswB,IAAIzQ,OAGxC7f,KAAKk1B,KAAK5E,IAAI1I,MAAM7V,YAAY/R,KAAKswB,IAAIzQ,QAIxC7f,KAAKswB,IAAI8W,cAAct9B,YAC1B9J,KAAKk1B,KAAK5E,IAAI4X,qBAAqBn2B,YAAY/R,KAAKswB,IAAI8W,gBAO5D1kC,EAAS+Q,UAAUi0B,KAAO,WACxB1nC,KAAKw5B,QAAS,EACVx5B,KAAKswB,IAAIzQ,MAAM/V,YACjB9J,KAAKswB,IAAIzQ,MAAM/V,WAAW2H,YAAYzR,KAAKswB,IAAIzQ,OAG7C7f,KAAKswB,IAAI8W,cAAct9B,YACzB9J,KAAKswB,IAAI8W,cAAct9B,WAAW2H,YAAYzR,KAAKswB,IAAI8W,gBAU3D1kC,EAAS+Q,UAAUqgB,SAAW,SAAU5jB,EAAOC,GAC1B,GAAfnQ,KAAKgnC,QAA8C,GAA3BhnC,KAAK+O,QAAQ8sB,YAA2C,IAArB77B,KAAK8mC,cAC9D52B,EAAQ,IACVA,EAAQ,GAGZlQ,KAAKg2B,MAAM9lB,MAAQA,EACnBlQ,KAAKg2B,MAAM7lB,IAAMA,GAOnBzN,EAAS+Q,UAAUuO,OAAS,WAC1B,GAAImmB,IAAe,EACfC,EAAe,CAGnBpoC,MAAKswB,IAAI8W,cAAc55B,MAAM5F,IAAM5H,KAAKk1B,KAAKC,SAASkS,UAAY,IAElE,KAAK,GAAIzP,KAAW53B,MAAK00B,OACnB10B,KAAK00B,OAAO7uB,eAAe+xB,KACO,GAAhC53B,KAAK00B,OAAOkD,GAAS3O,SAAkE1iB,SAA9CvG,KAAK6lC,iBAAiB/N,WAAWF,IAAuE,GAA7C53B,KAAK6lC,iBAAiB/N,WAAWF,IACvIwQ,IAIN,IAA2B,GAAvBpoC,KAAKmnC,gBAAuC,GAAhBiB,EAC9BpoC,KAAK0nC,WAEF,CACH1nC,KAAK2nC,OACL3nC,KAAK8S,OAAS7O,OAAOjE,KAAKsmC,aAAa94B,MAAMsF,OAAO1G,QAAQ,KAAK,KAGjEpM,KAAKswB,IAAI8W,cAAc55B,MAAMsF,OAAS9S,KAAK8S,OAAS,KACpD9S,KAAK6S,MAAgC,GAAxB7S,KAAK+O,QAAQka,QAAkBhlB,QAAQ,GAAKjE,KAAK+O,QAAQ8D,OAAOzG,QAAQ,KAAK,KAAO,CAEjG,IAAIrG,GAAQ/F,KAAK+F,MACb8Z,EAAQ7f,KAAKswB,IAAIzQ,KAGrBA,GAAM9X,UAAY,WAGlB/H,KAAKqoC,oBAEL,IAAIvT,GAAc90B,KAAK+O,QAAQ+lB,YAC3BgR,EAAkB9lC,KAAK+O,QAAQ+2B,gBAC/BC,EAAkB/lC,KAAK+O,QAAQg3B,eAGnChgC,GAAMuiC,iBAAmBxC,EAAkB//B,EAAMwiC,gBAAkB,EACnExiC,EAAMyiC,iBAAmBzC,EAAkBhgC,EAAM0iC,gBAAkB,EAEnE1iC,EAAM2iC,eAAiB1oC,KAAKk1B,KAAK5E,IAAI4X,qBAAqBvX,YAAc3wB,KAAK+mC,WAAa/mC,KAAK6S,MAAQ,EAAI7S,KAAK+O,QAAQm3B,iBACxHngC,EAAM4iC,gBAAkB,EACxB5iC,EAAM6iC,eAAiB5oC,KAAKk1B,KAAK5E,IAAI4X,qBAAqBvX,YAAc3wB,KAAK+mC,WAAa/mC,KAAK6S,MAAQ,EAAI7S,KAAK+O,QAAQk3B,iBACxHlgC,EAAM8iC,gBAAkB,EAGL,QAAf/T,GACFjV,EAAMrS,MAAM5F,IAAM,IAClBiY,EAAMrS,MAAMhG,KAAO,IACnBqY,EAAMrS,MAAMqW,OAAS,GACrBhE,EAAMrS,MAAMqF,MAAQ7S,KAAK6S,MAAQ,KACjCgN,EAAMrS,MAAMsF,OAAS9S,KAAK8S,OAAS,OAGnC+M,EAAMrS,MAAM5F,IAAM,GAClBiY,EAAMrS,MAAMqW,OAAS,IACrBhE,EAAMrS,MAAMhG,KAAO,IACnBqY,EAAMrS,MAAMqF,MAAQ7S,KAAK6S,MAAQ,KACjCgN,EAAMrS,MAAMsF,OAAS9S,KAAK8S,OAAS,MAErCq1B,EAAenoC,KAAK8oC,gBAEM,GAAtB9oC,KAAK+O,QAAQi3B,MACfhmC,KAAK6nC,oBAGL7nC,KAAKioC,gBAGPjoC,KAAK+oC,aAAajU,GAEpB,MAAOqT,IAOTzlC,EAAS+Q,UAAUq1B,cAAgB,WACjCloC,EAAQuQ,gBAAgBnR,KAAKumC,YAAYC,OACzC5lC,EAAQuQ,gBAAgBnR,KAAKumC,YAAYE,OAEzC,IAAI3R,GAAc90B,KAAK+O,QAAqB,YAGxC2sB,EAAc17B,KAAKgnC,OAAShnC,KAAK+F,MAAM0iC,iBAAmB,GAAKzoC,KAAK6mC,iBAEpEne,EAAO,GAAI9mB,GACb5B,KAAKg2B,MAAM9lB,MACXlQ,KAAKg2B,MAAM7lB,IACXurB,EACA17B,KAAKswB,IAAIzQ,MAAMgR,aACf7wB,KAAK+O,QAAQ6sB,YAAY57B,KAAK+O,QAAQ+lB,aACvB,GAAf90B,KAAKgnC,QAAmBhnC,KAAK+O,QAAQ8sB,WAGvC77B,MAAK0oB,KAAOA,CAGZ,IAAIke,IAAc5mC,KAAKswB,IAAIzQ,MAAMgR,aAAgBnI,EAAKwT,WAAal8B,KAAKswB,IAAIzQ,MAAMgR,aAAenI,EAAKuU,gBAAoBvU,EAAKuU,YAAcvU,EAAKwT,WAAaxT,EAAKA,KAEpK1oB,MAAK4mC,WAAaA,CAElB,IAAIoC,GAAgBhpC,KAAK8S,OAAS8zB,EAC9BqC,EAAiB,CAGrB,IAAmB,GAAfjpC,KAAKgnC,OAAiB,CACxBJ,EAAa5mC,KAAK6mC,iBAClBoC,EAAiBhkC,KAAKipB,MAAOluB,KAAKswB,IAAIzQ,MAAMgR,aAAe+V,EAAcoC,EACzE,KAAK,GAAIzjC,GAAI,EAAO,GAAM0jC,EAAV1jC,EAA0BA,IACxCmjB,EAAK0U,UAIP,IAFA4L,EAAgBhpC,KAAK8S,OAAS8zB,EAEL,IAArB5mC,KAAK8mC,cAAiD,GAA3B9mC,KAAK+O,QAAQ8sB,WAAoB,CAC9D,GAAIqN,GAAsBxgB,EAAKuT,UAAYvT,EAAKA,KAAQ1oB,KAAK8mC,YAC7D,IAAIoC,EAAqB,EACvB,IAAK,GAAI3jC,GAAI,EAAO2jC,EAAJ3jC,EAAwBA,IAAMmjB,EAAKE,WAEhD,IAAyB,EAArBsgB,EACP,IAAK,GAAI3jC,GAAI,GAAQ2jC,EAAL3jC,EAAyBA,IAAMmjB,EAAK0U,gBAKxD4L,IAAiB,GAInBhpC,MAAKmpC,YAAczgB,EAAKuT,SACxB,IAMIoB,GANA+L,EAAiB,EAGjBl8B,EAAM,CAI8B3G,UAArCvG,KAAK+O,QAAQs1B,OAAOvP,KACrBuI,EAAWr9B,KAAK+O,QAAQs1B,OAAOvP,GAAauI,UAG9Cr9B,KAAKqpC,aAAe,CAEpB,KADA,GAAI/2B,GAAI,EACDpF,EAAMjI,KAAKipB,MAAM8a,IAAgB,CACtCtgB,EAAKE,OACLtW,EAAIrN,KAAKipB,MAAMhhB,EAAM05B,GACrBwC,EAAiBl8B,EAAM05B,CACvB,IAAInJ,GAAU/U,EAAK+U,WAEfz9B,KAAK+O,QAAyB,iBAAgB,GAAX0uB,GAAmC,GAAfz9B,KAAKgnC,QAAsD,GAAnChnC,KAAK+O,QAAyB,kBAC/G/O,KAAKspC,aAAah3B,EAAI,EAAGoW,EAAKC,WAAW0U,GAAWvI,EAAa,cAAe90B,KAAK+F,MAAMwiC,iBAGzF9K,GAAWz9B,KAAK+O,QAAyB,iBAAoB,GAAf/O,KAAKgnC,QAChB,GAAnChnC,KAAK+O,QAAyB,iBAA6B,GAAf/O,KAAKgnC,QAA8B,GAAXvJ,GAClEnrB,GAAK,GACPtS,KAAKspC,aAAah3B,EAAI,EAAGoW,EAAKC,WAAW0U,GAAWvI,EAAa,cAAe90B,KAAK+F,MAAM0iC,iBAE7FzoC,KAAKupC,YAAYj3B,EAAGwiB,EAAa,wBAAyB90B,KAAK+O,QAAQk3B,iBAAkBjmC,KAAK+F,MAAM6iC,iBAGpG5oC,KAAKupC,YAAYj3B,EAAGwiB,EAAa,wBAAyB90B,KAAK+O,QAAQm3B,iBAAkBlmC,KAAK+F,MAAM2iC,gBAGnF,GAAf1oC,KAAKgnC,QAAkC,GAAhBte,EAAK0R,UAC9Bp6B,KAAK8mC,aAAe55B,GAGtBA,IAIAlN,KAAK0mC,iBADY,GAAf1mC,KAAKgnC,OACiB10B,GAAKtS,KAAKmpC,YAAczgB,EAAK0R,SAG7Bp6B,KAAKswB,IAAIzQ,MAAMgR,aAAenI,EAAKuU,WAI7D,IAAIuM,GAAa,CACuBjjC,UAApCvG,KAAK+O,QAAQi2B,MAAMlQ,IAAuEvuB,SAAzCvG,KAAK+O,QAAQi2B,MAAMlQ,GAAahL,OACnF0f,EAAaxpC,KAAK+F,MAAM0jC,gBAE1B,IAAIvf,GAA+B,GAAtBlqB,KAAK+O,QAAQi3B,MAAgB/gC,KAAKiI,IAAIlN,KAAK+O,QAAQs3B,UAAWmD,GAAcxpC,KAAK+O,QAAQo3B,aAAe,GAAKqD,EAAaxpC,KAAK+O,QAAQo3B,aAAe,EAGnK,OAAInmC,MAAKqpC,aAAgBrpC,KAAK6S,MAAQqX,GAAmC,GAAxBlqB,KAAK+O,QAAQka,SAC5DjpB,KAAK6S,MAAQ7S,KAAKqpC,aAAenf,EACjClqB,KAAK+O,QAAQ8D,MAAQ7S,KAAK6S,MAAQ,KAClCjS,EAAQ4Q,gBAAgBxR,KAAKumC,YAAYC,OACzC5lC,EAAQ4Q,gBAAgBxR,KAAKumC,YAAYE,QACzCzmC,KAAKgiB,UACE,GAGAhiB,KAAKqpC,aAAgBrpC,KAAK6S,MAAQqX,GAAmC,GAAxBlqB,KAAK+O,QAAQka,SAAmBjpB,KAAK6S,MAAQ7S,KAAK2mC,UACtG3mC,KAAK6S,MAAQ5N,KAAKiI,IAAIlN,KAAK2mC,SAAS3mC,KAAKqpC,aAAenf,GACxDlqB,KAAK+O,QAAQ8D,MAAQ7S,KAAK6S,MAAQ,KAClCjS,EAAQ4Q,gBAAgBxR,KAAKumC,YAAYC,OACzC5lC,EAAQ4Q,gBAAgBxR,KAAKumC,YAAYE,QACzCzmC,KAAKgiB,UACE,IAGPphB,EAAQ4Q,gBAAgBxR,KAAKumC,YAAYC,OACzC5lC,EAAQ4Q,gBAAgBxR,KAAKumC,YAAYE,SAClC,IAIX/jC,EAAS+Q,UAAUi2B,aAAe,SAAUtiC,GAC1C,GAAIuiC,GAAgB3pC,KAAKmpC,YAAc/hC,EACnCwiC,EAAiBD,EAAgB3pC,KAAK0mC,gBAC1C,OAAOkD,IAYTlnC,EAAS+Q,UAAU61B,aAAe,SAAUh3B,EAAGwX,EAAMgL,EAAa/sB,EAAW8hC,GAE3E,GAAI7gB,GAAQpoB,EAAQoR,cAAc,MAAMhS,KAAKumC,YAAYE,OAAQzmC,KAAKswB,IAAIzQ,MAC1EmJ,GAAMjhB,UAAYA,EAClBihB,EAAMxE,UAAYsF,EACC,QAAfgL,GACF9L,EAAMxb,MAAMhG,KAAO,IAAMxH,KAAK+O,QAAQo3B,aAAe,KACrDnd,EAAMxb,MAAMqb,UAAY,UAGxBG,EAAMxb,MAAMoa,MAAQ,IAAM5nB,KAAK+O,QAAQo3B,aAAe,KACtDnd,EAAMxb,MAAMqb,UAAY,QAG1BG,EAAMxb,MAAM5F,IAAM0K,EAAI,GAAMu3B,EAAkB7pC,KAAK+O,QAAQq3B,aAAe,KAE1Etc,GAAQ,EAER,IAAIggB,GAAe7kC,KAAKiI,IAAIlN,KAAK+F,MAAMgkC,eAAe/pC,KAAK+F,MAAMikC,eAC7DhqC,MAAKqpC,aAAevf,EAAKpkB,OAASokC,IACpC9pC,KAAKqpC,aAAevf,EAAKpkB,OAASokC,IAYtCpnC,EAAS+Q,UAAU81B,YAAc,SAAUj3B,EAAGwiB,EAAa/sB,EAAWmiB,EAAQrX,GAC5E,GAAmB,GAAf7S,KAAKgnC,OAAgB,CACvB,GAAI5W,GAAOxvB,EAAQoR,cAAc,MAAMhS,KAAKumC,YAAYC,MAAOxmC,KAAKswB,IAAI8W,cACxEhX,GAAKroB,UAAYA,EACjBqoB,EAAK5L,UAAY,GAEE,QAAfsQ,EACF1E,EAAK5iB,MAAMhG,KAAQxH,KAAK6S,MAAQqX,EAAU,KAG1CkG,EAAK5iB,MAAMoa,MAAS5nB,KAAK6S,MAAQqX,EAAU,KAG7CkG,EAAK5iB,MAAMqF,MAAQA,EAAQ,KAC3Bud,EAAK5iB,MAAM5F,IAAM0K,EAAI,OASzB5P,EAAS+Q,UAAUs1B,aAAe,SAAUjU,GAI1C,GAHAl0B,EAAQuQ,gBAAgBnR,KAAKumC,YAAYvB,OAGDz+B,SAApCvG,KAAK+O,QAAQi2B,MAAMlQ,IAAuEvuB,SAAzCvG,KAAK+O,QAAQi2B,MAAMlQ,GAAahL,KAAoB,CACvG,GAAIkb,GAAQpkC,EAAQoR,cAAc,MAAOhS,KAAKumC,YAAYvB,MAAOhlC,KAAKswB,IAAIzQ,MAC1EmlB,GAAMj9B,UAAY,eAAiB+sB,EACnCkQ,EAAMxgB,UAAYxkB,KAAK+O,QAAQi2B,MAAMlQ,GAAahL,KAGJvjB,SAA1CvG,KAAK+O,QAAQi2B,MAAMlQ,GAAatnB,OAClC7M,EAAKkN,WAAWm3B,EAAOhlC,KAAK+O,QAAQi2B,MAAMlQ,GAAatnB,OAGtC,QAAfsnB,EACFkQ,EAAMx3B,MAAMhG,KAAOxH,KAAK+F,MAAM0jC,gBAAkB,KAGhDzE,EAAMx3B,MAAMoa,MAAQ5nB,KAAK+F,MAAM0jC,gBAAkB,KAGnDzE,EAAMx3B,MAAMqF,MAAQ7S,KAAK8S,OAAS,KAIpClS,EAAQ4Q,gBAAgBxR,KAAKumC,YAAYvB,QAW3CtiC,EAAS+Q,UAAU40B,mBAAqB,WAEtC,KAAM,mBAAqBroC,MAAK+F,OAAQ,CACtC,GAAIkkC,GAAYp4B,SAASq4B,eAAe,KACpCC,EAAmBt4B,SAASM,cAAc,MAC9Cg4B,GAAiBpiC,UAAY,sBAC7BoiC,EAAiBp4B,YAAYk4B,GAC7BjqC,KAAKswB,IAAIzQ,MAAM9N,YAAYo4B,GAE3BnqC,KAAK+F,MAAMwiC,gBAAkB4B,EAAiB/kB,aAC9CplB,KAAK+F,MAAMikC,eAAiBG,EAAiBpqB,YAE7C/f,KAAKswB,IAAIzQ,MAAMpO,YAAY04B,GAG7B,KAAM,mBAAqBnqC,MAAK+F,OAAQ,CACtC,GAAIqkC,GAAYv4B,SAASq4B,eAAe,KACpCG,EAAmBx4B,SAASM,cAAc,MAC9Ck4B,GAAiBtiC,UAAY,sBAC7BsiC,EAAiBt4B,YAAYq4B,GAC7BpqC,KAAKswB,IAAIzQ,MAAM9N,YAAYs4B,GAE3BrqC,KAAK+F,MAAM0iC,gBAAkB4B,EAAiBjlB,aAC9CplB,KAAK+F,MAAMgkC,eAAiBM,EAAiBtqB,YAE7C/f,KAAKswB,IAAIzQ,MAAMpO,YAAY44B,GAG7B,KAAM,mBAAqBrqC,MAAK+F,OAAQ,CACtC,GAAIukC,GAAYz4B,SAASq4B,eAAe,KACpCK,EAAmB14B,SAASM,cAAc,MAC9Co4B,GAAiBxiC,UAAY,sBAC7BwiC,EAAiBx4B,YAAYu4B,GAC7BtqC,KAAKswB,IAAIzQ,MAAM9N,YAAYw4B,GAE3BvqC,KAAK+F,MAAM0jC,gBAAkBc,EAAiBnlB,aAC9CplB,KAAK+F,MAAMykC,eAAiBD,EAAiBxqB,YAE7C/f,KAAKswB,IAAIzQ,MAAMpO,YAAY84B,KAU/B7nC,EAAS+Q,UAAU8hB,KAAO,SAASwD,GACjC,MAAO/4B,MAAK0oB,KAAK6M,KAAKwD,IAGxBl5B,EAAOD,QAAU8C,GAKb,SAAS7C,EAAQD,EAASM,GAkB9B,QAASyC,GAAY4P,EAAOqlB,EAAS7oB,EAAS07B,GAC5CzqC,KAAKK,GAAKu3B,CACV,IAAIppB,IAAU,WAAW,QAAQ,OAAO,mBAAmB,WAAW,aAAa,SAAS,aAC5FxO,MAAK+O,QAAUpO,EAAK4N,sBAAsBC,EAAOO,GACjD/O,KAAK0qC,kBAAwCnkC,SAApBgM,EAAMxK,UAC/B/H,KAAKyqC,yBAA2BA,EAChCzqC,KAAK2qC,aAAe,EACpB3qC,KAAKmV,OAAO5C,GACkB,GAA1BvS,KAAK0qC,oBACP1qC,KAAKyqC,yBAAyB,IAAM,GAEtCzqC,KAAKq2B,aACLr2B,KAAKipB,QAA4B1iB,SAAlBgM,EAAM0W,SAAwB,EAAO1W,EAAM0W,QA5B5D,GAAItoB,GAAOT,EAAoB,GAC3BU,EAAUV,EAAoB,GAC9B0qC,EAAO1qC,EAAoB,IAC3B2qC,EAAM3qC,EAAoB,IAC1B4qC,EAAS5qC,EAAoB,GAgCjCyC,GAAW8Q,UAAU+iB,SAAW,SAASv0B,GAC1B,MAATA,GACFjC,KAAKq2B,UAAYp0B,EACQ,GAArBjC,KAAK+O,QAAQ0H,MACfzW,KAAKq2B,UAAU5f,KAAK,SAAUnR,EAAEa,GAAI,MAAOb,GAAE+M,EAAIlM,EAAEkM,KAIrDrS,KAAKq2B,cAST1zB,EAAW8Q,UAAUs3B,gBAAkB,SAASjlB,GAC9C9lB,KAAK2qC,aAAe7kB,GAQtBnjB,EAAW8Q,UAAUD,WAAa,SAASzE,GACzC,GAAgBxI,SAAZwI,EAAuB,CACzB,GAAIP,IAAU,WAAW,QAAQ,OAAO,mBAAmB,WAC3D7N,GAAKuF,oBAAoBsI,EAAQxO,KAAK+O,QAASA,GAE/CpO,EAAKkO,aAAa7O,KAAK+O,QAASA,EAAQ,cACxCpO,EAAKkO,aAAa7O,KAAK+O,QAASA,EAAQ,cACxCpO,EAAKkO,aAAa7O,KAAK+O,QAASA,EAAQ,UAEpCA,EAAQi8B,YACuB,gBAAtBj8B,GAAQi8B,YACbj8B,EAAQi8B,WAAWC,kBACqB,WAAtCl8B,EAAQi8B,WAAWC,gBACrBjrC,KAAK+O,QAAQi8B,WAAWE,MAAQ,EAEa,WAAtCn8B,EAAQi8B,WAAWC,gBAC1BjrC,KAAK+O,QAAQi8B,WAAWE,MAAQ,GAGhClrC,KAAK+O,QAAQi8B,WAAWC,gBAAkB,cAC1CjrC,KAAK+O,QAAQi8B,WAAWE,MAAQ,KAOhB,QAAtBlrC,KAAK+O,QAAQvB,MACfxN,KAAK6G,KAAO,GAAI+jC,GAAK5qC,KAAKK,GAAIL,KAAK+O,SAEN,OAAtB/O,KAAK+O,QAAQvB,MACpBxN,KAAK6G,KAAO,GAAIgkC,GAAI7qC,KAAKK,GAAIL,KAAK+O,SAEL,UAAtB/O,KAAK+O,QAAQvB,QACpBxN,KAAK6G,KAAO,GAAIikC,GAAO9qC,KAAKK,GAAIL,KAAK+O,WASzCpM,EAAW8Q,UAAU0B,OAAS,SAAS5C,GACrCvS,KAAKuS,MAAQA,EACbvS,KAAKmwB,QAAU5d,EAAM4d,SAAW,QAChCnwB,KAAK+H,UAAYwK,EAAMxK,WAAa/H,KAAK+H,WAAa,aAAe/H,KAAKyqC,yBAAyB,GAAK,GACxGzqC,KAAKipB,QAA4B1iB,SAAlBgM,EAAM0W,SAAwB,EAAO1W,EAAM0W,QAC1DjpB,KAAKwN,MAAQ+E,EAAM/E,MACnBxN,KAAKwT,WAAWjB,EAAMxD,UAcxBpM,EAAW8Q,UAAUu0B,SAAW,SAAS31B,EAAGC,EAAGlB,EAAe+5B,EAAc9E,EAAWyB,GACrF,GACIsD,GAAMC,EADNC,EAA0B,GAAbxD,EAGbyD,EAAU3qC,EAAQ8Q,cAAc,OAAQN,EAAe+5B,EAO3D,IANAI,EAAQ74B,eAAe,KAAM,IAAKL,GAClCk5B,EAAQ74B,eAAe,KAAM,IAAKJ,EAAIg5B,GACtCC,EAAQ74B,eAAe,KAAM,QAAS2zB,GACtCkF,EAAQ74B,eAAe,KAAM,SAAU,EAAE44B,GACzCC,EAAQ74B,eAAe,KAAM,QAAS,WAEZ,QAAtB1S,KAAK+O,QAAQvB,MACf49B,EAAOxqC,EAAQ8Q,cAAc,OAAQN,EAAe+5B,GACpDC,EAAK14B,eAAe,KAAM,QAAS1S,KAAK+H,WACtBxB,SAAfvG,KAAKwN,OACN49B,EAAK14B,eAAe,KAAM,QAAS1S,KAAKwN,OAG1C49B,EAAK14B,eAAe,KAAM,IAAK,IAAML,EAAI,IAAIC,EAAE,MAAQD,EAAIg0B,GAAa,IAAI/zB,GACzC,GAA/BtS,KAAK+O,QAAQy8B,OAAOx8B,UACtBq8B,EAAWzqC,EAAQ8Q,cAAc,OAAQN,EAAe+5B,GACjB,OAAnCnrC,KAAK+O,QAAQy8B,OAAO1W,YACtBuW,EAAS34B,eAAe,KAAM,IAAK,IAAIL,EAAE,MAAQC,EAAIg5B,GACnD,IAAIj5B,EAAE,IAAIC,EAAE,MAAOD,EAAIg0B,GAAa,IAAI/zB,EAAE,MAAOD,EAAIg0B,GAAa,KAAO/zB,EAAIg5B,IAG/ED,EAAS34B,eAAe,KAAM,IAAK,IAAIL,EAAE,IAAIC,EAAE,KACzCD,EAAE,KAAOC,EAAIg5B,GAAc,MACzBj5B,EAAIg0B,GAAa,KAAO/zB,EAAIg5B,GAClC,KAAMj5B,EAAIg0B,GAAa,IAAI/zB,GAE/B+4B,EAAS34B,eAAe,KAAM,QAAS1S,KAAK+H,UAAY,cAGnB,GAAnC/H,KAAK+O,QAAQ0D,WAAWzD,SAC1BpO,EAAQwR,UAAUC,EAAI,GAAMg0B,EAAU/zB,EAAGtS,KAAMoR,EAAe+5B,OAG7D,CACH,GAAIM,GAAWxmC,KAAKipB,MAAM,GAAMmY,GAC5BqF,EAAazmC,KAAKipB,MAAM,GAAM4Z,GAC9B6D,EAAa1mC,KAAKipB,MAAM,IAAO4Z,GAE/B5d,EAASjlB,KAAKipB,OAAOmY,EAAa,EAAIoF,GAAW,EAErD7qC,GAAQgS,QAAQP,EAAI,GAAIo5B,EAAWvhB,EAAY5X,EAAIg5B,EAAaI,EAAa,EAAGD,EAAUC,EAAY1rC,KAAK+H,UAAY,OAAQqJ,EAAe+5B,GAC9IvqC,EAAQgS,QAAQP,EAAI,IAAIo5B,EAAWvhB,EAAS,EAAG5X,EAAIg5B,EAAaK,EAAa,EAAGF,EAAUE,EAAY3rC,KAAK+H,UAAY,OAAQqJ,EAAe+5B,KAYlJxoC,EAAW8Q,UAAUkkB,UAAY,SAAS0O,EAAWyB,GACnD,GAAIlC,GAAM/zB,SAASC,gBAAgB,6BAA6B,MAEhE,OADA9R,MAAKgoC,SAAS,EAAE,GAAIF,KAAclC,EAAIS,EAAUyB,IACxC8D,KAAMhG,EAAK5c,MAAOhpB,KAAKmwB,QAAS2E,YAAY90B,KAAK+O,QAAQ88B,mBAGnElpC,EAAW8Q,UAAUq4B,UAAY,SAASC,GACxC,MAAO/rC,MAAK6G,KAAKilC,UAAUC,IAG7BppC,EAAW8Q,UAAUu4B,KAAO,SAAS1U,EAAS/kB,EAAO05B,GACnDjsC,KAAK6G,KAAKmlC,KAAK1U,EAAS/kB,EAAO05B,IAIjCpsC,EAAOD,QAAU+C,GAKb,SAAS9C,EAAQD,EAASM,GAY9B,QAAS0C,GAAOg1B,EAAS5kB,EAAMojB,GAC7Bp2B,KAAK43B,QAAUA,EACf53B,KAAK6hC,aACL7hC,KAAKksC,cAAgB,EACrBlsC,KAAKmsC,gBAAkBn5B,GAAQA,EAAKo5B,cACpCpsC,KAAKo2B,QAAUA,EAEfp2B,KAAKswB,OACLtwB,KAAK+F,OACHijB,OACEnW,MAAO,EACPC,OAAQ,IAGZ9S,KAAK+H,UAAY,KAEjB/H,KAAKiC,SACLjC,KAAKqsC,gBACLrsC,KAAKkP,cACHo9B,WACAC,UAEFvsC,KAAKwsC,kBAAmB,CACxB,IAAI/3B,GAAKzU,IACTA,MAAKo2B,QAAQlB,KAAKE,QAAQvhB,GAAG,mBAAoB,WAC/CY,EAAG+3B,kBAAmB,IAGxBxsC,KAAKi1B,UAELj1B,KAAKuY,QAAQvF,GAxCf,CAAA,GAAIrS,GAAOT,EAAoB,GAC3B4B,EAAQ5B,EAAoB,GAChBA,GAAoB,IA6CpC0C,EAAM6Q,UAAUwhB,QAAU,WACxB,GAAIjM,GAAQnX,SAASM,cAAc,MACnC6W,GAAMjhB,UAAY,SAClB/H,KAAKswB,IAAItH,MAAQA,CAEjB,IAAIyjB,GAAQ56B,SAASM,cAAc,MACnCs6B,GAAM1kC,UAAY,QAClBihB,EAAMjX,YAAY06B,GAClBzsC,KAAKswB,IAAImc,MAAQA,CAEjB,IAAIC,GAAa76B,SAASM,cAAc,MACxCu6B,GAAW3kC,UAAY,QACvB2kC,EAAW,kBAAoB1sC,KAC/BA,KAAKswB,IAAIoc,WAAaA,EAEtB1sC,KAAKswB,IAAIxkB,WAAa+F,SAASM,cAAc,OAC7CnS,KAAKswB,IAAIxkB,WAAW/D,UAAY,QAEhC/H,KAAKswB,IAAIkR,KAAO3vB,SAASM,cAAc,OACvCnS,KAAKswB,IAAIkR,KAAKz5B,UAAY,QAK1B/H,KAAKswB,IAAIqc,OAAS96B,SAASM,cAAc,OACzCnS,KAAKswB,IAAIqc,OAAOn/B,MAAMsqB,WAAa,SACnC93B,KAAKswB,IAAIqc,OAAOnoB,UAAY,IAC5BxkB,KAAKswB,IAAIxkB,WAAWiG,YAAY/R,KAAKswB,IAAIqc,SAO3C/pC,EAAM6Q,UAAU8E,QAAU,SAASvF,GAEjC,GAAImd,GAAUnd,GAAQA,EAAKmd,OACvBA,aAAmByc,SACrB5sC,KAAKswB,IAAImc,MAAM16B,YAAYoe,GAG3BnwB,KAAKswB,IAAImc,MAAMjoB,UADIje,SAAZ4pB,GAAqC,OAAZA,EACLA,EAGAnwB,KAAK43B,SAAW,GAI7C53B,KAAKswB,IAAItH,MAAMgc,MAAQhyB,GAAQA,EAAKgyB,OAAS,GAExChlC,KAAKswB,IAAImc,MAAMvoB,WAIlBvjB,EAAKyH,gBAAgBpI,KAAKswB,IAAImc,MAAO,UAHrC9rC,EAAKmH,aAAa9H,KAAKswB,IAAImc,MAAO,SAOpC,IAAI1kC,GAAYiL,GAAQA,EAAKjL,WAAa,IACtCA,IAAa/H,KAAK+H,YAChB/H,KAAK+H,YACPpH,EAAKyH,gBAAgBpI,KAAKswB,IAAItH,MAAOhpB,KAAK+H,WAC1CpH,EAAKyH,gBAAgBpI,KAAKswB,IAAIoc,WAAY1sC,KAAK+H,WAC/CpH,EAAKyH,gBAAgBpI,KAAKswB,IAAIxkB,WAAY9L,KAAK+H,WAC/CpH,EAAKyH,gBAAgBpI,KAAKswB,IAAIkR,KAAMxhC,KAAK+H,YAE3CpH,EAAKmH,aAAa9H,KAAKswB,IAAItH,MAAOjhB,GAClCpH,EAAKmH,aAAa9H,KAAKswB,IAAIoc,WAAY3kC,GACvCpH,EAAKmH,aAAa9H,KAAKswB,IAAIxkB,WAAY/D,GACvCpH,EAAKmH,aAAa9H,KAAKswB,IAAIkR,KAAMz5B,GACjC/H,KAAK+H,UAAYA,GAIf/H,KAAKwN,QACP7M,EAAKqN,cAAchO,KAAKswB,IAAItH,MAAOhpB,KAAKwN,OACxCxN,KAAKwN,MAAQ,MAEXwF,GAAQA,EAAKxF,QACf7M,EAAKkN,WAAW7N,KAAKswB,IAAItH,MAAOhW,EAAKxF,OACrCxN,KAAKwN,MAAQwF,EAAKxF,QAQtB5K,EAAM6Q,UAAUo5B,cAAgB,WAC9B,MAAO7sC,MAAK+F,MAAMijB,MAAMnW,OAW1BjQ,EAAM6Q,UAAUuO,OAAS,SAASgU,EAAO/b,EAAQ6yB,GAC/C,GAAItI,IAAU,CAEdxkC,MAAKqsC,aAAersC,KAAK+sC,oBAAoB/sC,KAAKkP,aAAclP,KAAKqsC,aAAcrW,EAInF,IAAIgX,GAAehtC,KAAKswB,IAAIqc,OAAOvnB,YAC/B4nB,IAAgBhtC,KAAKitC,mBACvBjtC,KAAKitC,iBAAmBD,EAExBrsC,EAAK4H,QAAQvI,KAAKiC,MAAO,SAAU0N,GACjCA,EAAKu9B,OAAQ,EACTv9B,EAAKw9B,WAAWx9B,EAAKqS,WAG3B8qB,GAAU,GAIR9sC,KAAKo2B,QAAQrnB,QAAQjN,MACvBA,EAAMA,MAAM9B,KAAKqsC,aAAcpyB,EAAQ6yB,GAGvChrC,EAAM8/B,QAAQ5hC,KAAKqsC,aAAcpyB,EAAQja,KAAK6hC,UAIhD,IAAI/uB,GAAS9S,KAAKotC,iBAAiBnzB,GAG/ByyB,EAAa1sC,KAAKswB,IAAIoc,UAC1B1sC,MAAK4H,IAAM8kC,EAAWW,UACtBrtC,KAAKwH,KAAOklC,EAAWY,WACvBttC,KAAK6S,MAAQ65B,EAAW/b,YACxB6T,EAAU7jC,EAAKgI,eAAe3I,KAAM,SAAU8S,IAAW0xB,EAGzDA,EAAU7jC,EAAKgI,eAAe3I,KAAK+F,MAAMijB,MAAO,QAAShpB,KAAKswB,IAAImc,MAAM1sB,cAAgBykB,EACxFA,EAAU7jC,EAAKgI,eAAe3I,KAAK+F,MAAMijB,MAAO,SAAUhpB,KAAKswB,IAAImc,MAAMrnB,eAAiBof,EAG1FxkC,KAAKswB,IAAIxkB,WAAW0B,MAAMsF,OAAUA,EAAS,KAC7C9S,KAAKswB,IAAIoc,WAAWl/B,MAAMsF,OAAUA,EAAS,KAC7C9S,KAAKswB,IAAItH,MAAMxb,MAAMsF,OAASA,EAAS,IAGvC,KAAK,GAAIvN,GAAI,EAAGgoC,EAAKvtC,KAAKqsC,aAAa3mC,OAAY6nC,EAAJhoC,EAAQA,IAAK,CAC1D,GAAIoK,GAAO3P,KAAKqsC,aAAa9mC,EAC7BoK,GAAK69B,YAAYvzB,GAGnB,MAAOuqB,IAST5hC,EAAM6Q,UAAU25B,iBAAmB,SAAUnzB,GAE3C,GAAInH,GACAu5B,EAAersC,KAAKqsC,YAGxBrsC,MAAKytC,gBACL,IAAIh5B,GAAKzU,IACT,IAAIqsC,EAAa3mC,OAAQ,CACvB,GAAI+F,GAAM4gC,EAAa,GAAGzkC,IACtBsF,EAAMm/B,EAAa,GAAGzkC,IAAMykC,EAAa,GAAGv5B,MAahD,IAZAnS,EAAK4H,QAAQ8jC,EAAc,SAAU18B,GACnClE,EAAMxG,KAAKwG,IAAIA,EAAKkE,EAAK/H,KACzBsF,EAAMjI,KAAKiI,IAAIA,EAAMyC,EAAK/H,IAAM+H,EAAKmD,QACVvM,SAAvBoJ,EAAKqD,KAAK+uB,WACZttB,EAAGotB,UAAUlyB,EAAKqD,KAAK+uB,UAAUjvB,OAAS7N,KAAKiI,IAAIuH,EAAGotB,UAAUlyB,EAAKqD,KAAK+uB,UAAUjvB,OAAOnD,EAAKmD,QAChG2B,EAAGotB,UAAUlyB,EAAKqD,KAAK+uB,UAAU9Y,SAAU,KAO3Cxd,EAAMwO,EAAOunB,KAAM,CAErB,GAAItX,GAASze,EAAMwO,EAAOunB,IAC1Bt0B,IAAOgd,EACPvpB,EAAK4H,QAAQ8jC,EAAc,SAAU18B,GACnCA,EAAK/H,KAAOsiB,IAGhBpX,EAAS5F,EAAM+M,EAAOtK,KAAKqW,SAAW,MAGtClT,GAASmH,EAAOunB,KAAOvnB,EAAOtK,KAAKqW,QAIrC,OAFAlT,GAAS7N,KAAKiI,IAAI4F,EAAQ9S,KAAK+F,MAAMijB,MAAMlW,SAQ7ClQ,EAAM6Q,UAAUk0B,KAAO,WAChB3nC,KAAKswB,IAAItH,MAAMlf,YAClB9J,KAAKo2B,QAAQ9F,IAAIod,SAAS37B,YAAY/R,KAAKswB,IAAItH,OAG5ChpB,KAAKswB,IAAIoc,WAAW5iC,YACvB9J,KAAKo2B,QAAQ9F,IAAIoc,WAAW36B,YAAY/R,KAAKswB,IAAIoc,YAG9C1sC,KAAKswB,IAAIxkB,WAAWhC,YACvB9J,KAAKo2B,QAAQ9F,IAAIxkB,WAAWiG,YAAY/R,KAAKswB,IAAIxkB,YAG9C9L,KAAKswB,IAAIkR,KAAK13B,YACjB9J,KAAKo2B,QAAQ9F,IAAIkR,KAAKzvB,YAAY/R,KAAKswB,IAAIkR,OAO/C5+B,EAAM6Q,UAAUi0B,KAAO,WACrB,GAAI1e,GAAQhpB,KAAKswB,IAAItH,KACjBA,GAAMlf,YACRkf,EAAMlf,WAAW2H,YAAYuX,EAG/B,IAAI0jB,GAAa1sC,KAAKswB,IAAIoc,UACtBA,GAAW5iC,YACb4iC,EAAW5iC,WAAW2H,YAAYi7B,EAGpC,IAAI5gC,GAAa9L,KAAKswB,IAAIxkB,UACtBA,GAAWhC,YACbgC,EAAWhC,WAAW2H,YAAY3F,EAGpC,IAAI01B,GAAOxhC,KAAKswB,IAAIkR,IAChBA,GAAK13B,YACP03B,EAAK13B,WAAW2H,YAAY+vB,IAQhC5+B,EAAM6Q,UAAUF,IAAM,SAAS5D,GAc7B,GAbA3P,KAAKiC,MAAM0N,EAAKtP,IAAMsP,EACtBA,EAAKg+B,UAAU3tC,MAGYuG,SAAvBoJ,EAAKqD,KAAK+uB,WAC+Bx7B,SAAvCvG,KAAK6hC,UAAUlyB,EAAKqD,KAAK+uB,YAC3B/hC,KAAK6hC,UAAUlyB,EAAKqD,KAAK+uB,WAAajvB,OAAO,EAAGmW,SAAS,EAAO5gB,MAAMrI,KAAKksC,cAAejqC,UAC1FjC,KAAKksC,iBAEPlsC,KAAK6hC,UAAUlyB,EAAKqD,KAAK+uB,UAAU9/B,MAAMiG,KAAKyH,IAEhD3P,KAAK4tC,iBAEkC,IAAnC5tC,KAAKqsC,aAAa3lC,QAAQiJ,GAAa,CACzC,GAAIqmB,GAAQh2B,KAAKo2B,QAAQlB,KAAKc,KAC9Bh2B,MAAK6tC,gBAAgBl+B,EAAM3P,KAAKqsC,aAAcrW,KAIlDpzB,EAAM6Q,UAAUm6B,eAAiB,WAC/B,GAA6BrnC,SAAzBvG,KAAKmsC,gBAA+B,CACtC,GAAI2B,KACJ,IAAmC,gBAAxB9tC,MAAKmsC,gBAA6B,CAC3C,IAAK,GAAIpK,KAAY/hC,MAAK6hC,UACxBiM,EAAU5lC,MAAM65B,SAAUA,EAAUgM,UAAW/tC,KAAK6hC,UAAUE,GAAU9/B,MAAM,GAAG+Q,KAAKhT,KAAKmsC,kBAE7F2B,GAAUr3B,KAAK,SAAUnR,EAAGa,GAC1B,MAAOb,GAAEyoC,UAAY5nC,EAAE4nC,gBAGtB,IAAmC,kBAAxB/tC,MAAKmsC,gBAA+B,CAClD,IAAK,GAAIpK,KAAY/hC,MAAK6hC,UACxBiM,EAAU5lC,KAAKlI,KAAK6hC,UAAUE,GAAU9/B,MAAM,GAAG+Q,KAEnD86B,GAAUr3B,KAAKzW,KAAKmsC,iBAGtB,GAAI2B,EAAUpoC,OAAS,EACrB,IAAK,GAAIH,GAAI,EAAGA,EAAIuoC,EAAUpoC,OAAQH,IACpCvF,KAAK6hC,UAAUiM,EAAUvoC,GAAGw8B,UAAU15B,MAAQ9C,IAMtD3C,EAAM6Q,UAAUg6B,eAAiB,WAC/B,IAAK,GAAI1L,KAAY/hC,MAAK6hC,UACpB7hC,KAAK6hC,UAAUh8B,eAAek8B,KAChC/hC,KAAK6hC,UAAUE,GAAU9Y,SAAU,IASzCrmB,EAAM6Q,UAAUmD,OAAS,SAASjH,SACzB3P,MAAKiC,MAAM0N,EAAKtP,IACvBsP,EAAKg+B,UAAU,KAGf,IAAItlC,GAAQrI,KAAKqsC,aAAa3lC,QAAQiJ,EACzB,KAATtH,GAAarI,KAAKqsC,aAAa/jC,OAAOD,EAAO,IAUnDzF,EAAM6Q,UAAUu6B,kBAAoB,SAASr+B,GAC3C3P,KAAKo2B,QAAQ6X,WAAWt+B,EAAKtP,KAO/BuC,EAAM6Q,UAAUsC,MAAQ,WAKtB,IAAK,GAJDrN,GAAQ/H,EAAK8H,QAAQzI,KAAKiC,OAC1BisC,KACAC,KAEK5oC,EAAI,EAAGA,EAAImD,EAAMhD,OAAQH,IACNgB,SAAtBmC,EAAMnD,GAAGyN,KAAK7C,KAChBg+B,EAASjmC,KAAKQ,EAAMnD,IAEtB2oC,EAAWhmC,KAAKQ,EAAMnD,GAExBvF,MAAKkP,cACHo9B,QAAS4B,EACT3B,MAAO4B,GAGTrsC,EAAMo/B,aAAalhC,KAAKkP,aAAao9B,SACrCxqC,EAAMq/B,WAAWnhC,KAAKkP,aAAaq9B,QAYrC3pC,EAAM6Q,UAAUs5B,oBAAsB,SAAS79B,EAAck/B,EAAiBpY,GAC5E,GAKIrmB,GAAMpK,EALN8mC,KACAgC,KACAtb,GAAYiD,EAAM7lB,IAAM6lB,EAAM9lB,OAAS,EACvCo+B,EAAatY,EAAM9lB,MAAQ6iB,EAC3Bwb,EAAavY,EAAM7lB,IAAM4iB,EAIzB5jB,EAAiB,SAAU/H,GAC7B,MAAiBknC,GAARlnC,EAA6B,GACpBmnC,GAATnnC,EAA8B,EACA;CAMzC,IAAIgnC,EAAgB1oC,OAAS,EAC3B,IAAKH,EAAI,EAAGA,EAAI6oC,EAAgB1oC,OAAQH,IACtCvF,KAAKwuC,6BAA6BJ,EAAgB7oC,GAAI8mC,EAAcgC,EAAoBrY,EAK5F,IAAIyY,GAAoB9tC,EAAKsO,mBAAmBC,EAAao9B,QAASn9B,EAAgB,OAAO,QAS7F,IANAnP,KAAK0uC,cAAcD,EAAmBv/B,EAAao9B,QAASD,EAAcgC,EAAoB,SAAU1+B,GACtG,MAAQA,GAAKqD,KAAK9C,MAAQo+B,GAAc3+B,EAAKqD,KAAK9C,MAAQq+B,IAK/B,GAAzBvuC,KAAKwsC,iBAEP,IADAxsC,KAAKwsC,kBAAmB,EACnBjnC,EAAI,EAAGA,EAAI2J,EAAaq9B,MAAM7mC,OAAQH,IACzCvF,KAAKwuC,6BAA6Bt/B,EAAaq9B,MAAMhnC,GAAI8mC,EAAcgC,EAAoBrY,OAG1F,CAEH,GAAI2Y,GAAkBhuC,EAAKsO,mBAAmBC,EAAaq9B,MAAOp9B,EAAgB,OAAO,MAGzFnP,MAAK0uC,cAAcC,EAAiBz/B,EAAaq9B,MAAOF,EAAcgC,EAAoB,SAAU1+B,GAClG,MAAQA,GAAKqD,KAAK7C,IAAMm+B,GAAc3+B,EAAKqD,KAAK7C,IAAMo+B,IAM1D,IAAKhpC,EAAI,EAAGA,EAAI8mC,EAAa3mC,OAAQH,IACnCoK,EAAO08B,EAAa9mC,GACfoK,EAAKw9B,WAAWx9B,EAAKg4B,OAE1Bh4B,EAAKi/B,aAgBP,OAAOvC,IAGTzpC,EAAM6Q,UAAUi7B,cAAgB,SAAUG,EAAY5sC,EAAOoqC,EAAcgC,EAAoBS,GAC7F,GAAIn/B,GACApK,CAEJ,IAAkB,IAAdspC,EAAkB,CACpB,IAAKtpC,EAAIspC,EAAYtpC,GAAK,IACxBoK,EAAO1N,EAAMsD,IACTupC,EAAen/B,IAFQpK,IAMWgB,SAAhC8nC,EAAmB1+B,EAAKtP,MAC1BguC,EAAmB1+B,EAAKtP,KAAM,EAC9BgsC,EAAankC,KAAKyH,GAKxB,KAAKpK,EAAIspC,EAAa,EAAGtpC,EAAItD,EAAMyD,SACjCiK,EAAO1N,EAAMsD,IACTupC,EAAen/B,IAFsBpK,IAMHgB,SAAhC8nC,EAAmB1+B,EAAKtP,MAC1BguC,EAAmB1+B,EAAKtP,KAAM,EAC9BgsC,EAAankC,KAAKyH,MAmB5B/M,EAAM6Q,UAAUo6B,gBAAkB,SAASl+B,EAAM08B,EAAcrW,GACvDrmB,EAAKo/B,UAAU/Y,IACZrmB,EAAKw9B,WAAWx9B,EAAKg4B,OAE1Bh4B,EAAKi/B,cACLvC,EAAankC,KAAKyH,IAGdA,EAAKw9B,WAAWx9B,EAAK+3B,QAgB/B9kC,EAAM6Q,UAAU+6B,6BAA+B,SAAS7+B,EAAM08B,EAAcgC,EAAoBrY,GAC1FrmB,EAAKo/B,UAAU/Y,GACmBzvB,SAAhC8nC,EAAmB1+B,EAAKtP,MAC1BguC,EAAmB1+B,EAAKtP,KAAM,EAC9BgsC,EAAankC,KAAKyH,IAIhBA,EAAKw9B,WAAWx9B,EAAK+3B,QAM7B7nC,EAAOD,QAAUgD,GAKb,SAAS/C,EAAQD,EAASM,GAW9B,QAAS2C,GAAiB+0B,EAAS5kB,EAAMojB,GACvCxzB,EAAMrC,KAAKP,KAAM43B,EAAS5kB,EAAMojB,GAEhCp2B,KAAK6S,MAAQ,EACb7S,KAAK8S,OAAS,EACd9S,KAAK4H,IAAM,EACX5H,KAAKwH,KAAO,EAfd,GACI5E,IADO1C,EAAoB,GACnBA,EAAoB,IAiBhC2C,GAAgB4Q,UAAYnN,OAAOqI,OAAO/L,EAAM6Q,WAShD5Q,EAAgB4Q,UAAUuO,OAAS,SAASgU,EAAO/b,GACjD,GAAIuqB,IAAU,CAEdxkC,MAAKqsC,aAAersC,KAAK+sC,oBAAoB/sC,KAAKkP,aAAclP,KAAKqsC,aAAcrW,GAGnFh2B,KAAK6S,MAAQ7S,KAAKswB,IAAIxkB,WAAW6kB,YAGjC3wB,KAAKswB,IAAIxkB,WAAW0B,MAAMsF,OAAU,GAGpC,KAAK,GAAIvN,GAAI,EAAGgoC,EAAKvtC,KAAKqsC,aAAa3mC,OAAY6nC,EAAJhoC,EAAQA,IAAK,CAC1D,GAAIoK,GAAO3P,KAAKqsC,aAAa9mC,EAC7BoK,GAAK69B,YAAYvzB,GAGnB,MAAOuqB,IAMT3hC,EAAgB4Q,UAAUk0B,KAAO,WAC1B3nC,KAAKswB,IAAIxkB,WAAWhC,YACvB9J,KAAKo2B,QAAQ9F,IAAIxkB,WAAWiG,YAAY/R,KAAKswB,IAAIxkB,aAIrDjM,EAAOD,QAAUiD,GAKb,SAAShD,EAAQD,EAASM,GA2B9B,QAAS4C,GAAQoyB,EAAMnmB,GACrB/O,KAAKk1B,KAAOA,EAEZl1B,KAAK40B,gBACH/tB,KAAM,KACNiuB,YAAa,SACbka,MAAO,OACPltC,OAAO,EACPmtC,WAAY,KAEZC,YAAY,EACZC,UACEC,YAAY,EACZ5H,aAAa,EACbj0B,KAAK,EACLqD,QAAQ,GAGVy4B,MAAO,SAAU1/B,EAAMnH,GACrBA,EAASmH,IAEX2/B,SAAU,SAAU3/B,EAAMnH,GACxBA,EAASmH,IAEX4/B,OAAQ,SAAU5/B,EAAMnH,GACtBA,EAASmH,IAEX6/B,SAAU,SAAU7/B,EAAMnH,GACxBA,EAASmH,IAEX8/B,SAAU,SAAU9/B,EAAMnH,GACxBA,EAASmH,IAGXsK,QACEtK,MACEoW,WAAY,GACZC,SAAU,IAEZwb,KAAM,IAERjd,QAAS,GAIXvkB,KAAK+O,QAAUpO,EAAK0E,UAAWrF,KAAK40B,gBAGpC50B,KAAK0vC,aACH7oC,MAAOqJ,MAAO,OAAQC,IAAK,SAG7BnQ,KAAK06B,YACHlF,SAAUN,EAAKv0B,KAAK60B,SACpBI,OAAQV,EAAKv0B,KAAKi1B,QAEpB51B,KAAKswB,OACLtwB,KAAK+F,SACL/F,KAAK8D,OAAS,IAEd,IAAI2Q,GAAKzU,IACTA,MAAKq2B,UAAY,KACjBr2B,KAAKs2B,WAAa,KAGlBt2B,KAAK2vC,eACHp8B,IAAO,SAAU/J,EAAO4K,GACtBK,EAAGm7B,OAAOx7B,EAAOnS,QAEnBkT,OAAU,SAAU3L,EAAO4K,GACzBK,EAAGo7B,UAAUz7B,EAAOnS,QAEtB2U,OAAU,SAAUpN,EAAO4K,GACzBK,EAAGq7B,UAAU17B,EAAOnS,SAKxBjC,KAAK+vC,gBACHx8B,IAAO,SAAU/J,EAAO4K,GACtBK,EAAGu7B,aAAa57B,EAAOnS,QAEzBkT,OAAU,SAAU3L,EAAO4K,GACzBK,EAAGw7B,gBAAgB77B,EAAOnS,QAE5B2U,OAAU,SAAUpN,EAAO4K,GACzBK,EAAGy7B,gBAAgB97B,EAAOnS,SAI9BjC,KAAKiC,SACLjC,KAAK00B,UACL10B,KAAKmwC,YAELnwC,KAAKowC,aACLpwC,KAAKqwC,YAAa,EAElBrwC,KAAKswC,eAGLtwC,KAAKi1B,UAELj1B,KAAKwT,WAAWzE,GA/HlB,GAAIu2B,GAASplC,EAAoB,IAC7BS,EAAOT,EAAoB,GAC3BW,EAAUX,EAAoB,GAC9BY,EAAWZ,EAAoB,GAC/BqC,EAAYrC,EAAoB,IAChC0C,EAAQ1C,EAAoB,IAC5B2C,EAAkB3C,EAAoB,IACtCkC,EAAUlC,EAAoB,IAC9BmC,EAAYnC,EAAoB,IAChCoC,EAAYpC,EAAoB,IAChCiC,EAAiBjC,EAAoB,IAGrCqwC,EAAY,gBACZC,EAAa,gBAoHjB1tC,GAAQ2Q,UAAY,GAAIlR,GAGxBO,EAAQ2U,OACN3L,WAAY3J,EACZsuC,IAAKruC,EACL4zB,MAAO1zB,EACPkQ,MAAOnQ,GAMTS,EAAQ2Q,UAAUwhB,QAAU,WAC1B,GAAIpV,GAAQhO,SAASM,cAAc,MACnC0N,GAAM9X,UAAY,UAClB8X,EAAM,oBAAsB7f,KAC5BA,KAAKswB,IAAIzQ,MAAQA,CAGjB,IAAI/T,GAAa+F,SAASM,cAAc,MACxCrG,GAAW/D,UAAY,aACvB8X,EAAM9N,YAAYjG,GAClB9L,KAAKswB,IAAIxkB,WAAaA,CAGtB,IAAI4gC,GAAa76B,SAASM,cAAc,MACxCu6B,GAAW3kC,UAAY,aACvB8X,EAAM9N,YAAY26B,GAClB1sC,KAAKswB,IAAIoc,WAAaA,CAGtB,IAAIlL,GAAO3vB,SAASM,cAAc,MAClCqvB,GAAKz5B,UAAY,OACjB/H,KAAKswB,IAAIkR,KAAOA,CAGhB,IAAIkM,GAAW77B,SAASM,cAAc,MACtCu7B,GAAS3lC,UAAY,WACrB/H,KAAKswB,IAAIod,SAAWA,EAGpB1tC,KAAK0wC,kBAGL,IAAIC,GAAkB,GAAI9tC,GAAgB2tC,EAAY,KAAMxwC,KAC5D2wC,GAAgBhJ,OAChB3nC,KAAK00B,OAAO8b,GAAcG,EAM1B3wC,KAAK8D,OAASwhC,EAAOtlC,KAAKk1B,KAAK5E,IAAI6H,iBACjC5uB,gBAAgB,IAIlBvJ,KAAK8D,OAAO+P,GAAG,QAAa7T,KAAK4+B,SAASvJ,KAAKr1B,OAC/CA,KAAK8D,OAAO+P,GAAG,YAAa7T,KAAKu+B,aAAalJ,KAAKr1B,OACnDA,KAAK8D,OAAO+P,GAAG,OAAa7T,KAAKw+B,QAAQnJ,KAAKr1B,OAC9CA,KAAK8D,OAAO+P,GAAG,UAAa7T,KAAKy+B,WAAWpJ,KAAKr1B,OAGjDA,KAAK8D,OAAO+P,GAAG,MAAQ7T,KAAK4wC,cAAcvb,KAAKr1B,OAG/CA,KAAK8D,OAAO+P,GAAG,OAAQ7T,KAAK6wC,mBAAmBxb,KAAKr1B,OAGpDA,KAAK8D,OAAO+P,GAAG,YAAa7T,KAAK8wC,WAAWzb,KAAKr1B,OAGjDA,KAAK2nC,QAmEP7kC,EAAQ2Q,UAAUD,WAAa,SAASzE,GACtC,GAAIA,EAAS,CAEX,GAAIP,IAAU,OAAQ,QAAS,cAAe,UAAW,QAAS,aAAc,aAAc,iBAAkB,WAAW,OAC3H7N,GAAKmF,gBAAgB0I,EAAQxO,KAAK+O,QAASA,GAEvC,UAAYA,KACgB,gBAAnBA,GAAQkL,QACjBja,KAAK+O,QAAQkL,OAAOunB,KAAOzyB,EAAQkL,OACnCja,KAAK+O,QAAQkL,OAAOtK,KAAKoW,WAAahX,EAAQkL,OAC9Cja,KAAK+O,QAAQkL,OAAOtK,KAAKqW,SAAWjX,EAAQkL,QAEX,gBAAnBlL,GAAQkL,SACtBtZ,EAAKmF,iBAAiB,QAAS9F,KAAK+O,QAAQkL,OAAQlL,EAAQkL,QACxD,QAAUlL,GAAQkL,SACe,gBAAxBlL,GAAQkL,OAAOtK,MACxB3P,KAAK+O,QAAQkL,OAAOtK,KAAKoW,WAAahX,EAAQkL,OAAOtK,KACrD3P,KAAK+O,QAAQkL,OAAOtK,KAAKqW,SAAWjX,EAAQkL,OAAOtK,MAEb,gBAAxBZ,GAAQkL,OAAOtK,MAC7BhP,EAAKmF,iBAAiB,aAAc,YAAa9F,KAAK+O,QAAQkL,OAAOtK,KAAMZ,EAAQkL,OAAOtK,SAM9F,YAAcZ,KACgB,iBAArBA,GAAQogC,UACjBnvC,KAAK+O,QAAQogC,SAASC,WAAcrgC,EAAQogC,SAC5CnvC,KAAK+O,QAAQogC,SAAS3H,YAAcz4B,EAAQogC,SAC5CnvC,KAAK+O,QAAQogC,SAAS57B,IAAcxE,EAAQogC,SAC5CnvC,KAAK+O,QAAQogC,SAASv4B,OAAc7H,EAAQogC,UAET,gBAArBpgC,GAAQogC,UACtBxuC,EAAKmF,iBAAiB,aAAc,cAAe,MAAO,UAAW9F,KAAK+O,QAAQogC,SAAUpgC,EAAQogC,UAKxG,IAAI4B,GAAc,SAAWv6B,GAC3B,GAAIiD,GAAK1K,EAAQyH,EACjB,IAAIiD,EAAI,CACN,KAAMA,YAAcu3B,WAClB,KAAM,IAAIptC,OAAM,UAAY4S,EAAO,uBAAyBA,EAAO,mBAErExW,MAAK+O,QAAQyH,GAAQiD,IAEtB4b,KAAKr1B,OACP,QAAS,WAAY,WAAY,SAAU,YAAYuI,QAAQwoC,GAGhE/wC,KAAKixC,cAOTnuC,EAAQ2Q,UAAUw9B,UAAY,WAC5BjxC,KAAKmwC,YACLnwC,KAAKqwC,YAAa,GAMpBvtC,EAAQ2Q,UAAUG,QAAU,WAC1B5T,KAAK0nC,OACL1nC,KAAKw2B,SAAS,MACdx2B,KAAKu2B,UAAU,MAEfv2B,KAAK8D,OAAS,KAEd9D,KAAKk1B,KAAO,KACZl1B,KAAK06B,WAAa,MAMpB53B,EAAQ2Q,UAAUi0B,KAAO,WAEnB1nC,KAAKswB,IAAIzQ,MAAM/V,YACjB9J,KAAKswB,IAAIzQ,MAAM/V,WAAW2H,YAAYzR,KAAKswB,IAAIzQ,OAI7C7f,KAAKswB,IAAIkR,KAAK13B,YAChB9J,KAAKswB,IAAIkR,KAAK13B,WAAW2H,YAAYzR,KAAKswB,IAAIkR,MAI5CxhC,KAAKswB,IAAIod,SAAS5jC,YACpB9J,KAAKswB,IAAIod,SAAS5jC,WAAW2H,YAAYzR,KAAKswB,IAAIod,WAQtD5qC,EAAQ2Q,UAAUk0B,KAAO,WAElB3nC,KAAKswB,IAAIzQ,MAAM/V,YAClB9J,KAAKk1B,KAAK5E,IAAI5D,OAAO3a,YAAY/R,KAAKswB,IAAIzQ,OAIvC7f,KAAKswB,IAAIkR,KAAK13B,YACjB9J,KAAKk1B,KAAK5E,IAAIyU,mBAAmBhzB,YAAY/R,KAAKswB,IAAIkR,MAInDxhC,KAAKswB,IAAIod,SAAS5jC,YACrB9J,KAAKk1B,KAAK5E,IAAI9oB,KAAKuK,YAAY/R,KAAKswB,IAAIod,WAW5C5qC,EAAQ2Q,UAAUwjB,aAAe,SAASxhB,GACxC,GAAIlQ,GAAGgoC,EAAIltC,EAAIsP,CAMf,KAJWpJ,QAAPkP,IAAkBA,MACjBzP,MAAMC,QAAQwP,KAAMA,GAAOA,IAG3BlQ,EAAI,EAAGgoC,EAAKvtC,KAAKowC,UAAU1qC,OAAY6nC,EAAJhoC,EAAQA,IAC9ClF,EAAKL,KAAKowC,UAAU7qC,GACpBoK,EAAO3P,KAAKiC,MAAM5B,GACdsP,GAAMA,EAAKuhC,UAKjB,KADAlxC,KAAKowC,aACA7qC,EAAI,EAAGgoC,EAAK93B,EAAI/P,OAAY6nC,EAAJhoC,EAAQA,IACnClF,EAAKoV,EAAIlQ,GACToK,EAAO3P,KAAKiC,MAAM5B,GACdsP,IACF3P,KAAKowC,UAAUloC,KAAK7H,GACpBsP,EAAKwhC,WASXruC,EAAQ2Q,UAAU0jB,aAAe,WAC/B,MAAOn3B,MAAKowC,UAAU97B,YAOxBxR,EAAQ2Q,UAAU29B,gBAAkB,WAClC,GAAIpb,GAAQh2B,KAAKk1B,KAAKc,MAAM6J,WACxBr4B,EAAQxH,KAAKk1B,KAAKv0B,KAAK60B,SAASQ,EAAM9lB,OACtC0X,EAAQ5nB,KAAKk1B,KAAKv0B,KAAK60B,SAASQ,EAAM7lB,KAEtCsF,IACJ,KAAK,GAAImiB,KAAW53B,MAAK00B,OACvB,GAAI10B,KAAK00B,OAAO7uB,eAAe+xB,GAM7B,IAAK,GALDrlB,GAAQvS,KAAK00B,OAAOkD,GACpByZ,EAAkB9+B,EAAM85B,aAInB9mC,EAAI,EAAGA,EAAI8rC,EAAgB3rC,OAAQH,IAAK,CAC/C,GAAIoK,GAAO0hC,EAAgB9rC,EAEtBoK,GAAKnI,KAAOogB,GAAWjY,EAAKnI,KAAOmI,EAAKkD,MAAQrL,GACnDiO,EAAIvN,KAAKyH,EAAKtP,IAMtB,MAAOoV,IAQT3S,EAAQ2Q,UAAU69B,UAAY,SAASjxC,GAErC,IAAK,GADD+vC,GAAYpwC,KAAKowC,UACZ7qC,EAAI,EAAGgoC,EAAK6C,EAAU1qC,OAAY6nC,EAAJhoC,EAAQA,IAC7C,GAAI6qC,EAAU7qC,IAAMlF,EAAI,CACtB+vC,EAAU9nC,OAAO/C,EAAG,EACpB,SASNzC,EAAQ2Q,UAAUuO,OAAS,WACzB,GAAI/H,GAASja,KAAK+O,QAAQkL,OACtB+b,EAAQh2B,KAAKk1B,KAAKc,MAClB5rB,EAASzJ,EAAKoJ,OAAOK,OACrB2E,EAAU/O,KAAK+O,QACf+lB,EAAc/lB,EAAQ+lB,YACtB0P,GAAU,EACV3kB,EAAQ7f,KAAKswB,IAAIzQ,MACjBsvB,EAAWpgC,EAAQogC,SAASC,YAAcrgC,EAAQogC,SAAS3H,WAG/DxnC,MAAK+F,MAAM6B,IAAM5H,KAAKk1B,KAAKC,SAASvtB,IAAIkL,OAAS9S,KAAKk1B,KAAKC,SAASppB,OAAOnE,IAC3E5H,KAAK+F,MAAMyB,KAAOxH,KAAKk1B,KAAKC,SAAS3tB,KAAKqL,MAAQ7S,KAAKk1B,KAAKC,SAASppB,OAAOvE,KAG5EqY,EAAM9X,UAAY,WAAaonC,EAAW,YAAc,IAGxD3K,EAAUxkC,KAAKuxC,gBAAkB/M,CAIjC,IAAIgN,GAAkBxb,EAAM7lB,IAAM6lB,EAAM9lB,MACpCuhC,EAAUD,GAAmBxxC,KAAK0xC,qBAAyB1xC,KAAK+F,MAAM8M,OAAS7S,KAAK+F,MAAM4rC,SAC1FF,KAAQzxC,KAAKqwC,YAAa,GAC9BrwC,KAAK0xC,oBAAsBF,EAC3BxxC,KAAK+F,MAAM4rC,UAAY3xC,KAAK+F,MAAM8M,KAElC,IAAIi6B,GAAU9sC,KAAKqwC,WACfuB,EAAa5xC,KAAK6xC,cAClBC,GACFniC,KAAMsK,EAAOtK,KACb6xB,KAAMvnB,EAAOunB,MAEXuQ,GACFpiC,KAAMsK,EAAOtK,KACb6xB,KAAMvnB,EAAOtK,KAAKqW,SAAW,GAE3BlT,EAAS,EACTkiB,EAAY/a,EAAOunB,KAAOvnB,EAAOtK,KAAKqW,QA+B1C,OA5BAhmB,MAAK00B,OAAO8b,GAAYxuB,OAAOgU,EAAO+b,EAAgBjF,GAGtDnsC,EAAK4H,QAAQvI,KAAK00B,OAAQ,SAAUniB,GAClC,GAAIy/B,GAAez/B,GAASq/B,EAAcE,EAAcC,EACpDE,EAAe1/B,EAAMyP,OAAOgU,EAAOgc,EAAalF,EACpDtI,GAAUyN,GAAgBzN,EAC1B1xB,GAAUP,EAAMO,SAElBA,EAAS7N,KAAKiI,IAAI4F,EAAQkiB,GAC1Bh1B,KAAKqwC,YAAa,EAGlBxwB,EAAMrS,MAAMsF,OAAU1I,EAAO0I,GAG7B9S,KAAK+F,MAAM8M,MAAQgN,EAAM8Q,YACzB3wB,KAAK+F,MAAM+M,OAASA,EAGpB9S,KAAKswB,IAAIkR,KAAKh0B,MAAM5F,IAAMwC,EAAuB,OAAf0qB,EAC7B90B,KAAKk1B,KAAKC,SAASvtB,IAAIkL,OAAS9S,KAAKk1B,KAAKC,SAASppB,OAAOnE,IAC1D5H,KAAKk1B,KAAKC,SAASvtB,IAAIkL,OAAS9S,KAAKk1B,KAAKC,SAASgD,gBAAgBrlB,QACxE9S,KAAKswB,IAAIkR,KAAKh0B,MAAMhG,KAAO,IAG3Bg9B,EAAUxkC,KAAKukC,cAAgBC,GAUjC1hC,EAAQ2Q,UAAUo+B,YAAc,WAC9B,GAAIK,GAA+C,OAA5BlyC,KAAK+O,QAAQ+lB,YAAwB,EAAK90B,KAAKmwC,SAASzqC,OAAS,EACpFysC,EAAenyC,KAAKmwC,SAAS+B,GAC7BN,EAAa5xC,KAAK00B,OAAOyd,IAAiBnyC,KAAK00B,OAAO6b,EAE1D,OAAOqB,IAAc,MAQvB9uC,EAAQ2Q,UAAUi9B,iBAAmB,WACnC,CAAA,GAEI/gC,GAAMkG,EAFNu8B,EAAYpyC,KAAK00B,OAAO6b,EACXvwC,MAAK00B,OAAO8b,GAG7B,GAAIxwC,KAAKs2B,YAEP,GAAI8b,EAAW,CACbA,EAAU1K,aACH1nC,MAAK00B,OAAO6b,EAEnB,KAAK16B,IAAU7V,MAAKiC,MAClB,GAAIjC,KAAKiC,MAAM4D,eAAegQ,GAAS,CACrClG,EAAO3P,KAAKiC,MAAM4T,GAClBlG,EAAKm1B,QAAUn1B,EAAKm1B,OAAOluB,OAAOjH,EAClC,IAAIioB,GAAU53B,KAAKqyC,YAAY1iC,EAAKqD,MAChCT,EAAQvS,KAAK00B,OAAOkD,EACxBrlB,IAASA,EAAMgB,IAAI5D,IAASA,EAAK+3B,aAOvC,KAAK0K,EAAW,CACd,GAAI/xC,GAAK,KACL2S,EAAO,IACXo/B,GAAY,GAAIxvC,GAAMvC,EAAI2S,EAAMhT,MAChCA,KAAK00B,OAAO6b,GAAa6B,CAEzB,KAAKv8B,IAAU7V,MAAKiC,MACdjC,KAAKiC,MAAM4D,eAAegQ,KAC5BlG,EAAO3P,KAAKiC,MAAM4T,GAClBu8B,EAAU7+B,IAAI5D,GAIlByiC,GAAUzK,SAShB7kC,EAAQ2Q,UAAU6+B,YAAc,WAC9B,MAAOtyC,MAAKswB,IAAIod,UAOlB5qC,EAAQ2Q,UAAU+iB,SAAW,SAASv0B,GACpC,GACIwT,GADAhB,EAAKzU,KAELuyC,EAAevyC,KAAKq2B,SAGxB,IAAKp0B,EAGA,CAAA,KAAIA,YAAiBpB,IAAWoB,YAAiBnB,IAIpD,KAAM,IAAIsF,WAAU,kDAHpBpG,MAAKq2B,UAAYp0B,MAHjBjC,MAAKq2B,UAAY,IAoBnB,IAXIkc,IAEF5xC,EAAK4H,QAAQvI,KAAK2vC,cAAe,SAAUnnC,EAAUgB,GACnD+oC,EAAav+B,IAAIxK,EAAOhB,KAI1BiN,EAAM88B,EAAan8B,SACnBpW,KAAK8vC,UAAUr6B,IAGbzV,KAAKq2B,UAAW,CAElB,GAAIh2B,GAAKL,KAAKK,EACdM,GAAK4H,QAAQvI,KAAK2vC,cAAe,SAAUnnC,EAAUgB,GACnDiL,EAAG4hB,UAAUxiB,GAAGrK,EAAOhB,EAAUnI,KAInCoV,EAAMzV,KAAKq2B,UAAUjgB,SACrBpW,KAAK4vC,OAAOn6B,GAGZzV,KAAK0wC,qBAQT5tC,EAAQ2Q,UAAU++B,SAAW,WAC3B,MAAOxyC,MAAKq2B,WAOdvzB,EAAQ2Q,UAAU8iB,UAAY,SAAS7B,GACrC,GACIjf,GADAhB,EAAKzU,IAgBT,IAZIA,KAAKs2B,aACP31B,EAAK4H,QAAQvI,KAAK+vC,eAAgB,SAAUvnC,EAAUgB,GACpDiL,EAAG6hB,WAAWpiB,YAAY1K,EAAOhB,KAInCiN,EAAMzV,KAAKs2B,WAAWlgB,SACtBpW,KAAKs2B,WAAa,KAClBt2B,KAAKkwC,gBAAgBz6B,IAIlBif,EAGA,CAAA,KAAIA,YAAkB7zB,IAAW6zB,YAAkB5zB,IAItD,KAAM,IAAIsF,WAAU,kDAHpBpG,MAAKs2B,WAAa5B,MAHlB10B,MAAKs2B,WAAa,IASpB,IAAIt2B,KAAKs2B,WAAY,CAEnB,GAAIj2B,GAAKL,KAAKK,EACdM,GAAK4H,QAAQvI,KAAK+vC,eAAgB,SAAUvnC,EAAUgB,GACpDiL,EAAG6hB,WAAWziB,GAAGrK,EAAOhB,EAAUnI,KAIpCoV,EAAMzV,KAAKs2B,WAAWlgB,SACtBpW,KAAKgwC,aAAav6B,GAIpBzV,KAAK0wC,mBAGL1wC,KAAKyyC,SAELzyC,KAAKk1B,KAAKE,QAAQhH,KAAK,UAAW1a,OAAO,KAO3C5Q,EAAQ2Q,UAAUi/B,UAAY,WAC5B,MAAO1yC,MAAKs2B,YAOdxzB,EAAQ2Q,UAAUw6B,WAAa,SAAS5tC,GACtC,GAAIsP,GAAO3P,KAAKq2B,UAAU7gB,IAAInV,GAC1Bi3B,EAAUt3B,KAAKq2B,UAAUhgB,YAEzB1G,IAEF3P,KAAK+O,QAAQygC,SAAS7/B,EAAM,SAAUA,GAChCA,GAGF2nB,EAAQ1gB,OAAOvW,MAYvByC,EAAQ2Q,UAAUk/B,SAAW,SAAUvb,GACrC,MAAOA,GAASvwB,MAAQ7G,KAAK+O,QAAQlI,OAASuwB,EAASjnB,IAAM,QAAU,QAUzErN,EAAQ2Q,UAAU4+B,YAAc,SAAUjb,GACxC,GAAIvwB,GAAO7G,KAAK2yC,SAASvb,EACzB,OAAY,cAARvwB,GAA0CN,QAAlB6wB,EAAS7kB,MAC7Bi+B,EAGCxwC,KAAKs2B,WAAac,EAAS7kB,MAAQg+B,GAS9CztC,EAAQ2Q,UAAUo8B,UAAY,SAASp6B,GACrC,GAAIhB,GAAKzU,IAETyV,GAAIlN,QAAQ,SAAUlI,GACpB,GAAI+2B,GAAW3iB,EAAG4hB,UAAU7gB,IAAInV,EAAIoU,EAAGi7B,aACnC//B,EAAO8E,EAAGxS,MAAM5B,GAChBwG,EAAO4N,EAAGk+B,SAASvb,GAEnB/wB,EAAcvD,EAAQ2U,MAAM5Q,EAchC,IAZI8I,IAEGtJ,GAAiBsJ,YAAgBtJ,GAMpCoO,EAAGc,YAAY5F,EAAMynB,IAJrB3iB,EAAGm+B,YAAYjjC,GACfA,EAAO,QAONA,EAAM,CAET,IAAItJ,EAKC,KAEG,IAAID,WAFK,iBAARS,EAEa,4HAIA,sBAAwBA,EAAO,IAVnD8I,GAAO,GAAItJ,GAAY+wB,EAAU3iB,EAAGimB,WAAYjmB,EAAG1F,SACnDY,EAAKtP,GAAKA,EACVoU,EAAGC,SAAS/E,MAalB3P,KAAKyyC,SACLzyC,KAAKqwC,YAAa,EAClBrwC,KAAKk1B,KAAKE,QAAQhH,KAAK,UAAW1a,OAAO,KAQ3C5Q,EAAQ2Q,UAAUm8B,OAAS9sC,EAAQ2Q,UAAUo8B,UAO7C/sC,EAAQ2Q,UAAUq8B,UAAY,SAASr6B,GACrC,GAAI8B,GAAQ,EACR9C,EAAKzU,IACTyV,GAAIlN,QAAQ,SAAUlI,GACpB,GAAIsP,GAAO8E,EAAGxS,MAAM5B,EAChBsP,KACF4H,IACA9C,EAAGm+B,YAAYjjC,MAIf4H,IAEFvX,KAAKyyC,SACLzyC,KAAKqwC,YAAa,EAClBrwC,KAAKk1B,KAAKE,QAAQhH,KAAK,UAAW1a,OAAO,MAQ7C5Q,EAAQ2Q,UAAUg/B,OAAS,WAGzB9xC,EAAK4H,QAAQvI,KAAK00B,OAAQ,SAAUniB,GAClCA,EAAMwD,WASVjT,EAAQ2Q,UAAUw8B,gBAAkB,SAASx6B,GAC3CzV,KAAKgwC,aAAav6B,IAQpB3S,EAAQ2Q,UAAUu8B,aAAe,SAASv6B,GACxC,GAAIhB,GAAKzU,IAETyV,GAAIlN,QAAQ,SAAUlI,GACpB,GAAI0rC,GAAYt3B,EAAG6hB,WAAW9gB,IAAInV,GAC9BkS,EAAQkC,EAAGigB,OAAOr0B,EAEtB,IAAKkS,EA6BHA,EAAMgG,QAAQwzB,OA7BJ,CAEV,GAAI1rC,GAAMkwC,GAAalwC,GAAMmwC,EAC3B,KAAM,IAAI5sC,OAAM,qBAAuBvD,EAAK,qBAG9C,IAAIwyC,GAAevsC,OAAOqI,OAAO8F,EAAG1F,QACpCpO,GAAK0E,OAAOwtC,GACV//B,OAAQ,OAGVP,EAAQ,GAAI3P,GAAMvC,EAAI0rC,EAAWt3B,GACjCA,EAAGigB,OAAOr0B,GAAMkS,CAGhB,KAAK,GAAIsD,KAAUpB,GAAGxS,MACpB,GAAIwS,EAAGxS,MAAM4D,eAAegQ,GAAS,CACnC,GAAIlG,GAAO8E,EAAGxS,MAAM4T,EAChBlG,GAAKqD,KAAKT,OAASlS,GACrBkS,EAAMgB,IAAI5D,GAKhB4C,EAAMwD,QACNxD,EAAMo1B,UAQV3nC,KAAKk1B,KAAKE,QAAQhH,KAAK,UAAW1a,OAAO,KAQ3C5Q,EAAQ2Q,UAAUy8B,gBAAkB,SAASz6B,GAC3C,GAAIif,GAAS10B,KAAK00B,MAClBjf,GAAIlN,QAAQ,SAAUlI,GACpB,GAAIkS,GAAQmiB,EAAOr0B,EAEfkS,KACFA,EAAMm1B,aACChT,GAAOr0B,MAIlBL,KAAKixC,YAELjxC,KAAKk1B,KAAKE,QAAQhH,KAAK,UAAW1a,OAAO,KAQ3C5Q,EAAQ2Q,UAAU89B,aAAe,WAC/B,GAAIvxC,KAAKs2B,WAAY,CAEnB,GAAI6Z,GAAWnwC,KAAKs2B,WAAWlgB,QAC7BL,MAAO/V,KAAK+O,QAAQkgC,aAGlBvP,GAAW/+B,EAAKgG,WAAWwpC,EAAUnwC,KAAKmwC,SAC9C,IAAIzQ,EAAS,CAEX,GAAIhL,GAAS10B,KAAK00B,MAClByb,GAAS5nC,QAAQ,SAAUqvB,GACzBlD,EAAOkD,GAAS8P,SAIlByI,EAAS5nC,QAAQ,SAAUqvB,GACzBlD,EAAOkD,GAAS+P,SAGlB3nC,KAAKmwC,SAAWA,EAGlB,MAAOzQ,GAGP,OAAO,GASX58B,EAAQ2Q,UAAUiB,SAAW,SAAS/E,GACpC3P,KAAKiC,MAAM0N,EAAKtP,IAAMsP,CAGtB,IAAIioB,GAAU53B,KAAKqyC,YAAY1iC,EAAKqD,MAChCT,EAAQvS,KAAK00B,OAAOkD,EACpBrlB,IAAOA,EAAMgB,IAAI5D,IASvB7M,EAAQ2Q,UAAU8B,YAAc,SAAS5F,EAAMynB,GAC7C,GAAI0b,GAAanjC,EAAKqD,KAAKT,KAM3B,IAHA5C,EAAK4I,QAAQ6e,GAGT0b,GAAcnjC,EAAKqD,KAAKT,MAAO,CACjC,GAAIwgC,GAAW/yC,KAAK00B,OAAOoe,EACvBC,IAAUA,EAASn8B,OAAOjH,EAE9B,IAAIioB,GAAU53B,KAAKqyC,YAAY1iC,EAAKqD,MAChCT,EAAQvS,KAAK00B,OAAOkD,EACpBrlB,IAAOA,EAAMgB,IAAI5D,KAUzB7M,EAAQ2Q,UAAUm/B,YAAc,SAASjjC,GAEvCA,EAAK+3B,aAGE1nC,MAAKiC,MAAM0N,EAAKtP,GAGvB,IAAIgI,GAAQrI,KAAKowC,UAAU1pC,QAAQiJ,EAAKtP,GAC3B,KAATgI,GAAarI,KAAKowC,UAAU9nC,OAAOD,EAAO,GAG9CsH,EAAKm1B,QAAUn1B,EAAKm1B,OAAOluB,OAAOjH,IASpC7M,EAAQ2Q,UAAUu/B,qBAAuB,SAAStqC,GAGhD,IAAK,GAFDylC,MAEK5oC,EAAI,EAAGA,EAAImD,EAAMhD,OAAQH,IAC5BmD,EAAMnD,YAAcjD,IACtB6rC,EAASjmC,KAAKQ,EAAMnD,GAGxB,OAAO4oC,IAYTrrC,EAAQ2Q,UAAUmrB,SAAW,SAAUp1B,GAErCxJ,KAAKswC,YAAY3gC,KAAO7M,EAAQmwC,eAAezpC,IAQjD1G,EAAQ2Q,UAAU8qB,aAAe,SAAU/0B,GACzC,GAAKxJ,KAAK+O,QAAQogC,SAASC,YAAepvC,KAAK+O,QAAQogC,SAAS3H,YAAhE,CAIA,GAEIzhC,GAFA4J,EAAO3P,KAAKswC,YAAY3gC,MAAQ,KAChC8E,EAAKzU,IAGT,IAAI2P,GAAQA,EAAKujC,SAAU,CACzB,GAAIC,GAAe3pC,EAAMG,OAAOwpC,aAC5BC,EAAgB5pC,EAAMG,OAAOypC,aAE7BD,IACFptC,GACE4J,KAAMwjC,EACNE,SAAU7pC,EAAMy2B,QAAQvT,OAAOxP,SAG7BzI,EAAG1F,QAAQogC,SAASC,aACtBrpC,EAAMmK,MAAQP,EAAKqD,KAAK9C,MAAMnJ,WAE5B0N,EAAG1F,QAAQogC,SAAS3H,aAClB,SAAW73B,GAAKqD,OAAMjN,EAAMwM,MAAQ5C,EAAKqD,KAAKT,OAGpDvS,KAAKswC,YAAYgD,WAAavtC,IAEvBqtC,GACPrtC,GACE4J,KAAMyjC,EACNC,SAAU7pC,EAAMy2B,QAAQvT,OAAOxP,SAG7BzI,EAAG1F,QAAQogC,SAASC,aACtBrpC,EAAMoK,IAAMR,EAAKqD,KAAK7C,IAAIpJ,WAExB0N,EAAG1F,QAAQogC,SAAS3H,aAClB,SAAW73B,GAAKqD,OAAMjN,EAAMwM,MAAQ5C,EAAKqD,KAAKT,OAGpDvS,KAAKswC,YAAYgD,WAAavtC,IAG9B/F,KAAKswC,YAAYgD,UAAYtzC,KAAKm3B,eAAevpB,IAAI,SAAUvN,GAC7D,GAAIsP,GAAO8E,EAAGxS,MAAM5B,GAChB0F,GACF4J,KAAMA,EACN0jC,SAAU7pC,EAAMy2B,QAAQvT,OAAOxP,QAWjC,OARIzI,GAAG1F,QAAQogC,SAASC,aAClB,SAAWz/B,GAAKqD,OAAMjN,EAAMmK,MAAQP,EAAKqD,KAAK9C,MAAMnJ,WACpD,OAAS4I,GAAKqD,OAAQjN,EAAMoK,IAAMR,EAAKqD,KAAK7C,IAAIpJ,YAElD0N,EAAG1F,QAAQogC,SAAS3H,aAClB,SAAW73B,GAAKqD,OAAMjN,EAAMwM,MAAQ5C,EAAKqD,KAAKT,OAG7CxM,IAIXyD,EAAMm8B,qBASV7iC,EAAQ2Q,UAAU+qB,QAAU,SAAUh1B,GAGpC,GAFAA,EAAMD,iBAEFvJ,KAAKswC,YAAYgD,UAAW,CAC9B,GAAI7+B,GAAKzU,KACLu1B,EAAOv1B,KAAKk1B,KAAKv0B,KAAK40B,MAAQ,KAC9BpL,EAAUnqB,KAAKk1B,KAAK5E,IAAI5wB,KAAK4tC,WAAattC,KAAKk1B,KAAKC,SAAS3tB,KAAKqL,KAGtE7S,MAAKswC,YAAYgD,UAAU/qC,QAAQ,SAAUxC,GAC3C,GAAIwtC,MACAnZ,EAAU3lB,EAAGygB,KAAKv0B,KAAKi1B,OAAOpsB,EAAMy2B,QAAQvT,OAAOxP,QAAUiN,GAC7DqpB,EAAU/+B,EAAGygB,KAAKv0B,KAAKi1B,OAAO7vB,EAAMstC,SAAWlpB,GAC/CD,EAASkQ,EAAUoZ,CAEvB,IAAI,SAAWztC,GAAO,CACpB,GAAImK,GAAQ,GAAI7L,MAAK0B,EAAMmK,MAAQga,EACnCqpB,GAASrjC,MAAQqlB,EAAOA,EAAKrlB,GAASA,EAGxC,GAAI,OAASnK,GAAO,CAClB,GAAIoK,GAAM,GAAI9L,MAAK0B,EAAMoK,IAAM+Z,EAC/BqpB,GAASpjC,IAAMolB,EAAOA,EAAKplB,GAAOA,EAGpC,GAAI,SAAWpK,GAAO,CAEpB,GAAIwM,GAAQzP,EAAQ2wC,gBAAgBjqC,EACpC+pC,GAAShhC,MAAQA,GAASA,EAAMqlB,QAIlC,GAAIR,GAAWz2B,EAAK0E,UAAWU,EAAM4J,KAAKqD,KAAMugC,EAChD9+B,GAAG1F,QAAQ0gC,SAASrY,EAAU,SAAUA,GAClCA,GACF3iB,EAAGi/B,iBAAiB3tC,EAAM4J,KAAMynB,OAKtCp3B,KAAKqwC,YAAa,EAClBrwC,KAAKk1B,KAAKE,QAAQhH,KAAK,UAEvB5kB,EAAMm8B,oBAUV7iC,EAAQ2Q,UAAUigC,iBAAmB,SAAS/jC,EAAM5J,GAE9C,SAAWA,KAAO4J,EAAKqD,KAAK9C,MAAQnK,EAAMmK,OAC1C,OAASnK,KAAS4J,EAAKqD,KAAK7C,IAAQpK,EAAMoK,KAC1C,SAAWpK,IAAS4J,EAAKqD,KAAKT,OAASxM,EAAMwM,OAC/CvS,KAAK2zC,aAAahkC,EAAM5J,EAAMwM,QAUlCzP,EAAQ2Q,UAAUkgC,aAAe,SAAShkC,EAAMioB,GAC9C,GAAIrlB,GAAQvS,KAAK00B,OAAOkD,EACxB,IAAIrlB,GAASA,EAAMqlB,SAAWjoB,EAAKqD,KAAKT,MAAO,CAC7C,GAAIwgC,GAAWpjC,EAAKm1B,MACpBiO,GAASn8B,OAAOjH,GAChBojC,EAASh9B,QACTxD,EAAMgB,IAAI5D,GACV4C,EAAMwD,QAENpG,EAAKqD,KAAKT,MAAQA,EAAMqlB,UAS5B90B,EAAQ2Q,UAAUgrB,WAAa,SAAUj1B,GAGvC,GAFAA,EAAMD,iBAEFvJ,KAAKswC,YAAYgD,UAAW,CAE9B,GAAIM,MACAn/B,EAAKzU,KACLs3B,EAAUt3B,KAAKq2B,UAAUhgB,aAEzBi9B,EAAYtzC,KAAKswC,YAAYgD,SACjCtzC,MAAKswC,YAAYgD,UAAY,KAC7BA,EAAU/qC,QAAQ,SAAUxC,GAC1B,GAAI1F,GAAK0F,EAAM4J,KAAKtP,GAChB+2B,EAAW3iB,EAAG4hB,UAAU7gB,IAAInV,EAAIoU,EAAGi7B,aAEnChQ,GAAU,CACV,UAAW35B,GAAM4J,KAAKqD,OACxB0sB,EAAW35B,EAAMmK,OAASnK,EAAM4J,KAAKqD,KAAK9C,MAAMnJ,UAChDqwB,EAASlnB,MAAQvP,EAAKiG,QAAQb,EAAM4J,KAAKqD,KAAK9C,MACtConB,EAAQrkB,SAASpM,MAAQywB,EAAQrkB,SAASpM,KAAKqJ,OAAS,SAE9D,OAASnK,GAAM4J,KAAKqD,OACtB0sB,EAAUA,GAAa35B,EAAMoK,KAAOpK,EAAM4J,KAAKqD,KAAK7C,IAAIpJ,UACxDqwB,EAASjnB,IAAMxP,EAAKiG,QAAQb,EAAM4J,KAAKqD,KAAK7C,IACpCmnB,EAAQrkB,SAASpM,MAAQywB,EAAQrkB,SAASpM,KAAKsJ,KAAO,SAE5D,SAAWpK,GAAM4J,KAAKqD,OACxB0sB,EAAUA,GAAa35B,EAAMwM,OAASxM,EAAM4J,KAAKqD,KAAKT,MACtD6kB,EAAS7kB,MAAQxM,EAAM4J,KAAKqD,KAAKT,OAI/BmtB,GACFjrB,EAAG1F,QAAQwgC,OAAOnY,EAAU,SAAUA,GAChCA,GAEFA,EAASE,EAAQnkB,UAAY9S,EAC7BuzC,EAAQ1rC,KAAKkvB,KAIb3iB,EAAGi/B,iBAAiB3tC,EAAM4J,KAAM5J,GAEhC0O,EAAG47B,YAAa,EAChB57B,EAAGygB,KAAKE,QAAQhH,KAAK,eAOzBwlB,EAAQluC,QACV4xB,EAAQniB,OAAOy+B,GAGjBpqC,EAAMm8B,oBASV7iC,EAAQ2Q,UAAUm9B,cAAgB,SAAUpnC,GAC1C,GAAKxJ,KAAK+O,QAAQmgC,WAAlB,CAEA,GAAI2E,GAAWrqC,EAAMy2B,QAAQ6T,UAAYtqC,EAAMy2B,QAAQ6T,SAASD,QAC5DE,EAAWvqC,EAAMy2B,QAAQ6T,UAAYtqC,EAAMy2B,QAAQ6T,SAASC,QAChE,IAAIF,GAAWE,EAEb,WADA/zC,MAAK6wC,mBAAmBrnC,EAI1B,IAAIwqC,GAAeh0C,KAAKm3B,eAEpBxnB,EAAO7M,EAAQmwC,eAAezpC,GAC9B4mC,EAAYzgC,GAAQA,EAAKtP,MAC7BL,MAAKi3B,aAAamZ,EAElB,IAAI6D,GAAej0C,KAAKm3B,gBAIpB8c,EAAavuC,OAAS,GAAKsuC,EAAatuC,OAAS,IACnD1F,KAAKk1B,KAAKE,QAAQhH,KAAK,UACrBnsB,MAAOgyC,MAUbnxC,EAAQ2Q,UAAUq9B,WAAa,SAAUtnC,GACvC,GAAKxJ,KAAK+O,QAAQmgC,YACblvC,KAAK+O,QAAQogC,SAAS57B,IAA3B,CAEA,GAAIkB,GAAKzU,KACLu1B,EAAOv1B,KAAKk1B,KAAKv0B,KAAK40B,MAAQ,KAC9B5lB,EAAO7M,EAAQmwC,eAAezpC,EAElC,IAAImG,EAAM,CAIR,GAAIynB,GAAW3iB,EAAG4hB,UAAU7gB,IAAI7F,EAAKtP,GACrCL,MAAK+O,QAAQugC,SAASlY,EAAU,SAAUA,GACpCA,GACF3iB,EAAG4hB,UAAUhgB,aAAalB,OAAOiiB,SAIlC,CAEH,GAAI8c,GAAOvzC,EAAK0G,gBAAgBrH,KAAKswB,IAAIzQ,OACrCxN,EAAI7I,EAAMy2B,QAAQvT,OAAOsS,MAAQkV,EACjChkC,EAAQlQ,KAAKk1B,KAAKv0B,KAAKi1B,OAAOvjB,GAC9B8hC,GACFjkC,MAAOqlB,EAAOA,EAAKrlB,GAASA,EAC5BigB,QAAS,WAIX,IAA0B,UAAtBnwB,KAAK+O,QAAQlI,KAAkB,CACjC,GAAIsJ,GAAMnQ,KAAKk1B,KAAKv0B,KAAKi1B,OAAOvjB,EAAIrS,KAAK+F,MAAM8M,MAAQ,EACvDshC,GAAQhkC,IAAMolB,EAAOA,EAAKplB,GAAOA,EAGnCgkC,EAAQn0C,KAAKq2B,UAAUljB,UAAYxS,EAAKoE,YAExC,IAAIwN,GAAQzP,EAAQ2wC,gBAAgBjqC,EAChC+I,KACF4hC,EAAQ5hC,MAAQA,EAAMqlB,SAIxB53B,KAAK+O,QAAQsgC,MAAM8E,EAAS,SAAUxkC,GAChCA,GACF8E,EAAG4hB,UAAUhgB,aAAa9C,IAAI5D,QAYtC7M,EAAQ2Q,UAAUo9B,mBAAqB,SAAUrnC,GAC/C,GAAKxJ,KAAK+O,QAAQmgC,WAAlB,CAEA,GAAIkB,GACAzgC,EAAO7M,EAAQmwC,eAAezpC,EAElC,IAAImG,EAAM,CAERygC,EAAYpwC,KAAKm3B,cAEjB,IAAI4c,GAAWvqC,EAAMy2B,QAAQW,QAAQ,IAAMp3B,EAAMy2B,QAAQW,QAAQ,GAAGmT,WAAY,CAChF,IAAIA,EAAU,CAIZ3D,EAAUloC,KAAKyH,EAAKtP,GACpB,IAAI21B,GAAQlzB,EAAQsxC,cAAcp0C,KAAKq2B,UAAU7gB,IAAI46B,EAAWpwC,KAAK0vC,aAGrEU,KACA,KAAK,GAAI/vC,KAAML,MAAKiC,MAClB,GAAIjC,KAAKiC,MAAM4D,eAAexF,GAAK,CACjC,GAAIg0C,GAAQr0C,KAAKiC,MAAM5B,GACnB6P,EAAQmkC,EAAMrhC,KAAK9C,MACnBC,EAA0B5J,SAAnB8tC,EAAMrhC,KAAK7C,IAAqBkkC,EAAMrhC,KAAK7C,IAAMD,CAExDA,IAAS8lB,EAAMvqB,KAAO0E,GAAO6lB,EAAM9oB,KACrCkjC,EAAUloC,KAAKmsC,EAAMh0C,SAKxB,CAEH,GAAIgI,GAAQ+nC,EAAU1pC,QAAQiJ,EAAKtP,GACtB,KAATgI,EAEF+nC,EAAUloC,KAAKyH,EAAKtP,IAIpB+vC,EAAU9nC,OAAOD,EAAO,GAI5BrI,KAAKi3B,aAAamZ,GAElBpwC,KAAKk1B,KAAKE,QAAQhH,KAAK,UACrBnsB,MAAOjC,KAAKm3B,oBAWlBr0B,EAAQsxC,cAAgB,SAAS/d,GAC/B,GAAInpB,GAAM,KACNzB,EAAM,IAmBV,OAjBA4qB,GAAU9tB,QAAQ,SAAUyK,IACf,MAAPvH,GAAeuH,EAAK9C,MAAQzE,KAC9BA,EAAMuH,EAAK9C,OAGG3J,QAAZyM,EAAK7C,KACI,MAAPjD,GAAe8F,EAAK7C,IAAMjD,KAC5BA,EAAM8F,EAAK7C,MAIF,MAAPjD,GAAe8F,EAAK9C,MAAQhD,KAC9BA,EAAM8F,EAAK9C,UAMfzE,IAAKA,EACLyB,IAAKA,IAUTpK,EAAQmwC,eAAiB,SAASzpC,GAEhC,IADA,GAAIG,GAASH,EAAMG,OACZA,GAAQ,CACb,GAAIA,EAAO9D,eAAe,iBACxB,MAAO8D,GAAO,gBAEhBA,GAASA,EAAOG,WAGlB,MAAO,OASThH,EAAQ2wC,gBAAkB,SAASjqC,GAEjC,IADA,GAAIG,GAASH,EAAMG,OACZA,GAAQ,CACb,GAAIA,EAAO9D,eAAe,kBACxB,MAAO8D,GAAO,iBAEhBA,GAASA,EAAOG,WAGlB,MAAO,OASThH,EAAQwxC,kBAAoB,SAAS9qC,GAEnC,IADA,GAAIG,GAASH,EAAMG,OACZA,GAAQ,CACb,GAAIA,EAAO9D,eAAe,oBACxB,MAAO8D,GAAO,mBAEhBA,GAASA,EAAOG,WAGlB,MAAO,OAGTjK,EAAOD,QAAUkD,GAKb,SAASjD,EAAQD,EAASM,GAS9B,QAAS6C,GAAOmyB,EAAMnmB,EAASwlC,EAAM1O,GACnC7lC,KAAKk1B,KAAOA,EACZl1B,KAAK40B,gBACH5lB,SAAS,EACTg3B,OAAO,EACPwO,SAAU,GACVC,YAAa,EACbjtC,MACEyhB,SAAS,EACT9E,SAAU,YAEZyD,OACEqB,SAAS,EACT9E,SAAU,aAGdnkB,KAAKu0C,KAAOA,EACZv0C,KAAK+O,QAAUpO,EAAK0E,UAAUrF,KAAK40B,gBACnC50B,KAAK6lC,iBAAmBA,EAExB7lC,KAAKinC,eACLjnC,KAAKswB,OACLtwB,KAAK00B,UACL10B,KAAKmnC,eAAiB,EACtBnnC,KAAKi1B,UAELj1B,KAAKwT,WAAWzE,GAjClB,GAAIpO,GAAOT,EAAoB,GAC3BU,EAAUV,EAAoB,GAC9BqC,EAAYrC,EAAoB,GAkCpC6C,GAAO0Q,UAAY,GAAIlR,GAEvBQ,EAAO0Q,UAAUuD,MAAQ,WACvBhX,KAAK00B,UACL10B,KAAKmnC,eAAiB,GAGxBpkC,EAAO0Q,UAAU6zB,SAAW,SAASte,EAAOue,GAErCvnC,KAAK00B,OAAO7uB,eAAemjB,KAC9BhpB,KAAK00B,OAAO1L,GAASue,GAEvBvnC,KAAKmnC,gBAAkB,GAGzBpkC,EAAO0Q,UAAU+zB,YAAc,SAASxe,EAAOue,GAC7CvnC,KAAK00B,OAAO1L,GAASue,GAGvBxkC,EAAO0Q,UAAUg0B,YAAc,SAASze,GAClChpB,KAAK00B,OAAO7uB,eAAemjB,WACtBhpB,MAAK00B,OAAO1L,GACnBhpB,KAAKmnC,gBAAkB,IAI3BpkC,EAAO0Q,UAAUwhB,QAAU,WACzBj1B,KAAKswB,IAAIzQ,MAAQhO,SAASM,cAAc,OACxCnS,KAAKswB,IAAIzQ,MAAM9X,UAAY,SAC3B/H,KAAKswB,IAAIzQ,MAAMrS,MAAM2W,SAAW,WAChCnkB,KAAKswB,IAAIzQ,MAAMrS,MAAM5F,IAAM,OAC3B5H,KAAKswB,IAAIzQ,MAAMrS,MAAMo6B,QAAU,QAE/B5nC,KAAKswB,IAAIokB,SAAW7iC,SAASM,cAAc,OAC3CnS,KAAKswB,IAAIokB,SAAS3sC,UAAY,aAC9B/H,KAAKswB,IAAIokB,SAASlnC,MAAM2W,SAAW,WACnCnkB,KAAKswB,IAAIokB,SAASlnC,MAAM5F,IAAM,MAE9B5H,KAAK4lC,IAAM/zB,SAASC,gBAAgB,6BAA6B,OACjE9R,KAAK4lC,IAAIp4B,MAAM2W,SAAW,WAC1BnkB,KAAK4lC,IAAIp4B,MAAM5F,IAAM,MACrB5H,KAAK4lC,IAAIp4B,MAAMqF,MAAQ7S,KAAK+O,QAAQylC,SAAW,EAAI,KACnDx0C,KAAK4lC,IAAIp4B,MAAMsF,OAAS,OAExB9S,KAAKswB,IAAIzQ,MAAM9N,YAAY/R,KAAK4lC,KAChC5lC,KAAKswB,IAAIzQ,MAAM9N,YAAY/R,KAAKswB,IAAIokB,WAMtC3xC,EAAO0Q,UAAUi0B,KAAO,WAElB1nC,KAAKswB,IAAIzQ,MAAM/V,YACjB9J,KAAKswB,IAAIzQ,MAAM/V,WAAW2H,YAAYzR,KAAKswB,IAAIzQ,QAQnD9c,EAAO0Q,UAAUk0B,KAAO,WAEjB3nC,KAAKswB,IAAIzQ,MAAM/V,YAClB9J,KAAKk1B,KAAK5E,IAAI5D,OAAO3a,YAAY/R,KAAKswB,IAAIzQ,QAI9C9c,EAAO0Q,UAAUD,WAAa,SAASzE,GACrC,GAAIP,IAAU,UAAU,cAAc,QAAQ,OAAO,QACrD7N,GAAKuF,oBAAoBsI,EAAQxO,KAAK+O,QAASA,IAGjDhM,EAAO0Q,UAAUuO,OAAS,WACxB,GAAIomB,GAAe,CACnB,KAAK,GAAIxQ,KAAW53B,MAAK00B,OACnB10B,KAAK00B,OAAO7uB,eAAe+xB,KACO,GAAhC53B,KAAK00B,OAAOkD,GAAS3O,SAAkE1iB,SAA9CvG,KAAK6lC,iBAAiB/N,WAAWF,IAAuE,GAA7C53B,KAAK6lC,iBAAiB/N,WAAWF,IACvIwQ,IAKN,IAAuC,GAAnCpoC,KAAK+O,QAAQ/O,KAAKu0C,MAAMtrB,SAA2C,GAAvBjpB,KAAKmnC,gBAA+C,GAAxBnnC,KAAK+O,QAAQC,SAAoC,GAAhBo5B,EAC3GpoC,KAAK0nC,WAEF,CAqBH,GApBA1nC,KAAK2nC,OACmC,YAApC3nC,KAAK+O,QAAQ/O,KAAKu0C,MAAMpwB,UAA8D,eAApCnkB,KAAK+O,QAAQ/O,KAAKu0C,MAAMpwB,UAC5EnkB,KAAKswB,IAAIzQ,MAAMrS,MAAMhG,KAAO,MAC5BxH,KAAKswB,IAAIzQ,MAAMrS,MAAMqb,UAAY,OACjC7oB,KAAKswB,IAAIokB,SAASlnC,MAAMqb,UAAY,OACpC7oB,KAAKswB,IAAIokB,SAASlnC,MAAMhG,KAAQxH,KAAK+O,QAAQylC,SAAW,GAAM,KAC9Dx0C,KAAKswB,IAAIokB,SAASlnC,MAAMoa,MAAQ,GAChC5nB,KAAK4lC,IAAIp4B,MAAMhG,KAAO,MACtBxH,KAAK4lC,IAAIp4B,MAAMoa,MAAQ,KAGvB5nB,KAAKswB,IAAIzQ,MAAMrS,MAAMoa,MAAQ,MAC7B5nB,KAAKswB,IAAIzQ,MAAMrS,MAAMqb,UAAY,QACjC7oB,KAAKswB,IAAIokB,SAASlnC,MAAMqb,UAAY,QACpC7oB,KAAKswB,IAAIokB,SAASlnC,MAAMoa,MAAS5nB,KAAK+O,QAAQylC,SAAW,GAAM,KAC/Dx0C,KAAKswB,IAAIokB,SAASlnC,MAAMhG,KAAO,GAC/BxH,KAAK4lC,IAAIp4B,MAAMoa,MAAQ,MACvB5nB,KAAK4lC,IAAIp4B,MAAMhG,KAAO,IAGgB,YAApCxH,KAAK+O,QAAQ/O,KAAKu0C,MAAMpwB,UAA8D,aAApCnkB,KAAK+O,QAAQ/O,KAAKu0C,MAAMpwB,SAC5EnkB,KAAKswB,IAAIzQ,MAAMrS,MAAM5F,IAAM,EAAI3D,OAAOjE,KAAKk1B,KAAK5E,IAAI5D,OAAOlf,MAAM5F,IAAIwE,QAAQ,KAAK,KAAO,KACzFpM,KAAKswB,IAAIzQ,MAAMrS,MAAMqW,OAAS,OAE3B,CACH,GAAI8wB,GAAmB30C,KAAKk1B,KAAKC,SAASzI,OAAO5Z,OAAS9S,KAAKk1B,KAAKC,SAASgD,gBAAgBrlB,MAC7F9S,MAAKswB,IAAIzQ,MAAMrS,MAAMqW,OAAS,EAAI8wB,EAAmB1wC,OAAOjE,KAAKk1B,KAAK5E,IAAI5D,OAAOlf,MAAM5F,IAAIwE,QAAQ,KAAK,KAAO,KAC/GpM,KAAKswB,IAAIzQ,MAAMrS,MAAM5F,IAAM,GAGH,GAAtB5H,KAAK+O,QAAQi3B,OACfhmC,KAAKswB,IAAIzQ,MAAMrS,MAAMqF,MAAQ7S,KAAKswB,IAAIokB,SAAS/jB,YAAc,GAAK,KAClE3wB,KAAKswB,IAAIokB,SAASlnC,MAAMoa,MAAQ,GAChC5nB,KAAKswB,IAAIokB,SAASlnC,MAAMhG,KAAO,GAC/BxH,KAAK4lC,IAAIp4B,MAAMqF,MAAQ,QAGvB7S,KAAKswB,IAAIzQ,MAAMrS,MAAMqF,MAAQ7S,KAAK+O,QAAQylC,SAAW,GAAKx0C,KAAKswB,IAAIokB,SAAS/jB,YAAc,GAAK,KAC/F3wB,KAAK40C,kBAGP,IAAIzkB,GAAU,EACd,KAAK,GAAIyH,KAAW53B,MAAK00B,OACnB10B,KAAK00B,OAAO7uB,eAAe+xB,KACO,GAAhC53B,KAAK00B,OAAOkD,GAAS3O,SAAkE1iB,SAA9CvG,KAAK6lC,iBAAiB/N,WAAWF,IAAuE,GAA7C53B,KAAK6lC,iBAAiB/N,WAAWF,KACvIzH,GAAWnwB,KAAK00B,OAAOkD,GAASzH,QAAU,UAIhDnwB,MAAKswB,IAAIokB,SAASlwB,UAAY2L,EAC9BnwB,KAAKswB,IAAIokB,SAASlnC,MAAMsjB,WAAe,IAAO9wB,KAAK+O,QAAQylC,SAAYx0C,KAAK+O,QAAQ0lC,YAAe,OAIvG1xC,EAAO0Q,UAAUmhC,gBAAkB,WACjC,GAAI50C,KAAKswB,IAAIzQ,MAAM/V,WAAY,CAC7BlJ,EAAQuQ,gBAAgBnR,KAAKinC,YAC7B,IAAI1iB,GAAU9c,OAAOotC,iBAAiB70C,KAAKswB,IAAIzQ,OAAOi1B,WAClD/M,EAAa9jC,OAAOsgB,EAAQnY,QAAQ,KAAK,KACzCiG,EAAI01B,EACJ1B,EAAYrmC,KAAK+O,QAAQylC,SACzB1M,EAAa,IAAO9nC,KAAK+O,QAAQylC,SACjCliC,EAAIy1B,EAAa,GAAMD,EAAa,CAExC9nC,MAAK4lC,IAAIp4B,MAAMqF,MAAQwzB,EAAY,EAAI0B,EAAa,IAEpD,KAAK,GAAInQ,KAAW53B,MAAK00B,OACnB10B,KAAK00B,OAAO7uB,eAAe+xB,KACO,GAAhC53B,KAAK00B,OAAOkD,GAAS3O,SAAkE1iB,SAA9CvG,KAAK6lC,iBAAiB/N,WAAWF,IAAuE,GAA7C53B,KAAK6lC,iBAAiB/N,WAAWF,KACvI53B,KAAK00B,OAAOkD,GAASoQ,SAAS31B,EAAGC,EAAGtS,KAAKinC,YAAajnC,KAAK4lC,IAAKS,EAAWyB,GAC3Ex1B,GAAKw1B,EAAa9nC,KAAK+O,QAAQ0lC,aAKrC7zC,GAAQ4Q,gBAAgBxR,KAAKinC,eAIjCpnC,EAAOD,QAAUmD,GAKb,SAASlD,EAAQD,EAASM,GAqB9B,QAAS8C,GAAUkyB,EAAMnmB,GACvB/O,KAAKK,GAAKM,EAAKoE,aACf/E,KAAKk1B,KAAOA,EAEZl1B,KAAK40B,gBACHiX,iBAAkB,OAClBkJ,aAAc,UACdt+B,MAAM,EACNu+B,UAAU,EACVC,YAAa,QACbzJ,QACEx8B,SAAS,EACT8lB,YAAa,UAEftnB,MAAO,OACP0nC,UACEriC,MAAO,GACPsiC,cAAe,UACfnG,MAAO,UAEThE,YACEh8B,SAAS,EACTi8B,gBAAiB,cACjBC,MAAO,IAETz4B,YACEzD,SAAS,EACT2D,KAAM,EACNnF,MAAO,UAET4nC,UACEtP,iBAAiB,EACjBC,iBAAiB,EACjBC,OAAO,EACPnzB,MAAO,OACPoW,SAAS,EACT4S,YAAY,EACZD,aACEp0B,MAAOiE,IAAIlF,OAAW2G,IAAI3G,QAC1BqhB,OAAQnc,IAAIlF,OAAW2G,IAAI3G,UAkB/B8uC,QACErmC,SAAS,EACTg3B,OAAO,EACPx+B,MACEyhB,SAAS,EACT9E,SAAU,YAEZyD,OACEqB,SAAS,EACT9E,SAAU,cAGduQ,QACEoD,gBAKJ93B,KAAK+O,QAAUpO,EAAK0E,UAAWrF,KAAK40B,gBACpC50B,KAAKswB,OACLtwB,KAAK+F,SACL/F,KAAK8D,OAAS,KACd9D,KAAK00B,UACL10B,KAAKs1C,oBAAqB,EAC1Bt1C,KAAKu1C,aAAc,CAEnB,IAAI9gC,GAAKzU,IACTA,MAAKq2B,UAAY,KACjBr2B,KAAKs2B,WAAa,KAGlBt2B,KAAK2vC,eACHp8B,IAAO,SAAU/J,EAAO4K,GACtBK,EAAGm7B,OAAOx7B,EAAOnS,QAEnBkT,OAAU,SAAU3L,EAAO4K,GACzBK,EAAGo7B,UAAUz7B,EAAOnS,QAEtB2U,OAAU,SAAUpN,EAAO4K,GACzBK,EAAGq7B,UAAU17B,EAAOnS,SAKxBjC,KAAK+vC,gBACHx8B,IAAO,SAAU/J,EAAO4K,GACtBK,EAAGu7B,aAAa57B,EAAOnS,QAEzBkT,OAAU,SAAU3L,EAAO4K,GACzBK,EAAGw7B,gBAAgB77B,EAAOnS,QAE5B2U,OAAU,SAAUpN,EAAO4K,GACzBK,EAAGy7B,gBAAgB97B,EAAOnS,SAI9BjC,KAAKiC,SACLjC,KAAKowC,aACLpwC,KAAKw1C,UAAYx1C,KAAKk1B,KAAKc,MAAM9lB,MACjClQ,KAAKswC,eAELtwC,KAAKinC,eACLjnC,KAAKwT,WAAWzE,GAChB/O,KAAKyqC,0BAA4B,GACjCzqC,KAAKy1C,QAAU,EACfz1C,KAAKk1B,KAAKE,QAAQvhB,GAAG,eAAgB,WACnCY,EAAG+gC,UAAY/gC,EAAGygB,KAAKc,MAAM9lB,MAC7BuE,EAAGmxB,IAAIp4B,MAAMhG,KAAO7G,EAAKoJ,OAAOK,QAAQqK,EAAG5B,OAC3C4B,EAAGuN,OAAOzhB,KAAKkU,GAAG,KAIpBzU,KAAKi1B,UACLj1B,KAAKisC,WAAarG,IAAK5lC,KAAK4lC,IAAKqB,YAAajnC,KAAKinC,YAAal4B,QAAS/O,KAAK+O,QAAS2lB,OAAQ10B,KAAK00B,QACpG10B,KAAKk1B,KAAKE,QAAQhH,KAAK,UAtJzB,GAAIztB,GAAOT,EAAoB,GAC3BU,EAAUV,EAAoB,GAC9BW,EAAUX,EAAoB,GAC9BY,EAAWZ,EAAoB,GAC/BqC,EAAYrC,EAAoB,IAChCwC,EAAWxC,EAAoB,IAC/ByC,EAAazC,EAAoB,IACjC6C,EAAS7C,EAAoB,IAC7Bw1C,EAAoBx1C,EAAoB,IAExCqwC,EAAY,eAgJhBvtC,GAAUyQ,UAAY,GAAIlR,GAK1BS,EAAUyQ,UAAUwhB,QAAU,WAC5B,GAAIpV,GAAQhO,SAASM,cAAc,MACnC0N,GAAM9X,UAAY,YAClB/H,KAAKswB,IAAIzQ,MAAQA,EAGjB7f,KAAK4lC,IAAM/zB,SAASC,gBAAgB,6BAA6B,OACjE9R,KAAK4lC,IAAIp4B,MAAM2W,SAAW,WAC1BnkB,KAAK4lC,IAAIp4B,MAAMsF,QAAU,GAAK9S,KAAK+O,QAAQkmC,aAAa7oC,QAAQ,KAAK,IAAM,KAC3EpM,KAAK4lC,IAAIp4B,MAAMo6B,QAAU,QACzB/nB,EAAM9N,YAAY/R,KAAK4lC,KAGvB5lC,KAAK+O,QAAQqmC,SAAStgB,YAAc,OACpC90B,KAAK21C,UAAY,GAAIjzC,GAAS1C,KAAKk1B,KAAMl1B,KAAK+O,QAAQqmC,SAAUp1C,KAAK4lC,IAAK5lC,KAAK+O,QAAQ2lB,QAEvF10B,KAAK+O,QAAQqmC,SAAStgB,YAAc,QACpC90B,KAAK41C,WAAa,GAAIlzC,GAAS1C,KAAKk1B,KAAMl1B,KAAK+O,QAAQqmC,SAAUp1C,KAAK4lC,IAAK5lC,KAAK+O,QAAQ2lB,cACjF10B,MAAK+O,QAAQqmC,SAAStgB,YAG7B90B,KAAK61C,WAAa,GAAI9yC,GAAO/C,KAAKk1B,KAAMl1B,KAAK+O,QAAQsmC,OAAQ,OAAQr1C,KAAK+O,QAAQ2lB,QAClF10B,KAAK81C,YAAc,GAAI/yC,GAAO/C,KAAKk1B,KAAMl1B,KAAK+O,QAAQsmC,OAAQ,QAASr1C,KAAK+O,QAAQ2lB,QAEpF10B,KAAK2nC,QAOP3kC,EAAUyQ,UAAUD,WAAa,SAASzE,GACxC,GAAIA,EAAS,CACX,GAAIP,IAAU,WAAW,eAAe,cAAc,mBAAmB,QAAQ,WAAW,WAAW,OAAO,SAClFjI,UAAxBwI,EAAQkmC,aAAgD1uC,SAAnBwI,EAAQ+D,QAAsEvM,SAA9CvG,KAAKk1B,KAAKC,SAASgD,gBAAgBrlB,OAC1G9S,KAAKu1C,aAAc,EAEkChvC,SAA9CvG,KAAKk1B,KAAKC,SAASgD,gBAAgBrlB,QAAgDvM,SAAxBwI,EAAQkmC,aACtE5pB,UAAUtc,EAAQkmC,YAAc,IAAI7oC,QAAQ,KAAK,KAAOpM,KAAKk1B,KAAKC,SAASgD,gBAAgBrlB,SAC7F9S,KAAKu1C,aAAc,GAGvB50C,EAAKuF,oBAAoBsI,EAAQxO,KAAK+O,QAASA,GAC/CpO,EAAKkO,aAAa7O,KAAK+O,QAASA,EAAQ,cACxCpO,EAAKkO,aAAa7O,KAAK+O,QAASA,EAAQ,cACxCpO,EAAKkO,aAAa7O,KAAK+O,QAASA,EAAQ,UACxCpO,EAAKkO,aAAa7O,KAAK+O,QAASA,EAAQ,UAEpCA,EAAQi8B,YACuB,gBAAtBj8B,GAAQi8B,YACbj8B,EAAQi8B,WAAWC,kBACqB,WAAtCl8B,EAAQi8B,WAAWC,gBACrBjrC,KAAK+O,QAAQi8B,WAAWE,MAAQ,EAEa,WAAtCn8B,EAAQi8B,WAAWC,gBAC1BjrC,KAAK+O,QAAQi8B,WAAWE,MAAQ,GAGhClrC,KAAK+O,QAAQi8B,WAAWC,gBAAkB,cAC1CjrC,KAAK+O,QAAQi8B,WAAWE,MAAQ,KAMpClrC,KAAK21C,WACkBpvC,SAArBwI,EAAQqmC,WACVp1C,KAAK21C,UAAUniC,WAAWxT,KAAK+O,QAAQqmC,UACvCp1C,KAAK41C,WAAWpiC,WAAWxT,KAAK+O,QAAQqmC,WAIxCp1C,KAAK61C,YACgBtvC,SAAnBwI,EAAQsmC,SACVr1C,KAAK61C,WAAWriC,WAAWxT,KAAK+O,QAAQsmC,QACxCr1C,KAAK81C,YAAYtiC,WAAWxT,KAAK+O,QAAQsmC,SAIzCr1C,KAAK00B,OAAO7uB,eAAe0qC,IAC7BvwC,KAAK00B,OAAO6b,GAAW/8B,WAAWzE,GAKlC/O,KAAKswB,IAAIzQ,OACX7f,KAAKgiB,QAAO,IAOhBhf,EAAUyQ,UAAUi0B,KAAO,WAErB1nC,KAAKswB,IAAIzQ,MAAM/V,YACjB9J,KAAKswB,IAAIzQ,MAAM/V,WAAW2H,YAAYzR,KAAKswB,IAAIzQ,QASnD7c,EAAUyQ,UAAUk0B,KAAO,WAEpB3nC,KAAKswB,IAAIzQ,MAAM/V,YAClB9J,KAAKk1B,KAAK5E,IAAI5D,OAAO3a,YAAY/R,KAAKswB,IAAIzQ,QAS9C7c,EAAUyQ,UAAU+iB,SAAW,SAASv0B,GACtC,GACEwT,GADEhB,EAAKzU,KAEPuyC,EAAevyC,KAAKq2B,SAGtB,IAAKp0B,EAGA,CAAA,KAAIA,YAAiBpB,IAAWoB,YAAiBnB,IAIpD,KAAM,IAAIsF,WAAU,kDAHpBpG,MAAKq2B,UAAYp0B,MAHjBjC,MAAKq2B,UAAY,IAoBnB,IAXIkc,IAEF5xC,EAAK4H,QAAQvI,KAAK2vC,cAAe,SAAUnnC,EAAUgB,GACnD+oC,EAAav+B,IAAIxK,EAAOhB,KAI1BiN,EAAM88B,EAAan8B,SACnBpW,KAAK8vC,UAAUr6B,IAGbzV,KAAKq2B,UAAW,CAElB,GAAIh2B,GAAKL,KAAKK,EACdM,GAAK4H,QAAQvI,KAAK2vC,cAAe,SAAUnnC,EAAUgB,GACnDiL,EAAG4hB,UAAUxiB,GAAGrK,EAAOhB,EAAUnI,KAInCoV,EAAMzV,KAAKq2B,UAAUjgB,SACrBpW,KAAK4vC,OAAOn6B,GAEdzV,KAAK0wC,mBAEL1wC,KAAKgiB,QAAO,IAQdhf,EAAUyQ,UAAU8iB,UAAY,SAAS7B,GACvC,GACIjf,GADAhB,EAAKzU,IAgBT,IAZIA,KAAKs2B,aACP31B,EAAK4H,QAAQvI,KAAK+vC,eAAgB,SAAUvnC,EAAUgB,GACpDiL,EAAG6hB,WAAWpiB,YAAY1K,EAAOhB,KAInCiN,EAAMzV,KAAKs2B,WAAWlgB,SACtBpW,KAAKs2B,WAAa,KAClBt2B,KAAKkwC,gBAAgBz6B,IAIlBif,EAGA,CAAA,KAAIA,YAAkB7zB,IAAW6zB,YAAkB5zB,IAItD,KAAM,IAAIsF,WAAU,kDAHpBpG,MAAKs2B,WAAa5B,MAHlB10B,MAAKs2B,WAAa,IASpB,IAAIt2B,KAAKs2B,WAAY,CAEnB,GAAIj2B,GAAKL,KAAKK,EACdM,GAAK4H,QAAQvI,KAAK+vC,eAAgB,SAAUvnC,EAAUgB,GACpDiL,EAAG6hB,WAAWziB,GAAGrK,EAAOhB,EAAUnI,KAIpCoV,EAAMzV,KAAKs2B,WAAWlgB,SACtBpW,KAAKgwC,aAAav6B,GAEpBzV,KAAK6vC,aASP7sC,EAAUyQ,UAAUo8B,UAAY,WAC9B7vC,KAAK0wC,mBACL1wC,KAAK+1C,sBAEL/1C,KAAKgiB,QAAO,IAEdhf,EAAUyQ,UAAUm8B,OAAkB,SAAUn6B,GAAMzV,KAAK6vC,UAAUp6B,IACrEzS,EAAUyQ,UAAUq8B,UAAkB,SAAUr6B,GAAMzV,KAAK6vC,UAAUp6B,IACrEzS,EAAUyQ,UAAUw8B,gBAAmB,SAAUE,GAC/C,IAAK,GAAI5qC,GAAI,EAAGA,EAAI4qC,EAASzqC,OAAQH,IAAK,CACxC,GAAIgN,GAAQvS,KAAKs2B,WAAW9gB,IAAI26B,EAAS5qC,GACzCvF,MAAKg2C,aAAazjC,EAAO49B,EAAS5qC,IAIpCvF,KAAKgiB,QAAO,IAEdhf,EAAUyQ,UAAUu8B,aAAe,SAAUG,GAAWnwC,KAAKiwC,gBAAgBE,IAQ7EntC,EAAUyQ,UAAUy8B,gBAAkB,SAAUC,GAC9C,IAAK,GAAI5qC,GAAI,EAAGA,EAAI4qC,EAASzqC,OAAQH,IAC/BvF,KAAK00B,OAAO7uB,eAAesqC,EAAS5qC,MACmB,SAArDvF,KAAK00B,OAAOyb,EAAS5qC,IAAIwJ,QAAQ88B,kBACnC7rC,KAAK41C,WAAWnO,YAAY0I,EAAS5qC,IACrCvF,KAAK81C,YAAYrO,YAAY0I,EAAS5qC,IACtCvF,KAAK81C,YAAY9zB,WAGjBhiB,KAAK21C,UAAUlO,YAAY0I,EAAS5qC,IACpCvF,KAAK61C,WAAWpO,YAAY0I,EAAS5qC,IACrCvF,KAAK61C,WAAW7zB,gBAEXhiB,MAAK00B,OAAOyb,EAAS5qC,IAGhCvF,MAAK0wC,mBAEL1wC,KAAKgiB,QAAO,IAWdhf,EAAUyQ,UAAUuiC,aAAe,SAAUzjC,EAAOqlB,GAC7C53B,KAAK00B,OAAO7uB,eAAe+xB,IAY9B53B,KAAK00B,OAAOkD,GAASziB,OAAO5C,GACyB,SAAjDvS,KAAK00B,OAAOkD,GAAS7oB,QAAQ88B,kBAC/B7rC,KAAK41C,WAAWpO,YAAY5P,EAAS53B,KAAK00B,OAAOkD,IACjD53B,KAAK81C,YAAYtO,YAAY5P,EAAS53B,KAAK00B,OAAOkD,MAGlD53B,KAAK21C,UAAUnO,YAAY5P,EAAS53B,KAAK00B,OAAOkD,IAChD53B,KAAK61C,WAAWrO,YAAY5P,EAAS53B,KAAK00B,OAAOkD,OAlBnD53B,KAAK00B,OAAOkD,GAAW,GAAIj1B,GAAW4P,EAAOqlB,EAAS53B,KAAK+O,QAAS/O,KAAKyqC,0BACpB,SAAjDzqC,KAAK00B,OAAOkD,GAAS7oB,QAAQ88B,kBAC/B7rC,KAAK41C,WAAWtO,SAAS1P,EAAS53B,KAAK00B,OAAOkD,IAC9C53B,KAAK81C,YAAYxO,SAAS1P,EAAS53B,KAAK00B,OAAOkD,MAG/C53B,KAAK21C,UAAUrO,SAAS1P,EAAS53B,KAAK00B,OAAOkD,IAC7C53B,KAAK61C,WAAWvO,SAAS1P,EAAS53B,KAAK00B,OAAOkD,MAclD53B,KAAK61C,WAAW7zB,SAChBhiB,KAAK81C,YAAY9zB,UASnBhf,EAAUyQ,UAAUsiC,oBAAsB,WACxC,GAAsB,MAAlB/1C,KAAKq2B,UAAmB,CAC1B,GACIuB,GADAqe,IAEJ,KAAKre,IAAW53B,MAAK00B,OACf10B,KAAK00B,OAAO7uB,eAAe+xB,KAC7Bqe,EAAcre,MAGlB,KAAK,GAAI/hB,KAAU7V,MAAKq2B,UAAUnjB,MAChC,GAAIlT,KAAKq2B,UAAUnjB,MAAMrN,eAAegQ,GAAS,CAC/C,GAAIlG,GAAO3P,KAAKq2B,UAAUnjB,MAAM2C,EAChC,IAAkCtP,SAA9B0vC,EAActmC,EAAK4C,OACrB,KAAM,IAAI3O,OAAM,4IAElB+L,GAAK0C,EAAI1R,EAAKiG,QAAQ+I,EAAK0C,EAAE,QAC7B4jC,EAActmC,EAAK4C,OAAOrK,KAAKyH,GAGnC,IAAKioB,IAAW53B,MAAK00B,OACf10B,KAAK00B,OAAO7uB,eAAe+xB,IAC7B53B,KAAK00B,OAAOkD,GAASpB,SAASyf,EAAcre,MAYpD50B,EAAUyQ,UAAUi9B,iBAAmB,WACrC,GAAI1wC,KAAKq2B,WAA+B,MAAlBr2B,KAAKq2B,UAAmB,CAC5C,GAAI6f,GAAmB,CACvB,KAAK,GAAIrgC,KAAU7V,MAAKq2B,UAAUnjB,MAChC,GAAIlT,KAAKq2B,UAAUnjB,MAAMrN,eAAegQ,GAAS,CAC/C,GAAIlG,GAAO3P,KAAKq2B,UAAUnjB,MAAM2C,EACpBtP,SAARoJ,IACEA,EAAK9J,eAAe,SACHU,SAAfoJ,EAAK4C,QACP5C,EAAK4C,MAAQg+B,GAIf5gC,EAAK4C,MAAQg+B,EAEf2F,EAAmBvmC,EAAK4C,OAASg+B,EAAY2F,EAAmB,EAAIA,GAK1E,GAAwB,GAApBA,QACKl2C,MAAK00B,OAAO6b,GACnBvwC,KAAK61C,WAAWpO,YAAY8I,GAC5BvwC,KAAK81C,YAAYrO,YAAY8I,GAC7BvwC,KAAK21C,UAAUlO,YAAY8I,GAC3BvwC,KAAK41C,WAAWnO,YAAY8I,OAEzB,CACH,GAAIh+B,IAASlS,GAAIkwC,EAAWpgB,QAASnwB,KAAK+O,QAAQgmC,aAClD/0C,MAAKg2C,aAAazjC,EAAOg+B,eAIpBvwC,MAAK00B,OAAO6b,GACnBvwC,KAAK61C,WAAWpO,YAAY8I,GAC5BvwC,KAAK81C,YAAYrO,YAAY8I,GAC7BvwC,KAAK21C,UAAUlO,YAAY8I,GAC3BvwC,KAAK41C,WAAWnO,YAAY8I,EAG9BvwC,MAAK61C,WAAW7zB,SAChBhiB,KAAK81C,YAAY9zB,UAQnBhf,EAAUyQ,UAAUuO,OAAS,SAASm0B,GACpC,GAAI3R,IAAU,CAEdxkC,MAAK4lC,IAAIp4B,MAAMsF,QAAU,GAAK9S,KAAK+O,QAAQkmC,aAAa7oC,QAAQ,KAAK,IAAM,MACpD7F,SAAnBvG,KAAK2xC,WAA2B3xC,KAAK6S,OAAS7S,KAAK2xC,WAAa3xC,KAAK6S,SACvE2xB,GAAU,GAGZA,EAAUxkC,KAAKukC,cAAgBC,CAE/B,IAAIgN,GAAkBxxC,KAAKk1B,KAAKc,MAAM7lB,IAAMnQ,KAAKk1B,KAAKc,MAAM9lB,KAe5D,IAbAlQ,KAAK0xC,oBAAsBF,EAC3BxxC,KAAK2xC,UAAY3xC,KAAK6S,MAGtB7S,KAAK6S,MAAQ7S,KAAKswB,IAAIzQ,MAAM8Q,YAIb,GAAX6T,IACFxkC,KAAK4lC,IAAIp4B,MAAMqF,MAAQlS,EAAKoJ,OAAOK,OAAO,EAAEpK,KAAK6S,OACjD7S,KAAK4lC,IAAIp4B,MAAMhG,KAAO7G,EAAKoJ,OAAOK,QAAQpK,KAAK6S,QAGlB,GAA3B7S,KAAKs1C,oBAAkD,GAApBa,EACrC3R,EAAUA,GAAWxkC,KAAKo2C,mBAI1B,IAAsB,GAAlBp2C,KAAKw1C,UAAgB,CACvB,GAAItrB,GAASlqB,KAAKk1B,KAAKc,MAAM9lB,MAAQlQ,KAAKw1C,UACtCxf,EAAQh2B,KAAKk1B,KAAKc,MAAM7lB,IAAMnQ,KAAKk1B,KAAKc,MAAM9lB,KAClD,IAAkB,GAAdlQ,KAAK6S,MAAY,CACnB,GAAIwjC,GAAmBr2C,KAAK6S,MAAMmjB,EAC9B7L,EAAUD,EAASmsB,CACvBr2C,MAAK4lC,IAAIp4B,MAAMhG,MAASxH,KAAK6S,MAAQsX,EAAW,MAStD,MAHAnqB,MAAK61C,WAAW7zB,SAChBhiB,KAAK81C,YAAY9zB,SAEVwiB,GAQTxhC,EAAUyQ,UAAU2iC,aAAe,WAGjC,GADAx1C,EAAQuQ,gBAAgBnR,KAAKinC,aACX,GAAdjnC,KAAK6S,OAAgC,MAAlB7S,KAAKq2B,UAAmB,CAC7C,GAAI9jB,GAAOhN,EACP+wC,KACAC,KACAC,KACArO,GAAe,CAGK,IAApBnoC,KAAKu1C,cACHv1C,KAAK+O,QAAQkmC,aAAej1C,KAAKk1B,KAAKC,SAASgD,gBAAgBrlB,OAAS,OAC1E9S,KAAK+O,QAAQkmC,YAAcj1C,KAAKk1B,KAAKC,SAASgD,gBAAgBrlB,OAAS,KACvE9S,KAAK4lC,IAAIp4B,MAAMsF,OAAS9S,KAAKk1B,KAAKC,SAASgD,gBAAgBrlB,OAAS,MAEtE9S,KAAKu1C,aAAc,EAIrB,IAAIpF,KACJ,KAAK,GAAIvY,KAAW53B,MAAK00B,OACnB10B,KAAK00B,OAAO7uB,eAAe+xB,KAC7BrlB,EAAQvS,KAAK00B,OAAOkD,GACC,GAAjBrlB,EAAM0W,SAAgE1iB,SAA5CvG,KAAK+O,QAAQ2lB,OAAOoD,WAAWF,IAAqE,GAA3C53B,KAAK+O,QAAQ2lB,OAAOoD,WAAWF,IACpHuY,EAASjoC,KAAK0vB,GAIpB,IAAIuY,EAASzqC,OAAS,EAAG,CAEvB,GAAI+wC,GAAUz2C,KAAKk1B,KAAKv0B,KAAKm1B,cAAc91B,KAAKk1B,KAAKC,SAASz1B,KAAKmT,OAC/D6jC,EAAU12C,KAAKk1B,KAAKv0B,KAAKm1B,aAAa,EAAI91B,KAAKk1B,KAAKC,SAASz1B,KAAKmT,OAClEyjB,IAQJ,KANAt2B,KAAK22C,iBAAiBxG,EAAU7Z,EAAYmgB,EAASC,GAGrD12C,KAAK42C,eAAezG,EAAU7Z,GAGzB/wB,EAAI,EAAGA,EAAI4qC,EAASzqC,OAAQH,IAC/B+wC,EAAsBnG,EAAS5qC,IAAMvF,KAAK62C,qBAAqBvgB,EAAW6Z,EAAS5qC,IAIrFvF,MAAK82C,YAAY3G,EAAUmG,EAAuBE,GAIlDrO,EAAenoC,KAAK+2C,aAAa5G,EAAUqG,EAC3C;GAAIQ,GAAa,CACjB,IAAoB,GAAhB7O,GAAwBnoC,KAAKy1C,QAAUuB,EAKzC,MAJAp2C,GAAQ4Q,gBAAgBxR,KAAKinC,aAC7BjnC,KAAKs1C,oBAAqB,EAC1Bt1C,KAAKy1C,UACLz1C,KAAKk1B,KAAKE,QAAQhH,KAAK,WAChB,CAUP,KAPIpuB,KAAKy1C,QAAUuB,GACjB/d,QAAQ/E,IAAI,6EAEdl0B,KAAKy1C,QAAU,EACfz1C,KAAKs1C,oBAAqB,EAGrB/vC,EAAI,EAAGA,EAAI4qC,EAASzqC,OAAQH,IAC/BgN,EAAQvS,KAAK00B,OAAOyb,EAAS5qC,IAC7BgxC,EAAmBpG,EAAS5qC,IAAMvF,KAAKi3C,qBAAqB3gB,EAAW6Z,EAAS5qC,IAAKgN,EAIvF,KAAKhN,EAAI,EAAGA,EAAI4qC,EAASzqC,OAAQH,IAC/BgN,EAAQvS,KAAK00B,OAAOyb,EAAS5qC,IACF,OAAvBgN,EAAMxD,QAAQvB,OAChB+E,EAAMy5B,KAAKuK,EAAmBpG,EAAS5qC,IAAKgN,EAAOvS,KAAKisC,UAG5DyJ,GAAkB1J,KAAKmE,EAAUoG,EAAoBv2C,KAAKisC,YAOhE,MADArrC,GAAQ4Q,gBAAgBxR,KAAKinC,cACtB,GAiBTjkC,EAAUyQ,UAAUkjC,iBAAmB,SAAUxG,EAAU7Z,EAAYmgB,EAASC,GAC9E,GAAInkC,GAAOhN,EAAG6mB,EAAGzc,CACjB,IAAIwgC,EAASzqC,OAAS,EACpB,IAAKH,EAAI,EAAGA,EAAI4qC,EAASzqC,OAAQH,IAAK,CACpCgN,EAAQvS,KAAK00B,OAAOyb,EAAS5qC,IAC7B+wB,EAAW6Z,EAAS5qC,MACpB,IAAI2xC,GAAgB5gB,EAAW6Z,EAAS5qC,GAExC,IAA0B,GAAtBgN,EAAMxD,QAAQ0H,KAAc,CAC9B,GAAI0gC,GAAQlyC,KAAKiI,IAAI,EAAGvM,EAAKkP,kBAAkB0C,EAAM8jB,UAAWogB,EAAS,IAAK,UAC9E,KAAKrqB,EAAI+qB,EAAO/qB,EAAI7Z,EAAM8jB,UAAU3wB,OAAQ0mB,IAE1C,GADAzc,EAAO4C,EAAM8jB,UAAUjK,GACV7lB,SAAToJ,EAAoB,CACtB,GAAIA,EAAK0C,EAAIqkC,EAAS,CACpBQ,EAAchvC,KAAKyH,EACnB,OAGAunC,EAAchvC,KAAKyH,QAMzB,KAAKyc,EAAI,EAAGA,EAAI7Z,EAAM8jB,UAAU3wB,OAAQ0mB,IACtCzc,EAAO4C,EAAM8jB,UAAUjK,GACV7lB,SAAToJ,GACEA,EAAK0C,EAAIokC,GAAW9mC,EAAK0C,EAAIqkC,GAC/BQ,EAAchvC,KAAKyH,KAgBjC3M,EAAUyQ,UAAUmjC,eAAiB,SAAUzG,EAAU7Z,GACvD,GAAI/jB,EACJ,IAAI49B,EAASzqC,OAAS,EACpB,IAAK,GAAIH,GAAI,EAAGA,EAAI4qC,EAASzqC,OAAQH,IAEnC,GADAgN,EAAQvS,KAAK00B,OAAOyb,EAAS5qC,IACC,GAA1BgN,EAAMxD,QAAQimC,SAAkB,CAClC,GAAIkC,GAAgB5gB,EAAW6Z,EAAS5qC,GACxC,IAAI2xC,EAAcxxC,OAAS,EAAG,CAC5B,GAAI0xC,GAAY,EACZC,EAAiBH,EAAcxxC,OAI/B4xC,EAAYt3C,KAAKk1B,KAAKv0B,KAAK+0B,eAAewhB,EAAcA,EAAcxxC,OAAS,GAAG2M,GAAKrS,KAAKk1B,KAAKv0B,KAAK+0B,eAAewhB,EAAc,GAAG7kC,GACtIklC,EAAiBF,EAAiBC,CACtCF,GAAYnyC,KAAKwG,IAAIxG,KAAKuyC,KAAK,GAAMH,GAAiBpyC,KAAKiI,IAAI,EAAGjI,KAAKipB,MAAMqpB,IAG7E,KAAK,GADDE,MACKrrB,EAAI,EAAOirB,EAAJjrB,EAAoBA,GAAKgrB,EACvCK,EAAYvvC,KAAKgvC,EAAc9qB,GAGjCkK,GAAW6Z,EAAS5qC,IAAMkyC,KAgBpCz0C,EAAUyQ,UAAUqjC,YAAc,SAAU3G,EAAU7Z,EAAYkgB,GAChE,GAAIzK,GAAWx5B,EAAOhN,EAGlBwJ,EAFA2oC,KACAC,IAEJ,IAAIxH,EAASzqC,OAAS,EAAG,CACvB,IAAKH,EAAI,EAAGA,EAAI4qC,EAASzqC,OAAQH,IAC/BwmC,EAAYzV,EAAW6Z,EAAS5qC,IAChCwJ,EAAU/O,KAAK00B,OAAOyb,EAAS5qC,IAAIwJ,QAC/Bg9B,EAAUrmC,OAAS,IACrB6M,EAAQvS,KAAK00B,OAAOyb,EAAS5qC,IAES,SAAlCwJ,EAAQmmC,SAASC,eAA6C,OAAjBpmC,EAAQvB,MACvB,QAA5BuB,EAAQ88B,iBAA6B6L,EAAuBA,EAAoBpjC,OAAO/B,EAAMu5B,UAAUC,IAClE4L,EAAuBA,EAAqBrjC,OAAO/B,EAAMu5B,UAAUC,IAG5GyK,EAAYrG,EAAS5qC,IAAMgN,EAAMu5B,UAAUC,EAAUoE,EAAS5qC,IAMpEmwC,GAAkBkC,oBAAoBF,EAAsBlB,EAAarG,EAAU,iBAAmB,QACtGuF,EAAkBkC,oBAAoBD,EAAsBnB,EAAarG,EAAU,kBAAmB,WAW1GntC,EAAUyQ,UAAUsjC,aAAe,SAAU5G,EAAUqG,GACrD,GAGoEqB,GAAQC,EAHxE3P,GAAe,EACf4P,GAAgB,EAChBC,GAAiB,EACjBC,EAAU,IAAKC,EAAW,IAAKC,EAAU,KAAMC,EAAW,IAE9D,IAAIjI,EAASzqC,OAAS,EAAG,CAEvB,IAAK,GAAIH,GAAI,EAAGA,EAAI4qC,EAASzqC,OAAQH,IAAK,CACxC,GAAIgN,GAAQvS,KAAK00B,OAAOyb,EAAS5qC,GAC7BgN,IAA2C,QAAlCA,EAAMxD,QAAQ88B,kBACzBkM,GAAgB,EAChBE,EAAU,EACVE,EAAU,IAGVH,GAAiB,EACjBE,EAAW,EACXE,EAAW,GAKf,IAAK,GAAI7yC,GAAI,EAAGA,EAAI4qC,EAASzqC,OAAQH,IAC/BixC,EAAY3wC,eAAesqC,EAAS5qC,KAClCixC,EAAYrG,EAAS5qC,IAAI8yC,UAAW,IACtCR,EAASrB,EAAYrG,EAAS5qC,IAAIkG,IAClCqsC,EAAStB,EAAYrG,EAAS5qC,IAAI2H,IAEe,QAA7CspC,EAAYrG,EAAS5qC,IAAIsmC,kBAC3BkM,GAAgB,EAChBE,EAAUA,EAAUJ,EAASA,EAASI,EACtCE,EAAoBL,EAAVK,EAAmBL,EAASK,IAGtCH,GAAiB,EACjBE,EAAWA,EAAWL,EAASA,EAASK,EACxCE,EAAsBN,EAAXM,EAAoBN,EAASM,GAM3B,IAAjBL,GACF/3C,KAAK21C,UAAU7hB,SAASmkB,EAASE,GAEb,GAAlBH,GACFh4C,KAAK41C,WAAW9hB,SAASokB,EAAUE,GAsCvC,MAnCAjQ,GAAenoC,KAAKs4C,qBAAqBP,EAAgB/3C,KAAK21C,YAAexN,EAC7EA,EAAenoC,KAAKs4C,qBAAqBN,EAAgBh4C,KAAK41C,aAAezN,EAEvD,GAAlB6P,GAA2C,GAAjBD,GAC5B/3C,KAAK21C,UAAU4C,WAAY,EAC3Bv4C,KAAK41C,WAAW2C,WAAY,IAG5Bv4C,KAAK21C,UAAU4C,WAAY,EAC3Bv4C,KAAK41C,WAAW2C,WAAY,GAG9Bv4C,KAAK41C,WAAW5O,QAAU+Q,EAEI,GAA1B/3C,KAAK41C,WAAW5O,QACWhnC,KAAK21C,UAAU5O,WAAtB,GAAlBiR,EAAqDh4C,KAAK41C,WAAW/iC,MAChB,EAEzDs1B,EAAenoC,KAAK21C,UAAU3zB,UAAYmmB,EAC1CnoC,KAAK41C,WAAW/O,iBAAmB7mC,KAAK21C,UAAU/O,WAClD5mC,KAAK41C,WAAW9O,aAAe9mC,KAAK21C,UAAU7O,aAC9CqB,EAAenoC,KAAK41C,WAAW5zB,UAAYmmB,GAG3CA,EAAenoC,KAAK41C,WAAW5zB,UAAYmmB,EAIH,IAAtCgI,EAASzpC,QAAQ,mBACnBypC,EAAS7nC,OAAO6nC,EAASzpC,QAAQ,kBAAkB,GAEV,IAAvCypC,EAASzpC,QAAQ,oBACnBypC,EAAS7nC,OAAO6nC,EAASzpC,QAAQ,mBAAmB,GAG/CyhC,GAYTnlC,EAAUyQ,UAAU6kC,qBAAuB,SAAUE,EAAUhX,GAC7D,GAAI9B,IAAU,CAad,OAZgB,IAAZ8Y,EACEhX,EAAKlR,IAAIzQ,MAAM/V,YAA6B,GAAf03B,EAAKhI,SACpCgI,EAAKkG,OACLhI,GAAU,GAIP8B,EAAKlR,IAAIzQ,MAAM/V,YAA6B,GAAf03B,EAAKhI,SACrCgI,EAAKmG,OACLjI,GAAU,GAGPA,GAaT18B,EAAUyQ,UAAUojC,qBAAuB,SAAU4B,GAKnD,IAAK,GAHDC,GAAQC,EADRC,KAEApjB,EAAWx1B,KAAKk1B,KAAKv0B,KAAK60B,SAErBjwB,EAAI,EAAGA,EAAIkzC,EAAW/yC,OAAQH,IACrCmzC,EAASljB,EAASijB,EAAWlzC,GAAG8M,GAAKrS,KAAK6S,MAC1C8lC,EAASF,EAAWlzC,GAAG+M,EACvBsmC,EAAc1wC,MAAMmK,EAAGqmC,EAAQpmC,EAAGqmC,GAGpC,OAAOC,IAcT51C,EAAUyQ,UAAUwjC,qBAAuB,SAAUwB,EAAYlmC,GAC/D,GACImmC,GAAQC,EADRC,KAEApjB,EAAWx1B,KAAKk1B,KAAKv0B,KAAK60B,SAC1BgM,EAAOxhC,KAAK21C,UACZkD,EAAY50C,OAAOjE,KAAK4lC,IAAIp4B,MAAMsF,OAAO1G,QAAQ,KAAK,IACpB,UAAlCmG,EAAMxD,QAAQ88B,mBAChBrK,EAAOxhC,KAAK41C,WAGd,KAAK,GAAIrwC,GAAI,EAAGA,EAAIkzC,EAAW/yC,OAAQH,IACrCmzC,EAASljB,EAASijB,EAAWlzC,GAAG8M,GAAKrS,KAAK6S,MAC1C8lC,EAAS1zC,KAAKipB,MAAMsT,EAAKkI,aAAa+O,EAAWlzC,GAAG+M,IACpDsmC,EAAc1wC,MAAMmK,EAAGqmC,EAAQpmC,EAAGqmC,GAKpC,OAFApmC,GAAMw4B,gBAAgB9lC,KAAKwG,IAAIotC,EAAWrX,EAAKkI,aAAa,KAErDkP,GAIT/4C,EAAOD,QAAUoD,GAKb,SAASnD,EAAQD,EAASM,GAgB9B,QAAS+C,GAAUiyB,EAAMnmB,GACvB/O,KAAKswB,KACHoc,WAAY,KACZoM,cACAC,cACAC,cACAC,cACA3nC,WACEwnC,cACAC,cACAC,cACAC,gBAGJj5C,KAAK+F,OACHiwB,OACE9lB,MAAO,EACPC,IAAK,EACLurB,YAAa,GAEfwd,QAAS,GAGXl5C,KAAK40B,gBACHE,YAAa,SAEbgR,iBAAiB,EACjBC,iBAAiB,GAEnB/lC,KAAK+O,QAAUpO,EAAK0E,UAAWrF,KAAK40B,gBAEpC50B,KAAKk1B,KAAOA,EAGZl1B,KAAKi1B,UAELj1B,KAAKwT,WAAWzE,GAlDlB,GAAIpO,GAAOT,EAAoB,GAC3BqC,EAAYrC,EAAoB,IAChC6B,EAAW7B,EAAoB,IAC/ByB,EAAWzB,EAAoB,IAC/B2D,EAAS3D,EAAoB,GAiDjC+C,GAASwQ,UAAY,GAAIlR,GAUzBU,EAASwQ,UAAUD,WAAa,SAASzE,GACnCA,IAEFpO,EAAKmF,iBAAiB,cAAe,kBAAmB,kBAAkB,eAAgB9F,KAAK+O,QAASA,GAIpG,UAAYA,KACe,kBAAlBlL,GAAOghC,OAEhBhhC,EAAOghC,OAAO91B,EAAQ81B,QAGtBhhC,EAAOs1C,KAAKpqC,EAAQ81B,WAS5B5hC,EAASwQ,UAAUwhB,QAAU,WAC3Bj1B,KAAKswB,IAAIoc,WAAa76B,SAASM,cAAc,OAC7CnS,KAAKswB,IAAIxkB,WAAa+F,SAASM,cAAc,OAE7CnS,KAAKswB,IAAIoc,WAAW3kC,UAAY,sBAChC/H,KAAKswB,IAAIxkB,WAAW/D,UAAY,uBAMlC9E,EAASwQ,UAAUG,QAAU,WAEvB5T,KAAKswB,IAAIoc,WAAW5iC,YACtB9J,KAAKswB,IAAIoc,WAAW5iC,WAAW2H,YAAYzR,KAAKswB,IAAIoc,YAElD1sC,KAAKswB,IAAIxkB,WAAWhC,YACtB9J,KAAKswB,IAAIxkB,WAAWhC,WAAW2H,YAAYzR,KAAKswB,IAAIxkB,YAGtD9L,KAAKk1B,KAAO,MAOdjyB,EAASwQ,UAAUuO,OAAS,WAC1B,GAAIjT,GAAU/O,KAAK+O,QACfhJ,EAAQ/F,KAAK+F,MACb2mC,EAAa1sC,KAAKswB,IAAIoc,WACtB5gC,EAAa9L,KAAKswB,IAAIxkB,WAGtBg5B,EAAiC,OAAvB/1B,EAAQ+lB,YAAwB90B,KAAKk1B,KAAK5E,IAAI1oB,IAAM5H,KAAKk1B,KAAK5E,IAAIzM,OAC5Eu1B,EAAiB1M,EAAW5iC,aAAeg7B,CAG/C9kC,MAAKqoC,oBAGL,IACIvC,IADc9lC,KAAK+O,QAAQ+lB,YACT90B,KAAK+O,QAAQ+2B,iBAC/BC,EAAkB/lC,KAAK+O,QAAQg3B,eAGnChgC,GAAMuiC,iBAAmBxC,EAAkB//B,EAAMwiC,gBAAkB,EACnExiC,EAAMyiC,iBAAmBzC,EAAkBhgC,EAAM0iC,gBAAkB,EACnE1iC,EAAM+M,OAAS/M,EAAMuiC,iBAAmBviC,EAAMyiC,iBAC9CziC,EAAM8M,MAAQ65B,EAAW/b,YAEzB5qB,EAAM4iC,gBAAkB3oC,KAAKk1B,KAAKC,SAASz1B,KAAKoT,OAAS/M,EAAMyiC,kBACnC,OAAvBz5B,EAAQ+lB,YAAuB90B,KAAKk1B,KAAKC,SAAStR,OAAO/Q,OAAS9S,KAAKk1B,KAAKC,SAASvtB,IAAIkL,QAC9F/M,EAAM2iC,eAAiB,EACvB3iC,EAAM8iC,gBAAkB9iC,EAAM4iC,gBAAkB5iC,EAAMyiC,iBACtDziC,EAAM6iC,eAAiB,CAGvB,IAAIyQ,GAAwB3M,EAAW4M,YACnCC,EAAwBztC,EAAWwtC,WAsBvC,OArBA5M,GAAW5iC,YAAc4iC,EAAW5iC,WAAW2H,YAAYi7B,GAC3D5gC,EAAWhC,YAAcgC,EAAWhC,WAAW2H,YAAY3F,GAE3D4gC,EAAWl/B,MAAMsF,OAAS9S,KAAK+F,MAAM+M,OAAS,KAE9C9S,KAAKw5C,iBAGDH,EACFvU,EAAO5yB,aAAaw6B,EAAY2M,GAGhCvU,EAAO/yB,YAAY26B,GAEjB6M,EACFv5C,KAAKk1B,KAAK5E,IAAIyU,mBAAmB7yB,aAAapG,EAAYytC,GAG1Dv5C,KAAKk1B,KAAK5E,IAAIyU,mBAAmBhzB,YAAYjG,GAGxC9L,KAAKukC,cAAgB6U,GAO9Bn2C,EAASwQ,UAAU+lC,eAAiB,WAClC,GAAI1kB,GAAc90B,KAAK+O,QAAQ+lB,YAG3B5kB,EAAQvP,EAAKiG,QAAQ5G,KAAKk1B,KAAKc,MAAM9lB,MAAO,UAC5CC,EAAMxP,EAAKiG,QAAQ5G,KAAKk1B,KAAKc,MAAM7lB,IAAK,UACxCspC,EAAgBz5C,KAAKk1B,KAAKv0B,KAAKi1B,OAA2C,GAAnC51B,KAAK+F,MAAMikC,gBAAkB,KAASjjC,UAC7E20B,EAAc+d,EAAgB93C,EAASw5B,wBAAwBn7B,KAAKk1B,KAAKI,YAAat1B,KAAKk1B,KAAKc,MAAOyjB,EAC3G/d,IAAe17B,KAAKk1B,KAAKv0B,KAAKi1B,OAAO,GAAG7uB,SAGxC,IAAI2hB,GAAO,GAAI3mB,GAAS,GAAIsC,MAAK6L,GAAQ,GAAI7L,MAAK8L,GAAMurB,EAAa17B,KAAKk1B,KAAKI,YAC/Et1B,MAAK0oB,KAAOA,CAKZ,IAAI4H,GAAMtwB,KAAKswB,GACfA,GAAIhf,UAAUwnC,WAAaxoB,EAAIwoB,WAC/BxoB,EAAIhf,UAAUynC,WAAazoB,EAAIyoB,WAC/BzoB,EAAIhf,UAAU0nC,WAAa1oB,EAAI0oB,WAC/B1oB,EAAIhf,UAAU2nC,WAAa3oB,EAAI2oB,WAC/B3oB,EAAIwoB,cACJxoB,EAAIyoB,cACJzoB,EAAI0oB,cACJ1oB,EAAI2oB,cAEJvwB,EAAK+Z,OAGL,KAFA,GAAIiX,GAAmBnzC,OACnB2G,EAAM,EACHwb,EAAKyU,WAAmB,IAANjwB,GAAY,CACnCA,GACA,IAAIysC,GAAMjxB,EAAKC,aACXtW,EAAIrS,KAAKk1B,KAAKv0B,KAAK60B,SAASmkB,GAC5Blc,EAAU/U,EAAK+U,SAKfz9B,MAAK+O,QAAQ+2B,iBACf9lC,KAAK45C,kBAAkBvnC,EAAGqW,EAAK0b,gBAAiBtP,GAG9C2I,GAAWz9B,KAAK+O,QAAQg3B,iBACtB1zB,EAAI,IACkB9L,QAApBmzC,IACFA,EAAmBrnC,GAErBrS,KAAK65C,kBAAkBxnC,EAAGqW,EAAK4b,gBAAiBxP,IAElD90B,KAAK85C,kBAAkBznC,EAAGyiB,IAG1B90B,KAAK+5C,kBAAkB1nC,EAAGyiB,GAG5BpM,EAAKE,OAIP,GAAI5oB,KAAK+O,QAAQg3B,gBAAiB,CAChC,GAAIiU,GAAWh6C,KAAKk1B,KAAKv0B,KAAKi1B,OAAO,GACjCqkB,EAAWvxB,EAAK4b,cAAc0V,GAC9BE,EAAYD,EAASv0C,QAAU1F,KAAK+F,MAAMgkC,gBAAkB,IAAM,IAE9CxjC,QAApBmzC,GAA6CA,EAAZQ,IACnCl6C,KAAK65C,kBAAkB,EAAGI,EAAUnlB,GAKxCn0B,EAAK4H,QAAQvI,KAAKswB,IAAIhf,UAAW,SAAU6oC,GACzC,KAAOA,EAAIz0C,QAAQ,CACjB,GAAI4B,GAAO6yC,EAAIC,KACX9yC,IAAQA,EAAKwC,YACfxC,EAAKwC,WAAW2H,YAAYnK,OAapCrE,EAASwQ,UAAUmmC,kBAAoB,SAAUvnC,EAAGyX,EAAMgL,GAExD,GAAI9L,GAAQhpB,KAAKswB,IAAIhf,UAAU2nC,WAAWrnC,OAE1C,KAAKoX,EAAO,CAEV,GAAImH,GAAUte,SAASq4B,eAAe,GACtClhB,GAAQnX,SAASM,cAAc,OAC/B6W,EAAMjX,YAAYoe,GAClBnH,EAAMjhB,UAAY,aAClB/H,KAAKswB,IAAIoc,WAAW36B,YAAYiX,GAElChpB,KAAKswB,IAAI2oB,WAAW/wC,KAAK8gB,GAEzBA,EAAMqxB,WAAW,GAAGC,UAAYxwB,EAEhCd,EAAMxb,MAAM5F,IAAsB,OAAfktB,EAAyB90B,KAAK+F,MAAMyiC,iBAAmB,KAAQ,IAClFxf,EAAMxb,MAAMhG,KAAO6K,EAAI,MAWzBpP,EAASwQ,UAAUomC,kBAAoB,SAAUxnC,EAAGyX,EAAMgL,GAExD,GAAI9L,GAAQhpB,KAAKswB,IAAIhf,UAAUynC,WAAWnnC,OAE1C,KAAKoX,EAAO,CAEV,GAAImH,GAAUte,SAASq4B,eAAepgB,EACtCd,GAAQnX,SAASM,cAAc,OAC/B6W,EAAMjhB,UAAY,aAClBihB,EAAMjX,YAAYoe,GAClBnwB,KAAKswB,IAAIoc,WAAW36B,YAAYiX,GAElChpB,KAAKswB,IAAIyoB,WAAW7wC,KAAK8gB,GAEzBA,EAAMqxB,WAAW,GAAGC,UAAYxwB,EAGhCd,EAAMxb,MAAM5F,IAAsB,OAAfktB,EAAwB,IAAO90B,KAAK+F,MAAMuiC,iBAAoB,KACjFtf,EAAMxb,MAAMhG,KAAO6K,EAAI,MASzBpP,EAASwQ,UAAUsmC,kBAAoB,SAAU1nC,EAAGyiB,GAElD,GAAI1E,GAAOpwB,KAAKswB,IAAIhf,UAAU0nC,WAAWpnC,OAEpCwe,KAEHA,EAAOve,SAASM,cAAc,OAC9Bie,EAAKroB,UAAY,sBACjB/H,KAAKswB,IAAIxkB,WAAWiG,YAAYqe,IAElCpwB,KAAKswB,IAAI0oB,WAAW9wC,KAAKkoB,EAEzB,IAAIrqB,GAAQ/F,KAAK+F,KAEfqqB,GAAK5iB,MAAM5F,IADM,OAAfktB,EACe/uB,EAAMyiC,iBAAmB,KAGzBxoC,KAAKk1B,KAAKC,SAASvtB,IAAIkL,OAAS,KAEnDsd,EAAK5iB,MAAMsF,OAAS/M,EAAM4iC,gBAAkB,KAC5CvY,EAAK5iB,MAAMhG,KAAQ6K,EAAItM,EAAM2iC,eAAiB,EAAK,MASrDzlC,EAASwQ,UAAUqmC,kBAAoB,SAAUznC,EAAGyiB,GAElD,GAAI1E,GAAOpwB,KAAKswB,IAAIhf,UAAUwnC,WAAWlnC,OAEpCwe,KAEHA,EAAOve,SAASM,cAAc,OAC9Bie,EAAKroB,UAAY,sBACjB/H,KAAKswB,IAAIxkB,WAAWiG,YAAYqe,IAElCpwB,KAAKswB,IAAIwoB,WAAW5wC,KAAKkoB,EAEzB,IAAIrqB,GAAQ/F,KAAK+F,KAEfqqB,GAAK5iB,MAAM5F,IADM,OAAfktB,EACe,IAGA90B,KAAKk1B,KAAKC,SAASvtB,IAAIkL,OAAS,KAEnDsd,EAAK5iB,MAAMhG,KAAQ6K,EAAItM,EAAM6iC,eAAiB,EAAK,KACnDxY,EAAK5iB,MAAMsF,OAAS/M,EAAM8iC,gBAAkB,MAQ9C5lC,EAASwQ,UAAU40B,mBAAqB,WAKjCroC,KAAKswB,IAAI6Z,mBACZnqC,KAAKswB,IAAI6Z,iBAAmBt4B,SAASM,cAAc,OACnDnS,KAAKswB,IAAI6Z,iBAAiBpiC,UAAY,qBACtC/H,KAAKswB,IAAI6Z,iBAAiB38B,MAAM2W,SAAW,WAE3CnkB,KAAKswB,IAAI6Z,iBAAiBp4B,YAAYF,SAASq4B,eAAe,MAC9DlqC,KAAKswB,IAAIoc,WAAW36B,YAAY/R,KAAKswB,IAAI6Z,mBAE3CnqC,KAAK+F,MAAMwiC,gBAAkBvoC,KAAKswB,IAAI6Z,iBAAiB/kB,aACvDplB,KAAK+F,MAAMikC,eAAiBhqC,KAAKswB,IAAI6Z,iBAAiBpqB,YAGjD/f,KAAKswB,IAAI+Z,mBACZrqC,KAAKswB,IAAI+Z,iBAAmBx4B,SAASM,cAAc,OACnDnS,KAAKswB,IAAI+Z,iBAAiBtiC,UAAY,qBACtC/H,KAAKswB,IAAI+Z,iBAAiB78B,MAAM2W,SAAW,WAE3CnkB,KAAKswB,IAAI+Z,iBAAiBt4B,YAAYF,SAASq4B,eAAe,MAC9DlqC,KAAKswB,IAAIoc,WAAW36B,YAAY/R,KAAKswB,IAAI+Z,mBAE3CrqC,KAAK+F,MAAM0iC,gBAAkBzoC,KAAKswB,IAAI+Z,iBAAiBjlB,aACvDplB,KAAK+F,MAAMgkC,eAAiB/pC,KAAKswB,IAAI+Z,iBAAiBtqB,aASxD9c,EAASwQ,UAAU8hB,KAAO,SAASwD,GACjC,MAAO/4B,MAAK0oB,KAAK6M,KAAKwD,IAGxBl5B,EAAOD,QAAUqD,GAKb,SAASpD,EAAQD,EAASM,GAc9B,QAASgC,GAAM8Q,EAAM0nB,EAAY3rB,GAC/B/O,KAAKK,GAAK,KACVL,KAAK8kC,OAAS,KACd9kC,KAAKgT,KAAOA,EACZhT,KAAKswB,IAAM,KACXtwB,KAAK06B,WAAaA,MAClB16B,KAAK+O,QAAUA,MAEf/O,KAAKkzC,UAAW,EAChBlzC,KAAKmtC,WAAY,EACjBntC,KAAKktC,OAAQ,EAEbltC,KAAK4H,IAAM,KACX5H,KAAKwH,KAAO,KACZxH,KAAK6S,MAAQ,KACb7S,KAAK8S,OAAS,KA3BhB,GAAIwyB,GAASplC,EAAoB,IAC7BS,EAAOT,EAAoB,EA6B/BgC,GAAKuR,UAAU3R,OAAQ,EAKvBI,EAAKuR,UAAU09B,OAAS,WACtBnxC,KAAKkzC,UAAW,EAChBlzC,KAAKktC,OAAQ,EACTltC,KAAKmtC,WAAWntC,KAAKgiB,UAM3B9f,EAAKuR,UAAUy9B,SAAW,WACxBlxC,KAAKkzC,UAAW,EAChBlzC,KAAKktC,OAAQ,EACTltC,KAAKmtC,WAAWntC,KAAKgiB,UAQ3B9f,EAAKuR,UAAU8E,QAAU,SAASvF,GAChChT,KAAKgT,KAAOA,EACZhT,KAAKktC,OAAQ,EACTltC,KAAKmtC,WAAWntC,KAAKgiB,UAO3B9f,EAAKuR,UAAUk6B,UAAY,SAAS7I,GAC9B9kC,KAAKmtC,WACPntC,KAAK0nC,OACL1nC,KAAK8kC,OAASA,EACV9kC,KAAK8kC,QACP9kC,KAAK2nC,QAIP3nC,KAAK8kC,OAASA,GASlB5iC,EAAKuR,UAAUs7B,UAAY,WAEzB,OAAO,GAOT7sC,EAAKuR,UAAUk0B,KAAO,WACpB,OAAO,GAOTzlC,EAAKuR,UAAUi0B,KAAO,WACpB,OAAO,GAMTxlC,EAAKuR,UAAUuO,OAAS,aAOxB9f,EAAKuR,UAAUm7B,YAAc,aAO7B1sC,EAAKuR,UAAU+5B,YAAc,aAS7BtrC,EAAKuR,UAAU8mC,qBAAuB,SAAUC,GAC9C,GAAIx6C,KAAKkzC,UAAYlzC,KAAK+O,QAAQogC,SAASv4B,SAAW5W,KAAKswB,IAAImqB,aAAc,CAE3E,GAAIhmC,GAAKzU,KAELy6C,EAAe5oC,SAASM,cAAc,MAC1CsoC,GAAa1yC,UAAY,SACzB0yC,EAAazV,MAAQ,mBAErBM,EAAOmV,GACLlxC,gBAAgB,IACfsK,GAAG,MAAO,SAAUrK,GACrBiL,EAAGqwB,OAAOkJ,kBAAkBv5B,GAC5BjL,EAAMm8B,oBAGR6U,EAAOzoC,YAAY0oC,GACnBz6C,KAAKswB,IAAImqB,aAAeA,OAEhBz6C,KAAKkzC,UAAYlzC,KAAKswB,IAAImqB,eAE9Bz6C,KAAKswB,IAAImqB,aAAa3wC,YACxB9J,KAAKswB,IAAImqB,aAAa3wC,WAAW2H,YAAYzR,KAAKswB,IAAImqB,cAExDz6C,KAAKswB,IAAImqB,aAAe,OAS5Bv4C,EAAKuR,UAAUinC,gBAAkB,SAAU5xC,GACzC,GAAIqnB,EACJ,IAAInwB,KAAK+O,QAAQ4rC,SAAU,CACzB,GAAIvjB,GAAWp3B,KAAK8kC,OAAO1O,QAAQC,UAAU7gB,IAAIxV,KAAKK,GACtD8vB,GAAUnwB,KAAK+O,QAAQ4rC,SAASvjB,OAGhCjH,GAAUnwB,KAAKgT,KAAKmd,OAGtB,IAAGA,IAAYnwB,KAAKmwB,QAAS,CAE3B,GAAIA,YAAmByc,SACrB9jC,EAAQ0b,UAAY,GACpB1b,EAAQiJ,YAAYoe,OAEjB,IAAe5pB,QAAX4pB,EACPrnB,EAAQ0b,UAAY2L,MAGpB,IAAwB,cAAlBnwB,KAAKgT,KAAKnM,MAA8CN,SAAtBvG,KAAKgT,KAAKmd,QAChD,KAAM,IAAIvsB,OAAM,sCAAwC5D,KAAKK,GAIjEL,MAAKmwB,QAAUA,IASnBjuB,EAAKuR,UAAUmnC,aAAe,SAAU9xC,GACf,MAAnB9I,KAAKgT,KAAKgyB,MACZl8B,EAAQk8B,MAAQhlC,KAAKgT,KAAKgyB,OAAS,GAGnCl8B,EAAQ+xC,gBAAgB,UAS3B34C,EAAKuR,UAAUqnC,sBAAwB,SAAShyC,GAC/C,GAAI9I,KAAK+O,QAAQgsC,gBAAkB/6C,KAAK+O,QAAQgsC,eAAer1C,OAAS,EAAG,CACzE,GAAIs1C,KAEJ,IAAIh1C,MAAMC,QAAQjG,KAAK+O,QAAQgsC,gBAC7BC,EAAah7C,KAAK+O,QAAQgsC,mBAEvB,CAAA,GAAmC,OAA/B/6C,KAAK+O,QAAQgsC,eAIpB,MAHAC,GAAa10C,OAAOqH,KAAK3N,KAAKgT,MAMhC,IAAK,GAAIzN,GAAI,EAAGA,EAAIy1C,EAAWt1C,OAAQH,IAAK,CAC1C,GAAIiR,GAAOwkC,EAAWz1C,GAClB6B,EAAQpH,KAAKgT,KAAKwD,EAET,OAATpP,EACF0B,EAAQmyC,aAAa,QAAUzkC,EAAMpP,GAGrC0B,EAAQ+xC,gBAAgB,QAAUrkC,MAW1CtU,EAAKuR,UAAUynC,aAAe,SAASpyC,GAEjC9I,KAAKwN,QACP7M,EAAKqN,cAAclF,EAAS9I,KAAKwN,OACjCxN,KAAKwN,MAAQ,MAIXxN,KAAKgT,KAAKxF,QACZ7M,EAAKkN,WAAW/E,EAAS9I,KAAKgT,KAAKxF,OACnCxN,KAAKwN,MAAQxN,KAAKgT,KAAKxF,QAI3B3N,EAAOD,QAAUsC,GAKb,SAASrC,EAAQD,EAASM,GAkB9B,QAASiC,GAAgB6Q,EAAM0nB,EAAY3rB,GASzC,GARA/O,KAAK+F,OACHoqB,SACEtd,MAAO,IAGX7S,KAAKokB,UAAW,EAGZpR,EAAM,CACR,GAAkBzM,QAAdyM,EAAK9C,MACP,KAAM,IAAItM,OAAM,oCAAsCoP,EAAK3S,GAE7D,IAAgBkG,QAAZyM,EAAK7C,IACP,KAAM,IAAIvM,OAAM,kCAAoCoP,EAAK3S,IAI7D6B,EAAK3B,KAAKP,KAAMgT,EAAM0nB,EAAY3rB,GAElC/O,KAAKm7C,cAAe,EApCtB,GACIj5C,IADShC,EAAoB,IACtBA,EAAoB,KAC3B2C,EAAkB3C,EAAoB,IACtCoC,EAAYpC,EAAoB,GAoCpCiC,GAAesR,UAAY,GAAIvR,GAAM,KAAM,KAAM,MAEjDC,EAAesR,UAAU2nC,cAAgB,kBACzCj5C,EAAesR,UAAU3R,OAAQ,EAOjCK,EAAesR,UAAUs7B,UAAY,SAAS/Y,GAE5C,MAAQh2B,MAAKgT,KAAK9C,MAAQ8lB,EAAM7lB,KAASnQ,KAAKgT,KAAK7C,IAAM6lB,EAAM9lB,OAMjE/N,EAAesR,UAAUuO,OAAS,WAChC,GAAIsO,GAAMtwB,KAAKswB,GAuBf,IAtBKA,IAEHtwB,KAAKswB,OACLA,EAAMtwB,KAAKswB,IAGXA,EAAImgB,IAAM5+B,SAASM,cAAc,OAIjCme,EAAIH,QAAUte,SAASM,cAAc,OACrCme,EAAIH,QAAQpoB,UAAY,UACxBuoB,EAAImgB,IAAI1+B,YAAYue,EAAIH,SAMxBnwB,KAAKktC,OAAQ,IAIVltC,KAAK8kC,OACR,KAAM,IAAIlhC,OAAM,yCAElB,KAAK0sB,EAAImgB,IAAI3mC,WAAY,CACvB,GAAIgC,GAAa9L,KAAK8kC,OAAOxU,IAAIxkB,UACjC,KAAKA,EACH,KAAM,IAAIlI,OAAM,iEAElBkI,GAAWiG,YAAYue,EAAImgB,KAQ7B,GANAzwC,KAAKmtC,WAAY,EAMbntC,KAAKktC,MAAO,CACdltC,KAAK06C,gBAAgB16C,KAAKswB,IAAIH,SAC9BnwB,KAAK46C,aAAa56C,KAAKswB,IAAIH,SAC3BnwB,KAAK86C,sBAAsB96C,KAAKswB,IAAIH,SACpCnwB,KAAKk7C,aAAal7C,KAAKswB,IAAImgB,IAG3B,IAAI1oC,IAAa/H,KAAKgT,KAAKjL,UAAa,IAAM/H,KAAKgT,KAAKjL,UAAa,KAChE/H,KAAKkzC,SAAW,YAAc,GACnC5iB,GAAImgB,IAAI1oC,UAAY/H,KAAKo7C,cAAgBrzC,EAGzC/H,KAAKokB,SAA6D,WAAlD3c,OAAOotC,iBAAiBvkB,EAAIH,SAAS/L,SAGrDpkB,KAAK+F,MAAMoqB,QAAQtd,MAAQ7S,KAAKswB,IAAIH,QAAQQ,YAC5C3wB,KAAK8S,OAAS,EAEd9S,KAAKktC,OAAQ,IAQjB/qC,EAAesR,UAAUk0B,KAAOrlC,EAAUmR,UAAUk0B,KAMpDxlC,EAAesR,UAAUi0B,KAAOplC,EAAUmR,UAAUi0B,KAMpDvlC,EAAesR,UAAUm7B,YAActsC,EAAUmR,UAAUm7B,YAM3DzsC,EAAesR,UAAU+5B,YAAc,SAASvzB,GAC9C,GAAIohC,GAAqC,QAA7Br7C,KAAK+O,QAAQ+lB,WACzB90B,MAAKswB,IAAIH,QAAQ3iB,MAAM5F,IAAMyzC,EAAQ,GAAK,IAC1Cr7C,KAAKswB,IAAIH,QAAQ3iB,MAAMqW,OAASw3B,EAAQ,IAAM,EAC9C,IAAIvoC,EAGJ,IAA2BvM,SAAvBvG,KAAKgT,KAAK+uB,SAAwB,CACpC,GAAIuZ,GAAet7C,KAAKgT,KAAK+uB,SACzBF,EAAY7hC,KAAK8kC,OAAOjD,UACxBqK,EAAgBrK,EAAUyZ,GAAcjzC,KAE5C,IAAa,GAATgzC,EAAe,CAEjBvoC,EAAS9S,KAAK8kC,OAAOjD,UAAUyZ,GAAcxoC,OAASmH,EAAOtK,KAAKqW,SAClElT,GAA2B,GAAjBo5B,EAAqBjyB,EAAOunB,KAAO,GAAIvnB,EAAOtK,KAAKqW,SAAW,CACxE,IAAI8b,GAAS9hC,KAAK8kC,OAAOl9B,GACzB,KAAK,GAAIm6B,KAAYF,GACfA,EAAUh8B,eAAek8B,IACQ,GAA/BF,EAAUE,GAAU9Y,SAAmB4Y,EAAUE,GAAU15B,MAAQ6jC,IACrEpK,GAAUD,EAAUE,GAAUjvB,OAASmH,EAAOtK,KAAKqW,SAMzD8b,IAA2B,GAAjBoK,EAAqBjyB,EAAOunB,KAAO,GAAMvnB,EAAOtK,KAAKqW,SAAW,EAC1EhmB,KAAKswB,IAAImgB,IAAIjjC,MAAM5F,IAAMk6B,EAAS,KAClC9hC,KAAKswB,IAAImgB,IAAIjjC,MAAMqW,OAAS,OAGzB,CACH,GAAIie,GAAS9hC,KAAK8kC,OAAOl9B,GACzB,KAAK,GAAIm6B,KAAYF,GACfA,EAAUh8B,eAAek8B,IACQ,GAA/BF,EAAUE,GAAU9Y,SAAmB4Y,EAAUE,GAAU15B,MAAQ6jC,IACrEpK,GAAUD,EAAUE,GAAUjvB,OAASmH,EAAOtK,KAAKqW,SAIzDlT,GAAS9S,KAAK8kC,OAAOjD,UAAUyZ,GAAcxoC,OAASmH,EAAOtK,KAAKqW,SAClEhmB,KAAKswB,IAAImgB,IAAIjjC,MAAM5F,IAAMk6B,EAAS,KAClC9hC,KAAKswB,IAAImgB,IAAIjjC,MAAMqW,OAAS,QAM1B7jB,MAAK8kC,iBAAkBjiC,IAEzBiQ,EAAS7N,KAAKiI,IAAIlN,KAAK8kC,OAAOhyB,OAC1B9S,KAAK8kC,OAAO1O,QAAQlB,KAAKC,SAASzI,OAAO5Z,OACzC9S,KAAK8kC,OAAO1O,QAAQlB,KAAKC,SAASgD,gBAAgBrlB,QACtD9S,KAAKswB,IAAImgB,IAAIjjC,MAAM5F,IAAMyzC,EAAQ,IAAM,GACvCr7C,KAAKswB,IAAImgB,IAAIjjC,MAAMqW,OAASw3B,EAAQ,GAAK,MAGzCvoC,EAAS9S,KAAK8kC,OAAOhyB,OAErB9S,KAAKswB,IAAImgB,IAAIjjC,MAAM5F,IAAM5H,KAAK8kC,OAAOl9B,IAAM,KAC3C5H,KAAKswB,IAAImgB,IAAIjjC,MAAMqW,OAAS,GAGhC7jB,MAAKswB,IAAImgB,IAAIjjC,MAAMsF,OAASA,EAAS,MAGvCjT,EAAOD,QAAUuC,GAKb,SAAStC,EAAQD,EAASM,GAe9B,QAASkC,GAAS4Q,EAAM0nB,EAAY3rB,GAalC,GAZA/O,KAAK+F,OACHsqB,KACExd,MAAO,EACPC,OAAQ,GAEVsd,MACEvd,MAAO,EACPC,OAAQ,IAKRE,GACgBzM,QAAdyM,EAAK9C,MACP,KAAM,IAAItM,OAAM,oCAAsCoP,EAI1D9Q,GAAK3B,KAAKP,KAAMgT,EAAM0nB,EAAY3rB,GAhCpC,CAAA,GAAI7M,GAAOhC,EAAoB,GACpBA,GAAoB,GAkC/BkC,EAAQqR,UAAY,GAAIvR,GAAM,KAAM,KAAM,MAO1CE,EAAQqR,UAAUs7B,UAAY,SAAS/Y,GAGrC,GAAIjD,IAAYiD,EAAM7lB,IAAM6lB,EAAM9lB,OAAS,CAC3C,OAAQlQ,MAAKgT,KAAK9C,MAAQ8lB,EAAM9lB,MAAQ6iB,GAAc/yB,KAAKgT,KAAK9C,MAAQ8lB,EAAM7lB,IAAM4iB,GAMtF3wB,EAAQqR,UAAUuO,OAAS,WACzB,GAAIsO,GAAMtwB,KAAKswB,GA6Bf,IA5BKA,IAEHtwB,KAAKswB,OACLA,EAAMtwB,KAAKswB,IAGXA,EAAImgB,IAAM5+B,SAASM,cAAc,OAGjCme,EAAIH,QAAUte,SAASM,cAAc,OACrCme,EAAIH,QAAQpoB,UAAY,UACxBuoB,EAAImgB,IAAI1+B,YAAYue,EAAIH,SAGxBG,EAAIF,KAAOve,SAASM,cAAc,OAClCme,EAAIF,KAAKroB,UAAY,OAGrBuoB,EAAID,IAAMxe,SAASM,cAAc,OACjCme,EAAID,IAAItoB,UAAY,MAGpBuoB,EAAImgB,IAAI,iBAAmBzwC,KAE3BA,KAAKktC,OAAQ,IAIVltC,KAAK8kC,OACR,KAAM,IAAIlhC,OAAM,yCAElB,KAAK0sB,EAAImgB,IAAI3mC,WAAY,CACvB,GAAI4iC,GAAa1sC,KAAK8kC,OAAOxU,IAAIoc,UACjC,KAAKA,EAAY,KAAM,IAAI9oC,OAAM,iEACjC8oC,GAAW36B,YAAYue,EAAImgB,KAE7B,IAAKngB,EAAIF,KAAKtmB,WAAY,CACxB,GAAIgC,GAAa9L,KAAK8kC,OAAOxU,IAAIxkB,UACjC,KAAKA,EAAY,KAAM,IAAIlI,OAAM,iEACjCkI,GAAWiG,YAAYue,EAAIF,MAE7B,IAAKE,EAAID,IAAIvmB,WAAY,CACvB,GAAI03B,GAAOxhC,KAAK8kC,OAAOxU,IAAIkR,IAC3B,KAAK11B,EAAY,KAAM,IAAIlI,OAAM,2DACjC49B,GAAKzvB,YAAYue,EAAID,KAQvB,GANArwB,KAAKmtC,WAAY,EAMbntC,KAAKktC,MAAO,CACdltC,KAAK06C,gBAAgB16C,KAAKswB,IAAIH,SAC9BnwB,KAAK46C,aAAa56C,KAAKswB,IAAImgB,KAC3BzwC,KAAK86C,sBAAsB96C,KAAKswB,IAAImgB,KACpCzwC,KAAKk7C,aAAal7C,KAAKswB,IAAImgB,IAG3B,IAAI1oC,IAAa/H,KAAKgT,KAAKjL,UAAW,IAAM/H,KAAKgT,KAAKjL,UAAY,KAC7D/H,KAAKkzC,SAAW,YAAc,GACnC5iB,GAAImgB,IAAI1oC,UAAY,WAAaA,EACjCuoB,EAAIF,KAAKroB,UAAY,YAAcA,EACnCuoB,EAAID,IAAItoB,UAAa,WAAaA,EAGlC/H,KAAK+F,MAAMsqB,IAAIvd,OAASwd,EAAID,IAAIQ,aAChC7wB,KAAK+F,MAAMsqB,IAAIxd,MAAQyd,EAAID,IAAIM,YAC/B3wB,KAAK+F,MAAMqqB,KAAKvd,MAAQyd,EAAIF,KAAKO,YACjC3wB,KAAK6S,MAAQyd,EAAImgB,IAAI9f,YACrB3wB,KAAK8S,OAASwd,EAAImgB,IAAI5f,aAEtB7wB,KAAKktC,OAAQ,EAGfltC,KAAKu6C,qBAAqBjqB,EAAImgB,MAOhCruC,EAAQqR,UAAUk0B,KAAO,WAClB3nC,KAAKmtC,WACRntC,KAAKgiB,UAOT5f,EAAQqR,UAAUi0B,KAAO,WACvB,GAAI1nC,KAAKmtC,UAAW,CAClB,GAAI7c,GAAMtwB,KAAKswB,GAEXA,GAAImgB,IAAI3mC,YAAcwmB,EAAImgB,IAAI3mC,WAAW2H,YAAY6e,EAAImgB,KACzDngB,EAAIF,KAAKtmB,YAAawmB,EAAIF,KAAKtmB,WAAW2H,YAAY6e,EAAIF,MAC1DE,EAAID,IAAIvmB,YAAcwmB,EAAID,IAAIvmB,WAAW2H,YAAY6e,EAAID,KAE7DrwB,KAAK4H,IAAM,KACX5H,KAAKwH,KAAO,KAEZxH,KAAKmtC,WAAY,IAQrB/qC,EAAQqR,UAAUm7B,YAAc,WAC9B,GAAI1+B,GAAQlQ,KAAK06B,WAAWlF,SAASx1B,KAAKgT,KAAK9C,OAC3C8+B,EAAQhvC,KAAK+O,QAAQigC,MAErByB,EAAMzwC,KAAKswB,IAAImgB,IACfrgB,EAAOpwB,KAAKswB,IAAIF,KAChBC,EAAMrwB,KAAKswB,IAAID,GAIjBrwB,MAAKwH,KADM,SAATwnC,EACU9+B,EAAQlQ,KAAK6S,MAET,QAATm8B,EACK9+B,EAIAA,EAAQlQ,KAAK6S,MAAQ,EAInC49B,EAAIjjC,MAAMhG,KAAOxH,KAAKwH,KAAO,KAG7B4oB,EAAK5iB,MAAMhG,KAAQ0I,EAAQlQ,KAAK+F,MAAMqqB,KAAKvd,MAAQ,EAAK,KAGxDwd,EAAI7iB,MAAMhG,KAAQ0I,EAAQlQ,KAAK+F,MAAMsqB,IAAIxd,MAAQ,EAAK,MAOxDzQ,EAAQqR,UAAU+5B,YAAc,WAC9B,GAAI1Y,GAAc90B,KAAK+O,QAAQ+lB,YAC3B2b,EAAMzwC,KAAKswB,IAAImgB,IACfrgB,EAAOpwB,KAAKswB,IAAIF,KAChBC,EAAMrwB,KAAKswB,IAAID,GAEnB,IAAmB,OAAfyE,EACF2b,EAAIjjC,MAAM5F,KAAW5H,KAAK4H,KAAO,GAAK,KAEtCwoB,EAAK5iB,MAAM5F,IAAS,IACpBwoB,EAAK5iB,MAAMsF,OAAU9S,KAAK8kC,OAAOl9B,IAAM5H,KAAK4H,IAAM,EAAK,KACvDwoB,EAAK5iB,MAAMqW,OAAS,OAEjB,CACH,GAAI03B,GAAgBv7C,KAAK8kC,OAAO1O,QAAQrwB,MAAM+M,OAC1Cge,EAAayqB,EAAgBv7C,KAAK8kC,OAAOl9B,IAAM5H,KAAK8kC,OAAOhyB,OAAS9S,KAAK4H,GAE7E6oC,GAAIjjC,MAAM5F,KAAW5H,KAAK8kC,OAAOhyB,OAAS9S,KAAK4H,IAAM5H,KAAK8S,QAAU,GAAK,KACzEsd,EAAK5iB,MAAM5F,IAAU2zC,EAAgBzqB,EAAc,KACnDV,EAAK5iB,MAAMqW,OAAS,IAGtBwM,EAAI7iB,MAAM5F,KAAQ5H,KAAK+F,MAAMsqB,IAAIvd,OAAS,EAAK,MAGjDjT,EAAOD,QAAUwC,GAKb,SAASvC,EAAQD,EAASM,GAc9B,QAASmC,GAAW2Q,EAAM0nB,EAAY3rB,GAcpC,GAbA/O,KAAK+F,OACHsqB,KACEzoB,IAAK,EACLiL,MAAO,EACPC,OAAQ,GAEVqd,SACErd,OAAQ,EACR0oC,WAAY,IAKZxoC,GACgBzM,QAAdyM,EAAK9C,MACP,KAAM,IAAItM,OAAM,oCAAsCoP,EAI1D9Q,GAAK3B,KAAKP,KAAMgT,EAAM0nB,EAAY3rB,GAhCpC,GAAI7M,GAAOhC,EAAoB,GAmC/BmC,GAAUoR,UAAY,GAAIvR,GAAM,KAAM,KAAM,MAO5CG,EAAUoR,UAAUs7B,UAAY,SAAS/Y,GAGvC,GAAIjD,IAAYiD,EAAM7lB,IAAM6lB,EAAM9lB,OAAS,CAC3C,OAAQlQ,MAAKgT,KAAK9C,MAAQ8lB,EAAM9lB,MAAQ6iB,GAAc/yB,KAAKgT,KAAK9C,MAAQ8lB,EAAM7lB,IAAM4iB,GAMtF1wB,EAAUoR,UAAUuO,OAAS,WAC3B,GAAIsO,GAAMtwB,KAAKswB,GA0Bf,IAzBKA,IAEHtwB,KAAKswB,OACLA,EAAMtwB,KAAKswB,IAGXA,EAAI9d,MAAQX,SAASM,cAAc,OAInCme,EAAIH,QAAUte,SAASM,cAAc,OACrCme,EAAIH,QAAQpoB,UAAY,UACxBuoB,EAAI9d,MAAMT,YAAYue,EAAIH,SAG1BG,EAAID,IAAMxe,SAASM,cAAc,OACjCme,EAAI9d,MAAMT,YAAYue,EAAID,KAG1BC,EAAI9d,MAAM,iBAAmBxS,KAE7BA,KAAKktC,OAAQ,IAIVltC,KAAK8kC,OACR,KAAM,IAAIlhC,OAAM,yCAElB,KAAK0sB,EAAI9d,MAAM1I,WAAY,CACzB,GAAI4iC,GAAa1sC,KAAK8kC,OAAOxU,IAAIoc,UACjC,KAAKA,EACH,KAAM,IAAI9oC,OAAM,iEAElB8oC,GAAW36B,YAAYue,EAAI9d,OAQ7B,GANAxS,KAAKmtC,WAAY,EAMbntC,KAAKktC,MAAO,CACdltC,KAAK06C,gBAAgB16C,KAAKswB,IAAIH,SAC9BnwB,KAAK46C,aAAa56C,KAAKswB,IAAI9d,OAC3BxS,KAAK86C,sBAAsB96C,KAAKswB,IAAI9d,OACpCxS,KAAKk7C,aAAal7C,KAAKswB,IAAI9d,MAG3B,IAAIzK,IAAa/H,KAAKgT,KAAKjL,UAAW,IAAM/H,KAAKgT,KAAKjL,UAAY,KAC7D/H,KAAKkzC,SAAW,YAAc,GACnC5iB,GAAI9d,MAAMzK,UAAa,aAAeA,EACtCuoB,EAAID,IAAItoB,UAAa,WAAaA,EAGlC/H,KAAK6S,MAAQyd,EAAI9d,MAAMme,YACvB3wB,KAAK8S,OAASwd,EAAI9d,MAAMqe,aACxB7wB,KAAK+F,MAAMsqB,IAAIxd,MAAQyd,EAAID,IAAIM,YAC/B3wB,KAAK+F,MAAMsqB,IAAIvd,OAASwd,EAAID,IAAIQ,aAChC7wB,KAAK+F,MAAMoqB,QAAQrd,OAASwd,EAAIH,QAAQU,aAGxCP,EAAIH,QAAQ3iB,MAAMguC,WAAa,EAAIx7C,KAAK+F,MAAMsqB,IAAIxd,MAAQ,KAG1Dyd,EAAID,IAAI7iB,MAAM5F,KAAQ5H,KAAK8S,OAAS9S,KAAK+F,MAAMsqB,IAAIvd,QAAU,EAAK,KAClEwd,EAAID,IAAI7iB,MAAMhG,KAAQxH,KAAK+F,MAAMsqB,IAAIxd,MAAQ,EAAK,KAElD7S,KAAKktC,OAAQ,EAGfltC,KAAKu6C,qBAAqBjqB,EAAI9d,QAOhCnQ,EAAUoR,UAAUk0B,KAAO,WACpB3nC,KAAKmtC,WACRntC,KAAKgiB,UAOT3f,EAAUoR,UAAUi0B,KAAO,WACrB1nC,KAAKmtC,YACHntC,KAAKswB,IAAI9d,MAAM1I,YACjB9J,KAAKswB,IAAI9d,MAAM1I,WAAW2H,YAAYzR,KAAKswB,IAAI9d,OAGjDxS,KAAK4H,IAAM,KACX5H,KAAKwH,KAAO,KAEZxH,KAAKmtC,WAAY,IAQrB9qC,EAAUoR,UAAUm7B,YAAc,WAChC,GAAI1+B,GAAQlQ,KAAK06B,WAAWlF,SAASx1B,KAAKgT,KAAK9C,MAE/ClQ,MAAKwH,KAAO0I,EAAQlQ,KAAK+F,MAAMsqB,IAAIxd,MAGnC7S,KAAKswB,IAAI9d,MAAMhF,MAAMhG,KAAOxH,KAAKwH,KAAO,MAO1CnF,EAAUoR,UAAU+5B,YAAc,WAChC,GAAI1Y,GAAc90B,KAAK+O,QAAQ+lB,YAC3BtiB,EAAQxS,KAAKswB,IAAI9d,KAGnBA,GAAMhF,MAAM5F,IADK,OAAfktB,EACgB90B,KAAK4H,IAAM,KAGV5H,KAAK8kC,OAAOhyB,OAAS9S,KAAK4H,IAAM5H,KAAK8S,OAAU,MAItEjT,EAAOD,QAAUyC,GAKb,SAASxC,EAAQD,EAASM,GAe9B,QAASoC,GAAW0Q,EAAM0nB,EAAY3rB,GASpC,GARA/O,KAAK+F,OACHoqB,SACEtd,MAAO,IAGX7S,KAAKokB,UAAW,EAGZpR,EAAM,CACR,GAAkBzM,QAAdyM,EAAK9C,MACP,KAAM,IAAItM,OAAM,oCAAsCoP,EAAK3S,GAE7D,IAAgBkG,QAAZyM,EAAK7C,IACP,KAAM,IAAIvM,OAAM,kCAAoCoP,EAAK3S,IAI7D6B,EAAK3B,KAAKP,KAAMgT,EAAM0nB,EAAY3rB,GA/BpC,GAAIu2B,GAASplC,EAAoB,IAC7BgC,EAAOhC,EAAoB,GAiC/BoC,GAAUmR,UAAY,GAAIvR,GAAM,KAAM,KAAM,MAE5CI,EAAUmR,UAAU2nC,cAAgB,aAOpC94C,EAAUmR,UAAUs7B,UAAY,SAAS/Y,GAEvC,MAAQh2B,MAAKgT,KAAK9C,MAAQ8lB,EAAM7lB,KAASnQ,KAAKgT,KAAK7C,IAAM6lB,EAAM9lB,OAMjE5N,EAAUmR,UAAUuO,OAAS,WAC3B,GAAIsO,GAAMtwB,KAAKswB,GAsBf,IArBKA,IAEHtwB,KAAKswB,OACLA,EAAMtwB,KAAKswB,IAGXA,EAAImgB,IAAM5+B,SAASM,cAAc,OAIjCme,EAAIH,QAAUte,SAASM,cAAc,OACrCme,EAAIH,QAAQpoB,UAAY,UACxBuoB,EAAImgB,IAAI1+B,YAAYue,EAAIH,SAGxBG,EAAImgB,IAAI,iBAAmBzwC,KAE3BA,KAAKktC,OAAQ,IAIVltC,KAAK8kC,OACR,KAAM,IAAIlhC,OAAM,yCAElB,KAAK0sB,EAAImgB,IAAI3mC,WAAY,CACvB,GAAI4iC,GAAa1sC,KAAK8kC,OAAOxU,IAAIoc,UACjC,KAAKA,EACH,KAAM,IAAI9oC,OAAM,iEAElB8oC,GAAW36B,YAAYue,EAAImgB,KAQ7B,GANAzwC,KAAKmtC,WAAY,EAMbntC,KAAKktC,MAAO,CACdltC,KAAK06C,gBAAgB16C,KAAKswB,IAAIH,SAC9BnwB,KAAK46C,aAAa56C,KAAKswB,IAAImgB,KAC3BzwC,KAAK86C,sBAAsB96C,KAAKswB,IAAImgB,KACpCzwC,KAAKk7C,aAAal7C,KAAKswB,IAAImgB,IAG3B,IAAI1oC,IAAa/H,KAAKgT,KAAKjL,UAAa,IAAM/H,KAAKgT,KAAKjL,UAAa,KAChE/H,KAAKkzC,SAAW,YAAc,GACnC5iB,GAAImgB,IAAI1oC,UAAY/H,KAAKo7C,cAAgBrzC,EAGzC/H,KAAKokB,SAA6D,WAAlD3c,OAAOotC,iBAAiBvkB,EAAIH,SAAS/L,SAKrDpkB,KAAKswB,IAAIH,QAAQ3iB,MAAMiuC,SAAW,OAClCz7C,KAAK+F,MAAMoqB,QAAQtd,MAAQ7S,KAAKswB,IAAIH,QAAQQ,YAC5C3wB,KAAK8S,OAAS9S,KAAKswB,IAAImgB,IAAI5f,aAC3B7wB,KAAKswB,IAAIH,QAAQ3iB,MAAMiuC,SAAW,GAElCz7C,KAAKktC,OAAQ,EAGfltC,KAAKu6C,qBAAqBjqB,EAAImgB,KAC9BzwC,KAAK07C,mBACL17C,KAAK27C,qBAOPr5C,EAAUmR,UAAUk0B,KAAO,WACpB3nC,KAAKmtC,WACRntC,KAAKgiB,UAQT1f,EAAUmR,UAAUi0B,KAAO,WACzB,GAAI1nC,KAAKmtC,UAAW,CAClB,GAAIsD,GAAMzwC,KAAKswB,IAAImgB,GAEfA,GAAI3mC,YACN2mC,EAAI3mC,WAAW2H,YAAYg/B,GAG7BzwC,KAAK4H,IAAM,KACX5H,KAAKwH,KAAO,KAEZxH,KAAKmtC,WAAY,IAQrB7qC,EAAUmR,UAAUm7B,YAAc,WAChC,GAGIgN,GACAlrB,EAJAmrB,EAAc77C,KAAK8kC,OAAOjyB,MAC1B3C,EAAQlQ,KAAK06B,WAAWlF,SAASx1B,KAAKgT,KAAK9C,OAC3CC,EAAMnQ,KAAK06B,WAAWlF,SAASx1B,KAAKgT,KAAK7C,MAKhC0rC,EAAT3rC,IACFA,GAAS2rC,GAEP1rC,EAAM,EAAI0rC,IACZ1rC,EAAM,EAAI0rC,EAEZ,IAAIC,GAAW72C,KAAKiI,IAAIiD,EAAMD,EAAO,EAoBrC,QAlBIlQ,KAAKokB,UACPpkB,KAAKwH,KAAO0I,EACZlQ,KAAK6S,MAAQipC,EAAW97C,KAAK+F,MAAMoqB,QAAQtd,MAC3C6d,EAAe1wB,KAAK+F,MAAMoqB,QAAQtd,QAOlC7S,KAAKwH,KAAO0I,EACZlQ,KAAK6S,MAAQipC,EACbprB,EAAezrB,KAAKwG,IAAI0E,EAAMD,EAAQ,EAAIlQ,KAAK+O,QAAQwV,QAASvkB,KAAK+F,MAAMoqB,QAAQtd,QAGrF7S,KAAKswB,IAAImgB,IAAIjjC,MAAMhG,KAAOxH,KAAKwH,KAAO,KACtCxH,KAAKswB,IAAImgB,IAAIjjC,MAAMqF,MAAQipC,EAAW,KAE9B97C,KAAK+O,QAAQigC,OACnB,IAAK,OACHhvC,KAAKswB,IAAIH,QAAQ3iB,MAAMhG,KAAO,GAC9B,MAEF,KAAK,QACHxH,KAAKswB,IAAIH,QAAQ3iB,MAAMhG,KAAOvC,KAAKiI,IAAK4uC,EAAWprB,EAAe,EAAI1wB,KAAK+O,QAAQwV,QAAU,GAAK,IAClG,MAEF,KAAK,SACHvkB,KAAKswB,IAAIH,QAAQ3iB,MAAMhG,KAAOvC,KAAKiI,KAAK4uC,EAAWprB,EAAe,EAAI1wB,KAAK+O,QAAQwV,SAAW,EAAG,GAAK,IACtG,MAEF,SAIMq3B,EAFA57C,KAAKokB,SACHjU,EAAM,EACMlL,KAAKiI,KAAKgD,EAAO,IAGhBwgB,EAIL,EAARxgB,EACYjL,KAAKwG,KAAKyE,EACnBC,EAAMD,EAAQwgB,EAAe,EAAI1wB,KAAK+O,QAAQwV,SAIrC,EAGlBvkB,KAAKswB,IAAIH,QAAQ3iB,MAAMhG,KAAOo0C,EAAc,OAQlDt5C,EAAUmR,UAAU+5B,YAAc,WAChC,GAAI1Y,GAAc90B,KAAK+O,QAAQ+lB,YAC3B2b,EAAMzwC,KAAKswB,IAAImgB,GAGjBA,GAAIjjC,MAAM5F,IADO,OAAfktB,EACc90B,KAAK4H,IAAM,KAGV5H,KAAK8kC,OAAOhyB,OAAS9S,KAAK4H,IAAM5H,KAAK8S,OAAU,MAQpExQ,EAAUmR,UAAUioC,iBAAmB,WACrC,GAAI17C,KAAKkzC,UAAYlzC,KAAK+O,QAAQogC,SAASC,aAAepvC,KAAKswB,IAAIyrB,SAAU,CAE3E,GAAIA,GAAWlqC,SAASM,cAAc,MACtC4pC,GAASh0C,UAAY,YACrBg0C,EAAS5I,aAAenzC,KAGxBslC,EAAOyW,GACLxyC,gBAAgB,IACfsK,GAAG,OAAQ,cAId7T,KAAKswB,IAAImgB,IAAI1+B,YAAYgqC,GACzB/7C,KAAKswB,IAAIyrB,SAAWA,OAEZ/7C,KAAKkzC,UAAYlzC,KAAKswB,IAAIyrB,WAE9B/7C,KAAKswB,IAAIyrB,SAASjyC,YACpB9J,KAAKswB,IAAIyrB,SAASjyC,WAAW2H,YAAYzR,KAAKswB,IAAIyrB,UAEpD/7C,KAAKswB,IAAIyrB,SAAW,OAQxBz5C,EAAUmR,UAAUkoC,kBAAoB,WACtC,GAAI37C,KAAKkzC,UAAYlzC,KAAK+O,QAAQogC,SAASC,aAAepvC,KAAKswB,IAAI0rB,UAAW,CAE5E,GAAIA,GAAYnqC,SAASM,cAAc,MACvC6pC,GAAUj0C,UAAY,aACtBi0C,EAAU5I,cAAgBpzC,KAG1BslC,EAAO0W,GACLzyC,gBAAgB,IACfsK,GAAG,OAAQ,cAId7T,KAAKswB,IAAImgB,IAAI1+B,YAAYiqC,GACzBh8C,KAAKswB,IAAI0rB,UAAYA,OAEbh8C,KAAKkzC,UAAYlzC,KAAKswB,IAAI0rB,YAE9Bh8C,KAAKswB,IAAI0rB,UAAUlyC,YACrB9J,KAAKswB,IAAI0rB,UAAUlyC,WAAW2H,YAAYzR,KAAKswB,IAAI0rB,WAErDh8C,KAAKswB,IAAI0rB,UAAY,OAIzBn8C,EAAOD,QAAU0C,GAKb,SAASzC,EAAQD,EAASM,GAkC9B,QAASgD,GAAS4W,EAAW9G,EAAMjE,GACjC,KAAM/O,eAAgBkD,IACpB,KAAM,IAAI6W,aAAY,mDAGxB/Z,MAAKi8C,0BAGLj8C,KAAKga,iBAAmBF,EAGxB9Z,KAAKk8C,kBAAoB,GACzBl8C,KAAKm8C,eAAiB,IAAOn8C,KAAKk8C,kBAClCl8C,KAAKo8C,WAAa,GAAMp8C,KAAKm8C,eAC7Bn8C,KAAKq8C,yBAA2B,EAChCr8C,KAAKs8C,wBAA0B,GAE/Bt8C,KAAKu8C,cAAe,EAEpBv8C,KAAKw8C,kBAAoBjpC,IAAI,KAAKkpC,KAAK,KAAKC,SAAS,KAAKC,QAAQ,KAAKC,IAAI,MAG3E58C,KAAK40B,gBACHioB,OACEC,KAAM,EACNC,UAAW,GACXC,UAAW,GACX/wB,OAAQ,GACRgxB,MAAO,UACPC,MAAO32C,OACPkhB,SAAU,GACVC,SAAU,GACVy1B,UAAW,QACXC,SAAU,GACVC,SAAU,UACVC,SAAU/2C,OACVg3C,MAAO,GACP1yC,OACIkB,OAAQ,UACRD,WAAY,UACdE,WACED,OAAQ,UACRD,WAAY,WAEdG,OACEF,OAAQ,UACRD,WAAY,YAGhBwU,YAAa,UACbJ,gBAAiB,UACjBs9B,eAAgB,UAChBjrC,MAAOhM,OACPga,YAAa,EACbk9B,oBAAqBl3C,QAEvBm3C,OACEj2B,SAAU,EACVC,SAAU,GACV7U,MAAO,EACP8qC,yBAA0B,EAC1BC,WAAY,IACZpwC,MAAO,OACP3C,OACEA,MAAM,UACNmB,UAAU,UACVC,MAAO,WAETkxC,UAAW,UACXC,SAAU,GACVC,SAAU,QACVC,SAAU,QACVO,iBAAkB,EAClBC,MACEp4C,OAAQ,GACRq4C,IAAK,EACLC,UAAWz3C,QAEb03C,aAAc,QAEhBC,kBAAiB,EACjBC,SACEC,WACEpvC,SAAS,EACTqvC,MAAO,EAAI,GACXC,sBAAuB,KACvBC,eAAgB,GAChBC,aAAc,GACdC,eAAgB,IAChBC,QAAS,KAEXC,WACEJ,eAAgB,EAChBC,aAAc,IACdC,eAAgB,IAChBG,aAAc,IACdF,QAAS,KAEXG,uBACE7vC,SAAS,EACTuvC,eAAgB,EAChBC,aAAc,IACdC,eAAgB,IAChBG,aAAc,IACdF,QAAS,KAEXA,QAAS,KACTH,eAAgB,KAChBC,aAAc,KACdC,eAAgB,MAElBK,YACE9vC,SAAS,EACT+vC,gBAAiB,IACjBC,iBAAiB,IACjBC,cAAc,IACdC,eAAgB,GAChBC,qBAAsB,GACtBC,gBAAiB,IACjBC,oBAAqB,GACrBC,mBAAoB,EACpBC,YAAa,IACbC,mBAAoB,GACpBC,sBAAuB,GACvBC,WAAY,GACZC,aAAc9sC,MAAQ,EACRC,OAAQ,EACRmZ,OAAQ,GACtB2zB,sBAAuB,IACvBC,kBAAmB,GACnBC,uBAAwB,GAE1BC,YACE/wC,SAAS,GAEXgxC,UACEhxC,SAAS,EACTixC,OAAQ5tC,EAAG,GAAIC,EAAG,GAAIquB,KAAM,MAE9Buf,kBACElxC,SAAS,EACTmxC,kBAAkB,GAEpBC,oBACEpxC,SAAQ,EACRqxC,gBAAiB,IACjBC,YAAa,IACb9kB,UAAW,KACX+kB,OAAQ,WAEVC,wBAAwB,EACxBC,cACEzxC,SAAS,EACT0xC,SAAS,EACT75C,KAAM,aACN85C,UAAW,IAEbC,YAAc,GACdC,YAAc,GACdC,WAAW,EACXC,wBAAyB,IACzBlc,OAAQ,KACRD,QAASA,EACTje,SACE5N,MAAO,IACPokC,UAAW,QACXC,SAAU,GACVC,SAAU,UACVxyC,OACEkB,OAAQ,OACRD,WAAY,YAGhBk1C,aAAa,EACbC,WAAW,EACX/iB,UAAU,EACVjyB,OAAO,EACPi1C,iBAAiB,EACjBC,iBAAiB,EACjBtuC,MAAQ,OACRC,OAAS,OACTo8B,YAAY,GAEdlvC,KAAKohD,UAAYzgD,EAAK0E,UAAWrF,KAAK40B,gBACtC50B,KAAKqhD,WAAa,EAGlBrhD,KAAKshD,UAAYzE,SAASa,UAC1B19C,KAAKuhD,oBAAqB,EAC1BvhD,KAAKwhD,mBAAqBC,YAAaC,SAGvC1hD,KAAK2hD,eAAiB,EAAE3hD,KAAKk8C,kBAC7Bl8C,KAAK4hD,wBAA0B,iBAC/B5hD,KAAK6hD,WAAa,EAClB7hD,KAAK8hD,YAAc,EACnB9hD,KAAK+hD,YAAc,EACnB/hD,KAAKgiD,kBAAoB,EACzBhiD,KAAKiiD,kBAAoB,EACzBjiD,KAAKkiD,eAAiB,KACtBliD,KAAKmiD,mBAAqB,KAC1BniD,KAAKoiD,UAAY,CAGjB,IAAIj/C,GAAUnD,IACdA,MAAK00B,OAAS,GAAIrxB,GAClBrD,KAAKqiD,OAAS,GAAI/+C,GAClBtD,KAAKqiD,OAAOC,kBAAkB,WAC5Bn/C,EAAQo/C,YAIVviD,KAAKwiD,WAAa,EAClBxiD,KAAKyiD,WAAa,EAClBziD,KAAK0iD,cAAgB,EAIrB1iD,KAAK2iD,qBAEL3iD,KAAKi1B,UAELj1B,KAAK4iD,oBAEL5iD,KAAK6iD,qBAEL7iD,KAAK8iD,uBAEL9iD,KAAK+iD,uBAIL/iD,KAAKgjD,gBAAgBhjD,KAAK6f,MAAME,YAAc,EAAG/f,KAAK6f,MAAMuF,aAAe,GAC3EplB,KAAKud,UAAU,GACfvd,KAAKwT,WAAWzE,GAGhB/O,KAAKijD,kBAAmB,EACxBjjD,KAAKkjD,mBACLljD,KAAKmjD,sBAAuB,EAC5BnjD,KAAKojD,YAAa,EAClBpjD,KAAK+gD,wBAA0B,KAC/B/gD,KAAKqjD,eAAgB,EAGrBrjD,KAAKsjD,oBACLtjD,KAAKujD,0BACLvjD,KAAKwjD,eACLxjD,KAAK68C,SACL78C,KAAK09C,SAGL19C,KAAKyjD,eAAqBpxC,EAAK,EAAEC,EAAK,GACtCtS,KAAK0jD,mBAAqBrxC,EAAK,EAAEC,EAAK,GACtCtS,KAAK2jD,iBAAmBtxC,EAAK,EAAEC,EAAK,GACpCtS,KAAK4jD,cACL5jD,KAAKwd,MAAQ,EACbxd,KAAK6jD,cAAgB7jD,KAAKwd,MAG1Bxd,KAAK8jD,UAAY,KACjB9jD,KAAK+jD,UAAY,KAGjB/jD,KAAKgkD,gBACHzwC,IAAO,SAAU/J,EAAO4K,GACtBjR,EAAQ8gD,UAAU7vC,EAAOnS,OACzBkB,EAAQ+M,SAEViF,OAAU,SAAU3L,EAAO4K,GACzBjR,EAAQ+gD,aAAa9vC,EAAOnS,MAAOmS,EAAOpB,MAC1C7P,EAAQ+M,SAEV0G,OAAU,SAAUpN,EAAO4K,GACzBjR,EAAQghD,aAAa/vC,EAAOnS,OAC5BkB,EAAQ+M,UAGZlQ,KAAKokD,gBACH7wC,IAAO,SAAU/J,EAAO4K,GACtBjR,EAAQkhD,UAAUjwC,EAAOnS,OACzBkB,EAAQ+M,SAEViF,OAAU,SAAU3L,EAAO4K,GACzBjR,EAAQmhD,aAAalwC,EAAOnS,OAC5BkB,EAAQ+M,SAEV0G,OAAU,SAAUpN,EAAO4K,GACzBjR,EAAQohD,aAAanwC,EAAOnS,OAC5BkB,EAAQ+M,UAKZlQ,KAAKwkD,QAAS,EACdxkD,KAAKykD,MAAQl+C,OAGbvG,KAAKuY,QAAQvF,EAAKhT,KAAKohD,UAAUtC,WAAW9vC,SAAWhP,KAAKohD,UAAUhB,mBAAmBpxC,SAGzFhP,KAAKu8C,cAAe,EAC6B,GAA7Cv8C,KAAKohD,UAAUhB,mBAAmBpxC,QACpChP,KAAK0kD,2BAI2B,GAA5B1kD,KAAKohD,UAAUN,WACjB9gD,KAAK2kD,WAAWp+C,QAAW,EAAKvG,KAAKohD,UAAUtC,WAAW9vC,SAK1DhP,KAAKohD,UAAUtC,WAAW9vC,SAC5BhP,KAAK4kD,sBA1VT,GAAItnC,GAAUpd,EAAoB,IAC9BolC,EAASplC,EAAoB,IAC7B2kD,EAAW3kD,EAAoB,IAC/BS,EAAOT,EAAoB,GAC3Bg/B,EAAah/B,EAAoB,IACjCW,EAAUX,EAAoB,GAC9BY,EAAWZ,EAAoB,GAC/BuD,EAAYvD,EAAoB,IAChCwD,EAAcxD,EAAoB,IAClCmD,EAASnD,EAAoB,IAC7BoD,EAASpD,EAAoB,IAC7BqD,EAAOrD,EAAoB,IAC3BkD,EAAOlD,EAAoB,IAC3BsD,EAAQtD,EAAoB,IAC5B4kD,EAAc5kD,EAAoB,IAClC6kD,EAAY7kD,EAAoB,IAChC0kC,EAAU1kC,EAAoB,GAGlCA,GAAoB,IA4UpBod,EAAQpa,EAAQuQ,WAShBvQ,EAAQuQ,UAAUuxC,eAAiB,WAIjC,IAAK,GAHDC,GAAUpzC,SAASqzC,qBAAsB,UAGpC3/C,EAAI,EAAGA,EAAI0/C,EAAQv/C,OAAQH,IAAK,CACvC,GAAI4/C,GAAMF,EAAQ1/C,GAAG4/C,IACjB7gD,EAAQ6gD,GAAO,qBAAqB3gD,KAAK2gD,EAC7C,IAAI7gD,EAEF,MAAO6gD,GAAI74C,UAAU,EAAG64C,EAAIz/C,OAASpB,EAAM,GAAGoB,QAIlD,MAAO,OAQTxC,EAAQuQ,UAAU2xC,UAAY,WAC5B,GAAsDC,GAAlDC,EAAO,IAAKC,EAAO,KAAMC,EAAO,IAAKC,EAAO,IAChD,KAAK,GAAIC,KAAU1lD,MAAK68C,MAClB78C,KAAK68C,MAAMh3C,eAAe6/C,KAC5BL,EAAOrlD,KAAK68C,MAAM6I,GACdF,EAAQH,EAAM,IAAIG,EAAOH,EAAKhzC,GAC9BozC,EAAQJ,EAAM,IAAII,EAAOJ,EAAKhzC,GAC9BizC,EAAQD,EAAM,IAAIC,EAAOD,EAAK/yC,GAC9BizC,EAAQF,EAAM,IAAIE,EAAOF,EAAK/yC,GAMtC,OAHY,MAARkzC,GAAuB,MAARC,GAAwB,KAARH,GAAuB,MAARC,IAChDD,EAAO,EAAGC,EAAO,EAAGC,EAAO,EAAGC,EAAO,IAE/BD,KAAMA,EAAMC,KAAMA,EAAMH,KAAMA,EAAMC,KAAMA,IASpDriD,EAAQuQ,UAAUkyC,YAAc,SAAS3vB,GACvC,OAAQ3jB,EAAI,IAAO2jB,EAAMyvB,KAAOzvB,EAAMwvB,MAC9BlzC,EAAI,IAAO0jB,EAAMuvB,KAAOvvB,EAAMsvB,QAUxCpiD,EAAQuQ,UAAUkxC,WAAa,SAASiB,EAAkBC,EAAaC,GACjDv/C,SAAhBs/C,IACFA,GAAc,GAEKt/C,SAAjBu/C,IACFA,GAAe,GAEQv/C,SAArBq/C,IACFA,GAAmB,EAGrB,IACIG,GADA/vB,EAAQh2B,KAAKolD,WAGjB,IAAmB,GAAfS,EAAqB,CACvB,GAAIG,GAAgBhmD,KAAKwjD,YAAY99C,MAIjCqgD,GAH+B,GAA/B/lD,KAAKohD,UAAUX,aACwB,GAArCzgD,KAAKohD,UAAUtC,WAAW9vC,SAC5Bg3C,GAAiBhmD,KAAKohD,UAAUtC,WAAWC,gBAC/B,UAAYiH,EAAgB,WAAa,SAGzC,QAAUA,EAAgB,QAAU,SAIT,GAArChmD,KAAKohD,UAAUtC,WAAW9vC,SAC1Bg3C,GAAiBhmD,KAAKohD,UAAUtC,WAAWC,gBACjC,YAAciH,EAAgB,YAAc,cAG5C,YAAcA,EAAgB,aAAe,SAK7D,IAAIC,GAAShhD,KAAKwG,IAAIzL,KAAK6f,MAAMC,OAAOC,YAAc,IAAK/f,KAAK6f,MAAMC,OAAOsF,aAAe,IAC5F2gC,IAAaE,MAEV,CACH,GAAI3O,GAAgD,IAApCryC,KAAKmmB,IAAI4K,EAAMyvB,KAAOzvB,EAAMwvB,MACxCU,EAAgD,IAApCjhD,KAAKmmB,IAAI4K,EAAMuvB,KAAOvvB,EAAMsvB,MAExCa,EAAanmD,KAAK6f,MAAMC,OAAOC,YAAeu3B,EAC9C8O,EAAapmD,KAAK6f,MAAMC,OAAOsF,aAAe8gC,CAElDH,GAA2BK,GAAdD,EAA4BA,EAAaC,EAGpDL,EAAY,IACdA,EAAY,EAId,IAAIr5B,GAAS1sB,KAAK2lD,YAAY3vB,EAC9B,IAAoB,GAAhB8vB,EAAuB,CACzB,GAAI/2C,IAAWoV,SAAUuI,EAAQlP,MAAOuoC,EAAWM,UAAWT,EAC9D5lD,MAAKooB,OAAOrZ,GACZ/O,KAAKwkD,QAAS,EACdxkD,KAAKkQ,YAGLwc,GAAOra,GAAK0zC,EACZr5B,EAAOpa,GAAKyzC,EACZr5B,EAAOra,GAAK,GAAMrS,KAAK6f,MAAMC,OAAOC,YACpC2M,EAAOpa,GAAK,GAAMtS,KAAK6f,MAAMC,OAAOsF,aACpCplB,KAAKud,UAAUwoC,GACf/lD,KAAKgjD,iBAAiBt2B,EAAOra,GAAGqa,EAAOpa,IAS3CpP,EAAQuQ,UAAU6yC,qBAAuB,WACvCtmD,KAAKumD,qBACL,KAAK,GAAIC,KAAOxmD,MAAK68C,MACf78C,KAAK68C,MAAMh3C,eAAe2gD,IAC5BxmD,KAAKwjD,YAAYt7C,KAAKs+C,IAiB5BtjD,EAAQuQ,UAAU8E,QAAU,SAASvF,EAAM8yC,GAOzC,GANqBv/C,SAAjBu/C,IACFA,GAAe,GAGjB9lD,KAAKu8C,cAAe,EAEhBvpC,GAAQA,EAAKqd,MAAQrd,EAAK6pC,OAAS7pC,EAAK0qC,OAC1C,KAAM,IAAI3jC,aAAY,iGAOxB,IAFA/Z,KAAKwT,WAAWR,GAAQA,EAAKjE,SAEzBiE,GAAQA,EAAKqd,KAEf,GAAGrd,GAAQA,EAAKqd,IAAK,CACnB,GAAIo2B,GAAUhjD,EAAUijD,WAAW1zC,EAAKqd,IAExC,YADArwB,MAAKuY,QAAQkuC,QAIZ,IAAIzzC,GAAQA,EAAK2zC,OAEpB,GAAG3zC,GAAQA,EAAK2zC,MAAO,CACrB,GAAIC,GAAYljD,EAAYmjD,WAAW7zC,EAAK2zC,MAE5C,YADA3mD,MAAKuY,QAAQquC,QAKf5mD,MAAK8mD,UAAU9zC,GAAQA,EAAK6pC,OAC5B78C,KAAK+mD,UAAU/zC,GAAQA,EAAK0qC,MAE9B19C,MAAKgnD,mBACe,GAAhBlB,IAC+C,GAA7C9lD,KAAKohD,UAAUhB,mBAAmBpxC,SACpChP,KAAKinD,eACLjnD,KAAK0kD,4BAID1kD,KAAKohD,UAAUN,WACjB9gD,KAAKknD,aAGTlnD,KAAKkQ,SAEPlQ,KAAKu8C,cAAe,GAOtBr5C,EAAQuQ,UAAUD,WAAa,SAAUzE,GACvC,GAAIA,EAAS,CACX,GAAInJ,GAEA4I,GAAU,QAAQ,QAAQ,eAAe,qBAAqB,aAAa,aAC7E,WAAW,mBAAmB,QAAQ,SAAS,aAAa,YAAY,WAAW,aAOrF,IAJA7N,EAAK8F,uBAAuB+H,EAAOxO,KAAKohD,UAAWryC,GACnDpO,EAAK8F,wBAAwB,SAASzG,KAAKohD,UAAUvE,MAAO9tC,EAAQ8tC,OACpEl8C,EAAK8F,wBAAwB,QAAQ,UAAUzG,KAAKohD,UAAU1D,MAAO3uC,EAAQ2uC,OAEzE3uC,EAAQovC,UACVx9C,EAAKkO,aAAa7O,KAAKohD,UAAUjD,QAASpvC,EAAQovC,QAAQ,aAC1Dx9C,EAAKkO,aAAa7O,KAAKohD,UAAUjD,QAASpvC,EAAQovC,QAAQ,aAEtDpvC,EAAQovC,QAAQU,uBAAuB,CACzC7+C,KAAKohD,UAAUhB,mBAAmBpxC,SAAU,EAC5ChP,KAAKohD,UAAUjD,QAAQU,sBAAsB7vC,SAAU,EACvDhP,KAAKohD,UAAUjD,QAAQC,UAAUpvC,SAAU,CAC3C;IAAKpJ,IAAQmJ,GAAQovC,QAAQU,sBACvB9vC,EAAQovC,QAAQU,sBAAsBh5C,eAAeD,KACvD5F,KAAKohD,UAAUjD,QAAQU,sBAAsBj5C,GAAQmJ,EAAQovC,QAAQU,sBAAsBj5C,IAiDnG,GA3CImJ,EAAQsgC,QAAQrvC,KAAKw8C,iBAAiBjpC,IAAMxE,EAAQsgC,OACpDtgC,EAAQo4C,SAASnnD,KAAKw8C,iBAAiBC,KAAO1tC,EAAQo4C,QACtDp4C,EAAQq4C,aAAapnD,KAAKw8C,iBAAiBE,SAAW3tC,EAAQq4C,YAC9Dr4C,EAAQs4C,YAAYrnD,KAAKw8C,iBAAiBG,QAAU5tC,EAAQs4C,WAC5Dt4C,EAAQu4C,WAAWtnD,KAAKw8C,iBAAiBI,IAAM7tC,EAAQu4C,UAE3D3mD,EAAKkO,aAAa7O,KAAKohD,UAAWryC,EAAQ,gBAC1CpO,EAAKkO,aAAa7O,KAAKohD,UAAWryC,EAAQ,sBAC1CpO,EAAKkO,aAAa7O,KAAKohD,UAAWryC,EAAQ,cAC1CpO,EAAKkO,aAAa7O,KAAKohD,UAAWryC,EAAQ,cAC1CpO,EAAKkO,aAAa7O,KAAKohD,UAAWryC,EAAQ,YAC1CpO,EAAKkO,aAAa7O,KAAKohD,UAAWryC,EAAQ,oBAGtCA,EAAQmxC,mBACVlgD,KAAKunD,SAAWvnD,KAAKohD,UAAUlB,iBAAiBC,kBAK9CpxC,EAAQ2uC,QACkBn3C,SAAxBwI,EAAQ2uC,MAAM7yC,QACZlK,EAAKuD,SAAS6K,EAAQ2uC,MAAM7yC,QAC9B7K,KAAKohD,UAAU1D,MAAM7yC,SACrB7K,KAAKohD,UAAU1D,MAAM7yC,MAAMA,MAAQkE,EAAQ2uC,MAAM7yC,MACjD7K,KAAKohD,UAAU1D,MAAM7yC,MAAMmB,UAAY+C,EAAQ2uC,MAAM7yC,MACrD7K,KAAKohD,UAAU1D,MAAM7yC,MAAMoB,MAAQ8C,EAAQ2uC,MAAM7yC,QAGftE,SAA9BwI,EAAQ2uC,MAAM7yC,MAAMA,QAA0B7K,KAAKohD,UAAU1D,MAAM7yC,MAAMA,MAAQkE,EAAQ2uC,MAAM7yC,MAAMA,OACnEtE,SAAlCwI,EAAQ2uC,MAAM7yC,MAAMmB,YAA0BhM,KAAKohD,UAAU1D,MAAM7yC,MAAMmB,UAAY+C,EAAQ2uC,MAAM7yC,MAAMmB,WAC3EzF,SAA9BwI,EAAQ2uC,MAAM7yC,MAAMoB,QAA0BjM,KAAKohD,UAAU1D,MAAM7yC,MAAMoB,MAAQ8C,EAAQ2uC,MAAM7yC,MAAMoB,SAIxG8C,EAAQ2uC,MAAMP,WACW52C,SAAxBwI,EAAQ2uC,MAAM7yC,QACZlK,EAAKuD,SAAS6K,EAAQ2uC,MAAM7yC,OAAmB7K,KAAKohD,UAAU1D,MAAMP,UAAYpuC,EAAQ2uC,MAAM7yC,MAC3DtE,SAA9BwI,EAAQ2uC,MAAM7yC,MAAMA,QAAsB7K,KAAKohD,UAAU1D,MAAMP,UAAYpuC,EAAQ2uC,MAAM7yC,MAAMA,SAK1GkE,EAAQ8tC,OACN9tC,EAAQ8tC,MAAMhyC,MAAO,CACvB,GAAI28C,GAAc7mD,EAAKiK,WAAWmE,EAAQ8tC,MAAMhyC,MAChD7K,MAAKohD,UAAUvE,MAAMhyC,MAAMiB,WAAa07C,EAAY17C,WACpD9L,KAAKohD,UAAUvE,MAAMhyC,MAAMkB,OAASy7C,EAAYz7C,OAChD/L,KAAKohD,UAAUvE,MAAMhyC,MAAMmB,UAAUF,WAAa07C,EAAYx7C,UAAUF,WACxE9L,KAAKohD,UAAUvE,MAAMhyC,MAAMmB,UAAUD,OAASy7C,EAAYx7C,UAAUD,OACpE/L,KAAKohD,UAAUvE,MAAMhyC,MAAMoB,MAAMH,WAAa07C,EAAYv7C,MAAMH,WAChE9L,KAAKohD,UAAUvE,MAAMhyC,MAAMoB,MAAMF,OAASy7C,EAAYv7C,MAAMF,OAGhE,GAAIgD,EAAQ2lB,OACV,IAAK,GAAI+yB,KAAa14C,GAAQ2lB,OAC5B,GAAI3lB,EAAQ2lB,OAAO7uB,eAAe4hD,GAAY,CAC5C,GAAIl1C,GAAQxD,EAAQ2lB,OAAO+yB,EAC3BznD,MAAK00B,OAAOnhB,IAAIk0C,EAAWl1C,GAKjC,GAAIxD,EAAQ4X,QAAS,CACnB,IAAK/gB,IAAQmJ,GAAQ4X,QACf5X,EAAQ4X,QAAQ9gB,eAAeD,KACjC5F,KAAKohD,UAAUz6B,QAAQ/gB,GAAQmJ,EAAQ4X,QAAQ/gB,GAG/CmJ,GAAQ4X,QAAQ9b,QAClB7K,KAAKohD,UAAUz6B,QAAQ9b,MAAQlK,EAAKiK,WAAWmE,EAAQ4X,QAAQ9b,QAiBnE,GAbI,cAAgBkE,KACdA,EAAQ24C,YACV1nD,KAAK2nD,UAAY,GAAI5C,GAAU/kD,KAAK6f,OACpC7f,KAAK2nD,UAAU9zC,GAAG,SAAU7T,KAAK4nD,gBAAgBvyB,KAAKr1B,QAGlDA,KAAK2nD,YACP3nD,KAAK2nD,UAAU/zC,gBACR5T,MAAK2nD,YAKd54C,EAAQ03B,OACV,KAAM,IAAI7iC,OAAM,8EAMpB5D,KAAK2iD,qBAEL3iD,KAAK6nD,0BAEL7nD,KAAK8nD,0BAEL9nD,KAAK+nD,yBAIL/nD,KAAK4nD,kBACL5nD,KAAKklB,QAAQllB,KAAKohD,UAAUvuC,MAAO7S,KAAKohD,UAAUtuC,QAClD9S,KAAKwkD,QAAS,EACdxkD,KAAKkQ,SAYPhN,EAAQuQ,UAAUwhB,QAAU,WAE1B,KAAOj1B,KAAKga,iBAAiBiK,iBAC3BjkB,KAAKga,iBAAiBvI,YAAYzR,KAAKga,iBAAiBkK,WAiB1D,IAdAlkB,KAAK6f,MAAQhO,SAASM,cAAc,OACpCnS,KAAK6f,MAAM9X,UAAY,oBACvB/H,KAAK6f,MAAMrS,MAAM2W,SAAW,WAC5BnkB,KAAK6f,MAAMrS,MAAM4W,SAAW,SAK5BpkB,KAAK6f,MAAMC,OAASjO,SAASM,cAAc,UAE3CnS,KAAK6f,MAAMC,OAAOtS,MAAM2W,SAAW,WACnCnkB,KAAK6f,MAAM9N,YAAY/R,KAAK6f,MAAMC,QAG7B9f,KAAK6f,MAAMC,OAAOyH,WAQlB,CAEH,GAAID,GAAMtnB,KAAK6f,MAAMC,OAAOyH,WAAW,KAEvCvnB,MAAKqhD,YAAc55C,OAAOugD,kBAAoB,IAAM1gC,EAAI2gC,8BAC9C3gC,EAAI4gC,2BACJ5gC,EAAI6gC,0BACJ7gC,EAAI8gC,yBACJ9gC,EAAI+gC,wBAA0B,GAIxCroD,KAAK6f,MAAMC,OAAOyH,WAAW,MAAM+gC,aAAatoD,KAAKqhD,WAAY,EAAG,EAAGrhD,KAAKqhD,WAAY,EAAG,OApB1D,CACjC,GAAIh9B,GAAWxS,SAASM,cAAe,MACvCkS,GAAS7W,MAAM3C,MAAQ,MACvBwZ,EAAS7W,MAAM8W,WAAc,OAC7BD,EAAS7W,MAAM+W,QAAW,OAC1BF,EAASG,UAAa,mDACtBxkB,KAAK6f,MAAMC,OAAO/N,YAAYsS,GAoBhC,GAAI5P,GAAKzU,IACTA,MAAKulC,QACLvlC,KAAKuoD,SACLvoD,KAAK8D,OAASwhC,EAAOtlC,KAAK6f,MAAMC,QAC9B0lB,iBAAiB,IAEnBxlC,KAAK8D,OAAO+P,GAAG,MAAaY,EAAG+zC,OAAOnzB,KAAK5gB,IAC3CzU,KAAK8D,OAAO+P,GAAG,YAAaY,EAAGg0C,aAAapzB,KAAK5gB,IACjDzU,KAAK8D,OAAO+P,GAAG,OAAaY,EAAGiqB,QAAQrJ,KAAK5gB,IAC5CzU,KAAK8D,OAAO+P,GAAG,QAAaY,EAAGoqB,SAASxJ,KAAK5gB,IAC7CzU,KAAK8D,OAAO+P,GAAG,QAAaY,EAAGmqB,SAASvJ,KAAK5gB,IAC7CzU,KAAK8D,OAAO+P,GAAG,YAAaY,EAAG8pB,aAAalJ,KAAK5gB,IACjDzU,KAAK8D,OAAO+P,GAAG,OAAaY,EAAG+pB,QAAQnJ,KAAK5gB,IAC5CzU,KAAK8D,OAAO+P,GAAG,UAAaY,EAAGgqB,WAAWpJ,KAAK5gB,IAC/CzU,KAAK8D,OAAO+P,GAAG,aAAaY,EAAGkqB,cAActJ,KAAK5gB,IAClDzU,KAAK8D,OAAO+P,GAAG,iBAAiBY,EAAGkqB,cAActJ,KAAK5gB,IACtDzU,KAAK8D,OAAO+P,GAAG,YAAaY,EAAGi0C,kBAAkBrzB,KAAK5gB,IAEtDzU,KAAK2oD,YAAcrjB,EAAOtlC,KAAK6f,OAC7B2lB,iBAAiB,IAEnBxlC,KAAK2oD,YAAY90C,GAAG,UAAaY,EAAGm0C,WAAWvzB,KAAK5gB,IAGpDzU,KAAKga,iBAAiBjI,YAAY/R,KAAK6f,QASzC3c,EAAQuQ,UAAUm0C,gBAAkB,WAClC,GAAInzC,GAAKzU,IACauG,UAAlBvG,KAAK6kD,UACP7kD,KAAK6kD,SAASjxC,UAEhB5T,KAAK6kD,SAAWA,IAEhB7kD,KAAK6kD,SAASgE,QAEV7oD,KAAKohD,UAAUpB,SAAShxC,SAAWhP,KAAK8oD,aAC1C9oD,KAAK6kD,SAASxvB,KAAK,KAAQr1B,KAAK+oD,QAAQ1zB,KAAK5gB,GAAQ,WACrDzU,KAAK6kD,SAASxvB,KAAK,KAAQr1B,KAAKgpD,aAAa3zB,KAAK5gB,GAAK,SACvDzU,KAAK6kD,SAASxvB,KAAK,OAAQr1B,KAAKipD,UAAU5zB,KAAK5gB,GAAM,WACrDzU,KAAK6kD,SAASxvB,KAAK,OAAQr1B,KAAKgpD,aAAa3zB,KAAK5gB,GAAK,SACvDzU,KAAK6kD,SAASxvB,KAAK,OAAQr1B,KAAKkpD,UAAU7zB,KAAK5gB,GAAM,WACrDzU,KAAK6kD,SAASxvB,KAAK,OAAQr1B,KAAKmpD,aAAa9zB,KAAK5gB,GAAK,SACvDzU,KAAK6kD,SAASxvB,KAAK,QAAQr1B,KAAKopD,WAAW/zB,KAAK5gB,GAAK,WACrDzU,KAAK6kD,SAASxvB,KAAK,QAAQr1B,KAAKmpD,aAAa9zB,KAAK5gB,GAAK,SACvDzU,KAAK6kD,SAASxvB,KAAK,IAAQr1B,KAAKqpD,QAAQh0B,KAAK5gB,GAAQ,WACrDzU,KAAK6kD,SAASxvB,KAAK,IAAQr1B,KAAKspD,UAAUj0B,KAAK5gB,GAAQ,SACvDzU,KAAK6kD,SAASxvB,KAAK,OAAQr1B,KAAKqpD,QAAQh0B,KAAK5gB,GAAQ,WACrDzU,KAAK6kD,SAASxvB,KAAK,OAAQr1B,KAAKspD,UAAUj0B,KAAK5gB,GAAQ,SACvDzU,KAAK6kD,SAASxvB,KAAK,OAAQr1B,KAAKupD,SAASl0B,KAAK5gB,GAAO,WACrDzU,KAAK6kD,SAASxvB,KAAK,OAAQr1B,KAAKspD,UAAUj0B,KAAK5gB,GAAQ,SACvDzU,KAAK6kD,SAASxvB,KAAK,IAAQr1B,KAAKupD,SAASl0B,KAAK5gB,GAAO,WACrDzU,KAAK6kD,SAASxvB,KAAK,IAAQr1B,KAAKspD,UAAUj0B,KAAK5gB,GAAQ,SACvDzU,KAAK6kD,SAASxvB,KAAK,IAAQr1B,KAAKqpD,QAAQh0B,KAAK5gB,GAAQ,WACrDzU,KAAK6kD,SAASxvB,KAAK,IAAQr1B,KAAKspD,UAAUj0B,KAAK5gB,GAAQ,SACvDzU,KAAK6kD,SAASxvB,KAAK,IAAQr1B,KAAKupD,SAASl0B,KAAK5gB,GAAO,WACrDzU,KAAK6kD,SAASxvB,KAAK,IAAQr1B,KAAKspD,UAAUj0B,KAAK5gB,GAAQ,SACvDzU,KAAK6kD,SAASxvB,KAAK,SAASr1B,KAAKqpD,QAAQh0B,KAAK5gB,GAAO,WACrDzU,KAAK6kD,SAASxvB,KAAK,SAASr1B,KAAKspD,UAAUj0B,KAAK5gB,GAAO,SACvDzU,KAAK6kD,SAASxvB,KAAK,WAAWr1B,KAAKupD,SAASl0B,KAAK5gB,GAAI,WACrDzU,KAAK6kD,SAASxvB,KAAK,WAAWr1B,KAAKspD,UAAUj0B,KAAK5gB,GAAK,UAGV,GAA3CzU,KAAKohD,UAAUlB,iBAAiBlxC,UAClChP,KAAK6kD,SAASxvB,KAAK,MAAMr1B,KAAKwpD,sBAAsBn0B,KAAK5gB,IACzDzU,KAAK6kD,SAASxvB,KAAK,SAASr1B,KAAKypD,gBAAgBp0B,KAAK5gB,MAU1DvR,EAAQuQ,UAAUi2C,YAAc,SAAUrrB,GACxC,OACEhsB,EAAGgsB,EAAMW,MAAQr+B,EAAK0G,gBAAgBrH,KAAK6f,MAAMC,QACjDxN,EAAG+rB,EAAMY,MAAQt+B,EAAKgH,eAAe3H,KAAK6f,MAAMC,UASpD5c,EAAQuQ,UAAUmrB,SAAW,SAAUp1B,IACjC,GAAInF,OAAO0C,UAAY/G,KAAKoiD,UAAY,MAC1CpiD,KAAKulC,KAAK/E,QAAUxgC,KAAK0pD,YAAYlgD,EAAMy2B,QAAQvT,QACnD1sB,KAAKulC,KAAKokB,SAAU,EACpB3pD,KAAKuoD,MAAM/qC,MAAQxd,KAAK4pD,YAGxB5pD,KAAKoiD,WAAY,GAAI/9C,OAAO0C,UAE5B/G,KAAK6pD,aAAa7pD,KAAKulC,KAAK/E,WAQhCt9B,EAAQuQ,UAAU8qB,aAAe,WAC/Bv+B,KAAK8pD,oBAUP5mD,EAAQuQ,UAAUq2C,iBAAmB,WACnC,GAAIvkB,GAAOvlC,KAAKulC,KACZ8f,EAAOrlD,KAAK+pD,WAAWxkB,EAAK/E,QAShC,IANA+E,EAAK/F,UAAW,EAChB+F,EAAK6K,aACL7K,EAAKvnB,YAAche,KAAKgqD,kBACxBzkB,EAAKmgB,OAAS,KACd1lD,KAAKqjD,eAAgB,EAET,MAARgC,GAA4C,GAA5BrlD,KAAKohD,UAAUH,UAAmB,CACpDjhD,KAAKqjD,eAAgB,EACrB9d,EAAKmgB,OAASL,EAAKhlD,GAEdglD,EAAK4E,cACRjqD,KAAKkqD,cAAc7E,GAAK,GAG1BrlD,KAAKouB,KAAK,aAAa+7B,QAAQnqD,KAAKm3B,eAAe0lB,OAGnD,KAAK,GAAIuN,KAAYpqD,MAAKqqD,aAAaxN,MACrC,GAAI78C,KAAKqqD,aAAaxN,MAAMh3C,eAAeukD,GAAW,CACpD,GAAIpmD,GAAShE,KAAKqqD,aAAaxN,MAAMuN,GACjC7+C,GACFlL,GAAI2D,EAAO3D,GACXglD,KAAMrhD,EAGNqO,EAAGrO,EAAOqO,EACVC,EAAGtO,EAAOsO,EACVg4C,OAAQtmD,EAAOsmD,OACfC,OAAQvmD,EAAOumD,OAGjBvmD,GAAOsmD,QAAS,EAChBtmD,EAAOumD,QAAS,EAEhBhlB,EAAK6K,UAAUloC,KAAKqD,MAW5BrI,EAAQuQ,UAAU+qB,QAAU,SAAUh1B,GACpCxJ,KAAKwqD,cAAchhD,IAUrBtG,EAAQuQ,UAAU+2C,cAAgB,SAAShhD,GACzC,IAAIxJ,KAAKulC,KAAKokB,QAAd,CAKA3pD,KAAKyqD,aAEL,IAAIjqB,GAAUxgC,KAAK0pD,YAAYlgD,EAAMy2B,QAAQvT,QACzCjY,EAAKzU,KACLulC,EAAOvlC,KAAKulC,KACZ6K,EAAY7K,EAAK6K,SACrB,IAAIA,GAAaA,EAAU1qC,QAAsC,GAA5B1F,KAAKohD,UAAUH,UAAmB,CAErE,GAAI/gB,GAASM,EAAQnuB,EAAIkzB,EAAK/E,QAAQnuB,EAClC8tB,EAASK,EAAQluB,EAAIizB,EAAK/E,QAAQluB,CAGtC89B,GAAU7nC,QAAQ,SAAUgD,GAC1B,GAAI85C,GAAO95C,EAAE85C,IAER95C,GAAE++C,SACLjF,EAAKhzC,EAAIoC,EAAGi2C,qBAAqBj2C,EAAGk2C,qBAAqBp/C,EAAE8G,GAAK6tB,IAG7D30B,EAAEg/C,SACLlF,EAAK/yC,EAAImC,EAAGm2C,qBAAqBn2C,EAAGo2C,qBAAqBt/C,EAAE+G,GAAK6tB,MAM/DngC,KAAKwkD,SACRxkD,KAAKwkD,QAAS,EACdxkD,KAAKkQ,aAIP,IAAkC,GAA9BlQ,KAAKohD,UAAUJ,YAAqB,CAEtC,GAAIpzB,GAAQ4S,EAAQnuB,EAAIrS,KAAKulC,KAAK/E,QAAQnuB,EACtCwb,EAAQ2S,EAAQluB,EAAItS,KAAKulC,KAAK/E,QAAQluB,CAE1CtS,MAAKgjD,gBACHhjD,KAAKulC,KAAKvnB,YAAY3L,EAAIub,EAC1B5tB,KAAKulC,KAAKvnB,YAAY1L,EAAIub,GAE5B7tB,KAAKuiD,aAWXr/C,EAAQuQ,UAAUgrB,WAAa,SAAUj1B,GACvCxJ,KAAK8qD,eAAethD,IAItBtG,EAAQuQ,UAAUq3C,eAAiB,WACjC9qD,KAAKulC,KAAK/F,UAAW,CACrB,IAAI4Q,GAAYpwC,KAAKulC,KAAK6K,SACtBA,IAAaA,EAAU1qC,QACzB0qC,EAAU7nC,QAAQ,SAAUgD,GAE1BA,EAAE85C,KAAKiF,OAAS/+C,EAAE++C,OAClB/+C,EAAE85C,KAAKkF,OAASh/C,EAAEg/C,SAEpBvqD,KAAKwkD,QAAS,EACdxkD,KAAKkQ,SAGLlQ,KAAKuiD,UAEmB,GAAtBviD,KAAKqjD,cACPrjD,KAAKouB,KAAK,WAAW+7B,aAGrBnqD,KAAKouB,KAAK,WAAW+7B,QAAQnqD,KAAKm3B,eAAe0lB,SAQrD35C,EAAQuQ,UAAU+0C,OAAS,SAAUh/C,GACnC,GAAIg3B,GAAUxgC,KAAK0pD,YAAYlgD,EAAMy2B,QAAQvT,OAC7C1sB,MAAK2jD,gBAAkBnjB,EACvBxgC,KAAK+qD,WAAWvqB,IASlBt9B,EAAQuQ,UAAUg1C,aAAe,SAAUj/C,GACzC,GAAIg3B,GAAUxgC,KAAK0pD,YAAYlgD,EAAMy2B,QAAQvT,OAC7C1sB,MAAKgrD,iBAAiBxqB,IAQxBt9B,EAAQuQ,UAAUirB,QAAU,SAAUl1B,GACpC,GAAIg3B,GAAUxgC,KAAK0pD,YAAYlgD,EAAMy2B,QAAQvT,OAC7C1sB,MAAK2jD,gBAAkBnjB,EACvBxgC,KAAKirD,cAAczqB,IAQrBt9B,EAAQuQ,UAAUm1C,WAAa,SAAUp/C,GACvC,GAAIg3B,GAAUxgC,KAAK0pD,YAAYlgD,EAAMy2B,QAAQvT,OAC7C1sB,MAAKkrD,iBAAiB1qB,IAQxBt9B,EAAQuQ,UAAUorB,SAAW,SAAUr1B,GACrC,GAAIg3B,GAAUxgC,KAAK0pD,YAAYlgD,EAAMy2B,QAAQvT,OAE7C1sB,MAAKulC,KAAKokB,SAAU,EACd,SAAW3pD,MAAKuoD,QACpBvoD,KAAKuoD,MAAM/qC,MAAQ,EAIrB,IAAIA,GAAQxd,KAAKuoD,MAAM/qC,MAAQhU,EAAMy2B,QAAQziB,KAC7Cxd,MAAKmrD,MAAM3tC,EAAOgjB,IAUpBt9B,EAAQuQ,UAAU03C,MAAQ,SAAS3tC,EAAOgjB,GACxC,GAA+B,GAA3BxgC,KAAKohD,UAAUljB,SAAkB,CACnC,GAAIktB,GAAWprD,KAAK4pD,WACR,MAARpsC,IACFA,EAAQ,MAENA,EAAQ,KACVA,EAAQ,GAGV,IAAI6tC,GAAsB,IACR9kD,UAAdvG,KAAKulC,MACmB,GAAtBvlC,KAAKulC,KAAK/F,WACZ6rB,EAAsBrrD,KAAKsrD,YAAYtrD,KAAKulC,KAAK/E,SAIrD,IAAIxiB,GAAche,KAAKgqD,kBAEnBuB,EAAY/tC,EAAQ4tC,EACpBI,GAAM,EAAID,GAAa/qB,EAAQnuB,EAAI2L,EAAY3L,EAAIk5C,EACnDE,GAAM,EAAIF,GAAa/qB,EAAQluB,EAAI0L,EAAY1L,EAAIi5C,CASvD,IAPAvrD,KAAK4jD,YAAcvxC,EAAMrS,KAAK0qD,qBAAqBlqB,EAAQnuB,GACxCC,EAAMtS,KAAK4qD,qBAAqBpqB,EAAQluB,IAE3DtS,KAAKud,UAAUC,GACfxd,KAAKgjD,gBAAgBwI,EAAIC,GACzBzrD,KAAK0rD,wBAEsB,MAAvBL,EAA6B,CAC/B,GAAIM,GAAuB3rD,KAAK4rD,YAAYP,EAC5CrrD,MAAKulC,KAAK/E,QAAQnuB,EAAIs5C,EAAqBt5C,EAC3CrS,KAAKulC,KAAK/E,QAAQluB,EAAIq5C,EAAqBr5C,EAY7C,MATAtS,MAAKuiD,UAEU/kC,EAAX4tC,EACFprD,KAAKouB,KAAK,QAASoN,UAAU,MAG7Bx7B,KAAKouB,KAAK,QAASoN,UAAU,MAGxBhe,IAYXta,EAAQuQ,UAAUkrB,cAAgB,SAASn1B,GAEzC,GAAIwlB,GAAQ,CAYZ,IAXIxlB,EAAMylB,WACRD,EAAQxlB,EAAMylB,WAAW,IAChBzlB,EAAM0lB,SAGfF,GAASxlB,EAAM0lB,OAAO,GAMpBF,EAAO,CAGT,GAAIxR,GAAQxd,KAAK4pD,YACbjpB,EAAO3R,EAAQ,EACP,GAARA,IACF2R,GAAe,EAAIA,GAErBnjB,GAAU,EAAImjB,CAGd,IAAIV,GAAUf,EAAWqB,YAAYvgC,KAAMwJ,GACvCg3B,EAAUxgC,KAAK0pD,YAAYzpB,EAAQvT,OAGvC1sB,MAAKmrD,MAAM3tC,EAAOgjB,GAIpBh3B,EAAMD,kBASRrG,EAAQuQ,UAAUi1C,kBAAoB,SAAUl/C,GAC9C,GAAIy2B,GAAUf,EAAWqB,YAAYvgC,KAAMwJ,GACvCg3B,EAAUxgC,KAAK0pD,YAAYzpB,EAAQvT,OAGnC1sB,MAAK6rD,UACP7rD,KAAK8rD,gBAAgBtrB,EAKvB,IAAI/rB,GAAKzU,KACL+rD,EAAY,WACdt3C,EAAGu3C,gBAAgBxrB,GAarB,IAXIxgC,KAAKisD,YACPj5B,cAAchzB,KAAKisD,YAEhBjsD,KAAKulC,KAAK/F,WACbx/B,KAAKisD,WAAapyC,WAAWkyC,EAAW/rD,KAAKohD,UAAUz6B,QAAQ5N,QAOrC,GAAxB/Y,KAAKohD,UAAUn1C,MAAe,CAEhC,IAAK,GAAIigD,KAAUlsD,MAAKshD,SAAS5D,MAC3B19C,KAAKshD,SAAS5D,MAAM73C,eAAeqmD,KACrClsD,KAAKshD,SAAS5D,MAAMwO,GAAQjgD,OAAQ,QAC7BjM,MAAKshD,SAAS5D,MAAMwO,GAK/B,IAAI5oC,GAAMtjB,KAAK+pD,WAAWvpB,EACf,OAAPld,IACFA,EAAMtjB,KAAKmsD,WAAW3rB,IAEb,MAAPld,GACFtjB,KAAKosD,aAAa9oC,EAIpB,KAAK,GAAIoiC,KAAU1lD,MAAKshD,SAASzE,MAC3B78C,KAAKshD,SAASzE,MAAMh3C,eAAe6/C,KACjCpiC,YAAe/f,IAAQ+f,EAAIjjB,IAAMqlD,GAAUpiC,YAAelgB,IAAe,MAAPkgB,KACpEtjB,KAAKqsD,YAAYrsD,KAAKshD,SAASzE,MAAM6I,UAC9B1lD,MAAKshD,SAASzE,MAAM6I,GAIjC1lD,MAAKgiB,WAYT9e,EAAQuQ,UAAUu4C,gBAAkB,SAAUxrB,GAC5C,GAOIngC,GAPAijB,GACF9b,KAAQxH,KAAK0qD,qBAAqBlqB,EAAQnuB,GAC1CzK,IAAQ5H,KAAK4qD,qBAAqBpqB,EAAQluB,GAC1CsV,MAAQ5nB,KAAK0qD,qBAAqBlqB,EAAQnuB,GAC1CwR,OAAQ7jB,KAAK4qD,qBAAqBpqB,EAAQluB,IAIxCg6C,EAAgBtsD,KAAK6rD,QAEzB,IAAqBtlD,QAAjBvG,KAAK6rD,SAAuB,CAE9B,GAAIhP,GAAQ78C,KAAK68C,KACjB,KAAKx8C,IAAMw8C,GACT,GAAIA,EAAMh3C,eAAexF,GAAK,CAC5B,GAAIglD,GAAOxI,EAAMx8C,EACjB,IAAwBkG,SAApB8+C,EAAKkH,YAA4BlH,EAAKmH,kBAAkBlpC,GAAM,CAChEtjB,KAAK6rD,SAAWxG,CAChB,SAMR,GAAsB9+C,SAAlBvG,KAAK6rD,SAAwB,CAE/B,GAAInO,GAAQ19C,KAAK09C,KACjB,KAAKr9C,IAAMq9C,GACT,GAAIA,EAAM73C,eAAexF,GAAK,CAC5B,GAAIosD,GAAO/O,EAAMr9C,EACjB,IAAIosD,EAAKC,WAAkCnmD,SAApBkmD,EAAKF,YACxBE,EAAKD,kBAAkBlpC,GAAM,CAC/BtjB,KAAK6rD,SAAWY,CAChB,SAMR,GAAIzsD,KAAK6rD,UAEP,GAAI7rD,KAAK6rD,UAAYS,EAAe,CAClC,GAAI73C,GAAKzU,IACJyU,GAAGk4C,QACNl4C,EAAGk4C,MAAQ,GAAInpD,GAAMiR,EAAGoL,MAAOpL,EAAG2sC,UAAUz6B,UAM9ClS,EAAGk4C,MAAMC,YAAYpsB,EAAQnuB,EAAI,EAAGmuB,EAAQluB,EAAI,GAChDmC,EAAGk4C,MAAME,QAAQp4C,EAAGo3C,SAASU,YAC7B93C,EAAGk4C,MAAMhlB,YAIP3nC,MAAK2sD,OACP3sD,KAAK2sD,MAAMjlB,QAYjBxkC,EAAQuQ,UAAUq4C,gBAAkB,SAAUtrB,GACvCxgC,KAAK6rD,UAAa7rD,KAAK+pD,WAAWvpB,KACrCxgC,KAAK6rD,SAAWtlD,OACZvG,KAAK2sD,OACP3sD,KAAK2sD,MAAMjlB,SAajBxkC,EAAQuQ,UAAUyR,QAAU,SAASrS,EAAOC,GAC1C,GAAIg6C,IAAY,EACZC,EAAW/sD,KAAK6f,MAAMC,OAAOjN,MAC7Bm6C,EAAYhtD,KAAK6f,MAAMC,OAAOhN,MAC9BD,IAAS7S,KAAKohD,UAAUvuC,OAASC,GAAU9S,KAAKohD,UAAUtuC,QAAU9S,KAAK6f,MAAMrS,MAAMqF,OAASA,GAAS7S,KAAK6f,MAAMrS,MAAMsF,QAAUA,GACpI9S,KAAK6f,MAAMrS,MAAMqF,MAAQA,EACzB7S,KAAK6f,MAAMrS,MAAMsF,OAASA,EAE1B9S,KAAK6f,MAAMC,OAAOtS,MAAMqF,MAAQ,OAChC7S,KAAK6f,MAAMC,OAAOtS,MAAMsF,OAAS,OAEjC9S,KAAK6f,MAAMC,OAAOjN,MAAQ7S,KAAK6f,MAAMC,OAAOC,YAAc/f,KAAKqhD,WAC/DrhD,KAAK6f,MAAMC,OAAOhN,OAAS9S,KAAK6f,MAAMC,OAAOsF,aAAeplB,KAAKqhD,WAEjErhD,KAAKohD,UAAUvuC,MAAQA,EACvB7S,KAAKohD,UAAUtuC,OAASA,EAExBg6C,GAAY,IAMR9sD,KAAK6f,MAAMC,OAAOjN,OAAS7S,KAAK6f,MAAMC,OAAOC,YAAc/f,KAAKqhD,aAClErhD,KAAK6f,MAAMC,OAAOjN,MAAQ7S,KAAK6f,MAAMC,OAAOC,YAAc/f,KAAKqhD,WAC/DyL,GAAY,GAEV9sD,KAAK6f,MAAMC,OAAOhN,QAAU9S,KAAK6f,MAAMC,OAAOsF,aAAeplB,KAAKqhD,aACpErhD,KAAK6f,MAAMC,OAAOhN,OAAS9S,KAAK6f,MAAMC,OAAOsF,aAAeplB,KAAKqhD,WACjEyL,GAAY,IAIC,GAAbA,GACF9sD,KAAKouB,KAAK,UAAWvb,MAAM7S,KAAK6f,MAAMC,OAAOjN,MAAQ7S,KAAKqhD,WAAWvuC,OAAO9S,KAAK6f,MAAMC,OAAOhN,OAAS9S,KAAKqhD,WAAY0L,SAAUA,EAAW/sD,KAAKqhD,WAAY2L,UAAWA,EAAYhtD,KAAKqhD,cAS9Ln+C,EAAQuQ,UAAUqzC,UAAY,SAASjK,GACrC,GAAIoQ,GAAejtD,KAAK8jD,SAExB,IAAIjH,YAAiBh8C,IAAWg8C,YAAiB/7C,GAC/Cd,KAAK8jD,UAAYjH,MAEd,IAAI72C,MAAMC,QAAQ42C,GACrB78C,KAAK8jD,UAAY,GAAIjjD,GACrBb,KAAK8jD,UAAUvwC,IAAIspC,OAEhB,CAAA,GAAKA,EAIR,KAAM,IAAIz2C,WAAU,4BAHpBpG,MAAK8jD,UAAY,GAAIjjD,GAgBvB,GAVIosD,GAEFtsD,EAAK4H,QAAQvI,KAAKgkD,eAAgB,SAAUx7C,EAAUgB,GACpDyjD,EAAaj5C,IAAIxK,EAAOhB,KAK5BxI,KAAK68C,SAED78C,KAAK8jD,UAAW,CAElB,GAAIrvC,GAAKzU,IACTW,GAAK4H,QAAQvI,KAAKgkD,eAAgB,SAAUx7C,EAAUgB,GACpDiL,EAAGqvC,UAAUjwC,GAAGrK,EAAOhB,IAIzB,IAAIiN,GAAMzV,KAAK8jD,UAAU1tC,QACzBpW,MAAKikD,UAAUxuC,GAEjBzV,KAAKktD,oBAQPhqD,EAAQuQ,UAAUwwC,UAAY,SAASxuC,GAErC,IAAK,GADDpV,GACKkF,EAAI,EAAGC,EAAMiQ,EAAI/P,OAAYF,EAAJD,EAASA,IAAK,CAC9ClF,EAAKoV,EAAIlQ,EACT,IAAIyN,GAAOhT,KAAK8jD,UAAUtuC,IAAInV,GAC1BglD,EAAO,GAAI9hD,GAAKyP,EAAMhT,KAAKqiD,OAAQriD,KAAK00B,OAAQ10B,KAAKohD,UAEzD,IADAphD,KAAK68C,MAAMx8C,GAAMglD,IACG,GAAfA,EAAKiF,QAAkC,GAAfjF,EAAKkF,QAAgC,OAAXlF,EAAKhzC,GAAyB,OAAXgzC,EAAK/yC,GAAa,CAC1F,GAAI2Z,GAAS,EAASxW,EAAI/P,OAAS,GAC/BynD,EAAQ,EAAIloD,KAAKknB,GAAKlnB,KAAKE,QACZ,IAAfkgD,EAAKiF,SAAkBjF,EAAKhzC,EAAI4Z,EAAShnB,KAAK6Z,IAAIquC,IACnC,GAAf9H,EAAKkF,SAAkBlF,EAAK/yC,EAAI2Z,EAAShnB,KAAK0Z,IAAIwuC,IAExDntD,KAAKwkD,QAAS,EAGhBxkD,KAAKsmD,uBAC4C,GAA7CtmD,KAAKohD,UAAUhB,mBAAmBpxC,SAAwC,GAArBhP,KAAKu8C,eAC5Dv8C,KAAKinD,eACLjnD,KAAK0kD,4BAEP1kD,KAAKotD,0BACLptD,KAAKqtD,kBACLrtD,KAAKstD,kBAAkBttD,KAAK68C,OAC5B78C,KAAKutD,gBAQPrqD,EAAQuQ,UAAUywC,aAAe,SAASzuC,EAAI+3C,GAE5C,IAAK,GADD3Q,GAAQ78C,KAAK68C,MACRt3C,EAAI,EAAGC,EAAMiQ,EAAI/P,OAAYF,EAAJD,EAASA,IAAK,CAC9C,GAAIlF,GAAKoV,EAAIlQ,GACT8/C,EAAOxI,EAAMx8C,GACb2S,EAAOw6C,EAAYjoD,EACnB8/C,GAEFA,EAAKoI,cAAcz6C,EAAMhT,KAAKohD,YAI9BiE,EAAO,GAAI9hD,GAAKmqD,WAAY1tD,KAAKqiD,OAAQriD,KAAK00B,OAAQ10B,KAAKohD,WAC3DvE,EAAMx8C,GAAMglD,GAGhBrlD,KAAKwkD,QAAS,EACmC,GAA7CxkD,KAAKohD,UAAUhB,mBAAmBpxC,SAAwC,GAArBhP,KAAKu8C,eAC5Dv8C,KAAKinD,eACLjnD,KAAK0kD,4BAEP1kD,KAAKsmD,uBACLtmD,KAAKstD,kBAAkBzQ,IAQzB35C,EAAQuQ,UAAU0wC,aAAe,SAAS1uC,GAExC,IAAK,GADDonC,GAAQ78C,KAAK68C,MACRt3C,EAAI,EAAGC,EAAMiQ,EAAI/P,OAAYF,EAAJD,EAASA,IAAK,CAC9C,GAAIlF,GAAKoV,EAAIlQ,SACNs3C,GAAMx8C,GAEfL,KAAKsmD,uBAC4C,GAA7CtmD,KAAKohD,UAAUhB,mBAAmBpxC,SAAwC,GAArBhP,KAAKu8C,eAC5Dv8C,KAAKinD,eACLjnD,KAAK0kD,4BAEP1kD,KAAKotD,0BACLptD,KAAKqtD,kBACLrtD,KAAKktD,mBACLltD,KAAKstD,kBAAkBzQ,IASzB35C,EAAQuQ,UAAUszC,UAAY,SAASrJ,GACrC,GAAIiQ,GAAe3tD,KAAK+jD,SAExB,IAAIrG,YAAiB78C,IAAW68C,YAAiB58C,GAC/Cd,KAAK+jD,UAAYrG,MAEd,IAAI13C,MAAMC,QAAQy3C,GACrB19C,KAAK+jD,UAAY,GAAIljD,GACrBb,KAAK+jD,UAAUxwC,IAAImqC,OAEhB,CAAA,GAAKA,EAIR,KAAM,IAAIt3C,WAAU,4BAHpBpG,MAAK+jD,UAAY,GAAIljD,GAgBvB,GAVI8sD,GAEFhtD,EAAK4H,QAAQvI,KAAKokD,eAAgB,SAAU57C,EAAUgB,GACpDmkD,EAAa35C,IAAIxK,EAAOhB,KAK5BxI,KAAK09C,SAED19C,KAAK+jD,UAAW,CAElB,GAAItvC,GAAKzU,IACTW,GAAK4H,QAAQvI,KAAKokD,eAAgB,SAAU57C,EAAUgB,GACpDiL,EAAGsvC,UAAUlwC,GAAGrK,EAAOhB,IAIzB,IAAIiN,GAAMzV,KAAK+jD,UAAU3tC,QACzBpW,MAAKqkD,UAAU5uC,GAGjBzV,KAAKqtD,mBAQPnqD,EAAQuQ,UAAU4wC,UAAY,SAAU5uC,GAItC,IAAK,GAHDioC,GAAQ19C,KAAK09C,MACbqG,EAAY/jD,KAAK+jD,UAEZx+C,EAAI,EAAGC,EAAMiQ,EAAI/P,OAAYF,EAAJD,EAASA,IAAK,CAC9C,GAAIlF,GAAKoV,EAAIlQ,GAETqoD,EAAUlQ,EAAMr9C,EAChButD,IACFA,EAAQC,YAGV,IAAI76C,GAAO+wC,EAAUvuC,IAAInV,GAAKytD,iBAAoB,GAClDpQ,GAAMr9C,GAAM,GAAI+C,GAAK4P,EAAMhT,KAAMA,KAAKohD,WAExCphD,KAAKwkD,QAAS,EACdxkD,KAAKstD,kBAAkB5P,GACvB19C,KAAK+tD,qBACL/tD,KAAKotD,0BAC4C,GAA7CptD,KAAKohD,UAAUhB,mBAAmBpxC,SAAwC,GAArBhP,KAAKu8C,eAC5Dv8C,KAAKinD,eACLjnD,KAAK0kD,6BASTxhD,EAAQuQ,UAAU6wC,aAAe,SAAU7uC,GAGzC,IAAK,GAFDioC,GAAQ19C,KAAK09C,MACbqG,EAAY/jD,KAAK+jD,UACZx+C,EAAI,EAAGC,EAAMiQ,EAAI/P,OAAYF,EAAJD,EAASA,IAAK,CAC9C,GAAIlF,GAAKoV,EAAIlQ,GAETyN,EAAO+wC,EAAUvuC,IAAInV,GACrBosD,EAAO/O,EAAMr9C,EACbosD,IAEFA,EAAKoB,aACLpB,EAAKgB,cAAcz6C,EAAMhT,KAAKohD,WAC9BqL,EAAK9P,YAIL8P,EAAO,GAAIrpD,GAAK4P,EAAMhT,KAAMA,KAAKohD,WACjCphD,KAAK09C,MAAMr9C,GAAMosD,GAIrBzsD,KAAK+tD,qBAC4C,GAA7C/tD,KAAKohD,UAAUhB,mBAAmBpxC,SAAwC,GAArBhP,KAAKu8C,eAC5Dv8C,KAAKinD,eACLjnD,KAAK0kD,4BAEP1kD,KAAKwkD,QAAS,EACdxkD,KAAKstD,kBAAkB5P,IAQzBx6C,EAAQuQ,UAAU8wC,aAAe,SAAU9uC,GAEzC,IAAK,GADDioC,GAAQ19C,KAAK09C,MACRn4C,EAAI,EAAGC,EAAMiQ,EAAI/P,OAAYF,EAAJD,EAASA,IAAK,CAC9C,GAAIlF,GAAKoV,EAAIlQ,GACTknD,EAAO/O,EAAMr9C,EACbosD,KACc,MAAZA,EAAKuB,WACAhuD,MAAKiuD,QAAiB,QAAS,MAAExB,EAAKuB,IAAI3tD,IAEnDosD,EAAKoB,mBACEnQ,GAAMr9C,IAIjBL,KAAKwkD,QAAS,EACdxkD,KAAKstD,kBAAkB5P,GAC0B,GAA7C19C,KAAKohD,UAAUhB,mBAAmBpxC,SAAwC,GAArBhP,KAAKu8C,eAC5Dv8C,KAAKinD,eACLjnD,KAAK0kD,4BAEP1kD,KAAKotD,2BAOPlqD,EAAQuQ,UAAU45C,gBAAkB,WAClC,GAAIhtD,GACAw8C,EAAQ78C,KAAK68C,MACba,EAAQ19C,KAAK09C,KACjB,KAAKr9C,IAAMw8C,GACLA,EAAMh3C,eAAexF,KACvBw8C,EAAMx8C,GAAIq9C,SACVb,EAAMx8C,GAAI6tD,gBAId,KAAK7tD,IAAMq9C,GACT,GAAIA,EAAM73C,eAAexF,GAAK,CAC5B,GAAIosD,GAAO/O,EAAMr9C,EACjBosD,GAAK9iC,KAAO,KACZ8iC,EAAK7iC,GAAK,KACV6iC,EAAK9P,YAaXz5C,EAAQuQ,UAAU65C,kBAAoB,SAAShqC,GAC7C,GAAIjjB,GAGAoc,EAAWlW,OACXmW,EAAWnW,MACf,KAAKlG,IAAMijB,GACT,GAAIA,EAAIzd,eAAexF,GAAK,CAC1B,GAAI+G,GAAQkc,EAAIjjB,GAAI6U,UACN3O,UAAVa,IACFqV,EAAyBlW,SAAbkW,EAA0BrV,EAAQnC,KAAKwG,IAAIrE,EAAOqV,GAC9DC,EAAyBnW,SAAbmW,EAA0BtV,EAAQnC,KAAKiI,IAAI9F,EAAOsV,IAMpE,GAAiBnW,SAAbkW,GAAuClW,SAAbmW,EAC5B,IAAKrc,IAAMijB,GACLA,EAAIzd,eAAexF,IACrBijB,EAAIjjB,GAAI8tD,cAAc1xC,EAAUC,IAUxCxZ,EAAQuQ,UAAUuO,OAAS,WACzBhiB,KAAKklB,QAAQllB,KAAKohD,UAAUvuC,MAAO7S,KAAKohD,UAAUtuC,QAClD9S,KAAKuiD,WAOPr/C,EAAQuQ,UAAU8uC,QAAU,WAC1B,GAAIj7B,GAAMtnB,KAAK6f,MAAMC,OAAOyH,WAAW,KAEvCD,GAAIghC,aAAatoD,KAAKqhD,WAAY,EAAG,EAAGrhD,KAAKqhD,WAAY,EAAG,EAG5D,IAAI+M,GAAIpuD,KAAK6f,MAAMC,OAAOjN,MAAS7S,KAAKqhD,WACpC/1C,EAAItL,KAAK6f,MAAMC,OAAOhN,OAAU9S,KAAKqhD,UACzC/5B,GAAIE,UAAU,EAAG,EAAG4mC,EAAG9iD,GAGvBgc,EAAI+mC,OACJ/mC,EAAIgnC,UAAUtuD,KAAKge,YAAY3L,EAAGrS,KAAKge,YAAY1L,GACnDgV,EAAI9J,MAAMxd,KAAKwd,MAAOxd,KAAKwd,OAE3Bxd,KAAKyjD,eACHpxC,EAAKrS,KAAK0qD,qBAAqB,GAC/Bp4C,EAAKtS,KAAK4qD,qBAAqB,IAEjC5qD,KAAK0jD,mBACHrxC,EAAKrS,KAAK0qD,qBAAqB1qD,KAAK6f,MAAMC,OAAOC,YAAc/f,KAAKqhD,YACpE/uC,EAAKtS,KAAK4qD,qBAAqB5qD,KAAK6f,MAAMC,OAAOsF,aAAeplB,KAAKqhD,aAIvErhD,KAAKuuD,gBAAgB,sBAAsBjnC,IACjB,GAAtBtnB,KAAKulC,KAAK/F,UAA4Cj5B,SAAvBvG,KAAKulC,KAAK/F,UAA4D,GAAlCx/B,KAAKohD,UAAUF,kBACpFlhD,KAAKuuD,gBAAgB,aAAajnC,IAGV,GAAtBtnB,KAAKulC,KAAK/F,UAA4Cj5B,SAAvBvG,KAAKulC,KAAK/F,UAA4D,GAAlCx/B,KAAKohD,UAAUD,kBACpFnhD,KAAKuuD,gBAAgB,aAAajnC,GAAI,GAGT,GAA3BtnB,KAAKuhD,oBACPvhD,KAAKuuD,gBAAgB,oBAAoBjnC,GAO3CA,EAAIknC,WASNtrD,EAAQuQ,UAAUuvC,gBAAkB,SAASyL,EAASC,GAC3BnoD,SAArBvG,KAAKge,cACPhe,KAAKge,aACH3L,EAAG,EACHC,EAAG,IAIS/L,SAAZkoD,IACFzuD,KAAKge,YAAY3L,EAAIo8C,GAEPloD,SAAZmoD,IACF1uD,KAAKge,YAAY1L,EAAIo8C,GAGvB1uD,KAAKouB,KAAK,gBAQZlrB,EAAQuQ,UAAUu2C,gBAAkB,WAClC,OACE33C,EAAGrS,KAAKge,YAAY3L,EACpBC,EAAGtS,KAAKge,YAAY1L,IASxBpP,EAAQuQ,UAAU8J,UAAY,SAASC,GACrCxd,KAAKwd,MAAQA,GAQfta,EAAQuQ,UAAUm2C,UAAY,WAC5B,MAAO5pD,MAAKwd,OAUdta,EAAQuQ,UAAUi3C,qBAAuB,SAASr4C,GAChD,OAAQA,EAAIrS,KAAKge,YAAY3L,GAAKrS,KAAKwd,OAUzCta,EAAQuQ,UAAUk3C,qBAAuB,SAASt4C,GAChD,MAAOA,GAAIrS,KAAKwd,MAAQxd,KAAKge,YAAY3L,GAU3CnP,EAAQuQ,UAAUm3C,qBAAuB,SAASt4C,GAChD,OAAQA,EAAItS,KAAKge,YAAY1L,GAAKtS,KAAKwd,OAUzCta,EAAQuQ,UAAUo3C,qBAAuB,SAASv4C,GAChD,MAAOA,GAAItS,KAAKwd,MAAQxd,KAAKge,YAAY1L,GAU3CpP,EAAQuQ,UAAUm4C,YAAc,SAAU9lC,GACxC,OAAQzT,EAAGrS,KAAK2qD,qBAAqB7kC,EAAIzT,GAAIC,EAAGtS,KAAK6qD,qBAAqB/kC,EAAIxT,KAShFpP,EAAQuQ,UAAU63C,YAAc,SAAUxlC,GACxC,OAAQzT,EAAGrS,KAAK0qD,qBAAqB5kC,EAAIzT,GAAIC,EAAGtS,KAAK4qD,qBAAqB9kC,EAAIxT,KAUhFpP,EAAQuQ,UAAUk7C,WAAa,SAASrnC,EAAIsnC,GACvBroD,SAAfqoD,IACFA,GAAa,EAIf,IAAI/R,GAAQ78C,KAAK68C,MACb3J,IAEJ,KAAK,GAAI7yC,KAAMw8C,GACTA,EAAMh3C,eAAexF,KACvBw8C,EAAMx8C,GAAIwuD,eAAe7uD,KAAKwd,MAAMxd,KAAKyjD,cAAczjD,KAAK0jD,mBACxD7G,EAAMx8C,GAAI4pD,aACZ/W,EAAShrC,KAAK7H,IAGVw8C,EAAMx8C,GAAIyuD,UAAYF,IACxB/R,EAAMx8C,GAAI2rC,KAAK1kB,GAOvB,KAAK,GAAI/b,GAAI,EAAGwjD,EAAO7b,EAASxtC,OAAYqpD,EAAJxjD,EAAUA,KAC5CsxC,EAAM3J,EAAS3nC,IAAIujD,UAAYF,IACjC/R,EAAM3J,EAAS3nC,IAAIygC,KAAK1kB,IAW9BpkB,EAAQuQ,UAAUu7C,WAAa,SAAS1nC,GACtC,GAAIo2B,GAAQ19C,KAAK09C,KACjB,KAAK,GAAIr9C,KAAMq9C,GACb,GAAIA,EAAM73C,eAAexF,GAAK,CAC5B,GAAIosD,GAAO/O,EAAMr9C,EACjBosD,GAAKjpB,SAASxjC,KAAKwd,OACfivC,EAAKC,WACPhP,EAAMr9C,GAAI2rC,KAAK1kB,KAYvBpkB,EAAQuQ,UAAUw7C,kBAAoB,SAAS3nC,GAC7C,GAAIo2B,GAAQ19C,KAAK09C,KACjB,KAAK,GAAIr9C,KAAMq9C,GACTA,EAAM73C,eAAexF,IACvBq9C,EAAMr9C,GAAI4uD,kBAAkB3nC,IASlCpkB,EAAQuQ,UAAUyzC,WAAa,WACgB,GAAzClnD,KAAKohD,UAAUZ,wBACjBxgD,KAAKkvD,qBAKP,KADA,GAAI33C,GAAQ,EACLvX,KAAKwkD,QAAUjtC,EAAQvX,KAAKohD,UAAUL,yBAC3C/gD,KAAKmvD,eACL53C,GAEFvX,MAAK2kD,WAAWp+C,QAAU,GAAM,GACa,GAAzCvG,KAAKohD,UAAUZ,wBACjBxgD,KAAKovD,uBAUTlsD,EAAQuQ,UAAUy7C,oBAAsB,WACtC,GAAIrS,GAAQ78C,KAAK68C,KACjB,KAAK,GAAIx8C,KAAMw8C,GACTA,EAAMh3C,eAAexF,IACJ,MAAfw8C,EAAMx8C,GAAIgS,GAA4B,MAAfwqC,EAAMx8C,GAAIiS,IACnCuqC,EAAMx8C,GAAIgvD,UAAUh9C,EAAIwqC,EAAMx8C,GAAIiqD,OAClCzN,EAAMx8C,GAAIgvD,UAAU/8C,EAAIuqC,EAAMx8C,GAAIkqD,OAClC1N,EAAMx8C,GAAIiqD,QAAS,EACnBzN,EAAMx8C,GAAIkqD,QAAS,IAW3BrnD,EAAQuQ,UAAU27C,oBAAsB,WACtC,GAAIvS,GAAQ78C,KAAK68C,KACjB,KAAK,GAAIx8C,KAAMw8C,GACTA,EAAMh3C,eAAexF,IACM,MAAzBw8C,EAAMx8C,GAAIgvD,UAAUh9C,IACtBwqC,EAAMx8C,GAAIiqD,OAASzN,EAAMx8C,GAAIgvD,UAAUh9C,EACvCwqC,EAAMx8C,GAAIkqD,OAAS1N,EAAMx8C,GAAIgvD,UAAU/8C,IAa/CpP,EAAQuQ,UAAU67C,UAAY,SAASC,GACrC,GAAI1S,GAAQ78C,KAAK68C,KACjB,KAAK,GAAIx8C,KAAMw8C,GACb,GAAIA,EAAMh3C,eAAexF,IAAOw8C,EAAMx8C,GAAImvD,SAASD,GACjD,OAAO,CAGX,QAAO,GAUTrsD,EAAQuQ,UAAUg8C,mBAAqB,WACrC,GAEI/J,GAFA3yB,EAAW/yB,KAAKs8C,wBAChBO,EAAQ78C,KAAK68C,MAEb6S,GAAe,CAEnB,IAAI1vD,KAAKohD,UAAUR,YAAc,EAC/B,IAAK8E,IAAU7I,GACTA,EAAMh3C,eAAe6/C,KACvB7I,EAAM6I,GAAQiK,oBAAoB58B,EAAU/yB,KAAKohD,UAAUR,aAC3D8O,GAAe,OAKnB,KAAKhK,IAAU7I,GACTA,EAAMh3C,eAAe6/C,KACvB7I,EAAM6I,GAAQkK,aAAa78B,GAC3B28B,GAAe,EAKrB,IAAoB,GAAhBA,EAAsB,CACxB,GAAIG,GAAgB7vD,KAAKohD,UAAUP,YAAc57C,KAAKiI,IAAIlN,KAAKwd,MAAM,IACrE,OAAIqyC,GAAgB,GAAI7vD,KAAKohD,UAAUR,aAC9B,EAGA5gD,KAAKsvD,UAAUO,GAG1B,OAAO,GAQT3sD,EAAQuQ,UAAU07C,aAAe,WAC/B,IAAKnvD,KAAKijD,kBACW,GAAfjjD,KAAKwkD,OAAgB,CACvB,GAAIsL,IAAmB,EACnBC,GAAsB,CAE1B/vD,MAAKgwD,sBAAsB,8BAC3B,IAAIC,GAAajwD,KAAKgwD,sBAAsB,qBACD,IAAvChwD,KAAKohD,UAAUX,aAAazxC,SAA0D,GAAvChP,KAAKohD,UAAUX,aAAaC,UAC7EqP,EAAsB/vD,KAAKkwD,mBAAmB,sBAGhD,KAAK,GAAI3qD,GAAI,EAAGA,EAAI0qD,EAAWvqD,OAAQH,IAAMuqD,EAAmBG,EAAW,IAAMH,CAGjF9vD,MAAKwkD,OAASsL,GAAoBC,EAElC/vD,KAAK+gD,4BAYX79C,EAAQuQ,UAAU08C,eAAiB,WAEjCnwD,KAAKykD,MAAQl+C,OAEbvG,KAAKowD,oBAGLpwD,KAAKkQ,OAGL,IAAImgD,GAAkBhsD,KAAKq5B,MACvB4yB,EAAW,CACftwD,MAAKmvD,cAEL,KADA,GAAIoB,GAAelsD,KAAKq5B,MAAQ2yB,EACzBE,EAAe,IAAKvwD,KAAKm8C,eAAiBn8C,KAAKo8C,aAAekU,EAAWtwD,KAAKq8C,0BACnFr8C,KAAKmvD,eACLoB,EAAelsD,KAAKq5B,MAAQ2yB,EAC5BC,GAGF,IAAIlU,GAAa/3C,KAAKq5B,KACtB19B,MAAKuiD,UACLviD,KAAKo8C,WAAa/3C,KAAKq5B,MAAQ0e,GAGX,mBAAX30C,UACTA,OAAO+oD,sBAAwB/oD,OAAO+oD,uBAAyB/oD,OAAOgpD,0BACvChpD,OAAOipD,6BAA+BjpD,OAAOkpD,yBAM9EztD,EAAQuQ,UAAUvD,MAAQ,WACxB,GAAmB,GAAflQ,KAAKwkD,QAAqC,GAAnBxkD,KAAKwiD,YAAsC,GAAnBxiD,KAAKyiD,YAAyC,GAAtBziD,KAAK0iD,eAM9E,GALiC,GAA7B1iD,KAAKmjD,uBACPnjD,KAAKouB,KAAK,sBACVpuB,KAAKmjD,sBAAuB,IAGzBnjD,KAAKykD,MAAO,CACf,GAAImM,GAAK1nD,UAAUC,UAAU0nD,cAEzBC,GAAkB,CACQ,KAA1BF,EAAGlqD,QAAQ,YACboqD,GAAkB,EAEa,IAAxBF,EAAGlqD,QAAQ,WACdkqD,EAAGlqD,QAAQ,WAAa,KAC1BoqD,GAAkB,GAKpB9wD,KAAKykD,MADgB,GAAnBqM,EACWrpD,OAAOoS,WAAW7Z,KAAKmwD,eAAe96B,KAAKr1B,MAAOA,KAAKm8C,gBAGvD10C,OAAO+oD,sBAAsBxwD,KAAKmwD,eAAe96B,KAAKr1B,MAAOA,KAAKm8C,qBAMnF,IADAn8C,KAAKuiD,UACDviD,KAAK+gD,wBAA0B,EAAG,CAKpC,GAAItsC,GAAKzU,KACLoU,GACF28C,WAAYt8C,EAAGssC,wBAEjBtsC,GAAGssC,wBAA0B,EAC7BtsC,EAAG0uC,sBAAuB,EAC1BtpC,WAAW,WACTpF,EAAG2Z,KAAK,aAAcha,IACrB,KAWTlR,EAAQuQ,UAAU28C,kBAAoB,WACpC,GAAuB,GAAnBpwD,KAAKwiD,YAAsC,GAAnBxiD,KAAKyiD,WAAiB,CAChD,GAAIzkC,GAAche,KAAKgqD,iBACvBhqD,MAAKgjD,gBAAgBhlC,EAAY3L,EAAErS,KAAKwiD,WAAYxkC,EAAY1L,EAAEtS,KAAKyiD,YAEzE,GAA0B,GAAtBziD,KAAK0iD,cAAoB,CAC3B,GAAIh2B,IACFra,EAAGrS,KAAK6f,MAAMC,OAAOC,YAAc,EACnCzN,EAAGtS,KAAK6f,MAAMC,OAAOsF,aAAe,EAEtCplB,MAAKmrD,MAAMnrD,KAAKwd,OAAO,EAAIxd,KAAK0iD,eAAgBh2B,KAQpDxpB,EAAQuQ,UAAUu9C,aAAe,WACF,GAAzBhxD,KAAKijD,iBACPjjD,KAAKijD,kBAAmB,GAGxBjjD,KAAKijD,kBAAmB,EACxBjjD,KAAKkQ,UAWThN,EAAQuQ,UAAUs0C,uBAAyB,SAASjC,GAIlD,GAHqBv/C,SAAjBu/C,IACFA,GAAe,GAE0B,GAAvC9lD,KAAKohD,UAAUX,aAAazxC,SAA0D,GAAvChP,KAAKohD,UAAUX,aAAaC,QAAiB,CAC9F1gD,KAAK+tD,oBAEL,KAAK,GAAIrI,KAAU1lD,MAAKiuD,QAAiB,QAAS,MAC5CjuD,KAAKiuD,QAAiB,QAAS,MAAEpoD,eAAe6/C,IACwBn/C,SAAtEvG,KAAK09C,MAAM19C,KAAKiuD,QAAiB,QAAS,MAAEvI,GAAQuL,qBAC/CjxD,MAAKiuD,QAAiB,QAAS,MAAEvI,OAK3C,CAEH1lD,KAAKiuD,QAAiB,QAAS,QAC/B,KAAK,GAAI/B,KAAUlsD,MAAK09C,MAClB19C,KAAK09C,MAAM73C,eAAeqmD,KAC5BlsD,KAAK09C,MAAMwO,GAAQ8B,IAAM,MAM/BhuD,KAAKotD,0BACAtH,IACH9lD,KAAKwkD,QAAS,EACdxkD,KAAKkQ,UAWThN,EAAQuQ,UAAUs6C,mBAAqB,WACrC,GAA2C,GAAvC/tD,KAAKohD,UAAUX,aAAazxC,SAA0D,GAAvChP,KAAKohD,UAAUX,aAAaC,QAC7E,IAAK,GAAIwL,KAAUlsD,MAAK09C,MACtB,GAAI19C,KAAK09C,MAAM73C,eAAeqmD,GAAS,CACrC,GAAIO,GAAOzsD,KAAK09C,MAAMwO,EACtB,IAAgB,MAAZO,EAAKuB,IAAa,CACpB,GAAItI,GAAS,UAAUpxC,OAAOm4C,EAAKpsD,GACnCL,MAAKiuD,QAAiB,QAAS,MAAEvI,GAAU,GAAIniD,IACtClD,GAAGqlD,EACF5I,KAAK,EACLG,MAAM,SACNC,MAAM,GACNgU,mBAAmB,SACblxD,KAAKohD,WACrBqL,EAAKuB,IAAMhuD,KAAKiuD,QAAiB,QAAS,MAAEvI,GAC5C+G,EAAKuB,IAAIiD,aAAexE,EAAKpsD,GAC7BosD,EAAK0E,wBAYfjuD,EAAQuQ,UAAUwoC,wBAA0B,WAC1C,IAAK,GAAImV,KAAStM,GACZA,EAAYj/C,eAAeurD,KAC7BluD,EAAQuQ,UAAU29C,GAAStM,EAAYsM,KAQ7CluD,EAAQuQ,UAAU49C,cAAgB,WAChCp4B,QAAQ/E,IAAI,mEACZl0B,KAAKsxD,kBAMPpuD,EAAQuQ,UAAU69C,eAAiB,WACjC,GAAIC,KACJ,KAAK,GAAI7L,KAAU1lD,MAAK68C,MACtB,GAAI78C,KAAK68C,MAAMh3C,eAAe6/C,GAAS,CACrC,GAAIL,GAAOrlD,KAAK68C,MAAM6I,GAClB8L,GAAkBxxD,KAAK68C,MAAMyN,OAC7BmH,GAAkBzxD,KAAK68C,MAAM0N,QAC7BvqD,KAAK8jD,UAAU5wC,MAAMwyC,GAAQrzC,GAAKpN,KAAKipB,MAAMm3B,EAAKhzC,IAAMrS,KAAK8jD,UAAU5wC,MAAMwyC,GAAQpzC,GAAKrN,KAAKipB,MAAMm3B,EAAK/yC,KAC5Gi/C,EAAUrpD,MAAM7H,GAAGqlD,EAAOrzC,EAAEpN,KAAKipB,MAAMm3B,EAAKhzC,GAAGC,EAAErN,KAAKipB,MAAMm3B,EAAK/yC,GAAGk/C,eAAeA,EAAeC,eAAeA,IAIvHzxD,KAAK8jD,UAAU3uC,OAAOo8C,IAMxBruD,EAAQuQ,UAAUi+C,aAAe,SAASj8C,GACxC,GAAI87C,KACJ,IAAYhrD,SAARkP,GACF,GAA0B,GAAtBzP,MAAMC,QAAQwP,IAChB,IAAK,GAAIlQ,GAAI,EAAGA,EAAIkQ,EAAI/P,OAAQH,IAC9B,GAA2BgB,SAAvBvG,KAAK68C,MAAMpnC,EAAIlQ,IAAmB,CACpC,GAAI8/C,GAAOrlD,KAAK68C,MAAMpnC,EAAIlQ,GAC1BgsD,GAAU97C,EAAIlQ,KAAO8M,EAAGpN,KAAKipB,MAAMm3B,EAAKhzC,GAAIC,EAAGrN,KAAKipB,MAAMm3B,EAAK/yC,SAKnE,IAAwB/L,SAApBvG,KAAK68C,MAAMpnC,GAAoB,CACjC,GAAI4vC,GAAOrlD,KAAK68C,MAAMpnC,EACtB87C,GAAU97C,IAAQpD,EAAGpN,KAAKipB,MAAMm3B,EAAKhzC,GAAIC,EAAGrN,KAAKipB,MAAMm3B,EAAK/yC,SAKhE,KAAK,GAAIozC,KAAU1lD,MAAK68C,MACtB,GAAI78C,KAAK68C,MAAMh3C,eAAe6/C,GAAS,CACrC,GAAIL,GAAOrlD,KAAK68C,MAAM6I,EACtB6L,GAAU7L,IAAWrzC,EAAGpN,KAAKipB,MAAMm3B,EAAKhzC,GAAIC,EAAGrN,KAAKipB,MAAMm3B,EAAK/yC,IAIrE,MAAOi/C,IAWTruD,EAAQuQ,UAAUk+C,YAAc,SAAUjM,EAAQ32C,GAChD,GAAI/O,KAAK68C,MAAMh3C,eAAe6/C,GAAS,CACrBn/C,SAAZwI,IACFA,KAEF,IAAI6iD,IAAgBv/C,EAAGrS,KAAK68C,MAAM6I,GAAQrzC,EAAGC,EAAGtS,KAAK68C,MAAM6I,GAAQpzC,EACnEvD,GAAQoV,SAAWytC,EACnB7iD,EAAQ8iD,aAAenM,EAEvB1lD,KAAKooB,OAAOrZ,OAGZkqB,SAAQ/E,IAAI,iCAWhBhxB,EAAQuQ,UAAU2U,OAAS,SAAUrZ,GACnC,MAAgBxI,UAAZwI,OACFA,OAGwBxI,SAAtBwI,EAAQmb,SAAoCnb,EAAQmb,QAAa7X,EAAG,EAAGC,EAAG,IACpD/L,SAAtBwI,EAAQmb,OAAO7X,IAA6BtD,EAAQmb,OAAO7X,EAAK,GAC1C9L,SAAtBwI,EAAQmb,OAAO5X,IAA6BvD,EAAQmb,OAAO5X,EAAK,GAC1C/L,SAAtBwI,EAAQyO,QAAoCzO,EAAQyO,MAAYxd,KAAK4pD,aAC/CrjD,SAAtBwI,EAAQoV,WAAoCpV,EAAQoV,SAAYnkB,KAAKgqD,mBAC/CzjD,SAAtBwI,EAAQs3C,YAAoCt3C,EAAQs3C,WAAaj2C,SAAS,IAC1ErB,EAAQs3C,aAAc,IAAsBt3C,EAAQs3C,WAAaj2C,SAAS,IAC1ErB,EAAQs3C,aAAc,IAAsBt3C,EAAQs3C,cACrB9/C,SAA/BwI,EAAQs3C,UAAUj2C,WAA0BrB,EAAQs3C,UAAUj2C,SAAW,KACpC7J,SAArCwI,EAAQs3C,UAAUyL,iBAAgC/iD,EAAQs3C,UAAUyL,eAAiB,qBAEzF9xD,MAAK+xD,YAAYhjD,KAcnB7L,EAAQuQ,UAAUs+C,YAAc,SAAUhjD,GACxC,GAAgBxI,SAAZwI,EAEF,YADAA,KAKF/O,MAAKyqD,cACiB,GAAlB17C,EAAQijD,SACVhyD,KAAKkiD,eAAiBnzC,EAAQ8iD,aAC9B7xD,KAAKmiD,mBAAqBpzC,EAAQmb,QAIb,GAAnBlqB,KAAK6hD,YACP7hD,KAAKiyD,kBAAkB,GAGzBjyD,KAAK8hD,YAAc9hD,KAAK4pD,YACxB5pD,KAAKgiD,kBAAoBhiD,KAAKgqD,kBAC9BhqD,KAAK+hD,YAAchzC,EAAQyO,MAI3Bxd,KAAKud,UAAUvd,KAAK+hD,YACpB,IAAImQ,GAAalyD,KAAKsrD,aAAaj5C,EAAG,GAAMrS,KAAK6f,MAAMC,OAAOC,YAAazN,EAAG,GAAMtS,KAAK6f,MAAMC,OAAOsF,eAClG+sC,GACF9/C,EAAG6/C,EAAW7/C,EAAItD,EAAQoV,SAAS9R,EACnCC,EAAG4/C,EAAW5/C,EAAIvD,EAAQoV,SAAS7R,EAErCtS,MAAKiiD,mBACH5vC,EAAGrS,KAAKgiD,kBAAkB3vC,EAAI8/C,EAAmB9/C,EAAIrS,KAAK+hD,YAAchzC,EAAQmb,OAAO7X,EACvFC,EAAGtS,KAAKgiD,kBAAkB1vC,EAAI6/C,EAAmB7/C,EAAItS,KAAK+hD,YAAchzC,EAAQmb,OAAO5X,GAIvD,GAA9BvD,EAAQs3C,UAAUj2C,SACO,MAAvBpQ,KAAKkiD,gBACPliD,KAAKoyD,eAAiBpyD,KAAKuiD,QAC3BviD,KAAKuiD,QAAUviD,KAAKqyD,gBAGpBryD,KAAKud,UAAUvd,KAAK+hD,aACpB/hD,KAAKgjD,gBAAgBhjD,KAAKiiD,kBAAkB5vC,EAAGrS,KAAKiiD,kBAAkB3vC,GACtEtS,KAAKuiD,YAIPviD,KAAK2hD,eAAiB,GAAK3hD,KAAKk8C,kBAAoBntC,EAAQs3C,UAAUj2C,SAAW,OAAU,EAAIpQ,KAAKk8C,kBACpGl8C,KAAK4hD,wBAA0B7yC,EAAQs3C,UAAUyL,eACjD9xD,KAAKoyD,eAAiBpyD,KAAKuiD,QAC3BviD,KAAKuiD,QAAUviD,KAAKiyD,kBACpBjyD,KAAKuiD,UACLviD,KAAKwkD,QAAS,EACdxkD,KAAKkQ,UAKThN,EAAQuQ,UAAU4+C,cAAgB,WAChC,GAAIT,IAAgBv/C,EAAGrS,KAAK68C,MAAM78C,KAAKkiD,gBAAgB7vC,EAAGC,EAAGtS,KAAK68C,MAAM78C,KAAKkiD,gBAAgB5vC,GACzF4/C,EAAalyD,KAAKsrD,aAAaj5C,EAAG,GAAMrS,KAAK6f,MAAMC,OAAOC,YAAazN,EAAG,GAAMtS,KAAK6f,MAAMC,OAAOsF,eAClG+sC,GACF9/C,EAAG6/C,EAAW7/C,EAAIu/C,EAAav/C,EAC/BC,EAAG4/C,EAAW5/C,EAAIs/C,EAAat/C,GAE7B0vC,EAAoBhiD,KAAKgqD,kBACzB/H,GACF5vC,EAAG2vC,EAAkB3vC,EAAI8/C,EAAmB9/C,EAAIrS,KAAKwd,MAAQxd,KAAKmiD,mBAAmB9vC,EACrFC,EAAG0vC,EAAkB1vC,EAAI6/C,EAAmB7/C,EAAItS,KAAKwd,MAAQxd,KAAKmiD,mBAAmB7vC,EAGvFtS,MAAKgjD,gBAAgBf,EAAkB5vC,EAAE4vC,EAAkB3vC,GAC3DtS,KAAKoyD,kBAGPlvD,EAAQuQ,UAAUg3C,YAAc,WACH,MAAvBzqD,KAAKkiD,iBACPliD,KAAKuiD,QAAUviD,KAAKoyD,eACpBpyD,KAAKkiD,eAAiB,KACtBliD,KAAKmiD,mBAAqB,OAS9Bj/C,EAAQuQ,UAAUw+C,kBAAoB,SAAUpQ,GAC9C7hD,KAAK6hD,WAAaA,GAAc7hD,KAAK6hD,WAAa7hD,KAAK2hD,eACvD3hD,KAAK6hD,YAAc7hD,KAAK2hD,cAExB,IAAI3vB,GAAWrxB,EAAK2P,gBAAgBtQ,KAAK4hD,yBAAyB5hD,KAAK6hD,WAEvE7hD,MAAKud,UAAUvd,KAAK8hD,aAAe9hD,KAAK+hD,YAAc/hD,KAAK8hD,aAAe9vB,GAC1EhyB,KAAKgjD,gBACHhjD,KAAKgiD,kBAAkB3vC,GAAKrS,KAAKiiD,kBAAkB5vC,EAAIrS,KAAKgiD,kBAAkB3vC,GAAK2f,EACnFhyB,KAAKgiD,kBAAkB1vC,GAAKtS,KAAKiiD,kBAAkB3vC,EAAItS,KAAKgiD,kBAAkB1vC,GAAK0f,GAGrFhyB,KAAKoyD,iBACLpyD,KAAKwkD,QAAS,EAGVxkD,KAAK6hD,YAAc,IACrB7hD,KAAK6hD,WAAa,EAEhB7hD,KAAKuiD,QADoB,MAAvBviD,KAAKkiD,eACQliD,KAAKqyD,cAGLryD,KAAKoyD,eAEtBpyD,KAAKouB,KAAK,uBAIdlrB,EAAQuQ,UAAU2+C,eAAiB,aAQnClvD,EAAQuQ,UAAUq1C,SAAW,WAC3B,OAAQ9oD,KAAK2nD,WAAa3nD,KAAK2nD,UAAU2K,QAQ3CpvD,EAAQuQ,UAAU+vB,SAAW,WAC3B,MAAOxjC,MAAKud,aAQdra,EAAQuQ,UAAU8+C,SAAW,WAC3B,MAAOvyD,MAAK4pD,aAQd1mD,EAAQuQ,UAAU++C,qBAAuB,WACvC,MAAOxyD,MAAKsrD,aAAaj5C,EAAG,GAAMrS,KAAK6f,MAAMC,OAAOC,YAAazN,EAAG,GAAMtS,KAAK6f,MAAMC,OAAOsF,gBAG9FvlB,EAAOD,QAAUsD,GAKb,SAASrD,EAAQD,EAASM,GAoB9B,QAASkD,GAAMsqD,EAAYvqD,EAASsvD,GAClC,IAAKtvD,EACH,KAAM,qBAER,IAAIqL,IAAU,QAAQ,WAClB4yC,EAAYzgD,EAAK4N,sBAAsBC,EAAOikD,EAClDzyD,MAAK+O,QAAUqyC,EAAU1D,MACzB19C,KAAKm+C,QAAUiD,EAAUjD,QACzBn+C,KAAK+O,QAAsB,aAAI0jD,EAA+B,aAG9DzyD,KAAKmD,QAAUA,EAGfnD,KAAKK,GAASkG,OACdvG,KAAK0yD,OAASnsD,OACdvG,KAAK2yD,KAASpsD,OACdvG,KAAKglC,MAASz+B,OACdvG,KAAK4yD,cAAgB5yD,KAAK+O,QAAQ8D,MAAQ7S,KAAK+O,QAAQ4uC,yBACvD39C,KAAKoH,MAASb,OACdvG,KAAKkzC,UAAW,EAChBlzC,KAAKiM,OAAQ,EACbjM,KAAK6yD,iBAAmBjrD,IAAI,EAAEJ,KAAK,EAAEqL,MAAM,EAAEC,OAAO,EAAEggD,MAAM,GAC5D9yD,KAAK+yD,YAAa,EAElB/yD,KAAK2pB,KAAO,KACZ3pB,KAAK4pB,GAAK,KACV5pB,KAAKguD,IAAM,KAEXhuD,KAAKgzD,WAAa,KAClBhzD,KAAKizD,SAAW,KAIhBjzD,KAAKkzD,kBACLlzD,KAAKmzD,gBAELnzD,KAAK0sD,WAAY,EAEjB1sD,KAAKozD,YAAc,EACnBpzD,KAAKqzD,aAAc,EAEnBrzD,KAAKytD,cAAcC,GAEnB1tD,KAAKszD,qBAAsB,EAC3BtzD,KAAKuzD,cAAgB5pC,KAAK,KAAMC,GAAG,KAAM4pC,cACzCxzD,KAAKyzD,cAAgB,KAhEvB,GAAI9yD,GAAOT,EAAoB,GAC3BqD,EAAOrD,EAAoB,GAuE/BkD,GAAKqQ,UAAUg6C,cAAgB,SAASC,GACtC,GAAKA,EAAL,CAIA,GAAIl/C,IAAU,QAAQ,WAAW,WAAW,YAAY,WAAW,QACjE,2BAA2B,aAAa,mBAAmB,OAAO,eAoCpE,QAlCA7N,EAAKuF,oBAAoBsI,EAAQxO,KAAK+O,QAAS2+C,GAEvBnnD,SAApBmnD,EAAW/jC,OAA+B3pB,KAAK0yD,OAAShF,EAAW/jC,MACjDpjB,SAAlBmnD,EAAW9jC,KAA+B5pB,KAAK2yD,KAAOjF,EAAW9jC,IAE/CrjB,SAAlBmnD,EAAWrtD,KAA+BL,KAAKK,GAAKqtD,EAAWrtD,IAC1CkG,SAArBmnD,EAAW1kC,QAA+BhpB,KAAKgpB,MAAQ0kC,EAAW1kC,MAAOhpB,KAAK+yD,YAAa,GAEtExsD,SAArBmnD,EAAW1oB,QAA6BhlC,KAAKglC,MAAQ0oB,EAAW1oB,OAC3Cz+B,SAArBmnD,EAAWtmD,QAA6BpH,KAAKoH,MAAQsmD,EAAWtmD,OAC1Cb,SAAtBmnD,EAAWhoD,SAA6B1F,KAAKm+C,QAAQK,aAAekP,EAAWhoD,QAE1Da,SAArBmnD,EAAW7iD,QACb7K,KAAK+O,QAAQkvC,cAAe,EACxBt9C,EAAKuD,SAASwpD,EAAW7iD,QAC3B7K,KAAK+O,QAAQlE,MAAMA,MAAQ6iD,EAAW7iD,MACtC7K,KAAK+O,QAAQlE,MAAMmB,UAAY0hD,EAAW7iD,QAGXtE,SAA3BmnD,EAAW7iD,MAAMA,QAA0B7K,KAAK+O,QAAQlE,MAAMA,MAAQ6iD,EAAW7iD,MAAMA,OACxDtE,SAA/BmnD,EAAW7iD,MAAMmB,YAA0BhM,KAAK+O,QAAQlE,MAAMmB,UAAY0hD,EAAW7iD,MAAMmB,WAChEzF,SAA3BmnD,EAAW7iD,MAAMoB,QAA0BjM,KAAK+O,QAAQlE,MAAMoB,MAAQyhD,EAAW7iD,MAAMoB,SAK/FjM,KAAK28C,UAEL38C,KAAKozD,WAAapzD,KAAKozD,YAAoC7sD,SAArBmnD,EAAW76C,MACjD7S,KAAKqzD,YAAcrzD,KAAKqzD,aAAsC9sD,SAAtBmnD,EAAWhoD,OAEnD1F,KAAK4yD,cAAgB5yD,KAAK+O,QAAQ8D,MAAO7S,KAAK+O,QAAQ4uC,yBAG9C39C,KAAK+O,QAAQvB,OACnB,IAAK,OAAiBxN,KAAKgsC,KAAOhsC,KAAK0zD,SAAW,MAClD,KAAK,QAAiB1zD,KAAKgsC,KAAOhsC,KAAK2zD,UAAY,MACnD,KAAK,eAAiB3zD,KAAKgsC,KAAOhsC,KAAK4zD,gBAAkB,MACzD,KAAK,YAAiB5zD,KAAKgsC,KAAOhsC,KAAK6zD,aAAe,MACtD,SAAsB7zD,KAAKgsC,KAAOhsC,KAAK0zD,aAO3CtwD,EAAKqQ,UAAUkpC,QAAU,WACvB38C,KAAK6tD,aAEL7tD,KAAK2pB,KAAO3pB,KAAKmD,QAAQ05C,MAAM78C,KAAK0yD,SAAW,KAC/C1yD,KAAK4pB,GAAK5pB,KAAKmD,QAAQ05C,MAAM78C,KAAK2yD,OAAS,KAC3C3yD,KAAK0sD,UAAa1sD,KAAK2pB,MAAQ3pB,KAAK4pB,GAEhC5pB,KAAK0sD,WACP1sD,KAAK2pB,KAAKmqC,WAAW9zD,MACrBA,KAAK4pB,GAAGkqC,WAAW9zD,QAGfA,KAAK2pB,MACP3pB,KAAK2pB,KAAKoqC,WAAW/zD,MAEnBA,KAAK4pB,IACP5pB,KAAK4pB,GAAGmqC,WAAW/zD,QAQzBoD,EAAKqQ,UAAUo6C,WAAa,WACtB7tD,KAAK2pB,OACP3pB,KAAK2pB,KAAKoqC,WAAW/zD,MACrBA,KAAK2pB,KAAO,MAEV3pB,KAAK4pB,KACP5pB,KAAK4pB,GAAGmqC,WAAW/zD,MACnBA,KAAK4pB,GAAK,MAGZ5pB,KAAK0sD,WAAY,GAQnBtpD,EAAKqQ,UAAU84C,SAAW,WACxB,MAA6B,kBAAfvsD,MAAKglC,MAAuBhlC,KAAKglC,QAAUhlC,KAAKglC,OAQhE5hC,EAAKqQ,UAAUyB,SAAW,WACxB,MAAOlV,MAAKoH,OASdhE,EAAKqQ,UAAU06C,cAAgB,SAAS1iD,EAAKyB,GAC3C,IAAKlN,KAAKozD,YAA6B7sD,SAAfvG,KAAKoH,MAAqB,CAChD,GAAIoW,IAASxd,KAAK+O,QAAQ2Y,SAAW1nB,KAAK+O,QAAQ0Y,WAAava,EAAMzB,EACrEzL,MAAK+O,QAAQ8D,OAAQ7S,KAAKoH,MAAQqE,GAAO+R,EAAQxd,KAAK+O,QAAQ0Y,SAC9DznB,KAAK4yD,cAAgB5yD,KAAK+O,QAAQ8D,MAAO7S,KAAK+O,QAAQ4uC,2BAU1Dv6C,EAAKqQ,UAAUu4B,KAAO,WACpB,KAAM,uCAQR5oC,EAAKqQ,UAAU+4C,kBAAoB,SAASlpC,GAC1C,GAAItjB,KAAK0sD,UAAW,CAClB,GAAI/8B,GAAU,GACVqkC,EAAQh0D,KAAK2pB,KAAKtX,EAClB4hD,EAAQj0D,KAAK2pB,KAAKrX,EAClB4hD,EAAMl0D,KAAK4pB,GAAGvX,EACd8hD,EAAMn0D,KAAK4pB,GAAGtX,EACd8hD,EAAO9wC,EAAI9b,KACX6sD,EAAO/wC,EAAI1b,IAEX8jB,EAAO1rB,KAAKs0D,mBAAmBN,EAAOC,EAAOC,EAAKC,EAAKC,EAAMC,EAEjE,OAAe1kC,GAAPjE,EAGR,OAAO,GAIXtoB,EAAKqQ,UAAU8gD,UAAY,WACzB,GAAIC,GAAWx0D,KAAK+O,QAAQlE,KAgB5B,OAfiC,MAA7B7K,KAAK+O,QAAQkvC,aACfuW,GACExoD,UAAWhM,KAAK4pB,GAAG7a,QAAQlE,MAAMmB,UAAUD,OAC3CE,MAAOjM,KAAK4pB,GAAG7a,QAAQlE,MAAMoB,MAAMF,OACnClB,MAAO7K,KAAK4pB,GAAG7a,QAAQlE,MAAMkB,SAGK,QAA7B/L,KAAK+O,QAAQkvC,cAAuD,GAA7Bj+C,KAAK+O,QAAQkvC,gBAC3DuW,GACExoD,UAAWhM,KAAK2pB,KAAK5a,QAAQlE,MAAMmB,UAAUD,OAC7CE,MAAOjM,KAAK2pB,KAAK5a,QAAQlE,MAAMoB,MAAMF,OACrClB,MAAO7K,KAAK2pB,KAAK5a,QAAQlE,MAAMkB,SAId,GAAjB/L,KAAKkzC,SAA4BshB,EAASxoD,UACvB,GAAdhM,KAAKiM,MAAuBuoD,EAASvoD,MACTuoD,EAAS3pD;EAWhDzH,EAAKqQ,UAAUigD,UAAY,SAASpsC,GAKlC,GAHAA,EAAIY,YAAcloB,KAAKu0D,YACvBjtC,EAAIO,UAAc7nB,KAAKy0D,gBAEnBz0D,KAAK2pB,MAAQ3pB,KAAK4pB,GAAI,CAExB,GAGIpX,GAHAw7C,EAAMhuD,KAAK00D,MAAMptC,EAIrB,IAAItnB,KAAKgpB,MAAO,CACd,GAAyC,GAArChpB,KAAK+O,QAAQ0xC,aAAazxC,SAA0B,MAAPg/C,EAAa,CAC5D,GAAI2G,GAAY,IAAK,IAAK30D,KAAK2pB,KAAKtX,EAAI27C,EAAI37C,GAAK,IAAKrS,KAAK4pB,GAAGvX,EAAI27C,EAAI37C,IAClEuiD,EAAY,IAAK,IAAK50D,KAAK2pB,KAAKrX,EAAI07C,EAAI17C,GAAK,IAAKtS,KAAK4pB,GAAGtX,EAAI07C,EAAI17C,GACtEE,IAASH,EAAEsiD,EAAWriD,EAAEsiD,OAGxBpiD,GAAQxS,KAAK60D,aAAa,GAE5B70D,MAAK80D,OAAOxtC,EAAKtnB,KAAKgpB,MAAOxW,EAAMH,EAAGG,EAAMF,QAG3C,CACH,GAAID,GAAGC,EACH2Z,EAASjsB,KAAKm+C,QAAQK,aAAe,EACrC6G,EAAOrlD,KAAK2pB,IACX07B,GAAKxyC,OACRwyC,EAAK0P,OAAOztC,GAEV+9B,EAAKxyC,MAAQwyC,EAAKvyC,QACpBT,EAAIgzC,EAAKhzC,EAAIgzC,EAAKxyC,MAAQ,EAC1BP,EAAI+yC,EAAK/yC,EAAI2Z,IAGb5Z,EAAIgzC,EAAKhzC,EAAI4Z,EACb3Z,EAAI+yC,EAAK/yC,EAAI+yC,EAAKvyC,OAAS,GAE7B9S,KAAKg1D,QAAQ1tC,EAAKjV,EAAGC,EAAG2Z,GACxBzZ,EAAQxS,KAAKi1D,eAAe5iD,EAAGC,EAAG2Z,EAAQ,IAC1CjsB,KAAK80D,OAAOxtC,EAAKtnB,KAAKgpB,MAAOxW,EAAMH,EAAGG,EAAMF,KAUhDlP,EAAKqQ,UAAUghD,cAAgB,WAC7B,MAAqB,IAAjBz0D,KAAKkzC,SACCjuC,KAAKiI,IAAIjI,KAAKwG,IAAIzL,KAAK4yD,cAAe5yD,KAAK+O,QAAQ2Y,UAAW,GAAI1nB,KAAKk1D,iBAG7D,GAAdl1D,KAAKiM,MACAhH,KAAKiI,IAAIjI,KAAKwG,IAAIzL,KAAK+O,QAAQ6uC,WAAY59C,KAAK+O,QAAQ2Y,UAAW,GAAI1nB,KAAKk1D,iBAG5EjwD,KAAKiI,IAAIlN,KAAK+O,QAAQ8D,MAAO,GAAI7S,KAAKk1D,kBAKnD9xD,EAAKqQ,UAAU0hD,mBAAqB,WAClC,GAAIC,GAAO,KACPC,EAAO,KACPpP,EAASjmD,KAAK+O,QAAQ0xC,aAAaE,UACnC95C,EAAO7G,KAAK+O,QAAQ0xC,aAAa55C,KAEjCsY,EAAKla,KAAKmmB,IAAIprB,KAAK2pB,KAAKtX,EAAIrS,KAAK4pB,GAAGvX,GACpC+M,EAAKna,KAAKmmB,IAAIprB,KAAK2pB,KAAKrX,EAAItS,KAAK4pB,GAAGtX,EA2JxC,OA1JY,YAARzL,GAA8B,iBAARA,EACpB5B,KAAKmmB,IAAIprB,KAAK2pB,KAAKtX,EAAIrS,KAAK4pB,GAAGvX,GAAKpN,KAAKmmB,IAAIprB,KAAK2pB,KAAKrX,EAAItS,KAAK4pB,GAAGtX,IACjEtS,KAAK2pB,KAAKrX,EAAItS,KAAK4pB,GAAGtX,EACpBtS,KAAK2pB,KAAKtX,EAAIrS,KAAK4pB,GAAGvX,GACxB+iD,EAAOp1D,KAAK2pB,KAAKtX,EAAI4zC,EAAS7mC,EAC9Bi2C,EAAOr1D,KAAK2pB,KAAKrX,EAAI2zC,EAAS7mC,GAEvBpf,KAAK2pB,KAAKtX,EAAIrS,KAAK4pB,GAAGvX,IAC7B+iD,EAAOp1D,KAAK2pB,KAAKtX,EAAI4zC,EAAS7mC,EAC9Bi2C,EAAOr1D,KAAK2pB,KAAKrX,EAAI2zC,EAAS7mC,GAGzBpf,KAAK2pB,KAAKrX,EAAItS,KAAK4pB,GAAGtX,IACzBtS,KAAK2pB,KAAKtX,EAAIrS,KAAK4pB,GAAGvX,GACxB+iD,EAAOp1D,KAAK2pB,KAAKtX,EAAI4zC,EAAS7mC,EAC9Bi2C,EAAOr1D,KAAK2pB,KAAKrX,EAAI2zC,EAAS7mC,GAEvBpf,KAAK2pB,KAAKtX,EAAIrS,KAAK4pB,GAAGvX,IAC7B+iD,EAAOp1D,KAAK2pB,KAAKtX,EAAI4zC,EAAS7mC,EAC9Bi2C,EAAOr1D,KAAK2pB,KAAKrX,EAAI2zC,EAAS7mC,IAGtB,YAARvY,IACFuuD,EAAYnP,EAAS7mC,EAAdD,EAAmBnf,KAAK2pB,KAAKtX,EAAI+iD,IAGnCnwD,KAAKmmB,IAAIprB,KAAK2pB,KAAKtX,EAAIrS,KAAK4pB,GAAGvX,GAAKpN,KAAKmmB,IAAIprB,KAAK2pB,KAAKrX,EAAItS,KAAK4pB,GAAGtX,KACtEtS,KAAK2pB,KAAKrX,EAAItS,KAAK4pB,GAAGtX,EACpBtS,KAAK2pB,KAAKtX,EAAIrS,KAAK4pB,GAAGvX,GACxB+iD,EAAOp1D,KAAK2pB,KAAKtX,EAAI4zC,EAAS9mC,EAC9Bk2C,EAAOr1D,KAAK2pB,KAAKrX,EAAI2zC,EAAS9mC,GAEvBnf,KAAK2pB,KAAKtX,EAAIrS,KAAK4pB,GAAGvX,IAC7B+iD,EAAOp1D,KAAK2pB,KAAKtX,EAAI4zC,EAAS9mC,EAC9Bk2C,EAAOr1D,KAAK2pB,KAAKrX,EAAI2zC,EAAS9mC,GAGzBnf,KAAK2pB,KAAKrX,EAAItS,KAAK4pB,GAAGtX,IACzBtS,KAAK2pB,KAAKtX,EAAIrS,KAAK4pB,GAAGvX,GACxB+iD,EAAOp1D,KAAK2pB,KAAKtX,EAAI4zC,EAAS9mC,EAC9Bk2C,EAAOr1D,KAAK2pB,KAAKrX,EAAI2zC,EAAS9mC,GAEvBnf,KAAK2pB,KAAKtX,EAAIrS,KAAK4pB,GAAGvX,IAC7B+iD,EAAOp1D,KAAK2pB,KAAKtX,EAAI4zC,EAAS9mC,EAC9Bk2C,EAAOr1D,KAAK2pB,KAAKrX,EAAI2zC,EAAS9mC,IAGtB,YAARtY,IACFwuD,EAAYpP,EAAS9mC,EAAdC,EAAmBpf,KAAK2pB,KAAKrX,EAAI+iD,IAI7B,iBAARxuD,EACH5B,KAAKmmB,IAAIprB,KAAK2pB,KAAKtX,EAAIrS,KAAK4pB,GAAGvX,GAAKpN,KAAKmmB,IAAIprB,KAAK2pB,KAAKrX,EAAItS,KAAK4pB,GAAGtX,IACrE8iD,EAAOp1D,KAAK2pB,KAAKtX,EAEfgjD,EADEr1D,KAAK2pB,KAAKrX,EAAItS,KAAK4pB,GAAGtX,EACjBtS,KAAK4pB,GAAGtX,GAAK,EAAE2zC,GAAU7mC,EAGzBpf,KAAK4pB,GAAGtX,GAAK,EAAE2zC,GAAU7mC,GAG3Bna,KAAKmmB,IAAIprB,KAAK2pB,KAAKtX,EAAIrS,KAAK4pB,GAAGvX,GAAKpN,KAAKmmB,IAAIprB,KAAK2pB,KAAKrX,EAAItS,KAAK4pB,GAAGtX,KAExE8iD,EADEp1D,KAAK2pB,KAAKtX,EAAIrS,KAAK4pB,GAAGvX,EACjBrS,KAAK4pB,GAAGvX,GAAK,EAAE4zC,GAAU9mC,EAGzBnf,KAAK4pB,GAAGvX,GAAK,EAAE4zC,GAAU9mC,EAElCk2C,EAAOr1D,KAAK2pB,KAAKrX,GAGJ,cAARzL,GAELuuD,EADEp1D,KAAK2pB,KAAKtX,EAAIrS,KAAK4pB,GAAGvX,EACjBrS,KAAK4pB,GAAGvX,GAAK,EAAE4zC,GAAU9mC,EAGzBnf,KAAK4pB,GAAGvX,GAAK,EAAE4zC,GAAU9mC,EAElCk2C,EAAOr1D,KAAK2pB,KAAKrX,GAEF,YAARzL,GACPuuD,EAAOp1D,KAAK2pB,KAAKtX,EAEfgjD,EADEr1D,KAAK2pB,KAAKrX,EAAItS,KAAK4pB,GAAGtX,EACjBtS,KAAK4pB,GAAGtX,GAAK,EAAE2zC,GAAU7mC,EAGzBpf,KAAK4pB,GAAGtX,GAAK,EAAE2zC,GAAU7mC,GAI9Bna,KAAKmmB,IAAIprB,KAAK2pB,KAAKtX,EAAIrS,KAAK4pB,GAAGvX,GAAKpN,KAAKmmB,IAAIprB,KAAK2pB,KAAKrX,EAAItS,KAAK4pB,GAAGtX,GACjEtS,KAAK2pB,KAAKrX,EAAItS,KAAK4pB,GAAGtX,EACpBtS,KAAK2pB,KAAKtX,EAAIrS,KAAK4pB,GAAGvX,GAExB+iD,EAAOp1D,KAAK2pB,KAAKtX,EAAI4zC,EAAS7mC,EAC9Bi2C,EAAOr1D,KAAK2pB,KAAKrX,EAAI2zC,EAAS7mC,EAC9Bg2C,EAAOp1D,KAAK4pB,GAAGvX,EAAI+iD,EAAOp1D,KAAK4pB,GAAGvX,EAAI+iD,GAE/Bp1D,KAAK2pB,KAAKtX,EAAIrS,KAAK4pB,GAAGvX,IAE7B+iD,EAAOp1D,KAAK2pB,KAAKtX,EAAI4zC,EAAS7mC,EAC9Bi2C,EAAOr1D,KAAK2pB,KAAKrX,EAAI2zC,EAAS7mC,EAC9Bg2C,EAAOp1D,KAAK4pB,GAAGvX,EAAI+iD,EAAOp1D,KAAK4pB,GAAGvX,EAAG+iD,GAGhCp1D,KAAK2pB,KAAKrX,EAAItS,KAAK4pB,GAAGtX,IACzBtS,KAAK2pB,KAAKtX,EAAIrS,KAAK4pB,GAAGvX,GAExB+iD,EAAOp1D,KAAK2pB,KAAKtX,EAAI4zC,EAAS7mC,EAC9Bi2C,EAAOr1D,KAAK2pB,KAAKrX,EAAI2zC,EAAS7mC,EAC9Bg2C,EAAOp1D,KAAK4pB,GAAGvX,EAAI+iD,EAAOp1D,KAAK4pB,GAAGvX,EAAI+iD,GAE/Bp1D,KAAK2pB,KAAKtX,EAAIrS,KAAK4pB,GAAGvX,IAE7B+iD,EAAOp1D,KAAK2pB,KAAKtX,EAAI4zC,EAAS7mC,EAC9Bi2C,EAAOr1D,KAAK2pB,KAAKrX,EAAI2zC,EAAS7mC,EAC9Bg2C,EAAOp1D,KAAK4pB,GAAGvX,EAAI+iD,EAAOp1D,KAAK4pB,GAAGvX,EAAI+iD,IAInCnwD,KAAKmmB,IAAIprB,KAAK2pB,KAAKtX,EAAIrS,KAAK4pB,GAAGvX,GAAKpN,KAAKmmB,IAAIprB,KAAK2pB,KAAKrX,EAAItS,KAAK4pB,GAAGtX,KACtEtS,KAAK2pB,KAAKrX,EAAItS,KAAK4pB,GAAGtX,EACpBtS,KAAK2pB,KAAKtX,EAAIrS,KAAK4pB,GAAGvX,GAExB+iD,EAAOp1D,KAAK2pB,KAAKtX,EAAI4zC,EAAS9mC,EAC9Bk2C,EAAOr1D,KAAK2pB,KAAKrX,EAAI2zC,EAAS9mC,EAC9Bk2C,EAAOr1D,KAAK4pB,GAAGtX,EAAI+iD,EAAOr1D,KAAK4pB,GAAGtX,EAAI+iD,GAE/Br1D,KAAK2pB,KAAKtX,EAAIrS,KAAK4pB,GAAGvX,IAE7B+iD,EAAOp1D,KAAK2pB,KAAKtX,EAAI4zC,EAAS9mC,EAC9Bk2C,EAAOr1D,KAAK2pB,KAAKrX,EAAI2zC,EAAS9mC,EAC9Bk2C,EAAOr1D,KAAK4pB,GAAGtX,EAAI+iD,EAAOr1D,KAAK4pB,GAAGtX,EAAI+iD,GAGjCr1D,KAAK2pB,KAAKrX,EAAItS,KAAK4pB,GAAGtX,IACzBtS,KAAK2pB,KAAKtX,EAAIrS,KAAK4pB,GAAGvX,GAExB+iD,EAAOp1D,KAAK2pB,KAAKtX,EAAI4zC,EAAS9mC,EAC9Bk2C,EAAOr1D,KAAK2pB,KAAKrX,EAAI2zC,EAAS9mC,EAC9Bk2C,EAAOr1D,KAAK4pB,GAAGtX,EAAI+iD,EAAOr1D,KAAK4pB,GAAGtX,EAAI+iD,GAE/Br1D,KAAK2pB,KAAKtX,EAAIrS,KAAK4pB,GAAGvX,IAE7B+iD,EAAOp1D,KAAK2pB,KAAKtX,EAAI4zC,EAAS9mC,EAC9Bk2C,EAAOr1D,KAAK2pB,KAAKrX,EAAI2zC,EAAS9mC,EAC9Bk2C,EAAOr1D,KAAK4pB,GAAGtX,EAAI+iD,EAAOr1D,KAAK4pB,GAAGtX,EAAI+iD,MAOtChjD,EAAE+iD,EAAM9iD,EAAE+iD,IAQpBjyD,EAAKqQ,UAAUihD,MAAQ,SAAUptC,GAI/B,GAFAA,EAAIa,YACJb,EAAIc,OAAOpoB,KAAK2pB,KAAKtX,EAAGrS,KAAK2pB,KAAKrX,GACO,GAArCtS,KAAK+O,QAAQ0xC,aAAazxC,QAAiB,CAC7C,GAAyC,GAArChP,KAAK+O,QAAQ0xC,aAAaC,QAAkB,CAC9C,GAAIsN,GAAMhuD,KAAKm1D,oBACf,OAAa,OAATnH,EAAI37C,GACNiV,EAAIe,OAAOroB,KAAK4pB,GAAGvX,EAAGrS,KAAK4pB,GAAGtX,GAC9BgV,EAAIlH,SACG,OAKPkH,EAAIguC,iBAAiBtH,EAAI37C,EAAE27C,EAAI17C,EAAEtS,KAAK4pB,GAAGvX,EAAGrS,KAAK4pB,GAAGtX,GACpDgV,EAAIlH,SACG4tC,GAMT,MAFA1mC,GAAIguC,iBAAiBt1D,KAAKguD,IAAI37C,EAAErS,KAAKguD,IAAI17C,EAAEtS,KAAK4pB,GAAGvX,EAAGrS,KAAK4pB,GAAGtX,GAC9DgV,EAAIlH,SACGpgB,KAAKguD,IAMd,MAFA1mC,GAAIe,OAAOroB,KAAK4pB,GAAGvX,EAAGrS,KAAK4pB,GAAGtX,GAC9BgV,EAAIlH,SACG,MAYXhd,EAAKqQ,UAAUuhD,QAAU,SAAU1tC,EAAKjV,EAAGC,EAAG2Z,GAE5C3E,EAAIa,YACJb,EAAI4E,IAAI7Z,EAAGC,EAAG2Z,EAAQ,EAAG,EAAIhnB,KAAKknB,IAAI,GACtC7E,EAAIlH,UAWNhd,EAAKqQ,UAAUqhD,OAAS,SAAUxtC,EAAKwC,EAAMzX,EAAGC,GAC9C,GAAIwX,EAAM,CACRxC,EAAIQ,MAAS9nB,KAAK2pB,KAAKupB,UAAYlzC,KAAK4pB,GAAGspB,SAAY,QAAU,IACjElzC,KAAK+O,QAAQquC,SAAW,MAAQp9C,KAAK+O,QAAQsuC,QAC7C,IAAIyV,EAEJ,IAAuB,GAAnB9yD,KAAK+yD,WAAoB,CAC3B,GAAIvsB,GAAQriC,OAAO2lB,GAAM7hB,MAAM,MAC3BstD,EAAY/uB,EAAM9gC,OAClB03C,EAAYn5C,OAAOjE,KAAK+O,QAAQquC,UAAY,CAChD0V,GAAQxgD,GAAK,EAAIijD,GAAa,EAAInY,CAGlC,KAAK,GADDvqC,GAAQyU,EAAIkuC,YAAYhvB,EAAM,IAAI3zB,MAC7BtN,EAAI,EAAOgwD,EAAJhwD,EAAeA,IAAK,CAClC,GAAIsiB,GAAYP,EAAIkuC,YAAYhvB,EAAMjhC,IAAIsN,KAC1CA,GAAQgV,EAAYhV,EAAQgV,EAAYhV,EAE1C,GAAIC,GAAS9S,KAAK+O,QAAQquC,SAAWmY,EACjC/tD,EAAO6K,EAAIQ,EAAQ,EACnBjL,EAAM0K,EAAIQ,EAAS,CAGvB9S,MAAK6yD,iBAAmBjrD,IAAIA,EAAIJ,KAAKA,EAAKqL,MAAMA,EAAMC,OAAOA,EAAOggD,MAAMA,GAI9CvsD,SAA1BvG,KAAK+O,QAAQuuC,UAAoD,OAA1Bt9C,KAAK+O,QAAQuuC,UAA+C,SAA1Bt9C,KAAK+O,QAAQuuC,WACxFh2B,EAAIiB,UAAYvoB,KAAK+O,QAAQuuC,SAC7Bh2B,EAAImuC,SAASz1D,KAAK6yD,gBAAgBrrD,KAChCxH,KAAK6yD,gBAAgBjrD,IACrB5H,KAAK6yD,gBAAgBhgD,MACrB7S,KAAK6yD,gBAAgB//C,SAIzBwU,EAAIiB,UAAYvoB,KAAK+O,QAAQouC,WAAa,QAC1C71B,EAAIuB,UAAY,SAChBvB,EAAIwB,aAAgB,SACpBgqC,EAAQ9yD,KAAK6yD,gBAAgBC,KAC7B,KAAK,GAAIvtD,GAAI,EAAOgwD,EAAJhwD,EAAeA,IAC7B+hB,EAAIyB,SAASyd,EAAMjhC,GAAI8M,EAAGygD,GAC1BA,GAAS1V,IAcfh6C,EAAKqQ,UAAUogD,cAAgB,SAASvsC,GAEtCA,EAAIY,YAAcloB,KAAKu0D,YACvBjtC,EAAIO,UAAY7nB,KAAKy0D,eAErB,IAAIzG,GAAM,IAEV,IAAoBznD,SAAhB+gB,EAAIouC,SAA6CnvD,SAApB+gB,EAAIquC,YAA2B,CAE9D,GAAIC,IAAW,EAEbA,GAD+BrvD,SAA7BvG,KAAK+O,QAAQ+uC,KAAKp4C,QAAkDa,SAA1BvG,KAAK+O,QAAQ+uC,KAAKC,KACnD/9C,KAAK+O,QAAQ+uC,KAAKp4C,OAAO1F,KAAK+O,QAAQ+uC,KAAKC,MAG3C,EAAE,GAIgB,mBAApBz2B,GAAIquC,aACbruC,EAAIquC,YAAYC,GAChBtuC,EAAIuuC,eAAiB,IAGrBvuC,EAAIouC,QAAUE,EACdtuC,EAAIwuC,cAAgB,GAItB9H,EAAMhuD,KAAK00D,MAAMptC,GAGc,mBAApBA,GAAIquC,aACbruC,EAAIquC,aAAa,IACjBruC,EAAIuuC,eAAiB,IAGrBvuC,EAAIouC,SAAW,GACfpuC,EAAIwuC,cAAgB,OAKtBxuC,GAAIa,YACJb,EAAIyuC,QAAU,QACsBxvD,SAAhCvG,KAAK+O,QAAQ+uC,KAAKE,UAEpB12B,EAAI0uC,WAAWh2D,KAAK2pB,KAAKtX,EAAErS,KAAK2pB,KAAKrX,EAAEtS,KAAK4pB,GAAGvX,EAAErS,KAAK4pB,GAAGtX,GACpDtS,KAAK+O,QAAQ+uC,KAAKp4C,OAAO1F,KAAK+O,QAAQ+uC,KAAKC,IAAI/9C,KAAK+O,QAAQ+uC,KAAKE,UAAUh+C,KAAK+O,QAAQ+uC,KAAKC,MAE9Dx3C,SAA7BvG,KAAK+O,QAAQ+uC,KAAKp4C,QAAkDa,SAA1BvG,KAAK+O,QAAQ+uC,KAAKC,IAEnEz2B,EAAI0uC,WAAWh2D,KAAK2pB,KAAKtX,EAAErS,KAAK2pB,KAAKrX,EAAEtS,KAAK4pB,GAAGvX,EAAErS,KAAK4pB,GAAGtX,GACpDtS,KAAK+O,QAAQ+uC,KAAKp4C,OAAO1F,KAAK+O,QAAQ+uC,KAAKC,OAIhDz2B,EAAIc,OAAOpoB,KAAK2pB,KAAKtX,EAAGrS,KAAK2pB,KAAKrX,GAClCgV,EAAIe,OAAOroB,KAAK4pB,GAAGvX,EAAGrS,KAAK4pB,GAAGtX,IAEhCgV,EAAIlH,QAIN,IAAIpgB,KAAKgpB,MAAO,CACd,GAAIxW,EACJ,IAAyC,GAArCxS,KAAK+O,QAAQ0xC,aAAazxC,SAA0B,MAAPg/C,EAAa,CAC5D,GAAI2G,GAAY,IAAK,IAAK30D,KAAK2pB,KAAKtX,EAAI27C,EAAI37C,GAAK,IAAKrS,KAAK4pB,GAAGvX,EAAI27C,EAAI37C,IAClEuiD,EAAY,IAAK,IAAK50D,KAAK2pB,KAAKrX,EAAI07C,EAAI17C,GAAK,IAAKtS,KAAK4pB,GAAGtX,EAAI07C,EAAI17C,GACtEE,IAASH,EAAEsiD,EAAWriD,EAAEsiD,OAGxBpiD,GAAQxS,KAAK60D,aAAa,GAE5B70D,MAAK80D,OAAOxtC,EAAKtnB,KAAKgpB,MAAOxW,EAAMH,EAAGG,EAAMF,KAUhDlP,EAAKqQ,UAAUohD,aAAe,SAAUoB,GACtC,OACE5jD,GAAI,EAAI4jD,GAAcj2D,KAAK2pB,KAAKtX,EAAI4jD,EAAaj2D,KAAK4pB,GAAGvX,EACzDC,GAAI,EAAI2jD,GAAcj2D,KAAK2pB,KAAKrX,EAAI2jD,EAAaj2D,KAAK4pB,GAAGtX,IAa7DlP,EAAKqQ,UAAUwhD,eAAiB,SAAU5iD,EAAGC,EAAG2Z,EAAQgqC,GACtD,GAAI9I,GAA6B,GAApB8I,EAAa,EAAE,GAAShxD,KAAKknB,EAC1C,QACE9Z,EAAGA,EAAI4Z,EAAShnB,KAAK6Z,IAAIquC,GACzB76C,EAAGA,EAAI2Z,EAAShnB,KAAK0Z,IAAIwuC,KAW7B/pD,EAAKqQ,UAAUmgD,iBAAmB,SAAStsC,GACzC,GAAI9U,EAMJ,IAJA8U,EAAIY,YAAcloB,KAAKu0D,YACvBjtC,EAAIiB,UAAYjB,EAAIY,YACpBZ,EAAIO,UAAY7nB,KAAKy0D,gBAEjBz0D,KAAK2pB,MAAQ3pB,KAAK4pB,GAAI,CAExB,GAAIokC,GAAMhuD,KAAK00D,MAAMptC,GAEjB6lC,EAAQloD,KAAKixD,MAAOl2D,KAAK4pB,GAAGtX,EAAItS,KAAK2pB,KAAKrX,EAAKtS,KAAK4pB,GAAGvX,EAAIrS,KAAK2pB,KAAKtX,GACrE3M,GAAU,GAAK,EAAI1F,KAAK+O,QAAQ8D,OAAS7S,KAAK+O,QAAQ8uC,gBAE1D,IAAyC,GAArC79C,KAAK+O,QAAQ0xC,aAAazxC,SAA0B,MAAPg/C,EAAa,CAC5D,GAAI2G,GAAY,IAAK,IAAK30D,KAAK2pB,KAAKtX,EAAI27C,EAAI37C,GAAK,IAAKrS,KAAK4pB,GAAGvX,EAAI27C,EAAI37C,IAClEuiD,EAAY,IAAK,IAAK50D,KAAK2pB,KAAKrX,EAAI07C,EAAI17C,GAAK,IAAKtS,KAAK4pB,GAAGtX,EAAI07C,EAAI17C,GACtEE,IAASH,EAAEsiD,EAAWriD,EAAEsiD,OAGxBpiD,GAAQxS,KAAK60D,aAAa,GAG5BvtC,GAAI6uC,MAAM3jD,EAAMH,EAAGG,EAAMF,EAAG66C,EAAOznD,GACnC4hB,EAAInH,OACJmH,EAAIlH,SAGApgB,KAAKgpB,OACPhpB,KAAK80D,OAAOxtC,EAAKtnB,KAAKgpB,MAAOxW,EAAMH,EAAGG,EAAMF,OAG3C,CAEH,GAAID,GAAGC,EACH2Z,EAAS,IAAOhnB,KAAKiI,IAAI,IAAIlN,KAAKm+C,QAAQK,cAC1C6G,EAAOrlD,KAAK2pB,IACX07B,GAAKxyC,OACRwyC,EAAK0P,OAAOztC,GAEV+9B,EAAKxyC,MAAQwyC,EAAKvyC,QACpBT,EAAIgzC,EAAKhzC,EAAiB,GAAbgzC,EAAKxyC,MAClBP,EAAI+yC,EAAK/yC,EAAI2Z,IAGb5Z,EAAIgzC,EAAKhzC,EAAI4Z,EACb3Z,EAAI+yC,EAAK/yC,EAAkB,GAAd+yC,EAAKvyC,QAEpB9S,KAAKg1D,QAAQ1tC,EAAKjV,EAAGC,EAAG2Z,EAGxB,IAAIkhC,GAAQ,GAAMloD,KAAKknB,GACnBzmB,GAAU,GAAK,EAAI1F,KAAK+O,QAAQ8D,OAAS7S,KAAK+O,QAAQ8uC,gBAC1DrrC,GAAQxS,KAAKi1D,eAAe5iD,EAAGC,EAAG2Z,EAAQ,IAC1C3E,EAAI6uC,MAAM3jD,EAAMH,EAAGG,EAAMF,EAAG66C,EAAOznD,GACnC4hB,EAAInH,OACJmH,EAAIlH,SAGApgB,KAAKgpB,QACPxW,EAAQxS,KAAKi1D,eAAe5iD,EAAGC,EAAG2Z,EAAQ,IAC1CjsB,KAAK80D,OAAOxtC,EAAKtnB,KAAKgpB,MAAOxW,EAAMH,EAAGG,EAAMF,MAclDlP,EAAKqQ,UAAUkgD,WAAa,SAASrsC,GAEnCA,EAAIY,YAAcloB,KAAKu0D,YACvBjtC,EAAIiB,UAAYjB,EAAIY,YACpBZ,EAAIO,UAAY7nB,KAAKy0D,eAErB,IAAItH,GAAOznD,CAEX,IAAI1F,KAAK2pB,MAAQ3pB,KAAK4pB,GAAI,CACxBujC,EAAQloD,KAAKixD,MAAOl2D,KAAK4pB,GAAGtX,EAAItS,KAAK2pB,KAAKrX,EAAKtS,KAAK4pB,GAAGvX,EAAIrS,KAAK2pB,KAAKtX,EACrE,IASI27C,GATA7uC,EAAMnf,KAAK4pB,GAAGvX,EAAIrS,KAAK2pB,KAAKtX,EAC5B+M,EAAMpf,KAAK4pB,GAAGtX,EAAItS,KAAK2pB,KAAKrX,EAC5B8jD,EAAoBnxD,KAAKirB,KAAK/Q,EAAKA,EAAKC,EAAKA,GAE7Ci3C,EAAiBr2D,KAAK2pB,KAAK2sC,iBAAiBhvC,EAAK6lC,EAAQloD,KAAKknB,IAC9DoqC,GAAmBH,EAAoBC,GAAkBD,EACzDpC,EAAQ,EAAoBh0D,KAAK2pB,KAAKtX,GAAK,EAAIkkD,GAAmBv2D,KAAK4pB,GAAGvX,EAC1E4hD,EAAQ,EAAoBj0D,KAAK2pB,KAAKrX,GAAK,EAAIikD,GAAmBv2D,KAAK4pB,GAAGtX,CAGrC,IAArCtS,KAAK+O,QAAQ0xC,aAAaC,SAAwD,GAArC1gD,KAAK+O,QAAQ0xC,aAAazxC,QACzEg/C,EAAMhuD,KAAKguD,IAEiC,GAArChuD,KAAK+O,QAAQ0xC,aAAazxC,UACjCg/C,EAAMhuD,KAAKm1D,sBAG4B,GAArCn1D,KAAK+O,QAAQ0xC,aAAazxC,SAA4B,MAATg/C,EAAI37C,IACnD86C,EAAQloD,KAAKixD,MAAOl2D,KAAK4pB,GAAGtX,EAAI07C,EAAI17C,EAAKtS,KAAK4pB,GAAGvX,EAAI27C,EAAI37C,GACzD8M,EAAMnf,KAAK4pB,GAAGvX,EAAI27C,EAAI37C,EACtB+M,EAAMpf,KAAK4pB,GAAGtX,EAAI07C,EAAI17C,EACtB8jD,EAAoBnxD,KAAKirB,KAAK/Q,EAAKA,EAAKC,EAAKA,GAE/C,IAGI80C,GAAIC,EAHJqC,EAAex2D,KAAK4pB,GAAG0sC,iBAAiBhvC,EAAK6lC,GAC7CsJ,GAAiBL,EAAoBI,GAAgBJ,CA6BzD,IA1ByC,GAArCp2D,KAAK+O,QAAQ0xC,aAAazxC,SAA4B,MAATg/C,EAAI37C,GACpD6hD,GAAO,EAAIuC,GAAiBzI,EAAI37C,EAAIokD,EAAgBz2D,KAAK4pB,GAAGvX,EAC5D8hD,GAAO,EAAIsC,GAAiBzI,EAAI17C,EAAImkD,EAAgBz2D,KAAK4pB,GAAGtX,IAG3D4hD,GAAO,EAAIuC,GAAiBz2D,KAAK2pB,KAAKtX,EAAIokD,EAAgBz2D,KAAK4pB,GAAGvX,EAClE8hD,GAAO,EAAIsC,GAAiBz2D,KAAK2pB,KAAKrX,EAAImkD,EAAgBz2D,KAAK4pB,GAAGtX,GAGpEgV,EAAIa,YACJb,EAAIc,OAAO4rC,EAAMC,GACwB,GAArCj0D,KAAK+O,QAAQ0xC,aAAazxC,SAA4B,MAATg/C,EAAI37C,EACnDiV,EAAIguC,iBAAiBtH,EAAI37C,EAAE27C,EAAI17C,EAAE4hD,EAAKC,GAGtC7sC,EAAIe,OAAO6rC,EAAKC,GAElB7sC,EAAIlH,SAGJ1a,GAAU,GAAK,EAAI1F,KAAK+O,QAAQ8D,OAAS7S,KAAK+O,QAAQ8uC,iBACtDv2B,EAAI6uC,MAAMjC,EAAKC,EAAKhH,EAAOznD,GAC3B4hB,EAAInH,OACJmH,EAAIlH,SAGApgB,KAAKgpB,MAAO,CACd,GAAIxW,EACJ,IAAyC,GAArCxS,KAAK+O,QAAQ0xC,aAAazxC,SAA0B,MAAPg/C,EAAa,CAC5D,GAAI2G,GAAY,IAAK,IAAK30D,KAAK2pB,KAAKtX,EAAI27C,EAAI37C,GAAK,IAAKrS,KAAK4pB,GAAGvX,EAAI27C,EAAI37C,IAClEuiD,EAAY,IAAK,IAAK50D,KAAK2pB,KAAKrX,EAAI07C,EAAI17C,GAAK,IAAKtS,KAAK4pB,GAAGtX,EAAI07C,EAAI17C,GACtEE,IAASH,EAAEsiD,EAAWriD,EAAEsiD,OAGxBpiD,GAAQxS,KAAK60D,aAAa,GAE5B70D,MAAK80D,OAAOxtC,EAAKtnB,KAAKgpB,MAAOxW,EAAMH,EAAGG,EAAMF,QAG3C,CAEH,GACID,GAAGC,EAAG6jD,EADN9Q,EAAOrlD,KAAK2pB,KAEZsC,EAAS,IAAOhnB,KAAKiI,IAAI,IAAIlN,KAAKm+C,QAAQK,aACzC6G,GAAKxyC,OACRwyC,EAAK0P,OAAOztC,GAEV+9B,EAAKxyC,MAAQwyC,EAAKvyC,QACpBT,EAAIgzC,EAAKhzC,EAAiB,GAAbgzC,EAAKxyC,MAClBP,EAAI+yC,EAAK/yC,EAAI2Z,EACbkqC,GACE9jD,EAAGA,EACHC,EAAG+yC,EAAK/yC,EACR66C,MAAO,GAAMloD,KAAKknB,MAIpB9Z,EAAIgzC,EAAKhzC,EAAI4Z,EACb3Z,EAAI+yC,EAAK/yC,EAAkB,GAAd+yC,EAAKvyC,OAClBqjD,GACE9jD,EAAGgzC,EAAKhzC,EACRC,EAAGA,EACH66C,MAAO,GAAMloD,KAAKknB,KAGtB7E,EAAIa,YAEJb,EAAI4E,IAAI7Z,EAAGC,EAAG2Z,EAAQ,EAAG,EAAIhnB,KAAKknB,IAAI,GACtC7E,EAAIlH,QAGJ,IAAI1a,IAAU,GAAK,EAAI1F,KAAK+O,QAAQ8D,OAAS7S,KAAK+O,QAAQ8uC,gBAC1Dv2B,GAAI6uC,MAAMA,EAAM9jD,EAAG8jD,EAAM7jD,EAAG6jD,EAAMhJ,MAAOznD,GACzC4hB,EAAInH,OACJmH,EAAIlH,SAGApgB,KAAKgpB,QACPxW,EAAQxS,KAAKi1D,eAAe5iD,EAAGC,EAAG2Z,EAAQ,IAC1CjsB,KAAK80D,OAAOxtC,EAAKtnB,KAAKgpB,MAAOxW,EAAMH,EAAGG,EAAMF,MAmBlDlP,EAAKqQ,UAAU6gD,mBAAqB,SAAUoC,EAAGC,EAAIC,EAAGC,EAAIC,EAAGC,GAC7D,GAAIttD,GAAc,CAClB,IAAIzJ,KAAK2pB,MAAQ3pB,KAAK4pB,GACpB,GAAyC,GAArC5pB,KAAK+O,QAAQ0xC,aAAazxC,QAAiB,CAC7C,GAAIomD,GAAMC,CACV,IAAyC,GAArCr1D,KAAK+O,QAAQ0xC,aAAazxC,SAAwD,GAArChP,KAAK+O,QAAQ0xC,aAAaC,QACzE0U,EAAOp1D,KAAKguD,IAAI37C,EAChBgjD,EAAOr1D,KAAKguD,IAAI17C,MAEb,CACH,GAAI07C,GAAMhuD,KAAKm1D,oBACfC,GAAOpH,EAAI37C,EACXgjD,EAAOrH,EAAI17C,EAEb,GACI4T,GACA3gB,EAAE6I,EAAEiE,EAAEC,EAAG0kD,EAAOC,EAFhBC,EAAc,GAGlB,KAAK3xD,EAAI,EAAO,GAAJA,EAAQA,IAClB6I,EAAI,GAAI7I,EACR8M,EAAIpN,KAAKovB,IAAI,EAAEjmB,EAAE,GAAGsoD,EAAM,EAAEtoD,GAAG,EAAIA,GAAIgnD,EAAOnwD,KAAKovB,IAAIjmB,EAAE,GAAGwoD,EAC5DtkD,EAAIrN,KAAKovB,IAAI,EAAEjmB,EAAE,GAAGuoD,EAAM,EAAEvoD,GAAG,EAAIA,GAAIinD,EAAOpwD,KAAKovB,IAAIjmB,EAAE,GAAGyoD,EACxDtxD,EAAI,IACN2gB,EAAWlmB,KAAKm3D,mBAAmBH,EAAMC,EAAM5kD,EAAEC,EAAGwkD,EAAGC,GACvDG,EAAyBA,EAAXhxC,EAAyBA,EAAWgxC,GAEpDF,EAAQ3kD,EAAG4kD,EAAQ3kD,CAErB7I,GAAcytD,MAGdztD,GAAczJ,KAAKm3D,mBAAmBT,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,OAGpD,CACH,GAAI1kD,GAAGC,EAAG6M,EAAIC,EACV6M,EAAS,IAAOjsB,KAAKm+C,QAAQK,aAC7B6G,EAAOrlD,KAAK2pB,IACZ07B,GAAKxyC,MAAQwyC,EAAKvyC,QACpBT,EAAIgzC,EAAKhzC,EAAI,GAAMgzC,EAAKxyC,MACxBP,EAAI+yC,EAAK/yC,EAAI2Z,IAGb5Z,EAAIgzC,EAAKhzC,EAAI4Z,EACb3Z,EAAI+yC,EAAK/yC,EAAI,GAAM+yC,EAAKvyC,QAE1BqM,EAAK9M,EAAIykD,EACT13C,EAAK9M,EAAIykD,EACTttD,EAAcxE,KAAKmmB,IAAInmB,KAAKirB,KAAK/Q,EAAGA,EAAKC,EAAGA,GAAM6M,GAGpD,MAAIjsB,MAAK6yD,gBAAgBrrD,KAAOsvD,GAC9B92D,KAAK6yD,gBAAgBrrD,KAAOxH,KAAK6yD,gBAAgBhgD,MAAQikD,GACzD92D,KAAK6yD,gBAAgBjrD,IAAMmvD,GAC3B/2D,KAAK6yD,gBAAgBjrD,IAAM5H,KAAK6yD,gBAAgB//C,OAASikD,EAClD,EAGAttD,GAIXrG,EAAKqQ,UAAU0jD,mBAAqB,SAAST,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,GAC1D,GAAIK,GAAKR,EAAGF,EACVW,EAAKR,EAAGF,EACRW,EAAYF,EAAGA,EAAKC,EAAGA,EACvBE,IAAOT,EAAKJ,GAAMU,GAAML,EAAKJ,GAAMU,GAAMC,CAEvCC,GAAI,EACNA,EAAI,EAEO,EAAJA,IACPA,EAAI,EAGN,IAAIllD,GAAIqkD,EAAKa,EAAIH,EACf9kD,EAAIqkD,EAAKY,EAAIF,EACbl4C,EAAK9M,EAAIykD,EACT13C,EAAK9M,EAAIykD,CAQX,OAAO9xD,MAAKirB,KAAK/Q,EAAGA,EAAKC,EAAGA,IAQ9Bhc,EAAKqQ,UAAU+vB,SAAW,SAAShmB,GACjCxd,KAAKk1D,gBAAkB,EAAI13C,GAI7Bpa,EAAKqQ,UAAU09B,OAAS,WACtBnxC,KAAKkzC,UAAW,GAGlB9vC,EAAKqQ,UAAUy9B,SAAW,WACxBlxC,KAAKkzC,UAAW,GAGlB9vC,EAAKqQ,UAAU09C,mBAAqB,WACjB,OAAbnxD,KAAKguD,KAA8B,OAAdhuD,KAAK2pB,MAA6B,OAAZ3pB,KAAK4pB,KAClD5pB,KAAKguD,IAAI37C,EAAI,IAAOrS,KAAK2pB,KAAKtX,EAAIrS,KAAK4pB,GAAGvX,GAC1CrS,KAAKguD,IAAI17C,EAAI,IAAOtS,KAAK2pB,KAAKrX,EAAItS,KAAK4pB,GAAGtX,KAS9ClP,EAAKqQ,UAAUw7C,kBAAoB,SAAS3nC,GAC1C,GAAgC,GAA5BtnB,KAAKszD,oBAA6B,CACpC,GAA+B,OAA3BtzD,KAAKuzD,aAAa5pC,MAA0C,OAAzB3pB,KAAKuzD,aAAa3pC,GAAa,CACpE,GAAI4tC,GAAa,cAAcljD,OAAOtU,KAAKK,IACvCo3D,EAAW,YAAYnjD,OAAOtU,KAAKK,IACnC+gD,GACYvE,OAAOtqC,MAAM,GAAI0Z,OAAO,GACxBkyB,SAASO,QAAQ,GACjBI,YAAac,sBAAuB,EAAGD,aAAc9sC,MAAM,EAAGC,OAAQ,EAAGmZ,OAAO,IAEhGjsB,MAAKuzD,aAAa5pC,KAAO,GAAIpmB,IAC1BlD,GAAGm3D,EACFva,MAAM,MACJpyC,OAAOiB,WAAW,UAAWC,OAAO,UAAWC,WAAYF,WAAW,mBAClEs1C,GACVphD,KAAKuzD,aAAa3pC,GAAK,GAAIrmB,IACxBlD,GAAGo3D,EACFxa,MAAM,MACNpyC,OAAOiB,WAAW,UAAWC,OAAO,UAAWC,WAAYF,WAAW,mBAChEs1C,GAG2B,GAAnCphD,KAAKuzD,aAAa5pC,KAAKupB,UAAsD,GAAjClzC,KAAKuzD,aAAa3pC,GAAGspB,WACnElzC,KAAKuzD,aAAaC,UAAYxzD,KAAK03D,wBAAwBpwC,GAC3DtnB,KAAKuzD,aAAa5pC,KAAKtX,EAAIrS,KAAKuzD,aAAaC,UAAU7pC,KAAKtX,EAC5DrS,KAAKuzD,aAAa5pC,KAAKrX,EAAItS,KAAKuzD,aAAaC,UAAU7pC,KAAKrX,EAC5DtS,KAAKuzD,aAAa3pC,GAAGvX,EAAIrS,KAAKuzD,aAAaC,UAAU5pC,GAAGvX,EACxDrS,KAAKuzD,aAAa3pC,GAAGtX,EAAItS,KAAKuzD,aAAaC,UAAU5pC,GAAGtX,GAG1DtS,KAAKuzD,aAAa5pC,KAAKqiB,KAAK1kB,GAC5BtnB,KAAKuzD,aAAa3pC,GAAGoiB,KAAK1kB,OAG1BtnB,MAAKuzD,cAAgB5pC,KAAK,KAAMC,GAAG,KAAM4pC,eAQ7CpwD,EAAKqQ,UAAUkkD,oBAAsB,WACnC33D,KAAKgzD,WAAahzD,KAAK2pB,KACvB3pB,KAAKizD,SAAWjzD,KAAK4pB,GACrB5pB,KAAKszD,qBAAsB,GAO7BlwD,EAAKqQ,UAAUmkD,qBAAuB,WACpC53D,KAAK0yD,OAAS1yD,KAAK2pB,KAAKtpB,GACxBL,KAAK2yD,KAAO3yD,KAAK4pB,GAAGvpB,GAChBL,KAAK0yD,QAAU1yD,KAAKgzD,WAAW3yD,GACjCL,KAAKgzD,WAAWe,WAAW/zD,MAEpBA,KAAK2yD,MAAQ3yD,KAAKizD,SAAS5yD,IAClCL,KAAKizD,SAASc,WAAW/zD,MAG3BA,KAAKgzD,WAAa,KAClBhzD,KAAKizD,SAAW,KAChBjzD,KAAKszD,qBAAsB,GAW7BlwD,EAAKqQ,UAAUokD,wBAA0B,SAASxlD,EAAEC,GAClD,GAAIkhD,GAAYxzD,KAAKuzD,aAAaC,UAC9BsE,EAAe7yD,KAAKirB,KAAKjrB,KAAKovB,IAAIhiB,EAAImhD,EAAU7pC,KAAKtX,EAAE,GAAKpN,KAAKovB,IAAI/hB,EAAIkhD,EAAU7pC,KAAKrX,EAAE,IAC1FylD,EAAe9yD,KAAKirB,KAAKjrB,KAAKovB,IAAIhiB,EAAImhD,EAAU5pC,GAAGvX,EAAI,GAAKpN,KAAKovB,IAAI/hB,EAAIkhD,EAAU5pC,GAAGtX,EAAI,GAE9F,OAAmB,IAAfwlD,GACF93D,KAAKyzD,cAAgBzzD,KAAK2pB,KAC1B3pB,KAAK2pB,KAAO3pB,KAAKuzD,aAAa5pC,KACvB3pB,KAAKuzD,aAAa5pC,MAEL,GAAbouC,GACP/3D,KAAKyzD,cAAgBzzD,KAAK4pB,GAC1B5pB,KAAK4pB,GAAK5pB,KAAKuzD,aAAa3pC,GACrB5pB,KAAKuzD,aAAa3pC,IAGlB,MASXxmB,EAAKqQ,UAAUukD,qBAAuB,WACG,GAAnCh4D,KAAKuzD,aAAa5pC,KAAKupB,UACzBlzC,KAAK2pB,KAAO3pB,KAAKyzD,cACjBzzD,KAAKyzD,cAAgB,KACrBzzD,KAAKuzD,aAAa5pC,KAAKunB,YAEiB,GAAjClxC,KAAKuzD,aAAa3pC,GAAGspB,WAC5BlzC,KAAK4pB,GAAK5pB,KAAKyzD,cACfzzD,KAAKyzD,cAAgB,KACrBzzD,KAAKuzD,aAAa3pC,GAAGsnB,aAUzB9tC,EAAKqQ,UAAUikD,wBAA0B,SAASpwC,GAChD,GASI0mC,GATAb,EAAQloD,KAAKixD,MAAOl2D,KAAK4pB,GAAGtX,EAAItS,KAAK2pB,KAAKrX,EAAKtS,KAAK4pB,GAAGvX,EAAIrS,KAAK2pB,KAAKtX,GACrE8M,EAAMnf,KAAK4pB,GAAGvX,EAAIrS,KAAK2pB,KAAKtX,EAC5B+M,EAAMpf,KAAK4pB,GAAGtX,EAAItS,KAAK2pB,KAAKrX,EAC5B8jD,EAAoBnxD,KAAKirB,KAAK/Q,EAAKA,EAAKC,EAAKA,GAC7Ci3C,EAAiBr2D,KAAK2pB,KAAK2sC,iBAAiBhvC,EAAK6lC,EAAQloD,KAAKknB,IAC9DoqC,GAAmBH,EAAoBC,GAAkBD,EACzDpC,EAAQ,EAAoBh0D,KAAK2pB,KAAKtX,GAAK,EAAIkkD,GAAmBv2D,KAAK4pB,GAAGvX,EAC1E4hD,EAAQ,EAAoBj0D,KAAK2pB,KAAKrX,GAAK,EAAIikD,GAAmBv2D,KAAK4pB,GAAGtX,CAGrC,IAArCtS,KAAK+O,QAAQ0xC,aAAaC,SAAwD,GAArC1gD,KAAK+O,QAAQ0xC,aAAazxC,QACzEg/C,EAAMhuD,KAAKguD,IAEiC,GAArChuD,KAAK+O,QAAQ0xC,aAAazxC,UACjCg/C,EAAMhuD,KAAKm1D,sBAG4B,GAArCn1D,KAAK+O,QAAQ0xC,aAAazxC,SAA4B,MAATg/C,EAAI37C,IACnD86C,EAAQloD,KAAKixD,MAAOl2D,KAAK4pB,GAAGtX,EAAI07C,EAAI17C,EAAKtS,KAAK4pB,GAAGvX,EAAI27C,EAAI37C,GACzD8M,EAAMnf,KAAK4pB,GAAGvX,EAAI27C,EAAI37C,EACtB+M,EAAMpf,KAAK4pB,GAAGtX,EAAI07C,EAAI17C,EACtB8jD,EAAoBnxD,KAAKirB,KAAK/Q,EAAKA,EAAKC,EAAKA,GAE/C,IAGI80C,GAAIC,EAHJqC,EAAex2D,KAAK4pB,GAAG0sC,iBAAiBhvC,EAAK6lC,GAC7CsJ,GAAiBL,EAAoBI,GAAgBJ,CAYzD,OATyC,IAArCp2D,KAAK+O,QAAQ0xC,aAAazxC,SAA4B,MAATg/C,EAAI37C,GACnD6hD,GAAO,EAAIuC,GAAiBzI,EAAI37C,EAAIokD,EAAgBz2D,KAAK4pB,GAAGvX,EAC5D8hD,GAAO,EAAIsC,GAAiBzI,EAAI17C,EAAImkD,EAAgBz2D,KAAK4pB,GAAGtX,IAG5D4hD,GAAO,EAAIuC,GAAiBz2D,KAAK2pB,KAAKtX,EAAIokD,EAAgBz2D,KAAK4pB,GAAGvX,EAClE8hD,GAAO,EAAIsC,GAAiBz2D,KAAK2pB,KAAKrX,EAAImkD,EAAgBz2D,KAAK4pB,GAAGtX,IAG5DqX,MAAMtX,EAAE2hD,EAAM1hD,EAAE2hD,GAAOrqC,IAAIvX,EAAE6hD,EAAI5hD,EAAE6hD,KAG7Ct0D,EAAOD,QAAUwD,GAIb,SAASvD,EAAQD,EAASM,GAQ9B,QAASmD,KACPrD,KAAKgX,QACLhX,KAAKi4D,aAAe,EARtB,GAAIt3D,GAAOT,EAAoB,EAe/BmD,GAAO60D,UACJnsD,OAAQ,UAAWD,WAAY,UAAWE,WAAYD,OAAQ,UAAWD,WAAY,WAAYG,OAAQF,OAAQ,UAAWD,WAAY,aACxIC,OAAQ,UAAWD,WAAY,UAAWE,WAAYD,OAAQ,UAAWD,WAAY,WAAYG,OAAQF,OAAQ,UAAWD,WAAY,aACxIC,OAAQ,UAAWD,WAAY,UAAWE,WAAYD,OAAQ,UAAWD,WAAY,WAAYG,OAAQF,OAAQ,UAAWD,WAAY,aACxIC,OAAQ,UAAWD,WAAY,UAAWE,WAAYD,OAAQ,UAAWD,WAAY,WAAYG,OAAQF,OAAQ,UAAWD,WAAY,aACxIC,OAAQ,UAAWD,WAAY,UAAWE,WAAYD,OAAQ,UAAWD,WAAY,WAAYG,OAAQF,OAAQ,UAAWD,WAAY,aACxIC,OAAQ,UAAWD,WAAY,UAAWE,WAAYD,OAAQ,UAAWD,WAAY,WAAYG,OAAQF,OAAQ,UAAWD,WAAY,aACxIC,OAAQ,UAAWD,WAAY,UAAWE,WAAYD,OAAQ,UAAWD,WAAY,WAAYG,OAAQF,OAAQ,UAAWD,WAAY,aACxIC,OAAQ,UAAWD,WAAY,UAAWE,WAAYD,OAAQ,UAAWD,WAAY,WAAYG,OAAQF,OAAQ,UAAWD,WAAY,aACxIC,OAAQ,UAAWD,WAAY,UAAWE,WAAYD,OAAQ,UAAWD,WAAY,WAAYG,OAAQF,OAAQ,UAAWD,WAAY,aACxIC,OAAQ,UAAWD,WAAY,UAAWE,WAAYD,OAAQ,UAAWD,WAAY,WAAYG,OAAQF,OAAQ,UAAWD,WAAY,aAO3IzI,EAAOoQ,UAAUuD,MAAQ,WACvBhX,KAAK00B,UACL10B,KAAK00B,OAAOhvB,OAAS,WAEnB,GAAIH,GAAI,CACR,KAAM,GAAI7E,KAAKV,MACTA,KAAK6F,eAAenF,IACtB6E,GAGJ,OAAOA,KAWXlC,EAAOoQ,UAAU+B,IAAM,SAAUiyC,GAC/B,GAAIl1C,GAAQvS,KAAK00B,OAAO+yB,EACxB,IAAalhD,QAATgM,EAAoB,CAEtB,GAAIlK,GAAQrI,KAAKi4D,aAAe50D,EAAO60D,QAAQxyD,MAC/C1F,MAAKi4D,eACL1lD,KACAA,EAAM1H,MAAQxH,EAAO60D,QAAQ7vD,GAC7BrI,KAAK00B,OAAO+yB,GAAal1C,EAG3B,MAAOA,IAUTlP,EAAOoQ,UAAUF,IAAM,SAAUk0C,EAAWj6C,GAK1C,MAJAxN,MAAK00B,OAAO+yB,GAAaj6C,EACrBA,EAAM3C,QACR2C,EAAM3C,MAAQlK,EAAKiK,WAAW4C,EAAM3C,QAE/B2C,GAGT3N,EAAOD,QAAUyD,GAKb,SAASxD,GAMb,QAASyD,KACPtD,KAAKqiD,UAELriD,KAAKwI,SAAWjC,OAQlBjD,EAAOmQ,UAAU6uC,kBAAoB,SAAS95C,GAC5CxI,KAAKwI,SAAWA,GASlBlF,EAAOmQ,UAAU0kD,KAAO,SAASC,EAAKC,GACpC,GAAIC,GAAMt4D,KAAKqiD,OAAO+V,EACtB,IAAW7xD,QAAP+xD,EAAkB,CAEpB,GAAIjW,GAASriD,IACbs4D,GAAM,GAAIC,OACVv4D,KAAKqiD,OAAO+V,GAAOE,EACnBA,EAAIE,OAAS,WACPnW,EAAO75C,UACT65C,EAAO75C,SAASxI,OAIpBs4D,EAAIG,QAAU,WACfz4D,KAAKmlD,IAAMkT,EACPhW,EAAO75C,UACZ65C,EAAO75C,SAASxI,OAIds4D,EAAInT,IAAMiT,EAGZ,MAAOE,IAGTz4D,EAAOD,QAAU0D,GAKb,SAASzD,EAAQD,EAASM,GA6B9B,QAASqD,GAAKmqD,EAAYgL,EAAWC,EAAWlG,GAC9C,GAAIrR,GAAYzgD,EAAK4N,uBAAuB,SAASkkD,EACrDzyD,MAAK+O,QAAUqyC,EAAUvE,MAEzB78C,KAAKkzC,UAAW,EAChBlzC,KAAKiM,OAAQ,EAEbjM,KAAK09C,SACL19C,KAAKkuD,gBACLluD,KAAK44D,iBAEL54D,KAAK64D,kBAAoB,EAGzB74D,KAAKK,GAAKkG,OACVvG,KAAKqS,EAAI,KACTrS,KAAKsS,EAAI,KACTtS,KAAKwxD,gBAAiB,EACtBxxD,KAAKyxD,gBAAiB,EACtBzxD,KAAKsqD,QAAS,EACdtqD,KAAKuqD,QAAS,EACdvqD,KAAK84D,qBAAsB,EAC3B94D,KAAK+4D,kBAAsB,EAC3B/4D,KAAKg5D,gBAAkBvG,EAAiB5V,MAAM5wB,OAC9CjsB,KAAKi5D,aAAc,EACnBj5D,KAAKu9C,MAAQ,GACbv9C,KAAKk5D,kBAAmB,EACxBl5D,KAAKm5D,qBAAsB,EAC3Bn5D,KAAK6yD,iBAAmBjrD,IAAI,EAAEJ,KAAK,EAAEqL,MAAM,EAAEC,OAAO,EAAEggD,MAAM,GAG5D9yD,KAAK04D,UAAYA,EACjB14D,KAAK24D,UAAYA,EAGjB34D,KAAKo5D,GAAK,EACVp5D,KAAKq5D,GAAK,EACVr5D,KAAKs5D,GAAK,EACVt5D,KAAKu5D,GAAK,EACVv5D,KAAK0+C,QAAU+T,EAAiBtU,QAAQO,QACxC1+C,KAAKqvD,WAAah9C,EAAE,KAAKC,EAAE,MAE3BtS,KAAKytD,cAAcC,EAAYtM,GAG/BphD,KAAKw5D,eACLx5D,KAAKy5D,mBAAqB,EAC1Bz5D,KAAK05D,eAAiB,EACtB15D,KAAK25D,uBAA0BlH,EAAiB3T,WAAWa,YAAY9sC,MACvE7S,KAAK45D,wBAA0BnH,EAAiB3T,WAAWa,YAAY7sC,OACvE9S,KAAK65D,wBAA0BpH,EAAiB3T,WAAWa,YAAY1zB,OACvEjsB,KAAK4/C,sBAAwB6S,EAAiB3T,WAAWc,sBACzD5/C,KAAK85D,gBAAkB,EAGvB95D,KAAKk1D,gBAAkB,EACvBl1D,KAAK+5D,aAAe,EACpB/5D,KAAKyjD,eAAiBpxC,EAAK,KAAMC,EAAK,MACtCtS,KAAK0jD,mBAAqBrxC,EAAM,IAAKC,EAAM,KAC3CtS,KAAKixD,aAAe,KAtFtB,GAAItwD,GAAOT,EAAoB,EA4F/BqD,GAAKkQ,UAAU+lD,aAAe,WAE5Bx5D,KAAKg6D,eAAiBzzD,OACtBvG,KAAKi6D,YAAc,EACnBj6D,KAAKk6D,kBACLl6D,KAAKm6D,kBACLn6D,KAAKo6D,oBAOP72D,EAAKkQ,UAAUqgD,WAAa,SAASrH,GACH,IAA5BzsD,KAAK09C,MAAMh3C,QAAQ+lD,IACrBzsD,KAAK09C,MAAMx1C,KAAKukD,GAEqB,IAAnCzsD,KAAKkuD,aAAaxnD,QAAQ+lD,IAC5BzsD,KAAKkuD,aAAahmD,KAAKukD,GAEzBzsD,KAAKy5D,mBAAqBz5D,KAAKkuD,aAAaxoD,QAO9CnC,EAAKkQ,UAAUsgD,WAAa,SAAStH,GACnC,GAAIpkD,GAAQrI,KAAK09C,MAAMh3C,QAAQ+lD,EAClB,KAATpkD,GACFrI,KAAK09C,MAAMp1C,OAAOD,EAAO,GAE3BA,EAAQrI,KAAKkuD,aAAaxnD,QAAQ+lD,GACrB,IAATpkD,GACFrI,KAAKkuD,aAAa5lD,OAAOD,EAAO,GAElCrI,KAAKy5D,mBAAqBz5D,KAAKkuD,aAAaxoD,QAS9CnC,EAAKkQ,UAAUg6C,cAAgB,SAASC,EAAYtM,GAClD,GAAKsM,EAAL,CAIA,GAAIl/C,IAAU,cAAc,sBAAsB,QAAQ,QAAQ,cAAc,SAAS,YACvF,WAAW,WAAW,WAAW,QAAQ,OAkB3C,IAhBA7N,EAAKuF,oBAAoBsI,EAAQxO,KAAK+O,QAAS2+C,GAGzBnnD,SAAlBmnD,EAAWrtD,KAA0BL,KAAKK,GAAKqtD,EAAWrtD,IACrCkG,SAArBmnD,EAAW1kC,QAA0BhpB,KAAKgpB,MAAQ0kC,EAAW1kC,MAAOhpB,KAAKq6D,cAAgB3M,EAAW1kC,OAC/EziB,SAArBmnD,EAAW1oB,QAA0BhlC,KAAKglC,MAAQ0oB,EAAW1oB,OAC5Cz+B,SAAjBmnD,EAAWr7C,IAA0BrS,KAAKqS,EAAIq7C,EAAWr7C,GACxC9L,SAAjBmnD,EAAWp7C,IAA0BtS,KAAKsS,EAAIo7C,EAAWp7C,GACpC/L,SAArBmnD,EAAWtmD,QAA0BpH,KAAKoH,MAAQsmD,EAAWtmD,OACxCb,SAArBmnD,EAAWnQ,QAA0Bv9C,KAAKu9C,MAAQmQ,EAAWnQ,MAAOv9C,KAAKk5D,kBAAmB,GAGzD3yD,SAAnCmnD,EAAWoL,sBAAoC94D,KAAK84D,oBAAsBpL,EAAWoL,qBAClDvyD,SAAnCmnD,EAAWqL,mBAAoC/4D,KAAK+4D,iBAAsBrL,EAAWqL,kBAClDxyD,SAAnCmnD,EAAW4M,kBAAoCt6D,KAAKs6D,gBAAsB5M,EAAW4M,iBAEzE/zD,SAAZvG,KAAKK,GACP,KAAM,sBAIR,IAAkC,gBAAvBL,MAAK+O,QAAQwD,OAAqD,gBAAvBvS,MAAK+O,QAAQwD,OAA4C,IAAtBvS,KAAK+O,QAAQwD,MAAc,CAClH,GAAIgoD,GAAWv6D,KAAK24D,UAAUnjD,IAAIxV,KAAK+O,QAAQwD,MAC/C,KAAK,GAAI3M,KAAQ20D,GACXA,EAAS10D,eAAeD,KAC1B5F,KAAK+O,QAAQnJ,GAAQ20D,EAAS30D,IAUpC,GAH0BW,SAAtBmnD,EAAWzhC,SAA+BjsB,KAAKg5D,gBAAkBh5D,KAAK+O,QAAQkd,QACzD1lB,SAArBmnD,EAAW7iD,QAA+B7K,KAAK+O,QAAQlE,MAAQlK,EAAKiK,WAAW8iD,EAAW7iD,QAEpEtE,SAAtBvG,KAAK+O,QAAQmuC,OAA2C,IAArBl9C,KAAK+O,QAAQmuC,MAAY,CAC9D,IAAIl9C,KAAK04D,UAIP,KAAM,uBAHN14D,MAAKw6D,SAAWx6D,KAAK04D,UAAUP,KAAKn4D,KAAK+O,QAAQmuC,MAAOl9C,KAAK+O,QAAQ0rD,aAkCzE,OA3BkCl0D,SAA9BmnD,EAAW8D,gBACbxxD,KAAKsqD,QAAUoD,EAAW8D,eAC1BxxD,KAAKwxD,eAAiB9D,EAAW8D,gBAETjrD,SAAjBmnD,EAAWr7C,GAA0C,GAAvBrS,KAAKwxD,iBAC1CxxD,KAAKsqD,QAAS,GAIkB/jD,SAA9BmnD,EAAW+D,gBACbzxD,KAAKuqD,QAAUmD,EAAW+D,eAC1BzxD,KAAKyxD,eAAiB/D,EAAW+D,gBAETlrD,SAAjBmnD,EAAWp7C,GAA0C,GAAvBtS,KAAKyxD,iBAC1CzxD,KAAKuqD,QAAS,GAGhBvqD,KAAKi5D,YAAcj5D,KAAKi5D,aAAsC1yD,SAAtBmnD,EAAWzhC,OAEzB,SAAtBjsB,KAAK+O,QAAQkuC,QACfj9C,KAAK+O,QAAQguC,UAAYqE,EAAUvE,MAAMp1B,SACzCznB,KAAK+O,QAAQiuC,UAAYoE,EAAUvE,MAAMn1B,UAMnC1nB,KAAK+O,QAAQkuC,OACnB,IAAK,WAAiBj9C,KAAKgsC,KAAOhsC,KAAK06D,cAAe16D,KAAK+0D,OAAS/0D,KAAK26D,eAAiB,MAC1F,KAAK,MAAiB36D,KAAKgsC,KAAOhsC,KAAK46D,SAAU56D,KAAK+0D,OAAS/0D,KAAK66D,UAAY,MAChF,KAAK,SAAiB76D,KAAKgsC,KAAOhsC,KAAK86D,YAAa96D,KAAK+0D,OAAS/0D,KAAK+6D,aAAe,MACtF,KAAK,UAAiB/6D,KAAKgsC,KAAOhsC,KAAKg7D,aAAch7D,KAAK+0D,OAAS/0D,KAAKi7D,cAAgB,MAExF,KAAK,QAAiBj7D,KAAKgsC,KAAOhsC,KAAKk7D,WAAYl7D,KAAK+0D,OAAS/0D,KAAKm7D,YAAc,MACpF,KAAK,OAAiBn7D,KAAKgsC,KAAOhsC,KAAKo7D,UAAWp7D,KAAK+0D,OAAS/0D,KAAKq7D,WAAa,MAClF,KAAK,MAAiBr7D,KAAKgsC,KAAOhsC,KAAKs7D,SAAUt7D,KAAK+0D,OAAS/0D,KAAKu7D,YAAc,MAClF,KAAK,SAAiBv7D,KAAKgsC,KAAOhsC,KAAKw7D,YAAax7D,KAAK+0D,OAAS/0D,KAAKu7D,YAAc,MACrF,KAAK,WAAiBv7D,KAAKgsC,KAAOhsC,KAAKy7D,cAAez7D,KAAK+0D,OAAS/0D,KAAKu7D,YAAc,MACvF,KAAK,eAAiBv7D,KAAKgsC,KAAOhsC,KAAK07D,kBAAmB17D,KAAK+0D,OAAS/0D,KAAKu7D,YAAc,MAC3F,KAAK,OAAiBv7D,KAAKgsC,KAAOhsC,KAAK27D,UAAW37D,KAAK+0D,OAAS/0D,KAAKu7D,YAAc,MACnF,SAAsBv7D,KAAKgsC,KAAOhsC,KAAKg7D,aAAch7D,KAAK+0D,OAAS/0D,KAAKi7D,eAG1Ej7D,KAAK47D,WAOPr4D,EAAKkQ,UAAU09B,OAAS,WACtBnxC,KAAKkzC,UAAW,EAChBlzC,KAAK47D,UAMPr4D,EAAKkQ,UAAUy9B,SAAW,WACxBlxC,KAAKkzC,UAAW,EAChBlzC,KAAK47D,UAOPr4D,EAAKkQ,UAAUooD,eAAiB,WAC9B77D,KAAK47D,UAOPr4D,EAAKkQ,UAAUmoD,OAAS,WACtB57D,KAAK6S,MAAQtM,OACbvG,KAAK8S,OAASvM,QAQhBhD,EAAKkQ,UAAU84C,SAAW,WACxB,MAA6B,kBAAfvsD,MAAKglC,MAAuBhlC,KAAKglC,QAAUhlC,KAAKglC,OAShEzhC,EAAKkQ,UAAU6iD,iBAAmB,SAAUhvC,EAAK6lC,GAC/C,GAAI5sC,GAAc,CAMlB,QAJKvgB,KAAK6S,OACR7S,KAAK+0D,OAAOztC,GAGNtnB,KAAK+O,QAAQkuC,OACnB,IAAK,SACL,IAAK,MACH,MAAOj9C,MAAK+O,QAAQkd,OAAQ1L,CAE9B,KAAK,UACH,GAAIjb,GAAItF,KAAK6S,MAAQ,EACjB1M,EAAInG,KAAK8S,OAAS,EAClBs7C,EAAKnpD,KAAK0Z,IAAIwuC,GAAS7nD,EACvBgG,EAAKrG,KAAK6Z,IAAIquC,GAAShnD,CAC3B,OAAOb,GAAIa,EAAIlB,KAAKirB,KAAKk+B,EAAIA,EAAI9iD,EAAIA,EAMvC,KAAK,MACL,IAAK,QACL,IAAK,OACL,QACE,MAAItL,MAAK6S,MACA5N,KAAKwG,IACRxG,KAAKmmB,IAAIprB,KAAK6S,MAAQ,EAAI5N,KAAK6Z,IAAIquC,IACnCloD,KAAKmmB,IAAIprB,KAAK8S,OAAS,EAAI7N,KAAK0Z,IAAIwuC,KAAW5sC,EAI5C,IAYfhd,EAAKkQ,UAAUqoD,UAAY,SAAS1C,EAAIC,GACtCr5D,KAAKo5D,GAAKA,EACVp5D,KAAKq5D,GAAKA,GASZ91D,EAAKkQ,UAAUsoD,UAAY,SAAS3C,EAAIC,GACtCr5D,KAAKo5D,IAAMA,EACXp5D,KAAKq5D,IAAMA,GAOb91D,EAAKkQ,UAAUm8C,aAAe,SAAS78B,GACrC,GAAK/yB,KAAKsqD,OAORtqD,KAAKo5D,GAAK,EACVp5D,KAAKs5D,GAAK,MARM,CAChB,GAAIn6C,GAAOnf,KAAK0+C,QAAU1+C,KAAKs5D,GAC3Bn7C,GAAQne,KAAKo5D,GAAKj6C,GAAMnf,KAAK+O,QAAQ+tC,IACzC98C,MAAKs5D,IAAMn7C,EAAK4U,EAChB/yB,KAAKqS,GAAMrS,KAAKs5D,GAAKvmC,EAOvB,GAAK/yB,KAAKuqD,OAORvqD,KAAKq5D,GAAK,EACVr5D,KAAKu5D,GAAK,MARM,CAChB,GAAIn6C,GAAOpf,KAAK0+C,QAAU1+C,KAAKu5D,GAC3Bn7C,GAAQpe,KAAKq5D,GAAKj6C,GAAMpf,KAAK+O,QAAQ+tC,IACzC98C,MAAKu5D,IAAMn7C,EAAK2U,EAChB/yB,KAAKsS,GAAMtS,KAAKu5D,GAAKxmC,IAezBxvB,EAAKkQ,UAAUk8C,oBAAsB,SAAS58B,EAAU6tB,GACtD,GAAK5gD,KAAKsqD,OAQRtqD,KAAKo5D,GAAK,EACVp5D,KAAKs5D,GAAK,MATM,CAChB,GAAIn6C,GAAOnf,KAAK0+C,QAAU1+C,KAAKs5D,GAC3Bn7C,GAAQne,KAAKo5D,GAAKj6C,GAAMnf,KAAK+O,QAAQ+tC,IACzC98C,MAAKs5D,IAAMn7C,EAAK4U,EAChB/yB,KAAKs5D,GAAMr0D,KAAKmmB,IAAIprB,KAAKs5D,IAAM1Y,EAAiB5gD,KAAKs5D,GAAK,EAAK1Y,GAAeA,EAAe5gD,KAAKs5D,GAClGt5D,KAAKqS,GAAMrS,KAAKs5D,GAAKvmC,EAOvB,GAAK/yB,KAAKuqD,OAQRvqD,KAAKq5D,GAAK,EACVr5D,KAAKu5D,GAAK,MATM,CAChB,GAAIn6C,GAAOpf,KAAK0+C,QAAU1+C,KAAKu5D,GAC3Bn7C,GAAQpe,KAAKq5D,GAAKj6C,GAAMpf,KAAK+O,QAAQ+tC,IACzC98C,MAAKu5D,IAAMn7C,EAAK2U,EAChB/yB,KAAKu5D,GAAMt0D,KAAKmmB,IAAIprB,KAAKu5D,IAAM3Y,EAAiB5gD,KAAKu5D,GAAK,EAAK3Y,GAAeA,EAAe5gD,KAAKu5D,GAClGv5D,KAAKsS,GAAMtS,KAAKu5D,GAAKxmC,IAYzBxvB,EAAKkQ,UAAUuoD,QAAU,WACvB,MAAQh8D,MAAKsqD,QAAUtqD,KAAKuqD,QAQ9BhnD,EAAKkQ,UAAU+7C,SAAW,SAASD,GACjC,GAAI0M,GAAWh3D,KAAKirB,KAAKjrB,KAAKovB,IAAIr0B,KAAKs5D,GAAG,GAAKr0D,KAAKovB,IAAIr0B,KAAKu5D,GAAG,GAEhE,OAAQ0C,GAAW1M,GAOrBhsD,EAAKkQ,UAAUw2C,WAAa,WAC1B,MAAOjqD,MAAKkzC,UAOd3vC,EAAKkQ,UAAUyB,SAAW,WACxB,MAAOlV,MAAKoH,OASd7D,EAAKkQ,UAAUyoD,YAAc,SAAS7pD,EAAGC,GACvC,GAAI6M,GAAKnf,KAAKqS,EAAIA,EACd+M,EAAKpf,KAAKsS,EAAIA,CAClB,OAAOrN,MAAKirB,KAAK/Q,EAAKA,EAAKC,EAAKA,IAUlC7b,EAAKkQ,UAAU06C,cAAgB,SAAS1iD,EAAKyB,GAC3C,IAAKlN,KAAKi5D,aAA8B1yD,SAAfvG,KAAKoH,MAC5B,GAAI8F,GAAOzB,EACTzL,KAAK+O,QAAQkd,QAASjsB,KAAK+O,QAAQguC,UAAY/8C,KAAK+O,QAAQiuC,WAAa,MAEtE,CACH,GAAIx/B,IAASxd,KAAK+O,QAAQiuC,UAAYh9C,KAAK+O,QAAQguC,YAAc7vC,EAAMzB,EACvEzL,MAAK+O,QAAQkd,QAASjsB,KAAKoH,MAAQqE,GAAO+R,EAAQxd,KAAK+O,QAAQguC,UAGnE/8C,KAAKg5D,gBAAkBh5D,KAAK+O,QAAQkd,QAQtC1oB,EAAKkQ,UAAUu4B,KAAO,WACpB,KAAM,wCAQRzoC,EAAKkQ,UAAUshD,OAAS,WACtB,KAAM,0CAQRxxD,EAAKkQ,UAAU+4C,kBAAoB,SAASlpC,GAC1C,MAAQtjB,MAAKwH,KAAoB8b,EAAIsE,OAC7B5nB,KAAKwH,KAAOxH,KAAK6S,MAAQyQ,EAAI9b,MAC7BxH,KAAK4H,IAAoB0b,EAAIO,QAC7B7jB,KAAK4H,IAAM5H,KAAK8S,OAASwQ,EAAI1b,KAGvCrE,EAAKkQ,UAAU0nD,aAAe,WAG5B,IAAKn7D,KAAK6S,QAAU7S,KAAK8S,OAAQ,CAC/B,GAAID,GAAOC,CACX,IAAI9S,KAAKoH,MAAO,CACdpH,KAAK+O,QAAQkd,OAAQjsB,KAAKg5D,eAC1B,IAAIx7C,GAAQxd,KAAKw6D,SAAS1nD,OAAS9S,KAAKw6D,SAAS3nD,KACnCtM,UAAViX,GACF3K,EAAQ7S,KAAK+O,QAAQkd,QAASjsB,KAAKw6D,SAAS3nD,MAC5CC,EAAS9S,KAAK+O,QAAQkd,OAAQzO,GAASxd,KAAKw6D,SAAS1nD,SAGrDD,EAAQ,EACRC,EAAS,OAIXD,GAAQ7S,KAAKw6D,SAAS3nD,MACtBC,EAAS9S,KAAKw6D,SAAS1nD,MAEzB9S,MAAK6S,MAASA,EACd7S,KAAK8S,OAASA,EAEd9S,KAAK85D,gBAAkB,EACnB95D,KAAK6S,MAAQ,GAAK7S,KAAK8S,OAAS,IAClC9S,KAAK6S,OAAU5N,KAAKwG,IAAIzL,KAAKi6D,YAAc,EAAGj6D,KAAK4/C,uBAA0B5/C,KAAK25D,uBAClF35D,KAAK8S,QAAU7N,KAAKwG,IAAIzL,KAAKi6D,YAAc,EAAGj6D,KAAK4/C,uBAAyB5/C,KAAK45D,wBACjF55D,KAAK+O,QAAQkd,QAAShnB,KAAKwG,IAAIzL,KAAKi6D,YAAc,EAAGj6D,KAAK4/C,uBAAyB5/C,KAAK65D,wBACxF75D,KAAK85D,gBAAkB95D,KAAK6S,MAAQA,KAM1CtP,EAAKkQ,UAAUynD,WAAa,SAAU5zC,GACpCtnB,KAAKm7D,aAAa7zC,GAElBtnB,KAAKwH,KAASxH,KAAKqS,EAAIrS,KAAK6S,MAAQ,EACpC7S,KAAK4H,IAAS5H,KAAKsS,EAAItS,KAAK8S,OAAS,CAErC,IAAIuH,EACJ,IAA2B,GAAvBra,KAAKw6D,SAAS3nD,MAAa,CAE7B,GAAI7S,KAAKi6D,YAAc,EAAG,CACxB,GAAIpyC,GAAc7nB,KAAKi6D,YAAc,EAAK,GAAK,CAC/CpyC,IAAa7nB,KAAKk1D,gBAClBrtC,EAAY5iB,KAAKwG,IAAI,GAAMzL,KAAK6S,MAAMgV,GAEtCP,EAAI60C,YAAc,GAClB70C,EAAI80C,UAAUp8D,KAAKw6D,SAAUx6D,KAAKwH,KAAOqgB,EAAW7nB,KAAK4H,IAAMigB,EAAW7nB,KAAK6S,MAAQ,EAAEgV,EAAW7nB,KAAK8S,OAAS,EAAE+U,GAItHP,EAAI60C,YAAc,EAClB70C,EAAI80C,UAAUp8D,KAAKw6D,SAAUx6D,KAAKwH,KAAMxH,KAAK4H,IAAK5H,KAAK6S,MAAO7S,KAAK8S,QACnEuH,EAASra,KAAKsS,EAAItS,KAAK8S,OAAS,MAIhCuH,GAASra,KAAKsS,CAGhBtS,MAAK80D,OAAOxtC,EAAKtnB,KAAKgpB,MAAOhpB,KAAKqS,EAAGgI,EAAQ9T,OAAW,QAI1DhD,EAAKkQ,UAAUonD,WAAa,SAAUvzC,GACpC,IAAKtnB,KAAK6S,MAAO,CACf,GAAIoH,GAAS,EACToiD,EAAWr8D,KAAKs8D,YAAYh1C,EAChCtnB,MAAK6S,MAAQwpD,EAASxpD,MAAQ,EAAIoH,EAClCja,KAAK8S,OAASupD,EAASvpD,OAAS,EAAImH,EAEpCja,KAAK6S,OAAuE,GAA7D5N,KAAKwG,IAAIzL,KAAKi6D,YAAc,EAAGj6D,KAAK4/C,uBAA+B5/C,KAAK25D,uBACvF35D,KAAK8S,QAAuE,GAA7D7N,KAAKwG,IAAIzL,KAAKi6D,YAAc,EAAGj6D,KAAK4/C,uBAA+B5/C,KAAK45D,wBACvF55D,KAAK85D,gBAAkB95D,KAAK6S,OAASwpD,EAASxpD,MAAQ,EAAIoH,KAM9D1W,EAAKkQ,UAAUmnD,SAAW,SAAUtzC,GAClCtnB,KAAK66D,WAAWvzC,GAEhBtnB,KAAKwH,KAAOxH,KAAKqS,EAAIrS,KAAK6S,MAAQ,EAClC7S,KAAK4H,IAAM5H,KAAKsS,EAAItS,KAAK8S,OAAS,CAElC,IAAIypD,GAAmB,IACnBh8C,EAAcvgB,KAAK+O,QAAQwR,YAC3Bi8C,EAAqBx8D,KAAK+O,QAAQ0uC,qBAAuB,EAAIz9C,KAAK+O,QAAQwR,WAE9E+G,GAAIY,YAAcloB,KAAKkzC,SAAWlzC,KAAK+O,QAAQlE,MAAMmB,UAAUD,OAAS/L,KAAKiM,MAAQjM,KAAK+O,QAAQlE,MAAMoB,MAAMF,OAAS/L,KAAK+O,QAAQlE,MAAMkB,OAGtI/L,KAAKi6D,YAAc,IACrB3yC,EAAIO,WAAa7nB,KAAKkzC,SAAWspB,EAAqBj8C,IAAiBvgB,KAAKi6D,YAAc,EAAKsC,EAAmB,GAClHj1C,EAAIO,WAAa7nB,KAAKk1D,gBACtB5tC,EAAIO,UAAY5iB,KAAKwG,IAAIzL,KAAK6S,MAAMyU,EAAIO,WAExCP,EAAIm1C,UAAUz8D,KAAKwH,KAAK,EAAE8f,EAAIO,UAAW7nB,KAAK4H,IAAI,EAAE0f,EAAIO,UAAW7nB,KAAK6S,MAAM,EAAEyU,EAAIO,UAAW7nB,KAAK8S,OAAO,EAAEwU,EAAIO,UAAW7nB,KAAK+O,QAAQkd,QACzI3E,EAAIlH,UAENkH,EAAIO,WAAa7nB,KAAKkzC,SAAWspB,EAAqBj8C,IAAiBvgB,KAAKi6D,YAAc,EAAKsC,EAAmB,GAClHj1C,EAAIO,WAAa7nB,KAAKk1D,gBACtB5tC,EAAIO,UAAY5iB,KAAKwG,IAAIzL,KAAK6S,MAAMyU,EAAIO,WAExCP,EAAIiB,UAAYvoB,KAAKkzC,SAAWlzC,KAAK+O,QAAQlE,MAAMmB,UAAUF,WAAa9L,KAAK+O,QAAQlE,MAAMiB,WAE7Fwb,EAAIm1C,UAAUz8D,KAAKwH,KAAMxH,KAAK4H,IAAK5H,KAAK6S,MAAO7S,KAAK8S,OAAQ9S,KAAK+O,QAAQkd,QACzE3E,EAAInH,OACJmH,EAAIlH,SAEJpgB,KAAK80D,OAAOxtC,EAAKtnB,KAAKgpB,MAAOhpB,KAAKqS,EAAGrS,KAAKsS,IAI5C/O,EAAKkQ,UAAUknD,gBAAkB,SAAUrzC,GACzC,IAAKtnB,KAAK6S,MAAO,CACf,GAAIoH,GAAS,EACToiD,EAAWr8D,KAAKs8D,YAAYh1C,GAC5B3U,EAAO0pD,EAASxpD,MAAQ,EAAIoH,CAChCja,MAAK6S,MAAQF,EACb3S,KAAK8S,OAASH,EAGd3S,KAAK6S,OAAU5N,KAAKwG,IAAIzL,KAAKi6D,YAAc,EAAGj6D,KAAK4/C,uBAAyB5/C,KAAK25D,uBACjF35D,KAAK8S,QAAU7N,KAAKwG,IAAIzL,KAAKi6D,YAAc,EAAGj6D,KAAK4/C,uBAAyB5/C,KAAK45D,wBACjF55D,KAAK+O,QAAQkd,QAAShnB,KAAKwG,IAAIzL,KAAKi6D,YAAc,EAAGj6D,KAAK4/C,uBAAyB5/C,KAAK65D,wBACxF75D,KAAK85D,gBAAkB95D,KAAK6S,MAAQF,IAIxCpP,EAAKkQ,UAAUinD,cAAgB,SAAUpzC,GACvCtnB,KAAK26D,gBAAgBrzC,GACrBtnB,KAAKwH,KAAOxH,KAAKqS,EAAIrS,KAAK6S,MAAQ,EAClC7S,KAAK4H,IAAM5H,KAAKsS,EAAItS,KAAK8S,OAAS,CAElC,IAAIypD,GAAmB,IACnBh8C,EAAcvgB,KAAK+O,QAAQwR,YAC3Bi8C,EAAqBx8D,KAAK+O,QAAQ0uC,qBAAuB,EAAIz9C,KAAK+O,QAAQwR,WAE9E+G,GAAIY,YAAcloB,KAAKkzC,SAAWlzC,KAAK+O,QAAQlE,MAAMmB,UAAUD,OAAS/L,KAAKiM,MAAQjM,KAAK+O,QAAQlE,MAAMoB,MAAMF,OAAS/L,KAAK+O,QAAQlE,MAAMkB,OAGtI/L,KAAKi6D,YAAc,IACrB3yC,EAAIO,WAAa7nB,KAAKkzC,SAAWspB,EAAqBj8C,IAAiBvgB,KAAKi6D,YAAc,EAAKsC,EAAmB,GAClHj1C,EAAIO,WAAa7nB,KAAKk1D,gBACtB5tC,EAAIO,UAAY5iB,KAAKwG,IAAIzL,KAAK6S,MAAMyU,EAAIO,WAExCP,EAAIo1C,SAAS18D,KAAKqS,EAAIrS,KAAK6S,MAAM,EAAI,EAAEyU,EAAIO,UAAW7nB,KAAKsS,EAAgB,GAAZtS,KAAK8S,OAAa,EAAEwU,EAAIO,UAAW7nB,KAAK6S,MAAQ,EAAEyU,EAAIO,UAAW7nB,KAAK8S,OAAS,EAAEwU,EAAIO,WACpJP,EAAIlH,UAENkH,EAAIO,WAAa7nB,KAAKkzC,SAAWspB,EAAqBj8C,IAAiBvgB,KAAKi6D,YAAc,EAAKsC,EAAmB,GAClHj1C,EAAIO,WAAa7nB,KAAKk1D,gBACtB5tC,EAAIO,UAAY5iB,KAAKwG,IAAIzL,KAAK6S,MAAMyU,EAAIO,WAExCP,EAAIiB,UAAYvoB,KAAKkzC,SAAWlzC,KAAK+O,QAAQlE,MAAMmB,UAAUF,WAAa9L,KAAKiM,MAAQjM,KAAK+O,QAAQlE,MAAMoB,MAAMH,WAAa9L,KAAK+O,QAAQlE,MAAMiB,WAChJwb,EAAIo1C,SAAS18D,KAAKqS,EAAIrS,KAAK6S,MAAM,EAAG7S,KAAKsS,EAAgB,GAAZtS,KAAK8S,OAAY9S,KAAK6S,MAAO7S,KAAK8S,QAC/EwU,EAAInH,OACJmH,EAAIlH,SAEJpgB,KAAK80D,OAAOxtC,EAAKtnB,KAAKgpB,MAAOhpB,KAAKqS,EAAGrS,KAAKsS,IAI5C/O,EAAKkQ,UAAUsnD,cAAgB,SAAUzzC,GACvC,IAAKtnB,KAAK6S,MAAO,CACf,GAAIoH,GAAS,EACToiD,EAAWr8D,KAAKs8D,YAAYh1C,GAC5Bq1C,EAAW13D,KAAKiI,IAAImvD,EAASxpD,MAAOwpD,EAASvpD,QAAU,EAAImH,CAC/Dja,MAAK+O,QAAQkd,OAAS0wC,EAAW,EAEjC38D,KAAK6S,MAAQ8pD,EACb38D,KAAK8S,OAAS6pD,EAKd38D,KAAK+O,QAAQkd,QAAuE,GAA7DhnB,KAAKwG,IAAIzL,KAAKi6D,YAAc,EAAGj6D,KAAK4/C,uBAA+B5/C,KAAK65D,wBAC/F75D,KAAK85D,gBAAkB95D,KAAK+O,QAAQkd,OAAQ,GAAI0wC,IAIpDp5D,EAAKkQ,UAAUqnD,YAAc,SAAUxzC,GACrCtnB,KAAK+6D,cAAczzC,GACnBtnB,KAAKwH,KAAOxH,KAAKqS,EAAIrS,KAAK6S,MAAQ,EAClC7S,KAAK4H,IAAM5H,KAAKsS,EAAItS,KAAK8S,OAAS,CAElC,IAAIypD,GAAmB,IACnBh8C,EAAcvgB,KAAK+O,QAAQwR,YAC3Bi8C,EAAqBx8D,KAAK+O,QAAQ0uC,qBAAuB,EAAIz9C,KAAK+O,QAAQwR,WAE9E+G,GAAIY,YAAcloB,KAAKkzC,SAAWlzC,KAAK+O,QAAQlE,MAAMmB,UAAUD,OAAS/L,KAAKiM,MAAQjM,KAAK+O,QAAQlE,MAAMoB,MAAMF,OAAS/L,KAAK+O,QAAQlE,MAAMkB,OAGtI/L,KAAKi6D,YAAc,IACrB3yC,EAAIO,WAAa7nB,KAAKkzC,SAAWspB,EAAqBj8C,IAAiBvgB,KAAKi6D,YAAc,EAAKsC,EAAmB,GAClHj1C,EAAIO,WAAa7nB,KAAKk1D,gBACtB5tC,EAAIO,UAAY5iB,KAAKwG,IAAIzL,KAAK6S,MAAMyU,EAAIO,WAExCP,EAAIs1C,OAAO58D,KAAKqS,EAAGrS,KAAKsS,EAAGtS,KAAK+O,QAAQkd,OAAO,EAAE3E,EAAIO,WACrDP,EAAIlH,UAENkH,EAAIO,WAAa7nB,KAAKkzC,SAAWspB,EAAqBj8C,IAAiBvgB,KAAKi6D,YAAc,EAAKsC,EAAmB,GAClHj1C,EAAIO,WAAa7nB,KAAKk1D,gBACtB5tC,EAAIO,UAAY5iB,KAAKwG,IAAIzL,KAAK6S,MAAMyU,EAAIO,WAExCP,EAAIiB,UAAYvoB,KAAKkzC,SAAWlzC,KAAK+O,QAAQlE,MAAMmB,UAAUF,WAAa9L,KAAKiM,MAAQjM,KAAK+O,QAAQlE,MAAMoB,MAAMH,WAAa9L,KAAK+O,QAAQlE,MAAMiB,WAChJwb,EAAIs1C,OAAO58D,KAAKqS,EAAGrS,KAAKsS,EAAGtS,KAAK+O,QAAQkd,QACxC3E,EAAInH,OACJmH,EAAIlH,SAEJpgB,KAAK80D,OAAOxtC,EAAKtnB,KAAKgpB,MAAOhpB,KAAKqS,EAAGrS,KAAKsS,IAG5C/O,EAAKkQ,UAAUwnD,eAAiB,SAAU3zC,GACxC,IAAKtnB,KAAK6S,MAAO,CACf,GAAIwpD,GAAWr8D,KAAKs8D,YAAYh1C,EAEhCtnB,MAAK6S,MAAyB,IAAjBwpD,EAASxpD,MACtB7S,KAAK8S,OAA2B,EAAlBupD,EAASvpD,OACnB9S,KAAK6S,MAAQ7S,KAAK8S,SACpB9S,KAAK6S,MAAQ7S,KAAK8S,OAEpB,IAAI+pD,GAAc78D,KAAK6S,KAGvB7S,MAAK6S,OAAU5N,KAAKwG,IAAIzL,KAAKi6D,YAAc,EAAGj6D,KAAK4/C,uBAAyB5/C,KAAK25D,uBACjF35D,KAAK8S,QAAU7N,KAAKwG,IAAIzL,KAAKi6D,YAAc,EAAGj6D,KAAK4/C,uBAAyB5/C,KAAK45D,wBACjF55D,KAAK+O,QAAQkd,QAAUhnB,KAAKwG,IAAIzL,KAAKi6D,YAAc,EAAGj6D,KAAK4/C,uBAAyB5/C,KAAK65D,wBACzF75D,KAAK85D,gBAAkB95D,KAAK6S,MAAQgqD,IAIxCt5D,EAAKkQ,UAAUunD,aAAe,SAAU1zC,GACtCtnB,KAAKi7D,eAAe3zC,GACpBtnB,KAAKwH,KAAOxH,KAAKqS,EAAIrS,KAAK6S,MAAQ,EAClC7S,KAAK4H,IAAM5H,KAAKsS,EAAItS,KAAK8S,OAAS,CAElC,IAAIypD,GAAmB,IACnBh8C,EAAcvgB,KAAK+O,QAAQwR,YAC3Bi8C,EAAqBx8D,KAAK+O,QAAQ0uC,qBAAuB,EAAIz9C,KAAK+O,QAAQwR,WAE9E+G,GAAIY,YAAcloB,KAAKkzC,SAAWlzC,KAAK+O,QAAQlE,MAAMmB,UAAUD,OAAS/L,KAAKiM,MAAQjM,KAAK+O,QAAQlE,MAAMoB,MAAMF,OAAS/L,KAAK+O,QAAQlE,MAAMkB,OAGtI/L,KAAKi6D,YAAc,IACrB3yC,EAAIO,WAAa7nB,KAAKkzC,SAAWspB,EAAqBj8C,IAAiBvgB,KAAKi6D,YAAc,EAAKsC,EAAmB,GAClHj1C,EAAIO,WAAa7nB,KAAKk1D,gBACtB5tC,EAAIO,UAAY5iB,KAAKwG,IAAIzL,KAAK6S,MAAMyU,EAAIO,WAExCP,EAAIw1C,QAAQ98D,KAAKwH,KAAK,EAAE8f,EAAIO,UAAW7nB,KAAK4H,IAAI,EAAE0f,EAAIO,UAAW7nB,KAAK6S,MAAM,EAAEyU,EAAIO,UAAW7nB,KAAK8S,OAAO,EAAEwU,EAAIO,WAC/GP,EAAIlH,UAENkH,EAAIO,WAAa7nB,KAAKkzC,SAAWspB,EAAqBj8C,IAAiBvgB,KAAKi6D,YAAc,EAAKsC,EAAmB,GAClHj1C,EAAIO,WAAa7nB,KAAKk1D,gBACtB5tC,EAAIO,UAAY5iB,KAAKwG,IAAIzL,KAAK6S,MAAMyU,EAAIO,WAExCP,EAAIiB,UAAYvoB,KAAKkzC,SAAWlzC,KAAK+O,QAAQlE,MAAMmB,UAAUF,WAAa9L,KAAKiM,MAAQjM,KAAK+O,QAAQlE,MAAMoB,MAAMH,WAAa9L,KAAK+O,QAAQlE,MAAMiB,WAEhJwb,EAAIw1C,QAAQ98D,KAAKwH,KAAMxH,KAAK4H,IAAK5H,KAAK6S,MAAO7S,KAAK8S,QAClDwU,EAAInH,OACJmH,EAAIlH,SACJpgB,KAAK80D,OAAOxtC,EAAKtnB,KAAKgpB,MAAOhpB,KAAKqS,EAAGrS,KAAKsS,IAG5C/O,EAAKkQ,UAAU6nD,SAAW,SAAUh0C,GAClCtnB,KAAK+8D,WAAWz1C,EAAK,WAGvB/jB,EAAKkQ,UAAUgoD,cAAgB,SAAUn0C,GACvCtnB,KAAK+8D,WAAWz1C,EAAK,aAGvB/jB,EAAKkQ,UAAUioD,kBAAoB,SAAUp0C,GAC3CtnB,KAAK+8D,WAAWz1C,EAAK,iBAGvB/jB,EAAKkQ,UAAU+nD,YAAc,SAAUl0C,GACrCtnB,KAAK+8D,WAAWz1C,EAAK,WAGvB/jB,EAAKkQ,UAAUkoD,UAAY,SAAUr0C,GACnCtnB,KAAK+8D,WAAWz1C,EAAK,SAGvB/jB,EAAKkQ,UAAU8nD,aAAe,WAC5B,IAAKv7D,KAAK6S,MAAO,CACf7S,KAAK+O,QAAQkd,OAAQjsB,KAAKg5D,eAC1B,IAAIrmD,GAAO,EAAI3S,KAAK+O,QAAQkd,MAC5BjsB,MAAK6S,MAAQF,EACb3S,KAAK8S,OAASH,EAGd3S,KAAK6S,OAAU5N,KAAKwG,IAAIzL,KAAKi6D,YAAc,EAAGj6D,KAAK4/C,uBAAyB5/C,KAAK25D,uBACjF35D,KAAK8S,QAAU7N,KAAKwG,IAAIzL,KAAKi6D,YAAc,EAAGj6D,KAAK4/C,uBAAyB5/C,KAAK45D,wBACjF55D,KAAK+O,QAAQkd,QAAsE,GAA7DhnB,KAAKwG,IAAIzL,KAAKi6D,YAAc,EAAGj6D,KAAK4/C,uBAA+B5/C,KAAK65D,wBAC9F75D,KAAK85D,gBAAkB95D,KAAK6S,MAAQF,IAIxCpP,EAAKkQ,UAAUspD,WAAa,SAAUz1C,EAAK21B,GACzCj9C,KAAKu7D,aAAaj0C,GAElBtnB,KAAKwH,KAAOxH,KAAKqS,EAAIrS,KAAK6S,MAAQ,EAClC7S,KAAK4H,IAAM5H,KAAKsS,EAAItS,KAAK8S,OAAS,CAElC,IAAIypD,GAAmB,IACnBh8C,EAAcvgB,KAAK+O,QAAQwR,YAC3Bi8C,EAAqBx8D,KAAK+O,QAAQ0uC,qBAAuB,EAAIz9C,KAAK+O,QAAQwR,YAC1Ey8C,EAAmB,CAGvB,QAAQ/f,GACN,IAAK,MAAiB+f,EAAmB,CAAG,MAC5C,KAAK,SAAiBA,EAAmB,CAAG,MAC5C,KAAK,WAAiBA,EAAmB,CAAG,MAC5C,KAAK,eAAiBA,EAAmB,CAAG,MAC5C,KAAK,OAAiBA,EAAmB,EAG3C11C,EAAIY,YAAcloB,KAAKkzC,SAAWlzC,KAAK+O,QAAQlE,MAAMmB,UAAUD,OAAS/L,KAAKiM,MAAQjM,KAAK+O,QAAQlE,MAAMoB,MAAMF,OAAS/L,KAAK+O,QAAQlE,MAAMkB,OAEtI/L,KAAKi6D,YAAc,IACrB3yC,EAAIO,WAAa7nB,KAAKkzC,SAAWspB,EAAqBj8C,IAAiBvgB,KAAKi6D,YAAc,EAAKsC,EAAmB,GAClHj1C,EAAIO,WAAa7nB,KAAKk1D,gBACtB5tC,EAAIO,UAAY5iB,KAAKwG,IAAIzL,KAAK6S,MAAMyU,EAAIO,WAExCP,EAAI21B,GAAOj9C,KAAKqS,EAAGrS,KAAKsS,EAAGtS,KAAK+O,QAAQkd,OAAQ+wC,EAAmB11C,EAAIO,WACvEP,EAAIlH,UAENkH,EAAIO,WAAa7nB,KAAKkzC,SAAWspB,EAAqBj8C,IAAiBvgB,KAAKi6D,YAAc,EAAKsC,EAAmB,GAClHj1C,EAAIO,WAAa7nB,KAAKk1D,gBACtB5tC,EAAIO,UAAY5iB,KAAKwG,IAAIzL,KAAK6S,MAAMyU,EAAIO,WAExCP,EAAIiB,UAAYvoB,KAAKkzC,SAAWlzC,KAAK+O,QAAQlE,MAAMmB,UAAUF,WAAa9L,KAAKiM,MAAQjM,KAAK+O,QAAQlE,MAAMoB,MAAMH,WAAa9L,KAAK+O,QAAQlE,MAAMiB,WAChJwb,EAAI21B,GAAOj9C,KAAKqS,EAAGrS,KAAKsS,EAAGtS,KAAK+O,QAAQkd,QACxC3E,EAAInH,OACJmH,EAAIlH,SAEApgB,KAAKgpB,OACPhpB,KAAK80D,OAAOxtC,EAAKtnB,KAAKgpB,MAAOhpB,KAAKqS,EAAGrS,KAAKsS,EAAItS,KAAK8S,OAAS,EAAGvM,OAAW,OAAM,IAIpFhD,EAAKkQ,UAAU4nD,YAAc,SAAU/zC,GACrC,IAAKtnB,KAAK6S,MAAO,CACf,GAAIoH,GAAS,EACToiD,EAAWr8D,KAAKs8D,YAAYh1C,EAChCtnB,MAAK6S,MAAQwpD,EAASxpD,MAAQ,EAAIoH,EAClCja,KAAK8S,OAASupD,EAASvpD,OAAS,EAAImH,EAGpCja,KAAK6S,OAAU5N,KAAKwG,IAAIzL,KAAKi6D,YAAc,EAAGj6D,KAAK4/C,uBAAyB5/C,KAAK25D,uBACjF35D,KAAK8S,QAAU7N,KAAKwG,IAAIzL,KAAKi6D,YAAc,EAAGj6D,KAAK4/C,uBAAyB5/C,KAAK45D,wBACjF55D,KAAK+O,QAAQkd,QAAShnB,KAAKwG,IAAIzL,KAAKi6D,YAAc,EAAGj6D,KAAK4/C,uBAAyB5/C,KAAK65D,wBACxF75D,KAAK85D,gBAAkB95D,KAAK6S,OAASwpD,EAASxpD,MAAQ,EAAIoH;GAI9D1W,EAAKkQ,UAAU2nD,UAAY,SAAU9zC,GACnCtnB,KAAKq7D,YAAY/zC,GACjBtnB,KAAKwH,KAAOxH,KAAKqS,EAAIrS,KAAK6S,MAAQ,EAClC7S,KAAK4H,IAAM5H,KAAKsS,EAAItS,KAAK8S,OAAS,EAElC9S,KAAK80D,OAAOxtC,EAAKtnB,KAAKgpB,MAAOhpB,KAAKqS,EAAGrS,KAAKsS,IAI5C/O,EAAKkQ,UAAUqhD,OAAS,SAAUxtC,EAAKwC,EAAMzX,EAAGC,EAAG08B,EAAOiuB,EAAUC,GAClE,GAAIpzC,GAAQ7lB,OAAOjE,KAAK+O,QAAQquC,UAAYp9C,KAAK+5D,aAAe/5D,KAAK64D,kBAAmB,CACtFvxC,EAAIQ,MAAQ9nB,KAAKkzC,SAAW,QAAU,IAAMlzC,KAAK+O,QAAQquC,SAAW,MAAQp9C,KAAK+O,QAAQsuC,QAEzF,IAAI7W,GAAQ1c,EAAK7hB,MAAM,MACnBstD,EAAY/uB,EAAM9gC,OAClB03C,EAAYn5C,OAAOjE,KAAK+O,QAAQquC,UAAY,EAC5C0V,EAAQxgD,GAAK,EAAIijD,GAAa,EAAInY,CAChB,IAAlB8f,IACFpK,EAAQxgD,GAAK,EAAIijD,IAAc,EAAInY,GAKrC,KAAK,GADDvqC,GAAQyU,EAAIkuC,YAAYhvB,EAAM,IAAI3zB,MAC7BtN,EAAI,EAAOgwD,EAAJhwD,EAAeA,IAAK,CAClC,GAAIsiB,GAAYP,EAAIkuC,YAAYhvB,EAAMjhC,IAAIsN,KAC1CA,GAAQgV,EAAYhV,EAAQgV,EAAYhV,EAE1C,GAAIC,GAAS9S,KAAK+O,QAAQquC,SAAWmY,EACjC/tD,EAAO6K,EAAIQ,EAAQ,EACnBjL,EAAM0K,EAAIQ,EAAS,CACP,QAAZmqD,IACFr1D,GAAO,GAAMw1C,GAEfp9C,KAAK6yD,iBAAmBjrD,IAAIA,EAAIJ,KAAKA,EAAKqL,MAAMA,EAAMC,OAAOA,EAAOggD,MAAMA,GAG5CvsD,SAA1BvG,KAAK+O,QAAQuuC,UAAoD,OAA1Bt9C,KAAK+O,QAAQuuC,UAA+C,SAA1Bt9C,KAAK+O,QAAQuuC,WACxFh2B,EAAIiB,UAAYvoB,KAAK+O,QAAQuuC,SAC7Bh2B,EAAImuC,SAASjuD,EAAMI,EAAKiL,EAAOC,IAIjCwU,EAAIiB,UAAYvoB,KAAK+O,QAAQouC,WAAa,QAC1C71B,EAAIuB,UAAYmmB,GAAS,SACzB1nB,EAAIwB,aAAem0C,GAAY,QAC/B,KAAK,GAAI13D,GAAI,EAAOgwD,EAAJhwD,EAAeA,IAC7B+hB,EAAIyB,SAASyd,EAAMjhC,GAAI8M,EAAGygD,GAC1BA,GAAS1V,IAMf75C,EAAKkQ,UAAU6oD,YAAc,SAASh1C,GACpC,GAAmB/gB,SAAfvG,KAAKgpB,MAAqB,CAC5B1B,EAAIQ,MAAQ9nB,KAAKkzC,SAAW,QAAU,IAAMlzC,KAAK+O,QAAQquC,SAAW,MAAQp9C,KAAK+O,QAAQsuC,QAMzF,KAAK,GAJD7W,GAAQxmC,KAAKgpB,MAAM/gB,MAAM,MACzB6K,GAAU7O,OAAOjE,KAAK+O,QAAQquC,UAAY,GAAK5W,EAAM9gC,OACrDmN,EAAQ,EAEHtN,EAAI,EAAGg8B,EAAOiF,EAAM9gC,OAAY67B,EAAJh8B,EAAUA,IAC7CsN,EAAQ5N,KAAKiI,IAAI2F,EAAOyU,EAAIkuC,YAAYhvB,EAAMjhC,IAAIsN,MAGpD,QAAQA,MAASA,EAAOC,OAAUA,GAGlC,OAAQD,MAAS,EAAGC,OAAU,IAUlCvP,EAAKkQ,UAAUq7C,OAAS,WACtB,MAAmBvoD,UAAfvG,KAAK6S,MACD7S,KAAKqS,EAAIrS,KAAK6S,MAAO7S,KAAKk1D,iBAAoBl1D,KAAKyjD,cAAcpxC,GACjErS,KAAKqS,EAAIrS,KAAK6S,MAAO7S,KAAKk1D,gBAAoBl1D,KAAK0jD,kBAAkBrxC,GACrErS,KAAKsS,EAAItS,KAAK8S,OAAO9S,KAAKk1D,iBAAoBl1D,KAAKyjD,cAAcnxC,GACjEtS,KAAKsS,EAAItS,KAAK8S,OAAO9S,KAAKk1D,gBAAoBl1D,KAAK0jD,kBAAkBpxC,GAGpE,GAQX/O,EAAKkQ,UAAU0pD,OAAS,WACtB,MAAQn9D,MAAKqS,GAAKrS,KAAKyjD,cAAcpxC,GAC7BrS,KAAKqS,EAAIrS,KAAK0jD,kBAAkBrxC,GAChCrS,KAAKsS,GAAKtS,KAAKyjD,cAAcnxC,GAC7BtS,KAAKsS,EAAItS,KAAK0jD,kBAAkBpxC,GAW1C/O,EAAKkQ,UAAUo7C,eAAiB,SAASrxC,EAAMimC,EAAcC,GAC3D1jD,KAAKk1D,gBAAkB,EAAI13C,EAC3Bxd,KAAK+5D,aAAev8C,EACpBxd,KAAKyjD,cAAgBA,EACrBzjD,KAAK0jD,kBAAoBA,GAS3BngD,EAAKkQ,UAAU+vB,SAAW,SAAShmB,GACjCxd,KAAKk1D,gBAAkB,EAAI13C,EAC3Bxd,KAAK+5D,aAAev8C,GAQtBja,EAAKkQ,UAAU2pD,cAAgB,WAC7Bp9D,KAAKs5D,GAAK,EACVt5D,KAAKu5D,GAAK,GASZh2D,EAAKkQ,UAAU4pD,eAAiB,SAASC,GACvC,GAAIC,GAAev9D,KAAKs5D,GAAKt5D,KAAKs5D,GAAKgE,CAEvCt9D,MAAKs5D,GAAKr0D,KAAKirB,KAAKqtC,EAAav9D,KAAK+O,QAAQ+tC,MAC9CygB,EAAev9D,KAAKu5D,GAAKv5D,KAAKu5D,GAAK+D,EAEnCt9D,KAAKu5D,GAAKt0D,KAAKirB,KAAKqtC,EAAav9D,KAAK+O,QAAQ+tC,OAGhDj9C,EAAOD,QAAU2D,GAKb,SAAS1D,GAWb,QAAS2D,GAAMsW,EAAWzH,EAAGC,EAAGwX,EAAMtc,GAElCxN,KAAK8Z,UADHA,EACeA,EAGAjI,SAASqjB,KAId3uB,SAAViH,IACe,gBAAN6E,IACT7E,EAAQ6E,EACRA,EAAI9L,QACqB,gBAATujB,IAChBtc,EAAQsc,EACRA,EAAOvjB,QAGPiH,GACE2vC,UAAW,QACXC,SAAU,GACVC,SAAU,UACVxyC,OACEkB,OAAQ,OACRD,WAAY,aAMpB9L,KAAKqS,EAAI,EACTrS,KAAKsS,EAAI,EACTtS,KAAKukB,QAAU,EAELhe,SAAN8L,GAAyB9L,SAAN+L,GACrBtS,KAAK4sD,YAAYv6C,EAAGC,GAET/L,SAATujB,GACF9pB,KAAK6sD,QAAQ/iC,GAIf9pB,KAAK6f,MAAQhO,SAASM,cAAc,MACpC,IAAIqrD,GAAYx9D,KAAK6f,MAAMrS,KAC3BgwD,GAAUr5C,SAAW,WACrBq5C,EAAU1lC,WAAa,SACvB0lC,EAAUzxD,OAAS,aAAeyB,EAAM3C,MAAMkB,OAC9CyxD,EAAU3yD,MAAQ2C,EAAM2vC,UACxBqgB,EAAUpgB,SAAW5vC,EAAM4vC,SAAW,KACtCogB,EAAUC,WAAajwD,EAAM6vC,SAC7BmgB,EAAUj5C,QAAUvkB,KAAKukB,QAAU,KACnCi5C,EAAUt9C,gBAAkB1S,EAAM3C,MAAMiB,WACxC0xD,EAAUjtC,aAAe,MACzBitC,EAAUnrC,gBAAkB,MAC5BmrC,EAAUE,mBAAqB,MAC/BF,EAAUhtC,UAAY,wCACtBgtC,EAAUG,WAAa,SACvB39D,KAAK8Z,UAAU/H,YAAY/R,KAAK6f,OAOlCrc,EAAMiQ,UAAUm5C,YAAc,SAASv6C,EAAGC,GACxCtS,KAAKqS,EAAIgZ,SAAShZ,GAClBrS,KAAKsS,EAAI+Y,SAAS/Y,IAOpB9O,EAAMiQ,UAAUo5C,QAAU,SAAS18B,GAC7BA,YAAmByc,UACrB5sC,KAAK6f,MAAM2E,UAAY,GACvBxkB,KAAK6f,MAAM9N,YAAYoe,IAGvBnwB,KAAK6f,MAAM2E,UAAY2L,GAQ3B3sB,EAAMiQ,UAAUk0B,KAAO,SAAUA,GAK/B,GAJaphC,SAATohC,IACFA,GAAO,GAGLA,EAAM,CACR,GAAI70B,GAAS9S,KAAK6f,MAAMuF,aACpBvS,EAAS7S,KAAK6f,MAAME,YACpBgV,EAAY/0B,KAAK6f,MAAM/V,WAAWsb,aAClCq2B,EAAWz7C,KAAK6f,MAAM/V,WAAWiW,YAEjCnY,EAAO5H,KAAKsS,EAAIQ,CAChBlL,GAAMkL,EAAS9S,KAAKukB,QAAUwQ,IAChCntB,EAAMmtB,EAAYjiB,EAAS9S,KAAKukB,SAE9B3c,EAAM5H,KAAKukB,UACb3c,EAAM5H,KAAKukB,QAGb,IAAI/c,GAAOxH,KAAKqS,CACZ7K,GAAOqL,EAAQ7S,KAAKukB,QAAUk3B,IAChCj0C,EAAOi0C,EAAW5oC,EAAQ7S,KAAKukB,SAE7B/c,EAAOxH,KAAKukB,UACd/c,EAAOxH,KAAKukB,SAGdvkB,KAAK6f,MAAMrS,MAAMhG,KAAOA,EAAO,KAC/BxH,KAAK6f,MAAMrS,MAAM5F,IAAMA,EAAM,KAC7B5H,KAAK6f,MAAMrS,MAAMsqB,WAAa,cAG9B93B,MAAK0nC,QAOTlkC,EAAMiQ,UAAUi0B,KAAO,WACrB1nC,KAAK6f,MAAMrS,MAAMsqB,WAAa,UAGhCj4B,EAAOD,QAAU4D,GAKb,SAAS3D,EAAQD,GAarB,QAASg+D,GAAU5qD,GAEjB,MADAqd,GAAMrd,EACC6qD,IAoCT,QAASp7B,KACPp6B,EAAQ,EACR5H,EAAI4vB,EAAI1K,OAAO,GAQjB,QAASiD,KACPvgB,IACA5H,EAAI4vB,EAAI1K,OAAOtd,GAOjB,QAASy1D,KACP,MAAOztC,GAAI1K,OAAOtd,EAAQ,GAS5B,QAAS01D,GAAet9D,GACtB,MAAOu9D,GAAkB1vD,KAAK7N,GAShC,QAASw9D,GAAO34D,EAAGa,GAKjB,GAJKb,IACHA,MAGEa,EACF,IAAK,GAAIqQ,KAAQrQ,GACXA,EAAEN,eAAe2Q,KACnBlR,EAAEkR,GAAQrQ,EAAEqQ,GAIlB,OAAOlR,GAeT,QAAS6S,GAASmL,EAAK8nB,EAAMhkC,GAG3B,IAFA,GAAIuG,GAAOy9B,EAAKnjC,MAAM,KAClBi2D,EAAI56C,EACD3V,EAAKjI,QAAQ,CAClB,GAAIkD,GAAM+E,EAAKiE,OACXjE,GAAKjI,QAEFw4D,EAAEt1D,KACLs1D,EAAEt1D,OAEJs1D,EAAIA,EAAEt1D,IAINs1D,EAAEt1D,GAAOxB,GAWf,QAAS+2D,GAAQ3sC,EAAO6zB,GAOtB,IANA,GAAI9/C,GAAGC,EACH40B,EAAU,KAGVgkC,GAAU5sC,GACV9xB,EAAO8xB,EACJ9xB,EAAKolC,QACVs5B,EAAOl2D,KAAKxI,EAAKolC,QACjBplC,EAAOA,EAAKolC,MAId,IAAIplC,EAAKm9C,MACP,IAAKt3C,EAAI,EAAGC,EAAM9F,EAAKm9C,MAAMn3C,OAAYF,EAAJD,EAASA,IAC5C,GAAI8/C,EAAKhlD,KAAOX,EAAKm9C,MAAMt3C,GAAGlF,GAAI,CAChC+5B,EAAU16B,EAAKm9C,MAAMt3C,EACrB,OAiBN,IAZK60B,IAEHA,GACE/5B,GAAIglD,EAAKhlD,IAEPmxB,EAAM6zB,OAERjrB,EAAQikC,KAAOJ,EAAM7jC,EAAQikC,KAAM7sC,EAAM6zB,QAKxC9/C,EAAI64D,EAAO14D,OAAS,EAAGH,GAAK,EAAGA,IAAK,CACvC,GAAIoH,GAAIyxD,EAAO74D,EAEVoH,GAAEkwC,QACLlwC,EAAEkwC,UAE4B,IAA5BlwC,EAAEkwC,MAAMn2C,QAAQ0zB,IAClBztB,EAAEkwC,MAAM30C,KAAKkyB,GAKbirB,EAAKgZ,OACPjkC,EAAQikC,KAAOJ,EAAM7jC,EAAQikC,KAAMhZ,EAAKgZ,OAS5C,QAASC,GAAQ9sC,EAAOi7B,GAKtB,GAJKj7B,EAAMksB,QACTlsB,EAAMksB,UAERlsB,EAAMksB,MAAMx1C,KAAKukD,GACbj7B,EAAMi7B,KAAM,CACd,GAAI4R,GAAOJ,KAAUzsC,EAAMi7B,KAC3BA,GAAK4R,KAAOJ,EAAMI,EAAM5R,EAAK4R,OAajC,QAASE,GAAW/sC,EAAO7H,EAAMC,EAAI/iB,EAAMw3D,GACzC,GAAI5R,IACF9iC,KAAMA,EACNC,GAAIA,EACJ/iB,KAAMA,EAQR,OALI2qB,GAAMi7B,OACRA,EAAK4R,KAAOJ,KAAUzsC,EAAMi7B,OAE9BA,EAAK4R,KAAOJ,EAAMxR,EAAK4R,SAAYA,GAE5B5R,EAOT,QAAS+R,KAKP,IAJAC,EAAYC,EAAUC,KACtBC,EAAQ,GAGI,KAALn+D,GAAiB,KAALA,GAAkB,MAALA,GAAkB,MAALA,GAC3CmoB,GAGF,GAAG,CACD,GAAIi2C,IAAY,CAGhB,IAAS,KAALp+D,EAAU,CAGZ,IADA,GAAI8E,GAAI8C,EAAQ,EACQ,KAAjBgoB,EAAI1K,OAAOpgB,IAA8B,KAAjB8qB,EAAI1K,OAAOpgB,IACxCA,GAEF,IAAqB,MAAjB8qB,EAAI1K,OAAOpgB,IAA+B,IAAjB8qB,EAAI1K,OAAOpgB,GAAU,CAEhD,KAAY,IAAL9E,GAAgB,MAALA,GAChBmoB,GAEFi2C,IAAY,GAGhB,GAAS,KAALp+D,GAA6B,KAAjBq9D,IAAsB,CAEpC,KAAY,IAALr9D,GAAgB,MAALA,GAChBmoB,GAEFi2C,IAAY,EAEd,GAAS,KAALp+D,GAA6B,KAAjBq9D,IAAsB,CAEpC,KAAY,IAALr9D,GAAS,CACd,GAAS,KAALA,GAA6B,KAAjBq9D,IAAsB,CAEpCl1C,IACAA,GACA,OAGAA,IAGJi2C,GAAY,EAId,KAAY,KAALp+D,GAAiB,KAALA,GAAkB,MAALA,GAAkB,MAALA,GAC3CmoB,UAGGi2C,EAGP,IAAS,IAALp+D,EAGF,YADAg+D,EAAYC,EAAUI,UAKxB,IAAIC,GAAKt+D,EAAIq9D,GACb,IAAIkB,EAAWD,GAKb,MAJAN,GAAYC,EAAUI,UACtBF,EAAQG,EACRn2C,QACAA,IAKF,IAAIo2C,EAAWv+D,GAIb,MAHAg+D,GAAYC,EAAUI,UACtBF,EAAQn+D,MACRmoB,IAMF,IAAIm1C,EAAet9D,IAAW,KAALA,EAAU,CAIjC,IAHAm+D,GAASn+D,EACTmoB,IAEOm1C,EAAet9D,IACpBm+D,GAASn+D,EACTmoB,GAYF,OAVa,SAATg2C,EACFA,GAAQ,EAEQ,QAATA,EACPA,GAAQ,EAEAn6D,MAAMR,OAAO26D,MACrBA,EAAQ36D,OAAO26D,SAEjBH,EAAYC,EAAUO,YAKxB,GAAS,KAALx+D,EAAU,CAEZ,IADAmoB,IACY,IAALnoB,IAAiB,KAALA,GAAkB,KAALA,GAA6B,KAAjBq9D,MAC1Cc,GAASn+D,EACA,KAALA,GACFmoB,IAEFA,GAEF,IAAS,KAALnoB,EACF,KAAMy+D,GAAe,2BAIvB,OAFAt2C,UACA61C,EAAYC,EAAUO,YAMxB,IADAR,EAAYC,EAAUS,QACV,IAAL1+D,GACLm+D,GAASn+D,EACTmoB,GAEF,MAAM,IAAI7O,aAAY,yBAA2BqlD,EAAKR,EAAO,IAAM,KAOrE,QAASf,KACP,GAAIrsC,KAwBJ,IAtBAiR,IACA+7B,IAGa,UAATI,IACFptC,EAAM6tC,QAAS,EACfb,MAIW,SAATI,GAA6B,WAATA,KACtBptC,EAAM3qB,KAAO+3D,EACbJ,KAIEC,GAAaC,EAAUO,aACzBztC,EAAMnxB,GAAKu+D,EACXJ,KAIW,KAATI,EACF,KAAMM,GAAe,2BAQvB,IANAV,IAGAc,EAAgB9tC,GAGH,KAATotC,EACF,KAAMM,GAAe,2BAKvB,IAHAV,IAGc,KAAVI,EACF,KAAMM,GAAe,uBASvB,OAPAV,WAGOhtC,GAAM6zB,WACN7zB,GAAMi7B,WACNj7B,GAAMA,MAENA,EAOT,QAAS8tC,GAAiB9tC,GACxB,KAAiB,KAAVotC,GAAyB,KAATA,GACrBW,EAAe/tC,GACF,KAATotC,GACFJ,IAWN,QAASe,GAAe/tC,GAEtB,GAAIguC,GAAWC,EAAcjuC,EAC7B,IAAIguC,EAIF,WAFAE,GAAUluC,EAAOguC,EAMnB,IAAInB,GAAOsB,EAAwBnuC,EACnC,KAAI6sC,EAAJ,CAKA,GAAII,GAAaC,EAAUO,WACzB,KAAMC,GAAe,sBAEvB,IAAI7+D,GAAKu+D,CAGT,IAFAJ,IAEa,KAATI,EAAc,CAGhB,GADAJ,IACIC,GAAaC,EAAUO,WACzB,KAAMC,GAAe,sBAEvB1tC,GAAMnxB,GAAMu+D,EACZJ,QAIAoB,GAAmBpuC,EAAOnxB,IAS9B,QAASo/D,GAAejuC,GACtB,GAAIguC,GAAW,IAgBf,IAba,YAATZ,IACFY,KACAA,EAAS34D,KAAO,WAChB23D,IAGIC,GAAaC,EAAUO,aACzBO,EAASn/D,GAAKu+D,EACdJ,MAKS,KAATI,EAAc,CAehB,GAdAJ,IAEKgB,IACHA,MAEFA,EAAS16B,OAAStT,EAClBguC,EAASna,KAAO7zB,EAAM6zB,KACtBma,EAAS/S,KAAOj7B,EAAMi7B,KACtB+S,EAAShuC,MAAQA,EAAMA,MAGvB8tC,EAAgBE,GAGH,KAATZ,EACF,KAAMM,GAAe,2BAEvBV,WAGOgB,GAASna,WACTma,GAAS/S,WACT+S,GAAShuC,YACTguC,GAAS16B,OAGXtT,EAAMquC,YACTruC,EAAMquC,cAERruC,EAAMquC,UAAU33D,KAAKs3D,GAGvB,MAAOA,GAYT,QAASG,GAAyBnuC,GAEhC,MAAa,QAATotC,GACFJ,IAGAhtC,EAAM6zB,KAAOya,IACN,QAES,QAATlB,GACPJ,IAGAhtC,EAAMi7B,KAAOqT,IACN,QAES,SAATlB,GACPJ,IAGAhtC,EAAMA,MAAQsuC,IACP,SAGF,KAQT,QAASF,GAAmBpuC,EAAOnxB,GAEjC,GAAIglD,IACFhlD,GAAIA,GAEFg+D,EAAOyB,GACPzB,KACFhZ,EAAKgZ,KAAOA,GAEdF,EAAQ3sC,EAAO6zB,GAGfqa,EAAUluC,EAAOnxB,GAQnB,QAASq/D,GAAUluC,EAAO7H,GACxB,KAAgB,MAATi1C,GAA0B,MAATA,GAAe,CACrC,GAAIh1C,GACA/iB,EAAO+3D,CACXJ,IAEA,IAAIgB,GAAWC,EAAcjuC,EAC7B,IAAIguC,EACF51C,EAAK41C,MAEF,CACH,GAAIf,GAAaC,EAAUO,WACzB,KAAMC,GAAe,kCAEvBt1C,GAAKg1C,EACLT,EAAQ3sC,GACNnxB,GAAIupB,IAEN40C,IAIF,GAAIH,GAAOyB,IAGPrT,EAAO8R,EAAW/sC,EAAO7H,EAAMC,EAAI/iB,EAAMw3D,EAC7CC,GAAQ9sC,EAAOi7B,GAEf9iC,EAAOC,GASX,QAASk2C,KAGP,IAFA,GAAIzB,GAAO,KAEK,KAATO,GAAc,CAGnB,IAFAJ,IACAH,KACiB,KAAVO,GAAyB,KAATA,GAAc,CACnC,GAAIH,GAAaC,EAAUO,WACzB,KAAMC,GAAe,0BAEvB,IAAI1oD,GAAOooD,CAGX,IADAJ,IACa,KAATI,EACF,KAAMM,GAAe,wBAIvB,IAFAV,IAEIC,GAAaC,EAAUO,WACzB,KAAMC,GAAe,2BAEvB,IAAI93D,GAAQw3D,CACZzmD,GAASkmD,EAAM7nD,EAAMpP,GAErBo3D,IACY,KAARI,GACFJ,IAIJ,GAAa,KAATI,EACF,KAAMM,GAAe,qBAEvBV,KAGF,MAAOH,GAQT,QAASa,GAAea,GACtB,MAAO,IAAIhmD,aAAYgmD,EAAU,UAAYX,EAAKR,EAAO,IAAM,WAAav2D,EAAQ,KAStF,QAAS+2D,GAAMt1C,EAAMk2C,GACnB,MAAQl2C,GAAKpkB,QAAUs6D,EAAal2C,EAAQA,EAAK9e,OAAO,EAAG,IAAM,MASnE,QAASi1D,GAASC,EAAQC,EAAQ1mD,GAC5BzT,MAAMC,QAAQi6D,GAChBA,EAAO33D,QAAQ,SAAU63D,GACnBp6D,MAAMC,QAAQk6D,GAChBA,EAAO53D,QAAQ,SAAU83D,GACvB5mD,EAAG2mD,EAAOC,KAIZ5mD,EAAG2mD,EAAOD,KAKVn6D,MAAMC,QAAQk6D,GAChBA,EAAO53D,QAAQ,SAAU83D,GACvB5mD,EAAGymD,EAAQG,KAIb5mD,EAAGymD,EAAQC,GAWjB,QAASzZ,GAAY1zC,GAEnB,GAAIyzC,GAAUmX,EAAS5qD,GACnBstD,GACFzjB,SACAa,SACA3uC,WAmBF,IAfI03C,EAAQ5J,OACV4J,EAAQ5J,MAAMt0C,QAAQ,SAAUg4D,GAC9B,GAAIC,IACFngE,GAAIkgE,EAAQlgE,GACZ2oB,MAAO7kB,OAAOo8D,EAAQv3C,OAASu3C,EAAQlgE,IAEzC49D,GAAMuC,EAAWD,EAAQlC,MACrBmC,EAAUtjB,QACZsjB,EAAUvjB,MAAQ,SAEpBqjB,EAAUzjB,MAAM30C,KAAKs4D,KAKrB/Z,EAAQ/I,MAAO,CAMjB,GAAI+iB,GAAc,SAAUC,GAC1B,GAAIC,IACFh3C,KAAM+2C,EAAQ/2C,KACdC,GAAI82C,EAAQ92C,GAId,OAFAq0C,GAAM0C,EAAWD,EAAQrC,MACzBsC,EAAUnzD,MAAyB,MAAhBkzD,EAAQ75D,KAAgB,QAAU,OAC9C85D,EAGTla,GAAQ/I,MAAMn1C,QAAQ,SAAUm4D,GAC9B,GAAI/2C,GAAMC,CAERD,GADE+2C,EAAQ/2C,eAAgBrjB,QACnBo6D,EAAQ/2C,KAAKkzB,OAIlBx8C,GAAIqgE,EAAQ/2C,MAKdC,EADE82C,EAAQ92C,aAActjB,QACnBo6D,EAAQ92C,GAAGizB,OAIdx8C,GAAIqgE,EAAQ92C,IAIZ82C,EAAQ/2C,eAAgBrjB,SAAUo6D,EAAQ/2C,KAAK+zB,OACjDgjB,EAAQ/2C,KAAK+zB,MAAMn1C,QAAQ,SAAUq4D,GACnC,GAAID,GAAYF,EAAYG,EAC5BN,GAAU5iB,MAAMx1C,KAAKy4D,KAIzBV,EAASt2C,EAAMC,EAAI,SAAUD,EAAMC,GACjC,GAAIg3C,GAAUrC,EAAW+B,EAAW32C,EAAKtpB,GAAIupB,EAAGvpB,GAAIqgE,EAAQ75D,KAAM65D,EAAQrC,MACtEsC,EAAYF,EAAYG,EAC5BN,GAAU5iB,MAAMx1C,KAAKy4D,KAGnBD,EAAQ92C,aAActjB,SAAUo6D,EAAQ92C,GAAG8zB,OAC7CgjB,EAAQ92C,GAAG8zB,MAAMn1C,QAAQ,SAAUq4D,GACjC,GAAID,GAAYF,EAAYG,EAC5BN,GAAU5iB,MAAMx1C,KAAKy4D,OAW7B,MAJIla,GAAQ4X,OACViC,EAAUvxD,QAAU03C,EAAQ4X,MAGvBiC,EAnyBT,GAAI5B,IACFC,KAAO,EACPG,UAAY,EACZG,WAAY,EACZE,QAAU,GAIRH,GACF6B,KAAK,EACLC,KAAK,EACLC,KAAK,EACLC,KAAK,EACLC,KAAK,EACLC,KAAK,EACLC,KAAK,EAELC,MAAM,EACNC,MAAM,GAGJhxC,EAAM,GACNhoB,EAAQ,EACR5H,EAAI,GACJm+D,EAAQ,GACRH,EAAYC,EAAUC,KAmCtBX,EAAoB,iBA2uBxBp+D,GAAQg+D,SAAWA,EACnBh+D,EAAQ8mD,WAAaA,GAKjB,SAAS7mD,EAAQD,GAGrB,QAASinD,GAAWya,EAAWvyD,GAC7B,GAAI2uC,MACAb,IACJ78C,MAAK+O,SACH2uC,OACEO,cAAc,GAEhBpB,OACE0kB,eAAe,EACf32D,YAAY,IAIArE,SAAZwI,IACF/O,KAAK+O,QAAQ8tC,MAAqB,cAAI9tC,EAAQwyD,eAAgB,EAC9DvhE,KAAK+O,QAAQ8tC,MAAkB,WAAO9tC,EAAQnE,YAAgB,EAC9D5K,KAAK+O,QAAQ2uC,MAAoB,aAAK3uC,EAAQkvC,cAAgB,EAKhE,KAAK,GAFDujB,GAASF,EAAU5jB,MACnB+jB,EAASH,EAAUzkB,MACdt3C,EAAI,EAAGA,EAAIi8D,EAAO97D,OAAQH,IAAK,CACtC,GAAIknD,MACAiV,EAAQF,EAAOj8D,EACnBknD,GAAS,GAAIiV,EAAMrhE,GACnBosD,EAAW,KAAIiV,EAAMC,OACrBlV,EAAS,GAAIiV,EAAM/3D,OACnB8iD,EAAiB,WAAIiV,EAAM1mB,WAG3ByR,EAAY,MAAIiV,EAAM72D,MACtB4hD,EAAmB,aAAsBlmD,SAAlBkmD,EAAY,OAAkB,EAAQzsD,KAAK+O,QAAQkvC,aAC1EP,EAAMx1C,KAAKukD,GAGb,IAAK,GAAIlnD,GAAI,EAAGA,EAAIk8D,EAAO/7D,OAAQH,IAAK,CACtC,GAAI8/C,MACAuc,EAAQH,EAAOl8D,EACnB8/C,GAAS,GAAIuc,EAAMvhE,GACnBglD,EAAiB,WAAIuc,EAAM5mB,WAC3BqK,EAAQ,EAAIuc,EAAMvvD,EAClBgzC,EAAQ,EAAIuc,EAAMtvD,EAClB+yC,EAAY,MAAIuc,EAAM54C,MAEpBq8B,EAAY,MADuB,GAAjCrlD,KAAK+O,QAAQ8tC,MAAMjyC,WACLg3D,EAAM/2D,MAGUtE,SAAhBq7D,EAAM/2D,OAAuBiB,WAAW81D,EAAM/2D,MAAOkB,OAAO61D,EAAM/2D,OAAStE,OAE7F8+C,EAAa,OAAIuc,EAAMjvD,KACvB0yC,EAAqB,eAAIrlD,KAAK+O,QAAQ8tC,MAAM0kB,cAC5Clc,EAAqB,eAAIrlD,KAAK+O,QAAQ8tC,MAAM0kB,cAC5C1kB,EAAM30C,KAAKm9C,GAGb,OAAQxI,MAAMA,EAAOa,MAAMA,GAG7B99C,EAAQinD,WAAaA,GAIjB,SAAShnD,EAAQD,EAASM,GAI9BL,EAAOD,QAA6B,mBAAX6H,SAA2BA,OAAe,QAAKvH,EAAoB,KAKxF,SAASL,EAAQD,EAASM,GAK5BL,EAAOD,QADa,mBAAX6H,QACQA,OAAe,QAAKvH,EAAoB,IAGxC,WACf,KAAM0D,OAAM,+DAOZ,SAAS/D,EAAQD,EAASM,GAmB9B,QAASu2B,MAjBT,GAAInZ,GAAUpd,EAAoB,IAC9BolC,EAASplC,EAAoB,IAC7BS,EAAOT,EAAoB,GAK3B6kD,GAJU7kD,EAAoB,GACnBA,EAAoB,GACvBA,EAAoB,IAClBA,EAAoB,IAClBA,EAAoB,KAChCyB,EAAWzB,EAAoB,GAYnCod,GAAQmZ,EAAKhjB,WASbgjB,EAAKhjB,UAAUwhB,QAAU,SAAUnb,GACjC9Z,KAAKswB,OAELtwB,KAAKswB,IAAI5wB,KAAuBmS,SAASM,cAAc,OACvDnS,KAAKswB,IAAIxkB,WAAuB+F,SAASM,cAAc,OACvDnS,KAAKswB,IAAIyU,mBAAuBlzB,SAASM,cAAc,OACvDnS,KAAKswB,IAAI4X,qBAAuBr2B,SAASM,cAAc,OACvDnS,KAAKswB,IAAI6H,gBAAuBtmB,SAASM,cAAc,OACvDnS,KAAKswB,IAAIuxC,cAAuBhwD,SAASM,cAAc,OACvDnS,KAAKswB,IAAIwxC,eAAuBjwD,SAASM,cAAc,OACvDnS,KAAKswB,IAAI5D,OAAuB7a,SAASM,cAAc,OACvDnS,KAAKswB,IAAI9oB,KAAuBqK,SAASM,cAAc,OACvDnS,KAAKswB,IAAI1I,MAAuB/V,SAASM,cAAc,OACvDnS,KAAKswB,IAAI1oB,IAAuBiK,SAASM,cAAc,OACvDnS,KAAKswB,IAAIzM,OAAuBhS,SAASM,cAAc,OACvDnS,KAAKswB,IAAIyxC,UAAuBlwD,SAASM,cAAc,OACvDnS,KAAKswB,IAAI0xC,aAAuBnwD,SAASM,cAAc,OACvDnS,KAAKswB,IAAI2xC,cAAuBpwD,SAASM,cAAc,OACvDnS,KAAKswB,IAAI4xC,iBAAuBrwD,SAASM,cAAc,OACvDnS,KAAKswB,IAAI6xC,eAAuBtwD,SAASM,cAAc,OACvDnS,KAAKswB,IAAI8xC,kBAAuBvwD,SAASM,cAAc,OAEvDnS,KAAKswB,IAAI5wB,KAAKqI,UAA4B,oBAC1C/H,KAAKswB,IAAIxkB,WAAW/D,UAAsB,sBAC1C/H,KAAKswB,IAAIyU,mBAAmBh9B,UAAc,+BAC1C/H,KAAKswB,IAAI4X,qBAAqBngC,UAAY,iCAC1C/H,KAAKswB,IAAI6H,gBAAgBpwB,UAAiB,kBAC1C/H,KAAKswB,IAAIuxC,cAAc95D,UAAmB,gBAC1C/H,KAAKswB,IAAIwxC,eAAe/5D,UAAkB,iBAC1C/H,KAAKswB,IAAI1oB,IAAIG,UAA6B,eAC1C/H,KAAKswB,IAAIzM,OAAO9b,UAA0B,kBAC1C/H,KAAKswB,IAAI9oB,KAAKO,UAA4B,UAC1C/H,KAAKswB,IAAI5D,OAAO3kB,UAA0B,UAC1C/H,KAAKswB,IAAI1I,MAAM7f,UAA2B,UAC1C/H,KAAKswB,IAAIyxC,UAAUh6D,UAAuB,aAC1C/H,KAAKswB,IAAI0xC,aAAaj6D,UAAoB,gBAC1C/H,KAAKswB,IAAI2xC,cAAcl6D,UAAmB,aAC1C/H,KAAKswB,IAAI4xC,iBAAiBn6D,UAAgB,gBAC1C/H,KAAKswB,IAAI6xC,eAAep6D,UAAkB,aAC1C/H,KAAKswB,IAAI8xC,kBAAkBr6D,UAAe,gBAE1C/H,KAAKswB,IAAI5wB,KAAKqS,YAAY/R,KAAKswB,IAAIxkB,YACnC9L,KAAKswB,IAAI5wB,KAAKqS,YAAY/R,KAAKswB,IAAIyU,oBACnC/kC,KAAKswB,IAAI5wB,KAAKqS,YAAY/R,KAAKswB,IAAI4X,sBACnCloC,KAAKswB,IAAI5wB,KAAKqS,YAAY/R,KAAKswB,IAAI6H,iBACnCn4B,KAAKswB,IAAI5wB,KAAKqS,YAAY/R,KAAKswB,IAAIuxC,eACnC7hE,KAAKswB,IAAI5wB,KAAKqS,YAAY/R,KAAKswB,IAAIwxC,gBACnC9hE,KAAKswB,IAAI5wB,KAAKqS,YAAY/R,KAAKswB,IAAI1oB,KACnC5H,KAAKswB,IAAI5wB,KAAKqS,YAAY/R,KAAKswB,IAAIzM,QAEnC7jB,KAAKswB,IAAI6H,gBAAgBpmB,YAAY/R,KAAKswB,IAAI5D,QAC9C1sB,KAAKswB,IAAIuxC,cAAc9vD,YAAY/R,KAAKswB,IAAI9oB,MAC5CxH,KAAKswB,IAAIwxC,eAAe/vD,YAAY/R,KAAKswB,IAAI1I,OAE7C5nB,KAAKswB,IAAI6H,gBAAgBpmB,YAAY/R,KAAKswB,IAAIyxC,WAC9C/hE,KAAKswB,IAAI6H,gBAAgBpmB,YAAY/R,KAAKswB,IAAI0xC,cAC9ChiE,KAAKswB,IAAIuxC,cAAc9vD,YAAY/R,KAAKswB,IAAI2xC,eAC5CjiE,KAAKswB,IAAIuxC,cAAc9vD,YAAY/R,KAAKswB,IAAI4xC,kBAC5CliE,KAAKswB,IAAIwxC,eAAe/vD,YAAY/R,KAAKswB,IAAI6xC,gBAC7CniE,KAAKswB,IAAIwxC,eAAe/vD,YAAY/R,KAAKswB,IAAI8xC,mBAE7CpiE,KAAK6T,GAAG,cAAe7T,KAAKgiB,OAAOqT,KAAKr1B,OACxCA,KAAK6T,GAAG,QAAS7T,KAAK4+B,SAASvJ,KAAKr1B,OACpCA,KAAK6T,GAAG,QAAS7T,KAAK6+B,SAASxJ,KAAKr1B,OACpCA,KAAK6T,GAAG,YAAa7T,KAAKu+B,aAAalJ,KAAKr1B,OAC5CA,KAAK6T,GAAG,OAAQ7T,KAAKw+B,QAAQnJ,KAAKr1B,MAElC,IAAIyU,GAAKzU,IACTA,MAAK6T,GAAG,SAAU,SAAU65C,GACtBA,GAAkC,GAApBA,EAAWh6C,MAEtBe,EAAG4tD,eACN5tD,EAAG4tD,aAAexoD,WAAW,WAC3BpF,EAAG4tD,aAAe,KAClB5tD,EAAGuN,UACF,IAKLvN,EAAGuN,WAMPhiB,KAAK8D,OAASwhC,EAAOtlC,KAAKswB,IAAI5wB,MAC5B6J,gBAAgB,IAElBvJ,KAAKsiE,YAEL,IAAIC,IACF,QAAS,QACT,MAAO,YAAa,OACpB,YAAa,OAAQ,UACrB,aAAc,iBAkChB,IAhCAA,EAAOh6D,QAAQ,SAAUiB,GACvB,GAAIR,GAAW,WACb,GAAIwQ,IAAQhQ,GAAO8K,OAAOtO,MAAMyN,UAAU6pB,MAAM/8B,KAAKkF,UAAW,GAC5DgP,GAAGq0C,YACLr0C,EAAG2Z,KAAK9V,MAAM7D,EAAI+E,GAGtB/E,GAAG3Q,OAAO+P,GAAGrK,EAAOR,GACpByL,EAAG6tD,UAAU94D,GAASR,IAIxBhJ,KAAK+F,OACHrG,QACAoM,cACAqsB,mBACA0pC,iBACAC,kBACAp1C,UACAllB,QACAogB,SACAhgB,OACAic,UACA9X,UACAs7B,UAAW,EACXm7B,aAAc,GAEhBxiE,KAAKq+B,SAELr+B,KAAKyiE,YAAc,GAGd3oD,EAAW,KAAM,IAAIlW,OAAM,wBAChCkW,GAAU/H,YAAY/R,KAAKswB,IAAI5wB,OA4BjC+2B,EAAKhjB,UAAUD,WAAa,SAAUzE,GACpC,GAAIA,EAAS,CAEX,GAAIP,IAAU,QAAS,SAAU,YAAa,YAAa,aAAc,QAAS,MAAO,cAAe,aAAc,iBAAkB,cACxI7N,GAAKmF,gBAAgB0I,EAAQxO,KAAK+O,QAASA,GAEvC,eAAiB/O,MAAK+O,SACxBpN,EAASo2B,qBAAqB/3B,KAAKk1B,KAAMl1B,KAAK+O,QAAQumB,aAGpD,cAAgBvmB,KACdA,EAAQ24C,WACV1nD,KAAK2nD,UAAY,GAAI5C,GAAU/kD,KAAKswB,IAAI5wB,MAGpCM,KAAK2nD,YACP3nD,KAAK2nD,UAAU/zC,gBACR5T,MAAK2nD,YAMlB3nD,KAAK0iE,kBASP,GALA1iE,KAAKgC,WAAWuG,QAAQ,SAAUo6D,GAChCA,EAAUnvD,WAAWzE,KAInBA,GAAWA,EAAQgH,MACrB,KAAM,IAAInS,OAAM,wEAIlB5D,MAAKgiB,UAOPyU,EAAKhjB,UAAUq1C,SAAW,WACxB,OAAQ9oD,KAAK2nD,WAAa3nD,KAAK2nD,UAAU2K,QAM3C77B,EAAKhjB,UAAUG,QAAU,WAEvB5T,KAAKgX,QAGLhX,KAAKgU,MAGLhU,KAAK4iE,kBAGD5iE,KAAKswB,IAAI5wB,KAAKoK,YAChB9J,KAAKswB,IAAI5wB,KAAKoK,WAAW2H,YAAYzR,KAAKswB,IAAI5wB,MAEhDM,KAAKswB,IAAM,KAGPtwB,KAAK2nD,YACP3nD,KAAK2nD,UAAU/zC,gBACR5T,MAAK2nD,UAId,KAAK,GAAIn+C,KAASxJ,MAAKsiE,UACjBtiE,KAAKsiE,UAAUz8D,eAAe2D,UACzBxJ,MAAKsiE,UAAU94D,EAG1BxJ,MAAKsiE,UAAY,KACjBtiE,KAAK8D,OAAS,KAGd9D,KAAKgC,WAAWuG,QAAQ,SAAUo6D,GAChCA,EAAU/uD,YAGZ5T,KAAKk1B,KAAO,MAQduB,EAAKhjB,UAAUgyB,cAAgB,SAAUhL,GACvC,IAAKz6B,KAAKm2B,WACR,KAAM,IAAIvyB,OAAM,yDAGlB5D,MAAKm2B,WAAWsP,cAAchL,IAOhChE,EAAKhjB,UAAUiyB,cAAgB,WAC7B,IAAK1lC,KAAKm2B,WACR,KAAM,IAAIvyB,OAAM,yDAGlB,OAAO5D,MAAKm2B,WAAWuP,iBAQzBjP,EAAKhjB,UAAU29B,gBAAkB,WAC/B,MAAOpxC,MAAKo2B,SAAWp2B,KAAKo2B,QAAQgb,uBAetC3a,EAAKhjB,UAAUuD,MAAQ,SAAS6rD,KAEzBA,GAAQA,EAAK5gE,QAChBjC,KAAKw2B,SAAS,QAIXqsC,GAAQA,EAAKnuC,SAChB10B,KAAKu2B,UAAU,QAIZssC,GAAQA,EAAK9zD,WAChB/O,KAAKgC,WAAWuG,QAAQ,SAAUo6D,GAChCA,EAAUnvD,WAAWmvD,EAAU/tC,kBAGjC50B,KAAKwT,WAAWxT,KAAK40B,kBAazB6B,EAAKhjB,UAAUujB,IAAM,SAASjoB,GAC5B,GAAIinB,GAAQh2B,KAAK62B,eAGjB,IAAoB,OAAhBb,EAAM9lB,OAAgC,OAAd8lB,EAAM7lB,IAAlC,CAIA,GAAI4mB,GAAWhoB,GAA+BxI,SAApBwI,EAAQgoB,QAAyBhoB,EAAQgoB,SAAU,CAC7E/2B,MAAKg2B,MAAMlC,SAASkC,EAAM9lB,MAAO8lB,EAAM7lB,IAAK4mB,KAQ9CN,EAAKhjB,UAAUojB,cAAgB,WAE7B,GAAID,GAAY52B,KAAKq3B,eAGjBnnB,EAAQ0mB,EAAUnrB,IAClB0E,EAAMymB,EAAU1pB,GACpB,IAAa,MAATgD,GAAwB,MAAPC,EAAa,CAChC,GAAI4iB,GAAY5iB,EAAIpJ,UAAYmJ,EAAMnJ,SACtB,IAAZgsB,IAEFA,EAAW,OAEb7iB,EAAQ,GAAI7L,MAAK6L,EAAMnJ,UAAuB,IAAXgsB,GACnC5iB,EAAM,GAAI9L,MAAK8L,EAAIpJ,UAAuB,IAAXgsB,GAGjC,OACE7iB,MAAOA,EACPC,IAAKA,IAuBTsmB,EAAKhjB,UAAUqjB,UAAY,SAAS5mB,EAAOC,EAAKpB,GAC9C,GAAIgoB,GAAWhoB,GAA+BxI,SAApBwI,EAAQgoB,QAAyBhoB,EAAQgoB,SAAU,CAC7E,IAAwB,GAApBtxB,UAAUC,OAAa,CACzB,GAAIswB,GAAQvwB,UAAU,EACtBzF,MAAKg2B,MAAMlC,SAASkC,EAAM9lB,MAAO8lB,EAAM7lB,IAAK4mB,OAG5C/2B,MAAKg2B,MAAMlC,SAAS5jB,EAAOC,EAAK4mB,IAcpCN,EAAKhjB,UAAU2U,OAAS,SAASqS,EAAM1rB,GACrC,GAAIgkB,GAAW/yB,KAAKg2B,MAAM7lB,IAAMnQ,KAAKg2B,MAAM9lB,MACvC9B,EAAIzN,EAAKiG,QAAQ6zB,EAAM,QAAQ1zB,UAE/BmJ,EAAQ9B,EAAI2kB,EAAW,EACvB5iB,EAAM/B,EAAI2kB,EAAW,EACrBgE,EAAWhoB,GAA+BxI,SAApBwI,EAAQgoB,QAAyBhoB,EAAQgoB,SAAU,CAE7E/2B,MAAKg2B,MAAMlC,SAAS5jB,EAAOC,EAAK4mB,IAOlCN,EAAKhjB,UAAUqvD,UAAY,WACzB,GAAI9sC,GAAQh2B,KAAKg2B,MAAM6J,UACvB,QACE3vB,MAAO,GAAI7L,MAAK2xB,EAAM9lB,OACtBC,IAAK,GAAI9L,MAAK2xB,EAAM7lB,OAQxBsmB,EAAKhjB,UAAUuO,OAAS,WACtB,GAAIwiB,IAAU,EACVz1B,EAAU/O,KAAK+O,QACfhJ,EAAQ/F,KAAK+F,MACbuqB,EAAMtwB,KAAKswB,GAEf,IAAKA,EAAL,CAEA3uB,EAASu2B,kBAAkBl4B,KAAKk1B,KAAMl1B,KAAK+O,QAAQumB,aAGxB,OAAvBvmB,EAAQ+lB,aACVn0B,EAAKmH,aAAawoB,EAAI5wB,KAAM,OAC5BiB,EAAKyH,gBAAgBkoB,EAAI5wB,KAAM,YAG/BiB,EAAKyH,gBAAgBkoB,EAAI5wB,KAAM,OAC/BiB,EAAKmH,aAAawoB,EAAI5wB,KAAM,WAI9B4wB,EAAI5wB,KAAK8N,MAAMunB,UAAYp0B,EAAKoJ,OAAOK,OAAO2E,EAAQgmB,UAAW,IACjEzE,EAAI5wB,KAAK8N,MAAMwnB,UAAYr0B,EAAKoJ,OAAOK,OAAO2E,EAAQimB,UAAW,IACjE1E,EAAI5wB,KAAK8N,MAAMqF,MAAQlS,EAAKoJ,OAAOK,OAAO2E,EAAQ8D,MAAO,IAGzD9M,EAAMgG,OAAOvE,MAAU8oB,EAAI6H,gBAAgBxH,YAAcL,EAAI6H,gBAAgBpY,aAAe,EAC5Fha,EAAMgG,OAAO6b,MAAS7hB,EAAMgG,OAAOvE,KACnCzB,EAAMgG,OAAOnE,KAAU0oB,EAAI6H,gBAAgBtH,aAAeP,EAAI6H,gBAAgB/S,cAAgB,EAC9Frf,EAAMgG,OAAO8X,OAAS9d,EAAMgG,OAAOnE,GACnC,IAAIm7D,GAAkBzyC,EAAI5wB,KAAKmxB,aAAeP,EAAI5wB,KAAK0lB,aACnD49C,EAAkB1yC,EAAI5wB,KAAKixB,YAAcL,EAAI5wB,KAAKqgB,WAIb,KAArCuQ,EAAI6H,gBAAgB/S,eACtBrf,EAAMgG,OAAOvE,KAAOzB,EAAMgG,OAAOnE,IACjC7B,EAAMgG,OAAO6b,MAAS7hB,EAAMgG,OAAOvE,MAEP,IAA1B8oB,EAAI5wB,KAAK0lB,eACX49C,EAAkBD,GAKpBh9D,EAAM2mB,OAAO5Z,OAASwd,EAAI5D,OAAOmE,aACjC9qB,EAAMyB,KAAKsL,OAAWwd,EAAI9oB,KAAKqpB,aAC/B9qB,EAAM6hB,MAAM9U,OAAUwd,EAAI1I,MAAMiJ,aAChC9qB,EAAM6B,IAAIkL,OAAYwd,EAAI1oB,IAAIwd,eAAoBrf,EAAMgG,OAAOnE,IAC/D7B,EAAM8d,OAAO/Q,OAASwd,EAAIzM,OAAOuB,eAAiBrf,EAAMgG,OAAO8X,MAM/D,IAAI+M,GAAgB3rB,KAAKiI,IAAInH,EAAMyB,KAAKsL,OAAQ/M,EAAM2mB,OAAO5Z,OAAQ/M,EAAM6hB,MAAM9U,QAC7EmwD,EAAal9D,EAAM6B,IAAIkL,OAAS8d,EAAgB7qB,EAAM8d,OAAO/Q,OAC/DiwD,EAAmBh9D,EAAMgG,OAAOnE,IAAM7B,EAAMgG,OAAO8X,MACrDyM,GAAI5wB,KAAK8N,MAAMsF,OAASnS,EAAKoJ,OAAOK,OAAO2E,EAAQ+D,OAAQmwD,EAAa,MAGxEl9D,EAAMrG,KAAKoT,OAASwd,EAAI5wB,KAAKmxB,aAC7B9qB,EAAM+F,WAAWgH,OAAS/M,EAAMrG,KAAKoT,OAASiwD,CAC9C,IAAIpnC,GAAkB51B,EAAMrG,KAAKoT,OAAS/M,EAAM6B,IAAIkL,OAAS/M,EAAM8d,OAAO/Q,OACxEiwD,CACFh9D,GAAMoyB,gBAAgBrlB,OAAU6oB,EAChC51B,EAAM87D,cAAc/uD,OAAY6oB,EAChC51B,EAAM+7D,eAAehvD,OAAW/M,EAAM87D,cAAc/uD,OAGpD/M,EAAMrG,KAAKmT,MAAQyd,EAAI5wB,KAAKixB,YAC5B5qB,EAAM+F,WAAW+G,MAAQ9M,EAAMrG,KAAKmT,MAAQmwD,EAC5Cj9D,EAAMyB,KAAKqL,MAAQyd,EAAIuxC,cAAc9hD,cAAkBha,EAAMgG,OAAOvE,KACpEzB,EAAM87D,cAAchvD,MAAQ9M,EAAMyB,KAAKqL,MACvC9M,EAAM6hB,MAAM/U,MAAQyd,EAAIwxC,eAAe/hD,cAAgBha,EAAMgG,OAAO6b,MACpE7hB,EAAM+7D,eAAejvD,MAAQ9M,EAAM6hB,MAAM/U,KACzC,IAAIqwD,GAAcn9D,EAAMrG,KAAKmT,MAAQ9M,EAAMyB,KAAKqL,MAAQ9M,EAAM6hB,MAAM/U,MAAQmwD,CAC5Ej9D,GAAM2mB,OAAO7Z,MAAiBqwD,EAC9Bn9D,EAAMoyB,gBAAgBtlB,MAAQqwD,EAC9Bn9D,EAAM6B,IAAIiL,MAAoBqwD,EAC9Bn9D,EAAM8d,OAAOhR,MAAiBqwD,EAG9B5yC,EAAIxkB,WAAW0B,MAAMsF,OAAmB/M,EAAM+F,WAAWgH,OAAS,KAClEwd,EAAIyU,mBAAmBv3B,MAAMsF,OAAW/M,EAAM+F,WAAWgH,OAAS,KAClEwd,EAAI4X,qBAAqB16B,MAAMsF,OAAS/M,EAAMoyB,gBAAgBrlB,OAAS,KACvEwd,EAAI6H,gBAAgB3qB,MAAMsF,OAAc/M,EAAMoyB,gBAAgBrlB,OAAS,KACvEwd,EAAIuxC,cAAcr0D,MAAMsF,OAAgB/M,EAAM87D,cAAc/uD,OAAS,KACrEwd,EAAIwxC,eAAet0D,MAAMsF,OAAe/M,EAAM+7D,eAAehvD,OAAS,KAEtEwd,EAAIxkB,WAAW0B,MAAMqF,MAAmB9M,EAAM+F,WAAW+G,MAAQ,KACjEyd,EAAIyU,mBAAmBv3B,MAAMqF,MAAW9M,EAAMoyB,gBAAgBtlB,MAAQ,KACtEyd,EAAI4X,qBAAqB16B,MAAMqF,MAAS9M,EAAM+F,WAAW+G,MAAQ,KACjEyd,EAAI6H,gBAAgB3qB,MAAMqF,MAAc9M,EAAM2mB,OAAO7Z,MAAQ,KAC7Dyd,EAAI1oB,IAAI4F,MAAMqF,MAA0B9M,EAAM6B,IAAIiL,MAAQ,KAC1Dyd,EAAIzM,OAAOrW,MAAMqF,MAAuB9M,EAAM8d,OAAOhR,MAAQ,KAG7Dyd,EAAIxkB,WAAW0B,MAAMhG,KAAiB,IACtC8oB,EAAIxkB,WAAW0B,MAAM5F,IAAiB,IACtC0oB,EAAIyU,mBAAmBv3B,MAAMhG,KAAUzB,EAAMyB,KAAKqL,MAAQ9M,EAAMgG,OAAOvE,KAAQ,KAC/E8oB,EAAIyU,mBAAmBv3B,MAAM5F,IAAS,IACtC0oB,EAAI4X,qBAAqB16B,MAAMhG,KAAO,IACtC8oB,EAAI4X,qBAAqB16B,MAAM5F,IAAO7B,EAAM6B,IAAIkL,OAAS,KACzDwd,EAAI6H,gBAAgB3qB,MAAMhG,KAAYzB,EAAMyB,KAAKqL,MAAQ,KACzDyd,EAAI6H,gBAAgB3qB,MAAM5F,IAAY7B,EAAM6B,IAAIkL,OAAS,KACzDwd,EAAIuxC,cAAcr0D,MAAMhG,KAAc,IACtC8oB,EAAIuxC,cAAcr0D,MAAM5F,IAAc7B,EAAM6B,IAAIkL,OAAS,KACzDwd,EAAIwxC,eAAet0D,MAAMhG,KAAczB,EAAMyB,KAAKqL,MAAQ9M,EAAM2mB,OAAO7Z,MAAS,KAChFyd,EAAIwxC,eAAet0D,MAAM5F,IAAa7B,EAAM6B,IAAIkL,OAAS,KACzDwd,EAAI1oB,IAAI4F,MAAMhG,KAAwBzB,EAAMyB,KAAKqL,MAAQ,KACzDyd,EAAI1oB,IAAI4F,MAAM5F,IAAwB,IACtC0oB,EAAIzM,OAAOrW,MAAMhG,KAAqBzB,EAAMyB,KAAKqL,MAAQ,KACzDyd,EAAIzM,OAAOrW,MAAM5F,IAAsB7B,EAAM6B,IAAIkL,OAAS/M,EAAMoyB,gBAAgBrlB,OAAU,KAI1F9S,KAAKmjE,kBAGL,IAAIj5C,GAASlqB,KAAK+F,MAAMshC,SACG,WAAvBt4B,EAAQ+lB,cACV5K,GAAUjlB,KAAKiI,IAAIlN,KAAK+F,MAAMoyB,gBAAgBrlB,OAAS9S,KAAK+F,MAAM2mB,OAAO5Z,OACvE9S,KAAK+F,MAAMgG,OAAOnE,IAAM5H,KAAK+F,MAAMgG,OAAO8X,OAAQ,IAEtDyM,EAAI5D,OAAOlf,MAAMhG,KAAO,IACxB8oB,EAAI5D,OAAOlf,MAAM5F,IAAOsiB,EAAS,KACjCoG,EAAI9oB,KAAKgG,MAAMhG,KAAS,IACxB8oB,EAAI9oB,KAAKgG,MAAM5F,IAASsiB,EAAS,KACjCoG,EAAI1I,MAAMpa,MAAMhG,KAAQ,IACxB8oB,EAAI1I,MAAMpa,MAAM5F,IAAQsiB,EAAS,IAGjC,IAAIk5C,GAAwC,GAAxBpjE,KAAK+F,MAAMshC,UAAiB,SAAW,GACvDg8B,EAAmBrjE,KAAK+F,MAAMshC,WAAarnC,KAAK+F,MAAMy8D,aAAe,SAAW,EAYpF,IAXAlyC,EAAIyxC,UAAUv0D,MAAMsqB,WAAsBsrC,EAC1C9yC,EAAI0xC,aAAax0D,MAAMsqB,WAAmBurC,EAC1C/yC,EAAI2xC,cAAcz0D,MAAMsqB,WAAkBsrC,EAC1C9yC,EAAI4xC,iBAAiB10D,MAAMsqB,WAAeurC,EAC1C/yC,EAAI6xC,eAAe30D,MAAMsqB,WAAiBsrC,EAC1C9yC,EAAI8xC,kBAAkB50D,MAAMsqB,WAAcurC,EAG1CrjE,KAAKgC,WAAWuG,QAAQ,SAAUo6D,GAChCn+B,EAAUm+B,EAAU3gD,UAAYwiB,IAE9BA,EAAS,CAEX,GAAI8+B,GAAc,CACdtjE,MAAKyiE,YAAca,GACrBtjE,KAAKyiE,cACLziE,KAAKgiB,UAGLiX,QAAQ/E,IAAI,qCAEdl0B,KAAKyiE,YAAc,EAGrBziE,KAAKouB,KAAK,oBAIZqI,EAAKhjB,UAAU8vD,QAAU,WACvB,KAAM,IAAI3/D,OAAM,wDAUlB6yB,EAAKhjB,UAAUyxB,eAAiB,SAASzK,GACvC,IAAKz6B,KAAKk2B,YACR,KAAM,IAAItyB,OAAM,sCAGlB5D,MAAKk2B,YAAYgP,eAAezK,IAQlChE,EAAKhjB,UAAU0xB,eAAiB,WAC9B,IAAKnlC,KAAKk2B,YACR,KAAM,IAAItyB,OAAM,sCAGlB,OAAO5D,MAAKk2B,YAAYiP,kBAU1B1O,EAAKhjB,UAAUoiB,QAAU,SAASxjB,GAChC,MAAO1Q,GAASi0B,OAAO51B,KAAMqS,EAAGrS,KAAK+F,MAAM2mB,OAAO7Z,QAUpD4jB,EAAKhjB,UAAUsiB,cAAgB,SAAS1jB,GACtC,MAAO1Q,GAASi0B,OAAO51B,KAAMqS,EAAGrS,KAAK+F,MAAMrG,KAAKmT,QAalD4jB,EAAKhjB,UAAUgiB,UAAY,SAASgF,GAClC,MAAO94B,GAAS6zB,SAASx1B,KAAMy6B,EAAMz6B,KAAK+F,MAAM2mB,OAAO7Z,QAczD4jB,EAAKhjB,UAAUkiB,gBAAkB,SAAS8E,GACxC,MAAO94B,GAAS6zB,SAASx1B,KAAMy6B,EAAMz6B,KAAK+F,MAAMrG,KAAKmT,QAUvD4jB,EAAKhjB,UAAUivD,gBAAkB,WACA,GAA3B1iE,KAAK+O,QAAQ8lB,WACf70B,KAAKwjE,mBAGLxjE,KAAK4iE,mBASTnsC,EAAKhjB,UAAU+vD,iBAAmB,WAChC,GAAI/uD,GAAKzU,IAETA,MAAK4iE,kBAEL5iE,KAAKyjE,UAAY,WACf,MAA6B,IAAzBhvD,EAAG1F,QAAQ8lB,eAEbpgB,GAAGmuD,uBAIDnuD,EAAG6b,IAAI5wB,OAKJ+U,EAAG6b,IAAI5wB,KAAKixB,aAAelc,EAAG1O,MAAM4rC,WACtCl9B,EAAG6b,IAAI5wB,KAAKmxB,cAAgBpc,EAAG1O,MAAM29D,cACtCjvD,EAAG1O,MAAM4rC,UAAYl9B,EAAG6b,IAAI5wB,KAAKixB,YACjClc,EAAG1O,MAAM29D,WAAajvD,EAAG6b,IAAI5wB,KAAKmxB,aAElCpc,EAAG2Z,KAAK,aAMdztB,EAAKkI,iBAAiBpB,OAAQ,SAAUzH,KAAKyjE,WAE7CzjE,KAAK2jE,WAAaC,YAAY5jE,KAAKyjE,UAAW,MAOhDhtC,EAAKhjB,UAAUmvD,gBAAkB,WAC3B5iE,KAAK2jE,aACP3wC,cAAchzB,KAAK2jE,YACnB3jE,KAAK2jE,WAAap9D,QAIpB5F,EAAK0I,oBAAoB5B,OAAQ,SAAUzH,KAAKyjE,WAChDzjE,KAAKyjE,UAAY,MAQnBhtC,EAAKhjB,UAAUmrB,SAAW,WACxB5+B,KAAKq+B,MAAM2B,eAAgB,GAQ7BvJ,EAAKhjB,UAAUorB,SAAW,WACxB7+B,KAAKq+B,MAAM2B,eAAgB,GAQ7BvJ,EAAKhjB,UAAU8qB,aAAe,WAC5Bv+B,KAAKq+B,MAAMwlC,iBAAmB7jE,KAAK+F,MAAMshC,WAQ3C5Q,EAAKhjB,UAAU+qB,QAAU,SAAUh1B,GAGjC,GAAKxJ,KAAKq+B,MAAM2B,cAAhB,CAEA,GAAIhR,GAAQxlB,EAAMy2B,QAAQE,OAEtB2jC,EAAe9jE,KAAK+jE,gBACpBC,EAAehkE,KAAKikE,cAAcjkE,KAAKq+B,MAAMwlC,iBAAmB70C,EAGhEg1C,IAAgBF,IAClB9jE,KAAKgiB,SACLhiB,KAAKouB,KAAK,mBAUdqI,EAAKhjB,UAAUwwD,cAAgB,SAAU58B,GAGvC,MAFArnC,MAAK+F,MAAMshC,UAAYA,EACvBrnC,KAAKmjE,mBACEnjE,KAAK+F,MAAMshC,WAQpB5Q,EAAKhjB,UAAU0vD,iBAAmB,WAEhC,GAAIX,GAAev9D,KAAKwG,IAAIzL,KAAK+F,MAAMoyB,gBAAgBrlB,OAAS9S,KAAK+F,MAAM2mB,OAAO5Z,OAAQ,EAc1F,OAbI0vD,IAAgBxiE,KAAK+F,MAAMy8D,eAGG,UAA5BxiE,KAAK+O,QAAQ+lB,cACf90B,KAAK+F,MAAMshC,WAAcm7B,EAAexiE,KAAK+F,MAAMy8D,cAErDxiE,KAAK+F,MAAMy8D,aAAeA,GAIxBxiE,KAAK+F,MAAMshC,UAAY,IAAGrnC,KAAK+F,MAAMshC,UAAY,GACjDrnC,KAAK+F,MAAMshC,UAAYm7B,IAAcxiE,KAAK+F,MAAMshC,UAAYm7B,GAEzDxiE,KAAK+F,MAAMshC,WAQpB5Q,EAAKhjB,UAAUswD,cAAgB,WAC7B,MAAO/jE,MAAK+F,MAAMshC,WAGpBxnC,EAAOD,QAAU62B,GAKb,SAAS52B,EAAQD,EAASM,GAE9B,GAAIolC,GAASplC,EAAoB,GAOjCN,GAAQ2gC,YAAc,SAASz3B,EAASU,GACtC,GAAI06D,GAAY,KAMZtjC,EAAU0E,EAAO97B,MAAM26D,aAAa36D,EAAO06D,GAC3CjkC,EAAUqF,EAAO97B,MAAM46D,iBAAiBpkE,KAAMkkE,EAAWtjC,EAASp3B,EAWtE,OAPI/E,OAAMw7B,EAAQvT,OAAOsS,SACvBiB,EAAQvT,OAAOsS,MAAQx1B,EAAMw1B,OAE3Bv6B,MAAMw7B,EAAQvT,OAAOuS,SACvBgB,EAAQvT,OAAOuS,MAAQz1B,EAAMy1B,OAGxBgB,IAML,SAASpgC,EAAQD,GAGrBA,EAAY,IACVw6B,QAAS,UACTK,KAAM,QAER76B,EAAe,MAAIA,EAAY,GAC/BA,EAAe,MAAIA,EAAY,GAG/BA,EAAY,IACVykE,OAAQ,aACR5pC,KAAM,QAER76B,EAAe,MAAIA,EAAY,GAC/BA,EAAe,MAAIA,EAAY,IAK3B,SAASC,EAAQD,GAGrBA,EAAY,IACV68C,KAAM,OACNG,IAAK,kBACL0nB,KAAM,OACNnG,QAAS,WACTG,QAAS,WACTiG,SAAU,YACV7nB,SAAU,YACV8nB,eAAgB,+CAChBC,gBAAiB,qEACjBC,oBAAqB,wEACrBC,gBAAiB,kCACjBC,mBAAoB,+BAEtBhlE,EAAe,MAAIA,EAAY,GAC/BA,EAAe,MAAIA,EAAY,GAG/BA,EAAY,IACV68C,KAAM,WACNG,IAAK,uBACL0nB,KAAM,QACNnG,QAAS,iBACTG,QAAS,iBACTiG,SAAU,gBACV7nB,SAAU,gBACV8nB,eAAgB,uDAChBC,gBAAiB,6EACjBC,oBAAqB,kFACrBC,gBAAiB,wCACjBC,mBAAoB,2CAEtBhlE,EAAe,MAAIA,EAAY,GAC/BA,EAAe,MAAIA,EAAY,IAK3B,WAKoC,mBAA7BilE,4BAKTA,yBAAyBpxD,UAAUmpD,OAAS,SAASvqD,EAAGC,EAAG5F,GACzD1M,KAAKmoB,YACLnoB,KAAKksB,IAAI7Z,EAAGC,EAAG5F,EAAG,EAAG,EAAEzH,KAAKknB,IAAI,IASlC04C,yBAAyBpxD,UAAUqxD,OAAS,SAASzyD,EAAGC,EAAG5F,GACzD1M,KAAKmoB,YACLnoB,KAAK+S,KAAKV,EAAI3F,EAAG4F,EAAI5F,EAAO,EAAJA,EAAW,EAAJA,IASjCm4D,yBAAyBpxD,UAAU6b,SAAW,SAASjd,EAAGC,EAAG5F,GAE3D1M,KAAKmoB,WAEL,IAAI5c,GAAQ,EAAJmB,EACJq4D,EAAKx5D,EAAI,EACTy5D,EAAK//D,KAAKirB,KAAK,GAAK,EAAI3kB,EACxBD,EAAIrG,KAAKirB,KAAK3kB,EAAIA,EAAIw5D,EAAKA,EAE/B/kE,MAAKooB,OAAO/V,EAAGC,GAAKhH,EAAI05D,IACxBhlE,KAAKqoB,OAAOhW,EAAI0yD,EAAIzyD,EAAI0yD,GACxBhlE,KAAKqoB,OAAOhW,EAAI0yD,EAAIzyD,EAAI0yD,GACxBhlE,KAAKqoB,OAAOhW,EAAGC,GAAKhH,EAAI05D,IACxBhlE,KAAKwoB,aASPq8C,yBAAyBpxD,UAAUwxD,aAAe,SAAS5yD,EAAGC,EAAG5F,GAE/D1M,KAAKmoB,WAEL,IAAI5c,GAAQ,EAAJmB,EACJq4D,EAAKx5D,EAAI,EACTy5D,EAAK//D,KAAKirB,KAAK,GAAK,EAAI3kB,EACxBD,EAAIrG,KAAKirB,KAAK3kB,EAAIA,EAAIw5D,EAAKA,EAE/B/kE,MAAKooB,OAAO/V,EAAGC,GAAKhH,EAAI05D,IACxBhlE,KAAKqoB,OAAOhW,EAAI0yD,EAAIzyD,EAAI0yD,GACxBhlE,KAAKqoB,OAAOhW,EAAI0yD,EAAIzyD,EAAI0yD,GACxBhlE,KAAKqoB,OAAOhW,EAAGC,GAAKhH,EAAI05D,IACxBhlE,KAAKwoB,aASPq8C,yBAAyBpxD,UAAUyxD,KAAO,SAAS7yD,EAAGC,EAAG5F,GAEvD1M,KAAKmoB,WAEL,KAAK,GAAIg9C,GAAI,EAAO,GAAJA,EAAQA,IAAK,CAC3B,GAAIl5C,GAAUk5C,EAAI,IAAM,EAAS,IAAJz4D,EAAc,GAAJA,CACvC1M,MAAKqoB,OACDhW,EAAI4Z,EAAShnB,KAAK0Z,IAAQ,EAAJwmD,EAAQlgE,KAAKknB,GAAK,IACxC7Z,EAAI2Z,EAAShnB,KAAK6Z,IAAQ,EAAJqmD,EAAQlgE,KAAKknB,GAAK,KAI9CnsB,KAAKwoB,aAMPq8C,yBAAyBpxD,UAAUgpD,UAAY,SAASpqD,EAAGC,EAAG87C,EAAG9iD,EAAGoB,GAClE,GAAI04D,GAAMngE,KAAKknB,GAAG,GACE,GAAhBiiC,EAAM,EAAI1hD,IAAYA,EAAM0hD,EAAI,GAChB,EAAhB9iD,EAAM,EAAIoB,IAAYA,EAAMpB,EAAI,GACpCtL,KAAKmoB,YACLnoB,KAAKooB,OAAO/V,EAAE3F,EAAE4F,GAChBtS,KAAKqoB,OAAOhW,EAAE+7C,EAAE1hD,EAAE4F,GAClBtS,KAAKksB,IAAI7Z,EAAE+7C,EAAE1hD,EAAE4F,EAAE5F,EAAEA,EAAM,IAAJ04D,EAAY,IAAJA,GAAQ,GACrCplE,KAAKqoB,OAAOhW,EAAE+7C,EAAE97C,EAAEhH,EAAEoB,GACpB1M,KAAKksB,IAAI7Z,EAAE+7C,EAAE1hD,EAAE4F,EAAEhH,EAAEoB,EAAEA,EAAE,EAAM,GAAJ04D,GAAO,GAChCplE,KAAKqoB,OAAOhW,EAAE3F,EAAE4F,EAAEhH,GAClBtL,KAAKksB,IAAI7Z,EAAE3F,EAAE4F,EAAEhH,EAAEoB,EAAEA,EAAM,GAAJ04D,EAAW,IAAJA,GAAQ,GACpCplE,KAAKqoB,OAAOhW,EAAEC,EAAE5F,GAChB1M,KAAKksB,IAAI7Z,EAAE3F,EAAE4F,EAAE5F,EAAEA,EAAM,IAAJ04D,EAAY,IAAJA,GAAQ,IAMrCP,yBAAyBpxD,UAAUqpD,QAAU,SAASzqD,EAAGC,EAAG87C,EAAG9iD,GAC7D,GAAI+5D,GAAQ,SACRC,EAAMlX,EAAI,EAAKiX,EACfE,EAAMj6D,EAAI,EAAK+5D,EACfG,EAAKnzD,EAAI+7C,EACTqX,EAAKnzD,EAAIhH,EACTo6D,EAAKrzD,EAAI+7C,EAAI,EACbuX,EAAKrzD,EAAIhH,EAAI,CAEjBtL,MAAKmoB,YACLnoB,KAAKooB,OAAO/V,EAAGszD,GACf3lE,KAAK4lE,cAAcvzD,EAAGszD,EAAKJ,EAAIG,EAAKJ,EAAIhzD,EAAGozD,EAAIpzD,GAC/CtS,KAAK4lE,cAAcF,EAAKJ,EAAIhzD,EAAGkzD,EAAIG,EAAKJ,EAAIC,EAAIG,GAChD3lE,KAAK4lE,cAAcJ,EAAIG,EAAKJ,EAAIG,EAAKJ,EAAIG,EAAIC,EAAID,GACjDzlE,KAAK4lE,cAAcF,EAAKJ,EAAIG,EAAIpzD,EAAGszD,EAAKJ,EAAIlzD,EAAGszD,IAQjDd,yBAAyBpxD,UAAUipD,SAAW,SAASrqD,EAAGC,EAAG87C,EAAG9iD,GAC9D,GAAImB,GAAI,EAAE,EACNo5D,EAAWzX,EACX0X,EAAWx6D,EAAImB,EAEf44D,EAAQ,SACRC,EAAMO,EAAW,EAAKR,EACtBE,EAAMO,EAAW,EAAKT,EACtBG,EAAKnzD,EAAIwzD,EACTJ,EAAKnzD,EAAIwzD,EACTJ,EAAKrzD,EAAIwzD,EAAW,EACpBF,EAAKrzD,EAAIwzD,EAAW,EACpBC,EAAMzzD,GAAKhH,EAAIw6D,EAAS,GACxBE,EAAM1zD,EAAIhH,CAEdtL,MAAKmoB,YACLnoB,KAAKooB,OAAOo9C,EAAIG,GAEhB3lE,KAAK4lE,cAAcJ,EAAIG,EAAKJ,EAAIG,EAAKJ,EAAIG,EAAIC,EAAID,GACjDzlE,KAAK4lE,cAAcF,EAAKJ,EAAIG,EAAIpzD,EAAGszD,EAAKJ,EAAIlzD,EAAGszD,GAE/C3lE,KAAK4lE,cAAcvzD,EAAGszD,EAAKJ,EAAIG,EAAKJ,EAAIhzD,EAAGozD,EAAIpzD,GAC/CtS,KAAK4lE,cAAcF,EAAKJ,EAAIhzD,EAAGkzD,EAAIG,EAAKJ,EAAIC,EAAIG,GAEhD3lE,KAAKqoB,OAAOm9C,EAAIO,GAEhB/lE,KAAK4lE,cAAcJ,EAAIO,EAAMR,EAAIG,EAAKJ,EAAIU,EAAKN,EAAIM,GACnDhmE,KAAK4lE,cAAcF,EAAKJ,EAAIU,EAAK3zD,EAAG0zD,EAAMR,EAAIlzD,EAAG0zD,GAEjD/lE,KAAKqoB,OAAOhW,EAAGszD,IAOjBd,yBAAyBpxD,UAAU0iD,MAAQ,SAAS9jD,EAAGC,EAAG66C,EAAOznD,GAE/D,GAAIugE,GAAK5zD,EAAI3M,EAAST,KAAK6Z,IAAIquC,GAC3B+Y,EAAK5zD,EAAI5M,EAAST,KAAK0Z,IAAIwuC,GAI3BgZ,EAAK9zD,EAAa,GAAT3M,EAAeT,KAAK6Z,IAAIquC,GACjCiZ,EAAK9zD,EAAa,GAAT5M,EAAeT,KAAK0Z,IAAIwuC,GAGjCkZ,EAAKJ,EAAKvgE,EAAS,EAAIT,KAAK6Z,IAAIquC,EAAQ,GAAMloD,KAAKknB,IACnDm6C,EAAKJ,EAAKxgE,EAAS,EAAIT,KAAK0Z,IAAIwuC,EAAQ,GAAMloD,KAAKknB,IAGnDo6C,EAAKN,EAAKvgE,EAAS,EAAIT,KAAK6Z,IAAIquC,EAAQ,GAAMloD,KAAKknB,IACnDq6C,EAAKN,EAAKxgE,EAAS,EAAIT,KAAK0Z,IAAIwuC,EAAQ,GAAMloD,KAAKknB,GAEvDnsB,MAAKmoB,YACLnoB,KAAKooB,OAAO/V,EAAGC,GACftS,KAAKqoB,OAAOg+C,EAAIC,GAChBtmE,KAAKqoB,OAAO89C,EAAIC,GAChBpmE,KAAKqoB,OAAOk+C,EAAIC,GAChBxmE,KAAKwoB,aASPq8C,yBAAyBpxD,UAAUuiD,WAAa,SAAS3jD,EAAEC,EAAEskD,EAAGC,EAAG4P,GAC5DA,IAAWA,GAAW,GAAG,IACd,GAAZC,IAAeA,EAAa,KAChC,IAAIC,GAAYF,EAAU/gE,MAC1B1F,MAAKooB,OAAO/V,EAAGC,EAKf,KAJA,GAAI6M,GAAMy3C,EAAGvkD,EAAI+M,EAAMy3C,EAAGvkD,EACtBs0D,EAAQxnD,EAAGD,EACX0nD,EAAgB5hE,KAAKirB,KAAM/Q,EAAGA,EAAKC,EAAGA,GACtC0nD,EAAU,EAAG96B,GAAK,EACf66B,GAAe,IAAI,CACxB,GAAIH,GAAaD,EAAUK,IAAYH,EACnCD,GAAaG,IAAeH,EAAaG,EAC7C,IAAI5qD,GAAQhX,KAAKirB,KAAMw2C,EAAWA,GAAc,EAAIE,EAAMA,GACnD,GAAHznD,IAAMlD,GAASA,GACnB5J,GAAK4J,EACL3J,GAAKs0D,EAAM3qD,EACXjc,KAAKgsC,EAAO,SAAW,UAAU35B,EAAEC,GACnCu0D,GAAiBH,EACjB16B,GAAQA,MAUV,SAASnsC,EAAQD,EAASM,GAQ9B,QAAS0qC,GAAKhT,EAAS7oB,GACrB/O,KAAK43B,QAAUA,EACf53B,KAAK+O,QAAUA,EALjB,GAAInO,GAAUV,EAAoB,GAC9B4qC,EAAS5qC,EAAoB,GAOjC0qC,GAAKn3B,UAAUq4B,UAAY,SAASC,GAGlC,IAAK,GAFD5vB,GAAO4vB,EAAU,GAAGz5B,EACpB+J,EAAO0vB,EAAU,GAAGz5B,EACf8Z,EAAI,EAAGA,EAAI2f,EAAUrmC,OAAQ0mB,IACpCjQ,EAAOA,EAAO4vB,EAAU3f,GAAG9Z,EAAIy5B,EAAU3f,GAAG9Z,EAAI6J,EAChDE,EAAOA,EAAO0vB,EAAU3f,GAAG9Z,EAAIy5B,EAAU3f,GAAG9Z,EAAI+J,CAElD,QAAQ5Q,IAAK0Q,EAAMjP,IAAKmP,EAAMwvB,iBAAkB7rC,KAAK+O,QAAQ88B,mBAU/DjB,EAAKn3B,UAAUu4B,KAAO,SAAU1U,EAAS/kB,EAAO05B,GAC9C,GAAe,MAAX3U,GACEA,EAAQ5xB,OAAS,EAAG,CACtB,GAAI0lC,GAAM7+B,EACNssC,EAAY50C,OAAOgoC,EAAUrG,IAAIp4B,MAAMsF,OAAO1G,QAAQ,KAAK,IAgB/D,IAfAg/B,EAAOxqC,EAAQ8Q,cAAc,OAAQu6B,EAAUhF,YAAagF,EAAUrG,KACtEwF,EAAK14B,eAAe,KAAM,QAASH,EAAMxK,WACtBxB,SAAhBgM,EAAM/E,OACP49B,EAAK14B,eAAe,KAAM,QAASH,EAAM/E,OAKzCjB,EADsC,GAApCgG,EAAMxD,QAAQi8B,WAAWh8B,QACvB47B,EAAKm8B,YAAYzvC,EAAS/kB,GAG1Bq4B,EAAKo8B,QAAQ1vC,GAIiB,GAAhC/kB,EAAMxD,QAAQy8B,OAAOx8B,QAAiB,CACxC,GACIi4D,GADA57B,EAAWzqC,EAAQ8Q,cAAc,OAAQu6B,EAAUhF,YAAagF,EAAUrG,IAG5EqhC,GADsC,OAApC10D,EAAMxD,QAAQy8B,OAAO1W,YACf,IAAMwC,EAAQ,GAAGjlB,EAAI,MAAgB9F,EAAI,IAAM+qB,EAAQA,EAAQ5xB,OAAS,GAAG2M,EAAI,KAG/E,IAAMilB,EAAQ,GAAGjlB,EAAI,IAAMwmC,EAAY,IAAMtsC,EAAI,IAAM+qB,EAAQA,EAAQ5xB,OAAS,GAAG2M,EAAI,IAAMwmC,EAEvGxN,EAAS34B,eAAe,KAAM,QAASH,EAAMxK,UAAY,SACvBxB,SAA/BgM,EAAMxD,QAAQy8B,OAAOh+B,OACtB69B,EAAS34B,eAAe,KAAM,QAASH,EAAMxD,QAAQy8B,OAAOh+B,OAE9D69B,EAAS34B,eAAe,KAAM,IAAKu0D,GAGrC77B,EAAK14B,eAAe,KAAM,IAAK,IAAMnG,GAGG,GAApCgG,EAAMxD,QAAQ0D,WAAWzD,SAC3B87B,EAAOkB,KAAK1U,EAAS/kB,EAAO05B,KAepCrB,EAAKs8B,mBAAqB,SAASl0D,GAMjC,IAAK,GAJDm0D,GAAIC,EAAIC,EAAIC,EAAIC,EAAKC,EACrBj7D,EAAItH,KAAKipB,MAAMlb,EAAK,GAAGX,GAAK,IAAMpN,KAAKipB,MAAMlb,EAAK,GAAGV,GAAK,IAC1Dm1D,EAAgB,EAAE,EAClB/hE,EAASsN,EAAKtN,OACTH,EAAI,EAAOG,EAAS,EAAbH,EAAgBA,IAE9B4hE,EAAW,GAAL5hE,EAAUyN,EAAK,GAAKA,EAAKzN,EAAE,GACjC6hE,EAAKp0D,EAAKzN,GACV8hE,EAAKr0D,EAAKzN,EAAE,GACZ+hE,EAAc5hE,EAARH,EAAI,EAAcyN,EAAKzN,EAAE,GAAK8hE,EAUpCE,GAAQl1D,IAAM80D,EAAG90D,EAAI,EAAE+0D,EAAG/0D,EAAIg1D,EAAGh1D,GAAIo1D,EAAgBn1D,IAAM60D,EAAG70D,EAAI,EAAE80D,EAAG90D,EAAI+0D,EAAG/0D,GAAIm1D,GAClFD,GAAQn1D,GAAM+0D,EAAG/0D,EAAI,EAAEg1D,EAAGh1D,EAAIi1D,EAAGj1D,GAAIo1D,EAAgBn1D,GAAM80D,EAAG90D,EAAI,EAAE+0D,EAAG/0D,EAAIg1D,EAAGh1D,GAAIm1D,GAGlFl7D,GAAK,IACLg7D,EAAIl1D,EAAI,IACRk1D,EAAIj1D,EAAI,IACRk1D,EAAIn1D,EAAI,IACRm1D,EAAIl1D,EAAI,IACR+0D,EAAGh1D,EAAI,IACPg1D,EAAG/0D,EAAI,GAGT,OAAO/F,IAcTq+B,EAAKm8B,YAAc,SAAS/zD,EAAMT,GAChC,GAAI24B,GAAQ34B,EAAMxD,QAAQi8B,WAAWE,KACrC,IAAa,GAATA,GAAwB3kC,SAAV2kC,EAChB,MAAOlrC,MAAKknE,mBAAmBl0D,EAO/B,KAAK,GAJDm0D,GAAIC,EAAIC,EAAIC,EAAIC,EAAKC,EAAKE,EAAGC,EAAGC,EAAIC,EAAG78C,EAAG88C,EAAGC,EAC7CC,EAAQC,EAAQC,EAASC,EAASC,EAASC,EAC3C97D,EAAItH,KAAKipB,MAAMlb,EAAK,GAAGX,GAAK,IAAMpN,KAAKipB,MAAMlb,EAAK,GAAGV,GAAK,IAC1D5M,EAASsN,EAAKtN,OACTH,EAAI,EAAOG,EAAS,EAAbH,EAAgBA,IAE9B4hE,EAAW,GAAL5hE,EAAUyN,EAAK,GAAKA,EAAKzN,EAAE,GACjC6hE,EAAKp0D,EAAKzN,GACV8hE,EAAKr0D,EAAKzN,EAAE,GACZ+hE,EAAc5hE,EAARH,EAAI,EAAcyN,EAAKzN,EAAE,GAAK8hE,EAEpCK,EAAKziE,KAAKirB,KAAKjrB,KAAKovB,IAAI8yC,EAAG90D,EAAI+0D,EAAG/0D,EAAE,GAAKpN,KAAKovB,IAAI8yC,EAAG70D,EAAI80D,EAAG90D,EAAE,IAC9Dq1D,EAAK1iE,KAAKirB,KAAKjrB,KAAKovB,IAAI+yC,EAAG/0D,EAAIg1D,EAAGh1D,EAAE,GAAKpN,KAAKovB,IAAI+yC,EAAG90D,EAAI+0D,EAAG/0D,EAAE,IAC9Ds1D,EAAK3iE,KAAKirB,KAAKjrB,KAAKovB,IAAIgzC,EAAGh1D,EAAIi1D,EAAGj1D,EAAE,GAAKpN,KAAKovB,IAAIgzC,EAAG/0D,EAAIg1D,EAAGh1D,EAAE,IAY9D01D,EAAU/iE,KAAKovB,IAAIuzC,EAAK18B,GACxBg9B,EAAUjjE,KAAKovB,IAAIuzC,EAAG,EAAE18B,GACxB+8B,EAAUhjE,KAAKovB,IAAIszC,EAAKz8B,GACxBi9B,EAAUljE,KAAKovB,IAAIszC,EAAG,EAAEz8B,GACxBm9B,EAAUpjE,KAAKovB,IAAIqzC,EAAKx8B,GACxBk9B,EAAUnjE,KAAKovB,IAAIqzC,EAAG,EAAEx8B,GAExB28B,EAAI,EAAEO,EAAU,EAAEC,EAASJ,EAASE,EACpCn9C,EAAI,EAAEk9C,EAAU,EAAEF,EAASC,EAASE,EACpCL,EAAI,EAAEO,GAAUA,EAASJ,GACrBH,EAAI,IAAIA,EAAI,EAAIA,GACpBC,EAAI,EAAEC,GAAUA,EAASC,GACrBF,EAAI,IAAIA,EAAI,EAAIA,GAEpBR,GAAQl1D,IAAM81D,EAAUhB,EAAG90D,EAAIw1D,EAAET,EAAG/0D,EAAI+1D,EAAUf,EAAGh1D,GAAKy1D,EACxDx1D,IAAM61D,EAAUhB,EAAG70D,EAAIu1D,EAAET,EAAG90D,EAAI81D,EAAUf,EAAG/0D,GAAKw1D,GAEpDN,GAAQn1D,GAAM61D,EAAUd,EAAG/0D,EAAI2Y,EAAEq8C,EAAGh1D,EAAI81D,EAAUb,EAAGj1D,GAAK01D,EACxDz1D,GAAM41D,EAAUd,EAAG90D,EAAI0Y,EAAEq8C,EAAG/0D,EAAI61D,EAAUb,EAAGh1D,GAAKy1D,GAEvC,GAATR,EAAIl1D,GAAmB,GAATk1D,EAAIj1D,IAASi1D,EAAMH,GACxB,GAATI,EAAIn1D,GAAmB,GAATm1D,EAAIl1D,IAASk1D,EAAMH,GACrC96D,GAAK,IACLg7D,EAAIl1D,EAAI,IACRk1D,EAAIj1D,EAAI,IACRk1D,EAAIn1D,EAAI,IACRm1D,EAAIl1D,EAAI,IACR+0D,EAAGh1D,EAAI,IACPg1D,EAAG/0D,EAAI,GAGT,OAAO/F,IAUXq+B,EAAKo8B,QAAU,SAASh0D,GAGtB,IAAK,GADDzG,GAAI,GACChH,EAAI,EAAGA,EAAIyN,EAAKtN,OAAQH,IAE7BgH,GADO,GAALhH,EACGyN,EAAKzN,GAAG8M,EAAI,IAAMW,EAAKzN,GAAG+M,EAG1B,IAAMU,EAAKzN,GAAG8M,EAAI,IAAMW,EAAKzN,GAAG+M,CAGzC,OAAO/F,IAGT1M,EAAOD,QAAUgrC,GAKb,SAAS/qC,EAAQD,EAASM,GAQ9B,QAASooE,GAAS1wC,EAAS7oB,GACzB/O,KAAK43B,QAAUA,EACf53B,KAAK+O,QAAUA,EALjB,CAAA,GAAInO,GAAUV,EAAoB,EACrBA,GAAoB,IAOjCooE,EAAS70D,UAAUq4B,UAAY,SAASC,GACtC,GAA2C,SAAvC/rC,KAAK+O,QAAQmmC,SAASC,cAA0B,CAGlD,IAAK,GAFDh5B,GAAO4vB,EAAU,GAAGz5B,EACpB+J,EAAO0vB,EAAU,GAAGz5B,EACf8Z,EAAI,EAAGA,EAAI2f,EAAUrmC,OAAQ0mB,IACpCjQ,EAAOA,EAAO4vB,EAAU3f,GAAG9Z,EAAIy5B,EAAU3f,GAAG9Z,EAAI6J,EAChDE,EAAOA,EAAO0vB,EAAU3f,GAAG9Z,EAAIy5B,EAAU3f,GAAG9Z,EAAI+J,CAElD,QAAQ5Q,IAAK0Q,EAAMjP,IAAKmP,EAAMwvB,iBAAkB7rC,KAAK+O,QAAQ88B,kBAI7D,IAAK,GADD08B,MACKn8C,EAAI,EAAGA,EAAI2f,EAAUrmC,OAAQ0mB,IACpCm8C,EAAgBrgE,MACdmK,EAAG05B,EAAU3f,GAAG/Z,EAChBC,EAAGy5B,EAAU3f,GAAG9Z,EAChBslB,QAAS53B,KAAK43B,SAGlB,OAAO2wC,IAYXD,EAASt8B,KAAO,SAAUmE,EAAUoG,EAAoBtK,GACtD,GAEIu8B,GACA5/D,EAAK6/D,EACLl2D,EACAhN,EAAE6mB,EALFs8C,KACAC,KAKAC,EAAY,CAGhB,KAAKrjE,EAAI,EAAGA,EAAI4qC,EAASzqC,OAAQH,IAE/B,GADAgN,EAAQ05B,EAAUvX,OAAOyb,EAAS5qC,IACP,OAAvBgN,EAAMxD,QAAQvB,OACK,GAAjB+E,EAAM0W,UAAyE1iB,SAArD0lC,EAAUl9B,QAAQ2lB,OAAOoD,WAAWqY,EAAS5qC,KAAyE,GAApD0mC,EAAUl9B,QAAQ2lB,OAAOoD,WAAWqY,EAAS5qC,KAC3I,IAAK6mB,EAAI,EAAGA,EAAImqB,EAAmBpG,EAAS5qC,IAAIG,OAAQ0mB,IACtDs8C,EAAaxgE,MACXmK,EAAGkkC,EAAmBpG,EAAS5qC,IAAI6mB,GAAG/Z,EACtCC,EAAGikC,EAAmBpG,EAAS5qC,IAAI6mB,GAAG9Z,EACtCslB,QAASuY,EAAS5qC,KAEpBqjE,GAAa,CAMrB,IAAiB,GAAbA,EAeJ,IAZAF,EAAajyD,KAAK,SAAUnR,EAAGa,GAC7B,MAAIb,GAAE+M,GAAKlM,EAAEkM,EACJ/M,EAAEsyB,QAAUzxB,EAAEyxB,QAEdtyB,EAAE+M,EAAIlM,EAAEkM,IAKnBi2D,EAASO,sBAAsBF,EAAeD,GAGzCnjE,EAAI,EAAGA,EAAImjE,EAAahjE,OAAQH,IAAK,CACxCgN,EAAQ05B,EAAUvX,OAAOg0C,EAAanjE,GAAGqyB,QACzC,IAAI+O,GAAW,GAAMp0B,EAAMxD,QAAQmmC,SAASriC,KAE5CjK,GAAM8/D,EAAanjE,GAAG8M,CACtB,IAAIy2D,GAAe,CACnB,IAA2BviE,SAAvBoiE,EAAc//D,GACZrD,EAAE,EAAImjE,EAAahjE,SAAS8iE,EAAevjE,KAAKmmB,IAAIs9C,EAAanjE,EAAE,GAAG8M,EAAIzJ,IAC1ErD,EAAI,IAAwBijE,EAAevjE,KAAKwG,IAAI+8D,EAAavjE,KAAKmmB,IAAIs9C,EAAanjE,EAAE,GAAG8M,EAAIzJ,KACpG6/D,EAAWH,EAASS,iBAAiBP,EAAcj2D,EAAOo0B,OAEvD,CACH,GAAIqiC,GAAUzjE,GAAKojE,EAAc//D,GAAKqgE,OAASN,EAAc//D,GAAKsgE,UAC9DC,EAAU5jE,GAAKojE,EAAc//D,GAAKsgE,SAAW,EAC7CF,GAAUN,EAAahjE,SAAS8iE,EAAevjE,KAAKmmB,IAAIs9C,EAAaM,GAAS32D,EAAIzJ,IAClFugE,EAAU,IAAsBX,EAAevjE,KAAKwG,IAAI+8D,EAAavjE,KAAKmmB,IAAIs9C,EAAaS,GAAS92D,EAAIzJ,KAC5G6/D,EAAWH,EAASS,iBAAiBP,EAAcj2D,EAAOo0B,GAC1DgiC,EAAc//D,GAAKsgE,UAAY,EAEa,SAAxC32D,EAAMxD,QAAQmmC,SAASC,eACzB2zB,EAAeH,EAAc//D,GAAKwgE,YAClCT,EAAc//D,GAAKwgE,aAAe72D,EAAMo4B,aAAe+9B,EAAanjE,GAAG+M,GAExB,cAAxCC,EAAMxD,QAAQmmC,SAASC,gBAC9BszB,EAAS51D,MAAQ41D,EAAS51D,MAAQ81D,EAAc//D,GAAKqgE,OACrDR,EAASv+C,QAAWy+C,EAAc//D,GAAa,SAAI6/D,EAAS51D,MAAS,GAAI41D,EAAS51D,OAAS81D,EAAc//D,GAAKqgE,OAAO,GACjF,QAAhC12D,EAAMxD,QAAQmmC,SAASlG,MAAwBy5B,EAASv+C,QAAU,GAAIu+C,EAAS51D,MAC1C,SAAhCN,EAAMxD,QAAQmmC,SAASlG,QAAmBy5B,EAASv+C,QAAU,GAAIu+C,EAAS51D,QAGvFjS,EAAQgS,QAAQ81D,EAAanjE,GAAG8M,EAAIo2D,EAASv+C,OAAQw+C,EAAanjE,GAAG+M,EAAIw2D,EAAcL,EAAS51D,MAAON,EAAMo4B,aAAe+9B,EAAanjE,GAAG+M,EAAGC,EAAMxK,UAAY,OAAQkkC,EAAUhF,YAAagF,EAAUrG,KAElK,GAApCrzB,EAAMxD,QAAQ0D,WAAWzD,SAC3BpO,EAAQwR,UAAUs2D,EAAanjE,GAAG8M,EAAIo2D,EAASv+C,OAAQw+C,EAAanjE,GAAG+M,EAAGC,EAAO05B,EAAUhF,YAAagF,EAAUrG,OAYxH0iC,EAASO,sBAAwB,SAAUF,EAAeD,GAGxD,IAAK,GADDF,GACKjjE,EAAI,EAAGA,EAAImjE,EAAahjE,OAAQH,IACnCA,EAAI,EAAImjE,EAAahjE,SACvB8iE,EAAevjE,KAAKmmB,IAAIs9C,EAAanjE,EAAI,GAAG8M,EAAIq2D,EAAanjE,GAAG8M,IAE9D9M,EAAI,IACNijE,EAAevjE,KAAKwG,IAAI+8D,EAAcvjE,KAAKmmB,IAAIs9C,EAAanjE,EAAI,GAAG8M,EAAIq2D,EAAanjE,GAAG8M,KAErE,GAAhBm2D,IACuCjiE,SAArCoiE,EAAcD,EAAanjE,GAAG8M,KAChCs2D,EAAcD,EAAanjE,GAAG8M,IAAM42D,OAAQ,EAAGC,SAAU,EAAGE,YAAa,IAE3ET,EAAcD,EAAanjE,GAAG8M,GAAG42D,QAAU,IAejDX,EAASS,iBAAmB,SAAUP,EAAcj2D,EAAOo0B,GACzD,GAAI9zB,GAAOqX,CAwBX,OAvBIs+C,GAAej2D,EAAMxD,QAAQmmC,SAASriC,OAAS21D,EAAe,GAChE31D,EAAuB8zB,EAAf6hC,EAA0B7hC,EAAW6hC,EAE7Ct+C,EAAS,EAC2B,QAAhC3X,EAAMxD,QAAQmmC,SAASlG,MACzB9kB,GAAU,GAAMs+C,EAEuB,SAAhCj2D,EAAMxD,QAAQmmC,SAASlG,QAC9B9kB,GAAU,GAAMs+C,KAKlB31D,EAAQN,EAAMxD,QAAQmmC,SAASriC,MAC/BqX,EAAS,EAC2B,QAAhC3X,EAAMxD,QAAQmmC,SAASlG,MACzB9kB,GAAU,GAAM3X,EAAMxD,QAAQmmC,SAASriC,MAEA,SAAhCN,EAAMxD,QAAQmmC,SAASlG,QAC9B9kB,GAAU,GAAM3X,EAAMxD,QAAQmmC,SAASriC,SAInCA,MAAOA,EAAOqX,OAAQA,IAGhCo+C,EAAS1wB,oBAAsB,SAAS2wB,EAAiB/xB,EAAarG,EAAUk5B,EAAYv0C,GAC1F,GAAIyzC,EAAgB7iE,OAAS,EAAG,CAE9B6iE,EAAgB9xD,KAAK,SAAUnR,EAAGa,GAChC,MAAIb,GAAE+M,GAAKlM,EAAEkM,EACJ/M,EAAEsyB,QAAUzxB,EAAEyxB,QAEdtyB,EAAE+M,EAAIlM,EAAEkM,GAGnB,IAAIs2D,KAEJL,GAASO,sBAAsBF,EAAeJ,GAC9C/xB,EAAY6yB,GAAcf,EAASgB,qBAAqBX,EAAeJ,GACvE/xB,EAAY6yB,GAAYx9B,iBAAmB/W,EAC3Cqb,EAASjoC,KAAKmhE;GAIlBf,EAASgB,qBAAuB,SAAUX,EAAeD,GAIvD,IAAK,GAHD9/D,GACAuT,EAAOusD,EAAa,GAAGp2D,EACvB+J,EAAOqsD,EAAa,GAAGp2D,EAClB/M,EAAI,EAAGA,EAAImjE,EAAahjE,OAAQH,IACvCqD,EAAM8/D,EAAanjE,GAAG8M,EACK9L,SAAvBoiE,EAAc//D,IAChBuT,EAAOA,EAAOusD,EAAanjE,GAAG+M,EAAIo2D,EAAanjE,GAAG+M,EAAI6J,EACtDE,EAAOA,EAAOqsD,EAAanjE,GAAG+M,EAAIo2D,EAAanjE,GAAG+M,EAAI+J,GAGtDssD,EAAc//D,GAAKwgE,aAAeV,EAAanjE,GAAG+M,CAGtD,KAAK,GAAIi3D,KAAQZ,GACXA,EAAc9iE,eAAe0jE,KAC/BptD,EAAOA,EAAOwsD,EAAcY,GAAMH,YAAcT,EAAcY,GAAMH,YAAcjtD,EAClFE,EAAOA,EAAOssD,EAAcY,GAAMH,YAAcT,EAAcY,GAAMH,YAAc/sD,EAItF,QAAQ5Q,IAAK0Q,EAAMjP,IAAKmP,IAG1Bxc,EAAOD,QAAU0oE,GAIb,SAASzoE,EAAQD,EAASM,GAO9B,QAAS4qC,GAAOlT,EAAS7oB,GACvB/O,KAAK43B,QAAUA,EACf53B,KAAK+O,QAAUA,EAJjB,GAAInO,GAAUV,EAAoB,EAQlC4qC,GAAOr3B,UAAUq4B,UAAY,SAASC,GAGpC,IAAK,GAFD5vB,GAAO4vB,EAAU,GAAGz5B,EACpB+J,EAAO0vB,EAAU,GAAGz5B,EACf8Z,EAAI,EAAGA,EAAI2f,EAAUrmC,OAAQ0mB,IACpCjQ,EAAOA,EAAO4vB,EAAU3f,GAAG9Z,EAAIy5B,EAAU3f,GAAG9Z,EAAI6J,EAChDE,EAAOA,EAAO0vB,EAAU3f,GAAG9Z,EAAIy5B,EAAU3f,GAAG9Z,EAAI+J,CAElD,QAAQ5Q,IAAK0Q,EAAMjP,IAAKmP,EAAMwvB,iBAAkB7rC,KAAK+O,QAAQ88B,mBAG/Df,EAAOr3B,UAAUu4B,KAAO,SAAS1U,EAAS/kB,EAAO05B,EAAW/hB,GAC1D4gB,EAAOkB,KAAK1U,EAAS/kB,EAAO05B,EAAW/hB,IAYzC4gB,EAAOkB,KAAO,SAAU1U,EAAS/kB,EAAO05B,EAAW/hB,GAClC3jB,SAAX2jB,IAAuBA,EAAS,EACpC,KAAK,GAAI3kB,GAAI,EAAGA,EAAI+xB,EAAQ5xB,OAAQH,IAClC3E,EAAQwR,UAAUklB,EAAQ/xB,GAAG8M,EAAI6X,EAAQoN,EAAQ/xB,GAAG+M,EAAGC,EAAO05B,EAAUhF,YAAagF,EAAUrG,MAKnG/lC,EAAOD,QAAUkrC,GAIb,SAASjrC,EAAQD,EAASM,GAE9B,GAAIspE,GAAetpE,EAAoB,IACnCupE,EAAevpE,EAAoB,IACnCwpE,EAAexpE,EAAoB,IACnCypE,EAAiBzpE,EAAoB,IACrC0pE,EAAoB1pE,EAAoB,IACxC2pE,EAAkB3pE,EAAoB,IACtC4pE,EAA0B5pE,EAAoB,GAQlDN,GAAQmqE,WAAa,SAAUC,GAC7B,IAAK,GAAIC,KAAiBD,GACpBA,EAAenkE,eAAeokE,KAChCjqE,KAAKiqE,GAAiBD,EAAeC,KAY3CrqE,EAAQsqE,YAAc,SAAUF,GAC9B,IAAK,GAAIC,KAAiBD,GACpBA,EAAenkE,eAAeokE,KAChCjqE,KAAKiqE,GAAiB1jE,SAW5B3G,EAAQ+iD,mBAAqB,WAC3B3iD,KAAK+pE,WAAWP,GAChBxpE,KAAKmqE,2BACkC,GAAnCnqE,KAAKohD,UAAUlD,kBACjBl+C,KAAKoqE,6BAUTxqE,EAAQijD,mBAAqB,WAC3B7iD,KAAK05D,eAAiB,EACtB15D,KAAKqqE,aAAe,EACpBrqE,KAAK+pE,WAAWN,IASlB7pE,EAAQgjD,kBAAoB,WAC1B5iD,KAAKiuD,WACLjuD,KAAKsqE,cAAgB,WACrBtqE,KAAKiuD,QAAgB,UACrBjuD,KAAKiuD,QAAgB,OAAE,YAAcpR,SACnCa,SACA8F,eACAwW,eAAkB,EAClBuQ,YAAehkE,QACjBvG,KAAKiuD,QAAgB,UACrBjuD,KAAKiuD,QAAiB,SAAKpR,SACzBa,SACA8F,eACAwW,eAAkB,EAClBuQ,YAAehkE,QAEjBvG,KAAKwjD,YAAcxjD,KAAKiuD,QAAgB,OAAE,WAAwB,YAElEjuD,KAAK+pE,WAAWL,IASlB9pE,EAAQkjD,qBAAuB,WAC7B9iD,KAAKqqD,cAAgBxN,SAAWa,UAEhC19C,KAAK+pE,WAAWJ,IASlB/pE,EAAQkoD,wBAA0B,WAEhC9nD,KAAKwqE,8BAA+B,EACpCxqE,KAAKyqE,sBAAuB,EAEmB,GAA3CzqE,KAAKohD,UAAUlB,iBAAiBlxC,SAELzI,SAAzBvG,KAAK0qE,kBACP1qE,KAAK0qE,gBAAkB74D,SAASM,cAAc,OAC9CnS,KAAK0qE,gBAAgB3iE,UAAY,0BAE/B/H,KAAK0qE,gBAAgBl9D,MAAMo6B,QADR,GAAjB5nC,KAAKunD,SAC8B,QAGA,OAEvCvnD,KAAK6f,MAAM9N,YAAY/R,KAAK0qE,kBAGLnkE,SAArBvG,KAAK2qE,cACP3qE,KAAK2qE,YAAc94D,SAASM,cAAc,OAC1CnS,KAAK2qE,YAAY5iE,UAAY,gCAE3B/H,KAAK2qE,YAAYn9D,MAAMo6B,QADJ,GAAjB5nC,KAAKunD,SAC0B,OAGA,QAEnCvnD,KAAK6f,MAAM9N,YAAY/R,KAAK2qE,cAGRpkE,SAAlBvG,KAAK4qE,WACP5qE,KAAK4qE,SAAW/4D,SAASM,cAAc,OACvCnS,KAAK4qE,SAAS7iE,UAAY,gCAC1B/H,KAAK4qE,SAASp9D,MAAMo6B,QAAU5nC,KAAK0qE,gBAAgBl9D,MAAMo6B,QACzD5nC,KAAK6f,MAAM9N,YAAY/R,KAAK4qE,WAI9B5qE,KAAK+pE,WAAWH,GAGhB5pE,KAAKwpD,yBAGwBjjD,SAAzBvG,KAAK0qE,kBAEP1qE,KAAKwpD,wBAGLxpD,KAAK6f,MAAMpO,YAAYzR,KAAK0qE,iBAC5B1qE,KAAK6f,MAAMpO,YAAYzR,KAAK2qE,aAC5B3qE,KAAK6f,MAAMpO,YAAYzR,KAAK4qE,UAE5B5qE,KAAK0qE,gBAAkBnkE,OACvBvG,KAAK2qE,YAAcpkE,OACnBvG,KAAK4qE,SAAWrkE,OAEhBvG,KAAKkqE,YAAYN,KAWvBhqE,EAAQioD,wBAA0B,WAChC7nD,KAAK+pE,WAAWF,GAEhB7pE,KAAK6qE,mBACoC,GAArC7qE,KAAKohD,UAAUrB,WAAW/wC,SAC5BhP,KAAK8qE,2BAUTlrE,EAAQmjD,qBAAuB,WAC7B/iD,KAAK+pE,WAAWD,KAMd,SAASjqE,EAAQD,EAASM,GAiB9B,QAAS6kD,GAAUjrC,GACjB9Z,KAAKsyD,QAAS,EAEdtyD,KAAKswB,KACHxW,UAAWA,GAGb9Z,KAAKswB,IAAIy6C,QAAUl5D,SAASM,cAAc,OAC1CnS,KAAKswB,IAAIy6C,QAAQhjE,UAAY,UAE7B/H,KAAKswB,IAAIxW,UAAU/H,YAAY/R,KAAKswB,IAAIy6C,SAExC/qE,KAAK8D,OAASwhC,EAAOtlC,KAAKswB,IAAIy6C,SAAUvlC,iBAAiB,IACzDxlC,KAAK8D,OAAO+P,GAAG,MAAO7T,KAAKgrE,cAAc31C,KAAKr1B,MAG9C,IAAIyU,GAAKzU,KACLuiE,GACF,QAAS,QACT,YAAa,OACb,YAAa,OAAQ,UACrB,aAAc,iBAEhBA,GAAOh6D,QAAQ,SAAUiB,GACvBiL,EAAG3Q,OAAO+P,GAAGrK,EAAO,SAAUA,GAC5BA,EAAMm8B,sBAKV3lC,KAAKirE,aAAe3lC,EAAO79B,QAAS+9B,iBAAiB,IACrDxlC,KAAKirE,aAAap3D,GAAG,MAAO,SAAUrK,GAE/B0hE,EAAW1hE,EAAMG,OAAQmQ,IAC5BrF,EAAG02D,eAIe5kE,SAAlBvG,KAAK6kD,UACP7kD,KAAK6kD,SAASjxC,UAEhB5T,KAAK6kD,SAAWA,IAGhB7kD,KAAKorE,YAAcprE,KAAKmrE,WAAW91C,KAAKr1B,MAiF1C,QAASkrE,GAAWpiE,EAASg8B,GAC3B,KAAOh8B,GAAS,CACd,GAAIA,IAAYg8B,EACd,OAAO,CAETh8B,GAAUA,EAAQgB,WAEpB,OAAO,EAnJT,GAAI+6C,GAAW3kD,EAAoB,IAC/Bod,EAAUpd,EAAoB,IAC9BolC,EAASplC,EAAoB,IAC7BS,EAAOT,EAAoB,EA4D/Bod,GAAQynC,EAAUtxC,WAGlBsxC,EAAU3qB,QAAU,KAKpB2qB,EAAUtxC,UAAUG,QAAU,WAC5B5T,KAAKmrE,aAGLnrE,KAAKswB,IAAIy6C,QAAQjhE,WAAW2H,YAAYzR,KAAKswB,IAAIy6C,SAGjD/qE,KAAK8D,OAAS,KACd9D,KAAKirE,aAAe,MAQtBlmB,EAAUtxC,UAAU43D,SAAW,WAEzBtmB,EAAU3qB,SACZ2qB,EAAU3qB,QAAQ+wC,aAEpBpmB,EAAU3qB,QAAUp6B,KAEpBA,KAAKsyD,QAAS,EACdtyD,KAAKswB,IAAIy6C,QAAQv9D,MAAMo6B,QAAU,OACjCjnC,EAAKmH,aAAa9H,KAAKswB,IAAIxW,UAAW,cAEtC9Z,KAAKouB,KAAK,UACVpuB,KAAKouB,KAAK,YAIVpuB,KAAK6kD,SAASxvB,KAAK,MAAOr1B,KAAKorE,cAOjCrmB,EAAUtxC,UAAU03D,WAAa,WAC/BnrE,KAAKsyD,QAAS,EACdtyD,KAAKswB,IAAIy6C,QAAQv9D,MAAMo6B,QAAU,GACjCjnC,EAAKyH,gBAAgBpI,KAAKswB,IAAIxW,UAAW,cACzC9Z,KAAK6kD,SAASymB,OAAO,MAAOtrE,KAAKorE,aAEjCprE,KAAKouB,KAAK,UACVpuB,KAAKouB,KAAK,eAQZ22B,EAAUtxC,UAAUu3D,cAAgB,SAAUxhE,GAE5CxJ,KAAKqrE,WACL7hE,EAAMm8B,mBAsBR9lC,EAAOD,QAAUmlD,GAKb,SAASllD,GAeb,QAASyd,GAAQgG,GACf,MAAIA,GAAY8tC,EAAM9tC,GAAtB,OAWF,QAAS8tC,GAAM9tC,GACb,IAAK,GAAI1a,KAAO0U,GAAQ7J,UACtB6P,EAAI1a,GAAO0U,EAAQ7J,UAAU7K,EAE/B,OAAO0a,GAxBTzjB,EAAOD,QAAU0d,EAoCjBA,EAAQ7J,UAAUI,GAClByJ,EAAQ7J,UAAU5K,iBAAmB,SAASW,EAAOiQ,GAInD,MAHAzZ,MAAKurE,WAAavrE,KAAKurE,gBACtBvrE,KAAKurE,WAAW/hE,GAASxJ,KAAKurE,WAAW/hE,QACvCtB,KAAKuR,GACDzZ,MAaTsd,EAAQ7J,UAAU+3D,KAAO,SAAShiE,EAAOiQ,GAIvC,QAAS5F,KACP43D,EAAKz3D,IAAIxK,EAAOqK,GAChB4F,EAAGnB,MAAMtY,KAAMyF,WALjB,GAAIgmE,GAAOzrE,IAUX,OATAA,MAAKurE,WAAavrE,KAAKurE,eAOvB13D,EAAG4F,GAAKA,EACRzZ,KAAK6T,GAAGrK,EAAOqK,GACR7T,MAaTsd,EAAQ7J,UAAUO,IAClBsJ,EAAQ7J,UAAUi4D,eAClBpuD,EAAQ7J,UAAUk4D,mBAClBruD,EAAQ7J,UAAUpK,oBAAsB,SAASG,EAAOiQ,GAItD,GAHAzZ,KAAKurE,WAAavrE,KAAKurE,eAGnB,GAAK9lE,UAAUC,OAEjB,MADA1F,MAAKurE,cACEvrE,IAIT,IAAI4rE,GAAY5rE,KAAKurE,WAAW/hE,EAChC,KAAKoiE,EAAW,MAAO5rE,KAGvB,IAAI,GAAKyF,UAAUC,OAEjB,aADO1F,MAAKurE,WAAW/hE,GAChBxJ,IAKT,KAAK,GADD6rE,GACKtmE,EAAI,EAAGA,EAAIqmE,EAAUlmE,OAAQH,IAEpC,GADAsmE,EAAKD,EAAUrmE,GACXsmE,IAAOpyD,GAAMoyD,EAAGpyD,KAAOA,EAAI,CAC7BmyD,EAAUtjE,OAAO/C,EAAG,EACpB,OAGJ,MAAOvF,OAWTsd,EAAQ7J,UAAU2a,KAAO,SAAS5kB,GAChCxJ,KAAKurE,WAAavrE,KAAKurE,cACvB,IAAI/xD,MAAU8jB,MAAM/8B,KAAKkF,UAAW,GAChCmmE,EAAY5rE,KAAKurE,WAAW/hE,EAEhC,IAAIoiE,EAAW,CACbA,EAAYA,EAAUtuC,MAAM,EAC5B,KAAK,GAAI/3B,GAAI,EAAGC,EAAMomE,EAAUlmE,OAAYF,EAAJD,IAAWA,EACjDqmE,EAAUrmE,GAAG+S,MAAMtY,KAAMwZ,GAI7B,MAAOxZ,OAWTsd,EAAQ7J,UAAU6uD,UAAY,SAAS94D,GAErC,MADAxJ,MAAKurE,WAAavrE,KAAKurE,eAChBvrE,KAAKurE,WAAW/hE,QAWzB8T,EAAQ7J,UAAUq4D,aAAe,SAAStiE,GACxC,QAAUxJ,KAAKsiE,UAAU94D,GAAO9D,SAM9B,SAAS7F,EAAQD,GAErB,GAAImsE,GAAgCC,EAA8BC,GAOjE,SAAUvsE,EAAMC,GAGXqsE,KAAmCD,EAAiC,EAAWE,EAA2E,kBAAnCF,GAAiDA,EAA+BzzD,MAAM1Y,EAASosE,GAAiCD,IAAmExlE,SAAlC0lE,IAAgDpsE,EAAOD,QAAUqsE,KAU7VjsE,KAAM,WAEN,QAAS6kD,GAAS91C,GAChB,GAKIxJ,GALAgE,EAAiBwF,GAAWA,EAAQxF,iBAAkB,EAEtD2iE,KACAC,GAAUC,WAAYC,UACtBC,IAIJ,KAAK/mE,EAAI,GAAS,KAALA,EAAUA,IAAM+mE,EAAMnoE,OAAOooE,aAAahnE,KAAOinE,KAAK,IAAMjnE,EAAI,IAAKqM,OAAO,EAEzF,KAAKrM,EAAI,GAAS,IAALA,EAASA,IAAM+mE,EAAMnoE,OAAOooE,aAAahnE,KAAOinE,KAAKjnE,EAAGqM,OAAO,EAE5E,KAAKrM,EAAI,EAAS,GAALA,EAAUA,IAAM+mE,EAAM,GAAK/mE,IAAMinE,KAAK,GAAKjnE,EAAGqM,OAAO,EAElE,KAAKrM,EAAI,EAAS,IAALA,EAAWA,IAAM+mE,EAAM,IAAM/mE,IAAMinE,KAAK,IAAMjnE,EAAGqM,OAAO,EAErE,KAAKrM,EAAI,EAAS,GAALA,EAAUA,IAAM+mE,EAAM,MAAQ/mE,IAAMinE,KAAK,GAAKjnE,EAAGqM,OAAO,EAGrE06D,GAAM,SAAWE,KAAK,IAAK56D,OAAO,GAClC06D,EAAM,SAAWE,KAAK,IAAK56D,OAAO,GAClC06D,EAAM,SAAWE,KAAK,IAAK56D,OAAO,GAClC06D,EAAM,SAAWE,KAAK,IAAK56D,OAAO,GAClC06D,EAAM,SAAWE,KAAK,IAAK56D,OAAO,GAElC06D,EAAY,MAAME,KAAK,GAAI56D,OAAO,GAClC06D,EAAU,IAAQE,KAAK,GAAI56D,OAAO,GAClC06D,EAAa,OAAKE,KAAK,GAAI56D,OAAO,GAClC06D,EAAY,MAAME,KAAK,GAAI56D,OAAO,GAElC06D,EAAa,OAAKE,KAAK,GAAI56D,OAAO,GAClC06D,EAAa,OAAKE,KAAK,GAAI56D,OAAO,GAClC06D,EAAa,OAAKE,KAAK,GAAI56D,MAAOrL,QAClC+lE,EAAW,KAAOE,KAAK,GAAI56D,OAAO,GAClC06D,EAAiB,WAAKE,KAAK,EAAG56D,OAAO,GACrC06D,EAAW,KAAWE,KAAK,EAAG56D,OAAO,GACrC06D,EAAY,MAAUE,KAAK,GAAI56D,OAAO,GACtC06D,EAAW,KAAWE,KAAK,GAAI56D,OAAO,GACtC06D,EAAM,WAAgBE,KAAK,GAAI56D,OAAO,GACtC06D,EAAc,QAAQE,KAAK,GAAI56D,OAAO,GACtC06D,EAAgB,UAAME,KAAK,GAAI56D,OAAO,GAEtC06D,EAAM,MAAYE,KAAK,IAAK56D,OAAO,GACnC06D,EAAM,MAAYE,KAAK,IAAK56D,OAAO,GACnC06D,EAAM,MAAYE,KAAK,IAAK56D,OAAO,GACnC06D,EAAM,MAAYE,KAAK,IAAK56D,OAAO,EAInC,IAAI66D,GAAO,SAASjjE,GAAQkjE,EAAYljE,EAAM,YAC1CmjE,EAAK,SAASnjE,GAAQkjE,EAAYljE,EAAM,UAGxCkjE,EAAc,SAASljE,EAAM3C,GAC/B,GAAoCN,SAAhC4lE,EAAOtlE,GAAM2C,EAAMojE,SAAwB,CAE7C,IAAK,GADDC,GAAQV,EAAOtlE,GAAM2C,EAAMojE,SACtBrnE,EAAI,EAAGA,EAAIsnE,EAAMnnE,OAAQH,IACTgB,SAAnBsmE,EAAMtnE,GAAGqM,MACXi7D,EAAMtnE,GAAGkU,GAAGjQ,GAEa,GAAlBqjE,EAAMtnE,GAAGqM,OAAmC,GAAlBpI,EAAMuqC,SACvC84B,EAAMtnE,GAAGkU,GAAGjQ,GAEa,GAAlBqjE,EAAMtnE,GAAGqM,OAAoC,GAAlBpI,EAAMuqC,UACxC84B,EAAMtnE,GAAGkU,GAAGjQ,EAIM,IAAlBD,GACFC,EAAMD,kBA4FZ,OAtFA2iE,GAAiB72C,KAAO,SAASzsB,EAAKJ,EAAU3B,GAI9C,GAHaN,SAATM,IACFA,EAAO,WAEUN,SAAf+lE,EAAM1jE,GACR,KAAM,IAAIhF,OAAM,oBAAsBgF,EAEFrC,UAAlC4lE,EAAOtlE,GAAMylE,EAAM1jE,GAAK4jE,QAC1BL,EAAOtlE,GAAMylE,EAAM1jE,GAAK4jE,UAE1BL,EAAOtlE,GAAMylE,EAAM1jE,GAAK4jE,MAAMtkE,MAAMuR,GAAGjR,EAAUoJ,MAAM06D,EAAM1jE,GAAKgJ,SAKpEs6D,EAAiBY,QAAU,SAAStkE,EAAU3B,GAC/BN,SAATM,IACFA,EAAO,UAET,KAAK,GAAI+B,KAAO0jE,GACVA,EAAMzmE,eAAe+C,IACvBsjE,EAAiB72C,KAAKzsB,EAAIJ,EAAS3B,IAMzCqlE,EAAiBa,OAAS,SAASvjE,GACjC,IAAK,GAAIZ,KAAO0jE,GACd,GAAIA,EAAMzmE,eAAe+C,GAAM,CAC7B,GAAsB,GAAlBY,EAAMuqC,UAAwC,GAApBu4B,EAAM1jE,GAAKgJ,OAAiBpI,EAAMojE,SAAWN,EAAM1jE,GAAK4jE,KACpF,MAAO5jE,EAEJ,IAAsB,GAAlBY,EAAMuqC,UAAyC,GAApBu4B,EAAM1jE,GAAKgJ,OAAkBpI,EAAMojE,SAAWN,EAAM1jE,GAAK4jE,KAC3F,MAAO5jE,EAEJ,IAAIY,EAAMojE,SAAWN,EAAM1jE,GAAK4jE,MAAe,SAAP5jE,EAC3C,MAAOA,GAIb,MAAO,wCAITsjE,EAAiBZ,OAAS,SAAS1iE,EAAKJ,EAAU3B,GAIhD,GAHaN,SAATM,IACFA,EAAO,WAEUN,SAAf+lE,EAAM1jE,GACR,KAAM,IAAIhF,OAAM,oBAAsBgF,EAExC,IAAiBrC,SAAbiC,EAAwB,CAC1B,GAAIwkE,MACAH,EAAQV,EAAOtlE,GAAMylE,EAAM1jE,GAAK4jE,KACpC,IAAcjmE,SAAVsmE,EACF,IAAK,GAAItnE,GAAI,EAAGA,EAAIsnE,EAAMnnE,OAAQH,KAC1BsnE,EAAMtnE,GAAGkU,IAAMjR,GAAYqkE,EAAMtnE,GAAGqM,OAAS06D,EAAM1jE,GAAKgJ,QAC5Do7D,EAAY9kE,KAAKikE,EAAOtlE,GAAMylE,EAAM1jE,GAAK4jE,MAAMjnE,GAIrD4mE,GAAOtlE,GAAMylE,EAAM1jE,GAAK4jE,MAAQQ,MAGhCb,GAAOtlE,GAAMylE,EAAM1jE,GAAK4jE,UAK5BN,EAAiBrjB,MAAQ,WACvBsjB,GAAUC,WAAYC,WAIxBH,EAAiBt4D,QAAU,WACzBu4D,GAAUC,WAAYC,UACtB5kE,OAAO4B,oBAAoB,UAAWojE,GAAM,GAC5ChlE,OAAO4B,oBAAoB,QAASsjE,GAAI,IAI1CllE,OAAOoB,iBAAiB,UAAU4jE,GAAK,GACvChlE,OAAOoB,iBAAiB,QAAQ8jE,GAAG,GAG5BT,EAGT,MAAOrnB,MAQL,SAAShlD,EAAQD,EAASM,GAE9B,GAAI+rE,IAA0D,SAASgB,EAAQptE,IAM/E,SAAW0G,GA6RP,QAAS2mE,GAAI5nE,EAAGa,EAAG1F,GACf,OAAQgF,UAAUC,QACd,IAAK,GAAG,MAAY,OAALJ,EAAYA,EAAIa,CAC/B,KAAK,GAAG,MAAY,OAALb,EAAYA,EAAS,MAALa,EAAYA,EAAI1F,CAC/C,SAAS,KAAM,IAAImD,OAAM,iBAIjC,QAASupE,GAAW7nE,EAAGa,GACnB,MAAON,IAAetF,KAAK+E,EAAGa,GAGlC,QAASinE,KAGL,OACIC,OAAQ,EACRC,gBACAC,eACAnpD,SAAW,GACXopD,cAAgB,EAChBC,WAAY,EACZC,aAAe,KACfC,eAAgB,EAChBC,iBAAkB,EAClBC,KAAK,GAIb,QAASC,GAASC,GACVlqE,GAAOmqE,+BAAgC,GAChB,mBAAZ/0C,UAA2BA,QAAQg1C,MAC9Ch1C,QAAQg1C,KAAK,wBAA0BF,GAI/C,QAASG,GAAUH,EAAKt0D,GACpB,GAAI00D,IAAY,CAChB,OAAO9oE,GAAO,WAKV,MAJI8oE,KACAL,EAASC,GACTI,GAAY,GAET10D,EAAGnB,MAAMtY,KAAMyF,YACvBgU,GAGP,QAAS20D,GAAgB53D,EAAMu3D,GACtBM,GAAa73D,KACds3D,EAASC,GACTM,GAAa73D,IAAQ,GAI7B,QAAS83D,GAASC,EAAMh3D,GACpB,MAAO,UAAUjS,GACb,MAAOkpE,GAAaD,EAAKhuE,KAAKP,KAAMsF,GAAIiS,IAGhD,QAASk3D,GAAgBF,EAAMG,GAC3B,MAAO,UAAUppE,GACb,MAAOtF,MAAK2uE,aAAaC,QAAQL,EAAKhuE,KAAKP,KAAMsF,GAAIopE,IAmB7D,QAASG,MAIT,QAASC,GAAOC,EAAQC,GAChBA,KAAiB,GACjBC,EAAcF,GAElBG,EAAWlvE,KAAM+uE,GACjB/uE,KAAKw4B,GAAK,GAAIn0B,OAAM0qE,EAAOv2C,IAI/B,QAAS22C,GAAS/+D,GACd,GAAIg/D,GAAkBC,EAAqBj/D,GACvCk/D,EAAQF,EAAgBv2C,MAAQ,EAChC02C,EAAWH,EAAgBI,SAAW,EACtCC,EAASL,EAAgBp2C,OAAS,EAClC02C,EAAQN,EAAgBO,MAAQ,EAChCC,EAAOR,EAAgBz2C,KAAO,EAC9BgF,EAAQyxC,EAAgBS,MAAQ,EAChCjyC,EAAUwxC,EAAgBU,QAAU,EACpCjyC,EAAUuxC,EAAgBW,QAAU,EACpCjyC,EAAesxC,EAAgBY,aAAe,CAGlDhwE,MAAKiwE,eAAiBnyC,EACR,IAAVD,EACU,IAAVD,EACQ,KAARD,EAGJ39B,KAAKkwE,OAASN,EACF,EAARF,EAIJ1vE,KAAKmwE,SAAWV,EACD,EAAXF,EACQ,GAARD,EAEJtvE,KAAKkT,SAELlT,KAAKowE,QAAUvsE,GAAO8qE,aAEtB3uE,KAAKqwE,UAQT,QAAShrE,GAAOC,EAAGa,GACf,IAAK,GAAIZ,KAAKY,GACNgnE,EAAWhnE,EAAGZ,KACdD,EAAEC,GAAKY,EAAEZ,GAYjB,OARI4nE,GAAWhnE,EAAG,cACdb,EAAEF,SAAWe,EAAEf,UAGf+nE,EAAWhnE,EAAG,aACdb,EAAEyB,QAAUZ,EAAEY,SAGXzB,EAGX,QAAS4pE,GAAWtlD,EAAID,GACpB,GAAIpkB,GAAGK,EAAM0qE,CAiCb,IA/BqC,mBAA1B3mD,GAAK4mD,mBACZ3mD,EAAG2mD,iBAAmB5mD,EAAK4mD,kBAER,mBAAZ5mD,GAAK6mD,KACZ5mD,EAAG4mD,GAAK7mD,EAAK6mD,IAEM,mBAAZ7mD,GAAK8mD,KACZ7mD,EAAG6mD,GAAK9mD,EAAK8mD,IAEM,mBAAZ9mD,GAAK+mD,KACZ9mD,EAAG8mD,GAAK/mD,EAAK+mD,IAEW,mBAAjB/mD,GAAKgnD,UACZ/mD,EAAG+mD,QAAUhnD,EAAKgnD,SAEG,mBAAdhnD,GAAKinD,OACZhnD,EAAGgnD,KAAOjnD,EAAKinD,MAEQ,mBAAhBjnD,GAAKknD,SACZjnD,EAAGinD,OAASlnD,EAAKknD,QAEO,mBAAjBlnD,GAAKmnD,UACZlnD,EAAGknD,QAAUnnD,EAAKmnD,SAEE,mBAAbnnD,GAAKonD,MACZnnD,EAAGmnD,IAAMpnD,EAAKonD,KAEU,mBAAjBpnD,GAAKymD,UACZxmD,EAAGwmD,QAAUzmD,EAAKymD,SAGlBY,GAAiBtrE,OAAS,EAC1B,IAAKH,IAAKyrE,IACNprE,EAAOorE,GAAiBzrE,GACxB+qE,EAAM3mD,EAAK/jB,GACQ,mBAAR0qE,KACP1mD,EAAGhkB,GAAQ0qE,EAKvB,OAAO1mD,GAGX,QAASqnD,GAASC,GACd,MAAa,GAATA,EACOjsE,KAAKuyC,KAAK05B,GAEVjsE,KAAKC,MAAMgsE,GAM1B,QAAS1C,GAAa0C,EAAQC,EAAcC,GAIxC,IAHA,GAAIC,GAAS,GAAKpsE,KAAKmmB,IAAI8lD,GACvB3hD,EAAO2hD,GAAU,EAEdG,EAAO3rE,OAASyrE,GACnBE,EAAS,IAAMA,CAEnB,QAAQ9hD,EAAQ6hD,EAAY,IAAM,GAAM,KAAOC,EAGnD,QAASC,GAA0BC,EAAM5rE,GACrC,GAAI6rE,IAAO1zC,aAAc,EAAG2xC,OAAQ,EAUpC,OARA+B,GAAI/B,OAAS9pE,EAAMqzB,QAAUu4C,EAAKv4C,QACC,IAA9BrzB,EAAMkzB,OAAS04C,EAAK14C,QACrB04C,EAAK74C,QAAQnlB,IAAIi+D,EAAI/B,OAAQ,KAAKgC,QAAQ9rE,MACxC6rE,EAAI/B,OAGV+B,EAAI1zC,cAAgBn4B,GAAU4rE,EAAK74C,QAAQnlB,IAAIi+D,EAAI/B,OAAQ,KAEpD+B,EAGX,QAASE,GAAkBH,EAAM5rE,GAC7B,GAAI6rE,EAUJ,OATA7rE,GAAQgsE,EAAOhsE,EAAO4rE,GAClBA,EAAKK,SAASjsE,GACd6rE,EAAMF,EAA0BC,EAAM5rE,IAEtC6rE,EAAMF,EAA0B3rE,EAAO4rE,GACvCC,EAAI1zC,cAAgB0zC,EAAI1zC,aACxB0zC,EAAI/B,QAAU+B,EAAI/B,QAGf+B,EAIX,QAASK,GAAYr2C,EAAWhlB,GAC5B,MAAO,UAAU85D,EAAK5B,GAClB,GAAIoD,GAAKC,CAUT,OARe,QAAXrD,GAAoBjqE,OAAOiqE,KAC3BN,EAAgB53D,EAAM,YAAcA,EAAQ,uDAAyDA,EAAO,qBAC5Gu7D,EAAMzB,EAAKA,EAAM5B,EAAQA,EAASqD,GAGtCzB,EAAqB,gBAARA,IAAoBA,EAAMA,EACvCwB,EAAMjuE,GAAOuM,SAASkgE,EAAK5B,GAC3BsD,EAAgChyE,KAAM8xE,EAAKt2C,GACpCx7B,MAIf,QAASgyE,GAAgCC,EAAK7hE,EAAU8hE,EAAUC,GAC9D,GAAIr0C,GAAe1tB,EAAS6/D,cACxBL,EAAOx/D,EAAS8/D,MAChBT,EAASr/D,EAAS+/D,OACtBgC,GAA+B,MAAhBA,GAAuB,EAAOA,EAEzCr0C,GACAm0C,EAAIz5C,GAAG45C,SAASH,EAAIz5C,GAAKsF,EAAeo0C,GAExCtC,GACAyC,GAAUJ,EAAK,OAAQK,GAAUL,EAAK,QAAUrC,EAAOsC,GAEvDzC,GACA8C,GAAeN,EAAKK,GAAUL,EAAK,SAAWxC,EAASyC,GAEvDC,GACAtuE,GAAOsuE,aAAaF,EAAKrC,GAAQH,GAKzC,QAASxpE,GAAQusE,GACb,MAAiD,mBAA1ClsE,OAAOmN,UAAUrO,SAAS7E,KAAKiyE,GAG1C,QAASpuE,GAAOouE,GACZ,MAAiD,kBAA1ClsE,OAAOmN,UAAUrO,SAAS7E,KAAKiyE,IAClCA,YAAiBnuE,MAIzB,QAASouE,GAAcvS,EAAQC,EAAQuS,GACnC,GAGIntE,GAHAC,EAAMP,KAAKwG,IAAIy0D,EAAOx6D,OAAQy6D,EAAOz6D,QACrCitE,EAAa1tE,KAAKmmB,IAAI80C,EAAOx6D,OAASy6D,EAAOz6D,QAC7CktE,EAAQ,CAEZ,KAAKrtE,EAAI,EAAOC,EAAJD,EAASA,KACZmtE,GAAexS,EAAO36D,KAAO46D,EAAO56D,KACnCmtE,GAAeG,EAAM3S,EAAO36D,MAAQstE,EAAM1S,EAAO56D,MACnDqtE,GAGR,OAAOA,GAAQD,EAGnB,QAASG,GAAeC,GACpB,GAAIA,EAAO,CACP,GAAIC,GAAUD,EAAMliB,cAAczkD,QAAQ,QAAS,KACnD2mE,GAAQE,GAAYF,IAAUG,GAAeF,IAAYA,EAE7D,MAAOD,GAGX,QAAS1D,GAAqB8D,GAC1B,GACIC,GACAxtE,EAFAwpE,IAIJ,KAAKxpE,IAAQutE,GACLhG,EAAWgG,EAAavtE,KACxBwtE,EAAiBN,EAAeltE,GAC5BwtE,IACAhE,EAAgBgE,GAAkBD,EAAYvtE,IAK1D,OAAOwpE,GAGX,QAASiE,GAASjkE,GACd,GAAImI,GAAO+7D,CAEX,IAA8B,IAA1BlkE,EAAM1I,QAAQ,QACd6Q,EAAQ,EACR+7D,EAAS,UAER,CAAA,GAA+B,IAA3BlkE,EAAM1I,QAAQ,SAKnB,MAJA6Q,GAAQ,GACR+7D,EAAS,QAMbzvE,GAAOuL,GAAS,SAAUi1B,EAAQh8B,GAC9B,GAAI9C,GAAGguE,EACHh6D,EAAS1V,GAAOusE,QAAQhhE,GACxBokE,IAYJ,IAVsB,gBAAXnvC,KACPh8B,EAAQg8B,EACRA,EAAS99B,GAGbgtE,EAAS,SAAUhuE,GACf,GAAI/E,GAAIqD,KAAS4vE,MAAMC,IAAIJ,EAAQ/tE,EACnC,OAAOgU,GAAOhZ,KAAKsD,GAAOusE,QAAS5vE,EAAG6jC,GAAU,KAGvC,MAATh8B,EACA,MAAOkrE,GAAOlrE,EAGd,KAAK9C,EAAI,EAAOgS,EAAJhS,EAAWA,IACnBiuE,EAAQtrE,KAAKqrE,EAAOhuE,GAExB,OAAOiuE,IAKnB,QAASX,GAAMc,GACX,GAAIC,IAAiBD,EACjBvsE,EAAQ,CAUZ,OARsB,KAAlBwsE,GAAuBC,SAASD,KAE5BxsE,EADAwsE,GAAiB,EACT3uE,KAAKC,MAAM0uE,GAEX3uE,KAAKuyC,KAAKo8B,IAInBxsE,EAGX,QAAS0sE,GAAYj7C,EAAMG,GACvB,MAAO,IAAI30B,MAAKA,KAAK0vE,IAAIl7C,EAAMG,EAAQ,EAAG,IAAIg7C,aAGlD,QAASC,GAAYp7C,EAAMq7C,EAAKC,GAC5B,MAAOC,IAAWvwE,IAAQg1B,EAAM,GAAI,GAAKq7C,EAAMC,IAAOD,EAAKC,GAAKxE,KAGpE,QAAS0E,GAAWx7C,GAChB,MAAOy7C,GAAWz7C,GAAQ,IAAM,IAGpC,QAASy7C,GAAWz7C,GAChB,MAAQA,GAAO,IAAM,GAAKA,EAAO,MAAQ,GAAMA,EAAO,MAAQ,EAGlE,QAASo2C,GAAczuE,GACnB,GAAI4jB,EACA5jB,GAAE+zE,IAAyB,KAAnB/zE,EAAEuwE,IAAI3sD,WACdA,EACI5jB,EAAE+zE,GAAGhyC,IAAS,GAAK/hC,EAAE+zE,GAAGhyC,IAAS,GAAKA,GACtC/hC,EAAE+zE,GAAGC,IAAQ,GAAKh0E,EAAE+zE,GAAGC,IAAQV,EAAYtzE,EAAE+zE,GAAG/xC,IAAOhiC,EAAE+zE,GAAGhyC,KAAUiyC,GACtEh0E,EAAE+zE,GAAGlyC,IAAQ,GAAK7hC,EAAE+zE,GAAGlyC,IAAQ,IACX,KAAf7hC,EAAE+zE,GAAGlyC,MAAkC,IAAjB7hC,EAAE+zE,GAAGnyC,KACY,IAAjB5hC,EAAE+zE,GAAGpyC,KACiB,IAAtB3hC,EAAE+zE,GAAGryC,KAAuBG,GACvD7hC,EAAE+zE,GAAGnyC,IAAU,GAAK5hC,EAAE+zE,GAAGnyC,IAAU,GAAKA,GACxC5hC,EAAE+zE,GAAGpyC,IAAU,GAAK3hC,EAAE+zE,GAAGpyC,IAAU,GAAKA,GACxC3hC,EAAE+zE,GAAGryC,IAAe,GAAK1hC,EAAE+zE,GAAGryC,IAAe,IAAMA,GACnD,GAEA1hC,EAAEuwE,IAAI0D,qBAAkCjyC,GAAXpe,GAAmBA,EAAWowD,MAC3DpwD,EAAWowD,IAGfh0E,EAAEuwE,IAAI3sD,SAAWA,GAIzB,QAASswD,GAAQl0E,GAiBb,MAhBkB,OAAdA,EAAEm0E,WACFn0E,EAAEm0E,UAAYlwE,MAAMjE,EAAEg4B,GAAGo8C,YACrBp0E,EAAEuwE,IAAI3sD,SAAW,IAChB5jB,EAAEuwE,IAAI1D,QACN7sE,EAAEuwE,IAAIrD,eACNltE,EAAEuwE,IAAItD,YACNjtE,EAAEuwE,IAAIpD,gBACNntE,EAAEuwE,IAAInD,gBAEPptE,EAAEmwE,UACFnwE,EAAEm0E,SAAWn0E,EAAEm0E,UACa,IAAxBn0E,EAAEuwE,IAAIvD,eACwB,IAA9BhtE,EAAEuwE,IAAIzD,aAAa5nE,QACnBlF,EAAEuwE,IAAI8D,UAAYtuE,IAGvB/F,EAAEm0E,SAGb,QAASG,GAAgBlsE,GACrB,MAAOA,GAAMA,EAAIioD,cAAczkD,QAAQ,IAAK,KAAOxD,EAMvD,QAASmsE,GAAaC,GAGlB,IAFA,GAAW5oD,GAAGxD,EAAMic,EAAQ58B,EAAxB1C,EAAI,EAEDA,EAAIyvE,EAAMtvE,QAAQ,CAKrB,IAJAuC,EAAQ6sE,EAAgBE,EAAMzvE,IAAI0C,MAAM,KACxCmkB,EAAInkB,EAAMvC,OACVkjB,EAAOksD,EAAgBE,EAAMzvE,EAAI,IACjCqjB,EAAOA,EAAOA,EAAK3gB,MAAM,KAAO,KACzBmkB,EAAI,GAAG,CAEV,GADAyY,EAASowC,EAAWhtE,EAAMq1B,MAAM,EAAGlR,GAAGjkB,KAAK,MAEvC,MAAO08B,EAEX,IAAIjc,GAAQA,EAAKljB,QAAU0mB,GAAKqmD,EAAcxqE,EAAO2gB,GAAM,IAASwD,EAAI,EAEpE,KAEJA,KAEJ7mB,IAEJ,MAAO,MAGX,QAAS0vE,GAAWz+D,GAChB,GAAI0+D,GAAY,IAChB,KAAKtwC,GAAQpuB,IAAS2+D,GAClB,IACID,EAAYrxE,GAAOghC,UACjB,WAAkC,GAAIr4B,GAAI,GAAI5I,OAAM,gCAAiE,MAA7B4I,GAAEggE,KAAO,mBAA0BhgE,KAE7H3I,GAAOghC,OAAOqwC,GAChB,MAAO1oE,IAEb,MAAOo4B,IAAQpuB,GAInB,QAASm7D,GAAOa,EAAO4C,GACnB,GAAI5D,GAAK3kD,CACT,OAAIuoD,GAAMvE,QACNW,EAAM4D,EAAM18C,QACZ7L,GAAQhpB,GAAOmD,SAASwrE,IAAUpuE,EAAOouE,IAChCA,GAAS3uE,GAAO2uE,KAAYhB,EAErCA,EAAIh5C,GAAG45C,SAASZ,EAAIh5C,GAAK3L,GACzBhpB,GAAOsuE,aAAaX,GAAK,GAClBA,GAEA3tE,GAAO2uE,GAAO6C,QAoN7B,QAASC,GAAuB9C,GAC5B,MAAIA,GAAMluE,MAAM,YACLkuE,EAAMpmE,QAAQ,WAAY,IAE9BomE,EAAMpmE,QAAQ,MAAO,IAGhC,QAASmpE,GAAmBlxC,GACxB,GAA4C9+B,GAAGG,EAA3CgD,EAAQ27B,EAAO//B,MAAMkxE,GAEzB,KAAKjwE,EAAI,EAAGG,EAASgD,EAAMhD,OAAYA,EAAJH,EAAYA,IAEvCmD,EAAMnD,GADNkwE,GAAqB/sE,EAAMnD,IAChBkwE,GAAqB/sE,EAAMnD,IAE3B+vE,EAAuB5sE,EAAMnD,GAIhD,OAAO,UAAU0sE,GACb,GAAIZ,GAAS,EACb,KAAK9rE,EAAI,EAAOG,EAAJH,EAAYA,IACpB8rE,GAAU3oE,EAAMnD,YAAcyrC,UAAWtoC,EAAMnD,GAAGhF,KAAK0xE,EAAK5tC,GAAU37B,EAAMnD,EAEhF,OAAO8rE,IAKf,QAASqE,GAAal1E,EAAG6jC,GACrB,MAAK7jC,GAAEk0E,WAIPrwC,EAASsxC,EAAatxC,EAAQ7jC,EAAEmuE,cAE3BiH,GAAgBvxC,KACjBuxC,GAAgBvxC,GAAUkxC,EAAmBlxC,IAG1CuxC,GAAgBvxC,GAAQ7jC,IATpBA,EAAEmuE,aAAakH,cAY9B,QAASF,GAAatxC,EAAQQ,GAG1B,QAASixC,GAA4BtD,GACjC,MAAO3tC,GAAOkxC,eAAevD,IAAUA,EAH3C,GAAIjtE,GAAI,CAOR,KADAywE,GAAsBC,UAAY,EAC3B1wE,GAAK,GAAKywE,GAAsB1nE,KAAK+1B,IACxCA,EAASA,EAAOj4B,QAAQ4pE,GAAuBF,GAC/CE,GAAsBC,UAAY,EAClC1wE,GAAK,CAGT,OAAO8+B,GAUX,QAAS6xC,GAAsBtX,EAAOmQ,GAClC,GAAIzpE,GAAG+5D,EAAS0P,EAAO4B,OACvB,QAAQ/R,GACR,IAAK,IACD,MAAOuX,GACX,KAAK,OACD,MAAOC,GACX,KAAK,OACL,IAAK,OACL,IAAK,OACD,MAAO/W,GAASgX,GAAuBC,EAC3C,KAAK,IACL,IAAK,IACL,IAAK,IACD,MAAOC,GACX,KAAK,SACL,IAAK,QACL,IAAK,QACL,IAAK,QACD,MAAOlX,GAASmX,GAAsBC,EAC1C,KAAK,IACD,GAAIpX,EACA,MAAO8W,GAGf,KAAK,KACD,GAAI9W,EACA,MAAOqX,GAGf,KAAK,MACD,GAAIrX,EACA,MAAO+W,GAGf,KAAK,MACD,MAAOO,GACX,KAAK,MACL,IAAK,OACL,IAAK,KACL,IAAK,MACL,IAAK,OACD,MAAOC,GACX,KAAK,IACL,IAAK,IACD,MAAO7H,GAAOqB,QAAQyG,cAC1B,KAAK,IACD,MAAOC,GACX,KAAK,IACD,MAAOC,GACX,KAAK,IACL,IAAK,KACD,MAAOC,GACX,KAAK,IACD,MAAOC,GACX,KAAK,OACD,MAAOC,GACX,KAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACD,MAAO7X,GAASqX,GAAsBS,EAC1C,KAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACD,MAAOA,GACX,KAAK,KACD,MAAO9X,GAAS0P,EAAOqB,QAAQgH,cAAgBrI,EAAOqB,QAAQiH,oBAClE,SAEI,MADA/xE,GAAI,GAAIgyE,QAAOC,GAAaC,GAAe5Y,EAAMxyD,QAAQ,KAAM,KAAM,OAK7E,QAASqrE,GAA0BC,GAC/BA,EAASA,GAAU,EACnB,IAAIC,GAAqBD,EAAOpzE,MAAM0yE,QAClCY,EAAUD,EAAkBA,EAAkBjyE,OAAS,OACvDgI,GAASkqE,EAAU,IAAItzE,MAAMuzE,MAA0B,IAAK,EAAG,GAC/Dj6C,IAAuB,GAAXlwB,EAAM,IAAWmlE,EAAMnlE,EAAM,GAE7C,OAAoB,MAAbA,EAAM,IAAckwB,EAAUA,EAIzC,QAASk6C,GAAwBlZ,EAAO4T,EAAOzD,GAC3C,GAAIzpE,GAAGyyE,EAAgBhJ,EAAOwF,EAE9B,QAAQ3V,GAER,IAAK,IACY,MAAT4T,IACAuF,EAAcx1C,IAA8B,GAApBswC,EAAML,GAAS,GAE3C,MAEJ,KAAK,IACL,IAAK,KACY,MAATA,IACAuF,EAAcx1C,IAASswC,EAAML,GAAS,EAE1C,MACJ,KAAK,MACL,IAAK,OACDltE,EAAIypE,EAAOqB,QAAQ4H,YAAYxF,EAAO5T,EAAOmQ,EAAO4B,SAE3C,MAALrrE,EACAyyE,EAAcx1C,IAASj9B,EAEvBypE,EAAOgC,IAAIrD,aAAe8E,CAE9B,MAEJ,KAAK,IACL,IAAK,KACY,MAATA,IACAuF,EAAcvD,IAAQ3B,EAAML,GAEhC,MACJ,KAAK,KACY,MAATA,IACAuF,EAAcvD,IAAQ3B,EAAMxnD,SAChBmnD,EAAMluE,MAAM,WAAW,GAAI,KAE3C,MAEJ,KAAK,MACL,IAAK,OACY,MAATkuE,IACAzD,EAAOkJ,WAAapF,EAAML,GAG9B,MAEJ,KAAK,KACDuF,EAAcv1C,IAAQ3+B,GAAOq0E,kBAAkB1F,EAC/C,MACJ,KAAK,OACL,IAAK,QACL,IAAK,SACDuF,EAAcv1C,IAAQqwC,EAAML,EAC5B,MAEJ,KAAK,IACL,IAAK,IACDzD,EAAOoJ,MAAQpJ,EAAOqB,QAAQgI,KAAK5F,EACnC,MAEJ,KAAK,IACL,IAAK,KACDzD,EAAOgC,IAAI8D,SAAU,CAEzB,KAAK,IACL,IAAK,KACDkD,EAAc11C,IAAQwwC,EAAML,EAC5B,MAEJ,KAAK,IACL,IAAK,KACDuF,EAAc31C,IAAUywC,EAAML,EAC9B,MAEJ,KAAK,IACL,IAAK,KACDuF,EAAc51C,IAAU0wC,EAAML,EAC9B,MAEJ,KAAK,IACL,IAAK,KACL,IAAK,MACL,IAAK,OACDuF,EAAc71C,IAAe2wC,EAAuB,KAAhB,KAAOL,GAC3C,MAEJ,KAAK,IACDzD,EAAOv2C,GAAK,GAAIn0B,MAAKwuE,EAAML,GAC3B,MAEJ,KAAK,IACDzD,EAAOv2C,GAAK,GAAIn0B,MAAyB,IAApBuhB,WAAW4sD,GAChC,MAEJ,KAAK,IACL,IAAK,KACDzD,EAAOsJ,SAAU,EACjBtJ,EAAO6B,KAAO6G,EAA0BjF,EACxC,MAEJ,KAAK,KACL,IAAK,MACL,IAAK,OACDltE,EAAIypE,EAAOqB,QAAQkI,cAAc9F,GAExB,MAALltE,GACAypE,EAAOwJ,GAAKxJ,EAAOwJ,OACnBxJ,EAAOwJ,GAAM,EAAIjzE,GAEjBypE,EAAOgC,IAAIyH,eAAiBhG,CAEhC,MAEJ,KAAK,IACL,IAAK,KACL,IAAK,IACL,IAAK,KACL,IAAK,IACL,IAAK,IACL,IAAK,IACD5T,EAAQA,EAAM5zD,OAAO,EAAG,EAE5B,KAAK,OACL,IAAK,OACL,IAAK,QACD4zD,EAAQA,EAAM5zD,OAAO,EAAG,GACpBwnE,IACAzD,EAAOwJ,GAAKxJ,EAAOwJ,OACnBxJ,EAAOwJ,GAAG3Z,GAASiU,EAAML,GAE7B,MACJ,KAAK,KACL,IAAK,KACDzD,EAAOwJ,GAAKxJ,EAAOwJ,OACnBxJ,EAAOwJ,GAAG3Z,GAAS/6D,GAAOq0E,kBAAkB1F,IAIpD,QAASiG,GAAsB1J,GAC3B,GAAI3gB,GAAGsqB,EAAU/I,EAAMgJ,EAASzE,EAAKC,EAAKyE,CAE1CxqB,GAAI2gB,EAAOwJ,GACC,MAARnqB,EAAEyqB,IAAqB,MAAPzqB,EAAE0qB,GAAoB,MAAP1qB,EAAE2qB,GACjC7E,EAAM,EACNC,EAAM,EAMNuE,EAAWxL,EAAI9e,EAAEyqB,GAAI9J,EAAOwF,GAAG/xC,IAAO4xC,GAAWvwE,KAAU,EAAG,GAAGg1B,MACjE82C,EAAOzC,EAAI9e,EAAE0qB,EAAG,GAChBH,EAAUzL,EAAI9e,EAAE2qB,EAAG,KAEnB7E,EAAMnF,EAAOqB,QAAQ4I,MAAM9E,IAC3BC,EAAMpF,EAAOqB,QAAQ4I,MAAM7E,IAE3BuE,EAAWxL,EAAI9e,EAAE6qB,GAAIlK,EAAOwF,GAAG/xC,IAAO4xC,GAAWvwE,KAAUqwE,EAAKC,GAAKt7C,MACrE82C,EAAOzC,EAAI9e,EAAEA,EAAG,GAEL,MAAPA,EAAE7hD,GAEFosE,EAAUvqB,EAAE7hD,EACE2nE,EAAVyE,KACEhJ,GAINgJ,EAFc,MAAPvqB,EAAE5hD,EAEC4hD,EAAE5hD,EAAI0nE,EAGNA,GAGlB0E,EAAOM,GAAmBR,EAAU/I,EAAMgJ,EAASxE,EAAKD,GAExDnF,EAAOwF,GAAG/xC,IAAQo2C,EAAK//C,KACvBk2C,EAAOkJ,WAAaW,EAAKhgD,UAO7B,QAASugD,GAAepK,GACpB,GAAIxpE,GAAGwzB,EAAkBqgD,EAAaC,EAAzB7G,IAEb,KAAIzD,EAAOv2C,GAAX,CA6BA,IAzBA4gD,EAAcE,EAAiBvK,GAG3BA,EAAOwJ,IAAyB,MAAnBxJ,EAAOwF,GAAGC,KAAqC,MAApBzF,EAAOwF,GAAGhyC,KAClDk2C,EAAsB1J,GAItBA,EAAOkJ,aACPoB,EAAYnM,EAAI6B,EAAOwF,GAAG/xC,IAAO42C,EAAY52C,KAEzCusC,EAAOkJ,WAAa5D,EAAWgF,KAC/BtK,EAAOgC,IAAI0D,oBAAqB,GAGpC17C,EAAOwgD,GAAYF,EAAW,EAAGtK,EAAOkJ,YACxClJ,EAAOwF,GAAGhyC,IAASxJ,EAAKygD,cACxBzK,EAAOwF,GAAGC,IAAQz7C,EAAKi7C,cAQtBzuE,EAAI,EAAO,EAAJA,GAAyB,MAAhBwpE,EAAOwF,GAAGhvE,KAAcA,EACzCwpE,EAAOwF,GAAGhvE,GAAKitE,EAAMjtE,GAAK6zE,EAAY7zE,EAI1C,MAAW,EAAJA,EAAOA,IACVwpE,EAAOwF,GAAGhvE,GAAKitE,EAAMjtE,GAAsB,MAAhBwpE,EAAOwF,GAAGhvE,GAAqB,IAANA,EAAU,EAAI,EAAKwpE,EAAOwF,GAAGhvE,EAI7D,MAApBwpE,EAAOwF,GAAGlyC,KACgB,IAAtB0sC,EAAOwF,GAAGnyC,KACY,IAAtB2sC,EAAOwF,GAAGpyC,KACiB,IAA3B4sC,EAAOwF,GAAGryC,MACd6sC,EAAO0K,UAAW,EAClB1K,EAAOwF,GAAGlyC,IAAQ,GAGtB0sC,EAAOv2C,IAAMu2C,EAAOsJ,QAAUkB,GAAcG,IAAUphE,MAAM,KAAMk6D,GAG/C,MAAfzD,EAAO6B,MACP7B,EAAOv2C,GAAGmhD,cAAc5K,EAAOv2C,GAAGohD,gBAAkB7K,EAAO6B,MAG3D7B,EAAO0K,WACP1K,EAAOwF,GAAGlyC,IAAQ,KAI1B,QAASw3C,GAAe9K,GACpB,GAAIK,EAEAL,GAAOv2C,KAIX42C,EAAkBC,EAAqBN,EAAOyB,IAC9CzB,EAAOwF,IACHnF,EAAgBv2C,KAChBu2C,EAAgBp2C,MAChBo2C,EAAgBz2C,KAAOy2C,EAAgBr2C,KACvCq2C,EAAgBS,KAChBT,EAAgBU,OAChBV,EAAgBW,OAChBX,EAAgBY,aAGpBmJ,EAAepK,IAGnB,QAASuK,GAAiBvK,GACtB,GAAIrxC,GAAM,GAAIr5B,KACd,OAAI0qE,GAAOsJ,SAEH36C,EAAIo8C,iBACJp8C,EAAI87C,cACJ97C,EAAIs2C,eAGAt2C,EAAIiF,cAAejF,EAAI6F,WAAY7F,EAAI4F,WAKvD,QAASy2C,GAA4BhL,GACjC,GAAIA,EAAO0B,KAAO5sE,GAAOm2E,SAErB,WADAC,IAASlL,EAIbA,GAAOwF,MACPxF,EAAOgC,IAAI1D,OAAQ,CAGnB,IACI9nE,GAAG20E,EAAaC,EAAQvb,EAAOwb,EAD/B1C,EAAS,GAAK3I,EAAOyB,GAErB6J,EAAe3C,EAAOhyE,OACtB40E,EAAyB,CAI7B,KAFAH,EAASxE,EAAa5G,EAAO0B,GAAI1B,EAAOqB,SAAS9rE,MAAMkxE,QAElDjwE,EAAI,EAAGA,EAAI40E,EAAOz0E,OAAQH,IAC3Bq5D,EAAQub,EAAO50E,GACf20E,GAAexC,EAAOpzE,MAAM4xE,EAAsBtX,EAAOmQ,SAAgB,GACrEmL,IACAE,EAAU1C,EAAO1sE,OAAO,EAAG0sE,EAAOhxE,QAAQwzE,IACtCE,EAAQ10E,OAAS,GACjBqpE,EAAOgC,IAAIxD,YAAYrlE,KAAKkyE,GAEhC1C,EAASA,EAAOp6C,MAAMo6C,EAAOhxE,QAAQwzE,GAAeA,EAAYx0E,QAChE40E,GAA0BJ,EAAYx0E,QAGtC+vE,GAAqB7W,IACjBsb,EACAnL,EAAOgC,IAAI1D,OAAQ,EAGnB0B,EAAOgC,IAAIzD,aAAaplE,KAAK02D,GAEjCkZ,EAAwBlZ,EAAOsb,EAAanL,IAEvCA,EAAO4B,UAAYuJ,GACxBnL,EAAOgC,IAAIzD,aAAaplE,KAAK02D,EAKrCmQ,GAAOgC,IAAIvD,cAAgB6M,EAAeC,EACtC5C,EAAOhyE,OAAS,GAChBqpE,EAAOgC,IAAIxD,YAAYrlE,KAAKwvE,GAI5B3I,EAAOgC,IAAI8D,WAAY,GAAQ9F,EAAOwF,GAAGlyC,KAAS,KAClD0sC,EAAOgC,IAAI8D,QAAUtuE,GAGrBwoE,EAAOoJ,OAASpJ,EAAOwF,GAAGlyC,IAAQ,KAClC0sC,EAAOwF,GAAGlyC,KAAS,IAGnB0sC,EAAOoJ,SAAU,GAA6B,KAApBpJ,EAAOwF,GAAGlyC,MACpC0sC,EAAOwF,GAAGlyC,IAAQ,GAEtB82C,EAAepK,GACfE,EAAcF,GAGlB,QAASyI,IAAejsE,GACpB,MAAOA,GAAEa,QAAQ,sCAAuC,SAAUmuE,EAASnT,EAAIC,EAAIC,EAAIkT,GACnF,MAAOpT,IAAMC,GAAMC,GAAMkT,IAKjC,QAASjD,IAAahsE,GAClB,MAAOA,GAAEa,QAAQ,yBAA0B,QAI/C,QAASquE,IAA2B1L,GAChC,GAAI2L,GACAC,EAEAC,EACAr1E,EACAs1E,CAEJ,IAAyB,IAArB9L,EAAO0B,GAAG/qE,OAGV,MAFAqpE,GAAOgC,IAAIpD,eAAgB,OAC3BoB,EAAOv2C,GAAK,GAAIn0B,MAAKy2E,KAIzB,KAAKv1E,EAAI,EAAGA,EAAIwpE,EAAO0B,GAAG/qE,OAAQH,IAC9Bs1E,EAAe,EACfH,EAAaxL,KAAeH,GACN,MAAlBA,EAAOsJ,UACPqC,EAAWrC,QAAUtJ,EAAOsJ,SAEhCqC,EAAW3J,IAAM3D,IACjBsN,EAAWjK,GAAK1B,EAAO0B,GAAGlrE,GAC1Bw0E,EAA4BW,GAEvBhG,EAAQgG,KAKbG,GAAgBH,EAAW3J,IAAIvD,cAG/BqN,GAAqD,GAArCH,EAAW3J,IAAIzD,aAAa5nE,OAE5Cg1E,EAAW3J,IAAIgK,MAAQF,GAEJ,MAAfD,GAAsCA,EAAfC,KACvBD,EAAcC,EACdF,EAAaD,GAIrBr1E,GAAO0pE,EAAQ4L,GAAcD,GAIjC,QAAST,IAASlL,GACd,GAAIxpE,GAAGy1E,EACHtD,EAAS3I,EAAOyB,GAChBlsE,EAAQ22E,GAASz2E,KAAKkzE,EAE1B,IAAIpzE,EAAO,CAEP,IADAyqE,EAAOgC,IAAIlD,KAAM,EACZtoE,EAAI,EAAGy1E,EAAIE,GAASx1E,OAAYs1E,EAAJz1E,EAAOA,IACpC,GAAI21E,GAAS31E,GAAG,GAAGf,KAAKkzE,GAAS,CAE7B3I,EAAO0B,GAAKyK,GAAS31E,GAAG,IAAMjB,EAAM,IAAM,IAC1C,OAGR,IAAKiB,EAAI,EAAGy1E,EAAIG,GAASz1E,OAAYs1E,EAAJz1E,EAAOA,IACpC,GAAI41E,GAAS51E,GAAG,GAAGf,KAAKkzE,GAAS,CAC7B3I,EAAO0B,IAAM0K,GAAS51E,GAAG,EACzB,OAGJmyE,EAAOpzE,MAAM0yE,MACbjI,EAAO0B,IAAM,KAEjBsJ,EAA4BhL,OAE5BA,GAAO4F,UAAW,EAK1B,QAASyG,IAAmBrM,GACxBkL,GAASlL,GACLA,EAAO4F,YAAa,UACb5F,GAAO4F,SACd9wE,GAAOw3E,wBAAwBtM,IAIvC,QAASnhE,IAAIusC,EAAK1gC,GACd,GAAclU,GAAVisE,IACJ,KAAKjsE,EAAI,EAAGA,EAAI40C,EAAIz0C,SAAUH,EAC1BisE,EAAItpE,KAAKuR,EAAG0gC,EAAI50C,GAAIA,GAExB,OAAOisE,GAGX,QAAS8J,IAAkBvM,GACvB,GAAuBwL,GAAnB/H,EAAQzD,EAAOyB,EACfgC,KAAUjsE,EACVwoE,EAAOv2C,GAAK,GAAIn0B,MACTD,EAAOouE,GACdzD,EAAOv2C,GAAK,GAAIn0B,OAAMmuE,GAC6B,QAA3C+H,EAAUgB,GAAgB/2E,KAAKguE,IACvCzD,EAAOv2C,GAAK,GAAIn0B,OAAMk2E,EAAQ,IACN,gBAAV/H,GACd4I,GAAmBrM,GACZ9oE,EAAQusE,IACfzD,EAAOwF,GAAK3mE,GAAI4kE,EAAMl1C,MAAM,GAAI,SAAUha,GACtC,MAAO+H,UAAS/H,EAAK,MAEzB61D,EAAepK,IACU,gBAAZ,GACb8K,EAAe9K,GACU,gBAAZ,GAEbA,EAAOv2C,GAAK,GAAIn0B,MAAKmuE,GAErB3uE,GAAOw3E,wBAAwBtM,GAIvC,QAAS2K,IAASpnE,EAAG9R,EAAG+L,EAAGjB,EAAGy8D,EAAGx8D,EAAGiwE,GAGhC,GAAIziD,GAAO,GAAI10B,MAAKiO,EAAG9R,EAAG+L,EAAGjB,EAAGy8D,EAAGx8D,EAAGiwE,EAMtC,OAHQ,MAAJlpE,GACAymB,EAAK2J,YAAYpwB,GAEdymB,EAGX,QAASwgD,IAAYjnE,GACjB,GAAIymB,GAAO,GAAI10B,MAAKA,KAAK0vE,IAAIz7D,MAAM,KAAM7S,WAIzC,OAHQ,MAAJ6M,GACAymB,EAAK0iD,eAAenpE,GAEjBymB,EAGX,QAAS2iD,IAAalJ,EAAO3tC,GACzB,GAAqB,gBAAV2tC,GACP,GAAK/tE,MAAM+tE,IAKP,GADAA,EAAQ3tC,EAAOyzC,cAAc9F,GACR,gBAAVA,GACP,MAAO,UALXA,GAAQnnD,SAASmnD,EAAO,GAShC,OAAOA,GASX,QAASmJ,IAAkBjE,EAAQxG,EAAQ0K,EAAeC,EAAUh3C,GAChE,MAAOA,GAAOi3C,aAAa5K,GAAU,IAAK0K,EAAelE,EAAQmE,GAGrE,QAASC,IAAaC,EAAgBH,EAAe/2C,GACjD,GAAIz0B,GAAWvM,GAAOuM,SAAS2rE,GAAgB3wD,MAC3CyS,EAAU3P,GAAM9d,EAASof,GAAG,MAC5BoO,EAAU1P,GAAM9d,EAASof,GAAG,MAC5BmO,EAAQzP,GAAM9d,EAASof,GAAG,MAC1BogD,EAAO1hD,GAAM9d,EAASof,GAAG,MACzBigD,EAASvhD,GAAM9d,EAASof,GAAG,MAC3B8/C,EAAQphD,GAAM9d,EAASof,GAAG,MAE1BhW,EAAOqkB,EAAUm+C,GAAuBzwE,IAAM,IAAKsyB,IACnC,IAAZD,IAAkB,MAClBA,EAAUo+C,GAAuBx7E,IAAM,KAAMo9B,IACnC,IAAVD,IAAgB,MAChBA,EAAQq+C,GAAuB1wE,IAAM,KAAMqyB,IAClC,IAATiyC,IAAe,MACfA,EAAOoM,GAAuBzvE,IAAM,KAAMqjE,IAC/B,IAAXH,IAAiB,MACjBA,EAASuM,GAAuBjU,IAAM,KAAM0H,IAClC,IAAVH,IAAgB,OAAS,KAAMA,EAKvC,OAHA91D,GAAK,GAAKoiE,EACVpiE,EAAK,IAAMuiE,EAAiB,EAC5BviE,EAAK,GAAKqrB,EACH82C,GAAkBrjE,SAAUkB,GAgBvC,QAAS46D,IAAWnC,EAAKgK,EAAgBC,GACrC,GAEIC,GAFAhsE,EAAM+rE,EAAuBD,EAC7BG,EAAkBF,EAAuBjK,EAAIt5C,KAajD,OATIyjD,GAAkBjsE,IAClBisE,GAAmB,GAGDjsE,EAAM,EAAxBisE,IACAA,GAAmB,GAGvBD,EAAiBt4E,GAAOouE,GAAK1+D,IAAI6oE,EAAiB,MAE9CzM,KAAM1qE,KAAKuyC,KAAK2kC,EAAevjD,YAAc,GAC7CC,KAAMsjD,EAAetjD,QAK7B,QAASqgD,IAAmBrgD,EAAM82C,EAAMgJ,EAASuD,EAAsBD,GACnE,GAA6CI,GAAWzjD,EAApDrsB,EAAIgtE,GAAY1gD,EAAM,EAAG,GAAGyjD,WAOhC,OALA/vE,GAAU,IAANA,EAAU,EAAIA,EAClBosE,EAAqB,MAAXA,EAAkBA,EAAUsD,EACtCI,EAAYJ,EAAiB1vE,GAAKA,EAAI2vE,EAAuB,EAAI,IAAUD,EAAJ1vE,EAAqB,EAAI,GAChGqsB,EAAY,GAAK+2C,EAAO,IAAMgJ,EAAUsD,GAAkBI,EAAY,GAGlExjD,KAAMD,EAAY,EAAIC,EAAOA,EAAO,EACpCD,UAAWA,EAAY,EAAKA,EAAYy7C,EAAWx7C,EAAO,GAAKD,GAQvE,QAAS2jD,IAAWxN,GAChB,GAEIyC,GAFAgB,EAAQzD,EAAOyB,GACfnsC,EAAS0qC,EAAO0B,EAKpB,OAFA1B,GAAOqB,QAAUrB,EAAOqB,SAAWvsE,GAAO8qE,WAAWI,EAAO2B,IAE9C,OAAV8B,GAAmBnuC,IAAW99B,GAAuB,KAAVisE,EACpC3uE,GAAO24E,SAAS/O,WAAW,KAGjB,gBAAV+E,KACPzD,EAAOyB,GAAKgC,EAAQzD,EAAOqB,QAAQqM,SAASjK,IAG5C3uE,GAAOmD,SAASwrE,GACT,GAAI1D,GAAO0D,GAAO,IAClBnuC,EACHp+B,EAAQo+B,GACRo2C,GAA2B1L,GAE3BgL,EAA4BhL,GAGhCuM,GAAkBvM,GAGtByC,EAAM,GAAI1C,GAAOC,GACbyC,EAAIiI,WAEJjI,EAAIj+D,IAAI,EAAG,KACXi+D,EAAIiI,SAAWlzE,GAGZirE,IAyCX,QAASkL,IAAOjjE,EAAIkjE,GAChB,GAAInL,GAAKjsE,CAIT,IAHuB,IAAnBo3E,EAAQj3E,QAAgBO,EAAQ02E,EAAQ,MACxCA,EAAUA,EAAQ,KAEjBA,EAAQj3E,OACT,MAAO7B,KAGX,KADA2tE,EAAMmL,EAAQ,GACTp3E,EAAI,EAAGA,EAAIo3E,EAAQj3E,SAAUH,EAC1Bo3E,EAAQp3E,GAAGkU,GAAI+3D,KACfA,EAAMmL,EAAQp3E,GAGtB,OAAOisE,GA8sBX,QAASe,IAAeN,EAAK7qE,GACzB,GAAIw1E,EAGJ,OAAqB,gBAAVx1E,KACPA,EAAQ6qE,EAAItD,aAAaqJ,YAAY5wE,GAEhB,gBAAVA,IACA6qE,GAIf2K,EAAa33E,KAAKwG,IAAIwmE,EAAIl5C,OAClB+6C,EAAY7B,EAAIp5C,OAAQzxB,IAChC6qE,EAAIz5C,GAAG,OAASy5C,EAAIpB,OAAS,MAAQ,IAAM,SAASzpE,EAAOw1E,GACpD3K,GAGX,QAASK,IAAUL,EAAK4K,GACpB,MAAO5K,GAAIz5C,GAAG,OAASy5C,EAAIpB,OAAS,MAAQ,IAAMgM,KAGtD,QAASxK,IAAUJ,EAAK4K,EAAMz1E,GAC1B,MAAa,UAATy1E,EACOtK,GAAeN,EAAK7qE,GAEpB6qE,EAAIz5C,GAAG,OAASy5C,EAAIpB,OAAS,MAAQ,IAAMgM,GAAMz1E,GAIhE,QAAS01E,IAAaD,EAAME,GACxB,MAAO,UAAU31E,GACb,MAAa,OAATA,GACAirE,GAAUryE,KAAM68E,EAAMz1E,GACtBvD,GAAOsuE,aAAanyE,KAAM+8E,GACnB/8E,MAEAsyE,GAAUtyE,KAAM68E,IAkCnC,QAASG,IAAapN,GAElB,MAAc,KAAPA,EAAa,OAGxB,QAASqN,IAAa3N,GAGlB,MAAe,QAARA,EAAiB,IAmL5B,QAAS4N,IAAmB1mE,GACxB3S,GAAOuM,SAASqJ,GAAGjD,GAAQ,WACvB,MAAOxW,MAAKkT,MAAMsD,IA2D1B,QAAS2mE,IAAWC,GAEK,mBAAVC,SAGXC,GAAkBC,GAAY15E,OAE1B05E,GAAY15E,OADZu5E,EACqBlP,EACb,uGAGArqE,IAEaA,IA//E7B,IAzVA,GAAIA,IAIAy5E,GAGA/3E,GANAi4E,GAAU,QAEVD,GAAgC,mBAAXtQ,GAAyBA,EAASjtE,KAEvDkuB,GAAQjpB,KAAKipB,MACbroB,GAAiBS,OAAOmN,UAAU5N,eAGlC28B,GAAO,EACPD,GAAQ,EACRiyC,GAAO,EACPnyC,GAAO,EACPD,GAAS,EACTD,GAAS,EACTD,GAAc,EAGd0C,MAGAosC,MAGAmE,GAA+B,mBAAXt1E,IAA0BA,GAAUA,EAAOD,QAG/D27E,GAAkB,sBAClBkC,GAA0B,uDAI1BC,GAAmB,gIAGnBlI,GAAmB,qKACnBQ,GAAwB,6CAGxBmB,GAA2B,QAC3BR,GAA6B,UAC7BL,GAA4B,UAC5BG,GAA2B,gBAC3BS,GAAmB,MACnBN,GAAiB,mHACjBI,GAAqB,uBACrBC,GAAc,KACdH,GAAqB,aACrBC,GAAwB,yBAGxBZ,GAAqB,KACrBO,GAAsB,OACtBN,GAAwB,QACxBC,GAAuB,QACvBG,GAAsB,aACtBD,GAAyB,WAIzB0E,GAAW,4IAEX0C,GAAY,uBAEZzC,KACK,eAAgB,0BAChB,aAAc,sBACd,eAAgB,oBAChB,aAAc,iBACd,WAAY,gBAIjBC,KACK,gBAAiB,6BACjB,WAAY,wBACZ,QAAS,mBACT,KAAM,cAIXtD,GAAuB,kBAIvB+F,IADyB,0CAA0C31E,MAAM,MAErE41E,aAAiB,EACjBC,QAAY,IACZC,QAAY,IACZC,MAAU,KACVC,KAAS,MACTC,OAAW,OACXC,MAAU,UAGdlL,IACIuI,GAAK,cACLjwE,EAAI,SACJ/K,EAAI,SACJ8K,EAAI,OACJiB,EAAI,MACJ6xE,EAAI,OACJhwB,EAAI,OACJ0qB,EAAI,UACJ/Q,EAAI,QACJsW,EAAI,UACJ/rE,EAAI,OACJgsE,IAAM,YACN9xE,EAAI,UACJusE,EAAI,aACJE,GAAI,WACJJ,GAAI,eAGR3F,IACIqL,UAAY,YACZC,WAAa,aACbC,QAAU,UACVC,SAAW,WACXC,YAAc,eAIlB/I,MAGAoG,IACIzwE,EAAG,GACH/K,EAAG,GACH8K,EAAG,GACHiB,EAAG,GACHw7D,EAAG,IAIP6W,GAAmB,gBAAgB32E,MAAM,KACzC42E,GAAe,kBAAkB52E,MAAM,KAEvCwtE,IACI1N,EAAO,WACH,MAAO/nE,MAAKg5B,QAAU,GAE1B8lD,IAAO,SAAUz6C,GACb,MAAOrkC,MAAK2uE,aAAaoQ,YAAY/+E,KAAMqkC,IAE/C26C,KAAO,SAAU36C,GACb,MAAOrkC,MAAK2uE,aAAac,OAAOzvE,KAAMqkC,IAE1C+5C,EAAO,WACH,MAAOp+E,MAAK+4B,QAEhBulD,IAAO,WACH,MAAOt+E,MAAK44B,aAEhBrsB,EAAO,WACH,MAAOvM,MAAK24B,OAEhBsmD,GAAO,SAAU56C,GACb,MAAOrkC,MAAK2uE,aAAauQ,YAAYl/E,KAAMqkC,IAE/C86C,IAAO,SAAU96C,GACb,MAAOrkC,MAAK2uE,aAAayQ,cAAcp/E,KAAMqkC,IAEjDg7C,KAAO,SAAUh7C,GACb,MAAOrkC,MAAK2uE,aAAa2Q,SAASt/E,KAAMqkC,IAE5C+pB,EAAO,WACH,MAAOpuD,MAAK2vE,QAEhBmJ,EAAO,WACH,MAAO94E,MAAKu/E,WAEhBC,GAAO,WACH,MAAOhR,GAAaxuE,KAAK64B,OAAS,IAAK,IAE3C4mD,KAAO,WACH,MAAOjR,GAAaxuE,KAAK64B,OAAQ,IAErC6mD,MAAQ,WACJ,MAAOlR,GAAaxuE,KAAK64B,OAAQ,IAErC8mD,OAAS,WACL,GAAIrtE,GAAItS,KAAK64B,OAAQtJ,EAAOjd,GAAK,EAAI,IAAM,GAC3C,OAAOid,GAAOi/C,EAAavpE,KAAKmmB,IAAI9Y,GAAI,IAE5C2mE,GAAO,WACH,MAAOzK,GAAaxuE,KAAK04E,WAAa,IAAK,IAE/CkH,KAAO,WACH,MAAOpR,GAAaxuE,KAAK04E,WAAY,IAEzCmH,MAAQ,WACJ,MAAOrR,GAAaxuE,KAAK04E,WAAY,IAEzCG,GAAO,WACH,MAAOrK,GAAaxuE,KAAK8/E,cAAgB,IAAK,IAElDC,KAAO,WACH,MAAOvR,GAAaxuE,KAAK8/E,cAAe,IAE5CE,MAAQ,WACJ,MAAOxR,GAAaxuE,KAAK8/E,cAAe,IAE5CtzE,EAAI,WACA,MAAOxM,MAAK24E,WAEhBI,EAAI,WACA,MAAO/4E,MAAKigF,cAEhB36E,EAAO,WACH,MAAOtF,MAAK2uE,aAAauR,SAASlgF,KAAK29B,QAAS39B,KAAK49B,WAAW,IAEpEiqC,EAAO,WACH,MAAO7nE,MAAK2uE,aAAauR,SAASlgF,KAAK29B,QAAS39B,KAAK49B,WAAW,IAEpEjT,EAAO,WACH,MAAO3qB,MAAK29B,SAEhBryB,EAAO,WACH,MAAOtL,MAAK29B,QAAU,IAAM,IAEhCn9B,EAAO,WACH,MAAOR,MAAK49B,WAEhBryB,EAAO,WACH,MAAOvL,MAAK69B,WAEhBjT,EAAO,WACH,MAAOioD,GAAM7yE,KAAK89B,eAAiB,MAEvCqiD,GAAO,WACH,MAAO3R,GAAaqE,EAAM7yE,KAAK89B,eAAiB,IAAK,IAEzDsiD,IAAO,WACH,MAAO5R,GAAaxuE,KAAK89B,eAAgB,IAE7CuiD,KAAO,WACH,MAAO7R,GAAaxuE,KAAK89B,eAAgB,IAE7CwiD,EAAO,WACH,GAAIh7E,IAAKtF,KAAKugF,OACVp6E,EAAI,GAKR,OAJQ,GAAJb,IACAA,GAAKA,EACLa,EAAI,KAEDA,EAAIqoE,EAAaqE,EAAMvtE,EAAI,IAAK,GAAK,IAAMkpE,EAAaqE,EAAMvtE,GAAK,GAAI,IAElFk7E,GAAO,WACH,GAAIl7E,IAAKtF,KAAKugF,OACVp6E,EAAI,GAKR,OAJQ,GAAJb,IACAA,GAAKA,EACLa,EAAI,KAEDA,EAAIqoE,EAAaqE,EAAMvtE,EAAI,IAAK,GAAKkpE,EAAaqE,EAAMvtE,GAAK,GAAI,IAE5EmY,EAAI,WACA,MAAOzd,MAAKygF,YAEhBC,GAAK,WACD,MAAO1gF,MAAK2gF,YAEhBtuE,EAAO,WACH,MAAOrS,MAAK+G,WAEhBokB,EAAO,WACH,MAAOnrB,MAAK4gF,QAEhBvC,EAAI,WACA,MAAOr+E,MAAKwvE,YAIpBnB,MAEAwS,IAAS,SAAU,cAAe,WAAY,gBAAiB,eAqE5DjC,GAAiBl5E,QACpBH,GAAIq5E,GAAiBxkC,MACrBq7B,GAAqBlwE,GAAI,KAAOkpE,EAAgBgH,GAAqBlwE,IAAIA,GAE7E,MAAOs5E,GAAan5E,QAChBH,GAAIs5E,GAAazkC,MACjBq7B,GAAqBlwE,GAAIA,IAAK+oE,EAASmH,GAAqBlwE,IAAI,EAEpEkwE,IAAqBqL,KAAOxS,EAASmH,GAAqB6I,IAAK,GAyb/Dj5E,EAAOwpE,EAAOp7D,WAEVigE,IAAM,SAAU3E,GACZ,GAAInpE,GAAML,CACV,KAAKA,IAAKwpE,GACNnpE,EAAOmpE,EAAOxpE,GACM,kBAATK,GACP5F,KAAKuF,GAAKK,EAEV5F,KAAK,IAAMuF,GAAKK,CAKxB5F,MAAKq3E,qBAAuB,GAAIC,QAAOt3E,KAAKo3E,cAAczV,OAAS,IAAM,UAAUA,SAGvFwO,QAAU,wFAAwFloE,MAAM,KACxGwnE,OAAS,SAAUjvE,GACf,MAAOR,MAAKmwE,QAAQ3vE,EAAEw4B,UAG1B+nD,aAAe,kDAAkD94E,MAAM,KACvE82E,YAAc,SAAUv+E,GACpB,MAAOR,MAAK+gF,aAAavgF,EAAEw4B,UAG/Bg/C,YAAc,SAAUgJ,EAAW38C,EAAQg7B,GACvC,GAAI95D,GAAG0sE,EAAKgP,CAQZ,KANKjhF,KAAKkhF,eACNlhF,KAAKkhF,gBACLlhF,KAAKmhF,oBACLnhF,KAAKohF,sBAGJ77E,EAAI,EAAO,GAAJA,EAAQA,IAAK,CAYrB,GAVA0sE,EAAMpuE,GAAO4vE,KAAK,IAAMluE,IACpB85D,IAAWr/D,KAAKmhF,iBAAiB57E,KACjCvF,KAAKmhF,iBAAiB57E,GAAK,GAAI+xE,QAAO,IAAMt3E,KAAKyvE,OAAOwC,EAAK,IAAI7lE,QAAQ,IAAK,IAAM,IAAK,KACzFpM,KAAKohF,kBAAkB77E,GAAK,GAAI+xE,QAAO,IAAMt3E,KAAK++E,YAAY9M,EAAK,IAAI7lE,QAAQ,IAAK,IAAM,IAAK,MAE9FizD,GAAWr/D,KAAKkhF,aAAa37E,KAC9B07E,EAAQ,IAAMjhF,KAAKyvE,OAAOwC,EAAK,IAAM,KAAOjyE,KAAK++E,YAAY9M,EAAK,IAClEjyE,KAAKkhF,aAAa37E,GAAK,GAAI+xE,QAAO2J,EAAM70E,QAAQ,IAAK,IAAK,MAG1DizD,GAAqB,SAAXh7B,GAAqBrkC,KAAKmhF,iBAAiB57E,GAAG+I,KAAK0yE,GAC7D,MAAOz7E,EACJ,IAAI85D,GAAqB,QAAXh7B,GAAoBrkC,KAAKohF,kBAAkB77E,GAAG+I,KAAK0yE,GACpE,MAAOz7E,EACJ,KAAK85D,GAAUr/D,KAAKkhF,aAAa37E,GAAG+I,KAAK0yE,GAC5C,MAAOz7E,KAKnB87E,UAAY,2DAA2Dp5E,MAAM,KAC7Eq3E,SAAW,SAAU9+E,GACjB,MAAOR,MAAKqhF,UAAU7gF,EAAEm4B,QAG5B2oD,eAAiB,8BAA8Br5E,MAAM,KACrDm3E,cAAgB,SAAU5+E,GACtB,MAAOR,MAAKshF,eAAe9gF,EAAEm4B,QAGjC4oD,aAAe,uBAAuBt5E,MAAM,KAC5Ci3E,YAAc,SAAU1+E,GACpB,MAAOR,MAAKuhF,aAAa/gF,EAAEm4B,QAG/B2/C,cAAgB,SAAUkJ,GACtB,GAAIj8E,GAAG0sE,EAAKgP,CAMZ,KAJKjhF,KAAKyhF,iBACNzhF,KAAKyhF,mBAGJl8E,EAAI,EAAO,EAAJA,EAAOA,IAQf,GANKvF,KAAKyhF,eAAel8E,KACrB0sE,EAAMpuE,IAAQ,IAAM,IAAI80B,IAAIpzB,GAC5B07E,EAAQ,IAAMjhF,KAAKs/E,SAASrN,EAAK,IAAM,KAAOjyE,KAAKo/E,cAAcnN,EAAK,IAAM,KAAOjyE,KAAKk/E,YAAYjN,EAAK,IACzGjyE,KAAKyhF,eAAel8E,GAAK,GAAI+xE,QAAO2J,EAAM70E,QAAQ,IAAK,IAAK,MAG5DpM,KAAKyhF,eAAel8E,GAAG+I,KAAKkzE,GAC5B,MAAOj8E,IAKnBm8E,iBACIC,IAAM,YACNC,GAAK,SACLC,EAAI,aACJC,GAAK,eACLC,IAAM,kBACNC,KAAO,yBAEXjM,eAAiB,SAAUntE,GACvB,GAAIyoE,GAASrxE,KAAK0hF,gBAAgB94E,EAOlC,QANKyoE,GAAUrxE,KAAK0hF,gBAAgB94E,EAAIyD,iBACpCglE,EAASrxE,KAAK0hF,gBAAgB94E,EAAIyD,eAAeD,QAAQ,mBAAoB,SAAUkkE,GACnF,MAAOA,GAAIhzC,MAAM,KAErBt9B,KAAK0hF,gBAAgB94E,GAAOyoE,GAEzBA,GAGX+G,KAAO,SAAU5F,GAGb,MAAiD,OAAxCA,EAAQ,IAAI3hB,cAAclrC,OAAO,IAG9CkxD,eAAiB,gBACjBqJ,SAAW,SAAUviD,EAAOC,EAASqkD,GACjC,MAAItkD,GAAQ,GACDskD,EAAU,KAAO,KAEjBA,EAAU,KAAO,MAIhCC,WACIC,QAAU,gBACVC,QAAU,mBACVC,SAAW,eACXC,QAAU,oBACVC,SAAW,sBACXC,SAAW,KAEfC,SAAW,SAAU75E,EAAKqpE,EAAKv0C,GAC3B,GAAI2zC,GAASrxE,KAAKkiF,UAAUt5E,EAC5B,OAAyB,kBAAXyoE,GAAwBA,EAAO/4D,MAAM25D,GAAMv0C,IAAQ2zC,GAGrEqR,eACIC,OAAS,QACTC,KAAO,SACPr3E,EAAI,gBACJ/K,EAAI,WACJqiF,GAAK,aACLv3E,EAAI,UACJw3E,GAAK,WACLv2E,EAAI,QACJ0yE,GAAK,UACLlX,EAAI,UACJgb,GAAK,YACLzwE,EAAI,SACJ0wE,GAAK,YAGTlH,aAAe,SAAU5K,EAAQ0K,EAAelE,EAAQmE,GACpD,GAAIxK,GAASrxE,KAAK0iF,cAAchL,EAChC,OAA0B,kBAAXrG,GACXA,EAAOH,EAAQ0K,EAAelE,EAAQmE,GACtCxK,EAAOjlE,QAAQ,MAAO8kE,IAG9B+R,WAAa,SAAUp2D,EAAMwkD,GACzB,GAAIhtC,GAASrkC,KAAK0iF,cAAc71D,EAAO,EAAI,SAAW,OACtD,OAAyB,kBAAXwX,GAAwBA,EAAOgtC,GAAUhtC,EAAOj4B,QAAQ,MAAOilE,IAGjFzC,QAAU,SAAUsC,GAChB,MAAOlxE,MAAKkjF,SAAS92E,QAAQ,KAAM8kE,IAEvCgS,SAAW,KACX9L,cAAgB,UAEhBqF,SAAW,SAAU/E,GACjB,MAAOA,IAGXyL,WAAa,SAAUzL,GACnB,MAAOA,IAGX/H,KAAO,SAAUsC,GACb,MAAOmC,IAAWnC,EAAKjyE,KAAKg5E,MAAM9E,IAAKl0E,KAAKg5E,MAAM7E,KAAKxE,MAG3DqJ,OACI9E,IAAM,EACNC,IAAM,GAGViP,aAAc,eACdvN,YAAa,WACT,MAAO71E,MAAKojF,gBA8yBpBv/E,GAAS,SAAU2uE,EAAOnuC,EAAQQ,EAAQw6B,GACtC,GAAI5+D,EAiBJ,OAfuB,iBAAb,KACN4+D,EAASx6B,EACTA,EAASt+B,GAIb9F,KACAA,EAAE8vE,kBAAmB,EACrB9vE,EAAE+vE,GAAKgC,EACP/xE,EAAEgwE,GAAKpsC,EACP5jC,EAAEiwE,GAAK7rC,EACPpkC,EAAEkwE,QAAUtR,EACZ5+D,EAAEowE,QAAS,EACXpwE,EAAEswE,IAAM3D,IAEDmP,GAAW97E,IAGtBoD,GAAOmqE,6BAA8B,EAErCnqE,GAAOw3E,wBAA0BnN,EAC7B,4LAIA,SAAUa,GACNA,EAAOv2C,GAAK,GAAIn0B,MAAK0qE,EAAOyB,IAAMzB,EAAOsJ,QAAU,OAAS,OA0BpEx0E,GAAO4H,IAAM,WACT,GAAI+N,MAAU8jB,MAAM/8B,KAAKkF,UAAW,EAEpC,OAAOi3E,IAAO,WAAYljE,IAG9B3V,GAAOqJ,IAAM,WACT,GAAIsM,MAAU8jB,MAAM/8B,KAAKkF,UAAW,EAEpC,OAAOi3E,IAAO,UAAWljE,IAI7B3V,GAAO4vE,IAAM,SAAUjB,EAAOnuC,EAAQQ,EAAQw6B,GAC1C,GAAI5+D,EAkBJ,OAhBuB,iBAAb,KACN4+D,EAASx6B,EACTA,EAASt+B,GAIb9F,KACAA,EAAE8vE,kBAAmB,EACrB9vE,EAAE43E,SAAU,EACZ53E,EAAEowE,QAAS,EACXpwE,EAAEiwE,GAAK7rC,EACPpkC,EAAE+vE,GAAKgC,EACP/xE,EAAEgwE,GAAKpsC,EACP5jC,EAAEkwE,QAAUtR,EACZ5+D,EAAEswE,IAAM3D,IAEDmP,GAAW97E,GAAGgzE,OAIzB5vE,GAAO+8E,KAAO,SAAUpO,GACpB,MAAO3uE,IAAe,IAAR2uE,IAIlB3uE,GAAOuM,SAAW,SAAUoiE,EAAO5pE,GAC/B,GAGI2mB,GACA8zD,EACAC,EACAC,EANAnzE,EAAWoiE,EAEXluE,EAAQ,IA+DZ,OAzDIT,IAAO2/E,WAAWhR,GAClBpiE,GACIorE,GAAIhJ,EAAMvC,cACV1jE,EAAGimE,EAAMtC,MACTnI,EAAGyK,EAAMrC,SAEW,gBAAVqC,IACdpiE,KACIxH,EACAwH,EAASxH,GAAO4pE,EAEhBpiE,EAAS0tB,aAAe00C,IAElBluE,EAAQm5E,GAAwBj5E,KAAKguE,KAC/CjjD,EAAqB,MAAbjrB,EAAM,GAAc,GAAK,EACjC8L,GACIkC,EAAG,EACH/F,EAAGsmE,EAAMvuE,EAAMkwE,KAASjlD,EACxBjkB,EAAGunE,EAAMvuE,EAAM+9B,KAAS9S,EACxB/uB,EAAGqyE,EAAMvuE,EAAM89B,KAAW7S,EAC1BhkB,EAAGsnE,EAAMvuE,EAAM69B,KAAW5S,EAC1BisD,GAAI3I,EAAMvuE,EAAM49B,KAAgB3S,KAE1BjrB,EAAQo5E,GAAiBl5E,KAAKguE,KACxCjjD,EAAqB,MAAbjrB,EAAM,GAAc,GAAK,EACjCg/E,EAAW,SAAUG,GAIjB,GAAIjS,GAAMiS,GAAO79D,WAAW69D,EAAIr3E,QAAQ,IAAK,KAE7C,QAAQ3H,MAAM+sE,GAAO,EAAIA,GAAOjiD,GAEpCnf,GACIkC,EAAGgxE,EAASh/E,EAAM,IAClByjE,EAAGub,EAASh/E,EAAM,IAClBiI,EAAG+2E,EAASh/E,EAAM,IAClBgH,EAAGg4E,EAASh/E,EAAM,IAClB9D,EAAG8iF,EAASh/E,EAAM,IAClBiH,EAAG+3E,EAASh/E,EAAM,IAClB8pD,EAAGk1B,EAASh/E,EAAM,MAEK,gBAAb8L,KACT,QAAUA,IAAY,MAAQA,MACnCmzE,EAAU7R,EAAkB7tE,GAAOuM,EAASuZ,MAAO9lB,GAAOuM,EAASwZ,KAEnExZ,KACAA,EAASorE,GAAK+H,EAAQzlD,aACtB1tB,EAAS23D,EAAIwb,EAAQ9T,QAGzB4T,EAAM,GAAIlU,GAAS/+D,GAEfvM,GAAO2/E,WAAWhR,IAAUrF,EAAWqF,EAAO,aAC9C6Q,EAAIjT,QAAUoC,EAAMpC,SAGjBiT,GAIXx/E,GAAO6/E,QAAUlG,GAGjB35E,GAAO8/E,cAAgBhG,GAGvB95E,GAAOm2E,SAAW,aAIlBn2E,GAAOmtE,iBAAmBA,GAI1BntE,GAAOsuE,aAAe,aAGtBtuE,GAAO+/E,sBAAwB,SAAUC,EAAWC,GAChD,MAAI9H,IAAuB6H,KAAet9E,GAC/B,EAEPu9E,IAAUv9E,EACHy1E,GAAuB6H,IAElC7H,GAAuB6H,GAAaC,GAC7B,IAGXjgF,GAAOs1C,KAAO+0B,EACV,wDACA,SAAUtlE,EAAKxB,GACX,MAAOvD,IAAOghC,OAAOj8B,EAAKxB,KAOlCvD,GAAOghC,OAAS,SAAUj8B,EAAKyO,GAC3B,GAAIrE,EAcJ,OAbIpK,KAEIoK,EADmB,mBAAb,GACCnP,GAAOkgF,aAAan7E,EAAKyO,GAGzBxT,GAAO8qE,WAAW/lE,GAGzBoK,IACAnP,GAAOuM,SAASggE,QAAUvsE,GAAOusE,QAAUp9D,IAI5CnP,GAAOusE,QAAQ4T,OAG1BngF,GAAOkgF,aAAe,SAAUvtE,EAAMa,GAClC,MAAe,QAAXA,GACAA,EAAO4sE,KAAOztE,EACTouB,GAAQpuB,KACTouB,GAAQpuB,GAAQ,GAAIq4D,IAExBjqC,GAAQpuB,GAAMk9D,IAAIr8D,GAGlBxT,GAAOghC,OAAOruB,GAEPouB,GAAQpuB,WAGRouB,IAAQpuB,GACR,OAIf3S,GAAOqgF,SAAWhW,EACd,gEACA,SAAUtlE,GACN,MAAO/E,IAAO8qE,WAAW/lE,KAKjC/E,GAAO8qE,WAAa,SAAU/lE,GAC1B,GAAIi8B,EAMJ,IAJIj8B,GAAOA,EAAIwnE,SAAWxnE,EAAIwnE,QAAQ4T,QAClCp7E,EAAMA,EAAIwnE,QAAQ4T,QAGjBp7E,EACD,MAAO/E,IAAOusE,OAGlB,KAAKnqE,EAAQ2C,GAAM,CAGf,GADAi8B,EAASowC,EAAWrsE,GAEhB,MAAOi8B,EAEXj8B,IAAOA,GAGX,MAAOmsE,GAAansE,IAIxB/E,GAAOmD,SAAW,SAAUsc,GACxB,MAAOA,aAAewrD,IACV,MAAPxrD,GAAe6pD,EAAW7pD,EAAK,qBAIxCzf,GAAO2/E,WAAa,SAAUlgE,GAC1B,MAAOA,aAAe6rD,GAG1B,KAAK5pE,GAAIs7E,GAAMn7E,OAAS,EAAGH,IAAK,IAAKA,GACjC8tE,EAASwN,GAAMt7E,IAGnB1B,IAAOivE,eAAiB,SAAUC,GAC9B,MAAOD,GAAeC,IAG1BlvE,GAAO24E,QAAU,SAAU2H,GACvB,GAAI3jF,GAAIqD,GAAO4vE,IAAIqH,IAQnB,OAPa,OAATqJ,EACA9+E,EAAO7E,EAAEuwE,IAAKoT,GAGd3jF,EAAEuwE,IAAInD,iBAAkB,EAGrBptE;EAGXqD,GAAOugF,UAAY,WACf,MAAOvgF,IAAOyU,MAAM,KAAM7S,WAAW2+E,aAGzCvgF,GAAOq0E,kBAAoB,SAAU1F,GACjC,MAAOK,GAAML,IAAUK,EAAML,GAAS,GAAK,KAAO,MAQtDntE,EAAOxB,GAAO4V,GAAKq1D,EAAOr7D,WAEtBilB,MAAQ,WACJ,MAAO70B,IAAO7D,OAGlB+G,QAAU,WACN,OAAQ/G,KAAKw4B,GAA4B,KAArBx4B,KAAK8wE,SAAW,IAGxC8P,KAAO,WACH,MAAO37E,MAAKC,OAAOlF,KAAO,MAG9BoF,SAAW,WACP,MAAOpF,MAAK04B,QAAQmM,OAAO,MAAMR,OAAO,qCAG5Cp9B,OAAS,WACL,MAAOjH,MAAK8wE,QAAU,GAAIzsE,OAAMrE,MAAQA,KAAKw4B,IAGjDrxB,YAAc,WACV,GAAI3G,GAAIqD,GAAO7D,MAAMyzE,KACrB,OAAI,GAAIjzE,EAAEq4B,QAAUr4B,EAAEq4B,QAAU,KACxB,kBAAsBx0B,MAAKoP,UAAUtM,YAE9BnH,KAAKiH,SAASE,cAEduuE,EAAal1E,EAAG,gCAGpBk1E,EAAal1E,EAAG,mCAI/BiI,QAAU,WACN,GAAIjI,GAAIR,IACR,QACIQ,EAAEq4B,OACFr4B,EAAEw4B,QACFx4B,EAAEu4B,OACFv4B,EAAEm9B,QACFn9B,EAAEo9B,UACFp9B,EAAEq9B,UACFr9B,EAAEs9B,iBAIV42C,QAAU,WACN,MAAOA,GAAQ10E,OAGnBqkF,aAAe,WACX,MAAIrkF,MAAKu0E,GACEv0E,KAAK00E,WAAajC,EAAczyE,KAAKu0E,IAAKv0E,KAAK6wE,OAAShtE,GAAO4vE,IAAIzzE,KAAKu0E,IAAM1wE,GAAO7D,KAAKu0E,KAAK9rE,WAAa,GAGhH,GAGX67E,aAAe,WACX,MAAOj/E,MAAWrF,KAAK+wE,MAG3BwT,UAAW,WACP,MAAOvkF,MAAK+wE,IAAI3sD,UAGpBqvD,IAAM,SAAU+Q,GACZ,MAAOxkF,MAAKugF,KAAK,EAAGiE,IAGxBnP,MAAQ,SAAUmP,GASd,MARIxkF,MAAK6wE,SACL7wE,KAAKugF,KAAK,EAAGiE,GACbxkF,KAAK6wE,QAAS,EAEV2T,GACAxkF,KAAKuT,IAAIvT,KAAKykF,gBAAiB,MAGhCzkF,MAGXqkC,OAAS,SAAUqgD,GACf,GAAIrT,GAASqE,EAAa11E,KAAM0kF,GAAe7gF,GAAO8/E,cACtD,OAAO3jF,MAAK2uE,aAAawU,WAAW9R,IAGxC99D,IAAMs+D,EAAY,EAAG,OAErBhmD,SAAWgmD,EAAY,GAAI,YAE3BhlD,KAAO,SAAU2lD,EAAOO,EAAO4R,GAC3B,GAEI93D,GAAMwkD,EAAQuT,EAFdC,EAAOlT,EAAOa,EAAOxyE,MACrB8kF,EAAyC,KAA7B9kF,KAAKugF,OAASsE,EAAKtE,OA8BnC,OA3BAxN,GAAQD,EAAeC,GAET,SAAVA,GAA8B,UAAVA,GAEpBlmD,EAAmD,OAA3C7sB,KAAK8zE,cAAgB+Q,EAAK/Q,eAElCzC,EAAwC,IAA7BrxE,KAAK64B,OAASgsD,EAAKhsD,SAAiB74B,KAAKg5B,QAAU6rD,EAAK7rD,SAGnE4rD,EAAc5kF,KAAO6D,GAAO7D,MAAM+kF,QAAQ,UACrCF,EAAOhhF,GAAOghF,GAAME,QAAQ,UAEjCH,GACgE,KADhD5kF,KAAKugF,OAAS18E,GAAO7D,MAAM+kF,QAAQ,SAASxE,QACnDsE,EAAKtE,OAAS18E,GAAOghF,GAAME,QAAQ,SAASxE,SACrDlP,GAAUuT,EAAa/3D,EACT,SAAVkmD,IACA1B,GAAkB,MAGtBxkD,EAAQ7sB,KAAO6kF,EACfxT,EAAmB,WAAV0B,EAAqBlmD,EAAO,IACvB,WAAVkmD,EAAqBlmD,EAAO,IAClB,SAAVkmD,EAAmBlmD,EAAO,KAChB,QAAVkmD,GAAmBlmD,EAAOi4D,GAAY,MAC5B,SAAV/R,GAAoBlmD,EAAOi4D,GAAY,OACvCj4D,GAED83D,EAAUtT,EAASJ,EAASI,IAGvC1nD,KAAO,SAAU8Q,EAAMmhD,GACnB,MAAO/3E,IAAOuM,UAAUwZ,GAAI5pB,KAAM2pB,KAAM8Q,IAAOoK,OAAO7kC,KAAK6kC,UAAUmgD,UAAUpJ,IAGnFqJ,QAAU,SAAUrJ,GAChB,MAAO57E,MAAK2pB,KAAK9lB,KAAU+3E,IAG/B6G,SAAW,SAAUhoD,GAGjB,GAAIiD,GAAMjD,GAAQ52B,KACdqhF,EAAMvT,EAAOj0C,EAAK19B,MAAM+kF,QAAQ,OAChCl4D,EAAO7sB,KAAK6sB,KAAKq4D,EAAK,QAAQ,GAC9B7gD,EAAgB,GAAPxX,EAAY,WACV,GAAPA,EAAY,WACL,EAAPA,EAAW,UACJ,EAAPA,EAAW,UACJ,EAAPA,EAAW,UACJ,EAAPA,EAAW,WAAa,UAChC,OAAO7sB,MAAKqkC,OAAOrkC,KAAK2uE,aAAa8T,SAASp+C,EAAQrkC,KAAM6D,GAAO65B,MAGvE42C,WAAa,WACT,MAAOA,GAAWt0E,KAAK64B,SAG3BssD,MAAQ,WACJ,MAAQnlF,MAAKugF,OAASvgF,KAAK04B,QAAQM,MAAM,GAAGunD,QACxCvgF,KAAKugF,OAASvgF,KAAK04B,QAAQM,MAAM,GAAGunD,QAG5C5nD,IAAM,SAAU65C,GACZ,GAAI75C,GAAM34B,KAAK6wE,OAAS7wE,KAAKw4B,GAAG8jD,YAAct8E,KAAKw4B,GAAG4sD,QACtD,OAAa,OAAT5S,GACAA,EAAQkJ,GAAalJ,EAAOxyE,KAAK2uE,cAC1B3uE,KAAKuT,IAAIi/D,EAAQ75C,EAAK,MAEtBA,GAIfK,MAAQ8jD,GAAa,SAAS,GAE9BiI,QAAU,SAAUhS,GAIhB,OAHAA,EAAQD,EAAeC,IAIvB,IAAK,OACD/yE,KAAKg5B,MAAM,EAEf,KAAK,UACL,IAAK,QACDh5B,KAAK+4B,KAAK,EAEd,KAAK,OACL,IAAK,UACL,IAAK,MACD/4B,KAAK29B,MAAM,EAEf,KAAK,OACD39B,KAAK49B,QAAQ,EAEjB,KAAK,SACD59B,KAAK69B,QAAQ,EAEjB,KAAK,SACD79B,KAAK89B,aAAa,GAgBtB,MAXc,SAAVi1C,EACA/yE,KAAK24E,QAAQ,GACI,YAAV5F,GACP/yE,KAAKigF,WAAW,GAIN,YAAVlN,GACA/yE,KAAKg5B,MAAqC,EAA/B/zB,KAAKC,MAAMlF,KAAKg5B,QAAU,IAGlCh5B,MAGXqlF,MAAO,SAAUtS,GAEb,MADAA,GAAQD,EAAeC,GACnBA,IAAUxsE,GAAuB,gBAAVwsE,EAChB/yE,KAEJA,KAAK+kF,QAAQhS,GAAOx/D,IAAI,EAAc,YAAVw/D,EAAsB,OAASA,GAAQlnD,SAAS,EAAG,OAG1F4lD,QAAS,SAAUe,EAAOO,GACtB,GAAIuS,EAEJ,OADAvS,GAAQD,EAAgC,mBAAVC,GAAwBA,EAAQ,eAChD,gBAAVA,GACAP,EAAQ3uE,GAAOmD,SAASwrE,GAASA,EAAQ3uE,GAAO2uE,IACxCxyE,MAAQwyE,IAEhB8S,EAAUzhF,GAAOmD,SAASwrE,IAAUA,GAAS3uE,GAAO2uE,GAC7C8S,GAAWtlF,KAAK04B,QAAQqsD,QAAQhS,KAI/CnB,SAAU,SAAUY,EAAOO,GACvB,GAAIuS,EAEJ,OADAvS,GAAQD,EAAgC,mBAAVC,GAAwBA,EAAQ,eAChD,gBAAVA,GACAP,EAAQ3uE,GAAOmD,SAASwrE,GAASA,EAAQ3uE,GAAO2uE,IAChCA,GAARxyE,OAERslF,EAAUzhF,GAAOmD,SAASwrE,IAAUA,GAAS3uE,GAAO2uE,IAC5CxyE,KAAK04B,QAAQ2sD,MAAMtS,GAASuS,IAI5CC,OAAQ,SAAU/S,EAAOO,GACrB,GAAIuS,EAEJ,OADAvS,GAAQD,EAAeC,GAAS,eAClB,gBAAVA,GACAP,EAAQ3uE,GAAOmD,SAASwrE,GAASA,EAAQ3uE,GAAO2uE,IACxCxyE,QAAUwyE,IAElB8S,GAAWzhF,GAAO2uE,IACTxyE,KAAK04B,QAAQqsD,QAAQhS,IAAWuS,GAAWA,IAAatlF,KAAK04B,QAAQ2sD,MAAMtS,KAI5FtnE,IAAKyiE,EACI,mGACA,SAAUvoE,GAEN,MADAA,GAAQ9B,GAAOyU,MAAM,KAAM7S,WACZzF,KAAR2F,EAAe3F,KAAO2F,IAI1CuH,IAAKghE,EACG,mGACA,SAAUvoE,GAEN,MADAA,GAAQ9B,GAAOyU,MAAM,KAAM7S,WACpBE,EAAQ3F,KAAOA,KAAO2F,IAczC46E,KAAO,SAAU/N,EAAOgS,GACpB,GACIgB,GADAt7D,EAASlqB,KAAK8wE,SAAW,CAE7B,OAAa,OAAT0B,EA0BOxyE,KAAK6wE,OAAS3mD,EAASlqB,KAAKykF,iBAzBd,gBAAVjS,KACPA,EAAQiF,EAA0BjF,IAElCvtE,KAAKmmB,IAAIonD,GAAS,KAClBA,EAAgB,GAARA,IAEPxyE,KAAK6wE,QAAU2T,IAChBgB,EAAcxlF,KAAKykF,iBAEvBzkF,KAAK8wE,QAAU0B,EACfxyE,KAAK6wE,QAAS,EACK,MAAf2U,GACAxlF,KAAK6rB,SAAS25D,EAAa,KAE3Bt7D,IAAWsoD,KACNgS,GAAiBxkF,KAAKylF,kBACvBzT,EAAgChyE,KACxB6D,GAAOuM,SAAS8Z,EAASsoD,EAAO,KAAM,GAAG,GACzCxyE,KAAKylF,oBACbzlF,KAAKylF,mBAAoB,EACzB5hF,GAAOsuE,aAAanyE,MAAM,GAC1BA,KAAKylF,kBAAoB,OAM9BzlF,OAGXygF,SAAW,WACP,MAAOzgF,MAAK6wE,OAAS,MAAQ,IAGjC8P,SAAW,WACP,MAAO3gF,MAAK6wE,OAAS,6BAA+B,IAGxDuT,UAAY,WAMR,MALIpkF,MAAK4wE,KACL5wE,KAAKugF,KAAKvgF,KAAK4wE,MACW,gBAAZ5wE,MAAKwwE,IACnBxwE,KAAKugF,KAAKvgF,KAAKwwE,IAEZxwE,MAGX0lF,qBAAuB,SAAUlT,GAQ7B,MAHIA,GAJCA,EAIO3uE,GAAO2uE,GAAO+N,OAHd,GAMJvgF,KAAKugF,OAAS/N,GAAS,KAAO,GAG1CsB,YAAc,WACV,MAAOA,GAAY9zE,KAAK64B,OAAQ74B,KAAKg5B,UAGzCJ,UAAY,SAAU45C,GAClB,GAAI55C,GAAY1K,IAAOrqB,GAAO7D,MAAM+kF,QAAQ,OAASlhF,GAAO7D,MAAM+kF,QAAQ,SAAW,OAAS,CAC9F,OAAgB,OAATvS,EAAgB55C,EAAY54B,KAAKuT,IAAKi/D,EAAQ55C,EAAY,MAGrE42C,QAAU,SAAUgD,GAChB,MAAgB,OAATA,EAAgBvtE,KAAKuyC,MAAMx3C,KAAKg5B,QAAU,GAAK,GAAKh5B,KAAKg5B,MAAoB,GAAbw5C,EAAQ,GAASxyE,KAAKg5B,QAAU,IAG3G0/C,SAAW,SAAUlG,GACjB,GAAI35C,GAAOu7C,GAAWp0E,KAAMA,KAAK2uE,aAAaqK,MAAM9E,IAAKl0E,KAAK2uE,aAAaqK,MAAM7E,KAAKt7C,IACtF,OAAgB,OAAT25C,EAAgB35C,EAAO74B,KAAKuT,IAAKi/D,EAAQ35C,EAAO,MAG3DinD,YAAc,SAAUtN,GACpB,GAAI35C,GAAOu7C,GAAWp0E,KAAM,EAAG,GAAG64B,IAClC,OAAgB,OAAT25C,EAAgB35C,EAAO74B,KAAKuT,IAAKi/D,EAAQ35C,EAAO,MAG3D82C,KAAO,SAAU6C,GACb,GAAI7C,GAAO3vE,KAAK2uE,aAAagB,KAAK3vE,KAClC,OAAgB,OAATwyE,EAAgB7C,EAAO3vE,KAAKuT,IAAqB,GAAhBi/D,EAAQ7C,GAAW,MAG/D4P,QAAU,SAAU/M,GAChB,GAAI7C,GAAOyE,GAAWp0E,KAAM,EAAG,GAAG2vE,IAClC,OAAgB,OAAT6C,EAAgB7C,EAAO3vE,KAAKuT,IAAqB,GAAhBi/D,EAAQ7C,GAAW,MAG/DgJ,QAAU,SAAUnG,GAChB,GAAImG,IAAW34E,KAAK24B,MAAQ,EAAI34B,KAAK2uE,aAAaqK,MAAM9E,KAAO,CAC/D,OAAgB,OAAT1B,EAAgBmG,EAAU34E,KAAKuT,IAAIi/D,EAAQmG,EAAS,MAG/DsH,WAAa,SAAUzN,GAInB,MAAgB,OAATA,EAAgBxyE,KAAK24B,OAAS,EAAI34B,KAAK24B,IAAI34B,KAAK24B,MAAQ,EAAI65C,EAAQA,EAAQ,IAGvFmT,eAAiB,WACb,MAAO1R,GAAYj0E,KAAK64B,OAAQ,EAAG,IAGvCo7C,YAAc,WACV,GAAI2R,GAAW5lF,KAAK2uE,aAAaqK,KACjC,OAAO/E,GAAYj0E,KAAK64B,OAAQ+sD,EAAS1R,IAAK0R,EAASzR,MAG3D3+D,IAAM,SAAUu9D,GAEZ,MADAA,GAAQD,EAAeC,GAChB/yE,KAAK+yE,MAGhBW,IAAM,SAAUX,EAAO3rE,GAKnB,MAJA2rE,GAAQD,EAAeC,GACI,kBAAhB/yE,MAAK+yE,IACZ/yE,KAAK+yE,GAAO3rE,GAETpH,MAMX6kC,OAAS,SAAUj8B,GACf,GAAIi9E,EAEJ,OAAIj9E,KAAQrC,EACDvG,KAAKowE,QAAQ4T,OAEpB6B,EAAgBhiF,GAAO8qE,WAAW/lE,GACb,MAAjBi9E,IACA7lF,KAAKowE,QAAUyV,GAEZ7lF,OAIfm5C,KAAO+0B,EACH,kJACA,SAAUtlE,GACN,MAAIA,KAAQrC,EACDvG,KAAK2uE,aAEL3uE,KAAK6kC,OAAOj8B,KAK/B+lE,WAAa,WACT,MAAO3uE,MAAKowE,SAGhBqU,cAAgB,WAGZ,MAAsD,IAA/Cx/E,KAAKipB,MAAMluB,KAAKw4B,GAAGstD,oBAAsB,OA8CxDjiF,GAAO4V,GAAGu2D,YAAcnsE,GAAO4V,GAAGqkB,aAAeg/C,GAAa,gBAAgB,GAC9Ej5E,GAAO4V,GAAGs2D,OAASlsE,GAAO4V,GAAGokB,QAAUi/C,GAAa,WAAW,GAC/Dj5E,GAAO4V,GAAGq2D,OAASjsE,GAAO4V,GAAGmkB,QAAUk/C,GAAa,WAAW,GAK/Dj5E,GAAO4V,GAAGo2D,KAAOhsE,GAAO4V,GAAGkkB,MAAQm/C,GAAa,SAAS,GAEzDj5E,GAAO4V,GAAGsf,KAAO+jD,GAAa,QAAQ,GACtCj5E,GAAO4V,GAAGqgB,MAAQo0C,EAAU,kDAAmD4O,GAAa,QAAQ,IACpGj5E,GAAO4V,GAAGof,KAAOikD,GAAa,YAAY,GAC1Cj5E,GAAO4V,GAAG61D,MAAQpB,EAAU,kDAAmD4O,GAAa,YAAY,IAGxGj5E,GAAO4V,GAAGm2D,KAAO/rE,GAAO4V,GAAGkf,IAC3B90B,GAAO4V,GAAGg2D,OAAS5rE,GAAO4V,GAAGuf,MAC7Bn1B,GAAO4V,GAAGi2D,MAAQ7rE,GAAO4V,GAAGk2D,KAC5B9rE,GAAO4V,GAAGssE,SAAWliF,GAAO4V,GAAG8lE,QAC/B17E,GAAO4V,GAAG81D,SAAW1rE,GAAO4V,GAAG+1D,QAG/B3rE,GAAO4V,GAAGusE,OAASniF,GAAO4V,GAAGtS,YAkB7B9B,EAAOxB,GAAOuM,SAASqJ,GAAK01D,EAAS17D,WAEjC48D,QAAU,WACN,GAIIxyC,GAASD,EAASD,EAJlBG,EAAe99B,KAAKiwE,cACpBL,EAAO5vE,KAAKkwE,MACZT,EAASzvE,KAAKmwE,QACdn9D,EAAOhT,KAAKkT,MACao8D,EAAQ,CAIrCt8D,GAAK8qB,aAAeA,EAAe,IAEnCD,EAAUozC,EAASnzC,EAAe,KAClC9qB,EAAK6qB,QAAUA,EAAU,GAEzBD,EAAUqzC,EAASpzC,EAAU,IAC7B7qB,EAAK4qB,QAAUA,EAAU,GAEzBD,EAAQszC,EAASrzC,EAAU,IAC3B5qB,EAAK2qB,MAAQA,EAAQ,GAErBiyC,GAAQqB,EAAStzC,EAAQ,IAGzB2xC,EAAQ2B,EAAS+L,GAAYpN,IAC7BA,GAAQqB,EAASgM,GAAY3N,IAI7BG,GAAUwB,EAASrB,EAAO,IAC1BA,GAAQ,GAGRN,GAAS2B,EAASxB,EAAS,IAC3BA,GAAU,GAEVz8D,EAAK48D,KAAOA,EACZ58D,EAAKy8D,OAASA,EACdz8D,EAAKs8D,MAAQA,GAGjBlkD,IAAM,WAYF,MAXAprB,MAAKiwE,cAAgBhrE,KAAKmmB,IAAIprB,KAAKiwE,eACnCjwE,KAAKkwE,MAAQjrE,KAAKmmB,IAAIprB,KAAKkwE,OAC3BlwE,KAAKmwE,QAAUlrE,KAAKmmB,IAAIprB,KAAKmwE,SAE7BnwE,KAAKkT,MAAM4qB,aAAe74B,KAAKmmB,IAAIprB,KAAKkT,MAAM4qB,cAC9C99B,KAAKkT,MAAM2qB,QAAU54B,KAAKmmB,IAAIprB,KAAKkT,MAAM2qB,SACzC79B,KAAKkT,MAAM0qB,QAAU34B,KAAKmmB,IAAIprB,KAAKkT,MAAM0qB,SACzC59B,KAAKkT,MAAMyqB,MAAQ14B,KAAKmmB,IAAIprB,KAAKkT,MAAMyqB,OACvC39B,KAAKkT,MAAMu8D,OAASxqE,KAAKmmB,IAAIprB,KAAKkT,MAAMu8D,QACxCzvE,KAAKkT,MAAMo8D,MAAQrqE,KAAKmmB,IAAIprB,KAAKkT,MAAMo8D,OAEhCtvE,MAGX0vE,MAAQ,WACJ,MAAOuB,GAASjxE,KAAK4vE,OAAS,IAGlC7oE,QAAU,WACN,MAAO/G,MAAKiwE,cACG,MAAbjwE,KAAKkwE,MACJlwE,KAAKmwE,QAAU,GAAM,OACK,QAA3B0C,EAAM7yE,KAAKmwE,QAAU,KAG3B6U,SAAW,SAAUiB,GACjB,GAAI5U,GAASyK,GAAa97E,MAAOimF,EAAYjmF,KAAK2uE,aAMlD,OAJIsX,KACA5U,EAASrxE,KAAK2uE,aAAasU,YAAYjjF,KAAMqxE,IAG1CrxE,KAAK2uE,aAAawU,WAAW9R,IAGxC99D,IAAM,SAAUi/D,EAAOlC,GAEnB,GAAIwB,GAAMjuE,GAAOuM,SAASoiE,EAAOlC,EAQjC,OANAtwE,MAAKiwE,eAAiB6B,EAAI7B,cAC1BjwE,KAAKkwE,OAAS4B,EAAI5B,MAClBlwE,KAAKmwE,SAAW2B,EAAI3B,QAEpBnwE,KAAKqwE,UAEErwE,MAGX6rB,SAAW,SAAU2mD,EAAOlC,GACxB,GAAIwB,GAAMjuE,GAAOuM,SAASoiE,EAAOlC,EAQjC,OANAtwE,MAAKiwE,eAAiB6B,EAAI7B,cAC1BjwE,KAAKkwE,OAAS4B,EAAI5B,MAClBlwE,KAAKmwE,SAAW2B,EAAI3B,QAEpBnwE,KAAKqwE,UAEErwE,MAGXwV,IAAM,SAAUu9D,GAEZ,MADAA,GAAQD,EAAeC,GAChB/yE,KAAK+yE,EAAMliB,cAAgB,QAGtCrhC,GAAK,SAAUujD,GACX,GAAInD,GAAMH,CAGV,IAFAsD,EAAQD,EAAeC,GAET,UAAVA,GAA+B,SAAVA,EAGrB,MAFAnD,GAAO5vE,KAAKkwE,MAAQlwE,KAAKiwE,cAAgB,MACzCR,EAASzvE,KAAKmwE,QAA8B,GAApB6M,GAAYpN,GACnB,UAAVmD,EAAoBtD,EAASA,EAAS,EAI7C,QADAG,EAAO5vE,KAAKkwE,MAAQjrE,KAAKipB,MAAM+uD,GAAYj9E,KAAKmwE,QAAU,KAClD4C,GACJ,IAAK,OAAQ,MAAOnD,GAAO,EAAI5vE,KAAKiwE,cAAgB,MACpD,KAAK,MAAO,MAAOL,GAAO5vE,KAAKiwE,cAAgB,KAC/C,KAAK,OAAQ,MAAc,IAAPL,EAAY5vE,KAAKiwE,cAAgB,IACrD,KAAK,SAAU,MAAc,IAAPL,EAAY,GAAK5vE,KAAKiwE,cAAgB,GAC5D,KAAK,SAAU,MAAc,IAAPL,EAAY,GAAK,GAAK5vE,KAAKiwE,cAAgB,GAEjE,KAAK,cAAe,MAAOhrE,MAAKC,MAAa,GAAP0qE,EAAY,GAAK,GAAK,KAAQ5vE,KAAKiwE,aACzE,SAAS,KAAM,IAAIrsE,OAAM,gBAAkBmvE,KAKvD55B,KAAOt1C,GAAO4V,GAAG0/B,KACjBtU,OAAShhC,GAAO4V,GAAGorB,OAEnBqhD,YAAchY,EACV,sFAEA,WACI,MAAOluE,MAAKmH,gBAIpBA,YAAc,WAEV,GAAImoE,GAAQrqE,KAAKmmB,IAAIprB,KAAKsvE,SACtBG,EAASxqE,KAAKmmB,IAAIprB,KAAKyvE,UACvBG,EAAO3qE,KAAKmmB,IAAIprB,KAAK4vE,QACrBjyC,EAAQ14B,KAAKmmB,IAAIprB,KAAK29B,SACtBC,EAAU34B,KAAKmmB,IAAIprB,KAAK49B,WACxBC,EAAU54B,KAAKmmB,IAAIprB,KAAK69B,UAAY79B,KAAK89B,eAAiB,IAE9D,OAAK99B,MAAKmmF,aAMFnmF,KAAKmmF,YAAc,EAAI,IAAM,IACjC,KACC7W,EAAQA,EAAQ,IAAM,KACtBG,EAASA,EAAS,IAAM,KACxBG,EAAOA,EAAO,IAAM,KACnBjyC,GAASC,GAAWC,EAAW,IAAM,KACtCF,EAAQA,EAAQ,IAAM,KACtBC,EAAUA,EAAU,IAAM,KAC1BC,EAAUA,EAAU,IAAM,IAXpB,OAcf8wC,WAAa,WACT,MAAO3uE,MAAKowE,WAIpBvsE,GAAOuM,SAASqJ,GAAGrU,SAAWvB,GAAOuM,SAASqJ,GAAGtS,WAQjD,KAAK5B,KAAKq4E,IACFzQ,EAAWyQ,GAAwBr4E,KACnC23E,GAAmB33E,GAAEsrD,cAI7BhtD,IAAOuM,SAASqJ,GAAG2sE,eAAiB,WAChC,MAAOpmF,MAAKwvB,GAAG,OAEnB3rB,GAAOuM,SAASqJ,GAAG0sE,UAAY,WAC3B,MAAOnmF,MAAKwvB,GAAG,MAEnB3rB,GAAOuM,SAASqJ,GAAG4sE,UAAY,WAC3B,MAAOrmF,MAAKwvB,GAAG,MAEnB3rB,GAAOuM,SAASqJ,GAAG6sE,QAAU,WACzB,MAAOtmF,MAAKwvB,GAAG,MAEnB3rB,GAAOuM,SAASqJ,GAAG8sE,OAAS,WACxB,MAAOvmF,MAAKwvB,GAAG,MAEnB3rB,GAAOuM,SAASqJ,GAAG+sE,QAAU,WACzB,MAAOxmF,MAAKwvB,GAAG,UAEnB3rB,GAAOuM,SAASqJ,GAAGgtE,SAAW,WAC1B,MAAOzmF,MAAKwvB,GAAG,MAEnB3rB,GAAOuM,SAASqJ,GAAGitE,QAAU,WACzB,MAAO1mF,MAAKwvB,GAAG,MASnB3rB,GAAOghC,OAAO,MACV8hD,aAAc,uBACd/X,QAAU,SAAUsC,GAChB,GAAI/qE,GAAI+qE,EAAS,GACbG,EAAuC,IAA7BwB,EAAM3B,EAAS,IAAM,IAAa,KACrC,IAAN/qE,EAAW,KACL,IAANA,EAAW,KACL,IAANA,EAAW,KAAO,IACvB,OAAO+qE,GAASG,KA4BpB8D,GACAt1E,EAAOD,QAAUiE,IAEfooE,EAAgC,SAAU2a,EAAShnF,EAASC,GAM1D,MALIA,GAAOkvE,QAAUlvE,EAAOkvE,UAAYlvE,EAAOkvE,SAAS8X,YAAa,IAEjEtJ,GAAY15E,OAASy5E,IAGlBz5E,IACTtD,KAAKX,EAASM,EAAqBN,EAASC,KAASosE,IAAkC1lE,IAAc1G,EAAOD,QAAUqsE,IACxHkR,IAAW,MAIhB58E,KAAKP,QAEqBO,KAAKX,EAAU,WAAa,MAAOI,SAAYE,EAAoB,IAAIL,KAIhG,SAASA,EAAQD,EAASM,GAE9B,GAAI+rE,IAMJ,SAAUxkE,EAAQlB,GA4OlB,QAASugF,KACFxhD,EAAOyhD,QAKVC,EAAMC,sBAGNC,EAAMC,KAAK7hD,EAAO8hD,SAAU,SAASnnD,GACjConD,EAAUC,SAASrnD,KAIvB+mD,EAAMO,QAAQjiD,EAAOkiD,SAAUC,EAAYJ,EAAUK,QACrDV,EAAMO,QAAQjiD,EAAOkiD,SAAUG,EAAWN,EAAUK,QAGpDpiD,EAAOyhD,OAAQ,GAxOnB,GAAIzhD,GAAS,QAASA,GAAOx8B,EAASiG,GAClC,MAAO,IAAIu2B,GAAOsiD,SAAS9+E,EAASiG,OAUxCu2B,GAAOk4C,QAAU,QAgBjBl4C,EAAOuiD,UAOHC,UAQIC,WAAY,OASZC,YAAa,QAUbC,aAAc,OAQdC,eAAgB,OAShBC,SAAU,OAaVC,kBAAmB,kBAU3B9iD,EAAOkiD,SAAW31E,SAOlByzB,EAAO+iD,kBAAoBn/E,UAAUo/E,gBAAkBp/E,UAAUq/E,iBAOjEjjD,EAAOkjD,gBAAmB,gBAAkB/gF,GAO5C69B,EAAOmjD,UAAY,6CAA6Cn6E,KAAKpF,UAAUC,WAO/Em8B,EAAOojD,eAAkBpjD,EAAOkjD,iBAAmBljD,EAAOmjD,WAAcnjD,EAAO+iD,kBAQ/E/iD,EAAOqjD,mBAAqB,EAU5B,IAAIC,MASAC,EAAiBvjD,EAAOujD,eAAiB,OACzCC,EAAiBxjD,EAAOwjD,eAAiB,OACzCC,EAAezjD,EAAOyjD,aAAe,KACrCC,EAAkB1jD,EAAO0jD,gBAAkB,QAS3CC,EAAgB3jD,EAAO2jD,cAAgB,QACvCC,EAAgB5jD,EAAO4jD,cAAgB,QACvCC,EAAc7jD,EAAO6jD,YAAc,MASnCC,EAAc9jD,EAAO8jD,YAAc,QACnC3B,EAAaniD,EAAOmiD,WAAa,OACjCE,EAAYriD,EAAOqiD,UAAY,MAC/B0B,EAAgB/jD,EAAO+jD,cAAgB,UACvCC,EAAchkD,EAAOgkD,YAAc,OASvChkD,GAAOyhD,OAAQ,EAOfzhD,EAAOikD,QAAUjkD,EAAOikD,YAQxBjkD,EAAO8hD,SAAW9hD,EAAO8hD,YAkCzB,IAAIF,GAAQ5hD,EAAOkkD,OAUfnkF,OAAQ,SAAgBokF,EAAMtkC,EAAK8Y,GAC/B,IAAI,GAAIr1D,KAAOu8C,IACPA,EAAIt/C,eAAe+C,IAAS6gF,EAAK7gF,KAASrC,GAAa03D,IAG3DwrB,EAAK7gF,GAAOu8C,EAAIv8C,GAEpB,OAAO6gF,IAUX51E,GAAI,SAAY/K,EAASjC,EAAM6iF,GAC3B5gF,EAAQD,iBAAiBhC,EAAM6iF,GAAS,IAU5C11E,IAAK,SAAalL,EAASjC,EAAM6iF,GAC7B5gF,EAAQO,oBAAoBxC,EAAM6iF,GAAS,IAa/CvC,KAAM,SAAc7jE,EAAKqmE,EAAUjwE,GAC/B,GAAInU,GAAGC,CAGP,IAAG,WAAa8d,GACZA,EAAI/a,QAAQohF,EAAUjwE,OAEnB,IAAG4J,EAAI5d,SAAWa,GACrB,IAAIhB,EAAI,EAAGC,EAAM8d,EAAI5d,OAAYF,EAAJD,EAASA,IAClC,GAAGokF,EAASppF,KAAKmZ,EAAS4J,EAAI/d,GAAIA,EAAG+d,MAAS,EAC1C,WAKR,KAAI/d,IAAK+d,GACL,GAAGA,EAAIzd,eAAeN,IAClBokF,EAASppF,KAAKmZ,EAAS4J,EAAI/d,GAAIA,EAAG+d,MAAS,EAC3C,QAahBsmE,MAAO,SAAezkC,EAAK0kC,GACvB,MAAO1kC,GAAIz+C,QAAQmjF,GAAQ,IAU/BC,QAAS,SAAiB3kC,EAAK0kC,GAC3B,GAAG1kC,EAAIz+C,QAAS,CACZ,GAAI2B,GAAQ88C,EAAIz+C,QAAQmjF,EACxB,OAAkB,KAAVxhF,GAAgB,EAAQA,EAEhC,IAAI,GAAI9C,GAAI,EAAGC,EAAM2/C,EAAIz/C,OAAYF,EAAJD,EAASA,IACtC,GAAG4/C,EAAI5/C,KAAOskF,EACV,MAAOtkF,EAGf,QAAO,GAUfkD,QAAS,SAAiB6a,GACtB,MAAOtd,OAAMyN,UAAU6pB,MAAM/8B,KAAK+iB,EAAK,IAU3CymE,UAAW,SAAmB1kC,EAAMvgB,GAChC,KAAMugB,GAAM,CACR,GAAGA,GAAQvgB,EACP,OAAO,CAEXugB,GAAOA,EAAKv7C,WAEhB,OAAO,GASXkgF,UAAW,SAAmBppD,GAC1B,GAAI5B,MACAC,KACA/hB,KACAG,KACA5R,EAAMxG,KAAKwG,IACXyB,EAAMjI,KAAKiI,GAGf,OAAsB,KAAnB0zB,EAAQl7B,QAEHs5B,MAAO4B,EAAQ,GAAG5B,MAClBC,MAAO2B,EAAQ,GAAG3B,MAClB/hB,QAAS0jB,EAAQ,GAAG1jB,QACpBG,QAASujB,EAAQ,GAAGvjB,UAI5B6pE,EAAMC,KAAKvmD,EAAS,SAASvC,GACzBW,EAAM92B,KAAKm2B,EAAMW,OACjBC,EAAM/2B,KAAKm2B,EAAMY,OACjB/hB,EAAQhV,KAAKm2B,EAAMnhB,SACnBG,EAAQnV,KAAKm2B,EAAMhhB,YAInB2hB,OAAQvzB,EAAI6M,MAAMrT,KAAM+5B,GAAS9xB,EAAIoL,MAAMrT,KAAM+5B,IAAU,EAC3DC,OAAQxzB,EAAI6M,MAAMrT,KAAMg6B,GAAS/xB,EAAIoL,MAAMrT,KAAMg6B,IAAU,EAC3D/hB,SAAUzR,EAAI6M,MAAMrT,KAAMiY,GAAWhQ,EAAIoL,MAAMrT,KAAMiY,IAAY,EACjEG,SAAU5R,EAAI6M,MAAMrT,KAAMoY,GAAWnQ,EAAIoL,MAAMrT,KAAMoY,IAAY,KAYzE4sE,YAAa,SAAqBC,EAAWhqD,EAAQC,GACjD,OACI9tB,EAAGpN,KAAKmmB,IAAI8U,EAASgqD,IAAc,EACnC53E,EAAGrN,KAAKmmB,IAAI+U,EAAS+pD,IAAc,IAW3CC,SAAU,SAAkBC,EAAQC,GAChC,GAAIh4E,GAAIg4E,EAAOntE,QAAUktE,EAAOltE,QAC5B5K,EAAI+3E,EAAOhtE,QAAU+sE,EAAO/sE,OAEhC,OAA0B,KAAnBpY,KAAKixD,MAAM5jD,EAAGD,GAAWpN,KAAKknB,IAUzCm+D,aAAc,SAAsBF,EAAQC,GACxC,GAAIh4E,GAAIpN,KAAKmmB,IAAIg/D,EAAOltE,QAAUmtE,EAAOntE,SACrC5K,EAAIrN,KAAKmmB,IAAIg/D,EAAO/sE,QAAUgtE,EAAOhtE,QAEzC,OAAGhL,IAAKC,EACG83E,EAAOltE,QAAUmtE,EAAOntE,QAAU,EAAI4rE,EAAiBE,EAE3DoB,EAAO/sE,QAAUgtE,EAAOhtE,QAAU,EAAI0rE,EAAeF,GAUhE3sB,YAAa,SAAqBkuB,EAAQC,GACtC,GAAIh4E,GAAIg4E,EAAOntE,QAAUktE,EAAOltE,QAC5B5K,EAAI+3E,EAAOhtE,QAAU+sE,EAAO/sE,OAEhC,OAAOpY,MAAKirB,KAAM7d,EAAIA,EAAMC,EAAIA,IAWpCigD,SAAU,SAAkBriD,EAAOC,GAE/B,MAAGD,GAAMxK,QAAU,GAAKyK,EAAIzK,QAAU,EAC3B1F,KAAKk8D,YAAY/rD,EAAI,GAAIA,EAAI,IAAMnQ,KAAKk8D,YAAYhsD,EAAM,GAAIA,EAAM,IAExE,GAUXq6E,YAAa,SAAqBr6E,EAAOC,GAErC,MAAGD,GAAMxK,QAAU,GAAKyK,EAAIzK,QAAU,EAC3B1F,KAAKmqF,SAASh6E,EAAI,GAAIA,EAAI,IAAMnQ,KAAKmqF,SAASj6E,EAAM,GAAIA,EAAM,IAElE,GASXs6E,WAAY,SAAoBhvD,GAC5B,MAAOA,IAAautD,GAAgBvtD,GAAaqtD,GAWrD4B,eAAgB,SAAwB3hF,EAASlD,EAAMwB,EAAOsjF,GAC1D,GAAIC,IAAY,GAAI,SAAU,MAAO,IAAK,KAC1C/kF,GAAOshF,EAAM0D,YAAYhlF,EAEzB,KAAI,GAAIL,GAAI,EAAGA,EAAIolF,EAASjlF,OAAQH,IAAK,CACrC,GAAI7E,GAAIkF,CAOR,IALG+kF,EAASplF,KACR7E,EAAIiqF,EAASplF,GAAK7E,EAAE48B,MAAM,EAAG,GAAGjxB,cAAgB3L,EAAE48B,MAAM,IAIzD58B,IAAKoI,GAAQ0E,MAAO,CACnB1E,EAAQ0E,MAAM9M,IAAgB,MAAVgqF,GAAkBA,IAAWtjF,GAAS,EAC1D,UAeZyjF,eAAgB,SAAwB/hF,EAAS/C,EAAO2kF,GACpD,GAAI3kF,GAAU+C,GAAYA,EAAQ0E,MAAlC,CAKA05E,EAAMC,KAAKphF,EAAO,SAASqB,EAAOxB,GAC9BshF,EAAMuD,eAAe3hF,EAASlD,EAAMwB,EAAOsjF,IAG/C,IAAII,GAAUJ,GAAU,WACpB,OAAO,EAIY,SAApB3kF,EAAMgiF,aACLj/E,EAAQiiF,cAAgBD,GAGP,QAAlB/kF,EAAMoiF,WACLr/E,EAAQkiF,YAAcF,KAU9BF,YAAa,SAAqBK,GAC9B,MAAOA,GAAI7+E,QAAQ,eAAgB,SAASb,GACxC,MAAOA,GAAE,GAAGc,kBAapB26E,EAAQ1hD,EAAO97B,OAQf0hF,oBAAoB,EAQpBC,SAAS,EAQTC,cAAc,EAWdv3E,GAAI,SAAY/K,EAASjC,EAAM6iF,EAAS2B,GACpC,GAAI5zE,GAAQ5Q,EAAKoB,MAAM,IACvBi/E,GAAMC,KAAK1vE,EAAO,SAAS5Q,GACvBqgF,EAAMrzE,GAAG/K,EAASjC,EAAM6iF,GACxB2B,GAAQA,EAAKxkF,MAarBmN,IAAK,SAAalL,EAASjC,EAAM6iF,EAAS2B,GACtC,GAAI5zE,GAAQ5Q,EAAKoB,MAAM,IACvBi/E,GAAMC,KAAK1vE,EAAO,SAAS5Q,GACvBqgF,EAAMlzE,IAAIlL,EAASjC,EAAM6iF,GACzB2B,GAAQA,EAAKxkF,MAarB0gF,QAAS,SAAiBz+E,EAASo7D,EAAWwlB,GAC1C,GAAIje,GAAOzrE,KAEPsrF,EAAiB,SAAwBC,GACzC,GAGIC,GAHAC,EAAUF,EAAG1kF,KAAKgqD,cAClB66B,EAAYpmD,EAAO+iD,kBACnBsD,EAAUzE,EAAM0C,MAAM6B,EAAS,QAKhCE,IAAWlgB,EAAKyf,qBAITS,GAAWznB,GAAaklB,GAA6B,IAAdmC,EAAGt+D,QAChDw+C,EAAKyf,oBAAqB,EAC1Bzf,EAAK2f,cAAe,GACdM,GAAaxnB,GAAaklB,EAChC3d,EAAK2f,aAA+B,IAAfG,EAAGK,SAAiBC,EAAaC,UAAU5C,EAAeqC,GAExEI,GAAWznB,GAAaklB,IAC/B3d,EAAKyf,oBAAqB,EAC1Bzf,EAAK2f,cAAe,GAIrBM,GAAaxnB,GAAayjB,GACzBkE,EAAaE,cAAc7nB,EAAWqnB,GAIvC9f,EAAK2f,eACJI,EAAc/f,EAAKugB,SAASzrF,KAAKkrE,EAAM8f,EAAIrnB,EAAWp7D,EAAS4gF,IAKhE8B,GAAe7D,IACdlc,EAAKyf,oBAAqB,EAC1Bzf,EAAK2f,cAAe,EACpBS,EAAahjC,SAId6iC,GAAaxnB,GAAayjB,GACzBkE,EAAaE,cAAc7nB,EAAWqnB,IAK9C,OADAvrF,MAAK6T,GAAG/K,EAAS8/E,EAAY1kB,GAAYonB,GAClCA,GAaXU,SAAU,SAAkBT,EAAIrnB,EAAWp7D,EAAS4gF,GAChD,GAAIuC,GAAYjsF,KAAKmkE,aAAaonB,EAAIrnB,GAClCgoB,EAAkBD,EAAUvmF,OAC5B8lF,EAActnB,EACdioB,EAAgBF,EAAUG,QAC1BC,EAAgBH,CAGjBhoB,IAAaklB,EACZ+C,EAAgB7C,EAEVplB,GAAayjB,IACnBwE,EAAgB9C,EAGhBgD,EAAgBJ,EAAUvmF,QAAW6lF,EAAiB,eAAIA,EAAGe,eAAe5mF,OAAS,IAMtF2mF,EAAgB,GAAKrsF,KAAKmrF,UACzBK,EAAc/D,GAIlBznF,KAAKmrF,SAAU,CAGf,IAAIoB,GAASvsF,KAAKokE,iBAAiBt7D,EAAS0iF,EAAaS,EAAWV,EA4BpE,OAxBGrnB,IAAayjB,GACZ+B,EAAQnpF,KAAK8mF,EAAWkF,GAIzBJ,IACCI,EAAOF,cAAgBA,EACvBE,EAAOroB,UAAYioB,EAEnBzC,EAAQnpF,KAAK8mF,EAAWkF,GAExBA,EAAOroB,UAAYsnB,QACZe,GAAOF,eAIfb,GAAe7D,IACd+B,EAAQnpF,KAAK8mF,EAAWkF,GAIxBvsF,KAAKmrF,SAAU,GAGZK,GAUXvE,oBAAqB,WACjB,GAAIxvE,EAgCJ,OA7BQA,GAFL6tB,EAAO+iD,kBACH5gF,EAAOokF,cAEF,cACA,cACA,+CAIA,gBACA,gBACA,oDAGFvmD,EAAOojD,gBAET,aACA,YACA,yBAIA,uBACA,sBACA,gCAIRE,EAAYQ,GAAe3xE,EAAM,GACjCmxE,EAAYnB,GAAchwE,EAAM,GAChCmxE,EAAYjB,GAAalwE,EAAM,GACxBmxE,GAUXzkB,aAAc,SAAsBonB,EAAIrnB,GAEpC,GAAG5+B,EAAO+iD,kBACN,MAAOwD,GAAa1nB,cAIxB,IAAGonB,EAAG3qD,QAAS,CACX,GAAGsjC,GAAaujB,EACZ,MAAO8D,GAAG3qD,OAGd,IAAI4rD,MACAl4E,KAAYA,OAAO4yE,EAAMz+E,QAAQ8iF,EAAG3qD,SAAUsmD,EAAMz+E,QAAQ8iF,EAAGe,iBAC/DL,IASJ,OAPA/E,GAAMC,KAAK7yE,EAAQ,SAAS+pB,GACrB6oD,EAAM4C,QAAQ0C,EAAanuD,EAAMouD,eAAgB,GAChDR,EAAU/jF,KAAKm2B,GAEnBmuD,EAAYtkF,KAAKm2B,EAAMouD,cAGpBR,EAKX,MADAV,GAAGkB,WAAa,GACRlB,IAYZnnB,iBAAkB,SAA0Bt7D,EAASo7D,EAAWtjC,EAAS2qD,GAErE,GAAImB,GAAcxD,CAOlB,OANGhC,GAAM0C,MAAM2B,EAAG1kF,KAAM,UAAYglF,EAAaC,UAAU7C,EAAesC,GACtEmB,EAAczD,EACR4C,EAAaC,UAAU3C,EAAaoC,KAC1CmB,EAAcvD,IAIdz8D,OAAQw6D,EAAM8C,UAAUppD,GACxB+rD,UAAWtoF,KAAKq5B,MAChB/zB,OAAQ4hF,EAAG5hF,OACXi3B,QAASA,EACTsjC,UAAWA,EACXwoB,YAAaA,EACb54C,SAAUy3C,EAMVhiF,eAAgB,WACZ,GAAIuqC,GAAW9zC,KAAK8zC,QACpBA,GAAS84C,qBAAuB94C,EAAS84C,sBACzC94C,EAASvqC,gBAAkBuqC,EAASvqC,kBAMxCo8B,gBAAiB,WACb3lC,KAAK8zC,SAASnO,mBAQlBknD,WAAY,WACR,MAAOxF,GAAUwF,iBAa7BhB,EAAevmD,EAAOumD,cAMtBiB,YAOA3oB,aAAc,WACV,GAAI4oB,KAKJ,OAHA7F,GAAMC,KAAKnnF,KAAK8sF,SAAU,SAAStsD,GAC/BusD,EAAU7kF,KAAKs4B,KAEZusD,GASXhB,cAAe,SAAuB7nB,EAAW8oB,GAC1C9oB,GAAayjB,GAAczjB,GAAayjB,GAAsC,IAAzBqF,EAAapB,cAC1D5rF,MAAK8sF,SAASE,EAAaC,YAElCD,EAAaP,WAAaO,EAAaC,UACvCjtF,KAAK8sF,SAASE,EAAaC,WAAaD,IAUhDlB,UAAW,SAAmBY,EAAanB,GACvC,IAAIA,EAAGmB,YACH,OAAO,CAGX,IAAIQ,GAAK3B,EAAGmB,YACRj1E,IAKJ,OAHAA,GAAMwxE,GAAkBiE,KAAQ3B,EAAG4B,sBAAwBlE,GAC3DxxE,EAAMyxE,GAAkBgE,KAAQ3B,EAAG6B,sBAAwBlE,GAC3DzxE,EAAM0xE,GAAgB+D,KAAQ3B,EAAG8B,oBAAsBlE,GAChD1xE,EAAMi1E,IAOjB7jC,MAAO,WACH7oD,KAAK8sF,cAWTzF,EAAY/hD,EAAOgoD,WAEnBlG,YAGAhtD,QAAS,KAITgD,SAAU,KAGVmwD,SAAS,EAQTC,YAAa,SAAqBC,EAAMC,GAEjC1tF,KAAKo6B,UAIRp6B,KAAKutF,SAAU,EAGfvtF,KAAKo6B,SACDqzD,KAAMA,EACNE,WAAYzG,EAAM7hF,UAAWqoF,GAC7BE,WAAW,EACXC,eAAe,EACfC,iBAAiB,EACjBC,gBACAv3E,KAAM,IAGVxW,KAAK0nF,OAAOgG,KAShBhG,OAAQ,SAAgBgG,GACpB,GAAI1tF,KAAKo6B,UAAWp6B,KAAKutF,QAAzB,CAKAG,EAAY1tF,KAAKguF,gBAAgBN,EAGjC,IAAID,GAAOztF,KAAKo6B,QAAQqzD,KACpBQ,EAAcR,EAAK1+E,OAmBvB,OAhBAm4E,GAAMC,KAAKnnF,KAAKonF,SAAU,SAAwBnnD,IAE1CjgC,KAAKutF,SAAWE,EAAKz+E,SAAWi/E,EAAYhuD,EAAQzpB,OACpDypB,EAAQypD,QAAQnpF,KAAK0/B,EAASytD,EAAWD,IAE9CztF,MAGAA,KAAKo6B,UACJp6B,KAAKo6B,QAAQwzD,UAAYF,GAG1BA,EAAUxpB,WAAayjB,GACtB3nF,KAAK6sF,aAGFa,IASXb,WAAY,WAGR7sF,KAAKo9B,SAAW8pD,EAAM7hF,UAAWrF,KAAKo6B,SAGtCp6B,KAAKo6B,QAAU,KACfp6B,KAAKutF,SAAU,GAYnBW,kBAAmB,SAA2B3C,EAAI7+D,EAAQw9D,EAAWhqD,EAAQC,GACzE,GAAIwZ,GAAM35C,KAAKo6B,QACX+zD,GAAS,EACTC,EAASz0C,EAAIk0C,cACbQ,EAAW10C,EAAIo0C,YAEhBK,IAAU7C,EAAGoB,UAAYyB,EAAOzB,UAAYrnD,EAAOqjD,qBAClDj8D,EAAS0hE,EAAO1hE,OAChBw9D,EAAYqB,EAAGoB,UAAYyB,EAAOzB,UAClCzsD,EAASqrD,EAAG7+D,OAAOxP,QAAUkxE,EAAO1hE,OAAOxP,QAC3CijB,EAASorD,EAAG7+D,OAAOrP,QAAU+wE,EAAO1hE,OAAOrP,QAC3C8wE,GAAS,IAGV5C,EAAGrnB,WAAaolB,GAAeiC,EAAGrnB,WAAamlB,KAC9C1vC,EAAIm0C,gBAAkBvC,KAGtB5xC,EAAIk0C,eAAiBM,KACrBE,EAASpyB,SAAWirB,EAAM+C,YAAYC,EAAWhqD,EAAQC,GACzDkuD,EAASlhC,MAAQ+5B,EAAMiD,SAASz9D,EAAQ6+D,EAAG7+D,QAC3C2hE,EAAS7yD,UAAY0rD,EAAMoD,aAAa59D,EAAQ6+D,EAAG7+D,QAEnDitB,EAAIk0C,cAAgBl0C,EAAIm0C,iBAAmBvC,EAC3C5xC,EAAIm0C,gBAAkBvC,GAG1BA,EAAG+C,UAAYD,EAASpyB,SAAS5pD,EACjCk5E,EAAGgD,UAAYF,EAASpyB,SAAS3pD,EACjCi5E,EAAGiD,aAAeH,EAASlhC,MAC3Bo+B,EAAGkD,iBAAmBJ,EAAS7yD,WASnCwyD,gBAAiB,SAAyBzC,GACtC,GAAI5xC,GAAM35C,KAAKo6B,QACXs0D,EAAU/0C,EAAIg0C,WACdgB,EAASh1C,EAAIi0C,WAAac,GAG3BnD,EAAGrnB,WAAaolB,GAAeiC,EAAGrnB,WAAamlB,KAC9CqF,EAAQ9tD,WACRsmD,EAAMC,KAAKoE,EAAG3qD,QAAS,SAASvC,GAC5BqwD,EAAQ9tD,QAAQ14B,MACZgV,QAASmhB,EAAMnhB,QACfG,QAASghB,EAAMhhB,YAK3B,IAAI6sE,GAAYqB,EAAGoB,UAAY+B,EAAQ/B,UACnCzsD,EAASqrD,EAAG7+D,OAAOxP,QAAUwxE,EAAQhiE,OAAOxP,QAC5CijB,EAASorD,EAAG7+D,OAAOrP,QAAUqxE,EAAQhiE,OAAOrP,OAkBhD,OAhBArd,MAAKkuF,kBAAkB3C,EAAIoD,EAAOjiE,OAAQw9D,EAAWhqD,EAAQC,GAE7D+mD,EAAM7hF,OAAOkmF,GACToC,WAAYe,EAEZxE,UAAWA,EACXhqD,OAAQA,EACRC,OAAQA,EAERja,SAAUghE,EAAMhrB,YAAYwyB,EAAQhiE,OAAQ6+D,EAAG7+D,QAC/CygC,MAAO+5B,EAAMiD,SAASuE,EAAQhiE,OAAQ6+D,EAAG7+D,QACzC8O,UAAW0rD,EAAMoD,aAAaoE,EAAQhiE,OAAQ6+D,EAAG7+D,QACjDlP,MAAO0pE,EAAM30B,SAASm8B,EAAQ9tD,QAAS2qD,EAAG3qD,SAC1CguD,SAAU1H,EAAMqD,YAAYmE,EAAQ9tD,QAAS2qD,EAAG3qD,WAG7C2qD,GASXjE,SAAU,SAAkBrnD,GAExB,GAAIlxB,GAAUkxB,EAAQ4nD,YAyBtB,OAxBG94E,GAAQkxB,EAAQzpB,QAAUjQ,IACzBwI,EAAQkxB,EAAQzpB,OAAQ,GAI5B0wE,EAAM7hF,OAAOigC,EAAOuiD,SAAU94E,GAAS,GAGvCkxB,EAAQ53B,MAAQ43B,EAAQ53B,OAAS,IAGjCrI,KAAKonF,SAASl/E,KAAK+3B,GAGnBjgC,KAAKonF,SAAS3wE,KAAK,SAASnR,EAAGa,GAC3B,MAAGb,GAAE+C,MAAQlC,EAAEkC,MACJ,GAER/C,EAAE+C,MAAQlC,EAAEkC,MACJ,EAEJ,IAGJrI,KAAKonF,UAmBpB9hD,GAAOsiD,SAAW,SAAS9+E,EAASiG,GAChC,GAAI08D,GAAOzrE,IAIX8mF,KAMA9mF,KAAK8I,QAAUA,EAOf9I,KAAKgP,SAAU,EAQfk4E,EAAMC,KAAKp4E,EAAS,SAAS3H,EAAOoP,SACzBzH,GAAQyH,GACfzH,EAAQm4E,EAAM0D,YAAYp0E,IAASpP,IAGvCpH,KAAK+O,QAAUm4E,EAAM7hF,OAAO6hF,EAAM7hF,UAAWigC,EAAOuiD,UAAW94E,OAG5D/O,KAAK+O,QAAQ+4E,UACZZ,EAAM2D,eAAe7qF,KAAK8I,QAAS9I,KAAK+O,QAAQ+4E,UAAU,GAQ9D9nF,KAAK6uF,kBAAoB7H,EAAMO,QAAQz+E,EAASsgF,EAAa,SAASmC,GAC/D9f,EAAKz8D,SAAWu8E,EAAGrnB,WAAaklB,EAC/B/B,EAAUmG,YAAY/hB,EAAM8f,GACtBA,EAAGrnB,WAAaolB,GACtBjC,EAAUK,OAAO6D,KASzBvrF,KAAK8uF,kBAGTxpD,EAAOsiD,SAASn0E,WASZI,GAAI,SAAiBuzE,EAAUsC,GAC3B,GAAIje,GAAOzrE,IAIX,OAHAgnF,GAAMnzE,GAAG43D,EAAK3iE,QAASs+E,EAAUsC,EAAS,SAAS7iF,GAC/C4kE,EAAKqjB,cAAc5mF,MAAO+3B,QAASp5B,EAAM6iF,QAASA,MAE/Cje,GAUXz3D,IAAK,SAAkBozE,EAAUsC,GAC7B,GAAIje,GAAOzrE,IAQX,OANAgnF,GAAMhzE,IAAIy3D,EAAK3iE,QAASs+E,EAAUsC,EAAS,SAAS7iF,GAChD,GAAIwB,GAAQ6+E,EAAM4C,SAAU7pD,QAASp5B,EAAM6iF,QAASA,GACjDrhF,MAAU,GACTojE,EAAKqjB,cAAcxmF,OAAOD,EAAO,KAGlCojE,GAUX2gB,QAAS,SAAsBnsD,EAASytD,GAEhCA,IACAA,KAIJ,IAAIlkF,GAAQ87B,EAAOkiD,SAASuH,YAAY,QACxCvlF,GAAMwlF,UAAU/uD,GAAS,GAAM,GAC/Bz2B,EAAMy2B,QAAUytD,CAIhB,IAAI5kF,GAAU9I,KAAK8I,OAMnB,OALGo+E,GAAM6C,UAAU2D,EAAU/jF,OAAQb,KACjCA,EAAU4kF,EAAU/jF,QAGxBb,EAAQmmF,cAAczlF,GACfxJ,MASX4jC,OAAQ,SAAgBsrD,GAEpB,MADAlvF,MAAKgP,QAAUkgF,EACRlvF,MAQXmvF,QAAS,WACL,GAAI5pF,GAAG6pF,CAMP,KAHAlI,EAAM2D,eAAe7qF,KAAK8I,QAAS9I,KAAK+O,QAAQ+4E,UAAU,GAGtDviF,EAAI,GAAK6pF,EAAKpvF,KAAK8uF,gBAAgBvpF,IACnC2hF,EAAMlzE,IAAIhU,KAAK8I,QAASsmF,EAAGnvD,QAASmvD,EAAG1F,QAQ3C,OALA1pF,MAAK8uF,iBAGL9H,EAAMhzE,IAAIhU,KAAK8I,QAAS8/E,EAAYQ,GAAcppF,KAAK6uF,mBAEhD,OAqDf,SAAUr4E,GAGN,QAAS64E,GAAY9D,EAAIkC,GACrB,GAAI9zC,GAAM0tC,EAAUjtD,OAGpB,MAAGqzD,EAAK1+E,QAAQugF,eAAiB,GAC7B/D,EAAG3qD,QAAQl7B,OAAS+nF,EAAK1+E,QAAQugF,gBAIrC,OAAO/D,EAAGrnB,WACN,IAAKklB,GACDmG,GAAY,CACZ,MAEJ,KAAK9H,GAGD,GAAG8D,EAAGrlE,SAAWunE,EAAK1+E,QAAQygF,iBAC1B71C,EAAInjC,MAAQA,EACZ,MAGJ,IAAIi5E,GAAc91C,EAAIg0C,WAAWjhE,MAGjC,IAAGitB,EAAInjC,MAAQA,IACXmjC,EAAInjC,KAAOA,EACRi3E,EAAK1+E,QAAQ2gF,wBAA0BnE,EAAGrlE,SAAW,GAAG,CAIvD,GAAI+/B,GAAShhD,KAAKmmB,IAAIqiE,EAAK1+E,QAAQygF,gBAAkBjE,EAAGrlE,SACxDupE,GAAYzwD,OAASusD,EAAGrrD,OAAS+lB,EACjCwpC,EAAYxwD,OAASssD,EAAGprD,OAAS8lB,EACjCwpC,EAAYvyE,SAAWquE,EAAGrrD,OAAS+lB,EACnCwpC,EAAYpyE,SAAWkuE,EAAGprD,OAAS8lB,EAGnCslC,EAAKlE,EAAU2G,gBAAgBzC,IAKpC5xC,EAAIi0C,UAAU+B,gBACXlC,EAAK1+E,QAAQ4gF,gBACXlC,EAAK1+E,QAAQ6gF,qBAAuBrE,EAAGrlE,YAE3CqlE,EAAGoE,gBAAiB,EAIxB,IAAIE,GAAgBl2C,EAAIi0C,UAAUpyD,SAC/B+vD,GAAGoE,gBAAkBE,IAAkBtE,EAAG/vD,YAErC+vD,EAAG/vD,UADJ0rD,EAAMsD,WAAWqF,GACAtE,EAAGprD,OAAS,EAAK4oD,EAAeF,EAEhC0C,EAAGrrD,OAAS,EAAK4oD,EAAiBE,GAKtDuG,IACA9B,EAAKrB,QAAQ51E,EAAO,QAAS+0E,GAC7BgE,GAAY,GAIhB9B,EAAKrB,QAAQ51E,EAAM+0E,GACnBkC,EAAKrB,QAAQ51E,EAAO+0E,EAAG/vD,UAAW+vD,EAElC,IAAIf,GAAatD,EAAMsD,WAAWe,EAAG/vD,YAGjCiyD,EAAK1+E,QAAQ+gF,mBAAqBtF,GACjCiD,EAAK1+E,QAAQghF,sBAAwBvF,IACtCe,EAAGhiF,gBAEP,MAEJ,KAAK8/E,GACEkG,GAAahE,EAAGc,eAAiBoB,EAAK1+E,QAAQugF,iBAC7C7B,EAAKrB,QAAQ51E,EAAO,MAAO+0E,GAC3BgE,GAAY,EAEhB,MAEJ,KAAK5H,GACD4H,GAAY,GAzFxB,GAAIA,IAAY,CA8FhBjqD,GAAO8hD,SAAS4I,MACZx5E,KAAMA,EACNnO,MAAO,GACPqhF,QAAS2F,EACTxH,UAOI2H,gBAAiB,GAWjBE,wBAAwB,EAQxBJ,eAAgB,EAUhBS,qBAAqB,EAQrBD,mBAAmB,EASnBH,gBAAgB,EAShBC,oBAAqB,MAG9B,QAgBHtqD,EAAO8hD,SAAS6I,SACZz5E,KAAM,UACNnO,MAAO,KACPqhF,QAAS,SAAwB6B,EAAIkC,GACjCA,EAAKrB,QAAQpsF,KAAKwW,KAAM+0E,KAqBhC,SAAU/0E,GAGN,QAAS05E,GAAY3E,EAAIkC,GACrB,GAAI1+E,GAAU0+E,EAAK1+E,QACfqrB,EAAUitD,EAAUjtD,OAExB,QAAOmxD,EAAGrnB,WACN,IAAKklB,GACDxvE,aAAa6qC,GAGbrqB,EAAQ5jB,KAAOA,EAIfiuC,EAAQ5qC,WAAW,WACZugB,GAAWA,EAAQ5jB,MAAQA,GAC1Bi3E,EAAKrB,QAAQ51E,EAAM+0E,IAExBx8E,EAAQohF,YACX,MAEJ,KAAK1I,GACE8D,EAAGrlE,SAAWnX,EAAQqhF,eACrBx2E,aAAa6qC,EAEjB,MAEJ,KAAK4kC,GACDzvE,aAAa6qC,IA7BzB,GAAIA,EAkCJnf,GAAO8hD,SAASiJ,MACZ75E,KAAMA,EACNnO,MAAO,GACPw/E,UAMIsI,YAAa,IAQbC,cAAe,GAEnB1G,QAASwG,IAEd,QAeH5qD,EAAO8hD,SAASkJ,SACZ95E,KAAM,UACNnO,MAAO2Q,IACP0wE,QAAS,SAAwB6B,EAAIkC,GAC9BlC,EAAGrnB,WAAamlB,GACfoE,EAAKrB,QAAQpsF,KAAKwW,KAAM+0E,KAyCpCjmD,EAAO8hD,SAASmJ,OACZ/5E,KAAM,QACNnO,MAAO,GACPw/E,UAMI2I,gBAAiB,EAOjBC,gBAAiB,EAQjBC,eAAgB,GAQhBC,eAAgB,IAGpBjH,QAAS,SAAsB6B,EAAIkC,GAC/B,GAAGlC,EAAGrnB,WAAamlB,EAAe,CAC9B,GAAIzoD,GAAU2qD,EAAG3qD,QAAQl7B,OACrBqJ,EAAU0+E,EAAK1+E,OAGnB,IAAG6xB,EAAU7xB,EAAQyhF,iBACjB5vD,EAAU7xB,EAAQ0hF,gBAClB,QAKDlF,EAAG+C,UAAYv/E,EAAQ2hF,gBACtBnF,EAAGgD,UAAYx/E,EAAQ4hF,kBAEvBlD,EAAKrB,QAAQpsF,KAAKwW,KAAM+0E,GACxBkC,EAAKrB,QAAQpsF,KAAKwW,KAAO+0E,EAAG/vD,UAAW+vD,OA2BvD,SAAU/0E,GAGN,QAASo6E,GAAWrF,EAAIkC,GACpB,GAGIoD,GACAC,EAJA/hF,EAAU0+E,EAAK1+E,QACfqrB,EAAUitD,EAAUjtD,QACpBjI,EAAOk1D,EAAUjqD,QAIrB,QAAOmuD,EAAGrnB,WACN,IAAKklB,GACD2H,GAAW,CACX,MAEJ,KAAKtJ,GACDsJ,EAAWA,GAAaxF,EAAGrlE,SAAWnX,EAAQiiF,cAC9C,MAEJ,KAAKrJ,IACGT,EAAM0C,MAAM2B,EAAGz3C,SAASjtC,KAAM,WAAa0kF,EAAGrB,UAAYn7E,EAAQkiF,aAAeF,IAEjFF,EAAY1+D,GAAQA,EAAKy7D,WAAarC,EAAGoB,UAAYx6D,EAAKy7D,UAAUjB,UACpEmE,GAAe,EAGZ3+D,GAAQA,EAAK3b,MAAQA,GACnBq6E,GAAaA,EAAY9hF,EAAQmiF,mBAClC3F,EAAGrlE,SAAWnX,EAAQoiF,oBACtB1D,EAAKrB,QAAQ,YAAab,GAC1BuF,GAAe,KAIfA,GAAgB/hF,EAAQqiF,aACxBh3D,EAAQ5jB,KAAOA,EACfi3E,EAAKrB,QAAQhyD,EAAQ5jB,KAAM+0E,MAnC/C,GAAIwF,IAAW,CA0CfzrD,GAAO8hD,SAASiK,KACZ76E,KAAMA,EACNnO,MAAO,IACPqhF,QAASkH,EACT/I,UAOIoJ,WAAY,IAQZD,eAAgB,GAQhBI,WAAW,EAQXD,kBAAmB,GAQnBD,kBAAmB,OAG5B,OAeH5rD,EAAO8hD,SAASkK,OACZ96E,KAAM,QACNnO,OAAQ2Q,IACR6uE,UASIt+E,gBAAgB,EAQhBgoF,cAAc,GAElB7H,QAAS,SAAsB6B,EAAIkC,GAC/B,MAAGA,GAAK1+E,QAAQwiF,cAAgBhG,EAAGmB,aAAezD,MAC9CsC,GAAGsB,cAIJY,EAAK1+E,QAAQxF,gBACZgiF,EAAGhiF,sBAGJgiF,EAAGrnB,WAAaolB,GACfmE,EAAKrB,QAAQ,QAASb,OA4ClC,SAAU/0E,GAGN,QAASg7E,GAAiBjG,EAAIkC,GAC1B,OAAOlC,EAAGrnB,WACN,IAAKklB,GACDmG,GAAY,CACZ,MAEJ,KAAK9H,GAED,GAAG8D,EAAG3qD,QAAQl7B,OAAS,EACnB,MAGJ,IAAI+rF,GAAiBxsF,KAAKmmB,IAAI,EAAImgE,EAAG/tE,OACjCk0E,EAAoBzsF,KAAKmmB,IAAImgE,EAAGqD,SAIpC,IAAG6C,EAAiBhE,EAAK1+E,QAAQ4iF,mBAC7BD,EAAoBjE,EAAK1+E,QAAQ6iF,qBACjC,MAIJvK,GAAUjtD,QAAQ5jB,KAAOA,EAGrB+4E,IACA9B,EAAKrB,QAAQ51E,EAAO,QAAS+0E,GAC7BgE,GAAY,GAGhB9B,EAAKrB,QAAQ51E,EAAM+0E,GAGhBmG,EAAoBjE,EAAK1+E,QAAQ6iF,sBAChCnE,EAAKrB,QAAQ,SAAUb,GAIxBkG,EAAiBhE,EAAK1+E,QAAQ4iF,oBAC7BlE,EAAKrB,QAAQ,QAASb,GACtBkC,EAAKrB,QAAQ,SAAWb,EAAG/tE,MAAQ,EAAI,KAAO,OAAQ+tE,GAE1D,MAEJ,KAAKlC,GACEkG,GAAahE,EAAGc,cAAgB,IAC/BoB,EAAKrB,QAAQ51E,EAAO,MAAO+0E,GAC3BgE,GAAY,IAlD5B,GAAIA,IAAY,CAwDhBjqD,GAAO8hD,SAASyK,WACZr7E,KAAMA,EACNnO,MAAO,GACPw/E,UAOI8J,kBAAmB,IAQnBC,qBAAsB,GAG1BlI,QAAS8H,IAEd,aAQGvlB,EAAgC,WAC9B,MAAO3mC,IACT/kC,KAAKX,EAASM,EAAqBN,EAASC,KAASosE,IAAkC1lE,IAAc1G,EAAOD,QAAUqsE,KASzHxkE,SAIC,SAAS5H,EAAQD,GAYrBA,EAAQglD,oBAAsB,WAE7B5kD,KAAK8xF,aAAa9xF,KAAKohD,UAAUtC,WAAWC,iBAAiB,GAG7D/+C,KAAKutD,eAIDvtD,KAAK8gD,WACP9gD,KAAKknD,aAEPlnD,KAAKkQ,SASNtQ,EAAQkyF,aAAe,SAASC,EAAkBC,GAOhD,IANA,GAAIhsC,GAAgBhmD,KAAKwjD,YAAY99C,OAEjCusF,EAAY,GACZ10C,EAAQ,EAGLyI,EAAgB+rC,GAA4BE,EAAR10C,GACrCA,EAAQ,GAAK,GACfv9C,KAAKkyF,oBAAmB,GACxBlyF,KAAKmyF,0BAGLnyF,KAAKoyF,uBAGPpsC,EAAgBhmD,KAAKwjD,YAAY99C,OACjC63C,GAAS,CAIPA,GAAQ,GAAmB,GAAdy0C,GACfhyF,KAAKqyF,kBAEPryF,KAAKotD,2BASPxtD,EAAQ0yF,YAAc,SAASjtC,GAC7B,GAAIktC,GAA2BvyF,KAAKwkD,MACpC,IAAIa,EAAK4U,YAAcj6D,KAAKohD,UAAUtC,WAAWM,iBAAmBp/C,KAAKwyF,kBAAkBntC,KACrE,WAAlBrlD,KAAKyyF,WAAqD,GAA3BzyF,KAAKwjD,YAAY99C,QAAc,CAEhE1F,KAAK0yF,WAAWrtC,EAIhB,KAHA,GAAI9H,GAAQ,EAGJv9C,KAAKwjD,YAAY99C,OAAS1F,KAAKohD,UAAUtC,WAAWC,iBAA6B,GAARxB,GAC/Ev9C,KAAK2yF,uBACLp1C,GAAS,MAKXv9C,MAAK4yF,mBAAmBvtC,GAAK,GAAM,GAGnCrlD,KAAKsmD,uBACLtmD,KAAK6yF,sBACL7yF,KAAKotD,0BACLptD,KAAKutD,cAIHvtD,MAAKwkD,QAAU+tC,GACjBvyF,KAAKkQ,SAQTtQ,EAAQ8rD,sBAAwB,WACW,GAArC1rD,KAAKohD,UAAUtC,WAAW9vC,SAC5BhP,KAAK8yF,eAAe,GAAE,GAAM,IAUhClzF,EAAQwyF,qBAAuB,WAC7BpyF,KAAK8yF,eAAe,IAAG,GAAM,IAS/BlzF,EAAQ+yF,qBAAuB,WAC7B3yF,KAAK8yF,eAAe,GAAE,GAAM,IAgB9BlzF,EAAQkzF,eAAiB,SAASC,EAAcC,EAAU1xD,EAAM2xD,GAC9D,GAAIV,GAA2BvyF,KAAKwkD,OAChC0uC,EAAgBlzF,KAAKwjD,YAAY99C,MAGjC1F,MAAK6jD,cAAgB7jD,KAAKwd,OAA0B,GAAjBu1E,GACrC/yF,KAAKmzF,kBAIHnzF,KAAK6jD,cAAgB7jD,KAAKwd,OAA0B,IAAjBu1E,EAGrC/yF,KAAKozF,cAAc9xD,IAEZthC,KAAK6jD,cAAgB7jD,KAAKwd,OAA0B,GAAjBu1E,KAC7B,GAATzxD,EAGFthC,KAAKqzF,cAAcL,EAAU1xD,GAI7BthC,KAAKszF,uBAGTtzF,KAAKsmD,uBAGDtmD,KAAKwjD,YAAY99C,QAAUwtF,IAAkBlzF,KAAK6jD,cAAgB7jD,KAAKwd,OAA0B,IAAjBu1E,KAClF/yF,KAAKuzF,eAAejyD,GACpBthC,KAAKsmD,yBAIHtmD,KAAK6jD,cAAgB7jD,KAAKwd,OAA0B,IAAjBu1E,KACrC/yF,KAAKwzF,eACLxzF,KAAKsmD,wBAGPtmD,KAAK6jD,cAAgB7jD,KAAKwd,MAG1Bxd,KAAK6yF,sBACL7yF,KAAKutD,eAGDvtD,KAAKwjD,YAAY99C,OAASwtF,IAC5BlzF,KAAK05D,gBAAkB,EAEvB15D,KAAKmyF,2BAGW,GAAdc,GAAsC1sF,SAAf0sF,IAErBjzF,KAAKwkD,QAAU+tC,GACjBvyF,KAAKkQ,QAITlQ,KAAKotD,2BAMPxtD,EAAQ4zF,aAAe,WAErB,GAAIC,GAAkBzzF,KAAK0zF,mBACvBD,GAAkBzzF,KAAKohD,UAAUtC,WAAWI,gBAC9Cl/C,KAAK2zF,sBAAsB,EAAI3zF,KAAKohD,UAAUtC,WAAWI,eAAiBu0C,IAW9E7zF,EAAQ2zF,eAAiB,SAASjyD,GAChCthC,KAAK4zF,cACL5zF,KAAK6zF,mBAAmBvyD,GAAM,IAQhC1hC,EAAQsyF,mBAAqB,SAASe,GACpC,GAAIV,GAA2BvyF,KAAKwkD,OAChC0uC,EAAgBlzF,KAAKwjD,YAAY99C,MAErC1F,MAAKuzF,gBAAe,GAGpBvzF,KAAKsmD,uBACLtmD,KAAK6yF,sBACL7yF,KAAKutD,eAGDvtD,KAAKwjD,YAAY99C,QAAUwtF,IAC7BlzF,KAAK05D,gBAAkB,IAGP,GAAdu5B,GAAsC1sF,SAAf0sF,IAErBjzF,KAAKwkD,QAAU+tC,GACjBvyF,KAAKkQ,SAUXtQ,EAAQ0zF,oBAAsB,WAC5B,IAAK,GAAI5tC,KAAU1lD,MAAK68C,MACtB,GAAI78C,KAAK68C,MAAMh3C,eAAe6/C,GAAS,CACrC,GAAIL,GAAOrlD,KAAK68C,MAAM6I,EACD,IAAjBL,EAAK8X,WACF9X,EAAKxyC,MAAM7S,KAAKwd,MAAQxd,KAAKohD,UAAUtC,WAAWO,oBAAsBr/C,KAAK6f,MAAMC,OAAOC,aAC1FslC,EAAKvyC,OAAO9S,KAAKwd,MAAQxd,KAAKohD,UAAUtC,WAAWO,oBAAsBr/C,KAAK6f,MAAMC,OAAOsF,eAC9FplB,KAAKsyF,YAAYjtC,KAc3BzlD,EAAQyzF,cAAgB,SAASL,EAAU1xD,GACzC,IAAK,GAAI/7B,GAAI,EAAGA,EAAIvF,KAAKwjD,YAAY99C,OAAQH,IAAK,CAChD,GAAI8/C,GAAOrlD,KAAK68C,MAAM78C,KAAKwjD,YAAYj+C,GACvCvF,MAAK4yF,mBAAmBvtC,EAAK2tC,EAAU1xD,GACvCthC,KAAKotD,4BAeTxtD,EAAQgzF,mBAAqB,SAAS9oF,EAAYkpF,EAAW1xD,EAAOwyD,GAElE,GAAIhqF,EAAWmwD,YAAc,IAEvBnwD,EAAWmwD,YAAcj6D,KAAKohD,UAAUtC,WAAWM,kBACrD00C,GAAU,GAEZd,EAAYc,GAAU,EAAOd,EAGzBlpF,EAAWkwD,eAAiBh6D,KAAKwd,OAAkB,GAAT8jB,GAE5C,IAAK,GAAIyyD,KAAmBjqF,GAAWowD,eACrC,GAAIpwD,EAAWowD,eAAer0D,eAAekuF,GAAkB,CAC7D,GAAIC,GAAYlqF,EAAWowD,eAAe65B,EAI7B,IAATzyD,GACE0yD,EAAUt6B,gBAAkB5vD,EAAWswD,gBAAgBtwD,EAAWswD,gBAAgB10D,OAAO,IACtFouF,IACL9zF,KAAKi0F,sBAAsBnqF,EAAWiqF,EAAgBf,EAAU1xD,EAAMwyD,GAIpE9zF,KAAKwyF,kBAAkB1oF,IACzB9J,KAAKi0F,sBAAsBnqF,EAAWiqF,EAAgBf,EAAU1xD,EAAMwyD,KAwBpFl0F,EAAQq0F,sBAAwB,SAASnqF,EAAYiqF,EAAiBf,EAAW1xD,EAAOwyD,GACtF,GAAIE,GAAYlqF,EAAWowD,eAAe65B,EAG1C,IAAIC,EAAUh6B,eAAiBh6D,KAAKwd,OAAkB,GAAT8jB,EAAe,CAE1DthC,KAAKk0F,eAGLl0F,KAAK68C,MAAMk3C,GAAmBC,EAG9Bh0F,KAAKm0F,uBAAuBrqF,EAAWkqF,GAGvCh0F,KAAKo0F,wBAAwBtqF,EAAWkqF,GAGxCh0F,KAAKq0F,eAAevqF,GAGpBA,EAAWiF,QAAQ+tC,MAAQk3C,EAAUjlF,QAAQ+tC,KAC7ChzC,EAAWmwD,aAAe+5B,EAAU/5B,YACpCnwD,EAAWiF,QAAQquC,SAAWn4C,KAAKwG,IAAIzL,KAAKohD,UAAUtC,WAAWS,YAAav/C,KAAKohD,UAAUvE,MAAMO,SAAWp9C,KAAKohD,UAAUtC,WAAWQ,oBAAoBx1C,EAAWmwD,YAAY,IACnLnwD,EAAW2vD,mBAAqB3vD,EAAWokD,aAAaxoD,OAGxDsuF,EAAU3hF,EAAIvI,EAAWuI,EAAIvI,EAAWgwD,iBAAmB,GAAM70D,KAAKE,UACtE6uF,EAAU1hF,EAAIxI,EAAWwI,EAAIxI,EAAWgwD,iBAAmB,GAAM70D,KAAKE,gBAG/D2E,GAAWowD,eAAe65B,EAGjC,IAAIO,IAAgB,CACpB,KAAK,GAAIC,KAAezqF,GAAWowD,eACjC,GAAIpwD,EAAWowD,eAAer0D,eAAe0uF,IACvCzqF,EAAWowD,eAAeq6B,GAAa76B,gBAAkBs6B,EAAUt6B,eAAgB,CACrF46B,GAAgB,CAChB,OAKe,GAAjBA,GACFxqF,EAAWswD,gBAAgBhgB,MAG7Bp6C,KAAKw0F,uBAAuBR,GAI5BA,EAAUt6B,eAAiB,EAG3B5vD,EAAW+xD,iBAGX77D,KAAKwkD,QAAS,EAIC,GAAbwuC,GACFhzF,KAAK4yF,mBAAmBoB,EAAUhB,EAAU1xD,EAAMwyD,IAWtDl0F,EAAQ40F,uBAAyB,SAASnvC,GACxC,IAAK,GAAI9/C,GAAI,EAAGA,EAAI8/C,EAAK6I,aAAaxoD,OAAQH,IAC5C8/C,EAAK6I,aAAa3oD,GAAG4rD,sBAczBvxD,EAAQwzF,cAAgB,SAAS9xD,GAClB,GAATA,EACFthC,KAAKy0F,sBAGLz0F,KAAK00F,wBAUT90F,EAAQ60F,oBAAsB,WAC5B,GAAIt1E,GAAGC,EAAG1Z,EACNivF,EAAY30F,KAAKohD,UAAUtC,WAAWK,qBAAqBn/C,KAAKwd,KAIpE,KAAK,GAAI0uC,KAAUlsD,MAAK09C,MACtB,GAAI19C,KAAK09C,MAAM73C,eAAeqmD,GAAS,CACrC,GAAIO,GAAOzsD,KAAK09C,MAAMwO,EACtB,IAAIO,EAAKC,WACHD,EAAKkG,MAAQlG,EAAKiG,SACpBvzC,EAAMstC,EAAK7iC,GAAGvX,EAAIo6C,EAAK9iC,KAAKtX,EAC5B+M,EAAMqtC,EAAK7iC,GAAGtX,EAAIm6C,EAAK9iC,KAAKrX,EAC5B5M,EAAST,KAAKirB,KAAK/Q,EAAKA,EAAKC,EAAKA,GAGrBu1E,EAATjvF,GAAoB,CAEtB,GAAIoE,GAAa2iD,EAAK9iC,KAClBqqE,EAAYvnC,EAAK7iC,EACjB6iC,GAAK7iC,GAAG7a,QAAQ+tC,KAAO2P,EAAK9iC,KAAK5a,QAAQ+tC,OAC3ChzC,EAAa2iD,EAAK7iC,GAClBoqE,EAAYvnC,EAAK9iC,MAGiB,GAAhCqqE,EAAUv6B,mBACZz5D,KAAK40F,cAAc9qF,EAAWkqF,GAAU,GAEA,GAAjClqF,EAAW2vD,oBAClBz5D,KAAK40F,cAAcZ,EAAUlqF,GAAW,MAetDlK,EAAQ80F,qBAAuB,WAC7B,IAAK,GAAIhvC,KAAU1lD,MAAK68C,MAEtB,GAAI78C,KAAK68C,MAAMh3C,eAAe6/C,GAAS,CACrC,GAAIsuC,GAAYh0F,KAAK68C,MAAM6I,EAG3B,IAAoC,GAAhCsuC,EAAUv6B,oBAA4D,GAAjCu6B,EAAU9lC,aAAaxoD,OAAa,CAC3E,GAAI+mD,GAAOunC,EAAU9lC,aAAa,GAC9BpkD,EAAc2iD,EAAKkG,MAAQqhC,EAAU3zF,GAAML,KAAK68C,MAAM4P,EAAKiG,QAAU1yD,KAAK68C,MAAM4P,EAAKkG,KAGrFqhC,GAAU3zF,IAAMyJ,EAAWzJ,KACzByJ,EAAWiF,QAAQ+tC,KAAOk3C,EAAUjlF,QAAQ+tC,KAC9C98C,KAAK40F,cAAc9qF,EAAWkqF,GAAU,GAGxCh0F,KAAK40F,cAAcZ,EAAUlqF,GAAW,OAgBpDlK,EAAQi1F,4BAA8B,SAASxvC,GAG7C,IAAK,GAFDyvC,GAAoB,GACpBC,EAAwB,KACnBxvF,EAAI,EAAGA,EAAI8/C,EAAK6I,aAAaxoD,OAAQH,IAC5C,GAA6BgB,SAAzB8+C,EAAK6I,aAAa3oD,GAAkB,CACtC,GAAIyvF,GAAY,IACZ3vC,GAAK6I,aAAa3oD,GAAGmtD,QAAUrN,EAAKhlD,GACtC20F,EAAY3vC,EAAK6I,aAAa3oD,GAAGokB,KAE1B07B,EAAK6I,aAAa3oD,GAAGotD,MAAQtN,EAAKhlD,KACzC20F,EAAY3vC,EAAK6I,aAAa3oD,GAAGqkB,IAIlB,MAAborE,GAAqBF,EAAoBE,EAAU56B,gBAAgB10D,SACrEovF,EAAoBE,EAAU56B,gBAAgB10D,OAC9CqvF,EAAwBC,GAKb,MAAbA,GAAkDzuF,SAA7BvG,KAAK68C,MAAMm4C,EAAU30F,KAC5CL,KAAK40F,cAAcI,EAAW3vC,GAAM,IAYxCzlD,EAAQi0F,mBAAqB,SAASvyD,EAAO2zD,GAE3C,IAAK,GAAIvvC,KAAU1lD,MAAK68C,MAElB78C,KAAK68C,MAAMh3C,eAAe6/C,IAC5B1lD,KAAKk1F,oBAAoBl1F,KAAK68C,MAAM6I,GAAQpkB,EAAM2zD,IAcxDr1F,EAAQs1F,oBAAsB,SAASC,EAAS7zD,EAAO2zD,EAAWG,GAKhE,GAJ6B7uF,SAAzB6uF,IACFA,EAAuB,GAGpBD,EAAQ17B,oBAAsBz5D,KAAKqqE,cAA6B,GAAb4qB,GACrDE,EAAQ17B,oBAAsBz5D,KAAKqqE,cAA6B,GAAb4qB,EAAoB,CASxE,IAAK,GAPD91E,GAAGC,EAAG1Z,EACNivF,EAAY30F,KAAKohD,UAAUtC,WAAWK,qBAAqBn/C,KAAKwd,MAChE63E,GAAe,EAGfC,KACAC,EAAuBJ,EAAQjnC,aAAaxoD,OACvC0mB,EAAI,EAAOmpE,EAAJnpE,EAA0BA,IACxCkpE,EAAaptF,KAAKitF,EAAQjnC,aAAa9hC,GAAG/rB,GAK5C,IAAa,GAATihC,EAEF,IADA+zD,GAAe,EACVjpE,EAAI,EAAOmpE,EAAJnpE,EAA0BA,IAAK,CACzC,GAAIqgC,GAAOzsD,KAAK09C,MAAM43C,EAAalpE,GACnC,IAAa7lB,SAATkmD,GACEA,EAAKC,WACHD,EAAKkG,MAAQlG,EAAKiG,SACpBvzC,EAAMstC,EAAK7iC,GAAGvX,EAAIo6C,EAAK9iC,KAAKtX,EAC5B+M,EAAMqtC,EAAK7iC,GAAGtX,EAAIm6C,EAAK9iC,KAAKrX,EAC5B5M,EAAST,KAAKirB,KAAK/Q,EAAKA,EAAKC,EAAKA,GAErBu1E,EAATjvF,GAAoB,CACtB2vF,GAAe,CACf,QASZ,IAAM/zD,GAAS+zD,GAAiB/zD,EAE9B,IAAKlV,EAAI,EAAOmpE,EAAJnpE,EAA0BA,IAGpC,GAFAqgC,EAAOzsD,KAAK09C,MAAM43C,EAAalpE,IAElB7lB,SAATkmD,EAAoB,CACtB,GAAIunC,GAAYh0F,KAAK68C,MAAO4P,EAAKiG,QAAUyiC,EAAQ90F,GAAMosD,EAAKkG,KAAOlG,EAAKiG,OAErEshC,GAAU9lC,aAAaxoD,QAAW1F,KAAKqqE,aAAe+qB,GACtDpB,EAAU3zF,IAAM80F,EAAQ90F,IAC3BL,KAAK40F,cAAcO,EAAQnB,EAAU1yD,MAkBjD1hC,EAAQg1F,cAAgB,SAAS9qF,EAAYkqF,EAAW1yD,GAEtDx3B,EAAWowD,eAAe85B,EAAU3zF,IAAM2zF,CAG1C,KAAK,GAAIzuF,GAAI,EAAGA,EAAIyuF,EAAU9lC,aAAaxoD,OAAQH,IAAK,CACtD,GAAIknD,GAAOunC,EAAU9lC,aAAa3oD,EAC9BknD,GAAKkG,MAAQ7oD,EAAWzJ,IAAMosD,EAAKiG,QAAU5oD,EAAWzJ,GAC1DL,KAAKw1F,qBAAqB1rF,EAAWkqF,EAAUvnC,GAG/CzsD,KAAKy1F,sBAAsB3rF,EAAWkqF,EAAUvnC,GAIpDunC,EAAU9lC,gBAGVluD,KAAK01F,8BAA8B5rF,EAAWkqF,SAIvCh0F,MAAK68C,MAAMm3C,EAAU3zF,GAG5B,IAAIs1F,GAAa7rF,EAAWiF,QAAQ+tC,IACpCk3C,GAAUt6B,eAAiB15D,KAAK05D,eAChC5vD,EAAWiF,QAAQ+tC,MAAQk3C,EAAUjlF,QAAQ+tC,KAC7ChzC,EAAWmwD,aAAe+5B,EAAU/5B,YACpCnwD,EAAWiF,QAAQquC,SAAWn4C,KAAKwG,IAAIzL,KAAKohD,UAAUtC,WAAWS,YAAav/C,KAAKohD,UAAUvE,MAAMO,SAAWp9C,KAAKohD,UAAUtC,WAAWQ,mBAAmBx1C,EAAWmwD,aAGlKnwD,EAAWswD,gBAAgBtwD,EAAWswD,gBAAgB10D,OAAS,IAAM1F,KAAK05D,gBAC5E5vD,EAAWswD,gBAAgBlyD,KAAKlI,KAAK05D,gBAMrC5vD,EAAWkwD,eAFA,GAAT14B,EAE0B,EAGAthC,KAAKwd,MAInC1T,EAAW+xD,iBAGX/xD,EAAWowD,eAAe85B,EAAU3zF,IAAI25D,eAAiBlwD,EAAWkwD,eAGpEg6B,EAAU52B,gBAGVtzD,EAAWuzD,eAAes4B,GAG1B31F,KAAKwkD,QAAS,GAUhB5kD,EAAQizF,oBAAsB,WAC5B,IAAK,GAAIttF,GAAI,EAAGA,EAAIvF,KAAKwjD,YAAY99C,OAAQH,IAAK,CAChD,GAAI8/C,GAAOrlD,KAAK68C,MAAM78C,KAAKwjD,YAAYj+C,GACvC8/C,GAAKoU,mBAAqBpU,EAAK6I,aAAaxoD,MAG5C,IAAIkwF,GAAa,CACjB,IAAIvwC,EAAKoU,mBAAqB,EAC5B,IAAK,GAAIrtC,GAAI,EAAGA,EAAIi5B,EAAKoU,mBAAqB,EAAGrtC,IAG/C,IAAK,GAFDypE,GAAWxwC,EAAK6I,aAAa9hC,GAAGumC,KAChCmjC,EAAazwC,EAAK6I,aAAa9hC,GAAGsmC,OAC7BqjC,EAAI3pE,EAAE,EAAG2pE,EAAI1wC,EAAKoU,mBAAoBs8B,KACxC1wC,EAAK6I,aAAa6nC,GAAGpjC,MAAQkjC,GAAYxwC,EAAK6I,aAAa6nC,GAAGrjC,QAAUojC,GACxEzwC,EAAK6I,aAAa6nC,GAAGrjC,QAAUmjC,GAAYxwC,EAAK6I,aAAa6nC,GAAGpjC,MAAQmjC,KAC3EF,GAAc,EAKtBvwC,GAAKoU,oBAAsBm8B,IAa/Bh2F,EAAQ41F,qBAAuB,SAAS1rF,EAAYkqF,EAAWvnC,GAEvD3iD,EAAWqwD,eAAet0D,eAAemuF,EAAU3zF,MACvDyJ,EAAWqwD,eAAe65B,EAAU3zF,QAGtCyJ,EAAWqwD,eAAe65B,EAAU3zF,IAAI6H,KAAKukD,SAGtCzsD,MAAK09C,MAAM+O,EAAKpsD,GAGvB,KAAK,GAAIkF,GAAI,EAAGA,EAAIuE,EAAWokD,aAAaxoD,OAAQH,IAClD,GAAIuE,EAAWokD,aAAa3oD,GAAGlF,IAAMosD,EAAKpsD,GAAI,CAC5CyJ,EAAWokD,aAAa5lD,OAAO/C,EAAE,EACjC,SAcN3F,EAAQ61F,sBAAwB,SAAS3rF,EAAYkqF,EAAWvnC,GAE1DA,EAAKkG,MAAQlG,EAAKiG,OACpB1yD,KAAKw1F,qBAAqB1rF,EAAYkqF,EAAWvnC,IAG7CA,EAAKkG,MAAQqhC,EAAU3zF,IACzBosD,EAAK0G,aAAajrD,KAAK8rF,EAAU3zF,IACjCosD,EAAK7iC,GAAK9f,EACV2iD,EAAKkG,KAAO7oD,EAAWzJ,KAIvBosD,EAAKyG,eAAehrD,KAAK8rF,EAAU3zF,IACnCosD,EAAK9iC,KAAO7f,EACZ2iD,EAAKiG,OAAS5oD,EAAWzJ,IAG3BL,KAAKg2F,oBAAoBlsF,EAAWkqF,EAAUvnC;EAalD7sD,EAAQ81F,8BAAgC,SAAS5rF,EAAYkqF,GAE3D,IAAK,GAAIzuF,GAAI,EAAGA,EAAIuE,EAAWokD,aAAaxoD,OAAQH,IAAK,CACvD,GAAIknD,GAAO3iD,EAAWokD,aAAa3oD,EAE/BknD,GAAKkG,MAAQlG,EAAKiG,QACpB1yD,KAAKw1F,qBAAqB1rF,EAAYkqF,EAAWvnC,KAcvD7sD,EAAQo2F,oBAAsB,SAASlsF,EAAYkqF,EAAWvnC,GAGtD3iD,EAAW8uD,cAAc/yD,eAAemuF,EAAU3zF,MACtDyJ,EAAW8uD,cAAco7B,EAAU3zF,QAErCyJ,EAAW8uD,cAAco7B,EAAU3zF,IAAI6H,KAAKukD,GAG5C3iD,EAAWokD,aAAahmD,KAAKukD,IAY/B7sD,EAAQw0F,wBAA0B,SAAStqF,EAAYkqF,GACrD,GAAIlqF,EAAW8uD,cAAc/yD,eAAemuF,EAAU3zF,IAAK,CACzD,IAAK,GAAIkF,GAAI,EAAGA,EAAIuE,EAAW8uD,cAAco7B,EAAU3zF,IAAIqF,OAAQH,IAAK,CACtE,GAAIknD,GAAO3iD,EAAW8uD,cAAco7B,EAAU3zF,IAAIkF,EAC9CknD,GAAKyG,eAAezG,EAAKyG,eAAextD,OAAO,IAAMsuF,EAAU3zF,IACjEosD,EAAKyG,eAAe9Y,MACpBqS,EAAKiG,OAASshC,EAAU3zF,GACxBosD,EAAK9iC,KAAOqqE,IAGZvnC,EAAK0G,aAAa/Y,MAClBqS,EAAKkG,KAAOqhC,EAAU3zF,GACtBosD,EAAK7iC,GAAKoqE,GAIZA,EAAU9lC,aAAahmD,KAAKukD,EAG5B,KAAK,GAAIrgC,GAAI,EAAGA,EAAItiB,EAAWokD,aAAaxoD,OAAQ0mB,IAClD,GAAItiB,EAAWokD,aAAa9hC,GAAG/rB,IAAMosD,EAAKpsD,GAAI,CAC5CyJ,EAAWokD,aAAa5lD,OAAO8jB,EAAE,EACjC,cAKCtiB,GAAW8uD,cAAco7B,EAAU3zF,MAa9CT,EAAQy0F,eAAiB,SAASvqF,GAChC,IAAK,GAAIvE,GAAI,EAAGA,EAAIuE,EAAWokD,aAAaxoD,OAAQH,IAAK,CACvD,GAAIknD,GAAO3iD,EAAWokD,aAAa3oD,EAC/BuE,GAAWzJ,IAAMosD,EAAKkG,MAAQ7oD,EAAWzJ,IAAMosD,EAAKiG,QACtD5oD,EAAWokD,aAAa5lD,OAAO/C,EAAE,KAcvC3F,EAAQu0F,uBAAyB,SAASrqF,EAAYkqF,GACpD,IAAK,GAAIzuF,GAAI,EAAGA,EAAIuE,EAAWqwD,eAAe65B,EAAU3zF,IAAIqF,OAAQH,IAAK,CACvE,GAAIknD,GAAO3iD,EAAWqwD,eAAe65B,EAAU3zF,IAAIkF,EAGnDvF,MAAK09C,MAAM+O,EAAKpsD,IAAMosD,EAGtBunC,EAAU9lC,aAAahmD,KAAKukD,GAC5B3iD,EAAWokD,aAAahmD,KAAKukD,SAGxB3iD,GAAWqwD,eAAe65B,EAAU3zF,KAa7CT,EAAQ2tD,aAAe,WACrB,GAAI7H,EAEJ,KAAKA,IAAU1lD,MAAK68C,MAClB,GAAI78C,KAAK68C,MAAMh3C,eAAe6/C,GAAS,CACrC,GAAIL,GAAOrlD,KAAK68C,MAAM6I,EAClBL,GAAK4U,YAAc,IACrB5U,EAAKr8B,MAAQ,IAAI1U,OAAOnQ,OAAOkhD,EAAK4U,aAAa,MAMvD,IAAKvU,IAAU1lD,MAAK68C,MACd78C,KAAK68C,MAAMh3C,eAAe6/C,KAC5BL,EAAOrlD,KAAK68C,MAAM6I,GACM,GAApBL,EAAK4U,cAEL5U,EAAKr8B,MADoBziB,SAAvB8+C,EAAKgV,cACMhV,EAAKgV,cAGLl2D,OAAOkhD,EAAKhlD,OAuBnCT,EAAQuyF,uBAAyB,WAC/B,GAGIzsC,GAHAuwC,EAAW,EACXC,EAAW,IACXC,EAAe,CAInB,KAAKzwC,IAAU1lD,MAAK68C,MACd78C,KAAK68C,MAAMh3C,eAAe6/C,KAC5BywC,EAAen2F,KAAK68C,MAAM6I,GAAQ0U,gBAAgB10D,OACnCywF,EAAXF,IAA0BA,EAAWE,GACrCD,EAAWC,IAAeD,EAAWC,GAI7C,IAAIF,EAAWC,EAAWl2F,KAAKohD,UAAUtC,WAAWgB,uBAAwB,CAC1E,GAAIozC,GAAgBlzF,KAAKwjD,YAAY99C,OACjC0wF,EAAcH,EAAWj2F,KAAKohD,UAAUtC,WAAWgB,sBAEvD,KAAK4F,IAAU1lD,MAAK68C,MACd78C,KAAK68C,MAAMh3C,eAAe6/C,IACxB1lD,KAAK68C,MAAM6I,GAAQ0U,gBAAgB10D,OAAS0wF,GAC9Cp2F,KAAK60F,4BAA4B70F,KAAK68C,MAAM6I,GAIlD1lD,MAAKsmD,uBACLtmD,KAAK6yF,sBAED7yF,KAAKwjD,YAAY99C,QAAUwtF,IAC7BlzF,KAAK05D,gBAAkB,KAe7B95D,EAAQ4yF,kBAAoB,SAASntC,GACnC,MACEpgD,MAAKmmB,IAAIi6B,EAAKhzC,EAAIrS,KAAK4jD,WAAWvxC,IAAMrS,KAAKohD,UAAUtC,WAAWe,kBAAkB7/C,KAAKwd,OAEzFvY,KAAKmmB,IAAIi6B,EAAK/yC,EAAItS,KAAK4jD,WAAWtxC,IAAMtS,KAAKohD,UAAUtC,WAAWe,kBAAkB7/C,KAAKwd,OAU7F5d,EAAQyyF,gBAAkB,WACxB,IAAK,GAAI9sF,GAAI,EAAGA,EAAIvF,KAAKwjD,YAAY99C,OAAQH,IAAK,CAChD,GAAI8/C,GAAOrlD,KAAK68C,MAAM78C,KAAKwjD,YAAYj+C,GACvC,IAAoB,GAAf8/C,EAAKiF,QAAkC,GAAfjF,EAAKkF,OAAkB,CAClD,GAAIt+B,GAAS,EAASjsB,KAAKwjD,YAAY99C,OAAST,KAAKwG,IAAI,IAAI45C,EAAKt2C,QAAQ+tC,MACtEqQ,EAAQ,EAAIloD,KAAKknB,GAAKlnB,KAAKE,QACZ,IAAfkgD,EAAKiF,SAAkBjF,EAAKhzC,EAAI4Z,EAAShnB,KAAK6Z,IAAIquC,IACnC,GAAf9H,EAAKkF,SAAkBlF,EAAK/yC,EAAI2Z,EAAShnB,KAAK0Z,IAAIwuC,IACtDntD,KAAKw0F,uBAAuBnvC,MAYlCzlD,EAAQg0F,YAAc,WAMpB,IAAK,GALDyC,GAAU,EACVC,EAAiB,EACjBC,EAAa,EACbC,EAAa,EAERjxF,EAAI,EAAGA,EAAIvF,KAAKwjD,YAAY99C,OAAQH,IAAK,CAEhD,GAAI8/C,GAAOrlD,KAAK68C,MAAM78C,KAAKwjD,YAAYj+C,GACnC8/C,GAAKoU,mBAAqB+8B,IAC5BA,EAAanxC,EAAKoU,oBAEpB48B,GAAWhxC,EAAKoU,mBAChB68B,GAAkBrxF,KAAKovB,IAAIgxB,EAAKoU,mBAAmB,GACnD88B,GAAc,EAEhBF,GAAoBE,EACpBD,GAAkCC,CAElC,IAAIE,GAAWH,EAAiBrxF,KAAKovB,IAAIgiE,EAAQ,GAE7CK,EAAoBzxF,KAAKirB,KAAKumE,EAElCz2F,MAAKqqE,aAAeplE,KAAKC,MAAMmxF,EAAU,EAAEK,GAGvC12F,KAAKqqE,aAAemsB,IACtBx2F,KAAKqqE,aAAemsB,IAexB52F,EAAQ+zF,sBAAwB,SAASgD,GACvC32F,KAAKqqE,aAAe,CACpB,IAAIusB,GAAe3xF,KAAKC,MAAMlF,KAAKwjD,YAAY99C,OAASixF,EACxD,KAAK,GAAIjxC,KAAU1lD,MAAK68C,MAClB78C,KAAK68C,MAAMh3C,eAAe6/C,IACiB,GAAzC1lD,KAAK68C,MAAM6I,GAAQ+T,oBAA2Bz5D,KAAK68C,MAAM6I,GAAQwI,aAAaxoD,QAAU,GACtFkxF,EAAe,IACjB52F,KAAKk1F,oBAAoBl1F,KAAK68C,MAAM6I,IAAQ,GAAK,EAAK,GACtDkxC,GAAgB,IAa1Bh3F,EAAQ8zF,kBAAoB,WAC1B,GAAImD,GAAS,EACTC,EAAQ,CACZ,KAAK,GAAIpxC,KAAU1lD,MAAK68C,MAClB78C,KAAK68C,MAAMh3C,eAAe6/C,KACiB,GAAzC1lD,KAAK68C,MAAM6I,GAAQ+T,oBAA2Bz5D,KAAK68C,MAAM6I,GAAQwI,aAAaxoD,QAAU,IAC1FmxF,GAAU,GAEZC,GAAS,EAGb,OAAOD,GAAOC,IAMZ,SAASj3F,EAAQD,EAASM,GAE9B,GAAIS,GAAOT,EAAoB,GAC3BqD,EAAOrD,EAAoB,GAgB/BN,GAAQonD,iBAAmB,WACzBhnD,KAAKiuD,QAAgB,OAAEjuD,KAAKyyF,WAAW51C,MAAQ78C,KAAK68C,MACpD78C,KAAKiuD,QAAgB,OAAEjuD,KAAKyyF,WAAW/0C,MAAQ19C,KAAK09C,MACpD19C,KAAKiuD,QAAgB,OAAEjuD,KAAKyyF,WAAWjvC,YAAcxjD,KAAKwjD,aAa5D5jD,EAAQm3F,gBAAkB,SAASC,EAAUC,GACxB1wF,SAAf0wF,GAA0C,UAAdA,EAC9Bj3F,KAAKk3F,sBAAsBF,GAG3Bh3F,KAAKm3F,sBAAsBH,IAY/Bp3F,EAAQs3F,sBAAwB,SAASF,GACvCh3F,KAAKwjD,YAAcxjD,KAAKiuD,QAAgB,OAAE+oC,GAAuB,YACjEh3F,KAAK68C,MAAc78C,KAAKiuD,QAAgB,OAAE+oC,GAAiB,MAC3Dh3F,KAAK09C,MAAc19C,KAAKiuD,QAAgB,OAAE+oC,GAAiB,OAU7Dp3F,EAAQw3F,uBAAyB,WAC/Bp3F,KAAKwjD,YAAcxjD,KAAKiuD,QAAiB,QAAe,YACxDjuD,KAAK68C,MAAc78C,KAAKiuD,QAAiB,QAAS,MAClDjuD,KAAK09C,MAAc19C,KAAKiuD,QAAiB,QAAS,OAWpDruD,EAAQu3F,sBAAwB,SAASH,GACvCh3F,KAAKwjD,YAAcxjD,KAAKiuD,QAAgB,OAAE+oC,GAAuB,YACjEh3F,KAAK68C,MAAc78C,KAAKiuD,QAAgB,OAAE+oC,GAAiB,MAC3Dh3F,KAAK09C,MAAc19C,KAAKiuD,QAAgB,OAAE+oC,GAAiB,OAU7Dp3F,EAAQy3F,kBAAoB,WAC1Br3F,KAAK+2F,gBAAgB/2F,KAAKyyF,YAU5B7yF,EAAQ6yF,QAAU,WAChB,MAAOzyF,MAAKsqE,aAAatqE,KAAKsqE,aAAa5kE,OAAO,IAUpD9F,EAAQ03F,gBAAkB,WACxB,GAAIt3F,KAAKsqE,aAAa5kE,OAAS,EAC7B,MAAO1F,MAAKsqE,aAAatqE,KAAKsqE,aAAa5kE,OAAO,EAGlD,MAAM,IAAIU,WAAU,iEAaxBxG,EAAQ23F,iBAAmB,SAASC,GAClCx3F,KAAKsqE,aAAapiE,KAAKsvF,IAUzB53F,EAAQ63F,kBAAoB,WAC1Bz3F,KAAKsqE,aAAalwB,OAWpBx6C,EAAQ83F,iBAAmB,SAASF,GAElCx3F,KAAKiuD,QAAgB,OAAEupC,IAAU36C,SACAa,SACA8F,eACAwW,eAAkBh6D,KAAKwd,MACvB+sD,YAAehkE,QAGhDvG,KAAKiuD,QAAgB,OAAEupC,GAAoB,YAAI,GAAIj0F,IAC9ClD,GAAGm3F,EACF3sF,OACEiB,WAAY,UACZC,OAAQ,iBAEJ/L,KAAKohD,WACjBphD,KAAKiuD,QAAgB,OAAEupC,GAAoB,YAAEv9B,YAAc,GAW7Dr6D,EAAQ+3F,oBAAsB,SAASX,SAC9Bh3F,MAAKiuD,QAAgB,OAAE+oC,IAWhCp3F,EAAQg4F,oBAAsB,SAASZ,SAC9Bh3F,MAAKiuD,QAAgB,OAAE+oC,IAWhCp3F,EAAQi4F,cAAgB,SAASb,GAE/Bh3F,KAAKiuD,QAAgB,OAAE+oC,GAAYh3F,KAAKiuD,QAAgB,OAAE+oC,GAG1Dh3F,KAAK23F,oBAAoBX,IAW3Bp3F,EAAQk4F,gBAAkB,SAASd,GAEjCh3F,KAAKiuD,QAAgB,OAAE+oC,GAAYh3F,KAAKiuD,QAAgB,OAAE+oC,GAG1Dh3F,KAAK43F,oBAAoBZ,IAa3Bp3F,EAAQm4F,qBAAuB,SAASf,GAEtC,IAAK,GAAItxC,KAAU1lD,MAAK68C,MAClB78C,KAAK68C,MAAMh3C,eAAe6/C,KAC5B1lD,KAAKiuD,QAAgB,OAAE+oC,GAAiB,MAAEtxC,GAAU1lD,KAAK68C,MAAM6I,GAKnE,KAAK,GAAIwG,KAAUlsD,MAAK09C,MAClB19C,KAAK09C,MAAM73C,eAAeqmD,KAC5BlsD,KAAKiuD,QAAgB,OAAE+oC,GAAiB,MAAE9qC,GAAUlsD,KAAK09C,MAAMwO,GAKnE,KAAK,GAAI3mD,GAAI,EAAGA,EAAIvF,KAAKwjD,YAAY99C,OAAQH,IAC3CvF,KAAKiuD,QAAgB,OAAE+oC,GAAuB,YAAE9uF,KAAKlI,KAAKwjD,YAAYj+C,KAW1E3F,EAAQo4F,6BAA+B,WACrCh4F,KAAK8xF,aAAa,GAAE,IAUtBlyF,EAAQ8yF,WAAa,SAASrtC,GAE5B,GAAI4yC,GAASj4F,KAAKyyF,gBAWXzyF,MAAK68C,MAAMwI,EAAKhlD,GAEvB,IAAI63F,GAAmBv3F,EAAKoE,YAG5B/E,MAAK63F,cAAcI,GAGnBj4F,KAAK03F,iBAAiBQ,GAGtBl4F,KAAKu3F,iBAAiBW,GAGtBl4F,KAAK+2F,gBAAgB/2F,KAAKyyF,WAG1BzyF,KAAK68C,MAAMwI,EAAKhlD,IAAMglD,GAUxBzlD,EAAQuzF,gBAAkB,WAExB,GAAI8E,GAASj4F,KAAKyyF,SAGlB,IAAc,WAAVwF,IAC8B,GAA3Bj4F,KAAKwjD,YAAY99C,QACpB1F,KAAKiuD,QAAgB,OAAEgqC,GAAqB,YAAEplF,MAAM7S,KAAKwd,MAAQxd,KAAKohD,UAAUtC,WAAWO,oBAAsBr/C,KAAK6f,MAAMC,OAAOC,aACnI/f,KAAKiuD,QAAgB,OAAEgqC,GAAqB,YAAEnlF,OAAO9S,KAAKwd,MAAQxd,KAAKohD,UAAUtC,WAAWO,oBAAsBr/C,KAAK6f,MAAMC,OAAOsF,cAAe,CACnJ,GAAI+yE,GAAiBn4F,KAAKs3F,iBAG1Bt3F,MAAKg4F,+BAILh4F,KAAK+3F,qBAAqBI,GAI1Bn4F,KAAK23F,oBAAoBM,GAGzBj4F,KAAK83F,gBAAgBK,GAGrBn4F,KAAK+2F,gBAAgBoB,GAGrBn4F,KAAKy3F,oBAGLz3F,KAAKsmD,uBAGLtmD,KAAKotD,4BAeXxtD,EAAQowD,sBAAwB,SAASooC,EAAYC,GACnD,GAAIC,KACJ,IAAiB/xF,SAAb8xF,EACF,IAAK,GAAIJ,KAAUj4F,MAAKiuD,QAAgB,OAClCjuD,KAAKiuD,QAAgB,OAAEpoD,eAAeoyF,KAExCj4F,KAAKk3F,sBAAsBe,GAC3BK,EAAapwF,KAAMlI,KAAKo4F,WAK5B,KAAK,GAAIH,KAAUj4F,MAAKiuD,QAAgB,OACtC,GAAIjuD,KAAKiuD,QAAgB,OAAEpoD,eAAeoyF,GAAS,CAEjDj4F,KAAKk3F,sBAAsBe,EAC3B,IAAIz+E,GAAOxT,MAAMyN,UAAUnL,OAAO/H,KAAKkF,UAAW,EAEhD6yF,GAAapwF,KADXsR,EAAK9T,OAAS,EACG1F,KAAKo4F,GAAa5+E,EAAK,GAAGA,EAAK,IAG/BxZ,KAAKo4F,GAAaC,IAO7C,MADAr4F,MAAKq3F,oBACEiB,GAaT14F,EAAQswD,mBAAqB,SAASkoC,EAAYC,GAChD,GAAIC,IAAe,CACnB,IAAiB/xF,SAAb8xF,EACFr4F,KAAKo3F,yBACLkB,EAAet4F,KAAKo4F,SAEjB,CACHp4F,KAAKo3F,wBACL,IAAI59E,GAAOxT,MAAMyN,UAAUnL,OAAO/H,KAAKkF,UAAW,EAEhD6yF,GADE9+E,EAAK9T,OAAS,EACD1F,KAAKo4F,GAAa5+E,EAAK,GAAGA,EAAK,IAG/BxZ,KAAKo4F,GAAaC,GAKrC,MADAr4F,MAAKq3F,oBACEiB,GAaT14F,EAAQ24F,sBAAwB,SAASH,EAAYC,GACnD,GAAiB9xF,SAAb8xF,EACF,IAAK,GAAIJ,KAAUj4F,MAAKiuD,QAAgB,OAClCjuD,KAAKiuD,QAAgB,OAAEpoD,eAAeoyF,KAExCj4F,KAAKm3F,sBAAsBc,GAC3Bj4F,KAAKo4F,UAKT,KAAK,GAAIH,KAAUj4F,MAAKiuD,QAAgB,OACtC,GAAIjuD,KAAKiuD,QAAgB,OAAEpoD,eAAeoyF,GAAS,CAEjDj4F,KAAKm3F,sBAAsBc,EAC3B,IAAIz+E,GAAOxT,MAAMyN,UAAUnL,OAAO/H,KAAKkF,UAAW,EAC9C+T,GAAK9T,OAAS,EAChB1F,KAAKo4F,GAAa5+E,EAAK,GAAGA,EAAK,IAG/BxZ,KAAKo4F,GAAaC,GAK1Br4F,KAAKq3F,qBAaPz3F,EAAQ2uD,gBAAkB,SAAS6pC,EAAYC,GAC7C,GAAI7+E,GAAOxT,MAAMyN,UAAUnL,OAAO/H,KAAKkF,UAAW,EACjCc,UAAb8xF,GACFr4F,KAAKgwD,sBAAsBooC,GAC3Bp4F,KAAKu4F,sBAAsBH,IAGvB5+E,EAAK9T,OAAS,GAChB1F,KAAKgwD,sBAAsBooC,EAAY5+E,EAAK,GAAGA,EAAK,IACpDxZ,KAAKu4F,sBAAsBH,EAAY5+E,EAAK,GAAGA,EAAK,MAGpDxZ,KAAKgwD,sBAAsBooC,EAAYC,GACvCr4F,KAAKu4F,sBAAsBH,EAAYC,KAY7Cz4F,EAAQ2mD,oBAAsB,WAC5B,GAAI0xC,GAASj4F,KAAKyyF,SAClBzyF,MAAKiuD,QAAgB,OAAEgqC,GAAqB,eAC5Cj4F,KAAKwjD,YAAcxjD,KAAKiuD,QAAgB,OAAEgqC,GAAqB,aAWjEr4F,EAAQ44F,iBAAmB,SAASlxE,EAAI2vE,GACtC,GAAsD5xC,GAAlDC,EAAO,IAAKC,EAAO,KAAMC,EAAO,IAAKC,EAAO,IAChD,KAAK,GAAIwyC,KAAUj4F,MAAKiuD,QAAQgpC,GAC9B,GAAIj3F,KAAKiuD,QAAQgpC,GAAYpxF,eAAeoyF,IACc1xF,SAApDvG,KAAKiuD,QAAQgpC,GAAYgB,GAAqB,YAAiB,CAEjEj4F,KAAK+2F,gBAAgBkB,EAAOhB,GAE5B3xC,EAAO,IAAKC,EAAO,KAAMC,EAAO,IAAKC,EAAO,IAC5C,KAAK,GAAIC,KAAU1lD,MAAK68C,MAClB78C,KAAK68C,MAAMh3C,eAAe6/C,KAC5BL,EAAOrlD,KAAK68C,MAAM6I,GAClBL,EAAK0P,OAAOztC,GACRk+B,EAAOH,EAAKhzC,EAAI,GAAMgzC,EAAKxyC,QAAQ2yC,EAAOH,EAAKhzC,EAAI,GAAMgzC,EAAKxyC,OAC9D4yC,EAAOJ,EAAKhzC,EAAI,GAAMgzC,EAAKxyC,QAAQ4yC,EAAOJ,EAAKhzC,EAAI,GAAMgzC,EAAKxyC,OAC9DyyC,EAAOD,EAAK/yC,EAAI,GAAM+yC,EAAKvyC,SAASwyC,EAAOD,EAAK/yC,EAAI,GAAM+yC,EAAKvyC,QAC/DyyC,EAAOF,EAAK/yC,EAAI,GAAM+yC,EAAKvyC,SAASyyC,EAAOF,EAAK/yC,EAAI,GAAM+yC,EAAKvyC,QAGvEuyC,GAAOrlD,KAAKiuD,QAAQgpC,GAAYgB,GAAqB,YACrD5yC,EAAKhzC,EAAI,IAAOozC,EAAOD,GACvBH,EAAK/yC,EAAI,IAAOizC,EAAOD,GACvBD,EAAKxyC,MAAQ,GAAKwyC,EAAKhzC,EAAImzC,GAC3BH,EAAKvyC,OAAS,GAAKuyC,EAAK/yC,EAAIgzC,GAC5BD,EAAKt2C,QAAQkd,OAAShnB,KAAKirB,KAAKjrB,KAAKovB,IAAI,GAAIgxB,EAAKxyC,MAAM,GAAK5N,KAAKovB,IAAI,GAAIgxB,EAAKvyC,OAAO,IACtFuyC,EAAK7hB,SAASxjC,KAAKwd,OACnB6nC,EAAKyV,YAAYxzC,KAMzB1nB,EAAQ64F,oBAAsB,SAASnxE,GACrCtnB,KAAKw4F,iBAAiBlxE,EAAI,UAC1BtnB,KAAKw4F,iBAAiBlxE,EAAI,UAC1BtnB,KAAKq3F,sBAMH,SAASx3F,EAAQD,EAASM,GAE9B,GAAIqD,GAAOrD,EAAoB,GAS/BN,GAAQ84F,yBAA2B,SAAS10F,EAAQ20F,GAClD,GAAI97C,GAAQ78C,KAAK68C,KACjB,KAAK,GAAI6I,KAAU7I,GACbA,EAAMh3C,eAAe6/C,IACnB7I,EAAM6I,GAAQ8G,kBAAkBxoD,IAClC20F,EAAiBzwF,KAAKw9C,IAY9B9lD,EAAQg5F,4BAA8B,SAAU50F,GAC9C,GAAI20F,KAEJ,OADA34F,MAAKgwD,sBAAsB,2BAA2BhsD,EAAO20F,GACtDA,GAWT/4F,EAAQi5F,yBAA2B,SAASr4D,GAC1C,GAAInuB,GAAIrS,KAAK0qD,qBAAqBlqB,EAAQnuB,GACtCC,EAAItS,KAAK4qD,qBAAqBpqB,EAAQluB,EAE1C,QACE9K,KAAQ6K,EACRzK,IAAQ0K,EACRsV,MAAQvV,EACRwR,OAAQvR,IAYZ1S,EAAQmqD,WAAa,SAAUvpB,GAE7B,GAAIs4D,GAAiB94F,KAAK64F,yBAAyBr4D,GAC/Cm4D,EAAmB34F,KAAK44F,4BAA4BE,EAIxD,OAAIH,GAAiBjzF,OAAS,EACpB1F,KAAK68C,MAAM87C,EAAiBA,EAAiBjzF,OAAS,IAGvD,MAWX9F,EAAQm5F,yBAA2B,SAAU/0F,EAAQg1F,GACnD,GAAIt7C,GAAQ19C,KAAK09C,KACjB,KAAK,GAAIwO,KAAUxO,GACbA,EAAM73C,eAAeqmD,IACnBxO,EAAMwO,GAAQM,kBAAkBxoD,IAClCg1F,EAAiB9wF,KAAKgkD,IAa9BtsD,EAAQq5F,4BAA8B,SAAUj1F,GAC9C,GAAIg1F,KAEJ,OADAh5F,MAAKgwD,sBAAsB,2BAA2BhsD,EAAOg1F,GACtDA,GAWTp5F,EAAQusD,WAAa,SAAS3rB,GAC5B,GAAIs4D,GAAiB94F,KAAK64F,yBAAyBr4D,GAC/Cw4D,EAAmBh5F,KAAKi5F,4BAA4BH,EAExD,OAAIE,GAAiBtzF,OAAS,EACrB1F,KAAK09C,MAAMs7C,EAAiBA,EAAiBtzF,OAAS,IAGtD,MAWX9F,EAAQs5F,gBAAkB,SAAS51E,GAC7BA,YAAe/f,GACjBvD,KAAKqqD,aAAaxN,MAAMv5B,EAAIjjB,IAAMijB,EAGlCtjB,KAAKqqD,aAAa3M,MAAMp6B,EAAIjjB,IAAMijB,GAUtC1jB,EAAQu5F,YAAc,SAAS71E,GACzBA,YAAe/f,GACjBvD,KAAKshD,SAASzE,MAAMv5B,EAAIjjB,IAAMijB,EAG9BtjB,KAAKshD,SAAS5D,MAAMp6B,EAAIjjB,IAAMijB,GAWlC1jB,EAAQw5F,qBAAuB,SAAS91E,GAClCA,YAAe/f,SACVvD,MAAKqqD,aAAaxN,MAAMv5B,EAAIjjB,UAG5BL,MAAKqqD,aAAa3M,MAAMp6B,EAAIjjB,KAUvCT,EAAQs0F,aAAe,SAASmF,GACT9yF,SAAjB8yF,IACFA,GAAe,EAEjB,KAAI,GAAI3zC,KAAU1lD,MAAKqqD,aAAaxN,MAC/B78C,KAAKqqD,aAAaxN,MAAMh3C,eAAe6/C,IACxC1lD,KAAKqqD,aAAaxN,MAAM6I,GAAQxU,UAGpC,KAAI,GAAIgb,KAAUlsD,MAAKqqD,aAAa3M,MAC/B19C,KAAKqqD,aAAa3M,MAAM73C,eAAeqmD,IACxClsD,KAAKqqD,aAAa3M,MAAMwO,GAAQhb,UAIpClxC,MAAKqqD,cAAgBxN,SAASa,UAEV,GAAhB27C,GACFr5F,KAAKouB,KAAK,SAAUpuB,KAAKm3B,iBAU7Bv3B,EAAQ05F,kBAAoB,SAASD,GACd9yF,SAAjB8yF,IACFA,GAAe,EAGjB,KAAK,GAAI3zC,KAAU1lD,MAAKqqD,aAAaxN,MAC/B78C,KAAKqqD,aAAaxN,MAAMh3C,eAAe6/C,IACrC1lD,KAAKqqD,aAAaxN,MAAM6I,GAAQuU,YAAc,IAChDj6D,KAAKqqD,aAAaxN,MAAM6I,GAAQxU,WAChClxC,KAAKo5F,qBAAqBp5F,KAAKqqD,aAAaxN,MAAM6I,IAKpC,IAAhB2zC,GACFr5F,KAAKouB,KAAK,SAAUpuB,KAAKm3B,iBAW7Bv3B,EAAQ25F,sBAAwB,WAC9B,GAAIhiF,GAAQ,CACZ,KAAK,GAAImuC,KAAU1lD,MAAKqqD,aAAaxN,MAC/B78C,KAAKqqD,aAAaxN,MAAMh3C,eAAe6/C,KACzCnuC,GAAS,EAGb,OAAOA,IAST3X,EAAQ45F,iBAAmB,WACzB,IAAK,GAAI9zC,KAAU1lD,MAAKqqD,aAAaxN,MACnC,GAAI78C,KAAKqqD,aAAaxN,MAAMh3C,eAAe6/C,GACzC,MAAO1lD,MAAKqqD,aAAaxN,MAAM6I,EAGnC,OAAO,OAST9lD,EAAQ65F,iBAAmB,WACzB,IAAK,GAAIvtC,KAAUlsD,MAAKqqD,aAAa3M,MACnC,GAAI19C,KAAKqqD,aAAa3M,MAAM73C,eAAeqmD,GACzC,MAAOlsD,MAAKqqD,aAAa3M,MAAMwO,EAGnC,OAAO,OAUTtsD,EAAQ85F,sBAAwB,WAC9B,GAAIniF,GAAQ,CACZ,KAAK,GAAI20C,KAAUlsD,MAAKqqD,aAAa3M,MAC/B19C,KAAKqqD,aAAa3M,MAAM73C,eAAeqmD,KACzC30C,GAAS,EAGb,OAAOA,IAUT3X,EAAQ+5F,wBAA0B,WAChC,GAAIpiF,GAAQ,CACZ,KAAI,GAAImuC,KAAU1lD,MAAKqqD,aAAaxN,MAC/B78C,KAAKqqD,aAAaxN,MAAMh3C,eAAe6/C,KACxCnuC,GAAS,EAGb,KAAI,GAAI20C,KAAUlsD,MAAKqqD,aAAa3M,MAC/B19C,KAAKqqD,aAAa3M,MAAM73C,eAAeqmD,KACxC30C,GAAS,EAGb,OAAOA,IAST3X,EAAQg6F,kBAAoB,WAC1B,IAAI,GAAIl0C,KAAU1lD,MAAKqqD,aAAaxN,MAClC,GAAG78C,KAAKqqD,aAAaxN,MAAMh3C,eAAe6/C,GACxC,OAAO,CAGX,KAAI,GAAIwG,KAAUlsD,MAAKqqD,aAAa3M,MAClC,GAAG19C,KAAKqqD,aAAa3M,MAAM73C,eAAeqmD,GACxC,OAAO,CAGX,QAAO,GAUTtsD,EAAQi6F,oBAAsB,WAC5B,IAAI,GAAIn0C,KAAU1lD,MAAKqqD,aAAaxN,MAClC,GAAG78C,KAAKqqD,aAAaxN,MAAMh3C,eAAe6/C,IACpC1lD,KAAKqqD,aAAaxN,MAAM6I,GAAQuU,YAAc,EAChD,OAAO,CAIb,QAAO,GASTr6D,EAAQk6F,sBAAwB,SAASz0C,GACvC,IAAK,GAAI9/C,GAAI,EAAGA,EAAI8/C,EAAK6I,aAAaxoD,OAAQH,IAAK,CACjD,GAAIknD,GAAOpH,EAAK6I,aAAa3oD,EAC7BknD,GAAKtb,SACLnxC,KAAKk5F,gBAAgBzsC,KAUzB7sD,EAAQm6F,qBAAuB,SAAS10C,GACtC,IAAK,GAAI9/C,GAAI,EAAGA,EAAI8/C,EAAK6I,aAAaxoD,OAAQH,IAAK,CACjD,GAAIknD,GAAOpH,EAAK6I,aAAa3oD,EAC7BknD,GAAKxgD,OAAQ,EACbjM,KAAKm5F,YAAY1sC,KAWrB7sD,EAAQo6F,wBAA0B,SAAS30C,GACzC,IAAK,GAAI9/C,GAAI,EAAGA,EAAI8/C,EAAK6I,aAAaxoD,OAAQH,IAAK,CACjD,GAAIknD,GAAOpH,EAAK6I,aAAa3oD,EAC7BknD,GAAKvb,WACLlxC,KAAKo5F,qBAAqB3sC,KAgB9B7sD,EAAQsqD,cAAgB,SAASlmD,EAAQi2F,EAAQZ,EAAca,EAAgBC,GACxD5zF,SAAjB8yF,IACFA,GAAe,GAEM9yF,SAAnB2zF,IACFA,GAAiB,GAGa,GAA5Bl6F,KAAK45F,qBAA0C,GAAVK,GAAgD,GAA7Bj6F,KAAKyqE,sBAC/DzqE,KAAKk0F,cAAa,GAIG,GAAnBlwF,EAAOkvC,UAAmD,GAA7BlzC,KAAKohD,UAAUlS,aAAsBirD,EAQ1C,GAAnBn2F,EAAOkvC,UACdlzC,KAAKk5F,gBAAgBl1F,GACrBq1F,GAAe,IAGfr1F,EAAOktC,WACPlxC,KAAKo5F,qBAAqBp1F,KAb1BA,EAAOmtC,SACPnxC,KAAKk5F,gBAAgBl1F,GACjBA,YAAkBT,IAA6C,GAArCvD,KAAKwqE,8BAA2D,GAAlB0vB,GAC1El6F,KAAK85F,sBAAsB91F,IAaX,GAAhBq1F,GACFr5F,KAAKouB,KAAK,SAAUpuB,KAAKm3B,iBAY7Bv3B,EAAQysD,YAAc,SAASroD,GACT,GAAhBA,EAAOiI,QACTjI,EAAOiI,OAAQ,EACfjM,KAAKouB,KAAK,YAAYi3B,KAAKrhD,EAAO3D,OAWtCT,EAAQwsD,aAAe,SAASpoD,GACV,GAAhBA,EAAOiI,QACTjI,EAAOiI,OAAQ,EACfjM,KAAKm5F,YAAYn1F,GACbA,YAAkBT,IACpBvD,KAAKouB,KAAK,aAAai3B,KAAKrhD,EAAO3D,MAGnC2D,YAAkBT,IACpBvD,KAAK+5F,qBAAqB/1F,IAa9BpE,EAAQiqD,aAAe,aAUvBjqD,EAAQmrD,WAAa,SAASvqB,GAC5B,GAAI6kB,GAAOrlD,KAAK+pD,WAAWvpB,EAC3B,IAAY,MAAR6kB,EACFrlD,KAAKkqD,cAAc7E,GAAM,OAEtB,CACH,GAAIoH,GAAOzsD,KAAKmsD,WAAW3rB,EACf,OAARisB,EACFzsD,KAAKkqD,cAAcuC,GAAM,GAGzBzsD,KAAKk0F,eAGT,GAAIxmC,GAAa1tD,KAAKm3B,cACtBu2B,GAAoB,SAClB0sC,KAAM/nF,EAAGmuB,EAAQnuB,EAAGC,EAAGkuB,EAAQluB,GAC/BwN,QAASzN,EAAGrS,KAAK0qD,qBAAqBlqB,EAAQnuB,GAAIC,EAAGtS,KAAK4qD,qBAAqBpqB,EAAQluB,KAEzFtS,KAAKouB,KAAK,QAASs/B,GACnB1tD,KAAKuiD,WAUP3iD,EAAQorD,iBAAmB,SAASxqB,GAClC,GAAI6kB,GAAOrlD,KAAK+pD,WAAWvpB,EACf,OAAR6kB,GAAyB9+C,SAAT8+C,IAElBrlD,KAAK4jD,YAAevxC,EAAMrS,KAAK0qD,qBAAqBlqB,EAAQnuB,GACxCC,EAAMtS,KAAK4qD,qBAAqBpqB,EAAQluB,IAC5DtS,KAAKsyF,YAAYjtC,GAEnB,IAAIqI,GAAa1tD,KAAKm3B,cACtBu2B,GAAoB,SAClB0sC,KAAM/nF,EAAGmuB,EAAQnuB,EAAGC,EAAGkuB,EAAQluB,GAC/BwN,QAASzN,EAAGrS,KAAK0qD,qBAAqBlqB,EAAQnuB,GAAIC,EAAGtS,KAAK4qD,qBAAqBpqB,EAAQluB,KAEzFtS,KAAKouB,KAAK,cAAes/B,IAU3B9tD,EAAQqrD,cAAgB,SAASzqB,GAC/B,GAAI6kB,GAAOrlD,KAAK+pD,WAAWvpB,EAC3B,IAAY,MAAR6kB,EACFrlD,KAAKkqD,cAAc7E,GAAK,OAErB,CACH,GAAIoH,GAAOzsD,KAAKmsD,WAAW3rB,EACf,OAARisB,GACFzsD,KAAKkqD,cAAcuC,GAAK,GAG5BzsD,KAAKuiD,WAUP3iD,EAAQsrD,iBAAmB,SAAS1qB,GAClCxgC,KAAKq6F,6BAA6B75D,GAClCxgC,KAAKs6F,2BAA2B95D,IAGlC5gC,EAAQy6F,6BAA+B,aACvCz6F,EAAQ06F,2BAA6B,aAOrC16F,EAAQu3B,aAAe,WACrB,GAAIgzB,GAAUnqD,KAAKu6F,mBACfC,EAAUx6F,KAAKy6F,kBACnB,QAAQ59C,MAAMsN,EAASzM,MAAM88C,IAS/B56F,EAAQ26F,iBAAmB,WACzB,GAAIG,KACJ,IAAiC,GAA7B16F,KAAKohD,UAAUlS,WACjB,IAAK,GAAIwW,KAAU1lD,MAAKqqD,aAAaxN,MAC/B78C,KAAKqqD,aAAaxN,MAAMh3C,eAAe6/C,IACzCg1C,EAAQxyF,KAAKw9C,EAInB,OAAOg1C,IAST96F,EAAQ66F,iBAAmB,WACzB,GAAIC,KACJ,IAAiC,GAA7B16F,KAAKohD,UAAUlS,WACjB,IAAK,GAAIgd,KAAUlsD,MAAKqqD,aAAa3M,MAC/B19C,KAAKqqD,aAAa3M,MAAM73C,eAAeqmD,IACzCwuC,EAAQxyF,KAAKgkD,EAInB,OAAOwuC,IAST96F,EAAQq3B,aAAe,WACrBgC,QAAQ/E,IAAI,gEAUdt0B,EAAQ+6F,YAAc,SAASvqD,EAAW8pD,GACxC,GAAI30F,GAAGg8B,EAAMlhC,CAEb,KAAK+vC,GAAkC7pC,QAApB6pC,EAAU1qC,OAC3B,KAAM,qCAKR,KAFA1F,KAAKk0F,cAAa,GAEb3uF,EAAI,EAAGg8B,EAAO6O,EAAU1qC,OAAY67B,EAAJh8B,EAAUA,IAAK,CAClDlF,EAAK+vC,EAAU7qC,EAEf,IAAI8/C,GAAOrlD,KAAK68C,MAAMx8C,EACtB,KAAKglD,EACH,KAAM,IAAIu1C,YAAW,iBAAmBv6F,EAAK,cAE/CL,MAAKkqD,cAAc7E,GAAK,GAAK,EAAK60C,GAAe,GAEnDl6F,KAAKgiB,UASPpiB,EAAQi7F,YAAc,SAASzqD,GAC7B,GAAI7qC,GAAGg8B,EAAMlhC,CAEb,KAAK+vC,GAAkC7pC,QAApB6pC,EAAU1qC,OAC3B,KAAM,qCAKR,KAFA1F,KAAKk0F,cAAa,GAEb3uF,EAAI,EAAGg8B,EAAO6O,EAAU1qC,OAAY67B,EAAJh8B,EAAUA,IAAK,CAClDlF,EAAK+vC,EAAU7qC,EAEf,IAAIknD,GAAOzsD,KAAK09C,MAAMr9C,EACtB,KAAKosD,EACH,KAAM,IAAImuC,YAAW,iBAAmBv6F,EAAK,cAE/CL,MAAKkqD,cAAcuC,GAAK,GAAK,GAAK,GAAM,GAE1CzsD,KAAKgiB,UAOPpiB,EAAQstD,iBAAmB,WACzB,IAAI,GAAIxH,KAAU1lD,MAAKqqD,aAAaxN,MAC/B78C,KAAKqqD,aAAaxN,MAAMh3C,eAAe6/C,KACnC1lD,KAAK68C,MAAMh3C,eAAe6/C,UACtB1lD,MAAKqqD,aAAaxN,MAAM6I,GAIrC,KAAI,GAAIwG,KAAUlsD,MAAKqqD,aAAa3M,MAC/B19C,KAAKqqD,aAAa3M,MAAM73C,eAAeqmD,KACnClsD,KAAK09C,MAAM73C,eAAeqmD,UACtBlsD,MAAKqqD,aAAa3M,MAAMwO,MASnC,SAASrsD,EAAQD,EAASM,GAE9B,GAAIS,GAAOT,EAAoB,GAC3BqD,EAAOrD,EAAoB,IAC3BkD,EAAOlD,EAAoB,GAO/BN,GAAQk7F,qBAAuB,WAC7B,KAAO96F,KAAK0qE,gBAAgBzmD,iBAC1BjkB,KAAK0qE,gBAAgBj5D,YAAYzR,KAAK0qE,gBAAgBxmD,WAExDlkB,MAAK+6F,mBAEL/6F,KAAKq6F,6BAA+B,mBAC7Br6F,MAAKiuD,QAAiB,QAAS,MAAc,iBAC7CjuD,MAAKiuD,QAAiB,QAAS,MAAiB,cACvDjuD,KAAKuhD,oBAAqB,GAU5B3hD,EAAQo7F,4BAA8B,WACpC,IAAK,GAAIC,KAAgBj7F,MAAKkjD,gBACxBljD,KAAKkjD,gBAAgBr9C,eAAeo1F,KACtCj7F,KAAKi7F,GAAgBj7F,KAAKkjD,gBAAgB+3C,KAUhDr7F,EAAQs7F,gBAAkB,WACxBl7F,KAAKunD,UAAYvnD,KAAKunD,QACtB,IAAI4zC,GAAUn7F,KAAK0qE,gBACfE,EAAW5qE,KAAK4qE,SAChBD,EAAc3qE,KAAK2qE,WACF,IAAjB3qE,KAAKunD,UACP4zC,EAAQ3tF,MAAMo6B,QAAQ,QACtBgjC,EAASp9D,MAAMo6B,QAAQ,QACvB+iC,EAAYn9D,MAAMo6B,QAAQ,OAC1BgjC,EAASr4C,QAAUvyB,KAAKk7F,gBAAgB7lE,KAAKr1B,QAG7Cm7F,EAAQ3tF,MAAMo6B,QAAQ,OACtBgjC,EAASp9D,MAAMo6B,QAAQ,OACvB+iC,EAAYn9D,MAAMo6B,QAAQ,QAC1BgjC,EAASr4C,QAAU,MAErBvyB,KAAKwpD,yBAQP5pD,EAAQ4pD,sBAAwB,WAE1BxpD,KAAKo7F,eACPp7F,KAAKgU,IAAI,SAAUhU,KAAKo7F,cAG1B,IAAIv2D,GAAS7kC,KAAKohD,UAAUxc,QAAQ5kC,KAAKohD,UAAUvc,OAqBnD,IAnB6Bt+B,SAAzBvG,KAAKq7F,kBACPr7F,KAAKq7F,gBAAgBzjC,uBACrB53D,KAAKq7F,gBAAkB90F,OACvBvG,KAAKs7F,oBAAsB,KAC3Bt7F,KAAKuhD,oBAAqB,EAC1BvhD,KAAKuiD,WAIPviD,KAAKg7F,8BAGLh7F,KAAKijD,kBAAmB,EAGxBjjD,KAAKwqE,8BAA+B,EACpCxqE,KAAKyqE,sBAAuB,EAC5BzqE,KAAK+6F,mBAEgB,GAAjB/6F,KAAKunD,SAAkB,CACzB,KAAOvnD,KAAK0qE,gBAAgBzmD,iBAC1BjkB,KAAK0qE,gBAAgBj5D,YAAYzR,KAAK0qE,gBAAgBxmD,WAGxDlkB,MAAK+6F,gBAA6B,YAAIlpF,SAASM,cAAc,QAC7DnS,KAAK+6F,gBAA6B,YAAEhzF,UAAY,6BAChD/H,KAAK+6F,gBAAkC,iBAAIlpF,SAASM,cAAc,QAClEnS,KAAK+6F,gBAAkC,iBAAEhzF,UAAY,4BACrD/H,KAAK+6F,gBAAkC,iBAAEv2E,UAAYqgB,EAAgB,QACrE7kC,KAAK+6F,gBAA6B,YAAEhpF,YAAY/R,KAAK+6F,gBAAkC,kBAEvF/6F,KAAK+6F,gBAAmC,kBAAIlpF,SAASM,cAAc,OACnEnS,KAAK+6F,gBAAmC,kBAAEhzF,UAAY,wBAEtD/H,KAAK+6F,gBAA6B,YAAIlpF,SAASM,cAAc,QAC7DnS,KAAK+6F,gBAA6B,YAAEhzF,UAAY,iCAChD/H,KAAK+6F,gBAAkC,iBAAIlpF,SAASM,cAAc,QAClEnS,KAAK+6F,gBAAkC,iBAAEhzF,UAAY,4BACrD/H,KAAK+6F,gBAAkC,iBAAEv2E,UAAYqgB,EAAgB,QACrE7kC,KAAK+6F,gBAA6B,YAAEhpF,YAAY/R,KAAK+6F,gBAAkC,kBAEvF/6F,KAAK0qE,gBAAgB34D,YAAY/R,KAAK+6F,gBAA6B,aACnE/6F,KAAK0qE,gBAAgB34D,YAAY/R,KAAK+6F,gBAAmC,mBACzE/6F,KAAK0qE,gBAAgB34D,YAAY/R,KAAK+6F,gBAA6B,aAE/B,GAAhC/6F,KAAKu5F,yBAAgCv5F,KAAKw8C,iBAAiBC,MAC7Dz8C,KAAK+6F,gBAAmC,kBAAIlpF,SAASM,cAAc,OACnEnS,KAAK+6F,gBAAmC,kBAAEhzF,UAAY,wBAEtD/H,KAAK+6F,gBAA8B,aAAIlpF,SAASM,cAAc,QAC9DnS,KAAK+6F,gBAA8B,aAAEhzF,UAAY,8BACjD/H,KAAK+6F,gBAAmC,kBAAIlpF,SAASM,cAAc,QACnEnS,KAAK+6F,gBAAmC,kBAAEhzF,UAAY,4BACtD/H,KAAK+6F,gBAAmC,kBAAEv2E,UAAYqgB,EAAiB,SACvE7kC,KAAK+6F,gBAA8B,aAAEhpF,YAAY/R,KAAK+6F,gBAAmC,mBAEzF/6F,KAAK0qE,gBAAgB34D,YAAY/R,KAAK+6F,gBAAmC,mBACzE/6F,KAAK0qE,gBAAgB34D,YAAY/R,KAAK+6F,gBAA8B,eAE7B,GAAhC/6F,KAAK05F,yBAAgE,GAAhC15F,KAAKu5F,0BACjDv5F,KAAK+6F,gBAAmC,kBAAIlpF,SAASM,cAAc,OACnEnS,KAAK+6F,gBAAmC,kBAAEhzF,UAAY,wBAEtD/H,KAAK+6F,gBAA8B,aAAIlpF,SAASM,cAAc,QAC9DnS,KAAK+6F,gBAA8B,aAAEhzF,UAAY,8BACjD/H,KAAK+6F,gBAAmC,kBAAIlpF,SAASM,cAAc,QACnEnS,KAAK+6F,gBAAmC,kBAAEhzF,UAAY,4BACtD/H,KAAK+6F,gBAAmC,kBAAEv2E,UAAYqgB,EAAiB,SACvE7kC,KAAK+6F,gBAA8B,aAAEhpF,YAAY/R,KAAK+6F,gBAAmC,mBAEzF/6F,KAAK0qE,gBAAgB34D,YAAY/R,KAAK+6F,gBAAmC,mBACzE/6F,KAAK0qE,gBAAgB34D,YAAY/R,KAAK+6F,gBAA8B,eAEtC,GAA5B/6F,KAAK45F,sBACP55F,KAAK+6F,gBAAmC,kBAAIlpF,SAASM,cAAc,OACnEnS,KAAK+6F,gBAAmC,kBAAEhzF,UAAY,wBAEtD/H,KAAK+6F,gBAA4B,WAAIlpF,SAASM,cAAc,QAC5DnS,KAAK+6F,gBAA4B,WAAEhzF,UAAY,gCAC/C/H,KAAK+6F,gBAAiC,gBAAIlpF,SAASM,cAAc,QACjEnS,KAAK+6F,gBAAiC,gBAAEhzF,UAAY,4BACpD/H,KAAK+6F,gBAAiC,gBAAEv2E,UAAYqgB,EAAY,IAChE7kC,KAAK+6F,gBAA4B,WAAEhpF,YAAY/R,KAAK+6F,gBAAiC,iBAErF/6F,KAAK0qE,gBAAgB34D,YAAY/R,KAAK+6F,gBAAmC,mBACzE/6F,KAAK0qE,gBAAgB34D,YAAY/R,KAAK+6F,gBAA4B,aAKpE/6F,KAAK+6F,gBAA6B,YAAExoE,QAAUvyB,KAAKu7F,sBAAsBlmE,KAAKr1B,MAC9EA,KAAK+6F,gBAA6B,YAAExoE,QAAUvyB,KAAKw7F,sBAAsBnmE,KAAKr1B,MAC1C,GAAhCA,KAAKu5F,yBAAgCv5F,KAAKw8C,iBAAiBC,KAC7Dz8C,KAAK+6F,gBAA8B,aAAExoE,QAAUvyB,KAAKy7F,UAAUpmE,KAAKr1B,MAE5B,GAAhCA,KAAK05F,yBAAgE,GAAhC15F,KAAKu5F,0BACjDv5F,KAAK+6F,gBAA8B,aAAExoE,QAAUvyB,KAAK07F,uBAAuBrmE,KAAKr1B,OAElD,GAA5BA,KAAK45F,sBACP55F,KAAK+6F,gBAA4B,WAAExoE,QAAUvyB,KAAKypD,gBAAgBp0B,KAAKr1B,OAEzEA,KAAK4qE,SAASr4C,QAAUvyB,KAAKk7F,gBAAgB7lE,KAAKr1B,MAElDA,KAAKo7F,cAAgBp7F,KAAKwpD,sBAAsBn0B,KAAKr1B,MACrDA,KAAK6T,GAAG,SAAU7T,KAAKo7F,mBAEpB,CACH,KAAOp7F,KAAK2qE,YAAY1mD,iBACtBjkB,KAAK2qE,YAAYl5D,YAAYzR,KAAK2qE,YAAYzmD,WAGhDlkB,MAAK+6F,gBAA8B,aAAIlpF,SAASM,cAAc,QAC9DnS,KAAK+6F,gBAA8B,aAAEhzF,UAAY,uCACjD/H,KAAK+6F,gBAAmC,kBAAIlpF,SAASM,cAAc,QACnEnS,KAAK+6F,gBAAmC,kBAAEhzF,UAAY,4BACtD/H,KAAK+6F,gBAAmC,kBAAEv2E,UAAYqgB,EAAa,KACnE7kC,KAAK+6F,gBAA8B,aAAEhpF,YAAY/R,KAAK+6F,gBAAmC,mBAEzF/6F,KAAK2qE,YAAY54D,YAAY/R,KAAK+6F,gBAA8B,cAEhE/6F,KAAK+6F,gBAA8B,aAAExoE,QAAUvyB,KAAKk7F,gBAAgB7lE,KAAKr1B,QAW7EJ,EAAQ27F,sBAAwB,WAE9Bv7F,KAAK86F,uBACD96F,KAAKo7F,eACPp7F,KAAKgU,IAAI,SAAUhU,KAAKo7F,cAG1B,IAAIv2D,GAAS7kC,KAAKohD,UAAUxc,QAAQ5kC,KAAKohD,UAAUvc,OAEnD7kC,MAAK+6F,mBACL/6F,KAAK+6F,gBAA0B,SAAIlpF,SAASM,cAAc,QAC1DnS,KAAK+6F,gBAA0B,SAAEhzF,UAAY,8BAC7C/H,KAAK+6F,gBAA+B,cAAIlpF,SAASM,cAAc,QAC/DnS,KAAK+6F,gBAA+B,cAAEhzF,UAAY,4BAClD/H,KAAK+6F,gBAA+B,cAAEv2E,UAAYqgB,EAAa,KAC/D7kC,KAAK+6F,gBAA0B,SAAEhpF,YAAY/R,KAAK+6F,gBAA+B,eAEjF/6F,KAAK+6F,gBAAmC,kBAAIlpF,SAASM,cAAc,OACnEnS,KAAK+6F,gBAAmC,kBAAEhzF,UAAY,wBAEtD/H,KAAK+6F,gBAAiC,gBAAIlpF,SAASM,cAAc,QACjEnS,KAAK+6F,gBAAiC,gBAAEhzF,UAAY,8BACpD/H,KAAK+6F,gBAAsC,qBAAIlpF,SAASM,cAAc,QACtEnS,KAAK+6F,gBAAsC,qBAAEhzF,UAAY,4BACzD/H,KAAK+6F,gBAAsC,qBAAEv2E,UAAYqgB,EAAuB,eAChF7kC,KAAK+6F,gBAAiC,gBAAEhpF,YAAY/R,KAAK+6F,gBAAsC,sBAE/F/6F,KAAK0qE,gBAAgB34D,YAAY/R,KAAK+6F,gBAA0B,UAChE/6F,KAAK0qE,gBAAgB34D,YAAY/R,KAAK+6F,gBAAmC,mBACzE/6F,KAAK0qE,gBAAgB34D,YAAY/R,KAAK+6F,gBAAiC,iBAGvE/6F,KAAK+6F,gBAA0B,SAAExoE,QAAUvyB,KAAKwpD,sBAAsBn0B,KAAKr1B,MAG3EA,KAAKo7F,cAAgBp7F,KAAK27F,SAAStmE,KAAKr1B,MACxCA,KAAK6T,GAAG,SAAU7T,KAAKo7F,gBASzBx7F,EAAQ47F,sBAAwB,WAE9Bx7F,KAAK86F,uBACL96F,KAAKk0F,cAAa,GAClBl0F,KAAKijD,kBAAmB,CAExB,IAAIpe,GAAS7kC,KAAKohD,UAAUxc,QAAQ5kC,KAAKohD,UAAUvc,OAE/C7kC,MAAKo7F,eACPp7F,KAAKgU,IAAI,SAAUhU,KAAKo7F,eAG1Bp7F,KAAKk0F,eACLl0F,KAAKyqE,sBAAuB,EAC5BzqE,KAAKwqE,8BAA+B,EAEpCxqE,KAAK+6F,mBACL/6F,KAAK+6F,gBAA0B,SAAIlpF,SAASM,cAAc,QAC1DnS,KAAK+6F,gBAA0B,SAAEhzF,UAAY,8BAC7C/H,KAAK+6F,gBAA+B,cAAIlpF,SAASM,cAAc,QAC/DnS,KAAK+6F,gBAA+B,cAAEhzF,UAAY,4BAClD/H,KAAK+6F,gBAA+B,cAAEv2E,UAAYqgB,EAAa,KAC/D7kC,KAAK+6F,gBAA0B,SAAEhpF,YAAY/R,KAAK+6F,gBAA+B,eAEjF/6F,KAAK+6F,gBAAmC,kBAAIlpF,SAASM,cAAc,OACnEnS,KAAK+6F,gBAAmC,kBAAEhzF,UAAY,wBAEtD/H,KAAK+6F,gBAAiC,gBAAIlpF,SAASM,cAAc,QACjEnS,KAAK+6F,gBAAiC,gBAAEhzF,UAAY,8BACpD/H,KAAK+6F,gBAAsC,qBAAIlpF,SAASM,cAAc,QACtEnS,KAAK+6F,gBAAsC,qBAAEhzF,UAAY,4BACzD/H,KAAK+6F,gBAAsC,qBAAEv2E,UAAYqgB,EAAwB,gBACjF7kC,KAAK+6F,gBAAiC,gBAAEhpF,YAAY/R,KAAK+6F,gBAAsC,sBAE/F/6F,KAAK0qE,gBAAgB34D,YAAY/R,KAAK+6F,gBAA0B,UAChE/6F,KAAK0qE,gBAAgB34D,YAAY/R,KAAK+6F,gBAAmC,mBACzE/6F,KAAK0qE,gBAAgB34D,YAAY/R,KAAK+6F,gBAAiC,iBAGvE/6F,KAAK+6F,gBAA0B,SAAExoE,QAAUvyB,KAAKwpD,sBAAsBn0B,KAAKr1B,MAG3EA,KAAKo7F,cAAgBp7F,KAAK47F,eAAevmE,KAAKr1B,MAC9CA,KAAK6T,GAAG,SAAU7T,KAAKo7F,eAGvBp7F,KAAKkjD,gBAA8B,aAAIljD,KAAK6pD,aAC5C7pD,KAAKkjD,gBAA8C,6BAAIljD,KAAKq6F,6BAC5Dr6F,KAAKkjD,gBAAkC,iBAAIljD,KAAK8pD,iBAChD9pD,KAAKkjD,gBAAgC,eAAIljD,KAAK8qD,eAC9C9qD,KAAK6pD,aAAe7pD,KAAK47F,eACzB57F,KAAKq6F,6BAA+B,aACpCr6F,KAAK8pD,iBAAmB,aACxB9pD,KAAK8qD,eAAiB9qD,KAAK67F,eAG3B77F,KAAKuiD,WAQP3iD,EAAQ87F,uBAAyB,WAE/B17F,KAAK86F,uBACL96F,KAAKuhD,oBAAqB,EAEtBvhD,KAAKo7F,eACPp7F,KAAKgU,IAAI,SAAUhU,KAAKo7F,eAG1Bp7F,KAAKq7F,gBAAkBr7F,KAAKy5F,mBAC5Bz5F,KAAKq7F,gBAAgB1jC,qBAErB,IAAI9yB,GAAS7kC,KAAKohD,UAAUxc,QAAQ5kC,KAAKohD,UAAUvc,OAEnD7kC,MAAK+6F,mBACL/6F,KAAK+6F,gBAA0B,SAAIlpF,SAASM,cAAc,QAC1DnS,KAAK+6F,gBAA0B,SAAEhzF,UAAY,8BAC7C/H,KAAK+6F,gBAA+B,cAAIlpF,SAASM,cAAc,QAC/DnS,KAAK+6F,gBAA+B,cAAEhzF,UAAY,4BAClD/H,KAAK+6F,gBAA+B,cAAEv2E,UAAYqgB,EAAa,KAC/D7kC,KAAK+6F,gBAA0B,SAAEhpF,YAAY/R,KAAK+6F,gBAA+B,eAEjF/6F,KAAK+6F,gBAAmC,kBAAIlpF,SAASM,cAAc,OACnEnS,KAAK+6F,gBAAmC,kBAAEhzF,UAAY,wBAEtD/H,KAAK+6F,gBAAiC,gBAAIlpF,SAASM,cAAc,QACjEnS,KAAK+6F,gBAAiC,gBAAEhzF,UAAY,8BACpD/H,KAAK+6F,gBAAsC,qBAAIlpF,SAASM,cAAc,QACtEnS,KAAK+6F,gBAAsC,qBAAEhzF,UAAY,4BACzD/H,KAAK+6F,gBAAsC,qBAAEv2E,UAAYqgB,EAA4B,oBACrF7kC,KAAK+6F,gBAAiC,gBAAEhpF,YAAY/R,KAAK+6F,gBAAsC,sBAE/F/6F,KAAK0qE,gBAAgB34D,YAAY/R,KAAK+6F,gBAA0B,UAChE/6F,KAAK0qE,gBAAgB34D,YAAY/R,KAAK+6F,gBAAmC,mBACzE/6F,KAAK0qE,gBAAgB34D,YAAY/R,KAAK+6F,gBAAiC,iBAGvE/6F,KAAK+6F,gBAA0B,SAAExoE,QAAUvyB,KAAKwpD,sBAAsBn0B,KAAKr1B,MAG3EA,KAAKkjD,gBAA8B,aAASljD,KAAK6pD,aACjD7pD,KAAKkjD,gBAA8C,6BAAKljD,KAAKq6F,6BAC7Dr6F,KAAKkjD,gBAA4B,WAAWljD,KAAK+qD,WACjD/qD,KAAKkjD,gBAAkC,iBAAKljD,KAAK8pD,iBACjD9pD,KAAKkjD,gBAA+B,cAAQljD,KAAKwqD,cACjDxqD,KAAK6pD,aAAmB7pD,KAAK87F,mBAC7B97F,KAAK+qD,WAAmB,aACxB/qD,KAAKwqD,cAAmBxqD,KAAK+7F,iBAC7B/7F,KAAK8pD,iBAAmB,aACxB9pD,KAAKq6F,6BAA+Br6F,KAAKg8F,oBAGzCh8F,KAAKuiD,WAUP3iD,EAAQk8F,mBAAqB,SAASt7D,GACpCxgC,KAAKq7F,gBAAgB9nC,aAAa5pC,KAAKunB,WACvClxC,KAAKq7F,gBAAgB9nC,aAAa3pC,GAAGsnB,WACrClxC,KAAKs7F,oBAAsBt7F,KAAKq7F,gBAAgBxjC,wBAAwB73D,KAAK0qD,qBAAqBlqB,EAAQnuB,GAAGrS,KAAK4qD,qBAAqBpqB,EAAQluB,IAC9G,OAA7BtS,KAAKs7F,sBACPt7F,KAAKs7F,oBAAoBnqD,SACzBnxC,KAAKijD,kBAAmB,GAE1BjjD,KAAKuiD,WAUP3iD,EAAQm8F,iBAAmB,SAASvyF,GAClC,GAAIg3B,GAAUxgC,KAAK0pD,YAAYlgD,EAAMy2B,QAAQvT,OACZ,QAA7B1sB,KAAKs7F,qBAA6D/0F,SAA7BvG,KAAKs7F,sBAC5Ct7F,KAAKs7F,oBAAoBjpF,EAAIrS,KAAK0qD,qBAAqBlqB,EAAQnuB,GAC/DrS,KAAKs7F,oBAAoBhpF,EAAItS,KAAK4qD,qBAAqBpqB,EAAQluB,IAEjEtS,KAAKuiD,WAGP3iD,EAAQo8F,oBAAsB,SAASx7D,GACrC,GAAIy7D,GAAUj8F,KAAK+pD,WAAWvpB,EACd,QAAZy7D,GACqD,GAAnDj8F,KAAKq7F,gBAAgB9nC,aAAa5pC,KAAKupB,WACzClzC,KAAKk8F,UAAUD,EAAQ57F,GAAIL,KAAKq7F,gBAAgBzxE,GAAGvpB,IACnDL,KAAKq7F,gBAAgB9nC,aAAa5pC,KAAKunB,YAEY,GAAjDlxC,KAAKq7F,gBAAgB9nC,aAAa3pC,GAAGspB,WACvClzC,KAAKk8F,UAAUl8F,KAAKq7F,gBAAgB1xE,KAAKtpB,GAAI47F,EAAQ57F,IACrDL,KAAKq7F,gBAAgB9nC,aAAa3pC,GAAGsnB,aAIvClxC,KAAKq7F,gBAAgBrjC,uBAEvBh4D,KAAKijD,kBAAmB,EACxBjjD,KAAKuiD,WASP3iD,EAAQg8F,eAAiB,SAASp7D,GAChC,GAAoC,GAAhCxgC,KAAKu5F,wBAA8B,CACrC,GAAIl0C,GAAOrlD,KAAK+pD,WAAWvpB,EAE3B,IAAY,MAAR6kB,EACF,GAAIA,EAAK4U,YAAc,EACrBkiC,MAAMn8F,KAAKohD,UAAUxc,QAAQ5kC,KAAKohD,UAAUvc,QAAyB,qBAElE,CACH7kC,KAAKkqD,cAAc7E,GAAK,EACxB,IAAI+2C,GAAep8F,KAAKiuD,QAAiB,QAAS,KAGlDmuC,GAAyB,WAAI,GAAI74F,IAAMlD,GAAG,oBAAoBL,KAAKohD,UACnE,IAAIi7C,GAAaD,EAAyB,UAC1CC,GAAWhqF,EAAIgzC,EAAKhzC,EACpBgqF,EAAW/pF,EAAI+yC,EAAK/yC,EAGpBtS,KAAK09C,MAAsB,eAAI,GAAIt6C,IAAM/C,GAAG,iBAAiBspB,KAAK07B,EAAKhlD,GAAGupB,GAAGyyE,EAAWh8F,IAAKL,KAAMA,KAAKohD,UACxG,IAAIk7C,GAAiBt8F,KAAK09C,MAAsB,cAChD4+C,GAAe3yE,KAAO07B,EACtBi3C,EAAe5vC,WAAY,EAC3B4vC,EAAevtF,QAAQ0xC,cAAgBzxC,SAAS,EAC5C0xC,SAAS,EACT75C,KAAM,aACN85C,UAAW,IAEf27C,EAAeppD,UAAW,EAC1BopD,EAAe1yE,GAAKyyE,EAEpBr8F,KAAKkjD,gBAA+B,cAAIljD,KAAKwqD,cAC7CxqD,KAAKwqD,cAAgB,SAAShhD,GAC5B,GAAIg3B,GAAUxgC,KAAK0pD,YAAYlgD,EAAMy2B,QAAQvT,QACzC4vE,EAAiBt8F,KAAK09C,MAAsB,cAChD4+C,GAAe1yE,GAAGvX,EAAIrS,KAAK0qD,qBAAqBlqB,EAAQnuB,GACxDiqF,EAAe1yE,GAAGtX,EAAItS,KAAK4qD,qBAAqBpqB,EAAQluB,IAG1DtS,KAAKwkD,QAAS,EACdxkD,KAAKkQ,WAMbtQ,EAAQi8F,eAAiB,SAASryF,GAChC,GAAoC,GAAhCxJ,KAAKu5F,wBAA8B,CACrC,GAAI/4D,GAAUxgC,KAAK0pD,YAAYlgD,EAAMy2B,QAAQvT,OAE7C1sB,MAAKwqD,cAAgBxqD,KAAKkjD,gBAA+B,oBAClDljD,MAAKkjD,gBAA+B,aAG3C,IAAIq5C,GAAgBv8F,KAAK09C,MAAsB,eAAEgV,aAG1C1yD,MAAK09C,MAAsB,qBAC3B19C,MAAKiuD,QAAiB,QAAS,MAAc,iBAC7CjuD,MAAKiuD,QAAiB,QAAS,MAAiB,aAEvD,IAAI5I,GAAOrlD,KAAK+pD,WAAWvpB,EACf,OAAR6kB,IACEA,EAAK4U,YAAc,EACrBkiC,MAAMn8F,KAAKohD,UAAUxc,QAAQ5kC,KAAKohD,UAAUvc,QAAyB,kBAGrE7kC,KAAKw8F,YAAYD,EAAcl3C,EAAKhlD,IACpCL,KAAKwpD,0BAGTxpD,KAAKk0F,iBAQTt0F,EAAQ+7F,SAAW,WACjB,GAAI37F,KAAK45F,qBAAwC,GAAjB55F,KAAKunD,SAAkB,CACrD,GAAIuxC,GAAiB94F,KAAK64F,yBAAyB74F,KAAK2jD,iBACpD84C,GAAep8F,GAAGM,EAAKoE,aAAasN,EAAEymF,EAAetxF,KAAK8K,EAAEwmF,EAAelxF,IAAIohB,MAAM,MAAMwoC,gBAAe,EAAKC,gBAAe,EAClI,IAAIzxD,KAAKw8C,iBAAiBjpC,IAAK,CAC7B,GAAwC,GAApCvT,KAAKw8C,iBAAiBjpC,IAAI7N,OAU5B,KAAM,IAAI9B,OAAM,sEAThB,IAAI6Q,GAAKzU,IACTA,MAAKw8C,iBAAiBjpC,IAAIkpF,EAAa,SAASC,GAC9CjoF,EAAGqvC,UAAUvwC,IAAImpF,GACjBjoF,EAAG+0C,wBACH/0C,EAAG+vC,QAAS,EACZ/vC,EAAGvE,cAWPlQ,MAAK8jD,UAAUvwC,IAAIkpF,GACnBz8F,KAAKwpD,wBACLxpD,KAAKwkD,QAAS,EACdxkD,KAAKkQ,UAWXtQ,EAAQ48F,YAAc,SAASG,EAAaC,GAC1C,GAAqB,GAAjB58F,KAAKunD,SAAkB,CACzB,GAAIk1C,IAAe9yE,KAAKgzE,EAAc/yE,GAAGgzE,EACzC,IAAI58F,KAAKw8C,iBAAiBG,QAAS,CACjC,GAA4C,GAAxC38C,KAAKw8C,iBAAiBG,QAAQj3C,OAShC,KAAM,IAAI9B,OAAM,0EARhB,IAAI6Q,GAAKzU,IACTA,MAAKw8C,iBAAiBG,QAAQ8/C,EAAa,SAASC,GAClDjoF,EAAGsvC,UAAUxwC,IAAImpF,GACjBjoF,EAAG+vC,QAAS,EACZ/vC,EAAGvE,cAUPlQ,MAAK+jD,UAAUxwC,IAAIkpF,GACnBz8F,KAAKwkD,QAAS,EACdxkD,KAAKkQ,UAUXtQ,EAAQs8F,UAAY,SAASS,EAAaC,GACxC,GAAqB,GAAjB58F,KAAKunD,SAAkB,CACzB,GAAIk1C,IAAep8F,GAAIL,KAAKq7F,gBAAgBh7F,GAAIspB,KAAKgzE,EAAc/yE,GAAGgzE,EACtE,IAAI58F,KAAKw8C,iBAAiBE,SAAU,CAClC,GAA6C,GAAzC18C,KAAKw8C,iBAAiBE,SAASh3C,OASjC,KAAM,IAAI9B,OAAM,wEARhB,IAAI6Q,GAAKzU,IACTA,MAAKw8C,iBAAiBE,SAAS+/C,EAAa,SAASC,GACnDjoF,EAAGsvC,UAAU5uC,OAAOunF,GACpBjoF,EAAG+vC,QAAS,EACZ/vC,EAAGvE,cAUPlQ,MAAK+jD,UAAU5uC,OAAOsnF,GACtBz8F,KAAKwkD,QAAS,EACdxkD,KAAKkQ,UAUXtQ,EAAQ67F,UAAY,WAClB,IAAIz7F,KAAKw8C,iBAAiBC,MAAyB,GAAjBz8C,KAAKunD,SA4BrC,KAAM,IAAI3jD,OAAM,iDA3BhB;GAAIyhD,GAAOrlD,KAAKw5F,mBACZxmF,GAAQ3S,GAAGglD,EAAKhlD,GAClB2oB,MAAOq8B,EAAKr8B,MACZzW,MAAO8yC,EAAKt2C,QAAQwD,MACpB0qC,MAAOoI,EAAKt2C,QAAQkuC,MACpBpyC,OACEiB,WAAWu5C,EAAKt2C,QAAQlE,MAAMiB,WAC9BC,OAAOs5C,EAAKt2C,QAAQlE,MAAMkB,OAC1BC,WACEF,WAAWu5C,EAAKt2C,QAAQlE,MAAMmB,UAAUF,WACxCC,OAAOs5C,EAAKt2C,QAAQlE,MAAMmB,UAAUD,SAG1C,IAAyC,GAArC/L,KAAKw8C,iBAAiBC,KAAK/2C,OAU7B,KAAM,IAAI9B,OAAM,wEAThB,IAAI6Q,GAAKzU,IACTA,MAAKw8C,iBAAiBC,KAAKzpC,EAAM,SAAU0pF,GACzCjoF,EAAGqvC,UAAU3uC,OAAOunF,GACpBjoF,EAAG+0C,wBACH/0C,EAAG+vC,QAAS,EACZ/vC,EAAGvE,WAoBXtQ,EAAQ6pD,gBAAkB,WACxB,IAAKzpD,KAAK45F,qBAAwC,GAAjB55F,KAAKunD,SACpC,GAAKvnD,KAAK65F,sBA4BRsC,MAAMn8F,KAAKohD,UAAUxc,QAAQ5kC,KAAKohD,UAAUvc,QAA4B,wBA5BzC,CAC/B,GAAIg4D,GAAgB78F,KAAKu6F,mBACrBuC,EAAgB98F,KAAKy6F,kBACzB,IAAIz6F,KAAKw8C,iBAAiBI,IAAK,CAC7B,GAAInoC,GAAKzU,KACLgT,GAAQ6pC,MAAOggD,EAAen/C,MAAOo/C,EACzC,MAAI98F,KAAKw8C,iBAAiBI,IAAIl3C,OAAS,GAUrC,KAAM,IAAI9B,OAAM,0EAThB5D,MAAKw8C,iBAAiBI,IAAI5pC,EAAM,SAAU0pF,GACxCjoF,EAAGsvC,UAAUntC,OAAO8lF,EAAch/C,OAClCjpC,EAAGqvC,UAAUltC,OAAO8lF,EAAc7/C,OAClCpoC,EAAGy/E,eACHz/E,EAAG+vC,QAAS,EACZ/vC,EAAGvE,cAQPlQ,MAAK+jD,UAAUntC,OAAOkmF,GACtB98F,KAAK8jD,UAAUltC,OAAOimF,GACtB78F,KAAKk0F,eACLl0F,KAAKwkD,QAAS,EACdxkD,KAAKkQ,WAYT,SAASrQ,EAAQD,EAASM,GAE9B,GACIolC,IADOplC,EAAoB,GAClBA,EAAoB,IAEjCN,GAAQirE,iBAAmB,WAEzB,GAA8C,GAA1C7qE,KAAKwhD,kBAAkBC,SAAS/7C,OAAa,CAC/C,IAAK,GAAIH,GAAI,EAAGA,EAAIvF,KAAKwhD,kBAAkBC,SAAS/7C,OAAQH,IAC1DvF,KAAKwhD,kBAAkBC,SAASl8C,GAAG4pF,SAErCnvF,MAAKwhD,kBAAkBC,YAGzBzhD,KAAKs6F,2BAA6B,aAG9Bt6F,KAAK+8F,gBAAkB/8F,KAAK+8F,eAAwB,SAAK/8F,KAAK+8F,eAAwB,QAAEjzF,YAC1F9J,KAAK+8F,eAAwB,QAAEjzF,WAAW2H,YAAYzR,KAAK+8F,eAAwB,UAYvFn9F,EAAQkrE,wBAA0B,WAChC9qE,KAAK6qE,mBAEL7qE,KAAK+8F,iBACL,IAAIA,IAAkB,KAAK,OAAO,OAAO,QAAQ,SAAS,UAAU,eAChEC,GAAwB,UAAU,YAAY,YAAY,aAAa,UAAU,WAAW,cAEhGh9F,MAAK+8F,eAAwB,QAAIlrF,SAASM,cAAc,OACxDnS,KAAK6f,MAAM9N,YAAY/R,KAAK+8F,eAAwB,QAEpD,KAAK,GAAIx3F,GAAI,EAAGA,EAAIw3F,EAAer3F,OAAQH,IAAK,CAC9CvF,KAAK+8F,eAAeA,EAAex3F,IAAMsM,SAASM,cAAc,OAChEnS,KAAK+8F,eAAeA,EAAex3F,IAAIwC,UAAY,sBAAwBg1F,EAAex3F,GAC1FvF,KAAK+8F,eAAwB,QAAEhrF,YAAY/R,KAAK+8F,eAAeA,EAAex3F,IAE9E,IAAIzB,GAASwhC,EAAOtlC,KAAK+8F,eAAeA,EAAex3F,KAAMigC,iBAAiB,GAC9E1hC,GAAO+P,GAAG,QAAS7T,KAAKg9F,EAAqBz3F,IAAI8vB,KAAKr1B,OACtDA,KAAKwhD,kBAAkBE,KAAKx5C,KAAKpE,GAGnC9D,KAAKs6F,2BAA6Bt6F,KAAKi9F,cAEvCj9F,KAAKwhD,kBAAkBC,SAAWzhD,KAAKwhD,kBAAkBE,MAS3D9hD,EAAQs9F,YAAc,SAAS1zF,GAC7BxJ,KAAK2kD,YAAYv0C,SAAS,MAC1B5G,EAAMm8B,mBAQR/lC,EAAQq9F,cAAgB,WACtBj9F,KAAKmpD,eACLnpD,KAAKgpD,eACLhpD,KAAKspD,aAYP1pD,EAAQmpD,QAAU,SAASv/C,GACzBxJ,KAAKyiD,WAAaziD,KAAKohD,UAAUpB,SAASC,MAAM3tC,EAChDtS,KAAKkQ,QACL1G,EAAMD,kBAQR3J,EAAQqpD,UAAY,SAASz/C,GAC3BxJ,KAAKyiD,YAAcziD,KAAKohD,UAAUpB,SAASC,MAAM3tC,EACjDtS,KAAKkQ,QACL1G,EAAMD,kBAQR3J,EAAQspD,UAAY,SAAS1/C,GAC3BxJ,KAAKwiD,WAAaxiD,KAAKohD,UAAUpB,SAASC,MAAM5tC,EAChDrS,KAAKkQ,QACL1G,EAAMD,kBAQR3J,EAAQwpD,WAAa,SAAS5/C,GAC5BxJ,KAAKwiD,YAAcxiD,KAAKohD,UAAUpB,SAASC,MAAM3tC,EACjDtS,KAAKkQ,QACL1G,EAAMD,kBAQR3J,EAAQypD,QAAU,SAAS7/C,GACzBxJ,KAAK0iD,cAAgB1iD,KAAKohD,UAAUpB,SAASC,MAAMtf,KACnD3gC,KAAKkQ,QACL1G,EAAMD,kBAQR3J,EAAQ2pD,SAAW,SAAS//C,GAC1BxJ,KAAK0iD,eAAiB1iD,KAAKohD,UAAUpB,SAASC,MAAMtf,KACpD3gC,KAAKkQ,QACL1G,EAAMD,kBAQR3J,EAAQ0pD,UAAY,SAAS9/C,GAC3BxJ,KAAK0iD,cAAgB,EACrBl5C,GAASA,EAAMD,kBAQjB3J,EAAQopD,aAAe,SAASx/C,GAC9BxJ,KAAKyiD,WAAa,EAClBj5C,GAASA,EAAMD,kBAQjB3J,EAAQupD,aAAe,SAAS3/C,GAC9BxJ,KAAKwiD,WAAa,EAClBh5C,GAASA,EAAMD,mBAMb,SAAS1J,EAAQD,GAErBA,EAAQqnD,aAAe,WACrB,IAAK,GAAIvB,KAAU1lD,MAAK68C,MACtB,GAAI78C,KAAK68C,MAAMh3C,eAAe6/C,GAAS,CACrC,GAAIL,GAAOrlD,KAAK68C,MAAM6I,EACO,IAAzBL,EAAK6T,mBACP7T,EAAK9H,MAAQ,GACb8H,EAAK8T,qBAAsB,KAYnCv5D,EAAQ8kD,yBAA2B,WACjC,GAAiD,GAA7C1kD,KAAKohD,UAAUhB,mBAAmBpxC,SAAmBhP,KAAKwjD,YAAY99C,OAAS,EAAG,CACjC,MAA/C1F,KAAKohD,UAAUhB,mBAAmB5kB,WAAoE,MAA/Cx7B,KAAKohD,UAAUhB,mBAAmB5kB,UAC3Fx7B,KAAKohD,UAAUhB,mBAAmBC,iBAAmB,GAGrDrgD,KAAKohD,UAAUhB,mBAAmBC,gBAAkBp7C,KAAKmmB,IAAIprB,KAAKohD,UAAUhB,mBAAmBC,iBAG9C,MAA/CrgD,KAAKohD,UAAUhB,mBAAmB5kB,WAAoE,MAA/Cx7B,KAAKohD,UAAUhB,mBAAmB5kB,UAChD,GAAvCx7B,KAAKohD,UAAUX,aAAazxC,UAC9BhP,KAAKohD,UAAUX,aAAa55C,KAAO,YAIM,GAAvC7G,KAAKohD,UAAUX,aAAazxC,UAC9BhP,KAAKohD,UAAUX,aAAa55C,KAAO,aAIvC,IACIw+C,GAAMK,EADNy3C,EAAU,EAEVC,GAAe,EACfC,GAAiB,CAErB,KAAK33C,IAAU1lD,MAAK68C,MACd78C,KAAK68C,MAAMh3C,eAAe6/C,KAC5BL,EAAOrlD,KAAK68C,MAAM6I,GACA,IAAdL,EAAK9H,MACP6/C,GAAe,EAGfC,GAAiB,EAEfF,EAAU93C,EAAK3H,MAAMh4C,SACvBy3F,EAAU93C,EAAK3H,MAAMh4C,QAM3B,IAAsB,GAAlB23F,GAA0C,GAAhBD,EAC5B,KAAM,IAAIx5F,OAAM,wHAQhB5D,MAAKs9F,mBAGiB,GAAlBD,IAC8C,WAA5Cr9F,KAAKohD,UAAUhB,mBAAmBG,OACpCvgD,KAAKu9F,iBAAiBJ,GAGtBn9F,KAAKw9F,2BAKT,IAAIC,GAAez9F,KAAK09F,kBAGxB19F,MAAK29F,uBAAuBF,GAG5Bz9F,KAAKkQ,UAYXtQ,EAAQ+9F,uBAAyB,SAASF,GACxC,GAAI/3C,GAAQL,CAGZ,KAAK,GAAI9H,KAASkgD,GAChB,GAAIA,EAAa53F,eAAe03C,GAE9B,IAAKmI,IAAU+3C,GAAalgD,GAAOV,MAC7B4gD,EAAalgD,GAAOV,MAAMh3C,eAAe6/C,KAC3CL,EAAOo4C,EAAalgD,GAAOV,MAAM6I,GACkB,MAA/C1lD,KAAKohD,UAAUhB,mBAAmB5kB,WAAoE,MAA/Cx7B,KAAKohD,UAAUhB,mBAAmB5kB,UACvF6pB,EAAKiF,SACPjF,EAAKhzC,EAAIorF,EAAalgD,GAAOqgD,OAC7Bv4C,EAAKiF,QAAS,EAEdmzC,EAAalgD,GAAOqgD,QAAUH,EAAalgD,GAAO+C,aAIhD+E,EAAKkF,SACPlF,EAAK/yC,EAAImrF,EAAalgD,GAAOqgD,OAC7Bv4C,EAAKkF,QAAS,EAEdkzC,EAAalgD,GAAOqgD,QAAUH,EAAalgD,GAAO+C,aAGtDtgD,KAAK69F,kBAAkBx4C,EAAK3H,MAAM2H,EAAKhlD,GAAGo9F,EAAap4C,EAAK9H,OAOpEv9C,MAAKknD,cAUPtnD,EAAQ89F,iBAAmB,WACzB,GACIh4C,GAAQL,EAAM9H,EADdkgD,IAKJ,KAAK/3C,IAAU1lD,MAAK68C,MACd78C,KAAK68C,MAAMh3C,eAAe6/C,KAC5BL,EAAOrlD,KAAK68C,MAAM6I,GAClBL,EAAKiF,QAAS,EACdjF,EAAKkF,QAAS,EACqC,MAA/CvqD,KAAKohD,UAAUhB,mBAAmB5kB,WAAoE,MAA/Cx7B,KAAKohD,UAAUhB,mBAAmB5kB,UAC3F6pB,EAAK/yC,EAAItS,KAAKohD,UAAUhB,mBAAmBC,gBAAgBgF,EAAK9H,MAGhE8H,EAAKhzC,EAAIrS,KAAKohD,UAAUhB,mBAAmBC,gBAAgBgF,EAAK9H,MAEjCh3C,SAA7Bk3F,EAAap4C,EAAK9H,SACpBkgD,EAAap4C,EAAK9H,QAAU0rB,OAAQ,EAAGpsB,SAAW+gD,OAAO,EAAGt9C,YAAY,IAE1Em9C,EAAap4C,EAAK9H,OAAO0rB,QAAU,EACnCw0B,EAAap4C,EAAK9H,OAAOV,MAAM6I,GAAUL,EAK7C,IAAIy4C,GAAW,CACf,KAAKvgD,IAASkgD,GACRA,EAAa53F,eAAe03C,IAC1BugD,EAAWL,EAAalgD,GAAO0rB,SACjC60B,EAAWL,EAAalgD,GAAO0rB,OAMrC,KAAK1rB,IAASkgD,GACRA,EAAa53F,eAAe03C,KAC9BkgD,EAAalgD,GAAO+C,aAAew9C,EAAW,GAAK99F,KAAKohD,UAAUhB,mBAAmBE,YACrFm9C,EAAalgD,GAAO+C,aAAgBm9C,EAAalgD,GAAO0rB,OAAS,EACjEw0B,EAAalgD,GAAOqgD,OAASH,EAAalgD,GAAO+C,YAAe,IAAOm9C,EAAalgD,GAAO0rB,OAAS,GAAKw0B,EAAalgD,GAAO+C,YAIjI,OAAOm9C,IAUT79F,EAAQ29F,iBAAmB,SAASJ,GAClC,GAAIz3C,GAAQL,CAGZ,KAAKK,IAAU1lD,MAAK68C,MACd78C,KAAK68C,MAAMh3C,eAAe6/C,KAC5BL,EAAOrlD,KAAK68C,MAAM6I,GACdL,EAAK3H,MAAMh4C,QAAUy3F,IACvB93C,EAAK9H,MAAQ,GAMnB,KAAKmI,IAAU1lD,MAAK68C,MACd78C,KAAK68C,MAAMh3C,eAAe6/C,KAC5BL,EAAOrlD,KAAK68C,MAAM6I,GACA,GAAdL,EAAK9H,OACPv9C,KAAK+9F,UAAU,EAAE14C,EAAK3H,MAAM2H,EAAKhlD,MAYzCT,EAAQ49F,yBAA2B,WACjC,GAAI93C,GAAQL,CAGZ,KAAKK,IAAU1lD,MAAK68C,MAClB,GAAI78C,KAAK68C,MAAMh3C,eAAe6/C,GAAS,CACrC1lD,KAAK68C,MAAM6I,GAAQnI,MAAQ,GAC3B,OAKJ,IAAKmI,IAAU1lD,MAAK68C,MACd78C,KAAK68C,MAAMh3C,eAAe6/C,KAC5BL,EAAOrlD,KAAK68C,MAAM6I,GACA,KAAdL,EAAK9H,OACPv9C,KAAKg+F,kBAAkB,IAAM34C,EAAK3H,MAAM2H,EAAKhlD,IAOnD,IAAI61F,GAAW,GACf,KAAKxwC,IAAU1lD,MAAK68C,MACd78C,KAAK68C,MAAMh3C,eAAe6/C,KAC5BL,EAAOrlD,KAAK68C,MAAM6I,GAClBwwC,EAAW7wC,EAAK9H,MAAQ24C,EAAW7wC,EAAK9H,MAAQ24C,EAKpD,KAAKxwC,IAAU1lD,MAAK68C,MACd78C,KAAK68C,MAAMh3C,eAAe6/C,KAC5BL,EAAOrlD,KAAK68C,MAAM6I,GAClBL,EAAK9H,OAAS24C,IAepBt2F,EAAQ09F,iBAAmB,WACzBt9F,KAAKohD,UAAUtC,WAAW9vC,SAAU,EACpChP,KAAKohD,UAAUjD,QAAQC,UAAUpvC,SAAU,EAC3ChP,KAAKohD,UAAUjD,QAAQU,sBAAsB7vC,SAAU,EACvDhP,KAAKmqE,2BACsC,GAAvCnqE,KAAKohD,UAAUX,aAAazxC,UAC9BhP,KAAKohD,UAAUX,aAAaC,SAAU,GAExC1gD,KAAK+nD,0BAcPnoD,EAAQi+F,kBAAoB,SAASngD,EAAOugD,EAAUR,EAAcS,GAClE,IAAK,GAAI34F,GAAI,EAAGA,EAAIm4C,EAAMh4C,OAAQH,IAAK,CACrC,GAAIyuF,GAAY,IAEdA,GADEt2C,EAAMn4C,GAAGotD,MAAQsrC,EACPvgD,EAAMn4C,GAAGokB,KAGT+zB,EAAMn4C,GAAGqkB,EAIvB,IAAIu0E,IAAY,CACmC,OAA/Cn+F,KAAKohD,UAAUhB,mBAAmB5kB,WAAoE,MAA/Cx7B,KAAKohD,UAAUhB,mBAAmB5kB,UACvFw4D,EAAU1pC,QAAU0pC,EAAUz2C,MAAQ2gD,IACxClK,EAAU1pC,QAAS,EACnB0pC,EAAU3hF,EAAIorF,EAAazJ,EAAUz2C,OAAOqgD,OAC5CO,GAAY,GAIVnK,EAAUzpC,QAAUypC,EAAUz2C,MAAQ2gD,IACxClK,EAAUzpC,QAAS,EACnBypC,EAAU1hF,EAAImrF,EAAazJ,EAAUz2C,OAAOqgD,OAC5CO,GAAY,GAIC,GAAbA,IACFV,EAAazJ,EAAUz2C,OAAOqgD,QAAUH,EAAazJ,EAAUz2C,OAAO+C,YAClE0zC,EAAUt2C,MAAMh4C,OAAS,GAC3B1F,KAAK69F,kBAAkB7J,EAAUt2C,MAAMs2C,EAAU3zF,GAAGo9F,EAAazJ,EAAUz2C,UAenF39C,EAAQm+F,UAAY,SAASxgD,EAAOG,EAAOugD,GACzC,IAAK,GAAI14F,GAAI,EAAGA,EAAIm4C,EAAMh4C,OAAQH,IAAK,CACrC,GAAIyuF,GAAY,IAEdA,GADEt2C,EAAMn4C,GAAGotD,MAAQsrC,EACPvgD,EAAMn4C,GAAGokB,KAGT+zB,EAAMn4C,GAAGqkB,IAEA,IAAnBoqE,EAAUz2C,OAAey2C,EAAUz2C,MAAQA,KAC7Cy2C,EAAUz2C,MAAQA,EACdy2C,EAAUt2C,MAAMh4C,OAAS,GAC3B1F,KAAK+9F,UAAUxgD,EAAM,EAAGy2C,EAAUt2C,MAAOs2C,EAAU3zF,OAe3DT,EAAQo+F,kBAAoB,SAASzgD,EAAOG,EAAOugD,GACjDj+F,KAAK68C,MAAMohD,GAAU9kC,qBAAsB,CAC3C,KAAK,GAAI5zD,GAAI,EAAGA,EAAIm4C,EAAMh4C,OAAQH,IAAK,CACrC,GAAIyuF,GAAY,KACZx4D,EAAY,CACZkiB,GAAMn4C,GAAGotD,MAAQsrC,GACnBjK,EAAYt2C,EAAMn4C,GAAGokB,KACrB6R,EAAY,IAGZw4D,EAAYt2C,EAAMn4C,GAAGqkB,GAEA,IAAnBoqE,EAAUz2C,QACZy2C,EAAUz2C,MAAQA,EAAQ/hB,GAI9B,IAAK,GAAIj2B,GAAI,EAAGA,EAAIm4C,EAAMh4C,OAAQH,IAAK,CACrC,GAAIyuF,GAAY,IACgBA,GAA5Bt2C,EAAMn4C,GAAGotD,MAAQsrC,EAAuBvgD,EAAMn4C,GAAGokB,KACnC+zB,EAAMn4C,GAAGqkB,GACvBoqE,EAAUt2C,MAAMh4C,OAAS,GAAKsuF,EAAU76B,uBAAwB,GAClEn5D,KAAKg+F,kBAAkBhK,EAAUz2C,MAAOy2C,EAAUt2C,MAAOs2C,EAAU3zF,MAWzET,EAAQw+F,cAAgB,WACtB,IAAK,GAAI14C,KAAU1lD,MAAK68C,MAClB78C,KAAK68C,MAAMh3C,eAAe6/C,KAC5B1lD,KAAK68C,MAAM6I,GAAQ4E,QAAS,EAC5BtqD,KAAK68C,MAAM6I,GAAQ6E,QAAS,KAQ9B,SAAS1qD,EAAQD,EAASM,GAuf9B,QAASm+F,KACPr+F,KAAKohD,UAAUX,aAAazxC,SAAWhP,KAAKohD,UAAUX,aAAazxC,OACnE,IAAIsvF,GAAqBzsF,SAAS0sF,eAAe,qBACCD,GAAmB9wF,MAAM1B,WAAhC,GAAvC9L,KAAKohD,UAAUX,aAAazxC,QAAwD,UACR,UAEhFhP,KAAK+nD,wBAAuB,GAO9B,QAASy2C,KACP,IAAK,GAAI94C,KAAU1lD,MAAKsjD,iBAClBtjD,KAAKsjD,iBAAiBz9C,eAAe6/C,KACvC1lD,KAAKsjD,iBAAiBoC,GAAQ4T,GAAK,EAAIt5D,KAAKsjD,iBAAiBoC,GAAQ6T,GAAK,EAC1Ev5D,KAAKsjD,iBAAiBoC,GAAQ0T,GAAK,EAAIp5D,KAAKsjD,iBAAiBoC,GAAQ2T,GAAK,EAG7B,IAA7Cr5D,KAAKohD,UAAUhB,mBAAmBpxC,SACpChP,KAAK0kD,2BACL+5C,EAAiBl+F,KAAKP,KAAM,aAAc,EAAG,8CAC7Cy+F,EAAiBl+F,KAAKP,KAAM,aAAc,EAAG,0BAC7Cy+F,EAAiBl+F,KAAKP,KAAM,aAAc,EAAG,0BAC7Cy+F,EAAiBl+F,KAAKP,KAAM,aAAc,EAAG,wBAC7Cy+F,EAAiBl+F,KAAKP,KAAM,eAAgB,EAAG,oBAG/CA,KAAKqyF,kBAEPryF,KAAKwkD,QAAS,EACdxkD,KAAKkQ,QAMP,QAASwuF,KACP,GAAI3vF,GAAU,gDACV4vF,KACAC,EAAe/sF,SAAS0sF,eAAe,wBACvCM,EAAehtF,SAAS0sF,eAAe,uBAC3C,IAA4B,GAAxBK,EAAaE,QAAiB,CAMhC,GALI9+F,KAAKohD,UAAUjD,QAAQC,UAAUE,uBAAyBt+C,KAAK++F,gBAAgB5gD,QAAQC,UAAUE,uBAAwBqgD,EAAgBz2F,KAAK,0BAA4BlI,KAAKohD,UAAUjD,QAAQC,UAAUE,uBAC3Mt+C,KAAKohD,UAAUjD,QAAQI,gBAAkBv+C,KAAK++F,gBAAgB5gD,QAAQC,UAAUG,gBAAyCogD,EAAgBz2F,KAAK,mBAAqBlI,KAAKohD,UAAUjD,QAAQI,gBAC1Lv+C,KAAKohD,UAAUjD,QAAQK,cAAgBx+C,KAAK++F,gBAAgB5gD,QAAQC,UAAUI,cAA2CmgD,EAAgBz2F,KAAK,iBAAmBlI,KAAKohD,UAAUjD,QAAQK,cACxLx+C,KAAKohD,UAAUjD,QAAQM,gBAAkBz+C,KAAK++F,gBAAgB5gD,QAAQC,UAAUK,gBAAyCkgD,EAAgBz2F,KAAK,mBAAqBlI,KAAKohD,UAAUjD,QAAQM,gBAC1Lz+C,KAAKohD,UAAUjD,QAAQO,SAAW1+C,KAAK++F,gBAAgB5gD,QAAQC,UAAUM,SAAgDigD,EAAgBz2F,KAAK,YAAclI,KAAKohD,UAAUjD,QAAQO,SACzJ,GAA1BigD,EAAgBj5F,OAAa,CAC/BqJ,EAAU,kBACVA,GAAW,wBACX,KAAK,GAAIxJ,GAAI,EAAGA,EAAIo5F,EAAgBj5F,OAAQH,IAC1CwJ,GAAW4vF,EAAgBp5F,GACvBA,EAAIo5F,EAAgBj5F,OAAS,IAC/BqJ,GAAW,KAGfA,IAAW,KAET/O,KAAKohD,UAAUX,aAAazxC,SAAWhP,KAAK++F,gBAAgBt+C,aAAazxC,UAC7C,GAA1B2vF,EAAgBj5F,OAAcqJ,EAAU,kBACtCA,GAAW,KACjBA,GAAW,iBAAmB/O,KAAKohD,UAAUX,aAAazxC,SAE7C,iDAAXD,IACFA,GAAW,UAGV,IAA4B,GAAxB8vF,EAAaC,QAAiB,CAQrC,GAPA/vF,EAAU,kBACVA,GAAW,wCACP/O,KAAKohD,UAAUjD,QAAQQ,UAAUC,cAAgB5+C,KAAK++F,gBAAgB5gD,QAAQQ,UAAUC,cAAgB+/C,EAAgBz2F,KAAK,iBAAmBlI,KAAKohD,UAAUjD,QAAQQ,UAAUC,cACjL5+C,KAAKohD,UAAUjD,QAAQI,gBAAkBv+C,KAAK++F,gBAAgB5gD,QAAQQ,UAAUJ,gBAAwBogD,EAAgBz2F,KAAK,mBAAqBlI,KAAKohD,UAAUjD,QAAQI,gBACzKv+C,KAAKohD,UAAUjD,QAAQK,cAAgBx+C,KAAK++F,gBAAgB5gD,QAAQQ,UAAUH,cAA0BmgD,EAAgBz2F,KAAK,iBAAmBlI,KAAKohD,UAAUjD,QAAQK,cACvKx+C,KAAKohD,UAAUjD,QAAQM,gBAAkBz+C,KAAK++F,gBAAgB5gD,QAAQQ,UAAUF,gBAAwBkgD,EAAgBz2F,KAAK,mBAAqBlI,KAAKohD,UAAUjD,QAAQM,gBACzKz+C,KAAKohD,UAAUjD,QAAQO,SAAW1+C,KAAK++F,gBAAgB5gD,QAAQQ,UAAUD,SAA+BigD,EAAgBz2F,KAAK,YAAclI,KAAKohD,UAAUjD,QAAQO,SACxI,GAA1BigD,EAAgBj5F,OAAa,CAC/BqJ,GAAW,gBACX,KAAK,GAAIxJ,GAAI,EAAGA,EAAIo5F,EAAgBj5F,OAAQH,IAC1CwJ,GAAW4vF,EAAgBp5F,GACvBA,EAAIo5F,EAAgBj5F,OAAS,IAC/BqJ,GAAW,KAGfA,IAAW,KAEiB,GAA1B4vF,EAAgBj5F,SAAcqJ,GAAW,KACzC/O,KAAKohD,UAAUX,cAAgBzgD,KAAK++F,gBAAgBt+C,eACtD1xC,GAAW,mBAAqB/O,KAAKohD,UAAUX,cAEjD1xC,GAAW,SAER,CAOH,GANAA,EAAU,kBACN/O,KAAKohD,UAAUjD,QAAQU,sBAAsBD,cAAgB5+C,KAAK++F,gBAAgB5gD,QAAQU,sBAAsBD,cAAgB+/C,EAAgBz2F,KAAK,iBAAmBlI,KAAKohD,UAAUjD,QAAQU,sBAAsBD,cACrN5+C,KAAKohD,UAAUjD,QAAQI,gBAAkBv+C,KAAK++F,gBAAgB5gD,QAAQU,sBAAsBN,gBAAwBogD,EAAgBz2F,KAAK,mBAAqBlI,KAAKohD,UAAUjD,QAAQI,gBACrLv+C,KAAKohD,UAAUjD,QAAQK,cAAgBx+C,KAAK++F,gBAAgB5gD,QAAQU,sBAAsBL,cAA0BmgD,EAAgBz2F,KAAK,iBAAmBlI,KAAKohD,UAAUjD,QAAQK,cACnLx+C,KAAKohD,UAAUjD,QAAQM,gBAAkBz+C,KAAK++F,gBAAgB5gD,QAAQU,sBAAsBJ,gBAAwBkgD,EAAgBz2F,KAAK,mBAAqBlI,KAAKohD,UAAUjD,QAAQM,gBACrLz+C,KAAKohD,UAAUjD,QAAQO,SAAW1+C,KAAK++F,gBAAgB5gD,QAAQU,sBAAsBH,SAA+BigD,EAAgBz2F,KAAK,YAAclI,KAAKohD,UAAUjD,QAAQO,SACpJ,GAA1BigD,EAAgBj5F,OAAa,CAC/BqJ,GAAW,oCACX,KAAK,GAAIxJ,GAAI,EAAGA,EAAIo5F,EAAgBj5F,OAAQH,IAC1CwJ,GAAW4vF,EAAgBp5F,GACvBA,EAAIo5F,EAAgBj5F,OAAS,IAC/BqJ,GAAW,KAGfA,IAAW,MAOb,GALAA,GAAW,wBACX4vF,KACI3+F,KAAKohD,UAAUhB,mBAAmB5kB,WAAax7B,KAAK++F,gBAAgB3+C,mBAAmB5kB,WAAkCmjE,EAAgBz2F,KAAK,cAAgBlI,KAAKohD,UAAUhB,mBAAmB5kB,WAChMv2B,KAAKmmB,IAAIprB,KAAKohD,UAAUhB,mBAAmBC,kBAAoBrgD,KAAK++F,gBAAgB3+C,mBAAmBC,iBAAkBs+C,EAAgBz2F,KAAK,oBAAsBlI,KAAKohD,UAAUhB,mBAAmBC,iBACtMrgD,KAAKohD,UAAUhB,mBAAmBE,aAAetgD,KAAK++F,gBAAgB3+C,mBAAmBE,aAAgCq+C,EAAgBz2F,KAAK,gBAAkBlI,KAAKohD,UAAUhB,mBAAmBE,aACxK,GAA1Bq+C,EAAgBj5F,OAAa,CAC/B,IAAK,GAAIH,GAAI,EAAGA,EAAIo5F,EAAgBj5F,OAAQH,IAC1CwJ,GAAW4vF,EAAgBp5F,GACvBA,EAAIo5F,EAAgBj5F,OAAS,IAC/BqJ,GAAW,KAGfA,IAAW,QAGXA,IAAW,eAEbA,IAAW,KAIb/O,KAAKg/F,WAAWx6E,UAAYzV,EAO9B,QAASkwF,KACP,GAAIxpF,IAAO,iBAAkB,gBAAiB,iBAC1CypF,EAAcrtF,SAASstF,cAAc,6CAA6C/3F,MAClFg4F,EAAU,SAAWF,EAAc,SACnCG,EAAQxtF,SAAS0sF,eAAea,EACpCC,GAAM7xF,MAAMo6B,QAAU,OACtB,KAAK,GAAIriC,GAAI,EAAGA,EAAIkQ,EAAI/P,OAAQH,IAC1BkQ,EAAIlQ,IAAM65F,IACZC,EAAQxtF,SAAS0sF,eAAe9oF,EAAIlQ,IACpC85F,EAAM7xF,MAAMo6B,QAAU,OAG1B5nC,MAAKo+F,gBACc,KAAfc,GACFl/F,KAAKohD,UAAUhB,mBAAmBpxC,SAAU,EAC5ChP,KAAKohD,UAAUjD,QAAQU,sBAAsB7vC,SAAU,EACvDhP,KAAKohD,UAAUjD,QAAQC,UAAUpvC,SAAU,GAErB,KAAfkwF,EAC0C,GAA7Cl/F,KAAKohD,UAAUhB,mBAAmBpxC,UACpChP,KAAKohD,UAAUhB,mBAAmBpxC,SAAU,EAC5ChP,KAAKohD,UAAUjD,QAAQU,sBAAsB7vC,SAAU,EACvDhP,KAAKohD,UAAUjD,QAAQC,UAAUpvC,SAAU,EAC3ChP,KAAKohD,UAAUX,aAAazxC,SAAU,EACtChP,KAAK0kD,6BAIP1kD,KAAKohD,UAAUhB,mBAAmBpxC,SAAU,EAC5ChP,KAAKohD,UAAUjD,QAAQU,sBAAsB7vC,SAAU,EACvDhP,KAAKohD,UAAUjD,QAAQC,UAAUpvC,SAAU,GAE7ChP,KAAKmqE,0BACL,IAAIm0B,GAAqBzsF,SAAS0sF,eAAe,qBACCD,GAAmB9wF,MAAM1B,WAAhC,GAAvC9L,KAAKohD,UAAUX,aAAazxC,QAAwD,UACR,UAChFhP,KAAKwkD,QAAS,EACdxkD,KAAKkQ,QAWP,QAASuuF,GAAkBp+F,EAAGuN,EAAI0xF,GAChC,GAAIC,GAAUl/F,EAAK,SACfm/F,EAAa3tF,SAAS0sF,eAAel+F,GAAI+G,KAEzCpB,OAAMC,QAAQ2H,IAChBiE,SAAS0sF,eAAegB,GAASn4F,MAAQwG,EAAIyd,SAASm0E,IACtDx/F,KAAKy/F,yBAAyBH,EAAsB1xF,EAAIyd,SAASm0E,OAGjE3tF,SAAS0sF,eAAegB,GAASn4F,MAAQikB,SAASzd,GAAOgY,WAAW45E,GACpEx/F,KAAKy/F,yBAAyBH,EAAuBj0E,SAASzd,GAAOgY,WAAW45E,MAGrD,gCAAzBF,GACuB,sCAAzBA,GACyB,kCAAzBA,IACAt/F,KAAK0kD,2BAEP1kD,KAAKwkD,QAAS,EACdxkD,KAAKkQ,QAlsBP,GAAIvP,GAAOT,EAAoB,GAC3Bw/F,EAAiBx/F,EAAoB,IACrCy/F,EAA4Bz/F,EAAoB,IAChD0/F,EAAiB1/F,EAAoB,GAOzCN,GAAQigG,iBAAmB,WACzB7/F,KAAKohD,UAAUjD,QAAQC,UAAUpvC,SAAWhP,KAAKohD,UAAUjD,QAAQC,UAAUpvC,QAC7EhP,KAAKmqE,2BACLnqE,KAAKwkD,QAAS,EACdxkD,KAAKkQ,SASPtQ,EAAQuqE,yBAA2B,WAEe,GAA5CnqE,KAAKohD,UAAUjD,QAAQC,UAAUpvC,SACnChP,KAAKkqE,YAAYw1B,GACjB1/F,KAAKkqE,YAAYy1B,GAEjB3/F,KAAKohD,UAAUjD,QAAQI,eAAiBv+C,KAAKohD,UAAUjD,QAAQC,UAAUG,eACzEv+C,KAAKohD,UAAUjD,QAAQK,aAAex+C,KAAKohD,UAAUjD,QAAQC,UAAUI,aACvEx+C,KAAKohD,UAAUjD,QAAQM,eAAiBz+C,KAAKohD,UAAUjD,QAAQC,UAAUK,eACzEz+C,KAAKohD,UAAUjD,QAAQO,QAAU1+C,KAAKohD,UAAUjD,QAAQC,UAAUM,QAElE1+C,KAAK+pE,WAAW61B,IAE+C,GAAxD5/F,KAAKohD,UAAUjD,QAAQU,sBAAsB7vC,SACpDhP,KAAKkqE,YAAY01B,GACjB5/F,KAAKkqE,YAAYw1B,GAEjB1/F,KAAKohD,UAAUjD,QAAQI,eAAiBv+C,KAAKohD,UAAUjD,QAAQU,sBAAsBN,eACrFv+C,KAAKohD,UAAUjD,QAAQK,aAAex+C,KAAKohD,UAAUjD,QAAQU,sBAAsBL,aACnFx+C,KAAKohD,UAAUjD,QAAQM,eAAiBz+C,KAAKohD,UAAUjD,QAAQU,sBAAsBJ,eACrFz+C,KAAKohD,UAAUjD,QAAQO,QAAU1+C,KAAKohD,UAAUjD,QAAQU,sBAAsBH,QAE9E1+C,KAAK+pE,WAAW41B,KAGhB3/F,KAAKkqE,YAAY01B,GACjB5/F,KAAKkqE,YAAYy1B,GACjB3/F,KAAK8/F,cAAgBv5F,OAErBvG,KAAKohD,UAAUjD,QAAQI,eAAiBv+C,KAAKohD,UAAUjD,QAAQQ,UAAUJ,eACzEv+C,KAAKohD,UAAUjD,QAAQK,aAAex+C,KAAKohD,UAAUjD,QAAQQ,UAAUH,aACvEx+C,KAAKohD,UAAUjD,QAAQM,eAAiBz+C,KAAKohD,UAAUjD,QAAQQ,UAAUF,eACzEz+C,KAAKohD,UAAUjD,QAAQO,QAAU1+C,KAAKohD,UAAUjD,QAAQQ,UAAUD,QAElE1+C,KAAK+pE,WAAW21B,KAUpB9/F,EAAQmgG,4BAA8B,WAEL,GAA3B//F,KAAKwjD,YAAY99C,OACnB1F,KAAK68C,MAAM78C,KAAKwjD,YAAY,IAAIsY,UAAU,EAAG,IAIzC97D,KAAKwjD,YAAY99C,OAAS1F,KAAKohD,UAAUtC,WAAWE,kBAAyD,GAArCh/C,KAAKohD,UAAUtC,WAAW9vC,SACpGhP,KAAK8xF,aAAa9xF,KAAKohD,UAAUtC,WAAWG,eAAe,GAI7Dj/C,KAAKggG,qBAUTpgG,EAAQogG,iBAAmB,WAKzBhgG,KAAKigG,gCACLjgG,KAAKkgG,uBAEDlgG,KAAKohD,UAAUjD,QAAQM,eAAiB,IACC,GAAvCz+C,KAAKohD,UAAUX,aAAazxC,SAA0D,GAAvChP,KAAKohD,UAAUX,aAAaC,QAC7E1gD,KAAKmgG,oCAGuD,GAAxDngG,KAAKohD,UAAUjD,QAAQU,sBAAsB7vC,QAC/ChP,KAAKogG,qCAGLpgG,KAAKqgG,2BAebzgG,EAAQwtD,wBAA0B,WAChC,GAA2C,GAAvCptD,KAAKohD,UAAUX,aAAazxC,SAA0D,GAAvChP,KAAKohD,UAAUX,aAAaC,QAAiB,CAC9F1gD,KAAKsjD,oBACLtjD,KAAKujD,yBAEL,KAAK,GAAImC,KAAU1lD,MAAK68C,MAClB78C,KAAK68C,MAAMh3C,eAAe6/C,KAC5B1lD,KAAKsjD,iBAAiBoC,GAAU1lD,KAAK68C,MAAM6I,GAG/C,IAAI02C,GAAep8F,KAAKiuD,QAAiB,QAAS,KAClD,KAAK,GAAIqyC,KAAiBlE,GACpBA,EAAav2F,eAAey6F,KAC1BtgG,KAAK09C,MAAM73C,eAAeu2F,EAAakE,GAAervC,cACxDjxD,KAAKsjD,iBAAiBg9C,GAAiBlE,EAAakE,GAGpDlE,EAAakE,GAAexkC,UAAU,EAAG,GAK/C,KAAK,GAAItV,KAAOxmD,MAAKsjD,iBACftjD,KAAKsjD,iBAAiBz9C,eAAe2gD,IACvCxmD,KAAKujD,uBAAuBr7C,KAAKs+C,OAKrCxmD,MAAKsjD,iBAAmBtjD,KAAK68C,MAC7B78C,KAAKujD,uBAAyBvjD,KAAKwjD,aAUvC5jD,EAAQqgG,8BAAgC,WACtC,GAAI9gF,GAAIC,EAAI8G,EAAUm/B,EAAM9/C,EACxBs3C,EAAQ78C,KAAKsjD,iBACbi9C,EAAUvgG,KAAKohD,UAAUjD,QAAQI,eACjCiiD,EAAe,CAEnB,KAAKj7F,EAAI,EAAGA,EAAIvF,KAAKujD,uBAAuB79C,OAAQH,IAClD8/C,EAAOxI,EAAM78C,KAAKujD,uBAAuBh+C,IACzC8/C,EAAK3G,QAAU1+C,KAAKohD,UAAUjD,QAAQO,QAEhB,WAAlB1+C,KAAKyyF,WAAqC,GAAX8N,GACjCphF,GAAMkmC,EAAKhzC,EACX+M,GAAMimC,EAAK/yC,EACX4T,EAAWjhB,KAAKirB,KAAK/Q,EAAKA,EAAKC,EAAKA,GAEpCohF,EAA4B,GAAZt6E,EAAiB,EAAKq6E,EAAUr6E,EAChDm/B,EAAK+T,GAAKj6C,EAAKqhF,EACfn7C,EAAKgU,GAAKj6C,EAAKohF,IAGfn7C,EAAK+T,GAAK,EACV/T,EAAKgU,GAAK,IAahBz5D,EAAQygG,uBAAyB,WAC/B,GAAII,GAAYh0C,EAAMP,EAClB/sC,EAAIC,EAAIg6C,EAAIC,EAAIqnC,EAAax6E,EAC7Bw3B,EAAQ19C,KAAK09C,KAGjB,KAAKwO,IAAUxO,GACTA,EAAM73C,eAAeqmD,KACvBO,EAAO/O,EAAMwO,GACTO,EAAKC,WAEH1sD,KAAK68C,MAAMh3C,eAAe4mD,EAAKkG,OAAS3yD,KAAK68C,MAAMh3C,eAAe4mD,EAAKiG,UACzE+tC,EAAah0C,EAAKtO,QAAQK,aAE1BiiD,IAAeh0C,EAAK7iC,GAAGqwC,YAAcxN,EAAK9iC,KAAKswC,YAAc,GAAKj6D,KAAKohD,UAAUtC,WAAWY,WAE5FvgC,EAAMstC,EAAK9iC,KAAKtX,EAAIo6C,EAAK7iC,GAAGvX,EAC5B+M,EAAMqtC,EAAK9iC,KAAKrX,EAAIm6C,EAAK7iC,GAAGtX,EAC5B4T,EAAWjhB,KAAKirB,KAAK/Q,EAAKA,EAAKC,EAAKA,GAEpB,GAAZ8G,IACFA,EAAW,KAIbw6E,EAAc1gG,KAAKohD,UAAUjD,QAAQM,gBAAkBgiD,EAAav6E,GAAYA,EAEhFkzC,EAAKj6C,EAAKuhF,EACVrnC,EAAKj6C,EAAKshF,EAEVj0C,EAAK9iC,KAAKyvC,IAAMA,EAChB3M,EAAK9iC,KAAK0vC,IAAMA,EAChB5M,EAAK7iC,GAAGwvC,IAAMA,EACd3M,EAAK7iC,GAAGyvC,IAAMA,KAexBz5D,EAAQugG,kCAAoC,WAC1C,GAAIM,GAAYh0C,EAAMP,EAAQy0C,EAC1BjjD,EAAQ19C,KAAK09C,KAGjB,KAAKwO,IAAUxO,GACb,GAAIA,EAAM73C,eAAeqmD,KACvBO,EAAO/O,EAAMwO,GACTO,EAAKC,WAEH1sD,KAAK68C,MAAMh3C,eAAe4mD,EAAKkG,OAAS3yD,KAAK68C,MAAMh3C,eAAe4mD,EAAKiG,SACzD,MAAZjG,EAAKuB,KAAa,CACpB,GAAI4yC,GAAQn0C,EAAK7iC,GACbi3E,EAAQp0C,EAAKuB,IACb8yC,EAAQr0C,EAAK9iC,IAEjB82E,GAAah0C,EAAKtO,QAAQK,aAE1BmiD,EAAsBC,EAAM3mC,YAAc6mC,EAAM7mC,YAAc,EAG9DwmC,GAAcE,EAAsB3gG,KAAKohD,UAAUtC,WAAWY,WAC9D1/C,KAAK+gG,sBAAsBH,EAAOC,EAAO,GAAMJ,GAC/CzgG,KAAK+gG,sBAAsBF,EAAOC,EAAO,GAAML,KAiB3D7gG,EAAQmhG,sBAAwB,SAAUH,EAAOC,EAAOJ,GACtD,GAAIthF,GAAIC,EAAIg6C,EAAIC,EAAIqnC,EAAax6E,CAEjC/G,GAAMyhF,EAAMvuF,EAAIwuF,EAAMxuF,EACtB+M,EAAMwhF,EAAMtuF,EAAIuuF,EAAMvuF,EACtB4T,EAAWjhB,KAAKirB,KAAK/Q,EAAKA,EAAKC,EAAKA,GAEpB,GAAZ8G,IACFA,EAAW,KAIbw6E,EAAc1gG,KAAKohD,UAAUjD,QAAQM,gBAAkBgiD,EAAav6E,GAAYA,EAEhFkzC,EAAKj6C,EAAKuhF,EACVrnC,EAAKj6C,EAAKshF,EAEVE,EAAMxnC,IAAMA,EACZwnC,EAAMvnC,IAAMA,EACZwnC,EAAMznC,IAAMA,EACZynC,EAAMxnC,IAAMA,GAQdz5D,EAAQwqE,0BAA4B,WAClC,GAAkC7jE,SAA9BvG,KAAKghG,qBAAoC,CAC3ChhG,KAAK++F,mBACLp+F,EAAK6F,WAAWxG,KAAK++F,gBAAgB/+F,KAAKohD,UAE1C,IAAI6/C,IAAgC,KAAM,KAAM,KAAM,KACtDjhG,MAAKghG,qBAAuBnvF,SAASM,cAAc,OACnDnS,KAAKghG,qBAAqBj5F,UAAY,uBACtC/H,KAAKghG,qBAAqBx8E,UAAY,onBAW2E,GAAKxkB,KAAKohD,UAAUjD,QAAQC,UAAUE,sBAAyB,wGAA2G,GAAKt+C,KAAKohD,UAAUjD,QAAQC,UAAUE,sBAAyB,4JAGpPt+C,KAAKohD,UAAUjD,QAAQC,UAAUG,eAAiB,wFAA0Fv+C,KAAKohD,UAAUjD,QAAQC,UAAUG,eAAiB,2JAG/Lv+C,KAAKohD,UAAUjD,QAAQC,UAAUI,aAAe,sFAAwFx+C,KAAKohD,UAAUjD,QAAQC,UAAUI,aAAe,6JAGtLx+C,KAAKohD,UAAUjD,QAAQC,UAAUK,eAAiB,0FAA4Fz+C,KAAKohD,UAAUjD,QAAQC,UAAUK,eAAiB,sJAGvMz+C,KAAKohD,UAAUjD,QAAQC,UAAUM,QAAU,4FAA8F1+C,KAAKohD,UAAUjD,QAAQC,UAAUM,QAAU,sPAM/K1+C,KAAKohD,UAAUjD,QAAQQ,UAAUC,aAAe,kGAAoG5+C,KAAKohD,UAAUjD,QAAQQ,UAAUC,aAAe,2JAGnM5+C,KAAKohD,UAAUjD,QAAQQ,UAAUJ,eAAiB,uFAAyFv+C,KAAKohD,UAAUjD,QAAQQ,UAAUJ,eAAiB,0JAG9Lv+C,KAAKohD,UAAUjD,QAAQQ,UAAUH,aAAe,qFAAuFx+C,KAAKohD,UAAUjD,QAAQQ,UAAUH,aAAe,4JAGrLx+C,KAAKohD,UAAUjD,QAAQQ,UAAUF,eAAiB,yFAA2Fz+C,KAAKohD,UAAUjD,QAAQQ,UAAUF,eAAiB,qJAGtMz+C,KAAKohD,UAAUjD,QAAQQ,UAAUD,QAAU,2FAA6F1+C,KAAKohD,UAAUjD,QAAQQ,UAAUD,QAAU,oQAM9K1+C,KAAKohD,UAAUjD,QAAQU,sBAAsBD,aAAe,kGAAoG5+C,KAAKohD,UAAUjD,QAAQU,sBAAsBD,aAAe,2JAG3N5+C,KAAKohD,UAAUjD,QAAQU,sBAAsBN,eAAiB,uFAAyFv+C,KAAKohD,UAAUjD,QAAQU,sBAAsBN,eAAiB,0JAGtNv+C,KAAKohD,UAAUjD,QAAQU,sBAAsBL,aAAe,qFAAuFx+C,KAAKohD,UAAUjD,QAAQU,sBAAsBL,aAAe,4JAG7Mx+C,KAAKohD,UAAUjD,QAAQU,sBAAsBJ,eAAiB,yFAA2Fz+C,KAAKohD,UAAUjD,QAAQU,sBAAsBJ,eAAiB,qJAG9Nz+C,KAAKohD,UAAUjD,QAAQU,sBAAsBH,QAAU,2FAA6F1+C,KAAKohD,UAAUjD,QAAQU,sBAAsBH,QAAU,uJAG3MuiD,EAA6Bv6F,QAAQ1G,KAAKohD,UAAUhB,mBAAmB5kB,WAAa,0FAA4Fx7B,KAAKohD,UAAUhB,mBAAmB5kB,UAAY,oKAGtNx7B,KAAKohD,UAAUhB,mBAAmBC,gBAAkB,yFAA2FrgD,KAAKohD,UAAUhB,mBAAmBC,gBAAkB,6JAGvMrgD,KAAKohD,UAAUhB,mBAAmBE,YAAc,wFAA0FtgD,KAAKohD,UAAUhB,mBAAmBE,YAAc,odAU9RtgD,KAAKga,iBAAiBknF,cAAchvF,aAAalS,KAAKghG,qBAAsBhhG,KAAKga,kBACjFha,KAAKg/F,WAAantF,SAASM,cAAc,OACzCnS,KAAKg/F,WAAWxxF,MAAM4vC,SAAW,OACjCp9C,KAAKg/F,WAAWxxF,MAAMiwD,WAAa,UACnCz9D,KAAKga,iBAAiBknF,cAAchvF,aAAalS,KAAKg/F,WAAYh/F,KAAKga,iBAEvE,IAAImnF,EACJA,GAAetvF,SAAS0sF,eAAe,eACvC4C,EAAa/3E,SAAWq1E,EAAiBppE,KAAKr1B,KAAM,cAAe,GAAI,2CACvEmhG,EAAetvF,SAAS0sF,eAAe,eACvC4C,EAAa/3E,SAAWq1E,EAAiBppE,KAAKr1B,KAAM,cAAe,EAAG,0BACtEmhG,EAAetvF,SAAS0sF,eAAe,eACvC4C,EAAa/3E,SAAWq1E,EAAiBppE,KAAKr1B,KAAM,cAAe,EAAG,0BACtEmhG,EAAetvF,SAAS0sF,eAAe,eACvC4C,EAAa/3E,SAAWq1E,EAAiBppE,KAAKr1B,KAAM,cAAe,EAAG,wBACtEmhG,EAAetvF,SAAS0sF,eAAe,iBACvC4C,EAAa/3E,SAAWq1E,EAAiBppE,KAAKr1B,KAAM,gBAAiB,EAAG,mBAExEmhG,EAAetvF,SAAS0sF,eAAe,cACvC4C,EAAa/3E,SAAWq1E,EAAiBppE,KAAKr1B,KAAM,aAAc,EAAG,kCACrEmhG,EAAetvF,SAAS0sF,eAAe,cACvC4C,EAAa/3E,SAAWq1E,EAAiBppE,KAAKr1B,KAAM,aAAc,EAAG,0BACrEmhG,EAAetvF,SAAS0sF,eAAe,cACvC4C,EAAa/3E,SAAWq1E,EAAiBppE,KAAKr1B,KAAM,aAAc,EAAG,0BACrEmhG,EAAetvF,SAAS0sF,eAAe,cACvC4C,EAAa/3E,SAAWq1E,EAAiBppE,KAAKr1B,KAAM,aAAc,EAAG,wBACrEmhG,EAAetvF,SAAS0sF,eAAe,gBACvC4C,EAAa/3E,SAAWq1E,EAAiBppE,KAAKr1B,KAAM,eAAgB,EAAG,mBAEvEmhG,EAAetvF,SAAS0sF,eAAe,cACvC4C,EAAa/3E,SAAWq1E,EAAiBppE,KAAKr1B,KAAM,aAAc,EAAG,8CACrEmhG,EAAetvF,SAAS0sF,eAAe,cACvC4C,EAAa/3E,SAAWq1E,EAAiBppE,KAAKr1B,KAAM,aAAc,EAAG,0BACrEmhG,EAAetvF,SAAS0sF,eAAe,cACvC4C,EAAa/3E,SAAWq1E,EAAiBppE,KAAKr1B,KAAM,aAAc,EAAG,0BACrEmhG,EAAetvF,SAAS0sF,eAAe,cACvC4C,EAAa/3E,SAAWq1E,EAAiBppE,KAAKr1B,KAAM,aAAc,EAAG,wBACrEmhG,EAAetvF,SAAS0sF,eAAe,gBACvC4C,EAAa/3E,SAAWq1E,EAAiBppE,KAAKr1B,KAAM,eAAgB,EAAG,mBACvEmhG,EAAetvF,SAAS0sF,eAAe,qBACvC4C,EAAa/3E,SAAWq1E,EAAiBppE,KAAKr1B,KAAM,oBAAqBihG,EAA8B,gCACvGE,EAAetvF,SAAS0sF,eAAe,kBACvC4C,EAAa/3E,SAAWq1E,EAAiBppE,KAAKr1B,KAAM,iBAAkB,EAAG,sCACzEmhG,EAAetvF,SAAS0sF,eAAe,iBACvC4C,EAAa/3E,SAAWq1E,EAAiBppE,KAAKr1B,KAAM,gBAAiB,EAAG,iCAExE,IAAI4+F,GAAe/sF,SAAS0sF,eAAe,wBACvCM,EAAehtF,SAAS0sF,eAAe,wBACvC6C,EAAevvF,SAAS0sF,eAAe,uBAC3CM,GAAaC,SAAU,EACnB9+F,KAAKohD,UAAUjD,QAAQC,UAAUpvC,UACnC4vF,EAAaE,SAAU,GAErB9+F,KAAKohD,UAAUhB,mBAAmBpxC,UACpCoyF,EAAatC,SAAU,EAGzB,IAAIR,GAAqBzsF,SAAS0sF,eAAe,sBAC7C8C,EAAwBxvF,SAAS0sF,eAAe,yBAChD+C,EAAwBzvF,SAAS0sF,eAAe,wBAEpDD,GAAmB/rE,QAAU8rE,EAAwBhpE,KAAKr1B,MAC1DqhG,EAAsB9uE,QAAUisE,EAAqBnpE,KAAKr1B,MAC1DshG,EAAsB/uE,QAAUmsE,EAAqBrpE,KAAKr1B,MAExDs+F,EAAmB9wF,MAAM1B,WADQ,GAA/B9L,KAAKohD,UAAUX,cAA8D,GAAtCzgD,KAAKohD,UAAUmgD,oBAClB,UAGA,UAIxCtC,EAAqB3mF,MAAMtY,MAE3B4+F,EAAax1E,SAAW61E,EAAqB5pE,KAAKr1B,MAClD6+F,EAAaz1E,SAAW61E,EAAqB5pE,KAAKr1B,MAClDohG,EAAah4E,SAAW61E,EAAqB5pE,KAAKr1B,QAWtDJ,EAAQ6/F,yBAA2B,SAAUH,EAAuBl4F,GAClE,GAAIo6F,GAAYlC,EAAsBr3F,MAAM,IACpB,IAApBu5F,EAAU97F,OACZ1F,KAAKohD,UAAUogD,EAAU,IAAMp6F,EAEJ,GAApBo6F,EAAU97F,OACjB1F,KAAKohD,UAAUogD,EAAU,IAAIA,EAAU,IAAMp6F,EAElB,GAApBo6F,EAAU97F,SACjB1F,KAAKohD,UAAUogD,EAAU,IAAIA,EAAU,IAAIA,EAAU,IAAMp6F,KA2N3D,SAASvH,GAEb,QAAS4hG,GAAeC,GACvB,KAAM,IAAI99F,OAAM,uBAAyB89F,EAAM,MAEhDD,EAAe9zF,KAAO,WAAa,UACnC8zF,EAAeE,QAAUF,EACzB5hG,EAAOD,QAAU6hG,EACjBA,EAAephG,GAAK,IAKhB,SAASR,EAAQD,GAQrBA,EAAQsgG,qBAAuB,WAC7B,GAAI/gF,GAAIC,EAAW8G,EAAUkzC,EAAIC,EAAIsnC,EACnCiB,EAAgBhB,EAAOC,EAAOt7F,EAAG6mB,EAE/BywB,EAAQ78C,KAAKsjD,iBACbE,EAAcxjD,KAAKujD,uBAGnBs+C,EAAS,GAAK,EACd17F,EAAI,EAAI,EAGRy4C,EAAe5+C,KAAKohD,UAAUjD,QAAQQ,UAAUC,aAChDkjD,EAAkBljD,CAItB,KAAKr5C,EAAI,EAAGA,EAAIi+C,EAAY99C,OAAS,EAAGH,IAEtC,IADAq7F,EAAQ/jD,EAAM2G,EAAYj+C,IACrB6mB,EAAI7mB,EAAI,EAAG6mB,EAAIo3B,EAAY99C,OAAQ0mB,IAAK,CAC3Cy0E,EAAQhkD,EAAM2G,EAAYp3B,IAC1Bu0E,EAAsBC,EAAM3mC,YAAc4mC,EAAM5mC,YAAc,EAE9D96C,EAAK0hF,EAAMxuF,EAAIuuF,EAAMvuF,EACrB+M,EAAKyhF,EAAMvuF,EAAIsuF,EAAMtuF,EACrB4T,EAAWjhB,KAAKirB,KAAK/Q,EAAKA,EAAKC,EAAKA,GAEpC0iF,EAA0C,GAAvBnB,EAA4B/hD,EAAgBA,GAAgB,EAAI+hD,EAAsB3gG,KAAKohD,UAAUtC,WAAWW,sBACnI,IAAIn6C,GAAIu8F,EAASC,CACF,GAAIA,EAAf57E,IAEA07E,EADa,GAAME,EAAjB57E,EACe,EAGA5gB,EAAI4gB,EAAW/f,EAIlCy7F,GAA0C,GAAvBjB,EAA4B,EAAI,EAAIA,EAAsB3gG,KAAKohD,UAAUtC,WAAWU,mBACvGoiD,GAAkC17E,EAElCkzC,EAAKj6C,EAAKyiF,EACVvoC,EAAKj6C,EAAKwiF,EAEVhB,EAAMxnC,IAAMA,EACZwnC,EAAMvnC,IAAMA,EACZwnC,EAAMznC,IAAMA,EACZynC,EAAMxnC,IAAMA,MAShB,SAASx5D,EAAQD,GAQrBA,EAAQsgG,qBAAuB,WAC7B,GAAI/gF,GAAIC,EAAI8G,EAAUkzC,EAAIC,EACxBuoC,EAAgBhB,EAAOC,EAAOt7F,EAAG6mB,EAE/BywB,EAAQ78C,KAAKsjD,iBACbE,EAAcxjD,KAAKujD,uBAGnB3E,EAAe5+C,KAAKohD,UAAUjD,QAAQU,sBAAsBD,YAIhE,KAAKr5C,EAAI,EAAGA,EAAIi+C,EAAY99C,OAAS,EAAGH,IAEtC,IADAq7F,EAAQ/jD,EAAM2G,EAAYj+C,IACrB6mB,EAAI7mB,EAAI,EAAG6mB,EAAIo3B,EAAY99C,OAAQ0mB,IAItC,GAHAy0E,EAAQhkD,EAAM2G,EAAYp3B,IAGtBw0E,EAAMrjD,OAASsjD,EAAMtjD,MAAO,CAE9Bp+B,EAAK0hF,EAAMxuF,EAAIuuF,EAAMvuF,EACrB+M,EAAKyhF,EAAMvuF,EAAIsuF,EAAMtuF,EACrB4T,EAAWjhB,KAAKirB,KAAK/Q,EAAKA,EAAKC,EAAKA,EAGpC,IAAI2iF,GAAY,GAEdH,GADahjD,EAAX14B,GACgBjhB,KAAKovB,IAAI0tE,EAAU77E,EAAS,GAAKjhB,KAAKovB,IAAI0tE,EAAUnjD,EAAa,GAGlE,EAGD,GAAZ14B,EACFA,EAAW,IAGX07E,GAAkC17E,EAEpCkzC,EAAKj6C,EAAKyiF,EACVvoC,EAAKj6C,EAAKwiF,EAEVhB,EAAMxnC,IAAMA,EACZwnC,EAAMvnC,IAAMA,EACZwnC,EAAMznC,IAAMA,EACZynC,EAAMxnC,IAAMA,IAYtBz5D,EAAQwgG,mCAAqC,WAS3C,IAAK,GARDK,GAAYh0C,EAAMP,EAClB/sC,EAAIC,EAAIg6C,EAAIC,EAAIqnC,EAAax6E,EAC7Bw3B,EAAQ19C,KAAK09C,MAEbb,EAAQ78C,KAAKsjD,iBACbE,EAAcxjD,KAAKujD,uBAGdh+C,EAAI,EAAGA,EAAIi+C,EAAY99C,OAAQH,IAAK,CAC3C,GAAIq7F,GAAQ/jD,EAAM2G,EAAYj+C,GAC9Bq7F,GAAMoB,SAAW,EACjBpB,EAAMqB,SAAW,EAKnB,IAAK/1C,IAAUxO,GACb,GAAIA,EAAM73C,eAAeqmD,KACvBO,EAAO/O,EAAMwO,GACTO,EAAKC,WAEH1sD,KAAK68C,MAAMh3C,eAAe4mD,EAAKkG,OAAS3yD,KAAK68C,MAAMh3C,eAAe4mD,EAAKiG,SAqBzE,GApBA+tC,EAAah0C,EAAKtO,QAAQK,aAE1BiiD,IAAeh0C,EAAK7iC,GAAGqwC,YAAcxN,EAAK9iC,KAAKswC,YAAc,GAAKj6D,KAAKohD,UAAUtC,WAAWY,WAE5FvgC,EAAMstC,EAAK9iC,KAAKtX,EAAIo6C,EAAK7iC,GAAGvX,EAC5B+M,EAAMqtC,EAAK9iC,KAAKrX,EAAIm6C,EAAK7iC,GAAGtX,EAC5B4T,EAAWjhB,KAAKirB,KAAK/Q,EAAKA,EAAKC,EAAKA,GAEpB,GAAZ8G,IACFA,EAAW,KAIbw6E,EAAc1gG,KAAKohD,UAAUjD,QAAQM,gBAAkBgiD,EAAav6E,GAAYA,EAEhFkzC,EAAKj6C,EAAKuhF,EACVrnC,EAAKj6C,EAAKshF,EAINj0C,EAAK7iC,GAAG2zB,OAASkP,EAAK9iC,KAAK4zB,MAC7BkP,EAAK7iC,GAAGo4E,UAAY5oC,EACpB3M,EAAK7iC,GAAGq4E,UAAY5oC,EACpB5M,EAAK9iC,KAAKq4E,UAAY5oC,EACtB3M,EAAK9iC,KAAKs4E,UAAY5oC,MAEnB,CACH,GAAIpT,GAAS,EACbwG,GAAK7iC,GAAGwvC,IAAMnT,EAAOmT,EACrB3M,EAAK7iC,GAAGyvC,IAAMpT,EAAOoT,EACrB5M,EAAK9iC,KAAKyvC,IAAMnT,EAAOmT,EACvB3M,EAAK9iC,KAAK0vC,IAAMpT,EAAOoT,EAQjC,GACI2oC,GAAUC,EADVvB,EAAc,CAElB,KAAKn7F,EAAI,EAAGA,EAAIi+C,EAAY99C,OAAQH,IAAK,CACvC,GAAI8/C,GAAOxI,EAAM2G,EAAYj+C,GAC7By8F,GAAW/8F,KAAKwG,IAAIi1F,EAAYz7F,KAAKiI,KAAKwzF,EAAYr7C,EAAK28C,WAC3DC,EAAWh9F,KAAKwG,IAAIi1F,EAAYz7F,KAAKiI,KAAKwzF,EAAYr7C,EAAK48C,WAE3D58C,EAAK+T,IAAM4oC,EACX38C,EAAKgU,IAAM4oC;CAIb,GAAIC,GAAU,EACVC,EAAU,CACd,KAAK58F,EAAI,EAAGA,EAAIi+C,EAAY99C,OAAQH,IAAK,CACvC,GAAI8/C,GAAOxI,EAAM2G,EAAYj+C,GAC7B28F,IAAW78C,EAAK+T,GAChB+oC,GAAW98C,EAAKgU,GAElB,GAAI+oC,GAAeF,EAAU1+C,EAAY99C,OACrC28F,EAAeF,EAAU3+C,EAAY99C,MAEzC,KAAKH,EAAI,EAAGA,EAAIi+C,EAAY99C,OAAQH,IAAK,CACvC,GAAI8/C,GAAOxI,EAAM2G,EAAYj+C,GAC7B8/C,GAAK+T,IAAMgpC,EACX/8C,EAAKgU,IAAMgpC,KAOX,SAASxiG,EAAQD,GAQrBA,EAAQsgG,qBAAuB,WAC7B,GAA8D,GAA1DlgG,KAAKohD,UAAUjD,QAAQC,UAAUE,sBAA4B,CAC/D,GAAI+G,GACAxI,EAAQ78C,KAAKsjD,iBACbE,EAAcxjD,KAAKujD,uBACnB++C,EAAY9+C,EAAY99C,MAE5B1F,MAAKuiG,mBAAmB1lD,EAAM2G,EAK9B,KAAK,GAHDs8C,GAAgB9/F,KAAK8/F,cAGhBv6F,EAAI,EAAO+8F,EAAJ/8F,EAAeA,IAC7B8/C,EAAOxI,EAAM2G,EAAYj+C,IACrB8/C,EAAKt2C,QAAQ+tC,KAAO,IAEtB98C,KAAKwiG,sBAAsB1C,EAAcpgG,KAAK+iG,SAASC,GAAGr9C,GAC1DrlD,KAAKwiG,sBAAsB1C,EAAcpgG,KAAK+iG,SAASE,GAAGt9C,GAC1DrlD,KAAKwiG,sBAAsB1C,EAAcpgG,KAAK+iG,SAASG,GAAGv9C,GAC1DrlD,KAAKwiG,sBAAsB1C,EAAcpgG,KAAK+iG,SAASI,GAAGx9C,MAelEzlD,EAAQ4iG,sBAAwB,SAASM,EAAaz9C,GAEpD,GAAIy9C,EAAaC,cAAgB,EAAG,CAClC,GAAI5jF,GAAGC,EAAG8G,CAUV,IAPA/G,EAAK2jF,EAAaE,aAAa3wF,EAAIgzC,EAAKhzC,EACxC+M,EAAK0jF,EAAaE,aAAa1wF,EAAI+yC,EAAK/yC,EACxC4T,EAAWjhB,KAAKirB,KAAK/Q,EAAKA,EAAKC,EAAKA,GAKhC8G,EAAW48E,EAAaG,SAAWjjG,KAAKohD,UAAUjD,QAAQC,UAAUC,MAAO,CAE7D,GAAZn4B,IACFA,EAAW,GAAIjhB,KAAKE,SACpBga,EAAK+G,EAEP,IAAIs6E,GAAexgG,KAAKohD,UAAUjD,QAAQC,UAAUE,sBAAwBwkD,EAAahmD,KAAOuI,EAAKt2C,QAAQ+tC,MAAQ52B,EAAWA,EAAWA,GACvIkzC,EAAKj6C,EAAKqhF,EACVnnC,EAAKj6C,EAAKohF,CACdn7C,GAAK+T,IAAMA,EACX/T,EAAKgU,IAAMA,MAIX,IAAkC,GAA9BypC,EAAaC,cACf/iG,KAAKwiG,sBAAsBM,EAAaL,SAASC,GAAGr9C,GACpDrlD,KAAKwiG,sBAAsBM,EAAaL,SAASE,GAAGt9C,GACpDrlD,KAAKwiG,sBAAsBM,EAAaL,SAASG,GAAGv9C,GACpDrlD,KAAKwiG,sBAAsBM,EAAaL,SAASI,GAAGx9C,OAGpD,IAAIy9C,EAAaL,SAASzvF,KAAK3S,IAAMglD,EAAKhlD,GAAI,CAE5B,GAAZ6lB,IACFA,EAAW,GAAIjhB,KAAKE,SACpBga,EAAK+G,EAEP,IAAIs6E,GAAexgG,KAAKohD,UAAUjD,QAAQC,UAAUE,sBAAwBwkD,EAAahmD,KAAOuI,EAAKt2C,QAAQ+tC,MAAQ52B,EAAWA,EAAWA,GACvIkzC,EAAKj6C,EAAKqhF,EACVnnC,EAAKj6C,EAAKohF,CACdn7C,GAAK+T,IAAMA,EACX/T,EAAKgU,IAAMA,KAcrBz5D,EAAQ2iG,mBAAqB,SAAS1lD,EAAM2G,GAU1C,IAAK,GATD6B,GACAi9C,EAAY9+C,EAAY99C,OAExB8/C,EAAOvhD,OAAOi/F,UAChB59C,EAAOrhD,OAAOi/F,UACdz9C,GAAOxhD,OAAOi/F,UACd39C,GAAOthD,OAAOi/F,UAGP39F,EAAI,EAAO+8F,EAAJ/8F,EAAeA,IAAK,CAClC,GAAI8M,GAAIwqC,EAAM2G,EAAYj+C,IAAI8M,EAC1BC,EAAIuqC,EAAM2G,EAAYj+C,IAAI+M,CAC1BuqC,GAAM2G,EAAYj+C,IAAIwJ,QAAQ+tC,KAAO,IAC/B0I,EAAJnzC,IAAYmzC,EAAOnzC,GACnBA,EAAIozC,IAAQA,EAAOpzC,GACfizC,EAAJhzC,IAAYgzC,EAAOhzC,GACnBA,EAAIizC,IAAQA,EAAOjzC,IAI3B,GAAI6wF,GAAWl+F,KAAKmmB,IAAIq6B,EAAOD,GAAQvgD,KAAKmmB,IAAIm6B,EAAOD,EACnD69C,GAAW,GAAI79C,GAAQ,GAAM69C,EAAU59C,GAAQ,GAAM49C,IACtC39C,GAAQ,GAAM29C,EAAU19C,GAAQ,GAAM09C,EAGzD,IAAIC,GAAkB,KAClBC,EAAWp+F,KAAKiI,IAAIk2F,EAAgBn+F,KAAKmmB,IAAIq6B,EAAOD,IACpD89C,EAAe,GAAMD,EACrBE,EAAU,IAAO/9C,EAAOC,GAAO+9C,EAAU,IAAOl+C,EAAOC,GAGvDu6C,GACFpgG,MACEsjG,cAAe3wF,EAAE,EAAGC,EAAE,GACtBwqC,KAAK,EACL9mB,OACEwvB,KAAM+9C,EAAQD,EAAa79C,KAAK89C,EAAQD,EACxCh+C,KAAMk+C,EAAQF,EAAa/9C,KAAKi+C,EAAQF,GAE1C3wF,KAAM0wF,EACNJ,SAAU,EAAII,EACdZ,UAAYzvF,KAAK,MACjByoC,SAAU,EACV8B,MAAO,EACPwlD,cAAe,GAMnB,KAHA/iG,KAAKyjG,aAAa3D,EAAcpgG,MAG3B6F,EAAI,EAAO+8F,EAAJ/8F,EAAeA,IACzB8/C,EAAOxI,EAAM2G,EAAYj+C,IACrB8/C,EAAKt2C,QAAQ+tC,KAAO,GACtB98C,KAAK0jG,aAAa5D,EAAcpgG,KAAK2lD,EAKzCrlD,MAAK8/F,cAAgBA,GAWvBlgG,EAAQ+jG,kBAAoB,SAASb,EAAcz9C,GACjD,GAAIu+C,GAAYd,EAAahmD,KAAOuI,EAAKt2C,QAAQ+tC,KAC7C+mD,EAAe,EAAED,CAErBd,GAAaE,aAAa3wF,EAAIywF,EAAaE,aAAa3wF,EAAIywF,EAAahmD,KAAOuI,EAAKhzC,EAAIgzC,EAAKt2C,QAAQ+tC,KACtGgmD,EAAaE,aAAa3wF,GAAKwxF,EAE/Bf,EAAaE,aAAa1wF,EAAIwwF,EAAaE,aAAa1wF,EAAIwwF,EAAahmD,KAAOuI,EAAK/yC,EAAI+yC,EAAKt2C,QAAQ+tC,KACtGgmD,EAAaE,aAAa1wF,GAAKuxF,EAE/Bf,EAAahmD,KAAO8mD,CACpB,IAAIE,GAAc7+F,KAAKiI,IAAIjI,KAAKiI,IAAIm4C,EAAKvyC,OAAOuyC,EAAKp5B,QAAQo5B,EAAKxyC,MAClEiwF,GAAarnD,SAAYqnD,EAAarnD,SAAWqoD,EAAeA,EAAchB,EAAarnD,UAa7F77C,EAAQ8jG,aAAe,SAASZ,EAAaz9C,EAAK0+C,IAC1B,GAAlBA,GAA6Cx9F,SAAnBw9F,IAE5B/jG,KAAK2jG,kBAAkBb,EAAaz9C,GAGlCy9C,EAAaL,SAASC,GAAG1sE,MAAMyvB,KAAOJ,EAAKhzC,EACzCywF,EAAaL,SAASC,GAAG1sE,MAAMuvB,KAAOF,EAAK/yC,EAC7CtS,KAAKgkG,eAAelB,EAAaz9C,EAAK,MAGtCrlD,KAAKgkG,eAAelB,EAAaz9C,EAAK,MAIpCy9C,EAAaL,SAASC,GAAG1sE,MAAMuvB,KAAOF,EAAK/yC,EAC7CtS,KAAKgkG,eAAelB,EAAaz9C,EAAK,MAGtCrlD,KAAKgkG,eAAelB,EAAaz9C,EAAK,OAc5CzlD,EAAQokG,eAAiB,SAASlB,EAAaz9C,EAAK4+C,GAClD,OAAQnB,EAAaL,SAASwB,GAAQlB,eACpC,IAAK,GACHD,EAAaL,SAASwB,GAAQxB,SAASzvF,KAAOqyC,EAC9Cy9C,EAAaL,SAASwB,GAAQlB,cAAgB,EAC9C/iG,KAAK2jG,kBAAkBb,EAAaL,SAASwB,GAAQ5+C,EACrD,MACF,KAAK,GAGCy9C,EAAaL,SAASwB,GAAQxB,SAASzvF,KAAKX,GAAKgzC,EAAKhzC,GACtDywF,EAAaL,SAASwB,GAAQxB,SAASzvF,KAAKV,GAAK+yC,EAAK/yC,GACxD+yC,EAAKhzC,GAAKpN,KAAKE,SACfkgD,EAAK/yC,GAAKrN,KAAKE,WAGfnF,KAAKyjG,aAAaX,EAAaL,SAASwB,IACxCjkG,KAAK0jG,aAAaZ,EAAaL,SAASwB,GAAQ5+C,GAElD,MACF,KAAK,GACHrlD,KAAK0jG,aAAaZ,EAAaL,SAASwB,GAAQ5+C,KAatDzlD,EAAQ6jG,aAAe,SAASX,GAE9B,GAAIoB,GAAgB,IACc,IAA9BpB,EAAaC,gBACfmB,EAAgBpB,EAAaL,SAASzvF,KACtC8vF,EAAahmD,KAAO,EAAGgmD,EAAaE,aAAa3wF,EAAI,EAAGywF,EAAaE,aAAa1wF,EAAI,GAExFwwF,EAAaC,cAAgB,EAC7BD,EAAaL,SAASzvF,KAAO,KAC7BhT,KAAKmkG,cAAcrB,EAAa,MAChC9iG,KAAKmkG,cAAcrB,EAAa,MAChC9iG,KAAKmkG,cAAcrB,EAAa,MAChC9iG,KAAKmkG,cAAcrB,EAAa,MAEX,MAAjBoB,GACFlkG,KAAK0jG,aAAaZ,EAAaoB,IAenCtkG,EAAQukG,cAAgB,SAASrB,EAAcmB,GAC7C,GAAIz+C,GAAKC,EAAKH,EAAKC,EACf6+C,EAAY,GAAMtB,EAAanwF,IACnC,QAAQsxF,GACN,IAAK,KACHz+C,EAAOs9C,EAAa9sE,MAAMwvB,KAC1BC,EAAOq9C,EAAa9sE,MAAMwvB,KAAO4+C,EACjC9+C,EAAOw9C,EAAa9sE,MAAMsvB,KAC1BC,EAAOu9C,EAAa9sE,MAAMsvB,KAAO8+C,CACjC,MACF,KAAK,KACH5+C,EAAOs9C,EAAa9sE,MAAMwvB,KAAO4+C,EACjC3+C,EAAOq9C,EAAa9sE,MAAMyvB,KAC1BH,EAAOw9C,EAAa9sE,MAAMsvB,KAC1BC,EAAOu9C,EAAa9sE,MAAMsvB,KAAO8+C,CACjC,MACF,KAAK,KACH5+C,EAAOs9C,EAAa9sE,MAAMwvB,KAC1BC,EAAOq9C,EAAa9sE,MAAMwvB,KAAO4+C,EACjC9+C,EAAOw9C,EAAa9sE,MAAMsvB,KAAO8+C,EACjC7+C,EAAOu9C,EAAa9sE,MAAMuvB,IAC1B,MACF,KAAK,KACHC,EAAOs9C,EAAa9sE,MAAMwvB,KAAO4+C,EACjC3+C,EAAOq9C,EAAa9sE,MAAMyvB,KAC1BH,EAAOw9C,EAAa9sE,MAAMsvB,KAAO8+C,EACjC7+C,EAAOu9C,EAAa9sE,MAAMuvB,KAK9Bu9C,EAAaL,SAASwB,IACpBjB,cAAc3wF,EAAE,EAAEC,EAAE,GACpBwqC,KAAK,EACL9mB,OAAOwvB,KAAKA,EAAKC,KAAKA,EAAKH,KAAKA,EAAKC,KAAKA,GAC1C5yC,KAAM,GAAMmwF,EAAanwF,KACzBswF,SAAU,EAAIH,EAAaG,SAC3BR,UAAWzvF,KAAK,MAChByoC,SAAU,EACV8B,MAAOulD,EAAavlD,MAAM,EAC1BwlD,cAAe,IAYnBnjG,EAAQykG,UAAY,SAAS/8E,EAAIzc,GACJtE,SAAvBvG,KAAK8/F,gBAEPx4E,EAAIO,UAAY,EAEhB7nB,KAAKskG,YAAYtkG,KAAK8/F,cAAcpgG,KAAK4nB,EAAIzc,KAajDjL,EAAQ0kG,YAAc,SAASC,EAAOj9E,EAAIzc,GAC1BtE,SAAVsE,IACFA,EAAQ,WAGkB,GAAxB05F,EAAOxB,gBACT/iG,KAAKskG,YAAYC,EAAO9B,SAASC,GAAGp7E,GACpCtnB,KAAKskG,YAAYC,EAAO9B,SAASE,GAAGr7E,GACpCtnB,KAAKskG,YAAYC,EAAO9B,SAASI,GAAGv7E,GACpCtnB,KAAKskG,YAAYC,EAAO9B,SAASG,GAAGt7E,IAEtCA,EAAIY,YAAcrd,EAClByc,EAAIa,YACJb,EAAIc,OAAOm8E,EAAOvuE,MAAMwvB,KAAK++C,EAAOvuE,MAAMsvB,MAC1Ch+B,EAAIe,OAAOk8E,EAAOvuE,MAAMyvB,KAAK8+C,EAAOvuE,MAAMsvB,MAC1Ch+B,EAAIlH,SAEJkH,EAAIa,YACJb,EAAIc,OAAOm8E,EAAOvuE,MAAMyvB,KAAK8+C,EAAOvuE,MAAMsvB,MAC1Ch+B,EAAIe,OAAOk8E,EAAOvuE,MAAMyvB,KAAK8+C,EAAOvuE,MAAMuvB,MAC1Cj+B,EAAIlH,SAEJkH,EAAIa,YACJb,EAAIc,OAAOm8E,EAAOvuE,MAAMyvB,KAAK8+C,EAAOvuE,MAAMuvB,MAC1Cj+B,EAAIe,OAAOk8E,EAAOvuE,MAAMwvB,KAAK++C,EAAOvuE,MAAMuvB,MAC1Cj+B,EAAIlH,SAEJkH,EAAIa,YACJb,EAAIc,OAAOm8E,EAAOvuE,MAAMwvB,KAAK++C,EAAOvuE,MAAMuvB,MAC1Cj+B,EAAIe,OAAOk8E,EAAOvuE,MAAMwvB,KAAK++C,EAAOvuE,MAAMsvB,MAC1Ch+B,EAAIlH,WAaF,SAASvgB,GAEbA,EAAOD,QAAU,SAASC,GAQzB,MAPIA,GAAO2kG,kBACV3kG,EAAOquE,UAAY,aACnBruE,EAAO4kG,SAEP5kG,EAAO4iG,YACP5iG,EAAO2kG,gBAAkB,GAEnB3kG"} \ No newline at end of file +{"version":3,"file":"vis.map","sources":["./dist/vis.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","util","DOMutil","DataSet","DataView","Queue","Graph3d","graph3d","Camera","Filter","Point2d","Point3d","Slider","StepNumber","Timeline","Graph2d","timeline","DateUtil","DataStep","Range","stack","TimeStep","components","items","Item","BackgroundItem","BoxItem","PointItem","RangeItem","Component","CurrentTime","CustomTime","DataAxis","GraphGroup","Group","BackgroundGroup","ItemSet","Legend","LineGraph","TimeAxis","Network","network","Edge","Groups","Images","Node","Popup","dotparser","gephiParser","Graph","Error","moment","hammer","isNumber","object","Number","isString","String","isDate","Date","match","ASPDateRegex","exec","isNaN","parse","isDataTable","google","visualization","DataTable","randomUUID","S4","Math","floor","random","toString","extend","a","i","len","arguments","length","other","prop","hasOwnProperty","selectiveExtend","props","Array","isArray","selectiveDeepExtend","b","TypeError","constructor","Object","undefined","deepExtend","selectiveNotDeepExtend","indexOf","equalArray","convert","type","Boolean","valueOf","isMoment","toDate","getType","toISOString","value","getAbsoluteLeft","elem","getBoundingClientRect","left","window","pageXOffset","getAbsoluteTop","top","pageYOffset","addClassName","className","classes","split","push","join","removeClassName","index","splice","forEach","callback","toArray","array","updateProperty","key","addEventListener","element","action","listener","useCapture","navigator","userAgent","attachEvent","removeEventListener","detachEvent","preventDefault","event","returnValue","getTarget","target","srcElement","nodeType","parentNode","option","asBoolean","defaultValue","asNumber","asString","asSize","asElement","GiveDec","Hex","Value","eval","GiveHex","Dec","parseColor","color","isValidRGB","rgb","substr","RGBToHex","isValidHex","hsv","hexToHSV","lighterColorHSV","h","s","v","min","darkerColorHSV","darkerColorHex","HSVToHex","lighterColorHex","background","border","highlight","hover","hexToRGB","hex","replace","toUpperCase","substring","d","e","f","r","g","red","green","blue","RGBToHSV","minRGB","maxRGB","max","hue","saturation","cssUtil","cssText","styles","style","trim","parts","keys","map","addCssText","currentStyles","newStyles","removeCssText","removeStyles","HSVToRGB","q","t","isOk","test","selectiveBridgeObject","fields","referenceObject","objectTo","create","bridgeObject","mergeOptions","mergeTarget","options","enabled","binarySearchCustom","orderedItems","searchFunction","field","field2","maxIterations","iteration","low","high","middle","item","searchResult","binarySearchValue","sidePreference","prevValue","nextValue","easeInOutQuad","start","end","duration","change","easingFunctions","linear","easeInQuad","easeOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","prepareElements","JSONcontainer","elementType","redundant","used","cleanupElements","removeChild","getSVGElement","svgContainer","shift","document","createElementNS","appendChild","getDOMElement","DOMContainer","insertBefore","createElement","drawPoint","x","y","group","point","drawPoints","setAttributeNS","size","drawBar","width","height","rect","data","_options","_data","_fieldId","fieldId","_type","_subscribers","add","setOptions","prototype","queue","_queue","destroy","on","subscribers","subscribe","off","filter","unsubscribe","_trigger","params","senderId","concat","subscriber","addedIds","me","_addItem","columns","_getColumnNames","row","rows","getNumberOfRows","col","cols","getValue","update","updatedIds","updatedData","addOrUpdate","_updateItem","get","ids","firstType","returnType","allowedValues","itemId","_getItem","order","_sort","_filterFields","_appendRow","result","getIds","getDataSet","mappedItems","filteredItem","name","sort","av","bv","remove","removedId","removedIds","_remove","clear","maxField","itemField","minField","distinct","values","fieldType","count","exists","types","raw","converted","JSON","stringify","dataTable","getNumberOfColumns","getColumnId","getColumnLabel","addRow","setValue","_ids","_onEvent","apply","setData","viewOptions","getArguments","defaultFilter","dataSet","added","updated","removed","delay","Infinity","_timeout","_extended","_flushIfNeeded","flush","methods","original","method","args","fn","context","entry","clearTimeout","setTimeout","container","SyntaxError","containerElement","margin","defaultXCenter","defaultYCenter","xLabel","yLabel","zLabel","passValueFn","xValueLabel","yValueLabel","zValueLabel","filterLabel","legendLabel","STYLE","DOT","showPerspective","showGrid","keepAspectRatio","showShadow","showGrayBottom","showTooltip","verticalRatio","animationInterval","animationPreload","camera","eye","dataPoints","colX","colY","colZ","colValue","colFilter","xMin","xStep","xMax","yMin","yStep","yMax","zMin","zStep","zMax","valueMin","valueMax","xBarWidth","yBarWidth","colorAxis","colorGrid","colorDot","colorDotBorder","getMouseX","clientX","targetTouches","getMouseY","clientY","Emitter","_setScale","scale","z","xCenter","yCenter","zCenter","setArmLocation","_convert3Dto2D","point3d","translation","_convertPointToTranslation","_convertTranslationToScreen","ax","ay","az","cx","getCameraLocation","cy","cz","sinTx","sin","getCameraRotation","cosTx","cos","sinTy","cosTy","sinTz","cosTz","dx","dy","dz","bx","by","ex","ey","ez","getArmLength","xcenter","frame","canvas","clientWidth","ycenter","_setBackgroundColor","backgroundColor","fill","stroke","strokeWidth","borderColor","borderWidth","borderStyle","BAR","BARCOLOR","BARSIZE","DOTLINE","DOTCOLOR","DOTSIZE","GRID","LINE","SURFACE","_getStyleNumber","styleName","_determineColumnIndexes","counter","column","getDistinctValues","distinctValues","getColumnRange","minMax","_dataInitialize","rawData","_onChange","dataFilter","setOnLoadCallback","redraw","withBars","defaultXBarWidth","dataX","defaultYBarWidth","dataY","xRange","defaultXMin","defaultXMax","defaultXStep","yRange","defaultYMin","defaultYMax","defaultYStep","zRange","defaultZMin","defaultZMax","defaultZStep","valueRange","defaultValueMin","defaultValueMax","_getDataPoints","obj","sortNumber","dataMatrix","xIndex","yIndex","trans","screen","bottom","pointRight","pointTop","pointCross","hasChildNodes","firstChild","position","overflow","noCanvas","fontWeight","padding","innerHTML","onmousedown","_onMouseDown","ontouchstart","_onTouchStart","onmousewheel","_onWheel","ontooltip","_onTooltip","onkeydown","setSize","_resizeCanvas","clientHeight","animationStart","slider","play","animationStop","stop","_resizeCenter","charAt","parseFloat","setCameraPosition","pos","horizontal","vertical","setArmRotation","distance","setArmLength","getCameraPosition","getArmRotation","_readData","_redrawFilter","animationAutoStart","cameraPosition","styleNumber","tooltip","showAnimationControls","_redrawSlider","_redrawClear","_redrawAxis","_redrawDataGrid","_redrawDataLine","_redrawDataBar","_redrawDataDot","_redrawInfo","_redrawLegend","ctx","getContext","clearRect","widthMin","widthMax","dotSize","right","lineWidth","font","ymin","ymax","_hsv2rgb","strokeStyle","beginPath","moveTo","lineTo","strokeRect","fillStyle","closePath","gridLineLen","step","getCurrent","next","textAlign","textBaseline","fillText","label","visible","setValues","setPlayInterval","onchange","getIndex","selectValue","setOnChangeCallback","lineStyle","getLabel","getSelectedValue","from","to","prettyStep","text","xText","yText","zText","offset","xOffset","yOffset","xMin2d","xMax2d","gridLenX","gridLenY","textMargin","armAngle","H","S","V","R","G","B","C","Hi","X","abs","parseInt","cross","topSideVisible","zAvg","transBottom","dist","sortDepth","aDiff","subtract","bDiff","crossproduct","crossProduct","radius","arc","PI","j","surface","corners","xWidth","yWidth","surfaces","center","avg","transCenter","diff","leftButtonDown","_onMouseUp","which","button","touchDown","startMouseX","startMouseY","startStart","startEnd","startArmRotation","cursor","onmousemove","_onMouseMove","onmouseup","diffX","diffY","horizontalNew","verticalNew","snapAngle","snapValue","round","parameters","emit","mouseX","mouseY","tooltipTimeout","_hideTooltip","dataPoint","_dataPointFromXY","_showTooltip","ontouchmove","_onTouchMove","ontouchend","_onTouchEnd","delta","wheelDelta","detail","oldLength","newLength","_insideTriangle","triangle","sign","as","bs","cs","distMax","closestDataPoint","closestDist","triangle1","triangle2","distX","distY","sqrt","content","line","dot","dom","borderRadius","boxShadow","borderLeft","contentWidth","offsetWidth","contentHeight","offsetHeight","lineHeight","dotWidth","dotHeight","armLocation","armRotation","armLength","cameraLocation","cameraRotation","calculateCameraOrientation","rot","graph","onLoadCallback","loadInBackground","isLoaded","getLoadedProgress","getColumn","getValues","dataView","progress","sub","sum","prev","bar","MozBorderRadius","slide","onclick","togglePlay","onChangeCallback","playTimeout","playInterval","playLoop","setIndex","playNext","interval","clearInterval","getPlayInterval","setPlayLoop","doLoop","onChange","indexToLeft","startClientX","startSlideX","leftToIndex","_start","_end","_step","precision","_current","setRange","setStep","calculatePrettyStep","log10","log","LN10","step1","pow","step2","step5","toPrecision","getStep","groups","forthArgument","defaultOptions","autoResize","orientation","maxHeight","minHeight","_create","body","domProps","emitter","bind","hiddenDates","snap","toScreen","_toScreen","toGlobalScreen","_toGlobalScreen","toTime","_toTime","toGlobalTime","_toGlobalTime","range","timeAxis","currentTime","customTime","itemSet","itemsData","groupsData","setGroups","setItems","Core","newDataSet","initialLoad","dataRange","_getDataRange","setWindow","animate","fit","setSelection","focus","getSelection","itemData","getItemRange","dataset","minItem","maxStartItem","maxEndItem","linegraph","getLegend","groupId","isGroupVisible","visibility","convertHiddenOptions","repeat","dateItem","updateHiddenDates","centerContainer","totalRange","pixelTime","startDate","endDate","_d","runUntil","clone","day","dayOfYear","year","dayOffset","date","month","console","removeDuplicates","startHidden","isHidden","endHidden","rangeStart","rangeEnd","hidden","startToFront","endToFront","_applyRange","safeDates","printDates","dates","stepOverHiddenDates","timeStep","previousTime","stepInHidden","currentValue","current","newValue","switchedYear","switchedMonth","switchedDay","time","conversion","getHiddenDurationBetween","correctTimeForHidden","hiddenDuration","totalDuration","partialDuration","accumulatedHiddenDuration","getAccumulatedHiddenDuration","newTime","getHiddenDurationBefore","timeOffset","requiredDuration","previousPoint","snapAwayFromHidden","direction","correctionEnabled","minimumStep","containerHeight","customRange","alignZeros","autoScale","stepIndex","marginStart","marginEnd","deadSpace","majorSteps","minorSteps","setMinimumStep","setFirst","safeSize","minimumStepValue","orderOfMagnitude","minorStepIdx","magnitudefactor","solutionFound","stepSize","niceStart","niceEnd","roundToMinor","marginRange","rounded","hasNext","previous","decimals","slice","exp","cnt","isMajor","now","hours","minutes","seconds","milliseconds","deltaDifference","scaleOffset","moveable","zoomable","zoomMin","zoomMax","touch","animateTimer","_onDragStart","_onDrag","_onDragEnd","_onHold","_onMouseWheel","_onTouch","_onPinch","validateDirection","getPointer","pageX","pageY","hammerUtil","_cancelAnimation","initStart","initEnd","initTime","anyChanged","dragging","done","changed","newStart","newEnd","getRange","totalHidden","previousDelta","allowDragging","gesture","deltaX","deltaY","diffRange","safeStart","safeEnd","fakeGesture","pointer","pointerDate","_pointerToDate","zoom","touches","centerDate","hiddenDurationBefore","hiddenDurationAfter","move","EPSILON","orderByStart","orderByEnd","aTime","bTime","force","iMax","axis","collidingItem","jj","collision","nostack","subgroups","newTop","subgroup","SCALE","DAY","MILLISECOND","SECOND","MINUTE","HOUR","WEEKDAY","MONTH","YEAR","first","setFullYear","getFullYear","setMonth","setDate","setHours","setMinutes","setSeconds","setMilliseconds","getMilliseconds","getSeconds","getMinutes","getHours","getDate","getMonth","setScale","newScale","newStep","setAutoScale","enable","stepYear","stepMonth","stepDay","stepHour","stepMinute","stepSecond","stepMillisecond","getLabelMinor","format","getLabelMajor","_isResized","resized","_previousWidth","_previousHeight","showCurrentTime","locales","locale","parent","backgroundVertical","title","currentTimeTimer","setCurrentTime","getCurrentTime","showCustomTime","eventParams","Hammer","drag","prevent_default","setCustomTime","getCustomTime","stopPropagation","svg","linegraphOptions","showMinorLabels","showMajorLabels","icons","majorLinesOffset","minorLinesOffset","labelOffsetX","labelOffsetY","iconWidth","linegraphSVG","DOMelements","lines","labels","conversionFactor","minWidth","stepPixels","stepPixelsForced","zeroCrossing","lineOffset","master","svgElements","iconsRemoved","amountOfGroups","lineContainer","scrollTop","addGroup","graphOptions","updateGroup","removeGroup","hide","show","display","_redrawGroupIcons","iconHeight","iconOffset","drawIcon","_cleanupIcons","backgroundHorizontal","changeCalled","activeGroups","_calculateCharSize","minorLabelHeight","minorCharHeight","majorLabelHeight","majorCharHeight","minorLineWidth","minorLineHeight","majorLineWidth","majorLineHeight","_redrawLabels","_redrawTitle","amountOfSteps","stepDifference","zeroStepDifference","valueAtZero","marginStartPos","maxLabelSize","_redrawLabel","_redrawLine","titleWidth","titleCharHeight","convertValue","invertedValue","convertedValue","characterHeight","largestWidth","majorCharWidth","minorCharWidth","textMinor","createTextNode","measureCharMinor","textMajor","measureCharMajor","textTitle","measureCharTitle","titleCharWidth","groupsUsingDefaultStyles","usingDefaultStyle","zeroPosition","Line","Bar","Points","setZeroPosition","catmullRom","parametrization","alpha","SVGcontainer","path","fillPath","fillHeight","outline","shaded","barWidth","bar1Height","bar2Height","icon","yAxisOrientation","getYRange","groupData","draw","framework","subgroupIndex","subgroupOrderer","subgroupOrder","visibleItems","byStart","byEnd","checkRangedItems","inner","foreground","marker","Element","getLabelWidth","restack","_updateVisibleItems","markerHeight","lastMarkerHeight","dirty","displayed","_calculateHeight","offsetTop","offsetLeft","ii","repositionY","resetSubgroups","labelSet","setParent","orderSubgroups","_checkIfVisible","sortArray","sortField","removeFromDataSet","removeItem","startArray","endArray","oldVisibleItems","visibleItemsLookup","lowerBound","upperBound","_checkIfVisibleWithReference","initialPosByStart","_traceVisible","initialPosByEnd","repositionX","initialPos","breakCondition","isVisible","align","groupOrder","selectable","editable","updateTime","onAdd","onUpdate","onMove","onRemove","onMoving","itemOptions","itemListeners","_onAdd","_onUpdate","_onRemove","groupListeners","_onAddGroups","_onUpdateGroups","_onRemoveGroups","groupIds","selection","stackDirty","touchParams","UNGROUPED","BACKGROUND","box","_updateUngrouped","backgroundGroup","_onSelectItem","_onMultiSelectItem","_onAddItem","addCallback","Function","markDirty","unselect","select","getVisibleItems","rawVisibleItems","_deselect","_orderGroups","visibleInterval","zoomed","lastVisibleInterval","lastWidth","firstGroup","_firstGroup","firstMargin","nonFirstMargin","groupMargin","groupResized","firstGroupIndex","firstGroupId","ungrouped","_getGroupId","getLabelSet","oldItemsData","getItems","_order","getGroups","_getType","_removeItem","groupOptions","oldGroupId","oldGroup","_constructByEndArray","itemFromTarget","selected","dragLeftItem","dragRightItem","initialX","itemProps","newProps","initial","groupFromTarget","_updateItemProps","_moveToGroup","changes","ctrlKey","srcEvent","shiftKey","oldSelection","newSelection","xAbs","newItem","_getItemRange","_item","itemSetFromTarget","side","iconSize","iconSpacing","textArea","scrollableHeight","drawLegendIcons","getComputedStyle","paddingTop","defaultGroup","sampling","graphHeight","barChart","handleOverlap","dataAxis","legend","abortedGraphUpdate","autoSizeSVG","lastStart","COUNTER","BarGraphFunctions","yAxisLeft","yAxisRight","legendLeft","legendRight","_updateAllGroupData","_updateGroup","groupsContent","ungroupedCounter","forceGraphUpdate","_updateGraph","rangePerPixelInv","preprocessedGroupData","processedGroupData","groupRanges","minDate","maxDate","_getRelevantData","_applySampling","_convertXcoordinates","_getYRanges","_updateYAxis","MAX_CYCLES","_convertYcoordinates","dataContainer","guess","increment","amountOfPoints","xDistance","pointsPerPixel","ceil","sampledData","barCombinedDataLeft","barCombinedDataRight","getStackedBarYRange","minVal","maxVal","yAxisLeftUsed","yAxisRightUsed","minLeft","minRight","maxLeft","maxRight","ignore","_toggleAxisVisiblity","drawIcons","axisUsed","datapoints","xValue","yValue","extractedData","svgHeight","majorLines","majorTexts","minorLines","minorTexts","lineTop","lang","parentChanged","foregroundNextSibling","nextSibling","backgroundNextSibling","_repaintLabels","timeLabelsize","xFirstMajorLabel","cur","_repaintMinorText","_repaintMajorText","_repaintMajorLine","_repaintMinorLine","leftTime","leftText","widthText","arr","pop","childNodes","nodeValue","_repaintDeleteButton","anchor","deleteButton","_updateContents","template","_updateTitle","removeAttribute","_updateDataAttributes","dataAttributes","attributes","setAttribute","_updateStyle","emptyContent","baseClassName","onTop","itemSubgroup","itemSetHeight","marginLeft","maxWidth","_repaintDragLeft","_repaintDragRight","contentLeft","parentWidth","boxWidth","dragLeft","dragRight","_initializeMixinLoaders","renderRefreshRate","renderTimestep","renderTime","maxPhysicsTicksPerRender","physicsDiscreteStepsize","initializing","triggerFunctions","edit","editEdge","connect","del","nodes","mass","radiusMin","radiusMax","shape","image","fontColor","fontSize","fontFace","fontFill","level","highlightColor","borderWidthSelected","edges","widthSelectionMultiplier","hoverWidth","arrowScaleFactor","dash","gap","altLength","inheritColor","configurePhysics","physics","barnesHut","theta","gravitationalConstant","centralGravity","springLength","springConstant","damping","repulsion","nodeDistance","hierarchicalRepulsion","clustering","initialMaxNodes","clusterThreshold","reduceToNodes","chainThreshold","clusterEdgeThreshold","sectorThreshold","screenSizeThreshold","fontSizeMultiplier","maxFontSize","forceAmplification","distanceAmplification","edgeGrowth","nodeScaling","maxNodeSizeIncrements","activeAreaBoxSize","clusterLevelDifference","navigation","keyboard","speed","dataManipulation","initiallyVisible","hierarchicalLayout","levelSeparation","nodeSpacing","layout","freezeForStabilization","smoothCurves","dynamic","roundness","maxVelocity","minVelocity","stabilize","stabilizationIterations","dragNetwork","dragNodes","hideEdgesOnDrag","hideNodesOnDrag","constants","pixelRatio","hoverObj","controlNodesActive","navigationHammers","existing","_new","animationSpeed","animationEasingFunction","easingTime","sourceScale","targetScale","sourceTranslation","targetTranslation","lockedOnNodeId","lockedOnNodeOffset","touchTime","images","setOnloadCallback","_redraw","xIncrement","yIncrement","zoomIncrement","_loadPhysicsSystem","_loadSectorSystem","_loadClusterSystem","_loadSelectionSystem","_loadHierarchySystem","_setTranslation","freezeSimulation","cachedFunctions","startedStabilization","stabilized","draggingNodes","calculationNodes","calculationNodeIndices","nodeIndices","canvasTopLeft","canvasBottomRight","pointerPosition","areaCenter","previousScale","nodesData","edgesData","nodesListeners","_addNodes","_updateNodes","_removeNodes","edgesListeners","_addEdges","_updateEdges","_removeEdges","moving","timer","_setupHierarchicalLayout","zoomExtent","startWithClustering","keycharm","MixinLoader","Activator","_getScriptPath","scripts","getElementsByTagName","src","_getRange","node","minY","maxY","minX","maxX","nodeId","_findCenter","animationOptions","initialZoom","disableStart","zoomLevel","numberOfNodes","factor","yDistance","xZoomLevel","yZoomLevel","animation","_updateNodeIndexList","_clearNodeIndexList","idx","dotData","DOTToGraph","gephi","gephiData","parseGephi","_setNodes","_setEdges","_putDataInSector","_resetLevels","_stabilize","onEdit","onEditEdge","onConnect","onDelete","editMode","newColorObj","groupname","clickToUse","activator","_createKeyBinds","_loadNavigationControls","_loadManipulationSystem","_configureSmoothCurves","devicePixelRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","backingStorePixelRatio","setTransform","pinch","_onTap","_onDoubleTap","_onMouseMoveTitle","hammerFrame","_onRelease","reset","isActive","_moveUp","_yStopMoving","_moveDown","_moveLeft","_xStopMoving","_moveRight","_zoomIn","_stopZoom","_zoomOut","_createManipulatorBar","_deleteSelected","_getPointer","pinched","_getScale","_handleTouch","_handleDragStart","_getNodeAt","_getTranslation","isSelected","_selectObject","nodeIds","objectId","selectionObj","xFixed","yFixed","_handleOnDrag","releaseNode","_XconvertDOMtoCanvas","_XconvertCanvasToDOM","_YconvertDOMtoCanvas","_YconvertCanvasToDOM","_handleDragEnd","_handleTap","_handleDoubleTap","_handleOnHold","_handleOnRelease","_zoom","scaleOld","preScaleDragPointer","DOMtoCanvas","scaleFrac","tx","ty","updateClustersDefault","postScaleDragPointer","canvasToDOM","popupObj","_checkHidePopup","checkShow","_checkShowPopup","popupTimer","edgeId","_getEdgeAt","_hoverObject","_blurObject","lastPopupNode","getTitle","isOverlappingWith","edge","connected","popup","setPosition","setText","emitEvent","oldWidth","oldHeight","oldNodesData","_updateSelection","angle","_updateCalculationNodes","_reconnectEdges","_updateValueRange","updateLabels","changedData","setProperties","properties","oldEdgesData","oldEdge","disconnect","showInternalIds","_createBezierNodes","via","sectors","dynamicEdges","setValueRange","w","save","translate","_doInAllSectors","restore","offsetX","offsetY","_drawNodes","alwaysShow","setScaleAndPos","inArea","sMax","_drawEdges","_drawControlNodes","_freezeDefinedNodes","_physicsTick","_restoreFrozenNodes","fixedData","_isMoving","vmin","isMoving","_discreteStepNodes","nodesPresent","discreteStepLimited","discreteStep","vminCorrected","mainMovingStatus","supportMovingStatus","_doInAllActiveSectors","mainMoving","_doInSupportSector","_animationStep","_handleNavigation","calculationTime","maxSteps","timeRequired","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","ua","toLowerCase","requiresTimeout","iterations","toggleFreeze","parentEdgeId","internalMultiplier","positionBezierNode","mixin","storePosition","storePositions","dataArray","allowedToMoveX","allowedToMoveY","getPositions","focusOnNode","nodePosition","lockedOnNode","easingFunction","animateView","locked","_transitionRedraw","viewCenter","distanceFromCenter","_classicRedraw","_lockedRedraw","active","getScale","getCenterCoordinates","networkConstants","fromId","toId","widthSelected","labelDimensions","yLine","dirtyLabel","fromBackup","toBackup","originalFromId","originalToId","widthFixed","lengthFixed","controlNodesEnabled","controlNodes","positions","connectedNode","_drawLine","_drawArrow","_drawArrowCenter","_drawDashLine","attachEdge","detachEdge","xFrom","yFrom","xTo","yTo","xObj","yObj","_getDistanceToEdge","_getColor","colorObj","_getLineWidth","_line","midpointX","midpointY","_pointOnLine","_label","resize","_circle","_pointOnCircle","networkScaleInv","_getViaCoordinates","xVia","yVia","quadraticCurveTo","lineCount","measureText","fillRect","mozDash","setLineDash","pattern","lineDashOffset","mozDashOffset","lineCap","dashedLine","percentage","atan2","arrow","edgeSegmentLength","fromBorderDist","distanceToBorder","fromBorderPoint","toBorderDist","toBorderPoint","x1","y1","x2","y2","x3","y3","lastX","lastY","minDistance","_getDistanceToLine","px","py","something","u","nodeIdFrom","nodeIdTo","getControlNodePositions","_enableControlNodes","_disableControlNodes","_getSelectedControlNode","fromDistance","toDistance","_restoreControlNodes","defaultIndex","DEFAULT","load","url","brokenUrl","img","Image","onload","onerror","imagelist","grouplist","reroutedEdges","fontDrawThreshold","horizontalAlignLeft","verticalAlignTop","baseRadiusValue","radiusFixed","preassignedLevel","hierarchyEnumerated","fx","fy","vx","vy","resetCluster","dynamicEdgesLength","clusterSession","clusterSizeWidthFactor","clusterSizeHeightFactor","clusterSizeRadiusFactor","growthIndicator","networkScale","formationScale","clusterSize","containedNodes","containedEdges","clusterSessions","originalLabel","triggerFunction","groupObj","imageObj","brokenImage","_drawDatabase","_resizeDatabase","_drawBox","_resizeBox","_drawCircle","_resizeCircle","_drawEllipse","_resizeEllipse","_drawImage","_resizeImage","_drawText","_resizeText","_drawDot","_resizeShape","_drawSquare","_drawTriangle","_drawTriangleDown","_drawStar","_reset","clearSizeCache","_setForce","_addForce","isFixed","velocity","getDistance","globalAlpha","drawImage","textSize","getTextSize","clusterLineWidth","selectionLineWidth","roundRect","database","diameter","circle","defaultSize","ellipse","_drawShape","radiusMultiplier","baseline","labelUnderNode","inView","clearVelocity","updateVelocity","massBeforeClustering","energyBefore","styleAttr","fontFamily","WebkitBorderRadius","whiteSpace","parseDOT","parseGraph","nextPreview","isAlphaNumeric","regexAlphaNumeric","merge","o","addNode","graphs","attr","addEdge","createEdge","getToken","tokenType","TOKENTYPE","NULL","token","isComment","DELIMITER","c2","DELIMITERS","IDENTIFIER","newSyntaxError","UNKNOWN","chop","strict","parseStatements","parseStatement","subgraph","parseSubgraph","parseEdge","parseAttributeStatement","parseNodeStatement","subgraphs","parseAttributeList","message","maxLength","forEach2","array1","array2","elem1","elem2","graphData","dotNode","graphNode","convertEdge","dotEdge","graphEdge","subEdge","{","}","[","]",";","=",",","->","--","gephiJSON","allowedToMove","gEdges","gNodes","gEdge","source","gNode","leftContainer","rightContainer","shadowTop","shadowBottom","shadowTopLeft","shadowBottomLeft","shadowTopRight","shadowBottomRight","_redrawTimer","listeners","events","scrollTopMin","redrawCount","_initAutoResize","component","_stopAutoResize","what","getWindow","borderRootHeight","borderRootWidth","autoHeight","centerWidth","_updateScrollTop","visibilityTop","visibilityBottom","MAX_REDRAWS","repaint","_startAutoResize","_onResize","lastHeight","watchTimer","setInterval","initialScrollTop","oldScrollTop","_getScrollTop","newScrollTop","_setScrollTop","eventType","getTouchList","collectEventData","custom","back","editNode","addDescription","edgeDescription","editEdgeDescription","createEdgeError","deleteClusterError","CanvasRenderingContext2D","square","s2","ir","triangleDown","star","n","r2d","kappa","ox","oy","xe","ye","xm","ym","bezierCurveTo","wEllipse","hEllipse","ymb","yeb","xt","yt","xi","yi","xl","yl","xr","yr","dashArray","dashLength","dashCount","slope","distRemaining","dashIndex","_catmullRom","_linear","dFill","_catmullRomUniform","p0","p1","p2","p3","bp1","bp2","normalization","d1","d2","d3","A","N","M","d3powA","d2powA","d3pow2A","d2pow2A","d1pow2A","d1powA","Bargraph","barCombinedData","coreDistance","drawData","combinedData","intersections","barPoints","_getDataIntersections","heightOffset","_getSafeDrawData","nextKey","amount","resolved","prevKey","accumulated","groupLabel","_getStackedBarYRange","xpos","PhysicsMixin","ClusterMixin","SectorsMixin","SelectionMixin","ManipulationMixin","NavigationMixin","HierarchicalLayoutMixin","_loadMixin","sourceVariable","mixinFunction","_clearMixin","_loadSelectedForceSolver","_loadPhysicsConfiguration","hubThreshold","activeSector","drawingNode","blockConnectingEdgeSelection","forceAppendSelection","manipulationDiv","editModeDiv","closeDiv","_cleanNavigation","_loadNavigationElements","overlay","_onTapOverlay","windowHammer","_hasParent","deactivate","escListener","activate","unbind","_callbacks","once","self","removeListener","removeAllListeners","callbacks","cb","hasListeners","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","_exportFunctions","_bound","keydown","keyup","_keys","fromCharCode","code","down","handleEvent","up","keyCode","bound","bindAll","getKey","newBindings","global","dfl","hasOwnProp","defaultParsingFlags","empty","unusedTokens","unusedInput","charsLeftOver","nullInput","invalidMonth","invalidFormat","userInvalidated","iso","printMsg","msg","suppressDeprecationWarnings","warn","deprecate","firstTime","deprecateSimple","deprecations","padToken","func","leftZeroFill","ordinalizeToken","period","localeData","ordinal","Locale","Moment","config","skipOverflow","checkOverflow","copyConfig","Duration","normalizedInput","normalizeObjectUnits","years","quarters","quarter","months","weeks","week","days","hour","minute","second","millisecond","_milliseconds","_days","_months","_locale","_bubble","val","_isAMomentObject","_i","_f","_l","_strict","_tzm","_isUTC","_offset","_pf","momentProperties","absRound","number","targetLength","forceSign","output","positiveMomentsDifference","base","res","isAfter","momentsDifference","makeAs","isBefore","createAdder","dur","tmp","addOrSubtractDurationFromMoment","mom","isAdding","updateOffset","setTime","rawSetter","rawGetter","rawMonthSetter","input","compareArrays","dontConvert","lengthDiff","diffs","toInt","normalizeUnits","units","lowered","unitAliases","camelFunctions","inputObject","normalizedProp","makeList","setter","getter","results","utc","set","argumentForCoercion","coercedNumber","isFinite","daysInMonth","UTC","getUTCDate","weeksInYear","dow","doy","weekOfYear","daysInYear","isLeapYear","_a","DATE","_overflowDayOfYear","isValid","_isValid","getTime","bigHour","normalizeLocale","chooseLocale","names","loadLocale","oldLocale","hasModule","model","local","removeFormattingTokens","makeFormatFunction","formattingTokens","formatTokenFunctions","formatMoment","expandFormat","formatFunctions","invalidDate","replaceLongDateFormatTokens","longDateFormat","localFormattingTokens","lastIndex","getParseRegexForToken","parseTokenOneDigit","parseTokenThreeDigits","parseTokenFourDigits","parseTokenOneToFourDigits","parseTokenSignedNumber","parseTokenSixDigits","parseTokenOneToSixDigits","parseTokenTwoDigits","parseTokenOneToThreeDigits","parseTokenWord","_meridiemParse","parseTokenOffsetMs","parseTokenTimestampMs","parseTokenTimezone","parseTokenT","parseTokenDigits","parseTokenOneOrTwoDigits","_ordinalParse","_ordinalParseLenient","RegExp","regexpEscape","unescapeFormat","timezoneMinutesFromString","string","possibleTzMatches","tzChunk","parseTimezoneChunker","addTimeToArrayFromToken","datePartArray","monthsParse","_dayOfYear","parseTwoDigitYear","_isPm","isPM","_useUTC","weekdaysParse","_w","invalidWeekday","dayOfYearFromWeekInfo","weekYear","weekday","temp","GG","W","E","_week","gg","dayOfYearFromWeeks","dateFromConfig","currentDate","yearToUse","currentDateArray","makeUTCDate","getUTCMonth","_nextDay","makeDate","setUTCMinutes","getUTCMinutes","dateFromObject","getUTCFullYear","makeDateFromStringAndFormat","ISO_8601","parseISO","parsedInput","tokens","skipped","stringLength","totalParsedInputLength","matched","p4","makeDateFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","NaN","score","l","isoRegex","isoDates","isoTimes","makeDateFromString","createFromInputFallback","makeDateFromInput","aspNetJsonRegex","ms","setUTCFullYear","parseWeekday","substituteTimeAgo","withoutSuffix","isFuture","relativeTime","posNegDuration","relativeTimeThresholds","firstDayOfWeek","firstDayOfWeekOfYear","adjustedMoment","daysToDayOfWeek","daysToAdd","getUTCDay","makeMoment","invalid","preparse","pickBy","moments","dayOfMonth","unit","makeAccessor","keepTime","daysToYears","yearsToDays","makeDurationGetter","makeGlobal","shouldDeprecate","ender","oldGlobalMoment","globalScope","VERSION","aspNetTimeSpanJsonRegex","isoDurationRegex","isoFormat","unitMillisecondFactors","Milliseconds","Seconds","Minutes","Hours","Days","Months","Years","D","Q","DDD","dayofyear","isoweekday","isoweek","weekyear","isoweekyear","ordinalizeTokens","paddedTokens","MMM","monthsShort","MMMM","dd","weekdaysMin","ddd","weekdaysShort","dddd","weekdays","isoWeek","YY","YYYY","YYYYY","YYYYYY","gggg","ggggg","isoWeekYear","GGGG","GGGGG","isoWeekday","meridiem","SS","SSS","SSSS","Z","zone","ZZ","zoneAbbr","zz","zoneName","unix","lists","DDDD","_monthsShort","monthName","regex","_monthsParse","_longMonthsParse","_shortMonthsParse","_weekdays","_weekdaysShort","_weekdaysMin","weekdayName","_weekdaysParse","_longDateFormat","LTS","LT","L","LL","LLL","LLLL","isLower","_calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","calendar","_relativeTime","future","past","mm","hh","MM","yy","pastFuture","_ordinal","postformat","_invalidDate","ret","parseIso","diffRes","isDuration","inp","version","defaultFormat","relativeTimeThreshold","threshold","limit","defineLocale","_abbr","abbr","langData","flags","parseZone","isDSTShifted","parsingFlags","invalidAt","keepLocalTime","_dateTzOffset","inputString","asFloat","daysAdjust","that","zoneDiff","startOf","humanize","fromNow","sod","isDST","getDay","endOf","inputMs","isSame","localAdjust","_changeInProgress","hasAlignedHourOffset","isoWeeksInYear","weekInfo","newLocaleData","getTimezoneOffset","isoWeeks","toJSON","withSuffix","toIsoString","asSeconds","asMilliseconds","asMinutes","asHours","asDays","asWeeks","asMonths","asYears","ordinalParse","require","noGlobal","setup","READY","Event","determineEventTypes","Utils","each","gestures","Detection","register","onTouch","DOCUMENT","EVENT_MOVE","detect","EVENT_END","Instance","defaults","behavior","userSelect","touchAction","touchCallout","contentZooming","userDrag","tapHighlightColor","HAS_POINTEREVENTS","pointerEnabled","msPointerEnabled","HAS_TOUCHEVENTS","IS_MOBILE","NO_MOUSEEVENTS","CALCULATE_INTERVAL","EVENT_TYPES","DIRECTION_DOWN","DIRECTION_LEFT","DIRECTION_UP","DIRECTION_RIGHT","POINTER_MOUSE","POINTER_TOUCH","POINTER_PEN","EVENT_START","EVENT_RELEASE","EVENT_TOUCH","plugins","utils","dest","handler","iterator","inStr","find","inArray","hasParent","getCenter","getVelocity","deltaTime","getAngle","touch1","touch2","getDirection","getRotation","isVertical","setPrefixedCss","toggle","prefixes","toCamelCase","toggleBehavior","falseFn","onselectstart","ondragstart","str","preventMouseEvents","started","shouldDetect","hook","onTouchHandler","ev","triggerType","srcType","isPointer","isMouse","buttons","PointerEvent","matchType","updatePointer","doDetect","touchList","touchListLength","triggerChange","trigger","changedLength","changedTouches","evData","identifiers","identifier","pointerType","timeStamp","preventManipulation","stopDetect","pointers","touchlist","pointerEvent","pointerId","pt","MSPOINTER_TYPE_MOUSE","MSPOINTER_TYPE_TOUCH","MSPOINTER_TYPE_PEN","detection","stopped","startDetect","inst","eventData","startEvent","lastEvent","lastCalcEvent","futureCalcEvent","lastCalcData","extendEventData","instOptions","getCalculatedData","recalc","calcEv","calcData","velocityX","velocityY","interimAngle","interimDirection","startEv","lastEv","rotation","eventStartHandler","eventHandlers","createEvent","initEvent","dispatchEvent","state","dispose","eh","dragGesture","dragMaxTouches","triggered","dragMinDistance","startCenter","dragDistanceCorrection","dragLockToAxis","dragLockMinDistance","lastDirection","dragBlockVertical","dragBlockHorizontal","Drag","Gesture","holdGesture","holdTimeout","holdThreshold","Hold","Release","Swipe","swipeMinTouches","swipeMaxTouches","swipeVelocityX","swipeVelocityY","tapGesture","sincePrev","didDoubleTap","hasMoved","tapMaxDistance","tapMaxTime","doubleTapInterval","doubleTapDistance","tapAlways","Tap","Touch","preventMouse","transformGesture","scaleThreshold","rotationThreshold","transformMinScale","transformMinRotation","Transform","clusterToFit","maxNumberOfNodes","reposition","maxLevels","forceAggregateHubs","normalizeClusterLevels","increaseClusterLevel","repositionNodes","openCluster","isMovingBeforeClustering","_nodeInActiveArea","_sector","_addSector","decreaseClusterLevel","_expandClusterNode","_updateDynamicEdges","updateClusters","zoomDirection","recursive","doNotStart","amountOfNodes","_collapseSector","_formClusters","_openClusters","_openClustersBySize","_aggregateHubs","handleChains","chainPercentage","_getChainFraction","_reduceAmountOfChains","_getHubSize","_formClustersByHub","openAll","containedNodeId","childNode","_expelChildFromParent","_unselectAll","_releaseContainedEdges","_connectEdgeBackToChild","_validateEdges","othersPresent","childNodeId","_repositionBezierNodes","_formClustersByZoom","_forceClustersByZoom","minLength","_addToCluster","_clusterToSmallestNeighbour","smallestNeighbour","smallestNeighbourNode","neighbour","onlyEqual","_formClusterFromHub","hubNode","absorptionSizeOffset","allowCluster","edgesIdarray","amountOfInitialEdges","_addToContainedEdges","_connectEdgeToCluster","_containCircularEdgesFromNode","massBefore","correction","edgeToId","edgeFromId","k","_addToReroutedEdges","maxLevel","minLevel","clusterLevel","targetLevel","average","averageSquared","hubCounter","largestHub","variance","standardDeviation","fraction","reduceAmount","chains","total","_switchToSector","sectorId","sectorType","_switchToActiveSector","_switchToFrozenSector","_switchToSupportSector","_loadLatestSector","_previousSector","_setActiveSector","newId","_forgetLastSector","_createNewSector","_deleteActiveSector","_deleteFrozenSector","_freezeSector","_activateSector","_mergeThisWithFrozen","_collapseThisToSingleCluster","sector","unqiueIdentifier","previousSector","runFunction","argument","returnValues","_doInAllFrozenSectors","_drawSectorNodes","_drawAllSectorNodes","_getNodesOverlappingWith","overlappingNodes","_getAllNodesOverlappingWith","_pointerToPositionObject","positionObject","_getEdgesOverlappingWith","overlappingEdges","_getAllEdgesOverlappingWith","_addToSelection","_addToHover","_removeFromSelection","doNotTrigger","_unselectClusters","_getSelectedNodeCount","_getSelectedNode","_getSelectedEdge","_getSelectedEdgeCount","_getSelectedObjectCount","_selectionIsEmpty","_clusterInSelection","_selectConnectedEdges","_hoverConnectedEdges","_unselectConnectedEdges","append","highlightEdges","overrideSelectable","DOM","_manipulationReleaseOverload","_navigationReleaseOverload","getSelectedNodes","edgeIds","getSelectedEdges","idArray","selectNodes","RangeError","selectEdges","_clearManipulatorBar","manipulationDOM","_restoreOverloadedFunctions","functionName","_toggleEditMode","toolbar","boundFunction","edgeBeingEdited","selectedControlNode","_createAddNodeToolbar","_createAddEdgeToolbar","_editNode","_createEditEdgeToolbar","_addNode","_handleConnect","_finishConnect","_selectControlNode","_controlNodeDrag","_releaseControlNode","newNode","_editEdge","alert","supportNodes","targetNode","connectionEdge","connectFromId","_createEdge","defaultData","finalizedData","sourceNodeId","targetNodeId","selectedNodes","selectedEdges","navigationDivs","navigationDivActions","_stopMovement","_zoomExtent","hubsize","definedLevel","undefinedLevel","_changeConstants","_determineLevels","_determineLevelsDirected","distribution","_getDistribution","_placeNodesByHierarchy","minPos","_placeBranchNodes","maxCount","_setLevel","_setLevelDirected","parentId","parentLevel","nodeMoved","_restoreNodes","graphToggleSmoothCurves","graph_toggleSmooth","getElementById","graphRepositionNodes","showValueOfRange","graphGenerateOptions","optionsSpecific","radioButton1","radioButton2","checked","backupConstants","optionsDiv","switchConfigurations","radioButton","querySelector","tableId","table","constantsVariableName","valueId","rangeValue","_overWriteGraphConstants","RepulsionMixin","HierarchialRepulsionMixin","BarnesHutMixin","_toggleBarnesHut","barnesHutTree","_initializeForceCalculation","_calculateForces","_calculateGravitationalForces","_calculateNodeForces","_calculateSpringForcesWithSupport","_calculateHierarchicalSpringForces","_calculateSpringForces","supportNodeId","gravity","gravityForce","edgeLength","springForce","combinedClusterSize","node1","node2","node3","_calculateSpringForce","physicsConfiguration","hierarchicalLayoutDirections","parentElement","rangeElement","radioButton3","graph_repositionNodes","graph_generateOptions","dynamicSmoothCurves","nameArray","webpackContext","req","resolve","repulsingForce","a_base","minimumDistance","steepness","springFx","springFy","totalFx","totalFy","correctionFx","correctionFy","nodeCount","_formBarnesHutTree","_getForceContribution","children","NW","NE","SW","SE","parentBranch","childrenCount","centerOfMass","calcSize","MAX_VALUE","sizeDiff","minimumTreeSize","rootSize","halfRootSize","centerX","centerY","_splitBranch","_placeInTree","_updateBranchMass","totalMass","totalMassInv","biggestSize","skipMassUpdate","_placeInRegion","region","containedNode","_insertRegion","childSize","_drawTree","_drawBranch","branch","webpackPolyfill","paths"],"mappings":"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"} \ No newline at end of file diff --git a/dist/vis.min.js b/dist/vis.min.js index 64f9a927..63897f3d 100644 --- a/dist/vis.min.js +++ b/dist/vis.min.js @@ -5,7 +5,7 @@ * A dynamic, browser-based visualization library. * * @version 3.7.2-SNAPSHOT - * @date 2014-12-09 + * @date 2014-12-16 * * @license * Copyright (C) 2011-2014 Almende B.V, http://almende.com @@ -34,6 +34,6 @@ for(e in t.physics.hierarchicalRepulsion)t.physics.hierarchicalRepulsion.hasOwnP }},s._getStackedBarYRange=function(t,e){for(var i,s=e[0].y,o=e[0].y,n=0;ne[n].y?e[n].y:s,o=ot[r].accumulated?t[r].accumulated:s,o=ot[s].y?t[s].y:e,i=is;++s)i[s].apply(this,e)}return this},e.prototype.listeners=function(t){return this._callbacks=this._callbacks||{},this._callbacks[t]||[]},e.prototype.hasListeners=function(t){return!!this.listeners(t).length}},function(t,e){var i,s,o;!function(n,r){s=[],i=r,o="function"==typeof i?i.apply(e,s):i,!(void 0!==o&&(t.exports=o))}(this,function(){function t(t){var e,i=t&&t.preventDefault||!1,s={},o={keydown:{},keyup:{}},n={};for(e=97;122>=e;e++)n[String.fromCharCode(e)]={code:65+(e-97),shift:!1};for(e=65;90>=e;e++)n[String.fromCharCode(e)]={code:e,shift:!0};for(e=0;9>=e;e++)n[""+e]={code:48+e,shift:!1};for(e=1;12>=e;e++)n["F"+e]={code:111+e,shift:!1};for(e=0;9>=e;e++)n["num"+e]={code:96+e,shift:!1};n["num*"]={code:106,shift:!1},n["num+"]={code:107,shift:!1},n["num-"]={code:109,shift:!1},n["num/"]={code:111,shift:!1},n["num."]={code:110,shift:!1},n.left={code:37,shift:!1},n.up={code:38,shift:!1},n.right={code:39,shift:!1},n.down={code:40,shift:!1},n.space={code:32,shift:!1},n.enter={code:13,shift:!1},n.shift={code:16,shift:void 0},n.esc={code:27,shift:!1},n.backspace={code:8,shift:!1},n.tab={code:9,shift:!1},n.ctrl={code:17,shift:!1},n.alt={code:18,shift:!1},n["delete"]={code:46,shift:!1},n.pageup={code:33,shift:!1},n.pagedown={code:34,shift:!1},n["="]={code:187,shift:!1},n["-"]={code:189,shift:!1},n["]"]={code:221,shift:!1},n["["]={code:219,shift:!1};var r=function(t){h(t,"keydown")},a=function(t){h(t,"keyup")},h=function(t,e){if(void 0!==o[e][t.keyCode]){for(var s=o[e][t.keyCode],n=0;n0)for(i in He)s=He[i],o=e[s],"undefined"!=typeof o&&(t[s]=o);return t}function b(t){return 0>t?Math.ceil(t):Math.floor(t)}function _(t,e,i){for(var s=""+Math.abs(t),o=t>=0;s.lengths;s++)(i&&t[s]!==e[s]||!i&&k(t[s])!==k(e[s]))&&r++;return r+n}function T(t){if(t){var e=t.toLowerCase().replace(/(.)s$/,"$1");t=mi[t]||fi[e]||e}return t}function O(t){var e,i,s={};for(i in t)a(t,i)&&(e=T(i),e&&(s[e]=t[i]));return s}function L(t){var e,i;if(0===t.indexOf("week"))e=7,i="day";else{if(0!==t.indexOf("month"))return;e=12,i="month"}De[t]=function(s,o){var r,a,h=De._locale[t],d=[];if("number"==typeof s&&(o=s,s=n),a=function(t){var e=De().utc().set(i,t);return h.call(De._locale,e,s||"")},null!=o)return a(o);for(r=0;e>r;r++)d.push(a(r));return d}}function k(t){var e=+t,i=0;return 0!==e&&isFinite(e)&&(i=e>=0?Math.floor(e):Math.ceil(e)),i}function N(t,e){return new Date(Date.UTC(t,e+1,0)).getUTCDate()}function I(t,e,i){return pe(De([t,11,31+e-i]),e,i).week}function A(t){return z(t)?366:365}function z(t){return t%4===0&&t%100!==0||t%400===0}function P(t){var e;t._a&&-2===t._pf.overflow&&(e=t._a[Ne]<0||t._a[Ne]>11?Ne:t._a[Ie]<1||t._a[Ie]>N(t._a[ke],t._a[Ne])?Ie:t._a[Ae]<0||t._a[Ae]>24||24===t._a[Ae]&&(0!==t._a[ze]||0!==t._a[Pe]||0!==t._a[Re])?Ae:t._a[ze]<0||t._a[ze]>59?ze:t._a[Pe]<0||t._a[Pe]>59?Pe:t._a[Re]<0||t._a[Re]>999?Re:-1,t._pf._overflowDayOfYear&&(ke>e||e>Ie)&&(e=Ie),t._pf.overflow=e)}function R(t){return null==t._isValid&&(t._isValid=!isNaN(t._d.getTime())&&t._pf.overflow<0&&!t._pf.empty&&!t._pf.invalidMonth&&!t._pf.nullInput&&!t._pf.invalidFormat&&!t._pf.userInvalidated,t._strict&&(t._isValid=t._isValid&&0===t._pf.charsLeftOver&&0===t._pf.unusedTokens.length&&t._pf.bigHour===n)),t._isValid}function F(t){return t?t.toLowerCase().replace("_","-"):t}function H(t){for(var e,i,s,o,n=0;n0;){if(s=Y(o.slice(0,e).join("-")))return s;if(i&&i.length>=e&&E(o,i,!0)>=e-1)break;e--}n++}return null}function Y(t){var e=null;if(!Fe[t]&&Ye)try{e=De.locale(),!function(){var t=new Error('Cannot find module "./locale"');throw t.code="MODULE_NOT_FOUND",t}(),De.locale(e)}catch(i){}return Fe[t]}function B(t,e){var i,s;return e._isUTC?(i=e.clone(),s=(De.isMoment(t)||C(t)?+t:+De(t))-+i,i._d.setTime(+i._d+s),De.updateOffset(i,!1),i):De(t).local()}function W(t){return t.match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"")}function G(t){var e,i,s=t.match(je);for(e=0,i=s.length;i>e;e++)s[e]=_i[s[e]]?_i[s[e]]:W(s[e]);return function(o){var n="";for(e=0;i>e;e++)n+=s[e]instanceof Function?s[e].call(o,t):s[e];return n}}function j(t,e){return t.isValid()?(e=U(e,t.localeData()),gi[e]||(gi[e]=G(e)),gi[e](t)):t.localeData().invalidDate()}function U(t,e){function i(t){return e.longDateFormat(t)||t}var s=5;for(Ue.lastIndex=0;s>=0&&Ue.test(t);)t=t.replace(Ue,i),Ue.lastIndex=0,s-=1;return t}function V(t,e){var i,s=e._strict;switch(t){case"Q":return ii;case"DDDD":return oi;case"YYYY":case"GGGG":case"gggg":return s?ni:qe;case"Y":case"G":case"g":return ai;case"YYYYYY":case"YYYYY":case"GGGGG":case"ggggg":return s?ri:Ze;case"S":if(s)return ii;case"SS":if(s)return si;case"SSS":if(s)return oi;case"DDD":return Xe;case"MMM":case"MMMM":case"dd":case"ddd":case"dddd":return Qe;case"a":case"A":return e._locale._meridiemParse;case"x":return ti;case"X":return ei;case"Z":case"ZZ":return $e;case"T":return Je;case"SSSS":return Ke;case"MM":case"DD":case"YY":case"GG":case"gg":case"HH":case"hh":case"mm":case"ss":case"ww":case"WW":return s?si:Ve;case"M":case"D":case"d":case"H":case"h":case"m":case"s":case"w":case"W":case"e":case"E":return Ve;case"Do":return s?e._locale._ordinalParse:e._locale._ordinalParseLenient;default:return i=new RegExp(ee(te(t.replace("\\","")),"i"))}}function X(t){t=t||"";var e=t.match($e)||[],i=e[e.length-1]||[],s=(i+"").match(pi)||["-",0,0],o=+(60*s[1])+k(s[2]);return"+"===s[0]?-o:o}function q(t,e,i){var s,o=i._a;switch(t){case"Q":null!=e&&(o[Ne]=3*(k(e)-1));break;case"M":case"MM":null!=e&&(o[Ne]=k(e)-1);break;case"MMM":case"MMMM":s=i._locale.monthsParse(e,t,i._strict),null!=s?o[Ne]=s:i._pf.invalidMonth=e;break;case"D":case"DD":null!=e&&(o[Ie]=k(e));break;case"Do":null!=e&&(o[Ie]=k(parseInt(e.match(/\d{1,2}/)[0],10)));break;case"DDD":case"DDDD":null!=e&&(i._dayOfYear=k(e));break;case"YY":o[ke]=De.parseTwoDigitYear(e);break;case"YYYY":case"YYYYY":case"YYYYYY":o[ke]=k(e);break;case"a":case"A":i._isPm=i._locale.isPM(e);break;case"h":case"hh":i._pf.bigHour=!0;case"H":case"HH":o[Ae]=k(e);break;case"m":case"mm":o[ze]=k(e);break;case"s":case"ss":o[Pe]=k(e);break;case"S":case"SS":case"SSS":case"SSSS":o[Re]=k(1e3*("0."+e));break;case"x":i._d=new Date(k(e));break;case"X":i._d=new Date(1e3*parseFloat(e));break;case"Z":case"ZZ":i._useUTC=!0,i._tzm=X(e);break;case"dd":case"ddd":case"dddd":s=i._locale.weekdaysParse(e),null!=s?(i._w=i._w||{},i._w.d=s):i._pf.invalidWeekday=e;break;case"w":case"ww":case"W":case"WW":case"d":case"e":case"E":t=t.substr(0,1);case"gggg":case"GGGG":case"GGGGG":t=t.substr(0,2),e&&(i._w=i._w||{},i._w[t]=k(e));break;case"gg":case"GG":i._w=i._w||{},i._w[t]=De.parseTwoDigitYear(e)}}function Z(t){var e,i,s,o,n,a,h;e=t._w,null!=e.GG||null!=e.W||null!=e.E?(n=1,a=4,i=r(e.GG,t._a[ke],pe(De(),1,4).year),s=r(e.W,1),o=r(e.E,1)):(n=t._locale._week.dow,a=t._locale._week.doy,i=r(e.gg,t._a[ke],pe(De(),n,a).year),s=r(e.w,1),null!=e.d?(o=e.d,n>o&&++s):o=null!=e.e?e.e+n:n),h=ue(i,s,o,a,n),t._a[ke]=h.year,t._dayOfYear=h.dayOfYear}function K(t){var e,i,s,o,n=[];if(!t._d){for(s=$(t),t._w&&null==t._a[Ie]&&null==t._a[Ne]&&Z(t),t._dayOfYear&&(o=r(t._a[ke],s[ke]),t._dayOfYear>A(o)&&(t._pf._overflowDayOfYear=!0),i=he(o,0,t._dayOfYear),t._a[Ne]=i.getUTCMonth(),t._a[Ie]=i.getUTCDate()),e=0;3>e&&null==t._a[e];++e)t._a[e]=n[e]=s[e];for(;7>e;e++)t._a[e]=n[e]=null==t._a[e]?2===e?1:0:t._a[e];24===t._a[Ae]&&0===t._a[ze]&&0===t._a[Pe]&&0===t._a[Re]&&(t._nextDay=!0,t._a[Ae]=0),t._d=(t._useUTC?he:ae).apply(null,n),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()+t._tzm),t._nextDay&&(t._a[Ae]=24)}}function Q(t){var e;t._d||(e=O(t._i),t._a=[e.year,e.month,e.day||e.date,e.hour,e.minute,e.second,e.millisecond],K(t))}function $(t){var e=new Date;return t._useUTC?[e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()]:[e.getFullYear(),e.getMonth(),e.getDate()]}function J(t){if(t._f===De.ISO_8601)return void se(t);t._a=[],t._pf.empty=!0;var e,i,s,o,r,a=""+t._i,h=a.length,d=0;for(s=U(t._f,t._locale).match(je)||[],e=0;e0&&t._pf.unusedInput.push(r),a=a.slice(a.indexOf(i)+i.length),d+=i.length),_i[o]?(i?t._pf.empty=!1:t._pf.unusedTokens.push(o),q(o,i,t)):t._strict&&!i&&t._pf.unusedTokens.push(o);t._pf.charsLeftOver=h-d,a.length>0&&t._pf.unusedInput.push(a),t._pf.bigHour===!0&&t._a[Ae]<=12&&(t._pf.bigHour=n),t._isPm&&t._a[Ae]<12&&(t._a[Ae]+=12),t._isPm===!1&&12===t._a[Ae]&&(t._a[Ae]=0),K(t),P(t)}function te(t){return t.replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(t,e,i,s,o){return e||i||s||o})}function ee(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function ie(t){var e,i,s,o,n;if(0===t._f.length)return t._pf.invalidFormat=!0,void(t._d=new Date(0/0));for(o=0;on)&&(s=n,i=e));v(t,i||e)}function se(t){var e,i,s=t._i,o=hi.exec(s);if(o){for(t._pf.iso=!0,e=0,i=li.length;i>e;e++)if(li[e][1].exec(s)){t._f=li[e][0]+(o[6]||" ");break}for(e=0,i=ci.length;i>e;e++)if(ci[e][1].exec(s)){t._f+=ci[e][0];break}s.match($e)&&(t._f+="Z"),J(t)}else t._isValid=!1}function oe(t){se(t),t._isValid===!1&&(delete t._isValid,De.createFromInputFallback(t))}function ne(t,e){var i,s=[];for(i=0;it&&a.setFullYear(t),a}function he(t){var e=new Date(Date.UTC.apply(null,arguments));return 1970>t&&e.setUTCFullYear(t),e}function de(t,e){if("string"==typeof t)if(isNaN(t)){if(t=e.weekdaysParse(t),"number"!=typeof t)return null}else t=parseInt(t,10);return t}function le(t,e,i,s,o){return o.relativeTime(e||1,!!i,t,s)}function ce(t,e,i){var s=De.duration(t).abs(),o=Oe(s.as("s")),n=Oe(s.as("m")),r=Oe(s.as("h")),a=Oe(s.as("d")),h=Oe(s.as("M")),d=Oe(s.as("y")),l=o0,l[4]=i,le.apply({},l)}function pe(t,e,i){var s,o=i-e,n=i-t.day();return n>o&&(n-=7),o-7>n&&(n+=7),s=De(t).add(n,"d"),{week:Math.ceil(s.dayOfYear()/7),year:s.year()}}function ue(t,e,i,s,o){var n,r,a=he(t,0,1).getUTCDay();return a=0===a?7:a,i=null!=i?i:o,n=o-a+(a>s?7:0)-(o>a?7:0),r=7*(e-1)+(i-o)+n+1,{year:r>0?t:t-1,dayOfYear:r>0?r:A(t-1)+r}}function me(t){var e,i=t._i,s=t._f;return t._locale=t._locale||De.localeData(t._l),null===i||s===n&&""===i?De.invalid({nullInput:!0}):("string"==typeof i&&(t._i=i=t._locale.preparse(i)),De.isMoment(i)?new f(i,!0):(s?M(s)?ie(t):J(t):re(t),e=new f(t),e._nextDay&&(e.add(1,"d"),e._nextDay=n),e))}function fe(t,e){var i,s;if(1===e.length&&M(e[0])&&(e=e[0]),!e.length)return De();for(i=e[0],s=1;s=0?"+":"-";return e+_(Math.abs(t),6)},gg:function(){return _(this.weekYear()%100,2)},gggg:function(){return _(this.weekYear(),4)},ggggg:function(){return _(this.weekYear(),5)},GG:function(){return _(this.isoWeekYear()%100,2)},GGGG:function(){return _(this.isoWeekYear(),4)},GGGGG:function(){return _(this.isoWeekYear(),5)},e:function(){return this.weekday()},E:function(){return this.isoWeekday()},a:function(){return this.localeData().meridiem(this.hours(),this.minutes(),!0)},A:function(){return this.localeData().meridiem(this.hours(),this.minutes(),!1)},H:function(){return this.hours()},h:function(){return this.hours()%12||12},m:function(){return this.minutes()},s:function(){return this.seconds()},S:function(){return k(this.milliseconds()/100)},SS:function(){return _(k(this.milliseconds()/10),2)},SSS:function(){return _(this.milliseconds(),3)},SSSS:function(){return _(this.milliseconds(),3)},Z:function(){var t=-this.zone(),e="+";return 0>t&&(t=-t,e="-"),e+_(k(t/60),2)+":"+_(k(t)%60,2)},ZZ:function(){var t=-this.zone(),e="+";return 0>t&&(t=-t,e="-"),e+_(k(t/60),2)+_(k(t)%60,2)},z:function(){return this.zoneAbbr()},zz:function(){return this.zoneName()},x:function(){return this.valueOf()},X:function(){return this.unix()},Q:function(){return this.quarter()}},xi={},wi=["months","monthsShort","weekdays","weekdaysShort","weekdaysMin"];yi.length;)Ce=yi.pop(),_i[Ce+"o"]=u(_i[Ce],Ce);for(;bi.length;)Ce=bi.pop(),_i[Ce+Ce]=p(_i[Ce],2);_i.DDDD=p(_i.DDD,3),v(m.prototype,{set:function(t){var e,i;for(i in t)e=t[i],"function"==typeof e?this[i]=e:this["_"+i]=e;this._ordinalParseLenient=new RegExp(this._ordinalParse.source+"|"+/\d{1,2}/.source)},_months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),months:function(t){return this._months[t.month()]},_monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),monthsShort:function(t){return this._monthsShort[t.month()]},monthsParse:function(t,e,i){var s,o,n;for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),s=0;12>s;s++){if(o=De.utc([2e3,s]),i&&!this._longMonthsParse[s]&&(this._longMonthsParse[s]=new RegExp("^"+this.months(o,"").replace(".","")+"$","i"),this._shortMonthsParse[s]=new RegExp("^"+this.monthsShort(o,"").replace(".","")+"$","i")),i||this._monthsParse[s]||(n="^"+this.months(o,"")+"|^"+this.monthsShort(o,""),this._monthsParse[s]=new RegExp(n.replace(".",""),"i")),i&&"MMMM"===e&&this._longMonthsParse[s].test(t))return s;if(i&&"MMM"===e&&this._shortMonthsParse[s].test(t))return s;if(!i&&this._monthsParse[s].test(t))return s}},_weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdays:function(t){return this._weekdays[t.day()]},_weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysShort:function(t){return this._weekdaysShort[t.day()]},_weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),weekdaysMin:function(t){return this._weekdaysMin[t.day()]},weekdaysParse:function(t){var e,i,s;for(this._weekdaysParse||(this._weekdaysParse=[]),e=0;7>e;e++)if(this._weekdaysParse[e]||(i=De([2e3,1]).day(e),s="^"+this.weekdays(i,"")+"|^"+this.weekdaysShort(i,"")+"|^"+this.weekdaysMin(i,""),this._weekdaysParse[e]=new RegExp(s.replace(".",""),"i")),this._weekdaysParse[e].test(t))return e},_longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY LT",LLLL:"dddd, MMMM D, YYYY LT"},longDateFormat:function(t){var e=this._longDateFormat[t];return!e&&this._longDateFormat[t.toUpperCase()]&&(e=this._longDateFormat[t.toUpperCase()].replace(/MMMM|MM|DD|dddd/g,function(t){return t.slice(1)}),this._longDateFormat[t]=e),e},isPM:function(t){return"p"===(t+"").toLowerCase().charAt(0)},_meridiemParse:/[ap]\.?m?\.?/i,meridiem:function(t,e,i){return t>11?i?"pm":"PM":i?"am":"AM"},_calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},calendar:function(t,e,i){var s=this._calendar[t];return"function"==typeof s?s.apply(e,[i]):s},_relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},relativeTime:function(t,e,i,s){var o=this._relativeTime[i];return"function"==typeof o?o(t,e,i,s):o.replace(/%d/i,t)},pastFuture:function(t,e){var i=this._relativeTime[t>0?"future":"past"];return"function"==typeof i?i(e):i.replace(/%s/i,e)},ordinal:function(t){return this._ordinal.replace("%d",t)},_ordinal:"%d",_ordinalParse:/\d{1,2}/,preparse:function(t){return t},postformat:function(t){return t},week:function(t){return pe(t,this._week.dow,this._week.doy).week},_week:{dow:0,doy:6},_invalidDate:"Invalid date",invalidDate:function(){return this._invalidDate}}),De=function(t,e,i,s){var o;return"boolean"==typeof i&&(s=i,i=n),o={},o._isAMomentObject=!0,o._i=t,o._f=e,o._l=i,o._strict=s,o._isUTC=!1,o._pf=h(),me(o)},De.suppressDeprecationWarnings=!1,De.createFromInputFallback=l("moment construction falls back to js Date. This is discouraged and will be removed in upcoming major release. Please refer to https://github.com/moment/moment/issues/1407 for more info.",function(t){t._d=new Date(t._i+(t._useUTC?" UTC":""))}),De.min=function(){var t=[].slice.call(arguments,0);return fe("isBefore",t)},De.max=function(){var t=[].slice.call(arguments,0);return fe("isAfter",t)},De.utc=function(t,e,i,s){var o;return"boolean"==typeof i&&(s=i,i=n),o={},o._isAMomentObject=!0,o._useUTC=!0,o._isUTC=!0,o._l=i,o._i=t,o._f=e,o._strict=s,o._pf=h(),me(o).utc()},De.unix=function(t){return De(1e3*t)},De.duration=function(t,e){var i,s,o,n,r=t,h=null;return De.isDuration(t)?r={ms:t._milliseconds,d:t._days,M:t._months}:"number"==typeof t?(r={},e?r[e]=t:r.milliseconds=t):(h=We.exec(t))?(i="-"===h[1]?-1:1,r={y:0,d:k(h[Ie])*i,h:k(h[Ae])*i,m:k(h[ze])*i,s:k(h[Pe])*i,ms:k(h[Re])*i}):(h=Ge.exec(t))?(i="-"===h[1]?-1:1,o=function(t){var e=t&&parseFloat(t.replace(",","."));return(isNaN(e)?0:e)*i},r={y:o(h[2]),M:o(h[3]),d:o(h[4]),h:o(h[5]),m:o(h[6]),s:o(h[7]),w:o(h[8])}):"object"==typeof r&&("from"in r||"to"in r)&&(n=w(De(r.from),De(r.to)),r={},r.ms=n.milliseconds,r.M=n.months),s=new g(r),De.isDuration(t)&&a(t,"_locale")&&(s._locale=t._locale),s},De.version=Ee,De.defaultFormat=di,De.ISO_8601=function(){},De.momentProperties=He,De.updateOffset=function(){},De.relativeTimeThreshold=function(t,e){return vi[t]===n?!1:e===n?vi[t]:(vi[t]=e,!0)},De.lang=l("moment.lang is deprecated. Use moment.locale instead.",function(t,e){return De.locale(t,e)}),De.locale=function(t,e){var i;return t&&(i="undefined"!=typeof e?De.defineLocale(t,e):De.localeData(t),i&&(De.duration._locale=De._locale=i)),De._locale._abbr},De.defineLocale=function(t,e){return null!==e?(e.abbr=t,Fe[t]||(Fe[t]=new m),Fe[t].set(e),De.locale(t),Fe[t]):(delete Fe[t],null)},De.langData=l("moment.langData is deprecated. Use moment.localeData instead.",function(t){return De.localeData(t)}),De.localeData=function(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return De._locale;if(!M(t)){if(e=Y(t))return e;t=[t]}return H(t)},De.isMoment=function(t){return t instanceof f||null!=t&&a(t,"_isAMomentObject")},De.isDuration=function(t){return t instanceof g};for(Ce=wi.length-1;Ce>=0;--Ce)L(wi[Ce]);De.normalizeUnits=function(t){return T(t)},De.invalid=function(t){var e=De.utc(0/0);return null!=t?v(e._pf,t):e._pf.userInvalidated=!0,e },De.parseZone=function(){return De.apply(null,arguments).parseZone()},De.parseTwoDigitYear=function(t){return k(t)+(k(t)>68?1900:2e3)},v(De.fn=f.prototype,{clone:function(){return De(this)},valueOf:function(){return+this._d+6e4*(this._offset||0)},unix:function(){return Math.floor(+this/1e3)},toString:function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},toDate:function(){return this._offset?new Date(+this):this._d},toISOString:function(){var t=De(this).utc();return 00:!1},parsingFlags:function(){return v({},this._pf)},invalidAt:function(){return this._pf.overflow},utc:function(t){return this.zone(0,t)},local:function(t){return this._isUTC&&(this.zone(0,t),this._isUTC=!1,t&&this.add(this._dateTzOffset(),"m")),this},format:function(t){var e=j(this,t||De.defaultFormat);return this.localeData().postformat(e)},add:S(1,"add"),subtract:S(-1,"subtract"),diff:function(t,e,i){var s,o,n,r=B(t,this),a=6e4*(this.zone()-r.zone());return e=T(e),"year"===e||"month"===e?(s=432e5*(this.daysInMonth()+r.daysInMonth()),o=12*(this.year()-r.year())+(this.month()-r.month()),n=this-De(this).startOf("month")-(r-De(r).startOf("month")),n-=6e4*(this.zone()-De(this).startOf("month").zone()-(r.zone()-De(r).startOf("month").zone())),o+=n/s,"year"===e&&(o/=12)):(s=this-r,o="second"===e?s/1e3:"minute"===e?s/6e4:"hour"===e?s/36e5:"day"===e?(s-a)/864e5:"week"===e?(s-a)/6048e5:s),i?o:b(o)},from:function(t,e){return De.duration({to:this,from:t}).locale(this.locale()).humanize(!e)},fromNow:function(t){return this.from(De(),t)},calendar:function(t){var e=t||De(),i=B(e,this).startOf("day"),s=this.diff(i,"days",!0),o=-6>s?"sameElse":-1>s?"lastWeek":0>s?"lastDay":1>s?"sameDay":2>s?"nextDay":7>s?"nextWeek":"sameElse";return this.format(this.localeData().calendar(o,this,De(e)))},isLeapYear:function(){return z(this.year())},isDST:function(){return this.zone()+t):(i=De.isMoment(t)?+t:+De(t),i<+this.clone().startOf(e))},isBefore:function(t,e){var i;return e=T("undefined"!=typeof e?e:"millisecond"),"millisecond"===e?(t=De.isMoment(t)?t:De(t),+t>+this):(i=De.isMoment(t)?+t:+De(t),+this.clone().endOf(e)t?this:t}),max:l("moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548",function(t){return t=De.apply(null,arguments),t>this?this:t}),zone:function(t,e){var i,s=this._offset||0;return null==t?this._isUTC?s:this._dateTzOffset():("string"==typeof t&&(t=X(t)),Math.abs(t)<16&&(t=60*t),!this._isUTC&&e&&(i=this._dateTzOffset()),this._offset=t,this._isUTC=!0,null!=i&&this.subtract(i,"m"),s!==t&&(!e||this._changeInProgress?D(this,De.duration(s-t,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,De.updateOffset(this,!0),this._changeInProgress=null)),this)},zoneAbbr:function(){return this._isUTC?"UTC":""},zoneName:function(){return this._isUTC?"Coordinated Universal Time":""},parseZone:function(){return this._tzm?this.zone(this._tzm):"string"==typeof this._i&&this.zone(this._i),this},hasAlignedHourOffset:function(t){return t=t?De(t).zone():0,(this.zone()-t)%60===0},daysInMonth:function(){return N(this.year(),this.month())},dayOfYear:function(t){var e=Oe((De(this).startOf("day")-De(this).startOf("year"))/864e5)+1;return null==t?e:this.add(t-e,"d")},quarter:function(t){return null==t?Math.ceil((this.month()+1)/3):this.month(3*(t-1)+this.month()%3)},weekYear:function(t){var e=pe(this,this.localeData()._week.dow,this.localeData()._week.doy).year;return null==t?e:this.add(t-e,"y")},isoWeekYear:function(t){var e=pe(this,1,4).year;return null==t?e:this.add(t-e,"y")},week:function(t){var e=this.localeData().week(this);return null==t?e:this.add(7*(t-e),"d")},isoWeek:function(t){var e=pe(this,1,4).week;return null==t?e:this.add(7*(t-e),"d")},weekday:function(t){var e=(this.day()+7-this.localeData()._week.dow)%7;return null==t?e:this.add(t-e,"d")},isoWeekday:function(t){return null==t?this.day()||7:this.day(this.day()%7?t:t-7)},isoWeeksInYear:function(){return I(this.year(),1,4)},weeksInYear:function(){var t=this.localeData()._week;return I(this.year(),t.dow,t.doy)},get:function(t){return t=T(t),this[t]()},set:function(t,e){return t=T(t),"function"==typeof this[t]&&this[t](e),this},locale:function(t){var e;return t===n?this._locale._abbr:(e=De.localeData(t),null!=e&&(this._locale=e),this)},lang:l("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(t){return t===n?this.localeData():this.locale(t)}),localeData:function(){return this._locale},_dateTzOffset:function(){return 15*Math.round(this._d.getTimezoneOffset()/15)}}),De.fn.millisecond=De.fn.milliseconds=be("Milliseconds",!1),De.fn.second=De.fn.seconds=be("Seconds",!1),De.fn.minute=De.fn.minutes=be("Minutes",!1),De.fn.hour=De.fn.hours=be("Hours",!0),De.fn.date=be("Date",!0),De.fn.dates=l("dates accessor is deprecated. Use date instead.",be("Date",!0)),De.fn.year=be("FullYear",!0),De.fn.years=l("years accessor is deprecated. Use year instead.",be("FullYear",!0)),De.fn.days=De.fn.day,De.fn.months=De.fn.month,De.fn.weeks=De.fn.week,De.fn.isoWeeks=De.fn.isoWeek,De.fn.quarters=De.fn.quarter,De.fn.toJSON=De.fn.toISOString,v(De.duration.fn=g.prototype,{_bubble:function(){var t,e,i,s=this._milliseconds,o=this._days,n=this._months,r=this._data,a=0;r.milliseconds=s%1e3,t=b(s/1e3),r.seconds=t%60,e=b(t/60),r.minutes=e%60,i=b(e/60),r.hours=i%24,o+=b(i/24),a=b(_e(o)),o-=b(xe(a)),n+=b(o/30),o%=30,a+=b(n/12),n%=12,r.days=o,r.months=n,r.years=a},abs:function(){return this._milliseconds=Math.abs(this._milliseconds),this._days=Math.abs(this._days),this._months=Math.abs(this._months),this._data.milliseconds=Math.abs(this._data.milliseconds),this._data.seconds=Math.abs(this._data.seconds),this._data.minutes=Math.abs(this._data.minutes),this._data.hours=Math.abs(this._data.hours),this._data.months=Math.abs(this._data.months),this._data.years=Math.abs(this._data.years),this},weeks:function(){return b(this.days()/7)},valueOf:function(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*k(this._months/12)},humanize:function(t){var e=ce(this,!t,this.localeData());return t&&(e=this.localeData().pastFuture(+this,e)),this.localeData().postformat(e)},add:function(t,e){var i=De.duration(t,e);return this._milliseconds+=i._milliseconds,this._days+=i._days,this._months+=i._months,this._bubble(),this},subtract:function(t,e){var i=De.duration(t,e);return this._milliseconds-=i._milliseconds,this._days-=i._days,this._months-=i._months,this._bubble(),this},get:function(t){return t=T(t),this[t.toLowerCase()+"s"]()},as:function(t){var e,i;if(t=T(t),"month"===t||"year"===t)return e=this._days+this._milliseconds/864e5,i=this._months+12*_e(e),"month"===t?i:i/12;switch(e=this._days+Math.round(xe(this._months/12)),t){case"week":return e/7+this._milliseconds/6048e5;case"day":return e+this._milliseconds/864e5;case"hour":return 24*e+this._milliseconds/36e5;case"minute":return 24*e*60+this._milliseconds/6e4;case"second":return 24*e*60*60+this._milliseconds/1e3;case"millisecond":return Math.floor(24*e*60*60*1e3)+this._milliseconds;default:throw new Error("Unknown unit "+t)}},lang:De.fn.lang,locale:De.fn.locale,toIsoString:l("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",function(){return this.toISOString()}),toISOString:function(){var t=Math.abs(this.years()),e=Math.abs(this.months()),i=Math.abs(this.days()),s=Math.abs(this.hours()),o=Math.abs(this.minutes()),n=Math.abs(this.seconds()+this.milliseconds()/1e3);return this.asSeconds()?(this.asSeconds()<0?"-":"")+"P"+(t?t+"Y":"")+(e?e+"M":"")+(i?i+"D":"")+(s||o||n?"T":"")+(s?s+"H":"")+(o?o+"M":"")+(n?n+"S":""):"P0D"},localeData:function(){return this._locale}}),De.duration.fn.toString=De.duration.fn.toISOString;for(Ce in ui)a(ui,Ce)&&we(Ce.toLowerCase());De.duration.fn.asMilliseconds=function(){return this.as("ms")},De.duration.fn.asSeconds=function(){return this.as("s")},De.duration.fn.asMinutes=function(){return this.as("m")},De.duration.fn.asHours=function(){return this.as("h")},De.duration.fn.asDays=function(){return this.as("d")},De.duration.fn.asWeeks=function(){return this.as("weeks")},De.duration.fn.asMonths=function(){return this.as("M")},De.duration.fn.asYears=function(){return this.as("y")},De.locale("en",{ordinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10,i=1===k(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th";return t+i}}),Ye?o.exports=De:(s=function(t,e,i){return i.config&&i.config()&&i.config().noGlobal===!0&&(Te.moment=Me),De}.call(e,i,e,o),!(s!==n&&(o.exports=s)),Se(!0))}).call(this)}).call(e,function(){return this}(),i(71)(t))},function(t,e,i){var s;!function(o,n){function r(){a.READY||(w.determineEventTypes(),x.each(a.gestures,function(t){D.register(t)}),w.onTouch(a.DOCUMENT,v,D.detect),w.onTouch(a.DOCUMENT,y,D.detect),a.READY=!0)}var a=function M(t,e){return new M.Instance(t,e||{})};a.VERSION="1.1.3",a.defaults={behavior:{userSelect:"none",touchAction:"pan-y",touchCallout:"none",contentZooming:"none",userDrag:"none",tapHighlightColor:"rgba(0,0,0,0)"}},a.DOCUMENT=document,a.HAS_POINTEREVENTS=navigator.pointerEnabled||navigator.msPointerEnabled,a.HAS_TOUCHEVENTS="ontouchstart"in o,a.IS_MOBILE=/mobile|tablet|ip(ad|hone|od)|android|silk/i.test(navigator.userAgent),a.NO_MOUSEEVENTS=a.HAS_TOUCHEVENTS&&a.IS_MOBILE||a.HAS_POINTEREVENTS,a.CALCULATE_INTERVAL=25;var h={},d=a.DIRECTION_DOWN="down",l=a.DIRECTION_LEFT="left",c=a.DIRECTION_UP="up",p=a.DIRECTION_RIGHT="right",u=a.POINTER_MOUSE="mouse",m=a.POINTER_TOUCH="touch",f=a.POINTER_PEN="pen",g=a.EVENT_START="start",v=a.EVENT_MOVE="move",y=a.EVENT_END="end",b=a.EVENT_RELEASE="release",_=a.EVENT_TOUCH="touch";a.READY=!1,a.plugins=a.plugins||{},a.gestures=a.gestures||{};var x=a.utils={extend:function(t,e,i){for(var s in e)!e.hasOwnProperty(s)||t[s]!==n&&i||(t[s]=e[s]);return t},on:function(t,e,i){t.addEventListener(e,i,!1)},off:function(t,e,i){t.removeEventListener(e,i,!1)},each:function(t,e,i){var s,o;if("forEach"in t)t.forEach(e,i);else if(t.length!==n){for(s=0,o=t.length;o>s;s++)if(e.call(i,t[s],s,t)===!1)return}else for(s in t)if(t.hasOwnProperty(s)&&e.call(i,t[s],s,t)===!1)return},inStr:function(t,e){return t.indexOf(e)>-1},inArray:function(t,e){if(t.indexOf){var i=t.indexOf(e);return-1===i?!1:i}for(var s=0,o=t.length;o>s;s++)if(t[s]===e)return s;return!1},toArray:function(t){return Array.prototype.slice.call(t,0)},hasParent:function(t,e){for(;t;){if(t==e)return!0;t=t.parentNode}return!1},getCenter:function(t){var e=[],i=[],s=[],o=[],n=Math.min,r=Math.max;return 1===t.length?{pageX:t[0].pageX,pageY:t[0].pageY,clientX:t[0].clientX,clientY:t[0].clientY}:(x.each(t,function(t){e.push(t.pageX),i.push(t.pageY),s.push(t.clientX),o.push(t.clientY)}),{pageX:(n.apply(Math,e)+r.apply(Math,e))/2,pageY:(n.apply(Math,i)+r.apply(Math,i))/2,clientX:(n.apply(Math,s)+r.apply(Math,s))/2,clientY:(n.apply(Math,o)+r.apply(Math,o))/2})},getVelocity:function(t,e,i){return{x:Math.abs(e/t)||0,y:Math.abs(i/t)||0}},getAngle:function(t,e){var i=e.clientX-t.clientX,s=e.clientY-t.clientY;return 180*Math.atan2(s,i)/Math.PI},getDirection:function(t,e){var i=Math.abs(t.clientX-e.clientX),s=Math.abs(t.clientY-e.clientY);return i>=s?t.clientX-e.clientX>0?l:p:t.clientY-e.clientY>0?c:d},getDistance:function(t,e){var i=e.clientX-t.clientX,s=e.clientY-t.clientY;return Math.sqrt(i*i+s*s)},getScale:function(t,e){return t.length>=2&&e.length>=2?this.getDistance(e[0],e[1])/this.getDistance(t[0],t[1]):1},getRotation:function(t,e){return t.length>=2&&e.length>=2?this.getAngle(e[1],e[0])-this.getAngle(t[1],t[0]):0},isVertical:function(t){return t==c||t==d},setPrefixedCss:function(t,e,i,s){var o=["","Webkit","Moz","O","ms"];e=x.toCamelCase(e);for(var n=0;n0&&this.started&&(r=v),this.started=!0;var d=this.collectEventData(i,r,o,t);return e!=y&&s.call(D,d),a&&(d.changedLength=h,d.eventType=a,s.call(D,d),d.eventType=r,delete d.changedLength),r==y&&(s.call(D,d),this.started=!1),r},determineEventTypes:function(){var t;return t=a.HAS_POINTEREVENTS?o.PointerEvent?["pointerdown","pointermove","pointerup pointercancel lostpointercapture"]:["MSPointerDown","MSPointerMove","MSPointerUp MSPointerCancel MSLostPointerCapture"]:a.NO_MOUSEEVENTS?["touchstart","touchmove","touchend touchcancel"]:["touchstart mousedown","touchmove mousemove","touchend touchcancel mouseup"],h[g]=t[0],h[v]=t[1],h[y]=t[2],h},getTouchList:function(t,e){if(a.HAS_POINTEREVENTS)return S.getTouchList();if(t.touches){if(e==v)return t.touches;var i=[],s=[].concat(x.toArray(t.touches),x.toArray(t.changedTouches)),o=[];return x.each(s,function(t){x.inArray(i,t.identifier)===!1&&o.push(t),i.push(t.identifier)}),o}return t.identifier=1,[t]},collectEventData:function(t,e,i,s){var o=m;return x.inStr(s.type,"mouse")||S.matchType(u,s)?o=u:S.matchType(f,s)&&(o=f),{center:x.getCenter(i),timeStamp:Date.now(),target:s.target,touches:i,eventType:e,pointerType:o,srcEvent:s,preventDefault:function(){var t=this.srcEvent;t.preventManipulation&&t.preventManipulation(),t.preventDefault&&t.preventDefault()},stopPropagation:function(){this.srcEvent.stopPropagation()},stopDetect:function(){return D.stopDetect()}}}},S=a.PointerEvent={pointers:{},getTouchList:function(){var t=[];return x.each(this.pointers,function(e){t.push(e)}),t},updatePointer:function(t,e){t==y||t!=y&&1!==e.buttons?delete this.pointers[e.pointerId]:(e.identifier=e.pointerId,this.pointers[e.pointerId]=e)},matchType:function(t,e){if(!e.pointerType)return!1;var i=e.pointerType,s={};return s[u]=i===(e.MSPOINTER_TYPE_MOUSE||u),s[m]=i===(e.MSPOINTER_TYPE_TOUCH||m),s[f]=i===(e.MSPOINTER_TYPE_PEN||f),s[t]},reset:function(){this.pointers={}}},D=a.detection={gestures:[],current:null,previous:null,stopped:!1,startDetect:function(t,e){this.current||(this.stopped=!1,this.current={inst:t,startEvent:x.extend({},e),lastEvent:!1,lastCalcEvent:!1,futureCalcEvent:!1,lastCalcData:{},name:""},this.detect(e))},detect:function(t){if(this.current&&!this.stopped){t=this.extendEventData(t);var e=this.current.inst,i=e.options;return x.each(this.gestures,function(s){!this.stopped&&e.enabled&&i[s.name]&&s.handler.call(s,t,e)},this),this.current&&(this.current.lastEvent=t),t.eventType==y&&this.stopDetect(),t}},stopDetect:function(){this.previous=x.extend({},this.current),this.current=null,this.stopped=!0},getCalculatedData:function(t,e,i,s,o){var n=this.current,r=!1,h=n.lastCalcEvent,d=n.lastCalcData;h&&t.timeStamp-h.timeStamp>a.CALCULATE_INTERVAL&&(e=h.center,i=t.timeStamp-h.timeStamp,s=t.center.clientX-h.center.clientX,o=t.center.clientY-h.center.clientY,r=!0),(t.eventType==_||t.eventType==b)&&(n.futureCalcEvent=t),(!n.lastCalcEvent||r)&&(d.velocity=x.getVelocity(i,s,o),d.angle=x.getAngle(e,t.center),d.direction=x.getDirection(e,t.center),n.lastCalcEvent=n.futureCalcEvent||t,n.futureCalcEvent=t),t.velocityX=d.velocity.x,t.velocityY=d.velocity.y,t.interimAngle=d.angle,t.interimDirection=d.direction},extendEventData:function(t){var e=this.current,i=e.startEvent,s=e.lastEvent||i;(t.eventType==_||t.eventType==b)&&(i.touches=[],x.each(t.touches,function(t){i.touches.push({clientX:t.clientX,clientY:t.clientY})}));var o=t.timeStamp-i.timeStamp,n=t.center.clientX-i.center.clientX,r=t.center.clientY-i.center.clientY;return this.getCalculatedData(t,s.center,o,n,r),x.extend(t,{startEvent:i,deltaTime:o,deltaX:n,deltaY:r,distance:x.getDistance(i.center,t.center),angle:x.getAngle(i.center,t.center),direction:x.getDirection(i.center,t.center),scale:x.getScale(i.touches,t.touches),rotation:x.getRotation(i.touches,t.touches)}),t},register:function(t){var e=t.defaults||{};return e[t.name]===n&&(e[t.name]=!0),x.extend(a.defaults,e,!0),t.index=t.index||1e3,this.gestures.push(t),this.gestures.sort(function(t,e){return t.indexe.index?1:0}),this.gestures}};a.Instance=function(t,e){var i=this;r(),this.element=t,this.enabled=!0,x.each(e,function(t,i){delete e[i],e[x.toCamelCase(i)]=t}),this.options=x.extend(x.extend({},a.defaults),e||{}),this.options.behavior&&x.toggleBehavior(this.element,this.options.behavior,!0),this.eventStartHandler=w.onTouch(t,g,function(t){i.enabled&&t.eventType==g?D.startDetect(i,t):t.eventType==_&&D.detect(t)}),this.eventHandlers=[]},a.Instance.prototype={on:function(t,e){var i=this;return w.on(i.element,t,e,function(t){i.eventHandlers.push({gesture:t,handler:e})}),i},off:function(t,e){var i=this;return w.off(i.element,t,e,function(t){var s=x.inArray({gesture:t,handler:e});s!==!1&&i.eventHandlers.splice(s,1)}),i},trigger:function(t,e){e||(e={});var i=a.DOCUMENT.createEvent("Event");i.initEvent(t,!0,!0),i.gesture=e;var s=this.element;return x.hasParent(e.target,s)&&(s=e.target),s.dispatchEvent(i),this},enable:function(t){return this.enabled=t,this},dispose:function(){var t,e;for(x.toggleBehavior(this.element,this.options.behavior,!1),t=-1;e=this.eventHandlers[++t];)x.off(this.element,e.gesture,e.handler);return this.eventHandlers=[],w.off(this.element,h[g],this.eventStartHandler),null}},function(t){function e(e,s){var o=D.current;if(!(s.options.dragMaxTouches>0&&e.touches.length>s.options.dragMaxTouches))switch(e.eventType){case g:i=!1;break;case v:if(e.distance0)){var r=Math.abs(s.options.dragMinDistance/e.distance);n.pageX+=e.deltaX*r,n.pageY+=e.deltaY*r,n.clientX+=e.deltaX*r,n.clientY+=e.deltaY*r,e=D.extendEventData(e)}(o.lastEvent.dragLockToAxis||s.options.dragLockToAxis&&s.options.dragLockMinDistance<=e.distance)&&(e.dragLockToAxis=!0);var a=o.lastEvent.direction;e.dragLockToAxis&&a!==e.direction&&(e.direction=x.isVertical(a)?e.deltaY<0?c:d:e.deltaX<0?l:p),i||(s.trigger(t+"start",e),i=!0),s.trigger(t,e),s.trigger(t+e.direction,e);var h=x.isVertical(e.direction);(s.options.dragBlockVertical&&h||s.options.dragBlockHorizontal&&!h)&&e.preventDefault();break;case b:i&&e.changedLength<=s.options.dragMaxTouches&&(s.trigger(t+"end",e),i=!1);break;case y:i=!1}}var i=!1;a.gestures.Drag={name:t,index:50,handler:e,defaults:{dragMinDistance:10,dragDistanceCorrection:!0,dragMaxTouches:1,dragBlockHorizontal:!1,dragBlockVertical:!1,dragLockToAxis:!1,dragLockMinDistance:25}}}("drag"),a.gestures.Gesture={name:"gesture",index:1337,handler:function(t,e){e.trigger(this.name,t)}},function(t){function e(e,s){var o=s.options,n=D.current;switch(e.eventType){case g:clearTimeout(i),n.name=t,i=setTimeout(function(){n&&n.name==t&&s.trigger(t,e)},o.holdTimeout);break;case v:e.distance>o.holdThreshold&&clearTimeout(i);break;case b:clearTimeout(i)}}var i;a.gestures.Hold={name:t,index:10,defaults:{holdTimeout:500,holdThreshold:2},handler:e}}("hold"),a.gestures.Release={name:"release",index:1/0,handler:function(t,e){t.eventType==b&&e.trigger(this.name,t)}},a.gestures.Swipe={name:"swipe",index:40,defaults:{swipeMinTouches:1,swipeMaxTouches:1,swipeVelocityX:.6,swipeVelocityY:.6},handler:function(t,e){if(t.eventType==b){var i=t.touches.length,s=e.options;if(is.swipeMaxTouches)return;(t.velocityX>s.swipeVelocityX||t.velocityY>s.swipeVelocityY)&&(e.trigger(this.name,t),e.trigger(this.name+t.direction,t))}}},function(t){function e(e,s){var o,n,r=s.options,a=D.current,h=D.previous;switch(e.eventType){case g:i=!1;break;case v:i=i||e.distance>r.tapMaxDistance;break;case y:!x.inStr(e.srcEvent.type,"cancel")&&e.deltaTimes.options.transformMinRotation&&s.trigger("rotate",e),o>s.options.transformMinScale&&(s.trigger("pinch",e),s.trigger("pinch"+(e.scale<1?"in":"out"),e));break;case b:i&&e.changedLength<2&&(s.trigger(t+"end",e),i=!1)}}var i=!1;a.gestures.Transform={name:t,index:45,defaults:{transformMinScale:.01,transformMinRotation:1},handler:e}}("transform"),s=function(){return a}.call(e,i,e,t),!(s!==n&&(t.exports=s))}(window)},function(t,e){e.startWithClustering=function(){this.clusterToFit(this.constants.clustering.initialMaxNodes,!0),this.updateLabels(),this.stabilize&&this._stabilize(),this.start()},e.clusterToFit=function(t,e){for(var i=this.nodeIndices.length,s=50,o=0;i>t&&s>o;)o%3==0?(this.forceAggregateHubs(!0),this.normalizeClusterLevels()):this.increaseClusterLevel(),i=this.nodeIndices.length,o+=1;o>0&&1==e&&this.repositionNodes(),this._updateCalculationNodes()},e.openCluster=function(t){var e=this.moving;if(t.clusterSize>this.constants.clustering.sectorThreshold&&this._nodeInActiveArea(t)&&("default"!=this._sector()||1!=this.nodeIndices.length)){this._addSector(t);for(var i=0;this.nodeIndices.lengthi;)this.decreaseClusterLevel(),i+=1}else this._expandClusterNode(t,!1,!0),this._updateNodeIndexList(),this._updateDynamicEdges(),this._updateCalculationNodes(),this.updateLabels();this.moving!=e&&this.start()},e.updateClustersDefault=function(){1==this.constants.clustering.enabled&&this.updateClusters(0,!1,!1)},e.increaseClusterLevel=function(){this.updateClusters(-1,!1,!0)},e.decreaseClusterLevel=function(){this.updateClusters(1,!1,!0)},e.updateClusters=function(t,e,i,s){var o=this.moving,n=this.nodeIndices.length;this.previousScale>this.scale&&0==t&&this._collapseSector(),this.previousScale>this.scale||-1==t?this._formClusters(i):(this.previousScalethis.scale||-1==t)&&(this._aggregateHubs(i),this._updateNodeIndexList()),(this.previousScale>this.scale||-1==t)&&(this.handleChains(),this._updateNodeIndexList()),this.previousScale=this.scale,this._updateDynamicEdges(),this.updateLabels(),this.nodeIndices.lengththis.constants.clustering.chainThreshold&&this._reduceAmountOfChains(1-this.constants.clustering.chainThreshold/t)},e._aggregateHubs=function(t){this._getHubSize(),this._formClustersByHub(t,!1)},e.forceAggregateHubs=function(t){var e=this.moving,i=this.nodeIndices.length;this._aggregateHubs(!0),this._updateNodeIndexList(),this._updateDynamicEdges(),this.updateLabels(),this.nodeIndices.length!=i&&(this.clusterSession+=1),(0==t||void 0===t)&&this.moving!=e&&this.start()},e._openClustersBySize=function(){for(var t in this.nodes)if(this.nodes.hasOwnProperty(t)){var e=this.nodes[t];1==e.inView()&&(e.width*this.scale>this.constants.clustering.screenSizeThreshold*this.frame.canvas.clientWidth||e.height*this.scale>this.constants.clustering.screenSizeThreshold*this.frame.canvas.clientHeight)&&this.openCluster(e)}},e._openClusters=function(t,e){for(var i=0;i1&&(t.clusterSizei)){var r=n.from,a=n.to;n.to.options.mass>n.from.options.mass&&(r=n.to,a=n.from),1==a.dynamicEdgesLength?this._addToCluster(r,a,!1):1==r.dynamicEdgesLength&&this._addToCluster(a,r,!1)}}},e._forceClustersByZoom=function(){for(var t in this.nodes)if(this.nodes.hasOwnProperty(t)){var e=this.nodes[t];if(1==e.dynamicEdgesLength&&0!=e.dynamicEdges.length){var i=e.dynamicEdges[0],s=i.toId==e.id?this.nodes[i.fromId]:this.nodes[i.toId];e.id!=s.id&&(s.options.mass>e.options.mass?this._addToCluster(s,e,!0):this._addToCluster(e,s,!0))}}},e._clusterToSmallestNeighbour=function(t){for(var e=-1,i=null,s=0;so.clusterSessions.length&&(e=o.clusterSessions.length,i=o)}null!=o&&void 0!==this.nodes[o.id]&&this._addToCluster(o,t,!0)},e._formClustersByHub=function(t,e){for(var i in this.nodes)this.nodes.hasOwnProperty(i)&&this._formClusterFromHub(this.nodes[i],t,e)},e._formClusterFromHub=function(t,e,i,s){if(void 0===s&&(s=0),t.dynamicEdgesLength>=this.hubThreshold&&0==i||t.dynamicEdgesLength==this.hubThreshold&&1==i){for(var o,n,r,a=this.constants.clustering.clusterEdgeThreshold/this.scale,h=!1,d=[],l=t.dynamicEdges.length,c=0;l>c;c++)d.push(t.dynamicEdges[c].id);if(0==e)for(h=!1,c=0;l>c;c++){var p=this.edges[d[c]];if(void 0!==p&&p.connected&&p.toId!=p.fromId&&(o=p.to.x-p.from.x,n=p.to.y-p.from.y,r=Math.sqrt(o*o+n*n),a>r)){h=!0;break}}if(!e&&h||e)for(c=0;l>c;c++)if(p=this.edges[d[c]],void 0!==p){var u=this.nodes[p.fromId==t.id?p.toId:p.fromId];u.dynamicEdges.length<=this.hubThreshold+s&&u.id!=t.id&&this._addToCluster(t,u,e)}}},e._addToCluster=function(t,e,i){t.containedNodes[e.id]=e;for(var s=0;s1)for(var s=0;s1&&(e.label="[".concat(String(e.clusterSize),"]"))}for(t in this.nodes)this.nodes.hasOwnProperty(t)&&(e=this.nodes[t],1==e.clusterSize&&(e.label=void 0!==e.originalLabel?e.originalLabel:String(e.id)))},e.normalizeClusterLevels=function(){var t,e=0,i=1e9,s=0;for(t in this.nodes)this.nodes.hasOwnProperty(t)&&(s=this.nodes[t].clusterSessions.length,s>e&&(e=s),i>s&&(i=s));if(e-i>this.constants.clustering.clusterLevelDifference){var o=this.nodeIndices.length,n=e-this.constants.clustering.clusterLevelDifference;for(t in this.nodes)this.nodes.hasOwnProperty(t)&&this.nodes[t].clusterSessions.lengths&&(s=n.dynamicEdgesLength),t+=n.dynamicEdgesLength,e+=Math.pow(n.dynamicEdgesLength,2),i+=1}t/=i,e/=i;var r=e-Math.pow(t,2),a=Math.sqrt(r);this.hubThreshold=Math.floor(t+2*a),this.hubThreshold>s&&(this.hubThreshold=s)},e._reduceAmountOfChains=function(t){this.hubThreshold=2;var e=Math.floor(this.nodeIndices.length*t);for(var i in this.nodes)this.nodes.hasOwnProperty(i)&&2==this.nodes[i].dynamicEdgesLength&&this.nodes[i].dynamicEdges.length>=2&&e>0&&(this._formClusterFromHub(this.nodes[i],!0,!0,1),e-=1)},e._getChainFraction=function(){var t=0,e=0;for(var i in this.nodes)this.nodes.hasOwnProperty(i)&&(2==this.nodes[i].dynamicEdgesLength&&this.nodes[i].dynamicEdges.length>=2&&(t+=1),e+=1);return t/e}},function(t,e,i){var s=i(1),o=i(40);e._putDataInSector=function(){this.sectors.active[this._sector()].nodes=this.nodes,this.sectors.active[this._sector()].edges=this.edges,this.sectors.active[this._sector()].nodeIndices=this.nodeIndices},e._switchToSector=function(t,e){void 0===e||"active"==e?this._switchToActiveSector(t):this._switchToFrozenSector(t)},e._switchToActiveSector=function(t){this.nodeIndices=this.sectors.active[t].nodeIndices,this.nodes=this.sectors.active[t].nodes,this.edges=this.sectors.active[t].edges},e._switchToSupportSector=function(){this.nodeIndices=this.sectors.support.nodeIndices,this.nodes=this.sectors.support.nodes,this.edges=this.sectors.support.edges},e._switchToFrozenSector=function(t){this.nodeIndices=this.sectors.frozen[t].nodeIndices,this.nodes=this.sectors.frozen[t].nodes,this.edges=this.sectors.frozen[t].edges},e._loadLatestSector=function(){this._switchToSector(this._sector())},e._sector=function(){return this.activeSector[this.activeSector.length-1]},e._previousSector=function(){if(this.activeSector.length>1)return this.activeSector[this.activeSector.length-2];throw new TypeError("there are not enough sectors in the this.activeSector array.")},e._setActiveSector=function(t){this.activeSector.push(t)},e._forgetLastSector=function(){this.activeSector.pop()},e._createNewSector=function(t){this.sectors.active[t]={nodes:{},edges:{},nodeIndices:[],formationScale:this.scale,drawingNode:void 0},this.sectors.active[t].drawingNode=new o({id:t,color:{background:"#eaefef",border:"495c5e"}},{},{},this.constants),this.sectors.active[t].drawingNode.clusterSize=2},e._deleteActiveSector=function(t){delete this.sectors.active[t]},e._deleteFrozenSector=function(t){delete this.sectors.frozen[t]},e._freezeSector=function(t){this.sectors.frozen[t]=this.sectors.active[t],this._deleteActiveSector(t)},e._activateSector=function(t){this.sectors.active[t]=this.sectors.frozen[t],this._deleteFrozenSector(t)},e._mergeThisWithFrozen=function(t){for(var e in this.nodes)this.nodes.hasOwnProperty(e)&&(this.sectors.frozen[t].nodes[e]=this.nodes[e]);for(var i in this.edges)this.edges.hasOwnProperty(i)&&(this.sectors.frozen[t].edges[i]=this.edges[i]);for(var s=0;s1?this[t](o[0],o[1]):this[t](e))}return this._loadLatestSector(),i},e._doInSupportSector=function(t,e){var i=!1;if(void 0===e)this._switchToSupportSector(),i=this[t]();else{this._switchToSupportSector();var s=Array.prototype.splice.call(arguments,1);i=s.length>1?this[t](s[0],s[1]):this[t](e)}return this._loadLatestSector(),i},e._doInAllFrozenSectors=function(t,e){if(void 0===e)for(var i in this.sectors.frozen)this.sectors.frozen.hasOwnProperty(i)&&(this._switchToFrozenSector(i),this[t]());else for(var i in this.sectors.frozen)if(this.sectors.frozen.hasOwnProperty(i)){this._switchToFrozenSector(i);var s=Array.prototype.splice.call(arguments,1);s.length>1?this[t](s[0],s[1]):this[t](e)}this._loadLatestSector()},e._doInAllSectors=function(t,e){var i=Array.prototype.splice.call(arguments,1);void 0===e?(this._doInAllActiveSectors(t),this._doInAllFrozenSectors(t)):i.length>1?(this._doInAllActiveSectors(t,i[0],i[1]),this._doInAllFrozenSectors(t,i[0],i[1])):(this._doInAllActiveSectors(t,e),this._doInAllFrozenSectors(t,e))},e._clearNodeIndexList=function(){var t=this._sector();this.sectors.active[t].nodeIndices=[],this.nodeIndices=this.sectors.active[t].nodeIndices},e._drawSectorNodes=function(t,e){var i,s=1e9,o=-1e9,n=1e9,r=-1e9;for(var a in this.sectors[e])if(this.sectors[e].hasOwnProperty(a)&&void 0!==this.sectors[e][a].drawingNode){this._switchToSector(a,e),s=1e9,o=-1e9,n=1e9,r=-1e9;for(var h in this.nodes)this.nodes.hasOwnProperty(h)&&(i=this.nodes[h],i.resize(t),n>i.x-.5*i.width&&(n=i.x-.5*i.width),ri.y-.5*i.height&&(s=i.y-.5*i.height),o0?this.nodes[i[i.length-1]]:null},e._getEdgesOverlappingWith=function(t,e){var i=this.edges;for(var s in i)i.hasOwnProperty(s)&&i[s].isOverlappingWith(t)&&e.push(s)},e._getAllEdgesOverlappingWith=function(t){var e=[];return this._doInAllActiveSectors("_getEdgesOverlappingWith",t,e),e},e._getEdgeAt=function(t){var e=this._pointerToPositionObject(t),i=this._getAllEdgesOverlappingWith(e);return i.length>0?this.edges[i[i.length-1]]:null},e._addToSelection=function(t){t instanceof s?this.selectionObj.nodes[t.id]=t:this.selectionObj.edges[t.id]=t},e._addToHover=function(t){t instanceof s?this.hoverObj.nodes[t.id]=t:this.hoverObj.edges[t.id]=t},e._removeFromSelection=function(t){t instanceof s?delete this.selectionObj.nodes[t.id]:delete this.selectionObj.edges[t.id]},e._unselectAll=function(t){void 0===t&&(t=!1);for(var e in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(e)&&this.selectionObj.nodes[e].unselect();for(var i in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(i)&&this.selectionObj.edges[i].unselect();this.selectionObj={nodes:{},edges:{}},0==t&&this.emit("select",this.getSelection())},e._unselectClusters=function(t){void 0===t&&(t=!1);for(var e in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(e)&&this.selectionObj.nodes[e].clusterSize>1&&(this.selectionObj.nodes[e].unselect(),this._removeFromSelection(this.selectionObj.nodes[e]));0==t&&this.emit("select",this.getSelection())},e._getSelectedNodeCount=function(){var t=0;for(var e in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(e)&&(t+=1);return t},e._getSelectedNode=function(){for(var t in this.selectionObj.nodes)if(this.selectionObj.nodes.hasOwnProperty(t))return this.selectionObj.nodes[t];return null},e._getSelectedEdge=function(){for(var t in this.selectionObj.edges)if(this.selectionObj.edges.hasOwnProperty(t))return this.selectionObj.edges[t];return null},e._getSelectedEdgeCount=function(){var t=0;for(var e in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(e)&&(t+=1);return t},e._getSelectedObjectCount=function(){var t=0;for(var e in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(e)&&(t+=1);for(var i in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(i)&&(t+=1);return t},e._selectionIsEmpty=function(){for(var t in this.selectionObj.nodes)if(this.selectionObj.nodes.hasOwnProperty(t))return!1;for(var e in this.selectionObj.edges)if(this.selectionObj.edges.hasOwnProperty(e))return!1;return!0},e._clusterInSelection=function(){for(var t in this.selectionObj.nodes)if(this.selectionObj.nodes.hasOwnProperty(t)&&this.selectionObj.nodes[t].clusterSize>1)return!0;return!1},e._selectConnectedEdges=function(t){for(var e=0;ei;i++){o=t[i];var n=this.nodes[o];if(!n)throw new RangeError('Node with id "'+o+'" not found');this._selectObject(n,!0,!0,e,!0)}this.redraw()},e.selectEdges=function(t){var e,i,s;if(!t||void 0==t.length)throw"Selection must be an array with ids";for(this._unselectAll(!0),e=0,i=t.length;i>e;e++){s=t[e];var o=this.edges[s];if(!o)throw new RangeError('Edge with id "'+s+'" not found');this._selectObject(o,!0,!0,!1,!0)}this.redraw()},e._updateSelection=function(){for(var t in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(t)&&(this.nodes.hasOwnProperty(t)||delete this.selectionObj.nodes[t]);for(var e in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(e)&&(this.edges.hasOwnProperty(e)||delete this.selectionObj.edges[e])}},function(t,e,i){var s=i(1),o=i(40),n=i(37);e._clearManipulatorBar=function(){for(;this.manipulationDiv.hasChildNodes();)this.manipulationDiv.removeChild(this.manipulationDiv.firstChild);this.manipulationDOM={},this._manipulationReleaseOverload=function(){},delete this.sectors.support.nodes.targetNode,delete this.sectors.support.nodes.targetViaNode,this.controlNodesActive=!1},e._restoreOverloadedFunctions=function(){for(var t in this.cachedFunctions)this.cachedFunctions.hasOwnProperty(t)&&(this[t]=this.cachedFunctions[t])},e._toggleEditMode=function(){this.editMode=!this.editMode;var t=this.manipulationDiv,e=this.closeDiv,i=this.editModeDiv;1==this.editMode?(t.style.display="block",e.style.display="block",i.style.display="none",e.onclick=this._toggleEditMode.bind(this)):(t.style.display="none",e.style.display="none",i.style.display="block",e.onclick=null),this._createManipulatorBar()},e._createManipulatorBar=function(){this.boundFunction&&this.off("select",this.boundFunction);var t=this.constants.locales[this.constants.locale];if(void 0!==this.edgeBeingEdited&&(this.edgeBeingEdited._disableControlNodes(),this.edgeBeingEdited=void 0,this.selectedControlNode=null,this.controlNodesActive=!1,this._redraw()),this._restoreOverloadedFunctions(),this.freezeSimulation=!1,this.blockConnectingEdgeSelection=!1,this.forceAppendSelection=!1,this.manipulationDOM={},1==this.editMode){for(;this.manipulationDiv.hasChildNodes();)this.manipulationDiv.removeChild(this.manipulationDiv.firstChild);this.manipulationDOM.addNodeSpan=document.createElement("span"),this.manipulationDOM.addNodeSpan.className="network-manipulationUI add",this.manipulationDOM.addNodeLabelSpan=document.createElement("span"),this.manipulationDOM.addNodeLabelSpan.className="network-manipulationLabel",this.manipulationDOM.addNodeLabelSpan.innerHTML=t.addNode,this.manipulationDOM.addNodeSpan.appendChild(this.manipulationDOM.addNodeLabelSpan),this.manipulationDOM.seperatorLineDiv1=document.createElement("div"),this.manipulationDOM.seperatorLineDiv1.className="network-seperatorLine",this.manipulationDOM.addEdgeSpan=document.createElement("span"),this.manipulationDOM.addEdgeSpan.className="network-manipulationUI connect",this.manipulationDOM.addEdgeLabelSpan=document.createElement("span"),this.manipulationDOM.addEdgeLabelSpan.className="network-manipulationLabel",this.manipulationDOM.addEdgeLabelSpan.innerHTML=t.addEdge,this.manipulationDOM.addEdgeSpan.appendChild(this.manipulationDOM.addEdgeLabelSpan),this.manipulationDiv.appendChild(this.manipulationDOM.addNodeSpan),this.manipulationDiv.appendChild(this.manipulationDOM.seperatorLineDiv1),this.manipulationDiv.appendChild(this.manipulationDOM.addEdgeSpan),1==this._getSelectedNodeCount()&&this.triggerFunctions.edit?(this.manipulationDOM.seperatorLineDiv2=document.createElement("div"),this.manipulationDOM.seperatorLineDiv2.className="network-seperatorLine",this.manipulationDOM.editNodeSpan=document.createElement("span"),this.manipulationDOM.editNodeSpan.className="network-manipulationUI edit",this.manipulationDOM.editNodeLabelSpan=document.createElement("span"),this.manipulationDOM.editNodeLabelSpan.className="network-manipulationLabel",this.manipulationDOM.editNodeLabelSpan.innerHTML=t.editNode,this.manipulationDOM.editNodeSpan.appendChild(this.manipulationDOM.editNodeLabelSpan),this.manipulationDiv.appendChild(this.manipulationDOM.seperatorLineDiv2),this.manipulationDiv.appendChild(this.manipulationDOM.editNodeSpan)):1==this._getSelectedEdgeCount()&&0==this._getSelectedNodeCount()&&(this.manipulationDOM.seperatorLineDiv3=document.createElement("div"),this.manipulationDOM.seperatorLineDiv3.className="network-seperatorLine",this.manipulationDOM.editEdgeSpan=document.createElement("span"),this.manipulationDOM.editEdgeSpan.className="network-manipulationUI edit",this.manipulationDOM.editEdgeLabelSpan=document.createElement("span"),this.manipulationDOM.editEdgeLabelSpan.className="network-manipulationLabel",this.manipulationDOM.editEdgeLabelSpan.innerHTML=t.editEdge,this.manipulationDOM.editEdgeSpan.appendChild(this.manipulationDOM.editEdgeLabelSpan),this.manipulationDiv.appendChild(this.manipulationDOM.seperatorLineDiv3),this.manipulationDiv.appendChild(this.manipulationDOM.editEdgeSpan)),0==this._selectionIsEmpty()&&(this.manipulationDOM.seperatorLineDiv4=document.createElement("div"),this.manipulationDOM.seperatorLineDiv4.className="network-seperatorLine",this.manipulationDOM.deleteSpan=document.createElement("span"),this.manipulationDOM.deleteSpan.className="network-manipulationUI delete",this.manipulationDOM.deleteLabelSpan=document.createElement("span"),this.manipulationDOM.deleteLabelSpan.className="network-manipulationLabel",this.manipulationDOM.deleteLabelSpan.innerHTML=t.del,this.manipulationDOM.deleteSpan.appendChild(this.manipulationDOM.deleteLabelSpan),this.manipulationDiv.appendChild(this.manipulationDOM.seperatorLineDiv4),this.manipulationDiv.appendChild(this.manipulationDOM.deleteSpan)),this.manipulationDOM.addNodeSpan.onclick=this._createAddNodeToolbar.bind(this),this.manipulationDOM.addEdgeSpan.onclick=this._createAddEdgeToolbar.bind(this),1==this._getSelectedNodeCount()&&this.triggerFunctions.edit?this.manipulationDOM.editNodeSpan.onclick=this._editNode.bind(this):1==this._getSelectedEdgeCount()&&0==this._getSelectedNodeCount()&&(this.manipulationDOM.editEdgeSpan.onclick=this._createEditEdgeToolbar.bind(this)),0==this._selectionIsEmpty()&&(this.manipulationDOM.deleteSpan.onclick=this._deleteSelected.bind(this)),this.closeDiv.onclick=this._toggleEditMode.bind(this),this.boundFunction=this._createManipulatorBar.bind(this),this.on("select",this.boundFunction)}else{for(;this.editModeDiv.hasChildNodes();)this.editModeDiv.removeChild(this.editModeDiv.firstChild);this.manipulationDOM.editModeSpan=document.createElement("span"),this.manipulationDOM.editModeSpan.className="network-manipulationUI edit editmode",this.manipulationDOM.editModeLabelSpan=document.createElement("span"),this.manipulationDOM.editModeLabelSpan.className="network-manipulationLabel",this.manipulationDOM.editModeLabelSpan.innerHTML=t.edit,this.manipulationDOM.editModeSpan.appendChild(this.manipulationDOM.editModeLabelSpan),this.editModeDiv.appendChild(this.manipulationDOM.editModeSpan),this.manipulationDOM.editModeSpan.onclick=this._toggleEditMode.bind(this)}},e._createAddNodeToolbar=function(){this._clearManipulatorBar(),this.boundFunction&&this.off("select",this.boundFunction);var t=this.constants.locales[this.constants.locale];this.manipulationDOM={},this.manipulationDOM.backSpan=document.createElement("span"),this.manipulationDOM.backSpan.className="network-manipulationUI back",this.manipulationDOM.backLabelSpan=document.createElement("span"),this.manipulationDOM.backLabelSpan.className="network-manipulationLabel",this.manipulationDOM.backLabelSpan.innerHTML=t.back,this.manipulationDOM.backSpan.appendChild(this.manipulationDOM.backLabelSpan),this.manipulationDOM.seperatorLineDiv1=document.createElement("div"),this.manipulationDOM.seperatorLineDiv1.className="network-seperatorLine",this.manipulationDOM.descriptionSpan=document.createElement("span"),this.manipulationDOM.descriptionSpan.className="network-manipulationUI none",this.manipulationDOM.descriptionLabelSpan=document.createElement("span"),this.manipulationDOM.descriptionLabelSpan.className="network-manipulationLabel",this.manipulationDOM.descriptionLabelSpan.innerHTML=t.addDescription,this.manipulationDOM.descriptionSpan.appendChild(this.manipulationDOM.descriptionLabelSpan),this.manipulationDiv.appendChild(this.manipulationDOM.backSpan),this.manipulationDiv.appendChild(this.manipulationDOM.seperatorLineDiv1),this.manipulationDiv.appendChild(this.manipulationDOM.descriptionSpan),this.manipulationDOM.backSpan.onclick=this._createManipulatorBar.bind(this),this.boundFunction=this._addNode.bind(this),this.on("select",this.boundFunction)},e._createAddEdgeToolbar=function(){this._clearManipulatorBar(),this._unselectAll(!0),this.freezeSimulation=!0;var t=this.constants.locales[this.constants.locale];this.boundFunction&&this.off("select",this.boundFunction),this._unselectAll(),this.forceAppendSelection=!1,this.blockConnectingEdgeSelection=!0,this.manipulationDOM={},this.manipulationDOM.backSpan=document.createElement("span"),this.manipulationDOM.backSpan.className="network-manipulationUI back",this.manipulationDOM.backLabelSpan=document.createElement("span"),this.manipulationDOM.backLabelSpan.className="network-manipulationLabel",this.manipulationDOM.backLabelSpan.innerHTML=t.back,this.manipulationDOM.backSpan.appendChild(this.manipulationDOM.backLabelSpan),this.manipulationDOM.seperatorLineDiv1=document.createElement("div"),this.manipulationDOM.seperatorLineDiv1.className="network-seperatorLine",this.manipulationDOM.descriptionSpan=document.createElement("span"),this.manipulationDOM.descriptionSpan.className="network-manipulationUI none",this.manipulationDOM.descriptionLabelSpan=document.createElement("span"),this.manipulationDOM.descriptionLabelSpan.className="network-manipulationLabel",this.manipulationDOM.descriptionLabelSpan.innerHTML=t.edgeDescription,this.manipulationDOM.descriptionSpan.appendChild(this.manipulationDOM.descriptionLabelSpan),this.manipulationDiv.appendChild(this.manipulationDOM.backSpan),this.manipulationDiv.appendChild(this.manipulationDOM.seperatorLineDiv1),this.manipulationDiv.appendChild(this.manipulationDOM.descriptionSpan),this.manipulationDOM.backSpan.onclick=this._createManipulatorBar.bind(this),this.boundFunction=this._handleConnect.bind(this),this.on("select",this.boundFunction),this.cachedFunctions._handleTouch=this._handleTouch,this.cachedFunctions._manipulationReleaseOverload=this._manipulationReleaseOverload,this.cachedFunctions._handleDragStart=this._handleDragStart,this.cachedFunctions._handleDragEnd=this._handleDragEnd,this._handleTouch=this._handleConnect,this._manipulationReleaseOverload=function(){},this._handleDragStart=function(){},this._handleDragEnd=this._finishConnect,this._redraw()},e._createEditEdgeToolbar=function(){this._clearManipulatorBar(),this.controlNodesActive=!0,this.boundFunction&&this.off("select",this.boundFunction),this.edgeBeingEdited=this._getSelectedEdge(),this.edgeBeingEdited._enableControlNodes();var t=this.constants.locales[this.constants.locale];this.manipulationDOM={},this.manipulationDOM.backSpan=document.createElement("span"),this.manipulationDOM.backSpan.className="network-manipulationUI back",this.manipulationDOM.backLabelSpan=document.createElement("span"),this.manipulationDOM.backLabelSpan.className="network-manipulationLabel",this.manipulationDOM.backLabelSpan.innerHTML=t.back,this.manipulationDOM.backSpan.appendChild(this.manipulationDOM.backLabelSpan),this.manipulationDOM.seperatorLineDiv1=document.createElement("div"),this.manipulationDOM.seperatorLineDiv1.className="network-seperatorLine",this.manipulationDOM.descriptionSpan=document.createElement("span"),this.manipulationDOM.descriptionSpan.className="network-manipulationUI none",this.manipulationDOM.descriptionLabelSpan=document.createElement("span"),this.manipulationDOM.descriptionLabelSpan.className="network-manipulationLabel",this.manipulationDOM.descriptionLabelSpan.innerHTML=t.editEdgeDescription,this.manipulationDOM.descriptionSpan.appendChild(this.manipulationDOM.descriptionLabelSpan),this.manipulationDiv.appendChild(this.manipulationDOM.backSpan),this.manipulationDiv.appendChild(this.manipulationDOM.seperatorLineDiv1),this.manipulationDiv.appendChild(this.manipulationDOM.descriptionSpan),this.manipulationDOM.backSpan.onclick=this._createManipulatorBar.bind(this),this.cachedFunctions._handleTouch=this._handleTouch,this.cachedFunctions._manipulationReleaseOverload=this._manipulationReleaseOverload,this.cachedFunctions._handleTap=this._handleTap,this.cachedFunctions._handleDragStart=this._handleDragStart,this.cachedFunctions._handleOnDrag=this._handleOnDrag,this._handleTouch=this._selectControlNode,this._handleTap=function(){},this._handleOnDrag=this._controlNodeDrag,this._handleDragStart=function(){},this._manipulationReleaseOverload=this._releaseControlNode,this._redraw()},e._selectControlNode=function(t){this.edgeBeingEdited.controlNodes.from.unselect(),this.edgeBeingEdited.controlNodes.to.unselect(),this.selectedControlNode=this.edgeBeingEdited._getSelectedControlNode(this._XconvertDOMtoCanvas(t.x),this._YconvertDOMtoCanvas(t.y)),null!==this.selectedControlNode&&(this.selectedControlNode.select(),this.freezeSimulation=!0),this._redraw()},e._controlNodeDrag=function(t){var e=this._getPointer(t.gesture.center);null!==this.selectedControlNode&&void 0!==this.selectedControlNode&&(this.selectedControlNode.x=this._XconvertDOMtoCanvas(e.x),this.selectedControlNode.y=this._YconvertDOMtoCanvas(e.y)),this._redraw()},e._releaseControlNode=function(t){var e=this._getNodeAt(t);null!==e?(1==this.edgeBeingEdited.controlNodes.from.selected&&(this._editEdge(e.id,this.edgeBeingEdited.to.id),this.edgeBeingEdited.controlNodes.from.unselect()),1==this.edgeBeingEdited.controlNodes.to.selected&&(this._editEdge(this.edgeBeingEdited.from.id,e.id),this.edgeBeingEdited.controlNodes.to.unselect())):this.edgeBeingEdited._restoreControlNodes(),this.freezeSimulation=!1,this._redraw()},e._handleConnect=function(t){if(0==this._getSelectedNodeCount()){var e=this._getNodeAt(t);if(null!=e)if(e.clusterSize>1)alert(this.constants.locales[this.constants.locale].createEdgeError);else{this._selectObject(e,!1);var i=this.sectors.support.nodes;i.targetNode=new o({id:"targetNode"},{},{},this.constants);var s=i.targetNode;s.x=e.x,s.y=e.y,this.edges.connectionEdge=new n({id:"connectionEdge",from:e.id,to:s.id},this,this.constants);var r=this.edges.connectionEdge;r.from=e,r.connected=!0,r.options.smoothCurves={enabled:!0,dynamic:!1,type:"continuous",roundness:.5},r.selected=!0,r.to=s,this.cachedFunctions._handleOnDrag=this._handleOnDrag,this._handleOnDrag=function(t){var e=this._getPointer(t.gesture.center),i=this.edges.connectionEdge;i.to.x=this._XconvertDOMtoCanvas(e.x),i.to.y=this._YconvertDOMtoCanvas(e.y)},this.moving=!0,this.start()}}},e._finishConnect=function(t){if(1==this._getSelectedNodeCount()){var e=this._getPointer(t.gesture.center);this._handleOnDrag=this.cachedFunctions._handleOnDrag,delete this.cachedFunctions._handleOnDrag;var i=this.edges.connectionEdge.fromId;delete this.edges.connectionEdge,delete this.sectors.support.nodes.targetNode,delete this.sectors.support.nodes.targetViaNode;var s=this._getNodeAt(e);null!=s&&(s.clusterSize>1?alert(this.constants.locales[this.constants.locale].createEdgeError):(this._createEdge(i,s.id),this._createManipulatorBar())),this._unselectAll()}},e._addNode=function(){if(this._selectionIsEmpty()&&1==this.editMode){var t=this._pointerToPositionObject(this.pointerPosition),e={id:s.randomUUID(),x:t.left,y:t.top,label:"new",allowedToMoveX:!0,allowedToMoveY:!0};if(this.triggerFunctions.add){if(2!=this.triggerFunctions.add.length)throw new Error("The function for add does not support two arguments (data,callback)");var i=this;this.triggerFunctions.add(e,function(t){i.nodesData.add(t),i._createManipulatorBar(),i.moving=!0,i.start()})}else this.nodesData.add(e),this._createManipulatorBar(),this.moving=!0,this.start()}},e._createEdge=function(t,e){if(1==this.editMode){var i={from:t,to:e};if(this.triggerFunctions.connect){if(2!=this.triggerFunctions.connect.length)throw new Error("The function for connect does not support two arguments (data,callback)");var s=this;this.triggerFunctions.connect(i,function(t){s.edgesData.add(t),s.moving=!0,s.start()})}else this.edgesData.add(i),this.moving=!0,this.start()}},e._editEdge=function(t,e){if(1==this.editMode){var i={id:this.edgeBeingEdited.id,from:t,to:e};if(this.triggerFunctions.editEdge){if(2!=this.triggerFunctions.editEdge.length)throw new Error("The function for edit does not support two arguments (data, callback)");var s=this;this.triggerFunctions.editEdge(i,function(t){s.edgesData.update(t),s.moving=!0,s.start()})}else this.edgesData.update(i),this.moving=!0,this.start()}},e._editNode=function(){if(!this.triggerFunctions.edit||1!=this.editMode)throw new Error("No edit function has been bound to this button"); -var t=this._getSelectedNode(),e={id:t.id,label:t.label,group:t.options.group,shape:t.options.shape,color:{background:t.options.color.background,border:t.options.color.border,highlight:{background:t.options.color.highlight.background,border:t.options.color.highlight.border}}};if(2!=this.triggerFunctions.edit.length)throw new Error("The function for edit does not support two arguments (data, callback)");var i=this;this.triggerFunctions.edit(e,function(t){i.nodesData.update(t),i._createManipulatorBar(),i.moving=!0,i.start()})},e._deleteSelected=function(){if(!this._selectionIsEmpty()&&1==this.editMode)if(this._clusterInSelection())alert(this.constants.locales[this.constants.locale].deleteClusterError);else{var t=this.getSelectedNodes(),e=this.getSelectedEdges();if(this.triggerFunctions.del){var i=this,s={nodes:t,edges:e};if(!(this.triggerFunctions.del.length=2))throw new Error("The function for delete does not support two arguments (data, callback)");this.triggerFunctions.del(s,function(t){i.edgesData.remove(t.edges),i.nodesData.remove(t.nodes),i._unselectAll(),i.moving=!0,i.start()})}else this.edgesData.remove(e),this.nodesData.remove(t),this._unselectAll(),this.moving=!0,this.start()}}},function(t,e,i){var s=(i(1),i(45));e._cleanNavigation=function(){if(0!=this.navigationHammers.existing.length){for(var t=0;t0){"RL"==this.constants.hierarchicalLayout.direction||"DU"==this.constants.hierarchicalLayout.direction?this.constants.hierarchicalLayout.levelSeparation*=-1:this.constants.hierarchicalLayout.levelSeparation=Math.abs(this.constants.hierarchicalLayout.levelSeparation),"RL"==this.constants.hierarchicalLayout.direction||"LR"==this.constants.hierarchicalLayout.direction?1==this.constants.smoothCurves.enabled&&(this.constants.smoothCurves.type="vertical"):1==this.constants.smoothCurves.enabled&&(this.constants.smoothCurves.type="horizontal");var t,e,i=0,s=!1,o=!1;for(e in this.nodes)this.nodes.hasOwnProperty(e)&&(t=this.nodes[e],-1!=t.level?s=!0:o=!0,is&&(n.xFixed=!1,n.x=i[n.level].minPos,r=!0):n.yFixed&&n.level>s&&(n.yFixed=!1,n.y=i[n.level].minPos,r=!0),1==r&&(i[n.level].minPos+=i[n.level].nodeSpacing,n.edges.length>1&&this._placeBranchNodes(n.edges,n.id,i,n.level))}},e._setLevel=function(t,e,i){for(var s=0;st)&&(o.level=t,o.edges.length>1&&this._setLevel(t+1,o.edges,o.id))}},e._setLevelDirected=function(t,e,i){this.nodes[i].hierarchyEnumerated=!0;for(var s=0;s1&&o.hierarchyEnumerated===!1&&this._setLevelDirected(o.level,o.edges,o.id)}},e._restoreNodes=function(){for(var t in this.nodes)this.nodes.hasOwnProperty(t)&&(this.nodes[t].xFixed=!1,this.nodes[t].yFixed=!1)}},function(t,e,i){function s(){this.constants.smoothCurves.enabled=!this.constants.smoothCurves.enabled;var t=document.getElementById("graph_toggleSmooth");t.style.background=1==this.constants.smoothCurves.enabled?"#A4FF56":"#FF8532",this._configureSmoothCurves(!1)}function o(){for(var t in this.calculationNodes)this.calculationNodes.hasOwnProperty(t)&&(this.calculationNodes[t].vx=0,this.calculationNodes[t].vy=0,this.calculationNodes[t].fx=0,this.calculationNodes[t].fy=0);1==this.constants.hierarchicalLayout.enabled?(this._setupHierarchicalLayout(),a.call(this,"graph_H_nd",1,"physics_hierarchicalRepulsion_nodeDistance"),a.call(this,"graph_H_cg",1,"physics_centralGravity"),a.call(this,"graph_H_sc",1,"physics_springConstant"),a.call(this,"graph_H_sl",1,"physics_springLength"),a.call(this,"graph_H_damp",1,"physics_damping")):this.repositionNodes(),this.moving=!0,this.start()}function n(){var t="No options are required, default values used.",e=[],i=document.getElementById("graph_physicsMethod1"),s=document.getElementById("graph_physicsMethod2");if(1==i.checked){if(this.constants.physics.barnesHut.gravitationalConstant!=this.backupConstants.physics.barnesHut.gravitationalConstant&&e.push("gravitationalConstant: "+this.constants.physics.barnesHut.gravitationalConstant),this.constants.physics.centralGravity!=this.backupConstants.physics.barnesHut.centralGravity&&e.push("centralGravity: "+this.constants.physics.centralGravity),this.constants.physics.springLength!=this.backupConstants.physics.barnesHut.springLength&&e.push("springLength: "+this.constants.physics.springLength),this.constants.physics.springConstant!=this.backupConstants.physics.barnesHut.springConstant&&e.push("springConstant: "+this.constants.physics.springConstant),this.constants.physics.damping!=this.backupConstants.physics.barnesHut.damping&&e.push("damping: "+this.constants.physics.damping),0!=e.length){t="var options = {",t+="physics: {barnesHut: {";for(var o=0;othis.constants.clustering.clusterThreshold&&1==this.constants.clustering.enabled&&this.clusterToFit(this.constants.clustering.reduceToNodes,!1),this._calculateForces())},e._calculateForces=function(){this._calculateGravitationalForces(),this._calculateNodeForces(),this.constants.physics.springConstant>0&&(1==this.constants.smoothCurves.enabled&&1==this.constants.smoothCurves.dynamic?this._calculateSpringForcesWithSupport():1==this.constants.physics.hierarchicalRepulsion.enabled?this._calculateHierarchicalSpringForces():this._calculateSpringForces())},e._updateCalculationNodes=function(){if(1==this.constants.smoothCurves.enabled&&1==this.constants.smoothCurves.dynamic){this.calculationNodes={},this.calculationNodeIndices=[];for(var t in this.nodes)this.nodes.hasOwnProperty(t)&&(this.calculationNodes[t]=this.nodes[t]);var e=this.sectors.support.nodes;for(var i in e)e.hasOwnProperty(i)&&(this.edges.hasOwnProperty(e[i].parentEdgeId)?this.calculationNodes[i]=e[i]:e[i]._setForce(0,0));for(var s in this.calculationNodes)this.calculationNodes.hasOwnProperty(s)&&this.calculationNodeIndices.push(s)}else this.calculationNodes=this.nodes,this.calculationNodeIndices=this.nodeIndices},e._calculateGravitationalForces=function(){var t,e,i,s,o,n=this.calculationNodes,r=this.constants.physics.centralGravity,a=0;for(o=0;oSimulation Mode:Barnes HutRepulsionHierarchical
Options:
',this.containerElement.parentElement.insertBefore(this.physicsConfiguration,this.containerElement),this.optionsDiv=document.createElement("div"),this.optionsDiv.style.fontSize="14px",this.optionsDiv.style.fontFamily="verdana",this.containerElement.parentElement.insertBefore(this.optionsDiv,this.containerElement);var e;e=document.getElementById("graph_BH_gc"),e.onchange=a.bind(this,"graph_BH_gc",-1,"physics_barnesHut_gravitationalConstant"),e=document.getElementById("graph_BH_cg"),e.onchange=a.bind(this,"graph_BH_cg",1,"physics_centralGravity"),e=document.getElementById("graph_BH_sc"),e.onchange=a.bind(this,"graph_BH_sc",1,"physics_springConstant"),e=document.getElementById("graph_BH_sl"),e.onchange=a.bind(this,"graph_BH_sl",1,"physics_springLength"),e=document.getElementById("graph_BH_damp"),e.onchange=a.bind(this,"graph_BH_damp",1,"physics_damping"),e=document.getElementById("graph_R_nd"),e.onchange=a.bind(this,"graph_R_nd",1,"physics_repulsion_nodeDistance"),e=document.getElementById("graph_R_cg"),e.onchange=a.bind(this,"graph_R_cg",1,"physics_centralGravity"),e=document.getElementById("graph_R_sc"),e.onchange=a.bind(this,"graph_R_sc",1,"physics_springConstant"),e=document.getElementById("graph_R_sl"),e.onchange=a.bind(this,"graph_R_sl",1,"physics_springLength"),e=document.getElementById("graph_R_damp"),e.onchange=a.bind(this,"graph_R_damp",1,"physics_damping"),e=document.getElementById("graph_H_nd"),e.onchange=a.bind(this,"graph_H_nd",1,"physics_hierarchicalRepulsion_nodeDistance"),e=document.getElementById("graph_H_cg"),e.onchange=a.bind(this,"graph_H_cg",1,"physics_centralGravity"),e=document.getElementById("graph_H_sc"),e.onchange=a.bind(this,"graph_H_sc",1,"physics_springConstant"),e=document.getElementById("graph_H_sl"),e.onchange=a.bind(this,"graph_H_sl",1,"physics_springLength"),e=document.getElementById("graph_H_damp"),e.onchange=a.bind(this,"graph_H_damp",1,"physics_damping"),e=document.getElementById("graph_H_direction"),e.onchange=a.bind(this,"graph_H_direction",t,"hierarchicalLayout_direction"),e=document.getElementById("graph_H_levsep"),e.onchange=a.bind(this,"graph_H_levsep",1,"hierarchicalLayout_levelSeparation"),e=document.getElementById("graph_H_nspac"),e.onchange=a.bind(this,"graph_H_nspac",1,"hierarchicalLayout_nodeSpacing");var i=document.getElementById("graph_physicsMethod1"),d=document.getElementById("graph_physicsMethod2"),l=document.getElementById("graph_physicsMethod3");d.checked=!0,this.constants.physics.barnesHut.enabled&&(i.checked=!0),this.constants.hierarchicalLayout.enabled&&(l.checked=!0);var c=document.getElementById("graph_toggleSmooth"),p=document.getElementById("graph_repositionNodes"),u=document.getElementById("graph_generateOptions");c.onclick=s.bind(this),p.onclick=o.bind(this),u.onclick=n.bind(this),c.style.background=1==this.constants.smoothCurves&&0==this.constants.dynamicSmoothCurves?"#A4FF56":"#FF8532",r.apply(this),i.onchange=r.bind(this),d.onchange=r.bind(this),l.onchange=r.bind(this)}},e._overWriteGraphConstants=function(t,e){var i=t.split("_");1==i.length?this.constants[i[0]]=e:2==i.length?this.constants[i[0]][i[1]]=e:3==i.length&&(this.constants[i[0]][i[1]][i[2]]=e)}},function(t){function e(t){throw new Error("Cannot find module '"+t+"'.")}e.keys=function(){return[]},e.resolve=e,t.exports=e,e.id=67},function(t,e){e._calculateNodeForces=function(){var t,e,i,s,o,n,r,a,h,d,l,c=this.calculationNodes,p=this.calculationNodeIndices,u=-2/3,m=4/3,f=this.constants.physics.repulsion.nodeDistance,g=f;for(d=0;di&&(r=.5*g>i?1:v*i+m,r*=0==n?1:1+n*this.constants.clustering.forceAmplification,r/=i,s=t*r,o=e*r,a.fx-=s,a.fy-=o,h.fx+=s,h.fy+=o)}}},function(t,e){e._calculateNodeForces=function(){var t,e,i,s,o,n,r,a,h,d,l=this.calculationNodes,c=this.calculationNodeIndices,p=this.constants.physics.hierarchicalRepulsion.nodeDistance;for(h=0;hi?-Math.pow(u*i,2)+Math.pow(u*p,2):0,0==i?i=.01:n/=i,s=t*n,o=e*n,r.fx-=s,r.fy-=o,a.fx+=s,a.fy+=o}},e._calculateHierarchicalSpringForces=function(){for(var t,e,i,s,o,n,r,a,h,d=this.edges,l=this.calculationNodes,c=this.calculationNodeIndices,p=0;pn;n++)t=e[i[n]],t.options.mass>0&&(this._getForceContribution(o.root.children.NW,t),this._getForceContribution(o.root.children.NE,t),this._getForceContribution(o.root.children.SW,t),this._getForceContribution(o.root.children.SE,t))}},e._getForceContribution=function(t,e){if(t.childrenCount>0){var i,s,o;if(i=t.centerOfMass.x-e.x,s=t.centerOfMass.y-e.y,o=Math.sqrt(i*i+s*s),o*t.calcSize>this.constants.physics.barnesHut.theta){0==o&&(o=.1*Math.random(),i=o);var n=this.constants.physics.barnesHut.gravitationalConstant*t.mass*e.options.mass/(o*o*o),r=i*n,a=s*n;e.fx+=r,e.fy+=a}else if(4==t.childrenCount)this._getForceContribution(t.children.NW,e),this._getForceContribution(t.children.NE,e),this._getForceContribution(t.children.SW,e),this._getForceContribution(t.children.SE,e);else if(t.children.data.id!=e.id){0==o&&(o=.5*Math.random(),i=o);var n=this.constants.physics.barnesHut.gravitationalConstant*t.mass*e.options.mass/(o*o*o),r=i*n,a=s*n;e.fx+=r,e.fy+=a}}},e._formBarnesHutTree=function(t,e){for(var i,s=e.length,o=Number.MAX_VALUE,n=Number.MAX_VALUE,r=-Number.MAX_VALUE,a=-Number.MAX_VALUE,h=0;s>h;h++){var d=t[e[h]].x,l=t[e[h]].y;t[e[h]].options.mass>0&&(o>d&&(o=d),d>r&&(r=d),n>l&&(n=l),l>a&&(a=l))}var c=Math.abs(r-o)-Math.abs(a-n);c>0?(n-=.5*c,a+=.5*c):(o+=.5*c,r-=.5*c);var p=1e-5,u=Math.max(p,Math.abs(r-o)),m=.5*u,f=.5*(o+r),g=.5*(n+a),v={root:{centerOfMass:{x:0,y:0},mass:0,range:{minX:f-m,maxX:f+m,minY:g-m,maxY:g+m},size:u,calcSize:1/u,children:{data:null},maxWidth:0,level:0,childrenCount:4}};for(this._splitBranch(v.root),h=0;s>h;h++)i=t[e[h]],i.options.mass>0&&this._placeInTree(v.root,i);this.barnesHutTree=v},e._updateBranchMass=function(t,e){var i=t.mass+e.options.mass,s=1/i;t.centerOfMass.x=t.centerOfMass.x*t.mass+e.x*e.options.mass,t.centerOfMass.x*=s,t.centerOfMass.y=t.centerOfMass.y*t.mass+e.y*e.options.mass,t.centerOfMass.y*=s,t.mass=i;var o=Math.max(Math.max(e.height,e.radius),e.width);t.maxWidth=t.maxWidthe.x?t.children.NW.range.maxY>e.y?this._placeInRegion(t,e,"NW"):this._placeInRegion(t,e,"SW"):t.children.NW.range.maxY>e.y?this._placeInRegion(t,e,"NE"):this._placeInRegion(t,e,"SE")},e._placeInRegion=function(t,e,i){switch(t.children[i].childrenCount){case 0:t.children[i].children.data=e,t.children[i].childrenCount=1,this._updateBranchMass(t.children[i],e);break;case 1:t.children[i].children.data.x==e.x&&t.children[i].children.data.y==e.y?(e.x+=Math.random(),e.y+=Math.random()):(this._splitBranch(t.children[i]),this._placeInTree(t.children[i],e));break;case 4:this._placeInTree(t.children[i],e)}},e._splitBranch=function(t){var e=null;1==t.childrenCount&&(e=t.children.data,t.mass=0,t.centerOfMass.x=0,t.centerOfMass.y=0),t.childrenCount=4,t.children.data=null,this._insertRegion(t,"NW"),this._insertRegion(t,"NE"),this._insertRegion(t,"SW"),this._insertRegion(t,"SE"),null!=e&&this._placeInTree(t,e)},e._insertRegion=function(t,e){var i,s,o,n,r=.5*t.size;switch(e){case"NW":i=t.range.minX,s=t.range.minX+r,o=t.range.minY,n=t.range.minY+r;break;case"NE":i=t.range.minX+r,s=t.range.maxX,o=t.range.minY,n=t.range.minY+r;break;case"SW":i=t.range.minX,s=t.range.minX+r,o=t.range.minY+r,n=t.range.maxY;break;case"SE":i=t.range.minX+r,s=t.range.maxX,o=t.range.minY+r,n=t.range.maxY}t.children[e]={centerOfMass:{x:0,y:0},mass:0,range:{minX:i,maxX:s,minY:o,maxY:n},size:.5*t.size,calcSize:2*t.calcSize,children:{data:null},maxWidth:0,level:t.level+1,childrenCount:0}},e._drawTree=function(t,e){void 0!==this.barnesHutTree&&(t.lineWidth=1,this._drawBranch(this.barnesHutTree.root,t,e))},e._drawBranch=function(t,e,i){void 0===i&&(i="#FF0000"),4==t.childrenCount&&(this._drawBranch(t.children.NW,e),this._drawBranch(t.children.NE,e),this._drawBranch(t.children.SE,e),this._drawBranch(t.children.SW,e)),e.strokeStyle=i,e.beginPath(),e.moveTo(t.range.minX,t.range.minY),e.lineTo(t.range.maxX,t.range.minY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.minY),e.lineTo(t.range.maxX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.maxY),e.lineTo(t.range.minX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.minX,t.range.maxY),e.lineTo(t.range.minX,t.range.minY),e.stroke()}},function(t){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children=[],t.webpackPolyfill=1),t}}])}); +var t=this._getSelectedNode(),e={id:t.id,label:t.label,group:t.options.group,shape:t.options.shape,color:{background:t.options.color.background,border:t.options.color.border,highlight:{background:t.options.color.highlight.background,border:t.options.color.highlight.border}}};if(2!=this.triggerFunctions.edit.length)throw new Error("The function for edit does not support two arguments (data, callback)");var i=this;this.triggerFunctions.edit(e,function(t){i.nodesData.update(t),i._createManipulatorBar(),i.moving=!0,i.start()})},e._deleteSelected=function(){if(!this._selectionIsEmpty()&&1==this.editMode)if(this._clusterInSelection())alert(this.constants.locales[this.constants.locale].deleteClusterError);else{var t=this.getSelectedNodes(),e=this.getSelectedEdges();if(this.triggerFunctions.del){var i=this,s={nodes:t,edges:e};if(2!=this.triggerFunctions.del.length)throw new Error("The function for delete does not support two arguments (data, callback)");this.triggerFunctions.del(s,function(t){i.edgesData.remove(t.edges),i.nodesData.remove(t.nodes),i._unselectAll(),i.moving=!0,i.start()})}else this.edgesData.remove(e),this.nodesData.remove(t),this._unselectAll(),this.moving=!0,this.start()}}},function(t,e,i){var s=(i(1),i(45));e._cleanNavigation=function(){if(0!=this.navigationHammers.existing.length){for(var t=0;t0){this.constants.hierarchicalLayout.levelSeparation="RL"==this.constants.hierarchicalLayout.direction||"DU"==this.constants.hierarchicalLayout.direction?this.constants.hierarchicalLayout.levelSeparation<0?this.constants.hierarchicalLayout.levelSeparation:-1*this.constants.hierarchicalLayout.levelSeparation:Math.abs(this.constants.hierarchicalLayout.levelSeparation),"RL"==this.constants.hierarchicalLayout.direction||"LR"==this.constants.hierarchicalLayout.direction?1==this.constants.smoothCurves.enabled&&(this.constants.smoothCurves.type="vertical"):1==this.constants.smoothCurves.enabled&&(this.constants.smoothCurves.type="horizontal");var t,e,i=0,s=!1,o=!1;for(e in this.nodes)this.nodes.hasOwnProperty(e)&&(t=this.nodes[e],-1!=t.level?s=!0:o=!0,is&&(n.xFixed=!1,n.x=i[n.level].minPos,r=!0):n.yFixed&&n.level>s&&(n.yFixed=!1,n.y=i[n.level].minPos,r=!0),1==r&&(i[n.level].minPos+=i[n.level].nodeSpacing,n.edges.length>1&&this._placeBranchNodes(n.edges,n.id,i,n.level))}},e._setLevel=function(t,e,i){for(var s=0;st)&&(o.level=t,o.edges.length>1&&this._setLevel(t+1,o.edges,o.id))}},e._setLevelDirected=function(t,e,i){this.nodes[i].hierarchyEnumerated=!0;for(var s=0;s1&&o.hierarchyEnumerated===!1&&this._setLevelDirected(o.level,o.edges,o.id)}},e._restoreNodes=function(){for(var t in this.nodes)this.nodes.hasOwnProperty(t)&&(this.nodes[t].xFixed=!1,this.nodes[t].yFixed=!1)}},function(t,e,i){function s(){this.constants.smoothCurves.enabled=!this.constants.smoothCurves.enabled;var t=document.getElementById("graph_toggleSmooth");t.style.background=1==this.constants.smoothCurves.enabled?"#A4FF56":"#FF8532",this._configureSmoothCurves(!1)}function o(){for(var t in this.calculationNodes)this.calculationNodes.hasOwnProperty(t)&&(this.calculationNodes[t].vx=0,this.calculationNodes[t].vy=0,this.calculationNodes[t].fx=0,this.calculationNodes[t].fy=0);1==this.constants.hierarchicalLayout.enabled?(this._setupHierarchicalLayout(),a.call(this,"graph_H_nd",1,"physics_hierarchicalRepulsion_nodeDistance"),a.call(this,"graph_H_cg",1,"physics_centralGravity"),a.call(this,"graph_H_sc",1,"physics_springConstant"),a.call(this,"graph_H_sl",1,"physics_springLength"),a.call(this,"graph_H_damp",1,"physics_damping")):this.repositionNodes(),this.moving=!0,this.start()}function n(){var t="No options are required, default values used.",e=[],i=document.getElementById("graph_physicsMethod1"),s=document.getElementById("graph_physicsMethod2");if(1==i.checked){if(this.constants.physics.barnesHut.gravitationalConstant!=this.backupConstants.physics.barnesHut.gravitationalConstant&&e.push("gravitationalConstant: "+this.constants.physics.barnesHut.gravitationalConstant),this.constants.physics.centralGravity!=this.backupConstants.physics.barnesHut.centralGravity&&e.push("centralGravity: "+this.constants.physics.centralGravity),this.constants.physics.springLength!=this.backupConstants.physics.barnesHut.springLength&&e.push("springLength: "+this.constants.physics.springLength),this.constants.physics.springConstant!=this.backupConstants.physics.barnesHut.springConstant&&e.push("springConstant: "+this.constants.physics.springConstant),this.constants.physics.damping!=this.backupConstants.physics.barnesHut.damping&&e.push("damping: "+this.constants.physics.damping),0!=e.length){t="var options = {",t+="physics: {barnesHut: {";for(var o=0;othis.constants.clustering.clusterThreshold&&1==this.constants.clustering.enabled&&this.clusterToFit(this.constants.clustering.reduceToNodes,!1),this._calculateForces())},e._calculateForces=function(){this._calculateGravitationalForces(),this._calculateNodeForces(),this.constants.physics.springConstant>0&&(1==this.constants.smoothCurves.enabled&&1==this.constants.smoothCurves.dynamic?this._calculateSpringForcesWithSupport():1==this.constants.physics.hierarchicalRepulsion.enabled?this._calculateHierarchicalSpringForces():this._calculateSpringForces())},e._updateCalculationNodes=function(){if(1==this.constants.smoothCurves.enabled&&1==this.constants.smoothCurves.dynamic){this.calculationNodes={},this.calculationNodeIndices=[];for(var t in this.nodes)this.nodes.hasOwnProperty(t)&&(this.calculationNodes[t]=this.nodes[t]);var e=this.sectors.support.nodes;for(var i in e)e.hasOwnProperty(i)&&(this.edges.hasOwnProperty(e[i].parentEdgeId)?this.calculationNodes[i]=e[i]:e[i]._setForce(0,0));for(var s in this.calculationNodes)this.calculationNodes.hasOwnProperty(s)&&this.calculationNodeIndices.push(s)}else this.calculationNodes=this.nodes,this.calculationNodeIndices=this.nodeIndices},e._calculateGravitationalForces=function(){var t,e,i,s,o,n=this.calculationNodes,r=this.constants.physics.centralGravity,a=0;for(o=0;oSimulation Mode:Barnes HutRepulsionHierarchical
Options:
',this.containerElement.parentElement.insertBefore(this.physicsConfiguration,this.containerElement),this.optionsDiv=document.createElement("div"),this.optionsDiv.style.fontSize="14px",this.optionsDiv.style.fontFamily="verdana",this.containerElement.parentElement.insertBefore(this.optionsDiv,this.containerElement);var e;e=document.getElementById("graph_BH_gc"),e.onchange=a.bind(this,"graph_BH_gc",-1,"physics_barnesHut_gravitationalConstant"),e=document.getElementById("graph_BH_cg"),e.onchange=a.bind(this,"graph_BH_cg",1,"physics_centralGravity"),e=document.getElementById("graph_BH_sc"),e.onchange=a.bind(this,"graph_BH_sc",1,"physics_springConstant"),e=document.getElementById("graph_BH_sl"),e.onchange=a.bind(this,"graph_BH_sl",1,"physics_springLength"),e=document.getElementById("graph_BH_damp"),e.onchange=a.bind(this,"graph_BH_damp",1,"physics_damping"),e=document.getElementById("graph_R_nd"),e.onchange=a.bind(this,"graph_R_nd",1,"physics_repulsion_nodeDistance"),e=document.getElementById("graph_R_cg"),e.onchange=a.bind(this,"graph_R_cg",1,"physics_centralGravity"),e=document.getElementById("graph_R_sc"),e.onchange=a.bind(this,"graph_R_sc",1,"physics_springConstant"),e=document.getElementById("graph_R_sl"),e.onchange=a.bind(this,"graph_R_sl",1,"physics_springLength"),e=document.getElementById("graph_R_damp"),e.onchange=a.bind(this,"graph_R_damp",1,"physics_damping"),e=document.getElementById("graph_H_nd"),e.onchange=a.bind(this,"graph_H_nd",1,"physics_hierarchicalRepulsion_nodeDistance"),e=document.getElementById("graph_H_cg"),e.onchange=a.bind(this,"graph_H_cg",1,"physics_centralGravity"),e=document.getElementById("graph_H_sc"),e.onchange=a.bind(this,"graph_H_sc",1,"physics_springConstant"),e=document.getElementById("graph_H_sl"),e.onchange=a.bind(this,"graph_H_sl",1,"physics_springLength"),e=document.getElementById("graph_H_damp"),e.onchange=a.bind(this,"graph_H_damp",1,"physics_damping"),e=document.getElementById("graph_H_direction"),e.onchange=a.bind(this,"graph_H_direction",t,"hierarchicalLayout_direction"),e=document.getElementById("graph_H_levsep"),e.onchange=a.bind(this,"graph_H_levsep",1,"hierarchicalLayout_levelSeparation"),e=document.getElementById("graph_H_nspac"),e.onchange=a.bind(this,"graph_H_nspac",1,"hierarchicalLayout_nodeSpacing");var i=document.getElementById("graph_physicsMethod1"),d=document.getElementById("graph_physicsMethod2"),l=document.getElementById("graph_physicsMethod3");d.checked=!0,this.constants.physics.barnesHut.enabled&&(i.checked=!0),this.constants.hierarchicalLayout.enabled&&(l.checked=!0);var c=document.getElementById("graph_toggleSmooth"),p=document.getElementById("graph_repositionNodes"),u=document.getElementById("graph_generateOptions");c.onclick=s.bind(this),p.onclick=o.bind(this),u.onclick=n.bind(this),c.style.background=1==this.constants.smoothCurves&&0==this.constants.dynamicSmoothCurves?"#A4FF56":"#FF8532",r.apply(this),i.onchange=r.bind(this),d.onchange=r.bind(this),l.onchange=r.bind(this)}},e._overWriteGraphConstants=function(t,e){var i=t.split("_");1==i.length?this.constants[i[0]]=e:2==i.length?this.constants[i[0]][i[1]]=e:3==i.length&&(this.constants[i[0]][i[1]][i[2]]=e)}},function(t){function e(t){throw new Error("Cannot find module '"+t+"'.")}e.keys=function(){return[]},e.resolve=e,t.exports=e,e.id=67},function(t,e){e._calculateNodeForces=function(){var t,e,i,s,o,n,r,a,h,d,l,c=this.calculationNodes,p=this.calculationNodeIndices,u=-2/3,m=4/3,f=this.constants.physics.repulsion.nodeDistance,g=f;for(d=0;di&&(r=.5*g>i?1:v*i+m,r*=0==n?1:1+n*this.constants.clustering.forceAmplification,r/=i,s=t*r,o=e*r,a.fx-=s,a.fy-=o,h.fx+=s,h.fy+=o)}}},function(t,e){e._calculateNodeForces=function(){var t,e,i,s,o,n,r,a,h,d,l=this.calculationNodes,c=this.calculationNodeIndices,p=this.constants.physics.hierarchicalRepulsion.nodeDistance;for(h=0;hi?-Math.pow(u*i,2)+Math.pow(u*p,2):0,0==i?i=.01:n/=i,s=t*n,o=e*n,r.fx-=s,r.fy-=o,a.fx+=s,a.fy+=o}},e._calculateHierarchicalSpringForces=function(){for(var t,e,i,s,o,n,r,a,h,d=this.edges,l=this.calculationNodes,c=this.calculationNodeIndices,p=0;pn;n++)t=e[i[n]],t.options.mass>0&&(this._getForceContribution(o.root.children.NW,t),this._getForceContribution(o.root.children.NE,t),this._getForceContribution(o.root.children.SW,t),this._getForceContribution(o.root.children.SE,t))}},e._getForceContribution=function(t,e){if(t.childrenCount>0){var i,s,o;if(i=t.centerOfMass.x-e.x,s=t.centerOfMass.y-e.y,o=Math.sqrt(i*i+s*s),o*t.calcSize>this.constants.physics.barnesHut.theta){0==o&&(o=.1*Math.random(),i=o);var n=this.constants.physics.barnesHut.gravitationalConstant*t.mass*e.options.mass/(o*o*o),r=i*n,a=s*n;e.fx+=r,e.fy+=a}else if(4==t.childrenCount)this._getForceContribution(t.children.NW,e),this._getForceContribution(t.children.NE,e),this._getForceContribution(t.children.SW,e),this._getForceContribution(t.children.SE,e);else if(t.children.data.id!=e.id){0==o&&(o=.5*Math.random(),i=o);var n=this.constants.physics.barnesHut.gravitationalConstant*t.mass*e.options.mass/(o*o*o),r=i*n,a=s*n;e.fx+=r,e.fy+=a}}},e._formBarnesHutTree=function(t,e){for(var i,s=e.length,o=Number.MAX_VALUE,n=Number.MAX_VALUE,r=-Number.MAX_VALUE,a=-Number.MAX_VALUE,h=0;s>h;h++){var d=t[e[h]].x,l=t[e[h]].y;t[e[h]].options.mass>0&&(o>d&&(o=d),d>r&&(r=d),n>l&&(n=l),l>a&&(a=l))}var c=Math.abs(r-o)-Math.abs(a-n);c>0?(n-=.5*c,a+=.5*c):(o+=.5*c,r-=.5*c);var p=1e-5,u=Math.max(p,Math.abs(r-o)),m=.5*u,f=.5*(o+r),g=.5*(n+a),v={root:{centerOfMass:{x:0,y:0},mass:0,range:{minX:f-m,maxX:f+m,minY:g-m,maxY:g+m},size:u,calcSize:1/u,children:{data:null},maxWidth:0,level:0,childrenCount:4}};for(this._splitBranch(v.root),h=0;s>h;h++)i=t[e[h]],i.options.mass>0&&this._placeInTree(v.root,i);this.barnesHutTree=v},e._updateBranchMass=function(t,e){var i=t.mass+e.options.mass,s=1/i;t.centerOfMass.x=t.centerOfMass.x*t.mass+e.x*e.options.mass,t.centerOfMass.x*=s,t.centerOfMass.y=t.centerOfMass.y*t.mass+e.y*e.options.mass,t.centerOfMass.y*=s,t.mass=i;var o=Math.max(Math.max(e.height,e.radius),e.width);t.maxWidth=t.maxWidthe.x?t.children.NW.range.maxY>e.y?this._placeInRegion(t,e,"NW"):this._placeInRegion(t,e,"SW"):t.children.NW.range.maxY>e.y?this._placeInRegion(t,e,"NE"):this._placeInRegion(t,e,"SE")},e._placeInRegion=function(t,e,i){switch(t.children[i].childrenCount){case 0:t.children[i].children.data=e,t.children[i].childrenCount=1,this._updateBranchMass(t.children[i],e);break;case 1:t.children[i].children.data.x==e.x&&t.children[i].children.data.y==e.y?(e.x+=Math.random(),e.y+=Math.random()):(this._splitBranch(t.children[i]),this._placeInTree(t.children[i],e));break;case 4:this._placeInTree(t.children[i],e)}},e._splitBranch=function(t){var e=null;1==t.childrenCount&&(e=t.children.data,t.mass=0,t.centerOfMass.x=0,t.centerOfMass.y=0),t.childrenCount=4,t.children.data=null,this._insertRegion(t,"NW"),this._insertRegion(t,"NE"),this._insertRegion(t,"SW"),this._insertRegion(t,"SE"),null!=e&&this._placeInTree(t,e)},e._insertRegion=function(t,e){var i,s,o,n,r=.5*t.size;switch(e){case"NW":i=t.range.minX,s=t.range.minX+r,o=t.range.minY,n=t.range.minY+r;break;case"NE":i=t.range.minX+r,s=t.range.maxX,o=t.range.minY,n=t.range.minY+r;break;case"SW":i=t.range.minX,s=t.range.minX+r,o=t.range.minY+r,n=t.range.maxY;break;case"SE":i=t.range.minX+r,s=t.range.maxX,o=t.range.minY+r,n=t.range.maxY}t.children[e]={centerOfMass:{x:0,y:0},mass:0,range:{minX:i,maxX:s,minY:o,maxY:n},size:.5*t.size,calcSize:2*t.calcSize,children:{data:null},maxWidth:0,level:t.level+1,childrenCount:0}},e._drawTree=function(t,e){void 0!==this.barnesHutTree&&(t.lineWidth=1,this._drawBranch(this.barnesHutTree.root,t,e))},e._drawBranch=function(t,e,i){void 0===i&&(i="#FF0000"),4==t.childrenCount&&(this._drawBranch(t.children.NW,e),this._drawBranch(t.children.NE,e),this._drawBranch(t.children.SE,e),this._drawBranch(t.children.SW,e)),e.strokeStyle=i,e.beginPath(),e.moveTo(t.range.minX,t.range.minY),e.lineTo(t.range.maxX,t.range.minY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.minY),e.lineTo(t.range.maxX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.maxY),e.lineTo(t.range.minX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.minX,t.range.maxY),e.lineTo(t.range.minX,t.range.minY),e.stroke()}},function(t){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children=[],t.webpackPolyfill=1),t}}])}); //# sourceMappingURL=vis.map diff --git a/lib/network/mixins/HierarchicalLayoutMixin.js b/lib/network/mixins/HierarchicalLayoutMixin.js index b096dcad..6471588a 100644 --- a/lib/network/mixins/HierarchicalLayoutMixin.js +++ b/lib/network/mixins/HierarchicalLayoutMixin.js @@ -19,7 +19,7 @@ exports._resetLevels = function() { exports._setupHierarchicalLayout = function() { if (this.constants.hierarchicalLayout.enabled == true && this.nodeIndices.length > 0) { if (this.constants.hierarchicalLayout.direction == "RL" || this.constants.hierarchicalLayout.direction == "DU") { - this.constants.hierarchicalLayout.levelSeparation *= -1; + this.constants.hierarchicalLayout.levelSeparation = this.constants.hierarchicalLayout.levelSeparation < 0 ? this.constants.hierarchicalLayout.levelSeparation : this.constants.hierarchicalLayout.levelSeparation * -1; } else { this.constants.hierarchicalLayout.levelSeparation = Math.abs(this.constants.hierarchicalLayout.levelSeparation); From b151f2254bd9ef17fb378f8dd4fd9a2f8857ad6c Mon Sep 17 00:00:00 2001 From: AlexDM0 Date: Thu, 18 Dec 2014 11:21:03 +0100 Subject: [PATCH 03/20] updated history --- HISTORY.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/HISTORY.md b/HISTORY.md index ea20d4e8..e0c69181 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,6 +1,11 @@ # vis.js history http://visjs.org +## 2014-12-09, version 3.7.3-SNAPSHOT NOT YET RELEASED + +### Network + +- Fixed flipping of hierachical network on update when using RL and DU. ## 2014-12-09, version 3.7.2 @@ -108,7 +113,6 @@ http://visjs.org ### Network - Fixed dashed and arrow lines not using inheritColor. -- Fixed flipping of hierachical network on update when using RL and DU. ### DataSet From afea04d4318fb24de76d7d9115a0333f10ced9bf Mon Sep 17 00:00:00 2001 From: jos Date: Thu, 18 Dec 2014 11:28:43 +0100 Subject: [PATCH 04/20] Fixed #501: round-off errors of zero on the y-axis --- HISTORY.md | 7 + dist/vis.js | 3857 +++++++++++++++++++++----------------- dist/vis.map | 2 +- dist/vis.min.js | 14 +- lib/timeline/DataStep.js | 5 +- 5 files changed, 2104 insertions(+), 1781 deletions(-) diff --git a/HISTORY.md b/HISTORY.md index ea20d4e8..5ad4d874 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -2,6 +2,13 @@ http://visjs.org +## not yet released, version 3.7.3 + +### Graph2d + +- Fixed round-off errors of zero on the y-axis. + + ## 2014-12-09, version 3.7.2 ### Timeline diff --git a/dist/vis.js b/dist/vis.js index 905a1130..26b5d27f 100644 --- a/dist/vis.js +++ b/dist/vis.js @@ -5,7 +5,7 @@ * A dynamic, browser-based visualization library. * * @version 3.7.2-SNAPSHOT - * @date 2014-12-16 + * @date 2014-12-18 * * @license * Copyright (C) 2011-2014 Almende B.V, http://almende.com @@ -7619,7 +7619,10 @@ return /******/ (function(modules) { // webpackBootstrap * @return {String} current The current date */ DataStep.prototype.getCurrent = function(decimals) { - var toPrecision = '' + Number(this.current).toPrecision(5); + // prevent round-off errors when close to zero + var current = (Math.abs(this.current) < this.step / 2) ? 0 : this.current; + var toPrecision = '' + Number(current).toPrecision(5); + // If decimals is specified, then limit or extend the string as required if(decimals !== undefined && !isNaN(Number(decimals))) { // If string includes exponent, then we need to add it to the end @@ -26744,2168 +26747,2470 @@ return /******/ (function(modules) { // webpackBootstrap /* 59 */ /***/ function(module, exports, __webpack_require__) { - var __WEBPACK_AMD_DEFINE_RESULT__;/*! Hammer.JS - v1.1.3 - 2014-05-20 - * http://eightmedia.github.io/hammer.js + var __WEBPACK_AMD_DEFINE_RESULT__;/*! Hammer.JS - v2.0.4 - 2014-09-28 + * http://hammerjs.github.io/ * - * Copyright (c) 2014 Jorik Tangelder ; + * Copyright (c) 2014 Jorik Tangelder; * Licensed under the MIT license */ - - (function(window, undefined) { + (function(window, document, exportName, undefined) { 'use strict'; - /** - * @main - * @module hammer - * - * @class Hammer - * @static - */ + var VENDOR_PREFIXES = ['', 'webkit', 'moz', 'MS', 'ms', 'o']; + var TEST_ELEMENT = document.createElement('div'); + + var TYPE_FUNCTION = 'function'; + + var round = Math.round; + var abs = Math.abs; + var now = Date.now; /** - * Hammer, use this to create instances - * ```` - * var hammertime = new Hammer(myElement); - * ```` - * - * @method Hammer - * @param {HTMLElement} element - * @param {Object} [options={}] - * @return {Hammer.Instance} + * set a timeout with a given scope + * @param {Function} fn + * @param {Number} timeout + * @param {Object} context + * @returns {number} */ - var Hammer = function Hammer(element, options) { - return new Hammer.Instance(element, options || {}); - }; + function setTimeoutContext(fn, timeout, context) { + return setTimeout(bindFn(fn, context), timeout); + } /** - * version, as defined in package.json - * the value will be set at each build - * @property VERSION - * @final - * @type {String} + * if the argument is an array, we want to execute the fn on each entry + * if it aint an array we don't want to do a thing. + * this is used by all the methods that accept a single and array argument. + * @param {*|Array} arg + * @param {String} fn + * @param {Object} [context] + * @returns {Boolean} */ - Hammer.VERSION = '1.1.3'; + function invokeArrayArg(arg, fn, context) { + if (Array.isArray(arg)) { + each(arg, context[fn], context); + return true; + } + return false; + } /** - * default settings. - * more settings are defined per gesture at `/gestures`. Each gesture can be disabled/enabled - * by setting it's name (like `swipe`) to false. - * You can set the defaults for all instances by changing this object before creating an instance. - * @example - * ```` - * Hammer.defaults.drag = false; - * Hammer.defaults.behavior.touchAction = 'pan-y'; - * delete Hammer.defaults.behavior.userSelect; - * ```` - * @property defaults - * @type {Object} + * walk objects and arrays + * @param {Object} obj + * @param {Function} iterator + * @param {Object} context */ - Hammer.defaults = { - /** - * this setting object adds styles and attributes to the element to prevent the browser from doing - * its native behavior. The css properties are auto prefixed for the browsers when needed. - * @property defaults.behavior - * @type {Object} - */ - behavior: { - /** - * Disables text selection to improve the dragging gesture. When the value is `none` it also sets - * `onselectstart=false` for IE on the element. Mainly for desktop browsers. - * @property defaults.behavior.userSelect - * @type {String} - * @default 'none' - */ - userSelect: 'none', - - /** - * Specifies whether and how a given region can be manipulated by the user (for instance, by panning or zooming). - * Used by Chrome 35> and IE10>. By default this makes the element blocking any touch event. - * @property defaults.behavior.touchAction - * @type {String} - * @default: 'pan-y' - */ - touchAction: 'pan-y', - - /** - * Disables the default callout shown when you touch and hold a touch target. - * On iOS, when you touch and hold a touch target such as a link, Safari displays - * a callout containing information about the link. This property allows you to disable that callout. - * @property defaults.behavior.touchCallout - * @type {String} - * @default 'none' - */ - touchCallout: 'none', - - /** - * Specifies whether zooming is enabled. Used by IE10> - * @property defaults.behavior.contentZooming - * @type {String} - * @default 'none' - */ - contentZooming: 'none', + function each(obj, iterator, context) { + var i; - /** - * Specifies that an entire element should be draggable instead of its contents. - * Mainly for desktop browsers. - * @property defaults.behavior.userDrag - * @type {String} - * @default 'none' - */ - userDrag: 'none', + if (!obj) { + return; + } - /** - * Overrides the highlight color shown when the user taps a link or a JavaScript - * clickable element in Safari on iPhone. This property obeys the alpha value, if specified. - * - * If you don't specify an alpha value, Safari on iPhone applies a default alpha value - * to the color. To disable tap highlighting, set the alpha value to 0 (invisible). - * If you set the alpha value to 1.0 (opaque), the element is not visible when tapped. - * @property defaults.behavior.tapHighlightColor - * @type {String} - * @default 'rgba(0,0,0,0)' - */ - tapHighlightColor: 'rgba(0,0,0,0)' + if (obj.forEach) { + obj.forEach(iterator, context); + } else if (obj.length !== undefined) { + i = 0; + while (i < obj.length) { + iterator.call(context, obj[i], i, obj); + i++; + } + } else { + for (i in obj) { + obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj); + } } - }; + } /** - * hammer document where the base events are added at - * @property DOCUMENT - * @type {HTMLElement} - * @default window.document + * extend object. + * means that properties in dest will be overwritten by the ones in src. + * @param {Object} dest + * @param {Object} src + * @param {Boolean} [merge] + * @returns {Object} dest */ - Hammer.DOCUMENT = document; + function extend(dest, src, merge) { + var keys = Object.keys(src); + var i = 0; + while (i < keys.length) { + if (!merge || (merge && dest[keys[i]] === undefined)) { + dest[keys[i]] = src[keys[i]]; + } + i++; + } + return dest; + } /** - * detect support for pointer events - * @property HAS_POINTEREVENTS - * @type {Boolean} + * merge the values from src in the dest. + * means that properties that exist in dest will not be overwritten by src + * @param {Object} dest + * @param {Object} src + * @returns {Object} dest */ - Hammer.HAS_POINTEREVENTS = navigator.pointerEnabled || navigator.msPointerEnabled; + function merge(dest, src) { + return extend(dest, src, true); + } /** - * detect support for touch events - * @property HAS_TOUCHEVENTS - * @type {Boolean} + * simple class inheritance + * @param {Function} child + * @param {Function} base + * @param {Object} [properties] */ - Hammer.HAS_TOUCHEVENTS = ('ontouchstart' in window); + function inherit(child, base, properties) { + var baseP = base.prototype, + childP; + + childP = child.prototype = Object.create(baseP); + childP.constructor = child; + childP._super = baseP; + + if (properties) { + extend(childP, properties); + } + } /** - * detect mobile browsers - * @property IS_MOBILE - * @type {Boolean} + * simple function bind + * @param {Function} fn + * @param {Object} context + * @returns {Function} */ - Hammer.IS_MOBILE = /mobile|tablet|ip(ad|hone|od)|android|silk/i.test(navigator.userAgent); + function bindFn(fn, context) { + return function boundFn() { + return fn.apply(context, arguments); + }; + } /** - * detect if we want to support mouseevents at all - * @property NO_MOUSEEVENTS - * @type {Boolean} + * let a boolean value also be a function that must return a boolean + * this first item in args will be used as the context + * @param {Boolean|Function} val + * @param {Array} [args] + * @returns {Boolean} */ - Hammer.NO_MOUSEEVENTS = (Hammer.HAS_TOUCHEVENTS && Hammer.IS_MOBILE) || Hammer.HAS_POINTEREVENTS; + function boolOrFn(val, args) { + if (typeof val == TYPE_FUNCTION) { + return val.apply(args ? args[0] || undefined : undefined, args); + } + return val; + } /** - * interval in which Hammer recalculates current velocity/direction/angle in ms - * @property CALCULATE_INTERVAL - * @type {Number} - * @default 25 + * use the val2 when val1 is undefined + * @param {*} val1 + * @param {*} val2 + * @returns {*} */ - Hammer.CALCULATE_INTERVAL = 25; + function ifUndefined(val1, val2) { + return (val1 === undefined) ? val2 : val1; + } /** - * eventtypes per touchevent (start, move, end) are filled by `Event.determineEventTypes` on `setup` - * the object contains the DOM event names per type (`EVENT_START`, `EVENT_MOVE`, `EVENT_END`) - * @property EVENT_TYPES - * @private - * @writeOnce - * @type {Object} + * addEventListener with multiple events at once + * @param {EventTarget} target + * @param {String} types + * @param {Function} handler */ - var EVENT_TYPES = {}; + function addEventListeners(target, types, handler) { + each(splitStr(types), function(type) { + target.addEventListener(type, handler, false); + }); + } /** - * direction strings, for safe comparisons - * @property DIRECTION_DOWN|LEFT|UP|RIGHT - * @final - * @type {String} - * @default 'down' 'left' 'up' 'right' + * removeEventListener with multiple events at once + * @param {EventTarget} target + * @param {String} types + * @param {Function} handler */ - var DIRECTION_DOWN = Hammer.DIRECTION_DOWN = 'down'; - var DIRECTION_LEFT = Hammer.DIRECTION_LEFT = 'left'; - var DIRECTION_UP = Hammer.DIRECTION_UP = 'up'; - var DIRECTION_RIGHT = Hammer.DIRECTION_RIGHT = 'right'; + function removeEventListeners(target, types, handler) { + each(splitStr(types), function(type) { + target.removeEventListener(type, handler, false); + }); + } /** - * pointertype strings, for safe comparisons - * @property POINTER_MOUSE|TOUCH|PEN - * @final - * @type {String} - * @default 'mouse' 'touch' 'pen' + * find if a node is in the given parent + * @method hasParent + * @param {HTMLElement} node + * @param {HTMLElement} parent + * @return {Boolean} found */ - var POINTER_MOUSE = Hammer.POINTER_MOUSE = 'mouse'; - var POINTER_TOUCH = Hammer.POINTER_TOUCH = 'touch'; - var POINTER_PEN = Hammer.POINTER_PEN = 'pen'; + function hasParent(node, parent) { + while (node) { + if (node == parent) { + return true; + } + node = node.parentNode; + } + return false; + } /** - * eventtypes - * @property EVENT_START|MOVE|END|RELEASE|TOUCH - * @final - * @type {String} - * @default 'start' 'change' 'move' 'end' 'release' 'touch' + * small indexOf wrapper + * @param {String} str + * @param {String} find + * @returns {Boolean} found */ - var EVENT_START = Hammer.EVENT_START = 'start'; - var EVENT_MOVE = Hammer.EVENT_MOVE = 'move'; - var EVENT_END = Hammer.EVENT_END = 'end'; - var EVENT_RELEASE = Hammer.EVENT_RELEASE = 'release'; - var EVENT_TOUCH = Hammer.EVENT_TOUCH = 'touch'; + function inStr(str, find) { + return str.indexOf(find) > -1; + } /** - * if the window events are set... - * @property READY - * @writeOnce - * @type {Boolean} - * @default false + * split string on whitespace + * @param {String} str + * @returns {Array} words */ - Hammer.READY = false; + function splitStr(str) { + return str.trim().split(/\s+/g); + } /** - * plugins namespace - * @property plugins - * @type {Object} + * find if a array contains the object using indexOf or a simple polyFill + * @param {Array} src + * @param {String} find + * @param {String} [findByKey] + * @return {Boolean|Number} false when not found, or the index */ - Hammer.plugins = Hammer.plugins || {}; + function inArray(src, find, findByKey) { + if (src.indexOf && !findByKey) { + return src.indexOf(find); + } else { + var i = 0; + while (i < src.length) { + if ((findByKey && src[i][findByKey] == find) || (!findByKey && src[i] === find)) { + return i; + } + i++; + } + return -1; + } + } /** - * gestures namespace - * see `/gestures` for the definitions - * @property gestures - * @type {Object} + * convert array-like objects to real arrays + * @param {Object} obj + * @returns {Array} */ - Hammer.gestures = Hammer.gestures || {}; + function toArray(obj) { + return Array.prototype.slice.call(obj, 0); + } /** - * setup events to detect gestures on the document - * this function is called when creating an new instance - * @private + * unique array with objects based on a key (like 'id') or just by the array's value + * @param {Array} src [{id:1},{id:2},{id:1}] + * @param {String} [key] + * @param {Boolean} [sort=False] + * @returns {Array} [{id:1},{id:2}] */ - function setup() { - if(Hammer.READY) { - return; - } - - // find what eventtypes we add listeners to - Event.determineEventTypes(); + function uniqueArray(src, key, sort) { + var results = []; + var values = []; + var i = 0; - // Register all gestures inside Hammer.gestures - Utils.each(Hammer.gestures, function(gesture) { - Detection.register(gesture); - }); + while (i < src.length) { + var val = key ? src[i][key] : src[i]; + if (inArray(values, val) < 0) { + results.push(src[i]); + } + values[i] = val; + i++; + } - // Add touch events on the document - Event.onTouch(Hammer.DOCUMENT, EVENT_MOVE, Detection.detect); - Event.onTouch(Hammer.DOCUMENT, EVENT_END, Detection.detect); + if (sort) { + if (!key) { + results = results.sort(); + } else { + results = results.sort(function sortUniqueArray(a, b) { + return a[key] > b[key]; + }); + } + } - // Hammer is ready...! - Hammer.READY = true; + return results; } /** - * @module hammer - * - * @class Utils - * @static + * get the prefixed property + * @param {Object} obj + * @param {String} property + * @returns {String|Undefined} prefixed */ - var Utils = Hammer.utils = { - /** - * extend method, could also be used for cloning when `dest` is an empty object. - * changes the dest object - * @method extend - * @param {Object} dest - * @param {Object} src - * @param {Boolean} [merge=false] do a merge - * @return {Object} dest - */ - extend: function extend(dest, src, merge) { - for(var key in src) { - if(!src.hasOwnProperty(key) || (dest[key] !== undefined && merge)) { - continue; - } - dest[key] = src[key]; - } - return dest; - }, - - /** - * simple addEventListener wrapper - * @method on - * @param {HTMLElement} element - * @param {String} type - * @param {Function} handler - */ - on: function on(element, type, handler) { - element.addEventListener(type, handler, false); - }, + function prefixed(obj, property) { + var prefix, prop; + var camelProp = property[0].toUpperCase() + property.slice(1); - /** - * simple removeEventListener wrapper - * @method off - * @param {HTMLElement} element - * @param {String} type - * @param {Function} handler - */ - off: function off(element, type, handler) { - element.removeEventListener(type, handler, false); - }, + var i = 0; + while (i < VENDOR_PREFIXES.length) { + prefix = VENDOR_PREFIXES[i]; + prop = (prefix) ? prefix + camelProp : property; - /** - * forEach over arrays and objects - * @method each - * @param {Object|Array} obj - * @param {Function} iterator - * @param {any} iterator.item - * @param {Number} iterator.index - * @param {Object|Array} iterator.obj the source object - * @param {Object} context value to use as `this` in the iterator - */ - each: function each(obj, iterator, context) { - var i, len; - - // native forEach on arrays - if('forEach' in obj) { - obj.forEach(iterator, context); - // arrays - } else if(obj.length !== undefined) { - for(i = 0, len = obj.length; i < len; i++) { - if(iterator.call(context, obj[i], i, obj) === false) { - return; - } - } - // objects - } else { - for(i in obj) { - if(obj.hasOwnProperty(i) && - iterator.call(context, obj[i], i, obj) === false) { - return; - } - } + if (prop in obj) { + return prop; } - }, + i++; + } + return undefined; + } - /** - * find if a string contains the string using indexOf - * @method inStr - * @param {String} src - * @param {String} find - * @return {Boolean} found - */ - inStr: function inStr(src, find) { - return src.indexOf(find) > -1; - }, + /** + * get a unique id + * @returns {number} uniqueId + */ + var _uniqueId = 1; + function uniqueId() { + return _uniqueId++; + } - /** - * find if a array contains the object using indexOf or a simple polyfill - * @method inArray - * @param {String} src - * @param {String} find - * @return {Boolean|Number} false when not found, or the index - */ - inArray: function inArray(src, find) { - if(src.indexOf) { - var index = src.indexOf(find); - return (index === -1) ? false : index; - } else { - for(var i = 0, len = src.length; i < len; i++) { - if(src[i] === find) { - return i; - } - } - return false; - } - }, + /** + * get the window object of an element + * @param {HTMLElement} element + * @returns {DocumentView|Window} + */ + function getWindowForElement(element) { + var doc = element.ownerDocument; + return (doc.defaultView || doc.parentWindow); + } - /** - * convert an array-like object (`arguments`, `touchlist`) to an array - * @method toArray - * @param {Object} obj - * @return {Array} - */ - toArray: function toArray(obj) { - return Array.prototype.slice.call(obj, 0); - }, + var MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i; - /** - * find if a node is in the given parent - * @method hasParent - * @param {HTMLElement} node - * @param {HTMLElement} parent - * @return {Boolean} found - */ - hasParent: function hasParent(node, parent) { - while(node) { - if(node == parent) { - return true; - } - node = node.parentNode; - } - return false; - }, + var SUPPORT_TOUCH = ('ontouchstart' in window); + var SUPPORT_POINTER_EVENTS = prefixed(window, 'PointerEvent') !== undefined; + var SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent); - /** - * get the center of all the touches - * @method getCenter - * @param {Array} touches - * @return {Object} center contains `pageX`, `pageY`, `clientX` and `clientY` properties - */ - getCenter: function getCenter(touches) { - var pageX = [], - pageY = [], - clientX = [], - clientY = [], - min = Math.min, - max = Math.max; - - // no need to loop when only one touch - if(touches.length === 1) { - return { - pageX: touches[0].pageX, - pageY: touches[0].pageY, - clientX: touches[0].clientX, - clientY: touches[0].clientY - }; - } + var INPUT_TYPE_TOUCH = 'touch'; + var INPUT_TYPE_PEN = 'pen'; + var INPUT_TYPE_MOUSE = 'mouse'; + var INPUT_TYPE_KINECT = 'kinect'; - Utils.each(touches, function(touch) { - pageX.push(touch.pageX); - pageY.push(touch.pageY); - clientX.push(touch.clientX); - clientY.push(touch.clientY); - }); + var COMPUTE_INTERVAL = 25; - return { - pageX: (min.apply(Math, pageX) + max.apply(Math, pageX)) / 2, - pageY: (min.apply(Math, pageY) + max.apply(Math, pageY)) / 2, - clientX: (min.apply(Math, clientX) + max.apply(Math, clientX)) / 2, - clientY: (min.apply(Math, clientY) + max.apply(Math, clientY)) / 2 - }; - }, + var INPUT_START = 1; + var INPUT_MOVE = 2; + var INPUT_END = 4; + var INPUT_CANCEL = 8; - /** - * calculate the velocity between two points. unit is in px per ms. - * @method getVelocity - * @param {Number} deltaTime - * @param {Number} deltaX - * @param {Number} deltaY - * @return {Object} velocity `x` and `y` - */ - getVelocity: function getVelocity(deltaTime, deltaX, deltaY) { - return { - x: Math.abs(deltaX / deltaTime) || 0, - y: Math.abs(deltaY / deltaTime) || 0 - }; - }, + var DIRECTION_NONE = 1; + var DIRECTION_LEFT = 2; + var DIRECTION_RIGHT = 4; + var DIRECTION_UP = 8; + var DIRECTION_DOWN = 16; - /** - * calculate the angle between two coordinates - * @method getAngle - * @param {Touch} touch1 - * @param {Touch} touch2 - * @return {Number} angle - */ - getAngle: function getAngle(touch1, touch2) { - var x = touch2.clientX - touch1.clientX, - y = touch2.clientY - touch1.clientY; + var DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT; + var DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN; + var DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL; - return Math.atan2(y, x) * 180 / Math.PI; - }, + var PROPS_XY = ['x', 'y']; + var PROPS_CLIENT_XY = ['clientX', 'clientY']; - /** - * do a small comparision to get the direction between two touches. - * @method getDirection - * @param {Touch} touch1 - * @param {Touch} touch2 - * @return {String} direction matches `DIRECTION_LEFT|RIGHT|UP|DOWN` - */ - getDirection: function getDirection(touch1, touch2) { - var x = Math.abs(touch1.clientX - touch2.clientX), - y = Math.abs(touch1.clientY - touch2.clientY); + /** + * create new input type manager + * @param {Manager} manager + * @param {Function} callback + * @returns {Input} + * @constructor + */ + function Input(manager, callback) { + var self = this; + this.manager = manager; + this.callback = callback; + this.element = manager.element; + this.target = manager.options.inputTarget; - if(x >= y) { - return touch1.clientX - touch2.clientX > 0 ? DIRECTION_LEFT : DIRECTION_RIGHT; + // smaller wrapper around the handler, for the scope and the enabled state of the manager, + // so when disabled the input events are completely bypassed. + this.domHandler = function(ev) { + if (boolOrFn(manager.options.enable, [manager])) { + self.handler(ev); } - return touch1.clientY - touch2.clientY > 0 ? DIRECTION_UP : DIRECTION_DOWN; - }, + }; - /** - * calculate the distance between two touches - * @method getDistance - * @param {Touch}touch1 - * @param {Touch} touch2 - * @return {Number} distance - */ - getDistance: function getDistance(touch1, touch2) { - var x = touch2.clientX - touch1.clientX, - y = touch2.clientY - touch1.clientY; + this.init(); - return Math.sqrt((x * x) + (y * y)); - }, + } + Input.prototype = { /** - * calculate the scale factor between two touchLists - * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out - * @method getScale - * @param {Array} start array of touches - * @param {Array} end array of touches - * @return {Number} scale + * should handle the inputEvent data and trigger the callback + * @virtual */ - getScale: function getScale(start, end) { - // need two fingers... - if(start.length >= 2 && end.length >= 2) { - return this.getDistance(end[0], end[1]) / this.getDistance(start[0], start[1]); - } - return 1; - }, + handler: function() { }, /** - * calculate the rotation degrees between two touchLists - * @method getRotation - * @param {Array} start array of touches - * @param {Array} end array of touches - * @return {Number} rotation + * bind the events */ - getRotation: function getRotation(start, end) { - // need two fingers - if(start.length >= 2 && end.length >= 2) { - return this.getAngle(end[1], end[0]) - this.getAngle(start[1], start[0]); - } - return 0; + init: function() { + this.evEl && addEventListeners(this.element, this.evEl, this.domHandler); + this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler); + this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler); }, /** - * find out if the direction is vertical * - * @method isVertical - * @param {String} direction matches `DIRECTION_UP|DOWN` - * @return {Boolean} is_vertical + * unbind the events */ - isVertical: function isVertical(direction) { - return direction == DIRECTION_UP || direction == DIRECTION_DOWN; - }, + destroy: function() { + this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler); + this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler); + this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler); + } + }; - /** - * set css properties with their prefixes - * @param {HTMLElement} element - * @param {String} prop - * @param {String} value - * @param {Boolean} [toggle=true] - * @return {Boolean} - */ - setPrefixedCss: function setPrefixedCss(element, prop, value, toggle) { - var prefixes = ['', 'Webkit', 'Moz', 'O', 'ms']; - prop = Utils.toCamelCase(prop); - - for(var i = 0; i < prefixes.length; i++) { - var p = prop; - // prefixes - if(prefixes[i]) { - p = prefixes[i] + p.slice(0, 1).toUpperCase() + p.slice(1); - } + /** + * create new input type manager + * called by the Manager constructor + * @param {Hammer} manager + * @returns {Input} + */ + function createInputInstance(manager) { + var Type; + var inputClass = manager.options.inputClass; - // test the style - if(p in element.style) { - element.style[p] = (toggle == null || toggle) && value || ''; - break; - } - } - }, + if (inputClass) { + Type = inputClass; + } else if (SUPPORT_POINTER_EVENTS) { + Type = PointerEventInput; + } else if (SUPPORT_ONLY_TOUCH) { + Type = TouchInput; + } else if (!SUPPORT_TOUCH) { + Type = MouseInput; + } else { + Type = TouchMouseInput; + } + return new (Type)(manager, inputHandler); + } - /** - * toggle browser default behavior by setting css properties. - * `userSelect='none'` also sets `element.onselectstart` to false - * `userDrag='none'` also sets `element.ondragstart` to false - * - * @method toggleBehavior - * @param {HtmlElement} element - * @param {Object} props - * @param {Boolean} [toggle=true] - */ - toggleBehavior: function toggleBehavior(element, props, toggle) { - if(!props || !element || !element.style) { - return; - } + /** + * handle input events + * @param {Manager} manager + * @param {String} eventType + * @param {Object} input + */ + function inputHandler(manager, eventType, input) { + var pointersLen = input.pointers.length; + var changedPointersLen = input.changedPointers.length; + var isFirst = (eventType & INPUT_START && (pointersLen - changedPointersLen === 0)); + var isFinal = (eventType & (INPUT_END | INPUT_CANCEL) && (pointersLen - changedPointersLen === 0)); - // set the css properties - Utils.each(props, function(value, prop) { - Utils.setPrefixedCss(element, prop, value, toggle); - }); + input.isFirst = !!isFirst; + input.isFinal = !!isFinal; - var falseFn = toggle && function() { - return false; - }; + if (isFirst) { + manager.session = {}; + } - // also the disable onselectstart - if(props.userSelect == 'none') { - element.onselectstart = falseFn; - } - // and disable ondragstart - if(props.userDrag == 'none') { - element.ondragstart = falseFn; - } - }, + // source event is the normalized value of the domEvents + // like 'touchstart, mouseup, pointerdown' + input.eventType = eventType; - /** - * convert a string with underscores to camelCase - * so prevent_default becomes preventDefault - * @param {String} str - * @return {String} camelCaseStr - */ - toCamelCase: function toCamelCase(str) { - return str.replace(/[_-]([a-z])/g, function(s) { - return s[1].toUpperCase(); - }); - } - }; + // compute scale, rotation etc + computeInputData(manager, input); + // emit secret event + manager.emit('hammer.input', input); + + manager.recognize(input); + manager.session.prevInput = input; + } /** - * @module hammer - */ - /** - * @class Event - * @static + * extend the data with some usable properties like scale, rotate, velocity etc + * @param {Object} manager + * @param {Object} input */ - var Event = Hammer.event = { - /** - * when touch events have been fired, this is true - * this is used to stop mouse events - * @property prevent_mouseevents - * @private - * @type {Boolean} - */ - preventMouseEvents: false, + function computeInputData(manager, input) { + var session = manager.session; + var pointers = input.pointers; + var pointersLength = pointers.length; - /** - * if EVENT_START has been fired - * @property started - * @private - * @type {Boolean} - */ - started: false, + // store the first input to calculate the distance and direction + if (!session.firstInput) { + session.firstInput = simpleCloneInputData(input); + } - /** - * when the mouse is hold down, this is true - * @property should_detect - * @private - * @type {Boolean} - */ - shouldDetect: false, + // to compute scale and rotation we need to store the multiple touches + if (pointersLength > 1 && !session.firstMultiple) { + session.firstMultiple = simpleCloneInputData(input); + } else if (pointersLength === 1) { + session.firstMultiple = false; + } - /** - * simple event binder with a hook and support for multiple types - * @method on - * @param {HTMLElement} element - * @param {String} type - * @param {Function} handler - * @param {Function} [hook] - * @param {Object} hook.type - */ - on: function on(element, type, handler, hook) { - var types = type.split(' '); - Utils.each(types, function(type) { - Utils.on(element, type, handler); - hook && hook(type); - }); - }, + var firstInput = session.firstInput; + var firstMultiple = session.firstMultiple; + var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center; - /** - * simple event unbinder with a hook and support for multiple types - * @method off - * @param {HTMLElement} element - * @param {String} type - * @param {Function} handler - * @param {Function} [hook] - * @param {Object} hook.type - */ - off: function off(element, type, handler, hook) { - var types = type.split(' '); - Utils.each(types, function(type) { - Utils.off(element, type, handler); - hook && hook(type); - }); - }, + var center = input.center = getCenter(pointers); + input.timeStamp = now(); + input.deltaTime = input.timeStamp - firstInput.timeStamp; + + input.angle = getAngle(offsetCenter, center); + input.distance = getDistance(offsetCenter, center); + + computeDeltaXY(session, input); + input.offsetDirection = getDirection(input.deltaX, input.deltaY); + + input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1; + input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0; + + computeIntervalInputData(session, input); + + // find the correct target + var target = manager.element; + if (hasParent(input.srcEvent.target, target)) { + target = input.srcEvent.target; + } + input.target = target; + } + + function computeDeltaXY(session, input) { + var center = input.center; + var offset = session.offsetDelta || {}; + var prevDelta = session.prevDelta || {}; + var prevInput = session.prevInput || {}; + + if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) { + prevDelta = session.prevDelta = { + x: prevInput.deltaX || 0, + y: prevInput.deltaY || 0 + }; + + offset = session.offsetDelta = { + x: center.x, + y: center.y + }; + } + + input.deltaX = prevDelta.x + (center.x - offset.x); + input.deltaY = prevDelta.y + (center.y - offset.y); + } + + /** + * velocity is calculated every x ms + * @param {Object} session + * @param {Object} input + */ + function computeIntervalInputData(session, input) { + var last = session.lastInterval || input, + deltaTime = input.timeStamp - last.timeStamp, + velocity, velocityX, velocityY, direction; + + if (input.eventType != INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) { + var deltaX = last.deltaX - input.deltaX; + var deltaY = last.deltaY - input.deltaY; + + var v = getVelocity(deltaTime, deltaX, deltaY); + velocityX = v.x; + velocityY = v.y; + velocity = (abs(v.x) > abs(v.y)) ? v.x : v.y; + direction = getDirection(deltaX, deltaY); + + session.lastInterval = input; + } else { + // use latest velocity info if it doesn't overtake a minimum period + velocity = last.velocity; + velocityX = last.velocityX; + velocityY = last.velocityY; + direction = last.direction; + } + + input.velocity = velocity; + input.velocityX = velocityX; + input.velocityY = velocityY; + input.direction = direction; + } + /** + * create a simple clone from the input used for storage of firstInput and firstMultiple + * @param {Object} input + * @returns {Object} clonedInputData + */ + function simpleCloneInputData(input) { + // make a simple copy of the pointers because we will get a reference if we don't + // we only need clientXY for the calculations + var pointers = []; + var i = 0; + while (i < input.pointers.length) { + pointers[i] = { + clientX: round(input.pointers[i].clientX), + clientY: round(input.pointers[i].clientY) + }; + i++; + } + + return { + timeStamp: now(), + pointers: pointers, + center: getCenter(pointers), + deltaX: input.deltaX, + deltaY: input.deltaY + }; + } + + /** + * get the center of all the pointers + * @param {Array} pointers + * @return {Object} center contains `x` and `y` properties + */ + function getCenter(pointers) { + var pointersLength = pointers.length; + + // no need to loop when only one touch + if (pointersLength === 1) { + return { + x: round(pointers[0].clientX), + y: round(pointers[0].clientY) + }; + } + + var x = 0, y = 0, i = 0; + while (i < pointersLength) { + x += pointers[i].clientX; + y += pointers[i].clientY; + i++; + } + + return { + x: round(x / pointersLength), + y: round(y / pointersLength) + }; + } + + /** + * calculate the velocity between two points. unit is in px per ms. + * @param {Number} deltaTime + * @param {Number} x + * @param {Number} y + * @return {Object} velocity `x` and `y` + */ + function getVelocity(deltaTime, x, y) { + return { + x: x / deltaTime || 0, + y: y / deltaTime || 0 + }; + } + + /** + * get the direction between two points + * @param {Number} x + * @param {Number} y + * @return {Number} direction + */ + function getDirection(x, y) { + if (x === y) { + return DIRECTION_NONE; + } + + if (abs(x) >= abs(y)) { + return x > 0 ? DIRECTION_LEFT : DIRECTION_RIGHT; + } + return y > 0 ? DIRECTION_UP : DIRECTION_DOWN; + } + + /** + * calculate the absolute distance between two points + * @param {Object} p1 {x, y} + * @param {Object} p2 {x, y} + * @param {Array} [props] containing x and y keys + * @return {Number} distance + */ + function getDistance(p1, p2, props) { + if (!props) { + props = PROPS_XY; + } + var x = p2[props[0]] - p1[props[0]], + y = p2[props[1]] - p1[props[1]]; + + return Math.sqrt((x * x) + (y * y)); + } + + /** + * calculate the angle between two coordinates + * @param {Object} p1 + * @param {Object} p2 + * @param {Array} [props] containing x and y keys + * @return {Number} angle + */ + function getAngle(p1, p2, props) { + if (!props) { + props = PROPS_XY; + } + var x = p2[props[0]] - p1[props[0]], + y = p2[props[1]] - p1[props[1]]; + return Math.atan2(y, x) * 180 / Math.PI; + } + + /** + * calculate the rotation degrees between two pointersets + * @param {Array} start array of pointers + * @param {Array} end array of pointers + * @return {Number} rotation + */ + function getRotation(start, end) { + return getAngle(end[1], end[0], PROPS_CLIENT_XY) - getAngle(start[1], start[0], PROPS_CLIENT_XY); + } + + /** + * calculate the scale factor between two pointersets + * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out + * @param {Array} start array of pointers + * @param {Array} end array of pointers + * @return {Number} scale + */ + function getScale(start, end) { + return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY); + } + + var MOUSE_INPUT_MAP = { + mousedown: INPUT_START, + mousemove: INPUT_MOVE, + mouseup: INPUT_END + }; + + var MOUSE_ELEMENT_EVENTS = 'mousedown'; + var MOUSE_WINDOW_EVENTS = 'mousemove mouseup'; + + /** + * Mouse events input + * @constructor + * @extends Input + */ + function MouseInput() { + this.evEl = MOUSE_ELEMENT_EVENTS; + this.evWin = MOUSE_WINDOW_EVENTS; + + this.allow = true; // used by Input.TouchMouse to disable mouse events + this.pressed = false; // mousedown state + + Input.apply(this, arguments); + } + + inherit(MouseInput, Input, { /** - * the core touch event handler. - * this finds out if we should to detect gestures - * @method onTouch - * @param {HTMLElement} element - * @param {String} eventType matches `EVENT_START|MOVE|END` - * @param {Function} handler - * @return onTouchHandler {Function} the core event handler + * handle mouse events + * @param {Object} ev */ - onTouch: function onTouch(element, eventType, handler) { - var self = this; + handler: function MEhandler(ev) { + var eventType = MOUSE_INPUT_MAP[ev.type]; - var onTouchHandler = function onTouchHandler(ev) { - var srcType = ev.type.toLowerCase(), - isPointer = Hammer.HAS_POINTEREVENTS, - isMouse = Utils.inStr(srcType, 'mouse'), - triggerType; + // on start we want to have the left mouse button down + if (eventType & INPUT_START && ev.button === 0) { + this.pressed = true; + } - // if we are in a mouseevent, but there has been a touchevent triggered in this session - // we want to do nothing. simply break out of the event. - if(isMouse && self.preventMouseEvents) { - return; + if (eventType & INPUT_MOVE && ev.which !== 1) { + eventType = INPUT_END; + } - // mousebutton must be down - } else if(isMouse && eventType == EVENT_START && ev.button === 0) { - self.preventMouseEvents = false; - self.shouldDetect = true; - } else if(isPointer && eventType == EVENT_START) { - self.shouldDetect = (ev.buttons === 1 || PointerEvent.matchType(POINTER_TOUCH, ev)); - // just a valid start event, but no mouse - } else if(!isMouse && eventType == EVENT_START) { - self.preventMouseEvents = true; - self.shouldDetect = true; - } + // mouse must be down, and mouse events are allowed (see the TouchMouse input) + if (!this.pressed || !this.allow) { + return; + } - // update the pointer event before entering the detection - if(isPointer && eventType != EVENT_END) { - PointerEvent.updatePointer(eventType, ev); - } + if (eventType & INPUT_END) { + this.pressed = false; + } - // we are in a touch/down state, so allowed detection of gestures - if(self.shouldDetect) { - triggerType = self.doDetect.call(self, ev, eventType, element, handler); - } + this.callback(this.manager, eventType, { + pointers: [ev], + changedPointers: [ev], + pointerType: INPUT_TYPE_MOUSE, + srcEvent: ev + }); + } + }); - // ...and we are done with the detection - // so reset everything to start each detection totally fresh - if(triggerType == EVENT_END) { - self.preventMouseEvents = false; - self.shouldDetect = false; - PointerEvent.reset(); - // update the pointerevent object after the detection - } + var POINTER_INPUT_MAP = { + pointerdown: INPUT_START, + pointermove: INPUT_MOVE, + pointerup: INPUT_END, + pointercancel: INPUT_CANCEL, + pointerout: INPUT_CANCEL + }; - if(isPointer && eventType == EVENT_END) { - PointerEvent.updatePointer(eventType, ev); - } - }; + // in IE10 the pointer types is defined as an enum + var IE10_POINTER_TYPE_ENUM = { + 2: INPUT_TYPE_TOUCH, + 3: INPUT_TYPE_PEN, + 4: INPUT_TYPE_MOUSE, + 5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816 + }; - this.on(element, EVENT_TYPES[eventType], onTouchHandler); - return onTouchHandler; - }, + var POINTER_ELEMENT_EVENTS = 'pointerdown'; + var POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel'; + + // IE10 has prefixed support, and case-sensitive + if (window.MSPointerEvent) { + POINTER_ELEMENT_EVENTS = 'MSPointerDown'; + POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel'; + } + + /** + * Pointer events input + * @constructor + * @extends Input + */ + function PointerEventInput() { + this.evEl = POINTER_ELEMENT_EVENTS; + this.evWin = POINTER_WINDOW_EVENTS; + Input.apply(this, arguments); + + this.store = (this.manager.session.pointerEvents = []); + } + + inherit(PointerEventInput, Input, { /** - * the core detection method - * this finds out what hammer-touch-events to trigger - * @method doDetect + * handle mouse events * @param {Object} ev - * @param {String} eventType matches `EVENT_START|MOVE|END` - * @param {HTMLElement} element - * @param {Function} handler - * @return {String} triggerType matches `EVENT_START|MOVE|END` */ - doDetect: function doDetect(ev, eventType, element, handler) { - var touchList = this.getTouchList(ev, eventType); - var touchListLength = touchList.length; - var triggerType = eventType; - var triggerChange = touchList.trigger; // used by fakeMultitouch plugin - var changedLength = touchListLength; + handler: function PEhandler(ev) { + var store = this.store; + var removePointer = false; - // at each touchstart-like event we want also want to trigger a TOUCH event... - if(eventType == EVENT_START) { - triggerChange = EVENT_TOUCH; - // ...the same for a touchend-like event - } else if(eventType == EVENT_END) { - triggerChange = EVENT_RELEASE; + var eventTypeNormalized = ev.type.toLowerCase().replace('ms', ''); + var eventType = POINTER_INPUT_MAP[eventTypeNormalized]; + var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType; - // keep track of how many touches have been removed - changedLength = touchList.length - ((ev.changedTouches) ? ev.changedTouches.length : 1); + var isTouch = (pointerType == INPUT_TYPE_TOUCH); + + // get index of the event in the store + var storeIndex = inArray(store, ev.pointerId, 'pointerId'); + + // start and mouse must be down + if (eventType & INPUT_START && (ev.button === 0 || isTouch)) { + if (storeIndex < 0) { + store.push(ev); + storeIndex = store.length - 1; + } + } else if (eventType & (INPUT_END | INPUT_CANCEL)) { + removePointer = true; } - // after there are still touches on the screen, - // we just want to trigger a MOVE event. so change the START or END to a MOVE - // but only after detection has been started, the first time we actualy want a START - if(changedLength > 0 && this.started) { - triggerType = EVENT_MOVE; + // it not found, so the pointer hasn't been down (so it's probably a hover) + if (storeIndex < 0) { + return; } - // detection has been started, we keep track of this, see above - this.started = true; + // update the event in the store + store[storeIndex] = ev; - // generate some event data, some basic information - var evData = this.collectEventData(element, triggerType, touchList, ev); + this.callback(this.manager, eventType, { + pointers: store, + changedPointers: [ev], + pointerType: pointerType, + srcEvent: ev + }); - // trigger the triggerType event before the change (TOUCH, RELEASE) events - // but the END event should be at last - if(eventType != EVENT_END) { - handler.call(Detection, evData); + if (removePointer) { + // remove from the store + store.splice(storeIndex, 1); } + } + }); + + var SINGLE_TOUCH_INPUT_MAP = { + touchstart: INPUT_START, + touchmove: INPUT_MOVE, + touchend: INPUT_END, + touchcancel: INPUT_CANCEL + }; - // trigger a change (TOUCH, RELEASE) event, this means the length of the touches changed - if(triggerChange) { - evData.changedLength = changedLength; - evData.eventType = triggerChange; + var SINGLE_TOUCH_TARGET_EVENTS = 'touchstart'; + var SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel'; - handler.call(Detection, evData); + /** + * Touch events input + * @constructor + * @extends Input + */ + function SingleTouchInput() { + this.evTarget = SINGLE_TOUCH_TARGET_EVENTS; + this.evWin = SINGLE_TOUCH_WINDOW_EVENTS; + this.started = false; + + Input.apply(this, arguments); + } - evData.eventType = triggerType; - delete evData.changedLength; + inherit(SingleTouchInput, Input, { + handler: function TEhandler(ev) { + var type = SINGLE_TOUCH_INPUT_MAP[ev.type]; + + // should we handle the touch events? + if (type === INPUT_START) { + this.started = true; } - // trigger the END event - if(triggerType == EVENT_END) { - handler.call(Detection, evData); + if (!this.started) { + return; + } - // ...and we are done with the detection - // so reset everything to start each detection totally fresh + var touches = normalizeSingleTouches.call(this, ev, type); + + // when done, reset the started state + if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) { this.started = false; } - return triggerType; - }, + this.callback(this.manager, type, { + pointers: touches[0], + changedPointers: touches[1], + pointerType: INPUT_TYPE_TOUCH, + srcEvent: ev + }); + } + }); - /** - * we have different events for each device/browser - * determine what we need and set them in the EVENT_TYPES constant - * the `onTouch` method is bind to these properties. - * @method determineEventTypes - * @return {Object} events - */ - determineEventTypes: function determineEventTypes() { - var types; - if(Hammer.HAS_POINTEREVENTS) { - if(window.PointerEvent) { - types = [ - 'pointerdown', - 'pointermove', - 'pointerup pointercancel lostpointercapture' - ]; - } else { - types = [ - 'MSPointerDown', - 'MSPointerMove', - 'MSPointerUp MSPointerCancel MSLostPointerCapture' - ]; - } - } else if(Hammer.NO_MOUSEEVENTS) { - types = [ - 'touchstart', - 'touchmove', - 'touchend touchcancel' - ]; - } else { - types = [ - 'touchstart mousedown', - 'touchmove mousemove', - 'touchend touchcancel mouseup' - ]; - } + /** + * @this {TouchInput} + * @param {Object} ev + * @param {Number} type flag + * @returns {undefined|Array} [all, changed] + */ + function normalizeSingleTouches(ev, type) { + var all = toArray(ev.touches); + var changed = toArray(ev.changedTouches); - EVENT_TYPES[EVENT_START] = types[0]; - EVENT_TYPES[EVENT_MOVE] = types[1]; - EVENT_TYPES[EVENT_END] = types[2]; - return EVENT_TYPES; - }, + if (type & (INPUT_END | INPUT_CANCEL)) { + all = uniqueArray(all.concat(changed), 'identifier', true); + } - /** - * create touchList depending on the event - * @method getTouchList - * @param {Object} ev - * @param {String} eventType - * @return {Array} touches - */ - getTouchList: function getTouchList(ev, eventType) { - // get the fake pointerEvent touchlist - if(Hammer.HAS_POINTEREVENTS) { - return PointerEvent.getTouchList(); + return [all, changed]; + } + + var TOUCH_INPUT_MAP = { + touchstart: INPUT_START, + touchmove: INPUT_MOVE, + touchend: INPUT_END, + touchcancel: INPUT_CANCEL + }; + + var TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel'; + + /** + * Multi-user touch events input + * @constructor + * @extends Input + */ + function TouchInput() { + this.evTarget = TOUCH_TARGET_EVENTS; + this.targetIds = {}; + + Input.apply(this, arguments); + } + + inherit(TouchInput, Input, { + handler: function MTEhandler(ev) { + var type = TOUCH_INPUT_MAP[ev.type]; + var touches = getTouches.call(this, ev, type); + if (!touches) { + return; } - // get the touchlist - if(ev.touches) { - if(eventType == EVENT_MOVE) { - return ev.touches; - } + this.callback(this.manager, type, { + pointers: touches[0], + changedPointers: touches[1], + pointerType: INPUT_TYPE_TOUCH, + srcEvent: ev + }); + } + }); - var identifiers = []; - var concat = [].concat(Utils.toArray(ev.touches), Utils.toArray(ev.changedTouches)); - var touchList = []; + /** + * @this {TouchInput} + * @param {Object} ev + * @param {Number} type flag + * @returns {undefined|Array} [all, changed] + */ + function getTouches(ev, type) { + var allTouches = toArray(ev.touches); + var targetIds = this.targetIds; - Utils.each(concat, function(touch) { - if(Utils.inArray(identifiers, touch.identifier) === false) { - touchList.push(touch); - } - identifiers.push(touch.identifier); - }); + // when there is only one touch, the process can be simplified + if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) { + targetIds[allTouches[0].identifier] = true; + return [allTouches, allTouches]; + } + + var i, + targetTouches, + changedTouches = toArray(ev.changedTouches), + changedTargetTouches = [], + target = this.target; + + // get target touches from touches + targetTouches = allTouches.filter(function(touch) { + return hasParent(touch.target, target); + }); - return touchList; + // collect touches + if (type === INPUT_START) { + i = 0; + while (i < targetTouches.length) { + targetIds[targetTouches[i].identifier] = true; + i++; } + } - // make fake touchList from mouse position - ev.identifier = 1; - return [ev]; - }, + // filter changed touches to only contain touches that exist in the collected target ids + i = 0; + while (i < changedTouches.length) { + if (targetIds[changedTouches[i].identifier]) { + changedTargetTouches.push(changedTouches[i]); + } + + // cleanup removed touches + if (type & (INPUT_END | INPUT_CANCEL)) { + delete targetIds[changedTouches[i].identifier]; + } + i++; + } + + if (!changedTargetTouches.length) { + return; + } + + return [ + // merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel' + uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true), + changedTargetTouches + ]; + } + + /** + * Combined touch and mouse input + * + * Touch has a higher priority then mouse, and while touching no mouse events are allowed. + * This because touch devices also emit mouse events while doing a touch. + * + * @constructor + * @extends Input + */ + function TouchMouseInput() { + Input.apply(this, arguments); + + var handler = bindFn(this.handler, this); + this.touch = new TouchInput(this.manager, handler); + this.mouse = new MouseInput(this.manager, handler); + } + inherit(TouchMouseInput, Input, { /** - * collect basic event data - * @method collectEventData - * @param {HTMLElement} element - * @param {String} eventType matches `EVENT_START|MOVE|END` - * @param {Array} touches - * @param {Object} ev - * @return {Object} ev + * handle mouse and touch events + * @param {Hammer} manager + * @param {String} inputEvent + * @param {Object} inputData */ - collectEventData: function collectEventData(element, eventType, touches, ev) { - // find out pointerType - var pointerType = POINTER_TOUCH; - if(Utils.inStr(ev.type, 'mouse') || PointerEvent.matchType(POINTER_MOUSE, ev)) { - pointerType = POINTER_MOUSE; - } else if(PointerEvent.matchType(POINTER_PEN, ev)) { - pointerType = POINTER_PEN; + handler: function TMEhandler(manager, inputEvent, inputData) { + var isTouch = (inputData.pointerType == INPUT_TYPE_TOUCH), + isMouse = (inputData.pointerType == INPUT_TYPE_MOUSE); + + // when we're in a touch event, so block all upcoming mouse events + // most mobile browser also emit mouseevents, right after touchstart + if (isTouch) { + this.mouse.allow = false; + } else if (isMouse && !this.mouse.allow) { + return; } - return { - center: Utils.getCenter(touches), - timeStamp: Date.now(), - target: ev.target, - touches: touches, - eventType: eventType, - pointerType: pointerType, - srcEvent: ev, - - /** - * prevent the browser default actions - * mostly used to disable scrolling of the browser - */ - preventDefault: function() { - var srcEvent = this.srcEvent; - srcEvent.preventManipulation && srcEvent.preventManipulation(); - srcEvent.preventDefault && srcEvent.preventDefault(); - }, + // reset the allowMouse when we're done + if (inputEvent & (INPUT_END | INPUT_CANCEL)) { + this.mouse.allow = true; + } - /** - * stop bubbling the event up to its parents - */ - stopPropagation: function() { - this.srcEvent.stopPropagation(); - }, + this.callback(manager, inputEvent, inputData); + }, - /** - * immediately stop gesture detection - * might be useful after a swipe was detected - * @return {*} - */ - stopDetect: function() { - return Detection.stopDetect(); - } - }; + /** + * remove the event listeners + */ + destroy: function destroy() { + this.touch.destroy(); + this.mouse.destroy(); } - }; + }); + var PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction'); + var NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined; + + // magical touchAction value + var TOUCH_ACTION_COMPUTE = 'compute'; + var TOUCH_ACTION_AUTO = 'auto'; + var TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented + var TOUCH_ACTION_NONE = 'none'; + var TOUCH_ACTION_PAN_X = 'pan-x'; + var TOUCH_ACTION_PAN_Y = 'pan-y'; /** - * @module hammer - * - * @class PointerEvent - * @static + * Touch Action + * sets the touchAction property or uses the js alternative + * @param {Manager} manager + * @param {String} value + * @constructor */ - var PointerEvent = Hammer.PointerEvent = { + function TouchAction(manager, value) { + this.manager = manager; + this.set(value); + } + + TouchAction.prototype = { /** - * holds all pointers, by `identifier` - * @property pointers - * @type {Object} + * set the touchAction value on the element or enable the polyfill + * @param {String} value */ - pointers: {}, + set: function(value) { + // find out the touch-action by the event handlers + if (value == TOUCH_ACTION_COMPUTE) { + value = this.compute(); + } + + if (NATIVE_TOUCH_ACTION) { + this.manager.element.style[PREFIXED_TOUCH_ACTION] = value; + } + this.actions = value.toLowerCase().trim(); + }, /** - * get the pointers as an array - * @method getTouchList - * @return {Array} touchlist + * just re-set the touchAction value */ - getTouchList: function getTouchList() { - var touchlist = []; - // we can use forEach since pointerEvents only is in IE10 - Utils.each(this.pointers, function(pointer) { - touchlist.push(pointer); - }); - return touchlist; + update: function() { + this.set(this.manager.options.touchAction); }, /** - * update the position of a pointer - * @method updatePointer - * @param {String} eventType matches `EVENT_START|MOVE|END` - * @param {Object} pointerEvent + * compute the value for the touchAction property based on the recognizer's settings + * @returns {String} value */ - updatePointer: function updatePointer(eventType, pointerEvent) { - if(eventType == EVENT_END || (eventType != EVENT_END && pointerEvent.buttons !== 1)) { - delete this.pointers[pointerEvent.pointerId]; - } else { - pointerEvent.identifier = pointerEvent.pointerId; - this.pointers[pointerEvent.pointerId] = pointerEvent; - } + compute: function() { + var actions = []; + each(this.manager.recognizers, function(recognizer) { + if (boolOrFn(recognizer.options.enable, [recognizer])) { + actions = actions.concat(recognizer.getTouchAction()); + } + }); + return cleanTouchActions(actions.join(' ')); }, /** - * check if ev matches pointertype - * @method matchType - * @param {String} pointerType matches `POINTER_MOUSE|TOUCH|PEN` - * @param {PointerEvent} ev + * this method is called on each input cycle and provides the preventing of the browser behavior + * @param {Object} input */ - matchType: function matchType(pointerType, ev) { - if(!ev.pointerType) { - return false; + preventDefaults: function(input) { + // not needed with native support for the touchAction property + if (NATIVE_TOUCH_ACTION) { + return; } - var pt = ev.pointerType, - types = {}; + var srcEvent = input.srcEvent; + var direction = input.offsetDirection; - types[POINTER_MOUSE] = (pt === (ev.MSPOINTER_TYPE_MOUSE || POINTER_MOUSE)); - types[POINTER_TOUCH] = (pt === (ev.MSPOINTER_TYPE_TOUCH || POINTER_TOUCH)); - types[POINTER_PEN] = (pt === (ev.MSPOINTER_TYPE_PEN || POINTER_PEN)); - return types[pointerType]; + // if the touch action did prevented once this session + if (this.manager.session.prevented) { + srcEvent.preventDefault(); + return; + } + + var actions = this.actions; + var hasNone = inStr(actions, TOUCH_ACTION_NONE); + var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y); + var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X); + + if (hasNone || + (hasPanY && direction & DIRECTION_HORIZONTAL) || + (hasPanX && direction & DIRECTION_VERTICAL)) { + return this.preventSrc(srcEvent); + } }, /** - * reset the stored pointers - * @method reset + * call preventDefault to prevent the browser's default behavior (scrolling in most cases) + * @param {Object} srcEvent */ - reset: function resetList() { - this.pointers = {}; + preventSrc: function(srcEvent) { + this.manager.session.prevented = true; + srcEvent.preventDefault(); } }; + /** + * when the touchActions are collected they are not a valid value, so we need to clean things up. * + * @param {String} actions + * @returns {*} + */ + function cleanTouchActions(actions) { + // none + if (inStr(actions, TOUCH_ACTION_NONE)) { + return TOUCH_ACTION_NONE; + } + + var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X); + var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y); + + // pan-x and pan-y can be combined + if (hasPanX && hasPanY) { + return TOUCH_ACTION_PAN_X + ' ' + TOUCH_ACTION_PAN_Y; + } + + // pan-x OR pan-y + if (hasPanX || hasPanY) { + return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y; + } + + // manipulation + if (inStr(actions, TOUCH_ACTION_MANIPULATION)) { + return TOUCH_ACTION_MANIPULATION; + } + + return TOUCH_ACTION_AUTO; + } /** - * @module hammer - * - * @class Detection - * @static + * Recognizer flow explained; * + * All recognizers have the initial state of POSSIBLE when a input session starts. + * The definition of a input session is from the first input until the last input, with all it's movement in it. * + * Example session for mouse-input: mousedown -> mousemove -> mouseup + * + * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed + * which determines with state it should be. + * + * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to + * POSSIBLE to give it another change on the next cycle. + * + * Possible + * | + * +-----+---------------+ + * | | + * +-----+-----+ | + * | | | + * Failed Cancelled | + * +-------+------+ + * | | + * Recognized Began + * | + * Changed + * | + * Ended/Recognized + */ + var STATE_POSSIBLE = 1; + var STATE_BEGAN = 2; + var STATE_CHANGED = 4; + var STATE_ENDED = 8; + var STATE_RECOGNIZED = STATE_ENDED; + var STATE_CANCELLED = 16; + var STATE_FAILED = 32; + + /** + * Recognizer + * Every recognizer needs to extend from this class. + * @constructor + * @param {Object} options */ - var Detection = Hammer.detection = { - // contains all registred Hammer.gestures in the correct order - gestures: [], + function Recognizer(options) { + this.id = uniqueId(); + + this.manager = null; + this.options = merge(options || {}, this.defaults); + + // default is enable true + this.options.enable = ifUndefined(this.options.enable, true); + + this.state = STATE_POSSIBLE; - // data of the current Hammer.gesture detection session - current: null, + this.simultaneous = {}; + this.requireFail = []; + } - // the previous Hammer.gesture session data - // is a full clone of the previous gesture.current object - previous: null, + Recognizer.prototype = { + /** + * @virtual + * @type {Object} + */ + defaults: {}, - // when this becomes true, no gestures are fired - stopped: false, + /** + * set options + * @param {Object} options + * @return {Recognizer} + */ + set: function(options) { + extend(this.options, options); + + // also update the touchAction, in case something changed about the directions/enabled state + this.manager && this.manager.touchAction.update(); + return this; + }, /** - * start Hammer.gesture detection - * @method startDetect - * @param {Hammer.Instance} inst - * @param {Object} eventData + * recognize simultaneous with an other recognizer. + * @param {Recognizer} otherRecognizer + * @returns {Recognizer} this */ - startDetect: function startDetect(inst, eventData) { - // already busy with a Hammer.gesture detection on an element - if(this.current) { - return; + recognizeWith: function(otherRecognizer) { + if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) { + return this; } - this.stopped = false; + var simultaneous = this.simultaneous; + otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this); + if (!simultaneous[otherRecognizer.id]) { + simultaneous[otherRecognizer.id] = otherRecognizer; + otherRecognizer.recognizeWith(this); + } + return this; + }, - // holds current session - this.current = { - inst: inst, // reference to HammerInstance we're working for - startEvent: Utils.extend({}, eventData), // start eventData for distances, timing etc - lastEvent: false, // last eventData - lastCalcEvent: false, // last eventData for calculations. - futureCalcEvent: false, // last eventData for calculations. - lastCalcData: {}, // last lastCalcData - name: '' // current gesture we're in/detected, can be 'tap', 'hold' etc - }; + /** + * drop the simultaneous link. it doesnt remove the link on the other recognizer. + * @param {Recognizer} otherRecognizer + * @returns {Recognizer} this + */ + dropRecognizeWith: function(otherRecognizer) { + if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) { + return this; + } - this.detect(eventData); + otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this); + delete this.simultaneous[otherRecognizer.id]; + return this; }, /** - * Hammer.gesture detection - * @method detect - * @param {Object} eventData - * @return {any} + * recognizer can only run when an other is failing + * @param {Recognizer} otherRecognizer + * @returns {Recognizer} this */ - detect: function detect(eventData) { - if(!this.current || this.stopped) { - return; + requireFailure: function(otherRecognizer) { + if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) { + return this; } - // extend event data with calculations about scale, distance etc - eventData = this.extendEventData(eventData); - - // hammer instance and instance options - var inst = this.current.inst, - instOptions = inst.options; - - // call Hammer.gesture handlers - Utils.each(this.gestures, function triggerGesture(gesture) { - // only when the instance options have enabled this gesture - if(!this.stopped && inst.enabled && instOptions[gesture.name]) { - gesture.handler.call(gesture, eventData, inst); - } - }, this); + var requireFail = this.requireFail; + otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this); + if (inArray(requireFail, otherRecognizer) === -1) { + requireFail.push(otherRecognizer); + otherRecognizer.requireFailure(this); + } + return this; + }, - // store as previous event event - if(this.current) { - this.current.lastEvent = eventData; + /** + * drop the requireFailure link. it does not remove the link on the other recognizer. + * @param {Recognizer} otherRecognizer + * @returns {Recognizer} this + */ + dropRequireFailure: function(otherRecognizer) { + if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) { + return this; } - if(eventData.eventType == EVENT_END) { - this.stopDetect(); + otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this); + var index = inArray(this.requireFail, otherRecognizer); + if (index > -1) { + this.requireFail.splice(index, 1); } + return this; + }, - return eventData; + /** + * has require failures boolean + * @returns {boolean} + */ + hasRequireFailures: function() { + return this.requireFail.length > 0; }, /** - * clear the Hammer.gesture vars - * this is called on endDetect, but can also be used when a final Hammer.gesture has been detected - * to stop other Hammer.gestures from being fired - * @method stopDetect + * if the recognizer can recognize simultaneous with an other recognizer + * @param {Recognizer} otherRecognizer + * @returns {Boolean} */ - stopDetect: function stopDetect() { - // clone current data to the store as the previous gesture - // used for the double tap gesture, since this is an other gesture detect session - this.previous = Utils.extend({}, this.current); - - // reset the current - this.current = null; - this.stopped = true; + canRecognizeWith: function(otherRecognizer) { + return !!this.simultaneous[otherRecognizer.id]; }, /** - * calculate velocity, angle and direction - * @method getVelocityData - * @param {Object} ev - * @param {Object} center - * @param {Number} deltaTime - * @param {Number} deltaX - * @param {Number} deltaY + * You should use `tryEmit` instead of `emit` directly to check + * that all the needed recognizers has failed before emitting. + * @param {Object} input */ - getCalculatedData: function getCalculatedData(ev, center, deltaTime, deltaX, deltaY) { - var cur = this.current, - recalc = false, - calcEv = cur.lastCalcEvent, - calcData = cur.lastCalcData; + emit: function(input) { + var self = this; + var state = this.state; - if(calcEv && ev.timeStamp - calcEv.timeStamp > Hammer.CALCULATE_INTERVAL) { - center = calcEv.center; - deltaTime = ev.timeStamp - calcEv.timeStamp; - deltaX = ev.center.clientX - calcEv.center.clientX; - deltaY = ev.center.clientY - calcEv.center.clientY; - recalc = true; + function emit(withState) { + self.manager.emit(self.options.event + (withState ? stateStr(state) : ''), input); } - if(ev.eventType == EVENT_TOUCH || ev.eventType == EVENT_RELEASE) { - cur.futureCalcEvent = ev; + // 'panstart' and 'panmove' + if (state < STATE_ENDED) { + emit(true); } - if(!cur.lastCalcEvent || recalc) { - calcData.velocity = Utils.getVelocity(deltaTime, deltaX, deltaY); - calcData.angle = Utils.getAngle(center, ev.center); - calcData.direction = Utils.getDirection(center, ev.center); + emit(); // simple 'eventName' events - cur.lastCalcEvent = cur.futureCalcEvent || ev; - cur.futureCalcEvent = ev; + // panend and pancancel + if (state >= STATE_ENDED) { + emit(true); } - - ev.velocityX = calcData.velocity.x; - ev.velocityY = calcData.velocity.y; - ev.interimAngle = calcData.angle; - ev.interimDirection = calcData.direction; }, /** - * extend eventData for Hammer.gestures - * @method extendEventData - * @param {Object} ev - * @return {Object} ev + * Check that all the require failure recognizers has failed, + * if true, it emits a gesture event, + * otherwise, setup the state to FAILED. + * @param {Object} input */ - extendEventData: function extendEventData(ev) { - var cur = this.current, - startEv = cur.startEvent, - lastEv = cur.lastEvent || startEv; - - // update the start touchlist to calculate the scale/rotation - if(ev.eventType == EVENT_TOUCH || ev.eventType == EVENT_RELEASE) { - startEv.touches = []; - Utils.each(ev.touches, function(touch) { - startEv.touches.push({ - clientX: touch.clientX, - clientY: touch.clientY - }); - }); + tryEmit: function(input) { + if (this.canEmit()) { + return this.emit(input); } + // it's failing anyway + this.state = STATE_FAILED; + }, - var deltaTime = ev.timeStamp - startEv.timeStamp, - deltaX = ev.center.clientX - startEv.center.clientX, - deltaY = ev.center.clientY - startEv.center.clientY; - - this.getCalculatedData(ev, lastEv.center, deltaTime, deltaX, deltaY); + /** + * can we emit? + * @returns {boolean} + */ + canEmit: function() { + var i = 0; + while (i < this.requireFail.length) { + if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) { + return false; + } + i++; + } + return true; + }, - Utils.extend(ev, { - startEvent: startEv, + /** + * update the recognizer + * @param {Object} inputData + */ + recognize: function(inputData) { + // make a new copy of the inputData + // so we can change the inputData without messing up the other recognizers + var inputDataClone = extend({}, inputData); + + // is is enabled and allow recognizing? + if (!boolOrFn(this.options.enable, [this, inputDataClone])) { + this.reset(); + this.state = STATE_FAILED; + return; + } - deltaTime: deltaTime, - deltaX: deltaX, - deltaY: deltaY, + // reset when we've reached the end + if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) { + this.state = STATE_POSSIBLE; + } - distance: Utils.getDistance(startEv.center, ev.center), - angle: Utils.getAngle(startEv.center, ev.center), - direction: Utils.getDirection(startEv.center, ev.center), - scale: Utils.getScale(startEv.touches, ev.touches), - rotation: Utils.getRotation(startEv.touches, ev.touches) - }); + this.state = this.process(inputDataClone); - return ev; + // the recognizer has recognized a gesture + // so trigger an event + if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) { + this.tryEmit(inputDataClone); + } }, /** - * register new gesture - * @method register - * @param {Object} gesture object, see `gestures/` for documentation - * @return {Array} gestures + * return the state of the recognizer + * the actual recognizing happens in this method + * @virtual + * @param {Object} inputData + * @returns {Const} STATE */ - register: function register(gesture) { - // add an enable gesture options if there is no given - var options = gesture.defaults || {}; - if(options[gesture.name] === undefined) { - options[gesture.name] = true; - } + process: function(inputData) { }, // jshint ignore:line - // extend Hammer default options with the Hammer.gesture options - Utils.extend(Hammer.defaults, options, true); - - // set its index - gesture.index = gesture.index || 1000; - - // add Hammer.gesture to the list - this.gestures.push(gesture); + /** + * return the preferred touch-action + * @virtual + * @returns {Array} + */ + getTouchAction: function() { }, - // sort the list by index - this.gestures.sort(function(a, b) { - if(a.index < b.index) { - return -1; - } - if(a.index > b.index) { - return 1; - } - return 0; - }); + /** + * called when the gesture isn't allowed to recognize + * like when another is being recognized or it is disabled + * @virtual + */ + reset: function() { } + }; - return this.gestures; + /** + * get a usable string, used as event postfix + * @param {Const} state + * @returns {String} state + */ + function stateStr(state) { + if (state & STATE_CANCELLED) { + return 'cancel'; + } else if (state & STATE_ENDED) { + return 'end'; + } else if (state & STATE_CHANGED) { + return 'move'; + } else if (state & STATE_BEGAN) { + return 'start'; } - }; + return ''; + } + /** + * direction cons to string + * @param {Const} direction + * @returns {String} + */ + function directionStr(direction) { + if (direction == DIRECTION_DOWN) { + return 'down'; + } else if (direction == DIRECTION_UP) { + return 'up'; + } else if (direction == DIRECTION_LEFT) { + return 'left'; + } else if (direction == DIRECTION_RIGHT) { + return 'right'; + } + return ''; + } /** - * @module hammer + * get a recognizer by name if it is bound to a manager + * @param {Recognizer|String} otherRecognizer + * @param {Recognizer} recognizer + * @returns {Recognizer} */ + function getRecognizerByNameIfManager(otherRecognizer, recognizer) { + var manager = recognizer.manager; + if (manager) { + return manager.get(otherRecognizer); + } + return otherRecognizer; + } /** - * create new hammer instance - * all methods should return the instance itself, so it is chainable. - * - * @class Instance + * This recognizer is just used as a base for the simple attribute recognizers. * @constructor - * @param {HTMLElement} element - * @param {Object} [options={}] options are merged with `Hammer.defaults` - * @return {Hammer.Instance} + * @extends Recognizer */ - Hammer.Instance = function(element, options) { - var self = this; - - // setup HammerJS window events and register all gestures - // this also sets up the default options - setup(); + function AttrRecognizer() { + Recognizer.apply(this, arguments); + } + inherit(AttrRecognizer, Recognizer, { /** - * @property element - * @type {HTMLElement} + * @namespace + * @memberof AttrRecognizer */ - this.element = element; + defaults: { + /** + * @type {Number} + * @default 1 + */ + pointers: 1 + }, /** - * @property enabled - * @type {Boolean} - * @protected + * Used to check if it the recognizer receives valid input, like input.distance > 10. + * @memberof AttrRecognizer + * @param {Object} input + * @returns {Boolean} recognized */ - this.enabled = true; + attrTest: function(input) { + var optionPointers = this.options.pointers; + return optionPointers === 0 || input.pointers.length === optionPointers; + }, /** - * options, merged with the defaults - * options with an _ are converted to camelCase - * @property options - * @type {Object} + * Process the input and return the state for the recognizer + * @memberof AttrRecognizer + * @param {Object} input + * @returns {*} State */ - Utils.each(options, function(value, name) { - delete options[name]; - options[Utils.toCamelCase(name)] = value; - }); - - this.options = Utils.extend(Utils.extend({}, Hammer.defaults), options || {}); - - // add some css to the element to prevent the browser from doing its native behavoir - if(this.options.behavior) { - Utils.toggleBehavior(this.element, this.options.behavior, true); + process: function(input) { + var state = this.state; + var eventType = input.eventType; + + var isRecognized = state & (STATE_BEGAN | STATE_CHANGED); + var isValid = this.attrTest(input); + + // on cancel input and we've recognized before, return STATE_CANCELLED + if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) { + return state | STATE_CANCELLED; + } else if (isRecognized || isValid) { + if (eventType & INPUT_END) { + return state | STATE_ENDED; + } else if (!(state & STATE_BEGAN)) { + return STATE_BEGAN; + } + return state | STATE_CHANGED; + } + return STATE_FAILED; } + }); - /** - * event start handler on the element to start the detection - * @property eventStartHandler - * @type {Object} - */ - this.eventStartHandler = Event.onTouch(element, EVENT_START, function(ev) { - if(self.enabled && ev.eventType == EVENT_START) { - Detection.startDetect(self, ev); - } else if(ev.eventType == EVENT_TOUCH) { - Detection.detect(ev); - } - }); + /** + * Pan + * Recognized when the pointer is down and moved in the allowed direction. + * @constructor + * @extends AttrRecognizer + */ + function PanRecognizer() { + AttrRecognizer.apply(this, arguments); - /** - * keep a list of user event handlers which needs to be removed when calling 'dispose' - * @property eventHandlers - * @type {Array} - */ - this.eventHandlers = []; - }; + this.pX = null; + this.pY = null; + } - Hammer.Instance.prototype = { + inherit(PanRecognizer, AttrRecognizer, { /** - * bind events to the instance - * @method on - * @chainable - * @param {String} gestures multiple gestures by splitting with a space - * @param {Function} handler - * @param {Object} handler.ev event object + * @namespace + * @memberof PanRecognizer */ - on: function onEvent(gestures, handler) { - var self = this; - Event.on(self.element, gestures, handler, function(type) { - self.eventHandlers.push({ gesture: type, handler: handler }); - }); - return self; + defaults: { + event: 'pan', + threshold: 10, + pointers: 1, + direction: DIRECTION_ALL }, - /** - * unbind events to the instance - * @method off - * @chainable - * @param {String} gestures - * @param {Function} handler - */ - off: function offEvent(gestures, handler) { - var self = this; + getTouchAction: function() { + var direction = this.options.direction; + var actions = []; + if (direction & DIRECTION_HORIZONTAL) { + actions.push(TOUCH_ACTION_PAN_Y); + } + if (direction & DIRECTION_VERTICAL) { + actions.push(TOUCH_ACTION_PAN_X); + } + return actions; + }, - Event.off(self.element, gestures, handler, function(type) { - var index = Utils.inArray({ gesture: type, handler: handler }); - if(index !== false) { - self.eventHandlers.splice(index, 1); + directionTest: function(input) { + var options = this.options; + var hasMoved = true; + var distance = input.distance; + var direction = input.direction; + var x = input.deltaX; + var y = input.deltaY; + + // lock to axis? + if (!(direction & options.direction)) { + if (options.direction & DIRECTION_HORIZONTAL) { + direction = (x === 0) ? DIRECTION_NONE : (x < 0) ? DIRECTION_LEFT : DIRECTION_RIGHT; + hasMoved = x != this.pX; + distance = Math.abs(input.deltaX); + } else { + direction = (y === 0) ? DIRECTION_NONE : (y < 0) ? DIRECTION_UP : DIRECTION_DOWN; + hasMoved = y != this.pY; + distance = Math.abs(input.deltaY); } - }); - return self; + } + input.direction = direction; + return hasMoved && distance > options.threshold && direction & options.direction; }, - /** - * trigger gesture event - * @method trigger - * @chainable - * @param {String} gesture - * @param {Object} [eventData] - */ - trigger: function triggerEvent(gesture, eventData) { - // optional - if(!eventData) { - eventData = {}; - } + attrTest: function(input) { + return AttrRecognizer.prototype.attrTest.call(this, input) && + (this.state & STATE_BEGAN || (!(this.state & STATE_BEGAN) && this.directionTest(input))); + }, - // create DOM event - var event = Hammer.DOCUMENT.createEvent('Event'); - event.initEvent(gesture, true, true); - event.gesture = eventData; + emit: function(input) { + this.pX = input.deltaX; + this.pY = input.deltaY; - // trigger on the target if it is in the instance element, - // this is for event delegation tricks - var element = this.element; - if(Utils.hasParent(eventData.target, element)) { - element = eventData.target; + var direction = directionStr(input.direction); + if (direction) { + this.manager.emit(this.options.event + direction, input); } - element.dispatchEvent(event); - return this; - }, + this._super.emit.call(this, input); + } + }); + + /** + * Pinch + * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out). + * @constructor + * @extends AttrRecognizer + */ + function PinchRecognizer() { + AttrRecognizer.apply(this, arguments); + } + inherit(PinchRecognizer, AttrRecognizer, { /** - * enable of disable hammer.js detection - * @method enable - * @chainable - * @param {Boolean} state + * @namespace + * @memberof PinchRecognizer */ - enable: function enable(state) { - this.enabled = state; - return this; + defaults: { + event: 'pinch', + threshold: 0, + pointers: 2 }, - /** - * dispose this hammer instance - * @method dispose - * @return {Null} - */ - dispose: function dispose() { - var i, eh; + getTouchAction: function() { + return [TOUCH_ACTION_NONE]; + }, - // undo all changes made by stop_browser_behavior - Utils.toggleBehavior(this.element, this.options.behavior, false); + attrTest: function(input) { + return this._super.attrTest.call(this, input) && + (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN); + }, - // unbind all custom event handlers - for(i = -1; (eh = this.eventHandlers[++i]);) { - Utils.off(this.element, eh.gesture, eh.handler); + emit: function(input) { + this._super.emit.call(this, input); + if (input.scale !== 1) { + var inOut = input.scale < 1 ? 'in' : 'out'; + this.manager.emit(this.options.event + inOut, input); } - - this.eventHandlers = []; - - // unbind the start event listener - Event.off(this.element, EVENT_TYPES[EVENT_START], this.eventStartHandler); - - return null; } - }; + }); - - /** - * @module gestures - */ - /** - * Move with x fingers (default 1) around on the page. - * Preventing the default browser behavior is a good way to improve feel and working. - * ```` - * hammertime.on("drag", function(ev) { - * console.log(ev); - * ev.gesture.preventDefault(); - * }); - * ```` - * - * @class Drag - * @static - */ - /** - * @event drag - * @param {Object} ev - */ - /** - * @event dragstart - * @param {Object} ev - */ - /** - * @event dragend - * @param {Object} ev - */ - /** - * @event drapleft - * @param {Object} ev - */ - /** - * @event dragright - * @param {Object} ev - */ - /** - * @event dragup - * @param {Object} ev - */ /** - * @event dragdown - * @param {Object} ev + * Press + * Recognized when the pointer is down for x ms without any movement. + * @constructor + * @extends Recognizer */ + function PressRecognizer() { + Recognizer.apply(this, arguments); - /** - * @param {String} name - */ - (function(name) { - var triggered = false; + this._timer = null; + this._input = null; + } + + inherit(PressRecognizer, Recognizer, { + /** + * @namespace + * @memberof PressRecognizer + */ + defaults: { + event: 'press', + pointers: 1, + time: 500, // minimal time of the pointer to be pressed + threshold: 5 // a minimal movement is ok, but keep it low + }, + + getTouchAction: function() { + return [TOUCH_ACTION_AUTO]; + }, + + process: function(input) { + var options = this.options; + var validPointers = input.pointers.length === options.pointers; + var validMovement = input.distance < options.threshold; + var validTime = input.deltaTime > options.time; + + this._input = input; + + // we only allow little movement + // and we've reached an end event, so a tap is possible + if (!validMovement || !validPointers || (input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime)) { + this.reset(); + } else if (input.eventType & INPUT_START) { + this.reset(); + this._timer = setTimeoutContext(function() { + this.state = STATE_RECOGNIZED; + this.tryEmit(); + }, options.time, this); + } else if (input.eventType & INPUT_END) { + return STATE_RECOGNIZED; + } + return STATE_FAILED; + }, - function dragGesture(ev, inst) { - var cur = Detection.current; + reset: function() { + clearTimeout(this._timer); + }, - // max touches - if(inst.options.dragMaxTouches > 0 && - ev.touches.length > inst.options.dragMaxTouches) { + emit: function(input) { + if (this.state !== STATE_RECOGNIZED) { return; } - switch(ev.eventType) { - case EVENT_START: - triggered = false; - break; - - case EVENT_MOVE: - // when the distance we moved is too small we skip this gesture - // or we can be already in dragging - if(ev.distance < inst.options.dragMinDistance && - cur.name != name) { - return; - } + if (input && (input.eventType & INPUT_END)) { + this.manager.emit(this.options.event + 'up', input); + } else { + this._input.timeStamp = now(); + this.manager.emit(this.options.event, this._input); + } + } + }); - var startCenter = cur.startEvent.center; - - // we are dragging! - if(cur.name != name) { - cur.name = name; - if(inst.options.dragDistanceCorrection && ev.distance > 0) { - // When a drag is triggered, set the event center to dragMinDistance pixels from the original event center. - // Without this correction, the dragged distance would jumpstart at dragMinDistance pixels instead of at 0. - // It might be useful to save the original start point somewhere - var factor = Math.abs(inst.options.dragMinDistance / ev.distance); - startCenter.pageX += ev.deltaX * factor; - startCenter.pageY += ev.deltaY * factor; - startCenter.clientX += ev.deltaX * factor; - startCenter.clientY += ev.deltaY * factor; - - // recalculate event data using new start point - ev = Detection.extendEventData(ev); - } - } + /** + * Rotate + * Recognized when two or more pointer are moving in a circular motion. + * @constructor + * @extends AttrRecognizer + */ + function RotateRecognizer() { + AttrRecognizer.apply(this, arguments); + } - // lock drag to axis? - if(cur.lastEvent.dragLockToAxis || - ( inst.options.dragLockToAxis && - inst.options.dragLockMinDistance <= ev.distance - )) { - ev.dragLockToAxis = true; - } + inherit(RotateRecognizer, AttrRecognizer, { + /** + * @namespace + * @memberof RotateRecognizer + */ + defaults: { + event: 'rotate', + threshold: 0, + pointers: 2 + }, - // keep direction on the axis that the drag gesture started on - var lastDirection = cur.lastEvent.direction; - if(ev.dragLockToAxis && lastDirection !== ev.direction) { - if(Utils.isVertical(lastDirection)) { - ev.direction = (ev.deltaY < 0) ? DIRECTION_UP : DIRECTION_DOWN; - } else { - ev.direction = (ev.deltaX < 0) ? DIRECTION_LEFT : DIRECTION_RIGHT; - } - } + getTouchAction: function() { + return [TOUCH_ACTION_NONE]; + }, - // first time, trigger dragstart event - if(!triggered) { - inst.trigger(name + 'start', ev); - triggered = true; - } + attrTest: function(input) { + return this._super.attrTest.call(this, input) && + (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN); + } + }); - // trigger events - inst.trigger(name, ev); - inst.trigger(name + ev.direction, ev); + /** + * Swipe + * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction. + * @constructor + * @extends AttrRecognizer + */ + function SwipeRecognizer() { + AttrRecognizer.apply(this, arguments); + } - var isVertical = Utils.isVertical(ev.direction); + inherit(SwipeRecognizer, AttrRecognizer, { + /** + * @namespace + * @memberof SwipeRecognizer + */ + defaults: { + event: 'swipe', + threshold: 10, + velocity: 0.65, + direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL, + pointers: 1 + }, - // block the browser events - if((inst.options.dragBlockVertical && isVertical) || - (inst.options.dragBlockHorizontal && !isVertical)) { - ev.preventDefault(); - } - break; + getTouchAction: function() { + return PanRecognizer.prototype.getTouchAction.call(this); + }, - case EVENT_RELEASE: - if(triggered && ev.changedLength <= inst.options.dragMaxTouches) { - inst.trigger(name + 'end', ev); - triggered = false; - } - break; + attrTest: function(input) { + var direction = this.options.direction; + var velocity; - case EVENT_END: - triggered = false; - break; + if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) { + velocity = input.velocity; + } else if (direction & DIRECTION_HORIZONTAL) { + velocity = input.velocityX; + } else if (direction & DIRECTION_VERTICAL) { + velocity = input.velocityY; } - } - Hammer.gestures.Drag = { - name: name, - index: 50, - handler: dragGesture, - defaults: { - /** - * minimal movement that have to be made before the drag event gets triggered - * @property dragMinDistance - * @type {Number} - * @default 10 - */ - dragMinDistance: 10, - - /** - * Set dragDistanceCorrection to true to make the starting point of the drag - * be calculated from where the drag was triggered, not from where the touch started. - * Useful to avoid a jerk-starting drag, which can make fine-adjustments - * through dragging difficult, and be visually unappealing. - * @property dragDistanceCorrection - * @type {Boolean} - * @default true - */ - dragDistanceCorrection: true, - - /** - * set 0 for unlimited, but this can conflict with transform - * @property dragMaxTouches - * @type {Number} - * @default 1 - */ - dragMaxTouches: 1, - - /** - * prevent default browser behavior when dragging occurs - * be careful with it, it makes the element a blocking element - * when you are using the drag gesture, it is a good practice to set this true - * @property dragBlockHorizontal - * @type {Boolean} - * @default false - */ - dragBlockHorizontal: false, - - /** - * same as `dragBlockHorizontal`, but for vertical movement - * @property dragBlockVertical - * @type {Boolean} - * @default false - */ - dragBlockVertical: false, - - /** - * dragLockToAxis keeps the drag gesture on the axis that it started on, - * It disallows vertical directions if the initial direction was horizontal, and vice versa. - * @property dragLockToAxis - * @type {Boolean} - * @default false - */ - dragLockToAxis: false, - - /** - * drag lock only kicks in when distance > dragLockMinDistance - * This way, locking occurs only when the distance has become large enough to reliably determine the direction - * @property dragLockMinDistance - * @type {Number} - * @default 25 - */ - dragLockMinDistance: 25 + return this._super.attrTest.call(this, input) && + direction & input.direction && + input.distance > this.options.threshold && + abs(velocity) > this.options.velocity && input.eventType & INPUT_END; + }, + + emit: function(input) { + var direction = directionStr(input.direction); + if (direction) { + this.manager.emit(this.options.event + direction, input); } - }; - })('drag'); - /** - * @module gestures - */ - /** - * trigger a simple gesture event, so you can do anything in your handler. - * only usable if you know what your doing... - * - * @class Gesture - * @static - */ - /** - * @event gesture - * @param {Object} ev - */ - Hammer.gestures.Gesture = { - name: 'gesture', - index: 1337, - handler: function releaseGesture(ev, inst) { - inst.trigger(this.name, ev); + this.manager.emit(this.options.event, input); } - }; + }); /** - * @module gestures - */ - /** - * Touch stays at the same place for x time + * A tap is ecognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur + * between the given interval and position. The delay option can be used to recognize multi-taps without firing + * a single tap. * - * @class Hold - * @static - */ - /** - * @event hold - * @param {Object} ev + * The eventData from the emitted event contains the property `tapCount`, which contains the amount of + * multi-taps being recognized. + * @constructor + * @extends Recognizer */ + function TapRecognizer() { + Recognizer.apply(this, arguments); - /** - * @param {String} name - */ - (function(name) { - var timer; + // previous time and center, + // used for tap counting + this.pTime = false; + this.pCenter = false; + + this._timer = null; + this._input = null; + this.count = 0; + } - function holdGesture(ev, inst) { - var options = inst.options, - current = Detection.current; + inherit(TapRecognizer, Recognizer, { + /** + * @namespace + * @memberof PinchRecognizer + */ + defaults: { + event: 'tap', + pointers: 1, + taps: 1, + interval: 300, // max time between the multi-tap taps + time: 250, // max time of the pointer to be down (like finger on the screen) + threshold: 2, // a minimal movement is ok, but keep it low + posThreshold: 10 // a multi-tap can be a bit off the initial position + }, - switch(ev.eventType) { - case EVENT_START: - clearTimeout(timer); + getTouchAction: function() { + return [TOUCH_ACTION_MANIPULATION]; + }, - // set the gesture so we can check in the timeout if it still is - current.name = name; + process: function(input) { + var options = this.options; - // set timer and if after the timeout it still is hold, - // we trigger the hold event - timer = setTimeout(function() { - if(current && current.name == name) { - inst.trigger(name, ev); - } - }, options.holdTimeout); - break; + var validPointers = input.pointers.length === options.pointers; + var validMovement = input.distance < options.threshold; + var validTouchTime = input.deltaTime < options.time; - case EVENT_MOVE: - if(ev.distance > options.holdThreshold) { - clearTimeout(timer); - } - break; + this.reset(); - case EVENT_RELEASE: - clearTimeout(timer); - break; + if ((input.eventType & INPUT_START) && (this.count === 0)) { + return this.failTimeout(); } - } - Hammer.gestures.Hold = { - name: name, - index: 10, - defaults: { - /** - * @property holdTimeout - * @type {Number} - * @default 500 - */ - holdTimeout: 500, - - /** - * movement allowed while holding - * @property holdThreshold - * @type {Number} - * @default 2 - */ - holdThreshold: 2 - }, - handler: holdGesture - }; - })('hold'); + // we only allow little movement + // and we've reached an end event, so a tap is possible + if (validMovement && validTouchTime && validPointers) { + if (input.eventType != INPUT_END) { + return this.failTimeout(); + } + + var validInterval = this.pTime ? (input.timeStamp - this.pTime < options.interval) : true; + var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold; + + this.pTime = input.timeStamp; + this.pCenter = input.center; + + if (!validMultiTap || !validInterval) { + this.count = 1; + } else { + this.count += 1; + } + + this._input = input; + + // if tap count matches we have recognized it, + // else it has began recognizing... + var tapCount = this.count % options.taps; + if (tapCount === 0) { + // no failing requirements, immediately trigger the tap event + // or wait as long as the multitap interval to trigger + if (!this.hasRequireFailures()) { + return STATE_RECOGNIZED; + } else { + this._timer = setTimeoutContext(function() { + this.state = STATE_RECOGNIZED; + this.tryEmit(); + }, options.interval, this); + return STATE_BEGAN; + } + } + } + return STATE_FAILED; + }, + + failTimeout: function() { + this._timer = setTimeoutContext(function() { + this.state = STATE_FAILED; + }, this.options.interval, this); + return STATE_FAILED; + }, + + reset: function() { + clearTimeout(this._timer); + }, - /** - * @module gestures - */ - /** - * when a touch is being released from the page - * - * @class Release - * @static - */ - /** - * @event release - * @param {Object} ev - */ - Hammer.gestures.Release = { - name: 'release', - index: Infinity, - handler: function releaseGesture(ev, inst) { - if(ev.eventType == EVENT_RELEASE) { - inst.trigger(this.name, ev); + emit: function() { + if (this.state == STATE_RECOGNIZED ) { + this._input.tapCount = this.count; + this.manager.emit(this.options.event, this._input); } } - }; + }); /** - * @module gestures - */ - /** - * triggers swipe events when the end velocity is above the threshold - * for best usage, set `preventDefault` (on the drag gesture) to `true` - * ```` - * hammertime.on("dragleft swipeleft", function(ev) { - * console.log(ev); - * ev.gesture.preventDefault(); - * }); - * ```` - * - * @class Swipe - * @static - */ - /** - * @event swipe - * @param {Object} ev - */ - /** - * @event swipeleft - * @param {Object} ev - */ - /** - * @event swiperight - * @param {Object} ev + * Simple way to create an manager with a default set of recognizers. + * @param {HTMLElement} element + * @param {Object} [options] + * @constructor */ + function Hammer(element, options) { + options = options || {}; + options.recognizers = ifUndefined(options.recognizers, Hammer.defaults.preset); + return new Manager(element, options); + } + /** - * @event swipeup - * @param {Object} ev + * @const {string} */ + Hammer.VERSION = '2.0.4'; + /** - * @event swipedown - * @param {Object} ev + * default settings + * @namespace */ - Hammer.gestures.Swipe = { - name: 'swipe', - index: 40, - defaults: { + Hammer.defaults = { + /** + * set if DOM events are being triggered. + * But this is slower and unused by simple implementations, so disabled by default. + * @type {Boolean} + * @default false + */ + domEvents: false, + + /** + * The value for the touchAction property/fallback. + * When set to `compute` it will magically set the correct value based on the added recognizers. + * @type {String} + * @default compute + */ + touchAction: TOUCH_ACTION_COMPUTE, + + /** + * @type {Boolean} + * @default true + */ + enable: true, + + /** + * EXPERIMENTAL FEATURE -- can be removed/changed + * Change the parent input target element. + * If Null, then it is being set the to main element. + * @type {Null|EventTarget} + * @default null + */ + inputTarget: null, + + /** + * force an input class + * @type {Null|Function} + * @default null + */ + inputClass: null, + + /** + * Default recognizer setup when calling `Hammer()` + * When creating a new Manager these will be skipped. + * @type {Array} + */ + preset: [ + // RecognizerClass, options, [recognizeWith, ...], [requireFailure, ...] + [RotateRecognizer, { enable: false }], + [PinchRecognizer, { enable: false }, ['rotate']], + [SwipeRecognizer,{ direction: DIRECTION_HORIZONTAL }], + [PanRecognizer, { direction: DIRECTION_HORIZONTAL }, ['swipe']], + [TapRecognizer], + [TapRecognizer, { event: 'doubletap', taps: 2 }, ['tap']], + [PressRecognizer] + ], + + /** + * Some CSS properties can be used to improve the working of Hammer. + * Add them to this method and they will be set when creating a new Manager. + * @namespace + */ + cssProps: { /** - * @property swipeMinTouches - * @type {Number} - * @default 1 + * Disables text selection to improve the dragging gesture. Mainly for desktop browsers. + * @type {String} + * @default 'none' */ - swipeMinTouches: 1, + userSelect: 'none', /** - * @property swipeMaxTouches - * @type {Number} - * @default 1 + * Disable the Windows Phone grippers when pressing an element. + * @type {String} + * @default 'none' */ - swipeMaxTouches: 1, + touchSelect: 'none', /** - * horizontal swipe velocity - * @property swipeVelocityX - * @type {Number} - * @default 0.6 + * Disables the default callout shown when you touch and hold a touch target. + * On iOS, when you touch and hold a touch target such as a link, Safari displays + * a callout containing information about the link. This property allows you to disable that callout. + * @type {String} + * @default 'none' */ - swipeVelocityX: 0.6, + touchCallout: 'none', /** - * vertical swipe velocity - * @property swipeVelocityY - * @type {Number} - * @default 0.6 + * Specifies whether zooming is enabled. Used by IE10> + * @type {String} + * @default 'none' */ - swipeVelocityY: 0.6 - }, - - handler: function swipeGesture(ev, inst) { - if(ev.eventType == EVENT_RELEASE) { - var touches = ev.touches.length, - options = inst.options; + contentZooming: 'none', - // max touches - if(touches < options.swipeMinTouches || - touches > options.swipeMaxTouches) { - return; - } + /** + * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers. + * @type {String} + * @default 'none' + */ + userDrag: 'none', - // when the distance we moved is too small we skip this gesture - // or we can be already in dragging - if(ev.velocityX > options.swipeVelocityX || - ev.velocityY > options.swipeVelocityY) { - // trigger swipe events - inst.trigger(this.name, ev); - inst.trigger(this.name + ev.direction, ev); - } - } + /** + * Overrides the highlight color shown when the user taps a link or a JavaScript + * clickable element in iOS. This property obeys the alpha value, if specified. + * @type {String} + * @default 'rgba(0,0,0,0)' + */ + tapHighlightColor: 'rgba(0,0,0,0)' } }; - /** - * @module gestures - */ - /** - * Single tap and a double tap on a place - * - * @class Tap - * @static - */ - /** - * @event tap - * @param {Object} ev - */ - /** - * @event doubletap - * @param {Object} ev - */ + var STOP = 1; + var FORCED_STOP = 2; /** - * @param {String} name + * Manager + * @param {HTMLElement} element + * @param {Object} [options] + * @constructor */ - (function(name) { - var hasMoved = false; + function Manager(element, options) { + options = options || {}; - function tapGesture(ev, inst) { - var options = inst.options, - current = Detection.current, - prev = Detection.previous, - sincePrev, - didDoubleTap; + this.options = merge(options, Hammer.defaults); + this.options.inputTarget = this.options.inputTarget || element; - switch(ev.eventType) { - case EVENT_START: - hasMoved = false; - break; + this.handlers = {}; + this.session = {}; + this.recognizers = []; - case EVENT_MOVE: - hasMoved = hasMoved || (ev.distance > options.tapMaxDistance); - break; + this.element = element; + this.input = createInputInstance(this); + this.touchAction = new TouchAction(this, this.options.touchAction); - case EVENT_END: - if(!Utils.inStr(ev.srcEvent.type, 'cancel') && ev.deltaTime < options.tapMaxTime && !hasMoved) { - // previous gesture, for the double tap since these are two different gesture detections - sincePrev = prev && prev.lastEvent && ev.timeStamp - prev.lastEvent.timeStamp; - didDoubleTap = false; - - // check if double tap - if(prev && prev.name == name && - (sincePrev && sincePrev < options.doubleTapInterval) && - ev.distance < options.doubleTapDistance) { - inst.trigger('doubletap', ev); - didDoubleTap = true; - } + toggleCssProps(this, true); - // do a single tap - if(!didDoubleTap || options.tapAlways) { - current.name = name; - inst.trigger(current.name, ev); - } - } - break; + each(options.recognizers, function(item) { + var recognizer = this.add(new (item[0])(item[1])); + item[2] && recognizer.recognizeWith(item[2]); + item[3] && recognizer.requireFailure(item[3]); + }, this); + } + + Manager.prototype = { + /** + * set options + * @param {Object} options + * @returns {Manager} + */ + set: function(options) { + extend(this.options, options); + + // Options that need a little more setup + if (options.touchAction) { + this.touchAction.update(); } - } + if (options.inputTarget) { + // Clean up existing event listeners and reinitialize + this.input.destroy(); + this.input.target = options.inputTarget; + this.input.init(); + } + return this; + }, - Hammer.gestures.Tap = { - name: name, - index: 100, - handler: tapGesture, - defaults: { - /** - * max time of a tap, this is for the slow tappers - * @property tapMaxTime - * @type {Number} - * @default 250 - */ - tapMaxTime: 250, - - /** - * max distance of movement of a tap, this is for the slow tappers - * @property tapMaxDistance - * @type {Number} - * @default 10 - */ - tapMaxDistance: 10, - - /** - * always trigger the `tap` event, even while double-tapping - * @property tapAlways - * @type {Boolean} - * @default true - */ - tapAlways: true, - - /** - * max distance between two taps - * @property doubleTapDistance - * @type {Number} - * @default 20 - */ - doubleTapDistance: 20, - - /** - * max time between two taps - * @property doubleTapInterval - * @type {Number} - * @default 300 - */ - doubleTapInterval: 300 + /** + * stop recognizing for this session. + * This session will be discarded, when a new [input]start event is fired. + * When forced, the recognizer cycle is stopped immediately. + * @param {Boolean} [force] + */ + stop: function(force) { + this.session.stopped = force ? FORCED_STOP : STOP; + }, + + /** + * run the recognizers! + * called by the inputHandler function on every movement of the pointers (touches) + * it walks through all the recognizers and tries to detect the gesture that is being made + * @param {Object} inputData + */ + recognize: function(inputData) { + var session = this.session; + if (session.stopped) { + return; } - }; - })('tap'); - /** - * @module gestures - */ - /** - * when a touch is being touched at the page - * - * @class Touch - * @static - */ - /** - * @event touch - * @param {Object} ev - */ - Hammer.gestures.Touch = { - name: 'touch', - index: -Infinity, - defaults: { - /** - * call preventDefault at touchstart, and makes the element blocking by disabling the scrolling of the page, - * but it improves gestures like transforming and dragging. - * be careful with using this, it can be very annoying for users to be stuck on the page - * @property preventDefault - * @type {Boolean} - * @default false - */ - preventDefault: false, + // run the touch-action polyfill + this.touchAction.preventDefaults(inputData); - /** - * disable mouse events, so only touch (or pen!) input triggers events - * @property preventMouse - * @type {Boolean} - * @default false - */ - preventMouse: false + var recognizer; + var recognizers = this.recognizers; + + // this holds the recognizer that is being recognized. + // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED + // if no recognizer is detecting a thing, it is set to `null` + var curRecognizer = session.curRecognizer; + + // reset when the last recognizer is recognized + // or when we're in a new session + if (!curRecognizer || (curRecognizer && curRecognizer.state & STATE_RECOGNIZED)) { + curRecognizer = session.curRecognizer = null; + } + + var i = 0; + while (i < recognizers.length) { + recognizer = recognizers[i]; + + // find out if we are allowed try to recognize the input for this one. + // 1. allow if the session is NOT forced stopped (see the .stop() method) + // 2. allow if we still haven't recognized a gesture in this session, or the this recognizer is the one + // that is being recognized. + // 3. allow if the recognizer is allowed to run simultaneous with the current recognized recognizer. + // this can be setup with the `recognizeWith()` method on the recognizer. + if (session.stopped !== FORCED_STOP && ( // 1 + !curRecognizer || recognizer == curRecognizer || // 2 + recognizer.canRecognizeWith(curRecognizer))) { // 3 + recognizer.recognize(inputData); + } else { + recognizer.reset(); + } + + // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the + // current active recognizer. but only if we don't already have an active recognizer + if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) { + curRecognizer = session.curRecognizer = recognizer; + } + i++; + } }, - handler: function touchGesture(ev, inst) { - if(inst.options.preventMouse && ev.pointerType == POINTER_MOUSE) { - ev.stopDetect(); - return; + + /** + * get a recognizer by its event name. + * @param {Recognizer|String} recognizer + * @returns {Recognizer|Null} + */ + get: function(recognizer) { + if (recognizer instanceof Recognizer) { + return recognizer; } - if(inst.options.preventDefault) { - ev.preventDefault(); + var recognizers = this.recognizers; + for (var i = 0; i < recognizers.length; i++) { + if (recognizers[i].options.event == recognizer) { + return recognizers[i]; + } } + return null; + }, - if(ev.eventType == EVENT_TOUCH) { - inst.trigger('touch', ev); + /** + * add a recognizer to the manager + * existing recognizers with the same event name will be removed + * @param {Recognizer} recognizer + * @returns {Recognizer|Manager} + */ + add: function(recognizer) { + if (invokeArrayArg(recognizer, 'add', this)) { + return this; } - } - }; - /** - * @module gestures - */ - /** - * User want to scale or rotate with 2 fingers - * Preventing the default browser behavior is a good way to improve feel and working. This can be done with the - * `preventDefault` option. - * - * @class Transform - * @static - */ - /** - * @event transform - * @param {Object} ev - */ - /** - * @event transformstart - * @param {Object} ev - */ - /** - * @event transformend - * @param {Object} ev - */ - /** - * @event pinchin - * @param {Object} ev - */ - /** - * @event pinchout - * @param {Object} ev - */ - /** - * @event rotate - * @param {Object} ev - */ + // remove existing + var existing = this.get(recognizer.options.event); + if (existing) { + this.remove(existing); + } - /** - * @param {String} name - */ - (function(name) { - var triggered = false; + this.recognizers.push(recognizer); + recognizer.manager = this; - function transformGesture(ev, inst) { - switch(ev.eventType) { - case EVENT_START: - triggered = false; - break; + this.touchAction.update(); + return recognizer; + }, - case EVENT_MOVE: - // at least multitouch - if(ev.touches.length < 2) { - return; - } + /** + * remove a recognizer by name or instance + * @param {Recognizer|String} recognizer + * @returns {Manager} + */ + remove: function(recognizer) { + if (invokeArrayArg(recognizer, 'remove', this)) { + return this; + } - var scaleThreshold = Math.abs(1 - ev.scale); - var rotationThreshold = Math.abs(ev.rotation); + var recognizers = this.recognizers; + recognizer = this.get(recognizer); + recognizers.splice(inArray(recognizers, recognizer), 1); - // when the distance we moved is too small we skip this gesture - // or we can be already in dragging - if(scaleThreshold < inst.options.transformMinScale && - rotationThreshold < inst.options.transformMinRotation) { - return; - } + this.touchAction.update(); + return this; + }, - // we are transforming! - Detection.current.name = name; + /** + * bind event + * @param {String} events + * @param {Function} handler + * @returns {EventEmitter} this + */ + on: function(events, handler) { + var handlers = this.handlers; + each(splitStr(events), function(event) { + handlers[event] = handlers[event] || []; + handlers[event].push(handler); + }); + return this; + }, - // first time, trigger dragstart event - if(!triggered) { - inst.trigger(name + 'start', ev); - triggered = true; - } + /** + * unbind event, leave emit blank to remove all handlers + * @param {String} events + * @param {Function} [handler] + * @returns {EventEmitter} this + */ + off: function(events, handler) { + var handlers = this.handlers; + each(splitStr(events), function(event) { + if (!handler) { + delete handlers[event]; + } else { + handlers[event].splice(inArray(handlers[event], handler), 1); + } + }); + return this; + }, - inst.trigger(name, ev); // basic transform event + /** + * emit event to the listeners + * @param {String} event + * @param {Object} data + */ + emit: function(event, data) { + // we also want to trigger dom events + if (this.options.domEvents) { + triggerDomEvent(event, data); + } - // trigger rotate event - if(rotationThreshold > inst.options.transformMinRotation) { - inst.trigger('rotate', ev); - } + // no handlers, so skip it all + var handlers = this.handlers[event] && this.handlers[event].slice(); + if (!handlers || !handlers.length) { + return; + } - // trigger pinch event - if(scaleThreshold > inst.options.transformMinScale) { - inst.trigger('pinch', ev); - inst.trigger('pinch' + (ev.scale < 1 ? 'in' : 'out'), ev); - } - break; + data.type = event; + data.preventDefault = function() { + data.srcEvent.preventDefault(); + }; - case EVENT_RELEASE: - if(triggered && ev.changedLength < 2) { - inst.trigger(name + 'end', ev); - triggered = false; - } - break; + var i = 0; + while (i < handlers.length) { + handlers[i](data); + i++; } - } + }, - Hammer.gestures.Transform = { - name: name, - index: 45, - defaults: { - /** - * minimal scale factor, no scale is 1, zoomin is to 0 and zoomout until higher then 1 - * @property transformMinScale - * @type {Number} - * @default 0.01 - */ - transformMinScale: 0.01, - - /** - * rotation in degrees - * @property transformMinRotation - * @type {Number} - * @default 1 - */ - transformMinRotation: 1 - }, + /** + * destroy the manager and unbinds all events + * it doesn't unbind dom events, that is the user own responsibility + */ + destroy: function() { + this.element && toggleCssProps(this, false); - handler: transformGesture - }; - })('transform'); + this.handlers = {}; + this.session = {}; + this.input.destroy(); + this.element = null; + } + }; + + /** + * add/remove the css properties as defined in manager.options.cssProps + * @param {Manager} manager + * @param {Boolean} add + */ + function toggleCssProps(manager, add) { + var element = manager.element; + each(manager.options.cssProps, function(value, name) { + element.style[prefixed(element.style, name)] = add ? value : ''; + }); + } /** - * @module hammer + * trigger dom event + * @param {String} event + * @param {Object} data */ + function triggerDomEvent(event, data) { + var gestureEvent = document.createEvent('Event'); + gestureEvent.initEvent(event, true, true); + gestureEvent.gesture = data; + data.target.dispatchEvent(gestureEvent); + } - // AMD export - if(true) { + extend(Hammer, { + INPUT_START: INPUT_START, + INPUT_MOVE: INPUT_MOVE, + INPUT_END: INPUT_END, + INPUT_CANCEL: INPUT_CANCEL, + + STATE_POSSIBLE: STATE_POSSIBLE, + STATE_BEGAN: STATE_BEGAN, + STATE_CHANGED: STATE_CHANGED, + STATE_ENDED: STATE_ENDED, + STATE_RECOGNIZED: STATE_RECOGNIZED, + STATE_CANCELLED: STATE_CANCELLED, + STATE_FAILED: STATE_FAILED, + + DIRECTION_NONE: DIRECTION_NONE, + DIRECTION_LEFT: DIRECTION_LEFT, + DIRECTION_RIGHT: DIRECTION_RIGHT, + DIRECTION_UP: DIRECTION_UP, + DIRECTION_DOWN: DIRECTION_DOWN, + DIRECTION_HORIZONTAL: DIRECTION_HORIZONTAL, + DIRECTION_VERTICAL: DIRECTION_VERTICAL, + DIRECTION_ALL: DIRECTION_ALL, + + Manager: Manager, + Input: Input, + TouchAction: TouchAction, + + TouchInput: TouchInput, + MouseInput: MouseInput, + PointerEventInput: PointerEventInput, + TouchMouseInput: TouchMouseInput, + SingleTouchInput: SingleTouchInput, + + Recognizer: Recognizer, + AttrRecognizer: AttrRecognizer, + Tap: TapRecognizer, + Pan: PanRecognizer, + Swipe: SwipeRecognizer, + Pinch: PinchRecognizer, + Rotate: RotateRecognizer, + Press: PressRecognizer, + + on: addEventListeners, + off: removeEventListeners, + each: each, + merge: merge, + extend: extend, + inherit: inherit, + bindFn: bindFn, + prefixed: prefixed + }); + + if ("function" == TYPE_FUNCTION && __webpack_require__(72)) { !(__WEBPACK_AMD_DEFINE_RESULT__ = function() { return Hammer; }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - // commonjs export - } else if(typeof module !== 'undefined' && module.exports) { + } else if (typeof module != 'undefined' && module.exports) { module.exports = Hammer; - // browser export } else { - window.Hammer = Hammer; + window[exportName] = Hammer; } - })(window); + })(window, document, 'Hammer'); + /***/ }, /* 60 */ @@ -33977,6 +34282,14 @@ return /******/ (function(modules) { // webpackBootstrap } +/***/ }, +/* 72 */ +/***/ function(module, exports, __webpack_require__) { + + /* WEBPACK VAR INJECTION */(function(__webpack_amd_options__) {module.exports = __webpack_amd_options__; + + /* WEBPACK VAR INJECTION */}.call(exports, {})) + /***/ } /******/ ]) }); diff --git a/dist/vis.map b/dist/vis.map index 250231b2..4a5dca19 100644 --- a/dist/vis.map +++ b/dist/vis.map @@ -1 +1 @@ -{"version":3,"file":"vis.map","sources":["./dist/vis.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","util","DOMutil","DataSet","DataView","Queue","Graph3d","graph3d","Camera","Filter","Point2d","Point3d","Slider","StepNumber","Timeline","Graph2d","timeline","DateUtil","DataStep","Range","stack","TimeStep","components","items","Item","BackgroundItem","BoxItem","PointItem","RangeItem","Component","CurrentTime","CustomTime","DataAxis","GraphGroup","Group","BackgroundGroup","ItemSet","Legend","LineGraph","TimeAxis","Network","network","Edge","Groups","Images","Node","Popup","dotparser","gephiParser","Graph","Error","moment","hammer","isNumber","object","Number","isString","String","isDate","Date","match","ASPDateRegex","exec","isNaN","parse","isDataTable","google","visualization","DataTable","randomUUID","S4","Math","floor","random","toString","extend","a","i","len","arguments","length","other","prop","hasOwnProperty","selectiveExtend","props","Array","isArray","selectiveDeepExtend","b","TypeError","constructor","Object","undefined","deepExtend","selectiveNotDeepExtend","indexOf","equalArray","convert","type","Boolean","valueOf","isMoment","toDate","getType","toISOString","value","getAbsoluteLeft","elem","getBoundingClientRect","left","window","pageXOffset","getAbsoluteTop","top","pageYOffset","addClassName","className","classes","split","push","join","removeClassName","index","splice","forEach","callback","toArray","array","updateProperty","key","addEventListener","element","action","listener","useCapture","navigator","userAgent","attachEvent","removeEventListener","detachEvent","preventDefault","event","returnValue","getTarget","target","srcElement","nodeType","parentNode","option","asBoolean","defaultValue","asNumber","asString","asSize","asElement","GiveDec","Hex","Value","eval","GiveHex","Dec","parseColor","color","isValidRGB","rgb","substr","RGBToHex","isValidHex","hsv","hexToHSV","lighterColorHSV","h","s","v","min","darkerColorHSV","darkerColorHex","HSVToHex","lighterColorHex","background","border","highlight","hover","hexToRGB","hex","replace","toUpperCase","substring","d","e","f","r","g","red","green","blue","RGBToHSV","minRGB","maxRGB","max","hue","saturation","cssUtil","cssText","styles","style","trim","parts","keys","map","addCssText","currentStyles","newStyles","removeCssText","removeStyles","HSVToRGB","q","t","isOk","test","selectiveBridgeObject","fields","referenceObject","objectTo","create","bridgeObject","mergeOptions","mergeTarget","options","enabled","binarySearchCustom","orderedItems","searchFunction","field","field2","maxIterations","iteration","low","high","middle","item","searchResult","binarySearchValue","sidePreference","prevValue","nextValue","easeInOutQuad","start","end","duration","change","easingFunctions","linear","easeInQuad","easeOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","prepareElements","JSONcontainer","elementType","redundant","used","cleanupElements","removeChild","getSVGElement","svgContainer","shift","document","createElementNS","appendChild","getDOMElement","DOMContainer","insertBefore","createElement","drawPoint","x","y","group","point","drawPoints","setAttributeNS","size","drawBar","width","height","rect","data","_options","_data","_fieldId","fieldId","_type","_subscribers","add","setOptions","prototype","queue","_queue","destroy","on","subscribers","subscribe","off","filter","unsubscribe","_trigger","params","senderId","concat","subscriber","addedIds","me","_addItem","columns","_getColumnNames","row","rows","getNumberOfRows","col","cols","getValue","update","updatedIds","updatedData","addOrUpdate","_updateItem","get","ids","firstType","returnType","allowedValues","itemId","_getItem","order","_sort","_filterFields","_appendRow","result","getIds","getDataSet","mappedItems","filteredItem","name","sort","av","bv","remove","removedId","removedIds","_remove","clear","maxField","itemField","minField","distinct","values","fieldType","count","exists","types","raw","converted","JSON","stringify","dataTable","getNumberOfColumns","getColumnId","getColumnLabel","addRow","setValue","_ids","_onEvent","apply","setData","viewOptions","getArguments","defaultFilter","dataSet","added","updated","removed","delay","Infinity","_timeout","_extended","_flushIfNeeded","flush","methods","original","method","args","fn","context","entry","clearTimeout","setTimeout","container","SyntaxError","containerElement","margin","defaultXCenter","defaultYCenter","xLabel","yLabel","zLabel","passValueFn","xValueLabel","yValueLabel","zValueLabel","filterLabel","legendLabel","STYLE","DOT","showPerspective","showGrid","keepAspectRatio","showShadow","showGrayBottom","showTooltip","verticalRatio","animationInterval","animationPreload","camera","eye","dataPoints","colX","colY","colZ","colValue","colFilter","xMin","xStep","xMax","yMin","yStep","yMax","zMin","zStep","zMax","valueMin","valueMax","xBarWidth","yBarWidth","colorAxis","colorGrid","colorDot","colorDotBorder","getMouseX","clientX","targetTouches","getMouseY","clientY","Emitter","_setScale","scale","z","xCenter","yCenter","zCenter","setArmLocation","_convert3Dto2D","point3d","translation","_convertPointToTranslation","_convertTranslationToScreen","ax","ay","az","cx","getCameraLocation","cy","cz","sinTx","sin","getCameraRotation","cosTx","cos","sinTy","cosTy","sinTz","cosTz","dx","dy","dz","bx","by","ex","ey","ez","getArmLength","xcenter","frame","canvas","clientWidth","ycenter","_setBackgroundColor","backgroundColor","fill","stroke","strokeWidth","borderColor","borderWidth","borderStyle","BAR","BARCOLOR","BARSIZE","DOTLINE","DOTCOLOR","DOTSIZE","GRID","LINE","SURFACE","_getStyleNumber","styleName","_determineColumnIndexes","counter","column","getDistinctValues","distinctValues","getColumnRange","minMax","_dataInitialize","rawData","_onChange","dataFilter","setOnLoadCallback","redraw","withBars","defaultXBarWidth","dataX","defaultYBarWidth","dataY","xRange","defaultXMin","defaultXMax","defaultXStep","yRange","defaultYMin","defaultYMax","defaultYStep","zRange","defaultZMin","defaultZMax","defaultZStep","valueRange","defaultValueMin","defaultValueMax","_getDataPoints","obj","sortNumber","dataMatrix","xIndex","yIndex","trans","screen","bottom","pointRight","pointTop","pointCross","hasChildNodes","firstChild","position","overflow","noCanvas","fontWeight","padding","innerHTML","onmousedown","_onMouseDown","ontouchstart","_onTouchStart","onmousewheel","_onWheel","ontooltip","_onTooltip","onkeydown","setSize","_resizeCanvas","clientHeight","animationStart","slider","play","animationStop","stop","_resizeCenter","charAt","parseFloat","setCameraPosition","pos","horizontal","vertical","setArmRotation","distance","setArmLength","getCameraPosition","getArmRotation","_readData","_redrawFilter","animationAutoStart","cameraPosition","styleNumber","tooltip","showAnimationControls","_redrawSlider","_redrawClear","_redrawAxis","_redrawDataGrid","_redrawDataLine","_redrawDataBar","_redrawDataDot","_redrawInfo","_redrawLegend","ctx","getContext","clearRect","widthMin","widthMax","dotSize","right","lineWidth","font","ymin","ymax","_hsv2rgb","strokeStyle","beginPath","moveTo","lineTo","strokeRect","fillStyle","closePath","gridLineLen","step","getCurrent","next","textAlign","textBaseline","fillText","label","visible","setValues","setPlayInterval","onchange","getIndex","selectValue","setOnChangeCallback","lineStyle","getLabel","getSelectedValue","from","to","prettyStep","text","xText","yText","zText","offset","xOffset","yOffset","xMin2d","xMax2d","gridLenX","gridLenY","textMargin","armAngle","H","S","V","R","G","B","C","Hi","X","abs","parseInt","cross","topSideVisible","zAvg","transBottom","dist","sortDepth","aDiff","subtract","bDiff","crossproduct","crossProduct","radius","arc","PI","j","surface","corners","xWidth","yWidth","surfaces","center","avg","transCenter","diff","leftButtonDown","_onMouseUp","which","button","touchDown","startMouseX","startMouseY","startStart","startEnd","startArmRotation","cursor","onmousemove","_onMouseMove","onmouseup","diffX","diffY","horizontalNew","verticalNew","snapAngle","snapValue","round","parameters","emit","mouseX","mouseY","tooltipTimeout","_hideTooltip","dataPoint","_dataPointFromXY","_showTooltip","ontouchmove","_onTouchMove","ontouchend","_onTouchEnd","delta","wheelDelta","detail","oldLength","newLength","_insideTriangle","triangle","sign","as","bs","cs","distMax","closestDataPoint","closestDist","triangle1","triangle2","distX","distY","sqrt","content","line","dot","dom","borderRadius","boxShadow","borderLeft","contentWidth","offsetWidth","contentHeight","offsetHeight","lineHeight","dotWidth","dotHeight","armLocation","armRotation","armLength","cameraLocation","cameraRotation","calculateCameraOrientation","rot","graph","onLoadCallback","loadInBackground","isLoaded","getLoadedProgress","getColumn","getValues","dataView","progress","sub","sum","prev","bar","MozBorderRadius","slide","onclick","togglePlay","onChangeCallback","playTimeout","playInterval","playLoop","setIndex","playNext","interval","clearInterval","getPlayInterval","setPlayLoop","doLoop","onChange","indexToLeft","startClientX","startSlideX","leftToIndex","_start","_end","_step","precision","_current","setRange","setStep","calculatePrettyStep","log10","log","LN10","step1","pow","step2","step5","toPrecision","getStep","groups","forthArgument","defaultOptions","autoResize","orientation","maxHeight","minHeight","_create","body","domProps","emitter","bind","hiddenDates","snap","toScreen","_toScreen","toGlobalScreen","_toGlobalScreen","toTime","_toTime","toGlobalTime","_toGlobalTime","range","timeAxis","currentTime","customTime","itemSet","itemsData","groupsData","setGroups","setItems","Core","newDataSet","initialLoad","dataRange","_getDataRange","setWindow","animate","fit","setSelection","focus","getSelection","itemData","getItemRange","dataset","minItem","maxStartItem","maxEndItem","linegraph","getLegend","groupId","isGroupVisible","visibility","convertHiddenOptions","repeat","dateItem","updateHiddenDates","centerContainer","totalRange","pixelTime","startDate","endDate","_d","runUntil","clone","day","dayOfYear","year","dayOffset","date","month","console","removeDuplicates","startHidden","isHidden","endHidden","rangeStart","rangeEnd","hidden","startToFront","endToFront","_applyRange","safeDates","printDates","dates","stepOverHiddenDates","timeStep","previousTime","stepInHidden","currentValue","current","newValue","switchedYear","switchedMonth","switchedDay","time","conversion","getHiddenDurationBetween","correctTimeForHidden","hiddenDuration","totalDuration","partialDuration","accumulatedHiddenDuration","getAccumulatedHiddenDuration","newTime","getHiddenDurationBefore","timeOffset","requiredDuration","previousPoint","snapAwayFromHidden","direction","correctionEnabled","minimumStep","containerHeight","customRange","alignZeros","autoScale","stepIndex","marginStart","marginEnd","deadSpace","majorSteps","minorSteps","setMinimumStep","setFirst","safeSize","minimumStepValue","orderOfMagnitude","minorStepIdx","magnitudefactor","solutionFound","stepSize","niceStart","niceEnd","roundToMinor","marginRange","rounded","hasNext","previous","decimals","slice","exp","cnt","isMajor","now","hours","minutes","seconds","milliseconds","deltaDifference","scaleOffset","moveable","zoomable","zoomMin","zoomMax","touch","animateTimer","_onDragStart","_onDrag","_onDragEnd","_onHold","_onMouseWheel","_onTouch","_onPinch","validateDirection","getPointer","pageX","pageY","hammerUtil","_cancelAnimation","initStart","initEnd","initTime","anyChanged","dragging","done","changed","newStart","newEnd","getRange","totalHidden","previousDelta","allowDragging","gesture","deltaX","deltaY","diffRange","safeStart","safeEnd","fakeGesture","pointer","pointerDate","_pointerToDate","zoom","touches","centerDate","hiddenDurationBefore","hiddenDurationAfter","move","EPSILON","orderByStart","orderByEnd","aTime","bTime","force","iMax","axis","collidingItem","jj","collision","nostack","subgroups","newTop","subgroup","SCALE","DAY","MILLISECOND","SECOND","MINUTE","HOUR","WEEKDAY","MONTH","YEAR","first","setFullYear","getFullYear","setMonth","setDate","setHours","setMinutes","setSeconds","setMilliseconds","getMilliseconds","getSeconds","getMinutes","getHours","getDate","getMonth","setScale","newScale","newStep","setAutoScale","enable","stepYear","stepMonth","stepDay","stepHour","stepMinute","stepSecond","stepMillisecond","getLabelMinor","format","getLabelMajor","_isResized","resized","_previousWidth","_previousHeight","showCurrentTime","locales","locale","parent","backgroundVertical","title","currentTimeTimer","setCurrentTime","getCurrentTime","showCustomTime","eventParams","Hammer","drag","prevent_default","setCustomTime","getCustomTime","stopPropagation","svg","linegraphOptions","showMinorLabels","showMajorLabels","icons","majorLinesOffset","minorLinesOffset","labelOffsetX","labelOffsetY","iconWidth","linegraphSVG","DOMelements","lines","labels","conversionFactor","minWidth","stepPixels","stepPixelsForced","zeroCrossing","lineOffset","master","svgElements","iconsRemoved","amountOfGroups","lineContainer","scrollTop","addGroup","graphOptions","updateGroup","removeGroup","hide","show","display","_redrawGroupIcons","iconHeight","iconOffset","drawIcon","_cleanupIcons","backgroundHorizontal","changeCalled","activeGroups","_calculateCharSize","minorLabelHeight","minorCharHeight","majorLabelHeight","majorCharHeight","minorLineWidth","minorLineHeight","majorLineWidth","majorLineHeight","_redrawLabels","_redrawTitle","amountOfSteps","stepDifference","zeroStepDifference","valueAtZero","marginStartPos","maxLabelSize","_redrawLabel","_redrawLine","titleWidth","titleCharHeight","convertValue","invertedValue","convertedValue","characterHeight","largestWidth","majorCharWidth","minorCharWidth","textMinor","createTextNode","measureCharMinor","textMajor","measureCharMajor","textTitle","measureCharTitle","titleCharWidth","groupsUsingDefaultStyles","usingDefaultStyle","zeroPosition","Line","Bar","Points","setZeroPosition","catmullRom","parametrization","alpha","SVGcontainer","path","fillPath","fillHeight","outline","shaded","barWidth","bar1Height","bar2Height","icon","yAxisOrientation","getYRange","groupData","draw","framework","subgroupIndex","subgroupOrderer","subgroupOrder","visibleItems","byStart","byEnd","checkRangedItems","inner","foreground","marker","Element","getLabelWidth","restack","_updateVisibleItems","markerHeight","lastMarkerHeight","dirty","displayed","_calculateHeight","offsetTop","offsetLeft","ii","repositionY","resetSubgroups","labelSet","setParent","orderSubgroups","_checkIfVisible","sortArray","sortField","removeFromDataSet","removeItem","startArray","endArray","oldVisibleItems","visibleItemsLookup","lowerBound","upperBound","_checkIfVisibleWithReference","initialPosByStart","_traceVisible","initialPosByEnd","repositionX","initialPos","breakCondition","isVisible","align","groupOrder","selectable","editable","updateTime","onAdd","onUpdate","onMove","onRemove","onMoving","itemOptions","itemListeners","_onAdd","_onUpdate","_onRemove","groupListeners","_onAddGroups","_onUpdateGroups","_onRemoveGroups","groupIds","selection","stackDirty","touchParams","UNGROUPED","BACKGROUND","box","_updateUngrouped","backgroundGroup","_onSelectItem","_onMultiSelectItem","_onAddItem","addCallback","Function","markDirty","unselect","select","getVisibleItems","rawVisibleItems","_deselect","_orderGroups","visibleInterval","zoomed","lastVisibleInterval","lastWidth","firstGroup","_firstGroup","firstMargin","nonFirstMargin","groupMargin","groupResized","firstGroupIndex","firstGroupId","ungrouped","_getGroupId","getLabelSet","oldItemsData","getItems","_order","getGroups","_getType","_removeItem","groupOptions","oldGroupId","oldGroup","_constructByEndArray","itemFromTarget","selected","dragLeftItem","dragRightItem","initialX","itemProps","newProps","initial","groupFromTarget","_updateItemProps","_moveToGroup","changes","ctrlKey","srcEvent","shiftKey","oldSelection","newSelection","xAbs","newItem","_getItemRange","_item","itemSetFromTarget","side","iconSize","iconSpacing","textArea","scrollableHeight","drawLegendIcons","getComputedStyle","paddingTop","defaultGroup","sampling","graphHeight","barChart","handleOverlap","dataAxis","legend","abortedGraphUpdate","autoSizeSVG","lastStart","COUNTER","BarGraphFunctions","yAxisLeft","yAxisRight","legendLeft","legendRight","_updateAllGroupData","_updateGroup","groupsContent","ungroupedCounter","forceGraphUpdate","_updateGraph","rangePerPixelInv","preprocessedGroupData","processedGroupData","groupRanges","minDate","maxDate","_getRelevantData","_applySampling","_convertXcoordinates","_getYRanges","_updateYAxis","MAX_CYCLES","_convertYcoordinates","dataContainer","guess","increment","amountOfPoints","xDistance","pointsPerPixel","ceil","sampledData","barCombinedDataLeft","barCombinedDataRight","getStackedBarYRange","minVal","maxVal","yAxisLeftUsed","yAxisRightUsed","minLeft","minRight","maxLeft","maxRight","ignore","_toggleAxisVisiblity","drawIcons","axisUsed","datapoints","xValue","yValue","extractedData","svgHeight","majorLines","majorTexts","minorLines","minorTexts","lineTop","lang","parentChanged","foregroundNextSibling","nextSibling","backgroundNextSibling","_repaintLabels","timeLabelsize","xFirstMajorLabel","cur","_repaintMinorText","_repaintMajorText","_repaintMajorLine","_repaintMinorLine","leftTime","leftText","widthText","arr","pop","childNodes","nodeValue","_repaintDeleteButton","anchor","deleteButton","_updateContents","template","_updateTitle","removeAttribute","_updateDataAttributes","dataAttributes","attributes","setAttribute","_updateStyle","emptyContent","baseClassName","onTop","itemSubgroup","itemSetHeight","marginLeft","maxWidth","_repaintDragLeft","_repaintDragRight","contentLeft","parentWidth","boxWidth","dragLeft","dragRight","_initializeMixinLoaders","renderRefreshRate","renderTimestep","renderTime","maxPhysicsTicksPerRender","physicsDiscreteStepsize","initializing","triggerFunctions","edit","editEdge","connect","del","nodes","mass","radiusMin","radiusMax","shape","image","fontColor","fontSize","fontFace","fontFill","level","highlightColor","borderWidthSelected","edges","widthSelectionMultiplier","hoverWidth","arrowScaleFactor","dash","gap","altLength","inheritColor","configurePhysics","physics","barnesHut","theta","gravitationalConstant","centralGravity","springLength","springConstant","damping","repulsion","nodeDistance","hierarchicalRepulsion","clustering","initialMaxNodes","clusterThreshold","reduceToNodes","chainThreshold","clusterEdgeThreshold","sectorThreshold","screenSizeThreshold","fontSizeMultiplier","maxFontSize","forceAmplification","distanceAmplification","edgeGrowth","nodeScaling","maxNodeSizeIncrements","activeAreaBoxSize","clusterLevelDifference","navigation","keyboard","speed","dataManipulation","initiallyVisible","hierarchicalLayout","levelSeparation","nodeSpacing","layout","freezeForStabilization","smoothCurves","dynamic","roundness","maxVelocity","minVelocity","stabilize","stabilizationIterations","dragNetwork","dragNodes","hideEdgesOnDrag","hideNodesOnDrag","constants","pixelRatio","hoverObj","controlNodesActive","navigationHammers","existing","_new","animationSpeed","animationEasingFunction","easingTime","sourceScale","targetScale","sourceTranslation","targetTranslation","lockedOnNodeId","lockedOnNodeOffset","touchTime","images","setOnloadCallback","_redraw","xIncrement","yIncrement","zoomIncrement","_loadPhysicsSystem","_loadSectorSystem","_loadClusterSystem","_loadSelectionSystem","_loadHierarchySystem","_setTranslation","freezeSimulation","cachedFunctions","startedStabilization","stabilized","draggingNodes","calculationNodes","calculationNodeIndices","nodeIndices","canvasTopLeft","canvasBottomRight","pointerPosition","areaCenter","previousScale","nodesData","edgesData","nodesListeners","_addNodes","_updateNodes","_removeNodes","edgesListeners","_addEdges","_updateEdges","_removeEdges","moving","timer","_setupHierarchicalLayout","zoomExtent","startWithClustering","keycharm","MixinLoader","Activator","_getScriptPath","scripts","getElementsByTagName","src","_getRange","node","minY","maxY","minX","maxX","nodeId","_findCenter","animationOptions","initialZoom","disableStart","zoomLevel","numberOfNodes","factor","yDistance","xZoomLevel","yZoomLevel","animation","_updateNodeIndexList","_clearNodeIndexList","idx","dotData","DOTToGraph","gephi","gephiData","parseGephi","_setNodes","_setEdges","_putDataInSector","_resetLevels","_stabilize","onEdit","onEditEdge","onConnect","onDelete","editMode","newColorObj","groupname","clickToUse","activator","_createKeyBinds","_loadNavigationControls","_loadManipulationSystem","_configureSmoothCurves","devicePixelRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","backingStorePixelRatio","setTransform","pinch","_onTap","_onDoubleTap","_onMouseMoveTitle","hammerFrame","_onRelease","reset","isActive","_moveUp","_yStopMoving","_moveDown","_moveLeft","_xStopMoving","_moveRight","_zoomIn","_stopZoom","_zoomOut","_createManipulatorBar","_deleteSelected","_getPointer","pinched","_getScale","_handleTouch","_handleDragStart","_getNodeAt","_getTranslation","isSelected","_selectObject","nodeIds","objectId","selectionObj","xFixed","yFixed","_handleOnDrag","releaseNode","_XconvertDOMtoCanvas","_XconvertCanvasToDOM","_YconvertDOMtoCanvas","_YconvertCanvasToDOM","_handleDragEnd","_handleTap","_handleDoubleTap","_handleOnHold","_handleOnRelease","_zoom","scaleOld","preScaleDragPointer","DOMtoCanvas","scaleFrac","tx","ty","updateClustersDefault","postScaleDragPointer","canvasToDOM","popupObj","_checkHidePopup","checkShow","_checkShowPopup","popupTimer","edgeId","_getEdgeAt","_hoverObject","_blurObject","lastPopupNode","getTitle","isOverlappingWith","edge","connected","popup","setPosition","setText","emitEvent","oldWidth","oldHeight","oldNodesData","_updateSelection","angle","_updateCalculationNodes","_reconnectEdges","_updateValueRange","updateLabels","changedData","setProperties","properties","oldEdgesData","oldEdge","disconnect","showInternalIds","_createBezierNodes","via","sectors","dynamicEdges","setValueRange","w","save","translate","_doInAllSectors","restore","offsetX","offsetY","_drawNodes","alwaysShow","setScaleAndPos","inArea","sMax","_drawEdges","_drawControlNodes","_freezeDefinedNodes","_physicsTick","_restoreFrozenNodes","fixedData","_isMoving","vmin","isMoving","_discreteStepNodes","nodesPresent","discreteStepLimited","discreteStep","vminCorrected","mainMovingStatus","supportMovingStatus","_doInAllActiveSectors","mainMoving","_doInSupportSector","_animationStep","_handleNavigation","calculationTime","maxSteps","timeRequired","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","ua","toLowerCase","requiresTimeout","iterations","toggleFreeze","parentEdgeId","internalMultiplier","positionBezierNode","mixin","storePosition","storePositions","dataArray","allowedToMoveX","allowedToMoveY","getPositions","focusOnNode","nodePosition","lockedOnNode","easingFunction","animateView","locked","_transitionRedraw","viewCenter","distanceFromCenter","_classicRedraw","_lockedRedraw","active","getScale","getCenterCoordinates","networkConstants","fromId","toId","widthSelected","labelDimensions","yLine","dirtyLabel","fromBackup","toBackup","originalFromId","originalToId","widthFixed","lengthFixed","controlNodesEnabled","controlNodes","positions","connectedNode","_drawLine","_drawArrow","_drawArrowCenter","_drawDashLine","attachEdge","detachEdge","xFrom","yFrom","xTo","yTo","xObj","yObj","_getDistanceToEdge","_getColor","colorObj","_getLineWidth","_line","midpointX","midpointY","_pointOnLine","_label","resize","_circle","_pointOnCircle","networkScaleInv","_getViaCoordinates","xVia","yVia","quadraticCurveTo","lineCount","measureText","fillRect","mozDash","setLineDash","pattern","lineDashOffset","mozDashOffset","lineCap","dashedLine","percentage","atan2","arrow","edgeSegmentLength","fromBorderDist","distanceToBorder","fromBorderPoint","toBorderDist","toBorderPoint","x1","y1","x2","y2","x3","y3","lastX","lastY","minDistance","_getDistanceToLine","px","py","something","u","nodeIdFrom","nodeIdTo","getControlNodePositions","_enableControlNodes","_disableControlNodes","_getSelectedControlNode","fromDistance","toDistance","_restoreControlNodes","defaultIndex","DEFAULT","load","url","brokenUrl","img","Image","onload","onerror","imagelist","grouplist","reroutedEdges","fontDrawThreshold","horizontalAlignLeft","verticalAlignTop","baseRadiusValue","radiusFixed","preassignedLevel","hierarchyEnumerated","fx","fy","vx","vy","resetCluster","dynamicEdgesLength","clusterSession","clusterSizeWidthFactor","clusterSizeHeightFactor","clusterSizeRadiusFactor","growthIndicator","networkScale","formationScale","clusterSize","containedNodes","containedEdges","clusterSessions","originalLabel","triggerFunction","groupObj","imageObj","brokenImage","_drawDatabase","_resizeDatabase","_drawBox","_resizeBox","_drawCircle","_resizeCircle","_drawEllipse","_resizeEllipse","_drawImage","_resizeImage","_drawText","_resizeText","_drawDot","_resizeShape","_drawSquare","_drawTriangle","_drawTriangleDown","_drawStar","_reset","clearSizeCache","_setForce","_addForce","isFixed","velocity","getDistance","globalAlpha","drawImage","textSize","getTextSize","clusterLineWidth","selectionLineWidth","roundRect","database","diameter","circle","defaultSize","ellipse","_drawShape","radiusMultiplier","baseline","labelUnderNode","inView","clearVelocity","updateVelocity","massBeforeClustering","energyBefore","styleAttr","fontFamily","WebkitBorderRadius","whiteSpace","parseDOT","parseGraph","nextPreview","isAlphaNumeric","regexAlphaNumeric","merge","o","addNode","graphs","attr","addEdge","createEdge","getToken","tokenType","TOKENTYPE","NULL","token","isComment","DELIMITER","c2","DELIMITERS","IDENTIFIER","newSyntaxError","UNKNOWN","chop","strict","parseStatements","parseStatement","subgraph","parseSubgraph","parseEdge","parseAttributeStatement","parseNodeStatement","subgraphs","parseAttributeList","message","maxLength","forEach2","array1","array2","elem1","elem2","graphData","dotNode","graphNode","convertEdge","dotEdge","graphEdge","subEdge","{","}","[","]",";","=",",","->","--","gephiJSON","allowedToMove","gEdges","gNodes","gEdge","source","gNode","leftContainer","rightContainer","shadowTop","shadowBottom","shadowTopLeft","shadowBottomLeft","shadowTopRight","shadowBottomRight","_redrawTimer","listeners","events","scrollTopMin","redrawCount","_initAutoResize","component","_stopAutoResize","what","getWindow","borderRootHeight","borderRootWidth","autoHeight","centerWidth","_updateScrollTop","visibilityTop","visibilityBottom","MAX_REDRAWS","repaint","_startAutoResize","_onResize","lastHeight","watchTimer","setInterval","initialScrollTop","oldScrollTop","_getScrollTop","newScrollTop","_setScrollTop","eventType","getTouchList","collectEventData","custom","back","editNode","addDescription","edgeDescription","editEdgeDescription","createEdgeError","deleteClusterError","CanvasRenderingContext2D","square","s2","ir","triangleDown","star","n","r2d","kappa","ox","oy","xe","ye","xm","ym","bezierCurveTo","wEllipse","hEllipse","ymb","yeb","xt","yt","xi","yi","xl","yl","xr","yr","dashArray","dashLength","dashCount","slope","distRemaining","dashIndex","_catmullRom","_linear","dFill","_catmullRomUniform","p0","p1","p2","p3","bp1","bp2","normalization","d1","d2","d3","A","N","M","d3powA","d2powA","d3pow2A","d2pow2A","d1pow2A","d1powA","Bargraph","barCombinedData","coreDistance","drawData","combinedData","intersections","barPoints","_getDataIntersections","heightOffset","_getSafeDrawData","nextKey","amount","resolved","prevKey","accumulated","groupLabel","_getStackedBarYRange","xpos","PhysicsMixin","ClusterMixin","SectorsMixin","SelectionMixin","ManipulationMixin","NavigationMixin","HierarchicalLayoutMixin","_loadMixin","sourceVariable","mixinFunction","_clearMixin","_loadSelectedForceSolver","_loadPhysicsConfiguration","hubThreshold","activeSector","drawingNode","blockConnectingEdgeSelection","forceAppendSelection","manipulationDiv","editModeDiv","closeDiv","_cleanNavigation","_loadNavigationElements","overlay","_onTapOverlay","windowHammer","_hasParent","deactivate","escListener","activate","unbind","_callbacks","once","self","removeListener","removeAllListeners","callbacks","cb","hasListeners","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","_exportFunctions","_bound","keydown","keyup","_keys","fromCharCode","code","down","handleEvent","up","keyCode","bound","bindAll","getKey","newBindings","global","dfl","hasOwnProp","defaultParsingFlags","empty","unusedTokens","unusedInput","charsLeftOver","nullInput","invalidMonth","invalidFormat","userInvalidated","iso","printMsg","msg","suppressDeprecationWarnings","warn","deprecate","firstTime","deprecateSimple","deprecations","padToken","func","leftZeroFill","ordinalizeToken","period","localeData","ordinal","Locale","Moment","config","skipOverflow","checkOverflow","copyConfig","Duration","normalizedInput","normalizeObjectUnits","years","quarters","quarter","months","weeks","week","days","hour","minute","second","millisecond","_milliseconds","_days","_months","_locale","_bubble","val","_isAMomentObject","_i","_f","_l","_strict","_tzm","_isUTC","_offset","_pf","momentProperties","absRound","number","targetLength","forceSign","output","positiveMomentsDifference","base","res","isAfter","momentsDifference","makeAs","isBefore","createAdder","dur","tmp","addOrSubtractDurationFromMoment","mom","isAdding","updateOffset","setTime","rawSetter","rawGetter","rawMonthSetter","input","compareArrays","dontConvert","lengthDiff","diffs","toInt","normalizeUnits","units","lowered","unitAliases","camelFunctions","inputObject","normalizedProp","makeList","setter","getter","results","utc","set","argumentForCoercion","coercedNumber","isFinite","daysInMonth","UTC","getUTCDate","weeksInYear","dow","doy","weekOfYear","daysInYear","isLeapYear","_a","DATE","_overflowDayOfYear","isValid","_isValid","getTime","bigHour","normalizeLocale","chooseLocale","names","loadLocale","oldLocale","hasModule","model","local","removeFormattingTokens","makeFormatFunction","formattingTokens","formatTokenFunctions","formatMoment","expandFormat","formatFunctions","invalidDate","replaceLongDateFormatTokens","longDateFormat","localFormattingTokens","lastIndex","getParseRegexForToken","parseTokenOneDigit","parseTokenThreeDigits","parseTokenFourDigits","parseTokenOneToFourDigits","parseTokenSignedNumber","parseTokenSixDigits","parseTokenOneToSixDigits","parseTokenTwoDigits","parseTokenOneToThreeDigits","parseTokenWord","_meridiemParse","parseTokenOffsetMs","parseTokenTimestampMs","parseTokenTimezone","parseTokenT","parseTokenDigits","parseTokenOneOrTwoDigits","_ordinalParse","_ordinalParseLenient","RegExp","regexpEscape","unescapeFormat","timezoneMinutesFromString","string","possibleTzMatches","tzChunk","parseTimezoneChunker","addTimeToArrayFromToken","datePartArray","monthsParse","_dayOfYear","parseTwoDigitYear","_isPm","isPM","_useUTC","weekdaysParse","_w","invalidWeekday","dayOfYearFromWeekInfo","weekYear","weekday","temp","GG","W","E","_week","gg","dayOfYearFromWeeks","dateFromConfig","currentDate","yearToUse","currentDateArray","makeUTCDate","getUTCMonth","_nextDay","makeDate","setUTCMinutes","getUTCMinutes","dateFromObject","getUTCFullYear","makeDateFromStringAndFormat","ISO_8601","parseISO","parsedInput","tokens","skipped","stringLength","totalParsedInputLength","matched","p4","makeDateFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","NaN","score","l","isoRegex","isoDates","isoTimes","makeDateFromString","createFromInputFallback","makeDateFromInput","aspNetJsonRegex","ms","setUTCFullYear","parseWeekday","substituteTimeAgo","withoutSuffix","isFuture","relativeTime","posNegDuration","relativeTimeThresholds","firstDayOfWeek","firstDayOfWeekOfYear","adjustedMoment","daysToDayOfWeek","daysToAdd","getUTCDay","makeMoment","invalid","preparse","pickBy","moments","dayOfMonth","unit","makeAccessor","keepTime","daysToYears","yearsToDays","makeDurationGetter","makeGlobal","shouldDeprecate","ender","oldGlobalMoment","globalScope","VERSION","aspNetTimeSpanJsonRegex","isoDurationRegex","isoFormat","unitMillisecondFactors","Milliseconds","Seconds","Minutes","Hours","Days","Months","Years","D","Q","DDD","dayofyear","isoweekday","isoweek","weekyear","isoweekyear","ordinalizeTokens","paddedTokens","MMM","monthsShort","MMMM","dd","weekdaysMin","ddd","weekdaysShort","dddd","weekdays","isoWeek","YY","YYYY","YYYYY","YYYYYY","gggg","ggggg","isoWeekYear","GGGG","GGGGG","isoWeekday","meridiem","SS","SSS","SSSS","Z","zone","ZZ","zoneAbbr","zz","zoneName","unix","lists","DDDD","_monthsShort","monthName","regex","_monthsParse","_longMonthsParse","_shortMonthsParse","_weekdays","_weekdaysShort","_weekdaysMin","weekdayName","_weekdaysParse","_longDateFormat","LTS","LT","L","LL","LLL","LLLL","isLower","_calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","calendar","_relativeTime","future","past","mm","hh","MM","yy","pastFuture","_ordinal","postformat","_invalidDate","ret","parseIso","diffRes","isDuration","inp","version","defaultFormat","relativeTimeThreshold","threshold","limit","defineLocale","_abbr","abbr","langData","flags","parseZone","isDSTShifted","parsingFlags","invalidAt","keepLocalTime","_dateTzOffset","inputString","asFloat","daysAdjust","that","zoneDiff","startOf","humanize","fromNow","sod","isDST","getDay","endOf","inputMs","isSame","localAdjust","_changeInProgress","hasAlignedHourOffset","isoWeeksInYear","weekInfo","newLocaleData","getTimezoneOffset","isoWeeks","toJSON","withSuffix","toIsoString","asSeconds","asMilliseconds","asMinutes","asHours","asDays","asWeeks","asMonths","asYears","ordinalParse","require","noGlobal","setup","READY","Event","determineEventTypes","Utils","each","gestures","Detection","register","onTouch","DOCUMENT","EVENT_MOVE","detect","EVENT_END","Instance","defaults","behavior","userSelect","touchAction","touchCallout","contentZooming","userDrag","tapHighlightColor","HAS_POINTEREVENTS","pointerEnabled","msPointerEnabled","HAS_TOUCHEVENTS","IS_MOBILE","NO_MOUSEEVENTS","CALCULATE_INTERVAL","EVENT_TYPES","DIRECTION_DOWN","DIRECTION_LEFT","DIRECTION_UP","DIRECTION_RIGHT","POINTER_MOUSE","POINTER_TOUCH","POINTER_PEN","EVENT_START","EVENT_RELEASE","EVENT_TOUCH","plugins","utils","dest","handler","iterator","inStr","find","inArray","hasParent","getCenter","getVelocity","deltaTime","getAngle","touch1","touch2","getDirection","getRotation","isVertical","setPrefixedCss","toggle","prefixes","toCamelCase","toggleBehavior","falseFn","onselectstart","ondragstart","str","preventMouseEvents","started","shouldDetect","hook","onTouchHandler","ev","triggerType","srcType","isPointer","isMouse","buttons","PointerEvent","matchType","updatePointer","doDetect","touchList","touchListLength","triggerChange","trigger","changedLength","changedTouches","evData","identifiers","identifier","pointerType","timeStamp","preventManipulation","stopDetect","pointers","touchlist","pointerEvent","pointerId","pt","MSPOINTER_TYPE_MOUSE","MSPOINTER_TYPE_TOUCH","MSPOINTER_TYPE_PEN","detection","stopped","startDetect","inst","eventData","startEvent","lastEvent","lastCalcEvent","futureCalcEvent","lastCalcData","extendEventData","instOptions","getCalculatedData","recalc","calcEv","calcData","velocityX","velocityY","interimAngle","interimDirection","startEv","lastEv","rotation","eventStartHandler","eventHandlers","createEvent","initEvent","dispatchEvent","state","dispose","eh","dragGesture","dragMaxTouches","triggered","dragMinDistance","startCenter","dragDistanceCorrection","dragLockToAxis","dragLockMinDistance","lastDirection","dragBlockVertical","dragBlockHorizontal","Drag","Gesture","holdGesture","holdTimeout","holdThreshold","Hold","Release","Swipe","swipeMinTouches","swipeMaxTouches","swipeVelocityX","swipeVelocityY","tapGesture","sincePrev","didDoubleTap","hasMoved","tapMaxDistance","tapMaxTime","doubleTapInterval","doubleTapDistance","tapAlways","Tap","Touch","preventMouse","transformGesture","scaleThreshold","rotationThreshold","transformMinScale","transformMinRotation","Transform","clusterToFit","maxNumberOfNodes","reposition","maxLevels","forceAggregateHubs","normalizeClusterLevels","increaseClusterLevel","repositionNodes","openCluster","isMovingBeforeClustering","_nodeInActiveArea","_sector","_addSector","decreaseClusterLevel","_expandClusterNode","_updateDynamicEdges","updateClusters","zoomDirection","recursive","doNotStart","amountOfNodes","_collapseSector","_formClusters","_openClusters","_openClustersBySize","_aggregateHubs","handleChains","chainPercentage","_getChainFraction","_reduceAmountOfChains","_getHubSize","_formClustersByHub","openAll","containedNodeId","childNode","_expelChildFromParent","_unselectAll","_releaseContainedEdges","_connectEdgeBackToChild","_validateEdges","othersPresent","childNodeId","_repositionBezierNodes","_formClustersByZoom","_forceClustersByZoom","minLength","_addToCluster","_clusterToSmallestNeighbour","smallestNeighbour","smallestNeighbourNode","neighbour","onlyEqual","_formClusterFromHub","hubNode","absorptionSizeOffset","allowCluster","edgesIdarray","amountOfInitialEdges","_addToContainedEdges","_connectEdgeToCluster","_containCircularEdgesFromNode","massBefore","correction","edgeToId","edgeFromId","k","_addToReroutedEdges","maxLevel","minLevel","clusterLevel","targetLevel","average","averageSquared","hubCounter","largestHub","variance","standardDeviation","fraction","reduceAmount","chains","total","_switchToSector","sectorId","sectorType","_switchToActiveSector","_switchToFrozenSector","_switchToSupportSector","_loadLatestSector","_previousSector","_setActiveSector","newId","_forgetLastSector","_createNewSector","_deleteActiveSector","_deleteFrozenSector","_freezeSector","_activateSector","_mergeThisWithFrozen","_collapseThisToSingleCluster","sector","unqiueIdentifier","previousSector","runFunction","argument","returnValues","_doInAllFrozenSectors","_drawSectorNodes","_drawAllSectorNodes","_getNodesOverlappingWith","overlappingNodes","_getAllNodesOverlappingWith","_pointerToPositionObject","positionObject","_getEdgesOverlappingWith","overlappingEdges","_getAllEdgesOverlappingWith","_addToSelection","_addToHover","_removeFromSelection","doNotTrigger","_unselectClusters","_getSelectedNodeCount","_getSelectedNode","_getSelectedEdge","_getSelectedEdgeCount","_getSelectedObjectCount","_selectionIsEmpty","_clusterInSelection","_selectConnectedEdges","_hoverConnectedEdges","_unselectConnectedEdges","append","highlightEdges","overrideSelectable","DOM","_manipulationReleaseOverload","_navigationReleaseOverload","getSelectedNodes","edgeIds","getSelectedEdges","idArray","selectNodes","RangeError","selectEdges","_clearManipulatorBar","manipulationDOM","_restoreOverloadedFunctions","functionName","_toggleEditMode","toolbar","boundFunction","edgeBeingEdited","selectedControlNode","_createAddNodeToolbar","_createAddEdgeToolbar","_editNode","_createEditEdgeToolbar","_addNode","_handleConnect","_finishConnect","_selectControlNode","_controlNodeDrag","_releaseControlNode","newNode","_editEdge","alert","supportNodes","targetNode","connectionEdge","connectFromId","_createEdge","defaultData","finalizedData","sourceNodeId","targetNodeId","selectedNodes","selectedEdges","navigationDivs","navigationDivActions","_stopMovement","_zoomExtent","hubsize","definedLevel","undefinedLevel","_changeConstants","_determineLevels","_determineLevelsDirected","distribution","_getDistribution","_placeNodesByHierarchy","minPos","_placeBranchNodes","maxCount","_setLevel","_setLevelDirected","parentId","parentLevel","nodeMoved","_restoreNodes","graphToggleSmoothCurves","graph_toggleSmooth","getElementById","graphRepositionNodes","showValueOfRange","graphGenerateOptions","optionsSpecific","radioButton1","radioButton2","checked","backupConstants","optionsDiv","switchConfigurations","radioButton","querySelector","tableId","table","constantsVariableName","valueId","rangeValue","_overWriteGraphConstants","RepulsionMixin","HierarchialRepulsionMixin","BarnesHutMixin","_toggleBarnesHut","barnesHutTree","_initializeForceCalculation","_calculateForces","_calculateGravitationalForces","_calculateNodeForces","_calculateSpringForcesWithSupport","_calculateHierarchicalSpringForces","_calculateSpringForces","supportNodeId","gravity","gravityForce","edgeLength","springForce","combinedClusterSize","node1","node2","node3","_calculateSpringForce","physicsConfiguration","hierarchicalLayoutDirections","parentElement","rangeElement","radioButton3","graph_repositionNodes","graph_generateOptions","dynamicSmoothCurves","nameArray","webpackContext","req","resolve","repulsingForce","a_base","minimumDistance","steepness","springFx","springFy","totalFx","totalFy","correctionFx","correctionFy","nodeCount","_formBarnesHutTree","_getForceContribution","children","NW","NE","SW","SE","parentBranch","childrenCount","centerOfMass","calcSize","MAX_VALUE","sizeDiff","minimumTreeSize","rootSize","halfRootSize","centerX","centerY","_splitBranch","_placeInTree","_updateBranchMass","totalMass","totalMassInv","biggestSize","skipMassUpdate","_placeInRegion","region","containedNode","_insertRegion","childSize","_drawTree","_drawBranch","branch","webpackPolyfill","paths"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"vis.map","sources":["./dist/vis.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","util","DOMutil","DataSet","DataView","Queue","Graph3d","graph3d","Camera","Filter","Point2d","Point3d","Slider","StepNumber","Timeline","Graph2d","timeline","DateUtil","DataStep","Range","stack","TimeStep","components","items","Item","BackgroundItem","BoxItem","PointItem","RangeItem","Component","CurrentTime","CustomTime","DataAxis","GraphGroup","Group","BackgroundGroup","ItemSet","Legend","LineGraph","TimeAxis","Network","network","Edge","Groups","Images","Node","Popup","dotparser","gephiParser","Graph","Error","moment","hammer","isNumber","object","Number","isString","String","isDate","Date","match","ASPDateRegex","exec","isNaN","parse","isDataTable","google","visualization","DataTable","randomUUID","S4","Math","floor","random","toString","extend","a","i","len","arguments","length","other","prop","hasOwnProperty","selectiveExtend","props","Array","isArray","selectiveDeepExtend","b","TypeError","constructor","Object","undefined","deepExtend","selectiveNotDeepExtend","indexOf","equalArray","convert","type","Boolean","valueOf","isMoment","toDate","getType","toISOString","value","getAbsoluteLeft","elem","getBoundingClientRect","left","window","pageXOffset","getAbsoluteTop","top","pageYOffset","addClassName","className","classes","split","push","join","removeClassName","index","splice","forEach","callback","toArray","array","updateProperty","key","addEventListener","element","action","listener","useCapture","navigator","userAgent","attachEvent","removeEventListener","detachEvent","preventDefault","event","returnValue","getTarget","target","srcElement","nodeType","parentNode","option","asBoolean","defaultValue","asNumber","asString","asSize","asElement","GiveDec","Hex","Value","eval","GiveHex","Dec","parseColor","color","isValidRGB","rgb","substr","RGBToHex","isValidHex","hsv","hexToHSV","lighterColorHSV","h","s","v","min","darkerColorHSV","darkerColorHex","HSVToHex","lighterColorHex","background","border","highlight","hover","hexToRGB","hex","replace","toUpperCase","substring","d","e","f","r","g","red","green","blue","RGBToHSV","minRGB","maxRGB","max","hue","saturation","cssUtil","cssText","styles","style","trim","parts","keys","map","addCssText","currentStyles","newStyles","removeCssText","removeStyles","HSVToRGB","q","t","isOk","test","selectiveBridgeObject","fields","referenceObject","objectTo","create","bridgeObject","mergeOptions","mergeTarget","options","enabled","binarySearchCustom","orderedItems","searchFunction","field","field2","maxIterations","iteration","low","high","middle","item","searchResult","binarySearchValue","sidePreference","prevValue","nextValue","easeInOutQuad","start","end","duration","change","easingFunctions","linear","easeInQuad","easeOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","prepareElements","JSONcontainer","elementType","redundant","used","cleanupElements","removeChild","getSVGElement","svgContainer","shift","document","createElementNS","appendChild","getDOMElement","DOMContainer","insertBefore","createElement","drawPoint","x","y","group","point","drawPoints","setAttributeNS","size","drawBar","width","height","rect","data","_options","_data","_fieldId","fieldId","_type","_subscribers","add","setOptions","prototype","queue","_queue","destroy","on","subscribers","subscribe","off","filter","unsubscribe","_trigger","params","senderId","concat","subscriber","addedIds","me","_addItem","columns","_getColumnNames","row","rows","getNumberOfRows","col","cols","getValue","update","updatedIds","updatedData","addOrUpdate","_updateItem","get","ids","firstType","returnType","allowedValues","itemId","_getItem","order","_sort","_filterFields","_appendRow","result","getIds","getDataSet","mappedItems","filteredItem","name","sort","av","bv","remove","removedId","removedIds","_remove","clear","maxField","itemField","minField","distinct","values","fieldType","count","exists","types","raw","converted","JSON","stringify","dataTable","getNumberOfColumns","getColumnId","getColumnLabel","addRow","setValue","_ids","_onEvent","apply","setData","viewOptions","getArguments","defaultFilter","dataSet","added","updated","removed","delay","Infinity","_timeout","_extended","_flushIfNeeded","flush","methods","original","method","args","fn","context","entry","clearTimeout","setTimeout","container","SyntaxError","containerElement","margin","defaultXCenter","defaultYCenter","xLabel","yLabel","zLabel","passValueFn","xValueLabel","yValueLabel","zValueLabel","filterLabel","legendLabel","STYLE","DOT","showPerspective","showGrid","keepAspectRatio","showShadow","showGrayBottom","showTooltip","verticalRatio","animationInterval","animationPreload","camera","eye","dataPoints","colX","colY","colZ","colValue","colFilter","xMin","xStep","xMax","yMin","yStep","yMax","zMin","zStep","zMax","valueMin","valueMax","xBarWidth","yBarWidth","colorAxis","colorGrid","colorDot","colorDotBorder","getMouseX","clientX","targetTouches","getMouseY","clientY","Emitter","_setScale","scale","z","xCenter","yCenter","zCenter","setArmLocation","_convert3Dto2D","point3d","translation","_convertPointToTranslation","_convertTranslationToScreen","ax","ay","az","cx","getCameraLocation","cy","cz","sinTx","sin","getCameraRotation","cosTx","cos","sinTy","cosTy","sinTz","cosTz","dx","dy","dz","bx","by","ex","ey","ez","getArmLength","xcenter","frame","canvas","clientWidth","ycenter","_setBackgroundColor","backgroundColor","fill","stroke","strokeWidth","borderColor","borderWidth","borderStyle","BAR","BARCOLOR","BARSIZE","DOTLINE","DOTCOLOR","DOTSIZE","GRID","LINE","SURFACE","_getStyleNumber","styleName","_determineColumnIndexes","counter","column","getDistinctValues","distinctValues","getColumnRange","minMax","_dataInitialize","rawData","_onChange","dataFilter","setOnLoadCallback","redraw","withBars","defaultXBarWidth","dataX","defaultYBarWidth","dataY","xRange","defaultXMin","defaultXMax","defaultXStep","yRange","defaultYMin","defaultYMax","defaultYStep","zRange","defaultZMin","defaultZMax","defaultZStep","valueRange","defaultValueMin","defaultValueMax","_getDataPoints","obj","sortNumber","dataMatrix","xIndex","yIndex","trans","screen","bottom","pointRight","pointTop","pointCross","hasChildNodes","firstChild","position","overflow","noCanvas","fontWeight","padding","innerHTML","onmousedown","_onMouseDown","ontouchstart","_onTouchStart","onmousewheel","_onWheel","ontooltip","_onTooltip","onkeydown","setSize","_resizeCanvas","clientHeight","animationStart","slider","play","animationStop","stop","_resizeCenter","charAt","parseFloat","setCameraPosition","pos","horizontal","vertical","setArmRotation","distance","setArmLength","getCameraPosition","getArmRotation","_readData","_redrawFilter","animationAutoStart","cameraPosition","styleNumber","tooltip","showAnimationControls","_redrawSlider","_redrawClear","_redrawAxis","_redrawDataGrid","_redrawDataLine","_redrawDataBar","_redrawDataDot","_redrawInfo","_redrawLegend","ctx","getContext","clearRect","widthMin","widthMax","dotSize","right","lineWidth","font","ymin","ymax","_hsv2rgb","strokeStyle","beginPath","moveTo","lineTo","strokeRect","fillStyle","closePath","gridLineLen","step","getCurrent","next","textAlign","textBaseline","fillText","label","visible","setValues","setPlayInterval","onchange","getIndex","selectValue","setOnChangeCallback","lineStyle","getLabel","getSelectedValue","from","to","prettyStep","text","xText","yText","zText","offset","xOffset","yOffset","xMin2d","xMax2d","gridLenX","gridLenY","textMargin","armAngle","H","S","V","R","G","B","C","Hi","X","abs","parseInt","cross","topSideVisible","zAvg","transBottom","dist","sortDepth","aDiff","subtract","bDiff","crossproduct","crossProduct","radius","arc","PI","j","surface","corners","xWidth","yWidth","surfaces","center","avg","transCenter","diff","leftButtonDown","_onMouseUp","which","button","touchDown","startMouseX","startMouseY","startStart","startEnd","startArmRotation","cursor","onmousemove","_onMouseMove","onmouseup","diffX","diffY","horizontalNew","verticalNew","snapAngle","snapValue","round","parameters","emit","mouseX","mouseY","tooltipTimeout","_hideTooltip","dataPoint","_dataPointFromXY","_showTooltip","ontouchmove","_onTouchMove","ontouchend","_onTouchEnd","delta","wheelDelta","detail","oldLength","newLength","_insideTriangle","triangle","sign","as","bs","cs","distMax","closestDataPoint","closestDist","triangle1","triangle2","distX","distY","sqrt","content","line","dot","dom","borderRadius","boxShadow","borderLeft","contentWidth","offsetWidth","contentHeight","offsetHeight","lineHeight","dotWidth","dotHeight","armLocation","armRotation","armLength","cameraLocation","cameraRotation","calculateCameraOrientation","rot","graph","onLoadCallback","loadInBackground","isLoaded","getLoadedProgress","getColumn","getValues","dataView","progress","sub","sum","prev","bar","MozBorderRadius","slide","onclick","togglePlay","onChangeCallback","playTimeout","playInterval","playLoop","setIndex","playNext","interval","clearInterval","getPlayInterval","setPlayLoop","doLoop","onChange","indexToLeft","startClientX","startSlideX","leftToIndex","_start","_end","_step","precision","_current","setRange","setStep","calculatePrettyStep","log10","log","LN10","step1","pow","step2","step5","toPrecision","getStep","groups","forthArgument","defaultOptions","autoResize","orientation","maxHeight","minHeight","_create","body","domProps","emitter","bind","hiddenDates","snap","toScreen","_toScreen","toGlobalScreen","_toGlobalScreen","toTime","_toTime","toGlobalTime","_toGlobalTime","range","timeAxis","currentTime","customTime","itemSet","itemsData","groupsData","setGroups","setItems","Core","newDataSet","initialLoad","dataRange","_getDataRange","setWindow","animate","fit","setSelection","focus","getSelection","itemData","getItemRange","dataset","minItem","maxStartItem","maxEndItem","linegraph","getLegend","groupId","isGroupVisible","visibility","convertHiddenOptions","repeat","dateItem","updateHiddenDates","centerContainer","totalRange","pixelTime","startDate","endDate","_d","runUntil","clone","day","dayOfYear","year","dayOffset","date","month","console","removeDuplicates","startHidden","isHidden","endHidden","rangeStart","rangeEnd","hidden","startToFront","endToFront","_applyRange","safeDates","printDates","dates","stepOverHiddenDates","timeStep","previousTime","stepInHidden","currentValue","current","newValue","switchedYear","switchedMonth","switchedDay","time","conversion","getHiddenDurationBetween","correctTimeForHidden","hiddenDuration","totalDuration","partialDuration","accumulatedHiddenDuration","getAccumulatedHiddenDuration","newTime","getHiddenDurationBefore","timeOffset","requiredDuration","previousPoint","snapAwayFromHidden","direction","correctionEnabled","minimumStep","containerHeight","customRange","alignZeros","autoScale","stepIndex","marginStart","marginEnd","deadSpace","majorSteps","minorSteps","setMinimumStep","setFirst","safeSize","minimumStepValue","orderOfMagnitude","minorStepIdx","magnitudefactor","solutionFound","stepSize","niceStart","niceEnd","roundToMinor","marginRange","rounded","hasNext","previous","decimals","slice","exp","cnt","isMajor","now","hours","minutes","seconds","milliseconds","deltaDifference","scaleOffset","moveable","zoomable","zoomMin","zoomMax","touch","animateTimer","_onDragStart","_onDrag","_onDragEnd","_onHold","_onMouseWheel","_onTouch","_onPinch","validateDirection","getPointer","pageX","pageY","hammerUtil","_cancelAnimation","initStart","initEnd","initTime","anyChanged","dragging","done","changed","newStart","newEnd","getRange","totalHidden","previousDelta","allowDragging","gesture","deltaX","deltaY","diffRange","safeStart","safeEnd","fakeGesture","pointer","pointerDate","_pointerToDate","zoom","touches","centerDate","hiddenDurationBefore","hiddenDurationAfter","move","EPSILON","orderByStart","orderByEnd","aTime","bTime","force","iMax","axis","collidingItem","jj","collision","nostack","subgroups","newTop","subgroup","SCALE","DAY","MILLISECOND","SECOND","MINUTE","HOUR","WEEKDAY","MONTH","YEAR","first","setFullYear","getFullYear","setMonth","setDate","setHours","setMinutes","setSeconds","setMilliseconds","getMilliseconds","getSeconds","getMinutes","getHours","getDate","getMonth","setScale","newScale","newStep","setAutoScale","enable","stepYear","stepMonth","stepDay","stepHour","stepMinute","stepSecond","stepMillisecond","getLabelMinor","format","getLabelMajor","_isResized","resized","_previousWidth","_previousHeight","showCurrentTime","locales","locale","parent","backgroundVertical","title","currentTimeTimer","setCurrentTime","getCurrentTime","showCustomTime","eventParams","Hammer","drag","prevent_default","setCustomTime","getCustomTime","stopPropagation","svg","linegraphOptions","showMinorLabels","showMajorLabels","icons","majorLinesOffset","minorLinesOffset","labelOffsetX","labelOffsetY","iconWidth","linegraphSVG","DOMelements","lines","labels","conversionFactor","minWidth","stepPixels","stepPixelsForced","zeroCrossing","lineOffset","master","svgElements","iconsRemoved","amountOfGroups","lineContainer","scrollTop","addGroup","graphOptions","updateGroup","removeGroup","hide","show","display","_redrawGroupIcons","iconHeight","iconOffset","drawIcon","_cleanupIcons","backgroundHorizontal","changeCalled","activeGroups","_calculateCharSize","minorLabelHeight","minorCharHeight","majorLabelHeight","majorCharHeight","minorLineWidth","minorLineHeight","majorLineWidth","majorLineHeight","_redrawLabels","_redrawTitle","amountOfSteps","stepDifference","zeroStepDifference","valueAtZero","marginStartPos","maxLabelSize","_redrawLabel","_redrawLine","titleWidth","titleCharHeight","convertValue","invertedValue","convertedValue","characterHeight","largestWidth","majorCharWidth","minorCharWidth","textMinor","createTextNode","measureCharMinor","textMajor","measureCharMajor","textTitle","measureCharTitle","titleCharWidth","groupsUsingDefaultStyles","usingDefaultStyle","zeroPosition","Line","Bar","Points","setZeroPosition","catmullRom","parametrization","alpha","SVGcontainer","path","fillPath","fillHeight","outline","shaded","barWidth","bar1Height","bar2Height","icon","yAxisOrientation","getYRange","groupData","draw","framework","subgroupIndex","subgroupOrderer","subgroupOrder","visibleItems","byStart","byEnd","checkRangedItems","inner","foreground","marker","Element","getLabelWidth","restack","_updateVisibleItems","markerHeight","lastMarkerHeight","dirty","displayed","_calculateHeight","offsetTop","offsetLeft","ii","repositionY","resetSubgroups","labelSet","setParent","orderSubgroups","_checkIfVisible","sortArray","sortField","removeFromDataSet","removeItem","startArray","endArray","oldVisibleItems","visibleItemsLookup","lowerBound","upperBound","_checkIfVisibleWithReference","initialPosByStart","_traceVisible","initialPosByEnd","repositionX","initialPos","breakCondition","isVisible","align","groupOrder","selectable","editable","updateTime","onAdd","onUpdate","onMove","onRemove","onMoving","itemOptions","itemListeners","_onAdd","_onUpdate","_onRemove","groupListeners","_onAddGroups","_onUpdateGroups","_onRemoveGroups","groupIds","selection","stackDirty","touchParams","UNGROUPED","BACKGROUND","box","_updateUngrouped","backgroundGroup","_onSelectItem","_onMultiSelectItem","_onAddItem","addCallback","Function","markDirty","unselect","select","getVisibleItems","rawVisibleItems","_deselect","_orderGroups","visibleInterval","zoomed","lastVisibleInterval","lastWidth","firstGroup","_firstGroup","firstMargin","nonFirstMargin","groupMargin","groupResized","firstGroupIndex","firstGroupId","ungrouped","_getGroupId","getLabelSet","oldItemsData","getItems","_order","getGroups","_getType","_removeItem","groupOptions","oldGroupId","oldGroup","_constructByEndArray","itemFromTarget","selected","dragLeftItem","dragRightItem","initialX","itemProps","newProps","initial","groupFromTarget","_updateItemProps","_moveToGroup","changes","ctrlKey","srcEvent","shiftKey","oldSelection","newSelection","xAbs","newItem","_getItemRange","_item","itemSetFromTarget","side","iconSize","iconSpacing","textArea","scrollableHeight","drawLegendIcons","getComputedStyle","paddingTop","defaultGroup","sampling","graphHeight","barChart","handleOverlap","dataAxis","legend","abortedGraphUpdate","autoSizeSVG","lastStart","COUNTER","BarGraphFunctions","yAxisLeft","yAxisRight","legendLeft","legendRight","_updateAllGroupData","_updateGroup","groupsContent","ungroupedCounter","forceGraphUpdate","_updateGraph","rangePerPixelInv","preprocessedGroupData","processedGroupData","groupRanges","minDate","maxDate","_getRelevantData","_applySampling","_convertXcoordinates","_getYRanges","_updateYAxis","MAX_CYCLES","_convertYcoordinates","dataContainer","guess","increment","amountOfPoints","xDistance","pointsPerPixel","ceil","sampledData","barCombinedDataLeft","barCombinedDataRight","getStackedBarYRange","minVal","maxVal","yAxisLeftUsed","yAxisRightUsed","minLeft","minRight","maxLeft","maxRight","ignore","_toggleAxisVisiblity","drawIcons","axisUsed","datapoints","xValue","yValue","extractedData","svgHeight","majorLines","majorTexts","minorLines","minorTexts","lineTop","lang","parentChanged","foregroundNextSibling","nextSibling","backgroundNextSibling","_repaintLabels","timeLabelsize","xFirstMajorLabel","cur","_repaintMinorText","_repaintMajorText","_repaintMajorLine","_repaintMinorLine","leftTime","leftText","widthText","arr","pop","childNodes","nodeValue","_repaintDeleteButton","anchor","deleteButton","_updateContents","template","_updateTitle","removeAttribute","_updateDataAttributes","dataAttributes","attributes","setAttribute","_updateStyle","emptyContent","baseClassName","onTop","itemSubgroup","itemSetHeight","marginLeft","maxWidth","_repaintDragLeft","_repaintDragRight","contentLeft","parentWidth","boxWidth","dragLeft","dragRight","_initializeMixinLoaders","renderRefreshRate","renderTimestep","renderTime","maxPhysicsTicksPerRender","physicsDiscreteStepsize","initializing","triggerFunctions","edit","editEdge","connect","del","nodes","mass","radiusMin","radiusMax","shape","image","fontColor","fontSize","fontFace","fontFill","level","highlightColor","borderWidthSelected","edges","widthSelectionMultiplier","hoverWidth","arrowScaleFactor","dash","gap","altLength","inheritColor","configurePhysics","physics","barnesHut","theta","gravitationalConstant","centralGravity","springLength","springConstant","damping","repulsion","nodeDistance","hierarchicalRepulsion","clustering","initialMaxNodes","clusterThreshold","reduceToNodes","chainThreshold","clusterEdgeThreshold","sectorThreshold","screenSizeThreshold","fontSizeMultiplier","maxFontSize","forceAmplification","distanceAmplification","edgeGrowth","nodeScaling","maxNodeSizeIncrements","activeAreaBoxSize","clusterLevelDifference","navigation","keyboard","speed","dataManipulation","initiallyVisible","hierarchicalLayout","levelSeparation","nodeSpacing","layout","freezeForStabilization","smoothCurves","dynamic","roundness","maxVelocity","minVelocity","stabilize","stabilizationIterations","dragNetwork","dragNodes","hideEdgesOnDrag","hideNodesOnDrag","constants","pixelRatio","hoverObj","controlNodesActive","navigationHammers","existing","_new","animationSpeed","animationEasingFunction","easingTime","sourceScale","targetScale","sourceTranslation","targetTranslation","lockedOnNodeId","lockedOnNodeOffset","touchTime","images","setOnloadCallback","_redraw","xIncrement","yIncrement","zoomIncrement","_loadPhysicsSystem","_loadSectorSystem","_loadClusterSystem","_loadSelectionSystem","_loadHierarchySystem","_setTranslation","freezeSimulation","cachedFunctions","startedStabilization","stabilized","draggingNodes","calculationNodes","calculationNodeIndices","nodeIndices","canvasTopLeft","canvasBottomRight","pointerPosition","areaCenter","previousScale","nodesData","edgesData","nodesListeners","_addNodes","_updateNodes","_removeNodes","edgesListeners","_addEdges","_updateEdges","_removeEdges","moving","timer","_setupHierarchicalLayout","zoomExtent","startWithClustering","keycharm","MixinLoader","Activator","_getScriptPath","scripts","getElementsByTagName","src","_getRange","node","minY","maxY","minX","maxX","nodeId","_findCenter","animationOptions","initialZoom","disableStart","zoomLevel","numberOfNodes","factor","yDistance","xZoomLevel","yZoomLevel","animation","_updateNodeIndexList","_clearNodeIndexList","idx","dotData","DOTToGraph","gephi","gephiData","parseGephi","_setNodes","_setEdges","_putDataInSector","_resetLevels","_stabilize","onEdit","onEditEdge","onConnect","onDelete","editMode","newColorObj","groupname","clickToUse","activator","_createKeyBinds","_loadNavigationControls","_loadManipulationSystem","_configureSmoothCurves","devicePixelRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","backingStorePixelRatio","setTransform","pinch","_onTap","_onDoubleTap","_onMouseMoveTitle","hammerFrame","_onRelease","reset","isActive","_moveUp","_yStopMoving","_moveDown","_moveLeft","_xStopMoving","_moveRight","_zoomIn","_stopZoom","_zoomOut","_createManipulatorBar","_deleteSelected","_getPointer","pinched","_getScale","_handleTouch","_handleDragStart","_getNodeAt","_getTranslation","isSelected","_selectObject","nodeIds","objectId","selectionObj","xFixed","yFixed","_handleOnDrag","releaseNode","_XconvertDOMtoCanvas","_XconvertCanvasToDOM","_YconvertDOMtoCanvas","_YconvertCanvasToDOM","_handleDragEnd","_handleTap","_handleDoubleTap","_handleOnHold","_handleOnRelease","_zoom","scaleOld","preScaleDragPointer","DOMtoCanvas","scaleFrac","tx","ty","updateClustersDefault","postScaleDragPointer","canvasToDOM","popupObj","_checkHidePopup","checkShow","_checkShowPopup","popupTimer","edgeId","_getEdgeAt","_hoverObject","_blurObject","lastPopupNode","getTitle","isOverlappingWith","edge","connected","popup","setPosition","setText","emitEvent","oldWidth","oldHeight","oldNodesData","_updateSelection","angle","_updateCalculationNodes","_reconnectEdges","_updateValueRange","updateLabels","changedData","setProperties","properties","oldEdgesData","oldEdge","disconnect","showInternalIds","_createBezierNodes","via","sectors","dynamicEdges","setValueRange","w","save","translate","_doInAllSectors","restore","offsetX","offsetY","_drawNodes","alwaysShow","setScaleAndPos","inArea","sMax","_drawEdges","_drawControlNodes","_freezeDefinedNodes","_physicsTick","_restoreFrozenNodes","fixedData","_isMoving","vmin","isMoving","_discreteStepNodes","nodesPresent","discreteStepLimited","discreteStep","vminCorrected","mainMovingStatus","supportMovingStatus","_doInAllActiveSectors","mainMoving","_doInSupportSector","_animationStep","_handleNavigation","calculationTime","maxSteps","timeRequired","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","ua","toLowerCase","requiresTimeout","iterations","toggleFreeze","parentEdgeId","internalMultiplier","positionBezierNode","mixin","storePosition","storePositions","dataArray","allowedToMoveX","allowedToMoveY","getPositions","focusOnNode","nodePosition","lockedOnNode","easingFunction","animateView","locked","_transitionRedraw","viewCenter","distanceFromCenter","_classicRedraw","_lockedRedraw","active","getScale","getCenterCoordinates","networkConstants","fromId","toId","widthSelected","labelDimensions","yLine","dirtyLabel","fromBackup","toBackup","originalFromId","originalToId","widthFixed","lengthFixed","controlNodesEnabled","controlNodes","positions","connectedNode","_drawLine","_drawArrow","_drawArrowCenter","_drawDashLine","attachEdge","detachEdge","xFrom","yFrom","xTo","yTo","xObj","yObj","_getDistanceToEdge","_getColor","colorObj","_getLineWidth","_line","midpointX","midpointY","_pointOnLine","_label","resize","_circle","_pointOnCircle","networkScaleInv","_getViaCoordinates","xVia","yVia","quadraticCurveTo","lineCount","measureText","fillRect","mozDash","setLineDash","pattern","lineDashOffset","mozDashOffset","lineCap","dashedLine","percentage","atan2","arrow","edgeSegmentLength","fromBorderDist","distanceToBorder","fromBorderPoint","toBorderDist","toBorderPoint","x1","y1","x2","y2","x3","y3","lastX","lastY","minDistance","_getDistanceToLine","px","py","something","u","nodeIdFrom","nodeIdTo","getControlNodePositions","_enableControlNodes","_disableControlNodes","_getSelectedControlNode","fromDistance","toDistance","_restoreControlNodes","defaultIndex","DEFAULT","load","url","brokenUrl","img","Image","onload","onerror","imagelist","grouplist","reroutedEdges","fontDrawThreshold","horizontalAlignLeft","verticalAlignTop","baseRadiusValue","radiusFixed","preassignedLevel","hierarchyEnumerated","fx","fy","vx","vy","resetCluster","dynamicEdgesLength","clusterSession","clusterSizeWidthFactor","clusterSizeHeightFactor","clusterSizeRadiusFactor","growthIndicator","networkScale","formationScale","clusterSize","containedNodes","containedEdges","clusterSessions","originalLabel","triggerFunction","groupObj","imageObj","brokenImage","_drawDatabase","_resizeDatabase","_drawBox","_resizeBox","_drawCircle","_resizeCircle","_drawEllipse","_resizeEllipse","_drawImage","_resizeImage","_drawText","_resizeText","_drawDot","_resizeShape","_drawSquare","_drawTriangle","_drawTriangleDown","_drawStar","_reset","clearSizeCache","_setForce","_addForce","isFixed","velocity","getDistance","globalAlpha","drawImage","textSize","getTextSize","clusterLineWidth","selectionLineWidth","roundRect","database","diameter","circle","defaultSize","ellipse","_drawShape","radiusMultiplier","baseline","labelUnderNode","inView","clearVelocity","updateVelocity","massBeforeClustering","energyBefore","styleAttr","fontFamily","WebkitBorderRadius","whiteSpace","parseDOT","parseGraph","nextPreview","isAlphaNumeric","regexAlphaNumeric","merge","o","addNode","graphs","attr","addEdge","createEdge","getToken","tokenType","TOKENTYPE","NULL","token","isComment","DELIMITER","c2","DELIMITERS","IDENTIFIER","newSyntaxError","UNKNOWN","chop","strict","parseStatements","parseStatement","subgraph","parseSubgraph","parseEdge","parseAttributeStatement","parseNodeStatement","subgraphs","parseAttributeList","message","maxLength","forEach2","array1","array2","elem1","elem2","graphData","dotNode","graphNode","convertEdge","dotEdge","graphEdge","subEdge","{","}","[","]",";","=",",","->","--","gephiJSON","allowedToMove","gEdges","gNodes","gEdge","source","gNode","leftContainer","rightContainer","shadowTop","shadowBottom","shadowTopLeft","shadowBottomLeft","shadowTopRight","shadowBottomRight","_redrawTimer","listeners","events","scrollTopMin","redrawCount","_initAutoResize","component","_stopAutoResize","what","getWindow","borderRootHeight","borderRootWidth","autoHeight","centerWidth","_updateScrollTop","visibilityTop","visibilityBottom","MAX_REDRAWS","repaint","_startAutoResize","_onResize","lastHeight","watchTimer","setInterval","initialScrollTop","oldScrollTop","_getScrollTop","newScrollTop","_setScrollTop","eventType","getTouchList","collectEventData","custom","back","editNode","addDescription","edgeDescription","editEdgeDescription","createEdgeError","deleteClusterError","CanvasRenderingContext2D","square","s2","ir","triangleDown","star","n","r2d","kappa","ox","oy","xe","ye","xm","ym","bezierCurveTo","wEllipse","hEllipse","ymb","yeb","xt","yt","xi","yi","xl","yl","xr","yr","dashArray","dashLength","dashCount","slope","distRemaining","dashIndex","_catmullRom","_linear","dFill","_catmullRomUniform","p0","p1","p2","p3","bp1","bp2","normalization","d1","d2","d3","A","N","M","d3powA","d2powA","d3pow2A","d2pow2A","d1pow2A","d1powA","Bargraph","barCombinedData","coreDistance","drawData","combinedData","intersections","barPoints","_getDataIntersections","heightOffset","_getSafeDrawData","nextKey","amount","resolved","prevKey","accumulated","groupLabel","_getStackedBarYRange","xpos","PhysicsMixin","ClusterMixin","SectorsMixin","SelectionMixin","ManipulationMixin","NavigationMixin","HierarchicalLayoutMixin","_loadMixin","sourceVariable","mixinFunction","_clearMixin","_loadSelectedForceSolver","_loadPhysicsConfiguration","hubThreshold","activeSector","drawingNode","blockConnectingEdgeSelection","forceAppendSelection","manipulationDiv","editModeDiv","closeDiv","_cleanNavigation","_loadNavigationElements","overlay","_onTapOverlay","windowHammer","_hasParent","deactivate","escListener","activate","unbind","_callbacks","once","self","removeListener","removeAllListeners","callbacks","cb","hasListeners","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","_exportFunctions","_bound","keydown","keyup","_keys","fromCharCode","code","down","handleEvent","up","keyCode","bound","bindAll","getKey","newBindings","global","dfl","hasOwnProp","defaultParsingFlags","empty","unusedTokens","unusedInput","charsLeftOver","nullInput","invalidMonth","invalidFormat","userInvalidated","iso","printMsg","msg","suppressDeprecationWarnings","warn","deprecate","firstTime","deprecateSimple","deprecations","padToken","func","leftZeroFill","ordinalizeToken","period","localeData","ordinal","Locale","Moment","config","skipOverflow","checkOverflow","copyConfig","Duration","normalizedInput","normalizeObjectUnits","years","quarters","quarter","months","weeks","week","days","hour","minute","second","millisecond","_milliseconds","_days","_months","_locale","_bubble","val","_isAMomentObject","_i","_f","_l","_strict","_tzm","_isUTC","_offset","_pf","momentProperties","absRound","number","targetLength","forceSign","output","positiveMomentsDifference","base","res","isAfter","momentsDifference","makeAs","isBefore","createAdder","dur","tmp","addOrSubtractDurationFromMoment","mom","isAdding","updateOffset","setTime","rawSetter","rawGetter","rawMonthSetter","input","compareArrays","dontConvert","lengthDiff","diffs","toInt","normalizeUnits","units","lowered","unitAliases","camelFunctions","inputObject","normalizedProp","makeList","setter","getter","results","utc","set","argumentForCoercion","coercedNumber","isFinite","daysInMonth","UTC","getUTCDate","weeksInYear","dow","doy","weekOfYear","daysInYear","isLeapYear","_a","DATE","_overflowDayOfYear","isValid","_isValid","getTime","bigHour","normalizeLocale","chooseLocale","names","loadLocale","oldLocale","hasModule","model","local","removeFormattingTokens","makeFormatFunction","formattingTokens","formatTokenFunctions","formatMoment","expandFormat","formatFunctions","invalidDate","replaceLongDateFormatTokens","longDateFormat","localFormattingTokens","lastIndex","getParseRegexForToken","parseTokenOneDigit","parseTokenThreeDigits","parseTokenFourDigits","parseTokenOneToFourDigits","parseTokenSignedNumber","parseTokenSixDigits","parseTokenOneToSixDigits","parseTokenTwoDigits","parseTokenOneToThreeDigits","parseTokenWord","_meridiemParse","parseTokenOffsetMs","parseTokenTimestampMs","parseTokenTimezone","parseTokenT","parseTokenDigits","parseTokenOneOrTwoDigits","_ordinalParse","_ordinalParseLenient","RegExp","regexpEscape","unescapeFormat","timezoneMinutesFromString","string","possibleTzMatches","tzChunk","parseTimezoneChunker","addTimeToArrayFromToken","datePartArray","monthsParse","_dayOfYear","parseTwoDigitYear","_isPm","isPM","_useUTC","weekdaysParse","_w","invalidWeekday","dayOfYearFromWeekInfo","weekYear","weekday","temp","GG","W","E","_week","gg","dayOfYearFromWeeks","dateFromConfig","currentDate","yearToUse","currentDateArray","makeUTCDate","getUTCMonth","_nextDay","makeDate","setUTCMinutes","getUTCMinutes","dateFromObject","getUTCFullYear","makeDateFromStringAndFormat","ISO_8601","parseISO","parsedInput","tokens","skipped","stringLength","totalParsedInputLength","matched","p4","makeDateFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","NaN","score","l","isoRegex","isoDates","isoTimes","makeDateFromString","createFromInputFallback","makeDateFromInput","aspNetJsonRegex","ms","setUTCFullYear","parseWeekday","substituteTimeAgo","withoutSuffix","isFuture","relativeTime","posNegDuration","relativeTimeThresholds","firstDayOfWeek","firstDayOfWeekOfYear","adjustedMoment","daysToDayOfWeek","daysToAdd","getUTCDay","makeMoment","invalid","preparse","pickBy","moments","dayOfMonth","unit","makeAccessor","keepTime","daysToYears","yearsToDays","makeDurationGetter","makeGlobal","shouldDeprecate","ender","oldGlobalMoment","globalScope","VERSION","aspNetTimeSpanJsonRegex","isoDurationRegex","isoFormat","unitMillisecondFactors","Milliseconds","Seconds","Minutes","Hours","Days","Months","Years","D","Q","DDD","dayofyear","isoweekday","isoweek","weekyear","isoweekyear","ordinalizeTokens","paddedTokens","MMM","monthsShort","MMMM","dd","weekdaysMin","ddd","weekdaysShort","dddd","weekdays","isoWeek","YY","YYYY","YYYYY","YYYYYY","gggg","ggggg","isoWeekYear","GGGG","GGGGG","isoWeekday","meridiem","SS","SSS","SSSS","Z","zone","ZZ","zoneAbbr","zz","zoneName","unix","lists","DDDD","_monthsShort","monthName","regex","_monthsParse","_longMonthsParse","_shortMonthsParse","_weekdays","_weekdaysShort","_weekdaysMin","weekdayName","_weekdaysParse","_longDateFormat","LTS","LT","L","LL","LLL","LLLL","isLower","_calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","calendar","_relativeTime","future","past","mm","hh","MM","yy","pastFuture","_ordinal","postformat","_invalidDate","ret","parseIso","diffRes","isDuration","inp","version","defaultFormat","relativeTimeThreshold","threshold","limit","defineLocale","_abbr","abbr","langData","flags","parseZone","isDSTShifted","parsingFlags","invalidAt","keepLocalTime","_dateTzOffset","inputString","asFloat","daysAdjust","that","zoneDiff","startOf","humanize","fromNow","sod","isDST","getDay","endOf","inputMs","isSame","localAdjust","_changeInProgress","hasAlignedHourOffset","isoWeeksInYear","weekInfo","newLocaleData","getTimezoneOffset","isoWeeks","toJSON","withSuffix","toIsoString","asSeconds","asMilliseconds","asMinutes","asHours","asDays","asWeeks","asMonths","asYears","ordinalParse","require","noGlobal","exportName","setTimeoutContext","timeout","bindFn","invokeArrayArg","arg","each","iterator","dest","inherit","child","childP","baseP","_super","boolOrFn","TYPE_FUNCTION","ifUndefined","val1","val2","addEventListeners","handler","splitStr","removeEventListeners","hasParent","inStr","str","find","inArray","findByKey","uniqueArray","prefixed","property","prefix","camelProp","VENDOR_PREFIXES","uniqueId","_uniqueId","getWindowForElement","doc","ownerDocument","defaultView","parentWindow","Input","manager","inputTarget","domHandler","ev","init","createInputInstance","Type","inputClass","SUPPORT_POINTER_EVENTS","PointerEventInput","SUPPORT_ONLY_TOUCH","TouchInput","SUPPORT_TOUCH","TouchMouseInput","MouseInput","inputHandler","pointersLen","pointers","changedPointersLen","changedPointers","isFirst","INPUT_START","isFinal","INPUT_END","INPUT_CANCEL","session","computeInputData","recognize","prevInput","pointersLength","firstInput","simpleCloneInputData","firstMultiple","offsetCenter","getCenter","timeStamp","deltaTime","getAngle","computeDeltaXY","offsetDirection","getDirection","rotation","getRotation","computeIntervalInputData","offsetDelta","prevDelta","velocityX","velocityY","last","lastInterval","COMPUTE_INTERVAL","getVelocity","DIRECTION_NONE","DIRECTION_LEFT","DIRECTION_RIGHT","DIRECTION_UP","DIRECTION_DOWN","PROPS_XY","PROPS_CLIENT_XY","evEl","MOUSE_ELEMENT_EVENTS","evWin","MOUSE_WINDOW_EVENTS","allow","pressed","POINTER_ELEMENT_EVENTS","POINTER_WINDOW_EVENTS","store","pointerEvents","SingleTouchInput","evTarget","SINGLE_TOUCH_TARGET_EVENTS","SINGLE_TOUCH_WINDOW_EVENTS","started","normalizeSingleTouches","all","changedTouches","TOUCH_TARGET_EVENTS","targetIds","getTouches","allTouches","INPUT_MOVE","identifier","changedTargetTouches","mouse","TouchAction","cleanTouchActions","actions","TOUCH_ACTION_NONE","hasPanX","TOUCH_ACTION_PAN_X","hasPanY","TOUCH_ACTION_PAN_Y","TOUCH_ACTION_MANIPULATION","TOUCH_ACTION_AUTO","Recognizer","defaults","state","STATE_POSSIBLE","simultaneous","requireFail","stateStr","STATE_CANCELLED","STATE_ENDED","STATE_CHANGED","STATE_BEGAN","directionStr","getRecognizerByNameIfManager","otherRecognizer","recognizer","AttrRecognizer","PanRecognizer","pX","pY","PinchRecognizer","PressRecognizer","_timer","_input","RotateRecognizer","SwipeRecognizer","TapRecognizer","pTime","pCenter","recognizers","preset","Manager","handlers","touchAction","toggleCssProps","recognizeWith","requireFailure","cssProps","triggerDomEvent","gestureEvent","createEvent","initEvent","dispatchEvent","TEST_ELEMENT","MOBILE_REGEX","INPUT_TYPE_TOUCH","INPUT_TYPE_PEN","INPUT_TYPE_MOUSE","INPUT_TYPE_KINECT","DIRECTION_HORIZONTAL","DIRECTION_VERTICAL","DIRECTION_ALL","MOUSE_INPUT_MAP","mousedown","mousemove","mouseup","pointerType","POINTER_INPUT_MAP","pointerdown","pointermove","pointerup","pointercancel","pointerout","IE10_POINTER_TYPE_ENUM",2,3,4,5,"MSPointerEvent","removePointer","eventTypeNormalized","isTouch","storeIndex","pointerId","SINGLE_TOUCH_INPUT_MAP","touchstart","touchmove","touchend","touchcancel","TOUCH_INPUT_MAP","inputEvent","inputData","isMouse","PREFIXED_TOUCH_ACTION","NATIVE_TOUCH_ACTION","TOUCH_ACTION_COMPUTE","compute","getTouchAction","preventDefaults","prevented","hasNone","preventSrc","STATE_RECOGNIZED","STATE_FAILED","dropRecognizeWith","dropRequireFailure","hasRequireFailures","canRecognizeWith","withState","tryEmit","canEmit","inputDataClone","process","attrTest","optionPointers","isRecognized","directionTest","hasMoved","inOut","validPointers","validMovement","validTime","taps","posThreshold","validTouchTime","failTimeout","validInterval","validMultiTap","tapCount","domEvents","userSelect","touchSelect","touchCallout","contentZooming","userDrag","tapHighlightColor","STOP","FORCED_STOP","stopped","curRecognizer","Tap","Pan","Swipe","Pinch","Rotate","Press","clusterToFit","maxNumberOfNodes","reposition","maxLevels","forceAggregateHubs","normalizeClusterLevels","increaseClusterLevel","repositionNodes","openCluster","isMovingBeforeClustering","_nodeInActiveArea","_sector","_addSector","decreaseClusterLevel","_expandClusterNode","_updateDynamicEdges","updateClusters","zoomDirection","recursive","doNotStart","amountOfNodes","_collapseSector","_formClusters","_openClusters","_openClustersBySize","_aggregateHubs","handleChains","chainPercentage","_getChainFraction","_reduceAmountOfChains","_getHubSize","_formClustersByHub","openAll","containedNodeId","childNode","_expelChildFromParent","_unselectAll","_releaseContainedEdges","_connectEdgeBackToChild","_validateEdges","othersPresent","childNodeId","_repositionBezierNodes","_formClustersByZoom","_forceClustersByZoom","minLength","_addToCluster","_clusterToSmallestNeighbour","smallestNeighbour","smallestNeighbourNode","neighbour","onlyEqual","_formClusterFromHub","hubNode","absorptionSizeOffset","allowCluster","edgesIdarray","amountOfInitialEdges","_addToContainedEdges","_connectEdgeToCluster","_containCircularEdgesFromNode","massBefore","correction","edgeToId","edgeFromId","k","_addToReroutedEdges","maxLevel","minLevel","clusterLevel","targetLevel","average","averageSquared","hubCounter","largestHub","variance","standardDeviation","fraction","reduceAmount","chains","total","_switchToSector","sectorId","sectorType","_switchToActiveSector","_switchToFrozenSector","_switchToSupportSector","_loadLatestSector","_previousSector","_setActiveSector","newId","_forgetLastSector","_createNewSector","_deleteActiveSector","_deleteFrozenSector","_freezeSector","_activateSector","_mergeThisWithFrozen","_collapseThisToSingleCluster","sector","unqiueIdentifier","previousSector","runFunction","argument","returnValues","_doInAllFrozenSectors","_drawSectorNodes","_drawAllSectorNodes","_getNodesOverlappingWith","overlappingNodes","_getAllNodesOverlappingWith","_pointerToPositionObject","positionObject","_getEdgesOverlappingWith","overlappingEdges","_getAllEdgesOverlappingWith","_addToSelection","_addToHover","_removeFromSelection","doNotTrigger","_unselectClusters","_getSelectedNodeCount","_getSelectedNode","_getSelectedEdge","_getSelectedEdgeCount","_getSelectedObjectCount","_selectionIsEmpty","_clusterInSelection","_selectConnectedEdges","_hoverConnectedEdges","_unselectConnectedEdges","append","highlightEdges","overrideSelectable","DOM","_manipulationReleaseOverload","_navigationReleaseOverload","getSelectedNodes","edgeIds","getSelectedEdges","idArray","selectNodes","RangeError","selectEdges","_clearManipulatorBar","manipulationDOM","_restoreOverloadedFunctions","functionName","_toggleEditMode","toolbar","boundFunction","edgeBeingEdited","selectedControlNode","_createAddNodeToolbar","_createAddEdgeToolbar","_editNode","_createEditEdgeToolbar","_addNode","_handleConnect","_finishConnect","_selectControlNode","_controlNodeDrag","_releaseControlNode","newNode","_editEdge","alert","supportNodes","targetNode","connectionEdge","connectFromId","_createEdge","defaultData","finalizedData","sourceNodeId","targetNodeId","selectedNodes","selectedEdges","dispose","navigationDivs","navigationDivActions","_stopMovement","_zoomExtent","hubsize","definedLevel","undefinedLevel","_changeConstants","_determineLevels","_determineLevelsDirected","distribution","_getDistribution","_placeNodesByHierarchy","minPos","_placeBranchNodes","maxCount","_setLevel","_setLevelDirected","parentId","parentLevel","nodeMoved","_restoreNodes","graphToggleSmoothCurves","graph_toggleSmooth","getElementById","graphRepositionNodes","showValueOfRange","graphGenerateOptions","optionsSpecific","radioButton1","radioButton2","checked","backupConstants","optionsDiv","switchConfigurations","radioButton","querySelector","tableId","table","constantsVariableName","valueId","rangeValue","_overWriteGraphConstants","RepulsionMixin","HierarchialRepulsionMixin","BarnesHutMixin","_toggleBarnesHut","barnesHutTree","_initializeForceCalculation","_calculateForces","_calculateGravitationalForces","_calculateNodeForces","_calculateSpringForcesWithSupport","_calculateHierarchicalSpringForces","_calculateSpringForces","supportNodeId","gravity","gravityForce","edgeLength","springForce","combinedClusterSize","node1","node2","node3","_calculateSpringForce","physicsConfiguration","hierarchicalLayoutDirections","parentElement","rangeElement","radioButton3","graph_repositionNodes","graph_generateOptions","dynamicSmoothCurves","nameArray","webpackContext","req","resolve","repulsingForce","a_base","minimumDistance","steepness","springFx","springFy","totalFx","totalFy","correctionFx","correctionFy","nodeCount","_formBarnesHutTree","_getForceContribution","children","NW","NE","SW","SE","parentBranch","childrenCount","centerOfMass","calcSize","MAX_VALUE","sizeDiff","minimumTreeSize","rootSize","halfRootSize","centerX","centerY","_splitBranch","_placeInTree","_updateBranchMass","totalMass","totalMassInv","biggestSize","skipMassUpdate","_placeInRegion","region","containedNode","_insertRegion","childSize","_drawTree","_drawBranch","branch","webpackPolyfill","paths","__webpack_amd_options__"],"mappings":"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"} \ No newline at end of file diff --git a/dist/vis.min.js b/dist/vis.min.js index 63897f3d..fcff8307 100644 --- a/dist/vis.min.js +++ b/dist/vis.min.js @@ -5,7 +5,7 @@ * A dynamic, browser-based visualization library. * * @version 3.7.2-SNAPSHOT - * @date 2014-12-16 + * @date 2014-12-18 * * @license * Copyright (C) 2011-2014 Almende B.V, http://almende.com @@ -24,16 +24,16 @@ */ "use strict";!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):"object"==typeof exports?exports.vis=e():t.vis=e()}(this,function(){return function(t){function e(s){if(i[s])return i[s].exports;var o=i[s]={exports:{},id:s,loaded:!1};return t[s].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}var i={};return e.m=t,e.c=i,e.p="",e(0)}([function(t,e,i){e.util=i(1),e.DOMutil=i(2),e.DataSet=i(3),e.DataView=i(4),e.Queue=i(5),e.Graph3d=i(6),e.graph3d={Camera:i(7),Filter:i(8),Point2d:i(9),Point3d:i(10),Slider:i(11),StepNumber:i(12)},e.Timeline=i(13),e.Graph2d=i(14),e.timeline={DateUtil:i(15),DataStep:i(16),Range:i(17),stack:i(18),TimeStep:i(19),components:{items:{Item:i(31),BackgroundItem:i(32),BoxItem:i(33),PointItem:i(34),RangeItem:i(35)},Component:i(20),CurrentTime:i(21),CustomTime:i(22),DataAxis:i(23),GraphGroup:i(24),Group:i(25),BackgroundGroup:i(26),ItemSet:i(27),Legend:i(28),LineGraph:i(29),TimeAxis:i(30)}},e.Network=i(36),e.network={Edge:i(37),Groups:i(38),Images:i(39),Node:i(40),Popup:i(41),dotparser:i(42),gephiParser:i(43)},e.Graph=function(){throw new Error("Graph is renamed to Network. Please create a graph as new vis.Network(...)")},e.moment=i(44),e.hammer=i(45)},function(module,exports,__webpack_require__){var moment=__webpack_require__(44);exports.isNumber=function(t){return t instanceof Number||"number"==typeof t},exports.isString=function(t){return t instanceof String||"string"==typeof t},exports.isDate=function(t){if(t instanceof Date)return!0;if(exports.isString(t)){var e=ASPDateRegex.exec(t);if(e)return!0;if(!isNaN(Date.parse(t)))return!0}return!1},exports.isDataTable=function(t){return"undefined"!=typeof google&&google.visualization&&google.visualization.DataTable&&t instanceof google.visualization.DataTable},exports.randomUUID=function(){var t=function(){return Math.floor(65536*Math.random()).toString(16)};return t()+t()+"-"+t()+"-"+t()+"-"+t()+"-"+t()+t()+t()},exports.extend=function(t){for(var e=1,i=arguments.length;i>e;e++){var s=arguments[e];for(var o in s)s.hasOwnProperty(o)&&(t[o]=s[o])}return t},exports.selectiveExtend=function(t,e){if(!Array.isArray(t))throw new Error("Array with property names expected as first argument");for(var i=2;ii;i++)if(t[i]!=e[i])return!1;return!0},exports.convert=function(t,e){var i;if(void 0===t)return void 0;if(null===t)return null;if(!e)return t;if("string"!=typeof e&&!(e instanceof String))throw new Error("Type must be a string");switch(e){case"boolean":case"Boolean":return Boolean(t);case"number":case"Number":return Number(t.valueOf());case"string":case"String":return String(t);case"Date":if(exports.isNumber(t))return new Date(t);if(t instanceof Date)return new Date(t.valueOf());if(moment.isMoment(t))return new Date(t.valueOf());if(exports.isString(t))return i=ASPDateRegex.exec(t),i?new Date(Number(i[1])):moment(t).toDate();throw new Error("Cannot convert object of type "+exports.getType(t)+" to type Date");case"Moment":if(exports.isNumber(t))return moment(t);if(t instanceof Date)return moment(t.valueOf());if(moment.isMoment(t))return moment(t);if(exports.isString(t))return i=ASPDateRegex.exec(t),moment(i?Number(i[1]):t);throw new Error("Cannot convert object of type "+exports.getType(t)+" to type Date");case"ISODate":if(exports.isNumber(t))return new Date(t);if(t instanceof Date)return t.toISOString();if(moment.isMoment(t))return t.toDate().toISOString();if(exports.isString(t))return i=ASPDateRegex.exec(t),i?new Date(Number(i[1])).toISOString():new Date(t).toISOString();throw new Error("Cannot convert object of type "+exports.getType(t)+" to type ISODate");case"ASPDate":if(exports.isNumber(t))return"/Date("+t+")/";if(t instanceof Date)return"/Date("+t.valueOf()+")/";if(exports.isString(t)){i=ASPDateRegex.exec(t);var s;return s=i?new Date(Number(i[1])).valueOf():new Date(t).valueOf(),"/Date("+s+")/"}throw new Error("Cannot convert object of type "+exports.getType(t)+" to type ASPDate");default:throw new Error('Unknown type "'+e+'"')}};var ASPDateRegex=/^\/?Date\((\-?\d+)/i;exports.getType=function(t){var e=typeof t;return"object"==e?null==t?"null":t instanceof Boolean?"Boolean":t instanceof Number?"Number":t instanceof String?"String":Array.isArray(t)?"Array":t instanceof Date?"Date":"Object":"number"==e?"Number":"boolean"==e?"Boolean":"string"==e?"String":e},exports.getAbsoluteLeft=function(t){return t.getBoundingClientRect().left+window.pageXOffset},exports.getAbsoluteTop=function(t){return t.getBoundingClientRect().top+window.pageYOffset},exports.addClassName=function(t,e){var i=t.className.split(" ");-1==i.indexOf(e)&&(i.push(e),t.className=i.join(" "))},exports.removeClassName=function(t,e){var i=t.className.split(" "),s=i.indexOf(e);-1!=s&&(i.splice(s,1),t.className=i.join(" "))},exports.forEach=function(t,e){var i,s;if(Array.isArray(t))for(i=0,s=t.length;s>i;i++)e(t[i],i,t);else for(i in t)t.hasOwnProperty(i)&&e(t[i],i,t)},exports.toArray=function(t){var e=[];for(var i in t)t.hasOwnProperty(i)&&e.push(t[i]);return e},exports.updateProperty=function(t,e,i){return t[e]!==i?(t[e]=i,!0):!1},exports.addEventListener=function(t,e,i,s){t.addEventListener?(void 0===s&&(s=!1),"mousewheel"===e&&navigator.userAgent.indexOf("Firefox")>=0&&(e="DOMMouseScroll"),t.addEventListener(e,i,s)):t.attachEvent("on"+e,i)},exports.removeEventListener=function(t,e,i,s){t.removeEventListener?(void 0===s&&(s=!1),"mousewheel"===e&&navigator.userAgent.indexOf("Firefox")>=0&&(e="DOMMouseScroll"),t.removeEventListener(e,i,s)):t.detachEvent("on"+e,i)},exports.preventDefault=function(t){t||(t=window.event),t.preventDefault?t.preventDefault():t.returnValue=!1},exports.getTarget=function(t){t||(t=window.event);var e;return t.target?e=t.target:t.srcElement&&(e=t.srcElement),void 0!=e.nodeType&&3==e.nodeType&&(e=e.parentNode),e},exports.option={},exports.option.asBoolean=function(t,e){return"function"==typeof t&&(t=t()),null!=t?0!=t:e||null},exports.option.asNumber=function(t,e){return"function"==typeof t&&(t=t()),null!=t?Number(t)||e||null:e||null},exports.option.asString=function(t,e){return"function"==typeof t&&(t=t()),null!=t?String(t):e||null},exports.option.asSize=function(t,e){return"function"==typeof t&&(t=t()),exports.isString(t)?t:exports.isNumber(t)?t+"px":e||null},exports.option.asElement=function(t,e){return"function"==typeof t&&(t=t()),t||e||null},exports.GiveDec=function(Hex){var Value;return Value="A"==Hex?10:"B"==Hex?11:"C"==Hex?12:"D"==Hex?13:"E"==Hex?14:"F"==Hex?15:eval(Hex)},exports.GiveHex=function(t){var e;return e=10==t?"A":11==t?"B":12==t?"C":13==t?"D":14==t?"E":15==t?"F":""+t},exports.parseColor=function(t){var e;if(exports.isString(t)){if(exports.isValidRGB(t)){var i=t.substr(4).substr(0,t.length-5).split(",");t=exports.RGBToHex(i[0],i[1],i[2])}if(exports.isValidHex(t)){var s=exports.hexToHSV(t),o={h:s.h,s:.45*s.s,v:Math.min(1,1.05*s.v)},n={h:s.h,s:Math.min(1,1.25*s.v),v:.6*s.v},r=exports.HSVToHex(n.h,n.h,n.v),a=exports.HSVToHex(o.h,o.s,o.v);e={background:t,border:r,highlight:{background:a,border:r},hover:{background:a,border:r}}}else e={background:t,border:t,highlight:{background:t,border:t},hover:{background:t,border:t}}}else e={},e.background=t.background||"white",e.border=t.border||e.background,exports.isString(t.highlight)?e.highlight={border:t.highlight,background:t.highlight}:(e.highlight={},e.highlight.background=t.highlight&&t.highlight.background||e.background,e.highlight.border=t.highlight&&t.highlight.border||e.border),exports.isString(t.hover)?e.hover={border:t.hover,background:t.hover}:(e.hover={},e.hover.background=t.hover&&t.hover.background||e.background,e.hover.border=t.hover&&t.hover.border||e.border);return e},exports.hexToRGB=function(t){t=t.replace("#","").toUpperCase();var e=exports.GiveDec(t.substring(0,1)),i=exports.GiveDec(t.substring(1,2)),s=exports.GiveDec(t.substring(2,3)),o=exports.GiveDec(t.substring(3,4)),n=exports.GiveDec(t.substring(4,5)),r=exports.GiveDec(t.substring(5,6)),a=16*e+i,h=16*s+o,i=16*n+r;return{r:a,g:h,b:i}},exports.RGBToHex=function(t,e,i){var s=exports.GiveHex(Math.floor(t/16)),o=exports.GiveHex(t%16),n=exports.GiveHex(Math.floor(e/16)),r=exports.GiveHex(e%16),a=exports.GiveHex(Math.floor(i/16)),h=exports.GiveHex(i%16),d=s+o+n+r+a+h;return"#"+d},exports.RGBToHSV=function(t,e,i){t/=255,e/=255,i/=255;var s=Math.min(t,Math.min(e,i)),o=Math.max(t,Math.max(e,i));if(s==o)return{h:0,s:0,v:s};var n=t==s?e-i:i==s?t-e:i-t,r=t==s?3:i==s?1:5,a=60*(r-n/(o-s))/360,h=(o-s)/o,d=o;return{h:a,s:h,v:d}};var cssUtil={split:function(t){var e={};return t.split(";").forEach(function(t){if(""!=t.trim()){var i=t.split(":"),s=i[0].trim(),o=i[1].trim();e[s]=o}}),e},join:function(t){return Object.keys(t).map(function(e){return e+": "+t[e]}).join("; ")}};exports.addCssText=function(t,e){var i=cssUtil.split(t.style.cssText),s=cssUtil.split(e),o=exports.extend(i,s);t.style.cssText=cssUtil.join(o)},exports.removeCssText=function(t,e){var i=cssUtil.split(t.style.cssText),s=cssUtil.split(e);for(var o in s)s.hasOwnProperty(o)&&delete i[o];t.style.cssText=cssUtil.join(i)},exports.HSVToRGB=function(t,e,i){var s,o,n,r=Math.floor(6*t),a=6*t-r,h=i*(1-e),d=i*(1-a*e),l=i*(1-(1-a)*e);switch(r%6){case 0:s=i,o=l,n=h;break;case 1:s=d,o=i,n=h;break;case 2:s=h,o=i,n=l;break;case 3:s=h,o=d,n=i;break;case 4:s=l,o=h,n=i;break;case 5:s=i,o=h,n=d}return{r:Math.floor(255*s),g:Math.floor(255*o),b:Math.floor(255*n)}},exports.HSVToHex=function(t,e,i){var s=exports.HSVToRGB(t,e,i);return exports.RGBToHex(s.r,s.g,s.b)},exports.hexToHSV=function(t){var e=exports.hexToRGB(t);return exports.RGBToHSV(e.r,e.g,e.b)},exports.isValidHex=function(t){var e=/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t);return e},exports.isValidRGB=function(t){t=t.replace(" ","");var e=/rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)/i.test(t);return e},exports.selectiveBridgeObject=function(t,e){if("object"==typeof e){for(var i=Object.create(e),s=0;s=r&&o>n;){var h=Math.floor((r+a)/2),d=t[h],l=void 0===s?d[i]:d[i][s],c=e(l);if(0==c)return h;-1==c?r=h+1:a=h-1,n++}return-1},exports.binarySearchValue=function(t,e,i,s){for(var o,n,r,a,h=1e4,d=0,l=0,c=t.length-1;c>=l&&h>d;){if(a=Math.floor(.5*(c+l)),o=t[Math.max(0,a-1)][i],n=t[a][i],r=t[Math.min(t.length-1,a+1)][i],n==e)return a;if(e>o&&n>e)return"before"==s?Math.max(0,a-1):a;if(e>n&&r>e)return"before"==s?a:Math.min(t.length-1,a+1);e>n?l=a+1:c=a-1,d++}return-1},exports.easeInOutQuad=function(t,e,i,s){var o=i-e;return t/=s/2,1>t?o/2*t*t+e:(t--,-o/2*(t*(t-2)-1)+e)},exports.easingFunctions={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return t*(2-t)},easeInOutQuad:function(t){return.5>t?2*t*t:-1+(4-2*t)*t},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return--t*t*t+1},easeInOutCubic:function(t){return.5>t?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return 1- --t*t*t*t},easeInOutQuart:function(t){return.5>t?8*t*t*t*t:1-8*--t*t*t*t},easeInQuint:function(t){return t*t*t*t*t},easeOutQuint:function(t){return 1+--t*t*t*t*t},easeInOutQuint:function(t){return.5>t?16*t*t*t*t*t:1+16*--t*t*t*t*t}}},function(t,e){e.prepareElements=function(t){for(var e in t)t.hasOwnProperty(e)&&(t[e].redundant=t[e].used,t[e].used=[])},e.cleanupElements=function(t){for(var e in t)if(t.hasOwnProperty(e)&&t[e].redundant){for(var i=0;i0?(s=e[t].redundant[0],e[t].redundant.shift()):(s=document.createElementNS("http://www.w3.org/2000/svg",t),i.appendChild(s)):(s=document.createElementNS("http://www.w3.org/2000/svg",t),e[t]={used:[],redundant:[]},i.appendChild(s)),e[t].used.push(s),s},e.getDOMElement=function(t,e,i,s){var o;return e.hasOwnProperty(t)?e[t].redundant.length>0?(o=e[t].redundant[0],e[t].redundant.shift()):(o=document.createElement(t),void 0!==s?i.insertBefore(o,s):i.appendChild(o)):(o=document.createElement(t),e[t]={used:[],redundant:[]},void 0!==s?i.insertBefore(o,s):i.appendChild(o)),e[t].used.push(o),o},e.drawPoint=function(t,i,s,o,n){var r;return"circle"==s.options.drawPoints.style?(r=e.getSVGElement("circle",o,n),r.setAttributeNS(null,"cx",t),r.setAttributeNS(null,"cy",i),r.setAttributeNS(null,"r",.5*s.options.drawPoints.size)):(r=e.getSVGElement("rect",o,n),r.setAttributeNS(null,"x",t-.5*s.options.drawPoints.size),r.setAttributeNS(null,"y",i-.5*s.options.drawPoints.size),r.setAttributeNS(null,"width",s.options.drawPoints.size),r.setAttributeNS(null,"height",s.options.drawPoints.size)),void 0!==s.options.drawPoints.styles&&r.setAttributeNS(null,"style",s.group.options.drawPoints.styles),r.setAttributeNS(null,"class",s.className+" point"),r},e.drawBar=function(t,i,s,o,n,r,a){if(0!=o){0>o&&(o*=-1,i-=o);var h=e.getSVGElement("rect",r,a);h.setAttributeNS(null,"x",t-.5*s),h.setAttributeNS(null,"y",i),h.setAttributeNS(null,"width",s),h.setAttributeNS(null,"height",o),h.setAttributeNS(null,"class",n)}}},function(t,e,i){function s(t,e){if(!t||Array.isArray(t)||o.isDataTable(t)||(e=t,t=null),this._options=e||{},this._data={},this._fieldId=this._options.fieldId||"id",this._type={},this._options.type)for(var i in this._options.type)if(this._options.type.hasOwnProperty(i)){var s=this._options.type[i];this._type[i]="Date"==s||"ISODate"==s||"ASPDate"==s?"Date":s}if(this._options.convert)throw new Error('Option "convert" is deprecated. Use "type" instead.');this._subscribers={},t&&this.add(t),this.setOptions(e)}var o=i(1),n=i(5);s.prototype.setOptions=function(t){t&&void 0!==t.queue&&(t.queue===!1?this._queue&&(this._queue.destroy(),delete this._queue):(this._queue||(this._queue=n.extend(this,{replace:["add","update","remove"]})),"object"==typeof t.queue&&this._queue.setOptions(t.queue)))},s.prototype.on=function(t,e){var i=this._subscribers[t];i||(i=[],this._subscribers[t]=i),i.push({callback:e})},s.prototype.subscribe=s.prototype.on,s.prototype.off=function(t,e){var i=this._subscribers[t];i&&(this._subscribers[t]=i.filter(function(t){return t.callback!=e}))},s.prototype.unsubscribe=s.prototype.off,s.prototype._trigger=function(t,e,i){if("*"==t)throw new Error("Cannot trigger event *");var s=[];t in this._subscribers&&(s=s.concat(this._subscribers[t])),"*"in this._subscribers&&(s=s.concat(this._subscribers["*"]));for(var o=0;or;r++)i=n._addItem(t[r]),s.push(i);else if(o.isDataTable(t))for(var h=this._getColumnNames(t),d=0,l=t.getNumberOfRows();l>d;d++){for(var c={},p=0,u=h.length;u>p;p++){var m=h[p];c[m]=t.getValue(d,p)}i=n._addItem(c),s.push(i)}else{if(!(t instanceof Object))throw new Error("Unknown dataType");i=n._addItem(t),s.push(i)}return s.length&&this._trigger("add",{items:s},e),s},s.prototype.update=function(t,e){var i=[],s=[],n=[],r=this,a=r._fieldId,h=function(t){var e=t[a];r._data[e]?(e=r._updateItem(t),s.push(e),n.push(t)):(e=r._addItem(t),i.push(e))};if(Array.isArray(t))for(var d=0,l=t.length;l>d;d++)h(t[d]);else if(o.isDataTable(t))for(var c=this._getColumnNames(t),p=0,u=t.getNumberOfRows();u>p;p++){for(var m={},f=0,g=c.length;g>f;f++){var v=c[f];m[v]=t.getValue(p,f)}h(m)}else{if(!(t instanceof Object))throw new Error("Unknown dataType");h(t)}return i.length&&this._trigger("add",{items:i},e),s.length&&this._trigger("update",{items:s,data:n},e),i.concat(s)},s.prototype.get=function(){var t,e,i,s,n=this,r=o.getType(arguments[0]);"String"==r||"Number"==r?(t=arguments[0],i=arguments[1],s=arguments[2]):"Array"==r?(e=arguments[0],i=arguments[1],s=arguments[2]):(i=arguments[0],s=arguments[1]);var a;if(i&&i.returnType){var h=["DataTable","Array","Object"];if(a=-1==h.indexOf(i.returnType)?"Array":i.returnType,s&&a!=o.getType(s))throw new Error('Type of parameter "data" ('+o.getType(s)+") does not correspond with specified options.type ("+i.type+")");if("DataTable"==a&&!o.isDataTable(s))throw new Error('Parameter "data" must be a DataTable when options.type is "DataTable"')}else a=s&&"DataTable"==o.getType(s)?"DataTable":"Array";var d,l,c,p,u=i&&i.type||this._options.type,m=i&&i.filter,f=[];if(void 0!=t)d=n._getItem(t,u),m&&!m(d)&&(d=null);else if(void 0!=e)for(c=0,p=e.length;p>c;c++)d=n._getItem(e[c],u),(!m||m(d))&&f.push(d);else for(l in this._data)this._data.hasOwnProperty(l)&&(d=n._getItem(l,u),(!m||m(d))&&f.push(d));if(i&&i.order&&void 0==t&&this._sort(f,i.order),i&&i.fields){var g=i.fields;if(void 0!=t)d=this._filterFields(d,g);else for(c=0,p=f.length;p>c;c++)f[c]=this._filterFields(f[c],g)}if("DataTable"==a){var v=this._getColumnNames(s);if(void 0!=t)n._appendRow(s,v,d);else for(c=0;cc;c++)s.push(f[c]);return s}return f},s.prototype.getIds=function(t){var e,i,s,o,n,r=this._data,a=t&&t.filter,h=t&&t.order,d=t&&t.type||this._options.type,l=[];if(a)if(h){n=[];for(s in r)r.hasOwnProperty(s)&&(o=this._getItem(s,d),a(o)&&n.push(o));for(this._sort(n,h),e=0,i=n.length;i>e;e++)l[e]=n[e][this._fieldId]}else for(s in r)r.hasOwnProperty(s)&&(o=this._getItem(s,d),a(o)&&l.push(o[this._fieldId]));else if(h){n=[];for(s in r)r.hasOwnProperty(s)&&n.push(r[s]);for(this._sort(n,h),e=0,i=n.length;i>e;e++)l[e]=n[e][this._fieldId]}else for(s in r)r.hasOwnProperty(s)&&(o=r[s],l.push(o[this._fieldId]));return l},s.prototype.getDataSet=function(){return this},s.prototype.forEach=function(t,e){var i,s,o=e&&e.filter,n=e&&e.type||this._options.type,r=this._data;if(e&&e.order)for(var a=this.get(e),h=0,d=a.length;d>h;h++)i=a[h],s=i[this._fieldId],t(i,s);else for(s in r)r.hasOwnProperty(s)&&(i=this._getItem(s,n),(!o||o(i))&&t(i,s))},s.prototype.map=function(t,e){var i,s=e&&e.filter,o=e&&e.type||this._options.type,n=[],r=this._data;for(var a in r)r.hasOwnProperty(a)&&(i=this._getItem(a,o),(!s||s(i))&&n.push(t(i,a)));return e&&e.order&&this._sort(n,e.order),n},s.prototype._filterFields=function(t,e){var i={};for(var s in t)t.hasOwnProperty(s)&&-1!=e.indexOf(s)&&(i[s]=t[s]);return i},s.prototype._sort=function(t,e){if(o.isString(e)){var i=e;t.sort(function(t,e){var s=t[i],o=e[i];return s>o?1:o>s?-1:0})}else{if("function"!=typeof e)throw new TypeError("Order must be a function or a string");t.sort(e)}},s.prototype.remove=function(t,e){var i,s,o,n=[];if(Array.isArray(t))for(i=0,s=t.length;s>i;i++)o=this._remove(t[i]),null!=o&&n.push(o);else o=this._remove(t),null!=o&&n.push(o);return n.length&&this._trigger("remove",{items:n},e),n},s.prototype._remove=function(t){if(o.isNumber(t)||o.isString(t)){if(this._data[t])return delete this._data[t],t}else if(t instanceof Object){var e=t[this._fieldId];if(e&&this._data[e])return delete this._data[e],e}return null},s.prototype.clear=function(t){var e=Object.keys(this._data);return this._data={},this._trigger("remove",{items:e},t),e},s.prototype.max=function(t){var e=this._data,i=null,s=null;for(var o in e)if(e.hasOwnProperty(o)){var n=e[o],r=n[t];null!=r&&(!i||r>s)&&(i=n,s=r)}return i},s.prototype.min=function(t){var e=this._data,i=null,s=null;for(var o in e)if(e.hasOwnProperty(o)){var n=e[o],r=n[t];null!=r&&(!i||s>r)&&(i=n,s=r)}return i},s.prototype.distinct=function(t){var e,i=this._data,s=[],n=this._options.type&&this._options.type[t]||null,r=0;for(var a in i)if(i.hasOwnProperty(a)){var h=i[a],d=h[t],l=!1;for(e=0;r>e;e++)if(s[e]==d){l=!0;break}l||void 0===d||(s[r]=d,r++)}if(n)for(e=0;ei;i++)e[i]=t.getColumnId(i)||t.getColumnLabel(i);return e},s.prototype._appendRow=function(t,e,i){for(var s=t.addRow(),o=0,n=e.length;n>o;o++){var r=e[o];t.setValue(s,o,i[r])}},t.exports=s},function(t,e,i){function s(t,e){this._data=null,this._ids={},this._options=e||{},this._fieldId="id",this._subscribers={};var i=this;this.listener=function(){i._onEvent.apply(i,arguments)},this.setData(t)}var o=i(1),n=i(3);s.prototype.setData=function(t){var e,i,s;if(this._data){this._data.unsubscribe&&this._data.unsubscribe("*",this.listener),e=[];for(var o in this._ids)this._ids.hasOwnProperty(o)&&e.push(o);this._ids={},this._trigger("remove",{items:e})}if(this._data=t,this._data){for(this._fieldId=this._options.fieldId||this._data&&this._data.options&&this._data.options.fieldId||"id",e=this._data.getIds({filter:this._options&&this._options.filter}),i=0,s=e.length;s>i;i++)o=e[i],this._ids[o]=!0;this._trigger("add",{items:e}),this._data.on&&this._data.on("*",this.listener)}},s.prototype.get=function(){var t,e,i,s=this,n=o.getType(arguments[0]);"String"==n||"Number"==n||"Array"==n?(t=arguments[0],e=arguments[1],i=arguments[2]):(e=arguments[0],i=arguments[1]);var r=o.extend({},this._options,e);this._options.filter&&e&&e.filter&&(r.filter=function(t){return s._options.filter(t)&&e.filter(t)});var a=[];return void 0!=t&&a.push(t),a.push(r),a.push(i),this._data&&this._data.get.apply(this._data,a)},s.prototype.getIds=function(t){var e;if(this._data){var i,s=this._options.filter;i=t&&t.filter?s?function(e){return s(e)&&t.filter(e)}:t.filter:s,e=this._data.getIds({filter:i,order:t&&t.order})}else e=[];return e},s.prototype.getDataSet=function(){for(var t=this;t instanceof s;)t=t._data;return t||null},s.prototype._onEvent=function(t,e,i){var s,o,n,r,a=e&&e.items,h=this._data,d=[],l=[],c=[];if(a&&h){switch(t){case"add":for(s=0,o=a.length;o>s;s++)n=a[s],r=this.get(n),r&&(this._ids[n]=!0,d.push(n));break;case"update":for(s=0,o=a.length;o>s;s++)n=a[s],r=this.get(n),r?this._ids[n]?l.push(n):(this._ids[n]=!0,d.push(n)):this._ids[n]&&(delete this._ids[n],c.push(n));break;case"remove":for(s=0,o=a.length;o>s;s++)n=a[s],this._ids[n]&&(delete this._ids[n],c.push(n))}d.length&&this._trigger("add",{items:d},i),l.length&&this._trigger("update",{items:l},i),c.length&&this._trigger("remove",{items:c},i)}},s.prototype.on=n.prototype.on,s.prototype.off=n.prototype.off,s.prototype._trigger=n.prototype._trigger,s.prototype.subscribe=s.prototype.on,s.prototype.unsubscribe=s.prototype.off,t.exports=s},function(t){function e(t){this.delay=null,this.max=1/0,this._queue=[],this._timeout=null,this._extended=null,this.setOptions(t)}e.prototype.setOptions=function(t){t&&"undefined"!=typeof t.delay&&(this.delay=t.delay),t&&"undefined"!=typeof t.max&&(this.max=t.max),this._flushIfNeeded()},e.extend=function(t,i){var s=new e(i);if(void 0!==t.flush)throw new Error("Target object already has a property flush");t.flush=function(){s.flush()};var o=[{name:"flush",original:void 0}];if(i&&i.replace)for(var n=0;nthis.max&&this.flush(),clearTimeout(this._timeout),this.queue.length>0&&"number"==typeof this.delay){var t=this;this._timeout=setTimeout(function(){t.flush()},this.delay)}},e.prototype.flush=function(){for(;this._queue.length>0;){var t=this._queue.shift();t.fn.apply(t.context||t.fn,t.args||[])}},t.exports=e},function(t,e,i){function s(t,e,i){if(!(this instanceof s))throw new SyntaxError("Constructor must be called with the new operator");this.containerElement=t,this.width="400px",this.height="400px",this.margin=10,this.defaultXCenter="55%",this.defaultYCenter="50%",this.xLabel="x",this.yLabel="y",this.zLabel="z";var o=function(t){return t};this.xValueLabel=o,this.yValueLabel=o,this.zValueLabel=o,this.filterLabel="time",this.legendLabel="value",this.style=s.STYLE.DOT,this.showPerspective=!0,this.showGrid=!0,this.keepAspectRatio=!0,this.showShadow=!1,this.showGrayBottom=!1,this.showTooltip=!1,this.verticalRatio=.5,this.animationInterval=1e3,this.animationPreload=!1,this.camera=new p,this.eye=new l(0,0,-1),this.dataTable=null,this.dataPoints=null,this.colX=void 0,this.colY=void 0,this.colZ=void 0,this.colValue=void 0,this.colFilter=void 0,this.xMin=0,this.xStep=void 0,this.xMax=1,this.yMin=0,this.yStep=void 0,this.yMax=1,this.zMin=0,this.zStep=void 0,this.zMax=1,this.valueMin=0,this.valueMax=1,this.xBarWidth=1,this.yBarWidth=1,this.colorAxis="#4D4D4D",this.colorGrid="#D3D3D3",this.colorDot="#7DC1FF",this.colorDotBorder="#3267D2",this.create(),this.setOptions(i),e&&this.setData(e)}function o(t){return"clientX"in t?t.clientX:t.targetTouches[0]&&t.targetTouches[0].clientX||0}function n(t){return"clientY"in t?t.clientY:t.targetTouches[0]&&t.targetTouches[0].clientY||0}var r=i(56),a=i(3),h=i(4),d=i(1),l=i(10),c=i(9),p=i(7),u=i(8),m=i(11),f=i(12);r(s.prototype),s.prototype._setScale=function(){this.scale=new l(1/(this.xMax-this.xMin),1/(this.yMax-this.yMin),1/(this.zMax-this.zMin)),this.keepAspectRatio&&(this.scale.x3&&(this.colFilter=3);else{if(this.style!==s.STYLE.DOTCOLOR&&this.style!==s.STYLE.DOTSIZE&&this.style!==s.STYLE.BARCOLOR&&this.style!==s.STYLE.BARSIZE)throw'Unknown style "'+this.style+'"';this.colX=0,this.colY=1,this.colZ=2,this.colValue=3,t.getNumberOfColumns()>4&&(this.colFilter=4)}},s.prototype.getNumberOfRows=function(t){return t.length},s.prototype.getNumberOfColumns=function(t){var e=0;for(var i in t[0])t[0].hasOwnProperty(i)&&e++;return e},s.prototype.getDistinctValues=function(t,e){for(var i=[],s=0;st[s][e]&&(i.min=t[s][e]),i.maxt;t++){var m=(t-p)/(u-p),g=240*m,v=this._hsv2rgb(g,1,1);c.strokeStyle=v,c.beginPath(),c.moveTo(h,r+t),c.lineTo(a,r+t),c.stroke()}c.strokeStyle=this.colorAxis,c.strokeRect(h,r,i,n)}if(this.style===s.STYLE.DOTSIZE&&(c.strokeStyle=this.colorAxis,c.fillStyle=this.colorDot,c.beginPath(),c.moveTo(h,r),c.lineTo(a,r),c.lineTo(a-i+e,d),c.lineTo(h,d),c.closePath(),c.fill(),c.stroke()),this.style===s.STYLE.DOTCOLOR||this.style===s.STYLE.DOTSIZE){var y=5,b=new f(this.valueMin,this.valueMax,(this.valueMax-this.valueMin)/5,!0);for(b.start(),b.getCurrent()0?this.yMin:this.yMax,o=this._convert3Dto2D(new l(x,r,this.zMin)),Math.cos(2*_)>0?(g.textAlign="center",g.textBaseline="top",o.y+=b):Math.sin(2*_)<0?(g.textAlign="right",g.textBaseline="middle"):(g.textAlign="left",g.textBaseline="middle"),g.fillStyle=this.colorAxis,g.fillText(" "+this.xValueLabel(i.getCurrent())+" ",o.x,o.y),i.next()}for(g.lineWidth=1,s=void 0===this.defaultYStep,i=new f(this.yMin,this.yMax,this.yStep,s),i.start(),i.getCurrent()0?this.xMin:this.xMax,o=this._convert3Dto2D(new l(n,i.getCurrent(),this.zMin)),Math.cos(2*_)<0?(g.textAlign="center",g.textBaseline="top",o.y+=b):Math.sin(2*_)>0?(g.textAlign="right",g.textBaseline="middle"):(g.textAlign="left",g.textBaseline="middle"),g.fillStyle=this.colorAxis,g.fillText(" "+this.yValueLabel(i.getCurrent())+" ",o.x,o.y),i.next();for(g.lineWidth=1,s=void 0===this.defaultZStep,i=new f(this.zMin,this.zMax,this.zStep,s),i.start(),i.getCurrent()0?this.xMin:this.xMax,r=Math.sin(_)<0?this.yMin:this.yMax;!i.end();)t=this._convert3Dto2D(new l(n,r,i.getCurrent())),g.strokeStyle=this.colorAxis,g.beginPath(),g.moveTo(t.x,t.y),g.lineTo(t.x-b,t.y),g.stroke(),g.textAlign="right",g.textBaseline="middle",g.fillStyle=this.colorAxis,g.fillText(this.zValueLabel(i.getCurrent())+" ",t.x-5,t.y),i.next();g.lineWidth=1,t=this._convert3Dto2D(new l(n,r,this.zMin)),e=this._convert3Dto2D(new l(n,r,this.zMax)),g.strokeStyle=this.colorAxis,g.beginPath(),g.moveTo(t.x,t.y),g.lineTo(e.x,e.y),g.stroke(),g.lineWidth=1,p=this._convert3Dto2D(new l(this.xMin,this.yMin,this.zMin)),u=this._convert3Dto2D(new l(this.xMax,this.yMin,this.zMin)),g.strokeStyle=this.colorAxis,g.beginPath(),g.moveTo(p.x,p.y),g.lineTo(u.x,u.y),g.stroke(),p=this._convert3Dto2D(new l(this.xMin,this.yMax,this.zMin)),u=this._convert3Dto2D(new l(this.xMax,this.yMax,this.zMin)),g.strokeStyle=this.colorAxis,g.beginPath(),g.moveTo(p.x,p.y),g.lineTo(u.x,u.y),g.stroke(),g.lineWidth=1,t=this._convert3Dto2D(new l(this.xMin,this.yMin,this.zMin)),e=this._convert3Dto2D(new l(this.xMin,this.yMax,this.zMin)),g.strokeStyle=this.colorAxis,g.beginPath(),g.moveTo(t.x,t.y),g.lineTo(e.x,e.y),g.stroke(),t=this._convert3Dto2D(new l(this.xMax,this.yMin,this.zMin)),e=this._convert3Dto2D(new l(this.xMax,this.yMax,this.zMin)),g.strokeStyle=this.colorAxis,g.beginPath(),g.moveTo(t.x,t.y),g.lineTo(e.x,e.y),g.stroke();var w=this.xLabel;w.length>0&&(c=.1/this.scale.y,n=(this.xMin+this.xMax)/2,r=Math.cos(_)>0?this.yMin-c:this.yMax+c,o=this._convert3Dto2D(new l(n,r,this.zMin)),Math.cos(2*_)>0?(g.textAlign="center",g.textBaseline="top"):Math.sin(2*_)<0?(g.textAlign="right",g.textBaseline="middle"):(g.textAlign="left",g.textBaseline="middle"),g.fillStyle=this.colorAxis,g.fillText(w,o.x,o.y));var S=this.yLabel;S.length>0&&(d=.1/this.scale.x,n=Math.sin(_)>0?this.xMin-d:this.xMax+d,r=(this.yMin+this.yMax)/2,o=this._convert3Dto2D(new l(n,r,this.zMin)),Math.cos(2*_)<0?(g.textAlign="center",g.textBaseline="top"):Math.sin(2*_)>0?(g.textAlign="right",g.textBaseline="middle"):(g.textAlign="left",g.textBaseline="middle"),g.fillStyle=this.colorAxis,g.fillText(S,o.x,o.y));var D=this.zLabel;D.length>0&&(h=30,n=Math.cos(_)>0?this.xMin:this.xMax,r=Math.sin(_)<0?this.yMin:this.yMax,a=(this.zMin+this.zMax)/2,o=this._convert3Dto2D(new l(n,r,a)),g.textAlign="right",g.textBaseline="middle",g.fillStyle=this.colorAxis,g.fillText(D,o.x-h,o.y))},s.prototype._hsv2rgb=function(t,e,i){var s,o,n,r,a,h;switch(r=i*e,a=Math.floor(t/60),h=r*(1-Math.abs(t/60%2-1)),a){case 0:s=r,o=h,n=0;break;case 1:s=h,o=r,n=0;break;case 2:s=0,o=r,n=h;break;case 3:s=0,o=h,n=r;break;case 4:s=h,o=0,n=r;break;case 5:s=r,o=0,n=h;break;default:s=0,o=0,n=0}return"RGB("+parseInt(255*s)+","+parseInt(255*o)+","+parseInt(255*n)+")"},s.prototype._redrawDataGrid=function(){var t,e,i,o,n,r,a,h,d,c,p,u,m,f=this.frame.canvas,g=f.getContext("2d");if(!(void 0===this.dataPoints||this.dataPoints.length<=0)){for(n=0;n0}else r=!0;r?(m=(t.point.z+e.point.z+i.point.z+o.point.z)/4,c=240*(1-(m-this.zMin)*this.scale.z/this.verticalRatio),p=1,this.showShadow?(u=Math.min(1+S.x/D/2,1),a=this._hsv2rgb(c,p,u),h=a):(u=1,a=this._hsv2rgb(c,p,u),h=this.colorAxis)):(a="gray",h=this.colorAxis),d=.5,g.lineWidth=d,g.fillStyle=a,g.strokeStyle=h,g.beginPath(),g.moveTo(t.screen.x,t.screen.y),g.lineTo(e.screen.x,e.screen.y),g.lineTo(o.screen.x,o.screen.y),g.lineTo(i.screen.x,i.screen.y),g.closePath(),g.fill(),g.stroke()}}else for(n=0;np&&(p=0);var u,m,f;this.style===s.STYLE.DOTCOLOR?(u=240*(1-(d.point.value-this.valueMin)*this.scale.value),m=this._hsv2rgb(u,1,1),f=this._hsv2rgb(u,1,.8)):this.style===s.STYLE.DOTSIZE?(m=this.colorDot,f=this.colorDotBorder):(u=240*(1-(d.point.z-this.zMin)*this.scale.z/this.verticalRatio),m=this._hsv2rgb(u,1,1),f=this._hsv2rgb(u,1,.8)),i.lineWidth=1,i.strokeStyle=f,i.fillStyle=m,i.beginPath(),i.arc(d.screen.x,d.screen.y,p,0,2*Math.PI,!0),i.fill(),i.stroke()}}},s.prototype._redrawDataBar=function(){var t,e,i,o,n=this.frame.canvas,r=n.getContext("2d");if(!(void 0===this.dataPoints||this.dataPoints.length<=0)){for(t=0;t0&&(t=this.dataPoints[0],s.lineWidth=1,s.strokeStyle="blue",s.beginPath(),s.moveTo(t.screen.x,t.screen.y)),e=1;e0&&s.stroke()}},s.prototype._onMouseDown=function(t){if(t=t||window.event,this.leftButtonDown&&this._onMouseUp(t),this.leftButtonDown=t.which?1===t.which:1===t.button,this.leftButtonDown||this.touchDown){this.startMouseX=o(t),this.startMouseY=n(t),this.startStart=new Date(this.start),this.startEnd=new Date(this.end),this.startArmRotation=this.camera.getArmRotation(),this.frame.style.cursor="move";var e=this;this.onmousemove=function(t){e._onMouseMove(t)},this.onmouseup=function(t){e._onMouseUp(t)},d.addEventListener(document,"mousemove",e.onmousemove),d.addEventListener(document,"mouseup",e.onmouseup),d.preventDefault(t)}},s.prototype._onMouseMove=function(t){t=t||window.event;var e=parseFloat(o(t))-this.startMouseX,i=parseFloat(n(t))-this.startMouseY,s=this.startArmRotation.horizontal+e/200,r=this.startArmRotation.vertical+i/200,a=4,h=Math.sin(a/360*2*Math.PI);Math.abs(Math.sin(s))0?1:0>t?-1:0}var s=e[0],o=e[1],n=e[2],r=i((o.x-s.x)*(t.y-s.y)-(o.y-s.y)*(t.x-s.x)),a=i((n.x-o.x)*(t.y-o.y)-(n.y-o.y)*(t.x-o.x)),h=i((s.x-n.x)*(t.y-n.y)-(s.y-n.y)*(t.x-n.x));return!(0!=r&&0!=a&&r!=a||0!=a&&0!=h&&a!=h||0!=r&&0!=h&&r!=h)},s.prototype._dataPointFromXY=function(t,e){var i,o=100,n=null,r=null,a=null,h=new c(t,e);if(this.style===s.STYLE.BAR||this.style===s.STYLE.BARCOLOR||this.style===s.STYLE.BARSIZE)for(i=this.dataPoints.length-1;i>=0;i--){n=this.dataPoints[i];var d=n.surfaces;if(d)for(var l=d.length-1;l>=0;l--){var p=d[l],u=p.corners,m=[u[0].screen,u[1].screen,u[2].screen],f=[u[2].screen,u[3].screen,u[0].screen];if(this._insideTriangle(h,m)||this._insideTriangle(h,f))return n}}else for(i=0;ib)&&o>b&&(a=b,r=n)}}return r},s.prototype._showTooltip=function(t){var e,i,s;this.tooltip?(e=this.tooltip.dom.content,i=this.tooltip.dom.line,s=this.tooltip.dom.dot):(e=document.createElement("div"),e.style.position="absolute",e.style.padding="10px",e.style.border="1px solid #4d4d4d",e.style.color="#1a1a1a",e.style.background="rgba(255,255,255,0.7)",e.style.borderRadius="2px",e.style.boxShadow="5px 5px 10px rgba(128,128,128,0.5)",i=document.createElement("div"),i.style.position="absolute",i.style.height="40px",i.style.width="0",i.style.borderLeft="1px solid #4d4d4d",s=document.createElement("div"),s.style.position="absolute",s.style.height="0",s.style.width="0",s.style.border="5px solid #4d4d4d",s.style.borderRadius="5px",this.tooltip={dataPoint:null,dom:{content:e,line:i,dot:s}}),this._hideTooltip(),this.tooltip.dataPoint=t,e.innerHTML="function"==typeof this.showTooltip?this.showTooltip(t.point):"
x:"+t.point.x+"
y:"+t.point.y+"
z:"+t.point.z+"
",e.style.left="0",e.style.top="0",this.frame.appendChild(e),this.frame.appendChild(i),this.frame.appendChild(s);var o=e.offsetWidth,n=e.offsetHeight,r=i.offsetHeight,a=s.offsetWidth,h=s.offsetHeight,d=t.screen.x-o/2;d=Math.min(Math.max(d,10),this.frame.clientWidth-10-o),i.style.left=t.screen.x+"px",i.style.top=t.screen.y-r+"px",e.style.left=d+"px",e.style.top=t.screen.y-r-n+"px",s.style.left=t.screen.x-a/2+"px",s.style.top=t.screen.y-h/2+"px"},s.prototype._hideTooltip=function(){if(this.tooltip){this.tooltip.dataPoint=null;for(var t in this.tooltip.dom)if(this.tooltip.dom.hasOwnProperty(t)){var e=this.tooltip.dom[t];e&&e.parentNode&&e.parentNode.removeChild(e)}}},t.exports=s},function(t,e,i){function s(){this.armLocation=new o,this.armRotation={},this.armRotation.horizontal=0,this.armRotation.vertical=0,this.armLength=1.7,this.cameraLocation=new o,this.cameraRotation=new o(.5*Math.PI,0,0),this.calculateCameraOrientation()}var o=i(10);s.prototype.setArmLocation=function(t,e,i){this.armLocation.x=t,this.armLocation.y=e,this.armLocation.z=i,this.calculateCameraOrientation()},s.prototype.setArmRotation=function(t,e){void 0!==t&&(this.armRotation.horizontal=t),void 0!==e&&(this.armRotation.vertical=e,this.armRotation.vertical<0&&(this.armRotation.vertical=0),this.armRotation.vertical>.5*Math.PI&&(this.armRotation.vertical=.5*Math.PI)),(void 0!==t||void 0!==e)&&this.calculateCameraOrientation()},s.prototype.getArmRotation=function(){var t={};return t.horizontal=this.armRotation.horizontal,t.vertical=this.armRotation.vertical,t},s.prototype.setArmLength=function(t){void 0!==t&&(this.armLength=t,this.armLength<.71&&(this.armLength=.71),this.armLength>5&&(this.armLength=5),this.calculateCameraOrientation())},s.prototype.getArmLength=function(){return this.armLength},s.prototype.getCameraLocation=function(){return this.cameraLocation},s.prototype.getCameraRotation=function(){return this.cameraRotation},s.prototype.calculateCameraOrientation=function(){this.cameraLocation.x=this.armLocation.x-this.armLength*Math.sin(this.armRotation.horizontal)*Math.cos(this.armRotation.vertical),this.cameraLocation.y=this.armLocation.y-this.armLength*Math.cos(this.armRotation.horizontal)*Math.cos(this.armRotation.vertical),this.cameraLocation.z=this.armLocation.z+this.armLength*Math.sin(this.armRotation.vertical),this.cameraRotation.x=Math.PI/2-this.armRotation.vertical,this.cameraRotation.y=0,this.cameraRotation.z=-this.armRotation.horizontal},t.exports=s},function(t,e,i){function s(t,e,i){this.data=t,this.column=e,this.graph=i,this.index=void 0,this.value=void 0,this.values=i.getDistinctValues(t.get(),this.column),this.values.sort(function(t,e){return t>e?1:e>t?-1:0}),this.values.length>0&&this.selectValue(0),this.dataPoints=[],this.loaded=!1,this.onLoadCallback=void 0,i.animationPreload?(this.loaded=!1,this.loadInBackground()):this.loaded=!0}var o=i(4);s.prototype.isLoaded=function(){return this.loaded},s.prototype.getLoadedProgress=function(){for(var t=this.values.length,e=0;this.dataPoints[e];)e++;return Math.round(e/t*100)},s.prototype.getLabel=function(){return this.graph.filterLabel},s.prototype.getColumn=function(){return this.column},s.prototype.getSelectedValue=function(){return void 0===this.index?void 0:this.values[this.index]},s.prototype.getValues=function(){return this.values},s.prototype.getValue=function(t){if(t>=this.values.length)throw"Error: index out of range";return this.values[t] -},s.prototype._getDataPoints=function(t){if(void 0===t&&(t=this.index),void 0===t)return[];var e;if(this.dataPoints[t])e=this.dataPoints[t];else{var i={};i.column=this.column,i.value=this.values[t];var s=new o(this.data,{filter:function(t){return t[i.column]==i.value}}).get();e=this.graph._getDataPoints(s),this.dataPoints[t]=e}return e},s.prototype.setOnLoadCallback=function(t){this.onLoadCallback=t},s.prototype.selectValue=function(t){if(t>=this.values.length)throw"Error: index out of range";this.index=t,this.value=this.values[t]},s.prototype.loadInBackground=function(t){void 0===t&&(t=0);var e=this.graph.frame;if(t0&&(t--,this.setIndex(t))},s.prototype.next=function(){var t=this.getIndex();t0?this.setIndex(0):this.index=void 0},s.prototype.setIndex=function(t){if(!(ts&&(s=0),s>this.values.length-1&&(s=this.values.length-1),s},s.prototype.indexToLeft=function(t){var e=parseFloat(this.frame.bar.style.width)-this.frame.slide.clientWidth-10,i=t/(this.values.length-1)*e,s=i+3;return s},s.prototype._onMouseMove=function(t){var e=t.clientX-this.startClientX,i=this.startSlideX+e,s=this.leftToIndex(i);this.setIndex(s),o.preventDefault()},s.prototype._onMouseUp=function(){this.frame.style.cursor="auto",o.removeEventListener(document,"mousemove",this.onmousemove),o.removeEventListener(document,"mouseup",this.onmouseup),o.preventDefault()},t.exports=s},function(t){function e(t,e,i,s){this._start=0,this._end=0,this._step=1,this.prettyStep=!0,this.precision=5,this._current=0,this.setRange(t,e,i,s)}e.prototype.setRange=function(t,e,i,s){this._start=t?t:0,this._end=e?e:0,this.setStep(i,s)},e.prototype.setStep=function(t,i){void 0===t||0>=t||(void 0!==i&&(this.prettyStep=i),this._step=this.prettyStep===!0?e.calculatePrettyStep(t):t)},e.calculatePrettyStep=function(t){var e=function(t){return Math.log(t)/Math.LN10},i=Math.pow(10,Math.round(e(t))),s=2*Math.pow(10,Math.round(e(t/2))),o=5*Math.pow(10,Math.round(e(t/5))),n=i;return Math.abs(s-t)<=Math.abs(n-t)&&(n=s),Math.abs(o-t)<=Math.abs(n-t)&&(n=o),0>=n&&(n=1),n},e.prototype.getCurrent=function(){return parseFloat(this._current.toPrecision(this.precision))},e.prototype.getStep=function(){return this._step},e.prototype.start=function(){this._current=this._start-this._start%this._step},e.prototype.next=function(){this._current+=this._step},e.prototype.end=function(){return this._current>this._end},t.exports=e},function(t,e,i){function s(t,e,i,r){if(!(this instanceof s))throw new SyntaxError("Constructor must be called with the new operator");if(!(Array.isArray(i)||i instanceof n)&&i instanceof Object){var h=r;r=i,i=h}var u=this;this.defaultOptions={start:null,end:null,autoResize:!0,orientation:"bottom",width:null,height:null,maxHeight:null,minHeight:null},this.options=o.deepExtend({},this.defaultOptions),this._create(t),this.components=[],this.body={dom:this.dom,domProps:this.props,emitter:{on:this.on.bind(this),off:this.off.bind(this),emit:this.emit.bind(this)},hiddenDates:[],util:{snap:null,toScreen:u._toScreen.bind(u),toGlobalScreen:u._toGlobalScreen.bind(u),toTime:u._toTime.bind(u),toGlobalTime:u._toGlobalTime.bind(u)}},this.range=new a(this.body),this.components.push(this.range),this.body.range=this.range,this.timeAxis=new d(this.body),this.components.push(this.timeAxis),this.body.util.snap=this.timeAxis.snap.bind(this.timeAxis),this.currentTime=new l(this.body),this.components.push(this.currentTime),this.customTime=new c(this.body),this.components.push(this.customTime),this.itemSet=new p(this.body),this.components.push(this.itemSet),this.itemsData=null,this.groupsData=null,r&&this.setOptions(r),i&&this.setGroups(i),e?this.setItems(e):this.redraw()}var o=(i(56),i(45),i(1)),n=i(3),r=i(4),a=i(17),h=i(46),d=i(30),l=i(21),c=i(22),p=i(27);s.prototype=new h,s.prototype.setItems=function(t){var e,i=null==this.itemsData;if(e=t?t instanceof n||t instanceof r?t:new n(t,{type:{start:"Date",end:"Date"}}):null,this.itemsData=e,this.itemSet&&this.itemSet.setItems(e),i)if(void 0!=this.options.start||void 0!=this.options.end){if(void 0==this.options.start||void 0==this.options.end)var s=this._getDataRange();var o=void 0!=this.options.start?this.options.start:s.start,a=void 0!=this.options.end?this.options.end:s.end;this.setWindow(o,a,{animate:!1})}else this.fit({animate:!1})},s.prototype.setGroups=function(t){var e;e=t?t instanceof n||t instanceof r?t:new n(t):null,this.groupsData=e,this.itemSet.setGroups(e)},s.prototype.setSelection=function(t,e){this.itemSet&&this.itemSet.setSelection(t),e&&e.focus&&this.focus(t,e)},s.prototype.getSelection=function(){return this.itemSet&&this.itemSet.getSelection()||[]},s.prototype.focus=function(t,e){if(this.itemsData&&void 0!=t){var i=Array.isArray(t)?t:[t],s=this.itemsData.getDataSet().get(i,{type:{start:"Date",end:"Date"}}),o=null,n=null;if(s.forEach(function(t){var e=t.start.valueOf(),i="end"in t?t.end.valueOf():t.start.valueOf();(null===o||o>e)&&(o=e),(null===n||i>n)&&(n=i)}),null!==o&&null!==n){var r=(o+n)/2,a=Math.max(this.range.end-this.range.start,1.1*(n-o)),h=e&&void 0!==e.animate?e.animate:!0;this.range.setRange(r-a/2,r+a/2,h)}}},s.prototype.getItemRange=function(){var t=this.itemsData.getDataSet(),e=null,i=null;if(t){var s=t.min("start");e=s?o.convert(s.start,"Date").valueOf():null;var n=t.max("start");n&&(i=o.convert(n.start,"Date").valueOf());var r=t.max("end");r&&(i=null==i?o.convert(r.end,"Date").valueOf():Math.max(i,o.convert(r.end,"Date").valueOf()))}return{min:null!=e?new Date(e):null,max:null!=i?new Date(i):null}},t.exports=s},function(t,e,i){function s(t,e,i,s){if(!(Array.isArray(i)||i instanceof n)&&i instanceof Object){var r=s;s=i,i=r}var h=this;this.defaultOptions={start:null,end:null,autoResize:!0,orientation:"bottom",width:null,height:null,maxHeight:null,minHeight:null},this.options=o.deepExtend({},this.defaultOptions),this._create(t),this.components=[],this.body={dom:this.dom,domProps:this.props,emitter:{on:this.on.bind(this),off:this.off.bind(this),emit:this.emit.bind(this)},hiddenDates:[],util:{snap:null,toScreen:h._toScreen.bind(h),toGlobalScreen:h._toGlobalScreen.bind(h),toTime:h._toTime.bind(h),toGlobalTime:h._toGlobalTime.bind(h)}},this.range=new a(this.body),this.components.push(this.range),this.body.range=this.range,this.timeAxis=new d(this.body),this.components.push(this.timeAxis),this.body.util.snap=this.timeAxis.snap.bind(this.timeAxis),this.currentTime=new l(this.body),this.components.push(this.currentTime),this.customTime=new c(this.body),this.components.push(this.customTime),this.linegraph=new p(this.body),this.components.push(this.linegraph),this.itemsData=null,this.groupsData=null,s&&this.setOptions(s),i&&this.setGroups(i),e?this.setItems(e):this.redraw()}var o=(i(56),i(45),i(1)),n=i(3),r=i(4),a=i(17),h=i(46),d=i(30),l=i(21),c=i(22),p=i(29);s.prototype=new h,s.prototype.setItems=function(t){var e,i=null==this.itemsData;if(e=t?t instanceof n||t instanceof r?t:new n(t,{type:{start:"Date",end:"Date"}}):null,this.itemsData=e,this.linegraph&&this.linegraph.setItems(e),i)if(void 0!=this.options.start||void 0!=this.options.end){var s=void 0!=this.options.start?this.options.start:null,o=void 0!=this.options.end?this.options.end:null;this.setWindow(s,o,{animate:!1})}else this.fit({animate:!1})},s.prototype.setGroups=function(t){var e;e=t?t instanceof n||t instanceof r?t:new n(t):null,this.groupsData=e,this.linegraph.setGroups(e)},s.prototype.getLegend=function(t,e,i){return void 0===e&&(e=15),void 0===i&&(i=15),void 0!==this.linegraph.groups[t]?this.linegraph.groups[t].getLegend(e,i):"cannot find group:"+t},s.prototype.isGroupVisible=function(t){return void 0!==this.linegraph.groups[t]?this.linegraph.groups[t].visible&&(void 0===this.linegraph.options.groups.visibility[t]||1==this.linegraph.options.groups.visibility[t]):!1},s.prototype.getItemRange=function(){var t=null,e=null;for(var i in this.linegraph.groups)if(this.linegraph.groups.hasOwnProperty(i)&&1==this.linegraph.groups[i].visible)for(var s=0;sr?r:t,e=null==e?r:r>e?r:e}return{min:null!=t?new Date(t):null,max:null!=e?new Date(e):null}},t.exports=s},function(t,e,i){var s=i(44);e.convertHiddenOptions=function(t,e){if(t.hiddenDates=[],e&&1==Array.isArray(e)){for(var i=0;i=4*a){var p=0,u=n.clone();switch(i[h].repeat){case"daily":d.day()!=l.day()&&(p=1),d.dayOfYear(o.dayOfYear()),d.year(o.year()),d.subtract(7,"days"),l.dayOfYear(o.dayOfYear()),l.year(o.year()),l.subtract(7-p,"days"),u.add(1,"weeks");break;case"weekly":var m=l.diff(d,"days"),f=d.day();d.date(o.date()),d.month(o.month()),d.year(o.year()),l=d.clone(),d.day(f),l.day(f),l.add(m,"days"),d.subtract(1,"weeks"),l.subtract(1,"weeks"),u.add(1,"weeks");break;case"monthly":d.month()!=l.month()&&(p=1),d.month(o.month()),d.year(o.year()),d.subtract(1,"months"),l.month(o.month()),l.year(o.year()),l.subtract(1,"months"),l.add(p,"months"),u.add(1,"months");break;case"yearly":d.year()!=l.year()&&(p=1),d.year(o.year()),d.subtract(1,"years"),l.year(o.year()),l.subtract(1,"years"),l.add(p,"years"),u.add(1,"years");break;default:return void console.log("Wrong repeat format, allowed are: daily, weekly, monthly, yearly. Given:",i[h].repeat)}for(;u>d;)switch(t.hiddenDates.push({start:d.valueOf(),end:l.valueOf()}),i[h].repeat){case"daily":d.add(1,"days"),l.add(1,"days");break;case"weekly":d.add(1,"weeks"),l.add(1,"weeks");break;case"monthly":d.add(1,"months"),l.add(1,"months");break;case"yearly":d.add(1,"y"),l.add(1,"y");break;default:return void console.log("Wrong repeat format, allowed are: daily, weekly, monthly, yearly. Given:",i[h].repeat)}t.hiddenDates.push({start:d.valueOf(),end:l.valueOf()})}}e.removeDuplicates(t);var g=e.isHidden(t.range.start,t.hiddenDates),v=e.isHidden(t.range.end,t.hiddenDates),y=t.range.start,b=t.range.end;1==g.hidden&&(y=1==t.range.startToFront?g.startDate-1:g.endDate+1),1==v.hidden&&(b=1==t.range.endToFront?v.startDate-1:v.endDate+1),(1==g.hidden||1==v.hidden)&&t.range._applyRange(y,b)}},e.removeDuplicates=function(t){for(var e=t.hiddenDates,i=[],s=0;s=e[s].start&&e[o].end<=e[s].end?e[o].remove=!0:e[o].start>=e[s].start&&e[o].start<=e[s].end?(e[s].end=e[o].end,e[o].remove=!0):e[o].end>=e[s].start&&e[o].end<=e[s].end&&(e[s].start=e[o].start,e[o].remove=!0));for(var s=0;s=r&&a>o){i=!0;break}}if(1==i&&o=e&&i>r&&(s+=r-n)}return s},e.correctTimeForHidden=function(t,i,o){return o=s(o).toDate().valueOf(),o-=e.getHiddenDurationBefore(t,i,o)},e.getHiddenDurationBefore=function(t,e,i){var o=0;i=s(i).toDate().valueOf();for(var n=0;n=e.start&&a=a&&(o+=a-r)}return o},e.getAccumulatedHiddenDuration=function(t,e,i){for(var s=0,o=0,n=e.start,r=0;r=e.start&&h=i)break;s+=h-a}}return s},e.snapAwayFromHidden=function(t,i,s,o){var n=e.isHidden(i,t);return 1==n.hidden?0>s?1==o?n.startDate-(n.endDate-i)-1:n.startDate-1:1==o?n.endDate+(i-n.startDate)+1:n.endDate+1:i},e.isHidden=function(t,e){for(var i=0;i=s&&o>t)return{hidden:!0,startDate:s,endDate:o}}return{hidden:!1,startDate:s,endDate:o}}},function(t){function e(t,e,i,s,o,n){this.current=0,this.autoScale=!0,this.stepIndex=0,this.step=1,this.scale=1,this.marginStart,this.marginEnd,this.deadSpace=0,this.majorSteps=[1,2,5,10],this.minorSteps=[.25,.5,1,2],this.alignZeros=n,this.setRange(t,e,i,s,o)}e.prototype.setRange=function(t,e,i,s,o){this._start=void 0===o.min?t:o.min,this._end=void 0===o.max?e:o.max,this._start==this._end&&(this._start-=.75,this._end+=1),1==this.autoScale&&this.setMinimumStep(i,s),this.setFirst(o)},e.prototype.setMinimumStep=function(t,e){var i=this._end-this._start,s=1.2*i,o=t*(s/e),n=Math.round(Math.log(s)/Math.LN10),r=-1,a=Math.pow(10,n),h=0;0>n&&(h=n);for(var d=!1,l=h;Math.abs(l)<=Math.abs(n);l++){a=Math.pow(10,l);for(var c=0;c=o){d=!0,r=c;break}}if(1==d)break}this.stepIndex=r,this.scale=a,this.step=a*this.minorSteps[r]},e.prototype.setFirst=function(t){void 0===t&&(t={});var e=void 0===t.min?this._start-2*this.scale*this.minorSteps[this.stepIndex]:t.min,i=void 0===t.max?this._end+this.scale*this.minorSteps[this.stepIndex]:t.max;this.marginEnd=void 0===t.max?this.roundToMinor(i):t.max,this.marginStart=void 0===t.min?this.roundToMinor(e):t.min,1==this.alignZeros&&(this.marginEnd-this.marginStart)%this.step!=0&&(this.marginEnd+=this.marginEnd%this.step),this.deadSpace=this.roundToMinor(i)-i+this.roundToMinor(e)-e,this.marginRange=this.marginEnd-this.marginStart,this.current=this.marginEnd},e.prototype.roundToMinor=function(t){var e=t-t%(this.scale*this.minorSteps[this.stepIndex]);return t%(this.scale*this.minorSteps[this.stepIndex])>.5*this.scale*this.minorSteps[this.stepIndex]?e+this.scale*this.minorSteps[this.stepIndex]:e},e.prototype.hasNext=function(){return this.current>=this.marginStart},e.prototype.next=function(){var t=this.current;this.current-=this.step,this.current==t&&(this.current=this._end)},e.prototype.previous=function(){this.current+=this.step,this.marginEnd+=this.step,this.marginRange=this.marginEnd-this.marginStart},e.prototype.getCurrent=function(t){var e=""+Number(this.current).toPrecision(5);if(void 0===t||isNaN(Number(t))){if(-1!=e.indexOf(",")||-1!=e.indexOf("."))for(var i=e.length-1;i>0;i--){if("0"!=e[i]){if("."==e[i]||","==e[i]){e=e.slice(0,i);break}break}e=e.slice(0,i)}}else{var s="",o=e.indexOf("e");if(-1!=o&&(s=e.slice(o),e=e.slice(0,o)),o=Math.max(e.indexOf(","),e.indexOf(".")),-1===o?(0!==t&&(e+="."),o=e.length+t):0!==t&&(o+=t+1),o>e.length)for(var n=o-e.length;n>0;n--)e+="0";else e=e.slice(0,o);e+=s}return e},e.prototype.snap=function(){},e.prototype.isMajor=function(){return this.current%(this.scale*this.majorSteps[this.stepIndex])==0},t.exports=e},function(t,e,i){function s(t,e){var i=h().hours(0).minutes(0).seconds(0).milliseconds(0);this.start=i.clone().add(-3,"days").valueOf(),this.end=i.clone().add(4,"days").valueOf(),this.body=t,this.deltaDifference=0,this.scaleOffset=0,this.startToFront=!1,this.endToFront=!0,this.defaultOptions={start:null,end:null,direction:"horizontal",moveable:!0,zoomable:!0,min:null,max:null,zoomMin:10,zoomMax:31536e10},this.options=r.extend({},this.defaultOptions),this.props={touch:{}},this.animateTimer=null,this.body.emitter.on("dragstart",this._onDragStart.bind(this)),this.body.emitter.on("drag",this._onDrag.bind(this)),this.body.emitter.on("dragend",this._onDragEnd.bind(this)),this.body.emitter.on("hold",this._onHold.bind(this)),this.body.emitter.on("mousewheel",this._onMouseWheel.bind(this)),this.body.emitter.on("DOMMouseScroll",this._onMouseWheel.bind(this)),this.body.emitter.on("touch",this._onTouch.bind(this)),this.body.emitter.on("pinch",this._onPinch.bind(this)),this.setOptions(e)}function o(t){if("horizontal"!=t&&"vertical"!=t)throw new TypeError('Unknown direction "'+t+'". Choose "horizontal" or "vertical".')}function n(t,e){return{x:t.pageX-r.getAbsoluteLeft(e),y:t.pageY-r.getAbsoluteTop(e)}}var r=i(1),a=i(47),h=i(44),d=i(20),l=i(15);s.prototype=new d,s.prototype.setOptions=function(t){if(t){var e=["direction","min","max","zoomMin","zoomMax","moveable","zoomable","activate","hiddenDates"];r.selectiveExtend(e,this.options,t),("start"in t||"end"in t)&&this.setRange(t.start,t.end)}},s.prototype.setRange=function(t,e,i){var s=void 0!=t?r.convert(t,"Date").valueOf():null,o=void 0!=e?r.convert(e,"Date").valueOf():null;if(this._cancelAnimation(),i){var n=this,a=this.start,h=this.end,d="number"==typeof i?i:500,c=(new Date).valueOf(),p=!1,u=function(){if(!n.props.touch.dragging){var t=(new Date).valueOf(),e=t-c,i=e>d,f=i||null===s?s:r.easeInOutQuad(e,a,s,d),g=i||null===o?o:r.easeInOutQuad(e,h,o,d);m=n._applyRange(f,g),l.updateHiddenDates(n.body,n.options.hiddenDates),p=p||m,m&&n.body.emitter.emit("rangechange",{start:new Date(n.start),end:new Date(n.end)}),i?p&&n.body.emitter.emit("rangechanged",{start:new Date(n.start),end:new Date(n.end)}):n.animateTimer=setTimeout(u,20)}};return u()}var m=this._applyRange(s,o);if(l.updateHiddenDates(this.body,this.options.hiddenDates),m){var f={start:new Date(this.start),end:new Date(this.end)};this.body.emitter.emit("rangechange",f),this.body.emitter.emit("rangechanged",f)}},s.prototype._cancelAnimation=function(){this.animateTimer&&(clearTimeout(this.animateTimer),this.animateTimer=null)},s.prototype._applyRange=function(t,e){var i,s=null!=t?r.convert(t,"Date").valueOf():this.start,o=null!=e?r.convert(e,"Date").valueOf():this.end,n=null!=this.options.max?r.convert(this.options.max,"Date").valueOf():null,a=null!=this.options.min?r.convert(this.options.min,"Date").valueOf():null;if(isNaN(s)||null===s)throw new Error('Invalid start "'+t+'"');if(isNaN(o)||null===o)throw new Error('Invalid end "'+e+'"');if(s>o&&(o=s),null!==a&&a>s&&(i=a-s,s+=i,o+=i,null!=n&&o>n&&(o=n)),null!==n&&o>n&&(i=o-n,s-=i,o-=i,null!=a&&a>s&&(s=a)),null!==this.options.zoomMin){var h=parseFloat(this.options.zoomMin);0>h&&(h=0),h>o-s&&(this.end-this.start===h?(s=this.start,o=this.end):(i=h-(o-s),s-=i/2,o+=i/2))}if(null!==this.options.zoomMax){var d=parseFloat(this.options.zoomMax);0>d&&(d=0),o-s>d&&(this.end-this.start===d?(s=this.start,o=this.end):(i=o-s-d,s+=i/2,o-=i/2))}var l=this.start!=s||this.end!=o;return s>=this.start&&s<=this.end||o>=this.start&&o<=this.end||this.start>=s&&this.start<=o||this.end>=s&&this.end<=o||this.body.emitter.emit("checkRangedItems"),this.start=s,this.end=o,l},s.prototype.getRange=function(){return{start:this.start,end:this.end}},s.prototype.conversion=function(t,e){return s.conversion(this.start,this.end,t,e)},s.conversion=function(t,e,i,s){return void 0===s&&(s=0),0!=i&&e-t!=0?{offset:t,scale:i/(e-t-s)}:{offset:0,scale:1}},s.prototype._onDragStart=function(){this.deltaDifference=0,this.previousDelta=0,this.options.moveable&&this.props.touch.allowDragging&&(this.props.touch.start=this.start,this.props.touch.end=this.end,this.props.touch.dragging=!0,this.body.dom.root&&(this.body.dom.root.style.cursor="move"))},s.prototype._onDrag=function(t){if(this.options.moveable&&this.props.touch.allowDragging){var e=this.options.direction;o(e);var i="horizontal"==e?t.gesture.deltaX:t.gesture.deltaY;i-=this.deltaDifference;var s=this.props.touch.end-this.props.touch.start,n=l.getHiddenDurationBetween(this.body.hiddenDates,this.start,this.end);s-=n;var r="horizontal"==e?this.body.domProps.center.width:this.body.domProps.center.height,a=-i/r*s,h=this.props.touch.start+a,d=this.props.touch.end+a,c=l.snapAwayFromHidden(this.body.hiddenDates,h,this.previousDelta-i,!0),p=l.snapAwayFromHidden(this.body.hiddenDates,d,this.previousDelta-i,!0);if(c!=h||p!=d)return this.deltaDifference+=i,this.props.touch.start=c,this.props.touch.end=p,void this._onDrag(t);this.previousDelta=i,this._applyRange(h,d),this.body.emitter.emit("rangechange",{start:new Date(this.start),end:new Date(this.end)})}},s.prototype._onDragEnd=function(){this.options.moveable&&this.props.touch.allowDragging&&(this.props.touch.dragging=!1,this.body.dom.root&&(this.body.dom.root.style.cursor="auto"),this.body.emitter.emit("rangechanged",{start:new Date(this.start),end:new Date(this.end)}))},s.prototype._onMouseWheel=function(t){if(this.options.zoomable&&this.options.moveable){var e=0;if(t.wheelDelta?e=t.wheelDelta/120:t.detail&&(e=-t.detail/3),e){var i;i=0>e?1-e/5:1/(1+e/5);var s=a.fakeGesture(this,t),o=n(s.center,this.body.dom.center),r=this._pointerToDate(o);this.zoom(i,r,e)}t.preventDefault()}},s.prototype._onTouch=function(){this.props.touch.start=this.start,this.props.touch.end=this.end,this.props.touch.allowDragging=!0,this.props.touch.center=null,this.scaleOffset=0,this.deltaDifference=0},s.prototype._onHold=function(){this.props.touch.allowDragging=!1},s.prototype._onPinch=function(t){if(this.options.zoomable&&this.options.moveable&&(this.props.touch.allowDragging=!1,t.gesture.touches.length>1)){this.props.touch.center||(this.props.touch.center=n(t.gesture.center,this.body.dom.center));var e=1/(t.gesture.scale+this.scaleOffset),i=this._pointerToDate(this.props.touch.center),s=l.getHiddenDurationBetween(this.body.hiddenDates,this.start,this.end),o=l.getHiddenDurationBefore(this.body.hiddenDates,this,i),r=s-o,a=i-o+(this.props.touch.start-(i-o))*e,h=i+r+(this.props.touch.end-(i+r))*e;this.startToFront=1-e>0?!1:!0,this.endToFront=e-1>0?!1:!0;var d=l.snapAwayFromHidden(this.body.hiddenDates,a,1-e,!0),c=l.snapAwayFromHidden(this.body.hiddenDates,h,e-1,!0);(d!=a||c!=h)&&(this.props.touch.start=d,this.props.touch.end=c,this.scaleOffset=1-t.gesture.scale,a=d,h=c),this.setRange(a,h),this.startToFront=!1,this.endToFront=!0}},s.prototype._pointerToDate=function(t){var e,i=this.options.direction;if(o(i),"horizontal"==i)return this.body.util.toTime(t.x).valueOf();var s=this.body.domProps.center.height;return e=this.conversion(s),t.y/e.scale+e.offset},s.prototype.zoom=function(t,e,i){null==e&&(e=(this.start+this.end)/2);var s=l.getHiddenDurationBetween(this.body.hiddenDates,this.start,this.end),o=l.getHiddenDurationBefore(this.body.hiddenDates,this,e),n=s-o,r=e-o+(this.start-(e-o))*t,a=e+n+(this.end-(e+n))*t;this.startToFront=i>0?!1:!0,this.endToFront=-i>0?!1:!0;var h=l.snapAwayFromHidden(this.body.hiddenDates,r,i,!0),d=l.snapAwayFromHidden(this.body.hiddenDates,a,-i,!0);(h!=r||d!=a)&&(r=h,a=d),this.setRange(r,a),this.startToFront=!1,this.endToFront=!0},s.prototype.move=function(t){var e=this.end-this.start,i=this.start+e*t,s=this.end+e*t;this.start=i,this.end=s},s.prototype.moveTo=function(t){var e=(this.start+this.end)/2,i=e-t,s=this.start-i,o=this.end-i;this.setRange(s,o)},t.exports=s},function(t,e){var i=.001;e.orderByStart=function(t){t.sort(function(t,e){return t.data.start-e.data.start})},e.orderByEnd=function(t){t.sort(function(t,e){var i="end"in t.data?t.data.end:t.data.start,s="end"in e.data?e.data.end:e.data.start;return i-s})},e.stack=function(t,i,s){var o,n;if(s)for(o=0,n=t.length;n>o;o++)t[o].top=null;for(o=0,n=t.length;n>o;o++){var r=t[o];if(r.stack&&null===r.top){r.top=i.axis;do{for(var a=null,h=0,d=t.length;d>h;h++){var l=t[h];if(null!==l.top&&l!==r&&l.stack&&e.collision(r,l,i.item)){a=l;break}}null!=a&&(r.top=a.top+a.height+i.item.vertical)}while(a)}}},e.nostack=function(t,e,i){var s,o,n;for(s=0,o=t.length;o>s;s++)if(void 0!==t[s].data.subgroup){n=e.axis;for(var r in i)i.hasOwnProperty(r)&&1==i[r].visible&&i[r].indexe.left&&t.top-s.vertical+ie.top}},function(t,e,i){function s(t,e,i,o){this.current=new Date,this._start=new Date,this._end=new Date,this.autoScale=!0,this.scale=s.SCALE.DAY,this.step=1,this.setRange(t,e,i),this.switchedDay=!1,this.switchedMonth=!1,this.switchedYear=!1,this.hiddenDates=o,void 0===o&&(this.hiddenDates=[])}var o=i(44),n=i(15);s.SCALE={MILLISECOND:1,SECOND:2,MINUTE:3,HOUR:4,DAY:5,WEEKDAY:6,MONTH:7,YEAR:8},s.prototype.setRange=function(t,e,i){if(!(t instanceof Date&&e instanceof Date))throw"No legal start or end date in method setRange";this._start=void 0!=t?new Date(t.valueOf()):new Date,this._end=void 0!=e?new Date(e.valueOf()):new Date,this.autoScale&&this.setMinimumStep(i)},s.prototype.first=function(){this.current=new Date(this._start.valueOf()),this.roundToMinor()},s.prototype.roundToMinor=function(){switch(this.scale){case s.SCALE.YEAR:this.current.setFullYear(this.step*Math.floor(this.current.getFullYear()/this.step)),this.current.setMonth(0);case s.SCALE.MONTH:this.current.setDate(1);case s.SCALE.DAY:case s.SCALE.WEEKDAY:this.current.setHours(0);case s.SCALE.HOUR:this.current.setMinutes(0);case s.SCALE.MINUTE:this.current.setSeconds(0);case s.SCALE.SECOND:this.current.setMilliseconds(0)}if(1!=this.step)switch(this.scale){case s.SCALE.MILLISECOND:this.current.setMilliseconds(this.current.getMilliseconds()-this.current.getMilliseconds()%this.step);break;case s.SCALE.SECOND:this.current.setSeconds(this.current.getSeconds()-this.current.getSeconds()%this.step);break;case s.SCALE.MINUTE:this.current.setMinutes(this.current.getMinutes()-this.current.getMinutes()%this.step);break;case s.SCALE.HOUR:this.current.setHours(this.current.getHours()-this.current.getHours()%this.step);break;case s.SCALE.WEEKDAY:case s.SCALE.DAY:this.current.setDate(this.current.getDate()-1-(this.current.getDate()-1)%this.step+1); +},s.prototype._getDataPoints=function(t){if(void 0===t&&(t=this.index),void 0===t)return[];var e;if(this.dataPoints[t])e=this.dataPoints[t];else{var i={};i.column=this.column,i.value=this.values[t];var s=new o(this.data,{filter:function(t){return t[i.column]==i.value}}).get();e=this.graph._getDataPoints(s),this.dataPoints[t]=e}return e},s.prototype.setOnLoadCallback=function(t){this.onLoadCallback=t},s.prototype.selectValue=function(t){if(t>=this.values.length)throw"Error: index out of range";this.index=t,this.value=this.values[t]},s.prototype.loadInBackground=function(t){void 0===t&&(t=0);var e=this.graph.frame;if(t0&&(t--,this.setIndex(t))},s.prototype.next=function(){var t=this.getIndex();t0?this.setIndex(0):this.index=void 0},s.prototype.setIndex=function(t){if(!(ts&&(s=0),s>this.values.length-1&&(s=this.values.length-1),s},s.prototype.indexToLeft=function(t){var e=parseFloat(this.frame.bar.style.width)-this.frame.slide.clientWidth-10,i=t/(this.values.length-1)*e,s=i+3;return s},s.prototype._onMouseMove=function(t){var e=t.clientX-this.startClientX,i=this.startSlideX+e,s=this.leftToIndex(i);this.setIndex(s),o.preventDefault()},s.prototype._onMouseUp=function(){this.frame.style.cursor="auto",o.removeEventListener(document,"mousemove",this.onmousemove),o.removeEventListener(document,"mouseup",this.onmouseup),o.preventDefault()},t.exports=s},function(t){function e(t,e,i,s){this._start=0,this._end=0,this._step=1,this.prettyStep=!0,this.precision=5,this._current=0,this.setRange(t,e,i,s)}e.prototype.setRange=function(t,e,i,s){this._start=t?t:0,this._end=e?e:0,this.setStep(i,s)},e.prototype.setStep=function(t,i){void 0===t||0>=t||(void 0!==i&&(this.prettyStep=i),this._step=this.prettyStep===!0?e.calculatePrettyStep(t):t)},e.calculatePrettyStep=function(t){var e=function(t){return Math.log(t)/Math.LN10},i=Math.pow(10,Math.round(e(t))),s=2*Math.pow(10,Math.round(e(t/2))),o=5*Math.pow(10,Math.round(e(t/5))),n=i;return Math.abs(s-t)<=Math.abs(n-t)&&(n=s),Math.abs(o-t)<=Math.abs(n-t)&&(n=o),0>=n&&(n=1),n},e.prototype.getCurrent=function(){return parseFloat(this._current.toPrecision(this.precision))},e.prototype.getStep=function(){return this._step},e.prototype.start=function(){this._current=this._start-this._start%this._step},e.prototype.next=function(){this._current+=this._step},e.prototype.end=function(){return this._current>this._end},t.exports=e},function(t,e,i){function s(t,e,i,r){if(!(this instanceof s))throw new SyntaxError("Constructor must be called with the new operator");if(!(Array.isArray(i)||i instanceof n)&&i instanceof Object){var h=r;r=i,i=h}var u=this;this.defaultOptions={start:null,end:null,autoResize:!0,orientation:"bottom",width:null,height:null,maxHeight:null,minHeight:null},this.options=o.deepExtend({},this.defaultOptions),this._create(t),this.components=[],this.body={dom:this.dom,domProps:this.props,emitter:{on:this.on.bind(this),off:this.off.bind(this),emit:this.emit.bind(this)},hiddenDates:[],util:{snap:null,toScreen:u._toScreen.bind(u),toGlobalScreen:u._toGlobalScreen.bind(u),toTime:u._toTime.bind(u),toGlobalTime:u._toGlobalTime.bind(u)}},this.range=new a(this.body),this.components.push(this.range),this.body.range=this.range,this.timeAxis=new d(this.body),this.components.push(this.timeAxis),this.body.util.snap=this.timeAxis.snap.bind(this.timeAxis),this.currentTime=new l(this.body),this.components.push(this.currentTime),this.customTime=new c(this.body),this.components.push(this.customTime),this.itemSet=new p(this.body),this.components.push(this.itemSet),this.itemsData=null,this.groupsData=null,r&&this.setOptions(r),i&&this.setGroups(i),e?this.setItems(e):this.redraw()}var o=(i(56),i(45),i(1)),n=i(3),r=i(4),a=i(17),h=i(46),d=i(30),l=i(21),c=i(22),p=i(27);s.prototype=new h,s.prototype.setItems=function(t){var e,i=null==this.itemsData;if(e=t?t instanceof n||t instanceof r?t:new n(t,{type:{start:"Date",end:"Date"}}):null,this.itemsData=e,this.itemSet&&this.itemSet.setItems(e),i)if(void 0!=this.options.start||void 0!=this.options.end){if(void 0==this.options.start||void 0==this.options.end)var s=this._getDataRange();var o=void 0!=this.options.start?this.options.start:s.start,a=void 0!=this.options.end?this.options.end:s.end;this.setWindow(o,a,{animate:!1})}else this.fit({animate:!1})},s.prototype.setGroups=function(t){var e;e=t?t instanceof n||t instanceof r?t:new n(t):null,this.groupsData=e,this.itemSet.setGroups(e)},s.prototype.setSelection=function(t,e){this.itemSet&&this.itemSet.setSelection(t),e&&e.focus&&this.focus(t,e)},s.prototype.getSelection=function(){return this.itemSet&&this.itemSet.getSelection()||[]},s.prototype.focus=function(t,e){if(this.itemsData&&void 0!=t){var i=Array.isArray(t)?t:[t],s=this.itemsData.getDataSet().get(i,{type:{start:"Date",end:"Date"}}),o=null,n=null;if(s.forEach(function(t){var e=t.start.valueOf(),i="end"in t?t.end.valueOf():t.start.valueOf();(null===o||o>e)&&(o=e),(null===n||i>n)&&(n=i)}),null!==o&&null!==n){var r=(o+n)/2,a=Math.max(this.range.end-this.range.start,1.1*(n-o)),h=e&&void 0!==e.animate?e.animate:!0;this.range.setRange(r-a/2,r+a/2,h)}}},s.prototype.getItemRange=function(){var t=this.itemsData.getDataSet(),e=null,i=null;if(t){var s=t.min("start");e=s?o.convert(s.start,"Date").valueOf():null;var n=t.max("start");n&&(i=o.convert(n.start,"Date").valueOf());var r=t.max("end");r&&(i=null==i?o.convert(r.end,"Date").valueOf():Math.max(i,o.convert(r.end,"Date").valueOf()))}return{min:null!=e?new Date(e):null,max:null!=i?new Date(i):null}},t.exports=s},function(t,e,i){function s(t,e,i,s){if(!(Array.isArray(i)||i instanceof n)&&i instanceof Object){var r=s;s=i,i=r}var h=this;this.defaultOptions={start:null,end:null,autoResize:!0,orientation:"bottom",width:null,height:null,maxHeight:null,minHeight:null},this.options=o.deepExtend({},this.defaultOptions),this._create(t),this.components=[],this.body={dom:this.dom,domProps:this.props,emitter:{on:this.on.bind(this),off:this.off.bind(this),emit:this.emit.bind(this)},hiddenDates:[],util:{snap:null,toScreen:h._toScreen.bind(h),toGlobalScreen:h._toGlobalScreen.bind(h),toTime:h._toTime.bind(h),toGlobalTime:h._toGlobalTime.bind(h)}},this.range=new a(this.body),this.components.push(this.range),this.body.range=this.range,this.timeAxis=new d(this.body),this.components.push(this.timeAxis),this.body.util.snap=this.timeAxis.snap.bind(this.timeAxis),this.currentTime=new l(this.body),this.components.push(this.currentTime),this.customTime=new c(this.body),this.components.push(this.customTime),this.linegraph=new p(this.body),this.components.push(this.linegraph),this.itemsData=null,this.groupsData=null,s&&this.setOptions(s),i&&this.setGroups(i),e?this.setItems(e):this.redraw()}var o=(i(56),i(45),i(1)),n=i(3),r=i(4),a=i(17),h=i(46),d=i(30),l=i(21),c=i(22),p=i(29);s.prototype=new h,s.prototype.setItems=function(t){var e,i=null==this.itemsData;if(e=t?t instanceof n||t instanceof r?t:new n(t,{type:{start:"Date",end:"Date"}}):null,this.itemsData=e,this.linegraph&&this.linegraph.setItems(e),i)if(void 0!=this.options.start||void 0!=this.options.end){var s=void 0!=this.options.start?this.options.start:null,o=void 0!=this.options.end?this.options.end:null;this.setWindow(s,o,{animate:!1})}else this.fit({animate:!1})},s.prototype.setGroups=function(t){var e;e=t?t instanceof n||t instanceof r?t:new n(t):null,this.groupsData=e,this.linegraph.setGroups(e)},s.prototype.getLegend=function(t,e,i){return void 0===e&&(e=15),void 0===i&&(i=15),void 0!==this.linegraph.groups[t]?this.linegraph.groups[t].getLegend(e,i):"cannot find group:"+t},s.prototype.isGroupVisible=function(t){return void 0!==this.linegraph.groups[t]?this.linegraph.groups[t].visible&&(void 0===this.linegraph.options.groups.visibility[t]||1==this.linegraph.options.groups.visibility[t]):!1},s.prototype.getItemRange=function(){var t=null,e=null;for(var i in this.linegraph.groups)if(this.linegraph.groups.hasOwnProperty(i)&&1==this.linegraph.groups[i].visible)for(var s=0;sr?r:t,e=null==e?r:r>e?r:e}return{min:null!=t?new Date(t):null,max:null!=e?new Date(e):null}},t.exports=s},function(t,e,i){var s=i(44);e.convertHiddenOptions=function(t,e){if(t.hiddenDates=[],e&&1==Array.isArray(e)){for(var i=0;i=4*a){var p=0,u=n.clone();switch(i[h].repeat){case"daily":d.day()!=l.day()&&(p=1),d.dayOfYear(o.dayOfYear()),d.year(o.year()),d.subtract(7,"days"),l.dayOfYear(o.dayOfYear()),l.year(o.year()),l.subtract(7-p,"days"),u.add(1,"weeks");break;case"weekly":var m=l.diff(d,"days"),f=d.day();d.date(o.date()),d.month(o.month()),d.year(o.year()),l=d.clone(),d.day(f),l.day(f),l.add(m,"days"),d.subtract(1,"weeks"),l.subtract(1,"weeks"),u.add(1,"weeks");break;case"monthly":d.month()!=l.month()&&(p=1),d.month(o.month()),d.year(o.year()),d.subtract(1,"months"),l.month(o.month()),l.year(o.year()),l.subtract(1,"months"),l.add(p,"months"),u.add(1,"months");break;case"yearly":d.year()!=l.year()&&(p=1),d.year(o.year()),d.subtract(1,"years"),l.year(o.year()),l.subtract(1,"years"),l.add(p,"years"),u.add(1,"years");break;default:return void console.log("Wrong repeat format, allowed are: daily, weekly, monthly, yearly. Given:",i[h].repeat)}for(;u>d;)switch(t.hiddenDates.push({start:d.valueOf(),end:l.valueOf()}),i[h].repeat){case"daily":d.add(1,"days"),l.add(1,"days");break;case"weekly":d.add(1,"weeks"),l.add(1,"weeks");break;case"monthly":d.add(1,"months"),l.add(1,"months");break;case"yearly":d.add(1,"y"),l.add(1,"y");break;default:return void console.log("Wrong repeat format, allowed are: daily, weekly, monthly, yearly. Given:",i[h].repeat)}t.hiddenDates.push({start:d.valueOf(),end:l.valueOf()})}}e.removeDuplicates(t);var g=e.isHidden(t.range.start,t.hiddenDates),v=e.isHidden(t.range.end,t.hiddenDates),y=t.range.start,b=t.range.end;1==g.hidden&&(y=1==t.range.startToFront?g.startDate-1:g.endDate+1),1==v.hidden&&(b=1==t.range.endToFront?v.startDate-1:v.endDate+1),(1==g.hidden||1==v.hidden)&&t.range._applyRange(y,b)}},e.removeDuplicates=function(t){for(var e=t.hiddenDates,i=[],s=0;s=e[s].start&&e[o].end<=e[s].end?e[o].remove=!0:e[o].start>=e[s].start&&e[o].start<=e[s].end?(e[s].end=e[o].end,e[o].remove=!0):e[o].end>=e[s].start&&e[o].end<=e[s].end&&(e[s].start=e[o].start,e[o].remove=!0));for(var s=0;s=r&&a>o){i=!0;break}}if(1==i&&o=e&&i>r&&(s+=r-n)}return s},e.correctTimeForHidden=function(t,i,o){return o=s(o).toDate().valueOf(),o-=e.getHiddenDurationBefore(t,i,o)},e.getHiddenDurationBefore=function(t,e,i){var o=0;i=s(i).toDate().valueOf();for(var n=0;n=e.start&&a=a&&(o+=a-r)}return o},e.getAccumulatedHiddenDuration=function(t,e,i){for(var s=0,o=0,n=e.start,r=0;r=e.start&&h=i)break;s+=h-a}}return s},e.snapAwayFromHidden=function(t,i,s,o){var n=e.isHidden(i,t);return 1==n.hidden?0>s?1==o?n.startDate-(n.endDate-i)-1:n.startDate-1:1==o?n.endDate+(i-n.startDate)+1:n.endDate+1:i},e.isHidden=function(t,e){for(var i=0;i=s&&o>t)return{hidden:!0,startDate:s,endDate:o}}return{hidden:!1,startDate:s,endDate:o}}},function(t){function e(t,e,i,s,o,n){this.current=0,this.autoScale=!0,this.stepIndex=0,this.step=1,this.scale=1,this.marginStart,this.marginEnd,this.deadSpace=0,this.majorSteps=[1,2,5,10],this.minorSteps=[.25,.5,1,2],this.alignZeros=n,this.setRange(t,e,i,s,o)}e.prototype.setRange=function(t,e,i,s,o){this._start=void 0===o.min?t:o.min,this._end=void 0===o.max?e:o.max,this._start==this._end&&(this._start-=.75,this._end+=1),1==this.autoScale&&this.setMinimumStep(i,s),this.setFirst(o)},e.prototype.setMinimumStep=function(t,e){var i=this._end-this._start,s=1.2*i,o=t*(s/e),n=Math.round(Math.log(s)/Math.LN10),r=-1,a=Math.pow(10,n),h=0;0>n&&(h=n);for(var d=!1,l=h;Math.abs(l)<=Math.abs(n);l++){a=Math.pow(10,l);for(var c=0;c=o){d=!0,r=c;break}}if(1==d)break}this.stepIndex=r,this.scale=a,this.step=a*this.minorSteps[r]},e.prototype.setFirst=function(t){void 0===t&&(t={});var e=void 0===t.min?this._start-2*this.scale*this.minorSteps[this.stepIndex]:t.min,i=void 0===t.max?this._end+this.scale*this.minorSteps[this.stepIndex]:t.max;this.marginEnd=void 0===t.max?this.roundToMinor(i):t.max,this.marginStart=void 0===t.min?this.roundToMinor(e):t.min,1==this.alignZeros&&(this.marginEnd-this.marginStart)%this.step!=0&&(this.marginEnd+=this.marginEnd%this.step),this.deadSpace=this.roundToMinor(i)-i+this.roundToMinor(e)-e,this.marginRange=this.marginEnd-this.marginStart,this.current=this.marginEnd},e.prototype.roundToMinor=function(t){var e=t-t%(this.scale*this.minorSteps[this.stepIndex]);return t%(this.scale*this.minorSteps[this.stepIndex])>.5*this.scale*this.minorSteps[this.stepIndex]?e+this.scale*this.minorSteps[this.stepIndex]:e},e.prototype.hasNext=function(){return this.current>=this.marginStart},e.prototype.next=function(){var t=this.current;this.current-=this.step,this.current==t&&(this.current=this._end)},e.prototype.previous=function(){this.current+=this.step,this.marginEnd+=this.step,this.marginRange=this.marginEnd-this.marginStart},e.prototype.getCurrent=function(t){var e=Math.abs(this.current)0;s--){if("0"!=i[s]){if("."==i[s]||","==i[s]){i=i.slice(0,s);break}break}i=i.slice(0,s)}}else{var o="",n=i.indexOf("e");if(-1!=n&&(o=i.slice(n),i=i.slice(0,n)),n=Math.max(i.indexOf(","),i.indexOf(".")),-1===n?(0!==t&&(i+="."),n=i.length+t):0!==t&&(n+=t+1),n>i.length)for(var r=n-i.length;r>0;r--)i+="0";else i=i.slice(0,n);i+=o}return i},e.prototype.snap=function(){},e.prototype.isMajor=function(){return this.current%(this.scale*this.majorSteps[this.stepIndex])==0},t.exports=e},function(t,e,i){function s(t,e){var i=h().hours(0).minutes(0).seconds(0).milliseconds(0);this.start=i.clone().add(-3,"days").valueOf(),this.end=i.clone().add(4,"days").valueOf(),this.body=t,this.deltaDifference=0,this.scaleOffset=0,this.startToFront=!1,this.endToFront=!0,this.defaultOptions={start:null,end:null,direction:"horizontal",moveable:!0,zoomable:!0,min:null,max:null,zoomMin:10,zoomMax:31536e10},this.options=r.extend({},this.defaultOptions),this.props={touch:{}},this.animateTimer=null,this.body.emitter.on("dragstart",this._onDragStart.bind(this)),this.body.emitter.on("drag",this._onDrag.bind(this)),this.body.emitter.on("dragend",this._onDragEnd.bind(this)),this.body.emitter.on("hold",this._onHold.bind(this)),this.body.emitter.on("mousewheel",this._onMouseWheel.bind(this)),this.body.emitter.on("DOMMouseScroll",this._onMouseWheel.bind(this)),this.body.emitter.on("touch",this._onTouch.bind(this)),this.body.emitter.on("pinch",this._onPinch.bind(this)),this.setOptions(e)}function o(t){if("horizontal"!=t&&"vertical"!=t)throw new TypeError('Unknown direction "'+t+'". Choose "horizontal" or "vertical".')}function n(t,e){return{x:t.pageX-r.getAbsoluteLeft(e),y:t.pageY-r.getAbsoluteTop(e)}}var r=i(1),a=i(47),h=i(44),d=i(20),l=i(15);s.prototype=new d,s.prototype.setOptions=function(t){if(t){var e=["direction","min","max","zoomMin","zoomMax","moveable","zoomable","activate","hiddenDates"];r.selectiveExtend(e,this.options,t),("start"in t||"end"in t)&&this.setRange(t.start,t.end)}},s.prototype.setRange=function(t,e,i){var s=void 0!=t?r.convert(t,"Date").valueOf():null,o=void 0!=e?r.convert(e,"Date").valueOf():null;if(this._cancelAnimation(),i){var n=this,a=this.start,h=this.end,d="number"==typeof i?i:500,c=(new Date).valueOf(),p=!1,u=function(){if(!n.props.touch.dragging){var t=(new Date).valueOf(),e=t-c,i=e>d,f=i||null===s?s:r.easeInOutQuad(e,a,s,d),g=i||null===o?o:r.easeInOutQuad(e,h,o,d);m=n._applyRange(f,g),l.updateHiddenDates(n.body,n.options.hiddenDates),p=p||m,m&&n.body.emitter.emit("rangechange",{start:new Date(n.start),end:new Date(n.end)}),i?p&&n.body.emitter.emit("rangechanged",{start:new Date(n.start),end:new Date(n.end)}):n.animateTimer=setTimeout(u,20)}};return u()}var m=this._applyRange(s,o);if(l.updateHiddenDates(this.body,this.options.hiddenDates),m){var f={start:new Date(this.start),end:new Date(this.end)};this.body.emitter.emit("rangechange",f),this.body.emitter.emit("rangechanged",f)}},s.prototype._cancelAnimation=function(){this.animateTimer&&(clearTimeout(this.animateTimer),this.animateTimer=null)},s.prototype._applyRange=function(t,e){var i,s=null!=t?r.convert(t,"Date").valueOf():this.start,o=null!=e?r.convert(e,"Date").valueOf():this.end,n=null!=this.options.max?r.convert(this.options.max,"Date").valueOf():null,a=null!=this.options.min?r.convert(this.options.min,"Date").valueOf():null;if(isNaN(s)||null===s)throw new Error('Invalid start "'+t+'"');if(isNaN(o)||null===o)throw new Error('Invalid end "'+e+'"');if(s>o&&(o=s),null!==a&&a>s&&(i=a-s,s+=i,o+=i,null!=n&&o>n&&(o=n)),null!==n&&o>n&&(i=o-n,s-=i,o-=i,null!=a&&a>s&&(s=a)),null!==this.options.zoomMin){var h=parseFloat(this.options.zoomMin);0>h&&(h=0),h>o-s&&(this.end-this.start===h?(s=this.start,o=this.end):(i=h-(o-s),s-=i/2,o+=i/2))}if(null!==this.options.zoomMax){var d=parseFloat(this.options.zoomMax);0>d&&(d=0),o-s>d&&(this.end-this.start===d?(s=this.start,o=this.end):(i=o-s-d,s+=i/2,o-=i/2))}var l=this.start!=s||this.end!=o;return s>=this.start&&s<=this.end||o>=this.start&&o<=this.end||this.start>=s&&this.start<=o||this.end>=s&&this.end<=o||this.body.emitter.emit("checkRangedItems"),this.start=s,this.end=o,l},s.prototype.getRange=function(){return{start:this.start,end:this.end}},s.prototype.conversion=function(t,e){return s.conversion(this.start,this.end,t,e)},s.conversion=function(t,e,i,s){return void 0===s&&(s=0),0!=i&&e-t!=0?{offset:t,scale:i/(e-t-s)}:{offset:0,scale:1}},s.prototype._onDragStart=function(){this.deltaDifference=0,this.previousDelta=0,this.options.moveable&&this.props.touch.allowDragging&&(this.props.touch.start=this.start,this.props.touch.end=this.end,this.props.touch.dragging=!0,this.body.dom.root&&(this.body.dom.root.style.cursor="move"))},s.prototype._onDrag=function(t){if(this.options.moveable&&this.props.touch.allowDragging){var e=this.options.direction;o(e);var i="horizontal"==e?t.gesture.deltaX:t.gesture.deltaY;i-=this.deltaDifference;var s=this.props.touch.end-this.props.touch.start,n=l.getHiddenDurationBetween(this.body.hiddenDates,this.start,this.end);s-=n;var r="horizontal"==e?this.body.domProps.center.width:this.body.domProps.center.height,a=-i/r*s,h=this.props.touch.start+a,d=this.props.touch.end+a,c=l.snapAwayFromHidden(this.body.hiddenDates,h,this.previousDelta-i,!0),p=l.snapAwayFromHidden(this.body.hiddenDates,d,this.previousDelta-i,!0);if(c!=h||p!=d)return this.deltaDifference+=i,this.props.touch.start=c,this.props.touch.end=p,void this._onDrag(t);this.previousDelta=i,this._applyRange(h,d),this.body.emitter.emit("rangechange",{start:new Date(this.start),end:new Date(this.end)})}},s.prototype._onDragEnd=function(){this.options.moveable&&this.props.touch.allowDragging&&(this.props.touch.dragging=!1,this.body.dom.root&&(this.body.dom.root.style.cursor="auto"),this.body.emitter.emit("rangechanged",{start:new Date(this.start),end:new Date(this.end)}))},s.prototype._onMouseWheel=function(t){if(this.options.zoomable&&this.options.moveable){var e=0;if(t.wheelDelta?e=t.wheelDelta/120:t.detail&&(e=-t.detail/3),e){var i;i=0>e?1-e/5:1/(1+e/5);var s=a.fakeGesture(this,t),o=n(s.center,this.body.dom.center),r=this._pointerToDate(o);this.zoom(i,r,e)}t.preventDefault()}},s.prototype._onTouch=function(){this.props.touch.start=this.start,this.props.touch.end=this.end,this.props.touch.allowDragging=!0,this.props.touch.center=null,this.scaleOffset=0,this.deltaDifference=0},s.prototype._onHold=function(){this.props.touch.allowDragging=!1},s.prototype._onPinch=function(t){if(this.options.zoomable&&this.options.moveable&&(this.props.touch.allowDragging=!1,t.gesture.touches.length>1)){this.props.touch.center||(this.props.touch.center=n(t.gesture.center,this.body.dom.center));var e=1/(t.gesture.scale+this.scaleOffset),i=this._pointerToDate(this.props.touch.center),s=l.getHiddenDurationBetween(this.body.hiddenDates,this.start,this.end),o=l.getHiddenDurationBefore(this.body.hiddenDates,this,i),r=s-o,a=i-o+(this.props.touch.start-(i-o))*e,h=i+r+(this.props.touch.end-(i+r))*e;this.startToFront=1-e>0?!1:!0,this.endToFront=e-1>0?!1:!0;var d=l.snapAwayFromHidden(this.body.hiddenDates,a,1-e,!0),c=l.snapAwayFromHidden(this.body.hiddenDates,h,e-1,!0);(d!=a||c!=h)&&(this.props.touch.start=d,this.props.touch.end=c,this.scaleOffset=1-t.gesture.scale,a=d,h=c),this.setRange(a,h),this.startToFront=!1,this.endToFront=!0}},s.prototype._pointerToDate=function(t){var e,i=this.options.direction;if(o(i),"horizontal"==i)return this.body.util.toTime(t.x).valueOf();var s=this.body.domProps.center.height;return e=this.conversion(s),t.y/e.scale+e.offset},s.prototype.zoom=function(t,e,i){null==e&&(e=(this.start+this.end)/2);var s=l.getHiddenDurationBetween(this.body.hiddenDates,this.start,this.end),o=l.getHiddenDurationBefore(this.body.hiddenDates,this,e),n=s-o,r=e-o+(this.start-(e-o))*t,a=e+n+(this.end-(e+n))*t;this.startToFront=i>0?!1:!0,this.endToFront=-i>0?!1:!0;var h=l.snapAwayFromHidden(this.body.hiddenDates,r,i,!0),d=l.snapAwayFromHidden(this.body.hiddenDates,a,-i,!0);(h!=r||d!=a)&&(r=h,a=d),this.setRange(r,a),this.startToFront=!1,this.endToFront=!0},s.prototype.move=function(t){var e=this.end-this.start,i=this.start+e*t,s=this.end+e*t;this.start=i,this.end=s},s.prototype.moveTo=function(t){var e=(this.start+this.end)/2,i=e-t,s=this.start-i,o=this.end-i;this.setRange(s,o)},t.exports=s},function(t,e){var i=.001;e.orderByStart=function(t){t.sort(function(t,e){return t.data.start-e.data.start})},e.orderByEnd=function(t){t.sort(function(t,e){var i="end"in t.data?t.data.end:t.data.start,s="end"in e.data?e.data.end:e.data.start;return i-s})},e.stack=function(t,i,s){var o,n;if(s)for(o=0,n=t.length;n>o;o++)t[o].top=null;for(o=0,n=t.length;n>o;o++){var r=t[o];if(r.stack&&null===r.top){r.top=i.axis;do{for(var a=null,h=0,d=t.length;d>h;h++){var l=t[h];if(null!==l.top&&l!==r&&l.stack&&e.collision(r,l,i.item)){a=l;break}}null!=a&&(r.top=a.top+a.height+i.item.vertical)}while(a)}}},e.nostack=function(t,e,i){var s,o,n;for(s=0,o=t.length;o>s;s++)if(void 0!==t[s].data.subgroup){n=e.axis;for(var r in i)i.hasOwnProperty(r)&&1==i[r].visible&&i[r].indexe.left&&t.top-s.vertical+ie.top}},function(t,e,i){function s(t,e,i,o){this.current=new Date,this._start=new Date,this._end=new Date,this.autoScale=!0,this.scale=s.SCALE.DAY,this.step=1,this.setRange(t,e,i),this.switchedDay=!1,this.switchedMonth=!1,this.switchedYear=!1,this.hiddenDates=o,void 0===o&&(this.hiddenDates=[])}var o=i(44),n=i(15);s.SCALE={MILLISECOND:1,SECOND:2,MINUTE:3,HOUR:4,DAY:5,WEEKDAY:6,MONTH:7,YEAR:8},s.prototype.setRange=function(t,e,i){if(!(t instanceof Date&&e instanceof Date))throw"No legal start or end date in method setRange";this._start=void 0!=t?new Date(t.valueOf()):new Date,this._end=void 0!=e?new Date(e.valueOf()):new Date,this.autoScale&&this.setMinimumStep(i)},s.prototype.first=function(){this.current=new Date(this._start.valueOf()),this.roundToMinor()},s.prototype.roundToMinor=function(){switch(this.scale){case s.SCALE.YEAR:this.current.setFullYear(this.step*Math.floor(this.current.getFullYear()/this.step)),this.current.setMonth(0);case s.SCALE.MONTH:this.current.setDate(1);case s.SCALE.DAY:case s.SCALE.WEEKDAY:this.current.setHours(0);case s.SCALE.HOUR:this.current.setMinutes(0);case s.SCALE.MINUTE:this.current.setSeconds(0);case s.SCALE.SECOND:this.current.setMilliseconds(0)}if(1!=this.step)switch(this.scale){case s.SCALE.MILLISECOND:this.current.setMilliseconds(this.current.getMilliseconds()-this.current.getMilliseconds()%this.step);break;case s.SCALE.SECOND:this.current.setSeconds(this.current.getSeconds()-this.current.getSeconds()%this.step);break;case s.SCALE.MINUTE:this.current.setMinutes(this.current.getMinutes()-this.current.getMinutes()%this.step);break;case s.SCALE.HOUR:this.current.setHours(this.current.getHours()-this.current.getHours()%this.step);break;case s.SCALE.WEEKDAY:case s.SCALE.DAY:this.current.setDate(this.current.getDate()-1-(this.current.getDate()-1)%this.step+1); break;case s.SCALE.MONTH:this.current.setMonth(this.current.getMonth()-this.current.getMonth()%this.step);break;case s.SCALE.YEAR:this.current.setFullYear(this.current.getFullYear()-this.current.getFullYear()%this.step)}},s.prototype.hasNext=function(){return this.current.valueOf()<=this._end.valueOf()},s.prototype.next=function(){var t=this.current.valueOf();if(this.current.getMonth()<6)switch(this.scale){case s.SCALE.MILLISECOND:this.current=new Date(this.current.valueOf()+this.step);break;case s.SCALE.SECOND:this.current=new Date(this.current.valueOf()+1e3*this.step);break;case s.SCALE.MINUTE:this.current=new Date(this.current.valueOf()+1e3*this.step*60);break;case s.SCALE.HOUR:this.current=new Date(this.current.valueOf()+1e3*this.step*60*60);var e=this.current.getHours();this.current.setHours(e-e%this.step);break;case s.SCALE.WEEKDAY:case s.SCALE.DAY:this.current.setDate(this.current.getDate()+this.step);break;case s.SCALE.MONTH:this.current.setMonth(this.current.getMonth()+this.step);break;case s.SCALE.YEAR:this.current.setFullYear(this.current.getFullYear()+this.step)}else switch(this.scale){case s.SCALE.MILLISECOND:this.current=new Date(this.current.valueOf()+this.step);break;case s.SCALE.SECOND:this.current.setSeconds(this.current.getSeconds()+this.step);break;case s.SCALE.MINUTE:this.current.setMinutes(this.current.getMinutes()+this.step);break;case s.SCALE.HOUR:this.current.setHours(this.current.getHours()+this.step);break;case s.SCALE.WEEKDAY:case s.SCALE.DAY:this.current.setDate(this.current.getDate()+this.step);break;case s.SCALE.MONTH:this.current.setMonth(this.current.getMonth()+this.step);break;case s.SCALE.YEAR:this.current.setFullYear(this.current.getFullYear()+this.step)}if(1!=this.step)switch(this.scale){case s.SCALE.MILLISECOND:this.current.getMilliseconds()0&&(this.step=e),this.autoScale=!1},s.prototype.setAutoScale=function(t){this.autoScale=t},s.prototype.setMinimumStep=function(t){if(void 0!=t){var e=31104e6,i=2592e6,o=864e5,n=36e5,r=6e4,a=1e3,h=1;1e3*e>t&&(this.scale=s.SCALE.YEAR,this.step=1e3),500*e>t&&(this.scale=s.SCALE.YEAR,this.step=500),100*e>t&&(this.scale=s.SCALE.YEAR,this.step=100),50*e>t&&(this.scale=s.SCALE.YEAR,this.step=50),10*e>t&&(this.scale=s.SCALE.YEAR,this.step=10),5*e>t&&(this.scale=s.SCALE.YEAR,this.step=5),e>t&&(this.scale=s.SCALE.YEAR,this.step=1),3*i>t&&(this.scale=s.SCALE.MONTH,this.step=3),i>t&&(this.scale=s.SCALE.MONTH,this.step=1),5*o>t&&(this.scale=s.SCALE.DAY,this.step=5),2*o>t&&(this.scale=s.SCALE.DAY,this.step=2),o>t&&(this.scale=s.SCALE.DAY,this.step=1),o/2>t&&(this.scale=s.SCALE.WEEKDAY,this.step=1),4*n>t&&(this.scale=s.SCALE.HOUR,this.step=4),n>t&&(this.scale=s.SCALE.HOUR,this.step=1),15*r>t&&(this.scale=s.SCALE.MINUTE,this.step=15),10*r>t&&(this.scale=s.SCALE.MINUTE,this.step=10),5*r>t&&(this.scale=s.SCALE.MINUTE,this.step=5),r>t&&(this.scale=s.SCALE.MINUTE,this.step=1),15*a>t&&(this.scale=s.SCALE.SECOND,this.step=15),10*a>t&&(this.scale=s.SCALE.SECOND,this.step=10),5*a>t&&(this.scale=s.SCALE.SECOND,this.step=5),a>t&&(this.scale=s.SCALE.SECOND,this.step=1),200*h>t&&(this.scale=s.SCALE.MILLISECOND,this.step=200),100*h>t&&(this.scale=s.SCALE.MILLISECOND,this.step=100),50*h>t&&(this.scale=s.SCALE.MILLISECOND,this.step=50),10*h>t&&(this.scale=s.SCALE.MILLISECOND,this.step=10),5*h>t&&(this.scale=s.SCALE.MILLISECOND,this.step=5),h>t&&(this.scale=s.SCALE.MILLISECOND,this.step=1)}},s.prototype.snap=function(t){var e=new Date(t.valueOf());if(this.scale==s.SCALE.YEAR){var i=e.getFullYear()+Math.round(e.getMonth()/12);e.setFullYear(Math.round(i/this.step)*this.step),e.setMonth(0),e.setDate(0),e.setHours(0),e.setMinutes(0),e.setSeconds(0),e.setMilliseconds(0)}else if(this.scale==s.SCALE.MONTH)e.getDate()>15?(e.setDate(1),e.setMonth(e.getMonth()+1)):e.setDate(1),e.setHours(0),e.setMinutes(0),e.setSeconds(0),e.setMilliseconds(0);else if(this.scale==s.SCALE.DAY){switch(this.step){case 5:case 2:e.setHours(24*Math.round(e.getHours()/24));break;default:e.setHours(12*Math.round(e.getHours()/12))}e.setMinutes(0),e.setSeconds(0),e.setMilliseconds(0)}else if(this.scale==s.SCALE.WEEKDAY){switch(this.step){case 5:case 2:e.setHours(12*Math.round(e.getHours()/12));break;default:e.setHours(6*Math.round(e.getHours()/6))}e.setMinutes(0),e.setSeconds(0),e.setMilliseconds(0)}else if(this.scale==s.SCALE.HOUR){switch(this.step){case 4:e.setMinutes(60*Math.round(e.getMinutes()/60));break;default:e.setMinutes(30*Math.round(e.getMinutes()/30))}e.setSeconds(0),e.setMilliseconds(0)}else if(this.scale==s.SCALE.MINUTE){switch(this.step){case 15:case 10:e.setMinutes(5*Math.round(e.getMinutes()/5)),e.setSeconds(0);break;case 5:e.setSeconds(60*Math.round(e.getSeconds()/60));break;default:e.setSeconds(30*Math.round(e.getSeconds()/30))}e.setMilliseconds(0)}else if(this.scale==s.SCALE.SECOND)switch(this.step){case 15:case 10:e.setSeconds(5*Math.round(e.getSeconds()/5)),e.setMilliseconds(0);break;case 5:e.setMilliseconds(1e3*Math.round(e.getMilliseconds()/1e3));break;default:e.setMilliseconds(500*Math.round(e.getMilliseconds()/500))}else if(this.scale==s.SCALE.MILLISECOND){var o=this.step>5?this.step/2:1;e.setMilliseconds(Math.round(e.getMilliseconds()/o)*o)}return e},s.prototype.isMajor=function(){if(1==this.switchedYear)switch(this.switchedYear=!1,this.scale){case s.SCALE.YEAR:case s.SCALE.MONTH:case s.SCALE.WEEKDAY:case s.SCALE.DAY:case s.SCALE.HOUR:case s.SCALE.MINUTE:case s.SCALE.SECOND:case s.SCALE.MILLISECOND:return!0;default:return!1}else if(1==this.switchedMonth)switch(this.switchedMonth=!1,this.scale){case s.SCALE.WEEKDAY:case s.SCALE.DAY:case s.SCALE.HOUR:case s.SCALE.MINUTE:case s.SCALE.SECOND:case s.SCALE.MILLISECOND:return!0;default:return!1}else if(1==this.switchedDay)switch(this.switchedDay=!1,this.scale){case s.SCALE.MILLISECOND:case s.SCALE.SECOND:case s.SCALE.MINUTE:case s.SCALE.HOUR:return!0;default:return!1}switch(this.scale){case s.SCALE.MILLISECOND:return 0==this.current.getMilliseconds();case s.SCALE.SECOND:return 0==this.current.getSeconds();case s.SCALE.MINUTE:return 0==this.current.getHours()&&0==this.current.getMinutes();case s.SCALE.HOUR:return 0==this.current.getHours();case s.SCALE.WEEKDAY:case s.SCALE.DAY:return 1==this.current.getDate();case s.SCALE.MONTH:return 0==this.current.getMonth();case s.SCALE.YEAR:return!1;default:return!1}},s.prototype.getLabelMinor=function(t){switch(void 0==t&&(t=this.current),this.scale){case s.SCALE.MILLISECOND:return o(t).format("SSS");case s.SCALE.SECOND:return o(t).format("s");case s.SCALE.MINUTE:return o(t).format("HH:mm");case s.SCALE.HOUR:return o(t).format("HH:mm");case s.SCALE.WEEKDAY:return o(t).format("ddd D");case s.SCALE.DAY:return o(t).format("D");case s.SCALE.MONTH:return o(t).format("MMM");case s.SCALE.YEAR:return o(t).format("YYYY");default:return""}},s.prototype.getLabelMajor=function(t){switch(void 0==t&&(t=this.current),this.scale){case s.SCALE.MILLISECOND:return o(t).format("HH:mm:ss");case s.SCALE.SECOND:return o(t).format("D MMMM HH:mm");case s.SCALE.MINUTE:case s.SCALE.HOUR:return o(t).format("ddd D MMMM");case s.SCALE.WEEKDAY:case s.SCALE.DAY:return o(t).format("MMMM YYYY");case s.SCALE.MONTH:return o(t).format("YYYY");case s.SCALE.YEAR:return"";default:return""}},t.exports=s},function(t){function e(){this.options=null,this.props=null}e.prototype.setOptions=function(t){t&&util.extend(this.options,t)},e.prototype.redraw=function(){return!1},e.prototype.destroy=function(){},e.prototype._isResized=function(){var t=this.props._previousWidth!==this.props.width||this.props._previousHeight!==this.props.height;return this.props._previousWidth=this.props.width,this.props._previousHeight=this.props.height,t},t.exports=e},function(t,e,i){function s(t,e){this.body=t,this.defaultOptions={showCurrentTime:!0,locales:a,locale:"en"},this.options=o.extend({},this.defaultOptions),this.offset=0,this._create(),this.setOptions(e)}var o=i(1),n=i(20),r=i(44),a=i(48);s.prototype=new n,s.prototype._create=function(){var t=document.createElement("div");t.className="currenttime",t.style.position="absolute",t.style.top="0px",t.style.height="100%",this.bar=t},s.prototype.destroy=function(){this.options.showCurrentTime=!1,this.redraw(),this.body=null},s.prototype.setOptions=function(t){t&&o.selectiveExtend(["showCurrentTime","locale","locales"],this.options,t)},s.prototype.redraw=function(){if(this.options.showCurrentTime){var t=this.body.dom.backgroundVertical;this.bar.parentNode!=t&&(this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar),t.appendChild(this.bar),this.start());var e=new Date((new Date).valueOf()+this.offset),i=this.body.util.toScreen(e),s=this.options.locales[this.options.locale],o=s.current+" "+s.time+": "+r(e).format("dddd, MMMM Do YYYY, H:mm:ss");o=o.charAt(0).toUpperCase()+o.substring(1),this.bar.style.left=i+"px",this.bar.title=o}else this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar),this.stop();return!1},s.prototype.start=function(){function t(){e.stop();var i=e.body.range.conversion(e.body.domProps.center.width).scale,s=1/i/10;30>s&&(s=30),s>1e3&&(s=1e3),e.redraw(),e.currentTimeTimer=setTimeout(t,s)}var e=this;t()},s.prototype.stop=function(){void 0!==this.currentTimeTimer&&(clearTimeout(this.currentTimeTimer),delete this.currentTimeTimer)},s.prototype.setCurrentTime=function(t){var e=o.convert(t,"Date").valueOf(),i=(new Date).valueOf();this.offset=e-i,this.redraw()},s.prototype.getCurrentTime=function(){return new Date((new Date).valueOf()+this.offset)},t.exports=s},function(t,e,i){function s(t,e){this.body=t,this.defaultOptions={showCustomTime:!1,locales:h,locale:"en"},this.options=n.extend({},this.defaultOptions),this.customTime=new Date,this.eventParams={},this._create(),this.setOptions(e)}var o=i(45),n=i(1),r=i(20),a=i(44),h=i(48);s.prototype=new r,s.prototype.setOptions=function(t){t&&n.selectiveExtend(["showCustomTime","locale","locales"],this.options,t)},s.prototype._create=function(){var t=document.createElement("div");t.className="customtime",t.style.position="absolute",t.style.top="0px",t.style.height="100%",this.bar=t;var e=document.createElement("div");e.style.position="relative",e.style.top="0px",e.style.left="-10px",e.style.height="100%",e.style.width="20px",t.appendChild(e),this.hammer=o(t,{prevent_default:!0}),this.hammer.on("dragstart",this._onDragStart.bind(this)),this.hammer.on("drag",this._onDrag.bind(this)),this.hammer.on("dragend",this._onDragEnd.bind(this))},s.prototype.destroy=function(){this.options.showCustomTime=!1,this.redraw(),this.hammer.enable(!1),this.hammer=null,this.body=null},s.prototype.redraw=function(){if(this.options.showCustomTime){var t=this.body.dom.backgroundVertical;this.bar.parentNode!=t&&(this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar),t.appendChild(this.bar));var e=this.body.util.toScreen(this.customTime),i=this.options.locales[this.options.locale],s=i.time+": "+a(this.customTime).format("dddd, MMMM Do YYYY, H:mm:ss");s=s.charAt(0).toUpperCase()+s.substring(1),this.bar.style.left=e+"px",this.bar.title=s}else this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar);return!1},s.prototype.setCustomTime=function(t){this.customTime=n.convert(t,"Date"),this.redraw()},s.prototype.getCustomTime=function(){return new Date(this.customTime.valueOf())},s.prototype._onDragStart=function(t){this.eventParams.dragging=!0,this.eventParams.customTime=this.customTime,t.stopPropagation(),t.preventDefault()},s.prototype._onDrag=function(t){if(this.eventParams.dragging){var e=t.gesture.deltaX,i=this.body.util.toScreen(this.eventParams.customTime)+e,s=this.body.util.toTime(i);this.setCustomTime(s),this.body.emitter.emit("timechange",{time:new Date(this.customTime.valueOf())}),t.stopPropagation(),t.preventDefault()}},s.prototype._onDragEnd=function(t){this.eventParams.dragging&&(this.body.emitter.emit("timechanged",{time:new Date(this.customTime.valueOf())}),t.stopPropagation(),t.preventDefault())},t.exports=s},function(t,e,i){function s(t,e,i,s){this.id=o.randomUUID(),this.body=t,this.defaultOptions={orientation:"left",showMinorLabels:!0,showMajorLabels:!0,icons:!0,majorLinesOffset:7,minorLinesOffset:4,labelOffsetX:10,labelOffsetY:2,iconWidth:20,width:"40px",visible:!0,alignZeros:!0,customRange:{left:{min:void 0,max:void 0},right:{min:void 0,max:void 0}},title:{left:{text:void 0},right:{text:void 0}},format:{left:{decimals:void 0},right:{decimals:void 0}}},this.linegraphOptions=s,this.linegraphSVG=i,this.props={},this.DOMelements={lines:{},labels:{},title:{}},this.dom={},this.range={start:0,end:0},this.options=o.extend({},this.defaultOptions),this.conversionFactor=1,this.setOptions(e),this.width=Number((""+this.options.width).replace("px","")),this.minWidth=this.width,this.height=this.linegraphSVG.offsetHeight,this.hidden=!1,this.stepPixels=25,this.stepPixelsForced=25,this.zeroCrossing=-1,this.lineOffset=0,this.master=!0,this.svgElements={},this.iconsRemoved=!1,this.groups={},this.amountOfGroups=0,this._create();var n=this;this.body.emitter.on("verticalDrag",function(){n.dom.lineContainer.style.top=n.body.domProps.scrollTop+"px"})}var o=i(1),n=i(2),r=i(20),a=i(16);s.prototype=new r,s.prototype.addGroup=function(t,e){this.groups.hasOwnProperty(t)||(this.groups[t]=e),this.amountOfGroups+=1},s.prototype.updateGroup=function(t,e){this.groups[t]=e},s.prototype.removeGroup=function(t){this.groups.hasOwnProperty(t)&&(delete this.groups[t],this.amountOfGroups-=1)},s.prototype.setOptions=function(t){if(t){var e=!1;this.options.orientation!=t.orientation&&void 0!==t.orientation&&(e=!0);var i=["orientation","showMinorLabels","showMajorLabels","icons","majorLinesOffset","minorLinesOffset","labelOffsetX","labelOffsetY","iconWidth","width","visible","customRange","title","format","alignZeros"];o.selectiveExtend(i,this.options,t),this.minWidth=Number((""+this.options.width).replace("px","")),1==e&&this.dom.frame&&(this.hide(),this.show())}},s.prototype._create=function(){this.dom.frame=document.createElement("div"),this.dom.frame.style.width=this.options.width,this.dom.frame.style.height=this.height,this.dom.lineContainer=document.createElement("div"),this.dom.lineContainer.style.width="100%",this.dom.lineContainer.style.height=this.height,this.dom.lineContainer.style.position="relative",this.svg=document.createElementNS("http://www.w3.org/2000/svg","svg"),this.svg.style.position="absolute",this.svg.style.top="0px",this.svg.style.height="100%",this.svg.style.width="100%",this.svg.style.display="block",this.dom.frame.appendChild(this.svg)},s.prototype._redrawGroupIcons=function(){n.prepareElements(this.svgElements);var t,e=this.options.iconWidth,i=15,s=4,o=s+.5*i;t="left"==this.options.orientation?s:this.width-e-s;for(var r in this.groups)this.groups.hasOwnProperty(r)&&(1!=this.groups[r].visible||void 0!==this.linegraphOptions.visibility[r]&&1!=this.linegraphOptions.visibility[r]||(this.groups[r].drawIcon(t,o,this.svgElements,this.svg,e,i),o+=i+s));n.cleanupElements(this.svgElements),this.iconsRemoved=!1},s.prototype._cleanupIcons=function(){0==this.iconsRemoved&&(n.prepareElements(this.svgElements),n.cleanupElements(this.svgElements),this.iconsRemoved=!0)},s.prototype.show=function(){this.hidden=!1,this.dom.frame.parentNode||("left"==this.options.orientation?this.body.dom.left.appendChild(this.dom.frame):this.body.dom.right.appendChild(this.dom.frame)),this.dom.lineContainer.parentNode||this.body.dom.backgroundHorizontal.appendChild(this.dom.lineContainer)},s.prototype.hide=function(){this.hidden=!0,this.dom.frame.parentNode&&this.dom.frame.parentNode.removeChild(this.dom.frame),this.dom.lineContainer.parentNode&&this.dom.lineContainer.parentNode.removeChild(this.dom.lineContainer)},s.prototype.setRange=function(t,e){0==this.master&&1==this.options.alignZeros&&-1!=this.zeroCrossing&&t>0&&(t=0),this.range.start=t,this.range.end=e},s.prototype.redraw=function(){var t=!1,e=0;this.dom.lineContainer.style.top=this.body.domProps.scrollTop+"px";for(var i in this.groups)this.groups.hasOwnProperty(i)&&(1!=this.groups[i].visible||void 0!==this.linegraphOptions.visibility[i]&&1!=this.linegraphOptions.visibility[i]||e++);if(0==this.amountOfGroups||0==e)this.hide();else{this.show(),this.height=Number(this.linegraphSVG.style.height.replace("px","")),this.dom.lineContainer.style.height=this.height+"px",this.width=1==this.options.visible?Number((""+this.options.width).replace("px","")):0;var s=this.props,o=this.dom.frame;o.className="dataaxis",this._calculateCharSize();var n=this.options.orientation,r=this.options.showMinorLabels,a=this.options.showMajorLabels;s.minorLabelHeight=r?s.minorCharHeight:0,s.majorLabelHeight=a?s.majorCharHeight:0,s.minorLineWidth=this.body.dom.backgroundHorizontal.offsetWidth-this.lineOffset-this.width+2*this.options.minorLinesOffset,s.minorLineHeight=1,s.majorLineWidth=this.body.dom.backgroundHorizontal.offsetWidth-this.lineOffset-this.width+2*this.options.majorLinesOffset,s.majorLineHeight=1,"left"==n?(o.style.top="0",o.style.left="0",o.style.bottom="",o.style.width=this.width+"px",o.style.height=this.height+"px"):(o.style.top="",o.style.bottom="0",o.style.left="0",o.style.width=this.width+"px",o.style.height=this.height+"px"),t=this._redrawLabels(),1==this.options.icons?this._redrawGroupIcons():this._cleanupIcons(),this._redrawTitle(n)}return t},s.prototype._redrawLabels=function(){n.prepareElements(this.DOMelements.lines),n.prepareElements(this.DOMelements.labels);var t=this.options.orientation,e=this.master?this.props.majorCharHeight||10:this.stepPixelsForced,i=new a(this.range.start,this.range.end,e,this.dom.frame.offsetHeight,this.options.customRange[this.options.orientation],0==this.master&&this.options.alignZeros);this.step=i;var s=(this.dom.frame.offsetHeight-i.deadSpace*(this.dom.frame.offsetHeight/i.marginRange))/((i.marginRange-i.deadSpace)/i.step);this.stepPixels=s;var o=this.height/s,r=0;if(0==this.master){s=this.stepPixelsForced,r=Math.round(this.dom.frame.offsetHeight/s-o);for(var h=0;.5*r>h;h++)i.previous();if(o=this.height/s,-1!=this.zeroCrossing&&1==this.options.alignZeros){var d=i.marginEnd/i.step-this.zeroCrossing;if(d>0)for(var h=0;d>h;h++)i.next();else if(0>d)for(var h=0;-d>h;h++)i.previous()}}else o+=.25;this.valueAtZero=i.marginEnd;var l,c=0,p=1;void 0!==this.options.format[t]&&(l=this.options.format[t].decimals),this.maxLabelSize=0;for(var u=0;p=0&&this._redrawLabel(u-2,i.getCurrent(l),t,"yAxis major",this.props.majorCharHeight),this._redrawLine(u,t,"grid horizontal major",this.options.majorLinesOffset,this.props.majorLineWidth)):this._redrawLine(u,t,"grid horizontal minor",this.options.minorLinesOffset,this.props.minorLineWidth),1==this.master&&0==i.current&&(this.zeroCrossing=p),p++}this.conversionFactor=0==this.master?u/(this.valueAtZero-i.current):this.dom.frame.offsetHeight/i.marginRange;var f=0;void 0!==this.options.title[t]&&void 0!==this.options.title[t].text&&(f=this.props.titleCharHeight);var g=1==this.options.icons?Math.max(this.options.iconWidth,f)+this.options.labelOffsetX+15:f+this.options.labelOffsetX+15;return this.maxLabelSize>this.width-g&&1==this.options.visible?(this.width=this.maxLabelSize+g,this.options.width=this.width+"px",n.cleanupElements(this.DOMelements.lines),n.cleanupElements(this.DOMelements.labels),this.redraw(),!0):this.maxLabelSizethis.minWidth?(this.width=Math.max(this.minWidth,this.maxLabelSize+g),this.options.width=this.width+"px",n.cleanupElements(this.DOMelements.lines),n.cleanupElements(this.DOMelements.labels),this.redraw(),!0):(n.cleanupElements(this.DOMelements.lines),n.cleanupElements(this.DOMelements.labels),!1)},s.prototype.convertValue=function(t){var e=this.valueAtZero-t,i=e*this.conversionFactor;return i},s.prototype._redrawLabel=function(t,e,i,s,o){var r=n.getDOMElement("div",this.DOMelements.labels,this.dom.frame);r.className=s,r.innerHTML=e,"left"==i?(r.style.left="-"+this.options.labelOffsetX+"px",r.style.textAlign="right"):(r.style.right="-"+this.options.labelOffsetX+"px",r.style.textAlign="left"),r.style.top=t-.5*o+this.options.labelOffsetY+"px",e+="";var a=Math.max(this.props.majorCharWidth,this.props.minorCharWidth);this.maxLabelSized;d++){var c=this.visibleItems[d];c.repositionY(e)}return s},s.prototype._calculateHeight=function(t){var e,i=this.visibleItems;this.resetSubgroups();var s=this;if(i.length){var n=i[0].top,r=i[0].top+i[0].height;if(o.forEach(i,function(t){n=Math.min(n,t.top),r=Math.max(r,t.top+t.height),void 0!==t.data.subgroup&&(s.subgroups[t.data.subgroup].height=Math.max(s.subgroups[t.data.subgroup].height,t.height),s.subgroups[t.data.subgroup].visible=!0)}),n>t.axis){var a=n-t.axis;r-=a,o.forEach(i,function(t){t.top-=a})}e=r+t.item.vertical/2}else e=t.axis+t.item.vertical;return e=Math.max(e,this.props.label.height)},s.prototype.show=function(){this.dom.label.parentNode||this.itemSet.dom.labelSet.appendChild(this.dom.label),this.dom.foreground.parentNode||this.itemSet.dom.foreground.appendChild(this.dom.foreground),this.dom.background.parentNode||this.itemSet.dom.background.appendChild(this.dom.background),this.dom.axis.parentNode||this.itemSet.dom.axis.appendChild(this.dom.axis)},s.prototype.hide=function(){var t=this.dom.label;t.parentNode&&t.parentNode.removeChild(t);var e=this.dom.foreground;e.parentNode&&e.parentNode.removeChild(e);var i=this.dom.background;i.parentNode&&i.parentNode.removeChild(i);var s=this.dom.axis;s.parentNode&&s.parentNode.removeChild(s)},s.prototype.add=function(t){if(this.items[t.id]=t,t.setParent(this),void 0!==t.data.subgroup&&(void 0===this.subgroups[t.data.subgroup]&&(this.subgroups[t.data.subgroup]={height:0,visible:!1,index:this.subgroupIndex,items:[]},this.subgroupIndex++),this.subgroups[t.data.subgroup].items.push(t)),this.orderSubgroups(),-1==this.visibleItems.indexOf(t)){var e=this.itemSet.body.range;this._checkIfVisible(t,this.visibleItems,e)}},s.prototype.orderSubgroups=function(){if(void 0!==this.subgroupOrderer){var t=[];if("string"==typeof this.subgroupOrderer){for(var e in this.subgroups)t.push({subgroup:e,sortField:this.subgroups[e].items[0].data[this.subgroupOrderer]});t.sort(function(t,e){return t.sortField-e.sortField})}else if("function"==typeof this.subgroupOrderer){for(var e in this.subgroups)t.push(this.subgroups[e].items[0].data);t.sort(this.subgroupOrderer)}if(t.length>0)for(var i=0;it?-1:l>=t?0:1 };if(e.length>0)for(n=0;nl}),1==this.checkRangedItems)for(this.checkRangedItems=!1,n=0;nl})}for(n=0;n=0&&(n=e[r],!o(n));r--)void 0===s[n.id]&&(s[n.id]=!0,i.push(n));for(r=t+1;rs;s++){var n=this.visibleItems[s];n.repositionY(e)}return i},s.prototype.show=function(){this.dom.background.parentNode||this.itemSet.dom.background.appendChild(this.dom.background)},t.exports=s},function(t,e,i){function s(t,e){this.body=t,this.defaultOptions={type:null,orientation:"bottom",align:"auto",stack:!0,groupOrder:null,selectable:!0,editable:{updateTime:!1,updateGroup:!1,add:!1,remove:!1},onAdd:function(t,e){e(t)},onUpdate:function(t,e){e(t)},onMove:function(t,e){e(t)},onRemove:function(t,e){e(t)},onMoving:function(t,e){e(t)},margin:{item:{horizontal:10,vertical:10},axis:20},padding:5},this.options=n.extend({},this.defaultOptions),this.itemOptions={type:{start:"Date",end:"Date"}},this.conversion={toScreen:t.util.toScreen,toTime:t.util.toTime},this.dom={},this.props={},this.hammer=null;var i=this;this.itemsData=null,this.groupsData=null,this.itemListeners={add:function(t,e){i._onAdd(e.items)},update:function(t,e){i._onUpdate(e.items)},remove:function(t,e){i._onRemove(e.items)}},this.groupListeners={add:function(t,e){i._onAddGroups(e.items)},update:function(t,e){i._onUpdateGroups(e.items)},remove:function(t,e){i._onRemoveGroups(e.items)}},this.items={},this.groups={},this.groupIds=[],this.selection=[],this.stackDirty=!0,this.touchParams={},this._create(),this.setOptions(e)}var o=i(45),n=i(1),r=i(3),a=i(4),h=i(20),d=i(25),l=i(26),c=i(33),p=i(34),u=i(35),m=i(32),f="__ungrouped__",g="__background__";s.prototype=new h,s.types={background:m,box:c,range:u,point:p},s.prototype._create=function(){var t=document.createElement("div");t.className="itemset",t["timeline-itemset"]=this,this.dom.frame=t;var e=document.createElement("div");e.className="background",t.appendChild(e),this.dom.background=e;var i=document.createElement("div");i.className="foreground",t.appendChild(i),this.dom.foreground=i;var s=document.createElement("div");s.className="axis",this.dom.axis=s;var n=document.createElement("div");n.className="labelset",this.dom.labelSet=n,this._updateUngrouped();var r=new l(g,null,this);r.show(),this.groups[g]=r,this.hammer=o(this.body.dom.centerContainer,{preventDefault:!0}),this.hammer.on("touch",this._onTouch.bind(this)),this.hammer.on("dragstart",this._onDragStart.bind(this)),this.hammer.on("drag",this._onDrag.bind(this)),this.hammer.on("dragend",this._onDragEnd.bind(this)),this.hammer.on("tap",this._onSelectItem.bind(this)),this.hammer.on("hold",this._onMultiSelectItem.bind(this)),this.hammer.on("doubletap",this._onAddItem.bind(this)),this.show()},s.prototype.setOptions=function(t){if(t){var e=["type","align","orientation","padding","stack","selectable","groupOrder","dataAttributes","template","hide"];n.selectiveExtend(e,this.options,t),"margin"in t&&("number"==typeof t.margin?(this.options.margin.axis=t.margin,this.options.margin.item.horizontal=t.margin,this.options.margin.item.vertical=t.margin):"object"==typeof t.margin&&(n.selectiveExtend(["axis"],this.options.margin,t.margin),"item"in t.margin&&("number"==typeof t.margin.item?(this.options.margin.item.horizontal=t.margin.item,this.options.margin.item.vertical=t.margin.item):"object"==typeof t.margin.item&&n.selectiveExtend(["horizontal","vertical"],this.options.margin.item,t.margin.item)))),"editable"in t&&("boolean"==typeof t.editable?(this.options.editable.updateTime=t.editable,this.options.editable.updateGroup=t.editable,this.options.editable.add=t.editable,this.options.editable.remove=t.editable):"object"==typeof t.editable&&n.selectiveExtend(["updateTime","updateGroup","add","remove"],this.options.editable,t.editable));var i=function(e){var i=t[e];if(i){if(!(i instanceof Function))throw new Error("option "+e+" must be a function "+e+"(item, callback)");this.options[e]=i}}.bind(this);["onAdd","onUpdate","onRemove","onMove","onMoving"].forEach(i),this.markDirty()}},s.prototype.markDirty=function(){this.groupIds=[],this.stackDirty=!0},s.prototype.destroy=function(){this.hide(),this.setItems(null),this.setGroups(null),this.hammer=null,this.body=null,this.conversion=null},s.prototype.hide=function(){this.dom.frame.parentNode&&this.dom.frame.parentNode.removeChild(this.dom.frame),this.dom.axis.parentNode&&this.dom.axis.parentNode.removeChild(this.dom.axis),this.dom.labelSet.parentNode&&this.dom.labelSet.parentNode.removeChild(this.dom.labelSet)},s.prototype.show=function(){this.dom.frame.parentNode||this.body.dom.center.appendChild(this.dom.frame),this.dom.axis.parentNode||this.body.dom.backgroundVertical.appendChild(this.dom.axis),this.dom.labelSet.parentNode||this.body.dom.left.appendChild(this.dom.labelSet)},s.prototype.setSelection=function(t){var e,i,s,o;for(void 0==t&&(t=[]),Array.isArray(t)||(t=[t]),e=0,i=this.selection.length;i>e;e++)s=this.selection[e],o=this.items[s],o&&o.unselect();for(this.selection=[],e=0,i=t.length;i>e;e++)s=t[e],o=this.items[s],o&&(this.selection.push(s),o.select())},s.prototype.getSelection=function(){return this.selection.concat([])},s.prototype.getVisibleItems=function(){var t=this.body.range.getRange(),e=this.body.util.toScreen(t.start),i=this.body.util.toScreen(t.end),s=[];for(var o in this.groups)if(this.groups.hasOwnProperty(o))for(var n=this.groups[o],r=n.visibleItems,a=0;ae&&s.push(h.id)}return s},s.prototype._deselect=function(t){for(var e=this.selection,i=0,s=e.length;s>i;i++)if(e[i]==t){e.splice(i,1);break}},s.prototype.redraw=function(){var t=this.options.margin,e=this.body.range,i=n.option.asSize,s=this.options,o=s.orientation,r=!1,a=this.dom.frame,h=s.editable.updateTime||s.editable.updateGroup;this.props.top=this.body.domProps.top.height+this.body.domProps.border.top,this.props.left=this.body.domProps.left.width+this.body.domProps.border.left,a.className="itemset"+(h?" editable":""),r=this._orderGroups()||r;var d=e.end-e.start,l=d!=this.lastVisibleInterval||this.props.width!=this.props.lastWidth;l&&(this.stackDirty=!0),this.lastVisibleInterval=d,this.props.lastWidth=this.props.width;var c=this.stackDirty,p=this._firstGroup(),u={item:t.item,axis:t.axis},m={item:t.item,axis:t.item.vertical/2},f=0,v=t.axis+t.item.vertical;return this.groups[g].redraw(e,m,c),n.forEach(this.groups,function(t){var i=t==p?u:m,s=t.redraw(e,i,c);r=s||r,f+=t.height}),f=Math.max(f,v),this.stackDirty=!1,a.style.height=i(f),this.props.width=a.offsetWidth,this.props.height=f,this.dom.axis.style.top=i("top"==o?this.body.domProps.top.height+this.body.domProps.border.top:this.body.domProps.top.height+this.body.domProps.centerContainer.height),this.dom.axis.style.left="0",r=this._isResized()||r},s.prototype._firstGroup=function(){var t="top"==this.options.orientation?0:this.groupIds.length-1,e=this.groupIds[t],i=this.groups[e]||this.groups[f];return i||null},s.prototype._updateUngrouped=function(){{var t,e,i=this.groups[f];this.groups[g]}if(this.groupsData){if(i){i.hide(),delete this.groups[f];for(e in this.items)if(this.items.hasOwnProperty(e)){t=this.items[e],t.parent&&t.parent.remove(t);var s=this._getGroupId(t.data),o=this.groups[s];o&&o.add(t)||t.hide()}}}else if(!i){var n=null,r=null;i=new d(n,r,this),this.groups[f]=i;for(e in this.items)this.items.hasOwnProperty(e)&&(t=this.items[e],i.add(t));i.show()}},s.prototype.getLabelSet=function(){return this.dom.labelSet},s.prototype.setItems=function(t){var e,i=this,s=this.itemsData;if(t){if(!(t instanceof r||t instanceof a))throw new TypeError("Data must be an instance of DataSet or DataView");this.itemsData=t}else this.itemsData=null;if(s&&(n.forEach(this.itemListeners,function(t,e){s.off(e,t)}),e=s.getIds(),this._onRemove(e)),this.itemsData){var o=this.id;n.forEach(this.itemListeners,function(t,e){i.itemsData.on(e,t,o)}),e=this.itemsData.getIds(),this._onAdd(e),this._updateUngrouped()}},s.prototype.getItems=function(){return this.itemsData},s.prototype.setGroups=function(t){var e,i=this;if(this.groupsData&&(n.forEach(this.groupListeners,function(t,e){i.groupsData.unsubscribe(e,t)}),e=this.groupsData.getIds(),this.groupsData=null,this._onRemoveGroups(e)),t){if(!(t instanceof r||t instanceof a))throw new TypeError("Data must be an instance of DataSet or DataView");this.groupsData=t}else this.groupsData=null;if(this.groupsData){var s=this.id;n.forEach(this.groupListeners,function(t,e){i.groupsData.on(e,t,s)}),e=this.groupsData.getIds(),this._onAddGroups(e)}this._updateUngrouped(),this._order(),this.body.emitter.emit("change",{queue:!0})},s.prototype.getGroups=function(){return this.groupsData},s.prototype.removeItem=function(t){var e=this.itemsData.get(t),i=this.itemsData.getDataSet();e&&this.options.onRemove(e,function(e){e&&i.remove(t)})},s.prototype._getType=function(t){return t.type||this.options.type||(t.end?"range":"box")},s.prototype._getGroupId=function(t){var e=this._getType(t);return"background"==e&&void 0==t.group?g:this.groupsData?t.group:f},s.prototype._onUpdate=function(t){var e=this;t.forEach(function(t){var i=e.itemsData.get(t,e.itemOptions),o=e.items[t],n=e._getType(i),r=s.types[n];if(o&&(r&&o instanceof r?e._updateItem(o,i):(e._removeItem(o),o=null)),!o){if(!r)throw new TypeError("rangeoverflow"==n?'Item type "rangeoverflow" is deprecated. Use css styling instead: .vis.timeline .item.range .content {overflow: visible;}':'Unknown item type "'+n+'"');o=new r(i,e.conversion,e.options),o.id=t,e._addItem(o)}}),this._order(),this.stackDirty=!0,this.body.emitter.emit("change",{queue:!0})},s.prototype._onAdd=s.prototype._onUpdate,s.prototype._onRemove=function(t){var e=0,i=this;t.forEach(function(t){var s=i.items[t];s&&(e++,i._removeItem(s))}),e&&(this._order(),this.stackDirty=!0,this.body.emitter.emit("change",{queue:!0}))},s.prototype._order=function(){n.forEach(this.groups,function(t){t.order()})},s.prototype._onUpdateGroups=function(t){this._onAddGroups(t)},s.prototype._onAddGroups=function(t){var e=this;t.forEach(function(t){var i=e.groupsData.get(t),s=e.groups[t];if(s)s.setData(i);else{if(t==f||t==g)throw new Error("Illegal group id. "+t+" is a reserved id.");var o=Object.create(e.options);n.extend(o,{height:null}),s=new d(t,i,e),e.groups[t]=s;for(var r in e.items)if(e.items.hasOwnProperty(r)){var a=e.items[r];a.data.group==t&&s.add(a)}s.order(),s.show()}}),this.body.emitter.emit("change",{queue:!0})},s.prototype._onRemoveGroups=function(t){var e=this.groups;t.forEach(function(t){var i=e[t];i&&(i.hide(),delete e[t])}),this.markDirty(),this.body.emitter.emit("change",{queue:!0})},s.prototype._orderGroups=function(){if(this.groupsData){var t=this.groupsData.getIds({order:this.options.groupOrder}),e=!n.equalArray(t,this.groupIds);if(e){var i=this.groups;t.forEach(function(t){i[t].hide()}),t.forEach(function(t){i[t].show()}),this.groupIds=t}return e}return!1},s.prototype._addItem=function(t){this.items[t.id]=t;var e=this._getGroupId(t.data),i=this.groups[e];i&&i.add(t)},s.prototype._updateItem=function(t,e){var i=t.data.group;if(t.setData(e),i!=t.data.group){var s=this.groups[i];s&&s.remove(t);var o=this._getGroupId(t.data),n=this.groups[o];n&&n.add(t)}},s.prototype._removeItem=function(t){t.hide(),delete this.items[t.id];var e=this.selection.indexOf(t.id);-1!=e&&this.selection.splice(e,1),t.parent&&t.parent.remove(t)},s.prototype._constructByEndArray=function(t){for(var e=[],i=0;i0||o.length>0)&&this.body.emitter.emit("select",{items:a})}},s.prototype._onAddItem=function(t){if(this.options.selectable&&this.options.editable.add){var e=this,i=this.body.util.snap||null,o=s.itemFromTarget(t);if(o){var r=e.itemsData.get(o.id);this.options.onUpdate(r,function(t){t&&e.itemsData.getDataSet().update(t)})}else{var a=n.getAbsoluteLeft(this.dom.frame),h=t.gesture.center.pageX-a,d=this.body.util.toTime(h),l={start:i?i(d):d,content:"new item"};if("range"===this.options.type){var c=this.body.util.toTime(h+this.props.width/5);l.end=i?i(c):c}l[this.itemsData._fieldId]=n.randomUUID();var p=s.groupFromTarget(t);p&&(l.group=p.groupId),this.options.onAdd(l,function(t){t&&e.itemsData.getDataSet().add(t)})}}},s.prototype._onMultiSelectItem=function(t){if(this.options.selectable){var e,i=s.itemFromTarget(t);if(i){e=this.getSelection();var o=t.gesture.touches[0]&&t.gesture.touches[0].shiftKey||!1;if(o){e.push(i.id);var n=s._getItemRange(this.itemsData.get(e,this.itemOptions));e=[];for(var r in this.items)if(this.items.hasOwnProperty(r)){var a=this.items[r],h=a.data.start,d=void 0!==a.data.end?a.data.end:h;h>=n.min&&d<=n.max&&e.push(a.id)}}else{var l=e.indexOf(i.id);-1==l?e.push(i.id):e.splice(l,1)}this.setSelection(e),this.body.emitter.emit("select",{items:this.getSelection()})}}},s._getItemRange=function(t){var e=null,i=null;return t.forEach(function(t){(null==i||t.starte)&&(e=t.end):(null==e||t.start>e)&&(e=t.start)}),{min:i,max:e}},s.itemFromTarget=function(t){for(var e=t.target;e;){if(e.hasOwnProperty("timeline-item"))return e["timeline-item"];e=e.parentNode}return null},s.groupFromTarget=function(t){for(var e=t.target;e;){if(e.hasOwnProperty("timeline-group"))return e["timeline-group"];e=e.parentNode}return null},s.itemSetFromTarget=function(t){for(var e=t.target;e;){if(e.hasOwnProperty("timeline-itemset"))return e["timeline-itemset"];e=e.parentNode}return null},t.exports=s},function(t,e,i){function s(t,e,i,s){this.body=t,this.defaultOptions={enabled:!0,icons:!0,iconSize:20,iconSpacing:6,left:{visible:!0,position:"top-left"},right:{visible:!0,position:"top-left"}},this.side=i,this.options=o.extend({},this.defaultOptions),this.linegraphOptions=s,this.svgElements={},this.dom={},this.groups={},this.amountOfGroups=0,this._create(),this.setOptions(e)}var o=i(1),n=i(2),r=i(20);s.prototype=new r,s.prototype.clear=function(){this.groups={},this.amountOfGroups=0},s.prototype.addGroup=function(t,e){this.groups.hasOwnProperty(t)||(this.groups[t]=e),this.amountOfGroups+=1},s.prototype.updateGroup=function(t,e){this.groups[t]=e},s.prototype.removeGroup=function(t){this.groups.hasOwnProperty(t)&&(delete this.groups[t],this.amountOfGroups-=1)},s.prototype._create=function(){this.dom.frame=document.createElement("div"),this.dom.frame.className="legend",this.dom.frame.style.position="absolute",this.dom.frame.style.top="10px",this.dom.frame.style.display="block",this.dom.textArea=document.createElement("div"),this.dom.textArea.className="legendText",this.dom.textArea.style.position="relative",this.dom.textArea.style.top="0px",this.svg=document.createElementNS("http://www.w3.org/2000/svg","svg"),this.svg.style.position="absolute",this.svg.style.top="0px",this.svg.style.width=this.options.iconSize+5+"px",this.svg.style.height="100%",this.dom.frame.appendChild(this.svg),this.dom.frame.appendChild(this.dom.textArea)},s.prototype.hide=function(){this.dom.frame.parentNode&&this.dom.frame.parentNode.removeChild(this.dom.frame)},s.prototype.show=function(){this.dom.frame.parentNode||this.body.dom.center.appendChild(this.dom.frame)},s.prototype.setOptions=function(t){var e=["enabled","orientation","icons","left","right"];o.selectiveDeepExtend(e,this.options,t)},s.prototype.redraw=function(){var t=0;for(var e in this.groups)this.groups.hasOwnProperty(e)&&(1!=this.groups[e].visible||void 0!==this.linegraphOptions.visibility[e]&&1!=this.linegraphOptions.visibility[e]||t++);if(0==this.options[this.side].visible||0==this.amountOfGroups||0==this.options.enabled||0==t)this.hide();else{if(this.show(),"top-left"==this.options[this.side].position||"bottom-left"==this.options[this.side].position?(this.dom.frame.style.left="4px",this.dom.frame.style.textAlign="left",this.dom.textArea.style.textAlign="left",this.dom.textArea.style.left=this.options.iconSize+15+"px",this.dom.textArea.style.right="",this.svg.style.left="0px",this.svg.style.right=""):(this.dom.frame.style.right="4px",this.dom.frame.style.textAlign="right",this.dom.textArea.style.textAlign="right",this.dom.textArea.style.right=this.options.iconSize+15+"px",this.dom.textArea.style.left="",this.svg.style.right="0px",this.svg.style.left=""),"top-left"==this.options[this.side].position||"top-right"==this.options[this.side].position)this.dom.frame.style.top=4-Number(this.body.dom.center.style.top.replace("px",""))+"px",this.dom.frame.style.bottom="";else{var i=this.body.domProps.center.height-this.body.domProps.centerContainer.height;this.dom.frame.style.bottom=4+i+Number(this.body.dom.center.style.top.replace("px",""))+"px",this.dom.frame.style.top=""}0==this.options.icons?(this.dom.frame.style.width=this.dom.textArea.offsetWidth+10+"px",this.dom.textArea.style.right="",this.dom.textArea.style.left="",this.svg.style.width="0px"):(this.dom.frame.style.width=this.options.iconSize+15+this.dom.textArea.offsetWidth+10+"px",this.drawLegendIcons());var s="";for(var e in this.groups)this.groups.hasOwnProperty(e)&&(1!=this.groups[e].visible||void 0!==this.linegraphOptions.visibility[e]&&1!=this.linegraphOptions.visibility[e]||(s+=this.groups[e].content+"
"));this.dom.textArea.innerHTML=s,this.dom.textArea.style.lineHeight=.75*this.options.iconSize+this.options.iconSpacing+"px"}},s.prototype.drawLegendIcons=function(){if(this.dom.frame.parentNode){n.prepareElements(this.svgElements);var t=window.getComputedStyle(this.dom.frame).paddingTop,e=Number(t.replace("px","")),i=e,s=this.options.iconSize,o=.75*this.options.iconSize,r=e+.5*o+3;this.svg.style.width=s+5+e+"px";for(var a in this.groups)this.groups.hasOwnProperty(a)&&(1!=this.groups[a].visible||void 0!==this.linegraphOptions.visibility[a]&&1!=this.linegraphOptions.visibility[a]||(this.groups[a].drawIcon(i,r,this.svgElements,this.svg,s,o),r+=o+this.options.iconSpacing));n.cleanupElements(this.svgElements)}},t.exports=s},function(t,e,i){function s(t,e){this.id=o.randomUUID(),this.body=t,this.defaultOptions={yAxisOrientation:"left",defaultGroup:"default",sort:!0,sampling:!0,graphHeight:"400px",shaded:{enabled:!1,orientation:"bottom"},style:"line",barChart:{width:50,handleOverlap:"overlap",align:"center"},catmullRom:{enabled:!0,parametrization:"centripetal",alpha:.5},drawPoints:{enabled:!0,size:6,style:"square"},dataAxis:{showMinorLabels:!0,showMajorLabels:!0,icons:!1,width:"40px",visible:!0,alignZeros:!0,customRange:{left:{min:void 0,max:void 0},right:{min:void 0,max:void 0}}},legend:{enabled:!1,icons:!0,left:{visible:!0,position:"top-left"},right:{visible:!0,position:"top-right"}},groups:{visibility:{}}},this.options=o.extend({},this.defaultOptions),this.dom={},this.props={},this.hammer=null,this.groups={},this.abortedGraphUpdate=!1,this.autoSizeSVG=!1;var i=this;this.itemsData=null,this.groupsData=null,this.itemListeners={add:function(t,e){i._onAdd(e.items)},update:function(t,e){i._onUpdate(e.items)},remove:function(t,e){i._onRemove(e.items)}},this.groupListeners={add:function(t,e){i._onAddGroups(e.items)},update:function(t,e){i._onUpdateGroups(e.items)},remove:function(t,e){i._onRemoveGroups(e.items)}},this.items={},this.selection=[],this.lastStart=this.body.range.start,this.touchParams={},this.svgElements={},this.setOptions(e),this.groupsUsingDefaultStyles=[0],this.COUNTER=0,this.body.emitter.on("rangechanged",function(){i.lastStart=i.body.range.start,i.svg.style.left=o.option.asSize(-i.width),i.redraw.call(i,!0)}),this._create(),this.framework={svg:this.svg,svgElements:this.svgElements,options:this.options,groups:this.groups},this.body.emitter.emit("change")}var o=i(1),n=i(2),r=i(3),a=i(4),h=i(20),d=i(23),l=i(24),c=i(28),p=i(52),u="__ungrouped__";s.prototype=new h,s.prototype._create=function(){var t=document.createElement("div");t.className="LineGraph",this.dom.frame=t,this.svg=document.createElementNS("http://www.w3.org/2000/svg","svg"),this.svg.style.position="relative",this.svg.style.height=(""+this.options.graphHeight).replace("px","")+"px",this.svg.style.display="block",t.appendChild(this.svg),this.options.dataAxis.orientation="left",this.yAxisLeft=new d(this.body,this.options.dataAxis,this.svg,this.options.groups),this.options.dataAxis.orientation="right",this.yAxisRight=new d(this.body,this.options.dataAxis,this.svg,this.options.groups),delete this.options.dataAxis.orientation,this.legendLeft=new c(this.body,this.options.legend,"left",this.options.groups),this.legendRight=new c(this.body,this.options.legend,"right",this.options.groups),this.show()},s.prototype.setOptions=function(t){if(t){var e=["sampling","defaultGroup","graphHeight","yAxisOrientation","style","barChart","dataAxis","sort","groups"];void 0===t.graphHeight&&void 0!==t.height&&void 0!==this.body.domProps.centerContainer.height?this.autoSizeSVG=!0:void 0!==this.body.domProps.centerContainer.height&&void 0!==t.graphHeight&&parseInt((t.graphHeight+"").replace("px",""))0){var d=this.body.util.toGlobalTime(-this.body.domProps.root.width),l=this.body.util.toGlobalTime(2*this.body.domProps.root.width),c={};for(this._getRelevantData(a,c,d,l),this._applySampling(a,c),e=0;eu&&console.log("WARNING: there may be an infinite loop in the _updateGraph emitter cycle."),this.COUNTER=0,this.abortedGraphUpdate=!1,e=0;e0)for(r=0;rs){d.push(h);break}d.push(h)}}else for(a=0;ai&&h.x0)for(var s=0;s0){var n=1,r=o.length,a=this.body.util.toGlobalScreen(o[o.length-1].x)-this.body.util.toGlobalScreen(o[0].x),h=r/a;n=Math.min(Math.ceil(.2*r),Math.max(1,Math.round(h)));for(var d=[],l=0;r>l;l+=n)d.push(o[l]);e[t[s]]=d}}},s.prototype._getYRanges=function(t,e,i){var s,o,n,r,a=[],h=[];if(t.length>0){for(n=0;n0&&(o=this.groups[t[n]],"stack"==r.barChart.handleOverlap&&"bar"==r.style?"left"==r.yAxisOrientation?a=a.concat(o.getYRange(s)):h=h.concat(o.getYRange(s)):i[t[n]]=o.getYRange(s,t[n]));p.getStackedBarYRange(a,i,t,"__barchartLeft","left"),p.getStackedBarYRange(h,i,t,"__barchartRight","right")}},s.prototype._updateYAxis=function(t,e){var i,s,o=!1,n=!1,r=!1,a=1e9,h=1e9,d=-1e9,l=-1e9;if(t.length>0){for(var c=0;ci?i:a,d=s>d?s:d):(r=!0,h=h>i?i:h,l=s>l?s:l));1==n&&this.yAxisLeft.setRange(a,d),1==r&&this.yAxisRight.setRange(h,l)}return o=this._toggleAxisVisiblity(n,this.yAxisLeft)||o,o=this._toggleAxisVisiblity(r,this.yAxisRight)||o,1==r&&1==n?(this.yAxisLeft.drawIcons=!0,this.yAxisRight.drawIcons=!0):(this.yAxisLeft.drawIcons=!1,this.yAxisRight.drawIcons=!1),this.yAxisRight.master=!n,0==this.yAxisRight.master?(this.yAxisLeft.lineOffset=1==r?this.yAxisRight.width:0,o=this.yAxisLeft.redraw()||o,this.yAxisRight.stepPixelsForced=this.yAxisLeft.stepPixels,this.yAxisRight.zeroCrossing=this.yAxisLeft.zeroCrossing,o=this.yAxisRight.redraw()||o):o=this.yAxisRight.redraw()||o,-1!=t.indexOf("__barchartLeft")&&t.splice(t.indexOf("__barchartLeft"),1),-1!=t.indexOf("__barchartRight")&&t.splice(t.indexOf("__barchartRight"),1),o},s.prototype._toggleAxisVisiblity=function(t,e){var i=!1;return 0==t?e.dom.frame.parentNode&&0==e.hidden&&(e.hide(),i=!0):e.dom.frame.parentNode||1!=e.hidden||(e.show(),i=!0),i},s.prototype._convertXcoordinates=function(t){for(var e,i,s=[],o=this.body.util.toScreen,n=0;nc;){c++;var p=h.getCurrent(),u=this.body.util.toScreen(p),m=h.isMajor();this.options.showMinorLabels&&this._repaintMinorText(u,h.getLabelMinor(),t),m&&this.options.showMajorLabels?(u>0&&(void 0==l&&(l=u),this._repaintMajorText(u,h.getLabelMajor(),t)),this._repaintMajorLine(u,t)):this._repaintMinorLine(u,t),h.next()}if(this.options.showMajorLabels){var f=this.body.util.toTime(0),g=h.getLabelMajor(f),v=g.length*(this.props.majorCharWidth||10)+10;(void 0==l||l>v)&&this._repaintMajorText(0,g,t)}o.forEach(this.dom.redundant,function(t){for(;t.length;){var e=t.pop();e&&e.parentNode&&e.parentNode.removeChild(e)}})},s.prototype._repaintMinorText=function(t,e,i){var s=this.dom.redundant.minorTexts.shift();if(!s){var o=document.createTextNode("");s=document.createElement("div"),s.appendChild(o),s.className="text minor",this.dom.foreground.appendChild(s)}this.dom.minorTexts.push(s),s.childNodes[0].nodeValue=e,s.style.top="top"==i?this.props.majorLabelHeight+"px":"0",s.style.left=t+"px"},s.prototype._repaintMajorText=function(t,e,i){var s=this.dom.redundant.majorTexts.shift();if(!s){var o=document.createTextNode(e);s=document.createElement("div"),s.className="text major",s.appendChild(o),this.dom.foreground.appendChild(s)}this.dom.majorTexts.push(s),s.childNodes[0].nodeValue=e,s.style.top="top"==i?"0":this.props.minorLabelHeight+"px",s.style.left=t+"px"},s.prototype._repaintMinorLine=function(t,e){var i=this.dom.redundant.minorLines.shift();i||(i=document.createElement("div"),i.className="grid vertical minor",this.dom.background.appendChild(i)),this.dom.minorLines.push(i);var s=this.props;i.style.top="top"==e?s.majorLabelHeight+"px":this.body.domProps.top.height+"px",i.style.height=s.minorLineHeight+"px",i.style.left=t-s.minorLineWidth/2+"px"},s.prototype._repaintMajorLine=function(t,e){var i=this.dom.redundant.majorLines.shift();i||(i=document.createElement("DIV"),i.className="grid vertical major",this.dom.background.appendChild(i)),this.dom.majorLines.push(i);var s=this.props;i.style.top="top"==e?"0":this.body.domProps.top.height+"px",i.style.left=t-s.majorLineWidth/2+"px",i.style.height=s.majorLineHeight+"px"},s.prototype._calculateCharSize=function(){this.dom.measureCharMinor||(this.dom.measureCharMinor=document.createElement("DIV"),this.dom.measureCharMinor.className="text minor measure",this.dom.measureCharMinor.style.position="absolute",this.dom.measureCharMinor.appendChild(document.createTextNode("0")),this.dom.foreground.appendChild(this.dom.measureCharMinor)),this.props.minorCharHeight=this.dom.measureCharMinor.clientHeight,this.props.minorCharWidth=this.dom.measureCharMinor.clientWidth,this.dom.measureCharMajor||(this.dom.measureCharMajor=document.createElement("DIV"),this.dom.measureCharMajor.className="text major measure",this.dom.measureCharMajor.style.position="absolute",this.dom.measureCharMajor.appendChild(document.createTextNode("0")),this.dom.foreground.appendChild(this.dom.measureCharMajor)),this.props.majorCharHeight=this.dom.measureCharMajor.clientHeight,this.props.majorCharWidth=this.dom.measureCharMajor.clientWidth},s.prototype.snap=function(t){return this.step.snap(t)},t.exports=s},function(t,e,i){function s(t,e,i){this.id=null,this.parent=null,this.data=t,this.dom=null,this.conversion=e||{},this.options=i||{},this.selected=!1,this.displayed=!1,this.dirty=!0,this.top=null,this.left=null,this.width=null,this.height=null}var o=i(45),n=i(1);s.prototype.stack=!0,s.prototype.select=function(){this.selected=!0,this.dirty=!0,this.displayed&&this.redraw()},s.prototype.unselect=function(){this.selected=!1,this.dirty=!0,this.displayed&&this.redraw()},s.prototype.setData=function(t){this.data=t,this.dirty=!0,this.displayed&&this.redraw()},s.prototype.setParent=function(t){this.displayed?(this.hide(),this.parent=t,this.parent&&this.show()):this.parent=t},s.prototype.isVisible=function(){return!1},s.prototype.show=function(){return!1},s.prototype.hide=function(){return!1},s.prototype.redraw=function(){},s.prototype.repositionX=function(){},s.prototype.repositionY=function(){},s.prototype._repaintDeleteButton=function(t){if(this.selected&&this.options.editable.remove&&!this.dom.deleteButton){var e=this,i=document.createElement("div");i.className="delete",i.title="Delete this item",o(i,{preventDefault:!0}).on("tap",function(t){e.parent.removeFromDataSet(e),t.stopPropagation()}),t.appendChild(i),this.dom.deleteButton=i}else!this.selected&&this.dom.deleteButton&&(this.dom.deleteButton.parentNode&&this.dom.deleteButton.parentNode.removeChild(this.dom.deleteButton),this.dom.deleteButton=null)},s.prototype._updateContents=function(t){var e;if(this.options.template){var i=this.parent.itemSet.itemsData.get(this.id);e=this.options.template(i)}else e=this.data.content;if(e!==this.content){if(e instanceof Element)t.innerHTML="",t.appendChild(e);else if(void 0!=e)t.innerHTML=e;else if("background"!=this.data.type||void 0!==this.data.content)throw new Error('Property "content" missing in item '+this.id);this.content=e}},s.prototype._updateTitle=function(t){null!=this.data.title?t.title=this.data.title||"":t.removeAttribute("title")},s.prototype._updateDataAttributes=function(t){if(this.options.dataAttributes&&this.options.dataAttributes.length>0){var e=[];if(Array.isArray(this.options.dataAttributes))e=this.options.dataAttributes;else{if("all"!=this.options.dataAttributes)return;e=Object.keys(this.data)}for(var i=0;it.start},s.prototype.redraw=function(){var t=this.dom;if(t||(this.dom={},t=this.dom,t.box=document.createElement("div"),t.content=document.createElement("div"),t.content.className="content",t.box.appendChild(t.content),this.dirty=!0),!this.parent)throw new Error("Cannot redraw item: no parent attached");if(!t.box.parentNode){var e=this.parent.dom.background;if(!e)throw new Error("Cannot redraw item: parent has no background container element");e.appendChild(t.box)}if(this.displayed=!0,this.dirty){this._updateContents(this.dom.content),this._updateTitle(this.dom.content),this._updateDataAttributes(this.dom.content),this._updateStyle(this.dom.box);var i=(this.data.className?" "+this.data.className:"")+(this.selected?" selected":"");t.box.className=this.baseClassName+i,this.overflow="hidden"!==window.getComputedStyle(t.content).overflow,this.props.content.width=this.dom.content.offsetWidth,this.height=0,this.dirty=!1}},s.prototype.show=r.prototype.show,s.prototype.hide=r.prototype.hide,s.prototype.repositionX=r.prototype.repositionX,s.prototype.repositionY=function(t){var e="top"===this.options.orientation;this.dom.content.style.top=e?"":"0",this.dom.content.style.bottom=e?"0":"";var i;if(void 0!==this.data.subgroup){var s=this.data.subgroup,o=this.parent.subgroups,r=o[s].index;if(1==e){i=this.parent.subgroups[s].height+t.item.vertical,i+=0==r?t.axis-.5*t.item.vertical:0;var a=this.parent.top;for(var h in o)o.hasOwnProperty(h)&&1==o[h].visible&&o[h].indexr&&(a+=o[h].height+t.item.vertical);i=this.parent.subgroups[s].height+t.item.vertical,this.dom.box.style.top=a+"px",this.dom.box.style.bottom=""}}else this.parent instanceof n?(i=Math.max(this.parent.height,this.parent.itemSet.body.domProps.center.height,this.parent.itemSet.body.domProps.centerContainer.height),this.dom.box.style.top=e?"0":"",this.dom.box.style.bottom=e?"":"0"):(i=this.parent.height,this.dom.box.style.top=this.parent.top+"px",this.dom.box.style.bottom="");this.dom.box.style.height=i+"px"},t.exports=s},function(t,e,i){function s(t,e,i){if(this.props={dot:{width:0,height:0},line:{width:0,height:0}},t&&void 0==t.start)throw new Error('Property "start" missing in item '+t);o.call(this,t,e,i)}{var o=i(31);i(1)}s.prototype=new o(null,null,null),s.prototype.isVisible=function(t){var e=(t.end-t.start)/4;return this.data.start>t.start-e&&this.data.startt.start-e&&this.data.startt.start},s.prototype.redraw=function(){var t=this.dom;if(t||(this.dom={},t=this.dom,t.box=document.createElement("div"),t.content=document.createElement("div"),t.content.className="content",t.box.appendChild(t.content),t.box["timeline-item"]=this,this.dirty=!0),!this.parent)throw new Error("Cannot redraw item: no parent attached");if(!t.box.parentNode){var e=this.parent.dom.foreground;if(!e)throw new Error("Cannot redraw item: parent has no foreground container element");e.appendChild(t.box)}if(this.displayed=!0,this.dirty){this._updateContents(this.dom.content),this._updateTitle(this.dom.box),this._updateDataAttributes(this.dom.box),this._updateStyle(this.dom.box);var i=(this.data.className?" "+this.data.className:"")+(this.selected?" selected":"");t.box.className=this.baseClassName+i,this.overflow="hidden"!==window.getComputedStyle(t.content).overflow,this.dom.content.style.maxWidth="none",this.props.content.width=this.dom.content.offsetWidth,this.height=this.dom.box.offsetHeight,this.dom.content.style.maxWidth="",this.dirty=!1}this._repaintDeleteButton(t.box),this._repaintDragLeft(),this._repaintDragRight()},s.prototype.show=function(){this.displayed||this.redraw()},s.prototype.hide=function(){if(this.displayed){var t=this.dom.box;t.parentNode&&t.parentNode.removeChild(t),this.top=null,this.left=null,this.displayed=!1}},s.prototype.repositionX=function(){var t,e,i=this.parent.width,s=this.conversion.toScreen(this.data.start),o=this.conversion.toScreen(this.data.end);-i>s&&(s=-i),o>2*i&&(o=2*i);var n=Math.max(o-s,1);switch(this.overflow?(this.left=s,this.width=n+this.props.content.width,e=this.props.content.width):(this.left=s,this.width=n,e=Math.min(o-s-2*this.options.padding,this.props.content.width)),this.dom.box.style.left=this.left+"px",this.dom.box.style.width=n+"px",this.options.align){case"left":this.dom.content.style.left="0";break;case"right":this.dom.content.style.left=Math.max(n-e-2*this.options.padding,0)+"px";break;case"center":this.dom.content.style.left=Math.max((n-e-2*this.options.padding)/2,0)+"px";break;default:t=this.overflow?o>0?Math.max(-s,0):-e:0>s?Math.min(-s,o-s-e-2*this.options.padding):0,this.dom.content.style.left=t+"px"}},s.prototype.repositionY=function(){var t=this.options.orientation,e=this.dom.box;e.style.top="top"==t?this.top+"px":this.parent.height-this.top-this.height+"px"},s.prototype._repaintDragLeft=function(){if(this.selected&&this.options.editable.updateTime&&!this.dom.dragLeft){var t=document.createElement("div");t.className="drag-left",t.dragLeftItem=this,o(t,{preventDefault:!0}).on("drag",function(){}),this.dom.box.appendChild(t),this.dom.dragLeft=t}else!this.selected&&this.dom.dragLeft&&(this.dom.dragLeft.parentNode&&this.dom.dragLeft.parentNode.removeChild(this.dom.dragLeft),this.dom.dragLeft=null)},s.prototype._repaintDragRight=function(){if(this.selected&&this.options.editable.updateTime&&!this.dom.dragRight){var t=document.createElement("div");t.className="drag-right",t.dragRightItem=this,o(t,{preventDefault:!0}).on("drag",function(){}),this.dom.box.appendChild(t),this.dom.dragRight=t}else!this.selected&&this.dom.dragRight&&(this.dom.dragRight.parentNode&&this.dom.dragRight.parentNode.removeChild(this.dom.dragRight),this.dom.dragRight=null)},t.exports=s},function(t,e,i){function s(t,e,i){if(!(this instanceof s))throw new SyntaxError("Constructor must be called with the new operator");this._initializeMixinLoaders(),this.containerElement=t,this.renderRefreshRate=60,this.renderTimestep=1e3/this.renderRefreshRate,this.renderTime=.5*this.renderTimestep,this.maxPhysicsTicksPerRender=3,this.physicsDiscreteStepsize=.5,this.initializing=!0,this.triggerFunctions={add:null,edit:null,editEdge:null,connect:null,del:null},this.defaultOptions={nodes:{mass:1,radiusMin:10,radiusMax:30,radius:10,shape:"ellipse",image:void 0,widthMin:16,widthMax:64,fontColor:"black",fontSize:14,fontFace:"verdana",fontFill:void 0,level:-1,color:{border:"#2B7CE9",background:"#97C2FC",highlight:{border:"#2B7CE9",background:"#D2E5FF"},hover:{border:"#2B7CE9",background:"#D2E5FF"}},borderColor:"#2B7CE9",backgroundColor:"#97C2FC",highlightColor:"#D2E5FF",group:void 0,borderWidth:1,borderWidthSelected:void 0},edges:{widthMin:1,widthMax:15,width:1,widthSelectionMultiplier:2,hoverWidth:1.5,style:"line",color:{color:"#848484",highlight:"#848484",hover:"#848484"},fontColor:"#343434",fontSize:14,fontFace:"arial",fontFill:"white",arrowScaleFactor:1,dash:{length:10,gap:5,altLength:void 0},inheritColor:"from"},configurePhysics:!1,physics:{barnesHut:{enabled:!0,theta:1/.6,gravitationalConstant:-2e3,centralGravity:.3,springLength:95,springConstant:.04,damping:.09},repulsion:{centralGravity:0,springLength:200,springConstant:.05,nodeDistance:100,damping:.09},hierarchicalRepulsion:{enabled:!1,centralGravity:0,springLength:100,springConstant:.01,nodeDistance:150,damping:.09},damping:null,centralGravity:null,springLength:null,springConstant:null},clustering:{enabled:!1,initialMaxNodes:100,clusterThreshold:500,reduceToNodes:300,chainThreshold:.4,clusterEdgeThreshold:20,sectorThreshold:100,screenSizeThreshold:.2,fontSizeMultiplier:4,maxFontSize:1e3,forceAmplification:.1,distanceAmplification:.1,edgeGrowth:20,nodeScaling:{width:1,height:1,radius:1},maxNodeSizeIncrements:600,activeAreaBoxSize:80,clusterLevelDifference:2},navigation:{enabled:!1},keyboard:{enabled:!1,speed:{x:10,y:10,zoom:.02}},dataManipulation:{enabled:!1,initiallyVisible:!1},hierarchicalLayout:{enabled:!1,levelSeparation:150,nodeSpacing:100,direction:"UD",layout:"hubsize"},freezeForStabilization:!1,smoothCurves:{enabled:!0,dynamic:!0,type:"continuous",roundness:.5},maxVelocity:30,minVelocity:.1,stabilize:!0,stabilizationIterations:1e3,locale:"en",locales:_,tooltip:{delay:300,fontColor:"black",fontSize:14,fontFace:"verdana",color:{border:"#666",background:"#FFFFC6"}},dragNetwork:!0,dragNodes:!0,zoomable:!0,hover:!1,hideEdgesOnDrag:!1,hideNodesOnDrag:!1,width:"100%",height:"100%",selectable:!0},this.constants=a.extend({},this.defaultOptions),this.pixelRatio=1,this.hoverObj={nodes:{},edges:{}},this.controlNodesActive=!1,this.navigationHammers={existing:[],_new:[]},this.animationSpeed=1/this.renderRefreshRate,this.animationEasingFunction="easeInOutQuint",this.easingTime=0,this.sourceScale=0,this.targetScale=0,this.sourceTranslation=0,this.targetTranslation=0,this.lockedOnNodeId=null,this.lockedOnNodeOffset=null,this.touchTime=0;var o=this;this.groups=new u,this.images=new m,this.images.setOnloadCallback(function(){o._redraw()}),this.xIncrement=0,this.yIncrement=0,this.zoomIncrement=0,this._loadPhysicsSystem(),this._create(),this._loadSectorSystem(),this._loadClusterSystem(),this._loadSelectionSystem(),this._loadHierarchySystem(),this._setTranslation(this.frame.clientWidth/2,this.frame.clientHeight/2),this._setScale(1),this.setOptions(i),this.freezeSimulation=!1,this.cachedFunctions={},this.startedStabilization=!1,this.stabilized=!1,this.stabilizationIterations=null,this.draggingNodes=!1,this.calculationNodes={},this.calculationNodeIndices=[],this.nodeIndices=[],this.nodes={},this.edges={},this.canvasTopLeft={x:0,y:0},this.canvasBottomRight={x:0,y:0},this.pointerPosition={x:0,y:0},this.areaCenter={},this.scale=1,this.previousScale=this.scale,this.nodesData=null,this.edgesData=null,this.nodesListeners={add:function(t,e){o._addNodes(e.items),o.start()},update:function(t,e){o._updateNodes(e.items,e.data),o.start()},remove:function(t,e){o._removeNodes(e.items),o.start()}},this.edgesListeners={add:function(t,e){o._addEdges(e.items),o.start()},update:function(t,e){o._updateEdges(e.items),o.start()},remove:function(t,e){o._removeEdges(e.items),o.start()}},this.moving=!0,this.timer=void 0,this.setData(e,this.constants.clustering.enabled||this.constants.hierarchicalLayout.enabled),this.initializing=!1,1==this.constants.hierarchicalLayout.enabled?this._setupHierarchicalLayout():0==this.constants.stabilize&&this.zoomExtent(void 0,!0,this.constants.clustering.enabled),this.constants.clustering.enabled&&this.startWithClustering()}var o=i(56),n=i(45),r=i(57),a=i(1),h=i(47),d=i(3),l=i(4),c=i(42),p=i(43),u=i(38),m=i(39),f=i(40),g=i(37),v=i(41),y=i(54),b=i(55),_=i(49);i(50),o(s.prototype),s.prototype._getScriptPath=function(){for(var t=document.getElementsByTagName("script"),e=0;et.x&&(s=t.x),ot.y&&(e=t.y),i=this.constants.clustering.initialMaxNodes?49.07548/(n+142.05338)+91444e-8:12.662/(n+7.4147)+.0964822:1==this.constants.clustering.enabled&&n>=this.constants.clustering.initialMaxNodes?77.5271985/(n+187.266146)+476710517e-13:30.5062972/(n+19.93597763)+.08413486;var r=Math.min(this.frame.canvas.clientWidth/600,this.frame.canvas.clientHeight/600);s*=r}else{var a=1.1*Math.abs(o.maxX-o.minX),h=1.1*Math.abs(o.maxY-o.minY),d=this.frame.canvas.clientWidth/a,l=this.frame.canvas.clientHeight/h;s=l>=d?d:l}s>1&&(s=1);var c=this._findCenter(o);if(0==i){var p={position:c,scale:s,animation:t};this.moveTo(p),this.moving=!0,this.start()}else c.x*=s,c.y*=s,c.x-=.5*this.frame.canvas.clientWidth,c.y-=.5*this.frame.canvas.clientHeight,this._setScale(s),this._setTranslation(-c.x,-c.y)},s.prototype._updateNodeIndexList=function(){this._clearNodeIndexList();for(var t in this.nodes)this.nodes.hasOwnProperty(t)&&this.nodeIndices.push(t)},s.prototype.setData=function(t,e){if(void 0===e&&(e=!1),this.initializing=!0,t&&t.dot&&(t.nodes||t.edges))throw new SyntaxError('Data must contain either parameter "dot" or parameter pair "nodes" and "edges", but not both.');if(this.setOptions(t&&t.options),t&&t.dot){if(t&&t.dot){var i=c.DOTToGraph(t.dot);return void this.setData(i)}}else if(t&&t.gephi){if(t&&t.gephi){var s=p.parseGephi(t.gephi);return void this.setData(s)}}else this._setNodes(t&&t.nodes),this._setEdges(t&&t.edges);this._putDataInSector(),0==e&&(1==this.constants.hierarchicalLayout.enabled?(this._resetLevels(),this._setupHierarchicalLayout()):this.constants.stabilize&&this._stabilize(),this.start()),this.initializing=!1},s.prototype.setOptions=function(t){if(t){var e,i=["nodes","edges","smoothCurves","hierarchicalLayout","clustering","navigation","keyboard","dataManipulation","onAdd","onEdit","onEditEdge","onConnect","onDelete","clickToUse"];if(a.selectiveNotDeepExtend(i,this.constants,t),a.selectiveNotDeepExtend(["color"],this.constants.nodes,t.nodes),a.selectiveNotDeepExtend(["color","length"],this.constants.edges,t.edges),t.physics&&(a.mergeOptions(this.constants.physics,t.physics,"barnesHut"),a.mergeOptions(this.constants.physics,t.physics,"repulsion"),t.physics.hierarchicalRepulsion)){this.constants.hierarchicalLayout.enabled=!0,this.constants.physics.hierarchicalRepulsion.enabled=!0,this.constants.physics.barnesHut.enabled=!1; for(e in t.physics.hierarchicalRepulsion)t.physics.hierarchicalRepulsion.hasOwnProperty(e)&&(this.constants.physics.hierarchicalRepulsion[e]=t.physics.hierarchicalRepulsion[e])}if(t.onAdd&&(this.triggerFunctions.add=t.onAdd),t.onEdit&&(this.triggerFunctions.edit=t.onEdit),t.onEditEdge&&(this.triggerFunctions.editEdge=t.onEditEdge),t.onConnect&&(this.triggerFunctions.connect=t.onConnect),t.onDelete&&(this.triggerFunctions.del=t.onDelete),a.mergeOptions(this.constants,t,"smoothCurves"),a.mergeOptions(this.constants,t,"hierarchicalLayout"),a.mergeOptions(this.constants,t,"clustering"),a.mergeOptions(this.constants,t,"navigation"),a.mergeOptions(this.constants,t,"keyboard"),a.mergeOptions(this.constants,t,"dataManipulation"),t.dataManipulation&&(this.editMode=this.constants.dataManipulation.initiallyVisible),t.edges&&(void 0!==t.edges.color&&(a.isString(t.edges.color)?(this.constants.edges.color={},this.constants.edges.color.color=t.edges.color,this.constants.edges.color.highlight=t.edges.color,this.constants.edges.color.hover=t.edges.color):(void 0!==t.edges.color.color&&(this.constants.edges.color.color=t.edges.color.color),void 0!==t.edges.color.highlight&&(this.constants.edges.color.highlight=t.edges.color.highlight),void 0!==t.edges.color.hover&&(this.constants.edges.color.hover=t.edges.color.hover))),t.edges.fontColor||void 0!==t.edges.color&&(a.isString(t.edges.color)?this.constants.edges.fontColor=t.edges.color:void 0!==t.edges.color.color&&(this.constants.edges.fontColor=t.edges.color.color))),t.nodes&&t.nodes.color){var s=a.parseColor(t.nodes.color);this.constants.nodes.color.background=s.background,this.constants.nodes.color.border=s.border,this.constants.nodes.color.highlight.background=s.highlight.background,this.constants.nodes.color.highlight.border=s.highlight.border,this.constants.nodes.color.hover.background=s.hover.background,this.constants.nodes.color.hover.border=s.hover.border}if(t.groups)for(var o in t.groups)if(t.groups.hasOwnProperty(o)){var n=t.groups[o];this.groups.add(o,n)}if(t.tooltip){for(e in t.tooltip)t.tooltip.hasOwnProperty(e)&&(this.constants.tooltip[e]=t.tooltip[e]);t.tooltip.color&&(this.constants.tooltip.color=a.parseColor(t.tooltip.color))}if("clickToUse"in t&&(t.clickToUse?(this.activator=new b(this.frame),this.activator.on("change",this._createKeyBinds.bind(this))):this.activator&&(this.activator.destroy(),delete this.activator)),t.labels)throw new Error('Option "labels" is deprecated. Use options "locale" and "locales" instead.')}this._loadPhysicsSystem(),this._loadNavigationControls(),this._loadManipulationSystem(),this._configureSmoothCurves(),this._createKeyBinds(),this.setSize(this.constants.width,this.constants.height),this.moving=!0,this.start()},s.prototype._create=function(){for(;this.containerElement.hasChildNodes();)this.containerElement.removeChild(this.containerElement.firstChild);if(this.frame=document.createElement("div"),this.frame.className="vis network-frame",this.frame.style.position="relative",this.frame.style.overflow="hidden",this.frame.canvas=document.createElement("canvas"),this.frame.canvas.style.position="relative",this.frame.appendChild(this.frame.canvas),this.frame.canvas.getContext){var t=this.frame.canvas.getContext("2d");this.pixelRatio=(window.devicePixelRatio||1)/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1),this.frame.canvas.getContext("2d").setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}else{var e=document.createElement("DIV");e.style.color="red",e.style.fontWeight="bold",e.style.padding="10px",e.innerHTML="Error: your browser does not support HTML canvas",this.frame.canvas.appendChild(e)}var i=this;this.drag={},this.pinch={},this.hammer=n(this.frame.canvas,{prevent_default:!0}),this.hammer.on("tap",i._onTap.bind(i)),this.hammer.on("doubletap",i._onDoubleTap.bind(i)),this.hammer.on("hold",i._onHold.bind(i)),this.hammer.on("pinch",i._onPinch.bind(i)),this.hammer.on("touch",i._onTouch.bind(i)),this.hammer.on("dragstart",i._onDragStart.bind(i)),this.hammer.on("drag",i._onDrag.bind(i)),this.hammer.on("dragend",i._onDragEnd.bind(i)),this.hammer.on("mousewheel",i._onMouseWheel.bind(i)),this.hammer.on("DOMMouseScroll",i._onMouseWheel.bind(i)),this.hammer.on("mousemove",i._onMouseMoveTitle.bind(i)),this.hammerFrame=n(this.frame,{prevent_default:!0}),this.hammerFrame.on("release",i._onRelease.bind(i)),this.containerElement.appendChild(this.frame)},s.prototype._createKeyBinds=function(){var t=this;void 0!==this.keycharm&&this.keycharm.destroy(),this.keycharm=r(),this.keycharm.reset(),this.constants.keyboard.enabled&&this.isActive()&&(this.keycharm.bind("up",this._moveUp.bind(t),"keydown"),this.keycharm.bind("up",this._yStopMoving.bind(t),"keyup"),this.keycharm.bind("down",this._moveDown.bind(t),"keydown"),this.keycharm.bind("down",this._yStopMoving.bind(t),"keyup"),this.keycharm.bind("left",this._moveLeft.bind(t),"keydown"),this.keycharm.bind("left",this._xStopMoving.bind(t),"keyup"),this.keycharm.bind("right",this._moveRight.bind(t),"keydown"),this.keycharm.bind("right",this._xStopMoving.bind(t),"keyup"),this.keycharm.bind("=",this._zoomIn.bind(t),"keydown"),this.keycharm.bind("=",this._stopZoom.bind(t),"keyup"),this.keycharm.bind("num+",this._zoomIn.bind(t),"keydown"),this.keycharm.bind("num+",this._stopZoom.bind(t),"keyup"),this.keycharm.bind("num-",this._zoomOut.bind(t),"keydown"),this.keycharm.bind("num-",this._stopZoom.bind(t),"keyup"),this.keycharm.bind("-",this._zoomOut.bind(t),"keydown"),this.keycharm.bind("-",this._stopZoom.bind(t),"keyup"),this.keycharm.bind("[",this._zoomIn.bind(t),"keydown"),this.keycharm.bind("[",this._stopZoom.bind(t),"keyup"),this.keycharm.bind("]",this._zoomOut.bind(t),"keydown"),this.keycharm.bind("]",this._stopZoom.bind(t),"keyup"),this.keycharm.bind("pageup",this._zoomIn.bind(t),"keydown"),this.keycharm.bind("pageup",this._stopZoom.bind(t),"keyup"),this.keycharm.bind("pagedown",this._zoomOut.bind(t),"keydown"),this.keycharm.bind("pagedown",this._stopZoom.bind(t),"keyup")),1==this.constants.dataManipulation.enabled&&(this.keycharm.bind("esc",this._createManipulatorBar.bind(t)),this.keycharm.bind("delete",this._deleteSelected.bind(t)))},s.prototype._getPointer=function(t){return{x:t.pageX-a.getAbsoluteLeft(this.frame.canvas),y:t.pageY-a.getAbsoluteTop(this.frame.canvas)}},s.prototype._onTouch=function(t){(new Date).valueOf()-this.touchTime>100&&(this.drag.pointer=this._getPointer(t.gesture.center),this.drag.pinched=!1,this.pinch.scale=this._getScale(),this.touchTime=(new Date).valueOf(),this._handleTouch(this.drag.pointer))},s.prototype._onDragStart=function(){this._handleDragStart()},s.prototype._handleDragStart=function(){var t=this.drag,e=this._getNodeAt(t.pointer);if(t.dragging=!0,t.selection=[],t.translation=this._getTranslation(),t.nodeId=null,this.draggingNodes=!1,null!=e&&1==this.constants.dragNodes){this.draggingNodes=!0,t.nodeId=e.id,e.isSelected()||this._selectObject(e,!1),this.emit("dragStart",{nodeIds:this.getSelection().nodes});for(var i in this.selectionObj.nodes)if(this.selectionObj.nodes.hasOwnProperty(i)){var s=this.selectionObj.nodes[i],o={id:s.id,node:s,x:s.x,y:s.y,xFixed:s.xFixed,yFixed:s.yFixed};s.xFixed=!0,s.yFixed=!0,t.selection.push(o)}}},s.prototype._onDrag=function(t){this._handleOnDrag(t)},s.prototype._handleOnDrag=function(t){if(!this.drag.pinched){this.releaseNode();var e=this._getPointer(t.gesture.center),i=this,s=this.drag,o=s.selection;if(o&&o.length&&1==this.constants.dragNodes){var n=e.x-s.pointer.x,r=e.y-s.pointer.y;o.forEach(function(t){var e=t.node;t.xFixed||(e.x=i._XconvertDOMtoCanvas(i._XconvertCanvasToDOM(t.x)+n)),t.yFixed||(e.y=i._YconvertDOMtoCanvas(i._YconvertCanvasToDOM(t.y)+r))}),this.moving||(this.moving=!0,this.start())}else if(1==this.constants.dragNetwork){var a=e.x-this.drag.pointer.x,h=e.y-this.drag.pointer.y;this._setTranslation(this.drag.translation.x+a,this.drag.translation.y+h),this._redraw()}}},s.prototype._onDragEnd=function(t){this._handleDragEnd(t)},s.prototype._handleDragEnd=function(){this.drag.dragging=!1;var t=this.drag.selection;t&&t.length?(t.forEach(function(t){t.node.xFixed=t.xFixed,t.node.yFixed=t.yFixed}),this.moving=!0,this.start()):this._redraw(),0==this.draggingNodes?this.emit("dragEnd",{nodeIds:[]}):this.emit("dragEnd",{nodeIds:this.getSelection().nodes})},s.prototype._onTap=function(t){var e=this._getPointer(t.gesture.center);this.pointerPosition=e,this._handleTap(e)},s.prototype._onDoubleTap=function(t){var e=this._getPointer(t.gesture.center);this._handleDoubleTap(e)},s.prototype._onHold=function(t){var e=this._getPointer(t.gesture.center);this.pointerPosition=e,this._handleOnHold(e)},s.prototype._onRelease=function(t){var e=this._getPointer(t.gesture.center);this._handleOnRelease(e)},s.prototype._onPinch=function(t){var e=this._getPointer(t.gesture.center);this.drag.pinched=!0,"scale"in this.pinch||(this.pinch.scale=1);var i=this.pinch.scale*t.gesture.scale;this._zoom(i,e)},s.prototype._zoom=function(t,e){if(1==this.constants.zoomable){var i=this._getScale();1e-5>t&&(t=1e-5),t>10&&(t=10);var s=null;void 0!==this.drag&&1==this.drag.dragging&&(s=this.DOMtoCanvas(this.drag.pointer));var o=this._getTranslation(),n=t/i,r=(1-n)*e.x+o.x*n,a=(1-n)*e.y+o.y*n;if(this.areaCenter={x:this._XconvertDOMtoCanvas(e.x),y:this._YconvertDOMtoCanvas(e.y)},this._setScale(t),this._setTranslation(r,a),this.updateClustersDefault(),null!=s){var h=this.canvasToDOM(s);this.drag.pointer.x=h.x,this.drag.pointer.y=h.y}return this._redraw(),t>i?this.emit("zoom",{direction:"+"}):this.emit("zoom",{direction:"-"}),t}},s.prototype._onMouseWheel=function(t){var e=0;if(t.wheelDelta?e=t.wheelDelta/120:t.detail&&(e=-t.detail/3),e){var i=this._getScale(),s=e/10;0>e&&(s/=1-s),i*=1+s;var o=h.fakeGesture(this,t),n=this._getPointer(o.center);this._zoom(i,n)}t.preventDefault()},s.prototype._onMouseMoveTitle=function(t){var e=h.fakeGesture(this,t),i=this._getPointer(e.center);this.popupObj&&this._checkHidePopup(i);var s=this,o=function(){s._checkShowPopup(i)};if(this.popupTimer&&clearInterval(this.popupTimer),this.drag.dragging||(this.popupTimer=setTimeout(o,this.constants.tooltip.delay)),1==this.constants.hover){for(var n in this.hoverObj.edges)this.hoverObj.edges.hasOwnProperty(n)&&(this.hoverObj.edges[n].hover=!1,delete this.hoverObj.edges[n]);var r=this._getNodeAt(i);null==r&&(r=this._getEdgeAt(i)),null!=r&&this._hoverObject(r);for(var a in this.hoverObj.nodes)this.hoverObj.nodes.hasOwnProperty(a)&&(r instanceof f&&r.id!=a||r instanceof g||null==r)&&(this._blurObject(this.hoverObj.nodes[a]),delete this.hoverObj.nodes[a]);this.redraw()}},s.prototype._checkShowPopup=function(t){var e,i={left:this._XconvertDOMtoCanvas(t.x),top:this._YconvertDOMtoCanvas(t.y),right:this._XconvertDOMtoCanvas(t.x),bottom:this._YconvertDOMtoCanvas(t.y)},s=this.popupObj;if(void 0==this.popupObj){var o=this.nodes;for(e in o)if(o.hasOwnProperty(e)){var n=o[e];if(void 0!==n.getTitle()&&n.isOverlappingWith(i)){this.popupObj=n;break}}}if(void 0===this.popupObj){var r=this.edges;for(e in r)if(r.hasOwnProperty(e)){var a=r[e];if(a.connected&&void 0!==a.getTitle()&&a.isOverlappingWith(i)){this.popupObj=a;break}}}if(this.popupObj){if(this.popupObj!=s){var h=this;h.popup||(h.popup=new v(h.frame,h.constants.tooltip)),h.popup.setPosition(t.x-3,t.y-3),h.popup.setText(h.popupObj.getTitle()),h.popup.show()}}else this.popup&&this.popup.hide()},s.prototype._checkHidePopup=function(t){this.popupObj&&this._getNodeAt(t)||(this.popupObj=void 0,this.popup&&this.popup.hide())},s.prototype.setSize=function(t,e){var i=!1,s=this.frame.canvas.width,o=this.frame.canvas.height;t!=this.constants.width||e!=this.constants.height||this.frame.style.width!=t||this.frame.style.height!=e?(this.frame.style.width=t,this.frame.style.height=e,this.frame.canvas.style.width="100%",this.frame.canvas.style.height="100%",this.frame.canvas.width=this.frame.canvas.clientWidth*this.pixelRatio,this.frame.canvas.height=this.frame.canvas.clientHeight*this.pixelRatio,this.constants.width=t,this.constants.height=e,i=!0):(this.frame.canvas.width!=this.frame.canvas.clientWidth*this.pixelRatio&&(this.frame.canvas.width=this.frame.canvas.clientWidth*this.pixelRatio,i=!0),this.frame.canvas.height!=this.frame.canvas.clientHeight*this.pixelRatio&&(this.frame.canvas.height=this.frame.canvas.clientHeight*this.pixelRatio,i=!0)),1==i&&this.emit("resize",{width:this.frame.canvas.width*this.pixelRatio,height:this.frame.canvas.height*this.pixelRatio,oldWidth:s*this.pixelRatio,oldHeight:o*this.pixelRatio})},s.prototype._setNodes=function(t){var e=this.nodesData;if(t instanceof d||t instanceof l)this.nodesData=t;else if(Array.isArray(t))this.nodesData=new d,this.nodesData.add(t);else{if(t)throw new TypeError("Array or DataSet expected");this.nodesData=new d}if(e&&a.forEach(this.nodesListeners,function(t,i){e.off(i,t)}),this.nodes={},this.nodesData){var i=this;a.forEach(this.nodesListeners,function(t,e){i.nodesData.on(e,t)});var s=this.nodesData.getIds();this._addNodes(s)}this._updateSelection()},s.prototype._addNodes=function(t){for(var e,i=0,s=t.length;s>i;i++){e=t[i];var o=this.nodesData.get(e),n=new f(o,this.images,this.groups,this.constants);if(this.nodes[e]=n,!(0!=n.xFixed&&0!=n.yFixed||null!==n.x&&null!==n.y)){var r=1*t.length+10,a=2*Math.PI*Math.random();0==n.xFixed&&(n.x=r*Math.cos(a)),0==n.yFixed&&(n.y=r*Math.sin(a))}this.moving=!0}this._updateNodeIndexList(),1==this.constants.hierarchicalLayout.enabled&&0==this.initializing&&(this._resetLevels(),this._setupHierarchicalLayout()),this._updateCalculationNodes(),this._reconnectEdges(),this._updateValueRange(this.nodes),this.updateLabels()},s.prototype._updateNodes=function(t,e){for(var i=this.nodes,s=0,o=t.length;o>s;s++){var n=t[s],r=i[n],a=e[s];r?r.setProperties(a,this.constants):(r=new f(properties,this.images,this.groups,this.constants),i[n]=r)}this.moving=!0,1==this.constants.hierarchicalLayout.enabled&&0==this.initializing&&(this._resetLevels(),this._setupHierarchicalLayout()),this._updateNodeIndexList(),this._updateValueRange(i)},s.prototype._removeNodes=function(t){for(var e=this.nodes,i=0,s=t.length;s>i;i++){var o=t[i];delete e[o]}this._updateNodeIndexList(),1==this.constants.hierarchicalLayout.enabled&&0==this.initializing&&(this._resetLevels(),this._setupHierarchicalLayout()),this._updateCalculationNodes(),this._reconnectEdges(),this._updateSelection(),this._updateValueRange(e)},s.prototype._setEdges=function(t){var e=this.edgesData;if(t instanceof d||t instanceof l)this.edgesData=t;else if(Array.isArray(t))this.edgesData=new d,this.edgesData.add(t);else{if(t)throw new TypeError("Array or DataSet expected");this.edgesData=new d}if(e&&a.forEach(this.edgesListeners,function(t,i){e.off(i,t)}),this.edges={},this.edgesData){var i=this;a.forEach(this.edgesListeners,function(t,e){i.edgesData.on(e,t)});var s=this.edgesData.getIds();this._addEdges(s)}this._reconnectEdges()},s.prototype._addEdges=function(t){for(var e=this.edges,i=this.edgesData,s=0,o=t.length;o>s;s++){var n=t[s],r=e[n];r&&r.disconnect();var a=i.get(n,{showInternalIds:!0});e[n]=new g(a,this,this.constants)}this.moving=!0,this._updateValueRange(e),this._createBezierNodes(),this._updateCalculationNodes(),1==this.constants.hierarchicalLayout.enabled&&0==this.initializing&&(this._resetLevels(),this._setupHierarchicalLayout())},s.prototype._updateEdges=function(t){for(var e=this.edges,i=this.edgesData,s=0,o=t.length;o>s;s++){var n=t[s],r=i.get(n),a=e[n];a?(a.disconnect(),a.setProperties(r,this.constants),a.connect()):(a=new g(r,this,this.constants),this.edges[n]=a)}this._createBezierNodes(),1==this.constants.hierarchicalLayout.enabled&&0==this.initializing&&(this._resetLevels(),this._setupHierarchicalLayout()),this.moving=!0,this._updateValueRange(e)},s.prototype._removeEdges=function(t){for(var e=this.edges,i=0,s=t.length;s>i;i++){var o=t[i],n=e[o];n&&(null!=n.via&&delete this.sectors.support.nodes[n.via.id],n.disconnect(),delete e[o])}this.moving=!0,this._updateValueRange(e),1==this.constants.hierarchicalLayout.enabled&&0==this.initializing&&(this._resetLevels(),this._setupHierarchicalLayout()),this._updateCalculationNodes()},s.prototype._reconnectEdges=function(){var t,e=this.nodes,i=this.edges;for(t in e)e.hasOwnProperty(t)&&(e[t].edges=[],e[t].dynamicEdges=[]);for(t in i)if(i.hasOwnProperty(t)){var s=i[t];s.from=null,s.to=null,s.connect()}},s.prototype._updateValueRange=function(t){var e,i=void 0,s=void 0;for(e in t)if(t.hasOwnProperty(e)){var o=t[e].getValue();void 0!==o&&(i=void 0===i?o:Math.min(o,i),s=void 0===s?o:Math.max(o,s))}if(void 0!==i&&void 0!==s)for(e in t)t.hasOwnProperty(e)&&t[e].setValueRange(i,s)},s.prototype.redraw=function(){this.setSize(this.constants.width,this.constants.height),this._redraw()},s.prototype._redraw=function(){var t=this.frame.canvas.getContext("2d");t.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var e=this.frame.canvas.width*this.pixelRatio,i=this.frame.canvas.height*this.pixelRatio;t.clearRect(0,0,e,i),t.save(),t.translate(this.translation.x,this.translation.y),t.scale(this.scale,this.scale),this.canvasTopLeft={x:this._XconvertDOMtoCanvas(0),y:this._YconvertDOMtoCanvas(0)},this.canvasBottomRight={x:this._XconvertDOMtoCanvas(this.frame.canvas.clientWidth*this.pixelRatio),y:this._YconvertDOMtoCanvas(this.frame.canvas.clientHeight*this.pixelRatio)},this._doInAllSectors("_drawAllSectorNodes",t),(0==this.drag.dragging||void 0===this.drag.dragging||0==this.constants.hideEdgesOnDrag)&&this._doInAllSectors("_drawEdges",t),(0==this.drag.dragging||void 0===this.drag.dragging||0==this.constants.hideNodesOnDrag)&&this._doInAllSectors("_drawNodes",t,!1),1==this.controlNodesActive&&this._doInAllSectors("_drawControlNodes",t),t.restore()},s.prototype._setTranslation=function(t,e){void 0===this.translation&&(this.translation={x:0,y:0}),void 0!==t&&(this.translation.x=t),void 0!==e&&(this.translation.y=e),this.emit("viewChanged")},s.prototype._getTranslation=function(){return{x:this.translation.x,y:this.translation.y}},s.prototype._setScale=function(t){this.scale=t},s.prototype._getScale=function(){return this.scale},s.prototype._XconvertDOMtoCanvas=function(t){return(t-this.translation.x)/this.scale},s.prototype._XconvertCanvasToDOM=function(t){return t*this.scale+this.translation.x},s.prototype._YconvertDOMtoCanvas=function(t){return(t-this.translation.y)/this.scale},s.prototype._YconvertCanvasToDOM=function(t){return t*this.scale+this.translation.y},s.prototype.canvasToDOM=function(t){return{x:this._XconvertCanvasToDOM(t.x),y:this._YconvertCanvasToDOM(t.y)}},s.prototype.DOMtoCanvas=function(t){return{x:this._XconvertDOMtoCanvas(t.x),y:this._YconvertDOMtoCanvas(t.y)}},s.prototype._drawNodes=function(t,e){void 0===e&&(e=!1);var i=this.nodes,s=[];for(var o in i)i.hasOwnProperty(o)&&(i[o].setScaleAndPos(this.scale,this.canvasTopLeft,this.canvasBottomRight),i[o].isSelected()?s.push(o):(i[o].inArea()||e)&&i[o].draw(t));for(var n=0,r=s.length;r>n;n++)(i[s[n]].inArea()||e)&&i[s[n]].draw(t)},s.prototype._drawEdges=function(t){var e=this.edges;for(var i in e)if(e.hasOwnProperty(i)){var s=e[i];s.setScale(this.scale),s.connected&&e[i].draw(t)}},s.prototype._drawControlNodes=function(t){var e=this.edges;for(var i in e)e.hasOwnProperty(i)&&e[i]._drawControlNodes(t)},s.prototype._stabilize=function(){1==this.constants.freezeForStabilization&&this._freezeDefinedNodes();for(var t=0;this.moving&&t0)for(t in i)i.hasOwnProperty(t)&&(i[t].discreteStepLimited(e,this.constants.maxVelocity),s=!0);else for(t in i)i.hasOwnProperty(t)&&(i[t].discreteStep(e),s=!0);if(1==s){var o=this.constants.minVelocity/Math.max(this.scale,.05);return o>.5*this.constants.maxVelocity?!0:this._isMoving(o)}return!1},s.prototype._physicsTick=function(){if(!this.freezeSimulation&&1==this.moving){var t=!1,e=!1;this._doInAllActiveSectors("_initializeForceCalculation");var i=this._doInAllActiveSectors("_discreteStepNodes");1==this.constants.smoothCurves.enabled&&1==this.constants.smoothCurves.dynamic&&(e=this._doInSupportSector("_discreteStepNodes"));for(var s=0;s0){var i=this,s={iterations:i.stabilizationIterations};i.stabilizationIterations=0,i.startedStabilization=!1,setTimeout(function(){i.emit("stabilized",s)},0)}},s.prototype._handleNavigation=function(){if(0!=this.xIncrement||0!=this.yIncrement){var t=this._getTranslation();this._setTranslation(t.x+this.xIncrement,t.y+this.yIncrement)}if(0!=this.zoomIncrement){var e={x:this.frame.canvas.clientWidth/2,y:this.frame.canvas.clientHeight/2};this._zoom(this.scale*(1+this.zoomIncrement),e)}},s.prototype.toggleFreeze=function(){0==this.freezeSimulation?this.freezeSimulation=!0:(this.freezeSimulation=!1,this.start())},s.prototype._configureSmoothCurves=function(t){if(void 0===t&&(t=!0),1==this.constants.smoothCurves.enabled&&1==this.constants.smoothCurves.dynamic){this._createBezierNodes();for(var e in this.sectors.support.nodes)this.sectors.support.nodes.hasOwnProperty(e)&&void 0===this.edges[this.sectors.support.nodes[e].parentEdgeId]&&delete this.sectors.support.nodes[e]}else{this.sectors.support.nodes={};for(var i in this.edges)this.edges.hasOwnProperty(i)&&(this.edges[i].via=null)}this._updateCalculationNodes(),t||(this.moving=!0,this.start())},s.prototype._createBezierNodes=function(){if(1==this.constants.smoothCurves.enabled&&1==this.constants.smoothCurves.dynamic)for(var t in this.edges)if(this.edges.hasOwnProperty(t)){var e=this.edges[t];if(null==e.via){var i="edgeId:".concat(e.id);this.sectors.support.nodes[i]=new f({id:i,mass:1,shape:"circle",image:"",internalMultiplier:1},{},{},this.constants),e.via=this.sectors.support.nodes[i],e.via.parentEdgeId=e.id,e.positionBezierNode()}}},s.prototype._initializeMixinLoaders=function(){for(var t in y)y.hasOwnProperty(t)&&(s.prototype[t]=y[t])},s.prototype.storePosition=function(){console.log("storePosition is depricated: use .storePositions() from now on."),this.storePositions()},s.prototype.storePositions=function(){var t=[];for(var e in this.nodes)if(this.nodes.hasOwnProperty(e)){var i=this.nodes[e],s=!this.nodes.xFixed,o=!this.nodes.yFixed;(this.nodesData._data[e].x!=Math.round(i.x)||this.nodesData._data[e].y!=Math.round(i.y))&&t.push({id:e,x:Math.round(i.x),y:Math.round(i.y),allowedToMoveX:s,allowedToMoveY:o})}this.nodesData.update(t)},s.prototype.getPositions=function(t){var e={};if(void 0!==t){if(1==Array.isArray(t)){for(var i=0;i=1&&(this.easingTime=0,this._redraw=null!=this.lockedOnNodeId?this._lockedRedraw:this._classicRedraw,this.emit("animationFinished"))},s.prototype._classicRedraw=function(){},s.prototype.isActive=function(){return!this.activator||this.activator.active},s.prototype.setScale=function(){return this._setScale()},s.prototype.getScale=function(){return this._getScale()},s.prototype.getCenterCoordinates=function(){return this.DOMtoCanvas({x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight})},t.exports=s},function(t,e,i){function s(t,e,i){if(!e)throw"No network provided";var s=["edges","physics"],n=o.selectiveBridgeObject(s,i);this.options=n.edges,this.physics=n.physics,this.options.smoothCurves=i.smoothCurves,this.network=e,this.id=void 0,this.fromId=void 0,this.toId=void 0,this.title=void 0,this.widthSelected=this.options.width*this.options.widthSelectionMultiplier,this.value=void 0,this.selected=!1,this.hover=!1,this.labelDimensions={top:0,left:0,width:0,height:0,yLine:0},this.dirtyLabel=!0,this.from=null,this.to=null,this.via=null,this.fromBackup=null,this.toBackup=null,this.originalFromId=[],this.originalToId=[],this.connected=!1,this.widthFixed=!1,this.lengthFixed=!1,this.setProperties(t),this.controlNodesEnabled=!1,this.controlNodes={from:null,to:null,positions:{}},this.connectedNode=null}var o=i(1),n=i(40);s.prototype.setProperties=function(t){if(t){var e=["style","fontSize","fontFace","fontColor","fontFill","width","widthSelectionMultiplier","hoverWidth","arrowScaleFactor","dash","inheritColor"];switch(o.selectiveDeepExtend(e,this.options,t),void 0!==t.from&&(this.fromId=t.from),void 0!==t.to&&(this.toId=t.to),void 0!==t.id&&(this.id=t.id),void 0!==t.label&&(this.label=t.label,this.dirtyLabel=!0),void 0!==t.title&&(this.title=t.title),void 0!==t.value&&(this.value=t.value),void 0!==t.length&&(this.physics.springLength=t.length),void 0!==t.color&&(this.options.inheritColor=!1,o.isString(t.color)?(this.options.color.color=t.color,this.options.color.highlight=t.color):(void 0!==t.color.color&&(this.options.color.color=t.color.color),void 0!==t.color.highlight&&(this.options.color.highlight=t.color.highlight),void 0!==t.color.hover&&(this.options.color.hover=t.color.hover))),this.connect(),this.widthFixed=this.widthFixed||void 0!==t.width,this.lengthFixed=this.lengthFixed||void 0!==t.length,this.widthSelected=this.options.width*this.options.widthSelectionMultiplier,this.options.style){case"line":this.draw=this._drawLine;break;case"arrow":this.draw=this._drawArrow;break;case"arrow-center":this.draw=this._drawArrowCenter;break;case"dash-line":this.draw=this._drawDashLine;break;default:this.draw=this._drawLine}}},s.prototype.connect=function(){this.disconnect(),this.from=this.network.nodes[this.fromId]||null,this.to=this.network.nodes[this.toId]||null,this.connected=this.from&&this.to,this.connected?(this.from.attachEdge(this),this.to.attachEdge(this)):(this.from&&this.from.detachEdge(this),this.to&&this.to.detachEdge(this))},s.prototype.disconnect=function(){this.from&&(this.from.detachEdge(this),this.from=null),this.to&&(this.to.detachEdge(this),this.to=null),this.connected=!1},s.prototype.getTitle=function(){return"function"==typeof this.title?this.title():this.title},s.prototype.getValue=function(){return this.value},s.prototype.setValueRange=function(t,e){if(!this.widthFixed&&void 0!==this.value){var i=(this.options.widthMax-this.options.widthMin)/(e-t);this.options.width=(this.value-t)*i+this.options.widthMin,this.widthSelected=this.options.width*this.options.widthSelectionMultiplier}},s.prototype.draw=function(){throw"Method draw not initialized in edge"},s.prototype.isOverlappingWith=function(t){if(this.connected){var e=10,i=this.from.x,s=this.from.y,o=this.to.x,n=this.to.y,r=t.left,a=t.top,h=this._getDistanceToEdge(i,s,o,n,r,a);return e>h}return!1},s.prototype._getColor=function(){var t=this.options.color;return"to"==this.options.inheritColor?t={highlight:this.to.options.color.highlight.border,hover:this.to.options.color.hover.border,color:this.to.options.color.border}:("from"==this.options.inheritColor||1==this.options.inheritColor)&&(t={highlight:this.from.options.color.highlight.border,hover:this.from.options.color.hover.border,color:this.from.options.color.border}),1==this.selected?t.highlight:1==this.hover?t.hover:t.color },s.prototype._drawLine=function(t){if(t.strokeStyle=this._getColor(),t.lineWidth=this._getLineWidth(),this.from!=this.to){var e,i=this._line(t);if(this.label){if(1==this.options.smoothCurves.enabled&&null!=i){var s=.5*(.5*(this.from.x+i.x)+.5*(this.to.x+i.x)),o=.5*(.5*(this.from.y+i.y)+.5*(this.to.y+i.y));e={x:s,y:o}}else e=this._pointOnLine(.5);this._label(t,this.label,e.x,e.y)}}else{var n,r,a=this.physics.springLength/4,h=this.from;h.width||h.resize(t),h.width>h.height?(n=h.x+h.width/2,r=h.y-a):(n=h.x+a,r=h.y-h.height/2),this._circle(t,n,r,a),e=this._pointOnCircle(n,r,a,.5),this._label(t,this.label,e.x,e.y)}},s.prototype._getLineWidth=function(){return 1==this.selected?Math.max(Math.min(this.widthSelected,this.options.widthMax),.3*this.networkScaleInv):1==this.hover?Math.max(Math.min(this.options.hoverWidth,this.options.widthMax),.3*this.networkScaleInv):Math.max(this.options.width,.3*this.networkScaleInv)},s.prototype._getViaCoordinates=function(){var t=null,e=null,i=this.options.smoothCurves.roundness,s=this.options.smoothCurves.type,o=Math.abs(this.from.x-this.to.x),n=Math.abs(this.from.y-this.to.y);return"discrete"==s||"diagonalCross"==s?Math.abs(this.from.x-this.to.x)this.to.y?this.from.xthis.to.x&&(t=this.from.x-i*n,e=this.from.y-i*n):this.from.ythis.to.x&&(t=this.from.x-i*n,e=this.from.y+i*n)),"discrete"==s&&(t=i*n>o?this.from.x:t)):Math.abs(this.from.x-this.to.x)>Math.abs(this.from.y-this.to.y)&&(this.from.y>this.to.y?this.from.xthis.to.x&&(t=this.from.x-i*o,e=this.from.y-i*o):this.from.ythis.to.x&&(t=this.from.x-i*o,e=this.from.y+i*o)),"discrete"==s&&(e=i*o>n?this.from.y:e)):"straightCross"==s?Math.abs(this.from.x-this.to.x)Math.abs(this.from.y-this.to.y)&&(t=this.from.xthis.to.y?this.from.xthis.to.x&&(t=this.from.x-i*n,e=this.from.y-i*n,t=this.to.x>t?this.to.x:t):this.from.ythis.to.x&&(t=this.from.x-i*n,e=this.from.y+i*n,t=this.to.x>t?this.to.x:t)):Math.abs(this.from.x-this.to.x)>Math.abs(this.from.y-this.to.y)&&(this.from.y>this.to.y?this.from.xe?this.to.y:e):this.from.x>this.to.x&&(t=this.from.x-i*o,e=this.from.y-i*o,e=this.to.y>e?this.to.y:e):this.from.ythis.to.x&&(t=this.from.x-i*o,e=this.from.y+i*o,e=this.to.yd;d++){var l=t.measureText(n[d]).width;h=l>h?l:h}var c=this.options.fontSize*r,p=i-h/2,u=s-c/2;this.labelDimensions={top:u,left:p,width:h,height:c,yLine:o}}void 0!==this.options.fontFill&&null!==this.options.fontFill&&"none"!==this.options.fontFill&&(t.fillStyle=this.options.fontFill,t.fillRect(this.labelDimensions.left,this.labelDimensions.top,this.labelDimensions.width,this.labelDimensions.height)),t.fillStyle=this.options.fontColor||"black",t.textAlign="center",t.textBaseline="middle",o=this.labelDimensions.yLine;for(var d=0;r>d;d++)t.fillText(n[d],i,o),o+=a}},s.prototype._drawDashLine=function(t){t.strokeStyle=this._getColor(),t.lineWidth=this._getLineWidth();var e=null;if(void 0!==t.mozDash||void 0!==t.setLineDash){var i=[0];i=void 0!==this.options.dash.length&&void 0!==this.options.dash.gap?[this.options.dash.length,this.options.dash.gap]:[5,5],"undefined"!=typeof t.setLineDash?(t.setLineDash(i),t.lineDashOffset=0):(t.mozDash=i,t.mozDashOffset=0),e=this._line(t),"undefined"!=typeof t.setLineDash?(t.setLineDash([0]),t.lineDashOffset=0):(t.mozDash=[0],t.mozDashOffset=0)}else t.beginPath(),t.lineCap="round",void 0!==this.options.dash.altLength?t.dashedLine(this.from.x,this.from.y,this.to.x,this.to.y,[this.options.dash.length,this.options.dash.gap,this.options.dash.altLength,this.options.dash.gap]):void 0!==this.options.dash.length&&void 0!==this.options.dash.gap?t.dashedLine(this.from.x,this.from.y,this.to.x,this.to.y,[this.options.dash.length,this.options.dash.gap]):(t.moveTo(this.from.x,this.from.y),t.lineTo(this.to.x,this.to.y)),t.stroke();if(this.label){var s;if(1==this.options.smoothCurves.enabled&&null!=e){var o=.5*(.5*(this.from.x+e.x)+.5*(this.to.x+e.x)),n=.5*(.5*(this.from.y+e.y)+.5*(this.to.y+e.y));s={x:o,y:n}}else s=this._pointOnLine(.5);this._label(t,this.label,s.x,s.y)}},s.prototype._pointOnLine=function(t){return{x:(1-t)*this.from.x+t*this.to.x,y:(1-t)*this.from.y+t*this.to.y}},s.prototype._pointOnCircle=function(t,e,i,s){var o=2*(s-3/8)*Math.PI;return{x:t+i*Math.cos(o),y:e-i*Math.sin(o)}},s.prototype._drawArrowCenter=function(t){var e;if(t.strokeStyle=this._getColor(),t.fillStyle=t.strokeStyle,t.lineWidth=this._getLineWidth(),this.from!=this.to){var i=this._line(t),s=Math.atan2(this.to.y-this.from.y,this.to.x-this.from.x),o=(10+5*this.options.width)*this.options.arrowScaleFactor;if(1==this.options.smoothCurves.enabled&&null!=i){var n=.5*(.5*(this.from.x+i.x)+.5*(this.to.x+i.x)),r=.5*(.5*(this.from.y+i.y)+.5*(this.to.y+i.y));e={x:n,y:r}}else e=this._pointOnLine(.5);t.arrow(e.x,e.y,s,o),t.fill(),t.stroke(),this.label&&this._label(t,this.label,e.x,e.y)}else{var a,h,d=.25*Math.max(100,this.physics.springLength),l=this.from;l.width||l.resize(t),l.width>l.height?(a=l.x+.5*l.width,h=l.y-d):(a=l.x+d,h=l.y-.5*l.height),this._circle(t,a,h,d);var s=.2*Math.PI,o=(10+5*this.options.width)*this.options.arrowScaleFactor;e=this._pointOnCircle(a,h,d,.5),t.arrow(e.x,e.y,s,o),t.fill(),t.stroke(),this.label&&(e=this._pointOnCircle(a,h,d,.5),this._label(t,this.label,e.x,e.y))}},s.prototype._drawArrow=function(t){t.strokeStyle=this._getColor(),t.fillStyle=t.strokeStyle,t.lineWidth=this._getLineWidth();var e,i;if(this.from!=this.to){e=Math.atan2(this.to.y-this.from.y,this.to.x-this.from.x);var s,o=this.to.x-this.from.x,n=this.to.y-this.from.y,r=Math.sqrt(o*o+n*n),a=this.from.distanceToBorder(t,e+Math.PI),h=(r-a)/r,d=h*this.from.x+(1-h)*this.to.x,l=h*this.from.y+(1-h)*this.to.y;1==this.options.smoothCurves.dynamic&&1==this.options.smoothCurves.enabled?s=this.via:1==this.options.smoothCurves.enabled&&(s=this._getViaCoordinates()),1==this.options.smoothCurves.enabled&&null!=s.x&&(e=Math.atan2(this.to.y-s.y,this.to.x-s.x),o=this.to.x-s.x,n=this.to.y-s.y,r=Math.sqrt(o*o+n*n));var c,p,u=this.to.distanceToBorder(t,e),m=(r-u)/r;if(1==this.options.smoothCurves.enabled&&null!=s.x?(c=(1-m)*s.x+m*this.to.x,p=(1-m)*s.y+m*this.to.y):(c=(1-m)*this.from.x+m*this.to.x,p=(1-m)*this.from.y+m*this.to.y),t.beginPath(),t.moveTo(d,l),1==this.options.smoothCurves.enabled&&null!=s.x?t.quadraticCurveTo(s.x,s.y,c,p):t.lineTo(c,p),t.stroke(),i=(10+5*this.options.width)*this.options.arrowScaleFactor,t.arrow(c,p,e,i),t.fill(),t.stroke(),this.label){var f;if(1==this.options.smoothCurves.enabled&&null!=s){var g=.5*(.5*(this.from.x+s.x)+.5*(this.to.x+s.x)),v=.5*(.5*(this.from.y+s.y)+.5*(this.to.y+s.y));f={x:g,y:v}}else f=this._pointOnLine(.5);this._label(t,this.label,f.x,f.y)}}else{var y,b,_,x=this.from,w=.25*Math.max(100,this.physics.springLength);x.width||x.resize(t),x.width>x.height?(y=x.x+.5*x.width,b=x.y-w,_={x:y,y:x.y,angle:.9*Math.PI}):(y=x.x+w,b=x.y-.5*x.height,_={x:x.x,y:b,angle:.6*Math.PI}),t.beginPath(),t.arc(y,b,w,0,2*Math.PI,!1),t.stroke();var i=(10+5*this.options.width)*this.options.arrowScaleFactor;t.arrow(_.x,_.y,_.angle,i),t.fill(),t.stroke(),this.label&&(f=this._pointOnCircle(y,b,w,.5),this._label(t,this.label,f.x,f.y))}},s.prototype._getDistanceToEdge=function(t,e,i,s,o,n){var r=0;if(this.from!=this.to)if(1==this.options.smoothCurves.enabled){var a,h;if(1==this.options.smoothCurves.enabled&&1==this.options.smoothCurves.dynamic)a=this.via.x,h=this.via.y;else{var d=this._getViaCoordinates();a=d.x,h=d.y}var l,c,p,u,m,f,g,v=1e9;for(c=0;10>c;c++)p=.1*c,u=Math.pow(1-p,2)*t+2*p*(1-p)*a+Math.pow(p,2)*i,m=Math.pow(1-p,2)*e+2*p*(1-p)*h+Math.pow(p,2)*s,c>0&&(l=this._getDistanceToLine(f,g,u,m,o,n),v=v>l?l:v),f=u,g=m;r=v}else r=this._getDistanceToLine(t,e,i,s,o,n);else{var u,m,y,b,_=.25*this.physics.springLength,x=this.from;x.width>x.height?(u=x.x+.5*x.width,m=x.y-_):(u=x.x+_,m=x.y-.5*x.height),y=u-o,b=m-n,r=Math.abs(Math.sqrt(y*y+b*b)-_)}return this.labelDimensions.lefto&&this.labelDimensions.topn?0:r},s.prototype._getDistanceToLine=function(t,e,i,s,o,n){var r=i-t,a=s-e,h=r*r+a*a,d=((o-t)*r+(n-e)*a)/h;d>1?d=1:0>d&&(d=0);var l=t+d*r,c=e+d*a,p=l-o,u=c-n;return Math.sqrt(p*p+u*u)},s.prototype.setScale=function(t){this.networkScaleInv=1/t},s.prototype.select=function(){this.selected=!0},s.prototype.unselect=function(){this.selected=!1},s.prototype.positionBezierNode=function(){null!==this.via&&null!==this.from&&null!==this.to&&(this.via.x=.5*(this.from.x+this.to.x),this.via.y=.5*(this.from.y+this.to.y))},s.prototype._drawControlNodes=function(t){if(1==this.controlNodesEnabled){if(null===this.controlNodes.from&&null===this.controlNodes.to){var e="edgeIdFrom:".concat(this.id),i="edgeIdTo:".concat(this.id),s={nodes:{group:"",radius:8},physics:{damping:0},clustering:{maxNodeSizeIncrements:0,nodeScaling:{width:0,height:0,radius:0}}};this.controlNodes.from=new n({id:e,shape:"dot",color:{background:"#ff4e00",border:"#3c3c3c",highlight:{background:"#07f968"}}},{},{},s),this.controlNodes.to=new n({id:i,shape:"dot",color:{background:"#ff4e00",border:"#3c3c3c",highlight:{background:"#07f968"}}},{},{},s)}0==this.controlNodes.from.selected&&0==this.controlNodes.to.selected&&(this.controlNodes.positions=this.getControlNodePositions(t),this.controlNodes.from.x=this.controlNodes.positions.from.x,this.controlNodes.from.y=this.controlNodes.positions.from.y,this.controlNodes.to.x=this.controlNodes.positions.to.x,this.controlNodes.to.y=this.controlNodes.positions.to.y),this.controlNodes.from.draw(t),this.controlNodes.to.draw(t)}else this.controlNodes={from:null,to:null,positions:{}}},s.prototype._enableControlNodes=function(){this.fromBackup=this.from,this.toBackup=this.to,this.controlNodesEnabled=!0},s.prototype._disableControlNodes=function(){this.fromId=this.from.id,this.toId=this.to.id,this.fromId!=this.fromBackup.id?this.fromBackup.detachEdge(this):this.toId!=this.toBackup.id&&this.toBackup.detachEdge(this),this.fromBackup=null,this.toBackup=null,this.controlNodesEnabled=!1},s.prototype._getSelectedControlNode=function(t,e){var i=this.controlNodes.positions,s=Math.sqrt(Math.pow(t-i.from.x,2)+Math.pow(e-i.from.y,2)),o=Math.sqrt(Math.pow(t-i.to.x,2)+Math.pow(e-i.to.y,2));return 15>s?(this.connectedNode=this.from,this.from=this.controlNodes.from,this.controlNodes.from):15>o?(this.connectedNode=this.to,this.to=this.controlNodes.to,this.controlNodes.to):null},s.prototype._restoreControlNodes=function(){1==this.controlNodes.from.selected?(this.from=this.connectedNode,this.connectedNode=null,this.controlNodes.from.unselect()):1==this.controlNodes.to.selected&&(this.to=this.connectedNode,this.connectedNode=null,this.controlNodes.to.unselect())},s.prototype.getControlNodePositions=function(t){var e,i=Math.atan2(this.to.y-this.from.y,this.to.x-this.from.x),s=this.to.x-this.from.x,o=this.to.y-this.from.y,n=Math.sqrt(s*s+o*o),r=this.from.distanceToBorder(t,i+Math.PI),a=(n-r)/n,h=a*this.from.x+(1-a)*this.to.x,d=a*this.from.y+(1-a)*this.to.y;1==this.options.smoothCurves.dynamic&&1==this.options.smoothCurves.enabled?e=this.via:1==this.options.smoothCurves.enabled&&(e=this._getViaCoordinates()),1==this.options.smoothCurves.enabled&&null!=e.x&&(i=Math.atan2(this.to.y-e.y,this.to.x-e.x),s=this.to.x-e.x,o=this.to.y-e.y,n=Math.sqrt(s*s+o*o));var l,c,p=this.to.distanceToBorder(t,i),u=(n-p)/n;return 1==this.options.smoothCurves.enabled&&null!=e.x?(l=(1-u)*e.x+u*this.to.x,c=(1-u)*e.y+u*this.to.y):(l=(1-u)*this.from.x+u*this.to.x,c=(1-u)*this.from.y+u*this.to.y),{from:{x:h,y:d},to:{x:l,y:c}}},t.exports=s},function(t,e,i){function s(){this.clear(),this.defaultIndex=0}var o=i(1);s.DEFAULT=[{border:"#2B7CE9",background:"#97C2FC",highlight:{border:"#2B7CE9",background:"#D2E5FF"},hover:{border:"#2B7CE9",background:"#D2E5FF"}},{border:"#FFA500",background:"#FFFF00",highlight:{border:"#FFA500",background:"#FFFFA3"},hover:{border:"#FFA500",background:"#FFFFA3"}},{border:"#FA0A10",background:"#FB7E81",highlight:{border:"#FA0A10",background:"#FFAFB1"},hover:{border:"#FA0A10",background:"#FFAFB1"}},{border:"#41A906",background:"#7BE141",highlight:{border:"#41A906",background:"#A1EC76"},hover:{border:"#41A906",background:"#A1EC76"}},{border:"#E129F0",background:"#EB7DF4",highlight:{border:"#E129F0",background:"#F0B3F5"},hover:{border:"#E129F0",background:"#F0B3F5"}},{border:"#7C29F0",background:"#AD85E4",highlight:{border:"#7C29F0",background:"#D3BDF0"},hover:{border:"#7C29F0",background:"#D3BDF0"}},{border:"#C37F00",background:"#FFA807",highlight:{border:"#C37F00",background:"#FFCA66"},hover:{border:"#C37F00",background:"#FFCA66"}},{border:"#4220FB",background:"#6E6EFD",highlight:{border:"#4220FB",background:"#9B9BFD"},hover:{border:"#4220FB",background:"#9B9BFD"}},{border:"#FD5A77",background:"#FFC0CB",highlight:{border:"#FD5A77",background:"#FFD1D9"},hover:{border:"#FD5A77",background:"#FFD1D9"}},{border:"#4AD63A",background:"#C2FABC",highlight:{border:"#4AD63A",background:"#E6FFE3"},hover:{border:"#4AD63A",background:"#E6FFE3"}}],s.prototype.clear=function(){this.groups={},this.groups.length=function(){var t=0;for(var e in this)this.hasOwnProperty(e)&&t++;return t}},s.prototype.get=function(t){var e=this.groups[t];if(void 0==e){var i=this.defaultIndex%s.DEFAULT.length;this.defaultIndex++,e={},e.color=s.DEFAULT[i],this.groups[t]=e}return e},s.prototype.add=function(t,e){return this.groups[t]=e,e.color&&(e.color=o.parseColor(e.color)),e},t.exports=s},function(t){function e(){this.images={},this.callback=void 0}e.prototype.setOnloadCallback=function(t){this.callback=t},e.prototype.load=function(t,e){var i=this.images[t];if(void 0==i){var s=this;i=new Image,this.images[t]=i,i.onload=function(){s.callback&&s.callback(this)},i.onerror=function(){this.src=e,s.callback&&s.callback(this)},i.src=t}return i},t.exports=e},function(t,e,i){function s(t,e,i,s){var n=o.selectiveBridgeObject(["nodes"],s);this.options=n.nodes,this.selected=!1,this.hover=!1,this.edges=[],this.dynamicEdges=[],this.reroutedEdges={},this.fontDrawThreshold=3,this.id=void 0,this.x=null,this.y=null,this.allowedToMoveX=!1,this.allowedToMoveY=!1,this.xFixed=!1,this.yFixed=!1,this.horizontalAlignLeft=!0,this.verticalAlignTop=!0,this.baseRadiusValue=s.nodes.radius,this.radiusFixed=!1,this.level=-1,this.preassignedLevel=!1,this.hierarchyEnumerated=!1,this.labelDimensions={top:0,left:0,width:0,height:0,yLine:0},this.imagelist=e,this.grouplist=i,this.fx=0,this.fy=0,this.vx=0,this.vy=0,this.damping=s.physics.damping,this.fixedData={x:null,y:null},this.setProperties(t,n),this.resetCluster(),this.dynamicEdgesLength=0,this.clusterSession=0,this.clusterSizeWidthFactor=s.clustering.nodeScaling.width,this.clusterSizeHeightFactor=s.clustering.nodeScaling.height,this.clusterSizeRadiusFactor=s.clustering.nodeScaling.radius,this.maxNodeSizeIncrements=s.clustering.maxNodeSizeIncrements,this.growthIndicator=0,this.networkScaleInv=1,this.networkScale=1,this.canvasTopLeft={x:-300,y:-300},this.canvasBottomRight={x:300,y:300},this.parentEdgeId=null}var o=i(1);s.prototype.resetCluster=function(){this.formationScale=void 0,this.clusterSize=1,this.containedNodes={},this.containedEdges={},this.clusterSessions=[]},s.prototype.attachEdge=function(t){-1==this.edges.indexOf(t)&&this.edges.push(t),-1==this.dynamicEdges.indexOf(t)&&this.dynamicEdges.push(t),this.dynamicEdgesLength=this.dynamicEdges.length},s.prototype.detachEdge=function(t){var e=this.edges.indexOf(t);-1!=e&&this.edges.splice(e,1),e=this.dynamicEdges.indexOf(t),-1!=e&&this.dynamicEdges.splice(e,1),this.dynamicEdgesLength=this.dynamicEdges.length},s.prototype.setProperties=function(t,e){if(t){var i=["borderWidth","borderWidthSelected","shape","image","brokenImage","radius","fontColor","fontSize","fontFace","fontFill","group","mass"];if(o.selectiveDeepExtend(i,this.options,t),void 0!==t.id&&(this.id=t.id),void 0!==t.label&&(this.label=t.label,this.originalLabel=t.label),void 0!==t.title&&(this.title=t.title),void 0!==t.x&&(this.x=t.x),void 0!==t.y&&(this.y=t.y),void 0!==t.value&&(this.value=t.value),void 0!==t.level&&(this.level=t.level,this.preassignedLevel=!0),void 0!==t.horizontalAlignLeft&&(this.horizontalAlignLeft=t.horizontalAlignLeft),void 0!==t.verticalAlignTop&&(this.verticalAlignTop=t.verticalAlignTop),void 0!==t.triggerFunction&&(this.triggerFunction=t.triggerFunction),void 0===this.id)throw"Node must have an id";if("number"==typeof this.options.group||"string"==typeof this.options.group&&""!=this.options.group){var s=this.grouplist.get(this.options.group);for(var n in s)s.hasOwnProperty(n)&&(this.options[n]=s[n])}if(void 0!==t.radius&&(this.baseRadiusValue=this.options.radius),void 0!==t.color&&(this.options.color=o.parseColor(t.color)),void 0!==this.options.image&&""!=this.options.image){if(!this.imagelist)throw"No imagelist provided";this.imageObj=this.imagelist.load(this.options.image,this.options.brokenImage)}switch(void 0!==t.allowedToMoveX?(this.xFixed=!t.allowedToMoveX,this.allowedToMoveX=t.allowedToMoveX):void 0!==t.x&&0==this.allowedToMoveX&&(this.xFixed=!0),void 0!==t.allowedToMoveY?(this.yFixed=!t.allowedToMoveY,this.allowedToMoveY=t.allowedToMoveY):void 0!==t.y&&0==this.allowedToMoveY&&(this.yFixed=!0),this.radiusFixed=this.radiusFixed||void 0!==t.radius,"image"==this.options.shape&&(this.options.radiusMin=e.nodes.widthMin,this.options.radiusMax=e.nodes.widthMax),this.options.shape){case"database":this.draw=this._drawDatabase,this.resize=this._resizeDatabase;break;case"box":this.draw=this._drawBox,this.resize=this._resizeBox;break;case"circle":this.draw=this._drawCircle,this.resize=this._resizeCircle;break;case"ellipse":this.draw=this._drawEllipse,this.resize=this._resizeEllipse;break;case"image":this.draw=this._drawImage,this.resize=this._resizeImage;break;case"text":this.draw=this._drawText,this.resize=this._resizeText;break;case"dot":this.draw=this._drawDot,this.resize=this._resizeShape;break;case"square":this.draw=this._drawSquare,this.resize=this._resizeShape;break;case"triangle":this.draw=this._drawTriangle,this.resize=this._resizeShape;break;case"triangleDown":this.draw=this._drawTriangleDown,this.resize=this._resizeShape;break;case"star":this.draw=this._drawStar,this.resize=this._resizeShape;break;default:this.draw=this._drawEllipse,this.resize=this._resizeEllipse}this._reset()}},s.prototype.select=function(){this.selected=!0,this._reset()},s.prototype.unselect=function(){this.selected=!1,this._reset()},s.prototype.clearSizeCache=function(){this._reset()},s.prototype._reset=function(){this.width=void 0,this.height=void 0},s.prototype.getTitle=function(){return"function"==typeof this.title?this.title():this.title},s.prototype.distanceToBorder=function(t,e){var i=1;switch(this.width||this.resize(t),this.options.shape){case"circle":case"dot":return this.options.radius+i;case"ellipse":var s=this.width/2,o=this.height/2,n=Math.sin(e)*s,r=Math.cos(e)*o;return s*o/Math.sqrt(n*n+r*r);case"box":case"image":case"text":default:return this.width?Math.min(Math.abs(this.width/2/Math.cos(e)),Math.abs(this.height/2/Math.sin(e)))+i:0}},s.prototype._setForce=function(t,e){this.fx=t,this.fy=e},s.prototype._addForce=function(t,e){this.fx+=t,this.fy+=e},s.prototype.discreteStep=function(t){if(this.xFixed)this.fx=0,this.vx=0;else{var e=this.damping*this.vx,i=(this.fx-e)/this.options.mass;this.vx+=i*t,this.x+=this.vx*t}if(this.yFixed)this.fy=0,this.vy=0;else{var s=this.damping*this.vy,o=(this.fy-s)/this.options.mass;this.vy+=o*t,this.y+=this.vy*t}},s.prototype.discreteStepLimited=function(t,e){if(this.xFixed)this.fx=0,this.vx=0;else{var i=this.damping*this.vx,s=(this.fx-i)/this.options.mass;this.vx+=s*t,this.vx=Math.abs(this.vx)>e?this.vx>0?e:-e:this.vx,this.x+=this.vx*t}if(this.yFixed)this.fy=0,this.vy=0;else{var o=this.damping*this.vy,n=(this.fy-o)/this.options.mass;this.vy+=n*t,this.vy=Math.abs(this.vy)>e?this.vy>0?e:-e:this.vy,this.y+=this.vy*t}},s.prototype.isFixed=function(){return this.xFixed&&this.yFixed},s.prototype.isMoving=function(t){var e=Math.sqrt(Math.pow(this.vx,2)+Math.pow(this.vy,2));return e>t},s.prototype.isSelected=function(){return this.selected},s.prototype.getValue=function(){return this.value},s.prototype.getDistance=function(t,e){var i=this.x-t,s=this.y-e;return Math.sqrt(i*i+s*s)},s.prototype.setValueRange=function(t,e){if(!this.radiusFixed&&void 0!==this.value)if(e==t)this.options.radius=(this.options.radiusMin+this.options.radiusMax)/2;else{var i=(this.options.radiusMax-this.options.radiusMin)/(e-t);this.options.radius=(this.value-t)*i+this.options.radiusMin}this.baseRadiusValue=this.options.radius},s.prototype.draw=function(){throw"Draw method not initialized for node"},s.prototype.resize=function(){throw"Resize method not initialized for node"},s.prototype.isOverlappingWith=function(t){return this.leftt.left&&this.topt.top},s.prototype._resizeImage=function(){if(!this.width||!this.height){var t,e;if(this.value){this.options.radius=this.baseRadiusValue;var i=this.imageObj.height/this.imageObj.width;void 0!==i?(t=this.options.radius||this.imageObj.width,e=this.options.radius*i||this.imageObj.height):(t=0,e=0)}else t=this.imageObj.width,e=this.imageObj.height;this.width=t,this.height=e,this.growthIndicator=0,this.width>0&&this.height>0&&(this.width+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeWidthFactor,this.height+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeHeightFactor,this.options.radius+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeRadiusFactor,this.growthIndicator=this.width-t)}},s.prototype._drawImage=function(t){this._resizeImage(t),this.left=this.x-this.width/2,this.top=this.y-this.height/2;var e;if(0!=this.imageObj.width){if(this.clusterSize>1){var i=this.clusterSize>1?10:0;i*=this.networkScaleInv,i=Math.min(.2*this.width,i),t.globalAlpha=.5,t.drawImage(this.imageObj,this.left-i,this.top-i,this.width+2*i,this.height+2*i)}t.globalAlpha=1,t.drawImage(this.imageObj,this.left,this.top,this.width,this.height),e=this.y+this.height/2}else e=this.y;this._label(t,this.label,this.x,e,void 0,"top")},s.prototype._resizeBox=function(t){if(!this.width){var e=5,i=this.getTextSize(t);this.width=i.width+2*e,this.height=i.height+2*e,this.width+=.5*Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeWidthFactor,this.height+=.5*Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeHeightFactor,this.growthIndicator=this.width-(i.width+2*e)}},s.prototype._drawBox=function(t){this._resizeBox(t),this.left=this.x-this.width/2,this.top=this.y-this.height/2;var e=2.5,i=this.options.borderWidth,s=this.options.borderWidthSelected||2*this.options.borderWidth;t.strokeStyle=this.selected?this.options.color.highlight.border:this.hover?this.options.color.hover.border:this.options.color.border,this.clusterSize>1&&(t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.roundRect(this.left-2*t.lineWidth,this.top-2*t.lineWidth,this.width+4*t.lineWidth,this.height+4*t.lineWidth,this.options.radius),t.stroke()),t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.fillStyle=this.selected?this.options.color.highlight.background:this.options.color.background,t.roundRect(this.left,this.top,this.width,this.height,this.options.radius),t.fill(),t.stroke(),this._label(t,this.label,this.x,this.y)},s.prototype._resizeDatabase=function(t){if(!this.width){var e=5,i=this.getTextSize(t),s=i.width+2*e;this.width=s,this.height=s,this.width+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeWidthFactor,this.height+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeHeightFactor,this.options.radius+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeRadiusFactor,this.growthIndicator=this.width-s}},s.prototype._drawDatabase=function(t){this._resizeDatabase(t),this.left=this.x-this.width/2,this.top=this.y-this.height/2;var e=2.5,i=this.options.borderWidth,s=this.options.borderWidthSelected||2*this.options.borderWidth;t.strokeStyle=this.selected?this.options.color.highlight.border:this.hover?this.options.color.hover.border:this.options.color.border,this.clusterSize>1&&(t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.database(this.x-this.width/2-2*t.lineWidth,this.y-.5*this.height-2*t.lineWidth,this.width+4*t.lineWidth,this.height+4*t.lineWidth),t.stroke()),t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.fillStyle=this.selected?this.options.color.highlight.background:this.hover?this.options.color.hover.background:this.options.color.background,t.database(this.x-this.width/2,this.y-.5*this.height,this.width,this.height),t.fill(),t.stroke(),this._label(t,this.label,this.x,this.y)},s.prototype._resizeCircle=function(t){if(!this.width){var e=5,i=this.getTextSize(t),s=Math.max(i.width,i.height)+2*e;this.options.radius=s/2,this.width=s,this.height=s,this.options.radius+=.5*Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeRadiusFactor,this.growthIndicator=this.options.radius-.5*s}},s.prototype._drawCircle=function(t){this._resizeCircle(t),this.left=this.x-this.width/2,this.top=this.y-this.height/2;var e=2.5,i=this.options.borderWidth,s=this.options.borderWidthSelected||2*this.options.borderWidth;t.strokeStyle=this.selected?this.options.color.highlight.border:this.hover?this.options.color.hover.border:this.options.color.border,this.clusterSize>1&&(t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.circle(this.x,this.y,this.options.radius+2*t.lineWidth),t.stroke()),t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.fillStyle=this.selected?this.options.color.highlight.background:this.hover?this.options.color.hover.background:this.options.color.background,t.circle(this.x,this.y,this.options.radius),t.fill(),t.stroke(),this._label(t,this.label,this.x,this.y)},s.prototype._resizeEllipse=function(t){if(!this.width){var e=this.getTextSize(t);this.width=1.5*e.width,this.height=2*e.height,this.width1&&(t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.ellipse(this.left-2*t.lineWidth,this.top-2*t.lineWidth,this.width+4*t.lineWidth,this.height+4*t.lineWidth),t.stroke()),t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.fillStyle=this.selected?this.options.color.highlight.background:this.hover?this.options.color.hover.background:this.options.color.background,t.ellipse(this.left,this.top,this.width,this.height),t.fill(),t.stroke(),this._label(t,this.label,this.x,this.y)},s.prototype._drawDot=function(t){this._drawShape(t,"circle")},s.prototype._drawTriangle=function(t){this._drawShape(t,"triangle")},s.prototype._drawTriangleDown=function(t){this._drawShape(t,"triangleDown")},s.prototype._drawSquare=function(t){this._drawShape(t,"square")},s.prototype._drawStar=function(t){this._drawShape(t,"star")},s.prototype._resizeShape=function(){if(!this.width){this.options.radius=this.baseRadiusValue;var t=2*this.options.radius;this.width=t,this.height=t,this.width+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeWidthFactor,this.height+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeHeightFactor,this.options.radius+=.5*Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeRadiusFactor,this.growthIndicator=this.width-t}},s.prototype._drawShape=function(t,e){this._resizeShape(t),this.left=this.x-this.width/2,this.top=this.y-this.height/2;var i=2.5,s=this.options.borderWidth,o=this.options.borderWidthSelected||2*this.options.borderWidth,n=2;switch(e){case"dot":n=2;break;case"square":n=2;break;case"triangle":n=3;break;case"triangleDown":n=3;break;case"star":n=4}t.strokeStyle=this.selected?this.options.color.highlight.border:this.hover?this.options.color.hover.border:this.options.color.border,this.clusterSize>1&&(t.lineWidth=(this.selected?o:s)+(this.clusterSize>1?i:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t[e](this.x,this.y,this.options.radius+n*t.lineWidth),t.stroke()),t.lineWidth=(this.selected?o:s)+(this.clusterSize>1?i:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.fillStyle=this.selected?this.options.color.highlight.background:this.hover?this.options.color.hover.background:this.options.color.background,t[e](this.x,this.y,this.options.radius),t.fill(),t.stroke(),this.label&&this._label(t,this.label,this.x,this.y+this.height/2,void 0,"top",!0)},s.prototype._resizeText=function(t){if(!this.width){var e=5,i=this.getTextSize(t);this.width=i.width+2*e,this.height=i.height+2*e,this.width+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeWidthFactor,this.height+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeHeightFactor,this.options.radius+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeRadiusFactor,this.growthIndicator=this.width-(i.width+2*e) }},s.prototype._drawText=function(t){this._resizeText(t),this.left=this.x-this.width/2,this.top=this.y-this.height/2,this._label(t,this.label,this.x,this.y)},s.prototype._label=function(t,e,i,s,o,n,r){if(e&&Number(this.options.fontSize)*this.networkScale>this.fontDrawThreshold){t.font=(this.selected?"bold ":"")+this.options.fontSize+"px "+this.options.fontFace;var a=e.split("\n"),h=a.length,d=Number(this.options.fontSize)+4,l=s+(1-h)/2*d;1==r&&(l=s+(1-h)/(2*d));for(var c=t.measureText(a[0]).width,p=1;h>p;p++){var u=t.measureText(a[p]).width;c=u>c?u:c}var m=this.options.fontSize*h,f=i-c/2,g=s-m/2;"top"==n&&(g+=.5*d),this.labelDimensions={top:g,left:f,width:c,height:m,yLine:l},void 0!==this.options.fontFill&&null!==this.options.fontFill&&"none"!==this.options.fontFill&&(t.fillStyle=this.options.fontFill,t.fillRect(f,g,c,m)),t.fillStyle=this.options.fontColor||"black",t.textAlign=o||"center",t.textBaseline=n||"middle";for(var p=0;h>p;p++)t.fillText(a[p],i,l),l+=d}},s.prototype.getTextSize=function(t){if(void 0!==this.label){t.font=(this.selected?"bold ":"")+this.options.fontSize+"px "+this.options.fontFace;for(var e=this.label.split("\n"),i=(Number(this.options.fontSize)+4)*e.length,s=0,o=0,n=e.length;n>o;o++)s=Math.max(s,t.measureText(e[o]).width);return{width:s,height:i}}return{width:0,height:0}},s.prototype.inArea=function(){return void 0!==this.width?this.x+this.width*this.networkScaleInv>=this.canvasTopLeft.x&&this.x-this.width*this.networkScaleInv=this.canvasTopLeft.y&&this.y-this.height*this.networkScaleInv=this.canvasTopLeft.x&&this.x=this.canvasTopLeft.y&&this.ys&&(n=s-e-this.padding),no&&(r=o-i-this.padding),ri;i++)if(e.id===r.nodes[i].id){o=r.nodes[i];break}for(o||(o={id:e.id},t.node&&(o.attr=a(o.attr,t.node))),i=n.length-1;i>=0;i--){var h=n[i];h.nodes||(h.nodes=[]),-1==h.nodes.indexOf(o)&&h.nodes.push(o)}e.attr&&(o.attr=a(o.attr,e.attr))}function l(t,e){if(t.edges||(t.edges=[]),t.edges.push(e),t.edge){var i=a({},t.edge);e.attr=a(i,e.attr)}}function c(t,e,i,s,o){var n={from:e,to:i,type:s};return t.edge&&(n.attr=a({},t.edge)),n.attr=a(n.attr||{},o),n}function p(){for(k=M.NULL,L="";" "==O||" "==O||"\n"==O||"\r"==O;)o();do{var t=!1;if("#"==O){for(var e=T-1;" "==E.charAt(e)||" "==E.charAt(e);)e--;if("\n"==E.charAt(e)||""==E.charAt(e)){for(;""!=O&&"\n"!=O;)o();t=!0}}if("/"==O&&"/"==n()){for(;""!=O&&"\n"!=O;)o();t=!0}if("/"==O&&"*"==n()){for(;""!=O;){if("*"==O&&"/"==n()){o(),o();break}o()}t=!0}for(;" "==O||" "==O||"\n"==O||"\r"==O;)o()}while(t);if(""==O)return void(k=M.DELIMITER);var i=O+n();if(C[i])return k=M.DELIMITER,L=i,o(),void o();if(C[O])return k=M.DELIMITER,L=O,void o();if(r(O)||"-"==O){for(L+=O,o();r(O);)L+=O,o();return"false"==L?L=!1:"true"==L?L=!0:isNaN(Number(L))||(L=Number(L)),void(k=M.IDENTIFIER)}if('"'==O){for(o();""!=O&&('"'!=O||'"'==O&&'"'==n());)L+=O,'"'==O&&o(),o();if('"'!=O)throw x('End of string " expected');return o(),void(k=M.IDENTIFIER)}for(k=M.UNKNOWN;""!=O;)L+=O,o();throw new SyntaxError('Syntax error in part "'+w(L,30)+'"')}function u(){var t={};if(s(),p(),"strict"==L&&(t.strict=!0,p()),("graph"==L||"digraph"==L)&&(t.type=L,p()),k==M.IDENTIFIER&&(t.id=L,p()),"{"!=L)throw x("Angle bracket { expected");if(p(),m(t),"}"!=L)throw x("Angle bracket } expected");if(p(),""!==L)throw x("End of file expected");return p(),delete t.node,delete t.edge,delete t.graph,t}function m(t){for(;""!==L&&"}"!=L;)f(t),";"==L&&p()}function f(t){var e=g(t);if(e)return void b(t,e);var i=v(t);if(!i){if(k!=M.IDENTIFIER)throw x("Identifier expected");var s=L;if(p(),"="==L){if(p(),k!=M.IDENTIFIER)throw x("Identifier expected");t[s]=L,p()}else y(t,s)}}function g(t){var e=null;if("subgraph"==L&&(e={},e.type="subgraph",p(),k==M.IDENTIFIER&&(e.id=L,p())),"{"==L){if(p(),e||(e={}),e.parent=t,e.node=t.node,e.edge=t.edge,e.graph=t.graph,m(e),"}"!=L)throw x("Angle bracket } expected");p(),delete e.node,delete e.edge,delete e.graph,delete e.parent,t.subgraphs||(t.subgraphs=[]),t.subgraphs.push(e)}return e}function v(t){return"node"==L?(p(),t.node=_(),"node"):"edge"==L?(p(),t.edge=_(),"edge"):"graph"==L?(p(),t.graph=_(),"graph"):null}function y(t,e){var i={id:e},s=_();s&&(i.attr=s),d(t,i),b(t,e)}function b(t,e){for(;"->"==L||"--"==L;){var i,s=L;p();var o=g(t);if(o)i=o;else{if(k!=M.IDENTIFIER)throw x("Identifier or subgraph expected");i=L,d(t,{id:i}),p()}var n=_(),r=c(t,e,i,s,n);l(t,r),e=i}}function _(){for(var t=null;"["==L;){for(p(),t={};""!==L&&"]"!=L;){if(k!=M.IDENTIFIER)throw x("Attribute name expected");var e=L;if(p(),"="!=L)throw x("Equal sign = expected");if(p(),k!=M.IDENTIFIER)throw x("Attribute value expected");var i=L;h(t,e,i),p(),","==L&&p()}if("]"!=L)throw x("Bracket ] expected");p()}return t}function x(t){return new SyntaxError(t+', got "'+w(L,30)+'" (char '+T+")")}function w(t,e){return t.length<=e?t:t.substr(0,27)+"..."}function S(t,e,i){Array.isArray(t)?t.forEach(function(t){Array.isArray(e)?e.forEach(function(e){i(t,e)}):i(t,e)}):Array.isArray(e)?e.forEach(function(e){i(t,e)}):i(t,e)}function D(t){var e=i(t),s={nodes:[],edges:[],options:{}};if(e.nodes&&e.nodes.forEach(function(t){var e={id:t.id,label:String(t.label||t.id)};a(e,t.attr),e.image&&(e.shape="image"),s.nodes.push(e)}),e.edges){var o=function(t){var e={from:t.from,to:t.to};return a(e,t.attr),e.style="->"==t.type?"arrow":"line",e};e.edges.forEach(function(t){var e,i;e=t.from instanceof Object?t.from.nodes:{id:t.from},i=t.to instanceof Object?t.to.nodes:{id:t.to},t.from instanceof Object&&t.from.edges&&t.from.edges.forEach(function(t){var e=o(t);s.edges.push(e)}),S(e,i,function(e,i){var n=c(s,e.id,i.id,t.type,t.attr),r=o(n);s.edges.push(r)}),t.to instanceof Object&&t.to.edges&&t.to.edges.forEach(function(t){var e=o(t);s.edges.push(e)})})}return e.attr&&(s.options=e.attr),s}var M={NULL:0,DELIMITER:1,IDENTIFIER:2,UNKNOWN:3},C={"{":!0,"}":!0,"[":!0,"]":!0,";":!0,"=":!0,",":!0,"->":!0,"--":!0},E="",T=0,O="",L="",k=M.NULL,N=/[a-zA-Z_0-9.:#]/;e.parseDOT=i,e.DOTToGraph=D},function(t,e){function i(t,e){var i=[],s=[];this.options={edges:{inheritColor:!0},nodes:{allowedToMove:!1,parseColor:!1}},void 0!==e&&(this.options.nodes.allowedToMove=e.allowedToMove|!1,this.options.nodes.parseColor=e.parseColor|!1,this.options.edges.inheritColor=e.inheritColor|!0);for(var o=t.edges,n=t.nodes,r=0;r=s&&(s=864e5),e=new Date(e.valueOf()-.05*s),i=new Date(i.valueOf()+.05*s)}return{start:e,end:i}},s.prototype.setWindow=function(t,e,i){var s=i&&void 0!==i.animate?i.animate:!0;if(1==arguments.length){var o=arguments[0];this.range.setRange(o.start,o.end,s)}else this.range.setRange(t,e,s)},s.prototype.moveTo=function(t,e){var i=this.range.end-this.range.start,s=r.convert(t,"Date").valueOf(),o=s-i/2,n=s+i/2,a=e&&void 0!==e.animate?e.animate:!0;this.range.setRange(o,n,a)},s.prototype.getWindow=function(){var t=this.range.getRange();return{start:new Date(t.start),end:new Date(t.end)}},s.prototype.redraw=function(){var t=!1,e=this.options,i=this.props,s=this.dom;if(s){h.updateHiddenDates(this.body,this.options.hiddenDates),"top"==e.orientation?(r.addClassName(s.root,"top"),r.removeClassName(s.root,"bottom")):(r.removeClassName(s.root,"top"),r.addClassName(s.root,"bottom")),s.root.style.maxHeight=r.option.asSize(e.maxHeight,""),s.root.style.minHeight=r.option.asSize(e.minHeight,""),s.root.style.width=r.option.asSize(e.width,""),i.border.left=(s.centerContainer.offsetWidth-s.centerContainer.clientWidth)/2,i.border.right=i.border.left,i.border.top=(s.centerContainer.offsetHeight-s.centerContainer.clientHeight)/2,i.border.bottom=i.border.top;var o=s.root.offsetHeight-s.root.clientHeight,n=s.root.offsetWidth-s.root.clientWidth;0===s.centerContainer.clientHeight&&(i.border.left=i.border.top,i.border.right=i.border.left),0===s.root.clientHeight&&(n=o),i.center.height=s.center.offsetHeight,i.left.height=s.left.offsetHeight,i.right.height=s.right.offsetHeight,i.top.height=s.top.clientHeight||-i.border.top,i.bottom.height=s.bottom.clientHeight||-i.border.bottom;var a=Math.max(i.left.height,i.center.height,i.right.height),d=i.top.height+a+i.bottom.height+o+i.border.top+i.border.bottom;s.root.style.height=r.option.asSize(e.height,d+"px"),i.root.height=s.root.offsetHeight,i.background.height=i.root.height-o;var l=i.root.height-i.top.height-i.bottom.height-o;i.centerContainer.height=l,i.leftContainer.height=l,i.rightContainer.height=i.leftContainer.height,i.root.width=s.root.offsetWidth,i.background.width=i.root.width-n,i.left.width=s.leftContainer.clientWidth||-i.border.left,i.leftContainer.width=i.left.width,i.right.width=s.rightContainer.clientWidth||-i.border.right,i.rightContainer.width=i.right.width;var c=i.root.width-i.left.width-i.right.width-n;i.center.width=c,i.centerContainer.width=c,i.top.width=c,i.bottom.width=c,s.background.style.height=i.background.height+"px",s.backgroundVertical.style.height=i.background.height+"px",s.backgroundHorizontal.style.height=i.centerContainer.height+"px",s.centerContainer.style.height=i.centerContainer.height+"px",s.leftContainer.style.height=i.leftContainer.height+"px",s.rightContainer.style.height=i.rightContainer.height+"px",s.background.style.width=i.background.width+"px",s.backgroundVertical.style.width=i.centerContainer.width+"px",s.backgroundHorizontal.style.width=i.background.width+"px",s.centerContainer.style.width=i.center.width+"px",s.top.style.width=i.top.width+"px",s.bottom.style.width=i.bottom.width+"px",s.background.style.left="0",s.background.style.top="0",s.backgroundVertical.style.left=i.left.width+i.border.left+"px",s.backgroundVertical.style.top="0",s.backgroundHorizontal.style.left="0",s.backgroundHorizontal.style.top=i.top.height+"px",s.centerContainer.style.left=i.left.width+"px",s.centerContainer.style.top=i.top.height+"px",s.leftContainer.style.left="0",s.leftContainer.style.top=i.top.height+"px",s.rightContainer.style.left=i.left.width+i.center.width+"px",s.rightContainer.style.top=i.top.height+"px",s.top.style.left=i.left.width+"px",s.top.style.top="0",s.bottom.style.left=i.left.width+"px",s.bottom.style.top=i.top.height+i.centerContainer.height+"px",this._updateScrollTop();var p=this.props.scrollTop;"bottom"==e.orientation&&(p+=Math.max(this.props.centerContainer.height-this.props.center.height-this.props.border.top-this.props.border.bottom,0)),s.center.style.left="0",s.center.style.top=p+"px",s.left.style.left="0",s.left.style.top=p+"px",s.right.style.left="0",s.right.style.top=p+"px";var u=0==this.props.scrollTop?"hidden":"",m=this.props.scrollTop==this.props.scrollTopMin?"hidden":"";if(s.shadowTop.style.visibility=u,s.shadowBottom.style.visibility=m,s.shadowTopLeft.style.visibility=u,s.shadowBottomLeft.style.visibility=m,s.shadowTopRight.style.visibility=u,s.shadowBottomRight.style.visibility=m,this.components.forEach(function(e){t=e.redraw()||t}),t){var f=3;this.redrawCount0&&(this.props.scrollTop=0),this.props.scrollTops;s++){var o=s%2===0?1.3*i:.5*i;this.lineTo(t+o*Math.sin(2*s*Math.PI/10),e-o*Math.cos(2*s*Math.PI/10))}this.closePath()},CanvasRenderingContext2D.prototype.roundRect=function(t,e,i,s,o){var n=Math.PI/180;0>i-2*o&&(o=i/2),0>s-2*o&&(o=s/2),this.beginPath(),this.moveTo(t+o,e),this.lineTo(t+i-o,e),this.arc(t+i-o,e+o,o,270*n,360*n,!1),this.lineTo(t+i,e+s-o),this.arc(t+i-o,e+s-o,o,0,90*n,!1),this.lineTo(t+o,e+s),this.arc(t+o,e+s-o,o,90*n,180*n,!1),this.lineTo(t,e+o),this.arc(t+o,e+o,o,180*n,270*n,!1)},CanvasRenderingContext2D.prototype.ellipse=function(t,e,i,s){var o=.5522848,n=i/2*o,r=s/2*o,a=t+i,h=e+s,d=t+i/2,l=e+s/2;this.beginPath(),this.moveTo(t,l),this.bezierCurveTo(t,l-r,d-n,e,d,e),this.bezierCurveTo(d+n,e,a,l-r,a,l),this.bezierCurveTo(a,l+r,d+n,h,d,h),this.bezierCurveTo(d-n,h,t,l+r,t,l)},CanvasRenderingContext2D.prototype.database=function(t,e,i,s){var o=1/3,n=i,r=s*o,a=.5522848,h=n/2*a,d=r/2*a,l=t+n,c=e+r,p=t+n/2,u=e+r/2,m=e+(s-r/2),f=e+s;this.beginPath(),this.moveTo(l,u),this.bezierCurveTo(l,u+d,p+h,c,p,c),this.bezierCurveTo(p-h,c,t,u+d,t,u),this.bezierCurveTo(t,u-d,p-h,e,p,e),this.bezierCurveTo(p+h,e,l,u-d,l,u),this.lineTo(l,m),this.bezierCurveTo(l,m+d,p+h,f,p,f),this.bezierCurveTo(p-h,f,t,m+d,t,m),this.lineTo(t,u)},CanvasRenderingContext2D.prototype.arrow=function(t,e,i,s){var o=t-s*Math.cos(i),n=e-s*Math.sin(i),r=t-.9*s*Math.cos(i),a=e-.9*s*Math.sin(i),h=o+s/3*Math.cos(i+.5*Math.PI),d=n+s/3*Math.sin(i+.5*Math.PI),l=o+s/3*Math.cos(i-.5*Math.PI),c=n+s/3*Math.sin(i-.5*Math.PI);this.beginPath(),this.moveTo(t,e),this.lineTo(h,d),this.lineTo(r,a),this.lineTo(l,c),this.closePath()},CanvasRenderingContext2D.prototype.dashedLine=function(t,e,i,s,o){o||(o=[10,5]),0==p&&(p=.001);var n=o.length;this.moveTo(t,e);for(var r=i-t,a=s-e,h=a/r,d=Math.sqrt(r*r+a*a),l=0,c=!0;d>=.1;){var p=o[l++%n];p>d&&(p=d);var u=Math.sqrt(p*p/(1+h*h));0>r&&(u=-u),t+=u,e+=h*u,this[c?"lineTo":"moveTo"](t,e),d-=p,c=!c}})},function(t,e,i){function s(t,e){this.groupId=t,this.options=e}var o=i(2),n=i(53);s.prototype.getYRange=function(t){for(var e=t[0].y,i=t[0].y,s=0;st[s].y?t[s].y:e,i=i0){var r,a,h=Number(i.svg.style.height.replace("px",""));if(r=o.getSVGElement("path",i.svgElements,i.svg),r.setAttributeNS(null,"class",e.className),void 0!==e.style&&r.setAttributeNS(null,"style",e.style),a=1==e.options.catmullRom.enabled?s._catmullRom(t,e):s._linear(t),1==e.options.shaded.enabled){var d,l=o.getSVGElement("path",i.svgElements,i.svg);d="top"==e.options.shaded.orientation?"M"+t[0].x+",0 "+a+"L"+t[t.length-1].x+",0":"M"+t[0].x+","+h+" "+a+"L"+t[t.length-1].x+","+h,l.setAttributeNS(null,"class",e.className+" fill"),void 0!==e.options.shaded.style&&l.setAttributeNS(null,"style",e.options.shaded.style),l.setAttributeNS(null,"d",d)}r.setAttributeNS(null,"d","M"+a),1==e.options.drawPoints.enabled&&n.draw(t,e,i)}},s._catmullRomUniform=function(t){for(var e,i,s,o,n,r,a=Math.round(t[0].x)+","+Math.round(t[0].y)+" ",h=1/6,d=t.length,l=0;d-1>l;l++)e=0==l?t[0]:t[l-1],i=t[l],s=t[l+1],o=d>l+2?t[l+2]:s,n={x:(-e.x+6*i.x+s.x)*h,y:(-e.y+6*i.y+s.y)*h},r={x:(i.x+6*s.x-o.x)*h,y:(i.y+6*s.y-o.y)*h},a+="C"+n.x+","+n.y+" "+r.x+","+r.y+" "+s.x+","+s.y+" ";return a},s._catmullRom=function(t,e){var i=e.options.catmullRom.alpha;if(0==i||void 0===i)return this._catmullRomUniform(t);for(var s,o,n,r,a,h,d,l,c,p,u,m,f,g,v,y,b,_,x,w=Math.round(t[0].x)+","+Math.round(t[0].y)+" ",S=t.length,D=0;S-1>D;D++)s=0==D?t[0]:t[D-1],o=t[D],n=t[D+1],r=S>D+2?t[D+2]:n,d=Math.sqrt(Math.pow(s.x-o.x,2)+Math.pow(s.y-o.y,2)),l=Math.sqrt(Math.pow(o.x-n.x,2)+Math.pow(o.y-n.y,2)),c=Math.sqrt(Math.pow(n.x-r.x,2)+Math.pow(n.y-r.y,2)),g=Math.pow(c,i),y=Math.pow(c,2*i),v=Math.pow(l,i),b=Math.pow(l,2*i),x=Math.pow(d,i),_=Math.pow(d,2*i),p=2*_+3*x*v+b,u=2*y+3*g*v+b,m=3*x*(x+v),m>0&&(m=1/m),f=3*g*(g+v),f>0&&(f=1/f),a={x:(-b*s.x+p*o.x+_*n.x)*m,y:(-b*s.y+p*o.y+_*n.y)*m},h={x:(y*o.x+u*n.x-b*r.x)*f,y:(y*o.y+u*n.y-b*r.y)*f},0==a.x&&0==a.y&&(a=o),0==h.x&&0==h.y&&(h=n),w+="C"+a.x+","+a.y+" "+h.x+","+h.y+" "+n.x+","+n.y+" ";return w},s._linear=function(t){for(var e="",i=0;it[s].y?t[s].y:e,i=i0&&(n=Math.min(n,Math.abs(c[d-1].x-r))),a=s._getSafeDrawData(n,h,m);else{var g=d+(p[r].amount-p[r].resolved),v=d-(p[r].resolved+1);g0&&(n=Math.min(n,Math.abs(c[v].x-r))),a=s._getSafeDrawData(n,h,m),p[r].resolved+=1,"stack"==h.options.barChart.handleOverlap?(f=p[r].accumulated,p[r].accumulated+=h.zeroPosition-c[d].y):"sideBySide"==h.options.barChart.handleOverlap&&(a.width=a.width/p[r].amount,a.offset+=p[r].resolved*a.width-.5*a.width*(p[r].amount+1),"left"==h.options.barChart.align?a.offset-=.5*a.width:"right"==h.options.barChart.align&&(a.offset+=.5*a.width))}o.drawBar(c[d].x+a.offset,c[d].y-f,a.width,h.zeroPosition-c[d].y,h.className+" bar",i.svgElements,i.svg),1==h.options.drawPoints.enabled&&o.drawPoint(c[d].x+a.offset,c[d].y,h,i.svgElements,i.svg)}},s._getDataIntersections=function(t,e){for(var i,s=0;s0&&(i=Math.min(i,Math.abs(e[s-1].x-e[s].x))),0==i&&(void 0===t[e[s].x]&&(t[e[s].x]={amount:0,resolved:0,accumulated:0}),t[e[s].x].amount+=1)},s._getSafeDrawData=function(t,e,i){var s,o;return t0?(s=i>t?i:t,o=0,"left"==e.options.barChart.align?o-=.5*t:"right"==e.options.barChart.align&&(o+=.5*t)):(s=e.options.barChart.width,o=0,"left"==e.options.barChart.align?o-=.5*e.options.barChart.width:"right"==e.options.barChart.align&&(o+=.5*e.options.barChart.width)),{width:s,offset:o}},s.getStackedBarYRange=function(t,e,i,o,n){if(t.length>0){t.sort(function(t,e){return t.x==e.x?t.groupId-e.groupId:t.x-e.x});var r={};s._getDataIntersections(r,t),e[o]=s._getStackedBarYRange(r,t),e[o].yAxisOrientation=n,i.push(o) -}},s._getStackedBarYRange=function(t,e){for(var i,s=e[0].y,o=e[0].y,n=0;ne[n].y?e[n].y:s,o=ot[r].accumulated?t[r].accumulated:s,o=ot[s].y?t[s].y:e,i=is;++s)i[s].apply(this,e)}return this},e.prototype.listeners=function(t){return this._callbacks=this._callbacks||{},this._callbacks[t]||[]},e.prototype.hasListeners=function(t){return!!this.listeners(t).length}},function(t,e){var i,s,o;!function(n,r){s=[],i=r,o="function"==typeof i?i.apply(e,s):i,!(void 0!==o&&(t.exports=o))}(this,function(){function t(t){var e,i=t&&t.preventDefault||!1,s={},o={keydown:{},keyup:{}},n={};for(e=97;122>=e;e++)n[String.fromCharCode(e)]={code:65+(e-97),shift:!1};for(e=65;90>=e;e++)n[String.fromCharCode(e)]={code:e,shift:!0};for(e=0;9>=e;e++)n[""+e]={code:48+e,shift:!1};for(e=1;12>=e;e++)n["F"+e]={code:111+e,shift:!1};for(e=0;9>=e;e++)n["num"+e]={code:96+e,shift:!1};n["num*"]={code:106,shift:!1},n["num+"]={code:107,shift:!1},n["num-"]={code:109,shift:!1},n["num/"]={code:111,shift:!1},n["num."]={code:110,shift:!1},n.left={code:37,shift:!1},n.up={code:38,shift:!1},n.right={code:39,shift:!1},n.down={code:40,shift:!1},n.space={code:32,shift:!1},n.enter={code:13,shift:!1},n.shift={code:16,shift:void 0},n.esc={code:27,shift:!1},n.backspace={code:8,shift:!1},n.tab={code:9,shift:!1},n.ctrl={code:17,shift:!1},n.alt={code:18,shift:!1},n["delete"]={code:46,shift:!1},n.pageup={code:33,shift:!1},n.pagedown={code:34,shift:!1},n["="]={code:187,shift:!1},n["-"]={code:189,shift:!1},n["]"]={code:221,shift:!1},n["["]={code:219,shift:!1};var r=function(t){h(t,"keydown")},a=function(t){h(t,"keyup")},h=function(t,e){if(void 0!==o[e][t.keyCode]){for(var s=o[e][t.keyCode],n=0;n0)for(i in He)s=He[i],o=e[s],"undefined"!=typeof o&&(t[s]=o);return t}function b(t){return 0>t?Math.ceil(t):Math.floor(t)}function _(t,e,i){for(var s=""+Math.abs(t),o=t>=0;s.lengths;s++)(i&&t[s]!==e[s]||!i&&k(t[s])!==k(e[s]))&&r++;return r+n}function T(t){if(t){var e=t.toLowerCase().replace(/(.)s$/,"$1");t=mi[t]||fi[e]||e}return t}function O(t){var e,i,s={};for(i in t)a(t,i)&&(e=T(i),e&&(s[e]=t[i]));return s}function L(t){var e,i;if(0===t.indexOf("week"))e=7,i="day";else{if(0!==t.indexOf("month"))return;e=12,i="month"}De[t]=function(s,o){var r,a,h=De._locale[t],d=[];if("number"==typeof s&&(o=s,s=n),a=function(t){var e=De().utc().set(i,t);return h.call(De._locale,e,s||"")},null!=o)return a(o);for(r=0;e>r;r++)d.push(a(r));return d}}function k(t){var e=+t,i=0;return 0!==e&&isFinite(e)&&(i=e>=0?Math.floor(e):Math.ceil(e)),i}function N(t,e){return new Date(Date.UTC(t,e+1,0)).getUTCDate()}function I(t,e,i){return pe(De([t,11,31+e-i]),e,i).week}function A(t){return z(t)?366:365}function z(t){return t%4===0&&t%100!==0||t%400===0}function P(t){var e;t._a&&-2===t._pf.overflow&&(e=t._a[Ne]<0||t._a[Ne]>11?Ne:t._a[Ie]<1||t._a[Ie]>N(t._a[ke],t._a[Ne])?Ie:t._a[Ae]<0||t._a[Ae]>24||24===t._a[Ae]&&(0!==t._a[ze]||0!==t._a[Pe]||0!==t._a[Re])?Ae:t._a[ze]<0||t._a[ze]>59?ze:t._a[Pe]<0||t._a[Pe]>59?Pe:t._a[Re]<0||t._a[Re]>999?Re:-1,t._pf._overflowDayOfYear&&(ke>e||e>Ie)&&(e=Ie),t._pf.overflow=e)}function R(t){return null==t._isValid&&(t._isValid=!isNaN(t._d.getTime())&&t._pf.overflow<0&&!t._pf.empty&&!t._pf.invalidMonth&&!t._pf.nullInput&&!t._pf.invalidFormat&&!t._pf.userInvalidated,t._strict&&(t._isValid=t._isValid&&0===t._pf.charsLeftOver&&0===t._pf.unusedTokens.length&&t._pf.bigHour===n)),t._isValid}function F(t){return t?t.toLowerCase().replace("_","-"):t}function H(t){for(var e,i,s,o,n=0;n0;){if(s=Y(o.slice(0,e).join("-")))return s;if(i&&i.length>=e&&E(o,i,!0)>=e-1)break;e--}n++}return null}function Y(t){var e=null;if(!Fe[t]&&Ye)try{e=De.locale(),!function(){var t=new Error('Cannot find module "./locale"');throw t.code="MODULE_NOT_FOUND",t}(),De.locale(e)}catch(i){}return Fe[t]}function B(t,e){var i,s;return e._isUTC?(i=e.clone(),s=(De.isMoment(t)||C(t)?+t:+De(t))-+i,i._d.setTime(+i._d+s),De.updateOffset(i,!1),i):De(t).local()}function W(t){return t.match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"")}function G(t){var e,i,s=t.match(je);for(e=0,i=s.length;i>e;e++)s[e]=_i[s[e]]?_i[s[e]]:W(s[e]);return function(o){var n="";for(e=0;i>e;e++)n+=s[e]instanceof Function?s[e].call(o,t):s[e];return n}}function j(t,e){return t.isValid()?(e=U(e,t.localeData()),gi[e]||(gi[e]=G(e)),gi[e](t)):t.localeData().invalidDate()}function U(t,e){function i(t){return e.longDateFormat(t)||t}var s=5;for(Ue.lastIndex=0;s>=0&&Ue.test(t);)t=t.replace(Ue,i),Ue.lastIndex=0,s-=1;return t}function V(t,e){var i,s=e._strict;switch(t){case"Q":return ii;case"DDDD":return oi;case"YYYY":case"GGGG":case"gggg":return s?ni:qe;case"Y":case"G":case"g":return ai;case"YYYYYY":case"YYYYY":case"GGGGG":case"ggggg":return s?ri:Ze;case"S":if(s)return ii;case"SS":if(s)return si;case"SSS":if(s)return oi;case"DDD":return Xe;case"MMM":case"MMMM":case"dd":case"ddd":case"dddd":return Qe;case"a":case"A":return e._locale._meridiemParse;case"x":return ti;case"X":return ei;case"Z":case"ZZ":return $e;case"T":return Je;case"SSSS":return Ke;case"MM":case"DD":case"YY":case"GG":case"gg":case"HH":case"hh":case"mm":case"ss":case"ww":case"WW":return s?si:Ve;case"M":case"D":case"d":case"H":case"h":case"m":case"s":case"w":case"W":case"e":case"E":return Ve;case"Do":return s?e._locale._ordinalParse:e._locale._ordinalParseLenient;default:return i=new RegExp(ee(te(t.replace("\\","")),"i"))}}function X(t){t=t||"";var e=t.match($e)||[],i=e[e.length-1]||[],s=(i+"").match(pi)||["-",0,0],o=+(60*s[1])+k(s[2]);return"+"===s[0]?-o:o}function q(t,e,i){var s,o=i._a;switch(t){case"Q":null!=e&&(o[Ne]=3*(k(e)-1));break;case"M":case"MM":null!=e&&(o[Ne]=k(e)-1);break;case"MMM":case"MMMM":s=i._locale.monthsParse(e,t,i._strict),null!=s?o[Ne]=s:i._pf.invalidMonth=e;break;case"D":case"DD":null!=e&&(o[Ie]=k(e));break;case"Do":null!=e&&(o[Ie]=k(parseInt(e.match(/\d{1,2}/)[0],10)));break;case"DDD":case"DDDD":null!=e&&(i._dayOfYear=k(e));break;case"YY":o[ke]=De.parseTwoDigitYear(e);break;case"YYYY":case"YYYYY":case"YYYYYY":o[ke]=k(e);break;case"a":case"A":i._isPm=i._locale.isPM(e);break;case"h":case"hh":i._pf.bigHour=!0;case"H":case"HH":o[Ae]=k(e);break;case"m":case"mm":o[ze]=k(e);break;case"s":case"ss":o[Pe]=k(e);break;case"S":case"SS":case"SSS":case"SSSS":o[Re]=k(1e3*("0."+e));break;case"x":i._d=new Date(k(e));break;case"X":i._d=new Date(1e3*parseFloat(e));break;case"Z":case"ZZ":i._useUTC=!0,i._tzm=X(e);break;case"dd":case"ddd":case"dddd":s=i._locale.weekdaysParse(e),null!=s?(i._w=i._w||{},i._w.d=s):i._pf.invalidWeekday=e;break;case"w":case"ww":case"W":case"WW":case"d":case"e":case"E":t=t.substr(0,1);case"gggg":case"GGGG":case"GGGGG":t=t.substr(0,2),e&&(i._w=i._w||{},i._w[t]=k(e));break;case"gg":case"GG":i._w=i._w||{},i._w[t]=De.parseTwoDigitYear(e)}}function Z(t){var e,i,s,o,n,a,h;e=t._w,null!=e.GG||null!=e.W||null!=e.E?(n=1,a=4,i=r(e.GG,t._a[ke],pe(De(),1,4).year),s=r(e.W,1),o=r(e.E,1)):(n=t._locale._week.dow,a=t._locale._week.doy,i=r(e.gg,t._a[ke],pe(De(),n,a).year),s=r(e.w,1),null!=e.d?(o=e.d,n>o&&++s):o=null!=e.e?e.e+n:n),h=ue(i,s,o,a,n),t._a[ke]=h.year,t._dayOfYear=h.dayOfYear}function K(t){var e,i,s,o,n=[];if(!t._d){for(s=$(t),t._w&&null==t._a[Ie]&&null==t._a[Ne]&&Z(t),t._dayOfYear&&(o=r(t._a[ke],s[ke]),t._dayOfYear>A(o)&&(t._pf._overflowDayOfYear=!0),i=he(o,0,t._dayOfYear),t._a[Ne]=i.getUTCMonth(),t._a[Ie]=i.getUTCDate()),e=0;3>e&&null==t._a[e];++e)t._a[e]=n[e]=s[e];for(;7>e;e++)t._a[e]=n[e]=null==t._a[e]?2===e?1:0:t._a[e];24===t._a[Ae]&&0===t._a[ze]&&0===t._a[Pe]&&0===t._a[Re]&&(t._nextDay=!0,t._a[Ae]=0),t._d=(t._useUTC?he:ae).apply(null,n),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()+t._tzm),t._nextDay&&(t._a[Ae]=24)}}function Q(t){var e;t._d||(e=O(t._i),t._a=[e.year,e.month,e.day||e.date,e.hour,e.minute,e.second,e.millisecond],K(t))}function $(t){var e=new Date;return t._useUTC?[e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()]:[e.getFullYear(),e.getMonth(),e.getDate()]}function J(t){if(t._f===De.ISO_8601)return void se(t);t._a=[],t._pf.empty=!0;var e,i,s,o,r,a=""+t._i,h=a.length,d=0;for(s=U(t._f,t._locale).match(je)||[],e=0;e0&&t._pf.unusedInput.push(r),a=a.slice(a.indexOf(i)+i.length),d+=i.length),_i[o]?(i?t._pf.empty=!1:t._pf.unusedTokens.push(o),q(o,i,t)):t._strict&&!i&&t._pf.unusedTokens.push(o);t._pf.charsLeftOver=h-d,a.length>0&&t._pf.unusedInput.push(a),t._pf.bigHour===!0&&t._a[Ae]<=12&&(t._pf.bigHour=n),t._isPm&&t._a[Ae]<12&&(t._a[Ae]+=12),t._isPm===!1&&12===t._a[Ae]&&(t._a[Ae]=0),K(t),P(t)}function te(t){return t.replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(t,e,i,s,o){return e||i||s||o})}function ee(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function ie(t){var e,i,s,o,n;if(0===t._f.length)return t._pf.invalidFormat=!0,void(t._d=new Date(0/0));for(o=0;on)&&(s=n,i=e));v(t,i||e)}function se(t){var e,i,s=t._i,o=hi.exec(s);if(o){for(t._pf.iso=!0,e=0,i=li.length;i>e;e++)if(li[e][1].exec(s)){t._f=li[e][0]+(o[6]||" ");break}for(e=0,i=ci.length;i>e;e++)if(ci[e][1].exec(s)){t._f+=ci[e][0];break}s.match($e)&&(t._f+="Z"),J(t)}else t._isValid=!1}function oe(t){se(t),t._isValid===!1&&(delete t._isValid,De.createFromInputFallback(t))}function ne(t,e){var i,s=[];for(i=0;it&&a.setFullYear(t),a}function he(t){var e=new Date(Date.UTC.apply(null,arguments));return 1970>t&&e.setUTCFullYear(t),e}function de(t,e){if("string"==typeof t)if(isNaN(t)){if(t=e.weekdaysParse(t),"number"!=typeof t)return null}else t=parseInt(t,10);return t}function le(t,e,i,s,o){return o.relativeTime(e||1,!!i,t,s)}function ce(t,e,i){var s=De.duration(t).abs(),o=Oe(s.as("s")),n=Oe(s.as("m")),r=Oe(s.as("h")),a=Oe(s.as("d")),h=Oe(s.as("M")),d=Oe(s.as("y")),l=o0,l[4]=i,le.apply({},l)}function pe(t,e,i){var s,o=i-e,n=i-t.day();return n>o&&(n-=7),o-7>n&&(n+=7),s=De(t).add(n,"d"),{week:Math.ceil(s.dayOfYear()/7),year:s.year()}}function ue(t,e,i,s,o){var n,r,a=he(t,0,1).getUTCDay();return a=0===a?7:a,i=null!=i?i:o,n=o-a+(a>s?7:0)-(o>a?7:0),r=7*(e-1)+(i-o)+n+1,{year:r>0?t:t-1,dayOfYear:r>0?r:A(t-1)+r}}function me(t){var e,i=t._i,s=t._f;return t._locale=t._locale||De.localeData(t._l),null===i||s===n&&""===i?De.invalid({nullInput:!0}):("string"==typeof i&&(t._i=i=t._locale.preparse(i)),De.isMoment(i)?new f(i,!0):(s?M(s)?ie(t):J(t):re(t),e=new f(t),e._nextDay&&(e.add(1,"d"),e._nextDay=n),e))}function fe(t,e){var i,s;if(1===e.length&&M(e[0])&&(e=e[0]),!e.length)return De();for(i=e[0],s=1;s=0?"+":"-";return e+_(Math.abs(t),6)},gg:function(){return _(this.weekYear()%100,2)},gggg:function(){return _(this.weekYear(),4)},ggggg:function(){return _(this.weekYear(),5)},GG:function(){return _(this.isoWeekYear()%100,2)},GGGG:function(){return _(this.isoWeekYear(),4)},GGGGG:function(){return _(this.isoWeekYear(),5)},e:function(){return this.weekday()},E:function(){return this.isoWeekday()},a:function(){return this.localeData().meridiem(this.hours(),this.minutes(),!0)},A:function(){return this.localeData().meridiem(this.hours(),this.minutes(),!1)},H:function(){return this.hours()},h:function(){return this.hours()%12||12},m:function(){return this.minutes()},s:function(){return this.seconds()},S:function(){return k(this.milliseconds()/100)},SS:function(){return _(k(this.milliseconds()/10),2)},SSS:function(){return _(this.milliseconds(),3)},SSSS:function(){return _(this.milliseconds(),3)},Z:function(){var t=-this.zone(),e="+";return 0>t&&(t=-t,e="-"),e+_(k(t/60),2)+":"+_(k(t)%60,2)},ZZ:function(){var t=-this.zone(),e="+";return 0>t&&(t=-t,e="-"),e+_(k(t/60),2)+_(k(t)%60,2)},z:function(){return this.zoneAbbr()},zz:function(){return this.zoneName()},x:function(){return this.valueOf()},X:function(){return this.unix()},Q:function(){return this.quarter()}},xi={},wi=["months","monthsShort","weekdays","weekdaysShort","weekdaysMin"];yi.length;)Ce=yi.pop(),_i[Ce+"o"]=u(_i[Ce],Ce);for(;bi.length;)Ce=bi.pop(),_i[Ce+Ce]=p(_i[Ce],2);_i.DDDD=p(_i.DDD,3),v(m.prototype,{set:function(t){var e,i;for(i in t)e=t[i],"function"==typeof e?this[i]=e:this["_"+i]=e;this._ordinalParseLenient=new RegExp(this._ordinalParse.source+"|"+/\d{1,2}/.source)},_months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),months:function(t){return this._months[t.month()]},_monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),monthsShort:function(t){return this._monthsShort[t.month()]},monthsParse:function(t,e,i){var s,o,n;for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),s=0;12>s;s++){if(o=De.utc([2e3,s]),i&&!this._longMonthsParse[s]&&(this._longMonthsParse[s]=new RegExp("^"+this.months(o,"").replace(".","")+"$","i"),this._shortMonthsParse[s]=new RegExp("^"+this.monthsShort(o,"").replace(".","")+"$","i")),i||this._monthsParse[s]||(n="^"+this.months(o,"")+"|^"+this.monthsShort(o,""),this._monthsParse[s]=new RegExp(n.replace(".",""),"i")),i&&"MMMM"===e&&this._longMonthsParse[s].test(t))return s;if(i&&"MMM"===e&&this._shortMonthsParse[s].test(t))return s;if(!i&&this._monthsParse[s].test(t))return s}},_weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdays:function(t){return this._weekdays[t.day()]},_weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysShort:function(t){return this._weekdaysShort[t.day()]},_weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),weekdaysMin:function(t){return this._weekdaysMin[t.day()]},weekdaysParse:function(t){var e,i,s;for(this._weekdaysParse||(this._weekdaysParse=[]),e=0;7>e;e++)if(this._weekdaysParse[e]||(i=De([2e3,1]).day(e),s="^"+this.weekdays(i,"")+"|^"+this.weekdaysShort(i,"")+"|^"+this.weekdaysMin(i,""),this._weekdaysParse[e]=new RegExp(s.replace(".",""),"i")),this._weekdaysParse[e].test(t))return e},_longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY LT",LLLL:"dddd, MMMM D, YYYY LT"},longDateFormat:function(t){var e=this._longDateFormat[t];return!e&&this._longDateFormat[t.toUpperCase()]&&(e=this._longDateFormat[t.toUpperCase()].replace(/MMMM|MM|DD|dddd/g,function(t){return t.slice(1)}),this._longDateFormat[t]=e),e},isPM:function(t){return"p"===(t+"").toLowerCase().charAt(0)},_meridiemParse:/[ap]\.?m?\.?/i,meridiem:function(t,e,i){return t>11?i?"pm":"PM":i?"am":"AM"},_calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},calendar:function(t,e,i){var s=this._calendar[t];return"function"==typeof s?s.apply(e,[i]):s},_relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},relativeTime:function(t,e,i,s){var o=this._relativeTime[i];return"function"==typeof o?o(t,e,i,s):o.replace(/%d/i,t)},pastFuture:function(t,e){var i=this._relativeTime[t>0?"future":"past"];return"function"==typeof i?i(e):i.replace(/%s/i,e)},ordinal:function(t){return this._ordinal.replace("%d",t)},_ordinal:"%d",_ordinalParse:/\d{1,2}/,preparse:function(t){return t},postformat:function(t){return t},week:function(t){return pe(t,this._week.dow,this._week.doy).week},_week:{dow:0,doy:6},_invalidDate:"Invalid date",invalidDate:function(){return this._invalidDate}}),De=function(t,e,i,s){var o;return"boolean"==typeof i&&(s=i,i=n),o={},o._isAMomentObject=!0,o._i=t,o._f=e,o._l=i,o._strict=s,o._isUTC=!1,o._pf=h(),me(o)},De.suppressDeprecationWarnings=!1,De.createFromInputFallback=l("moment construction falls back to js Date. This is discouraged and will be removed in upcoming major release. Please refer to https://github.com/moment/moment/issues/1407 for more info.",function(t){t._d=new Date(t._i+(t._useUTC?" UTC":""))}),De.min=function(){var t=[].slice.call(arguments,0);return fe("isBefore",t)},De.max=function(){var t=[].slice.call(arguments,0);return fe("isAfter",t)},De.utc=function(t,e,i,s){var o;return"boolean"==typeof i&&(s=i,i=n),o={},o._isAMomentObject=!0,o._useUTC=!0,o._isUTC=!0,o._l=i,o._i=t,o._f=e,o._strict=s,o._pf=h(),me(o).utc()},De.unix=function(t){return De(1e3*t)},De.duration=function(t,e){var i,s,o,n,r=t,h=null;return De.isDuration(t)?r={ms:t._milliseconds,d:t._days,M:t._months}:"number"==typeof t?(r={},e?r[e]=t:r.milliseconds=t):(h=We.exec(t))?(i="-"===h[1]?-1:1,r={y:0,d:k(h[Ie])*i,h:k(h[Ae])*i,m:k(h[ze])*i,s:k(h[Pe])*i,ms:k(h[Re])*i}):(h=Ge.exec(t))?(i="-"===h[1]?-1:1,o=function(t){var e=t&&parseFloat(t.replace(",","."));return(isNaN(e)?0:e)*i},r={y:o(h[2]),M:o(h[3]),d:o(h[4]),h:o(h[5]),m:o(h[6]),s:o(h[7]),w:o(h[8])}):"object"==typeof r&&("from"in r||"to"in r)&&(n=w(De(r.from),De(r.to)),r={},r.ms=n.milliseconds,r.M=n.months),s=new g(r),De.isDuration(t)&&a(t,"_locale")&&(s._locale=t._locale),s},De.version=Ee,De.defaultFormat=di,De.ISO_8601=function(){},De.momentProperties=He,De.updateOffset=function(){},De.relativeTimeThreshold=function(t,e){return vi[t]===n?!1:e===n?vi[t]:(vi[t]=e,!0)},De.lang=l("moment.lang is deprecated. Use moment.locale instead.",function(t,e){return De.locale(t,e)}),De.locale=function(t,e){var i;return t&&(i="undefined"!=typeof e?De.defineLocale(t,e):De.localeData(t),i&&(De.duration._locale=De._locale=i)),De._locale._abbr},De.defineLocale=function(t,e){return null!==e?(e.abbr=t,Fe[t]||(Fe[t]=new m),Fe[t].set(e),De.locale(t),Fe[t]):(delete Fe[t],null)},De.langData=l("moment.langData is deprecated. Use moment.localeData instead.",function(t){return De.localeData(t)}),De.localeData=function(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return De._locale;if(!M(t)){if(e=Y(t))return e;t=[t]}return H(t)},De.isMoment=function(t){return t instanceof f||null!=t&&a(t,"_isAMomentObject")},De.isDuration=function(t){return t instanceof g};for(Ce=wi.length-1;Ce>=0;--Ce)L(wi[Ce]);De.normalizeUnits=function(t){return T(t)},De.invalid=function(t){var e=De.utc(0/0);return null!=t?v(e._pf,t):e._pf.userInvalidated=!0,e -},De.parseZone=function(){return De.apply(null,arguments).parseZone()},De.parseTwoDigitYear=function(t){return k(t)+(k(t)>68?1900:2e3)},v(De.fn=f.prototype,{clone:function(){return De(this)},valueOf:function(){return+this._d+6e4*(this._offset||0)},unix:function(){return Math.floor(+this/1e3)},toString:function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},toDate:function(){return this._offset?new Date(+this):this._d},toISOString:function(){var t=De(this).utc();return 00:!1},parsingFlags:function(){return v({},this._pf)},invalidAt:function(){return this._pf.overflow},utc:function(t){return this.zone(0,t)},local:function(t){return this._isUTC&&(this.zone(0,t),this._isUTC=!1,t&&this.add(this._dateTzOffset(),"m")),this},format:function(t){var e=j(this,t||De.defaultFormat);return this.localeData().postformat(e)},add:S(1,"add"),subtract:S(-1,"subtract"),diff:function(t,e,i){var s,o,n,r=B(t,this),a=6e4*(this.zone()-r.zone());return e=T(e),"year"===e||"month"===e?(s=432e5*(this.daysInMonth()+r.daysInMonth()),o=12*(this.year()-r.year())+(this.month()-r.month()),n=this-De(this).startOf("month")-(r-De(r).startOf("month")),n-=6e4*(this.zone()-De(this).startOf("month").zone()-(r.zone()-De(r).startOf("month").zone())),o+=n/s,"year"===e&&(o/=12)):(s=this-r,o="second"===e?s/1e3:"minute"===e?s/6e4:"hour"===e?s/36e5:"day"===e?(s-a)/864e5:"week"===e?(s-a)/6048e5:s),i?o:b(o)},from:function(t,e){return De.duration({to:this,from:t}).locale(this.locale()).humanize(!e)},fromNow:function(t){return this.from(De(),t)},calendar:function(t){var e=t||De(),i=B(e,this).startOf("day"),s=this.diff(i,"days",!0),o=-6>s?"sameElse":-1>s?"lastWeek":0>s?"lastDay":1>s?"sameDay":2>s?"nextDay":7>s?"nextWeek":"sameElse";return this.format(this.localeData().calendar(o,this,De(e)))},isLeapYear:function(){return z(this.year())},isDST:function(){return this.zone()+t):(i=De.isMoment(t)?+t:+De(t),i<+this.clone().startOf(e))},isBefore:function(t,e){var i;return e=T("undefined"!=typeof e?e:"millisecond"),"millisecond"===e?(t=De.isMoment(t)?t:De(t),+t>+this):(i=De.isMoment(t)?+t:+De(t),+this.clone().endOf(e)t?this:t}),max:l("moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548",function(t){return t=De.apply(null,arguments),t>this?this:t}),zone:function(t,e){var i,s=this._offset||0;return null==t?this._isUTC?s:this._dateTzOffset():("string"==typeof t&&(t=X(t)),Math.abs(t)<16&&(t=60*t),!this._isUTC&&e&&(i=this._dateTzOffset()),this._offset=t,this._isUTC=!0,null!=i&&this.subtract(i,"m"),s!==t&&(!e||this._changeInProgress?D(this,De.duration(s-t,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,De.updateOffset(this,!0),this._changeInProgress=null)),this)},zoneAbbr:function(){return this._isUTC?"UTC":""},zoneName:function(){return this._isUTC?"Coordinated Universal Time":""},parseZone:function(){return this._tzm?this.zone(this._tzm):"string"==typeof this._i&&this.zone(this._i),this},hasAlignedHourOffset:function(t){return t=t?De(t).zone():0,(this.zone()-t)%60===0},daysInMonth:function(){return N(this.year(),this.month())},dayOfYear:function(t){var e=Oe((De(this).startOf("day")-De(this).startOf("year"))/864e5)+1;return null==t?e:this.add(t-e,"d")},quarter:function(t){return null==t?Math.ceil((this.month()+1)/3):this.month(3*(t-1)+this.month()%3)},weekYear:function(t){var e=pe(this,this.localeData()._week.dow,this.localeData()._week.doy).year;return null==t?e:this.add(t-e,"y")},isoWeekYear:function(t){var e=pe(this,1,4).year;return null==t?e:this.add(t-e,"y")},week:function(t){var e=this.localeData().week(this);return null==t?e:this.add(7*(t-e),"d")},isoWeek:function(t){var e=pe(this,1,4).week;return null==t?e:this.add(7*(t-e),"d")},weekday:function(t){var e=(this.day()+7-this.localeData()._week.dow)%7;return null==t?e:this.add(t-e,"d")},isoWeekday:function(t){return null==t?this.day()||7:this.day(this.day()%7?t:t-7)},isoWeeksInYear:function(){return I(this.year(),1,4)},weeksInYear:function(){var t=this.localeData()._week;return I(this.year(),t.dow,t.doy)},get:function(t){return t=T(t),this[t]()},set:function(t,e){return t=T(t),"function"==typeof this[t]&&this[t](e),this},locale:function(t){var e;return t===n?this._locale._abbr:(e=De.localeData(t),null!=e&&(this._locale=e),this)},lang:l("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(t){return t===n?this.localeData():this.locale(t)}),localeData:function(){return this._locale},_dateTzOffset:function(){return 15*Math.round(this._d.getTimezoneOffset()/15)}}),De.fn.millisecond=De.fn.milliseconds=be("Milliseconds",!1),De.fn.second=De.fn.seconds=be("Seconds",!1),De.fn.minute=De.fn.minutes=be("Minutes",!1),De.fn.hour=De.fn.hours=be("Hours",!0),De.fn.date=be("Date",!0),De.fn.dates=l("dates accessor is deprecated. Use date instead.",be("Date",!0)),De.fn.year=be("FullYear",!0),De.fn.years=l("years accessor is deprecated. Use year instead.",be("FullYear",!0)),De.fn.days=De.fn.day,De.fn.months=De.fn.month,De.fn.weeks=De.fn.week,De.fn.isoWeeks=De.fn.isoWeek,De.fn.quarters=De.fn.quarter,De.fn.toJSON=De.fn.toISOString,v(De.duration.fn=g.prototype,{_bubble:function(){var t,e,i,s=this._milliseconds,o=this._days,n=this._months,r=this._data,a=0;r.milliseconds=s%1e3,t=b(s/1e3),r.seconds=t%60,e=b(t/60),r.minutes=e%60,i=b(e/60),r.hours=i%24,o+=b(i/24),a=b(_e(o)),o-=b(xe(a)),n+=b(o/30),o%=30,a+=b(n/12),n%=12,r.days=o,r.months=n,r.years=a},abs:function(){return this._milliseconds=Math.abs(this._milliseconds),this._days=Math.abs(this._days),this._months=Math.abs(this._months),this._data.milliseconds=Math.abs(this._data.milliseconds),this._data.seconds=Math.abs(this._data.seconds),this._data.minutes=Math.abs(this._data.minutes),this._data.hours=Math.abs(this._data.hours),this._data.months=Math.abs(this._data.months),this._data.years=Math.abs(this._data.years),this},weeks:function(){return b(this.days()/7)},valueOf:function(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*k(this._months/12)},humanize:function(t){var e=ce(this,!t,this.localeData());return t&&(e=this.localeData().pastFuture(+this,e)),this.localeData().postformat(e)},add:function(t,e){var i=De.duration(t,e);return this._milliseconds+=i._milliseconds,this._days+=i._days,this._months+=i._months,this._bubble(),this},subtract:function(t,e){var i=De.duration(t,e);return this._milliseconds-=i._milliseconds,this._days-=i._days,this._months-=i._months,this._bubble(),this},get:function(t){return t=T(t),this[t.toLowerCase()+"s"]()},as:function(t){var e,i;if(t=T(t),"month"===t||"year"===t)return e=this._days+this._milliseconds/864e5,i=this._months+12*_e(e),"month"===t?i:i/12;switch(e=this._days+Math.round(xe(this._months/12)),t){case"week":return e/7+this._milliseconds/6048e5;case"day":return e+this._milliseconds/864e5;case"hour":return 24*e+this._milliseconds/36e5;case"minute":return 24*e*60+this._milliseconds/6e4;case"second":return 24*e*60*60+this._milliseconds/1e3;case"millisecond":return Math.floor(24*e*60*60*1e3)+this._milliseconds;default:throw new Error("Unknown unit "+t)}},lang:De.fn.lang,locale:De.fn.locale,toIsoString:l("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",function(){return this.toISOString()}),toISOString:function(){var t=Math.abs(this.years()),e=Math.abs(this.months()),i=Math.abs(this.days()),s=Math.abs(this.hours()),o=Math.abs(this.minutes()),n=Math.abs(this.seconds()+this.milliseconds()/1e3);return this.asSeconds()?(this.asSeconds()<0?"-":"")+"P"+(t?t+"Y":"")+(e?e+"M":"")+(i?i+"D":"")+(s||o||n?"T":"")+(s?s+"H":"")+(o?o+"M":"")+(n?n+"S":""):"P0D"},localeData:function(){return this._locale}}),De.duration.fn.toString=De.duration.fn.toISOString;for(Ce in ui)a(ui,Ce)&&we(Ce.toLowerCase());De.duration.fn.asMilliseconds=function(){return this.as("ms")},De.duration.fn.asSeconds=function(){return this.as("s")},De.duration.fn.asMinutes=function(){return this.as("m")},De.duration.fn.asHours=function(){return this.as("h")},De.duration.fn.asDays=function(){return this.as("d")},De.duration.fn.asWeeks=function(){return this.as("weeks")},De.duration.fn.asMonths=function(){return this.as("M")},De.duration.fn.asYears=function(){return this.as("y")},De.locale("en",{ordinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10,i=1===k(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th";return t+i}}),Ye?o.exports=De:(s=function(t,e,i){return i.config&&i.config()&&i.config().noGlobal===!0&&(Te.moment=Me),De}.call(e,i,e,o),!(s!==n&&(o.exports=s)),Se(!0))}).call(this)}).call(e,function(){return this}(),i(71)(t))},function(t,e,i){var s;!function(o,n){function r(){a.READY||(w.determineEventTypes(),x.each(a.gestures,function(t){D.register(t)}),w.onTouch(a.DOCUMENT,v,D.detect),w.onTouch(a.DOCUMENT,y,D.detect),a.READY=!0)}var a=function M(t,e){return new M.Instance(t,e||{})};a.VERSION="1.1.3",a.defaults={behavior:{userSelect:"none",touchAction:"pan-y",touchCallout:"none",contentZooming:"none",userDrag:"none",tapHighlightColor:"rgba(0,0,0,0)"}},a.DOCUMENT=document,a.HAS_POINTEREVENTS=navigator.pointerEnabled||navigator.msPointerEnabled,a.HAS_TOUCHEVENTS="ontouchstart"in o,a.IS_MOBILE=/mobile|tablet|ip(ad|hone|od)|android|silk/i.test(navigator.userAgent),a.NO_MOUSEEVENTS=a.HAS_TOUCHEVENTS&&a.IS_MOBILE||a.HAS_POINTEREVENTS,a.CALCULATE_INTERVAL=25;var h={},d=a.DIRECTION_DOWN="down",l=a.DIRECTION_LEFT="left",c=a.DIRECTION_UP="up",p=a.DIRECTION_RIGHT="right",u=a.POINTER_MOUSE="mouse",m=a.POINTER_TOUCH="touch",f=a.POINTER_PEN="pen",g=a.EVENT_START="start",v=a.EVENT_MOVE="move",y=a.EVENT_END="end",b=a.EVENT_RELEASE="release",_=a.EVENT_TOUCH="touch";a.READY=!1,a.plugins=a.plugins||{},a.gestures=a.gestures||{};var x=a.utils={extend:function(t,e,i){for(var s in e)!e.hasOwnProperty(s)||t[s]!==n&&i||(t[s]=e[s]);return t},on:function(t,e,i){t.addEventListener(e,i,!1)},off:function(t,e,i){t.removeEventListener(e,i,!1)},each:function(t,e,i){var s,o;if("forEach"in t)t.forEach(e,i);else if(t.length!==n){for(s=0,o=t.length;o>s;s++)if(e.call(i,t[s],s,t)===!1)return}else for(s in t)if(t.hasOwnProperty(s)&&e.call(i,t[s],s,t)===!1)return},inStr:function(t,e){return t.indexOf(e)>-1},inArray:function(t,e){if(t.indexOf){var i=t.indexOf(e);return-1===i?!1:i}for(var s=0,o=t.length;o>s;s++)if(t[s]===e)return s;return!1},toArray:function(t){return Array.prototype.slice.call(t,0)},hasParent:function(t,e){for(;t;){if(t==e)return!0;t=t.parentNode}return!1},getCenter:function(t){var e=[],i=[],s=[],o=[],n=Math.min,r=Math.max;return 1===t.length?{pageX:t[0].pageX,pageY:t[0].pageY,clientX:t[0].clientX,clientY:t[0].clientY}:(x.each(t,function(t){e.push(t.pageX),i.push(t.pageY),s.push(t.clientX),o.push(t.clientY)}),{pageX:(n.apply(Math,e)+r.apply(Math,e))/2,pageY:(n.apply(Math,i)+r.apply(Math,i))/2,clientX:(n.apply(Math,s)+r.apply(Math,s))/2,clientY:(n.apply(Math,o)+r.apply(Math,o))/2})},getVelocity:function(t,e,i){return{x:Math.abs(e/t)||0,y:Math.abs(i/t)||0}},getAngle:function(t,e){var i=e.clientX-t.clientX,s=e.clientY-t.clientY;return 180*Math.atan2(s,i)/Math.PI},getDirection:function(t,e){var i=Math.abs(t.clientX-e.clientX),s=Math.abs(t.clientY-e.clientY);return i>=s?t.clientX-e.clientX>0?l:p:t.clientY-e.clientY>0?c:d},getDistance:function(t,e){var i=e.clientX-t.clientX,s=e.clientY-t.clientY;return Math.sqrt(i*i+s*s)},getScale:function(t,e){return t.length>=2&&e.length>=2?this.getDistance(e[0],e[1])/this.getDistance(t[0],t[1]):1},getRotation:function(t,e){return t.length>=2&&e.length>=2?this.getAngle(e[1],e[0])-this.getAngle(t[1],t[0]):0},isVertical:function(t){return t==c||t==d},setPrefixedCss:function(t,e,i,s){var o=["","Webkit","Moz","O","ms"];e=x.toCamelCase(e);for(var n=0;n0&&this.started&&(r=v),this.started=!0;var d=this.collectEventData(i,r,o,t);return e!=y&&s.call(D,d),a&&(d.changedLength=h,d.eventType=a,s.call(D,d),d.eventType=r,delete d.changedLength),r==y&&(s.call(D,d),this.started=!1),r},determineEventTypes:function(){var t;return t=a.HAS_POINTEREVENTS?o.PointerEvent?["pointerdown","pointermove","pointerup pointercancel lostpointercapture"]:["MSPointerDown","MSPointerMove","MSPointerUp MSPointerCancel MSLostPointerCapture"]:a.NO_MOUSEEVENTS?["touchstart","touchmove","touchend touchcancel"]:["touchstart mousedown","touchmove mousemove","touchend touchcancel mouseup"],h[g]=t[0],h[v]=t[1],h[y]=t[2],h},getTouchList:function(t,e){if(a.HAS_POINTEREVENTS)return S.getTouchList();if(t.touches){if(e==v)return t.touches;var i=[],s=[].concat(x.toArray(t.touches),x.toArray(t.changedTouches)),o=[];return x.each(s,function(t){x.inArray(i,t.identifier)===!1&&o.push(t),i.push(t.identifier)}),o}return t.identifier=1,[t]},collectEventData:function(t,e,i,s){var o=m;return x.inStr(s.type,"mouse")||S.matchType(u,s)?o=u:S.matchType(f,s)&&(o=f),{center:x.getCenter(i),timeStamp:Date.now(),target:s.target,touches:i,eventType:e,pointerType:o,srcEvent:s,preventDefault:function(){var t=this.srcEvent;t.preventManipulation&&t.preventManipulation(),t.preventDefault&&t.preventDefault()},stopPropagation:function(){this.srcEvent.stopPropagation()},stopDetect:function(){return D.stopDetect()}}}},S=a.PointerEvent={pointers:{},getTouchList:function(){var t=[];return x.each(this.pointers,function(e){t.push(e)}),t},updatePointer:function(t,e){t==y||t!=y&&1!==e.buttons?delete this.pointers[e.pointerId]:(e.identifier=e.pointerId,this.pointers[e.pointerId]=e)},matchType:function(t,e){if(!e.pointerType)return!1;var i=e.pointerType,s={};return s[u]=i===(e.MSPOINTER_TYPE_MOUSE||u),s[m]=i===(e.MSPOINTER_TYPE_TOUCH||m),s[f]=i===(e.MSPOINTER_TYPE_PEN||f),s[t]},reset:function(){this.pointers={}}},D=a.detection={gestures:[],current:null,previous:null,stopped:!1,startDetect:function(t,e){this.current||(this.stopped=!1,this.current={inst:t,startEvent:x.extend({},e),lastEvent:!1,lastCalcEvent:!1,futureCalcEvent:!1,lastCalcData:{},name:""},this.detect(e))},detect:function(t){if(this.current&&!this.stopped){t=this.extendEventData(t);var e=this.current.inst,i=e.options;return x.each(this.gestures,function(s){!this.stopped&&e.enabled&&i[s.name]&&s.handler.call(s,t,e)},this),this.current&&(this.current.lastEvent=t),t.eventType==y&&this.stopDetect(),t}},stopDetect:function(){this.previous=x.extend({},this.current),this.current=null,this.stopped=!0},getCalculatedData:function(t,e,i,s,o){var n=this.current,r=!1,h=n.lastCalcEvent,d=n.lastCalcData;h&&t.timeStamp-h.timeStamp>a.CALCULATE_INTERVAL&&(e=h.center,i=t.timeStamp-h.timeStamp,s=t.center.clientX-h.center.clientX,o=t.center.clientY-h.center.clientY,r=!0),(t.eventType==_||t.eventType==b)&&(n.futureCalcEvent=t),(!n.lastCalcEvent||r)&&(d.velocity=x.getVelocity(i,s,o),d.angle=x.getAngle(e,t.center),d.direction=x.getDirection(e,t.center),n.lastCalcEvent=n.futureCalcEvent||t,n.futureCalcEvent=t),t.velocityX=d.velocity.x,t.velocityY=d.velocity.y,t.interimAngle=d.angle,t.interimDirection=d.direction},extendEventData:function(t){var e=this.current,i=e.startEvent,s=e.lastEvent||i;(t.eventType==_||t.eventType==b)&&(i.touches=[],x.each(t.touches,function(t){i.touches.push({clientX:t.clientX,clientY:t.clientY})}));var o=t.timeStamp-i.timeStamp,n=t.center.clientX-i.center.clientX,r=t.center.clientY-i.center.clientY;return this.getCalculatedData(t,s.center,o,n,r),x.extend(t,{startEvent:i,deltaTime:o,deltaX:n,deltaY:r,distance:x.getDistance(i.center,t.center),angle:x.getAngle(i.center,t.center),direction:x.getDirection(i.center,t.center),scale:x.getScale(i.touches,t.touches),rotation:x.getRotation(i.touches,t.touches)}),t},register:function(t){var e=t.defaults||{};return e[t.name]===n&&(e[t.name]=!0),x.extend(a.defaults,e,!0),t.index=t.index||1e3,this.gestures.push(t),this.gestures.sort(function(t,e){return t.indexe.index?1:0}),this.gestures}};a.Instance=function(t,e){var i=this;r(),this.element=t,this.enabled=!0,x.each(e,function(t,i){delete e[i],e[x.toCamelCase(i)]=t}),this.options=x.extend(x.extend({},a.defaults),e||{}),this.options.behavior&&x.toggleBehavior(this.element,this.options.behavior,!0),this.eventStartHandler=w.onTouch(t,g,function(t){i.enabled&&t.eventType==g?D.startDetect(i,t):t.eventType==_&&D.detect(t)}),this.eventHandlers=[]},a.Instance.prototype={on:function(t,e){var i=this;return w.on(i.element,t,e,function(t){i.eventHandlers.push({gesture:t,handler:e})}),i},off:function(t,e){var i=this;return w.off(i.element,t,e,function(t){var s=x.inArray({gesture:t,handler:e});s!==!1&&i.eventHandlers.splice(s,1)}),i},trigger:function(t,e){e||(e={});var i=a.DOCUMENT.createEvent("Event");i.initEvent(t,!0,!0),i.gesture=e;var s=this.element;return x.hasParent(e.target,s)&&(s=e.target),s.dispatchEvent(i),this},enable:function(t){return this.enabled=t,this},dispose:function(){var t,e;for(x.toggleBehavior(this.element,this.options.behavior,!1),t=-1;e=this.eventHandlers[++t];)x.off(this.element,e.gesture,e.handler);return this.eventHandlers=[],w.off(this.element,h[g],this.eventStartHandler),null}},function(t){function e(e,s){var o=D.current;if(!(s.options.dragMaxTouches>0&&e.touches.length>s.options.dragMaxTouches))switch(e.eventType){case g:i=!1;break;case v:if(e.distance0)){var r=Math.abs(s.options.dragMinDistance/e.distance);n.pageX+=e.deltaX*r,n.pageY+=e.deltaY*r,n.clientX+=e.deltaX*r,n.clientY+=e.deltaY*r,e=D.extendEventData(e)}(o.lastEvent.dragLockToAxis||s.options.dragLockToAxis&&s.options.dragLockMinDistance<=e.distance)&&(e.dragLockToAxis=!0);var a=o.lastEvent.direction;e.dragLockToAxis&&a!==e.direction&&(e.direction=x.isVertical(a)?e.deltaY<0?c:d:e.deltaX<0?l:p),i||(s.trigger(t+"start",e),i=!0),s.trigger(t,e),s.trigger(t+e.direction,e);var h=x.isVertical(e.direction);(s.options.dragBlockVertical&&h||s.options.dragBlockHorizontal&&!h)&&e.preventDefault();break;case b:i&&e.changedLength<=s.options.dragMaxTouches&&(s.trigger(t+"end",e),i=!1);break;case y:i=!1}}var i=!1;a.gestures.Drag={name:t,index:50,handler:e,defaults:{dragMinDistance:10,dragDistanceCorrection:!0,dragMaxTouches:1,dragBlockHorizontal:!1,dragBlockVertical:!1,dragLockToAxis:!1,dragLockMinDistance:25}}}("drag"),a.gestures.Gesture={name:"gesture",index:1337,handler:function(t,e){e.trigger(this.name,t)}},function(t){function e(e,s){var o=s.options,n=D.current;switch(e.eventType){case g:clearTimeout(i),n.name=t,i=setTimeout(function(){n&&n.name==t&&s.trigger(t,e)},o.holdTimeout);break;case v:e.distance>o.holdThreshold&&clearTimeout(i);break;case b:clearTimeout(i)}}var i;a.gestures.Hold={name:t,index:10,defaults:{holdTimeout:500,holdThreshold:2},handler:e}}("hold"),a.gestures.Release={name:"release",index:1/0,handler:function(t,e){t.eventType==b&&e.trigger(this.name,t)}},a.gestures.Swipe={name:"swipe",index:40,defaults:{swipeMinTouches:1,swipeMaxTouches:1,swipeVelocityX:.6,swipeVelocityY:.6},handler:function(t,e){if(t.eventType==b){var i=t.touches.length,s=e.options;if(is.swipeMaxTouches)return;(t.velocityX>s.swipeVelocityX||t.velocityY>s.swipeVelocityY)&&(e.trigger(this.name,t),e.trigger(this.name+t.direction,t))}}},function(t){function e(e,s){var o,n,r=s.options,a=D.current,h=D.previous;switch(e.eventType){case g:i=!1;break;case v:i=i||e.distance>r.tapMaxDistance;break;case y:!x.inStr(e.srcEvent.type,"cancel")&&e.deltaTimes.options.transformMinRotation&&s.trigger("rotate",e),o>s.options.transformMinScale&&(s.trigger("pinch",e),s.trigger("pinch"+(e.scale<1?"in":"out"),e));break;case b:i&&e.changedLength<2&&(s.trigger(t+"end",e),i=!1)}}var i=!1;a.gestures.Transform={name:t,index:45,defaults:{transformMinScale:.01,transformMinRotation:1},handler:e}}("transform"),s=function(){return a}.call(e,i,e,t),!(s!==n&&(t.exports=s))}(window)},function(t,e){e.startWithClustering=function(){this.clusterToFit(this.constants.clustering.initialMaxNodes,!0),this.updateLabels(),this.stabilize&&this._stabilize(),this.start()},e.clusterToFit=function(t,e){for(var i=this.nodeIndices.length,s=50,o=0;i>t&&s>o;)o%3==0?(this.forceAggregateHubs(!0),this.normalizeClusterLevels()):this.increaseClusterLevel(),i=this.nodeIndices.length,o+=1;o>0&&1==e&&this.repositionNodes(),this._updateCalculationNodes()},e.openCluster=function(t){var e=this.moving;if(t.clusterSize>this.constants.clustering.sectorThreshold&&this._nodeInActiveArea(t)&&("default"!=this._sector()||1!=this.nodeIndices.length)){this._addSector(t);for(var i=0;this.nodeIndices.lengthi;)this.decreaseClusterLevel(),i+=1}else this._expandClusterNode(t,!1,!0),this._updateNodeIndexList(),this._updateDynamicEdges(),this._updateCalculationNodes(),this.updateLabels();this.moving!=e&&this.start()},e.updateClustersDefault=function(){1==this.constants.clustering.enabled&&this.updateClusters(0,!1,!1)},e.increaseClusterLevel=function(){this.updateClusters(-1,!1,!0)},e.decreaseClusterLevel=function(){this.updateClusters(1,!1,!0)},e.updateClusters=function(t,e,i,s){var o=this.moving,n=this.nodeIndices.length;this.previousScale>this.scale&&0==t&&this._collapseSector(),this.previousScale>this.scale||-1==t?this._formClusters(i):(this.previousScalethis.scale||-1==t)&&(this._aggregateHubs(i),this._updateNodeIndexList()),(this.previousScale>this.scale||-1==t)&&(this.handleChains(),this._updateNodeIndexList()),this.previousScale=this.scale,this._updateDynamicEdges(),this.updateLabels(),this.nodeIndices.lengththis.constants.clustering.chainThreshold&&this._reduceAmountOfChains(1-this.constants.clustering.chainThreshold/t)},e._aggregateHubs=function(t){this._getHubSize(),this._formClustersByHub(t,!1)},e.forceAggregateHubs=function(t){var e=this.moving,i=this.nodeIndices.length;this._aggregateHubs(!0),this._updateNodeIndexList(),this._updateDynamicEdges(),this.updateLabels(),this.nodeIndices.length!=i&&(this.clusterSession+=1),(0==t||void 0===t)&&this.moving!=e&&this.start()},e._openClustersBySize=function(){for(var t in this.nodes)if(this.nodes.hasOwnProperty(t)){var e=this.nodes[t];1==e.inView()&&(e.width*this.scale>this.constants.clustering.screenSizeThreshold*this.frame.canvas.clientWidth||e.height*this.scale>this.constants.clustering.screenSizeThreshold*this.frame.canvas.clientHeight)&&this.openCluster(e)}},e._openClusters=function(t,e){for(var i=0;i1&&(t.clusterSizei)){var r=n.from,a=n.to;n.to.options.mass>n.from.options.mass&&(r=n.to,a=n.from),1==a.dynamicEdgesLength?this._addToCluster(r,a,!1):1==r.dynamicEdgesLength&&this._addToCluster(a,r,!1)}}},e._forceClustersByZoom=function(){for(var t in this.nodes)if(this.nodes.hasOwnProperty(t)){var e=this.nodes[t];if(1==e.dynamicEdgesLength&&0!=e.dynamicEdges.length){var i=e.dynamicEdges[0],s=i.toId==e.id?this.nodes[i.fromId]:this.nodes[i.toId];e.id!=s.id&&(s.options.mass>e.options.mass?this._addToCluster(s,e,!0):this._addToCluster(e,s,!0))}}},e._clusterToSmallestNeighbour=function(t){for(var e=-1,i=null,s=0;so.clusterSessions.length&&(e=o.clusterSessions.length,i=o)}null!=o&&void 0!==this.nodes[o.id]&&this._addToCluster(o,t,!0)},e._formClustersByHub=function(t,e){for(var i in this.nodes)this.nodes.hasOwnProperty(i)&&this._formClusterFromHub(this.nodes[i],t,e)},e._formClusterFromHub=function(t,e,i,s){if(void 0===s&&(s=0),t.dynamicEdgesLength>=this.hubThreshold&&0==i||t.dynamicEdgesLength==this.hubThreshold&&1==i){for(var o,n,r,a=this.constants.clustering.clusterEdgeThreshold/this.scale,h=!1,d=[],l=t.dynamicEdges.length,c=0;l>c;c++)d.push(t.dynamicEdges[c].id);if(0==e)for(h=!1,c=0;l>c;c++){var p=this.edges[d[c]];if(void 0!==p&&p.connected&&p.toId!=p.fromId&&(o=p.to.x-p.from.x,n=p.to.y-p.from.y,r=Math.sqrt(o*o+n*n),a>r)){h=!0;break}}if(!e&&h||e)for(c=0;l>c;c++)if(p=this.edges[d[c]],void 0!==p){var u=this.nodes[p.fromId==t.id?p.toId:p.fromId];u.dynamicEdges.length<=this.hubThreshold+s&&u.id!=t.id&&this._addToCluster(t,u,e)}}},e._addToCluster=function(t,e,i){t.containedNodes[e.id]=e;for(var s=0;s1)for(var s=0;s1&&(e.label="[".concat(String(e.clusterSize),"]"))}for(t in this.nodes)this.nodes.hasOwnProperty(t)&&(e=this.nodes[t],1==e.clusterSize&&(e.label=void 0!==e.originalLabel?e.originalLabel:String(e.id)))},e.normalizeClusterLevels=function(){var t,e=0,i=1e9,s=0;for(t in this.nodes)this.nodes.hasOwnProperty(t)&&(s=this.nodes[t].clusterSessions.length,s>e&&(e=s),i>s&&(i=s));if(e-i>this.constants.clustering.clusterLevelDifference){var o=this.nodeIndices.length,n=e-this.constants.clustering.clusterLevelDifference;for(t in this.nodes)this.nodes.hasOwnProperty(t)&&this.nodes[t].clusterSessions.lengths&&(s=n.dynamicEdgesLength),t+=n.dynamicEdgesLength,e+=Math.pow(n.dynamicEdgesLength,2),i+=1}t/=i,e/=i;var r=e-Math.pow(t,2),a=Math.sqrt(r);this.hubThreshold=Math.floor(t+2*a),this.hubThreshold>s&&(this.hubThreshold=s)},e._reduceAmountOfChains=function(t){this.hubThreshold=2;var e=Math.floor(this.nodeIndices.length*t);for(var i in this.nodes)this.nodes.hasOwnProperty(i)&&2==this.nodes[i].dynamicEdgesLength&&this.nodes[i].dynamicEdges.length>=2&&e>0&&(this._formClusterFromHub(this.nodes[i],!0,!0,1),e-=1)},e._getChainFraction=function(){var t=0,e=0;for(var i in this.nodes)this.nodes.hasOwnProperty(i)&&(2==this.nodes[i].dynamicEdgesLength&&this.nodes[i].dynamicEdges.length>=2&&(t+=1),e+=1);return t/e}},function(t,e,i){var s=i(1),o=i(40);e._putDataInSector=function(){this.sectors.active[this._sector()].nodes=this.nodes,this.sectors.active[this._sector()].edges=this.edges,this.sectors.active[this._sector()].nodeIndices=this.nodeIndices},e._switchToSector=function(t,e){void 0===e||"active"==e?this._switchToActiveSector(t):this._switchToFrozenSector(t)},e._switchToActiveSector=function(t){this.nodeIndices=this.sectors.active[t].nodeIndices,this.nodes=this.sectors.active[t].nodes,this.edges=this.sectors.active[t].edges},e._switchToSupportSector=function(){this.nodeIndices=this.sectors.support.nodeIndices,this.nodes=this.sectors.support.nodes,this.edges=this.sectors.support.edges},e._switchToFrozenSector=function(t){this.nodeIndices=this.sectors.frozen[t].nodeIndices,this.nodes=this.sectors.frozen[t].nodes,this.edges=this.sectors.frozen[t].edges},e._loadLatestSector=function(){this._switchToSector(this._sector())},e._sector=function(){return this.activeSector[this.activeSector.length-1]},e._previousSector=function(){if(this.activeSector.length>1)return this.activeSector[this.activeSector.length-2];throw new TypeError("there are not enough sectors in the this.activeSector array.")},e._setActiveSector=function(t){this.activeSector.push(t)},e._forgetLastSector=function(){this.activeSector.pop()},e._createNewSector=function(t){this.sectors.active[t]={nodes:{},edges:{},nodeIndices:[],formationScale:this.scale,drawingNode:void 0},this.sectors.active[t].drawingNode=new o({id:t,color:{background:"#eaefef",border:"495c5e"}},{},{},this.constants),this.sectors.active[t].drawingNode.clusterSize=2},e._deleteActiveSector=function(t){delete this.sectors.active[t]},e._deleteFrozenSector=function(t){delete this.sectors.frozen[t]},e._freezeSector=function(t){this.sectors.frozen[t]=this.sectors.active[t],this._deleteActiveSector(t)},e._activateSector=function(t){this.sectors.active[t]=this.sectors.frozen[t],this._deleteFrozenSector(t)},e._mergeThisWithFrozen=function(t){for(var e in this.nodes)this.nodes.hasOwnProperty(e)&&(this.sectors.frozen[t].nodes[e]=this.nodes[e]);for(var i in this.edges)this.edges.hasOwnProperty(i)&&(this.sectors.frozen[t].edges[i]=this.edges[i]);for(var s=0;s1?this[t](o[0],o[1]):this[t](e))}return this._loadLatestSector(),i},e._doInSupportSector=function(t,e){var i=!1;if(void 0===e)this._switchToSupportSector(),i=this[t]();else{this._switchToSupportSector();var s=Array.prototype.splice.call(arguments,1);i=s.length>1?this[t](s[0],s[1]):this[t](e)}return this._loadLatestSector(),i},e._doInAllFrozenSectors=function(t,e){if(void 0===e)for(var i in this.sectors.frozen)this.sectors.frozen.hasOwnProperty(i)&&(this._switchToFrozenSector(i),this[t]());else for(var i in this.sectors.frozen)if(this.sectors.frozen.hasOwnProperty(i)){this._switchToFrozenSector(i);var s=Array.prototype.splice.call(arguments,1);s.length>1?this[t](s[0],s[1]):this[t](e)}this._loadLatestSector()},e._doInAllSectors=function(t,e){var i=Array.prototype.splice.call(arguments,1);void 0===e?(this._doInAllActiveSectors(t),this._doInAllFrozenSectors(t)):i.length>1?(this._doInAllActiveSectors(t,i[0],i[1]),this._doInAllFrozenSectors(t,i[0],i[1])):(this._doInAllActiveSectors(t,e),this._doInAllFrozenSectors(t,e))},e._clearNodeIndexList=function(){var t=this._sector();this.sectors.active[t].nodeIndices=[],this.nodeIndices=this.sectors.active[t].nodeIndices},e._drawSectorNodes=function(t,e){var i,s=1e9,o=-1e9,n=1e9,r=-1e9;for(var a in this.sectors[e])if(this.sectors[e].hasOwnProperty(a)&&void 0!==this.sectors[e][a].drawingNode){this._switchToSector(a,e),s=1e9,o=-1e9,n=1e9,r=-1e9;for(var h in this.nodes)this.nodes.hasOwnProperty(h)&&(i=this.nodes[h],i.resize(t),n>i.x-.5*i.width&&(n=i.x-.5*i.width),ri.y-.5*i.height&&(s=i.y-.5*i.height),o0?this.nodes[i[i.length-1]]:null},e._getEdgesOverlappingWith=function(t,e){var i=this.edges;for(var s in i)i.hasOwnProperty(s)&&i[s].isOverlappingWith(t)&&e.push(s)},e._getAllEdgesOverlappingWith=function(t){var e=[];return this._doInAllActiveSectors("_getEdgesOverlappingWith",t,e),e},e._getEdgeAt=function(t){var e=this._pointerToPositionObject(t),i=this._getAllEdgesOverlappingWith(e);return i.length>0?this.edges[i[i.length-1]]:null},e._addToSelection=function(t){t instanceof s?this.selectionObj.nodes[t.id]=t:this.selectionObj.edges[t.id]=t},e._addToHover=function(t){t instanceof s?this.hoverObj.nodes[t.id]=t:this.hoverObj.edges[t.id]=t},e._removeFromSelection=function(t){t instanceof s?delete this.selectionObj.nodes[t.id]:delete this.selectionObj.edges[t.id]},e._unselectAll=function(t){void 0===t&&(t=!1);for(var e in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(e)&&this.selectionObj.nodes[e].unselect();for(var i in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(i)&&this.selectionObj.edges[i].unselect();this.selectionObj={nodes:{},edges:{}},0==t&&this.emit("select",this.getSelection())},e._unselectClusters=function(t){void 0===t&&(t=!1);for(var e in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(e)&&this.selectionObj.nodes[e].clusterSize>1&&(this.selectionObj.nodes[e].unselect(),this._removeFromSelection(this.selectionObj.nodes[e]));0==t&&this.emit("select",this.getSelection())},e._getSelectedNodeCount=function(){var t=0;for(var e in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(e)&&(t+=1);return t},e._getSelectedNode=function(){for(var t in this.selectionObj.nodes)if(this.selectionObj.nodes.hasOwnProperty(t))return this.selectionObj.nodes[t];return null},e._getSelectedEdge=function(){for(var t in this.selectionObj.edges)if(this.selectionObj.edges.hasOwnProperty(t))return this.selectionObj.edges[t];return null},e._getSelectedEdgeCount=function(){var t=0;for(var e in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(e)&&(t+=1);return t},e._getSelectedObjectCount=function(){var t=0;for(var e in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(e)&&(t+=1);for(var i in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(i)&&(t+=1);return t},e._selectionIsEmpty=function(){for(var t in this.selectionObj.nodes)if(this.selectionObj.nodes.hasOwnProperty(t))return!1;for(var e in this.selectionObj.edges)if(this.selectionObj.edges.hasOwnProperty(e))return!1;return!0},e._clusterInSelection=function(){for(var t in this.selectionObj.nodes)if(this.selectionObj.nodes.hasOwnProperty(t)&&this.selectionObj.nodes[t].clusterSize>1)return!0;return!1},e._selectConnectedEdges=function(t){for(var e=0;ei;i++){o=t[i];var n=this.nodes[o];if(!n)throw new RangeError('Node with id "'+o+'" not found');this._selectObject(n,!0,!0,e,!0)}this.redraw()},e.selectEdges=function(t){var e,i,s;if(!t||void 0==t.length)throw"Selection must be an array with ids";for(this._unselectAll(!0),e=0,i=t.length;i>e;e++){s=t[e];var o=this.edges[s];if(!o)throw new RangeError('Edge with id "'+s+'" not found');this._selectObject(o,!0,!0,!1,!0)}this.redraw()},e._updateSelection=function(){for(var t in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(t)&&(this.nodes.hasOwnProperty(t)||delete this.selectionObj.nodes[t]);for(var e in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(e)&&(this.edges.hasOwnProperty(e)||delete this.selectionObj.edges[e])}},function(t,e,i){var s=i(1),o=i(40),n=i(37);e._clearManipulatorBar=function(){for(;this.manipulationDiv.hasChildNodes();)this.manipulationDiv.removeChild(this.manipulationDiv.firstChild);this.manipulationDOM={},this._manipulationReleaseOverload=function(){},delete this.sectors.support.nodes.targetNode,delete this.sectors.support.nodes.targetViaNode,this.controlNodesActive=!1},e._restoreOverloadedFunctions=function(){for(var t in this.cachedFunctions)this.cachedFunctions.hasOwnProperty(t)&&(this[t]=this.cachedFunctions[t])},e._toggleEditMode=function(){this.editMode=!this.editMode;var t=this.manipulationDiv,e=this.closeDiv,i=this.editModeDiv;1==this.editMode?(t.style.display="block",e.style.display="block",i.style.display="none",e.onclick=this._toggleEditMode.bind(this)):(t.style.display="none",e.style.display="none",i.style.display="block",e.onclick=null),this._createManipulatorBar()},e._createManipulatorBar=function(){this.boundFunction&&this.off("select",this.boundFunction);var t=this.constants.locales[this.constants.locale];if(void 0!==this.edgeBeingEdited&&(this.edgeBeingEdited._disableControlNodes(),this.edgeBeingEdited=void 0,this.selectedControlNode=null,this.controlNodesActive=!1,this._redraw()),this._restoreOverloadedFunctions(),this.freezeSimulation=!1,this.blockConnectingEdgeSelection=!1,this.forceAppendSelection=!1,this.manipulationDOM={},1==this.editMode){for(;this.manipulationDiv.hasChildNodes();)this.manipulationDiv.removeChild(this.manipulationDiv.firstChild);this.manipulationDOM.addNodeSpan=document.createElement("span"),this.manipulationDOM.addNodeSpan.className="network-manipulationUI add",this.manipulationDOM.addNodeLabelSpan=document.createElement("span"),this.manipulationDOM.addNodeLabelSpan.className="network-manipulationLabel",this.manipulationDOM.addNodeLabelSpan.innerHTML=t.addNode,this.manipulationDOM.addNodeSpan.appendChild(this.manipulationDOM.addNodeLabelSpan),this.manipulationDOM.seperatorLineDiv1=document.createElement("div"),this.manipulationDOM.seperatorLineDiv1.className="network-seperatorLine",this.manipulationDOM.addEdgeSpan=document.createElement("span"),this.manipulationDOM.addEdgeSpan.className="network-manipulationUI connect",this.manipulationDOM.addEdgeLabelSpan=document.createElement("span"),this.manipulationDOM.addEdgeLabelSpan.className="network-manipulationLabel",this.manipulationDOM.addEdgeLabelSpan.innerHTML=t.addEdge,this.manipulationDOM.addEdgeSpan.appendChild(this.manipulationDOM.addEdgeLabelSpan),this.manipulationDiv.appendChild(this.manipulationDOM.addNodeSpan),this.manipulationDiv.appendChild(this.manipulationDOM.seperatorLineDiv1),this.manipulationDiv.appendChild(this.manipulationDOM.addEdgeSpan),1==this._getSelectedNodeCount()&&this.triggerFunctions.edit?(this.manipulationDOM.seperatorLineDiv2=document.createElement("div"),this.manipulationDOM.seperatorLineDiv2.className="network-seperatorLine",this.manipulationDOM.editNodeSpan=document.createElement("span"),this.manipulationDOM.editNodeSpan.className="network-manipulationUI edit",this.manipulationDOM.editNodeLabelSpan=document.createElement("span"),this.manipulationDOM.editNodeLabelSpan.className="network-manipulationLabel",this.manipulationDOM.editNodeLabelSpan.innerHTML=t.editNode,this.manipulationDOM.editNodeSpan.appendChild(this.manipulationDOM.editNodeLabelSpan),this.manipulationDiv.appendChild(this.manipulationDOM.seperatorLineDiv2),this.manipulationDiv.appendChild(this.manipulationDOM.editNodeSpan)):1==this._getSelectedEdgeCount()&&0==this._getSelectedNodeCount()&&(this.manipulationDOM.seperatorLineDiv3=document.createElement("div"),this.manipulationDOM.seperatorLineDiv3.className="network-seperatorLine",this.manipulationDOM.editEdgeSpan=document.createElement("span"),this.manipulationDOM.editEdgeSpan.className="network-manipulationUI edit",this.manipulationDOM.editEdgeLabelSpan=document.createElement("span"),this.manipulationDOM.editEdgeLabelSpan.className="network-manipulationLabel",this.manipulationDOM.editEdgeLabelSpan.innerHTML=t.editEdge,this.manipulationDOM.editEdgeSpan.appendChild(this.manipulationDOM.editEdgeLabelSpan),this.manipulationDiv.appendChild(this.manipulationDOM.seperatorLineDiv3),this.manipulationDiv.appendChild(this.manipulationDOM.editEdgeSpan)),0==this._selectionIsEmpty()&&(this.manipulationDOM.seperatorLineDiv4=document.createElement("div"),this.manipulationDOM.seperatorLineDiv4.className="network-seperatorLine",this.manipulationDOM.deleteSpan=document.createElement("span"),this.manipulationDOM.deleteSpan.className="network-manipulationUI delete",this.manipulationDOM.deleteLabelSpan=document.createElement("span"),this.manipulationDOM.deleteLabelSpan.className="network-manipulationLabel",this.manipulationDOM.deleteLabelSpan.innerHTML=t.del,this.manipulationDOM.deleteSpan.appendChild(this.manipulationDOM.deleteLabelSpan),this.manipulationDiv.appendChild(this.manipulationDOM.seperatorLineDiv4),this.manipulationDiv.appendChild(this.manipulationDOM.deleteSpan)),this.manipulationDOM.addNodeSpan.onclick=this._createAddNodeToolbar.bind(this),this.manipulationDOM.addEdgeSpan.onclick=this._createAddEdgeToolbar.bind(this),1==this._getSelectedNodeCount()&&this.triggerFunctions.edit?this.manipulationDOM.editNodeSpan.onclick=this._editNode.bind(this):1==this._getSelectedEdgeCount()&&0==this._getSelectedNodeCount()&&(this.manipulationDOM.editEdgeSpan.onclick=this._createEditEdgeToolbar.bind(this)),0==this._selectionIsEmpty()&&(this.manipulationDOM.deleteSpan.onclick=this._deleteSelected.bind(this)),this.closeDiv.onclick=this._toggleEditMode.bind(this),this.boundFunction=this._createManipulatorBar.bind(this),this.on("select",this.boundFunction)}else{for(;this.editModeDiv.hasChildNodes();)this.editModeDiv.removeChild(this.editModeDiv.firstChild);this.manipulationDOM.editModeSpan=document.createElement("span"),this.manipulationDOM.editModeSpan.className="network-manipulationUI edit editmode",this.manipulationDOM.editModeLabelSpan=document.createElement("span"),this.manipulationDOM.editModeLabelSpan.className="network-manipulationLabel",this.manipulationDOM.editModeLabelSpan.innerHTML=t.edit,this.manipulationDOM.editModeSpan.appendChild(this.manipulationDOM.editModeLabelSpan),this.editModeDiv.appendChild(this.manipulationDOM.editModeSpan),this.manipulationDOM.editModeSpan.onclick=this._toggleEditMode.bind(this)}},e._createAddNodeToolbar=function(){this._clearManipulatorBar(),this.boundFunction&&this.off("select",this.boundFunction);var t=this.constants.locales[this.constants.locale];this.manipulationDOM={},this.manipulationDOM.backSpan=document.createElement("span"),this.manipulationDOM.backSpan.className="network-manipulationUI back",this.manipulationDOM.backLabelSpan=document.createElement("span"),this.manipulationDOM.backLabelSpan.className="network-manipulationLabel",this.manipulationDOM.backLabelSpan.innerHTML=t.back,this.manipulationDOM.backSpan.appendChild(this.manipulationDOM.backLabelSpan),this.manipulationDOM.seperatorLineDiv1=document.createElement("div"),this.manipulationDOM.seperatorLineDiv1.className="network-seperatorLine",this.manipulationDOM.descriptionSpan=document.createElement("span"),this.manipulationDOM.descriptionSpan.className="network-manipulationUI none",this.manipulationDOM.descriptionLabelSpan=document.createElement("span"),this.manipulationDOM.descriptionLabelSpan.className="network-manipulationLabel",this.manipulationDOM.descriptionLabelSpan.innerHTML=t.addDescription,this.manipulationDOM.descriptionSpan.appendChild(this.manipulationDOM.descriptionLabelSpan),this.manipulationDiv.appendChild(this.manipulationDOM.backSpan),this.manipulationDiv.appendChild(this.manipulationDOM.seperatorLineDiv1),this.manipulationDiv.appendChild(this.manipulationDOM.descriptionSpan),this.manipulationDOM.backSpan.onclick=this._createManipulatorBar.bind(this),this.boundFunction=this._addNode.bind(this),this.on("select",this.boundFunction)},e._createAddEdgeToolbar=function(){this._clearManipulatorBar(),this._unselectAll(!0),this.freezeSimulation=!0;var t=this.constants.locales[this.constants.locale];this.boundFunction&&this.off("select",this.boundFunction),this._unselectAll(),this.forceAppendSelection=!1,this.blockConnectingEdgeSelection=!0,this.manipulationDOM={},this.manipulationDOM.backSpan=document.createElement("span"),this.manipulationDOM.backSpan.className="network-manipulationUI back",this.manipulationDOM.backLabelSpan=document.createElement("span"),this.manipulationDOM.backLabelSpan.className="network-manipulationLabel",this.manipulationDOM.backLabelSpan.innerHTML=t.back,this.manipulationDOM.backSpan.appendChild(this.manipulationDOM.backLabelSpan),this.manipulationDOM.seperatorLineDiv1=document.createElement("div"),this.manipulationDOM.seperatorLineDiv1.className="network-seperatorLine",this.manipulationDOM.descriptionSpan=document.createElement("span"),this.manipulationDOM.descriptionSpan.className="network-manipulationUI none",this.manipulationDOM.descriptionLabelSpan=document.createElement("span"),this.manipulationDOM.descriptionLabelSpan.className="network-manipulationLabel",this.manipulationDOM.descriptionLabelSpan.innerHTML=t.edgeDescription,this.manipulationDOM.descriptionSpan.appendChild(this.manipulationDOM.descriptionLabelSpan),this.manipulationDiv.appendChild(this.manipulationDOM.backSpan),this.manipulationDiv.appendChild(this.manipulationDOM.seperatorLineDiv1),this.manipulationDiv.appendChild(this.manipulationDOM.descriptionSpan),this.manipulationDOM.backSpan.onclick=this._createManipulatorBar.bind(this),this.boundFunction=this._handleConnect.bind(this),this.on("select",this.boundFunction),this.cachedFunctions._handleTouch=this._handleTouch,this.cachedFunctions._manipulationReleaseOverload=this._manipulationReleaseOverload,this.cachedFunctions._handleDragStart=this._handleDragStart,this.cachedFunctions._handleDragEnd=this._handleDragEnd,this._handleTouch=this._handleConnect,this._manipulationReleaseOverload=function(){},this._handleDragStart=function(){},this._handleDragEnd=this._finishConnect,this._redraw()},e._createEditEdgeToolbar=function(){this._clearManipulatorBar(),this.controlNodesActive=!0,this.boundFunction&&this.off("select",this.boundFunction),this.edgeBeingEdited=this._getSelectedEdge(),this.edgeBeingEdited._enableControlNodes();var t=this.constants.locales[this.constants.locale];this.manipulationDOM={},this.manipulationDOM.backSpan=document.createElement("span"),this.manipulationDOM.backSpan.className="network-manipulationUI back",this.manipulationDOM.backLabelSpan=document.createElement("span"),this.manipulationDOM.backLabelSpan.className="network-manipulationLabel",this.manipulationDOM.backLabelSpan.innerHTML=t.back,this.manipulationDOM.backSpan.appendChild(this.manipulationDOM.backLabelSpan),this.manipulationDOM.seperatorLineDiv1=document.createElement("div"),this.manipulationDOM.seperatorLineDiv1.className="network-seperatorLine",this.manipulationDOM.descriptionSpan=document.createElement("span"),this.manipulationDOM.descriptionSpan.className="network-manipulationUI none",this.manipulationDOM.descriptionLabelSpan=document.createElement("span"),this.manipulationDOM.descriptionLabelSpan.className="network-manipulationLabel",this.manipulationDOM.descriptionLabelSpan.innerHTML=t.editEdgeDescription,this.manipulationDOM.descriptionSpan.appendChild(this.manipulationDOM.descriptionLabelSpan),this.manipulationDiv.appendChild(this.manipulationDOM.backSpan),this.manipulationDiv.appendChild(this.manipulationDOM.seperatorLineDiv1),this.manipulationDiv.appendChild(this.manipulationDOM.descriptionSpan),this.manipulationDOM.backSpan.onclick=this._createManipulatorBar.bind(this),this.cachedFunctions._handleTouch=this._handleTouch,this.cachedFunctions._manipulationReleaseOverload=this._manipulationReleaseOverload,this.cachedFunctions._handleTap=this._handleTap,this.cachedFunctions._handleDragStart=this._handleDragStart,this.cachedFunctions._handleOnDrag=this._handleOnDrag,this._handleTouch=this._selectControlNode,this._handleTap=function(){},this._handleOnDrag=this._controlNodeDrag,this._handleDragStart=function(){},this._manipulationReleaseOverload=this._releaseControlNode,this._redraw()},e._selectControlNode=function(t){this.edgeBeingEdited.controlNodes.from.unselect(),this.edgeBeingEdited.controlNodes.to.unselect(),this.selectedControlNode=this.edgeBeingEdited._getSelectedControlNode(this._XconvertDOMtoCanvas(t.x),this._YconvertDOMtoCanvas(t.y)),null!==this.selectedControlNode&&(this.selectedControlNode.select(),this.freezeSimulation=!0),this._redraw()},e._controlNodeDrag=function(t){var e=this._getPointer(t.gesture.center);null!==this.selectedControlNode&&void 0!==this.selectedControlNode&&(this.selectedControlNode.x=this._XconvertDOMtoCanvas(e.x),this.selectedControlNode.y=this._YconvertDOMtoCanvas(e.y)),this._redraw()},e._releaseControlNode=function(t){var e=this._getNodeAt(t);null!==e?(1==this.edgeBeingEdited.controlNodes.from.selected&&(this._editEdge(e.id,this.edgeBeingEdited.to.id),this.edgeBeingEdited.controlNodes.from.unselect()),1==this.edgeBeingEdited.controlNodes.to.selected&&(this._editEdge(this.edgeBeingEdited.from.id,e.id),this.edgeBeingEdited.controlNodes.to.unselect())):this.edgeBeingEdited._restoreControlNodes(),this.freezeSimulation=!1,this._redraw()},e._handleConnect=function(t){if(0==this._getSelectedNodeCount()){var e=this._getNodeAt(t);if(null!=e)if(e.clusterSize>1)alert(this.constants.locales[this.constants.locale].createEdgeError);else{this._selectObject(e,!1);var i=this.sectors.support.nodes;i.targetNode=new o({id:"targetNode"},{},{},this.constants);var s=i.targetNode;s.x=e.x,s.y=e.y,this.edges.connectionEdge=new n({id:"connectionEdge",from:e.id,to:s.id},this,this.constants);var r=this.edges.connectionEdge;r.from=e,r.connected=!0,r.options.smoothCurves={enabled:!0,dynamic:!1,type:"continuous",roundness:.5},r.selected=!0,r.to=s,this.cachedFunctions._handleOnDrag=this._handleOnDrag,this._handleOnDrag=function(t){var e=this._getPointer(t.gesture.center),i=this.edges.connectionEdge;i.to.x=this._XconvertDOMtoCanvas(e.x),i.to.y=this._YconvertDOMtoCanvas(e.y)},this.moving=!0,this.start()}}},e._finishConnect=function(t){if(1==this._getSelectedNodeCount()){var e=this._getPointer(t.gesture.center);this._handleOnDrag=this.cachedFunctions._handleOnDrag,delete this.cachedFunctions._handleOnDrag;var i=this.edges.connectionEdge.fromId;delete this.edges.connectionEdge,delete this.sectors.support.nodes.targetNode,delete this.sectors.support.nodes.targetViaNode;var s=this._getNodeAt(e);null!=s&&(s.clusterSize>1?alert(this.constants.locales[this.constants.locale].createEdgeError):(this._createEdge(i,s.id),this._createManipulatorBar())),this._unselectAll()}},e._addNode=function(){if(this._selectionIsEmpty()&&1==this.editMode){var t=this._pointerToPositionObject(this.pointerPosition),e={id:s.randomUUID(),x:t.left,y:t.top,label:"new",allowedToMoveX:!0,allowedToMoveY:!0};if(this.triggerFunctions.add){if(2!=this.triggerFunctions.add.length)throw new Error("The function for add does not support two arguments (data,callback)");var i=this;this.triggerFunctions.add(e,function(t){i.nodesData.add(t),i._createManipulatorBar(),i.moving=!0,i.start()})}else this.nodesData.add(e),this._createManipulatorBar(),this.moving=!0,this.start()}},e._createEdge=function(t,e){if(1==this.editMode){var i={from:t,to:e};if(this.triggerFunctions.connect){if(2!=this.triggerFunctions.connect.length)throw new Error("The function for connect does not support two arguments (data,callback)");var s=this;this.triggerFunctions.connect(i,function(t){s.edgesData.add(t),s.moving=!0,s.start()})}else this.edgesData.add(i),this.moving=!0,this.start()}},e._editEdge=function(t,e){if(1==this.editMode){var i={id:this.edgeBeingEdited.id,from:t,to:e};if(this.triggerFunctions.editEdge){if(2!=this.triggerFunctions.editEdge.length)throw new Error("The function for edit does not support two arguments (data, callback)");var s=this;this.triggerFunctions.editEdge(i,function(t){s.edgesData.update(t),s.moving=!0,s.start()})}else this.edgesData.update(i),this.moving=!0,this.start()}},e._editNode=function(){if(!this.triggerFunctions.edit||1!=this.editMode)throw new Error("No edit function has been bound to this button"); -var t=this._getSelectedNode(),e={id:t.id,label:t.label,group:t.options.group,shape:t.options.shape,color:{background:t.options.color.background,border:t.options.color.border,highlight:{background:t.options.color.highlight.background,border:t.options.color.highlight.border}}};if(2!=this.triggerFunctions.edit.length)throw new Error("The function for edit does not support two arguments (data, callback)");var i=this;this.triggerFunctions.edit(e,function(t){i.nodesData.update(t),i._createManipulatorBar(),i.moving=!0,i.start()})},e._deleteSelected=function(){if(!this._selectionIsEmpty()&&1==this.editMode)if(this._clusterInSelection())alert(this.constants.locales[this.constants.locale].deleteClusterError);else{var t=this.getSelectedNodes(),e=this.getSelectedEdges();if(this.triggerFunctions.del){var i=this,s={nodes:t,edges:e};if(2!=this.triggerFunctions.del.length)throw new Error("The function for delete does not support two arguments (data, callback)");this.triggerFunctions.del(s,function(t){i.edgesData.remove(t.edges),i.nodesData.remove(t.nodes),i._unselectAll(),i.moving=!0,i.start()})}else this.edgesData.remove(e),this.nodesData.remove(t),this._unselectAll(),this.moving=!0,this.start()}}},function(t,e,i){var s=(i(1),i(45));e._cleanNavigation=function(){if(0!=this.navigationHammers.existing.length){for(var t=0;t0){this.constants.hierarchicalLayout.levelSeparation="RL"==this.constants.hierarchicalLayout.direction||"DU"==this.constants.hierarchicalLayout.direction?this.constants.hierarchicalLayout.levelSeparation<0?this.constants.hierarchicalLayout.levelSeparation:-1*this.constants.hierarchicalLayout.levelSeparation:Math.abs(this.constants.hierarchicalLayout.levelSeparation),"RL"==this.constants.hierarchicalLayout.direction||"LR"==this.constants.hierarchicalLayout.direction?1==this.constants.smoothCurves.enabled&&(this.constants.smoothCurves.type="vertical"):1==this.constants.smoothCurves.enabled&&(this.constants.smoothCurves.type="horizontal");var t,e,i=0,s=!1,o=!1;for(e in this.nodes)this.nodes.hasOwnProperty(e)&&(t=this.nodes[e],-1!=t.level?s=!0:o=!0,is&&(n.xFixed=!1,n.x=i[n.level].minPos,r=!0):n.yFixed&&n.level>s&&(n.yFixed=!1,n.y=i[n.level].minPos,r=!0),1==r&&(i[n.level].minPos+=i[n.level].nodeSpacing,n.edges.length>1&&this._placeBranchNodes(n.edges,n.id,i,n.level))}},e._setLevel=function(t,e,i){for(var s=0;st)&&(o.level=t,o.edges.length>1&&this._setLevel(t+1,o.edges,o.id))}},e._setLevelDirected=function(t,e,i){this.nodes[i].hierarchyEnumerated=!0;for(var s=0;s1&&o.hierarchyEnumerated===!1&&this._setLevelDirected(o.level,o.edges,o.id)}},e._restoreNodes=function(){for(var t in this.nodes)this.nodes.hasOwnProperty(t)&&(this.nodes[t].xFixed=!1,this.nodes[t].yFixed=!1)}},function(t,e,i){function s(){this.constants.smoothCurves.enabled=!this.constants.smoothCurves.enabled;var t=document.getElementById("graph_toggleSmooth");t.style.background=1==this.constants.smoothCurves.enabled?"#A4FF56":"#FF8532",this._configureSmoothCurves(!1)}function o(){for(var t in this.calculationNodes)this.calculationNodes.hasOwnProperty(t)&&(this.calculationNodes[t].vx=0,this.calculationNodes[t].vy=0,this.calculationNodes[t].fx=0,this.calculationNodes[t].fy=0);1==this.constants.hierarchicalLayout.enabled?(this._setupHierarchicalLayout(),a.call(this,"graph_H_nd",1,"physics_hierarchicalRepulsion_nodeDistance"),a.call(this,"graph_H_cg",1,"physics_centralGravity"),a.call(this,"graph_H_sc",1,"physics_springConstant"),a.call(this,"graph_H_sl",1,"physics_springLength"),a.call(this,"graph_H_damp",1,"physics_damping")):this.repositionNodes(),this.moving=!0,this.start()}function n(){var t="No options are required, default values used.",e=[],i=document.getElementById("graph_physicsMethod1"),s=document.getElementById("graph_physicsMethod2");if(1==i.checked){if(this.constants.physics.barnesHut.gravitationalConstant!=this.backupConstants.physics.barnesHut.gravitationalConstant&&e.push("gravitationalConstant: "+this.constants.physics.barnesHut.gravitationalConstant),this.constants.physics.centralGravity!=this.backupConstants.physics.barnesHut.centralGravity&&e.push("centralGravity: "+this.constants.physics.centralGravity),this.constants.physics.springLength!=this.backupConstants.physics.barnesHut.springLength&&e.push("springLength: "+this.constants.physics.springLength),this.constants.physics.springConstant!=this.backupConstants.physics.barnesHut.springConstant&&e.push("springConstant: "+this.constants.physics.springConstant),this.constants.physics.damping!=this.backupConstants.physics.barnesHut.damping&&e.push("damping: "+this.constants.physics.damping),0!=e.length){t="var options = {",t+="physics: {barnesHut: {";for(var o=0;othis.constants.clustering.clusterThreshold&&1==this.constants.clustering.enabled&&this.clusterToFit(this.constants.clustering.reduceToNodes,!1),this._calculateForces())},e._calculateForces=function(){this._calculateGravitationalForces(),this._calculateNodeForces(),this.constants.physics.springConstant>0&&(1==this.constants.smoothCurves.enabled&&1==this.constants.smoothCurves.dynamic?this._calculateSpringForcesWithSupport():1==this.constants.physics.hierarchicalRepulsion.enabled?this._calculateHierarchicalSpringForces():this._calculateSpringForces())},e._updateCalculationNodes=function(){if(1==this.constants.smoothCurves.enabled&&1==this.constants.smoothCurves.dynamic){this.calculationNodes={},this.calculationNodeIndices=[];for(var t in this.nodes)this.nodes.hasOwnProperty(t)&&(this.calculationNodes[t]=this.nodes[t]);var e=this.sectors.support.nodes;for(var i in e)e.hasOwnProperty(i)&&(this.edges.hasOwnProperty(e[i].parentEdgeId)?this.calculationNodes[i]=e[i]:e[i]._setForce(0,0));for(var s in this.calculationNodes)this.calculationNodes.hasOwnProperty(s)&&this.calculationNodeIndices.push(s)}else this.calculationNodes=this.nodes,this.calculationNodeIndices=this.nodeIndices},e._calculateGravitationalForces=function(){var t,e,i,s,o,n=this.calculationNodes,r=this.constants.physics.centralGravity,a=0;for(o=0;oSimulation Mode:Barnes HutRepulsionHierarchical
Options:
',this.containerElement.parentElement.insertBefore(this.physicsConfiguration,this.containerElement),this.optionsDiv=document.createElement("div"),this.optionsDiv.style.fontSize="14px",this.optionsDiv.style.fontFamily="verdana",this.containerElement.parentElement.insertBefore(this.optionsDiv,this.containerElement);var e;e=document.getElementById("graph_BH_gc"),e.onchange=a.bind(this,"graph_BH_gc",-1,"physics_barnesHut_gravitationalConstant"),e=document.getElementById("graph_BH_cg"),e.onchange=a.bind(this,"graph_BH_cg",1,"physics_centralGravity"),e=document.getElementById("graph_BH_sc"),e.onchange=a.bind(this,"graph_BH_sc",1,"physics_springConstant"),e=document.getElementById("graph_BH_sl"),e.onchange=a.bind(this,"graph_BH_sl",1,"physics_springLength"),e=document.getElementById("graph_BH_damp"),e.onchange=a.bind(this,"graph_BH_damp",1,"physics_damping"),e=document.getElementById("graph_R_nd"),e.onchange=a.bind(this,"graph_R_nd",1,"physics_repulsion_nodeDistance"),e=document.getElementById("graph_R_cg"),e.onchange=a.bind(this,"graph_R_cg",1,"physics_centralGravity"),e=document.getElementById("graph_R_sc"),e.onchange=a.bind(this,"graph_R_sc",1,"physics_springConstant"),e=document.getElementById("graph_R_sl"),e.onchange=a.bind(this,"graph_R_sl",1,"physics_springLength"),e=document.getElementById("graph_R_damp"),e.onchange=a.bind(this,"graph_R_damp",1,"physics_damping"),e=document.getElementById("graph_H_nd"),e.onchange=a.bind(this,"graph_H_nd",1,"physics_hierarchicalRepulsion_nodeDistance"),e=document.getElementById("graph_H_cg"),e.onchange=a.bind(this,"graph_H_cg",1,"physics_centralGravity"),e=document.getElementById("graph_H_sc"),e.onchange=a.bind(this,"graph_H_sc",1,"physics_springConstant"),e=document.getElementById("graph_H_sl"),e.onchange=a.bind(this,"graph_H_sl",1,"physics_springLength"),e=document.getElementById("graph_H_damp"),e.onchange=a.bind(this,"graph_H_damp",1,"physics_damping"),e=document.getElementById("graph_H_direction"),e.onchange=a.bind(this,"graph_H_direction",t,"hierarchicalLayout_direction"),e=document.getElementById("graph_H_levsep"),e.onchange=a.bind(this,"graph_H_levsep",1,"hierarchicalLayout_levelSeparation"),e=document.getElementById("graph_H_nspac"),e.onchange=a.bind(this,"graph_H_nspac",1,"hierarchicalLayout_nodeSpacing");var i=document.getElementById("graph_physicsMethod1"),d=document.getElementById("graph_physicsMethod2"),l=document.getElementById("graph_physicsMethod3");d.checked=!0,this.constants.physics.barnesHut.enabled&&(i.checked=!0),this.constants.hierarchicalLayout.enabled&&(l.checked=!0);var c=document.getElementById("graph_toggleSmooth"),p=document.getElementById("graph_repositionNodes"),u=document.getElementById("graph_generateOptions");c.onclick=s.bind(this),p.onclick=o.bind(this),u.onclick=n.bind(this),c.style.background=1==this.constants.smoothCurves&&0==this.constants.dynamicSmoothCurves?"#A4FF56":"#FF8532",r.apply(this),i.onchange=r.bind(this),d.onchange=r.bind(this),l.onchange=r.bind(this)}},e._overWriteGraphConstants=function(t,e){var i=t.split("_");1==i.length?this.constants[i[0]]=e:2==i.length?this.constants[i[0]][i[1]]=e:3==i.length&&(this.constants[i[0]][i[1]][i[2]]=e)}},function(t){function e(t){throw new Error("Cannot find module '"+t+"'.")}e.keys=function(){return[]},e.resolve=e,t.exports=e,e.id=67},function(t,e){e._calculateNodeForces=function(){var t,e,i,s,o,n,r,a,h,d,l,c=this.calculationNodes,p=this.calculationNodeIndices,u=-2/3,m=4/3,f=this.constants.physics.repulsion.nodeDistance,g=f;for(d=0;di&&(r=.5*g>i?1:v*i+m,r*=0==n?1:1+n*this.constants.clustering.forceAmplification,r/=i,s=t*r,o=e*r,a.fx-=s,a.fy-=o,h.fx+=s,h.fy+=o)}}},function(t,e){e._calculateNodeForces=function(){var t,e,i,s,o,n,r,a,h,d,l=this.calculationNodes,c=this.calculationNodeIndices,p=this.constants.physics.hierarchicalRepulsion.nodeDistance;for(h=0;hi?-Math.pow(u*i,2)+Math.pow(u*p,2):0,0==i?i=.01:n/=i,s=t*n,o=e*n,r.fx-=s,r.fy-=o,a.fx+=s,a.fy+=o}},e._calculateHierarchicalSpringForces=function(){for(var t,e,i,s,o,n,r,a,h,d=this.edges,l=this.calculationNodes,c=this.calculationNodeIndices,p=0;pn;n++)t=e[i[n]],t.options.mass>0&&(this._getForceContribution(o.root.children.NW,t),this._getForceContribution(o.root.children.NE,t),this._getForceContribution(o.root.children.SW,t),this._getForceContribution(o.root.children.SE,t))}},e._getForceContribution=function(t,e){if(t.childrenCount>0){var i,s,o;if(i=t.centerOfMass.x-e.x,s=t.centerOfMass.y-e.y,o=Math.sqrt(i*i+s*s),o*t.calcSize>this.constants.physics.barnesHut.theta){0==o&&(o=.1*Math.random(),i=o);var n=this.constants.physics.barnesHut.gravitationalConstant*t.mass*e.options.mass/(o*o*o),r=i*n,a=s*n;e.fx+=r,e.fy+=a}else if(4==t.childrenCount)this._getForceContribution(t.children.NW,e),this._getForceContribution(t.children.NE,e),this._getForceContribution(t.children.SW,e),this._getForceContribution(t.children.SE,e);else if(t.children.data.id!=e.id){0==o&&(o=.5*Math.random(),i=o);var n=this.constants.physics.barnesHut.gravitationalConstant*t.mass*e.options.mass/(o*o*o),r=i*n,a=s*n;e.fx+=r,e.fy+=a}}},e._formBarnesHutTree=function(t,e){for(var i,s=e.length,o=Number.MAX_VALUE,n=Number.MAX_VALUE,r=-Number.MAX_VALUE,a=-Number.MAX_VALUE,h=0;s>h;h++){var d=t[e[h]].x,l=t[e[h]].y;t[e[h]].options.mass>0&&(o>d&&(o=d),d>r&&(r=d),n>l&&(n=l),l>a&&(a=l))}var c=Math.abs(r-o)-Math.abs(a-n);c>0?(n-=.5*c,a+=.5*c):(o+=.5*c,r-=.5*c);var p=1e-5,u=Math.max(p,Math.abs(r-o)),m=.5*u,f=.5*(o+r),g=.5*(n+a),v={root:{centerOfMass:{x:0,y:0},mass:0,range:{minX:f-m,maxX:f+m,minY:g-m,maxY:g+m},size:u,calcSize:1/u,children:{data:null},maxWidth:0,level:0,childrenCount:4}};for(this._splitBranch(v.root),h=0;s>h;h++)i=t[e[h]],i.options.mass>0&&this._placeInTree(v.root,i);this.barnesHutTree=v},e._updateBranchMass=function(t,e){var i=t.mass+e.options.mass,s=1/i;t.centerOfMass.x=t.centerOfMass.x*t.mass+e.x*e.options.mass,t.centerOfMass.x*=s,t.centerOfMass.y=t.centerOfMass.y*t.mass+e.y*e.options.mass,t.centerOfMass.y*=s,t.mass=i;var o=Math.max(Math.max(e.height,e.radius),e.width);t.maxWidth=t.maxWidthe.x?t.children.NW.range.maxY>e.y?this._placeInRegion(t,e,"NW"):this._placeInRegion(t,e,"SW"):t.children.NW.range.maxY>e.y?this._placeInRegion(t,e,"NE"):this._placeInRegion(t,e,"SE")},e._placeInRegion=function(t,e,i){switch(t.children[i].childrenCount){case 0:t.children[i].children.data=e,t.children[i].childrenCount=1,this._updateBranchMass(t.children[i],e);break;case 1:t.children[i].children.data.x==e.x&&t.children[i].children.data.y==e.y?(e.x+=Math.random(),e.y+=Math.random()):(this._splitBranch(t.children[i]),this._placeInTree(t.children[i],e));break;case 4:this._placeInTree(t.children[i],e)}},e._splitBranch=function(t){var e=null;1==t.childrenCount&&(e=t.children.data,t.mass=0,t.centerOfMass.x=0,t.centerOfMass.y=0),t.childrenCount=4,t.children.data=null,this._insertRegion(t,"NW"),this._insertRegion(t,"NE"),this._insertRegion(t,"SW"),this._insertRegion(t,"SE"),null!=e&&this._placeInTree(t,e)},e._insertRegion=function(t,e){var i,s,o,n,r=.5*t.size;switch(e){case"NW":i=t.range.minX,s=t.range.minX+r,o=t.range.minY,n=t.range.minY+r;break;case"NE":i=t.range.minX+r,s=t.range.maxX,o=t.range.minY,n=t.range.minY+r;break;case"SW":i=t.range.minX,s=t.range.minX+r,o=t.range.minY+r,n=t.range.maxY;break;case"SE":i=t.range.minX+r,s=t.range.maxX,o=t.range.minY+r,n=t.range.maxY}t.children[e]={centerOfMass:{x:0,y:0},mass:0,range:{minX:i,maxX:s,minY:o,maxY:n},size:.5*t.size,calcSize:2*t.calcSize,children:{data:null},maxWidth:0,level:t.level+1,childrenCount:0}},e._drawTree=function(t,e){void 0!==this.barnesHutTree&&(t.lineWidth=1,this._drawBranch(this.barnesHutTree.root,t,e))},e._drawBranch=function(t,e,i){void 0===i&&(i="#FF0000"),4==t.childrenCount&&(this._drawBranch(t.children.NW,e),this._drawBranch(t.children.NE,e),this._drawBranch(t.children.SE,e),this._drawBranch(t.children.SW,e)),e.strokeStyle=i,e.beginPath(),e.moveTo(t.range.minX,t.range.minY),e.lineTo(t.range.maxX,t.range.minY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.minY),e.lineTo(t.range.maxX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.maxY),e.lineTo(t.range.minX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.minX,t.range.maxY),e.lineTo(t.range.minX,t.range.minY),e.stroke()}},function(t){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children=[],t.webpackPolyfill=1),t}}])}); +}},s._getStackedBarYRange=function(t,e){for(var i,s=e[0].y,o=e[0].y,n=0;ne[n].y?e[n].y:s,o=ot[r].accumulated?t[r].accumulated:s,o=ot[s].y?t[s].y:e,i=is;++s)i[s].apply(this,e)}return this},e.prototype.listeners=function(t){return this._callbacks=this._callbacks||{},this._callbacks[t]||[]},e.prototype.hasListeners=function(t){return!!this.listeners(t).length}},function(t,e){var i,s,o;!function(n,r){s=[],i=r,o="function"==typeof i?i.apply(e,s):i,!(void 0!==o&&(t.exports=o))}(this,function(){function t(t){var e,i=t&&t.preventDefault||!1,s={},o={keydown:{},keyup:{}},n={};for(e=97;122>=e;e++)n[String.fromCharCode(e)]={code:65+(e-97),shift:!1};for(e=65;90>=e;e++)n[String.fromCharCode(e)]={code:e,shift:!0};for(e=0;9>=e;e++)n[""+e]={code:48+e,shift:!1};for(e=1;12>=e;e++)n["F"+e]={code:111+e,shift:!1};for(e=0;9>=e;e++)n["num"+e]={code:96+e,shift:!1};n["num*"]={code:106,shift:!1},n["num+"]={code:107,shift:!1},n["num-"]={code:109,shift:!1},n["num/"]={code:111,shift:!1},n["num."]={code:110,shift:!1},n.left={code:37,shift:!1},n.up={code:38,shift:!1},n.right={code:39,shift:!1},n.down={code:40,shift:!1},n.space={code:32,shift:!1},n.enter={code:13,shift:!1},n.shift={code:16,shift:void 0},n.esc={code:27,shift:!1},n.backspace={code:8,shift:!1},n.tab={code:9,shift:!1},n.ctrl={code:17,shift:!1},n.alt={code:18,shift:!1},n["delete"]={code:46,shift:!1},n.pageup={code:33,shift:!1},n.pagedown={code:34,shift:!1},n["="]={code:187,shift:!1},n["-"]={code:189,shift:!1},n["]"]={code:221,shift:!1},n["["]={code:219,shift:!1};var r=function(t){h(t,"keydown")},a=function(t){h(t,"keyup")},h=function(t,e){if(void 0!==o[e][t.keyCode]){for(var s=o[e][t.keyCode],n=0;n0)for(i in He)s=He[i],o=e[s],"undefined"!=typeof o&&(t[s]=o);return t}function b(t){return 0>t?Math.ceil(t):Math.floor(t)}function _(t,e,i){for(var s=""+Math.abs(t),o=t>=0;s.lengths;s++)(i&&t[s]!==e[s]||!i&&k(t[s])!==k(e[s]))&&r++;return r+n}function T(t){if(t){var e=t.toLowerCase().replace(/(.)s$/,"$1");t=mi[t]||fi[e]||e}return t}function O(t){var e,i,s={};for(i in t)a(t,i)&&(e=T(i),e&&(s[e]=t[i]));return s}function L(t){var e,i;if(0===t.indexOf("week"))e=7,i="day";else{if(0!==t.indexOf("month"))return;e=12,i="month"}De[t]=function(s,o){var r,a,h=De._locale[t],d=[];if("number"==typeof s&&(o=s,s=n),a=function(t){var e=De().utc().set(i,t);return h.call(De._locale,e,s||"")},null!=o)return a(o);for(r=0;e>r;r++)d.push(a(r));return d}}function k(t){var e=+t,i=0;return 0!==e&&isFinite(e)&&(i=e>=0?Math.floor(e):Math.ceil(e)),i}function N(t,e){return new Date(Date.UTC(t,e+1,0)).getUTCDate()}function I(t,e,i){return pe(De([t,11,31+e-i]),e,i).week}function A(t){return z(t)?366:365}function z(t){return t%4===0&&t%100!==0||t%400===0}function P(t){var e;t._a&&-2===t._pf.overflow&&(e=t._a[Ne]<0||t._a[Ne]>11?Ne:t._a[Ie]<1||t._a[Ie]>N(t._a[ke],t._a[Ne])?Ie:t._a[Ae]<0||t._a[Ae]>24||24===t._a[Ae]&&(0!==t._a[ze]||0!==t._a[Pe]||0!==t._a[Re])?Ae:t._a[ze]<0||t._a[ze]>59?ze:t._a[Pe]<0||t._a[Pe]>59?Pe:t._a[Re]<0||t._a[Re]>999?Re:-1,t._pf._overflowDayOfYear&&(ke>e||e>Ie)&&(e=Ie),t._pf.overflow=e)}function R(t){return null==t._isValid&&(t._isValid=!isNaN(t._d.getTime())&&t._pf.overflow<0&&!t._pf.empty&&!t._pf.invalidMonth&&!t._pf.nullInput&&!t._pf.invalidFormat&&!t._pf.userInvalidated,t._strict&&(t._isValid=t._isValid&&0===t._pf.charsLeftOver&&0===t._pf.unusedTokens.length&&t._pf.bigHour===n)),t._isValid}function F(t){return t?t.toLowerCase().replace("_","-"):t}function H(t){for(var e,i,s,o,n=0;n0;){if(s=Y(o.slice(0,e).join("-")))return s;if(i&&i.length>=e&&E(o,i,!0)>=e-1)break;e--}n++}return null}function Y(t){var e=null;if(!Fe[t]&&Ye)try{e=De.locale(),!function(){var t=new Error('Cannot find module "./locale"');throw t.code="MODULE_NOT_FOUND",t}(),De.locale(e)}catch(i){}return Fe[t]}function W(t,e){var i,s;return e._isUTC?(i=e.clone(),s=(De.isMoment(t)||C(t)?+t:+De(t))-+i,i._d.setTime(+i._d+s),De.updateOffset(i,!1),i):De(t).local()}function B(t){return t.match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"")}function G(t){var e,i,s=t.match(je);for(e=0,i=s.length;i>e;e++)s[e]=_i[s[e]]?_i[s[e]]:B(s[e]);return function(o){var n="";for(e=0;i>e;e++)n+=s[e]instanceof Function?s[e].call(o,t):s[e];return n}}function j(t,e){return t.isValid()?(e=U(e,t.localeData()),gi[e]||(gi[e]=G(e)),gi[e](t)):t.localeData().invalidDate()}function U(t,e){function i(t){return e.longDateFormat(t)||t}var s=5;for(Ue.lastIndex=0;s>=0&&Ue.test(t);)t=t.replace(Ue,i),Ue.lastIndex=0,s-=1;return t}function V(t,e){var i,s=e._strict;switch(t){case"Q":return ii;case"DDDD":return oi;case"YYYY":case"GGGG":case"gggg":return s?ni:qe;case"Y":case"G":case"g":return ai;case"YYYYYY":case"YYYYY":case"GGGGG":case"ggggg":return s?ri:Ze;case"S":if(s)return ii;case"SS":if(s)return si;case"SSS":if(s)return oi;case"DDD":return Xe;case"MMM":case"MMMM":case"dd":case"ddd":case"dddd":return Qe;case"a":case"A":return e._locale._meridiemParse;case"x":return ti;case"X":return ei;case"Z":case"ZZ":return $e;case"T":return Je;case"SSSS":return Ke;case"MM":case"DD":case"YY":case"GG":case"gg":case"HH":case"hh":case"mm":case"ss":case"ww":case"WW":return s?si:Ve;case"M":case"D":case"d":case"H":case"h":case"m":case"s":case"w":case"W":case"e":case"E":return Ve;case"Do":return s?e._locale._ordinalParse:e._locale._ordinalParseLenient;default:return i=new RegExp(ee(te(t.replace("\\","")),"i"))}}function X(t){t=t||"";var e=t.match($e)||[],i=e[e.length-1]||[],s=(i+"").match(pi)||["-",0,0],o=+(60*s[1])+k(s[2]);return"+"===s[0]?-o:o}function q(t,e,i){var s,o=i._a;switch(t){case"Q":null!=e&&(o[Ne]=3*(k(e)-1));break;case"M":case"MM":null!=e&&(o[Ne]=k(e)-1);break;case"MMM":case"MMMM":s=i._locale.monthsParse(e,t,i._strict),null!=s?o[Ne]=s:i._pf.invalidMonth=e;break;case"D":case"DD":null!=e&&(o[Ie]=k(e));break;case"Do":null!=e&&(o[Ie]=k(parseInt(e.match(/\d{1,2}/)[0],10)));break;case"DDD":case"DDDD":null!=e&&(i._dayOfYear=k(e));break;case"YY":o[ke]=De.parseTwoDigitYear(e);break;case"YYYY":case"YYYYY":case"YYYYYY":o[ke]=k(e);break;case"a":case"A":i._isPm=i._locale.isPM(e);break;case"h":case"hh":i._pf.bigHour=!0;case"H":case"HH":o[Ae]=k(e);break;case"m":case"mm":o[ze]=k(e);break;case"s":case"ss":o[Pe]=k(e);break;case"S":case"SS":case"SSS":case"SSSS":o[Re]=k(1e3*("0."+e));break;case"x":i._d=new Date(k(e));break;case"X":i._d=new Date(1e3*parseFloat(e));break;case"Z":case"ZZ":i._useUTC=!0,i._tzm=X(e);break;case"dd":case"ddd":case"dddd":s=i._locale.weekdaysParse(e),null!=s?(i._w=i._w||{},i._w.d=s):i._pf.invalidWeekday=e;break;case"w":case"ww":case"W":case"WW":case"d":case"e":case"E":t=t.substr(0,1);case"gggg":case"GGGG":case"GGGGG":t=t.substr(0,2),e&&(i._w=i._w||{},i._w[t]=k(e));break;case"gg":case"GG":i._w=i._w||{},i._w[t]=De.parseTwoDigitYear(e)}}function Z(t){var e,i,s,o,n,a,h;e=t._w,null!=e.GG||null!=e.W||null!=e.E?(n=1,a=4,i=r(e.GG,t._a[ke],pe(De(),1,4).year),s=r(e.W,1),o=r(e.E,1)):(n=t._locale._week.dow,a=t._locale._week.doy,i=r(e.gg,t._a[ke],pe(De(),n,a).year),s=r(e.w,1),null!=e.d?(o=e.d,n>o&&++s):o=null!=e.e?e.e+n:n),h=ue(i,s,o,a,n),t._a[ke]=h.year,t._dayOfYear=h.dayOfYear}function K(t){var e,i,s,o,n=[];if(!t._d){for(s=$(t),t._w&&null==t._a[Ie]&&null==t._a[Ne]&&Z(t),t._dayOfYear&&(o=r(t._a[ke],s[ke]),t._dayOfYear>A(o)&&(t._pf._overflowDayOfYear=!0),i=he(o,0,t._dayOfYear),t._a[Ne]=i.getUTCMonth(),t._a[Ie]=i.getUTCDate()),e=0;3>e&&null==t._a[e];++e)t._a[e]=n[e]=s[e];for(;7>e;e++)t._a[e]=n[e]=null==t._a[e]?2===e?1:0:t._a[e];24===t._a[Ae]&&0===t._a[ze]&&0===t._a[Pe]&&0===t._a[Re]&&(t._nextDay=!0,t._a[Ae]=0),t._d=(t._useUTC?he:ae).apply(null,n),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()+t._tzm),t._nextDay&&(t._a[Ae]=24)}}function Q(t){var e;t._d||(e=O(t._i),t._a=[e.year,e.month,e.day||e.date,e.hour,e.minute,e.second,e.millisecond],K(t))}function $(t){var e=new Date;return t._useUTC?[e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()]:[e.getFullYear(),e.getMonth(),e.getDate()]}function J(t){if(t._f===De.ISO_8601)return void se(t);t._a=[],t._pf.empty=!0;var e,i,s,o,r,a=""+t._i,h=a.length,d=0;for(s=U(t._f,t._locale).match(je)||[],e=0;e0&&t._pf.unusedInput.push(r),a=a.slice(a.indexOf(i)+i.length),d+=i.length),_i[o]?(i?t._pf.empty=!1:t._pf.unusedTokens.push(o),q(o,i,t)):t._strict&&!i&&t._pf.unusedTokens.push(o);t._pf.charsLeftOver=h-d,a.length>0&&t._pf.unusedInput.push(a),t._pf.bigHour===!0&&t._a[Ae]<=12&&(t._pf.bigHour=n),t._isPm&&t._a[Ae]<12&&(t._a[Ae]+=12),t._isPm===!1&&12===t._a[Ae]&&(t._a[Ae]=0),K(t),P(t)}function te(t){return t.replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(t,e,i,s,o){return e||i||s||o})}function ee(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function ie(t){var e,i,s,o,n;if(0===t._f.length)return t._pf.invalidFormat=!0,void(t._d=new Date(0/0));for(o=0;on)&&(s=n,i=e));v(t,i||e)}function se(t){var e,i,s=t._i,o=hi.exec(s);if(o){for(t._pf.iso=!0,e=0,i=li.length;i>e;e++)if(li[e][1].exec(s)){t._f=li[e][0]+(o[6]||" ");break}for(e=0,i=ci.length;i>e;e++)if(ci[e][1].exec(s)){t._f+=ci[e][0];break}s.match($e)&&(t._f+="Z"),J(t)}else t._isValid=!1}function oe(t){se(t),t._isValid===!1&&(delete t._isValid,De.createFromInputFallback(t))}function ne(t,e){var i,s=[];for(i=0;it&&a.setFullYear(t),a}function he(t){var e=new Date(Date.UTC.apply(null,arguments));return 1970>t&&e.setUTCFullYear(t),e}function de(t,e){if("string"==typeof t)if(isNaN(t)){if(t=e.weekdaysParse(t),"number"!=typeof t)return null}else t=parseInt(t,10);return t}function le(t,e,i,s,o){return o.relativeTime(e||1,!!i,t,s)}function ce(t,e,i){var s=De.duration(t).abs(),o=Oe(s.as("s")),n=Oe(s.as("m")),r=Oe(s.as("h")),a=Oe(s.as("d")),h=Oe(s.as("M")),d=Oe(s.as("y")),l=o0,l[4]=i,le.apply({},l)}function pe(t,e,i){var s,o=i-e,n=i-t.day();return n>o&&(n-=7),o-7>n&&(n+=7),s=De(t).add(n,"d"),{week:Math.ceil(s.dayOfYear()/7),year:s.year()}}function ue(t,e,i,s,o){var n,r,a=he(t,0,1).getUTCDay();return a=0===a?7:a,i=null!=i?i:o,n=o-a+(a>s?7:0)-(o>a?7:0),r=7*(e-1)+(i-o)+n+1,{year:r>0?t:t-1,dayOfYear:r>0?r:A(t-1)+r}}function me(t){var e,i=t._i,s=t._f;return t._locale=t._locale||De.localeData(t._l),null===i||s===n&&""===i?De.invalid({nullInput:!0}):("string"==typeof i&&(t._i=i=t._locale.preparse(i)),De.isMoment(i)?new f(i,!0):(s?M(s)?ie(t):J(t):re(t),e=new f(t),e._nextDay&&(e.add(1,"d"),e._nextDay=n),e))}function fe(t,e){var i,s;if(1===e.length&&M(e[0])&&(e=e[0]),!e.length)return De();for(i=e[0],s=1;s=0?"+":"-";return e+_(Math.abs(t),6)},gg:function(){return _(this.weekYear()%100,2)},gggg:function(){return _(this.weekYear(),4)},ggggg:function(){return _(this.weekYear(),5)},GG:function(){return _(this.isoWeekYear()%100,2)},GGGG:function(){return _(this.isoWeekYear(),4)},GGGGG:function(){return _(this.isoWeekYear(),5)},e:function(){return this.weekday()},E:function(){return this.isoWeekday()},a:function(){return this.localeData().meridiem(this.hours(),this.minutes(),!0)},A:function(){return this.localeData().meridiem(this.hours(),this.minutes(),!1)},H:function(){return this.hours()},h:function(){return this.hours()%12||12},m:function(){return this.minutes()},s:function(){return this.seconds()},S:function(){return k(this.milliseconds()/100)},SS:function(){return _(k(this.milliseconds()/10),2)},SSS:function(){return _(this.milliseconds(),3)},SSSS:function(){return _(this.milliseconds(),3)},Z:function(){var t=-this.zone(),e="+";return 0>t&&(t=-t,e="-"),e+_(k(t/60),2)+":"+_(k(t)%60,2)},ZZ:function(){var t=-this.zone(),e="+";return 0>t&&(t=-t,e="-"),e+_(k(t/60),2)+_(k(t)%60,2)},z:function(){return this.zoneAbbr()},zz:function(){return this.zoneName()},x:function(){return this.valueOf()},X:function(){return this.unix()},Q:function(){return this.quarter()}},xi={},wi=["months","monthsShort","weekdays","weekdaysShort","weekdaysMin"];yi.length;)Ce=yi.pop(),_i[Ce+"o"]=u(_i[Ce],Ce);for(;bi.length;)Ce=bi.pop(),_i[Ce+Ce]=p(_i[Ce],2);_i.DDDD=p(_i.DDD,3),v(m.prototype,{set:function(t){var e,i;for(i in t)e=t[i],"function"==typeof e?this[i]=e:this["_"+i]=e;this._ordinalParseLenient=new RegExp(this._ordinalParse.source+"|"+/\d{1,2}/.source)},_months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),months:function(t){return this._months[t.month()]},_monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),monthsShort:function(t){return this._monthsShort[t.month()]},monthsParse:function(t,e,i){var s,o,n;for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),s=0;12>s;s++){if(o=De.utc([2e3,s]),i&&!this._longMonthsParse[s]&&(this._longMonthsParse[s]=new RegExp("^"+this.months(o,"").replace(".","")+"$","i"),this._shortMonthsParse[s]=new RegExp("^"+this.monthsShort(o,"").replace(".","")+"$","i")),i||this._monthsParse[s]||(n="^"+this.months(o,"")+"|^"+this.monthsShort(o,""),this._monthsParse[s]=new RegExp(n.replace(".",""),"i")),i&&"MMMM"===e&&this._longMonthsParse[s].test(t))return s;if(i&&"MMM"===e&&this._shortMonthsParse[s].test(t))return s;if(!i&&this._monthsParse[s].test(t))return s}},_weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdays:function(t){return this._weekdays[t.day()]},_weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysShort:function(t){return this._weekdaysShort[t.day()]},_weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),weekdaysMin:function(t){return this._weekdaysMin[t.day()]},weekdaysParse:function(t){var e,i,s;for(this._weekdaysParse||(this._weekdaysParse=[]),e=0;7>e;e++)if(this._weekdaysParse[e]||(i=De([2e3,1]).day(e),s="^"+this.weekdays(i,"")+"|^"+this.weekdaysShort(i,"")+"|^"+this.weekdaysMin(i,""),this._weekdaysParse[e]=new RegExp(s.replace(".",""),"i")),this._weekdaysParse[e].test(t))return e},_longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY LT",LLLL:"dddd, MMMM D, YYYY LT"},longDateFormat:function(t){var e=this._longDateFormat[t];return!e&&this._longDateFormat[t.toUpperCase()]&&(e=this._longDateFormat[t.toUpperCase()].replace(/MMMM|MM|DD|dddd/g,function(t){return t.slice(1)}),this._longDateFormat[t]=e),e},isPM:function(t){return"p"===(t+"").toLowerCase().charAt(0)},_meridiemParse:/[ap]\.?m?\.?/i,meridiem:function(t,e,i){return t>11?i?"pm":"PM":i?"am":"AM"},_calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},calendar:function(t,e,i){var s=this._calendar[t];return"function"==typeof s?s.apply(e,[i]):s},_relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},relativeTime:function(t,e,i,s){var o=this._relativeTime[i];return"function"==typeof o?o(t,e,i,s):o.replace(/%d/i,t)},pastFuture:function(t,e){var i=this._relativeTime[t>0?"future":"past"];return"function"==typeof i?i(e):i.replace(/%s/i,e)},ordinal:function(t){return this._ordinal.replace("%d",t)},_ordinal:"%d",_ordinalParse:/\d{1,2}/,preparse:function(t){return t},postformat:function(t){return t},week:function(t){return pe(t,this._week.dow,this._week.doy).week},_week:{dow:0,doy:6},_invalidDate:"Invalid date",invalidDate:function(){return this._invalidDate}}),De=function(t,e,i,s){var o;return"boolean"==typeof i&&(s=i,i=n),o={},o._isAMomentObject=!0,o._i=t,o._f=e,o._l=i,o._strict=s,o._isUTC=!1,o._pf=h(),me(o)},De.suppressDeprecationWarnings=!1,De.createFromInputFallback=l("moment construction falls back to js Date. This is discouraged and will be removed in upcoming major release. Please refer to https://github.com/moment/moment/issues/1407 for more info.",function(t){t._d=new Date(t._i+(t._useUTC?" UTC":""))}),De.min=function(){var t=[].slice.call(arguments,0);return fe("isBefore",t)},De.max=function(){var t=[].slice.call(arguments,0);return fe("isAfter",t)},De.utc=function(t,e,i,s){var o;return"boolean"==typeof i&&(s=i,i=n),o={},o._isAMomentObject=!0,o._useUTC=!0,o._isUTC=!0,o._l=i,o._i=t,o._f=e,o._strict=s,o._pf=h(),me(o).utc()},De.unix=function(t){return De(1e3*t)},De.duration=function(t,e){var i,s,o,n,r=t,h=null;return De.isDuration(t)?r={ms:t._milliseconds,d:t._days,M:t._months}:"number"==typeof t?(r={},e?r[e]=t:r.milliseconds=t):(h=Be.exec(t))?(i="-"===h[1]?-1:1,r={y:0,d:k(h[Ie])*i,h:k(h[Ae])*i,m:k(h[ze])*i,s:k(h[Pe])*i,ms:k(h[Re])*i}):(h=Ge.exec(t))?(i="-"===h[1]?-1:1,o=function(t){var e=t&&parseFloat(t.replace(",","."));return(isNaN(e)?0:e)*i},r={y:o(h[2]),M:o(h[3]),d:o(h[4]),h:o(h[5]),m:o(h[6]),s:o(h[7]),w:o(h[8])}):"object"==typeof r&&("from"in r||"to"in r)&&(n=w(De(r.from),De(r.to)),r={},r.ms=n.milliseconds,r.M=n.months),s=new g(r),De.isDuration(t)&&a(t,"_locale")&&(s._locale=t._locale),s},De.version=Ee,De.defaultFormat=di,De.ISO_8601=function(){},De.momentProperties=He,De.updateOffset=function(){},De.relativeTimeThreshold=function(t,e){return vi[t]===n?!1:e===n?vi[t]:(vi[t]=e,!0)},De.lang=l("moment.lang is deprecated. Use moment.locale instead.",function(t,e){return De.locale(t,e)}),De.locale=function(t,e){var i;return t&&(i="undefined"!=typeof e?De.defineLocale(t,e):De.localeData(t),i&&(De.duration._locale=De._locale=i)),De._locale._abbr},De.defineLocale=function(t,e){return null!==e?(e.abbr=t,Fe[t]||(Fe[t]=new m),Fe[t].set(e),De.locale(t),Fe[t]):(delete Fe[t],null)},De.langData=l("moment.langData is deprecated. Use moment.localeData instead.",function(t){return De.localeData(t)}),De.localeData=function(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return De._locale;if(!M(t)){if(e=Y(t))return e;t=[t]}return H(t)},De.isMoment=function(t){return t instanceof f||null!=t&&a(t,"_isAMomentObject")},De.isDuration=function(t){return t instanceof g};for(Ce=wi.length-1;Ce>=0;--Ce)L(wi[Ce]);De.normalizeUnits=function(t){return T(t)},De.invalid=function(t){var e=De.utc(0/0);return null!=t?v(e._pf,t):e._pf.userInvalidated=!0,e +},De.parseZone=function(){return De.apply(null,arguments).parseZone()},De.parseTwoDigitYear=function(t){return k(t)+(k(t)>68?1900:2e3)},v(De.fn=f.prototype,{clone:function(){return De(this)},valueOf:function(){return+this._d+6e4*(this._offset||0)},unix:function(){return Math.floor(+this/1e3)},toString:function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},toDate:function(){return this._offset?new Date(+this):this._d},toISOString:function(){var t=De(this).utc();return 00:!1},parsingFlags:function(){return v({},this._pf)},invalidAt:function(){return this._pf.overflow},utc:function(t){return this.zone(0,t)},local:function(t){return this._isUTC&&(this.zone(0,t),this._isUTC=!1,t&&this.add(this._dateTzOffset(),"m")),this},format:function(t){var e=j(this,t||De.defaultFormat);return this.localeData().postformat(e)},add:S(1,"add"),subtract:S(-1,"subtract"),diff:function(t,e,i){var s,o,n,r=W(t,this),a=6e4*(this.zone()-r.zone());return e=T(e),"year"===e||"month"===e?(s=432e5*(this.daysInMonth()+r.daysInMonth()),o=12*(this.year()-r.year())+(this.month()-r.month()),n=this-De(this).startOf("month")-(r-De(r).startOf("month")),n-=6e4*(this.zone()-De(this).startOf("month").zone()-(r.zone()-De(r).startOf("month").zone())),o+=n/s,"year"===e&&(o/=12)):(s=this-r,o="second"===e?s/1e3:"minute"===e?s/6e4:"hour"===e?s/36e5:"day"===e?(s-a)/864e5:"week"===e?(s-a)/6048e5:s),i?o:b(o)},from:function(t,e){return De.duration({to:this,from:t}).locale(this.locale()).humanize(!e)},fromNow:function(t){return this.from(De(),t)},calendar:function(t){var e=t||De(),i=W(e,this).startOf("day"),s=this.diff(i,"days",!0),o=-6>s?"sameElse":-1>s?"lastWeek":0>s?"lastDay":1>s?"sameDay":2>s?"nextDay":7>s?"nextWeek":"sameElse";return this.format(this.localeData().calendar(o,this,De(e)))},isLeapYear:function(){return z(this.year())},isDST:function(){return this.zone()+t):(i=De.isMoment(t)?+t:+De(t),i<+this.clone().startOf(e))},isBefore:function(t,e){var i;return e=T("undefined"!=typeof e?e:"millisecond"),"millisecond"===e?(t=De.isMoment(t)?t:De(t),+t>+this):(i=De.isMoment(t)?+t:+De(t),+this.clone().endOf(e)t?this:t}),max:l("moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548",function(t){return t=De.apply(null,arguments),t>this?this:t}),zone:function(t,e){var i,s=this._offset||0;return null==t?this._isUTC?s:this._dateTzOffset():("string"==typeof t&&(t=X(t)),Math.abs(t)<16&&(t=60*t),!this._isUTC&&e&&(i=this._dateTzOffset()),this._offset=t,this._isUTC=!0,null!=i&&this.subtract(i,"m"),s!==t&&(!e||this._changeInProgress?D(this,De.duration(s-t,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,De.updateOffset(this,!0),this._changeInProgress=null)),this)},zoneAbbr:function(){return this._isUTC?"UTC":""},zoneName:function(){return this._isUTC?"Coordinated Universal Time":""},parseZone:function(){return this._tzm?this.zone(this._tzm):"string"==typeof this._i&&this.zone(this._i),this},hasAlignedHourOffset:function(t){return t=t?De(t).zone():0,(this.zone()-t)%60===0},daysInMonth:function(){return N(this.year(),this.month())},dayOfYear:function(t){var e=Oe((De(this).startOf("day")-De(this).startOf("year"))/864e5)+1;return null==t?e:this.add(t-e,"d")},quarter:function(t){return null==t?Math.ceil((this.month()+1)/3):this.month(3*(t-1)+this.month()%3)},weekYear:function(t){var e=pe(this,this.localeData()._week.dow,this.localeData()._week.doy).year;return null==t?e:this.add(t-e,"y")},isoWeekYear:function(t){var e=pe(this,1,4).year;return null==t?e:this.add(t-e,"y")},week:function(t){var e=this.localeData().week(this);return null==t?e:this.add(7*(t-e),"d")},isoWeek:function(t){var e=pe(this,1,4).week;return null==t?e:this.add(7*(t-e),"d")},weekday:function(t){var e=(this.day()+7-this.localeData()._week.dow)%7;return null==t?e:this.add(t-e,"d")},isoWeekday:function(t){return null==t?this.day()||7:this.day(this.day()%7?t:t-7)},isoWeeksInYear:function(){return I(this.year(),1,4)},weeksInYear:function(){var t=this.localeData()._week;return I(this.year(),t.dow,t.doy)},get:function(t){return t=T(t),this[t]()},set:function(t,e){return t=T(t),"function"==typeof this[t]&&this[t](e),this},locale:function(t){var e;return t===n?this._locale._abbr:(e=De.localeData(t),null!=e&&(this._locale=e),this)},lang:l("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(t){return t===n?this.localeData():this.locale(t)}),localeData:function(){return this._locale},_dateTzOffset:function(){return 15*Math.round(this._d.getTimezoneOffset()/15)}}),De.fn.millisecond=De.fn.milliseconds=be("Milliseconds",!1),De.fn.second=De.fn.seconds=be("Seconds",!1),De.fn.minute=De.fn.minutes=be("Minutes",!1),De.fn.hour=De.fn.hours=be("Hours",!0),De.fn.date=be("Date",!0),De.fn.dates=l("dates accessor is deprecated. Use date instead.",be("Date",!0)),De.fn.year=be("FullYear",!0),De.fn.years=l("years accessor is deprecated. Use year instead.",be("FullYear",!0)),De.fn.days=De.fn.day,De.fn.months=De.fn.month,De.fn.weeks=De.fn.week,De.fn.isoWeeks=De.fn.isoWeek,De.fn.quarters=De.fn.quarter,De.fn.toJSON=De.fn.toISOString,v(De.duration.fn=g.prototype,{_bubble:function(){var t,e,i,s=this._milliseconds,o=this._days,n=this._months,r=this._data,a=0;r.milliseconds=s%1e3,t=b(s/1e3),r.seconds=t%60,e=b(t/60),r.minutes=e%60,i=b(e/60),r.hours=i%24,o+=b(i/24),a=b(_e(o)),o-=b(xe(a)),n+=b(o/30),o%=30,a+=b(n/12),n%=12,r.days=o,r.months=n,r.years=a},abs:function(){return this._milliseconds=Math.abs(this._milliseconds),this._days=Math.abs(this._days),this._months=Math.abs(this._months),this._data.milliseconds=Math.abs(this._data.milliseconds),this._data.seconds=Math.abs(this._data.seconds),this._data.minutes=Math.abs(this._data.minutes),this._data.hours=Math.abs(this._data.hours),this._data.months=Math.abs(this._data.months),this._data.years=Math.abs(this._data.years),this},weeks:function(){return b(this.days()/7)},valueOf:function(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*k(this._months/12)},humanize:function(t){var e=ce(this,!t,this.localeData());return t&&(e=this.localeData().pastFuture(+this,e)),this.localeData().postformat(e)},add:function(t,e){var i=De.duration(t,e);return this._milliseconds+=i._milliseconds,this._days+=i._days,this._months+=i._months,this._bubble(),this},subtract:function(t,e){var i=De.duration(t,e);return this._milliseconds-=i._milliseconds,this._days-=i._days,this._months-=i._months,this._bubble(),this},get:function(t){return t=T(t),this[t.toLowerCase()+"s"]()},as:function(t){var e,i;if(t=T(t),"month"===t||"year"===t)return e=this._days+this._milliseconds/864e5,i=this._months+12*_e(e),"month"===t?i:i/12;switch(e=this._days+Math.round(xe(this._months/12)),t){case"week":return e/7+this._milliseconds/6048e5;case"day":return e+this._milliseconds/864e5;case"hour":return 24*e+this._milliseconds/36e5;case"minute":return 24*e*60+this._milliseconds/6e4;case"second":return 24*e*60*60+this._milliseconds/1e3;case"millisecond":return Math.floor(24*e*60*60*1e3)+this._milliseconds;default:throw new Error("Unknown unit "+t)}},lang:De.fn.lang,locale:De.fn.locale,toIsoString:l("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",function(){return this.toISOString()}),toISOString:function(){var t=Math.abs(this.years()),e=Math.abs(this.months()),i=Math.abs(this.days()),s=Math.abs(this.hours()),o=Math.abs(this.minutes()),n=Math.abs(this.seconds()+this.milliseconds()/1e3);return this.asSeconds()?(this.asSeconds()<0?"-":"")+"P"+(t?t+"Y":"")+(e?e+"M":"")+(i?i+"D":"")+(s||o||n?"T":"")+(s?s+"H":"")+(o?o+"M":"")+(n?n+"S":""):"P0D"},localeData:function(){return this._locale}}),De.duration.fn.toString=De.duration.fn.toISOString;for(Ce in ui)a(ui,Ce)&&we(Ce.toLowerCase());De.duration.fn.asMilliseconds=function(){return this.as("ms")},De.duration.fn.asSeconds=function(){return this.as("s")},De.duration.fn.asMinutes=function(){return this.as("m")},De.duration.fn.asHours=function(){return this.as("h")},De.duration.fn.asDays=function(){return this.as("d")},De.duration.fn.asWeeks=function(){return this.as("weeks")},De.duration.fn.asMonths=function(){return this.as("M")},De.duration.fn.asYears=function(){return this.as("y")},De.locale("en",{ordinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10,i=1===k(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th";return t+i}}),Ye?o.exports=De:(s=function(t,e,i){return i.config&&i.config()&&i.config().noGlobal===!0&&(Te.moment=Me),De}.call(e,i,e,o),!(s!==n&&(o.exports=s)),Se(!0))}).call(this)}).call(e,function(){return this}(),i(71)(t))},function(t,e,i){var s;!function(o,n,r,a){function h(t,e,i){return setTimeout(m(t,i),e)}function d(t,e,i){return Array.isArray(t)?(l(t,i[e],i),!0):!1}function l(t,e,i){var s;if(t)if(t.forEach)t.forEach(e,i);else if(t.length!==a)for(s=0;s-1}function x(t){return t.trim().split(/\s+/g)}function w(t,e,i){if(t.indexOf&&!i)return t.indexOf(e);for(var s=0;si[e]}):s.sort()),s}function M(t,e){for(var i,s,o=e[0].toUpperCase()+e.slice(1),n=0;n1&&!i.firstMultiple?i.firstMultiple=A(e):1===o&&(i.firstMultiple=!1);var n=i.firstInput,r=i.firstMultiple,a=r?r.center:n.center,h=e.center=z(s);e.timeStamp=ve(),e.deltaTime=e.timeStamp-n.timeStamp,e.angle=H(a,h),e.distance=F(a,h),N(i,e),e.offsetDirection=R(e.deltaX,e.deltaY),e.scale=r?W(r.pointers,s):1,e.rotation=r?Y(r.pointers,s):0,I(i,e);var d=t.element;b(e.srcEvent.target,d)&&(d=e.srcEvent.target),e.target=d}function N(t,e){var i=e.center,s=t.offsetDelta||{},o=t.prevDelta||{},n=t.prevInput||{};(e.eventType===Te||n.eventType===Le)&&(o=t.prevDelta={x:n.deltaX||0,y:n.deltaY||0},s=t.offsetDelta={x:i.x,y:i.y}),e.deltaX=o.x+(i.x-s.x),e.deltaY=o.y+(i.y-s.y)}function I(t,e){var i,s,o,n,r=t.lastInterval||e,h=e.timeStamp-r.timeStamp;if(e.eventType!=ke&&(h>Ee||r.velocity===a)){var d=r.deltaX-e.deltaX,l=r.deltaY-e.deltaY,c=P(h,d,l);s=c.x,o=c.y,i=ge(c.x)>ge(c.y)?c.x:c.y,n=R(d,l),t.lastInterval=e}else i=r.velocity,s=r.velocityX,o=r.velocityY,n=r.direction;e.velocity=i,e.velocityX=s,e.velocityY=o,e.direction=n}function A(t){for(var e=[],i=0;io;)i+=t[o].clientX,s+=t[o].clientY,o++;return{x:fe(i/e),y:fe(s/e)}}function P(t,e,i){return{x:e/t||0,y:i/t||0}}function R(t,e){return t===e?Ne:ge(t)>=ge(e)?t>0?Ie:Ae:e>0?ze:Pe}function F(t,e,i){i||(i=Ye);var s=e[i[0]]-t[i[0]],o=e[i[1]]-t[i[1]];return Math.sqrt(s*s+o*o)}function H(t,e,i){i||(i=Ye);var s=e[i[0]]-t[i[0]],o=e[i[1]]-t[i[1]];return 180*Math.atan2(o,s)/Math.PI}function Y(t,e){return H(e[1],e[0],We)-H(t[1],t[0],We)}function W(t,e){return F(e[0],e[1],We)/F(t[0],t[1],We)}function B(){this.evEl=Ge,this.evWin=je,this.allow=!0,this.pressed=!1,T.apply(this,arguments)}function G(){this.evEl=Xe,this.evWin=qe,T.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function j(){this.evTarget=Ke,this.evWin=Qe,this.started=!1,T.apply(this,arguments)}function U(t,e){var i=S(t.touches),s=S(t.changedTouches);return e&(Le|ke)&&(i=D(i.concat(s),"identifier",!0)),[i,s]}function V(){this.evTarget=Je,this.targetIds={},T.apply(this,arguments)}function X(t,e){var i=S(t.touches),s=this.targetIds;if(e&(Te|Oe)&&1===i.length)return s[i[0].identifier]=!0,[i,i];var o,n,r=S(t.changedTouches),a=[],h=this.target;if(n=i.filter(function(t){return b(t.target,h)}),e===Te)for(o=0;oa&&(e.push(t),a=e.length-1):o&(Le|ke)&&(i=!0),0>a||(e[a]=t,this.callback(this.manager,o,{pointers:e,changedPointers:[t],pointerType:n,srcEvent:t}),i&&e.splice(a,1))}});var Ze={touchstart:Te,touchmove:Oe,touchend:Le,touchcancel:ke},Ke="touchstart",Qe="touchstart touchmove touchend touchcancel";u(j,T,{handler:function(t){var e=Ze[t.type];if(e===Te&&(this.started=!0),this.started){var i=U.call(this,t,e);e&(Le|ke)&&i[0].length-i[1].length===0&&(this.started=!1),this.callback(this.manager,e,{pointers:i[0],changedPointers:i[1],pointerType:Se,srcEvent:t})}}});var $e={touchstart:Te,touchmove:Oe,touchend:Le,touchcancel:ke},Je="touchstart touchmove touchend touchcancel";u(V,T,{handler:function(t){var e=$e[t.type],i=X.call(this,t,e);i&&this.callback(this.manager,e,{pointers:i[0],changedPointers:i[1],pointerType:Se,srcEvent:t})}}),u(q,T,{handler:function(t,e,i){var s=i.pointerType==Se,o=i.pointerType==Me;if(s)this.mouse.allow=!1;else if(o&&!this.mouse.allow)return;e&(Le|ke)&&(this.mouse.allow=!0),this.callback(t,e,i)},destroy:function(){this.touch.destroy(),this.mouse.destroy()}});var ti=M(ue.style,"touchAction"),ei=ti!==a,ii="compute",si="auto",oi="manipulation",ni="none",ri="pan-x",ai="pan-y";Z.prototype={set:function(t){t==ii&&(t=this.compute()),ei&&(this.manager.element.style[ti]=t),this.actions=t.toLowerCase().trim()},update:function(){this.set(this.manager.options.touchAction)},compute:function(){var t=[];return l(this.manager.recognizers,function(e){f(e.options.enable,[e])&&(t=t.concat(e.getTouchAction()))}),K(t.join(" "))},preventDefaults:function(t){if(!ei){var e=t.srcEvent,i=t.offsetDirection;if(this.manager.session.prevented)return void e.preventDefault();var s=this.actions,o=_(s,ni),n=_(s,ai),r=_(s,ri);return o||n&&i&Re||r&&i&Fe?this.preventSrc(e):void 0}},preventSrc:function(t){this.manager.session.prevented=!0,t.preventDefault()}};var hi=1,di=2,li=4,ci=8,pi=ci,ui=16,mi=32;Q.prototype={defaults:{},set:function(t){return c(this.options,t),this.manager&&this.manager.touchAction.update(),this},recognizeWith:function(t){if(d(t,"recognizeWith",this))return this;var e=this.simultaneous;return t=te(t,this),e[t.id]||(e[t.id]=t,t.recognizeWith(this)),this},dropRecognizeWith:function(t){return d(t,"dropRecognizeWith",this)?this:(t=te(t,this),delete this.simultaneous[t.id],this)},requireFailure:function(t){if(d(t,"requireFailure",this))return this;var e=this.requireFail;return t=te(t,this),-1===w(e,t)&&(e.push(t),t.requireFailure(this)),this},dropRequireFailure:function(t){if(d(t,"dropRequireFailure",this))return this;t=te(t,this);var e=w(this.requireFail,t);return e>-1&&this.requireFail.splice(e,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(t){return!!this.simultaneous[t.id]},emit:function(t){function e(e){i.manager.emit(i.options.event+(e?$(s):""),t)}var i=this,s=this.state;ci>s&&e(!0),e(),s>=ci&&e(!0)},tryEmit:function(t){return this.canEmit()?this.emit(t):void(this.state=mi)},canEmit:function(){for(var t=0;tn?Ie:Ae,i=n!=this.pX,s=Math.abs(t.deltaX)):(o=0===r?Ne:0>r?ze:Pe,i=r!=this.pY,s=Math.abs(t.deltaY))),t.direction=o,i&&s>e.threshold&&o&e.direction},attrTest:function(t){return ee.prototype.attrTest.call(this,t)&&(this.state&di||!(this.state&di)&&this.directionTest(t))},emit:function(t){this.pX=t.deltaX,this.pY=t.deltaY;var e=J(t.direction);e&&this.manager.emit(this.options.event+e,t),this._super.emit.call(this,t)}}),u(se,ee,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[ni]},attrTest:function(t){return this._super.attrTest.call(this,t)&&(Math.abs(t.scale-1)>this.options.threshold||this.state&di)},emit:function(t){if(this._super.emit.call(this,t),1!==t.scale){var e=t.scale<1?"in":"out";this.manager.emit(this.options.event+e,t)}}}),u(oe,Q,{defaults:{event:"press",pointers:1,time:500,threshold:5},getTouchAction:function(){return[si]},process:function(t){var e=this.options,i=t.pointers.length===e.pointers,s=t.distancee.time;if(this._input=t,!s||!i||t.eventType&(Le|ke)&&!o)this.reset();else if(t.eventType&Te)this.reset(),this._timer=h(function(){this.state=pi,this.tryEmit()},e.time,this);else if(t.eventType&Le)return pi;return mi},reset:function(){clearTimeout(this._timer)},emit:function(t){this.state===pi&&(t&&t.eventType&Le?this.manager.emit(this.options.event+"up",t):(this._input.timeStamp=ve(),this.manager.emit(this.options.event,this._input)))}}),u(ne,ee,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[ni]},attrTest:function(t){return this._super.attrTest.call(this,t)&&(Math.abs(t.rotation)>this.options.threshold||this.state&di)}}),u(re,ee,{defaults:{event:"swipe",threshold:10,velocity:.65,direction:Re|Fe,pointers:1},getTouchAction:function(){return ie.prototype.getTouchAction.call(this)},attrTest:function(t){var e,i=this.options.direction;return i&(Re|Fe)?e=t.velocity:i&Re?e=t.velocityX:i&Fe&&(e=t.velocityY),this._super.attrTest.call(this,t)&&i&t.direction&&t.distance>this.options.threshold&&ge(e)>this.options.velocity&&t.eventType&Le},emit:function(t){var e=J(t.direction);e&&this.manager.emit(this.options.event+e,t),this.manager.emit(this.options.event,t)}}),u(ae,Q,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:2,posThreshold:10},getTouchAction:function(){return[oi]},process:function(t){var e=this.options,i=t.pointers.length===e.pointers,s=t.distancet&&s>o;)o%3==0?(this.forceAggregateHubs(!0),this.normalizeClusterLevels()):this.increaseClusterLevel(),i=this.nodeIndices.length,o+=1;o>0&&1==e&&this.repositionNodes(),this._updateCalculationNodes()},e.openCluster=function(t){var e=this.moving;if(t.clusterSize>this.constants.clustering.sectorThreshold&&this._nodeInActiveArea(t)&&("default"!=this._sector()||1!=this.nodeIndices.length)){this._addSector(t);for(var i=0;this.nodeIndices.lengthi;)this.decreaseClusterLevel(),i+=1}else this._expandClusterNode(t,!1,!0),this._updateNodeIndexList(),this._updateDynamicEdges(),this._updateCalculationNodes(),this.updateLabels();this.moving!=e&&this.start()},e.updateClustersDefault=function(){1==this.constants.clustering.enabled&&this.updateClusters(0,!1,!1)},e.increaseClusterLevel=function(){this.updateClusters(-1,!1,!0)},e.decreaseClusterLevel=function(){this.updateClusters(1,!1,!0)},e.updateClusters=function(t,e,i,s){var o=this.moving,n=this.nodeIndices.length;this.previousScale>this.scale&&0==t&&this._collapseSector(),this.previousScale>this.scale||-1==t?this._formClusters(i):(this.previousScalethis.scale||-1==t)&&(this._aggregateHubs(i),this._updateNodeIndexList()),(this.previousScale>this.scale||-1==t)&&(this.handleChains(),this._updateNodeIndexList()),this.previousScale=this.scale,this._updateDynamicEdges(),this.updateLabels(),this.nodeIndices.lengththis.constants.clustering.chainThreshold&&this._reduceAmountOfChains(1-this.constants.clustering.chainThreshold/t)},e._aggregateHubs=function(t){this._getHubSize(),this._formClustersByHub(t,!1)},e.forceAggregateHubs=function(t){var e=this.moving,i=this.nodeIndices.length;this._aggregateHubs(!0),this._updateNodeIndexList(),this._updateDynamicEdges(),this.updateLabels(),this.nodeIndices.length!=i&&(this.clusterSession+=1),(0==t||void 0===t)&&this.moving!=e&&this.start()},e._openClustersBySize=function(){for(var t in this.nodes)if(this.nodes.hasOwnProperty(t)){var e=this.nodes[t];1==e.inView()&&(e.width*this.scale>this.constants.clustering.screenSizeThreshold*this.frame.canvas.clientWidth||e.height*this.scale>this.constants.clustering.screenSizeThreshold*this.frame.canvas.clientHeight)&&this.openCluster(e)}},e._openClusters=function(t,e){for(var i=0;i1&&(t.clusterSizei)){var r=n.from,a=n.to;n.to.options.mass>n.from.options.mass&&(r=n.to,a=n.from),1==a.dynamicEdgesLength?this._addToCluster(r,a,!1):1==r.dynamicEdgesLength&&this._addToCluster(a,r,!1)}}},e._forceClustersByZoom=function(){for(var t in this.nodes)if(this.nodes.hasOwnProperty(t)){var e=this.nodes[t];if(1==e.dynamicEdgesLength&&0!=e.dynamicEdges.length){var i=e.dynamicEdges[0],s=i.toId==e.id?this.nodes[i.fromId]:this.nodes[i.toId];e.id!=s.id&&(s.options.mass>e.options.mass?this._addToCluster(s,e,!0):this._addToCluster(e,s,!0))}}},e._clusterToSmallestNeighbour=function(t){for(var e=-1,i=null,s=0;so.clusterSessions.length&&(e=o.clusterSessions.length,i=o)}null!=o&&void 0!==this.nodes[o.id]&&this._addToCluster(o,t,!0)},e._formClustersByHub=function(t,e){for(var i in this.nodes)this.nodes.hasOwnProperty(i)&&this._formClusterFromHub(this.nodes[i],t,e)},e._formClusterFromHub=function(t,e,i,s){if(void 0===s&&(s=0),t.dynamicEdgesLength>=this.hubThreshold&&0==i||t.dynamicEdgesLength==this.hubThreshold&&1==i){for(var o,n,r,a=this.constants.clustering.clusterEdgeThreshold/this.scale,h=!1,d=[],l=t.dynamicEdges.length,c=0;l>c;c++)d.push(t.dynamicEdges[c].id);if(0==e)for(h=!1,c=0;l>c;c++){var p=this.edges[d[c]];if(void 0!==p&&p.connected&&p.toId!=p.fromId&&(o=p.to.x-p.from.x,n=p.to.y-p.from.y,r=Math.sqrt(o*o+n*n),a>r)){h=!0;break}}if(!e&&h||e)for(c=0;l>c;c++)if(p=this.edges[d[c]],void 0!==p){var u=this.nodes[p.fromId==t.id?p.toId:p.fromId];u.dynamicEdges.length<=this.hubThreshold+s&&u.id!=t.id&&this._addToCluster(t,u,e)}}},e._addToCluster=function(t,e,i){t.containedNodes[e.id]=e;for(var s=0;s1)for(var s=0;s1&&(e.label="[".concat(String(e.clusterSize),"]"))}for(t in this.nodes)this.nodes.hasOwnProperty(t)&&(e=this.nodes[t],1==e.clusterSize&&(e.label=void 0!==e.originalLabel?e.originalLabel:String(e.id)))},e.normalizeClusterLevels=function(){var t,e=0,i=1e9,s=0;for(t in this.nodes)this.nodes.hasOwnProperty(t)&&(s=this.nodes[t].clusterSessions.length,s>e&&(e=s),i>s&&(i=s));if(e-i>this.constants.clustering.clusterLevelDifference){var o=this.nodeIndices.length,n=e-this.constants.clustering.clusterLevelDifference;for(t in this.nodes)this.nodes.hasOwnProperty(t)&&this.nodes[t].clusterSessions.lengths&&(s=n.dynamicEdgesLength),t+=n.dynamicEdgesLength,e+=Math.pow(n.dynamicEdgesLength,2),i+=1}t/=i,e/=i;var r=e-Math.pow(t,2),a=Math.sqrt(r);this.hubThreshold=Math.floor(t+2*a),this.hubThreshold>s&&(this.hubThreshold=s)},e._reduceAmountOfChains=function(t){this.hubThreshold=2;var e=Math.floor(this.nodeIndices.length*t);for(var i in this.nodes)this.nodes.hasOwnProperty(i)&&2==this.nodes[i].dynamicEdgesLength&&this.nodes[i].dynamicEdges.length>=2&&e>0&&(this._formClusterFromHub(this.nodes[i],!0,!0,1),e-=1)},e._getChainFraction=function(){var t=0,e=0;for(var i in this.nodes)this.nodes.hasOwnProperty(i)&&(2==this.nodes[i].dynamicEdgesLength&&this.nodes[i].dynamicEdges.length>=2&&(t+=1),e+=1);return t/e}},function(t,e,i){var s=i(1),o=i(40);e._putDataInSector=function(){this.sectors.active[this._sector()].nodes=this.nodes,this.sectors.active[this._sector()].edges=this.edges,this.sectors.active[this._sector()].nodeIndices=this.nodeIndices},e._switchToSector=function(t,e){void 0===e||"active"==e?this._switchToActiveSector(t):this._switchToFrozenSector(t)},e._switchToActiveSector=function(t){this.nodeIndices=this.sectors.active[t].nodeIndices,this.nodes=this.sectors.active[t].nodes,this.edges=this.sectors.active[t].edges},e._switchToSupportSector=function(){this.nodeIndices=this.sectors.support.nodeIndices,this.nodes=this.sectors.support.nodes,this.edges=this.sectors.support.edges},e._switchToFrozenSector=function(t){this.nodeIndices=this.sectors.frozen[t].nodeIndices,this.nodes=this.sectors.frozen[t].nodes,this.edges=this.sectors.frozen[t].edges},e._loadLatestSector=function(){this._switchToSector(this._sector())},e._sector=function(){return this.activeSector[this.activeSector.length-1]},e._previousSector=function(){if(this.activeSector.length>1)return this.activeSector[this.activeSector.length-2];throw new TypeError("there are not enough sectors in the this.activeSector array.")},e._setActiveSector=function(t){this.activeSector.push(t)},e._forgetLastSector=function(){this.activeSector.pop()},e._createNewSector=function(t){this.sectors.active[t]={nodes:{},edges:{},nodeIndices:[],formationScale:this.scale,drawingNode:void 0},this.sectors.active[t].drawingNode=new o({id:t,color:{background:"#eaefef",border:"495c5e"}},{},{},this.constants),this.sectors.active[t].drawingNode.clusterSize=2},e._deleteActiveSector=function(t){delete this.sectors.active[t]},e._deleteFrozenSector=function(t){delete this.sectors.frozen[t]},e._freezeSector=function(t){this.sectors.frozen[t]=this.sectors.active[t],this._deleteActiveSector(t)},e._activateSector=function(t){this.sectors.active[t]=this.sectors.frozen[t],this._deleteFrozenSector(t)},e._mergeThisWithFrozen=function(t){for(var e in this.nodes)this.nodes.hasOwnProperty(e)&&(this.sectors.frozen[t].nodes[e]=this.nodes[e]);for(var i in this.edges)this.edges.hasOwnProperty(i)&&(this.sectors.frozen[t].edges[i]=this.edges[i]);for(var s=0;s1?this[t](o[0],o[1]):this[t](e))}return this._loadLatestSector(),i},e._doInSupportSector=function(t,e){var i=!1;if(void 0===e)this._switchToSupportSector(),i=this[t]();else{this._switchToSupportSector();var s=Array.prototype.splice.call(arguments,1);i=s.length>1?this[t](s[0],s[1]):this[t](e)}return this._loadLatestSector(),i},e._doInAllFrozenSectors=function(t,e){if(void 0===e)for(var i in this.sectors.frozen)this.sectors.frozen.hasOwnProperty(i)&&(this._switchToFrozenSector(i),this[t]());else for(var i in this.sectors.frozen)if(this.sectors.frozen.hasOwnProperty(i)){this._switchToFrozenSector(i);var s=Array.prototype.splice.call(arguments,1);s.length>1?this[t](s[0],s[1]):this[t](e)}this._loadLatestSector()},e._doInAllSectors=function(t,e){var i=Array.prototype.splice.call(arguments,1);void 0===e?(this._doInAllActiveSectors(t),this._doInAllFrozenSectors(t)):i.length>1?(this._doInAllActiveSectors(t,i[0],i[1]),this._doInAllFrozenSectors(t,i[0],i[1])):(this._doInAllActiveSectors(t,e),this._doInAllFrozenSectors(t,e))},e._clearNodeIndexList=function(){var t=this._sector();this.sectors.active[t].nodeIndices=[],this.nodeIndices=this.sectors.active[t].nodeIndices},e._drawSectorNodes=function(t,e){var i,s=1e9,o=-1e9,n=1e9,r=-1e9;for(var a in this.sectors[e])if(this.sectors[e].hasOwnProperty(a)&&void 0!==this.sectors[e][a].drawingNode){this._switchToSector(a,e),s=1e9,o=-1e9,n=1e9,r=-1e9;for(var h in this.nodes)this.nodes.hasOwnProperty(h)&&(i=this.nodes[h],i.resize(t),n>i.x-.5*i.width&&(n=i.x-.5*i.width),ri.y-.5*i.height&&(s=i.y-.5*i.height),o0?this.nodes[i[i.length-1]]:null},e._getEdgesOverlappingWith=function(t,e){var i=this.edges;for(var s in i)i.hasOwnProperty(s)&&i[s].isOverlappingWith(t)&&e.push(s)},e._getAllEdgesOverlappingWith=function(t){var e=[];return this._doInAllActiveSectors("_getEdgesOverlappingWith",t,e),e},e._getEdgeAt=function(t){var e=this._pointerToPositionObject(t),i=this._getAllEdgesOverlappingWith(e);return i.length>0?this.edges[i[i.length-1]]:null},e._addToSelection=function(t){t instanceof s?this.selectionObj.nodes[t.id]=t:this.selectionObj.edges[t.id]=t},e._addToHover=function(t){t instanceof s?this.hoverObj.nodes[t.id]=t:this.hoverObj.edges[t.id]=t},e._removeFromSelection=function(t){t instanceof s?delete this.selectionObj.nodes[t.id]:delete this.selectionObj.edges[t.id]},e._unselectAll=function(t){void 0===t&&(t=!1);for(var e in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(e)&&this.selectionObj.nodes[e].unselect();for(var i in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(i)&&this.selectionObj.edges[i].unselect();this.selectionObj={nodes:{},edges:{}},0==t&&this.emit("select",this.getSelection())},e._unselectClusters=function(t){void 0===t&&(t=!1);for(var e in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(e)&&this.selectionObj.nodes[e].clusterSize>1&&(this.selectionObj.nodes[e].unselect(),this._removeFromSelection(this.selectionObj.nodes[e]));0==t&&this.emit("select",this.getSelection())},e._getSelectedNodeCount=function(){var t=0;for(var e in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(e)&&(t+=1);return t},e._getSelectedNode=function(){for(var t in this.selectionObj.nodes)if(this.selectionObj.nodes.hasOwnProperty(t))return this.selectionObj.nodes[t];return null},e._getSelectedEdge=function(){for(var t in this.selectionObj.edges)if(this.selectionObj.edges.hasOwnProperty(t))return this.selectionObj.edges[t];return null},e._getSelectedEdgeCount=function(){var t=0;for(var e in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(e)&&(t+=1);return t},e._getSelectedObjectCount=function(){var t=0;for(var e in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(e)&&(t+=1);for(var i in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(i)&&(t+=1);return t},e._selectionIsEmpty=function(){for(var t in this.selectionObj.nodes)if(this.selectionObj.nodes.hasOwnProperty(t))return!1;for(var e in this.selectionObj.edges)if(this.selectionObj.edges.hasOwnProperty(e))return!1;return!0},e._clusterInSelection=function(){for(var t in this.selectionObj.nodes)if(this.selectionObj.nodes.hasOwnProperty(t)&&this.selectionObj.nodes[t].clusterSize>1)return!0;return!1},e._selectConnectedEdges=function(t){for(var e=0;ei;i++){o=t[i];var n=this.nodes[o];if(!n)throw new RangeError('Node with id "'+o+'" not found');this._selectObject(n,!0,!0,e,!0)}this.redraw()},e.selectEdges=function(t){var e,i,s;if(!t||void 0==t.length)throw"Selection must be an array with ids";for(this._unselectAll(!0),e=0,i=t.length;i>e;e++){s=t[e];var o=this.edges[s];if(!o)throw new RangeError('Edge with id "'+s+'" not found');this._selectObject(o,!0,!0,!1,!0)}this.redraw()},e._updateSelection=function(){for(var t in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(t)&&(this.nodes.hasOwnProperty(t)||delete this.selectionObj.nodes[t]);for(var e in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(e)&&(this.edges.hasOwnProperty(e)||delete this.selectionObj.edges[e])}},function(t,e,i){var s=i(1),o=i(40),n=i(37);e._clearManipulatorBar=function(){for(;this.manipulationDiv.hasChildNodes();)this.manipulationDiv.removeChild(this.manipulationDiv.firstChild);this.manipulationDOM={},this._manipulationReleaseOverload=function(){},delete this.sectors.support.nodes.targetNode,delete this.sectors.support.nodes.targetViaNode,this.controlNodesActive=!1},e._restoreOverloadedFunctions=function(){for(var t in this.cachedFunctions)this.cachedFunctions.hasOwnProperty(t)&&(this[t]=this.cachedFunctions[t])},e._toggleEditMode=function(){this.editMode=!this.editMode;var t=this.manipulationDiv,e=this.closeDiv,i=this.editModeDiv;1==this.editMode?(t.style.display="block",e.style.display="block",i.style.display="none",e.onclick=this._toggleEditMode.bind(this)):(t.style.display="none",e.style.display="none",i.style.display="block",e.onclick=null),this._createManipulatorBar()},e._createManipulatorBar=function(){this.boundFunction&&this.off("select",this.boundFunction);var t=this.constants.locales[this.constants.locale];if(void 0!==this.edgeBeingEdited&&(this.edgeBeingEdited._disableControlNodes(),this.edgeBeingEdited=void 0,this.selectedControlNode=null,this.controlNodesActive=!1,this._redraw()),this._restoreOverloadedFunctions(),this.freezeSimulation=!1,this.blockConnectingEdgeSelection=!1,this.forceAppendSelection=!1,this.manipulationDOM={},1==this.editMode){for(;this.manipulationDiv.hasChildNodes();)this.manipulationDiv.removeChild(this.manipulationDiv.firstChild);this.manipulationDOM.addNodeSpan=document.createElement("span"),this.manipulationDOM.addNodeSpan.className="network-manipulationUI add",this.manipulationDOM.addNodeLabelSpan=document.createElement("span"),this.manipulationDOM.addNodeLabelSpan.className="network-manipulationLabel",this.manipulationDOM.addNodeLabelSpan.innerHTML=t.addNode,this.manipulationDOM.addNodeSpan.appendChild(this.manipulationDOM.addNodeLabelSpan),this.manipulationDOM.seperatorLineDiv1=document.createElement("div"),this.manipulationDOM.seperatorLineDiv1.className="network-seperatorLine",this.manipulationDOM.addEdgeSpan=document.createElement("span"),this.manipulationDOM.addEdgeSpan.className="network-manipulationUI connect",this.manipulationDOM.addEdgeLabelSpan=document.createElement("span"),this.manipulationDOM.addEdgeLabelSpan.className="network-manipulationLabel",this.manipulationDOM.addEdgeLabelSpan.innerHTML=t.addEdge,this.manipulationDOM.addEdgeSpan.appendChild(this.manipulationDOM.addEdgeLabelSpan),this.manipulationDiv.appendChild(this.manipulationDOM.addNodeSpan),this.manipulationDiv.appendChild(this.manipulationDOM.seperatorLineDiv1),this.manipulationDiv.appendChild(this.manipulationDOM.addEdgeSpan),1==this._getSelectedNodeCount()&&this.triggerFunctions.edit?(this.manipulationDOM.seperatorLineDiv2=document.createElement("div"),this.manipulationDOM.seperatorLineDiv2.className="network-seperatorLine",this.manipulationDOM.editNodeSpan=document.createElement("span"),this.manipulationDOM.editNodeSpan.className="network-manipulationUI edit",this.manipulationDOM.editNodeLabelSpan=document.createElement("span"),this.manipulationDOM.editNodeLabelSpan.className="network-manipulationLabel",this.manipulationDOM.editNodeLabelSpan.innerHTML=t.editNode,this.manipulationDOM.editNodeSpan.appendChild(this.manipulationDOM.editNodeLabelSpan),this.manipulationDiv.appendChild(this.manipulationDOM.seperatorLineDiv2),this.manipulationDiv.appendChild(this.manipulationDOM.editNodeSpan)):1==this._getSelectedEdgeCount()&&0==this._getSelectedNodeCount()&&(this.manipulationDOM.seperatorLineDiv3=document.createElement("div"),this.manipulationDOM.seperatorLineDiv3.className="network-seperatorLine",this.manipulationDOM.editEdgeSpan=document.createElement("span"),this.manipulationDOM.editEdgeSpan.className="network-manipulationUI edit",this.manipulationDOM.editEdgeLabelSpan=document.createElement("span"),this.manipulationDOM.editEdgeLabelSpan.className="network-manipulationLabel",this.manipulationDOM.editEdgeLabelSpan.innerHTML=t.editEdge,this.manipulationDOM.editEdgeSpan.appendChild(this.manipulationDOM.editEdgeLabelSpan),this.manipulationDiv.appendChild(this.manipulationDOM.seperatorLineDiv3),this.manipulationDiv.appendChild(this.manipulationDOM.editEdgeSpan)),0==this._selectionIsEmpty()&&(this.manipulationDOM.seperatorLineDiv4=document.createElement("div"),this.manipulationDOM.seperatorLineDiv4.className="network-seperatorLine",this.manipulationDOM.deleteSpan=document.createElement("span"),this.manipulationDOM.deleteSpan.className="network-manipulationUI delete",this.manipulationDOM.deleteLabelSpan=document.createElement("span"),this.manipulationDOM.deleteLabelSpan.className="network-manipulationLabel",this.manipulationDOM.deleteLabelSpan.innerHTML=t.del,this.manipulationDOM.deleteSpan.appendChild(this.manipulationDOM.deleteLabelSpan),this.manipulationDiv.appendChild(this.manipulationDOM.seperatorLineDiv4),this.manipulationDiv.appendChild(this.manipulationDOM.deleteSpan)),this.manipulationDOM.addNodeSpan.onclick=this._createAddNodeToolbar.bind(this),this.manipulationDOM.addEdgeSpan.onclick=this._createAddEdgeToolbar.bind(this),1==this._getSelectedNodeCount()&&this.triggerFunctions.edit?this.manipulationDOM.editNodeSpan.onclick=this._editNode.bind(this):1==this._getSelectedEdgeCount()&&0==this._getSelectedNodeCount()&&(this.manipulationDOM.editEdgeSpan.onclick=this._createEditEdgeToolbar.bind(this)),0==this._selectionIsEmpty()&&(this.manipulationDOM.deleteSpan.onclick=this._deleteSelected.bind(this)),this.closeDiv.onclick=this._toggleEditMode.bind(this),this.boundFunction=this._createManipulatorBar.bind(this),this.on("select",this.boundFunction)}else{for(;this.editModeDiv.hasChildNodes();)this.editModeDiv.removeChild(this.editModeDiv.firstChild);this.manipulationDOM.editModeSpan=document.createElement("span"),this.manipulationDOM.editModeSpan.className="network-manipulationUI edit editmode",this.manipulationDOM.editModeLabelSpan=document.createElement("span"),this.manipulationDOM.editModeLabelSpan.className="network-manipulationLabel",this.manipulationDOM.editModeLabelSpan.innerHTML=t.edit,this.manipulationDOM.editModeSpan.appendChild(this.manipulationDOM.editModeLabelSpan),this.editModeDiv.appendChild(this.manipulationDOM.editModeSpan),this.manipulationDOM.editModeSpan.onclick=this._toggleEditMode.bind(this)}},e._createAddNodeToolbar=function(){this._clearManipulatorBar(),this.boundFunction&&this.off("select",this.boundFunction);var t=this.constants.locales[this.constants.locale];this.manipulationDOM={},this.manipulationDOM.backSpan=document.createElement("span"),this.manipulationDOM.backSpan.className="network-manipulationUI back",this.manipulationDOM.backLabelSpan=document.createElement("span"),this.manipulationDOM.backLabelSpan.className="network-manipulationLabel",this.manipulationDOM.backLabelSpan.innerHTML=t.back,this.manipulationDOM.backSpan.appendChild(this.manipulationDOM.backLabelSpan),this.manipulationDOM.seperatorLineDiv1=document.createElement("div"),this.manipulationDOM.seperatorLineDiv1.className="network-seperatorLine",this.manipulationDOM.descriptionSpan=document.createElement("span"),this.manipulationDOM.descriptionSpan.className="network-manipulationUI none",this.manipulationDOM.descriptionLabelSpan=document.createElement("span"),this.manipulationDOM.descriptionLabelSpan.className="network-manipulationLabel",this.manipulationDOM.descriptionLabelSpan.innerHTML=t.addDescription,this.manipulationDOM.descriptionSpan.appendChild(this.manipulationDOM.descriptionLabelSpan),this.manipulationDiv.appendChild(this.manipulationDOM.backSpan),this.manipulationDiv.appendChild(this.manipulationDOM.seperatorLineDiv1),this.manipulationDiv.appendChild(this.manipulationDOM.descriptionSpan),this.manipulationDOM.backSpan.onclick=this._createManipulatorBar.bind(this),this.boundFunction=this._addNode.bind(this),this.on("select",this.boundFunction)},e._createAddEdgeToolbar=function(){this._clearManipulatorBar(),this._unselectAll(!0),this.freezeSimulation=!0;var t=this.constants.locales[this.constants.locale];this.boundFunction&&this.off("select",this.boundFunction),this._unselectAll(),this.forceAppendSelection=!1,this.blockConnectingEdgeSelection=!0,this.manipulationDOM={},this.manipulationDOM.backSpan=document.createElement("span"),this.manipulationDOM.backSpan.className="network-manipulationUI back",this.manipulationDOM.backLabelSpan=document.createElement("span"),this.manipulationDOM.backLabelSpan.className="network-manipulationLabel",this.manipulationDOM.backLabelSpan.innerHTML=t.back,this.manipulationDOM.backSpan.appendChild(this.manipulationDOM.backLabelSpan),this.manipulationDOM.seperatorLineDiv1=document.createElement("div"),this.manipulationDOM.seperatorLineDiv1.className="network-seperatorLine",this.manipulationDOM.descriptionSpan=document.createElement("span"),this.manipulationDOM.descriptionSpan.className="network-manipulationUI none",this.manipulationDOM.descriptionLabelSpan=document.createElement("span"),this.manipulationDOM.descriptionLabelSpan.className="network-manipulationLabel",this.manipulationDOM.descriptionLabelSpan.innerHTML=t.edgeDescription,this.manipulationDOM.descriptionSpan.appendChild(this.manipulationDOM.descriptionLabelSpan),this.manipulationDiv.appendChild(this.manipulationDOM.backSpan),this.manipulationDiv.appendChild(this.manipulationDOM.seperatorLineDiv1),this.manipulationDiv.appendChild(this.manipulationDOM.descriptionSpan),this.manipulationDOM.backSpan.onclick=this._createManipulatorBar.bind(this),this.boundFunction=this._handleConnect.bind(this),this.on("select",this.boundFunction),this.cachedFunctions._handleTouch=this._handleTouch,this.cachedFunctions._manipulationReleaseOverload=this._manipulationReleaseOverload,this.cachedFunctions._handleDragStart=this._handleDragStart,this.cachedFunctions._handleDragEnd=this._handleDragEnd,this._handleTouch=this._handleConnect,this._manipulationReleaseOverload=function(){},this._handleDragStart=function(){},this._handleDragEnd=this._finishConnect,this._redraw()},e._createEditEdgeToolbar=function(){this._clearManipulatorBar(),this.controlNodesActive=!0,this.boundFunction&&this.off("select",this.boundFunction),this.edgeBeingEdited=this._getSelectedEdge(),this.edgeBeingEdited._enableControlNodes();var t=this.constants.locales[this.constants.locale];this.manipulationDOM={},this.manipulationDOM.backSpan=document.createElement("span"),this.manipulationDOM.backSpan.className="network-manipulationUI back",this.manipulationDOM.backLabelSpan=document.createElement("span"),this.manipulationDOM.backLabelSpan.className="network-manipulationLabel",this.manipulationDOM.backLabelSpan.innerHTML=t.back,this.manipulationDOM.backSpan.appendChild(this.manipulationDOM.backLabelSpan),this.manipulationDOM.seperatorLineDiv1=document.createElement("div"),this.manipulationDOM.seperatorLineDiv1.className="network-seperatorLine",this.manipulationDOM.descriptionSpan=document.createElement("span"),this.manipulationDOM.descriptionSpan.className="network-manipulationUI none",this.manipulationDOM.descriptionLabelSpan=document.createElement("span"),this.manipulationDOM.descriptionLabelSpan.className="network-manipulationLabel",this.manipulationDOM.descriptionLabelSpan.innerHTML=t.editEdgeDescription,this.manipulationDOM.descriptionSpan.appendChild(this.manipulationDOM.descriptionLabelSpan),this.manipulationDiv.appendChild(this.manipulationDOM.backSpan),this.manipulationDiv.appendChild(this.manipulationDOM.seperatorLineDiv1),this.manipulationDiv.appendChild(this.manipulationDOM.descriptionSpan),this.manipulationDOM.backSpan.onclick=this._createManipulatorBar.bind(this),this.cachedFunctions._handleTouch=this._handleTouch,this.cachedFunctions._manipulationReleaseOverload=this._manipulationReleaseOverload,this.cachedFunctions._handleTap=this._handleTap,this.cachedFunctions._handleDragStart=this._handleDragStart,this.cachedFunctions._handleOnDrag=this._handleOnDrag,this._handleTouch=this._selectControlNode,this._handleTap=function(){},this._handleOnDrag=this._controlNodeDrag,this._handleDragStart=function(){},this._manipulationReleaseOverload=this._releaseControlNode,this._redraw() +},e._selectControlNode=function(t){this.edgeBeingEdited.controlNodes.from.unselect(),this.edgeBeingEdited.controlNodes.to.unselect(),this.selectedControlNode=this.edgeBeingEdited._getSelectedControlNode(this._XconvertDOMtoCanvas(t.x),this._YconvertDOMtoCanvas(t.y)),null!==this.selectedControlNode&&(this.selectedControlNode.select(),this.freezeSimulation=!0),this._redraw()},e._controlNodeDrag=function(t){var e=this._getPointer(t.gesture.center);null!==this.selectedControlNode&&void 0!==this.selectedControlNode&&(this.selectedControlNode.x=this._XconvertDOMtoCanvas(e.x),this.selectedControlNode.y=this._YconvertDOMtoCanvas(e.y)),this._redraw()},e._releaseControlNode=function(t){var e=this._getNodeAt(t);null!==e?(1==this.edgeBeingEdited.controlNodes.from.selected&&(this._editEdge(e.id,this.edgeBeingEdited.to.id),this.edgeBeingEdited.controlNodes.from.unselect()),1==this.edgeBeingEdited.controlNodes.to.selected&&(this._editEdge(this.edgeBeingEdited.from.id,e.id),this.edgeBeingEdited.controlNodes.to.unselect())):this.edgeBeingEdited._restoreControlNodes(),this.freezeSimulation=!1,this._redraw()},e._handleConnect=function(t){if(0==this._getSelectedNodeCount()){var e=this._getNodeAt(t);if(null!=e)if(e.clusterSize>1)alert(this.constants.locales[this.constants.locale].createEdgeError);else{this._selectObject(e,!1);var i=this.sectors.support.nodes;i.targetNode=new o({id:"targetNode"},{},{},this.constants);var s=i.targetNode;s.x=e.x,s.y=e.y,this.edges.connectionEdge=new n({id:"connectionEdge",from:e.id,to:s.id},this,this.constants);var r=this.edges.connectionEdge;r.from=e,r.connected=!0,r.options.smoothCurves={enabled:!0,dynamic:!1,type:"continuous",roundness:.5},r.selected=!0,r.to=s,this.cachedFunctions._handleOnDrag=this._handleOnDrag,this._handleOnDrag=function(t){var e=this._getPointer(t.gesture.center),i=this.edges.connectionEdge;i.to.x=this._XconvertDOMtoCanvas(e.x),i.to.y=this._YconvertDOMtoCanvas(e.y)},this.moving=!0,this.start()}}},e._finishConnect=function(t){if(1==this._getSelectedNodeCount()){var e=this._getPointer(t.gesture.center);this._handleOnDrag=this.cachedFunctions._handleOnDrag,delete this.cachedFunctions._handleOnDrag;var i=this.edges.connectionEdge.fromId;delete this.edges.connectionEdge,delete this.sectors.support.nodes.targetNode,delete this.sectors.support.nodes.targetViaNode;var s=this._getNodeAt(e);null!=s&&(s.clusterSize>1?alert(this.constants.locales[this.constants.locale].createEdgeError):(this._createEdge(i,s.id),this._createManipulatorBar())),this._unselectAll()}},e._addNode=function(){if(this._selectionIsEmpty()&&1==this.editMode){var t=this._pointerToPositionObject(this.pointerPosition),e={id:s.randomUUID(),x:t.left,y:t.top,label:"new",allowedToMoveX:!0,allowedToMoveY:!0};if(this.triggerFunctions.add){if(2!=this.triggerFunctions.add.length)throw new Error("The function for add does not support two arguments (data,callback)");var i=this;this.triggerFunctions.add(e,function(t){i.nodesData.add(t),i._createManipulatorBar(),i.moving=!0,i.start()})}else this.nodesData.add(e),this._createManipulatorBar(),this.moving=!0,this.start()}},e._createEdge=function(t,e){if(1==this.editMode){var i={from:t,to:e};if(this.triggerFunctions.connect){if(2!=this.triggerFunctions.connect.length)throw new Error("The function for connect does not support two arguments (data,callback)");var s=this;this.triggerFunctions.connect(i,function(t){s.edgesData.add(t),s.moving=!0,s.start()})}else this.edgesData.add(i),this.moving=!0,this.start()}},e._editEdge=function(t,e){if(1==this.editMode){var i={id:this.edgeBeingEdited.id,from:t,to:e};if(this.triggerFunctions.editEdge){if(2!=this.triggerFunctions.editEdge.length)throw new Error("The function for edit does not support two arguments (data, callback)");var s=this;this.triggerFunctions.editEdge(i,function(t){s.edgesData.update(t),s.moving=!0,s.start()})}else this.edgesData.update(i),this.moving=!0,this.start()}},e._editNode=function(){if(!this.triggerFunctions.edit||1!=this.editMode)throw new Error("No edit function has been bound to this button");var t=this._getSelectedNode(),e={id:t.id,label:t.label,group:t.options.group,shape:t.options.shape,color:{background:t.options.color.background,border:t.options.color.border,highlight:{background:t.options.color.highlight.background,border:t.options.color.highlight.border}}};if(2!=this.triggerFunctions.edit.length)throw new Error("The function for edit does not support two arguments (data, callback)");var i=this;this.triggerFunctions.edit(e,function(t){i.nodesData.update(t),i._createManipulatorBar(),i.moving=!0,i.start()})},e._deleteSelected=function(){if(!this._selectionIsEmpty()&&1==this.editMode)if(this._clusterInSelection())alert(this.constants.locales[this.constants.locale].deleteClusterError);else{var t=this.getSelectedNodes(),e=this.getSelectedEdges();if(this.triggerFunctions.del){var i=this,s={nodes:t,edges:e};if(2!=this.triggerFunctions.del.length)throw new Error("The function for delete does not support two arguments (data, callback)");this.triggerFunctions.del(s,function(t){i.edgesData.remove(t.edges),i.nodesData.remove(t.nodes),i._unselectAll(),i.moving=!0,i.start()})}else this.edgesData.remove(e),this.nodesData.remove(t),this._unselectAll(),this.moving=!0,this.start()}}},function(t,e,i){var s=(i(1),i(45));e._cleanNavigation=function(){if(0!=this.navigationHammers.existing.length){for(var t=0;t0){this.constants.hierarchicalLayout.levelSeparation="RL"==this.constants.hierarchicalLayout.direction||"DU"==this.constants.hierarchicalLayout.direction?this.constants.hierarchicalLayout.levelSeparation<0?this.constants.hierarchicalLayout.levelSeparation:-1*this.constants.hierarchicalLayout.levelSeparation:Math.abs(this.constants.hierarchicalLayout.levelSeparation),"RL"==this.constants.hierarchicalLayout.direction||"LR"==this.constants.hierarchicalLayout.direction?1==this.constants.smoothCurves.enabled&&(this.constants.smoothCurves.type="vertical"):1==this.constants.smoothCurves.enabled&&(this.constants.smoothCurves.type="horizontal");var t,e,i=0,s=!1,o=!1;for(e in this.nodes)this.nodes.hasOwnProperty(e)&&(t=this.nodes[e],-1!=t.level?s=!0:o=!0,is&&(n.xFixed=!1,n.x=i[n.level].minPos,r=!0):n.yFixed&&n.level>s&&(n.yFixed=!1,n.y=i[n.level].minPos,r=!0),1==r&&(i[n.level].minPos+=i[n.level].nodeSpacing,n.edges.length>1&&this._placeBranchNodes(n.edges,n.id,i,n.level))}},e._setLevel=function(t,e,i){for(var s=0;st)&&(o.level=t,o.edges.length>1&&this._setLevel(t+1,o.edges,o.id))}},e._setLevelDirected=function(t,e,i){this.nodes[i].hierarchyEnumerated=!0;for(var s=0;s1&&o.hierarchyEnumerated===!1&&this._setLevelDirected(o.level,o.edges,o.id)}},e._restoreNodes=function(){for(var t in this.nodes)this.nodes.hasOwnProperty(t)&&(this.nodes[t].xFixed=!1,this.nodes[t].yFixed=!1)}},function(t,e,i){function s(){this.constants.smoothCurves.enabled=!this.constants.smoothCurves.enabled;var t=document.getElementById("graph_toggleSmooth");t.style.background=1==this.constants.smoothCurves.enabled?"#A4FF56":"#FF8532",this._configureSmoothCurves(!1)}function o(){for(var t in this.calculationNodes)this.calculationNodes.hasOwnProperty(t)&&(this.calculationNodes[t].vx=0,this.calculationNodes[t].vy=0,this.calculationNodes[t].fx=0,this.calculationNodes[t].fy=0);1==this.constants.hierarchicalLayout.enabled?(this._setupHierarchicalLayout(),a.call(this,"graph_H_nd",1,"physics_hierarchicalRepulsion_nodeDistance"),a.call(this,"graph_H_cg",1,"physics_centralGravity"),a.call(this,"graph_H_sc",1,"physics_springConstant"),a.call(this,"graph_H_sl",1,"physics_springLength"),a.call(this,"graph_H_damp",1,"physics_damping")):this.repositionNodes(),this.moving=!0,this.start()}function n(){var t="No options are required, default values used.",e=[],i=document.getElementById("graph_physicsMethod1"),s=document.getElementById("graph_physicsMethod2");if(1==i.checked){if(this.constants.physics.barnesHut.gravitationalConstant!=this.backupConstants.physics.barnesHut.gravitationalConstant&&e.push("gravitationalConstant: "+this.constants.physics.barnesHut.gravitationalConstant),this.constants.physics.centralGravity!=this.backupConstants.physics.barnesHut.centralGravity&&e.push("centralGravity: "+this.constants.physics.centralGravity),this.constants.physics.springLength!=this.backupConstants.physics.barnesHut.springLength&&e.push("springLength: "+this.constants.physics.springLength),this.constants.physics.springConstant!=this.backupConstants.physics.barnesHut.springConstant&&e.push("springConstant: "+this.constants.physics.springConstant),this.constants.physics.damping!=this.backupConstants.physics.barnesHut.damping&&e.push("damping: "+this.constants.physics.damping),0!=e.length){t="var options = {",t+="physics: {barnesHut: {";for(var o=0;othis.constants.clustering.clusterThreshold&&1==this.constants.clustering.enabled&&this.clusterToFit(this.constants.clustering.reduceToNodes,!1),this._calculateForces())},e._calculateForces=function(){this._calculateGravitationalForces(),this._calculateNodeForces(),this.constants.physics.springConstant>0&&(1==this.constants.smoothCurves.enabled&&1==this.constants.smoothCurves.dynamic?this._calculateSpringForcesWithSupport():1==this.constants.physics.hierarchicalRepulsion.enabled?this._calculateHierarchicalSpringForces():this._calculateSpringForces())},e._updateCalculationNodes=function(){if(1==this.constants.smoothCurves.enabled&&1==this.constants.smoothCurves.dynamic){this.calculationNodes={},this.calculationNodeIndices=[];for(var t in this.nodes)this.nodes.hasOwnProperty(t)&&(this.calculationNodes[t]=this.nodes[t]);var e=this.sectors.support.nodes;for(var i in e)e.hasOwnProperty(i)&&(this.edges.hasOwnProperty(e[i].parentEdgeId)?this.calculationNodes[i]=e[i]:e[i]._setForce(0,0));for(var s in this.calculationNodes)this.calculationNodes.hasOwnProperty(s)&&this.calculationNodeIndices.push(s)}else this.calculationNodes=this.nodes,this.calculationNodeIndices=this.nodeIndices},e._calculateGravitationalForces=function(){var t,e,i,s,o,n=this.calculationNodes,r=this.constants.physics.centralGravity,a=0;for(o=0;oSimulation Mode:Barnes HutRepulsionHierarchical
Options:
',this.containerElement.parentElement.insertBefore(this.physicsConfiguration,this.containerElement),this.optionsDiv=document.createElement("div"),this.optionsDiv.style.fontSize="14px",this.optionsDiv.style.fontFamily="verdana",this.containerElement.parentElement.insertBefore(this.optionsDiv,this.containerElement);var e;e=document.getElementById("graph_BH_gc"),e.onchange=a.bind(this,"graph_BH_gc",-1,"physics_barnesHut_gravitationalConstant"),e=document.getElementById("graph_BH_cg"),e.onchange=a.bind(this,"graph_BH_cg",1,"physics_centralGravity"),e=document.getElementById("graph_BH_sc"),e.onchange=a.bind(this,"graph_BH_sc",1,"physics_springConstant"),e=document.getElementById("graph_BH_sl"),e.onchange=a.bind(this,"graph_BH_sl",1,"physics_springLength"),e=document.getElementById("graph_BH_damp"),e.onchange=a.bind(this,"graph_BH_damp",1,"physics_damping"),e=document.getElementById("graph_R_nd"),e.onchange=a.bind(this,"graph_R_nd",1,"physics_repulsion_nodeDistance"),e=document.getElementById("graph_R_cg"),e.onchange=a.bind(this,"graph_R_cg",1,"physics_centralGravity"),e=document.getElementById("graph_R_sc"),e.onchange=a.bind(this,"graph_R_sc",1,"physics_springConstant"),e=document.getElementById("graph_R_sl"),e.onchange=a.bind(this,"graph_R_sl",1,"physics_springLength"),e=document.getElementById("graph_R_damp"),e.onchange=a.bind(this,"graph_R_damp",1,"physics_damping"),e=document.getElementById("graph_H_nd"),e.onchange=a.bind(this,"graph_H_nd",1,"physics_hierarchicalRepulsion_nodeDistance"),e=document.getElementById("graph_H_cg"),e.onchange=a.bind(this,"graph_H_cg",1,"physics_centralGravity"),e=document.getElementById("graph_H_sc"),e.onchange=a.bind(this,"graph_H_sc",1,"physics_springConstant"),e=document.getElementById("graph_H_sl"),e.onchange=a.bind(this,"graph_H_sl",1,"physics_springLength"),e=document.getElementById("graph_H_damp"),e.onchange=a.bind(this,"graph_H_damp",1,"physics_damping"),e=document.getElementById("graph_H_direction"),e.onchange=a.bind(this,"graph_H_direction",t,"hierarchicalLayout_direction"),e=document.getElementById("graph_H_levsep"),e.onchange=a.bind(this,"graph_H_levsep",1,"hierarchicalLayout_levelSeparation"),e=document.getElementById("graph_H_nspac"),e.onchange=a.bind(this,"graph_H_nspac",1,"hierarchicalLayout_nodeSpacing"); +var i=document.getElementById("graph_physicsMethod1"),d=document.getElementById("graph_physicsMethod2"),l=document.getElementById("graph_physicsMethod3");d.checked=!0,this.constants.physics.barnesHut.enabled&&(i.checked=!0),this.constants.hierarchicalLayout.enabled&&(l.checked=!0);var c=document.getElementById("graph_toggleSmooth"),p=document.getElementById("graph_repositionNodes"),u=document.getElementById("graph_generateOptions");c.onclick=s.bind(this),p.onclick=o.bind(this),u.onclick=n.bind(this),c.style.background=1==this.constants.smoothCurves&&0==this.constants.dynamicSmoothCurves?"#A4FF56":"#FF8532",r.apply(this),i.onchange=r.bind(this),d.onchange=r.bind(this),l.onchange=r.bind(this)}},e._overWriteGraphConstants=function(t,e){var i=t.split("_");1==i.length?this.constants[i[0]]=e:2==i.length?this.constants[i[0]][i[1]]=e:3==i.length&&(this.constants[i[0]][i[1]][i[2]]=e)}},function(t){function e(t){throw new Error("Cannot find module '"+t+"'.")}e.keys=function(){return[]},e.resolve=e,t.exports=e,e.id=67},function(t,e){e._calculateNodeForces=function(){var t,e,i,s,o,n,r,a,h,d,l,c=this.calculationNodes,p=this.calculationNodeIndices,u=-2/3,m=4/3,f=this.constants.physics.repulsion.nodeDistance,g=f;for(d=0;di&&(r=.5*g>i?1:v*i+m,r*=0==n?1:1+n*this.constants.clustering.forceAmplification,r/=i,s=t*r,o=e*r,a.fx-=s,a.fy-=o,h.fx+=s,h.fy+=o)}}},function(t,e){e._calculateNodeForces=function(){var t,e,i,s,o,n,r,a,h,d,l=this.calculationNodes,c=this.calculationNodeIndices,p=this.constants.physics.hierarchicalRepulsion.nodeDistance;for(h=0;hi?-Math.pow(u*i,2)+Math.pow(u*p,2):0,0==i?i=.01:n/=i,s=t*n,o=e*n,r.fx-=s,r.fy-=o,a.fx+=s,a.fy+=o}},e._calculateHierarchicalSpringForces=function(){for(var t,e,i,s,o,n,r,a,h,d=this.edges,l=this.calculationNodes,c=this.calculationNodeIndices,p=0;pn;n++)t=e[i[n]],t.options.mass>0&&(this._getForceContribution(o.root.children.NW,t),this._getForceContribution(o.root.children.NE,t),this._getForceContribution(o.root.children.SW,t),this._getForceContribution(o.root.children.SE,t))}},e._getForceContribution=function(t,e){if(t.childrenCount>0){var i,s,o;if(i=t.centerOfMass.x-e.x,s=t.centerOfMass.y-e.y,o=Math.sqrt(i*i+s*s),o*t.calcSize>this.constants.physics.barnesHut.theta){0==o&&(o=.1*Math.random(),i=o);var n=this.constants.physics.barnesHut.gravitationalConstant*t.mass*e.options.mass/(o*o*o),r=i*n,a=s*n;e.fx+=r,e.fy+=a}else if(4==t.childrenCount)this._getForceContribution(t.children.NW,e),this._getForceContribution(t.children.NE,e),this._getForceContribution(t.children.SW,e),this._getForceContribution(t.children.SE,e);else if(t.children.data.id!=e.id){0==o&&(o=.5*Math.random(),i=o);var n=this.constants.physics.barnesHut.gravitationalConstant*t.mass*e.options.mass/(o*o*o),r=i*n,a=s*n;e.fx+=r,e.fy+=a}}},e._formBarnesHutTree=function(t,e){for(var i,s=e.length,o=Number.MAX_VALUE,n=Number.MAX_VALUE,r=-Number.MAX_VALUE,a=-Number.MAX_VALUE,h=0;s>h;h++){var d=t[e[h]].x,l=t[e[h]].y;t[e[h]].options.mass>0&&(o>d&&(o=d),d>r&&(r=d),n>l&&(n=l),l>a&&(a=l))}var c=Math.abs(r-o)-Math.abs(a-n);c>0?(n-=.5*c,a+=.5*c):(o+=.5*c,r-=.5*c);var p=1e-5,u=Math.max(p,Math.abs(r-o)),m=.5*u,f=.5*(o+r),g=.5*(n+a),v={root:{centerOfMass:{x:0,y:0},mass:0,range:{minX:f-m,maxX:f+m,minY:g-m,maxY:g+m},size:u,calcSize:1/u,children:{data:null},maxWidth:0,level:0,childrenCount:4}};for(this._splitBranch(v.root),h=0;s>h;h++)i=t[e[h]],i.options.mass>0&&this._placeInTree(v.root,i);this.barnesHutTree=v},e._updateBranchMass=function(t,e){var i=t.mass+e.options.mass,s=1/i;t.centerOfMass.x=t.centerOfMass.x*t.mass+e.x*e.options.mass,t.centerOfMass.x*=s,t.centerOfMass.y=t.centerOfMass.y*t.mass+e.y*e.options.mass,t.centerOfMass.y*=s,t.mass=i;var o=Math.max(Math.max(e.height,e.radius),e.width);t.maxWidth=t.maxWidthe.x?t.children.NW.range.maxY>e.y?this._placeInRegion(t,e,"NW"):this._placeInRegion(t,e,"SW"):t.children.NW.range.maxY>e.y?this._placeInRegion(t,e,"NE"):this._placeInRegion(t,e,"SE")},e._placeInRegion=function(t,e,i){switch(t.children[i].childrenCount){case 0:t.children[i].children.data=e,t.children[i].childrenCount=1,this._updateBranchMass(t.children[i],e);break;case 1:t.children[i].children.data.x==e.x&&t.children[i].children.data.y==e.y?(e.x+=Math.random(),e.y+=Math.random()):(this._splitBranch(t.children[i]),this._placeInTree(t.children[i],e));break;case 4:this._placeInTree(t.children[i],e)}},e._splitBranch=function(t){var e=null;1==t.childrenCount&&(e=t.children.data,t.mass=0,t.centerOfMass.x=0,t.centerOfMass.y=0),t.childrenCount=4,t.children.data=null,this._insertRegion(t,"NW"),this._insertRegion(t,"NE"),this._insertRegion(t,"SW"),this._insertRegion(t,"SE"),null!=e&&this._placeInTree(t,e)},e._insertRegion=function(t,e){var i,s,o,n,r=.5*t.size;switch(e){case"NW":i=t.range.minX,s=t.range.minX+r,o=t.range.minY,n=t.range.minY+r;break;case"NE":i=t.range.minX+r,s=t.range.maxX,o=t.range.minY,n=t.range.minY+r;break;case"SW":i=t.range.minX,s=t.range.minX+r,o=t.range.minY+r,n=t.range.maxY;break;case"SE":i=t.range.minX+r,s=t.range.maxX,o=t.range.minY+r,n=t.range.maxY}t.children[e]={centerOfMass:{x:0,y:0},mass:0,range:{minX:i,maxX:s,minY:o,maxY:n},size:.5*t.size,calcSize:2*t.calcSize,children:{data:null},maxWidth:0,level:t.level+1,childrenCount:0}},e._drawTree=function(t,e){void 0!==this.barnesHutTree&&(t.lineWidth=1,this._drawBranch(this.barnesHutTree.root,t,e))},e._drawBranch=function(t,e,i){void 0===i&&(i="#FF0000"),4==t.childrenCount&&(this._drawBranch(t.children.NW,e),this._drawBranch(t.children.NE,e),this._drawBranch(t.children.SE,e),this._drawBranch(t.children.SW,e)),e.strokeStyle=i,e.beginPath(),e.moveTo(t.range.minX,t.range.minY),e.lineTo(t.range.maxX,t.range.minY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.minY),e.lineTo(t.range.maxX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.maxY),e.lineTo(t.range.minX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.minX,t.range.maxY),e.lineTo(t.range.minX,t.range.minY),e.stroke()}},function(t){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children=[],t.webpackPolyfill=1),t}},function(t,e){(function(e){t.exports=e}).call(e,{})}])}); //# sourceMappingURL=vis.map diff --git a/lib/timeline/DataStep.js b/lib/timeline/DataStep.js index d1f5c7d9..752e0785 100644 --- a/lib/timeline/DataStep.js +++ b/lib/timeline/DataStep.js @@ -189,7 +189,10 @@ DataStep.prototype.previous = function() { * @return {String} current The current date */ DataStep.prototype.getCurrent = function(decimals) { - var toPrecision = '' + Number(this.current).toPrecision(5); + // prevent round-off errors when close to zero + var current = (Math.abs(this.current) < this.step / 2) ? 0 : this.current; + var toPrecision = '' + Number(current).toPrecision(5); + // If decimals is specified, then limit or extend the string as required if(decimals !== undefined && !isNaN(Number(decimals))) { // If string includes exponent, then we need to add it to the end From a3e000ec8099442e85348fa443f676ff17b70bf1 Mon Sep 17 00:00:00 2001 From: jos Date: Fri, 19 Dec 2014 11:25:07 +0100 Subject: [PATCH 05/20] Added prerequisites for custom builds --- README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README.md b/README.md index 86d88306..2305bd77 100644 --- a/README.md +++ b/README.md @@ -154,6 +154,16 @@ The source code of vis.js consists of commonjs modules, which makes it possible *Note that hammer.js version 1 is required (v1.0.6-v1.1.3), version 2 is not yet supported.* + +#### Prerequisites + +Before you can do a build: + +- Install node.js, npm, and browserify on your system. +- Download or clone the vis.js project. +- Install the dependencies of vis.js by running `npm install` in the root of the project. + + #### Example 1: Bundle a single visualization For example, to create a bundle with just the Timeline and DataSet, create an index file named **custom.js** in the root of the project, containing: From dbb386dc204131b23b06502948fc0f64bf1cd7f5 Mon Sep 17 00:00:00 2001 From: jos Date: Fri, 19 Dec 2014 11:48:33 +0100 Subject: [PATCH 06/20] Updated history --- HISTORY.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/HISTORY.md b/HISTORY.md index 0d765f83..d1ce5168 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,13 +1,12 @@ # vis.js history http://visjs.org -## 2014-12-09, version 3.7.3-SNAPSHOT NOT YET RELEASED -### Network +## not yet released, version 3.7.3-SNAPSHOT -- Fixed flipping of hierachical network on update when using RL and DU. +### Network -## not yet released, version 3.7.3 +- Fixed flipping of hierarchical network on update when using RL and DU. ### Graph2d From 074463571c45c631b6b1413662c11385b2302f6c Mon Sep 17 00:00:00 2001 From: jos Date: Fri, 19 Dec 2014 12:18:41 +0100 Subject: [PATCH 07/20] Moved time label formatting in a separate object --- lib/timeline/TimeStep.js | 62 ++++++++++++++++++++++++---------------- 1 file changed, 37 insertions(+), 25 deletions(-) diff --git a/lib/timeline/TimeStep.js b/lib/timeline/TimeStep.js index 1da29a85..cef93adc 100644 --- a/lib/timeline/TimeStep.js +++ b/lib/timeline/TimeStep.js @@ -50,7 +50,7 @@ function TimeStep(start, end, minimumStep, hiddenDates) { } } -/// enum scale +// enum scale TimeStep.SCALE = { MILLISECOND: 1, SECOND: 2, @@ -62,6 +62,36 @@ TimeStep.SCALE = { YEAR: 8 }; +// array with lower case scale names +TimeStep.SCALE_INDEX = {}; +Object.keys(TimeStep.SCALE).forEach(function (key) { + var index = TimeStep.SCALE[key]; + TimeStep.SCALE_INDEX[index] = key.toLowerCase(); +}); + +// Time formatting +TimeStep.FORMAT = { + minorLabels: { + 'millisecond':'SSS', + 'second': 's', + 'minute': 'HH:mm', + 'hour': 'HH:mm', + 'weekday': 'ddd D', + 'day': 'D', + 'month': 'MMM', + 'year': 'YYYY' + }, + majorLabels: { + 'millisecond':'HH:mm:ss', + 'second': 'D MMMM HH:mm', + 'minute': 'ddd D MMMM', + 'hour': 'ddd D MMMM', + 'weekday': 'MMMM YYYY', + 'day': 'MMMM YYYY', + 'month': 'YYYY', + 'year': '' + } +}; /** * Set a new range @@ -484,20 +514,11 @@ TimeStep.prototype.getLabelMinor = function(date) { date = this.current; } - switch (this.scale) { - case TimeStep.SCALE.MILLISECOND: return moment(date).format('SSS'); - case TimeStep.SCALE.SECOND: return moment(date).format('s'); - case TimeStep.SCALE.MINUTE: return moment(date).format('HH:mm'); - case TimeStep.SCALE.HOUR: return moment(date).format('HH:mm'); - case TimeStep.SCALE.WEEKDAY: return moment(date).format('ddd D'); - case TimeStep.SCALE.DAY: return moment(date).format('D'); - case TimeStep.SCALE.MONTH: return moment(date).format('MMM'); - case TimeStep.SCALE.YEAR: return moment(date).format('YYYY'); - default: return ''; - } + var scaleName = TimeStep.SCALE_INDEX[this.scale]; + var format = TimeStep.FORMAT.minorLabels[scaleName]; + return (format && format.length > 0) ? moment(date).format(format) : ''; }; - /** * Returns formatted text for the major axis label, depending on the current * date and the scale. For example when scale is MINUTE, the major scale is @@ -509,18 +530,9 @@ TimeStep.prototype.getLabelMajor = function(date) { date = this.current; } - //noinspection FallthroughInSwitchStatementJS - switch (this.scale) { - case TimeStep.SCALE.MILLISECOND:return moment(date).format('HH:mm:ss'); - case TimeStep.SCALE.SECOND: return moment(date).format('D MMMM HH:mm'); - case TimeStep.SCALE.MINUTE: - case TimeStep.SCALE.HOUR: return moment(date).format('ddd D MMMM'); - case TimeStep.SCALE.WEEKDAY: - case TimeStep.SCALE.DAY: return moment(date).format('MMMM YYYY'); - case TimeStep.SCALE.MONTH: return moment(date).format('YYYY'); - case TimeStep.SCALE.YEAR: return ''; - default: return ''; - } + var scaleName = TimeStep.SCALE_INDEX[this.scale]; + var format = TimeStep.FORMAT.majorLabels[scaleName]; + return (format && format.length > 0) ? moment(date).format(format) : ''; }; module.exports = TimeStep; From d58fdc1f9a8fa8005b7b2191a60fd3db085ffa33 Mon Sep 17 00:00:00 2001 From: jos Date: Fri, 19 Dec 2014 12:21:47 +0100 Subject: [PATCH 08/20] Test with scale name instead of enum --- lib/timeline/TimeStep.js | 233 ++++++++++++++++++--------------------- 1 file changed, 106 insertions(+), 127 deletions(-) diff --git a/lib/timeline/TimeStep.js b/lib/timeline/TimeStep.js index cef93adc..a6a1dec9 100644 --- a/lib/timeline/TimeStep.js +++ b/lib/timeline/TimeStep.js @@ -34,7 +34,7 @@ function TimeStep(start, end, minimumStep, hiddenDates) { this._end = new Date(); this.autoScale = true; - this.scale = TimeStep.SCALE.DAY; + this.scale = 'day'; this.step = 1; // initialize the range @@ -50,25 +50,6 @@ function TimeStep(start, end, minimumStep, hiddenDates) { } } -// enum scale -TimeStep.SCALE = { - MILLISECOND: 1, - SECOND: 2, - MINUTE: 3, - HOUR: 4, - DAY: 5, - WEEKDAY: 6, - MONTH: 7, - YEAR: 8 -}; - -// array with lower case scale names -TimeStep.SCALE_INDEX = {}; -Object.keys(TimeStep.SCALE).forEach(function (key) { - var index = TimeStep.SCALE[key]; - TimeStep.SCALE_INDEX[index] = key.toLowerCase(); -}); - // Time formatting TimeStep.FORMAT = { minorLabels: { @@ -133,29 +114,29 @@ TimeStep.prototype.roundToMinor = function() { // IMPORTANT: we have no breaks in this switch! (this is no bug) //noinspection FallthroughInSwitchStatementJS switch (this.scale) { - case TimeStep.SCALE.YEAR: + case 'year': this.current.setFullYear(this.step * Math.floor(this.current.getFullYear() / this.step)); this.current.setMonth(0); - case TimeStep.SCALE.MONTH: this.current.setDate(1); - case TimeStep.SCALE.DAY: // intentional fall through - case TimeStep.SCALE.WEEKDAY: this.current.setHours(0); - case TimeStep.SCALE.HOUR: this.current.setMinutes(0); - case TimeStep.SCALE.MINUTE: this.current.setSeconds(0); - case TimeStep.SCALE.SECOND: this.current.setMilliseconds(0); - //case TimeStep.SCALE.MILLISECOND: // nothing to do for milliseconds + case 'month': this.current.setDate(1); + case 'day': // intentional fall through + case 'weekday': this.current.setHours(0); + case 'hour': this.current.setMinutes(0); + case 'minute': this.current.setSeconds(0); + case 'second': this.current.setMilliseconds(0); + //case 'millisecond': // nothing to do for milliseconds } if (this.step != 1) { // round down to the first minor value that is a multiple of the current step size switch (this.scale) { - case TimeStep.SCALE.MILLISECOND: this.current.setMilliseconds(this.current.getMilliseconds() - this.current.getMilliseconds() % this.step); break; - case TimeStep.SCALE.SECOND: this.current.setSeconds(this.current.getSeconds() - this.current.getSeconds() % this.step); break; - case TimeStep.SCALE.MINUTE: this.current.setMinutes(this.current.getMinutes() - this.current.getMinutes() % this.step); break; - case TimeStep.SCALE.HOUR: this.current.setHours(this.current.getHours() - this.current.getHours() % this.step); break; - case TimeStep.SCALE.WEEKDAY: // intentional fall through - case TimeStep.SCALE.DAY: this.current.setDate((this.current.getDate()-1) - (this.current.getDate()-1) % this.step + 1); break; - case TimeStep.SCALE.MONTH: this.current.setMonth(this.current.getMonth() - this.current.getMonth() % this.step); break; - case TimeStep.SCALE.YEAR: this.current.setFullYear(this.current.getFullYear() - this.current.getFullYear() % this.step); break; + case 'millisecond': this.current.setMilliseconds(this.current.getMilliseconds() - this.current.getMilliseconds() % this.step); break; + case 'second': this.current.setSeconds(this.current.getSeconds() - this.current.getSeconds() % this.step); break; + case 'minute': this.current.setMinutes(this.current.getMinutes() - this.current.getMinutes() % this.step); break; + case 'hour': this.current.setHours(this.current.getHours() - this.current.getHours() % this.step); break; + case 'weekday': // intentional fall through + case 'day': this.current.setDate((this.current.getDate()-1) - (this.current.getDate()-1) % this.step + 1); break; + case 'month': this.current.setMonth(this.current.getMonth() - this.current.getMonth() % this.step); break; + case 'year': this.current.setFullYear(this.current.getFullYear() - this.current.getFullYear() % this.step); break; default: break; } } @@ -179,34 +160,34 @@ TimeStep.prototype.next = function() { // (end of March and end of October) if (this.current.getMonth() < 6) { switch (this.scale) { - case TimeStep.SCALE.MILLISECOND: + case 'millisecond': this.current = new Date(this.current.valueOf() + this.step); break; - case TimeStep.SCALE.SECOND: this.current = new Date(this.current.valueOf() + this.step * 1000); break; - case TimeStep.SCALE.MINUTE: this.current = new Date(this.current.valueOf() + this.step * 1000 * 60); break; - case TimeStep.SCALE.HOUR: + case 'second': this.current = new Date(this.current.valueOf() + this.step * 1000); break; + case 'minute': this.current = new Date(this.current.valueOf() + this.step * 1000 * 60); break; + case 'hour': this.current = new Date(this.current.valueOf() + this.step * 1000 * 60 * 60); // in case of skipping an hour for daylight savings, adjust the hour again (else you get: 0h 5h 9h ... instead of 0h 4h 8h ...) var h = this.current.getHours(); this.current.setHours(h - (h % this.step)); break; - case TimeStep.SCALE.WEEKDAY: // intentional fall through - case TimeStep.SCALE.DAY: this.current.setDate(this.current.getDate() + this.step); break; - case TimeStep.SCALE.MONTH: this.current.setMonth(this.current.getMonth() + this.step); break; - case TimeStep.SCALE.YEAR: this.current.setFullYear(this.current.getFullYear() + this.step); break; + case 'weekday': // intentional fall through + case 'day': this.current.setDate(this.current.getDate() + this.step); break; + case 'month': this.current.setMonth(this.current.getMonth() + this.step); break; + case 'year': this.current.setFullYear(this.current.getFullYear() + this.step); break; default: break; } } else { switch (this.scale) { - case TimeStep.SCALE.MILLISECOND: this.current = new Date(this.current.valueOf() + this.step); break; - case TimeStep.SCALE.SECOND: this.current.setSeconds(this.current.getSeconds() + this.step); break; - case TimeStep.SCALE.MINUTE: this.current.setMinutes(this.current.getMinutes() + this.step); break; - case TimeStep.SCALE.HOUR: this.current.setHours(this.current.getHours() + this.step); break; - case TimeStep.SCALE.WEEKDAY: // intentional fall through - case TimeStep.SCALE.DAY: this.current.setDate(this.current.getDate() + this.step); break; - case TimeStep.SCALE.MONTH: this.current.setMonth(this.current.getMonth() + this.step); break; - case TimeStep.SCALE.YEAR: this.current.setFullYear(this.current.getFullYear() + this.step); break; + case 'millisecond': this.current = new Date(this.current.valueOf() + this.step); break; + case 'second': this.current.setSeconds(this.current.getSeconds() + this.step); break; + case 'minute': this.current.setMinutes(this.current.getMinutes() + this.step); break; + case 'hour': this.current.setHours(this.current.getHours() + this.step); break; + case 'weekday': // intentional fall through + case 'day': this.current.setDate(this.current.getDate() + this.step); break; + case 'month': this.current.setMonth(this.current.getMonth() + this.step); break; + case 'year': this.current.setFullYear(this.current.getFullYear() + this.step); break; default: break; } } @@ -214,14 +195,14 @@ TimeStep.prototype.next = function() { if (this.step != 1) { // round down to the correct major value switch (this.scale) { - case TimeStep.SCALE.MILLISECOND: if(this.current.getMilliseconds() < this.step) this.current.setMilliseconds(0); break; - case TimeStep.SCALE.SECOND: if(this.current.getSeconds() < this.step) this.current.setSeconds(0); break; - case TimeStep.SCALE.MINUTE: if(this.current.getMinutes() < this.step) this.current.setMinutes(0); break; - case TimeStep.SCALE.HOUR: if(this.current.getHours() < this.step) this.current.setHours(0); break; - case TimeStep.SCALE.WEEKDAY: // intentional fall through - case TimeStep.SCALE.DAY: if(this.current.getDate() < this.step+1) this.current.setDate(1); break; - case TimeStep.SCALE.MONTH: if(this.current.getMonth() < this.step) this.current.setMonth(0); break; - case TimeStep.SCALE.YEAR: break; // nothing to do for year + case 'millisecond': if(this.current.getMilliseconds() < this.step) this.current.setMilliseconds(0); break; + case 'second': if(this.current.getSeconds() < this.step) this.current.setSeconds(0); break; + case 'minute': if(this.current.getMinutes() < this.step) this.current.setMinutes(0); break; + case 'hour': if(this.current.getHours() < this.step) this.current.setHours(0); break; + case 'weekday': // intentional fall through + case 'day': if(this.current.getDate() < this.step+1) this.current.setDate(1); break; + case 'month': if(this.current.getMonth() < this.step) this.current.setMonth(0); break; + case 'year': break; // nothing to do for year default: break; } } @@ -295,35 +276,35 @@ TimeStep.prototype.setMinimumStep = function(minimumStep) { var stepMillisecond= (1); // find the smallest step that is larger than the provided minimumStep - if (stepYear*1000 > minimumStep) {this.scale = TimeStep.SCALE.YEAR; this.step = 1000;} - if (stepYear*500 > minimumStep) {this.scale = TimeStep.SCALE.YEAR; this.step = 500;} - if (stepYear*100 > minimumStep) {this.scale = TimeStep.SCALE.YEAR; this.step = 100;} - if (stepYear*50 > minimumStep) {this.scale = TimeStep.SCALE.YEAR; this.step = 50;} - if (stepYear*10 > minimumStep) {this.scale = TimeStep.SCALE.YEAR; this.step = 10;} - if (stepYear*5 > minimumStep) {this.scale = TimeStep.SCALE.YEAR; this.step = 5;} - if (stepYear > minimumStep) {this.scale = TimeStep.SCALE.YEAR; this.step = 1;} - if (stepMonth*3 > minimumStep) {this.scale = TimeStep.SCALE.MONTH; this.step = 3;} - if (stepMonth > minimumStep) {this.scale = TimeStep.SCALE.MONTH; this.step = 1;} - if (stepDay*5 > minimumStep) {this.scale = TimeStep.SCALE.DAY; this.step = 5;} - if (stepDay*2 > minimumStep) {this.scale = TimeStep.SCALE.DAY; this.step = 2;} - if (stepDay > minimumStep) {this.scale = TimeStep.SCALE.DAY; this.step = 1;} - if (stepDay/2 > minimumStep) {this.scale = TimeStep.SCALE.WEEKDAY; this.step = 1;} - if (stepHour*4 > minimumStep) {this.scale = TimeStep.SCALE.HOUR; this.step = 4;} - if (stepHour > minimumStep) {this.scale = TimeStep.SCALE.HOUR; this.step = 1;} - if (stepMinute*15 > minimumStep) {this.scale = TimeStep.SCALE.MINUTE; this.step = 15;} - if (stepMinute*10 > minimumStep) {this.scale = TimeStep.SCALE.MINUTE; this.step = 10;} - if (stepMinute*5 > minimumStep) {this.scale = TimeStep.SCALE.MINUTE; this.step = 5;} - if (stepMinute > minimumStep) {this.scale = TimeStep.SCALE.MINUTE; this.step = 1;} - if (stepSecond*15 > minimumStep) {this.scale = TimeStep.SCALE.SECOND; this.step = 15;} - if (stepSecond*10 > minimumStep) {this.scale = TimeStep.SCALE.SECOND; this.step = 10;} - if (stepSecond*5 > minimumStep) {this.scale = TimeStep.SCALE.SECOND; this.step = 5;} - if (stepSecond > minimumStep) {this.scale = TimeStep.SCALE.SECOND; this.step = 1;} - if (stepMillisecond*200 > minimumStep) {this.scale = TimeStep.SCALE.MILLISECOND; this.step = 200;} - if (stepMillisecond*100 > minimumStep) {this.scale = TimeStep.SCALE.MILLISECOND; this.step = 100;} - if (stepMillisecond*50 > minimumStep) {this.scale = TimeStep.SCALE.MILLISECOND; this.step = 50;} - if (stepMillisecond*10 > minimumStep) {this.scale = TimeStep.SCALE.MILLISECOND; this.step = 10;} - if (stepMillisecond*5 > minimumStep) {this.scale = TimeStep.SCALE.MILLISECOND; this.step = 5;} - if (stepMillisecond > minimumStep) {this.scale = TimeStep.SCALE.MILLISECOND; this.step = 1;} + if (stepYear*1000 > minimumStep) {this.scale = 'year'; this.step = 1000;} + if (stepYear*500 > minimumStep) {this.scale = 'year'; this.step = 500;} + if (stepYear*100 > minimumStep) {this.scale = 'year'; this.step = 100;} + if (stepYear*50 > minimumStep) {this.scale = 'year'; this.step = 50;} + if (stepYear*10 > minimumStep) {this.scale = 'year'; this.step = 10;} + if (stepYear*5 > minimumStep) {this.scale = 'year'; this.step = 5;} + if (stepYear > minimumStep) {this.scale = 'year'; this.step = 1;} + if (stepMonth*3 > minimumStep) {this.scale = 'month'; this.step = 3;} + if (stepMonth > minimumStep) {this.scale = 'month'; this.step = 1;} + if (stepDay*5 > minimumStep) {this.scale = 'day'; this.step = 5;} + if (stepDay*2 > minimumStep) {this.scale = 'day'; this.step = 2;} + if (stepDay > minimumStep) {this.scale = 'day'; this.step = 1;} + if (stepDay/2 > minimumStep) {this.scale = 'weekday'; this.step = 1;} + if (stepHour*4 > minimumStep) {this.scale = 'hour'; this.step = 4;} + if (stepHour > minimumStep) {this.scale = 'hour'; this.step = 1;} + if (stepMinute*15 > minimumStep) {this.scale = 'minute'; this.step = 15;} + if (stepMinute*10 > minimumStep) {this.scale = 'minute'; this.step = 10;} + if (stepMinute*5 > minimumStep) {this.scale = 'minute'; this.step = 5;} + if (stepMinute > minimumStep) {this.scale = 'minute'; this.step = 1;} + if (stepSecond*15 > minimumStep) {this.scale = 'second'; this.step = 15;} + if (stepSecond*10 > minimumStep) {this.scale = 'second'; this.step = 10;} + if (stepSecond*5 > minimumStep) {this.scale = 'second'; this.step = 5;} + if (stepSecond > minimumStep) {this.scale = 'second'; this.step = 1;} + if (stepMillisecond*200 > minimumStep) {this.scale = 'millisecond'; this.step = 200;} + if (stepMillisecond*100 > minimumStep) {this.scale = 'millisecond'; this.step = 100;} + if (stepMillisecond*50 > minimumStep) {this.scale = 'millisecond'; this.step = 50;} + if (stepMillisecond*10 > minimumStep) {this.scale = 'millisecond'; this.step = 10;} + if (stepMillisecond*5 > minimumStep) {this.scale = 'millisecond'; this.step = 5;} + if (stepMillisecond > minimumStep) {this.scale = 'millisecond'; this.step = 1;} }; /** @@ -335,7 +316,7 @@ TimeStep.prototype.setMinimumStep = function(minimumStep) { TimeStep.prototype.snap = function(date) { var clone = new Date(date.valueOf()); - if (this.scale == TimeStep.SCALE.YEAR) { + if (this.scale == 'year') { var year = clone.getFullYear() + Math.round(clone.getMonth() / 12); clone.setFullYear(Math.round(year / this.step) * this.step); clone.setMonth(0); @@ -345,7 +326,7 @@ TimeStep.prototype.snap = function(date) { clone.setSeconds(0); clone.setMilliseconds(0); } - else if (this.scale == TimeStep.SCALE.MONTH) { + else if (this.scale == 'month') { if (clone.getDate() > 15) { clone.setDate(1); clone.setMonth(clone.getMonth() + 1); @@ -360,7 +341,7 @@ TimeStep.prototype.snap = function(date) { clone.setSeconds(0); clone.setMilliseconds(0); } - else if (this.scale == TimeStep.SCALE.DAY) { + else if (this.scale == 'day') { //noinspection FallthroughInSwitchStatementJS switch (this.step) { case 5: @@ -373,7 +354,7 @@ TimeStep.prototype.snap = function(date) { clone.setSeconds(0); clone.setMilliseconds(0); } - else if (this.scale == TimeStep.SCALE.WEEKDAY) { + else if (this.scale == 'weekday') { //noinspection FallthroughInSwitchStatementJS switch (this.step) { case 5: @@ -386,7 +367,7 @@ TimeStep.prototype.snap = function(date) { clone.setSeconds(0); clone.setMilliseconds(0); } - else if (this.scale == TimeStep.SCALE.HOUR) { + else if (this.scale == 'hour') { switch (this.step) { case 4: clone.setMinutes(Math.round(clone.getMinutes() / 60) * 60); break; @@ -395,7 +376,7 @@ TimeStep.prototype.snap = function(date) { } clone.setSeconds(0); clone.setMilliseconds(0); - } else if (this.scale == TimeStep.SCALE.MINUTE) { + } else if (this.scale == 'minute') { //noinspection FallthroughInSwitchStatementJS switch (this.step) { case 15: @@ -410,7 +391,7 @@ TimeStep.prototype.snap = function(date) { } clone.setMilliseconds(0); } - else if (this.scale == TimeStep.SCALE.SECOND) { + else if (this.scale == 'second') { //noinspection FallthroughInSwitchStatementJS switch (this.step) { case 15: @@ -424,7 +405,7 @@ TimeStep.prototype.snap = function(date) { clone.setMilliseconds(Math.round(clone.getMilliseconds() / 500) * 500); break; } } - else if (this.scale == TimeStep.SCALE.MILLISECOND) { + else if (this.scale == 'millisecond') { var step = this.step > 5 ? this.step / 2 : 1; clone.setMilliseconds(Math.round(clone.getMilliseconds() / step) * step); } @@ -441,14 +422,14 @@ TimeStep.prototype.isMajor = function() { if (this.switchedYear == true) { this.switchedYear = false; switch (this.scale) { - case TimeStep.SCALE.YEAR: - case TimeStep.SCALE.MONTH: - case TimeStep.SCALE.WEEKDAY: - case TimeStep.SCALE.DAY: - case TimeStep.SCALE.HOUR: - case TimeStep.SCALE.MINUTE: - case TimeStep.SCALE.SECOND: - case TimeStep.SCALE.MILLISECOND: + case 'year': + case 'month': + case 'weekday': + case 'day': + case 'hour': + case 'minute': + case 'second': + case 'millisecond': return true; default: return false; @@ -457,12 +438,12 @@ TimeStep.prototype.isMajor = function() { else if (this.switchedMonth == true) { this.switchedMonth = false; switch (this.scale) { - case TimeStep.SCALE.WEEKDAY: - case TimeStep.SCALE.DAY: - case TimeStep.SCALE.HOUR: - case TimeStep.SCALE.MINUTE: - case TimeStep.SCALE.SECOND: - case TimeStep.SCALE.MILLISECOND: + case 'weekday': + case 'day': + case 'hour': + case 'minute': + case 'second': + case 'millisecond': return true; default: return false; @@ -471,10 +452,10 @@ TimeStep.prototype.isMajor = function() { else if (this.switchedDay == true) { this.switchedDay = false; switch (this.scale) { - case TimeStep.SCALE.MILLISECOND: - case TimeStep.SCALE.SECOND: - case TimeStep.SCALE.MINUTE: - case TimeStep.SCALE.HOUR: + case 'millisecond': + case 'second': + case 'minute': + case 'hour': return true; default: return false; @@ -482,20 +463,20 @@ TimeStep.prototype.isMajor = function() { } switch (this.scale) { - case TimeStep.SCALE.MILLISECOND: + case 'millisecond': return (this.current.getMilliseconds() == 0); - case TimeStep.SCALE.SECOND: + case 'second': return (this.current.getSeconds() == 0); - case TimeStep.SCALE.MINUTE: + case 'minute': return (this.current.getHours() == 0) && (this.current.getMinutes() == 0); - case TimeStep.SCALE.HOUR: + case 'hour': return (this.current.getHours() == 0); - case TimeStep.SCALE.WEEKDAY: // intentional fall through - case TimeStep.SCALE.DAY: + case 'weekday': // intentional fall through + case 'day': return (this.current.getDate() == 1); - case TimeStep.SCALE.MONTH: + case 'month': return (this.current.getMonth() == 0); - case TimeStep.SCALE.YEAR: + case 'year': return false; default: return false; @@ -514,8 +495,7 @@ TimeStep.prototype.getLabelMinor = function(date) { date = this.current; } - var scaleName = TimeStep.SCALE_INDEX[this.scale]; - var format = TimeStep.FORMAT.minorLabels[scaleName]; + var format = TimeStep.FORMAT.minorLabels[this.scale]; return (format && format.length > 0) ? moment(date).format(format) : ''; }; @@ -530,8 +510,7 @@ TimeStep.prototype.getLabelMajor = function(date) { date = this.current; } - var scaleName = TimeStep.SCALE_INDEX[this.scale]; - var format = TimeStep.FORMAT.majorLabels[scaleName]; + var format = TimeStep.FORMAT.majorLabels[this.scale]; return (format && format.length > 0) ? moment(date).format(format) : ''; }; From 33ba03c0a769de44216388582adbb750c9c4e763 Mon Sep 17 00:00:00 2001 From: jos Date: Fri, 19 Dec 2014 12:27:07 +0100 Subject: [PATCH 09/20] Removed scale enum in TimeStep --- lib/timeline/TimeStep.js | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/lib/timeline/TimeStep.js b/lib/timeline/TimeStep.js index a6a1dec9..bd9ad89b 100644 --- a/lib/timeline/TimeStep.js +++ b/lib/timeline/TimeStep.js @@ -229,11 +229,9 @@ TimeStep.prototype.getCurrent = function() { * For example setScale(SCALE.MINUTES, 5) will result * in minor steps of 5 minutes, and major steps of an hour. * - * @param {TimeStep.SCALE} newScale - * A scale. Choose from SCALE.MILLISECOND, - * SCALE.SECOND, SCALE.MINUTE, SCALE.HOUR, - * SCALE.WEEKDAY, SCALE.DAY, SCALE.MONTH, - * SCALE.YEAR. + * @param {string} newScale + * A scale. Choose from 'millisecond, 'second, + * 'minute', 'hour', 'weekday, 'day, 'month, 'year'. * @param {Number} newStep A step size, by default 1. Choose for * example 1, 2, 5, or 10. */ From c1a317efcf553cdb147e17dd5aec412224afb1e4 Mon Sep 17 00:00:00 2001 From: jos Date: Fri, 19 Dec 2014 15:14:24 +0100 Subject: [PATCH 10/20] Fixed #247: Support for custom date formatting of the labels on the time axis --- HISTORY.md | 4 + dist/vis.js | 4134 +++++++++++++--------------- dist/vis.map | 2 +- dist/vis.min.js | 28 +- docs/css/style.css | 2 +- docs/timeline.html | 33 + lib/timeline/TimeStep.js | 50 +- lib/timeline/component/TimeAxis.js | 9 +- test/timeline.html | 10 + 9 files changed, 2016 insertions(+), 2256 deletions(-) diff --git a/HISTORY.md b/HISTORY.md index d1ce5168..8ca7c259 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -12,6 +12,10 @@ http://visjs.org - Fixed round-off errors of zero on the y-axis. +### Timeline + +- Support for custom date formatting of the labels on the time axis. + ## 2014-12-09, version 3.7.2 diff --git a/dist/vis.js b/dist/vis.js index 26b5d27f..b5fd50b4 100644 --- a/dist/vis.js +++ b/dist/vis.js @@ -5,7 +5,7 @@ * A dynamic, browser-based visualization library. * * @version 3.7.2-SNAPSHOT - * @date 2014-12-18 + * @date 2014-12-19 * * @license * Copyright (C) 2011-2014 Almende B.V, http://almende.com @@ -8521,6 +8521,7 @@ return /******/ (function(modules) { // webpackBootstrap var moment = __webpack_require__(44); var DateUtil = __webpack_require__(15); + var util = __webpack_require__(1); /** * @constructor TimeStep @@ -8555,7 +8556,7 @@ return /******/ (function(modules) { // webpackBootstrap this._end = new Date(); this.autoScale = true; - this.scale = TimeStep.SCALE.DAY; + this.scale = 'day'; this.step = 1; // initialize the range @@ -8569,20 +8570,44 @@ return /******/ (function(modules) { // webpackBootstrap if (hiddenDates === undefined) { this.hiddenDates = []; } + + this.format = TimeStep.FORMAT; // default formatting } - /// enum scale - TimeStep.SCALE = { - MILLISECOND: 1, - SECOND: 2, - MINUTE: 3, - HOUR: 4, - DAY: 5, - WEEKDAY: 6, - MONTH: 7, - YEAR: 8 + // Time formatting + TimeStep.FORMAT = { + minorLabels: { + millisecond:'SSS', + second: 's', + minute: 'HH:mm', + hour: 'HH:mm', + weekday: 'ddd D', + day: 'D', + month: 'MMM', + year: 'YYYY' + }, + majorLabels: { + millisecond:'HH:mm:ss', + second: 'D MMMM HH:mm', + minute: 'ddd D MMMM', + hour: 'ddd D MMMM', + weekday: 'MMMM YYYY', + day: 'MMMM YYYY', + month: 'YYYY', + year: '' + } }; + /** + * Set custom formatting for the minor an major labels of the TimeStep. + * Both `minorLabels` and `majorLabels` are an Object with properties: + * 'millisecond, 'second, 'minute', 'hour', 'weekday, 'day, 'month, 'year'. + * @param {{minorLabels: Object, majorLabels: Object}} format + */ + TimeStep.prototype.setFormat = function (format) { + var defaultFormat = util.deepExtend({}, TimeStep.FORMAT); + this.format = util.deepExtend(defaultFormat, format); + }; /** * Set a new range @@ -8624,29 +8649,29 @@ return /******/ (function(modules) { // webpackBootstrap // IMPORTANT: we have no breaks in this switch! (this is no bug) //noinspection FallthroughInSwitchStatementJS switch (this.scale) { - case TimeStep.SCALE.YEAR: + case 'year': this.current.setFullYear(this.step * Math.floor(this.current.getFullYear() / this.step)); this.current.setMonth(0); - case TimeStep.SCALE.MONTH: this.current.setDate(1); - case TimeStep.SCALE.DAY: // intentional fall through - case TimeStep.SCALE.WEEKDAY: this.current.setHours(0); - case TimeStep.SCALE.HOUR: this.current.setMinutes(0); - case TimeStep.SCALE.MINUTE: this.current.setSeconds(0); - case TimeStep.SCALE.SECOND: this.current.setMilliseconds(0); - //case TimeStep.SCALE.MILLISECOND: // nothing to do for milliseconds + case 'month': this.current.setDate(1); + case 'day': // intentional fall through + case 'weekday': this.current.setHours(0); + case 'hour': this.current.setMinutes(0); + case 'minute': this.current.setSeconds(0); + case 'second': this.current.setMilliseconds(0); + //case 'millisecond': // nothing to do for milliseconds } if (this.step != 1) { // round down to the first minor value that is a multiple of the current step size switch (this.scale) { - case TimeStep.SCALE.MILLISECOND: this.current.setMilliseconds(this.current.getMilliseconds() - this.current.getMilliseconds() % this.step); break; - case TimeStep.SCALE.SECOND: this.current.setSeconds(this.current.getSeconds() - this.current.getSeconds() % this.step); break; - case TimeStep.SCALE.MINUTE: this.current.setMinutes(this.current.getMinutes() - this.current.getMinutes() % this.step); break; - case TimeStep.SCALE.HOUR: this.current.setHours(this.current.getHours() - this.current.getHours() % this.step); break; - case TimeStep.SCALE.WEEKDAY: // intentional fall through - case TimeStep.SCALE.DAY: this.current.setDate((this.current.getDate()-1) - (this.current.getDate()-1) % this.step + 1); break; - case TimeStep.SCALE.MONTH: this.current.setMonth(this.current.getMonth() - this.current.getMonth() % this.step); break; - case TimeStep.SCALE.YEAR: this.current.setFullYear(this.current.getFullYear() - this.current.getFullYear() % this.step); break; + case 'millisecond': this.current.setMilliseconds(this.current.getMilliseconds() - this.current.getMilliseconds() % this.step); break; + case 'second': this.current.setSeconds(this.current.getSeconds() - this.current.getSeconds() % this.step); break; + case 'minute': this.current.setMinutes(this.current.getMinutes() - this.current.getMinutes() % this.step); break; + case 'hour': this.current.setHours(this.current.getHours() - this.current.getHours() % this.step); break; + case 'weekday': // intentional fall through + case 'day': this.current.setDate((this.current.getDate()-1) - (this.current.getDate()-1) % this.step + 1); break; + case 'month': this.current.setMonth(this.current.getMonth() - this.current.getMonth() % this.step); break; + case 'year': this.current.setFullYear(this.current.getFullYear() - this.current.getFullYear() % this.step); break; default: break; } } @@ -8670,34 +8695,34 @@ return /******/ (function(modules) { // webpackBootstrap // (end of March and end of October) if (this.current.getMonth() < 6) { switch (this.scale) { - case TimeStep.SCALE.MILLISECOND: + case 'millisecond': this.current = new Date(this.current.valueOf() + this.step); break; - case TimeStep.SCALE.SECOND: this.current = new Date(this.current.valueOf() + this.step * 1000); break; - case TimeStep.SCALE.MINUTE: this.current = new Date(this.current.valueOf() + this.step * 1000 * 60); break; - case TimeStep.SCALE.HOUR: + case 'second': this.current = new Date(this.current.valueOf() + this.step * 1000); break; + case 'minute': this.current = new Date(this.current.valueOf() + this.step * 1000 * 60); break; + case 'hour': this.current = new Date(this.current.valueOf() + this.step * 1000 * 60 * 60); // in case of skipping an hour for daylight savings, adjust the hour again (else you get: 0h 5h 9h ... instead of 0h 4h 8h ...) var h = this.current.getHours(); this.current.setHours(h - (h % this.step)); break; - case TimeStep.SCALE.WEEKDAY: // intentional fall through - case TimeStep.SCALE.DAY: this.current.setDate(this.current.getDate() + this.step); break; - case TimeStep.SCALE.MONTH: this.current.setMonth(this.current.getMonth() + this.step); break; - case TimeStep.SCALE.YEAR: this.current.setFullYear(this.current.getFullYear() + this.step); break; + case 'weekday': // intentional fall through + case 'day': this.current.setDate(this.current.getDate() + this.step); break; + case 'month': this.current.setMonth(this.current.getMonth() + this.step); break; + case 'year': this.current.setFullYear(this.current.getFullYear() + this.step); break; default: break; } } else { switch (this.scale) { - case TimeStep.SCALE.MILLISECOND: this.current = new Date(this.current.valueOf() + this.step); break; - case TimeStep.SCALE.SECOND: this.current.setSeconds(this.current.getSeconds() + this.step); break; - case TimeStep.SCALE.MINUTE: this.current.setMinutes(this.current.getMinutes() + this.step); break; - case TimeStep.SCALE.HOUR: this.current.setHours(this.current.getHours() + this.step); break; - case TimeStep.SCALE.WEEKDAY: // intentional fall through - case TimeStep.SCALE.DAY: this.current.setDate(this.current.getDate() + this.step); break; - case TimeStep.SCALE.MONTH: this.current.setMonth(this.current.getMonth() + this.step); break; - case TimeStep.SCALE.YEAR: this.current.setFullYear(this.current.getFullYear() + this.step); break; + case 'millisecond': this.current = new Date(this.current.valueOf() + this.step); break; + case 'second': this.current.setSeconds(this.current.getSeconds() + this.step); break; + case 'minute': this.current.setMinutes(this.current.getMinutes() + this.step); break; + case 'hour': this.current.setHours(this.current.getHours() + this.step); break; + case 'weekday': // intentional fall through + case 'day': this.current.setDate(this.current.getDate() + this.step); break; + case 'month': this.current.setMonth(this.current.getMonth() + this.step); break; + case 'year': this.current.setFullYear(this.current.getFullYear() + this.step); break; default: break; } } @@ -8705,14 +8730,14 @@ return /******/ (function(modules) { // webpackBootstrap if (this.step != 1) { // round down to the correct major value switch (this.scale) { - case TimeStep.SCALE.MILLISECOND: if(this.current.getMilliseconds() < this.step) this.current.setMilliseconds(0); break; - case TimeStep.SCALE.SECOND: if(this.current.getSeconds() < this.step) this.current.setSeconds(0); break; - case TimeStep.SCALE.MINUTE: if(this.current.getMinutes() < this.step) this.current.setMinutes(0); break; - case TimeStep.SCALE.HOUR: if(this.current.getHours() < this.step) this.current.setHours(0); break; - case TimeStep.SCALE.WEEKDAY: // intentional fall through - case TimeStep.SCALE.DAY: if(this.current.getDate() < this.step+1) this.current.setDate(1); break; - case TimeStep.SCALE.MONTH: if(this.current.getMonth() < this.step) this.current.setMonth(0); break; - case TimeStep.SCALE.YEAR: break; // nothing to do for year + case 'millisecond': if(this.current.getMilliseconds() < this.step) this.current.setMilliseconds(0); break; + case 'second': if(this.current.getSeconds() < this.step) this.current.setSeconds(0); break; + case 'minute': if(this.current.getMinutes() < this.step) this.current.setMinutes(0); break; + case 'hour': if(this.current.getHours() < this.step) this.current.setHours(0); break; + case 'weekday': // intentional fall through + case 'day': if(this.current.getDate() < this.step+1) this.current.setDate(1); break; + case 'month': if(this.current.getMonth() < this.step) this.current.setMonth(0); break; + case 'year': break; // nothing to do for year default: break; } } @@ -8739,11 +8764,9 @@ return /******/ (function(modules) { // webpackBootstrap * For example setScale(SCALE.MINUTES, 5) will result * in minor steps of 5 minutes, and major steps of an hour. * - * @param {TimeStep.SCALE} newScale - * A scale. Choose from SCALE.MILLISECOND, - * SCALE.SECOND, SCALE.MINUTE, SCALE.HOUR, - * SCALE.WEEKDAY, SCALE.DAY, SCALE.MONTH, - * SCALE.YEAR. + * @param {string} newScale + * A scale. Choose from 'millisecond, 'second, + * 'minute', 'hour', 'weekday, 'day, 'month, 'year'. * @param {Number} newStep A step size, by default 1. Choose for * example 1, 2, 5, or 10. */ @@ -8786,35 +8809,35 @@ return /******/ (function(modules) { // webpackBootstrap var stepMillisecond= (1); // find the smallest step that is larger than the provided minimumStep - if (stepYear*1000 > minimumStep) {this.scale = TimeStep.SCALE.YEAR; this.step = 1000;} - if (stepYear*500 > minimumStep) {this.scale = TimeStep.SCALE.YEAR; this.step = 500;} - if (stepYear*100 > minimumStep) {this.scale = TimeStep.SCALE.YEAR; this.step = 100;} - if (stepYear*50 > minimumStep) {this.scale = TimeStep.SCALE.YEAR; this.step = 50;} - if (stepYear*10 > minimumStep) {this.scale = TimeStep.SCALE.YEAR; this.step = 10;} - if (stepYear*5 > minimumStep) {this.scale = TimeStep.SCALE.YEAR; this.step = 5;} - if (stepYear > minimumStep) {this.scale = TimeStep.SCALE.YEAR; this.step = 1;} - if (stepMonth*3 > minimumStep) {this.scale = TimeStep.SCALE.MONTH; this.step = 3;} - if (stepMonth > minimumStep) {this.scale = TimeStep.SCALE.MONTH; this.step = 1;} - if (stepDay*5 > minimumStep) {this.scale = TimeStep.SCALE.DAY; this.step = 5;} - if (stepDay*2 > minimumStep) {this.scale = TimeStep.SCALE.DAY; this.step = 2;} - if (stepDay > minimumStep) {this.scale = TimeStep.SCALE.DAY; this.step = 1;} - if (stepDay/2 > minimumStep) {this.scale = TimeStep.SCALE.WEEKDAY; this.step = 1;} - if (stepHour*4 > minimumStep) {this.scale = TimeStep.SCALE.HOUR; this.step = 4;} - if (stepHour > minimumStep) {this.scale = TimeStep.SCALE.HOUR; this.step = 1;} - if (stepMinute*15 > minimumStep) {this.scale = TimeStep.SCALE.MINUTE; this.step = 15;} - if (stepMinute*10 > minimumStep) {this.scale = TimeStep.SCALE.MINUTE; this.step = 10;} - if (stepMinute*5 > minimumStep) {this.scale = TimeStep.SCALE.MINUTE; this.step = 5;} - if (stepMinute > minimumStep) {this.scale = TimeStep.SCALE.MINUTE; this.step = 1;} - if (stepSecond*15 > minimumStep) {this.scale = TimeStep.SCALE.SECOND; this.step = 15;} - if (stepSecond*10 > minimumStep) {this.scale = TimeStep.SCALE.SECOND; this.step = 10;} - if (stepSecond*5 > minimumStep) {this.scale = TimeStep.SCALE.SECOND; this.step = 5;} - if (stepSecond > minimumStep) {this.scale = TimeStep.SCALE.SECOND; this.step = 1;} - if (stepMillisecond*200 > minimumStep) {this.scale = TimeStep.SCALE.MILLISECOND; this.step = 200;} - if (stepMillisecond*100 > minimumStep) {this.scale = TimeStep.SCALE.MILLISECOND; this.step = 100;} - if (stepMillisecond*50 > minimumStep) {this.scale = TimeStep.SCALE.MILLISECOND; this.step = 50;} - if (stepMillisecond*10 > minimumStep) {this.scale = TimeStep.SCALE.MILLISECOND; this.step = 10;} - if (stepMillisecond*5 > minimumStep) {this.scale = TimeStep.SCALE.MILLISECOND; this.step = 5;} - if (stepMillisecond > minimumStep) {this.scale = TimeStep.SCALE.MILLISECOND; this.step = 1;} + if (stepYear*1000 > minimumStep) {this.scale = 'year'; this.step = 1000;} + if (stepYear*500 > minimumStep) {this.scale = 'year'; this.step = 500;} + if (stepYear*100 > minimumStep) {this.scale = 'year'; this.step = 100;} + if (stepYear*50 > minimumStep) {this.scale = 'year'; this.step = 50;} + if (stepYear*10 > minimumStep) {this.scale = 'year'; this.step = 10;} + if (stepYear*5 > minimumStep) {this.scale = 'year'; this.step = 5;} + if (stepYear > minimumStep) {this.scale = 'year'; this.step = 1;} + if (stepMonth*3 > minimumStep) {this.scale = 'month'; this.step = 3;} + if (stepMonth > minimumStep) {this.scale = 'month'; this.step = 1;} + if (stepDay*5 > minimumStep) {this.scale = 'day'; this.step = 5;} + if (stepDay*2 > minimumStep) {this.scale = 'day'; this.step = 2;} + if (stepDay > minimumStep) {this.scale = 'day'; this.step = 1;} + if (stepDay/2 > minimumStep) {this.scale = 'weekday'; this.step = 1;} + if (stepHour*4 > minimumStep) {this.scale = 'hour'; this.step = 4;} + if (stepHour > minimumStep) {this.scale = 'hour'; this.step = 1;} + if (stepMinute*15 > minimumStep) {this.scale = 'minute'; this.step = 15;} + if (stepMinute*10 > minimumStep) {this.scale = 'minute'; this.step = 10;} + if (stepMinute*5 > minimumStep) {this.scale = 'minute'; this.step = 5;} + if (stepMinute > minimumStep) {this.scale = 'minute'; this.step = 1;} + if (stepSecond*15 > minimumStep) {this.scale = 'second'; this.step = 15;} + if (stepSecond*10 > minimumStep) {this.scale = 'second'; this.step = 10;} + if (stepSecond*5 > minimumStep) {this.scale = 'second'; this.step = 5;} + if (stepSecond > minimumStep) {this.scale = 'second'; this.step = 1;} + if (stepMillisecond*200 > minimumStep) {this.scale = 'millisecond'; this.step = 200;} + if (stepMillisecond*100 > minimumStep) {this.scale = 'millisecond'; this.step = 100;} + if (stepMillisecond*50 > minimumStep) {this.scale = 'millisecond'; this.step = 50;} + if (stepMillisecond*10 > minimumStep) {this.scale = 'millisecond'; this.step = 10;} + if (stepMillisecond*5 > minimumStep) {this.scale = 'millisecond'; this.step = 5;} + if (stepMillisecond > minimumStep) {this.scale = 'millisecond'; this.step = 1;} }; /** @@ -8826,7 +8849,7 @@ return /******/ (function(modules) { // webpackBootstrap TimeStep.prototype.snap = function(date) { var clone = new Date(date.valueOf()); - if (this.scale == TimeStep.SCALE.YEAR) { + if (this.scale == 'year') { var year = clone.getFullYear() + Math.round(clone.getMonth() / 12); clone.setFullYear(Math.round(year / this.step) * this.step); clone.setMonth(0); @@ -8836,7 +8859,7 @@ return /******/ (function(modules) { // webpackBootstrap clone.setSeconds(0); clone.setMilliseconds(0); } - else if (this.scale == TimeStep.SCALE.MONTH) { + else if (this.scale == 'month') { if (clone.getDate() > 15) { clone.setDate(1); clone.setMonth(clone.getMonth() + 1); @@ -8851,7 +8874,7 @@ return /******/ (function(modules) { // webpackBootstrap clone.setSeconds(0); clone.setMilliseconds(0); } - else if (this.scale == TimeStep.SCALE.DAY) { + else if (this.scale == 'day') { //noinspection FallthroughInSwitchStatementJS switch (this.step) { case 5: @@ -8864,7 +8887,7 @@ return /******/ (function(modules) { // webpackBootstrap clone.setSeconds(0); clone.setMilliseconds(0); } - else if (this.scale == TimeStep.SCALE.WEEKDAY) { + else if (this.scale == 'weekday') { //noinspection FallthroughInSwitchStatementJS switch (this.step) { case 5: @@ -8877,7 +8900,7 @@ return /******/ (function(modules) { // webpackBootstrap clone.setSeconds(0); clone.setMilliseconds(0); } - else if (this.scale == TimeStep.SCALE.HOUR) { + else if (this.scale == 'hour') { switch (this.step) { case 4: clone.setMinutes(Math.round(clone.getMinutes() / 60) * 60); break; @@ -8886,7 +8909,7 @@ return /******/ (function(modules) { // webpackBootstrap } clone.setSeconds(0); clone.setMilliseconds(0); - } else if (this.scale == TimeStep.SCALE.MINUTE) { + } else if (this.scale == 'minute') { //noinspection FallthroughInSwitchStatementJS switch (this.step) { case 15: @@ -8901,7 +8924,7 @@ return /******/ (function(modules) { // webpackBootstrap } clone.setMilliseconds(0); } - else if (this.scale == TimeStep.SCALE.SECOND) { + else if (this.scale == 'second') { //noinspection FallthroughInSwitchStatementJS switch (this.step) { case 15: @@ -8915,7 +8938,7 @@ return /******/ (function(modules) { // webpackBootstrap clone.setMilliseconds(Math.round(clone.getMilliseconds() / 500) * 500); break; } } - else if (this.scale == TimeStep.SCALE.MILLISECOND) { + else if (this.scale == 'millisecond') { var step = this.step > 5 ? this.step / 2 : 1; clone.setMilliseconds(Math.round(clone.getMilliseconds() / step) * step); } @@ -8932,14 +8955,14 @@ return /******/ (function(modules) { // webpackBootstrap if (this.switchedYear == true) { this.switchedYear = false; switch (this.scale) { - case TimeStep.SCALE.YEAR: - case TimeStep.SCALE.MONTH: - case TimeStep.SCALE.WEEKDAY: - case TimeStep.SCALE.DAY: - case TimeStep.SCALE.HOUR: - case TimeStep.SCALE.MINUTE: - case TimeStep.SCALE.SECOND: - case TimeStep.SCALE.MILLISECOND: + case 'year': + case 'month': + case 'weekday': + case 'day': + case 'hour': + case 'minute': + case 'second': + case 'millisecond': return true; default: return false; @@ -8948,12 +8971,12 @@ return /******/ (function(modules) { // webpackBootstrap else if (this.switchedMonth == true) { this.switchedMonth = false; switch (this.scale) { - case TimeStep.SCALE.WEEKDAY: - case TimeStep.SCALE.DAY: - case TimeStep.SCALE.HOUR: - case TimeStep.SCALE.MINUTE: - case TimeStep.SCALE.SECOND: - case TimeStep.SCALE.MILLISECOND: + case 'weekday': + case 'day': + case 'hour': + case 'minute': + case 'second': + case 'millisecond': return true; default: return false; @@ -8962,10 +8985,10 @@ return /******/ (function(modules) { // webpackBootstrap else if (this.switchedDay == true) { this.switchedDay = false; switch (this.scale) { - case TimeStep.SCALE.MILLISECOND: - case TimeStep.SCALE.SECOND: - case TimeStep.SCALE.MINUTE: - case TimeStep.SCALE.HOUR: + case 'millisecond': + case 'second': + case 'minute': + case 'hour': return true; default: return false; @@ -8973,20 +8996,20 @@ return /******/ (function(modules) { // webpackBootstrap } switch (this.scale) { - case TimeStep.SCALE.MILLISECOND: + case 'millisecond': return (this.current.getMilliseconds() == 0); - case TimeStep.SCALE.SECOND: + case 'second': return (this.current.getSeconds() == 0); - case TimeStep.SCALE.MINUTE: + case 'minute': return (this.current.getHours() == 0) && (this.current.getMinutes() == 0); - case TimeStep.SCALE.HOUR: + case 'hour': return (this.current.getHours() == 0); - case TimeStep.SCALE.WEEKDAY: // intentional fall through - case TimeStep.SCALE.DAY: + case 'weekday': // intentional fall through + case 'day': return (this.current.getDate() == 1); - case TimeStep.SCALE.MONTH: + case 'month': return (this.current.getMonth() == 0); - case TimeStep.SCALE.YEAR: + case 'year': return false; default: return false; @@ -9005,20 +9028,10 @@ return /******/ (function(modules) { // webpackBootstrap date = this.current; } - switch (this.scale) { - case TimeStep.SCALE.MILLISECOND: return moment(date).format('SSS'); - case TimeStep.SCALE.SECOND: return moment(date).format('s'); - case TimeStep.SCALE.MINUTE: return moment(date).format('HH:mm'); - case TimeStep.SCALE.HOUR: return moment(date).format('HH:mm'); - case TimeStep.SCALE.WEEKDAY: return moment(date).format('ddd D'); - case TimeStep.SCALE.DAY: return moment(date).format('D'); - case TimeStep.SCALE.MONTH: return moment(date).format('MMM'); - case TimeStep.SCALE.YEAR: return moment(date).format('YYYY'); - default: return ''; - } + var format = this.format.minorLabels[this.scale]; + return (format && format.length > 0) ? moment(date).format(format) : ''; }; - /** * Returns formatted text for the major axis label, depending on the current * date and the scale. For example when scale is MINUTE, the major scale is @@ -9030,18 +9043,8 @@ return /******/ (function(modules) { // webpackBootstrap date = this.current; } - //noinspection FallthroughInSwitchStatementJS - switch (this.scale) { - case TimeStep.SCALE.MILLISECOND:return moment(date).format('HH:mm:ss'); - case TimeStep.SCALE.SECOND: return moment(date).format('D MMMM HH:mm'); - case TimeStep.SCALE.MINUTE: - case TimeStep.SCALE.HOUR: return moment(date).format('ddd D MMMM'); - case TimeStep.SCALE.WEEKDAY: - case TimeStep.SCALE.DAY: return moment(date).format('MMMM YYYY'); - case TimeStep.SCALE.MONTH: return moment(date).format('YYYY'); - case TimeStep.SCALE.YEAR: return ''; - default: return ''; - } + var format = this.format.majorLabels[this.scale]; + return (format && format.length > 0) ? moment(date).format(format) : ''; }; module.exports = TimeStep; @@ -13741,7 +13744,8 @@ return /******/ (function(modules) { // webpackBootstrap orientation: 'bottom', // supported: 'top', 'bottom' // TODO: implement timeaxis orientations 'left' and 'right' showMinorLabels: true, - showMajorLabels: true + showMajorLabels: true, + format: null }; this.options = util.extend({}, this.defaultOptions); @@ -13766,7 +13770,7 @@ return /******/ (function(modules) { // webpackBootstrap TimeAxis.prototype.setOptions = function(options) { if (options) { // copy all options that we know - util.selectiveExtend(['orientation', 'showMinorLabels', 'showMajorLabels','hiddenDates'], this.options, options); + util.selectiveExtend(['orientation', 'showMinorLabels', 'showMajorLabels','hiddenDates', 'format'], this.options, options); // apply locale to moment.js // TODO: not so nice, this is applied globally to moment.js @@ -13883,8 +13887,10 @@ return /******/ (function(modules) { // webpackBootstrap var minimumStep = timeLabelsize - DateUtil.getHiddenDurationBefore(this.body.hiddenDates, this.body.range, timeLabelsize); minimumStep -= this.body.util.toTime(0).valueOf(); - var step = new TimeStep(new Date(start), new Date(end), minimumStep, this.body.hiddenDates); + if (this.options.format) { + step.setFormat(this.options.format); + } this.step = step; // Move all DOM elements to a "redundant" list, where they @@ -26747,2470 +26753,2168 @@ return /******/ (function(modules) { // webpackBootstrap /* 59 */ /***/ function(module, exports, __webpack_require__) { - var __WEBPACK_AMD_DEFINE_RESULT__;/*! Hammer.JS - v2.0.4 - 2014-09-28 - * http://hammerjs.github.io/ + var __WEBPACK_AMD_DEFINE_RESULT__;/*! Hammer.JS - v1.1.3 - 2014-05-20 + * http://eightmedia.github.io/hammer.js * - * Copyright (c) 2014 Jorik Tangelder; + * Copyright (c) 2014 Jorik Tangelder ; * Licensed under the MIT license */ - (function(window, document, exportName, undefined) { - 'use strict'; - - var VENDOR_PREFIXES = ['', 'webkit', 'moz', 'MS', 'ms', 'o']; - var TEST_ELEMENT = document.createElement('div'); - var TYPE_FUNCTION = 'function'; - - var round = Math.round; - var abs = Math.abs; - var now = Date.now; + (function(window, undefined) { + 'use strict'; /** - * set a timeout with a given scope - * @param {Function} fn - * @param {Number} timeout - * @param {Object} context - * @returns {number} + * @main + * @module hammer + * + * @class Hammer + * @static */ - function setTimeoutContext(fn, timeout, context) { - return setTimeout(bindFn(fn, context), timeout); - } /** - * if the argument is an array, we want to execute the fn on each entry - * if it aint an array we don't want to do a thing. - * this is used by all the methods that accept a single and array argument. - * @param {*|Array} arg - * @param {String} fn - * @param {Object} [context] - * @returns {Boolean} + * Hammer, use this to create instances + * ```` + * var hammertime = new Hammer(myElement); + * ```` + * + * @method Hammer + * @param {HTMLElement} element + * @param {Object} [options={}] + * @return {Hammer.Instance} */ - function invokeArrayArg(arg, fn, context) { - if (Array.isArray(arg)) { - each(arg, context[fn], context); - return true; - } - return false; - } + var Hammer = function Hammer(element, options) { + return new Hammer.Instance(element, options || {}); + }; /** - * walk objects and arrays - * @param {Object} obj - * @param {Function} iterator - * @param {Object} context + * version, as defined in package.json + * the value will be set at each build + * @property VERSION + * @final + * @type {String} */ - function each(obj, iterator, context) { - var i; - - if (!obj) { - return; - } - - if (obj.forEach) { - obj.forEach(iterator, context); - } else if (obj.length !== undefined) { - i = 0; - while (i < obj.length) { - iterator.call(context, obj[i], i, obj); - i++; - } - } else { - for (i in obj) { - obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj); - } - } - } + Hammer.VERSION = '1.1.3'; /** - * extend object. - * means that properties in dest will be overwritten by the ones in src. - * @param {Object} dest - * @param {Object} src - * @param {Boolean} [merge] - * @returns {Object} dest + * default settings. + * more settings are defined per gesture at `/gestures`. Each gesture can be disabled/enabled + * by setting it's name (like `swipe`) to false. + * You can set the defaults for all instances by changing this object before creating an instance. + * @example + * ```` + * Hammer.defaults.drag = false; + * Hammer.defaults.behavior.touchAction = 'pan-y'; + * delete Hammer.defaults.behavior.userSelect; + * ```` + * @property defaults + * @type {Object} */ - function extend(dest, src, merge) { - var keys = Object.keys(src); - var i = 0; - while (i < keys.length) { - if (!merge || (merge && dest[keys[i]] === undefined)) { - dest[keys[i]] = src[keys[i]]; - } - i++; - } - return dest; - } + Hammer.defaults = { + /** + * this setting object adds styles and attributes to the element to prevent the browser from doing + * its native behavior. The css properties are auto prefixed for the browsers when needed. + * @property defaults.behavior + * @type {Object} + */ + behavior: { + /** + * Disables text selection to improve the dragging gesture. When the value is `none` it also sets + * `onselectstart=false` for IE on the element. Mainly for desktop browsers. + * @property defaults.behavior.userSelect + * @type {String} + * @default 'none' + */ + userSelect: 'none', - /** - * merge the values from src in the dest. - * means that properties that exist in dest will not be overwritten by src - * @param {Object} dest - * @param {Object} src - * @returns {Object} dest - */ - function merge(dest, src) { - return extend(dest, src, true); - } + /** + * Specifies whether and how a given region can be manipulated by the user (for instance, by panning or zooming). + * Used by Chrome 35> and IE10>. By default this makes the element blocking any touch event. + * @property defaults.behavior.touchAction + * @type {String} + * @default: 'pan-y' + */ + touchAction: 'pan-y', - /** - * simple class inheritance - * @param {Function} child - * @param {Function} base - * @param {Object} [properties] - */ - function inherit(child, base, properties) { - var baseP = base.prototype, - childP; + /** + * Disables the default callout shown when you touch and hold a touch target. + * On iOS, when you touch and hold a touch target such as a link, Safari displays + * a callout containing information about the link. This property allows you to disable that callout. + * @property defaults.behavior.touchCallout + * @type {String} + * @default 'none' + */ + touchCallout: 'none', + + /** + * Specifies whether zooming is enabled. Used by IE10> + * @property defaults.behavior.contentZooming + * @type {String} + * @default 'none' + */ + contentZooming: 'none', - childP = child.prototype = Object.create(baseP); - childP.constructor = child; - childP._super = baseP; + /** + * Specifies that an entire element should be draggable instead of its contents. + * Mainly for desktop browsers. + * @property defaults.behavior.userDrag + * @type {String} + * @default 'none' + */ + userDrag: 'none', - if (properties) { - extend(childP, properties); + /** + * Overrides the highlight color shown when the user taps a link or a JavaScript + * clickable element in Safari on iPhone. This property obeys the alpha value, if specified. + * + * If you don't specify an alpha value, Safari on iPhone applies a default alpha value + * to the color. To disable tap highlighting, set the alpha value to 0 (invisible). + * If you set the alpha value to 1.0 (opaque), the element is not visible when tapped. + * @property defaults.behavior.tapHighlightColor + * @type {String} + * @default 'rgba(0,0,0,0)' + */ + tapHighlightColor: 'rgba(0,0,0,0)' } - } + }; /** - * simple function bind - * @param {Function} fn - * @param {Object} context - * @returns {Function} + * hammer document where the base events are added at + * @property DOCUMENT + * @type {HTMLElement} + * @default window.document */ - function bindFn(fn, context) { - return function boundFn() { - return fn.apply(context, arguments); - }; - } + Hammer.DOCUMENT = document; /** - * let a boolean value also be a function that must return a boolean - * this first item in args will be used as the context - * @param {Boolean|Function} val - * @param {Array} [args] - * @returns {Boolean} + * detect support for pointer events + * @property HAS_POINTEREVENTS + * @type {Boolean} */ - function boolOrFn(val, args) { - if (typeof val == TYPE_FUNCTION) { - return val.apply(args ? args[0] || undefined : undefined, args); - } - return val; - } + Hammer.HAS_POINTEREVENTS = navigator.pointerEnabled || navigator.msPointerEnabled; /** - * use the val2 when val1 is undefined - * @param {*} val1 - * @param {*} val2 - * @returns {*} + * detect support for touch events + * @property HAS_TOUCHEVENTS + * @type {Boolean} */ - function ifUndefined(val1, val2) { - return (val1 === undefined) ? val2 : val1; - } + Hammer.HAS_TOUCHEVENTS = ('ontouchstart' in window); /** - * addEventListener with multiple events at once - * @param {EventTarget} target - * @param {String} types - * @param {Function} handler + * detect mobile browsers + * @property IS_MOBILE + * @type {Boolean} */ - function addEventListeners(target, types, handler) { - each(splitStr(types), function(type) { - target.addEventListener(type, handler, false); - }); - } + Hammer.IS_MOBILE = /mobile|tablet|ip(ad|hone|od)|android|silk/i.test(navigator.userAgent); /** - * removeEventListener with multiple events at once - * @param {EventTarget} target - * @param {String} types - * @param {Function} handler + * detect if we want to support mouseevents at all + * @property NO_MOUSEEVENTS + * @type {Boolean} */ - function removeEventListeners(target, types, handler) { - each(splitStr(types), function(type) { - target.removeEventListener(type, handler, false); - }); - } + Hammer.NO_MOUSEEVENTS = (Hammer.HAS_TOUCHEVENTS && Hammer.IS_MOBILE) || Hammer.HAS_POINTEREVENTS; /** - * find if a node is in the given parent - * @method hasParent - * @param {HTMLElement} node - * @param {HTMLElement} parent - * @return {Boolean} found + * interval in which Hammer recalculates current velocity/direction/angle in ms + * @property CALCULATE_INTERVAL + * @type {Number} + * @default 25 */ - function hasParent(node, parent) { - while (node) { - if (node == parent) { - return true; - } - node = node.parentNode; - } - return false; - } + Hammer.CALCULATE_INTERVAL = 25; /** - * small indexOf wrapper - * @param {String} str - * @param {String} find - * @returns {Boolean} found + * eventtypes per touchevent (start, move, end) are filled by `Event.determineEventTypes` on `setup` + * the object contains the DOM event names per type (`EVENT_START`, `EVENT_MOVE`, `EVENT_END`) + * @property EVENT_TYPES + * @private + * @writeOnce + * @type {Object} */ - function inStr(str, find) { - return str.indexOf(find) > -1; - } + var EVENT_TYPES = {}; /** - * split string on whitespace - * @param {String} str - * @returns {Array} words + * direction strings, for safe comparisons + * @property DIRECTION_DOWN|LEFT|UP|RIGHT + * @final + * @type {String} + * @default 'down' 'left' 'up' 'right' */ - function splitStr(str) { - return str.trim().split(/\s+/g); - } + var DIRECTION_DOWN = Hammer.DIRECTION_DOWN = 'down'; + var DIRECTION_LEFT = Hammer.DIRECTION_LEFT = 'left'; + var DIRECTION_UP = Hammer.DIRECTION_UP = 'up'; + var DIRECTION_RIGHT = Hammer.DIRECTION_RIGHT = 'right'; /** - * find if a array contains the object using indexOf or a simple polyFill - * @param {Array} src - * @param {String} find - * @param {String} [findByKey] - * @return {Boolean|Number} false when not found, or the index + * pointertype strings, for safe comparisons + * @property POINTER_MOUSE|TOUCH|PEN + * @final + * @type {String} + * @default 'mouse' 'touch' 'pen' */ - function inArray(src, find, findByKey) { - if (src.indexOf && !findByKey) { - return src.indexOf(find); - } else { - var i = 0; - while (i < src.length) { - if ((findByKey && src[i][findByKey] == find) || (!findByKey && src[i] === find)) { - return i; - } - i++; - } - return -1; - } - } + var POINTER_MOUSE = Hammer.POINTER_MOUSE = 'mouse'; + var POINTER_TOUCH = Hammer.POINTER_TOUCH = 'touch'; + var POINTER_PEN = Hammer.POINTER_PEN = 'pen'; /** - * convert array-like objects to real arrays - * @param {Object} obj - * @returns {Array} + * eventtypes + * @property EVENT_START|MOVE|END|RELEASE|TOUCH + * @final + * @type {String} + * @default 'start' 'change' 'move' 'end' 'release' 'touch' */ - function toArray(obj) { - return Array.prototype.slice.call(obj, 0); - } + var EVENT_START = Hammer.EVENT_START = 'start'; + var EVENT_MOVE = Hammer.EVENT_MOVE = 'move'; + var EVENT_END = Hammer.EVENT_END = 'end'; + var EVENT_RELEASE = Hammer.EVENT_RELEASE = 'release'; + var EVENT_TOUCH = Hammer.EVENT_TOUCH = 'touch'; /** - * unique array with objects based on a key (like 'id') or just by the array's value - * @param {Array} src [{id:1},{id:2},{id:1}] - * @param {String} [key] - * @param {Boolean} [sort=False] - * @returns {Array} [{id:1},{id:2}] + * if the window events are set... + * @property READY + * @writeOnce + * @type {Boolean} + * @default false */ - function uniqueArray(src, key, sort) { - var results = []; - var values = []; - var i = 0; - - while (i < src.length) { - var val = key ? src[i][key] : src[i]; - if (inArray(values, val) < 0) { - results.push(src[i]); - } - values[i] = val; - i++; - } - - if (sort) { - if (!key) { - results = results.sort(); - } else { - results = results.sort(function sortUniqueArray(a, b) { - return a[key] > b[key]; - }); - } - } - - return results; - } + Hammer.READY = false; /** - * get the prefixed property - * @param {Object} obj - * @param {String} property - * @returns {String|Undefined} prefixed + * plugins namespace + * @property plugins + * @type {Object} */ - function prefixed(obj, property) { - var prefix, prop; - var camelProp = property[0].toUpperCase() + property.slice(1); - - var i = 0; - while (i < VENDOR_PREFIXES.length) { - prefix = VENDOR_PREFIXES[i]; - prop = (prefix) ? prefix + camelProp : property; - - if (prop in obj) { - return prop; - } - i++; - } - return undefined; - } + Hammer.plugins = Hammer.plugins || {}; /** - * get a unique id - * @returns {number} uniqueId + * gestures namespace + * see `/gestures` for the definitions + * @property gestures + * @type {Object} */ - var _uniqueId = 1; - function uniqueId() { - return _uniqueId++; - } + Hammer.gestures = Hammer.gestures || {}; /** - * get the window object of an element - * @param {HTMLElement} element - * @returns {DocumentView|Window} + * setup events to detect gestures on the document + * this function is called when creating an new instance + * @private */ - function getWindowForElement(element) { - var doc = element.ownerDocument; - return (doc.defaultView || doc.parentWindow); - } - - var MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i; - - var SUPPORT_TOUCH = ('ontouchstart' in window); - var SUPPORT_POINTER_EVENTS = prefixed(window, 'PointerEvent') !== undefined; - var SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent); - - var INPUT_TYPE_TOUCH = 'touch'; - var INPUT_TYPE_PEN = 'pen'; - var INPUT_TYPE_MOUSE = 'mouse'; - var INPUT_TYPE_KINECT = 'kinect'; - - var COMPUTE_INTERVAL = 25; + function setup() { + if(Hammer.READY) { + return; + } - var INPUT_START = 1; - var INPUT_MOVE = 2; - var INPUT_END = 4; - var INPUT_CANCEL = 8; + // find what eventtypes we add listeners to + Event.determineEventTypes(); - var DIRECTION_NONE = 1; - var DIRECTION_LEFT = 2; - var DIRECTION_RIGHT = 4; - var DIRECTION_UP = 8; - var DIRECTION_DOWN = 16; + // Register all gestures inside Hammer.gestures + Utils.each(Hammer.gestures, function(gesture) { + Detection.register(gesture); + }); - var DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT; - var DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN; - var DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL; + // Add touch events on the document + Event.onTouch(Hammer.DOCUMENT, EVENT_MOVE, Detection.detect); + Event.onTouch(Hammer.DOCUMENT, EVENT_END, Detection.detect); - var PROPS_XY = ['x', 'y']; - var PROPS_CLIENT_XY = ['clientX', 'clientY']; + // Hammer is ready...! + Hammer.READY = true; + } /** - * create new input type manager - * @param {Manager} manager - * @param {Function} callback - * @returns {Input} - * @constructor + * @module hammer + * + * @class Utils + * @static */ - function Input(manager, callback) { - var self = this; - this.manager = manager; - this.callback = callback; - this.element = manager.element; - this.target = manager.options.inputTarget; - - // smaller wrapper around the handler, for the scope and the enabled state of the manager, - // so when disabled the input events are completely bypassed. - this.domHandler = function(ev) { - if (boolOrFn(manager.options.enable, [manager])) { - self.handler(ev); + var Utils = Hammer.utils = { + /** + * extend method, could also be used for cloning when `dest` is an empty object. + * changes the dest object + * @method extend + * @param {Object} dest + * @param {Object} src + * @param {Boolean} [merge=false] do a merge + * @return {Object} dest + */ + extend: function extend(dest, src, merge) { + for(var key in src) { + if(!src.hasOwnProperty(key) || (dest[key] !== undefined && merge)) { + continue; + } + dest[key] = src[key]; } - }; - - this.init(); + return dest; + }, - } + /** + * simple addEventListener wrapper + * @method on + * @param {HTMLElement} element + * @param {String} type + * @param {Function} handler + */ + on: function on(element, type, handler) { + element.addEventListener(type, handler, false); + }, - Input.prototype = { /** - * should handle the inputEvent data and trigger the callback - * @virtual + * simple removeEventListener wrapper + * @method off + * @param {HTMLElement} element + * @param {String} type + * @param {Function} handler */ - handler: function() { }, + off: function off(element, type, handler) { + element.removeEventListener(type, handler, false); + }, /** - * bind the events + * forEach over arrays and objects + * @method each + * @param {Object|Array} obj + * @param {Function} iterator + * @param {any} iterator.item + * @param {Number} iterator.index + * @param {Object|Array} iterator.obj the source object + * @param {Object} context value to use as `this` in the iterator */ - init: function() { - this.evEl && addEventListeners(this.element, this.evEl, this.domHandler); - this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler); - this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler); + each: function each(obj, iterator, context) { + var i, len; + + // native forEach on arrays + if('forEach' in obj) { + obj.forEach(iterator, context); + // arrays + } else if(obj.length !== undefined) { + for(i = 0, len = obj.length; i < len; i++) { + if(iterator.call(context, obj[i], i, obj) === false) { + return; + } + } + // objects + } else { + for(i in obj) { + if(obj.hasOwnProperty(i) && + iterator.call(context, obj[i], i, obj) === false) { + return; + } + } + } }, /** - * unbind the events + * find if a string contains the string using indexOf + * @method inStr + * @param {String} src + * @param {String} find + * @return {Boolean} found */ - destroy: function() { - this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler); - this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler); - this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler); - } - }; + inStr: function inStr(src, find) { + return src.indexOf(find) > -1; + }, - /** - * create new input type manager - * called by the Manager constructor - * @param {Hammer} manager - * @returns {Input} - */ - function createInputInstance(manager) { - var Type; - var inputClass = manager.options.inputClass; + /** + * find if a array contains the object using indexOf or a simple polyfill + * @method inArray + * @param {String} src + * @param {String} find + * @return {Boolean|Number} false when not found, or the index + */ + inArray: function inArray(src, find) { + if(src.indexOf) { + var index = src.indexOf(find); + return (index === -1) ? false : index; + } else { + for(var i = 0, len = src.length; i < len; i++) { + if(src[i] === find) { + return i; + } + } + return false; + } + }, - if (inputClass) { - Type = inputClass; - } else if (SUPPORT_POINTER_EVENTS) { - Type = PointerEventInput; - } else if (SUPPORT_ONLY_TOUCH) { - Type = TouchInput; - } else if (!SUPPORT_TOUCH) { - Type = MouseInput; - } else { - Type = TouchMouseInput; - } - return new (Type)(manager, inputHandler); - } + /** + * convert an array-like object (`arguments`, `touchlist`) to an array + * @method toArray + * @param {Object} obj + * @return {Array} + */ + toArray: function toArray(obj) { + return Array.prototype.slice.call(obj, 0); + }, - /** - * handle input events - * @param {Manager} manager - * @param {String} eventType - * @param {Object} input - */ - function inputHandler(manager, eventType, input) { - var pointersLen = input.pointers.length; - var changedPointersLen = input.changedPointers.length; - var isFirst = (eventType & INPUT_START && (pointersLen - changedPointersLen === 0)); - var isFinal = (eventType & (INPUT_END | INPUT_CANCEL) && (pointersLen - changedPointersLen === 0)); + /** + * find if a node is in the given parent + * @method hasParent + * @param {HTMLElement} node + * @param {HTMLElement} parent + * @return {Boolean} found + */ + hasParent: function hasParent(node, parent) { + while(node) { + if(node == parent) { + return true; + } + node = node.parentNode; + } + return false; + }, - input.isFirst = !!isFirst; - input.isFinal = !!isFinal; + /** + * get the center of all the touches + * @method getCenter + * @param {Array} touches + * @return {Object} center contains `pageX`, `pageY`, `clientX` and `clientY` properties + */ + getCenter: function getCenter(touches) { + var pageX = [], + pageY = [], + clientX = [], + clientY = [], + min = Math.min, + max = Math.max; + + // no need to loop when only one touch + if(touches.length === 1) { + return { + pageX: touches[0].pageX, + pageY: touches[0].pageY, + clientX: touches[0].clientX, + clientY: touches[0].clientY + }; + } - if (isFirst) { - manager.session = {}; - } + Utils.each(touches, function(touch) { + pageX.push(touch.pageX); + pageY.push(touch.pageY); + clientX.push(touch.clientX); + clientY.push(touch.clientY); + }); - // source event is the normalized value of the domEvents - // like 'touchstart, mouseup, pointerdown' - input.eventType = eventType; + return { + pageX: (min.apply(Math, pageX) + max.apply(Math, pageX)) / 2, + pageY: (min.apply(Math, pageY) + max.apply(Math, pageY)) / 2, + clientX: (min.apply(Math, clientX) + max.apply(Math, clientX)) / 2, + clientY: (min.apply(Math, clientY) + max.apply(Math, clientY)) / 2 + }; + }, - // compute scale, rotation etc - computeInputData(manager, input); + /** + * calculate the velocity between two points. unit is in px per ms. + * @method getVelocity + * @param {Number} deltaTime + * @param {Number} deltaX + * @param {Number} deltaY + * @return {Object} velocity `x` and `y` + */ + getVelocity: function getVelocity(deltaTime, deltaX, deltaY) { + return { + x: Math.abs(deltaX / deltaTime) || 0, + y: Math.abs(deltaY / deltaTime) || 0 + }; + }, - // emit secret event - manager.emit('hammer.input', input); + /** + * calculate the angle between two coordinates + * @method getAngle + * @param {Touch} touch1 + * @param {Touch} touch2 + * @return {Number} angle + */ + getAngle: function getAngle(touch1, touch2) { + var x = touch2.clientX - touch1.clientX, + y = touch2.clientY - touch1.clientY; - manager.recognize(input); - manager.session.prevInput = input; - } + return Math.atan2(y, x) * 180 / Math.PI; + }, - /** - * extend the data with some usable properties like scale, rotate, velocity etc - * @param {Object} manager - * @param {Object} input - */ - function computeInputData(manager, input) { - var session = manager.session; - var pointers = input.pointers; - var pointersLength = pointers.length; + /** + * do a small comparision to get the direction between two touches. + * @method getDirection + * @param {Touch} touch1 + * @param {Touch} touch2 + * @return {String} direction matches `DIRECTION_LEFT|RIGHT|UP|DOWN` + */ + getDirection: function getDirection(touch1, touch2) { + var x = Math.abs(touch1.clientX - touch2.clientX), + y = Math.abs(touch1.clientY - touch2.clientY); - // store the first input to calculate the distance and direction - if (!session.firstInput) { - session.firstInput = simpleCloneInputData(input); - } + if(x >= y) { + return touch1.clientX - touch2.clientX > 0 ? DIRECTION_LEFT : DIRECTION_RIGHT; + } + return touch1.clientY - touch2.clientY > 0 ? DIRECTION_UP : DIRECTION_DOWN; + }, - // to compute scale and rotation we need to store the multiple touches - if (pointersLength > 1 && !session.firstMultiple) { - session.firstMultiple = simpleCloneInputData(input); - } else if (pointersLength === 1) { - session.firstMultiple = false; - } + /** + * calculate the distance between two touches + * @method getDistance + * @param {Touch}touch1 + * @param {Touch} touch2 + * @return {Number} distance + */ + getDistance: function getDistance(touch1, touch2) { + var x = touch2.clientX - touch1.clientX, + y = touch2.clientY - touch1.clientY; - var firstInput = session.firstInput; - var firstMultiple = session.firstMultiple; - var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center; + return Math.sqrt((x * x) + (y * y)); + }, - var center = input.center = getCenter(pointers); - input.timeStamp = now(); - input.deltaTime = input.timeStamp - firstInput.timeStamp; + /** + * calculate the scale factor between two touchLists + * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out + * @method getScale + * @param {Array} start array of touches + * @param {Array} end array of touches + * @return {Number} scale + */ + getScale: function getScale(start, end) { + // need two fingers... + if(start.length >= 2 && end.length >= 2) { + return this.getDistance(end[0], end[1]) / this.getDistance(start[0], start[1]); + } + return 1; + }, - input.angle = getAngle(offsetCenter, center); - input.distance = getDistance(offsetCenter, center); + /** + * calculate the rotation degrees between two touchLists + * @method getRotation + * @param {Array} start array of touches + * @param {Array} end array of touches + * @return {Number} rotation + */ + getRotation: function getRotation(start, end) { + // need two fingers + if(start.length >= 2 && end.length >= 2) { + return this.getAngle(end[1], end[0]) - this.getAngle(start[1], start[0]); + } + return 0; + }, - computeDeltaXY(session, input); - input.offsetDirection = getDirection(input.deltaX, input.deltaY); + /** + * find out if the direction is vertical * + * @method isVertical + * @param {String} direction matches `DIRECTION_UP|DOWN` + * @return {Boolean} is_vertical + */ + isVertical: function isVertical(direction) { + return direction == DIRECTION_UP || direction == DIRECTION_DOWN; + }, - input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1; - input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0; + /** + * set css properties with their prefixes + * @param {HTMLElement} element + * @param {String} prop + * @param {String} value + * @param {Boolean} [toggle=true] + * @return {Boolean} + */ + setPrefixedCss: function setPrefixedCss(element, prop, value, toggle) { + var prefixes = ['', 'Webkit', 'Moz', 'O', 'ms']; + prop = Utils.toCamelCase(prop); + + for(var i = 0; i < prefixes.length; i++) { + var p = prop; + // prefixes + if(prefixes[i]) { + p = prefixes[i] + p.slice(0, 1).toUpperCase() + p.slice(1); + } - computeIntervalInputData(session, input); + // test the style + if(p in element.style) { + element.style[p] = (toggle == null || toggle) && value || ''; + break; + } + } + }, - // find the correct target - var target = manager.element; - if (hasParent(input.srcEvent.target, target)) { - target = input.srcEvent.target; - } - input.target = target; - } - - function computeDeltaXY(session, input) { - var center = input.center; - var offset = session.offsetDelta || {}; - var prevDelta = session.prevDelta || {}; - var prevInput = session.prevInput || {}; - - if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) { - prevDelta = session.prevDelta = { - x: prevInput.deltaX || 0, - y: prevInput.deltaY || 0 - }; - - offset = session.offsetDelta = { - x: center.x, - y: center.y - }; - } - - input.deltaX = prevDelta.x + (center.x - offset.x); - input.deltaY = prevDelta.y + (center.y - offset.y); - } - - /** - * velocity is calculated every x ms - * @param {Object} session - * @param {Object} input - */ - function computeIntervalInputData(session, input) { - var last = session.lastInterval || input, - deltaTime = input.timeStamp - last.timeStamp, - velocity, velocityX, velocityY, direction; - - if (input.eventType != INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) { - var deltaX = last.deltaX - input.deltaX; - var deltaY = last.deltaY - input.deltaY; - - var v = getVelocity(deltaTime, deltaX, deltaY); - velocityX = v.x; - velocityY = v.y; - velocity = (abs(v.x) > abs(v.y)) ? v.x : v.y; - direction = getDirection(deltaX, deltaY); - - session.lastInterval = input; - } else { - // use latest velocity info if it doesn't overtake a minimum period - velocity = last.velocity; - velocityX = last.velocityX; - velocityY = last.velocityY; - direction = last.direction; - } - - input.velocity = velocity; - input.velocityX = velocityX; - input.velocityY = velocityY; - input.direction = direction; - } - - /** - * create a simple clone from the input used for storage of firstInput and firstMultiple - * @param {Object} input - * @returns {Object} clonedInputData - */ - function simpleCloneInputData(input) { - // make a simple copy of the pointers because we will get a reference if we don't - // we only need clientXY for the calculations - var pointers = []; - var i = 0; - while (i < input.pointers.length) { - pointers[i] = { - clientX: round(input.pointers[i].clientX), - clientY: round(input.pointers[i].clientY) - }; - i++; - } - - return { - timeStamp: now(), - pointers: pointers, - center: getCenter(pointers), - deltaX: input.deltaX, - deltaY: input.deltaY - }; - } + /** + * toggle browser default behavior by setting css properties. + * `userSelect='none'` also sets `element.onselectstart` to false + * `userDrag='none'` also sets `element.ondragstart` to false + * + * @method toggleBehavior + * @param {HtmlElement} element + * @param {Object} props + * @param {Boolean} [toggle=true] + */ + toggleBehavior: function toggleBehavior(element, props, toggle) { + if(!props || !element || !element.style) { + return; + } - /** - * get the center of all the pointers - * @param {Array} pointers - * @return {Object} center contains `x` and `y` properties - */ - function getCenter(pointers) { - var pointersLength = pointers.length; + // set the css properties + Utils.each(props, function(value, prop) { + Utils.setPrefixedCss(element, prop, value, toggle); + }); - // no need to loop when only one touch - if (pointersLength === 1) { - return { - x: round(pointers[0].clientX), - y: round(pointers[0].clientY) + var falseFn = toggle && function() { + return false; }; - } - - var x = 0, y = 0, i = 0; - while (i < pointersLength) { - x += pointers[i].clientX; - y += pointers[i].clientY; - i++; - } - - return { - x: round(x / pointersLength), - y: round(y / pointersLength) - }; - } - - /** - * calculate the velocity between two points. unit is in px per ms. - * @param {Number} deltaTime - * @param {Number} x - * @param {Number} y - * @return {Object} velocity `x` and `y` - */ - function getVelocity(deltaTime, x, y) { - return { - x: x / deltaTime || 0, - y: y / deltaTime || 0 - }; - } - /** - * get the direction between two points - * @param {Number} x - * @param {Number} y - * @return {Number} direction - */ - function getDirection(x, y) { - if (x === y) { - return DIRECTION_NONE; - } - - if (abs(x) >= abs(y)) { - return x > 0 ? DIRECTION_LEFT : DIRECTION_RIGHT; - } - return y > 0 ? DIRECTION_UP : DIRECTION_DOWN; - } - - /** - * calculate the absolute distance between two points - * @param {Object} p1 {x, y} - * @param {Object} p2 {x, y} - * @param {Array} [props] containing x and y keys - * @return {Number} distance - */ - function getDistance(p1, p2, props) { - if (!props) { - props = PROPS_XY; - } - var x = p2[props[0]] - p1[props[0]], - y = p2[props[1]] - p1[props[1]]; - - return Math.sqrt((x * x) + (y * y)); - } + // also the disable onselectstart + if(props.userSelect == 'none') { + element.onselectstart = falseFn; + } + // and disable ondragstart + if(props.userDrag == 'none') { + element.ondragstart = falseFn; + } + }, - /** - * calculate the angle between two coordinates - * @param {Object} p1 - * @param {Object} p2 - * @param {Array} [props] containing x and y keys - * @return {Number} angle - */ - function getAngle(p1, p2, props) { - if (!props) { - props = PROPS_XY; + /** + * convert a string with underscores to camelCase + * so prevent_default becomes preventDefault + * @param {String} str + * @return {String} camelCaseStr + */ + toCamelCase: function toCamelCase(str) { + return str.replace(/[_-]([a-z])/g, function(s) { + return s[1].toUpperCase(); + }); } - var x = p2[props[0]] - p1[props[0]], - y = p2[props[1]] - p1[props[1]]; - return Math.atan2(y, x) * 180 / Math.PI; - } + }; - /** - * calculate the rotation degrees between two pointersets - * @param {Array} start array of pointers - * @param {Array} end array of pointers - * @return {Number} rotation - */ - function getRotation(start, end) { - return getAngle(end[1], end[0], PROPS_CLIENT_XY) - getAngle(start[1], start[0], PROPS_CLIENT_XY); - } /** - * calculate the scale factor between two pointersets - * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out - * @param {Array} start array of pointers - * @param {Array} end array of pointers - * @return {Number} scale + * @module hammer */ - function getScale(start, end) { - return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY); - } - - var MOUSE_INPUT_MAP = { - mousedown: INPUT_START, - mousemove: INPUT_MOVE, - mouseup: INPUT_END - }; - - var MOUSE_ELEMENT_EVENTS = 'mousedown'; - var MOUSE_WINDOW_EVENTS = 'mousemove mouseup'; - /** - * Mouse events input - * @constructor - * @extends Input + * @class Event + * @static */ - function MouseInput() { - this.evEl = MOUSE_ELEMENT_EVENTS; - this.evWin = MOUSE_WINDOW_EVENTS; - - this.allow = true; // used by Input.TouchMouse to disable mouse events - this.pressed = false; // mousedown state - - Input.apply(this, arguments); - } + var Event = Hammer.event = { + /** + * when touch events have been fired, this is true + * this is used to stop mouse events + * @property prevent_mouseevents + * @private + * @type {Boolean} + */ + preventMouseEvents: false, - inherit(MouseInput, Input, { /** - * handle mouse events - * @param {Object} ev + * if EVENT_START has been fired + * @property started + * @private + * @type {Boolean} */ - handler: function MEhandler(ev) { - var eventType = MOUSE_INPUT_MAP[ev.type]; + started: false, - // on start we want to have the left mouse button down - if (eventType & INPUT_START && ev.button === 0) { - this.pressed = true; - } + /** + * when the mouse is hold down, this is true + * @property should_detect + * @private + * @type {Boolean} + */ + shouldDetect: false, - if (eventType & INPUT_MOVE && ev.which !== 1) { - eventType = INPUT_END; - } + /** + * simple event binder with a hook and support for multiple types + * @method on + * @param {HTMLElement} element + * @param {String} type + * @param {Function} handler + * @param {Function} [hook] + * @param {Object} hook.type + */ + on: function on(element, type, handler, hook) { + var types = type.split(' '); + Utils.each(types, function(type) { + Utils.on(element, type, handler); + hook && hook(type); + }); + }, - // mouse must be down, and mouse events are allowed (see the TouchMouse input) - if (!this.pressed || !this.allow) { - return; - } + /** + * simple event unbinder with a hook and support for multiple types + * @method off + * @param {HTMLElement} element + * @param {String} type + * @param {Function} handler + * @param {Function} [hook] + * @param {Object} hook.type + */ + off: function off(element, type, handler, hook) { + var types = type.split(' '); + Utils.each(types, function(type) { + Utils.off(element, type, handler); + hook && hook(type); + }); + }, - if (eventType & INPUT_END) { - this.pressed = false; - } + /** + * the core touch event handler. + * this finds out if we should to detect gestures + * @method onTouch + * @param {HTMLElement} element + * @param {String} eventType matches `EVENT_START|MOVE|END` + * @param {Function} handler + * @return onTouchHandler {Function} the core event handler + */ + onTouch: function onTouch(element, eventType, handler) { + var self = this; - this.callback(this.manager, eventType, { - pointers: [ev], - changedPointers: [ev], - pointerType: INPUT_TYPE_MOUSE, - srcEvent: ev - }); - } - }); + var onTouchHandler = function onTouchHandler(ev) { + var srcType = ev.type.toLowerCase(), + isPointer = Hammer.HAS_POINTEREVENTS, + isMouse = Utils.inStr(srcType, 'mouse'), + triggerType; - var POINTER_INPUT_MAP = { - pointerdown: INPUT_START, - pointermove: INPUT_MOVE, - pointerup: INPUT_END, - pointercancel: INPUT_CANCEL, - pointerout: INPUT_CANCEL - }; + // if we are in a mouseevent, but there has been a touchevent triggered in this session + // we want to do nothing. simply break out of the event. + if(isMouse && self.preventMouseEvents) { + return; - // in IE10 the pointer types is defined as an enum - var IE10_POINTER_TYPE_ENUM = { - 2: INPUT_TYPE_TOUCH, - 3: INPUT_TYPE_PEN, - 4: INPUT_TYPE_MOUSE, - 5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816 - }; + // mousebutton must be down + } else if(isMouse && eventType == EVENT_START && ev.button === 0) { + self.preventMouseEvents = false; + self.shouldDetect = true; + } else if(isPointer && eventType == EVENT_START) { + self.shouldDetect = (ev.buttons === 1 || PointerEvent.matchType(POINTER_TOUCH, ev)); + // just a valid start event, but no mouse + } else if(!isMouse && eventType == EVENT_START) { + self.preventMouseEvents = true; + self.shouldDetect = true; + } - var POINTER_ELEMENT_EVENTS = 'pointerdown'; - var POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel'; + // update the pointer event before entering the detection + if(isPointer && eventType != EVENT_END) { + PointerEvent.updatePointer(eventType, ev); + } - // IE10 has prefixed support, and case-sensitive - if (window.MSPointerEvent) { - POINTER_ELEMENT_EVENTS = 'MSPointerDown'; - POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel'; - } + // we are in a touch/down state, so allowed detection of gestures + if(self.shouldDetect) { + triggerType = self.doDetect.call(self, ev, eventType, element, handler); + } - /** - * Pointer events input - * @constructor - * @extends Input - */ - function PointerEventInput() { - this.evEl = POINTER_ELEMENT_EVENTS; - this.evWin = POINTER_WINDOW_EVENTS; + // ...and we are done with the detection + // so reset everything to start each detection totally fresh + if(triggerType == EVENT_END) { + self.preventMouseEvents = false; + self.shouldDetect = false; + PointerEvent.reset(); + // update the pointerevent object after the detection + } - Input.apply(this, arguments); + if(isPointer && eventType == EVENT_END) { + PointerEvent.updatePointer(eventType, ev); + } + }; - this.store = (this.manager.session.pointerEvents = []); - } + this.on(element, EVENT_TYPES[eventType], onTouchHandler); + return onTouchHandler; + }, - inherit(PointerEventInput, Input, { /** - * handle mouse events + * the core detection method + * this finds out what hammer-touch-events to trigger + * @method doDetect * @param {Object} ev + * @param {String} eventType matches `EVENT_START|MOVE|END` + * @param {HTMLElement} element + * @param {Function} handler + * @return {String} triggerType matches `EVENT_START|MOVE|END` */ - handler: function PEhandler(ev) { - var store = this.store; - var removePointer = false; - - var eventTypeNormalized = ev.type.toLowerCase().replace('ms', ''); - var eventType = POINTER_INPUT_MAP[eventTypeNormalized]; - var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType; + doDetect: function doDetect(ev, eventType, element, handler) { + var touchList = this.getTouchList(ev, eventType); + var touchListLength = touchList.length; + var triggerType = eventType; + var triggerChange = touchList.trigger; // used by fakeMultitouch plugin + var changedLength = touchListLength; - var isTouch = (pointerType == INPUT_TYPE_TOUCH); + // at each touchstart-like event we want also want to trigger a TOUCH event... + if(eventType == EVENT_START) { + triggerChange = EVENT_TOUCH; + // ...the same for a touchend-like event + } else if(eventType == EVENT_END) { + triggerChange = EVENT_RELEASE; - // get index of the event in the store - var storeIndex = inArray(store, ev.pointerId, 'pointerId'); - - // start and mouse must be down - if (eventType & INPUT_START && (ev.button === 0 || isTouch)) { - if (storeIndex < 0) { - store.push(ev); - storeIndex = store.length - 1; - } - } else if (eventType & (INPUT_END | INPUT_CANCEL)) { - removePointer = true; + // keep track of how many touches have been removed + changedLength = touchList.length - ((ev.changedTouches) ? ev.changedTouches.length : 1); } - // it not found, so the pointer hasn't been down (so it's probably a hover) - if (storeIndex < 0) { - return; + // after there are still touches on the screen, + // we just want to trigger a MOVE event. so change the START or END to a MOVE + // but only after detection has been started, the first time we actualy want a START + if(changedLength > 0 && this.started) { + triggerType = EVENT_MOVE; } - // update the event in the store - store[storeIndex] = ev; + // detection has been started, we keep track of this, see above + this.started = true; - this.callback(this.manager, eventType, { - pointers: store, - changedPointers: [ev], - pointerType: pointerType, - srcEvent: ev - }); + // generate some event data, some basic information + var evData = this.collectEventData(element, triggerType, touchList, ev); - if (removePointer) { - // remove from the store - store.splice(storeIndex, 1); + // trigger the triggerType event before the change (TOUCH, RELEASE) events + // but the END event should be at last + if(eventType != EVENT_END) { + handler.call(Detection, evData); } - } - }); - var SINGLE_TOUCH_INPUT_MAP = { - touchstart: INPUT_START, - touchmove: INPUT_MOVE, - touchend: INPUT_END, - touchcancel: INPUT_CANCEL - }; + // trigger a change (TOUCH, RELEASE) event, this means the length of the touches changed + if(triggerChange) { + evData.changedLength = changedLength; + evData.eventType = triggerChange; - var SINGLE_TOUCH_TARGET_EVENTS = 'touchstart'; - var SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel'; + handler.call(Detection, evData); - /** - * Touch events input - * @constructor - * @extends Input - */ - function SingleTouchInput() { - this.evTarget = SINGLE_TOUCH_TARGET_EVENTS; - this.evWin = SINGLE_TOUCH_WINDOW_EVENTS; - this.started = false; - - Input.apply(this, arguments); - } - - inherit(SingleTouchInput, Input, { - handler: function TEhandler(ev) { - var type = SINGLE_TOUCH_INPUT_MAP[ev.type]; - - // should we handle the touch events? - if (type === INPUT_START) { - this.started = true; + evData.eventType = triggerType; + delete evData.changedLength; } - if (!this.started) { - return; - } - - var touches = normalizeSingleTouches.call(this, ev, type); + // trigger the END event + if(triggerType == EVENT_END) { + handler.call(Detection, evData); - // when done, reset the started state - if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) { + // ...and we are done with the detection + // so reset everything to start each detection totally fresh this.started = false; } - this.callback(this.manager, type, { - pointers: touches[0], - changedPointers: touches[1], - pointerType: INPUT_TYPE_TOUCH, - srcEvent: ev - }); - } - }); - - /** - * @this {TouchInput} - * @param {Object} ev - * @param {Number} type flag - * @returns {undefined|Array} [all, changed] - */ - function normalizeSingleTouches(ev, type) { - var all = toArray(ev.touches); - var changed = toArray(ev.changedTouches); - - if (type & (INPUT_END | INPUT_CANCEL)) { - all = uniqueArray(all.concat(changed), 'identifier', true); - } - - return [all, changed]; - } - - var TOUCH_INPUT_MAP = { - touchstart: INPUT_START, - touchmove: INPUT_MOVE, - touchend: INPUT_END, - touchcancel: INPUT_CANCEL - }; - - var TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel'; - - /** - * Multi-user touch events input - * @constructor - * @extends Input - */ - function TouchInput() { - this.evTarget = TOUCH_TARGET_EVENTS; - this.targetIds = {}; - - Input.apply(this, arguments); - } + return triggerType; + }, - inherit(TouchInput, Input, { - handler: function MTEhandler(ev) { - var type = TOUCH_INPUT_MAP[ev.type]; - var touches = getTouches.call(this, ev, type); - if (!touches) { - return; + /** + * we have different events for each device/browser + * determine what we need and set them in the EVENT_TYPES constant + * the `onTouch` method is bind to these properties. + * @method determineEventTypes + * @return {Object} events + */ + determineEventTypes: function determineEventTypes() { + var types; + if(Hammer.HAS_POINTEREVENTS) { + if(window.PointerEvent) { + types = [ + 'pointerdown', + 'pointermove', + 'pointerup pointercancel lostpointercapture' + ]; + } else { + types = [ + 'MSPointerDown', + 'MSPointerMove', + 'MSPointerUp MSPointerCancel MSLostPointerCapture' + ]; + } + } else if(Hammer.NO_MOUSEEVENTS) { + types = [ + 'touchstart', + 'touchmove', + 'touchend touchcancel' + ]; + } else { + types = [ + 'touchstart mousedown', + 'touchmove mousemove', + 'touchend touchcancel mouseup' + ]; } - this.callback(this.manager, type, { - pointers: touches[0], - changedPointers: touches[1], - pointerType: INPUT_TYPE_TOUCH, - srcEvent: ev - }); - } - }); - - /** - * @this {TouchInput} - * @param {Object} ev - * @param {Number} type flag - * @returns {undefined|Array} [all, changed] - */ - function getTouches(ev, type) { - var allTouches = toArray(ev.touches); - var targetIds = this.targetIds; - - // when there is only one touch, the process can be simplified - if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) { - targetIds[allTouches[0].identifier] = true; - return [allTouches, allTouches]; - } - - var i, - targetTouches, - changedTouches = toArray(ev.changedTouches), - changedTargetTouches = [], - target = this.target; - - // get target touches from touches - targetTouches = allTouches.filter(function(touch) { - return hasParent(touch.target, target); - }); - - // collect touches - if (type === INPUT_START) { - i = 0; - while (i < targetTouches.length) { - targetIds[targetTouches[i].identifier] = true; - i++; - } - } + EVENT_TYPES[EVENT_START] = types[0]; + EVENT_TYPES[EVENT_MOVE] = types[1]; + EVENT_TYPES[EVENT_END] = types[2]; + return EVENT_TYPES; + }, - // filter changed touches to only contain touches that exist in the collected target ids - i = 0; - while (i < changedTouches.length) { - if (targetIds[changedTouches[i].identifier]) { - changedTargetTouches.push(changedTouches[i]); + /** + * create touchList depending on the event + * @method getTouchList + * @param {Object} ev + * @param {String} eventType + * @return {Array} touches + */ + getTouchList: function getTouchList(ev, eventType) { + // get the fake pointerEvent touchlist + if(Hammer.HAS_POINTEREVENTS) { + return PointerEvent.getTouchList(); } - // cleanup removed touches - if (type & (INPUT_END | INPUT_CANCEL)) { - delete targetIds[changedTouches[i].identifier]; - } - i++; - } + // get the touchlist + if(ev.touches) { + if(eventType == EVENT_MOVE) { + return ev.touches; + } - if (!changedTargetTouches.length) { - return; - } + var identifiers = []; + var concat = [].concat(Utils.toArray(ev.touches), Utils.toArray(ev.changedTouches)); + var touchList = []; - return [ - // merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel' - uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true), - changedTargetTouches - ]; - } + Utils.each(concat, function(touch) { + if(Utils.inArray(identifiers, touch.identifier) === false) { + touchList.push(touch); + } + identifiers.push(touch.identifier); + }); - /** - * Combined touch and mouse input - * - * Touch has a higher priority then mouse, and while touching no mouse events are allowed. - * This because touch devices also emit mouse events while doing a touch. - * - * @constructor - * @extends Input - */ - function TouchMouseInput() { - Input.apply(this, arguments); + return touchList; + } - var handler = bindFn(this.handler, this); - this.touch = new TouchInput(this.manager, handler); - this.mouse = new MouseInput(this.manager, handler); - } + // make fake touchList from mouse position + ev.identifier = 1; + return [ev]; + }, - inherit(TouchMouseInput, Input, { /** - * handle mouse and touch events - * @param {Hammer} manager - * @param {String} inputEvent - * @param {Object} inputData + * collect basic event data + * @method collectEventData + * @param {HTMLElement} element + * @param {String} eventType matches `EVENT_START|MOVE|END` + * @param {Array} touches + * @param {Object} ev + * @return {Object} ev */ - handler: function TMEhandler(manager, inputEvent, inputData) { - var isTouch = (inputData.pointerType == INPUT_TYPE_TOUCH), - isMouse = (inputData.pointerType == INPUT_TYPE_MOUSE); - - // when we're in a touch event, so block all upcoming mouse events - // most mobile browser also emit mouseevents, right after touchstart - if (isTouch) { - this.mouse.allow = false; - } else if (isMouse && !this.mouse.allow) { - return; + collectEventData: function collectEventData(element, eventType, touches, ev) { + // find out pointerType + var pointerType = POINTER_TOUCH; + if(Utils.inStr(ev.type, 'mouse') || PointerEvent.matchType(POINTER_MOUSE, ev)) { + pointerType = POINTER_MOUSE; + } else if(PointerEvent.matchType(POINTER_PEN, ev)) { + pointerType = POINTER_PEN; } - // reset the allowMouse when we're done - if (inputEvent & (INPUT_END | INPUT_CANCEL)) { - this.mouse.allow = true; - } + return { + center: Utils.getCenter(touches), + timeStamp: Date.now(), + target: ev.target, + touches: touches, + eventType: eventType, + pointerType: pointerType, + srcEvent: ev, + + /** + * prevent the browser default actions + * mostly used to disable scrolling of the browser + */ + preventDefault: function() { + var srcEvent = this.srcEvent; + srcEvent.preventManipulation && srcEvent.preventManipulation(); + srcEvent.preventDefault && srcEvent.preventDefault(); + }, - this.callback(manager, inputEvent, inputData); - }, + /** + * stop bubbling the event up to its parents + */ + stopPropagation: function() { + this.srcEvent.stopPropagation(); + }, - /** - * remove the event listeners - */ - destroy: function destroy() { - this.touch.destroy(); - this.mouse.destroy(); + /** + * immediately stop gesture detection + * might be useful after a swipe was detected + * @return {*} + */ + stopDetect: function() { + return Detection.stopDetect(); + } + }; } - }); - - var PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction'); - var NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined; + }; - // magical touchAction value - var TOUCH_ACTION_COMPUTE = 'compute'; - var TOUCH_ACTION_AUTO = 'auto'; - var TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented - var TOUCH_ACTION_NONE = 'none'; - var TOUCH_ACTION_PAN_X = 'pan-x'; - var TOUCH_ACTION_PAN_Y = 'pan-y'; /** - * Touch Action - * sets the touchAction property or uses the js alternative - * @param {Manager} manager - * @param {String} value - * @constructor + * @module hammer + * + * @class PointerEvent + * @static */ - function TouchAction(manager, value) { - this.manager = manager; - this.set(value); - } - - TouchAction.prototype = { + var PointerEvent = Hammer.PointerEvent = { /** - * set the touchAction value on the element or enable the polyfill - * @param {String} value + * holds all pointers, by `identifier` + * @property pointers + * @type {Object} */ - set: function(value) { - // find out the touch-action by the event handlers - if (value == TOUCH_ACTION_COMPUTE) { - value = this.compute(); - } - - if (NATIVE_TOUCH_ACTION) { - this.manager.element.style[PREFIXED_TOUCH_ACTION] = value; - } - this.actions = value.toLowerCase().trim(); - }, + pointers: {}, /** - * just re-set the touchAction value + * get the pointers as an array + * @method getTouchList + * @return {Array} touchlist */ - update: function() { - this.set(this.manager.options.touchAction); + getTouchList: function getTouchList() { + var touchlist = []; + // we can use forEach since pointerEvents only is in IE10 + Utils.each(this.pointers, function(pointer) { + touchlist.push(pointer); + }); + return touchlist; }, /** - * compute the value for the touchAction property based on the recognizer's settings - * @returns {String} value + * update the position of a pointer + * @method updatePointer + * @param {String} eventType matches `EVENT_START|MOVE|END` + * @param {Object} pointerEvent */ - compute: function() { - var actions = []; - each(this.manager.recognizers, function(recognizer) { - if (boolOrFn(recognizer.options.enable, [recognizer])) { - actions = actions.concat(recognizer.getTouchAction()); - } - }); - return cleanTouchActions(actions.join(' ')); + updatePointer: function updatePointer(eventType, pointerEvent) { + if(eventType == EVENT_END || (eventType != EVENT_END && pointerEvent.buttons !== 1)) { + delete this.pointers[pointerEvent.pointerId]; + } else { + pointerEvent.identifier = pointerEvent.pointerId; + this.pointers[pointerEvent.pointerId] = pointerEvent; + } }, /** - * this method is called on each input cycle and provides the preventing of the browser behavior - * @param {Object} input + * check if ev matches pointertype + * @method matchType + * @param {String} pointerType matches `POINTER_MOUSE|TOUCH|PEN` + * @param {PointerEvent} ev */ - preventDefaults: function(input) { - // not needed with native support for the touchAction property - if (NATIVE_TOUCH_ACTION) { - return; - } - - var srcEvent = input.srcEvent; - var direction = input.offsetDirection; - - // if the touch action did prevented once this session - if (this.manager.session.prevented) { - srcEvent.preventDefault(); - return; + matchType: function matchType(pointerType, ev) { + if(!ev.pointerType) { + return false; } - var actions = this.actions; - var hasNone = inStr(actions, TOUCH_ACTION_NONE); - var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y); - var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X); + var pt = ev.pointerType, + types = {}; - if (hasNone || - (hasPanY && direction & DIRECTION_HORIZONTAL) || - (hasPanX && direction & DIRECTION_VERTICAL)) { - return this.preventSrc(srcEvent); - } + types[POINTER_MOUSE] = (pt === (ev.MSPOINTER_TYPE_MOUSE || POINTER_MOUSE)); + types[POINTER_TOUCH] = (pt === (ev.MSPOINTER_TYPE_TOUCH || POINTER_TOUCH)); + types[POINTER_PEN] = (pt === (ev.MSPOINTER_TYPE_PEN || POINTER_PEN)); + return types[pointerType]; }, /** - * call preventDefault to prevent the browser's default behavior (scrolling in most cases) - * @param {Object} srcEvent + * reset the stored pointers + * @method reset */ - preventSrc: function(srcEvent) { - this.manager.session.prevented = true; - srcEvent.preventDefault(); + reset: function resetList() { + this.pointers = {}; } }; - /** - * when the touchActions are collected they are not a valid value, so we need to clean things up. * - * @param {String} actions - * @returns {*} - */ - function cleanTouchActions(actions) { - // none - if (inStr(actions, TOUCH_ACTION_NONE)) { - return TOUCH_ACTION_NONE; - } - - var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X); - var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y); - - // pan-x and pan-y can be combined - if (hasPanX && hasPanY) { - return TOUCH_ACTION_PAN_X + ' ' + TOUCH_ACTION_PAN_Y; - } - - // pan-x OR pan-y - if (hasPanX || hasPanY) { - return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y; - } - - // manipulation - if (inStr(actions, TOUCH_ACTION_MANIPULATION)) { - return TOUCH_ACTION_MANIPULATION; - } - - return TOUCH_ACTION_AUTO; - } /** - * Recognizer flow explained; * - * All recognizers have the initial state of POSSIBLE when a input session starts. - * The definition of a input session is from the first input until the last input, with all it's movement in it. * - * Example session for mouse-input: mousedown -> mousemove -> mouseup - * - * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed - * which determines with state it should be. - * - * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to - * POSSIBLE to give it another change on the next cycle. - * - * Possible - * | - * +-----+---------------+ - * | | - * +-----+-----+ | - * | | | - * Failed Cancelled | - * +-------+------+ - * | | - * Recognized Began - * | - * Changed - * | - * Ended/Recognized - */ - var STATE_POSSIBLE = 1; - var STATE_BEGAN = 2; - var STATE_CHANGED = 4; - var STATE_ENDED = 8; - var STATE_RECOGNIZED = STATE_ENDED; - var STATE_CANCELLED = 16; - var STATE_FAILED = 32; - - /** - * Recognizer - * Every recognizer needs to extend from this class. - * @constructor - * @param {Object} options + * @module hammer + * + * @class Detection + * @static */ - function Recognizer(options) { - this.id = uniqueId(); - - this.manager = null; - this.options = merge(options || {}, this.defaults); - - // default is enable true - this.options.enable = ifUndefined(this.options.enable, true); - - this.state = STATE_POSSIBLE; + var Detection = Hammer.detection = { + // contains all registred Hammer.gestures in the correct order + gestures: [], - this.simultaneous = {}; - this.requireFail = []; - } + // data of the current Hammer.gesture detection session + current: null, - Recognizer.prototype = { - /** - * @virtual - * @type {Object} - */ - defaults: {}, + // the previous Hammer.gesture session data + // is a full clone of the previous gesture.current object + previous: null, - /** - * set options - * @param {Object} options - * @return {Recognizer} - */ - set: function(options) { - extend(this.options, options); - - // also update the touchAction, in case something changed about the directions/enabled state - this.manager && this.manager.touchAction.update(); - return this; - }, + // when this becomes true, no gestures are fired + stopped: false, /** - * recognize simultaneous with an other recognizer. - * @param {Recognizer} otherRecognizer - * @returns {Recognizer} this + * start Hammer.gesture detection + * @method startDetect + * @param {Hammer.Instance} inst + * @param {Object} eventData */ - recognizeWith: function(otherRecognizer) { - if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) { - return this; + startDetect: function startDetect(inst, eventData) { + // already busy with a Hammer.gesture detection on an element + if(this.current) { + return; } - var simultaneous = this.simultaneous; - otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this); - if (!simultaneous[otherRecognizer.id]) { - simultaneous[otherRecognizer.id] = otherRecognizer; - otherRecognizer.recognizeWith(this); - } - return this; - }, + this.stopped = false; - /** - * drop the simultaneous link. it doesnt remove the link on the other recognizer. - * @param {Recognizer} otherRecognizer - * @returns {Recognizer} this - */ - dropRecognizeWith: function(otherRecognizer) { - if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) { - return this; - } + // holds current session + this.current = { + inst: inst, // reference to HammerInstance we're working for + startEvent: Utils.extend({}, eventData), // start eventData for distances, timing etc + lastEvent: false, // last eventData + lastCalcEvent: false, // last eventData for calculations. + futureCalcEvent: false, // last eventData for calculations. + lastCalcData: {}, // last lastCalcData + name: '' // current gesture we're in/detected, can be 'tap', 'hold' etc + }; - otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this); - delete this.simultaneous[otherRecognizer.id]; - return this; + this.detect(eventData); }, /** - * recognizer can only run when an other is failing - * @param {Recognizer} otherRecognizer - * @returns {Recognizer} this + * Hammer.gesture detection + * @method detect + * @param {Object} eventData + * @return {any} */ - requireFailure: function(otherRecognizer) { - if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) { - return this; + detect: function detect(eventData) { + if(!this.current || this.stopped) { + return; } - var requireFail = this.requireFail; - otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this); - if (inArray(requireFail, otherRecognizer) === -1) { - requireFail.push(otherRecognizer); - otherRecognizer.requireFailure(this); - } - return this; - }, + // extend event data with calculations about scale, distance etc + eventData = this.extendEventData(eventData); - /** - * drop the requireFailure link. it does not remove the link on the other recognizer. - * @param {Recognizer} otherRecognizer - * @returns {Recognizer} this - */ - dropRequireFailure: function(otherRecognizer) { - if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) { - return this; + // hammer instance and instance options + var inst = this.current.inst, + instOptions = inst.options; + + // call Hammer.gesture handlers + Utils.each(this.gestures, function triggerGesture(gesture) { + // only when the instance options have enabled this gesture + if(!this.stopped && inst.enabled && instOptions[gesture.name]) { + gesture.handler.call(gesture, eventData, inst); + } + }, this); + + // store as previous event event + if(this.current) { + this.current.lastEvent = eventData; } - otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this); - var index = inArray(this.requireFail, otherRecognizer); - if (index > -1) { - this.requireFail.splice(index, 1); + if(eventData.eventType == EVENT_END) { + this.stopDetect(); } - return this; - }, - /** - * has require failures boolean - * @returns {boolean} - */ - hasRequireFailures: function() { - return this.requireFail.length > 0; + return eventData; }, /** - * if the recognizer can recognize simultaneous with an other recognizer - * @param {Recognizer} otherRecognizer - * @returns {Boolean} + * clear the Hammer.gesture vars + * this is called on endDetect, but can also be used when a final Hammer.gesture has been detected + * to stop other Hammer.gestures from being fired + * @method stopDetect */ - canRecognizeWith: function(otherRecognizer) { - return !!this.simultaneous[otherRecognizer.id]; + stopDetect: function stopDetect() { + // clone current data to the store as the previous gesture + // used for the double tap gesture, since this is an other gesture detect session + this.previous = Utils.extend({}, this.current); + + // reset the current + this.current = null; + this.stopped = true; }, /** - * You should use `tryEmit` instead of `emit` directly to check - * that all the needed recognizers has failed before emitting. - * @param {Object} input + * calculate velocity, angle and direction + * @method getVelocityData + * @param {Object} ev + * @param {Object} center + * @param {Number} deltaTime + * @param {Number} deltaX + * @param {Number} deltaY */ - emit: function(input) { - var self = this; - var state = this.state; + getCalculatedData: function getCalculatedData(ev, center, deltaTime, deltaX, deltaY) { + var cur = this.current, + recalc = false, + calcEv = cur.lastCalcEvent, + calcData = cur.lastCalcData; - function emit(withState) { - self.manager.emit(self.options.event + (withState ? stateStr(state) : ''), input); + if(calcEv && ev.timeStamp - calcEv.timeStamp > Hammer.CALCULATE_INTERVAL) { + center = calcEv.center; + deltaTime = ev.timeStamp - calcEv.timeStamp; + deltaX = ev.center.clientX - calcEv.center.clientX; + deltaY = ev.center.clientY - calcEv.center.clientY; + recalc = true; } - // 'panstart' and 'panmove' - if (state < STATE_ENDED) { - emit(true); + if(ev.eventType == EVENT_TOUCH || ev.eventType == EVENT_RELEASE) { + cur.futureCalcEvent = ev; } - emit(); // simple 'eventName' events + if(!cur.lastCalcEvent || recalc) { + calcData.velocity = Utils.getVelocity(deltaTime, deltaX, deltaY); + calcData.angle = Utils.getAngle(center, ev.center); + calcData.direction = Utils.getDirection(center, ev.center); - // panend and pancancel - if (state >= STATE_ENDED) { - emit(true); + cur.lastCalcEvent = cur.futureCalcEvent || ev; + cur.futureCalcEvent = ev; } - }, - /** - * Check that all the require failure recognizers has failed, - * if true, it emits a gesture event, - * otherwise, setup the state to FAILED. - * @param {Object} input - */ - tryEmit: function(input) { - if (this.canEmit()) { - return this.emit(input); - } - // it's failing anyway - this.state = STATE_FAILED; + ev.velocityX = calcData.velocity.x; + ev.velocityY = calcData.velocity.y; + ev.interimAngle = calcData.angle; + ev.interimDirection = calcData.direction; }, /** - * can we emit? - * @returns {boolean} + * extend eventData for Hammer.gestures + * @method extendEventData + * @param {Object} ev + * @return {Object} ev */ - canEmit: function() { - var i = 0; - while (i < this.requireFail.length) { - if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) { - return false; - } - i++; + extendEventData: function extendEventData(ev) { + var cur = this.current, + startEv = cur.startEvent, + lastEv = cur.lastEvent || startEv; + + // update the start touchlist to calculate the scale/rotation + if(ev.eventType == EVENT_TOUCH || ev.eventType == EVENT_RELEASE) { + startEv.touches = []; + Utils.each(ev.touches, function(touch) { + startEv.touches.push({ + clientX: touch.clientX, + clientY: touch.clientY + }); + }); } - return true; - }, - /** - * update the recognizer - * @param {Object} inputData - */ - recognize: function(inputData) { - // make a new copy of the inputData - // so we can change the inputData without messing up the other recognizers - var inputDataClone = extend({}, inputData); - - // is is enabled and allow recognizing? - if (!boolOrFn(this.options.enable, [this, inputDataClone])) { - this.reset(); - this.state = STATE_FAILED; - return; - } + var deltaTime = ev.timeStamp - startEv.timeStamp, + deltaX = ev.center.clientX - startEv.center.clientX, + deltaY = ev.center.clientY - startEv.center.clientY; - // reset when we've reached the end - if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) { - this.state = STATE_POSSIBLE; - } + this.getCalculatedData(ev, lastEv.center, deltaTime, deltaX, deltaY); - this.state = this.process(inputDataClone); + Utils.extend(ev, { + startEvent: startEv, - // the recognizer has recognized a gesture - // so trigger an event - if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) { - this.tryEmit(inputDataClone); - } + deltaTime: deltaTime, + deltaX: deltaX, + deltaY: deltaY, + + distance: Utils.getDistance(startEv.center, ev.center), + angle: Utils.getAngle(startEv.center, ev.center), + direction: Utils.getDirection(startEv.center, ev.center), + scale: Utils.getScale(startEv.touches, ev.touches), + rotation: Utils.getRotation(startEv.touches, ev.touches) + }); + + return ev; }, /** - * return the state of the recognizer - * the actual recognizing happens in this method - * @virtual - * @param {Object} inputData - * @returns {Const} STATE + * register new gesture + * @method register + * @param {Object} gesture object, see `gestures/` for documentation + * @return {Array} gestures */ - process: function(inputData) { }, // jshint ignore:line + register: function register(gesture) { + // add an enable gesture options if there is no given + var options = gesture.defaults || {}; + if(options[gesture.name] === undefined) { + options[gesture.name] = true; + } - /** - * return the preferred touch-action - * @virtual - * @returns {Array} - */ - getTouchAction: function() { }, + // extend Hammer default options with the Hammer.gesture options + Utils.extend(Hammer.defaults, options, true); - /** - * called when the gesture isn't allowed to recognize - * like when another is being recognized or it is disabled - * @virtual - */ - reset: function() { } - }; + // set its index + gesture.index = gesture.index || 1000; - /** - * get a usable string, used as event postfix - * @param {Const} state - * @returns {String} state - */ - function stateStr(state) { - if (state & STATE_CANCELLED) { - return 'cancel'; - } else if (state & STATE_ENDED) { - return 'end'; - } else if (state & STATE_CHANGED) { - return 'move'; - } else if (state & STATE_BEGAN) { - return 'start'; + // add Hammer.gesture to the list + this.gestures.push(gesture); + + // sort the list by index + this.gestures.sort(function(a, b) { + if(a.index < b.index) { + return -1; + } + if(a.index > b.index) { + return 1; + } + return 0; + }); + + return this.gestures; } - return ''; - } + }; - /** - * direction cons to string - * @param {Const} direction - * @returns {String} - */ - function directionStr(direction) { - if (direction == DIRECTION_DOWN) { - return 'down'; - } else if (direction == DIRECTION_UP) { - return 'up'; - } else if (direction == DIRECTION_LEFT) { - return 'left'; - } else if (direction == DIRECTION_RIGHT) { - return 'right'; - } - return ''; - } /** - * get a recognizer by name if it is bound to a manager - * @param {Recognizer|String} otherRecognizer - * @param {Recognizer} recognizer - * @returns {Recognizer} + * @module hammer */ - function getRecognizerByNameIfManager(otherRecognizer, recognizer) { - var manager = recognizer.manager; - if (manager) { - return manager.get(otherRecognizer); - } - return otherRecognizer; - } /** - * This recognizer is just used as a base for the simple attribute recognizers. + * create new hammer instance + * all methods should return the instance itself, so it is chainable. + * + * @class Instance * @constructor - * @extends Recognizer + * @param {HTMLElement} element + * @param {Object} [options={}] options are merged with `Hammer.defaults` + * @return {Hammer.Instance} */ - function AttrRecognizer() { - Recognizer.apply(this, arguments); - } + Hammer.Instance = function(element, options) { + var self = this; + + // setup HammerJS window events and register all gestures + // this also sets up the default options + setup(); - inherit(AttrRecognizer, Recognizer, { /** - * @namespace - * @memberof AttrRecognizer + * @property element + * @type {HTMLElement} */ - defaults: { - /** - * @type {Number} - * @default 1 - */ - pointers: 1 - }, + this.element = element; /** - * Used to check if it the recognizer receives valid input, like input.distance > 10. - * @memberof AttrRecognizer - * @param {Object} input - * @returns {Boolean} recognized + * @property enabled + * @type {Boolean} + * @protected */ - attrTest: function(input) { - var optionPointers = this.options.pointers; - return optionPointers === 0 || input.pointers.length === optionPointers; - }, + this.enabled = true; /** - * Process the input and return the state for the recognizer - * @memberof AttrRecognizer - * @param {Object} input - * @returns {*} State + * options, merged with the defaults + * options with an _ are converted to camelCase + * @property options + * @type {Object} */ - process: function(input) { - var state = this.state; - var eventType = input.eventType; - - var isRecognized = state & (STATE_BEGAN | STATE_CHANGED); - var isValid = this.attrTest(input); - - // on cancel input and we've recognized before, return STATE_CANCELLED - if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) { - return state | STATE_CANCELLED; - } else if (isRecognized || isValid) { - if (eventType & INPUT_END) { - return state | STATE_ENDED; - } else if (!(state & STATE_BEGAN)) { - return STATE_BEGAN; - } - return state | STATE_CHANGED; - } - return STATE_FAILED; + Utils.each(options, function(value, name) { + delete options[name]; + options[Utils.toCamelCase(name)] = value; + }); + + this.options = Utils.extend(Utils.extend({}, Hammer.defaults), options || {}); + + // add some css to the element to prevent the browser from doing its native behavoir + if(this.options.behavior) { + Utils.toggleBehavior(this.element, this.options.behavior, true); } - }); - /** - * Pan - * Recognized when the pointer is down and moved in the allowed direction. - * @constructor - * @extends AttrRecognizer - */ - function PanRecognizer() { - AttrRecognizer.apply(this, arguments); + /** + * event start handler on the element to start the detection + * @property eventStartHandler + * @type {Object} + */ + this.eventStartHandler = Event.onTouch(element, EVENT_START, function(ev) { + if(self.enabled && ev.eventType == EVENT_START) { + Detection.startDetect(self, ev); + } else if(ev.eventType == EVENT_TOUCH) { + Detection.detect(ev); + } + }); - this.pX = null; - this.pY = null; - } + /** + * keep a list of user event handlers which needs to be removed when calling 'dispose' + * @property eventHandlers + * @type {Array} + */ + this.eventHandlers = []; + }; - inherit(PanRecognizer, AttrRecognizer, { + Hammer.Instance.prototype = { /** - * @namespace - * @memberof PanRecognizer + * bind events to the instance + * @method on + * @chainable + * @param {String} gestures multiple gestures by splitting with a space + * @param {Function} handler + * @param {Object} handler.ev event object */ - defaults: { - event: 'pan', - threshold: 10, - pointers: 1, - direction: DIRECTION_ALL + on: function onEvent(gestures, handler) { + var self = this; + Event.on(self.element, gestures, handler, function(type) { + self.eventHandlers.push({ gesture: type, handler: handler }); + }); + return self; }, - getTouchAction: function() { - var direction = this.options.direction; - var actions = []; - if (direction & DIRECTION_HORIZONTAL) { - actions.push(TOUCH_ACTION_PAN_Y); - } - if (direction & DIRECTION_VERTICAL) { - actions.push(TOUCH_ACTION_PAN_X); - } - return actions; - }, + /** + * unbind events to the instance + * @method off + * @chainable + * @param {String} gestures + * @param {Function} handler + */ + off: function offEvent(gestures, handler) { + var self = this; - directionTest: function(input) { - var options = this.options; - var hasMoved = true; - var distance = input.distance; - var direction = input.direction; - var x = input.deltaX; - var y = input.deltaY; - - // lock to axis? - if (!(direction & options.direction)) { - if (options.direction & DIRECTION_HORIZONTAL) { - direction = (x === 0) ? DIRECTION_NONE : (x < 0) ? DIRECTION_LEFT : DIRECTION_RIGHT; - hasMoved = x != this.pX; - distance = Math.abs(input.deltaX); - } else { - direction = (y === 0) ? DIRECTION_NONE : (y < 0) ? DIRECTION_UP : DIRECTION_DOWN; - hasMoved = y != this.pY; - distance = Math.abs(input.deltaY); + Event.off(self.element, gestures, handler, function(type) { + var index = Utils.inArray({ gesture: type, handler: handler }); + if(index !== false) { + self.eventHandlers.splice(index, 1); } - } - input.direction = direction; - return hasMoved && distance > options.threshold && direction & options.direction; + }); + return self; }, - attrTest: function(input) { - return AttrRecognizer.prototype.attrTest.call(this, input) && - (this.state & STATE_BEGAN || (!(this.state & STATE_BEGAN) && this.directionTest(input))); - }, + /** + * trigger gesture event + * @method trigger + * @chainable + * @param {String} gesture + * @param {Object} [eventData] + */ + trigger: function triggerEvent(gesture, eventData) { + // optional + if(!eventData) { + eventData = {}; + } - emit: function(input) { - this.pX = input.deltaX; - this.pY = input.deltaY; + // create DOM event + var event = Hammer.DOCUMENT.createEvent('Event'); + event.initEvent(gesture, true, true); + event.gesture = eventData; - var direction = directionStr(input.direction); - if (direction) { - this.manager.emit(this.options.event + direction, input); + // trigger on the target if it is in the instance element, + // this is for event delegation tricks + var element = this.element; + if(Utils.hasParent(eventData.target, element)) { + element = eventData.target; } - this._super.emit.call(this, input); - } - }); - - /** - * Pinch - * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out). - * @constructor - * @extends AttrRecognizer - */ - function PinchRecognizer() { - AttrRecognizer.apply(this, arguments); - } + element.dispatchEvent(event); + return this; + }, - inherit(PinchRecognizer, AttrRecognizer, { /** - * @namespace - * @memberof PinchRecognizer + * enable of disable hammer.js detection + * @method enable + * @chainable + * @param {Boolean} state */ - defaults: { - event: 'pinch', - threshold: 0, - pointers: 2 + enable: function enable(state) { + this.enabled = state; + return this; }, - getTouchAction: function() { - return [TOUCH_ACTION_NONE]; - }, + /** + * dispose this hammer instance + * @method dispose + * @return {Null} + */ + dispose: function dispose() { + var i, eh; - attrTest: function(input) { - return this._super.attrTest.call(this, input) && - (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN); - }, + // undo all changes made by stop_browser_behavior + Utils.toggleBehavior(this.element, this.options.behavior, false); - emit: function(input) { - this._super.emit.call(this, input); - if (input.scale !== 1) { - var inOut = input.scale < 1 ? 'in' : 'out'; - this.manager.emit(this.options.event + inOut, input); + // unbind all custom event handlers + for(i = -1; (eh = this.eventHandlers[++i]);) { + Utils.off(this.element, eh.gesture, eh.handler); } - } - }); - /** - * Press - * Recognized when the pointer is down for x ms without any movement. - * @constructor - * @extends Recognizer - */ - function PressRecognizer() { - Recognizer.apply(this, arguments); + this.eventHandlers = []; - this._timer = null; - this._input = null; - } + // unbind the start event listener + Event.off(this.element, EVENT_TYPES[EVENT_START], this.eventStartHandler); - inherit(PressRecognizer, Recognizer, { - /** - * @namespace - * @memberof PressRecognizer - */ - defaults: { - event: 'press', - pointers: 1, - time: 500, // minimal time of the pointer to be pressed - threshold: 5 // a minimal movement is ok, but keep it low - }, + return null; + } + }; - getTouchAction: function() { - return [TOUCH_ACTION_AUTO]; - }, - process: function(input) { - var options = this.options; - var validPointers = input.pointers.length === options.pointers; - var validMovement = input.distance < options.threshold; - var validTime = input.deltaTime > options.time; - - this._input = input; - - // we only allow little movement - // and we've reached an end event, so a tap is possible - if (!validMovement || !validPointers || (input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime)) { - this.reset(); - } else if (input.eventType & INPUT_START) { - this.reset(); - this._timer = setTimeoutContext(function() { - this.state = STATE_RECOGNIZED; - this.tryEmit(); - }, options.time, this); - } else if (input.eventType & INPUT_END) { - return STATE_RECOGNIZED; - } - return STATE_FAILED; - }, + /** + * @module gestures + */ + /** + * Move with x fingers (default 1) around on the page. + * Preventing the default browser behavior is a good way to improve feel and working. + * ```` + * hammertime.on("drag", function(ev) { + * console.log(ev); + * ev.gesture.preventDefault(); + * }); + * ```` + * + * @class Drag + * @static + */ + /** + * @event drag + * @param {Object} ev + */ + /** + * @event dragstart + * @param {Object} ev + */ + /** + * @event dragend + * @param {Object} ev + */ + /** + * @event drapleft + * @param {Object} ev + */ + /** + * @event dragright + * @param {Object} ev + */ + /** + * @event dragup + * @param {Object} ev + */ + /** + * @event dragdown + * @param {Object} ev + */ - reset: function() { - clearTimeout(this._timer); - }, + /** + * @param {String} name + */ + (function(name) { + var triggered = false; - emit: function(input) { - if (this.state !== STATE_RECOGNIZED) { + function dragGesture(ev, inst) { + var cur = Detection.current; + + // max touches + if(inst.options.dragMaxTouches > 0 && + ev.touches.length > inst.options.dragMaxTouches) { return; } - if (input && (input.eventType & INPUT_END)) { - this.manager.emit(this.options.event + 'up', input); - } else { - this._input.timeStamp = now(); - this.manager.emit(this.options.event, this._input); - } - } - }); + switch(ev.eventType) { + case EVENT_START: + triggered = false; + break; - /** - * Rotate - * Recognized when two or more pointer are moving in a circular motion. - * @constructor - * @extends AttrRecognizer - */ - function RotateRecognizer() { - AttrRecognizer.apply(this, arguments); - } + case EVENT_MOVE: + // when the distance we moved is too small we skip this gesture + // or we can be already in dragging + if(ev.distance < inst.options.dragMinDistance && + cur.name != name) { + return; + } - inherit(RotateRecognizer, AttrRecognizer, { - /** - * @namespace - * @memberof RotateRecognizer - */ - defaults: { - event: 'rotate', - threshold: 0, - pointers: 2 - }, + var startCenter = cur.startEvent.center; + + // we are dragging! + if(cur.name != name) { + cur.name = name; + if(inst.options.dragDistanceCorrection && ev.distance > 0) { + // When a drag is triggered, set the event center to dragMinDistance pixels from the original event center. + // Without this correction, the dragged distance would jumpstart at dragMinDistance pixels instead of at 0. + // It might be useful to save the original start point somewhere + var factor = Math.abs(inst.options.dragMinDistance / ev.distance); + startCenter.pageX += ev.deltaX * factor; + startCenter.pageY += ev.deltaY * factor; + startCenter.clientX += ev.deltaX * factor; + startCenter.clientY += ev.deltaY * factor; + + // recalculate event data using new start point + ev = Detection.extendEventData(ev); + } + } - getTouchAction: function() { - return [TOUCH_ACTION_NONE]; - }, + // lock drag to axis? + if(cur.lastEvent.dragLockToAxis || + ( inst.options.dragLockToAxis && + inst.options.dragLockMinDistance <= ev.distance + )) { + ev.dragLockToAxis = true; + } - attrTest: function(input) { - return this._super.attrTest.call(this, input) && - (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN); - } - }); + // keep direction on the axis that the drag gesture started on + var lastDirection = cur.lastEvent.direction; + if(ev.dragLockToAxis && lastDirection !== ev.direction) { + if(Utils.isVertical(lastDirection)) { + ev.direction = (ev.deltaY < 0) ? DIRECTION_UP : DIRECTION_DOWN; + } else { + ev.direction = (ev.deltaX < 0) ? DIRECTION_LEFT : DIRECTION_RIGHT; + } + } - /** - * Swipe - * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction. - * @constructor - * @extends AttrRecognizer - */ - function SwipeRecognizer() { - AttrRecognizer.apply(this, arguments); - } + // first time, trigger dragstart event + if(!triggered) { + inst.trigger(name + 'start', ev); + triggered = true; + } - inherit(SwipeRecognizer, AttrRecognizer, { - /** - * @namespace - * @memberof SwipeRecognizer - */ - defaults: { - event: 'swipe', - threshold: 10, - velocity: 0.65, - direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL, - pointers: 1 - }, + // trigger events + inst.trigger(name, ev); + inst.trigger(name + ev.direction, ev); - getTouchAction: function() { - return PanRecognizer.prototype.getTouchAction.call(this); - }, + var isVertical = Utils.isVertical(ev.direction); + + // block the browser events + if((inst.options.dragBlockVertical && isVertical) || + (inst.options.dragBlockHorizontal && !isVertical)) { + ev.preventDefault(); + } + break; - attrTest: function(input) { - var direction = this.options.direction; - var velocity; + case EVENT_RELEASE: + if(triggered && ev.changedLength <= inst.options.dragMaxTouches) { + inst.trigger(name + 'end', ev); + triggered = false; + } + break; - if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) { - velocity = input.velocity; - } else if (direction & DIRECTION_HORIZONTAL) { - velocity = input.velocityX; - } else if (direction & DIRECTION_VERTICAL) { - velocity = input.velocityY; + case EVENT_END: + triggered = false; + break; } + } - return this._super.attrTest.call(this, input) && - direction & input.direction && - input.distance > this.options.threshold && - abs(velocity) > this.options.velocity && input.eventType & INPUT_END; - }, - - emit: function(input) { - var direction = directionStr(input.direction); - if (direction) { - this.manager.emit(this.options.event + direction, input); + Hammer.gestures.Drag = { + name: name, + index: 50, + handler: dragGesture, + defaults: { + /** + * minimal movement that have to be made before the drag event gets triggered + * @property dragMinDistance + * @type {Number} + * @default 10 + */ + dragMinDistance: 10, + + /** + * Set dragDistanceCorrection to true to make the starting point of the drag + * be calculated from where the drag was triggered, not from where the touch started. + * Useful to avoid a jerk-starting drag, which can make fine-adjustments + * through dragging difficult, and be visually unappealing. + * @property dragDistanceCorrection + * @type {Boolean} + * @default true + */ + dragDistanceCorrection: true, + + /** + * set 0 for unlimited, but this can conflict with transform + * @property dragMaxTouches + * @type {Number} + * @default 1 + */ + dragMaxTouches: 1, + + /** + * prevent default browser behavior when dragging occurs + * be careful with it, it makes the element a blocking element + * when you are using the drag gesture, it is a good practice to set this true + * @property dragBlockHorizontal + * @type {Boolean} + * @default false + */ + dragBlockHorizontal: false, + + /** + * same as `dragBlockHorizontal`, but for vertical movement + * @property dragBlockVertical + * @type {Boolean} + * @default false + */ + dragBlockVertical: false, + + /** + * dragLockToAxis keeps the drag gesture on the axis that it started on, + * It disallows vertical directions if the initial direction was horizontal, and vice versa. + * @property dragLockToAxis + * @type {Boolean} + * @default false + */ + dragLockToAxis: false, + + /** + * drag lock only kicks in when distance > dragLockMinDistance + * This way, locking occurs only when the distance has become large enough to reliably determine the direction + * @property dragLockMinDistance + * @type {Number} + * @default 25 + */ + dragLockMinDistance: 25 } + }; + })('drag'); - this.manager.emit(this.options.event, input); + /** + * @module gestures + */ + /** + * trigger a simple gesture event, so you can do anything in your handler. + * only usable if you know what your doing... + * + * @class Gesture + * @static + */ + /** + * @event gesture + * @param {Object} ev + */ + Hammer.gestures.Gesture = { + name: 'gesture', + index: 1337, + handler: function releaseGesture(ev, inst) { + inst.trigger(this.name, ev); } - }); + }; /** - * A tap is ecognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur - * between the given interval and position. The delay option can be used to recognize multi-taps without firing - * a single tap. + * @module gestures + */ + /** + * Touch stays at the same place for x time * - * The eventData from the emitted event contains the property `tapCount`, which contains the amount of - * multi-taps being recognized. - * @constructor - * @extends Recognizer + * @class Hold + * @static + */ + /** + * @event hold + * @param {Object} ev */ - function TapRecognizer() { - Recognizer.apply(this, arguments); - - // previous time and center, - // used for tap counting - this.pTime = false; - this.pCenter = false; - - this._timer = null; - this._input = null; - this.count = 0; - } - - inherit(TapRecognizer, Recognizer, { - /** - * @namespace - * @memberof PinchRecognizer - */ - defaults: { - event: 'tap', - pointers: 1, - taps: 1, - interval: 300, // max time between the multi-tap taps - time: 250, // max time of the pointer to be down (like finger on the screen) - threshold: 2, // a minimal movement is ok, but keep it low - posThreshold: 10 // a multi-tap can be a bit off the initial position - }, - - getTouchAction: function() { - return [TOUCH_ACTION_MANIPULATION]; - }, - - process: function(input) { - var options = this.options; - - var validPointers = input.pointers.length === options.pointers; - var validMovement = input.distance < options.threshold; - var validTouchTime = input.deltaTime < options.time; - - this.reset(); - - if ((input.eventType & INPUT_START) && (this.count === 0)) { - return this.failTimeout(); - } - // we only allow little movement - // and we've reached an end event, so a tap is possible - if (validMovement && validTouchTime && validPointers) { - if (input.eventType != INPUT_END) { - return this.failTimeout(); - } + /** + * @param {String} name + */ + (function(name) { + var timer; - var validInterval = this.pTime ? (input.timeStamp - this.pTime < options.interval) : true; - var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold; + function holdGesture(ev, inst) { + var options = inst.options, + current = Detection.current; - this.pTime = input.timeStamp; - this.pCenter = input.center; + switch(ev.eventType) { + case EVENT_START: + clearTimeout(timer); - if (!validMultiTap || !validInterval) { - this.count = 1; - } else { - this.count += 1; - } + // set the gesture so we can check in the timeout if it still is + current.name = name; - this._input = input; + // set timer and if after the timeout it still is hold, + // we trigger the hold event + timer = setTimeout(function() { + if(current && current.name == name) { + inst.trigger(name, ev); + } + }, options.holdTimeout); + break; - // if tap count matches we have recognized it, - // else it has began recognizing... - var tapCount = this.count % options.taps; - if (tapCount === 0) { - // no failing requirements, immediately trigger the tap event - // or wait as long as the multitap interval to trigger - if (!this.hasRequireFailures()) { - return STATE_RECOGNIZED; - } else { - this._timer = setTimeoutContext(function() { - this.state = STATE_RECOGNIZED; - this.tryEmit(); - }, options.interval, this); - return STATE_BEGAN; + case EVENT_MOVE: + if(ev.distance > options.holdThreshold) { + clearTimeout(timer); } - } - } - return STATE_FAILED; - }, + break; - failTimeout: function() { - this._timer = setTimeoutContext(function() { - this.state = STATE_FAILED; - }, this.options.interval, this); - return STATE_FAILED; - }, + case EVENT_RELEASE: + clearTimeout(timer); + break; + } + } - reset: function() { - clearTimeout(this._timer); - }, + Hammer.gestures.Hold = { + name: name, + index: 10, + defaults: { + /** + * @property holdTimeout + * @type {Number} + * @default 500 + */ + holdTimeout: 500, + + /** + * movement allowed while holding + * @property holdThreshold + * @type {Number} + * @default 2 + */ + holdThreshold: 2 + }, + handler: holdGesture + }; + })('hold'); - emit: function() { - if (this.state == STATE_RECOGNIZED ) { - this._input.tapCount = this.count; - this.manager.emit(this.options.event, this._input); + /** + * @module gestures + */ + /** + * when a touch is being released from the page + * + * @class Release + * @static + */ + /** + * @event release + * @param {Object} ev + */ + Hammer.gestures.Release = { + name: 'release', + index: Infinity, + handler: function releaseGesture(ev, inst) { + if(ev.eventType == EVENT_RELEASE) { + inst.trigger(this.name, ev); } } - }); + }; /** - * Simple way to create an manager with a default set of recognizers. - * @param {HTMLElement} element - * @param {Object} [options] - * @constructor + * @module gestures */ - function Hammer(element, options) { - options = options || {}; - options.recognizers = ifUndefined(options.recognizers, Hammer.defaults.preset); - return new Manager(element, options); - } - /** - * @const {string} + * triggers swipe events when the end velocity is above the threshold + * for best usage, set `preventDefault` (on the drag gesture) to `true` + * ```` + * hammertime.on("dragleft swipeleft", function(ev) { + * console.log(ev); + * ev.gesture.preventDefault(); + * }); + * ```` + * + * @class Swipe + * @static */ - Hammer.VERSION = '2.0.4'; - /** - * default settings - * @namespace + * @event swipe + * @param {Object} ev */ - Hammer.defaults = { - /** - * set if DOM events are being triggered. - * But this is slower and unused by simple implementations, so disabled by default. - * @type {Boolean} - * @default false - */ - domEvents: false, - - /** - * The value for the touchAction property/fallback. - * When set to `compute` it will magically set the correct value based on the added recognizers. - * @type {String} - * @default compute - */ - touchAction: TOUCH_ACTION_COMPUTE, - - /** - * @type {Boolean} - * @default true - */ - enable: true, - - /** - * EXPERIMENTAL FEATURE -- can be removed/changed - * Change the parent input target element. - * If Null, then it is being set the to main element. - * @type {Null|EventTarget} - * @default null - */ - inputTarget: null, - - /** - * force an input class - * @type {Null|Function} - * @default null - */ - inputClass: null, - - /** - * Default recognizer setup when calling `Hammer()` - * When creating a new Manager these will be skipped. - * @type {Array} - */ - preset: [ - // RecognizerClass, options, [recognizeWith, ...], [requireFailure, ...] - [RotateRecognizer, { enable: false }], - [PinchRecognizer, { enable: false }, ['rotate']], - [SwipeRecognizer,{ direction: DIRECTION_HORIZONTAL }], - [PanRecognizer, { direction: DIRECTION_HORIZONTAL }, ['swipe']], - [TapRecognizer], - [TapRecognizer, { event: 'doubletap', taps: 2 }, ['tap']], - [PressRecognizer] - ], - - /** - * Some CSS properties can be used to improve the working of Hammer. - * Add them to this method and they will be set when creating a new Manager. - * @namespace - */ - cssProps: { + /** + * @event swipeleft + * @param {Object} ev + */ + /** + * @event swiperight + * @param {Object} ev + */ + /** + * @event swipeup + * @param {Object} ev + */ + /** + * @event swipedown + * @param {Object} ev + */ + Hammer.gestures.Swipe = { + name: 'swipe', + index: 40, + defaults: { /** - * Disables text selection to improve the dragging gesture. Mainly for desktop browsers. - * @type {String} - * @default 'none' + * @property swipeMinTouches + * @type {Number} + * @default 1 */ - userSelect: 'none', + swipeMinTouches: 1, /** - * Disable the Windows Phone grippers when pressing an element. - * @type {String} - * @default 'none' + * @property swipeMaxTouches + * @type {Number} + * @default 1 */ - touchSelect: 'none', + swipeMaxTouches: 1, /** - * Disables the default callout shown when you touch and hold a touch target. - * On iOS, when you touch and hold a touch target such as a link, Safari displays - * a callout containing information about the link. This property allows you to disable that callout. - * @type {String} - * @default 'none' + * horizontal swipe velocity + * @property swipeVelocityX + * @type {Number} + * @default 0.6 */ - touchCallout: 'none', + swipeVelocityX: 0.6, /** - * Specifies whether zooming is enabled. Used by IE10> - * @type {String} - * @default 'none' + * vertical swipe velocity + * @property swipeVelocityY + * @type {Number} + * @default 0.6 */ - contentZooming: 'none', + swipeVelocityY: 0.6 + }, - /** - * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers. - * @type {String} - * @default 'none' - */ - userDrag: 'none', + handler: function swipeGesture(ev, inst) { + if(ev.eventType == EVENT_RELEASE) { + var touches = ev.touches.length, + options = inst.options; - /** - * Overrides the highlight color shown when the user taps a link or a JavaScript - * clickable element in iOS. This property obeys the alpha value, if specified. - * @type {String} - * @default 'rgba(0,0,0,0)' - */ - tapHighlightColor: 'rgba(0,0,0,0)' + // max touches + if(touches < options.swipeMinTouches || + touches > options.swipeMaxTouches) { + return; + } + + // when the distance we moved is too small we skip this gesture + // or we can be already in dragging + if(ev.velocityX > options.swipeVelocityX || + ev.velocityY > options.swipeVelocityY) { + // trigger swipe events + inst.trigger(this.name, ev); + inst.trigger(this.name + ev.direction, ev); + } + } } }; - var STOP = 1; - var FORCED_STOP = 2; - /** - * Manager - * @param {HTMLElement} element - * @param {Object} [options] - * @constructor + * @module gestures + */ + /** + * Single tap and a double tap on a place + * + * @class Tap + * @static + */ + /** + * @event tap + * @param {Object} ev + */ + /** + * @event doubletap + * @param {Object} ev */ - function Manager(element, options) { - options = options || {}; - - this.options = merge(options, Hammer.defaults); - this.options.inputTarget = this.options.inputTarget || element; - - this.handlers = {}; - this.session = {}; - this.recognizers = []; - - this.element = element; - this.input = createInputInstance(this); - this.touchAction = new TouchAction(this, this.options.touchAction); - toggleCssProps(this, true); + /** + * @param {String} name + */ + (function(name) { + var hasMoved = false; - each(options.recognizers, function(item) { - var recognizer = this.add(new (item[0])(item[1])); - item[2] && recognizer.recognizeWith(item[2]); - item[3] && recognizer.requireFailure(item[3]); - }, this); - } + function tapGesture(ev, inst) { + var options = inst.options, + current = Detection.current, + prev = Detection.previous, + sincePrev, + didDoubleTap; - Manager.prototype = { - /** - * set options - * @param {Object} options - * @returns {Manager} - */ - set: function(options) { - extend(this.options, options); + switch(ev.eventType) { + case EVENT_START: + hasMoved = false; + break; - // Options that need a little more setup - if (options.touchAction) { - this.touchAction.update(); - } - if (options.inputTarget) { - // Clean up existing event listeners and reinitialize - this.input.destroy(); - this.input.target = options.inputTarget; - this.input.init(); - } - return this; - }, + case EVENT_MOVE: + hasMoved = hasMoved || (ev.distance > options.tapMaxDistance); + break; - /** - * stop recognizing for this session. - * This session will be discarded, when a new [input]start event is fired. - * When forced, the recognizer cycle is stopped immediately. - * @param {Boolean} [force] - */ - stop: function(force) { - this.session.stopped = force ? FORCED_STOP : STOP; - }, + case EVENT_END: + if(!Utils.inStr(ev.srcEvent.type, 'cancel') && ev.deltaTime < options.tapMaxTime && !hasMoved) { + // previous gesture, for the double tap since these are two different gesture detections + sincePrev = prev && prev.lastEvent && ev.timeStamp - prev.lastEvent.timeStamp; + didDoubleTap = false; + + // check if double tap + if(prev && prev.name == name && + (sincePrev && sincePrev < options.doubleTapInterval) && + ev.distance < options.doubleTapDistance) { + inst.trigger('doubletap', ev); + didDoubleTap = true; + } - /** - * run the recognizers! - * called by the inputHandler function on every movement of the pointers (touches) - * it walks through all the recognizers and tries to detect the gesture that is being made - * @param {Object} inputData - */ - recognize: function(inputData) { - var session = this.session; - if (session.stopped) { - return; + // do a single tap + if(!didDoubleTap || options.tapAlways) { + current.name = name; + inst.trigger(current.name, ev); + } + } + break; } + } - // run the touch-action polyfill - this.touchAction.preventDefaults(inputData); - - var recognizer; - var recognizers = this.recognizers; - - // this holds the recognizer that is being recognized. - // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED - // if no recognizer is detecting a thing, it is set to `null` - var curRecognizer = session.curRecognizer; - - // reset when the last recognizer is recognized - // or when we're in a new session - if (!curRecognizer || (curRecognizer && curRecognizer.state & STATE_RECOGNIZED)) { - curRecognizer = session.curRecognizer = null; + Hammer.gestures.Tap = { + name: name, + index: 100, + handler: tapGesture, + defaults: { + /** + * max time of a tap, this is for the slow tappers + * @property tapMaxTime + * @type {Number} + * @default 250 + */ + tapMaxTime: 250, + + /** + * max distance of movement of a tap, this is for the slow tappers + * @property tapMaxDistance + * @type {Number} + * @default 10 + */ + tapMaxDistance: 10, + + /** + * always trigger the `tap` event, even while double-tapping + * @property tapAlways + * @type {Boolean} + * @default true + */ + tapAlways: true, + + /** + * max distance between two taps + * @property doubleTapDistance + * @type {Number} + * @default 20 + */ + doubleTapDistance: 20, + + /** + * max time between two taps + * @property doubleTapInterval + * @type {Number} + * @default 300 + */ + doubleTapInterval: 300 } + }; + })('tap'); - var i = 0; - while (i < recognizers.length) { - recognizer = recognizers[i]; - - // find out if we are allowed try to recognize the input for this one. - // 1. allow if the session is NOT forced stopped (see the .stop() method) - // 2. allow if we still haven't recognized a gesture in this session, or the this recognizer is the one - // that is being recognized. - // 3. allow if the recognizer is allowed to run simultaneous with the current recognized recognizer. - // this can be setup with the `recognizeWith()` method on the recognizer. - if (session.stopped !== FORCED_STOP && ( // 1 - !curRecognizer || recognizer == curRecognizer || // 2 - recognizer.canRecognizeWith(curRecognizer))) { // 3 - recognizer.recognize(inputData); - } else { - recognizer.reset(); - } + /** + * @module gestures + */ + /** + * when a touch is being touched at the page + * + * @class Touch + * @static + */ + /** + * @event touch + * @param {Object} ev + */ + Hammer.gestures.Touch = { + name: 'touch', + index: -Infinity, + defaults: { + /** + * call preventDefault at touchstart, and makes the element blocking by disabling the scrolling of the page, + * but it improves gestures like transforming and dragging. + * be careful with using this, it can be very annoying for users to be stuck on the page + * @property preventDefault + * @type {Boolean} + * @default false + */ + preventDefault: false, - // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the - // current active recognizer. but only if we don't already have an active recognizer - if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) { - curRecognizer = session.curRecognizer = recognizer; - } - i++; - } + /** + * disable mouse events, so only touch (or pen!) input triggers events + * @property preventMouse + * @type {Boolean} + * @default false + */ + preventMouse: false }, - - /** - * get a recognizer by its event name. - * @param {Recognizer|String} recognizer - * @returns {Recognizer|Null} - */ - get: function(recognizer) { - if (recognizer instanceof Recognizer) { - return recognizer; + handler: function touchGesture(ev, inst) { + if(inst.options.preventMouse && ev.pointerType == POINTER_MOUSE) { + ev.stopDetect(); + return; } - var recognizers = this.recognizers; - for (var i = 0; i < recognizers.length; i++) { - if (recognizers[i].options.event == recognizer) { - return recognizers[i]; - } + if(inst.options.preventDefault) { + ev.preventDefault(); } - return null; - }, - /** - * add a recognizer to the manager - * existing recognizers with the same event name will be removed - * @param {Recognizer} recognizer - * @returns {Recognizer|Manager} - */ - add: function(recognizer) { - if (invokeArrayArg(recognizer, 'add', this)) { - return this; + if(ev.eventType == EVENT_TOUCH) { + inst.trigger('touch', ev); } + } + }; - // remove existing - var existing = this.get(recognizer.options.event); - if (existing) { - this.remove(existing); - } + /** + * @module gestures + */ + /** + * User want to scale or rotate with 2 fingers + * Preventing the default browser behavior is a good way to improve feel and working. This can be done with the + * `preventDefault` option. + * + * @class Transform + * @static + */ + /** + * @event transform + * @param {Object} ev + */ + /** + * @event transformstart + * @param {Object} ev + */ + /** + * @event transformend + * @param {Object} ev + */ + /** + * @event pinchin + * @param {Object} ev + */ + /** + * @event pinchout + * @param {Object} ev + */ + /** + * @event rotate + * @param {Object} ev + */ - this.recognizers.push(recognizer); - recognizer.manager = this; + /** + * @param {String} name + */ + (function(name) { + var triggered = false; - this.touchAction.update(); - return recognizer; - }, + function transformGesture(ev, inst) { + switch(ev.eventType) { + case EVENT_START: + triggered = false; + break; - /** - * remove a recognizer by name or instance - * @param {Recognizer|String} recognizer - * @returns {Manager} - */ - remove: function(recognizer) { - if (invokeArrayArg(recognizer, 'remove', this)) { - return this; - } + case EVENT_MOVE: + // at least multitouch + if(ev.touches.length < 2) { + return; + } - var recognizers = this.recognizers; - recognizer = this.get(recognizer); - recognizers.splice(inArray(recognizers, recognizer), 1); + var scaleThreshold = Math.abs(1 - ev.scale); + var rotationThreshold = Math.abs(ev.rotation); - this.touchAction.update(); - return this; - }, + // when the distance we moved is too small we skip this gesture + // or we can be already in dragging + if(scaleThreshold < inst.options.transformMinScale && + rotationThreshold < inst.options.transformMinRotation) { + return; + } - /** - * bind event - * @param {String} events - * @param {Function} handler - * @returns {EventEmitter} this - */ - on: function(events, handler) { - var handlers = this.handlers; - each(splitStr(events), function(event) { - handlers[event] = handlers[event] || []; - handlers[event].push(handler); - }); - return this; - }, + // we are transforming! + Detection.current.name = name; - /** - * unbind event, leave emit blank to remove all handlers - * @param {String} events - * @param {Function} [handler] - * @returns {EventEmitter} this - */ - off: function(events, handler) { - var handlers = this.handlers; - each(splitStr(events), function(event) { - if (!handler) { - delete handlers[event]; - } else { - handlers[event].splice(inArray(handlers[event], handler), 1); - } - }); - return this; - }, + // first time, trigger dragstart event + if(!triggered) { + inst.trigger(name + 'start', ev); + triggered = true; + } - /** - * emit event to the listeners - * @param {String} event - * @param {Object} data - */ - emit: function(event, data) { - // we also want to trigger dom events - if (this.options.domEvents) { - triggerDomEvent(event, data); - } + inst.trigger(name, ev); // basic transform event - // no handlers, so skip it all - var handlers = this.handlers[event] && this.handlers[event].slice(); - if (!handlers || !handlers.length) { - return; - } + // trigger rotate event + if(rotationThreshold > inst.options.transformMinRotation) { + inst.trigger('rotate', ev); + } - data.type = event; - data.preventDefault = function() { - data.srcEvent.preventDefault(); - }; + // trigger pinch event + if(scaleThreshold > inst.options.transformMinScale) { + inst.trigger('pinch', ev); + inst.trigger('pinch' + (ev.scale < 1 ? 'in' : 'out'), ev); + } + break; - var i = 0; - while (i < handlers.length) { - handlers[i](data); - i++; + case EVENT_RELEASE: + if(triggered && ev.changedLength < 2) { + inst.trigger(name + 'end', ev); + triggered = false; + } + break; } - }, - - /** - * destroy the manager and unbinds all events - * it doesn't unbind dom events, that is the user own responsibility - */ - destroy: function() { - this.element && toggleCssProps(this, false); - - this.handlers = {}; - this.session = {}; - this.input.destroy(); - this.element = null; } - }; - /** - * add/remove the css properties as defined in manager.options.cssProps - * @param {Manager} manager - * @param {Boolean} add - */ - function toggleCssProps(manager, add) { - var element = manager.element; - each(manager.options.cssProps, function(value, name) { - element.style[prefixed(element.style, name)] = add ? value : ''; - }); - } + Hammer.gestures.Transform = { + name: name, + index: 45, + defaults: { + /** + * minimal scale factor, no scale is 1, zoomin is to 0 and zoomout until higher then 1 + * @property transformMinScale + * @type {Number} + * @default 0.01 + */ + transformMinScale: 0.01, + + /** + * rotation in degrees + * @property transformMinRotation + * @type {Number} + * @default 1 + */ + transformMinRotation: 1 + }, + + handler: transformGesture + }; + })('transform'); /** - * trigger dom event - * @param {String} event - * @param {Object} data + * @module hammer */ - function triggerDomEvent(event, data) { - var gestureEvent = document.createEvent('Event'); - gestureEvent.initEvent(event, true, true); - gestureEvent.gesture = data; - data.target.dispatchEvent(gestureEvent); - } - extend(Hammer, { - INPUT_START: INPUT_START, - INPUT_MOVE: INPUT_MOVE, - INPUT_END: INPUT_END, - INPUT_CANCEL: INPUT_CANCEL, - - STATE_POSSIBLE: STATE_POSSIBLE, - STATE_BEGAN: STATE_BEGAN, - STATE_CHANGED: STATE_CHANGED, - STATE_ENDED: STATE_ENDED, - STATE_RECOGNIZED: STATE_RECOGNIZED, - STATE_CANCELLED: STATE_CANCELLED, - STATE_FAILED: STATE_FAILED, - - DIRECTION_NONE: DIRECTION_NONE, - DIRECTION_LEFT: DIRECTION_LEFT, - DIRECTION_RIGHT: DIRECTION_RIGHT, - DIRECTION_UP: DIRECTION_UP, - DIRECTION_DOWN: DIRECTION_DOWN, - DIRECTION_HORIZONTAL: DIRECTION_HORIZONTAL, - DIRECTION_VERTICAL: DIRECTION_VERTICAL, - DIRECTION_ALL: DIRECTION_ALL, - - Manager: Manager, - Input: Input, - TouchAction: TouchAction, - - TouchInput: TouchInput, - MouseInput: MouseInput, - PointerEventInput: PointerEventInput, - TouchMouseInput: TouchMouseInput, - SingleTouchInput: SingleTouchInput, - - Recognizer: Recognizer, - AttrRecognizer: AttrRecognizer, - Tap: TapRecognizer, - Pan: PanRecognizer, - Swipe: SwipeRecognizer, - Pinch: PinchRecognizer, - Rotate: RotateRecognizer, - Press: PressRecognizer, - - on: addEventListeners, - off: removeEventListeners, - each: each, - merge: merge, - extend: extend, - inherit: inherit, - bindFn: bindFn, - prefixed: prefixed - }); - - if ("function" == TYPE_FUNCTION && __webpack_require__(72)) { + // AMD export + if(true) { !(__WEBPACK_AMD_DEFINE_RESULT__ = function() { return Hammer; }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - } else if (typeof module != 'undefined' && module.exports) { + // commonjs export + } else if(typeof module !== 'undefined' && module.exports) { module.exports = Hammer; + // browser export } else { - window[exportName] = Hammer; + window.Hammer = Hammer; } - })(window, document, 'Hammer'); - + })(window); /***/ }, /* 60 */ @@ -34282,14 +33986,6 @@ return /******/ (function(modules) { // webpackBootstrap } -/***/ }, -/* 72 */ -/***/ function(module, exports, __webpack_require__) { - - /* WEBPACK VAR INJECTION */(function(__webpack_amd_options__) {module.exports = __webpack_amd_options__; - - /* WEBPACK VAR INJECTION */}.call(exports, {})) - /***/ } /******/ ]) }); diff --git a/dist/vis.map b/dist/vis.map index 4a5dca19..49475331 100644 --- a/dist/vis.map +++ b/dist/vis.map @@ -1 +1 @@ -{"version":3,"file":"vis.map","sources":["./dist/vis.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","util","DOMutil","DataSet","DataView","Queue","Graph3d","graph3d","Camera","Filter","Point2d","Point3d","Slider","StepNumber","Timeline","Graph2d","timeline","DateUtil","DataStep","Range","stack","TimeStep","components","items","Item","BackgroundItem","BoxItem","PointItem","RangeItem","Component","CurrentTime","CustomTime","DataAxis","GraphGroup","Group","BackgroundGroup","ItemSet","Legend","LineGraph","TimeAxis","Network","network","Edge","Groups","Images","Node","Popup","dotparser","gephiParser","Graph","Error","moment","hammer","isNumber","object","Number","isString","String","isDate","Date","match","ASPDateRegex","exec","isNaN","parse","isDataTable","google","visualization","DataTable","randomUUID","S4","Math","floor","random","toString","extend","a","i","len","arguments","length","other","prop","hasOwnProperty","selectiveExtend","props","Array","isArray","selectiveDeepExtend","b","TypeError","constructor","Object","undefined","deepExtend","selectiveNotDeepExtend","indexOf","equalArray","convert","type","Boolean","valueOf","isMoment","toDate","getType","toISOString","value","getAbsoluteLeft","elem","getBoundingClientRect","left","window","pageXOffset","getAbsoluteTop","top","pageYOffset","addClassName","className","classes","split","push","join","removeClassName","index","splice","forEach","callback","toArray","array","updateProperty","key","addEventListener","element","action","listener","useCapture","navigator","userAgent","attachEvent","removeEventListener","detachEvent","preventDefault","event","returnValue","getTarget","target","srcElement","nodeType","parentNode","option","asBoolean","defaultValue","asNumber","asString","asSize","asElement","GiveDec","Hex","Value","eval","GiveHex","Dec","parseColor","color","isValidRGB","rgb","substr","RGBToHex","isValidHex","hsv","hexToHSV","lighterColorHSV","h","s","v","min","darkerColorHSV","darkerColorHex","HSVToHex","lighterColorHex","background","border","highlight","hover","hexToRGB","hex","replace","toUpperCase","substring","d","e","f","r","g","red","green","blue","RGBToHSV","minRGB","maxRGB","max","hue","saturation","cssUtil","cssText","styles","style","trim","parts","keys","map","addCssText","currentStyles","newStyles","removeCssText","removeStyles","HSVToRGB","q","t","isOk","test","selectiveBridgeObject","fields","referenceObject","objectTo","create","bridgeObject","mergeOptions","mergeTarget","options","enabled","binarySearchCustom","orderedItems","searchFunction","field","field2","maxIterations","iteration","low","high","middle","item","searchResult","binarySearchValue","sidePreference","prevValue","nextValue","easeInOutQuad","start","end","duration","change","easingFunctions","linear","easeInQuad","easeOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","prepareElements","JSONcontainer","elementType","redundant","used","cleanupElements","removeChild","getSVGElement","svgContainer","shift","document","createElementNS","appendChild","getDOMElement","DOMContainer","insertBefore","createElement","drawPoint","x","y","group","point","drawPoints","setAttributeNS","size","drawBar","width","height","rect","data","_options","_data","_fieldId","fieldId","_type","_subscribers","add","setOptions","prototype","queue","_queue","destroy","on","subscribers","subscribe","off","filter","unsubscribe","_trigger","params","senderId","concat","subscriber","addedIds","me","_addItem","columns","_getColumnNames","row","rows","getNumberOfRows","col","cols","getValue","update","updatedIds","updatedData","addOrUpdate","_updateItem","get","ids","firstType","returnType","allowedValues","itemId","_getItem","order","_sort","_filterFields","_appendRow","result","getIds","getDataSet","mappedItems","filteredItem","name","sort","av","bv","remove","removedId","removedIds","_remove","clear","maxField","itemField","minField","distinct","values","fieldType","count","exists","types","raw","converted","JSON","stringify","dataTable","getNumberOfColumns","getColumnId","getColumnLabel","addRow","setValue","_ids","_onEvent","apply","setData","viewOptions","getArguments","defaultFilter","dataSet","added","updated","removed","delay","Infinity","_timeout","_extended","_flushIfNeeded","flush","methods","original","method","args","fn","context","entry","clearTimeout","setTimeout","container","SyntaxError","containerElement","margin","defaultXCenter","defaultYCenter","xLabel","yLabel","zLabel","passValueFn","xValueLabel","yValueLabel","zValueLabel","filterLabel","legendLabel","STYLE","DOT","showPerspective","showGrid","keepAspectRatio","showShadow","showGrayBottom","showTooltip","verticalRatio","animationInterval","animationPreload","camera","eye","dataPoints","colX","colY","colZ","colValue","colFilter","xMin","xStep","xMax","yMin","yStep","yMax","zMin","zStep","zMax","valueMin","valueMax","xBarWidth","yBarWidth","colorAxis","colorGrid","colorDot","colorDotBorder","getMouseX","clientX","targetTouches","getMouseY","clientY","Emitter","_setScale","scale","z","xCenter","yCenter","zCenter","setArmLocation","_convert3Dto2D","point3d","translation","_convertPointToTranslation","_convertTranslationToScreen","ax","ay","az","cx","getCameraLocation","cy","cz","sinTx","sin","getCameraRotation","cosTx","cos","sinTy","cosTy","sinTz","cosTz","dx","dy","dz","bx","by","ex","ey","ez","getArmLength","xcenter","frame","canvas","clientWidth","ycenter","_setBackgroundColor","backgroundColor","fill","stroke","strokeWidth","borderColor","borderWidth","borderStyle","BAR","BARCOLOR","BARSIZE","DOTLINE","DOTCOLOR","DOTSIZE","GRID","LINE","SURFACE","_getStyleNumber","styleName","_determineColumnIndexes","counter","column","getDistinctValues","distinctValues","getColumnRange","minMax","_dataInitialize","rawData","_onChange","dataFilter","setOnLoadCallback","redraw","withBars","defaultXBarWidth","dataX","defaultYBarWidth","dataY","xRange","defaultXMin","defaultXMax","defaultXStep","yRange","defaultYMin","defaultYMax","defaultYStep","zRange","defaultZMin","defaultZMax","defaultZStep","valueRange","defaultValueMin","defaultValueMax","_getDataPoints","obj","sortNumber","dataMatrix","xIndex","yIndex","trans","screen","bottom","pointRight","pointTop","pointCross","hasChildNodes","firstChild","position","overflow","noCanvas","fontWeight","padding","innerHTML","onmousedown","_onMouseDown","ontouchstart","_onTouchStart","onmousewheel","_onWheel","ontooltip","_onTooltip","onkeydown","setSize","_resizeCanvas","clientHeight","animationStart","slider","play","animationStop","stop","_resizeCenter","charAt","parseFloat","setCameraPosition","pos","horizontal","vertical","setArmRotation","distance","setArmLength","getCameraPosition","getArmRotation","_readData","_redrawFilter","animationAutoStart","cameraPosition","styleNumber","tooltip","showAnimationControls","_redrawSlider","_redrawClear","_redrawAxis","_redrawDataGrid","_redrawDataLine","_redrawDataBar","_redrawDataDot","_redrawInfo","_redrawLegend","ctx","getContext","clearRect","widthMin","widthMax","dotSize","right","lineWidth","font","ymin","ymax","_hsv2rgb","strokeStyle","beginPath","moveTo","lineTo","strokeRect","fillStyle","closePath","gridLineLen","step","getCurrent","next","textAlign","textBaseline","fillText","label","visible","setValues","setPlayInterval","onchange","getIndex","selectValue","setOnChangeCallback","lineStyle","getLabel","getSelectedValue","from","to","prettyStep","text","xText","yText","zText","offset","xOffset","yOffset","xMin2d","xMax2d","gridLenX","gridLenY","textMargin","armAngle","H","S","V","R","G","B","C","Hi","X","abs","parseInt","cross","topSideVisible","zAvg","transBottom","dist","sortDepth","aDiff","subtract","bDiff","crossproduct","crossProduct","radius","arc","PI","j","surface","corners","xWidth","yWidth","surfaces","center","avg","transCenter","diff","leftButtonDown","_onMouseUp","which","button","touchDown","startMouseX","startMouseY","startStart","startEnd","startArmRotation","cursor","onmousemove","_onMouseMove","onmouseup","diffX","diffY","horizontalNew","verticalNew","snapAngle","snapValue","round","parameters","emit","mouseX","mouseY","tooltipTimeout","_hideTooltip","dataPoint","_dataPointFromXY","_showTooltip","ontouchmove","_onTouchMove","ontouchend","_onTouchEnd","delta","wheelDelta","detail","oldLength","newLength","_insideTriangle","triangle","sign","as","bs","cs","distMax","closestDataPoint","closestDist","triangle1","triangle2","distX","distY","sqrt","content","line","dot","dom","borderRadius","boxShadow","borderLeft","contentWidth","offsetWidth","contentHeight","offsetHeight","lineHeight","dotWidth","dotHeight","armLocation","armRotation","armLength","cameraLocation","cameraRotation","calculateCameraOrientation","rot","graph","onLoadCallback","loadInBackground","isLoaded","getLoadedProgress","getColumn","getValues","dataView","progress","sub","sum","prev","bar","MozBorderRadius","slide","onclick","togglePlay","onChangeCallback","playTimeout","playInterval","playLoop","setIndex","playNext","interval","clearInterval","getPlayInterval","setPlayLoop","doLoop","onChange","indexToLeft","startClientX","startSlideX","leftToIndex","_start","_end","_step","precision","_current","setRange","setStep","calculatePrettyStep","log10","log","LN10","step1","pow","step2","step5","toPrecision","getStep","groups","forthArgument","defaultOptions","autoResize","orientation","maxHeight","minHeight","_create","body","domProps","emitter","bind","hiddenDates","snap","toScreen","_toScreen","toGlobalScreen","_toGlobalScreen","toTime","_toTime","toGlobalTime","_toGlobalTime","range","timeAxis","currentTime","customTime","itemSet","itemsData","groupsData","setGroups","setItems","Core","newDataSet","initialLoad","dataRange","_getDataRange","setWindow","animate","fit","setSelection","focus","getSelection","itemData","getItemRange","dataset","minItem","maxStartItem","maxEndItem","linegraph","getLegend","groupId","isGroupVisible","visibility","convertHiddenOptions","repeat","dateItem","updateHiddenDates","centerContainer","totalRange","pixelTime","startDate","endDate","_d","runUntil","clone","day","dayOfYear","year","dayOffset","date","month","console","removeDuplicates","startHidden","isHidden","endHidden","rangeStart","rangeEnd","hidden","startToFront","endToFront","_applyRange","safeDates","printDates","dates","stepOverHiddenDates","timeStep","previousTime","stepInHidden","currentValue","current","newValue","switchedYear","switchedMonth","switchedDay","time","conversion","getHiddenDurationBetween","correctTimeForHidden","hiddenDuration","totalDuration","partialDuration","accumulatedHiddenDuration","getAccumulatedHiddenDuration","newTime","getHiddenDurationBefore","timeOffset","requiredDuration","previousPoint","snapAwayFromHidden","direction","correctionEnabled","minimumStep","containerHeight","customRange","alignZeros","autoScale","stepIndex","marginStart","marginEnd","deadSpace","majorSteps","minorSteps","setMinimumStep","setFirst","safeSize","minimumStepValue","orderOfMagnitude","minorStepIdx","magnitudefactor","solutionFound","stepSize","niceStart","niceEnd","roundToMinor","marginRange","rounded","hasNext","previous","decimals","slice","exp","cnt","isMajor","now","hours","minutes","seconds","milliseconds","deltaDifference","scaleOffset","moveable","zoomable","zoomMin","zoomMax","touch","animateTimer","_onDragStart","_onDrag","_onDragEnd","_onHold","_onMouseWheel","_onTouch","_onPinch","validateDirection","getPointer","pageX","pageY","hammerUtil","_cancelAnimation","initStart","initEnd","initTime","anyChanged","dragging","done","changed","newStart","newEnd","getRange","totalHidden","previousDelta","allowDragging","gesture","deltaX","deltaY","diffRange","safeStart","safeEnd","fakeGesture","pointer","pointerDate","_pointerToDate","zoom","touches","centerDate","hiddenDurationBefore","hiddenDurationAfter","move","EPSILON","orderByStart","orderByEnd","aTime","bTime","force","iMax","axis","collidingItem","jj","collision","nostack","subgroups","newTop","subgroup","SCALE","DAY","MILLISECOND","SECOND","MINUTE","HOUR","WEEKDAY","MONTH","YEAR","first","setFullYear","getFullYear","setMonth","setDate","setHours","setMinutes","setSeconds","setMilliseconds","getMilliseconds","getSeconds","getMinutes","getHours","getDate","getMonth","setScale","newScale","newStep","setAutoScale","enable","stepYear","stepMonth","stepDay","stepHour","stepMinute","stepSecond","stepMillisecond","getLabelMinor","format","getLabelMajor","_isResized","resized","_previousWidth","_previousHeight","showCurrentTime","locales","locale","parent","backgroundVertical","title","currentTimeTimer","setCurrentTime","getCurrentTime","showCustomTime","eventParams","Hammer","drag","prevent_default","setCustomTime","getCustomTime","stopPropagation","svg","linegraphOptions","showMinorLabels","showMajorLabels","icons","majorLinesOffset","minorLinesOffset","labelOffsetX","labelOffsetY","iconWidth","linegraphSVG","DOMelements","lines","labels","conversionFactor","minWidth","stepPixels","stepPixelsForced","zeroCrossing","lineOffset","master","svgElements","iconsRemoved","amountOfGroups","lineContainer","scrollTop","addGroup","graphOptions","updateGroup","removeGroup","hide","show","display","_redrawGroupIcons","iconHeight","iconOffset","drawIcon","_cleanupIcons","backgroundHorizontal","changeCalled","activeGroups","_calculateCharSize","minorLabelHeight","minorCharHeight","majorLabelHeight","majorCharHeight","minorLineWidth","minorLineHeight","majorLineWidth","majorLineHeight","_redrawLabels","_redrawTitle","amountOfSteps","stepDifference","zeroStepDifference","valueAtZero","marginStartPos","maxLabelSize","_redrawLabel","_redrawLine","titleWidth","titleCharHeight","convertValue","invertedValue","convertedValue","characterHeight","largestWidth","majorCharWidth","minorCharWidth","textMinor","createTextNode","measureCharMinor","textMajor","measureCharMajor","textTitle","measureCharTitle","titleCharWidth","groupsUsingDefaultStyles","usingDefaultStyle","zeroPosition","Line","Bar","Points","setZeroPosition","catmullRom","parametrization","alpha","SVGcontainer","path","fillPath","fillHeight","outline","shaded","barWidth","bar1Height","bar2Height","icon","yAxisOrientation","getYRange","groupData","draw","framework","subgroupIndex","subgroupOrderer","subgroupOrder","visibleItems","byStart","byEnd","checkRangedItems","inner","foreground","marker","Element","getLabelWidth","restack","_updateVisibleItems","markerHeight","lastMarkerHeight","dirty","displayed","_calculateHeight","offsetTop","offsetLeft","ii","repositionY","resetSubgroups","labelSet","setParent","orderSubgroups","_checkIfVisible","sortArray","sortField","removeFromDataSet","removeItem","startArray","endArray","oldVisibleItems","visibleItemsLookup","lowerBound","upperBound","_checkIfVisibleWithReference","initialPosByStart","_traceVisible","initialPosByEnd","repositionX","initialPos","breakCondition","isVisible","align","groupOrder","selectable","editable","updateTime","onAdd","onUpdate","onMove","onRemove","onMoving","itemOptions","itemListeners","_onAdd","_onUpdate","_onRemove","groupListeners","_onAddGroups","_onUpdateGroups","_onRemoveGroups","groupIds","selection","stackDirty","touchParams","UNGROUPED","BACKGROUND","box","_updateUngrouped","backgroundGroup","_onSelectItem","_onMultiSelectItem","_onAddItem","addCallback","Function","markDirty","unselect","select","getVisibleItems","rawVisibleItems","_deselect","_orderGroups","visibleInterval","zoomed","lastVisibleInterval","lastWidth","firstGroup","_firstGroup","firstMargin","nonFirstMargin","groupMargin","groupResized","firstGroupIndex","firstGroupId","ungrouped","_getGroupId","getLabelSet","oldItemsData","getItems","_order","getGroups","_getType","_removeItem","groupOptions","oldGroupId","oldGroup","_constructByEndArray","itemFromTarget","selected","dragLeftItem","dragRightItem","initialX","itemProps","newProps","initial","groupFromTarget","_updateItemProps","_moveToGroup","changes","ctrlKey","srcEvent","shiftKey","oldSelection","newSelection","xAbs","newItem","_getItemRange","_item","itemSetFromTarget","side","iconSize","iconSpacing","textArea","scrollableHeight","drawLegendIcons","getComputedStyle","paddingTop","defaultGroup","sampling","graphHeight","barChart","handleOverlap","dataAxis","legend","abortedGraphUpdate","autoSizeSVG","lastStart","COUNTER","BarGraphFunctions","yAxisLeft","yAxisRight","legendLeft","legendRight","_updateAllGroupData","_updateGroup","groupsContent","ungroupedCounter","forceGraphUpdate","_updateGraph","rangePerPixelInv","preprocessedGroupData","processedGroupData","groupRanges","minDate","maxDate","_getRelevantData","_applySampling","_convertXcoordinates","_getYRanges","_updateYAxis","MAX_CYCLES","_convertYcoordinates","dataContainer","guess","increment","amountOfPoints","xDistance","pointsPerPixel","ceil","sampledData","barCombinedDataLeft","barCombinedDataRight","getStackedBarYRange","minVal","maxVal","yAxisLeftUsed","yAxisRightUsed","minLeft","minRight","maxLeft","maxRight","ignore","_toggleAxisVisiblity","drawIcons","axisUsed","datapoints","xValue","yValue","extractedData","svgHeight","majorLines","majorTexts","minorLines","minorTexts","lineTop","lang","parentChanged","foregroundNextSibling","nextSibling","backgroundNextSibling","_repaintLabels","timeLabelsize","xFirstMajorLabel","cur","_repaintMinorText","_repaintMajorText","_repaintMajorLine","_repaintMinorLine","leftTime","leftText","widthText","arr","pop","childNodes","nodeValue","_repaintDeleteButton","anchor","deleteButton","_updateContents","template","_updateTitle","removeAttribute","_updateDataAttributes","dataAttributes","attributes","setAttribute","_updateStyle","emptyContent","baseClassName","onTop","itemSubgroup","itemSetHeight","marginLeft","maxWidth","_repaintDragLeft","_repaintDragRight","contentLeft","parentWidth","boxWidth","dragLeft","dragRight","_initializeMixinLoaders","renderRefreshRate","renderTimestep","renderTime","maxPhysicsTicksPerRender","physicsDiscreteStepsize","initializing","triggerFunctions","edit","editEdge","connect","del","nodes","mass","radiusMin","radiusMax","shape","image","fontColor","fontSize","fontFace","fontFill","level","highlightColor","borderWidthSelected","edges","widthSelectionMultiplier","hoverWidth","arrowScaleFactor","dash","gap","altLength","inheritColor","configurePhysics","physics","barnesHut","theta","gravitationalConstant","centralGravity","springLength","springConstant","damping","repulsion","nodeDistance","hierarchicalRepulsion","clustering","initialMaxNodes","clusterThreshold","reduceToNodes","chainThreshold","clusterEdgeThreshold","sectorThreshold","screenSizeThreshold","fontSizeMultiplier","maxFontSize","forceAmplification","distanceAmplification","edgeGrowth","nodeScaling","maxNodeSizeIncrements","activeAreaBoxSize","clusterLevelDifference","navigation","keyboard","speed","dataManipulation","initiallyVisible","hierarchicalLayout","levelSeparation","nodeSpacing","layout","freezeForStabilization","smoothCurves","dynamic","roundness","maxVelocity","minVelocity","stabilize","stabilizationIterations","dragNetwork","dragNodes","hideEdgesOnDrag","hideNodesOnDrag","constants","pixelRatio","hoverObj","controlNodesActive","navigationHammers","existing","_new","animationSpeed","animationEasingFunction","easingTime","sourceScale","targetScale","sourceTranslation","targetTranslation","lockedOnNodeId","lockedOnNodeOffset","touchTime","images","setOnloadCallback","_redraw","xIncrement","yIncrement","zoomIncrement","_loadPhysicsSystem","_loadSectorSystem","_loadClusterSystem","_loadSelectionSystem","_loadHierarchySystem","_setTranslation","freezeSimulation","cachedFunctions","startedStabilization","stabilized","draggingNodes","calculationNodes","calculationNodeIndices","nodeIndices","canvasTopLeft","canvasBottomRight","pointerPosition","areaCenter","previousScale","nodesData","edgesData","nodesListeners","_addNodes","_updateNodes","_removeNodes","edgesListeners","_addEdges","_updateEdges","_removeEdges","moving","timer","_setupHierarchicalLayout","zoomExtent","startWithClustering","keycharm","MixinLoader","Activator","_getScriptPath","scripts","getElementsByTagName","src","_getRange","node","minY","maxY","minX","maxX","nodeId","_findCenter","animationOptions","initialZoom","disableStart","zoomLevel","numberOfNodes","factor","yDistance","xZoomLevel","yZoomLevel","animation","_updateNodeIndexList","_clearNodeIndexList","idx","dotData","DOTToGraph","gephi","gephiData","parseGephi","_setNodes","_setEdges","_putDataInSector","_resetLevels","_stabilize","onEdit","onEditEdge","onConnect","onDelete","editMode","newColorObj","groupname","clickToUse","activator","_createKeyBinds","_loadNavigationControls","_loadManipulationSystem","_configureSmoothCurves","devicePixelRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","backingStorePixelRatio","setTransform","pinch","_onTap","_onDoubleTap","_onMouseMoveTitle","hammerFrame","_onRelease","reset","isActive","_moveUp","_yStopMoving","_moveDown","_moveLeft","_xStopMoving","_moveRight","_zoomIn","_stopZoom","_zoomOut","_createManipulatorBar","_deleteSelected","_getPointer","pinched","_getScale","_handleTouch","_handleDragStart","_getNodeAt","_getTranslation","isSelected","_selectObject","nodeIds","objectId","selectionObj","xFixed","yFixed","_handleOnDrag","releaseNode","_XconvertDOMtoCanvas","_XconvertCanvasToDOM","_YconvertDOMtoCanvas","_YconvertCanvasToDOM","_handleDragEnd","_handleTap","_handleDoubleTap","_handleOnHold","_handleOnRelease","_zoom","scaleOld","preScaleDragPointer","DOMtoCanvas","scaleFrac","tx","ty","updateClustersDefault","postScaleDragPointer","canvasToDOM","popupObj","_checkHidePopup","checkShow","_checkShowPopup","popupTimer","edgeId","_getEdgeAt","_hoverObject","_blurObject","lastPopupNode","getTitle","isOverlappingWith","edge","connected","popup","setPosition","setText","emitEvent","oldWidth","oldHeight","oldNodesData","_updateSelection","angle","_updateCalculationNodes","_reconnectEdges","_updateValueRange","updateLabels","changedData","setProperties","properties","oldEdgesData","oldEdge","disconnect","showInternalIds","_createBezierNodes","via","sectors","dynamicEdges","setValueRange","w","save","translate","_doInAllSectors","restore","offsetX","offsetY","_drawNodes","alwaysShow","setScaleAndPos","inArea","sMax","_drawEdges","_drawControlNodes","_freezeDefinedNodes","_physicsTick","_restoreFrozenNodes","fixedData","_isMoving","vmin","isMoving","_discreteStepNodes","nodesPresent","discreteStepLimited","discreteStep","vminCorrected","mainMovingStatus","supportMovingStatus","_doInAllActiveSectors","mainMoving","_doInSupportSector","_animationStep","_handleNavigation","calculationTime","maxSteps","timeRequired","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","ua","toLowerCase","requiresTimeout","iterations","toggleFreeze","parentEdgeId","internalMultiplier","positionBezierNode","mixin","storePosition","storePositions","dataArray","allowedToMoveX","allowedToMoveY","getPositions","focusOnNode","nodePosition","lockedOnNode","easingFunction","animateView","locked","_transitionRedraw","viewCenter","distanceFromCenter","_classicRedraw","_lockedRedraw","active","getScale","getCenterCoordinates","networkConstants","fromId","toId","widthSelected","labelDimensions","yLine","dirtyLabel","fromBackup","toBackup","originalFromId","originalToId","widthFixed","lengthFixed","controlNodesEnabled","controlNodes","positions","connectedNode","_drawLine","_drawArrow","_drawArrowCenter","_drawDashLine","attachEdge","detachEdge","xFrom","yFrom","xTo","yTo","xObj","yObj","_getDistanceToEdge","_getColor","colorObj","_getLineWidth","_line","midpointX","midpointY","_pointOnLine","_label","resize","_circle","_pointOnCircle","networkScaleInv","_getViaCoordinates","xVia","yVia","quadraticCurveTo","lineCount","measureText","fillRect","mozDash","setLineDash","pattern","lineDashOffset","mozDashOffset","lineCap","dashedLine","percentage","atan2","arrow","edgeSegmentLength","fromBorderDist","distanceToBorder","fromBorderPoint","toBorderDist","toBorderPoint","x1","y1","x2","y2","x3","y3","lastX","lastY","minDistance","_getDistanceToLine","px","py","something","u","nodeIdFrom","nodeIdTo","getControlNodePositions","_enableControlNodes","_disableControlNodes","_getSelectedControlNode","fromDistance","toDistance","_restoreControlNodes","defaultIndex","DEFAULT","load","url","brokenUrl","img","Image","onload","onerror","imagelist","grouplist","reroutedEdges","fontDrawThreshold","horizontalAlignLeft","verticalAlignTop","baseRadiusValue","radiusFixed","preassignedLevel","hierarchyEnumerated","fx","fy","vx","vy","resetCluster","dynamicEdgesLength","clusterSession","clusterSizeWidthFactor","clusterSizeHeightFactor","clusterSizeRadiusFactor","growthIndicator","networkScale","formationScale","clusterSize","containedNodes","containedEdges","clusterSessions","originalLabel","triggerFunction","groupObj","imageObj","brokenImage","_drawDatabase","_resizeDatabase","_drawBox","_resizeBox","_drawCircle","_resizeCircle","_drawEllipse","_resizeEllipse","_drawImage","_resizeImage","_drawText","_resizeText","_drawDot","_resizeShape","_drawSquare","_drawTriangle","_drawTriangleDown","_drawStar","_reset","clearSizeCache","_setForce","_addForce","isFixed","velocity","getDistance","globalAlpha","drawImage","textSize","getTextSize","clusterLineWidth","selectionLineWidth","roundRect","database","diameter","circle","defaultSize","ellipse","_drawShape","radiusMultiplier","baseline","labelUnderNode","inView","clearVelocity","updateVelocity","massBeforeClustering","energyBefore","styleAttr","fontFamily","WebkitBorderRadius","whiteSpace","parseDOT","parseGraph","nextPreview","isAlphaNumeric","regexAlphaNumeric","merge","o","addNode","graphs","attr","addEdge","createEdge","getToken","tokenType","TOKENTYPE","NULL","token","isComment","DELIMITER","c2","DELIMITERS","IDENTIFIER","newSyntaxError","UNKNOWN","chop","strict","parseStatements","parseStatement","subgraph","parseSubgraph","parseEdge","parseAttributeStatement","parseNodeStatement","subgraphs","parseAttributeList","message","maxLength","forEach2","array1","array2","elem1","elem2","graphData","dotNode","graphNode","convertEdge","dotEdge","graphEdge","subEdge","{","}","[","]",";","=",",","->","--","gephiJSON","allowedToMove","gEdges","gNodes","gEdge","source","gNode","leftContainer","rightContainer","shadowTop","shadowBottom","shadowTopLeft","shadowBottomLeft","shadowTopRight","shadowBottomRight","_redrawTimer","listeners","events","scrollTopMin","redrawCount","_initAutoResize","component","_stopAutoResize","what","getWindow","borderRootHeight","borderRootWidth","autoHeight","centerWidth","_updateScrollTop","visibilityTop","visibilityBottom","MAX_REDRAWS","repaint","_startAutoResize","_onResize","lastHeight","watchTimer","setInterval","initialScrollTop","oldScrollTop","_getScrollTop","newScrollTop","_setScrollTop","eventType","getTouchList","collectEventData","custom","back","editNode","addDescription","edgeDescription","editEdgeDescription","createEdgeError","deleteClusterError","CanvasRenderingContext2D","square","s2","ir","triangleDown","star","n","r2d","kappa","ox","oy","xe","ye","xm","ym","bezierCurveTo","wEllipse","hEllipse","ymb","yeb","xt","yt","xi","yi","xl","yl","xr","yr","dashArray","dashLength","dashCount","slope","distRemaining","dashIndex","_catmullRom","_linear","dFill","_catmullRomUniform","p0","p1","p2","p3","bp1","bp2","normalization","d1","d2","d3","A","N","M","d3powA","d2powA","d3pow2A","d2pow2A","d1pow2A","d1powA","Bargraph","barCombinedData","coreDistance","drawData","combinedData","intersections","barPoints","_getDataIntersections","heightOffset","_getSafeDrawData","nextKey","amount","resolved","prevKey","accumulated","groupLabel","_getStackedBarYRange","xpos","PhysicsMixin","ClusterMixin","SectorsMixin","SelectionMixin","ManipulationMixin","NavigationMixin","HierarchicalLayoutMixin","_loadMixin","sourceVariable","mixinFunction","_clearMixin","_loadSelectedForceSolver","_loadPhysicsConfiguration","hubThreshold","activeSector","drawingNode","blockConnectingEdgeSelection","forceAppendSelection","manipulationDiv","editModeDiv","closeDiv","_cleanNavigation","_loadNavigationElements","overlay","_onTapOverlay","windowHammer","_hasParent","deactivate","escListener","activate","unbind","_callbacks","once","self","removeListener","removeAllListeners","callbacks","cb","hasListeners","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","_exportFunctions","_bound","keydown","keyup","_keys","fromCharCode","code","down","handleEvent","up","keyCode","bound","bindAll","getKey","newBindings","global","dfl","hasOwnProp","defaultParsingFlags","empty","unusedTokens","unusedInput","charsLeftOver","nullInput","invalidMonth","invalidFormat","userInvalidated","iso","printMsg","msg","suppressDeprecationWarnings","warn","deprecate","firstTime","deprecateSimple","deprecations","padToken","func","leftZeroFill","ordinalizeToken","period","localeData","ordinal","Locale","Moment","config","skipOverflow","checkOverflow","copyConfig","Duration","normalizedInput","normalizeObjectUnits","years","quarters","quarter","months","weeks","week","days","hour","minute","second","millisecond","_milliseconds","_days","_months","_locale","_bubble","val","_isAMomentObject","_i","_f","_l","_strict","_tzm","_isUTC","_offset","_pf","momentProperties","absRound","number","targetLength","forceSign","output","positiveMomentsDifference","base","res","isAfter","momentsDifference","makeAs","isBefore","createAdder","dur","tmp","addOrSubtractDurationFromMoment","mom","isAdding","updateOffset","setTime","rawSetter","rawGetter","rawMonthSetter","input","compareArrays","dontConvert","lengthDiff","diffs","toInt","normalizeUnits","units","lowered","unitAliases","camelFunctions","inputObject","normalizedProp","makeList","setter","getter","results","utc","set","argumentForCoercion","coercedNumber","isFinite","daysInMonth","UTC","getUTCDate","weeksInYear","dow","doy","weekOfYear","daysInYear","isLeapYear","_a","DATE","_overflowDayOfYear","isValid","_isValid","getTime","bigHour","normalizeLocale","chooseLocale","names","loadLocale","oldLocale","hasModule","model","local","removeFormattingTokens","makeFormatFunction","formattingTokens","formatTokenFunctions","formatMoment","expandFormat","formatFunctions","invalidDate","replaceLongDateFormatTokens","longDateFormat","localFormattingTokens","lastIndex","getParseRegexForToken","parseTokenOneDigit","parseTokenThreeDigits","parseTokenFourDigits","parseTokenOneToFourDigits","parseTokenSignedNumber","parseTokenSixDigits","parseTokenOneToSixDigits","parseTokenTwoDigits","parseTokenOneToThreeDigits","parseTokenWord","_meridiemParse","parseTokenOffsetMs","parseTokenTimestampMs","parseTokenTimezone","parseTokenT","parseTokenDigits","parseTokenOneOrTwoDigits","_ordinalParse","_ordinalParseLenient","RegExp","regexpEscape","unescapeFormat","timezoneMinutesFromString","string","possibleTzMatches","tzChunk","parseTimezoneChunker","addTimeToArrayFromToken","datePartArray","monthsParse","_dayOfYear","parseTwoDigitYear","_isPm","isPM","_useUTC","weekdaysParse","_w","invalidWeekday","dayOfYearFromWeekInfo","weekYear","weekday","temp","GG","W","E","_week","gg","dayOfYearFromWeeks","dateFromConfig","currentDate","yearToUse","currentDateArray","makeUTCDate","getUTCMonth","_nextDay","makeDate","setUTCMinutes","getUTCMinutes","dateFromObject","getUTCFullYear","makeDateFromStringAndFormat","ISO_8601","parseISO","parsedInput","tokens","skipped","stringLength","totalParsedInputLength","matched","p4","makeDateFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","NaN","score","l","isoRegex","isoDates","isoTimes","makeDateFromString","createFromInputFallback","makeDateFromInput","aspNetJsonRegex","ms","setUTCFullYear","parseWeekday","substituteTimeAgo","withoutSuffix","isFuture","relativeTime","posNegDuration","relativeTimeThresholds","firstDayOfWeek","firstDayOfWeekOfYear","adjustedMoment","daysToDayOfWeek","daysToAdd","getUTCDay","makeMoment","invalid","preparse","pickBy","moments","dayOfMonth","unit","makeAccessor","keepTime","daysToYears","yearsToDays","makeDurationGetter","makeGlobal","shouldDeprecate","ender","oldGlobalMoment","globalScope","VERSION","aspNetTimeSpanJsonRegex","isoDurationRegex","isoFormat","unitMillisecondFactors","Milliseconds","Seconds","Minutes","Hours","Days","Months","Years","D","Q","DDD","dayofyear","isoweekday","isoweek","weekyear","isoweekyear","ordinalizeTokens","paddedTokens","MMM","monthsShort","MMMM","dd","weekdaysMin","ddd","weekdaysShort","dddd","weekdays","isoWeek","YY","YYYY","YYYYY","YYYYYY","gggg","ggggg","isoWeekYear","GGGG","GGGGG","isoWeekday","meridiem","SS","SSS","SSSS","Z","zone","ZZ","zoneAbbr","zz","zoneName","unix","lists","DDDD","_monthsShort","monthName","regex","_monthsParse","_longMonthsParse","_shortMonthsParse","_weekdays","_weekdaysShort","_weekdaysMin","weekdayName","_weekdaysParse","_longDateFormat","LTS","LT","L","LL","LLL","LLLL","isLower","_calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","calendar","_relativeTime","future","past","mm","hh","MM","yy","pastFuture","_ordinal","postformat","_invalidDate","ret","parseIso","diffRes","isDuration","inp","version","defaultFormat","relativeTimeThreshold","threshold","limit","defineLocale","_abbr","abbr","langData","flags","parseZone","isDSTShifted","parsingFlags","invalidAt","keepLocalTime","_dateTzOffset","inputString","asFloat","daysAdjust","that","zoneDiff","startOf","humanize","fromNow","sod","isDST","getDay","endOf","inputMs","isSame","localAdjust","_changeInProgress","hasAlignedHourOffset","isoWeeksInYear","weekInfo","newLocaleData","getTimezoneOffset","isoWeeks","toJSON","withSuffix","toIsoString","asSeconds","asMilliseconds","asMinutes","asHours","asDays","asWeeks","asMonths","asYears","ordinalParse","require","noGlobal","exportName","setTimeoutContext","timeout","bindFn","invokeArrayArg","arg","each","iterator","dest","inherit","child","childP","baseP","_super","boolOrFn","TYPE_FUNCTION","ifUndefined","val1","val2","addEventListeners","handler","splitStr","removeEventListeners","hasParent","inStr","str","find","inArray","findByKey","uniqueArray","prefixed","property","prefix","camelProp","VENDOR_PREFIXES","uniqueId","_uniqueId","getWindowForElement","doc","ownerDocument","defaultView","parentWindow","Input","manager","inputTarget","domHandler","ev","init","createInputInstance","Type","inputClass","SUPPORT_POINTER_EVENTS","PointerEventInput","SUPPORT_ONLY_TOUCH","TouchInput","SUPPORT_TOUCH","TouchMouseInput","MouseInput","inputHandler","pointersLen","pointers","changedPointersLen","changedPointers","isFirst","INPUT_START","isFinal","INPUT_END","INPUT_CANCEL","session","computeInputData","recognize","prevInput","pointersLength","firstInput","simpleCloneInputData","firstMultiple","offsetCenter","getCenter","timeStamp","deltaTime","getAngle","computeDeltaXY","offsetDirection","getDirection","rotation","getRotation","computeIntervalInputData","offsetDelta","prevDelta","velocityX","velocityY","last","lastInterval","COMPUTE_INTERVAL","getVelocity","DIRECTION_NONE","DIRECTION_LEFT","DIRECTION_RIGHT","DIRECTION_UP","DIRECTION_DOWN","PROPS_XY","PROPS_CLIENT_XY","evEl","MOUSE_ELEMENT_EVENTS","evWin","MOUSE_WINDOW_EVENTS","allow","pressed","POINTER_ELEMENT_EVENTS","POINTER_WINDOW_EVENTS","store","pointerEvents","SingleTouchInput","evTarget","SINGLE_TOUCH_TARGET_EVENTS","SINGLE_TOUCH_WINDOW_EVENTS","started","normalizeSingleTouches","all","changedTouches","TOUCH_TARGET_EVENTS","targetIds","getTouches","allTouches","INPUT_MOVE","identifier","changedTargetTouches","mouse","TouchAction","cleanTouchActions","actions","TOUCH_ACTION_NONE","hasPanX","TOUCH_ACTION_PAN_X","hasPanY","TOUCH_ACTION_PAN_Y","TOUCH_ACTION_MANIPULATION","TOUCH_ACTION_AUTO","Recognizer","defaults","state","STATE_POSSIBLE","simultaneous","requireFail","stateStr","STATE_CANCELLED","STATE_ENDED","STATE_CHANGED","STATE_BEGAN","directionStr","getRecognizerByNameIfManager","otherRecognizer","recognizer","AttrRecognizer","PanRecognizer","pX","pY","PinchRecognizer","PressRecognizer","_timer","_input","RotateRecognizer","SwipeRecognizer","TapRecognizer","pTime","pCenter","recognizers","preset","Manager","handlers","touchAction","toggleCssProps","recognizeWith","requireFailure","cssProps","triggerDomEvent","gestureEvent","createEvent","initEvent","dispatchEvent","TEST_ELEMENT","MOBILE_REGEX","INPUT_TYPE_TOUCH","INPUT_TYPE_PEN","INPUT_TYPE_MOUSE","INPUT_TYPE_KINECT","DIRECTION_HORIZONTAL","DIRECTION_VERTICAL","DIRECTION_ALL","MOUSE_INPUT_MAP","mousedown","mousemove","mouseup","pointerType","POINTER_INPUT_MAP","pointerdown","pointermove","pointerup","pointercancel","pointerout","IE10_POINTER_TYPE_ENUM",2,3,4,5,"MSPointerEvent","removePointer","eventTypeNormalized","isTouch","storeIndex","pointerId","SINGLE_TOUCH_INPUT_MAP","touchstart","touchmove","touchend","touchcancel","TOUCH_INPUT_MAP","inputEvent","inputData","isMouse","PREFIXED_TOUCH_ACTION","NATIVE_TOUCH_ACTION","TOUCH_ACTION_COMPUTE","compute","getTouchAction","preventDefaults","prevented","hasNone","preventSrc","STATE_RECOGNIZED","STATE_FAILED","dropRecognizeWith","dropRequireFailure","hasRequireFailures","canRecognizeWith","withState","tryEmit","canEmit","inputDataClone","process","attrTest","optionPointers","isRecognized","directionTest","hasMoved","inOut","validPointers","validMovement","validTime","taps","posThreshold","validTouchTime","failTimeout","validInterval","validMultiTap","tapCount","domEvents","userSelect","touchSelect","touchCallout","contentZooming","userDrag","tapHighlightColor","STOP","FORCED_STOP","stopped","curRecognizer","Tap","Pan","Swipe","Pinch","Rotate","Press","clusterToFit","maxNumberOfNodes","reposition","maxLevels","forceAggregateHubs","normalizeClusterLevels","increaseClusterLevel","repositionNodes","openCluster","isMovingBeforeClustering","_nodeInActiveArea","_sector","_addSector","decreaseClusterLevel","_expandClusterNode","_updateDynamicEdges","updateClusters","zoomDirection","recursive","doNotStart","amountOfNodes","_collapseSector","_formClusters","_openClusters","_openClustersBySize","_aggregateHubs","handleChains","chainPercentage","_getChainFraction","_reduceAmountOfChains","_getHubSize","_formClustersByHub","openAll","containedNodeId","childNode","_expelChildFromParent","_unselectAll","_releaseContainedEdges","_connectEdgeBackToChild","_validateEdges","othersPresent","childNodeId","_repositionBezierNodes","_formClustersByZoom","_forceClustersByZoom","minLength","_addToCluster","_clusterToSmallestNeighbour","smallestNeighbour","smallestNeighbourNode","neighbour","onlyEqual","_formClusterFromHub","hubNode","absorptionSizeOffset","allowCluster","edgesIdarray","amountOfInitialEdges","_addToContainedEdges","_connectEdgeToCluster","_containCircularEdgesFromNode","massBefore","correction","edgeToId","edgeFromId","k","_addToReroutedEdges","maxLevel","minLevel","clusterLevel","targetLevel","average","averageSquared","hubCounter","largestHub","variance","standardDeviation","fraction","reduceAmount","chains","total","_switchToSector","sectorId","sectorType","_switchToActiveSector","_switchToFrozenSector","_switchToSupportSector","_loadLatestSector","_previousSector","_setActiveSector","newId","_forgetLastSector","_createNewSector","_deleteActiveSector","_deleteFrozenSector","_freezeSector","_activateSector","_mergeThisWithFrozen","_collapseThisToSingleCluster","sector","unqiueIdentifier","previousSector","runFunction","argument","returnValues","_doInAllFrozenSectors","_drawSectorNodes","_drawAllSectorNodes","_getNodesOverlappingWith","overlappingNodes","_getAllNodesOverlappingWith","_pointerToPositionObject","positionObject","_getEdgesOverlappingWith","overlappingEdges","_getAllEdgesOverlappingWith","_addToSelection","_addToHover","_removeFromSelection","doNotTrigger","_unselectClusters","_getSelectedNodeCount","_getSelectedNode","_getSelectedEdge","_getSelectedEdgeCount","_getSelectedObjectCount","_selectionIsEmpty","_clusterInSelection","_selectConnectedEdges","_hoverConnectedEdges","_unselectConnectedEdges","append","highlightEdges","overrideSelectable","DOM","_manipulationReleaseOverload","_navigationReleaseOverload","getSelectedNodes","edgeIds","getSelectedEdges","idArray","selectNodes","RangeError","selectEdges","_clearManipulatorBar","manipulationDOM","_restoreOverloadedFunctions","functionName","_toggleEditMode","toolbar","boundFunction","edgeBeingEdited","selectedControlNode","_createAddNodeToolbar","_createAddEdgeToolbar","_editNode","_createEditEdgeToolbar","_addNode","_handleConnect","_finishConnect","_selectControlNode","_controlNodeDrag","_releaseControlNode","newNode","_editEdge","alert","supportNodes","targetNode","connectionEdge","connectFromId","_createEdge","defaultData","finalizedData","sourceNodeId","targetNodeId","selectedNodes","selectedEdges","dispose","navigationDivs","navigationDivActions","_stopMovement","_zoomExtent","hubsize","definedLevel","undefinedLevel","_changeConstants","_determineLevels","_determineLevelsDirected","distribution","_getDistribution","_placeNodesByHierarchy","minPos","_placeBranchNodes","maxCount","_setLevel","_setLevelDirected","parentId","parentLevel","nodeMoved","_restoreNodes","graphToggleSmoothCurves","graph_toggleSmooth","getElementById","graphRepositionNodes","showValueOfRange","graphGenerateOptions","optionsSpecific","radioButton1","radioButton2","checked","backupConstants","optionsDiv","switchConfigurations","radioButton","querySelector","tableId","table","constantsVariableName","valueId","rangeValue","_overWriteGraphConstants","RepulsionMixin","HierarchialRepulsionMixin","BarnesHutMixin","_toggleBarnesHut","barnesHutTree","_initializeForceCalculation","_calculateForces","_calculateGravitationalForces","_calculateNodeForces","_calculateSpringForcesWithSupport","_calculateHierarchicalSpringForces","_calculateSpringForces","supportNodeId","gravity","gravityForce","edgeLength","springForce","combinedClusterSize","node1","node2","node3","_calculateSpringForce","physicsConfiguration","hierarchicalLayoutDirections","parentElement","rangeElement","radioButton3","graph_repositionNodes","graph_generateOptions","dynamicSmoothCurves","nameArray","webpackContext","req","resolve","repulsingForce","a_base","minimumDistance","steepness","springFx","springFy","totalFx","totalFy","correctionFx","correctionFy","nodeCount","_formBarnesHutTree","_getForceContribution","children","NW","NE","SW","SE","parentBranch","childrenCount","centerOfMass","calcSize","MAX_VALUE","sizeDiff","minimumTreeSize","rootSize","halfRootSize","centerX","centerY","_splitBranch","_placeInTree","_updateBranchMass","totalMass","totalMassInv","biggestSize","skipMassUpdate","_placeInRegion","region","containedNode","_insertRegion","childSize","_drawTree","_drawBranch","branch","webpackPolyfill","paths","__webpack_amd_options__"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"vis.map","sources":["./dist/vis.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","util","DOMutil","DataSet","DataView","Queue","Graph3d","graph3d","Camera","Filter","Point2d","Point3d","Slider","StepNumber","Timeline","Graph2d","timeline","DateUtil","DataStep","Range","stack","TimeStep","components","items","Item","BackgroundItem","BoxItem","PointItem","RangeItem","Component","CurrentTime","CustomTime","DataAxis","GraphGroup","Group","BackgroundGroup","ItemSet","Legend","LineGraph","TimeAxis","Network","network","Edge","Groups","Images","Node","Popup","dotparser","gephiParser","Graph","Error","moment","hammer","isNumber","object","Number","isString","String","isDate","Date","match","ASPDateRegex","exec","isNaN","parse","isDataTable","google","visualization","DataTable","randomUUID","S4","Math","floor","random","toString","extend","a","i","len","arguments","length","other","prop","hasOwnProperty","selectiveExtend","props","Array","isArray","selectiveDeepExtend","b","TypeError","constructor","Object","undefined","deepExtend","selectiveNotDeepExtend","indexOf","equalArray","convert","type","Boolean","valueOf","isMoment","toDate","getType","toISOString","value","getAbsoluteLeft","elem","getBoundingClientRect","left","window","pageXOffset","getAbsoluteTop","top","pageYOffset","addClassName","className","classes","split","push","join","removeClassName","index","splice","forEach","callback","toArray","array","updateProperty","key","addEventListener","element","action","listener","useCapture","navigator","userAgent","attachEvent","removeEventListener","detachEvent","preventDefault","event","returnValue","getTarget","target","srcElement","nodeType","parentNode","option","asBoolean","defaultValue","asNumber","asString","asSize","asElement","GiveDec","Hex","Value","eval","GiveHex","Dec","parseColor","color","isValidRGB","rgb","substr","RGBToHex","isValidHex","hsv","hexToHSV","lighterColorHSV","h","s","v","min","darkerColorHSV","darkerColorHex","HSVToHex","lighterColorHex","background","border","highlight","hover","hexToRGB","hex","replace","toUpperCase","substring","d","e","f","r","g","red","green","blue","RGBToHSV","minRGB","maxRGB","max","hue","saturation","cssUtil","cssText","styles","style","trim","parts","keys","map","addCssText","currentStyles","newStyles","removeCssText","removeStyles","HSVToRGB","q","t","isOk","test","selectiveBridgeObject","fields","referenceObject","objectTo","create","bridgeObject","mergeOptions","mergeTarget","options","enabled","binarySearchCustom","orderedItems","searchFunction","field","field2","maxIterations","iteration","low","high","middle","item","searchResult","binarySearchValue","sidePreference","prevValue","nextValue","easeInOutQuad","start","end","duration","change","easingFunctions","linear","easeInQuad","easeOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","prepareElements","JSONcontainer","elementType","redundant","used","cleanupElements","removeChild","getSVGElement","svgContainer","shift","document","createElementNS","appendChild","getDOMElement","DOMContainer","insertBefore","createElement","drawPoint","x","y","group","point","drawPoints","setAttributeNS","size","drawBar","width","height","rect","data","_options","_data","_fieldId","fieldId","_type","_subscribers","add","setOptions","prototype","queue","_queue","destroy","on","subscribers","subscribe","off","filter","unsubscribe","_trigger","params","senderId","concat","subscriber","addedIds","me","_addItem","columns","_getColumnNames","row","rows","getNumberOfRows","col","cols","getValue","update","updatedIds","updatedData","addOrUpdate","_updateItem","get","ids","firstType","returnType","allowedValues","itemId","_getItem","order","_sort","_filterFields","_appendRow","result","getIds","getDataSet","mappedItems","filteredItem","name","sort","av","bv","remove","removedId","removedIds","_remove","clear","maxField","itemField","minField","distinct","values","fieldType","count","exists","types","raw","converted","JSON","stringify","dataTable","getNumberOfColumns","getColumnId","getColumnLabel","addRow","setValue","_ids","_onEvent","apply","setData","viewOptions","getArguments","defaultFilter","dataSet","added","updated","removed","delay","Infinity","_timeout","_extended","_flushIfNeeded","flush","methods","original","method","args","fn","context","entry","clearTimeout","setTimeout","container","SyntaxError","containerElement","margin","defaultXCenter","defaultYCenter","xLabel","yLabel","zLabel","passValueFn","xValueLabel","yValueLabel","zValueLabel","filterLabel","legendLabel","STYLE","DOT","showPerspective","showGrid","keepAspectRatio","showShadow","showGrayBottom","showTooltip","verticalRatio","animationInterval","animationPreload","camera","eye","dataPoints","colX","colY","colZ","colValue","colFilter","xMin","xStep","xMax","yMin","yStep","yMax","zMin","zStep","zMax","valueMin","valueMax","xBarWidth","yBarWidth","colorAxis","colorGrid","colorDot","colorDotBorder","getMouseX","clientX","targetTouches","getMouseY","clientY","Emitter","_setScale","scale","z","xCenter","yCenter","zCenter","setArmLocation","_convert3Dto2D","point3d","translation","_convertPointToTranslation","_convertTranslationToScreen","ax","ay","az","cx","getCameraLocation","cy","cz","sinTx","sin","getCameraRotation","cosTx","cos","sinTy","cosTy","sinTz","cosTz","dx","dy","dz","bx","by","ex","ey","ez","getArmLength","xcenter","frame","canvas","clientWidth","ycenter","_setBackgroundColor","backgroundColor","fill","stroke","strokeWidth","borderColor","borderWidth","borderStyle","BAR","BARCOLOR","BARSIZE","DOTLINE","DOTCOLOR","DOTSIZE","GRID","LINE","SURFACE","_getStyleNumber","styleName","_determineColumnIndexes","counter","column","getDistinctValues","distinctValues","getColumnRange","minMax","_dataInitialize","rawData","_onChange","dataFilter","setOnLoadCallback","redraw","withBars","defaultXBarWidth","dataX","defaultYBarWidth","dataY","xRange","defaultXMin","defaultXMax","defaultXStep","yRange","defaultYMin","defaultYMax","defaultYStep","zRange","defaultZMin","defaultZMax","defaultZStep","valueRange","defaultValueMin","defaultValueMax","_getDataPoints","obj","sortNumber","dataMatrix","xIndex","yIndex","trans","screen","bottom","pointRight","pointTop","pointCross","hasChildNodes","firstChild","position","overflow","noCanvas","fontWeight","padding","innerHTML","onmousedown","_onMouseDown","ontouchstart","_onTouchStart","onmousewheel","_onWheel","ontooltip","_onTooltip","onkeydown","setSize","_resizeCanvas","clientHeight","animationStart","slider","play","animationStop","stop","_resizeCenter","charAt","parseFloat","setCameraPosition","pos","horizontal","vertical","setArmRotation","distance","setArmLength","getCameraPosition","getArmRotation","_readData","_redrawFilter","animationAutoStart","cameraPosition","styleNumber","tooltip","showAnimationControls","_redrawSlider","_redrawClear","_redrawAxis","_redrawDataGrid","_redrawDataLine","_redrawDataBar","_redrawDataDot","_redrawInfo","_redrawLegend","ctx","getContext","clearRect","widthMin","widthMax","dotSize","right","lineWidth","font","ymin","ymax","_hsv2rgb","strokeStyle","beginPath","moveTo","lineTo","strokeRect","fillStyle","closePath","gridLineLen","step","getCurrent","next","textAlign","textBaseline","fillText","label","visible","setValues","setPlayInterval","onchange","getIndex","selectValue","setOnChangeCallback","lineStyle","getLabel","getSelectedValue","from","to","prettyStep","text","xText","yText","zText","offset","xOffset","yOffset","xMin2d","xMax2d","gridLenX","gridLenY","textMargin","armAngle","H","S","V","R","G","B","C","Hi","X","abs","parseInt","cross","topSideVisible","zAvg","transBottom","dist","sortDepth","aDiff","subtract","bDiff","crossproduct","crossProduct","radius","arc","PI","j","surface","corners","xWidth","yWidth","surfaces","center","avg","transCenter","diff","leftButtonDown","_onMouseUp","which","button","touchDown","startMouseX","startMouseY","startStart","startEnd","startArmRotation","cursor","onmousemove","_onMouseMove","onmouseup","diffX","diffY","horizontalNew","verticalNew","snapAngle","snapValue","round","parameters","emit","mouseX","mouseY","tooltipTimeout","_hideTooltip","dataPoint","_dataPointFromXY","_showTooltip","ontouchmove","_onTouchMove","ontouchend","_onTouchEnd","delta","wheelDelta","detail","oldLength","newLength","_insideTriangle","triangle","sign","as","bs","cs","distMax","closestDataPoint","closestDist","triangle1","triangle2","distX","distY","sqrt","content","line","dot","dom","borderRadius","boxShadow","borderLeft","contentWidth","offsetWidth","contentHeight","offsetHeight","lineHeight","dotWidth","dotHeight","armLocation","armRotation","armLength","cameraLocation","cameraRotation","calculateCameraOrientation","rot","graph","onLoadCallback","loadInBackground","isLoaded","getLoadedProgress","getColumn","getValues","dataView","progress","sub","sum","prev","bar","MozBorderRadius","slide","onclick","togglePlay","onChangeCallback","playTimeout","playInterval","playLoop","setIndex","playNext","interval","clearInterval","getPlayInterval","setPlayLoop","doLoop","onChange","indexToLeft","startClientX","startSlideX","leftToIndex","_start","_end","_step","precision","_current","setRange","setStep","calculatePrettyStep","log10","log","LN10","step1","pow","step2","step5","toPrecision","getStep","groups","forthArgument","defaultOptions","autoResize","orientation","maxHeight","minHeight","_create","body","domProps","emitter","bind","hiddenDates","snap","toScreen","_toScreen","toGlobalScreen","_toGlobalScreen","toTime","_toTime","toGlobalTime","_toGlobalTime","range","timeAxis","currentTime","customTime","itemSet","itemsData","groupsData","setGroups","setItems","Core","newDataSet","initialLoad","dataRange","_getDataRange","setWindow","animate","fit","setSelection","focus","getSelection","itemData","getItemRange","dataset","minItem","maxStartItem","maxEndItem","linegraph","getLegend","groupId","isGroupVisible","visibility","convertHiddenOptions","repeat","dateItem","updateHiddenDates","centerContainer","totalRange","pixelTime","startDate","endDate","_d","runUntil","clone","day","dayOfYear","year","dayOffset","date","month","console","removeDuplicates","startHidden","isHidden","endHidden","rangeStart","rangeEnd","hidden","startToFront","endToFront","_applyRange","safeDates","printDates","dates","stepOverHiddenDates","timeStep","previousTime","stepInHidden","currentValue","current","newValue","switchedYear","switchedMonth","switchedDay","time","conversion","getHiddenDurationBetween","correctTimeForHidden","hiddenDuration","totalDuration","partialDuration","accumulatedHiddenDuration","getAccumulatedHiddenDuration","newTime","getHiddenDurationBefore","timeOffset","requiredDuration","previousPoint","snapAwayFromHidden","direction","correctionEnabled","minimumStep","containerHeight","customRange","alignZeros","autoScale","stepIndex","marginStart","marginEnd","deadSpace","majorSteps","minorSteps","setMinimumStep","setFirst","safeSize","minimumStepValue","orderOfMagnitude","minorStepIdx","magnitudefactor","solutionFound","stepSize","niceStart","niceEnd","roundToMinor","marginRange","rounded","hasNext","previous","decimals","slice","exp","cnt","isMajor","now","hours","minutes","seconds","milliseconds","deltaDifference","scaleOffset","moveable","zoomable","zoomMin","zoomMax","touch","animateTimer","_onDragStart","_onDrag","_onDragEnd","_onHold","_onMouseWheel","_onTouch","_onPinch","validateDirection","getPointer","pageX","pageY","hammerUtil","_cancelAnimation","initStart","initEnd","initTime","anyChanged","dragging","done","changed","newStart","newEnd","getRange","totalHidden","previousDelta","allowDragging","gesture","deltaX","deltaY","diffRange","safeStart","safeEnd","fakeGesture","pointer","pointerDate","_pointerToDate","zoom","touches","centerDate","hiddenDurationBefore","hiddenDurationAfter","move","EPSILON","orderByStart","orderByEnd","aTime","bTime","force","iMax","axis","collidingItem","jj","collision","nostack","subgroups","newTop","subgroup","format","FORMAT","minorLabels","millisecond","second","minute","hour","weekday","majorLabels","setFormat","defaultFormat","first","setFullYear","getFullYear","setMonth","setDate","setHours","setMinutes","setSeconds","setMilliseconds","getMilliseconds","getSeconds","getMinutes","getHours","getDate","getMonth","setScale","newScale","newStep","setAutoScale","enable","stepYear","stepMonth","stepDay","stepHour","stepMinute","stepSecond","stepMillisecond","getLabelMinor","getLabelMajor","_isResized","resized","_previousWidth","_previousHeight","showCurrentTime","locales","locale","parent","backgroundVertical","title","currentTimeTimer","setCurrentTime","getCurrentTime","showCustomTime","eventParams","Hammer","drag","prevent_default","setCustomTime","getCustomTime","stopPropagation","svg","linegraphOptions","showMinorLabels","showMajorLabels","icons","majorLinesOffset","minorLinesOffset","labelOffsetX","labelOffsetY","iconWidth","linegraphSVG","DOMelements","lines","labels","conversionFactor","minWidth","stepPixels","stepPixelsForced","zeroCrossing","lineOffset","master","svgElements","iconsRemoved","amountOfGroups","lineContainer","scrollTop","addGroup","graphOptions","updateGroup","removeGroup","hide","show","display","_redrawGroupIcons","iconHeight","iconOffset","drawIcon","_cleanupIcons","backgroundHorizontal","changeCalled","activeGroups","_calculateCharSize","minorLabelHeight","minorCharHeight","majorLabelHeight","majorCharHeight","minorLineWidth","minorLineHeight","majorLineWidth","majorLineHeight","_redrawLabels","_redrawTitle","amountOfSteps","stepDifference","zeroStepDifference","valueAtZero","marginStartPos","maxLabelSize","_redrawLabel","_redrawLine","titleWidth","titleCharHeight","convertValue","invertedValue","convertedValue","characterHeight","largestWidth","majorCharWidth","minorCharWidth","textMinor","createTextNode","measureCharMinor","textMajor","measureCharMajor","textTitle","measureCharTitle","titleCharWidth","groupsUsingDefaultStyles","usingDefaultStyle","zeroPosition","Line","Bar","Points","setZeroPosition","catmullRom","parametrization","alpha","SVGcontainer","path","fillPath","fillHeight","outline","shaded","barWidth","bar1Height","bar2Height","icon","yAxisOrientation","getYRange","groupData","draw","framework","subgroupIndex","subgroupOrderer","subgroupOrder","visibleItems","byStart","byEnd","checkRangedItems","inner","foreground","marker","Element","getLabelWidth","restack","_updateVisibleItems","markerHeight","lastMarkerHeight","dirty","displayed","_calculateHeight","offsetTop","offsetLeft","ii","repositionY","resetSubgroups","labelSet","setParent","orderSubgroups","_checkIfVisible","sortArray","sortField","removeFromDataSet","removeItem","startArray","endArray","oldVisibleItems","visibleItemsLookup","lowerBound","upperBound","_checkIfVisibleWithReference","initialPosByStart","_traceVisible","initialPosByEnd","repositionX","initialPos","breakCondition","isVisible","align","groupOrder","selectable","editable","updateTime","onAdd","onUpdate","onMove","onRemove","onMoving","itemOptions","itemListeners","_onAdd","_onUpdate","_onRemove","groupListeners","_onAddGroups","_onUpdateGroups","_onRemoveGroups","groupIds","selection","stackDirty","touchParams","UNGROUPED","BACKGROUND","box","_updateUngrouped","backgroundGroup","_onSelectItem","_onMultiSelectItem","_onAddItem","addCallback","Function","markDirty","unselect","select","getVisibleItems","rawVisibleItems","_deselect","_orderGroups","visibleInterval","zoomed","lastVisibleInterval","lastWidth","firstGroup","_firstGroup","firstMargin","nonFirstMargin","groupMargin","groupResized","firstGroupIndex","firstGroupId","ungrouped","_getGroupId","getLabelSet","oldItemsData","getItems","_order","getGroups","_getType","_removeItem","groupOptions","oldGroupId","oldGroup","_constructByEndArray","itemFromTarget","selected","dragLeftItem","dragRightItem","initialX","itemProps","newProps","initial","groupFromTarget","_updateItemProps","_moveToGroup","changes","ctrlKey","srcEvent","shiftKey","oldSelection","newSelection","xAbs","newItem","_getItemRange","_item","itemSetFromTarget","side","iconSize","iconSpacing","textArea","scrollableHeight","drawLegendIcons","getComputedStyle","paddingTop","defaultGroup","sampling","graphHeight","barChart","handleOverlap","dataAxis","legend","abortedGraphUpdate","autoSizeSVG","lastStart","COUNTER","BarGraphFunctions","yAxisLeft","yAxisRight","legendLeft","legendRight","_updateAllGroupData","_updateGroup","groupsContent","ungroupedCounter","forceGraphUpdate","_updateGraph","rangePerPixelInv","preprocessedGroupData","processedGroupData","groupRanges","minDate","maxDate","_getRelevantData","_applySampling","_convertXcoordinates","_getYRanges","_updateYAxis","MAX_CYCLES","_convertYcoordinates","dataContainer","guess","increment","amountOfPoints","xDistance","pointsPerPixel","ceil","sampledData","barCombinedDataLeft","barCombinedDataRight","getStackedBarYRange","minVal","maxVal","yAxisLeftUsed","yAxisRightUsed","minLeft","minRight","maxLeft","maxRight","ignore","_toggleAxisVisiblity","drawIcons","axisUsed","datapoints","xValue","yValue","extractedData","svgHeight","majorLines","majorTexts","minorLines","minorTexts","lineTop","lang","parentChanged","foregroundNextSibling","nextSibling","backgroundNextSibling","_repaintLabels","timeLabelsize","xFirstMajorLabel","cur","_repaintMinorText","_repaintMajorText","_repaintMajorLine","_repaintMinorLine","leftTime","leftText","widthText","arr","pop","childNodes","nodeValue","_repaintDeleteButton","anchor","deleteButton","_updateContents","template","_updateTitle","removeAttribute","_updateDataAttributes","dataAttributes","attributes","setAttribute","_updateStyle","emptyContent","baseClassName","onTop","itemSubgroup","itemSetHeight","marginLeft","maxWidth","_repaintDragLeft","_repaintDragRight","contentLeft","parentWidth","boxWidth","dragLeft","dragRight","_initializeMixinLoaders","renderRefreshRate","renderTimestep","renderTime","maxPhysicsTicksPerRender","physicsDiscreteStepsize","initializing","triggerFunctions","edit","editEdge","connect","del","nodes","mass","radiusMin","radiusMax","shape","image","fontColor","fontSize","fontFace","fontFill","level","highlightColor","borderWidthSelected","edges","widthSelectionMultiplier","hoverWidth","arrowScaleFactor","dash","gap","altLength","inheritColor","configurePhysics","physics","barnesHut","theta","gravitationalConstant","centralGravity","springLength","springConstant","damping","repulsion","nodeDistance","hierarchicalRepulsion","clustering","initialMaxNodes","clusterThreshold","reduceToNodes","chainThreshold","clusterEdgeThreshold","sectorThreshold","screenSizeThreshold","fontSizeMultiplier","maxFontSize","forceAmplification","distanceAmplification","edgeGrowth","nodeScaling","maxNodeSizeIncrements","activeAreaBoxSize","clusterLevelDifference","navigation","keyboard","speed","dataManipulation","initiallyVisible","hierarchicalLayout","levelSeparation","nodeSpacing","layout","freezeForStabilization","smoothCurves","dynamic","roundness","maxVelocity","minVelocity","stabilize","stabilizationIterations","dragNetwork","dragNodes","hideEdgesOnDrag","hideNodesOnDrag","constants","pixelRatio","hoverObj","controlNodesActive","navigationHammers","existing","_new","animationSpeed","animationEasingFunction","easingTime","sourceScale","targetScale","sourceTranslation","targetTranslation","lockedOnNodeId","lockedOnNodeOffset","touchTime","images","setOnloadCallback","_redraw","xIncrement","yIncrement","zoomIncrement","_loadPhysicsSystem","_loadSectorSystem","_loadClusterSystem","_loadSelectionSystem","_loadHierarchySystem","_setTranslation","freezeSimulation","cachedFunctions","startedStabilization","stabilized","draggingNodes","calculationNodes","calculationNodeIndices","nodeIndices","canvasTopLeft","canvasBottomRight","pointerPosition","areaCenter","previousScale","nodesData","edgesData","nodesListeners","_addNodes","_updateNodes","_removeNodes","edgesListeners","_addEdges","_updateEdges","_removeEdges","moving","timer","_setupHierarchicalLayout","zoomExtent","startWithClustering","keycharm","MixinLoader","Activator","_getScriptPath","scripts","getElementsByTagName","src","_getRange","node","minY","maxY","minX","maxX","nodeId","_findCenter","animationOptions","initialZoom","disableStart","zoomLevel","numberOfNodes","factor","yDistance","xZoomLevel","yZoomLevel","animation","_updateNodeIndexList","_clearNodeIndexList","idx","dotData","DOTToGraph","gephi","gephiData","parseGephi","_setNodes","_setEdges","_putDataInSector","_resetLevels","_stabilize","onEdit","onEditEdge","onConnect","onDelete","editMode","newColorObj","groupname","clickToUse","activator","_createKeyBinds","_loadNavigationControls","_loadManipulationSystem","_configureSmoothCurves","devicePixelRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","backingStorePixelRatio","setTransform","pinch","_onTap","_onDoubleTap","_onMouseMoveTitle","hammerFrame","_onRelease","reset","isActive","_moveUp","_yStopMoving","_moveDown","_moveLeft","_xStopMoving","_moveRight","_zoomIn","_stopZoom","_zoomOut","_createManipulatorBar","_deleteSelected","_getPointer","pinched","_getScale","_handleTouch","_handleDragStart","_getNodeAt","_getTranslation","isSelected","_selectObject","nodeIds","objectId","selectionObj","xFixed","yFixed","_handleOnDrag","releaseNode","_XconvertDOMtoCanvas","_XconvertCanvasToDOM","_YconvertDOMtoCanvas","_YconvertCanvasToDOM","_handleDragEnd","_handleTap","_handleDoubleTap","_handleOnHold","_handleOnRelease","_zoom","scaleOld","preScaleDragPointer","DOMtoCanvas","scaleFrac","tx","ty","updateClustersDefault","postScaleDragPointer","canvasToDOM","popupObj","_checkHidePopup","checkShow","_checkShowPopup","popupTimer","edgeId","_getEdgeAt","_hoverObject","_blurObject","lastPopupNode","getTitle","isOverlappingWith","edge","connected","popup","setPosition","setText","emitEvent","oldWidth","oldHeight","oldNodesData","_updateSelection","angle","_updateCalculationNodes","_reconnectEdges","_updateValueRange","updateLabels","changedData","setProperties","properties","oldEdgesData","oldEdge","disconnect","showInternalIds","_createBezierNodes","via","sectors","dynamicEdges","setValueRange","w","save","translate","_doInAllSectors","restore","offsetX","offsetY","_drawNodes","alwaysShow","setScaleAndPos","inArea","sMax","_drawEdges","_drawControlNodes","_freezeDefinedNodes","_physicsTick","_restoreFrozenNodes","fixedData","_isMoving","vmin","isMoving","_discreteStepNodes","nodesPresent","discreteStepLimited","discreteStep","vminCorrected","mainMovingStatus","supportMovingStatus","_doInAllActiveSectors","mainMoving","_doInSupportSector","_animationStep","_handleNavigation","calculationTime","maxSteps","timeRequired","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","ua","toLowerCase","requiresTimeout","iterations","toggleFreeze","parentEdgeId","internalMultiplier","positionBezierNode","mixin","storePosition","storePositions","dataArray","allowedToMoveX","allowedToMoveY","getPositions","focusOnNode","nodePosition","lockedOnNode","easingFunction","animateView","locked","_transitionRedraw","viewCenter","distanceFromCenter","_classicRedraw","_lockedRedraw","active","getScale","getCenterCoordinates","networkConstants","fromId","toId","widthSelected","labelDimensions","yLine","dirtyLabel","fromBackup","toBackup","originalFromId","originalToId","widthFixed","lengthFixed","controlNodesEnabled","controlNodes","positions","connectedNode","_drawLine","_drawArrow","_drawArrowCenter","_drawDashLine","attachEdge","detachEdge","xFrom","yFrom","xTo","yTo","xObj","yObj","_getDistanceToEdge","_getColor","colorObj","_getLineWidth","_line","midpointX","midpointY","_pointOnLine","_label","resize","_circle","_pointOnCircle","networkScaleInv","_getViaCoordinates","xVia","yVia","quadraticCurveTo","lineCount","measureText","fillRect","mozDash","setLineDash","pattern","lineDashOffset","mozDashOffset","lineCap","dashedLine","percentage","atan2","arrow","edgeSegmentLength","fromBorderDist","distanceToBorder","fromBorderPoint","toBorderDist","toBorderPoint","x1","y1","x2","y2","x3","y3","lastX","lastY","minDistance","_getDistanceToLine","px","py","something","u","nodeIdFrom","nodeIdTo","getControlNodePositions","_enableControlNodes","_disableControlNodes","_getSelectedControlNode","fromDistance","toDistance","_restoreControlNodes","defaultIndex","DEFAULT","load","url","brokenUrl","img","Image","onload","onerror","imagelist","grouplist","reroutedEdges","fontDrawThreshold","horizontalAlignLeft","verticalAlignTop","baseRadiusValue","radiusFixed","preassignedLevel","hierarchyEnumerated","fx","fy","vx","vy","resetCluster","dynamicEdgesLength","clusterSession","clusterSizeWidthFactor","clusterSizeHeightFactor","clusterSizeRadiusFactor","growthIndicator","networkScale","formationScale","clusterSize","containedNodes","containedEdges","clusterSessions","originalLabel","triggerFunction","groupObj","imageObj","brokenImage","_drawDatabase","_resizeDatabase","_drawBox","_resizeBox","_drawCircle","_resizeCircle","_drawEllipse","_resizeEllipse","_drawImage","_resizeImage","_drawText","_resizeText","_drawDot","_resizeShape","_drawSquare","_drawTriangle","_drawTriangleDown","_drawStar","_reset","clearSizeCache","_setForce","_addForce","isFixed","velocity","getDistance","globalAlpha","drawImage","textSize","getTextSize","clusterLineWidth","selectionLineWidth","roundRect","database","diameter","circle","defaultSize","ellipse","_drawShape","radiusMultiplier","baseline","labelUnderNode","inView","clearVelocity","updateVelocity","massBeforeClustering","energyBefore","styleAttr","fontFamily","WebkitBorderRadius","whiteSpace","parseDOT","parseGraph","nextPreview","isAlphaNumeric","regexAlphaNumeric","merge","o","addNode","graphs","attr","addEdge","createEdge","getToken","tokenType","TOKENTYPE","NULL","token","isComment","DELIMITER","c2","DELIMITERS","IDENTIFIER","newSyntaxError","UNKNOWN","chop","strict","parseStatements","parseStatement","subgraph","parseSubgraph","parseEdge","parseAttributeStatement","parseNodeStatement","subgraphs","parseAttributeList","message","maxLength","forEach2","array1","array2","elem1","elem2","graphData","dotNode","graphNode","convertEdge","dotEdge","graphEdge","subEdge","{","}","[","]",";","=",",","->","--","gephiJSON","allowedToMove","gEdges","gNodes","gEdge","source","gNode","leftContainer","rightContainer","shadowTop","shadowBottom","shadowTopLeft","shadowBottomLeft","shadowTopRight","shadowBottomRight","_redrawTimer","listeners","events","scrollTopMin","redrawCount","_initAutoResize","component","_stopAutoResize","what","getWindow","borderRootHeight","borderRootWidth","autoHeight","centerWidth","_updateScrollTop","visibilityTop","visibilityBottom","MAX_REDRAWS","repaint","_startAutoResize","_onResize","lastHeight","watchTimer","setInterval","initialScrollTop","oldScrollTop","_getScrollTop","newScrollTop","_setScrollTop","eventType","getTouchList","collectEventData","custom","back","editNode","addDescription","edgeDescription","editEdgeDescription","createEdgeError","deleteClusterError","CanvasRenderingContext2D","square","s2","ir","triangleDown","star","n","r2d","kappa","ox","oy","xe","ye","xm","ym","bezierCurveTo","wEllipse","hEllipse","ymb","yeb","xt","yt","xi","yi","xl","yl","xr","yr","dashArray","dashLength","dashCount","slope","distRemaining","dashIndex","_catmullRom","_linear","dFill","_catmullRomUniform","p0","p1","p2","p3","bp1","bp2","normalization","d1","d2","d3","A","N","M","d3powA","d2powA","d3pow2A","d2pow2A","d1pow2A","d1powA","Bargraph","barCombinedData","coreDistance","drawData","combinedData","intersections","barPoints","_getDataIntersections","heightOffset","_getSafeDrawData","nextKey","amount","resolved","prevKey","accumulated","groupLabel","_getStackedBarYRange","xpos","PhysicsMixin","ClusterMixin","SectorsMixin","SelectionMixin","ManipulationMixin","NavigationMixin","HierarchicalLayoutMixin","_loadMixin","sourceVariable","mixinFunction","_clearMixin","_loadSelectedForceSolver","_loadPhysicsConfiguration","hubThreshold","activeSector","drawingNode","blockConnectingEdgeSelection","forceAppendSelection","manipulationDiv","editModeDiv","closeDiv","_cleanNavigation","_loadNavigationElements","overlay","_onTapOverlay","windowHammer","_hasParent","deactivate","escListener","activate","unbind","_callbacks","once","self","removeListener","removeAllListeners","callbacks","cb","hasListeners","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","_exportFunctions","_bound","keydown","keyup","_keys","fromCharCode","code","down","handleEvent","up","keyCode","bound","bindAll","getKey","newBindings","global","dfl","hasOwnProp","defaultParsingFlags","empty","unusedTokens","unusedInput","charsLeftOver","nullInput","invalidMonth","invalidFormat","userInvalidated","iso","printMsg","msg","suppressDeprecationWarnings","warn","deprecate","firstTime","deprecateSimple","deprecations","padToken","func","leftZeroFill","ordinalizeToken","period","localeData","ordinal","Locale","Moment","config","skipOverflow","checkOverflow","copyConfig","Duration","normalizedInput","normalizeObjectUnits","years","quarters","quarter","months","weeks","week","days","_milliseconds","_days","_months","_locale","_bubble","val","_isAMomentObject","_i","_f","_l","_strict","_tzm","_isUTC","_offset","_pf","momentProperties","absRound","number","targetLength","forceSign","output","positiveMomentsDifference","base","res","isAfter","momentsDifference","makeAs","isBefore","createAdder","dur","tmp","addOrSubtractDurationFromMoment","mom","isAdding","updateOffset","setTime","rawSetter","rawGetter","rawMonthSetter","input","compareArrays","dontConvert","lengthDiff","diffs","toInt","normalizeUnits","units","lowered","unitAliases","camelFunctions","inputObject","normalizedProp","makeList","setter","getter","results","utc","set","argumentForCoercion","coercedNumber","isFinite","daysInMonth","UTC","getUTCDate","weeksInYear","dow","doy","weekOfYear","daysInYear","isLeapYear","_a","MONTH","DATE","YEAR","HOUR","MINUTE","SECOND","MILLISECOND","_overflowDayOfYear","isValid","_isValid","getTime","bigHour","normalizeLocale","chooseLocale","names","loadLocale","oldLocale","hasModule","model","local","removeFormattingTokens","makeFormatFunction","formattingTokens","formatTokenFunctions","formatMoment","expandFormat","formatFunctions","invalidDate","replaceLongDateFormatTokens","longDateFormat","localFormattingTokens","lastIndex","getParseRegexForToken","parseTokenOneDigit","parseTokenThreeDigits","parseTokenFourDigits","parseTokenOneToFourDigits","parseTokenSignedNumber","parseTokenSixDigits","parseTokenOneToSixDigits","parseTokenTwoDigits","parseTokenOneToThreeDigits","parseTokenWord","_meridiemParse","parseTokenOffsetMs","parseTokenTimestampMs","parseTokenTimezone","parseTokenT","parseTokenDigits","parseTokenOneOrTwoDigits","_ordinalParse","_ordinalParseLenient","RegExp","regexpEscape","unescapeFormat","timezoneMinutesFromString","string","possibleTzMatches","tzChunk","parseTimezoneChunker","addTimeToArrayFromToken","datePartArray","monthsParse","_dayOfYear","parseTwoDigitYear","_isPm","isPM","_useUTC","weekdaysParse","_w","invalidWeekday","dayOfYearFromWeekInfo","weekYear","temp","GG","W","E","_week","gg","dayOfYearFromWeeks","dateFromConfig","currentDate","yearToUse","currentDateArray","makeUTCDate","getUTCMonth","_nextDay","makeDate","setUTCMinutes","getUTCMinutes","dateFromObject","getUTCFullYear","makeDateFromStringAndFormat","ISO_8601","parseISO","parsedInput","tokens","skipped","stringLength","totalParsedInputLength","matched","p4","makeDateFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","NaN","score","l","isoRegex","isoDates","isoTimes","makeDateFromString","createFromInputFallback","makeDateFromInput","aspNetJsonRegex","ms","setUTCFullYear","parseWeekday","substituteTimeAgo","withoutSuffix","isFuture","relativeTime","posNegDuration","relativeTimeThresholds","firstDayOfWeek","firstDayOfWeekOfYear","adjustedMoment","daysToDayOfWeek","daysToAdd","getUTCDay","makeMoment","invalid","preparse","pickBy","moments","dayOfMonth","unit","makeAccessor","keepTime","daysToYears","yearsToDays","makeDurationGetter","makeGlobal","shouldDeprecate","ender","oldGlobalMoment","globalScope","VERSION","aspNetTimeSpanJsonRegex","isoDurationRegex","isoFormat","unitMillisecondFactors","Milliseconds","Seconds","Minutes","Hours","Days","Months","Years","D","Q","DDD","dayofyear","isoweekday","isoweek","weekyear","isoweekyear","ordinalizeTokens","paddedTokens","MMM","monthsShort","MMMM","dd","weekdaysMin","ddd","weekdaysShort","dddd","weekdays","isoWeek","YY","YYYY","YYYYY","YYYYYY","gggg","ggggg","isoWeekYear","GGGG","GGGGG","isoWeekday","meridiem","SS","SSS","SSSS","Z","zone","ZZ","zoneAbbr","zz","zoneName","unix","lists","DDDD","_monthsShort","monthName","regex","_monthsParse","_longMonthsParse","_shortMonthsParse","_weekdays","_weekdaysShort","_weekdaysMin","weekdayName","_weekdaysParse","_longDateFormat","LTS","LT","L","LL","LLL","LLLL","isLower","_calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","calendar","_relativeTime","future","past","mm","hh","MM","yy","pastFuture","_ordinal","postformat","_invalidDate","ret","parseIso","diffRes","isDuration","inp","version","relativeTimeThreshold","threshold","limit","defineLocale","_abbr","abbr","langData","flags","parseZone","isDSTShifted","parsingFlags","invalidAt","keepLocalTime","_dateTzOffset","inputString","asFloat","daysAdjust","that","zoneDiff","startOf","humanize","fromNow","sod","isDST","getDay","endOf","inputMs","isSame","localAdjust","_changeInProgress","hasAlignedHourOffset","isoWeeksInYear","weekInfo","newLocaleData","getTimezoneOffset","isoWeeks","toJSON","withSuffix","toIsoString","asSeconds","asMilliseconds","asMinutes","asHours","asDays","asWeeks","asMonths","asYears","ordinalParse","require","noGlobal","setup","READY","Event","determineEventTypes","Utils","each","gestures","Detection","register","onTouch","DOCUMENT","EVENT_MOVE","detect","EVENT_END","Instance","defaults","behavior","userSelect","touchAction","touchCallout","contentZooming","userDrag","tapHighlightColor","HAS_POINTEREVENTS","pointerEnabled","msPointerEnabled","HAS_TOUCHEVENTS","IS_MOBILE","NO_MOUSEEVENTS","CALCULATE_INTERVAL","EVENT_TYPES","DIRECTION_DOWN","DIRECTION_LEFT","DIRECTION_UP","DIRECTION_RIGHT","POINTER_MOUSE","POINTER_TOUCH","POINTER_PEN","EVENT_START","EVENT_RELEASE","EVENT_TOUCH","plugins","utils","dest","handler","iterator","inStr","find","inArray","hasParent","getCenter","getVelocity","deltaTime","getAngle","touch1","touch2","getDirection","getRotation","isVertical","setPrefixedCss","toggle","prefixes","toCamelCase","toggleBehavior","falseFn","onselectstart","ondragstart","str","preventMouseEvents","started","shouldDetect","hook","onTouchHandler","ev","triggerType","srcType","isPointer","isMouse","buttons","PointerEvent","matchType","updatePointer","doDetect","touchList","touchListLength","triggerChange","trigger","changedLength","changedTouches","evData","identifiers","identifier","pointerType","timeStamp","preventManipulation","stopDetect","pointers","touchlist","pointerEvent","pointerId","pt","MSPOINTER_TYPE_MOUSE","MSPOINTER_TYPE_TOUCH","MSPOINTER_TYPE_PEN","detection","stopped","startDetect","inst","eventData","startEvent","lastEvent","lastCalcEvent","futureCalcEvent","lastCalcData","extendEventData","instOptions","getCalculatedData","recalc","calcEv","calcData","velocityX","velocityY","interimAngle","interimDirection","startEv","lastEv","rotation","eventStartHandler","eventHandlers","createEvent","initEvent","dispatchEvent","state","dispose","eh","dragGesture","dragMaxTouches","triggered","dragMinDistance","startCenter","dragDistanceCorrection","dragLockToAxis","dragLockMinDistance","lastDirection","dragBlockVertical","dragBlockHorizontal","Drag","Gesture","holdGesture","holdTimeout","holdThreshold","Hold","Release","Swipe","swipeMinTouches","swipeMaxTouches","swipeVelocityX","swipeVelocityY","tapGesture","sincePrev","didDoubleTap","hasMoved","tapMaxDistance","tapMaxTime","doubleTapInterval","doubleTapDistance","tapAlways","Tap","Touch","preventMouse","transformGesture","scaleThreshold","rotationThreshold","transformMinScale","transformMinRotation","Transform","clusterToFit","maxNumberOfNodes","reposition","maxLevels","forceAggregateHubs","normalizeClusterLevels","increaseClusterLevel","repositionNodes","openCluster","isMovingBeforeClustering","_nodeInActiveArea","_sector","_addSector","decreaseClusterLevel","_expandClusterNode","_updateDynamicEdges","updateClusters","zoomDirection","recursive","doNotStart","amountOfNodes","_collapseSector","_formClusters","_openClusters","_openClustersBySize","_aggregateHubs","handleChains","chainPercentage","_getChainFraction","_reduceAmountOfChains","_getHubSize","_formClustersByHub","openAll","containedNodeId","childNode","_expelChildFromParent","_unselectAll","_releaseContainedEdges","_connectEdgeBackToChild","_validateEdges","othersPresent","childNodeId","_repositionBezierNodes","_formClustersByZoom","_forceClustersByZoom","minLength","_addToCluster","_clusterToSmallestNeighbour","smallestNeighbour","smallestNeighbourNode","neighbour","onlyEqual","_formClusterFromHub","hubNode","absorptionSizeOffset","allowCluster","edgesIdarray","amountOfInitialEdges","_addToContainedEdges","_connectEdgeToCluster","_containCircularEdgesFromNode","massBefore","correction","edgeToId","edgeFromId","k","_addToReroutedEdges","maxLevel","minLevel","clusterLevel","targetLevel","average","averageSquared","hubCounter","largestHub","variance","standardDeviation","fraction","reduceAmount","chains","total","_switchToSector","sectorId","sectorType","_switchToActiveSector","_switchToFrozenSector","_switchToSupportSector","_loadLatestSector","_previousSector","_setActiveSector","newId","_forgetLastSector","_createNewSector","_deleteActiveSector","_deleteFrozenSector","_freezeSector","_activateSector","_mergeThisWithFrozen","_collapseThisToSingleCluster","sector","unqiueIdentifier","previousSector","runFunction","argument","returnValues","_doInAllFrozenSectors","_drawSectorNodes","_drawAllSectorNodes","_getNodesOverlappingWith","overlappingNodes","_getAllNodesOverlappingWith","_pointerToPositionObject","positionObject","_getEdgesOverlappingWith","overlappingEdges","_getAllEdgesOverlappingWith","_addToSelection","_addToHover","_removeFromSelection","doNotTrigger","_unselectClusters","_getSelectedNodeCount","_getSelectedNode","_getSelectedEdge","_getSelectedEdgeCount","_getSelectedObjectCount","_selectionIsEmpty","_clusterInSelection","_selectConnectedEdges","_hoverConnectedEdges","_unselectConnectedEdges","append","highlightEdges","overrideSelectable","DOM","_manipulationReleaseOverload","_navigationReleaseOverload","getSelectedNodes","edgeIds","getSelectedEdges","idArray","selectNodes","RangeError","selectEdges","_clearManipulatorBar","manipulationDOM","_restoreOverloadedFunctions","functionName","_toggleEditMode","toolbar","boundFunction","edgeBeingEdited","selectedControlNode","_createAddNodeToolbar","_createAddEdgeToolbar","_editNode","_createEditEdgeToolbar","_addNode","_handleConnect","_finishConnect","_selectControlNode","_controlNodeDrag","_releaseControlNode","newNode","_editEdge","alert","supportNodes","targetNode","connectionEdge","connectFromId","_createEdge","defaultData","finalizedData","sourceNodeId","targetNodeId","selectedNodes","selectedEdges","navigationDivs","navigationDivActions","_stopMovement","_zoomExtent","hubsize","definedLevel","undefinedLevel","_changeConstants","_determineLevels","_determineLevelsDirected","distribution","_getDistribution","_placeNodesByHierarchy","minPos","_placeBranchNodes","maxCount","_setLevel","_setLevelDirected","parentId","parentLevel","nodeMoved","_restoreNodes","graphToggleSmoothCurves","graph_toggleSmooth","getElementById","graphRepositionNodes","showValueOfRange","graphGenerateOptions","optionsSpecific","radioButton1","radioButton2","checked","backupConstants","optionsDiv","switchConfigurations","radioButton","querySelector","tableId","table","constantsVariableName","valueId","rangeValue","_overWriteGraphConstants","RepulsionMixin","HierarchialRepulsionMixin","BarnesHutMixin","_toggleBarnesHut","barnesHutTree","_initializeForceCalculation","_calculateForces","_calculateGravitationalForces","_calculateNodeForces","_calculateSpringForcesWithSupport","_calculateHierarchicalSpringForces","_calculateSpringForces","supportNodeId","gravity","gravityForce","edgeLength","springForce","combinedClusterSize","node1","node2","node3","_calculateSpringForce","physicsConfiguration","hierarchicalLayoutDirections","parentElement","rangeElement","radioButton3","graph_repositionNodes","graph_generateOptions","dynamicSmoothCurves","nameArray","webpackContext","req","resolve","repulsingForce","a_base","minimumDistance","steepness","springFx","springFy","totalFx","totalFy","correctionFx","correctionFy","nodeCount","_formBarnesHutTree","_getForceContribution","children","NW","NE","SW","SE","parentBranch","childrenCount","centerOfMass","calcSize","MAX_VALUE","sizeDiff","minimumTreeSize","rootSize","halfRootSize","centerX","centerY","_splitBranch","_placeInTree","_updateBranchMass","totalMass","totalMassInv","biggestSize","skipMassUpdate","_placeInRegion","region","containedNode","_insertRegion","childSize","_drawTree","_drawBranch","branch","webpackPolyfill","paths"],"mappings":"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"} \ No newline at end of file diff --git a/dist/vis.min.js b/dist/vis.min.js index fcff8307..09b437b2 100644 --- a/dist/vis.min.js +++ b/dist/vis.min.js @@ -5,7 +5,7 @@ * A dynamic, browser-based visualization library. * * @version 3.7.2-SNAPSHOT - * @date 2014-12-18 + * @date 2014-12-19 * * @license * Copyright (C) 2011-2014 Almende B.V, http://almende.com @@ -23,17 +23,17 @@ * Vis.js may be distributed under either license. */ "use strict";!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):"object"==typeof exports?exports.vis=e():t.vis=e()}(this,function(){return function(t){function e(s){if(i[s])return i[s].exports;var o=i[s]={exports:{},id:s,loaded:!1};return t[s].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}var i={};return e.m=t,e.c=i,e.p="",e(0)}([function(t,e,i){e.util=i(1),e.DOMutil=i(2),e.DataSet=i(3),e.DataView=i(4),e.Queue=i(5),e.Graph3d=i(6),e.graph3d={Camera:i(7),Filter:i(8),Point2d:i(9),Point3d:i(10),Slider:i(11),StepNumber:i(12)},e.Timeline=i(13),e.Graph2d=i(14),e.timeline={DateUtil:i(15),DataStep:i(16),Range:i(17),stack:i(18),TimeStep:i(19),components:{items:{Item:i(31),BackgroundItem:i(32),BoxItem:i(33),PointItem:i(34),RangeItem:i(35)},Component:i(20),CurrentTime:i(21),CustomTime:i(22),DataAxis:i(23),GraphGroup:i(24),Group:i(25),BackgroundGroup:i(26),ItemSet:i(27),Legend:i(28),LineGraph:i(29),TimeAxis:i(30)}},e.Network=i(36),e.network={Edge:i(37),Groups:i(38),Images:i(39),Node:i(40),Popup:i(41),dotparser:i(42),gephiParser:i(43)},e.Graph=function(){throw new Error("Graph is renamed to Network. Please create a graph as new vis.Network(...)")},e.moment=i(44),e.hammer=i(45)},function(module,exports,__webpack_require__){var moment=__webpack_require__(44);exports.isNumber=function(t){return t instanceof Number||"number"==typeof t},exports.isString=function(t){return t instanceof String||"string"==typeof t},exports.isDate=function(t){if(t instanceof Date)return!0;if(exports.isString(t)){var e=ASPDateRegex.exec(t);if(e)return!0;if(!isNaN(Date.parse(t)))return!0}return!1},exports.isDataTable=function(t){return"undefined"!=typeof google&&google.visualization&&google.visualization.DataTable&&t instanceof google.visualization.DataTable},exports.randomUUID=function(){var t=function(){return Math.floor(65536*Math.random()).toString(16)};return t()+t()+"-"+t()+"-"+t()+"-"+t()+"-"+t()+t()+t()},exports.extend=function(t){for(var e=1,i=arguments.length;i>e;e++){var s=arguments[e];for(var o in s)s.hasOwnProperty(o)&&(t[o]=s[o])}return t},exports.selectiveExtend=function(t,e){if(!Array.isArray(t))throw new Error("Array with property names expected as first argument");for(var i=2;ii;i++)if(t[i]!=e[i])return!1;return!0},exports.convert=function(t,e){var i;if(void 0===t)return void 0;if(null===t)return null;if(!e)return t;if("string"!=typeof e&&!(e instanceof String))throw new Error("Type must be a string");switch(e){case"boolean":case"Boolean":return Boolean(t);case"number":case"Number":return Number(t.valueOf());case"string":case"String":return String(t);case"Date":if(exports.isNumber(t))return new Date(t);if(t instanceof Date)return new Date(t.valueOf());if(moment.isMoment(t))return new Date(t.valueOf());if(exports.isString(t))return i=ASPDateRegex.exec(t),i?new Date(Number(i[1])):moment(t).toDate();throw new Error("Cannot convert object of type "+exports.getType(t)+" to type Date");case"Moment":if(exports.isNumber(t))return moment(t);if(t instanceof Date)return moment(t.valueOf());if(moment.isMoment(t))return moment(t);if(exports.isString(t))return i=ASPDateRegex.exec(t),moment(i?Number(i[1]):t);throw new Error("Cannot convert object of type "+exports.getType(t)+" to type Date");case"ISODate":if(exports.isNumber(t))return new Date(t);if(t instanceof Date)return t.toISOString();if(moment.isMoment(t))return t.toDate().toISOString();if(exports.isString(t))return i=ASPDateRegex.exec(t),i?new Date(Number(i[1])).toISOString():new Date(t).toISOString();throw new Error("Cannot convert object of type "+exports.getType(t)+" to type ISODate");case"ASPDate":if(exports.isNumber(t))return"/Date("+t+")/";if(t instanceof Date)return"/Date("+t.valueOf()+")/";if(exports.isString(t)){i=ASPDateRegex.exec(t);var s;return s=i?new Date(Number(i[1])).valueOf():new Date(t).valueOf(),"/Date("+s+")/"}throw new Error("Cannot convert object of type "+exports.getType(t)+" to type ASPDate");default:throw new Error('Unknown type "'+e+'"')}};var ASPDateRegex=/^\/?Date\((\-?\d+)/i;exports.getType=function(t){var e=typeof t;return"object"==e?null==t?"null":t instanceof Boolean?"Boolean":t instanceof Number?"Number":t instanceof String?"String":Array.isArray(t)?"Array":t instanceof Date?"Date":"Object":"number"==e?"Number":"boolean"==e?"Boolean":"string"==e?"String":e},exports.getAbsoluteLeft=function(t){return t.getBoundingClientRect().left+window.pageXOffset},exports.getAbsoluteTop=function(t){return t.getBoundingClientRect().top+window.pageYOffset},exports.addClassName=function(t,e){var i=t.className.split(" ");-1==i.indexOf(e)&&(i.push(e),t.className=i.join(" "))},exports.removeClassName=function(t,e){var i=t.className.split(" "),s=i.indexOf(e);-1!=s&&(i.splice(s,1),t.className=i.join(" "))},exports.forEach=function(t,e){var i,s;if(Array.isArray(t))for(i=0,s=t.length;s>i;i++)e(t[i],i,t);else for(i in t)t.hasOwnProperty(i)&&e(t[i],i,t)},exports.toArray=function(t){var e=[];for(var i in t)t.hasOwnProperty(i)&&e.push(t[i]);return e},exports.updateProperty=function(t,e,i){return t[e]!==i?(t[e]=i,!0):!1},exports.addEventListener=function(t,e,i,s){t.addEventListener?(void 0===s&&(s=!1),"mousewheel"===e&&navigator.userAgent.indexOf("Firefox")>=0&&(e="DOMMouseScroll"),t.addEventListener(e,i,s)):t.attachEvent("on"+e,i)},exports.removeEventListener=function(t,e,i,s){t.removeEventListener?(void 0===s&&(s=!1),"mousewheel"===e&&navigator.userAgent.indexOf("Firefox")>=0&&(e="DOMMouseScroll"),t.removeEventListener(e,i,s)):t.detachEvent("on"+e,i)},exports.preventDefault=function(t){t||(t=window.event),t.preventDefault?t.preventDefault():t.returnValue=!1},exports.getTarget=function(t){t||(t=window.event);var e;return t.target?e=t.target:t.srcElement&&(e=t.srcElement),void 0!=e.nodeType&&3==e.nodeType&&(e=e.parentNode),e},exports.option={},exports.option.asBoolean=function(t,e){return"function"==typeof t&&(t=t()),null!=t?0!=t:e||null},exports.option.asNumber=function(t,e){return"function"==typeof t&&(t=t()),null!=t?Number(t)||e||null:e||null},exports.option.asString=function(t,e){return"function"==typeof t&&(t=t()),null!=t?String(t):e||null},exports.option.asSize=function(t,e){return"function"==typeof t&&(t=t()),exports.isString(t)?t:exports.isNumber(t)?t+"px":e||null},exports.option.asElement=function(t,e){return"function"==typeof t&&(t=t()),t||e||null},exports.GiveDec=function(Hex){var Value;return Value="A"==Hex?10:"B"==Hex?11:"C"==Hex?12:"D"==Hex?13:"E"==Hex?14:"F"==Hex?15:eval(Hex)},exports.GiveHex=function(t){var e;return e=10==t?"A":11==t?"B":12==t?"C":13==t?"D":14==t?"E":15==t?"F":""+t},exports.parseColor=function(t){var e;if(exports.isString(t)){if(exports.isValidRGB(t)){var i=t.substr(4).substr(0,t.length-5).split(",");t=exports.RGBToHex(i[0],i[1],i[2])}if(exports.isValidHex(t)){var s=exports.hexToHSV(t),o={h:s.h,s:.45*s.s,v:Math.min(1,1.05*s.v)},n={h:s.h,s:Math.min(1,1.25*s.v),v:.6*s.v},r=exports.HSVToHex(n.h,n.h,n.v),a=exports.HSVToHex(o.h,o.s,o.v);e={background:t,border:r,highlight:{background:a,border:r},hover:{background:a,border:r}}}else e={background:t,border:t,highlight:{background:t,border:t},hover:{background:t,border:t}}}else e={},e.background=t.background||"white",e.border=t.border||e.background,exports.isString(t.highlight)?e.highlight={border:t.highlight,background:t.highlight}:(e.highlight={},e.highlight.background=t.highlight&&t.highlight.background||e.background,e.highlight.border=t.highlight&&t.highlight.border||e.border),exports.isString(t.hover)?e.hover={border:t.hover,background:t.hover}:(e.hover={},e.hover.background=t.hover&&t.hover.background||e.background,e.hover.border=t.hover&&t.hover.border||e.border);return e},exports.hexToRGB=function(t){t=t.replace("#","").toUpperCase();var e=exports.GiveDec(t.substring(0,1)),i=exports.GiveDec(t.substring(1,2)),s=exports.GiveDec(t.substring(2,3)),o=exports.GiveDec(t.substring(3,4)),n=exports.GiveDec(t.substring(4,5)),r=exports.GiveDec(t.substring(5,6)),a=16*e+i,h=16*s+o,i=16*n+r;return{r:a,g:h,b:i}},exports.RGBToHex=function(t,e,i){var s=exports.GiveHex(Math.floor(t/16)),o=exports.GiveHex(t%16),n=exports.GiveHex(Math.floor(e/16)),r=exports.GiveHex(e%16),a=exports.GiveHex(Math.floor(i/16)),h=exports.GiveHex(i%16),d=s+o+n+r+a+h;return"#"+d},exports.RGBToHSV=function(t,e,i){t/=255,e/=255,i/=255;var s=Math.min(t,Math.min(e,i)),o=Math.max(t,Math.max(e,i));if(s==o)return{h:0,s:0,v:s};var n=t==s?e-i:i==s?t-e:i-t,r=t==s?3:i==s?1:5,a=60*(r-n/(o-s))/360,h=(o-s)/o,d=o;return{h:a,s:h,v:d}};var cssUtil={split:function(t){var e={};return t.split(";").forEach(function(t){if(""!=t.trim()){var i=t.split(":"),s=i[0].trim(),o=i[1].trim();e[s]=o}}),e},join:function(t){return Object.keys(t).map(function(e){return e+": "+t[e]}).join("; ")}};exports.addCssText=function(t,e){var i=cssUtil.split(t.style.cssText),s=cssUtil.split(e),o=exports.extend(i,s);t.style.cssText=cssUtil.join(o)},exports.removeCssText=function(t,e){var i=cssUtil.split(t.style.cssText),s=cssUtil.split(e);for(var o in s)s.hasOwnProperty(o)&&delete i[o];t.style.cssText=cssUtil.join(i)},exports.HSVToRGB=function(t,e,i){var s,o,n,r=Math.floor(6*t),a=6*t-r,h=i*(1-e),d=i*(1-a*e),l=i*(1-(1-a)*e);switch(r%6){case 0:s=i,o=l,n=h;break;case 1:s=d,o=i,n=h;break;case 2:s=h,o=i,n=l;break;case 3:s=h,o=d,n=i;break;case 4:s=l,o=h,n=i;break;case 5:s=i,o=h,n=d}return{r:Math.floor(255*s),g:Math.floor(255*o),b:Math.floor(255*n)}},exports.HSVToHex=function(t,e,i){var s=exports.HSVToRGB(t,e,i);return exports.RGBToHex(s.r,s.g,s.b)},exports.hexToHSV=function(t){var e=exports.hexToRGB(t);return exports.RGBToHSV(e.r,e.g,e.b)},exports.isValidHex=function(t){var e=/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t);return e},exports.isValidRGB=function(t){t=t.replace(" ","");var e=/rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)/i.test(t);return e},exports.selectiveBridgeObject=function(t,e){if("object"==typeof e){for(var i=Object.create(e),s=0;s=r&&o>n;){var h=Math.floor((r+a)/2),d=t[h],l=void 0===s?d[i]:d[i][s],c=e(l);if(0==c)return h;-1==c?r=h+1:a=h-1,n++}return-1},exports.binarySearchValue=function(t,e,i,s){for(var o,n,r,a,h=1e4,d=0,l=0,c=t.length-1;c>=l&&h>d;){if(a=Math.floor(.5*(c+l)),o=t[Math.max(0,a-1)][i],n=t[a][i],r=t[Math.min(t.length-1,a+1)][i],n==e)return a;if(e>o&&n>e)return"before"==s?Math.max(0,a-1):a;if(e>n&&r>e)return"before"==s?a:Math.min(t.length-1,a+1);e>n?l=a+1:c=a-1,d++}return-1},exports.easeInOutQuad=function(t,e,i,s){var o=i-e;return t/=s/2,1>t?o/2*t*t+e:(t--,-o/2*(t*(t-2)-1)+e)},exports.easingFunctions={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return t*(2-t)},easeInOutQuad:function(t){return.5>t?2*t*t:-1+(4-2*t)*t},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return--t*t*t+1},easeInOutCubic:function(t){return.5>t?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return 1- --t*t*t*t},easeInOutQuart:function(t){return.5>t?8*t*t*t*t:1-8*--t*t*t*t},easeInQuint:function(t){return t*t*t*t*t},easeOutQuint:function(t){return 1+--t*t*t*t*t},easeInOutQuint:function(t){return.5>t?16*t*t*t*t*t:1+16*--t*t*t*t*t}}},function(t,e){e.prepareElements=function(t){for(var e in t)t.hasOwnProperty(e)&&(t[e].redundant=t[e].used,t[e].used=[])},e.cleanupElements=function(t){for(var e in t)if(t.hasOwnProperty(e)&&t[e].redundant){for(var i=0;i0?(s=e[t].redundant[0],e[t].redundant.shift()):(s=document.createElementNS("http://www.w3.org/2000/svg",t),i.appendChild(s)):(s=document.createElementNS("http://www.w3.org/2000/svg",t),e[t]={used:[],redundant:[]},i.appendChild(s)),e[t].used.push(s),s},e.getDOMElement=function(t,e,i,s){var o;return e.hasOwnProperty(t)?e[t].redundant.length>0?(o=e[t].redundant[0],e[t].redundant.shift()):(o=document.createElement(t),void 0!==s?i.insertBefore(o,s):i.appendChild(o)):(o=document.createElement(t),e[t]={used:[],redundant:[]},void 0!==s?i.insertBefore(o,s):i.appendChild(o)),e[t].used.push(o),o},e.drawPoint=function(t,i,s,o,n){var r;return"circle"==s.options.drawPoints.style?(r=e.getSVGElement("circle",o,n),r.setAttributeNS(null,"cx",t),r.setAttributeNS(null,"cy",i),r.setAttributeNS(null,"r",.5*s.options.drawPoints.size)):(r=e.getSVGElement("rect",o,n),r.setAttributeNS(null,"x",t-.5*s.options.drawPoints.size),r.setAttributeNS(null,"y",i-.5*s.options.drawPoints.size),r.setAttributeNS(null,"width",s.options.drawPoints.size),r.setAttributeNS(null,"height",s.options.drawPoints.size)),void 0!==s.options.drawPoints.styles&&r.setAttributeNS(null,"style",s.group.options.drawPoints.styles),r.setAttributeNS(null,"class",s.className+" point"),r},e.drawBar=function(t,i,s,o,n,r,a){if(0!=o){0>o&&(o*=-1,i-=o);var h=e.getSVGElement("rect",r,a);h.setAttributeNS(null,"x",t-.5*s),h.setAttributeNS(null,"y",i),h.setAttributeNS(null,"width",s),h.setAttributeNS(null,"height",o),h.setAttributeNS(null,"class",n)}}},function(t,e,i){function s(t,e){if(!t||Array.isArray(t)||o.isDataTable(t)||(e=t,t=null),this._options=e||{},this._data={},this._fieldId=this._options.fieldId||"id",this._type={},this._options.type)for(var i in this._options.type)if(this._options.type.hasOwnProperty(i)){var s=this._options.type[i];this._type[i]="Date"==s||"ISODate"==s||"ASPDate"==s?"Date":s}if(this._options.convert)throw new Error('Option "convert" is deprecated. Use "type" instead.');this._subscribers={},t&&this.add(t),this.setOptions(e)}var o=i(1),n=i(5);s.prototype.setOptions=function(t){t&&void 0!==t.queue&&(t.queue===!1?this._queue&&(this._queue.destroy(),delete this._queue):(this._queue||(this._queue=n.extend(this,{replace:["add","update","remove"]})),"object"==typeof t.queue&&this._queue.setOptions(t.queue)))},s.prototype.on=function(t,e){var i=this._subscribers[t];i||(i=[],this._subscribers[t]=i),i.push({callback:e})},s.prototype.subscribe=s.prototype.on,s.prototype.off=function(t,e){var i=this._subscribers[t];i&&(this._subscribers[t]=i.filter(function(t){return t.callback!=e}))},s.prototype.unsubscribe=s.prototype.off,s.prototype._trigger=function(t,e,i){if("*"==t)throw new Error("Cannot trigger event *");var s=[];t in this._subscribers&&(s=s.concat(this._subscribers[t])),"*"in this._subscribers&&(s=s.concat(this._subscribers["*"]));for(var o=0;or;r++)i=n._addItem(t[r]),s.push(i);else if(o.isDataTable(t))for(var h=this._getColumnNames(t),d=0,l=t.getNumberOfRows();l>d;d++){for(var c={},p=0,u=h.length;u>p;p++){var m=h[p];c[m]=t.getValue(d,p)}i=n._addItem(c),s.push(i)}else{if(!(t instanceof Object))throw new Error("Unknown dataType");i=n._addItem(t),s.push(i)}return s.length&&this._trigger("add",{items:s},e),s},s.prototype.update=function(t,e){var i=[],s=[],n=[],r=this,a=r._fieldId,h=function(t){var e=t[a];r._data[e]?(e=r._updateItem(t),s.push(e),n.push(t)):(e=r._addItem(t),i.push(e))};if(Array.isArray(t))for(var d=0,l=t.length;l>d;d++)h(t[d]);else if(o.isDataTable(t))for(var c=this._getColumnNames(t),p=0,u=t.getNumberOfRows();u>p;p++){for(var m={},f=0,g=c.length;g>f;f++){var v=c[f];m[v]=t.getValue(p,f)}h(m)}else{if(!(t instanceof Object))throw new Error("Unknown dataType");h(t)}return i.length&&this._trigger("add",{items:i},e),s.length&&this._trigger("update",{items:s,data:n},e),i.concat(s)},s.prototype.get=function(){var t,e,i,s,n=this,r=o.getType(arguments[0]);"String"==r||"Number"==r?(t=arguments[0],i=arguments[1],s=arguments[2]):"Array"==r?(e=arguments[0],i=arguments[1],s=arguments[2]):(i=arguments[0],s=arguments[1]);var a;if(i&&i.returnType){var h=["DataTable","Array","Object"];if(a=-1==h.indexOf(i.returnType)?"Array":i.returnType,s&&a!=o.getType(s))throw new Error('Type of parameter "data" ('+o.getType(s)+") does not correspond with specified options.type ("+i.type+")");if("DataTable"==a&&!o.isDataTable(s))throw new Error('Parameter "data" must be a DataTable when options.type is "DataTable"')}else a=s&&"DataTable"==o.getType(s)?"DataTable":"Array";var d,l,c,p,u=i&&i.type||this._options.type,m=i&&i.filter,f=[];if(void 0!=t)d=n._getItem(t,u),m&&!m(d)&&(d=null);else if(void 0!=e)for(c=0,p=e.length;p>c;c++)d=n._getItem(e[c],u),(!m||m(d))&&f.push(d);else for(l in this._data)this._data.hasOwnProperty(l)&&(d=n._getItem(l,u),(!m||m(d))&&f.push(d));if(i&&i.order&&void 0==t&&this._sort(f,i.order),i&&i.fields){var g=i.fields;if(void 0!=t)d=this._filterFields(d,g);else for(c=0,p=f.length;p>c;c++)f[c]=this._filterFields(f[c],g)}if("DataTable"==a){var v=this._getColumnNames(s);if(void 0!=t)n._appendRow(s,v,d);else for(c=0;cc;c++)s.push(f[c]);return s}return f},s.prototype.getIds=function(t){var e,i,s,o,n,r=this._data,a=t&&t.filter,h=t&&t.order,d=t&&t.type||this._options.type,l=[];if(a)if(h){n=[];for(s in r)r.hasOwnProperty(s)&&(o=this._getItem(s,d),a(o)&&n.push(o));for(this._sort(n,h),e=0,i=n.length;i>e;e++)l[e]=n[e][this._fieldId]}else for(s in r)r.hasOwnProperty(s)&&(o=this._getItem(s,d),a(o)&&l.push(o[this._fieldId]));else if(h){n=[];for(s in r)r.hasOwnProperty(s)&&n.push(r[s]);for(this._sort(n,h),e=0,i=n.length;i>e;e++)l[e]=n[e][this._fieldId]}else for(s in r)r.hasOwnProperty(s)&&(o=r[s],l.push(o[this._fieldId]));return l},s.prototype.getDataSet=function(){return this},s.prototype.forEach=function(t,e){var i,s,o=e&&e.filter,n=e&&e.type||this._options.type,r=this._data;if(e&&e.order)for(var a=this.get(e),h=0,d=a.length;d>h;h++)i=a[h],s=i[this._fieldId],t(i,s);else for(s in r)r.hasOwnProperty(s)&&(i=this._getItem(s,n),(!o||o(i))&&t(i,s))},s.prototype.map=function(t,e){var i,s=e&&e.filter,o=e&&e.type||this._options.type,n=[],r=this._data;for(var a in r)r.hasOwnProperty(a)&&(i=this._getItem(a,o),(!s||s(i))&&n.push(t(i,a)));return e&&e.order&&this._sort(n,e.order),n},s.prototype._filterFields=function(t,e){var i={};for(var s in t)t.hasOwnProperty(s)&&-1!=e.indexOf(s)&&(i[s]=t[s]);return i},s.prototype._sort=function(t,e){if(o.isString(e)){var i=e;t.sort(function(t,e){var s=t[i],o=e[i];return s>o?1:o>s?-1:0})}else{if("function"!=typeof e)throw new TypeError("Order must be a function or a string");t.sort(e)}},s.prototype.remove=function(t,e){var i,s,o,n=[];if(Array.isArray(t))for(i=0,s=t.length;s>i;i++)o=this._remove(t[i]),null!=o&&n.push(o);else o=this._remove(t),null!=o&&n.push(o);return n.length&&this._trigger("remove",{items:n},e),n},s.prototype._remove=function(t){if(o.isNumber(t)||o.isString(t)){if(this._data[t])return delete this._data[t],t}else if(t instanceof Object){var e=t[this._fieldId];if(e&&this._data[e])return delete this._data[e],e}return null},s.prototype.clear=function(t){var e=Object.keys(this._data);return this._data={},this._trigger("remove",{items:e},t),e},s.prototype.max=function(t){var e=this._data,i=null,s=null;for(var o in e)if(e.hasOwnProperty(o)){var n=e[o],r=n[t];null!=r&&(!i||r>s)&&(i=n,s=r)}return i},s.prototype.min=function(t){var e=this._data,i=null,s=null;for(var o in e)if(e.hasOwnProperty(o)){var n=e[o],r=n[t];null!=r&&(!i||s>r)&&(i=n,s=r)}return i},s.prototype.distinct=function(t){var e,i=this._data,s=[],n=this._options.type&&this._options.type[t]||null,r=0;for(var a in i)if(i.hasOwnProperty(a)){var h=i[a],d=h[t],l=!1;for(e=0;r>e;e++)if(s[e]==d){l=!0;break}l||void 0===d||(s[r]=d,r++)}if(n)for(e=0;ei;i++)e[i]=t.getColumnId(i)||t.getColumnLabel(i);return e},s.prototype._appendRow=function(t,e,i){for(var s=t.addRow(),o=0,n=e.length;n>o;o++){var r=e[o];t.setValue(s,o,i[r])}},t.exports=s},function(t,e,i){function s(t,e){this._data=null,this._ids={},this._options=e||{},this._fieldId="id",this._subscribers={};var i=this;this.listener=function(){i._onEvent.apply(i,arguments)},this.setData(t)}var o=i(1),n=i(3);s.prototype.setData=function(t){var e,i,s;if(this._data){this._data.unsubscribe&&this._data.unsubscribe("*",this.listener),e=[];for(var o in this._ids)this._ids.hasOwnProperty(o)&&e.push(o);this._ids={},this._trigger("remove",{items:e})}if(this._data=t,this._data){for(this._fieldId=this._options.fieldId||this._data&&this._data.options&&this._data.options.fieldId||"id",e=this._data.getIds({filter:this._options&&this._options.filter}),i=0,s=e.length;s>i;i++)o=e[i],this._ids[o]=!0;this._trigger("add",{items:e}),this._data.on&&this._data.on("*",this.listener)}},s.prototype.get=function(){var t,e,i,s=this,n=o.getType(arguments[0]);"String"==n||"Number"==n||"Array"==n?(t=arguments[0],e=arguments[1],i=arguments[2]):(e=arguments[0],i=arguments[1]);var r=o.extend({},this._options,e);this._options.filter&&e&&e.filter&&(r.filter=function(t){return s._options.filter(t)&&e.filter(t)});var a=[];return void 0!=t&&a.push(t),a.push(r),a.push(i),this._data&&this._data.get.apply(this._data,a)},s.prototype.getIds=function(t){var e;if(this._data){var i,s=this._options.filter;i=t&&t.filter?s?function(e){return s(e)&&t.filter(e)}:t.filter:s,e=this._data.getIds({filter:i,order:t&&t.order})}else e=[];return e},s.prototype.getDataSet=function(){for(var t=this;t instanceof s;)t=t._data;return t||null},s.prototype._onEvent=function(t,e,i){var s,o,n,r,a=e&&e.items,h=this._data,d=[],l=[],c=[];if(a&&h){switch(t){case"add":for(s=0,o=a.length;o>s;s++)n=a[s],r=this.get(n),r&&(this._ids[n]=!0,d.push(n));break;case"update":for(s=0,o=a.length;o>s;s++)n=a[s],r=this.get(n),r?this._ids[n]?l.push(n):(this._ids[n]=!0,d.push(n)):this._ids[n]&&(delete this._ids[n],c.push(n));break;case"remove":for(s=0,o=a.length;o>s;s++)n=a[s],this._ids[n]&&(delete this._ids[n],c.push(n))}d.length&&this._trigger("add",{items:d},i),l.length&&this._trigger("update",{items:l},i),c.length&&this._trigger("remove",{items:c},i)}},s.prototype.on=n.prototype.on,s.prototype.off=n.prototype.off,s.prototype._trigger=n.prototype._trigger,s.prototype.subscribe=s.prototype.on,s.prototype.unsubscribe=s.prototype.off,t.exports=s},function(t){function e(t){this.delay=null,this.max=1/0,this._queue=[],this._timeout=null,this._extended=null,this.setOptions(t)}e.prototype.setOptions=function(t){t&&"undefined"!=typeof t.delay&&(this.delay=t.delay),t&&"undefined"!=typeof t.max&&(this.max=t.max),this._flushIfNeeded()},e.extend=function(t,i){var s=new e(i);if(void 0!==t.flush)throw new Error("Target object already has a property flush");t.flush=function(){s.flush()};var o=[{name:"flush",original:void 0}];if(i&&i.replace)for(var n=0;nthis.max&&this.flush(),clearTimeout(this._timeout),this.queue.length>0&&"number"==typeof this.delay){var t=this;this._timeout=setTimeout(function(){t.flush()},this.delay)}},e.prototype.flush=function(){for(;this._queue.length>0;){var t=this._queue.shift();t.fn.apply(t.context||t.fn,t.args||[])}},t.exports=e},function(t,e,i){function s(t,e,i){if(!(this instanceof s))throw new SyntaxError("Constructor must be called with the new operator");this.containerElement=t,this.width="400px",this.height="400px",this.margin=10,this.defaultXCenter="55%",this.defaultYCenter="50%",this.xLabel="x",this.yLabel="y",this.zLabel="z";var o=function(t){return t};this.xValueLabel=o,this.yValueLabel=o,this.zValueLabel=o,this.filterLabel="time",this.legendLabel="value",this.style=s.STYLE.DOT,this.showPerspective=!0,this.showGrid=!0,this.keepAspectRatio=!0,this.showShadow=!1,this.showGrayBottom=!1,this.showTooltip=!1,this.verticalRatio=.5,this.animationInterval=1e3,this.animationPreload=!1,this.camera=new p,this.eye=new l(0,0,-1),this.dataTable=null,this.dataPoints=null,this.colX=void 0,this.colY=void 0,this.colZ=void 0,this.colValue=void 0,this.colFilter=void 0,this.xMin=0,this.xStep=void 0,this.xMax=1,this.yMin=0,this.yStep=void 0,this.yMax=1,this.zMin=0,this.zStep=void 0,this.zMax=1,this.valueMin=0,this.valueMax=1,this.xBarWidth=1,this.yBarWidth=1,this.colorAxis="#4D4D4D",this.colorGrid="#D3D3D3",this.colorDot="#7DC1FF",this.colorDotBorder="#3267D2",this.create(),this.setOptions(i),e&&this.setData(e)}function o(t){return"clientX"in t?t.clientX:t.targetTouches[0]&&t.targetTouches[0].clientX||0}function n(t){return"clientY"in t?t.clientY:t.targetTouches[0]&&t.targetTouches[0].clientY||0}var r=i(56),a=i(3),h=i(4),d=i(1),l=i(10),c=i(9),p=i(7),u=i(8),m=i(11),f=i(12);r(s.prototype),s.prototype._setScale=function(){this.scale=new l(1/(this.xMax-this.xMin),1/(this.yMax-this.yMin),1/(this.zMax-this.zMin)),this.keepAspectRatio&&(this.scale.x3&&(this.colFilter=3);else{if(this.style!==s.STYLE.DOTCOLOR&&this.style!==s.STYLE.DOTSIZE&&this.style!==s.STYLE.BARCOLOR&&this.style!==s.STYLE.BARSIZE)throw'Unknown style "'+this.style+'"';this.colX=0,this.colY=1,this.colZ=2,this.colValue=3,t.getNumberOfColumns()>4&&(this.colFilter=4)}},s.prototype.getNumberOfRows=function(t){return t.length},s.prototype.getNumberOfColumns=function(t){var e=0;for(var i in t[0])t[0].hasOwnProperty(i)&&e++;return e},s.prototype.getDistinctValues=function(t,e){for(var i=[],s=0;st[s][e]&&(i.min=t[s][e]),i.maxt;t++){var m=(t-p)/(u-p),g=240*m,v=this._hsv2rgb(g,1,1);c.strokeStyle=v,c.beginPath(),c.moveTo(h,r+t),c.lineTo(a,r+t),c.stroke()}c.strokeStyle=this.colorAxis,c.strokeRect(h,r,i,n)}if(this.style===s.STYLE.DOTSIZE&&(c.strokeStyle=this.colorAxis,c.fillStyle=this.colorDot,c.beginPath(),c.moveTo(h,r),c.lineTo(a,r),c.lineTo(a-i+e,d),c.lineTo(h,d),c.closePath(),c.fill(),c.stroke()),this.style===s.STYLE.DOTCOLOR||this.style===s.STYLE.DOTSIZE){var y=5,b=new f(this.valueMin,this.valueMax,(this.valueMax-this.valueMin)/5,!0);for(b.start(),b.getCurrent()0?this.yMin:this.yMax,o=this._convert3Dto2D(new l(x,r,this.zMin)),Math.cos(2*_)>0?(g.textAlign="center",g.textBaseline="top",o.y+=b):Math.sin(2*_)<0?(g.textAlign="right",g.textBaseline="middle"):(g.textAlign="left",g.textBaseline="middle"),g.fillStyle=this.colorAxis,g.fillText(" "+this.xValueLabel(i.getCurrent())+" ",o.x,o.y),i.next()}for(g.lineWidth=1,s=void 0===this.defaultYStep,i=new f(this.yMin,this.yMax,this.yStep,s),i.start(),i.getCurrent()0?this.xMin:this.xMax,o=this._convert3Dto2D(new l(n,i.getCurrent(),this.zMin)),Math.cos(2*_)<0?(g.textAlign="center",g.textBaseline="top",o.y+=b):Math.sin(2*_)>0?(g.textAlign="right",g.textBaseline="middle"):(g.textAlign="left",g.textBaseline="middle"),g.fillStyle=this.colorAxis,g.fillText(" "+this.yValueLabel(i.getCurrent())+" ",o.x,o.y),i.next();for(g.lineWidth=1,s=void 0===this.defaultZStep,i=new f(this.zMin,this.zMax,this.zStep,s),i.start(),i.getCurrent()0?this.xMin:this.xMax,r=Math.sin(_)<0?this.yMin:this.yMax;!i.end();)t=this._convert3Dto2D(new l(n,r,i.getCurrent())),g.strokeStyle=this.colorAxis,g.beginPath(),g.moveTo(t.x,t.y),g.lineTo(t.x-b,t.y),g.stroke(),g.textAlign="right",g.textBaseline="middle",g.fillStyle=this.colorAxis,g.fillText(this.zValueLabel(i.getCurrent())+" ",t.x-5,t.y),i.next();g.lineWidth=1,t=this._convert3Dto2D(new l(n,r,this.zMin)),e=this._convert3Dto2D(new l(n,r,this.zMax)),g.strokeStyle=this.colorAxis,g.beginPath(),g.moveTo(t.x,t.y),g.lineTo(e.x,e.y),g.stroke(),g.lineWidth=1,p=this._convert3Dto2D(new l(this.xMin,this.yMin,this.zMin)),u=this._convert3Dto2D(new l(this.xMax,this.yMin,this.zMin)),g.strokeStyle=this.colorAxis,g.beginPath(),g.moveTo(p.x,p.y),g.lineTo(u.x,u.y),g.stroke(),p=this._convert3Dto2D(new l(this.xMin,this.yMax,this.zMin)),u=this._convert3Dto2D(new l(this.xMax,this.yMax,this.zMin)),g.strokeStyle=this.colorAxis,g.beginPath(),g.moveTo(p.x,p.y),g.lineTo(u.x,u.y),g.stroke(),g.lineWidth=1,t=this._convert3Dto2D(new l(this.xMin,this.yMin,this.zMin)),e=this._convert3Dto2D(new l(this.xMin,this.yMax,this.zMin)),g.strokeStyle=this.colorAxis,g.beginPath(),g.moveTo(t.x,t.y),g.lineTo(e.x,e.y),g.stroke(),t=this._convert3Dto2D(new l(this.xMax,this.yMin,this.zMin)),e=this._convert3Dto2D(new l(this.xMax,this.yMax,this.zMin)),g.strokeStyle=this.colorAxis,g.beginPath(),g.moveTo(t.x,t.y),g.lineTo(e.x,e.y),g.stroke();var w=this.xLabel;w.length>0&&(c=.1/this.scale.y,n=(this.xMin+this.xMax)/2,r=Math.cos(_)>0?this.yMin-c:this.yMax+c,o=this._convert3Dto2D(new l(n,r,this.zMin)),Math.cos(2*_)>0?(g.textAlign="center",g.textBaseline="top"):Math.sin(2*_)<0?(g.textAlign="right",g.textBaseline="middle"):(g.textAlign="left",g.textBaseline="middle"),g.fillStyle=this.colorAxis,g.fillText(w,o.x,o.y));var S=this.yLabel;S.length>0&&(d=.1/this.scale.x,n=Math.sin(_)>0?this.xMin-d:this.xMax+d,r=(this.yMin+this.yMax)/2,o=this._convert3Dto2D(new l(n,r,this.zMin)),Math.cos(2*_)<0?(g.textAlign="center",g.textBaseline="top"):Math.sin(2*_)>0?(g.textAlign="right",g.textBaseline="middle"):(g.textAlign="left",g.textBaseline="middle"),g.fillStyle=this.colorAxis,g.fillText(S,o.x,o.y));var D=this.zLabel;D.length>0&&(h=30,n=Math.cos(_)>0?this.xMin:this.xMax,r=Math.sin(_)<0?this.yMin:this.yMax,a=(this.zMin+this.zMax)/2,o=this._convert3Dto2D(new l(n,r,a)),g.textAlign="right",g.textBaseline="middle",g.fillStyle=this.colorAxis,g.fillText(D,o.x-h,o.y))},s.prototype._hsv2rgb=function(t,e,i){var s,o,n,r,a,h;switch(r=i*e,a=Math.floor(t/60),h=r*(1-Math.abs(t/60%2-1)),a){case 0:s=r,o=h,n=0;break;case 1:s=h,o=r,n=0;break;case 2:s=0,o=r,n=h;break;case 3:s=0,o=h,n=r;break;case 4:s=h,o=0,n=r;break;case 5:s=r,o=0,n=h;break;default:s=0,o=0,n=0}return"RGB("+parseInt(255*s)+","+parseInt(255*o)+","+parseInt(255*n)+")"},s.prototype._redrawDataGrid=function(){var t,e,i,o,n,r,a,h,d,c,p,u,m,f=this.frame.canvas,g=f.getContext("2d");if(!(void 0===this.dataPoints||this.dataPoints.length<=0)){for(n=0;n0}else r=!0;r?(m=(t.point.z+e.point.z+i.point.z+o.point.z)/4,c=240*(1-(m-this.zMin)*this.scale.z/this.verticalRatio),p=1,this.showShadow?(u=Math.min(1+S.x/D/2,1),a=this._hsv2rgb(c,p,u),h=a):(u=1,a=this._hsv2rgb(c,p,u),h=this.colorAxis)):(a="gray",h=this.colorAxis),d=.5,g.lineWidth=d,g.fillStyle=a,g.strokeStyle=h,g.beginPath(),g.moveTo(t.screen.x,t.screen.y),g.lineTo(e.screen.x,e.screen.y),g.lineTo(o.screen.x,o.screen.y),g.lineTo(i.screen.x,i.screen.y),g.closePath(),g.fill(),g.stroke()}}else for(n=0;np&&(p=0);var u,m,f;this.style===s.STYLE.DOTCOLOR?(u=240*(1-(d.point.value-this.valueMin)*this.scale.value),m=this._hsv2rgb(u,1,1),f=this._hsv2rgb(u,1,.8)):this.style===s.STYLE.DOTSIZE?(m=this.colorDot,f=this.colorDotBorder):(u=240*(1-(d.point.z-this.zMin)*this.scale.z/this.verticalRatio),m=this._hsv2rgb(u,1,1),f=this._hsv2rgb(u,1,.8)),i.lineWidth=1,i.strokeStyle=f,i.fillStyle=m,i.beginPath(),i.arc(d.screen.x,d.screen.y,p,0,2*Math.PI,!0),i.fill(),i.stroke()}}},s.prototype._redrawDataBar=function(){var t,e,i,o,n=this.frame.canvas,r=n.getContext("2d");if(!(void 0===this.dataPoints||this.dataPoints.length<=0)){for(t=0;t0&&(t=this.dataPoints[0],s.lineWidth=1,s.strokeStyle="blue",s.beginPath(),s.moveTo(t.screen.x,t.screen.y)),e=1;e0&&s.stroke()}},s.prototype._onMouseDown=function(t){if(t=t||window.event,this.leftButtonDown&&this._onMouseUp(t),this.leftButtonDown=t.which?1===t.which:1===t.button,this.leftButtonDown||this.touchDown){this.startMouseX=o(t),this.startMouseY=n(t),this.startStart=new Date(this.start),this.startEnd=new Date(this.end),this.startArmRotation=this.camera.getArmRotation(),this.frame.style.cursor="move";var e=this;this.onmousemove=function(t){e._onMouseMove(t)},this.onmouseup=function(t){e._onMouseUp(t)},d.addEventListener(document,"mousemove",e.onmousemove),d.addEventListener(document,"mouseup",e.onmouseup),d.preventDefault(t)}},s.prototype._onMouseMove=function(t){t=t||window.event;var e=parseFloat(o(t))-this.startMouseX,i=parseFloat(n(t))-this.startMouseY,s=this.startArmRotation.horizontal+e/200,r=this.startArmRotation.vertical+i/200,a=4,h=Math.sin(a/360*2*Math.PI);Math.abs(Math.sin(s))0?1:0>t?-1:0}var s=e[0],o=e[1],n=e[2],r=i((o.x-s.x)*(t.y-s.y)-(o.y-s.y)*(t.x-s.x)),a=i((n.x-o.x)*(t.y-o.y)-(n.y-o.y)*(t.x-o.x)),h=i((s.x-n.x)*(t.y-n.y)-(s.y-n.y)*(t.x-n.x));return!(0!=r&&0!=a&&r!=a||0!=a&&0!=h&&a!=h||0!=r&&0!=h&&r!=h)},s.prototype._dataPointFromXY=function(t,e){var i,o=100,n=null,r=null,a=null,h=new c(t,e);if(this.style===s.STYLE.BAR||this.style===s.STYLE.BARCOLOR||this.style===s.STYLE.BARSIZE)for(i=this.dataPoints.length-1;i>=0;i--){n=this.dataPoints[i];var d=n.surfaces;if(d)for(var l=d.length-1;l>=0;l--){var p=d[l],u=p.corners,m=[u[0].screen,u[1].screen,u[2].screen],f=[u[2].screen,u[3].screen,u[0].screen];if(this._insideTriangle(h,m)||this._insideTriangle(h,f))return n}}else for(i=0;ib)&&o>b&&(a=b,r=n)}}return r},s.prototype._showTooltip=function(t){var e,i,s;this.tooltip?(e=this.tooltip.dom.content,i=this.tooltip.dom.line,s=this.tooltip.dom.dot):(e=document.createElement("div"),e.style.position="absolute",e.style.padding="10px",e.style.border="1px solid #4d4d4d",e.style.color="#1a1a1a",e.style.background="rgba(255,255,255,0.7)",e.style.borderRadius="2px",e.style.boxShadow="5px 5px 10px rgba(128,128,128,0.5)",i=document.createElement("div"),i.style.position="absolute",i.style.height="40px",i.style.width="0",i.style.borderLeft="1px solid #4d4d4d",s=document.createElement("div"),s.style.position="absolute",s.style.height="0",s.style.width="0",s.style.border="5px solid #4d4d4d",s.style.borderRadius="5px",this.tooltip={dataPoint:null,dom:{content:e,line:i,dot:s}}),this._hideTooltip(),this.tooltip.dataPoint=t,e.innerHTML="function"==typeof this.showTooltip?this.showTooltip(t.point):"
x:"+t.point.x+"
y:"+t.point.y+"
z:"+t.point.z+"
",e.style.left="0",e.style.top="0",this.frame.appendChild(e),this.frame.appendChild(i),this.frame.appendChild(s);var o=e.offsetWidth,n=e.offsetHeight,r=i.offsetHeight,a=s.offsetWidth,h=s.offsetHeight,d=t.screen.x-o/2;d=Math.min(Math.max(d,10),this.frame.clientWidth-10-o),i.style.left=t.screen.x+"px",i.style.top=t.screen.y-r+"px",e.style.left=d+"px",e.style.top=t.screen.y-r-n+"px",s.style.left=t.screen.x-a/2+"px",s.style.top=t.screen.y-h/2+"px"},s.prototype._hideTooltip=function(){if(this.tooltip){this.tooltip.dataPoint=null;for(var t in this.tooltip.dom)if(this.tooltip.dom.hasOwnProperty(t)){var e=this.tooltip.dom[t];e&&e.parentNode&&e.parentNode.removeChild(e)}}},t.exports=s},function(t,e,i){function s(){this.armLocation=new o,this.armRotation={},this.armRotation.horizontal=0,this.armRotation.vertical=0,this.armLength=1.7,this.cameraLocation=new o,this.cameraRotation=new o(.5*Math.PI,0,0),this.calculateCameraOrientation()}var o=i(10);s.prototype.setArmLocation=function(t,e,i){this.armLocation.x=t,this.armLocation.y=e,this.armLocation.z=i,this.calculateCameraOrientation()},s.prototype.setArmRotation=function(t,e){void 0!==t&&(this.armRotation.horizontal=t),void 0!==e&&(this.armRotation.vertical=e,this.armRotation.vertical<0&&(this.armRotation.vertical=0),this.armRotation.vertical>.5*Math.PI&&(this.armRotation.vertical=.5*Math.PI)),(void 0!==t||void 0!==e)&&this.calculateCameraOrientation()},s.prototype.getArmRotation=function(){var t={};return t.horizontal=this.armRotation.horizontal,t.vertical=this.armRotation.vertical,t},s.prototype.setArmLength=function(t){void 0!==t&&(this.armLength=t,this.armLength<.71&&(this.armLength=.71),this.armLength>5&&(this.armLength=5),this.calculateCameraOrientation())},s.prototype.getArmLength=function(){return this.armLength},s.prototype.getCameraLocation=function(){return this.cameraLocation},s.prototype.getCameraRotation=function(){return this.cameraRotation},s.prototype.calculateCameraOrientation=function(){this.cameraLocation.x=this.armLocation.x-this.armLength*Math.sin(this.armRotation.horizontal)*Math.cos(this.armRotation.vertical),this.cameraLocation.y=this.armLocation.y-this.armLength*Math.cos(this.armRotation.horizontal)*Math.cos(this.armRotation.vertical),this.cameraLocation.z=this.armLocation.z+this.armLength*Math.sin(this.armRotation.vertical),this.cameraRotation.x=Math.PI/2-this.armRotation.vertical,this.cameraRotation.y=0,this.cameraRotation.z=-this.armRotation.horizontal},t.exports=s},function(t,e,i){function s(t,e,i){this.data=t,this.column=e,this.graph=i,this.index=void 0,this.value=void 0,this.values=i.getDistinctValues(t.get(),this.column),this.values.sort(function(t,e){return t>e?1:e>t?-1:0}),this.values.length>0&&this.selectValue(0),this.dataPoints=[],this.loaded=!1,this.onLoadCallback=void 0,i.animationPreload?(this.loaded=!1,this.loadInBackground()):this.loaded=!0}var o=i(4);s.prototype.isLoaded=function(){return this.loaded},s.prototype.getLoadedProgress=function(){for(var t=this.values.length,e=0;this.dataPoints[e];)e++;return Math.round(e/t*100)},s.prototype.getLabel=function(){return this.graph.filterLabel},s.prototype.getColumn=function(){return this.column},s.prototype.getSelectedValue=function(){return void 0===this.index?void 0:this.values[this.index]},s.prototype.getValues=function(){return this.values},s.prototype.getValue=function(t){if(t>=this.values.length)throw"Error: index out of range";return this.values[t] -},s.prototype._getDataPoints=function(t){if(void 0===t&&(t=this.index),void 0===t)return[];var e;if(this.dataPoints[t])e=this.dataPoints[t];else{var i={};i.column=this.column,i.value=this.values[t];var s=new o(this.data,{filter:function(t){return t[i.column]==i.value}}).get();e=this.graph._getDataPoints(s),this.dataPoints[t]=e}return e},s.prototype.setOnLoadCallback=function(t){this.onLoadCallback=t},s.prototype.selectValue=function(t){if(t>=this.values.length)throw"Error: index out of range";this.index=t,this.value=this.values[t]},s.prototype.loadInBackground=function(t){void 0===t&&(t=0);var e=this.graph.frame;if(t0&&(t--,this.setIndex(t))},s.prototype.next=function(){var t=this.getIndex();t0?this.setIndex(0):this.index=void 0},s.prototype.setIndex=function(t){if(!(ts&&(s=0),s>this.values.length-1&&(s=this.values.length-1),s},s.prototype.indexToLeft=function(t){var e=parseFloat(this.frame.bar.style.width)-this.frame.slide.clientWidth-10,i=t/(this.values.length-1)*e,s=i+3;return s},s.prototype._onMouseMove=function(t){var e=t.clientX-this.startClientX,i=this.startSlideX+e,s=this.leftToIndex(i);this.setIndex(s),o.preventDefault()},s.prototype._onMouseUp=function(){this.frame.style.cursor="auto",o.removeEventListener(document,"mousemove",this.onmousemove),o.removeEventListener(document,"mouseup",this.onmouseup),o.preventDefault()},t.exports=s},function(t){function e(t,e,i,s){this._start=0,this._end=0,this._step=1,this.prettyStep=!0,this.precision=5,this._current=0,this.setRange(t,e,i,s)}e.prototype.setRange=function(t,e,i,s){this._start=t?t:0,this._end=e?e:0,this.setStep(i,s)},e.prototype.setStep=function(t,i){void 0===t||0>=t||(void 0!==i&&(this.prettyStep=i),this._step=this.prettyStep===!0?e.calculatePrettyStep(t):t)},e.calculatePrettyStep=function(t){var e=function(t){return Math.log(t)/Math.LN10},i=Math.pow(10,Math.round(e(t))),s=2*Math.pow(10,Math.round(e(t/2))),o=5*Math.pow(10,Math.round(e(t/5))),n=i;return Math.abs(s-t)<=Math.abs(n-t)&&(n=s),Math.abs(o-t)<=Math.abs(n-t)&&(n=o),0>=n&&(n=1),n},e.prototype.getCurrent=function(){return parseFloat(this._current.toPrecision(this.precision))},e.prototype.getStep=function(){return this._step},e.prototype.start=function(){this._current=this._start-this._start%this._step},e.prototype.next=function(){this._current+=this._step},e.prototype.end=function(){return this._current>this._end},t.exports=e},function(t,e,i){function s(t,e,i,r){if(!(this instanceof s))throw new SyntaxError("Constructor must be called with the new operator");if(!(Array.isArray(i)||i instanceof n)&&i instanceof Object){var h=r;r=i,i=h}var u=this;this.defaultOptions={start:null,end:null,autoResize:!0,orientation:"bottom",width:null,height:null,maxHeight:null,minHeight:null},this.options=o.deepExtend({},this.defaultOptions),this._create(t),this.components=[],this.body={dom:this.dom,domProps:this.props,emitter:{on:this.on.bind(this),off:this.off.bind(this),emit:this.emit.bind(this)},hiddenDates:[],util:{snap:null,toScreen:u._toScreen.bind(u),toGlobalScreen:u._toGlobalScreen.bind(u),toTime:u._toTime.bind(u),toGlobalTime:u._toGlobalTime.bind(u)}},this.range=new a(this.body),this.components.push(this.range),this.body.range=this.range,this.timeAxis=new d(this.body),this.components.push(this.timeAxis),this.body.util.snap=this.timeAxis.snap.bind(this.timeAxis),this.currentTime=new l(this.body),this.components.push(this.currentTime),this.customTime=new c(this.body),this.components.push(this.customTime),this.itemSet=new p(this.body),this.components.push(this.itemSet),this.itemsData=null,this.groupsData=null,r&&this.setOptions(r),i&&this.setGroups(i),e?this.setItems(e):this.redraw()}var o=(i(56),i(45),i(1)),n=i(3),r=i(4),a=i(17),h=i(46),d=i(30),l=i(21),c=i(22),p=i(27);s.prototype=new h,s.prototype.setItems=function(t){var e,i=null==this.itemsData;if(e=t?t instanceof n||t instanceof r?t:new n(t,{type:{start:"Date",end:"Date"}}):null,this.itemsData=e,this.itemSet&&this.itemSet.setItems(e),i)if(void 0!=this.options.start||void 0!=this.options.end){if(void 0==this.options.start||void 0==this.options.end)var s=this._getDataRange();var o=void 0!=this.options.start?this.options.start:s.start,a=void 0!=this.options.end?this.options.end:s.end;this.setWindow(o,a,{animate:!1})}else this.fit({animate:!1})},s.prototype.setGroups=function(t){var e;e=t?t instanceof n||t instanceof r?t:new n(t):null,this.groupsData=e,this.itemSet.setGroups(e)},s.prototype.setSelection=function(t,e){this.itemSet&&this.itemSet.setSelection(t),e&&e.focus&&this.focus(t,e)},s.prototype.getSelection=function(){return this.itemSet&&this.itemSet.getSelection()||[]},s.prototype.focus=function(t,e){if(this.itemsData&&void 0!=t){var i=Array.isArray(t)?t:[t],s=this.itemsData.getDataSet().get(i,{type:{start:"Date",end:"Date"}}),o=null,n=null;if(s.forEach(function(t){var e=t.start.valueOf(),i="end"in t?t.end.valueOf():t.start.valueOf();(null===o||o>e)&&(o=e),(null===n||i>n)&&(n=i)}),null!==o&&null!==n){var r=(o+n)/2,a=Math.max(this.range.end-this.range.start,1.1*(n-o)),h=e&&void 0!==e.animate?e.animate:!0;this.range.setRange(r-a/2,r+a/2,h)}}},s.prototype.getItemRange=function(){var t=this.itemsData.getDataSet(),e=null,i=null;if(t){var s=t.min("start");e=s?o.convert(s.start,"Date").valueOf():null;var n=t.max("start");n&&(i=o.convert(n.start,"Date").valueOf());var r=t.max("end");r&&(i=null==i?o.convert(r.end,"Date").valueOf():Math.max(i,o.convert(r.end,"Date").valueOf()))}return{min:null!=e?new Date(e):null,max:null!=i?new Date(i):null}},t.exports=s},function(t,e,i){function s(t,e,i,s){if(!(Array.isArray(i)||i instanceof n)&&i instanceof Object){var r=s;s=i,i=r}var h=this;this.defaultOptions={start:null,end:null,autoResize:!0,orientation:"bottom",width:null,height:null,maxHeight:null,minHeight:null},this.options=o.deepExtend({},this.defaultOptions),this._create(t),this.components=[],this.body={dom:this.dom,domProps:this.props,emitter:{on:this.on.bind(this),off:this.off.bind(this),emit:this.emit.bind(this)},hiddenDates:[],util:{snap:null,toScreen:h._toScreen.bind(h),toGlobalScreen:h._toGlobalScreen.bind(h),toTime:h._toTime.bind(h),toGlobalTime:h._toGlobalTime.bind(h)}},this.range=new a(this.body),this.components.push(this.range),this.body.range=this.range,this.timeAxis=new d(this.body),this.components.push(this.timeAxis),this.body.util.snap=this.timeAxis.snap.bind(this.timeAxis),this.currentTime=new l(this.body),this.components.push(this.currentTime),this.customTime=new c(this.body),this.components.push(this.customTime),this.linegraph=new p(this.body),this.components.push(this.linegraph),this.itemsData=null,this.groupsData=null,s&&this.setOptions(s),i&&this.setGroups(i),e?this.setItems(e):this.redraw()}var o=(i(56),i(45),i(1)),n=i(3),r=i(4),a=i(17),h=i(46),d=i(30),l=i(21),c=i(22),p=i(29);s.prototype=new h,s.prototype.setItems=function(t){var e,i=null==this.itemsData;if(e=t?t instanceof n||t instanceof r?t:new n(t,{type:{start:"Date",end:"Date"}}):null,this.itemsData=e,this.linegraph&&this.linegraph.setItems(e),i)if(void 0!=this.options.start||void 0!=this.options.end){var s=void 0!=this.options.start?this.options.start:null,o=void 0!=this.options.end?this.options.end:null;this.setWindow(s,o,{animate:!1})}else this.fit({animate:!1})},s.prototype.setGroups=function(t){var e;e=t?t instanceof n||t instanceof r?t:new n(t):null,this.groupsData=e,this.linegraph.setGroups(e)},s.prototype.getLegend=function(t,e,i){return void 0===e&&(e=15),void 0===i&&(i=15),void 0!==this.linegraph.groups[t]?this.linegraph.groups[t].getLegend(e,i):"cannot find group:"+t},s.prototype.isGroupVisible=function(t){return void 0!==this.linegraph.groups[t]?this.linegraph.groups[t].visible&&(void 0===this.linegraph.options.groups.visibility[t]||1==this.linegraph.options.groups.visibility[t]):!1},s.prototype.getItemRange=function(){var t=null,e=null;for(var i in this.linegraph.groups)if(this.linegraph.groups.hasOwnProperty(i)&&1==this.linegraph.groups[i].visible)for(var s=0;sr?r:t,e=null==e?r:r>e?r:e}return{min:null!=t?new Date(t):null,max:null!=e?new Date(e):null}},t.exports=s},function(t,e,i){var s=i(44);e.convertHiddenOptions=function(t,e){if(t.hiddenDates=[],e&&1==Array.isArray(e)){for(var i=0;i=4*a){var p=0,u=n.clone();switch(i[h].repeat){case"daily":d.day()!=l.day()&&(p=1),d.dayOfYear(o.dayOfYear()),d.year(o.year()),d.subtract(7,"days"),l.dayOfYear(o.dayOfYear()),l.year(o.year()),l.subtract(7-p,"days"),u.add(1,"weeks");break;case"weekly":var m=l.diff(d,"days"),f=d.day();d.date(o.date()),d.month(o.month()),d.year(o.year()),l=d.clone(),d.day(f),l.day(f),l.add(m,"days"),d.subtract(1,"weeks"),l.subtract(1,"weeks"),u.add(1,"weeks");break;case"monthly":d.month()!=l.month()&&(p=1),d.month(o.month()),d.year(o.year()),d.subtract(1,"months"),l.month(o.month()),l.year(o.year()),l.subtract(1,"months"),l.add(p,"months"),u.add(1,"months");break;case"yearly":d.year()!=l.year()&&(p=1),d.year(o.year()),d.subtract(1,"years"),l.year(o.year()),l.subtract(1,"years"),l.add(p,"years"),u.add(1,"years");break;default:return void console.log("Wrong repeat format, allowed are: daily, weekly, monthly, yearly. Given:",i[h].repeat)}for(;u>d;)switch(t.hiddenDates.push({start:d.valueOf(),end:l.valueOf()}),i[h].repeat){case"daily":d.add(1,"days"),l.add(1,"days");break;case"weekly":d.add(1,"weeks"),l.add(1,"weeks");break;case"monthly":d.add(1,"months"),l.add(1,"months");break;case"yearly":d.add(1,"y"),l.add(1,"y");break;default:return void console.log("Wrong repeat format, allowed are: daily, weekly, monthly, yearly. Given:",i[h].repeat)}t.hiddenDates.push({start:d.valueOf(),end:l.valueOf()})}}e.removeDuplicates(t);var g=e.isHidden(t.range.start,t.hiddenDates),v=e.isHidden(t.range.end,t.hiddenDates),y=t.range.start,b=t.range.end;1==g.hidden&&(y=1==t.range.startToFront?g.startDate-1:g.endDate+1),1==v.hidden&&(b=1==t.range.endToFront?v.startDate-1:v.endDate+1),(1==g.hidden||1==v.hidden)&&t.range._applyRange(y,b)}},e.removeDuplicates=function(t){for(var e=t.hiddenDates,i=[],s=0;s=e[s].start&&e[o].end<=e[s].end?e[o].remove=!0:e[o].start>=e[s].start&&e[o].start<=e[s].end?(e[s].end=e[o].end,e[o].remove=!0):e[o].end>=e[s].start&&e[o].end<=e[s].end&&(e[s].start=e[o].start,e[o].remove=!0));for(var s=0;s=r&&a>o){i=!0;break}}if(1==i&&o=e&&i>r&&(s+=r-n)}return s},e.correctTimeForHidden=function(t,i,o){return o=s(o).toDate().valueOf(),o-=e.getHiddenDurationBefore(t,i,o)},e.getHiddenDurationBefore=function(t,e,i){var o=0;i=s(i).toDate().valueOf();for(var n=0;n=e.start&&a=a&&(o+=a-r)}return o},e.getAccumulatedHiddenDuration=function(t,e,i){for(var s=0,o=0,n=e.start,r=0;r=e.start&&h=i)break;s+=h-a}}return s},e.snapAwayFromHidden=function(t,i,s,o){var n=e.isHidden(i,t);return 1==n.hidden?0>s?1==o?n.startDate-(n.endDate-i)-1:n.startDate-1:1==o?n.endDate+(i-n.startDate)+1:n.endDate+1:i},e.isHidden=function(t,e){for(var i=0;i=s&&o>t)return{hidden:!0,startDate:s,endDate:o}}return{hidden:!1,startDate:s,endDate:o}}},function(t){function e(t,e,i,s,o,n){this.current=0,this.autoScale=!0,this.stepIndex=0,this.step=1,this.scale=1,this.marginStart,this.marginEnd,this.deadSpace=0,this.majorSteps=[1,2,5,10],this.minorSteps=[.25,.5,1,2],this.alignZeros=n,this.setRange(t,e,i,s,o)}e.prototype.setRange=function(t,e,i,s,o){this._start=void 0===o.min?t:o.min,this._end=void 0===o.max?e:o.max,this._start==this._end&&(this._start-=.75,this._end+=1),1==this.autoScale&&this.setMinimumStep(i,s),this.setFirst(o)},e.prototype.setMinimumStep=function(t,e){var i=this._end-this._start,s=1.2*i,o=t*(s/e),n=Math.round(Math.log(s)/Math.LN10),r=-1,a=Math.pow(10,n),h=0;0>n&&(h=n);for(var d=!1,l=h;Math.abs(l)<=Math.abs(n);l++){a=Math.pow(10,l);for(var c=0;c=o){d=!0,r=c;break}}if(1==d)break}this.stepIndex=r,this.scale=a,this.step=a*this.minorSteps[r]},e.prototype.setFirst=function(t){void 0===t&&(t={});var e=void 0===t.min?this._start-2*this.scale*this.minorSteps[this.stepIndex]:t.min,i=void 0===t.max?this._end+this.scale*this.minorSteps[this.stepIndex]:t.max;this.marginEnd=void 0===t.max?this.roundToMinor(i):t.max,this.marginStart=void 0===t.min?this.roundToMinor(e):t.min,1==this.alignZeros&&(this.marginEnd-this.marginStart)%this.step!=0&&(this.marginEnd+=this.marginEnd%this.step),this.deadSpace=this.roundToMinor(i)-i+this.roundToMinor(e)-e,this.marginRange=this.marginEnd-this.marginStart,this.current=this.marginEnd},e.prototype.roundToMinor=function(t){var e=t-t%(this.scale*this.minorSteps[this.stepIndex]);return t%(this.scale*this.minorSteps[this.stepIndex])>.5*this.scale*this.minorSteps[this.stepIndex]?e+this.scale*this.minorSteps[this.stepIndex]:e},e.prototype.hasNext=function(){return this.current>=this.marginStart},e.prototype.next=function(){var t=this.current;this.current-=this.step,this.current==t&&(this.current=this._end)},e.prototype.previous=function(){this.current+=this.step,this.marginEnd+=this.step,this.marginRange=this.marginEnd-this.marginStart},e.prototype.getCurrent=function(t){var e=Math.abs(this.current)0;s--){if("0"!=i[s]){if("."==i[s]||","==i[s]){i=i.slice(0,s);break}break}i=i.slice(0,s)}}else{var o="",n=i.indexOf("e");if(-1!=n&&(o=i.slice(n),i=i.slice(0,n)),n=Math.max(i.indexOf(","),i.indexOf(".")),-1===n?(0!==t&&(i+="."),n=i.length+t):0!==t&&(n+=t+1),n>i.length)for(var r=n-i.length;r>0;r--)i+="0";else i=i.slice(0,n);i+=o}return i},e.prototype.snap=function(){},e.prototype.isMajor=function(){return this.current%(this.scale*this.majorSteps[this.stepIndex])==0},t.exports=e},function(t,e,i){function s(t,e){var i=h().hours(0).minutes(0).seconds(0).milliseconds(0);this.start=i.clone().add(-3,"days").valueOf(),this.end=i.clone().add(4,"days").valueOf(),this.body=t,this.deltaDifference=0,this.scaleOffset=0,this.startToFront=!1,this.endToFront=!0,this.defaultOptions={start:null,end:null,direction:"horizontal",moveable:!0,zoomable:!0,min:null,max:null,zoomMin:10,zoomMax:31536e10},this.options=r.extend({},this.defaultOptions),this.props={touch:{}},this.animateTimer=null,this.body.emitter.on("dragstart",this._onDragStart.bind(this)),this.body.emitter.on("drag",this._onDrag.bind(this)),this.body.emitter.on("dragend",this._onDragEnd.bind(this)),this.body.emitter.on("hold",this._onHold.bind(this)),this.body.emitter.on("mousewheel",this._onMouseWheel.bind(this)),this.body.emitter.on("DOMMouseScroll",this._onMouseWheel.bind(this)),this.body.emitter.on("touch",this._onTouch.bind(this)),this.body.emitter.on("pinch",this._onPinch.bind(this)),this.setOptions(e)}function o(t){if("horizontal"!=t&&"vertical"!=t)throw new TypeError('Unknown direction "'+t+'". Choose "horizontal" or "vertical".')}function n(t,e){return{x:t.pageX-r.getAbsoluteLeft(e),y:t.pageY-r.getAbsoluteTop(e)}}var r=i(1),a=i(47),h=i(44),d=i(20),l=i(15);s.prototype=new d,s.prototype.setOptions=function(t){if(t){var e=["direction","min","max","zoomMin","zoomMax","moveable","zoomable","activate","hiddenDates"];r.selectiveExtend(e,this.options,t),("start"in t||"end"in t)&&this.setRange(t.start,t.end)}},s.prototype.setRange=function(t,e,i){var s=void 0!=t?r.convert(t,"Date").valueOf():null,o=void 0!=e?r.convert(e,"Date").valueOf():null;if(this._cancelAnimation(),i){var n=this,a=this.start,h=this.end,d="number"==typeof i?i:500,c=(new Date).valueOf(),p=!1,u=function(){if(!n.props.touch.dragging){var t=(new Date).valueOf(),e=t-c,i=e>d,f=i||null===s?s:r.easeInOutQuad(e,a,s,d),g=i||null===o?o:r.easeInOutQuad(e,h,o,d);m=n._applyRange(f,g),l.updateHiddenDates(n.body,n.options.hiddenDates),p=p||m,m&&n.body.emitter.emit("rangechange",{start:new Date(n.start),end:new Date(n.end)}),i?p&&n.body.emitter.emit("rangechanged",{start:new Date(n.start),end:new Date(n.end)}):n.animateTimer=setTimeout(u,20)}};return u()}var m=this._applyRange(s,o);if(l.updateHiddenDates(this.body,this.options.hiddenDates),m){var f={start:new Date(this.start),end:new Date(this.end)};this.body.emitter.emit("rangechange",f),this.body.emitter.emit("rangechanged",f)}},s.prototype._cancelAnimation=function(){this.animateTimer&&(clearTimeout(this.animateTimer),this.animateTimer=null)},s.prototype._applyRange=function(t,e){var i,s=null!=t?r.convert(t,"Date").valueOf():this.start,o=null!=e?r.convert(e,"Date").valueOf():this.end,n=null!=this.options.max?r.convert(this.options.max,"Date").valueOf():null,a=null!=this.options.min?r.convert(this.options.min,"Date").valueOf():null;if(isNaN(s)||null===s)throw new Error('Invalid start "'+t+'"');if(isNaN(o)||null===o)throw new Error('Invalid end "'+e+'"');if(s>o&&(o=s),null!==a&&a>s&&(i=a-s,s+=i,o+=i,null!=n&&o>n&&(o=n)),null!==n&&o>n&&(i=o-n,s-=i,o-=i,null!=a&&a>s&&(s=a)),null!==this.options.zoomMin){var h=parseFloat(this.options.zoomMin);0>h&&(h=0),h>o-s&&(this.end-this.start===h?(s=this.start,o=this.end):(i=h-(o-s),s-=i/2,o+=i/2))}if(null!==this.options.zoomMax){var d=parseFloat(this.options.zoomMax);0>d&&(d=0),o-s>d&&(this.end-this.start===d?(s=this.start,o=this.end):(i=o-s-d,s+=i/2,o-=i/2))}var l=this.start!=s||this.end!=o;return s>=this.start&&s<=this.end||o>=this.start&&o<=this.end||this.start>=s&&this.start<=o||this.end>=s&&this.end<=o||this.body.emitter.emit("checkRangedItems"),this.start=s,this.end=o,l},s.prototype.getRange=function(){return{start:this.start,end:this.end}},s.prototype.conversion=function(t,e){return s.conversion(this.start,this.end,t,e)},s.conversion=function(t,e,i,s){return void 0===s&&(s=0),0!=i&&e-t!=0?{offset:t,scale:i/(e-t-s)}:{offset:0,scale:1}},s.prototype._onDragStart=function(){this.deltaDifference=0,this.previousDelta=0,this.options.moveable&&this.props.touch.allowDragging&&(this.props.touch.start=this.start,this.props.touch.end=this.end,this.props.touch.dragging=!0,this.body.dom.root&&(this.body.dom.root.style.cursor="move"))},s.prototype._onDrag=function(t){if(this.options.moveable&&this.props.touch.allowDragging){var e=this.options.direction;o(e);var i="horizontal"==e?t.gesture.deltaX:t.gesture.deltaY;i-=this.deltaDifference;var s=this.props.touch.end-this.props.touch.start,n=l.getHiddenDurationBetween(this.body.hiddenDates,this.start,this.end);s-=n;var r="horizontal"==e?this.body.domProps.center.width:this.body.domProps.center.height,a=-i/r*s,h=this.props.touch.start+a,d=this.props.touch.end+a,c=l.snapAwayFromHidden(this.body.hiddenDates,h,this.previousDelta-i,!0),p=l.snapAwayFromHidden(this.body.hiddenDates,d,this.previousDelta-i,!0);if(c!=h||p!=d)return this.deltaDifference+=i,this.props.touch.start=c,this.props.touch.end=p,void this._onDrag(t);this.previousDelta=i,this._applyRange(h,d),this.body.emitter.emit("rangechange",{start:new Date(this.start),end:new Date(this.end)})}},s.prototype._onDragEnd=function(){this.options.moveable&&this.props.touch.allowDragging&&(this.props.touch.dragging=!1,this.body.dom.root&&(this.body.dom.root.style.cursor="auto"),this.body.emitter.emit("rangechanged",{start:new Date(this.start),end:new Date(this.end)}))},s.prototype._onMouseWheel=function(t){if(this.options.zoomable&&this.options.moveable){var e=0;if(t.wheelDelta?e=t.wheelDelta/120:t.detail&&(e=-t.detail/3),e){var i;i=0>e?1-e/5:1/(1+e/5);var s=a.fakeGesture(this,t),o=n(s.center,this.body.dom.center),r=this._pointerToDate(o);this.zoom(i,r,e)}t.preventDefault()}},s.prototype._onTouch=function(){this.props.touch.start=this.start,this.props.touch.end=this.end,this.props.touch.allowDragging=!0,this.props.touch.center=null,this.scaleOffset=0,this.deltaDifference=0},s.prototype._onHold=function(){this.props.touch.allowDragging=!1},s.prototype._onPinch=function(t){if(this.options.zoomable&&this.options.moveable&&(this.props.touch.allowDragging=!1,t.gesture.touches.length>1)){this.props.touch.center||(this.props.touch.center=n(t.gesture.center,this.body.dom.center));var e=1/(t.gesture.scale+this.scaleOffset),i=this._pointerToDate(this.props.touch.center),s=l.getHiddenDurationBetween(this.body.hiddenDates,this.start,this.end),o=l.getHiddenDurationBefore(this.body.hiddenDates,this,i),r=s-o,a=i-o+(this.props.touch.start-(i-o))*e,h=i+r+(this.props.touch.end-(i+r))*e;this.startToFront=1-e>0?!1:!0,this.endToFront=e-1>0?!1:!0;var d=l.snapAwayFromHidden(this.body.hiddenDates,a,1-e,!0),c=l.snapAwayFromHidden(this.body.hiddenDates,h,e-1,!0);(d!=a||c!=h)&&(this.props.touch.start=d,this.props.touch.end=c,this.scaleOffset=1-t.gesture.scale,a=d,h=c),this.setRange(a,h),this.startToFront=!1,this.endToFront=!0}},s.prototype._pointerToDate=function(t){var e,i=this.options.direction;if(o(i),"horizontal"==i)return this.body.util.toTime(t.x).valueOf();var s=this.body.domProps.center.height;return e=this.conversion(s),t.y/e.scale+e.offset},s.prototype.zoom=function(t,e,i){null==e&&(e=(this.start+this.end)/2);var s=l.getHiddenDurationBetween(this.body.hiddenDates,this.start,this.end),o=l.getHiddenDurationBefore(this.body.hiddenDates,this,e),n=s-o,r=e-o+(this.start-(e-o))*t,a=e+n+(this.end-(e+n))*t;this.startToFront=i>0?!1:!0,this.endToFront=-i>0?!1:!0;var h=l.snapAwayFromHidden(this.body.hiddenDates,r,i,!0),d=l.snapAwayFromHidden(this.body.hiddenDates,a,-i,!0);(h!=r||d!=a)&&(r=h,a=d),this.setRange(r,a),this.startToFront=!1,this.endToFront=!0},s.prototype.move=function(t){var e=this.end-this.start,i=this.start+e*t,s=this.end+e*t;this.start=i,this.end=s},s.prototype.moveTo=function(t){var e=(this.start+this.end)/2,i=e-t,s=this.start-i,o=this.end-i;this.setRange(s,o)},t.exports=s},function(t,e){var i=.001;e.orderByStart=function(t){t.sort(function(t,e){return t.data.start-e.data.start})},e.orderByEnd=function(t){t.sort(function(t,e){var i="end"in t.data?t.data.end:t.data.start,s="end"in e.data?e.data.end:e.data.start;return i-s})},e.stack=function(t,i,s){var o,n;if(s)for(o=0,n=t.length;n>o;o++)t[o].top=null;for(o=0,n=t.length;n>o;o++){var r=t[o];if(r.stack&&null===r.top){r.top=i.axis;do{for(var a=null,h=0,d=t.length;d>h;h++){var l=t[h];if(null!==l.top&&l!==r&&l.stack&&e.collision(r,l,i.item)){a=l;break}}null!=a&&(r.top=a.top+a.height+i.item.vertical)}while(a)}}},e.nostack=function(t,e,i){var s,o,n;for(s=0,o=t.length;o>s;s++)if(void 0!==t[s].data.subgroup){n=e.axis;for(var r in i)i.hasOwnProperty(r)&&1==i[r].visible&&i[r].indexe.left&&t.top-s.vertical+ie.top}},function(t,e,i){function s(t,e,i,o){this.current=new Date,this._start=new Date,this._end=new Date,this.autoScale=!0,this.scale=s.SCALE.DAY,this.step=1,this.setRange(t,e,i),this.switchedDay=!1,this.switchedMonth=!1,this.switchedYear=!1,this.hiddenDates=o,void 0===o&&(this.hiddenDates=[])}var o=i(44),n=i(15);s.SCALE={MILLISECOND:1,SECOND:2,MINUTE:3,HOUR:4,DAY:5,WEEKDAY:6,MONTH:7,YEAR:8},s.prototype.setRange=function(t,e,i){if(!(t instanceof Date&&e instanceof Date))throw"No legal start or end date in method setRange";this._start=void 0!=t?new Date(t.valueOf()):new Date,this._end=void 0!=e?new Date(e.valueOf()):new Date,this.autoScale&&this.setMinimumStep(i)},s.prototype.first=function(){this.current=new Date(this._start.valueOf()),this.roundToMinor()},s.prototype.roundToMinor=function(){switch(this.scale){case s.SCALE.YEAR:this.current.setFullYear(this.step*Math.floor(this.current.getFullYear()/this.step)),this.current.setMonth(0);case s.SCALE.MONTH:this.current.setDate(1);case s.SCALE.DAY:case s.SCALE.WEEKDAY:this.current.setHours(0);case s.SCALE.HOUR:this.current.setMinutes(0);case s.SCALE.MINUTE:this.current.setSeconds(0);case s.SCALE.SECOND:this.current.setMilliseconds(0)}if(1!=this.step)switch(this.scale){case s.SCALE.MILLISECOND:this.current.setMilliseconds(this.current.getMilliseconds()-this.current.getMilliseconds()%this.step);break;case s.SCALE.SECOND:this.current.setSeconds(this.current.getSeconds()-this.current.getSeconds()%this.step);break;case s.SCALE.MINUTE:this.current.setMinutes(this.current.getMinutes()-this.current.getMinutes()%this.step);break;case s.SCALE.HOUR:this.current.setHours(this.current.getHours()-this.current.getHours()%this.step);break;case s.SCALE.WEEKDAY:case s.SCALE.DAY:this.current.setDate(this.current.getDate()-1-(this.current.getDate()-1)%this.step+1); -break;case s.SCALE.MONTH:this.current.setMonth(this.current.getMonth()-this.current.getMonth()%this.step);break;case s.SCALE.YEAR:this.current.setFullYear(this.current.getFullYear()-this.current.getFullYear()%this.step)}},s.prototype.hasNext=function(){return this.current.valueOf()<=this._end.valueOf()},s.prototype.next=function(){var t=this.current.valueOf();if(this.current.getMonth()<6)switch(this.scale){case s.SCALE.MILLISECOND:this.current=new Date(this.current.valueOf()+this.step);break;case s.SCALE.SECOND:this.current=new Date(this.current.valueOf()+1e3*this.step);break;case s.SCALE.MINUTE:this.current=new Date(this.current.valueOf()+1e3*this.step*60);break;case s.SCALE.HOUR:this.current=new Date(this.current.valueOf()+1e3*this.step*60*60);var e=this.current.getHours();this.current.setHours(e-e%this.step);break;case s.SCALE.WEEKDAY:case s.SCALE.DAY:this.current.setDate(this.current.getDate()+this.step);break;case s.SCALE.MONTH:this.current.setMonth(this.current.getMonth()+this.step);break;case s.SCALE.YEAR:this.current.setFullYear(this.current.getFullYear()+this.step)}else switch(this.scale){case s.SCALE.MILLISECOND:this.current=new Date(this.current.valueOf()+this.step);break;case s.SCALE.SECOND:this.current.setSeconds(this.current.getSeconds()+this.step);break;case s.SCALE.MINUTE:this.current.setMinutes(this.current.getMinutes()+this.step);break;case s.SCALE.HOUR:this.current.setHours(this.current.getHours()+this.step);break;case s.SCALE.WEEKDAY:case s.SCALE.DAY:this.current.setDate(this.current.getDate()+this.step);break;case s.SCALE.MONTH:this.current.setMonth(this.current.getMonth()+this.step);break;case s.SCALE.YEAR:this.current.setFullYear(this.current.getFullYear()+this.step)}if(1!=this.step)switch(this.scale){case s.SCALE.MILLISECOND:this.current.getMilliseconds()0&&(this.step=e),this.autoScale=!1},s.prototype.setAutoScale=function(t){this.autoScale=t},s.prototype.setMinimumStep=function(t){if(void 0!=t){var e=31104e6,i=2592e6,o=864e5,n=36e5,r=6e4,a=1e3,h=1;1e3*e>t&&(this.scale=s.SCALE.YEAR,this.step=1e3),500*e>t&&(this.scale=s.SCALE.YEAR,this.step=500),100*e>t&&(this.scale=s.SCALE.YEAR,this.step=100),50*e>t&&(this.scale=s.SCALE.YEAR,this.step=50),10*e>t&&(this.scale=s.SCALE.YEAR,this.step=10),5*e>t&&(this.scale=s.SCALE.YEAR,this.step=5),e>t&&(this.scale=s.SCALE.YEAR,this.step=1),3*i>t&&(this.scale=s.SCALE.MONTH,this.step=3),i>t&&(this.scale=s.SCALE.MONTH,this.step=1),5*o>t&&(this.scale=s.SCALE.DAY,this.step=5),2*o>t&&(this.scale=s.SCALE.DAY,this.step=2),o>t&&(this.scale=s.SCALE.DAY,this.step=1),o/2>t&&(this.scale=s.SCALE.WEEKDAY,this.step=1),4*n>t&&(this.scale=s.SCALE.HOUR,this.step=4),n>t&&(this.scale=s.SCALE.HOUR,this.step=1),15*r>t&&(this.scale=s.SCALE.MINUTE,this.step=15),10*r>t&&(this.scale=s.SCALE.MINUTE,this.step=10),5*r>t&&(this.scale=s.SCALE.MINUTE,this.step=5),r>t&&(this.scale=s.SCALE.MINUTE,this.step=1),15*a>t&&(this.scale=s.SCALE.SECOND,this.step=15),10*a>t&&(this.scale=s.SCALE.SECOND,this.step=10),5*a>t&&(this.scale=s.SCALE.SECOND,this.step=5),a>t&&(this.scale=s.SCALE.SECOND,this.step=1),200*h>t&&(this.scale=s.SCALE.MILLISECOND,this.step=200),100*h>t&&(this.scale=s.SCALE.MILLISECOND,this.step=100),50*h>t&&(this.scale=s.SCALE.MILLISECOND,this.step=50),10*h>t&&(this.scale=s.SCALE.MILLISECOND,this.step=10),5*h>t&&(this.scale=s.SCALE.MILLISECOND,this.step=5),h>t&&(this.scale=s.SCALE.MILLISECOND,this.step=1)}},s.prototype.snap=function(t){var e=new Date(t.valueOf());if(this.scale==s.SCALE.YEAR){var i=e.getFullYear()+Math.round(e.getMonth()/12);e.setFullYear(Math.round(i/this.step)*this.step),e.setMonth(0),e.setDate(0),e.setHours(0),e.setMinutes(0),e.setSeconds(0),e.setMilliseconds(0)}else if(this.scale==s.SCALE.MONTH)e.getDate()>15?(e.setDate(1),e.setMonth(e.getMonth()+1)):e.setDate(1),e.setHours(0),e.setMinutes(0),e.setSeconds(0),e.setMilliseconds(0);else if(this.scale==s.SCALE.DAY){switch(this.step){case 5:case 2:e.setHours(24*Math.round(e.getHours()/24));break;default:e.setHours(12*Math.round(e.getHours()/12))}e.setMinutes(0),e.setSeconds(0),e.setMilliseconds(0)}else if(this.scale==s.SCALE.WEEKDAY){switch(this.step){case 5:case 2:e.setHours(12*Math.round(e.getHours()/12));break;default:e.setHours(6*Math.round(e.getHours()/6))}e.setMinutes(0),e.setSeconds(0),e.setMilliseconds(0)}else if(this.scale==s.SCALE.HOUR){switch(this.step){case 4:e.setMinutes(60*Math.round(e.getMinutes()/60));break;default:e.setMinutes(30*Math.round(e.getMinutes()/30))}e.setSeconds(0),e.setMilliseconds(0)}else if(this.scale==s.SCALE.MINUTE){switch(this.step){case 15:case 10:e.setMinutes(5*Math.round(e.getMinutes()/5)),e.setSeconds(0);break;case 5:e.setSeconds(60*Math.round(e.getSeconds()/60));break;default:e.setSeconds(30*Math.round(e.getSeconds()/30))}e.setMilliseconds(0)}else if(this.scale==s.SCALE.SECOND)switch(this.step){case 15:case 10:e.setSeconds(5*Math.round(e.getSeconds()/5)),e.setMilliseconds(0);break;case 5:e.setMilliseconds(1e3*Math.round(e.getMilliseconds()/1e3));break;default:e.setMilliseconds(500*Math.round(e.getMilliseconds()/500))}else if(this.scale==s.SCALE.MILLISECOND){var o=this.step>5?this.step/2:1;e.setMilliseconds(Math.round(e.getMilliseconds()/o)*o)}return e},s.prototype.isMajor=function(){if(1==this.switchedYear)switch(this.switchedYear=!1,this.scale){case s.SCALE.YEAR:case s.SCALE.MONTH:case s.SCALE.WEEKDAY:case s.SCALE.DAY:case s.SCALE.HOUR:case s.SCALE.MINUTE:case s.SCALE.SECOND:case s.SCALE.MILLISECOND:return!0;default:return!1}else if(1==this.switchedMonth)switch(this.switchedMonth=!1,this.scale){case s.SCALE.WEEKDAY:case s.SCALE.DAY:case s.SCALE.HOUR:case s.SCALE.MINUTE:case s.SCALE.SECOND:case s.SCALE.MILLISECOND:return!0;default:return!1}else if(1==this.switchedDay)switch(this.switchedDay=!1,this.scale){case s.SCALE.MILLISECOND:case s.SCALE.SECOND:case s.SCALE.MINUTE:case s.SCALE.HOUR:return!0;default:return!1}switch(this.scale){case s.SCALE.MILLISECOND:return 0==this.current.getMilliseconds();case s.SCALE.SECOND:return 0==this.current.getSeconds();case s.SCALE.MINUTE:return 0==this.current.getHours()&&0==this.current.getMinutes();case s.SCALE.HOUR:return 0==this.current.getHours();case s.SCALE.WEEKDAY:case s.SCALE.DAY:return 1==this.current.getDate();case s.SCALE.MONTH:return 0==this.current.getMonth();case s.SCALE.YEAR:return!1;default:return!1}},s.prototype.getLabelMinor=function(t){switch(void 0==t&&(t=this.current),this.scale){case s.SCALE.MILLISECOND:return o(t).format("SSS");case s.SCALE.SECOND:return o(t).format("s");case s.SCALE.MINUTE:return o(t).format("HH:mm");case s.SCALE.HOUR:return o(t).format("HH:mm");case s.SCALE.WEEKDAY:return o(t).format("ddd D");case s.SCALE.DAY:return o(t).format("D");case s.SCALE.MONTH:return o(t).format("MMM");case s.SCALE.YEAR:return o(t).format("YYYY");default:return""}},s.prototype.getLabelMajor=function(t){switch(void 0==t&&(t=this.current),this.scale){case s.SCALE.MILLISECOND:return o(t).format("HH:mm:ss");case s.SCALE.SECOND:return o(t).format("D MMMM HH:mm");case s.SCALE.MINUTE:case s.SCALE.HOUR:return o(t).format("ddd D MMMM");case s.SCALE.WEEKDAY:case s.SCALE.DAY:return o(t).format("MMMM YYYY");case s.SCALE.MONTH:return o(t).format("YYYY");case s.SCALE.YEAR:return"";default:return""}},t.exports=s},function(t){function e(){this.options=null,this.props=null}e.prototype.setOptions=function(t){t&&util.extend(this.options,t)},e.prototype.redraw=function(){return!1},e.prototype.destroy=function(){},e.prototype._isResized=function(){var t=this.props._previousWidth!==this.props.width||this.props._previousHeight!==this.props.height;return this.props._previousWidth=this.props.width,this.props._previousHeight=this.props.height,t},t.exports=e},function(t,e,i){function s(t,e){this.body=t,this.defaultOptions={showCurrentTime:!0,locales:a,locale:"en"},this.options=o.extend({},this.defaultOptions),this.offset=0,this._create(),this.setOptions(e)}var o=i(1),n=i(20),r=i(44),a=i(48);s.prototype=new n,s.prototype._create=function(){var t=document.createElement("div");t.className="currenttime",t.style.position="absolute",t.style.top="0px",t.style.height="100%",this.bar=t},s.prototype.destroy=function(){this.options.showCurrentTime=!1,this.redraw(),this.body=null},s.prototype.setOptions=function(t){t&&o.selectiveExtend(["showCurrentTime","locale","locales"],this.options,t)},s.prototype.redraw=function(){if(this.options.showCurrentTime){var t=this.body.dom.backgroundVertical;this.bar.parentNode!=t&&(this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar),t.appendChild(this.bar),this.start());var e=new Date((new Date).valueOf()+this.offset),i=this.body.util.toScreen(e),s=this.options.locales[this.options.locale],o=s.current+" "+s.time+": "+r(e).format("dddd, MMMM Do YYYY, H:mm:ss");o=o.charAt(0).toUpperCase()+o.substring(1),this.bar.style.left=i+"px",this.bar.title=o}else this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar),this.stop();return!1},s.prototype.start=function(){function t(){e.stop();var i=e.body.range.conversion(e.body.domProps.center.width).scale,s=1/i/10;30>s&&(s=30),s>1e3&&(s=1e3),e.redraw(),e.currentTimeTimer=setTimeout(t,s)}var e=this;t()},s.prototype.stop=function(){void 0!==this.currentTimeTimer&&(clearTimeout(this.currentTimeTimer),delete this.currentTimeTimer)},s.prototype.setCurrentTime=function(t){var e=o.convert(t,"Date").valueOf(),i=(new Date).valueOf();this.offset=e-i,this.redraw()},s.prototype.getCurrentTime=function(){return new Date((new Date).valueOf()+this.offset)},t.exports=s},function(t,e,i){function s(t,e){this.body=t,this.defaultOptions={showCustomTime:!1,locales:h,locale:"en"},this.options=n.extend({},this.defaultOptions),this.customTime=new Date,this.eventParams={},this._create(),this.setOptions(e)}var o=i(45),n=i(1),r=i(20),a=i(44),h=i(48);s.prototype=new r,s.prototype.setOptions=function(t){t&&n.selectiveExtend(["showCustomTime","locale","locales"],this.options,t)},s.prototype._create=function(){var t=document.createElement("div");t.className="customtime",t.style.position="absolute",t.style.top="0px",t.style.height="100%",this.bar=t;var e=document.createElement("div");e.style.position="relative",e.style.top="0px",e.style.left="-10px",e.style.height="100%",e.style.width="20px",t.appendChild(e),this.hammer=o(t,{prevent_default:!0}),this.hammer.on("dragstart",this._onDragStart.bind(this)),this.hammer.on("drag",this._onDrag.bind(this)),this.hammer.on("dragend",this._onDragEnd.bind(this))},s.prototype.destroy=function(){this.options.showCustomTime=!1,this.redraw(),this.hammer.enable(!1),this.hammer=null,this.body=null},s.prototype.redraw=function(){if(this.options.showCustomTime){var t=this.body.dom.backgroundVertical;this.bar.parentNode!=t&&(this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar),t.appendChild(this.bar));var e=this.body.util.toScreen(this.customTime),i=this.options.locales[this.options.locale],s=i.time+": "+a(this.customTime).format("dddd, MMMM Do YYYY, H:mm:ss");s=s.charAt(0).toUpperCase()+s.substring(1),this.bar.style.left=e+"px",this.bar.title=s}else this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar);return!1},s.prototype.setCustomTime=function(t){this.customTime=n.convert(t,"Date"),this.redraw()},s.prototype.getCustomTime=function(){return new Date(this.customTime.valueOf())},s.prototype._onDragStart=function(t){this.eventParams.dragging=!0,this.eventParams.customTime=this.customTime,t.stopPropagation(),t.preventDefault()},s.prototype._onDrag=function(t){if(this.eventParams.dragging){var e=t.gesture.deltaX,i=this.body.util.toScreen(this.eventParams.customTime)+e,s=this.body.util.toTime(i);this.setCustomTime(s),this.body.emitter.emit("timechange",{time:new Date(this.customTime.valueOf())}),t.stopPropagation(),t.preventDefault()}},s.prototype._onDragEnd=function(t){this.eventParams.dragging&&(this.body.emitter.emit("timechanged",{time:new Date(this.customTime.valueOf())}),t.stopPropagation(),t.preventDefault())},t.exports=s},function(t,e,i){function s(t,e,i,s){this.id=o.randomUUID(),this.body=t,this.defaultOptions={orientation:"left",showMinorLabels:!0,showMajorLabels:!0,icons:!0,majorLinesOffset:7,minorLinesOffset:4,labelOffsetX:10,labelOffsetY:2,iconWidth:20,width:"40px",visible:!0,alignZeros:!0,customRange:{left:{min:void 0,max:void 0},right:{min:void 0,max:void 0}},title:{left:{text:void 0},right:{text:void 0}},format:{left:{decimals:void 0},right:{decimals:void 0}}},this.linegraphOptions=s,this.linegraphSVG=i,this.props={},this.DOMelements={lines:{},labels:{},title:{}},this.dom={},this.range={start:0,end:0},this.options=o.extend({},this.defaultOptions),this.conversionFactor=1,this.setOptions(e),this.width=Number((""+this.options.width).replace("px","")),this.minWidth=this.width,this.height=this.linegraphSVG.offsetHeight,this.hidden=!1,this.stepPixels=25,this.stepPixelsForced=25,this.zeroCrossing=-1,this.lineOffset=0,this.master=!0,this.svgElements={},this.iconsRemoved=!1,this.groups={},this.amountOfGroups=0,this._create();var n=this;this.body.emitter.on("verticalDrag",function(){n.dom.lineContainer.style.top=n.body.domProps.scrollTop+"px"})}var o=i(1),n=i(2),r=i(20),a=i(16);s.prototype=new r,s.prototype.addGroup=function(t,e){this.groups.hasOwnProperty(t)||(this.groups[t]=e),this.amountOfGroups+=1},s.prototype.updateGroup=function(t,e){this.groups[t]=e},s.prototype.removeGroup=function(t){this.groups.hasOwnProperty(t)&&(delete this.groups[t],this.amountOfGroups-=1)},s.prototype.setOptions=function(t){if(t){var e=!1;this.options.orientation!=t.orientation&&void 0!==t.orientation&&(e=!0);var i=["orientation","showMinorLabels","showMajorLabels","icons","majorLinesOffset","minorLinesOffset","labelOffsetX","labelOffsetY","iconWidth","width","visible","customRange","title","format","alignZeros"];o.selectiveExtend(i,this.options,t),this.minWidth=Number((""+this.options.width).replace("px","")),1==e&&this.dom.frame&&(this.hide(),this.show())}},s.prototype._create=function(){this.dom.frame=document.createElement("div"),this.dom.frame.style.width=this.options.width,this.dom.frame.style.height=this.height,this.dom.lineContainer=document.createElement("div"),this.dom.lineContainer.style.width="100%",this.dom.lineContainer.style.height=this.height,this.dom.lineContainer.style.position="relative",this.svg=document.createElementNS("http://www.w3.org/2000/svg","svg"),this.svg.style.position="absolute",this.svg.style.top="0px",this.svg.style.height="100%",this.svg.style.width="100%",this.svg.style.display="block",this.dom.frame.appendChild(this.svg)},s.prototype._redrawGroupIcons=function(){n.prepareElements(this.svgElements);var t,e=this.options.iconWidth,i=15,s=4,o=s+.5*i;t="left"==this.options.orientation?s:this.width-e-s;for(var r in this.groups)this.groups.hasOwnProperty(r)&&(1!=this.groups[r].visible||void 0!==this.linegraphOptions.visibility[r]&&1!=this.linegraphOptions.visibility[r]||(this.groups[r].drawIcon(t,o,this.svgElements,this.svg,e,i),o+=i+s));n.cleanupElements(this.svgElements),this.iconsRemoved=!1},s.prototype._cleanupIcons=function(){0==this.iconsRemoved&&(n.prepareElements(this.svgElements),n.cleanupElements(this.svgElements),this.iconsRemoved=!0)},s.prototype.show=function(){this.hidden=!1,this.dom.frame.parentNode||("left"==this.options.orientation?this.body.dom.left.appendChild(this.dom.frame):this.body.dom.right.appendChild(this.dom.frame)),this.dom.lineContainer.parentNode||this.body.dom.backgroundHorizontal.appendChild(this.dom.lineContainer)},s.prototype.hide=function(){this.hidden=!0,this.dom.frame.parentNode&&this.dom.frame.parentNode.removeChild(this.dom.frame),this.dom.lineContainer.parentNode&&this.dom.lineContainer.parentNode.removeChild(this.dom.lineContainer)},s.prototype.setRange=function(t,e){0==this.master&&1==this.options.alignZeros&&-1!=this.zeroCrossing&&t>0&&(t=0),this.range.start=t,this.range.end=e},s.prototype.redraw=function(){var t=!1,e=0;this.dom.lineContainer.style.top=this.body.domProps.scrollTop+"px";for(var i in this.groups)this.groups.hasOwnProperty(i)&&(1!=this.groups[i].visible||void 0!==this.linegraphOptions.visibility[i]&&1!=this.linegraphOptions.visibility[i]||e++);if(0==this.amountOfGroups||0==e)this.hide();else{this.show(),this.height=Number(this.linegraphSVG.style.height.replace("px","")),this.dom.lineContainer.style.height=this.height+"px",this.width=1==this.options.visible?Number((""+this.options.width).replace("px","")):0;var s=this.props,o=this.dom.frame;o.className="dataaxis",this._calculateCharSize();var n=this.options.orientation,r=this.options.showMinorLabels,a=this.options.showMajorLabels;s.minorLabelHeight=r?s.minorCharHeight:0,s.majorLabelHeight=a?s.majorCharHeight:0,s.minorLineWidth=this.body.dom.backgroundHorizontal.offsetWidth-this.lineOffset-this.width+2*this.options.minorLinesOffset,s.minorLineHeight=1,s.majorLineWidth=this.body.dom.backgroundHorizontal.offsetWidth-this.lineOffset-this.width+2*this.options.majorLinesOffset,s.majorLineHeight=1,"left"==n?(o.style.top="0",o.style.left="0",o.style.bottom="",o.style.width=this.width+"px",o.style.height=this.height+"px"):(o.style.top="",o.style.bottom="0",o.style.left="0",o.style.width=this.width+"px",o.style.height=this.height+"px"),t=this._redrawLabels(),1==this.options.icons?this._redrawGroupIcons():this._cleanupIcons(),this._redrawTitle(n)}return t},s.prototype._redrawLabels=function(){n.prepareElements(this.DOMelements.lines),n.prepareElements(this.DOMelements.labels);var t=this.options.orientation,e=this.master?this.props.majorCharHeight||10:this.stepPixelsForced,i=new a(this.range.start,this.range.end,e,this.dom.frame.offsetHeight,this.options.customRange[this.options.orientation],0==this.master&&this.options.alignZeros);this.step=i;var s=(this.dom.frame.offsetHeight-i.deadSpace*(this.dom.frame.offsetHeight/i.marginRange))/((i.marginRange-i.deadSpace)/i.step);this.stepPixels=s;var o=this.height/s,r=0;if(0==this.master){s=this.stepPixelsForced,r=Math.round(this.dom.frame.offsetHeight/s-o);for(var h=0;.5*r>h;h++)i.previous();if(o=this.height/s,-1!=this.zeroCrossing&&1==this.options.alignZeros){var d=i.marginEnd/i.step-this.zeroCrossing;if(d>0)for(var h=0;d>h;h++)i.next();else if(0>d)for(var h=0;-d>h;h++)i.previous()}}else o+=.25;this.valueAtZero=i.marginEnd;var l,c=0,p=1;void 0!==this.options.format[t]&&(l=this.options.format[t].decimals),this.maxLabelSize=0;for(var u=0;p=0&&this._redrawLabel(u-2,i.getCurrent(l),t,"yAxis major",this.props.majorCharHeight),this._redrawLine(u,t,"grid horizontal major",this.options.majorLinesOffset,this.props.majorLineWidth)):this._redrawLine(u,t,"grid horizontal minor",this.options.minorLinesOffset,this.props.minorLineWidth),1==this.master&&0==i.current&&(this.zeroCrossing=p),p++}this.conversionFactor=0==this.master?u/(this.valueAtZero-i.current):this.dom.frame.offsetHeight/i.marginRange;var f=0;void 0!==this.options.title[t]&&void 0!==this.options.title[t].text&&(f=this.props.titleCharHeight);var g=1==this.options.icons?Math.max(this.options.iconWidth,f)+this.options.labelOffsetX+15:f+this.options.labelOffsetX+15;return this.maxLabelSize>this.width-g&&1==this.options.visible?(this.width=this.maxLabelSize+g,this.options.width=this.width+"px",n.cleanupElements(this.DOMelements.lines),n.cleanupElements(this.DOMelements.labels),this.redraw(),!0):this.maxLabelSizethis.minWidth?(this.width=Math.max(this.minWidth,this.maxLabelSize+g),this.options.width=this.width+"px",n.cleanupElements(this.DOMelements.lines),n.cleanupElements(this.DOMelements.labels),this.redraw(),!0):(n.cleanupElements(this.DOMelements.lines),n.cleanupElements(this.DOMelements.labels),!1)},s.prototype.convertValue=function(t){var e=this.valueAtZero-t,i=e*this.conversionFactor;return i},s.prototype._redrawLabel=function(t,e,i,s,o){var r=n.getDOMElement("div",this.DOMelements.labels,this.dom.frame);r.className=s,r.innerHTML=e,"left"==i?(r.style.left="-"+this.options.labelOffsetX+"px",r.style.textAlign="right"):(r.style.right="-"+this.options.labelOffsetX+"px",r.style.textAlign="left"),r.style.top=t-.5*o+this.options.labelOffsetY+"px",e+="";var a=Math.max(this.props.majorCharWidth,this.props.minorCharWidth);this.maxLabelSized;d++){var c=this.visibleItems[d];c.repositionY(e)}return s},s.prototype._calculateHeight=function(t){var e,i=this.visibleItems;this.resetSubgroups();var s=this;if(i.length){var n=i[0].top,r=i[0].top+i[0].height;if(o.forEach(i,function(t){n=Math.min(n,t.top),r=Math.max(r,t.top+t.height),void 0!==t.data.subgroup&&(s.subgroups[t.data.subgroup].height=Math.max(s.subgroups[t.data.subgroup].height,t.height),s.subgroups[t.data.subgroup].visible=!0)}),n>t.axis){var a=n-t.axis;r-=a,o.forEach(i,function(t){t.top-=a})}e=r+t.item.vertical/2}else e=t.axis+t.item.vertical;return e=Math.max(e,this.props.label.height)},s.prototype.show=function(){this.dom.label.parentNode||this.itemSet.dom.labelSet.appendChild(this.dom.label),this.dom.foreground.parentNode||this.itemSet.dom.foreground.appendChild(this.dom.foreground),this.dom.background.parentNode||this.itemSet.dom.background.appendChild(this.dom.background),this.dom.axis.parentNode||this.itemSet.dom.axis.appendChild(this.dom.axis)},s.prototype.hide=function(){var t=this.dom.label;t.parentNode&&t.parentNode.removeChild(t);var e=this.dom.foreground;e.parentNode&&e.parentNode.removeChild(e);var i=this.dom.background;i.parentNode&&i.parentNode.removeChild(i);var s=this.dom.axis;s.parentNode&&s.parentNode.removeChild(s)},s.prototype.add=function(t){if(this.items[t.id]=t,t.setParent(this),void 0!==t.data.subgroup&&(void 0===this.subgroups[t.data.subgroup]&&(this.subgroups[t.data.subgroup]={height:0,visible:!1,index:this.subgroupIndex,items:[]},this.subgroupIndex++),this.subgroups[t.data.subgroup].items.push(t)),this.orderSubgroups(),-1==this.visibleItems.indexOf(t)){var e=this.itemSet.body.range;this._checkIfVisible(t,this.visibleItems,e)}},s.prototype.orderSubgroups=function(){if(void 0!==this.subgroupOrderer){var t=[];if("string"==typeof this.subgroupOrderer){for(var e in this.subgroups)t.push({subgroup:e,sortField:this.subgroups[e].items[0].data[this.subgroupOrderer]});t.sort(function(t,e){return t.sortField-e.sortField})}else if("function"==typeof this.subgroupOrderer){for(var e in this.subgroups)t.push(this.subgroups[e].items[0].data);t.sort(this.subgroupOrderer)}if(t.length>0)for(var i=0;it?-1:l>=t?0:1 -};if(e.length>0)for(n=0;nl}),1==this.checkRangedItems)for(this.checkRangedItems=!1,n=0;nl})}for(n=0;n=0&&(n=e[r],!o(n));r--)void 0===s[n.id]&&(s[n.id]=!0,i.push(n));for(r=t+1;rs;s++){var n=this.visibleItems[s];n.repositionY(e)}return i},s.prototype.show=function(){this.dom.background.parentNode||this.itemSet.dom.background.appendChild(this.dom.background)},t.exports=s},function(t,e,i){function s(t,e){this.body=t,this.defaultOptions={type:null,orientation:"bottom",align:"auto",stack:!0,groupOrder:null,selectable:!0,editable:{updateTime:!1,updateGroup:!1,add:!1,remove:!1},onAdd:function(t,e){e(t)},onUpdate:function(t,e){e(t)},onMove:function(t,e){e(t)},onRemove:function(t,e){e(t)},onMoving:function(t,e){e(t)},margin:{item:{horizontal:10,vertical:10},axis:20},padding:5},this.options=n.extend({},this.defaultOptions),this.itemOptions={type:{start:"Date",end:"Date"}},this.conversion={toScreen:t.util.toScreen,toTime:t.util.toTime},this.dom={},this.props={},this.hammer=null;var i=this;this.itemsData=null,this.groupsData=null,this.itemListeners={add:function(t,e){i._onAdd(e.items)},update:function(t,e){i._onUpdate(e.items)},remove:function(t,e){i._onRemove(e.items)}},this.groupListeners={add:function(t,e){i._onAddGroups(e.items)},update:function(t,e){i._onUpdateGroups(e.items)},remove:function(t,e){i._onRemoveGroups(e.items)}},this.items={},this.groups={},this.groupIds=[],this.selection=[],this.stackDirty=!0,this.touchParams={},this._create(),this.setOptions(e)}var o=i(45),n=i(1),r=i(3),a=i(4),h=i(20),d=i(25),l=i(26),c=i(33),p=i(34),u=i(35),m=i(32),f="__ungrouped__",g="__background__";s.prototype=new h,s.types={background:m,box:c,range:u,point:p},s.prototype._create=function(){var t=document.createElement("div");t.className="itemset",t["timeline-itemset"]=this,this.dom.frame=t;var e=document.createElement("div");e.className="background",t.appendChild(e),this.dom.background=e;var i=document.createElement("div");i.className="foreground",t.appendChild(i),this.dom.foreground=i;var s=document.createElement("div");s.className="axis",this.dom.axis=s;var n=document.createElement("div");n.className="labelset",this.dom.labelSet=n,this._updateUngrouped();var r=new l(g,null,this);r.show(),this.groups[g]=r,this.hammer=o(this.body.dom.centerContainer,{preventDefault:!0}),this.hammer.on("touch",this._onTouch.bind(this)),this.hammer.on("dragstart",this._onDragStart.bind(this)),this.hammer.on("drag",this._onDrag.bind(this)),this.hammer.on("dragend",this._onDragEnd.bind(this)),this.hammer.on("tap",this._onSelectItem.bind(this)),this.hammer.on("hold",this._onMultiSelectItem.bind(this)),this.hammer.on("doubletap",this._onAddItem.bind(this)),this.show()},s.prototype.setOptions=function(t){if(t){var e=["type","align","orientation","padding","stack","selectable","groupOrder","dataAttributes","template","hide"];n.selectiveExtend(e,this.options,t),"margin"in t&&("number"==typeof t.margin?(this.options.margin.axis=t.margin,this.options.margin.item.horizontal=t.margin,this.options.margin.item.vertical=t.margin):"object"==typeof t.margin&&(n.selectiveExtend(["axis"],this.options.margin,t.margin),"item"in t.margin&&("number"==typeof t.margin.item?(this.options.margin.item.horizontal=t.margin.item,this.options.margin.item.vertical=t.margin.item):"object"==typeof t.margin.item&&n.selectiveExtend(["horizontal","vertical"],this.options.margin.item,t.margin.item)))),"editable"in t&&("boolean"==typeof t.editable?(this.options.editable.updateTime=t.editable,this.options.editable.updateGroup=t.editable,this.options.editable.add=t.editable,this.options.editable.remove=t.editable):"object"==typeof t.editable&&n.selectiveExtend(["updateTime","updateGroup","add","remove"],this.options.editable,t.editable));var i=function(e){var i=t[e];if(i){if(!(i instanceof Function))throw new Error("option "+e+" must be a function "+e+"(item, callback)");this.options[e]=i}}.bind(this);["onAdd","onUpdate","onRemove","onMove","onMoving"].forEach(i),this.markDirty()}},s.prototype.markDirty=function(){this.groupIds=[],this.stackDirty=!0},s.prototype.destroy=function(){this.hide(),this.setItems(null),this.setGroups(null),this.hammer=null,this.body=null,this.conversion=null},s.prototype.hide=function(){this.dom.frame.parentNode&&this.dom.frame.parentNode.removeChild(this.dom.frame),this.dom.axis.parentNode&&this.dom.axis.parentNode.removeChild(this.dom.axis),this.dom.labelSet.parentNode&&this.dom.labelSet.parentNode.removeChild(this.dom.labelSet)},s.prototype.show=function(){this.dom.frame.parentNode||this.body.dom.center.appendChild(this.dom.frame),this.dom.axis.parentNode||this.body.dom.backgroundVertical.appendChild(this.dom.axis),this.dom.labelSet.parentNode||this.body.dom.left.appendChild(this.dom.labelSet)},s.prototype.setSelection=function(t){var e,i,s,o;for(void 0==t&&(t=[]),Array.isArray(t)||(t=[t]),e=0,i=this.selection.length;i>e;e++)s=this.selection[e],o=this.items[s],o&&o.unselect();for(this.selection=[],e=0,i=t.length;i>e;e++)s=t[e],o=this.items[s],o&&(this.selection.push(s),o.select())},s.prototype.getSelection=function(){return this.selection.concat([])},s.prototype.getVisibleItems=function(){var t=this.body.range.getRange(),e=this.body.util.toScreen(t.start),i=this.body.util.toScreen(t.end),s=[];for(var o in this.groups)if(this.groups.hasOwnProperty(o))for(var n=this.groups[o],r=n.visibleItems,a=0;ae&&s.push(h.id)}return s},s.prototype._deselect=function(t){for(var e=this.selection,i=0,s=e.length;s>i;i++)if(e[i]==t){e.splice(i,1);break}},s.prototype.redraw=function(){var t=this.options.margin,e=this.body.range,i=n.option.asSize,s=this.options,o=s.orientation,r=!1,a=this.dom.frame,h=s.editable.updateTime||s.editable.updateGroup;this.props.top=this.body.domProps.top.height+this.body.domProps.border.top,this.props.left=this.body.domProps.left.width+this.body.domProps.border.left,a.className="itemset"+(h?" editable":""),r=this._orderGroups()||r;var d=e.end-e.start,l=d!=this.lastVisibleInterval||this.props.width!=this.props.lastWidth;l&&(this.stackDirty=!0),this.lastVisibleInterval=d,this.props.lastWidth=this.props.width;var c=this.stackDirty,p=this._firstGroup(),u={item:t.item,axis:t.axis},m={item:t.item,axis:t.item.vertical/2},f=0,v=t.axis+t.item.vertical;return this.groups[g].redraw(e,m,c),n.forEach(this.groups,function(t){var i=t==p?u:m,s=t.redraw(e,i,c);r=s||r,f+=t.height}),f=Math.max(f,v),this.stackDirty=!1,a.style.height=i(f),this.props.width=a.offsetWidth,this.props.height=f,this.dom.axis.style.top=i("top"==o?this.body.domProps.top.height+this.body.domProps.border.top:this.body.domProps.top.height+this.body.domProps.centerContainer.height),this.dom.axis.style.left="0",r=this._isResized()||r},s.prototype._firstGroup=function(){var t="top"==this.options.orientation?0:this.groupIds.length-1,e=this.groupIds[t],i=this.groups[e]||this.groups[f];return i||null},s.prototype._updateUngrouped=function(){{var t,e,i=this.groups[f];this.groups[g]}if(this.groupsData){if(i){i.hide(),delete this.groups[f];for(e in this.items)if(this.items.hasOwnProperty(e)){t=this.items[e],t.parent&&t.parent.remove(t);var s=this._getGroupId(t.data),o=this.groups[s];o&&o.add(t)||t.hide()}}}else if(!i){var n=null,r=null;i=new d(n,r,this),this.groups[f]=i;for(e in this.items)this.items.hasOwnProperty(e)&&(t=this.items[e],i.add(t));i.show()}},s.prototype.getLabelSet=function(){return this.dom.labelSet},s.prototype.setItems=function(t){var e,i=this,s=this.itemsData;if(t){if(!(t instanceof r||t instanceof a))throw new TypeError("Data must be an instance of DataSet or DataView");this.itemsData=t}else this.itemsData=null;if(s&&(n.forEach(this.itemListeners,function(t,e){s.off(e,t)}),e=s.getIds(),this._onRemove(e)),this.itemsData){var o=this.id;n.forEach(this.itemListeners,function(t,e){i.itemsData.on(e,t,o)}),e=this.itemsData.getIds(),this._onAdd(e),this._updateUngrouped()}},s.prototype.getItems=function(){return this.itemsData},s.prototype.setGroups=function(t){var e,i=this;if(this.groupsData&&(n.forEach(this.groupListeners,function(t,e){i.groupsData.unsubscribe(e,t)}),e=this.groupsData.getIds(),this.groupsData=null,this._onRemoveGroups(e)),t){if(!(t instanceof r||t instanceof a))throw new TypeError("Data must be an instance of DataSet or DataView");this.groupsData=t}else this.groupsData=null;if(this.groupsData){var s=this.id;n.forEach(this.groupListeners,function(t,e){i.groupsData.on(e,t,s)}),e=this.groupsData.getIds(),this._onAddGroups(e)}this._updateUngrouped(),this._order(),this.body.emitter.emit("change",{queue:!0})},s.prototype.getGroups=function(){return this.groupsData},s.prototype.removeItem=function(t){var e=this.itemsData.get(t),i=this.itemsData.getDataSet();e&&this.options.onRemove(e,function(e){e&&i.remove(t)})},s.prototype._getType=function(t){return t.type||this.options.type||(t.end?"range":"box")},s.prototype._getGroupId=function(t){var e=this._getType(t);return"background"==e&&void 0==t.group?g:this.groupsData?t.group:f},s.prototype._onUpdate=function(t){var e=this;t.forEach(function(t){var i=e.itemsData.get(t,e.itemOptions),o=e.items[t],n=e._getType(i),r=s.types[n];if(o&&(r&&o instanceof r?e._updateItem(o,i):(e._removeItem(o),o=null)),!o){if(!r)throw new TypeError("rangeoverflow"==n?'Item type "rangeoverflow" is deprecated. Use css styling instead: .vis.timeline .item.range .content {overflow: visible;}':'Unknown item type "'+n+'"');o=new r(i,e.conversion,e.options),o.id=t,e._addItem(o)}}),this._order(),this.stackDirty=!0,this.body.emitter.emit("change",{queue:!0})},s.prototype._onAdd=s.prototype._onUpdate,s.prototype._onRemove=function(t){var e=0,i=this;t.forEach(function(t){var s=i.items[t];s&&(e++,i._removeItem(s))}),e&&(this._order(),this.stackDirty=!0,this.body.emitter.emit("change",{queue:!0}))},s.prototype._order=function(){n.forEach(this.groups,function(t){t.order()})},s.prototype._onUpdateGroups=function(t){this._onAddGroups(t)},s.prototype._onAddGroups=function(t){var e=this;t.forEach(function(t){var i=e.groupsData.get(t),s=e.groups[t];if(s)s.setData(i);else{if(t==f||t==g)throw new Error("Illegal group id. "+t+" is a reserved id.");var o=Object.create(e.options);n.extend(o,{height:null}),s=new d(t,i,e),e.groups[t]=s;for(var r in e.items)if(e.items.hasOwnProperty(r)){var a=e.items[r];a.data.group==t&&s.add(a)}s.order(),s.show()}}),this.body.emitter.emit("change",{queue:!0})},s.prototype._onRemoveGroups=function(t){var e=this.groups;t.forEach(function(t){var i=e[t];i&&(i.hide(),delete e[t])}),this.markDirty(),this.body.emitter.emit("change",{queue:!0})},s.prototype._orderGroups=function(){if(this.groupsData){var t=this.groupsData.getIds({order:this.options.groupOrder}),e=!n.equalArray(t,this.groupIds);if(e){var i=this.groups;t.forEach(function(t){i[t].hide()}),t.forEach(function(t){i[t].show()}),this.groupIds=t}return e}return!1},s.prototype._addItem=function(t){this.items[t.id]=t;var e=this._getGroupId(t.data),i=this.groups[e];i&&i.add(t)},s.prototype._updateItem=function(t,e){var i=t.data.group;if(t.setData(e),i!=t.data.group){var s=this.groups[i];s&&s.remove(t);var o=this._getGroupId(t.data),n=this.groups[o];n&&n.add(t)}},s.prototype._removeItem=function(t){t.hide(),delete this.items[t.id];var e=this.selection.indexOf(t.id);-1!=e&&this.selection.splice(e,1),t.parent&&t.parent.remove(t)},s.prototype._constructByEndArray=function(t){for(var e=[],i=0;i0||o.length>0)&&this.body.emitter.emit("select",{items:a})}},s.prototype._onAddItem=function(t){if(this.options.selectable&&this.options.editable.add){var e=this,i=this.body.util.snap||null,o=s.itemFromTarget(t);if(o){var r=e.itemsData.get(o.id);this.options.onUpdate(r,function(t){t&&e.itemsData.getDataSet().update(t)})}else{var a=n.getAbsoluteLeft(this.dom.frame),h=t.gesture.center.pageX-a,d=this.body.util.toTime(h),l={start:i?i(d):d,content:"new item"};if("range"===this.options.type){var c=this.body.util.toTime(h+this.props.width/5);l.end=i?i(c):c}l[this.itemsData._fieldId]=n.randomUUID();var p=s.groupFromTarget(t);p&&(l.group=p.groupId),this.options.onAdd(l,function(t){t&&e.itemsData.getDataSet().add(t)})}}},s.prototype._onMultiSelectItem=function(t){if(this.options.selectable){var e,i=s.itemFromTarget(t);if(i){e=this.getSelection();var o=t.gesture.touches[0]&&t.gesture.touches[0].shiftKey||!1;if(o){e.push(i.id);var n=s._getItemRange(this.itemsData.get(e,this.itemOptions));e=[];for(var r in this.items)if(this.items.hasOwnProperty(r)){var a=this.items[r],h=a.data.start,d=void 0!==a.data.end?a.data.end:h;h>=n.min&&d<=n.max&&e.push(a.id)}}else{var l=e.indexOf(i.id);-1==l?e.push(i.id):e.splice(l,1)}this.setSelection(e),this.body.emitter.emit("select",{items:this.getSelection()})}}},s._getItemRange=function(t){var e=null,i=null;return t.forEach(function(t){(null==i||t.starte)&&(e=t.end):(null==e||t.start>e)&&(e=t.start)}),{min:i,max:e}},s.itemFromTarget=function(t){for(var e=t.target;e;){if(e.hasOwnProperty("timeline-item"))return e["timeline-item"];e=e.parentNode}return null},s.groupFromTarget=function(t){for(var e=t.target;e;){if(e.hasOwnProperty("timeline-group"))return e["timeline-group"];e=e.parentNode}return null},s.itemSetFromTarget=function(t){for(var e=t.target;e;){if(e.hasOwnProperty("timeline-itemset"))return e["timeline-itemset"];e=e.parentNode}return null},t.exports=s},function(t,e,i){function s(t,e,i,s){this.body=t,this.defaultOptions={enabled:!0,icons:!0,iconSize:20,iconSpacing:6,left:{visible:!0,position:"top-left"},right:{visible:!0,position:"top-left"}},this.side=i,this.options=o.extend({},this.defaultOptions),this.linegraphOptions=s,this.svgElements={},this.dom={},this.groups={},this.amountOfGroups=0,this._create(),this.setOptions(e)}var o=i(1),n=i(2),r=i(20);s.prototype=new r,s.prototype.clear=function(){this.groups={},this.amountOfGroups=0},s.prototype.addGroup=function(t,e){this.groups.hasOwnProperty(t)||(this.groups[t]=e),this.amountOfGroups+=1},s.prototype.updateGroup=function(t,e){this.groups[t]=e},s.prototype.removeGroup=function(t){this.groups.hasOwnProperty(t)&&(delete this.groups[t],this.amountOfGroups-=1)},s.prototype._create=function(){this.dom.frame=document.createElement("div"),this.dom.frame.className="legend",this.dom.frame.style.position="absolute",this.dom.frame.style.top="10px",this.dom.frame.style.display="block",this.dom.textArea=document.createElement("div"),this.dom.textArea.className="legendText",this.dom.textArea.style.position="relative",this.dom.textArea.style.top="0px",this.svg=document.createElementNS("http://www.w3.org/2000/svg","svg"),this.svg.style.position="absolute",this.svg.style.top="0px",this.svg.style.width=this.options.iconSize+5+"px",this.svg.style.height="100%",this.dom.frame.appendChild(this.svg),this.dom.frame.appendChild(this.dom.textArea)},s.prototype.hide=function(){this.dom.frame.parentNode&&this.dom.frame.parentNode.removeChild(this.dom.frame)},s.prototype.show=function(){this.dom.frame.parentNode||this.body.dom.center.appendChild(this.dom.frame)},s.prototype.setOptions=function(t){var e=["enabled","orientation","icons","left","right"];o.selectiveDeepExtend(e,this.options,t)},s.prototype.redraw=function(){var t=0;for(var e in this.groups)this.groups.hasOwnProperty(e)&&(1!=this.groups[e].visible||void 0!==this.linegraphOptions.visibility[e]&&1!=this.linegraphOptions.visibility[e]||t++);if(0==this.options[this.side].visible||0==this.amountOfGroups||0==this.options.enabled||0==t)this.hide();else{if(this.show(),"top-left"==this.options[this.side].position||"bottom-left"==this.options[this.side].position?(this.dom.frame.style.left="4px",this.dom.frame.style.textAlign="left",this.dom.textArea.style.textAlign="left",this.dom.textArea.style.left=this.options.iconSize+15+"px",this.dom.textArea.style.right="",this.svg.style.left="0px",this.svg.style.right=""):(this.dom.frame.style.right="4px",this.dom.frame.style.textAlign="right",this.dom.textArea.style.textAlign="right",this.dom.textArea.style.right=this.options.iconSize+15+"px",this.dom.textArea.style.left="",this.svg.style.right="0px",this.svg.style.left=""),"top-left"==this.options[this.side].position||"top-right"==this.options[this.side].position)this.dom.frame.style.top=4-Number(this.body.dom.center.style.top.replace("px",""))+"px",this.dom.frame.style.bottom="";else{var i=this.body.domProps.center.height-this.body.domProps.centerContainer.height;this.dom.frame.style.bottom=4+i+Number(this.body.dom.center.style.top.replace("px",""))+"px",this.dom.frame.style.top=""}0==this.options.icons?(this.dom.frame.style.width=this.dom.textArea.offsetWidth+10+"px",this.dom.textArea.style.right="",this.dom.textArea.style.left="",this.svg.style.width="0px"):(this.dom.frame.style.width=this.options.iconSize+15+this.dom.textArea.offsetWidth+10+"px",this.drawLegendIcons());var s="";for(var e in this.groups)this.groups.hasOwnProperty(e)&&(1!=this.groups[e].visible||void 0!==this.linegraphOptions.visibility[e]&&1!=this.linegraphOptions.visibility[e]||(s+=this.groups[e].content+"
"));this.dom.textArea.innerHTML=s,this.dom.textArea.style.lineHeight=.75*this.options.iconSize+this.options.iconSpacing+"px"}},s.prototype.drawLegendIcons=function(){if(this.dom.frame.parentNode){n.prepareElements(this.svgElements);var t=window.getComputedStyle(this.dom.frame).paddingTop,e=Number(t.replace("px","")),i=e,s=this.options.iconSize,o=.75*this.options.iconSize,r=e+.5*o+3;this.svg.style.width=s+5+e+"px";for(var a in this.groups)this.groups.hasOwnProperty(a)&&(1!=this.groups[a].visible||void 0!==this.linegraphOptions.visibility[a]&&1!=this.linegraphOptions.visibility[a]||(this.groups[a].drawIcon(i,r,this.svgElements,this.svg,s,o),r+=o+this.options.iconSpacing));n.cleanupElements(this.svgElements)}},t.exports=s},function(t,e,i){function s(t,e){this.id=o.randomUUID(),this.body=t,this.defaultOptions={yAxisOrientation:"left",defaultGroup:"default",sort:!0,sampling:!0,graphHeight:"400px",shaded:{enabled:!1,orientation:"bottom"},style:"line",barChart:{width:50,handleOverlap:"overlap",align:"center"},catmullRom:{enabled:!0,parametrization:"centripetal",alpha:.5},drawPoints:{enabled:!0,size:6,style:"square"},dataAxis:{showMinorLabels:!0,showMajorLabels:!0,icons:!1,width:"40px",visible:!0,alignZeros:!0,customRange:{left:{min:void 0,max:void 0},right:{min:void 0,max:void 0}}},legend:{enabled:!1,icons:!0,left:{visible:!0,position:"top-left"},right:{visible:!0,position:"top-right"}},groups:{visibility:{}}},this.options=o.extend({},this.defaultOptions),this.dom={},this.props={},this.hammer=null,this.groups={},this.abortedGraphUpdate=!1,this.autoSizeSVG=!1;var i=this;this.itemsData=null,this.groupsData=null,this.itemListeners={add:function(t,e){i._onAdd(e.items)},update:function(t,e){i._onUpdate(e.items)},remove:function(t,e){i._onRemove(e.items)}},this.groupListeners={add:function(t,e){i._onAddGroups(e.items)},update:function(t,e){i._onUpdateGroups(e.items)},remove:function(t,e){i._onRemoveGroups(e.items)}},this.items={},this.selection=[],this.lastStart=this.body.range.start,this.touchParams={},this.svgElements={},this.setOptions(e),this.groupsUsingDefaultStyles=[0],this.COUNTER=0,this.body.emitter.on("rangechanged",function(){i.lastStart=i.body.range.start,i.svg.style.left=o.option.asSize(-i.width),i.redraw.call(i,!0)}),this._create(),this.framework={svg:this.svg,svgElements:this.svgElements,options:this.options,groups:this.groups},this.body.emitter.emit("change")}var o=i(1),n=i(2),r=i(3),a=i(4),h=i(20),d=i(23),l=i(24),c=i(28),p=i(52),u="__ungrouped__";s.prototype=new h,s.prototype._create=function(){var t=document.createElement("div");t.className="LineGraph",this.dom.frame=t,this.svg=document.createElementNS("http://www.w3.org/2000/svg","svg"),this.svg.style.position="relative",this.svg.style.height=(""+this.options.graphHeight).replace("px","")+"px",this.svg.style.display="block",t.appendChild(this.svg),this.options.dataAxis.orientation="left",this.yAxisLeft=new d(this.body,this.options.dataAxis,this.svg,this.options.groups),this.options.dataAxis.orientation="right",this.yAxisRight=new d(this.body,this.options.dataAxis,this.svg,this.options.groups),delete this.options.dataAxis.orientation,this.legendLeft=new c(this.body,this.options.legend,"left",this.options.groups),this.legendRight=new c(this.body,this.options.legend,"right",this.options.groups),this.show()},s.prototype.setOptions=function(t){if(t){var e=["sampling","defaultGroup","graphHeight","yAxisOrientation","style","barChart","dataAxis","sort","groups"];void 0===t.graphHeight&&void 0!==t.height&&void 0!==this.body.domProps.centerContainer.height?this.autoSizeSVG=!0:void 0!==this.body.domProps.centerContainer.height&&void 0!==t.graphHeight&&parseInt((t.graphHeight+"").replace("px",""))0){var d=this.body.util.toGlobalTime(-this.body.domProps.root.width),l=this.body.util.toGlobalTime(2*this.body.domProps.root.width),c={};for(this._getRelevantData(a,c,d,l),this._applySampling(a,c),e=0;eu&&console.log("WARNING: there may be an infinite loop in the _updateGraph emitter cycle."),this.COUNTER=0,this.abortedGraphUpdate=!1,e=0;e0)for(r=0;rs){d.push(h);break}d.push(h)}}else for(a=0;ai&&h.x0)for(var s=0;s0){var n=1,r=o.length,a=this.body.util.toGlobalScreen(o[o.length-1].x)-this.body.util.toGlobalScreen(o[0].x),h=r/a;n=Math.min(Math.ceil(.2*r),Math.max(1,Math.round(h)));for(var d=[],l=0;r>l;l+=n)d.push(o[l]);e[t[s]]=d}}},s.prototype._getYRanges=function(t,e,i){var s,o,n,r,a=[],h=[];if(t.length>0){for(n=0;n0&&(o=this.groups[t[n]],"stack"==r.barChart.handleOverlap&&"bar"==r.style?"left"==r.yAxisOrientation?a=a.concat(o.getYRange(s)):h=h.concat(o.getYRange(s)):i[t[n]]=o.getYRange(s,t[n]));p.getStackedBarYRange(a,i,t,"__barchartLeft","left"),p.getStackedBarYRange(h,i,t,"__barchartRight","right")}},s.prototype._updateYAxis=function(t,e){var i,s,o=!1,n=!1,r=!1,a=1e9,h=1e9,d=-1e9,l=-1e9;if(t.length>0){for(var c=0;ci?i:a,d=s>d?s:d):(r=!0,h=h>i?i:h,l=s>l?s:l));1==n&&this.yAxisLeft.setRange(a,d),1==r&&this.yAxisRight.setRange(h,l)}return o=this._toggleAxisVisiblity(n,this.yAxisLeft)||o,o=this._toggleAxisVisiblity(r,this.yAxisRight)||o,1==r&&1==n?(this.yAxisLeft.drawIcons=!0,this.yAxisRight.drawIcons=!0):(this.yAxisLeft.drawIcons=!1,this.yAxisRight.drawIcons=!1),this.yAxisRight.master=!n,0==this.yAxisRight.master?(this.yAxisLeft.lineOffset=1==r?this.yAxisRight.width:0,o=this.yAxisLeft.redraw()||o,this.yAxisRight.stepPixelsForced=this.yAxisLeft.stepPixels,this.yAxisRight.zeroCrossing=this.yAxisLeft.zeroCrossing,o=this.yAxisRight.redraw()||o):o=this.yAxisRight.redraw()||o,-1!=t.indexOf("__barchartLeft")&&t.splice(t.indexOf("__barchartLeft"),1),-1!=t.indexOf("__barchartRight")&&t.splice(t.indexOf("__barchartRight"),1),o},s.prototype._toggleAxisVisiblity=function(t,e){var i=!1;return 0==t?e.dom.frame.parentNode&&0==e.hidden&&(e.hide(),i=!0):e.dom.frame.parentNode||1!=e.hidden||(e.show(),i=!0),i},s.prototype._convertXcoordinates=function(t){for(var e,i,s=[],o=this.body.util.toScreen,n=0;nc;){c++;var p=h.getCurrent(),u=this.body.util.toScreen(p),m=h.isMajor();this.options.showMinorLabels&&this._repaintMinorText(u,h.getLabelMinor(),t),m&&this.options.showMajorLabels?(u>0&&(void 0==l&&(l=u),this._repaintMajorText(u,h.getLabelMajor(),t)),this._repaintMajorLine(u,t)):this._repaintMinorLine(u,t),h.next()}if(this.options.showMajorLabels){var f=this.body.util.toTime(0),g=h.getLabelMajor(f),v=g.length*(this.props.majorCharWidth||10)+10;(void 0==l||l>v)&&this._repaintMajorText(0,g,t)}o.forEach(this.dom.redundant,function(t){for(;t.length;){var e=t.pop();e&&e.parentNode&&e.parentNode.removeChild(e)}})},s.prototype._repaintMinorText=function(t,e,i){var s=this.dom.redundant.minorTexts.shift();if(!s){var o=document.createTextNode("");s=document.createElement("div"),s.appendChild(o),s.className="text minor",this.dom.foreground.appendChild(s)}this.dom.minorTexts.push(s),s.childNodes[0].nodeValue=e,s.style.top="top"==i?this.props.majorLabelHeight+"px":"0",s.style.left=t+"px"},s.prototype._repaintMajorText=function(t,e,i){var s=this.dom.redundant.majorTexts.shift();if(!s){var o=document.createTextNode(e);s=document.createElement("div"),s.className="text major",s.appendChild(o),this.dom.foreground.appendChild(s)}this.dom.majorTexts.push(s),s.childNodes[0].nodeValue=e,s.style.top="top"==i?"0":this.props.minorLabelHeight+"px",s.style.left=t+"px"},s.prototype._repaintMinorLine=function(t,e){var i=this.dom.redundant.minorLines.shift();i||(i=document.createElement("div"),i.className="grid vertical minor",this.dom.background.appendChild(i)),this.dom.minorLines.push(i);var s=this.props;i.style.top="top"==e?s.majorLabelHeight+"px":this.body.domProps.top.height+"px",i.style.height=s.minorLineHeight+"px",i.style.left=t-s.minorLineWidth/2+"px"},s.prototype._repaintMajorLine=function(t,e){var i=this.dom.redundant.majorLines.shift();i||(i=document.createElement("DIV"),i.className="grid vertical major",this.dom.background.appendChild(i)),this.dom.majorLines.push(i);var s=this.props;i.style.top="top"==e?"0":this.body.domProps.top.height+"px",i.style.left=t-s.majorLineWidth/2+"px",i.style.height=s.majorLineHeight+"px"},s.prototype._calculateCharSize=function(){this.dom.measureCharMinor||(this.dom.measureCharMinor=document.createElement("DIV"),this.dom.measureCharMinor.className="text minor measure",this.dom.measureCharMinor.style.position="absolute",this.dom.measureCharMinor.appendChild(document.createTextNode("0")),this.dom.foreground.appendChild(this.dom.measureCharMinor)),this.props.minorCharHeight=this.dom.measureCharMinor.clientHeight,this.props.minorCharWidth=this.dom.measureCharMinor.clientWidth,this.dom.measureCharMajor||(this.dom.measureCharMajor=document.createElement("DIV"),this.dom.measureCharMajor.className="text major measure",this.dom.measureCharMajor.style.position="absolute",this.dom.measureCharMajor.appendChild(document.createTextNode("0")),this.dom.foreground.appendChild(this.dom.measureCharMajor)),this.props.majorCharHeight=this.dom.measureCharMajor.clientHeight,this.props.majorCharWidth=this.dom.measureCharMajor.clientWidth},s.prototype.snap=function(t){return this.step.snap(t)},t.exports=s},function(t,e,i){function s(t,e,i){this.id=null,this.parent=null,this.data=t,this.dom=null,this.conversion=e||{},this.options=i||{},this.selected=!1,this.displayed=!1,this.dirty=!0,this.top=null,this.left=null,this.width=null,this.height=null}var o=i(45),n=i(1);s.prototype.stack=!0,s.prototype.select=function(){this.selected=!0,this.dirty=!0,this.displayed&&this.redraw()},s.prototype.unselect=function(){this.selected=!1,this.dirty=!0,this.displayed&&this.redraw()},s.prototype.setData=function(t){this.data=t,this.dirty=!0,this.displayed&&this.redraw()},s.prototype.setParent=function(t){this.displayed?(this.hide(),this.parent=t,this.parent&&this.show()):this.parent=t},s.prototype.isVisible=function(){return!1},s.prototype.show=function(){return!1},s.prototype.hide=function(){return!1},s.prototype.redraw=function(){},s.prototype.repositionX=function(){},s.prototype.repositionY=function(){},s.prototype._repaintDeleteButton=function(t){if(this.selected&&this.options.editable.remove&&!this.dom.deleteButton){var e=this,i=document.createElement("div");i.className="delete",i.title="Delete this item",o(i,{preventDefault:!0}).on("tap",function(t){e.parent.removeFromDataSet(e),t.stopPropagation()}),t.appendChild(i),this.dom.deleteButton=i}else!this.selected&&this.dom.deleteButton&&(this.dom.deleteButton.parentNode&&this.dom.deleteButton.parentNode.removeChild(this.dom.deleteButton),this.dom.deleteButton=null)},s.prototype._updateContents=function(t){var e;if(this.options.template){var i=this.parent.itemSet.itemsData.get(this.id);e=this.options.template(i)}else e=this.data.content;if(e!==this.content){if(e instanceof Element)t.innerHTML="",t.appendChild(e);else if(void 0!=e)t.innerHTML=e;else if("background"!=this.data.type||void 0!==this.data.content)throw new Error('Property "content" missing in item '+this.id);this.content=e}},s.prototype._updateTitle=function(t){null!=this.data.title?t.title=this.data.title||"":t.removeAttribute("title")},s.prototype._updateDataAttributes=function(t){if(this.options.dataAttributes&&this.options.dataAttributes.length>0){var e=[];if(Array.isArray(this.options.dataAttributes))e=this.options.dataAttributes;else{if("all"!=this.options.dataAttributes)return;e=Object.keys(this.data)}for(var i=0;it.start},s.prototype.redraw=function(){var t=this.dom;if(t||(this.dom={},t=this.dom,t.box=document.createElement("div"),t.content=document.createElement("div"),t.content.className="content",t.box.appendChild(t.content),this.dirty=!0),!this.parent)throw new Error("Cannot redraw item: no parent attached");if(!t.box.parentNode){var e=this.parent.dom.background;if(!e)throw new Error("Cannot redraw item: parent has no background container element");e.appendChild(t.box)}if(this.displayed=!0,this.dirty){this._updateContents(this.dom.content),this._updateTitle(this.dom.content),this._updateDataAttributes(this.dom.content),this._updateStyle(this.dom.box);var i=(this.data.className?" "+this.data.className:"")+(this.selected?" selected":"");t.box.className=this.baseClassName+i,this.overflow="hidden"!==window.getComputedStyle(t.content).overflow,this.props.content.width=this.dom.content.offsetWidth,this.height=0,this.dirty=!1}},s.prototype.show=r.prototype.show,s.prototype.hide=r.prototype.hide,s.prototype.repositionX=r.prototype.repositionX,s.prototype.repositionY=function(t){var e="top"===this.options.orientation;this.dom.content.style.top=e?"":"0",this.dom.content.style.bottom=e?"0":"";var i;if(void 0!==this.data.subgroup){var s=this.data.subgroup,o=this.parent.subgroups,r=o[s].index;if(1==e){i=this.parent.subgroups[s].height+t.item.vertical,i+=0==r?t.axis-.5*t.item.vertical:0;var a=this.parent.top;for(var h in o)o.hasOwnProperty(h)&&1==o[h].visible&&o[h].indexr&&(a+=o[h].height+t.item.vertical);i=this.parent.subgroups[s].height+t.item.vertical,this.dom.box.style.top=a+"px",this.dom.box.style.bottom=""}}else this.parent instanceof n?(i=Math.max(this.parent.height,this.parent.itemSet.body.domProps.center.height,this.parent.itemSet.body.domProps.centerContainer.height),this.dom.box.style.top=e?"0":"",this.dom.box.style.bottom=e?"":"0"):(i=this.parent.height,this.dom.box.style.top=this.parent.top+"px",this.dom.box.style.bottom="");this.dom.box.style.height=i+"px"},t.exports=s},function(t,e,i){function s(t,e,i){if(this.props={dot:{width:0,height:0},line:{width:0,height:0}},t&&void 0==t.start)throw new Error('Property "start" missing in item '+t);o.call(this,t,e,i)}{var o=i(31);i(1)}s.prototype=new o(null,null,null),s.prototype.isVisible=function(t){var e=(t.end-t.start)/4;return this.data.start>t.start-e&&this.data.startt.start-e&&this.data.startt.start},s.prototype.redraw=function(){var t=this.dom;if(t||(this.dom={},t=this.dom,t.box=document.createElement("div"),t.content=document.createElement("div"),t.content.className="content",t.box.appendChild(t.content),t.box["timeline-item"]=this,this.dirty=!0),!this.parent)throw new Error("Cannot redraw item: no parent attached");if(!t.box.parentNode){var e=this.parent.dom.foreground;if(!e)throw new Error("Cannot redraw item: parent has no foreground container element");e.appendChild(t.box)}if(this.displayed=!0,this.dirty){this._updateContents(this.dom.content),this._updateTitle(this.dom.box),this._updateDataAttributes(this.dom.box),this._updateStyle(this.dom.box);var i=(this.data.className?" "+this.data.className:"")+(this.selected?" selected":"");t.box.className=this.baseClassName+i,this.overflow="hidden"!==window.getComputedStyle(t.content).overflow,this.dom.content.style.maxWidth="none",this.props.content.width=this.dom.content.offsetWidth,this.height=this.dom.box.offsetHeight,this.dom.content.style.maxWidth="",this.dirty=!1}this._repaintDeleteButton(t.box),this._repaintDragLeft(),this._repaintDragRight()},s.prototype.show=function(){this.displayed||this.redraw()},s.prototype.hide=function(){if(this.displayed){var t=this.dom.box;t.parentNode&&t.parentNode.removeChild(t),this.top=null,this.left=null,this.displayed=!1}},s.prototype.repositionX=function(){var t,e,i=this.parent.width,s=this.conversion.toScreen(this.data.start),o=this.conversion.toScreen(this.data.end);-i>s&&(s=-i),o>2*i&&(o=2*i);var n=Math.max(o-s,1);switch(this.overflow?(this.left=s,this.width=n+this.props.content.width,e=this.props.content.width):(this.left=s,this.width=n,e=Math.min(o-s-2*this.options.padding,this.props.content.width)),this.dom.box.style.left=this.left+"px",this.dom.box.style.width=n+"px",this.options.align){case"left":this.dom.content.style.left="0";break;case"right":this.dom.content.style.left=Math.max(n-e-2*this.options.padding,0)+"px";break;case"center":this.dom.content.style.left=Math.max((n-e-2*this.options.padding)/2,0)+"px";break;default:t=this.overflow?o>0?Math.max(-s,0):-e:0>s?Math.min(-s,o-s-e-2*this.options.padding):0,this.dom.content.style.left=t+"px"}},s.prototype.repositionY=function(){var t=this.options.orientation,e=this.dom.box;e.style.top="top"==t?this.top+"px":this.parent.height-this.top-this.height+"px"},s.prototype._repaintDragLeft=function(){if(this.selected&&this.options.editable.updateTime&&!this.dom.dragLeft){var t=document.createElement("div");t.className="drag-left",t.dragLeftItem=this,o(t,{preventDefault:!0}).on("drag",function(){}),this.dom.box.appendChild(t),this.dom.dragLeft=t}else!this.selected&&this.dom.dragLeft&&(this.dom.dragLeft.parentNode&&this.dom.dragLeft.parentNode.removeChild(this.dom.dragLeft),this.dom.dragLeft=null)},s.prototype._repaintDragRight=function(){if(this.selected&&this.options.editable.updateTime&&!this.dom.dragRight){var t=document.createElement("div");t.className="drag-right",t.dragRightItem=this,o(t,{preventDefault:!0}).on("drag",function(){}),this.dom.box.appendChild(t),this.dom.dragRight=t}else!this.selected&&this.dom.dragRight&&(this.dom.dragRight.parentNode&&this.dom.dragRight.parentNode.removeChild(this.dom.dragRight),this.dom.dragRight=null)},t.exports=s},function(t,e,i){function s(t,e,i){if(!(this instanceof s))throw new SyntaxError("Constructor must be called with the new operator");this._initializeMixinLoaders(),this.containerElement=t,this.renderRefreshRate=60,this.renderTimestep=1e3/this.renderRefreshRate,this.renderTime=.5*this.renderTimestep,this.maxPhysicsTicksPerRender=3,this.physicsDiscreteStepsize=.5,this.initializing=!0,this.triggerFunctions={add:null,edit:null,editEdge:null,connect:null,del:null},this.defaultOptions={nodes:{mass:1,radiusMin:10,radiusMax:30,radius:10,shape:"ellipse",image:void 0,widthMin:16,widthMax:64,fontColor:"black",fontSize:14,fontFace:"verdana",fontFill:void 0,level:-1,color:{border:"#2B7CE9",background:"#97C2FC",highlight:{border:"#2B7CE9",background:"#D2E5FF"},hover:{border:"#2B7CE9",background:"#D2E5FF"}},borderColor:"#2B7CE9",backgroundColor:"#97C2FC",highlightColor:"#D2E5FF",group:void 0,borderWidth:1,borderWidthSelected:void 0},edges:{widthMin:1,widthMax:15,width:1,widthSelectionMultiplier:2,hoverWidth:1.5,style:"line",color:{color:"#848484",highlight:"#848484",hover:"#848484"},fontColor:"#343434",fontSize:14,fontFace:"arial",fontFill:"white",arrowScaleFactor:1,dash:{length:10,gap:5,altLength:void 0},inheritColor:"from"},configurePhysics:!1,physics:{barnesHut:{enabled:!0,theta:1/.6,gravitationalConstant:-2e3,centralGravity:.3,springLength:95,springConstant:.04,damping:.09},repulsion:{centralGravity:0,springLength:200,springConstant:.05,nodeDistance:100,damping:.09},hierarchicalRepulsion:{enabled:!1,centralGravity:0,springLength:100,springConstant:.01,nodeDistance:150,damping:.09},damping:null,centralGravity:null,springLength:null,springConstant:null},clustering:{enabled:!1,initialMaxNodes:100,clusterThreshold:500,reduceToNodes:300,chainThreshold:.4,clusterEdgeThreshold:20,sectorThreshold:100,screenSizeThreshold:.2,fontSizeMultiplier:4,maxFontSize:1e3,forceAmplification:.1,distanceAmplification:.1,edgeGrowth:20,nodeScaling:{width:1,height:1,radius:1},maxNodeSizeIncrements:600,activeAreaBoxSize:80,clusterLevelDifference:2},navigation:{enabled:!1},keyboard:{enabled:!1,speed:{x:10,y:10,zoom:.02}},dataManipulation:{enabled:!1,initiallyVisible:!1},hierarchicalLayout:{enabled:!1,levelSeparation:150,nodeSpacing:100,direction:"UD",layout:"hubsize"},freezeForStabilization:!1,smoothCurves:{enabled:!0,dynamic:!0,type:"continuous",roundness:.5},maxVelocity:30,minVelocity:.1,stabilize:!0,stabilizationIterations:1e3,locale:"en",locales:_,tooltip:{delay:300,fontColor:"black",fontSize:14,fontFace:"verdana",color:{border:"#666",background:"#FFFFC6"}},dragNetwork:!0,dragNodes:!0,zoomable:!0,hover:!1,hideEdgesOnDrag:!1,hideNodesOnDrag:!1,width:"100%",height:"100%",selectable:!0},this.constants=a.extend({},this.defaultOptions),this.pixelRatio=1,this.hoverObj={nodes:{},edges:{}},this.controlNodesActive=!1,this.navigationHammers={existing:[],_new:[]},this.animationSpeed=1/this.renderRefreshRate,this.animationEasingFunction="easeInOutQuint",this.easingTime=0,this.sourceScale=0,this.targetScale=0,this.sourceTranslation=0,this.targetTranslation=0,this.lockedOnNodeId=null,this.lockedOnNodeOffset=null,this.touchTime=0;var o=this;this.groups=new u,this.images=new m,this.images.setOnloadCallback(function(){o._redraw()}),this.xIncrement=0,this.yIncrement=0,this.zoomIncrement=0,this._loadPhysicsSystem(),this._create(),this._loadSectorSystem(),this._loadClusterSystem(),this._loadSelectionSystem(),this._loadHierarchySystem(),this._setTranslation(this.frame.clientWidth/2,this.frame.clientHeight/2),this._setScale(1),this.setOptions(i),this.freezeSimulation=!1,this.cachedFunctions={},this.startedStabilization=!1,this.stabilized=!1,this.stabilizationIterations=null,this.draggingNodes=!1,this.calculationNodes={},this.calculationNodeIndices=[],this.nodeIndices=[],this.nodes={},this.edges={},this.canvasTopLeft={x:0,y:0},this.canvasBottomRight={x:0,y:0},this.pointerPosition={x:0,y:0},this.areaCenter={},this.scale=1,this.previousScale=this.scale,this.nodesData=null,this.edgesData=null,this.nodesListeners={add:function(t,e){o._addNodes(e.items),o.start()},update:function(t,e){o._updateNodes(e.items,e.data),o.start()},remove:function(t,e){o._removeNodes(e.items),o.start()}},this.edgesListeners={add:function(t,e){o._addEdges(e.items),o.start()},update:function(t,e){o._updateEdges(e.items),o.start()},remove:function(t,e){o._removeEdges(e.items),o.start()}},this.moving=!0,this.timer=void 0,this.setData(e,this.constants.clustering.enabled||this.constants.hierarchicalLayout.enabled),this.initializing=!1,1==this.constants.hierarchicalLayout.enabled?this._setupHierarchicalLayout():0==this.constants.stabilize&&this.zoomExtent(void 0,!0,this.constants.clustering.enabled),this.constants.clustering.enabled&&this.startWithClustering()}var o=i(56),n=i(45),r=i(57),a=i(1),h=i(47),d=i(3),l=i(4),c=i(42),p=i(43),u=i(38),m=i(39),f=i(40),g=i(37),v=i(41),y=i(54),b=i(55),_=i(49);i(50),o(s.prototype),s.prototype._getScriptPath=function(){for(var t=document.getElementsByTagName("script"),e=0;et.x&&(s=t.x),ot.y&&(e=t.y),i=this.constants.clustering.initialMaxNodes?49.07548/(n+142.05338)+91444e-8:12.662/(n+7.4147)+.0964822:1==this.constants.clustering.enabled&&n>=this.constants.clustering.initialMaxNodes?77.5271985/(n+187.266146)+476710517e-13:30.5062972/(n+19.93597763)+.08413486;var r=Math.min(this.frame.canvas.clientWidth/600,this.frame.canvas.clientHeight/600);s*=r}else{var a=1.1*Math.abs(o.maxX-o.minX),h=1.1*Math.abs(o.maxY-o.minY),d=this.frame.canvas.clientWidth/a,l=this.frame.canvas.clientHeight/h;s=l>=d?d:l}s>1&&(s=1);var c=this._findCenter(o);if(0==i){var p={position:c,scale:s,animation:t};this.moveTo(p),this.moving=!0,this.start()}else c.x*=s,c.y*=s,c.x-=.5*this.frame.canvas.clientWidth,c.y-=.5*this.frame.canvas.clientHeight,this._setScale(s),this._setTranslation(-c.x,-c.y)},s.prototype._updateNodeIndexList=function(){this._clearNodeIndexList();for(var t in this.nodes)this.nodes.hasOwnProperty(t)&&this.nodeIndices.push(t)},s.prototype.setData=function(t,e){if(void 0===e&&(e=!1),this.initializing=!0,t&&t.dot&&(t.nodes||t.edges))throw new SyntaxError('Data must contain either parameter "dot" or parameter pair "nodes" and "edges", but not both.');if(this.setOptions(t&&t.options),t&&t.dot){if(t&&t.dot){var i=c.DOTToGraph(t.dot);return void this.setData(i)}}else if(t&&t.gephi){if(t&&t.gephi){var s=p.parseGephi(t.gephi);return void this.setData(s)}}else this._setNodes(t&&t.nodes),this._setEdges(t&&t.edges);this._putDataInSector(),0==e&&(1==this.constants.hierarchicalLayout.enabled?(this._resetLevels(),this._setupHierarchicalLayout()):this.constants.stabilize&&this._stabilize(),this.start()),this.initializing=!1},s.prototype.setOptions=function(t){if(t){var e,i=["nodes","edges","smoothCurves","hierarchicalLayout","clustering","navigation","keyboard","dataManipulation","onAdd","onEdit","onEditEdge","onConnect","onDelete","clickToUse"];if(a.selectiveNotDeepExtend(i,this.constants,t),a.selectiveNotDeepExtend(["color"],this.constants.nodes,t.nodes),a.selectiveNotDeepExtend(["color","length"],this.constants.edges,t.edges),t.physics&&(a.mergeOptions(this.constants.physics,t.physics,"barnesHut"),a.mergeOptions(this.constants.physics,t.physics,"repulsion"),t.physics.hierarchicalRepulsion)){this.constants.hierarchicalLayout.enabled=!0,this.constants.physics.hierarchicalRepulsion.enabled=!0,this.constants.physics.barnesHut.enabled=!1; -for(e in t.physics.hierarchicalRepulsion)t.physics.hierarchicalRepulsion.hasOwnProperty(e)&&(this.constants.physics.hierarchicalRepulsion[e]=t.physics.hierarchicalRepulsion[e])}if(t.onAdd&&(this.triggerFunctions.add=t.onAdd),t.onEdit&&(this.triggerFunctions.edit=t.onEdit),t.onEditEdge&&(this.triggerFunctions.editEdge=t.onEditEdge),t.onConnect&&(this.triggerFunctions.connect=t.onConnect),t.onDelete&&(this.triggerFunctions.del=t.onDelete),a.mergeOptions(this.constants,t,"smoothCurves"),a.mergeOptions(this.constants,t,"hierarchicalLayout"),a.mergeOptions(this.constants,t,"clustering"),a.mergeOptions(this.constants,t,"navigation"),a.mergeOptions(this.constants,t,"keyboard"),a.mergeOptions(this.constants,t,"dataManipulation"),t.dataManipulation&&(this.editMode=this.constants.dataManipulation.initiallyVisible),t.edges&&(void 0!==t.edges.color&&(a.isString(t.edges.color)?(this.constants.edges.color={},this.constants.edges.color.color=t.edges.color,this.constants.edges.color.highlight=t.edges.color,this.constants.edges.color.hover=t.edges.color):(void 0!==t.edges.color.color&&(this.constants.edges.color.color=t.edges.color.color),void 0!==t.edges.color.highlight&&(this.constants.edges.color.highlight=t.edges.color.highlight),void 0!==t.edges.color.hover&&(this.constants.edges.color.hover=t.edges.color.hover))),t.edges.fontColor||void 0!==t.edges.color&&(a.isString(t.edges.color)?this.constants.edges.fontColor=t.edges.color:void 0!==t.edges.color.color&&(this.constants.edges.fontColor=t.edges.color.color))),t.nodes&&t.nodes.color){var s=a.parseColor(t.nodes.color);this.constants.nodes.color.background=s.background,this.constants.nodes.color.border=s.border,this.constants.nodes.color.highlight.background=s.highlight.background,this.constants.nodes.color.highlight.border=s.highlight.border,this.constants.nodes.color.hover.background=s.hover.background,this.constants.nodes.color.hover.border=s.hover.border}if(t.groups)for(var o in t.groups)if(t.groups.hasOwnProperty(o)){var n=t.groups[o];this.groups.add(o,n)}if(t.tooltip){for(e in t.tooltip)t.tooltip.hasOwnProperty(e)&&(this.constants.tooltip[e]=t.tooltip[e]);t.tooltip.color&&(this.constants.tooltip.color=a.parseColor(t.tooltip.color))}if("clickToUse"in t&&(t.clickToUse?(this.activator=new b(this.frame),this.activator.on("change",this._createKeyBinds.bind(this))):this.activator&&(this.activator.destroy(),delete this.activator)),t.labels)throw new Error('Option "labels" is deprecated. Use options "locale" and "locales" instead.')}this._loadPhysicsSystem(),this._loadNavigationControls(),this._loadManipulationSystem(),this._configureSmoothCurves(),this._createKeyBinds(),this.setSize(this.constants.width,this.constants.height),this.moving=!0,this.start()},s.prototype._create=function(){for(;this.containerElement.hasChildNodes();)this.containerElement.removeChild(this.containerElement.firstChild);if(this.frame=document.createElement("div"),this.frame.className="vis network-frame",this.frame.style.position="relative",this.frame.style.overflow="hidden",this.frame.canvas=document.createElement("canvas"),this.frame.canvas.style.position="relative",this.frame.appendChild(this.frame.canvas),this.frame.canvas.getContext){var t=this.frame.canvas.getContext("2d");this.pixelRatio=(window.devicePixelRatio||1)/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1),this.frame.canvas.getContext("2d").setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}else{var e=document.createElement("DIV");e.style.color="red",e.style.fontWeight="bold",e.style.padding="10px",e.innerHTML="Error: your browser does not support HTML canvas",this.frame.canvas.appendChild(e)}var i=this;this.drag={},this.pinch={},this.hammer=n(this.frame.canvas,{prevent_default:!0}),this.hammer.on("tap",i._onTap.bind(i)),this.hammer.on("doubletap",i._onDoubleTap.bind(i)),this.hammer.on("hold",i._onHold.bind(i)),this.hammer.on("pinch",i._onPinch.bind(i)),this.hammer.on("touch",i._onTouch.bind(i)),this.hammer.on("dragstart",i._onDragStart.bind(i)),this.hammer.on("drag",i._onDrag.bind(i)),this.hammer.on("dragend",i._onDragEnd.bind(i)),this.hammer.on("mousewheel",i._onMouseWheel.bind(i)),this.hammer.on("DOMMouseScroll",i._onMouseWheel.bind(i)),this.hammer.on("mousemove",i._onMouseMoveTitle.bind(i)),this.hammerFrame=n(this.frame,{prevent_default:!0}),this.hammerFrame.on("release",i._onRelease.bind(i)),this.containerElement.appendChild(this.frame)},s.prototype._createKeyBinds=function(){var t=this;void 0!==this.keycharm&&this.keycharm.destroy(),this.keycharm=r(),this.keycharm.reset(),this.constants.keyboard.enabled&&this.isActive()&&(this.keycharm.bind("up",this._moveUp.bind(t),"keydown"),this.keycharm.bind("up",this._yStopMoving.bind(t),"keyup"),this.keycharm.bind("down",this._moveDown.bind(t),"keydown"),this.keycharm.bind("down",this._yStopMoving.bind(t),"keyup"),this.keycharm.bind("left",this._moveLeft.bind(t),"keydown"),this.keycharm.bind("left",this._xStopMoving.bind(t),"keyup"),this.keycharm.bind("right",this._moveRight.bind(t),"keydown"),this.keycharm.bind("right",this._xStopMoving.bind(t),"keyup"),this.keycharm.bind("=",this._zoomIn.bind(t),"keydown"),this.keycharm.bind("=",this._stopZoom.bind(t),"keyup"),this.keycharm.bind("num+",this._zoomIn.bind(t),"keydown"),this.keycharm.bind("num+",this._stopZoom.bind(t),"keyup"),this.keycharm.bind("num-",this._zoomOut.bind(t),"keydown"),this.keycharm.bind("num-",this._stopZoom.bind(t),"keyup"),this.keycharm.bind("-",this._zoomOut.bind(t),"keydown"),this.keycharm.bind("-",this._stopZoom.bind(t),"keyup"),this.keycharm.bind("[",this._zoomIn.bind(t),"keydown"),this.keycharm.bind("[",this._stopZoom.bind(t),"keyup"),this.keycharm.bind("]",this._zoomOut.bind(t),"keydown"),this.keycharm.bind("]",this._stopZoom.bind(t),"keyup"),this.keycharm.bind("pageup",this._zoomIn.bind(t),"keydown"),this.keycharm.bind("pageup",this._stopZoom.bind(t),"keyup"),this.keycharm.bind("pagedown",this._zoomOut.bind(t),"keydown"),this.keycharm.bind("pagedown",this._stopZoom.bind(t),"keyup")),1==this.constants.dataManipulation.enabled&&(this.keycharm.bind("esc",this._createManipulatorBar.bind(t)),this.keycharm.bind("delete",this._deleteSelected.bind(t)))},s.prototype._getPointer=function(t){return{x:t.pageX-a.getAbsoluteLeft(this.frame.canvas),y:t.pageY-a.getAbsoluteTop(this.frame.canvas)}},s.prototype._onTouch=function(t){(new Date).valueOf()-this.touchTime>100&&(this.drag.pointer=this._getPointer(t.gesture.center),this.drag.pinched=!1,this.pinch.scale=this._getScale(),this.touchTime=(new Date).valueOf(),this._handleTouch(this.drag.pointer))},s.prototype._onDragStart=function(){this._handleDragStart()},s.prototype._handleDragStart=function(){var t=this.drag,e=this._getNodeAt(t.pointer);if(t.dragging=!0,t.selection=[],t.translation=this._getTranslation(),t.nodeId=null,this.draggingNodes=!1,null!=e&&1==this.constants.dragNodes){this.draggingNodes=!0,t.nodeId=e.id,e.isSelected()||this._selectObject(e,!1),this.emit("dragStart",{nodeIds:this.getSelection().nodes});for(var i in this.selectionObj.nodes)if(this.selectionObj.nodes.hasOwnProperty(i)){var s=this.selectionObj.nodes[i],o={id:s.id,node:s,x:s.x,y:s.y,xFixed:s.xFixed,yFixed:s.yFixed};s.xFixed=!0,s.yFixed=!0,t.selection.push(o)}}},s.prototype._onDrag=function(t){this._handleOnDrag(t)},s.prototype._handleOnDrag=function(t){if(!this.drag.pinched){this.releaseNode();var e=this._getPointer(t.gesture.center),i=this,s=this.drag,o=s.selection;if(o&&o.length&&1==this.constants.dragNodes){var n=e.x-s.pointer.x,r=e.y-s.pointer.y;o.forEach(function(t){var e=t.node;t.xFixed||(e.x=i._XconvertDOMtoCanvas(i._XconvertCanvasToDOM(t.x)+n)),t.yFixed||(e.y=i._YconvertDOMtoCanvas(i._YconvertCanvasToDOM(t.y)+r))}),this.moving||(this.moving=!0,this.start())}else if(1==this.constants.dragNetwork){var a=e.x-this.drag.pointer.x,h=e.y-this.drag.pointer.y;this._setTranslation(this.drag.translation.x+a,this.drag.translation.y+h),this._redraw()}}},s.prototype._onDragEnd=function(t){this._handleDragEnd(t)},s.prototype._handleDragEnd=function(){this.drag.dragging=!1;var t=this.drag.selection;t&&t.length?(t.forEach(function(t){t.node.xFixed=t.xFixed,t.node.yFixed=t.yFixed}),this.moving=!0,this.start()):this._redraw(),0==this.draggingNodes?this.emit("dragEnd",{nodeIds:[]}):this.emit("dragEnd",{nodeIds:this.getSelection().nodes})},s.prototype._onTap=function(t){var e=this._getPointer(t.gesture.center);this.pointerPosition=e,this._handleTap(e)},s.prototype._onDoubleTap=function(t){var e=this._getPointer(t.gesture.center);this._handleDoubleTap(e)},s.prototype._onHold=function(t){var e=this._getPointer(t.gesture.center);this.pointerPosition=e,this._handleOnHold(e)},s.prototype._onRelease=function(t){var e=this._getPointer(t.gesture.center);this._handleOnRelease(e)},s.prototype._onPinch=function(t){var e=this._getPointer(t.gesture.center);this.drag.pinched=!0,"scale"in this.pinch||(this.pinch.scale=1);var i=this.pinch.scale*t.gesture.scale;this._zoom(i,e)},s.prototype._zoom=function(t,e){if(1==this.constants.zoomable){var i=this._getScale();1e-5>t&&(t=1e-5),t>10&&(t=10);var s=null;void 0!==this.drag&&1==this.drag.dragging&&(s=this.DOMtoCanvas(this.drag.pointer));var o=this._getTranslation(),n=t/i,r=(1-n)*e.x+o.x*n,a=(1-n)*e.y+o.y*n;if(this.areaCenter={x:this._XconvertDOMtoCanvas(e.x),y:this._YconvertDOMtoCanvas(e.y)},this._setScale(t),this._setTranslation(r,a),this.updateClustersDefault(),null!=s){var h=this.canvasToDOM(s);this.drag.pointer.x=h.x,this.drag.pointer.y=h.y}return this._redraw(),t>i?this.emit("zoom",{direction:"+"}):this.emit("zoom",{direction:"-"}),t}},s.prototype._onMouseWheel=function(t){var e=0;if(t.wheelDelta?e=t.wheelDelta/120:t.detail&&(e=-t.detail/3),e){var i=this._getScale(),s=e/10;0>e&&(s/=1-s),i*=1+s;var o=h.fakeGesture(this,t),n=this._getPointer(o.center);this._zoom(i,n)}t.preventDefault()},s.prototype._onMouseMoveTitle=function(t){var e=h.fakeGesture(this,t),i=this._getPointer(e.center);this.popupObj&&this._checkHidePopup(i);var s=this,o=function(){s._checkShowPopup(i)};if(this.popupTimer&&clearInterval(this.popupTimer),this.drag.dragging||(this.popupTimer=setTimeout(o,this.constants.tooltip.delay)),1==this.constants.hover){for(var n in this.hoverObj.edges)this.hoverObj.edges.hasOwnProperty(n)&&(this.hoverObj.edges[n].hover=!1,delete this.hoverObj.edges[n]);var r=this._getNodeAt(i);null==r&&(r=this._getEdgeAt(i)),null!=r&&this._hoverObject(r);for(var a in this.hoverObj.nodes)this.hoverObj.nodes.hasOwnProperty(a)&&(r instanceof f&&r.id!=a||r instanceof g||null==r)&&(this._blurObject(this.hoverObj.nodes[a]),delete this.hoverObj.nodes[a]);this.redraw()}},s.prototype._checkShowPopup=function(t){var e,i={left:this._XconvertDOMtoCanvas(t.x),top:this._YconvertDOMtoCanvas(t.y),right:this._XconvertDOMtoCanvas(t.x),bottom:this._YconvertDOMtoCanvas(t.y)},s=this.popupObj;if(void 0==this.popupObj){var o=this.nodes;for(e in o)if(o.hasOwnProperty(e)){var n=o[e];if(void 0!==n.getTitle()&&n.isOverlappingWith(i)){this.popupObj=n;break}}}if(void 0===this.popupObj){var r=this.edges;for(e in r)if(r.hasOwnProperty(e)){var a=r[e];if(a.connected&&void 0!==a.getTitle()&&a.isOverlappingWith(i)){this.popupObj=a;break}}}if(this.popupObj){if(this.popupObj!=s){var h=this;h.popup||(h.popup=new v(h.frame,h.constants.tooltip)),h.popup.setPosition(t.x-3,t.y-3),h.popup.setText(h.popupObj.getTitle()),h.popup.show()}}else this.popup&&this.popup.hide()},s.prototype._checkHidePopup=function(t){this.popupObj&&this._getNodeAt(t)||(this.popupObj=void 0,this.popup&&this.popup.hide())},s.prototype.setSize=function(t,e){var i=!1,s=this.frame.canvas.width,o=this.frame.canvas.height;t!=this.constants.width||e!=this.constants.height||this.frame.style.width!=t||this.frame.style.height!=e?(this.frame.style.width=t,this.frame.style.height=e,this.frame.canvas.style.width="100%",this.frame.canvas.style.height="100%",this.frame.canvas.width=this.frame.canvas.clientWidth*this.pixelRatio,this.frame.canvas.height=this.frame.canvas.clientHeight*this.pixelRatio,this.constants.width=t,this.constants.height=e,i=!0):(this.frame.canvas.width!=this.frame.canvas.clientWidth*this.pixelRatio&&(this.frame.canvas.width=this.frame.canvas.clientWidth*this.pixelRatio,i=!0),this.frame.canvas.height!=this.frame.canvas.clientHeight*this.pixelRatio&&(this.frame.canvas.height=this.frame.canvas.clientHeight*this.pixelRatio,i=!0)),1==i&&this.emit("resize",{width:this.frame.canvas.width*this.pixelRatio,height:this.frame.canvas.height*this.pixelRatio,oldWidth:s*this.pixelRatio,oldHeight:o*this.pixelRatio})},s.prototype._setNodes=function(t){var e=this.nodesData;if(t instanceof d||t instanceof l)this.nodesData=t;else if(Array.isArray(t))this.nodesData=new d,this.nodesData.add(t);else{if(t)throw new TypeError("Array or DataSet expected");this.nodesData=new d}if(e&&a.forEach(this.nodesListeners,function(t,i){e.off(i,t)}),this.nodes={},this.nodesData){var i=this;a.forEach(this.nodesListeners,function(t,e){i.nodesData.on(e,t)});var s=this.nodesData.getIds();this._addNodes(s)}this._updateSelection()},s.prototype._addNodes=function(t){for(var e,i=0,s=t.length;s>i;i++){e=t[i];var o=this.nodesData.get(e),n=new f(o,this.images,this.groups,this.constants);if(this.nodes[e]=n,!(0!=n.xFixed&&0!=n.yFixed||null!==n.x&&null!==n.y)){var r=1*t.length+10,a=2*Math.PI*Math.random();0==n.xFixed&&(n.x=r*Math.cos(a)),0==n.yFixed&&(n.y=r*Math.sin(a))}this.moving=!0}this._updateNodeIndexList(),1==this.constants.hierarchicalLayout.enabled&&0==this.initializing&&(this._resetLevels(),this._setupHierarchicalLayout()),this._updateCalculationNodes(),this._reconnectEdges(),this._updateValueRange(this.nodes),this.updateLabels()},s.prototype._updateNodes=function(t,e){for(var i=this.nodes,s=0,o=t.length;o>s;s++){var n=t[s],r=i[n],a=e[s];r?r.setProperties(a,this.constants):(r=new f(properties,this.images,this.groups,this.constants),i[n]=r)}this.moving=!0,1==this.constants.hierarchicalLayout.enabled&&0==this.initializing&&(this._resetLevels(),this._setupHierarchicalLayout()),this._updateNodeIndexList(),this._updateValueRange(i)},s.prototype._removeNodes=function(t){for(var e=this.nodes,i=0,s=t.length;s>i;i++){var o=t[i];delete e[o]}this._updateNodeIndexList(),1==this.constants.hierarchicalLayout.enabled&&0==this.initializing&&(this._resetLevels(),this._setupHierarchicalLayout()),this._updateCalculationNodes(),this._reconnectEdges(),this._updateSelection(),this._updateValueRange(e)},s.prototype._setEdges=function(t){var e=this.edgesData;if(t instanceof d||t instanceof l)this.edgesData=t;else if(Array.isArray(t))this.edgesData=new d,this.edgesData.add(t);else{if(t)throw new TypeError("Array or DataSet expected");this.edgesData=new d}if(e&&a.forEach(this.edgesListeners,function(t,i){e.off(i,t)}),this.edges={},this.edgesData){var i=this;a.forEach(this.edgesListeners,function(t,e){i.edgesData.on(e,t)});var s=this.edgesData.getIds();this._addEdges(s)}this._reconnectEdges()},s.prototype._addEdges=function(t){for(var e=this.edges,i=this.edgesData,s=0,o=t.length;o>s;s++){var n=t[s],r=e[n];r&&r.disconnect();var a=i.get(n,{showInternalIds:!0});e[n]=new g(a,this,this.constants)}this.moving=!0,this._updateValueRange(e),this._createBezierNodes(),this._updateCalculationNodes(),1==this.constants.hierarchicalLayout.enabled&&0==this.initializing&&(this._resetLevels(),this._setupHierarchicalLayout())},s.prototype._updateEdges=function(t){for(var e=this.edges,i=this.edgesData,s=0,o=t.length;o>s;s++){var n=t[s],r=i.get(n),a=e[n];a?(a.disconnect(),a.setProperties(r,this.constants),a.connect()):(a=new g(r,this,this.constants),this.edges[n]=a)}this._createBezierNodes(),1==this.constants.hierarchicalLayout.enabled&&0==this.initializing&&(this._resetLevels(),this._setupHierarchicalLayout()),this.moving=!0,this._updateValueRange(e)},s.prototype._removeEdges=function(t){for(var e=this.edges,i=0,s=t.length;s>i;i++){var o=t[i],n=e[o];n&&(null!=n.via&&delete this.sectors.support.nodes[n.via.id],n.disconnect(),delete e[o])}this.moving=!0,this._updateValueRange(e),1==this.constants.hierarchicalLayout.enabled&&0==this.initializing&&(this._resetLevels(),this._setupHierarchicalLayout()),this._updateCalculationNodes()},s.prototype._reconnectEdges=function(){var t,e=this.nodes,i=this.edges;for(t in e)e.hasOwnProperty(t)&&(e[t].edges=[],e[t].dynamicEdges=[]);for(t in i)if(i.hasOwnProperty(t)){var s=i[t];s.from=null,s.to=null,s.connect()}},s.prototype._updateValueRange=function(t){var e,i=void 0,s=void 0;for(e in t)if(t.hasOwnProperty(e)){var o=t[e].getValue();void 0!==o&&(i=void 0===i?o:Math.min(o,i),s=void 0===s?o:Math.max(o,s))}if(void 0!==i&&void 0!==s)for(e in t)t.hasOwnProperty(e)&&t[e].setValueRange(i,s)},s.prototype.redraw=function(){this.setSize(this.constants.width,this.constants.height),this._redraw()},s.prototype._redraw=function(){var t=this.frame.canvas.getContext("2d");t.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var e=this.frame.canvas.width*this.pixelRatio,i=this.frame.canvas.height*this.pixelRatio;t.clearRect(0,0,e,i),t.save(),t.translate(this.translation.x,this.translation.y),t.scale(this.scale,this.scale),this.canvasTopLeft={x:this._XconvertDOMtoCanvas(0),y:this._YconvertDOMtoCanvas(0)},this.canvasBottomRight={x:this._XconvertDOMtoCanvas(this.frame.canvas.clientWidth*this.pixelRatio),y:this._YconvertDOMtoCanvas(this.frame.canvas.clientHeight*this.pixelRatio)},this._doInAllSectors("_drawAllSectorNodes",t),(0==this.drag.dragging||void 0===this.drag.dragging||0==this.constants.hideEdgesOnDrag)&&this._doInAllSectors("_drawEdges",t),(0==this.drag.dragging||void 0===this.drag.dragging||0==this.constants.hideNodesOnDrag)&&this._doInAllSectors("_drawNodes",t,!1),1==this.controlNodesActive&&this._doInAllSectors("_drawControlNodes",t),t.restore()},s.prototype._setTranslation=function(t,e){void 0===this.translation&&(this.translation={x:0,y:0}),void 0!==t&&(this.translation.x=t),void 0!==e&&(this.translation.y=e),this.emit("viewChanged")},s.prototype._getTranslation=function(){return{x:this.translation.x,y:this.translation.y}},s.prototype._setScale=function(t){this.scale=t},s.prototype._getScale=function(){return this.scale},s.prototype._XconvertDOMtoCanvas=function(t){return(t-this.translation.x)/this.scale},s.prototype._XconvertCanvasToDOM=function(t){return t*this.scale+this.translation.x},s.prototype._YconvertDOMtoCanvas=function(t){return(t-this.translation.y)/this.scale},s.prototype._YconvertCanvasToDOM=function(t){return t*this.scale+this.translation.y},s.prototype.canvasToDOM=function(t){return{x:this._XconvertCanvasToDOM(t.x),y:this._YconvertCanvasToDOM(t.y)}},s.prototype.DOMtoCanvas=function(t){return{x:this._XconvertDOMtoCanvas(t.x),y:this._YconvertDOMtoCanvas(t.y)}},s.prototype._drawNodes=function(t,e){void 0===e&&(e=!1);var i=this.nodes,s=[];for(var o in i)i.hasOwnProperty(o)&&(i[o].setScaleAndPos(this.scale,this.canvasTopLeft,this.canvasBottomRight),i[o].isSelected()?s.push(o):(i[o].inArea()||e)&&i[o].draw(t));for(var n=0,r=s.length;r>n;n++)(i[s[n]].inArea()||e)&&i[s[n]].draw(t)},s.prototype._drawEdges=function(t){var e=this.edges;for(var i in e)if(e.hasOwnProperty(i)){var s=e[i];s.setScale(this.scale),s.connected&&e[i].draw(t)}},s.prototype._drawControlNodes=function(t){var e=this.edges;for(var i in e)e.hasOwnProperty(i)&&e[i]._drawControlNodes(t)},s.prototype._stabilize=function(){1==this.constants.freezeForStabilization&&this._freezeDefinedNodes();for(var t=0;this.moving&&t0)for(t in i)i.hasOwnProperty(t)&&(i[t].discreteStepLimited(e,this.constants.maxVelocity),s=!0);else for(t in i)i.hasOwnProperty(t)&&(i[t].discreteStep(e),s=!0);if(1==s){var o=this.constants.minVelocity/Math.max(this.scale,.05);return o>.5*this.constants.maxVelocity?!0:this._isMoving(o)}return!1},s.prototype._physicsTick=function(){if(!this.freezeSimulation&&1==this.moving){var t=!1,e=!1;this._doInAllActiveSectors("_initializeForceCalculation");var i=this._doInAllActiveSectors("_discreteStepNodes");1==this.constants.smoothCurves.enabled&&1==this.constants.smoothCurves.dynamic&&(e=this._doInSupportSector("_discreteStepNodes"));for(var s=0;s0){var i=this,s={iterations:i.stabilizationIterations};i.stabilizationIterations=0,i.startedStabilization=!1,setTimeout(function(){i.emit("stabilized",s)},0)}},s.prototype._handleNavigation=function(){if(0!=this.xIncrement||0!=this.yIncrement){var t=this._getTranslation();this._setTranslation(t.x+this.xIncrement,t.y+this.yIncrement)}if(0!=this.zoomIncrement){var e={x:this.frame.canvas.clientWidth/2,y:this.frame.canvas.clientHeight/2};this._zoom(this.scale*(1+this.zoomIncrement),e)}},s.prototype.toggleFreeze=function(){0==this.freezeSimulation?this.freezeSimulation=!0:(this.freezeSimulation=!1,this.start())},s.prototype._configureSmoothCurves=function(t){if(void 0===t&&(t=!0),1==this.constants.smoothCurves.enabled&&1==this.constants.smoothCurves.dynamic){this._createBezierNodes();for(var e in this.sectors.support.nodes)this.sectors.support.nodes.hasOwnProperty(e)&&void 0===this.edges[this.sectors.support.nodes[e].parentEdgeId]&&delete this.sectors.support.nodes[e]}else{this.sectors.support.nodes={};for(var i in this.edges)this.edges.hasOwnProperty(i)&&(this.edges[i].via=null)}this._updateCalculationNodes(),t||(this.moving=!0,this.start())},s.prototype._createBezierNodes=function(){if(1==this.constants.smoothCurves.enabled&&1==this.constants.smoothCurves.dynamic)for(var t in this.edges)if(this.edges.hasOwnProperty(t)){var e=this.edges[t];if(null==e.via){var i="edgeId:".concat(e.id);this.sectors.support.nodes[i]=new f({id:i,mass:1,shape:"circle",image:"",internalMultiplier:1},{},{},this.constants),e.via=this.sectors.support.nodes[i],e.via.parentEdgeId=e.id,e.positionBezierNode()}}},s.prototype._initializeMixinLoaders=function(){for(var t in y)y.hasOwnProperty(t)&&(s.prototype[t]=y[t])},s.prototype.storePosition=function(){console.log("storePosition is depricated: use .storePositions() from now on."),this.storePositions()},s.prototype.storePositions=function(){var t=[];for(var e in this.nodes)if(this.nodes.hasOwnProperty(e)){var i=this.nodes[e],s=!this.nodes.xFixed,o=!this.nodes.yFixed;(this.nodesData._data[e].x!=Math.round(i.x)||this.nodesData._data[e].y!=Math.round(i.y))&&t.push({id:e,x:Math.round(i.x),y:Math.round(i.y),allowedToMoveX:s,allowedToMoveY:o})}this.nodesData.update(t)},s.prototype.getPositions=function(t){var e={};if(void 0!==t){if(1==Array.isArray(t)){for(var i=0;i=1&&(this.easingTime=0,this._redraw=null!=this.lockedOnNodeId?this._lockedRedraw:this._classicRedraw,this.emit("animationFinished"))},s.prototype._classicRedraw=function(){},s.prototype.isActive=function(){return!this.activator||this.activator.active},s.prototype.setScale=function(){return this._setScale()},s.prototype.getScale=function(){return this._getScale()},s.prototype.getCenterCoordinates=function(){return this.DOMtoCanvas({x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight})},t.exports=s},function(t,e,i){function s(t,e,i){if(!e)throw"No network provided";var s=["edges","physics"],n=o.selectiveBridgeObject(s,i);this.options=n.edges,this.physics=n.physics,this.options.smoothCurves=i.smoothCurves,this.network=e,this.id=void 0,this.fromId=void 0,this.toId=void 0,this.title=void 0,this.widthSelected=this.options.width*this.options.widthSelectionMultiplier,this.value=void 0,this.selected=!1,this.hover=!1,this.labelDimensions={top:0,left:0,width:0,height:0,yLine:0},this.dirtyLabel=!0,this.from=null,this.to=null,this.via=null,this.fromBackup=null,this.toBackup=null,this.originalFromId=[],this.originalToId=[],this.connected=!1,this.widthFixed=!1,this.lengthFixed=!1,this.setProperties(t),this.controlNodesEnabled=!1,this.controlNodes={from:null,to:null,positions:{}},this.connectedNode=null}var o=i(1),n=i(40);s.prototype.setProperties=function(t){if(t){var e=["style","fontSize","fontFace","fontColor","fontFill","width","widthSelectionMultiplier","hoverWidth","arrowScaleFactor","dash","inheritColor"];switch(o.selectiveDeepExtend(e,this.options,t),void 0!==t.from&&(this.fromId=t.from),void 0!==t.to&&(this.toId=t.to),void 0!==t.id&&(this.id=t.id),void 0!==t.label&&(this.label=t.label,this.dirtyLabel=!0),void 0!==t.title&&(this.title=t.title),void 0!==t.value&&(this.value=t.value),void 0!==t.length&&(this.physics.springLength=t.length),void 0!==t.color&&(this.options.inheritColor=!1,o.isString(t.color)?(this.options.color.color=t.color,this.options.color.highlight=t.color):(void 0!==t.color.color&&(this.options.color.color=t.color.color),void 0!==t.color.highlight&&(this.options.color.highlight=t.color.highlight),void 0!==t.color.hover&&(this.options.color.hover=t.color.hover))),this.connect(),this.widthFixed=this.widthFixed||void 0!==t.width,this.lengthFixed=this.lengthFixed||void 0!==t.length,this.widthSelected=this.options.width*this.options.widthSelectionMultiplier,this.options.style){case"line":this.draw=this._drawLine;break;case"arrow":this.draw=this._drawArrow;break;case"arrow-center":this.draw=this._drawArrowCenter;break;case"dash-line":this.draw=this._drawDashLine;break;default:this.draw=this._drawLine}}},s.prototype.connect=function(){this.disconnect(),this.from=this.network.nodes[this.fromId]||null,this.to=this.network.nodes[this.toId]||null,this.connected=this.from&&this.to,this.connected?(this.from.attachEdge(this),this.to.attachEdge(this)):(this.from&&this.from.detachEdge(this),this.to&&this.to.detachEdge(this))},s.prototype.disconnect=function(){this.from&&(this.from.detachEdge(this),this.from=null),this.to&&(this.to.detachEdge(this),this.to=null),this.connected=!1},s.prototype.getTitle=function(){return"function"==typeof this.title?this.title():this.title},s.prototype.getValue=function(){return this.value},s.prototype.setValueRange=function(t,e){if(!this.widthFixed&&void 0!==this.value){var i=(this.options.widthMax-this.options.widthMin)/(e-t);this.options.width=(this.value-t)*i+this.options.widthMin,this.widthSelected=this.options.width*this.options.widthSelectionMultiplier}},s.prototype.draw=function(){throw"Method draw not initialized in edge"},s.prototype.isOverlappingWith=function(t){if(this.connected){var e=10,i=this.from.x,s=this.from.y,o=this.to.x,n=this.to.y,r=t.left,a=t.top,h=this._getDistanceToEdge(i,s,o,n,r,a);return e>h}return!1},s.prototype._getColor=function(){var t=this.options.color;return"to"==this.options.inheritColor?t={highlight:this.to.options.color.highlight.border,hover:this.to.options.color.hover.border,color:this.to.options.color.border}:("from"==this.options.inheritColor||1==this.options.inheritColor)&&(t={highlight:this.from.options.color.highlight.border,hover:this.from.options.color.hover.border,color:this.from.options.color.border}),1==this.selected?t.highlight:1==this.hover?t.hover:t.color -},s.prototype._drawLine=function(t){if(t.strokeStyle=this._getColor(),t.lineWidth=this._getLineWidth(),this.from!=this.to){var e,i=this._line(t);if(this.label){if(1==this.options.smoothCurves.enabled&&null!=i){var s=.5*(.5*(this.from.x+i.x)+.5*(this.to.x+i.x)),o=.5*(.5*(this.from.y+i.y)+.5*(this.to.y+i.y));e={x:s,y:o}}else e=this._pointOnLine(.5);this._label(t,this.label,e.x,e.y)}}else{var n,r,a=this.physics.springLength/4,h=this.from;h.width||h.resize(t),h.width>h.height?(n=h.x+h.width/2,r=h.y-a):(n=h.x+a,r=h.y-h.height/2),this._circle(t,n,r,a),e=this._pointOnCircle(n,r,a,.5),this._label(t,this.label,e.x,e.y)}},s.prototype._getLineWidth=function(){return 1==this.selected?Math.max(Math.min(this.widthSelected,this.options.widthMax),.3*this.networkScaleInv):1==this.hover?Math.max(Math.min(this.options.hoverWidth,this.options.widthMax),.3*this.networkScaleInv):Math.max(this.options.width,.3*this.networkScaleInv)},s.prototype._getViaCoordinates=function(){var t=null,e=null,i=this.options.smoothCurves.roundness,s=this.options.smoothCurves.type,o=Math.abs(this.from.x-this.to.x),n=Math.abs(this.from.y-this.to.y);return"discrete"==s||"diagonalCross"==s?Math.abs(this.from.x-this.to.x)this.to.y?this.from.xthis.to.x&&(t=this.from.x-i*n,e=this.from.y-i*n):this.from.ythis.to.x&&(t=this.from.x-i*n,e=this.from.y+i*n)),"discrete"==s&&(t=i*n>o?this.from.x:t)):Math.abs(this.from.x-this.to.x)>Math.abs(this.from.y-this.to.y)&&(this.from.y>this.to.y?this.from.xthis.to.x&&(t=this.from.x-i*o,e=this.from.y-i*o):this.from.ythis.to.x&&(t=this.from.x-i*o,e=this.from.y+i*o)),"discrete"==s&&(e=i*o>n?this.from.y:e)):"straightCross"==s?Math.abs(this.from.x-this.to.x)Math.abs(this.from.y-this.to.y)&&(t=this.from.xthis.to.y?this.from.xthis.to.x&&(t=this.from.x-i*n,e=this.from.y-i*n,t=this.to.x>t?this.to.x:t):this.from.ythis.to.x&&(t=this.from.x-i*n,e=this.from.y+i*n,t=this.to.x>t?this.to.x:t)):Math.abs(this.from.x-this.to.x)>Math.abs(this.from.y-this.to.y)&&(this.from.y>this.to.y?this.from.xe?this.to.y:e):this.from.x>this.to.x&&(t=this.from.x-i*o,e=this.from.y-i*o,e=this.to.y>e?this.to.y:e):this.from.ythis.to.x&&(t=this.from.x-i*o,e=this.from.y+i*o,e=this.to.yd;d++){var l=t.measureText(n[d]).width;h=l>h?l:h}var c=this.options.fontSize*r,p=i-h/2,u=s-c/2;this.labelDimensions={top:u,left:p,width:h,height:c,yLine:o}}void 0!==this.options.fontFill&&null!==this.options.fontFill&&"none"!==this.options.fontFill&&(t.fillStyle=this.options.fontFill,t.fillRect(this.labelDimensions.left,this.labelDimensions.top,this.labelDimensions.width,this.labelDimensions.height)),t.fillStyle=this.options.fontColor||"black",t.textAlign="center",t.textBaseline="middle",o=this.labelDimensions.yLine;for(var d=0;r>d;d++)t.fillText(n[d],i,o),o+=a}},s.prototype._drawDashLine=function(t){t.strokeStyle=this._getColor(),t.lineWidth=this._getLineWidth();var e=null;if(void 0!==t.mozDash||void 0!==t.setLineDash){var i=[0];i=void 0!==this.options.dash.length&&void 0!==this.options.dash.gap?[this.options.dash.length,this.options.dash.gap]:[5,5],"undefined"!=typeof t.setLineDash?(t.setLineDash(i),t.lineDashOffset=0):(t.mozDash=i,t.mozDashOffset=0),e=this._line(t),"undefined"!=typeof t.setLineDash?(t.setLineDash([0]),t.lineDashOffset=0):(t.mozDash=[0],t.mozDashOffset=0)}else t.beginPath(),t.lineCap="round",void 0!==this.options.dash.altLength?t.dashedLine(this.from.x,this.from.y,this.to.x,this.to.y,[this.options.dash.length,this.options.dash.gap,this.options.dash.altLength,this.options.dash.gap]):void 0!==this.options.dash.length&&void 0!==this.options.dash.gap?t.dashedLine(this.from.x,this.from.y,this.to.x,this.to.y,[this.options.dash.length,this.options.dash.gap]):(t.moveTo(this.from.x,this.from.y),t.lineTo(this.to.x,this.to.y)),t.stroke();if(this.label){var s;if(1==this.options.smoothCurves.enabled&&null!=e){var o=.5*(.5*(this.from.x+e.x)+.5*(this.to.x+e.x)),n=.5*(.5*(this.from.y+e.y)+.5*(this.to.y+e.y));s={x:o,y:n}}else s=this._pointOnLine(.5);this._label(t,this.label,s.x,s.y)}},s.prototype._pointOnLine=function(t){return{x:(1-t)*this.from.x+t*this.to.x,y:(1-t)*this.from.y+t*this.to.y}},s.prototype._pointOnCircle=function(t,e,i,s){var o=2*(s-3/8)*Math.PI;return{x:t+i*Math.cos(o),y:e-i*Math.sin(o)}},s.prototype._drawArrowCenter=function(t){var e;if(t.strokeStyle=this._getColor(),t.fillStyle=t.strokeStyle,t.lineWidth=this._getLineWidth(),this.from!=this.to){var i=this._line(t),s=Math.atan2(this.to.y-this.from.y,this.to.x-this.from.x),o=(10+5*this.options.width)*this.options.arrowScaleFactor;if(1==this.options.smoothCurves.enabled&&null!=i){var n=.5*(.5*(this.from.x+i.x)+.5*(this.to.x+i.x)),r=.5*(.5*(this.from.y+i.y)+.5*(this.to.y+i.y));e={x:n,y:r}}else e=this._pointOnLine(.5);t.arrow(e.x,e.y,s,o),t.fill(),t.stroke(),this.label&&this._label(t,this.label,e.x,e.y)}else{var a,h,d=.25*Math.max(100,this.physics.springLength),l=this.from;l.width||l.resize(t),l.width>l.height?(a=l.x+.5*l.width,h=l.y-d):(a=l.x+d,h=l.y-.5*l.height),this._circle(t,a,h,d);var s=.2*Math.PI,o=(10+5*this.options.width)*this.options.arrowScaleFactor;e=this._pointOnCircle(a,h,d,.5),t.arrow(e.x,e.y,s,o),t.fill(),t.stroke(),this.label&&(e=this._pointOnCircle(a,h,d,.5),this._label(t,this.label,e.x,e.y))}},s.prototype._drawArrow=function(t){t.strokeStyle=this._getColor(),t.fillStyle=t.strokeStyle,t.lineWidth=this._getLineWidth();var e,i;if(this.from!=this.to){e=Math.atan2(this.to.y-this.from.y,this.to.x-this.from.x);var s,o=this.to.x-this.from.x,n=this.to.y-this.from.y,r=Math.sqrt(o*o+n*n),a=this.from.distanceToBorder(t,e+Math.PI),h=(r-a)/r,d=h*this.from.x+(1-h)*this.to.x,l=h*this.from.y+(1-h)*this.to.y;1==this.options.smoothCurves.dynamic&&1==this.options.smoothCurves.enabled?s=this.via:1==this.options.smoothCurves.enabled&&(s=this._getViaCoordinates()),1==this.options.smoothCurves.enabled&&null!=s.x&&(e=Math.atan2(this.to.y-s.y,this.to.x-s.x),o=this.to.x-s.x,n=this.to.y-s.y,r=Math.sqrt(o*o+n*n));var c,p,u=this.to.distanceToBorder(t,e),m=(r-u)/r;if(1==this.options.smoothCurves.enabled&&null!=s.x?(c=(1-m)*s.x+m*this.to.x,p=(1-m)*s.y+m*this.to.y):(c=(1-m)*this.from.x+m*this.to.x,p=(1-m)*this.from.y+m*this.to.y),t.beginPath(),t.moveTo(d,l),1==this.options.smoothCurves.enabled&&null!=s.x?t.quadraticCurveTo(s.x,s.y,c,p):t.lineTo(c,p),t.stroke(),i=(10+5*this.options.width)*this.options.arrowScaleFactor,t.arrow(c,p,e,i),t.fill(),t.stroke(),this.label){var f;if(1==this.options.smoothCurves.enabled&&null!=s){var g=.5*(.5*(this.from.x+s.x)+.5*(this.to.x+s.x)),v=.5*(.5*(this.from.y+s.y)+.5*(this.to.y+s.y));f={x:g,y:v}}else f=this._pointOnLine(.5);this._label(t,this.label,f.x,f.y)}}else{var y,b,_,x=this.from,w=.25*Math.max(100,this.physics.springLength);x.width||x.resize(t),x.width>x.height?(y=x.x+.5*x.width,b=x.y-w,_={x:y,y:x.y,angle:.9*Math.PI}):(y=x.x+w,b=x.y-.5*x.height,_={x:x.x,y:b,angle:.6*Math.PI}),t.beginPath(),t.arc(y,b,w,0,2*Math.PI,!1),t.stroke();var i=(10+5*this.options.width)*this.options.arrowScaleFactor;t.arrow(_.x,_.y,_.angle,i),t.fill(),t.stroke(),this.label&&(f=this._pointOnCircle(y,b,w,.5),this._label(t,this.label,f.x,f.y))}},s.prototype._getDistanceToEdge=function(t,e,i,s,o,n){var r=0;if(this.from!=this.to)if(1==this.options.smoothCurves.enabled){var a,h;if(1==this.options.smoothCurves.enabled&&1==this.options.smoothCurves.dynamic)a=this.via.x,h=this.via.y;else{var d=this._getViaCoordinates();a=d.x,h=d.y}var l,c,p,u,m,f,g,v=1e9;for(c=0;10>c;c++)p=.1*c,u=Math.pow(1-p,2)*t+2*p*(1-p)*a+Math.pow(p,2)*i,m=Math.pow(1-p,2)*e+2*p*(1-p)*h+Math.pow(p,2)*s,c>0&&(l=this._getDistanceToLine(f,g,u,m,o,n),v=v>l?l:v),f=u,g=m;r=v}else r=this._getDistanceToLine(t,e,i,s,o,n);else{var u,m,y,b,_=.25*this.physics.springLength,x=this.from;x.width>x.height?(u=x.x+.5*x.width,m=x.y-_):(u=x.x+_,m=x.y-.5*x.height),y=u-o,b=m-n,r=Math.abs(Math.sqrt(y*y+b*b)-_)}return this.labelDimensions.lefto&&this.labelDimensions.topn?0:r},s.prototype._getDistanceToLine=function(t,e,i,s,o,n){var r=i-t,a=s-e,h=r*r+a*a,d=((o-t)*r+(n-e)*a)/h;d>1?d=1:0>d&&(d=0);var l=t+d*r,c=e+d*a,p=l-o,u=c-n;return Math.sqrt(p*p+u*u)},s.prototype.setScale=function(t){this.networkScaleInv=1/t},s.prototype.select=function(){this.selected=!0},s.prototype.unselect=function(){this.selected=!1},s.prototype.positionBezierNode=function(){null!==this.via&&null!==this.from&&null!==this.to&&(this.via.x=.5*(this.from.x+this.to.x),this.via.y=.5*(this.from.y+this.to.y))},s.prototype._drawControlNodes=function(t){if(1==this.controlNodesEnabled){if(null===this.controlNodes.from&&null===this.controlNodes.to){var e="edgeIdFrom:".concat(this.id),i="edgeIdTo:".concat(this.id),s={nodes:{group:"",radius:8},physics:{damping:0},clustering:{maxNodeSizeIncrements:0,nodeScaling:{width:0,height:0,radius:0}}};this.controlNodes.from=new n({id:e,shape:"dot",color:{background:"#ff4e00",border:"#3c3c3c",highlight:{background:"#07f968"}}},{},{},s),this.controlNodes.to=new n({id:i,shape:"dot",color:{background:"#ff4e00",border:"#3c3c3c",highlight:{background:"#07f968"}}},{},{},s)}0==this.controlNodes.from.selected&&0==this.controlNodes.to.selected&&(this.controlNodes.positions=this.getControlNodePositions(t),this.controlNodes.from.x=this.controlNodes.positions.from.x,this.controlNodes.from.y=this.controlNodes.positions.from.y,this.controlNodes.to.x=this.controlNodes.positions.to.x,this.controlNodes.to.y=this.controlNodes.positions.to.y),this.controlNodes.from.draw(t),this.controlNodes.to.draw(t)}else this.controlNodes={from:null,to:null,positions:{}}},s.prototype._enableControlNodes=function(){this.fromBackup=this.from,this.toBackup=this.to,this.controlNodesEnabled=!0},s.prototype._disableControlNodes=function(){this.fromId=this.from.id,this.toId=this.to.id,this.fromId!=this.fromBackup.id?this.fromBackup.detachEdge(this):this.toId!=this.toBackup.id&&this.toBackup.detachEdge(this),this.fromBackup=null,this.toBackup=null,this.controlNodesEnabled=!1},s.prototype._getSelectedControlNode=function(t,e){var i=this.controlNodes.positions,s=Math.sqrt(Math.pow(t-i.from.x,2)+Math.pow(e-i.from.y,2)),o=Math.sqrt(Math.pow(t-i.to.x,2)+Math.pow(e-i.to.y,2));return 15>s?(this.connectedNode=this.from,this.from=this.controlNodes.from,this.controlNodes.from):15>o?(this.connectedNode=this.to,this.to=this.controlNodes.to,this.controlNodes.to):null},s.prototype._restoreControlNodes=function(){1==this.controlNodes.from.selected?(this.from=this.connectedNode,this.connectedNode=null,this.controlNodes.from.unselect()):1==this.controlNodes.to.selected&&(this.to=this.connectedNode,this.connectedNode=null,this.controlNodes.to.unselect())},s.prototype.getControlNodePositions=function(t){var e,i=Math.atan2(this.to.y-this.from.y,this.to.x-this.from.x),s=this.to.x-this.from.x,o=this.to.y-this.from.y,n=Math.sqrt(s*s+o*o),r=this.from.distanceToBorder(t,i+Math.PI),a=(n-r)/n,h=a*this.from.x+(1-a)*this.to.x,d=a*this.from.y+(1-a)*this.to.y;1==this.options.smoothCurves.dynamic&&1==this.options.smoothCurves.enabled?e=this.via:1==this.options.smoothCurves.enabled&&(e=this._getViaCoordinates()),1==this.options.smoothCurves.enabled&&null!=e.x&&(i=Math.atan2(this.to.y-e.y,this.to.x-e.x),s=this.to.x-e.x,o=this.to.y-e.y,n=Math.sqrt(s*s+o*o));var l,c,p=this.to.distanceToBorder(t,i),u=(n-p)/n;return 1==this.options.smoothCurves.enabled&&null!=e.x?(l=(1-u)*e.x+u*this.to.x,c=(1-u)*e.y+u*this.to.y):(l=(1-u)*this.from.x+u*this.to.x,c=(1-u)*this.from.y+u*this.to.y),{from:{x:h,y:d},to:{x:l,y:c}}},t.exports=s},function(t,e,i){function s(){this.clear(),this.defaultIndex=0}var o=i(1);s.DEFAULT=[{border:"#2B7CE9",background:"#97C2FC",highlight:{border:"#2B7CE9",background:"#D2E5FF"},hover:{border:"#2B7CE9",background:"#D2E5FF"}},{border:"#FFA500",background:"#FFFF00",highlight:{border:"#FFA500",background:"#FFFFA3"},hover:{border:"#FFA500",background:"#FFFFA3"}},{border:"#FA0A10",background:"#FB7E81",highlight:{border:"#FA0A10",background:"#FFAFB1"},hover:{border:"#FA0A10",background:"#FFAFB1"}},{border:"#41A906",background:"#7BE141",highlight:{border:"#41A906",background:"#A1EC76"},hover:{border:"#41A906",background:"#A1EC76"}},{border:"#E129F0",background:"#EB7DF4",highlight:{border:"#E129F0",background:"#F0B3F5"},hover:{border:"#E129F0",background:"#F0B3F5"}},{border:"#7C29F0",background:"#AD85E4",highlight:{border:"#7C29F0",background:"#D3BDF0"},hover:{border:"#7C29F0",background:"#D3BDF0"}},{border:"#C37F00",background:"#FFA807",highlight:{border:"#C37F00",background:"#FFCA66"},hover:{border:"#C37F00",background:"#FFCA66"}},{border:"#4220FB",background:"#6E6EFD",highlight:{border:"#4220FB",background:"#9B9BFD"},hover:{border:"#4220FB",background:"#9B9BFD"}},{border:"#FD5A77",background:"#FFC0CB",highlight:{border:"#FD5A77",background:"#FFD1D9"},hover:{border:"#FD5A77",background:"#FFD1D9"}},{border:"#4AD63A",background:"#C2FABC",highlight:{border:"#4AD63A",background:"#E6FFE3"},hover:{border:"#4AD63A",background:"#E6FFE3"}}],s.prototype.clear=function(){this.groups={},this.groups.length=function(){var t=0;for(var e in this)this.hasOwnProperty(e)&&t++;return t}},s.prototype.get=function(t){var e=this.groups[t];if(void 0==e){var i=this.defaultIndex%s.DEFAULT.length;this.defaultIndex++,e={},e.color=s.DEFAULT[i],this.groups[t]=e}return e},s.prototype.add=function(t,e){return this.groups[t]=e,e.color&&(e.color=o.parseColor(e.color)),e},t.exports=s},function(t){function e(){this.images={},this.callback=void 0}e.prototype.setOnloadCallback=function(t){this.callback=t},e.prototype.load=function(t,e){var i=this.images[t];if(void 0==i){var s=this;i=new Image,this.images[t]=i,i.onload=function(){s.callback&&s.callback(this)},i.onerror=function(){this.src=e,s.callback&&s.callback(this)},i.src=t}return i},t.exports=e},function(t,e,i){function s(t,e,i,s){var n=o.selectiveBridgeObject(["nodes"],s);this.options=n.nodes,this.selected=!1,this.hover=!1,this.edges=[],this.dynamicEdges=[],this.reroutedEdges={},this.fontDrawThreshold=3,this.id=void 0,this.x=null,this.y=null,this.allowedToMoveX=!1,this.allowedToMoveY=!1,this.xFixed=!1,this.yFixed=!1,this.horizontalAlignLeft=!0,this.verticalAlignTop=!0,this.baseRadiusValue=s.nodes.radius,this.radiusFixed=!1,this.level=-1,this.preassignedLevel=!1,this.hierarchyEnumerated=!1,this.labelDimensions={top:0,left:0,width:0,height:0,yLine:0},this.imagelist=e,this.grouplist=i,this.fx=0,this.fy=0,this.vx=0,this.vy=0,this.damping=s.physics.damping,this.fixedData={x:null,y:null},this.setProperties(t,n),this.resetCluster(),this.dynamicEdgesLength=0,this.clusterSession=0,this.clusterSizeWidthFactor=s.clustering.nodeScaling.width,this.clusterSizeHeightFactor=s.clustering.nodeScaling.height,this.clusterSizeRadiusFactor=s.clustering.nodeScaling.radius,this.maxNodeSizeIncrements=s.clustering.maxNodeSizeIncrements,this.growthIndicator=0,this.networkScaleInv=1,this.networkScale=1,this.canvasTopLeft={x:-300,y:-300},this.canvasBottomRight={x:300,y:300},this.parentEdgeId=null}var o=i(1);s.prototype.resetCluster=function(){this.formationScale=void 0,this.clusterSize=1,this.containedNodes={},this.containedEdges={},this.clusterSessions=[]},s.prototype.attachEdge=function(t){-1==this.edges.indexOf(t)&&this.edges.push(t),-1==this.dynamicEdges.indexOf(t)&&this.dynamicEdges.push(t),this.dynamicEdgesLength=this.dynamicEdges.length},s.prototype.detachEdge=function(t){var e=this.edges.indexOf(t);-1!=e&&this.edges.splice(e,1),e=this.dynamicEdges.indexOf(t),-1!=e&&this.dynamicEdges.splice(e,1),this.dynamicEdgesLength=this.dynamicEdges.length},s.prototype.setProperties=function(t,e){if(t){var i=["borderWidth","borderWidthSelected","shape","image","brokenImage","radius","fontColor","fontSize","fontFace","fontFill","group","mass"];if(o.selectiveDeepExtend(i,this.options,t),void 0!==t.id&&(this.id=t.id),void 0!==t.label&&(this.label=t.label,this.originalLabel=t.label),void 0!==t.title&&(this.title=t.title),void 0!==t.x&&(this.x=t.x),void 0!==t.y&&(this.y=t.y),void 0!==t.value&&(this.value=t.value),void 0!==t.level&&(this.level=t.level,this.preassignedLevel=!0),void 0!==t.horizontalAlignLeft&&(this.horizontalAlignLeft=t.horizontalAlignLeft),void 0!==t.verticalAlignTop&&(this.verticalAlignTop=t.verticalAlignTop),void 0!==t.triggerFunction&&(this.triggerFunction=t.triggerFunction),void 0===this.id)throw"Node must have an id";if("number"==typeof this.options.group||"string"==typeof this.options.group&&""!=this.options.group){var s=this.grouplist.get(this.options.group);for(var n in s)s.hasOwnProperty(n)&&(this.options[n]=s[n])}if(void 0!==t.radius&&(this.baseRadiusValue=this.options.radius),void 0!==t.color&&(this.options.color=o.parseColor(t.color)),void 0!==this.options.image&&""!=this.options.image){if(!this.imagelist)throw"No imagelist provided";this.imageObj=this.imagelist.load(this.options.image,this.options.brokenImage)}switch(void 0!==t.allowedToMoveX?(this.xFixed=!t.allowedToMoveX,this.allowedToMoveX=t.allowedToMoveX):void 0!==t.x&&0==this.allowedToMoveX&&(this.xFixed=!0),void 0!==t.allowedToMoveY?(this.yFixed=!t.allowedToMoveY,this.allowedToMoveY=t.allowedToMoveY):void 0!==t.y&&0==this.allowedToMoveY&&(this.yFixed=!0),this.radiusFixed=this.radiusFixed||void 0!==t.radius,"image"==this.options.shape&&(this.options.radiusMin=e.nodes.widthMin,this.options.radiusMax=e.nodes.widthMax),this.options.shape){case"database":this.draw=this._drawDatabase,this.resize=this._resizeDatabase;break;case"box":this.draw=this._drawBox,this.resize=this._resizeBox;break;case"circle":this.draw=this._drawCircle,this.resize=this._resizeCircle;break;case"ellipse":this.draw=this._drawEllipse,this.resize=this._resizeEllipse;break;case"image":this.draw=this._drawImage,this.resize=this._resizeImage;break;case"text":this.draw=this._drawText,this.resize=this._resizeText;break;case"dot":this.draw=this._drawDot,this.resize=this._resizeShape;break;case"square":this.draw=this._drawSquare,this.resize=this._resizeShape;break;case"triangle":this.draw=this._drawTriangle,this.resize=this._resizeShape;break;case"triangleDown":this.draw=this._drawTriangleDown,this.resize=this._resizeShape;break;case"star":this.draw=this._drawStar,this.resize=this._resizeShape;break;default:this.draw=this._drawEllipse,this.resize=this._resizeEllipse}this._reset()}},s.prototype.select=function(){this.selected=!0,this._reset()},s.prototype.unselect=function(){this.selected=!1,this._reset()},s.prototype.clearSizeCache=function(){this._reset()},s.prototype._reset=function(){this.width=void 0,this.height=void 0},s.prototype.getTitle=function(){return"function"==typeof this.title?this.title():this.title},s.prototype.distanceToBorder=function(t,e){var i=1;switch(this.width||this.resize(t),this.options.shape){case"circle":case"dot":return this.options.radius+i;case"ellipse":var s=this.width/2,o=this.height/2,n=Math.sin(e)*s,r=Math.cos(e)*o;return s*o/Math.sqrt(n*n+r*r);case"box":case"image":case"text":default:return this.width?Math.min(Math.abs(this.width/2/Math.cos(e)),Math.abs(this.height/2/Math.sin(e)))+i:0}},s.prototype._setForce=function(t,e){this.fx=t,this.fy=e},s.prototype._addForce=function(t,e){this.fx+=t,this.fy+=e},s.prototype.discreteStep=function(t){if(this.xFixed)this.fx=0,this.vx=0;else{var e=this.damping*this.vx,i=(this.fx-e)/this.options.mass;this.vx+=i*t,this.x+=this.vx*t}if(this.yFixed)this.fy=0,this.vy=0;else{var s=this.damping*this.vy,o=(this.fy-s)/this.options.mass;this.vy+=o*t,this.y+=this.vy*t}},s.prototype.discreteStepLimited=function(t,e){if(this.xFixed)this.fx=0,this.vx=0;else{var i=this.damping*this.vx,s=(this.fx-i)/this.options.mass;this.vx+=s*t,this.vx=Math.abs(this.vx)>e?this.vx>0?e:-e:this.vx,this.x+=this.vx*t}if(this.yFixed)this.fy=0,this.vy=0;else{var o=this.damping*this.vy,n=(this.fy-o)/this.options.mass;this.vy+=n*t,this.vy=Math.abs(this.vy)>e?this.vy>0?e:-e:this.vy,this.y+=this.vy*t}},s.prototype.isFixed=function(){return this.xFixed&&this.yFixed},s.prototype.isMoving=function(t){var e=Math.sqrt(Math.pow(this.vx,2)+Math.pow(this.vy,2));return e>t},s.prototype.isSelected=function(){return this.selected},s.prototype.getValue=function(){return this.value},s.prototype.getDistance=function(t,e){var i=this.x-t,s=this.y-e;return Math.sqrt(i*i+s*s)},s.prototype.setValueRange=function(t,e){if(!this.radiusFixed&&void 0!==this.value)if(e==t)this.options.radius=(this.options.radiusMin+this.options.radiusMax)/2;else{var i=(this.options.radiusMax-this.options.radiusMin)/(e-t);this.options.radius=(this.value-t)*i+this.options.radiusMin}this.baseRadiusValue=this.options.radius},s.prototype.draw=function(){throw"Draw method not initialized for node"},s.prototype.resize=function(){throw"Resize method not initialized for node"},s.prototype.isOverlappingWith=function(t){return this.leftt.left&&this.topt.top},s.prototype._resizeImage=function(){if(!this.width||!this.height){var t,e;if(this.value){this.options.radius=this.baseRadiusValue;var i=this.imageObj.height/this.imageObj.width;void 0!==i?(t=this.options.radius||this.imageObj.width,e=this.options.radius*i||this.imageObj.height):(t=0,e=0)}else t=this.imageObj.width,e=this.imageObj.height;this.width=t,this.height=e,this.growthIndicator=0,this.width>0&&this.height>0&&(this.width+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeWidthFactor,this.height+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeHeightFactor,this.options.radius+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeRadiusFactor,this.growthIndicator=this.width-t)}},s.prototype._drawImage=function(t){this._resizeImage(t),this.left=this.x-this.width/2,this.top=this.y-this.height/2;var e;if(0!=this.imageObj.width){if(this.clusterSize>1){var i=this.clusterSize>1?10:0;i*=this.networkScaleInv,i=Math.min(.2*this.width,i),t.globalAlpha=.5,t.drawImage(this.imageObj,this.left-i,this.top-i,this.width+2*i,this.height+2*i)}t.globalAlpha=1,t.drawImage(this.imageObj,this.left,this.top,this.width,this.height),e=this.y+this.height/2}else e=this.y;this._label(t,this.label,this.x,e,void 0,"top")},s.prototype._resizeBox=function(t){if(!this.width){var e=5,i=this.getTextSize(t);this.width=i.width+2*e,this.height=i.height+2*e,this.width+=.5*Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeWidthFactor,this.height+=.5*Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeHeightFactor,this.growthIndicator=this.width-(i.width+2*e)}},s.prototype._drawBox=function(t){this._resizeBox(t),this.left=this.x-this.width/2,this.top=this.y-this.height/2;var e=2.5,i=this.options.borderWidth,s=this.options.borderWidthSelected||2*this.options.borderWidth;t.strokeStyle=this.selected?this.options.color.highlight.border:this.hover?this.options.color.hover.border:this.options.color.border,this.clusterSize>1&&(t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.roundRect(this.left-2*t.lineWidth,this.top-2*t.lineWidth,this.width+4*t.lineWidth,this.height+4*t.lineWidth,this.options.radius),t.stroke()),t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.fillStyle=this.selected?this.options.color.highlight.background:this.options.color.background,t.roundRect(this.left,this.top,this.width,this.height,this.options.radius),t.fill(),t.stroke(),this._label(t,this.label,this.x,this.y)},s.prototype._resizeDatabase=function(t){if(!this.width){var e=5,i=this.getTextSize(t),s=i.width+2*e;this.width=s,this.height=s,this.width+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeWidthFactor,this.height+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeHeightFactor,this.options.radius+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeRadiusFactor,this.growthIndicator=this.width-s}},s.prototype._drawDatabase=function(t){this._resizeDatabase(t),this.left=this.x-this.width/2,this.top=this.y-this.height/2;var e=2.5,i=this.options.borderWidth,s=this.options.borderWidthSelected||2*this.options.borderWidth;t.strokeStyle=this.selected?this.options.color.highlight.border:this.hover?this.options.color.hover.border:this.options.color.border,this.clusterSize>1&&(t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.database(this.x-this.width/2-2*t.lineWidth,this.y-.5*this.height-2*t.lineWidth,this.width+4*t.lineWidth,this.height+4*t.lineWidth),t.stroke()),t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.fillStyle=this.selected?this.options.color.highlight.background:this.hover?this.options.color.hover.background:this.options.color.background,t.database(this.x-this.width/2,this.y-.5*this.height,this.width,this.height),t.fill(),t.stroke(),this._label(t,this.label,this.x,this.y)},s.prototype._resizeCircle=function(t){if(!this.width){var e=5,i=this.getTextSize(t),s=Math.max(i.width,i.height)+2*e;this.options.radius=s/2,this.width=s,this.height=s,this.options.radius+=.5*Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeRadiusFactor,this.growthIndicator=this.options.radius-.5*s}},s.prototype._drawCircle=function(t){this._resizeCircle(t),this.left=this.x-this.width/2,this.top=this.y-this.height/2;var e=2.5,i=this.options.borderWidth,s=this.options.borderWidthSelected||2*this.options.borderWidth;t.strokeStyle=this.selected?this.options.color.highlight.border:this.hover?this.options.color.hover.border:this.options.color.border,this.clusterSize>1&&(t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.circle(this.x,this.y,this.options.radius+2*t.lineWidth),t.stroke()),t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.fillStyle=this.selected?this.options.color.highlight.background:this.hover?this.options.color.hover.background:this.options.color.background,t.circle(this.x,this.y,this.options.radius),t.fill(),t.stroke(),this._label(t,this.label,this.x,this.y)},s.prototype._resizeEllipse=function(t){if(!this.width){var e=this.getTextSize(t);this.width=1.5*e.width,this.height=2*e.height,this.width1&&(t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.ellipse(this.left-2*t.lineWidth,this.top-2*t.lineWidth,this.width+4*t.lineWidth,this.height+4*t.lineWidth),t.stroke()),t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.fillStyle=this.selected?this.options.color.highlight.background:this.hover?this.options.color.hover.background:this.options.color.background,t.ellipse(this.left,this.top,this.width,this.height),t.fill(),t.stroke(),this._label(t,this.label,this.x,this.y)},s.prototype._drawDot=function(t){this._drawShape(t,"circle")},s.prototype._drawTriangle=function(t){this._drawShape(t,"triangle")},s.prototype._drawTriangleDown=function(t){this._drawShape(t,"triangleDown")},s.prototype._drawSquare=function(t){this._drawShape(t,"square")},s.prototype._drawStar=function(t){this._drawShape(t,"star")},s.prototype._resizeShape=function(){if(!this.width){this.options.radius=this.baseRadiusValue;var t=2*this.options.radius;this.width=t,this.height=t,this.width+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeWidthFactor,this.height+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeHeightFactor,this.options.radius+=.5*Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeRadiusFactor,this.growthIndicator=this.width-t}},s.prototype._drawShape=function(t,e){this._resizeShape(t),this.left=this.x-this.width/2,this.top=this.y-this.height/2;var i=2.5,s=this.options.borderWidth,o=this.options.borderWidthSelected||2*this.options.borderWidth,n=2;switch(e){case"dot":n=2;break;case"square":n=2;break;case"triangle":n=3;break;case"triangleDown":n=3;break;case"star":n=4}t.strokeStyle=this.selected?this.options.color.highlight.border:this.hover?this.options.color.hover.border:this.options.color.border,this.clusterSize>1&&(t.lineWidth=(this.selected?o:s)+(this.clusterSize>1?i:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t[e](this.x,this.y,this.options.radius+n*t.lineWidth),t.stroke()),t.lineWidth=(this.selected?o:s)+(this.clusterSize>1?i:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.fillStyle=this.selected?this.options.color.highlight.background:this.hover?this.options.color.hover.background:this.options.color.background,t[e](this.x,this.y,this.options.radius),t.fill(),t.stroke(),this.label&&this._label(t,this.label,this.x,this.y+this.height/2,void 0,"top",!0)},s.prototype._resizeText=function(t){if(!this.width){var e=5,i=this.getTextSize(t);this.width=i.width+2*e,this.height=i.height+2*e,this.width+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeWidthFactor,this.height+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeHeightFactor,this.options.radius+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeRadiusFactor,this.growthIndicator=this.width-(i.width+2*e) -}},s.prototype._drawText=function(t){this._resizeText(t),this.left=this.x-this.width/2,this.top=this.y-this.height/2,this._label(t,this.label,this.x,this.y)},s.prototype._label=function(t,e,i,s,o,n,r){if(e&&Number(this.options.fontSize)*this.networkScale>this.fontDrawThreshold){t.font=(this.selected?"bold ":"")+this.options.fontSize+"px "+this.options.fontFace;var a=e.split("\n"),h=a.length,d=Number(this.options.fontSize)+4,l=s+(1-h)/2*d;1==r&&(l=s+(1-h)/(2*d));for(var c=t.measureText(a[0]).width,p=1;h>p;p++){var u=t.measureText(a[p]).width;c=u>c?u:c}var m=this.options.fontSize*h,f=i-c/2,g=s-m/2;"top"==n&&(g+=.5*d),this.labelDimensions={top:g,left:f,width:c,height:m,yLine:l},void 0!==this.options.fontFill&&null!==this.options.fontFill&&"none"!==this.options.fontFill&&(t.fillStyle=this.options.fontFill,t.fillRect(f,g,c,m)),t.fillStyle=this.options.fontColor||"black",t.textAlign=o||"center",t.textBaseline=n||"middle";for(var p=0;h>p;p++)t.fillText(a[p],i,l),l+=d}},s.prototype.getTextSize=function(t){if(void 0!==this.label){t.font=(this.selected?"bold ":"")+this.options.fontSize+"px "+this.options.fontFace;for(var e=this.label.split("\n"),i=(Number(this.options.fontSize)+4)*e.length,s=0,o=0,n=e.length;n>o;o++)s=Math.max(s,t.measureText(e[o]).width);return{width:s,height:i}}return{width:0,height:0}},s.prototype.inArea=function(){return void 0!==this.width?this.x+this.width*this.networkScaleInv>=this.canvasTopLeft.x&&this.x-this.width*this.networkScaleInv=this.canvasTopLeft.y&&this.y-this.height*this.networkScaleInv=this.canvasTopLeft.x&&this.x=this.canvasTopLeft.y&&this.ys&&(n=s-e-this.padding),no&&(r=o-i-this.padding),ri;i++)if(e.id===r.nodes[i].id){o=r.nodes[i];break}for(o||(o={id:e.id},t.node&&(o.attr=a(o.attr,t.node))),i=n.length-1;i>=0;i--){var h=n[i];h.nodes||(h.nodes=[]),-1==h.nodes.indexOf(o)&&h.nodes.push(o)}e.attr&&(o.attr=a(o.attr,e.attr))}function l(t,e){if(t.edges||(t.edges=[]),t.edges.push(e),t.edge){var i=a({},t.edge);e.attr=a(i,e.attr)}}function c(t,e,i,s,o){var n={from:e,to:i,type:s};return t.edge&&(n.attr=a({},t.edge)),n.attr=a(n.attr||{},o),n}function p(){for(k=M.NULL,L="";" "==O||" "==O||"\n"==O||"\r"==O;)o();do{var t=!1;if("#"==O){for(var e=T-1;" "==E.charAt(e)||" "==E.charAt(e);)e--;if("\n"==E.charAt(e)||""==E.charAt(e)){for(;""!=O&&"\n"!=O;)o();t=!0}}if("/"==O&&"/"==n()){for(;""!=O&&"\n"!=O;)o();t=!0}if("/"==O&&"*"==n()){for(;""!=O;){if("*"==O&&"/"==n()){o(),o();break}o()}t=!0}for(;" "==O||" "==O||"\n"==O||"\r"==O;)o()}while(t);if(""==O)return void(k=M.DELIMITER);var i=O+n();if(C[i])return k=M.DELIMITER,L=i,o(),void o();if(C[O])return k=M.DELIMITER,L=O,void o();if(r(O)||"-"==O){for(L+=O,o();r(O);)L+=O,o();return"false"==L?L=!1:"true"==L?L=!0:isNaN(Number(L))||(L=Number(L)),void(k=M.IDENTIFIER)}if('"'==O){for(o();""!=O&&('"'!=O||'"'==O&&'"'==n());)L+=O,'"'==O&&o(),o();if('"'!=O)throw x('End of string " expected');return o(),void(k=M.IDENTIFIER)}for(k=M.UNKNOWN;""!=O;)L+=O,o();throw new SyntaxError('Syntax error in part "'+w(L,30)+'"')}function u(){var t={};if(s(),p(),"strict"==L&&(t.strict=!0,p()),("graph"==L||"digraph"==L)&&(t.type=L,p()),k==M.IDENTIFIER&&(t.id=L,p()),"{"!=L)throw x("Angle bracket { expected");if(p(),m(t),"}"!=L)throw x("Angle bracket } expected");if(p(),""!==L)throw x("End of file expected");return p(),delete t.node,delete t.edge,delete t.graph,t}function m(t){for(;""!==L&&"}"!=L;)f(t),";"==L&&p()}function f(t){var e=g(t);if(e)return void b(t,e);var i=v(t);if(!i){if(k!=M.IDENTIFIER)throw x("Identifier expected");var s=L;if(p(),"="==L){if(p(),k!=M.IDENTIFIER)throw x("Identifier expected");t[s]=L,p()}else y(t,s)}}function g(t){var e=null;if("subgraph"==L&&(e={},e.type="subgraph",p(),k==M.IDENTIFIER&&(e.id=L,p())),"{"==L){if(p(),e||(e={}),e.parent=t,e.node=t.node,e.edge=t.edge,e.graph=t.graph,m(e),"}"!=L)throw x("Angle bracket } expected");p(),delete e.node,delete e.edge,delete e.graph,delete e.parent,t.subgraphs||(t.subgraphs=[]),t.subgraphs.push(e)}return e}function v(t){return"node"==L?(p(),t.node=_(),"node"):"edge"==L?(p(),t.edge=_(),"edge"):"graph"==L?(p(),t.graph=_(),"graph"):null}function y(t,e){var i={id:e},s=_();s&&(i.attr=s),d(t,i),b(t,e)}function b(t,e){for(;"->"==L||"--"==L;){var i,s=L;p();var o=g(t);if(o)i=o;else{if(k!=M.IDENTIFIER)throw x("Identifier or subgraph expected");i=L,d(t,{id:i}),p()}var n=_(),r=c(t,e,i,s,n);l(t,r),e=i}}function _(){for(var t=null;"["==L;){for(p(),t={};""!==L&&"]"!=L;){if(k!=M.IDENTIFIER)throw x("Attribute name expected");var e=L;if(p(),"="!=L)throw x("Equal sign = expected");if(p(),k!=M.IDENTIFIER)throw x("Attribute value expected");var i=L;h(t,e,i),p(),","==L&&p()}if("]"!=L)throw x("Bracket ] expected");p()}return t}function x(t){return new SyntaxError(t+', got "'+w(L,30)+'" (char '+T+")")}function w(t,e){return t.length<=e?t:t.substr(0,27)+"..."}function S(t,e,i){Array.isArray(t)?t.forEach(function(t){Array.isArray(e)?e.forEach(function(e){i(t,e)}):i(t,e)}):Array.isArray(e)?e.forEach(function(e){i(t,e)}):i(t,e)}function D(t){var e=i(t),s={nodes:[],edges:[],options:{}};if(e.nodes&&e.nodes.forEach(function(t){var e={id:t.id,label:String(t.label||t.id)};a(e,t.attr),e.image&&(e.shape="image"),s.nodes.push(e)}),e.edges){var o=function(t){var e={from:t.from,to:t.to};return a(e,t.attr),e.style="->"==t.type?"arrow":"line",e};e.edges.forEach(function(t){var e,i;e=t.from instanceof Object?t.from.nodes:{id:t.from},i=t.to instanceof Object?t.to.nodes:{id:t.to},t.from instanceof Object&&t.from.edges&&t.from.edges.forEach(function(t){var e=o(t);s.edges.push(e)}),S(e,i,function(e,i){var n=c(s,e.id,i.id,t.type,t.attr),r=o(n);s.edges.push(r)}),t.to instanceof Object&&t.to.edges&&t.to.edges.forEach(function(t){var e=o(t);s.edges.push(e)})})}return e.attr&&(s.options=e.attr),s}var M={NULL:0,DELIMITER:1,IDENTIFIER:2,UNKNOWN:3},C={"{":!0,"}":!0,"[":!0,"]":!0,";":!0,"=":!0,",":!0,"->":!0,"--":!0},E="",T=0,O="",L="",k=M.NULL,N=/[a-zA-Z_0-9.:#]/;e.parseDOT=i,e.DOTToGraph=D},function(t,e){function i(t,e){var i=[],s=[];this.options={edges:{inheritColor:!0},nodes:{allowedToMove:!1,parseColor:!1}},void 0!==e&&(this.options.nodes.allowedToMove=e.allowedToMove|!1,this.options.nodes.parseColor=e.parseColor|!1,this.options.edges.inheritColor=e.inheritColor|!0);for(var o=t.edges,n=t.nodes,r=0;r=s&&(s=864e5),e=new Date(e.valueOf()-.05*s),i=new Date(i.valueOf()+.05*s)}return{start:e,end:i}},s.prototype.setWindow=function(t,e,i){var s=i&&void 0!==i.animate?i.animate:!0;if(1==arguments.length){var o=arguments[0];this.range.setRange(o.start,o.end,s)}else this.range.setRange(t,e,s)},s.prototype.moveTo=function(t,e){var i=this.range.end-this.range.start,s=r.convert(t,"Date").valueOf(),o=s-i/2,n=s+i/2,a=e&&void 0!==e.animate?e.animate:!0;this.range.setRange(o,n,a)},s.prototype.getWindow=function(){var t=this.range.getRange();return{start:new Date(t.start),end:new Date(t.end)}},s.prototype.redraw=function(){var t=!1,e=this.options,i=this.props,s=this.dom;if(s){h.updateHiddenDates(this.body,this.options.hiddenDates),"top"==e.orientation?(r.addClassName(s.root,"top"),r.removeClassName(s.root,"bottom")):(r.removeClassName(s.root,"top"),r.addClassName(s.root,"bottom")),s.root.style.maxHeight=r.option.asSize(e.maxHeight,""),s.root.style.minHeight=r.option.asSize(e.minHeight,""),s.root.style.width=r.option.asSize(e.width,""),i.border.left=(s.centerContainer.offsetWidth-s.centerContainer.clientWidth)/2,i.border.right=i.border.left,i.border.top=(s.centerContainer.offsetHeight-s.centerContainer.clientHeight)/2,i.border.bottom=i.border.top;var o=s.root.offsetHeight-s.root.clientHeight,n=s.root.offsetWidth-s.root.clientWidth;0===s.centerContainer.clientHeight&&(i.border.left=i.border.top,i.border.right=i.border.left),0===s.root.clientHeight&&(n=o),i.center.height=s.center.offsetHeight,i.left.height=s.left.offsetHeight,i.right.height=s.right.offsetHeight,i.top.height=s.top.clientHeight||-i.border.top,i.bottom.height=s.bottom.clientHeight||-i.border.bottom;var a=Math.max(i.left.height,i.center.height,i.right.height),d=i.top.height+a+i.bottom.height+o+i.border.top+i.border.bottom;s.root.style.height=r.option.asSize(e.height,d+"px"),i.root.height=s.root.offsetHeight,i.background.height=i.root.height-o;var l=i.root.height-i.top.height-i.bottom.height-o;i.centerContainer.height=l,i.leftContainer.height=l,i.rightContainer.height=i.leftContainer.height,i.root.width=s.root.offsetWidth,i.background.width=i.root.width-n,i.left.width=s.leftContainer.clientWidth||-i.border.left,i.leftContainer.width=i.left.width,i.right.width=s.rightContainer.clientWidth||-i.border.right,i.rightContainer.width=i.right.width;var c=i.root.width-i.left.width-i.right.width-n;i.center.width=c,i.centerContainer.width=c,i.top.width=c,i.bottom.width=c,s.background.style.height=i.background.height+"px",s.backgroundVertical.style.height=i.background.height+"px",s.backgroundHorizontal.style.height=i.centerContainer.height+"px",s.centerContainer.style.height=i.centerContainer.height+"px",s.leftContainer.style.height=i.leftContainer.height+"px",s.rightContainer.style.height=i.rightContainer.height+"px",s.background.style.width=i.background.width+"px",s.backgroundVertical.style.width=i.centerContainer.width+"px",s.backgroundHorizontal.style.width=i.background.width+"px",s.centerContainer.style.width=i.center.width+"px",s.top.style.width=i.top.width+"px",s.bottom.style.width=i.bottom.width+"px",s.background.style.left="0",s.background.style.top="0",s.backgroundVertical.style.left=i.left.width+i.border.left+"px",s.backgroundVertical.style.top="0",s.backgroundHorizontal.style.left="0",s.backgroundHorizontal.style.top=i.top.height+"px",s.centerContainer.style.left=i.left.width+"px",s.centerContainer.style.top=i.top.height+"px",s.leftContainer.style.left="0",s.leftContainer.style.top=i.top.height+"px",s.rightContainer.style.left=i.left.width+i.center.width+"px",s.rightContainer.style.top=i.top.height+"px",s.top.style.left=i.left.width+"px",s.top.style.top="0",s.bottom.style.left=i.left.width+"px",s.bottom.style.top=i.top.height+i.centerContainer.height+"px",this._updateScrollTop();var p=this.props.scrollTop;"bottom"==e.orientation&&(p+=Math.max(this.props.centerContainer.height-this.props.center.height-this.props.border.top-this.props.border.bottom,0)),s.center.style.left="0",s.center.style.top=p+"px",s.left.style.left="0",s.left.style.top=p+"px",s.right.style.left="0",s.right.style.top=p+"px";var u=0==this.props.scrollTop?"hidden":"",m=this.props.scrollTop==this.props.scrollTopMin?"hidden":"";if(s.shadowTop.style.visibility=u,s.shadowBottom.style.visibility=m,s.shadowTopLeft.style.visibility=u,s.shadowBottomLeft.style.visibility=m,s.shadowTopRight.style.visibility=u,s.shadowBottomRight.style.visibility=m,this.components.forEach(function(e){t=e.redraw()||t}),t){var f=3;this.redrawCount0&&(this.props.scrollTop=0),this.props.scrollTops;s++){var o=s%2===0?1.3*i:.5*i;this.lineTo(t+o*Math.sin(2*s*Math.PI/10),e-o*Math.cos(2*s*Math.PI/10))}this.closePath()},CanvasRenderingContext2D.prototype.roundRect=function(t,e,i,s,o){var n=Math.PI/180;0>i-2*o&&(o=i/2),0>s-2*o&&(o=s/2),this.beginPath(),this.moveTo(t+o,e),this.lineTo(t+i-o,e),this.arc(t+i-o,e+o,o,270*n,360*n,!1),this.lineTo(t+i,e+s-o),this.arc(t+i-o,e+s-o,o,0,90*n,!1),this.lineTo(t+o,e+s),this.arc(t+o,e+s-o,o,90*n,180*n,!1),this.lineTo(t,e+o),this.arc(t+o,e+o,o,180*n,270*n,!1)},CanvasRenderingContext2D.prototype.ellipse=function(t,e,i,s){var o=.5522848,n=i/2*o,r=s/2*o,a=t+i,h=e+s,d=t+i/2,l=e+s/2;this.beginPath(),this.moveTo(t,l),this.bezierCurveTo(t,l-r,d-n,e,d,e),this.bezierCurveTo(d+n,e,a,l-r,a,l),this.bezierCurveTo(a,l+r,d+n,h,d,h),this.bezierCurveTo(d-n,h,t,l+r,t,l)},CanvasRenderingContext2D.prototype.database=function(t,e,i,s){var o=1/3,n=i,r=s*o,a=.5522848,h=n/2*a,d=r/2*a,l=t+n,c=e+r,p=t+n/2,u=e+r/2,m=e+(s-r/2),f=e+s;this.beginPath(),this.moveTo(l,u),this.bezierCurveTo(l,u+d,p+h,c,p,c),this.bezierCurveTo(p-h,c,t,u+d,t,u),this.bezierCurveTo(t,u-d,p-h,e,p,e),this.bezierCurveTo(p+h,e,l,u-d,l,u),this.lineTo(l,m),this.bezierCurveTo(l,m+d,p+h,f,p,f),this.bezierCurveTo(p-h,f,t,m+d,t,m),this.lineTo(t,u)},CanvasRenderingContext2D.prototype.arrow=function(t,e,i,s){var o=t-s*Math.cos(i),n=e-s*Math.sin(i),r=t-.9*s*Math.cos(i),a=e-.9*s*Math.sin(i),h=o+s/3*Math.cos(i+.5*Math.PI),d=n+s/3*Math.sin(i+.5*Math.PI),l=o+s/3*Math.cos(i-.5*Math.PI),c=n+s/3*Math.sin(i-.5*Math.PI);this.beginPath(),this.moveTo(t,e),this.lineTo(h,d),this.lineTo(r,a),this.lineTo(l,c),this.closePath()},CanvasRenderingContext2D.prototype.dashedLine=function(t,e,i,s,o){o||(o=[10,5]),0==p&&(p=.001);var n=o.length;this.moveTo(t,e);for(var r=i-t,a=s-e,h=a/r,d=Math.sqrt(r*r+a*a),l=0,c=!0;d>=.1;){var p=o[l++%n];p>d&&(p=d);var u=Math.sqrt(p*p/(1+h*h));0>r&&(u=-u),t+=u,e+=h*u,this[c?"lineTo":"moveTo"](t,e),d-=p,c=!c}})},function(t,e,i){function s(t,e){this.groupId=t,this.options=e}var o=i(2),n=i(53);s.prototype.getYRange=function(t){for(var e=t[0].y,i=t[0].y,s=0;st[s].y?t[s].y:e,i=i0){var r,a,h=Number(i.svg.style.height.replace("px",""));if(r=o.getSVGElement("path",i.svgElements,i.svg),r.setAttributeNS(null,"class",e.className),void 0!==e.style&&r.setAttributeNS(null,"style",e.style),a=1==e.options.catmullRom.enabled?s._catmullRom(t,e):s._linear(t),1==e.options.shaded.enabled){var d,l=o.getSVGElement("path",i.svgElements,i.svg);d="top"==e.options.shaded.orientation?"M"+t[0].x+",0 "+a+"L"+t[t.length-1].x+",0":"M"+t[0].x+","+h+" "+a+"L"+t[t.length-1].x+","+h,l.setAttributeNS(null,"class",e.className+" fill"),void 0!==e.options.shaded.style&&l.setAttributeNS(null,"style",e.options.shaded.style),l.setAttributeNS(null,"d",d)}r.setAttributeNS(null,"d","M"+a),1==e.options.drawPoints.enabled&&n.draw(t,e,i)}},s._catmullRomUniform=function(t){for(var e,i,s,o,n,r,a=Math.round(t[0].x)+","+Math.round(t[0].y)+" ",h=1/6,d=t.length,l=0;d-1>l;l++)e=0==l?t[0]:t[l-1],i=t[l],s=t[l+1],o=d>l+2?t[l+2]:s,n={x:(-e.x+6*i.x+s.x)*h,y:(-e.y+6*i.y+s.y)*h},r={x:(i.x+6*s.x-o.x)*h,y:(i.y+6*s.y-o.y)*h},a+="C"+n.x+","+n.y+" "+r.x+","+r.y+" "+s.x+","+s.y+" ";return a},s._catmullRom=function(t,e){var i=e.options.catmullRom.alpha;if(0==i||void 0===i)return this._catmullRomUniform(t);for(var s,o,n,r,a,h,d,l,c,p,u,m,f,g,v,y,b,_,x,w=Math.round(t[0].x)+","+Math.round(t[0].y)+" ",S=t.length,D=0;S-1>D;D++)s=0==D?t[0]:t[D-1],o=t[D],n=t[D+1],r=S>D+2?t[D+2]:n,d=Math.sqrt(Math.pow(s.x-o.x,2)+Math.pow(s.y-o.y,2)),l=Math.sqrt(Math.pow(o.x-n.x,2)+Math.pow(o.y-n.y,2)),c=Math.sqrt(Math.pow(n.x-r.x,2)+Math.pow(n.y-r.y,2)),g=Math.pow(c,i),y=Math.pow(c,2*i),v=Math.pow(l,i),b=Math.pow(l,2*i),x=Math.pow(d,i),_=Math.pow(d,2*i),p=2*_+3*x*v+b,u=2*y+3*g*v+b,m=3*x*(x+v),m>0&&(m=1/m),f=3*g*(g+v),f>0&&(f=1/f),a={x:(-b*s.x+p*o.x+_*n.x)*m,y:(-b*s.y+p*o.y+_*n.y)*m},h={x:(y*o.x+u*n.x-b*r.x)*f,y:(y*o.y+u*n.y-b*r.y)*f},0==a.x&&0==a.y&&(a=o),0==h.x&&0==h.y&&(h=n),w+="C"+a.x+","+a.y+" "+h.x+","+h.y+" "+n.x+","+n.y+" ";return w},s._linear=function(t){for(var e="",i=0;it[s].y?t[s].y:e,i=i0&&(n=Math.min(n,Math.abs(c[d-1].x-r))),a=s._getSafeDrawData(n,h,m);else{var g=d+(p[r].amount-p[r].resolved),v=d-(p[r].resolved+1);g0&&(n=Math.min(n,Math.abs(c[v].x-r))),a=s._getSafeDrawData(n,h,m),p[r].resolved+=1,"stack"==h.options.barChart.handleOverlap?(f=p[r].accumulated,p[r].accumulated+=h.zeroPosition-c[d].y):"sideBySide"==h.options.barChart.handleOverlap&&(a.width=a.width/p[r].amount,a.offset+=p[r].resolved*a.width-.5*a.width*(p[r].amount+1),"left"==h.options.barChart.align?a.offset-=.5*a.width:"right"==h.options.barChart.align&&(a.offset+=.5*a.width))}o.drawBar(c[d].x+a.offset,c[d].y-f,a.width,h.zeroPosition-c[d].y,h.className+" bar",i.svgElements,i.svg),1==h.options.drawPoints.enabled&&o.drawPoint(c[d].x+a.offset,c[d].y,h,i.svgElements,i.svg)}},s._getDataIntersections=function(t,e){for(var i,s=0;s0&&(i=Math.min(i,Math.abs(e[s-1].x-e[s].x))),0==i&&(void 0===t[e[s].x]&&(t[e[s].x]={amount:0,resolved:0,accumulated:0}),t[e[s].x].amount+=1)},s._getSafeDrawData=function(t,e,i){var s,o;return t0?(s=i>t?i:t,o=0,"left"==e.options.barChart.align?o-=.5*t:"right"==e.options.barChart.align&&(o+=.5*t)):(s=e.options.barChart.width,o=0,"left"==e.options.barChart.align?o-=.5*e.options.barChart.width:"right"==e.options.barChart.align&&(o+=.5*e.options.barChart.width)),{width:s,offset:o}},s.getStackedBarYRange=function(t,e,i,o,n){if(t.length>0){t.sort(function(t,e){return t.x==e.x?t.groupId-e.groupId:t.x-e.x});var r={};s._getDataIntersections(r,t),e[o]=s._getStackedBarYRange(r,t),e[o].yAxisOrientation=n,i.push(o) -}},s._getStackedBarYRange=function(t,e){for(var i,s=e[0].y,o=e[0].y,n=0;ne[n].y?e[n].y:s,o=ot[r].accumulated?t[r].accumulated:s,o=ot[s].y?t[s].y:e,i=is;++s)i[s].apply(this,e)}return this},e.prototype.listeners=function(t){return this._callbacks=this._callbacks||{},this._callbacks[t]||[]},e.prototype.hasListeners=function(t){return!!this.listeners(t).length}},function(t,e){var i,s,o;!function(n,r){s=[],i=r,o="function"==typeof i?i.apply(e,s):i,!(void 0!==o&&(t.exports=o))}(this,function(){function t(t){var e,i=t&&t.preventDefault||!1,s={},o={keydown:{},keyup:{}},n={};for(e=97;122>=e;e++)n[String.fromCharCode(e)]={code:65+(e-97),shift:!1};for(e=65;90>=e;e++)n[String.fromCharCode(e)]={code:e,shift:!0};for(e=0;9>=e;e++)n[""+e]={code:48+e,shift:!1};for(e=1;12>=e;e++)n["F"+e]={code:111+e,shift:!1};for(e=0;9>=e;e++)n["num"+e]={code:96+e,shift:!1};n["num*"]={code:106,shift:!1},n["num+"]={code:107,shift:!1},n["num-"]={code:109,shift:!1},n["num/"]={code:111,shift:!1},n["num."]={code:110,shift:!1},n.left={code:37,shift:!1},n.up={code:38,shift:!1},n.right={code:39,shift:!1},n.down={code:40,shift:!1},n.space={code:32,shift:!1},n.enter={code:13,shift:!1},n.shift={code:16,shift:void 0},n.esc={code:27,shift:!1},n.backspace={code:8,shift:!1},n.tab={code:9,shift:!1},n.ctrl={code:17,shift:!1},n.alt={code:18,shift:!1},n["delete"]={code:46,shift:!1},n.pageup={code:33,shift:!1},n.pagedown={code:34,shift:!1},n["="]={code:187,shift:!1},n["-"]={code:189,shift:!1},n["]"]={code:221,shift:!1},n["["]={code:219,shift:!1};var r=function(t){h(t,"keydown")},a=function(t){h(t,"keyup")},h=function(t,e){if(void 0!==o[e][t.keyCode]){for(var s=o[e][t.keyCode],n=0;n0)for(i in He)s=He[i],o=e[s],"undefined"!=typeof o&&(t[s]=o);return t}function b(t){return 0>t?Math.ceil(t):Math.floor(t)}function _(t,e,i){for(var s=""+Math.abs(t),o=t>=0;s.lengths;s++)(i&&t[s]!==e[s]||!i&&k(t[s])!==k(e[s]))&&r++;return r+n}function T(t){if(t){var e=t.toLowerCase().replace(/(.)s$/,"$1");t=mi[t]||fi[e]||e}return t}function O(t){var e,i,s={};for(i in t)a(t,i)&&(e=T(i),e&&(s[e]=t[i]));return s}function L(t){var e,i;if(0===t.indexOf("week"))e=7,i="day";else{if(0!==t.indexOf("month"))return;e=12,i="month"}De[t]=function(s,o){var r,a,h=De._locale[t],d=[];if("number"==typeof s&&(o=s,s=n),a=function(t){var e=De().utc().set(i,t);return h.call(De._locale,e,s||"")},null!=o)return a(o);for(r=0;e>r;r++)d.push(a(r));return d}}function k(t){var e=+t,i=0;return 0!==e&&isFinite(e)&&(i=e>=0?Math.floor(e):Math.ceil(e)),i}function N(t,e){return new Date(Date.UTC(t,e+1,0)).getUTCDate()}function I(t,e,i){return pe(De([t,11,31+e-i]),e,i).week}function A(t){return z(t)?366:365}function z(t){return t%4===0&&t%100!==0||t%400===0}function P(t){var e;t._a&&-2===t._pf.overflow&&(e=t._a[Ne]<0||t._a[Ne]>11?Ne:t._a[Ie]<1||t._a[Ie]>N(t._a[ke],t._a[Ne])?Ie:t._a[Ae]<0||t._a[Ae]>24||24===t._a[Ae]&&(0!==t._a[ze]||0!==t._a[Pe]||0!==t._a[Re])?Ae:t._a[ze]<0||t._a[ze]>59?ze:t._a[Pe]<0||t._a[Pe]>59?Pe:t._a[Re]<0||t._a[Re]>999?Re:-1,t._pf._overflowDayOfYear&&(ke>e||e>Ie)&&(e=Ie),t._pf.overflow=e)}function R(t){return null==t._isValid&&(t._isValid=!isNaN(t._d.getTime())&&t._pf.overflow<0&&!t._pf.empty&&!t._pf.invalidMonth&&!t._pf.nullInput&&!t._pf.invalidFormat&&!t._pf.userInvalidated,t._strict&&(t._isValid=t._isValid&&0===t._pf.charsLeftOver&&0===t._pf.unusedTokens.length&&t._pf.bigHour===n)),t._isValid}function F(t){return t?t.toLowerCase().replace("_","-"):t}function H(t){for(var e,i,s,o,n=0;n0;){if(s=Y(o.slice(0,e).join("-")))return s;if(i&&i.length>=e&&E(o,i,!0)>=e-1)break;e--}n++}return null}function Y(t){var e=null;if(!Fe[t]&&Ye)try{e=De.locale(),!function(){var t=new Error('Cannot find module "./locale"');throw t.code="MODULE_NOT_FOUND",t}(),De.locale(e)}catch(i){}return Fe[t]}function W(t,e){var i,s;return e._isUTC?(i=e.clone(),s=(De.isMoment(t)||C(t)?+t:+De(t))-+i,i._d.setTime(+i._d+s),De.updateOffset(i,!1),i):De(t).local()}function B(t){return t.match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"")}function G(t){var e,i,s=t.match(je);for(e=0,i=s.length;i>e;e++)s[e]=_i[s[e]]?_i[s[e]]:B(s[e]);return function(o){var n="";for(e=0;i>e;e++)n+=s[e]instanceof Function?s[e].call(o,t):s[e];return n}}function j(t,e){return t.isValid()?(e=U(e,t.localeData()),gi[e]||(gi[e]=G(e)),gi[e](t)):t.localeData().invalidDate()}function U(t,e){function i(t){return e.longDateFormat(t)||t}var s=5;for(Ue.lastIndex=0;s>=0&&Ue.test(t);)t=t.replace(Ue,i),Ue.lastIndex=0,s-=1;return t}function V(t,e){var i,s=e._strict;switch(t){case"Q":return ii;case"DDDD":return oi;case"YYYY":case"GGGG":case"gggg":return s?ni:qe;case"Y":case"G":case"g":return ai;case"YYYYYY":case"YYYYY":case"GGGGG":case"ggggg":return s?ri:Ze;case"S":if(s)return ii;case"SS":if(s)return si;case"SSS":if(s)return oi;case"DDD":return Xe;case"MMM":case"MMMM":case"dd":case"ddd":case"dddd":return Qe;case"a":case"A":return e._locale._meridiemParse;case"x":return ti;case"X":return ei;case"Z":case"ZZ":return $e;case"T":return Je;case"SSSS":return Ke;case"MM":case"DD":case"YY":case"GG":case"gg":case"HH":case"hh":case"mm":case"ss":case"ww":case"WW":return s?si:Ve;case"M":case"D":case"d":case"H":case"h":case"m":case"s":case"w":case"W":case"e":case"E":return Ve;case"Do":return s?e._locale._ordinalParse:e._locale._ordinalParseLenient;default:return i=new RegExp(ee(te(t.replace("\\","")),"i"))}}function X(t){t=t||"";var e=t.match($e)||[],i=e[e.length-1]||[],s=(i+"").match(pi)||["-",0,0],o=+(60*s[1])+k(s[2]);return"+"===s[0]?-o:o}function q(t,e,i){var s,o=i._a;switch(t){case"Q":null!=e&&(o[Ne]=3*(k(e)-1));break;case"M":case"MM":null!=e&&(o[Ne]=k(e)-1);break;case"MMM":case"MMMM":s=i._locale.monthsParse(e,t,i._strict),null!=s?o[Ne]=s:i._pf.invalidMonth=e;break;case"D":case"DD":null!=e&&(o[Ie]=k(e));break;case"Do":null!=e&&(o[Ie]=k(parseInt(e.match(/\d{1,2}/)[0],10)));break;case"DDD":case"DDDD":null!=e&&(i._dayOfYear=k(e));break;case"YY":o[ke]=De.parseTwoDigitYear(e);break;case"YYYY":case"YYYYY":case"YYYYYY":o[ke]=k(e);break;case"a":case"A":i._isPm=i._locale.isPM(e);break;case"h":case"hh":i._pf.bigHour=!0;case"H":case"HH":o[Ae]=k(e);break;case"m":case"mm":o[ze]=k(e);break;case"s":case"ss":o[Pe]=k(e);break;case"S":case"SS":case"SSS":case"SSSS":o[Re]=k(1e3*("0."+e));break;case"x":i._d=new Date(k(e));break;case"X":i._d=new Date(1e3*parseFloat(e));break;case"Z":case"ZZ":i._useUTC=!0,i._tzm=X(e);break;case"dd":case"ddd":case"dddd":s=i._locale.weekdaysParse(e),null!=s?(i._w=i._w||{},i._w.d=s):i._pf.invalidWeekday=e;break;case"w":case"ww":case"W":case"WW":case"d":case"e":case"E":t=t.substr(0,1);case"gggg":case"GGGG":case"GGGGG":t=t.substr(0,2),e&&(i._w=i._w||{},i._w[t]=k(e));break;case"gg":case"GG":i._w=i._w||{},i._w[t]=De.parseTwoDigitYear(e)}}function Z(t){var e,i,s,o,n,a,h;e=t._w,null!=e.GG||null!=e.W||null!=e.E?(n=1,a=4,i=r(e.GG,t._a[ke],pe(De(),1,4).year),s=r(e.W,1),o=r(e.E,1)):(n=t._locale._week.dow,a=t._locale._week.doy,i=r(e.gg,t._a[ke],pe(De(),n,a).year),s=r(e.w,1),null!=e.d?(o=e.d,n>o&&++s):o=null!=e.e?e.e+n:n),h=ue(i,s,o,a,n),t._a[ke]=h.year,t._dayOfYear=h.dayOfYear}function K(t){var e,i,s,o,n=[];if(!t._d){for(s=$(t),t._w&&null==t._a[Ie]&&null==t._a[Ne]&&Z(t),t._dayOfYear&&(o=r(t._a[ke],s[ke]),t._dayOfYear>A(o)&&(t._pf._overflowDayOfYear=!0),i=he(o,0,t._dayOfYear),t._a[Ne]=i.getUTCMonth(),t._a[Ie]=i.getUTCDate()),e=0;3>e&&null==t._a[e];++e)t._a[e]=n[e]=s[e];for(;7>e;e++)t._a[e]=n[e]=null==t._a[e]?2===e?1:0:t._a[e];24===t._a[Ae]&&0===t._a[ze]&&0===t._a[Pe]&&0===t._a[Re]&&(t._nextDay=!0,t._a[Ae]=0),t._d=(t._useUTC?he:ae).apply(null,n),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()+t._tzm),t._nextDay&&(t._a[Ae]=24)}}function Q(t){var e;t._d||(e=O(t._i),t._a=[e.year,e.month,e.day||e.date,e.hour,e.minute,e.second,e.millisecond],K(t))}function $(t){var e=new Date;return t._useUTC?[e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()]:[e.getFullYear(),e.getMonth(),e.getDate()]}function J(t){if(t._f===De.ISO_8601)return void se(t);t._a=[],t._pf.empty=!0;var e,i,s,o,r,a=""+t._i,h=a.length,d=0;for(s=U(t._f,t._locale).match(je)||[],e=0;e0&&t._pf.unusedInput.push(r),a=a.slice(a.indexOf(i)+i.length),d+=i.length),_i[o]?(i?t._pf.empty=!1:t._pf.unusedTokens.push(o),q(o,i,t)):t._strict&&!i&&t._pf.unusedTokens.push(o);t._pf.charsLeftOver=h-d,a.length>0&&t._pf.unusedInput.push(a),t._pf.bigHour===!0&&t._a[Ae]<=12&&(t._pf.bigHour=n),t._isPm&&t._a[Ae]<12&&(t._a[Ae]+=12),t._isPm===!1&&12===t._a[Ae]&&(t._a[Ae]=0),K(t),P(t)}function te(t){return t.replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(t,e,i,s,o){return e||i||s||o})}function ee(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function ie(t){var e,i,s,o,n;if(0===t._f.length)return t._pf.invalidFormat=!0,void(t._d=new Date(0/0));for(o=0;on)&&(s=n,i=e));v(t,i||e)}function se(t){var e,i,s=t._i,o=hi.exec(s);if(o){for(t._pf.iso=!0,e=0,i=li.length;i>e;e++)if(li[e][1].exec(s)){t._f=li[e][0]+(o[6]||" ");break}for(e=0,i=ci.length;i>e;e++)if(ci[e][1].exec(s)){t._f+=ci[e][0];break}s.match($e)&&(t._f+="Z"),J(t)}else t._isValid=!1}function oe(t){se(t),t._isValid===!1&&(delete t._isValid,De.createFromInputFallback(t))}function ne(t,e){var i,s=[];for(i=0;it&&a.setFullYear(t),a}function he(t){var e=new Date(Date.UTC.apply(null,arguments));return 1970>t&&e.setUTCFullYear(t),e}function de(t,e){if("string"==typeof t)if(isNaN(t)){if(t=e.weekdaysParse(t),"number"!=typeof t)return null}else t=parseInt(t,10);return t}function le(t,e,i,s,o){return o.relativeTime(e||1,!!i,t,s)}function ce(t,e,i){var s=De.duration(t).abs(),o=Oe(s.as("s")),n=Oe(s.as("m")),r=Oe(s.as("h")),a=Oe(s.as("d")),h=Oe(s.as("M")),d=Oe(s.as("y")),l=o0,l[4]=i,le.apply({},l)}function pe(t,e,i){var s,o=i-e,n=i-t.day();return n>o&&(n-=7),o-7>n&&(n+=7),s=De(t).add(n,"d"),{week:Math.ceil(s.dayOfYear()/7),year:s.year()}}function ue(t,e,i,s,o){var n,r,a=he(t,0,1).getUTCDay();return a=0===a?7:a,i=null!=i?i:o,n=o-a+(a>s?7:0)-(o>a?7:0),r=7*(e-1)+(i-o)+n+1,{year:r>0?t:t-1,dayOfYear:r>0?r:A(t-1)+r}}function me(t){var e,i=t._i,s=t._f;return t._locale=t._locale||De.localeData(t._l),null===i||s===n&&""===i?De.invalid({nullInput:!0}):("string"==typeof i&&(t._i=i=t._locale.preparse(i)),De.isMoment(i)?new f(i,!0):(s?M(s)?ie(t):J(t):re(t),e=new f(t),e._nextDay&&(e.add(1,"d"),e._nextDay=n),e))}function fe(t,e){var i,s;if(1===e.length&&M(e[0])&&(e=e[0]),!e.length)return De();for(i=e[0],s=1;s=0?"+":"-";return e+_(Math.abs(t),6)},gg:function(){return _(this.weekYear()%100,2)},gggg:function(){return _(this.weekYear(),4)},ggggg:function(){return _(this.weekYear(),5)},GG:function(){return _(this.isoWeekYear()%100,2)},GGGG:function(){return _(this.isoWeekYear(),4)},GGGGG:function(){return _(this.isoWeekYear(),5)},e:function(){return this.weekday()},E:function(){return this.isoWeekday()},a:function(){return this.localeData().meridiem(this.hours(),this.minutes(),!0)},A:function(){return this.localeData().meridiem(this.hours(),this.minutes(),!1)},H:function(){return this.hours()},h:function(){return this.hours()%12||12},m:function(){return this.minutes()},s:function(){return this.seconds()},S:function(){return k(this.milliseconds()/100)},SS:function(){return _(k(this.milliseconds()/10),2)},SSS:function(){return _(this.milliseconds(),3)},SSSS:function(){return _(this.milliseconds(),3)},Z:function(){var t=-this.zone(),e="+";return 0>t&&(t=-t,e="-"),e+_(k(t/60),2)+":"+_(k(t)%60,2)},ZZ:function(){var t=-this.zone(),e="+";return 0>t&&(t=-t,e="-"),e+_(k(t/60),2)+_(k(t)%60,2)},z:function(){return this.zoneAbbr()},zz:function(){return this.zoneName()},x:function(){return this.valueOf()},X:function(){return this.unix()},Q:function(){return this.quarter()}},xi={},wi=["months","monthsShort","weekdays","weekdaysShort","weekdaysMin"];yi.length;)Ce=yi.pop(),_i[Ce+"o"]=u(_i[Ce],Ce);for(;bi.length;)Ce=bi.pop(),_i[Ce+Ce]=p(_i[Ce],2);_i.DDDD=p(_i.DDD,3),v(m.prototype,{set:function(t){var e,i;for(i in t)e=t[i],"function"==typeof e?this[i]=e:this["_"+i]=e;this._ordinalParseLenient=new RegExp(this._ordinalParse.source+"|"+/\d{1,2}/.source)},_months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),months:function(t){return this._months[t.month()]},_monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),monthsShort:function(t){return this._monthsShort[t.month()]},monthsParse:function(t,e,i){var s,o,n;for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),s=0;12>s;s++){if(o=De.utc([2e3,s]),i&&!this._longMonthsParse[s]&&(this._longMonthsParse[s]=new RegExp("^"+this.months(o,"").replace(".","")+"$","i"),this._shortMonthsParse[s]=new RegExp("^"+this.monthsShort(o,"").replace(".","")+"$","i")),i||this._monthsParse[s]||(n="^"+this.months(o,"")+"|^"+this.monthsShort(o,""),this._monthsParse[s]=new RegExp(n.replace(".",""),"i")),i&&"MMMM"===e&&this._longMonthsParse[s].test(t))return s;if(i&&"MMM"===e&&this._shortMonthsParse[s].test(t))return s;if(!i&&this._monthsParse[s].test(t))return s}},_weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdays:function(t){return this._weekdays[t.day()]},_weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysShort:function(t){return this._weekdaysShort[t.day()]},_weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),weekdaysMin:function(t){return this._weekdaysMin[t.day()]},weekdaysParse:function(t){var e,i,s;for(this._weekdaysParse||(this._weekdaysParse=[]),e=0;7>e;e++)if(this._weekdaysParse[e]||(i=De([2e3,1]).day(e),s="^"+this.weekdays(i,"")+"|^"+this.weekdaysShort(i,"")+"|^"+this.weekdaysMin(i,""),this._weekdaysParse[e]=new RegExp(s.replace(".",""),"i")),this._weekdaysParse[e].test(t))return e},_longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY LT",LLLL:"dddd, MMMM D, YYYY LT"},longDateFormat:function(t){var e=this._longDateFormat[t];return!e&&this._longDateFormat[t.toUpperCase()]&&(e=this._longDateFormat[t.toUpperCase()].replace(/MMMM|MM|DD|dddd/g,function(t){return t.slice(1)}),this._longDateFormat[t]=e),e},isPM:function(t){return"p"===(t+"").toLowerCase().charAt(0)},_meridiemParse:/[ap]\.?m?\.?/i,meridiem:function(t,e,i){return t>11?i?"pm":"PM":i?"am":"AM"},_calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},calendar:function(t,e,i){var s=this._calendar[t];return"function"==typeof s?s.apply(e,[i]):s},_relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},relativeTime:function(t,e,i,s){var o=this._relativeTime[i];return"function"==typeof o?o(t,e,i,s):o.replace(/%d/i,t)},pastFuture:function(t,e){var i=this._relativeTime[t>0?"future":"past"];return"function"==typeof i?i(e):i.replace(/%s/i,e)},ordinal:function(t){return this._ordinal.replace("%d",t)},_ordinal:"%d",_ordinalParse:/\d{1,2}/,preparse:function(t){return t},postformat:function(t){return t},week:function(t){return pe(t,this._week.dow,this._week.doy).week},_week:{dow:0,doy:6},_invalidDate:"Invalid date",invalidDate:function(){return this._invalidDate}}),De=function(t,e,i,s){var o;return"boolean"==typeof i&&(s=i,i=n),o={},o._isAMomentObject=!0,o._i=t,o._f=e,o._l=i,o._strict=s,o._isUTC=!1,o._pf=h(),me(o)},De.suppressDeprecationWarnings=!1,De.createFromInputFallback=l("moment construction falls back to js Date. This is discouraged and will be removed in upcoming major release. Please refer to https://github.com/moment/moment/issues/1407 for more info.",function(t){t._d=new Date(t._i+(t._useUTC?" UTC":""))}),De.min=function(){var t=[].slice.call(arguments,0);return fe("isBefore",t)},De.max=function(){var t=[].slice.call(arguments,0);return fe("isAfter",t)},De.utc=function(t,e,i,s){var o;return"boolean"==typeof i&&(s=i,i=n),o={},o._isAMomentObject=!0,o._useUTC=!0,o._isUTC=!0,o._l=i,o._i=t,o._f=e,o._strict=s,o._pf=h(),me(o).utc()},De.unix=function(t){return De(1e3*t)},De.duration=function(t,e){var i,s,o,n,r=t,h=null;return De.isDuration(t)?r={ms:t._milliseconds,d:t._days,M:t._months}:"number"==typeof t?(r={},e?r[e]=t:r.milliseconds=t):(h=Be.exec(t))?(i="-"===h[1]?-1:1,r={y:0,d:k(h[Ie])*i,h:k(h[Ae])*i,m:k(h[ze])*i,s:k(h[Pe])*i,ms:k(h[Re])*i}):(h=Ge.exec(t))?(i="-"===h[1]?-1:1,o=function(t){var e=t&&parseFloat(t.replace(",","."));return(isNaN(e)?0:e)*i},r={y:o(h[2]),M:o(h[3]),d:o(h[4]),h:o(h[5]),m:o(h[6]),s:o(h[7]),w:o(h[8])}):"object"==typeof r&&("from"in r||"to"in r)&&(n=w(De(r.from),De(r.to)),r={},r.ms=n.milliseconds,r.M=n.months),s=new g(r),De.isDuration(t)&&a(t,"_locale")&&(s._locale=t._locale),s},De.version=Ee,De.defaultFormat=di,De.ISO_8601=function(){},De.momentProperties=He,De.updateOffset=function(){},De.relativeTimeThreshold=function(t,e){return vi[t]===n?!1:e===n?vi[t]:(vi[t]=e,!0)},De.lang=l("moment.lang is deprecated. Use moment.locale instead.",function(t,e){return De.locale(t,e)}),De.locale=function(t,e){var i;return t&&(i="undefined"!=typeof e?De.defineLocale(t,e):De.localeData(t),i&&(De.duration._locale=De._locale=i)),De._locale._abbr},De.defineLocale=function(t,e){return null!==e?(e.abbr=t,Fe[t]||(Fe[t]=new m),Fe[t].set(e),De.locale(t),Fe[t]):(delete Fe[t],null)},De.langData=l("moment.langData is deprecated. Use moment.localeData instead.",function(t){return De.localeData(t)}),De.localeData=function(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return De._locale;if(!M(t)){if(e=Y(t))return e;t=[t]}return H(t)},De.isMoment=function(t){return t instanceof f||null!=t&&a(t,"_isAMomentObject")},De.isDuration=function(t){return t instanceof g};for(Ce=wi.length-1;Ce>=0;--Ce)L(wi[Ce]);De.normalizeUnits=function(t){return T(t)},De.invalid=function(t){var e=De.utc(0/0);return null!=t?v(e._pf,t):e._pf.userInvalidated=!0,e -},De.parseZone=function(){return De.apply(null,arguments).parseZone()},De.parseTwoDigitYear=function(t){return k(t)+(k(t)>68?1900:2e3)},v(De.fn=f.prototype,{clone:function(){return De(this)},valueOf:function(){return+this._d+6e4*(this._offset||0)},unix:function(){return Math.floor(+this/1e3)},toString:function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},toDate:function(){return this._offset?new Date(+this):this._d},toISOString:function(){var t=De(this).utc();return 00:!1},parsingFlags:function(){return v({},this._pf)},invalidAt:function(){return this._pf.overflow},utc:function(t){return this.zone(0,t)},local:function(t){return this._isUTC&&(this.zone(0,t),this._isUTC=!1,t&&this.add(this._dateTzOffset(),"m")),this},format:function(t){var e=j(this,t||De.defaultFormat);return this.localeData().postformat(e)},add:S(1,"add"),subtract:S(-1,"subtract"),diff:function(t,e,i){var s,o,n,r=W(t,this),a=6e4*(this.zone()-r.zone());return e=T(e),"year"===e||"month"===e?(s=432e5*(this.daysInMonth()+r.daysInMonth()),o=12*(this.year()-r.year())+(this.month()-r.month()),n=this-De(this).startOf("month")-(r-De(r).startOf("month")),n-=6e4*(this.zone()-De(this).startOf("month").zone()-(r.zone()-De(r).startOf("month").zone())),o+=n/s,"year"===e&&(o/=12)):(s=this-r,o="second"===e?s/1e3:"minute"===e?s/6e4:"hour"===e?s/36e5:"day"===e?(s-a)/864e5:"week"===e?(s-a)/6048e5:s),i?o:b(o)},from:function(t,e){return De.duration({to:this,from:t}).locale(this.locale()).humanize(!e)},fromNow:function(t){return this.from(De(),t)},calendar:function(t){var e=t||De(),i=W(e,this).startOf("day"),s=this.diff(i,"days",!0),o=-6>s?"sameElse":-1>s?"lastWeek":0>s?"lastDay":1>s?"sameDay":2>s?"nextDay":7>s?"nextWeek":"sameElse";return this.format(this.localeData().calendar(o,this,De(e)))},isLeapYear:function(){return z(this.year())},isDST:function(){return this.zone()+t):(i=De.isMoment(t)?+t:+De(t),i<+this.clone().startOf(e))},isBefore:function(t,e){var i;return e=T("undefined"!=typeof e?e:"millisecond"),"millisecond"===e?(t=De.isMoment(t)?t:De(t),+t>+this):(i=De.isMoment(t)?+t:+De(t),+this.clone().endOf(e)t?this:t}),max:l("moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548",function(t){return t=De.apply(null,arguments),t>this?this:t}),zone:function(t,e){var i,s=this._offset||0;return null==t?this._isUTC?s:this._dateTzOffset():("string"==typeof t&&(t=X(t)),Math.abs(t)<16&&(t=60*t),!this._isUTC&&e&&(i=this._dateTzOffset()),this._offset=t,this._isUTC=!0,null!=i&&this.subtract(i,"m"),s!==t&&(!e||this._changeInProgress?D(this,De.duration(s-t,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,De.updateOffset(this,!0),this._changeInProgress=null)),this)},zoneAbbr:function(){return this._isUTC?"UTC":""},zoneName:function(){return this._isUTC?"Coordinated Universal Time":""},parseZone:function(){return this._tzm?this.zone(this._tzm):"string"==typeof this._i&&this.zone(this._i),this},hasAlignedHourOffset:function(t){return t=t?De(t).zone():0,(this.zone()-t)%60===0},daysInMonth:function(){return N(this.year(),this.month())},dayOfYear:function(t){var e=Oe((De(this).startOf("day")-De(this).startOf("year"))/864e5)+1;return null==t?e:this.add(t-e,"d")},quarter:function(t){return null==t?Math.ceil((this.month()+1)/3):this.month(3*(t-1)+this.month()%3)},weekYear:function(t){var e=pe(this,this.localeData()._week.dow,this.localeData()._week.doy).year;return null==t?e:this.add(t-e,"y")},isoWeekYear:function(t){var e=pe(this,1,4).year;return null==t?e:this.add(t-e,"y")},week:function(t){var e=this.localeData().week(this);return null==t?e:this.add(7*(t-e),"d")},isoWeek:function(t){var e=pe(this,1,4).week;return null==t?e:this.add(7*(t-e),"d")},weekday:function(t){var e=(this.day()+7-this.localeData()._week.dow)%7;return null==t?e:this.add(t-e,"d")},isoWeekday:function(t){return null==t?this.day()||7:this.day(this.day()%7?t:t-7)},isoWeeksInYear:function(){return I(this.year(),1,4)},weeksInYear:function(){var t=this.localeData()._week;return I(this.year(),t.dow,t.doy)},get:function(t){return t=T(t),this[t]()},set:function(t,e){return t=T(t),"function"==typeof this[t]&&this[t](e),this},locale:function(t){var e;return t===n?this._locale._abbr:(e=De.localeData(t),null!=e&&(this._locale=e),this)},lang:l("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(t){return t===n?this.localeData():this.locale(t)}),localeData:function(){return this._locale},_dateTzOffset:function(){return 15*Math.round(this._d.getTimezoneOffset()/15)}}),De.fn.millisecond=De.fn.milliseconds=be("Milliseconds",!1),De.fn.second=De.fn.seconds=be("Seconds",!1),De.fn.minute=De.fn.minutes=be("Minutes",!1),De.fn.hour=De.fn.hours=be("Hours",!0),De.fn.date=be("Date",!0),De.fn.dates=l("dates accessor is deprecated. Use date instead.",be("Date",!0)),De.fn.year=be("FullYear",!0),De.fn.years=l("years accessor is deprecated. Use year instead.",be("FullYear",!0)),De.fn.days=De.fn.day,De.fn.months=De.fn.month,De.fn.weeks=De.fn.week,De.fn.isoWeeks=De.fn.isoWeek,De.fn.quarters=De.fn.quarter,De.fn.toJSON=De.fn.toISOString,v(De.duration.fn=g.prototype,{_bubble:function(){var t,e,i,s=this._milliseconds,o=this._days,n=this._months,r=this._data,a=0;r.milliseconds=s%1e3,t=b(s/1e3),r.seconds=t%60,e=b(t/60),r.minutes=e%60,i=b(e/60),r.hours=i%24,o+=b(i/24),a=b(_e(o)),o-=b(xe(a)),n+=b(o/30),o%=30,a+=b(n/12),n%=12,r.days=o,r.months=n,r.years=a},abs:function(){return this._milliseconds=Math.abs(this._milliseconds),this._days=Math.abs(this._days),this._months=Math.abs(this._months),this._data.milliseconds=Math.abs(this._data.milliseconds),this._data.seconds=Math.abs(this._data.seconds),this._data.minutes=Math.abs(this._data.minutes),this._data.hours=Math.abs(this._data.hours),this._data.months=Math.abs(this._data.months),this._data.years=Math.abs(this._data.years),this},weeks:function(){return b(this.days()/7)},valueOf:function(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*k(this._months/12)},humanize:function(t){var e=ce(this,!t,this.localeData());return t&&(e=this.localeData().pastFuture(+this,e)),this.localeData().postformat(e)},add:function(t,e){var i=De.duration(t,e);return this._milliseconds+=i._milliseconds,this._days+=i._days,this._months+=i._months,this._bubble(),this},subtract:function(t,e){var i=De.duration(t,e);return this._milliseconds-=i._milliseconds,this._days-=i._days,this._months-=i._months,this._bubble(),this},get:function(t){return t=T(t),this[t.toLowerCase()+"s"]()},as:function(t){var e,i;if(t=T(t),"month"===t||"year"===t)return e=this._days+this._milliseconds/864e5,i=this._months+12*_e(e),"month"===t?i:i/12;switch(e=this._days+Math.round(xe(this._months/12)),t){case"week":return e/7+this._milliseconds/6048e5;case"day":return e+this._milliseconds/864e5;case"hour":return 24*e+this._milliseconds/36e5;case"minute":return 24*e*60+this._milliseconds/6e4;case"second":return 24*e*60*60+this._milliseconds/1e3;case"millisecond":return Math.floor(24*e*60*60*1e3)+this._milliseconds;default:throw new Error("Unknown unit "+t)}},lang:De.fn.lang,locale:De.fn.locale,toIsoString:l("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",function(){return this.toISOString()}),toISOString:function(){var t=Math.abs(this.years()),e=Math.abs(this.months()),i=Math.abs(this.days()),s=Math.abs(this.hours()),o=Math.abs(this.minutes()),n=Math.abs(this.seconds()+this.milliseconds()/1e3);return this.asSeconds()?(this.asSeconds()<0?"-":"")+"P"+(t?t+"Y":"")+(e?e+"M":"")+(i?i+"D":"")+(s||o||n?"T":"")+(s?s+"H":"")+(o?o+"M":"")+(n?n+"S":""):"P0D"},localeData:function(){return this._locale}}),De.duration.fn.toString=De.duration.fn.toISOString;for(Ce in ui)a(ui,Ce)&&we(Ce.toLowerCase());De.duration.fn.asMilliseconds=function(){return this.as("ms")},De.duration.fn.asSeconds=function(){return this.as("s")},De.duration.fn.asMinutes=function(){return this.as("m")},De.duration.fn.asHours=function(){return this.as("h")},De.duration.fn.asDays=function(){return this.as("d")},De.duration.fn.asWeeks=function(){return this.as("weeks")},De.duration.fn.asMonths=function(){return this.as("M")},De.duration.fn.asYears=function(){return this.as("y")},De.locale("en",{ordinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10,i=1===k(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th";return t+i}}),Ye?o.exports=De:(s=function(t,e,i){return i.config&&i.config()&&i.config().noGlobal===!0&&(Te.moment=Me),De}.call(e,i,e,o),!(s!==n&&(o.exports=s)),Se(!0))}).call(this)}).call(e,function(){return this}(),i(71)(t))},function(t,e,i){var s;!function(o,n,r,a){function h(t,e,i){return setTimeout(m(t,i),e)}function d(t,e,i){return Array.isArray(t)?(l(t,i[e],i),!0):!1}function l(t,e,i){var s;if(t)if(t.forEach)t.forEach(e,i);else if(t.length!==a)for(s=0;s-1}function x(t){return t.trim().split(/\s+/g)}function w(t,e,i){if(t.indexOf&&!i)return t.indexOf(e);for(var s=0;si[e]}):s.sort()),s}function M(t,e){for(var i,s,o=e[0].toUpperCase()+e.slice(1),n=0;n1&&!i.firstMultiple?i.firstMultiple=A(e):1===o&&(i.firstMultiple=!1);var n=i.firstInput,r=i.firstMultiple,a=r?r.center:n.center,h=e.center=z(s);e.timeStamp=ve(),e.deltaTime=e.timeStamp-n.timeStamp,e.angle=H(a,h),e.distance=F(a,h),N(i,e),e.offsetDirection=R(e.deltaX,e.deltaY),e.scale=r?W(r.pointers,s):1,e.rotation=r?Y(r.pointers,s):0,I(i,e);var d=t.element;b(e.srcEvent.target,d)&&(d=e.srcEvent.target),e.target=d}function N(t,e){var i=e.center,s=t.offsetDelta||{},o=t.prevDelta||{},n=t.prevInput||{};(e.eventType===Te||n.eventType===Le)&&(o=t.prevDelta={x:n.deltaX||0,y:n.deltaY||0},s=t.offsetDelta={x:i.x,y:i.y}),e.deltaX=o.x+(i.x-s.x),e.deltaY=o.y+(i.y-s.y)}function I(t,e){var i,s,o,n,r=t.lastInterval||e,h=e.timeStamp-r.timeStamp;if(e.eventType!=ke&&(h>Ee||r.velocity===a)){var d=r.deltaX-e.deltaX,l=r.deltaY-e.deltaY,c=P(h,d,l);s=c.x,o=c.y,i=ge(c.x)>ge(c.y)?c.x:c.y,n=R(d,l),t.lastInterval=e}else i=r.velocity,s=r.velocityX,o=r.velocityY,n=r.direction;e.velocity=i,e.velocityX=s,e.velocityY=o,e.direction=n}function A(t){for(var e=[],i=0;io;)i+=t[o].clientX,s+=t[o].clientY,o++;return{x:fe(i/e),y:fe(s/e)}}function P(t,e,i){return{x:e/t||0,y:i/t||0}}function R(t,e){return t===e?Ne:ge(t)>=ge(e)?t>0?Ie:Ae:e>0?ze:Pe}function F(t,e,i){i||(i=Ye);var s=e[i[0]]-t[i[0]],o=e[i[1]]-t[i[1]];return Math.sqrt(s*s+o*o)}function H(t,e,i){i||(i=Ye);var s=e[i[0]]-t[i[0]],o=e[i[1]]-t[i[1]];return 180*Math.atan2(o,s)/Math.PI}function Y(t,e){return H(e[1],e[0],We)-H(t[1],t[0],We)}function W(t,e){return F(e[0],e[1],We)/F(t[0],t[1],We)}function B(){this.evEl=Ge,this.evWin=je,this.allow=!0,this.pressed=!1,T.apply(this,arguments)}function G(){this.evEl=Xe,this.evWin=qe,T.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function j(){this.evTarget=Ke,this.evWin=Qe,this.started=!1,T.apply(this,arguments)}function U(t,e){var i=S(t.touches),s=S(t.changedTouches);return e&(Le|ke)&&(i=D(i.concat(s),"identifier",!0)),[i,s]}function V(){this.evTarget=Je,this.targetIds={},T.apply(this,arguments)}function X(t,e){var i=S(t.touches),s=this.targetIds;if(e&(Te|Oe)&&1===i.length)return s[i[0].identifier]=!0,[i,i];var o,n,r=S(t.changedTouches),a=[],h=this.target;if(n=i.filter(function(t){return b(t.target,h)}),e===Te)for(o=0;oa&&(e.push(t),a=e.length-1):o&(Le|ke)&&(i=!0),0>a||(e[a]=t,this.callback(this.manager,o,{pointers:e,changedPointers:[t],pointerType:n,srcEvent:t}),i&&e.splice(a,1))}});var Ze={touchstart:Te,touchmove:Oe,touchend:Le,touchcancel:ke},Ke="touchstart",Qe="touchstart touchmove touchend touchcancel";u(j,T,{handler:function(t){var e=Ze[t.type];if(e===Te&&(this.started=!0),this.started){var i=U.call(this,t,e);e&(Le|ke)&&i[0].length-i[1].length===0&&(this.started=!1),this.callback(this.manager,e,{pointers:i[0],changedPointers:i[1],pointerType:Se,srcEvent:t})}}});var $e={touchstart:Te,touchmove:Oe,touchend:Le,touchcancel:ke},Je="touchstart touchmove touchend touchcancel";u(V,T,{handler:function(t){var e=$e[t.type],i=X.call(this,t,e);i&&this.callback(this.manager,e,{pointers:i[0],changedPointers:i[1],pointerType:Se,srcEvent:t})}}),u(q,T,{handler:function(t,e,i){var s=i.pointerType==Se,o=i.pointerType==Me;if(s)this.mouse.allow=!1;else if(o&&!this.mouse.allow)return;e&(Le|ke)&&(this.mouse.allow=!0),this.callback(t,e,i)},destroy:function(){this.touch.destroy(),this.mouse.destroy()}});var ti=M(ue.style,"touchAction"),ei=ti!==a,ii="compute",si="auto",oi="manipulation",ni="none",ri="pan-x",ai="pan-y";Z.prototype={set:function(t){t==ii&&(t=this.compute()),ei&&(this.manager.element.style[ti]=t),this.actions=t.toLowerCase().trim()},update:function(){this.set(this.manager.options.touchAction)},compute:function(){var t=[];return l(this.manager.recognizers,function(e){f(e.options.enable,[e])&&(t=t.concat(e.getTouchAction()))}),K(t.join(" "))},preventDefaults:function(t){if(!ei){var e=t.srcEvent,i=t.offsetDirection;if(this.manager.session.prevented)return void e.preventDefault();var s=this.actions,o=_(s,ni),n=_(s,ai),r=_(s,ri);return o||n&&i&Re||r&&i&Fe?this.preventSrc(e):void 0}},preventSrc:function(t){this.manager.session.prevented=!0,t.preventDefault()}};var hi=1,di=2,li=4,ci=8,pi=ci,ui=16,mi=32;Q.prototype={defaults:{},set:function(t){return c(this.options,t),this.manager&&this.manager.touchAction.update(),this},recognizeWith:function(t){if(d(t,"recognizeWith",this))return this;var e=this.simultaneous;return t=te(t,this),e[t.id]||(e[t.id]=t,t.recognizeWith(this)),this},dropRecognizeWith:function(t){return d(t,"dropRecognizeWith",this)?this:(t=te(t,this),delete this.simultaneous[t.id],this)},requireFailure:function(t){if(d(t,"requireFailure",this))return this;var e=this.requireFail;return t=te(t,this),-1===w(e,t)&&(e.push(t),t.requireFailure(this)),this},dropRequireFailure:function(t){if(d(t,"dropRequireFailure",this))return this;t=te(t,this);var e=w(this.requireFail,t);return e>-1&&this.requireFail.splice(e,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(t){return!!this.simultaneous[t.id]},emit:function(t){function e(e){i.manager.emit(i.options.event+(e?$(s):""),t)}var i=this,s=this.state;ci>s&&e(!0),e(),s>=ci&&e(!0)},tryEmit:function(t){return this.canEmit()?this.emit(t):void(this.state=mi)},canEmit:function(){for(var t=0;tn?Ie:Ae,i=n!=this.pX,s=Math.abs(t.deltaX)):(o=0===r?Ne:0>r?ze:Pe,i=r!=this.pY,s=Math.abs(t.deltaY))),t.direction=o,i&&s>e.threshold&&o&e.direction},attrTest:function(t){return ee.prototype.attrTest.call(this,t)&&(this.state&di||!(this.state&di)&&this.directionTest(t))},emit:function(t){this.pX=t.deltaX,this.pY=t.deltaY;var e=J(t.direction);e&&this.manager.emit(this.options.event+e,t),this._super.emit.call(this,t)}}),u(se,ee,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[ni]},attrTest:function(t){return this._super.attrTest.call(this,t)&&(Math.abs(t.scale-1)>this.options.threshold||this.state&di)},emit:function(t){if(this._super.emit.call(this,t),1!==t.scale){var e=t.scale<1?"in":"out";this.manager.emit(this.options.event+e,t)}}}),u(oe,Q,{defaults:{event:"press",pointers:1,time:500,threshold:5},getTouchAction:function(){return[si]},process:function(t){var e=this.options,i=t.pointers.length===e.pointers,s=t.distancee.time;if(this._input=t,!s||!i||t.eventType&(Le|ke)&&!o)this.reset();else if(t.eventType&Te)this.reset(),this._timer=h(function(){this.state=pi,this.tryEmit()},e.time,this);else if(t.eventType&Le)return pi;return mi},reset:function(){clearTimeout(this._timer)},emit:function(t){this.state===pi&&(t&&t.eventType&Le?this.manager.emit(this.options.event+"up",t):(this._input.timeStamp=ve(),this.manager.emit(this.options.event,this._input)))}}),u(ne,ee,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[ni]},attrTest:function(t){return this._super.attrTest.call(this,t)&&(Math.abs(t.rotation)>this.options.threshold||this.state&di)}}),u(re,ee,{defaults:{event:"swipe",threshold:10,velocity:.65,direction:Re|Fe,pointers:1},getTouchAction:function(){return ie.prototype.getTouchAction.call(this)},attrTest:function(t){var e,i=this.options.direction;return i&(Re|Fe)?e=t.velocity:i&Re?e=t.velocityX:i&Fe&&(e=t.velocityY),this._super.attrTest.call(this,t)&&i&t.direction&&t.distance>this.options.threshold&&ge(e)>this.options.velocity&&t.eventType&Le},emit:function(t){var e=J(t.direction);e&&this.manager.emit(this.options.event+e,t),this.manager.emit(this.options.event,t)}}),u(ae,Q,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:2,posThreshold:10},getTouchAction:function(){return[oi]},process:function(t){var e=this.options,i=t.pointers.length===e.pointers,s=t.distancet&&s>o;)o%3==0?(this.forceAggregateHubs(!0),this.normalizeClusterLevels()):this.increaseClusterLevel(),i=this.nodeIndices.length,o+=1;o>0&&1==e&&this.repositionNodes(),this._updateCalculationNodes()},e.openCluster=function(t){var e=this.moving;if(t.clusterSize>this.constants.clustering.sectorThreshold&&this._nodeInActiveArea(t)&&("default"!=this._sector()||1!=this.nodeIndices.length)){this._addSector(t);for(var i=0;this.nodeIndices.lengthi;)this.decreaseClusterLevel(),i+=1}else this._expandClusterNode(t,!1,!0),this._updateNodeIndexList(),this._updateDynamicEdges(),this._updateCalculationNodes(),this.updateLabels();this.moving!=e&&this.start()},e.updateClustersDefault=function(){1==this.constants.clustering.enabled&&this.updateClusters(0,!1,!1)},e.increaseClusterLevel=function(){this.updateClusters(-1,!1,!0)},e.decreaseClusterLevel=function(){this.updateClusters(1,!1,!0)},e.updateClusters=function(t,e,i,s){var o=this.moving,n=this.nodeIndices.length;this.previousScale>this.scale&&0==t&&this._collapseSector(),this.previousScale>this.scale||-1==t?this._formClusters(i):(this.previousScalethis.scale||-1==t)&&(this._aggregateHubs(i),this._updateNodeIndexList()),(this.previousScale>this.scale||-1==t)&&(this.handleChains(),this._updateNodeIndexList()),this.previousScale=this.scale,this._updateDynamicEdges(),this.updateLabels(),this.nodeIndices.lengththis.constants.clustering.chainThreshold&&this._reduceAmountOfChains(1-this.constants.clustering.chainThreshold/t)},e._aggregateHubs=function(t){this._getHubSize(),this._formClustersByHub(t,!1)},e.forceAggregateHubs=function(t){var e=this.moving,i=this.nodeIndices.length;this._aggregateHubs(!0),this._updateNodeIndexList(),this._updateDynamicEdges(),this.updateLabels(),this.nodeIndices.length!=i&&(this.clusterSession+=1),(0==t||void 0===t)&&this.moving!=e&&this.start()},e._openClustersBySize=function(){for(var t in this.nodes)if(this.nodes.hasOwnProperty(t)){var e=this.nodes[t];1==e.inView()&&(e.width*this.scale>this.constants.clustering.screenSizeThreshold*this.frame.canvas.clientWidth||e.height*this.scale>this.constants.clustering.screenSizeThreshold*this.frame.canvas.clientHeight)&&this.openCluster(e)}},e._openClusters=function(t,e){for(var i=0;i1&&(t.clusterSizei)){var r=n.from,a=n.to;n.to.options.mass>n.from.options.mass&&(r=n.to,a=n.from),1==a.dynamicEdgesLength?this._addToCluster(r,a,!1):1==r.dynamicEdgesLength&&this._addToCluster(a,r,!1)}}},e._forceClustersByZoom=function(){for(var t in this.nodes)if(this.nodes.hasOwnProperty(t)){var e=this.nodes[t];if(1==e.dynamicEdgesLength&&0!=e.dynamicEdges.length){var i=e.dynamicEdges[0],s=i.toId==e.id?this.nodes[i.fromId]:this.nodes[i.toId];e.id!=s.id&&(s.options.mass>e.options.mass?this._addToCluster(s,e,!0):this._addToCluster(e,s,!0))}}},e._clusterToSmallestNeighbour=function(t){for(var e=-1,i=null,s=0;so.clusterSessions.length&&(e=o.clusterSessions.length,i=o)}null!=o&&void 0!==this.nodes[o.id]&&this._addToCluster(o,t,!0)},e._formClustersByHub=function(t,e){for(var i in this.nodes)this.nodes.hasOwnProperty(i)&&this._formClusterFromHub(this.nodes[i],t,e)},e._formClusterFromHub=function(t,e,i,s){if(void 0===s&&(s=0),t.dynamicEdgesLength>=this.hubThreshold&&0==i||t.dynamicEdgesLength==this.hubThreshold&&1==i){for(var o,n,r,a=this.constants.clustering.clusterEdgeThreshold/this.scale,h=!1,d=[],l=t.dynamicEdges.length,c=0;l>c;c++)d.push(t.dynamicEdges[c].id);if(0==e)for(h=!1,c=0;l>c;c++){var p=this.edges[d[c]];if(void 0!==p&&p.connected&&p.toId!=p.fromId&&(o=p.to.x-p.from.x,n=p.to.y-p.from.y,r=Math.sqrt(o*o+n*n),a>r)){h=!0;break}}if(!e&&h||e)for(c=0;l>c;c++)if(p=this.edges[d[c]],void 0!==p){var u=this.nodes[p.fromId==t.id?p.toId:p.fromId];u.dynamicEdges.length<=this.hubThreshold+s&&u.id!=t.id&&this._addToCluster(t,u,e)}}},e._addToCluster=function(t,e,i){t.containedNodes[e.id]=e;for(var s=0;s1)for(var s=0;s1&&(e.label="[".concat(String(e.clusterSize),"]"))}for(t in this.nodes)this.nodes.hasOwnProperty(t)&&(e=this.nodes[t],1==e.clusterSize&&(e.label=void 0!==e.originalLabel?e.originalLabel:String(e.id)))},e.normalizeClusterLevels=function(){var t,e=0,i=1e9,s=0;for(t in this.nodes)this.nodes.hasOwnProperty(t)&&(s=this.nodes[t].clusterSessions.length,s>e&&(e=s),i>s&&(i=s));if(e-i>this.constants.clustering.clusterLevelDifference){var o=this.nodeIndices.length,n=e-this.constants.clustering.clusterLevelDifference;for(t in this.nodes)this.nodes.hasOwnProperty(t)&&this.nodes[t].clusterSessions.lengths&&(s=n.dynamicEdgesLength),t+=n.dynamicEdgesLength,e+=Math.pow(n.dynamicEdgesLength,2),i+=1}t/=i,e/=i;var r=e-Math.pow(t,2),a=Math.sqrt(r);this.hubThreshold=Math.floor(t+2*a),this.hubThreshold>s&&(this.hubThreshold=s)},e._reduceAmountOfChains=function(t){this.hubThreshold=2;var e=Math.floor(this.nodeIndices.length*t);for(var i in this.nodes)this.nodes.hasOwnProperty(i)&&2==this.nodes[i].dynamicEdgesLength&&this.nodes[i].dynamicEdges.length>=2&&e>0&&(this._formClusterFromHub(this.nodes[i],!0,!0,1),e-=1)},e._getChainFraction=function(){var t=0,e=0;for(var i in this.nodes)this.nodes.hasOwnProperty(i)&&(2==this.nodes[i].dynamicEdgesLength&&this.nodes[i].dynamicEdges.length>=2&&(t+=1),e+=1);return t/e}},function(t,e,i){var s=i(1),o=i(40);e._putDataInSector=function(){this.sectors.active[this._sector()].nodes=this.nodes,this.sectors.active[this._sector()].edges=this.edges,this.sectors.active[this._sector()].nodeIndices=this.nodeIndices},e._switchToSector=function(t,e){void 0===e||"active"==e?this._switchToActiveSector(t):this._switchToFrozenSector(t)},e._switchToActiveSector=function(t){this.nodeIndices=this.sectors.active[t].nodeIndices,this.nodes=this.sectors.active[t].nodes,this.edges=this.sectors.active[t].edges},e._switchToSupportSector=function(){this.nodeIndices=this.sectors.support.nodeIndices,this.nodes=this.sectors.support.nodes,this.edges=this.sectors.support.edges},e._switchToFrozenSector=function(t){this.nodeIndices=this.sectors.frozen[t].nodeIndices,this.nodes=this.sectors.frozen[t].nodes,this.edges=this.sectors.frozen[t].edges},e._loadLatestSector=function(){this._switchToSector(this._sector())},e._sector=function(){return this.activeSector[this.activeSector.length-1]},e._previousSector=function(){if(this.activeSector.length>1)return this.activeSector[this.activeSector.length-2];throw new TypeError("there are not enough sectors in the this.activeSector array.")},e._setActiveSector=function(t){this.activeSector.push(t)},e._forgetLastSector=function(){this.activeSector.pop()},e._createNewSector=function(t){this.sectors.active[t]={nodes:{},edges:{},nodeIndices:[],formationScale:this.scale,drawingNode:void 0},this.sectors.active[t].drawingNode=new o({id:t,color:{background:"#eaefef",border:"495c5e"}},{},{},this.constants),this.sectors.active[t].drawingNode.clusterSize=2},e._deleteActiveSector=function(t){delete this.sectors.active[t]},e._deleteFrozenSector=function(t){delete this.sectors.frozen[t]},e._freezeSector=function(t){this.sectors.frozen[t]=this.sectors.active[t],this._deleteActiveSector(t)},e._activateSector=function(t){this.sectors.active[t]=this.sectors.frozen[t],this._deleteFrozenSector(t)},e._mergeThisWithFrozen=function(t){for(var e in this.nodes)this.nodes.hasOwnProperty(e)&&(this.sectors.frozen[t].nodes[e]=this.nodes[e]);for(var i in this.edges)this.edges.hasOwnProperty(i)&&(this.sectors.frozen[t].edges[i]=this.edges[i]);for(var s=0;s1?this[t](o[0],o[1]):this[t](e))}return this._loadLatestSector(),i},e._doInSupportSector=function(t,e){var i=!1;if(void 0===e)this._switchToSupportSector(),i=this[t]();else{this._switchToSupportSector();var s=Array.prototype.splice.call(arguments,1);i=s.length>1?this[t](s[0],s[1]):this[t](e)}return this._loadLatestSector(),i},e._doInAllFrozenSectors=function(t,e){if(void 0===e)for(var i in this.sectors.frozen)this.sectors.frozen.hasOwnProperty(i)&&(this._switchToFrozenSector(i),this[t]());else for(var i in this.sectors.frozen)if(this.sectors.frozen.hasOwnProperty(i)){this._switchToFrozenSector(i);var s=Array.prototype.splice.call(arguments,1);s.length>1?this[t](s[0],s[1]):this[t](e)}this._loadLatestSector()},e._doInAllSectors=function(t,e){var i=Array.prototype.splice.call(arguments,1);void 0===e?(this._doInAllActiveSectors(t),this._doInAllFrozenSectors(t)):i.length>1?(this._doInAllActiveSectors(t,i[0],i[1]),this._doInAllFrozenSectors(t,i[0],i[1])):(this._doInAllActiveSectors(t,e),this._doInAllFrozenSectors(t,e))},e._clearNodeIndexList=function(){var t=this._sector();this.sectors.active[t].nodeIndices=[],this.nodeIndices=this.sectors.active[t].nodeIndices},e._drawSectorNodes=function(t,e){var i,s=1e9,o=-1e9,n=1e9,r=-1e9;for(var a in this.sectors[e])if(this.sectors[e].hasOwnProperty(a)&&void 0!==this.sectors[e][a].drawingNode){this._switchToSector(a,e),s=1e9,o=-1e9,n=1e9,r=-1e9;for(var h in this.nodes)this.nodes.hasOwnProperty(h)&&(i=this.nodes[h],i.resize(t),n>i.x-.5*i.width&&(n=i.x-.5*i.width),ri.y-.5*i.height&&(s=i.y-.5*i.height),o0?this.nodes[i[i.length-1]]:null},e._getEdgesOverlappingWith=function(t,e){var i=this.edges;for(var s in i)i.hasOwnProperty(s)&&i[s].isOverlappingWith(t)&&e.push(s)},e._getAllEdgesOverlappingWith=function(t){var e=[];return this._doInAllActiveSectors("_getEdgesOverlappingWith",t,e),e},e._getEdgeAt=function(t){var e=this._pointerToPositionObject(t),i=this._getAllEdgesOverlappingWith(e);return i.length>0?this.edges[i[i.length-1]]:null},e._addToSelection=function(t){t instanceof s?this.selectionObj.nodes[t.id]=t:this.selectionObj.edges[t.id]=t},e._addToHover=function(t){t instanceof s?this.hoverObj.nodes[t.id]=t:this.hoverObj.edges[t.id]=t},e._removeFromSelection=function(t){t instanceof s?delete this.selectionObj.nodes[t.id]:delete this.selectionObj.edges[t.id]},e._unselectAll=function(t){void 0===t&&(t=!1);for(var e in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(e)&&this.selectionObj.nodes[e].unselect();for(var i in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(i)&&this.selectionObj.edges[i].unselect();this.selectionObj={nodes:{},edges:{}},0==t&&this.emit("select",this.getSelection())},e._unselectClusters=function(t){void 0===t&&(t=!1);for(var e in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(e)&&this.selectionObj.nodes[e].clusterSize>1&&(this.selectionObj.nodes[e].unselect(),this._removeFromSelection(this.selectionObj.nodes[e]));0==t&&this.emit("select",this.getSelection())},e._getSelectedNodeCount=function(){var t=0;for(var e in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(e)&&(t+=1);return t},e._getSelectedNode=function(){for(var t in this.selectionObj.nodes)if(this.selectionObj.nodes.hasOwnProperty(t))return this.selectionObj.nodes[t];return null},e._getSelectedEdge=function(){for(var t in this.selectionObj.edges)if(this.selectionObj.edges.hasOwnProperty(t))return this.selectionObj.edges[t];return null},e._getSelectedEdgeCount=function(){var t=0;for(var e in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(e)&&(t+=1);return t},e._getSelectedObjectCount=function(){var t=0;for(var e in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(e)&&(t+=1);for(var i in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(i)&&(t+=1);return t},e._selectionIsEmpty=function(){for(var t in this.selectionObj.nodes)if(this.selectionObj.nodes.hasOwnProperty(t))return!1;for(var e in this.selectionObj.edges)if(this.selectionObj.edges.hasOwnProperty(e))return!1;return!0},e._clusterInSelection=function(){for(var t in this.selectionObj.nodes)if(this.selectionObj.nodes.hasOwnProperty(t)&&this.selectionObj.nodes[t].clusterSize>1)return!0;return!1},e._selectConnectedEdges=function(t){for(var e=0;ei;i++){o=t[i];var n=this.nodes[o];if(!n)throw new RangeError('Node with id "'+o+'" not found');this._selectObject(n,!0,!0,e,!0)}this.redraw()},e.selectEdges=function(t){var e,i,s;if(!t||void 0==t.length)throw"Selection must be an array with ids";for(this._unselectAll(!0),e=0,i=t.length;i>e;e++){s=t[e];var o=this.edges[s];if(!o)throw new RangeError('Edge with id "'+s+'" not found');this._selectObject(o,!0,!0,!1,!0)}this.redraw()},e._updateSelection=function(){for(var t in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(t)&&(this.nodes.hasOwnProperty(t)||delete this.selectionObj.nodes[t]);for(var e in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(e)&&(this.edges.hasOwnProperty(e)||delete this.selectionObj.edges[e])}},function(t,e,i){var s=i(1),o=i(40),n=i(37);e._clearManipulatorBar=function(){for(;this.manipulationDiv.hasChildNodes();)this.manipulationDiv.removeChild(this.manipulationDiv.firstChild);this.manipulationDOM={},this._manipulationReleaseOverload=function(){},delete this.sectors.support.nodes.targetNode,delete this.sectors.support.nodes.targetViaNode,this.controlNodesActive=!1},e._restoreOverloadedFunctions=function(){for(var t in this.cachedFunctions)this.cachedFunctions.hasOwnProperty(t)&&(this[t]=this.cachedFunctions[t])},e._toggleEditMode=function(){this.editMode=!this.editMode;var t=this.manipulationDiv,e=this.closeDiv,i=this.editModeDiv;1==this.editMode?(t.style.display="block",e.style.display="block",i.style.display="none",e.onclick=this._toggleEditMode.bind(this)):(t.style.display="none",e.style.display="none",i.style.display="block",e.onclick=null),this._createManipulatorBar()},e._createManipulatorBar=function(){this.boundFunction&&this.off("select",this.boundFunction);var t=this.constants.locales[this.constants.locale];if(void 0!==this.edgeBeingEdited&&(this.edgeBeingEdited._disableControlNodes(),this.edgeBeingEdited=void 0,this.selectedControlNode=null,this.controlNodesActive=!1,this._redraw()),this._restoreOverloadedFunctions(),this.freezeSimulation=!1,this.blockConnectingEdgeSelection=!1,this.forceAppendSelection=!1,this.manipulationDOM={},1==this.editMode){for(;this.manipulationDiv.hasChildNodes();)this.manipulationDiv.removeChild(this.manipulationDiv.firstChild);this.manipulationDOM.addNodeSpan=document.createElement("span"),this.manipulationDOM.addNodeSpan.className="network-manipulationUI add",this.manipulationDOM.addNodeLabelSpan=document.createElement("span"),this.manipulationDOM.addNodeLabelSpan.className="network-manipulationLabel",this.manipulationDOM.addNodeLabelSpan.innerHTML=t.addNode,this.manipulationDOM.addNodeSpan.appendChild(this.manipulationDOM.addNodeLabelSpan),this.manipulationDOM.seperatorLineDiv1=document.createElement("div"),this.manipulationDOM.seperatorLineDiv1.className="network-seperatorLine",this.manipulationDOM.addEdgeSpan=document.createElement("span"),this.manipulationDOM.addEdgeSpan.className="network-manipulationUI connect",this.manipulationDOM.addEdgeLabelSpan=document.createElement("span"),this.manipulationDOM.addEdgeLabelSpan.className="network-manipulationLabel",this.manipulationDOM.addEdgeLabelSpan.innerHTML=t.addEdge,this.manipulationDOM.addEdgeSpan.appendChild(this.manipulationDOM.addEdgeLabelSpan),this.manipulationDiv.appendChild(this.manipulationDOM.addNodeSpan),this.manipulationDiv.appendChild(this.manipulationDOM.seperatorLineDiv1),this.manipulationDiv.appendChild(this.manipulationDOM.addEdgeSpan),1==this._getSelectedNodeCount()&&this.triggerFunctions.edit?(this.manipulationDOM.seperatorLineDiv2=document.createElement("div"),this.manipulationDOM.seperatorLineDiv2.className="network-seperatorLine",this.manipulationDOM.editNodeSpan=document.createElement("span"),this.manipulationDOM.editNodeSpan.className="network-manipulationUI edit",this.manipulationDOM.editNodeLabelSpan=document.createElement("span"),this.manipulationDOM.editNodeLabelSpan.className="network-manipulationLabel",this.manipulationDOM.editNodeLabelSpan.innerHTML=t.editNode,this.manipulationDOM.editNodeSpan.appendChild(this.manipulationDOM.editNodeLabelSpan),this.manipulationDiv.appendChild(this.manipulationDOM.seperatorLineDiv2),this.manipulationDiv.appendChild(this.manipulationDOM.editNodeSpan)):1==this._getSelectedEdgeCount()&&0==this._getSelectedNodeCount()&&(this.manipulationDOM.seperatorLineDiv3=document.createElement("div"),this.manipulationDOM.seperatorLineDiv3.className="network-seperatorLine",this.manipulationDOM.editEdgeSpan=document.createElement("span"),this.manipulationDOM.editEdgeSpan.className="network-manipulationUI edit",this.manipulationDOM.editEdgeLabelSpan=document.createElement("span"),this.manipulationDOM.editEdgeLabelSpan.className="network-manipulationLabel",this.manipulationDOM.editEdgeLabelSpan.innerHTML=t.editEdge,this.manipulationDOM.editEdgeSpan.appendChild(this.manipulationDOM.editEdgeLabelSpan),this.manipulationDiv.appendChild(this.manipulationDOM.seperatorLineDiv3),this.manipulationDiv.appendChild(this.manipulationDOM.editEdgeSpan)),0==this._selectionIsEmpty()&&(this.manipulationDOM.seperatorLineDiv4=document.createElement("div"),this.manipulationDOM.seperatorLineDiv4.className="network-seperatorLine",this.manipulationDOM.deleteSpan=document.createElement("span"),this.manipulationDOM.deleteSpan.className="network-manipulationUI delete",this.manipulationDOM.deleteLabelSpan=document.createElement("span"),this.manipulationDOM.deleteLabelSpan.className="network-manipulationLabel",this.manipulationDOM.deleteLabelSpan.innerHTML=t.del,this.manipulationDOM.deleteSpan.appendChild(this.manipulationDOM.deleteLabelSpan),this.manipulationDiv.appendChild(this.manipulationDOM.seperatorLineDiv4),this.manipulationDiv.appendChild(this.manipulationDOM.deleteSpan)),this.manipulationDOM.addNodeSpan.onclick=this._createAddNodeToolbar.bind(this),this.manipulationDOM.addEdgeSpan.onclick=this._createAddEdgeToolbar.bind(this),1==this._getSelectedNodeCount()&&this.triggerFunctions.edit?this.manipulationDOM.editNodeSpan.onclick=this._editNode.bind(this):1==this._getSelectedEdgeCount()&&0==this._getSelectedNodeCount()&&(this.manipulationDOM.editEdgeSpan.onclick=this._createEditEdgeToolbar.bind(this)),0==this._selectionIsEmpty()&&(this.manipulationDOM.deleteSpan.onclick=this._deleteSelected.bind(this)),this.closeDiv.onclick=this._toggleEditMode.bind(this),this.boundFunction=this._createManipulatorBar.bind(this),this.on("select",this.boundFunction)}else{for(;this.editModeDiv.hasChildNodes();)this.editModeDiv.removeChild(this.editModeDiv.firstChild);this.manipulationDOM.editModeSpan=document.createElement("span"),this.manipulationDOM.editModeSpan.className="network-manipulationUI edit editmode",this.manipulationDOM.editModeLabelSpan=document.createElement("span"),this.manipulationDOM.editModeLabelSpan.className="network-manipulationLabel",this.manipulationDOM.editModeLabelSpan.innerHTML=t.edit,this.manipulationDOM.editModeSpan.appendChild(this.manipulationDOM.editModeLabelSpan),this.editModeDiv.appendChild(this.manipulationDOM.editModeSpan),this.manipulationDOM.editModeSpan.onclick=this._toggleEditMode.bind(this)}},e._createAddNodeToolbar=function(){this._clearManipulatorBar(),this.boundFunction&&this.off("select",this.boundFunction);var t=this.constants.locales[this.constants.locale];this.manipulationDOM={},this.manipulationDOM.backSpan=document.createElement("span"),this.manipulationDOM.backSpan.className="network-manipulationUI back",this.manipulationDOM.backLabelSpan=document.createElement("span"),this.manipulationDOM.backLabelSpan.className="network-manipulationLabel",this.manipulationDOM.backLabelSpan.innerHTML=t.back,this.manipulationDOM.backSpan.appendChild(this.manipulationDOM.backLabelSpan),this.manipulationDOM.seperatorLineDiv1=document.createElement("div"),this.manipulationDOM.seperatorLineDiv1.className="network-seperatorLine",this.manipulationDOM.descriptionSpan=document.createElement("span"),this.manipulationDOM.descriptionSpan.className="network-manipulationUI none",this.manipulationDOM.descriptionLabelSpan=document.createElement("span"),this.manipulationDOM.descriptionLabelSpan.className="network-manipulationLabel",this.manipulationDOM.descriptionLabelSpan.innerHTML=t.addDescription,this.manipulationDOM.descriptionSpan.appendChild(this.manipulationDOM.descriptionLabelSpan),this.manipulationDiv.appendChild(this.manipulationDOM.backSpan),this.manipulationDiv.appendChild(this.manipulationDOM.seperatorLineDiv1),this.manipulationDiv.appendChild(this.manipulationDOM.descriptionSpan),this.manipulationDOM.backSpan.onclick=this._createManipulatorBar.bind(this),this.boundFunction=this._addNode.bind(this),this.on("select",this.boundFunction)},e._createAddEdgeToolbar=function(){this._clearManipulatorBar(),this._unselectAll(!0),this.freezeSimulation=!0;var t=this.constants.locales[this.constants.locale];this.boundFunction&&this.off("select",this.boundFunction),this._unselectAll(),this.forceAppendSelection=!1,this.blockConnectingEdgeSelection=!0,this.manipulationDOM={},this.manipulationDOM.backSpan=document.createElement("span"),this.manipulationDOM.backSpan.className="network-manipulationUI back",this.manipulationDOM.backLabelSpan=document.createElement("span"),this.manipulationDOM.backLabelSpan.className="network-manipulationLabel",this.manipulationDOM.backLabelSpan.innerHTML=t.back,this.manipulationDOM.backSpan.appendChild(this.manipulationDOM.backLabelSpan),this.manipulationDOM.seperatorLineDiv1=document.createElement("div"),this.manipulationDOM.seperatorLineDiv1.className="network-seperatorLine",this.manipulationDOM.descriptionSpan=document.createElement("span"),this.manipulationDOM.descriptionSpan.className="network-manipulationUI none",this.manipulationDOM.descriptionLabelSpan=document.createElement("span"),this.manipulationDOM.descriptionLabelSpan.className="network-manipulationLabel",this.manipulationDOM.descriptionLabelSpan.innerHTML=t.edgeDescription,this.manipulationDOM.descriptionSpan.appendChild(this.manipulationDOM.descriptionLabelSpan),this.manipulationDiv.appendChild(this.manipulationDOM.backSpan),this.manipulationDiv.appendChild(this.manipulationDOM.seperatorLineDiv1),this.manipulationDiv.appendChild(this.manipulationDOM.descriptionSpan),this.manipulationDOM.backSpan.onclick=this._createManipulatorBar.bind(this),this.boundFunction=this._handleConnect.bind(this),this.on("select",this.boundFunction),this.cachedFunctions._handleTouch=this._handleTouch,this.cachedFunctions._manipulationReleaseOverload=this._manipulationReleaseOverload,this.cachedFunctions._handleDragStart=this._handleDragStart,this.cachedFunctions._handleDragEnd=this._handleDragEnd,this._handleTouch=this._handleConnect,this._manipulationReleaseOverload=function(){},this._handleDragStart=function(){},this._handleDragEnd=this._finishConnect,this._redraw()},e._createEditEdgeToolbar=function(){this._clearManipulatorBar(),this.controlNodesActive=!0,this.boundFunction&&this.off("select",this.boundFunction),this.edgeBeingEdited=this._getSelectedEdge(),this.edgeBeingEdited._enableControlNodes();var t=this.constants.locales[this.constants.locale];this.manipulationDOM={},this.manipulationDOM.backSpan=document.createElement("span"),this.manipulationDOM.backSpan.className="network-manipulationUI back",this.manipulationDOM.backLabelSpan=document.createElement("span"),this.manipulationDOM.backLabelSpan.className="network-manipulationLabel",this.manipulationDOM.backLabelSpan.innerHTML=t.back,this.manipulationDOM.backSpan.appendChild(this.manipulationDOM.backLabelSpan),this.manipulationDOM.seperatorLineDiv1=document.createElement("div"),this.manipulationDOM.seperatorLineDiv1.className="network-seperatorLine",this.manipulationDOM.descriptionSpan=document.createElement("span"),this.manipulationDOM.descriptionSpan.className="network-manipulationUI none",this.manipulationDOM.descriptionLabelSpan=document.createElement("span"),this.manipulationDOM.descriptionLabelSpan.className="network-manipulationLabel",this.manipulationDOM.descriptionLabelSpan.innerHTML=t.editEdgeDescription,this.manipulationDOM.descriptionSpan.appendChild(this.manipulationDOM.descriptionLabelSpan),this.manipulationDiv.appendChild(this.manipulationDOM.backSpan),this.manipulationDiv.appendChild(this.manipulationDOM.seperatorLineDiv1),this.manipulationDiv.appendChild(this.manipulationDOM.descriptionSpan),this.manipulationDOM.backSpan.onclick=this._createManipulatorBar.bind(this),this.cachedFunctions._handleTouch=this._handleTouch,this.cachedFunctions._manipulationReleaseOverload=this._manipulationReleaseOverload,this.cachedFunctions._handleTap=this._handleTap,this.cachedFunctions._handleDragStart=this._handleDragStart,this.cachedFunctions._handleOnDrag=this._handleOnDrag,this._handleTouch=this._selectControlNode,this._handleTap=function(){},this._handleOnDrag=this._controlNodeDrag,this._handleDragStart=function(){},this._manipulationReleaseOverload=this._releaseControlNode,this._redraw() -},e._selectControlNode=function(t){this.edgeBeingEdited.controlNodes.from.unselect(),this.edgeBeingEdited.controlNodes.to.unselect(),this.selectedControlNode=this.edgeBeingEdited._getSelectedControlNode(this._XconvertDOMtoCanvas(t.x),this._YconvertDOMtoCanvas(t.y)),null!==this.selectedControlNode&&(this.selectedControlNode.select(),this.freezeSimulation=!0),this._redraw()},e._controlNodeDrag=function(t){var e=this._getPointer(t.gesture.center);null!==this.selectedControlNode&&void 0!==this.selectedControlNode&&(this.selectedControlNode.x=this._XconvertDOMtoCanvas(e.x),this.selectedControlNode.y=this._YconvertDOMtoCanvas(e.y)),this._redraw()},e._releaseControlNode=function(t){var e=this._getNodeAt(t);null!==e?(1==this.edgeBeingEdited.controlNodes.from.selected&&(this._editEdge(e.id,this.edgeBeingEdited.to.id),this.edgeBeingEdited.controlNodes.from.unselect()),1==this.edgeBeingEdited.controlNodes.to.selected&&(this._editEdge(this.edgeBeingEdited.from.id,e.id),this.edgeBeingEdited.controlNodes.to.unselect())):this.edgeBeingEdited._restoreControlNodes(),this.freezeSimulation=!1,this._redraw()},e._handleConnect=function(t){if(0==this._getSelectedNodeCount()){var e=this._getNodeAt(t);if(null!=e)if(e.clusterSize>1)alert(this.constants.locales[this.constants.locale].createEdgeError);else{this._selectObject(e,!1);var i=this.sectors.support.nodes;i.targetNode=new o({id:"targetNode"},{},{},this.constants);var s=i.targetNode;s.x=e.x,s.y=e.y,this.edges.connectionEdge=new n({id:"connectionEdge",from:e.id,to:s.id},this,this.constants);var r=this.edges.connectionEdge;r.from=e,r.connected=!0,r.options.smoothCurves={enabled:!0,dynamic:!1,type:"continuous",roundness:.5},r.selected=!0,r.to=s,this.cachedFunctions._handleOnDrag=this._handleOnDrag,this._handleOnDrag=function(t){var e=this._getPointer(t.gesture.center),i=this.edges.connectionEdge;i.to.x=this._XconvertDOMtoCanvas(e.x),i.to.y=this._YconvertDOMtoCanvas(e.y)},this.moving=!0,this.start()}}},e._finishConnect=function(t){if(1==this._getSelectedNodeCount()){var e=this._getPointer(t.gesture.center);this._handleOnDrag=this.cachedFunctions._handleOnDrag,delete this.cachedFunctions._handleOnDrag;var i=this.edges.connectionEdge.fromId;delete this.edges.connectionEdge,delete this.sectors.support.nodes.targetNode,delete this.sectors.support.nodes.targetViaNode;var s=this._getNodeAt(e);null!=s&&(s.clusterSize>1?alert(this.constants.locales[this.constants.locale].createEdgeError):(this._createEdge(i,s.id),this._createManipulatorBar())),this._unselectAll()}},e._addNode=function(){if(this._selectionIsEmpty()&&1==this.editMode){var t=this._pointerToPositionObject(this.pointerPosition),e={id:s.randomUUID(),x:t.left,y:t.top,label:"new",allowedToMoveX:!0,allowedToMoveY:!0};if(this.triggerFunctions.add){if(2!=this.triggerFunctions.add.length)throw new Error("The function for add does not support two arguments (data,callback)");var i=this;this.triggerFunctions.add(e,function(t){i.nodesData.add(t),i._createManipulatorBar(),i.moving=!0,i.start()})}else this.nodesData.add(e),this._createManipulatorBar(),this.moving=!0,this.start()}},e._createEdge=function(t,e){if(1==this.editMode){var i={from:t,to:e};if(this.triggerFunctions.connect){if(2!=this.triggerFunctions.connect.length)throw new Error("The function for connect does not support two arguments (data,callback)");var s=this;this.triggerFunctions.connect(i,function(t){s.edgesData.add(t),s.moving=!0,s.start()})}else this.edgesData.add(i),this.moving=!0,this.start()}},e._editEdge=function(t,e){if(1==this.editMode){var i={id:this.edgeBeingEdited.id,from:t,to:e};if(this.triggerFunctions.editEdge){if(2!=this.triggerFunctions.editEdge.length)throw new Error("The function for edit does not support two arguments (data, callback)");var s=this;this.triggerFunctions.editEdge(i,function(t){s.edgesData.update(t),s.moving=!0,s.start()})}else this.edgesData.update(i),this.moving=!0,this.start()}},e._editNode=function(){if(!this.triggerFunctions.edit||1!=this.editMode)throw new Error("No edit function has been bound to this button");var t=this._getSelectedNode(),e={id:t.id,label:t.label,group:t.options.group,shape:t.options.shape,color:{background:t.options.color.background,border:t.options.color.border,highlight:{background:t.options.color.highlight.background,border:t.options.color.highlight.border}}};if(2!=this.triggerFunctions.edit.length)throw new Error("The function for edit does not support two arguments (data, callback)");var i=this;this.triggerFunctions.edit(e,function(t){i.nodesData.update(t),i._createManipulatorBar(),i.moving=!0,i.start()})},e._deleteSelected=function(){if(!this._selectionIsEmpty()&&1==this.editMode)if(this._clusterInSelection())alert(this.constants.locales[this.constants.locale].deleteClusterError);else{var t=this.getSelectedNodes(),e=this.getSelectedEdges();if(this.triggerFunctions.del){var i=this,s={nodes:t,edges:e};if(2!=this.triggerFunctions.del.length)throw new Error("The function for delete does not support two arguments (data, callback)");this.triggerFunctions.del(s,function(t){i.edgesData.remove(t.edges),i.nodesData.remove(t.nodes),i._unselectAll(),i.moving=!0,i.start()})}else this.edgesData.remove(e),this.nodesData.remove(t),this._unselectAll(),this.moving=!0,this.start()}}},function(t,e,i){var s=(i(1),i(45));e._cleanNavigation=function(){if(0!=this.navigationHammers.existing.length){for(var t=0;t0){this.constants.hierarchicalLayout.levelSeparation="RL"==this.constants.hierarchicalLayout.direction||"DU"==this.constants.hierarchicalLayout.direction?this.constants.hierarchicalLayout.levelSeparation<0?this.constants.hierarchicalLayout.levelSeparation:-1*this.constants.hierarchicalLayout.levelSeparation:Math.abs(this.constants.hierarchicalLayout.levelSeparation),"RL"==this.constants.hierarchicalLayout.direction||"LR"==this.constants.hierarchicalLayout.direction?1==this.constants.smoothCurves.enabled&&(this.constants.smoothCurves.type="vertical"):1==this.constants.smoothCurves.enabled&&(this.constants.smoothCurves.type="horizontal");var t,e,i=0,s=!1,o=!1;for(e in this.nodes)this.nodes.hasOwnProperty(e)&&(t=this.nodes[e],-1!=t.level?s=!0:o=!0,is&&(n.xFixed=!1,n.x=i[n.level].minPos,r=!0):n.yFixed&&n.level>s&&(n.yFixed=!1,n.y=i[n.level].minPos,r=!0),1==r&&(i[n.level].minPos+=i[n.level].nodeSpacing,n.edges.length>1&&this._placeBranchNodes(n.edges,n.id,i,n.level))}},e._setLevel=function(t,e,i){for(var s=0;st)&&(o.level=t,o.edges.length>1&&this._setLevel(t+1,o.edges,o.id))}},e._setLevelDirected=function(t,e,i){this.nodes[i].hierarchyEnumerated=!0;for(var s=0;s1&&o.hierarchyEnumerated===!1&&this._setLevelDirected(o.level,o.edges,o.id)}},e._restoreNodes=function(){for(var t in this.nodes)this.nodes.hasOwnProperty(t)&&(this.nodes[t].xFixed=!1,this.nodes[t].yFixed=!1)}},function(t,e,i){function s(){this.constants.smoothCurves.enabled=!this.constants.smoothCurves.enabled;var t=document.getElementById("graph_toggleSmooth");t.style.background=1==this.constants.smoothCurves.enabled?"#A4FF56":"#FF8532",this._configureSmoothCurves(!1)}function o(){for(var t in this.calculationNodes)this.calculationNodes.hasOwnProperty(t)&&(this.calculationNodes[t].vx=0,this.calculationNodes[t].vy=0,this.calculationNodes[t].fx=0,this.calculationNodes[t].fy=0);1==this.constants.hierarchicalLayout.enabled?(this._setupHierarchicalLayout(),a.call(this,"graph_H_nd",1,"physics_hierarchicalRepulsion_nodeDistance"),a.call(this,"graph_H_cg",1,"physics_centralGravity"),a.call(this,"graph_H_sc",1,"physics_springConstant"),a.call(this,"graph_H_sl",1,"physics_springLength"),a.call(this,"graph_H_damp",1,"physics_damping")):this.repositionNodes(),this.moving=!0,this.start()}function n(){var t="No options are required, default values used.",e=[],i=document.getElementById("graph_physicsMethod1"),s=document.getElementById("graph_physicsMethod2");if(1==i.checked){if(this.constants.physics.barnesHut.gravitationalConstant!=this.backupConstants.physics.barnesHut.gravitationalConstant&&e.push("gravitationalConstant: "+this.constants.physics.barnesHut.gravitationalConstant),this.constants.physics.centralGravity!=this.backupConstants.physics.barnesHut.centralGravity&&e.push("centralGravity: "+this.constants.physics.centralGravity),this.constants.physics.springLength!=this.backupConstants.physics.barnesHut.springLength&&e.push("springLength: "+this.constants.physics.springLength),this.constants.physics.springConstant!=this.backupConstants.physics.barnesHut.springConstant&&e.push("springConstant: "+this.constants.physics.springConstant),this.constants.physics.damping!=this.backupConstants.physics.barnesHut.damping&&e.push("damping: "+this.constants.physics.damping),0!=e.length){t="var options = {",t+="physics: {barnesHut: {";for(var o=0;othis.constants.clustering.clusterThreshold&&1==this.constants.clustering.enabled&&this.clusterToFit(this.constants.clustering.reduceToNodes,!1),this._calculateForces())},e._calculateForces=function(){this._calculateGravitationalForces(),this._calculateNodeForces(),this.constants.physics.springConstant>0&&(1==this.constants.smoothCurves.enabled&&1==this.constants.smoothCurves.dynamic?this._calculateSpringForcesWithSupport():1==this.constants.physics.hierarchicalRepulsion.enabled?this._calculateHierarchicalSpringForces():this._calculateSpringForces())},e._updateCalculationNodes=function(){if(1==this.constants.smoothCurves.enabled&&1==this.constants.smoothCurves.dynamic){this.calculationNodes={},this.calculationNodeIndices=[];for(var t in this.nodes)this.nodes.hasOwnProperty(t)&&(this.calculationNodes[t]=this.nodes[t]);var e=this.sectors.support.nodes;for(var i in e)e.hasOwnProperty(i)&&(this.edges.hasOwnProperty(e[i].parentEdgeId)?this.calculationNodes[i]=e[i]:e[i]._setForce(0,0));for(var s in this.calculationNodes)this.calculationNodes.hasOwnProperty(s)&&this.calculationNodeIndices.push(s)}else this.calculationNodes=this.nodes,this.calculationNodeIndices=this.nodeIndices},e._calculateGravitationalForces=function(){var t,e,i,s,o,n=this.calculationNodes,r=this.constants.physics.centralGravity,a=0;for(o=0;oSimulation Mode:Barnes HutRepulsionHierarchical
Options:
',this.containerElement.parentElement.insertBefore(this.physicsConfiguration,this.containerElement),this.optionsDiv=document.createElement("div"),this.optionsDiv.style.fontSize="14px",this.optionsDiv.style.fontFamily="verdana",this.containerElement.parentElement.insertBefore(this.optionsDiv,this.containerElement);var e;e=document.getElementById("graph_BH_gc"),e.onchange=a.bind(this,"graph_BH_gc",-1,"physics_barnesHut_gravitationalConstant"),e=document.getElementById("graph_BH_cg"),e.onchange=a.bind(this,"graph_BH_cg",1,"physics_centralGravity"),e=document.getElementById("graph_BH_sc"),e.onchange=a.bind(this,"graph_BH_sc",1,"physics_springConstant"),e=document.getElementById("graph_BH_sl"),e.onchange=a.bind(this,"graph_BH_sl",1,"physics_springLength"),e=document.getElementById("graph_BH_damp"),e.onchange=a.bind(this,"graph_BH_damp",1,"physics_damping"),e=document.getElementById("graph_R_nd"),e.onchange=a.bind(this,"graph_R_nd",1,"physics_repulsion_nodeDistance"),e=document.getElementById("graph_R_cg"),e.onchange=a.bind(this,"graph_R_cg",1,"physics_centralGravity"),e=document.getElementById("graph_R_sc"),e.onchange=a.bind(this,"graph_R_sc",1,"physics_springConstant"),e=document.getElementById("graph_R_sl"),e.onchange=a.bind(this,"graph_R_sl",1,"physics_springLength"),e=document.getElementById("graph_R_damp"),e.onchange=a.bind(this,"graph_R_damp",1,"physics_damping"),e=document.getElementById("graph_H_nd"),e.onchange=a.bind(this,"graph_H_nd",1,"physics_hierarchicalRepulsion_nodeDistance"),e=document.getElementById("graph_H_cg"),e.onchange=a.bind(this,"graph_H_cg",1,"physics_centralGravity"),e=document.getElementById("graph_H_sc"),e.onchange=a.bind(this,"graph_H_sc",1,"physics_springConstant"),e=document.getElementById("graph_H_sl"),e.onchange=a.bind(this,"graph_H_sl",1,"physics_springLength"),e=document.getElementById("graph_H_damp"),e.onchange=a.bind(this,"graph_H_damp",1,"physics_damping"),e=document.getElementById("graph_H_direction"),e.onchange=a.bind(this,"graph_H_direction",t,"hierarchicalLayout_direction"),e=document.getElementById("graph_H_levsep"),e.onchange=a.bind(this,"graph_H_levsep",1,"hierarchicalLayout_levelSeparation"),e=document.getElementById("graph_H_nspac"),e.onchange=a.bind(this,"graph_H_nspac",1,"hierarchicalLayout_nodeSpacing"); -var i=document.getElementById("graph_physicsMethod1"),d=document.getElementById("graph_physicsMethod2"),l=document.getElementById("graph_physicsMethod3");d.checked=!0,this.constants.physics.barnesHut.enabled&&(i.checked=!0),this.constants.hierarchicalLayout.enabled&&(l.checked=!0);var c=document.getElementById("graph_toggleSmooth"),p=document.getElementById("graph_repositionNodes"),u=document.getElementById("graph_generateOptions");c.onclick=s.bind(this),p.onclick=o.bind(this),u.onclick=n.bind(this),c.style.background=1==this.constants.smoothCurves&&0==this.constants.dynamicSmoothCurves?"#A4FF56":"#FF8532",r.apply(this),i.onchange=r.bind(this),d.onchange=r.bind(this),l.onchange=r.bind(this)}},e._overWriteGraphConstants=function(t,e){var i=t.split("_");1==i.length?this.constants[i[0]]=e:2==i.length?this.constants[i[0]][i[1]]=e:3==i.length&&(this.constants[i[0]][i[1]][i[2]]=e)}},function(t){function e(t){throw new Error("Cannot find module '"+t+"'.")}e.keys=function(){return[]},e.resolve=e,t.exports=e,e.id=67},function(t,e){e._calculateNodeForces=function(){var t,e,i,s,o,n,r,a,h,d,l,c=this.calculationNodes,p=this.calculationNodeIndices,u=-2/3,m=4/3,f=this.constants.physics.repulsion.nodeDistance,g=f;for(d=0;di&&(r=.5*g>i?1:v*i+m,r*=0==n?1:1+n*this.constants.clustering.forceAmplification,r/=i,s=t*r,o=e*r,a.fx-=s,a.fy-=o,h.fx+=s,h.fy+=o)}}},function(t,e){e._calculateNodeForces=function(){var t,e,i,s,o,n,r,a,h,d,l=this.calculationNodes,c=this.calculationNodeIndices,p=this.constants.physics.hierarchicalRepulsion.nodeDistance;for(h=0;hi?-Math.pow(u*i,2)+Math.pow(u*p,2):0,0==i?i=.01:n/=i,s=t*n,o=e*n,r.fx-=s,r.fy-=o,a.fx+=s,a.fy+=o}},e._calculateHierarchicalSpringForces=function(){for(var t,e,i,s,o,n,r,a,h,d=this.edges,l=this.calculationNodes,c=this.calculationNodeIndices,p=0;pn;n++)t=e[i[n]],t.options.mass>0&&(this._getForceContribution(o.root.children.NW,t),this._getForceContribution(o.root.children.NE,t),this._getForceContribution(o.root.children.SW,t),this._getForceContribution(o.root.children.SE,t))}},e._getForceContribution=function(t,e){if(t.childrenCount>0){var i,s,o;if(i=t.centerOfMass.x-e.x,s=t.centerOfMass.y-e.y,o=Math.sqrt(i*i+s*s),o*t.calcSize>this.constants.physics.barnesHut.theta){0==o&&(o=.1*Math.random(),i=o);var n=this.constants.physics.barnesHut.gravitationalConstant*t.mass*e.options.mass/(o*o*o),r=i*n,a=s*n;e.fx+=r,e.fy+=a}else if(4==t.childrenCount)this._getForceContribution(t.children.NW,e),this._getForceContribution(t.children.NE,e),this._getForceContribution(t.children.SW,e),this._getForceContribution(t.children.SE,e);else if(t.children.data.id!=e.id){0==o&&(o=.5*Math.random(),i=o);var n=this.constants.physics.barnesHut.gravitationalConstant*t.mass*e.options.mass/(o*o*o),r=i*n,a=s*n;e.fx+=r,e.fy+=a}}},e._formBarnesHutTree=function(t,e){for(var i,s=e.length,o=Number.MAX_VALUE,n=Number.MAX_VALUE,r=-Number.MAX_VALUE,a=-Number.MAX_VALUE,h=0;s>h;h++){var d=t[e[h]].x,l=t[e[h]].y;t[e[h]].options.mass>0&&(o>d&&(o=d),d>r&&(r=d),n>l&&(n=l),l>a&&(a=l))}var c=Math.abs(r-o)-Math.abs(a-n);c>0?(n-=.5*c,a+=.5*c):(o+=.5*c,r-=.5*c);var p=1e-5,u=Math.max(p,Math.abs(r-o)),m=.5*u,f=.5*(o+r),g=.5*(n+a),v={root:{centerOfMass:{x:0,y:0},mass:0,range:{minX:f-m,maxX:f+m,minY:g-m,maxY:g+m},size:u,calcSize:1/u,children:{data:null},maxWidth:0,level:0,childrenCount:4}};for(this._splitBranch(v.root),h=0;s>h;h++)i=t[e[h]],i.options.mass>0&&this._placeInTree(v.root,i);this.barnesHutTree=v},e._updateBranchMass=function(t,e){var i=t.mass+e.options.mass,s=1/i;t.centerOfMass.x=t.centerOfMass.x*t.mass+e.x*e.options.mass,t.centerOfMass.x*=s,t.centerOfMass.y=t.centerOfMass.y*t.mass+e.y*e.options.mass,t.centerOfMass.y*=s,t.mass=i;var o=Math.max(Math.max(e.height,e.radius),e.width);t.maxWidth=t.maxWidthe.x?t.children.NW.range.maxY>e.y?this._placeInRegion(t,e,"NW"):this._placeInRegion(t,e,"SW"):t.children.NW.range.maxY>e.y?this._placeInRegion(t,e,"NE"):this._placeInRegion(t,e,"SE")},e._placeInRegion=function(t,e,i){switch(t.children[i].childrenCount){case 0:t.children[i].children.data=e,t.children[i].childrenCount=1,this._updateBranchMass(t.children[i],e);break;case 1:t.children[i].children.data.x==e.x&&t.children[i].children.data.y==e.y?(e.x+=Math.random(),e.y+=Math.random()):(this._splitBranch(t.children[i]),this._placeInTree(t.children[i],e));break;case 4:this._placeInTree(t.children[i],e)}},e._splitBranch=function(t){var e=null;1==t.childrenCount&&(e=t.children.data,t.mass=0,t.centerOfMass.x=0,t.centerOfMass.y=0),t.childrenCount=4,t.children.data=null,this._insertRegion(t,"NW"),this._insertRegion(t,"NE"),this._insertRegion(t,"SW"),this._insertRegion(t,"SE"),null!=e&&this._placeInTree(t,e)},e._insertRegion=function(t,e){var i,s,o,n,r=.5*t.size;switch(e){case"NW":i=t.range.minX,s=t.range.minX+r,o=t.range.minY,n=t.range.minY+r;break;case"NE":i=t.range.minX+r,s=t.range.maxX,o=t.range.minY,n=t.range.minY+r;break;case"SW":i=t.range.minX,s=t.range.minX+r,o=t.range.minY+r,n=t.range.maxY;break;case"SE":i=t.range.minX+r,s=t.range.maxX,o=t.range.minY+r,n=t.range.maxY}t.children[e]={centerOfMass:{x:0,y:0},mass:0,range:{minX:i,maxX:s,minY:o,maxY:n},size:.5*t.size,calcSize:2*t.calcSize,children:{data:null},maxWidth:0,level:t.level+1,childrenCount:0}},e._drawTree=function(t,e){void 0!==this.barnesHutTree&&(t.lineWidth=1,this._drawBranch(this.barnesHutTree.root,t,e))},e._drawBranch=function(t,e,i){void 0===i&&(i="#FF0000"),4==t.childrenCount&&(this._drawBranch(t.children.NW,e),this._drawBranch(t.children.NE,e),this._drawBranch(t.children.SE,e),this._drawBranch(t.children.SW,e)),e.strokeStyle=i,e.beginPath(),e.moveTo(t.range.minX,t.range.minY),e.lineTo(t.range.maxX,t.range.minY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.minY),e.lineTo(t.range.maxX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.maxY),e.lineTo(t.range.minX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.minX,t.range.maxY),e.lineTo(t.range.minX,t.range.minY),e.stroke()}},function(t){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children=[],t.webpackPolyfill=1),t}},function(t,e){(function(e){t.exports=e}).call(e,{})}])}); +if(i=t.get(),0!=i.length){this.dataSet=t,this.dataTable=i,this._onChange=function(){e.setData(e.dataSet)},this.dataSet.on("*",this._onChange),this.colX="x",this.colY="y",this.colZ="z",this.colValue="style",this.colFilter="filter",i[0].hasOwnProperty("filter")&&void 0===this.dataFilter&&(this.dataFilter=new u(t,this.colFilter,this),this.dataFilter.setOnLoadCallback(function(){e.redraw()}));var o=this.style==s.STYLE.BAR||this.style==s.STYLE.BARCOLOR||this.style==s.STYLE.BARSIZE;if(o){if(void 0!==this.defaultXBarWidth)this.xBarWidth=this.defaultXBarWidth;else{var n=this.getDistinctValues(i,this.colX);this.xBarWidth=n[1]-n[0]||1}if(void 0!==this.defaultYBarWidth)this.yBarWidth=this.defaultYBarWidth;else{var r=this.getDistinctValues(i,this.colY);this.yBarWidth=r[1]-r[0]||1}}var d=this.getColumnRange(i,this.colX);o&&(d.min-=this.xBarWidth/2,d.max+=this.xBarWidth/2),this.xMin=void 0!==this.defaultXMin?this.defaultXMin:d.min,this.xMax=void 0!==this.defaultXMax?this.defaultXMax:d.max,this.xMax<=this.xMin&&(this.xMax=this.xMin+1),this.xStep=void 0!==this.defaultXStep?this.defaultXStep:(this.xMax-this.xMin)/5;var l=this.getColumnRange(i,this.colY);o&&(l.min-=this.yBarWidth/2,l.max+=this.yBarWidth/2),this.yMin=void 0!==this.defaultYMin?this.defaultYMin:l.min,this.yMax=void 0!==this.defaultYMax?this.defaultYMax:l.max,this.yMax<=this.yMin&&(this.yMax=this.yMin+1),this.yStep=void 0!==this.defaultYStep?this.defaultYStep:(this.yMax-this.yMin)/5;var c=this.getColumnRange(i,this.colZ);if(this.zMin=void 0!==this.defaultZMin?this.defaultZMin:c.min,this.zMax=void 0!==this.defaultZMax?this.defaultZMax:c.max,this.zMax<=this.zMin&&(this.zMax=this.zMin+1),this.zStep=void 0!==this.defaultZStep?this.defaultZStep:(this.zMax-this.zMin)/5,void 0!==this.colValue){var p=this.getColumnRange(i,this.colValue);this.valueMin=void 0!==this.defaultValueMin?this.defaultValueMin:p.min,this.valueMax=void 0!==this.defaultValueMax?this.defaultValueMax:p.max,this.valueMax<=this.valueMin&&(this.valueMax=this.valueMin+1)}this._setScale()}}},s.prototype._getDataPoints=function(t){var e,i,o,n,r,a,h=[];if(this.style===s.STYLE.GRID||this.style===s.STYLE.SURFACE){var d=[],c=[];for(o=0;ot;t++){var m=(t-p)/(u-p),g=240*m,v=this._hsv2rgb(g,1,1);c.strokeStyle=v,c.beginPath(),c.moveTo(h,r+t),c.lineTo(a,r+t),c.stroke()}c.strokeStyle=this.colorAxis,c.strokeRect(h,r,i,n)}if(this.style===s.STYLE.DOTSIZE&&(c.strokeStyle=this.colorAxis,c.fillStyle=this.colorDot,c.beginPath(),c.moveTo(h,r),c.lineTo(a,r),c.lineTo(a-i+e,d),c.lineTo(h,d),c.closePath(),c.fill(),c.stroke()),this.style===s.STYLE.DOTCOLOR||this.style===s.STYLE.DOTSIZE){var y=5,b=new f(this.valueMin,this.valueMax,(this.valueMax-this.valueMin)/5,!0);for(b.start(),b.getCurrent()0?this.yMin:this.yMax,o=this._convert3Dto2D(new l(x,r,this.zMin)),Math.cos(2*_)>0?(g.textAlign="center",g.textBaseline="top",o.y+=b):Math.sin(2*_)<0?(g.textAlign="right",g.textBaseline="middle"):(g.textAlign="left",g.textBaseline="middle"),g.fillStyle=this.colorAxis,g.fillText(" "+this.xValueLabel(i.getCurrent())+" ",o.x,o.y),i.next()}for(g.lineWidth=1,s=void 0===this.defaultYStep,i=new f(this.yMin,this.yMax,this.yStep,s),i.start(),i.getCurrent()0?this.xMin:this.xMax,o=this._convert3Dto2D(new l(n,i.getCurrent(),this.zMin)),Math.cos(2*_)<0?(g.textAlign="center",g.textBaseline="top",o.y+=b):Math.sin(2*_)>0?(g.textAlign="right",g.textBaseline="middle"):(g.textAlign="left",g.textBaseline="middle"),g.fillStyle=this.colorAxis,g.fillText(" "+this.yValueLabel(i.getCurrent())+" ",o.x,o.y),i.next();for(g.lineWidth=1,s=void 0===this.defaultZStep,i=new f(this.zMin,this.zMax,this.zStep,s),i.start(),i.getCurrent()0?this.xMin:this.xMax,r=Math.sin(_)<0?this.yMin:this.yMax;!i.end();)t=this._convert3Dto2D(new l(n,r,i.getCurrent())),g.strokeStyle=this.colorAxis,g.beginPath(),g.moveTo(t.x,t.y),g.lineTo(t.x-b,t.y),g.stroke(),g.textAlign="right",g.textBaseline="middle",g.fillStyle=this.colorAxis,g.fillText(this.zValueLabel(i.getCurrent())+" ",t.x-5,t.y),i.next();g.lineWidth=1,t=this._convert3Dto2D(new l(n,r,this.zMin)),e=this._convert3Dto2D(new l(n,r,this.zMax)),g.strokeStyle=this.colorAxis,g.beginPath(),g.moveTo(t.x,t.y),g.lineTo(e.x,e.y),g.stroke(),g.lineWidth=1,p=this._convert3Dto2D(new l(this.xMin,this.yMin,this.zMin)),u=this._convert3Dto2D(new l(this.xMax,this.yMin,this.zMin)),g.strokeStyle=this.colorAxis,g.beginPath(),g.moveTo(p.x,p.y),g.lineTo(u.x,u.y),g.stroke(),p=this._convert3Dto2D(new l(this.xMin,this.yMax,this.zMin)),u=this._convert3Dto2D(new l(this.xMax,this.yMax,this.zMin)),g.strokeStyle=this.colorAxis,g.beginPath(),g.moveTo(p.x,p.y),g.lineTo(u.x,u.y),g.stroke(),g.lineWidth=1,t=this._convert3Dto2D(new l(this.xMin,this.yMin,this.zMin)),e=this._convert3Dto2D(new l(this.xMin,this.yMax,this.zMin)),g.strokeStyle=this.colorAxis,g.beginPath(),g.moveTo(t.x,t.y),g.lineTo(e.x,e.y),g.stroke(),t=this._convert3Dto2D(new l(this.xMax,this.yMin,this.zMin)),e=this._convert3Dto2D(new l(this.xMax,this.yMax,this.zMin)),g.strokeStyle=this.colorAxis,g.beginPath(),g.moveTo(t.x,t.y),g.lineTo(e.x,e.y),g.stroke();var w=this.xLabel;w.length>0&&(c=.1/this.scale.y,n=(this.xMin+this.xMax)/2,r=Math.cos(_)>0?this.yMin-c:this.yMax+c,o=this._convert3Dto2D(new l(n,r,this.zMin)),Math.cos(2*_)>0?(g.textAlign="center",g.textBaseline="top"):Math.sin(2*_)<0?(g.textAlign="right",g.textBaseline="middle"):(g.textAlign="left",g.textBaseline="middle"),g.fillStyle=this.colorAxis,g.fillText(w,o.x,o.y));var D=this.yLabel;D.length>0&&(d=.1/this.scale.x,n=Math.sin(_)>0?this.xMin-d:this.xMax+d,r=(this.yMin+this.yMax)/2,o=this._convert3Dto2D(new l(n,r,this.zMin)),Math.cos(2*_)<0?(g.textAlign="center",g.textBaseline="top"):Math.sin(2*_)>0?(g.textAlign="right",g.textBaseline="middle"):(g.textAlign="left",g.textBaseline="middle"),g.fillStyle=this.colorAxis,g.fillText(D,o.x,o.y));var M=this.zLabel;M.length>0&&(h=30,n=Math.cos(_)>0?this.xMin:this.xMax,r=Math.sin(_)<0?this.yMin:this.yMax,a=(this.zMin+this.zMax)/2,o=this._convert3Dto2D(new l(n,r,a)),g.textAlign="right",g.textBaseline="middle",g.fillStyle=this.colorAxis,g.fillText(M,o.x-h,o.y))},s.prototype._hsv2rgb=function(t,e,i){var s,o,n,r,a,h;switch(r=i*e,a=Math.floor(t/60),h=r*(1-Math.abs(t/60%2-1)),a){case 0:s=r,o=h,n=0;break;case 1:s=h,o=r,n=0;break;case 2:s=0,o=r,n=h;break;case 3:s=0,o=h,n=r;break;case 4:s=h,o=0,n=r;break;case 5:s=r,o=0,n=h;break;default:s=0,o=0,n=0}return"RGB("+parseInt(255*s)+","+parseInt(255*o)+","+parseInt(255*n)+")"},s.prototype._redrawDataGrid=function(){var t,e,i,o,n,r,a,h,d,c,p,u,m,f=this.frame.canvas,g=f.getContext("2d");if(!(void 0===this.dataPoints||this.dataPoints.length<=0)){for(n=0;n0}else r=!0;r?(m=(t.point.z+e.point.z+i.point.z+o.point.z)/4,c=240*(1-(m-this.zMin)*this.scale.z/this.verticalRatio),p=1,this.showShadow?(u=Math.min(1+D.x/M/2,1),a=this._hsv2rgb(c,p,u),h=a):(u=1,a=this._hsv2rgb(c,p,u),h=this.colorAxis)):(a="gray",h=this.colorAxis),d=.5,g.lineWidth=d,g.fillStyle=a,g.strokeStyle=h,g.beginPath(),g.moveTo(t.screen.x,t.screen.y),g.lineTo(e.screen.x,e.screen.y),g.lineTo(o.screen.x,o.screen.y),g.lineTo(i.screen.x,i.screen.y),g.closePath(),g.fill(),g.stroke()}}else for(n=0;np&&(p=0);var u,m,f;this.style===s.STYLE.DOTCOLOR?(u=240*(1-(d.point.value-this.valueMin)*this.scale.value),m=this._hsv2rgb(u,1,1),f=this._hsv2rgb(u,1,.8)):this.style===s.STYLE.DOTSIZE?(m=this.colorDot,f=this.colorDotBorder):(u=240*(1-(d.point.z-this.zMin)*this.scale.z/this.verticalRatio),m=this._hsv2rgb(u,1,1),f=this._hsv2rgb(u,1,.8)),i.lineWidth=1,i.strokeStyle=f,i.fillStyle=m,i.beginPath(),i.arc(d.screen.x,d.screen.y,p,0,2*Math.PI,!0),i.fill(),i.stroke()}}},s.prototype._redrawDataBar=function(){var t,e,i,o,n=this.frame.canvas,r=n.getContext("2d");if(!(void 0===this.dataPoints||this.dataPoints.length<=0)){for(t=0;t0&&(t=this.dataPoints[0],s.lineWidth=1,s.strokeStyle="blue",s.beginPath(),s.moveTo(t.screen.x,t.screen.y)),e=1;e0&&s.stroke()}},s.prototype._onMouseDown=function(t){if(t=t||window.event,this.leftButtonDown&&this._onMouseUp(t),this.leftButtonDown=t.which?1===t.which:1===t.button,this.leftButtonDown||this.touchDown){this.startMouseX=o(t),this.startMouseY=n(t),this.startStart=new Date(this.start),this.startEnd=new Date(this.end),this.startArmRotation=this.camera.getArmRotation(),this.frame.style.cursor="move";var e=this;this.onmousemove=function(t){e._onMouseMove(t)},this.onmouseup=function(t){e._onMouseUp(t)},d.addEventListener(document,"mousemove",e.onmousemove),d.addEventListener(document,"mouseup",e.onmouseup),d.preventDefault(t)}},s.prototype._onMouseMove=function(t){t=t||window.event;var e=parseFloat(o(t))-this.startMouseX,i=parseFloat(n(t))-this.startMouseY,s=this.startArmRotation.horizontal+e/200,r=this.startArmRotation.vertical+i/200,a=4,h=Math.sin(a/360*2*Math.PI);Math.abs(Math.sin(s))0?1:0>t?-1:0}var s=e[0],o=e[1],n=e[2],r=i((o.x-s.x)*(t.y-s.y)-(o.y-s.y)*(t.x-s.x)),a=i((n.x-o.x)*(t.y-o.y)-(n.y-o.y)*(t.x-o.x)),h=i((s.x-n.x)*(t.y-n.y)-(s.y-n.y)*(t.x-n.x));return!(0!=r&&0!=a&&r!=a||0!=a&&0!=h&&a!=h||0!=r&&0!=h&&r!=h)},s.prototype._dataPointFromXY=function(t,e){var i,o=100,n=null,r=null,a=null,h=new c(t,e);if(this.style===s.STYLE.BAR||this.style===s.STYLE.BARCOLOR||this.style===s.STYLE.BARSIZE)for(i=this.dataPoints.length-1;i>=0;i--){n=this.dataPoints[i];var d=n.surfaces;if(d)for(var l=d.length-1;l>=0;l--){var p=d[l],u=p.corners,m=[u[0].screen,u[1].screen,u[2].screen],f=[u[2].screen,u[3].screen,u[0].screen];if(this._insideTriangle(h,m)||this._insideTriangle(h,f))return n}}else for(i=0;ib)&&o>b&&(a=b,r=n)}}return r},s.prototype._showTooltip=function(t){var e,i,s;this.tooltip?(e=this.tooltip.dom.content,i=this.tooltip.dom.line,s=this.tooltip.dom.dot):(e=document.createElement("div"),e.style.position="absolute",e.style.padding="10px",e.style.border="1px solid #4d4d4d",e.style.color="#1a1a1a",e.style.background="rgba(255,255,255,0.7)",e.style.borderRadius="2px",e.style.boxShadow="5px 5px 10px rgba(128,128,128,0.5)",i=document.createElement("div"),i.style.position="absolute",i.style.height="40px",i.style.width="0",i.style.borderLeft="1px solid #4d4d4d",s=document.createElement("div"),s.style.position="absolute",s.style.height="0",s.style.width="0",s.style.border="5px solid #4d4d4d",s.style.borderRadius="5px",this.tooltip={dataPoint:null,dom:{content:e,line:i,dot:s}}),this._hideTooltip(),this.tooltip.dataPoint=t,e.innerHTML="function"==typeof this.showTooltip?this.showTooltip(t.point):"
x:"+t.point.x+"
y:"+t.point.y+"
z:"+t.point.z+"
",e.style.left="0",e.style.top="0",this.frame.appendChild(e),this.frame.appendChild(i),this.frame.appendChild(s);var o=e.offsetWidth,n=e.offsetHeight,r=i.offsetHeight,a=s.offsetWidth,h=s.offsetHeight,d=t.screen.x-o/2;d=Math.min(Math.max(d,10),this.frame.clientWidth-10-o),i.style.left=t.screen.x+"px",i.style.top=t.screen.y-r+"px",e.style.left=d+"px",e.style.top=t.screen.y-r-n+"px",s.style.left=t.screen.x-a/2+"px",s.style.top=t.screen.y-h/2+"px"},s.prototype._hideTooltip=function(){if(this.tooltip){this.tooltip.dataPoint=null;for(var t in this.tooltip.dom)if(this.tooltip.dom.hasOwnProperty(t)){var e=this.tooltip.dom[t];e&&e.parentNode&&e.parentNode.removeChild(e)}}},t.exports=s},function(t,e,i){function s(){this.armLocation=new o,this.armRotation={},this.armRotation.horizontal=0,this.armRotation.vertical=0,this.armLength=1.7,this.cameraLocation=new o,this.cameraRotation=new o(.5*Math.PI,0,0),this.calculateCameraOrientation()}var o=i(10);s.prototype.setArmLocation=function(t,e,i){this.armLocation.x=t,this.armLocation.y=e,this.armLocation.z=i,this.calculateCameraOrientation()},s.prototype.setArmRotation=function(t,e){void 0!==t&&(this.armRotation.horizontal=t),void 0!==e&&(this.armRotation.vertical=e,this.armRotation.vertical<0&&(this.armRotation.vertical=0),this.armRotation.vertical>.5*Math.PI&&(this.armRotation.vertical=.5*Math.PI)),(void 0!==t||void 0!==e)&&this.calculateCameraOrientation()},s.prototype.getArmRotation=function(){var t={};return t.horizontal=this.armRotation.horizontal,t.vertical=this.armRotation.vertical,t},s.prototype.setArmLength=function(t){void 0!==t&&(this.armLength=t,this.armLength<.71&&(this.armLength=.71),this.armLength>5&&(this.armLength=5),this.calculateCameraOrientation())},s.prototype.getArmLength=function(){return this.armLength},s.prototype.getCameraLocation=function(){return this.cameraLocation},s.prototype.getCameraRotation=function(){return this.cameraRotation},s.prototype.calculateCameraOrientation=function(){this.cameraLocation.x=this.armLocation.x-this.armLength*Math.sin(this.armRotation.horizontal)*Math.cos(this.armRotation.vertical),this.cameraLocation.y=this.armLocation.y-this.armLength*Math.cos(this.armRotation.horizontal)*Math.cos(this.armRotation.vertical),this.cameraLocation.z=this.armLocation.z+this.armLength*Math.sin(this.armRotation.vertical),this.cameraRotation.x=Math.PI/2-this.armRotation.vertical,this.cameraRotation.y=0,this.cameraRotation.z=-this.armRotation.horizontal},t.exports=s},function(t,e,i){function s(t,e,i){this.data=t,this.column=e,this.graph=i,this.index=void 0,this.value=void 0,this.values=i.getDistinctValues(t.get(),this.column),this.values.sort(function(t,e){return t>e?1:e>t?-1:0}),this.values.length>0&&this.selectValue(0),this.dataPoints=[],this.loaded=!1,this.onLoadCallback=void 0,i.animationPreload?(this.loaded=!1,this.loadInBackground()):this.loaded=!0}var o=i(4);s.prototype.isLoaded=function(){return this.loaded},s.prototype.getLoadedProgress=function(){for(var t=this.values.length,e=0;this.dataPoints[e];)e++;return Math.round(e/t*100)},s.prototype.getLabel=function(){return this.graph.filterLabel},s.prototype.getColumn=function(){return this.column},s.prototype.getSelectedValue=function(){return void 0===this.index?void 0:this.values[this.index]},s.prototype.getValues=function(){return this.values},s.prototype.getValue=function(t){if(t>=this.values.length)throw"Error: index out of range";return this.values[t] +},s.prototype._getDataPoints=function(t){if(void 0===t&&(t=this.index),void 0===t)return[];var e;if(this.dataPoints[t])e=this.dataPoints[t];else{var i={};i.column=this.column,i.value=this.values[t];var s=new o(this.data,{filter:function(t){return t[i.column]==i.value}}).get();e=this.graph._getDataPoints(s),this.dataPoints[t]=e}return e},s.prototype.setOnLoadCallback=function(t){this.onLoadCallback=t},s.prototype.selectValue=function(t){if(t>=this.values.length)throw"Error: index out of range";this.index=t,this.value=this.values[t]},s.prototype.loadInBackground=function(t){void 0===t&&(t=0);var e=this.graph.frame;if(t0&&(t--,this.setIndex(t))},s.prototype.next=function(){var t=this.getIndex();t0?this.setIndex(0):this.index=void 0},s.prototype.setIndex=function(t){if(!(ts&&(s=0),s>this.values.length-1&&(s=this.values.length-1),s},s.prototype.indexToLeft=function(t){var e=parseFloat(this.frame.bar.style.width)-this.frame.slide.clientWidth-10,i=t/(this.values.length-1)*e,s=i+3;return s},s.prototype._onMouseMove=function(t){var e=t.clientX-this.startClientX,i=this.startSlideX+e,s=this.leftToIndex(i);this.setIndex(s),o.preventDefault()},s.prototype._onMouseUp=function(){this.frame.style.cursor="auto",o.removeEventListener(document,"mousemove",this.onmousemove),o.removeEventListener(document,"mouseup",this.onmouseup),o.preventDefault()},t.exports=s},function(t){function e(t,e,i,s){this._start=0,this._end=0,this._step=1,this.prettyStep=!0,this.precision=5,this._current=0,this.setRange(t,e,i,s)}e.prototype.setRange=function(t,e,i,s){this._start=t?t:0,this._end=e?e:0,this.setStep(i,s)},e.prototype.setStep=function(t,i){void 0===t||0>=t||(void 0!==i&&(this.prettyStep=i),this._step=this.prettyStep===!0?e.calculatePrettyStep(t):t)},e.calculatePrettyStep=function(t){var e=function(t){return Math.log(t)/Math.LN10},i=Math.pow(10,Math.round(e(t))),s=2*Math.pow(10,Math.round(e(t/2))),o=5*Math.pow(10,Math.round(e(t/5))),n=i;return Math.abs(s-t)<=Math.abs(n-t)&&(n=s),Math.abs(o-t)<=Math.abs(n-t)&&(n=o),0>=n&&(n=1),n},e.prototype.getCurrent=function(){return parseFloat(this._current.toPrecision(this.precision))},e.prototype.getStep=function(){return this._step},e.prototype.start=function(){this._current=this._start-this._start%this._step},e.prototype.next=function(){this._current+=this._step},e.prototype.end=function(){return this._current>this._end},t.exports=e},function(t,e,i){function s(t,e,i,r){if(!(this instanceof s))throw new SyntaxError("Constructor must be called with the new operator");if(!(Array.isArray(i)||i instanceof n)&&i instanceof Object){var h=r;r=i,i=h}var u=this;this.defaultOptions={start:null,end:null,autoResize:!0,orientation:"bottom",width:null,height:null,maxHeight:null,minHeight:null},this.options=o.deepExtend({},this.defaultOptions),this._create(t),this.components=[],this.body={dom:this.dom,domProps:this.props,emitter:{on:this.on.bind(this),off:this.off.bind(this),emit:this.emit.bind(this)},hiddenDates:[],util:{snap:null,toScreen:u._toScreen.bind(u),toGlobalScreen:u._toGlobalScreen.bind(u),toTime:u._toTime.bind(u),toGlobalTime:u._toGlobalTime.bind(u)}},this.range=new a(this.body),this.components.push(this.range),this.body.range=this.range,this.timeAxis=new d(this.body),this.components.push(this.timeAxis),this.body.util.snap=this.timeAxis.snap.bind(this.timeAxis),this.currentTime=new l(this.body),this.components.push(this.currentTime),this.customTime=new c(this.body),this.components.push(this.customTime),this.itemSet=new p(this.body),this.components.push(this.itemSet),this.itemsData=null,this.groupsData=null,r&&this.setOptions(r),i&&this.setGroups(i),e?this.setItems(e):this.redraw()}var o=(i(56),i(45),i(1)),n=i(3),r=i(4),a=i(17),h=i(46),d=i(30),l=i(21),c=i(22),p=i(27);s.prototype=new h,s.prototype.setItems=function(t){var e,i=null==this.itemsData;if(e=t?t instanceof n||t instanceof r?t:new n(t,{type:{start:"Date",end:"Date"}}):null,this.itemsData=e,this.itemSet&&this.itemSet.setItems(e),i)if(void 0!=this.options.start||void 0!=this.options.end){if(void 0==this.options.start||void 0==this.options.end)var s=this._getDataRange();var o=void 0!=this.options.start?this.options.start:s.start,a=void 0!=this.options.end?this.options.end:s.end;this.setWindow(o,a,{animate:!1})}else this.fit({animate:!1})},s.prototype.setGroups=function(t){var e;e=t?t instanceof n||t instanceof r?t:new n(t):null,this.groupsData=e,this.itemSet.setGroups(e)},s.prototype.setSelection=function(t,e){this.itemSet&&this.itemSet.setSelection(t),e&&e.focus&&this.focus(t,e)},s.prototype.getSelection=function(){return this.itemSet&&this.itemSet.getSelection()||[]},s.prototype.focus=function(t,e){if(this.itemsData&&void 0!=t){var i=Array.isArray(t)?t:[t],s=this.itemsData.getDataSet().get(i,{type:{start:"Date",end:"Date"}}),o=null,n=null;if(s.forEach(function(t){var e=t.start.valueOf(),i="end"in t?t.end.valueOf():t.start.valueOf();(null===o||o>e)&&(o=e),(null===n||i>n)&&(n=i)}),null!==o&&null!==n){var r=(o+n)/2,a=Math.max(this.range.end-this.range.start,1.1*(n-o)),h=e&&void 0!==e.animate?e.animate:!0;this.range.setRange(r-a/2,r+a/2,h)}}},s.prototype.getItemRange=function(){var t=this.itemsData.getDataSet(),e=null,i=null;if(t){var s=t.min("start");e=s?o.convert(s.start,"Date").valueOf():null;var n=t.max("start");n&&(i=o.convert(n.start,"Date").valueOf());var r=t.max("end");r&&(i=null==i?o.convert(r.end,"Date").valueOf():Math.max(i,o.convert(r.end,"Date").valueOf()))}return{min:null!=e?new Date(e):null,max:null!=i?new Date(i):null}},t.exports=s},function(t,e,i){function s(t,e,i,s){if(!(Array.isArray(i)||i instanceof n)&&i instanceof Object){var r=s;s=i,i=r}var h=this;this.defaultOptions={start:null,end:null,autoResize:!0,orientation:"bottom",width:null,height:null,maxHeight:null,minHeight:null},this.options=o.deepExtend({},this.defaultOptions),this._create(t),this.components=[],this.body={dom:this.dom,domProps:this.props,emitter:{on:this.on.bind(this),off:this.off.bind(this),emit:this.emit.bind(this)},hiddenDates:[],util:{snap:null,toScreen:h._toScreen.bind(h),toGlobalScreen:h._toGlobalScreen.bind(h),toTime:h._toTime.bind(h),toGlobalTime:h._toGlobalTime.bind(h)}},this.range=new a(this.body),this.components.push(this.range),this.body.range=this.range,this.timeAxis=new d(this.body),this.components.push(this.timeAxis),this.body.util.snap=this.timeAxis.snap.bind(this.timeAxis),this.currentTime=new l(this.body),this.components.push(this.currentTime),this.customTime=new c(this.body),this.components.push(this.customTime),this.linegraph=new p(this.body),this.components.push(this.linegraph),this.itemsData=null,this.groupsData=null,s&&this.setOptions(s),i&&this.setGroups(i),e?this.setItems(e):this.redraw()}var o=(i(56),i(45),i(1)),n=i(3),r=i(4),a=i(17),h=i(46),d=i(30),l=i(21),c=i(22),p=i(29);s.prototype=new h,s.prototype.setItems=function(t){var e,i=null==this.itemsData;if(e=t?t instanceof n||t instanceof r?t:new n(t,{type:{start:"Date",end:"Date"}}):null,this.itemsData=e,this.linegraph&&this.linegraph.setItems(e),i)if(void 0!=this.options.start||void 0!=this.options.end){var s=void 0!=this.options.start?this.options.start:null,o=void 0!=this.options.end?this.options.end:null;this.setWindow(s,o,{animate:!1})}else this.fit({animate:!1})},s.prototype.setGroups=function(t){var e;e=t?t instanceof n||t instanceof r?t:new n(t):null,this.groupsData=e,this.linegraph.setGroups(e)},s.prototype.getLegend=function(t,e,i){return void 0===e&&(e=15),void 0===i&&(i=15),void 0!==this.linegraph.groups[t]?this.linegraph.groups[t].getLegend(e,i):"cannot find group:"+t},s.prototype.isGroupVisible=function(t){return void 0!==this.linegraph.groups[t]?this.linegraph.groups[t].visible&&(void 0===this.linegraph.options.groups.visibility[t]||1==this.linegraph.options.groups.visibility[t]):!1},s.prototype.getItemRange=function(){var t=null,e=null;for(var i in this.linegraph.groups)if(this.linegraph.groups.hasOwnProperty(i)&&1==this.linegraph.groups[i].visible)for(var s=0;sr?r:t,e=null==e?r:r>e?r:e}return{min:null!=t?new Date(t):null,max:null!=e?new Date(e):null}},t.exports=s},function(t,e,i){var s=i(44);e.convertHiddenOptions=function(t,e){if(t.hiddenDates=[],e&&1==Array.isArray(e)){for(var i=0;i=4*a){var p=0,u=n.clone();switch(i[h].repeat){case"daily":d.day()!=l.day()&&(p=1),d.dayOfYear(o.dayOfYear()),d.year(o.year()),d.subtract(7,"days"),l.dayOfYear(o.dayOfYear()),l.year(o.year()),l.subtract(7-p,"days"),u.add(1,"weeks");break;case"weekly":var m=l.diff(d,"days"),f=d.day();d.date(o.date()),d.month(o.month()),d.year(o.year()),l=d.clone(),d.day(f),l.day(f),l.add(m,"days"),d.subtract(1,"weeks"),l.subtract(1,"weeks"),u.add(1,"weeks");break;case"monthly":d.month()!=l.month()&&(p=1),d.month(o.month()),d.year(o.year()),d.subtract(1,"months"),l.month(o.month()),l.year(o.year()),l.subtract(1,"months"),l.add(p,"months"),u.add(1,"months");break;case"yearly":d.year()!=l.year()&&(p=1),d.year(o.year()),d.subtract(1,"years"),l.year(o.year()),l.subtract(1,"years"),l.add(p,"years"),u.add(1,"years");break;default:return void console.log("Wrong repeat format, allowed are: daily, weekly, monthly, yearly. Given:",i[h].repeat)}for(;u>d;)switch(t.hiddenDates.push({start:d.valueOf(),end:l.valueOf()}),i[h].repeat){case"daily":d.add(1,"days"),l.add(1,"days");break;case"weekly":d.add(1,"weeks"),l.add(1,"weeks");break;case"monthly":d.add(1,"months"),l.add(1,"months");break;case"yearly":d.add(1,"y"),l.add(1,"y");break;default:return void console.log("Wrong repeat format, allowed are: daily, weekly, monthly, yearly. Given:",i[h].repeat)}t.hiddenDates.push({start:d.valueOf(),end:l.valueOf()})}}e.removeDuplicates(t);var g=e.isHidden(t.range.start,t.hiddenDates),v=e.isHidden(t.range.end,t.hiddenDates),y=t.range.start,b=t.range.end;1==g.hidden&&(y=1==t.range.startToFront?g.startDate-1:g.endDate+1),1==v.hidden&&(b=1==t.range.endToFront?v.startDate-1:v.endDate+1),(1==g.hidden||1==v.hidden)&&t.range._applyRange(y,b)}},e.removeDuplicates=function(t){for(var e=t.hiddenDates,i=[],s=0;s=e[s].start&&e[o].end<=e[s].end?e[o].remove=!0:e[o].start>=e[s].start&&e[o].start<=e[s].end?(e[s].end=e[o].end,e[o].remove=!0):e[o].end>=e[s].start&&e[o].end<=e[s].end&&(e[s].start=e[o].start,e[o].remove=!0));for(var s=0;s=r&&a>o){i=!0;break}}if(1==i&&o=e&&i>r&&(s+=r-n)}return s},e.correctTimeForHidden=function(t,i,o){return o=s(o).toDate().valueOf(),o-=e.getHiddenDurationBefore(t,i,o)},e.getHiddenDurationBefore=function(t,e,i){var o=0;i=s(i).toDate().valueOf();for(var n=0;n=e.start&&a=a&&(o+=a-r)}return o},e.getAccumulatedHiddenDuration=function(t,e,i){for(var s=0,o=0,n=e.start,r=0;r=e.start&&h=i)break;s+=h-a}}return s},e.snapAwayFromHidden=function(t,i,s,o){var n=e.isHidden(i,t);return 1==n.hidden?0>s?1==o?n.startDate-(n.endDate-i)-1:n.startDate-1:1==o?n.endDate+(i-n.startDate)+1:n.endDate+1:i},e.isHidden=function(t,e){for(var i=0;i=s&&o>t)return{hidden:!0,startDate:s,endDate:o}}return{hidden:!1,startDate:s,endDate:o}}},function(t){function e(t,e,i,s,o,n){this.current=0,this.autoScale=!0,this.stepIndex=0,this.step=1,this.scale=1,this.marginStart,this.marginEnd,this.deadSpace=0,this.majorSteps=[1,2,5,10],this.minorSteps=[.25,.5,1,2],this.alignZeros=n,this.setRange(t,e,i,s,o)}e.prototype.setRange=function(t,e,i,s,o){this._start=void 0===o.min?t:o.min,this._end=void 0===o.max?e:o.max,this._start==this._end&&(this._start-=.75,this._end+=1),1==this.autoScale&&this.setMinimumStep(i,s),this.setFirst(o)},e.prototype.setMinimumStep=function(t,e){var i=this._end-this._start,s=1.2*i,o=t*(s/e),n=Math.round(Math.log(s)/Math.LN10),r=-1,a=Math.pow(10,n),h=0;0>n&&(h=n);for(var d=!1,l=h;Math.abs(l)<=Math.abs(n);l++){a=Math.pow(10,l);for(var c=0;c=o){d=!0,r=c;break}}if(1==d)break}this.stepIndex=r,this.scale=a,this.step=a*this.minorSteps[r]},e.prototype.setFirst=function(t){void 0===t&&(t={});var e=void 0===t.min?this._start-2*this.scale*this.minorSteps[this.stepIndex]:t.min,i=void 0===t.max?this._end+this.scale*this.minorSteps[this.stepIndex]:t.max;this.marginEnd=void 0===t.max?this.roundToMinor(i):t.max,this.marginStart=void 0===t.min?this.roundToMinor(e):t.min,1==this.alignZeros&&(this.marginEnd-this.marginStart)%this.step!=0&&(this.marginEnd+=this.marginEnd%this.step),this.deadSpace=this.roundToMinor(i)-i+this.roundToMinor(e)-e,this.marginRange=this.marginEnd-this.marginStart,this.current=this.marginEnd},e.prototype.roundToMinor=function(t){var e=t-t%(this.scale*this.minorSteps[this.stepIndex]);return t%(this.scale*this.minorSteps[this.stepIndex])>.5*this.scale*this.minorSteps[this.stepIndex]?e+this.scale*this.minorSteps[this.stepIndex]:e},e.prototype.hasNext=function(){return this.current>=this.marginStart},e.prototype.next=function(){var t=this.current;this.current-=this.step,this.current==t&&(this.current=this._end)},e.prototype.previous=function(){this.current+=this.step,this.marginEnd+=this.step,this.marginRange=this.marginEnd-this.marginStart},e.prototype.getCurrent=function(t){var e=Math.abs(this.current)0;s--){if("0"!=i[s]){if("."==i[s]||","==i[s]){i=i.slice(0,s);break}break}i=i.slice(0,s)}}else{var o="",n=i.indexOf("e");if(-1!=n&&(o=i.slice(n),i=i.slice(0,n)),n=Math.max(i.indexOf(","),i.indexOf(".")),-1===n?(0!==t&&(i+="."),n=i.length+t):0!==t&&(n+=t+1),n>i.length)for(var r=n-i.length;r>0;r--)i+="0";else i=i.slice(0,n);i+=o}return i},e.prototype.snap=function(){},e.prototype.isMajor=function(){return this.current%(this.scale*this.majorSteps[this.stepIndex])==0},t.exports=e},function(t,e,i){function s(t,e){var i=h().hours(0).minutes(0).seconds(0).milliseconds(0);this.start=i.clone().add(-3,"days").valueOf(),this.end=i.clone().add(4,"days").valueOf(),this.body=t,this.deltaDifference=0,this.scaleOffset=0,this.startToFront=!1,this.endToFront=!0,this.defaultOptions={start:null,end:null,direction:"horizontal",moveable:!0,zoomable:!0,min:null,max:null,zoomMin:10,zoomMax:31536e10},this.options=r.extend({},this.defaultOptions),this.props={touch:{}},this.animateTimer=null,this.body.emitter.on("dragstart",this._onDragStart.bind(this)),this.body.emitter.on("drag",this._onDrag.bind(this)),this.body.emitter.on("dragend",this._onDragEnd.bind(this)),this.body.emitter.on("hold",this._onHold.bind(this)),this.body.emitter.on("mousewheel",this._onMouseWheel.bind(this)),this.body.emitter.on("DOMMouseScroll",this._onMouseWheel.bind(this)),this.body.emitter.on("touch",this._onTouch.bind(this)),this.body.emitter.on("pinch",this._onPinch.bind(this)),this.setOptions(e)}function o(t){if("horizontal"!=t&&"vertical"!=t)throw new TypeError('Unknown direction "'+t+'". Choose "horizontal" or "vertical".')}function n(t,e){return{x:t.pageX-r.getAbsoluteLeft(e),y:t.pageY-r.getAbsoluteTop(e)}}var r=i(1),a=i(47),h=i(44),d=i(20),l=i(15);s.prototype=new d,s.prototype.setOptions=function(t){if(t){var e=["direction","min","max","zoomMin","zoomMax","moveable","zoomable","activate","hiddenDates"];r.selectiveExtend(e,this.options,t),("start"in t||"end"in t)&&this.setRange(t.start,t.end)}},s.prototype.setRange=function(t,e,i){var s=void 0!=t?r.convert(t,"Date").valueOf():null,o=void 0!=e?r.convert(e,"Date").valueOf():null;if(this._cancelAnimation(),i){var n=this,a=this.start,h=this.end,d="number"==typeof i?i:500,c=(new Date).valueOf(),p=!1,u=function(){if(!n.props.touch.dragging){var t=(new Date).valueOf(),e=t-c,i=e>d,f=i||null===s?s:r.easeInOutQuad(e,a,s,d),g=i||null===o?o:r.easeInOutQuad(e,h,o,d);m=n._applyRange(f,g),l.updateHiddenDates(n.body,n.options.hiddenDates),p=p||m,m&&n.body.emitter.emit("rangechange",{start:new Date(n.start),end:new Date(n.end)}),i?p&&n.body.emitter.emit("rangechanged",{start:new Date(n.start),end:new Date(n.end)}):n.animateTimer=setTimeout(u,20)}};return u()}var m=this._applyRange(s,o);if(l.updateHiddenDates(this.body,this.options.hiddenDates),m){var f={start:new Date(this.start),end:new Date(this.end)};this.body.emitter.emit("rangechange",f),this.body.emitter.emit("rangechanged",f)}},s.prototype._cancelAnimation=function(){this.animateTimer&&(clearTimeout(this.animateTimer),this.animateTimer=null)},s.prototype._applyRange=function(t,e){var i,s=null!=t?r.convert(t,"Date").valueOf():this.start,o=null!=e?r.convert(e,"Date").valueOf():this.end,n=null!=this.options.max?r.convert(this.options.max,"Date").valueOf():null,a=null!=this.options.min?r.convert(this.options.min,"Date").valueOf():null;if(isNaN(s)||null===s)throw new Error('Invalid start "'+t+'"');if(isNaN(o)||null===o)throw new Error('Invalid end "'+e+'"');if(s>o&&(o=s),null!==a&&a>s&&(i=a-s,s+=i,o+=i,null!=n&&o>n&&(o=n)),null!==n&&o>n&&(i=o-n,s-=i,o-=i,null!=a&&a>s&&(s=a)),null!==this.options.zoomMin){var h=parseFloat(this.options.zoomMin);0>h&&(h=0),h>o-s&&(this.end-this.start===h?(s=this.start,o=this.end):(i=h-(o-s),s-=i/2,o+=i/2))}if(null!==this.options.zoomMax){var d=parseFloat(this.options.zoomMax);0>d&&(d=0),o-s>d&&(this.end-this.start===d?(s=this.start,o=this.end):(i=o-s-d,s+=i/2,o-=i/2))}var l=this.start!=s||this.end!=o;return s>=this.start&&s<=this.end||o>=this.start&&o<=this.end||this.start>=s&&this.start<=o||this.end>=s&&this.end<=o||this.body.emitter.emit("checkRangedItems"),this.start=s,this.end=o,l},s.prototype.getRange=function(){return{start:this.start,end:this.end}},s.prototype.conversion=function(t,e){return s.conversion(this.start,this.end,t,e)},s.conversion=function(t,e,i,s){return void 0===s&&(s=0),0!=i&&e-t!=0?{offset:t,scale:i/(e-t-s)}:{offset:0,scale:1}},s.prototype._onDragStart=function(){this.deltaDifference=0,this.previousDelta=0,this.options.moveable&&this.props.touch.allowDragging&&(this.props.touch.start=this.start,this.props.touch.end=this.end,this.props.touch.dragging=!0,this.body.dom.root&&(this.body.dom.root.style.cursor="move"))},s.prototype._onDrag=function(t){if(this.options.moveable&&this.props.touch.allowDragging){var e=this.options.direction;o(e);var i="horizontal"==e?t.gesture.deltaX:t.gesture.deltaY;i-=this.deltaDifference;var s=this.props.touch.end-this.props.touch.start,n=l.getHiddenDurationBetween(this.body.hiddenDates,this.start,this.end);s-=n;var r="horizontal"==e?this.body.domProps.center.width:this.body.domProps.center.height,a=-i/r*s,h=this.props.touch.start+a,d=this.props.touch.end+a,c=l.snapAwayFromHidden(this.body.hiddenDates,h,this.previousDelta-i,!0),p=l.snapAwayFromHidden(this.body.hiddenDates,d,this.previousDelta-i,!0);if(c!=h||p!=d)return this.deltaDifference+=i,this.props.touch.start=c,this.props.touch.end=p,void this._onDrag(t);this.previousDelta=i,this._applyRange(h,d),this.body.emitter.emit("rangechange",{start:new Date(this.start),end:new Date(this.end)})}},s.prototype._onDragEnd=function(){this.options.moveable&&this.props.touch.allowDragging&&(this.props.touch.dragging=!1,this.body.dom.root&&(this.body.dom.root.style.cursor="auto"),this.body.emitter.emit("rangechanged",{start:new Date(this.start),end:new Date(this.end)}))},s.prototype._onMouseWheel=function(t){if(this.options.zoomable&&this.options.moveable){var e=0;if(t.wheelDelta?e=t.wheelDelta/120:t.detail&&(e=-t.detail/3),e){var i;i=0>e?1-e/5:1/(1+e/5);var s=a.fakeGesture(this,t),o=n(s.center,this.body.dom.center),r=this._pointerToDate(o);this.zoom(i,r,e)}t.preventDefault()}},s.prototype._onTouch=function(){this.props.touch.start=this.start,this.props.touch.end=this.end,this.props.touch.allowDragging=!0,this.props.touch.center=null,this.scaleOffset=0,this.deltaDifference=0},s.prototype._onHold=function(){this.props.touch.allowDragging=!1},s.prototype._onPinch=function(t){if(this.options.zoomable&&this.options.moveable&&(this.props.touch.allowDragging=!1,t.gesture.touches.length>1)){this.props.touch.center||(this.props.touch.center=n(t.gesture.center,this.body.dom.center));var e=1/(t.gesture.scale+this.scaleOffset),i=this._pointerToDate(this.props.touch.center),s=l.getHiddenDurationBetween(this.body.hiddenDates,this.start,this.end),o=l.getHiddenDurationBefore(this.body.hiddenDates,this,i),r=s-o,a=i-o+(this.props.touch.start-(i-o))*e,h=i+r+(this.props.touch.end-(i+r))*e;this.startToFront=1-e>0?!1:!0,this.endToFront=e-1>0?!1:!0;var d=l.snapAwayFromHidden(this.body.hiddenDates,a,1-e,!0),c=l.snapAwayFromHidden(this.body.hiddenDates,h,e-1,!0);(d!=a||c!=h)&&(this.props.touch.start=d,this.props.touch.end=c,this.scaleOffset=1-t.gesture.scale,a=d,h=c),this.setRange(a,h),this.startToFront=!1,this.endToFront=!0}},s.prototype._pointerToDate=function(t){var e,i=this.options.direction;if(o(i),"horizontal"==i)return this.body.util.toTime(t.x).valueOf();var s=this.body.domProps.center.height;return e=this.conversion(s),t.y/e.scale+e.offset},s.prototype.zoom=function(t,e,i){null==e&&(e=(this.start+this.end)/2);var s=l.getHiddenDurationBetween(this.body.hiddenDates,this.start,this.end),o=l.getHiddenDurationBefore(this.body.hiddenDates,this,e),n=s-o,r=e-o+(this.start-(e-o))*t,a=e+n+(this.end-(e+n))*t;this.startToFront=i>0?!1:!0,this.endToFront=-i>0?!1:!0;var h=l.snapAwayFromHidden(this.body.hiddenDates,r,i,!0),d=l.snapAwayFromHidden(this.body.hiddenDates,a,-i,!0);(h!=r||d!=a)&&(r=h,a=d),this.setRange(r,a),this.startToFront=!1,this.endToFront=!0},s.prototype.move=function(t){var e=this.end-this.start,i=this.start+e*t,s=this.end+e*t;this.start=i,this.end=s},s.prototype.moveTo=function(t){var e=(this.start+this.end)/2,i=e-t,s=this.start-i,o=this.end-i;this.setRange(s,o)},t.exports=s},function(t,e){var i=.001;e.orderByStart=function(t){t.sort(function(t,e){return t.data.start-e.data.start})},e.orderByEnd=function(t){t.sort(function(t,e){var i="end"in t.data?t.data.end:t.data.start,s="end"in e.data?e.data.end:e.data.start;return i-s})},e.stack=function(t,i,s){var o,n;if(s)for(o=0,n=t.length;n>o;o++)t[o].top=null;for(o=0,n=t.length;n>o;o++){var r=t[o];if(r.stack&&null===r.top){r.top=i.axis;do{for(var a=null,h=0,d=t.length;d>h;h++){var l=t[h];if(null!==l.top&&l!==r&&l.stack&&e.collision(r,l,i.item)){a=l;break}}null!=a&&(r.top=a.top+a.height+i.item.vertical)}while(a)}}},e.nostack=function(t,e,i){var s,o,n;for(s=0,o=t.length;o>s;s++)if(void 0!==t[s].data.subgroup){n=e.axis;for(var r in i)i.hasOwnProperty(r)&&1==i[r].visible&&i[r].indexe.left&&t.top-s.vertical+ie.top}},function(t,e,i){function s(t,e,i,o){this.current=new Date,this._start=new Date,this._end=new Date,this.autoScale=!0,this.scale="day",this.step=1,this.setRange(t,e,i),this.switchedDay=!1,this.switchedMonth=!1,this.switchedYear=!1,this.hiddenDates=o,void 0===o&&(this.hiddenDates=[]),this.format=s.FORMAT}var o=i(44),n=i(15),r=i(1);s.FORMAT={minorLabels:{millisecond:"SSS",second:"s",minute:"HH:mm",hour:"HH:mm",weekday:"ddd D",day:"D",month:"MMM",year:"YYYY"},majorLabels:{millisecond:"HH:mm:ss",second:"D MMMM HH:mm",minute:"ddd D MMMM",hour:"ddd D MMMM",weekday:"MMMM YYYY",day:"MMMM YYYY",month:"YYYY",year:""}},s.prototype.setFormat=function(t){var e=r.deepExtend({},s.FORMAT);this.format=r.deepExtend(e,t)},s.prototype.setRange=function(t,e,i){if(!(t instanceof Date&&e instanceof Date))throw"No legal start or end date in method setRange";this._start=void 0!=t?new Date(t.valueOf()):new Date,this._end=void 0!=e?new Date(e.valueOf()):new Date,this.autoScale&&this.setMinimumStep(i)},s.prototype.first=function(){this.current=new Date(this._start.valueOf()),this.roundToMinor()},s.prototype.roundToMinor=function(){switch(this.scale){case"year":this.current.setFullYear(this.step*Math.floor(this.current.getFullYear()/this.step)),this.current.setMonth(0);case"month":this.current.setDate(1);case"day":case"weekday":this.current.setHours(0);case"hour":this.current.setMinutes(0);case"minute":this.current.setSeconds(0);case"second":this.current.setMilliseconds(0)}if(1!=this.step)switch(this.scale){case"millisecond":this.current.setMilliseconds(this.current.getMilliseconds()-this.current.getMilliseconds()%this.step);break;case"second":this.current.setSeconds(this.current.getSeconds()-this.current.getSeconds()%this.step);break;case"minute":this.current.setMinutes(this.current.getMinutes()-this.current.getMinutes()%this.step); +break;case"hour":this.current.setHours(this.current.getHours()-this.current.getHours()%this.step);break;case"weekday":case"day":this.current.setDate(this.current.getDate()-1-(this.current.getDate()-1)%this.step+1);break;case"month":this.current.setMonth(this.current.getMonth()-this.current.getMonth()%this.step);break;case"year":this.current.setFullYear(this.current.getFullYear()-this.current.getFullYear()%this.step)}},s.prototype.hasNext=function(){return this.current.valueOf()<=this._end.valueOf()},s.prototype.next=function(){var t=this.current.valueOf();if(this.current.getMonth()<6)switch(this.scale){case"millisecond":this.current=new Date(this.current.valueOf()+this.step);break;case"second":this.current=new Date(this.current.valueOf()+1e3*this.step);break;case"minute":this.current=new Date(this.current.valueOf()+1e3*this.step*60);break;case"hour":this.current=new Date(this.current.valueOf()+1e3*this.step*60*60);var e=this.current.getHours();this.current.setHours(e-e%this.step);break;case"weekday":case"day":this.current.setDate(this.current.getDate()+this.step);break;case"month":this.current.setMonth(this.current.getMonth()+this.step);break;case"year":this.current.setFullYear(this.current.getFullYear()+this.step)}else switch(this.scale){case"millisecond":this.current=new Date(this.current.valueOf()+this.step);break;case"second":this.current.setSeconds(this.current.getSeconds()+this.step);break;case"minute":this.current.setMinutes(this.current.getMinutes()+this.step);break;case"hour":this.current.setHours(this.current.getHours()+this.step);break;case"weekday":case"day":this.current.setDate(this.current.getDate()+this.step);break;case"month":this.current.setMonth(this.current.getMonth()+this.step);break;case"year":this.current.setFullYear(this.current.getFullYear()+this.step)}if(1!=this.step)switch(this.scale){case"millisecond":this.current.getMilliseconds()0&&(this.step=e),this.autoScale=!1},s.prototype.setAutoScale=function(t){this.autoScale=t},s.prototype.setMinimumStep=function(t){if(void 0!=t){var e=31104e6,i=2592e6,s=864e5,o=36e5,n=6e4,r=1e3,a=1;1e3*e>t&&(this.scale="year",this.step=1e3),500*e>t&&(this.scale="year",this.step=500),100*e>t&&(this.scale="year",this.step=100),50*e>t&&(this.scale="year",this.step=50),10*e>t&&(this.scale="year",this.step=10),5*e>t&&(this.scale="year",this.step=5),e>t&&(this.scale="year",this.step=1),3*i>t&&(this.scale="month",this.step=3),i>t&&(this.scale="month",this.step=1),5*s>t&&(this.scale="day",this.step=5),2*s>t&&(this.scale="day",this.step=2),s>t&&(this.scale="day",this.step=1),s/2>t&&(this.scale="weekday",this.step=1),4*o>t&&(this.scale="hour",this.step=4),o>t&&(this.scale="hour",this.step=1),15*n>t&&(this.scale="minute",this.step=15),10*n>t&&(this.scale="minute",this.step=10),5*n>t&&(this.scale="minute",this.step=5),n>t&&(this.scale="minute",this.step=1),15*r>t&&(this.scale="second",this.step=15),10*r>t&&(this.scale="second",this.step=10),5*r>t&&(this.scale="second",this.step=5),r>t&&(this.scale="second",this.step=1),200*a>t&&(this.scale="millisecond",this.step=200),100*a>t&&(this.scale="millisecond",this.step=100),50*a>t&&(this.scale="millisecond",this.step=50),10*a>t&&(this.scale="millisecond",this.step=10),5*a>t&&(this.scale="millisecond",this.step=5),a>t&&(this.scale="millisecond",this.step=1)}},s.prototype.snap=function(t){var e=new Date(t.valueOf());if("year"==this.scale){var i=e.getFullYear()+Math.round(e.getMonth()/12);e.setFullYear(Math.round(i/this.step)*this.step),e.setMonth(0),e.setDate(0),e.setHours(0),e.setMinutes(0),e.setSeconds(0),e.setMilliseconds(0)}else if("month"==this.scale)e.getDate()>15?(e.setDate(1),e.setMonth(e.getMonth()+1)):e.setDate(1),e.setHours(0),e.setMinutes(0),e.setSeconds(0),e.setMilliseconds(0);else if("day"==this.scale){switch(this.step){case 5:case 2:e.setHours(24*Math.round(e.getHours()/24));break;default:e.setHours(12*Math.round(e.getHours()/12))}e.setMinutes(0),e.setSeconds(0),e.setMilliseconds(0)}else if("weekday"==this.scale){switch(this.step){case 5:case 2:e.setHours(12*Math.round(e.getHours()/12));break;default:e.setHours(6*Math.round(e.getHours()/6))}e.setMinutes(0),e.setSeconds(0),e.setMilliseconds(0)}else if("hour"==this.scale){switch(this.step){case 4:e.setMinutes(60*Math.round(e.getMinutes()/60));break;default:e.setMinutes(30*Math.round(e.getMinutes()/30))}e.setSeconds(0),e.setMilliseconds(0)}else if("minute"==this.scale){switch(this.step){case 15:case 10:e.setMinutes(5*Math.round(e.getMinutes()/5)),e.setSeconds(0);break;case 5:e.setSeconds(60*Math.round(e.getSeconds()/60));break;default:e.setSeconds(30*Math.round(e.getSeconds()/30))}e.setMilliseconds(0)}else if("second"==this.scale)switch(this.step){case 15:case 10:e.setSeconds(5*Math.round(e.getSeconds()/5)),e.setMilliseconds(0);break;case 5:e.setMilliseconds(1e3*Math.round(e.getMilliseconds()/1e3));break;default:e.setMilliseconds(500*Math.round(e.getMilliseconds()/500))}else if("millisecond"==this.scale){var s=this.step>5?this.step/2:1;e.setMilliseconds(Math.round(e.getMilliseconds()/s)*s)}return e},s.prototype.isMajor=function(){if(1==this.switchedYear)switch(this.switchedYear=!1,this.scale){case"year":case"month":case"weekday":case"day":case"hour":case"minute":case"second":case"millisecond":return!0;default:return!1}else if(1==this.switchedMonth)switch(this.switchedMonth=!1,this.scale){case"weekday":case"day":case"hour":case"minute":case"second":case"millisecond":return!0;default:return!1}else if(1==this.switchedDay)switch(this.switchedDay=!1,this.scale){case"millisecond":case"second":case"minute":case"hour":return!0;default:return!1}switch(this.scale){case"millisecond":return 0==this.current.getMilliseconds();case"second":return 0==this.current.getSeconds();case"minute":return 0==this.current.getHours()&&0==this.current.getMinutes();case"hour":return 0==this.current.getHours();case"weekday":case"day":return 1==this.current.getDate();case"month":return 0==this.current.getMonth();case"year":return!1;default:return!1}},s.prototype.getLabelMinor=function(t){void 0==t&&(t=this.current);var e=this.format.minorLabels[this.scale];return e&&e.length>0?o(t).format(e):""},s.prototype.getLabelMajor=function(t){void 0==t&&(t=this.current);var e=this.format.majorLabels[this.scale];return e&&e.length>0?o(t).format(e):""},t.exports=s},function(t){function e(){this.options=null,this.props=null}e.prototype.setOptions=function(t){t&&util.extend(this.options,t)},e.prototype.redraw=function(){return!1},e.prototype.destroy=function(){},e.prototype._isResized=function(){var t=this.props._previousWidth!==this.props.width||this.props._previousHeight!==this.props.height;return this.props._previousWidth=this.props.width,this.props._previousHeight=this.props.height,t},t.exports=e},function(t,e,i){function s(t,e){this.body=t,this.defaultOptions={showCurrentTime:!0,locales:a,locale:"en"},this.options=o.extend({},this.defaultOptions),this.offset=0,this._create(),this.setOptions(e)}var o=i(1),n=i(20),r=i(44),a=i(48);s.prototype=new n,s.prototype._create=function(){var t=document.createElement("div");t.className="currenttime",t.style.position="absolute",t.style.top="0px",t.style.height="100%",this.bar=t},s.prototype.destroy=function(){this.options.showCurrentTime=!1,this.redraw(),this.body=null},s.prototype.setOptions=function(t){t&&o.selectiveExtend(["showCurrentTime","locale","locales"],this.options,t)},s.prototype.redraw=function(){if(this.options.showCurrentTime){var t=this.body.dom.backgroundVertical;this.bar.parentNode!=t&&(this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar),t.appendChild(this.bar),this.start());var e=new Date((new Date).valueOf()+this.offset),i=this.body.util.toScreen(e),s=this.options.locales[this.options.locale],o=s.current+" "+s.time+": "+r(e).format("dddd, MMMM Do YYYY, H:mm:ss");o=o.charAt(0).toUpperCase()+o.substring(1),this.bar.style.left=i+"px",this.bar.title=o}else this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar),this.stop();return!1},s.prototype.start=function(){function t(){e.stop();var i=e.body.range.conversion(e.body.domProps.center.width).scale,s=1/i/10;30>s&&(s=30),s>1e3&&(s=1e3),e.redraw(),e.currentTimeTimer=setTimeout(t,s)}var e=this;t()},s.prototype.stop=function(){void 0!==this.currentTimeTimer&&(clearTimeout(this.currentTimeTimer),delete this.currentTimeTimer)},s.prototype.setCurrentTime=function(t){var e=o.convert(t,"Date").valueOf(),i=(new Date).valueOf();this.offset=e-i,this.redraw()},s.prototype.getCurrentTime=function(){return new Date((new Date).valueOf()+this.offset)},t.exports=s},function(t,e,i){function s(t,e){this.body=t,this.defaultOptions={showCustomTime:!1,locales:h,locale:"en"},this.options=n.extend({},this.defaultOptions),this.customTime=new Date,this.eventParams={},this._create(),this.setOptions(e)}var o=i(45),n=i(1),r=i(20),a=i(44),h=i(48);s.prototype=new r,s.prototype.setOptions=function(t){t&&n.selectiveExtend(["showCustomTime","locale","locales"],this.options,t)},s.prototype._create=function(){var t=document.createElement("div");t.className="customtime",t.style.position="absolute",t.style.top="0px",t.style.height="100%",this.bar=t;var e=document.createElement("div");e.style.position="relative",e.style.top="0px",e.style.left="-10px",e.style.height="100%",e.style.width="20px",t.appendChild(e),this.hammer=o(t,{prevent_default:!0}),this.hammer.on("dragstart",this._onDragStart.bind(this)),this.hammer.on("drag",this._onDrag.bind(this)),this.hammer.on("dragend",this._onDragEnd.bind(this))},s.prototype.destroy=function(){this.options.showCustomTime=!1,this.redraw(),this.hammer.enable(!1),this.hammer=null,this.body=null},s.prototype.redraw=function(){if(this.options.showCustomTime){var t=this.body.dom.backgroundVertical;this.bar.parentNode!=t&&(this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar),t.appendChild(this.bar));var e=this.body.util.toScreen(this.customTime),i=this.options.locales[this.options.locale],s=i.time+": "+a(this.customTime).format("dddd, MMMM Do YYYY, H:mm:ss");s=s.charAt(0).toUpperCase()+s.substring(1),this.bar.style.left=e+"px",this.bar.title=s}else this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar);return!1},s.prototype.setCustomTime=function(t){this.customTime=n.convert(t,"Date"),this.redraw()},s.prototype.getCustomTime=function(){return new Date(this.customTime.valueOf())},s.prototype._onDragStart=function(t){this.eventParams.dragging=!0,this.eventParams.customTime=this.customTime,t.stopPropagation(),t.preventDefault()},s.prototype._onDrag=function(t){if(this.eventParams.dragging){var e=t.gesture.deltaX,i=this.body.util.toScreen(this.eventParams.customTime)+e,s=this.body.util.toTime(i);this.setCustomTime(s),this.body.emitter.emit("timechange",{time:new Date(this.customTime.valueOf())}),t.stopPropagation(),t.preventDefault()}},s.prototype._onDragEnd=function(t){this.eventParams.dragging&&(this.body.emitter.emit("timechanged",{time:new Date(this.customTime.valueOf())}),t.stopPropagation(),t.preventDefault())},t.exports=s},function(t,e,i){function s(t,e,i,s){this.id=o.randomUUID(),this.body=t,this.defaultOptions={orientation:"left",showMinorLabels:!0,showMajorLabels:!0,icons:!0,majorLinesOffset:7,minorLinesOffset:4,labelOffsetX:10,labelOffsetY:2,iconWidth:20,width:"40px",visible:!0,alignZeros:!0,customRange:{left:{min:void 0,max:void 0},right:{min:void 0,max:void 0}},title:{left:{text:void 0},right:{text:void 0}},format:{left:{decimals:void 0},right:{decimals:void 0}}},this.linegraphOptions=s,this.linegraphSVG=i,this.props={},this.DOMelements={lines:{},labels:{},title:{}},this.dom={},this.range={start:0,end:0},this.options=o.extend({},this.defaultOptions),this.conversionFactor=1,this.setOptions(e),this.width=Number((""+this.options.width).replace("px","")),this.minWidth=this.width,this.height=this.linegraphSVG.offsetHeight,this.hidden=!1,this.stepPixels=25,this.stepPixelsForced=25,this.zeroCrossing=-1,this.lineOffset=0,this.master=!0,this.svgElements={},this.iconsRemoved=!1,this.groups={},this.amountOfGroups=0,this._create();var n=this;this.body.emitter.on("verticalDrag",function(){n.dom.lineContainer.style.top=n.body.domProps.scrollTop+"px"})}var o=i(1),n=i(2),r=i(20),a=i(16);s.prototype=new r,s.prototype.addGroup=function(t,e){this.groups.hasOwnProperty(t)||(this.groups[t]=e),this.amountOfGroups+=1},s.prototype.updateGroup=function(t,e){this.groups[t]=e},s.prototype.removeGroup=function(t){this.groups.hasOwnProperty(t)&&(delete this.groups[t],this.amountOfGroups-=1)},s.prototype.setOptions=function(t){if(t){var e=!1;this.options.orientation!=t.orientation&&void 0!==t.orientation&&(e=!0);var i=["orientation","showMinorLabels","showMajorLabels","icons","majorLinesOffset","minorLinesOffset","labelOffsetX","labelOffsetY","iconWidth","width","visible","customRange","title","format","alignZeros"];o.selectiveExtend(i,this.options,t),this.minWidth=Number((""+this.options.width).replace("px","")),1==e&&this.dom.frame&&(this.hide(),this.show())}},s.prototype._create=function(){this.dom.frame=document.createElement("div"),this.dom.frame.style.width=this.options.width,this.dom.frame.style.height=this.height,this.dom.lineContainer=document.createElement("div"),this.dom.lineContainer.style.width="100%",this.dom.lineContainer.style.height=this.height,this.dom.lineContainer.style.position="relative",this.svg=document.createElementNS("http://www.w3.org/2000/svg","svg"),this.svg.style.position="absolute",this.svg.style.top="0px",this.svg.style.height="100%",this.svg.style.width="100%",this.svg.style.display="block",this.dom.frame.appendChild(this.svg)},s.prototype._redrawGroupIcons=function(){n.prepareElements(this.svgElements);var t,e=this.options.iconWidth,i=15,s=4,o=s+.5*i;t="left"==this.options.orientation?s:this.width-e-s;for(var r in this.groups)this.groups.hasOwnProperty(r)&&(1!=this.groups[r].visible||void 0!==this.linegraphOptions.visibility[r]&&1!=this.linegraphOptions.visibility[r]||(this.groups[r].drawIcon(t,o,this.svgElements,this.svg,e,i),o+=i+s));n.cleanupElements(this.svgElements),this.iconsRemoved=!1},s.prototype._cleanupIcons=function(){0==this.iconsRemoved&&(n.prepareElements(this.svgElements),n.cleanupElements(this.svgElements),this.iconsRemoved=!0)},s.prototype.show=function(){this.hidden=!1,this.dom.frame.parentNode||("left"==this.options.orientation?this.body.dom.left.appendChild(this.dom.frame):this.body.dom.right.appendChild(this.dom.frame)),this.dom.lineContainer.parentNode||this.body.dom.backgroundHorizontal.appendChild(this.dom.lineContainer)},s.prototype.hide=function(){this.hidden=!0,this.dom.frame.parentNode&&this.dom.frame.parentNode.removeChild(this.dom.frame),this.dom.lineContainer.parentNode&&this.dom.lineContainer.parentNode.removeChild(this.dom.lineContainer)},s.prototype.setRange=function(t,e){0==this.master&&1==this.options.alignZeros&&-1!=this.zeroCrossing&&t>0&&(t=0),this.range.start=t,this.range.end=e},s.prototype.redraw=function(){var t=!1,e=0;this.dom.lineContainer.style.top=this.body.domProps.scrollTop+"px";for(var i in this.groups)this.groups.hasOwnProperty(i)&&(1!=this.groups[i].visible||void 0!==this.linegraphOptions.visibility[i]&&1!=this.linegraphOptions.visibility[i]||e++);if(0==this.amountOfGroups||0==e)this.hide();else{this.show(),this.height=Number(this.linegraphSVG.style.height.replace("px","")),this.dom.lineContainer.style.height=this.height+"px",this.width=1==this.options.visible?Number((""+this.options.width).replace("px","")):0;var s=this.props,o=this.dom.frame;o.className="dataaxis",this._calculateCharSize();var n=this.options.orientation,r=this.options.showMinorLabels,a=this.options.showMajorLabels;s.minorLabelHeight=r?s.minorCharHeight:0,s.majorLabelHeight=a?s.majorCharHeight:0,s.minorLineWidth=this.body.dom.backgroundHorizontal.offsetWidth-this.lineOffset-this.width+2*this.options.minorLinesOffset,s.minorLineHeight=1,s.majorLineWidth=this.body.dom.backgroundHorizontal.offsetWidth-this.lineOffset-this.width+2*this.options.majorLinesOffset,s.majorLineHeight=1,"left"==n?(o.style.top="0",o.style.left="0",o.style.bottom="",o.style.width=this.width+"px",o.style.height=this.height+"px"):(o.style.top="",o.style.bottom="0",o.style.left="0",o.style.width=this.width+"px",o.style.height=this.height+"px"),t=this._redrawLabels(),1==this.options.icons?this._redrawGroupIcons():this._cleanupIcons(),this._redrawTitle(n)}return t},s.prototype._redrawLabels=function(){n.prepareElements(this.DOMelements.lines),n.prepareElements(this.DOMelements.labels);var t=this.options.orientation,e=this.master?this.props.majorCharHeight||10:this.stepPixelsForced,i=new a(this.range.start,this.range.end,e,this.dom.frame.offsetHeight,this.options.customRange[this.options.orientation],0==this.master&&this.options.alignZeros);this.step=i;var s=(this.dom.frame.offsetHeight-i.deadSpace*(this.dom.frame.offsetHeight/i.marginRange))/((i.marginRange-i.deadSpace)/i.step);this.stepPixels=s;var o=this.height/s,r=0;if(0==this.master){s=this.stepPixelsForced,r=Math.round(this.dom.frame.offsetHeight/s-o);for(var h=0;.5*r>h;h++)i.previous();if(o=this.height/s,-1!=this.zeroCrossing&&1==this.options.alignZeros){var d=i.marginEnd/i.step-this.zeroCrossing;if(d>0)for(var h=0;d>h;h++)i.next();else if(0>d)for(var h=0;-d>h;h++)i.previous()}}else o+=.25;this.valueAtZero=i.marginEnd;var l,c=0,p=1;void 0!==this.options.format[t]&&(l=this.options.format[t].decimals),this.maxLabelSize=0;for(var u=0;p=0&&this._redrawLabel(u-2,i.getCurrent(l),t,"yAxis major",this.props.majorCharHeight),this._redrawLine(u,t,"grid horizontal major",this.options.majorLinesOffset,this.props.majorLineWidth)):this._redrawLine(u,t,"grid horizontal minor",this.options.minorLinesOffset,this.props.minorLineWidth),1==this.master&&0==i.current&&(this.zeroCrossing=p),p++}this.conversionFactor=0==this.master?u/(this.valueAtZero-i.current):this.dom.frame.offsetHeight/i.marginRange;var f=0;void 0!==this.options.title[t]&&void 0!==this.options.title[t].text&&(f=this.props.titleCharHeight);var g=1==this.options.icons?Math.max(this.options.iconWidth,f)+this.options.labelOffsetX+15:f+this.options.labelOffsetX+15;return this.maxLabelSize>this.width-g&&1==this.options.visible?(this.width=this.maxLabelSize+g,this.options.width=this.width+"px",n.cleanupElements(this.DOMelements.lines),n.cleanupElements(this.DOMelements.labels),this.redraw(),!0):this.maxLabelSizethis.minWidth?(this.width=Math.max(this.minWidth,this.maxLabelSize+g),this.options.width=this.width+"px",n.cleanupElements(this.DOMelements.lines),n.cleanupElements(this.DOMelements.labels),this.redraw(),!0):(n.cleanupElements(this.DOMelements.lines),n.cleanupElements(this.DOMelements.labels),!1)},s.prototype.convertValue=function(t){var e=this.valueAtZero-t,i=e*this.conversionFactor;return i},s.prototype._redrawLabel=function(t,e,i,s,o){var r=n.getDOMElement("div",this.DOMelements.labels,this.dom.frame);r.className=s,r.innerHTML=e,"left"==i?(r.style.left="-"+this.options.labelOffsetX+"px",r.style.textAlign="right"):(r.style.right="-"+this.options.labelOffsetX+"px",r.style.textAlign="left"),r.style.top=t-.5*o+this.options.labelOffsetY+"px",e+="";var a=Math.max(this.props.majorCharWidth,this.props.minorCharWidth);this.maxLabelSized;d++){var c=this.visibleItems[d];c.repositionY(e)}return s},s.prototype._calculateHeight=function(t){var e,i=this.visibleItems;this.resetSubgroups();var s=this;if(i.length){var n=i[0].top,r=i[0].top+i[0].height;if(o.forEach(i,function(t){n=Math.min(n,t.top),r=Math.max(r,t.top+t.height),void 0!==t.data.subgroup&&(s.subgroups[t.data.subgroup].height=Math.max(s.subgroups[t.data.subgroup].height,t.height),s.subgroups[t.data.subgroup].visible=!0)}),n>t.axis){var a=n-t.axis;r-=a,o.forEach(i,function(t){t.top-=a})}e=r+t.item.vertical/2}else e=t.axis+t.item.vertical;return e=Math.max(e,this.props.label.height)},s.prototype.show=function(){this.dom.label.parentNode||this.itemSet.dom.labelSet.appendChild(this.dom.label),this.dom.foreground.parentNode||this.itemSet.dom.foreground.appendChild(this.dom.foreground),this.dom.background.parentNode||this.itemSet.dom.background.appendChild(this.dom.background),this.dom.axis.parentNode||this.itemSet.dom.axis.appendChild(this.dom.axis)},s.prototype.hide=function(){var t=this.dom.label;t.parentNode&&t.parentNode.removeChild(t);var e=this.dom.foreground;e.parentNode&&e.parentNode.removeChild(e);var i=this.dom.background;i.parentNode&&i.parentNode.removeChild(i);var s=this.dom.axis;s.parentNode&&s.parentNode.removeChild(s)},s.prototype.add=function(t){if(this.items[t.id]=t,t.setParent(this),void 0!==t.data.subgroup&&(void 0===this.subgroups[t.data.subgroup]&&(this.subgroups[t.data.subgroup]={height:0,visible:!1,index:this.subgroupIndex,items:[]},this.subgroupIndex++),this.subgroups[t.data.subgroup].items.push(t)),this.orderSubgroups(),-1==this.visibleItems.indexOf(t)){var e=this.itemSet.body.range;this._checkIfVisible(t,this.visibleItems,e)}},s.prototype.orderSubgroups=function(){if(void 0!==this.subgroupOrderer){var t=[];if("string"==typeof this.subgroupOrderer){for(var e in this.subgroups)t.push({subgroup:e,sortField:this.subgroups[e].items[0].data[this.subgroupOrderer]});t.sort(function(t,e){return t.sortField-e.sortField})}else if("function"==typeof this.subgroupOrderer){for(var e in this.subgroups)t.push(this.subgroups[e].items[0].data);t.sort(this.subgroupOrderer)}if(t.length>0)for(var i=0;it?-1:l>=t?0:1};if(e.length>0)for(n=0;nl}),1==this.checkRangedItems)for(this.checkRangedItems=!1,n=0;nl})}for(n=0;n=0&&(n=e[r],!o(n));r--)void 0===s[n.id]&&(s[n.id]=!0,i.push(n));for(r=t+1;rs;s++){var n=this.visibleItems[s];n.repositionY(e)}return i},s.prototype.show=function(){this.dom.background.parentNode||this.itemSet.dom.background.appendChild(this.dom.background)},t.exports=s},function(t,e,i){function s(t,e){this.body=t,this.defaultOptions={type:null,orientation:"bottom",align:"auto",stack:!0,groupOrder:null,selectable:!0,editable:{updateTime:!1,updateGroup:!1,add:!1,remove:!1},onAdd:function(t,e){e(t)},onUpdate:function(t,e){e(t)},onMove:function(t,e){e(t)},onRemove:function(t,e){e(t)},onMoving:function(t,e){e(t)},margin:{item:{horizontal:10,vertical:10},axis:20},padding:5},this.options=n.extend({},this.defaultOptions),this.itemOptions={type:{start:"Date",end:"Date"}},this.conversion={toScreen:t.util.toScreen,toTime:t.util.toTime},this.dom={},this.props={},this.hammer=null;var i=this;this.itemsData=null,this.groupsData=null,this.itemListeners={add:function(t,e){i._onAdd(e.items)},update:function(t,e){i._onUpdate(e.items)},remove:function(t,e){i._onRemove(e.items)}},this.groupListeners={add:function(t,e){i._onAddGroups(e.items)},update:function(t,e){i._onUpdateGroups(e.items)},remove:function(t,e){i._onRemoveGroups(e.items)}},this.items={},this.groups={},this.groupIds=[],this.selection=[],this.stackDirty=!0,this.touchParams={},this._create(),this.setOptions(e)}var o=i(45),n=i(1),r=i(3),a=i(4),h=i(20),d=i(25),l=i(26),c=i(33),p=i(34),u=i(35),m=i(32),f="__ungrouped__",g="__background__";s.prototype=new h,s.types={background:m,box:c,range:u,point:p},s.prototype._create=function(){var t=document.createElement("div");t.className="itemset",t["timeline-itemset"]=this,this.dom.frame=t;var e=document.createElement("div");e.className="background",t.appendChild(e),this.dom.background=e;var i=document.createElement("div");i.className="foreground",t.appendChild(i),this.dom.foreground=i;var s=document.createElement("div");s.className="axis",this.dom.axis=s;var n=document.createElement("div");n.className="labelset",this.dom.labelSet=n,this._updateUngrouped();var r=new l(g,null,this);r.show(),this.groups[g]=r,this.hammer=o(this.body.dom.centerContainer,{preventDefault:!0}),this.hammer.on("touch",this._onTouch.bind(this)),this.hammer.on("dragstart",this._onDragStart.bind(this)),this.hammer.on("drag",this._onDrag.bind(this)),this.hammer.on("dragend",this._onDragEnd.bind(this)),this.hammer.on("tap",this._onSelectItem.bind(this)),this.hammer.on("hold",this._onMultiSelectItem.bind(this)),this.hammer.on("doubletap",this._onAddItem.bind(this)),this.show()},s.prototype.setOptions=function(t){if(t){var e=["type","align","orientation","padding","stack","selectable","groupOrder","dataAttributes","template","hide"];n.selectiveExtend(e,this.options,t),"margin"in t&&("number"==typeof t.margin?(this.options.margin.axis=t.margin,this.options.margin.item.horizontal=t.margin,this.options.margin.item.vertical=t.margin):"object"==typeof t.margin&&(n.selectiveExtend(["axis"],this.options.margin,t.margin),"item"in t.margin&&("number"==typeof t.margin.item?(this.options.margin.item.horizontal=t.margin.item,this.options.margin.item.vertical=t.margin.item):"object"==typeof t.margin.item&&n.selectiveExtend(["horizontal","vertical"],this.options.margin.item,t.margin.item)))),"editable"in t&&("boolean"==typeof t.editable?(this.options.editable.updateTime=t.editable,this.options.editable.updateGroup=t.editable,this.options.editable.add=t.editable,this.options.editable.remove=t.editable):"object"==typeof t.editable&&n.selectiveExtend(["updateTime","updateGroup","add","remove"],this.options.editable,t.editable));var i=function(e){var i=t[e];if(i){if(!(i instanceof Function))throw new Error("option "+e+" must be a function "+e+"(item, callback)");this.options[e]=i}}.bind(this);["onAdd","onUpdate","onRemove","onMove","onMoving"].forEach(i),this.markDirty()}},s.prototype.markDirty=function(){this.groupIds=[],this.stackDirty=!0},s.prototype.destroy=function(){this.hide(),this.setItems(null),this.setGroups(null),this.hammer=null,this.body=null,this.conversion=null},s.prototype.hide=function(){this.dom.frame.parentNode&&this.dom.frame.parentNode.removeChild(this.dom.frame),this.dom.axis.parentNode&&this.dom.axis.parentNode.removeChild(this.dom.axis),this.dom.labelSet.parentNode&&this.dom.labelSet.parentNode.removeChild(this.dom.labelSet)},s.prototype.show=function(){this.dom.frame.parentNode||this.body.dom.center.appendChild(this.dom.frame),this.dom.axis.parentNode||this.body.dom.backgroundVertical.appendChild(this.dom.axis),this.dom.labelSet.parentNode||this.body.dom.left.appendChild(this.dom.labelSet)},s.prototype.setSelection=function(t){var e,i,s,o;for(void 0==t&&(t=[]),Array.isArray(t)||(t=[t]),e=0,i=this.selection.length;i>e;e++)s=this.selection[e],o=this.items[s],o&&o.unselect();for(this.selection=[],e=0,i=t.length;i>e;e++)s=t[e],o=this.items[s],o&&(this.selection.push(s),o.select())},s.prototype.getSelection=function(){return this.selection.concat([])},s.prototype.getVisibleItems=function(){var t=this.body.range.getRange(),e=this.body.util.toScreen(t.start),i=this.body.util.toScreen(t.end),s=[];for(var o in this.groups)if(this.groups.hasOwnProperty(o))for(var n=this.groups[o],r=n.visibleItems,a=0;ae&&s.push(h.id)}return s},s.prototype._deselect=function(t){for(var e=this.selection,i=0,s=e.length;s>i;i++)if(e[i]==t){e.splice(i,1);break}},s.prototype.redraw=function(){var t=this.options.margin,e=this.body.range,i=n.option.asSize,s=this.options,o=s.orientation,r=!1,a=this.dom.frame,h=s.editable.updateTime||s.editable.updateGroup;this.props.top=this.body.domProps.top.height+this.body.domProps.border.top,this.props.left=this.body.domProps.left.width+this.body.domProps.border.left,a.className="itemset"+(h?" editable":""),r=this._orderGroups()||r;var d=e.end-e.start,l=d!=this.lastVisibleInterval||this.props.width!=this.props.lastWidth;l&&(this.stackDirty=!0),this.lastVisibleInterval=d,this.props.lastWidth=this.props.width;var c=this.stackDirty,p=this._firstGroup(),u={item:t.item,axis:t.axis},m={item:t.item,axis:t.item.vertical/2},f=0,v=t.axis+t.item.vertical;return this.groups[g].redraw(e,m,c),n.forEach(this.groups,function(t){var i=t==p?u:m,s=t.redraw(e,i,c);r=s||r,f+=t.height}),f=Math.max(f,v),this.stackDirty=!1,a.style.height=i(f),this.props.width=a.offsetWidth,this.props.height=f,this.dom.axis.style.top=i("top"==o?this.body.domProps.top.height+this.body.domProps.border.top:this.body.domProps.top.height+this.body.domProps.centerContainer.height),this.dom.axis.style.left="0",r=this._isResized()||r},s.prototype._firstGroup=function(){var t="top"==this.options.orientation?0:this.groupIds.length-1,e=this.groupIds[t],i=this.groups[e]||this.groups[f];return i||null},s.prototype._updateUngrouped=function(){{var t,e,i=this.groups[f];this.groups[g]}if(this.groupsData){if(i){i.hide(),delete this.groups[f];for(e in this.items)if(this.items.hasOwnProperty(e)){t=this.items[e],t.parent&&t.parent.remove(t);var s=this._getGroupId(t.data),o=this.groups[s];o&&o.add(t)||t.hide()}}}else if(!i){var n=null,r=null;i=new d(n,r,this),this.groups[f]=i;for(e in this.items)this.items.hasOwnProperty(e)&&(t=this.items[e],i.add(t));i.show()}},s.prototype.getLabelSet=function(){return this.dom.labelSet},s.prototype.setItems=function(t){var e,i=this,s=this.itemsData;if(t){if(!(t instanceof r||t instanceof a))throw new TypeError("Data must be an instance of DataSet or DataView");this.itemsData=t}else this.itemsData=null;if(s&&(n.forEach(this.itemListeners,function(t,e){s.off(e,t)}),e=s.getIds(),this._onRemove(e)),this.itemsData){var o=this.id;n.forEach(this.itemListeners,function(t,e){i.itemsData.on(e,t,o)}),e=this.itemsData.getIds(),this._onAdd(e),this._updateUngrouped()}},s.prototype.getItems=function(){return this.itemsData},s.prototype.setGroups=function(t){var e,i=this;if(this.groupsData&&(n.forEach(this.groupListeners,function(t,e){i.groupsData.unsubscribe(e,t)}),e=this.groupsData.getIds(),this.groupsData=null,this._onRemoveGroups(e)),t){if(!(t instanceof r||t instanceof a))throw new TypeError("Data must be an instance of DataSet or DataView");this.groupsData=t}else this.groupsData=null;if(this.groupsData){var s=this.id;n.forEach(this.groupListeners,function(t,e){i.groupsData.on(e,t,s)}),e=this.groupsData.getIds(),this._onAddGroups(e)}this._updateUngrouped(),this._order(),this.body.emitter.emit("change",{queue:!0})},s.prototype.getGroups=function(){return this.groupsData},s.prototype.removeItem=function(t){var e=this.itemsData.get(t),i=this.itemsData.getDataSet();e&&this.options.onRemove(e,function(e){e&&i.remove(t)})},s.prototype._getType=function(t){return t.type||this.options.type||(t.end?"range":"box")},s.prototype._getGroupId=function(t){var e=this._getType(t);return"background"==e&&void 0==t.group?g:this.groupsData?t.group:f},s.prototype._onUpdate=function(t){var e=this;t.forEach(function(t){var i=e.itemsData.get(t,e.itemOptions),o=e.items[t],n=e._getType(i),r=s.types[n];if(o&&(r&&o instanceof r?e._updateItem(o,i):(e._removeItem(o),o=null)),!o){if(!r)throw new TypeError("rangeoverflow"==n?'Item type "rangeoverflow" is deprecated. Use css styling instead: .vis.timeline .item.range .content {overflow: visible;}':'Unknown item type "'+n+'"');o=new r(i,e.conversion,e.options),o.id=t,e._addItem(o)}}),this._order(),this.stackDirty=!0,this.body.emitter.emit("change",{queue:!0})},s.prototype._onAdd=s.prototype._onUpdate,s.prototype._onRemove=function(t){var e=0,i=this;t.forEach(function(t){var s=i.items[t];s&&(e++,i._removeItem(s))}),e&&(this._order(),this.stackDirty=!0,this.body.emitter.emit("change",{queue:!0}))},s.prototype._order=function(){n.forEach(this.groups,function(t){t.order()})},s.prototype._onUpdateGroups=function(t){this._onAddGroups(t)},s.prototype._onAddGroups=function(t){var e=this;t.forEach(function(t){var i=e.groupsData.get(t),s=e.groups[t];if(s)s.setData(i);else{if(t==f||t==g)throw new Error("Illegal group id. "+t+" is a reserved id.");var o=Object.create(e.options);n.extend(o,{height:null}),s=new d(t,i,e),e.groups[t]=s;for(var r in e.items)if(e.items.hasOwnProperty(r)){var a=e.items[r];a.data.group==t&&s.add(a)}s.order(),s.show()}}),this.body.emitter.emit("change",{queue:!0})},s.prototype._onRemoveGroups=function(t){var e=this.groups;t.forEach(function(t){var i=e[t];i&&(i.hide(),delete e[t])}),this.markDirty(),this.body.emitter.emit("change",{queue:!0})},s.prototype._orderGroups=function(){if(this.groupsData){var t=this.groupsData.getIds({order:this.options.groupOrder}),e=!n.equalArray(t,this.groupIds);if(e){var i=this.groups;t.forEach(function(t){i[t].hide()}),t.forEach(function(t){i[t].show()}),this.groupIds=t}return e}return!1},s.prototype._addItem=function(t){this.items[t.id]=t;var e=this._getGroupId(t.data),i=this.groups[e];i&&i.add(t)},s.prototype._updateItem=function(t,e){var i=t.data.group;if(t.setData(e),i!=t.data.group){var s=this.groups[i];s&&s.remove(t);var o=this._getGroupId(t.data),n=this.groups[o];n&&n.add(t)}},s.prototype._removeItem=function(t){t.hide(),delete this.items[t.id];var e=this.selection.indexOf(t.id);-1!=e&&this.selection.splice(e,1),t.parent&&t.parent.remove(t)},s.prototype._constructByEndArray=function(t){for(var e=[],i=0;i0||o.length>0)&&this.body.emitter.emit("select",{items:a})}},s.prototype._onAddItem=function(t){if(this.options.selectable&&this.options.editable.add){var e=this,i=this.body.util.snap||null,o=s.itemFromTarget(t);if(o){var r=e.itemsData.get(o.id);this.options.onUpdate(r,function(t){t&&e.itemsData.getDataSet().update(t)})}else{var a=n.getAbsoluteLeft(this.dom.frame),h=t.gesture.center.pageX-a,d=this.body.util.toTime(h),l={start:i?i(d):d,content:"new item"};if("range"===this.options.type){var c=this.body.util.toTime(h+this.props.width/5);l.end=i?i(c):c}l[this.itemsData._fieldId]=n.randomUUID();var p=s.groupFromTarget(t);p&&(l.group=p.groupId),this.options.onAdd(l,function(t){t&&e.itemsData.getDataSet().add(t)})}}},s.prototype._onMultiSelectItem=function(t){if(this.options.selectable){var e,i=s.itemFromTarget(t);if(i){e=this.getSelection();var o=t.gesture.touches[0]&&t.gesture.touches[0].shiftKey||!1;if(o){e.push(i.id);var n=s._getItemRange(this.itemsData.get(e,this.itemOptions));e=[];for(var r in this.items)if(this.items.hasOwnProperty(r)){var a=this.items[r],h=a.data.start,d=void 0!==a.data.end?a.data.end:h;h>=n.min&&d<=n.max&&e.push(a.id)}}else{var l=e.indexOf(i.id);-1==l?e.push(i.id):e.splice(l,1)}this.setSelection(e),this.body.emitter.emit("select",{items:this.getSelection()})}}},s._getItemRange=function(t){var e=null,i=null;return t.forEach(function(t){(null==i||t.starte)&&(e=t.end):(null==e||t.start>e)&&(e=t.start)}),{min:i,max:e}},s.itemFromTarget=function(t){for(var e=t.target;e;){if(e.hasOwnProperty("timeline-item"))return e["timeline-item"];e=e.parentNode}return null},s.groupFromTarget=function(t){for(var e=t.target;e;){if(e.hasOwnProperty("timeline-group"))return e["timeline-group"];e=e.parentNode}return null},s.itemSetFromTarget=function(t){for(var e=t.target;e;){if(e.hasOwnProperty("timeline-itemset"))return e["timeline-itemset"];e=e.parentNode}return null},t.exports=s},function(t,e,i){function s(t,e,i,s){this.body=t,this.defaultOptions={enabled:!0,icons:!0,iconSize:20,iconSpacing:6,left:{visible:!0,position:"top-left"},right:{visible:!0,position:"top-left"}},this.side=i,this.options=o.extend({},this.defaultOptions),this.linegraphOptions=s,this.svgElements={},this.dom={},this.groups={},this.amountOfGroups=0,this._create(),this.setOptions(e)}var o=i(1),n=i(2),r=i(20);s.prototype=new r,s.prototype.clear=function(){this.groups={},this.amountOfGroups=0},s.prototype.addGroup=function(t,e){this.groups.hasOwnProperty(t)||(this.groups[t]=e),this.amountOfGroups+=1},s.prototype.updateGroup=function(t,e){this.groups[t]=e},s.prototype.removeGroup=function(t){this.groups.hasOwnProperty(t)&&(delete this.groups[t],this.amountOfGroups-=1)},s.prototype._create=function(){this.dom.frame=document.createElement("div"),this.dom.frame.className="legend",this.dom.frame.style.position="absolute",this.dom.frame.style.top="10px",this.dom.frame.style.display="block",this.dom.textArea=document.createElement("div"),this.dom.textArea.className="legendText",this.dom.textArea.style.position="relative",this.dom.textArea.style.top="0px",this.svg=document.createElementNS("http://www.w3.org/2000/svg","svg"),this.svg.style.position="absolute",this.svg.style.top="0px",this.svg.style.width=this.options.iconSize+5+"px",this.svg.style.height="100%",this.dom.frame.appendChild(this.svg),this.dom.frame.appendChild(this.dom.textArea)},s.prototype.hide=function(){this.dom.frame.parentNode&&this.dom.frame.parentNode.removeChild(this.dom.frame)},s.prototype.show=function(){this.dom.frame.parentNode||this.body.dom.center.appendChild(this.dom.frame)},s.prototype.setOptions=function(t){var e=["enabled","orientation","icons","left","right"];o.selectiveDeepExtend(e,this.options,t)},s.prototype.redraw=function(){var t=0;for(var e in this.groups)this.groups.hasOwnProperty(e)&&(1!=this.groups[e].visible||void 0!==this.linegraphOptions.visibility[e]&&1!=this.linegraphOptions.visibility[e]||t++);if(0==this.options[this.side].visible||0==this.amountOfGroups||0==this.options.enabled||0==t)this.hide();else{if(this.show(),"top-left"==this.options[this.side].position||"bottom-left"==this.options[this.side].position?(this.dom.frame.style.left="4px",this.dom.frame.style.textAlign="left",this.dom.textArea.style.textAlign="left",this.dom.textArea.style.left=this.options.iconSize+15+"px",this.dom.textArea.style.right="",this.svg.style.left="0px",this.svg.style.right=""):(this.dom.frame.style.right="4px",this.dom.frame.style.textAlign="right",this.dom.textArea.style.textAlign="right",this.dom.textArea.style.right=this.options.iconSize+15+"px",this.dom.textArea.style.left="",this.svg.style.right="0px",this.svg.style.left=""),"top-left"==this.options[this.side].position||"top-right"==this.options[this.side].position)this.dom.frame.style.top=4-Number(this.body.dom.center.style.top.replace("px",""))+"px",this.dom.frame.style.bottom="";else{var i=this.body.domProps.center.height-this.body.domProps.centerContainer.height;this.dom.frame.style.bottom=4+i+Number(this.body.dom.center.style.top.replace("px",""))+"px",this.dom.frame.style.top=""}0==this.options.icons?(this.dom.frame.style.width=this.dom.textArea.offsetWidth+10+"px",this.dom.textArea.style.right="",this.dom.textArea.style.left="",this.svg.style.width="0px"):(this.dom.frame.style.width=this.options.iconSize+15+this.dom.textArea.offsetWidth+10+"px",this.drawLegendIcons());var s="";for(var e in this.groups)this.groups.hasOwnProperty(e)&&(1!=this.groups[e].visible||void 0!==this.linegraphOptions.visibility[e]&&1!=this.linegraphOptions.visibility[e]||(s+=this.groups[e].content+"
"));this.dom.textArea.innerHTML=s,this.dom.textArea.style.lineHeight=.75*this.options.iconSize+this.options.iconSpacing+"px"}},s.prototype.drawLegendIcons=function(){if(this.dom.frame.parentNode){n.prepareElements(this.svgElements);var t=window.getComputedStyle(this.dom.frame).paddingTop,e=Number(t.replace("px","")),i=e,s=this.options.iconSize,o=.75*this.options.iconSize,r=e+.5*o+3;this.svg.style.width=s+5+e+"px";for(var a in this.groups)this.groups.hasOwnProperty(a)&&(1!=this.groups[a].visible||void 0!==this.linegraphOptions.visibility[a]&&1!=this.linegraphOptions.visibility[a]||(this.groups[a].drawIcon(i,r,this.svgElements,this.svg,s,o),r+=o+this.options.iconSpacing));n.cleanupElements(this.svgElements)}},t.exports=s},function(t,e,i){function s(t,e){this.id=o.randomUUID(),this.body=t,this.defaultOptions={yAxisOrientation:"left",defaultGroup:"default",sort:!0,sampling:!0,graphHeight:"400px",shaded:{enabled:!1,orientation:"bottom"},style:"line",barChart:{width:50,handleOverlap:"overlap",align:"center"},catmullRom:{enabled:!0,parametrization:"centripetal",alpha:.5},drawPoints:{enabled:!0,size:6,style:"square"},dataAxis:{showMinorLabels:!0,showMajorLabels:!0,icons:!1,width:"40px",visible:!0,alignZeros:!0,customRange:{left:{min:void 0,max:void 0},right:{min:void 0,max:void 0}}},legend:{enabled:!1,icons:!0,left:{visible:!0,position:"top-left"},right:{visible:!0,position:"top-right"}},groups:{visibility:{}}},this.options=o.extend({},this.defaultOptions),this.dom={},this.props={},this.hammer=null,this.groups={},this.abortedGraphUpdate=!1,this.autoSizeSVG=!1;var i=this;this.itemsData=null,this.groupsData=null,this.itemListeners={add:function(t,e){i._onAdd(e.items)},update:function(t,e){i._onUpdate(e.items)},remove:function(t,e){i._onRemove(e.items)}},this.groupListeners={add:function(t,e){i._onAddGroups(e.items)},update:function(t,e){i._onUpdateGroups(e.items)},remove:function(t,e){i._onRemoveGroups(e.items)}},this.items={},this.selection=[],this.lastStart=this.body.range.start,this.touchParams={},this.svgElements={},this.setOptions(e),this.groupsUsingDefaultStyles=[0],this.COUNTER=0,this.body.emitter.on("rangechanged",function(){i.lastStart=i.body.range.start,i.svg.style.left=o.option.asSize(-i.width),i.redraw.call(i,!0)}),this._create(),this.framework={svg:this.svg,svgElements:this.svgElements,options:this.options,groups:this.groups},this.body.emitter.emit("change")}var o=i(1),n=i(2),r=i(3),a=i(4),h=i(20),d=i(23),l=i(24),c=i(28),p=i(52),u="__ungrouped__";s.prototype=new h,s.prototype._create=function(){var t=document.createElement("div");t.className="LineGraph",this.dom.frame=t,this.svg=document.createElementNS("http://www.w3.org/2000/svg","svg"),this.svg.style.position="relative",this.svg.style.height=(""+this.options.graphHeight).replace("px","")+"px",this.svg.style.display="block",t.appendChild(this.svg),this.options.dataAxis.orientation="left",this.yAxisLeft=new d(this.body,this.options.dataAxis,this.svg,this.options.groups),this.options.dataAxis.orientation="right",this.yAxisRight=new d(this.body,this.options.dataAxis,this.svg,this.options.groups),delete this.options.dataAxis.orientation,this.legendLeft=new c(this.body,this.options.legend,"left",this.options.groups),this.legendRight=new c(this.body,this.options.legend,"right",this.options.groups),this.show()},s.prototype.setOptions=function(t){if(t){var e=["sampling","defaultGroup","graphHeight","yAxisOrientation","style","barChart","dataAxis","sort","groups"];void 0===t.graphHeight&&void 0!==t.height&&void 0!==this.body.domProps.centerContainer.height?this.autoSizeSVG=!0:void 0!==this.body.domProps.centerContainer.height&&void 0!==t.graphHeight&&parseInt((t.graphHeight+"").replace("px",""))0){var d=this.body.util.toGlobalTime(-this.body.domProps.root.width),l=this.body.util.toGlobalTime(2*this.body.domProps.root.width),c={};for(this._getRelevantData(a,c,d,l),this._applySampling(a,c),e=0;eu&&console.log("WARNING: there may be an infinite loop in the _updateGraph emitter cycle."),this.COUNTER=0,this.abortedGraphUpdate=!1,e=0;e0)for(r=0;rs){d.push(h);break}d.push(h)}}else for(a=0;ai&&h.x0)for(var s=0;s0){var n=1,r=o.length,a=this.body.util.toGlobalScreen(o[o.length-1].x)-this.body.util.toGlobalScreen(o[0].x),h=r/a;n=Math.min(Math.ceil(.2*r),Math.max(1,Math.round(h)));for(var d=[],l=0;r>l;l+=n)d.push(o[l]);e[t[s]]=d}}},s.prototype._getYRanges=function(t,e,i){var s,o,n,r,a=[],h=[];if(t.length>0){for(n=0;n0&&(o=this.groups[t[n]],"stack"==r.barChart.handleOverlap&&"bar"==r.style?"left"==r.yAxisOrientation?a=a.concat(o.getYRange(s)):h=h.concat(o.getYRange(s)):i[t[n]]=o.getYRange(s,t[n]));p.getStackedBarYRange(a,i,t,"__barchartLeft","left"),p.getStackedBarYRange(h,i,t,"__barchartRight","right")}},s.prototype._updateYAxis=function(t,e){var i,s,o=!1,n=!1,r=!1,a=1e9,h=1e9,d=-1e9,l=-1e9;if(t.length>0){for(var c=0;ci?i:a,d=s>d?s:d):(r=!0,h=h>i?i:h,l=s>l?s:l));1==n&&this.yAxisLeft.setRange(a,d),1==r&&this.yAxisRight.setRange(h,l)}return o=this._toggleAxisVisiblity(n,this.yAxisLeft)||o,o=this._toggleAxisVisiblity(r,this.yAxisRight)||o,1==r&&1==n?(this.yAxisLeft.drawIcons=!0,this.yAxisRight.drawIcons=!0):(this.yAxisLeft.drawIcons=!1,this.yAxisRight.drawIcons=!1),this.yAxisRight.master=!n,0==this.yAxisRight.master?(this.yAxisLeft.lineOffset=1==r?this.yAxisRight.width:0,o=this.yAxisLeft.redraw()||o,this.yAxisRight.stepPixelsForced=this.yAxisLeft.stepPixels,this.yAxisRight.zeroCrossing=this.yAxisLeft.zeroCrossing,o=this.yAxisRight.redraw()||o):o=this.yAxisRight.redraw()||o,-1!=t.indexOf("__barchartLeft")&&t.splice(t.indexOf("__barchartLeft"),1),-1!=t.indexOf("__barchartRight")&&t.splice(t.indexOf("__barchartRight"),1),o},s.prototype._toggleAxisVisiblity=function(t,e){var i=!1;return 0==t?e.dom.frame.parentNode&&0==e.hidden&&(e.hide(),i=!0):e.dom.frame.parentNode||1!=e.hidden||(e.show(),i=!0),i},s.prototype._convertXcoordinates=function(t){for(var e,i,s=[],o=this.body.util.toScreen,n=0;nc;){c++;var p=h.getCurrent(),u=this.body.util.toScreen(p),m=h.isMajor();this.options.showMinorLabels&&this._repaintMinorText(u,h.getLabelMinor(),t),m&&this.options.showMajorLabels?(u>0&&(void 0==l&&(l=u),this._repaintMajorText(u,h.getLabelMajor(),t)),this._repaintMajorLine(u,t)):this._repaintMinorLine(u,t),h.next()}if(this.options.showMajorLabels){var f=this.body.util.toTime(0),g=h.getLabelMajor(f),v=g.length*(this.props.majorCharWidth||10)+10;(void 0==l||l>v)&&this._repaintMajorText(0,g,t)}o.forEach(this.dom.redundant,function(t){for(;t.length;){var e=t.pop();e&&e.parentNode&&e.parentNode.removeChild(e)}})},s.prototype._repaintMinorText=function(t,e,i){var s=this.dom.redundant.minorTexts.shift();if(!s){var o=document.createTextNode("");s=document.createElement("div"),s.appendChild(o),s.className="text minor",this.dom.foreground.appendChild(s)}this.dom.minorTexts.push(s),s.childNodes[0].nodeValue=e,s.style.top="top"==i?this.props.majorLabelHeight+"px":"0",s.style.left=t+"px"},s.prototype._repaintMajorText=function(t,e,i){var s=this.dom.redundant.majorTexts.shift();if(!s){var o=document.createTextNode(e);s=document.createElement("div"),s.className="text major",s.appendChild(o),this.dom.foreground.appendChild(s)}this.dom.majorTexts.push(s),s.childNodes[0].nodeValue=e,s.style.top="top"==i?"0":this.props.minorLabelHeight+"px",s.style.left=t+"px"},s.prototype._repaintMinorLine=function(t,e){var i=this.dom.redundant.minorLines.shift();i||(i=document.createElement("div"),i.className="grid vertical minor",this.dom.background.appendChild(i)),this.dom.minorLines.push(i);var s=this.props;i.style.top="top"==e?s.majorLabelHeight+"px":this.body.domProps.top.height+"px",i.style.height=s.minorLineHeight+"px",i.style.left=t-s.minorLineWidth/2+"px"},s.prototype._repaintMajorLine=function(t,e){var i=this.dom.redundant.majorLines.shift();i||(i=document.createElement("DIV"),i.className="grid vertical major",this.dom.background.appendChild(i)),this.dom.majorLines.push(i);var s=this.props;i.style.top="top"==e?"0":this.body.domProps.top.height+"px",i.style.left=t-s.majorLineWidth/2+"px",i.style.height=s.majorLineHeight+"px"},s.prototype._calculateCharSize=function(){this.dom.measureCharMinor||(this.dom.measureCharMinor=document.createElement("DIV"),this.dom.measureCharMinor.className="text minor measure",this.dom.measureCharMinor.style.position="absolute",this.dom.measureCharMinor.appendChild(document.createTextNode("0")),this.dom.foreground.appendChild(this.dom.measureCharMinor)),this.props.minorCharHeight=this.dom.measureCharMinor.clientHeight,this.props.minorCharWidth=this.dom.measureCharMinor.clientWidth,this.dom.measureCharMajor||(this.dom.measureCharMajor=document.createElement("DIV"),this.dom.measureCharMajor.className="text major measure",this.dom.measureCharMajor.style.position="absolute",this.dom.measureCharMajor.appendChild(document.createTextNode("0")),this.dom.foreground.appendChild(this.dom.measureCharMajor)),this.props.majorCharHeight=this.dom.measureCharMajor.clientHeight,this.props.majorCharWidth=this.dom.measureCharMajor.clientWidth},s.prototype.snap=function(t){return this.step.snap(t)},t.exports=s},function(t,e,i){function s(t,e,i){this.id=null,this.parent=null,this.data=t,this.dom=null,this.conversion=e||{},this.options=i||{},this.selected=!1,this.displayed=!1,this.dirty=!0,this.top=null,this.left=null,this.width=null,this.height=null}var o=i(45),n=i(1);s.prototype.stack=!0,s.prototype.select=function(){this.selected=!0,this.dirty=!0,this.displayed&&this.redraw()},s.prototype.unselect=function(){this.selected=!1,this.dirty=!0,this.displayed&&this.redraw()},s.prototype.setData=function(t){this.data=t,this.dirty=!0,this.displayed&&this.redraw()},s.prototype.setParent=function(t){this.displayed?(this.hide(),this.parent=t,this.parent&&this.show()):this.parent=t},s.prototype.isVisible=function(){return!1},s.prototype.show=function(){return!1},s.prototype.hide=function(){return!1},s.prototype.redraw=function(){},s.prototype.repositionX=function(){},s.prototype.repositionY=function(){},s.prototype._repaintDeleteButton=function(t){if(this.selected&&this.options.editable.remove&&!this.dom.deleteButton){var e=this,i=document.createElement("div");i.className="delete",i.title="Delete this item",o(i,{preventDefault:!0}).on("tap",function(t){e.parent.removeFromDataSet(e),t.stopPropagation()}),t.appendChild(i),this.dom.deleteButton=i}else!this.selected&&this.dom.deleteButton&&(this.dom.deleteButton.parentNode&&this.dom.deleteButton.parentNode.removeChild(this.dom.deleteButton),this.dom.deleteButton=null)},s.prototype._updateContents=function(t){var e;if(this.options.template){var i=this.parent.itemSet.itemsData.get(this.id);e=this.options.template(i)}else e=this.data.content;if(e!==this.content){if(e instanceof Element)t.innerHTML="",t.appendChild(e);else if(void 0!=e)t.innerHTML=e;else if("background"!=this.data.type||void 0!==this.data.content)throw new Error('Property "content" missing in item '+this.id);this.content=e}},s.prototype._updateTitle=function(t){null!=this.data.title?t.title=this.data.title||"":t.removeAttribute("title")},s.prototype._updateDataAttributes=function(t){if(this.options.dataAttributes&&this.options.dataAttributes.length>0){var e=[];if(Array.isArray(this.options.dataAttributes))e=this.options.dataAttributes;else{if("all"!=this.options.dataAttributes)return;e=Object.keys(this.data)}for(var i=0;it.start},s.prototype.redraw=function(){var t=this.dom;if(t||(this.dom={},t=this.dom,t.box=document.createElement("div"),t.content=document.createElement("div"),t.content.className="content",t.box.appendChild(t.content),this.dirty=!0),!this.parent)throw new Error("Cannot redraw item: no parent attached");if(!t.box.parentNode){var e=this.parent.dom.background;if(!e)throw new Error("Cannot redraw item: parent has no background container element");e.appendChild(t.box)}if(this.displayed=!0,this.dirty){this._updateContents(this.dom.content),this._updateTitle(this.dom.content),this._updateDataAttributes(this.dom.content),this._updateStyle(this.dom.box);var i=(this.data.className?" "+this.data.className:"")+(this.selected?" selected":"");t.box.className=this.baseClassName+i,this.overflow="hidden"!==window.getComputedStyle(t.content).overflow,this.props.content.width=this.dom.content.offsetWidth,this.height=0,this.dirty=!1}},s.prototype.show=r.prototype.show,s.prototype.hide=r.prototype.hide,s.prototype.repositionX=r.prototype.repositionX,s.prototype.repositionY=function(t){var e="top"===this.options.orientation;this.dom.content.style.top=e?"":"0",this.dom.content.style.bottom=e?"0":"";var i;if(void 0!==this.data.subgroup){var s=this.data.subgroup,o=this.parent.subgroups,r=o[s].index;if(1==e){i=this.parent.subgroups[s].height+t.item.vertical,i+=0==r?t.axis-.5*t.item.vertical:0;var a=this.parent.top;for(var h in o)o.hasOwnProperty(h)&&1==o[h].visible&&o[h].indexr&&(a+=o[h].height+t.item.vertical);i=this.parent.subgroups[s].height+t.item.vertical,this.dom.box.style.top=a+"px",this.dom.box.style.bottom=""}}else this.parent instanceof n?(i=Math.max(this.parent.height,this.parent.itemSet.body.domProps.center.height,this.parent.itemSet.body.domProps.centerContainer.height),this.dom.box.style.top=e?"0":"",this.dom.box.style.bottom=e?"":"0"):(i=this.parent.height,this.dom.box.style.top=this.parent.top+"px",this.dom.box.style.bottom="");this.dom.box.style.height=i+"px"},t.exports=s},function(t,e,i){function s(t,e,i){if(this.props={dot:{width:0,height:0},line:{width:0,height:0}},t&&void 0==t.start)throw new Error('Property "start" missing in item '+t);o.call(this,t,e,i)}{var o=i(31);i(1)}s.prototype=new o(null,null,null),s.prototype.isVisible=function(t){var e=(t.end-t.start)/4;return this.data.start>t.start-e&&this.data.startt.start-e&&this.data.startt.start},s.prototype.redraw=function(){var t=this.dom;if(t||(this.dom={},t=this.dom,t.box=document.createElement("div"),t.content=document.createElement("div"),t.content.className="content",t.box.appendChild(t.content),t.box["timeline-item"]=this,this.dirty=!0),!this.parent)throw new Error("Cannot redraw item: no parent attached");if(!t.box.parentNode){var e=this.parent.dom.foreground;if(!e)throw new Error("Cannot redraw item: parent has no foreground container element");e.appendChild(t.box)}if(this.displayed=!0,this.dirty){this._updateContents(this.dom.content),this._updateTitle(this.dom.box),this._updateDataAttributes(this.dom.box),this._updateStyle(this.dom.box);var i=(this.data.className?" "+this.data.className:"")+(this.selected?" selected":"");t.box.className=this.baseClassName+i,this.overflow="hidden"!==window.getComputedStyle(t.content).overflow,this.dom.content.style.maxWidth="none",this.props.content.width=this.dom.content.offsetWidth,this.height=this.dom.box.offsetHeight,this.dom.content.style.maxWidth="",this.dirty=!1}this._repaintDeleteButton(t.box),this._repaintDragLeft(),this._repaintDragRight()},s.prototype.show=function(){this.displayed||this.redraw()},s.prototype.hide=function(){if(this.displayed){var t=this.dom.box;t.parentNode&&t.parentNode.removeChild(t),this.top=null,this.left=null,this.displayed=!1}},s.prototype.repositionX=function(){var t,e,i=this.parent.width,s=this.conversion.toScreen(this.data.start),o=this.conversion.toScreen(this.data.end);-i>s&&(s=-i),o>2*i&&(o=2*i);var n=Math.max(o-s,1);switch(this.overflow?(this.left=s,this.width=n+this.props.content.width,e=this.props.content.width):(this.left=s,this.width=n,e=Math.min(o-s-2*this.options.padding,this.props.content.width)),this.dom.box.style.left=this.left+"px",this.dom.box.style.width=n+"px",this.options.align){case"left":this.dom.content.style.left="0";break;case"right":this.dom.content.style.left=Math.max(n-e-2*this.options.padding,0)+"px";break;case"center":this.dom.content.style.left=Math.max((n-e-2*this.options.padding)/2,0)+"px";break;default:t=this.overflow?o>0?Math.max(-s,0):-e:0>s?Math.min(-s,o-s-e-2*this.options.padding):0,this.dom.content.style.left=t+"px"}},s.prototype.repositionY=function(){var t=this.options.orientation,e=this.dom.box;e.style.top="top"==t?this.top+"px":this.parent.height-this.top-this.height+"px"},s.prototype._repaintDragLeft=function(){if(this.selected&&this.options.editable.updateTime&&!this.dom.dragLeft){var t=document.createElement("div");t.className="drag-left",t.dragLeftItem=this,o(t,{preventDefault:!0}).on("drag",function(){}),this.dom.box.appendChild(t),this.dom.dragLeft=t}else!this.selected&&this.dom.dragLeft&&(this.dom.dragLeft.parentNode&&this.dom.dragLeft.parentNode.removeChild(this.dom.dragLeft),this.dom.dragLeft=null)},s.prototype._repaintDragRight=function(){if(this.selected&&this.options.editable.updateTime&&!this.dom.dragRight){var t=document.createElement("div");t.className="drag-right",t.dragRightItem=this,o(t,{preventDefault:!0}).on("drag",function(){}),this.dom.box.appendChild(t),this.dom.dragRight=t}else!this.selected&&this.dom.dragRight&&(this.dom.dragRight.parentNode&&this.dom.dragRight.parentNode.removeChild(this.dom.dragRight),this.dom.dragRight=null)},t.exports=s},function(t,e,i){function s(t,e,i){if(!(this instanceof s))throw new SyntaxError("Constructor must be called with the new operator");this._initializeMixinLoaders(),this.containerElement=t,this.renderRefreshRate=60,this.renderTimestep=1e3/this.renderRefreshRate,this.renderTime=.5*this.renderTimestep,this.maxPhysicsTicksPerRender=3,this.physicsDiscreteStepsize=.5,this.initializing=!0,this.triggerFunctions={add:null,edit:null,editEdge:null,connect:null,del:null},this.defaultOptions={nodes:{mass:1,radiusMin:10,radiusMax:30,radius:10,shape:"ellipse",image:void 0,widthMin:16,widthMax:64,fontColor:"black",fontSize:14,fontFace:"verdana",fontFill:void 0,level:-1,color:{border:"#2B7CE9",background:"#97C2FC",highlight:{border:"#2B7CE9",background:"#D2E5FF"},hover:{border:"#2B7CE9",background:"#D2E5FF"}},borderColor:"#2B7CE9",backgroundColor:"#97C2FC",highlightColor:"#D2E5FF",group:void 0,borderWidth:1,borderWidthSelected:void 0},edges:{widthMin:1,widthMax:15,width:1,widthSelectionMultiplier:2,hoverWidth:1.5,style:"line",color:{color:"#848484",highlight:"#848484",hover:"#848484"},fontColor:"#343434",fontSize:14,fontFace:"arial",fontFill:"white",arrowScaleFactor:1,dash:{length:10,gap:5,altLength:void 0},inheritColor:"from"},configurePhysics:!1,physics:{barnesHut:{enabled:!0,theta:1/.6,gravitationalConstant:-2e3,centralGravity:.3,springLength:95,springConstant:.04,damping:.09},repulsion:{centralGravity:0,springLength:200,springConstant:.05,nodeDistance:100,damping:.09},hierarchicalRepulsion:{enabled:!1,centralGravity:0,springLength:100,springConstant:.01,nodeDistance:150,damping:.09},damping:null,centralGravity:null,springLength:null,springConstant:null},clustering:{enabled:!1,initialMaxNodes:100,clusterThreshold:500,reduceToNodes:300,chainThreshold:.4,clusterEdgeThreshold:20,sectorThreshold:100,screenSizeThreshold:.2,fontSizeMultiplier:4,maxFontSize:1e3,forceAmplification:.1,distanceAmplification:.1,edgeGrowth:20,nodeScaling:{width:1,height:1,radius:1},maxNodeSizeIncrements:600,activeAreaBoxSize:80,clusterLevelDifference:2},navigation:{enabled:!1},keyboard:{enabled:!1,speed:{x:10,y:10,zoom:.02}},dataManipulation:{enabled:!1,initiallyVisible:!1},hierarchicalLayout:{enabled:!1,levelSeparation:150,nodeSpacing:100,direction:"UD",layout:"hubsize"},freezeForStabilization:!1,smoothCurves:{enabled:!0,dynamic:!0,type:"continuous",roundness:.5},maxVelocity:30,minVelocity:.1,stabilize:!0,stabilizationIterations:1e3,locale:"en",locales:_,tooltip:{delay:300,fontColor:"black",fontSize:14,fontFace:"verdana",color:{border:"#666",background:"#FFFFC6"}},dragNetwork:!0,dragNodes:!0,zoomable:!0,hover:!1,hideEdgesOnDrag:!1,hideNodesOnDrag:!1,width:"100%",height:"100%",selectable:!0},this.constants=a.extend({},this.defaultOptions),this.pixelRatio=1,this.hoverObj={nodes:{},edges:{}},this.controlNodesActive=!1,this.navigationHammers={existing:[],_new:[]},this.animationSpeed=1/this.renderRefreshRate,this.animationEasingFunction="easeInOutQuint",this.easingTime=0,this.sourceScale=0,this.targetScale=0,this.sourceTranslation=0,this.targetTranslation=0,this.lockedOnNodeId=null,this.lockedOnNodeOffset=null,this.touchTime=0;var o=this;this.groups=new u,this.images=new m,this.images.setOnloadCallback(function(){o._redraw()}),this.xIncrement=0,this.yIncrement=0,this.zoomIncrement=0,this._loadPhysicsSystem(),this._create(),this._loadSectorSystem(),this._loadClusterSystem(),this._loadSelectionSystem(),this._loadHierarchySystem(),this._setTranslation(this.frame.clientWidth/2,this.frame.clientHeight/2),this._setScale(1),this.setOptions(i),this.freezeSimulation=!1,this.cachedFunctions={},this.startedStabilization=!1,this.stabilized=!1,this.stabilizationIterations=null,this.draggingNodes=!1,this.calculationNodes={},this.calculationNodeIndices=[],this.nodeIndices=[],this.nodes={},this.edges={},this.canvasTopLeft={x:0,y:0},this.canvasBottomRight={x:0,y:0},this.pointerPosition={x:0,y:0},this.areaCenter={},this.scale=1,this.previousScale=this.scale,this.nodesData=null,this.edgesData=null,this.nodesListeners={add:function(t,e){o._addNodes(e.items),o.start()},update:function(t,e){o._updateNodes(e.items,e.data),o.start()},remove:function(t,e){o._removeNodes(e.items),o.start()}},this.edgesListeners={add:function(t,e){o._addEdges(e.items),o.start()},update:function(t,e){o._updateEdges(e.items),o.start()},remove:function(t,e){o._removeEdges(e.items),o.start()}},this.moving=!0,this.timer=void 0,this.setData(e,this.constants.clustering.enabled||this.constants.hierarchicalLayout.enabled),this.initializing=!1,1==this.constants.hierarchicalLayout.enabled?this._setupHierarchicalLayout():0==this.constants.stabilize&&this.zoomExtent(void 0,!0,this.constants.clustering.enabled),this.constants.clustering.enabled&&this.startWithClustering()}var o=i(56),n=i(45),r=i(57),a=i(1),h=i(47),d=i(3),l=i(4),c=i(42),p=i(43),u=i(38),m=i(39),f=i(40),g=i(37),v=i(41),y=i(54),b=i(55),_=i(49);i(50),o(s.prototype),s.prototype._getScriptPath=function(){for(var t=document.getElementsByTagName("script"),e=0;et.x&&(s=t.x),ot.y&&(e=t.y),i=this.constants.clustering.initialMaxNodes?49.07548/(n+142.05338)+91444e-8:12.662/(n+7.4147)+.0964822:1==this.constants.clustering.enabled&&n>=this.constants.clustering.initialMaxNodes?77.5271985/(n+187.266146)+476710517e-13:30.5062972/(n+19.93597763)+.08413486;var r=Math.min(this.frame.canvas.clientWidth/600,this.frame.canvas.clientHeight/600);s*=r}else{var a=1.1*Math.abs(o.maxX-o.minX),h=1.1*Math.abs(o.maxY-o.minY),d=this.frame.canvas.clientWidth/a,l=this.frame.canvas.clientHeight/h;s=l>=d?d:l}s>1&&(s=1);var c=this._findCenter(o);if(0==i){var p={position:c,scale:s,animation:t};this.moveTo(p),this.moving=!0,this.start()}else c.x*=s,c.y*=s,c.x-=.5*this.frame.canvas.clientWidth,c.y-=.5*this.frame.canvas.clientHeight,this._setScale(s),this._setTranslation(-c.x,-c.y)},s.prototype._updateNodeIndexList=function(){this._clearNodeIndexList();for(var t in this.nodes)this.nodes.hasOwnProperty(t)&&this.nodeIndices.push(t)},s.prototype.setData=function(t,e){if(void 0===e&&(e=!1),this.initializing=!0,t&&t.dot&&(t.nodes||t.edges))throw new SyntaxError('Data must contain either parameter "dot" or parameter pair "nodes" and "edges", but not both.');if(this.setOptions(t&&t.options),t&&t.dot){if(t&&t.dot){var i=c.DOTToGraph(t.dot);return void this.setData(i)}}else if(t&&t.gephi){if(t&&t.gephi){var s=p.parseGephi(t.gephi);return void this.setData(s)}}else this._setNodes(t&&t.nodes),this._setEdges(t&&t.edges);this._putDataInSector(),0==e&&(1==this.constants.hierarchicalLayout.enabled?(this._resetLevels(),this._setupHierarchicalLayout()):this.constants.stabilize&&this._stabilize(),this.start()),this.initializing=!1},s.prototype.setOptions=function(t){if(t){var e,i=["nodes","edges","smoothCurves","hierarchicalLayout","clustering","navigation","keyboard","dataManipulation","onAdd","onEdit","onEditEdge","onConnect","onDelete","clickToUse"];if(a.selectiveNotDeepExtend(i,this.constants,t),a.selectiveNotDeepExtend(["color"],this.constants.nodes,t.nodes),a.selectiveNotDeepExtend(["color","length"],this.constants.edges,t.edges),t.physics&&(a.mergeOptions(this.constants.physics,t.physics,"barnesHut"),a.mergeOptions(this.constants.physics,t.physics,"repulsion"),t.physics.hierarchicalRepulsion)){this.constants.hierarchicalLayout.enabled=!0,this.constants.physics.hierarchicalRepulsion.enabled=!0,this.constants.physics.barnesHut.enabled=!1;for(e in t.physics.hierarchicalRepulsion)t.physics.hierarchicalRepulsion.hasOwnProperty(e)&&(this.constants.physics.hierarchicalRepulsion[e]=t.physics.hierarchicalRepulsion[e])}if(t.onAdd&&(this.triggerFunctions.add=t.onAdd),t.onEdit&&(this.triggerFunctions.edit=t.onEdit),t.onEditEdge&&(this.triggerFunctions.editEdge=t.onEditEdge),t.onConnect&&(this.triggerFunctions.connect=t.onConnect),t.onDelete&&(this.triggerFunctions.del=t.onDelete),a.mergeOptions(this.constants,t,"smoothCurves"),a.mergeOptions(this.constants,t,"hierarchicalLayout"),a.mergeOptions(this.constants,t,"clustering"),a.mergeOptions(this.constants,t,"navigation"),a.mergeOptions(this.constants,t,"keyboard"),a.mergeOptions(this.constants,t,"dataManipulation"),t.dataManipulation&&(this.editMode=this.constants.dataManipulation.initiallyVisible),t.edges&&(void 0!==t.edges.color&&(a.isString(t.edges.color)?(this.constants.edges.color={},this.constants.edges.color.color=t.edges.color,this.constants.edges.color.highlight=t.edges.color,this.constants.edges.color.hover=t.edges.color):(void 0!==t.edges.color.color&&(this.constants.edges.color.color=t.edges.color.color),void 0!==t.edges.color.highlight&&(this.constants.edges.color.highlight=t.edges.color.highlight),void 0!==t.edges.color.hover&&(this.constants.edges.color.hover=t.edges.color.hover))),t.edges.fontColor||void 0!==t.edges.color&&(a.isString(t.edges.color)?this.constants.edges.fontColor=t.edges.color:void 0!==t.edges.color.color&&(this.constants.edges.fontColor=t.edges.color.color))),t.nodes&&t.nodes.color){var s=a.parseColor(t.nodes.color); +this.constants.nodes.color.background=s.background,this.constants.nodes.color.border=s.border,this.constants.nodes.color.highlight.background=s.highlight.background,this.constants.nodes.color.highlight.border=s.highlight.border,this.constants.nodes.color.hover.background=s.hover.background,this.constants.nodes.color.hover.border=s.hover.border}if(t.groups)for(var o in t.groups)if(t.groups.hasOwnProperty(o)){var n=t.groups[o];this.groups.add(o,n)}if(t.tooltip){for(e in t.tooltip)t.tooltip.hasOwnProperty(e)&&(this.constants.tooltip[e]=t.tooltip[e]);t.tooltip.color&&(this.constants.tooltip.color=a.parseColor(t.tooltip.color))}if("clickToUse"in t&&(t.clickToUse?(this.activator=new b(this.frame),this.activator.on("change",this._createKeyBinds.bind(this))):this.activator&&(this.activator.destroy(),delete this.activator)),t.labels)throw new Error('Option "labels" is deprecated. Use options "locale" and "locales" instead.')}this._loadPhysicsSystem(),this._loadNavigationControls(),this._loadManipulationSystem(),this._configureSmoothCurves(),this._createKeyBinds(),this.setSize(this.constants.width,this.constants.height),this.moving=!0,this.start()},s.prototype._create=function(){for(;this.containerElement.hasChildNodes();)this.containerElement.removeChild(this.containerElement.firstChild);if(this.frame=document.createElement("div"),this.frame.className="vis network-frame",this.frame.style.position="relative",this.frame.style.overflow="hidden",this.frame.canvas=document.createElement("canvas"),this.frame.canvas.style.position="relative",this.frame.appendChild(this.frame.canvas),this.frame.canvas.getContext){var t=this.frame.canvas.getContext("2d");this.pixelRatio=(window.devicePixelRatio||1)/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1),this.frame.canvas.getContext("2d").setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}else{var e=document.createElement("DIV");e.style.color="red",e.style.fontWeight="bold",e.style.padding="10px",e.innerHTML="Error: your browser does not support HTML canvas",this.frame.canvas.appendChild(e)}var i=this;this.drag={},this.pinch={},this.hammer=n(this.frame.canvas,{prevent_default:!0}),this.hammer.on("tap",i._onTap.bind(i)),this.hammer.on("doubletap",i._onDoubleTap.bind(i)),this.hammer.on("hold",i._onHold.bind(i)),this.hammer.on("pinch",i._onPinch.bind(i)),this.hammer.on("touch",i._onTouch.bind(i)),this.hammer.on("dragstart",i._onDragStart.bind(i)),this.hammer.on("drag",i._onDrag.bind(i)),this.hammer.on("dragend",i._onDragEnd.bind(i)),this.hammer.on("mousewheel",i._onMouseWheel.bind(i)),this.hammer.on("DOMMouseScroll",i._onMouseWheel.bind(i)),this.hammer.on("mousemove",i._onMouseMoveTitle.bind(i)),this.hammerFrame=n(this.frame,{prevent_default:!0}),this.hammerFrame.on("release",i._onRelease.bind(i)),this.containerElement.appendChild(this.frame)},s.prototype._createKeyBinds=function(){var t=this;void 0!==this.keycharm&&this.keycharm.destroy(),this.keycharm=r(),this.keycharm.reset(),this.constants.keyboard.enabled&&this.isActive()&&(this.keycharm.bind("up",this._moveUp.bind(t),"keydown"),this.keycharm.bind("up",this._yStopMoving.bind(t),"keyup"),this.keycharm.bind("down",this._moveDown.bind(t),"keydown"),this.keycharm.bind("down",this._yStopMoving.bind(t),"keyup"),this.keycharm.bind("left",this._moveLeft.bind(t),"keydown"),this.keycharm.bind("left",this._xStopMoving.bind(t),"keyup"),this.keycharm.bind("right",this._moveRight.bind(t),"keydown"),this.keycharm.bind("right",this._xStopMoving.bind(t),"keyup"),this.keycharm.bind("=",this._zoomIn.bind(t),"keydown"),this.keycharm.bind("=",this._stopZoom.bind(t),"keyup"),this.keycharm.bind("num+",this._zoomIn.bind(t),"keydown"),this.keycharm.bind("num+",this._stopZoom.bind(t),"keyup"),this.keycharm.bind("num-",this._zoomOut.bind(t),"keydown"),this.keycharm.bind("num-",this._stopZoom.bind(t),"keyup"),this.keycharm.bind("-",this._zoomOut.bind(t),"keydown"),this.keycharm.bind("-",this._stopZoom.bind(t),"keyup"),this.keycharm.bind("[",this._zoomIn.bind(t),"keydown"),this.keycharm.bind("[",this._stopZoom.bind(t),"keyup"),this.keycharm.bind("]",this._zoomOut.bind(t),"keydown"),this.keycharm.bind("]",this._stopZoom.bind(t),"keyup"),this.keycharm.bind("pageup",this._zoomIn.bind(t),"keydown"),this.keycharm.bind("pageup",this._stopZoom.bind(t),"keyup"),this.keycharm.bind("pagedown",this._zoomOut.bind(t),"keydown"),this.keycharm.bind("pagedown",this._stopZoom.bind(t),"keyup")),1==this.constants.dataManipulation.enabled&&(this.keycharm.bind("esc",this._createManipulatorBar.bind(t)),this.keycharm.bind("delete",this._deleteSelected.bind(t)))},s.prototype._getPointer=function(t){return{x:t.pageX-a.getAbsoluteLeft(this.frame.canvas),y:t.pageY-a.getAbsoluteTop(this.frame.canvas)}},s.prototype._onTouch=function(t){(new Date).valueOf()-this.touchTime>100&&(this.drag.pointer=this._getPointer(t.gesture.center),this.drag.pinched=!1,this.pinch.scale=this._getScale(),this.touchTime=(new Date).valueOf(),this._handleTouch(this.drag.pointer))},s.prototype._onDragStart=function(){this._handleDragStart()},s.prototype._handleDragStart=function(){var t=this.drag,e=this._getNodeAt(t.pointer);if(t.dragging=!0,t.selection=[],t.translation=this._getTranslation(),t.nodeId=null,this.draggingNodes=!1,null!=e&&1==this.constants.dragNodes){this.draggingNodes=!0,t.nodeId=e.id,e.isSelected()||this._selectObject(e,!1),this.emit("dragStart",{nodeIds:this.getSelection().nodes});for(var i in this.selectionObj.nodes)if(this.selectionObj.nodes.hasOwnProperty(i)){var s=this.selectionObj.nodes[i],o={id:s.id,node:s,x:s.x,y:s.y,xFixed:s.xFixed,yFixed:s.yFixed};s.xFixed=!0,s.yFixed=!0,t.selection.push(o)}}},s.prototype._onDrag=function(t){this._handleOnDrag(t)},s.prototype._handleOnDrag=function(t){if(!this.drag.pinched){this.releaseNode();var e=this._getPointer(t.gesture.center),i=this,s=this.drag,o=s.selection;if(o&&o.length&&1==this.constants.dragNodes){var n=e.x-s.pointer.x,r=e.y-s.pointer.y;o.forEach(function(t){var e=t.node;t.xFixed||(e.x=i._XconvertDOMtoCanvas(i._XconvertCanvasToDOM(t.x)+n)),t.yFixed||(e.y=i._YconvertDOMtoCanvas(i._YconvertCanvasToDOM(t.y)+r))}),this.moving||(this.moving=!0,this.start())}else if(1==this.constants.dragNetwork){var a=e.x-this.drag.pointer.x,h=e.y-this.drag.pointer.y;this._setTranslation(this.drag.translation.x+a,this.drag.translation.y+h),this._redraw()}}},s.prototype._onDragEnd=function(t){this._handleDragEnd(t)},s.prototype._handleDragEnd=function(){this.drag.dragging=!1;var t=this.drag.selection;t&&t.length?(t.forEach(function(t){t.node.xFixed=t.xFixed,t.node.yFixed=t.yFixed}),this.moving=!0,this.start()):this._redraw(),0==this.draggingNodes?this.emit("dragEnd",{nodeIds:[]}):this.emit("dragEnd",{nodeIds:this.getSelection().nodes})},s.prototype._onTap=function(t){var e=this._getPointer(t.gesture.center);this.pointerPosition=e,this._handleTap(e)},s.prototype._onDoubleTap=function(t){var e=this._getPointer(t.gesture.center);this._handleDoubleTap(e)},s.prototype._onHold=function(t){var e=this._getPointer(t.gesture.center);this.pointerPosition=e,this._handleOnHold(e)},s.prototype._onRelease=function(t){var e=this._getPointer(t.gesture.center);this._handleOnRelease(e)},s.prototype._onPinch=function(t){var e=this._getPointer(t.gesture.center);this.drag.pinched=!0,"scale"in this.pinch||(this.pinch.scale=1);var i=this.pinch.scale*t.gesture.scale;this._zoom(i,e)},s.prototype._zoom=function(t,e){if(1==this.constants.zoomable){var i=this._getScale();1e-5>t&&(t=1e-5),t>10&&(t=10);var s=null;void 0!==this.drag&&1==this.drag.dragging&&(s=this.DOMtoCanvas(this.drag.pointer));var o=this._getTranslation(),n=t/i,r=(1-n)*e.x+o.x*n,a=(1-n)*e.y+o.y*n;if(this.areaCenter={x:this._XconvertDOMtoCanvas(e.x),y:this._YconvertDOMtoCanvas(e.y)},this._setScale(t),this._setTranslation(r,a),this.updateClustersDefault(),null!=s){var h=this.canvasToDOM(s);this.drag.pointer.x=h.x,this.drag.pointer.y=h.y}return this._redraw(),t>i?this.emit("zoom",{direction:"+"}):this.emit("zoom",{direction:"-"}),t}},s.prototype._onMouseWheel=function(t){var e=0;if(t.wheelDelta?e=t.wheelDelta/120:t.detail&&(e=-t.detail/3),e){var i=this._getScale(),s=e/10;0>e&&(s/=1-s),i*=1+s;var o=h.fakeGesture(this,t),n=this._getPointer(o.center);this._zoom(i,n)}t.preventDefault()},s.prototype._onMouseMoveTitle=function(t){var e=h.fakeGesture(this,t),i=this._getPointer(e.center);this.popupObj&&this._checkHidePopup(i);var s=this,o=function(){s._checkShowPopup(i)};if(this.popupTimer&&clearInterval(this.popupTimer),this.drag.dragging||(this.popupTimer=setTimeout(o,this.constants.tooltip.delay)),1==this.constants.hover){for(var n in this.hoverObj.edges)this.hoverObj.edges.hasOwnProperty(n)&&(this.hoverObj.edges[n].hover=!1,delete this.hoverObj.edges[n]);var r=this._getNodeAt(i);null==r&&(r=this._getEdgeAt(i)),null!=r&&this._hoverObject(r);for(var a in this.hoverObj.nodes)this.hoverObj.nodes.hasOwnProperty(a)&&(r instanceof f&&r.id!=a||r instanceof g||null==r)&&(this._blurObject(this.hoverObj.nodes[a]),delete this.hoverObj.nodes[a]);this.redraw()}},s.prototype._checkShowPopup=function(t){var e,i={left:this._XconvertDOMtoCanvas(t.x),top:this._YconvertDOMtoCanvas(t.y),right:this._XconvertDOMtoCanvas(t.x),bottom:this._YconvertDOMtoCanvas(t.y)},s=this.popupObj;if(void 0==this.popupObj){var o=this.nodes;for(e in o)if(o.hasOwnProperty(e)){var n=o[e];if(void 0!==n.getTitle()&&n.isOverlappingWith(i)){this.popupObj=n;break}}}if(void 0===this.popupObj){var r=this.edges;for(e in r)if(r.hasOwnProperty(e)){var a=r[e];if(a.connected&&void 0!==a.getTitle()&&a.isOverlappingWith(i)){this.popupObj=a;break}}}if(this.popupObj){if(this.popupObj!=s){var h=this;h.popup||(h.popup=new v(h.frame,h.constants.tooltip)),h.popup.setPosition(t.x-3,t.y-3),h.popup.setText(h.popupObj.getTitle()),h.popup.show()}}else this.popup&&this.popup.hide()},s.prototype._checkHidePopup=function(t){this.popupObj&&this._getNodeAt(t)||(this.popupObj=void 0,this.popup&&this.popup.hide())},s.prototype.setSize=function(t,e){var i=!1,s=this.frame.canvas.width,o=this.frame.canvas.height;t!=this.constants.width||e!=this.constants.height||this.frame.style.width!=t||this.frame.style.height!=e?(this.frame.style.width=t,this.frame.style.height=e,this.frame.canvas.style.width="100%",this.frame.canvas.style.height="100%",this.frame.canvas.width=this.frame.canvas.clientWidth*this.pixelRatio,this.frame.canvas.height=this.frame.canvas.clientHeight*this.pixelRatio,this.constants.width=t,this.constants.height=e,i=!0):(this.frame.canvas.width!=this.frame.canvas.clientWidth*this.pixelRatio&&(this.frame.canvas.width=this.frame.canvas.clientWidth*this.pixelRatio,i=!0),this.frame.canvas.height!=this.frame.canvas.clientHeight*this.pixelRatio&&(this.frame.canvas.height=this.frame.canvas.clientHeight*this.pixelRatio,i=!0)),1==i&&this.emit("resize",{width:this.frame.canvas.width*this.pixelRatio,height:this.frame.canvas.height*this.pixelRatio,oldWidth:s*this.pixelRatio,oldHeight:o*this.pixelRatio})},s.prototype._setNodes=function(t){var e=this.nodesData;if(t instanceof d||t instanceof l)this.nodesData=t;else if(Array.isArray(t))this.nodesData=new d,this.nodesData.add(t);else{if(t)throw new TypeError("Array or DataSet expected");this.nodesData=new d}if(e&&a.forEach(this.nodesListeners,function(t,i){e.off(i,t)}),this.nodes={},this.nodesData){var i=this;a.forEach(this.nodesListeners,function(t,e){i.nodesData.on(e,t)});var s=this.nodesData.getIds();this._addNodes(s)}this._updateSelection()},s.prototype._addNodes=function(t){for(var e,i=0,s=t.length;s>i;i++){e=t[i];var o=this.nodesData.get(e),n=new f(o,this.images,this.groups,this.constants);if(this.nodes[e]=n,!(0!=n.xFixed&&0!=n.yFixed||null!==n.x&&null!==n.y)){var r=1*t.length+10,a=2*Math.PI*Math.random();0==n.xFixed&&(n.x=r*Math.cos(a)),0==n.yFixed&&(n.y=r*Math.sin(a))}this.moving=!0}this._updateNodeIndexList(),1==this.constants.hierarchicalLayout.enabled&&0==this.initializing&&(this._resetLevels(),this._setupHierarchicalLayout()),this._updateCalculationNodes(),this._reconnectEdges(),this._updateValueRange(this.nodes),this.updateLabels()},s.prototype._updateNodes=function(t,e){for(var i=this.nodes,s=0,o=t.length;o>s;s++){var n=t[s],r=i[n],a=e[s];r?r.setProperties(a,this.constants):(r=new f(properties,this.images,this.groups,this.constants),i[n]=r)}this.moving=!0,1==this.constants.hierarchicalLayout.enabled&&0==this.initializing&&(this._resetLevels(),this._setupHierarchicalLayout()),this._updateNodeIndexList(),this._updateValueRange(i)},s.prototype._removeNodes=function(t){for(var e=this.nodes,i=0,s=t.length;s>i;i++){var o=t[i];delete e[o]}this._updateNodeIndexList(),1==this.constants.hierarchicalLayout.enabled&&0==this.initializing&&(this._resetLevels(),this._setupHierarchicalLayout()),this._updateCalculationNodes(),this._reconnectEdges(),this._updateSelection(),this._updateValueRange(e)},s.prototype._setEdges=function(t){var e=this.edgesData;if(t instanceof d||t instanceof l)this.edgesData=t;else if(Array.isArray(t))this.edgesData=new d,this.edgesData.add(t);else{if(t)throw new TypeError("Array or DataSet expected");this.edgesData=new d}if(e&&a.forEach(this.edgesListeners,function(t,i){e.off(i,t)}),this.edges={},this.edgesData){var i=this;a.forEach(this.edgesListeners,function(t,e){i.edgesData.on(e,t)});var s=this.edgesData.getIds();this._addEdges(s)}this._reconnectEdges()},s.prototype._addEdges=function(t){for(var e=this.edges,i=this.edgesData,s=0,o=t.length;o>s;s++){var n=t[s],r=e[n];r&&r.disconnect();var a=i.get(n,{showInternalIds:!0});e[n]=new g(a,this,this.constants)}this.moving=!0,this._updateValueRange(e),this._createBezierNodes(),this._updateCalculationNodes(),1==this.constants.hierarchicalLayout.enabled&&0==this.initializing&&(this._resetLevels(),this._setupHierarchicalLayout())},s.prototype._updateEdges=function(t){for(var e=this.edges,i=this.edgesData,s=0,o=t.length;o>s;s++){var n=t[s],r=i.get(n),a=e[n];a?(a.disconnect(),a.setProperties(r,this.constants),a.connect()):(a=new g(r,this,this.constants),this.edges[n]=a)}this._createBezierNodes(),1==this.constants.hierarchicalLayout.enabled&&0==this.initializing&&(this._resetLevels(),this._setupHierarchicalLayout()),this.moving=!0,this._updateValueRange(e)},s.prototype._removeEdges=function(t){for(var e=this.edges,i=0,s=t.length;s>i;i++){var o=t[i],n=e[o];n&&(null!=n.via&&delete this.sectors.support.nodes[n.via.id],n.disconnect(),delete e[o])}this.moving=!0,this._updateValueRange(e),1==this.constants.hierarchicalLayout.enabled&&0==this.initializing&&(this._resetLevels(),this._setupHierarchicalLayout()),this._updateCalculationNodes()},s.prototype._reconnectEdges=function(){var t,e=this.nodes,i=this.edges;for(t in e)e.hasOwnProperty(t)&&(e[t].edges=[],e[t].dynamicEdges=[]);for(t in i)if(i.hasOwnProperty(t)){var s=i[t];s.from=null,s.to=null,s.connect()}},s.prototype._updateValueRange=function(t){var e,i=void 0,s=void 0;for(e in t)if(t.hasOwnProperty(e)){var o=t[e].getValue();void 0!==o&&(i=void 0===i?o:Math.min(o,i),s=void 0===s?o:Math.max(o,s))}if(void 0!==i&&void 0!==s)for(e in t)t.hasOwnProperty(e)&&t[e].setValueRange(i,s)},s.prototype.redraw=function(){this.setSize(this.constants.width,this.constants.height),this._redraw()},s.prototype._redraw=function(){var t=this.frame.canvas.getContext("2d");t.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var e=this.frame.canvas.width*this.pixelRatio,i=this.frame.canvas.height*this.pixelRatio;t.clearRect(0,0,e,i),t.save(),t.translate(this.translation.x,this.translation.y),t.scale(this.scale,this.scale),this.canvasTopLeft={x:this._XconvertDOMtoCanvas(0),y:this._YconvertDOMtoCanvas(0)},this.canvasBottomRight={x:this._XconvertDOMtoCanvas(this.frame.canvas.clientWidth*this.pixelRatio),y:this._YconvertDOMtoCanvas(this.frame.canvas.clientHeight*this.pixelRatio)},this._doInAllSectors("_drawAllSectorNodes",t),(0==this.drag.dragging||void 0===this.drag.dragging||0==this.constants.hideEdgesOnDrag)&&this._doInAllSectors("_drawEdges",t),(0==this.drag.dragging||void 0===this.drag.dragging||0==this.constants.hideNodesOnDrag)&&this._doInAllSectors("_drawNodes",t,!1),1==this.controlNodesActive&&this._doInAllSectors("_drawControlNodes",t),t.restore()},s.prototype._setTranslation=function(t,e){void 0===this.translation&&(this.translation={x:0,y:0}),void 0!==t&&(this.translation.x=t),void 0!==e&&(this.translation.y=e),this.emit("viewChanged")},s.prototype._getTranslation=function(){return{x:this.translation.x,y:this.translation.y}},s.prototype._setScale=function(t){this.scale=t},s.prototype._getScale=function(){return this.scale},s.prototype._XconvertDOMtoCanvas=function(t){return(t-this.translation.x)/this.scale},s.prototype._XconvertCanvasToDOM=function(t){return t*this.scale+this.translation.x},s.prototype._YconvertDOMtoCanvas=function(t){return(t-this.translation.y)/this.scale},s.prototype._YconvertCanvasToDOM=function(t){return t*this.scale+this.translation.y},s.prototype.canvasToDOM=function(t){return{x:this._XconvertCanvasToDOM(t.x),y:this._YconvertCanvasToDOM(t.y)}},s.prototype.DOMtoCanvas=function(t){return{x:this._XconvertDOMtoCanvas(t.x),y:this._YconvertDOMtoCanvas(t.y)}},s.prototype._drawNodes=function(t,e){void 0===e&&(e=!1);var i=this.nodes,s=[];for(var o in i)i.hasOwnProperty(o)&&(i[o].setScaleAndPos(this.scale,this.canvasTopLeft,this.canvasBottomRight),i[o].isSelected()?s.push(o):(i[o].inArea()||e)&&i[o].draw(t));for(var n=0,r=s.length;r>n;n++)(i[s[n]].inArea()||e)&&i[s[n]].draw(t)},s.prototype._drawEdges=function(t){var e=this.edges;for(var i in e)if(e.hasOwnProperty(i)){var s=e[i];s.setScale(this.scale),s.connected&&e[i].draw(t)}},s.prototype._drawControlNodes=function(t){var e=this.edges;for(var i in e)e.hasOwnProperty(i)&&e[i]._drawControlNodes(t)},s.prototype._stabilize=function(){1==this.constants.freezeForStabilization&&this._freezeDefinedNodes();for(var t=0;this.moving&&t0)for(t in i)i.hasOwnProperty(t)&&(i[t].discreteStepLimited(e,this.constants.maxVelocity),s=!0);else for(t in i)i.hasOwnProperty(t)&&(i[t].discreteStep(e),s=!0);if(1==s){var o=this.constants.minVelocity/Math.max(this.scale,.05);return o>.5*this.constants.maxVelocity?!0:this._isMoving(o)}return!1},s.prototype._physicsTick=function(){if(!this.freezeSimulation&&1==this.moving){var t=!1,e=!1;this._doInAllActiveSectors("_initializeForceCalculation");var i=this._doInAllActiveSectors("_discreteStepNodes");1==this.constants.smoothCurves.enabled&&1==this.constants.smoothCurves.dynamic&&(e=this._doInSupportSector("_discreteStepNodes"));for(var s=0;s0){var i=this,s={iterations:i.stabilizationIterations};i.stabilizationIterations=0,i.startedStabilization=!1,setTimeout(function(){i.emit("stabilized",s)},0)}},s.prototype._handleNavigation=function(){if(0!=this.xIncrement||0!=this.yIncrement){var t=this._getTranslation();this._setTranslation(t.x+this.xIncrement,t.y+this.yIncrement)}if(0!=this.zoomIncrement){var e={x:this.frame.canvas.clientWidth/2,y:this.frame.canvas.clientHeight/2};this._zoom(this.scale*(1+this.zoomIncrement),e)}},s.prototype.toggleFreeze=function(){0==this.freezeSimulation?this.freezeSimulation=!0:(this.freezeSimulation=!1,this.start())},s.prototype._configureSmoothCurves=function(t){if(void 0===t&&(t=!0),1==this.constants.smoothCurves.enabled&&1==this.constants.smoothCurves.dynamic){this._createBezierNodes();for(var e in this.sectors.support.nodes)this.sectors.support.nodes.hasOwnProperty(e)&&void 0===this.edges[this.sectors.support.nodes[e].parentEdgeId]&&delete this.sectors.support.nodes[e]}else{this.sectors.support.nodes={};for(var i in this.edges)this.edges.hasOwnProperty(i)&&(this.edges[i].via=null)}this._updateCalculationNodes(),t||(this.moving=!0,this.start())},s.prototype._createBezierNodes=function(){if(1==this.constants.smoothCurves.enabled&&1==this.constants.smoothCurves.dynamic)for(var t in this.edges)if(this.edges.hasOwnProperty(t)){var e=this.edges[t];if(null==e.via){var i="edgeId:".concat(e.id);this.sectors.support.nodes[i]=new f({id:i,mass:1,shape:"circle",image:"",internalMultiplier:1},{},{},this.constants),e.via=this.sectors.support.nodes[i],e.via.parentEdgeId=e.id,e.positionBezierNode()}}},s.prototype._initializeMixinLoaders=function(){for(var t in y)y.hasOwnProperty(t)&&(s.prototype[t]=y[t])},s.prototype.storePosition=function(){console.log("storePosition is depricated: use .storePositions() from now on."),this.storePositions()},s.prototype.storePositions=function(){var t=[];for(var e in this.nodes)if(this.nodes.hasOwnProperty(e)){var i=this.nodes[e],s=!this.nodes.xFixed,o=!this.nodes.yFixed;(this.nodesData._data[e].x!=Math.round(i.x)||this.nodesData._data[e].y!=Math.round(i.y))&&t.push({id:e,x:Math.round(i.x),y:Math.round(i.y),allowedToMoveX:s,allowedToMoveY:o})}this.nodesData.update(t)},s.prototype.getPositions=function(t){var e={};if(void 0!==t){if(1==Array.isArray(t)){for(var i=0;i=1&&(this.easingTime=0,this._redraw=null!=this.lockedOnNodeId?this._lockedRedraw:this._classicRedraw,this.emit("animationFinished"))},s.prototype._classicRedraw=function(){},s.prototype.isActive=function(){return!this.activator||this.activator.active},s.prototype.setScale=function(){return this._setScale()},s.prototype.getScale=function(){return this._getScale()},s.prototype.getCenterCoordinates=function(){return this.DOMtoCanvas({x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight})},t.exports=s},function(t,e,i){function s(t,e,i){if(!e)throw"No network provided";var s=["edges","physics"],n=o.selectiveBridgeObject(s,i);this.options=n.edges,this.physics=n.physics,this.options.smoothCurves=i.smoothCurves,this.network=e,this.id=void 0,this.fromId=void 0,this.toId=void 0,this.title=void 0,this.widthSelected=this.options.width*this.options.widthSelectionMultiplier,this.value=void 0,this.selected=!1,this.hover=!1,this.labelDimensions={top:0,left:0,width:0,height:0,yLine:0},this.dirtyLabel=!0,this.from=null,this.to=null,this.via=null,this.fromBackup=null,this.toBackup=null,this.originalFromId=[],this.originalToId=[],this.connected=!1,this.widthFixed=!1,this.lengthFixed=!1,this.setProperties(t),this.controlNodesEnabled=!1,this.controlNodes={from:null,to:null,positions:{}},this.connectedNode=null}var o=i(1),n=i(40);s.prototype.setProperties=function(t){if(t){var e=["style","fontSize","fontFace","fontColor","fontFill","width","widthSelectionMultiplier","hoverWidth","arrowScaleFactor","dash","inheritColor"];switch(o.selectiveDeepExtend(e,this.options,t),void 0!==t.from&&(this.fromId=t.from),void 0!==t.to&&(this.toId=t.to),void 0!==t.id&&(this.id=t.id),void 0!==t.label&&(this.label=t.label,this.dirtyLabel=!0),void 0!==t.title&&(this.title=t.title),void 0!==t.value&&(this.value=t.value),void 0!==t.length&&(this.physics.springLength=t.length),void 0!==t.color&&(this.options.inheritColor=!1,o.isString(t.color)?(this.options.color.color=t.color,this.options.color.highlight=t.color):(void 0!==t.color.color&&(this.options.color.color=t.color.color),void 0!==t.color.highlight&&(this.options.color.highlight=t.color.highlight),void 0!==t.color.hover&&(this.options.color.hover=t.color.hover))),this.connect(),this.widthFixed=this.widthFixed||void 0!==t.width,this.lengthFixed=this.lengthFixed||void 0!==t.length,this.widthSelected=this.options.width*this.options.widthSelectionMultiplier,this.options.style){case"line":this.draw=this._drawLine;break;case"arrow":this.draw=this._drawArrow;break;case"arrow-center":this.draw=this._drawArrowCenter;break;case"dash-line":this.draw=this._drawDashLine;break;default:this.draw=this._drawLine}}},s.prototype.connect=function(){this.disconnect(),this.from=this.network.nodes[this.fromId]||null,this.to=this.network.nodes[this.toId]||null,this.connected=this.from&&this.to,this.connected?(this.from.attachEdge(this),this.to.attachEdge(this)):(this.from&&this.from.detachEdge(this),this.to&&this.to.detachEdge(this))},s.prototype.disconnect=function(){this.from&&(this.from.detachEdge(this),this.from=null),this.to&&(this.to.detachEdge(this),this.to=null),this.connected=!1},s.prototype.getTitle=function(){return"function"==typeof this.title?this.title():this.title},s.prototype.getValue=function(){return this.value},s.prototype.setValueRange=function(t,e){if(!this.widthFixed&&void 0!==this.value){var i=(this.options.widthMax-this.options.widthMin)/(e-t);this.options.width=(this.value-t)*i+this.options.widthMin,this.widthSelected=this.options.width*this.options.widthSelectionMultiplier}},s.prototype.draw=function(){throw"Method draw not initialized in edge"},s.prototype.isOverlappingWith=function(t){if(this.connected){var e=10,i=this.from.x,s=this.from.y,o=this.to.x,n=this.to.y,r=t.left,a=t.top,h=this._getDistanceToEdge(i,s,o,n,r,a);return e>h}return!1},s.prototype._getColor=function(){var t=this.options.color;return"to"==this.options.inheritColor?t={highlight:this.to.options.color.highlight.border,hover:this.to.options.color.hover.border,color:this.to.options.color.border}:("from"==this.options.inheritColor||1==this.options.inheritColor)&&(t={highlight:this.from.options.color.highlight.border,hover:this.from.options.color.hover.border,color:this.from.options.color.border}),1==this.selected?t.highlight:1==this.hover?t.hover:t.color},s.prototype._drawLine=function(t){if(t.strokeStyle=this._getColor(),t.lineWidth=this._getLineWidth(),this.from!=this.to){var e,i=this._line(t);if(this.label){if(1==this.options.smoothCurves.enabled&&null!=i){var s=.5*(.5*(this.from.x+i.x)+.5*(this.to.x+i.x)),o=.5*(.5*(this.from.y+i.y)+.5*(this.to.y+i.y));e={x:s,y:o}}else e=this._pointOnLine(.5);this._label(t,this.label,e.x,e.y)}}else{var n,r,a=this.physics.springLength/4,h=this.from;h.width||h.resize(t),h.width>h.height?(n=h.x+h.width/2,r=h.y-a):(n=h.x+a,r=h.y-h.height/2),this._circle(t,n,r,a),e=this._pointOnCircle(n,r,a,.5),this._label(t,this.label,e.x,e.y)}},s.prototype._getLineWidth=function(){return 1==this.selected?Math.max(Math.min(this.widthSelected,this.options.widthMax),.3*this.networkScaleInv):1==this.hover?Math.max(Math.min(this.options.hoverWidth,this.options.widthMax),.3*this.networkScaleInv):Math.max(this.options.width,.3*this.networkScaleInv)},s.prototype._getViaCoordinates=function(){var t=null,e=null,i=this.options.smoothCurves.roundness,s=this.options.smoothCurves.type,o=Math.abs(this.from.x-this.to.x),n=Math.abs(this.from.y-this.to.y);return"discrete"==s||"diagonalCross"==s?Math.abs(this.from.x-this.to.x)this.to.y?this.from.xthis.to.x&&(t=this.from.x-i*n,e=this.from.y-i*n):this.from.ythis.to.x&&(t=this.from.x-i*n,e=this.from.y+i*n)),"discrete"==s&&(t=i*n>o?this.from.x:t)):Math.abs(this.from.x-this.to.x)>Math.abs(this.from.y-this.to.y)&&(this.from.y>this.to.y?this.from.xthis.to.x&&(t=this.from.x-i*o,e=this.from.y-i*o):this.from.ythis.to.x&&(t=this.from.x-i*o,e=this.from.y+i*o)),"discrete"==s&&(e=i*o>n?this.from.y:e)):"straightCross"==s?Math.abs(this.from.x-this.to.x)Math.abs(this.from.y-this.to.y)&&(t=this.from.xthis.to.y?this.from.xthis.to.x&&(t=this.from.x-i*n,e=this.from.y-i*n,t=this.to.x>t?this.to.x:t):this.from.ythis.to.x&&(t=this.from.x-i*n,e=this.from.y+i*n,t=this.to.x>t?this.to.x:t)):Math.abs(this.from.x-this.to.x)>Math.abs(this.from.y-this.to.y)&&(this.from.y>this.to.y?this.from.xe?this.to.y:e):this.from.x>this.to.x&&(t=this.from.x-i*o,e=this.from.y-i*o,e=this.to.y>e?this.to.y:e):this.from.ythis.to.x&&(t=this.from.x-i*o,e=this.from.y+i*o,e=this.to.yd;d++){var l=t.measureText(n[d]).width;h=l>h?l:h}var c=this.options.fontSize*r,p=i-h/2,u=s-c/2;this.labelDimensions={top:u,left:p,width:h,height:c,yLine:o}}void 0!==this.options.fontFill&&null!==this.options.fontFill&&"none"!==this.options.fontFill&&(t.fillStyle=this.options.fontFill,t.fillRect(this.labelDimensions.left,this.labelDimensions.top,this.labelDimensions.width,this.labelDimensions.height)),t.fillStyle=this.options.fontColor||"black",t.textAlign="center",t.textBaseline="middle",o=this.labelDimensions.yLine;for(var d=0;r>d;d++)t.fillText(n[d],i,o),o+=a}},s.prototype._drawDashLine=function(t){t.strokeStyle=this._getColor(),t.lineWidth=this._getLineWidth();var e=null;if(void 0!==t.mozDash||void 0!==t.setLineDash){var i=[0];i=void 0!==this.options.dash.length&&void 0!==this.options.dash.gap?[this.options.dash.length,this.options.dash.gap]:[5,5],"undefined"!=typeof t.setLineDash?(t.setLineDash(i),t.lineDashOffset=0):(t.mozDash=i,t.mozDashOffset=0),e=this._line(t),"undefined"!=typeof t.setLineDash?(t.setLineDash([0]),t.lineDashOffset=0):(t.mozDash=[0],t.mozDashOffset=0)}else t.beginPath(),t.lineCap="round",void 0!==this.options.dash.altLength?t.dashedLine(this.from.x,this.from.y,this.to.x,this.to.y,[this.options.dash.length,this.options.dash.gap,this.options.dash.altLength,this.options.dash.gap]):void 0!==this.options.dash.length&&void 0!==this.options.dash.gap?t.dashedLine(this.from.x,this.from.y,this.to.x,this.to.y,[this.options.dash.length,this.options.dash.gap]):(t.moveTo(this.from.x,this.from.y),t.lineTo(this.to.x,this.to.y)),t.stroke();if(this.label){var s;if(1==this.options.smoothCurves.enabled&&null!=e){var o=.5*(.5*(this.from.x+e.x)+.5*(this.to.x+e.x)),n=.5*(.5*(this.from.y+e.y)+.5*(this.to.y+e.y));s={x:o,y:n}}else s=this._pointOnLine(.5);this._label(t,this.label,s.x,s.y)}},s.prototype._pointOnLine=function(t){return{x:(1-t)*this.from.x+t*this.to.x,y:(1-t)*this.from.y+t*this.to.y}},s.prototype._pointOnCircle=function(t,e,i,s){var o=2*(s-3/8)*Math.PI;return{x:t+i*Math.cos(o),y:e-i*Math.sin(o)}},s.prototype._drawArrowCenter=function(t){var e;if(t.strokeStyle=this._getColor(),t.fillStyle=t.strokeStyle,t.lineWidth=this._getLineWidth(),this.from!=this.to){var i=this._line(t),s=Math.atan2(this.to.y-this.from.y,this.to.x-this.from.x),o=(10+5*this.options.width)*this.options.arrowScaleFactor;if(1==this.options.smoothCurves.enabled&&null!=i){var n=.5*(.5*(this.from.x+i.x)+.5*(this.to.x+i.x)),r=.5*(.5*(this.from.y+i.y)+.5*(this.to.y+i.y));e={x:n,y:r}}else e=this._pointOnLine(.5);t.arrow(e.x,e.y,s,o),t.fill(),t.stroke(),this.label&&this._label(t,this.label,e.x,e.y)}else{var a,h,d=.25*Math.max(100,this.physics.springLength),l=this.from;l.width||l.resize(t),l.width>l.height?(a=l.x+.5*l.width,h=l.y-d):(a=l.x+d,h=l.y-.5*l.height),this._circle(t,a,h,d);var s=.2*Math.PI,o=(10+5*this.options.width)*this.options.arrowScaleFactor;e=this._pointOnCircle(a,h,d,.5),t.arrow(e.x,e.y,s,o),t.fill(),t.stroke(),this.label&&(e=this._pointOnCircle(a,h,d,.5),this._label(t,this.label,e.x,e.y))}},s.prototype._drawArrow=function(t){t.strokeStyle=this._getColor(),t.fillStyle=t.strokeStyle,t.lineWidth=this._getLineWidth();var e,i;if(this.from!=this.to){e=Math.atan2(this.to.y-this.from.y,this.to.x-this.from.x);var s,o=this.to.x-this.from.x,n=this.to.y-this.from.y,r=Math.sqrt(o*o+n*n),a=this.from.distanceToBorder(t,e+Math.PI),h=(r-a)/r,d=h*this.from.x+(1-h)*this.to.x,l=h*this.from.y+(1-h)*this.to.y;1==this.options.smoothCurves.dynamic&&1==this.options.smoothCurves.enabled?s=this.via:1==this.options.smoothCurves.enabled&&(s=this._getViaCoordinates()),1==this.options.smoothCurves.enabled&&null!=s.x&&(e=Math.atan2(this.to.y-s.y,this.to.x-s.x),o=this.to.x-s.x,n=this.to.y-s.y,r=Math.sqrt(o*o+n*n));var c,p,u=this.to.distanceToBorder(t,e),m=(r-u)/r;if(1==this.options.smoothCurves.enabled&&null!=s.x?(c=(1-m)*s.x+m*this.to.x,p=(1-m)*s.y+m*this.to.y):(c=(1-m)*this.from.x+m*this.to.x,p=(1-m)*this.from.y+m*this.to.y),t.beginPath(),t.moveTo(d,l),1==this.options.smoothCurves.enabled&&null!=s.x?t.quadraticCurveTo(s.x,s.y,c,p):t.lineTo(c,p),t.stroke(),i=(10+5*this.options.width)*this.options.arrowScaleFactor,t.arrow(c,p,e,i),t.fill(),t.stroke(),this.label){var f;if(1==this.options.smoothCurves.enabled&&null!=s){var g=.5*(.5*(this.from.x+s.x)+.5*(this.to.x+s.x)),v=.5*(.5*(this.from.y+s.y)+.5*(this.to.y+s.y));f={x:g,y:v}}else f=this._pointOnLine(.5);this._label(t,this.label,f.x,f.y)}}else{var y,b,_,x=this.from,w=.25*Math.max(100,this.physics.springLength);x.width||x.resize(t),x.width>x.height?(y=x.x+.5*x.width,b=x.y-w,_={x:y,y:x.y,angle:.9*Math.PI}):(y=x.x+w,b=x.y-.5*x.height,_={x:x.x,y:b,angle:.6*Math.PI}),t.beginPath(),t.arc(y,b,w,0,2*Math.PI,!1),t.stroke();var i=(10+5*this.options.width)*this.options.arrowScaleFactor;t.arrow(_.x,_.y,_.angle,i),t.fill(),t.stroke(),this.label&&(f=this._pointOnCircle(y,b,w,.5),this._label(t,this.label,f.x,f.y))}},s.prototype._getDistanceToEdge=function(t,e,i,s,o,n){var r=0;if(this.from!=this.to)if(1==this.options.smoothCurves.enabled){var a,h;if(1==this.options.smoothCurves.enabled&&1==this.options.smoothCurves.dynamic)a=this.via.x,h=this.via.y;else{var d=this._getViaCoordinates();a=d.x,h=d.y}var l,c,p,u,m,f,g,v=1e9;for(c=0;10>c;c++)p=.1*c,u=Math.pow(1-p,2)*t+2*p*(1-p)*a+Math.pow(p,2)*i,m=Math.pow(1-p,2)*e+2*p*(1-p)*h+Math.pow(p,2)*s,c>0&&(l=this._getDistanceToLine(f,g,u,m,o,n),v=v>l?l:v),f=u,g=m;r=v}else r=this._getDistanceToLine(t,e,i,s,o,n);else{var u,m,y,b,_=.25*this.physics.springLength,x=this.from;x.width>x.height?(u=x.x+.5*x.width,m=x.y-_):(u=x.x+_,m=x.y-.5*x.height),y=u-o,b=m-n,r=Math.abs(Math.sqrt(y*y+b*b)-_)}return this.labelDimensions.lefto&&this.labelDimensions.topn?0:r},s.prototype._getDistanceToLine=function(t,e,i,s,o,n){var r=i-t,a=s-e,h=r*r+a*a,d=((o-t)*r+(n-e)*a)/h;d>1?d=1:0>d&&(d=0);var l=t+d*r,c=e+d*a,p=l-o,u=c-n;return Math.sqrt(p*p+u*u)},s.prototype.setScale=function(t){this.networkScaleInv=1/t},s.prototype.select=function(){this.selected=!0},s.prototype.unselect=function(){this.selected=!1},s.prototype.positionBezierNode=function(){null!==this.via&&null!==this.from&&null!==this.to&&(this.via.x=.5*(this.from.x+this.to.x),this.via.y=.5*(this.from.y+this.to.y))},s.prototype._drawControlNodes=function(t){if(1==this.controlNodesEnabled){if(null===this.controlNodes.from&&null===this.controlNodes.to){var e="edgeIdFrom:".concat(this.id),i="edgeIdTo:".concat(this.id),s={nodes:{group:"",radius:8},physics:{damping:0},clustering:{maxNodeSizeIncrements:0,nodeScaling:{width:0,height:0,radius:0}}};this.controlNodes.from=new n({id:e,shape:"dot",color:{background:"#ff4e00",border:"#3c3c3c",highlight:{background:"#07f968"}}},{},{},s),this.controlNodes.to=new n({id:i,shape:"dot",color:{background:"#ff4e00",border:"#3c3c3c",highlight:{background:"#07f968"}}},{},{},s)}0==this.controlNodes.from.selected&&0==this.controlNodes.to.selected&&(this.controlNodes.positions=this.getControlNodePositions(t),this.controlNodes.from.x=this.controlNodes.positions.from.x,this.controlNodes.from.y=this.controlNodes.positions.from.y,this.controlNodes.to.x=this.controlNodes.positions.to.x,this.controlNodes.to.y=this.controlNodes.positions.to.y),this.controlNodes.from.draw(t),this.controlNodes.to.draw(t)}else this.controlNodes={from:null,to:null,positions:{}}},s.prototype._enableControlNodes=function(){this.fromBackup=this.from,this.toBackup=this.to,this.controlNodesEnabled=!0},s.prototype._disableControlNodes=function(){this.fromId=this.from.id,this.toId=this.to.id,this.fromId!=this.fromBackup.id?this.fromBackup.detachEdge(this):this.toId!=this.toBackup.id&&this.toBackup.detachEdge(this),this.fromBackup=null,this.toBackup=null,this.controlNodesEnabled=!1},s.prototype._getSelectedControlNode=function(t,e){var i=this.controlNodes.positions,s=Math.sqrt(Math.pow(t-i.from.x,2)+Math.pow(e-i.from.y,2)),o=Math.sqrt(Math.pow(t-i.to.x,2)+Math.pow(e-i.to.y,2));return 15>s?(this.connectedNode=this.from,this.from=this.controlNodes.from,this.controlNodes.from):15>o?(this.connectedNode=this.to,this.to=this.controlNodes.to,this.controlNodes.to):null},s.prototype._restoreControlNodes=function(){1==this.controlNodes.from.selected?(this.from=this.connectedNode,this.connectedNode=null,this.controlNodes.from.unselect()):1==this.controlNodes.to.selected&&(this.to=this.connectedNode,this.connectedNode=null,this.controlNodes.to.unselect())},s.prototype.getControlNodePositions=function(t){var e,i=Math.atan2(this.to.y-this.from.y,this.to.x-this.from.x),s=this.to.x-this.from.x,o=this.to.y-this.from.y,n=Math.sqrt(s*s+o*o),r=this.from.distanceToBorder(t,i+Math.PI),a=(n-r)/n,h=a*this.from.x+(1-a)*this.to.x,d=a*this.from.y+(1-a)*this.to.y;1==this.options.smoothCurves.dynamic&&1==this.options.smoothCurves.enabled?e=this.via:1==this.options.smoothCurves.enabled&&(e=this._getViaCoordinates()),1==this.options.smoothCurves.enabled&&null!=e.x&&(i=Math.atan2(this.to.y-e.y,this.to.x-e.x),s=this.to.x-e.x,o=this.to.y-e.y,n=Math.sqrt(s*s+o*o));var l,c,p=this.to.distanceToBorder(t,i),u=(n-p)/n;return 1==this.options.smoothCurves.enabled&&null!=e.x?(l=(1-u)*e.x+u*this.to.x,c=(1-u)*e.y+u*this.to.y):(l=(1-u)*this.from.x+u*this.to.x,c=(1-u)*this.from.y+u*this.to.y),{from:{x:h,y:d},to:{x:l,y:c}}},t.exports=s},function(t,e,i){function s(){this.clear(),this.defaultIndex=0}var o=i(1);s.DEFAULT=[{border:"#2B7CE9",background:"#97C2FC",highlight:{border:"#2B7CE9",background:"#D2E5FF"},hover:{border:"#2B7CE9",background:"#D2E5FF"}},{border:"#FFA500",background:"#FFFF00",highlight:{border:"#FFA500",background:"#FFFFA3"},hover:{border:"#FFA500",background:"#FFFFA3"}},{border:"#FA0A10",background:"#FB7E81",highlight:{border:"#FA0A10",background:"#FFAFB1"},hover:{border:"#FA0A10",background:"#FFAFB1"}},{border:"#41A906",background:"#7BE141",highlight:{border:"#41A906",background:"#A1EC76"},hover:{border:"#41A906",background:"#A1EC76"}},{border:"#E129F0",background:"#EB7DF4",highlight:{border:"#E129F0",background:"#F0B3F5"},hover:{border:"#E129F0",background:"#F0B3F5"}},{border:"#7C29F0",background:"#AD85E4",highlight:{border:"#7C29F0",background:"#D3BDF0"},hover:{border:"#7C29F0",background:"#D3BDF0"}},{border:"#C37F00",background:"#FFA807",highlight:{border:"#C37F00",background:"#FFCA66"},hover:{border:"#C37F00",background:"#FFCA66"}},{border:"#4220FB",background:"#6E6EFD",highlight:{border:"#4220FB",background:"#9B9BFD"},hover:{border:"#4220FB",background:"#9B9BFD"}},{border:"#FD5A77",background:"#FFC0CB",highlight:{border:"#FD5A77",background:"#FFD1D9"},hover:{border:"#FD5A77",background:"#FFD1D9"}},{border:"#4AD63A",background:"#C2FABC",highlight:{border:"#4AD63A",background:"#E6FFE3"},hover:{border:"#4AD63A",background:"#E6FFE3"}}],s.prototype.clear=function(){this.groups={},this.groups.length=function(){var t=0;for(var e in this)this.hasOwnProperty(e)&&t++;return t}},s.prototype.get=function(t){var e=this.groups[t];if(void 0==e){var i=this.defaultIndex%s.DEFAULT.length;this.defaultIndex++,e={},e.color=s.DEFAULT[i],this.groups[t]=e}return e},s.prototype.add=function(t,e){return this.groups[t]=e,e.color&&(e.color=o.parseColor(e.color)),e},t.exports=s},function(t){function e(){this.images={},this.callback=void 0}e.prototype.setOnloadCallback=function(t){this.callback=t},e.prototype.load=function(t,e){var i=this.images[t];if(void 0==i){var s=this;i=new Image,this.images[t]=i,i.onload=function(){s.callback&&s.callback(this)},i.onerror=function(){this.src=e,s.callback&&s.callback(this)},i.src=t}return i},t.exports=e},function(t,e,i){function s(t,e,i,s){var n=o.selectiveBridgeObject(["nodes"],s);this.options=n.nodes,this.selected=!1,this.hover=!1,this.edges=[],this.dynamicEdges=[],this.reroutedEdges={},this.fontDrawThreshold=3,this.id=void 0,this.x=null,this.y=null,this.allowedToMoveX=!1,this.allowedToMoveY=!1,this.xFixed=!1,this.yFixed=!1,this.horizontalAlignLeft=!0,this.verticalAlignTop=!0,this.baseRadiusValue=s.nodes.radius,this.radiusFixed=!1,this.level=-1,this.preassignedLevel=!1,this.hierarchyEnumerated=!1,this.labelDimensions={top:0,left:0,width:0,height:0,yLine:0},this.imagelist=e,this.grouplist=i,this.fx=0,this.fy=0,this.vx=0,this.vy=0,this.damping=s.physics.damping,this.fixedData={x:null,y:null},this.setProperties(t,n),this.resetCluster(),this.dynamicEdgesLength=0,this.clusterSession=0,this.clusterSizeWidthFactor=s.clustering.nodeScaling.width,this.clusterSizeHeightFactor=s.clustering.nodeScaling.height,this.clusterSizeRadiusFactor=s.clustering.nodeScaling.radius,this.maxNodeSizeIncrements=s.clustering.maxNodeSizeIncrements,this.growthIndicator=0,this.networkScaleInv=1,this.networkScale=1,this.canvasTopLeft={x:-300,y:-300},this.canvasBottomRight={x:300,y:300},this.parentEdgeId=null}var o=i(1);s.prototype.resetCluster=function(){this.formationScale=void 0,this.clusterSize=1,this.containedNodes={},this.containedEdges={},this.clusterSessions=[]},s.prototype.attachEdge=function(t){-1==this.edges.indexOf(t)&&this.edges.push(t),-1==this.dynamicEdges.indexOf(t)&&this.dynamicEdges.push(t),this.dynamicEdgesLength=this.dynamicEdges.length},s.prototype.detachEdge=function(t){var e=this.edges.indexOf(t);-1!=e&&this.edges.splice(e,1),e=this.dynamicEdges.indexOf(t),-1!=e&&this.dynamicEdges.splice(e,1),this.dynamicEdgesLength=this.dynamicEdges.length},s.prototype.setProperties=function(t,e){if(t){var i=["borderWidth","borderWidthSelected","shape","image","brokenImage","radius","fontColor","fontSize","fontFace","fontFill","group","mass"];if(o.selectiveDeepExtend(i,this.options,t),void 0!==t.id&&(this.id=t.id),void 0!==t.label&&(this.label=t.label,this.originalLabel=t.label),void 0!==t.title&&(this.title=t.title),void 0!==t.x&&(this.x=t.x),void 0!==t.y&&(this.y=t.y),void 0!==t.value&&(this.value=t.value),void 0!==t.level&&(this.level=t.level,this.preassignedLevel=!0),void 0!==t.horizontalAlignLeft&&(this.horizontalAlignLeft=t.horizontalAlignLeft),void 0!==t.verticalAlignTop&&(this.verticalAlignTop=t.verticalAlignTop),void 0!==t.triggerFunction&&(this.triggerFunction=t.triggerFunction),void 0===this.id)throw"Node must have an id";if("number"==typeof this.options.group||"string"==typeof this.options.group&&""!=this.options.group){var s=this.grouplist.get(this.options.group);for(var n in s)s.hasOwnProperty(n)&&(this.options[n]=s[n])}if(void 0!==t.radius&&(this.baseRadiusValue=this.options.radius),void 0!==t.color&&(this.options.color=o.parseColor(t.color)),void 0!==this.options.image&&""!=this.options.image){if(!this.imagelist)throw"No imagelist provided";this.imageObj=this.imagelist.load(this.options.image,this.options.brokenImage)}switch(void 0!==t.allowedToMoveX?(this.xFixed=!t.allowedToMoveX,this.allowedToMoveX=t.allowedToMoveX):void 0!==t.x&&0==this.allowedToMoveX&&(this.xFixed=!0),void 0!==t.allowedToMoveY?(this.yFixed=!t.allowedToMoveY,this.allowedToMoveY=t.allowedToMoveY):void 0!==t.y&&0==this.allowedToMoveY&&(this.yFixed=!0),this.radiusFixed=this.radiusFixed||void 0!==t.radius,"image"==this.options.shape&&(this.options.radiusMin=e.nodes.widthMin,this.options.radiusMax=e.nodes.widthMax),this.options.shape){case"database":this.draw=this._drawDatabase,this.resize=this._resizeDatabase;break;case"box":this.draw=this._drawBox,this.resize=this._resizeBox;break;case"circle":this.draw=this._drawCircle,this.resize=this._resizeCircle;break;case"ellipse":this.draw=this._drawEllipse,this.resize=this._resizeEllipse;break;case"image":this.draw=this._drawImage,this.resize=this._resizeImage;break;case"text":this.draw=this._drawText,this.resize=this._resizeText;break;case"dot":this.draw=this._drawDot,this.resize=this._resizeShape;break;case"square":this.draw=this._drawSquare,this.resize=this._resizeShape;break;case"triangle":this.draw=this._drawTriangle,this.resize=this._resizeShape;break;case"triangleDown":this.draw=this._drawTriangleDown,this.resize=this._resizeShape;break;case"star":this.draw=this._drawStar,this.resize=this._resizeShape;break;default:this.draw=this._drawEllipse,this.resize=this._resizeEllipse}this._reset()}},s.prototype.select=function(){this.selected=!0,this._reset()},s.prototype.unselect=function(){this.selected=!1,this._reset()},s.prototype.clearSizeCache=function(){this._reset()},s.prototype._reset=function(){this.width=void 0,this.height=void 0},s.prototype.getTitle=function(){return"function"==typeof this.title?this.title():this.title},s.prototype.distanceToBorder=function(t,e){var i=1;switch(this.width||this.resize(t),this.options.shape){case"circle":case"dot":return this.options.radius+i;case"ellipse":var s=this.width/2,o=this.height/2,n=Math.sin(e)*s,r=Math.cos(e)*o;return s*o/Math.sqrt(n*n+r*r);case"box":case"image":case"text":default:return this.width?Math.min(Math.abs(this.width/2/Math.cos(e)),Math.abs(this.height/2/Math.sin(e)))+i:0}},s.prototype._setForce=function(t,e){this.fx=t,this.fy=e},s.prototype._addForce=function(t,e){this.fx+=t,this.fy+=e},s.prototype.discreteStep=function(t){if(this.xFixed)this.fx=0,this.vx=0;else{var e=this.damping*this.vx,i=(this.fx-e)/this.options.mass;this.vx+=i*t,this.x+=this.vx*t}if(this.yFixed)this.fy=0,this.vy=0;else{var s=this.damping*this.vy,o=(this.fy-s)/this.options.mass;this.vy+=o*t,this.y+=this.vy*t}},s.prototype.discreteStepLimited=function(t,e){if(this.xFixed)this.fx=0,this.vx=0;else{var i=this.damping*this.vx,s=(this.fx-i)/this.options.mass;this.vx+=s*t,this.vx=Math.abs(this.vx)>e?this.vx>0?e:-e:this.vx,this.x+=this.vx*t}if(this.yFixed)this.fy=0,this.vy=0;else{var o=this.damping*this.vy,n=(this.fy-o)/this.options.mass;this.vy+=n*t,this.vy=Math.abs(this.vy)>e?this.vy>0?e:-e:this.vy,this.y+=this.vy*t}},s.prototype.isFixed=function(){return this.xFixed&&this.yFixed},s.prototype.isMoving=function(t){var e=Math.sqrt(Math.pow(this.vx,2)+Math.pow(this.vy,2));return e>t},s.prototype.isSelected=function(){return this.selected},s.prototype.getValue=function(){return this.value},s.prototype.getDistance=function(t,e){var i=this.x-t,s=this.y-e;return Math.sqrt(i*i+s*s)},s.prototype.setValueRange=function(t,e){if(!this.radiusFixed&&void 0!==this.value)if(e==t)this.options.radius=(this.options.radiusMin+this.options.radiusMax)/2;else{var i=(this.options.radiusMax-this.options.radiusMin)/(e-t);this.options.radius=(this.value-t)*i+this.options.radiusMin}this.baseRadiusValue=this.options.radius},s.prototype.draw=function(){throw"Draw method not initialized for node"},s.prototype.resize=function(){throw"Resize method not initialized for node"},s.prototype.isOverlappingWith=function(t){return this.leftt.left&&this.topt.top},s.prototype._resizeImage=function(){if(!this.width||!this.height){var t,e;if(this.value){this.options.radius=this.baseRadiusValue;var i=this.imageObj.height/this.imageObj.width;void 0!==i?(t=this.options.radius||this.imageObj.width,e=this.options.radius*i||this.imageObj.height):(t=0,e=0)}else t=this.imageObj.width,e=this.imageObj.height;this.width=t,this.height=e,this.growthIndicator=0,this.width>0&&this.height>0&&(this.width+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeWidthFactor,this.height+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeHeightFactor,this.options.radius+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeRadiusFactor,this.growthIndicator=this.width-t)}},s.prototype._drawImage=function(t){this._resizeImage(t),this.left=this.x-this.width/2,this.top=this.y-this.height/2;var e;if(0!=this.imageObj.width){if(this.clusterSize>1){var i=this.clusterSize>1?10:0;i*=this.networkScaleInv,i=Math.min(.2*this.width,i),t.globalAlpha=.5,t.drawImage(this.imageObj,this.left-i,this.top-i,this.width+2*i,this.height+2*i)}t.globalAlpha=1,t.drawImage(this.imageObj,this.left,this.top,this.width,this.height),e=this.y+this.height/2}else e=this.y;this._label(t,this.label,this.x,e,void 0,"top")},s.prototype._resizeBox=function(t){if(!this.width){var e=5,i=this.getTextSize(t);this.width=i.width+2*e,this.height=i.height+2*e,this.width+=.5*Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeWidthFactor,this.height+=.5*Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeHeightFactor,this.growthIndicator=this.width-(i.width+2*e)}},s.prototype._drawBox=function(t){this._resizeBox(t),this.left=this.x-this.width/2,this.top=this.y-this.height/2;var e=2.5,i=this.options.borderWidth,s=this.options.borderWidthSelected||2*this.options.borderWidth;t.strokeStyle=this.selected?this.options.color.highlight.border:this.hover?this.options.color.hover.border:this.options.color.border,this.clusterSize>1&&(t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.roundRect(this.left-2*t.lineWidth,this.top-2*t.lineWidth,this.width+4*t.lineWidth,this.height+4*t.lineWidth,this.options.radius),t.stroke()),t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.fillStyle=this.selected?this.options.color.highlight.background:this.options.color.background,t.roundRect(this.left,this.top,this.width,this.height,this.options.radius),t.fill(),t.stroke(),this._label(t,this.label,this.x,this.y)},s.prototype._resizeDatabase=function(t){if(!this.width){var e=5,i=this.getTextSize(t),s=i.width+2*e;this.width=s,this.height=s,this.width+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeWidthFactor,this.height+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeHeightFactor,this.options.radius+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeRadiusFactor,this.growthIndicator=this.width-s}},s.prototype._drawDatabase=function(t){this._resizeDatabase(t),this.left=this.x-this.width/2,this.top=this.y-this.height/2;var e=2.5,i=this.options.borderWidth,s=this.options.borderWidthSelected||2*this.options.borderWidth;t.strokeStyle=this.selected?this.options.color.highlight.border:this.hover?this.options.color.hover.border:this.options.color.border,this.clusterSize>1&&(t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.database(this.x-this.width/2-2*t.lineWidth,this.y-.5*this.height-2*t.lineWidth,this.width+4*t.lineWidth,this.height+4*t.lineWidth),t.stroke()),t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.fillStyle=this.selected?this.options.color.highlight.background:this.hover?this.options.color.hover.background:this.options.color.background,t.database(this.x-this.width/2,this.y-.5*this.height,this.width,this.height),t.fill(),t.stroke(),this._label(t,this.label,this.x,this.y)},s.prototype._resizeCircle=function(t){if(!this.width){var e=5,i=this.getTextSize(t),s=Math.max(i.width,i.height)+2*e;this.options.radius=s/2,this.width=s,this.height=s,this.options.radius+=.5*Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeRadiusFactor,this.growthIndicator=this.options.radius-.5*s}},s.prototype._drawCircle=function(t){this._resizeCircle(t),this.left=this.x-this.width/2,this.top=this.y-this.height/2;var e=2.5,i=this.options.borderWidth,s=this.options.borderWidthSelected||2*this.options.borderWidth;t.strokeStyle=this.selected?this.options.color.highlight.border:this.hover?this.options.color.hover.border:this.options.color.border,this.clusterSize>1&&(t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.circle(this.x,this.y,this.options.radius+2*t.lineWidth),t.stroke()),t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.fillStyle=this.selected?this.options.color.highlight.background:this.hover?this.options.color.hover.background:this.options.color.background,t.circle(this.x,this.y,this.options.radius),t.fill(),t.stroke(),this._label(t,this.label,this.x,this.y)},s.prototype._resizeEllipse=function(t){if(!this.width){var e=this.getTextSize(t);this.width=1.5*e.width,this.height=2*e.height,this.width1&&(t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.ellipse(this.left-2*t.lineWidth,this.top-2*t.lineWidth,this.width+4*t.lineWidth,this.height+4*t.lineWidth),t.stroke()),t.lineWidth=(this.selected?s:i)+(this.clusterSize>1?e:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.fillStyle=this.selected?this.options.color.highlight.background:this.hover?this.options.color.hover.background:this.options.color.background,t.ellipse(this.left,this.top,this.width,this.height),t.fill(),t.stroke(),this._label(t,this.label,this.x,this.y)},s.prototype._drawDot=function(t){this._drawShape(t,"circle")},s.prototype._drawTriangle=function(t){this._drawShape(t,"triangle")},s.prototype._drawTriangleDown=function(t){this._drawShape(t,"triangleDown")},s.prototype._drawSquare=function(t){this._drawShape(t,"square")},s.prototype._drawStar=function(t){this._drawShape(t,"star")},s.prototype._resizeShape=function(){if(!this.width){this.options.radius=this.baseRadiusValue;var t=2*this.options.radius;this.width=t,this.height=t,this.width+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeWidthFactor,this.height+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeHeightFactor,this.options.radius+=.5*Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeRadiusFactor,this.growthIndicator=this.width-t}},s.prototype._drawShape=function(t,e){this._resizeShape(t),this.left=this.x-this.width/2,this.top=this.y-this.height/2;var i=2.5,s=this.options.borderWidth,o=this.options.borderWidthSelected||2*this.options.borderWidth,n=2;switch(e){case"dot":n=2;break;case"square":n=2;break;case"triangle":n=3;break;case"triangleDown":n=3;break;case"star":n=4}t.strokeStyle=this.selected?this.options.color.highlight.border:this.hover?this.options.color.hover.border:this.options.color.border,this.clusterSize>1&&(t.lineWidth=(this.selected?o:s)+(this.clusterSize>1?i:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t[e](this.x,this.y,this.options.radius+n*t.lineWidth),t.stroke()),t.lineWidth=(this.selected?o:s)+(this.clusterSize>1?i:0),t.lineWidth*=this.networkScaleInv,t.lineWidth=Math.min(this.width,t.lineWidth),t.fillStyle=this.selected?this.options.color.highlight.background:this.hover?this.options.color.hover.background:this.options.color.background,t[e](this.x,this.y,this.options.radius),t.fill(),t.stroke(),this.label&&this._label(t,this.label,this.x,this.y+this.height/2,void 0,"top",!0)},s.prototype._resizeText=function(t){if(!this.width){var e=5,i=this.getTextSize(t);this.width=i.width+2*e,this.height=i.height+2*e,this.width+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeWidthFactor,this.height+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeHeightFactor,this.options.radius+=Math.min(this.clusterSize-1,this.maxNodeSizeIncrements)*this.clusterSizeRadiusFactor,this.growthIndicator=this.width-(i.width+2*e)}},s.prototype._drawText=function(t){this._resizeText(t),this.left=this.x-this.width/2,this.top=this.y-this.height/2,this._label(t,this.label,this.x,this.y)},s.prototype._label=function(t,e,i,s,o,n,r){if(e&&Number(this.options.fontSize)*this.networkScale>this.fontDrawThreshold){t.font=(this.selected?"bold ":"")+this.options.fontSize+"px "+this.options.fontFace;var a=e.split("\n"),h=a.length,d=Number(this.options.fontSize)+4,l=s+(1-h)/2*d;1==r&&(l=s+(1-h)/(2*d));for(var c=t.measureText(a[0]).width,p=1;h>p;p++){var u=t.measureText(a[p]).width;c=u>c?u:c}var m=this.options.fontSize*h,f=i-c/2,g=s-m/2;"top"==n&&(g+=.5*d),this.labelDimensions={top:g,left:f,width:c,height:m,yLine:l},void 0!==this.options.fontFill&&null!==this.options.fontFill&&"none"!==this.options.fontFill&&(t.fillStyle=this.options.fontFill,t.fillRect(f,g,c,m)),t.fillStyle=this.options.fontColor||"black",t.textAlign=o||"center",t.textBaseline=n||"middle";for(var p=0;h>p;p++)t.fillText(a[p],i,l),l+=d}},s.prototype.getTextSize=function(t){if(void 0!==this.label){t.font=(this.selected?"bold ":"")+this.options.fontSize+"px "+this.options.fontFace;for(var e=this.label.split("\n"),i=(Number(this.options.fontSize)+4)*e.length,s=0,o=0,n=e.length;n>o;o++)s=Math.max(s,t.measureText(e[o]).width);return{width:s,height:i}}return{width:0,height:0}},s.prototype.inArea=function(){return void 0!==this.width?this.x+this.width*this.networkScaleInv>=this.canvasTopLeft.x&&this.x-this.width*this.networkScaleInv=this.canvasTopLeft.y&&this.y-this.height*this.networkScaleInv=this.canvasTopLeft.x&&this.x=this.canvasTopLeft.y&&this.ys&&(n=s-e-this.padding),no&&(r=o-i-this.padding),ri;i++)if(e.id===r.nodes[i].id){o=r.nodes[i];break}for(o||(o={id:e.id},t.node&&(o.attr=a(o.attr,t.node))),i=n.length-1;i>=0;i--){var h=n[i];h.nodes||(h.nodes=[]),-1==h.nodes.indexOf(o)&&h.nodes.push(o)}e.attr&&(o.attr=a(o.attr,e.attr))}function l(t,e){if(t.edges||(t.edges=[]),t.edges.push(e),t.edge){var i=a({},t.edge);e.attr=a(i,e.attr)}}function c(t,e,i,s,o){var n={from:e,to:i,type:s};return t.edge&&(n.attr=a({},t.edge)),n.attr=a(n.attr||{},o),n}function p(){for(L=S.NULL,k="";" "==E||" "==E||"\n"==E||"\r"==E;)o();do{var t=!1;if("#"==E){for(var e=O-1;" "==T.charAt(e)||" "==T.charAt(e);)e--;if("\n"==T.charAt(e)||""==T.charAt(e)){for(;""!=E&&"\n"!=E;)o();t=!0}}if("/"==E&&"/"==n()){for(;""!=E&&"\n"!=E;)o();t=!0}if("/"==E&&"*"==n()){for(;""!=E;){if("*"==E&&"/"==n()){o(),o();break}o()}t=!0}for(;" "==E||" "==E||"\n"==E||"\r"==E;)o()}while(t);if(""==E)return void(L=S.DELIMITER);var i=E+n();if(C[i])return L=S.DELIMITER,k=i,o(),void o();if(C[E])return L=S.DELIMITER,k=E,void o();if(r(E)||"-"==E){for(k+=E,o();r(E);)k+=E,o();return"false"==k?k=!1:"true"==k?k=!0:isNaN(Number(k))||(k=Number(k)),void(L=S.IDENTIFIER)}if('"'==E){for(o();""!=E&&('"'!=E||'"'==E&&'"'==n());)k+=E,'"'==E&&o(),o();if('"'!=E)throw x('End of string " expected');return o(),void(L=S.IDENTIFIER)}for(L=S.UNKNOWN;""!=E;)k+=E,o();throw new SyntaxError('Syntax error in part "'+w(k,30)+'"')}function u(){var t={};if(s(),p(),"strict"==k&&(t.strict=!0,p()),("graph"==k||"digraph"==k)&&(t.type=k,p()),L==S.IDENTIFIER&&(t.id=k,p()),"{"!=k)throw x("Angle bracket { expected");if(p(),m(t),"}"!=k)throw x("Angle bracket } expected");if(p(),""!==k)throw x("End of file expected");return p(),delete t.node,delete t.edge,delete t.graph,t}function m(t){for(;""!==k&&"}"!=k;)f(t),";"==k&&p()}function f(t){var e=g(t);if(e)return void b(t,e);var i=v(t);if(!i){if(L!=S.IDENTIFIER)throw x("Identifier expected");var s=k;if(p(),"="==k){if(p(),L!=S.IDENTIFIER)throw x("Identifier expected");t[s]=k,p()}else y(t,s)}}function g(t){var e=null;if("subgraph"==k&&(e={},e.type="subgraph",p(),L==S.IDENTIFIER&&(e.id=k,p())),"{"==k){if(p(),e||(e={}),e.parent=t,e.node=t.node,e.edge=t.edge,e.graph=t.graph,m(e),"}"!=k)throw x("Angle bracket } expected");p(),delete e.node,delete e.edge,delete e.graph,delete e.parent,t.subgraphs||(t.subgraphs=[]),t.subgraphs.push(e)}return e}function v(t){return"node"==k?(p(),t.node=_(),"node"):"edge"==k?(p(),t.edge=_(),"edge"):"graph"==k?(p(),t.graph=_(),"graph"):null}function y(t,e){var i={id:e},s=_();s&&(i.attr=s),d(t,i),b(t,e)}function b(t,e){for(;"->"==k||"--"==k;){var i,s=k;p();var o=g(t);if(o)i=o;else{if(L!=S.IDENTIFIER)throw x("Identifier or subgraph expected");i=k,d(t,{id:i}),p()}var n=_(),r=c(t,e,i,s,n);l(t,r),e=i}}function _(){for(var t=null;"["==k;){for(p(),t={};""!==k&&"]"!=k;){if(L!=S.IDENTIFIER)throw x("Attribute name expected");var e=k;if(p(),"="!=k)throw x("Equal sign = expected");if(p(),L!=S.IDENTIFIER)throw x("Attribute value expected");var i=k;h(t,e,i),p(),","==k&&p()}if("]"!=k)throw x("Bracket ] expected");p()}return t}function x(t){return new SyntaxError(t+', got "'+w(k,30)+'" (char '+O+")")}function w(t,e){return t.length<=e?t:t.substr(0,27)+"..."}function D(t,e,i){Array.isArray(t)?t.forEach(function(t){Array.isArray(e)?e.forEach(function(e){i(t,e)}):i(t,e)}):Array.isArray(e)?e.forEach(function(e){i(t,e)}):i(t,e)}function M(t){var e=i(t),s={nodes:[],edges:[],options:{}};if(e.nodes&&e.nodes.forEach(function(t){var e={id:t.id,label:String(t.label||t.id)};a(e,t.attr),e.image&&(e.shape="image"),s.nodes.push(e)}),e.edges){var o=function(t){var e={from:t.from,to:t.to};return a(e,t.attr),e.style="->"==t.type?"arrow":"line",e};e.edges.forEach(function(t){var e,i;e=t.from instanceof Object?t.from.nodes:{id:t.from},i=t.to instanceof Object?t.to.nodes:{id:t.to},t.from instanceof Object&&t.from.edges&&t.from.edges.forEach(function(t){var e=o(t);s.edges.push(e)}),D(e,i,function(e,i){var n=c(s,e.id,i.id,t.type,t.attr),r=o(n);s.edges.push(r)}),t.to instanceof Object&&t.to.edges&&t.to.edges.forEach(function(t){var e=o(t);s.edges.push(e)})})}return e.attr&&(s.options=e.attr),s}var S={NULL:0,DELIMITER:1,IDENTIFIER:2,UNKNOWN:3},C={"{":!0,"}":!0,"[":!0,"]":!0,";":!0,"=":!0,",":!0,"->":!0,"--":!0},T="",O=0,E="",k="",L=S.NULL,N=/[a-zA-Z_0-9.:#]/;e.parseDOT=i,e.DOTToGraph=M},function(t,e){function i(t,e){var i=[],s=[];this.options={edges:{inheritColor:!0},nodes:{allowedToMove:!1,parseColor:!1}},void 0!==e&&(this.options.nodes.allowedToMove=e.allowedToMove|!1,this.options.nodes.parseColor=e.parseColor|!1,this.options.edges.inheritColor=e.inheritColor|!0);for(var o=t.edges,n=t.nodes,r=0;r=s&&(s=864e5),e=new Date(e.valueOf()-.05*s),i=new Date(i.valueOf()+.05*s)}return{start:e,end:i}},s.prototype.setWindow=function(t,e,i){var s=i&&void 0!==i.animate?i.animate:!0;if(1==arguments.length){var o=arguments[0];this.range.setRange(o.start,o.end,s)}else this.range.setRange(t,e,s)},s.prototype.moveTo=function(t,e){var i=this.range.end-this.range.start,s=r.convert(t,"Date").valueOf(),o=s-i/2,n=s+i/2,a=e&&void 0!==e.animate?e.animate:!0;this.range.setRange(o,n,a)},s.prototype.getWindow=function(){var t=this.range.getRange();return{start:new Date(t.start),end:new Date(t.end)}},s.prototype.redraw=function(){var t=!1,e=this.options,i=this.props,s=this.dom;if(s){h.updateHiddenDates(this.body,this.options.hiddenDates),"top"==e.orientation?(r.addClassName(s.root,"top"),r.removeClassName(s.root,"bottom")):(r.removeClassName(s.root,"top"),r.addClassName(s.root,"bottom")),s.root.style.maxHeight=r.option.asSize(e.maxHeight,""),s.root.style.minHeight=r.option.asSize(e.minHeight,""),s.root.style.width=r.option.asSize(e.width,""),i.border.left=(s.centerContainer.offsetWidth-s.centerContainer.clientWidth)/2,i.border.right=i.border.left,i.border.top=(s.centerContainer.offsetHeight-s.centerContainer.clientHeight)/2,i.border.bottom=i.border.top;var o=s.root.offsetHeight-s.root.clientHeight,n=s.root.offsetWidth-s.root.clientWidth;0===s.centerContainer.clientHeight&&(i.border.left=i.border.top,i.border.right=i.border.left),0===s.root.clientHeight&&(n=o),i.center.height=s.center.offsetHeight,i.left.height=s.left.offsetHeight,i.right.height=s.right.offsetHeight,i.top.height=s.top.clientHeight||-i.border.top,i.bottom.height=s.bottom.clientHeight||-i.border.bottom;var a=Math.max(i.left.height,i.center.height,i.right.height),d=i.top.height+a+i.bottom.height+o+i.border.top+i.border.bottom;s.root.style.height=r.option.asSize(e.height,d+"px"),i.root.height=s.root.offsetHeight,i.background.height=i.root.height-o;var l=i.root.height-i.top.height-i.bottom.height-o;i.centerContainer.height=l,i.leftContainer.height=l,i.rightContainer.height=i.leftContainer.height,i.root.width=s.root.offsetWidth,i.background.width=i.root.width-n,i.left.width=s.leftContainer.clientWidth||-i.border.left,i.leftContainer.width=i.left.width,i.right.width=s.rightContainer.clientWidth||-i.border.right,i.rightContainer.width=i.right.width;var c=i.root.width-i.left.width-i.right.width-n;i.center.width=c,i.centerContainer.width=c,i.top.width=c,i.bottom.width=c,s.background.style.height=i.background.height+"px",s.backgroundVertical.style.height=i.background.height+"px",s.backgroundHorizontal.style.height=i.centerContainer.height+"px",s.centerContainer.style.height=i.centerContainer.height+"px",s.leftContainer.style.height=i.leftContainer.height+"px",s.rightContainer.style.height=i.rightContainer.height+"px",s.background.style.width=i.background.width+"px",s.backgroundVertical.style.width=i.centerContainer.width+"px",s.backgroundHorizontal.style.width=i.background.width+"px",s.centerContainer.style.width=i.center.width+"px",s.top.style.width=i.top.width+"px",s.bottom.style.width=i.bottom.width+"px",s.background.style.left="0",s.background.style.top="0",s.backgroundVertical.style.left=i.left.width+i.border.left+"px",s.backgroundVertical.style.top="0",s.backgroundHorizontal.style.left="0",s.backgroundHorizontal.style.top=i.top.height+"px",s.centerContainer.style.left=i.left.width+"px",s.centerContainer.style.top=i.top.height+"px",s.leftContainer.style.left="0",s.leftContainer.style.top=i.top.height+"px",s.rightContainer.style.left=i.left.width+i.center.width+"px",s.rightContainer.style.top=i.top.height+"px",s.top.style.left=i.left.width+"px",s.top.style.top="0",s.bottom.style.left=i.left.width+"px",s.bottom.style.top=i.top.height+i.centerContainer.height+"px",this._updateScrollTop();var p=this.props.scrollTop;"bottom"==e.orientation&&(p+=Math.max(this.props.centerContainer.height-this.props.center.height-this.props.border.top-this.props.border.bottom,0)),s.center.style.left="0",s.center.style.top=p+"px",s.left.style.left="0",s.left.style.top=p+"px",s.right.style.left="0",s.right.style.top=p+"px";var u=0==this.props.scrollTop?"hidden":"",m=this.props.scrollTop==this.props.scrollTopMin?"hidden":"";if(s.shadowTop.style.visibility=u,s.shadowBottom.style.visibility=m,s.shadowTopLeft.style.visibility=u,s.shadowBottomLeft.style.visibility=m,s.shadowTopRight.style.visibility=u,s.shadowBottomRight.style.visibility=m,this.components.forEach(function(e){t=e.redraw()||t}),t){var f=3;this.redrawCount0&&(this.props.scrollTop=0),this.props.scrollTops;s++){var o=s%2===0?1.3*i:.5*i;this.lineTo(t+o*Math.sin(2*s*Math.PI/10),e-o*Math.cos(2*s*Math.PI/10))}this.closePath()},CanvasRenderingContext2D.prototype.roundRect=function(t,e,i,s,o){var n=Math.PI/180;0>i-2*o&&(o=i/2),0>s-2*o&&(o=s/2),this.beginPath(),this.moveTo(t+o,e),this.lineTo(t+i-o,e),this.arc(t+i-o,e+o,o,270*n,360*n,!1),this.lineTo(t+i,e+s-o),this.arc(t+i-o,e+s-o,o,0,90*n,!1),this.lineTo(t+o,e+s),this.arc(t+o,e+s-o,o,90*n,180*n,!1),this.lineTo(t,e+o),this.arc(t+o,e+o,o,180*n,270*n,!1)},CanvasRenderingContext2D.prototype.ellipse=function(t,e,i,s){var o=.5522848,n=i/2*o,r=s/2*o,a=t+i,h=e+s,d=t+i/2,l=e+s/2;this.beginPath(),this.moveTo(t,l),this.bezierCurveTo(t,l-r,d-n,e,d,e),this.bezierCurveTo(d+n,e,a,l-r,a,l),this.bezierCurveTo(a,l+r,d+n,h,d,h),this.bezierCurveTo(d-n,h,t,l+r,t,l)},CanvasRenderingContext2D.prototype.database=function(t,e,i,s){var o=1/3,n=i,r=s*o,a=.5522848,h=n/2*a,d=r/2*a,l=t+n,c=e+r,p=t+n/2,u=e+r/2,m=e+(s-r/2),f=e+s;this.beginPath(),this.moveTo(l,u),this.bezierCurveTo(l,u+d,p+h,c,p,c),this.bezierCurveTo(p-h,c,t,u+d,t,u),this.bezierCurveTo(t,u-d,p-h,e,p,e),this.bezierCurveTo(p+h,e,l,u-d,l,u),this.lineTo(l,m),this.bezierCurveTo(l,m+d,p+h,f,p,f),this.bezierCurveTo(p-h,f,t,m+d,t,m),this.lineTo(t,u)},CanvasRenderingContext2D.prototype.arrow=function(t,e,i,s){var o=t-s*Math.cos(i),n=e-s*Math.sin(i),r=t-.9*s*Math.cos(i),a=e-.9*s*Math.sin(i),h=o+s/3*Math.cos(i+.5*Math.PI),d=n+s/3*Math.sin(i+.5*Math.PI),l=o+s/3*Math.cos(i-.5*Math.PI),c=n+s/3*Math.sin(i-.5*Math.PI);this.beginPath(),this.moveTo(t,e),this.lineTo(h,d),this.lineTo(r,a),this.lineTo(l,c),this.closePath()},CanvasRenderingContext2D.prototype.dashedLine=function(t,e,i,s,o){o||(o=[10,5]),0==p&&(p=.001);var n=o.length;this.moveTo(t,e);for(var r=i-t,a=s-e,h=a/r,d=Math.sqrt(r*r+a*a),l=0,c=!0;d>=.1;){var p=o[l++%n];p>d&&(p=d);var u=Math.sqrt(p*p/(1+h*h));0>r&&(u=-u),t+=u,e+=h*u,this[c?"lineTo":"moveTo"](t,e),d-=p,c=!c}})},function(t,e,i){function s(t,e){this.groupId=t,this.options=e}var o=i(2),n=i(53);s.prototype.getYRange=function(t){for(var e=t[0].y,i=t[0].y,s=0;st[s].y?t[s].y:e,i=i0){var r,a,h=Number(i.svg.style.height.replace("px",""));if(r=o.getSVGElement("path",i.svgElements,i.svg),r.setAttributeNS(null,"class",e.className),void 0!==e.style&&r.setAttributeNS(null,"style",e.style),a=1==e.options.catmullRom.enabled?s._catmullRom(t,e):s._linear(t),1==e.options.shaded.enabled){var d,l=o.getSVGElement("path",i.svgElements,i.svg);d="top"==e.options.shaded.orientation?"M"+t[0].x+",0 "+a+"L"+t[t.length-1].x+",0":"M"+t[0].x+","+h+" "+a+"L"+t[t.length-1].x+","+h,l.setAttributeNS(null,"class",e.className+" fill"),void 0!==e.options.shaded.style&&l.setAttributeNS(null,"style",e.options.shaded.style),l.setAttributeNS(null,"d",d)}r.setAttributeNS(null,"d","M"+a),1==e.options.drawPoints.enabled&&n.draw(t,e,i)}},s._catmullRomUniform=function(t){for(var e,i,s,o,n,r,a=Math.round(t[0].x)+","+Math.round(t[0].y)+" ",h=1/6,d=t.length,l=0;d-1>l;l++)e=0==l?t[0]:t[l-1],i=t[l],s=t[l+1],o=d>l+2?t[l+2]:s,n={x:(-e.x+6*i.x+s.x)*h,y:(-e.y+6*i.y+s.y)*h},r={x:(i.x+6*s.x-o.x)*h,y:(i.y+6*s.y-o.y)*h},a+="C"+n.x+","+n.y+" "+r.x+","+r.y+" "+s.x+","+s.y+" ";return a},s._catmullRom=function(t,e){var i=e.options.catmullRom.alpha;if(0==i||void 0===i)return this._catmullRomUniform(t);for(var s,o,n,r,a,h,d,l,c,p,u,m,f,g,v,y,b,_,x,w=Math.round(t[0].x)+","+Math.round(t[0].y)+" ",D=t.length,M=0;D-1>M;M++)s=0==M?t[0]:t[M-1],o=t[M],n=t[M+1],r=D>M+2?t[M+2]:n,d=Math.sqrt(Math.pow(s.x-o.x,2)+Math.pow(s.y-o.y,2)),l=Math.sqrt(Math.pow(o.x-n.x,2)+Math.pow(o.y-n.y,2)),c=Math.sqrt(Math.pow(n.x-r.x,2)+Math.pow(n.y-r.y,2)),g=Math.pow(c,i),y=Math.pow(c,2*i),v=Math.pow(l,i),b=Math.pow(l,2*i),x=Math.pow(d,i),_=Math.pow(d,2*i),p=2*_+3*x*v+b,u=2*y+3*g*v+b,m=3*x*(x+v),m>0&&(m=1/m),f=3*g*(g+v),f>0&&(f=1/f),a={x:(-b*s.x+p*o.x+_*n.x)*m,y:(-b*s.y+p*o.y+_*n.y)*m},h={x:(y*o.x+u*n.x-b*r.x)*f,y:(y*o.y+u*n.y-b*r.y)*f},0==a.x&&0==a.y&&(a=o),0==h.x&&0==h.y&&(h=n),w+="C"+a.x+","+a.y+" "+h.x+","+h.y+" "+n.x+","+n.y+" ";return w},s._linear=function(t){for(var e="",i=0;it[s].y?t[s].y:e,i=i0&&(n=Math.min(n,Math.abs(c[d-1].x-r))),a=s._getSafeDrawData(n,h,m);else{var g=d+(p[r].amount-p[r].resolved),v=d-(p[r].resolved+1);g0&&(n=Math.min(n,Math.abs(c[v].x-r))),a=s._getSafeDrawData(n,h,m),p[r].resolved+=1,"stack"==h.options.barChart.handleOverlap?(f=p[r].accumulated,p[r].accumulated+=h.zeroPosition-c[d].y):"sideBySide"==h.options.barChart.handleOverlap&&(a.width=a.width/p[r].amount,a.offset+=p[r].resolved*a.width-.5*a.width*(p[r].amount+1),"left"==h.options.barChart.align?a.offset-=.5*a.width:"right"==h.options.barChart.align&&(a.offset+=.5*a.width))}o.drawBar(c[d].x+a.offset,c[d].y-f,a.width,h.zeroPosition-c[d].y,h.className+" bar",i.svgElements,i.svg),1==h.options.drawPoints.enabled&&o.drawPoint(c[d].x+a.offset,c[d].y,h,i.svgElements,i.svg)}},s._getDataIntersections=function(t,e){for(var i,s=0;s0&&(i=Math.min(i,Math.abs(e[s-1].x-e[s].x))),0==i&&(void 0===t[e[s].x]&&(t[e[s].x]={amount:0,resolved:0,accumulated:0}),t[e[s].x].amount+=1)},s._getSafeDrawData=function(t,e,i){var s,o;return t0?(s=i>t?i:t,o=0,"left"==e.options.barChart.align?o-=.5*t:"right"==e.options.barChart.align&&(o+=.5*t)):(s=e.options.barChart.width,o=0,"left"==e.options.barChart.align?o-=.5*e.options.barChart.width:"right"==e.options.barChart.align&&(o+=.5*e.options.barChart.width)),{width:s,offset:o}},s.getStackedBarYRange=function(t,e,i,o,n){if(t.length>0){t.sort(function(t,e){return t.x==e.x?t.groupId-e.groupId:t.x-e.x});var r={};s._getDataIntersections(r,t),e[o]=s._getStackedBarYRange(r,t),e[o].yAxisOrientation=n,i.push(o)}},s._getStackedBarYRange=function(t,e){for(var i,s=e[0].y,o=e[0].y,n=0;ne[n].y?e[n].y:s,o=ot[r].accumulated?t[r].accumulated:s,o=ot[s].y?t[s].y:e,i=is;++s)i[s].apply(this,e)}return this},e.prototype.listeners=function(t){return this._callbacks=this._callbacks||{},this._callbacks[t]||[]},e.prototype.hasListeners=function(t){return!!this.listeners(t).length}},function(t,e){var i,s,o;!function(n,r){s=[],i=r,o="function"==typeof i?i.apply(e,s):i,!(void 0!==o&&(t.exports=o))}(this,function(){function t(t){var e,i=t&&t.preventDefault||!1,s={},o={keydown:{},keyup:{}},n={};for(e=97;122>=e;e++)n[String.fromCharCode(e)]={code:65+(e-97),shift:!1};for(e=65;90>=e;e++)n[String.fromCharCode(e)]={code:e,shift:!0};for(e=0;9>=e;e++)n[""+e]={code:48+e,shift:!1};for(e=1;12>=e;e++)n["F"+e]={code:111+e,shift:!1};for(e=0;9>=e;e++)n["num"+e]={code:96+e,shift:!1};n["num*"]={code:106,shift:!1},n["num+"]={code:107,shift:!1},n["num-"]={code:109,shift:!1},n["num/"]={code:111,shift:!1},n["num."]={code:110,shift:!1},n.left={code:37,shift:!1},n.up={code:38,shift:!1},n.right={code:39,shift:!1},n.down={code:40,shift:!1},n.space={code:32,shift:!1},n.enter={code:13,shift:!1},n.shift={code:16,shift:void 0},n.esc={code:27,shift:!1},n.backspace={code:8,shift:!1},n.tab={code:9,shift:!1},n.ctrl={code:17,shift:!1},n.alt={code:18,shift:!1},n["delete"]={code:46,shift:!1},n.pageup={code:33,shift:!1},n.pagedown={code:34,shift:!1},n["="]={code:187,shift:!1},n["-"]={code:189,shift:!1},n["]"]={code:221,shift:!1},n["["]={code:219,shift:!1};var r=function(t){h(t,"keydown")},a=function(t){h(t,"keyup")},h=function(t,e){if(void 0!==o[e][t.keyCode]){for(var s=o[e][t.keyCode],n=0;n0)for(i in He)s=He[i],o=e[s],"undefined"!=typeof o&&(t[s]=o);return t}function b(t){return 0>t?Math.ceil(t):Math.floor(t)}function _(t,e,i){for(var s=""+Math.abs(t),o=t>=0;s.lengths;s++)(i&&t[s]!==e[s]||!i&&L(t[s])!==L(e[s]))&&r++;return r+n}function O(t){if(t){var e=t.toLowerCase().replace(/(.)s$/,"$1");t=mi[t]||fi[e]||e}return t}function E(t){var e,i,s={};for(i in t)a(t,i)&&(e=O(i),e&&(s[e]=t[i]));return s}function k(t){var e,i;if(0===t.indexOf("week"))e=7,i="day";else{if(0!==t.indexOf("month"))return;e=12,i="month"}Me[t]=function(s,o){var r,a,h=Me._locale[t],d=[];if("number"==typeof s&&(o=s,s=n),a=function(t){var e=Me().utc().set(i,t);return h.call(Me._locale,e,s||"")},null!=o)return a(o);for(r=0;e>r;r++)d.push(a(r));return d}}function L(t){var e=+t,i=0;return 0!==e&&isFinite(e)&&(i=e>=0?Math.floor(e):Math.ceil(e)),i}function N(t,e){return new Date(Date.UTC(t,e+1,0)).getUTCDate()}function I(t,e,i){return pe(Me([t,11,31+e-i]),e,i).week}function z(t){return P(t)?366:365}function P(t){return t%4===0&&t%100!==0||t%400===0}function A(t){var e;t._a&&-2===t._pf.overflow&&(e=t._a[Ne]<0||t._a[Ne]>11?Ne:t._a[Ie]<1||t._a[Ie]>N(t._a[Le],t._a[Ne])?Ie:t._a[ze]<0||t._a[ze]>24||24===t._a[ze]&&(0!==t._a[Pe]||0!==t._a[Ae]||0!==t._a[Re])?ze:t._a[Pe]<0||t._a[Pe]>59?Pe:t._a[Ae]<0||t._a[Ae]>59?Ae:t._a[Re]<0||t._a[Re]>999?Re:-1,t._pf._overflowDayOfYear&&(Le>e||e>Ie)&&(e=Ie),t._pf.overflow=e)}function R(t){return null==t._isValid&&(t._isValid=!isNaN(t._d.getTime())&&t._pf.overflow<0&&!t._pf.empty&&!t._pf.invalidMonth&&!t._pf.nullInput&&!t._pf.invalidFormat&&!t._pf.userInvalidated,t._strict&&(t._isValid=t._isValid&&0===t._pf.charsLeftOver&&0===t._pf.unusedTokens.length&&t._pf.bigHour===n)),t._isValid}function F(t){return t?t.toLowerCase().replace("_","-"):t}function H(t){for(var e,i,s,o,n=0;n0;){if(s=Y(o.slice(0,e).join("-")))return s;if(i&&i.length>=e&&T(o,i,!0)>=e-1)break;e--}n++}return null}function Y(t){var e=null;if(!Fe[t]&&Ye)try{e=Me.locale(),!function(){var t=new Error('Cannot find module "./locale"');throw t.code="MODULE_NOT_FOUND",t}(),Me.locale(e)}catch(i){}return Fe[t]}function B(t,e){var i,s;return e._isUTC?(i=e.clone(),s=(Me.isMoment(t)||C(t)?+t:+Me(t))-+i,i._d.setTime(+i._d+s),Me.updateOffset(i,!1),i):Me(t).local()}function W(t){return t.match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"")}function G(t){var e,i,s=t.match(je);for(e=0,i=s.length;i>e;e++)s[e]=_i[s[e]]?_i[s[e]]:W(s[e]);return function(o){var n="";for(e=0;i>e;e++)n+=s[e]instanceof Function?s[e].call(o,t):s[e];return n}}function j(t,e){return t.isValid()?(e=V(e,t.localeData()),gi[e]||(gi[e]=G(e)),gi[e](t)):t.localeData().invalidDate()}function V(t,e){function i(t){return e.longDateFormat(t)||t}var s=5;for(Ve.lastIndex=0;s>=0&&Ve.test(t);)t=t.replace(Ve,i),Ve.lastIndex=0,s-=1;return t}function U(t,e){var i,s=e._strict;switch(t){case"Q":return ii;case"DDDD":return oi;case"YYYY":case"GGGG":case"gggg":return s?ni:qe;case"Y":case"G":case"g":return ai;case"YYYYYY":case"YYYYY":case"GGGGG":case"ggggg":return s?ri:Ze;case"S":if(s)return ii;case"SS":if(s)return si;case"SSS":if(s)return oi;case"DDD":return Xe;case"MMM":case"MMMM":case"dd":case"ddd":case"dddd":return Ke;case"a":case"A":return e._locale._meridiemParse;case"x":return ti;case"X":return ei;case"Z":case"ZZ":return $e;case"T":return Je;case"SSSS":return Qe;case"MM":case"DD":case"YY":case"GG":case"gg":case"HH":case"hh":case"mm":case"ss":case"ww":case"WW":return s?si:Ue;case"M":case"D":case"d":case"H":case"h":case"m":case"s":case"w":case"W":case"e":case"E":return Ue;case"Do":return s?e._locale._ordinalParse:e._locale._ordinalParseLenient;default:return i=new RegExp(ee(te(t.replace("\\","")),"i"))}}function X(t){t=t||"";var e=t.match($e)||[],i=e[e.length-1]||[],s=(i+"").match(pi)||["-",0,0],o=+(60*s[1])+L(s[2]);return"+"===s[0]?-o:o}function q(t,e,i){var s,o=i._a;switch(t){case"Q":null!=e&&(o[Ne]=3*(L(e)-1));break;case"M":case"MM":null!=e&&(o[Ne]=L(e)-1);break;case"MMM":case"MMMM":s=i._locale.monthsParse(e,t,i._strict),null!=s?o[Ne]=s:i._pf.invalidMonth=e;break;case"D":case"DD":null!=e&&(o[Ie]=L(e));break;case"Do":null!=e&&(o[Ie]=L(parseInt(e.match(/\d{1,2}/)[0],10)));break;case"DDD":case"DDDD":null!=e&&(i._dayOfYear=L(e));break;case"YY":o[Le]=Me.parseTwoDigitYear(e);break;case"YYYY":case"YYYYY":case"YYYYYY":o[Le]=L(e);break;case"a":case"A":i._isPm=i._locale.isPM(e);break;case"h":case"hh":i._pf.bigHour=!0;case"H":case"HH":o[ze]=L(e);break;case"m":case"mm":o[Pe]=L(e);break;case"s":case"ss":o[Ae]=L(e);break;case"S":case"SS":case"SSS":case"SSSS":o[Re]=L(1e3*("0."+e));break;case"x":i._d=new Date(L(e));break;case"X":i._d=new Date(1e3*parseFloat(e));break;case"Z":case"ZZ":i._useUTC=!0,i._tzm=X(e);break;case"dd":case"ddd":case"dddd":s=i._locale.weekdaysParse(e),null!=s?(i._w=i._w||{},i._w.d=s):i._pf.invalidWeekday=e;break;case"w":case"ww":case"W":case"WW":case"d":case"e":case"E":t=t.substr(0,1);case"gggg":case"GGGG":case"GGGGG":t=t.substr(0,2),e&&(i._w=i._w||{},i._w[t]=L(e));break;case"gg":case"GG":i._w=i._w||{},i._w[t]=Me.parseTwoDigitYear(e)}}function Z(t){var e,i,s,o,n,a,h;e=t._w,null!=e.GG||null!=e.W||null!=e.E?(n=1,a=4,i=r(e.GG,t._a[Le],pe(Me(),1,4).year),s=r(e.W,1),o=r(e.E,1)):(n=t._locale._week.dow,a=t._locale._week.doy,i=r(e.gg,t._a[Le],pe(Me(),n,a).year),s=r(e.w,1),null!=e.d?(o=e.d,n>o&&++s):o=null!=e.e?e.e+n:n),h=ue(i,s,o,a,n),t._a[Le]=h.year,t._dayOfYear=h.dayOfYear}function Q(t){var e,i,s,o,n=[];if(!t._d){for(s=$(t),t._w&&null==t._a[Ie]&&null==t._a[Ne]&&Z(t),t._dayOfYear&&(o=r(t._a[Le],s[Le]),t._dayOfYear>z(o)&&(t._pf._overflowDayOfYear=!0),i=he(o,0,t._dayOfYear),t._a[Ne]=i.getUTCMonth(),t._a[Ie]=i.getUTCDate()),e=0;3>e&&null==t._a[e];++e)t._a[e]=n[e]=s[e];for(;7>e;e++)t._a[e]=n[e]=null==t._a[e]?2===e?1:0:t._a[e];24===t._a[ze]&&0===t._a[Pe]&&0===t._a[Ae]&&0===t._a[Re]&&(t._nextDay=!0,t._a[ze]=0),t._d=(t._useUTC?he:ae).apply(null,n),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()+t._tzm),t._nextDay&&(t._a[ze]=24)}}function K(t){var e;t._d||(e=E(t._i),t._a=[e.year,e.month,e.day||e.date,e.hour,e.minute,e.second,e.millisecond],Q(t))}function $(t){var e=new Date;return t._useUTC?[e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()]:[e.getFullYear(),e.getMonth(),e.getDate()]}function J(t){if(t._f===Me.ISO_8601)return void se(t);t._a=[],t._pf.empty=!0;var e,i,s,o,r,a=""+t._i,h=a.length,d=0;for(s=V(t._f,t._locale).match(je)||[],e=0;e0&&t._pf.unusedInput.push(r),a=a.slice(a.indexOf(i)+i.length),d+=i.length),_i[o]?(i?t._pf.empty=!1:t._pf.unusedTokens.push(o),q(o,i,t)):t._strict&&!i&&t._pf.unusedTokens.push(o);t._pf.charsLeftOver=h-d,a.length>0&&t._pf.unusedInput.push(a),t._pf.bigHour===!0&&t._a[ze]<=12&&(t._pf.bigHour=n),t._isPm&&t._a[ze]<12&&(t._a[ze]+=12),t._isPm===!1&&12===t._a[ze]&&(t._a[ze]=0),Q(t),A(t)}function te(t){return t.replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(t,e,i,s,o){return e||i||s||o})}function ee(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function ie(t){var e,i,s,o,n;if(0===t._f.length)return t._pf.invalidFormat=!0,void(t._d=new Date(0/0));for(o=0;on)&&(s=n,i=e));v(t,i||e)}function se(t){var e,i,s=t._i,o=hi.exec(s);if(o){for(t._pf.iso=!0,e=0,i=li.length;i>e;e++)if(li[e][1].exec(s)){t._f=li[e][0]+(o[6]||" ");break}for(e=0,i=ci.length;i>e;e++)if(ci[e][1].exec(s)){t._f+=ci[e][0];break}s.match($e)&&(t._f+="Z"),J(t)}else t._isValid=!1}function oe(t){se(t),t._isValid===!1&&(delete t._isValid,Me.createFromInputFallback(t))}function ne(t,e){var i,s=[];for(i=0;it&&a.setFullYear(t),a}function he(t){var e=new Date(Date.UTC.apply(null,arguments));return 1970>t&&e.setUTCFullYear(t),e}function de(t,e){if("string"==typeof t)if(isNaN(t)){if(t=e.weekdaysParse(t),"number"!=typeof t)return null}else t=parseInt(t,10);return t}function le(t,e,i,s,o){return o.relativeTime(e||1,!!i,t,s)}function ce(t,e,i){var s=Me.duration(t).abs(),o=Ee(s.as("s")),n=Ee(s.as("m")),r=Ee(s.as("h")),a=Ee(s.as("d")),h=Ee(s.as("M")),d=Ee(s.as("y")),l=o0,l[4]=i,le.apply({},l)}function pe(t,e,i){var s,o=i-e,n=i-t.day();return n>o&&(n-=7),o-7>n&&(n+=7),s=Me(t).add(n,"d"),{week:Math.ceil(s.dayOfYear()/7),year:s.year()}}function ue(t,e,i,s,o){var n,r,a=he(t,0,1).getUTCDay();return a=0===a?7:a,i=null!=i?i:o,n=o-a+(a>s?7:0)-(o>a?7:0),r=7*(e-1)+(i-o)+n+1,{year:r>0?t:t-1,dayOfYear:r>0?r:z(t-1)+r}}function me(t){var e,i=t._i,s=t._f;return t._locale=t._locale||Me.localeData(t._l),null===i||s===n&&""===i?Me.invalid({nullInput:!0}):("string"==typeof i&&(t._i=i=t._locale.preparse(i)),Me.isMoment(i)?new f(i,!0):(s?S(s)?ie(t):J(t):re(t),e=new f(t),e._nextDay&&(e.add(1,"d"),e._nextDay=n),e))}function fe(t,e){var i,s;if(1===e.length&&S(e[0])&&(e=e[0]),!e.length)return Me();for(i=e[0],s=1;s=0?"+":"-";return e+_(Math.abs(t),6)},gg:function(){return _(this.weekYear()%100,2)},gggg:function(){return _(this.weekYear(),4)},ggggg:function(){return _(this.weekYear(),5)},GG:function(){return _(this.isoWeekYear()%100,2)},GGGG:function(){return _(this.isoWeekYear(),4)},GGGGG:function(){return _(this.isoWeekYear(),5)},e:function(){return this.weekday()},E:function(){return this.isoWeekday()},a:function(){return this.localeData().meridiem(this.hours(),this.minutes(),!0)},A:function(){return this.localeData().meridiem(this.hours(),this.minutes(),!1)},H:function(){return this.hours()},h:function(){return this.hours()%12||12},m:function(){return this.minutes()},s:function(){return this.seconds()},S:function(){return L(this.milliseconds()/100)},SS:function(){return _(L(this.milliseconds()/10),2)},SSS:function(){return _(this.milliseconds(),3)},SSSS:function(){return _(this.milliseconds(),3)},Z:function(){var t=-this.zone(),e="+";return 0>t&&(t=-t,e="-"),e+_(L(t/60),2)+":"+_(L(t)%60,2)},ZZ:function(){var t=-this.zone(),e="+";return 0>t&&(t=-t,e="-"),e+_(L(t/60),2)+_(L(t)%60,2)},z:function(){return this.zoneAbbr()},zz:function(){return this.zoneName()},x:function(){return this.valueOf()},X:function(){return this.unix()},Q:function(){return this.quarter()}},xi={},wi=["months","monthsShort","weekdays","weekdaysShort","weekdaysMin"];yi.length;)Ce=yi.pop(),_i[Ce+"o"]=u(_i[Ce],Ce);for(;bi.length;)Ce=bi.pop(),_i[Ce+Ce]=p(_i[Ce],2);_i.DDDD=p(_i.DDD,3),v(m.prototype,{set:function(t){var e,i;for(i in t)e=t[i],"function"==typeof e?this[i]=e:this["_"+i]=e;this._ordinalParseLenient=new RegExp(this._ordinalParse.source+"|"+/\d{1,2}/.source)},_months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),months:function(t){return this._months[t.month()]},_monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),monthsShort:function(t){return this._monthsShort[t.month()]},monthsParse:function(t,e,i){var s,o,n;for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),s=0;12>s;s++){if(o=Me.utc([2e3,s]),i&&!this._longMonthsParse[s]&&(this._longMonthsParse[s]=new RegExp("^"+this.months(o,"").replace(".","")+"$","i"),this._shortMonthsParse[s]=new RegExp("^"+this.monthsShort(o,"").replace(".","")+"$","i")),i||this._monthsParse[s]||(n="^"+this.months(o,"")+"|^"+this.monthsShort(o,""),this._monthsParse[s]=new RegExp(n.replace(".",""),"i")),i&&"MMMM"===e&&this._longMonthsParse[s].test(t))return s;if(i&&"MMM"===e&&this._shortMonthsParse[s].test(t))return s;if(!i&&this._monthsParse[s].test(t))return s}},_weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdays:function(t){return this._weekdays[t.day()]},_weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysShort:function(t){return this._weekdaysShort[t.day()]},_weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),weekdaysMin:function(t){return this._weekdaysMin[t.day()]},weekdaysParse:function(t){var e,i,s;for(this._weekdaysParse||(this._weekdaysParse=[]),e=0;7>e;e++)if(this._weekdaysParse[e]||(i=Me([2e3,1]).day(e),s="^"+this.weekdays(i,"")+"|^"+this.weekdaysShort(i,"")+"|^"+this.weekdaysMin(i,""),this._weekdaysParse[e]=new RegExp(s.replace(".",""),"i")),this._weekdaysParse[e].test(t))return e},_longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY LT",LLLL:"dddd, MMMM D, YYYY LT"},longDateFormat:function(t){var e=this._longDateFormat[t];return!e&&this._longDateFormat[t.toUpperCase()]&&(e=this._longDateFormat[t.toUpperCase()].replace(/MMMM|MM|DD|dddd/g,function(t){return t.slice(1)}),this._longDateFormat[t]=e),e},isPM:function(t){return"p"===(t+"").toLowerCase().charAt(0)},_meridiemParse:/[ap]\.?m?\.?/i,meridiem:function(t,e,i){return t>11?i?"pm":"PM":i?"am":"AM"},_calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},calendar:function(t,e,i){var s=this._calendar[t];return"function"==typeof s?s.apply(e,[i]):s},_relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},relativeTime:function(t,e,i,s){var o=this._relativeTime[i];return"function"==typeof o?o(t,e,i,s):o.replace(/%d/i,t)},pastFuture:function(t,e){var i=this._relativeTime[t>0?"future":"past"];return"function"==typeof i?i(e):i.replace(/%s/i,e)},ordinal:function(t){return this._ordinal.replace("%d",t)},_ordinal:"%d",_ordinalParse:/\d{1,2}/,preparse:function(t){return t},postformat:function(t){return t},week:function(t){return pe(t,this._week.dow,this._week.doy).week},_week:{dow:0,doy:6},_invalidDate:"Invalid date",invalidDate:function(){return this._invalidDate}}),Me=function(t,e,i,s){var o;return"boolean"==typeof i&&(s=i,i=n),o={},o._isAMomentObject=!0,o._i=t,o._f=e,o._l=i,o._strict=s,o._isUTC=!1,o._pf=h(),me(o)},Me.suppressDeprecationWarnings=!1,Me.createFromInputFallback=l("moment construction falls back to js Date. This is discouraged and will be removed in upcoming major release. Please refer to https://github.com/moment/moment/issues/1407 for more info.",function(t){t._d=new Date(t._i+(t._useUTC?" UTC":""))}),Me.min=function(){var t=[].slice.call(arguments,0);return fe("isBefore",t)},Me.max=function(){var t=[].slice.call(arguments,0);return fe("isAfter",t)},Me.utc=function(t,e,i,s){var o;return"boolean"==typeof i&&(s=i,i=n),o={},o._isAMomentObject=!0,o._useUTC=!0,o._isUTC=!0,o._l=i,o._i=t,o._f=e,o._strict=s,o._pf=h(),me(o).utc()},Me.unix=function(t){return Me(1e3*t)},Me.duration=function(t,e){var i,s,o,n,r=t,h=null;return Me.isDuration(t)?r={ms:t._milliseconds,d:t._days,M:t._months}:"number"==typeof t?(r={},e?r[e]=t:r.milliseconds=t):(h=We.exec(t))?(i="-"===h[1]?-1:1,r={y:0,d:L(h[Ie])*i,h:L(h[ze])*i,m:L(h[Pe])*i,s:L(h[Ae])*i,ms:L(h[Re])*i}):(h=Ge.exec(t))?(i="-"===h[1]?-1:1,o=function(t){var e=t&&parseFloat(t.replace(",","."));return(isNaN(e)?0:e)*i},r={y:o(h[2]),M:o(h[3]),d:o(h[4]),h:o(h[5]),m:o(h[6]),s:o(h[7]),w:o(h[8])}):"object"==typeof r&&("from"in r||"to"in r)&&(n=w(Me(r.from),Me(r.to)),r={},r.ms=n.milliseconds,r.M=n.months),s=new g(r),Me.isDuration(t)&&a(t,"_locale")&&(s._locale=t._locale),s},Me.version=Te,Me.defaultFormat=di,Me.ISO_8601=function(){},Me.momentProperties=He,Me.updateOffset=function(){},Me.relativeTimeThreshold=function(t,e){return vi[t]===n?!1:e===n?vi[t]:(vi[t]=e,!0)},Me.lang=l("moment.lang is deprecated. Use moment.locale instead.",function(t,e){return Me.locale(t,e)}),Me.locale=function(t,e){var i;return t&&(i="undefined"!=typeof e?Me.defineLocale(t,e):Me.localeData(t),i&&(Me.duration._locale=Me._locale=i)),Me._locale._abbr},Me.defineLocale=function(t,e){return null!==e?(e.abbr=t,Fe[t]||(Fe[t]=new m),Fe[t].set(e),Me.locale(t),Fe[t]):(delete Fe[t],null)},Me.langData=l("moment.langData is deprecated. Use moment.localeData instead.",function(t){return Me.localeData(t)}),Me.localeData=function(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return Me._locale;if(!S(t)){if(e=Y(t))return e;t=[t]}return H(t)},Me.isMoment=function(t){return t instanceof f||null!=t&&a(t,"_isAMomentObject")},Me.isDuration=function(t){return t instanceof g};for(Ce=wi.length-1;Ce>=0;--Ce)k(wi[Ce]);Me.normalizeUnits=function(t){return O(t)},Me.invalid=function(t){var e=Me.utc(0/0);return null!=t?v(e._pf,t):e._pf.userInvalidated=!0,e},Me.parseZone=function(){return Me.apply(null,arguments).parseZone()},Me.parseTwoDigitYear=function(t){return L(t)+(L(t)>68?1900:2e3)},v(Me.fn=f.prototype,{clone:function(){return Me(this)},valueOf:function(){return+this._d+6e4*(this._offset||0)},unix:function(){return Math.floor(+this/1e3)},toString:function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},toDate:function(){return this._offset?new Date(+this):this._d},toISOString:function(){var t=Me(this).utc();return 00:!1},parsingFlags:function(){return v({},this._pf)},invalidAt:function(){return this._pf.overflow},utc:function(t){return this.zone(0,t)},local:function(t){return this._isUTC&&(this.zone(0,t),this._isUTC=!1,t&&this.add(this._dateTzOffset(),"m")),this},format:function(t){var e=j(this,t||Me.defaultFormat);return this.localeData().postformat(e)},add:D(1,"add"),subtract:D(-1,"subtract"),diff:function(t,e,i){var s,o,n,r=B(t,this),a=6e4*(this.zone()-r.zone());return e=O(e),"year"===e||"month"===e?(s=432e5*(this.daysInMonth()+r.daysInMonth()),o=12*(this.year()-r.year())+(this.month()-r.month()),n=this-Me(this).startOf("month")-(r-Me(r).startOf("month")),n-=6e4*(this.zone()-Me(this).startOf("month").zone()-(r.zone()-Me(r).startOf("month").zone())),o+=n/s,"year"===e&&(o/=12)):(s=this-r,o="second"===e?s/1e3:"minute"===e?s/6e4:"hour"===e?s/36e5:"day"===e?(s-a)/864e5:"week"===e?(s-a)/6048e5:s),i?o:b(o)},from:function(t,e){return Me.duration({to:this,from:t}).locale(this.locale()).humanize(!e)},fromNow:function(t){return this.from(Me(),t)},calendar:function(t){var e=t||Me(),i=B(e,this).startOf("day"),s=this.diff(i,"days",!0),o=-6>s?"sameElse":-1>s?"lastWeek":0>s?"lastDay":1>s?"sameDay":2>s?"nextDay":7>s?"nextWeek":"sameElse";return this.format(this.localeData().calendar(o,this,Me(e)))},isLeapYear:function(){return P(this.year())},isDST:function(){return this.zone()+t):(i=Me.isMoment(t)?+t:+Me(t),i<+this.clone().startOf(e)) +},isBefore:function(t,e){var i;return e=O("undefined"!=typeof e?e:"millisecond"),"millisecond"===e?(t=Me.isMoment(t)?t:Me(t),+t>+this):(i=Me.isMoment(t)?+t:+Me(t),+this.clone().endOf(e)t?this:t}),max:l("moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548",function(t){return t=Me.apply(null,arguments),t>this?this:t}),zone:function(t,e){var i,s=this._offset||0;return null==t?this._isUTC?s:this._dateTzOffset():("string"==typeof t&&(t=X(t)),Math.abs(t)<16&&(t=60*t),!this._isUTC&&e&&(i=this._dateTzOffset()),this._offset=t,this._isUTC=!0,null!=i&&this.subtract(i,"m"),s!==t&&(!e||this._changeInProgress?M(this,Me.duration(s-t,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,Me.updateOffset(this,!0),this._changeInProgress=null)),this)},zoneAbbr:function(){return this._isUTC?"UTC":""},zoneName:function(){return this._isUTC?"Coordinated Universal Time":""},parseZone:function(){return this._tzm?this.zone(this._tzm):"string"==typeof this._i&&this.zone(this._i),this},hasAlignedHourOffset:function(t){return t=t?Me(t).zone():0,(this.zone()-t)%60===0},daysInMonth:function(){return N(this.year(),this.month())},dayOfYear:function(t){var e=Ee((Me(this).startOf("day")-Me(this).startOf("year"))/864e5)+1;return null==t?e:this.add(t-e,"d")},quarter:function(t){return null==t?Math.ceil((this.month()+1)/3):this.month(3*(t-1)+this.month()%3)},weekYear:function(t){var e=pe(this,this.localeData()._week.dow,this.localeData()._week.doy).year;return null==t?e:this.add(t-e,"y")},isoWeekYear:function(t){var e=pe(this,1,4).year;return null==t?e:this.add(t-e,"y")},week:function(t){var e=this.localeData().week(this);return null==t?e:this.add(7*(t-e),"d")},isoWeek:function(t){var e=pe(this,1,4).week;return null==t?e:this.add(7*(t-e),"d")},weekday:function(t){var e=(this.day()+7-this.localeData()._week.dow)%7;return null==t?e:this.add(t-e,"d")},isoWeekday:function(t){return null==t?this.day()||7:this.day(this.day()%7?t:t-7)},isoWeeksInYear:function(){return I(this.year(),1,4)},weeksInYear:function(){var t=this.localeData()._week;return I(this.year(),t.dow,t.doy)},get:function(t){return t=O(t),this[t]()},set:function(t,e){return t=O(t),"function"==typeof this[t]&&this[t](e),this},locale:function(t){var e;return t===n?this._locale._abbr:(e=Me.localeData(t),null!=e&&(this._locale=e),this)},lang:l("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(t){return t===n?this.localeData():this.locale(t)}),localeData:function(){return this._locale},_dateTzOffset:function(){return 15*Math.round(this._d.getTimezoneOffset()/15)}}),Me.fn.millisecond=Me.fn.milliseconds=be("Milliseconds",!1),Me.fn.second=Me.fn.seconds=be("Seconds",!1),Me.fn.minute=Me.fn.minutes=be("Minutes",!1),Me.fn.hour=Me.fn.hours=be("Hours",!0),Me.fn.date=be("Date",!0),Me.fn.dates=l("dates accessor is deprecated. Use date instead.",be("Date",!0)),Me.fn.year=be("FullYear",!0),Me.fn.years=l("years accessor is deprecated. Use year instead.",be("FullYear",!0)),Me.fn.days=Me.fn.day,Me.fn.months=Me.fn.month,Me.fn.weeks=Me.fn.week,Me.fn.isoWeeks=Me.fn.isoWeek,Me.fn.quarters=Me.fn.quarter,Me.fn.toJSON=Me.fn.toISOString,v(Me.duration.fn=g.prototype,{_bubble:function(){var t,e,i,s=this._milliseconds,o=this._days,n=this._months,r=this._data,a=0;r.milliseconds=s%1e3,t=b(s/1e3),r.seconds=t%60,e=b(t/60),r.minutes=e%60,i=b(e/60),r.hours=i%24,o+=b(i/24),a=b(_e(o)),o-=b(xe(a)),n+=b(o/30),o%=30,a+=b(n/12),n%=12,r.days=o,r.months=n,r.years=a},abs:function(){return this._milliseconds=Math.abs(this._milliseconds),this._days=Math.abs(this._days),this._months=Math.abs(this._months),this._data.milliseconds=Math.abs(this._data.milliseconds),this._data.seconds=Math.abs(this._data.seconds),this._data.minutes=Math.abs(this._data.minutes),this._data.hours=Math.abs(this._data.hours),this._data.months=Math.abs(this._data.months),this._data.years=Math.abs(this._data.years),this},weeks:function(){return b(this.days()/7)},valueOf:function(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*L(this._months/12)},humanize:function(t){var e=ce(this,!t,this.localeData());return t&&(e=this.localeData().pastFuture(+this,e)),this.localeData().postformat(e)},add:function(t,e){var i=Me.duration(t,e);return this._milliseconds+=i._milliseconds,this._days+=i._days,this._months+=i._months,this._bubble(),this},subtract:function(t,e){var i=Me.duration(t,e);return this._milliseconds-=i._milliseconds,this._days-=i._days,this._months-=i._months,this._bubble(),this},get:function(t){return t=O(t),this[t.toLowerCase()+"s"]()},as:function(t){var e,i;if(t=O(t),"month"===t||"year"===t)return e=this._days+this._milliseconds/864e5,i=this._months+12*_e(e),"month"===t?i:i/12;switch(e=this._days+Math.round(xe(this._months/12)),t){case"week":return e/7+this._milliseconds/6048e5;case"day":return e+this._milliseconds/864e5;case"hour":return 24*e+this._milliseconds/36e5;case"minute":return 24*e*60+this._milliseconds/6e4;case"second":return 24*e*60*60+this._milliseconds/1e3;case"millisecond":return Math.floor(24*e*60*60*1e3)+this._milliseconds;default:throw new Error("Unknown unit "+t)}},lang:Me.fn.lang,locale:Me.fn.locale,toIsoString:l("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",function(){return this.toISOString()}),toISOString:function(){var t=Math.abs(this.years()),e=Math.abs(this.months()),i=Math.abs(this.days()),s=Math.abs(this.hours()),o=Math.abs(this.minutes()),n=Math.abs(this.seconds()+this.milliseconds()/1e3);return this.asSeconds()?(this.asSeconds()<0?"-":"")+"P"+(t?t+"Y":"")+(e?e+"M":"")+(i?i+"D":"")+(s||o||n?"T":"")+(s?s+"H":"")+(o?o+"M":"")+(n?n+"S":""):"P0D"},localeData:function(){return this._locale}}),Me.duration.fn.toString=Me.duration.fn.toISOString;for(Ce in ui)a(ui,Ce)&&we(Ce.toLowerCase());Me.duration.fn.asMilliseconds=function(){return this.as("ms")},Me.duration.fn.asSeconds=function(){return this.as("s")},Me.duration.fn.asMinutes=function(){return this.as("m")},Me.duration.fn.asHours=function(){return this.as("h")},Me.duration.fn.asDays=function(){return this.as("d")},Me.duration.fn.asWeeks=function(){return this.as("weeks")},Me.duration.fn.asMonths=function(){return this.as("M")},Me.duration.fn.asYears=function(){return this.as("y")},Me.locale("en",{ordinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10,i=1===L(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th";return t+i}}),Ye?o.exports=Me:(s=function(t,e,i){return i.config&&i.config()&&i.config().noGlobal===!0&&(Oe.moment=Se),Me}.call(e,i,e,o),!(s!==n&&(o.exports=s)),De(!0))}).call(this)}).call(e,function(){return this}(),i(71)(t))},function(t,e,i){var s;!function(o,n){function r(){a.READY||(w.determineEventTypes(),x.each(a.gestures,function(t){M.register(t)}),w.onTouch(a.DOCUMENT,v,M.detect),w.onTouch(a.DOCUMENT,y,M.detect),a.READY=!0)}var a=function S(t,e){return new S.Instance(t,e||{})};a.VERSION="1.1.3",a.defaults={behavior:{userSelect:"none",touchAction:"pan-y",touchCallout:"none",contentZooming:"none",userDrag:"none",tapHighlightColor:"rgba(0,0,0,0)"}},a.DOCUMENT=document,a.HAS_POINTEREVENTS=navigator.pointerEnabled||navigator.msPointerEnabled,a.HAS_TOUCHEVENTS="ontouchstart"in o,a.IS_MOBILE=/mobile|tablet|ip(ad|hone|od)|android|silk/i.test(navigator.userAgent),a.NO_MOUSEEVENTS=a.HAS_TOUCHEVENTS&&a.IS_MOBILE||a.HAS_POINTEREVENTS,a.CALCULATE_INTERVAL=25;var h={},d=a.DIRECTION_DOWN="down",l=a.DIRECTION_LEFT="left",c=a.DIRECTION_UP="up",p=a.DIRECTION_RIGHT="right",u=a.POINTER_MOUSE="mouse",m=a.POINTER_TOUCH="touch",f=a.POINTER_PEN="pen",g=a.EVENT_START="start",v=a.EVENT_MOVE="move",y=a.EVENT_END="end",b=a.EVENT_RELEASE="release",_=a.EVENT_TOUCH="touch";a.READY=!1,a.plugins=a.plugins||{},a.gestures=a.gestures||{};var x=a.utils={extend:function(t,e,i){for(var s in e)!e.hasOwnProperty(s)||t[s]!==n&&i||(t[s]=e[s]);return t},on:function(t,e,i){t.addEventListener(e,i,!1)},off:function(t,e,i){t.removeEventListener(e,i,!1)},each:function(t,e,i){var s,o;if("forEach"in t)t.forEach(e,i);else if(t.length!==n){for(s=0,o=t.length;o>s;s++)if(e.call(i,t[s],s,t)===!1)return}else for(s in t)if(t.hasOwnProperty(s)&&e.call(i,t[s],s,t)===!1)return},inStr:function(t,e){return t.indexOf(e)>-1},inArray:function(t,e){if(t.indexOf){var i=t.indexOf(e);return-1===i?!1:i}for(var s=0,o=t.length;o>s;s++)if(t[s]===e)return s;return!1},toArray:function(t){return Array.prototype.slice.call(t,0)},hasParent:function(t,e){for(;t;){if(t==e)return!0;t=t.parentNode}return!1},getCenter:function(t){var e=[],i=[],s=[],o=[],n=Math.min,r=Math.max;return 1===t.length?{pageX:t[0].pageX,pageY:t[0].pageY,clientX:t[0].clientX,clientY:t[0].clientY}:(x.each(t,function(t){e.push(t.pageX),i.push(t.pageY),s.push(t.clientX),o.push(t.clientY)}),{pageX:(n.apply(Math,e)+r.apply(Math,e))/2,pageY:(n.apply(Math,i)+r.apply(Math,i))/2,clientX:(n.apply(Math,s)+r.apply(Math,s))/2,clientY:(n.apply(Math,o)+r.apply(Math,o))/2})},getVelocity:function(t,e,i){return{x:Math.abs(e/t)||0,y:Math.abs(i/t)||0}},getAngle:function(t,e){var i=e.clientX-t.clientX,s=e.clientY-t.clientY;return 180*Math.atan2(s,i)/Math.PI},getDirection:function(t,e){var i=Math.abs(t.clientX-e.clientX),s=Math.abs(t.clientY-e.clientY);return i>=s?t.clientX-e.clientX>0?l:p:t.clientY-e.clientY>0?c:d},getDistance:function(t,e){var i=e.clientX-t.clientX,s=e.clientY-t.clientY;return Math.sqrt(i*i+s*s)},getScale:function(t,e){return t.length>=2&&e.length>=2?this.getDistance(e[0],e[1])/this.getDistance(t[0],t[1]):1},getRotation:function(t,e){return t.length>=2&&e.length>=2?this.getAngle(e[1],e[0])-this.getAngle(t[1],t[0]):0},isVertical:function(t){return t==c||t==d},setPrefixedCss:function(t,e,i,s){var o=["","Webkit","Moz","O","ms"];e=x.toCamelCase(e);for(var n=0;n0&&this.started&&(r=v),this.started=!0;var d=this.collectEventData(i,r,o,t);return e!=y&&s.call(M,d),a&&(d.changedLength=h,d.eventType=a,s.call(M,d),d.eventType=r,delete d.changedLength),r==y&&(s.call(M,d),this.started=!1),r},determineEventTypes:function(){var t;return t=a.HAS_POINTEREVENTS?o.PointerEvent?["pointerdown","pointermove","pointerup pointercancel lostpointercapture"]:["MSPointerDown","MSPointerMove","MSPointerUp MSPointerCancel MSLostPointerCapture"]:a.NO_MOUSEEVENTS?["touchstart","touchmove","touchend touchcancel"]:["touchstart mousedown","touchmove mousemove","touchend touchcancel mouseup"],h[g]=t[0],h[v]=t[1],h[y]=t[2],h},getTouchList:function(t,e){if(a.HAS_POINTEREVENTS)return D.getTouchList();if(t.touches){if(e==v)return t.touches;var i=[],s=[].concat(x.toArray(t.touches),x.toArray(t.changedTouches)),o=[];return x.each(s,function(t){x.inArray(i,t.identifier)===!1&&o.push(t),i.push(t.identifier)}),o}return t.identifier=1,[t]},collectEventData:function(t,e,i,s){var o=m;return x.inStr(s.type,"mouse")||D.matchType(u,s)?o=u:D.matchType(f,s)&&(o=f),{center:x.getCenter(i),timeStamp:Date.now(),target:s.target,touches:i,eventType:e,pointerType:o,srcEvent:s,preventDefault:function(){var t=this.srcEvent;t.preventManipulation&&t.preventManipulation(),t.preventDefault&&t.preventDefault()},stopPropagation:function(){this.srcEvent.stopPropagation()},stopDetect:function(){return M.stopDetect()}}}},D=a.PointerEvent={pointers:{},getTouchList:function(){var t=[];return x.each(this.pointers,function(e){t.push(e)}),t},updatePointer:function(t,e){t==y||t!=y&&1!==e.buttons?delete this.pointers[e.pointerId]:(e.identifier=e.pointerId,this.pointers[e.pointerId]=e)},matchType:function(t,e){if(!e.pointerType)return!1;var i=e.pointerType,s={};return s[u]=i===(e.MSPOINTER_TYPE_MOUSE||u),s[m]=i===(e.MSPOINTER_TYPE_TOUCH||m),s[f]=i===(e.MSPOINTER_TYPE_PEN||f),s[t]},reset:function(){this.pointers={}}},M=a.detection={gestures:[],current:null,previous:null,stopped:!1,startDetect:function(t,e){this.current||(this.stopped=!1,this.current={inst:t,startEvent:x.extend({},e),lastEvent:!1,lastCalcEvent:!1,futureCalcEvent:!1,lastCalcData:{},name:""},this.detect(e))},detect:function(t){if(this.current&&!this.stopped){t=this.extendEventData(t);var e=this.current.inst,i=e.options;return x.each(this.gestures,function(s){!this.stopped&&e.enabled&&i[s.name]&&s.handler.call(s,t,e)},this),this.current&&(this.current.lastEvent=t),t.eventType==y&&this.stopDetect(),t}},stopDetect:function(){this.previous=x.extend({},this.current),this.current=null,this.stopped=!0},getCalculatedData:function(t,e,i,s,o){var n=this.current,r=!1,h=n.lastCalcEvent,d=n.lastCalcData;h&&t.timeStamp-h.timeStamp>a.CALCULATE_INTERVAL&&(e=h.center,i=t.timeStamp-h.timeStamp,s=t.center.clientX-h.center.clientX,o=t.center.clientY-h.center.clientY,r=!0),(t.eventType==_||t.eventType==b)&&(n.futureCalcEvent=t),(!n.lastCalcEvent||r)&&(d.velocity=x.getVelocity(i,s,o),d.angle=x.getAngle(e,t.center),d.direction=x.getDirection(e,t.center),n.lastCalcEvent=n.futureCalcEvent||t,n.futureCalcEvent=t),t.velocityX=d.velocity.x,t.velocityY=d.velocity.y,t.interimAngle=d.angle,t.interimDirection=d.direction},extendEventData:function(t){var e=this.current,i=e.startEvent,s=e.lastEvent||i;(t.eventType==_||t.eventType==b)&&(i.touches=[],x.each(t.touches,function(t){i.touches.push({clientX:t.clientX,clientY:t.clientY})}));var o=t.timeStamp-i.timeStamp,n=t.center.clientX-i.center.clientX,r=t.center.clientY-i.center.clientY;return this.getCalculatedData(t,s.center,o,n,r),x.extend(t,{startEvent:i,deltaTime:o,deltaX:n,deltaY:r,distance:x.getDistance(i.center,t.center),angle:x.getAngle(i.center,t.center),direction:x.getDirection(i.center,t.center),scale:x.getScale(i.touches,t.touches),rotation:x.getRotation(i.touches,t.touches)}),t},register:function(t){var e=t.defaults||{};return e[t.name]===n&&(e[t.name]=!0),x.extend(a.defaults,e,!0),t.index=t.index||1e3,this.gestures.push(t),this.gestures.sort(function(t,e){return t.indexe.index?1:0}),this.gestures}};a.Instance=function(t,e){var i=this;r(),this.element=t,this.enabled=!0,x.each(e,function(t,i){delete e[i],e[x.toCamelCase(i)]=t}),this.options=x.extend(x.extend({},a.defaults),e||{}),this.options.behavior&&x.toggleBehavior(this.element,this.options.behavior,!0),this.eventStartHandler=w.onTouch(t,g,function(t){i.enabled&&t.eventType==g?M.startDetect(i,t):t.eventType==_&&M.detect(t)}),this.eventHandlers=[]},a.Instance.prototype={on:function(t,e){var i=this;return w.on(i.element,t,e,function(t){i.eventHandlers.push({gesture:t,handler:e})}),i},off:function(t,e){var i=this;return w.off(i.element,t,e,function(t){var s=x.inArray({gesture:t,handler:e});s!==!1&&i.eventHandlers.splice(s,1)}),i},trigger:function(t,e){e||(e={});var i=a.DOCUMENT.createEvent("Event");i.initEvent(t,!0,!0),i.gesture=e;var s=this.element;return x.hasParent(e.target,s)&&(s=e.target),s.dispatchEvent(i),this},enable:function(t){return this.enabled=t,this},dispose:function(){var t,e;for(x.toggleBehavior(this.element,this.options.behavior,!1),t=-1;e=this.eventHandlers[++t];)x.off(this.element,e.gesture,e.handler);return this.eventHandlers=[],w.off(this.element,h[g],this.eventStartHandler),null}},function(t){function e(e,s){var o=M.current;if(!(s.options.dragMaxTouches>0&&e.touches.length>s.options.dragMaxTouches))switch(e.eventType){case g:i=!1;break;case v:if(e.distance0)){var r=Math.abs(s.options.dragMinDistance/e.distance);n.pageX+=e.deltaX*r,n.pageY+=e.deltaY*r,n.clientX+=e.deltaX*r,n.clientY+=e.deltaY*r,e=M.extendEventData(e)}(o.lastEvent.dragLockToAxis||s.options.dragLockToAxis&&s.options.dragLockMinDistance<=e.distance)&&(e.dragLockToAxis=!0);var a=o.lastEvent.direction;e.dragLockToAxis&&a!==e.direction&&(e.direction=x.isVertical(a)?e.deltaY<0?c:d:e.deltaX<0?l:p),i||(s.trigger(t+"start",e),i=!0),s.trigger(t,e),s.trigger(t+e.direction,e);var h=x.isVertical(e.direction);(s.options.dragBlockVertical&&h||s.options.dragBlockHorizontal&&!h)&&e.preventDefault();break;case b:i&&e.changedLength<=s.options.dragMaxTouches&&(s.trigger(t+"end",e),i=!1);break;case y:i=!1}}var i=!1;a.gestures.Drag={name:t,index:50,handler:e,defaults:{dragMinDistance:10,dragDistanceCorrection:!0,dragMaxTouches:1,dragBlockHorizontal:!1,dragBlockVertical:!1,dragLockToAxis:!1,dragLockMinDistance:25}}}("drag"),a.gestures.Gesture={name:"gesture",index:1337,handler:function(t,e){e.trigger(this.name,t)}},function(t){function e(e,s){var o=s.options,n=M.current;switch(e.eventType){case g:clearTimeout(i),n.name=t,i=setTimeout(function(){n&&n.name==t&&s.trigger(t,e)},o.holdTimeout);break;case v:e.distance>o.holdThreshold&&clearTimeout(i);break;case b:clearTimeout(i)}}var i;a.gestures.Hold={name:t,index:10,defaults:{holdTimeout:500,holdThreshold:2},handler:e}}("hold"),a.gestures.Release={name:"release",index:1/0,handler:function(t,e){t.eventType==b&&e.trigger(this.name,t)}},a.gestures.Swipe={name:"swipe",index:40,defaults:{swipeMinTouches:1,swipeMaxTouches:1,swipeVelocityX:.6,swipeVelocityY:.6},handler:function(t,e){if(t.eventType==b){var i=t.touches.length,s=e.options;if(is.swipeMaxTouches)return;(t.velocityX>s.swipeVelocityX||t.velocityY>s.swipeVelocityY)&&(e.trigger(this.name,t),e.trigger(this.name+t.direction,t))}}},function(t){function e(e,s){var o,n,r=s.options,a=M.current,h=M.previous;switch(e.eventType){case g:i=!1;break;case v:i=i||e.distance>r.tapMaxDistance;break;case y:!x.inStr(e.srcEvent.type,"cancel")&&e.deltaTimes.options.transformMinRotation&&s.trigger("rotate",e),o>s.options.transformMinScale&&(s.trigger("pinch",e),s.trigger("pinch"+(e.scale<1?"in":"out"),e));break;case b:i&&e.changedLength<2&&(s.trigger(t+"end",e),i=!1)}}var i=!1;a.gestures.Transform={name:t,index:45,defaults:{transformMinScale:.01,transformMinRotation:1},handler:e}}("transform"),s=function(){return a}.call(e,i,e,t),!(s!==n&&(t.exports=s))}(window)},function(t,e){e.startWithClustering=function(){this.clusterToFit(this.constants.clustering.initialMaxNodes,!0),this.updateLabels(),this.stabilize&&this._stabilize(),this.start()},e.clusterToFit=function(t,e){for(var i=this.nodeIndices.length,s=50,o=0;i>t&&s>o;)o%3==0?(this.forceAggregateHubs(!0),this.normalizeClusterLevels()):this.increaseClusterLevel(),i=this.nodeIndices.length,o+=1;o>0&&1==e&&this.repositionNodes(),this._updateCalculationNodes()},e.openCluster=function(t){var e=this.moving;if(t.clusterSize>this.constants.clustering.sectorThreshold&&this._nodeInActiveArea(t)&&("default"!=this._sector()||1!=this.nodeIndices.length)){this._addSector(t);for(var i=0;this.nodeIndices.lengthi;)this.decreaseClusterLevel(),i+=1}else this._expandClusterNode(t,!1,!0),this._updateNodeIndexList(),this._updateDynamicEdges(),this._updateCalculationNodes(),this.updateLabels();this.moving!=e&&this.start()},e.updateClustersDefault=function(){1==this.constants.clustering.enabled&&this.updateClusters(0,!1,!1)},e.increaseClusterLevel=function(){this.updateClusters(-1,!1,!0)},e.decreaseClusterLevel=function(){this.updateClusters(1,!1,!0)},e.updateClusters=function(t,e,i,s){var o=this.moving,n=this.nodeIndices.length;this.previousScale>this.scale&&0==t&&this._collapseSector(),this.previousScale>this.scale||-1==t?this._formClusters(i):(this.previousScalethis.scale||-1==t)&&(this._aggregateHubs(i),this._updateNodeIndexList()),(this.previousScale>this.scale||-1==t)&&(this.handleChains(),this._updateNodeIndexList()),this.previousScale=this.scale,this._updateDynamicEdges(),this.updateLabels(),this.nodeIndices.lengththis.constants.clustering.chainThreshold&&this._reduceAmountOfChains(1-this.constants.clustering.chainThreshold/t)},e._aggregateHubs=function(t){this._getHubSize(),this._formClustersByHub(t,!1)},e.forceAggregateHubs=function(t){var e=this.moving,i=this.nodeIndices.length;this._aggregateHubs(!0),this._updateNodeIndexList(),this._updateDynamicEdges(),this.updateLabels(),this.nodeIndices.length!=i&&(this.clusterSession+=1),(0==t||void 0===t)&&this.moving!=e&&this.start()},e._openClustersBySize=function(){for(var t in this.nodes)if(this.nodes.hasOwnProperty(t)){var e=this.nodes[t];1==e.inView()&&(e.width*this.scale>this.constants.clustering.screenSizeThreshold*this.frame.canvas.clientWidth||e.height*this.scale>this.constants.clustering.screenSizeThreshold*this.frame.canvas.clientHeight)&&this.openCluster(e)}},e._openClusters=function(t,e){for(var i=0;i1&&(t.clusterSizei)){var r=n.from,a=n.to;n.to.options.mass>n.from.options.mass&&(r=n.to,a=n.from),1==a.dynamicEdgesLength?this._addToCluster(r,a,!1):1==r.dynamicEdgesLength&&this._addToCluster(a,r,!1)}}},e._forceClustersByZoom=function(){for(var t in this.nodes)if(this.nodes.hasOwnProperty(t)){var e=this.nodes[t];if(1==e.dynamicEdgesLength&&0!=e.dynamicEdges.length){var i=e.dynamicEdges[0],s=i.toId==e.id?this.nodes[i.fromId]:this.nodes[i.toId];e.id!=s.id&&(s.options.mass>e.options.mass?this._addToCluster(s,e,!0):this._addToCluster(e,s,!0))}}},e._clusterToSmallestNeighbour=function(t){for(var e=-1,i=null,s=0;so.clusterSessions.length&&(e=o.clusterSessions.length,i=o)}null!=o&&void 0!==this.nodes[o.id]&&this._addToCluster(o,t,!0)},e._formClustersByHub=function(t,e){for(var i in this.nodes)this.nodes.hasOwnProperty(i)&&this._formClusterFromHub(this.nodes[i],t,e)},e._formClusterFromHub=function(t,e,i,s){if(void 0===s&&(s=0),t.dynamicEdgesLength>=this.hubThreshold&&0==i||t.dynamicEdgesLength==this.hubThreshold&&1==i){for(var o,n,r,a=this.constants.clustering.clusterEdgeThreshold/this.scale,h=!1,d=[],l=t.dynamicEdges.length,c=0;l>c;c++)d.push(t.dynamicEdges[c].id);if(0==e)for(h=!1,c=0;l>c;c++){var p=this.edges[d[c]];if(void 0!==p&&p.connected&&p.toId!=p.fromId&&(o=p.to.x-p.from.x,n=p.to.y-p.from.y,r=Math.sqrt(o*o+n*n),a>r)){h=!0;break}}if(!e&&h||e)for(c=0;l>c;c++)if(p=this.edges[d[c]],void 0!==p){var u=this.nodes[p.fromId==t.id?p.toId:p.fromId];u.dynamicEdges.length<=this.hubThreshold+s&&u.id!=t.id&&this._addToCluster(t,u,e)}}},e._addToCluster=function(t,e,i){t.containedNodes[e.id]=e;for(var s=0;s1)for(var s=0;s1&&(e.label="[".concat(String(e.clusterSize),"]"))}for(t in this.nodes)this.nodes.hasOwnProperty(t)&&(e=this.nodes[t],1==e.clusterSize&&(e.label=void 0!==e.originalLabel?e.originalLabel:String(e.id)))},e.normalizeClusterLevels=function(){var t,e=0,i=1e9,s=0;for(t in this.nodes)this.nodes.hasOwnProperty(t)&&(s=this.nodes[t].clusterSessions.length,s>e&&(e=s),i>s&&(i=s));if(e-i>this.constants.clustering.clusterLevelDifference){var o=this.nodeIndices.length,n=e-this.constants.clustering.clusterLevelDifference;for(t in this.nodes)this.nodes.hasOwnProperty(t)&&this.nodes[t].clusterSessions.lengths&&(s=n.dynamicEdgesLength),t+=n.dynamicEdgesLength,e+=Math.pow(n.dynamicEdgesLength,2),i+=1}t/=i,e/=i;var r=e-Math.pow(t,2),a=Math.sqrt(r);this.hubThreshold=Math.floor(t+2*a),this.hubThreshold>s&&(this.hubThreshold=s)},e._reduceAmountOfChains=function(t){this.hubThreshold=2;var e=Math.floor(this.nodeIndices.length*t);for(var i in this.nodes)this.nodes.hasOwnProperty(i)&&2==this.nodes[i].dynamicEdgesLength&&this.nodes[i].dynamicEdges.length>=2&&e>0&&(this._formClusterFromHub(this.nodes[i],!0,!0,1),e-=1) +},e._getChainFraction=function(){var t=0,e=0;for(var i in this.nodes)this.nodes.hasOwnProperty(i)&&(2==this.nodes[i].dynamicEdgesLength&&this.nodes[i].dynamicEdges.length>=2&&(t+=1),e+=1);return t/e}},function(t,e,i){var s=i(1),o=i(40);e._putDataInSector=function(){this.sectors.active[this._sector()].nodes=this.nodes,this.sectors.active[this._sector()].edges=this.edges,this.sectors.active[this._sector()].nodeIndices=this.nodeIndices},e._switchToSector=function(t,e){void 0===e||"active"==e?this._switchToActiveSector(t):this._switchToFrozenSector(t)},e._switchToActiveSector=function(t){this.nodeIndices=this.sectors.active[t].nodeIndices,this.nodes=this.sectors.active[t].nodes,this.edges=this.sectors.active[t].edges},e._switchToSupportSector=function(){this.nodeIndices=this.sectors.support.nodeIndices,this.nodes=this.sectors.support.nodes,this.edges=this.sectors.support.edges},e._switchToFrozenSector=function(t){this.nodeIndices=this.sectors.frozen[t].nodeIndices,this.nodes=this.sectors.frozen[t].nodes,this.edges=this.sectors.frozen[t].edges},e._loadLatestSector=function(){this._switchToSector(this._sector())},e._sector=function(){return this.activeSector[this.activeSector.length-1]},e._previousSector=function(){if(this.activeSector.length>1)return this.activeSector[this.activeSector.length-2];throw new TypeError("there are not enough sectors in the this.activeSector array.")},e._setActiveSector=function(t){this.activeSector.push(t)},e._forgetLastSector=function(){this.activeSector.pop()},e._createNewSector=function(t){this.sectors.active[t]={nodes:{},edges:{},nodeIndices:[],formationScale:this.scale,drawingNode:void 0},this.sectors.active[t].drawingNode=new o({id:t,color:{background:"#eaefef",border:"495c5e"}},{},{},this.constants),this.sectors.active[t].drawingNode.clusterSize=2},e._deleteActiveSector=function(t){delete this.sectors.active[t]},e._deleteFrozenSector=function(t){delete this.sectors.frozen[t]},e._freezeSector=function(t){this.sectors.frozen[t]=this.sectors.active[t],this._deleteActiveSector(t)},e._activateSector=function(t){this.sectors.active[t]=this.sectors.frozen[t],this._deleteFrozenSector(t)},e._mergeThisWithFrozen=function(t){for(var e in this.nodes)this.nodes.hasOwnProperty(e)&&(this.sectors.frozen[t].nodes[e]=this.nodes[e]);for(var i in this.edges)this.edges.hasOwnProperty(i)&&(this.sectors.frozen[t].edges[i]=this.edges[i]);for(var s=0;s1?this[t](o[0],o[1]):this[t](e))}return this._loadLatestSector(),i},e._doInSupportSector=function(t,e){var i=!1;if(void 0===e)this._switchToSupportSector(),i=this[t]();else{this._switchToSupportSector();var s=Array.prototype.splice.call(arguments,1);i=s.length>1?this[t](s[0],s[1]):this[t](e)}return this._loadLatestSector(),i},e._doInAllFrozenSectors=function(t,e){if(void 0===e)for(var i in this.sectors.frozen)this.sectors.frozen.hasOwnProperty(i)&&(this._switchToFrozenSector(i),this[t]());else for(var i in this.sectors.frozen)if(this.sectors.frozen.hasOwnProperty(i)){this._switchToFrozenSector(i);var s=Array.prototype.splice.call(arguments,1);s.length>1?this[t](s[0],s[1]):this[t](e)}this._loadLatestSector()},e._doInAllSectors=function(t,e){var i=Array.prototype.splice.call(arguments,1);void 0===e?(this._doInAllActiveSectors(t),this._doInAllFrozenSectors(t)):i.length>1?(this._doInAllActiveSectors(t,i[0],i[1]),this._doInAllFrozenSectors(t,i[0],i[1])):(this._doInAllActiveSectors(t,e),this._doInAllFrozenSectors(t,e))},e._clearNodeIndexList=function(){var t=this._sector();this.sectors.active[t].nodeIndices=[],this.nodeIndices=this.sectors.active[t].nodeIndices},e._drawSectorNodes=function(t,e){var i,s=1e9,o=-1e9,n=1e9,r=-1e9;for(var a in this.sectors[e])if(this.sectors[e].hasOwnProperty(a)&&void 0!==this.sectors[e][a].drawingNode){this._switchToSector(a,e),s=1e9,o=-1e9,n=1e9,r=-1e9;for(var h in this.nodes)this.nodes.hasOwnProperty(h)&&(i=this.nodes[h],i.resize(t),n>i.x-.5*i.width&&(n=i.x-.5*i.width),ri.y-.5*i.height&&(s=i.y-.5*i.height),o0?this.nodes[i[i.length-1]]:null},e._getEdgesOverlappingWith=function(t,e){var i=this.edges;for(var s in i)i.hasOwnProperty(s)&&i[s].isOverlappingWith(t)&&e.push(s)},e._getAllEdgesOverlappingWith=function(t){var e=[];return this._doInAllActiveSectors("_getEdgesOverlappingWith",t,e),e},e._getEdgeAt=function(t){var e=this._pointerToPositionObject(t),i=this._getAllEdgesOverlappingWith(e);return i.length>0?this.edges[i[i.length-1]]:null},e._addToSelection=function(t){t instanceof s?this.selectionObj.nodes[t.id]=t:this.selectionObj.edges[t.id]=t},e._addToHover=function(t){t instanceof s?this.hoverObj.nodes[t.id]=t:this.hoverObj.edges[t.id]=t},e._removeFromSelection=function(t){t instanceof s?delete this.selectionObj.nodes[t.id]:delete this.selectionObj.edges[t.id]},e._unselectAll=function(t){void 0===t&&(t=!1);for(var e in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(e)&&this.selectionObj.nodes[e].unselect();for(var i in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(i)&&this.selectionObj.edges[i].unselect();this.selectionObj={nodes:{},edges:{}},0==t&&this.emit("select",this.getSelection())},e._unselectClusters=function(t){void 0===t&&(t=!1);for(var e in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(e)&&this.selectionObj.nodes[e].clusterSize>1&&(this.selectionObj.nodes[e].unselect(),this._removeFromSelection(this.selectionObj.nodes[e]));0==t&&this.emit("select",this.getSelection())},e._getSelectedNodeCount=function(){var t=0;for(var e in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(e)&&(t+=1);return t},e._getSelectedNode=function(){for(var t in this.selectionObj.nodes)if(this.selectionObj.nodes.hasOwnProperty(t))return this.selectionObj.nodes[t];return null},e._getSelectedEdge=function(){for(var t in this.selectionObj.edges)if(this.selectionObj.edges.hasOwnProperty(t))return this.selectionObj.edges[t];return null},e._getSelectedEdgeCount=function(){var t=0;for(var e in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(e)&&(t+=1);return t},e._getSelectedObjectCount=function(){var t=0;for(var e in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(e)&&(t+=1);for(var i in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(i)&&(t+=1);return t},e._selectionIsEmpty=function(){for(var t in this.selectionObj.nodes)if(this.selectionObj.nodes.hasOwnProperty(t))return!1;for(var e in this.selectionObj.edges)if(this.selectionObj.edges.hasOwnProperty(e))return!1;return!0},e._clusterInSelection=function(){for(var t in this.selectionObj.nodes)if(this.selectionObj.nodes.hasOwnProperty(t)&&this.selectionObj.nodes[t].clusterSize>1)return!0;return!1},e._selectConnectedEdges=function(t){for(var e=0;ei;i++){o=t[i];var n=this.nodes[o];if(!n)throw new RangeError('Node with id "'+o+'" not found');this._selectObject(n,!0,!0,e,!0)}this.redraw()},e.selectEdges=function(t){var e,i,s;if(!t||void 0==t.length)throw"Selection must be an array with ids";for(this._unselectAll(!0),e=0,i=t.length;i>e;e++){s=t[e];var o=this.edges[s];if(!o)throw new RangeError('Edge with id "'+s+'" not found');this._selectObject(o,!0,!0,!1,!0)}this.redraw()},e._updateSelection=function(){for(var t in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(t)&&(this.nodes.hasOwnProperty(t)||delete this.selectionObj.nodes[t]);for(var e in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(e)&&(this.edges.hasOwnProperty(e)||delete this.selectionObj.edges[e])}},function(t,e,i){var s=i(1),o=i(40),n=i(37);e._clearManipulatorBar=function(){for(;this.manipulationDiv.hasChildNodes();)this.manipulationDiv.removeChild(this.manipulationDiv.firstChild);this.manipulationDOM={},this._manipulationReleaseOverload=function(){},delete this.sectors.support.nodes.targetNode,delete this.sectors.support.nodes.targetViaNode,this.controlNodesActive=!1},e._restoreOverloadedFunctions=function(){for(var t in this.cachedFunctions)this.cachedFunctions.hasOwnProperty(t)&&(this[t]=this.cachedFunctions[t])},e._toggleEditMode=function(){this.editMode=!this.editMode;var t=this.manipulationDiv,e=this.closeDiv,i=this.editModeDiv;1==this.editMode?(t.style.display="block",e.style.display="block",i.style.display="none",e.onclick=this._toggleEditMode.bind(this)):(t.style.display="none",e.style.display="none",i.style.display="block",e.onclick=null),this._createManipulatorBar()},e._createManipulatorBar=function(){this.boundFunction&&this.off("select",this.boundFunction);var t=this.constants.locales[this.constants.locale];if(void 0!==this.edgeBeingEdited&&(this.edgeBeingEdited._disableControlNodes(),this.edgeBeingEdited=void 0,this.selectedControlNode=null,this.controlNodesActive=!1,this._redraw()),this._restoreOverloadedFunctions(),this.freezeSimulation=!1,this.blockConnectingEdgeSelection=!1,this.forceAppendSelection=!1,this.manipulationDOM={},1==this.editMode){for(;this.manipulationDiv.hasChildNodes();)this.manipulationDiv.removeChild(this.manipulationDiv.firstChild);this.manipulationDOM.addNodeSpan=document.createElement("span"),this.manipulationDOM.addNodeSpan.className="network-manipulationUI add",this.manipulationDOM.addNodeLabelSpan=document.createElement("span"),this.manipulationDOM.addNodeLabelSpan.className="network-manipulationLabel",this.manipulationDOM.addNodeLabelSpan.innerHTML=t.addNode,this.manipulationDOM.addNodeSpan.appendChild(this.manipulationDOM.addNodeLabelSpan),this.manipulationDOM.seperatorLineDiv1=document.createElement("div"),this.manipulationDOM.seperatorLineDiv1.className="network-seperatorLine",this.manipulationDOM.addEdgeSpan=document.createElement("span"),this.manipulationDOM.addEdgeSpan.className="network-manipulationUI connect",this.manipulationDOM.addEdgeLabelSpan=document.createElement("span"),this.manipulationDOM.addEdgeLabelSpan.className="network-manipulationLabel",this.manipulationDOM.addEdgeLabelSpan.innerHTML=t.addEdge,this.manipulationDOM.addEdgeSpan.appendChild(this.manipulationDOM.addEdgeLabelSpan),this.manipulationDiv.appendChild(this.manipulationDOM.addNodeSpan),this.manipulationDiv.appendChild(this.manipulationDOM.seperatorLineDiv1),this.manipulationDiv.appendChild(this.manipulationDOM.addEdgeSpan),1==this._getSelectedNodeCount()&&this.triggerFunctions.edit?(this.manipulationDOM.seperatorLineDiv2=document.createElement("div"),this.manipulationDOM.seperatorLineDiv2.className="network-seperatorLine",this.manipulationDOM.editNodeSpan=document.createElement("span"),this.manipulationDOM.editNodeSpan.className="network-manipulationUI edit",this.manipulationDOM.editNodeLabelSpan=document.createElement("span"),this.manipulationDOM.editNodeLabelSpan.className="network-manipulationLabel",this.manipulationDOM.editNodeLabelSpan.innerHTML=t.editNode,this.manipulationDOM.editNodeSpan.appendChild(this.manipulationDOM.editNodeLabelSpan),this.manipulationDiv.appendChild(this.manipulationDOM.seperatorLineDiv2),this.manipulationDiv.appendChild(this.manipulationDOM.editNodeSpan)):1==this._getSelectedEdgeCount()&&0==this._getSelectedNodeCount()&&(this.manipulationDOM.seperatorLineDiv3=document.createElement("div"),this.manipulationDOM.seperatorLineDiv3.className="network-seperatorLine",this.manipulationDOM.editEdgeSpan=document.createElement("span"),this.manipulationDOM.editEdgeSpan.className="network-manipulationUI edit",this.manipulationDOM.editEdgeLabelSpan=document.createElement("span"),this.manipulationDOM.editEdgeLabelSpan.className="network-manipulationLabel",this.manipulationDOM.editEdgeLabelSpan.innerHTML=t.editEdge,this.manipulationDOM.editEdgeSpan.appendChild(this.manipulationDOM.editEdgeLabelSpan),this.manipulationDiv.appendChild(this.manipulationDOM.seperatorLineDiv3),this.manipulationDiv.appendChild(this.manipulationDOM.editEdgeSpan)),0==this._selectionIsEmpty()&&(this.manipulationDOM.seperatorLineDiv4=document.createElement("div"),this.manipulationDOM.seperatorLineDiv4.className="network-seperatorLine",this.manipulationDOM.deleteSpan=document.createElement("span"),this.manipulationDOM.deleteSpan.className="network-manipulationUI delete",this.manipulationDOM.deleteLabelSpan=document.createElement("span"),this.manipulationDOM.deleteLabelSpan.className="network-manipulationLabel",this.manipulationDOM.deleteLabelSpan.innerHTML=t.del,this.manipulationDOM.deleteSpan.appendChild(this.manipulationDOM.deleteLabelSpan),this.manipulationDiv.appendChild(this.manipulationDOM.seperatorLineDiv4),this.manipulationDiv.appendChild(this.manipulationDOM.deleteSpan)),this.manipulationDOM.addNodeSpan.onclick=this._createAddNodeToolbar.bind(this),this.manipulationDOM.addEdgeSpan.onclick=this._createAddEdgeToolbar.bind(this),1==this._getSelectedNodeCount()&&this.triggerFunctions.edit?this.manipulationDOM.editNodeSpan.onclick=this._editNode.bind(this):1==this._getSelectedEdgeCount()&&0==this._getSelectedNodeCount()&&(this.manipulationDOM.editEdgeSpan.onclick=this._createEditEdgeToolbar.bind(this)),0==this._selectionIsEmpty()&&(this.manipulationDOM.deleteSpan.onclick=this._deleteSelected.bind(this)),this.closeDiv.onclick=this._toggleEditMode.bind(this),this.boundFunction=this._createManipulatorBar.bind(this),this.on("select",this.boundFunction)}else{for(;this.editModeDiv.hasChildNodes();)this.editModeDiv.removeChild(this.editModeDiv.firstChild);this.manipulationDOM.editModeSpan=document.createElement("span"),this.manipulationDOM.editModeSpan.className="network-manipulationUI edit editmode",this.manipulationDOM.editModeLabelSpan=document.createElement("span"),this.manipulationDOM.editModeLabelSpan.className="network-manipulationLabel",this.manipulationDOM.editModeLabelSpan.innerHTML=t.edit,this.manipulationDOM.editModeSpan.appendChild(this.manipulationDOM.editModeLabelSpan),this.editModeDiv.appendChild(this.manipulationDOM.editModeSpan),this.manipulationDOM.editModeSpan.onclick=this._toggleEditMode.bind(this)}},e._createAddNodeToolbar=function(){this._clearManipulatorBar(),this.boundFunction&&this.off("select",this.boundFunction);var t=this.constants.locales[this.constants.locale];this.manipulationDOM={},this.manipulationDOM.backSpan=document.createElement("span"),this.manipulationDOM.backSpan.className="network-manipulationUI back",this.manipulationDOM.backLabelSpan=document.createElement("span"),this.manipulationDOM.backLabelSpan.className="network-manipulationLabel",this.manipulationDOM.backLabelSpan.innerHTML=t.back,this.manipulationDOM.backSpan.appendChild(this.manipulationDOM.backLabelSpan),this.manipulationDOM.seperatorLineDiv1=document.createElement("div"),this.manipulationDOM.seperatorLineDiv1.className="network-seperatorLine",this.manipulationDOM.descriptionSpan=document.createElement("span"),this.manipulationDOM.descriptionSpan.className="network-manipulationUI none",this.manipulationDOM.descriptionLabelSpan=document.createElement("span"),this.manipulationDOM.descriptionLabelSpan.className="network-manipulationLabel",this.manipulationDOM.descriptionLabelSpan.innerHTML=t.addDescription,this.manipulationDOM.descriptionSpan.appendChild(this.manipulationDOM.descriptionLabelSpan),this.manipulationDiv.appendChild(this.manipulationDOM.backSpan),this.manipulationDiv.appendChild(this.manipulationDOM.seperatorLineDiv1),this.manipulationDiv.appendChild(this.manipulationDOM.descriptionSpan),this.manipulationDOM.backSpan.onclick=this._createManipulatorBar.bind(this),this.boundFunction=this._addNode.bind(this),this.on("select",this.boundFunction)},e._createAddEdgeToolbar=function(){this._clearManipulatorBar(),this._unselectAll(!0),this.freezeSimulation=!0;var t=this.constants.locales[this.constants.locale];this.boundFunction&&this.off("select",this.boundFunction),this._unselectAll(),this.forceAppendSelection=!1,this.blockConnectingEdgeSelection=!0,this.manipulationDOM={},this.manipulationDOM.backSpan=document.createElement("span"),this.manipulationDOM.backSpan.className="network-manipulationUI back",this.manipulationDOM.backLabelSpan=document.createElement("span"),this.manipulationDOM.backLabelSpan.className="network-manipulationLabel",this.manipulationDOM.backLabelSpan.innerHTML=t.back,this.manipulationDOM.backSpan.appendChild(this.manipulationDOM.backLabelSpan),this.manipulationDOM.seperatorLineDiv1=document.createElement("div"),this.manipulationDOM.seperatorLineDiv1.className="network-seperatorLine",this.manipulationDOM.descriptionSpan=document.createElement("span"),this.manipulationDOM.descriptionSpan.className="network-manipulationUI none",this.manipulationDOM.descriptionLabelSpan=document.createElement("span"),this.manipulationDOM.descriptionLabelSpan.className="network-manipulationLabel",this.manipulationDOM.descriptionLabelSpan.innerHTML=t.edgeDescription,this.manipulationDOM.descriptionSpan.appendChild(this.manipulationDOM.descriptionLabelSpan),this.manipulationDiv.appendChild(this.manipulationDOM.backSpan),this.manipulationDiv.appendChild(this.manipulationDOM.seperatorLineDiv1),this.manipulationDiv.appendChild(this.manipulationDOM.descriptionSpan),this.manipulationDOM.backSpan.onclick=this._createManipulatorBar.bind(this),this.boundFunction=this._handleConnect.bind(this),this.on("select",this.boundFunction),this.cachedFunctions._handleTouch=this._handleTouch,this.cachedFunctions._manipulationReleaseOverload=this._manipulationReleaseOverload,this.cachedFunctions._handleDragStart=this._handleDragStart,this.cachedFunctions._handleDragEnd=this._handleDragEnd,this._handleTouch=this._handleConnect,this._manipulationReleaseOverload=function(){},this._handleDragStart=function(){},this._handleDragEnd=this._finishConnect,this._redraw()},e._createEditEdgeToolbar=function(){this._clearManipulatorBar(),this.controlNodesActive=!0,this.boundFunction&&this.off("select",this.boundFunction),this.edgeBeingEdited=this._getSelectedEdge(),this.edgeBeingEdited._enableControlNodes();var t=this.constants.locales[this.constants.locale];this.manipulationDOM={},this.manipulationDOM.backSpan=document.createElement("span"),this.manipulationDOM.backSpan.className="network-manipulationUI back",this.manipulationDOM.backLabelSpan=document.createElement("span"),this.manipulationDOM.backLabelSpan.className="network-manipulationLabel",this.manipulationDOM.backLabelSpan.innerHTML=t.back,this.manipulationDOM.backSpan.appendChild(this.manipulationDOM.backLabelSpan),this.manipulationDOM.seperatorLineDiv1=document.createElement("div"),this.manipulationDOM.seperatorLineDiv1.className="network-seperatorLine",this.manipulationDOM.descriptionSpan=document.createElement("span"),this.manipulationDOM.descriptionSpan.className="network-manipulationUI none",this.manipulationDOM.descriptionLabelSpan=document.createElement("span"),this.manipulationDOM.descriptionLabelSpan.className="network-manipulationLabel",this.manipulationDOM.descriptionLabelSpan.innerHTML=t.editEdgeDescription,this.manipulationDOM.descriptionSpan.appendChild(this.manipulationDOM.descriptionLabelSpan),this.manipulationDiv.appendChild(this.manipulationDOM.backSpan),this.manipulationDiv.appendChild(this.manipulationDOM.seperatorLineDiv1),this.manipulationDiv.appendChild(this.manipulationDOM.descriptionSpan),this.manipulationDOM.backSpan.onclick=this._createManipulatorBar.bind(this),this.cachedFunctions._handleTouch=this._handleTouch,this.cachedFunctions._manipulationReleaseOverload=this._manipulationReleaseOverload,this.cachedFunctions._handleTap=this._handleTap,this.cachedFunctions._handleDragStart=this._handleDragStart,this.cachedFunctions._handleOnDrag=this._handleOnDrag,this._handleTouch=this._selectControlNode,this._handleTap=function(){},this._handleOnDrag=this._controlNodeDrag,this._handleDragStart=function(){},this._manipulationReleaseOverload=this._releaseControlNode,this._redraw()},e._selectControlNode=function(t){this.edgeBeingEdited.controlNodes.from.unselect(),this.edgeBeingEdited.controlNodes.to.unselect(),this.selectedControlNode=this.edgeBeingEdited._getSelectedControlNode(this._XconvertDOMtoCanvas(t.x),this._YconvertDOMtoCanvas(t.y)),null!==this.selectedControlNode&&(this.selectedControlNode.select(),this.freezeSimulation=!0),this._redraw()},e._controlNodeDrag=function(t){var e=this._getPointer(t.gesture.center);null!==this.selectedControlNode&&void 0!==this.selectedControlNode&&(this.selectedControlNode.x=this._XconvertDOMtoCanvas(e.x),this.selectedControlNode.y=this._YconvertDOMtoCanvas(e.y)),this._redraw()},e._releaseControlNode=function(t){var e=this._getNodeAt(t);null!==e?(1==this.edgeBeingEdited.controlNodes.from.selected&&(this._editEdge(e.id,this.edgeBeingEdited.to.id),this.edgeBeingEdited.controlNodes.from.unselect()),1==this.edgeBeingEdited.controlNodes.to.selected&&(this._editEdge(this.edgeBeingEdited.from.id,e.id),this.edgeBeingEdited.controlNodes.to.unselect())):this.edgeBeingEdited._restoreControlNodes(),this.freezeSimulation=!1,this._redraw()},e._handleConnect=function(t){if(0==this._getSelectedNodeCount()){var e=this._getNodeAt(t);if(null!=e)if(e.clusterSize>1)alert(this.constants.locales[this.constants.locale].createEdgeError);else{this._selectObject(e,!1);var i=this.sectors.support.nodes;i.targetNode=new o({id:"targetNode"},{},{},this.constants);var s=i.targetNode;s.x=e.x,s.y=e.y,this.edges.connectionEdge=new n({id:"connectionEdge",from:e.id,to:s.id},this,this.constants);var r=this.edges.connectionEdge;r.from=e,r.connected=!0,r.options.smoothCurves={enabled:!0,dynamic:!1,type:"continuous",roundness:.5},r.selected=!0,r.to=s,this.cachedFunctions._handleOnDrag=this._handleOnDrag,this._handleOnDrag=function(t){var e=this._getPointer(t.gesture.center),i=this.edges.connectionEdge;i.to.x=this._XconvertDOMtoCanvas(e.x),i.to.y=this._YconvertDOMtoCanvas(e.y)},this.moving=!0,this.start()}}},e._finishConnect=function(t){if(1==this._getSelectedNodeCount()){var e=this._getPointer(t.gesture.center);this._handleOnDrag=this.cachedFunctions._handleOnDrag,delete this.cachedFunctions._handleOnDrag;var i=this.edges.connectionEdge.fromId;delete this.edges.connectionEdge,delete this.sectors.support.nodes.targetNode,delete this.sectors.support.nodes.targetViaNode;var s=this._getNodeAt(e);null!=s&&(s.clusterSize>1?alert(this.constants.locales[this.constants.locale].createEdgeError):(this._createEdge(i,s.id),this._createManipulatorBar())),this._unselectAll()}},e._addNode=function(){if(this._selectionIsEmpty()&&1==this.editMode){var t=this._pointerToPositionObject(this.pointerPosition),e={id:s.randomUUID(),x:t.left,y:t.top,label:"new",allowedToMoveX:!0,allowedToMoveY:!0};if(this.triggerFunctions.add){if(2!=this.triggerFunctions.add.length)throw new Error("The function for add does not support two arguments (data,callback)");var i=this;this.triggerFunctions.add(e,function(t){i.nodesData.add(t),i._createManipulatorBar(),i.moving=!0,i.start()})}else this.nodesData.add(e),this._createManipulatorBar(),this.moving=!0,this.start()}},e._createEdge=function(t,e){if(1==this.editMode){var i={from:t,to:e};if(this.triggerFunctions.connect){if(2!=this.triggerFunctions.connect.length)throw new Error("The function for connect does not support two arguments (data,callback)");var s=this;this.triggerFunctions.connect(i,function(t){s.edgesData.add(t),s.moving=!0,s.start()})}else this.edgesData.add(i),this.moving=!0,this.start()}},e._editEdge=function(t,e){if(1==this.editMode){var i={id:this.edgeBeingEdited.id,from:t,to:e};if(this.triggerFunctions.editEdge){if(2!=this.triggerFunctions.editEdge.length)throw new Error("The function for edit does not support two arguments (data, callback)");var s=this;this.triggerFunctions.editEdge(i,function(t){s.edgesData.update(t),s.moving=!0,s.start()})}else this.edgesData.update(i),this.moving=!0,this.start()}},e._editNode=function(){if(!this.triggerFunctions.edit||1!=this.editMode)throw new Error("No edit function has been bound to this button");var t=this._getSelectedNode(),e={id:t.id,label:t.label,group:t.options.group,shape:t.options.shape,color:{background:t.options.color.background,border:t.options.color.border,highlight:{background:t.options.color.highlight.background,border:t.options.color.highlight.border}}};if(2!=this.triggerFunctions.edit.length)throw new Error("The function for edit does not support two arguments (data, callback)");var i=this;this.triggerFunctions.edit(e,function(t){i.nodesData.update(t),i._createManipulatorBar(),i.moving=!0,i.start()})},e._deleteSelected=function(){if(!this._selectionIsEmpty()&&1==this.editMode)if(this._clusterInSelection())alert(this.constants.locales[this.constants.locale].deleteClusterError);else{var t=this.getSelectedNodes(),e=this.getSelectedEdges();if(this.triggerFunctions.del){var i=this,s={nodes:t,edges:e};if(2!=this.triggerFunctions.del.length)throw new Error("The function for delete does not support two arguments (data, callback)");this.triggerFunctions.del(s,function(t){i.edgesData.remove(t.edges),i.nodesData.remove(t.nodes),i._unselectAll(),i.moving=!0,i.start()})}else this.edgesData.remove(e),this.nodesData.remove(t),this._unselectAll(),this.moving=!0,this.start()}}},function(t,e,i){var s=(i(1),i(45));e._cleanNavigation=function(){if(0!=this.navigationHammers.existing.length){for(var t=0;t0){this.constants.hierarchicalLayout.levelSeparation="RL"==this.constants.hierarchicalLayout.direction||"DU"==this.constants.hierarchicalLayout.direction?this.constants.hierarchicalLayout.levelSeparation<0?this.constants.hierarchicalLayout.levelSeparation:-1*this.constants.hierarchicalLayout.levelSeparation:Math.abs(this.constants.hierarchicalLayout.levelSeparation),"RL"==this.constants.hierarchicalLayout.direction||"LR"==this.constants.hierarchicalLayout.direction?1==this.constants.smoothCurves.enabled&&(this.constants.smoothCurves.type="vertical"):1==this.constants.smoothCurves.enabled&&(this.constants.smoothCurves.type="horizontal");var t,e,i=0,s=!1,o=!1;for(e in this.nodes)this.nodes.hasOwnProperty(e)&&(t=this.nodes[e],-1!=t.level?s=!0:o=!0,is&&(n.xFixed=!1,n.x=i[n.level].minPos,r=!0):n.yFixed&&n.level>s&&(n.yFixed=!1,n.y=i[n.level].minPos,r=!0),1==r&&(i[n.level].minPos+=i[n.level].nodeSpacing,n.edges.length>1&&this._placeBranchNodes(n.edges,n.id,i,n.level))}},e._setLevel=function(t,e,i){for(var s=0;st)&&(o.level=t,o.edges.length>1&&this._setLevel(t+1,o.edges,o.id))}},e._setLevelDirected=function(t,e,i){this.nodes[i].hierarchyEnumerated=!0;for(var s=0;s1&&o.hierarchyEnumerated===!1&&this._setLevelDirected(o.level,o.edges,o.id)}},e._restoreNodes=function(){for(var t in this.nodes)this.nodes.hasOwnProperty(t)&&(this.nodes[t].xFixed=!1,this.nodes[t].yFixed=!1)}},function(t,e,i){function s(){this.constants.smoothCurves.enabled=!this.constants.smoothCurves.enabled;var t=document.getElementById("graph_toggleSmooth");t.style.background=1==this.constants.smoothCurves.enabled?"#A4FF56":"#FF8532",this._configureSmoothCurves(!1)}function o(){for(var t in this.calculationNodes)this.calculationNodes.hasOwnProperty(t)&&(this.calculationNodes[t].vx=0,this.calculationNodes[t].vy=0,this.calculationNodes[t].fx=0,this.calculationNodes[t].fy=0);1==this.constants.hierarchicalLayout.enabled?(this._setupHierarchicalLayout(),a.call(this,"graph_H_nd",1,"physics_hierarchicalRepulsion_nodeDistance"),a.call(this,"graph_H_cg",1,"physics_centralGravity"),a.call(this,"graph_H_sc",1,"physics_springConstant"),a.call(this,"graph_H_sl",1,"physics_springLength"),a.call(this,"graph_H_damp",1,"physics_damping")):this.repositionNodes(),this.moving=!0,this.start()}function n(){var t="No options are required, default values used.",e=[],i=document.getElementById("graph_physicsMethod1"),s=document.getElementById("graph_physicsMethod2");if(1==i.checked){if(this.constants.physics.barnesHut.gravitationalConstant!=this.backupConstants.physics.barnesHut.gravitationalConstant&&e.push("gravitationalConstant: "+this.constants.physics.barnesHut.gravitationalConstant),this.constants.physics.centralGravity!=this.backupConstants.physics.barnesHut.centralGravity&&e.push("centralGravity: "+this.constants.physics.centralGravity),this.constants.physics.springLength!=this.backupConstants.physics.barnesHut.springLength&&e.push("springLength: "+this.constants.physics.springLength),this.constants.physics.springConstant!=this.backupConstants.physics.barnesHut.springConstant&&e.push("springConstant: "+this.constants.physics.springConstant),this.constants.physics.damping!=this.backupConstants.physics.barnesHut.damping&&e.push("damping: "+this.constants.physics.damping),0!=e.length){t="var options = {",t+="physics: {barnesHut: {";for(var o=0;othis.constants.clustering.clusterThreshold&&1==this.constants.clustering.enabled&&this.clusterToFit(this.constants.clustering.reduceToNodes,!1),this._calculateForces())},e._calculateForces=function(){this._calculateGravitationalForces(),this._calculateNodeForces(),this.constants.physics.springConstant>0&&(1==this.constants.smoothCurves.enabled&&1==this.constants.smoothCurves.dynamic?this._calculateSpringForcesWithSupport():1==this.constants.physics.hierarchicalRepulsion.enabled?this._calculateHierarchicalSpringForces():this._calculateSpringForces())},e._updateCalculationNodes=function(){if(1==this.constants.smoothCurves.enabled&&1==this.constants.smoothCurves.dynamic){this.calculationNodes={},this.calculationNodeIndices=[];for(var t in this.nodes)this.nodes.hasOwnProperty(t)&&(this.calculationNodes[t]=this.nodes[t]);var e=this.sectors.support.nodes;for(var i in e)e.hasOwnProperty(i)&&(this.edges.hasOwnProperty(e[i].parentEdgeId)?this.calculationNodes[i]=e[i]:e[i]._setForce(0,0));for(var s in this.calculationNodes)this.calculationNodes.hasOwnProperty(s)&&this.calculationNodeIndices.push(s)}else this.calculationNodes=this.nodes,this.calculationNodeIndices=this.nodeIndices},e._calculateGravitationalForces=function(){var t,e,i,s,o,n=this.calculationNodes,r=this.constants.physics.centralGravity,a=0;for(o=0;oSimulation Mode:Barnes HutRepulsionHierarchical
Options:
',this.containerElement.parentElement.insertBefore(this.physicsConfiguration,this.containerElement),this.optionsDiv=document.createElement("div"),this.optionsDiv.style.fontSize="14px",this.optionsDiv.style.fontFamily="verdana",this.containerElement.parentElement.insertBefore(this.optionsDiv,this.containerElement);var e;e=document.getElementById("graph_BH_gc"),e.onchange=a.bind(this,"graph_BH_gc",-1,"physics_barnesHut_gravitationalConstant"),e=document.getElementById("graph_BH_cg"),e.onchange=a.bind(this,"graph_BH_cg",1,"physics_centralGravity"),e=document.getElementById("graph_BH_sc"),e.onchange=a.bind(this,"graph_BH_sc",1,"physics_springConstant"),e=document.getElementById("graph_BH_sl"),e.onchange=a.bind(this,"graph_BH_sl",1,"physics_springLength"),e=document.getElementById("graph_BH_damp"),e.onchange=a.bind(this,"graph_BH_damp",1,"physics_damping"),e=document.getElementById("graph_R_nd"),e.onchange=a.bind(this,"graph_R_nd",1,"physics_repulsion_nodeDistance"),e=document.getElementById("graph_R_cg"),e.onchange=a.bind(this,"graph_R_cg",1,"physics_centralGravity"),e=document.getElementById("graph_R_sc"),e.onchange=a.bind(this,"graph_R_sc",1,"physics_springConstant"),e=document.getElementById("graph_R_sl"),e.onchange=a.bind(this,"graph_R_sl",1,"physics_springLength"),e=document.getElementById("graph_R_damp"),e.onchange=a.bind(this,"graph_R_damp",1,"physics_damping"),e=document.getElementById("graph_H_nd"),e.onchange=a.bind(this,"graph_H_nd",1,"physics_hierarchicalRepulsion_nodeDistance"),e=document.getElementById("graph_H_cg"),e.onchange=a.bind(this,"graph_H_cg",1,"physics_centralGravity"),e=document.getElementById("graph_H_sc"),e.onchange=a.bind(this,"graph_H_sc",1,"physics_springConstant"),e=document.getElementById("graph_H_sl"),e.onchange=a.bind(this,"graph_H_sl",1,"physics_springLength"),e=document.getElementById("graph_H_damp"),e.onchange=a.bind(this,"graph_H_damp",1,"physics_damping"),e=document.getElementById("graph_H_direction"),e.onchange=a.bind(this,"graph_H_direction",t,"hierarchicalLayout_direction"),e=document.getElementById("graph_H_levsep"),e.onchange=a.bind(this,"graph_H_levsep",1,"hierarchicalLayout_levelSeparation"),e=document.getElementById("graph_H_nspac"),e.onchange=a.bind(this,"graph_H_nspac",1,"hierarchicalLayout_nodeSpacing");var i=document.getElementById("graph_physicsMethod1"),d=document.getElementById("graph_physicsMethod2"),l=document.getElementById("graph_physicsMethod3");d.checked=!0,this.constants.physics.barnesHut.enabled&&(i.checked=!0),this.constants.hierarchicalLayout.enabled&&(l.checked=!0);var c=document.getElementById("graph_toggleSmooth"),p=document.getElementById("graph_repositionNodes"),u=document.getElementById("graph_generateOptions");c.onclick=s.bind(this),p.onclick=o.bind(this),u.onclick=n.bind(this),c.style.background=1==this.constants.smoothCurves&&0==this.constants.dynamicSmoothCurves?"#A4FF56":"#FF8532",r.apply(this),i.onchange=r.bind(this),d.onchange=r.bind(this),l.onchange=r.bind(this)}},e._overWriteGraphConstants=function(t,e){var i=t.split("_");1==i.length?this.constants[i[0]]=e:2==i.length?this.constants[i[0]][i[1]]=e:3==i.length&&(this.constants[i[0]][i[1]][i[2]]=e)}},function(t){function e(t){throw new Error("Cannot find module '"+t+"'.")}e.keys=function(){return[]},e.resolve=e,t.exports=e,e.id=67},function(t,e){e._calculateNodeForces=function(){var t,e,i,s,o,n,r,a,h,d,l,c=this.calculationNodes,p=this.calculationNodeIndices,u=-2/3,m=4/3,f=this.constants.physics.repulsion.nodeDistance,g=f;for(d=0;di&&(r=.5*g>i?1:v*i+m,r*=0==n?1:1+n*this.constants.clustering.forceAmplification,r/=i,s=t*r,o=e*r,a.fx-=s,a.fy-=o,h.fx+=s,h.fy+=o)}}},function(t,e){e._calculateNodeForces=function(){var t,e,i,s,o,n,r,a,h,d,l=this.calculationNodes,c=this.calculationNodeIndices,p=this.constants.physics.hierarchicalRepulsion.nodeDistance;for(h=0;hi?-Math.pow(u*i,2)+Math.pow(u*p,2):0,0==i?i=.01:n/=i,s=t*n,o=e*n,r.fx-=s,r.fy-=o,a.fx+=s,a.fy+=o}},e._calculateHierarchicalSpringForces=function(){for(var t,e,i,s,o,n,r,a,h,d=this.edges,l=this.calculationNodes,c=this.calculationNodeIndices,p=0;pn;n++)t=e[i[n]],t.options.mass>0&&(this._getForceContribution(o.root.children.NW,t),this._getForceContribution(o.root.children.NE,t),this._getForceContribution(o.root.children.SW,t),this._getForceContribution(o.root.children.SE,t))}},e._getForceContribution=function(t,e){if(t.childrenCount>0){var i,s,o;if(i=t.centerOfMass.x-e.x,s=t.centerOfMass.y-e.y,o=Math.sqrt(i*i+s*s),o*t.calcSize>this.constants.physics.barnesHut.theta){0==o&&(o=.1*Math.random(),i=o);var n=this.constants.physics.barnesHut.gravitationalConstant*t.mass*e.options.mass/(o*o*o),r=i*n,a=s*n;e.fx+=r,e.fy+=a}else if(4==t.childrenCount)this._getForceContribution(t.children.NW,e),this._getForceContribution(t.children.NE,e),this._getForceContribution(t.children.SW,e),this._getForceContribution(t.children.SE,e);else if(t.children.data.id!=e.id){0==o&&(o=.5*Math.random(),i=o);var n=this.constants.physics.barnesHut.gravitationalConstant*t.mass*e.options.mass/(o*o*o),r=i*n,a=s*n;e.fx+=r,e.fy+=a}}},e._formBarnesHutTree=function(t,e){for(var i,s=e.length,o=Number.MAX_VALUE,n=Number.MAX_VALUE,r=-Number.MAX_VALUE,a=-Number.MAX_VALUE,h=0;s>h;h++){var d=t[e[h]].x,l=t[e[h]].y;t[e[h]].options.mass>0&&(o>d&&(o=d),d>r&&(r=d),n>l&&(n=l),l>a&&(a=l))}var c=Math.abs(r-o)-Math.abs(a-n);c>0?(n-=.5*c,a+=.5*c):(o+=.5*c,r-=.5*c);var p=1e-5,u=Math.max(p,Math.abs(r-o)),m=.5*u,f=.5*(o+r),g=.5*(n+a),v={root:{centerOfMass:{x:0,y:0},mass:0,range:{minX:f-m,maxX:f+m,minY:g-m,maxY:g+m},size:u,calcSize:1/u,children:{data:null},maxWidth:0,level:0,childrenCount:4}};for(this._splitBranch(v.root),h=0;s>h;h++)i=t[e[h]],i.options.mass>0&&this._placeInTree(v.root,i);this.barnesHutTree=v},e._updateBranchMass=function(t,e){var i=t.mass+e.options.mass,s=1/i;t.centerOfMass.x=t.centerOfMass.x*t.mass+e.x*e.options.mass,t.centerOfMass.x*=s,t.centerOfMass.y=t.centerOfMass.y*t.mass+e.y*e.options.mass,t.centerOfMass.y*=s,t.mass=i;var o=Math.max(Math.max(e.height,e.radius),e.width);t.maxWidth=t.maxWidthe.x?t.children.NW.range.maxY>e.y?this._placeInRegion(t,e,"NW"):this._placeInRegion(t,e,"SW"):t.children.NW.range.maxY>e.y?this._placeInRegion(t,e,"NE"):this._placeInRegion(t,e,"SE")},e._placeInRegion=function(t,e,i){switch(t.children[i].childrenCount){case 0:t.children[i].children.data=e,t.children[i].childrenCount=1,this._updateBranchMass(t.children[i],e);break;case 1:t.children[i].children.data.x==e.x&&t.children[i].children.data.y==e.y?(e.x+=Math.random(),e.y+=Math.random()):(this._splitBranch(t.children[i]),this._placeInTree(t.children[i],e)); +break;case 4:this._placeInTree(t.children[i],e)}},e._splitBranch=function(t){var e=null;1==t.childrenCount&&(e=t.children.data,t.mass=0,t.centerOfMass.x=0,t.centerOfMass.y=0),t.childrenCount=4,t.children.data=null,this._insertRegion(t,"NW"),this._insertRegion(t,"NE"),this._insertRegion(t,"SW"),this._insertRegion(t,"SE"),null!=e&&this._placeInTree(t,e)},e._insertRegion=function(t,e){var i,s,o,n,r=.5*t.size;switch(e){case"NW":i=t.range.minX,s=t.range.minX+r,o=t.range.minY,n=t.range.minY+r;break;case"NE":i=t.range.minX+r,s=t.range.maxX,o=t.range.minY,n=t.range.minY+r;break;case"SW":i=t.range.minX,s=t.range.minX+r,o=t.range.minY+r,n=t.range.maxY;break;case"SE":i=t.range.minX+r,s=t.range.maxX,o=t.range.minY+r,n=t.range.maxY}t.children[e]={centerOfMass:{x:0,y:0},mass:0,range:{minX:i,maxX:s,minY:o,maxY:n},size:.5*t.size,calcSize:2*t.calcSize,children:{data:null},maxWidth:0,level:t.level+1,childrenCount:0}},e._drawTree=function(t,e){void 0!==this.barnesHutTree&&(t.lineWidth=1,this._drawBranch(this.barnesHutTree.root,t,e))},e._drawBranch=function(t,e,i){void 0===i&&(i="#FF0000"),4==t.childrenCount&&(this._drawBranch(t.children.NW,e),this._drawBranch(t.children.NE,e),this._drawBranch(t.children.SE,e),this._drawBranch(t.children.SW,e)),e.strokeStyle=i,e.beginPath(),e.moveTo(t.range.minX,t.range.minY),e.lineTo(t.range.maxX,t.range.minY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.minY),e.lineTo(t.range.maxX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.maxY),e.lineTo(t.range.minX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.minX,t.range.maxY),e.lineTo(t.range.minX,t.range.minY),e.stroke()}},function(t){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children=[],t.webpackPolyfill=1),t}}])}); //# sourceMappingURL=vis.map diff --git a/docs/css/style.css b/docs/css/style.css index 18916927..ad231306 100644 --- a/docs/css/style.css +++ b/docs/css/style.css @@ -16,7 +16,7 @@ body, td, th { position: relative; margin: 0 auto; padding: 10px 10px 50px 10px; - width: 700px; + width: 970px; max-width: 100%; box-sizing: border-box; } diff --git a/docs/timeline.html b/docs/timeline.html index 8f049a3e..24d85eb9 100644 --- a/docs/timeline.html +++ b/docs/timeline.html @@ -465,6 +465,39 @@ var options = { end date. + + format + Object + none + + Apply custom date formatting of the labels on the time axis. The default value of format is: +
{
+  minorLabels: {
+    millisecond:'SSS',
+    second:     's',
+    minute:     'HH:mm',
+    hour:       'HH:mm',
+    weekday:    'ddd D',
+    day:        'D',
+    month:      'MMM',
+    year:       'YYYY'
+  },
+  majorLabels: {
+    millisecond:'HH:mm:ss',
+    second:     'D MMMM HH:mm',
+    minute:     'ddd D MMMM',
+    hour:       'ddd D MMMM',
+    weekday:    'MMMM YYYY',
+    day:        'MMMM YYYY',
+    month:      'YYYY',
+    year:       ''
+  }
+}
+ For values which not provided in the customized options.format, the default values will be used. + All available formatting syntax is described in the docs of moment.js. + + + groupOrder String | Function diff --git a/lib/timeline/TimeStep.js b/lib/timeline/TimeStep.js index bd9ad89b..4b67c8bf 100644 --- a/lib/timeline/TimeStep.js +++ b/lib/timeline/TimeStep.js @@ -1,5 +1,6 @@ var moment = require('../module/moment'); var DateUtil = require('./DateUtil'); +var util = require('../util'); /** * @constructor TimeStep @@ -48,32 +49,45 @@ function TimeStep(start, end, minimumStep, hiddenDates) { if (hiddenDates === undefined) { this.hiddenDates = []; } + + this.format = TimeStep.FORMAT; // default formatting } // Time formatting TimeStep.FORMAT = { minorLabels: { - 'millisecond':'SSS', - 'second': 's', - 'minute': 'HH:mm', - 'hour': 'HH:mm', - 'weekday': 'ddd D', - 'day': 'D', - 'month': 'MMM', - 'year': 'YYYY' + millisecond:'SSS', + second: 's', + minute: 'HH:mm', + hour: 'HH:mm', + weekday: 'ddd D', + day: 'D', + month: 'MMM', + year: 'YYYY' }, majorLabels: { - 'millisecond':'HH:mm:ss', - 'second': 'D MMMM HH:mm', - 'minute': 'ddd D MMMM', - 'hour': 'ddd D MMMM', - 'weekday': 'MMMM YYYY', - 'day': 'MMMM YYYY', - 'month': 'YYYY', - 'year': '' + millisecond:'HH:mm:ss', + second: 'D MMMM HH:mm', + minute: 'ddd D MMMM', + hour: 'ddd D MMMM', + weekday: 'MMMM YYYY', + day: 'MMMM YYYY', + month: 'YYYY', + year: '' } }; +/** + * Set custom formatting for the minor an major labels of the TimeStep. + * Both `minorLabels` and `majorLabels` are an Object with properties: + * 'millisecond, 'second, 'minute', 'hour', 'weekday, 'day, 'month, 'year'. + * @param {{minorLabels: Object, majorLabels: Object}} format + */ +TimeStep.prototype.setFormat = function (format) { + var defaultFormat = util.deepExtend({}, TimeStep.FORMAT); + this.format = util.deepExtend(defaultFormat, format); +}; + /** * Set a new range * If minimumStep is provided, the step size is chosen as close as possible @@ -493,7 +507,7 @@ TimeStep.prototype.getLabelMinor = function(date) { date = this.current; } - var format = TimeStep.FORMAT.minorLabels[this.scale]; + var format = this.format.minorLabels[this.scale]; return (format && format.length > 0) ? moment(date).format(format) : ''; }; @@ -508,7 +522,7 @@ TimeStep.prototype.getLabelMajor = function(date) { date = this.current; } - var format = TimeStep.FORMAT.majorLabels[this.scale]; + var format = this.format.majorLabels[this.scale]; return (format && format.length > 0) ? moment(date).format(format) : ''; }; diff --git a/lib/timeline/component/TimeAxis.js b/lib/timeline/component/TimeAxis.js index d8aff3a1..de6fd7b5 100644 --- a/lib/timeline/component/TimeAxis.js +++ b/lib/timeline/component/TimeAxis.js @@ -39,7 +39,8 @@ function TimeAxis (body, options) { orientation: 'bottom', // supported: 'top', 'bottom' // TODO: implement timeaxis orientations 'left' and 'right' showMinorLabels: true, - showMajorLabels: true + showMajorLabels: true, + format: null }; this.options = util.extend({}, this.defaultOptions); @@ -64,7 +65,7 @@ TimeAxis.prototype = new Component(); TimeAxis.prototype.setOptions = function(options) { if (options) { // copy all options that we know - util.selectiveExtend(['orientation', 'showMinorLabels', 'showMajorLabels','hiddenDates'], this.options, options); + util.selectiveExtend(['orientation', 'showMinorLabels', 'showMajorLabels','hiddenDates', 'format'], this.options, options); // apply locale to moment.js // TODO: not so nice, this is applied globally to moment.js @@ -181,8 +182,10 @@ TimeAxis.prototype._repaintLabels = function () { var minimumStep = timeLabelsize - DateUtil.getHiddenDurationBefore(this.body.hiddenDates, this.body.range, timeLabelsize); minimumStep -= this.body.util.toTime(0).valueOf(); - var step = new TimeStep(new Date(start), new Date(end), minimumStep, this.body.hiddenDates); + if (this.options.format) { + step.setFormat(this.options.format); + } this.step = step; // Move all DOM elements to a "redundant" list, where they diff --git a/test/timeline.html b/test/timeline.html index cd8ae25c..5f53a516 100644 --- a/test/timeline.html +++ b/test/timeline.html @@ -94,6 +94,16 @@ //height: 200, showCurrentTime: true, showCustomTime: true, + format: { + minorLabels: { + 'weekday': 'dddd D', + 'month': 'MMMM' + }, + majorLabels: { + 'minute': 'dddd D MMMM', + 'hour': 'dddd D MMMM' + } + }, //clickToUse: true, //min: moment('2013-01-01'), //max: moment('2013-12-31'), From 90b8e3ef2fcb6bf2a5d9b500c6f5f9ef831ce70c Mon Sep 17 00:00:00 2001 From: jos Date: Fri, 19 Dec 2014 15:22:25 +0100 Subject: [PATCH 11/20] Fixed #503: Docs on the item property `subgroup` missing. --- docs/timeline.html | 26 ++++++++++++++++++-------- examples/timeline/30_subgroups.html | 4 ++-- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/docs/timeline.html b/docs/timeline.html index 24d85eb9..72b2a3b8 100644 --- a/docs/timeline.html +++ b/docs/timeline.html @@ -245,6 +245,16 @@ var items = [ example "color: red; background-color: pink;". + + subgroup + String | Number + none + The id of a subgroup. + Groups all items within a group per subgroup, and positions them on the + same height instead of staking them on top of each other. can be ordered + by specifying the option subgroupOrder of a group. + + title String @@ -339,6 +349,14 @@ var groups = [ example "color: red; background-color: pink;". + + subgroupOrder + String | Function + none + Order the subgroups by a field name or custom sort function. + By default, groups are ordered by first-come, first-show. + + title String @@ -347,14 +365,6 @@ var groups = [ The title can only contain plain text. - - subgroupOrder - String | Function - none - Order the subgroups by a field name or custom sort function. - By default, groups are ordered by first-come, first-show. - - diff --git a/examples/timeline/30_subgroups.html b/examples/timeline/30_subgroups.html index 4c342658..d042b81d 100644 --- a/examples/timeline/30_subgroups.html +++ b/examples/timeline/30_subgroups.html @@ -61,11 +61,11 @@ var container = document.getElementById('visualization'); var options = { + // orientation:'top' start: '2014-01-10', end: '2014-02-10', editable: true, - stack: false, -// orientation:'top' + stack: false }; var timeline = new vis.Timeline(container, items, groups, options); From ac74e826b0833c118164e873718a8b016805518f Mon Sep 17 00:00:00 2001 From: Alex de Mulder Date: Mon, 22 Dec 2014 11:34:02 +0100 Subject: [PATCH 12/20] fixed graph2d not updating on animation correctly --- dist/vis.js | 52375 +++++++++++++------------- examples/graph2d/01_basic.html | 2 +- lib/timeline/component/LineGraph.js | 5 +- 3 files changed, 26192 insertions(+), 26190 deletions(-) diff --git a/dist/vis.js b/dist/vis.js index b5fd50b4..efbe3065 100644 --- a/dist/vis.js +++ b/dist/vis.js @@ -5,7 +5,7 @@ * A dynamic, browser-based visualization library. * * @version 3.7.2-SNAPSHOT - * @date 2014-12-19 + * @date 2014-12-22 * * @license * Copyright (C) 2011-2014 Almende B.V, http://almende.com @@ -83,67 +83,67 @@ return /******/ (function(modules) { // webpackBootstrap // utils exports.util = __webpack_require__(1); - exports.DOMutil = __webpack_require__(2); + exports.DOMutil = __webpack_require__(6); // data - exports.DataSet = __webpack_require__(3); - exports.DataView = __webpack_require__(4); - exports.Queue = __webpack_require__(5); + exports.DataSet = __webpack_require__(7); + exports.DataView = __webpack_require__(9); + exports.Queue = __webpack_require__(8); // Graph3d - exports.Graph3d = __webpack_require__(6); + exports.Graph3d = __webpack_require__(10); exports.graph3d = { - Camera: __webpack_require__(7), - Filter: __webpack_require__(8), - Point2d: __webpack_require__(9), - Point3d: __webpack_require__(10), - Slider: __webpack_require__(11), - StepNumber: __webpack_require__(12) + Camera: __webpack_require__(14), + Filter: __webpack_require__(15), + Point2d: __webpack_require__(13), + Point3d: __webpack_require__(12), + Slider: __webpack_require__(16), + StepNumber: __webpack_require__(17) }; // Timeline - exports.Timeline = __webpack_require__(13); - exports.Graph2d = __webpack_require__(14); + exports.Timeline = __webpack_require__(18); + exports.Graph2d = __webpack_require__(42); exports.timeline = { - DateUtil: __webpack_require__(15), - DataStep: __webpack_require__(16), - Range: __webpack_require__(17), - stack: __webpack_require__(18), - TimeStep: __webpack_require__(19), + DateUtil: __webpack_require__(24), + DataStep: __webpack_require__(44), + Range: __webpack_require__(21), + stack: __webpack_require__(28), + TimeStep: __webpack_require__(38), components: { items: { - Item: __webpack_require__(31), - BackgroundItem: __webpack_require__(32), - BoxItem: __webpack_require__(33), - PointItem: __webpack_require__(34), - RangeItem: __webpack_require__(35) + Item: __webpack_require__(30), + BackgroundItem: __webpack_require__(34), + BoxItem: __webpack_require__(32), + PointItem: __webpack_require__(33), + RangeItem: __webpack_require__(29) }, - Component: __webpack_require__(20), - CurrentTime: __webpack_require__(21), - CustomTime: __webpack_require__(22), - DataAxis: __webpack_require__(23), - GraphGroup: __webpack_require__(24), - Group: __webpack_require__(25), - BackgroundGroup: __webpack_require__(26), - ItemSet: __webpack_require__(27), - Legend: __webpack_require__(28), - LineGraph: __webpack_require__(29), - TimeAxis: __webpack_require__(30) + Component: __webpack_require__(23), + CurrentTime: __webpack_require__(39), + CustomTime: __webpack_require__(41), + DataAxis: __webpack_require__(45), + GraphGroup: __webpack_require__(46), + Group: __webpack_require__(27), + BackgroundGroup: __webpack_require__(31), + ItemSet: __webpack_require__(26), + Legend: __webpack_require__(50), + LineGraph: __webpack_require__(43), + TimeAxis: __webpack_require__(37) } }; // Network - exports.Network = __webpack_require__(36); + exports.Network = __webpack_require__(51); exports.network = { - Edge: __webpack_require__(37), - Groups: __webpack_require__(38), - Images: __webpack_require__(39), - Node: __webpack_require__(40), - Popup: __webpack_require__(41), - dotparser: __webpack_require__(42), - gephiParser: __webpack_require__(43) + Edge: __webpack_require__(57), + Groups: __webpack_require__(54), + Images: __webpack_require__(55), + Node: __webpack_require__(56), + Popup: __webpack_require__(58), + dotparser: __webpack_require__(52), + gephiParser: __webpack_require__(53) }; // Deprecated since v3.0.0 @@ -152,8 +152,8 @@ return /******/ (function(modules) { // webpackBootstrap }; // bundled external libraries - exports.moment = __webpack_require__(44); - exports.hammer = __webpack_require__(45); + exports.moment = __webpack_require__(2); + exports.hammer = __webpack_require__(19); /***/ }, @@ -164,7 +164,7 @@ return /******/ (function(modules) { // webpackBootstrap // first check if moment.js is already loaded in the browser window, if so, // use this instance. Else, load via commonjs. - var moment = __webpack_require__(44); + var moment = __webpack_require__(2); /** * Test whether given object is a number @@ -1444,21146 +1444,20307 @@ return /******/ (function(modules) { // webpackBootstrap /* 2 */ /***/ function(module, exports, __webpack_require__) { - // DOM utility methods - - /** - * this prepares the JSON container for allocating SVG elements - * @param JSONcontainer - * @private - */ - exports.prepareElements = function(JSONcontainer) { - // cleanup the redundant svgElements; - for (var elementType in JSONcontainer) { - if (JSONcontainer.hasOwnProperty(elementType)) { - JSONcontainer[elementType].redundant = JSONcontainer[elementType].used; - JSONcontainer[elementType].used = []; - } - } - }; - - /** - * this cleans up all the unused SVG elements. By asking for the parentNode, we only need to supply the JSON container from - * which to remove the redundant elements. - * - * @param JSONcontainer - * @private - */ - exports.cleanupElements = function(JSONcontainer) { - // cleanup the redundant svgElements; - for (var elementType in JSONcontainer) { - if (JSONcontainer.hasOwnProperty(elementType)) { - if (JSONcontainer[elementType].redundant) { - for (var i = 0; i < JSONcontainer[elementType].redundant.length; i++) { - JSONcontainer[elementType].redundant[i].parentNode.removeChild(JSONcontainer[elementType].redundant[i]); - } - JSONcontainer[elementType].redundant = []; - } - } - } - }; - - /** - * Allocate or generate an SVG element if needed. Store a reference to it in the JSON container and draw it in the svgContainer - * the JSON container and the SVG container have to be supplied so other svg containers (like the legend) can use this. - * - * @param elementType - * @param JSONcontainer - * @param svgContainer - * @returns {*} - * @private - */ - exports.getSVGElement = function (elementType, JSONcontainer, svgContainer) { - var element; - // allocate SVG element, if it doesnt yet exist, create one. - if (JSONcontainer.hasOwnProperty(elementType)) { // this element has been created before - // check if there is an redundant element - if (JSONcontainer[elementType].redundant.length > 0) { - element = JSONcontainer[elementType].redundant[0]; - JSONcontainer[elementType].redundant.shift(); - } - else { - // create a new element and add it to the SVG - element = document.createElementNS('http://www.w3.org/2000/svg', elementType); - svgContainer.appendChild(element); - } - } - else { - // create a new element and add it to the SVG, also create a new object in the svgElements to keep track of it. - element = document.createElementNS('http://www.w3.org/2000/svg', elementType); - JSONcontainer[elementType] = {used: [], redundant: []}; - svgContainer.appendChild(element); - } - JSONcontainer[elementType].used.push(element); - return element; - }; - - - /** - * Allocate or generate an SVG element if needed. Store a reference to it in the JSON container and draw it in the svgContainer - * the JSON container and the SVG container have to be supplied so other svg containers (like the legend) can use this. - * - * @param elementType - * @param JSONcontainer - * @param DOMContainer - * @returns {*} - * @private - */ - exports.getDOMElement = function (elementType, JSONcontainer, DOMContainer, insertBefore) { - var element; - // allocate DOM element, if it doesnt yet exist, create one. - if (JSONcontainer.hasOwnProperty(elementType)) { // this element has been created before - // check if there is an redundant element - if (JSONcontainer[elementType].redundant.length > 0) { - element = JSONcontainer[elementType].redundant[0]; - JSONcontainer[elementType].redundant.shift(); - } - else { - // create a new element and add it to the SVG - element = document.createElement(elementType); - if (insertBefore !== undefined) { - DOMContainer.insertBefore(element, insertBefore); - } - else { - DOMContainer.appendChild(element); - } - } - } - else { - // create a new element and add it to the SVG, also create a new object in the svgElements to keep track of it. - element = document.createElement(elementType); - JSONcontainer[elementType] = {used: [], redundant: []}; - if (insertBefore !== undefined) { - DOMContainer.insertBefore(element, insertBefore); - } - else { - DOMContainer.appendChild(element); - } - } - JSONcontainer[elementType].used.push(element); - return element; - }; - - - - - /** - * draw a point object. this is a seperate function because it can also be called by the legend. - * The reason the JSONcontainer and the target SVG svgContainer have to be supplied is so the legend can use these functions - * as well. - * - * @param x - * @param y - * @param group - * @param JSONcontainer - * @param svgContainer - * @returns {*} - */ - exports.drawPoint = function(x, y, group, JSONcontainer, svgContainer) { - var point; - if (group.options.drawPoints.style == 'circle') { - point = exports.getSVGElement('circle',JSONcontainer,svgContainer); - point.setAttributeNS(null, "cx", x); - point.setAttributeNS(null, "cy", y); - point.setAttributeNS(null, "r", 0.5 * group.options.drawPoints.size); - } - else { - point = exports.getSVGElement('rect',JSONcontainer,svgContainer); - point.setAttributeNS(null, "x", x - 0.5*group.options.drawPoints.size); - point.setAttributeNS(null, "y", y - 0.5*group.options.drawPoints.size); - point.setAttributeNS(null, "width", group.options.drawPoints.size); - point.setAttributeNS(null, "height", group.options.drawPoints.size); - } - - if(group.options.drawPoints.styles !== undefined) { - point.setAttributeNS(null, "style", group.group.options.drawPoints.styles); - } - point.setAttributeNS(null, "class", group.className + " point"); - return point; - }; + // first check if moment.js is already loaded in the browser window, if so, + // use this instance. Else, load via commonjs. + module.exports = (typeof window !== 'undefined') && window['moment'] || __webpack_require__(3); - /** - * draw a bar SVG element centered on the X coordinate - * - * @param x - * @param y - * @param className - */ - exports.drawBar = function (x, y, width, height, className, JSONcontainer, svgContainer) { - if (height != 0) { - if (height < 0) { - height *= -1; - y -= height; - } - var rect = exports.getSVGElement('rect',JSONcontainer, svgContainer); - rect.setAttributeNS(null, "x", x - 0.5 * width); - rect.setAttributeNS(null, "y", y); - rect.setAttributeNS(null, "width", width); - rect.setAttributeNS(null, "height", height); - rect.setAttributeNS(null, "class", className); - } - }; /***/ }, /* 3 */ /***/ function(module, exports, __webpack_require__) { - var util = __webpack_require__(1); - var Queue = __webpack_require__(5); - - /** - * DataSet - * - * Usage: - * var dataSet = new DataSet({ - * fieldId: '_id', - * type: { - * // ... - * } - * }); - * - * dataSet.add(item); - * dataSet.add(data); - * dataSet.update(item); - * dataSet.update(data); - * dataSet.remove(id); - * dataSet.remove(ids); - * var data = dataSet.get(); - * var data = dataSet.get(id); - * var data = dataSet.get(ids); - * var data = dataSet.get(ids, options, data); - * dataSet.clear(); - * - * A data set can: - * - add/remove/update data - * - gives triggers upon changes in the data - * - can import/export data in various data formats - * - * @param {Array | DataTable} [data] Optional array with initial data - * @param {Object} [options] Available options: - * {String} fieldId Field name of the id in the - * items, 'id' by default. - * {Object.} [type] - * {String[]} [fields] field names to be returned - * {function} [filter] filter items - * {String | function} [order] Order the items by - * a field name or custom sort function. - * {Array | DataTable} [data] If provided, items will be appended to this - * array or table. Required in case of Google - * DataTable. - * - * @throws Error - */ - DataSet.prototype.get = function (args) { - var me = this; - - // parse the arguments - var id, ids, options, data; - var firstType = util.getType(arguments[0]); - if (firstType == 'String' || firstType == 'Number') { - // get(id [, options] [, data]) - id = arguments[0]; - options = arguments[1]; - data = arguments[2]; - } - else if (firstType == 'Array') { - // get(ids [, options] [, data]) - ids = arguments[0]; - options = arguments[1]; - data = arguments[2]; - } - else { - // get([, options] [, data]) - options = arguments[0]; - data = arguments[1]; - } - - // determine the return type - var returnType; - if (options && options.returnType) { - var allowedValues = ["DataTable", "Array", "Object"]; - returnType = allowedValues.indexOf(options.returnType) == -1 ? "Array" : options.returnType; - - if (data && (returnType != util.getType(data))) { - throw new Error('Type of parameter "data" (' + util.getType(data) + ') ' + - 'does not correspond with specified options.type (' + options.type + ')'); - } - if (returnType == 'DataTable' && !util.isDataTable(data)) { - throw new Error('Parameter "data" must be a DataTable ' + - 'when options.type is "DataTable"'); - } - } - else if (data) { - returnType = (util.getType(data) == 'DataTable') ? 'DataTable' : 'Array'; - } - else { - returnType = 'Array'; - } - - // build options - var type = options && options.type || this._options.type; - var filter = options && options.filter; - var items = [], item, itemId, i, len; - - // convert items - if (id != undefined) { - // return a single item - item = me._getItem(id, type); - if (filter && !filter(item)) { - item = null; - } - } - else if (ids != undefined) { - // return a subset of items - for (i = 0, len = ids.length; i < len; i++) { - item = me._getItem(ids[i], type); - if (!filter || filter(item)) { - items.push(item); - } - } - } - else { - // return all items - for (itemId in this._data) { - if (this._data.hasOwnProperty(itemId)) { - item = me._getItem(itemId, type); - if (!filter || filter(item)) { - items.push(item); - } - } - } - } - - // order the results - if (options && options.order && id == undefined) { - this._sort(items, options.order); - } - - // filter fields of the items - if (options && options.fields) { - var fields = options.fields; - if (id != undefined) { - item = this._filterFields(item, fields); - } - else { - for (i = 0, len = items.length; i < len; i++) { - items[i] = this._filterFields(items[i], fields); - } - } - } - - // return the results - if (returnType == 'DataTable') { - var columns = this._getColumnNames(data); - if (id != undefined) { - // append a single item to the data table - me._appendRow(data, columns, item); - } - else { - // copy the items to the provided data table - for (i = 0; i < items.length; i++) { - me._appendRow(data, columns, items[i]); - } - } - return data; - } - else if (returnType == "Object") { - var result = {}; - for (i = 0; i < items.length; i++) { - result[items[i].id] = items[i]; - } - return result; - } - else { - // return an array - if (id != undefined) { - // a single item - return item; - } - else { - // multiple items - if (data) { - // copy the items to the provided array - for (i = 0, len = items.length; i < len; i++) { - data.push(items[i]); - } - return data; - } - else { - // just return our array - return items; - } - } - } - }; - - /** - * Get ids of all items or from a filtered set of items. - * @param {Object} [options] An Object with options. Available options: - * {function} [filter] filter items - * {String | function} [order] Order the items by - * a field name or custom sort function. - * @return {Array} ids - */ - DataSet.prototype.getIds = function (options) { - var data = this._data, - filter = options && options.filter, - order = options && options.order, - type = options && options.type || this._options.type, - i, - len, - id, - item, - items, - ids = []; - - if (filter) { - // get filtered items - if (order) { - // create ordered list - items = []; - for (id in data) { - if (data.hasOwnProperty(id)) { - item = this._getItem(id, type); - if (filter(item)) { - items.push(item); - } - } - } - - this._sort(items, order); - - for (i = 0, len = items.length; i < len; i++) { - ids[i] = items[i][this._fieldId]; - } - } - else { - // create unordered list - for (id in data) { - if (data.hasOwnProperty(id)) { - item = this._getItem(id, type); - if (filter(item)) { - ids.push(item[this._fieldId]); - } - } - } - } - } - else { - // get all items - if (order) { - // create an ordered list - items = []; - for (id in data) { - if (data.hasOwnProperty(id)) { - items.push(data[id]); - } - } - - this._sort(items, order); - - for (i = 0, len = items.length; i < len; i++) { - ids[i] = items[i][this._fieldId]; - } - } - else { - // create unordered list - for (id in data) { - if (data.hasOwnProperty(id)) { - item = data[id]; - ids.push(item[this._fieldId]); - } - } - } - } - - return ids; - }; - - /** - * Returns the DataSet itself. Is overwritten for example by the DataView, - * which returns the DataSet it is connected to instead. - */ - DataSet.prototype.getDataSet = function () { - return this; - }; - - /** - * Execute a callback function for every item in the dataset. - * @param {function} callback - * @param {Object} [options] Available options: - * {Object.} [type] - * {String[]} [fields] filter fields - * {function} [filter] filter items - * {String | function} [order] Order the items by - * a field name or custom sort function. - */ - DataSet.prototype.forEach = function (callback, options) { - var filter = options && options.filter, - type = options && options.type || this._options.type, - data = this._data, - item, - id; - - if (options && options.order) { - // execute forEach on ordered list - var items = this.get(options); - - for (var i = 0, len = items.length; i < len; i++) { - item = items[i]; - id = item[this._fieldId]; - callback(item, id); - } - } - else { - // unordered - for (id in data) { - if (data.hasOwnProperty(id)) { - item = this._getItem(id, type); - if (!filter || filter(item)) { - callback(item, id); - } - } - } - } - }; - - /** - * Map every item in the dataset. - * @param {function} callback - * @param {Object} [options] Available options: - * {Object.} [type] - * {String[]} [fields] filter fields - * {function} [filter] filter items - * {String | function} [order] Order the items by - * a field name or custom sort function. - * @return {Object[]} mappedItems - */ - DataSet.prototype.map = function (callback, options) { - var filter = options && options.filter, - type = options && options.type || this._options.type, - mappedItems = [], - data = this._data, - item; - - // convert and filter items - for (var id in data) { - if (data.hasOwnProperty(id)) { - item = this._getItem(id, type); - if (!filter || filter(item)) { - mappedItems.push(callback(item, id)); - } - } - } - - // order items - if (options && options.order) { - this._sort(mappedItems, options.order); - } - - return mappedItems; - }; - - /** - * Filter the fields of an item - * @param {Object} item - * @param {String[]} fields Field names - * @return {Object} filteredItem - * @private - */ - DataSet.prototype._filterFields = function (item, fields) { - var filteredItem = {}; - - for (var field in item) { - if (item.hasOwnProperty(field) && (fields.indexOf(field) != -1)) { - filteredItem[field] = item[field]; - } - } - - return filteredItem; - }; - - /** - * Sort the provided array with items - * @param {Object[]} items - * @param {String | function} order A field name or custom sort function. - * @private - */ - DataSet.prototype._sort = function (items, order) { - if (util.isString(order)) { - // order by provided field name - var name = order; // field name - items.sort(function (a, b) { - var av = a[name]; - var bv = b[name]; - return (av > bv) ? 1 : ((av < bv) ? -1 : 0); - }); - } - else if (typeof order === 'function') { - // order by sort function - items.sort(order); - } - // TODO: extend order by an Object {field:String, direction:String} - // where direction can be 'asc' or 'desc' - else { - throw new TypeError('Order must be a function or a string'); - } - }; - - /** - * Remove an object by pointer or by id - * @param {String | Number | Object | Array} id Object or id, or an array with - * objects or ids to be removed - * @param {String} [senderId] Optional sender id - * @return {Array} removedIds - */ - DataSet.prototype.remove = function (id, senderId) { - var removedIds = [], - i, len, removedId; - - if (Array.isArray(id)) { - for (i = 0, len = id.length; i < len; i++) { - removedId = this._remove(id[i]); - if (removedId != null) { - removedIds.push(removedId); - } - } - } - else { - removedId = this._remove(id); - if (removedId != null) { - removedIds.push(removedId); - } - } - - if (removedIds.length) { - this._trigger('remove', {items: removedIds}, senderId); - } - - return removedIds; - }; - - /** - * Remove an item by its id - * @param {Number | String | Object} id id or item - * @returns {Number | String | null} id - * @private - */ - DataSet.prototype._remove = function (id) { - if (util.isNumber(id) || util.isString(id)) { - if (this._data[id]) { - delete this._data[id]; - return id; - } - } - else if (id instanceof Object) { - var itemId = id[this._fieldId]; - if (itemId && this._data[itemId]) { - delete this._data[itemId]; - return itemId; - } - } - return null; - }; - - /** - * Clear the data - * @param {String} [senderId] Optional sender id - * @return {Array} removedIds The ids of all removed items - */ - DataSet.prototype.clear = function (senderId) { - var ids = Object.keys(this._data); - - this._data = {}; - - this._trigger('remove', {items: ids}, senderId); - - return ids; - }; - - /** - * Find the item with maximum value of a specified field - * @param {String} field - * @return {Object | null} item Item containing max value, or null if no items - */ - DataSet.prototype.max = function (field) { - var data = this._data, - max = null, - maxField = null; - - for (var id in data) { - if (data.hasOwnProperty(id)) { - var item = data[id]; - var itemField = item[field]; - if (itemField != null && (!max || itemField > maxField)) { - max = item; - maxField = itemField; - } - } - } - - return max; - }; - - /** - * Find the item with minimum value of a specified field - * @param {String} field - * @return {Object | null} item Item containing max value, or null if no items - */ - DataSet.prototype.min = function (field) { - var data = this._data, - min = null, - minField = null; - - for (var id in data) { - if (data.hasOwnProperty(id)) { - var item = data[id]; - var itemField = item[field]; - if (itemField != null && (!min || itemField < minField)) { - min = item; - minField = itemField; - } - } - } - - return min; - }; - - /** - * Find all distinct values of a specified field - * @param {String} field - * @return {Array} values Array containing all distinct values. If data items - * do not contain the specified field are ignored. - * The returned array is unordered. - */ - DataSet.prototype.distinct = function (field) { - var data = this._data; - var values = []; - var fieldType = this._options.type && this._options.type[field] || null; - var count = 0; - var i; - - for (var prop in data) { - if (data.hasOwnProperty(prop)) { - var item = data[prop]; - var value = item[field]; - var exists = false; - for (i = 0; i < count; i++) { - if (values[i] == value) { - exists = true; - break; - } - } - if (!exists && (value !== undefined)) { - values[count] = value; - count++; - } - } - } - - if (fieldType) { - for (i = 0; i < values.length; i++) { - values[i] = util.convert(values[i], fieldType); - } - } - - return values; - }; - - /** - * Add a single item. Will fail when an item with the same id already exists. - * @param {Object} item - * @return {String} id - * @private - */ - DataSet.prototype._addItem = function (item) { - var id = item[this._fieldId]; - - if (id != undefined) { - // check whether this id is already taken - if (this._data[id]) { - // item already exists - throw new Error('Cannot add item: item with id ' + id + ' already exists'); - } - } - else { - // generate an id - id = util.randomUUID(); - item[this._fieldId] = id; - } - - var d = {}; - for (var field in item) { - if (item.hasOwnProperty(field)) { - var fieldType = this._type[field]; // type may be undefined - d[field] = util.convert(item[field], fieldType); - } - } - this._data[id] = d; - - return id; - }; - - /** - * Get an item. Fields can be converted to a specific type - * @param {String} id - * @param {Object.} [types] field types to convert - * @return {Object | null} item - * @private - */ - DataSet.prototype._getItem = function (id, types) { - var field, value; - - // get the item from the dataset - var raw = this._data[id]; - if (!raw) { - return null; - } - - // convert the items field types - var converted = {}; - if (types) { - for (field in raw) { - if (raw.hasOwnProperty(field)) { - value = raw[field]; - converted[field] = util.convert(value, types[field]); - } - } - } - else { - // no field types specified, no converting needed - for (field in raw) { - if (raw.hasOwnProperty(field)) { - value = raw[field]; - converted[field] = value; - } - } - } - return converted; - }; - - /** - * Update a single item: merge with existing item. - * Will fail when the item has no id, or when there does not exist an item - * with the same id. - * @param {Object} item - * @return {String} id - * @private - */ - DataSet.prototype._updateItem = function (item) { - var id = item[this._fieldId]; - if (id == undefined) { - throw new Error('Cannot update item: item has no id (item: ' + JSON.stringify(item) + ')'); - } - var d = this._data[id]; - if (!d) { - // item doesn't exist - throw new Error('Cannot update item: no item with id ' + id + ' found'); - } - - // merge with current item - for (var field in item) { - if (item.hasOwnProperty(field)) { - var fieldType = this._type[field]; // type may be undefined - d[field] = util.convert(item[field], fieldType); - } - } - - return id; - }; - - /** - * Get an array with the column names of a Google DataTable - * @param {DataTable} dataTable - * @return {String[]} columnNames - * @private - */ - DataSet.prototype._getColumnNames = function (dataTable) { - var columns = []; - for (var col = 0, cols = dataTable.getNumberOfColumns(); col < cols; col++) { - columns[col] = dataTable.getColumnId(col) || dataTable.getColumnLabel(col); - } - return columns; - }; - - /** - * Append an item as a row to the dataTable - * @param dataTable - * @param columns - * @param item - * @private - */ - DataSet.prototype._appendRow = function (dataTable, columns, item) { - var row = dataTable.addRow(); - - for (var col = 0, cols = columns.length; col < cols; col++) { - var field = columns[col]; - dataTable.setValue(row, col, item[field]); - } - }; - - module.exports = DataSet; - - -/***/ }, -/* 4 */ -/***/ function(module, exports, __webpack_require__) { - - var util = __webpack_require__(1); - var DataSet = __webpack_require__(3); - - /** - * DataView - * - * a dataview offers a filtered view on a dataset or an other dataview. - * - * @param {DataSet | DataView} data - * @param {Object} [options] Available options: see method get - * - * @constructor DataView - */ - function DataView (data, options) { - this._data = null; - this._ids = {}; // ids of the items currently in memory (just contains a boolean true) - this._options = options || {}; - this._fieldId = 'id'; // name of the field containing id - this._subscribers = {}; // event subscribers - - var me = this; - this.listener = function () { - me._onEvent.apply(me, arguments); - }; - - this.setData(data); - } - - // TODO: implement a function .config() to dynamically update things like configured filter - // and trigger changes accordingly - - /** - * Set a data source for the view - * @param {DataSet | DataView} data - */ - DataView.prototype.setData = function (data) { - var ids, i, len; - - if (this._data) { - // unsubscribe from current dataset - if (this._data.unsubscribe) { - this._data.unsubscribe('*', this.listener); - } - - // trigger a remove of all items in memory - ids = []; - for (var id in this._ids) { - if (this._ids.hasOwnProperty(id)) { - ids.push(id); - } - } - this._ids = {}; - this._trigger('remove', {items: ids}); - } - - this._data = data; - - if (this._data) { - // update fieldId - this._fieldId = this._options.fieldId || - (this._data && this._data.options && this._data.options.fieldId) || - 'id'; - - // trigger an add of all added items - ids = this._data.getIds({filter: this._options && this._options.filter}); - for (i = 0, len = ids.length; i < len; i++) { - id = ids[i]; - this._ids[id] = true; - } - this._trigger('add', {items: ids}); - - // subscribe to new dataset - if (this._data.on) { - this._data.on('*', this.listener); - } - } - }; - - /** - * Get data from the data view - * - * Usage: - * - * get() - * get(options: Object) - * get(options: Object, data: Array | DataTable) - * - * get(id: Number) - * get(id: Number, options: Object) - * get(id: Number, options: Object, data: Array | DataTable) - * - * get(ids: Number[]) - * get(ids: Number[], options: Object) - * get(ids: Number[], options: Object, data: Array | DataTable) - * - * Where: - * - * {Number | String} id The id of an item - * {Number[] | String{}} ids An array with ids of items - * {Object} options An Object with options. Available options: - * {String} [type] Type of data to be returned. Can - * be 'DataTable' or 'Array' (default) - * {Object.} [convert] - * {String[]} [fields] field names to be returned - * {function} [filter] filter items - * {String | function} [order] Order the items by - * a field name or custom sort function. - * {Array | DataTable} [data] If provided, items will be appended to this - * array or table. Required in case of Google - * DataTable. - * @param args - */ - DataView.prototype.get = function (args) { - var me = this; - - // parse the arguments - var ids, options, data; - var firstType = util.getType(arguments[0]); - if (firstType == 'String' || firstType == 'Number' || firstType == 'Array') { - // get(id(s) [, options] [, data]) - ids = arguments[0]; // can be a single id or an array with ids - options = arguments[1]; - data = arguments[2]; - } - else { - // get([, options] [, data]) - options = arguments[0]; - data = arguments[1]; - } - - // extend the options with the default options and provided options - var viewOptions = util.extend({}, this._options, options); - - // create a combined filter method when needed - if (this._options.filter && options && options.filter) { - viewOptions.filter = function (item) { - return me._options.filter(item) && options.filter(item); - } - } - - // build up the call to the linked data set - var getArguments = []; - if (ids != undefined) { - getArguments.push(ids); - } - getArguments.push(viewOptions); - getArguments.push(data); - - return this._data && this._data.get.apply(this._data, getArguments); - }; - - /** - * Get ids of all items or from a filtered set of items. - * @param {Object} [options] An Object with options. Available options: - * {function} [filter] filter items - * {String | function} [order] Order the items by - * a field name or custom sort function. - * @return {Array} ids - */ - DataView.prototype.getIds = function (options) { - var ids; - - if (this._data) { - var defaultFilter = this._options.filter; - var filter; - - if (options && options.filter) { - if (defaultFilter) { - filter = function (item) { - return defaultFilter(item) && options.filter(item); - } - } - else { - filter = options.filter; - } - } - else { - filter = defaultFilter; - } - - ids = this._data.getIds({ - filter: filter, - order: options && options.order - }); - } - else { - ids = []; - } - - return ids; - }; - - /** - * Get the DataSet to which this DataView is connected. In case there is a chain - * of multiple DataViews, the root DataSet of this chain is returned. - * @return {DataSet} dataSet - */ - DataView.prototype.getDataSet = function () { - var dataSet = this; - while (dataSet instanceof DataView) { - dataSet = dataSet._data; - } - return dataSet || null; - }; - - /** - * Event listener. Will propagate all events from the connected data set to - * the subscribers of the DataView, but will filter the items and only trigger - * when there are changes in the filtered data set. - * @param {String} event - * @param {Object | null} params - * @param {String} senderId - * @private - */ - DataView.prototype._onEvent = function (event, params, senderId) { - var i, len, id, item, - ids = params && params.items, - data = this._data, - added = [], - updated = [], - removed = []; - - if (ids && data) { - switch (event) { - case 'add': - // filter the ids of the added items - for (i = 0, len = ids.length; i < len; i++) { - id = ids[i]; - item = this.get(id); - if (item) { - this._ids[id] = true; - added.push(id); - } - } - - break; - - case 'update': - // determine the event from the views viewpoint: an updated - // item can be added, updated, or removed from this view. - for (i = 0, len = ids.length; i < len; i++) { - id = ids[i]; - item = this.get(id); - - if (item) { - if (this._ids[id]) { - updated.push(id); - } - else { - this._ids[id] = true; - added.push(id); - } - } - else { - if (this._ids[id]) { - delete this._ids[id]; - removed.push(id); - } - else { - // nothing interesting for me :-( - } - } - } - - break; - - case 'remove': - // filter the ids of the removed items - for (i = 0, len = ids.length; i < len; i++) { - id = ids[i]; - if (this._ids[id]) { - delete this._ids[id]; - removed.push(id); - } - } - - break; - } - - if (added.length) { - this._trigger('add', {items: added}, senderId); - } - if (updated.length) { - this._trigger('update', {items: updated}, senderId); - } - if (removed.length) { - this._trigger('remove', {items: removed}, senderId); - } - } - }; - - // copy subscription functionality from DataSet - DataView.prototype.on = DataSet.prototype.on; - DataView.prototype.off = DataSet.prototype.off; - DataView.prototype._trigger = DataSet.prototype._trigger; - - // TODO: make these functions deprecated (replaced with `on` and `off` since version 0.5) - DataView.prototype.subscribe = DataView.prototype.on; - DataView.prototype.unsubscribe = DataView.prototype.off; - - module.exports = DataView; - -/***/ }, -/* 5 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * A queue - * @param {Object} options - * Available options: - * - delay: number When provided, the queue will be flushed - * automatically after an inactivity of this delay - * in milliseconds. - * Default value is null. - * - max: number When the queue exceeds the given maximum number - * of entries, the queue is flushed automatically. - * Default value of max is Infinity. - * @constructor - */ - function Queue(options) { - // options - this.delay = null; - this.max = Infinity; - - // properties - this._queue = []; - this._timeout = null; - this._extended = null; - - this.setOptions(options); - } - - /** - * Update the configuration of the queue - * @param {Object} options - * Available options: - * - delay: number When provided, the queue will be flushed - * automatically after an inactivity of this delay - * in milliseconds. - * Default value is null. - * - max: number When the queue exceeds the given maximum number - * of entries, the queue is flushed automatically. - * Default value of max is Infinity. - * @param options - */ - Queue.prototype.setOptions = function (options) { - if (options && typeof options.delay !== 'undefined') { - this.delay = options.delay; - } - if (options && typeof options.max !== 'undefined') { - this.max = options.max; - } - - this._flushIfNeeded(); - }; - - /** - * Extend an object with queuing functionality. - * The object will be extended with a function flush, and the methods provided - * in options.replace will be replaced with queued ones. - * @param {Object} object - * @param {Object} options - * Available options: - * - replace: Array. - * A list with method names of the methods - * on the object to be replaced with queued ones. - * - delay: number When provided, the queue will be flushed - * automatically after an inactivity of this delay - * in milliseconds. - * Default value is null. - * - max: number When the queue exceeds the given maximum number - * of entries, the queue is flushed automatically. - * Default value of max is Infinity. - * @return {Queue} Returns the created queue - */ - Queue.extend = function (object, options) { - var queue = new Queue(options); - - if (object.flush !== undefined) { - throw new Error('Target object already has a property flush'); - } - object.flush = function () { - queue.flush(); - }; - - var methods = [{ - name: 'flush', - original: undefined - }]; - - if (options && options.replace) { - for (var i = 0; i < options.replace.length; i++) { - var name = options.replace[i]; - methods.push({ - name: name, - original: object[name] - }); - queue.replace(object, name); - } - } - - queue._extended = { - object: object, - methods: methods - }; - - return queue; - }; - - /** - * Destroy the queue. The queue will first flush all queued actions, and in - * case it has extended an object, will restore the original object. - */ - Queue.prototype.destroy = function () { - this.flush(); - - if (this._extended) { - var object = this._extended.object; - var methods = this._extended.methods; - for (var i = 0; i < methods.length; i++) { - var method = methods[i]; - if (method.original) { - object[method.name] = method.original; - } - else { - delete object[method.name]; - } - } - this._extended = null; - } - }; - - /** - * Replace a method on an object with a queued version - * @param {Object} object Object having the method - * @param {string} method The method name - */ - Queue.prototype.replace = function(object, method) { - var me = this; - var original = object[method]; - if (!original) { - throw new Error('Method ' + method + ' undefined'); - } - - object[method] = function () { - // create an Array with the arguments - var args = []; - for (var i = 0; i < arguments.length; i++) { - args[i] = arguments[i]; - } - - // add this call to the queue - me.queue({ - args: args, - fn: original, - context: this - }); - }; - }; - - /** - * Queue a call - * @param {function | {fn: function, args: Array} | {fn: function, args: Array, context: Object}} entry - */ - Queue.prototype.queue = function(entry) { - if (typeof entry === 'function') { - this._queue.push({fn: entry}); - } - else { - this._queue.push(entry); - } - - this._flushIfNeeded(); - }; - - /** - * Check whether the queue needs to be flushed - * @private - */ - Queue.prototype._flushIfNeeded = function () { - // flush when the maximum is exceeded. - if (this._queue.length > this.max) { - this.flush(); - } - - // flush after a period of inactivity when a delay is configured - clearTimeout(this._timeout); - if (this.queue.length > 0 && typeof this.delay === 'number') { - var me = this; - this._timeout = setTimeout(function () { - me.flush(); - }, this.delay); - } - }; - - /** - * Flush all queued calls - */ - Queue.prototype.flush = function () { - while (this._queue.length > 0) { - var entry = this._queue.shift(); - entry.fn.apply(entry.context || entry.fn, entry.args || []); - } - }; - - module.exports = Queue; - - -/***/ }, -/* 6 */ -/***/ function(module, exports, __webpack_require__) { - - var Emitter = __webpack_require__(56); - var DataSet = __webpack_require__(3); - var DataView = __webpack_require__(4); - var util = __webpack_require__(1); - var Point3d = __webpack_require__(10); - var Point2d = __webpack_require__(9); - var Camera = __webpack_require__(7); - var Filter = __webpack_require__(8); - var Slider = __webpack_require__(11); - var StepNumber = __webpack_require__(12); - - /** - * @constructor Graph3d - * Graph3d displays data in 3d. - * - * Graph3d is developed in javascript as a Google Visualization Chart. - * - * @param {Element} container The DOM element in which the Graph3d will - * be created. Normally a div element. - * @param {DataSet | DataView | Array} [data] - * @param {Object} [options] - */ - function Graph3d(container, data, options) { - if (!(this instanceof Graph3d)) { - throw new SyntaxError('Constructor must be called with the new operator'); - } - - // create variables and set default values - this.containerElement = container; - this.width = '400px'; - this.height = '400px'; - this.margin = 10; // px - this.defaultXCenter = '55%'; - this.defaultYCenter = '50%'; - - this.xLabel = 'x'; - this.yLabel = 'y'; - this.zLabel = 'z'; - - var passValueFn = function(v) { return v; }; - this.xValueLabel = passValueFn; - this.yValueLabel = passValueFn; - this.zValueLabel = passValueFn; - - this.filterLabel = 'time'; - this.legendLabel = 'value'; - - this.style = Graph3d.STYLE.DOT; - this.showPerspective = true; - this.showGrid = true; - this.keepAspectRatio = true; - this.showShadow = false; - this.showGrayBottom = false; // TODO: this does not work correctly - this.showTooltip = false; - this.verticalRatio = 0.5; // 0.1 to 1.0, where 1.0 results in a 'cube' - - this.animationInterval = 1000; // milliseconds - this.animationPreload = false; - - this.camera = new Camera(); - this.eye = new Point3d(0, 0, -1); // TODO: set eye.z about 3/4 of the width of the window? - - this.dataTable = null; // The original data table - this.dataPoints = null; // The table with point objects - - // the column indexes - this.colX = undefined; - this.colY = undefined; - this.colZ = undefined; - this.colValue = undefined; - this.colFilter = undefined; - - this.xMin = 0; - this.xStep = undefined; // auto by default - this.xMax = 1; - this.yMin = 0; - this.yStep = undefined; // auto by default - this.yMax = 1; - this.zMin = 0; - this.zStep = undefined; // auto by default - this.zMax = 1; - this.valueMin = 0; - this.valueMax = 1; - this.xBarWidth = 1; - this.yBarWidth = 1; - // TODO: customize axis range - - // constants - this.colorAxis = '#4D4D4D'; - this.colorGrid = '#D3D3D3'; - this.colorDot = '#7DC1FF'; - this.colorDotBorder = '#3267D2'; - - // create a frame and canvas - this.create(); - - // apply options (also when undefined) - this.setOptions(options); - - // apply data - if (data) { - this.setData(data); - } - } - - // Extend Graph3d with an Emitter mixin - Emitter(Graph3d.prototype); - - /** - * Calculate the scaling values, dependent on the range in x, y, and z direction - */ - Graph3d.prototype._setScale = function() { - this.scale = new Point3d(1 / (this.xMax - this.xMin), - 1 / (this.yMax - this.yMin), - 1 / (this.zMax - this.zMin)); - - // keep aspect ration between x and y scale if desired - if (this.keepAspectRatio) { - if (this.scale.x < this.scale.y) { - //noinspection JSSuspiciousNameCombination - this.scale.y = this.scale.x; - } - else { - //noinspection JSSuspiciousNameCombination - this.scale.x = this.scale.y; - } - } - - // scale the vertical axis - this.scale.z *= this.verticalRatio; - // TODO: can this be automated? verticalRatio? - - // determine scale for (optional) value - this.scale.value = 1 / (this.valueMax - this.valueMin); - - // position the camera arm - var xCenter = (this.xMax + this.xMin) / 2 * this.scale.x; - var yCenter = (this.yMax + this.yMin) / 2 * this.scale.y; - var zCenter = (this.zMax + this.zMin) / 2 * this.scale.z; - this.camera.setArmLocation(xCenter, yCenter, zCenter); - }; - - - /** - * Convert a 3D location to a 2D location on screen - * http://en.wikipedia.org/wiki/3D_projection - * @param {Point3d} point3d A 3D point with parameters x, y, z - * @return {Point2d} point2d A 2D point with parameters x, y - */ - Graph3d.prototype._convert3Dto2D = function(point3d) { - var translation = this._convertPointToTranslation(point3d); - return this._convertTranslationToScreen(translation); - }; - - /** - * Convert a 3D location its translation seen from the camera - * http://en.wikipedia.org/wiki/3D_projection - * @param {Point3d} point3d A 3D point with parameters x, y, z - * @return {Point3d} translation A 3D point with parameters x, y, z This is - * the translation of the point, seen from the - * camera - */ - Graph3d.prototype._convertPointToTranslation = function(point3d) { - var ax = point3d.x * this.scale.x, - ay = point3d.y * this.scale.y, - az = point3d.z * this.scale.z, - - cx = this.camera.getCameraLocation().x, - cy = this.camera.getCameraLocation().y, - cz = this.camera.getCameraLocation().z, - - // calculate angles - sinTx = Math.sin(this.camera.getCameraRotation().x), - cosTx = Math.cos(this.camera.getCameraRotation().x), - sinTy = Math.sin(this.camera.getCameraRotation().y), - cosTy = Math.cos(this.camera.getCameraRotation().y), - sinTz = Math.sin(this.camera.getCameraRotation().z), - cosTz = Math.cos(this.camera.getCameraRotation().z), - - // calculate translation - dx = cosTy * (sinTz * (ay - cy) + cosTz * (ax - cx)) - sinTy * (az - cz), - dy = sinTx * (cosTy * (az - cz) + sinTy * (sinTz * (ay - cy) + cosTz * (ax - cx))) + cosTx * (cosTz * (ay - cy) - sinTz * (ax-cx)), - dz = cosTx * (cosTy * (az - cz) + sinTy * (sinTz * (ay - cy) + cosTz * (ax - cx))) - sinTx * (cosTz * (ay - cy) - sinTz * (ax-cx)); - - return new Point3d(dx, dy, dz); - }; - - /** - * Convert a translation point to a point on the screen - * @param {Point3d} translation A 3D point with parameters x, y, z This is - * the translation of the point, seen from the - * camera - * @return {Point2d} point2d A 2D point with parameters x, y - */ - Graph3d.prototype._convertTranslationToScreen = function(translation) { - var ex = this.eye.x, - ey = this.eye.y, - ez = this.eye.z, - dx = translation.x, - dy = translation.y, - dz = translation.z; - - // calculate position on screen from translation - var bx; - var by; - if (this.showPerspective) { - bx = (dx - ex) * (ez / dz); - by = (dy - ey) * (ez / dz); - } - else { - bx = dx * -(ez / this.camera.getArmLength()); - by = dy * -(ez / this.camera.getArmLength()); - } - - // shift and scale the point to the center of the screen - // use the width of the graph to scale both horizontally and vertically. - return new Point2d( - this.xcenter + bx * this.frame.canvas.clientWidth, - this.ycenter - by * this.frame.canvas.clientWidth); - }; - - /** - * Set the background styling for the graph - * @param {string | {fill: string, stroke: string, strokeWidth: string}} backgroundColor - */ - Graph3d.prototype._setBackgroundColor = function(backgroundColor) { - var fill = 'white'; - var stroke = 'gray'; - var strokeWidth = 1; - - if (typeof(backgroundColor) === 'string') { - fill = backgroundColor; - stroke = 'none'; - strokeWidth = 0; - } - else if (typeof(backgroundColor) === 'object') { - if (backgroundColor.fill !== undefined) fill = backgroundColor.fill; - if (backgroundColor.stroke !== undefined) stroke = backgroundColor.stroke; - if (backgroundColor.strokeWidth !== undefined) strokeWidth = backgroundColor.strokeWidth; - } - else if (backgroundColor === undefined) { - // use use defaults - } - else { - throw 'Unsupported type of backgroundColor'; - } - - this.frame.style.backgroundColor = fill; - this.frame.style.borderColor = stroke; - this.frame.style.borderWidth = strokeWidth + 'px'; - this.frame.style.borderStyle = 'solid'; - }; - - - /// enumerate the available styles - Graph3d.STYLE = { - BAR: 0, - BARCOLOR: 1, - BARSIZE: 2, - DOT : 3, - DOTLINE : 4, - DOTCOLOR: 5, - DOTSIZE: 6, - GRID : 7, - LINE: 8, - SURFACE : 9 - }; - - /** - * Retrieve the style index from given styleName - * @param {string} styleName Style name such as 'dot', 'grid', 'dot-line' - * @return {Number} styleNumber Enumeration value representing the style, or -1 - * when not found - */ - Graph3d.prototype._getStyleNumber = function(styleName) { - switch (styleName) { - case 'dot': return Graph3d.STYLE.DOT; - case 'dot-line': return Graph3d.STYLE.DOTLINE; - case 'dot-color': return Graph3d.STYLE.DOTCOLOR; - case 'dot-size': return Graph3d.STYLE.DOTSIZE; - case 'line': return Graph3d.STYLE.LINE; - case 'grid': return Graph3d.STYLE.GRID; - case 'surface': return Graph3d.STYLE.SURFACE; - case 'bar': return Graph3d.STYLE.BAR; - case 'bar-color': return Graph3d.STYLE.BARCOLOR; - case 'bar-size': return Graph3d.STYLE.BARSIZE; - } - - return -1; - }; - - /** - * Determine the indexes of the data columns, based on the given style and data - * @param {DataSet} data - * @param {Number} style - */ - Graph3d.prototype._determineColumnIndexes = function(data, style) { - if (this.style === Graph3d.STYLE.DOT || - this.style === Graph3d.STYLE.DOTLINE || - this.style === Graph3d.STYLE.LINE || - this.style === Graph3d.STYLE.GRID || - this.style === Graph3d.STYLE.SURFACE || - this.style === Graph3d.STYLE.BAR) { - // 3 columns expected, and optionally a 4th with filter values - this.colX = 0; - this.colY = 1; - this.colZ = 2; - this.colValue = undefined; - - if (data.getNumberOfColumns() > 3) { - this.colFilter = 3; - } - } - else if (this.style === Graph3d.STYLE.DOTCOLOR || - this.style === Graph3d.STYLE.DOTSIZE || - this.style === Graph3d.STYLE.BARCOLOR || - this.style === Graph3d.STYLE.BARSIZE) { - // 4 columns expected, and optionally a 5th with filter values - this.colX = 0; - this.colY = 1; - this.colZ = 2; - this.colValue = 3; - - if (data.getNumberOfColumns() > 4) { - this.colFilter = 4; - } - } - else { - throw 'Unknown style "' + this.style + '"'; - } - }; - - Graph3d.prototype.getNumberOfRows = function(data) { - return data.length; - } - - - Graph3d.prototype.getNumberOfColumns = function(data) { - var counter = 0; - for (var column in data[0]) { - if (data[0].hasOwnProperty(column)) { - counter++; - } - } - return counter; - } - - - Graph3d.prototype.getDistinctValues = function(data, column) { - var distinctValues = []; - for (var i = 0; i < data.length; i++) { - if (distinctValues.indexOf(data[i][column]) == -1) { - distinctValues.push(data[i][column]); - } - } - return distinctValues; - } - - - Graph3d.prototype.getColumnRange = function(data,column) { - var minMax = {min:data[0][column],max:data[0][column]}; - for (var i = 0; i < data.length; i++) { - if (minMax.min > data[i][column]) { minMax.min = data[i][column]; } - if (minMax.max < data[i][column]) { minMax.max = data[i][column]; } - } - return minMax; - }; - - /** - * Initialize the data from the data table. Calculate minimum and maximum values - * and column index values - * @param {Array | DataSet | DataView} rawData The data containing the items for the Graph. - * @param {Number} style Style Number - */ - Graph3d.prototype._dataInitialize = function (rawData, style) { - var me = this; - - // unsubscribe from the dataTable - if (this.dataSet) { - this.dataSet.off('*', this._onChange); - } - - if (rawData === undefined) - return; - - if (Array.isArray(rawData)) { - rawData = new DataSet(rawData); - } - - var data; - if (rawData instanceof DataSet || rawData instanceof DataView) { - data = rawData.get(); - } - else { - throw new Error('Array, DataSet, or DataView expected'); - } - - if (data.length == 0) - return; - - this.dataSet = rawData; - this.dataTable = data; - - // subscribe to changes in the dataset - this._onChange = function () { - me.setData(me.dataSet); - }; - this.dataSet.on('*', this._onChange); - - // _determineColumnIndexes - // getNumberOfRows (points) - // getNumberOfColumns (x,y,z,v,t,t1,t2...) - // getDistinctValues (unique values?) - // getColumnRange - - // determine the location of x,y,z,value,filter columns - this.colX = 'x'; - this.colY = 'y'; - this.colZ = 'z'; - this.colValue = 'style'; - this.colFilter = 'filter'; - - - - // check if a filter column is provided - if (data[0].hasOwnProperty('filter')) { - if (this.dataFilter === undefined) { - this.dataFilter = new Filter(rawData, this.colFilter, this); - this.dataFilter.setOnLoadCallback(function() {me.redraw();}); - } - } - - - var withBars = this.style == Graph3d.STYLE.BAR || - this.style == Graph3d.STYLE.BARCOLOR || - this.style == Graph3d.STYLE.BARSIZE; - - // determine barWidth from data - if (withBars) { - if (this.defaultXBarWidth !== undefined) { - this.xBarWidth = this.defaultXBarWidth; - } - else { - var dataX = this.getDistinctValues(data,this.colX); - this.xBarWidth = (dataX[1] - dataX[0]) || 1; - } - - if (this.defaultYBarWidth !== undefined) { - this.yBarWidth = this.defaultYBarWidth; - } - else { - var dataY = this.getDistinctValues(data,this.colY); - this.yBarWidth = (dataY[1] - dataY[0]) || 1; - } - } - - // calculate minimums and maximums - var xRange = this.getColumnRange(data,this.colX); - if (withBars) { - xRange.min -= this.xBarWidth / 2; - xRange.max += this.xBarWidth / 2; - } - this.xMin = (this.defaultXMin !== undefined) ? this.defaultXMin : xRange.min; - this.xMax = (this.defaultXMax !== undefined) ? this.defaultXMax : xRange.max; - if (this.xMax <= this.xMin) this.xMax = this.xMin + 1; - this.xStep = (this.defaultXStep !== undefined) ? this.defaultXStep : (this.xMax-this.xMin)/5; - - var yRange = this.getColumnRange(data,this.colY); - if (withBars) { - yRange.min -= this.yBarWidth / 2; - yRange.max += this.yBarWidth / 2; - } - this.yMin = (this.defaultYMin !== undefined) ? this.defaultYMin : yRange.min; - this.yMax = (this.defaultYMax !== undefined) ? this.defaultYMax : yRange.max; - if (this.yMax <= this.yMin) this.yMax = this.yMin + 1; - this.yStep = (this.defaultYStep !== undefined) ? this.defaultYStep : (this.yMax-this.yMin)/5; - - var zRange = this.getColumnRange(data,this.colZ); - this.zMin = (this.defaultZMin !== undefined) ? this.defaultZMin : zRange.min; - this.zMax = (this.defaultZMax !== undefined) ? this.defaultZMax : zRange.max; - if (this.zMax <= this.zMin) this.zMax = this.zMin + 1; - this.zStep = (this.defaultZStep !== undefined) ? this.defaultZStep : (this.zMax-this.zMin)/5; - - if (this.colValue !== undefined) { - var valueRange = this.getColumnRange(data,this.colValue); - this.valueMin = (this.defaultValueMin !== undefined) ? this.defaultValueMin : valueRange.min; - this.valueMax = (this.defaultValueMax !== undefined) ? this.defaultValueMax : valueRange.max; - if (this.valueMax <= this.valueMin) this.valueMax = this.valueMin + 1; - } - - // set the scale dependent on the ranges. - this._setScale(); - }; - - - - /** - * Filter the data based on the current filter - * @param {Array} data - * @return {Array} dataPoints Array with point objects which can be drawn on screen - */ - Graph3d.prototype._getDataPoints = function (data) { - // TODO: store the created matrix dataPoints in the filters instead of reloading each time - var x, y, i, z, obj, point; - - var dataPoints = []; - - if (this.style === Graph3d.STYLE.GRID || - this.style === Graph3d.STYLE.SURFACE) { - // copy all values from the google data table to a matrix - // the provided values are supposed to form a grid of (x,y) positions - - // create two lists with all present x and y values - var dataX = []; - var dataY = []; - for (i = 0; i < this.getNumberOfRows(data); i++) { - x = data[i][this.colX] || 0; - y = data[i][this.colY] || 0; - - if (dataX.indexOf(x) === -1) { - dataX.push(x); - } - if (dataY.indexOf(y) === -1) { - dataY.push(y); - } - } - - var sortNumber = function (a, b) { - return a - b; - }; - dataX.sort(sortNumber); - dataY.sort(sortNumber); - - // create a grid, a 2d matrix, with all values. - var dataMatrix = []; // temporary data matrix - for (i = 0; i < data.length; i++) { - x = data[i][this.colX] || 0; - y = data[i][this.colY] || 0; - z = data[i][this.colZ] || 0; - - var xIndex = dataX.indexOf(x); // TODO: implement Array().indexOf() for Internet Explorer - var yIndex = dataY.indexOf(y); - - if (dataMatrix[xIndex] === undefined) { - dataMatrix[xIndex] = []; - } - - var point3d = new Point3d(); - point3d.x = x; - point3d.y = y; - point3d.z = z; - - obj = {}; - obj.point = point3d; - obj.trans = undefined; - obj.screen = undefined; - obj.bottom = new Point3d(x, y, this.zMin); - - dataMatrix[xIndex][yIndex] = obj; - - dataPoints.push(obj); - } - - // fill in the pointers to the neighbors. - for (x = 0; x < dataMatrix.length; x++) { - for (y = 0; y < dataMatrix[x].length; y++) { - if (dataMatrix[x][y]) { - dataMatrix[x][y].pointRight = (x < dataMatrix.length-1) ? dataMatrix[x+1][y] : undefined; - dataMatrix[x][y].pointTop = (y < dataMatrix[x].length-1) ? dataMatrix[x][y+1] : undefined; - dataMatrix[x][y].pointCross = - (x < dataMatrix.length-1 && y < dataMatrix[x].length-1) ? - dataMatrix[x+1][y+1] : - undefined; - } - } - } - } - else { // 'dot', 'dot-line', etc. - // copy all values from the google data table to a list with Point3d objects - for (i = 0; i < data.length; i++) { - point = new Point3d(); - point.x = data[i][this.colX] || 0; - point.y = data[i][this.colY] || 0; - point.z = data[i][this.colZ] || 0; - - if (this.colValue !== undefined) { - point.value = data[i][this.colValue] || 0; - } - - obj = {}; - obj.point = point; - obj.bottom = new Point3d(point.x, point.y, this.zMin); - obj.trans = undefined; - obj.screen = undefined; - - dataPoints.push(obj); - } - } - - return dataPoints; - }; - - /** - * Create the main frame for the Graph3d. - * This function is executed once when a Graph3d object is created. The frame - * contains a canvas, and this canvas contains all objects like the axis and - * nodes. - */ - Graph3d.prototype.create = function () { - // remove all elements from the container element. - while (this.containerElement.hasChildNodes()) { - this.containerElement.removeChild(this.containerElement.firstChild); - } - - this.frame = document.createElement('div'); - this.frame.style.position = 'relative'; - this.frame.style.overflow = 'hidden'; - - // create the graph canvas (HTML canvas element) - this.frame.canvas = document.createElement( 'canvas' ); - this.frame.canvas.style.position = 'relative'; - this.frame.appendChild(this.frame.canvas); - //if (!this.frame.canvas.getContext) { - { - var noCanvas = document.createElement( 'DIV' ); - noCanvas.style.color = 'red'; - noCanvas.style.fontWeight = 'bold' ; - noCanvas.style.padding = '10px'; - noCanvas.innerHTML = 'Error: your browser does not support HTML canvas'; - this.frame.canvas.appendChild(noCanvas); - } - - this.frame.filter = document.createElement( 'div' ); - this.frame.filter.style.position = 'absolute'; - this.frame.filter.style.bottom = '0px'; - this.frame.filter.style.left = '0px'; - this.frame.filter.style.width = '100%'; - this.frame.appendChild(this.frame.filter); - - // add event listeners to handle moving and zooming the contents - var me = this; - var onmousedown = function (event) {me._onMouseDown(event);}; - var ontouchstart = function (event) {me._onTouchStart(event);}; - var onmousewheel = function (event) {me._onWheel(event);}; - var ontooltip = function (event) {me._onTooltip(event);}; - // TODO: these events are never cleaned up... can give a 'memory leakage' - - util.addEventListener(this.frame.canvas, 'keydown', onkeydown); - util.addEventListener(this.frame.canvas, 'mousedown', onmousedown); - util.addEventListener(this.frame.canvas, 'touchstart', ontouchstart); - util.addEventListener(this.frame.canvas, 'mousewheel', onmousewheel); - util.addEventListener(this.frame.canvas, 'mousemove', ontooltip); - - // add the new graph to the container element - this.containerElement.appendChild(this.frame); - }; - - - /** - * Set a new size for the graph - * @param {string} width Width in pixels or percentage (for example '800px' - * or '50%') - * @param {string} height Height in pixels or percentage (for example '400px' - * or '30%') - */ - Graph3d.prototype.setSize = function(width, height) { - this.frame.style.width = width; - this.frame.style.height = height; - - this._resizeCanvas(); - }; - - /** - * Resize the canvas to the current size of the frame - */ - Graph3d.prototype._resizeCanvas = function() { - this.frame.canvas.style.width = '100%'; - this.frame.canvas.style.height = '100%'; - - this.frame.canvas.width = this.frame.canvas.clientWidth; - this.frame.canvas.height = this.frame.canvas.clientHeight; - - // adjust with for margin - this.frame.filter.style.width = (this.frame.canvas.clientWidth - 2 * 10) + 'px'; - }; - - /** - * Start animation - */ - Graph3d.prototype.animationStart = function() { - if (!this.frame.filter || !this.frame.filter.slider) - throw 'No animation available'; - - this.frame.filter.slider.play(); - }; - - - /** - * Stop animation - */ - Graph3d.prototype.animationStop = function() { - if (!this.frame.filter || !this.frame.filter.slider) return; - - this.frame.filter.slider.stop(); - }; - - - /** - * Resize the center position based on the current values in this.defaultXCenter - * and this.defaultYCenter (which are strings with a percentage or a value - * in pixels). The center positions are the variables this.xCenter - * and this.yCenter - */ - Graph3d.prototype._resizeCenter = function() { - // calculate the horizontal center position - if (this.defaultXCenter.charAt(this.defaultXCenter.length-1) === '%') { - this.xcenter = - parseFloat(this.defaultXCenter) / 100 * - this.frame.canvas.clientWidth; - } - else { - this.xcenter = parseFloat(this.defaultXCenter); // supposed to be in px - } - - // calculate the vertical center position - if (this.defaultYCenter.charAt(this.defaultYCenter.length-1) === '%') { - this.ycenter = - parseFloat(this.defaultYCenter) / 100 * - (this.frame.canvas.clientHeight - this.frame.filter.clientHeight); - } - else { - this.ycenter = parseFloat(this.defaultYCenter); // supposed to be in px - } - }; - - /** - * Set the rotation and distance of the camera - * @param {Object} pos An object with the camera position. The object - * contains three parameters: - * - horizontal {Number} - * The horizontal rotation, between 0 and 2*PI. - * Optional, can be left undefined. - * - vertical {Number} - * The vertical rotation, between 0 and 0.5*PI - * if vertical=0.5*PI, the graph is shown from the - * top. Optional, can be left undefined. - * - distance {Number} - * The (normalized) distance of the camera to the - * center of the graph, a value between 0.71 and 5.0. - * Optional, can be left undefined. - */ - Graph3d.prototype.setCameraPosition = function(pos) { - if (pos === undefined) { - return; - } - - if (pos.horizontal !== undefined && pos.vertical !== undefined) { - this.camera.setArmRotation(pos.horizontal, pos.vertical); - } - - if (pos.distance !== undefined) { - this.camera.setArmLength(pos.distance); - } - - this.redraw(); - }; - - - /** - * Retrieve the current camera rotation - * @return {object} An object with parameters horizontal, vertical, and - * distance - */ - Graph3d.prototype.getCameraPosition = function() { - var pos = this.camera.getArmRotation(); - pos.distance = this.camera.getArmLength(); - return pos; - }; - - /** - * Load data into the 3D Graph - */ - Graph3d.prototype._readData = function(data) { - // read the data - this._dataInitialize(data, this.style); - - - if (this.dataFilter) { - // apply filtering - this.dataPoints = this.dataFilter._getDataPoints(); - } - else { - // no filtering. load all data - this.dataPoints = this._getDataPoints(this.dataTable); - } - - // draw the filter - this._redrawFilter(); - }; - - /** - * Replace the dataset of the Graph3d - * @param {Array | DataSet | DataView} data - */ - Graph3d.prototype.setData = function (data) { - this._readData(data); - this.redraw(); - - // start animation when option is true - if (this.animationAutoStart && this.dataFilter) { - this.animationStart(); - } - }; - - /** - * Update the options. Options will be merged with current options - * @param {Object} options - */ - Graph3d.prototype.setOptions = function (options) { - var cameraPosition = undefined; - - this.animationStop(); - - if (options !== undefined) { - // retrieve parameter values - if (options.width !== undefined) this.width = options.width; - if (options.height !== undefined) this.height = options.height; - - if (options.xCenter !== undefined) this.defaultXCenter = options.xCenter; - if (options.yCenter !== undefined) this.defaultYCenter = options.yCenter; - - if (options.filterLabel !== undefined) this.filterLabel = options.filterLabel; - if (options.legendLabel !== undefined) this.legendLabel = options.legendLabel; - if (options.xLabel !== undefined) this.xLabel = options.xLabel; - if (options.yLabel !== undefined) this.yLabel = options.yLabel; - if (options.zLabel !== undefined) this.zLabel = options.zLabel; - - if (options.xValueLabel !== undefined) this.xValueLabel = options.xValueLabel; - if (options.yValueLabel !== undefined) this.yValueLabel = options.yValueLabel; - if (options.zValueLabel !== undefined) this.zValueLabel = options.zValueLabel; - - if (options.style !== undefined) { - var styleNumber = this._getStyleNumber(options.style); - if (styleNumber !== -1) { - this.style = styleNumber; - } - } - if (options.showGrid !== undefined) this.showGrid = options.showGrid; - if (options.showPerspective !== undefined) this.showPerspective = options.showPerspective; - if (options.showShadow !== undefined) this.showShadow = options.showShadow; - if (options.tooltip !== undefined) this.showTooltip = options.tooltip; - if (options.showAnimationControls !== undefined) this.showAnimationControls = options.showAnimationControls; - if (options.keepAspectRatio !== undefined) this.keepAspectRatio = options.keepAspectRatio; - if (options.verticalRatio !== undefined) this.verticalRatio = options.verticalRatio; - - if (options.animationInterval !== undefined) this.animationInterval = options.animationInterval; - if (options.animationPreload !== undefined) this.animationPreload = options.animationPreload; - if (options.animationAutoStart !== undefined)this.animationAutoStart = options.animationAutoStart; + YEAR = 0, + MONTH = 1, + DATE = 2, + HOUR = 3, + MINUTE = 4, + SECOND = 5, + MILLISECOND = 6, - if (options.xBarWidth !== undefined) this.defaultXBarWidth = options.xBarWidth; - if (options.yBarWidth !== undefined) this.defaultYBarWidth = options.yBarWidth; + // internal storage for locale config files + locales = {}, - if (options.xMin !== undefined) this.defaultXMin = options.xMin; - if (options.xStep !== undefined) this.defaultXStep = options.xStep; - if (options.xMax !== undefined) this.defaultXMax = options.xMax; - if (options.yMin !== undefined) this.defaultYMin = options.yMin; - if (options.yStep !== undefined) this.defaultYStep = options.yStep; - if (options.yMax !== undefined) this.defaultYMax = options.yMax; - if (options.zMin !== undefined) this.defaultZMin = options.zMin; - if (options.zStep !== undefined) this.defaultZStep = options.zStep; - if (options.zMax !== undefined) this.defaultZMax = options.zMax; - if (options.valueMin !== undefined) this.defaultValueMin = options.valueMin; - if (options.valueMax !== undefined) this.defaultValueMax = options.valueMax; + // extra moment internal properties (plugins register props here) + momentProperties = [], - if (options.cameraPosition !== undefined) cameraPosition = options.cameraPosition; + // check for nodeJS + hasModule = (typeof module !== 'undefined' && module && module.exports), - if (cameraPosition !== undefined) { - this.camera.setArmRotation(cameraPosition.horizontal, cameraPosition.vertical); - this.camera.setArmLength(cameraPosition.distance); - } - else { - this.camera.setArmRotation(1.0, 0.5); - this.camera.setArmLength(1.7); - } - } + // ASP.NET json date format regex + aspNetJsonRegex = /^\/?Date\((\-?\d+)/i, + aspNetTimeSpanJsonRegex = /(\-)?(?:(\d*)\.)?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/, - this._setBackgroundColor(options && options.backgroundColor); + // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html + // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere + isoDurationRegex = /^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/, - this.setSize(this.width, this.height); + // format tokens + formattingTokens = /(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Q|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,4}|x|X|zz?|ZZ?|.)/g, + localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g, - // re-load the data - if (this.dataTable) { - this.setData(this.dataTable); - } + // parsing token regexes + parseTokenOneOrTwoDigits = /\d\d?/, // 0 - 99 + parseTokenOneToThreeDigits = /\d{1,3}/, // 0 - 999 + parseTokenOneToFourDigits = /\d{1,4}/, // 0 - 9999 + parseTokenOneToSixDigits = /[+\-]?\d{1,6}/, // -999,999 - 999,999 + parseTokenDigits = /\d+/, // nonzero number of digits + parseTokenWord = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i, // any word (or two) characters or numbers including two/three word month in arabic. + parseTokenTimezone = /Z|[\+\-]\d\d:?\d\d/gi, // +00:00 -00:00 +0000 -0000 or Z + parseTokenT = /T/i, // T (ISO separator) + parseTokenOffsetMs = /[\+\-]?\d+/, // 1234567890123 + parseTokenTimestampMs = /[\+\-]?\d+(\.\d{1,3})?/, // 123456789 123456789.123 - // start animation when option is true - if (this.animationAutoStart && this.dataFilter) { - this.animationStart(); - } - }; + //strict parsing regexes + parseTokenOneDigit = /\d/, // 0 - 9 + parseTokenTwoDigits = /\d\d/, // 00 - 99 + parseTokenThreeDigits = /\d{3}/, // 000 - 999 + parseTokenFourDigits = /\d{4}/, // 0000 - 9999 + parseTokenSixDigits = /[+-]?\d{6}/, // -999,999 - 999,999 + parseTokenSignedNumber = /[+-]?\d+/, // -inf - inf - /** - * Redraw the Graph. - */ - Graph3d.prototype.redraw = function() { - if (this.dataPoints === undefined) { - throw 'Error: graph data not initialized'; - } + // iso 8601 regex + // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00) + isoRegex = /^\s*(?:[+-]\d{6}|\d{4})-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/, - this._resizeCanvas(); - this._resizeCenter(); - this._redrawSlider(); - this._redrawClear(); - this._redrawAxis(); + isoFormat = 'YYYY-MM-DDTHH:mm:ssZ', - if (this.style === Graph3d.STYLE.GRID || - this.style === Graph3d.STYLE.SURFACE) { - this._redrawDataGrid(); - } - else if (this.style === Graph3d.STYLE.LINE) { - this._redrawDataLine(); - } - else if (this.style === Graph3d.STYLE.BAR || - this.style === Graph3d.STYLE.BARCOLOR || - this.style === Graph3d.STYLE.BARSIZE) { - this._redrawDataBar(); - } - else { - // style is DOT, DOTLINE, DOTCOLOR, DOTSIZE - this._redrawDataDot(); - } + isoDates = [ + ['YYYYYY-MM-DD', /[+-]\d{6}-\d{2}-\d{2}/], + ['YYYY-MM-DD', /\d{4}-\d{2}-\d{2}/], + ['GGGG-[W]WW-E', /\d{4}-W\d{2}-\d/], + ['GGGG-[W]WW', /\d{4}-W\d{2}/], + ['YYYY-DDD', /\d{4}-\d{3}/] + ], - this._redrawInfo(); - this._redrawLegend(); - }; + // iso time formats and regexes + isoTimes = [ + ['HH:mm:ss.SSSS', /(T| )\d\d:\d\d:\d\d\.\d+/], + ['HH:mm:ss', /(T| )\d\d:\d\d:\d\d/], + ['HH:mm', /(T| )\d\d:\d\d/], + ['HH', /(T| )\d\d/] + ], - /** - * Clear the canvas before redrawing - */ - Graph3d.prototype._redrawClear = function() { - var canvas = this.frame.canvas; - var ctx = canvas.getContext('2d'); + // timezone chunker '+10:00' > ['10', '00'] or '-1530' > ['-15', '30'] + parseTimezoneChunker = /([\+\-]|\d\d)/gi, - ctx.clearRect(0, 0, canvas.width, canvas.height); - }; + // getter and setter names + proxyGettersAndSetters = 'Date|Hours|Minutes|Seconds|Milliseconds'.split('|'), + unitMillisecondFactors = { + 'Milliseconds' : 1, + 'Seconds' : 1e3, + 'Minutes' : 6e4, + 'Hours' : 36e5, + 'Days' : 864e5, + 'Months' : 2592e6, + 'Years' : 31536e6 + }, + unitAliases = { + ms : 'millisecond', + s : 'second', + m : 'minute', + h : 'hour', + d : 'day', + D : 'date', + w : 'week', + W : 'isoWeek', + M : 'month', + Q : 'quarter', + y : 'year', + DDD : 'dayOfYear', + e : 'weekday', + E : 'isoWeekday', + gg: 'weekYear', + GG: 'isoWeekYear' + }, - /** - * Redraw the legend showing the colors - */ - Graph3d.prototype._redrawLegend = function() { - var y; + camelFunctions = { + dayofyear : 'dayOfYear', + isoweekday : 'isoWeekday', + isoweek : 'isoWeek', + weekyear : 'weekYear', + isoweekyear : 'isoWeekYear' + }, - if (this.style === Graph3d.STYLE.DOTCOLOR || - this.style === Graph3d.STYLE.DOTSIZE) { + // format function strings + formatFunctions = {}, - var dotSize = this.frame.clientWidth * 0.02; + // default relative time thresholds + relativeTimeThresholds = { + s: 45, // seconds to minute + m: 45, // minutes to hour + h: 22, // hours to day + d: 26, // days to month + M: 11 // months to year + }, - var widthMin, widthMax; - if (this.style === Graph3d.STYLE.DOTSIZE) { - widthMin = dotSize / 2; // px - widthMax = dotSize / 2 + dotSize * 2; // Todo: put this in one function - } - else { - widthMin = 20; // px - widthMax = 20; // px - } + // tokens to ordinalize and pad + ordinalizeTokens = 'DDD w W M D d'.split(' '), + paddedTokens = 'M D H h m s w W'.split(' '), - var height = Math.max(this.frame.clientHeight * 0.25, 100); - var top = this.margin; - var right = this.frame.clientWidth - this.margin; - var left = right - widthMax; - var bottom = top + height; - } + formatTokenFunctions = { + M : function () { + return this.month() + 1; + }, + MMM : function (format) { + return this.localeData().monthsShort(this, format); + }, + MMMM : function (format) { + return this.localeData().months(this, format); + }, + D : function () { + return this.date(); + }, + DDD : function () { + return this.dayOfYear(); + }, + d : function () { + return this.day(); + }, + dd : function (format) { + return this.localeData().weekdaysMin(this, format); + }, + ddd : function (format) { + return this.localeData().weekdaysShort(this, format); + }, + dddd : function (format) { + return this.localeData().weekdays(this, format); + }, + w : function () { + return this.week(); + }, + W : function () { + return this.isoWeek(); + }, + YY : function () { + return leftZeroFill(this.year() % 100, 2); + }, + YYYY : function () { + return leftZeroFill(this.year(), 4); + }, + YYYYY : function () { + return leftZeroFill(this.year(), 5); + }, + YYYYYY : function () { + var y = this.year(), sign = y >= 0 ? '+' : '-'; + return sign + leftZeroFill(Math.abs(y), 6); + }, + gg : function () { + return leftZeroFill(this.weekYear() % 100, 2); + }, + gggg : function () { + return leftZeroFill(this.weekYear(), 4); + }, + ggggg : function () { + return leftZeroFill(this.weekYear(), 5); + }, + GG : function () { + return leftZeroFill(this.isoWeekYear() % 100, 2); + }, + GGGG : function () { + return leftZeroFill(this.isoWeekYear(), 4); + }, + GGGGG : function () { + return leftZeroFill(this.isoWeekYear(), 5); + }, + e : function () { + return this.weekday(); + }, + E : function () { + return this.isoWeekday(); + }, + a : function () { + return this.localeData().meridiem(this.hours(), this.minutes(), true); + }, + A : function () { + return this.localeData().meridiem(this.hours(), this.minutes(), false); + }, + H : function () { + return this.hours(); + }, + h : function () { + return this.hours() % 12 || 12; + }, + m : function () { + return this.minutes(); + }, + s : function () { + return this.seconds(); + }, + S : function () { + return toInt(this.milliseconds() / 100); + }, + SS : function () { + return leftZeroFill(toInt(this.milliseconds() / 10), 2); + }, + SSS : function () { + return leftZeroFill(this.milliseconds(), 3); + }, + SSSS : function () { + return leftZeroFill(this.milliseconds(), 3); + }, + Z : function () { + var a = -this.zone(), + b = '+'; + if (a < 0) { + a = -a; + b = '-'; + } + return b + leftZeroFill(toInt(a / 60), 2) + ':' + leftZeroFill(toInt(a) % 60, 2); + }, + ZZ : function () { + var a = -this.zone(), + b = '+'; + if (a < 0) { + a = -a; + b = '-'; + } + return b + leftZeroFill(toInt(a / 60), 2) + leftZeroFill(toInt(a) % 60, 2); + }, + z : function () { + return this.zoneAbbr(); + }, + zz : function () { + return this.zoneName(); + }, + x : function () { + return this.valueOf(); + }, + X : function () { + return this.unix(); + }, + Q : function () { + return this.quarter(); + } + }, - var canvas = this.frame.canvas; - var ctx = canvas.getContext('2d'); - ctx.lineWidth = 1; - ctx.font = '14px arial'; // TODO: put in options + deprecations = {}, - if (this.style === Graph3d.STYLE.DOTCOLOR) { - // draw the color bar - var ymin = 0; - var ymax = height; // Todo: make height customizable - for (y = ymin; y < ymax; y++) { - var f = (y - ymin) / (ymax - ymin); + lists = ['months', 'monthsShort', 'weekdays', 'weekdaysShort', 'weekdaysMin']; - //var width = (dotSize / 2 + (1-f) * dotSize * 2); // Todo: put this in one function - var hue = f * 240; - var color = this._hsv2rgb(hue, 1, 1); + // Pick the first defined of two or three arguments. dfl comes from + // default. + function dfl(a, b, c) { + switch (arguments.length) { + case 2: return a != null ? a : b; + case 3: return a != null ? a : b != null ? b : c; + default: throw new Error('Implement me'); + } + } - ctx.strokeStyle = color; - ctx.beginPath(); - ctx.moveTo(left, top + y); - ctx.lineTo(right, top + y); - ctx.stroke(); + function hasOwnProp(a, b) { + return hasOwnProperty.call(a, b); } - ctx.strokeStyle = this.colorAxis; - ctx.strokeRect(left, top, widthMax, height); - } + function defaultParsingFlags() { + // We need to deep clone this object, and es5 standard is not very + // helpful. + return { + empty : false, + unusedTokens : [], + unusedInput : [], + overflow : -2, + charsLeftOver : 0, + nullInput : false, + invalidMonth : null, + invalidFormat : false, + userInvalidated : false, + iso: false + }; + } - if (this.style === Graph3d.STYLE.DOTSIZE) { - // draw border around color bar - ctx.strokeStyle = this.colorAxis; - ctx.fillStyle = this.colorDot; - ctx.beginPath(); - ctx.moveTo(left, top); - ctx.lineTo(right, top); - ctx.lineTo(right - widthMax + widthMin, bottom); - ctx.lineTo(left, bottom); - ctx.closePath(); - ctx.fill(); - ctx.stroke(); - } + function printMsg(msg) { + if (moment.suppressDeprecationWarnings === false && + typeof console !== 'undefined' && console.warn) { + console.warn('Deprecation warning: ' + msg); + } + } - if (this.style === Graph3d.STYLE.DOTCOLOR || - this.style === Graph3d.STYLE.DOTSIZE) { - // print values along the color bar - var gridLineLen = 5; // px - var step = new StepNumber(this.valueMin, this.valueMax, (this.valueMax-this.valueMin)/5, true); - step.start(); - if (step.getCurrent() < this.valueMin) { - step.next(); + function deprecate(msg, fn) { + var firstTime = true; + return extend(function () { + if (firstTime) { + printMsg(msg); + firstTime = false; + } + return fn.apply(this, arguments); + }, fn); } - while (!step.end()) { - y = bottom - (step.getCurrent() - this.valueMin) / (this.valueMax - this.valueMin) * height; - ctx.beginPath(); - ctx.moveTo(left - gridLineLen, y); - ctx.lineTo(left, y); - ctx.stroke(); + function deprecateSimple(name, msg) { + if (!deprecations[name]) { + printMsg(msg); + deprecations[name] = true; + } + } - ctx.textAlign = 'right'; - ctx.textBaseline = 'middle'; - ctx.fillStyle = this.colorAxis; - ctx.fillText(step.getCurrent(), left - 2 * gridLineLen, y); + function padToken(func, count) { + return function (a) { + return leftZeroFill(func.call(this, a), count); + }; + } + function ordinalizeToken(func, period) { + return function (a) { + return this.localeData().ordinal(func.call(this, a), period); + }; + } - step.next(); + while (ordinalizeTokens.length) { + i = ordinalizeTokens.pop(); + formatTokenFunctions[i + 'o'] = ordinalizeToken(formatTokenFunctions[i], i); + } + while (paddedTokens.length) { + i = paddedTokens.pop(); + formatTokenFunctions[i + i] = padToken(formatTokenFunctions[i], 2); } + formatTokenFunctions.DDDD = padToken(formatTokenFunctions.DDD, 3); - ctx.textAlign = 'right'; - ctx.textBaseline = 'top'; - var label = this.legendLabel; - ctx.fillText(label, right, bottom + this.margin); - } - }; - /** - * Redraw the filter - */ - Graph3d.prototype._redrawFilter = function() { - this.frame.filter.innerHTML = ''; + /************************************ + Constructors + ************************************/ - if (this.dataFilter) { - var options = { - 'visible': this.showAnimationControls - }; - var slider = new Slider(this.frame.filter, options); - this.frame.filter.slider = slider; + function Locale() { + } - // TODO: css here is not nice here... - this.frame.filter.style.padding = '10px'; - //this.frame.filter.style.backgroundColor = '#EFEFEF'; + // Moment prototype object + function Moment(config, skipOverflow) { + if (skipOverflow !== false) { + checkOverflow(config); + } + copyConfig(this, config); + this._d = new Date(+config._d); + } - slider.setValues(this.dataFilter.values); - slider.setPlayInterval(this.animationInterval); + // Duration Constructor + function Duration(duration) { + var normalizedInput = normalizeObjectUnits(duration), + years = normalizedInput.year || 0, + quarters = normalizedInput.quarter || 0, + months = normalizedInput.month || 0, + weeks = normalizedInput.week || 0, + days = normalizedInput.day || 0, + hours = normalizedInput.hour || 0, + minutes = normalizedInput.minute || 0, + seconds = normalizedInput.second || 0, + milliseconds = normalizedInput.millisecond || 0; - // create an event handler - var me = this; - var onchange = function () { - var index = slider.getIndex(); + // representation for dateAddRemove + this._milliseconds = +milliseconds + + seconds * 1e3 + // 1000 + minutes * 6e4 + // 1000 * 60 + hours * 36e5; // 1000 * 60 * 60 + // Because of dateAddRemove treats 24 hours as different from a + // day when working around DST, we need to store them separately + this._days = +days + + weeks * 7; + // It is impossible translate months into days without knowing + // which months you are are talking about, so we have to store + // it separately. + this._months = +months + + quarters * 3 + + years * 12; - me.dataFilter.selectValue(index); - me.dataPoints = me.dataFilter._getDataPoints(); + this._data = {}; - me.redraw(); - }; - slider.setOnChangeCallback(onchange); - } - else { - this.frame.filter.slider = undefined; - } - }; + this._locale = moment.localeData(); - /** - * Redraw the slider - */ - Graph3d.prototype._redrawSlider = function() { - if ( this.frame.filter.slider !== undefined) { - this.frame.filter.slider.redraw(); - } - }; + this._bubble(); + } + /************************************ + Helpers + ************************************/ - /** - * Redraw common information - */ - Graph3d.prototype._redrawInfo = function() { - if (this.dataFilter) { - var canvas = this.frame.canvas; - var ctx = canvas.getContext('2d'); - ctx.font = '14px arial'; // TODO: put in options - ctx.lineStyle = 'gray'; - ctx.fillStyle = 'gray'; - ctx.textAlign = 'left'; - ctx.textBaseline = 'top'; + function extend(a, b) { + for (var i in b) { + if (hasOwnProp(b, i)) { + a[i] = b[i]; + } + } - var x = this.margin; - var y = this.margin; - ctx.fillText(this.dataFilter.getLabel() + ': ' + this.dataFilter.getSelectedValue(), x, y); - } - }; + if (hasOwnProp(b, 'toString')) { + a.toString = b.toString; + } + if (hasOwnProp(b, 'valueOf')) { + a.valueOf = b.valueOf; + } - /** - * Redraw the axis - */ - Graph3d.prototype._redrawAxis = function() { - var canvas = this.frame.canvas, - ctx = canvas.getContext('2d'), - from, to, step, prettyStep, - text, xText, yText, zText, - offset, xOffset, yOffset, - xMin2d, xMax2d; + return a; + } - // TODO: get the actual rendered style of the containerElement - //ctx.font = this.containerElement.style.font; - ctx.font = 24 / this.camera.getArmLength() + 'px arial'; + function copyConfig(to, from) { + var i, prop, val; - // calculate the length for the short grid lines - var gridLenX = 0.025 / this.scale.x; - var gridLenY = 0.025 / this.scale.y; - var textMargin = 5 / this.camera.getArmLength(); // px - var armAngle = this.camera.getArmRotation().horizontal; + if (typeof from._isAMomentObject !== 'undefined') { + to._isAMomentObject = from._isAMomentObject; + } + if (typeof from._i !== 'undefined') { + to._i = from._i; + } + if (typeof from._f !== 'undefined') { + to._f = from._f; + } + if (typeof from._l !== 'undefined') { + to._l = from._l; + } + if (typeof from._strict !== 'undefined') { + to._strict = from._strict; + } + if (typeof from._tzm !== 'undefined') { + to._tzm = from._tzm; + } + if (typeof from._isUTC !== 'undefined') { + to._isUTC = from._isUTC; + } + if (typeof from._offset !== 'undefined') { + to._offset = from._offset; + } + if (typeof from._pf !== 'undefined') { + to._pf = from._pf; + } + if (typeof from._locale !== 'undefined') { + to._locale = from._locale; + } - // draw x-grid lines - ctx.lineWidth = 1; - prettyStep = (this.defaultXStep === undefined); - step = new StepNumber(this.xMin, this.xMax, this.xStep, prettyStep); - step.start(); - if (step.getCurrent() < this.xMin) { - step.next(); - } - while (!step.end()) { - var x = step.getCurrent(); + if (momentProperties.length > 0) { + for (i in momentProperties) { + prop = momentProperties[i]; + val = from[prop]; + if (typeof val !== 'undefined') { + to[prop] = val; + } + } + } - if (this.showGrid) { - from = this._convert3Dto2D(new Point3d(x, this.yMin, this.zMin)); - to = this._convert3Dto2D(new Point3d(x, this.yMax, this.zMin)); - ctx.strokeStyle = this.colorGrid; - ctx.beginPath(); - ctx.moveTo(from.x, from.y); - ctx.lineTo(to.x, to.y); - ctx.stroke(); + return to; } - else { - from = this._convert3Dto2D(new Point3d(x, this.yMin, this.zMin)); - to = this._convert3Dto2D(new Point3d(x, this.yMin+gridLenX, this.zMin)); - ctx.strokeStyle = this.colorAxis; - ctx.beginPath(); - ctx.moveTo(from.x, from.y); - ctx.lineTo(to.x, to.y); - ctx.stroke(); - from = this._convert3Dto2D(new Point3d(x, this.yMax, this.zMin)); - to = this._convert3Dto2D(new Point3d(x, this.yMax-gridLenX, this.zMin)); - ctx.strokeStyle = this.colorAxis; - ctx.beginPath(); - ctx.moveTo(from.x, from.y); - ctx.lineTo(to.x, to.y); - ctx.stroke(); + function absRound(number) { + if (number < 0) { + return Math.ceil(number); + } else { + return Math.floor(number); + } } - yText = (Math.cos(armAngle) > 0) ? this.yMin : this.yMax; - text = this._convert3Dto2D(new Point3d(x, yText, this.zMin)); - if (Math.cos(armAngle * 2) > 0) { - ctx.textAlign = 'center'; - ctx.textBaseline = 'top'; - text.y += textMargin; - } - else if (Math.sin(armAngle * 2) < 0){ - ctx.textAlign = 'right'; - ctx.textBaseline = 'middle'; - } - else { - ctx.textAlign = 'left'; - ctx.textBaseline = 'middle'; + // left zero fill a number + // see http://jsperf.com/left-zero-filling for performance comparison + function leftZeroFill(number, targetLength, forceSign) { + var output = '' + Math.abs(number), + sign = number >= 0; + + while (output.length < targetLength) { + output = '0' + output; + } + return (sign ? (forceSign ? '+' : '') : '-') + output; } - ctx.fillStyle = this.colorAxis; - ctx.fillText(' ' + this.xValueLabel(step.getCurrent()) + ' ', text.x, text.y); - step.next(); - } + function positiveMomentsDifference(base, other) { + var res = {milliseconds: 0, months: 0}; - // draw y-grid lines - ctx.lineWidth = 1; - prettyStep = (this.defaultYStep === undefined); - step = new StepNumber(this.yMin, this.yMax, this.yStep, prettyStep); - step.start(); - if (step.getCurrent() < this.yMin) { - step.next(); - } - while (!step.end()) { - if (this.showGrid) { - from = this._convert3Dto2D(new Point3d(this.xMin, step.getCurrent(), this.zMin)); - to = this._convert3Dto2D(new Point3d(this.xMax, step.getCurrent(), this.zMin)); - ctx.strokeStyle = this.colorGrid; - ctx.beginPath(); - ctx.moveTo(from.x, from.y); - ctx.lineTo(to.x, to.y); - ctx.stroke(); - } - else { - from = this._convert3Dto2D(new Point3d(this.xMin, step.getCurrent(), this.zMin)); - to = this._convert3Dto2D(new Point3d(this.xMin+gridLenY, step.getCurrent(), this.zMin)); - ctx.strokeStyle = this.colorAxis; - ctx.beginPath(); - ctx.moveTo(from.x, from.y); - ctx.lineTo(to.x, to.y); - ctx.stroke(); + res.months = other.month() - base.month() + + (other.year() - base.year()) * 12; + if (base.clone().add(res.months, 'M').isAfter(other)) { + --res.months; + } - from = this._convert3Dto2D(new Point3d(this.xMax, step.getCurrent(), this.zMin)); - to = this._convert3Dto2D(new Point3d(this.xMax-gridLenY, step.getCurrent(), this.zMin)); - ctx.strokeStyle = this.colorAxis; - ctx.beginPath(); - ctx.moveTo(from.x, from.y); - ctx.lineTo(to.x, to.y); - ctx.stroke(); - } + res.milliseconds = +other - +(base.clone().add(res.months, 'M')); - xText = (Math.sin(armAngle ) > 0) ? this.xMin : this.xMax; - text = this._convert3Dto2D(new Point3d(xText, step.getCurrent(), this.zMin)); - if (Math.cos(armAngle * 2) < 0) { - ctx.textAlign = 'center'; - ctx.textBaseline = 'top'; - text.y += textMargin; - } - else if (Math.sin(armAngle * 2) > 0){ - ctx.textAlign = 'right'; - ctx.textBaseline = 'middle'; - } - else { - ctx.textAlign = 'left'; - ctx.textBaseline = 'middle'; + return res; } - ctx.fillStyle = this.colorAxis; - ctx.fillText(' ' + this.yValueLabel(step.getCurrent()) + ' ', text.x, text.y); - - step.next(); - } - // draw z-grid lines and axis - ctx.lineWidth = 1; - prettyStep = (this.defaultZStep === undefined); - step = new StepNumber(this.zMin, this.zMax, this.zStep, prettyStep); - step.start(); - if (step.getCurrent() < this.zMin) { - step.next(); - } - xText = (Math.cos(armAngle ) > 0) ? this.xMin : this.xMax; - yText = (Math.sin(armAngle ) < 0) ? this.yMin : this.yMax; - while (!step.end()) { - // TODO: make z-grid lines really 3d? - from = this._convert3Dto2D(new Point3d(xText, yText, step.getCurrent())); - ctx.strokeStyle = this.colorAxis; - ctx.beginPath(); - ctx.moveTo(from.x, from.y); - ctx.lineTo(from.x - textMargin, from.y); - ctx.stroke(); + function momentsDifference(base, other) { + var res; + other = makeAs(other, base); + if (base.isBefore(other)) { + res = positiveMomentsDifference(base, other); + } else { + res = positiveMomentsDifference(other, base); + res.milliseconds = -res.milliseconds; + res.months = -res.months; + } - ctx.textAlign = 'right'; - ctx.textBaseline = 'middle'; - ctx.fillStyle = this.colorAxis; - ctx.fillText(this.zValueLabel(step.getCurrent()) + ' ', from.x - 5, from.y); + return res; + } - step.next(); - } - ctx.lineWidth = 1; - from = this._convert3Dto2D(new Point3d(xText, yText, this.zMin)); - to = this._convert3Dto2D(new Point3d(xText, yText, this.zMax)); - ctx.strokeStyle = this.colorAxis; - ctx.beginPath(); - ctx.moveTo(from.x, from.y); - ctx.lineTo(to.x, to.y); - ctx.stroke(); + // TODO: remove 'name' arg after deprecation is removed + function createAdder(direction, name) { + return function (val, period) { + var dur, tmp; + //invert the arguments, but complain about it + if (period !== null && !isNaN(+period)) { + deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period).'); + tmp = val; val = period; period = tmp; + } - // draw x-axis - ctx.lineWidth = 1; - // line at yMin - xMin2d = this._convert3Dto2D(new Point3d(this.xMin, this.yMin, this.zMin)); - xMax2d = this._convert3Dto2D(new Point3d(this.xMax, this.yMin, this.zMin)); - ctx.strokeStyle = this.colorAxis; - ctx.beginPath(); - ctx.moveTo(xMin2d.x, xMin2d.y); - ctx.lineTo(xMax2d.x, xMax2d.y); - ctx.stroke(); - // line at ymax - xMin2d = this._convert3Dto2D(new Point3d(this.xMin, this.yMax, this.zMin)); - xMax2d = this._convert3Dto2D(new Point3d(this.xMax, this.yMax, this.zMin)); - ctx.strokeStyle = this.colorAxis; - ctx.beginPath(); - ctx.moveTo(xMin2d.x, xMin2d.y); - ctx.lineTo(xMax2d.x, xMax2d.y); - ctx.stroke(); + val = typeof val === 'string' ? +val : val; + dur = moment.duration(val, period); + addOrSubtractDurationFromMoment(this, dur, direction); + return this; + }; + } - // draw y-axis - ctx.lineWidth = 1; - // line at xMin - from = this._convert3Dto2D(new Point3d(this.xMin, this.yMin, this.zMin)); - to = this._convert3Dto2D(new Point3d(this.xMin, this.yMax, this.zMin)); - ctx.strokeStyle = this.colorAxis; - ctx.beginPath(); - ctx.moveTo(from.x, from.y); - ctx.lineTo(to.x, to.y); - ctx.stroke(); - // line at xMax - from = this._convert3Dto2D(new Point3d(this.xMax, this.yMin, this.zMin)); - to = this._convert3Dto2D(new Point3d(this.xMax, this.yMax, this.zMin)); - ctx.strokeStyle = this.colorAxis; - ctx.beginPath(); - ctx.moveTo(from.x, from.y); - ctx.lineTo(to.x, to.y); - ctx.stroke(); + function addOrSubtractDurationFromMoment(mom, duration, isAdding, updateOffset) { + var milliseconds = duration._milliseconds, + days = duration._days, + months = duration._months; + updateOffset = updateOffset == null ? true : updateOffset; - // draw x-label - var xLabel = this.xLabel; - if (xLabel.length > 0) { - yOffset = 0.1 / this.scale.y; - xText = (this.xMin + this.xMax) / 2; - yText = (Math.cos(armAngle) > 0) ? this.yMin - yOffset: this.yMax + yOffset; - text = this._convert3Dto2D(new Point3d(xText, yText, this.zMin)); - if (Math.cos(armAngle * 2) > 0) { - ctx.textAlign = 'center'; - ctx.textBaseline = 'top'; + if (milliseconds) { + mom._d.setTime(+mom._d + milliseconds * isAdding); + } + if (days) { + rawSetter(mom, 'Date', rawGetter(mom, 'Date') + days * isAdding); + } + if (months) { + rawMonthSetter(mom, rawGetter(mom, 'Month') + months * isAdding); + } + if (updateOffset) { + moment.updateOffset(mom, days || months); + } } - else if (Math.sin(armAngle * 2) < 0){ - ctx.textAlign = 'right'; - ctx.textBaseline = 'middle'; + + // check if is an array + function isArray(input) { + return Object.prototype.toString.call(input) === '[object Array]'; } - else { - ctx.textAlign = 'left'; - ctx.textBaseline = 'middle'; + + function isDate(input) { + return Object.prototype.toString.call(input) === '[object Date]' || + input instanceof Date; } - ctx.fillStyle = this.colorAxis; - ctx.fillText(xLabel, text.x, text.y); - } - // draw y-label - var yLabel = this.yLabel; - if (yLabel.length > 0) { - xOffset = 0.1 / this.scale.x; - xText = (Math.sin(armAngle ) > 0) ? this.xMin - xOffset : this.xMax + xOffset; - yText = (this.yMin + this.yMax) / 2; - text = this._convert3Dto2D(new Point3d(xText, yText, this.zMin)); - if (Math.cos(armAngle * 2) < 0) { - ctx.textAlign = 'center'; - ctx.textBaseline = 'top'; + // compare two arrays, return the number of differences + function compareArrays(array1, array2, dontConvert) { + var len = Math.min(array1.length, array2.length), + lengthDiff = Math.abs(array1.length - array2.length), + diffs = 0, + i; + for (i = 0; i < len; i++) { + if ((dontConvert && array1[i] !== array2[i]) || + (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) { + diffs++; + } + } + return diffs + lengthDiff; } - else if (Math.sin(armAngle * 2) > 0){ - ctx.textAlign = 'right'; - ctx.textBaseline = 'middle'; + + function normalizeUnits(units) { + if (units) { + var lowered = units.toLowerCase().replace(/(.)s$/, '$1'); + units = unitAliases[units] || camelFunctions[lowered] || lowered; + } + return units; } - else { - ctx.textAlign = 'left'; - ctx.textBaseline = 'middle'; + + function normalizeObjectUnits(inputObject) { + var normalizedInput = {}, + normalizedProp, + prop; + + for (prop in inputObject) { + if (hasOwnProp(inputObject, prop)) { + normalizedProp = normalizeUnits(prop); + if (normalizedProp) { + normalizedInput[normalizedProp] = inputObject[prop]; + } + } + } + + return normalizedInput; } - ctx.fillStyle = this.colorAxis; - ctx.fillText(yLabel, text.x, text.y); - } - // draw z-label - var zLabel = this.zLabel; - if (zLabel.length > 0) { - offset = 30; // pixels. // TODO: relate to the max width of the values on the z axis? - xText = (Math.cos(armAngle ) > 0) ? this.xMin : this.xMax; - yText = (Math.sin(armAngle ) < 0) ? this.yMin : this.yMax; - zText = (this.zMin + this.zMax) / 2; - text = this._convert3Dto2D(new Point3d(xText, yText, zText)); - ctx.textAlign = 'right'; - ctx.textBaseline = 'middle'; - ctx.fillStyle = this.colorAxis; - ctx.fillText(zLabel, text.x - offset, text.y); - } - }; + function makeList(field) { + var count, setter; - /** - * Calculate the color based on the given value. - * @param {Number} H Hue, a value be between 0 and 360 - * @param {Number} S Saturation, a value between 0 and 1 - * @param {Number} V Value, a value between 0 and 1 - */ - Graph3d.prototype._hsv2rgb = function(H, S, V) { - var R, G, B, C, Hi, X; + if (field.indexOf('week') === 0) { + count = 7; + setter = 'day'; + } + else if (field.indexOf('month') === 0) { + count = 12; + setter = 'month'; + } + else { + return; + } - C = V * S; - Hi = Math.floor(H/60); // hi = 0,1,2,3,4,5 - X = C * (1 - Math.abs(((H/60) % 2) - 1)); + moment[field] = function (format, index) { + var i, getter, + method = moment._locale[field], + results = []; + + if (typeof format === 'number') { + index = format; + format = undefined; + } + + getter = function (i) { + var m = moment().utc().set(setter, i); + return method.call(moment._locale, m, format || ''); + }; + + if (index != null) { + return getter(index); + } + else { + for (i = 0; i < count; i++) { + results.push(getter(i)); + } + return results; + } + }; + } - switch (Hi) { - case 0: R = C; G = X; B = 0; break; - case 1: R = X; G = C; B = 0; break; - case 2: R = 0; G = C; B = X; break; - case 3: R = 0; G = X; B = C; break; - case 4: R = X; G = 0; B = C; break; - case 5: R = C; G = 0; B = X; break; + function toInt(argumentForCoercion) { + var coercedNumber = +argumentForCoercion, + value = 0; - default: R = 0; G = 0; B = 0; break; - } + if (coercedNumber !== 0 && isFinite(coercedNumber)) { + if (coercedNumber >= 0) { + value = Math.floor(coercedNumber); + } else { + value = Math.ceil(coercedNumber); + } + } - return 'RGB(' + parseInt(R*255) + ',' + parseInt(G*255) + ',' + parseInt(B*255) + ')'; - }; + return value; + } + function daysInMonth(year, month) { + return new Date(Date.UTC(year, month + 1, 0)).getUTCDate(); + } - /** - * Draw all datapoints as a grid - * This function can be used when the style is 'grid' - */ - Graph3d.prototype._redrawDataGrid = function() { - var canvas = this.frame.canvas, - ctx = canvas.getContext('2d'), - point, right, top, cross, - i, - topSideVisible, fillStyle, strokeStyle, lineWidth, - h, s, v, zAvg; + function weeksInYear(year, dow, doy) { + return weekOfYear(moment([year, 11, 31 + dow - doy]), dow, doy).week; + } + function daysInYear(year) { + return isLeapYear(year) ? 366 : 365; + } - if (this.dataPoints === undefined || this.dataPoints.length <= 0) - return; // TODO: throw exception? + function isLeapYear(year) { + return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; + } - // calculate the translations and screen position of all points - for (i = 0; i < this.dataPoints.length; i++) { - var trans = this._convertPointToTranslation(this.dataPoints[i].point); - var screen = this._convertTranslationToScreen(trans); + function checkOverflow(m) { + var overflow; + if (m._a && m._pf.overflow === -2) { + overflow = + m._a[MONTH] < 0 || m._a[MONTH] > 11 ? MONTH : + m._a[DATE] < 1 || m._a[DATE] > daysInMonth(m._a[YEAR], m._a[MONTH]) ? DATE : + m._a[HOUR] < 0 || m._a[HOUR] > 24 || + (m._a[HOUR] === 24 && (m._a[MINUTE] !== 0 || + m._a[SECOND] !== 0 || + m._a[MILLISECOND] !== 0)) ? HOUR : + m._a[MINUTE] < 0 || m._a[MINUTE] > 59 ? MINUTE : + m._a[SECOND] < 0 || m._a[SECOND] > 59 ? SECOND : + m._a[MILLISECOND] < 0 || m._a[MILLISECOND] > 999 ? MILLISECOND : + -1; - this.dataPoints[i].trans = trans; - this.dataPoints[i].screen = screen; + if (m._pf._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) { + overflow = DATE; + } - // calculate the translation of the point at the bottom (needed for sorting) - var transBottom = this._convertPointToTranslation(this.dataPoints[i].bottom); - this.dataPoints[i].dist = this.showPerspective ? transBottom.length() : -transBottom.z; - } + m._pf.overflow = overflow; + } + } - // sort the points on depth of their (x,y) position (not on z) - var sortDepth = function (a, b) { - return b.dist - a.dist; - }; - this.dataPoints.sort(sortDepth); + function isValid(m) { + if (m._isValid == null) { + m._isValid = !isNaN(m._d.getTime()) && + m._pf.overflow < 0 && + !m._pf.empty && + !m._pf.invalidMonth && + !m._pf.nullInput && + !m._pf.invalidFormat && + !m._pf.userInvalidated; - if (this.style === Graph3d.STYLE.SURFACE) { - for (i = 0; i < this.dataPoints.length; i++) { - point = this.dataPoints[i]; - right = this.dataPoints[i].pointRight; - top = this.dataPoints[i].pointTop; - cross = this.dataPoints[i].pointCross; + if (m._strict) { + m._isValid = m._isValid && + m._pf.charsLeftOver === 0 && + m._pf.unusedTokens.length === 0 && + m._pf.bigHour === undefined; + } + } + return m._isValid; + } - if (point !== undefined && right !== undefined && top !== undefined && cross !== undefined) { + function normalizeLocale(key) { + return key ? key.toLowerCase().replace('_', '-') : key; + } - if (this.showGrayBottom || this.showShadow) { - // calculate the cross product of the two vectors from center - // to left and right, in order to know whether we are looking at the - // bottom or at the top side. We can also use the cross product - // for calculating light intensity - var aDiff = Point3d.subtract(cross.trans, point.trans); - var bDiff = Point3d.subtract(top.trans, right.trans); - var crossproduct = Point3d.crossProduct(aDiff, bDiff); - var len = crossproduct.length(); - // FIXME: there is a bug with determining the surface side (shadow or colored) + // pick the locale from the array + // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each + // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root + function chooseLocale(names) { + var i = 0, j, next, locale, split; - topSideVisible = (crossproduct.z > 0); - } - else { - topSideVisible = true; + while (i < names.length) { + split = normalizeLocale(names[i]).split('-'); + j = split.length; + next = normalizeLocale(names[i + 1]); + next = next ? next.split('-') : null; + while (j > 0) { + locale = loadLocale(split.slice(0, j).join('-')); + if (locale) { + return locale; + } + if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) { + //the next array item is better than a shallower substring of this one + break; + } + j--; + } + i++; } + return null; + } - if (topSideVisible) { - // calculate Hue from the current value. At zMin the hue is 240, at zMax the hue is 0 - zAvg = (point.point.z + right.point.z + top.point.z + cross.point.z) / 4; - h = (1 - (zAvg - this.zMin) * this.scale.z / this.verticalRatio) * 240; - s = 1; // saturation - - if (this.showShadow) { - v = Math.min(1 + (crossproduct.x / len) / 2, 1); // value. TODO: scale - fillStyle = this._hsv2rgb(h, s, v); - strokeStyle = fillStyle; - } - else { - v = 1; - fillStyle = this._hsv2rgb(h, s, v); - strokeStyle = this.colorAxis; - } - } - else { - fillStyle = 'gray'; - strokeStyle = this.colorAxis; + function loadLocale(name) { + var oldLocale = null; + if (!locales[name] && hasModule) { + try { + oldLocale = moment.locale(); + !(function webpackMissingModule() { var e = new Error("Cannot find module \"./locale\""); e.code = 'MODULE_NOT_FOUND'; throw e; }()); + // because defineLocale currently also sets the global locale, we want to undo that for lazy loaded locales + moment.locale(oldLocale); + } catch (e) { } } - lineWidth = 0.5; - - ctx.lineWidth = lineWidth; - ctx.fillStyle = fillStyle; - ctx.strokeStyle = strokeStyle; - ctx.beginPath(); - ctx.moveTo(point.screen.x, point.screen.y); - ctx.lineTo(right.screen.x, right.screen.y); - ctx.lineTo(cross.screen.x, cross.screen.y); - ctx.lineTo(top.screen.x, top.screen.y); - ctx.closePath(); - ctx.fill(); - ctx.stroke(); - } + return locales[name]; } - } - else { // grid style - for (i = 0; i < this.dataPoints.length; i++) { - point = this.dataPoints[i]; - right = this.dataPoints[i].pointRight; - top = this.dataPoints[i].pointTop; - if (point !== undefined) { - if (this.showPerspective) { - lineWidth = 2 / -point.trans.z; - } - else { - lineWidth = 2 * -(this.eye.z / this.camera.getArmLength()); + // Return a moment from input, that is local/utc/zone equivalent to model. + function makeAs(input, model) { + var res, diff; + if (model._isUTC) { + res = model.clone(); + diff = (moment.isMoment(input) || isDate(input) ? + +input : +moment(input)) - (+res); + // Use low-level api, because this fn is low-level api. + res._d.setTime(+res._d + diff); + moment.updateOffset(res, false); + return res; + } else { + return moment(input).local(); } - } + } - if (point !== undefined && right !== undefined) { - // calculate Hue from the current value. At zMin the hue is 240, at zMax the hue is 0 - zAvg = (point.point.z + right.point.z) / 2; - h = (1 - (zAvg - this.zMin) * this.scale.z / this.verticalRatio) * 240; + /************************************ + Locale + ************************************/ - ctx.lineWidth = lineWidth; - ctx.strokeStyle = this._hsv2rgb(h, 1, 1); - ctx.beginPath(); - ctx.moveTo(point.screen.x, point.screen.y); - ctx.lineTo(right.screen.x, right.screen.y); - ctx.stroke(); - } - if (point !== undefined && top !== undefined) { - // calculate Hue from the current value. At zMin the hue is 240, at zMax the hue is 0 - zAvg = (point.point.z + top.point.z) / 2; - h = (1 - (zAvg - this.zMin) * this.scale.z / this.verticalRatio) * 240; + extend(Locale.prototype, { - ctx.lineWidth = lineWidth; - ctx.strokeStyle = this._hsv2rgb(h, 1, 1); - ctx.beginPath(); - ctx.moveTo(point.screen.x, point.screen.y); - ctx.lineTo(top.screen.x, top.screen.y); - ctx.stroke(); - } - } - } - }; + set : function (config) { + var prop, i; + for (i in config) { + prop = config[i]; + if (typeof prop === 'function') { + this[i] = prop; + } else { + this['_' + i] = prop; + } + } + // Lenient ordinal parsing accepts just a number in addition to + // number + (possibly) stuff coming from _ordinalParseLenient. + this._ordinalParseLenient = new RegExp(this._ordinalParse.source + '|' + /\d{1,2}/.source); + }, + _months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), + months : function (m) { + return this._months[m.month()]; + }, - /** - * Draw all datapoints as dots. - * This function can be used when the style is 'dot' or 'dot-line' - */ - Graph3d.prototype._redrawDataDot = function() { - var canvas = this.frame.canvas; - var ctx = canvas.getContext('2d'); - var i; + _monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + monthsShort : function (m) { + return this._monthsShort[m.month()]; + }, - if (this.dataPoints === undefined || this.dataPoints.length <= 0) - return; // TODO: throw exception? + monthsParse : function (monthName, format, strict) { + var i, mom, regex; - // calculate the translations of all points - for (i = 0; i < this.dataPoints.length; i++) { - var trans = this._convertPointToTranslation(this.dataPoints[i].point); - var screen = this._convertTranslationToScreen(trans); - this.dataPoints[i].trans = trans; - this.dataPoints[i].screen = screen; + if (!this._monthsParse) { + this._monthsParse = []; + this._longMonthsParse = []; + this._shortMonthsParse = []; + } - // calculate the distance from the point at the bottom to the camera - var transBottom = this._convertPointToTranslation(this.dataPoints[i].bottom); - this.dataPoints[i].dist = this.showPerspective ? transBottom.length() : -transBottom.z; - } + for (i = 0; i < 12; i++) { + // make the regex if we don't have it already + mom = moment.utc([2000, i]); + if (strict && !this._longMonthsParse[i]) { + this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i'); + this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i'); + } + if (!strict && !this._monthsParse[i]) { + regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, ''); + this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i'); + } + // test the regex + if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) { + return i; + } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) { + return i; + } else if (!strict && this._monthsParse[i].test(monthName)) { + return i; + } + } + }, - // order the translated points by depth - var sortDepth = function (a, b) { - return b.dist - a.dist; - }; - this.dataPoints.sort(sortDepth); + _weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), + weekdays : function (m) { + return this._weekdays[m.day()]; + }, - // draw the datapoints as colored circles - var dotSize = this.frame.clientWidth * 0.02; // px - for (i = 0; i < this.dataPoints.length; i++) { - var point = this.dataPoints[i]; + _weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysShort : function (m) { + return this._weekdaysShort[m.day()]; + }, - if (this.style === Graph3d.STYLE.DOTLINE) { - // draw a vertical line from the bottom to the graph value - //var from = this._convert3Dto2D(new Point3d(point.point.x, point.point.y, this.zMin)); - var from = this._convert3Dto2D(point.bottom); - ctx.lineWidth = 1; - ctx.strokeStyle = this.colorGrid; - ctx.beginPath(); - ctx.moveTo(from.x, from.y); - ctx.lineTo(point.screen.x, point.screen.y); - ctx.stroke(); - } + _weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + weekdaysMin : function (m) { + return this._weekdaysMin[m.day()]; + }, - // calculate radius for the circle - var size; - if (this.style === Graph3d.STYLE.DOTSIZE) { - size = dotSize/2 + 2*dotSize * (point.point.value - this.valueMin) / (this.valueMax - this.valueMin); - } - else { - size = dotSize; - } + weekdaysParse : function (weekdayName) { + var i, mom, regex; - var radius; - if (this.showPerspective) { - radius = size / -point.trans.z; - } - else { - radius = size * -(this.eye.z / this.camera.getArmLength()); - } - if (radius < 0) { - radius = 0; - } + if (!this._weekdaysParse) { + this._weekdaysParse = []; + } - var hue, color, borderColor; - if (this.style === Graph3d.STYLE.DOTCOLOR ) { - // calculate the color based on the value - hue = (1 - (point.point.value - this.valueMin) * this.scale.value) * 240; - color = this._hsv2rgb(hue, 1, 1); - borderColor = this._hsv2rgb(hue, 1, 0.8); - } - else if (this.style === Graph3d.STYLE.DOTSIZE) { - color = this.colorDot; - borderColor = this.colorDotBorder; - } - else { - // calculate Hue from the current value. At zMin the hue is 240, at zMax the hue is 0 - hue = (1 - (point.point.z - this.zMin) * this.scale.z / this.verticalRatio) * 240; - color = this._hsv2rgb(hue, 1, 1); - borderColor = this._hsv2rgb(hue, 1, 0.8); - } + for (i = 0; i < 7; i++) { + // make the regex if we don't have it already + if (!this._weekdaysParse[i]) { + mom = moment([2000, 1]).day(i); + regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, ''); + this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i'); + } + // test the regex + if (this._weekdaysParse[i].test(weekdayName)) { + return i; + } + } + }, - // draw the circle - ctx.lineWidth = 1.0; - ctx.strokeStyle = borderColor; - ctx.fillStyle = color; - ctx.beginPath(); - ctx.arc(point.screen.x, point.screen.y, radius, 0, Math.PI*2, true); - ctx.fill(); - ctx.stroke(); - } - }; + _longDateFormat : { + LTS : 'h:mm:ss A', + LT : 'h:mm A', + L : 'MM/DD/YYYY', + LL : 'MMMM D, YYYY', + LLL : 'MMMM D, YYYY LT', + LLLL : 'dddd, MMMM D, YYYY LT' + }, + longDateFormat : function (key) { + var output = this._longDateFormat[key]; + if (!output && this._longDateFormat[key.toUpperCase()]) { + output = this._longDateFormat[key.toUpperCase()].replace(/MMMM|MM|DD|dddd/g, function (val) { + return val.slice(1); + }); + this._longDateFormat[key] = output; + } + return output; + }, - /** - * Draw all datapoints as bars. - * This function can be used when the style is 'bar', 'bar-color', or 'bar-size' - */ - Graph3d.prototype._redrawDataBar = function() { - var canvas = this.frame.canvas; - var ctx = canvas.getContext('2d'); - var i, j, surface, corners; + isPM : function (input) { + // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays + // Using charAt should be more compatible. + return ((input + '').toLowerCase().charAt(0) === 'p'); + }, - if (this.dataPoints === undefined || this.dataPoints.length <= 0) - return; // TODO: throw exception? + _meridiemParse : /[ap]\.?m?\.?/i, + meridiem : function (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'pm' : 'PM'; + } else { + return isLower ? 'am' : 'AM'; + } + }, - // calculate the translations of all points - for (i = 0; i < this.dataPoints.length; i++) { - var trans = this._convertPointToTranslation(this.dataPoints[i].point); - var screen = this._convertTranslationToScreen(trans); - this.dataPoints[i].trans = trans; - this.dataPoints[i].screen = screen; + _calendar : { + sameDay : '[Today at] LT', + nextDay : '[Tomorrow at] LT', + nextWeek : 'dddd [at] LT', + lastDay : '[Yesterday at] LT', + lastWeek : '[Last] dddd [at] LT', + sameElse : 'L' + }, + calendar : function (key, mom, now) { + var output = this._calendar[key]; + return typeof output === 'function' ? output.apply(mom, [now]) : output; + }, + + _relativeTime : { + future : 'in %s', + past : '%s ago', + s : 'a few seconds', + m : 'a minute', + mm : '%d minutes', + h : 'an hour', + hh : '%d hours', + d : 'a day', + dd : '%d days', + M : 'a month', + MM : '%d months', + y : 'a year', + yy : '%d years' + }, + + relativeTime : function (number, withoutSuffix, string, isFuture) { + var output = this._relativeTime[string]; + return (typeof output === 'function') ? + output(number, withoutSuffix, string, isFuture) : + output.replace(/%d/i, number); + }, + + pastFuture : function (diff, output) { + var format = this._relativeTime[diff > 0 ? 'future' : 'past']; + return typeof format === 'function' ? format(output) : format.replace(/%s/i, output); + }, + + ordinal : function (number) { + return this._ordinal.replace('%d', number); + }, + _ordinal : '%d', + _ordinalParse : /\d{1,2}/, + + preparse : function (string) { + return string; + }, + + postformat : function (string) { + return string; + }, - // calculate the distance from the point at the bottom to the camera - var transBottom = this._convertPointToTranslation(this.dataPoints[i].bottom); - this.dataPoints[i].dist = this.showPerspective ? transBottom.length() : -transBottom.z; - } + week : function (mom) { + return weekOfYear(mom, this._week.dow, this._week.doy).week; + }, - // order the translated points by depth - var sortDepth = function (a, b) { - return b.dist - a.dist; - }; - this.dataPoints.sort(sortDepth); + _week : { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + }, - // draw the datapoints as bars - var xWidth = this.xBarWidth / 2; - var yWidth = this.yBarWidth / 2; - for (i = 0; i < this.dataPoints.length; i++) { - var point = this.dataPoints[i]; + _invalidDate: 'Invalid date', + invalidDate: function () { + return this._invalidDate; + } + }); - // determine color - var hue, color, borderColor; - if (this.style === Graph3d.STYLE.BARCOLOR ) { - // calculate the color based on the value - hue = (1 - (point.point.value - this.valueMin) * this.scale.value) * 240; - color = this._hsv2rgb(hue, 1, 1); - borderColor = this._hsv2rgb(hue, 1, 0.8); - } - else if (this.style === Graph3d.STYLE.BARSIZE) { - color = this.colorDot; - borderColor = this.colorDotBorder; - } - else { - // calculate Hue from the current value. At zMin the hue is 240, at zMax the hue is 0 - hue = (1 - (point.point.z - this.zMin) * this.scale.z / this.verticalRatio) * 240; - color = this._hsv2rgb(hue, 1, 1); - borderColor = this._hsv2rgb(hue, 1, 0.8); - } + /************************************ + Formatting + ************************************/ - // calculate size for the bar - if (this.style === Graph3d.STYLE.BARSIZE) { - xWidth = (this.xBarWidth / 2) * ((point.point.value - this.valueMin) / (this.valueMax - this.valueMin) * 0.8 + 0.2); - yWidth = (this.yBarWidth / 2) * ((point.point.value - this.valueMin) / (this.valueMax - this.valueMin) * 0.8 + 0.2); - } - // calculate all corner points - var me = this; - var point3d = point.point; - var top = [ - {point: new Point3d(point3d.x - xWidth, point3d.y - yWidth, point3d.z)}, - {point: new Point3d(point3d.x + xWidth, point3d.y - yWidth, point3d.z)}, - {point: new Point3d(point3d.x + xWidth, point3d.y + yWidth, point3d.z)}, - {point: new Point3d(point3d.x - xWidth, point3d.y + yWidth, point3d.z)} - ]; - var bottom = [ - {point: new Point3d(point3d.x - xWidth, point3d.y - yWidth, this.zMin)}, - {point: new Point3d(point3d.x + xWidth, point3d.y - yWidth, this.zMin)}, - {point: new Point3d(point3d.x + xWidth, point3d.y + yWidth, this.zMin)}, - {point: new Point3d(point3d.x - xWidth, point3d.y + yWidth, this.zMin)} - ]; + function removeFormattingTokens(input) { + if (input.match(/\[[\s\S]/)) { + return input.replace(/^\[|\]$/g, ''); + } + return input.replace(/\\/g, ''); + } - // calculate screen location of the points - top.forEach(function (obj) { - obj.screen = me._convert3Dto2D(obj.point); - }); - bottom.forEach(function (obj) { - obj.screen = me._convert3Dto2D(obj.point); - }); + function makeFormatFunction(format) { + var array = format.match(formattingTokens), i, length; - // create five sides, calculate both corner points and center points - var surfaces = [ - {corners: top, center: Point3d.avg(bottom[0].point, bottom[2].point)}, - {corners: [top[0], top[1], bottom[1], bottom[0]], center: Point3d.avg(bottom[1].point, bottom[0].point)}, - {corners: [top[1], top[2], bottom[2], bottom[1]], center: Point3d.avg(bottom[2].point, bottom[1].point)}, - {corners: [top[2], top[3], bottom[3], bottom[2]], center: Point3d.avg(bottom[3].point, bottom[2].point)}, - {corners: [top[3], top[0], bottom[0], bottom[3]], center: Point3d.avg(bottom[0].point, bottom[3].point)} - ]; - point.surfaces = surfaces; + for (i = 0, length = array.length; i < length; i++) { + if (formatTokenFunctions[array[i]]) { + array[i] = formatTokenFunctions[array[i]]; + } else { + array[i] = removeFormattingTokens(array[i]); + } + } - // calculate the distance of each of the surface centers to the camera - for (j = 0; j < surfaces.length; j++) { - surface = surfaces[j]; - var transCenter = this._convertPointToTranslation(surface.center); - surface.dist = this.showPerspective ? transCenter.length() : -transCenter.z; - // TODO: this dept calculation doesn't work 100% of the cases due to perspective, - // but the current solution is fast/simple and works in 99.9% of all cases - // the issue is visible in example 14, with graph.setCameraPosition({horizontal: 2.97, vertical: 0.5, distance: 0.9}) + return function (mom) { + var output = ''; + for (i = 0; i < length; i++) { + output += array[i] instanceof Function ? array[i].call(mom, format) : array[i]; + } + return output; + }; } - // order the surfaces by their (translated) depth - surfaces.sort(function (a, b) { - var diff = b.dist - a.dist; - if (diff) return diff; + // format date using native date object + function formatMoment(m, format) { + if (!m.isValid()) { + return m.localeData().invalidDate(); + } - // if equal depth, sort the top surface last - if (a.corners === top) return 1; - if (b.corners === top) return -1; + format = expandFormat(format, m.localeData()); - // both are equal - return 0; - }); + if (!formatFunctions[format]) { + formatFunctions[format] = makeFormatFunction(format); + } - // draw the ordered surfaces - ctx.lineWidth = 1; - ctx.strokeStyle = borderColor; - ctx.fillStyle = color; - // NOTE: we start at j=2 instead of j=0 as we don't need to draw the two surfaces at the backside - for (j = 2; j < surfaces.length; j++) { - surface = surfaces[j]; - corners = surface.corners; - ctx.beginPath(); - ctx.moveTo(corners[3].screen.x, corners[3].screen.y); - ctx.lineTo(corners[0].screen.x, corners[0].screen.y); - ctx.lineTo(corners[1].screen.x, corners[1].screen.y); - ctx.lineTo(corners[2].screen.x, corners[2].screen.y); - ctx.lineTo(corners[3].screen.x, corners[3].screen.y); - ctx.fill(); - ctx.stroke(); + return formatFunctions[format](m); } - } - }; + function expandFormat(format, locale) { + var i = 5; - /** - * Draw a line through all datapoints. - * This function can be used when the style is 'line' - */ - Graph3d.prototype._redrawDataLine = function() { - var canvas = this.frame.canvas, - ctx = canvas.getContext('2d'), - point, i; + function replaceLongDateFormatTokens(input) { + return locale.longDateFormat(input) || input; + } - if (this.dataPoints === undefined || this.dataPoints.length <= 0) - return; // TODO: throw exception? + localFormattingTokens.lastIndex = 0; + while (i >= 0 && localFormattingTokens.test(format)) { + format = format.replace(localFormattingTokens, replaceLongDateFormatTokens); + localFormattingTokens.lastIndex = 0; + i -= 1; + } - // calculate the translations of all points - for (i = 0; i < this.dataPoints.length; i++) { - var trans = this._convertPointToTranslation(this.dataPoints[i].point); - var screen = this._convertTranslationToScreen(trans); + return format; + } - this.dataPoints[i].trans = trans; - this.dataPoints[i].screen = screen; - } - // start the line - if (this.dataPoints.length > 0) { - point = this.dataPoints[0]; + /************************************ + Parsing + ************************************/ - ctx.lineWidth = 1; // TODO: make customizable - ctx.strokeStyle = 'blue'; // TODO: make customizable - ctx.beginPath(); - ctx.moveTo(point.screen.x, point.screen.y); - } - // draw the datapoints as colored circles - for (i = 1; i < this.dataPoints.length; i++) { - point = this.dataPoints[i]; - ctx.lineTo(point.screen.x, point.screen.y); - } + // get the regex to find the next token + function getParseRegexForToken(token, config) { + var a, strict = config._strict; + switch (token) { + case 'Q': + return parseTokenOneDigit; + case 'DDDD': + return parseTokenThreeDigits; + case 'YYYY': + case 'GGGG': + case 'gggg': + return strict ? parseTokenFourDigits : parseTokenOneToFourDigits; + case 'Y': + case 'G': + case 'g': + return parseTokenSignedNumber; + case 'YYYYYY': + case 'YYYYY': + case 'GGGGG': + case 'ggggg': + return strict ? parseTokenSixDigits : parseTokenOneToSixDigits; + case 'S': + if (strict) { + return parseTokenOneDigit; + } + /* falls through */ + case 'SS': + if (strict) { + return parseTokenTwoDigits; + } + /* falls through */ + case 'SSS': + if (strict) { + return parseTokenThreeDigits; + } + /* falls through */ + case 'DDD': + return parseTokenOneToThreeDigits; + case 'MMM': + case 'MMMM': + case 'dd': + case 'ddd': + case 'dddd': + return parseTokenWord; + case 'a': + case 'A': + return config._locale._meridiemParse; + case 'x': + return parseTokenOffsetMs; + case 'X': + return parseTokenTimestampMs; + case 'Z': + case 'ZZ': + return parseTokenTimezone; + case 'T': + return parseTokenT; + case 'SSSS': + return parseTokenDigits; + case 'MM': + case 'DD': + case 'YY': + case 'GG': + case 'gg': + case 'HH': + case 'hh': + case 'mm': + case 'ss': + case 'ww': + case 'WW': + return strict ? parseTokenTwoDigits : parseTokenOneOrTwoDigits; + case 'M': + case 'D': + case 'd': + case 'H': + case 'h': + case 'm': + case 's': + case 'w': + case 'W': + case 'e': + case 'E': + return parseTokenOneOrTwoDigits; + case 'Do': + return strict ? config._locale._ordinalParse : config._locale._ordinalParseLenient; + default : + a = new RegExp(regexpEscape(unescapeFormat(token.replace('\\', '')), 'i')); + return a; + } + } - // finish the line - if (this.dataPoints.length > 0) { - ctx.stroke(); - } - }; + function timezoneMinutesFromString(string) { + string = string || ''; + var possibleTzMatches = (string.match(parseTokenTimezone) || []), + tzChunk = possibleTzMatches[possibleTzMatches.length - 1] || [], + parts = (tzChunk + '').match(parseTimezoneChunker) || ['-', 0, 0], + minutes = +(parts[1] * 60) + toInt(parts[2]); - /** - * Start a moving operation inside the provided parent element - * @param {Event} event The event that occurred (required for - * retrieving the mouse position) - */ - Graph3d.prototype._onMouseDown = function(event) { - event = event || window.event; + return parts[0] === '+' ? -minutes : minutes; + } - // check if mouse is still down (may be up when focus is lost for example - // in an iframe) - if (this.leftButtonDown) { - this._onMouseUp(event); - } + // function to convert string input to date + function addTimeToArrayFromToken(token, input, config) { + var a, datePartArray = config._a; - // only react on left mouse button down - this.leftButtonDown = event.which ? (event.which === 1) : (event.button === 1); - if (!this.leftButtonDown && !this.touchDown) return; + switch (token) { + // QUARTER + case 'Q': + if (input != null) { + datePartArray[MONTH] = (toInt(input) - 1) * 3; + } + break; + // MONTH + case 'M' : // fall through to MM + case 'MM' : + if (input != null) { + datePartArray[MONTH] = toInt(input) - 1; + } + break; + case 'MMM' : // fall through to MMMM + case 'MMMM' : + a = config._locale.monthsParse(input, token, config._strict); + // if we didn't find a month name, mark the date as invalid. + if (a != null) { + datePartArray[MONTH] = a; + } else { + config._pf.invalidMonth = input; + } + break; + // DAY OF MONTH + case 'D' : // fall through to DD + case 'DD' : + if (input != null) { + datePartArray[DATE] = toInt(input); + } + break; + case 'Do' : + if (input != null) { + datePartArray[DATE] = toInt(parseInt( + input.match(/\d{1,2}/)[0], 10)); + } + break; + // DAY OF YEAR + case 'DDD' : // fall through to DDDD + case 'DDDD' : + if (input != null) { + config._dayOfYear = toInt(input); + } - // get mouse position (different code for IE and all other browsers) - this.startMouseX = getMouseX(event); - this.startMouseY = getMouseY(event); + break; + // YEAR + case 'YY' : + datePartArray[YEAR] = moment.parseTwoDigitYear(input); + break; + case 'YYYY' : + case 'YYYYY' : + case 'YYYYYY' : + datePartArray[YEAR] = toInt(input); + break; + // AM / PM + case 'a' : // fall through to A + case 'A' : + config._isPm = config._locale.isPM(input); + break; + // HOUR + case 'h' : // fall through to hh + case 'hh' : + config._pf.bigHour = true; + /* falls through */ + case 'H' : // fall through to HH + case 'HH' : + datePartArray[HOUR] = toInt(input); + break; + // MINUTE + case 'm' : // fall through to mm + case 'mm' : + datePartArray[MINUTE] = toInt(input); + break; + // SECOND + case 's' : // fall through to ss + case 'ss' : + datePartArray[SECOND] = toInt(input); + break; + // MILLISECOND + case 'S' : + case 'SS' : + case 'SSS' : + case 'SSSS' : + datePartArray[MILLISECOND] = toInt(('0.' + input) * 1000); + break; + // UNIX OFFSET (MILLISECONDS) + case 'x': + config._d = new Date(toInt(input)); + break; + // UNIX TIMESTAMP WITH MS + case 'X': + config._d = new Date(parseFloat(input) * 1000); + break; + // TIMEZONE + case 'Z' : // fall through to ZZ + case 'ZZ' : + config._useUTC = true; + config._tzm = timezoneMinutesFromString(input); + break; + // WEEKDAY - human + case 'dd': + case 'ddd': + case 'dddd': + a = config._locale.weekdaysParse(input); + // if we didn't get a weekday name, mark the date as invalid + if (a != null) { + config._w = config._w || {}; + config._w['d'] = a; + } else { + config._pf.invalidWeekday = input; + } + break; + // WEEK, WEEK DAY - numeric + case 'w': + case 'ww': + case 'W': + case 'WW': + case 'd': + case 'e': + case 'E': + token = token.substr(0, 1); + /* falls through */ + case 'gggg': + case 'GGGG': + case 'GGGGG': + token = token.substr(0, 2); + if (input) { + config._w = config._w || {}; + config._w[token] = toInt(input); + } + break; + case 'gg': + case 'GG': + config._w = config._w || {}; + config._w[token] = moment.parseTwoDigitYear(input); + } + } - this.startStart = new Date(this.start); - this.startEnd = new Date(this.end); - this.startArmRotation = this.camera.getArmRotation(); + function dayOfYearFromWeekInfo(config) { + var w, weekYear, week, weekday, dow, doy, temp; - this.frame.style.cursor = 'move'; + w = config._w; + if (w.GG != null || w.W != null || w.E != null) { + dow = 1; + doy = 4; - // add event listeners to handle moving the contents - // we store the function onmousemove and onmouseup in the graph, so we can - // remove the eventlisteners lateron in the function mouseUp() - var me = this; - this.onmousemove = function (event) {me._onMouseMove(event);}; - this.onmouseup = function (event) {me._onMouseUp(event);}; - util.addEventListener(document, 'mousemove', me.onmousemove); - util.addEventListener(document, 'mouseup', me.onmouseup); - util.preventDefault(event); - }; + // TODO: We need to take the current isoWeekYear, but that depends on + // how we interpret now (local, utc, fixed offset). So create + // a now version of current config (take local/utc/offset flags, and + // create now). + weekYear = dfl(w.GG, config._a[YEAR], weekOfYear(moment(), 1, 4).year); + week = dfl(w.W, 1); + weekday = dfl(w.E, 1); + } else { + dow = config._locale._week.dow; + doy = config._locale._week.doy; + weekYear = dfl(w.gg, config._a[YEAR], weekOfYear(moment(), dow, doy).year); + week = dfl(w.w, 1); - /** - * Perform moving operating. - * This function activated from within the funcion Graph.mouseDown(). - * @param {Event} event Well, eehh, the event - */ - Graph3d.prototype._onMouseMove = function (event) { - event = event || window.event; + if (w.d != null) { + // weekday -- low day numbers are considered next week + weekday = w.d; + if (weekday < dow) { + ++week; + } + } else if (w.e != null) { + // local weekday -- counting starts from begining of week + weekday = w.e + dow; + } else { + // default to begining of week + weekday = dow; + } + } + temp = dayOfYearFromWeeks(weekYear, week, weekday, doy, dow); - // calculate change in mouse position - var diffX = parseFloat(getMouseX(event)) - this.startMouseX; - var diffY = parseFloat(getMouseY(event)) - this.startMouseY; + config._a[YEAR] = temp.year; + config._dayOfYear = temp.dayOfYear; + } - var horizontalNew = this.startArmRotation.horizontal + diffX / 200; - var verticalNew = this.startArmRotation.vertical + diffY / 200; + // convert an array to a date. + // the array should mirror the parameters below + // note: all values past the year are optional and will default to the lowest possible value. + // [year, month, day , hour, minute, second, millisecond] + function dateFromConfig(config) { + var i, date, input = [], currentDate, yearToUse; - var snapAngle = 4; // degrees - var snapValue = Math.sin(snapAngle / 360 * 2 * Math.PI); + if (config._d) { + return; + } - // snap horizontally to nice angles at 0pi, 0.5pi, 1pi, 1.5pi, etc... - // the -0.001 is to take care that the vertical axis is always drawn at the left front corner - if (Math.abs(Math.sin(horizontalNew)) < snapValue) { - horizontalNew = Math.round((horizontalNew / Math.PI)) * Math.PI - 0.001; - } - if (Math.abs(Math.cos(horizontalNew)) < snapValue) { - horizontalNew = (Math.round((horizontalNew/ Math.PI - 0.5)) + 0.5) * Math.PI - 0.001; - } + currentDate = currentDateArray(config); - // snap vertically to nice angles - if (Math.abs(Math.sin(verticalNew)) < snapValue) { - verticalNew = Math.round((verticalNew / Math.PI)) * Math.PI; - } - if (Math.abs(Math.cos(verticalNew)) < snapValue) { - verticalNew = (Math.round((verticalNew/ Math.PI - 0.5)) + 0.5) * Math.PI; - } + //compute day of the year from weeks and weekdays + if (config._w && config._a[DATE] == null && config._a[MONTH] == null) { + dayOfYearFromWeekInfo(config); + } - this.camera.setArmRotation(horizontalNew, verticalNew); - this.redraw(); + //if the day of the year is set, figure out what it is + if (config._dayOfYear) { + yearToUse = dfl(config._a[YEAR], currentDate[YEAR]); - // fire a cameraPositionChange event - var parameters = this.getCameraPosition(); - this.emit('cameraPositionChange', parameters); + if (config._dayOfYear > daysInYear(yearToUse)) { + config._pf._overflowDayOfYear = true; + } - util.preventDefault(event); - }; + date = makeUTCDate(yearToUse, 0, config._dayOfYear); + config._a[MONTH] = date.getUTCMonth(); + config._a[DATE] = date.getUTCDate(); + } + // Default to current date. + // * if no year, month, day of month are given, default to today + // * if day of month is given, default month and year + // * if month is given, default only year + // * if year is given, don't default anything + for (i = 0; i < 3 && config._a[i] == null; ++i) { + config._a[i] = input[i] = currentDate[i]; + } - /** - * Stop moving operating. - * This function activated from within the funcion Graph.mouseDown(). - * @param {event} event The event - */ - Graph3d.prototype._onMouseUp = function (event) { - this.frame.style.cursor = 'auto'; - this.leftButtonDown = false; + // Zero out whatever was not defaulted, including time + for (; i < 7; i++) { + config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i]; + } - // remove event listeners here - util.removeEventListener(document, 'mousemove', this.onmousemove); - util.removeEventListener(document, 'mouseup', this.onmouseup); - util.preventDefault(event); - }; + // Check for 24:00:00.000 + if (config._a[HOUR] === 24 && + config._a[MINUTE] === 0 && + config._a[SECOND] === 0 && + config._a[MILLISECOND] === 0) { + config._nextDay = true; + config._a[HOUR] = 0; + } - /** - * After having moved the mouse, a tooltip should pop up when the mouse is resting on a data point - * @param {Event} event A mouse move event - */ - Graph3d.prototype._onTooltip = function (event) { - var delay = 300; // ms - var mouseX = getMouseX(event) - util.getAbsoluteLeft(this.frame); - var mouseY = getMouseY(event) - util.getAbsoluteTop(this.frame); + config._d = (config._useUTC ? makeUTCDate : makeDate).apply(null, input); + // Apply timezone offset from input. The actual zone can be changed + // with parseZone. + if (config._tzm != null) { + config._d.setUTCMinutes(config._d.getUTCMinutes() + config._tzm); + } - if (!this.showTooltip) { - return; - } + if (config._nextDay) { + config._a[HOUR] = 24; + } + } - if (this.tooltipTimeout) { - clearTimeout(this.tooltipTimeout); - } + function dateFromObject(config) { + var normalizedInput; - // (delayed) display of a tooltip only if no mouse button is down - if (this.leftButtonDown) { - this._hideTooltip(); - return; - } + if (config._d) { + return; + } - if (this.tooltip && this.tooltip.dataPoint) { - // tooltip is currently visible - var dataPoint = this._dataPointFromXY(mouseX, mouseY); - if (dataPoint !== this.tooltip.dataPoint) { - // datapoint changed - if (dataPoint) { - this._showTooltip(dataPoint); - } - else { - this._hideTooltip(); - } + normalizedInput = normalizeObjectUnits(config._i); + config._a = [ + normalizedInput.year, + normalizedInput.month, + normalizedInput.day || normalizedInput.date, + normalizedInput.hour, + normalizedInput.minute, + normalizedInput.second, + normalizedInput.millisecond + ]; + + dateFromConfig(config); } - } - else { - // tooltip is currently not visible - var me = this; - this.tooltipTimeout = setTimeout(function () { - me.tooltipTimeout = null; - // show a tooltip if we have a data point - var dataPoint = me._dataPointFromXY(mouseX, mouseY); - if (dataPoint) { - me._showTooltip(dataPoint); - } - }, delay); - } - }; + function currentDateArray(config) { + var now = new Date(); + if (config._useUTC) { + return [ + now.getUTCFullYear(), + now.getUTCMonth(), + now.getUTCDate() + ]; + } else { + return [now.getFullYear(), now.getMonth(), now.getDate()]; + } + } - /** - * Event handler for touchstart event on mobile devices - */ - Graph3d.prototype._onTouchStart = function(event) { - this.touchDown = true; + // date from string and format string + function makeDateFromStringAndFormat(config) { + if (config._f === moment.ISO_8601) { + parseISO(config); + return; + } - var me = this; - this.ontouchmove = function (event) {me._onTouchMove(event);}; - this.ontouchend = function (event) {me._onTouchEnd(event);}; - util.addEventListener(document, 'touchmove', me.ontouchmove); - util.addEventListener(document, 'touchend', me.ontouchend); + config._a = []; + config._pf.empty = true; - this._onMouseDown(event); - }; + // This array is used to make a Date, either with `new Date` or `Date.UTC` + var string = '' + config._i, + i, parsedInput, tokens, token, skipped, + stringLength = string.length, + totalParsedInputLength = 0; - /** - * Event handler for touchmove event on mobile devices - */ - Graph3d.prototype._onTouchMove = function(event) { - this._onMouseMove(event); - }; + tokens = expandFormat(config._f, config._locale).match(formattingTokens) || []; - /** - * Event handler for touchend event on mobile devices - */ - Graph3d.prototype._onTouchEnd = function(event) { - this.touchDown = false; + for (i = 0; i < tokens.length; i++) { + token = tokens[i]; + parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0]; + if (parsedInput) { + skipped = string.substr(0, string.indexOf(parsedInput)); + if (skipped.length > 0) { + config._pf.unusedInput.push(skipped); + } + string = string.slice(string.indexOf(parsedInput) + parsedInput.length); + totalParsedInputLength += parsedInput.length; + } + // don't parse if it's not a known token + if (formatTokenFunctions[token]) { + if (parsedInput) { + config._pf.empty = false; + } + else { + config._pf.unusedTokens.push(token); + } + addTimeToArrayFromToken(token, parsedInput, config); + } + else if (config._strict && !parsedInput) { + config._pf.unusedTokens.push(token); + } + } - util.removeEventListener(document, 'touchmove', this.ontouchmove); - util.removeEventListener(document, 'touchend', this.ontouchend); + // add remaining unparsed input length to the string + config._pf.charsLeftOver = stringLength - totalParsedInputLength; + if (string.length > 0) { + config._pf.unusedInput.push(string); + } - this._onMouseUp(event); - }; + // clear _12h flag if hour is <= 12 + if (config._pf.bigHour === true && config._a[HOUR] <= 12) { + config._pf.bigHour = undefined; + } + // handle am pm + if (config._isPm && config._a[HOUR] < 12) { + config._a[HOUR] += 12; + } + // if is 12 am, change hours to 0 + if (config._isPm === false && config._a[HOUR] === 12) { + config._a[HOUR] = 0; + } + dateFromConfig(config); + checkOverflow(config); + } + function unescapeFormat(s) { + return s.replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) { + return p1 || p2 || p3 || p4; + }); + } - /** - * Event handler for mouse wheel event, used to zoom the graph - * Code from http://adomas.org/javascript-mouse-wheel/ - * @param {event} event The event - */ - Graph3d.prototype._onWheel = function(event) { - if (!event) /* For IE. */ - event = window.event; + // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript + function regexpEscape(s) { + return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); + } - // retrieve delta - var delta = 0; - if (event.wheelDelta) { /* IE/Opera. */ - delta = event.wheelDelta/120; - } else if (event.detail) { /* Mozilla case. */ - // In Mozilla, sign of delta is different than in IE. - // Also, delta is multiple of 3. - delta = -event.detail/3; - } + // date from string and array of format strings + function makeDateFromStringAndArray(config) { + var tempConfig, + bestMoment, - // If delta is nonzero, handle it. - // Basically, delta is now positive if wheel was scrolled up, - // and negative, if wheel was scrolled down. - if (delta) { - var oldLength = this.camera.getArmLength(); - var newLength = oldLength * (1 - delta / 10); + scoreToBeat, + i, + currentScore; - this.camera.setArmLength(newLength); - this.redraw(); + if (config._f.length === 0) { + config._pf.invalidFormat = true; + config._d = new Date(NaN); + return; + } - this._hideTooltip(); - } + for (i = 0; i < config._f.length; i++) { + currentScore = 0; + tempConfig = copyConfig({}, config); + if (config._useUTC != null) { + tempConfig._useUTC = config._useUTC; + } + tempConfig._pf = defaultParsingFlags(); + tempConfig._f = config._f[i]; + makeDateFromStringAndFormat(tempConfig); - // fire a cameraPositionChange event - var parameters = this.getCameraPosition(); - this.emit('cameraPositionChange', parameters); + if (!isValid(tempConfig)) { + continue; + } - // Prevent default actions caused by mouse wheel. - // That might be ugly, but we handle scrolls somehow - // anyway, so don't bother here.. - util.preventDefault(event); - }; + // if there is any input that was not parsed add a penalty for that format + currentScore += tempConfig._pf.charsLeftOver; - /** - * Test whether a point lies inside given 2D triangle - * @param {Point2d} point - * @param {Point2d[]} triangle - * @return {boolean} Returns true if given point lies inside or on the edge of the triangle - * @private - */ - Graph3d.prototype._insideTriangle = function (point, triangle) { - var a = triangle[0], - b = triangle[1], - c = triangle[2]; + //or tokens + currentScore += tempConfig._pf.unusedTokens.length * 10; - function sign (x) { - return x > 0 ? 1 : x < 0 ? -1 : 0; - } + tempConfig._pf.score = currentScore; - var as = sign((b.x - a.x) * (point.y - a.y) - (b.y - a.y) * (point.x - a.x)); - var bs = sign((c.x - b.x) * (point.y - b.y) - (c.y - b.y) * (point.x - b.x)); - var cs = sign((a.x - c.x) * (point.y - c.y) - (a.y - c.y) * (point.x - c.x)); + if (scoreToBeat == null || currentScore < scoreToBeat) { + scoreToBeat = currentScore; + bestMoment = tempConfig; + } + } - // each of the three signs must be either equal to each other or zero - return (as == 0 || bs == 0 || as == bs) && - (bs == 0 || cs == 0 || bs == cs) && - (as == 0 || cs == 0 || as == cs); - }; + extend(config, bestMoment || tempConfig); + } - /** - * Find a data point close to given screen position (x, y) - * @param {Number} x - * @param {Number} y - * @return {Object | null} The closest data point or null if not close to any data point - * @private - */ - Graph3d.prototype._dataPointFromXY = function (x, y) { - var i, - distMax = 100, // px - dataPoint = null, - closestDataPoint = null, - closestDist = null, - center = new Point2d(x, y); + // date from iso format + function parseISO(config) { + var i, l, + string = config._i, + match = isoRegex.exec(string); - if (this.style === Graph3d.STYLE.BAR || - this.style === Graph3d.STYLE.BARCOLOR || - this.style === Graph3d.STYLE.BARSIZE) { - // the data points are ordered from far away to closest - for (i = this.dataPoints.length - 1; i >= 0; i--) { - dataPoint = this.dataPoints[i]; - var surfaces = dataPoint.surfaces; - if (surfaces) { - for (var s = surfaces.length - 1; s >= 0; s--) { - // split each surface in two triangles, and see if the center point is inside one of these - var surface = surfaces[s]; - var corners = surface.corners; - var triangle1 = [corners[0].screen, corners[1].screen, corners[2].screen]; - var triangle2 = [corners[2].screen, corners[3].screen, corners[0].screen]; - if (this._insideTriangle(center, triangle1) || - this._insideTriangle(center, triangle2)) { - // return immediately at the first hit - return dataPoint; - } + if (match) { + config._pf.iso = true; + for (i = 0, l = isoDates.length; i < l; i++) { + if (isoDates[i][1].exec(string)) { + // match[5] should be 'T' or undefined + config._f = isoDates[i][0] + (match[6] || ' '); + break; + } + } + for (i = 0, l = isoTimes.length; i < l; i++) { + if (isoTimes[i][1].exec(string)) { + config._f += isoTimes[i][0]; + break; + } + } + if (string.match(parseTokenTimezone)) { + config._f += 'Z'; + } + makeDateFromStringAndFormat(config); + } else { + config._isValid = false; } - } } - } - else { - // find the closest data point, using distance to the center of the point on 2d screen - for (i = 0; i < this.dataPoints.length; i++) { - dataPoint = this.dataPoints[i]; - var point = dataPoint.screen; - if (point) { - var distX = Math.abs(x - point.x); - var distY = Math.abs(y - point.y); - var dist = Math.sqrt(distX * distX + distY * distY); - if ((closestDist === null || dist < closestDist) && dist < distMax) { - closestDist = dist; - closestDataPoint = dataPoint; + // date from iso format or fallback + function makeDateFromString(config) { + parseISO(config); + if (config._isValid === false) { + delete config._isValid; + moment.createFromInputFallback(config); } - } } - } - - - return closestDataPoint; - }; - - /** - * Display a tooltip for given data point - * @param {Object} dataPoint - * @private - */ - Graph3d.prototype._showTooltip = function (dataPoint) { - var content, line, dot; - - if (!this.tooltip) { - content = document.createElement('div'); - content.style.position = 'absolute'; - content.style.padding = '10px'; - content.style.border = '1px solid #4d4d4d'; - content.style.color = '#1a1a1a'; - content.style.background = 'rgba(255,255,255,0.7)'; - content.style.borderRadius = '2px'; - content.style.boxShadow = '5px 5px 10px rgba(128,128,128,0.5)'; - - line = document.createElement('div'); - line.style.position = 'absolute'; - line.style.height = '40px'; - line.style.width = '0'; - line.style.borderLeft = '1px solid #4d4d4d'; - - dot = document.createElement('div'); - dot.style.position = 'absolute'; - dot.style.height = '0'; - dot.style.width = '0'; - dot.style.border = '5px solid #4d4d4d'; - dot.style.borderRadius = '5px'; - - this.tooltip = { - dataPoint: null, - dom: { - content: content, - line: line, - dot: dot - } - }; - } - else { - content = this.tooltip.dom.content; - line = this.tooltip.dom.line; - dot = this.tooltip.dom.dot; - } - - this._hideTooltip(); - - this.tooltip.dataPoint = dataPoint; - if (typeof this.showTooltip === 'function') { - content.innerHTML = this.showTooltip(dataPoint.point); - } - else { - content.innerHTML = '' + - '' + - '' + - '' + - '
x:' + dataPoint.point.x + '
y:' + dataPoint.point.y + '
z:' + dataPoint.point.z + '
'; - } - content.style.left = '0'; - content.style.top = '0'; - this.frame.appendChild(content); - this.frame.appendChild(line); - this.frame.appendChild(dot); + function map(arr, fn) { + var res = [], i; + for (i = 0; i < arr.length; ++i) { + res.push(fn(arr[i], i)); + } + return res; + } - // calculate sizes - var contentWidth = content.offsetWidth; - var contentHeight = content.offsetHeight; - var lineHeight = line.offsetHeight; - var dotWidth = dot.offsetWidth; - var dotHeight = dot.offsetHeight; + function makeDateFromInput(config) { + var input = config._i, matched; + if (input === undefined) { + config._d = new Date(); + } else if (isDate(input)) { + config._d = new Date(+input); + } else if ((matched = aspNetJsonRegex.exec(input)) !== null) { + config._d = new Date(+matched[1]); + } else if (typeof input === 'string') { + makeDateFromString(config); + } else if (isArray(input)) { + config._a = map(input.slice(0), function (obj) { + return parseInt(obj, 10); + }); + dateFromConfig(config); + } else if (typeof(input) === 'object') { + dateFromObject(config); + } else if (typeof(input) === 'number') { + // from milliseconds + config._d = new Date(input); + } else { + moment.createFromInputFallback(config); + } + } - var left = dataPoint.screen.x - contentWidth / 2; - left = Math.min(Math.max(left, 10), this.frame.clientWidth - 10 - contentWidth); + function makeDate(y, m, d, h, M, s, ms) { + //can't just apply() to create a date: + //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply + var date = new Date(y, m, d, h, M, s, ms); - line.style.left = dataPoint.screen.x + 'px'; - line.style.top = (dataPoint.screen.y - lineHeight) + 'px'; - content.style.left = left + 'px'; - content.style.top = (dataPoint.screen.y - lineHeight - contentHeight) + 'px'; - dot.style.left = (dataPoint.screen.x - dotWidth / 2) + 'px'; - dot.style.top = (dataPoint.screen.y - dotHeight / 2) + 'px'; - }; + //the date constructor doesn't accept years < 1970 + if (y < 1970) { + date.setFullYear(y); + } + return date; + } - /** - * Hide the tooltip when displayed - * @private - */ - Graph3d.prototype._hideTooltip = function () { - if (this.tooltip) { - this.tooltip.dataPoint = null; + function makeUTCDate(y) { + var date = new Date(Date.UTC.apply(null, arguments)); + if (y < 1970) { + date.setUTCFullYear(y); + } + return date; + } - for (var prop in this.tooltip.dom) { - if (this.tooltip.dom.hasOwnProperty(prop)) { - var elem = this.tooltip.dom[prop]; - if (elem && elem.parentNode) { - elem.parentNode.removeChild(elem); + function parseWeekday(input, locale) { + if (typeof input === 'string') { + if (!isNaN(input)) { + input = parseInt(input, 10); + } + else { + input = locale.weekdaysParse(input); + if (typeof input !== 'number') { + return null; + } + } } - } + return input; } - } - }; - /**--------------------------------------------------------------------------**/ + /************************************ + Relative Time + ************************************/ - /** - * Get the horizontal mouse position from a mouse event - * @param {Event} event - * @return {Number} mouse x - */ - function getMouseX (event) { - if ('clientX' in event) return event.clientX; - return event.targetTouches[0] && event.targetTouches[0].clientX || 0; - } + // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize + function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) { + return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture); + } - /** - * Get the vertical mouse position from a mouse event - * @param {Event} event - * @return {Number} mouse y - */ - function getMouseY (event) { - if ('clientY' in event) return event.clientY; - return event.targetTouches[0] && event.targetTouches[0].clientY || 0; - } + function relativeTime(posNegDuration, withoutSuffix, locale) { + var duration = moment.duration(posNegDuration).abs(), + seconds = round(duration.as('s')), + minutes = round(duration.as('m')), + hours = round(duration.as('h')), + days = round(duration.as('d')), + months = round(duration.as('M')), + years = round(duration.as('y')), - module.exports = Graph3d; + args = seconds < relativeTimeThresholds.s && ['s', seconds] || + minutes === 1 && ['m'] || + minutes < relativeTimeThresholds.m && ['mm', minutes] || + hours === 1 && ['h'] || + hours < relativeTimeThresholds.h && ['hh', hours] || + days === 1 && ['d'] || + days < relativeTimeThresholds.d && ['dd', days] || + months === 1 && ['M'] || + months < relativeTimeThresholds.M && ['MM', months] || + years === 1 && ['y'] || ['yy', years]; + args[2] = withoutSuffix; + args[3] = +posNegDuration > 0; + args[4] = locale; + return substituteTimeAgo.apply({}, args); + } -/***/ }, -/* 7 */ -/***/ function(module, exports, __webpack_require__) { - var Point3d = __webpack_require__(10); + /************************************ + Week of Year + ************************************/ - /** - * @class Camera - * The camera is mounted on a (virtual) camera arm. The camera arm can rotate - * The camera is always looking in the direction of the origin of the arm. - * This way, the camera always rotates around one fixed point, the location - * of the camera arm. - * - * Documentation: - * http://en.wikipedia.org/wiki/3D_projection - */ - function Camera() { - this.armLocation = new Point3d(); - this.armRotation = {}; - this.armRotation.horizontal = 0; - this.armRotation.vertical = 0; - this.armLength = 1.7; - this.cameraLocation = new Point3d(); - this.cameraRotation = new Point3d(0.5*Math.PI, 0, 0); + // firstDayOfWeek 0 = sun, 6 = sat + // the day of the week that starts the week + // (usually sunday or monday) + // firstDayOfWeekOfYear 0 = sun, 6 = sat + // the first week is the week that contains the first + // of this day of the week + // (eg. ISO weeks use thursday (4)) + function weekOfYear(mom, firstDayOfWeek, firstDayOfWeekOfYear) { + var end = firstDayOfWeekOfYear - firstDayOfWeek, + daysToDayOfWeek = firstDayOfWeekOfYear - mom.day(), + adjustedMoment; - this.calculateCameraOrientation(); - } - /** - * Set the location (origin) of the arm - * @param {Number} x Normalized value of x - * @param {Number} y Normalized value of y - * @param {Number} z Normalized value of z - */ - Camera.prototype.setArmLocation = function(x, y, z) { - this.armLocation.x = x; - this.armLocation.y = y; - this.armLocation.z = z; + if (daysToDayOfWeek > end) { + daysToDayOfWeek -= 7; + } - this.calculateCameraOrientation(); - }; + if (daysToDayOfWeek < end - 7) { + daysToDayOfWeek += 7; + } - /** - * Set the rotation of the camera arm - * @param {Number} horizontal The horizontal rotation, between 0 and 2*PI. - * Optional, can be left undefined. - * @param {Number} vertical The vertical rotation, between 0 and 0.5*PI - * if vertical=0.5*PI, the graph is shown from the - * top. Optional, can be left undefined. - */ - Camera.prototype.setArmRotation = function(horizontal, vertical) { - if (horizontal !== undefined) { - this.armRotation.horizontal = horizontal; - } + adjustedMoment = moment(mom).add(daysToDayOfWeek, 'd'); + return { + week: Math.ceil(adjustedMoment.dayOfYear() / 7), + year: adjustedMoment.year() + }; + } - if (vertical !== undefined) { - this.armRotation.vertical = vertical; - if (this.armRotation.vertical < 0) this.armRotation.vertical = 0; - if (this.armRotation.vertical > 0.5*Math.PI) this.armRotation.vertical = 0.5*Math.PI; - } + //http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday + function dayOfYearFromWeeks(year, week, weekday, firstDayOfWeekOfYear, firstDayOfWeek) { + var d = makeUTCDate(year, 0, 1).getUTCDay(), daysToAdd, dayOfYear; - if (horizontal !== undefined || vertical !== undefined) { - this.calculateCameraOrientation(); - } - }; + d = d === 0 ? 7 : d; + weekday = weekday != null ? weekday : firstDayOfWeek; + daysToAdd = firstDayOfWeek - d + (d > firstDayOfWeekOfYear ? 7 : 0) - (d < firstDayOfWeek ? 7 : 0); + dayOfYear = 7 * (week - 1) + (weekday - firstDayOfWeek) + daysToAdd + 1; - /** - * Retrieve the current arm rotation - * @return {object} An object with parameters horizontal and vertical - */ - Camera.prototype.getArmRotation = function() { - var rot = {}; - rot.horizontal = this.armRotation.horizontal; - rot.vertical = this.armRotation.vertical; + return { + year: dayOfYear > 0 ? year : year - 1, + dayOfYear: dayOfYear > 0 ? dayOfYear : daysInYear(year - 1) + dayOfYear + }; + } - return rot; - }; + /************************************ + Top Level Functions + ************************************/ - /** - * Set the (normalized) length of the camera arm. - * @param {Number} length A length between 0.71 and 5.0 - */ - Camera.prototype.setArmLength = function(length) { - if (length === undefined) - return; + function makeMoment(config) { + var input = config._i, + format = config._f, + res; - this.armLength = length; + config._locale = config._locale || moment.localeData(config._l); - // Radius must be larger than the corner of the graph, - // which has a distance of sqrt(0.5^2+0.5^2) = 0.71 from the center of the - // graph - if (this.armLength < 0.71) this.armLength = 0.71; - if (this.armLength > 5.0) this.armLength = 5.0; + if (input === null || (format === undefined && input === '')) { + return moment.invalid({nullInput: true}); + } - this.calculateCameraOrientation(); - }; + if (typeof input === 'string') { + config._i = input = config._locale.preparse(input); + } - /** - * Retrieve the arm length - * @return {Number} length - */ - Camera.prototype.getArmLength = function() { - return this.armLength; - }; + if (moment.isMoment(input)) { + return new Moment(input, true); + } else if (format) { + if (isArray(format)) { + makeDateFromStringAndArray(config); + } else { + makeDateFromStringAndFormat(config); + } + } else { + makeDateFromInput(config); + } - /** - * Retrieve the camera location - * @return {Point3d} cameraLocation - */ - Camera.prototype.getCameraLocation = function() { - return this.cameraLocation; - }; + res = new Moment(config); + if (res._nextDay) { + // Adding is smart enough around DST + res.add(1, 'd'); + res._nextDay = undefined; + } - /** - * Retrieve the camera rotation - * @return {Point3d} cameraRotation - */ - Camera.prototype.getCameraRotation = function() { - return this.cameraRotation; - }; + return res; + } - /** - * Calculate the location and rotation of the camera based on the - * position and orientation of the camera arm - */ - Camera.prototype.calculateCameraOrientation = function() { - // calculate location of the camera - this.cameraLocation.x = this.armLocation.x - this.armLength * Math.sin(this.armRotation.horizontal) * Math.cos(this.armRotation.vertical); - this.cameraLocation.y = this.armLocation.y - this.armLength * Math.cos(this.armRotation.horizontal) * Math.cos(this.armRotation.vertical); - this.cameraLocation.z = this.armLocation.z + this.armLength * Math.sin(this.armRotation.vertical); + moment = function (input, format, locale, strict) { + var c; - // calculate rotation of the camera - this.cameraRotation.x = Math.PI/2 - this.armRotation.vertical; - this.cameraRotation.y = 0; - this.cameraRotation.z = -this.armRotation.horizontal; - }; + if (typeof(locale) === 'boolean') { + strict = locale; + locale = undefined; + } + // object construction must be done this way. + // https://github.com/moment/moment/issues/1423 + c = {}; + c._isAMomentObject = true; + c._i = input; + c._f = format; + c._l = locale; + c._strict = strict; + c._isUTC = false; + c._pf = defaultParsingFlags(); - module.exports = Camera; + return makeMoment(c); + }; -/***/ }, -/* 8 */ -/***/ function(module, exports, __webpack_require__) { + moment.suppressDeprecationWarnings = false; - var DataView = __webpack_require__(4); + moment.createFromInputFallback = deprecate( + 'moment construction falls back to js Date. This is ' + + 'discouraged and will be removed in upcoming major ' + + 'release. Please refer to ' + + 'https://github.com/moment/moment/issues/1407 for more info.', + function (config) { + config._d = new Date(config._i + (config._useUTC ? ' UTC' : '')); + } + ); - /** - * @class Filter - * - * @param {DataSet} data The google data table - * @param {Number} column The index of the column to be filtered - * @param {Graph} graph The graph - */ - function Filter (data, column, graph) { - this.data = data; - this.column = column; - this.graph = graph; // the parent graph + // Pick a moment m from moments so that m[fn](other) is true for all + // other. This relies on the function fn to be transitive. + // + // moments should either be an array of moment objects or an array, whose + // first element is an array of moment objects. + function pickBy(fn, moments) { + var res, i; + if (moments.length === 1 && isArray(moments[0])) { + moments = moments[0]; + } + if (!moments.length) { + return moment(); + } + res = moments[0]; + for (i = 1; i < moments.length; ++i) { + if (moments[i][fn](res)) { + res = moments[i]; + } + } + return res; + } - this.index = undefined; - this.value = undefined; + moment.min = function () { + var args = [].slice.call(arguments, 0); - // read all distinct values and select the first one - this.values = graph.getDistinctValues(data.get(), this.column); + return pickBy('isBefore', args); + }; - // sort both numeric and string values correctly - this.values.sort(function (a, b) { - return a > b ? 1 : a < b ? -1 : 0; - }); + moment.max = function () { + var args = [].slice.call(arguments, 0); - if (this.values.length > 0) { - this.selectValue(0); - } + return pickBy('isAfter', args); + }; - // create an array with the filtered datapoints. this will be loaded afterwards - this.dataPoints = []; + // creating with utc + moment.utc = function (input, format, locale, strict) { + var c; - this.loaded = false; - this.onLoadCallback = undefined; + if (typeof(locale) === 'boolean') { + strict = locale; + locale = undefined; + } + // object construction must be done this way. + // https://github.com/moment/moment/issues/1423 + c = {}; + c._isAMomentObject = true; + c._useUTC = true; + c._isUTC = true; + c._l = locale; + c._i = input; + c._f = format; + c._strict = strict; + c._pf = defaultParsingFlags(); - if (graph.animationPreload) { - this.loaded = false; - this.loadInBackground(); - } - else { - this.loaded = true; - } - }; + return makeMoment(c).utc(); + }; + // creating with unix timestamp (in seconds) + moment.unix = function (input) { + return moment(input * 1000); + }; - /** - * Return the label - * @return {string} label - */ - Filter.prototype.isLoaded = function() { - return this.loaded; - }; + // duration + moment.duration = function (input, key) { + var duration = input, + // matching against regexp is expensive, do it on demand + match = null, + sign, + ret, + parseIso, + diffRes; + + if (moment.isDuration(input)) { + duration = { + ms: input._milliseconds, + d: input._days, + M: input._months + }; + } else if (typeof input === 'number') { + duration = {}; + if (key) { + duration[key] = input; + } else { + duration.milliseconds = input; + } + } else if (!!(match = aspNetTimeSpanJsonRegex.exec(input))) { + sign = (match[1] === '-') ? -1 : 1; + duration = { + y: 0, + d: toInt(match[DATE]) * sign, + h: toInt(match[HOUR]) * sign, + m: toInt(match[MINUTE]) * sign, + s: toInt(match[SECOND]) * sign, + ms: toInt(match[MILLISECOND]) * sign + }; + } else if (!!(match = isoDurationRegex.exec(input))) { + sign = (match[1] === '-') ? -1 : 1; + parseIso = function (inp) { + // We'd normally use ~~inp for this, but unfortunately it also + // converts floats to ints. + // inp may be undefined, so careful calling replace on it. + var res = inp && parseFloat(inp.replace(',', '.')); + // apply sign while we're at it + return (isNaN(res) ? 0 : res) * sign; + }; + duration = { + y: parseIso(match[2]), + M: parseIso(match[3]), + d: parseIso(match[4]), + h: parseIso(match[5]), + m: parseIso(match[6]), + s: parseIso(match[7]), + w: parseIso(match[8]) + }; + } else if (typeof duration === 'object' && + ('from' in duration || 'to' in duration)) { + diffRes = momentsDifference(moment(duration.from), moment(duration.to)); + + duration = {}; + duration.ms = diffRes.milliseconds; + duration.M = diffRes.months; + } + ret = new Duration(duration); - /** - * Return the loaded progress - * @return {Number} percentage between 0 and 100 - */ - Filter.prototype.getLoadedProgress = function() { - var len = this.values.length; + if (moment.isDuration(input) && hasOwnProp(input, '_locale')) { + ret._locale = input._locale; + } - var i = 0; - while (this.dataPoints[i]) { - i++; - } + return ret; + }; - return Math.round(i / len * 100); - }; + // version number + moment.version = VERSION; + // default format + moment.defaultFormat = isoFormat; - /** - * Return the label - * @return {string} label - */ - Filter.prototype.getLabel = function() { - return this.graph.filterLabel; - }; + // constant that refers to the ISO standard + moment.ISO_8601 = function () {}; + // Plugins that add properties should also add the key here (null value), + // so we can properly clone ourselves. + moment.momentProperties = momentProperties; - /** - * Return the columnIndex of the filter - * @return {Number} columnIndex - */ - Filter.prototype.getColumn = function() { - return this.column; - }; + // This function will be called whenever a moment is mutated. + // It is intended to keep the offset in sync with the timezone. + moment.updateOffset = function () {}; - /** - * Return the currently selected value. Returns undefined if there is no selection - * @return {*} value - */ - Filter.prototype.getSelectedValue = function() { - if (this.index === undefined) - return undefined; + // This function allows you to set a threshold for relative time strings + moment.relativeTimeThreshold = function (threshold, limit) { + if (relativeTimeThresholds[threshold] === undefined) { + return false; + } + if (limit === undefined) { + return relativeTimeThresholds[threshold]; + } + relativeTimeThresholds[threshold] = limit; + return true; + }; - return this.values[this.index]; - }; + moment.lang = deprecate( + 'moment.lang is deprecated. Use moment.locale instead.', + function (key, value) { + return moment.locale(key, value); + } + ); - /** - * Retrieve all values of the filter - * @return {Array} values - */ - Filter.prototype.getValues = function() { - return this.values; - }; + // This function will load locale and then set the global locale. If + // no arguments are passed in, it will simply return the current global + // locale key. + moment.locale = function (key, values) { + var data; + if (key) { + if (typeof(values) !== 'undefined') { + data = moment.defineLocale(key, values); + } + else { + data = moment.localeData(key); + } - /** - * Retrieve one value of the filter - * @param {Number} index - * @return {*} value - */ - Filter.prototype.getValue = function(index) { - if (index >= this.values.length) - throw 'Error: index out of range'; + if (data) { + moment.duration._locale = moment._locale = data; + } + } - return this.values[index]; - }; + return moment._locale._abbr; + }; + moment.defineLocale = function (name, values) { + if (values !== null) { + values.abbr = name; + if (!locales[name]) { + locales[name] = new Locale(); + } + locales[name].set(values); - /** - * Retrieve the (filtered) dataPoints for the currently selected filter index - * @param {Number} [index] (optional) - * @return {Array} dataPoints - */ - Filter.prototype._getDataPoints = function(index) { - if (index === undefined) - index = this.index; + // backwards compat for now: also set the locale + moment.locale(name); - if (index === undefined) - return []; + return locales[name]; + } else { + // useful for testing + delete locales[name]; + return null; + } + }; - var dataPoints; - if (this.dataPoints[index]) { - dataPoints = this.dataPoints[index]; - } - else { - var f = {}; - f.column = this.column; - f.value = this.values[index]; + moment.langData = deprecate( + 'moment.langData is deprecated. Use moment.localeData instead.', + function (key) { + return moment.localeData(key); + } + ); - var dataView = new DataView(this.data,{filter: function (item) {return (item[f.column] == f.value);}}).get(); - dataPoints = this.graph._getDataPoints(dataView); + // returns locale data + moment.localeData = function (key) { + var locale; - this.dataPoints[index] = dataPoints; - } + if (key && key._locale && key._locale._abbr) { + key = key._locale._abbr; + } - return dataPoints; - }; + if (!key) { + return moment._locale; + } + if (!isArray(key)) { + //short-circuit everything else + locale = loadLocale(key); + if (locale) { + return locale; + } + key = [key]; + } + return chooseLocale(key); + }; - /** - * Set a callback function when the filter is fully loaded. - */ - Filter.prototype.setOnLoadCallback = function(callback) { - this.onLoadCallback = callback; - }; + // compare moment object + moment.isMoment = function (obj) { + return obj instanceof Moment || + (obj != null && hasOwnProp(obj, '_isAMomentObject')); + }; + // for typechecking Duration objects + moment.isDuration = function (obj) { + return obj instanceof Duration; + }; - /** - * Add a value to the list with available values for this filter - * No double entries will be created. - * @param {Number} index - */ - Filter.prototype.selectValue = function(index) { - if (index >= this.values.length) - throw 'Error: index out of range'; + for (i = lists.length - 1; i >= 0; --i) { + makeList(lists[i]); + } - this.index = index; - this.value = this.values[index]; - }; + moment.normalizeUnits = function (units) { + return normalizeUnits(units); + }; - /** - * Load all filtered rows in the background one by one - * Start this method without providing an index! - */ - Filter.prototype.loadInBackground = function(index) { - if (index === undefined) - index = 0; + moment.invalid = function (flags) { + var m = moment.utc(NaN); + if (flags != null) { + extend(m._pf, flags); + } + else { + m._pf.userInvalidated = true; + } - var frame = this.graph.frame; + return m; + }; - if (index < this.values.length) { - var dataPointsTemp = this._getDataPoints(index); - //this.graph.redrawInfo(); // TODO: not neat + moment.parseZone = function () { + return moment.apply(null, arguments).parseZone(); + }; - // create a progress box - if (frame.progress === undefined) { - frame.progress = document.createElement('DIV'); - frame.progress.style.position = 'absolute'; - frame.progress.style.color = 'gray'; - frame.appendChild(frame.progress); - } - var progress = this.getLoadedProgress(); - frame.progress.innerHTML = 'Loading animation... ' + progress + '%'; - // TODO: this is no nice solution... - frame.progress.style.bottom = 60 + 'px'; // TODO: use height of slider - frame.progress.style.left = 10 + 'px'; + moment.parseTwoDigitYear = function (input) { + return toInt(input) + (toInt(input) > 68 ? 1900 : 2000); + }; - var me = this; - setTimeout(function() {me.loadInBackground(index+1);}, 10); - this.loaded = false; - } - else { - this.loaded = true; + /************************************ + Moment Prototype + ************************************/ - // remove the progress box - if (frame.progress !== undefined) { - frame.removeChild(frame.progress); - frame.progress = undefined; - } - if (this.onLoadCallback) - this.onLoadCallback(); - } - }; + extend(moment.fn = Moment.prototype, { - module.exports = Filter; + clone : function () { + return moment(this); + }, + valueOf : function () { + return +this._d + ((this._offset || 0) * 60000); + }, -/***/ }, -/* 9 */ -/***/ function(module, exports, __webpack_require__) { + unix : function () { + return Math.floor(+this / 1000); + }, - /** - * @prototype Point2d - * @param {Number} [x] - * @param {Number} [y] - */ - function Point2d (x, y) { - this.x = x !== undefined ? x : 0; - this.y = y !== undefined ? y : 0; - } + toString : function () { + return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ'); + }, - module.exports = Point2d; + toDate : function () { + return this._offset ? new Date(+this) : this._d; + }, + toISOString : function () { + var m = moment(this).utc(); + if (0 < m.year() && m.year() <= 9999) { + if ('function' === typeof Date.prototype.toISOString) { + // native implementation is ~50x faster, use it when we can + return this.toDate().toISOString(); + } else { + return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); + } + } else { + return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); + } + }, -/***/ }, -/* 10 */ -/***/ function(module, exports, __webpack_require__) { + toArray : function () { + var m = this; + return [ + m.year(), + m.month(), + m.date(), + m.hours(), + m.minutes(), + m.seconds(), + m.milliseconds() + ]; + }, - /** - * @prototype Point3d - * @param {Number} [x] - * @param {Number} [y] - * @param {Number} [z] - */ - function Point3d(x, y, z) { - this.x = x !== undefined ? x : 0; - this.y = y !== undefined ? y : 0; - this.z = z !== undefined ? z : 0; - }; + isValid : function () { + return isValid(this); + }, - /** - * Subtract the two provided points, returns a-b - * @param {Point3d} a - * @param {Point3d} b - * @return {Point3d} a-b - */ - Point3d.subtract = function(a, b) { - var sub = new Point3d(); - sub.x = a.x - b.x; - sub.y = a.y - b.y; - sub.z = a.z - b.z; - return sub; - }; + isDSTShifted : function () { + if (this._a) { + return this.isValid() && compareArrays(this._a, (this._isUTC ? moment.utc(this._a) : moment(this._a)).toArray()) > 0; + } - /** - * Add the two provided points, returns a+b - * @param {Point3d} a - * @param {Point3d} b - * @return {Point3d} a+b - */ - Point3d.add = function(a, b) { - var sum = new Point3d(); - sum.x = a.x + b.x; - sum.y = a.y + b.y; - sum.z = a.z + b.z; - return sum; - }; + return false; + }, - /** - * Calculate the average of two 3d points - * @param {Point3d} a - * @param {Point3d} b - * @return {Point3d} The average, (a+b)/2 - */ - Point3d.avg = function(a, b) { - return new Point3d( - (a.x + b.x) / 2, - (a.y + b.y) / 2, - (a.z + b.z) / 2 - ); - }; + parsingFlags : function () { + return extend({}, this._pf); + }, - /** - * Calculate the cross product of the two provided points, returns axb - * Documentation: http://en.wikipedia.org/wiki/Cross_product - * @param {Point3d} a - * @param {Point3d} b - * @return {Point3d} cross product axb - */ - Point3d.crossProduct = function(a, b) { - var crossproduct = new Point3d(); + invalidAt: function () { + return this._pf.overflow; + }, - crossproduct.x = a.y * b.z - a.z * b.y; - crossproduct.y = a.z * b.x - a.x * b.z; - crossproduct.z = a.x * b.y - a.y * b.x; + utc : function (keepLocalTime) { + return this.zone(0, keepLocalTime); + }, - return crossproduct; - }; + local : function (keepLocalTime) { + if (this._isUTC) { + this.zone(0, keepLocalTime); + this._isUTC = false; + if (keepLocalTime) { + this.add(this._dateTzOffset(), 'm'); + } + } + return this; + }, - /** - * Rtrieve the length of the vector (or the distance from this point to the origin - * @return {Number} length - */ - Point3d.prototype.length = function() { - return Math.sqrt( - this.x * this.x + - this.y * this.y + - this.z * this.z - ); - }; + format : function (inputString) { + var output = formatMoment(this, inputString || moment.defaultFormat); + return this.localeData().postformat(output); + }, - module.exports = Point3d; + add : createAdder(1, 'add'), + subtract : createAdder(-1, 'subtract'), -/***/ }, -/* 11 */ -/***/ function(module, exports, __webpack_require__) { + diff : function (input, units, asFloat) { + var that = makeAs(input, this), + zoneDiff = (this.zone() - that.zone()) * 6e4, + diff, output, daysAdjust; - var util = __webpack_require__(1); + units = normalizeUnits(units); - /** - * @constructor Slider - * - * An html slider control with start/stop/prev/next buttons - * @param {Element} container The element where the slider will be created - * @param {Object} options Available options: - * {boolean} visible If true (default) the - * slider is visible. - */ - function Slider(container, options) { - if (container === undefined) { - throw 'Error: No container element defined'; - } - this.container = container; - this.visible = (options && options.visible != undefined) ? options.visible : true; + if (units === 'year' || units === 'month') { + // average number of days in the months in the given dates + diff = (this.daysInMonth() + that.daysInMonth()) * 432e5; // 24 * 60 * 60 * 1000 / 2 + // difference in months + output = ((this.year() - that.year()) * 12) + (this.month() - that.month()); + // adjust by taking difference in days, average number of days + // and dst in the given months. + daysAdjust = (this - moment(this).startOf('month')) - + (that - moment(that).startOf('month')); + // same as above but with zones, to negate all dst + daysAdjust -= ((this.zone() - moment(this).startOf('month').zone()) - + (that.zone() - moment(that).startOf('month').zone())) * 6e4; + output += daysAdjust / diff; + if (units === 'year') { + output = output / 12; + } + } else { + diff = (this - that); + output = units === 'second' ? diff / 1e3 : // 1000 + units === 'minute' ? diff / 6e4 : // 1000 * 60 + units === 'hour' ? diff / 36e5 : // 1000 * 60 * 60 + units === 'day' ? (diff - zoneDiff) / 864e5 : // 1000 * 60 * 60 * 24, negate dst + units === 'week' ? (diff - zoneDiff) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst + diff; + } + return asFloat ? output : absRound(output); + }, - if (this.visible) { - this.frame = document.createElement('DIV'); - //this.frame.style.backgroundColor = '#E5E5E5'; - this.frame.style.width = '100%'; - this.frame.style.position = 'relative'; - this.container.appendChild(this.frame); + from : function (time, withoutSuffix) { + return moment.duration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix); + }, - this.frame.prev = document.createElement('INPUT'); - this.frame.prev.type = 'BUTTON'; - this.frame.prev.value = 'Prev'; - this.frame.appendChild(this.frame.prev); + fromNow : function (withoutSuffix) { + return this.from(moment(), withoutSuffix); + }, - this.frame.play = document.createElement('INPUT'); - this.frame.play.type = 'BUTTON'; - this.frame.play.value = 'Play'; - this.frame.appendChild(this.frame.play); + calendar : function (time) { + // We want to compare the start of today, vs this. + // Getting start-of-today depends on whether we're zone'd or not. + var now = time || moment(), + sod = makeAs(now, this).startOf('day'), + diff = this.diff(sod, 'days', true), + format = diff < -6 ? 'sameElse' : + diff < -1 ? 'lastWeek' : + diff < 0 ? 'lastDay' : + diff < 1 ? 'sameDay' : + diff < 2 ? 'nextDay' : + diff < 7 ? 'nextWeek' : 'sameElse'; + return this.format(this.localeData().calendar(format, this, moment(now))); + }, - this.frame.next = document.createElement('INPUT'); - this.frame.next.type = 'BUTTON'; - this.frame.next.value = 'Next'; - this.frame.appendChild(this.frame.next); + isLeapYear : function () { + return isLeapYear(this.year()); + }, - this.frame.bar = document.createElement('INPUT'); - this.frame.bar.type = 'BUTTON'; - this.frame.bar.style.position = 'absolute'; - this.frame.bar.style.border = '1px solid red'; - this.frame.bar.style.width = '100px'; - this.frame.bar.style.height = '6px'; - this.frame.bar.style.borderRadius = '2px'; - this.frame.bar.style.MozBorderRadius = '2px'; - this.frame.bar.style.border = '1px solid #7F7F7F'; - this.frame.bar.style.backgroundColor = '#E5E5E5'; - this.frame.appendChild(this.frame.bar); + isDST : function () { + return (this.zone() < this.clone().month(0).zone() || + this.zone() < this.clone().month(5).zone()); + }, - this.frame.slide = document.createElement('INPUT'); - this.frame.slide.type = 'BUTTON'; - this.frame.slide.style.margin = '0px'; - this.frame.slide.value = ' '; - this.frame.slide.style.position = 'relative'; - this.frame.slide.style.left = '-100px'; - this.frame.appendChild(this.frame.slide); + day : function (input) { + var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay(); + if (input != null) { + input = parseWeekday(input, this.localeData()); + return this.add(input - day, 'd'); + } else { + return day; + } + }, - // create events - var me = this; - this.frame.slide.onmousedown = function (event) {me._onMouseDown(event);}; - this.frame.prev.onclick = function (event) {me.prev(event);}; - this.frame.play.onclick = function (event) {me.togglePlay(event);}; - this.frame.next.onclick = function (event) {me.next(event);}; - } + month : makeAccessor('Month', true), - this.onChangeCallback = undefined; + startOf : function (units) { + units = normalizeUnits(units); + // the following switch intentionally omits break keywords + // to utilize falling through the cases. + switch (units) { + case 'year': + this.month(0); + /* falls through */ + case 'quarter': + case 'month': + this.date(1); + /* falls through */ + case 'week': + case 'isoWeek': + case 'day': + this.hours(0); + /* falls through */ + case 'hour': + this.minutes(0); + /* falls through */ + case 'minute': + this.seconds(0); + /* falls through */ + case 'second': + this.milliseconds(0); + /* falls through */ + } - this.values = []; - this.index = undefined; + // weeks are a special case + if (units === 'week') { + this.weekday(0); + } else if (units === 'isoWeek') { + this.isoWeekday(1); + } - this.playTimeout = undefined; - this.playInterval = 1000; // milliseconds - this.playLoop = true; - } + // quarters are also special + if (units === 'quarter') { + this.month(Math.floor(this.month() / 3) * 3); + } - /** - * Select the previous index - */ - Slider.prototype.prev = function() { - var index = this.getIndex(); - if (index > 0) { - index--; - this.setIndex(index); - } - }; + return this; + }, - /** - * Select the next index - */ - Slider.prototype.next = function() { - var index = this.getIndex(); - if (index < this.values.length - 1) { - index++; - this.setIndex(index); - } - }; + endOf: function (units) { + units = normalizeUnits(units); + if (units === undefined || units === 'millisecond') { + return this; + } + return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms'); + }, - /** - * Select the next index - */ - Slider.prototype.playNext = function() { - var start = new Date(); + isAfter: function (input, units) { + var inputMs; + units = normalizeUnits(typeof units !== 'undefined' ? units : 'millisecond'); + if (units === 'millisecond') { + input = moment.isMoment(input) ? input : moment(input); + return +this > +input; + } else { + inputMs = moment.isMoment(input) ? +input : +moment(input); + return inputMs < +this.clone().startOf(units); + } + }, - var index = this.getIndex(); - if (index < this.values.length - 1) { - index++; - this.setIndex(index); - } - else if (this.playLoop) { - // jump to the start - index = 0; - this.setIndex(index); - } + isBefore: function (input, units) { + var inputMs; + units = normalizeUnits(typeof units !== 'undefined' ? units : 'millisecond'); + if (units === 'millisecond') { + input = moment.isMoment(input) ? input : moment(input); + return +this < +input; + } else { + inputMs = moment.isMoment(input) ? +input : +moment(input); + return +this.clone().endOf(units) < inputMs; + } + }, - var end = new Date(); - var diff = (end - start); + isSame: function (input, units) { + var inputMs; + units = normalizeUnits(units || 'millisecond'); + if (units === 'millisecond') { + input = moment.isMoment(input) ? input : moment(input); + return +this === +input; + } else { + inputMs = +moment(input); + return +(this.clone().startOf(units)) <= inputMs && inputMs <= +(this.clone().endOf(units)); + } + }, - // calculate how much time it to to set the index and to execute the callback - // function. - var interval = Math.max(this.playInterval - diff, 0); - // document.title = diff // TODO: cleanup + min: deprecate( + 'moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548', + function (other) { + other = moment.apply(null, arguments); + return other < this ? this : other; + } + ), - var me = this; - this.playTimeout = setTimeout(function() {me.playNext();}, interval); - }; + max: deprecate( + 'moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548', + function (other) { + other = moment.apply(null, arguments); + return other > this ? this : other; + } + ), - /** - * Toggle start or stop playing - */ - Slider.prototype.togglePlay = function() { - if (this.playTimeout === undefined) { - this.play(); - } else { - this.stop(); - } - }; + // keepLocalTime = true means only change the timezone, without + // affecting the local hour. So 5:31:26 +0300 --[zone(2, true)]--> + // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist int zone + // +0200, so we adjust the time as needed, to be valid. + // + // Keeping the time actually adds/subtracts (one hour) + // from the actual represented time. That is why we call updateOffset + // a second time. In case it wants us to change the offset again + // _changeInProgress == true case, then we have to adjust, because + // there is no such time in the given timezone. + zone : function (input, keepLocalTime) { + var offset = this._offset || 0, + localAdjust; + if (input != null) { + if (typeof input === 'string') { + input = timezoneMinutesFromString(input); + } + if (Math.abs(input) < 16) { + input = input * 60; + } + if (!this._isUTC && keepLocalTime) { + localAdjust = this._dateTzOffset(); + } + this._offset = input; + this._isUTC = true; + if (localAdjust != null) { + this.subtract(localAdjust, 'm'); + } + if (offset !== input) { + if (!keepLocalTime || this._changeInProgress) { + addOrSubtractDurationFromMoment(this, + moment.duration(offset - input, 'm'), 1, false); + } else if (!this._changeInProgress) { + this._changeInProgress = true; + moment.updateOffset(this, true); + this._changeInProgress = null; + } + } + } else { + return this._isUTC ? offset : this._dateTzOffset(); + } + return this; + }, - /** - * Start playing - */ - Slider.prototype.play = function() { - // Test whether already playing - if (this.playTimeout) return; + zoneAbbr : function () { + return this._isUTC ? 'UTC' : ''; + }, - this.playNext(); + zoneName : function () { + return this._isUTC ? 'Coordinated Universal Time' : ''; + }, - if (this.frame) { - this.frame.play.value = 'Stop'; - } - }; + parseZone : function () { + if (this._tzm) { + this.zone(this._tzm); + } else if (typeof this._i === 'string') { + this.zone(this._i); + } + return this; + }, - /** - * Stop playing - */ - Slider.prototype.stop = function() { - clearInterval(this.playTimeout); - this.playTimeout = undefined; + hasAlignedHourOffset : function (input) { + if (!input) { + input = 0; + } + else { + input = moment(input).zone(); + } - if (this.frame) { - this.frame.play.value = 'Play'; - } - }; + return (this.zone() - input) % 60 === 0; + }, - /** - * Set a callback function which will be triggered when the value of the - * slider bar has changed. - */ - Slider.prototype.setOnChangeCallback = function(callback) { - this.onChangeCallback = callback; - }; + daysInMonth : function () { + return daysInMonth(this.year(), this.month()); + }, - /** - * Set the interval for playing the list - * @param {Number} interval The interval in milliseconds - */ - Slider.prototype.setPlayInterval = function(interval) { - this.playInterval = interval; - }; + dayOfYear : function (input) { + var dayOfYear = round((moment(this).startOf('day') - moment(this).startOf('year')) / 864e5) + 1; + return input == null ? dayOfYear : this.add((input - dayOfYear), 'd'); + }, - /** - * Retrieve the current play interval - * @return {Number} interval The interval in milliseconds - */ - Slider.prototype.getPlayInterval = function(interval) { - return this.playInterval; - }; + quarter : function (input) { + return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3); + }, - /** - * Set looping on or off - * @pararm {boolean} doLoop If true, the slider will jump to the start when - * the end is passed, and will jump to the end - * when the start is passed. - */ - Slider.prototype.setPlayLoop = function(doLoop) { - this.playLoop = doLoop; - }; + weekYear : function (input) { + var year = weekOfYear(this, this.localeData()._week.dow, this.localeData()._week.doy).year; + return input == null ? year : this.add((input - year), 'y'); + }, + isoWeekYear : function (input) { + var year = weekOfYear(this, 1, 4).year; + return input == null ? year : this.add((input - year), 'y'); + }, - /** - * Execute the onchange callback function - */ - Slider.prototype.onChange = function() { - if (this.onChangeCallback !== undefined) { - this.onChangeCallback(); - } - }; + week : function (input) { + var week = this.localeData().week(this); + return input == null ? week : this.add((input - week) * 7, 'd'); + }, - /** - * redraw the slider on the correct place - */ - Slider.prototype.redraw = function() { - if (this.frame) { - // resize the bar - this.frame.bar.style.top = (this.frame.clientHeight/2 - - this.frame.bar.offsetHeight/2) + 'px'; - this.frame.bar.style.width = (this.frame.clientWidth - - this.frame.prev.clientWidth - - this.frame.play.clientWidth - - this.frame.next.clientWidth - 30) + 'px'; + isoWeek : function (input) { + var week = weekOfYear(this, 1, 4).week; + return input == null ? week : this.add((input - week) * 7, 'd'); + }, - // position the slider button - var left = this.indexToLeft(this.index); - this.frame.slide.style.left = (left) + 'px'; - } - }; + weekday : function (input) { + var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7; + return input == null ? weekday : this.add(input - weekday, 'd'); + }, + isoWeekday : function (input) { + // behaves the same as moment#day except + // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6) + // as a setter, sunday should belong to the previous week. + return input == null ? this.day() || 7 : this.day(this.day() % 7 ? input : input - 7); + }, - /** - * Set the list with values for the slider - * @param {Array} values A javascript array with values (any type) - */ - Slider.prototype.setValues = function(values) { - this.values = values; + isoWeeksInYear : function () { + return weeksInYear(this.year(), 1, 4); + }, - if (this.values.length > 0) - this.setIndex(0); - else - this.index = undefined; - }; + weeksInYear : function () { + var weekInfo = this.localeData()._week; + return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy); + }, - /** - * Select a value by its index - * @param {Number} index - */ - Slider.prototype.setIndex = function(index) { - if (index < this.values.length) { - this.index = index; + get : function (units) { + units = normalizeUnits(units); + return this[units](); + }, - this.redraw(); - this.onChange(); - } - else { - throw 'Error: index out of range'; - } - }; + set : function (units, value) { + units = normalizeUnits(units); + if (typeof this[units] === 'function') { + this[units](value); + } + return this; + }, - /** - * retrieve the index of the currently selected vaue - * @return {Number} index - */ - Slider.prototype.getIndex = function() { - return this.index; - }; + // If passed a locale key, it will set the locale for this + // instance. Otherwise, it will return the locale configuration + // variables for this instance. + locale : function (key) { + var newLocaleData; + if (key === undefined) { + return this._locale._abbr; + } else { + newLocaleData = moment.localeData(key); + if (newLocaleData != null) { + this._locale = newLocaleData; + } + return this; + } + }, - /** - * retrieve the currently selected value - * @return {*} value - */ - Slider.prototype.get = function() { - return this.values[this.index]; - }; + lang : deprecate( + 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.', + function (key) { + if (key === undefined) { + return this.localeData(); + } else { + return this.locale(key); + } + } + ), + localeData : function () { + return this._locale; + }, - Slider.prototype._onMouseDown = function(event) { - // only react on left mouse button down - var leftButtonDown = event.which ? (event.which === 1) : (event.button === 1); - if (!leftButtonDown) return; + _dateTzOffset : function () { + // On Firefox.24 Date#getTimezoneOffset returns a floating point. + // https://github.com/moment/moment/pull/1871 + return Math.round(this._d.getTimezoneOffset() / 15) * 15; + } + }); - this.startClientX = event.clientX; - this.startSlideX = parseFloat(this.frame.slide.style.left); + function rawMonthSetter(mom, value) { + var dayOfMonth; - this.frame.style.cursor = 'move'; + // TODO: Move this out of here! + if (typeof value === 'string') { + value = mom.localeData().monthsParse(value); + // TODO: Another silent failure? + if (typeof value !== 'number') { + return mom; + } + } - // add event listeners to handle moving the contents - // we store the function onmousemove and onmouseup in the graph, so we can - // remove the eventlisteners lateron in the function mouseUp() - var me = this; - this.onmousemove = function (event) {me._onMouseMove(event);}; - this.onmouseup = function (event) {me._onMouseUp(event);}; - util.addEventListener(document, 'mousemove', this.onmousemove); - util.addEventListener(document, 'mouseup', this.onmouseup); - util.preventDefault(event); - }; + dayOfMonth = Math.min(mom.date(), + daysInMonth(mom.year(), value)); + mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth); + return mom; + } + function rawGetter(mom, unit) { + return mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit](); + } - Slider.prototype.leftToIndex = function (left) { - var width = parseFloat(this.frame.bar.style.width) - - this.frame.slide.clientWidth - 10; - var x = left - 3; + function rawSetter(mom, unit, value) { + if (unit === 'Month') { + return rawMonthSetter(mom, value); + } else { + return mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value); + } + } - var index = Math.round(x / width * (this.values.length-1)); - if (index < 0) index = 0; - if (index > this.values.length-1) index = this.values.length-1; + function makeAccessor(unit, keepTime) { + return function (value) { + if (value != null) { + rawSetter(this, unit, value); + moment.updateOffset(this, keepTime); + return this; + } else { + return rawGetter(this, unit); + } + }; + } - return index; - }; + moment.fn.millisecond = moment.fn.milliseconds = makeAccessor('Milliseconds', false); + moment.fn.second = moment.fn.seconds = makeAccessor('Seconds', false); + moment.fn.minute = moment.fn.minutes = makeAccessor('Minutes', false); + // Setting the hour should keep the time, because the user explicitly + // specified which hour he wants. So trying to maintain the same hour (in + // a new timezone) makes sense. Adding/subtracting hours does not follow + // this rule. + moment.fn.hour = moment.fn.hours = makeAccessor('Hours', true); + // moment.fn.month is defined separately + moment.fn.date = makeAccessor('Date', true); + moment.fn.dates = deprecate('dates accessor is deprecated. Use date instead.', makeAccessor('Date', true)); + moment.fn.year = makeAccessor('FullYear', true); + moment.fn.years = deprecate('years accessor is deprecated. Use year instead.', makeAccessor('FullYear', true)); - Slider.prototype.indexToLeft = function (index) { - var width = parseFloat(this.frame.bar.style.width) - - this.frame.slide.clientWidth - 10; + // add plural methods + moment.fn.days = moment.fn.day; + moment.fn.months = moment.fn.month; + moment.fn.weeks = moment.fn.week; + moment.fn.isoWeeks = moment.fn.isoWeek; + moment.fn.quarters = moment.fn.quarter; - var x = index / (this.values.length-1) * width; - var left = x + 3; + // add aliased format methods + moment.fn.toJSON = moment.fn.toISOString; - return left; - }; + /************************************ + Duration Prototype + ************************************/ + function daysToYears (days) { + // 400 years have 146097 days (taking into account leap year rules) + return days * 400 / 146097; + } - Slider.prototype._onMouseMove = function (event) { - var diff = event.clientX - this.startClientX; - var x = this.startSlideX + diff; + function yearsToDays (years) { + // years * 365 + absRound(years / 4) - + // absRound(years / 100) + absRound(years / 400); + return years * 146097 / 400; + } - var index = this.leftToIndex(x); + extend(moment.duration.fn = Duration.prototype, { - this.setIndex(index); + _bubble : function () { + var milliseconds = this._milliseconds, + days = this._days, + months = this._months, + data = this._data, + seconds, minutes, hours, years = 0; - util.preventDefault(); - }; + // The following code bubbles up values, see the tests for + // examples of what that means. + data.milliseconds = milliseconds % 1000; + seconds = absRound(milliseconds / 1000); + data.seconds = seconds % 60; - Slider.prototype._onMouseUp = function (event) { - this.frame.style.cursor = 'auto'; + minutes = absRound(seconds / 60); + data.minutes = minutes % 60; - // remove event listeners - util.removeEventListener(document, 'mousemove', this.onmousemove); - util.removeEventListener(document, 'mouseup', this.onmouseup); + hours = absRound(minutes / 60); + data.hours = hours % 24; - util.preventDefault(); - }; + days += absRound(hours / 24); - module.exports = Slider; + // Accurately convert days to years, assume start from year 0. + years = absRound(daysToYears(days)); + days -= absRound(yearsToDays(years)); + // 30 days to a month + // TODO (iskren): Use anchor date (like 1st Jan) to compute this. + months += absRound(days / 30); + days %= 30; -/***/ }, -/* 12 */ -/***/ function(module, exports, __webpack_require__) { + // 12 months -> 1 year + years += absRound(months / 12); + months %= 12; - /** - * @prototype StepNumber - * The class StepNumber is an iterator for Numbers. You provide a start and end - * value, and a best step size. StepNumber itself rounds to fixed values and - * a finds the step that best fits the provided step. - * - * If prettyStep is true, the step size is chosen as close as possible to the - * provided step, but being a round value like 1, 2, 5, 10, 20, 50, .... - * - * Example usage: - * var step = new StepNumber(0, 10, 2.5, true); - * step.start(); - * while (!step.end()) { - * alert(step.getCurrent()); - * step.next(); - * } - * - * Version: 1.0 - * - * @param {Number} start The start value - * @param {Number} end The end value - * @param {Number} step Optional. Step size. Must be a positive value. - * @param {boolean} prettyStep Optional. If true, the step size is rounded - * To a pretty step size (like 1, 2, 5, 10, 20, 50, ...) - */ - function StepNumber(start, end, step, prettyStep) { - // set default values - this._start = 0; - this._end = 0; - this._step = 1; - this.prettyStep = true; - this.precision = 5; + data.days = days; + data.months = months; + data.years = years; + }, - this._current = 0; - this.setRange(start, end, step, prettyStep); - }; + abs : function () { + this._milliseconds = Math.abs(this._milliseconds); + this._days = Math.abs(this._days); + this._months = Math.abs(this._months); - /** - * Set a new range: start, end and step. - * - * @param {Number} start The start value - * @param {Number} end The end value - * @param {Number} step Optional. Step size. Must be a positive value. - * @param {boolean} prettyStep Optional. If true, the step size is rounded - * To a pretty step size (like 1, 2, 5, 10, 20, 50, ...) - */ - StepNumber.prototype.setRange = function(start, end, step, prettyStep) { - this._start = start ? start : 0; - this._end = end ? end : 0; + this._data.milliseconds = Math.abs(this._data.milliseconds); + this._data.seconds = Math.abs(this._data.seconds); + this._data.minutes = Math.abs(this._data.minutes); + this._data.hours = Math.abs(this._data.hours); + this._data.months = Math.abs(this._data.months); + this._data.years = Math.abs(this._data.years); - this.setStep(step, prettyStep); - }; + return this; + }, - /** - * Set a new step size - * @param {Number} step New step size. Must be a positive value - * @param {boolean} prettyStep Optional. If true, the provided step is rounded - * to a pretty step size (like 1, 2, 5, 10, 20, 50, ...) - */ - StepNumber.prototype.setStep = function(step, prettyStep) { - if (step === undefined || step <= 0) - return; + weeks : function () { + return absRound(this.days() / 7); + }, - if (prettyStep !== undefined) - this.prettyStep = prettyStep; + valueOf : function () { + return this._milliseconds + + this._days * 864e5 + + (this._months % 12) * 2592e6 + + toInt(this._months / 12) * 31536e6; + }, - if (this.prettyStep === true) - this._step = StepNumber.calculatePrettyStep(step); - else - this._step = step; - }; + humanize : function (withSuffix) { + var output = relativeTime(this, !withSuffix, this.localeData()); - /** - * Calculate a nice step size, closest to the desired step size. - * Returns a value in one of the ranges 1*10^n, 2*10^n, or 5*10^n, where n is an - * integer Number. For example 1, 2, 5, 10, 20, 50, etc... - * @param {Number} step Desired step size - * @return {Number} Nice step size - */ - StepNumber.calculatePrettyStep = function (step) { - var log10 = function (x) {return Math.log(x) / Math.LN10;}; + if (withSuffix) { + output = this.localeData().pastFuture(+this, output); + } - // try three steps (multiple of 1, 2, or 5 - var step1 = Math.pow(10, Math.round(log10(step))), - step2 = 2 * Math.pow(10, Math.round(log10(step / 2))), - step5 = 5 * Math.pow(10, Math.round(log10(step / 5))); + return this.localeData().postformat(output); + }, - // choose the best step (closest to minimum step) - var prettyStep = step1; - if (Math.abs(step2 - step) <= Math.abs(prettyStep - step)) prettyStep = step2; - if (Math.abs(step5 - step) <= Math.abs(prettyStep - step)) prettyStep = step5; + add : function (input, val) { + // supports only 2.0-style add(1, 's') or add(moment) + var dur = moment.duration(input, val); - // for safety - if (prettyStep <= 0) { - prettyStep = 1; - } + this._milliseconds += dur._milliseconds; + this._days += dur._days; + this._months += dur._months; - return prettyStep; - }; + this._bubble(); - /** - * returns the current value of the step - * @return {Number} current value - */ - StepNumber.prototype.getCurrent = function () { - return parseFloat(this._current.toPrecision(this.precision)); - }; + return this; + }, - /** - * returns the current step size - * @return {Number} current step size - */ - StepNumber.prototype.getStep = function () { - return this._step; - }; + subtract : function (input, val) { + var dur = moment.duration(input, val); - /** - * Set the current value to the largest value smaller than start, which - * is a multiple of the step size - */ - StepNumber.prototype.start = function() { - this._current = this._start - this._start % this._step; - }; + this._milliseconds -= dur._milliseconds; + this._days -= dur._days; + this._months -= dur._months; - /** - * Do a step, add the step size to the current value - */ - StepNumber.prototype.next = function () { - this._current += this._step; - }; + this._bubble(); - /** - * Returns true whether the end is reached - * @return {boolean} True if the current value has passed the end value. - */ - StepNumber.prototype.end = function () { - return (this._current > this._end); - }; + return this; + }, - module.exports = StepNumber; + get : function (units) { + units = normalizeUnits(units); + return this[units.toLowerCase() + 's'](); + }, + as : function (units) { + var days, months; + units = normalizeUnits(units); -/***/ }, -/* 13 */ -/***/ function(module, exports, __webpack_require__) { + if (units === 'month' || units === 'year') { + days = this._days + this._milliseconds / 864e5; + months = this._months + daysToYears(days) * 12; + return units === 'month' ? months : months / 12; + } else { + // handle milliseconds separately because of floating point math errors (issue #1867) + days = this._days + Math.round(yearsToDays(this._months / 12)); + switch (units) { + case 'week': return days / 7 + this._milliseconds / 6048e5; + case 'day': return days + this._milliseconds / 864e5; + case 'hour': return days * 24 + this._milliseconds / 36e5; + case 'minute': return days * 24 * 60 + this._milliseconds / 6e4; + case 'second': return days * 24 * 60 * 60 + this._milliseconds / 1000; + // Math.floor prevents floating point math errors here + case 'millisecond': return Math.floor(days * 24 * 60 * 60 * 1000) + this._milliseconds; + default: throw new Error('Unknown unit ' + units); + } + } + }, - var Emitter = __webpack_require__(56); - var Hammer = __webpack_require__(45); - var util = __webpack_require__(1); - var DataSet = __webpack_require__(3); - var DataView = __webpack_require__(4); - var Range = __webpack_require__(17); - var Core = __webpack_require__(46); - var TimeAxis = __webpack_require__(30); - var CurrentTime = __webpack_require__(21); - var CustomTime = __webpack_require__(22); - var ItemSet = __webpack_require__(27); + lang : moment.fn.lang, + locale : moment.fn.locale, - /** - * Create a timeline visualization - * @param {HTMLElement} container - * @param {vis.DataSet | Array | google.visualization.DataTable} [items] - * @param {vis.DataSet | Array | google.visualization.DataTable} [groups] - * @param {Object} [options] See Timeline.setOptions for the available options. - * @constructor - * @extends Core - */ - function Timeline (container, items, groups, options) { - if (!(this instanceof Timeline)) { - throw new SyntaxError('Constructor must be called with the new operator'); - } + toIsoString : deprecate( + 'toIsoString() is deprecated. Please use toISOString() instead ' + + '(notice the capitals)', + function () { + return this.toISOString(); + } + ), - // if the third element is options, the forth is groups (optionally); - if (!(Array.isArray(groups) || groups instanceof DataSet) && groups instanceof Object) { - var forthArgument = options; - options = groups; - groups = forthArgument; - } + toISOString : function () { + // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js + var years = Math.abs(this.years()), + months = Math.abs(this.months()), + days = Math.abs(this.days()), + hours = Math.abs(this.hours()), + minutes = Math.abs(this.minutes()), + seconds = Math.abs(this.seconds() + this.milliseconds() / 1000); - var me = this; - this.defaultOptions = { - start: null, - end: null, + if (!this.asSeconds()) { + // this is the same as C#'s (Noda) and python (isodate)... + // but not other JS (goog.date) + return 'P0D'; + } - autoResize: true, + return (this.asSeconds() < 0 ? '-' : '') + + 'P' + + (years ? years + 'Y' : '') + + (months ? months + 'M' : '') + + (days ? days + 'D' : '') + + ((hours || minutes || seconds) ? 'T' : '') + + (hours ? hours + 'H' : '') + + (minutes ? minutes + 'M' : '') + + (seconds ? seconds + 'S' : ''); + }, - orientation: 'bottom', - width: null, - height: null, - maxHeight: null, - minHeight: null - }; - this.options = util.deepExtend({}, this.defaultOptions); + localeData : function () { + return this._locale; + } + }); - // Create the DOM, props, and emitter - this._create(container); + moment.duration.fn.toString = moment.duration.fn.toISOString; - // all components listed here will be repainted automatically - this.components = []; + function makeDurationGetter(name) { + moment.duration.fn[name] = function () { + return this._data[name]; + }; + } - this.body = { - dom: this.dom, - domProps: this.props, - emitter: { - on: this.on.bind(this), - off: this.off.bind(this), - emit: this.emit.bind(this) - }, - hiddenDates: [], - util: { - snap: null, // will be specified after TimeAxis is created - toScreen: me._toScreen.bind(me), - toGlobalScreen: me._toGlobalScreen.bind(me), // this refers to the root.width - toTime: me._toTime.bind(me), - toGlobalTime : me._toGlobalTime.bind(me) + for (i in unitMillisecondFactors) { + if (hasOwnProp(unitMillisecondFactors, i)) { + makeDurationGetter(i.toLowerCase()); + } } - }; - // range - this.range = new Range(this.body); - this.components.push(this.range); - this.body.range = this.range; + moment.duration.fn.asMilliseconds = function () { + return this.as('ms'); + }; + moment.duration.fn.asSeconds = function () { + return this.as('s'); + }; + moment.duration.fn.asMinutes = function () { + return this.as('m'); + }; + moment.duration.fn.asHours = function () { + return this.as('h'); + }; + moment.duration.fn.asDays = function () { + return this.as('d'); + }; + moment.duration.fn.asWeeks = function () { + return this.as('weeks'); + }; + moment.duration.fn.asMonths = function () { + return this.as('M'); + }; + moment.duration.fn.asYears = function () { + return this.as('y'); + }; - // time axis - this.timeAxis = new TimeAxis(this.body); - this.components.push(this.timeAxis); - this.body.util.snap = this.timeAxis.snap.bind(this.timeAxis); + /************************************ + Default Locale + ************************************/ - // current time bar - this.currentTime = new CurrentTime(this.body); - this.components.push(this.currentTime); - // custom time bar - // Note: time bar will be attached in this.setOptions when selected - this.customTime = new CustomTime(this.body); - this.components.push(this.customTime); + // Set default locale, other locale will inherit from English. + moment.locale('en', { + ordinalParse: /\d{1,2}(th|st|nd|rd)/, + ordinal : function (number) { + var b = number % 10, + output = (toInt(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + } + }); - // item set - this.itemSet = new ItemSet(this.body); - this.components.push(this.itemSet); + /* EMBED_LOCALES */ - this.itemsData = null; // DataSet - this.groupsData = null; // DataSet + /************************************ + Exposing Moment + ************************************/ - // apply options - if (options) { - this.setOptions(options); - } + function makeGlobal(shouldDeprecate) { + /*global ender:false */ + if (typeof ender !== 'undefined') { + return; + } + oldGlobalMoment = globalScope.moment; + if (shouldDeprecate) { + globalScope.moment = deprecate( + 'Accessing Moment through the global scope is ' + + 'deprecated, and will be removed in an upcoming ' + + 'release.', + moment); + } else { + globalScope.moment = moment; + } + } - // IMPORTANT: THIS HAPPENS BEFORE SET ITEMS! - if (groups) { - this.setGroups(groups); - } + // CommonJS module is defined + if (hasModule) { + module.exports = moment; + } else if (true) { + !(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) { + if (module.config && module.config() && module.config().noGlobal === true) { + // release the global variable + globalScope.moment = oldGlobalMoment; + } + + return moment; + }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + makeGlobal(true); + } else { + makeGlobal(); + } + }).call(this); + + /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()), __webpack_require__(5)(module))) + +/***/ }, +/* 4 */ +/***/ function(module, exports, __webpack_require__) { - // create itemset - if (items) { - this.setItems(items); - } - else { - this.redraw(); - } + function webpackContext(req) { + throw new Error("Cannot find module '" + req + "'."); } + webpackContext.keys = function() { return []; }; + webpackContext.resolve = webpackContext; + module.exports = webpackContext; + webpackContext.id = 4; - // Extend the functionality from Core - Timeline.prototype = new Core(); - /** - * Set items - * @param {vis.DataSet | Array | google.visualization.DataTable | null} items - */ - Timeline.prototype.setItems = function(items) { - var initialLoad = (this.itemsData == null); +/***/ }, +/* 5 */ +/***/ function(module, exports, __webpack_require__) { - // convert to type DataSet when needed - var newDataSet; - if (!items) { - newDataSet = null; - } - else if (items instanceof DataSet || items instanceof DataView) { - newDataSet = items; - } - else { - // turn an array into a dataset - newDataSet = new DataSet(items, { - type: { - start: 'Date', - end: 'Date' - } - }); - } + module.exports = function(module) { + if(!module.webpackPolyfill) { + module.deprecate = function() {}; + module.paths = []; + // module.parent = undefined by default + module.children = []; + module.webpackPolyfill = 1; + } + return module; + } - // set items - this.itemsData = newDataSet; - this.itemSet && this.itemSet.setItems(newDataSet); - if (initialLoad) { - if (this.options.start != undefined || this.options.end != undefined) { - if (this.options.start == undefined || this.options.end == undefined) { - var dataRange = this._getDataRange(); - } +/***/ }, +/* 6 */ +/***/ function(module, exports, __webpack_require__) { - var start = this.options.start != undefined ? this.options.start : dataRange.start; - var end = this.options.end != undefined ? this.options.end : dataRange.end; + // DOM utility methods - this.setWindow(start, end, {animate: false}); - } - else { - this.fit({animate: false}); + /** + * this prepares the JSON container for allocating SVG elements + * @param JSONcontainer + * @private + */ + exports.prepareElements = function(JSONcontainer) { + // cleanup the redundant svgElements; + for (var elementType in JSONcontainer) { + if (JSONcontainer.hasOwnProperty(elementType)) { + JSONcontainer[elementType].redundant = JSONcontainer[elementType].used; + JSONcontainer[elementType].used = []; } } }; /** - * Set groups - * @param {vis.DataSet | Array | google.visualization.DataTable} groups + * this cleans up all the unused SVG elements. By asking for the parentNode, we only need to supply the JSON container from + * which to remove the redundant elements. + * + * @param JSONcontainer + * @private */ - Timeline.prototype.setGroups = function(groups) { - // convert to type DataSet when needed - var newDataSet; - if (!groups) { - newDataSet = null; - } - else if (groups instanceof DataSet || groups instanceof DataView) { - newDataSet = groups; - } - else { - // turn an array into a dataset - newDataSet = new DataSet(groups); + exports.cleanupElements = function(JSONcontainer) { + // cleanup the redundant svgElements; + for (var elementType in JSONcontainer) { + if (JSONcontainer.hasOwnProperty(elementType)) { + if (JSONcontainer[elementType].redundant) { + for (var i = 0; i < JSONcontainer[elementType].redundant.length; i++) { + JSONcontainer[elementType].redundant[i].parentNode.removeChild(JSONcontainer[elementType].redundant[i]); + } + JSONcontainer[elementType].redundant = []; + } + } } - - this.groupsData = newDataSet; - this.itemSet.setGroups(newDataSet); }; /** - * Set selected items by their id. Replaces the current selection - * Unknown id's are silently ignored. - * @param {string[] | string} [ids] An array with zero or more id's of the items to be - * selected. If ids is an empty array, all items will be - * unselected. - * @param {Object} [options] Available options: - * `focus: boolean` - * If true, focus will be set to the selected item(s) - * `animate: boolean | number` - * If true (default), the range is animated - * smoothly to the new window. - * If a number, the number is taken as duration - * for the animation. Default duration is 500 ms. - * Only applicable when option focus is true. + * Allocate or generate an SVG element if needed. Store a reference to it in the JSON container and draw it in the svgContainer + * the JSON container and the SVG container have to be supplied so other svg containers (like the legend) can use this. + * + * @param elementType + * @param JSONcontainer + * @param svgContainer + * @returns {*} + * @private */ - Timeline.prototype.setSelection = function(ids, options) { - this.itemSet && this.itemSet.setSelection(ids); - - if (options && options.focus) { - this.focus(ids, options); + exports.getSVGElement = function (elementType, JSONcontainer, svgContainer) { + var element; + // allocate SVG element, if it doesnt yet exist, create one. + if (JSONcontainer.hasOwnProperty(elementType)) { // this element has been created before + // check if there is an redundant element + if (JSONcontainer[elementType].redundant.length > 0) { + element = JSONcontainer[elementType].redundant[0]; + JSONcontainer[elementType].redundant.shift(); + } + else { + // create a new element and add it to the SVG + element = document.createElementNS('http://www.w3.org/2000/svg', elementType); + svgContainer.appendChild(element); + } + } + else { + // create a new element and add it to the SVG, also create a new object in the svgElements to keep track of it. + element = document.createElementNS('http://www.w3.org/2000/svg', elementType); + JSONcontainer[elementType] = {used: [], redundant: []}; + svgContainer.appendChild(element); } + JSONcontainer[elementType].used.push(element); + return element; }; - /** - * Get the selected items by their id - * @return {Array} ids The ids of the selected items - */ - Timeline.prototype.getSelection = function() { - return this.itemSet && this.itemSet.getSelection() || []; - }; /** - * Adjust the visible window such that the selected item (or multiple items) - * are centered on screen. - * @param {String | String[]} id An item id or array with item ids - * @param {Object} [options] Available options: - * `animate: boolean | number` - * If true (default), the range is animated - * smoothly to the new window. - * If a number, the number is taken as duration - * for the animation. Default duration is 500 ms. - * Only applicable when option focus is true + * Allocate or generate an SVG element if needed. Store a reference to it in the JSON container and draw it in the svgContainer + * the JSON container and the SVG container have to be supplied so other svg containers (like the legend) can use this. + * + * @param elementType + * @param JSONcontainer + * @param DOMContainer + * @returns {*} + * @private */ - Timeline.prototype.focus = function(id, options) { - if (!this.itemsData || id == undefined) return; - - var ids = Array.isArray(id) ? id : [id]; - - // get the specified item(s) - var itemsData = this.itemsData.getDataSet().get(ids, { - type: { - start: 'Date', - end: 'Date' + exports.getDOMElement = function (elementType, JSONcontainer, DOMContainer, insertBefore) { + var element; + // allocate DOM element, if it doesnt yet exist, create one. + if (JSONcontainer.hasOwnProperty(elementType)) { // this element has been created before + // check if there is an redundant element + if (JSONcontainer[elementType].redundant.length > 0) { + element = JSONcontainer[elementType].redundant[0]; + JSONcontainer[elementType].redundant.shift(); } - }); + else { + // create a new element and add it to the SVG + element = document.createElement(elementType); + if (insertBefore !== undefined) { + DOMContainer.insertBefore(element, insertBefore); + } + else { + DOMContainer.appendChild(element); + } + } + } + else { + // create a new element and add it to the SVG, also create a new object in the svgElements to keep track of it. + element = document.createElement(elementType); + JSONcontainer[elementType] = {used: [], redundant: []}; + if (insertBefore !== undefined) { + DOMContainer.insertBefore(element, insertBefore); + } + else { + DOMContainer.appendChild(element); + } + } + JSONcontainer[elementType].used.push(element); + return element; + }; - // calculate minimum start and maximum end of specified items - var start = null; - var end = null; - itemsData.forEach(function (itemData) { - var s = itemData.start.valueOf(); - var e = 'end' in itemData ? itemData.end.valueOf() : itemData.start.valueOf(); - if (start === null || s < start) { - start = s; - } - if (end === null || e > end) { - end = e; - } - }); - if (start !== null && end !== null) { - // calculate the new middle and interval for the window - var middle = (start + end) / 2; - var interval = Math.max((this.range.end - this.range.start), (end - start) * 1.1); + /** + * draw a point object. this is a seperate function because it can also be called by the legend. + * The reason the JSONcontainer and the target SVG svgContainer have to be supplied is so the legend can use these functions + * as well. + * + * @param x + * @param y + * @param group + * @param JSONcontainer + * @param svgContainer + * @returns {*} + */ + exports.drawPoint = function(x, y, group, JSONcontainer, svgContainer) { + var point; + if (group.options.drawPoints.style == 'circle') { + point = exports.getSVGElement('circle',JSONcontainer,svgContainer); + point.setAttributeNS(null, "cx", x); + point.setAttributeNS(null, "cy", y); + point.setAttributeNS(null, "r", 0.5 * group.options.drawPoints.size); + } + else { + point = exports.getSVGElement('rect',JSONcontainer,svgContainer); + point.setAttributeNS(null, "x", x - 0.5*group.options.drawPoints.size); + point.setAttributeNS(null, "y", y - 0.5*group.options.drawPoints.size); + point.setAttributeNS(null, "width", group.options.drawPoints.size); + point.setAttributeNS(null, "height", group.options.drawPoints.size); + } - var animate = (options && options.animate !== undefined) ? options.animate : true; - this.range.setRange(middle - interval / 2, middle + interval / 2, animate); + if(group.options.drawPoints.styles !== undefined) { + point.setAttributeNS(null, "style", group.group.options.drawPoints.styles); } + point.setAttributeNS(null, "class", group.className + " point"); + return point; }; /** - * Get the data range of the item set. - * @returns {{min: Date, max: Date}} range A range with a start and end Date. - * When no minimum is found, min==null - * When no maximum is found, max==null + * draw a bar SVG element centered on the X coordinate + * + * @param x + * @param y + * @param className */ - Timeline.prototype.getItemRange = function() { - // calculate min from start filed - var dataset = this.itemsData.getDataSet(), - min = null, - max = null; - - if (dataset) { - // calculate the minimum value of the field 'start' - var minItem = dataset.min('start'); - min = minItem ? util.convert(minItem.start, 'Date').valueOf() : null; - // Note: we convert first to Date and then to number because else - // a conversion from ISODate to Number will fail - - // calculate maximum value of fields 'start' and 'end' - var maxStartItem = dataset.max('start'); - if (maxStartItem) { - max = util.convert(maxStartItem.start, 'Date').valueOf(); - } - var maxEndItem = dataset.max('end'); - if (maxEndItem) { - if (max == null) { - max = util.convert(maxEndItem.end, 'Date').valueOf(); - } - else { - max = Math.max(max, util.convert(maxEndItem.end, 'Date').valueOf()); - } + exports.drawBar = function (x, y, width, height, className, JSONcontainer, svgContainer) { + if (height != 0) { + if (height < 0) { + height *= -1; + y -= height; } + var rect = exports.getSVGElement('rect',JSONcontainer, svgContainer); + rect.setAttributeNS(null, "x", x - 0.5 * width); + rect.setAttributeNS(null, "y", y); + rect.setAttributeNS(null, "width", width); + rect.setAttributeNS(null, "height", height); + rect.setAttributeNS(null, "class", className); } - - return { - min: (min != null) ? new Date(min) : null, - max: (max != null) ? new Date(max) : null - }; }; - - module.exports = Timeline; - - /***/ }, -/* 14 */ +/* 7 */ /***/ function(module, exports, __webpack_require__) { - var Emitter = __webpack_require__(56); - var Hammer = __webpack_require__(45); var util = __webpack_require__(1); - var DataSet = __webpack_require__(3); - var DataView = __webpack_require__(4); - var Range = __webpack_require__(17); - var Core = __webpack_require__(46); - var TimeAxis = __webpack_require__(30); - var CurrentTime = __webpack_require__(21); - var CustomTime = __webpack_require__(22); - var LineGraph = __webpack_require__(29); + var Queue = __webpack_require__(8); /** - * Create a timeline visualization - * @param {HTMLElement} container - * @param {vis.DataSet | Array | google.visualization.DataTable} [items] - * @param {Object} [options] See Graph2d.setOptions for the available options. - * @constructor - * @extends Core + * DataSet + * + * Usage: + * var dataSet = new DataSet({ + * fieldId: '_id', + * type: { + * // ... + * } + * }); + * + * dataSet.add(item); + * dataSet.add(data); + * dataSet.update(item); + * dataSet.update(data); + * dataSet.remove(id); + * dataSet.remove(ids); + * var data = dataSet.get(); + * var data = dataSet.get(id); + * var data = dataSet.get(ids); + * var data = dataSet.get(ids, options, data); + * dataSet.clear(); + * + * A data set can: + * - add/remove/update data + * - gives triggers upon changes in the data + * - can import/export data in various data formats + * + * @param {Array | DataTable} [data] Optional array with initial data + * @param {Object} [options] Available options: + * {String} fieldId Field name of the id in the + * items, 'id' by default. + * {Object.} [type] + * {String[]} [fields] field names to be returned + * {function} [filter] filter items + * {String | function} [order] Order the items by + * a field name or custom sort function. + * {Array | DataTable} [data] If provided, items will be appended to this + * array or table. Required in case of Google + * DataTable. + * + * @throws Error */ - Graph2d.prototype.getLegend = function(groupId, width, height) { - if (width === undefined) {width = 15;} - if (height === undefined) {height = 15;} - if (this.linegraph.groups[groupId] !== undefined) { - return this.linegraph.groups[groupId].getLegend(width,height); + DataSet.prototype.get = function (args) { + var me = this; + + // parse the arguments + var id, ids, options, data; + var firstType = util.getType(arguments[0]); + if (firstType == 'String' || firstType == 'Number') { + // get(id [, options] [, data]) + id = arguments[0]; + options = arguments[1]; + data = arguments[2]; + } + else if (firstType == 'Array') { + // get(ids [, options] [, data]) + ids = arguments[0]; + options = arguments[1]; + data = arguments[2]; } else { - return "cannot find group:" + groupId; + // get([, options] [, data]) + options = arguments[0]; + data = arguments[1]; } - } - /** - * This checks if the visible option of the supplied group (by ID) is true or false. - * @param groupId - * @returns {*} - */ - Graph2d.prototype.isGroupVisible = function(groupId) { - if (this.linegraph.groups[groupId] !== undefined) { - return (this.linegraph.groups[groupId].visible && (this.linegraph.options.groups.visibility[groupId] === undefined || this.linegraph.options.groups.visibility[groupId] == true)); + // determine the return type + var returnType; + if (options && options.returnType) { + var allowedValues = ["DataTable", "Array", "Object"]; + returnType = allowedValues.indexOf(options.returnType) == -1 ? "Array" : options.returnType; + + if (data && (returnType != util.getType(data))) { + throw new Error('Type of parameter "data" (' + util.getType(data) + ') ' + + 'does not correspond with specified options.type (' + options.type + ')'); + } + if (returnType == 'DataTable' && !util.isDataTable(data)) { + throw new Error('Parameter "data" must be a DataTable ' + + 'when options.type is "DataTable"'); + } + } + else if (data) { + returnType = (util.getType(data) == 'DataTable') ? 'DataTable' : 'Array'; } else { - return false; + returnType = 'Array'; } - } + // build options + var type = options && options.type || this._options.type; + var filter = options && options.filter; + var items = [], item, itemId, i, len; - /** - * Get the data range of the item set. - * @returns {{min: Date, max: Date}} range A range with a start and end Date. - * When no minimum is found, min==null - * When no maximum is found, max==null - */ - Graph2d.prototype.getItemRange = function() { - var min = null; - var max = null; - - // calculate min from start filed - for (var groupId in this.linegraph.groups) { - if (this.linegraph.groups.hasOwnProperty(groupId)) { - if (this.linegraph.groups[groupId].visible == true) { - for (var i = 0; i < this.linegraph.groups[groupId].itemsData.length; i++) { - var item = this.linegraph.groups[groupId].itemsData[i]; - var value = util.convert(item.x, 'Date').valueOf(); - min = min == null ? value : min > value ? value : min; - max = max == null ? value : max < value ? value : max; + // convert items + if (id != undefined) { + // return a single item + item = me._getItem(id, type); + if (filter && !filter(item)) { + item = null; + } + } + else if (ids != undefined) { + // return a subset of items + for (i = 0, len = ids.length; i < len; i++) { + item = me._getItem(ids[i], type); + if (!filter || filter(item)) { + items.push(item); + } + } + } + else { + // return all items + for (itemId in this._data) { + if (this._data.hasOwnProperty(itemId)) { + item = me._getItem(itemId, type); + if (!filter || filter(item)) { + items.push(item); } } } } - return { - min: (min != null) ? new Date(min) : null, - max: (max != null) ? new Date(max) : null - }; - }; - - - - module.exports = Graph2d; - - -/***/ }, -/* 15 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Created by Alex on 10/3/2014. - */ - var moment = __webpack_require__(44); + // order the results + if (options && options.order && id == undefined) { + this._sort(items, options.order); + } + // filter fields of the items + if (options && options.fields) { + var fields = options.fields; + if (id != undefined) { + item = this._filterFields(item, fields); + } + else { + for (i = 0, len = items.length; i < len; i++) { + items[i] = this._filterFields(items[i], fields); + } + } + } - /** - * used in Core to convert the options into a volatile variable - * - * @param Core - */ - exports.convertHiddenOptions = function(body, hiddenDates) { - body.hiddenDates = []; - if (hiddenDates) { - if (Array.isArray(hiddenDates) == true) { - for (var i = 0; i < hiddenDates.length; i++) { - if (hiddenDates[i].repeat === undefined) { - var dateItem = {}; - dateItem.start = moment(hiddenDates[i].start).toDate().valueOf(); - dateItem.end = moment(hiddenDates[i].end).toDate().valueOf(); - body.hiddenDates.push(dateItem); + // return the results + if (returnType == 'DataTable') { + var columns = this._getColumnNames(data); + if (id != undefined) { + // append a single item to the data table + me._appendRow(data, columns, item); + } + else { + // copy the items to the provided data table + for (i = 0; i < items.length; i++) { + me._appendRow(data, columns, items[i]); + } + } + return data; + } + else if (returnType == "Object") { + var result = {}; + for (i = 0; i < items.length; i++) { + result[items[i].id] = items[i]; + } + return result; + } + else { + // return an array + if (id != undefined) { + // a single item + return item; + } + else { + // multiple items + if (data) { + // copy the items to the provided array + for (i = 0, len = items.length; i < len; i++) { + data.push(items[i]); } + return data; + } + else { + // just return our array + return items; } - body.hiddenDates.sort(function (a, b) { - return a.start - b.start; - }); // sort by start time } } }; - /** - * create new entrees for the repeating hidden dates - * @param body - * @param hiddenDates - */ - exports.updateHiddenDates = function (body, hiddenDates) { - if (hiddenDates && body.domProps.centerContainer.width !== undefined) { - exports.convertHiddenOptions(body, hiddenDates); - - var start = moment(body.range.start); - var end = moment(body.range.end); - - var totalRange = (body.range.end - body.range.start); - var pixelTime = totalRange / body.domProps.centerContainer.width; - - for (var i = 0; i < hiddenDates.length; i++) { - if (hiddenDates[i].repeat !== undefined) { - var startDate = moment(hiddenDates[i].start); - var endDate = moment(hiddenDates[i].end); - - if (startDate._d == "Invalid Date") { - throw new Error("Supplied start date is not valid: " + hiddenDates[i].start); - } - if (endDate._d == "Invalid Date") { - throw new Error("Supplied end date is not valid: " + hiddenDates[i].end); - } - - var duration = endDate - startDate; - if (duration >= 4 * pixelTime) { - - var offset = 0; - var runUntil = end.clone(); - switch (hiddenDates[i].repeat) { - case "daily": // case of time - if (startDate.day() != endDate.day()) { - offset = 1; - } - startDate.dayOfYear(start.dayOfYear()); - startDate.year(start.year()); - startDate.subtract(7,'days'); - - endDate.dayOfYear(start.dayOfYear()); - endDate.year(start.year()); - endDate.subtract(7 - offset,'days'); - - runUntil.add(1, 'weeks'); - break; - case "weekly": - var dayOffset = endDate.diff(startDate,'days') - var day = startDate.day(); - - // set the start date to the range.start - startDate.date(start.date()); - startDate.month(start.month()); - startDate.year(start.year()); - endDate = startDate.clone(); - - // force - startDate.day(day); - endDate.day(day); - endDate.add(dayOffset,'days'); - - startDate.subtract(1,'weeks'); - endDate.subtract(1,'weeks'); - - runUntil.add(1, 'weeks'); - break - case "monthly": - if (startDate.month() != endDate.month()) { - offset = 1; - } - startDate.month(start.month()); - startDate.year(start.year()); - startDate.subtract(1,'months'); + * Get ids of all items or from a filtered set of items. + * @param {Object} [options] An Object with options. Available options: + * {function} [filter] filter items + * {String | function} [order] Order the items by + * a field name or custom sort function. + * @return {Array} ids + */ + DataSet.prototype.getIds = function (options) { + var data = this._data, + filter = options && options.filter, + order = options && options.order, + type = options && options.type || this._options.type, + i, + len, + id, + item, + items, + ids = []; - endDate.month(start.month()); - endDate.year(start.year()); - endDate.subtract(1,'months'); - endDate.add(offset,'months'); + if (filter) { + // get filtered items + if (order) { + // create ordered list + items = []; + for (id in data) { + if (data.hasOwnProperty(id)) { + item = this._getItem(id, type); + if (filter(item)) { + items.push(item); + } + } + } - runUntil.add(1, 'months'); - break; - case "yearly": - if (startDate.year() != endDate.year()) { - offset = 1; - } - startDate.year(start.year()); - startDate.subtract(1,'years'); - endDate.year(start.year()); - endDate.subtract(1,'years'); - endDate.add(offset,'years'); + this._sort(items, order); - runUntil.add(1, 'years'); - break; - default: - console.log("Wrong repeat format, allowed are: daily, weekly, monthly, yearly. Given:", hiddenDates[i].repeat); - return; - } - while (startDate < runUntil) { - body.hiddenDates.push({start: startDate.valueOf(), end: endDate.valueOf()}); - switch (hiddenDates[i].repeat) { - case "daily": - startDate.add(1, 'days'); - endDate.add(1, 'days'); - break; - case "weekly": - startDate.add(1, 'weeks'); - endDate.add(1, 'weeks'); - break - case "monthly": - startDate.add(1, 'months'); - endDate.add(1, 'months'); - break; - case "yearly": - startDate.add(1, 'y'); - endDate.add(1, 'y'); - break; - default: - console.log("Wrong repeat format, allowed are: daily, weekly, monthly, yearly. Given:", hiddenDates[i].repeat); - return; - } + for (i = 0, len = items.length; i < len; i++) { + ids[i] = items[i][this._fieldId]; + } + } + else { + // create unordered list + for (id in data) { + if (data.hasOwnProperty(id)) { + item = this._getItem(id, type); + if (filter(item)) { + ids.push(item[this._fieldId]); } - body.hiddenDates.push({start: startDate.valueOf(), end: endDate.valueOf()}); } } } - // remove duplicates, merge where possible - exports.removeDuplicates(body); - // ensure the new positions are not on hidden dates - var startHidden = exports.isHidden(body.range.start, body.hiddenDates); - var endHidden = exports.isHidden(body.range.end,body.hiddenDates); - var rangeStart = body.range.start; - var rangeEnd = body.range.end; - if (startHidden.hidden == true) {rangeStart = body.range.startToFront == true ? startHidden.startDate - 1 : startHidden.endDate + 1;} - if (endHidden.hidden == true) {rangeEnd = body.range.endToFront == true ? endHidden.startDate - 1 : endHidden.endDate + 1;} - if (startHidden.hidden == true || endHidden.hidden == true) { - body.range._applyRange(rangeStart, rangeEnd); + } + else { + // get all items + if (order) { + // create an ordered list + items = []; + for (id in data) { + if (data.hasOwnProperty(id)) { + items.push(data[id]); + } + } + + this._sort(items, order); + + for (i = 0, len = items.length; i < len; i++) { + ids[i] = items[i][this._fieldId]; + } + } + else { + // create unordered list + for (id in data) { + if (data.hasOwnProperty(id)) { + item = data[id]; + ids.push(item[this._fieldId]); + } + } } } - } + return ids; + }; + /** + * Returns the DataSet itself. Is overwritten for example by the DataView, + * which returns the DataSet it is connected to instead. + */ + DataSet.prototype.getDataSet = function () { + return this; + }; /** - * remove duplicates from the hidden dates list. Duplicates are evil. They mess everything up. - * Scales with N^2 - * @param body + * Execute a callback function for every item in the dataset. + * @param {function} callback + * @param {Object} [options] Available options: + * {Object.} [type] + * {String[]} [fields] filter fields + * {function} [filter] filter items + * {String | function} [order] Order the items by + * a field name or custom sort function. */ - exports.removeDuplicates = function(body) { - var hiddenDates = body.hiddenDates; - var safeDates = []; - for (var i = 0; i < hiddenDates.length; i++) { - for (var j = 0; j < hiddenDates.length; j++) { - if (i != j && hiddenDates[j].remove != true && hiddenDates[i].remove != true) { - // j inside i - if (hiddenDates[j].start >= hiddenDates[i].start && hiddenDates[j].end <= hiddenDates[i].end) { - hiddenDates[j].remove = true; - } - // j start inside i - else if (hiddenDates[j].start >= hiddenDates[i].start && hiddenDates[j].start <= hiddenDates[i].end) { - hiddenDates[i].end = hiddenDates[j].end; - hiddenDates[j].remove = true; - } - // j end inside i - else if (hiddenDates[j].end >= hiddenDates[i].start && hiddenDates[j].end <= hiddenDates[i].end) { - hiddenDates[i].start = hiddenDates[j].start; - hiddenDates[j].remove = true; + DataSet.prototype.forEach = function (callback, options) { + var filter = options && options.filter, + type = options && options.type || this._options.type, + data = this._data, + item, + id; + + if (options && options.order) { + // execute forEach on ordered list + var items = this.get(options); + + for (var i = 0, len = items.length; i < len; i++) { + item = items[i]; + id = item[this._fieldId]; + callback(item, id); + } + } + else { + // unordered + for (id in data) { + if (data.hasOwnProperty(id)) { + item = this._getItem(id, type); + if (!filter || filter(item)) { + callback(item, id); } } } } + }; - for (var i = 0; i < hiddenDates.length; i++) { - if (hiddenDates[i].remove !== true) { - safeDates.push(hiddenDates[i]); + /** + * Map every item in the dataset. + * @param {function} callback + * @param {Object} [options] Available options: + * {Object.} [type] + * {String[]} [fields] filter fields + * {function} [filter] filter items + * {String | function} [order] Order the items by + * a field name or custom sort function. + * @return {Object[]} mappedItems + */ + DataSet.prototype.map = function (callback, options) { + var filter = options && options.filter, + type = options && options.type || this._options.type, + mappedItems = [], + data = this._data, + item; + + // convert and filter items + for (var id in data) { + if (data.hasOwnProperty(id)) { + item = this._getItem(id, type); + if (!filter || filter(item)) { + mappedItems.push(callback(item, id)); + } } } - body.hiddenDates = safeDates; - body.hiddenDates.sort(function (a, b) { - return a.start - b.start; - }); // sort by start time - } - - exports.printDates = function(dates) { - for (var i =0; i < dates.length; i++) { - console.log(i, new Date(dates[i].start),new Date(dates[i].end), dates[i].start, dates[i].end, dates[i].remove); + // order items + if (options && options.order) { + this._sort(mappedItems, options.order); } - } + + return mappedItems; + }; /** - * Used in TimeStep to avoid the hidden times. - * @param timeStep - * @param previousTime + * Filter the fields of an item + * @param {Object} item + * @param {String[]} fields Field names + * @return {Object} filteredItem + * @private */ - exports.stepOverHiddenDates = function(timeStep, previousTime) { - var stepInHidden = false; - var currentValue = timeStep.current.valueOf(); - for (var i = 0; i < timeStep.hiddenDates.length; i++) { - var startDate = timeStep.hiddenDates[i].start; - var endDate = timeStep.hiddenDates[i].end; - if (currentValue >= startDate && currentValue < endDate) { - stepInHidden = true; - break; + DataSet.prototype._filterFields = function (item, fields) { + var filteredItem = {}; + + for (var field in item) { + if (item.hasOwnProperty(field) && (fields.indexOf(field) != -1)) { + filteredItem[field] = item[field]; } } - if (stepInHidden == true && currentValue < timeStep._end.valueOf() && currentValue != previousTime) { - var prevValue = moment(previousTime); - var newValue = moment(endDate); - //check if the next step should be major - if (prevValue.year() != newValue.year()) {timeStep.switchedYear = true;} - else if (prevValue.month() != newValue.month()) {timeStep.switchedMonth = true;} - else if (prevValue.dayOfYear() != newValue.dayOfYear()) {timeStep.switchedDay = true;} - - timeStep.current = newValue.toDate(); - } + return filteredItem; }; - - ///** - // * Used in TimeStep to avoid the hidden times. - // * @param timeStep - // * @param previousTime - // */ - //exports.checkFirstStep = function(timeStep) { - // var stepInHidden = false; - // var currentValue = timeStep.current.valueOf(); - // for (var i = 0; i < timeStep.hiddenDates.length; i++) { - // var startDate = timeStep.hiddenDates[i].start; - // var endDate = timeStep.hiddenDates[i].end; - // if (currentValue >= startDate && currentValue < endDate) { - // stepInHidden = true; - // break; - // } - // } - // - // if (stepInHidden == true && currentValue <= timeStep._end.valueOf()) { - // var newValue = moment(endDate); - // timeStep.current = newValue.toDate(); - // } - //}; - /** - * replaces the Core toScreen methods - * @param Core - * @param time - * @param width - * @returns {number} + * Sort the provided array with items + * @param {Object[]} items + * @param {String | function} order A field name or custom sort function. + * @private */ - exports.toScreen = function(Core, time, width) { - if (Core.body.hiddenDates.length == 0) { - var conversion = Core.range.conversion(width); - return (time.valueOf() - conversion.offset) * conversion.scale; + DataSet.prototype._sort = function (items, order) { + if (util.isString(order)) { + // order by provided field name + var name = order; // field name + items.sort(function (a, b) { + var av = a[name]; + var bv = b[name]; + return (av > bv) ? 1 : ((av < bv) ? -1 : 0); + }); + } + else if (typeof order === 'function') { + // order by sort function + items.sort(order); } + // TODO: extend order by an Object {field:String, direction:String} + // where direction can be 'asc' or 'desc' else { - var hidden = exports.isHidden(time, Core.body.hiddenDates) - if (hidden.hidden == true) { - time = hidden.startDate; - } - - var duration = exports.getHiddenDurationBetween(Core.body.hiddenDates, Core.range.start, Core.range.end); - time = exports.correctTimeForHidden(Core.body.hiddenDates, Core.range, time); - - var conversion = Core.range.conversion(width, duration); - return (time.valueOf() - conversion.offset) * conversion.scale; + throw new TypeError('Order must be a function or a string'); } }; - /** - * Replaces the core toTime methods - * @param body - * @param range - * @param x - * @param width - * @returns {Date} + * Remove an object by pointer or by id + * @param {String | Number | Object | Array} id Object or id, or an array with + * objects or ids to be removed + * @param {String} [senderId] Optional sender id + * @return {Array} removedIds */ - exports.toTime = function(Core, x, width) { - if (Core.body.hiddenDates.length == 0) { - var conversion = Core.range.conversion(width); - return new Date(x / conversion.scale + conversion.offset); + DataSet.prototype.remove = function (id, senderId) { + var removedIds = [], + i, len, removedId; + + if (Array.isArray(id)) { + for (i = 0, len = id.length; i < len; i++) { + removedId = this._remove(id[i]); + if (removedId != null) { + removedIds.push(removedId); + } + } } else { - var hiddenDuration = exports.getHiddenDurationBetween(Core.body.hiddenDates, Core.range.start, Core.range.end); - var totalDuration = Core.range.end - Core.range.start - hiddenDuration; - var partialDuration = totalDuration * x / width; - var accumulatedHiddenDuration = exports.getAccumulatedHiddenDuration(Core.body.hiddenDates, Core.range, partialDuration); + removedId = this._remove(id); + if (removedId != null) { + removedIds.push(removedId); + } + } - var newTime = new Date(accumulatedHiddenDuration + partialDuration + Core.range.start); - return newTime; + if (removedIds.length) { + this._trigger('remove', {items: removedIds}, senderId); } - }; + return removedIds; + }; /** - * Support function - * - * @param hiddenDates - * @param range - * @returns {number} + * Remove an item by its id + * @param {Number | String | Object} id id or item + * @returns {Number | String | null} id + * @private */ - exports.getHiddenDurationBetween = function(hiddenDates, start, end) { - var duration = 0; - for (var i = 0; i < hiddenDates.length; i++) { - var startDate = hiddenDates[i].start; - var endDate = hiddenDates[i].end; - // if time after the cutout, and the - if (startDate >= start && endDate < end) { - duration += endDate - startDate; + DataSet.prototype._remove = function (id) { + if (util.isNumber(id) || util.isString(id)) { + if (this._data[id]) { + delete this._data[id]; + return id; } } - return duration; + else if (id instanceof Object) { + var itemId = id[this._fieldId]; + if (itemId && this._data[itemId]) { + delete this._data[itemId]; + return itemId; + } + } + return null; }; + /** + * Clear the data + * @param {String} [senderId] Optional sender id + * @return {Array} removedIds The ids of all removed items + */ + DataSet.prototype.clear = function (senderId) { + var ids = Object.keys(this._data); + + this._data = {}; + + this._trigger('remove', {items: ids}, senderId); + + return ids; + }; /** - * Support function - * @param hiddenDates - * @param range - * @param time - * @returns {{duration: number, time: *, offset: number}} + * Find the item with maximum value of a specified field + * @param {String} field + * @return {Object | null} item Item containing max value, or null if no items */ - exports.correctTimeForHidden = function(hiddenDates, range, time) { - time = moment(time).toDate().valueOf(); - time -= exports.getHiddenDurationBefore(hiddenDates,range,time); - return time; + DataSet.prototype.max = function (field) { + var data = this._data, + max = null, + maxField = null; + + for (var id in data) { + if (data.hasOwnProperty(id)) { + var item = data[id]; + var itemField = item[field]; + if (itemField != null && (!max || itemField > maxField)) { + max = item; + maxField = itemField; + } + } + } + + return max; }; - exports.getHiddenDurationBefore = function(hiddenDates, range, time) { - var timeOffset = 0; - time = moment(time).toDate().valueOf(); + /** + * Find the item with minimum value of a specified field + * @param {String} field + * @return {Object | null} item Item containing max value, or null if no items + */ + DataSet.prototype.min = function (field) { + var data = this._data, + min = null, + minField = null; - for (var i = 0; i < hiddenDates.length; i++) { - var startDate = hiddenDates[i].start; - var endDate = hiddenDates[i].end; - // if time after the cutout, and the - if (startDate >= range.start && endDate < range.end) { - if (time >= endDate) { - timeOffset += (endDate - startDate); + for (var id in data) { + if (data.hasOwnProperty(id)) { + var item = data[id]; + var itemField = item[field]; + if (itemField != null && (!min || itemField < minField)) { + min = item; + minField = itemField; } } } - return timeOffset; - } + + return min; + }; /** - * sum the duration from start to finish, including the hidden duration, - * until the required amount has been reached, return the accumulated hidden duration - * @param hiddenDates - * @param range - * @param time - * @returns {{duration: number, time: *, offset: number}} + * Find all distinct values of a specified field + * @param {String} field + * @return {Array} values Array containing all distinct values. If data items + * do not contain the specified field are ignored. + * The returned array is unordered. */ - exports.getAccumulatedHiddenDuration = function(hiddenDates, range, requiredDuration) { - var hiddenDuration = 0; - var duration = 0; - var previousPoint = range.start; - //exports.printDates(hiddenDates) - for (var i = 0; i < hiddenDates.length; i++) { - var startDate = hiddenDates[i].start; - var endDate = hiddenDates[i].end; - // if time after the cutout, and the - if (startDate >= range.start && endDate < range.end) { - duration += startDate - previousPoint; - previousPoint = endDate; - if (duration >= requiredDuration) { - break; + DataSet.prototype.distinct = function (field) { + var data = this._data; + var values = []; + var fieldType = this._options.type && this._options.type[field] || null; + var count = 0; + var i; + + for (var prop in data) { + if (data.hasOwnProperty(prop)) { + var item = data[prop]; + var value = item[field]; + var exists = false; + for (i = 0; i < count; i++) { + if (values[i] == value) { + exists = true; + break; + } } - else { - hiddenDuration += endDate - startDate; + if (!exists && (value !== undefined)) { + values[count] = value; + count++; } } } - return hiddenDuration; - }; - + if (fieldType) { + for (i = 0; i < values.length; i++) { + values[i] = util.convert(values[i], fieldType); + } + } + return values; + }; /** - * used to step over to either side of a hidden block. Correction is disabled on tablets, might be set to true - * @param hiddenDates - * @param time - * @param direction - * @param correctionEnabled - * @returns {*} + * Add a single item. Will fail when an item with the same id already exists. + * @param {Object} item + * @return {String} id + * @private */ - exports.snapAwayFromHidden = function(hiddenDates, time, direction, correctionEnabled) { - var isHidden = exports.isHidden(time, hiddenDates); - if (isHidden.hidden == true) { - if (direction < 0) { - if (correctionEnabled == true) { - return isHidden.startDate - (isHidden.endDate - time) - 1; - } - else { - return isHidden.startDate - 1; - } - } - else { - if (correctionEnabled == true) { - return isHidden.endDate + (time - isHidden.startDate) + 1; - } - else { - return isHidden.endDate + 1; - } + DataSet.prototype._addItem = function (item) { + var id = item[this._fieldId]; + + if (id != undefined) { + // check whether this id is already taken + if (this._data[id]) { + // item already exists + throw new Error('Cannot add item: item with id ' + id + ' already exists'); } } else { - return time; + // generate an id + id = util.randomUUID(); + item[this._fieldId] = id; } - } - - - /** - * Check if a time is hidden - * - * @param time - * @param hiddenDates - * @returns {{hidden: boolean, startDate: Window.start, endDate: *}} - */ - exports.isHidden = function(time, hiddenDates) { - for (var i = 0; i < hiddenDates.length; i++) { - var startDate = hiddenDates[i].start; - var endDate = hiddenDates[i].end; - - if (time >= startDate && time < endDate) { // if the start is entering a hidden zone - return {hidden: true, startDate: startDate, endDate: endDate}; - break; + var d = {}; + for (var field in item) { + if (item.hasOwnProperty(field)) { + var fieldType = this._type[field]; // type may be undefined + d[field] = util.convert(item[field], fieldType); } } - return {hidden: false, startDate: startDate, endDate: endDate}; - } + this._data[id] = d; -/***/ }, -/* 16 */ -/***/ function(module, exports, __webpack_require__) { + return id; + }; /** - * @constructor DataStep - * The class DataStep is an iterator for data for the lineGraph. You provide a start data point and an - * end data point. The class itself determines the best scale (step size) based on the - * provided start Date, end Date, and minimumStep. - * - * If minimumStep is provided, the step size is chosen as close as possible - * to the minimumStep but larger than minimumStep. If minimumStep is not - * provided, the scale is set to 1 DAY. - * The minimumStep should correspond with the onscreen size of about 6 characters - * - * Alternatively, you can set a scale by hand. - * After creation, you can initialize the class by executing first(). Then you - * can iterate from the start date to the end date via next(). You can check if - * the end date is reached with the function hasNext(). After each step, you can - * retrieve the current date via getCurrent(). - * The DataStep has scales ranging from milliseconds, seconds, minutes, hours, - * days, to years. - * - * Version: 1.2 - * - * @param {Date} [start] The start date, for example new Date(2010, 9, 21) - * or new Date(2010, 9, 21, 23, 45, 00) - * @param {Date} [end] The end date - * @param {Number} [minimumStep] Optional. Minimum step size in milliseconds + * Get an item. Fields can be converted to a specific type + * @param {String} id + * @param {Object.} [types] field types to convert + * @return {Object | null} item + * @private */ - function DataStep(start, end, minimumStep, containerHeight, customRange, alignZeros) { - // variables - this.current = 0; - - this.autoScale = true; - this.stepIndex = 0; - this.step = 1; - this.scale = 1; - - this.marginStart; - this.marginEnd; - this.deadSpace = 0; - - this.majorSteps = [1, 2, 5, 10]; - this.minorSteps = [0.25, 0.5, 1, 2]; - - this.alignZeros = alignZeros; - - this.setRange(start, end, minimumStep, containerHeight, customRange); - } + DataSet.prototype._getItem = function (id, types) { + var field, value; + // get the item from the dataset + var raw = this._data[id]; + if (!raw) { + return null; + } + // convert the items field types + var converted = {}; + if (types) { + for (field in raw) { + if (raw.hasOwnProperty(field)) { + value = raw[field]; + converted[field] = util.convert(value, types[field]); + } + } + } + else { + // no field types specified, no converting needed + for (field in raw) { + if (raw.hasOwnProperty(field)) { + value = raw[field]; + converted[field] = value; + } + } + } + return converted; + }; /** - * Set a new range - * If minimumStep is provided, the step size is chosen as close as possible - * to the minimumStep but larger than minimumStep. If minimumStep is not - * provided, the scale is set to 1 DAY. - * The minimumStep should correspond with the onscreen size of about 6 characters - * @param {Number} [start] The start date and time. - * @param {Number} [end] The end date and time. - * @param {Number} [minimumStep] Optional. Minimum step size in milliseconds + * Update a single item: merge with existing item. + * Will fail when the item has no id, or when there does not exist an item + * with the same id. + * @param {Object} item + * @return {String} id + * @private */ - DataStep.prototype.setRange = function(start, end, minimumStep, containerHeight, customRange) { - this._start = customRange.min === undefined ? start : customRange.min; - this._end = customRange.max === undefined ? end : customRange.max; - - if (this._start == this._end) { - this._start -= 0.75; - this._end += 1; + DataSet.prototype._updateItem = function (item) { + var id = item[this._fieldId]; + if (id == undefined) { + throw new Error('Cannot update item: item has no id (item: ' + JSON.stringify(item) + ')'); + } + var d = this._data[id]; + if (!d) { + // item doesn't exist + throw new Error('Cannot update item: no item with id ' + id + ' found'); } - if (this.autoScale == true) { - this.setMinimumStep(minimumStep, containerHeight); + // merge with current item + for (var field in item) { + if (item.hasOwnProperty(field)) { + var fieldType = this._type[field]; // type may be undefined + d[field] = util.convert(item[field], fieldType); + } } - this.setFirst(customRange); + return id; }; /** - * Automatically determine the scale that bests fits the provided minimum step - * @param {Number} [minimumStep] The minimum step size in milliseconds + * Get an array with the column names of a Google DataTable + * @param {DataTable} dataTable + * @return {String[]} columnNames + * @private */ - DataStep.prototype.setMinimumStep = function(minimumStep, containerHeight) { - // round to floor - var size = this._end - this._start; - var safeSize = size * 1.2; - var minimumStepValue = minimumStep * (safeSize / containerHeight); - var orderOfMagnitude = Math.round(Math.log(safeSize)/Math.LN10); - - var minorStepIdx = -1; - var magnitudefactor = Math.pow(10,orderOfMagnitude); - - var start = 0; - if (orderOfMagnitude < 0) { - start = orderOfMagnitude; + DataSet.prototype._getColumnNames = function (dataTable) { + var columns = []; + for (var col = 0, cols = dataTable.getNumberOfColumns(); col < cols; col++) { + columns[col] = dataTable.getColumnId(col) || dataTable.getColumnLabel(col); } + return columns; + }; - var solutionFound = false; - for (var i = start; Math.abs(i) <= Math.abs(orderOfMagnitude); i++) { - magnitudefactor = Math.pow(10,i); - for (var j = 0; j < this.minorSteps.length; j++) { - var stepSize = magnitudefactor * this.minorSteps[j]; - if (stepSize >= minimumStepValue) { - solutionFound = true; - minorStepIdx = j; - break; - } - } - if (solutionFound == true) { - break; - } + /** + * Append an item as a row to the dataTable + * @param dataTable + * @param columns + * @param item + * @private + */ + DataSet.prototype._appendRow = function (dataTable, columns, item) { + var row = dataTable.addRow(); + + for (var col = 0, cols = columns.length; col < cols; col++) { + var field = columns[col]; + dataTable.setValue(row, col, item[field]); } - this.stepIndex = minorStepIdx; - this.scale = magnitudefactor; - this.step = magnitudefactor * this.minorSteps[minorStepIdx]; }; + module.exports = DataSet; + +/***/ }, +/* 8 */ +/***/ function(module, exports, __webpack_require__) { /** - * Round the current date to the first minor date value - * This must be executed once when the current date is set to start Date + * A queue + * @param {Object} options + * Available options: + * - delay: number When provided, the queue will be flushed + * automatically after an inactivity of this delay + * in milliseconds. + * Default value is null. + * - max: number When the queue exceeds the given maximum number + * of entries, the queue is flushed automatically. + * Default value of max is Infinity. + * @constructor */ - DataStep.prototype.setFirst = function(customRange) { - if (customRange === undefined) { - customRange = {}; - } + function Queue(options) { + // options + this.delay = null; + this.max = Infinity; - var niceStart = customRange.min === undefined ? this._start - (this.scale * 2 * this.minorSteps[this.stepIndex]) : customRange.min; - var niceEnd = customRange.max === undefined ? this._end + (this.scale * this.minorSteps[this.stepIndex]) : customRange.max; + // properties + this._queue = []; + this._timeout = null; + this._extended = null; - this.marginEnd = customRange.max === undefined ? this.roundToMinor(niceEnd) : customRange.max; - this.marginStart = customRange.min === undefined ? this.roundToMinor(niceStart) : customRange.min; + this.setOptions(options); + } - // if we need to align the zero's we need to make sure that there is a zero to use. - if (this.alignZeros == true && (this.marginEnd - this.marginStart) % this.step != 0) { - this.marginEnd += this.marginEnd % this.step; + /** + * Update the configuration of the queue + * @param {Object} options + * Available options: + * - delay: number When provided, the queue will be flushed + * automatically after an inactivity of this delay + * in milliseconds. + * Default value is null. + * - max: number When the queue exceeds the given maximum number + * of entries, the queue is flushed automatically. + * Default value of max is Infinity. + * @param options + */ + Queue.prototype.setOptions = function (options) { + if (options && typeof options.delay !== 'undefined') { + this.delay = options.delay; + } + if (options && typeof options.max !== 'undefined') { + this.max = options.max; } - this.deadSpace = this.roundToMinor(niceEnd) - niceEnd + this.roundToMinor(niceStart) - niceStart; - this.marginRange = this.marginEnd - this.marginStart; - - - this.current = this.marginEnd; + this._flushIfNeeded(); }; - DataStep.prototype.roundToMinor = function(value) { - var rounded = value - (value % (this.scale * this.minorSteps[this.stepIndex])); - if (value % (this.scale * this.minorSteps[this.stepIndex]) > 0.5 * (this.scale * this.minorSteps[this.stepIndex])) { - return rounded + (this.scale * this.minorSteps[this.stepIndex]); + /** + * Extend an object with queuing functionality. + * The object will be extended with a function flush, and the methods provided + * in options.replace will be replaced with queued ones. + * @param {Object} object + * @param {Object} options + * Available options: + * - replace: Array. + * A list with method names of the methods + * on the object to be replaced with queued ones. + * - delay: number When provided, the queue will be flushed + * automatically after an inactivity of this delay + * in milliseconds. + * Default value is null. + * - max: number When the queue exceeds the given maximum number + * of entries, the queue is flushed automatically. + * Default value of max is Infinity. + * @return {Queue} Returns the created queue + */ + Queue.extend = function (object, options) { + var queue = new Queue(options); + + if (object.flush !== undefined) { + throw new Error('Target object already has a property flush'); } - else { - return rounded; + object.flush = function () { + queue.flush(); + }; + + var methods = [{ + name: 'flush', + original: undefined + }]; + + if (options && options.replace) { + for (var i = 0; i < options.replace.length; i++) { + var name = options.replace[i]; + methods.push({ + name: name, + original: object[name] + }); + queue.replace(object, name); + } } - } + queue._extended = { + object: object, + methods: methods + }; - /** - * Check if the there is a next step - * @return {boolean} true if the current date has not passed the end date - */ - DataStep.prototype.hasNext = function () { - return (this.current >= this.marginStart); + return queue; }; /** - * Do the next step + * Destroy the queue. The queue will first flush all queued actions, and in + * case it has extended an object, will restore the original object. */ - DataStep.prototype.next = function() { - var prev = this.current; - this.current -= this.step; + Queue.prototype.destroy = function () { + this.flush(); - // safety mechanism: if current time is still unchanged, move to the end - if (this.current == prev) { - this.current = this._end; + if (this._extended) { + var object = this._extended.object; + var methods = this._extended.methods; + for (var i = 0; i < methods.length; i++) { + var method = methods[i]; + if (method.original) { + object[method.name] = method.original; + } + else { + delete object[method.name]; + } + } + this._extended = null; } }; /** - * Do the next step + * Replace a method on an object with a queued version + * @param {Object} object Object having the method + * @param {string} method The method name */ - DataStep.prototype.previous = function() { - this.current += this.step; - this.marginEnd += this.step; - this.marginRange = this.marginEnd - this.marginStart; - }; + Queue.prototype.replace = function(object, method) { + var me = this; + var original = object[method]; + if (!original) { + throw new Error('Method ' + method + ' undefined'); + } + object[method] = function () { + // create an Array with the arguments + var args = []; + for (var i = 0; i < arguments.length; i++) { + args[i] = arguments[i]; + } + // add this call to the queue + me.queue({ + args: args, + fn: original, + context: this + }); + }; + }; /** - * Get the current datetime - * @return {String} current The current date + * Queue a call + * @param {function | {fn: function, args: Array} | {fn: function, args: Array, context: Object}} entry */ - DataStep.prototype.getCurrent = function(decimals) { - // prevent round-off errors when close to zero - var current = (Math.abs(this.current) < this.step / 2) ? 0 : this.current; - var toPrecision = '' + Number(current).toPrecision(5); - - // If decimals is specified, then limit or extend the string as required - if(decimals !== undefined && !isNaN(Number(decimals))) { - // If string includes exponent, then we need to add it to the end - var exp = ""; - var index = toPrecision.indexOf("e"); - if(index != -1) { - // Get the exponent - exp = toPrecision.slice(index); - // Remove the exponent in case we need to zero-extend - toPrecision = toPrecision.slice(0, index); - } - index = Math.max(toPrecision.indexOf(","), toPrecision.indexOf(".")); - if(index === -1) { - // No decimal found - if we want decimals, then we need to add it - if(decimals !== 0) { - toPrecision += '.'; - } - // Calculate how long the string should be - index = toPrecision.length + decimals; - } - else if(decimals !== 0) { - // Calculate how long the string should be - accounting for the decimal place - index += decimals + 1; - } - if(index > toPrecision.length) { - // We need to add zeros! - for(var cnt = index - toPrecision.length; cnt > 0; cnt--) { - toPrecision += '0'; - } - } - else { - // we need to remove characters - toPrecision = toPrecision.slice(0, index); - } - // Add the exponent if there is one - toPrecision += exp; + Queue.prototype.queue = function(entry) { + if (typeof entry === 'function') { + this._queue.push({fn: entry}); } else { - if (toPrecision.indexOf(",") != -1 || toPrecision.indexOf(".") != -1) { - // If no decimal is specified, and there are decimal places, remove trailing zeros - for (var i = toPrecision.length - 1; i > 0; i--) { - if (toPrecision[i] == "0") { - toPrecision = toPrecision.slice(0, i); - } - else if (toPrecision[i] == "." || toPrecision[i] == ",") { - toPrecision = toPrecision.slice(0, i); - break; - } - else { - break; - } - } - } + this._queue.push(entry); } - return toPrecision; + this._flushIfNeeded(); }; - - /** - * Snap a date to a rounded value. - * The snap intervals are dependent on the current scale and step. - * @param {Date} date the date to be snapped. - * @return {Date} snappedDate + * Check whether the queue needs to be flushed + * @private */ - DataStep.prototype.snap = function(date) { + Queue.prototype._flushIfNeeded = function () { + // flush when the maximum is exceeded. + if (this._queue.length > this.max) { + this.flush(); + } + // flush after a period of inactivity when a delay is configured + clearTimeout(this._timeout); + if (this.queue.length > 0 && typeof this.delay === 'number') { + var me = this; + this._timeout = setTimeout(function () { + me.flush(); + }, this.delay); + } }; /** - * Check if the current value is a major value (for example when the step - * is DAY, a major value is each first day of the MONTH) - * @return {boolean} true if current date is major, else false. + * Flush all queued calls */ - DataStep.prototype.isMajor = function() { - return (this.current % (this.scale * this.majorSteps[this.stepIndex]) == 0); + Queue.prototype.flush = function () { + while (this._queue.length > 0) { + var entry = this._queue.shift(); + entry.fn.apply(entry.context || entry.fn, entry.args || []); + } }; - module.exports = DataStep; + module.exports = Queue; /***/ }, -/* 17 */ +/* 9 */ /***/ function(module, exports, __webpack_require__) { var util = __webpack_require__(1); - var hammerUtil = __webpack_require__(47); - var moment = __webpack_require__(44); - var Component = __webpack_require__(20); - var DateUtil = __webpack_require__(15); + var DataSet = __webpack_require__(7); /** - * @constructor Range - * A Range controls a numeric range with a start and end value. - * The Range adjusts the range based on mouse events or programmatic changes, - * and triggers events when the range is changing or has been changed. - * @param {{dom: Object, domProps: Object, emitter: Emitter}} body - * @param {Object} [options] See description at Range.setOptions + * DataView + * + * a dataview offers a filtered view on a dataset or an other dataview. + * + * @param {DataSet | DataView} data + * @param {Object} [options] Available options: see method get + * + * @constructor DataView */ - function Range(body, options) { - var now = moment().hours(0).minutes(0).seconds(0).milliseconds(0); - this.start = now.clone().add(-3, 'days').valueOf(); // Number - this.end = now.clone().add(4, 'days').valueOf(); // Number - - this.body = body; - this.deltaDifference = 0; - this.scaleOffset = 0; - this.startToFront = false; - this.endToFront = true; - - // default options - this.defaultOptions = { - start: null, - end: null, - direction: 'horizontal', // 'horizontal' or 'vertical' - moveable: true, - zoomable: true, - min: null, - max: null, - zoomMin: 10, // milliseconds - zoomMax: 1000 * 60 * 60 * 24 * 365 * 10000 // milliseconds - }; - this.options = util.extend({}, this.defaultOptions); + function DataView (data, options) { + this._data = null; + this._ids = {}; // ids of the items currently in memory (just contains a boolean true) + this._options = options || {}; + this._fieldId = 'id'; // name of the field containing id + this._subscribers = {}; // event subscribers - this.props = { - touch: {} + var me = this; + this.listener = function () { + me._onEvent.apply(me, arguments); }; - this.animateTimer = null; - - // drag listeners for dragging - this.body.emitter.on('dragstart', this._onDragStart.bind(this)); - this.body.emitter.on('drag', this._onDrag.bind(this)); - this.body.emitter.on('dragend', this._onDragEnd.bind(this)); - - // ignore dragging when holding - this.body.emitter.on('hold', this._onHold.bind(this)); - - // mouse wheel for zooming - this.body.emitter.on('mousewheel', this._onMouseWheel.bind(this)); - this.body.emitter.on('DOMMouseScroll', this._onMouseWheel.bind(this)); // For FF - - // pinch to zoom - this.body.emitter.on('touch', this._onTouch.bind(this)); - this.body.emitter.on('pinch', this._onPinch.bind(this)); - this.setOptions(options); + this.setData(data); } - Range.prototype = new Component(); + // TODO: implement a function .config() to dynamically update things like configured filter + // and trigger changes accordingly /** - * Set options for the range controller - * @param {Object} options Available options: - * {Number | Date | String} start Start date for the range - * {Number | Date | String} end End date for the range - * {Number} min Minimum value for start - * {Number} max Maximum value for end - * {Number} zoomMin Set a minimum value for - * (end - start). - * {Number} zoomMax Set a maximum value for - * (end - start). - * {Boolean} moveable Enable moving of the range - * by dragging. True by default - * {Boolean} zoomable Enable zooming of the range - * by pinching/scrolling. True by default + * Set a data source for the view + * @param {DataSet | DataView} data */ - Range.prototype.setOptions = function (options) { - if (options) { - // copy the options that we know - var fields = ['direction', 'min', 'max', 'zoomMin', 'zoomMax', 'moveable', 'zoomable', 'activate', 'hiddenDates']; - util.selectiveExtend(fields, this.options, options); + DataView.prototype.setData = function (data) { + var ids, i, len; - if ('start' in options || 'end' in options) { - // apply a new range. both start and end are optional - this.setRange(options.start, options.end); + if (this._data) { + // unsubscribe from current dataset + if (this._data.unsubscribe) { + this._data.unsubscribe('*', this.listener); } - } - }; - /** - * Test whether direction has a valid value - * @param {String} direction 'horizontal' or 'vertical' - */ - function validateDirection (direction) { - if (direction != 'horizontal' && direction != 'vertical') { - throw new TypeError('Unknown direction "' + direction + '". ' + - 'Choose "horizontal" or "vertical".'); + // trigger a remove of all items in memory + ids = []; + for (var id in this._ids) { + if (this._ids.hasOwnProperty(id)) { + ids.push(id); + } + } + this._ids = {}; + this._trigger('remove', {items: ids}); } - } - - /** - * Set a new start and end range - * @param {Date | Number | String} [start] - * @param {Date | Number | String} [end] - * @param {boolean | number} [animate=false] If true, the range is animated - * smoothly to the new window. - * If animate is a number, the - * number is taken as duration - * Default duration is 500 ms. - * - */ - Range.prototype.setRange = function(start, end, animate) { - var _start = start != undefined ? util.convert(start, 'Date').valueOf() : null; - var _end = end != undefined ? util.convert(end, 'Date').valueOf() : null; - this._cancelAnimation(); - - if (animate) { - var me = this; - var initStart = this.start; - var initEnd = this.end; - var duration = typeof animate === 'number' ? animate : 500; - var initTime = new Date().valueOf(); - var anyChanged = false; - var next = function () { - if (!me.props.touch.dragging) { - var now = new Date().valueOf(); - var time = now - initTime; - var done = time > duration; - var s = (done || _start === null) ? _start : util.easeInOutQuad(time, initStart, _start, duration); - var e = (done || _end === null) ? _end : util.easeInOutQuad(time, initEnd, _end, duration); + this._data = data; - changed = me._applyRange(s, e); - DateUtil.updateHiddenDates(me.body, me.options.hiddenDates); - anyChanged = anyChanged || changed; - if (changed) { - me.body.emitter.emit('rangechange', {start: new Date(me.start), end: new Date(me.end)}); - } + if (this._data) { + // update fieldId + this._fieldId = this._options.fieldId || + (this._data && this._data.options && this._data.options.fieldId) || + 'id'; - if (done) { - if (anyChanged) { - me.body.emitter.emit('rangechanged', {start: new Date(me.start), end: new Date(me.end)}); - } - } - else { - // animate with as high as possible frame rate, leave 20 ms in between - // each to prevent the browser from blocking - me.animateTimer = setTimeout(next, 20); - } - } + // trigger an add of all added items + ids = this._data.getIds({filter: this._options && this._options.filter}); + for (i = 0, len = ids.length; i < len; i++) { + id = ids[i]; + this._ids[id] = true; } + this._trigger('add', {items: ids}); - return next(); - } - else { - var changed = this._applyRange(_start, _end); - DateUtil.updateHiddenDates(this.body, this.options.hiddenDates); - if (changed) { - var params = {start: new Date(this.start), end: new Date(this.end)}; - this.body.emitter.emit('rangechange', params); - this.body.emitter.emit('rangechanged', params); + // subscribe to new dataset + if (this._data.on) { + this._data.on('*', this.listener); } } }; /** - * Stop an animation - * @private + * Get data from the data view + * + * Usage: + * + * get() + * get(options: Object) + * get(options: Object, data: Array | DataTable) + * + * get(id: Number) + * get(id: Number, options: Object) + * get(id: Number, options: Object, data: Array | DataTable) + * + * get(ids: Number[]) + * get(ids: Number[], options: Object) + * get(ids: Number[], options: Object, data: Array | DataTable) + * + * Where: + * + * {Number | String} id The id of an item + * {Number[] | String{}} ids An array with ids of items + * {Object} options An Object with options. Available options: + * {String} [type] Type of data to be returned. Can + * be 'DataTable' or 'Array' (default) + * {Object.} [convert] + * {String[]} [fields] field names to be returned + * {function} [filter] filter items + * {String | function} [order] Order the items by + * a field name or custom sort function. + * {Array | DataTable} [data] If provided, items will be appended to this + * array or table. Required in case of Google + * DataTable. + * @param args */ - Range.prototype._cancelAnimation = function () { - if (this.animateTimer) { - clearTimeout(this.animateTimer); - this.animateTimer = null; + DataView.prototype.get = function (args) { + var me = this; + + // parse the arguments + var ids, options, data; + var firstType = util.getType(arguments[0]); + if (firstType == 'String' || firstType == 'Number' || firstType == 'Array') { + // get(id(s) [, options] [, data]) + ids = arguments[0]; // can be a single id or an array with ids + options = arguments[1]; + data = arguments[2]; + } + else { + // get([, options] [, data]) + options = arguments[0]; + data = arguments[1]; } - }; - /** - * Set a new start and end range. This method is the same as setRange, but - * does not trigger a range change and range changed event, and it returns - * true when the range is changed - * @param {Number} [start] - * @param {Number} [end] - * @return {Boolean} changed - * @private - */ - Range.prototype._applyRange = function(start, end) { - var newStart = (start != null) ? util.convert(start, 'Date').valueOf() : this.start, - newEnd = (end != null) ? util.convert(end, 'Date').valueOf() : this.end, - max = (this.options.max != null) ? util.convert(this.options.max, 'Date').valueOf() : null, - min = (this.options.min != null) ? util.convert(this.options.min, 'Date').valueOf() : null, - diff; + // extend the options with the default options and provided options + var viewOptions = util.extend({}, this._options, options); - // check for valid number - if (isNaN(newStart) || newStart === null) { - throw new Error('Invalid start "' + start + '"'); - } - if (isNaN(newEnd) || newEnd === null) { - throw new Error('Invalid end "' + end + '"'); + // create a combined filter method when needed + if (this._options.filter && options && options.filter) { + viewOptions.filter = function (item) { + return me._options.filter(item) && options.filter(item); + } } - // prevent start < end - if (newEnd < newStart) { - newEnd = newStart; + // build up the call to the linked data set + var getArguments = []; + if (ids != undefined) { + getArguments.push(ids); } + getArguments.push(viewOptions); + getArguments.push(data); - // prevent start < min - if (min !== null) { - if (newStart < min) { - diff = (min - newStart); - newStart += diff; - newEnd += diff; + return this._data && this._data.get.apply(this._data, getArguments); + }; - // prevent end > max - if (max != null) { - if (newEnd > max) { - newEnd = max; - } - } - } - } + /** + * Get ids of all items or from a filtered set of items. + * @param {Object} [options] An Object with options. Available options: + * {function} [filter] filter items + * {String | function} [order] Order the items by + * a field name or custom sort function. + * @return {Array} ids + */ + DataView.prototype.getIds = function (options) { + var ids; - // prevent end > max - if (max !== null) { - if (newEnd > max) { - diff = (newEnd - max); - newStart -= diff; - newEnd -= diff; + if (this._data) { + var defaultFilter = this._options.filter; + var filter; - // prevent start < min - if (min != null) { - if (newStart < min) { - newStart = min; + if (options && options.filter) { + if (defaultFilter) { + filter = function (item) { + return defaultFilter(item) && options.filter(item); } } - } - } - - // prevent (end-start) < zoomMin - if (this.options.zoomMin !== null) { - var zoomMin = parseFloat(this.options.zoomMin); - if (zoomMin < 0) { - zoomMin = 0; - } - if ((newEnd - newStart) < zoomMin) { - if ((this.end - this.start) === zoomMin) { - // ignore this action, we are already zoomed to the minimum - newStart = this.start; - newEnd = this.end; - } else { - // zoom to the minimum - diff = (zoomMin - (newEnd - newStart)); - newStart -= diff / 2; - newEnd += diff / 2; + filter = options.filter; } } - } - - // prevent (end-start) > zoomMax - if (this.options.zoomMax !== null) { - var zoomMax = parseFloat(this.options.zoomMax); - if (zoomMax < 0) { - zoomMax = 0; - } - if ((newEnd - newStart) > zoomMax) { - if ((this.end - this.start) === zoomMax) { - // ignore this action, we are already zoomed to the maximum - newStart = this.start; - newEnd = this.end; - } - else { - // zoom to the maximum - diff = ((newEnd - newStart) - zoomMax); - newStart += diff / 2; - newEnd -= diff / 2; - } + else { + filter = defaultFilter; } - } - - var changed = (this.start != newStart || this.end != newEnd); - // if the new range does NOT overlap with the old range, emit checkRangedItems to avoid not showing ranged items (ranged meaning has end time, not neccesarily of type Range) - if (!((newStart >= this.start && newStart <= this.end) || (newEnd >= this.start && newEnd <= this.end)) && - !((this.start >= newStart && this.start <= newEnd) || (this.end >= newStart && this.end <= newEnd) )) { - this.body.emitter.emit('checkRangedItems'); + ids = this._data.getIds({ + filter: filter, + order: options && options.order + }); + } + else { + ids = []; } - this.start = newStart; - this.end = newEnd; - return changed; + return ids; }; /** - * Retrieve the current range. - * @return {Object} An object with start and end properties + * Get the DataSet to which this DataView is connected. In case there is a chain + * of multiple DataViews, the root DataSet of this chain is returned. + * @return {DataSet} dataSet */ - Range.prototype.getRange = function() { - return { - start: this.start, - end: this.end - }; + DataView.prototype.getDataSet = function () { + var dataSet = this; + while (dataSet instanceof DataView) { + dataSet = dataSet._data; + } + return dataSet || null; }; /** - * Calculate the conversion offset and scale for current range, based on - * the provided width - * @param {Number} width - * @returns {{offset: number, scale: number}} conversion + * Event listener. Will propagate all events from the connected data set to + * the subscribers of the DataView, but will filter the items and only trigger + * when there are changes in the filtered data set. + * @param {String} event + * @param {Object | null} params + * @param {String} senderId + * @private */ - Range.prototype.conversion = function (width, totalHidden) { - return Range.conversion(this.start, this.end, width, totalHidden); - }; + DataView.prototype._onEvent = function (event, params, senderId) { + var i, len, id, item, + ids = params && params.items, + data = this._data, + added = [], + updated = [], + removed = []; + + if (ids && data) { + switch (event) { + case 'add': + // filter the ids of the added items + for (i = 0, len = ids.length; i < len; i++) { + id = ids[i]; + item = this.get(id); + if (item) { + this._ids[id] = true; + added.push(id); + } + } + + break; + + case 'update': + // determine the event from the views viewpoint: an updated + // item can be added, updated, or removed from this view. + for (i = 0, len = ids.length; i < len; i++) { + id = ids[i]; + item = this.get(id); + + if (item) { + if (this._ids[id]) { + updated.push(id); + } + else { + this._ids[id] = true; + added.push(id); + } + } + else { + if (this._ids[id]) { + delete this._ids[id]; + removed.push(id); + } + else { + // nothing interesting for me :-( + } + } + } + + break; + + case 'remove': + // filter the ids of the removed items + for (i = 0, len = ids.length; i < len; i++) { + id = ids[i]; + if (this._ids[id]) { + delete this._ids[id]; + removed.push(id); + } + } + + break; + } - /** - * Static method to calculate the conversion offset and scale for a range, - * based on the provided start, end, and width - * @param {Number} start - * @param {Number} end - * @param {Number} width - * @returns {{offset: number, scale: number}} conversion - */ - Range.conversion = function (start, end, width, totalHidden) { - if (totalHidden === undefined) { - totalHidden = 0; - } - if (width != 0 && (end - start != 0)) { - return { - offset: start, - scale: width / (end - start - totalHidden) + if (added.length) { + this._trigger('add', {items: added}, senderId); + } + if (updated.length) { + this._trigger('update', {items: updated}, senderId); + } + if (removed.length) { + this._trigger('remove', {items: removed}, senderId); } - } - else { - return { - offset: 0, - scale: 1 - }; } }; - /** - * Start dragging horizontally or vertically - * @param {Event} event - * @private - */ - Range.prototype._onDragStart = function(event) { - this.deltaDifference = 0; - this.previousDelta = 0; - // only allow dragging when configured as movable - if (!this.options.moveable) return; + // copy subscription functionality from DataSet + DataView.prototype.on = DataSet.prototype.on; + DataView.prototype.off = DataSet.prototype.off; + DataView.prototype._trigger = DataSet.prototype._trigger; - // refuse to drag when we where pinching to prevent the timeline make a jump - // when releasing the fingers in opposite order from the touch screen - if (!this.props.touch.allowDragging) return; + // TODO: make these functions deprecated (replaced with `on` and `off` since version 0.5) + DataView.prototype.subscribe = DataView.prototype.on; + DataView.prototype.unsubscribe = DataView.prototype.off; - this.props.touch.start = this.start; - this.props.touch.end = this.end; - this.props.touch.dragging = true; + module.exports = DataView; - if (this.body.dom.root) { - this.body.dom.root.style.cursor = 'move'; - } - }; +/***/ }, +/* 10 */ +/***/ function(module, exports, __webpack_require__) { + + var Emitter = __webpack_require__(11); + var DataSet = __webpack_require__(7); + var DataView = __webpack_require__(9); + var util = __webpack_require__(1); + var Point3d = __webpack_require__(12); + var Point2d = __webpack_require__(13); + var Camera = __webpack_require__(14); + var Filter = __webpack_require__(15); + var Slider = __webpack_require__(16); + var StepNumber = __webpack_require__(17); /** - * Perform dragging operation - * @param {Event} event - * @private + * @constructor Graph3d + * Graph3d displays data in 3d. + * + * Graph3d is developed in javascript as a Google Visualization Chart. + * + * @param {Element} container The DOM element in which the Graph3d will + * be created. Normally a div element. + * @param {DataSet | DataView | Array} [data] + * @param {Object} [options] */ - Range.prototype._onDrag = function (event) { - // only allow dragging when configured as movable - if (!this.options.moveable) return; - // refuse to drag when we where pinching to prevent the timeline make a jump - // when releasing the fingers in opposite order from the touch screen - if (!this.props.touch.allowDragging) return; + function Graph3d(container, data, options) { + if (!(this instanceof Graph3d)) { + throw new SyntaxError('Constructor must be called with the new operator'); + } - var direction = this.options.direction; - validateDirection(direction); + // create variables and set default values + this.containerElement = container; + this.width = '400px'; + this.height = '400px'; + this.margin = 10; // px + this.defaultXCenter = '55%'; + this.defaultYCenter = '50%'; - var delta = (direction == 'horizontal') ? event.gesture.deltaX : event.gesture.deltaY; - delta -= this.deltaDifference; - var interval = (this.props.touch.end - this.props.touch.start); + this.xLabel = 'x'; + this.yLabel = 'y'; + this.zLabel = 'z'; - // normalize dragging speed if cutout is in between. - var duration = DateUtil.getHiddenDurationBetween(this.body.hiddenDates, this.start, this.end); - interval -= duration; + var passValueFn = function(v) { return v; }; + this.xValueLabel = passValueFn; + this.yValueLabel = passValueFn; + this.zValueLabel = passValueFn; + + this.filterLabel = 'time'; + this.legendLabel = 'value'; - var width = (direction == 'horizontal') ? this.body.domProps.center.width : this.body.domProps.center.height; - var diffRange = -delta / width * interval; - var newStart = this.props.touch.start + diffRange; - var newEnd = this.props.touch.end + diffRange; + this.style = Graph3d.STYLE.DOT; + this.showPerspective = true; + this.showGrid = true; + this.keepAspectRatio = true; + this.showShadow = false; + this.showGrayBottom = false; // TODO: this does not work correctly + this.showTooltip = false; + this.verticalRatio = 0.5; // 0.1 to 1.0, where 1.0 results in a 'cube' + this.animationInterval = 1000; // milliseconds + this.animationPreload = false; - // snapping times away from hidden zones - var safeStart = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newStart, this.previousDelta-delta, true); - var safeEnd = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newEnd, this.previousDelta-delta, true); - if (safeStart != newStart || safeEnd != newEnd) { - this.deltaDifference += delta; - this.props.touch.start = safeStart; - this.props.touch.end = safeEnd; - this._onDrag(event); - return; - } + this.camera = new Camera(); + this.eye = new Point3d(0, 0, -1); // TODO: set eye.z about 3/4 of the width of the window? - this.previousDelta = delta; - this._applyRange(newStart, newEnd); + this.dataTable = null; // The original data table + this.dataPoints = null; // The table with point objects - // fire a rangechange event - this.body.emitter.emit('rangechange', { - start: new Date(this.start), - end: new Date(this.end) - }); - }; + // the column indexes + this.colX = undefined; + this.colY = undefined; + this.colZ = undefined; + this.colValue = undefined; + this.colFilter = undefined; - /** - * Stop dragging operation - * @param {event} event - * @private - */ - Range.prototype._onDragEnd = function (event) { - // only allow dragging when configured as movable - if (!this.options.moveable) return; + this.xMin = 0; + this.xStep = undefined; // auto by default + this.xMax = 1; + this.yMin = 0; + this.yStep = undefined; // auto by default + this.yMax = 1; + this.zMin = 0; + this.zStep = undefined; // auto by default + this.zMax = 1; + this.valueMin = 0; + this.valueMax = 1; + this.xBarWidth = 1; + this.yBarWidth = 1; + // TODO: customize axis range - // refuse to drag when we where pinching to prevent the timeline make a jump - // when releasing the fingers in opposite order from the touch screen - if (!this.props.touch.allowDragging) return; + // constants + this.colorAxis = '#4D4D4D'; + this.colorGrid = '#D3D3D3'; + this.colorDot = '#7DC1FF'; + this.colorDotBorder = '#3267D2'; - this.props.touch.dragging = false; - if (this.body.dom.root) { - this.body.dom.root.style.cursor = 'auto'; + // create a frame and canvas + this.create(); + + // apply options (also when undefined) + this.setOptions(options); + + // apply data + if (data) { + this.setData(data); } + } - // fire a rangechanged event - this.body.emitter.emit('rangechanged', { - start: new Date(this.start), - end: new Date(this.end) - }); - }; + // Extend Graph3d with an Emitter mixin + Emitter(Graph3d.prototype); /** - * Event handler for mouse wheel event, used to zoom - * Code from http://adomas.org/javascript-mouse-wheel/ - * @param {Event} event - * @private + * Calculate the scaling values, dependent on the range in x, y, and z direction */ - Range.prototype._onMouseWheel = function(event) { - // only allow zooming when configured as zoomable and moveable - if (!(this.options.zoomable && this.options.moveable)) return; - - // retrieve delta - var delta = 0; - if (event.wheelDelta) { /* IE/Opera. */ - delta = event.wheelDelta / 120; - } else if (event.detail) { /* Mozilla case. */ - // In Mozilla, sign of delta is different than in IE. - // Also, delta is multiple of 3. - delta = -event.detail / 3; - } - - // If delta is nonzero, handle it. - // Basically, delta is now positive if wheel was scrolled up, - // and negative, if wheel was scrolled down. - if (delta) { - // perform the zoom action. Delta is normally 1 or -1 + Graph3d.prototype._setScale = function() { + this.scale = new Point3d(1 / (this.xMax - this.xMin), + 1 / (this.yMax - this.yMin), + 1 / (this.zMax - this.zMin)); - // adjust a negative delta such that zooming in with delta 0.1 - // equals zooming out with a delta -0.1 - var scale; - if (delta < 0) { - scale = 1 - (delta / 5); + // keep aspect ration between x and y scale if desired + if (this.keepAspectRatio) { + if (this.scale.x < this.scale.y) { + //noinspection JSSuspiciousNameCombination + this.scale.y = this.scale.x; } else { - scale = 1 / (1 + (delta / 5)) ; + //noinspection JSSuspiciousNameCombination + this.scale.x = this.scale.y; } + } - // calculate center, the date to zoom around - var gesture = hammerUtil.fakeGesture(this, event), - pointer = getPointer(gesture.center, this.body.dom.center), - pointerDate = this._pointerToDate(pointer); + // scale the vertical axis + this.scale.z *= this.verticalRatio; + // TODO: can this be automated? verticalRatio? - this.zoom(scale, pointerDate, delta); - } + // determine scale for (optional) value + this.scale.value = 1 / (this.valueMax - this.valueMin); - // Prevent default actions caused by mouse wheel - // (else the page and timeline both zoom and scroll) - event.preventDefault(); + // position the camera arm + var xCenter = (this.xMax + this.xMin) / 2 * this.scale.x; + var yCenter = (this.yMax + this.yMin) / 2 * this.scale.y; + var zCenter = (this.zMax + this.zMin) / 2 * this.scale.z; + this.camera.setArmLocation(xCenter, yCenter, zCenter); }; + /** - * Start of a touch gesture - * @private + * Convert a 3D location to a 2D location on screen + * http://en.wikipedia.org/wiki/3D_projection + * @param {Point3d} point3d A 3D point with parameters x, y, z + * @return {Point2d} point2d A 2D point with parameters x, y */ - Range.prototype._onTouch = function (event) { - this.props.touch.start = this.start; - this.props.touch.end = this.end; - this.props.touch.allowDragging = true; - this.props.touch.center = null; - this.scaleOffset = 0; - this.deltaDifference = 0; + Graph3d.prototype._convert3Dto2D = function(point3d) { + var translation = this._convertPointToTranslation(point3d); + return this._convertTranslationToScreen(translation); }; /** - * On start of a hold gesture - * @private + * Convert a 3D location its translation seen from the camera + * http://en.wikipedia.org/wiki/3D_projection + * @param {Point3d} point3d A 3D point with parameters x, y, z + * @return {Point3d} translation A 3D point with parameters x, y, z This is + * the translation of the point, seen from the + * camera */ - Range.prototype._onHold = function () { - this.props.touch.allowDragging = false; + Graph3d.prototype._convertPointToTranslation = function(point3d) { + var ax = point3d.x * this.scale.x, + ay = point3d.y * this.scale.y, + az = point3d.z * this.scale.z, + + cx = this.camera.getCameraLocation().x, + cy = this.camera.getCameraLocation().y, + cz = this.camera.getCameraLocation().z, + + // calculate angles + sinTx = Math.sin(this.camera.getCameraRotation().x), + cosTx = Math.cos(this.camera.getCameraRotation().x), + sinTy = Math.sin(this.camera.getCameraRotation().y), + cosTy = Math.cos(this.camera.getCameraRotation().y), + sinTz = Math.sin(this.camera.getCameraRotation().z), + cosTz = Math.cos(this.camera.getCameraRotation().z), + + // calculate translation + dx = cosTy * (sinTz * (ay - cy) + cosTz * (ax - cx)) - sinTy * (az - cz), + dy = sinTx * (cosTy * (az - cz) + sinTy * (sinTz * (ay - cy) + cosTz * (ax - cx))) + cosTx * (cosTz * (ay - cy) - sinTz * (ax-cx)), + dz = cosTx * (cosTy * (az - cz) + sinTy * (sinTz * (ay - cy) + cosTz * (ax - cx))) - sinTx * (cosTz * (ay - cy) - sinTz * (ax-cx)); + + return new Point3d(dx, dy, dz); }; /** - * Handle pinch event - * @param {Event} event - * @private + * Convert a translation point to a point on the screen + * @param {Point3d} translation A 3D point with parameters x, y, z This is + * the translation of the point, seen from the + * camera + * @return {Point2d} point2d A 2D point with parameters x, y */ - Range.prototype._onPinch = function (event) { - // only allow zooming when configured as zoomable and moveable - if (!(this.options.zoomable && this.options.moveable)) return; - - this.props.touch.allowDragging = false; + Graph3d.prototype._convertTranslationToScreen = function(translation) { + var ex = this.eye.x, + ey = this.eye.y, + ez = this.eye.z, + dx = translation.x, + dy = translation.y, + dz = translation.z; - if (event.gesture.touches.length > 1) { - if (!this.props.touch.center) { - this.props.touch.center = getPointer(event.gesture.center, this.body.dom.center); - } + // calculate position on screen from translation + var bx; + var by; + if (this.showPerspective) { + bx = (dx - ex) * (ez / dz); + by = (dy - ey) * (ez / dz); + } + else { + bx = dx * -(ez / this.camera.getArmLength()); + by = dy * -(ez / this.camera.getArmLength()); + } - var scale = 1 / (event.gesture.scale + this.scaleOffset); - var centerDate = this._pointerToDate(this.props.touch.center); + // shift and scale the point to the center of the screen + // use the width of the graph to scale both horizontally and vertically. + return new Point2d( + this.xcenter + bx * this.frame.canvas.clientWidth, + this.ycenter - by * this.frame.canvas.clientWidth); + }; - var hiddenDuration = DateUtil.getHiddenDurationBetween(this.body.hiddenDates, this.start, this.end); - var hiddenDurationBefore = DateUtil.getHiddenDurationBefore(this.body.hiddenDates, this, centerDate); - var hiddenDurationAfter = hiddenDuration - hiddenDurationBefore; + /** + * Set the background styling for the graph + * @param {string | {fill: string, stroke: string, strokeWidth: string}} backgroundColor + */ + Graph3d.prototype._setBackgroundColor = function(backgroundColor) { + var fill = 'white'; + var stroke = 'gray'; + var strokeWidth = 1; - // calculate new start and end - var newStart = (centerDate - hiddenDurationBefore) + (this.props.touch.start - (centerDate - hiddenDurationBefore)) * scale; - var newEnd = (centerDate + hiddenDurationAfter) + (this.props.touch.end - (centerDate + hiddenDurationAfter)) * scale; + if (typeof(backgroundColor) === 'string') { + fill = backgroundColor; + stroke = 'none'; + strokeWidth = 0; + } + else if (typeof(backgroundColor) === 'object') { + if (backgroundColor.fill !== undefined) fill = backgroundColor.fill; + if (backgroundColor.stroke !== undefined) stroke = backgroundColor.stroke; + if (backgroundColor.strokeWidth !== undefined) strokeWidth = backgroundColor.strokeWidth; + } + else if (backgroundColor === undefined) { + // use use defaults + } + else { + throw 'Unsupported type of backgroundColor'; + } - // snapping times away from hidden zones - this.startToFront = 1 - scale > 0 ? false : true; // used to do the right autocorrection with periodic hidden times - this.endToFront = scale - 1 > 0 ? false : true; // used to do the right autocorrection with periodic hidden times + this.frame.style.backgroundColor = fill; + this.frame.style.borderColor = stroke; + this.frame.style.borderWidth = strokeWidth + 'px'; + this.frame.style.borderStyle = 'solid'; + }; - var safeStart = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newStart, 1 - scale, true); - var safeEnd = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newEnd, scale - 1, true); - if (safeStart != newStart || safeEnd != newEnd) { - this.props.touch.start = safeStart; - this.props.touch.end = safeEnd; - this.scaleOffset = 1 - event.gesture.scale; - newStart = safeStart; - newEnd = safeEnd; - } - this.setRange(newStart, newEnd); + /// enumerate the available styles + Graph3d.STYLE = { + BAR: 0, + BARCOLOR: 1, + BARSIZE: 2, + DOT : 3, + DOTLINE : 4, + DOTCOLOR: 5, + DOTSIZE: 6, + GRID : 7, + LINE: 8, + SURFACE : 9 + }; - this.startToFront = false; // revert to default - this.endToFront = true; // revert to default + /** + * Retrieve the style index from given styleName + * @param {string} styleName Style name such as 'dot', 'grid', 'dot-line' + * @return {Number} styleNumber Enumeration value representing the style, or -1 + * when not found + */ + Graph3d.prototype._getStyleNumber = function(styleName) { + switch (styleName) { + case 'dot': return Graph3d.STYLE.DOT; + case 'dot-line': return Graph3d.STYLE.DOTLINE; + case 'dot-color': return Graph3d.STYLE.DOTCOLOR; + case 'dot-size': return Graph3d.STYLE.DOTSIZE; + case 'line': return Graph3d.STYLE.LINE; + case 'grid': return Graph3d.STYLE.GRID; + case 'surface': return Graph3d.STYLE.SURFACE; + case 'bar': return Graph3d.STYLE.BAR; + case 'bar-color': return Graph3d.STYLE.BARCOLOR; + case 'bar-size': return Graph3d.STYLE.BARSIZE; } + + return -1; }; /** - * Helper function to calculate the center date for zooming - * @param {{x: Number, y: Number}} pointer - * @return {number} date - * @private + * Determine the indexes of the data columns, based on the given style and data + * @param {DataSet} data + * @param {Number} style */ - Range.prototype._pointerToDate = function (pointer) { - var conversion; - var direction = this.options.direction; + Graph3d.prototype._determineColumnIndexes = function(data, style) { + if (this.style === Graph3d.STYLE.DOT || + this.style === Graph3d.STYLE.DOTLINE || + this.style === Graph3d.STYLE.LINE || + this.style === Graph3d.STYLE.GRID || + this.style === Graph3d.STYLE.SURFACE || + this.style === Graph3d.STYLE.BAR) { + // 3 columns expected, and optionally a 4th with filter values + this.colX = 0; + this.colY = 1; + this.colZ = 2; + this.colValue = undefined; - validateDirection(direction); + if (data.getNumberOfColumns() > 3) { + this.colFilter = 3; + } + } + else if (this.style === Graph3d.STYLE.DOTCOLOR || + this.style === Graph3d.STYLE.DOTSIZE || + this.style === Graph3d.STYLE.BARCOLOR || + this.style === Graph3d.STYLE.BARSIZE) { + // 4 columns expected, and optionally a 5th with filter values + this.colX = 0; + this.colY = 1; + this.colZ = 2; + this.colValue = 3; - if (direction == 'horizontal') { - return this.body.util.toTime(pointer.x).valueOf(); + if (data.getNumberOfColumns() > 4) { + this.colFilter = 4; + } } else { - var height = this.body.domProps.center.height; - conversion = this.conversion(height); - return pointer.y / conversion.scale + conversion.offset; + throw 'Unknown style "' + this.style + '"'; + } + }; + + Graph3d.prototype.getNumberOfRows = function(data) { + return data.length; + } + + + Graph3d.prototype.getNumberOfColumns = function(data) { + var counter = 0; + for (var column in data[0]) { + if (data[0].hasOwnProperty(column)) { + counter++; + } + } + return counter; + } + + + Graph3d.prototype.getDistinctValues = function(data, column) { + var distinctValues = []; + for (var i = 0; i < data.length; i++) { + if (distinctValues.indexOf(data[i][column]) == -1) { + distinctValues.push(data[i][column]); + } + } + return distinctValues; + } + + + Graph3d.prototype.getColumnRange = function(data,column) { + var minMax = {min:data[0][column],max:data[0][column]}; + for (var i = 0; i < data.length; i++) { + if (minMax.min > data[i][column]) { minMax.min = data[i][column]; } + if (minMax.max < data[i][column]) { minMax.max = data[i][column]; } } + return minMax; }; /** - * Get the pointer location relative to the location of the dom element - * @param {{pageX: Number, pageY: Number}} touch - * @param {Element} element HTML DOM element - * @return {{x: Number, y: Number}} pointer - * @private + * Initialize the data from the data table. Calculate minimum and maximum values + * and column index values + * @param {Array | DataSet | DataView} rawData The data containing the items for the Graph. + * @param {Number} style Style Number */ - function getPointer (touch, element) { - return { - x: touch.pageX - util.getAbsoluteLeft(element), - y: touch.pageY - util.getAbsoluteTop(element) - }; - } + Graph3d.prototype._dataInitialize = function (rawData, style) { + var me = this; - /** - * Zoom the range the given scale in or out. Start and end date will - * be adjusted, and the timeline will be redrawn. You can optionally give a - * date around which to zoom. - * For example, try scale = 0.9 or 1.1 - * @param {Number} scale Scaling factor. Values above 1 will zoom out, - * values below 1 will zoom in. - * @param {Number} [center] Value representing a date around which will - * be zoomed. - */ - Range.prototype.zoom = function(scale, center, delta) { - // if centerDate is not provided, take it half between start Date and end Date - if (center == null) { - center = (this.start + this.end) / 2; + // unsubscribe from the dataTable + if (this.dataSet) { + this.dataSet.off('*', this._onChange); } - var hiddenDuration = DateUtil.getHiddenDurationBetween(this.body.hiddenDates, this.start, this.end); - var hiddenDurationBefore = DateUtil.getHiddenDurationBefore(this.body.hiddenDates, this, center); - var hiddenDurationAfter = hiddenDuration - hiddenDurationBefore; + if (rawData === undefined) + return; - // calculate new start and end - var newStart = (center-hiddenDurationBefore) + (this.start - (center-hiddenDurationBefore)) * scale; - var newEnd = (center+hiddenDurationAfter) + (this.end - (center+hiddenDurationAfter)) * scale; + if (Array.isArray(rawData)) { + rawData = new DataSet(rawData); + } - // snapping times away from hidden zones - this.startToFront = delta > 0 ? false : true; // used to do the right autocorrection with periodic hidden times - this.endToFront = -delta > 0 ? false : true; // used to do the right autocorrection with periodic hidden times - var safeStart = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newStart, delta, true); - var safeEnd = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newEnd, -delta, true); - if (safeStart != newStart || safeEnd != newEnd) { - newStart = safeStart; - newEnd = safeEnd; + var data; + if (rawData instanceof DataSet || rawData instanceof DataView) { + data = rawData.get(); + } + else { + throw new Error('Array, DataSet, or DataView expected'); } - this.setRange(newStart, newEnd); + if (data.length == 0) + return; - this.startToFront = false; // revert to default - this.endToFront = true; // revert to default - }; + this.dataSet = rawData; + this.dataTable = data; + // subscribe to changes in the dataset + this._onChange = function () { + me.setData(me.dataSet); + }; + this.dataSet.on('*', this._onChange); + // _determineColumnIndexes + // getNumberOfRows (points) + // getNumberOfColumns (x,y,z,v,t,t1,t2...) + // getDistinctValues (unique values?) + // getColumnRange - /** - * Move the range with a given delta to the left or right. Start and end - * value will be adjusted. For example, try delta = 0.1 or -0.1 - * @param {Number} delta Moving amount. Positive value will move right, - * negative value will move left - */ - Range.prototype.move = function(delta) { - // zoom start Date and end Date relative to the centerDate - var diff = (this.end - this.start); + // determine the location of x,y,z,value,filter columns + this.colX = 'x'; + this.colY = 'y'; + this.colZ = 'z'; + this.colValue = 'style'; + this.colFilter = 'filter'; - // apply new values - var newStart = this.start + diff * delta; - var newEnd = this.end + diff * delta; - // TODO: reckon with min and max range - this.start = newStart; - this.end = newEnd; - }; + // check if a filter column is provided + if (data[0].hasOwnProperty('filter')) { + if (this.dataFilter === undefined) { + this.dataFilter = new Filter(rawData, this.colFilter, this); + this.dataFilter.setOnLoadCallback(function() {me.redraw();}); + } + } - /** - * Move the range to a new center point - * @param {Number} moveTo New center point of the range - */ - Range.prototype.moveTo = function(moveTo) { - var center = (this.start + this.end) / 2; - var diff = center - moveTo; + var withBars = this.style == Graph3d.STYLE.BAR || + this.style == Graph3d.STYLE.BARCOLOR || + this.style == Graph3d.STYLE.BARSIZE; - // calculate new start and end - var newStart = this.start - diff; - var newEnd = this.end - diff; + // determine barWidth from data + if (withBars) { + if (this.defaultXBarWidth !== undefined) { + this.xBarWidth = this.defaultXBarWidth; + } + else { + var dataX = this.getDistinctValues(data,this.colX); + this.xBarWidth = (dataX[1] - dataX[0]) || 1; + } - this.setRange(newStart, newEnd); - }; + if (this.defaultYBarWidth !== undefined) { + this.yBarWidth = this.defaultYBarWidth; + } + else { + var dataY = this.getDistinctValues(data,this.colY); + this.yBarWidth = (dataY[1] - dataY[0]) || 1; + } + } - module.exports = Range; + // calculate minimums and maximums + var xRange = this.getColumnRange(data,this.colX); + if (withBars) { + xRange.min -= this.xBarWidth / 2; + xRange.max += this.xBarWidth / 2; + } + this.xMin = (this.defaultXMin !== undefined) ? this.defaultXMin : xRange.min; + this.xMax = (this.defaultXMax !== undefined) ? this.defaultXMax : xRange.max; + if (this.xMax <= this.xMin) this.xMax = this.xMin + 1; + this.xStep = (this.defaultXStep !== undefined) ? this.defaultXStep : (this.xMax-this.xMin)/5; + var yRange = this.getColumnRange(data,this.colY); + if (withBars) { + yRange.min -= this.yBarWidth / 2; + yRange.max += this.yBarWidth / 2; + } + this.yMin = (this.defaultYMin !== undefined) ? this.defaultYMin : yRange.min; + this.yMax = (this.defaultYMax !== undefined) ? this.defaultYMax : yRange.max; + if (this.yMax <= this.yMin) this.yMax = this.yMin + 1; + this.yStep = (this.defaultYStep !== undefined) ? this.defaultYStep : (this.yMax-this.yMin)/5; -/***/ }, -/* 18 */ -/***/ function(module, exports, __webpack_require__) { + var zRange = this.getColumnRange(data,this.colZ); + this.zMin = (this.defaultZMin !== undefined) ? this.defaultZMin : zRange.min; + this.zMax = (this.defaultZMax !== undefined) ? this.defaultZMax : zRange.max; + if (this.zMax <= this.zMin) this.zMax = this.zMin + 1; + this.zStep = (this.defaultZStep !== undefined) ? this.defaultZStep : (this.zMax-this.zMin)/5; - // Utility functions for ordering and stacking of items - var EPSILON = 0.001; // used when checking collisions, to prevent round-off errors + if (this.colValue !== undefined) { + var valueRange = this.getColumnRange(data,this.colValue); + this.valueMin = (this.defaultValueMin !== undefined) ? this.defaultValueMin : valueRange.min; + this.valueMax = (this.defaultValueMax !== undefined) ? this.defaultValueMax : valueRange.max; + if (this.valueMax <= this.valueMin) this.valueMax = this.valueMin + 1; + } - /** - * Order items by their start data - * @param {Item[]} items - */ - exports.orderByStart = function(items) { - items.sort(function (a, b) { - return a.data.start - b.data.start; - }); + // set the scale dependent on the ranges. + this._setScale(); }; - /** - * Order items by their end date. If they have no end date, their start date - * is used. - * @param {Item[]} items - */ - exports.orderByEnd = function(items) { - items.sort(function (a, b) { - var aTime = ('end' in a.data) ? a.data.end : a.data.start, - bTime = ('end' in b.data) ? b.data.end : b.data.start; - return aTime - bTime; - }); - }; /** - * Adjust vertical positions of the items such that they don't overlap each - * other. - * @param {Item[]} items - * All visible items - * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin - * Margins between items and between items and the axis. - * @param {boolean} [force=false] - * If true, all items will be repositioned. If false (default), only - * items having a top===null will be re-stacked + * Filter the data based on the current filter + * @param {Array} data + * @return {Array} dataPoints Array with point objects which can be drawn on screen */ - exports.stack = function(items, margin, force) { - var i, iMax; + Graph3d.prototype._getDataPoints = function (data) { + // TODO: store the created matrix dataPoints in the filters instead of reloading each time + var x, y, i, z, obj, point; - if (force) { - // reset top position of all items - for (i = 0, iMax = items.length; i < iMax; i++) { - items[i].top = null; - } - } + var dataPoints = []; - // calculate new, non-overlapping positions - for (i = 0, iMax = items.length; i < iMax; i++) { - var item = items[i]; - if (item.stack && item.top === null) { - // initialize top position - item.top = margin.axis; + if (this.style === Graph3d.STYLE.GRID || + this.style === Graph3d.STYLE.SURFACE) { + // copy all values from the google data table to a matrix + // the provided values are supposed to form a grid of (x,y) positions - do { - // TODO: optimize checking for overlap. when there is a gap without items, - // you only need to check for items from the next item on, not from zero - var collidingItem = null; - for (var j = 0, jj = items.length; j < jj; j++) { - var other = items[j]; - if (other.top !== null && other !== item && other.stack && exports.collision(item, other, margin.item)) { - collidingItem = other; - break; - } - } + // create two lists with all present x and y values + var dataX = []; + var dataY = []; + for (i = 0; i < this.getNumberOfRows(data); i++) { + x = data[i][this.colX] || 0; + y = data[i][this.colY] || 0; - if (collidingItem != null) { - // There is a collision. Reposition the items above the colliding element - item.top = collidingItem.top + collidingItem.height + margin.item.vertical; - } - } while (collidingItem); + if (dataX.indexOf(x) === -1) { + dataX.push(x); + } + if (dataY.indexOf(y) === -1) { + dataY.push(y); + } } - } - }; + var sortNumber = function (a, b) { + return a - b; + }; + dataX.sort(sortNumber); + dataY.sort(sortNumber); - /** - * Adjust vertical positions of the items without stacking them - * @param {Item[]} items - * All visible items - * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin - * Margins between items and between items and the axis. - */ - exports.nostack = function(items, margin, subgroups) { - var i, iMax, newTop; + // create a grid, a 2d matrix, with all values. + var dataMatrix = []; // temporary data matrix + for (i = 0; i < data.length; i++) { + x = data[i][this.colX] || 0; + y = data[i][this.colY] || 0; + z = data[i][this.colZ] || 0; - // reset top position of all items - for (i = 0, iMax = items.length; i < iMax; i++) { - if (items[i].data.subgroup !== undefined) { - newTop = margin.axis; - for (var subgroup in subgroups) { - if (subgroups.hasOwnProperty(subgroup)) { - if (subgroups[subgroup].visible == true && subgroups[subgroup].index < subgroups[items[i].data.subgroup].index) { - newTop += subgroups[subgroup].height + margin.item.vertical; - } - } + var xIndex = dataX.indexOf(x); // TODO: implement Array().indexOf() for Internet Explorer + var yIndex = dataY.indexOf(y); + + if (dataMatrix[xIndex] === undefined) { + dataMatrix[xIndex] = []; } - items[i].top = newTop; + + var point3d = new Point3d(); + point3d.x = x; + point3d.y = y; + point3d.z = z; + + obj = {}; + obj.point = point3d; + obj.trans = undefined; + obj.screen = undefined; + obj.bottom = new Point3d(x, y, this.zMin); + + dataMatrix[xIndex][yIndex] = obj; + + dataPoints.push(obj); } - else { - items[i].top = margin.axis; + + // fill in the pointers to the neighbors. + for (x = 0; x < dataMatrix.length; x++) { + for (y = 0; y < dataMatrix[x].length; y++) { + if (dataMatrix[x][y]) { + dataMatrix[x][y].pointRight = (x < dataMatrix.length-1) ? dataMatrix[x+1][y] : undefined; + dataMatrix[x][y].pointTop = (y < dataMatrix[x].length-1) ? dataMatrix[x][y+1] : undefined; + dataMatrix[x][y].pointCross = + (x < dataMatrix.length-1 && y < dataMatrix[x].length-1) ? + dataMatrix[x+1][y+1] : + undefined; + } + } } } - }; + else { // 'dot', 'dot-line', etc. + // copy all values from the google data table to a list with Point3d objects + for (i = 0; i < data.length; i++) { + point = new Point3d(); + point.x = data[i][this.colX] || 0; + point.y = data[i][this.colY] || 0; + point.z = data[i][this.colZ] || 0; - /** - * Test if the two provided items collide - * The items must have parameters left, width, top, and height. - * @param {Item} a The first item - * @param {Item} b The second item - * @param {{horizontal: number, vertical: number}} margin - * An object containing a horizontal and vertical - * minimum required margin. - * @return {boolean} true if a and b collide, else false - */ - exports.collision = function(a, b, margin) { - return ((a.left - margin.horizontal + EPSILON) < (b.left + b.width) && - (a.left + a.width + margin.horizontal - EPSILON) > b.left && - (a.top - margin.vertical + EPSILON) < (b.top + b.height) && - (a.top + a.height + margin.vertical - EPSILON) > b.top); - }; + if (this.colValue !== undefined) { + point.value = data[i][this.colValue] || 0; + } + obj = {}; + obj.point = point; + obj.bottom = new Point3d(point.x, point.y, this.zMin); + obj.trans = undefined; + obj.screen = undefined; -/***/ }, -/* 19 */ -/***/ function(module, exports, __webpack_require__) { + dataPoints.push(obj); + } + } - var moment = __webpack_require__(44); - var DateUtil = __webpack_require__(15); - var util = __webpack_require__(1); + return dataPoints; + }; /** - * @constructor TimeStep - * The class TimeStep is an iterator for dates. You provide a start date and an - * end date. The class itself determines the best scale (step size) based on the - * provided start Date, end Date, and minimumStep. - * - * If minimumStep is provided, the step size is chosen as close as possible - * to the minimumStep but larger than minimumStep. If minimumStep is not - * provided, the scale is set to 1 DAY. - * The minimumStep should correspond with the onscreen size of about 6 characters - * - * Alternatively, you can set a scale by hand. - * After creation, you can initialize the class by executing first(). Then you - * can iterate from the start date to the end date via next(). You can check if - * the end date is reached with the function hasNext(). After each step, you can - * retrieve the current date via getCurrent(). - * The TimeStep has scales ranging from milliseconds, seconds, minutes, hours, - * days, to years. - * - * Version: 1.2 - * - * @param {Date} [start] The start date, for example new Date(2010, 9, 21) - * or new Date(2010, 9, 21, 23, 45, 00) - * @param {Date} [end] The end date - * @param {Number} [minimumStep] Optional. Minimum step size in milliseconds + * Create the main frame for the Graph3d. + * This function is executed once when a Graph3d object is created. The frame + * contains a canvas, and this canvas contains all objects like the axis and + * nodes. */ - function TimeStep(start, end, minimumStep, hiddenDates) { - // variables - this.current = new Date(); - this._start = new Date(); - this._end = new Date(); - - this.autoScale = true; - this.scale = 'day'; - this.step = 1; + Graph3d.prototype.create = function () { + // remove all elements from the container element. + while (this.containerElement.hasChildNodes()) { + this.containerElement.removeChild(this.containerElement.firstChild); + } - // initialize the range - this.setRange(start, end, minimumStep); + this.frame = document.createElement('div'); + this.frame.style.position = 'relative'; + this.frame.style.overflow = 'hidden'; - // hidden Dates options - this.switchedDay = false; - this.switchedMonth = false; - this.switchedYear = false; - this.hiddenDates = hiddenDates; - if (hiddenDates === undefined) { - this.hiddenDates = []; + // create the graph canvas (HTML canvas element) + this.frame.canvas = document.createElement( 'canvas' ); + this.frame.canvas.style.position = 'relative'; + this.frame.appendChild(this.frame.canvas); + //if (!this.frame.canvas.getContext) { + { + var noCanvas = document.createElement( 'DIV' ); + noCanvas.style.color = 'red'; + noCanvas.style.fontWeight = 'bold' ; + noCanvas.style.padding = '10px'; + noCanvas.innerHTML = 'Error: your browser does not support HTML canvas'; + this.frame.canvas.appendChild(noCanvas); } - this.format = TimeStep.FORMAT; // default formatting - } + this.frame.filter = document.createElement( 'div' ); + this.frame.filter.style.position = 'absolute'; + this.frame.filter.style.bottom = '0px'; + this.frame.filter.style.left = '0px'; + this.frame.filter.style.width = '100%'; + this.frame.appendChild(this.frame.filter); - // Time formatting - TimeStep.FORMAT = { - minorLabels: { - millisecond:'SSS', - second: 's', - minute: 'HH:mm', - hour: 'HH:mm', - weekday: 'ddd D', - day: 'D', - month: 'MMM', - year: 'YYYY' - }, - majorLabels: { - millisecond:'HH:mm:ss', - second: 'D MMMM HH:mm', - minute: 'ddd D MMMM', - hour: 'ddd D MMMM', - weekday: 'MMMM YYYY', - day: 'MMMM YYYY', - month: 'YYYY', - year: '' - } - }; + // add event listeners to handle moving and zooming the contents + var me = this; + var onmousedown = function (event) {me._onMouseDown(event);}; + var ontouchstart = function (event) {me._onTouchStart(event);}; + var onmousewheel = function (event) {me._onWheel(event);}; + var ontooltip = function (event) {me._onTooltip(event);}; + // TODO: these events are never cleaned up... can give a 'memory leakage' - /** - * Set custom formatting for the minor an major labels of the TimeStep. - * Both `minorLabels` and `majorLabels` are an Object with properties: - * 'millisecond, 'second, 'minute', 'hour', 'weekday, 'day, 'month, 'year'. - * @param {{minorLabels: Object, majorLabels: Object}} format - */ - TimeStep.prototype.setFormat = function (format) { - var defaultFormat = util.deepExtend({}, TimeStep.FORMAT); - this.format = util.deepExtend(defaultFormat, format); + util.addEventListener(this.frame.canvas, 'keydown', onkeydown); + util.addEventListener(this.frame.canvas, 'mousedown', onmousedown); + util.addEventListener(this.frame.canvas, 'touchstart', ontouchstart); + util.addEventListener(this.frame.canvas, 'mousewheel', onmousewheel); + util.addEventListener(this.frame.canvas, 'mousemove', ontooltip); + + // add the new graph to the container element + this.containerElement.appendChild(this.frame); }; - /** - * Set a new range - * If minimumStep is provided, the step size is chosen as close as possible - * to the minimumStep but larger than minimumStep. If minimumStep is not - * provided, the scale is set to 1 DAY. - * The minimumStep should correspond with the onscreen size of about 6 characters - * @param {Date} [start] The start date and time. - * @param {Date} [end] The end date and time. - * @param {int} [minimumStep] Optional. Minimum step size in milliseconds - */ - TimeStep.prototype.setRange = function(start, end, minimumStep) { - if (!(start instanceof Date) || !(end instanceof Date)) { - throw "No legal start or end date in method setRange"; - } - this._start = (start != undefined) ? new Date(start.valueOf()) : new Date(); - this._end = (end != undefined) ? new Date(end.valueOf()) : new Date(); + /** + * Set a new size for the graph + * @param {string} width Width in pixels or percentage (for example '800px' + * or '50%') + * @param {string} height Height in pixels or percentage (for example '400px' + * or '30%') + */ + Graph3d.prototype.setSize = function(width, height) { + this.frame.style.width = width; + this.frame.style.height = height; - if (this.autoScale) { - this.setMinimumStep(minimumStep); - } + this._resizeCanvas(); }; /** - * Set the range iterator to the start date. + * Resize the canvas to the current size of the frame */ - TimeStep.prototype.first = function() { - this.current = new Date(this._start.valueOf()); - this.roundToMinor(); + Graph3d.prototype._resizeCanvas = function() { + this.frame.canvas.style.width = '100%'; + this.frame.canvas.style.height = '100%'; + + this.frame.canvas.width = this.frame.canvas.clientWidth; + this.frame.canvas.height = this.frame.canvas.clientHeight; + + // adjust with for margin + this.frame.filter.style.width = (this.frame.canvas.clientWidth - 2 * 10) + 'px'; }; /** - * Round the current date to the first minor date value - * This must be executed once when the current date is set to start Date + * Start animation */ - TimeStep.prototype.roundToMinor = function() { - // round to floor - // IMPORTANT: we have no breaks in this switch! (this is no bug) - //noinspection FallthroughInSwitchStatementJS - switch (this.scale) { - case 'year': - this.current.setFullYear(this.step * Math.floor(this.current.getFullYear() / this.step)); - this.current.setMonth(0); - case 'month': this.current.setDate(1); - case 'day': // intentional fall through - case 'weekday': this.current.setHours(0); - case 'hour': this.current.setMinutes(0); - case 'minute': this.current.setSeconds(0); - case 'second': this.current.setMilliseconds(0); - //case 'millisecond': // nothing to do for milliseconds - } + Graph3d.prototype.animationStart = function() { + if (!this.frame.filter || !this.frame.filter.slider) + throw 'No animation available'; - if (this.step != 1) { - // round down to the first minor value that is a multiple of the current step size - switch (this.scale) { - case 'millisecond': this.current.setMilliseconds(this.current.getMilliseconds() - this.current.getMilliseconds() % this.step); break; - case 'second': this.current.setSeconds(this.current.getSeconds() - this.current.getSeconds() % this.step); break; - case 'minute': this.current.setMinutes(this.current.getMinutes() - this.current.getMinutes() % this.step); break; - case 'hour': this.current.setHours(this.current.getHours() - this.current.getHours() % this.step); break; - case 'weekday': // intentional fall through - case 'day': this.current.setDate((this.current.getDate()-1) - (this.current.getDate()-1) % this.step + 1); break; - case 'month': this.current.setMonth(this.current.getMonth() - this.current.getMonth() % this.step); break; - case 'year': this.current.setFullYear(this.current.getFullYear() - this.current.getFullYear() % this.step); break; - default: break; - } - } + this.frame.filter.slider.play(); }; + /** - * Check if the there is a next step - * @return {boolean} true if the current date has not passed the end date + * Stop animation */ - TimeStep.prototype.hasNext = function () { - return (this.current.valueOf() <= this._end.valueOf()); + Graph3d.prototype.animationStop = function() { + if (!this.frame.filter || !this.frame.filter.slider) return; + + this.frame.filter.slider.stop(); }; + /** - * Do the next step + * Resize the center position based on the current values in this.defaultXCenter + * and this.defaultYCenter (which are strings with a percentage or a value + * in pixels). The center positions are the variables this.xCenter + * and this.yCenter */ - TimeStep.prototype.next = function() { - var prev = this.current.valueOf(); - - // Two cases, needed to prevent issues with switching daylight savings - // (end of March and end of October) - if (this.current.getMonth() < 6) { - switch (this.scale) { - case 'millisecond': + Graph3d.prototype._resizeCenter = function() { + // calculate the horizontal center position + if (this.defaultXCenter.charAt(this.defaultXCenter.length-1) === '%') { + this.xcenter = + parseFloat(this.defaultXCenter) / 100 * + this.frame.canvas.clientWidth; + } + else { + this.xcenter = parseFloat(this.defaultXCenter); // supposed to be in px + } - this.current = new Date(this.current.valueOf() + this.step); break; - case 'second': this.current = new Date(this.current.valueOf() + this.step * 1000); break; - case 'minute': this.current = new Date(this.current.valueOf() + this.step * 1000 * 60); break; - case 'hour': - this.current = new Date(this.current.valueOf() + this.step * 1000 * 60 * 60); - // in case of skipping an hour for daylight savings, adjust the hour again (else you get: 0h 5h 9h ... instead of 0h 4h 8h ...) - var h = this.current.getHours(); - this.current.setHours(h - (h % this.step)); - break; - case 'weekday': // intentional fall through - case 'day': this.current.setDate(this.current.getDate() + this.step); break; - case 'month': this.current.setMonth(this.current.getMonth() + this.step); break; - case 'year': this.current.setFullYear(this.current.getFullYear() + this.step); break; - default: break; - } + // calculate the vertical center position + if (this.defaultYCenter.charAt(this.defaultYCenter.length-1) === '%') { + this.ycenter = + parseFloat(this.defaultYCenter) / 100 * + (this.frame.canvas.clientHeight - this.frame.filter.clientHeight); } else { - switch (this.scale) { - case 'millisecond': this.current = new Date(this.current.valueOf() + this.step); break; - case 'second': this.current.setSeconds(this.current.getSeconds() + this.step); break; - case 'minute': this.current.setMinutes(this.current.getMinutes() + this.step); break; - case 'hour': this.current.setHours(this.current.getHours() + this.step); break; - case 'weekday': // intentional fall through - case 'day': this.current.setDate(this.current.getDate() + this.step); break; - case 'month': this.current.setMonth(this.current.getMonth() + this.step); break; - case 'year': this.current.setFullYear(this.current.getFullYear() + this.step); break; - default: break; - } + this.ycenter = parseFloat(this.defaultYCenter); // supposed to be in px } + }; - if (this.step != 1) { - // round down to the correct major value - switch (this.scale) { - case 'millisecond': if(this.current.getMilliseconds() < this.step) this.current.setMilliseconds(0); break; - case 'second': if(this.current.getSeconds() < this.step) this.current.setSeconds(0); break; - case 'minute': if(this.current.getMinutes() < this.step) this.current.setMinutes(0); break; - case 'hour': if(this.current.getHours() < this.step) this.current.setHours(0); break; - case 'weekday': // intentional fall through - case 'day': if(this.current.getDate() < this.step+1) this.current.setDate(1); break; - case 'month': if(this.current.getMonth() < this.step) this.current.setMonth(0); break; - case 'year': break; // nothing to do for year - default: break; - } + /** + * Set the rotation and distance of the camera + * @param {Object} pos An object with the camera position. The object + * contains three parameters: + * - horizontal {Number} + * The horizontal rotation, between 0 and 2*PI. + * Optional, can be left undefined. + * - vertical {Number} + * The vertical rotation, between 0 and 0.5*PI + * if vertical=0.5*PI, the graph is shown from the + * top. Optional, can be left undefined. + * - distance {Number} + * The (normalized) distance of the camera to the + * center of the graph, a value between 0.71 and 5.0. + * Optional, can be left undefined. + */ + Graph3d.prototype.setCameraPosition = function(pos) { + if (pos === undefined) { + return; } - // safety mechanism: if current time is still unchanged, move to the end - if (this.current.valueOf() == prev) { - this.current = new Date(this._end.valueOf()); + if (pos.horizontal !== undefined && pos.vertical !== undefined) { + this.camera.setArmRotation(pos.horizontal, pos.vertical); } - DateUtil.stepOverHiddenDates(this, prev); + if (pos.distance !== undefined) { + this.camera.setArmLength(pos.distance); + } + + this.redraw(); }; /** - * Get the current datetime - * @return {Date} current The current date + * Retrieve the current camera rotation + * @return {object} An object with parameters horizontal, vertical, and + * distance */ - TimeStep.prototype.getCurrent = function() { - return this.current; + Graph3d.prototype.getCameraPosition = function() { + var pos = this.camera.getArmRotation(); + pos.distance = this.camera.getArmLength(); + return pos; }; /** - * Set a custom scale. Autoscaling will be disabled. - * For example setScale(SCALE.MINUTES, 5) will result - * in minor steps of 5 minutes, and major steps of an hour. - * - * @param {string} newScale - * A scale. Choose from 'millisecond, 'second, - * 'minute', 'hour', 'weekday, 'day, 'month, 'year'. - * @param {Number} newStep A step size, by default 1. Choose for - * example 1, 2, 5, or 10. + * Load data into the 3D Graph */ - TimeStep.prototype.setScale = function(newScale, newStep) { - this.scale = newScale; + Graph3d.prototype._readData = function(data) { + // read the data + this._dataInitialize(data, this.style); - if (newStep > 0) { - this.step = newStep; + + if (this.dataFilter) { + // apply filtering + this.dataPoints = this.dataFilter._getDataPoints(); + } + else { + // no filtering. load all data + this.dataPoints = this._getDataPoints(this.dataTable); } - this.autoScale = false; + // draw the filter + this._redrawFilter(); }; /** - * Enable or disable autoscaling - * @param {boolean} enable If true, autoascaling is set true + * Replace the dataset of the Graph3d + * @param {Array | DataSet | DataView} data */ - TimeStep.prototype.setAutoScale = function (enable) { - this.autoScale = enable; - }; + Graph3d.prototype.setData = function (data) { + this._readData(data); + this.redraw(); + // start animation when option is true + if (this.animationAutoStart && this.dataFilter) { + this.animationStart(); + } + }; /** - * Automatically determine the scale that bests fits the provided minimum step - * @param {Number} [minimumStep] The minimum step size in milliseconds + * Update the options. Options will be merged with current options + * @param {Object} options */ - TimeStep.prototype.setMinimumStep = function(minimumStep) { - if (minimumStep == undefined) { - return; - } + Graph3d.prototype.setOptions = function (options) { + var cameraPosition = undefined; - //var b = asc + ds; + this.animationStop(); - var stepYear = (1000 * 60 * 60 * 24 * 30 * 12); - var stepMonth = (1000 * 60 * 60 * 24 * 30); - var stepDay = (1000 * 60 * 60 * 24); - var stepHour = (1000 * 60 * 60); - var stepMinute = (1000 * 60); - var stepSecond = (1000); - var stepMillisecond= (1); + if (options !== undefined) { + // retrieve parameter values + if (options.width !== undefined) this.width = options.width; + if (options.height !== undefined) this.height = options.height; - // find the smallest step that is larger than the provided minimumStep - if (stepYear*1000 > minimumStep) {this.scale = 'year'; this.step = 1000;} - if (stepYear*500 > minimumStep) {this.scale = 'year'; this.step = 500;} - if (stepYear*100 > minimumStep) {this.scale = 'year'; this.step = 100;} - if (stepYear*50 > minimumStep) {this.scale = 'year'; this.step = 50;} - if (stepYear*10 > minimumStep) {this.scale = 'year'; this.step = 10;} - if (stepYear*5 > minimumStep) {this.scale = 'year'; this.step = 5;} - if (stepYear > minimumStep) {this.scale = 'year'; this.step = 1;} - if (stepMonth*3 > minimumStep) {this.scale = 'month'; this.step = 3;} - if (stepMonth > minimumStep) {this.scale = 'month'; this.step = 1;} - if (stepDay*5 > minimumStep) {this.scale = 'day'; this.step = 5;} - if (stepDay*2 > minimumStep) {this.scale = 'day'; this.step = 2;} - if (stepDay > minimumStep) {this.scale = 'day'; this.step = 1;} - if (stepDay/2 > minimumStep) {this.scale = 'weekday'; this.step = 1;} - if (stepHour*4 > minimumStep) {this.scale = 'hour'; this.step = 4;} - if (stepHour > minimumStep) {this.scale = 'hour'; this.step = 1;} - if (stepMinute*15 > minimumStep) {this.scale = 'minute'; this.step = 15;} - if (stepMinute*10 > minimumStep) {this.scale = 'minute'; this.step = 10;} - if (stepMinute*5 > minimumStep) {this.scale = 'minute'; this.step = 5;} - if (stepMinute > minimumStep) {this.scale = 'minute'; this.step = 1;} - if (stepSecond*15 > minimumStep) {this.scale = 'second'; this.step = 15;} - if (stepSecond*10 > minimumStep) {this.scale = 'second'; this.step = 10;} - if (stepSecond*5 > minimumStep) {this.scale = 'second'; this.step = 5;} - if (stepSecond > minimumStep) {this.scale = 'second'; this.step = 1;} - if (stepMillisecond*200 > minimumStep) {this.scale = 'millisecond'; this.step = 200;} - if (stepMillisecond*100 > minimumStep) {this.scale = 'millisecond'; this.step = 100;} - if (stepMillisecond*50 > minimumStep) {this.scale = 'millisecond'; this.step = 50;} - if (stepMillisecond*10 > minimumStep) {this.scale = 'millisecond'; this.step = 10;} - if (stepMillisecond*5 > minimumStep) {this.scale = 'millisecond'; this.step = 5;} - if (stepMillisecond > minimumStep) {this.scale = 'millisecond'; this.step = 1;} - }; + if (options.xCenter !== undefined) this.defaultXCenter = options.xCenter; + if (options.yCenter !== undefined) this.defaultYCenter = options.yCenter; - /** - * Snap a date to a rounded value. - * The snap intervals are dependent on the current scale and step. - * @param {Date} date the date to be snapped. - * @return {Date} snappedDate - */ - TimeStep.prototype.snap = function(date) { - var clone = new Date(date.valueOf()); + if (options.filterLabel !== undefined) this.filterLabel = options.filterLabel; + if (options.legendLabel !== undefined) this.legendLabel = options.legendLabel; + if (options.xLabel !== undefined) this.xLabel = options.xLabel; + if (options.yLabel !== undefined) this.yLabel = options.yLabel; + if (options.zLabel !== undefined) this.zLabel = options.zLabel; - if (this.scale == 'year') { - var year = clone.getFullYear() + Math.round(clone.getMonth() / 12); - clone.setFullYear(Math.round(year / this.step) * this.step); - clone.setMonth(0); - clone.setDate(0); - clone.setHours(0); - clone.setMinutes(0); - clone.setSeconds(0); - clone.setMilliseconds(0); - } - else if (this.scale == 'month') { - if (clone.getDate() > 15) { - clone.setDate(1); - clone.setMonth(clone.getMonth() + 1); - // important: first set Date to 1, after that change the month. + if (options.xValueLabel !== undefined) this.xValueLabel = options.xValueLabel; + if (options.yValueLabel !== undefined) this.yValueLabel = options.yValueLabel; + if (options.zValueLabel !== undefined) this.zValueLabel = options.zValueLabel; + + if (options.style !== undefined) { + var styleNumber = this._getStyleNumber(options.style); + if (styleNumber !== -1) { + this.style = styleNumber; + } + } + if (options.showGrid !== undefined) this.showGrid = options.showGrid; + if (options.showPerspective !== undefined) this.showPerspective = options.showPerspective; + if (options.showShadow !== undefined) this.showShadow = options.showShadow; + if (options.tooltip !== undefined) this.showTooltip = options.tooltip; + if (options.showAnimationControls !== undefined) this.showAnimationControls = options.showAnimationControls; + if (options.keepAspectRatio !== undefined) this.keepAspectRatio = options.keepAspectRatio; + if (options.verticalRatio !== undefined) this.verticalRatio = options.verticalRatio; + + if (options.animationInterval !== undefined) this.animationInterval = options.animationInterval; + if (options.animationPreload !== undefined) this.animationPreload = options.animationPreload; + if (options.animationAutoStart !== undefined)this.animationAutoStart = options.animationAutoStart; + + if (options.xBarWidth !== undefined) this.defaultXBarWidth = options.xBarWidth; + if (options.yBarWidth !== undefined) this.defaultYBarWidth = options.yBarWidth; + + if (options.xMin !== undefined) this.defaultXMin = options.xMin; + if (options.xStep !== undefined) this.defaultXStep = options.xStep; + if (options.xMax !== undefined) this.defaultXMax = options.xMax; + if (options.yMin !== undefined) this.defaultYMin = options.yMin; + if (options.yStep !== undefined) this.defaultYStep = options.yStep; + if (options.yMax !== undefined) this.defaultYMax = options.yMax; + if (options.zMin !== undefined) this.defaultZMin = options.zMin; + if (options.zStep !== undefined) this.defaultZStep = options.zStep; + if (options.zMax !== undefined) this.defaultZMax = options.zMax; + if (options.valueMin !== undefined) this.defaultValueMin = options.valueMin; + if (options.valueMax !== undefined) this.defaultValueMax = options.valueMax; + + if (options.cameraPosition !== undefined) cameraPosition = options.cameraPosition; + + if (cameraPosition !== undefined) { + this.camera.setArmRotation(cameraPosition.horizontal, cameraPosition.vertical); + this.camera.setArmLength(cameraPosition.distance); } else { - clone.setDate(1); + this.camera.setArmRotation(1.0, 0.5); + this.camera.setArmLength(1.7); } + } - clone.setHours(0); - clone.setMinutes(0); - clone.setSeconds(0); - clone.setMilliseconds(0); + this._setBackgroundColor(options && options.backgroundColor); + + this.setSize(this.width, this.height); + + // re-load the data + if (this.dataTable) { + this.setData(this.dataTable); } - else if (this.scale == 'day') { - //noinspection FallthroughInSwitchStatementJS - switch (this.step) { - case 5: - case 2: - clone.setHours(Math.round(clone.getHours() / 24) * 24); break; - default: - clone.setHours(Math.round(clone.getHours() / 12) * 12); break; - } - clone.setMinutes(0); - clone.setSeconds(0); - clone.setMilliseconds(0); + + // start animation when option is true + if (this.animationAutoStart && this.dataFilter) { + this.animationStart(); } - else if (this.scale == 'weekday') { - //noinspection FallthroughInSwitchStatementJS - switch (this.step) { - case 5: - case 2: - clone.setHours(Math.round(clone.getHours() / 12) * 12); break; - default: - clone.setHours(Math.round(clone.getHours() / 6) * 6); break; - } - clone.setMinutes(0); - clone.setSeconds(0); - clone.setMilliseconds(0); + }; + + /** + * Redraw the Graph. + */ + Graph3d.prototype.redraw = function() { + if (this.dataPoints === undefined) { + throw 'Error: graph data not initialized'; } - else if (this.scale == 'hour') { - switch (this.step) { - case 4: - clone.setMinutes(Math.round(clone.getMinutes() / 60) * 60); break; - default: - clone.setMinutes(Math.round(clone.getMinutes() / 30) * 30); break; - } - clone.setSeconds(0); - clone.setMilliseconds(0); - } else if (this.scale == 'minute') { - //noinspection FallthroughInSwitchStatementJS - switch (this.step) { - case 15: - case 10: - clone.setMinutes(Math.round(clone.getMinutes() / 5) * 5); - clone.setSeconds(0); - break; - case 5: - clone.setSeconds(Math.round(clone.getSeconds() / 60) * 60); break; - default: - clone.setSeconds(Math.round(clone.getSeconds() / 30) * 30); break; - } - clone.setMilliseconds(0); + + this._resizeCanvas(); + this._resizeCenter(); + this._redrawSlider(); + this._redrawClear(); + this._redrawAxis(); + + if (this.style === Graph3d.STYLE.GRID || + this.style === Graph3d.STYLE.SURFACE) { + this._redrawDataGrid(); } - else if (this.scale == 'second') { - //noinspection FallthroughInSwitchStatementJS - switch (this.step) { - case 15: - case 10: - clone.setSeconds(Math.round(clone.getSeconds() / 5) * 5); - clone.setMilliseconds(0); - break; - case 5: - clone.setMilliseconds(Math.round(clone.getMilliseconds() / 1000) * 1000); break; - default: - clone.setMilliseconds(Math.round(clone.getMilliseconds() / 500) * 500); break; - } + else if (this.style === Graph3d.STYLE.LINE) { + this._redrawDataLine(); } - else if (this.scale == 'millisecond') { - var step = this.step > 5 ? this.step / 2 : 1; - clone.setMilliseconds(Math.round(clone.getMilliseconds() / step) * step); + else if (this.style === Graph3d.STYLE.BAR || + this.style === Graph3d.STYLE.BARCOLOR || + this.style === Graph3d.STYLE.BARSIZE) { + this._redrawDataBar(); } - - return clone; + else { + // style is DOT, DOTLINE, DOTCOLOR, DOTSIZE + this._redrawDataDot(); + } + + this._redrawInfo(); + this._redrawLegend(); }; /** - * Check if the current value is a major value (for example when the step - * is DAY, a major value is each first day of the MONTH) - * @return {boolean} true if current date is major, else false. + * Clear the canvas before redrawing */ - TimeStep.prototype.isMajor = function() { - if (this.switchedYear == true) { - this.switchedYear = false; - switch (this.scale) { - case 'year': - case 'month': - case 'weekday': - case 'day': - case 'hour': - case 'minute': - case 'second': - case 'millisecond': - return true; - default: - return false; + Graph3d.prototype._redrawClear = function() { + var canvas = this.frame.canvas; + var ctx = canvas.getContext('2d'); + + ctx.clearRect(0, 0, canvas.width, canvas.height); + }; + + + /** + * Redraw the legend showing the colors + */ + Graph3d.prototype._redrawLegend = function() { + var y; + + if (this.style === Graph3d.STYLE.DOTCOLOR || + this.style === Graph3d.STYLE.DOTSIZE) { + + var dotSize = this.frame.clientWidth * 0.02; + + var widthMin, widthMax; + if (this.style === Graph3d.STYLE.DOTSIZE) { + widthMin = dotSize / 2; // px + widthMax = dotSize / 2 + dotSize * 2; // Todo: put this in one function } - } - else if (this.switchedMonth == true) { - this.switchedMonth = false; - switch (this.scale) { - case 'weekday': - case 'day': - case 'hour': - case 'minute': - case 'second': - case 'millisecond': - return true; - default: - return false; + else { + widthMin = 20; // px + widthMax = 20; // px } + + var height = Math.max(this.frame.clientHeight * 0.25, 100); + var top = this.margin; + var right = this.frame.clientWidth - this.margin; + var left = right - widthMax; + var bottom = top + height; } - else if (this.switchedDay == true) { - this.switchedDay = false; - switch (this.scale) { - case 'millisecond': - case 'second': - case 'minute': - case 'hour': - return true; - default: - return false; + + var canvas = this.frame.canvas; + var ctx = canvas.getContext('2d'); + ctx.lineWidth = 1; + ctx.font = '14px arial'; // TODO: put in options + + if (this.style === Graph3d.STYLE.DOTCOLOR) { + // draw the color bar + var ymin = 0; + var ymax = height; // Todo: make height customizable + for (y = ymin; y < ymax; y++) { + var f = (y - ymin) / (ymax - ymin); + + //var width = (dotSize / 2 + (1-f) * dotSize * 2); // Todo: put this in one function + var hue = f * 240; + var color = this._hsv2rgb(hue, 1, 1); + + ctx.strokeStyle = color; + ctx.beginPath(); + ctx.moveTo(left, top + y); + ctx.lineTo(right, top + y); + ctx.stroke(); } + + ctx.strokeStyle = this.colorAxis; + ctx.strokeRect(left, top, widthMax, height); } - switch (this.scale) { - case 'millisecond': - return (this.current.getMilliseconds() == 0); - case 'second': - return (this.current.getSeconds() == 0); - case 'minute': - return (this.current.getHours() == 0) && (this.current.getMinutes() == 0); - case 'hour': - return (this.current.getHours() == 0); - case 'weekday': // intentional fall through - case 'day': - return (this.current.getDate() == 1); - case 'month': - return (this.current.getMonth() == 0); - case 'year': - return false; - default: - return false; + if (this.style === Graph3d.STYLE.DOTSIZE) { + // draw border around color bar + ctx.strokeStyle = this.colorAxis; + ctx.fillStyle = this.colorDot; + ctx.beginPath(); + ctx.moveTo(left, top); + ctx.lineTo(right, top); + ctx.lineTo(right - widthMax + widthMin, bottom); + ctx.lineTo(left, bottom); + ctx.closePath(); + ctx.fill(); + ctx.stroke(); } - }; + if (this.style === Graph3d.STYLE.DOTCOLOR || + this.style === Graph3d.STYLE.DOTSIZE) { + // print values along the color bar + var gridLineLen = 5; // px + var step = new StepNumber(this.valueMin, this.valueMax, (this.valueMax-this.valueMin)/5, true); + step.start(); + if (step.getCurrent() < this.valueMin) { + step.next(); + } + while (!step.end()) { + y = bottom - (step.getCurrent() - this.valueMin) / (this.valueMax - this.valueMin) * height; + + ctx.beginPath(); + ctx.moveTo(left - gridLineLen, y); + ctx.lineTo(left, y); + ctx.stroke(); - /** - * Returns formatted text for the minor axislabel, depending on the current - * date and the scale. For example when scale is MINUTE, the current time is - * formatted as "hh:mm". - * @param {Date} [date] custom date. if not provided, current date is taken - */ - TimeStep.prototype.getLabelMinor = function(date) { - if (date == undefined) { - date = this.current; - } + ctx.textAlign = 'right'; + ctx.textBaseline = 'middle'; + ctx.fillStyle = this.colorAxis; + ctx.fillText(step.getCurrent(), left - 2 * gridLineLen, y); - var format = this.format.minorLabels[this.scale]; - return (format && format.length > 0) ? moment(date).format(format) : ''; + step.next(); + } + + ctx.textAlign = 'right'; + ctx.textBaseline = 'top'; + var label = this.legendLabel; + ctx.fillText(label, right, bottom + this.margin); + } }; /** - * Returns formatted text for the major axis label, depending on the current - * date and the scale. For example when scale is MINUTE, the major scale is - * hours, and the hour will be formatted as "hh". - * @param {Date} [date] custom date. if not provided, current date is taken + * Redraw the filter */ - TimeStep.prototype.getLabelMajor = function(date) { - if (date == undefined) { - date = this.current; - } + Graph3d.prototype._redrawFilter = function() { + this.frame.filter.innerHTML = ''; - var format = this.format.majorLabels[this.scale]; - return (format && format.length > 0) ? moment(date).format(format) : ''; - }; + if (this.dataFilter) { + var options = { + 'visible': this.showAnimationControls + }; + var slider = new Slider(this.frame.filter, options); + this.frame.filter.slider = slider; - module.exports = TimeStep; + // TODO: css here is not nice here... + this.frame.filter.style.padding = '10px'; + //this.frame.filter.style.backgroundColor = '#EFEFEF'; + slider.setValues(this.dataFilter.values); + slider.setPlayInterval(this.animationInterval); -/***/ }, -/* 20 */ -/***/ function(module, exports, __webpack_require__) { + // create an event handler + var me = this; + var onchange = function () { + var index = slider.getIndex(); - /** - * Prototype for visual components - * @param {{dom: Object, domProps: Object, emitter: Emitter, range: Range}} [body] - * @param {Object} [options] - */ - function Component (body, options) { - this.options = null; - this.props = null; - } + me.dataFilter.selectValue(index); + me.dataPoints = me.dataFilter._getDataPoints(); - /** - * Set options for the component. The new options will be merged into the - * current options. - * @param {Object} options - */ - Component.prototype.setOptions = function(options) { - if (options) { - util.extend(this.options, options); + me.redraw(); + }; + slider.setOnChangeCallback(onchange); + } + else { + this.frame.filter.slider = undefined; } }; /** - * Repaint the component - * @return {boolean} Returns true if the component is resized + * Redraw the slider */ - Component.prototype.redraw = function() { - // should be implemented by the component - return false; + Graph3d.prototype._redrawSlider = function() { + if ( this.frame.filter.slider !== undefined) { + this.frame.filter.slider.redraw(); + } }; + /** - * Destroy the component. Cleanup DOM and event listeners + * Redraw common information */ - Component.prototype.destroy = function() { - // should be implemented by the component + Graph3d.prototype._redrawInfo = function() { + if (this.dataFilter) { + var canvas = this.frame.canvas; + var ctx = canvas.getContext('2d'); + + ctx.font = '14px arial'; // TODO: put in options + ctx.lineStyle = 'gray'; + ctx.fillStyle = 'gray'; + ctx.textAlign = 'left'; + ctx.textBaseline = 'top'; + + var x = this.margin; + var y = this.margin; + ctx.fillText(this.dataFilter.getLabel() + ': ' + this.dataFilter.getSelectedValue(), x, y); + } }; + /** - * Test whether the component is resized since the last time _isResized() was - * called. - * @return {Boolean} Returns true if the component is resized - * @protected + * Redraw the axis */ - Component.prototype._isResized = function() { - var resized = (this.props._previousWidth !== this.props.width || - this.props._previousHeight !== this.props.height); + Graph3d.prototype._redrawAxis = function() { + var canvas = this.frame.canvas, + ctx = canvas.getContext('2d'), + from, to, step, prettyStep, + text, xText, yText, zText, + offset, xOffset, yOffset, + xMin2d, xMax2d; - this.props._previousWidth = this.props.width; - this.props._previousHeight = this.props.height; + // TODO: get the actual rendered style of the containerElement + //ctx.font = this.containerElement.style.font; + ctx.font = 24 / this.camera.getArmLength() + 'px arial'; - return resized; - }; + // calculate the length for the short grid lines + var gridLenX = 0.025 / this.scale.x; + var gridLenY = 0.025 / this.scale.y; + var textMargin = 5 / this.camera.getArmLength(); // px + var armAngle = this.camera.getArmRotation().horizontal; - module.exports = Component; + // draw x-grid lines + ctx.lineWidth = 1; + prettyStep = (this.defaultXStep === undefined); + step = new StepNumber(this.xMin, this.xMax, this.xStep, prettyStep); + step.start(); + if (step.getCurrent() < this.xMin) { + step.next(); + } + while (!step.end()) { + var x = step.getCurrent(); + if (this.showGrid) { + from = this._convert3Dto2D(new Point3d(x, this.yMin, this.zMin)); + to = this._convert3Dto2D(new Point3d(x, this.yMax, this.zMin)); + ctx.strokeStyle = this.colorGrid; + ctx.beginPath(); + ctx.moveTo(from.x, from.y); + ctx.lineTo(to.x, to.y); + ctx.stroke(); + } + else { + from = this._convert3Dto2D(new Point3d(x, this.yMin, this.zMin)); + to = this._convert3Dto2D(new Point3d(x, this.yMin+gridLenX, this.zMin)); + ctx.strokeStyle = this.colorAxis; + ctx.beginPath(); + ctx.moveTo(from.x, from.y); + ctx.lineTo(to.x, to.y); + ctx.stroke(); -/***/ }, -/* 21 */ -/***/ function(module, exports, __webpack_require__) { + from = this._convert3Dto2D(new Point3d(x, this.yMax, this.zMin)); + to = this._convert3Dto2D(new Point3d(x, this.yMax-gridLenX, this.zMin)); + ctx.strokeStyle = this.colorAxis; + ctx.beginPath(); + ctx.moveTo(from.x, from.y); + ctx.lineTo(to.x, to.y); + ctx.stroke(); + } - var util = __webpack_require__(1); - var Component = __webpack_require__(20); - var moment = __webpack_require__(44); - var locales = __webpack_require__(48); + yText = (Math.cos(armAngle) > 0) ? this.yMin : this.yMax; + text = this._convert3Dto2D(new Point3d(x, yText, this.zMin)); + if (Math.cos(armAngle * 2) > 0) { + ctx.textAlign = 'center'; + ctx.textBaseline = 'top'; + text.y += textMargin; + } + else if (Math.sin(armAngle * 2) < 0){ + ctx.textAlign = 'right'; + ctx.textBaseline = 'middle'; + } + else { + ctx.textAlign = 'left'; + ctx.textBaseline = 'middle'; + } + ctx.fillStyle = this.colorAxis; + ctx.fillText(' ' + this.xValueLabel(step.getCurrent()) + ' ', text.x, text.y); - /** - * A current time bar - * @param {{range: Range, dom: Object, domProps: Object}} body - * @param {Object} [options] Available parameters: - * {Boolean} [showCurrentTime] - * @constructor CurrentTime - * @extends Component - */ - function CurrentTime (body, options) { - this.body = body; + step.next(); + } - // default options - this.defaultOptions = { - showCurrentTime: true, + // draw y-grid lines + ctx.lineWidth = 1; + prettyStep = (this.defaultYStep === undefined); + step = new StepNumber(this.yMin, this.yMax, this.yStep, prettyStep); + step.start(); + if (step.getCurrent() < this.yMin) { + step.next(); + } + while (!step.end()) { + if (this.showGrid) { + from = this._convert3Dto2D(new Point3d(this.xMin, step.getCurrent(), this.zMin)); + to = this._convert3Dto2D(new Point3d(this.xMax, step.getCurrent(), this.zMin)); + ctx.strokeStyle = this.colorGrid; + ctx.beginPath(); + ctx.moveTo(from.x, from.y); + ctx.lineTo(to.x, to.y); + ctx.stroke(); + } + else { + from = this._convert3Dto2D(new Point3d(this.xMin, step.getCurrent(), this.zMin)); + to = this._convert3Dto2D(new Point3d(this.xMin+gridLenY, step.getCurrent(), this.zMin)); + ctx.strokeStyle = this.colorAxis; + ctx.beginPath(); + ctx.moveTo(from.x, from.y); + ctx.lineTo(to.x, to.y); + ctx.stroke(); - locales: locales, - locale: 'en' - }; - this.options = util.extend({}, this.defaultOptions); - this.offset = 0; + from = this._convert3Dto2D(new Point3d(this.xMax, step.getCurrent(), this.zMin)); + to = this._convert3Dto2D(new Point3d(this.xMax-gridLenY, step.getCurrent(), this.zMin)); + ctx.strokeStyle = this.colorAxis; + ctx.beginPath(); + ctx.moveTo(from.x, from.y); + ctx.lineTo(to.x, to.y); + ctx.stroke(); + } - this._create(); + xText = (Math.sin(armAngle ) > 0) ? this.xMin : this.xMax; + text = this._convert3Dto2D(new Point3d(xText, step.getCurrent(), this.zMin)); + if (Math.cos(armAngle * 2) < 0) { + ctx.textAlign = 'center'; + ctx.textBaseline = 'top'; + text.y += textMargin; + } + else if (Math.sin(armAngle * 2) > 0){ + ctx.textAlign = 'right'; + ctx.textBaseline = 'middle'; + } + else { + ctx.textAlign = 'left'; + ctx.textBaseline = 'middle'; + } + ctx.fillStyle = this.colorAxis; + ctx.fillText(' ' + this.yValueLabel(step.getCurrent()) + ' ', text.x, text.y); - this.setOptions(options); - } + step.next(); + } - CurrentTime.prototype = new Component(); + // draw z-grid lines and axis + ctx.lineWidth = 1; + prettyStep = (this.defaultZStep === undefined); + step = new StepNumber(this.zMin, this.zMax, this.zStep, prettyStep); + step.start(); + if (step.getCurrent() < this.zMin) { + step.next(); + } + xText = (Math.cos(armAngle ) > 0) ? this.xMin : this.xMax; + yText = (Math.sin(armAngle ) < 0) ? this.yMin : this.yMax; + while (!step.end()) { + // TODO: make z-grid lines really 3d? + from = this._convert3Dto2D(new Point3d(xText, yText, step.getCurrent())); + ctx.strokeStyle = this.colorAxis; + ctx.beginPath(); + ctx.moveTo(from.x, from.y); + ctx.lineTo(from.x - textMargin, from.y); + ctx.stroke(); - /** - * Create the HTML DOM for the current time bar - * @private - */ - CurrentTime.prototype._create = function() { - var bar = document.createElement('div'); - bar.className = 'currenttime'; - bar.style.position = 'absolute'; - bar.style.top = '0px'; - bar.style.height = '100%'; + ctx.textAlign = 'right'; + ctx.textBaseline = 'middle'; + ctx.fillStyle = this.colorAxis; + ctx.fillText(this.zValueLabel(step.getCurrent()) + ' ', from.x - 5, from.y); - this.bar = bar; + step.next(); + } + ctx.lineWidth = 1; + from = this._convert3Dto2D(new Point3d(xText, yText, this.zMin)); + to = this._convert3Dto2D(new Point3d(xText, yText, this.zMax)); + ctx.strokeStyle = this.colorAxis; + ctx.beginPath(); + ctx.moveTo(from.x, from.y); + ctx.lineTo(to.x, to.y); + ctx.stroke(); + + // draw x-axis + ctx.lineWidth = 1; + // line at yMin + xMin2d = this._convert3Dto2D(new Point3d(this.xMin, this.yMin, this.zMin)); + xMax2d = this._convert3Dto2D(new Point3d(this.xMax, this.yMin, this.zMin)); + ctx.strokeStyle = this.colorAxis; + ctx.beginPath(); + ctx.moveTo(xMin2d.x, xMin2d.y); + ctx.lineTo(xMax2d.x, xMax2d.y); + ctx.stroke(); + // line at ymax + xMin2d = this._convert3Dto2D(new Point3d(this.xMin, this.yMax, this.zMin)); + xMax2d = this._convert3Dto2D(new Point3d(this.xMax, this.yMax, this.zMin)); + ctx.strokeStyle = this.colorAxis; + ctx.beginPath(); + ctx.moveTo(xMin2d.x, xMin2d.y); + ctx.lineTo(xMax2d.x, xMax2d.y); + ctx.stroke(); + + // draw y-axis + ctx.lineWidth = 1; + // line at xMin + from = this._convert3Dto2D(new Point3d(this.xMin, this.yMin, this.zMin)); + to = this._convert3Dto2D(new Point3d(this.xMin, this.yMax, this.zMin)); + ctx.strokeStyle = this.colorAxis; + ctx.beginPath(); + ctx.moveTo(from.x, from.y); + ctx.lineTo(to.x, to.y); + ctx.stroke(); + // line at xMax + from = this._convert3Dto2D(new Point3d(this.xMax, this.yMin, this.zMin)); + to = this._convert3Dto2D(new Point3d(this.xMax, this.yMax, this.zMin)); + ctx.strokeStyle = this.colorAxis; + ctx.beginPath(); + ctx.moveTo(from.x, from.y); + ctx.lineTo(to.x, to.y); + ctx.stroke(); + + // draw x-label + var xLabel = this.xLabel; + if (xLabel.length > 0) { + yOffset = 0.1 / this.scale.y; + xText = (this.xMin + this.xMax) / 2; + yText = (Math.cos(armAngle) > 0) ? this.yMin - yOffset: this.yMax + yOffset; + text = this._convert3Dto2D(new Point3d(xText, yText, this.zMin)); + if (Math.cos(armAngle * 2) > 0) { + ctx.textAlign = 'center'; + ctx.textBaseline = 'top'; + } + else if (Math.sin(armAngle * 2) < 0){ + ctx.textAlign = 'right'; + ctx.textBaseline = 'middle'; + } + else { + ctx.textAlign = 'left'; + ctx.textBaseline = 'middle'; + } + ctx.fillStyle = this.colorAxis; + ctx.fillText(xLabel, text.x, text.y); + } + + // draw y-label + var yLabel = this.yLabel; + if (yLabel.length > 0) { + xOffset = 0.1 / this.scale.x; + xText = (Math.sin(armAngle ) > 0) ? this.xMin - xOffset : this.xMax + xOffset; + yText = (this.yMin + this.yMax) / 2; + text = this._convert3Dto2D(new Point3d(xText, yText, this.zMin)); + if (Math.cos(armAngle * 2) < 0) { + ctx.textAlign = 'center'; + ctx.textBaseline = 'top'; + } + else if (Math.sin(armAngle * 2) > 0){ + ctx.textAlign = 'right'; + ctx.textBaseline = 'middle'; + } + else { + ctx.textAlign = 'left'; + ctx.textBaseline = 'middle'; + } + ctx.fillStyle = this.colorAxis; + ctx.fillText(yLabel, text.x, text.y); + } + + // draw z-label + var zLabel = this.zLabel; + if (zLabel.length > 0) { + offset = 30; // pixels. // TODO: relate to the max width of the values on the z axis? + xText = (Math.cos(armAngle ) > 0) ? this.xMin : this.xMax; + yText = (Math.sin(armAngle ) < 0) ? this.yMin : this.yMax; + zText = (this.zMin + this.zMax) / 2; + text = this._convert3Dto2D(new Point3d(xText, yText, zText)); + ctx.textAlign = 'right'; + ctx.textBaseline = 'middle'; + ctx.fillStyle = this.colorAxis; + ctx.fillText(zLabel, text.x - offset, text.y); + } }; /** - * Destroy the CurrentTime bar + * Calculate the color based on the given value. + * @param {Number} H Hue, a value be between 0 and 360 + * @param {Number} S Saturation, a value between 0 and 1 + * @param {Number} V Value, a value between 0 and 1 */ - CurrentTime.prototype.destroy = function () { - this.options.showCurrentTime = false; - this.redraw(); // will remove the bar from the DOM and stop refreshing + Graph3d.prototype._hsv2rgb = function(H, S, V) { + var R, G, B, C, Hi, X; - this.body = null; - }; + C = V * S; + Hi = Math.floor(H/60); // hi = 0,1,2,3,4,5 + X = C * (1 - Math.abs(((H/60) % 2) - 1)); - /** - * Set options for the component. Options will be merged in current options. - * @param {Object} options Available parameters: - * {boolean} [showCurrentTime] - */ - CurrentTime.prototype.setOptions = function(options) { - if (options) { - // copy all options that we know - util.selectiveExtend(['showCurrentTime', 'locale', 'locales'], this.options, options); + switch (Hi) { + case 0: R = C; G = X; B = 0; break; + case 1: R = X; G = C; B = 0; break; + case 2: R = 0; G = C; B = X; break; + case 3: R = 0; G = X; B = C; break; + case 4: R = X; G = 0; B = C; break; + case 5: R = C; G = 0; B = X; break; + + default: R = 0; G = 0; B = 0; break; } + + return 'RGB(' + parseInt(R*255) + ',' + parseInt(G*255) + ',' + parseInt(B*255) + ')'; }; + /** - * Repaint the component - * @return {boolean} Returns true if the component is resized + * Draw all datapoints as a grid + * This function can be used when the style is 'grid' */ - CurrentTime.prototype.redraw = function() { - if (this.options.showCurrentTime) { - var parent = this.body.dom.backgroundVertical; - if (this.bar.parentNode != parent) { - // attach to the dom - if (this.bar.parentNode) { - this.bar.parentNode.removeChild(this.bar); - } - parent.appendChild(this.bar); + Graph3d.prototype._redrawDataGrid = function() { + var canvas = this.frame.canvas, + ctx = canvas.getContext('2d'), + point, right, top, cross, + i, + topSideVisible, fillStyle, strokeStyle, lineWidth, + h, s, v, zAvg; - this.start(); - } - var now = new Date(new Date().valueOf() + this.offset); - var x = this.body.util.toScreen(now); + if (this.dataPoints === undefined || this.dataPoints.length <= 0) + return; // TODO: throw exception? - var locale = this.options.locales[this.options.locale]; - var title = locale.current + ' ' + locale.time + ': ' + moment(now).format('dddd, MMMM Do YYYY, H:mm:ss'); - title = title.charAt(0).toUpperCase() + title.substring(1); + // calculate the translations and screen position of all points + for (i = 0; i < this.dataPoints.length; i++) { + var trans = this._convertPointToTranslation(this.dataPoints[i].point); + var screen = this._convertTranslationToScreen(trans); - this.bar.style.left = x + 'px'; - this.bar.title = title; - } - else { - // remove the line from the DOM - if (this.bar.parentNode) { - this.bar.parentNode.removeChild(this.bar); - } - this.stop(); + this.dataPoints[i].trans = trans; + this.dataPoints[i].screen = screen; + + // calculate the translation of the point at the bottom (needed for sorting) + var transBottom = this._convertPointToTranslation(this.dataPoints[i].bottom); + this.dataPoints[i].dist = this.showPerspective ? transBottom.length() : -transBottom.z; } - return false; - }; + // sort the points on depth of their (x,y) position (not on z) + var sortDepth = function (a, b) { + return b.dist - a.dist; + }; + this.dataPoints.sort(sortDepth); - /** - * Start auto refreshing the current time bar - */ - CurrentTime.prototype.start = function() { - var me = this; + if (this.style === Graph3d.STYLE.SURFACE) { + for (i = 0; i < this.dataPoints.length; i++) { + point = this.dataPoints[i]; + right = this.dataPoints[i].pointRight; + top = this.dataPoints[i].pointTop; + cross = this.dataPoints[i].pointCross; - function update () { - me.stop(); + if (point !== undefined && right !== undefined && top !== undefined && cross !== undefined) { - // determine interval to refresh - var scale = me.body.range.conversion(me.body.domProps.center.width).scale; - var interval = 1 / scale / 10; - if (interval < 30) interval = 30; - if (interval > 1000) interval = 1000; + if (this.showGrayBottom || this.showShadow) { + // calculate the cross product of the two vectors from center + // to left and right, in order to know whether we are looking at the + // bottom or at the top side. We can also use the cross product + // for calculating light intensity + var aDiff = Point3d.subtract(cross.trans, point.trans); + var bDiff = Point3d.subtract(top.trans, right.trans); + var crossproduct = Point3d.crossProduct(aDiff, bDiff); + var len = crossproduct.length(); + // FIXME: there is a bug with determining the surface side (shadow or colored) - me.redraw(); + topSideVisible = (crossproduct.z > 0); + } + else { + topSideVisible = true; + } - // start a timer to adjust for the new time - me.currentTimeTimer = setTimeout(update, interval); - } + if (topSideVisible) { + // calculate Hue from the current value. At zMin the hue is 240, at zMax the hue is 0 + zAvg = (point.point.z + right.point.z + top.point.z + cross.point.z) / 4; + h = (1 - (zAvg - this.zMin) * this.scale.z / this.verticalRatio) * 240; + s = 1; // saturation - update(); - }; + if (this.showShadow) { + v = Math.min(1 + (crossproduct.x / len) / 2, 1); // value. TODO: scale + fillStyle = this._hsv2rgb(h, s, v); + strokeStyle = fillStyle; + } + else { + v = 1; + fillStyle = this._hsv2rgb(h, s, v); + strokeStyle = this.colorAxis; + } + } + else { + fillStyle = 'gray'; + strokeStyle = this.colorAxis; + } + lineWidth = 0.5; - /** - * Stop auto refreshing the current time bar - */ - CurrentTime.prototype.stop = function() { - if (this.currentTimeTimer !== undefined) { - clearTimeout(this.currentTimeTimer); - delete this.currentTimeTimer; + ctx.lineWidth = lineWidth; + ctx.fillStyle = fillStyle; + ctx.strokeStyle = strokeStyle; + ctx.beginPath(); + ctx.moveTo(point.screen.x, point.screen.y); + ctx.lineTo(right.screen.x, right.screen.y); + ctx.lineTo(cross.screen.x, cross.screen.y); + ctx.lineTo(top.screen.x, top.screen.y); + ctx.closePath(); + ctx.fill(); + ctx.stroke(); + } + } } - }; + else { // grid style + for (i = 0; i < this.dataPoints.length; i++) { + point = this.dataPoints[i]; + right = this.dataPoints[i].pointRight; + top = this.dataPoints[i].pointTop; - /** - * Set a current time. This can be used for example to ensure that a client's - * time is synchronized with a shared server time. - * @param {Date | String | Number} time A Date, unix timestamp, or - * ISO date string. - */ - CurrentTime.prototype.setCurrentTime = function(time) { - var t = util.convert(time, 'Date').valueOf(); - var now = new Date().valueOf(); - this.offset = t - now; - this.redraw(); - }; + if (point !== undefined) { + if (this.showPerspective) { + lineWidth = 2 / -point.trans.z; + } + else { + lineWidth = 2 * -(this.eye.z / this.camera.getArmLength()); + } + } - /** - * Get the current time. - * @return {Date} Returns the current time. - */ - CurrentTime.prototype.getCurrentTime = function() { - return new Date(new Date().valueOf() + this.offset); - }; + if (point !== undefined && right !== undefined) { + // calculate Hue from the current value. At zMin the hue is 240, at zMax the hue is 0 + zAvg = (point.point.z + right.point.z) / 2; + h = (1 - (zAvg - this.zMin) * this.scale.z / this.verticalRatio) * 240; - module.exports = CurrentTime; + ctx.lineWidth = lineWidth; + ctx.strokeStyle = this._hsv2rgb(h, 1, 1); + ctx.beginPath(); + ctx.moveTo(point.screen.x, point.screen.y); + ctx.lineTo(right.screen.x, right.screen.y); + ctx.stroke(); + } + if (point !== undefined && top !== undefined) { + // calculate Hue from the current value. At zMin the hue is 240, at zMax the hue is 0 + zAvg = (point.point.z + top.point.z) / 2; + h = (1 - (zAvg - this.zMin) * this.scale.z / this.verticalRatio) * 240; -/***/ }, -/* 22 */ -/***/ function(module, exports, __webpack_require__) { + ctx.lineWidth = lineWidth; + ctx.strokeStyle = this._hsv2rgb(h, 1, 1); + ctx.beginPath(); + ctx.moveTo(point.screen.x, point.screen.y); + ctx.lineTo(top.screen.x, top.screen.y); + ctx.stroke(); + } + } + } + }; - var Hammer = __webpack_require__(45); - var util = __webpack_require__(1); - var Component = __webpack_require__(20); - var moment = __webpack_require__(44); - var locales = __webpack_require__(48); /** - * A custom time bar - * @param {{range: Range, dom: Object}} body - * @param {Object} [options] Available parameters: - * {Boolean} [showCustomTime] - * @constructor CustomTime - * @extends Component + * Draw all datapoints as dots. + * This function can be used when the style is 'dot' or 'dot-line' */ + Graph3d.prototype._redrawDataDot = function() { + var canvas = this.frame.canvas; + var ctx = canvas.getContext('2d'); + var i; - function CustomTime (body, options) { - this.body = body; + if (this.dataPoints === undefined || this.dataPoints.length <= 0) + return; // TODO: throw exception? - // default options - this.defaultOptions = { - showCustomTime: false, - locales: locales, - locale: 'en' + // calculate the translations of all points + for (i = 0; i < this.dataPoints.length; i++) { + var trans = this._convertPointToTranslation(this.dataPoints[i].point); + var screen = this._convertTranslationToScreen(trans); + this.dataPoints[i].trans = trans; + this.dataPoints[i].screen = screen; + + // calculate the distance from the point at the bottom to the camera + var transBottom = this._convertPointToTranslation(this.dataPoints[i].bottom); + this.dataPoints[i].dist = this.showPerspective ? transBottom.length() : -transBottom.z; + } + + // order the translated points by depth + var sortDepth = function (a, b) { + return b.dist - a.dist; }; - this.options = util.extend({}, this.defaultOptions); + this.dataPoints.sort(sortDepth); - this.customTime = new Date(); - this.eventParams = {}; // stores state parameters while dragging the bar + // draw the datapoints as colored circles + var dotSize = this.frame.clientWidth * 0.02; // px + for (i = 0; i < this.dataPoints.length; i++) { + var point = this.dataPoints[i]; - // create the DOM - this._create(); + if (this.style === Graph3d.STYLE.DOTLINE) { + // draw a vertical line from the bottom to the graph value + //var from = this._convert3Dto2D(new Point3d(point.point.x, point.point.y, this.zMin)); + var from = this._convert3Dto2D(point.bottom); + ctx.lineWidth = 1; + ctx.strokeStyle = this.colorGrid; + ctx.beginPath(); + ctx.moveTo(from.x, from.y); + ctx.lineTo(point.screen.x, point.screen.y); + ctx.stroke(); + } - this.setOptions(options); - } + // calculate radius for the circle + var size; + if (this.style === Graph3d.STYLE.DOTSIZE) { + size = dotSize/2 + 2*dotSize * (point.point.value - this.valueMin) / (this.valueMax - this.valueMin); + } + else { + size = dotSize; + } - CustomTime.prototype = new Component(); + var radius; + if (this.showPerspective) { + radius = size / -point.trans.z; + } + else { + radius = size * -(this.eye.z / this.camera.getArmLength()); + } + if (radius < 0) { + radius = 0; + } - /** - * Set options for the component. Options will be merged in current options. - * @param {Object} options Available parameters: - * {boolean} [showCustomTime] - */ - CustomTime.prototype.setOptions = function(options) { - if (options) { - // copy all options that we know - util.selectiveExtend(['showCustomTime', 'locale', 'locales'], this.options, options); + var hue, color, borderColor; + if (this.style === Graph3d.STYLE.DOTCOLOR ) { + // calculate the color based on the value + hue = (1 - (point.point.value - this.valueMin) * this.scale.value) * 240; + color = this._hsv2rgb(hue, 1, 1); + borderColor = this._hsv2rgb(hue, 1, 0.8); + } + else if (this.style === Graph3d.STYLE.DOTSIZE) { + color = this.colorDot; + borderColor = this.colorDotBorder; + } + else { + // calculate Hue from the current value. At zMin the hue is 240, at zMax the hue is 0 + hue = (1 - (point.point.z - this.zMin) * this.scale.z / this.verticalRatio) * 240; + color = this._hsv2rgb(hue, 1, 1); + borderColor = this._hsv2rgb(hue, 1, 0.8); + } + + // draw the circle + ctx.lineWidth = 1.0; + ctx.strokeStyle = borderColor; + ctx.fillStyle = color; + ctx.beginPath(); + ctx.arc(point.screen.x, point.screen.y, radius, 0, Math.PI*2, true); + ctx.fill(); + ctx.stroke(); } }; /** - * Create the DOM for the custom time - * @private + * Draw all datapoints as bars. + * This function can be used when the style is 'bar', 'bar-color', or 'bar-size' */ - CustomTime.prototype._create = function() { - var bar = document.createElement('div'); - bar.className = 'customtime'; - bar.style.position = 'absolute'; - bar.style.top = '0px'; - bar.style.height = '100%'; - this.bar = bar; + Graph3d.prototype._redrawDataBar = function() { + var canvas = this.frame.canvas; + var ctx = canvas.getContext('2d'); + var i, j, surface, corners; - var drag = document.createElement('div'); - drag.style.position = 'relative'; - drag.style.top = '0px'; - drag.style.left = '-10px'; - drag.style.height = '100%'; - drag.style.width = '20px'; - bar.appendChild(drag); + if (this.dataPoints === undefined || this.dataPoints.length <= 0) + return; // TODO: throw exception? - // attach event listeners - this.hammer = Hammer(bar, { - prevent_default: true - }); - this.hammer.on('dragstart', this._onDragStart.bind(this)); - this.hammer.on('drag', this._onDrag.bind(this)); - this.hammer.on('dragend', this._onDragEnd.bind(this)); - }; + // calculate the translations of all points + for (i = 0; i < this.dataPoints.length; i++) { + var trans = this._convertPointToTranslation(this.dataPoints[i].point); + var screen = this._convertTranslationToScreen(trans); + this.dataPoints[i].trans = trans; + this.dataPoints[i].screen = screen; - /** - * Destroy the CustomTime bar - */ - CustomTime.prototype.destroy = function () { - this.options.showCustomTime = false; - this.redraw(); // will remove the bar from the DOM + // calculate the distance from the point at the bottom to the camera + var transBottom = this._convertPointToTranslation(this.dataPoints[i].bottom); + this.dataPoints[i].dist = this.showPerspective ? transBottom.length() : -transBottom.z; + } - this.hammer.enable(false); - this.hammer = null; + // order the translated points by depth + var sortDepth = function (a, b) { + return b.dist - a.dist; + }; + this.dataPoints.sort(sortDepth); - this.body = null; - }; + // draw the datapoints as bars + var xWidth = this.xBarWidth / 2; + var yWidth = this.yBarWidth / 2; + for (i = 0; i < this.dataPoints.length; i++) { + var point = this.dataPoints[i]; - /** - * Repaint the component - * @return {boolean} Returns true if the component is resized - */ - CustomTime.prototype.redraw = function () { - if (this.options.showCustomTime) { - var parent = this.body.dom.backgroundVertical; - if (this.bar.parentNode != parent) { - // attach to the dom - if (this.bar.parentNode) { - this.bar.parentNode.removeChild(this.bar); - } - parent.appendChild(this.bar); + // determine color + var hue, color, borderColor; + if (this.style === Graph3d.STYLE.BARCOLOR ) { + // calculate the color based on the value + hue = (1 - (point.point.value - this.valueMin) * this.scale.value) * 240; + color = this._hsv2rgb(hue, 1, 1); + borderColor = this._hsv2rgb(hue, 1, 0.8); + } + else if (this.style === Graph3d.STYLE.BARSIZE) { + color = this.colorDot; + borderColor = this.colorDotBorder; + } + else { + // calculate Hue from the current value. At zMin the hue is 240, at zMax the hue is 0 + hue = (1 - (point.point.z - this.zMin) * this.scale.z / this.verticalRatio) * 240; + color = this._hsv2rgb(hue, 1, 1); + borderColor = this._hsv2rgb(hue, 1, 0.8); } - var x = this.body.util.toScreen(this.customTime); + // calculate size for the bar + if (this.style === Graph3d.STYLE.BARSIZE) { + xWidth = (this.xBarWidth / 2) * ((point.point.value - this.valueMin) / (this.valueMax - this.valueMin) * 0.8 + 0.2); + yWidth = (this.yBarWidth / 2) * ((point.point.value - this.valueMin) / (this.valueMax - this.valueMin) * 0.8 + 0.2); + } - var locale = this.options.locales[this.options.locale]; - var title = locale.time + ': ' + moment(this.customTime).format('dddd, MMMM Do YYYY, H:mm:ss'); - title = title.charAt(0).toUpperCase() + title.substring(1); + // calculate all corner points + var me = this; + var point3d = point.point; + var top = [ + {point: new Point3d(point3d.x - xWidth, point3d.y - yWidth, point3d.z)}, + {point: new Point3d(point3d.x + xWidth, point3d.y - yWidth, point3d.z)}, + {point: new Point3d(point3d.x + xWidth, point3d.y + yWidth, point3d.z)}, + {point: new Point3d(point3d.x - xWidth, point3d.y + yWidth, point3d.z)} + ]; + var bottom = [ + {point: new Point3d(point3d.x - xWidth, point3d.y - yWidth, this.zMin)}, + {point: new Point3d(point3d.x + xWidth, point3d.y - yWidth, this.zMin)}, + {point: new Point3d(point3d.x + xWidth, point3d.y + yWidth, this.zMin)}, + {point: new Point3d(point3d.x - xWidth, point3d.y + yWidth, this.zMin)} + ]; + + // calculate screen location of the points + top.forEach(function (obj) { + obj.screen = me._convert3Dto2D(obj.point); + }); + bottom.forEach(function (obj) { + obj.screen = me._convert3Dto2D(obj.point); + }); + + // create five sides, calculate both corner points and center points + var surfaces = [ + {corners: top, center: Point3d.avg(bottom[0].point, bottom[2].point)}, + {corners: [top[0], top[1], bottom[1], bottom[0]], center: Point3d.avg(bottom[1].point, bottom[0].point)}, + {corners: [top[1], top[2], bottom[2], bottom[1]], center: Point3d.avg(bottom[2].point, bottom[1].point)}, + {corners: [top[2], top[3], bottom[3], bottom[2]], center: Point3d.avg(bottom[3].point, bottom[2].point)}, + {corners: [top[3], top[0], bottom[0], bottom[3]], center: Point3d.avg(bottom[0].point, bottom[3].point)} + ]; + point.surfaces = surfaces; + + // calculate the distance of each of the surface centers to the camera + for (j = 0; j < surfaces.length; j++) { + surface = surfaces[j]; + var transCenter = this._convertPointToTranslation(surface.center); + surface.dist = this.showPerspective ? transCenter.length() : -transCenter.z; + // TODO: this dept calculation doesn't work 100% of the cases due to perspective, + // but the current solution is fast/simple and works in 99.9% of all cases + // the issue is visible in example 14, with graph.setCameraPosition({horizontal: 2.97, vertical: 0.5, distance: 0.9}) + } + + // order the surfaces by their (translated) depth + surfaces.sort(function (a, b) { + var diff = b.dist - a.dist; + if (diff) return diff; + + // if equal depth, sort the top surface last + if (a.corners === top) return 1; + if (b.corners === top) return -1; + + // both are equal + return 0; + }); - this.bar.style.left = x + 'px'; - this.bar.title = title; - } - else { - // remove the line from the DOM - if (this.bar.parentNode) { - this.bar.parentNode.removeChild(this.bar); + // draw the ordered surfaces + ctx.lineWidth = 1; + ctx.strokeStyle = borderColor; + ctx.fillStyle = color; + // NOTE: we start at j=2 instead of j=0 as we don't need to draw the two surfaces at the backside + for (j = 2; j < surfaces.length; j++) { + surface = surfaces[j]; + corners = surface.corners; + ctx.beginPath(); + ctx.moveTo(corners[3].screen.x, corners[3].screen.y); + ctx.lineTo(corners[0].screen.x, corners[0].screen.y); + ctx.lineTo(corners[1].screen.x, corners[1].screen.y); + ctx.lineTo(corners[2].screen.x, corners[2].screen.y); + ctx.lineTo(corners[3].screen.x, corners[3].screen.y); + ctx.fill(); + ctx.stroke(); } } - - return false; }; - /** - * Set custom time. - * @param {Date | number | string} time - */ - CustomTime.prototype.setCustomTime = function(time) { - this.customTime = util.convert(time, 'Date'); - this.redraw(); - }; /** - * Retrieve the current custom time. - * @return {Date} customTime + * Draw a line through all datapoints. + * This function can be used when the style is 'line' */ - CustomTime.prototype.getCustomTime = function() { - return new Date(this.customTime.valueOf()); - }; + Graph3d.prototype._redrawDataLine = function() { + var canvas = this.frame.canvas, + ctx = canvas.getContext('2d'), + point, i; - /** - * Start moving horizontally - * @param {Event} event - * @private - */ - CustomTime.prototype._onDragStart = function(event) { - this.eventParams.dragging = true; - this.eventParams.customTime = this.customTime; + if (this.dataPoints === undefined || this.dataPoints.length <= 0) + return; // TODO: throw exception? - event.stopPropagation(); - event.preventDefault(); - }; + // calculate the translations of all points + for (i = 0; i < this.dataPoints.length; i++) { + var trans = this._convertPointToTranslation(this.dataPoints[i].point); + var screen = this._convertTranslationToScreen(trans); - /** - * Perform moving operating. - * @param {Event} event - * @private - */ - CustomTime.prototype._onDrag = function (event) { - if (!this.eventParams.dragging) return; + this.dataPoints[i].trans = trans; + this.dataPoints[i].screen = screen; + } - var deltaX = event.gesture.deltaX, - x = this.body.util.toScreen(this.eventParams.customTime) + deltaX, - time = this.body.util.toTime(x); + // start the line + if (this.dataPoints.length > 0) { + point = this.dataPoints[0]; - this.setCustomTime(time); + ctx.lineWidth = 1; // TODO: make customizable + ctx.strokeStyle = 'blue'; // TODO: make customizable + ctx.beginPath(); + ctx.moveTo(point.screen.x, point.screen.y); + } - // fire a timechange event - this.body.emitter.emit('timechange', { - time: new Date(this.customTime.valueOf()) - }); + // draw the datapoints as colored circles + for (i = 1; i < this.dataPoints.length; i++) { + point = this.dataPoints[i]; + ctx.lineTo(point.screen.x, point.screen.y); + } - event.stopPropagation(); - event.preventDefault(); + // finish the line + if (this.dataPoints.length > 0) { + ctx.stroke(); + } }; /** - * Stop moving operating. - * @param {event} event - * @private + * Start a moving operation inside the provided parent element + * @param {Event} event The event that occurred (required for + * retrieving the mouse position) */ - CustomTime.prototype._onDragEnd = function (event) { - if (!this.eventParams.dragging) return; + Graph3d.prototype._onMouseDown = function(event) { + event = event || window.event; - // fire a timechanged event - this.body.emitter.emit('timechanged', { - time: new Date(this.customTime.valueOf()) - }); + // check if mouse is still down (may be up when focus is lost for example + // in an iframe) + if (this.leftButtonDown) { + this._onMouseUp(event); + } - event.stopPropagation(); - event.preventDefault(); - }; + // only react on left mouse button down + this.leftButtonDown = event.which ? (event.which === 1) : (event.button === 1); + if (!this.leftButtonDown && !this.touchDown) return; - module.exports = CustomTime; + // get mouse position (different code for IE and all other browsers) + this.startMouseX = getMouseX(event); + this.startMouseY = getMouseY(event); + this.startStart = new Date(this.start); + this.startEnd = new Date(this.end); + this.startArmRotation = this.camera.getArmRotation(); -/***/ }, -/* 23 */ -/***/ function(module, exports, __webpack_require__) { + this.frame.style.cursor = 'move'; + + // add event listeners to handle moving the contents + // we store the function onmousemove and onmouseup in the graph, so we can + // remove the eventlisteners lateron in the function mouseUp() + var me = this; + this.onmousemove = function (event) {me._onMouseMove(event);}; + this.onmouseup = function (event) {me._onMouseUp(event);}; + util.addEventListener(document, 'mousemove', me.onmousemove); + util.addEventListener(document, 'mouseup', me.onmouseup); + util.preventDefault(event); + }; - var util = __webpack_require__(1); - var DOMutil = __webpack_require__(2); - var Component = __webpack_require__(20); - var DataStep = __webpack_require__(16); /** - * A horizontal time axis - * @param {Object} [options] See DataAxis.setOptions for the available - * options. - * @constructor DataAxis - * @extends Component - * @param body + * Perform moving operating. + * This function activated from within the funcion Graph.mouseDown(). + * @param {Event} event Well, eehh, the event */ - function DataAxis (body, options, svg, linegraphOptions) { - this.id = util.randomUUID(); - this.body = body; - - this.defaultOptions = { - orientation: 'left', // supported: 'left', 'right' - showMinorLabels: true, - showMajorLabels: true, - icons: true, - majorLinesOffset: 7, - minorLinesOffset: 4, - labelOffsetX: 10, - labelOffsetY: 2, - iconWidth: 20, - width: '40px', - visible: true, - alignZeros: true, - customRange: { - left: {min:undefined, max:undefined}, - right: {min:undefined, max:undefined} - }, - title: { - left: {text:undefined}, - right: {text:undefined} - }, - format: { - left: {decimals: undefined}, - right: {decimals: undefined} - } - }; - - this.linegraphOptions = linegraphOptions; - this.linegraphSVG = svg; - this.props = {}; - this.DOMelements = { // dynamic elements - lines: {}, - labels: {}, - title: {} - }; - - this.dom = {}; - - this.range = {start:0, end:0}; - - this.options = util.extend({}, this.defaultOptions); - this.conversionFactor = 1; - - this.setOptions(options); - this.width = Number(('' + this.options.width).replace("px","")); - this.minWidth = this.width; - this.height = this.linegraphSVG.offsetHeight; - this.hidden = false; - - this.stepPixels = 25; - this.stepPixelsForced = 25; - this.zeroCrossing = -1; - - this.lineOffset = 0; - this.master = true; - this.svgElements = {}; - this.iconsRemoved = false; - - - this.groups = {}; - this.amountOfGroups = 0; - - // create the HTML DOM - this._create(); + Graph3d.prototype._onMouseMove = function (event) { + event = event || window.event; - var me = this; - this.body.emitter.on("verticalDrag", function() { - me.dom.lineContainer.style.top = me.body.domProps.scrollTop + 'px'; - }); - } + // calculate change in mouse position + var diffX = parseFloat(getMouseX(event)) - this.startMouseX; + var diffY = parseFloat(getMouseY(event)) - this.startMouseY; - DataAxis.prototype = new Component(); + var horizontalNew = this.startArmRotation.horizontal + diffX / 200; + var verticalNew = this.startArmRotation.vertical + diffY / 200; + var snapAngle = 4; // degrees + var snapValue = Math.sin(snapAngle / 360 * 2 * Math.PI); - DataAxis.prototype.addGroup = function(label, graphOptions) { - if (!this.groups.hasOwnProperty(label)) { - this.groups[label] = graphOptions; + // snap horizontally to nice angles at 0pi, 0.5pi, 1pi, 1.5pi, etc... + // the -0.001 is to take care that the vertical axis is always drawn at the left front corner + if (Math.abs(Math.sin(horizontalNew)) < snapValue) { + horizontalNew = Math.round((horizontalNew / Math.PI)) * Math.PI - 0.001; } - this.amountOfGroups += 1; - }; - - DataAxis.prototype.updateGroup = function(label, graphOptions) { - this.groups[label] = graphOptions; - }; - - DataAxis.prototype.removeGroup = function(label) { - if (this.groups.hasOwnProperty(label)) { - delete this.groups[label]; - this.amountOfGroups -= 1; + if (Math.abs(Math.cos(horizontalNew)) < snapValue) { + horizontalNew = (Math.round((horizontalNew/ Math.PI - 0.5)) + 0.5) * Math.PI - 0.001; } - }; + // snap vertically to nice angles + if (Math.abs(Math.sin(verticalNew)) < snapValue) { + verticalNew = Math.round((verticalNew / Math.PI)) * Math.PI; + } + if (Math.abs(Math.cos(verticalNew)) < snapValue) { + verticalNew = (Math.round((verticalNew/ Math.PI - 0.5)) + 0.5) * Math.PI; + } - DataAxis.prototype.setOptions = function (options) { - if (options) { - var redraw = false; - if (this.options.orientation != options.orientation && options.orientation !== undefined) { - redraw = true; - } - var fields = [ - 'orientation', - 'showMinorLabels', - 'showMajorLabels', - 'icons', - 'majorLinesOffset', - 'minorLinesOffset', - 'labelOffsetX', - 'labelOffsetY', - 'iconWidth', - 'width', - 'visible', - 'customRange', - 'title', - 'format', - 'alignZeros' - ]; - util.selectiveExtend(fields, this.options, options); + this.camera.setArmRotation(horizontalNew, verticalNew); + this.redraw(); - this.minWidth = Number(('' + this.options.width).replace("px","")); + // fire a cameraPositionChange event + var parameters = this.getCameraPosition(); + this.emit('cameraPositionChange', parameters); - if (redraw == true && this.dom.frame) { - this.hide(); - this.show(); - } - } + util.preventDefault(event); }; /** - * Create the HTML DOM for the DataAxis + * Stop moving operating. + * This function activated from within the funcion Graph.mouseDown(). + * @param {event} event The event */ - DataAxis.prototype._create = function() { - this.dom.frame = document.createElement('div'); - this.dom.frame.style.width = this.options.width; - this.dom.frame.style.height = this.height; - - this.dom.lineContainer = document.createElement('div'); - this.dom.lineContainer.style.width = '100%'; - this.dom.lineContainer.style.height = this.height; - this.dom.lineContainer.style.position = 'relative'; + Graph3d.prototype._onMouseUp = function (event) { + this.frame.style.cursor = 'auto'; + this.leftButtonDown = false; - // create svg element for graph drawing. - this.svg = document.createElementNS('http://www.w3.org/2000/svg',"svg"); - this.svg.style.position = "absolute"; - this.svg.style.top = '0px'; - this.svg.style.height = '100%'; - this.svg.style.width = '100%'; - this.svg.style.display = "block"; - this.dom.frame.appendChild(this.svg); + // remove event listeners here + util.removeEventListener(document, 'mousemove', this.onmousemove); + util.removeEventListener(document, 'mouseup', this.onmouseup); + util.preventDefault(event); }; - DataAxis.prototype._redrawGroupIcons = function () { - DOMutil.prepareElements(this.svgElements); - - var x; - var iconWidth = this.options.iconWidth; - var iconHeight = 15; - var iconOffset = 4; - var y = iconOffset + 0.5 * iconHeight; + /** + * After having moved the mouse, a tooltip should pop up when the mouse is resting on a data point + * @param {Event} event A mouse move event + */ + Graph3d.prototype._onTooltip = function (event) { + var delay = 300; // ms + var mouseX = getMouseX(event) - util.getAbsoluteLeft(this.frame); + var mouseY = getMouseY(event) - util.getAbsoluteTop(this.frame); - if (this.options.orientation == 'left') { - x = iconOffset; - } - else { - x = this.width - iconWidth - iconOffset; + if (!this.showTooltip) { + return; } - for (var groupId in this.groups) { - if (this.groups.hasOwnProperty(groupId)) { - if (this.groups[groupId].visible == true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] == true)) { - this.groups[groupId].drawIcon(x, y, this.svgElements, this.svg, iconWidth, iconHeight); - y += iconHeight + iconOffset; - } - } + if (this.tooltipTimeout) { + clearTimeout(this.tooltipTimeout); } - DOMutil.cleanupElements(this.svgElements); - this.iconsRemoved = false; - }; - - DataAxis.prototype._cleanupIcons = function() { - if (this.iconsRemoved == false) { - DOMutil.prepareElements(this.svgElements); - DOMutil.cleanupElements(this.svgElements); - this.iconsRemoved = true; + // (delayed) display of a tooltip only if no mouse button is down + if (this.leftButtonDown) { + this._hideTooltip(); + return; } - } - /** - * Create the HTML DOM for the DataAxis - */ - DataAxis.prototype.show = function() { - this.hidden = false; - if (!this.dom.frame.parentNode) { - if (this.options.orientation == 'left') { - this.body.dom.left.appendChild(this.dom.frame); - } - else { - this.body.dom.right.appendChild(this.dom.frame); + if (this.tooltip && this.tooltip.dataPoint) { + // tooltip is currently visible + var dataPoint = this._dataPointFromXY(mouseX, mouseY); + if (dataPoint !== this.tooltip.dataPoint) { + // datapoint changed + if (dataPoint) { + this._showTooltip(dataPoint); + } + else { + this._hideTooltip(); + } } } + else { + // tooltip is currently not visible + var me = this; + this.tooltipTimeout = setTimeout(function () { + me.tooltipTimeout = null; - if (!this.dom.lineContainer.parentNode) { - this.body.dom.backgroundHorizontal.appendChild(this.dom.lineContainer); + // show a tooltip if we have a data point + var dataPoint = me._dataPointFromXY(mouseX, mouseY); + if (dataPoint) { + me._showTooltip(dataPoint); + } + }, delay); } }; /** - * Create the HTML DOM for the DataAxis + * Event handler for touchstart event on mobile devices */ - DataAxis.prototype.hide = function() { - this.hidden = true; - if (this.dom.frame.parentNode) { - this.dom.frame.parentNode.removeChild(this.dom.frame); - } + Graph3d.prototype._onTouchStart = function(event) { + this.touchDown = true; - if (this.dom.lineContainer.parentNode) { - this.dom.lineContainer.parentNode.removeChild(this.dom.lineContainer); - } + var me = this; + this.ontouchmove = function (event) {me._onTouchMove(event);}; + this.ontouchend = function (event) {me._onTouchEnd(event);}; + util.addEventListener(document, 'touchmove', me.ontouchmove); + util.addEventListener(document, 'touchend', me.ontouchend); + + this._onMouseDown(event); }; /** - * Set a range (start and end) - * @param end - * @param start - * @param end + * Event handler for touchmove event on mobile devices */ - DataAxis.prototype.setRange = function (start, end) { - if (this.master == false && this.options.alignZeros == true && this.zeroCrossing != -1) { - if (start > 0) { - start = 0; - } - } - this.range.start = start; - this.range.end = end; + Graph3d.prototype._onTouchMove = function(event) { + this._onMouseMove(event); }; /** - * Repaint the component - * @return {boolean} Returns true if the component is resized + * Event handler for touchend event on mobile devices */ - DataAxis.prototype.redraw = function () { - var changeCalled = false; - var activeGroups = 0; - - // Make sure the line container adheres to the vertical scrolling. - this.dom.lineContainer.style.top = this.body.domProps.scrollTop + 'px'; - - for (var groupId in this.groups) { - if (this.groups.hasOwnProperty(groupId)) { - if (this.groups[groupId].visible == true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] == true)) { - activeGroups++; - } - } - } - if (this.amountOfGroups == 0 || activeGroups == 0) { - this.hide(); - } - else { - this.show(); - this.height = Number(this.linegraphSVG.style.height.replace("px","")); - - // svg offsetheight did not work in firefox and explorer... - this.dom.lineContainer.style.height = this.height + 'px'; - this.width = this.options.visible == true ? Number(('' + this.options.width).replace("px","")) : 0; - - var props = this.props; - var frame = this.dom.frame; + Graph3d.prototype._onTouchEnd = function(event) { + this.touchDown = false; - // update classname - frame.className = 'dataaxis'; + util.removeEventListener(document, 'touchmove', this.ontouchmove); + util.removeEventListener(document, 'touchend', this.ontouchend); - // calculate character width and height - this._calculateCharSize(); + this._onMouseUp(event); + }; - var orientation = this.options.orientation; - var showMinorLabels = this.options.showMinorLabels; - var showMajorLabels = this.options.showMajorLabels; - // determine the width and height of the elements for the axis - props.minorLabelHeight = showMinorLabels ? props.minorCharHeight : 0; - props.majorLabelHeight = showMajorLabels ? props.majorCharHeight : 0; + /** + * Event handler for mouse wheel event, used to zoom the graph + * Code from http://adomas.org/javascript-mouse-wheel/ + * @param {event} event The event + */ + Graph3d.prototype._onWheel = function(event) { + if (!event) /* For IE. */ + event = window.event; - props.minorLineWidth = this.body.dom.backgroundHorizontal.offsetWidth - this.lineOffset - this.width + 2 * this.options.minorLinesOffset; - props.minorLineHeight = 1; - props.majorLineWidth = this.body.dom.backgroundHorizontal.offsetWidth - this.lineOffset - this.width + 2 * this.options.majorLinesOffset; - props.majorLineHeight = 1; + // retrieve delta + var delta = 0; + if (event.wheelDelta) { /* IE/Opera. */ + delta = event.wheelDelta/120; + } else if (event.detail) { /* Mozilla case. */ + // In Mozilla, sign of delta is different than in IE. + // Also, delta is multiple of 3. + delta = -event.detail/3; + } - // take frame offline while updating (is almost twice as fast) - if (orientation == 'left') { - frame.style.top = '0'; - frame.style.left = '0'; - frame.style.bottom = ''; - frame.style.width = this.width + 'px'; - frame.style.height = this.height + "px"; - } - else { // right - frame.style.top = ''; - frame.style.bottom = '0'; - frame.style.left = '0'; - frame.style.width = this.width + 'px'; - frame.style.height = this.height + "px"; - } - changeCalled = this._redrawLabels(); + // If delta is nonzero, handle it. + // Basically, delta is now positive if wheel was scrolled up, + // and negative, if wheel was scrolled down. + if (delta) { + var oldLength = this.camera.getArmLength(); + var newLength = oldLength * (1 - delta / 10); - if (this.options.icons == true) { - this._redrawGroupIcons(); - } - else { - this._cleanupIcons(); - } + this.camera.setArmLength(newLength); + this.redraw(); - this._redrawTitle(orientation); + this._hideTooltip(); } - return changeCalled; + + // fire a cameraPositionChange event + var parameters = this.getCameraPosition(); + this.emit('cameraPositionChange', parameters); + + // Prevent default actions caused by mouse wheel. + // That might be ugly, but we handle scrolls somehow + // anyway, so don't bother here.. + util.preventDefault(event); }; /** - * Repaint major and minor text labels and vertical grid lines + * Test whether a point lies inside given 2D triangle + * @param {Point2d} point + * @param {Point2d[]} triangle + * @return {boolean} Returns true if given point lies inside or on the edge of the triangle * @private */ - DataAxis.prototype._redrawLabels = function () { - DOMutil.prepareElements(this.DOMelements.lines); - DOMutil.prepareElements(this.DOMelements.labels); - - var orientation = this.options['orientation']; - - // calculate range and step (step such that we have space for 7 characters per label) - var minimumStep = this.master ? this.props.majorCharHeight || 10 : this.stepPixelsForced; - - var step = new DataStep( - this.range.start, - this.range.end, - minimumStep, - this.dom.frame.offsetHeight, - this.options.customRange[this.options.orientation], - this.master == false && this.options.alignZeros // doess the step have to align zeros? only if not master and the options is on - ); + Graph3d.prototype._insideTriangle = function (point, triangle) { + var a = triangle[0], + b = triangle[1], + c = triangle[2]; - this.step = step; - // get the distance in pixels for a step - // dead space is space that is "left over" after a step - var stepPixels = (this.dom.frame.offsetHeight - (step.deadSpace * (this.dom.frame.offsetHeight / step.marginRange))) / (((step.marginRange - step.deadSpace) / step.step)); + function sign (x) { + return x > 0 ? 1 : x < 0 ? -1 : 0; + } - this.stepPixels = stepPixels; + var as = sign((b.x - a.x) * (point.y - a.y) - (b.y - a.y) * (point.x - a.x)); + var bs = sign((c.x - b.x) * (point.y - b.y) - (c.y - b.y) * (point.x - b.x)); + var cs = sign((a.x - c.x) * (point.y - c.y) - (a.y - c.y) * (point.x - c.x)); - var amountOfSteps = this.height / stepPixels; - var stepDifference = 0; + // each of the three signs must be either equal to each other or zero + return (as == 0 || bs == 0 || as == bs) && + (bs == 0 || cs == 0 || bs == cs) && + (as == 0 || cs == 0 || as == cs); + }; - // the slave axis needs to use the same horizontal lines as the master axis. - if (this.master == false) { - stepPixels = this.stepPixelsForced; - stepDifference = Math.round((this.dom.frame.offsetHeight / stepPixels) - amountOfSteps); - for (var i = 0; i < 0.5 * stepDifference; i++) { - step.previous(); - } - amountOfSteps = this.height / stepPixels; + /** + * Find a data point close to given screen position (x, y) + * @param {Number} x + * @param {Number} y + * @return {Object | null} The closest data point or null if not close to any data point + * @private + */ + Graph3d.prototype._dataPointFromXY = function (x, y) { + var i, + distMax = 100, // px + dataPoint = null, + closestDataPoint = null, + closestDist = null, + center = new Point2d(x, y); - if (this.zeroCrossing != -1 && this.options.alignZeros == true) { - var zeroStepDifference = (step.marginEnd / step.step) - this.zeroCrossing; - if (zeroStepDifference > 0) { - for (var i = 0; i < zeroStepDifference; i++) {step.next();} - } - else if (zeroStepDifference < 0) { - for (var i = 0; i < -zeroStepDifference; i++) {step.previous();} + if (this.style === Graph3d.STYLE.BAR || + this.style === Graph3d.STYLE.BARCOLOR || + this.style === Graph3d.STYLE.BARSIZE) { + // the data points are ordered from far away to closest + for (i = this.dataPoints.length - 1; i >= 0; i--) { + dataPoint = this.dataPoints[i]; + var surfaces = dataPoint.surfaces; + if (surfaces) { + for (var s = surfaces.length - 1; s >= 0; s--) { + // split each surface in two triangles, and see if the center point is inside one of these + var surface = surfaces[s]; + var corners = surface.corners; + var triangle1 = [corners[0].screen, corners[1].screen, corners[2].screen]; + var triangle2 = [corners[2].screen, corners[3].screen, corners[0].screen]; + if (this._insideTriangle(center, triangle1) || + this._insideTriangle(center, triangle2)) { + // return immediately at the first hit + return dataPoint; + } + } } } } else { - amountOfSteps += 0.25; + // find the closest data point, using distance to the center of the point on 2d screen + for (i = 0; i < this.dataPoints.length; i++) { + dataPoint = this.dataPoints[i]; + var point = dataPoint.screen; + if (point) { + var distX = Math.abs(x - point.x); + var distY = Math.abs(y - point.y); + var dist = Math.sqrt(distX * distX + distY * distY); + + if ((closestDist === null || dist < closestDist) && dist < distMax) { + closestDist = dist; + closestDataPoint = dataPoint; + } + } + } } - this.valueAtZero = step.marginEnd; - var marginStartPos = 0; + return closestDataPoint; + }; - // do not draw the first label - var max = 1; + /** + * Display a tooltip for given data point + * @param {Object} dataPoint + * @private + */ + Graph3d.prototype._showTooltip = function (dataPoint) { + var content, line, dot; - // Get the number of decimal places - var decimals; - if(this.options.format[orientation] !== undefined) { - decimals = this.options.format[orientation].decimals; - } + if (!this.tooltip) { + content = document.createElement('div'); + content.style.position = 'absolute'; + content.style.padding = '10px'; + content.style.border = '1px solid #4d4d4d'; + content.style.color = '#1a1a1a'; + content.style.background = 'rgba(255,255,255,0.7)'; + content.style.borderRadius = '2px'; + content.style.boxShadow = '5px 5px 10px rgba(128,128,128,0.5)'; - this.maxLabelSize = 0; - var y = 0; - while (max < Math.round(amountOfSteps)) { - step.next(); - y = Math.round(max * stepPixels); - marginStartPos = max * stepPixels; - var isMajor = step.isMajor(); + line = document.createElement('div'); + line.style.position = 'absolute'; + line.style.height = '40px'; + line.style.width = '0'; + line.style.borderLeft = '1px solid #4d4d4d'; - if (this.options['showMinorLabels'] && isMajor == false || this.master == false && this.options['showMinorLabels'] == true) { - this._redrawLabel(y - 2, step.getCurrent(decimals), orientation, 'yAxis minor', this.props.minorCharHeight); - } + dot = document.createElement('div'); + dot.style.position = 'absolute'; + dot.style.height = '0'; + dot.style.width = '0'; + dot.style.border = '5px solid #4d4d4d'; + dot.style.borderRadius = '5px'; - if (isMajor && this.options['showMajorLabels'] && this.master == true || - this.options['showMinorLabels'] == false && this.master == false && isMajor == true) { - if (y >= 0) { - this._redrawLabel(y - 2, step.getCurrent(decimals), orientation, 'yAxis major', this.props.majorCharHeight); + this.tooltip = { + dataPoint: null, + dom: { + content: content, + line: line, + dot: dot } - this._redrawLine(y, orientation, 'grid horizontal major', this.options.majorLinesOffset, this.props.majorLineWidth); - } - else { - this._redrawLine(y, orientation, 'grid horizontal minor', this.options.minorLinesOffset, this.props.minorLineWidth); - } - - if (this.master == true && step.current == 0) { - this.zeroCrossing = max; - } - - max++; - } - - if (this.master == false) { - this.conversionFactor = y / (this.valueAtZero - step.current); + }; } else { - this.conversionFactor = this.dom.frame.offsetHeight / step.marginRange; + content = this.tooltip.dom.content; + line = this.tooltip.dom.line; + dot = this.tooltip.dom.dot; } - // Note that title is rotated, so we're using the height, not width! - var titleWidth = 0; - if (this.options.title[orientation] !== undefined && this.options.title[orientation].text !== undefined) { - titleWidth = this.props.titleCharHeight; - } - var offset = this.options.icons == true ? Math.max(this.options.iconWidth, titleWidth) + this.options.labelOffsetX + 15 : titleWidth + this.options.labelOffsetX + 15; + this._hideTooltip(); - // this will resize the yAxis to accommodate the labels. - if (this.maxLabelSize > (this.width - offset) && this.options.visible == true) { - this.width = this.maxLabelSize + offset; - this.options.width = this.width + "px"; - DOMutil.cleanupElements(this.DOMelements.lines); - DOMutil.cleanupElements(this.DOMelements.labels); - this.redraw(); - return true; - } - // this will resize the yAxis if it is too big for the labels. - else if (this.maxLabelSize < (this.width - offset) && this.options.visible == true && this.width > this.minWidth) { - this.width = Math.max(this.minWidth,this.maxLabelSize + offset); - this.options.width = this.width + "px"; - DOMutil.cleanupElements(this.DOMelements.lines); - DOMutil.cleanupElements(this.DOMelements.labels); - this.redraw(); - return true; + this.tooltip.dataPoint = dataPoint; + if (typeof this.showTooltip === 'function') { + content.innerHTML = this.showTooltip(dataPoint.point); } else { - DOMutil.cleanupElements(this.DOMelements.lines); - DOMutil.cleanupElements(this.DOMelements.labels); - return false; + content.innerHTML = '' + + '' + + '' + + '' + + '
x:' + dataPoint.point.x + '
y:' + dataPoint.point.y + '
z:' + dataPoint.point.z + '
'; } - }; - DataAxis.prototype.convertValue = function (value) { - var invertedValue = this.valueAtZero - value; - var convertedValue = invertedValue * this.conversionFactor; - return convertedValue; + content.style.left = '0'; + content.style.top = '0'; + this.frame.appendChild(content); + this.frame.appendChild(line); + this.frame.appendChild(dot); + + // calculate sizes + var contentWidth = content.offsetWidth; + var contentHeight = content.offsetHeight; + var lineHeight = line.offsetHeight; + var dotWidth = dot.offsetWidth; + var dotHeight = dot.offsetHeight; + + var left = dataPoint.screen.x - contentWidth / 2; + left = Math.min(Math.max(left, 10), this.frame.clientWidth - 10 - contentWidth); + + line.style.left = dataPoint.screen.x + 'px'; + line.style.top = (dataPoint.screen.y - lineHeight) + 'px'; + content.style.left = left + 'px'; + content.style.top = (dataPoint.screen.y - lineHeight - contentHeight) + 'px'; + dot.style.left = (dataPoint.screen.x - dotWidth / 2) + 'px'; + dot.style.top = (dataPoint.screen.y - dotHeight / 2) + 'px'; }; /** - * Create a label for the axis at position x + * Hide the tooltip when displayed * @private - * @param y - * @param text - * @param orientation - * @param className - * @param characterHeight */ - DataAxis.prototype._redrawLabel = function (y, text, orientation, className, characterHeight) { - // reuse redundant label - var label = DOMutil.getDOMElement('div',this.DOMelements.labels, this.dom.frame); //this.dom.redundant.labels.shift(); - label.className = className; - label.innerHTML = text; - if (orientation == 'left') { - label.style.left = '-' + this.options.labelOffsetX + 'px'; - label.style.textAlign = "right"; - } - else { - label.style.right = '-' + this.options.labelOffsetX + 'px'; - label.style.textAlign = "left"; + Graph3d.prototype._hideTooltip = function () { + if (this.tooltip) { + this.tooltip.dataPoint = null; + + for (var prop in this.tooltip.dom) { + if (this.tooltip.dom.hasOwnProperty(prop)) { + var elem = this.tooltip.dom[prop]; + if (elem && elem.parentNode) { + elem.parentNode.removeChild(elem); + } + } + } } + }; - label.style.top = y - 0.5 * characterHeight + this.options.labelOffsetY + 'px'; + /**--------------------------------------------------------------------------**/ - text += ''; - var largestWidth = Math.max(this.props.majorCharWidth,this.props.minorCharWidth); - if (this.maxLabelSize < text.length * largestWidth) { - this.maxLabelSize = text.length * largestWidth; - } - }; + /** + * Get the horizontal mouse position from a mouse event + * @param {Event} event + * @return {Number} mouse x + */ + function getMouseX (event) { + if ('clientX' in event) return event.clientX; + return event.targetTouches[0] && event.targetTouches[0].clientX || 0; + } /** - * Create a minor line for the axis at position y - * @param y - * @param orientation - * @param className - * @param offset - * @param width + * Get the vertical mouse position from a mouse event + * @param {Event} event + * @return {Number} mouse y */ - DataAxis.prototype._redrawLine = function (y, orientation, className, offset, width) { - if (this.master == true) { - var line = DOMutil.getDOMElement('div',this.DOMelements.lines, this.dom.lineContainer);//this.dom.redundant.lines.shift(); - line.className = className; - line.innerHTML = ''; + function getMouseY (event) { + if ('clientY' in event) return event.clientY; + return event.targetTouches[0] && event.targetTouches[0].clientY || 0; + } - if (orientation == 'left') { - line.style.left = (this.width - offset) + 'px'; - } - else { - line.style.right = (this.width - offset) + 'px'; - } + module.exports = Graph3d; - line.style.width = width + 'px'; - line.style.top = y + 'px'; - } - }; +/***/ }, +/* 11 */ +/***/ function(module, exports, __webpack_require__) { + + /** - * Create a title for the axis - * @private - * @param orientation + * Expose `Emitter`. */ - DataAxis.prototype._redrawTitle = function (orientation) { - DOMutil.prepareElements(this.DOMelements.title); - // Check if the title is defined for this axes - if (this.options.title[orientation] !== undefined && this.options.title[orientation].text !== undefined) { - var title = DOMutil.getDOMElement('div', this.DOMelements.title, this.dom.frame); - title.className = 'yAxis title ' + orientation; - title.innerHTML = this.options.title[orientation].text; + module.exports = Emitter; - // Add style - if provided - if (this.options.title[orientation].style !== undefined) { - util.addCssText(title, this.options.title[orientation].style); - } + /** + * Initialize a new `Emitter`. + * + * @api public + */ - if (orientation == 'left') { - title.style.left = this.props.titleCharHeight + 'px'; - } - else { - title.style.right = this.props.titleCharHeight + 'px'; - } + function Emitter(obj) { + if (obj) return mixin(obj); + }; - title.style.width = this.height + 'px'; + /** + * Mixin the emitter properties. + * + * @param {Object} obj + * @return {Object} + * @api private + */ + + function mixin(obj) { + for (var key in Emitter.prototype) { + obj[key] = Emitter.prototype[key]; } + return obj; + } - // we need to clean up in case we did not use all elements. - DOMutil.cleanupElements(this.DOMelements.title); + /** + * Listen on the given `event` with `fn`. + * + * @param {String} event + * @param {Function} fn + * @return {Emitter} + * @api public + */ + + Emitter.prototype.on = + Emitter.prototype.addEventListener = function(event, fn){ + this._callbacks = this._callbacks || {}; + (this._callbacks[event] = this._callbacks[event] || []) + .push(fn); + return this; }; + /** + * Adds an `event` listener that will be invoked a single + * time then automatically removed. + * + * @param {String} event + * @param {Function} fn + * @return {Emitter} + * @api public + */ + + Emitter.prototype.once = function(event, fn){ + var self = this; + this._callbacks = this._callbacks || {}; + function on() { + self.off(event, on); + fn.apply(this, arguments); + } + on.fn = fn; + this.on(event, on); + return this; + }; /** - * Determine the size of text on the axis (both major and minor axis). - * The size is calculated only once and then cached in this.props. - * @private + * Remove the given callback for `event` or all + * registered callbacks. + * + * @param {String} event + * @param {Function} fn + * @return {Emitter} + * @api public */ - DataAxis.prototype._calculateCharSize = function () { - // determine the char width and height on the minor axis - if (!('minorCharHeight' in this.props)) { - var textMinor = document.createTextNode('0'); - var measureCharMinor = document.createElement('div'); - measureCharMinor.className = 'yAxis minor measure'; - measureCharMinor.appendChild(textMinor); - this.dom.frame.appendChild(measureCharMinor); - this.props.minorCharHeight = measureCharMinor.clientHeight; - this.props.minorCharWidth = measureCharMinor.clientWidth; + Emitter.prototype.off = + Emitter.prototype.removeListener = + Emitter.prototype.removeAllListeners = + Emitter.prototype.removeEventListener = function(event, fn){ + this._callbacks = this._callbacks || {}; - this.dom.frame.removeChild(measureCharMinor); + // all + if (0 == arguments.length) { + this._callbacks = {}; + return this; } - if (!('majorCharHeight' in this.props)) { - var textMajor = document.createTextNode('0'); - var measureCharMajor = document.createElement('div'); - measureCharMajor.className = 'yAxis major measure'; - measureCharMajor.appendChild(textMajor); - this.dom.frame.appendChild(measureCharMajor); + // specific event + var callbacks = this._callbacks[event]; + if (!callbacks) return this; - this.props.majorCharHeight = measureCharMajor.clientHeight; - this.props.majorCharWidth = measureCharMajor.clientWidth; + // remove all handlers + if (1 == arguments.length) { + delete this._callbacks[event]; + return this; + } - this.dom.frame.removeChild(measureCharMajor); + // remove specific handler + var cb; + for (var i = 0; i < callbacks.length; i++) { + cb = callbacks[i]; + if (cb === fn || cb.fn === fn) { + callbacks.splice(i, 1); + break; + } } + return this; + }; - if (!('titleCharHeight' in this.props)) { - var textTitle = document.createTextNode('0'); - var measureCharTitle = document.createElement('div'); - measureCharTitle.className = 'yAxis title measure'; - measureCharTitle.appendChild(textTitle); - this.dom.frame.appendChild(measureCharTitle); + /** + * Emit `event` with the given args. + * + * @param {String} event + * @param {Mixed} ... + * @return {Emitter} + */ - this.props.titleCharHeight = measureCharTitle.clientHeight; - this.props.titleCharWidth = measureCharTitle.clientWidth; + Emitter.prototype.emit = function(event){ + this._callbacks = this._callbacks || {}; + var args = [].slice.call(arguments, 1) + , callbacks = this._callbacks[event]; - this.dom.frame.removeChild(measureCharTitle); + if (callbacks) { + callbacks = callbacks.slice(0); + for (var i = 0, len = callbacks.length; i < len; ++i) { + callbacks[i].apply(this, args); + } } + + return this; }; /** - * Snap a date to a rounded value. - * The snap intervals are dependent on the current scale and step. - * @param {Date} date the date to be snapped. - * @return {Date} snappedDate + * Return array of callbacks for `event`. + * + * @param {String} event + * @return {Array} + * @api public */ - DataAxis.prototype.snap = function(date) { - return this.step.snap(date); + + Emitter.prototype.listeners = function(event){ + this._callbacks = this._callbacks || {}; + return this._callbacks[event] || []; }; - module.exports = DataAxis; + /** + * Check if this emitter has `event` handlers. + * + * @param {String} event + * @return {Boolean} + * @api public + */ + + Emitter.prototype.hasListeners = function(event){ + return !! this.listeners(event).length; + }; /***/ }, -/* 24 */ +/* 12 */ /***/ function(module, exports, __webpack_require__) { - var util = __webpack_require__(1); - var DOMutil = __webpack_require__(2); - var Line = __webpack_require__(51); - var Bar = __webpack_require__(52); - var Points = __webpack_require__(53); - /** - * /** - * @param {object} group | the object of the group from the dataset - * @param {string} groupId | ID of the group - * @param {object} options | the default options - * @param {array} groupsUsingDefaultStyles | this array has one entree. - * It is passed as an array so it is passed by reference. - * It enumerates through the default styles - * @constructor + * @prototype Point3d + * @param {Number} [x] + * @param {Number} [y] + * @param {Number} [z] */ - function GraphGroup (group, groupId, options, groupsUsingDefaultStyles) { - this.id = groupId; - var fields = ['sampling','style','sort','yAxisOrientation','barChart','drawPoints','shaded','catmullRom'] - this.options = util.selectiveBridgeObject(fields,options); - this.usingDefaultStyle = group.className === undefined; - this.groupsUsingDefaultStyles = groupsUsingDefaultStyles; - this.zeroPosition = 0; - this.update(group); - if (this.usingDefaultStyle == true) { - this.groupsUsingDefaultStyles[0] += 1; - } - this.itemsData = []; - this.visible = group.visible === undefined ? true : group.visible; - } - + function Point3d(x, y, z) { + this.x = x !== undefined ? x : 0; + this.y = y !== undefined ? y : 0; + this.z = z !== undefined ? z : 0; + }; /** - * this loads a reference to all items in this group into this group. - * @param {array} items + * Subtract the two provided points, returns a-b + * @param {Point3d} a + * @param {Point3d} b + * @return {Point3d} a-b */ - GraphGroup.prototype.setItems = function(items) { - if (items != null) { - this.itemsData = items; - if (this.options.sort == true) { - this.itemsData.sort(function (a,b) {return a.x - b.x;}) - } - } - else { - this.itemsData = []; - } + Point3d.subtract = function(a, b) { + var sub = new Point3d(); + sub.x = a.x - b.x; + sub.y = a.y - b.y; + sub.z = a.z - b.z; + return sub; }; - /** - * this is used for plotting barcharts, this way, we only have to calculate it once. - * @param pos + * Add the two provided points, returns a+b + * @param {Point3d} a + * @param {Point3d} b + * @return {Point3d} a+b */ - GraphGroup.prototype.setZeroPosition = function(pos) { - this.zeroPosition = pos; + Point3d.add = function(a, b) { + var sum = new Point3d(); + sum.x = a.x + b.x; + sum.y = a.y + b.y; + sum.z = a.z + b.z; + return sum; }; - /** - * set the options of the graph group over the default options. - * @param options + * Calculate the average of two 3d points + * @param {Point3d} a + * @param {Point3d} b + * @return {Point3d} The average, (a+b)/2 */ - GraphGroup.prototype.setOptions = function(options) { - if (options !== undefined) { - var fields = ['sampling','style','sort','yAxisOrientation','barChart']; - util.selectiveDeepExtend(fields, this.options, options); + Point3d.avg = function(a, b) { + return new Point3d( + (a.x + b.x) / 2, + (a.y + b.y) / 2, + (a.z + b.z) / 2 + ); + }; - util.mergeOptions(this.options, options,'catmullRom'); - util.mergeOptions(this.options, options,'drawPoints'); - util.mergeOptions(this.options, options,'shaded'); + /** + * Calculate the cross product of the two provided points, returns axb + * Documentation: http://en.wikipedia.org/wiki/Cross_product + * @param {Point3d} a + * @param {Point3d} b + * @return {Point3d} cross product axb + */ + Point3d.crossProduct = function(a, b) { + var crossproduct = new Point3d(); - if (options.catmullRom) { - if (typeof options.catmullRom == 'object') { - if (options.catmullRom.parametrization) { - if (options.catmullRom.parametrization == 'uniform') { - this.options.catmullRom.alpha = 0; - } - else if (options.catmullRom.parametrization == 'chordal') { - this.options.catmullRom.alpha = 1.0; - } - else { - this.options.catmullRom.parametrization = 'centripetal'; - this.options.catmullRom.alpha = 0.5; - } - } - } - } - } + crossproduct.x = a.y * b.z - a.z * b.y; + crossproduct.y = a.z * b.x - a.x * b.z; + crossproduct.z = a.x * b.y - a.y * b.x; - if (this.options.style == 'line') { - this.type = new Line(this.id, this.options); - } - else if (this.options.style == 'bar') { - this.type = new Bar(this.id, this.options); - } - else if (this.options.style == 'points') { - this.type = new Points(this.id, this.options); - } + return crossproduct; }; /** - * this updates the current group class with the latest group dataset entree, used in _updateGroup in linegraph - * @param group + * Rtrieve the length of the vector (or the distance from this point to the origin + * @return {Number} length */ - GraphGroup.prototype.update = function(group) { - this.group = group; - this.content = group.content || 'graph'; - this.className = group.className || this.className || "graphGroup" + this.groupsUsingDefaultStyles[0] % 10; - this.visible = group.visible === undefined ? true : group.visible; - this.style = group.style; - this.setOptions(group.options); + Point3d.prototype.length = function() { + return Math.sqrt( + this.x * this.x + + this.y * this.y + + this.z * this.z + ); }; + module.exports = Point3d; - /** - * draw the icon for the legend. - * - * @param x - * @param y - * @param JSONcontainer - * @param SVGcontainer - * @param iconWidth - * @param iconHeight - */ - GraphGroup.prototype.drawIcon = function(x, y, JSONcontainer, SVGcontainer, iconWidth, iconHeight) { - var fillHeight = iconHeight * 0.5; - var path, fillPath; - - var outline = DOMutil.getSVGElement("rect", JSONcontainer, SVGcontainer); - outline.setAttributeNS(null, "x", x); - outline.setAttributeNS(null, "y", y - fillHeight); - outline.setAttributeNS(null, "width", iconWidth); - outline.setAttributeNS(null, "height", 2*fillHeight); - outline.setAttributeNS(null, "class", "outline"); - if (this.options.style == 'line') { - path = DOMutil.getSVGElement("path", JSONcontainer, SVGcontainer); - path.setAttributeNS(null, "class", this.className); - if(this.style !== undefined) { - path.setAttributeNS(null, "style", this.style); - } +/***/ }, +/* 13 */ +/***/ function(module, exports, __webpack_require__) { - path.setAttributeNS(null, "d", "M" + x + ","+y+" L" + (x + iconWidth) + ","+y+""); - if (this.options.shaded.enabled == true) { - fillPath = DOMutil.getSVGElement("path", JSONcontainer, SVGcontainer); - if (this.options.shaded.orientation == 'top') { - fillPath.setAttributeNS(null, "d", "M"+x+", " + (y - fillHeight) + - "L"+x+","+y+" L"+ (x + iconWidth) + ","+y+" L"+ (x + iconWidth) + "," + (y - fillHeight)); - } - else { - fillPath.setAttributeNS(null, "d", "M"+x+","+y+" " + - "L"+x+"," + (y + fillHeight) + " " + - "L"+ (x + iconWidth) + "," + (y + fillHeight) + - "L"+ (x + iconWidth) + ","+y); - } - fillPath.setAttributeNS(null, "class", this.className + " iconFill"); - } + /** + * @prototype Point2d + * @param {Number} [x] + * @param {Number} [y] + */ + function Point2d (x, y) { + this.x = x !== undefined ? x : 0; + this.y = y !== undefined ? y : 0; + } - if (this.options.drawPoints.enabled == true) { - DOMutil.drawPoint(x + 0.5 * iconWidth,y, this, JSONcontainer, SVGcontainer); - } - } - else { - var barWidth = Math.round(0.3 * iconWidth); - var bar1Height = Math.round(0.4 * iconHeight); - var bar2Height = Math.round(0.75 * iconHeight); + module.exports = Point2d; - var offset = Math.round((iconWidth - (2 * barWidth))/3); - DOMutil.drawBar(x + 0.5*barWidth + offset , y + fillHeight - bar1Height - 1, barWidth, bar1Height, this.className + ' bar', JSONcontainer, SVGcontainer); - DOMutil.drawBar(x + 1.5*barWidth + offset + 2, y + fillHeight - bar2Height - 1, barWidth, bar2Height, this.className + ' bar', JSONcontainer, SVGcontainer); - } - }; +/***/ }, +/* 14 */ +/***/ function(module, exports, __webpack_require__) { + var Point3d = __webpack_require__(12); /** - * return the legend entree for this group. + * @class Camera + * The camera is mounted on a (virtual) camera arm. The camera arm can rotate + * The camera is always looking in the direction of the origin of the arm. + * This way, the camera always rotates around one fixed point, the location + * of the camera arm. * - * @param iconWidth - * @param iconHeight - * @returns {{icon: HTMLElement, label: (group.content|*|string), orientation: (.options.yAxisOrientation|*)}} + * Documentation: + * http://en.wikipedia.org/wiki/3D_projection */ - GraphGroup.prototype.getLegend = function(iconWidth, iconHeight) { - var svg = document.createElementNS('http://www.w3.org/2000/svg',"svg"); - this.drawIcon(0,0.5*iconHeight,[],svg,iconWidth,iconHeight); - return {icon: svg, label: this.content, orientation:this.options.yAxisOrientation}; - } + function Camera() { + this.armLocation = new Point3d(); + this.armRotation = {}; + this.armRotation.horizontal = 0; + this.armRotation.vertical = 0; + this.armLength = 1.7; - GraphGroup.prototype.getYRange = function(groupData) { - return this.type.getYRange(groupData); - } + this.cameraLocation = new Point3d(); + this.cameraRotation = new Point3d(0.5*Math.PI, 0, 0); - GraphGroup.prototype.draw = function(dataset, group, framework) { - this.type.draw(dataset, group, framework); + this.calculateCameraOrientation(); } - - module.exports = GraphGroup; - - -/***/ }, -/* 25 */ -/***/ function(module, exports, __webpack_require__) { - - var util = __webpack_require__(1); - var stack = __webpack_require__(18); - var RangeItem = __webpack_require__(35); - /** - * @constructor Group - * @param {Number | String} groupId - * @param {Object} data - * @param {ItemSet} itemSet + * Set the location (origin) of the arm + * @param {Number} x Normalized value of x + * @param {Number} y Normalized value of y + * @param {Number} z Normalized value of z */ - function Group (groupId, data, itemSet) { - this.groupId = groupId; - this.subgroups = {}; - this.subgroupIndex = 0; - this.subgroupOrderer = data && data.subgroupOrder; - this.itemSet = itemSet; + Camera.prototype.setArmLocation = function(x, y, z) { + this.armLocation.x = x; + this.armLocation.y = y; + this.armLocation.z = z; - this.dom = {}; - this.props = { - label: { - width: 0, - height: 0 - } - }; - this.className = null; + this.calculateCameraOrientation(); + }; - this.items = {}; // items filtered by groupId of this group - this.visibleItems = []; // items currently visible in window - this.orderedItems = { - byStart: [], - byEnd: [] - }; - this.checkRangedItems = false; // needed to refresh the ranged items if the window is programatically changed with NO overlap. - var me = this; - this.itemSet.body.emitter.on("checkRangedItems", function () { - me.checkRangedItems = true; - }) + /** + * Set the rotation of the camera arm + * @param {Number} horizontal The horizontal rotation, between 0 and 2*PI. + * Optional, can be left undefined. + * @param {Number} vertical The vertical rotation, between 0 and 0.5*PI + * if vertical=0.5*PI, the graph is shown from the + * top. Optional, can be left undefined. + */ + Camera.prototype.setArmRotation = function(horizontal, vertical) { + if (horizontal !== undefined) { + this.armRotation.horizontal = horizontal; + } - this._create(); + if (vertical !== undefined) { + this.armRotation.vertical = vertical; + if (this.armRotation.vertical < 0) this.armRotation.vertical = 0; + if (this.armRotation.vertical > 0.5*Math.PI) this.armRotation.vertical = 0.5*Math.PI; + } - this.setData(data); - } + if (horizontal !== undefined || vertical !== undefined) { + this.calculateCameraOrientation(); + } + }; /** - * Create DOM elements for the group - * @private + * Retrieve the current arm rotation + * @return {object} An object with parameters horizontal and vertical */ - Group.prototype._create = function() { - var label = document.createElement('div'); - label.className = 'vlabel'; - this.dom.label = label; + Camera.prototype.getArmRotation = function() { + var rot = {}; + rot.horizontal = this.armRotation.horizontal; + rot.vertical = this.armRotation.vertical; - var inner = document.createElement('div'); - inner.className = 'inner'; - label.appendChild(inner); - this.dom.inner = inner; + return rot; + }; - var foreground = document.createElement('div'); - foreground.className = 'group'; - foreground['timeline-group'] = this; - this.dom.foreground = foreground; + /** + * Set the (normalized) length of the camera arm. + * @param {Number} length A length between 0.71 and 5.0 + */ + Camera.prototype.setArmLength = function(length) { + if (length === undefined) + return; - this.dom.background = document.createElement('div'); - this.dom.background.className = 'group'; + this.armLength = length; - this.dom.axis = document.createElement('div'); - this.dom.axis.className = 'group'; + // Radius must be larger than the corner of the graph, + // which has a distance of sqrt(0.5^2+0.5^2) = 0.71 from the center of the + // graph + if (this.armLength < 0.71) this.armLength = 0.71; + if (this.armLength > 5.0) this.armLength = 5.0; - // create a hidden marker to detect when the Timelines container is attached - // to the DOM, or the style of a parent of the Timeline is changed from - // display:none is changed to visible. - this.dom.marker = document.createElement('div'); - this.dom.marker.style.visibility = 'hidden'; // TODO: ask jos why this is not none? - this.dom.marker.innerHTML = '?'; - this.dom.background.appendChild(this.dom.marker); + this.calculateCameraOrientation(); }; /** - * Set the group data for this group - * @param {Object} data Group data, can contain properties content and className + * Retrieve the arm length + * @return {Number} length */ - Group.prototype.setData = function(data) { - // update contents - var content = data && data.content; - if (content instanceof Element) { - this.dom.inner.appendChild(content); - } - else if (content !== undefined && content !== null) { - this.dom.inner.innerHTML = content; - } - else { - this.dom.inner.innerHTML = this.groupId || ''; // groupId can be null - } - - // update title - this.dom.label.title = data && data.title || ''; - - if (!this.dom.inner.firstChild) { - util.addClassName(this.dom.inner, 'hidden'); - } - else { - util.removeClassName(this.dom.inner, 'hidden'); - } + Camera.prototype.getArmLength = function() { + return this.armLength; + }; - // update className - var className = data && data.className || null; - if (className != this.className) { - if (this.className) { - util.removeClassName(this.dom.label, this.className); - util.removeClassName(this.dom.foreground, this.className); - util.removeClassName(this.dom.background, this.className); - util.removeClassName(this.dom.axis, this.className); - } - util.addClassName(this.dom.label, className); - util.addClassName(this.dom.foreground, className); - util.addClassName(this.dom.background, className); - util.addClassName(this.dom.axis, className); - this.className = className; - } + /** + * Retrieve the camera location + * @return {Point3d} cameraLocation + */ + Camera.prototype.getCameraLocation = function() { + return this.cameraLocation; + }; - // update style - if (this.style) { - util.removeCssText(this.dom.label, this.style); - this.style = null; - } - if (data && data.style) { - util.addCssText(this.dom.label, data.style); - this.style = data.style; - } + /** + * Retrieve the camera rotation + * @return {Point3d} cameraRotation + */ + Camera.prototype.getCameraRotation = function() { + return this.cameraRotation; }; /** - * Get the width of the group label - * @return {number} width + * Calculate the location and rotation of the camera based on the + * position and orientation of the camera arm */ - Group.prototype.getLabelWidth = function() { - return this.props.label.width; + Camera.prototype.calculateCameraOrientation = function() { + // calculate location of the camera + this.cameraLocation.x = this.armLocation.x - this.armLength * Math.sin(this.armRotation.horizontal) * Math.cos(this.armRotation.vertical); + this.cameraLocation.y = this.armLocation.y - this.armLength * Math.cos(this.armRotation.horizontal) * Math.cos(this.armRotation.vertical); + this.cameraLocation.z = this.armLocation.z + this.armLength * Math.sin(this.armRotation.vertical); + + // calculate rotation of the camera + this.cameraRotation.x = Math.PI/2 - this.armRotation.vertical; + this.cameraRotation.y = 0; + this.cameraRotation.z = -this.armRotation.horizontal; }; + module.exports = Camera; + +/***/ }, +/* 15 */ +/***/ function(module, exports, __webpack_require__) { + + var DataView = __webpack_require__(9); /** - * Repaint this group - * @param {{start: number, end: number}} range - * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin - * @param {boolean} [restack=false] Force restacking of all items - * @return {boolean} Returns true if the group is resized + * @class Filter + * + * @param {DataSet} data The google data table + * @param {Number} column The index of the column to be filtered + * @param {Graph} graph The graph */ - Group.prototype.redraw = function(range, margin, restack) { - var resized = false; + function Filter (data, column, graph) { + this.data = data; + this.column = column; + this.graph = graph; // the parent graph - this.visibleItems = this._updateVisibleItems(this.orderedItems, this.visibleItems, range); + this.index = undefined; + this.value = undefined; - // force recalculation of the height of the items when the marker height changed - // (due to the Timeline being attached to the DOM or changed from display:none to visible) - var markerHeight = this.dom.marker.clientHeight; - if (markerHeight != this.lastMarkerHeight) { - this.lastMarkerHeight = markerHeight; + // read all distinct values and select the first one + this.values = graph.getDistinctValues(data.get(), this.column); - util.forEach(this.items, function (item) { - item.dirty = true; - if (item.displayed) item.redraw(); - }); + // sort both numeric and string values correctly + this.values.sort(function (a, b) { + return a > b ? 1 : a < b ? -1 : 0; + }); - restack = true; + if (this.values.length > 0) { + this.selectValue(0); } - // reposition visible items vertically - if (this.itemSet.options.stack) { // TODO: ugly way to access options... - stack.stack(this.visibleItems, margin, restack); + // create an array with the filtered datapoints. this will be loaded afterwards + this.dataPoints = []; + + this.loaded = false; + this.onLoadCallback = undefined; + + if (graph.animationPreload) { + this.loaded = false; + this.loadInBackground(); } - else { // no stacking - stack.nostack(this.visibleItems, margin, this.subgroups); + else { + this.loaded = true; } + }; - // recalculate the height of the group - var height = this._calculateHeight(margin); - // calculate actual size and position - var foreground = this.dom.foreground; - this.top = foreground.offsetTop; - this.left = foreground.offsetLeft; - this.width = foreground.offsetWidth; - resized = util.updateProperty(this, 'height', height) || resized; + /** + * Return the label + * @return {string} label + */ + Filter.prototype.isLoaded = function() { + return this.loaded; + }; - // recalculate size of label - resized = util.updateProperty(this.props.label, 'width', this.dom.inner.clientWidth) || resized; - resized = util.updateProperty(this.props.label, 'height', this.dom.inner.clientHeight) || resized; - // apply new height - this.dom.background.style.height = height + 'px'; - this.dom.foreground.style.height = height + 'px'; - this.dom.label.style.height = height + 'px'; + /** + * Return the loaded progress + * @return {Number} percentage between 0 and 100 + */ + Filter.prototype.getLoadedProgress = function() { + var len = this.values.length; - // update vertical position of items after they are re-stacked and the height of the group is calculated - for (var i = 0, ii = this.visibleItems.length; i < ii; i++) { - var item = this.visibleItems[i]; - item.repositionY(margin); + var i = 0; + while (this.dataPoints[i]) { + i++; } - return resized; + return Math.round(i / len * 100); }; + /** - * recalculate the height of the group - * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin - * @returns {number} Returns the height - * @private + * Return the label + * @return {string} label */ - Group.prototype._calculateHeight = function (margin) { - // recalculate the height of the group - var height; - var visibleItems = this.visibleItems; - //var visibleSubgroups = []; - //this.visibleSubgroups = 0; - this.resetSubgroups(); - var me = this; - if (visibleItems.length) { - var min = visibleItems[0].top; - var max = visibleItems[0].top + visibleItems[0].height; - util.forEach(visibleItems, function (item) { - min = Math.min(min, item.top); - max = Math.max(max, (item.top + item.height)); - if (item.data.subgroup !== undefined) { - me.subgroups[item.data.subgroup].height = Math.max(me.subgroups[item.data.subgroup].height,item.height); - me.subgroups[item.data.subgroup].visible = true; - //if (visibleSubgroups.indexOf(item.data.subgroup) == -1){ - // visibleSubgroups.push(item.data.subgroup); - // me.visibleSubgroups += 1; - //} - } - }); - if (min > margin.axis) { - // there is an empty gap between the lowest item and the axis - var offset = min - margin.axis; - max -= offset; - util.forEach(visibleItems, function (item) { - item.top -= offset; - }); - } - height = max + margin.item.vertical / 2; - } - else { - height = margin.axis + margin.item.vertical; - } - height = Math.max(height, this.props.label.height); - - return height; + Filter.prototype.getLabel = function() { + return this.graph.filterLabel; }; + /** - * Show this group: attach to the DOM + * Return the columnIndex of the filter + * @return {Number} columnIndex */ - Group.prototype.show = function() { - if (!this.dom.label.parentNode) { - this.itemSet.dom.labelSet.appendChild(this.dom.label); - } - - if (!this.dom.foreground.parentNode) { - this.itemSet.dom.foreground.appendChild(this.dom.foreground); - } + Filter.prototype.getColumn = function() { + return this.column; + }; - if (!this.dom.background.parentNode) { - this.itemSet.dom.background.appendChild(this.dom.background); - } + /** + * Return the currently selected value. Returns undefined if there is no selection + * @return {*} value + */ + Filter.prototype.getSelectedValue = function() { + if (this.index === undefined) + return undefined; - if (!this.dom.axis.parentNode) { - this.itemSet.dom.axis.appendChild(this.dom.axis); - } + return this.values[this.index]; }; /** - * Hide this group: remove from the DOM + * Retrieve all values of the filter + * @return {Array} values */ - Group.prototype.hide = function() { - var label = this.dom.label; - if (label.parentNode) { - label.parentNode.removeChild(label); - } - - var foreground = this.dom.foreground; - if (foreground.parentNode) { - foreground.parentNode.removeChild(foreground); - } + Filter.prototype.getValues = function() { + return this.values; + }; - var background = this.dom.background; - if (background.parentNode) { - background.parentNode.removeChild(background); - } + /** + * Retrieve one value of the filter + * @param {Number} index + * @return {*} value + */ + Filter.prototype.getValue = function(index) { + if (index >= this.values.length) + throw 'Error: index out of range'; - var axis = this.dom.axis; - if (axis.parentNode) { - axis.parentNode.removeChild(axis); - } + return this.values[index]; }; + /** - * Add an item to the group - * @param {Item} item + * Retrieve the (filtered) dataPoints for the currently selected filter index + * @param {Number} [index] (optional) + * @return {Array} dataPoints */ - Group.prototype.add = function(item) { - this.items[item.id] = item; - item.setParent(this); + Filter.prototype._getDataPoints = function(index) { + if (index === undefined) + index = this.index; - // add to - if (item.data.subgroup !== undefined) { - if (this.subgroups[item.data.subgroup] === undefined) { - this.subgroups[item.data.subgroup] = {height:0, visible: false, index:this.subgroupIndex, items: []}; - this.subgroupIndex++; - } - this.subgroups[item.data.subgroup].items.push(item); - } - this.orderSubgroups(); + if (index === undefined) + return []; - if (this.visibleItems.indexOf(item) == -1) { - var range = this.itemSet.body.range; // TODO: not nice accessing the range like this - this._checkIfVisible(item, this.visibleItems, range); + var dataPoints; + if (this.dataPoints[index]) { + dataPoints = this.dataPoints[index]; } - }; + else { + var f = {}; + f.column = this.column; + f.value = this.values[index]; - Group.prototype.orderSubgroups = function() { - if (this.subgroupOrderer !== undefined) { - var sortArray = []; - if (typeof this.subgroupOrderer == 'string') { - for (var subgroup in this.subgroups) { - sortArray.push({subgroup: subgroup, sortField: this.subgroups[subgroup].items[0].data[this.subgroupOrderer]}) - } - sortArray.sort(function (a, b) { - return a.sortField - b.sortField; - }) - } - else if (typeof this.subgroupOrderer == 'function') { - for (var subgroup in this.subgroups) { - sortArray.push(this.subgroups[subgroup].items[0].data); - } - sortArray.sort(this.subgroupOrderer); - } + var dataView = new DataView(this.data,{filter: function (item) {return (item[f.column] == f.value);}}).get(); + dataPoints = this.graph._getDataPoints(dataView); - if (sortArray.length > 0) { - for (var i = 0; i < sortArray.length; i++) { - this.subgroups[sortArray[i].subgroup].index = i; - } - } + this.dataPoints[index] = dataPoints; } - }; - Group.prototype.resetSubgroups = function() { - for (var subgroup in this.subgroups) { - if (this.subgroups.hasOwnProperty(subgroup)) { - this.subgroups[subgroup].visible = false; - } - } + return dataPoints; }; - /** - * Remove an item from the group - * @param {Item} item - */ - Group.prototype.remove = function(item) { - delete this.items[item.id]; - item.setParent(null); - - // remove from visible items - var index = this.visibleItems.indexOf(item); - if (index != -1) this.visibleItems.splice(index, 1); - - // TODO: also remove from ordered items? - }; /** - * Remove an item from the corresponding DataSet - * @param {Item} item + * Set a callback function when the filter is fully loaded. */ - Group.prototype.removeFromDataSet = function(item) { - this.itemSet.removeItem(item.id); + Filter.prototype.setOnLoadCallback = function(callback) { + this.onLoadCallback = callback; }; /** - * Reorder the items + * Add a value to the list with available values for this filter + * No double entries will be created. + * @param {Number} index */ - Group.prototype.order = function() { - var array = util.toArray(this.items); - var startArray = []; - var endArray = []; - - for (var i = 0; i < array.length; i++) { - if (array[i].data.end !== undefined) { - endArray.push(array[i]); - } - startArray.push(array[i]); - } - this.orderedItems = { - byStart: startArray, - byEnd: endArray - }; + Filter.prototype.selectValue = function(index) { + if (index >= this.values.length) + throw 'Error: index out of range'; - stack.orderByStart(this.orderedItems.byStart); - stack.orderByEnd(this.orderedItems.byEnd); + this.index = index; + this.value = this.values[index]; }; - /** - * Update the visible items - * @param {{byStart: Item[], byEnd: Item[]}} orderedItems All items ordered by start date and by end date - * @param {Item[]} visibleItems The previously visible items. - * @param {{start: number, end: number}} range Visible range - * @return {Item[]} visibleItems The new visible items. - * @private + * Load all filtered rows in the background one by one + * Start this method without providing an index! */ - Group.prototype._updateVisibleItems = function(orderedItems, oldVisibleItems, range) { - var visibleItems = []; - var visibleItemsLookup = {}; // we keep this to quickly look up if an item already exists in the list without using indexOf on visibleItems - var interval = (range.end - range.start) / 4; - var lowerBound = range.start - interval; - var upperBound = range.end + interval; - var item, i; + Filter.prototype.loadInBackground = function(index) { + if (index === undefined) + index = 0; - // this function is used to do the binary search. - var searchFunction = function (value) { - if (value < lowerBound) {return -1;} - else if (value <= upperBound) {return 0;} - else {return 1;} + var frame = this.graph.frame; + + if (index < this.values.length) { + var dataPointsTemp = this._getDataPoints(index); + //this.graph.redrawInfo(); // TODO: not neat + + // create a progress box + if (frame.progress === undefined) { + frame.progress = document.createElement('DIV'); + frame.progress.style.position = 'absolute'; + frame.progress.style.color = 'gray'; + frame.appendChild(frame.progress); + } + var progress = this.getLoadedProgress(); + frame.progress.innerHTML = 'Loading animation... ' + progress + '%'; + // TODO: this is no nice solution... + frame.progress.style.bottom = 60 + 'px'; // TODO: use height of slider + frame.progress.style.left = 10 + 'px'; + + var me = this; + setTimeout(function() {me.loadInBackground(index+1);}, 10); + this.loaded = false; } + else { + this.loaded = true; - // first check if the items that were in view previously are still in view. - // IMPORTANT: this handles the case for the items with startdate before the window and enddate after the window! - // also cleans up invisible items. - if (oldVisibleItems.length > 0) { - for (i = 0; i < oldVisibleItems.length; i++) { - this._checkIfVisibleWithReference(oldVisibleItems[i], visibleItems, visibleItemsLookup, range); + // remove the progress box + if (frame.progress !== undefined) { + frame.removeChild(frame.progress); + frame.progress = undefined; } + + if (this.onLoadCallback) + this.onLoadCallback(); } + }; - // we do a binary search for the items that have only start values. - var initialPosByStart = util.binarySearchCustom(orderedItems.byStart, searchFunction, 'data','start'); + module.exports = Filter; - // trace the visible items from the inital start pos both ways until an invisible item is found, we only look at the start values. - this._traceVisible(initialPosByStart, orderedItems.byStart, visibleItems, visibleItemsLookup, function (item) { - return (item.data.start < lowerBound || item.data.start > upperBound); - }); - // if the window has changed programmatically without overlapping the old window, the ranged items with start < lowerBound and end > upperbound are not shown. - // We therefore have to brute force check all items in the byEnd list - if (this.checkRangedItems == true) { - this.checkRangedItems = false; - for (i = 0; i < orderedItems.byEnd.length; i++) { - this._checkIfVisibleWithReference(orderedItems.byEnd[i], visibleItems, visibleItemsLookup, range); - } - } - else { - // we do a binary search for the items that have defined end times. - var initialPosByEnd = util.binarySearchCustom(orderedItems.byEnd, searchFunction, 'data','end'); +/***/ }, +/* 16 */ +/***/ function(module, exports, __webpack_require__) { - // trace the visible items from the inital start pos both ways until an invisible item is found, we only look at the end values. - this._traceVisible(initialPosByEnd, orderedItems.byEnd, visibleItems, visibleItemsLookup, function (item) { - return (item.data.end < lowerBound || item.data.end > upperBound); - }); + var util = __webpack_require__(1); + + /** + * @constructor Slider + * + * An html slider control with start/stop/prev/next buttons + * @param {Element} container The element where the slider will be created + * @param {Object} options Available options: + * {boolean} visible If true (default) the + * slider is visible. + */ + function Slider(container, options) { + if (container === undefined) { + throw 'Error: No container element defined'; } + this.container = container; + this.visible = (options && options.visible != undefined) ? options.visible : true; + if (this.visible) { + this.frame = document.createElement('DIV'); + //this.frame.style.backgroundColor = '#E5E5E5'; + this.frame.style.width = '100%'; + this.frame.style.position = 'relative'; + this.container.appendChild(this.frame); - // finally, we reposition all the visible items. - for (i = 0; i < visibleItems.length; i++) { - item = visibleItems[i]; - if (!item.displayed) item.show(); - // reposition item horizontally - item.repositionX(); - } + this.frame.prev = document.createElement('INPUT'); + this.frame.prev.type = 'BUTTON'; + this.frame.prev.value = 'Prev'; + this.frame.appendChild(this.frame.prev); - // debug - //console.log("new line") - //if (this.groupId == null) { - // for (i = 0; i < orderedItems.byStart.length; i++) { - // item = orderedItems.byStart[i].data; - // console.log('start',i,initialPosByStart, item.start.valueOf(), item.content, item.start >= lowerBound && item.start <= upperBound,i == initialPosByStart ? "<------------------- HEREEEE" : "") - // } - // for (i = 0; i < orderedItems.byEnd.length; i++) { - // item = orderedItems.byEnd[i].data; - // console.log('rangeEnd',i,initialPosByEnd, item.end.valueOf(), item.content, item.end >= range.start && item.end <= range.end,i == initialPosByEnd ? "<------------------- HEREEEE" : "") - // } - //} + this.frame.play = document.createElement('INPUT'); + this.frame.play.type = 'BUTTON'; + this.frame.play.value = 'Play'; + this.frame.appendChild(this.frame.play); - return visibleItems; - }; + this.frame.next = document.createElement('INPUT'); + this.frame.next.type = 'BUTTON'; + this.frame.next.value = 'Next'; + this.frame.appendChild(this.frame.next); - Group.prototype._traceVisible = function (initialPos, items, visibleItems, visibleItemsLookup, breakCondition) { - var item; - var i; + this.frame.bar = document.createElement('INPUT'); + this.frame.bar.type = 'BUTTON'; + this.frame.bar.style.position = 'absolute'; + this.frame.bar.style.border = '1px solid red'; + this.frame.bar.style.width = '100px'; + this.frame.bar.style.height = '6px'; + this.frame.bar.style.borderRadius = '2px'; + this.frame.bar.style.MozBorderRadius = '2px'; + this.frame.bar.style.border = '1px solid #7F7F7F'; + this.frame.bar.style.backgroundColor = '#E5E5E5'; + this.frame.appendChild(this.frame.bar); - if (initialPos != -1) { - for (i = initialPos; i >= 0; i--) { - item = items[i]; - if (breakCondition(item)) { - break; - } - else { - if (visibleItemsLookup[item.id] === undefined) { - visibleItemsLookup[item.id] = true; - visibleItems.push(item); - } - } - } + this.frame.slide = document.createElement('INPUT'); + this.frame.slide.type = 'BUTTON'; + this.frame.slide.style.margin = '0px'; + this.frame.slide.value = ' '; + this.frame.slide.style.position = 'relative'; + this.frame.slide.style.left = '-100px'; + this.frame.appendChild(this.frame.slide); - for (i = initialPos + 1; i < items.length; i++) { - item = items[i]; - if (breakCondition(item)) { - break; - } - else { - if (visibleItemsLookup[item.id] === undefined) { - visibleItemsLookup[item.id] = true; - visibleItems.push(item); - } - } - } + // create events + var me = this; + this.frame.slide.onmousedown = function (event) {me._onMouseDown(event);}; + this.frame.prev.onclick = function (event) {me.prev(event);}; + this.frame.play.onclick = function (event) {me.togglePlay(event);}; + this.frame.next.onclick = function (event) {me.next(event);}; } - } + this.onChangeCallback = undefined; + + this.values = []; + this.index = undefined; + + this.playTimeout = undefined; + this.playInterval = 1000; // milliseconds + this.playLoop = true; + } /** - * this function is very similar to the _checkIfInvisible() but it does not - * return booleans, hides the item if it should not be seen and always adds to - * the visibleItems. - * this one is for brute forcing and hiding. - * - * @param {Item} item - * @param {Array} visibleItems - * @param {{start:number, end:number}} range - * @private + * Select the previous index */ - Group.prototype._checkIfVisible = function(item, visibleItems, range) { - if (item.isVisible(range)) { - if (!item.displayed) item.show(); - // reposition item horizontally - item.repositionX(); - visibleItems.push(item); - } - else { - if (item.displayed) item.hide(); - } + Slider.prototype.prev = function() { + var index = this.getIndex(); + if (index > 0) { + index--; + this.setIndex(index); + } }; - /** - * this function is very similar to the _checkIfInvisible() but it does not - * return booleans, hides the item if it should not be seen and always adds to - * the visibleItems. - * this one is for brute forcing and hiding. - * - * @param {Item} item - * @param {Array} visibleItems - * @param {{start:number, end:number}} range - * @private + * Select the next index */ - Group.prototype._checkIfVisibleWithReference = function(item, visibleItems, visibleItemsLookup, range) { - if (item.isVisible(range)) { - if (visibleItemsLookup[item.id] === undefined) { - visibleItemsLookup[item.id] = true; - visibleItems.push(item); - } - } - else { - if (item.displayed) item.hide(); + Slider.prototype.next = function() { + var index = this.getIndex(); + if (index < this.values.length - 1) { + index++; + this.setIndex(index); } }; + /** + * Select the next index + */ + Slider.prototype.playNext = function() { + var start = new Date(); + var index = this.getIndex(); + if (index < this.values.length - 1) { + index++; + this.setIndex(index); + } + else if (this.playLoop) { + // jump to the start + index = 0; + this.setIndex(index); + } - module.exports = Group; - + var end = new Date(); + var diff = (end - start); -/***/ }, -/* 26 */ -/***/ function(module, exports, __webpack_require__) { + // calculate how much time it to to set the index and to execute the callback + // function. + var interval = Math.max(this.playInterval - diff, 0); + // document.title = diff // TODO: cleanup - var util = __webpack_require__(1); - var Group = __webpack_require__(25); + var me = this; + this.playTimeout = setTimeout(function() {me.playNext();}, interval); + }; /** - * @constructor BackgroundGroup - * @param {Number | String} groupId - * @param {Object} data - * @param {ItemSet} itemSet + * Toggle start or stop playing */ - function BackgroundGroup (groupId, data, itemSet) { - Group.call(this, groupId, data, itemSet); - - this.width = 0; - this.height = 0; - this.top = 0; - this.left = 0; - } - - BackgroundGroup.prototype = Object.create(Group.prototype); + Slider.prototype.togglePlay = function() { + if (this.playTimeout === undefined) { + this.play(); + } else { + this.stop(); + } + }; /** - * Repaint this group - * @param {{start: number, end: number}} range - * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin - * @param {boolean} [restack=false] Force restacking of all items - * @return {boolean} Returns true if the group is resized + * Start playing */ - BackgroundGroup.prototype.redraw = function(range, margin, restack) { - var resized = false; - - this.visibleItems = this._updateVisibleItems(this.orderedItems, this.visibleItems, range); - - // calculate actual size - this.width = this.dom.background.offsetWidth; + Slider.prototype.play = function() { + // Test whether already playing + if (this.playTimeout) return; - // apply new height (just always zero for BackgroundGroup - this.dom.background.style.height = '0'; + this.playNext(); - // update vertical position of items after they are re-stacked and the height of the group is calculated - for (var i = 0, ii = this.visibleItems.length; i < ii; i++) { - var item = this.visibleItems[i]; - item.repositionY(margin); + if (this.frame) { + this.frame.play.value = 'Stop'; } - - return resized; }; /** - * Show this group: attach to the DOM + * Stop playing */ - BackgroundGroup.prototype.show = function() { - if (!this.dom.background.parentNode) { - this.itemSet.dom.background.appendChild(this.dom.background); + Slider.prototype.stop = function() { + clearInterval(this.playTimeout); + this.playTimeout = undefined; + + if (this.frame) { + this.frame.play.value = 'Play'; } }; - module.exports = BackgroundGroup; - - -/***/ }, -/* 27 */ -/***/ function(module, exports, __webpack_require__) { - - var Hammer = __webpack_require__(45); - var util = __webpack_require__(1); - var DataSet = __webpack_require__(3); - var DataView = __webpack_require__(4); - var Component = __webpack_require__(20); - var Group = __webpack_require__(25); - var BackgroundGroup = __webpack_require__(26); - var BoxItem = __webpack_require__(33); - var PointItem = __webpack_require__(34); - var RangeItem = __webpack_require__(35); - var BackgroundItem = __webpack_require__(32); - - - var UNGROUPED = '__ungrouped__'; // reserved group id for ungrouped items - var BACKGROUND = '__background__'; // reserved group id for background items without group - /** - * An ItemSet holds a set of items and ranges which can be displayed in a - * range. The width is determined by the parent of the ItemSet, and the height - * is determined by the size of the items. - * @param {{dom: Object, domProps: Object, emitter: Emitter, range: Range}} body - * @param {Object} [options] See ItemSet.setOptions for the available options. - * @constructor ItemSet - * @extends Component + * Set a callback function which will be triggered when the value of the + * slider bar has changed. */ - function ItemSet(body, options) { - this.body = body; - - this.defaultOptions = { - type: null, // 'box', 'point', 'range', 'background' - orientation: 'bottom', // 'top' or 'bottom' - align: 'auto', // alignment of box items - stack: true, - groupOrder: null, - - selectable: true, - editable: { - updateTime: false, - updateGroup: false, - add: false, - remove: false - }, - - onAdd: function (item, callback) { - callback(item); - }, - onUpdate: function (item, callback) { - callback(item); - }, - onMove: function (item, callback) { - callback(item); - }, - onRemove: function (item, callback) { - callback(item); - }, - onMoving: function (item, callback) { - callback(item); - }, - - margin: { - item: { - horizontal: 10, - vertical: 10 - }, - axis: 20 - }, - padding: 5 - }; - - // options is shared by this ItemSet and all its items - this.options = util.extend({}, this.defaultOptions); + Slider.prototype.setOnChangeCallback = function(callback) { + this.onChangeCallback = callback; + }; - // options for getting items from the DataSet with the correct type - this.itemOptions = { - type: {start: 'Date', end: 'Date'} - }; + /** + * Set the interval for playing the list + * @param {Number} interval The interval in milliseconds + */ + Slider.prototype.setPlayInterval = function(interval) { + this.playInterval = interval; + }; - this.conversion = { - toScreen: body.util.toScreen, - toTime: body.util.toTime - }; - this.dom = {}; - this.props = {}; - this.hammer = null; + /** + * Retrieve the current play interval + * @return {Number} interval The interval in milliseconds + */ + Slider.prototype.getPlayInterval = function(interval) { + return this.playInterval; + }; - var me = this; - this.itemsData = null; // DataSet - this.groupsData = null; // DataSet + /** + * Set looping on or off + * @pararm {boolean} doLoop If true, the slider will jump to the start when + * the end is passed, and will jump to the end + * when the start is passed. + */ + Slider.prototype.setPlayLoop = function(doLoop) { + this.playLoop = doLoop; + }; - // listeners for the DataSet of the items - this.itemListeners = { - 'add': function (event, params, senderId) { - me._onAdd(params.items); - }, - 'update': function (event, params, senderId) { - me._onUpdate(params.items); - }, - 'remove': function (event, params, senderId) { - me._onRemove(params.items); - } - }; - // listeners for the DataSet of the groups - this.groupListeners = { - 'add': function (event, params, senderId) { - me._onAddGroups(params.items); - }, - 'update': function (event, params, senderId) { - me._onUpdateGroups(params.items); - }, - 'remove': function (event, params, senderId) { - me._onRemoveGroups(params.items); - } - }; + /** + * Execute the onchange callback function + */ + Slider.prototype.onChange = function() { + if (this.onChangeCallback !== undefined) { + this.onChangeCallback(); + } + }; - this.items = {}; // object with an Item for every data item - this.groups = {}; // Group object for every group - this.groupIds = []; + /** + * redraw the slider on the correct place + */ + Slider.prototype.redraw = function() { + if (this.frame) { + // resize the bar + this.frame.bar.style.top = (this.frame.clientHeight/2 - + this.frame.bar.offsetHeight/2) + 'px'; + this.frame.bar.style.width = (this.frame.clientWidth - + this.frame.prev.clientWidth - + this.frame.play.clientWidth - + this.frame.next.clientWidth - 30) + 'px'; - this.selection = []; // list with the ids of all selected nodes - this.stackDirty = true; // if true, all items will be restacked on next redraw + // position the slider button + var left = this.indexToLeft(this.index); + this.frame.slide.style.left = (left) + 'px'; + } + }; - this.touchParams = {}; // stores properties while dragging - // create the HTML DOM - this._create(); + /** + * Set the list with values for the slider + * @param {Array} values A javascript array with values (any type) + */ + Slider.prototype.setValues = function(values) { + this.values = values; - this.setOptions(options); - } + if (this.values.length > 0) + this.setIndex(0); + else + this.index = undefined; + }; - ItemSet.prototype = new Component(); + /** + * Select a value by its index + * @param {Number} index + */ + Slider.prototype.setIndex = function(index) { + if (index < this.values.length) { + this.index = index; - // available item types will be registered here - ItemSet.types = { - background: BackgroundItem, - box: BoxItem, - range: RangeItem, - point: PointItem + this.redraw(); + this.onChange(); + } + else { + throw 'Error: index out of range'; + } }; /** - * Create the HTML DOM for the ItemSet + * retrieve the index of the currently selected vaue + * @return {Number} index */ - ItemSet.prototype._create = function(){ - var frame = document.createElement('div'); - frame.className = 'itemset'; - frame['timeline-itemset'] = this; - this.dom.frame = frame; - - // create background panel - var background = document.createElement('div'); - background.className = 'background'; - frame.appendChild(background); - this.dom.background = background; + Slider.prototype.getIndex = function() { + return this.index; + }; - // create foreground panel - var foreground = document.createElement('div'); - foreground.className = 'foreground'; - frame.appendChild(foreground); - this.dom.foreground = foreground; - // create axis panel - var axis = document.createElement('div'); - axis.className = 'axis'; - this.dom.axis = axis; + /** + * retrieve the currently selected value + * @return {*} value + */ + Slider.prototype.get = function() { + return this.values[this.index]; + }; - // create labelset - var labelSet = document.createElement('div'); - labelSet.className = 'labelset'; - this.dom.labelSet = labelSet; - // create ungrouped Group - this._updateUngrouped(); + Slider.prototype._onMouseDown = function(event) { + // only react on left mouse button down + var leftButtonDown = event.which ? (event.which === 1) : (event.button === 1); + if (!leftButtonDown) return; - // create background Group - var backgroundGroup = new BackgroundGroup(BACKGROUND, null, this); - backgroundGroup.show(); - this.groups[BACKGROUND] = backgroundGroup; + this.startClientX = event.clientX; + this.startSlideX = parseFloat(this.frame.slide.style.left); - // attach event listeners - // Note: we bind to the centerContainer for the case where the height - // of the center container is larger than of the ItemSet, so we - // can click in the empty area to create a new item or deselect an item. - this.hammer = Hammer(this.body.dom.centerContainer, { - preventDefault: true - }); + this.frame.style.cursor = 'move'; - // drag items when selected - this.hammer.on('touch', this._onTouch.bind(this)); - this.hammer.on('dragstart', this._onDragStart.bind(this)); - this.hammer.on('drag', this._onDrag.bind(this)); - this.hammer.on('dragend', this._onDragEnd.bind(this)); + // add event listeners to handle moving the contents + // we store the function onmousemove and onmouseup in the graph, so we can + // remove the eventlisteners lateron in the function mouseUp() + var me = this; + this.onmousemove = function (event) {me._onMouseMove(event);}; + this.onmouseup = function (event) {me._onMouseUp(event);}; + util.addEventListener(document, 'mousemove', this.onmousemove); + util.addEventListener(document, 'mouseup', this.onmouseup); + util.preventDefault(event); + }; - // single select (or unselect) when tapping an item - this.hammer.on('tap', this._onSelectItem.bind(this)); - // multi select when holding mouse/touch, or on ctrl+click - this.hammer.on('hold', this._onMultiSelectItem.bind(this)); + Slider.prototype.leftToIndex = function (left) { + var width = parseFloat(this.frame.bar.style.width) - + this.frame.slide.clientWidth - 10; + var x = left - 3; - // add item on doubletap - this.hammer.on('doubletap', this._onAddItem.bind(this)); + var index = Math.round(x / width * (this.values.length-1)); + if (index < 0) index = 0; + if (index > this.values.length-1) index = this.values.length-1; - // attach to the DOM - this.show(); + return index; }; - /** - * Set options for the ItemSet. Existing options will be extended/overwritten. - * @param {Object} [options] The following options are available: - * {String} type - * Default type for the items. Choose from 'box' - * (default), 'point', 'range', or 'background'. - * The default style can be overwritten by - * individual items. - * {String} align - * Alignment for the items, only applicable for - * BoxItem. Choose 'center' (default), 'left', or - * 'right'. - * {String} orientation - * Orientation of the item set. Choose 'top' or - * 'bottom' (default). - * {Function} groupOrder - * A sorting function for ordering groups - * {Boolean} stack - * If true (deafult), items will be stacked on - * top of each other. - * {Number} margin.axis - * Margin between the axis and the items in pixels. - * Default is 20. - * {Number} margin.item.horizontal - * Horizontal margin between items in pixels. - * Default is 10. - * {Number} margin.item.vertical - * Vertical Margin between items in pixels. - * Default is 10. - * {Number} margin.item - * Margin between items in pixels in both horizontal - * and vertical direction. Default is 10. - * {Number} margin - * Set margin for both axis and items in pixels. - * {Number} padding - * Padding of the contents of an item in pixels. - * Must correspond with the items css. Default is 5. - * {Boolean} selectable - * If true (default), items can be selected. - * {Boolean} editable - * Set all editable options to true or false - * {Boolean} editable.updateTime - * Allow dragging an item to an other moment in time - * {Boolean} editable.updateGroup - * Allow dragging an item to an other group - * {Boolean} editable.add - * Allow creating new items on double tap - * {Boolean} editable.remove - * Allow removing items by clicking the delete button - * top right of a selected item. - * {Function(item: Item, callback: Function)} onAdd - * Callback function triggered when an item is about to be added: - * when the user double taps an empty space in the Timeline. - * {Function(item: Item, callback: Function)} onUpdate - * Callback function fired when an item is about to be updated. - * This function typically has to show a dialog where the user - * change the item. If not implemented, nothing happens. - * {Function(item: Item, callback: Function)} onMove - * Fired when an item has been moved. If not implemented, - * the move action will be accepted. - * {Function(item: Item, callback: Function)} onRemove - * Fired when an item is about to be deleted. - * If not implemented, the item will be always removed. - */ - ItemSet.prototype.setOptions = function(options) { - if (options) { - // copy all options that we know - var fields = ['type', 'align', 'orientation', 'padding', 'stack', 'selectable', 'groupOrder', 'dataAttributes', 'template','hide']; - util.selectiveExtend(fields, this.options, options); + Slider.prototype.indexToLeft = function (index) { + var width = parseFloat(this.frame.bar.style.width) - + this.frame.slide.clientWidth - 10; + + var x = index / (this.values.length-1) * width; + var left = x + 3; - if ('margin' in options) { - if (typeof options.margin === 'number') { - this.options.margin.axis = options.margin; - this.options.margin.item.horizontal = options.margin; - this.options.margin.item.vertical = options.margin; - } - else if (typeof options.margin === 'object') { - util.selectiveExtend(['axis'], this.options.margin, options.margin); - if ('item' in options.margin) { - if (typeof options.margin.item === 'number') { - this.options.margin.item.horizontal = options.margin.item; - this.options.margin.item.vertical = options.margin.item; - } - else if (typeof options.margin.item === 'object') { - util.selectiveExtend(['horizontal', 'vertical'], this.options.margin.item, options.margin.item); - } - } - } - } + return left; + }; - if ('editable' in options) { - if (typeof options.editable === 'boolean') { - this.options.editable.updateTime = options.editable; - this.options.editable.updateGroup = options.editable; - this.options.editable.add = options.editable; - this.options.editable.remove = options.editable; - } - else if (typeof options.editable === 'object') { - util.selectiveExtend(['updateTime', 'updateGroup', 'add', 'remove'], this.options.editable, options.editable); - } - } - // callback functions - var addCallback = (function (name) { - var fn = options[name]; - if (fn) { - if (!(fn instanceof Function)) { - throw new Error('option ' + name + ' must be a function ' + name + '(item, callback)'); - } - this.options[name] = fn; - } - }).bind(this); - ['onAdd', 'onUpdate', 'onRemove', 'onMove', 'onMoving'].forEach(addCallback); - // force the itemSet to refresh: options like orientation and margins may be changed - this.markDirty(); - } + Slider.prototype._onMouseMove = function (event) { + var diff = event.clientX - this.startClientX; + var x = this.startSlideX + diff; + + var index = this.leftToIndex(x); + + this.setIndex(index); + + util.preventDefault(); }; - /** - * Mark the ItemSet dirty so it will refresh everything with next redraw - */ - ItemSet.prototype.markDirty = function() { - this.groupIds = []; - this.stackDirty = true; + + Slider.prototype._onMouseUp = function (event) { + this.frame.style.cursor = 'auto'; + + // remove event listeners + util.removeEventListener(document, 'mousemove', this.onmousemove); + util.removeEventListener(document, 'mouseup', this.onmouseup); + + util.preventDefault(); }; + module.exports = Slider; + + +/***/ }, +/* 17 */ +/***/ function(module, exports, __webpack_require__) { + /** - * Destroy the ItemSet + * @prototype StepNumber + * The class StepNumber is an iterator for Numbers. You provide a start and end + * value, and a best step size. StepNumber itself rounds to fixed values and + * a finds the step that best fits the provided step. + * + * If prettyStep is true, the step size is chosen as close as possible to the + * provided step, but being a round value like 1, 2, 5, 10, 20, 50, .... + * + * Example usage: + * var step = new StepNumber(0, 10, 2.5, true); + * step.start(); + * while (!step.end()) { + * alert(step.getCurrent()); + * step.next(); + * } + * + * Version: 1.0 + * + * @param {Number} start The start value + * @param {Number} end The end value + * @param {Number} step Optional. Step size. Must be a positive value. + * @param {boolean} prettyStep Optional. If true, the step size is rounded + * To a pretty step size (like 1, 2, 5, 10, 20, 50, ...) */ - ItemSet.prototype.destroy = function() { - this.hide(); - this.setItems(null); - this.setGroups(null); - - this.hammer = null; + function StepNumber(start, end, step, prettyStep) { + // set default values + this._start = 0; + this._end = 0; + this._step = 1; + this.prettyStep = true; + this.precision = 5; - this.body = null; - this.conversion = null; + this._current = 0; + this.setRange(start, end, step, prettyStep); }; /** - * Hide the component from the DOM + * Set a new range: start, end and step. + * + * @param {Number} start The start value + * @param {Number} end The end value + * @param {Number} step Optional. Step size. Must be a positive value. + * @param {boolean} prettyStep Optional. If true, the step size is rounded + * To a pretty step size (like 1, 2, 5, 10, 20, 50, ...) */ - ItemSet.prototype.hide = function() { - // remove the frame containing the items - if (this.dom.frame.parentNode) { - this.dom.frame.parentNode.removeChild(this.dom.frame); - } - - // remove the axis with dots - if (this.dom.axis.parentNode) { - this.dom.axis.parentNode.removeChild(this.dom.axis); - } + StepNumber.prototype.setRange = function(start, end, step, prettyStep) { + this._start = start ? start : 0; + this._end = end ? end : 0; - // remove the labelset containing all group labels - if (this.dom.labelSet.parentNode) { - this.dom.labelSet.parentNode.removeChild(this.dom.labelSet); - } + this.setStep(step, prettyStep); }; /** - * Show the component in the DOM (when not already visible). - * @return {Boolean} changed + * Set a new step size + * @param {Number} step New step size. Must be a positive value + * @param {boolean} prettyStep Optional. If true, the provided step is rounded + * to a pretty step size (like 1, 2, 5, 10, 20, 50, ...) */ - ItemSet.prototype.show = function() { - // show frame containing the items - if (!this.dom.frame.parentNode) { - this.body.dom.center.appendChild(this.dom.frame); - } + StepNumber.prototype.setStep = function(step, prettyStep) { + if (step === undefined || step <= 0) + return; - // show axis with dots - if (!this.dom.axis.parentNode) { - this.body.dom.backgroundVertical.appendChild(this.dom.axis); - } + if (prettyStep !== undefined) + this.prettyStep = prettyStep; - // show labelset containing labels - if (!this.dom.labelSet.parentNode) { - this.body.dom.left.appendChild(this.dom.labelSet); - } + if (this.prettyStep === true) + this._step = StepNumber.calculatePrettyStep(step); + else + this._step = step; }; /** - * Set selected items by their id. Replaces the current selection - * Unknown id's are silently ignored. - * @param {string[] | string} [ids] An array with zero or more id's of the items to be - * selected, or a single item id. If ids is undefined - * or an empty array, all items will be unselected. + * Calculate a nice step size, closest to the desired step size. + * Returns a value in one of the ranges 1*10^n, 2*10^n, or 5*10^n, where n is an + * integer Number. For example 1, 2, 5, 10, 20, 50, etc... + * @param {Number} step Desired step size + * @return {Number} Nice step size */ - ItemSet.prototype.setSelection = function(ids) { - var i, ii, id, item; + StepNumber.calculatePrettyStep = function (step) { + var log10 = function (x) {return Math.log(x) / Math.LN10;}; - if (ids == undefined) ids = []; - if (!Array.isArray(ids)) ids = [ids]; + // try three steps (multiple of 1, 2, or 5 + var step1 = Math.pow(10, Math.round(log10(step))), + step2 = 2 * Math.pow(10, Math.round(log10(step / 2))), + step5 = 5 * Math.pow(10, Math.round(log10(step / 5))); - // unselect currently selected items - for (i = 0, ii = this.selection.length; i < ii; i++) { - id = this.selection[i]; - item = this.items[id]; - if (item) item.unselect(); - } + // choose the best step (closest to minimum step) + var prettyStep = step1; + if (Math.abs(step2 - step) <= Math.abs(prettyStep - step)) prettyStep = step2; + if (Math.abs(step5 - step) <= Math.abs(prettyStep - step)) prettyStep = step5; - // select items - this.selection = []; - for (i = 0, ii = ids.length; i < ii; i++) { - id = ids[i]; - item = this.items[id]; - if (item) { - this.selection.push(id); - item.select(); - } + // for safety + if (prettyStep <= 0) { + prettyStep = 1; } + + return prettyStep; }; /** - * Get the selected items by their id - * @return {Array} ids The ids of the selected items + * returns the current value of the step + * @return {Number} current value */ - ItemSet.prototype.getSelection = function() { - return this.selection.concat([]); + StepNumber.prototype.getCurrent = function () { + return parseFloat(this._current.toPrecision(this.precision)); }; /** - * Get the id's of the currently visible items. - * @returns {Array} The ids of the visible items + * returns the current step size + * @return {Number} current step size */ - ItemSet.prototype.getVisibleItems = function() { - var range = this.body.range.getRange(); - var left = this.body.util.toScreen(range.start); - var right = this.body.util.toScreen(range.end); - - var ids = []; - for (var groupId in this.groups) { - if (this.groups.hasOwnProperty(groupId)) { - var group = this.groups[groupId]; - var rawVisibleItems = group.visibleItems; - - // filter the "raw" set with visibleItems into a set which is really - // visible by pixels - for (var i = 0; i < rawVisibleItems.length; i++) { - var item = rawVisibleItems[i]; - // TODO: also check whether visible vertically - if ((item.left < right) && (item.left + item.width > left)) { - ids.push(item.id); - } - } - } - } + StepNumber.prototype.getStep = function () { + return this._step; + }; - return ids; + /** + * Set the current value to the largest value smaller than start, which + * is a multiple of the step size + */ + StepNumber.prototype.start = function() { + this._current = this._start - this._start % this._step; }; /** - * Deselect a selected item - * @param {String | Number} id - * @private + * Do a step, add the step size to the current value */ - ItemSet.prototype._deselect = function(id) { - var selection = this.selection; - for (var i = 0, ii = selection.length; i < ii; i++) { - if (selection[i] == id) { // non-strict comparison! - selection.splice(i, 1); - break; - } - } + StepNumber.prototype.next = function () { + this._current += this._step; }; /** - * Repaint the component - * @return {boolean} Returns true if the component is resized + * Returns true whether the end is reached + * @return {boolean} True if the current value has passed the end value. */ - ItemSet.prototype.redraw = function() { - var margin = this.options.margin, - range = this.body.range, - asSize = util.option.asSize, - options = this.options, - orientation = options.orientation, - resized = false, - frame = this.dom.frame, - editable = options.editable.updateTime || options.editable.updateGroup; + StepNumber.prototype.end = function () { + return (this._current > this._end); + }; - // recalculate absolute position (before redrawing groups) - this.props.top = this.body.domProps.top.height + this.body.domProps.border.top; - this.props.left = this.body.domProps.left.width + this.body.domProps.border.left; + module.exports = StepNumber; - // update class name - frame.className = 'itemset' + (editable ? ' editable' : ''); - // reorder the groups (if needed) - resized = this._orderGroups() || resized; +/***/ }, +/* 18 */ +/***/ function(module, exports, __webpack_require__) { - // check whether zoomed (in that case we need to re-stack everything) - // TODO: would be nicer to get this as a trigger from Range - var visibleInterval = range.end - range.start; - var zoomed = (visibleInterval != this.lastVisibleInterval) || (this.props.width != this.props.lastWidth); - if (zoomed) this.stackDirty = true; - this.lastVisibleInterval = visibleInterval; - this.props.lastWidth = this.props.width; + var Emitter = __webpack_require__(11); + var Hammer = __webpack_require__(19); + var util = __webpack_require__(1); + var DataSet = __webpack_require__(7); + var DataView = __webpack_require__(9); + var Range = __webpack_require__(21); + var Core = __webpack_require__(25); + var TimeAxis = __webpack_require__(37); + var CurrentTime = __webpack_require__(39); + var CustomTime = __webpack_require__(41); + var ItemSet = __webpack_require__(26); - var restack = this.stackDirty; - var firstGroup = this._firstGroup(); - var firstMargin = { - item: margin.item, - axis: margin.axis + /** + * Create a timeline visualization + * @param {HTMLElement} container + * @param {vis.DataSet | Array | google.visualization.DataTable} [items] + * @param {vis.DataSet | Array | google.visualization.DataTable} [groups] + * @param {Object} [options] See Timeline.setOptions for the available options. + * @constructor + * @extends Core + */ + function Timeline (container, items, groups, options) { + if (!(this instanceof Timeline)) { + throw new SyntaxError('Constructor must be called with the new operator'); + } + + // if the third element is options, the forth is groups (optionally); + if (!(Array.isArray(groups) || groups instanceof DataSet) && groups instanceof Object) { + var forthArgument = options; + options = groups; + groups = forthArgument; + } + + var me = this; + this.defaultOptions = { + start: null, + end: null, + + autoResize: true, + + orientation: 'bottom', + width: null, + height: null, + maxHeight: null, + minHeight: null }; - var nonFirstMargin = { - item: margin.item, - axis: margin.item.vertical / 2 + this.options = util.deepExtend({}, this.defaultOptions); + + // Create the DOM, props, and emitter + this._create(container); + + // all components listed here will be repainted automatically + this.components = []; + + this.body = { + dom: this.dom, + domProps: this.props, + emitter: { + on: this.on.bind(this), + off: this.off.bind(this), + emit: this.emit.bind(this) + }, + hiddenDates: [], + util: { + snap: null, // will be specified after TimeAxis is created + toScreen: me._toScreen.bind(me), + toGlobalScreen: me._toGlobalScreen.bind(me), // this refers to the root.width + toTime: me._toTime.bind(me), + toGlobalTime : me._toGlobalTime.bind(me) + } }; - var height = 0; - var minHeight = margin.axis + margin.item.vertical; - // redraw the background group - this.groups[BACKGROUND].redraw(range, nonFirstMargin, restack); + // range + this.range = new Range(this.body); + this.components.push(this.range); + this.body.range = this.range; - // redraw all regular groups - util.forEach(this.groups, function (group) { - var groupMargin = (group == firstGroup) ? firstMargin : nonFirstMargin; - var groupResized = group.redraw(range, groupMargin, restack); - resized = groupResized || resized; - height += group.height; - }); - height = Math.max(height, minHeight); - this.stackDirty = false; + // time axis + this.timeAxis = new TimeAxis(this.body); + this.components.push(this.timeAxis); + this.body.util.snap = this.timeAxis.snap.bind(this.timeAxis); - // update frame height - frame.style.height = asSize(height); + // current time bar + this.currentTime = new CurrentTime(this.body); + this.components.push(this.currentTime); - // calculate actual size - this.props.width = frame.offsetWidth; - this.props.height = height; + // custom time bar + // Note: time bar will be attached in this.setOptions when selected + this.customTime = new CustomTime(this.body); + this.components.push(this.customTime); - // reposition axis - this.dom.axis.style.top = asSize((orientation == 'top') ? - (this.body.domProps.top.height + this.body.domProps.border.top) : - (this.body.domProps.top.height + this.body.domProps.centerContainer.height)); - this.dom.axis.style.left = '0'; + // item set + this.itemSet = new ItemSet(this.body); + this.components.push(this.itemSet); - // check if this component is resized - resized = this._isResized() || resized; + this.itemsData = null; // DataSet + this.groupsData = null; // DataSet + + // apply options + if (options) { + this.setOptions(options); + } + + // IMPORTANT: THIS HAPPENS BEFORE SET ITEMS! + if (groups) { + this.setGroups(groups); + } + + // create itemset + if (items) { + this.setItems(items); + } + else { + this.redraw(); + } + } + + // Extend the functionality from Core + Timeline.prototype = new Core(); + + /** + * Set items + * @param {vis.DataSet | Array | google.visualization.DataTable | null} items + */ + Timeline.prototype.setItems = function(items) { + var initialLoad = (this.itemsData == null); + + // convert to type DataSet when needed + var newDataSet; + if (!items) { + newDataSet = null; + } + else if (items instanceof DataSet || items instanceof DataView) { + newDataSet = items; + } + else { + // turn an array into a dataset + newDataSet = new DataSet(items, { + type: { + start: 'Date', + end: 'Date' + } + }); + } + + // set items + this.itemsData = newDataSet; + this.itemSet && this.itemSet.setItems(newDataSet); + + if (initialLoad) { + if (this.options.start != undefined || this.options.end != undefined) { + if (this.options.start == undefined || this.options.end == undefined) { + var dataRange = this._getDataRange(); + } + + var start = this.options.start != undefined ? this.options.start : dataRange.start; + var end = this.options.end != undefined ? this.options.end : dataRange.end; + + this.setWindow(start, end, {animate: false}); + } + else { + this.fit({animate: false}); + } + } + }; + + /** + * Set groups + * @param {vis.DataSet | Array | google.visualization.DataTable} groups + */ + Timeline.prototype.setGroups = function(groups) { + // convert to type DataSet when needed + var newDataSet; + if (!groups) { + newDataSet = null; + } + else if (groups instanceof DataSet || groups instanceof DataView) { + newDataSet = groups; + } + else { + // turn an array into a dataset + newDataSet = new DataSet(groups); + } + + this.groupsData = newDataSet; + this.itemSet.setGroups(newDataSet); + }; + + /** + * Set selected items by their id. Replaces the current selection + * Unknown id's are silently ignored. + * @param {string[] | string} [ids] An array with zero or more id's of the items to be + * selected. If ids is an empty array, all items will be + * unselected. + * @param {Object} [options] Available options: + * `focus: boolean` + * If true, focus will be set to the selected item(s) + * `animate: boolean | number` + * If true (default), the range is animated + * smoothly to the new window. + * If a number, the number is taken as duration + * for the animation. Default duration is 500 ms. + * Only applicable when option focus is true. + */ + Timeline.prototype.setSelection = function(ids, options) { + this.itemSet && this.itemSet.setSelection(ids); - return resized; + if (options && options.focus) { + this.focus(ids, options); + } }; /** - * Get the first group, aligned with the axis - * @return {Group | null} firstGroup - * @private + * Get the selected items by their id + * @return {Array} ids The ids of the selected items */ - ItemSet.prototype._firstGroup = function() { - var firstGroupIndex = (this.options.orientation == 'top') ? 0 : (this.groupIds.length - 1); - var firstGroupId = this.groupIds[firstGroupIndex]; - var firstGroup = this.groups[firstGroupId] || this.groups[UNGROUPED]; - - return firstGroup || null; + Timeline.prototype.getSelection = function() { + return this.itemSet && this.itemSet.getSelection() || []; }; /** - * Create or delete the group holding all ungrouped items. This group is used when - * there are no groups specified. - * @protected + * Adjust the visible window such that the selected item (or multiple items) + * are centered on screen. + * @param {String | String[]} id An item id or array with item ids + * @param {Object} [options] Available options: + * `animate: boolean | number` + * If true (default), the range is animated + * smoothly to the new window. + * If a number, the number is taken as duration + * for the animation. Default duration is 500 ms. + * Only applicable when option focus is true */ - ItemSet.prototype._updateUngrouped = function() { - var ungrouped = this.groups[UNGROUPED]; - var background = this.groups[BACKGROUND]; - var item, itemId; + Timeline.prototype.focus = function(id, options) { + if (!this.itemsData || id == undefined) return; - if (this.groupsData) { - // remove the group holding all ungrouped items - if (ungrouped) { - ungrouped.hide(); - delete this.groups[UNGROUPED]; + var ids = Array.isArray(id) ? id : [id]; - for (itemId in this.items) { - if (this.items.hasOwnProperty(itemId)) { - item = this.items[itemId]; - item.parent && item.parent.remove(item); - var groupId = this._getGroupId(item.data); - var group = this.groups[groupId]; - group && group.add(item) || item.hide(); - } - } + // get the specified item(s) + var itemsData = this.itemsData.getDataSet().get(ids, { + type: { + start: 'Date', + end: 'Date' } - } - else { - // create a group holding all (unfiltered) items - if (!ungrouped) { - var id = null; - var data = null; - ungrouped = new Group(id, data, this); - this.groups[UNGROUPED] = ungrouped; + }); - for (itemId in this.items) { - if (this.items.hasOwnProperty(itemId)) { - item = this.items[itemId]; - ungrouped.add(item); - } - } + // calculate minimum start and maximum end of specified items + var start = null; + var end = null; + itemsData.forEach(function (itemData) { + var s = itemData.start.valueOf(); + var e = 'end' in itemData ? itemData.end.valueOf() : itemData.start.valueOf(); - ungrouped.show(); + if (start === null || s < start) { + start = s; + } + + if (end === null || e > end) { + end = e; } + }); + + if (start !== null && end !== null) { + // calculate the new middle and interval for the window + var middle = (start + end) / 2; + var interval = Math.max((this.range.end - this.range.start), (end - start) * 1.1); + + var animate = (options && options.animate !== undefined) ? options.animate : true; + this.range.setRange(middle - interval / 2, middle + interval / 2, animate); } }; /** - * Get the element for the labelset - * @return {HTMLElement} labelSet + * Get the data range of the item set. + * @returns {{min: Date, max: Date}} range A range with a start and end Date. + * When no minimum is found, min==null + * When no maximum is found, max==null */ - ItemSet.prototype.getLabelSet = function() { - return this.dom.labelSet; - }; + Timeline.prototype.getItemRange = function() { + // calculate min from start filed + var dataset = this.itemsData.getDataSet(), + min = null, + max = null; - /** - * Set items - * @param {vis.DataSet | null} items - */ - ItemSet.prototype.setItems = function(items) { - var me = this, - ids, - oldItemsData = this.itemsData; + if (dataset) { + // calculate the minimum value of the field 'start' + var minItem = dataset.min('start'); + min = minItem ? util.convert(minItem.start, 'Date').valueOf() : null; + // Note: we convert first to Date and then to number because else + // a conversion from ISODate to Number will fail - // replace the dataset - if (!items) { - this.itemsData = null; - } - else if (items instanceof DataSet || items instanceof DataView) { - this.itemsData = items; - } - else { - throw new TypeError('Data must be an instance of DataSet or DataView'); + // calculate maximum value of fields 'start' and 'end' + var maxStartItem = dataset.max('start'); + if (maxStartItem) { + max = util.convert(maxStartItem.start, 'Date').valueOf(); + } + var maxEndItem = dataset.max('end'); + if (maxEndItem) { + if (max == null) { + max = util.convert(maxEndItem.end, 'Date').valueOf(); + } + else { + max = Math.max(max, util.convert(maxEndItem.end, 'Date').valueOf()); + } + } } - if (oldItemsData) { - // unsubscribe from old dataset - util.forEach(this.itemListeners, function (callback, event) { - oldItemsData.off(event, callback); - }); + return { + min: (min != null) ? new Date(min) : null, + max: (max != null) ? new Date(max) : null + }; + }; - // remove all drawn items - ids = oldItemsData.getIds(); - this._onRemove(ids); - } - if (this.itemsData) { - // subscribe to new dataset - var id = this.id; - util.forEach(this.itemListeners, function (callback, event) { - me.itemsData.on(event, callback, id); - }); + module.exports = Timeline; - // add all new items - ids = this.itemsData.getIds(); - this._onAdd(ids); - // update the group holding all ungrouped items - this._updateUngrouped(); +/***/ }, +/* 19 */ +/***/ function(module, exports, __webpack_require__) { + + // Only load hammer.js when in a browser environment + // (loading hammer.js in a node.js environment gives errors) + if (typeof window !== 'undefined') { + module.exports = window['Hammer'] || __webpack_require__(20); + } + else { + module.exports = function () { + throw Error('hammer.js is only available in a browser, not in node.js.'); } - }; + } + + +/***/ }, +/* 20 */ +/***/ function(module, exports, __webpack_require__) { + + var __WEBPACK_AMD_DEFINE_RESULT__;/*! Hammer.JS - v1.1.3 - 2014-05-20 + * http://eightmedia.github.io/hammer.js + * + * Copyright (c) 2014 Jorik Tangelder ; + * Licensed under the MIT license */ + + (function(window, undefined) { + 'use strict'; /** - * Get the current items - * @returns {vis.DataSet | null} + * @main + * @module hammer + * + * @class Hammer + * @static */ - ItemSet.prototype.getItems = function() { - return this.itemsData; - }; /** - * Set groups - * @param {vis.DataSet} groups + * Hammer, use this to create instances + * ```` + * var hammertime = new Hammer(myElement); + * ```` + * + * @method Hammer + * @param {HTMLElement} element + * @param {Object} [options={}] + * @return {Hammer.Instance} */ - ItemSet.prototype.setGroups = function(groups) { - var me = this, - ids; - - // unsubscribe from current dataset - if (this.groupsData) { - util.forEach(this.groupListeners, function (callback, event) { - me.groupsData.unsubscribe(event, callback); - }); + var Hammer = function Hammer(element, options) { + return new Hammer.Instance(element, options || {}); + }; - // remove all drawn groups - ids = this.groupsData.getIds(); - this.groupsData = null; - this._onRemoveGroups(ids); // note: this will cause a redraw - } + /** + * version, as defined in package.json + * the value will be set at each build + * @property VERSION + * @final + * @type {String} + */ + Hammer.VERSION = '1.1.3'; - // replace the dataset - if (!groups) { - this.groupsData = null; - } - else if (groups instanceof DataSet || groups instanceof DataView) { - this.groupsData = groups; - } - else { - throw new TypeError('Data must be an instance of DataSet or DataView'); - } + /** + * default settings. + * more settings are defined per gesture at `/gestures`. Each gesture can be disabled/enabled + * by setting it's name (like `swipe`) to false. + * You can set the defaults for all instances by changing this object before creating an instance. + * @example + * ```` + * Hammer.defaults.drag = false; + * Hammer.defaults.behavior.touchAction = 'pan-y'; + * delete Hammer.defaults.behavior.userSelect; + * ```` + * @property defaults + * @type {Object} + */ + Hammer.defaults = { + /** + * this setting object adds styles and attributes to the element to prevent the browser from doing + * its native behavior. The css properties are auto prefixed for the browsers when needed. + * @property defaults.behavior + * @type {Object} + */ + behavior: { + /** + * Disables text selection to improve the dragging gesture. When the value is `none` it also sets + * `onselectstart=false` for IE on the element. Mainly for desktop browsers. + * @property defaults.behavior.userSelect + * @type {String} + * @default 'none' + */ + userSelect: 'none', - if (this.groupsData) { - // subscribe to new dataset - var id = this.id; - util.forEach(this.groupListeners, function (callback, event) { - me.groupsData.on(event, callback, id); - }); + /** + * Specifies whether and how a given region can be manipulated by the user (for instance, by panning or zooming). + * Used by Chrome 35> and IE10>. By default this makes the element blocking any touch event. + * @property defaults.behavior.touchAction + * @type {String} + * @default: 'pan-y' + */ + touchAction: 'pan-y', - // draw all ms - ids = this.groupsData.getIds(); - this._onAddGroups(ids); - } + /** + * Disables the default callout shown when you touch and hold a touch target. + * On iOS, when you touch and hold a touch target such as a link, Safari displays + * a callout containing information about the link. This property allows you to disable that callout. + * @property defaults.behavior.touchCallout + * @type {String} + * @default 'none' + */ + touchCallout: 'none', - // update the group holding all ungrouped items - this._updateUngrouped(); + /** + * Specifies whether zooming is enabled. Used by IE10> + * @property defaults.behavior.contentZooming + * @type {String} + * @default 'none' + */ + contentZooming: 'none', - // update the order of all items in each group - this._order(); + /** + * Specifies that an entire element should be draggable instead of its contents. + * Mainly for desktop browsers. + * @property defaults.behavior.userDrag + * @type {String} + * @default 'none' + */ + userDrag: 'none', - this.body.emitter.emit('change', {queue: true}); + /** + * Overrides the highlight color shown when the user taps a link or a JavaScript + * clickable element in Safari on iPhone. This property obeys the alpha value, if specified. + * + * If you don't specify an alpha value, Safari on iPhone applies a default alpha value + * to the color. To disable tap highlighting, set the alpha value to 0 (invisible). + * If you set the alpha value to 1.0 (opaque), the element is not visible when tapped. + * @property defaults.behavior.tapHighlightColor + * @type {String} + * @default 'rgba(0,0,0,0)' + */ + tapHighlightColor: 'rgba(0,0,0,0)' + } }; /** - * Get the current groups - * @returns {vis.DataSet | null} groups + * hammer document where the base events are added at + * @property DOCUMENT + * @type {HTMLElement} + * @default window.document */ - ItemSet.prototype.getGroups = function() { - return this.groupsData; - }; + Hammer.DOCUMENT = document; /** - * Remove an item by its id - * @param {String | Number} id + * detect support for pointer events + * @property HAS_POINTEREVENTS + * @type {Boolean} */ - ItemSet.prototype.removeItem = function(id) { - var item = this.itemsData.get(id), - dataset = this.itemsData.getDataSet(); - - if (item) { - // confirm deletion - this.options.onRemove(item, function (item) { - if (item) { - // remove by id here, it is possible that an item has no id defined - // itself, so better not delete by the item itself - dataset.remove(id); - } - }); - } - }; + Hammer.HAS_POINTEREVENTS = navigator.pointerEnabled || navigator.msPointerEnabled; /** - * Get the time of an item based on it's data and options.type - * @param {Object} itemData - * @returns {string} Returns the type - * @private + * detect support for touch events + * @property HAS_TOUCHEVENTS + * @type {Boolean} */ - ItemSet.prototype._getType = function (itemData) { - return itemData.type || this.options.type || (itemData.end ? 'range' : 'box'); - }; - + Hammer.HAS_TOUCHEVENTS = ('ontouchstart' in window); /** - * Get the group id for an item - * @param {Object} itemData - * @returns {string} Returns the groupId - * @private + * detect mobile browsers + * @property IS_MOBILE + * @type {Boolean} */ - ItemSet.prototype._getGroupId = function (itemData) { - var type = this._getType(itemData); - if (type == 'background' && itemData.group == undefined) { - return BACKGROUND; - } - else { - return this.groupsData ? itemData.group : UNGROUPED; - } - }; + Hammer.IS_MOBILE = /mobile|tablet|ip(ad|hone|od)|android|silk/i.test(navigator.userAgent); /** - * Handle updated items - * @param {Number[]} ids - * @protected + * detect if we want to support mouseevents at all + * @property NO_MOUSEEVENTS + * @type {Boolean} */ - ItemSet.prototype._onUpdate = function(ids) { - var me = this; + Hammer.NO_MOUSEEVENTS = (Hammer.HAS_TOUCHEVENTS && Hammer.IS_MOBILE) || Hammer.HAS_POINTEREVENTS; - ids.forEach(function (id) { - var itemData = me.itemsData.get(id, me.itemOptions); - var item = me.items[id]; - var type = me._getType(itemData); + /** + * interval in which Hammer recalculates current velocity/direction/angle in ms + * @property CALCULATE_INTERVAL + * @type {Number} + * @default 25 + */ + Hammer.CALCULATE_INTERVAL = 25; - var constructor = ItemSet.types[type]; + /** + * eventtypes per touchevent (start, move, end) are filled by `Event.determineEventTypes` on `setup` + * the object contains the DOM event names per type (`EVENT_START`, `EVENT_MOVE`, `EVENT_END`) + * @property EVENT_TYPES + * @private + * @writeOnce + * @type {Object} + */ + var EVENT_TYPES = {}; - if (item) { - // update item - if (!constructor || !(item instanceof constructor)) { - // item type has changed, delete the item and recreate it - me._removeItem(item); - item = null; - } - else { - me._updateItem(item, itemData); - } - } + /** + * direction strings, for safe comparisons + * @property DIRECTION_DOWN|LEFT|UP|RIGHT + * @final + * @type {String} + * @default 'down' 'left' 'up' 'right' + */ + var DIRECTION_DOWN = Hammer.DIRECTION_DOWN = 'down'; + var DIRECTION_LEFT = Hammer.DIRECTION_LEFT = 'left'; + var DIRECTION_UP = Hammer.DIRECTION_UP = 'up'; + var DIRECTION_RIGHT = Hammer.DIRECTION_RIGHT = 'right'; - if (!item) { - // create item - if (constructor) { - item = new constructor(itemData, me.conversion, me.options); - item.id = id; // TODO: not so nice setting id afterwards - me._addItem(item); - } - else if (type == 'rangeoverflow') { - // TODO: deprecated since version 2.1.0 (or 3.0.0?). cleanup some day - throw new TypeError('Item type "rangeoverflow" is deprecated. Use css styling instead: ' + - '.vis.timeline .item.range .content {overflow: visible;}'); - } - else { - throw new TypeError('Unknown item type "' + type + '"'); - } - } - }); + /** + * pointertype strings, for safe comparisons + * @property POINTER_MOUSE|TOUCH|PEN + * @final + * @type {String} + * @default 'mouse' 'touch' 'pen' + */ + var POINTER_MOUSE = Hammer.POINTER_MOUSE = 'mouse'; + var POINTER_TOUCH = Hammer.POINTER_TOUCH = 'touch'; + var POINTER_PEN = Hammer.POINTER_PEN = 'pen'; - this._order(); - this.stackDirty = true; // force re-stacking of all items next redraw - this.body.emitter.emit('change', {queue: true}); - }; + /** + * eventtypes + * @property EVENT_START|MOVE|END|RELEASE|TOUCH + * @final + * @type {String} + * @default 'start' 'change' 'move' 'end' 'release' 'touch' + */ + var EVENT_START = Hammer.EVENT_START = 'start'; + var EVENT_MOVE = Hammer.EVENT_MOVE = 'move'; + var EVENT_END = Hammer.EVENT_END = 'end'; + var EVENT_RELEASE = Hammer.EVENT_RELEASE = 'release'; + var EVENT_TOUCH = Hammer.EVENT_TOUCH = 'touch'; /** - * Handle added items - * @param {Number[]} ids - * @protected + * if the window events are set... + * @property READY + * @writeOnce + * @type {Boolean} + * @default false */ - ItemSet.prototype._onAdd = ItemSet.prototype._onUpdate; + Hammer.READY = false; /** - * Handle removed items - * @param {Number[]} ids - * @protected + * plugins namespace + * @property plugins + * @type {Object} */ - ItemSet.prototype._onRemove = function(ids) { - var count = 0; - var me = this; - ids.forEach(function (id) { - var item = me.items[id]; - if (item) { - count++; - me._removeItem(item); - } - }); - - if (count) { - // update order - this._order(); - this.stackDirty = true; // force re-stacking of all items next redraw - this.body.emitter.emit('change', {queue: true}); - } - }; + Hammer.plugins = Hammer.plugins || {}; /** - * Update the order of item in all groups - * @private + * gestures namespace + * see `/gestures` for the definitions + * @property gestures + * @type {Object} */ - ItemSet.prototype._order = function() { - // reorder the items in all groups - // TODO: optimization: only reorder groups affected by the changed items - util.forEach(this.groups, function (group) { - group.order(); - }); - }; + Hammer.gestures = Hammer.gestures || {}; /** - * Handle updated groups - * @param {Number[]} ids + * setup events to detect gestures on the document + * this function is called when creating an new instance * @private */ - ItemSet.prototype._onUpdateGroups = function(ids) { - this._onAddGroups(ids); - }; + function setup() { + if(Hammer.READY) { + return; + } + + // find what eventtypes we add listeners to + Event.determineEventTypes(); + + // Register all gestures inside Hammer.gestures + Utils.each(Hammer.gestures, function(gesture) { + Detection.register(gesture); + }); + + // Add touch events on the document + Event.onTouch(Hammer.DOCUMENT, EVENT_MOVE, Detection.detect); + Event.onTouch(Hammer.DOCUMENT, EVENT_END, Detection.detect); + + // Hammer is ready...! + Hammer.READY = true; + } /** - * Handle changed groups (added or updated) - * @param {Number[]} ids - * @private + * @module hammer + * + * @class Utils + * @static */ - ItemSet.prototype._onAddGroups = function(ids) { - var me = this; + var Utils = Hammer.utils = { + /** + * extend method, could also be used for cloning when `dest` is an empty object. + * changes the dest object + * @method extend + * @param {Object} dest + * @param {Object} src + * @param {Boolean} [merge=false] do a merge + * @return {Object} dest + */ + extend: function extend(dest, src, merge) { + for(var key in src) { + if(!src.hasOwnProperty(key) || (dest[key] !== undefined && merge)) { + continue; + } + dest[key] = src[key]; + } + return dest; + }, - ids.forEach(function (id) { - var groupData = me.groupsData.get(id); - var group = me.groups[id]; + /** + * simple addEventListener wrapper + * @method on + * @param {HTMLElement} element + * @param {String} type + * @param {Function} handler + */ + on: function on(element, type, handler) { + element.addEventListener(type, handler, false); + }, - if (!group) { - // check for reserved ids - if (id == UNGROUPED || id == BACKGROUND) { - throw new Error('Illegal group id. ' + id + ' is a reserved id.'); - } + /** + * simple removeEventListener wrapper + * @method off + * @param {HTMLElement} element + * @param {String} type + * @param {Function} handler + */ + off: function off(element, type, handler) { + element.removeEventListener(type, handler, false); + }, - var groupOptions = Object.create(me.options); - util.extend(groupOptions, { - height: null - }); + /** + * forEach over arrays and objects + * @method each + * @param {Object|Array} obj + * @param {Function} iterator + * @param {any} iterator.item + * @param {Number} iterator.index + * @param {Object|Array} iterator.obj the source object + * @param {Object} context value to use as `this` in the iterator + */ + each: function each(obj, iterator, context) { + var i, len; - group = new Group(id, groupData, me); - me.groups[id] = group; + // native forEach on arrays + if('forEach' in obj) { + obj.forEach(iterator, context); + // arrays + } else if(obj.length !== undefined) { + for(i = 0, len = obj.length; i < len; i++) { + if(iterator.call(context, obj[i], i, obj) === false) { + return; + } + } + // objects + } else { + for(i in obj) { + if(obj.hasOwnProperty(i) && + iterator.call(context, obj[i], i, obj) === false) { + return; + } + } + } + }, - // add items with this groupId to the new group - for (var itemId in me.items) { - if (me.items.hasOwnProperty(itemId)) { - var item = me.items[itemId]; - if (item.data.group == id) { - group.add(item); - } + /** + * find if a string contains the string using indexOf + * @method inStr + * @param {String} src + * @param {String} find + * @return {Boolean} found + */ + inStr: function inStr(src, find) { + return src.indexOf(find) > -1; + }, + + /** + * find if a array contains the object using indexOf or a simple polyfill + * @method inArray + * @param {String} src + * @param {String} find + * @return {Boolean|Number} false when not found, or the index + */ + inArray: function inArray(src, find) { + if(src.indexOf) { + var index = src.indexOf(find); + return (index === -1) ? false : index; + } else { + for(var i = 0, len = src.length; i < len; i++) { + if(src[i] === find) { + return i; + } + } + return false; } - } + }, - group.order(); - group.show(); - } - else { - // update group - group.setData(groupData); - } - }); + /** + * convert an array-like object (`arguments`, `touchlist`) to an array + * @method toArray + * @param {Object} obj + * @return {Array} + */ + toArray: function toArray(obj) { + return Array.prototype.slice.call(obj, 0); + }, - this.body.emitter.emit('change', {queue: true}); - }; + /** + * find if a node is in the given parent + * @method hasParent + * @param {HTMLElement} node + * @param {HTMLElement} parent + * @return {Boolean} found + */ + hasParent: function hasParent(node, parent) { + while(node) { + if(node == parent) { + return true; + } + node = node.parentNode; + } + return false; + }, - /** - * Handle removed groups - * @param {Number[]} ids - * @private - */ - ItemSet.prototype._onRemoveGroups = function(ids) { - var groups = this.groups; - ids.forEach(function (id) { - var group = groups[id]; + /** + * get the center of all the touches + * @method getCenter + * @param {Array} touches + * @return {Object} center contains `pageX`, `pageY`, `clientX` and `clientY` properties + */ + getCenter: function getCenter(touches) { + var pageX = [], + pageY = [], + clientX = [], + clientY = [], + min = Math.min, + max = Math.max; - if (group) { - group.hide(); - delete groups[id]; - } - }); + // no need to loop when only one touch + if(touches.length === 1) { + return { + pageX: touches[0].pageX, + pageY: touches[0].pageY, + clientX: touches[0].clientX, + clientY: touches[0].clientY + }; + } - this.markDirty(); + Utils.each(touches, function(touch) { + pageX.push(touch.pageX); + pageY.push(touch.pageY); + clientX.push(touch.clientX); + clientY.push(touch.clientY); + }); - this.body.emitter.emit('change', {queue: true}); - }; + return { + pageX: (min.apply(Math, pageX) + max.apply(Math, pageX)) / 2, + pageY: (min.apply(Math, pageY) + max.apply(Math, pageY)) / 2, + clientX: (min.apply(Math, clientX) + max.apply(Math, clientX)) / 2, + clientY: (min.apply(Math, clientY) + max.apply(Math, clientY)) / 2 + }; + }, - /** - * Reorder the groups if needed - * @return {boolean} changed - * @private - */ - ItemSet.prototype._orderGroups = function () { - if (this.groupsData) { - // reorder the groups - var groupIds = this.groupsData.getIds({ - order: this.options.groupOrder - }); + /** + * calculate the velocity between two points. unit is in px per ms. + * @method getVelocity + * @param {Number} deltaTime + * @param {Number} deltaX + * @param {Number} deltaY + * @return {Object} velocity `x` and `y` + */ + getVelocity: function getVelocity(deltaTime, deltaX, deltaY) { + return { + x: Math.abs(deltaX / deltaTime) || 0, + y: Math.abs(deltaY / deltaTime) || 0 + }; + }, - var changed = !util.equalArray(groupIds, this.groupIds); - if (changed) { - // hide all groups, removes them from the DOM - var groups = this.groups; - groupIds.forEach(function (groupId) { - groups[groupId].hide(); - }); + /** + * calculate the angle between two coordinates + * @method getAngle + * @param {Touch} touch1 + * @param {Touch} touch2 + * @return {Number} angle + */ + getAngle: function getAngle(touch1, touch2) { + var x = touch2.clientX - touch1.clientX, + y = touch2.clientY - touch1.clientY; - // show the groups again, attach them to the DOM in correct order - groupIds.forEach(function (groupId) { - groups[groupId].show(); - }); + return Math.atan2(y, x) * 180 / Math.PI; + }, - this.groupIds = groupIds; - } + /** + * do a small comparision to get the direction between two touches. + * @method getDirection + * @param {Touch} touch1 + * @param {Touch} touch2 + * @return {String} direction matches `DIRECTION_LEFT|RIGHT|UP|DOWN` + */ + getDirection: function getDirection(touch1, touch2) { + var x = Math.abs(touch1.clientX - touch2.clientX), + y = Math.abs(touch1.clientY - touch2.clientY); - return changed; - } - else { - return false; - } - }; + if(x >= y) { + return touch1.clientX - touch2.clientX > 0 ? DIRECTION_LEFT : DIRECTION_RIGHT; + } + return touch1.clientY - touch2.clientY > 0 ? DIRECTION_UP : DIRECTION_DOWN; + }, - /** - * Add a new item - * @param {Item} item - * @private - */ - ItemSet.prototype._addItem = function(item) { - this.items[item.id] = item; + /** + * calculate the distance between two touches + * @method getDistance + * @param {Touch}touch1 + * @param {Touch} touch2 + * @return {Number} distance + */ + getDistance: function getDistance(touch1, touch2) { + var x = touch2.clientX - touch1.clientX, + y = touch2.clientY - touch1.clientY; - // add to group - var groupId = this._getGroupId(item.data); - var group = this.groups[groupId]; - if (group) group.add(item); - }; + return Math.sqrt((x * x) + (y * y)); + }, - /** - * Update an existing item - * @param {Item} item - * @param {Object} itemData - * @private - */ - ItemSet.prototype._updateItem = function(item, itemData) { - var oldGroupId = item.data.group; + /** + * calculate the scale factor between two touchLists + * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out + * @method getScale + * @param {Array} start array of touches + * @param {Array} end array of touches + * @return {Number} scale + */ + getScale: function getScale(start, end) { + // need two fingers... + if(start.length >= 2 && end.length >= 2) { + return this.getDistance(end[0], end[1]) / this.getDistance(start[0], start[1]); + } + return 1; + }, - // update the items data (will redraw the item when displayed) - item.setData(itemData); + /** + * calculate the rotation degrees between two touchLists + * @method getRotation + * @param {Array} start array of touches + * @param {Array} end array of touches + * @return {Number} rotation + */ + getRotation: function getRotation(start, end) { + // need two fingers + if(start.length >= 2 && end.length >= 2) { + return this.getAngle(end[1], end[0]) - this.getAngle(start[1], start[0]); + } + return 0; + }, - // update group - if (oldGroupId != item.data.group) { - var oldGroup = this.groups[oldGroupId]; - if (oldGroup) oldGroup.remove(item); + /** + * find out if the direction is vertical * + * @method isVertical + * @param {String} direction matches `DIRECTION_UP|DOWN` + * @return {Boolean} is_vertical + */ + isVertical: function isVertical(direction) { + return direction == DIRECTION_UP || direction == DIRECTION_DOWN; + }, - var groupId = this._getGroupId(item.data); - var group = this.groups[groupId]; - if (group) group.add(item); - } - }; + /** + * set css properties with their prefixes + * @param {HTMLElement} element + * @param {String} prop + * @param {String} value + * @param {Boolean} [toggle=true] + * @return {Boolean} + */ + setPrefixedCss: function setPrefixedCss(element, prop, value, toggle) { + var prefixes = ['', 'Webkit', 'Moz', 'O', 'ms']; + prop = Utils.toCamelCase(prop); - /** - * Delete an item from the ItemSet: remove it from the DOM, from the map - * with items, and from the map with visible items, and from the selection - * @param {Item} item - * @private - */ - ItemSet.prototype._removeItem = function(item) { - // remove from DOM - item.hide(); + for(var i = 0; i < prefixes.length; i++) { + var p = prop; + // prefixes + if(prefixes[i]) { + p = prefixes[i] + p.slice(0, 1).toUpperCase() + p.slice(1); + } - // remove from items - delete this.items[item.id]; + // test the style + if(p in element.style) { + element.style[p] = (toggle == null || toggle) && value || ''; + break; + } + } + }, - // remove from selection - var index = this.selection.indexOf(item.id); - if (index != -1) this.selection.splice(index, 1); + /** + * toggle browser default behavior by setting css properties. + * `userSelect='none'` also sets `element.onselectstart` to false + * `userDrag='none'` also sets `element.ondragstart` to false + * + * @method toggleBehavior + * @param {HtmlElement} element + * @param {Object} props + * @param {Boolean} [toggle=true] + */ + toggleBehavior: function toggleBehavior(element, props, toggle) { + if(!props || !element || !element.style) { + return; + } - // remove from group - item.parent && item.parent.remove(item); - }; + // set the css properties + Utils.each(props, function(value, prop) { + Utils.setPrefixedCss(element, prop, value, toggle); + }); + + var falseFn = toggle && function() { + return false; + }; - /** - * Create an array containing all items being a range (having an end date) - * @param array - * @returns {Array} - * @private - */ - ItemSet.prototype._constructByEndArray = function(array) { - var endArray = []; + // also the disable onselectstart + if(props.userSelect == 'none') { + element.onselectstart = falseFn; + } + // and disable ondragstart + if(props.userDrag == 'none') { + element.ondragstart = falseFn; + } + }, - for (var i = 0; i < array.length; i++) { - if (array[i] instanceof RangeItem) { - endArray.push(array[i]); + /** + * convert a string with underscores to camelCase + * so prevent_default becomes preventDefault + * @param {String} str + * @return {String} camelCaseStr + */ + toCamelCase: function toCamelCase(str) { + return str.replace(/[_-]([a-z])/g, function(s) { + return s[1].toUpperCase(); + }); } - } - return endArray; }; + /** - * Register the clicked item on touch, before dragStart is initiated. - * - * dragStart is initiated from a mousemove event, which can have left the item - * already resulting in an item == null - * - * @param {Event} event - * @private + * @module hammer */ - ItemSet.prototype._onTouch = function (event) { - // store the touched item, used in _onDragStart - this.touchParams.item = ItemSet.itemFromTarget(event); - }; - /** - * Start dragging the selected events - * @param {Event} event - * @private + * @class Event + * @static */ - ItemSet.prototype._onDragStart = function (event) { - if (!this.options.editable.updateTime && !this.options.editable.updateGroup) { - return; - } + var Event = Hammer.event = { + /** + * when touch events have been fired, this is true + * this is used to stop mouse events + * @property prevent_mouseevents + * @private + * @type {Boolean} + */ + preventMouseEvents: false, - var item = this.touchParams.item || null; - var me = this; - var props; + /** + * if EVENT_START has been fired + * @property started + * @private + * @type {Boolean} + */ + started: false, - if (item && item.selected) { - var dragLeftItem = event.target.dragLeftItem; - var dragRightItem = event.target.dragRightItem; + /** + * when the mouse is hold down, this is true + * @property should_detect + * @private + * @type {Boolean} + */ + shouldDetect: false, - if (dragLeftItem) { - props = { - item: dragLeftItem, - initialX: event.gesture.center.clientX - }; + /** + * simple event binder with a hook and support for multiple types + * @method on + * @param {HTMLElement} element + * @param {String} type + * @param {Function} handler + * @param {Function} [hook] + * @param {Object} hook.type + */ + on: function on(element, type, handler, hook) { + var types = type.split(' '); + Utils.each(types, function(type) { + Utils.on(element, type, handler); + hook && hook(type); + }); + }, - if (me.options.editable.updateTime) { - props.start = item.data.start.valueOf(); - } - if (me.options.editable.updateGroup) { - if ('group' in item.data) props.group = item.data.group; - } + /** + * simple event unbinder with a hook and support for multiple types + * @method off + * @param {HTMLElement} element + * @param {String} type + * @param {Function} handler + * @param {Function} [hook] + * @param {Object} hook.type + */ + off: function off(element, type, handler, hook) { + var types = type.split(' '); + Utils.each(types, function(type) { + Utils.off(element, type, handler); + hook && hook(type); + }); + }, - this.touchParams.itemProps = [props]; - } - else if (dragRightItem) { - props = { - item: dragRightItem, - initialX: event.gesture.center.clientX - }; + /** + * the core touch event handler. + * this finds out if we should to detect gestures + * @method onTouch + * @param {HTMLElement} element + * @param {String} eventType matches `EVENT_START|MOVE|END` + * @param {Function} handler + * @return onTouchHandler {Function} the core event handler + */ + onTouch: function onTouch(element, eventType, handler) { + var self = this; - if (me.options.editable.updateTime) { - props.end = item.data.end.valueOf(); - } - if (me.options.editable.updateGroup) { - if ('group' in item.data) props.group = item.data.group; - } + var onTouchHandler = function onTouchHandler(ev) { + var srcType = ev.type.toLowerCase(), + isPointer = Hammer.HAS_POINTEREVENTS, + isMouse = Utils.inStr(srcType, 'mouse'), + triggerType; - this.touchParams.itemProps = [props]; - } - else { - this.touchParams.itemProps = this.getSelection().map(function (id) { - var item = me.items[id]; - var props = { - item: item, - initialX: event.gesture.center.clientX - }; + // if we are in a mouseevent, but there has been a touchevent triggered in this session + // we want to do nothing. simply break out of the event. + if(isMouse && self.preventMouseEvents) { + return; - if (me.options.editable.updateTime) { - if ('start' in item.data) props.start = item.data.start.valueOf(); - if ('end' in item.data) props.end = item.data.end.valueOf(); - } - if (me.options.editable.updateGroup) { - if ('group' in item.data) props.group = item.data.group; - } + // mousebutton must be down + } else if(isMouse && eventType == EVENT_START && ev.button === 0) { + self.preventMouseEvents = false; + self.shouldDetect = true; + } else if(isPointer && eventType == EVENT_START) { + self.shouldDetect = (ev.buttons === 1 || PointerEvent.matchType(POINTER_TOUCH, ev)); + // just a valid start event, but no mouse + } else if(!isMouse && eventType == EVENT_START) { + self.preventMouseEvents = true; + self.shouldDetect = true; + } - return props; - }); - } + // update the pointer event before entering the detection + if(isPointer && eventType != EVENT_END) { + PointerEvent.updatePointer(eventType, ev); + } - event.stopPropagation(); - } - }; + // we are in a touch/down state, so allowed detection of gestures + if(self.shouldDetect) { + triggerType = self.doDetect.call(self, ev, eventType, element, handler); + } - /** - * Drag selected items - * @param {Event} event - * @private - */ - ItemSet.prototype._onDrag = function (event) { - event.preventDefault() + // ...and we are done with the detection + // so reset everything to start each detection totally fresh + if(triggerType == EVENT_END) { + self.preventMouseEvents = false; + self.shouldDetect = false; + PointerEvent.reset(); + // update the pointerevent object after the detection + } - if (this.touchParams.itemProps) { - var me = this; - var snap = this.body.util.snap || null; - var xOffset = this.body.dom.root.offsetLeft + this.body.domProps.left.width; + if(isPointer && eventType == EVENT_END) { + PointerEvent.updatePointer(eventType, ev); + } + }; - // move - this.touchParams.itemProps.forEach(function (props) { - var newProps = {}; - var current = me.body.util.toTime(event.gesture.center.clientX - xOffset); - var initial = me.body.util.toTime(props.initialX - xOffset); - var offset = current - initial; + this.on(element, EVENT_TYPES[eventType], onTouchHandler); + return onTouchHandler; + }, - if ('start' in props) { - var start = new Date(props.start + offset); - newProps.start = snap ? snap(start) : start; - } + /** + * the core detection method + * this finds out what hammer-touch-events to trigger + * @method doDetect + * @param {Object} ev + * @param {String} eventType matches `EVENT_START|MOVE|END` + * @param {HTMLElement} element + * @param {Function} handler + * @return {String} triggerType matches `EVENT_START|MOVE|END` + */ + doDetect: function doDetect(ev, eventType, element, handler) { + var touchList = this.getTouchList(ev, eventType); + var touchListLength = touchList.length; + var triggerType = eventType; + var triggerChange = touchList.trigger; // used by fakeMultitouch plugin + var changedLength = touchListLength; - if ('end' in props) { - var end = new Date(props.end + offset); - newProps.end = snap ? snap(end) : end; - } + // at each touchstart-like event we want also want to trigger a TOUCH event... + if(eventType == EVENT_START) { + triggerChange = EVENT_TOUCH; + // ...the same for a touchend-like event + } else if(eventType == EVENT_END) { + triggerChange = EVENT_RELEASE; - if ('group' in props) { - // drag from one group to another - var group = ItemSet.groupFromTarget(event); - newProps.group = group && group.groupId; - } + // keep track of how many touches have been removed + changedLength = touchList.length - ((ev.changedTouches) ? ev.changedTouches.length : 1); + } - // confirm moving the item - var itemData = util.extend({}, props.item.data, newProps); - me.options.onMoving(itemData, function (itemData) { - if (itemData) { - me._updateItemProps(props.item, itemData); + // after there are still touches on the screen, + // we just want to trigger a MOVE event. so change the START or END to a MOVE + // but only after detection has been started, the first time we actualy want a START + if(changedLength > 0 && this.started) { + triggerType = EVENT_MOVE; } - }); - }); - this.stackDirty = true; // force re-stacking of all items next redraw - this.body.emitter.emit('change'); + // detection has been started, we keep track of this, see above + this.started = true; - event.stopPropagation(); - } - }; + // generate some event data, some basic information + var evData = this.collectEventData(element, triggerType, touchList, ev); - /** - * Update an items properties - * @param {Item} item - * @param {Object} props Can contain properties start, end, and group. - * @private - */ - ItemSet.prototype._updateItemProps = function(item, props) { - // TODO: copy all properties from props to item? (also new ones) - if ('start' in props) item.data.start = props.start; - if ('end' in props) item.data.end = props.end; - if ('group' in props && item.data.group != props.group) { - this._moveToGroup(item, props.group) - } - }; + // trigger the triggerType event before the change (TOUCH, RELEASE) events + // but the END event should be at last + if(eventType != EVENT_END) { + handler.call(Detection, evData); + } - /** - * Move an item to another group - * @param {Item} item - * @param {String | Number} groupId - * @private - */ - ItemSet.prototype._moveToGroup = function(item, groupId) { - var group = this.groups[groupId]; - if (group && group.groupId != item.data.group) { - var oldGroup = item.parent; - oldGroup.remove(item); - oldGroup.order(); - group.add(item); - group.order(); + // trigger a change (TOUCH, RELEASE) event, this means the length of the touches changed + if(triggerChange) { + evData.changedLength = changedLength; + evData.eventType = triggerChange; - item.data.group = group.groupId; - } - }; + handler.call(Detection, evData); - /** - * End of dragging selected items - * @param {Event} event - * @private - */ - ItemSet.prototype._onDragEnd = function (event) { - event.preventDefault() + evData.eventType = triggerType; + delete evData.changedLength; + } - if (this.touchParams.itemProps) { - // prepare a change set for the changed items - var changes = [], - me = this, - dataset = this.itemsData.getDataSet(); + // trigger the END event + if(triggerType == EVENT_END) { + handler.call(Detection, evData); - var itemProps = this.touchParams.itemProps ; - this.touchParams.itemProps = null; - itemProps.forEach(function (props) { - var id = props.item.id, - itemData = me.itemsData.get(id, me.itemOptions); + // ...and we are done with the detection + // so reset everything to start each detection totally fresh + this.started = false; + } - var changed = false; - if ('start' in props.item.data) { - changed = (props.start != props.item.data.start.valueOf()); - itemData.start = util.convert(props.item.data.start, - dataset._options.type && dataset._options.type.start || 'Date'); - } - if ('end' in props.item.data) { - changed = changed || (props.end != props.item.data.end.valueOf()); - itemData.end = util.convert(props.item.data.end, - dataset._options.type && dataset._options.type.end || 'Date'); - } - if ('group' in props.item.data) { - changed = changed || (props.group != props.item.data.group); - itemData.group = props.item.data.group; - } + return triggerType; + }, - // only apply changes when start or end is actually changed - if (changed) { - me.options.onMove(itemData, function (itemData) { - if (itemData) { - // apply changes - itemData[dataset._fieldId] = id; // ensure the item contains its id (can be undefined) - changes.push(itemData); - } - else { - // restore original values - me._updateItemProps(props.item, props); + /** + * we have different events for each device/browser + * determine what we need and set them in the EVENT_TYPES constant + * the `onTouch` method is bind to these properties. + * @method determineEventTypes + * @return {Object} events + */ + determineEventTypes: function determineEventTypes() { + var types; + if(Hammer.HAS_POINTEREVENTS) { + if(window.PointerEvent) { + types = [ + 'pointerdown', + 'pointermove', + 'pointerup pointercancel lostpointercapture' + ]; + } else { + types = [ + 'MSPointerDown', + 'MSPointerMove', + 'MSPointerUp MSPointerCancel MSLostPointerCapture' + ]; + } + } else if(Hammer.NO_MOUSEEVENTS) { + types = [ + 'touchstart', + 'touchmove', + 'touchend touchcancel' + ]; + } else { + types = [ + 'touchstart mousedown', + 'touchmove mousemove', + 'touchend touchcancel mouseup' + ]; + } - me.stackDirty = true; // force re-stacking of all items next redraw - me.body.emitter.emit('change'); - } - }); - } - }); + EVENT_TYPES[EVENT_START] = types[0]; + EVENT_TYPES[EVENT_MOVE] = types[1]; + EVENT_TYPES[EVENT_END] = types[2]; + return EVENT_TYPES; + }, - // apply the changes to the data (if there are changes) - if (changes.length) { - dataset.update(changes); - } + /** + * create touchList depending on the event + * @method getTouchList + * @param {Object} ev + * @param {String} eventType + * @return {Array} touches + */ + getTouchList: function getTouchList(ev, eventType) { + // get the fake pointerEvent touchlist + if(Hammer.HAS_POINTEREVENTS) { + return PointerEvent.getTouchList(); + } - event.stopPropagation(); - } - }; + // get the touchlist + if(ev.touches) { + if(eventType == EVENT_MOVE) { + return ev.touches; + } - /** - * Handle selecting/deselecting an item when tapping it - * @param {Event} event - * @private - */ - ItemSet.prototype._onSelectItem = function (event) { - if (!this.options.selectable) return; + var identifiers = []; + var concat = [].concat(Utils.toArray(ev.touches), Utils.toArray(ev.changedTouches)); + var touchList = []; - var ctrlKey = event.gesture.srcEvent && event.gesture.srcEvent.ctrlKey; - var shiftKey = event.gesture.srcEvent && event.gesture.srcEvent.shiftKey; - if (ctrlKey || shiftKey) { - this._onMultiSelectItem(event); - return; - } + Utils.each(concat, function(touch) { + if(Utils.inArray(identifiers, touch.identifier) === false) { + touchList.push(touch); + } + identifiers.push(touch.identifier); + }); - var oldSelection = this.getSelection(); + return touchList; + } + + // make fake touchList from mouse position + ev.identifier = 1; + return [ev]; + }, + + /** + * collect basic event data + * @method collectEventData + * @param {HTMLElement} element + * @param {String} eventType matches `EVENT_START|MOVE|END` + * @param {Array} touches + * @param {Object} ev + * @return {Object} ev + */ + collectEventData: function collectEventData(element, eventType, touches, ev) { + // find out pointerType + var pointerType = POINTER_TOUCH; + if(Utils.inStr(ev.type, 'mouse') || PointerEvent.matchType(POINTER_MOUSE, ev)) { + pointerType = POINTER_MOUSE; + } else if(PointerEvent.matchType(POINTER_PEN, ev)) { + pointerType = POINTER_PEN; + } + + return { + center: Utils.getCenter(touches), + timeStamp: Date.now(), + target: ev.target, + touches: touches, + eventType: eventType, + pointerType: pointerType, + srcEvent: ev, - var item = ItemSet.itemFromTarget(event); - var selection = item ? [item.id] : []; - this.setSelection(selection); + /** + * prevent the browser default actions + * mostly used to disable scrolling of the browser + */ + preventDefault: function() { + var srcEvent = this.srcEvent; + srcEvent.preventManipulation && srcEvent.preventManipulation(); + srcEvent.preventDefault && srcEvent.preventDefault(); + }, - var newSelection = this.getSelection(); + /** + * stop bubbling the event up to its parents + */ + stopPropagation: function() { + this.srcEvent.stopPropagation(); + }, - // emit a select event, - // except when old selection is empty and new selection is still empty - if (newSelection.length > 0 || oldSelection.length > 0) { - this.body.emitter.emit('select', { - items: newSelection - }); - } + /** + * immediately stop gesture detection + * might be useful after a swipe was detected + * @return {*} + */ + stopDetect: function() { + return Detection.stopDetect(); + } + }; + } }; + /** - * Handle creation and updates of an item on double tap - * @param event - * @private + * @module hammer + * + * @class PointerEvent + * @static */ - ItemSet.prototype._onAddItem = function (event) { - if (!this.options.selectable) return; - if (!this.options.editable.add) return; + var PointerEvent = Hammer.PointerEvent = { + /** + * holds all pointers, by `identifier` + * @property pointers + * @type {Object} + */ + pointers: {}, - var me = this, - snap = this.body.util.snap || null, - item = ItemSet.itemFromTarget(event); + /** + * get the pointers as an array + * @method getTouchList + * @return {Array} touchlist + */ + getTouchList: function getTouchList() { + var touchlist = []; + // we can use forEach since pointerEvents only is in IE10 + Utils.each(this.pointers, function(pointer) { + touchlist.push(pointer); + }); + return touchlist; + }, - if (item) { - // update item + /** + * update the position of a pointer + * @method updatePointer + * @param {String} eventType matches `EVENT_START|MOVE|END` + * @param {Object} pointerEvent + */ + updatePointer: function updatePointer(eventType, pointerEvent) { + if(eventType == EVENT_END || (eventType != EVENT_END && pointerEvent.buttons !== 1)) { + delete this.pointers[pointerEvent.pointerId]; + } else { + pointerEvent.identifier = pointerEvent.pointerId; + this.pointers[pointerEvent.pointerId] = pointerEvent; + } + }, - // execute async handler to update the item (or cancel it) - var itemData = me.itemsData.get(item.id); // get a clone of the data from the dataset - this.options.onUpdate(itemData, function (itemData) { - if (itemData) { - me.itemsData.getDataSet().update(itemData); - } - }); - } - else { - // add item - var xAbs = util.getAbsoluteLeft(this.dom.frame); - var x = event.gesture.center.pageX - xAbs; - var start = this.body.util.toTime(x); - var newItem = { - start: snap ? snap(start) : start, - content: 'new item' - }; + /** + * check if ev matches pointertype + * @method matchType + * @param {String} pointerType matches `POINTER_MOUSE|TOUCH|PEN` + * @param {PointerEvent} ev + */ + matchType: function matchType(pointerType, ev) { + if(!ev.pointerType) { + return false; + } - // when default type is a range, add a default end date to the new item - if (this.options.type === 'range') { - var end = this.body.util.toTime(x + this.props.width / 5); - newItem.end = snap ? snap(end) : end; - } + var pt = ev.pointerType, + types = {}; - newItem[this.itemsData._fieldId] = util.randomUUID(); + types[POINTER_MOUSE] = (pt === (ev.MSPOINTER_TYPE_MOUSE || POINTER_MOUSE)); + types[POINTER_TOUCH] = (pt === (ev.MSPOINTER_TYPE_TOUCH || POINTER_TOUCH)); + types[POINTER_PEN] = (pt === (ev.MSPOINTER_TYPE_PEN || POINTER_PEN)); + return types[pointerType]; + }, - var group = ItemSet.groupFromTarget(event); - if (group) { - newItem.group = group.groupId; + /** + * reset the stored pointers + * @method reset + */ + reset: function resetList() { + this.pointers = {}; } - - // execute async handler to customize (or cancel) adding an item - this.options.onAdd(newItem, function (item) { - if (item) { - me.itemsData.getDataSet().add(item); - // TODO: need to trigger a redraw? - } - }); - } }; + /** - * Handle selecting/deselecting multiple items when holding an item - * @param {Event} event - * @private + * @module hammer + * + * @class Detection + * @static */ - ItemSet.prototype._onMultiSelectItem = function (event) { - if (!this.options.selectable) return; - - var selection, - item = ItemSet.itemFromTarget(event); - - if (item) { - // multi select items - selection = this.getSelection(); // current selection + var Detection = Hammer.detection = { + // contains all registred Hammer.gestures in the correct order + gestures: [], - var shiftKey = event.gesture.touches[0] && event.gesture.touches[0].shiftKey || false; - if (shiftKey) { - // select all items between the old selection and the tapped item + // data of the current Hammer.gesture detection session + current: null, - // determine the selection range - selection.push(item.id); - var range = ItemSet._getItemRange(this.itemsData.get(selection, this.itemOptions)); + // the previous Hammer.gesture session data + // is a full clone of the previous gesture.current object + previous: null, - // select all items within the selection range - selection = []; - for (var id in this.items) { - if (this.items.hasOwnProperty(id)) { - var _item = this.items[id]; - var start = _item.data.start; - var end = (_item.data.end !== undefined) ? _item.data.end : start; + // when this becomes true, no gestures are fired + stopped: false, - if (start >= range.min && end <= range.max) { - selection.push(_item.id); // do not use id but item.id, id itself is stringified - } + /** + * start Hammer.gesture detection + * @method startDetect + * @param {Hammer.Instance} inst + * @param {Object} eventData + */ + startDetect: function startDetect(inst, eventData) { + // already busy with a Hammer.gesture detection on an element + if(this.current) { + return; } - } - } - else { - // add/remove this item from the current selection - var index = selection.indexOf(item.id); - if (index == -1) { - // item is not yet selected -> select it - selection.push(item.id); - } - else { - // item is already selected -> deselect it - selection.splice(index, 1); - } - } - this.setSelection(selection); + this.stopped = false; - this.body.emitter.emit('select', { - items: this.getSelection() - }); - } - }; + // holds current session + this.current = { + inst: inst, // reference to HammerInstance we're working for + startEvent: Utils.extend({}, eventData), // start eventData for distances, timing etc + lastEvent: false, // last eventData + lastCalcEvent: false, // last eventData for calculations. + futureCalcEvent: false, // last eventData for calculations. + lastCalcData: {}, // last lastCalcData + name: '' // current gesture we're in/detected, can be 'tap', 'hold' etc + }; - /** - * Calculate the time range of a list of items - * @param {Array.} itemsData - * @return {{min: Date, max: Date}} Returns the range of the provided items - * @private - */ - ItemSet._getItemRange = function(itemsData) { - var max = null; - var min = null; + this.detect(eventData); + }, - itemsData.forEach(function (data) { - if (min == null || data.start < min) { - min = data.start; - } + /** + * Hammer.gesture detection + * @method detect + * @param {Object} eventData + * @return {any} + */ + detect: function detect(eventData) { + if(!this.current || this.stopped) { + return; + } - if (data.end != undefined) { - if (max == null || data.end > max) { - max = data.end; - } - } - else { - if (max == null || data.start > max) { - max = data.start; - } - } - }); + // extend event data with calculations about scale, distance etc + eventData = this.extendEventData(eventData); - return { - min: min, - max: max - } - }; + // hammer instance and instance options + var inst = this.current.inst, + instOptions = inst.options; - /** - * Find an item from an event target: - * searches for the attribute 'timeline-item' in the event target's element tree - * @param {Event} event - * @return {Item | null} item - */ - ItemSet.itemFromTarget = function(event) { - var target = event.target; - while (target) { - if (target.hasOwnProperty('timeline-item')) { - return target['timeline-item']; - } - target = target.parentNode; - } + // call Hammer.gesture handlers + Utils.each(this.gestures, function triggerGesture(gesture) { + // only when the instance options have enabled this gesture + if(!this.stopped && inst.enabled && instOptions[gesture.name]) { + gesture.handler.call(gesture, eventData, inst); + } + }, this); - return null; - }; + // store as previous event event + if(this.current) { + this.current.lastEvent = eventData; + } - /** - * Find the Group from an event target: - * searches for the attribute 'timeline-group' in the event target's element tree - * @param {Event} event - * @return {Group | null} group - */ - ItemSet.groupFromTarget = function(event) { - var target = event.target; - while (target) { - if (target.hasOwnProperty('timeline-group')) { - return target['timeline-group']; - } - target = target.parentNode; - } + if(eventData.eventType == EVENT_END) { + this.stopDetect(); + } - return null; - }; + return eventData; + }, - /** - * Find the ItemSet from an event target: - * searches for the attribute 'timeline-itemset' in the event target's element tree - * @param {Event} event - * @return {ItemSet | null} item - */ - ItemSet.itemSetFromTarget = function(event) { - var target = event.target; - while (target) { - if (target.hasOwnProperty('timeline-itemset')) { - return target['timeline-itemset']; - } - target = target.parentNode; - } + /** + * clear the Hammer.gesture vars + * this is called on endDetect, but can also be used when a final Hammer.gesture has been detected + * to stop other Hammer.gestures from being fired + * @method stopDetect + */ + stopDetect: function stopDetect() { + // clone current data to the store as the previous gesture + // used for the double tap gesture, since this is an other gesture detect session + this.previous = Utils.extend({}, this.current); - return null; - }; + // reset the current + this.current = null; + this.stopped = true; + }, - module.exports = ItemSet; + /** + * calculate velocity, angle and direction + * @method getVelocityData + * @param {Object} ev + * @param {Object} center + * @param {Number} deltaTime + * @param {Number} deltaX + * @param {Number} deltaY + */ + getCalculatedData: function getCalculatedData(ev, center, deltaTime, deltaX, deltaY) { + var cur = this.current, + recalc = false, + calcEv = cur.lastCalcEvent, + calcData = cur.lastCalcData; + if(calcEv && ev.timeStamp - calcEv.timeStamp > Hammer.CALCULATE_INTERVAL) { + center = calcEv.center; + deltaTime = ev.timeStamp - calcEv.timeStamp; + deltaX = ev.center.clientX - calcEv.center.clientX; + deltaY = ev.center.clientY - calcEv.center.clientY; + recalc = true; + } -/***/ }, -/* 28 */ -/***/ function(module, exports, __webpack_require__) { + if(ev.eventType == EVENT_TOUCH || ev.eventType == EVENT_RELEASE) { + cur.futureCalcEvent = ev; + } - var util = __webpack_require__(1); - var DOMutil = __webpack_require__(2); - var Component = __webpack_require__(20); + if(!cur.lastCalcEvent || recalc) { + calcData.velocity = Utils.getVelocity(deltaTime, deltaX, deltaY); + calcData.angle = Utils.getAngle(center, ev.center); + calcData.direction = Utils.getDirection(center, ev.center); - /** - * Legend for Graph2d - */ - function Legend(body, options, side, linegraphOptions) { - this.body = body; - this.defaultOptions = { - enabled: true, - icons: true, - iconSize: 20, - iconSpacing: 6, - left: { - visible: true, - position: 'top-left' // top/bottom - left,center,right + cur.lastCalcEvent = cur.futureCalcEvent || ev; + cur.futureCalcEvent = ev; + } + + ev.velocityX = calcData.velocity.x; + ev.velocityY = calcData.velocity.y; + ev.interimAngle = calcData.angle; + ev.interimDirection = calcData.direction; }, - right: { - visible: true, - position: 'top-left' // top/bottom - left,center,right - } - } - this.side = side; - this.options = util.extend({},this.defaultOptions); - this.linegraphOptions = linegraphOptions; - this.svgElements = {}; - this.dom = {}; - this.groups = {}; - this.amountOfGroups = 0; - this._create(); + /** + * extend eventData for Hammer.gestures + * @method extendEventData + * @param {Object} ev + * @return {Object} ev + */ + extendEventData: function extendEventData(ev) { + var cur = this.current, + startEv = cur.startEvent, + lastEv = cur.lastEvent || startEv; - this.setOptions(options); - } + // update the start touchlist to calculate the scale/rotation + if(ev.eventType == EVENT_TOUCH || ev.eventType == EVENT_RELEASE) { + startEv.touches = []; + Utils.each(ev.touches, function(touch) { + startEv.touches.push({ + clientX: touch.clientX, + clientY: touch.clientY + }); + }); + } - Legend.prototype = new Component(); + var deltaTime = ev.timeStamp - startEv.timeStamp, + deltaX = ev.center.clientX - startEv.center.clientX, + deltaY = ev.center.clientY - startEv.center.clientY; - Legend.prototype.clear = function() { - this.groups = {}; - this.amountOfGroups = 0; - } + this.getCalculatedData(ev, lastEv.center, deltaTime, deltaX, deltaY); - Legend.prototype.addGroup = function(label, graphOptions) { + Utils.extend(ev, { + startEvent: startEv, - if (!this.groups.hasOwnProperty(label)) { - this.groups[label] = graphOptions; - } - this.amountOfGroups += 1; - }; + deltaTime: deltaTime, + deltaX: deltaX, + deltaY: deltaY, - Legend.prototype.updateGroup = function(label, graphOptions) { - this.groups[label] = graphOptions; - }; + distance: Utils.getDistance(startEv.center, ev.center), + angle: Utils.getAngle(startEv.center, ev.center), + direction: Utils.getDirection(startEv.center, ev.center), + scale: Utils.getScale(startEv.touches, ev.touches), + rotation: Utils.getRotation(startEv.touches, ev.touches) + }); - Legend.prototype.removeGroup = function(label) { - if (this.groups.hasOwnProperty(label)) { - delete this.groups[label]; - this.amountOfGroups -= 1; - } - }; + return ev; + }, - Legend.prototype._create = function() { - this.dom.frame = document.createElement('div'); - this.dom.frame.className = 'legend'; - this.dom.frame.style.position = "absolute"; - this.dom.frame.style.top = "10px"; - this.dom.frame.style.display = "block"; + /** + * register new gesture + * @method register + * @param {Object} gesture object, see `gestures/` for documentation + * @return {Array} gestures + */ + register: function register(gesture) { + // add an enable gesture options if there is no given + var options = gesture.defaults || {}; + if(options[gesture.name] === undefined) { + options[gesture.name] = true; + } - this.dom.textArea = document.createElement('div'); - this.dom.textArea.className = 'legendText'; - this.dom.textArea.style.position = "relative"; - this.dom.textArea.style.top = "0px"; + // extend Hammer default options with the Hammer.gesture options + Utils.extend(Hammer.defaults, options, true); + + // set its index + gesture.index = gesture.index || 1000; + + // add Hammer.gesture to the list + this.gestures.push(gesture); - this.svg = document.createElementNS('http://www.w3.org/2000/svg',"svg"); - this.svg.style.position = 'absolute'; - this.svg.style.top = 0 +'px'; - this.svg.style.width = this.options.iconSize + 5 + 'px'; - this.svg.style.height = '100%'; + // sort the list by index + this.gestures.sort(function(a, b) { + if(a.index < b.index) { + return -1; + } + if(a.index > b.index) { + return 1; + } + return 0; + }); - this.dom.frame.appendChild(this.svg); - this.dom.frame.appendChild(this.dom.textArea); + return this.gestures; + } }; + /** - * Hide the component from the DOM + * @module hammer */ - Legend.prototype.hide = function() { - // remove the frame containing the items - if (this.dom.frame.parentNode) { - this.dom.frame.parentNode.removeChild(this.dom.frame); - } - }; /** - * Show the component in the DOM (when not already visible). - * @return {Boolean} changed + * create new hammer instance + * all methods should return the instance itself, so it is chainable. + * + * @class Instance + * @constructor + * @param {HTMLElement} element + * @param {Object} [options={}] options are merged with `Hammer.defaults` + * @return {Hammer.Instance} */ - Legend.prototype.show = function() { - // show frame containing the items - if (!this.dom.frame.parentNode) { - this.body.dom.center.appendChild(this.dom.frame); - } - }; + Hammer.Instance = function(element, options) { + var self = this; - Legend.prototype.setOptions = function(options) { - var fields = ['enabled','orientation','icons','left','right']; - util.selectiveDeepExtend(fields, this.options, options); - }; + // setup HammerJS window events and register all gestures + // this also sets up the default options + setup(); - Legend.prototype.redraw = function() { - var activeGroups = 0; - for (var groupId in this.groups) { - if (this.groups.hasOwnProperty(groupId)) { - if (this.groups[groupId].visible == true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] == true)) { - activeGroups++; - } - } - } + /** + * @property element + * @type {HTMLElement} + */ + this.element = element; - if (this.options[this.side].visible == false || this.amountOfGroups == 0 || this.options.enabled == false || activeGroups == 0) { - this.hide(); - } - else { - this.show(); - if (this.options[this.side].position == 'top-left' || this.options[this.side].position == 'bottom-left') { - this.dom.frame.style.left = '4px'; - this.dom.frame.style.textAlign = "left"; - this.dom.textArea.style.textAlign = "left"; - this.dom.textArea.style.left = (this.options.iconSize + 15) + 'px'; - this.dom.textArea.style.right = ''; - this.svg.style.left = 0 +'px'; - this.svg.style.right = ''; - } - else { - this.dom.frame.style.right = '4px'; - this.dom.frame.style.textAlign = "right"; - this.dom.textArea.style.textAlign = "right"; - this.dom.textArea.style.right = (this.options.iconSize + 15) + 'px'; - this.dom.textArea.style.left = ''; - this.svg.style.right = 0 +'px'; - this.svg.style.left = ''; - } + /** + * @property enabled + * @type {Boolean} + * @protected + */ + this.enabled = true; - if (this.options[this.side].position == 'top-left' || this.options[this.side].position == 'top-right') { - this.dom.frame.style.top = 4 - Number(this.body.dom.center.style.top.replace("px","")) + 'px'; - this.dom.frame.style.bottom = ''; - } - else { - var scrollableHeight = this.body.domProps.center.height - this.body.domProps.centerContainer.height; - this.dom.frame.style.bottom = 4 + scrollableHeight + Number(this.body.dom.center.style.top.replace("px","")) + 'px'; - this.dom.frame.style.top = ''; - } + /** + * options, merged with the defaults + * options with an _ are converted to camelCase + * @property options + * @type {Object} + */ + Utils.each(options, function(value, name) { + delete options[name]; + options[Utils.toCamelCase(name)] = value; + }); - if (this.options.icons == false) { - this.dom.frame.style.width = this.dom.textArea.offsetWidth + 10 + 'px'; - this.dom.textArea.style.right = ''; - this.dom.textArea.style.left = ''; - this.svg.style.width = '0px'; - } - else { - this.dom.frame.style.width = this.options.iconSize + 15 + this.dom.textArea.offsetWidth + 10 + 'px' - this.drawLegendIcons(); + this.options = Utils.extend(Utils.extend({}, Hammer.defaults), options || {}); + + // add some css to the element to prevent the browser from doing its native behavoir + if(this.options.behavior) { + Utils.toggleBehavior(this.element, this.options.behavior, true); } - var content = ''; - for (var groupId in this.groups) { - if (this.groups.hasOwnProperty(groupId)) { - if (this.groups[groupId].visible == true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] == true)) { - content += this.groups[groupId].content + '
'; + /** + * event start handler on the element to start the detection + * @property eventStartHandler + * @type {Object} + */ + this.eventStartHandler = Event.onTouch(element, EVENT_START, function(ev) { + if(self.enabled && ev.eventType == EVENT_START) { + Detection.startDetect(self, ev); + } else if(ev.eventType == EVENT_TOUCH) { + Detection.detect(ev); } - } - } - this.dom.textArea.innerHTML = content; - this.dom.textArea.style.lineHeight = ((0.75 * this.options.iconSize) + this.options.iconSpacing) + 'px'; - } + }); + + /** + * keep a list of user event handlers which needs to be removed when calling 'dispose' + * @property eventHandlers + * @type {Array} + */ + this.eventHandlers = []; }; - Legend.prototype.drawLegendIcons = function() { - if (this.dom.frame.parentNode) { - DOMutil.prepareElements(this.svgElements); - var padding = window.getComputedStyle(this.dom.frame).paddingTop; - var iconOffset = Number(padding.replace('px','')); - var x = iconOffset; - var iconWidth = this.options.iconSize; - var iconHeight = 0.75 * this.options.iconSize; - var y = iconOffset + 0.5 * iconHeight + 3; + Hammer.Instance.prototype = { + /** + * bind events to the instance + * @method on + * @chainable + * @param {String} gestures multiple gestures by splitting with a space + * @param {Function} handler + * @param {Object} handler.ev event object + */ + on: function onEvent(gestures, handler) { + var self = this; + Event.on(self.element, gestures, handler, function(type) { + self.eventHandlers.push({ gesture: type, handler: handler }); + }); + return self; + }, - this.svg.style.width = iconWidth + 5 + iconOffset + 'px'; + /** + * unbind events to the instance + * @method off + * @chainable + * @param {String} gestures + * @param {Function} handler + */ + off: function offEvent(gestures, handler) { + var self = this; - for (var groupId in this.groups) { - if (this.groups.hasOwnProperty(groupId)) { - if (this.groups[groupId].visible == true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] == true)) { - this.groups[groupId].drawIcon(x, y, this.svgElements, this.svg, iconWidth, iconHeight); - y += iconHeight + this.options.iconSpacing; + Event.off(self.element, gestures, handler, function(type) { + var index = Utils.inArray({ gesture: type, handler: handler }); + if(index !== false) { + self.eventHandlers.splice(index, 1); + } + }); + return self; + }, + + /** + * trigger gesture event + * @method trigger + * @chainable + * @param {String} gesture + * @param {Object} [eventData] + */ + trigger: function triggerEvent(gesture, eventData) { + // optional + if(!eventData) { + eventData = {}; } - } - } - DOMutil.cleanupElements(this.svgElements); - } - }; + // create DOM event + var event = Hammer.DOCUMENT.createEvent('Event'); + event.initEvent(gesture, true, true); + event.gesture = eventData; - module.exports = Legend; + // trigger on the target if it is in the instance element, + // this is for event delegation tricks + var element = this.element; + if(Utils.hasParent(eventData.target, element)) { + element = eventData.target; + } + element.dispatchEvent(event); + return this; + }, -/***/ }, -/* 29 */ -/***/ function(module, exports, __webpack_require__) { + /** + * enable of disable hammer.js detection + * @method enable + * @chainable + * @param {Boolean} state + */ + enable: function enable(state) { + this.enabled = state; + return this; + }, - var util = __webpack_require__(1); - var DOMutil = __webpack_require__(2); - var DataSet = __webpack_require__(3); - var DataView = __webpack_require__(4); - var Component = __webpack_require__(20); - var DataAxis = __webpack_require__(23); - var GraphGroup = __webpack_require__(24); - var Legend = __webpack_require__(28); - var BarGraphFunctions = __webpack_require__(52); + /** + * dispose this hammer instance + * @method dispose + * @return {Null} + */ + dispose: function dispose() { + var i, eh; - var UNGROUPED = '__ungrouped__'; // reserved group id for ungrouped items + // undo all changes made by stop_browser_behavior + Utils.toggleBehavior(this.element, this.options.behavior, false); - /** - * This is the constructor of the LineGraph. It requires a Timeline body and options. - * - * @param body - * @param options - * @constructor - */ - function LineGraph(body, options) { - this.id = util.randomUUID(); - this.body = body; + // unbind all custom event handlers + for(i = -1; (eh = this.eventHandlers[++i]);) { + Utils.off(this.element, eh.gesture, eh.handler); + } - this.defaultOptions = { - yAxisOrientation: 'left', - defaultGroup: 'default', - sort: true, - sampling: true, - graphHeight: '400px', - shaded: { - enabled: false, - orientation: 'bottom' // top, bottom - }, - style: 'line', // line, bar - barChart: { - width: 50, - handleOverlap: 'overlap', - align: 'center' // left, center, right - }, - catmullRom: { - enabled: true, - parametrization: 'centripetal', // uniform (alpha = 0.0), chordal (alpha = 1.0), centripetal (alpha = 0.5) - alpha: 0.5 - }, - drawPoints: { - enabled: true, - size: 6, - style: 'square' // square, circle - }, - dataAxis: { - showMinorLabels: true, - showMajorLabels: true, - icons: false, - width: '40px', - visible: true, - alignZeros: true, - customRange: { - left: {min:undefined, max:undefined}, - right: {min:undefined, max:undefined} - } - //, these options are not set by default, but this shows the format they will be in - //format: { - // left: {decimals: 2}, - // right: {decimals: 2} - //}, - //title: { - // left: { - // text: 'left', - // style: 'color:black;' - // }, - // right: { - // text: 'right', - // style: 'color:black;' - // } - //} - }, - legend: { - enabled: false, - icons: true, - left: { - visible: true, - position: 'top-left' // top/bottom - left,right - }, - right: { - visible: true, - position: 'top-right' // top/bottom - left,right - } - }, - groups: { - visibility: {} + this.eventHandlers = []; + + // unbind the start event listener + Event.off(this.element, EVENT_TYPES[EVENT_START], this.eventStartHandler); + + return null; } - }; + }; - // options is shared by this ItemSet and all its items - this.options = util.extend({}, this.defaultOptions); - this.dom = {}; - this.props = {}; - this.hammer = null; - this.groups = {}; - this.abortedGraphUpdate = false; - this.autoSizeSVG = false; - var me = this; - this.itemsData = null; // DataSet - this.groupsData = null; // DataSet + /** + * @module gestures + */ + /** + * Move with x fingers (default 1) around on the page. + * Preventing the default browser behavior is a good way to improve feel and working. + * ```` + * hammertime.on("drag", function(ev) { + * console.log(ev); + * ev.gesture.preventDefault(); + * }); + * ```` + * + * @class Drag + * @static + */ + /** + * @event drag + * @param {Object} ev + */ + /** + * @event dragstart + * @param {Object} ev + */ + /** + * @event dragend + * @param {Object} ev + */ + /** + * @event drapleft + * @param {Object} ev + */ + /** + * @event dragright + * @param {Object} ev + */ + /** + * @event dragup + * @param {Object} ev + */ + /** + * @event dragdown + * @param {Object} ev + */ - // listeners for the DataSet of the items - this.itemListeners = { - 'add': function (event, params, senderId) { - me._onAdd(params.items); - }, - 'update': function (event, params, senderId) { - me._onUpdate(params.items); - }, - 'remove': function (event, params, senderId) { - me._onRemove(params.items); - } - }; + /** + * @param {String} name + */ + (function(name) { + var triggered = false; - // listeners for the DataSet of the groups - this.groupListeners = { - 'add': function (event, params, senderId) { - me._onAddGroups(params.items); - }, - 'update': function (event, params, senderId) { - me._onUpdateGroups(params.items); - }, - 'remove': function (event, params, senderId) { - me._onRemoveGroups(params.items); - } - }; + function dragGesture(ev, inst) { + var cur = Detection.current; - this.items = {}; // object with an Item for every data item - this.selection = []; // list with the ids of all selected nodes - this.lastStart = this.body.range.start; - this.touchParams = {}; // stores properties while dragging + // max touches + if(inst.options.dragMaxTouches > 0 && + ev.touches.length > inst.options.dragMaxTouches) { + return; + } - this.svgElements = {}; - this.setOptions(options); - this.groupsUsingDefaultStyles = [0]; - this.COUNTER = 0; - this.body.emitter.on('rangechanged', function() { - me.lastStart = me.body.range.start; - me.svg.style.left = util.option.asSize(-me.width); - me.redraw.call(me,true); - }); + switch(ev.eventType) { + case EVENT_START: + triggered = false; + break; - // create the HTML DOM - this._create(); - this.framework = {svg: this.svg, svgElements: this.svgElements, options: this.options, groups: this.groups}; - this.body.emitter.emit('change'); + case EVENT_MOVE: + // when the distance we moved is too small we skip this gesture + // or we can be already in dragging + if(ev.distance < inst.options.dragMinDistance && + cur.name != name) { + return; + } - } + var startCenter = cur.startEvent.center; - LineGraph.prototype = new Component(); + // we are dragging! + if(cur.name != name) { + cur.name = name; + if(inst.options.dragDistanceCorrection && ev.distance > 0) { + // When a drag is triggered, set the event center to dragMinDistance pixels from the original event center. + // Without this correction, the dragged distance would jumpstart at dragMinDistance pixels instead of at 0. + // It might be useful to save the original start point somewhere + var factor = Math.abs(inst.options.dragMinDistance / ev.distance); + startCenter.pageX += ev.deltaX * factor; + startCenter.pageY += ev.deltaY * factor; + startCenter.clientX += ev.deltaX * factor; + startCenter.clientY += ev.deltaY * factor; - /** - * Create the HTML DOM for the ItemSet - */ - LineGraph.prototype._create = function(){ - var frame = document.createElement('div'); - frame.className = 'LineGraph'; - this.dom.frame = frame; + // recalculate event data using new start point + ev = Detection.extendEventData(ev); + } + } - // create svg element for graph drawing. - this.svg = document.createElementNS('http://www.w3.org/2000/svg','svg'); - this.svg.style.position = 'relative'; - this.svg.style.height = ('' + this.options.graphHeight).replace('px','') + 'px'; - this.svg.style.display = 'block'; - frame.appendChild(this.svg); + // lock drag to axis? + if(cur.lastEvent.dragLockToAxis || + ( inst.options.dragLockToAxis && + inst.options.dragLockMinDistance <= ev.distance + )) { + ev.dragLockToAxis = true; + } + + // keep direction on the axis that the drag gesture started on + var lastDirection = cur.lastEvent.direction; + if(ev.dragLockToAxis && lastDirection !== ev.direction) { + if(Utils.isVertical(lastDirection)) { + ev.direction = (ev.deltaY < 0) ? DIRECTION_UP : DIRECTION_DOWN; + } else { + ev.direction = (ev.deltaX < 0) ? DIRECTION_LEFT : DIRECTION_RIGHT; + } + } - // data axis - this.options.dataAxis.orientation = 'left'; - this.yAxisLeft = new DataAxis(this.body, this.options.dataAxis, this.svg, this.options.groups); + // first time, trigger dragstart event + if(!triggered) { + inst.trigger(name + 'start', ev); + triggered = true; + } - this.options.dataAxis.orientation = 'right'; - this.yAxisRight = new DataAxis(this.body, this.options.dataAxis, this.svg, this.options.groups); - delete this.options.dataAxis.orientation; + // trigger events + inst.trigger(name, ev); + inst.trigger(name + ev.direction, ev); - // legends - this.legendLeft = new Legend(this.body, this.options.legend, 'left', this.options.groups); - this.legendRight = new Legend(this.body, this.options.legend, 'right', this.options.groups); + var isVertical = Utils.isVertical(ev.direction); - this.show(); - }; + // block the browser events + if((inst.options.dragBlockVertical && isVertical) || + (inst.options.dragBlockHorizontal && !isVertical)) { + ev.preventDefault(); + } + break; - /** - * set the options of the LineGraph. the mergeOptions is used for subObjects that have an enabled element. - * @param {object} options - */ - LineGraph.prototype.setOptions = function(options) { - if (options) { - var fields = ['sampling','defaultGroup','graphHeight','yAxisOrientation','style','barChart','dataAxis','sort','groups']; - if (options.graphHeight === undefined && options.height !== undefined && this.body.domProps.centerContainer.height !== undefined) { - this.autoSizeSVG = true; - } - else if (this.body.domProps.centerContainer.height !== undefined && options.graphHeight !== undefined) { - if (parseInt((options.graphHeight + '').replace("px",'')) < this.body.domProps.centerContainer.height) { - this.autoSizeSVG = true; - } - } - util.selectiveDeepExtend(fields, this.options, options); - util.mergeOptions(this.options, options,'catmullRom'); - util.mergeOptions(this.options, options,'drawPoints'); - util.mergeOptions(this.options, options,'shaded'); - util.mergeOptions(this.options, options,'legend'); + case EVENT_RELEASE: + if(triggered && ev.changedLength <= inst.options.dragMaxTouches) { + inst.trigger(name + 'end', ev); + triggered = false; + } + break; - if (options.catmullRom) { - if (typeof options.catmullRom == 'object') { - if (options.catmullRom.parametrization) { - if (options.catmullRom.parametrization == 'uniform') { - this.options.catmullRom.alpha = 0; - } - else if (options.catmullRom.parametrization == 'chordal') { - this.options.catmullRom.alpha = 1.0; - } - else { - this.options.catmullRom.parametrization = 'centripetal'; - this.options.catmullRom.alpha = 0.5; - } + case EVENT_END: + triggered = false; + break; } - } } - if (this.yAxisLeft) { - if (options.dataAxis !== undefined) { - this.yAxisLeft.setOptions(this.options.dataAxis); - this.yAxisRight.setOptions(this.options.dataAxis); - } - } + Hammer.gestures.Drag = { + name: name, + index: 50, + handler: dragGesture, + defaults: { + /** + * minimal movement that have to be made before the drag event gets triggered + * @property dragMinDistance + * @type {Number} + * @default 10 + */ + dragMinDistance: 10, - if (this.legendLeft) { - if (options.legend !== undefined) { - this.legendLeft.setOptions(this.options.legend); - this.legendRight.setOptions(this.options.legend); - } - } + /** + * Set dragDistanceCorrection to true to make the starting point of the drag + * be calculated from where the drag was triggered, not from where the touch started. + * Useful to avoid a jerk-starting drag, which can make fine-adjustments + * through dragging difficult, and be visually unappealing. + * @property dragDistanceCorrection + * @type {Boolean} + * @default true + */ + dragDistanceCorrection: true, - if (this.groups.hasOwnProperty(UNGROUPED)) { - this.groups[UNGROUPED].setOptions(options); - } - } + /** + * set 0 for unlimited, but this can conflict with transform + * @property dragMaxTouches + * @type {Number} + * @default 1 + */ + dragMaxTouches: 1, - // this is used to redraw the graph if the visibility of the groups is changed. - if (this.dom.frame) { - this.redraw(true); - } - }; + /** + * prevent default browser behavior when dragging occurs + * be careful with it, it makes the element a blocking element + * when you are using the drag gesture, it is a good practice to set this true + * @property dragBlockHorizontal + * @type {Boolean} + * @default false + */ + dragBlockHorizontal: false, - /** - * Hide the component from the DOM - */ - LineGraph.prototype.hide = function() { - // remove the frame containing the items - if (this.dom.frame.parentNode) { - this.dom.frame.parentNode.removeChild(this.dom.frame); - } - }; + /** + * same as `dragBlockHorizontal`, but for vertical movement + * @property dragBlockVertical + * @type {Boolean} + * @default false + */ + dragBlockVertical: false, + + /** + * dragLockToAxis keeps the drag gesture on the axis that it started on, + * It disallows vertical directions if the initial direction was horizontal, and vice versa. + * @property dragLockToAxis + * @type {Boolean} + * @default false + */ + dragLockToAxis: false, + /** + * drag lock only kicks in when distance > dragLockMinDistance + * This way, locking occurs only when the distance has become large enough to reliably determine the direction + * @property dragLockMinDistance + * @type {Number} + * @default 25 + */ + dragLockMinDistance: 25 + } + }; + })('drag'); /** - * Show the component in the DOM (when not already visible). - * @return {Boolean} changed + * @module gestures */ - LineGraph.prototype.show = function() { - // show frame containing the items - if (!this.dom.frame.parentNode) { - this.body.dom.center.appendChild(this.dom.frame); - } - }; - - /** - * Set items - * @param {vis.DataSet | null} items + * trigger a simple gesture event, so you can do anything in your handler. + * only usable if you know what your doing... + * + * @class Gesture + * @static */ - LineGraph.prototype.setItems = function(items) { - var me = this, - ids, - oldItemsData = this.itemsData; - - // replace the dataset - if (!items) { - this.itemsData = null; - } - else if (items instanceof DataSet || items instanceof DataView) { - this.itemsData = items; - } - else { - throw new TypeError('Data must be an instance of DataSet or DataView'); - } - - if (oldItemsData) { - // unsubscribe from old dataset - util.forEach(this.itemListeners, function (callback, event) { - oldItemsData.off(event, callback); - }); - - // remove all drawn items - ids = oldItemsData.getIds(); - this._onRemove(ids); - } - - if (this.itemsData) { - // subscribe to new dataset - var id = this.id; - util.forEach(this.itemListeners, function (callback, event) { - me.itemsData.on(event, callback, id); - }); - - // add all new items - ids = this.itemsData.getIds(); - this._onAdd(ids); - } - this._updateUngrouped(); - //this._updateGraph(); - this.redraw(true); + /** + * @event gesture + * @param {Object} ev + */ + Hammer.gestures.Gesture = { + name: 'gesture', + index: 1337, + handler: function releaseGesture(ev, inst) { + inst.trigger(this.name, ev); + } }; - /** - * Set groups - * @param {vis.DataSet} groups + * @module gestures + */ + /** + * Touch stays at the same place for x time + * + * @class Hold + * @static + */ + /** + * @event hold + * @param {Object} ev */ - LineGraph.prototype.setGroups = function(groups) { - var me = this; - var ids; - // unsubscribe from current dataset - if (this.groupsData) { - util.forEach(this.groupListeners, function (callback, event) { - me.groupsData.unsubscribe(event, callback); - }); + /** + * @param {String} name + */ + (function(name) { + var timer; - // remove all drawn groups - ids = this.groupsData.getIds(); - this.groupsData = null; - this._onRemoveGroups(ids); // note: this will cause a redraw - } + function holdGesture(ev, inst) { + var options = inst.options, + current = Detection.current; - // replace the dataset - if (!groups) { - this.groupsData = null; - } - else if (groups instanceof DataSet || groups instanceof DataView) { - this.groupsData = groups; - } - else { - throw new TypeError('Data must be an instance of DataSet or DataView'); - } + switch(ev.eventType) { + case EVENT_START: + clearTimeout(timer); - if (this.groupsData) { - // subscribe to new dataset - var id = this.id; - util.forEach(this.groupListeners, function (callback, event) { - me.groupsData.on(event, callback, id); - }); + // set the gesture so we can check in the timeout if it still is + current.name = name; - // draw all ms - ids = this.groupsData.getIds(); - this._onAddGroups(ids); - } - this._onUpdate(); - }; + // set timer and if after the timeout it still is hold, + // we trigger the hold event + timer = setTimeout(function() { + if(current && current.name == name) { + inst.trigger(name, ev); + } + }, options.holdTimeout); + break; + case EVENT_MOVE: + if(ev.distance > options.holdThreshold) { + clearTimeout(timer); + } + break; - /** - * Update the data - * @param [ids] - * @private - */ - LineGraph.prototype._onUpdate = function(ids) { - this._updateUngrouped(); - this._updateAllGroupData(); - //this._updateGraph(); - this.redraw(true); - }; - LineGraph.prototype._onAdd = function (ids) {this._onUpdate(ids);}; - LineGraph.prototype._onRemove = function (ids) {this._onUpdate(ids);}; - LineGraph.prototype._onUpdateGroups = function (groupIds) { - for (var i = 0; i < groupIds.length; i++) { - var group = this.groupsData.get(groupIds[i]); - this._updateGroup(group, groupIds[i]); - } + case EVENT_RELEASE: + clearTimeout(timer); + break; + } + } - //this._updateGraph(); - this.redraw(true); - }; - LineGraph.prototype._onAddGroups = function (groupIds) {this._onUpdateGroups(groupIds);}; + Hammer.gestures.Hold = { + name: name, + index: 10, + defaults: { + /** + * @property holdTimeout + * @type {Number} + * @default 500 + */ + holdTimeout: 500, + /** + * movement allowed while holding + * @property holdThreshold + * @type {Number} + * @default 2 + */ + holdThreshold: 2 + }, + handler: holdGesture + }; + })('hold'); /** - * this cleans the group out off the legends and the dataaxis, updates the ungrouped and updates the graph - * @param {Array} groupIds - * @private + * @module gestures */ - LineGraph.prototype._onRemoveGroups = function (groupIds) { - for (var i = 0; i < groupIds.length; i++) { - if (this.groups.hasOwnProperty(groupIds[i])) { - if (this.groups[groupIds[i]].options.yAxisOrientation == 'right') { - this.yAxisRight.removeGroup(groupIds[i]); - this.legendRight.removeGroup(groupIds[i]); - this.legendRight.redraw(); - } - else { - this.yAxisLeft.removeGroup(groupIds[i]); - this.legendLeft.removeGroup(groupIds[i]); - this.legendLeft.redraw(); - } - delete this.groups[groupIds[i]]; + /** + * when a touch is being released from the page + * + * @class Release + * @static + */ + /** + * @event release + * @param {Object} ev + */ + Hammer.gestures.Release = { + name: 'release', + index: Infinity, + handler: function releaseGesture(ev, inst) { + if(ev.eventType == EVENT_RELEASE) { + inst.trigger(this.name, ev); + } } - } - this._updateUngrouped(); - //this._updateGraph(); - this.redraw(true); }; - /** - * update a group object with the group dataset entree + * @module gestures + */ + /** + * triggers swipe events when the end velocity is above the threshold + * for best usage, set `preventDefault` (on the drag gesture) to `true` + * ```` + * hammertime.on("dragleft swipeleft", function(ev) { + * console.log(ev); + * ev.gesture.preventDefault(); + * }); + * ```` * - * @param group - * @param groupId - * @private + * @class Swipe + * @static */ - LineGraph.prototype._updateGroup = function (group, groupId) { - if (!this.groups.hasOwnProperty(groupId)) { - this.groups[groupId] = new GraphGroup(group, groupId, this.options, this.groupsUsingDefaultStyles); - if (this.groups[groupId].options.yAxisOrientation == 'right') { - this.yAxisRight.addGroup(groupId, this.groups[groupId]); - this.legendRight.addGroup(groupId, this.groups[groupId]); - } - else { - this.yAxisLeft.addGroup(groupId, this.groups[groupId]); - this.legendLeft.addGroup(groupId, this.groups[groupId]); - } - } - else { - this.groups[groupId].update(group); - if (this.groups[groupId].options.yAxisOrientation == 'right') { - this.yAxisRight.updateGroup(groupId, this.groups[groupId]); - this.legendRight.updateGroup(groupId, this.groups[groupId]); - } - else { - this.yAxisLeft.updateGroup(groupId, this.groups[groupId]); - this.legendLeft.updateGroup(groupId, this.groups[groupId]); + /** + * @event swipe + * @param {Object} ev + */ + /** + * @event swipeleft + * @param {Object} ev + */ + /** + * @event swiperight + * @param {Object} ev + */ + /** + * @event swipeup + * @param {Object} ev + */ + /** + * @event swipedown + * @param {Object} ev + */ + Hammer.gestures.Swipe = { + name: 'swipe', + index: 40, + defaults: { + /** + * @property swipeMinTouches + * @type {Number} + * @default 1 + */ + swipeMinTouches: 1, + + /** + * @property swipeMaxTouches + * @type {Number} + * @default 1 + */ + swipeMaxTouches: 1, + + /** + * horizontal swipe velocity + * @property swipeVelocityX + * @type {Number} + * @default 0.6 + */ + swipeVelocityX: 0.6, + + /** + * vertical swipe velocity + * @property swipeVelocityY + * @type {Number} + * @default 0.6 + */ + swipeVelocityY: 0.6 + }, + + handler: function swipeGesture(ev, inst) { + if(ev.eventType == EVENT_RELEASE) { + var touches = ev.touches.length, + options = inst.options; + + // max touches + if(touches < options.swipeMinTouches || + touches > options.swipeMaxTouches) { + return; + } + + // when the distance we moved is too small we skip this gesture + // or we can be already in dragging + if(ev.velocityX > options.swipeVelocityX || + ev.velocityY > options.swipeVelocityY) { + // trigger swipe events + inst.trigger(this.name, ev); + inst.trigger(this.name + ev.direction, ev); + } + } } - } - this.legendLeft.redraw(); - this.legendRight.redraw(); }; - /** - * this updates all groups, it is used when there is an update the the itemset. + * @module gestures + */ + /** + * Single tap and a double tap on a place * - * @private + * @class Tap + * @static */ - LineGraph.prototype._updateAllGroupData = function () { - if (this.itemsData != null) { - var groupsContent = {}; - var groupId; - for (groupId in this.groups) { - if (this.groups.hasOwnProperty(groupId)) { - groupsContent[groupId] = []; - } - } - for (var itemId in this.itemsData._data) { - if (this.itemsData._data.hasOwnProperty(itemId)) { - var item = this.itemsData._data[itemId]; - if (groupsContent[item.group] === undefined) { - throw new Error('Cannot find referenced group. Possible reason: items added before groups? Groups need to be added before items, as items refer to groups.') - } - item.x = util.convert(item.x,'Date'); - groupsContent[item.group].push(item); - } - } - for (groupId in this.groups) { - if (this.groups.hasOwnProperty(groupId)) { - this.groups[groupId].setItems(groupsContent[groupId]); - } - } - } - }; - - /** - * Create or delete the group holding all ungrouped items. This group is used when - * there are no groups specified. This anonymous group is called 'graph'. - * @protected + * @event tap + * @param {Object} ev + */ + /** + * @event doubletap + * @param {Object} ev */ - LineGraph.prototype._updateUngrouped = function() { - if (this.itemsData && this.itemsData != null) { - var ungroupedCounter = 0; - for (var itemId in this.itemsData._data) { - if (this.itemsData._data.hasOwnProperty(itemId)) { - var item = this.itemsData._data[itemId]; - if (item != undefined) { - if (item.hasOwnProperty('group')) { - if (item.group === undefined) { - item.group = UNGROUPED; - } - } - else { - item.group = UNGROUPED; - } - ungroupedCounter = item.group == UNGROUPED ? ungroupedCounter + 1 : ungroupedCounter; - } - } - } - - if (ungroupedCounter == 0) { - delete this.groups[UNGROUPED]; - this.legendLeft.removeGroup(UNGROUPED); - this.legendRight.removeGroup(UNGROUPED); - this.yAxisLeft.removeGroup(UNGROUPED); - this.yAxisRight.removeGroup(UNGROUPED); - } - else { - var group = {id: UNGROUPED, content: this.options.defaultGroup}; - this._updateGroup(group, UNGROUPED); - } - } - else { - delete this.groups[UNGROUPED]; - this.legendLeft.removeGroup(UNGROUPED); - this.legendRight.removeGroup(UNGROUPED); - this.yAxisLeft.removeGroup(UNGROUPED); - this.yAxisRight.removeGroup(UNGROUPED); - } - - this.legendLeft.redraw(); - this.legendRight.redraw(); - }; - /** - * Redraw the component, mandatory function - * @return {boolean} Returns true if the component is resized + * @param {String} name */ - LineGraph.prototype.redraw = function(forceGraphUpdate) { - var resized = false; + (function(name) { + var hasMoved = false; - this.svg.style.height = ('' + this.options.graphHeight).replace('px','') + 'px'; - if (this.lastWidth === undefined && this.width || this.lastWidth != this.width) { - resized = true; - } - // check if this component is resized - resized = this._isResized() || resized; - // check whether zoomed (in that case we need to re-stack everything) - var visibleInterval = this.body.range.end - this.body.range.start; - //var zoomed = (visibleInterval != this.lastVisibleInterval) || (this.width != this.lastWidth); // we get this from the range changed event - this.lastVisibleInterval = visibleInterval; - this.lastWidth = this.width; + function tapGesture(ev, inst) { + var options = inst.options, + current = Detection.current, + prev = Detection.previous, + sincePrev, + didDoubleTap; - // calculate actual size and position - this.width = this.dom.frame.offsetWidth; + switch(ev.eventType) { + case EVENT_START: + hasMoved = false; + break; - // the svg element is three times as big as the width, this allows for fully dragging left and right - // without reloading the graph. the controls for this are bound to events in the constructor - if (resized == true) { - this.svg.style.width = util.option.asSize(3*this.width); - this.svg.style.left = util.option.asSize(-this.width); - } + case EVENT_MOVE: + hasMoved = hasMoved || (ev.distance > options.tapMaxDistance); + break; - if (this.abortedGraphUpdate == true || forceGraphUpdate == true) { - resized = resized || this._updateGraph(); - } - else { - // move the whole svg while dragging - if (this.lastStart != 0) { - var offset = this.body.range.start - this.lastStart; - var range = this.body.range.end - this.body.range.start; - if (this.width != 0) { - var rangePerPixelInv = this.width/range; - var xOffset = offset * rangePerPixelInv; - this.svg.style.left = (-this.width - xOffset) + 'px'; - } - } + case EVENT_END: + if(!Utils.inStr(ev.srcEvent.type, 'cancel') && ev.deltaTime < options.tapMaxTime && !hasMoved) { + // previous gesture, for the double tap since these are two different gesture detections + sincePrev = prev && prev.lastEvent && ev.timeStamp - prev.lastEvent.timeStamp; + didDoubleTap = false; - } + // check if double tap + if(prev && prev.name == name && + (sincePrev && sincePrev < options.doubleTapInterval) && + ev.distance < options.doubleTapDistance) { + inst.trigger('doubletap', ev); + didDoubleTap = true; + } - this.legendLeft.redraw(); - this.legendRight.redraw(); + // do a single tap + if(!didDoubleTap || options.tapAlways) { + current.name = name; + inst.trigger(current.name, ev); + } + } + break; + } + } - return resized; - }; + Hammer.gestures.Tap = { + name: name, + index: 100, + handler: tapGesture, + defaults: { + /** + * max time of a tap, this is for the slow tappers + * @property tapMaxTime + * @type {Number} + * @default 250 + */ + tapMaxTime: 250, + /** + * max distance of movement of a tap, this is for the slow tappers + * @property tapMaxDistance + * @type {Number} + * @default 10 + */ + tapMaxDistance: 10, - /** - * Update and redraw the graph. - * - */ - LineGraph.prototype._updateGraph = function () { - // reset the svg elements - DOMutil.prepareElements(this.svgElements); - if (this.width != 0 && this.itemsData != null) { - var group, i; - var preprocessedGroupData = {}; - var processedGroupData = {}; - var groupRanges = {}; - var changeCalled = false; + /** + * always trigger the `tap` event, even while double-tapping + * @property tapAlways + * @type {Boolean} + * @default true + */ + tapAlways: true, - // update the height of the graph on each redraw of the graph. - if (this.autoSizeSVG == true) { - if (this.options.graphHeight != this.body.domProps.centerContainer.height + 'px') { - this.options.graphHeight = this.body.domProps.centerContainer.height + 'px'; - this.svg.style.height = this.body.domProps.centerContainer.height + 'px'; - } - this.autoSizeSVG = false; - } + /** + * max distance between two taps + * @property doubleTapDistance + * @type {Number} + * @default 20 + */ + doubleTapDistance: 20, - // getting group Ids - var groupIds = []; - for (var groupId in this.groups) { - if (this.groups.hasOwnProperty(groupId)) { - group = this.groups[groupId]; - if (group.visible == true && (this.options.groups.visibility[groupId] === undefined || this.options.groups.visibility[groupId] == true)) { - groupIds.push(groupId); + /** + * max time between two taps + * @property doubleTapInterval + * @type {Number} + * @default 300 + */ + doubleTapInterval: 300 } - } - } - if (groupIds.length > 0) { - // this is the range of the SVG canvas - var minDate = this.body.util.toGlobalTime(-this.body.domProps.root.width); - var maxDate = this.body.util.toGlobalTime(2 * this.body.domProps.root.width); - var groupsData = {}; - // fill groups data, this only loads the data we require based on the timewindow - this._getRelevantData(groupIds, groupsData, minDate, maxDate); - - // apply sampling, if disabled, it will pass through this function. - this._applySampling(groupIds, groupsData); - - // we transform the X coordinates to detect collisions - for (i = 0; i < groupIds.length; i++) { - preprocessedGroupData[groupIds[i]] = this._convertXcoordinates(groupsData[groupIds[i]]); - } + }; + })('tap'); - // now all needed data has been collected we start the processing. - this._getYRanges(groupIds, preprocessedGroupData, groupRanges); + /** + * @module gestures + */ + /** + * when a touch is being touched at the page + * + * @class Touch + * @static + */ + /** + * @event touch + * @param {Object} ev + */ + Hammer.gestures.Touch = { + name: 'touch', + index: -Infinity, + defaults: { + /** + * call preventDefault at touchstart, and makes the element blocking by disabling the scrolling of the page, + * but it improves gestures like transforming and dragging. + * be careful with using this, it can be very annoying for users to be stuck on the page + * @property preventDefault + * @type {Boolean} + * @default false + */ + preventDefault: false, - // update the Y axis first, we use this data to draw at the correct Y points - // changeCalled is required to clean the SVG on a change emit. - changeCalled = this._updateYAxis(groupIds, groupRanges); - var MAX_CYCLES = 5; - if (changeCalled == true && this.COUNTER < MAX_CYCLES) { - DOMutil.cleanupElements(this.svgElements); - this.abortedGraphUpdate = true; - this.COUNTER++; - this.body.emitter.emit('change'); - return true; - } - else { - if (this.COUNTER > MAX_CYCLES) { - console.log("WARNING: there may be an infinite loop in the _updateGraph emitter cycle.") + /** + * disable mouse events, so only touch (or pen!) input triggers events + * @property preventMouse + * @type {Boolean} + * @default false + */ + preventMouse: false + }, + handler: function touchGesture(ev, inst) { + if(inst.options.preventMouse && ev.pointerType == POINTER_MOUSE) { + ev.stopDetect(); + return; } - this.COUNTER = 0; - this.abortedGraphUpdate = false; - // With the yAxis scaled correctly, use this to get the Y values of the points. - for (i = 0; i < groupIds.length; i++) { - group = this.groups[groupIds[i]]; - processedGroupData[groupIds[i]] = this._convertYcoordinates(groupsData[groupIds[i]], group); + if(inst.options.preventDefault) { + ev.preventDefault(); } - // draw the groups - for (i = 0; i < groupIds.length; i++) { - group = this.groups[groupIds[i]]; - if (group.options.style != 'bar') { // bar needs to be drawn enmasse - group.draw(processedGroupData[groupIds[i]], group, this.framework); - } + if(ev.eventType == EVENT_TOUCH) { + inst.trigger('touch', ev); } - BarGraphFunctions.draw(groupIds, processedGroupData, this.framework); - } } - } - - // cleanup unused svg elements - DOMutil.cleanupElements(this.svgElements); - return false; }; - /** - * first select and preprocess the data from the datasets. - * the groups have their preselection of data, we now loop over this data to see - * what data we need to draw. Sorted data is much faster. - * more optimization is possible by doing the sampling before and using the binary search - * to find the end date to determine the increment. + * @module gestures + */ + /** + * User want to scale or rotate with 2 fingers + * Preventing the default browser behavior is a good way to improve feel and working. This can be done with the + * `preventDefault` option. * - * @param {array} groupIds - * @param {object} groupsData - * @param {date} minDate - * @param {date} maxDate - * @private + * @class Transform + * @static + */ + /** + * @event transform + * @param {Object} ev + */ + /** + * @event transformstart + * @param {Object} ev + */ + /** + * @event transformend + * @param {Object} ev + */ + /** + * @event pinchin + * @param {Object} ev + */ + /** + * @event pinchout + * @param {Object} ev + */ + /** + * @event rotate + * @param {Object} ev */ - LineGraph.prototype._getRelevantData = function (groupIds, groupsData, minDate, maxDate) { - var group, i, j, item; - if (groupIds.length > 0) { - for (i = 0; i < groupIds.length; i++) { - group = this.groups[groupIds[i]]; - groupsData[groupIds[i]] = []; - var dataContainer = groupsData[groupIds[i]]; - // optimization for sorted data - if (group.options.sort == true) { - var guess = Math.max(0, util.binarySearchValue(group.itemsData, minDate, 'x', 'before')); - for (j = guess; j < group.itemsData.length; j++) { - item = group.itemsData[j]; - if (item !== undefined) { - if (item.x > maxDate) { - dataContainer.push(item); - break; - } - else { - dataContainer.push(item); - } - } - } - } - else { - for (j = 0; j < group.itemsData.length; j++) { - item = group.itemsData[j]; - if (item !== undefined) { - if (item.x > minDate && item.x < maxDate) { - dataContainer.push(item); - } - } - } - } - } - } - }; - /** - * - * @param groupIds - * @param groupsData - * @private + * @param {String} name */ - LineGraph.prototype._applySampling = function (groupIds, groupsData) { - var group; - if (groupIds.length > 0) { - for (var i = 0; i < groupIds.length; i++) { - group = this.groups[groupIds[i]]; - if (group.options.sampling == true) { - var dataContainer = groupsData[groupIds[i]]; - if (dataContainer.length > 0) { - var increment = 1; - var amountOfPoints = dataContainer.length; + (function(name) { + var triggered = false; - // the global screen is used because changing the width of the yAxis may affect the increment, resulting in an endless loop - // of width changing of the yAxis. - var xDistance = this.body.util.toGlobalScreen(dataContainer[dataContainer.length - 1].x) - this.body.util.toGlobalScreen(dataContainer[0].x); - var pointsPerPixel = amountOfPoints / xDistance; - increment = Math.min(Math.ceil(0.2 * amountOfPoints), Math.max(1, Math.round(pointsPerPixel))); + function transformGesture(ev, inst) { + switch(ev.eventType) { + case EVENT_START: + triggered = false; + break; - var sampledData = []; - for (var j = 0; j < amountOfPoints; j += increment) { - sampledData.push(dataContainer[j]); + case EVENT_MOVE: + // at least multitouch + if(ev.touches.length < 2) { + return; + } - } - groupsData[groupIds[i]] = sampledData; + var scaleThreshold = Math.abs(1 - ev.scale); + var rotationThreshold = Math.abs(ev.rotation); + + // when the distance we moved is too small we skip this gesture + // or we can be already in dragging + if(scaleThreshold < inst.options.transformMinScale && + rotationThreshold < inst.options.transformMinRotation) { + return; + } + + // we are transforming! + Detection.current.name = name; + + // first time, trigger dragstart event + if(!triggered) { + inst.trigger(name + 'start', ev); + triggered = true; + } + + inst.trigger(name, ev); // basic transform event + + // trigger rotate event + if(rotationThreshold > inst.options.transformMinRotation) { + inst.trigger('rotate', ev); + } + + // trigger pinch event + if(scaleThreshold > inst.options.transformMinScale) { + inst.trigger('pinch', ev); + inst.trigger('pinch' + (ev.scale < 1 ? 'in' : 'out'), ev); + } + break; + + case EVENT_RELEASE: + if(triggered && ev.changedLength < 2) { + inst.trigger(name + 'end', ev); + triggered = false; + } + break; } - } } - } - }; + Hammer.gestures.Transform = { + name: name, + index: 45, + defaults: { + /** + * minimal scale factor, no scale is 1, zoomin is to 0 and zoomout until higher then 1 + * @property transformMinScale + * @type {Number} + * @default 0.01 + */ + transformMinScale: 0.01, + + /** + * rotation in degrees + * @property transformMinRotation + * @type {Number} + * @default 1 + */ + transformMinRotation: 1 + }, + + handler: transformGesture + }; + })('transform'); /** - * - * - * @param {array} groupIds - * @param {object} groupsData - * @param {object} groupRanges | this is being filled here - * @private + * @module hammer */ - LineGraph.prototype._getYRanges = function (groupIds, groupsData, groupRanges) { - var groupData, group, i; - var barCombinedDataLeft = []; - var barCombinedDataRight = []; - var options; - if (groupIds.length > 0) { - for (i = 0; i < groupIds.length; i++) { - groupData = groupsData[groupIds[i]]; - options = this.groups[groupIds[i]].options; - if (groupData.length > 0) { - group = this.groups[groupIds[i]]; - // if bar graphs are stacked, their range need to be handled differently and accumulated over all groups. - if (options.barChart.handleOverlap == 'stack' && options.style == 'bar') { - if (options.yAxisOrientation == 'left') {barCombinedDataLeft = barCombinedDataLeft.concat(group.getYRange(groupData)) ;} - else {barCombinedDataRight = barCombinedDataRight.concat(group.getYRange(groupData));} - } - else { - groupRanges[groupIds[i]] = group.getYRange(groupData,groupIds[i]); - } - } - } - // if bar graphs are stacked, their range need to be handled differently and accumulated over all groups. - BarGraphFunctions.getStackedBarYRange(barCombinedDataLeft , groupRanges, groupIds, '__barchartLeft' , 'left' ); - BarGraphFunctions.getStackedBarYRange(barCombinedDataRight, groupRanges, groupIds, '__barchartRight', 'right'); - } - }; + // AMD export + if(true) { + !(__WEBPACK_AMD_DEFINE_RESULT__ = function() { + return Hammer; + }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + // commonjs export + } else if(typeof module !== 'undefined' && module.exports) { + module.exports = Hammer; + // browser export + } else { + window.Hammer = Hammer; + } + + })(window); + +/***/ }, +/* 21 */ +/***/ function(module, exports, __webpack_require__) { + var util = __webpack_require__(1); + var hammerUtil = __webpack_require__(22); + var moment = __webpack_require__(2); + var Component = __webpack_require__(23); + var DateUtil = __webpack_require__(24); /** - * this sets the Y ranges for the Y axis. It also determines which of the axis should be shown or hidden. - * @param {Array} groupIds - * @param {Object} groupRanges - * @private + * @constructor Range + * A Range controls a numeric range with a start and end value. + * The Range adjusts the range based on mouse events or programmatic changes, + * and triggers events when the range is changing or has been changed. + * @param {{dom: Object, domProps: Object, emitter: Emitter}} body + * @param {Object} [options] See description at Range.setOptions */ - LineGraph.prototype._updateYAxis = function (groupIds, groupRanges) { - var changeCalled = false; - var yAxisLeftUsed = false; - var yAxisRightUsed = false; - var minLeft = 1e9, minRight = 1e9, maxLeft = -1e9, maxRight = -1e9, minVal, maxVal; - // if groups are present - if (groupIds.length > 0) { - // this is here to make sure that if there are no items in the axis but there are groups, that there is no infinite draw/redraw loop. - for (var i = 0; i < groupIds.length; i++) { - var group = this.groups[groupIds[i]]; - if (group && group.options.yAxisOrientation == 'left') { - yAxisLeftUsed = true; - minLeft = 0; - maxLeft = 0; - } - else { - yAxisRightUsed = true; - minRight = 0; - maxRight = 0; - } - } + function Range(body, options) { + var now = moment().hours(0).minutes(0).seconds(0).milliseconds(0); + this.start = now.clone().add(-3, 'days').valueOf(); // Number + this.end = now.clone().add(4, 'days').valueOf(); // Number - // if there are items: - for (var i = 0; i < groupIds.length; i++) { - if (groupRanges.hasOwnProperty(groupIds[i])) { - if (groupRanges[groupIds[i]].ignore !== true) { - minVal = groupRanges[groupIds[i]].min; - maxVal = groupRanges[groupIds[i]].max; + this.body = body; + this.deltaDifference = 0; + this.scaleOffset = 0; + this.startToFront = false; + this.endToFront = true; - if (groupRanges[groupIds[i]].yAxisOrientation == 'left') { - yAxisLeftUsed = true; - minLeft = minLeft > minVal ? minVal : minLeft; - maxLeft = maxLeft < maxVal ? maxVal : maxLeft; - } - else { - yAxisRightUsed = true; - minRight = minRight > minVal ? minVal : minRight; - maxRight = maxRight < maxVal ? maxVal : maxRight; - } - } - } - } + // default options + this.defaultOptions = { + start: null, + end: null, + direction: 'horizontal', // 'horizontal' or 'vertical' + moveable: true, + zoomable: true, + min: null, + max: null, + zoomMin: 10, // milliseconds + zoomMax: 1000 * 60 * 60 * 24 * 365 * 10000 // milliseconds + }; + this.options = util.extend({}, this.defaultOptions); - if (yAxisLeftUsed == true) { - this.yAxisLeft.setRange(minLeft, maxLeft); - } - if (yAxisRightUsed == true) { - this.yAxisRight.setRange(minRight, maxRight); - } - } - changeCalled = this._toggleAxisVisiblity(yAxisLeftUsed , this.yAxisLeft) || changeCalled; - changeCalled = this._toggleAxisVisiblity(yAxisRightUsed, this.yAxisRight) || changeCalled; + this.props = { + touch: {} + }; + this.animateTimer = null; - if (yAxisRightUsed == true && yAxisLeftUsed == true) { - this.yAxisLeft.drawIcons = true; - this.yAxisRight.drawIcons = true; - } - else { - this.yAxisLeft.drawIcons = false; - this.yAxisRight.drawIcons = false; - } + // drag listeners for dragging + this.body.emitter.on('dragstart', this._onDragStart.bind(this)); + this.body.emitter.on('drag', this._onDrag.bind(this)); + this.body.emitter.on('dragend', this._onDragEnd.bind(this)); - this.yAxisRight.master = !yAxisLeftUsed; + // ignore dragging when holding + this.body.emitter.on('hold', this._onHold.bind(this)); - if (this.yAxisRight.master == false) { - if (yAxisRightUsed == true) {this.yAxisLeft.lineOffset = this.yAxisRight.width;} - else {this.yAxisLeft.lineOffset = 0;} + // mouse wheel for zooming + this.body.emitter.on('mousewheel', this._onMouseWheel.bind(this)); + this.body.emitter.on('DOMMouseScroll', this._onMouseWheel.bind(this)); // For FF - changeCalled = this.yAxisLeft.redraw() || changeCalled; - this.yAxisRight.stepPixelsForced = this.yAxisLeft.stepPixels; - this.yAxisRight.zeroCrossing = this.yAxisLeft.zeroCrossing; - changeCalled = this.yAxisRight.redraw() || changeCalled; - } - else { - changeCalled = this.yAxisRight.redraw() || changeCalled; - } + // pinch to zoom + this.body.emitter.on('touch', this._onTouch.bind(this)); + this.body.emitter.on('pinch', this._onPinch.bind(this)); - // clean the accumulated lists - if (groupIds.indexOf('__barchartLeft') != -1) { - groupIds.splice(groupIds.indexOf('__barchartLeft'),1); - } - if (groupIds.indexOf('__barchartRight') != -1) { - groupIds.splice(groupIds.indexOf('__barchartRight'),1); - } + this.setOptions(options); + } - return changeCalled; + Range.prototype = new Component(); + + /** + * Set options for the range controller + * @param {Object} options Available options: + * {Number | Date | String} start Start date for the range + * {Number | Date | String} end End date for the range + * {Number} min Minimum value for start + * {Number} max Maximum value for end + * {Number} zoomMin Set a minimum value for + * (end - start). + * {Number} zoomMax Set a maximum value for + * (end - start). + * {Boolean} moveable Enable moving of the range + * by dragging. True by default + * {Boolean} zoomable Enable zooming of the range + * by pinching/scrolling. True by default + */ + Range.prototype.setOptions = function (options) { + if (options) { + // copy the options that we know + var fields = ['direction', 'min', 'max', 'zoomMin', 'zoomMax', 'moveable', 'zoomable', 'activate', 'hiddenDates']; + util.selectiveExtend(fields, this.options, options); + + if ('start' in options || 'end' in options) { + // apply a new range. both start and end are optional + this.setRange(options.start, options.end); + } + } }; + /** + * Test whether direction has a valid value + * @param {String} direction 'horizontal' or 'vertical' + */ + function validateDirection (direction) { + if (direction != 'horizontal' && direction != 'vertical') { + throw new TypeError('Unknown direction "' + direction + '". ' + + 'Choose "horizontal" or "vertical".'); + } + } /** - * This shows or hides the Y axis if needed. If there is a change, the changed event is emitted by the updateYAxis function + * Set a new start and end range + * @param {Date | Number | String} [start] + * @param {Date | Number | String} [end] + * @param {boolean | number} [animate=false] If true, the range is animated + * smoothly to the new window. + * If animate is a number, the + * number is taken as duration + * Default duration is 500 ms. * - * @param {boolean} axisUsed - * @returns {boolean} - * @private - * @param axis */ - LineGraph.prototype._toggleAxisVisiblity = function (axisUsed, axis) { - var changed = false; - if (axisUsed == false) { - if (axis.dom.frame.parentNode && axis.hidden == false) { - axis.hide() - changed = true; + Range.prototype.setRange = function(start, end, animate) { + var _start = start != undefined ? util.convert(start, 'Date').valueOf() : null; + var _end = end != undefined ? util.convert(end, 'Date').valueOf() : null; + this._cancelAnimation(); + + if (animate) { + var me = this; + var initStart = this.start; + var initEnd = this.end; + var duration = typeof animate === 'number' ? animate : 500; + var initTime = new Date().valueOf(); + var anyChanged = false; + + var next = function () { + if (!me.props.touch.dragging) { + var now = new Date().valueOf(); + var time = now - initTime; + var done = time > duration; + var s = (done || _start === null) ? _start : util.easeInOutQuad(time, initStart, _start, duration); + var e = (done || _end === null) ? _end : util.easeInOutQuad(time, initEnd, _end, duration); + + changed = me._applyRange(s, e); + DateUtil.updateHiddenDates(me.body, me.options.hiddenDates); + anyChanged = anyChanged || changed; + if (changed) { + me.body.emitter.emit('rangechange', {start: new Date(me.start), end: new Date(me.end)}); + } + + if (done) { + if (anyChanged) { + me.body.emitter.emit('rangechanged', {start: new Date(me.start), end: new Date(me.end)}); + } + } + else { + // animate with as high as possible frame rate, leave 20 ms in between + // each to prevent the browser from blocking + me.animateTimer = setTimeout(next, 20); + } + } } + + return next(); } else { - if (!axis.dom.frame.parentNode && axis.hidden == true) { - axis.show(); - changed = true; + var changed = this._applyRange(_start, _end); + DateUtil.updateHiddenDates(this.body, this.options.hiddenDates); + if (changed) { + var params = {start: new Date(this.start), end: new Date(this.end)}; + this.body.emitter.emit('rangechange', params); + this.body.emitter.emit('rangechanged', params); } } - return changed; }; - /** - * This uses the DataAxis object to generate the correct X coordinate on the SVG window. It uses the - * util function toScreen to get the x coordinate from the timestamp. It also pre-filters the data and get the minMax ranges for - * the yAxis. - * - * @param datapoints - * @returns {Array} + * Stop an animation * @private */ - LineGraph.prototype._convertXcoordinates = function (datapoints) { - var extractedData = []; - var xValue, yValue; - var toScreen = this.body.util.toScreen; - - for (var i = 0; i < datapoints.length; i++) { - xValue = toScreen(datapoints[i].x) + this.width; - yValue = datapoints[i].y; - extractedData.push({x: xValue, y: yValue}); + Range.prototype._cancelAnimation = function () { + if (this.animateTimer) { + clearTimeout(this.animateTimer); + this.animateTimer = null; } - - return extractedData; }; - /** - * This uses the DataAxis object to generate the correct X coordinate on the SVG window. It uses the - * util function toScreen to get the x coordinate from the timestamp. It also pre-filters the data and get the minMax ranges for - * the yAxis. - * - * @param datapoints - * @param group - * @returns {Array} + * Set a new start and end range. This method is the same as setRange, but + * does not trigger a range change and range changed event, and it returns + * true when the range is changed + * @param {Number} [start] + * @param {Number} [end] + * @return {Boolean} changed * @private */ - LineGraph.prototype._convertYcoordinates = function (datapoints, group) { - var extractedData = []; - var xValue, yValue; - var toScreen = this.body.util.toScreen; - var axis = this.yAxisLeft; - var svgHeight = Number(this.svg.style.height.replace('px','')); - if (group.options.yAxisOrientation == 'right') { - axis = this.yAxisRight; - } + Range.prototype._applyRange = function(start, end) { + var newStart = (start != null) ? util.convert(start, 'Date').valueOf() : this.start, + newEnd = (end != null) ? util.convert(end, 'Date').valueOf() : this.end, + max = (this.options.max != null) ? util.convert(this.options.max, 'Date').valueOf() : null, + min = (this.options.min != null) ? util.convert(this.options.min, 'Date').valueOf() : null, + diff; - for (var i = 0; i < datapoints.length; i++) { - xValue = toScreen(datapoints[i].x) + this.width; - yValue = Math.round(axis.convertValue(datapoints[i].y)); - extractedData.push({x: xValue, y: yValue}); + // check for valid number + if (isNaN(newStart) || newStart === null) { + throw new Error('Invalid start "' + start + '"'); + } + if (isNaN(newEnd) || newEnd === null) { + throw new Error('Invalid end "' + end + '"'); } - group.setZeroPosition(Math.min(svgHeight, axis.convertValue(0))); - - return extractedData; - }; - - - module.exports = LineGraph; - - -/***/ }, -/* 30 */ -/***/ function(module, exports, __webpack_require__) { + // prevent start < end + if (newEnd < newStart) { + newEnd = newStart; + } - var util = __webpack_require__(1); - var Component = __webpack_require__(20); - var TimeStep = __webpack_require__(19); - var DateUtil = __webpack_require__(15); - var moment = __webpack_require__(44); + // prevent start < min + if (min !== null) { + if (newStart < min) { + diff = (min - newStart); + newStart += diff; + newEnd += diff; - /** - * A horizontal time axis - * @param {{dom: Object, domProps: Object, emitter: Emitter, range: Range}} body - * @param {Object} [options] See TimeAxis.setOptions for the available - * options. - * @constructor TimeAxis - * @extends Component - */ - function TimeAxis (body, options) { - this.dom = { - foreground: null, - majorLines: [], - majorTexts: [], - minorLines: [], - minorTexts: [], - redundant: { - majorLines: [], - majorTexts: [], - minorLines: [], - minorTexts: [] + // prevent end > max + if (max != null) { + if (newEnd > max) { + newEnd = max; + } + } } - }; - this.props = { - range: { - start: 0, - end: 0, - minimumStep: 0 - }, - lineTop: 0 - }; - - this.defaultOptions = { - orientation: 'bottom', // supported: 'top', 'bottom' - // TODO: implement timeaxis orientations 'left' and 'right' - showMinorLabels: true, - showMajorLabels: true, - format: null - }; - this.options = util.extend({}, this.defaultOptions); - - this.body = body; - - // create the HTML DOM - this._create(); + } - this.setOptions(options); - } + // prevent end > max + if (max !== null) { + if (newEnd > max) { + diff = (newEnd - max); + newStart -= diff; + newEnd -= diff; - TimeAxis.prototype = new Component(); + // prevent start < min + if (min != null) { + if (newStart < min) { + newStart = min; + } + } + } + } - /** - * Set options for the TimeAxis. - * Parameters will be merged in current options. - * @param {Object} options Available options: - * {string} [orientation] - * {boolean} [showMinorLabels] - * {boolean} [showMajorLabels] - */ - TimeAxis.prototype.setOptions = function(options) { - if (options) { - // copy all options that we know - util.selectiveExtend(['orientation', 'showMinorLabels', 'showMajorLabels','hiddenDates', 'format'], this.options, options); + // prevent (end-start) < zoomMin + if (this.options.zoomMin !== null) { + var zoomMin = parseFloat(this.options.zoomMin); + if (zoomMin < 0) { + zoomMin = 0; + } + if ((newEnd - newStart) < zoomMin) { + if ((this.end - this.start) === zoomMin) { + // ignore this action, we are already zoomed to the minimum + newStart = this.start; + newEnd = this.end; + } + else { + // zoom to the minimum + diff = (zoomMin - (newEnd - newStart)); + newStart -= diff / 2; + newEnd += diff / 2; + } + } + } - // apply locale to moment.js - // TODO: not so nice, this is applied globally to moment.js - if ('locale' in options) { - if (typeof moment.locale === 'function') { - // moment.js 2.8.1+ - moment.locale(options.locale); + // prevent (end-start) > zoomMax + if (this.options.zoomMax !== null) { + var zoomMax = parseFloat(this.options.zoomMax); + if (zoomMax < 0) { + zoomMax = 0; + } + if ((newEnd - newStart) > zoomMax) { + if ((this.end - this.start) === zoomMax) { + // ignore this action, we are already zoomed to the maximum + newStart = this.start; + newEnd = this.end; } else { - moment.lang(options.locale); + // zoom to the maximum + diff = ((newEnd - newStart) - zoomMax); + newStart += diff / 2; + newEnd -= diff / 2; } } } + + var changed = (this.start != newStart || this.end != newEnd); + + // if the new range does NOT overlap with the old range, emit checkRangedItems to avoid not showing ranged items (ranged meaning has end time, not neccesarily of type Range) + if (!((newStart >= this.start && newStart <= this.end) || (newEnd >= this.start && newEnd <= this.end)) && + !((this.start >= newStart && this.start <= newEnd) || (this.end >= newStart && this.end <= newEnd) )) { + this.body.emitter.emit('checkRangedItems'); + } + + this.start = newStart; + this.end = newEnd; + return changed; }; /** - * Create the HTML DOM for the TimeAxis + * Retrieve the current range. + * @return {Object} An object with start and end properties */ - TimeAxis.prototype._create = function() { - this.dom.foreground = document.createElement('div'); - this.dom.background = document.createElement('div'); + Range.prototype.getRange = function() { + return { + start: this.start, + end: this.end + }; + }; - this.dom.foreground.className = 'timeaxis foreground'; - this.dom.background.className = 'timeaxis background'; + /** + * Calculate the conversion offset and scale for current range, based on + * the provided width + * @param {Number} width + * @returns {{offset: number, scale: number}} conversion + */ + Range.prototype.conversion = function (width, totalHidden) { + return Range.conversion(this.start, this.end, width, totalHidden); }; /** - * Destroy the TimeAxis + * Static method to calculate the conversion offset and scale for a range, + * based on the provided start, end, and width + * @param {Number} start + * @param {Number} end + * @param {Number} width + * @returns {{offset: number, scale: number}} conversion */ - TimeAxis.prototype.destroy = function() { - // remove from DOM - if (this.dom.foreground.parentNode) { - this.dom.foreground.parentNode.removeChild(this.dom.foreground); + Range.conversion = function (start, end, width, totalHidden) { + if (totalHidden === undefined) { + totalHidden = 0; } - if (this.dom.background.parentNode) { - this.dom.background.parentNode.removeChild(this.dom.background); + if (width != 0 && (end - start != 0)) { + return { + offset: start, + scale: width / (end - start - totalHidden) + } + } + else { + return { + offset: 0, + scale: 1 + }; } - - this.body = null; }; /** - * Repaint the component - * @return {boolean} Returns true if the component is resized + * Start dragging horizontally or vertically + * @param {Event} event + * @private */ - TimeAxis.prototype.redraw = function () { - var options = this.options; - var props = this.props; - var foreground = this.dom.foreground; - var background = this.dom.background; + Range.prototype._onDragStart = function(event) { + this.deltaDifference = 0; + this.previousDelta = 0; + // only allow dragging when configured as movable + if (!this.options.moveable) return; - // determine the correct parent DOM element (depending on option orientation) - var parent = (options.orientation == 'top') ? this.body.dom.top : this.body.dom.bottom; - var parentChanged = (foreground.parentNode !== parent); + // refuse to drag when we where pinching to prevent the timeline make a jump + // when releasing the fingers in opposite order from the touch screen + if (!this.props.touch.allowDragging) return; - // calculate character width and height - this._calculateCharSize(); + this.props.touch.start = this.start; + this.props.touch.end = this.end; + this.props.touch.dragging = true; - // TODO: recalculate sizes only needed when parent is resized or options is changed - var orientation = this.options.orientation, - showMinorLabels = this.options.showMinorLabels, - showMajorLabels = this.options.showMajorLabels; + if (this.body.dom.root) { + this.body.dom.root.style.cursor = 'move'; + } + }; - // determine the width and height of the elemens for the axis - props.minorLabelHeight = showMinorLabels ? props.minorCharHeight : 0; - props.majorLabelHeight = showMajorLabels ? props.majorCharHeight : 0; - props.height = props.minorLabelHeight + props.majorLabelHeight; - props.width = foreground.offsetWidth; + /** + * Perform dragging operation + * @param {Event} event + * @private + */ + Range.prototype._onDrag = function (event) { + // only allow dragging when configured as movable + if (!this.options.moveable) return; + // refuse to drag when we where pinching to prevent the timeline make a jump + // when releasing the fingers in opposite order from the touch screen + if (!this.props.touch.allowDragging) return; - props.minorLineHeight = this.body.domProps.root.height - props.majorLabelHeight - - (options.orientation == 'top' ? this.body.domProps.bottom.height : this.body.domProps.top.height); - props.minorLineWidth = 1; // TODO: really calculate width - props.majorLineHeight = props.minorLineHeight + props.majorLabelHeight; - props.majorLineWidth = 1; // TODO: really calculate width + var direction = this.options.direction; + validateDirection(direction); - // take foreground and background offline while updating (is almost twice as fast) - var foregroundNextSibling = foreground.nextSibling; - var backgroundNextSibling = background.nextSibling; - foreground.parentNode && foreground.parentNode.removeChild(foreground); - background.parentNode && background.parentNode.removeChild(background); + var delta = (direction == 'horizontal') ? event.gesture.deltaX : event.gesture.deltaY; + delta -= this.deltaDifference; + var interval = (this.props.touch.end - this.props.touch.start); - foreground.style.height = this.props.height + 'px'; + // normalize dragging speed if cutout is in between. + var duration = DateUtil.getHiddenDurationBetween(this.body.hiddenDates, this.start, this.end); + interval -= duration; - this._repaintLabels(); + var width = (direction == 'horizontal') ? this.body.domProps.center.width : this.body.domProps.center.height; + var diffRange = -delta / width * interval; + var newStart = this.props.touch.start + diffRange; + var newEnd = this.props.touch.end + diffRange; - // put DOM online again (at the same place) - if (foregroundNextSibling) { - parent.insertBefore(foreground, foregroundNextSibling); - } - else { - parent.appendChild(foreground) - } - if (backgroundNextSibling) { - this.body.dom.backgroundVertical.insertBefore(background, backgroundNextSibling); - } - else { - this.body.dom.backgroundVertical.appendChild(background) + + // snapping times away from hidden zones + var safeStart = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newStart, this.previousDelta-delta, true); + var safeEnd = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newEnd, this.previousDelta-delta, true); + if (safeStart != newStart || safeEnd != newEnd) { + this.deltaDifference += delta; + this.props.touch.start = safeStart; + this.props.touch.end = safeEnd; + this._onDrag(event); + return; } - return this._isResized() || parentChanged; + this.previousDelta = delta; + this._applyRange(newStart, newEnd); + + // fire a rangechange event + this.body.emitter.emit('rangechange', { + start: new Date(this.start), + end: new Date(this.end) + }); }; /** - * Repaint major and minor text labels and vertical grid lines + * Stop dragging operation + * @param {event} event * @private */ - TimeAxis.prototype._repaintLabels = function () { - var orientation = this.options.orientation; + Range.prototype._onDragEnd = function (event) { + // only allow dragging when configured as movable + if (!this.options.moveable) return; - // calculate range and step (step such that we have space for 7 characters per label) - var start = util.convert(this.body.range.start, 'Number'); - var end = util.convert(this.body.range.end, 'Number'); - var timeLabelsize = this.body.util.toTime((this.props.minorCharWidth || 10) * 7).valueOf(); - var minimumStep = timeLabelsize - DateUtil.getHiddenDurationBefore(this.body.hiddenDates, this.body.range, timeLabelsize); - minimumStep -= this.body.util.toTime(0).valueOf(); + // refuse to drag when we where pinching to prevent the timeline make a jump + // when releasing the fingers in opposite order from the touch screen + if (!this.props.touch.allowDragging) return; - var step = new TimeStep(new Date(start), new Date(end), minimumStep, this.body.hiddenDates); - if (this.options.format) { - step.setFormat(this.options.format); + this.props.touch.dragging = false; + if (this.body.dom.root) { + this.body.dom.root.style.cursor = 'auto'; } - this.step = step; - - // Move all DOM elements to a "redundant" list, where they - // can be picked for re-use, and clear the lists with lines and texts. - // At the end of the function _repaintLabels, left over elements will be cleaned up - var dom = this.dom; - dom.redundant.majorLines = dom.majorLines; - dom.redundant.majorTexts = dom.majorTexts; - dom.redundant.minorLines = dom.minorLines; - dom.redundant.minorTexts = dom.minorTexts; - dom.majorLines = []; - dom.majorTexts = []; - dom.minorLines = []; - dom.minorTexts = []; - step.first(); - var xFirstMajorLabel = undefined; - var max = 0; - while (step.hasNext() && max < 1000) { - max++; - var cur = step.getCurrent(); - var x = this.body.util.toScreen(cur); - var isMajor = step.isMajor(); + // fire a rangechanged event + this.body.emitter.emit('rangechanged', { + start: new Date(this.start), + end: new Date(this.end) + }); + }; + /** + * Event handler for mouse wheel event, used to zoom + * Code from http://adomas.org/javascript-mouse-wheel/ + * @param {Event} event + * @private + */ + Range.prototype._onMouseWheel = function(event) { + // only allow zooming when configured as zoomable and moveable + if (!(this.options.zoomable && this.options.moveable)) return; - // TODO: lines must have a width, such that we can create css backgrounds + // retrieve delta + var delta = 0; + if (event.wheelDelta) { /* IE/Opera. */ + delta = event.wheelDelta / 120; + } else if (event.detail) { /* Mozilla case. */ + // In Mozilla, sign of delta is different than in IE. + // Also, delta is multiple of 3. + delta = -event.detail / 3; + } - if (this.options.showMinorLabels) { - this._repaintMinorText(x, step.getLabelMinor(), orientation); - } + // If delta is nonzero, handle it. + // Basically, delta is now positive if wheel was scrolled up, + // and negative, if wheel was scrolled down. + if (delta) { + // perform the zoom action. Delta is normally 1 or -1 - if (isMajor && this.options.showMajorLabels) { - if (x > 0) { - if (xFirstMajorLabel == undefined) { - xFirstMajorLabel = x; - } - this._repaintMajorText(x, step.getLabelMajor(), orientation); - } - this._repaintMajorLine(x, orientation); + // adjust a negative delta such that zooming in with delta 0.1 + // equals zooming out with a delta -0.1 + var scale; + if (delta < 0) { + scale = 1 - (delta / 5); } else { - this._repaintMinorLine(x, orientation); + scale = 1 / (1 + (delta / 5)) ; } - step.next(); - } - - // create a major label on the left when needed - if (this.options.showMajorLabels) { - var leftTime = this.body.util.toTime(0), - leftText = step.getLabelMajor(leftTime), - widthText = leftText.length * (this.props.majorCharWidth || 10) + 10; // upper bound estimation + // calculate center, the date to zoom around + var gesture = hammerUtil.fakeGesture(this, event), + pointer = getPointer(gesture.center, this.body.dom.center), + pointerDate = this._pointerToDate(pointer); - if (xFirstMajorLabel == undefined || widthText < xFirstMajorLabel) { - this._repaintMajorText(0, leftText, orientation); - } + this.zoom(scale, pointerDate, delta); } - // Cleanup leftover DOM elements from the redundant list - util.forEach(this.dom.redundant, function (arr) { - while (arr.length) { - var elem = arr.pop(); - if (elem && elem.parentNode) { - elem.parentNode.removeChild(elem); - } - } - }); + // Prevent default actions caused by mouse wheel + // (else the page and timeline both zoom and scroll) + event.preventDefault(); }; /** - * Create a minor label for the axis at position x - * @param {Number} x - * @param {String} text - * @param {String} orientation "top" or "bottom" (default) + * Start of a touch gesture * @private */ - TimeAxis.prototype._repaintMinorText = function (x, text, orientation) { - // reuse redundant label - var label = this.dom.redundant.minorTexts.shift(); - - if (!label) { - // create new label - var content = document.createTextNode(''); - label = document.createElement('div'); - label.appendChild(content); - label.className = 'text minor'; - this.dom.foreground.appendChild(label); - } - this.dom.minorTexts.push(label); - - label.childNodes[0].nodeValue = text; - - label.style.top = (orientation == 'top') ? (this.props.majorLabelHeight + 'px') : '0'; - label.style.left = x + 'px'; - //label.title = title; // TODO: this is a heavy operation + Range.prototype._onTouch = function (event) { + this.props.touch.start = this.start; + this.props.touch.end = this.end; + this.props.touch.allowDragging = true; + this.props.touch.center = null; + this.scaleOffset = 0; + this.deltaDifference = 0; }; /** - * Create a Major label for the axis at position x - * @param {Number} x - * @param {String} text - * @param {String} orientation "top" or "bottom" (default) + * On start of a hold gesture * @private */ - TimeAxis.prototype._repaintMajorText = function (x, text, orientation) { - // reuse redundant label - var label = this.dom.redundant.majorTexts.shift(); - - if (!label) { - // create label - var content = document.createTextNode(text); - label = document.createElement('div'); - label.className = 'text major'; - label.appendChild(content); - this.dom.foreground.appendChild(label); - } - this.dom.majorTexts.push(label); - - label.childNodes[0].nodeValue = text; - //label.title = title; // TODO: this is a heavy operation - - label.style.top = (orientation == 'top') ? '0' : (this.props.minorLabelHeight + 'px'); - label.style.left = x + 'px'; + Range.prototype._onHold = function () { + this.props.touch.allowDragging = false; }; /** - * Create a minor line for the axis at position x - * @param {Number} x - * @param {String} orientation "top" or "bottom" (default) + * Handle pinch event + * @param {Event} event * @private */ - TimeAxis.prototype._repaintMinorLine = function (x, orientation) { - // reuse redundant line - var line = this.dom.redundant.minorLines.shift(); + Range.prototype._onPinch = function (event) { + // only allow zooming when configured as zoomable and moveable + if (!(this.options.zoomable && this.options.moveable)) return; - if (!line) { - // create vertical line - line = document.createElement('div'); - line.className = 'grid vertical minor'; - this.dom.background.appendChild(line); - } - this.dom.minorLines.push(line); + this.props.touch.allowDragging = false; - var props = this.props; - if (orientation == 'top') { - line.style.top = props.majorLabelHeight + 'px'; - } - else { - line.style.top = this.body.domProps.top.height + 'px'; + if (event.gesture.touches.length > 1) { + if (!this.props.touch.center) { + this.props.touch.center = getPointer(event.gesture.center, this.body.dom.center); + } + + var scale = 1 / (event.gesture.scale + this.scaleOffset); + var centerDate = this._pointerToDate(this.props.touch.center); + + var hiddenDuration = DateUtil.getHiddenDurationBetween(this.body.hiddenDates, this.start, this.end); + var hiddenDurationBefore = DateUtil.getHiddenDurationBefore(this.body.hiddenDates, this, centerDate); + var hiddenDurationAfter = hiddenDuration - hiddenDurationBefore; + + // calculate new start and end + var newStart = (centerDate - hiddenDurationBefore) + (this.props.touch.start - (centerDate - hiddenDurationBefore)) * scale; + var newEnd = (centerDate + hiddenDurationAfter) + (this.props.touch.end - (centerDate + hiddenDurationAfter)) * scale; + + // snapping times away from hidden zones + this.startToFront = 1 - scale > 0 ? false : true; // used to do the right autocorrection with periodic hidden times + this.endToFront = scale - 1 > 0 ? false : true; // used to do the right autocorrection with periodic hidden times + + var safeStart = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newStart, 1 - scale, true); + var safeEnd = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newEnd, scale - 1, true); + if (safeStart != newStart || safeEnd != newEnd) { + this.props.touch.start = safeStart; + this.props.touch.end = safeEnd; + this.scaleOffset = 1 - event.gesture.scale; + newStart = safeStart; + newEnd = safeEnd; + } + + this.setRange(newStart, newEnd); + + this.startToFront = false; // revert to default + this.endToFront = true; // revert to default } - line.style.height = props.minorLineHeight + 'px'; - line.style.left = (x - props.minorLineWidth / 2) + 'px'; }; /** - * Create a Major line for the axis at position x - * @param {Number} x - * @param {String} orientation "top" or "bottom" (default) + * Helper function to calculate the center date for zooming + * @param {{x: Number, y: Number}} pointer + * @return {number} date * @private */ - TimeAxis.prototype._repaintMajorLine = function (x, orientation) { - // reuse redundant line - var line = this.dom.redundant.majorLines.shift(); + Range.prototype._pointerToDate = function (pointer) { + var conversion; + var direction = this.options.direction; - if (!line) { - // create vertical line - line = document.createElement('DIV'); - line.className = 'grid vertical major'; - this.dom.background.appendChild(line); - } - this.dom.majorLines.push(line); + validateDirection(direction); - var props = this.props; - if (orientation == 'top') { - line.style.top = '0'; + if (direction == 'horizontal') { + return this.body.util.toTime(pointer.x).valueOf(); } else { - line.style.top = this.body.domProps.top.height + 'px'; + var height = this.body.domProps.center.height; + conversion = this.conversion(height); + return pointer.y / conversion.scale + conversion.offset; } - line.style.left = (x - props.majorLineWidth / 2) + 'px'; - line.style.height = props.majorLineHeight + 'px'; }; /** - * Determine the size of text on the axis (both major and minor axis). - * The size is calculated only once and then cached in this.props. + * Get the pointer location relative to the location of the dom element + * @param {{pageX: Number, pageY: Number}} touch + * @param {Element} element HTML DOM element + * @return {{x: Number, y: Number}} pointer * @private */ - TimeAxis.prototype._calculateCharSize = function () { - // Note: We calculate char size with every redraw. Size may change, for - // example when any of the timelines parents had display:none for example. - - // determine the char width and height on the minor axis - if (!this.dom.measureCharMinor) { - this.dom.measureCharMinor = document.createElement('DIV'); - this.dom.measureCharMinor.className = 'text minor measure'; - this.dom.measureCharMinor.style.position = 'absolute'; + function getPointer (touch, element) { + return { + x: touch.pageX - util.getAbsoluteLeft(element), + y: touch.pageY - util.getAbsoluteTop(element) + }; + } - this.dom.measureCharMinor.appendChild(document.createTextNode('0')); - this.dom.foreground.appendChild(this.dom.measureCharMinor); + /** + * Zoom the range the given scale in or out. Start and end date will + * be adjusted, and the timeline will be redrawn. You can optionally give a + * date around which to zoom. + * For example, try scale = 0.9 or 1.1 + * @param {Number} scale Scaling factor. Values above 1 will zoom out, + * values below 1 will zoom in. + * @param {Number} [center] Value representing a date around which will + * be zoomed. + */ + Range.prototype.zoom = function(scale, center, delta) { + // if centerDate is not provided, take it half between start Date and end Date + if (center == null) { + center = (this.start + this.end) / 2; } - this.props.minorCharHeight = this.dom.measureCharMinor.clientHeight; - this.props.minorCharWidth = this.dom.measureCharMinor.clientWidth; - // determine the char width and height on the major axis - if (!this.dom.measureCharMajor) { - this.dom.measureCharMajor = document.createElement('DIV'); - this.dom.measureCharMajor.className = 'text major measure'; - this.dom.measureCharMajor.style.position = 'absolute'; + var hiddenDuration = DateUtil.getHiddenDurationBetween(this.body.hiddenDates, this.start, this.end); + var hiddenDurationBefore = DateUtil.getHiddenDurationBefore(this.body.hiddenDates, this, center); + var hiddenDurationAfter = hiddenDuration - hiddenDurationBefore; - this.dom.measureCharMajor.appendChild(document.createTextNode('0')); - this.dom.foreground.appendChild(this.dom.measureCharMajor); + // calculate new start and end + var newStart = (center-hiddenDurationBefore) + (this.start - (center-hiddenDurationBefore)) * scale; + var newEnd = (center+hiddenDurationAfter) + (this.end - (center+hiddenDurationAfter)) * scale; + + // snapping times away from hidden zones + this.startToFront = delta > 0 ? false : true; // used to do the right autocorrection with periodic hidden times + this.endToFront = -delta > 0 ? false : true; // used to do the right autocorrection with periodic hidden times + var safeStart = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newStart, delta, true); + var safeEnd = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newEnd, -delta, true); + if (safeStart != newStart || safeEnd != newEnd) { + newStart = safeStart; + newEnd = safeEnd; } - this.props.majorCharHeight = this.dom.measureCharMajor.clientHeight; - this.props.majorCharWidth = this.dom.measureCharMajor.clientWidth; + + this.setRange(newStart, newEnd); + + this.startToFront = false; // revert to default + this.endToFront = true; // revert to default + }; + + + + /** + * Move the range with a given delta to the left or right. Start and end + * value will be adjusted. For example, try delta = 0.1 or -0.1 + * @param {Number} delta Moving amount. Positive value will move right, + * negative value will move left + */ + Range.prototype.move = function(delta) { + // zoom start Date and end Date relative to the centerDate + var diff = (this.end - this.start); + + // apply new values + var newStart = this.start + diff * delta; + var newEnd = this.end + diff * delta; + + // TODO: reckon with min and max range + + this.start = newStart; + this.end = newEnd; }; /** - * Snap a date to a rounded value. - * The snap intervals are dependent on the current scale and step. - * @param {Date} date the date to be snapped. - * @return {Date} snappedDate + * Move the range to a new center point + * @param {Number} moveTo New center point of the range */ - TimeAxis.prototype.snap = function(date) { - return this.step.snap(date); + Range.prototype.moveTo = function(moveTo) { + var center = (this.start + this.end) / 2; + + var diff = center - moveTo; + + // calculate new start and end + var newStart = this.start - diff; + var newEnd = this.end - diff; + + this.setRange(newStart, newEnd); }; - module.exports = TimeAxis; + module.exports = Range; /***/ }, -/* 31 */ +/* 22 */ /***/ function(module, exports, __webpack_require__) { - var Hammer = __webpack_require__(45); - var util = __webpack_require__(1); + var Hammer = __webpack_require__(19); /** - * @constructor Item - * @param {Object} data Object containing (optional) parameters type, - * start, end, content, group, className. - * @param {{toScreen: function, toTime: function}} conversion - * Conversion functions from time to screen and vice versa - * @param {Object} options Configuration options - * // TODO: describe available options + * Fake a hammer.js gesture. Event can be a ScrollEvent or MouseMoveEvent + * @param {Element} element + * @param {Event} event */ - function Item (data, conversion, options) { - this.id = null; - this.parent = null; - this.data = data; - this.dom = null; - this.conversion = conversion || {}; - this.options = options || {}; + exports.fakeGesture = function(element, event) { + var eventType = null; - this.selected = false; - this.displayed = false; - this.dirty = true; + // for hammer.js 1.0.5 + // var gesture = Hammer.event.collectEventData(this, eventType, event); - this.top = null; - this.left = null; - this.width = null; - this.height = null; - } + // for hammer.js 1.0.6+ + var touches = Hammer.event.getTouchList(event, eventType); + var gesture = Hammer.event.collectEventData(this, eventType, touches, event); - Item.prototype.stack = true; + // on IE in standards mode, no touches are recognized by hammer.js, + // resulting in NaN values for center.pageX and center.pageY + if (isNaN(gesture.center.pageX)) { + gesture.center.pageX = event.pageX; + } + if (isNaN(gesture.center.pageY)) { + gesture.center.pageY = event.pageY; + } + + return gesture; + }; + + +/***/ }, +/* 23 */ +/***/ function(module, exports, __webpack_require__) { /** - * Select current item + * Prototype for visual components + * @param {{dom: Object, domProps: Object, emitter: Emitter, range: Range}} [body] + * @param {Object} [options] */ - Item.prototype.select = function() { - this.selected = true; - this.dirty = true; - if (this.displayed) this.redraw(); - }; + function Component (body, options) { + this.options = null; + this.props = null; + } /** - * Unselect current item + * Set options for the component. The new options will be merged into the + * current options. + * @param {Object} options */ - Item.prototype.unselect = function() { - this.selected = false; - this.dirty = true; - if (this.displayed) this.redraw(); + Component.prototype.setOptions = function(options) { + if (options) { + util.extend(this.options, options); + } }; /** - * Set data for the item. Existing data will be updated. The id should not - * be changed. When the item is displayed, it will be redrawn immediately. - * @param {Object} data + * Repaint the component + * @return {boolean} Returns true if the component is resized */ - Item.prototype.setData = function(data) { - this.data = data; - this.dirty = true; - if (this.displayed) this.redraw(); + Component.prototype.redraw = function() { + // should be implemented by the component + return false; }; /** - * Set a parent for the item - * @param {ItemSet | Group} parent + * Destroy the component. Cleanup DOM and event listeners */ - Item.prototype.setParent = function(parent) { - if (this.displayed) { - this.hide(); - this.parent = parent; - if (this.parent) { - this.show(); - } - } - else { - this.parent = parent; - } + Component.prototype.destroy = function() { + // should be implemented by the component }; /** - * Check whether this item is visible inside given range - * @returns {{start: Number, end: Number}} range with a timestamp for start and end - * @returns {boolean} True if visible + * Test whether the component is resized since the last time _isResized() was + * called. + * @return {Boolean} Returns true if the component is resized + * @protected */ - Item.prototype.isVisible = function(range) { - // Should be implemented by Item implementations - return false; + Component.prototype._isResized = function() { + var resized = (this.props._previousWidth !== this.props.width || + this.props._previousHeight !== this.props.height); + + this.props._previousWidth = this.props.width; + this.props._previousHeight = this.props.height; + + return resized; }; + module.exports = Component; + + +/***/ }, +/* 24 */ +/***/ function(module, exports, __webpack_require__) { + /** - * Show the Item in the DOM (when not already visible) - * @return {Boolean} changed + * Created by Alex on 10/3/2014. */ - Item.prototype.show = function() { - return false; - }; + var moment = __webpack_require__(2); + /** - * Hide the Item from the DOM (when visible) - * @return {Boolean} changed + * used in Core to convert the options into a volatile variable + * + * @param Core */ - Item.prototype.hide = function() { - return false; + exports.convertHiddenOptions = function(body, hiddenDates) { + body.hiddenDates = []; + if (hiddenDates) { + if (Array.isArray(hiddenDates) == true) { + for (var i = 0; i < hiddenDates.length; i++) { + if (hiddenDates[i].repeat === undefined) { + var dateItem = {}; + dateItem.start = moment(hiddenDates[i].start).toDate().valueOf(); + dateItem.end = moment(hiddenDates[i].end).toDate().valueOf(); + body.hiddenDates.push(dateItem); + } + } + body.hiddenDates.sort(function (a, b) { + return a.start - b.start; + }); // sort by start time + } + } }; + /** - * Repaint the item + * create new entrees for the repeating hidden dates + * @param body + * @param hiddenDates */ - Item.prototype.redraw = function() { - // should be implemented by the item - }; + exports.updateHiddenDates = function (body, hiddenDates) { + if (hiddenDates && body.domProps.centerContainer.width !== undefined) { + exports.convertHiddenOptions(body, hiddenDates); + + var start = moment(body.range.start); + var end = moment(body.range.end); + + var totalRange = (body.range.end - body.range.start); + var pixelTime = totalRange / body.domProps.centerContainer.width; + + for (var i = 0; i < hiddenDates.length; i++) { + if (hiddenDates[i].repeat !== undefined) { + var startDate = moment(hiddenDates[i].start); + var endDate = moment(hiddenDates[i].end); + + if (startDate._d == "Invalid Date") { + throw new Error("Supplied start date is not valid: " + hiddenDates[i].start); + } + if (endDate._d == "Invalid Date") { + throw new Error("Supplied end date is not valid: " + hiddenDates[i].end); + } + + var duration = endDate - startDate; + if (duration >= 4 * pixelTime) { + + var offset = 0; + var runUntil = end.clone(); + switch (hiddenDates[i].repeat) { + case "daily": // case of time + if (startDate.day() != endDate.day()) { + offset = 1; + } + startDate.dayOfYear(start.dayOfYear()); + startDate.year(start.year()); + startDate.subtract(7,'days'); + + endDate.dayOfYear(start.dayOfYear()); + endDate.year(start.year()); + endDate.subtract(7 - offset,'days'); + + runUntil.add(1, 'weeks'); + break; + case "weekly": + var dayOffset = endDate.diff(startDate,'days') + var day = startDate.day(); + + // set the start date to the range.start + startDate.date(start.date()); + startDate.month(start.month()); + startDate.year(start.year()); + endDate = startDate.clone(); + + // force + startDate.day(day); + endDate.day(day); + endDate.add(dayOffset,'days'); + + startDate.subtract(1,'weeks'); + endDate.subtract(1,'weeks'); + + runUntil.add(1, 'weeks'); + break + case "monthly": + if (startDate.month() != endDate.month()) { + offset = 1; + } + startDate.month(start.month()); + startDate.year(start.year()); + startDate.subtract(1,'months'); + + endDate.month(start.month()); + endDate.year(start.year()); + endDate.subtract(1,'months'); + endDate.add(offset,'months'); + + runUntil.add(1, 'months'); + break; + case "yearly": + if (startDate.year() != endDate.year()) { + offset = 1; + } + startDate.year(start.year()); + startDate.subtract(1,'years'); + endDate.year(start.year()); + endDate.subtract(1,'years'); + endDate.add(offset,'years'); + + runUntil.add(1, 'years'); + break; + default: + console.log("Wrong repeat format, allowed are: daily, weekly, monthly, yearly. Given:", hiddenDates[i].repeat); + return; + } + while (startDate < runUntil) { + body.hiddenDates.push({start: startDate.valueOf(), end: endDate.valueOf()}); + switch (hiddenDates[i].repeat) { + case "daily": + startDate.add(1, 'days'); + endDate.add(1, 'days'); + break; + case "weekly": + startDate.add(1, 'weeks'); + endDate.add(1, 'weeks'); + break + case "monthly": + startDate.add(1, 'months'); + endDate.add(1, 'months'); + break; + case "yearly": + startDate.add(1, 'y'); + endDate.add(1, 'y'); + break; + default: + console.log("Wrong repeat format, allowed are: daily, weekly, monthly, yearly. Given:", hiddenDates[i].repeat); + return; + } + } + body.hiddenDates.push({start: startDate.valueOf(), end: endDate.valueOf()}); + } + } + } + // remove duplicates, merge where possible + exports.removeDuplicates(body); + // ensure the new positions are not on hidden dates + var startHidden = exports.isHidden(body.range.start, body.hiddenDates); + var endHidden = exports.isHidden(body.range.end,body.hiddenDates); + var rangeStart = body.range.start; + var rangeEnd = body.range.end; + if (startHidden.hidden == true) {rangeStart = body.range.startToFront == true ? startHidden.startDate - 1 : startHidden.endDate + 1;} + if (endHidden.hidden == true) {rangeEnd = body.range.endToFront == true ? endHidden.startDate - 1 : endHidden.endDate + 1;} + if (startHidden.hidden == true || endHidden.hidden == true) { + body.range._applyRange(rangeStart, rangeEnd); + } + } + + } + /** - * Reposition the Item horizontally + * remove duplicates from the hidden dates list. Duplicates are evil. They mess everything up. + * Scales with N^2 + * @param body */ - Item.prototype.repositionX = function() { - // should be implemented by the item - }; + exports.removeDuplicates = function(body) { + var hiddenDates = body.hiddenDates; + var safeDates = []; + for (var i = 0; i < hiddenDates.length; i++) { + for (var j = 0; j < hiddenDates.length; j++) { + if (i != j && hiddenDates[j].remove != true && hiddenDates[i].remove != true) { + // j inside i + if (hiddenDates[j].start >= hiddenDates[i].start && hiddenDates[j].end <= hiddenDates[i].end) { + hiddenDates[j].remove = true; + } + // j start inside i + else if (hiddenDates[j].start >= hiddenDates[i].start && hiddenDates[j].start <= hiddenDates[i].end) { + hiddenDates[i].end = hiddenDates[j].end; + hiddenDates[j].remove = true; + } + // j end inside i + else if (hiddenDates[j].end >= hiddenDates[i].start && hiddenDates[j].end <= hiddenDates[i].end) { + hiddenDates[i].start = hiddenDates[j].start; + hiddenDates[j].remove = true; + } + } + } + } + + for (var i = 0; i < hiddenDates.length; i++) { + if (hiddenDates[i].remove !== true) { + safeDates.push(hiddenDates[i]); + } + } + + body.hiddenDates = safeDates; + body.hiddenDates.sort(function (a, b) { + return a.start - b.start; + }); // sort by start time + } + + exports.printDates = function(dates) { + for (var i =0; i < dates.length; i++) { + console.log(i, new Date(dates[i].start),new Date(dates[i].end), dates[i].start, dates[i].end, dates[i].remove); + } + } /** - * Reposition the Item vertically + * Used in TimeStep to avoid the hidden times. + * @param timeStep + * @param previousTime */ - Item.prototype.repositionY = function() { - // should be implemented by the item + exports.stepOverHiddenDates = function(timeStep, previousTime) { + var stepInHidden = false; + var currentValue = timeStep.current.valueOf(); + for (var i = 0; i < timeStep.hiddenDates.length; i++) { + var startDate = timeStep.hiddenDates[i].start; + var endDate = timeStep.hiddenDates[i].end; + if (currentValue >= startDate && currentValue < endDate) { + stepInHidden = true; + break; + } + } + + if (stepInHidden == true && currentValue < timeStep._end.valueOf() && currentValue != previousTime) { + var prevValue = moment(previousTime); + var newValue = moment(endDate); + //check if the next step should be major + if (prevValue.year() != newValue.year()) {timeStep.switchedYear = true;} + else if (prevValue.month() != newValue.month()) {timeStep.switchedMonth = true;} + else if (prevValue.dayOfYear() != newValue.dayOfYear()) {timeStep.switchedDay = true;} + + timeStep.current = newValue.toDate(); + } }; + + ///** + // * Used in TimeStep to avoid the hidden times. + // * @param timeStep + // * @param previousTime + // */ + //exports.checkFirstStep = function(timeStep) { + // var stepInHidden = false; + // var currentValue = timeStep.current.valueOf(); + // for (var i = 0; i < timeStep.hiddenDates.length; i++) { + // var startDate = timeStep.hiddenDates[i].start; + // var endDate = timeStep.hiddenDates[i].end; + // if (currentValue >= startDate && currentValue < endDate) { + // stepInHidden = true; + // break; + // } + // } + // + // if (stepInHidden == true && currentValue <= timeStep._end.valueOf()) { + // var newValue = moment(endDate); + // timeStep.current = newValue.toDate(); + // } + //}; + /** - * Repaint a delete button on the top right of the item when the item is selected - * @param {HTMLElement} anchor - * @protected + * replaces the Core toScreen methods + * @param Core + * @param time + * @param width + * @returns {number} */ - Item.prototype._repaintDeleteButton = function (anchor) { - if (this.selected && this.options.editable.remove && !this.dom.deleteButton) { - // create and show button - var me = this; + exports.toScreen = function(Core, time, width) { + if (Core.body.hiddenDates.length == 0) { + var conversion = Core.range.conversion(width); + return (time.valueOf() - conversion.offset) * conversion.scale; + } + else { + var hidden = exports.isHidden(time, Core.body.hiddenDates) + if (hidden.hidden == true) { + time = hidden.startDate; + } - var deleteButton = document.createElement('div'); - deleteButton.className = 'delete'; - deleteButton.title = 'Delete this item'; + var duration = exports.getHiddenDurationBetween(Core.body.hiddenDates, Core.range.start, Core.range.end); + time = exports.correctTimeForHidden(Core.body.hiddenDates, Core.range, time); - Hammer(deleteButton, { - preventDefault: true - }).on('tap', function (event) { - me.parent.removeFromDataSet(me); - event.stopPropagation(); - }); + var conversion = Core.range.conversion(width, duration); + return (time.valueOf() - conversion.offset) * conversion.scale; + } + }; - anchor.appendChild(deleteButton); - this.dom.deleteButton = deleteButton; + + /** + * Replaces the core toTime methods + * @param body + * @param range + * @param x + * @param width + * @returns {Date} + */ + exports.toTime = function(Core, x, width) { + if (Core.body.hiddenDates.length == 0) { + var conversion = Core.range.conversion(width); + return new Date(x / conversion.scale + conversion.offset); } - else if (!this.selected && this.dom.deleteButton) { - // remove button - if (this.dom.deleteButton.parentNode) { - this.dom.deleteButton.parentNode.removeChild(this.dom.deleteButton); + else { + var hiddenDuration = exports.getHiddenDurationBetween(Core.body.hiddenDates, Core.range.start, Core.range.end); + var totalDuration = Core.range.end - Core.range.start - hiddenDuration; + var partialDuration = totalDuration * x / width; + var accumulatedHiddenDuration = exports.getAccumulatedHiddenDuration(Core.body.hiddenDates, Core.range, partialDuration); + + var newTime = new Date(accumulatedHiddenDuration + partialDuration + Core.range.start); + return newTime; + } + }; + + + /** + * Support function + * + * @param hiddenDates + * @param range + * @returns {number} + */ + exports.getHiddenDurationBetween = function(hiddenDates, start, end) { + var duration = 0; + for (var i = 0; i < hiddenDates.length; i++) { + var startDate = hiddenDates[i].start; + var endDate = hiddenDates[i].end; + // if time after the cutout, and the + if (startDate >= start && endDate < end) { + duration += endDate - startDate; } - this.dom.deleteButton = null; } + return duration; }; + /** - * Set HTML contents for the item - * @param {Element} element HTML element to fill with the contents - * @private + * Support function + * @param hiddenDates + * @param range + * @param time + * @returns {{duration: number, time: *, offset: number}} */ - Item.prototype._updateContents = function (element) { - var content; - if (this.options.template) { - var itemData = this.parent.itemSet.itemsData.get(this.id); // get a clone of the data from the dataset - content = this.options.template(itemData); - } - else { - content = this.data.content; - } + exports.correctTimeForHidden = function(hiddenDates, range, time) { + time = moment(time).toDate().valueOf(); + time -= exports.getHiddenDurationBefore(hiddenDates,range,time); + return time; + }; - if(content !== this.content) { - // only replace the content when changed - if (content instanceof Element) { - element.innerHTML = ''; - element.appendChild(content); - } - else if (content != undefined) { - element.innerHTML = content; - } - else { - if (!(this.data.type == 'background' && this.data.content === undefined)) { - throw new Error('Property "content" missing in item ' + this.id); + exports.getHiddenDurationBefore = function(hiddenDates, range, time) { + var timeOffset = 0; + time = moment(time).toDate().valueOf(); + + for (var i = 0; i < hiddenDates.length; i++) { + var startDate = hiddenDates[i].start; + var endDate = hiddenDates[i].end; + // if time after the cutout, and the + if (startDate >= range.start && endDate < range.end) { + if (time >= endDate) { + timeOffset += (endDate - startDate); } } - - this.content = content; } - }; + return timeOffset; + } /** - * Set HTML contents for the item - * @param {Element} element HTML element to fill with the contents - * @private + * sum the duration from start to finish, including the hidden duration, + * until the required amount has been reached, return the accumulated hidden duration + * @param hiddenDates + * @param range + * @param time + * @returns {{duration: number, time: *, offset: number}} */ - Item.prototype._updateTitle = function (element) { - if (this.data.title != null) { - element.title = this.data.title || ''; - } - else { - element.removeAttribute('title'); + exports.getAccumulatedHiddenDuration = function(hiddenDates, range, requiredDuration) { + var hiddenDuration = 0; + var duration = 0; + var previousPoint = range.start; + //exports.printDates(hiddenDates) + for (var i = 0; i < hiddenDates.length; i++) { + var startDate = hiddenDates[i].start; + var endDate = hiddenDates[i].end; + // if time after the cutout, and the + if (startDate >= range.start && endDate < range.end) { + duration += startDate - previousPoint; + previousPoint = endDate; + if (duration >= requiredDuration) { + break; + } + else { + hiddenDuration += endDate - startDate; + } + } } + + return hiddenDuration; }; + + /** - * Process dataAttributes timeline option and set as data- attributes on dom.content - * @param {Element} element HTML element to which the attributes will be attached - * @private + * used to step over to either side of a hidden block. Correction is disabled on tablets, might be set to true + * @param hiddenDates + * @param time + * @param direction + * @param correctionEnabled + * @returns {*} */ - Item.prototype._updateDataAttributes = function(element) { - if (this.options.dataAttributes && this.options.dataAttributes.length > 0) { - var attributes = []; - - if (Array.isArray(this.options.dataAttributes)) { - attributes = this.options.dataAttributes; - } - else if (this.options.dataAttributes == 'all') { - attributes = Object.keys(this.data); + exports.snapAwayFromHidden = function(hiddenDates, time, direction, correctionEnabled) { + var isHidden = exports.isHidden(time, hiddenDates); + if (isHidden.hidden == true) { + if (direction < 0) { + if (correctionEnabled == true) { + return isHidden.startDate - (isHidden.endDate - time) - 1; + } + else { + return isHidden.startDate - 1; + } } else { - return; - } - - for (var i = 0; i < attributes.length; i++) { - var name = attributes[i]; - var value = this.data[name]; - - if (value != null) { - element.setAttribute('data-' + name, value); + if (correctionEnabled == true) { + return isHidden.endDate + (time - isHidden.startDate) + 1; } else { - element.removeAttribute('data-' + name); + return isHidden.endDate + 1; } } } - }; - - /** - * Update custom styles of the element - * @param element - * @private - */ - Item.prototype._updateStyle = function(element) { - // remove old styles - if (this.style) { - util.removeCssText(element, this.style); - this.style = null; - } - - // append new styles - if (this.data.style) { - util.addCssText(element, this.data.style); - this.style = this.data.style; + else { + return time; } - }; - module.exports = Item; - - -/***/ }, -/* 32 */ -/***/ function(module, exports, __webpack_require__) { + } - var Hammer = __webpack_require__(45); - var Item = __webpack_require__(31); - var BackgroundGroup = __webpack_require__(26); - var RangeItem = __webpack_require__(35); /** - * @constructor BackgroundItem - * @extends Item - * @param {Object} data Object containing parameters start, end - * content, className. - * @param {{toScreen: function, toTime: function}} conversion - * Conversion functions from time to screen and vice versa - * @param {Object} [options] Configuration options - * // TODO: describe options + * Check if a time is hidden + * + * @param time + * @param hiddenDates + * @returns {{hidden: boolean, startDate: Window.start, endDate: *}} */ - // TODO: implement support for the BackgroundItem just having a start, then being displayed as a sort of an annotation - function BackgroundItem (data, conversion, options) { - this.props = { - content: { - width: 0 - } - }; - this.overflow = false; // if contents can overflow (css styling), this flag is set to true + exports.isHidden = function(time, hiddenDates) { + for (var i = 0; i < hiddenDates.length; i++) { + var startDate = hiddenDates[i].start; + var endDate = hiddenDates[i].end; - // validate data - if (data) { - if (data.start == undefined) { - throw new Error('Property "start" missing in item ' + data.id); - } - if (data.end == undefined) { - throw new Error('Property "end" missing in item ' + data.id); + if (time >= startDate && time < endDate) { // if the start is entering a hidden zone + return {hidden: true, startDate: startDate, endDate: endDate}; + break; } } - - Item.call(this, data, conversion, options); - - this.emptyContent = false; + return {hidden: false, startDate: startDate, endDate: endDate}; } - BackgroundItem.prototype = new Item (null, null, null); +/***/ }, +/* 25 */ +/***/ function(module, exports, __webpack_require__) { - BackgroundItem.prototype.baseClassName = 'item background'; - BackgroundItem.prototype.stack = false; + var Emitter = __webpack_require__(11); + var Hammer = __webpack_require__(19); + var util = __webpack_require__(1); + var DataSet = __webpack_require__(7); + var DataView = __webpack_require__(9); + var Range = __webpack_require__(21); + var ItemSet = __webpack_require__(26); + var Activator = __webpack_require__(35); + var DateUtil = __webpack_require__(24); /** - * Check whether this item is visible inside given range - * @returns {{start: Number, end: Number}} range with a timestamp for start and end - * @returns {boolean} True if visible + * Create a timeline visualization + * @param {HTMLElement} container + * @param {vis.DataSet | Array | google.visualization.DataTable} [items] + * @param {Object} [options] See Core.setOptions for the available options. + * @constructor */ - BackgroundItem.prototype.isVisible = function(range) { - // determine visibility - return (this.data.start < range.end) && (this.data.end > range.start); - }; + function Core () {} + + // turn Core into an event emitter + Emitter(Core.prototype); /** - * Repaint the item + * Create the main DOM for the Core: a root panel containing left, right, + * top, bottom, content, and background panel. + * @param {Element} container The container element where the Core will + * be attached. + * @private */ - BackgroundItem.prototype.redraw = function() { - var dom = this.dom; - if (!dom) { - // create DOM - this.dom = {}; - dom = this.dom; - - // background box - dom.box = document.createElement('div'); - // className is updated in redraw() + Core.prototype._create = function (container) { + this.dom = {}; - // contents box - dom.content = document.createElement('div'); - dom.content.className = 'content'; - dom.box.appendChild(dom.content); + this.dom.root = document.createElement('div'); + this.dom.background = document.createElement('div'); + this.dom.backgroundVertical = document.createElement('div'); + this.dom.backgroundHorizontal = document.createElement('div'); + this.dom.centerContainer = document.createElement('div'); + this.dom.leftContainer = document.createElement('div'); + this.dom.rightContainer = document.createElement('div'); + this.dom.center = document.createElement('div'); + this.dom.left = document.createElement('div'); + this.dom.right = document.createElement('div'); + this.dom.top = document.createElement('div'); + this.dom.bottom = document.createElement('div'); + this.dom.shadowTop = document.createElement('div'); + this.dom.shadowBottom = document.createElement('div'); + this.dom.shadowTopLeft = document.createElement('div'); + this.dom.shadowBottomLeft = document.createElement('div'); + this.dom.shadowTopRight = document.createElement('div'); + this.dom.shadowBottomRight = document.createElement('div'); - // Note: we do NOT attach this item as attribute to the DOM, - // such that background items cannot be selected - //dom.box['timeline-item'] = this; + this.dom.root.className = 'vis timeline root'; + this.dom.background.className = 'vispanel background'; + this.dom.backgroundVertical.className = 'vispanel background vertical'; + this.dom.backgroundHorizontal.className = 'vispanel background horizontal'; + this.dom.centerContainer.className = 'vispanel center'; + this.dom.leftContainer.className = 'vispanel left'; + this.dom.rightContainer.className = 'vispanel right'; + this.dom.top.className = 'vispanel top'; + this.dom.bottom.className = 'vispanel bottom'; + this.dom.left.className = 'content'; + this.dom.center.className = 'content'; + this.dom.right.className = 'content'; + this.dom.shadowTop.className = 'shadow top'; + this.dom.shadowBottom.className = 'shadow bottom'; + this.dom.shadowTopLeft.className = 'shadow top'; + this.dom.shadowBottomLeft.className = 'shadow bottom'; + this.dom.shadowTopRight.className = 'shadow top'; + this.dom.shadowBottomRight.className = 'shadow bottom'; - this.dirty = true; - } + this.dom.root.appendChild(this.dom.background); + this.dom.root.appendChild(this.dom.backgroundVertical); + this.dom.root.appendChild(this.dom.backgroundHorizontal); + this.dom.root.appendChild(this.dom.centerContainer); + this.dom.root.appendChild(this.dom.leftContainer); + this.dom.root.appendChild(this.dom.rightContainer); + this.dom.root.appendChild(this.dom.top); + this.dom.root.appendChild(this.dom.bottom); - // append DOM to parent DOM - if (!this.parent) { - throw new Error('Cannot redraw item: no parent attached'); - } - if (!dom.box.parentNode) { - var background = this.parent.dom.background; - if (!background) { - throw new Error('Cannot redraw item: parent has no background container element'); - } - background.appendChild(dom.box); - } - this.displayed = true; + this.dom.centerContainer.appendChild(this.dom.center); + this.dom.leftContainer.appendChild(this.dom.left); + this.dom.rightContainer.appendChild(this.dom.right); - // Update DOM when item is marked dirty. An item is marked dirty when: - // - the item is not yet rendered - // - the item's data is changed - // - the item is selected/deselected - if (this.dirty) { - this._updateContents(this.dom.content); - this._updateTitle(this.dom.content); - this._updateDataAttributes(this.dom.content); - this._updateStyle(this.dom.box); + this.dom.centerContainer.appendChild(this.dom.shadowTop); + this.dom.centerContainer.appendChild(this.dom.shadowBottom); + this.dom.leftContainer.appendChild(this.dom.shadowTopLeft); + this.dom.leftContainer.appendChild(this.dom.shadowBottomLeft); + this.dom.rightContainer.appendChild(this.dom.shadowTopRight); + this.dom.rightContainer.appendChild(this.dom.shadowBottomRight); - // update class - var className = (this.data.className ? (' ' + this.data.className) : '') + - (this.selected ? ' selected' : ''); - dom.box.className = this.baseClassName + className; + this.on('rangechange', this.redraw.bind(this)); + this.on('touch', this._onTouch.bind(this)); + this.on('pinch', this._onPinch.bind(this)); + this.on('dragstart', this._onDragStart.bind(this)); + this.on('drag', this._onDrag.bind(this)); - // determine from css whether this box has overflow - this.overflow = window.getComputedStyle(dom.content).overflow !== 'hidden'; + var me = this; + this.on('change', function (properties) { + if (properties && properties.queue == true) { + // redraw once on next tick + if (!me._redrawTimer) { + me._redrawTimer = setTimeout(function () { + me._redrawTimer = null; + me.redraw(); + }, 0) + } + } + else { + // redraw immediately + me.redraw(); + } + }); - // recalculate size - this.props.content.width = this.dom.content.offsetWidth; - this.height = 0; // set height zero, so this item will be ignored when stacking items + // create event listeners for all interesting events, these events will be + // emitted via emitter + this.hammer = Hammer(this.dom.root, { + preventDefault: true + }); + this.listeners = {}; - this.dirty = false; - } - }; + var events = [ + 'touch', 'pinch', + 'tap', 'doubletap', 'hold', + 'dragstart', 'drag', 'dragend', + 'mousewheel', 'DOMMouseScroll' // DOMMouseScroll is needed for Firefox + ]; + events.forEach(function (event) { + var listener = function () { + var args = [event].concat(Array.prototype.slice.call(arguments, 0)); + if (me.isActive()) { + me.emit.apply(me, args); + } + }; + me.hammer.on(event, listener); + me.listeners[event] = listener; + }); - /** - * Show the item in the DOM (when not already visible). The items DOM will - * be created when needed. - */ - BackgroundItem.prototype.show = RangeItem.prototype.show; + // size properties of each of the panels + this.props = { + root: {}, + background: {}, + centerContainer: {}, + leftContainer: {}, + rightContainer: {}, + center: {}, + left: {}, + right: {}, + top: {}, + bottom: {}, + border: {}, + scrollTop: 0, + scrollTopMin: 0 + }; + this.touch = {}; // store state information needed for touch events - /** - * Hide the item from the DOM (when visible) - * @return {Boolean} changed - */ - BackgroundItem.prototype.hide = RangeItem.prototype.hide; + this.redrawCount = 0; - /** - * Reposition the item horizontally - * @Override - */ - BackgroundItem.prototype.repositionX = RangeItem.prototype.repositionX; + // attach the root panel to the provided container + if (!container) throw new Error('No container provided'); + container.appendChild(this.dom.root); + }; /** - * Reposition the item vertically - * @Override + * Set options. Options will be passed to all components loaded in the Timeline. + * @param {Object} [options] + * {String} orientation + * Vertical orientation for the Timeline, + * can be 'bottom' (default) or 'top'. + * {String | Number} width + * Width for the timeline, a number in pixels or + * a css string like '1000px' or '75%'. '100%' by default. + * {String | Number} height + * Fixed height for the Timeline, a number in pixels or + * a css string like '400px' or '75%'. If undefined, + * The Timeline will automatically size such that + * its contents fit. + * {String | Number} minHeight + * Minimum height for the Timeline, a number in pixels or + * a css string like '400px' or '75%'. + * {String | Number} maxHeight + * Maximum height for the Timeline, a number in pixels or + * a css string like '400px' or '75%'. + * {Number | Date | String} start + * Start date for the visible window + * {Number | Date | String} end + * End date for the visible window */ - BackgroundItem.prototype.repositionY = function(margin) { - var onTop = this.options.orientation === 'top'; - this.dom.content.style.top = onTop ? '' : '0'; - this.dom.content.style.bottom = onTop ? '0' : ''; - var height; - - // special positioning for subgroups - if (this.data.subgroup !== undefined) { - var itemSubgroup = this.data.subgroup; - var subgroups = this.parent.subgroups; - var subgroupIndex = subgroups[itemSubgroup].index; - // if the orientation is top, we need to take the difference in height into account. - if (onTop == true) { - // the first subgroup will have to account for the distance from the top to the first item. - height = this.parent.subgroups[itemSubgroup].height + margin.item.vertical; - height += subgroupIndex == 0 ? margin.axis - 0.5*margin.item.vertical : 0; - var newTop = this.parent.top; - for (var subgroup in subgroups) { - if (subgroups.hasOwnProperty(subgroup)) { - if (subgroups[subgroup].visible == true && subgroups[subgroup].index < subgroupIndex) { - newTop += subgroups[subgroup].height + margin.item.vertical; - } - } - } + Core.prototype.setOptions = function (options) { + if (options) { + // copy the known options + var fields = ['width', 'height', 'minHeight', 'maxHeight', 'autoResize', 'start', 'end', 'orientation', 'clickToUse', 'dataAttributes', 'hiddenDates']; + util.selectiveExtend(fields, this.options, options); - // the others will have to be offset downwards with this same distance. - newTop += subgroupIndex != 0 ? margin.axis - 0.5 * margin.item.vertical : 0; - this.dom.box.style.top = newTop + 'px'; - this.dom.box.style.bottom = ''; - } - // and when the orientation is bottom: - else { - var newTop = this.parent.top; - for (var subgroup in subgroups) { - if (subgroups.hasOwnProperty(subgroup)) { - if (subgroups[subgroup].visible == true && subgroups[subgroup].index > subgroupIndex) { - newTop += subgroups[subgroup].height + margin.item.vertical; - } - } - } - height = this.parent.subgroups[itemSubgroup].height + margin.item.vertical; - this.dom.box.style.top = newTop + 'px'; - this.dom.box.style.bottom = ''; - } - } - // and in the case of no subgroups: - else { - // we want backgrounds with groups to only show in groups. - if (this.parent instanceof BackgroundGroup) { - // if the item is not in a group: - height = Math.max(this.parent.height, - this.parent.itemSet.body.domProps.center.height, - this.parent.itemSet.body.domProps.centerContainer.height); - this.dom.box.style.top = onTop ? '0' : ''; - this.dom.box.style.bottom = onTop ? '' : '0'; + if ('hiddenDates' in this.options) { + DateUtil.convertHiddenOptions(this.body, this.options.hiddenDates); } - else { - height = this.parent.height; - // same alignment for items when orientation is top or bottom - this.dom.box.style.top = this.parent.top + 'px'; - this.dom.box.style.bottom = ''; + + if ('clickToUse' in options) { + if (options.clickToUse) { + this.activator = new Activator(this.dom.root); + } + else { + if (this.activator) { + this.activator.destroy(); + delete this.activator; + } + } } + + // enable/disable autoResize + this._initAutoResize(); } - this.dom.box.style.height = height + 'px'; - }; - module.exports = BackgroundItem; + // propagate options to all components + this.components.forEach(function (component) { + component.setOptions(options); + }); + // TODO: remove deprecation error one day (deprecated since version 0.8.0) + if (options && options.order) { + throw new Error('Option order is deprecated. There is no replacement for this feature.'); + } -/***/ }, -/* 33 */ -/***/ function(module, exports, __webpack_require__) { + // redraw everything + this.redraw(); + }; - var Item = __webpack_require__(31); - var util = __webpack_require__(1); + /** + * Returns true when the Timeline is active. + * @returns {boolean} + */ + Core.prototype.isActive = function () { + return !this.activator || this.activator.active; + }; /** - * @constructor BoxItem - * @extends Item - * @param {Object} data Object containing parameters start - * content, className. - * @param {{toScreen: function, toTime: function}} conversion - * Conversion functions from time to screen and vice versa - * @param {Object} [options] Configuration options - * // TODO: describe available options + * Destroy the Core, clean up all DOM elements and event listeners. */ - function BoxItem (data, conversion, options) { - this.props = { - dot: { - width: 0, - height: 0 - }, - line: { - width: 0, - height: 0 - } - }; + Core.prototype.destroy = function () { + // unbind datasets + this.clear(); - // validate data - if (data) { - if (data.start == undefined) { - throw new Error('Property "start" missing in item ' + data); + // remove all event listeners + this.off(); + + // stop checking for changed size + this._stopAutoResize(); + + // remove from DOM + if (this.dom.root.parentNode) { + this.dom.root.parentNode.removeChild(this.dom.root); + } + this.dom = null; + + // remove Activator + if (this.activator) { + this.activator.destroy(); + delete this.activator; + } + + // cleanup hammer touch events + for (var event in this.listeners) { + if (this.listeners.hasOwnProperty(event)) { + delete this.listeners[event]; } } + this.listeners = null; + this.hammer = null; - Item.call(this, data, conversion, options); - } + // give all components the opportunity to cleanup + this.components.forEach(function (component) { + component.destroy(); + }); + + this.body = null; + }; - BoxItem.prototype = new Item (null, null, null); /** - * Check whether this item is visible inside given range - * @returns {{start: Number, end: Number}} range with a timestamp for start and end - * @returns {boolean} True if visible + * Set a custom time bar + * @param {Date} time */ - BoxItem.prototype.isVisible = function(range) { - // determine visibility - // TODO: account for the real width of the item. Right now we just add 1/4 to the window - var interval = (range.end - range.start) / 4; - return (this.data.start > range.start - interval) && (this.data.start < range.end + interval); + Core.prototype.setCustomTime = function (time) { + if (!this.customTime) { + throw new Error('Cannot get custom time: Custom time bar is not enabled'); + } + + this.customTime.setCustomTime(time); }; /** - * Repaint the item + * Retrieve the current custom time. + * @return {Date} customTime */ - BoxItem.prototype.redraw = function() { - var dom = this.dom; - if (!dom) { - // create DOM - this.dom = {}; - dom = this.dom; + Core.prototype.getCustomTime = function() { + if (!this.customTime) { + throw new Error('Cannot get custom time: Custom time bar is not enabled'); + } - // create main box - dom.box = document.createElement('DIV'); + return this.customTime.getCustomTime(); + }; - // contents box (inside the background box). used for making margins - dom.content = document.createElement('DIV'); - dom.content.className = 'content'; - dom.box.appendChild(dom.content); - // line to axis - dom.line = document.createElement('DIV'); - dom.line.className = 'line'; + /** + * Get the id's of the currently visible items. + * @returns {Array} The ids of the visible items + */ + Core.prototype.getVisibleItems = function() { + return this.itemSet && this.itemSet.getVisibleItems() || []; + }; - // dot on axis - dom.dot = document.createElement('DIV'); - dom.dot.className = 'dot'; - // attach this item as attribute - dom.box['timeline-item'] = this; - this.dirty = true; + /** + * Clear the Core. By Default, items, groups and options are cleared. + * Example usage: + * + * timeline.clear(); // clear items, groups, and options + * timeline.clear({options: true}); // clear options only + * + * @param {Object} [what] Optionally specify what to clear. By default: + * {items: true, groups: true, options: true} + */ + Core.prototype.clear = function(what) { + // clear items + if (!what || what.items) { + this.setItems(null); } - // append DOM to parent DOM - if (!this.parent) { - throw new Error('Cannot redraw item: no parent attached'); - } - if (!dom.box.parentNode) { - var foreground = this.parent.dom.foreground; - if (!foreground) throw new Error('Cannot redraw item: parent has no foreground container element'); - foreground.appendChild(dom.box); - } - if (!dom.line.parentNode) { - var background = this.parent.dom.background; - if (!background) throw new Error('Cannot redraw item: parent has no background container element'); - background.appendChild(dom.line); - } - if (!dom.dot.parentNode) { - var axis = this.parent.dom.axis; - if (!background) throw new Error('Cannot redraw item: parent has no axis container element'); - axis.appendChild(dom.dot); + // clear groups + if (!what || what.groups) { + this.setGroups(null); } - this.displayed = true; - - // Update DOM when item is marked dirty. An item is marked dirty when: - // - the item is not yet rendered - // - the item's data is changed - // - the item is selected/deselected - if (this.dirty) { - this._updateContents(this.dom.content); - this._updateTitle(this.dom.box); - this._updateDataAttributes(this.dom.box); - this._updateStyle(this.dom.box); - - // update class - var className = (this.data.className? ' ' + this.data.className : '') + - (this.selected ? ' selected' : ''); - dom.box.className = 'item box' + className; - dom.line.className = 'item line' + className; - dom.dot.className = 'item dot' + className; - // recalculate size - this.props.dot.height = dom.dot.offsetHeight; - this.props.dot.width = dom.dot.offsetWidth; - this.props.line.width = dom.line.offsetWidth; - this.width = dom.box.offsetWidth; - this.height = dom.box.offsetHeight; + // clear options of timeline and of each of the components + if (!what || what.options) { + this.components.forEach(function (component) { + component.setOptions(component.defaultOptions); + }); - this.dirty = false; + this.setOptions(this.defaultOptions); // this will also do a redraw } - - this._repaintDeleteButton(dom.box); }; /** - * Show the item in the DOM (when not already displayed). The items DOM will - * be created when needed. + * Set Core window such that it fits all items + * @param {Object} [options] Available options: + * `animate: boolean | number` + * If true (default), the range is animated + * smoothly to the new window. + * If a number, the number is taken as duration + * for the animation. Default duration is 500 ms. */ - BoxItem.prototype.show = function() { - if (!this.displayed) { - this.redraw(); + Core.prototype.fit = function(options) { + var range = this._getDataRange(); + + // skip range set if there is no start and end date + if (range.start === null && range.end === null) { + return; } + + var animate = (options && options.animate !== undefined) ? options.animate : true; + this.range.setRange(range.start, range.end, animate); }; /** - * Hide the item from the DOM (when visible) + * Calculate the data range of the items and applies a 5% window around it. + * @returns {{start: Date | null, end: Date | null}} + * @protected */ - BoxItem.prototype.hide = function() { - if (this.displayed) { - var dom = this.dom; - - if (dom.box.parentNode) dom.box.parentNode.removeChild(dom.box); - if (dom.line.parentNode) dom.line.parentNode.removeChild(dom.line); - if (dom.dot.parentNode) dom.dot.parentNode.removeChild(dom.dot); + Core.prototype._getDataRange = function() { + // apply the data range as range + var dataRange = this.getItemRange(); - this.top = null; - this.left = null; + // add 5% space on both sides + var start = dataRange.min; + var end = dataRange.max; + if (start != null && end != null) { + var interval = (end.valueOf() - start.valueOf()); + if (interval <= 0) { + // prevent an empty interval + interval = 24 * 60 * 60 * 1000; // 1 day + } + start = new Date(start.valueOf() - interval * 0.05); + end = new Date(end.valueOf() + interval * 0.05); + } - this.displayed = false; + return { + start: start, + end: end } }; /** - * Reposition the item horizontally - * @Override + * Set the visible window. Both parameters are optional, you can change only + * start or only end. Syntax: + * + * TimeLine.setWindow(start, end) + * TimeLine.setWindow(range) + * + * Where start and end can be a Date, number, or string, and range is an + * object with properties start and end. + * + * @param {Date | Number | String | Object} [start] Start date of visible window + * @param {Date | Number | String} [end] End date of visible window + * @param {Object} [options] Available options: + * `animate: boolean | number` + * If true (default), the range is animated + * smoothly to the new window. + * If a number, the number is taken as duration + * for the animation. Default duration is 500 ms. */ - BoxItem.prototype.repositionX = function() { - var start = this.conversion.toScreen(this.data.start); - var align = this.options.align; - var left; - var box = this.dom.box; - var line = this.dom.line; - var dot = this.dom.dot; - - // calculate left position of the box - if (align == 'right') { - this.left = start - this.width; - } - else if (align == 'left') { - this.left = start; + Core.prototype.setWindow = function(start, end, options) { + var animate = (options && options.animate !== undefined) ? options.animate : true; + if (arguments.length == 1) { + var range = arguments[0]; + this.range.setRange(range.start, range.end, animate); } else { - // default or 'center' - this.left = start - this.width / 2; + this.range.setRange(start, end, animate); } - - // reposition box - box.style.left = this.left + 'px'; - - // reposition line - line.style.left = (start - this.props.line.width / 2) + 'px'; - - // reposition dot - dot.style.left = (start - this.props.dot.width / 2) + 'px'; }; /** - * Reposition the item vertically - * @Override + * Move the window such that given time is centered on screen. + * @param {Date | Number | String} time + * @param {Object} [options] Available options: + * `animate: boolean | number` + * If true (default), the range is animated + * smoothly to the new window. + * If a number, the number is taken as duration + * for the animation. Default duration is 500 ms. */ - BoxItem.prototype.repositionY = function() { - var orientation = this.options.orientation; - var box = this.dom.box; - var line = this.dom.line; - var dot = this.dom.dot; - - if (orientation == 'top') { - box.style.top = (this.top || 0) + 'px'; + Core.prototype.moveTo = function(time, options) { + var interval = this.range.end - this.range.start; + var t = util.convert(time, 'Date').valueOf(); - line.style.top = '0'; - line.style.height = (this.parent.top + this.top + 1) + 'px'; - line.style.bottom = ''; - } - else { // orientation 'bottom' - var itemSetHeight = this.parent.itemSet.props.height; // TODO: this is nasty - var lineHeight = itemSetHeight - this.parent.top - this.parent.height + this.top; + var start = t - interval / 2; + var end = t + interval / 2; + var animate = (options && options.animate !== undefined) ? options.animate : true; - box.style.top = (this.parent.height - this.top - this.height || 0) + 'px'; - line.style.top = (itemSetHeight - lineHeight) + 'px'; - line.style.bottom = '0'; - } + this.range.setRange(start, end, animate); + }; - dot.style.top = (-this.props.dot.height / 2) + 'px'; + /** + * Get the visible window + * @return {{start: Date, end: Date}} Visible range + */ + Core.prototype.getWindow = function() { + var range = this.range.getRange(); + return { + start: new Date(range.start), + end: new Date(range.end) + }; }; - module.exports = BoxItem; + /** + * Force a redraw of the Core. Can be useful to manually redraw when + * option autoResize=false + */ + Core.prototype.redraw = function() { + var resized = false; + var options = this.options; + var props = this.props; + var dom = this.dom; + if (!dom) return; // when destroyed -/***/ }, -/* 34 */ -/***/ function(module, exports, __webpack_require__) { + DateUtil.updateHiddenDates(this.body, this.options.hiddenDates); - var Item = __webpack_require__(31); + // update class names + if (options.orientation == 'top') { + util.addClassName(dom.root, 'top'); + util.removeClassName(dom.root, 'bottom'); + } + else { + util.removeClassName(dom.root, 'top'); + util.addClassName(dom.root, 'bottom'); + } - /** - * @constructor PointItem - * @extends Item - * @param {Object} data Object containing parameters start - * content, className. - * @param {{toScreen: function, toTime: function}} conversion - * Conversion functions from time to screen and vice versa - * @param {Object} [options] Configuration options - * // TODO: describe available options - */ - function PointItem (data, conversion, options) { - this.props = { - dot: { - top: 0, - width: 0, - height: 0 - }, - content: { - height: 0, - marginLeft: 0 - } - }; + // update root width and height options + dom.root.style.maxHeight = util.option.asSize(options.maxHeight, ''); + dom.root.style.minHeight = util.option.asSize(options.minHeight, ''); + dom.root.style.width = util.option.asSize(options.width, ''); - // validate data - if (data) { - if (data.start == undefined) { - throw new Error('Property "start" missing in item ' + data); - } + // calculate border widths + props.border.left = (dom.centerContainer.offsetWidth - dom.centerContainer.clientWidth) / 2; + props.border.right = props.border.left; + props.border.top = (dom.centerContainer.offsetHeight - dom.centerContainer.clientHeight) / 2; + props.border.bottom = props.border.top; + var borderRootHeight= dom.root.offsetHeight - dom.root.clientHeight; + var borderRootWidth = dom.root.offsetWidth - dom.root.clientWidth; + + // workaround for a bug in IE: the clientWidth of an element with + // a height:0px and overflow:hidden is not calculated and always has value 0 + if (dom.centerContainer.clientHeight === 0) { + props.border.left = props.border.top; + props.border.right = props.border.left; + } + if (dom.root.clientHeight === 0) { + borderRootWidth = borderRootHeight; } - Item.call(this, data, conversion, options); - } + // calculate the heights. If any of the side panels is empty, we set the height to + // minus the border width, such that the border will be invisible + props.center.height = dom.center.offsetHeight; + props.left.height = dom.left.offsetHeight; + props.right.height = dom.right.offsetHeight; + props.top.height = dom.top.clientHeight || -props.border.top; + props.bottom.height = dom.bottom.clientHeight || -props.border.bottom; - PointItem.prototype = new Item (null, null, null); + // TODO: compensate borders when any of the panels is empty. - /** - * Check whether this item is visible inside given range - * @returns {{start: Number, end: Number}} range with a timestamp for start and end - * @returns {boolean} True if visible - */ - PointItem.prototype.isVisible = function(range) { - // determine visibility - // TODO: account for the real width of the item. Right now we just add 1/4 to the window - var interval = (range.end - range.start) / 4; - return (this.data.start > range.start - interval) && (this.data.start < range.end + interval); - }; + // apply auto height + // TODO: only calculate autoHeight when needed (else we cause an extra reflow/repaint of the DOM) + var contentHeight = Math.max(props.left.height, props.center.height, props.right.height); + var autoHeight = props.top.height + contentHeight + props.bottom.height + + borderRootHeight + props.border.top + props.border.bottom; + dom.root.style.height = util.option.asSize(options.height, autoHeight + 'px'); - /** - * Repaint the item - */ - PointItem.prototype.redraw = function() { - var dom = this.dom; - if (!dom) { - // create DOM - this.dom = {}; - dom = this.dom; + // calculate heights of the content panels + props.root.height = dom.root.offsetHeight; + props.background.height = props.root.height - borderRootHeight; + var containerHeight = props.root.height - props.top.height - props.bottom.height - + borderRootHeight; + props.centerContainer.height = containerHeight; + props.leftContainer.height = containerHeight; + props.rightContainer.height = props.leftContainer.height; - // background box - dom.point = document.createElement('div'); - // className is updated in redraw() + // calculate the widths of the panels + props.root.width = dom.root.offsetWidth; + props.background.width = props.root.width - borderRootWidth; + props.left.width = dom.leftContainer.clientWidth || -props.border.left; + props.leftContainer.width = props.left.width; + props.right.width = dom.rightContainer.clientWidth || -props.border.right; + props.rightContainer.width = props.right.width; + var centerWidth = props.root.width - props.left.width - props.right.width - borderRootWidth; + props.center.width = centerWidth; + props.centerContainer.width = centerWidth; + props.top.width = centerWidth; + props.bottom.width = centerWidth; - // contents box, right from the dot - dom.content = document.createElement('div'); - dom.content.className = 'content'; - dom.point.appendChild(dom.content); + // resize the panels + dom.background.style.height = props.background.height + 'px'; + dom.backgroundVertical.style.height = props.background.height + 'px'; + dom.backgroundHorizontal.style.height = props.centerContainer.height + 'px'; + dom.centerContainer.style.height = props.centerContainer.height + 'px'; + dom.leftContainer.style.height = props.leftContainer.height + 'px'; + dom.rightContainer.style.height = props.rightContainer.height + 'px'; - // dot at start - dom.dot = document.createElement('div'); - dom.point.appendChild(dom.dot); + dom.background.style.width = props.background.width + 'px'; + dom.backgroundVertical.style.width = props.centerContainer.width + 'px'; + dom.backgroundHorizontal.style.width = props.background.width + 'px'; + dom.centerContainer.style.width = props.center.width + 'px'; + dom.top.style.width = props.top.width + 'px'; + dom.bottom.style.width = props.bottom.width + 'px'; - // attach this item as attribute - dom.point['timeline-item'] = this; + // reposition the panels + dom.background.style.left = '0'; + dom.background.style.top = '0'; + dom.backgroundVertical.style.left = (props.left.width + props.border.left) + 'px'; + dom.backgroundVertical.style.top = '0'; + dom.backgroundHorizontal.style.left = '0'; + dom.backgroundHorizontal.style.top = props.top.height + 'px'; + dom.centerContainer.style.left = props.left.width + 'px'; + dom.centerContainer.style.top = props.top.height + 'px'; + dom.leftContainer.style.left = '0'; + dom.leftContainer.style.top = props.top.height + 'px'; + dom.rightContainer.style.left = (props.left.width + props.center.width) + 'px'; + dom.rightContainer.style.top = props.top.height + 'px'; + dom.top.style.left = props.left.width + 'px'; + dom.top.style.top = '0'; + dom.bottom.style.left = props.left.width + 'px'; + dom.bottom.style.top = (props.top.height + props.centerContainer.height) + 'px'; - this.dirty = true; - } + // update the scrollTop, feasible range for the offset can be changed + // when the height of the Core or of the contents of the center changed + this._updateScrollTop(); - // append DOM to parent DOM - if (!this.parent) { - throw new Error('Cannot redraw item: no parent attached'); - } - if (!dom.point.parentNode) { - var foreground = this.parent.dom.foreground; - if (!foreground) { - throw new Error('Cannot redraw item: parent has no foreground container element'); - } - foreground.appendChild(dom.point); + // reposition the scrollable contents + var offset = this.props.scrollTop; + if (options.orientation == 'bottom') { + offset += Math.max(this.props.centerContainer.height - this.props.center.height - + this.props.border.top - this.props.border.bottom, 0); } - this.displayed = true; - - // Update DOM when item is marked dirty. An item is marked dirty when: - // - the item is not yet rendered - // - the item's data is changed - // - the item is selected/deselected - if (this.dirty) { - this._updateContents(this.dom.content); - this._updateTitle(this.dom.point); - this._updateDataAttributes(this.dom.point); - this._updateStyle(this.dom.point); + dom.center.style.left = '0'; + dom.center.style.top = offset + 'px'; + dom.left.style.left = '0'; + dom.left.style.top = offset + 'px'; + dom.right.style.left = '0'; + dom.right.style.top = offset + 'px'; - // update class - var className = (this.data.className? ' ' + this.data.className : '') + - (this.selected ? ' selected' : ''); - dom.point.className = 'item point' + className; - dom.dot.className = 'item dot' + className; + // show shadows when vertical scrolling is available + var visibilityTop = this.props.scrollTop == 0 ? 'hidden' : ''; + var visibilityBottom = this.props.scrollTop == this.props.scrollTopMin ? 'hidden' : ''; + dom.shadowTop.style.visibility = visibilityTop; + dom.shadowBottom.style.visibility = visibilityBottom; + dom.shadowTopLeft.style.visibility = visibilityTop; + dom.shadowBottomLeft.style.visibility = visibilityBottom; + dom.shadowTopRight.style.visibility = visibilityTop; + dom.shadowBottomRight.style.visibility = visibilityBottom; - // recalculate size - this.width = dom.point.offsetWidth; - this.height = dom.point.offsetHeight; - this.props.dot.width = dom.dot.offsetWidth; - this.props.dot.height = dom.dot.offsetHeight; - this.props.content.height = dom.content.offsetHeight; + // redraw all components + this.components.forEach(function (component) { + resized = component.redraw() || resized; + }); + if (resized) { + // keep repainting until all sizes are settled + var MAX_REDRAWS = 3; // maximum number of consecutive redraws + if (this.redrawCount < MAX_REDRAWS) { + this.redrawCount++; + this.redraw(); + } + else { + console.log('WARNING: infinite loop in redraw?') + } + this.redrawCount = 0; + } - // resize contents - dom.content.style.marginLeft = 2 * this.props.dot.width + 'px'; - //dom.content.style.marginRight = ... + 'px'; // TODO: margin right + this.emit("finishedRedraw"); + }; - dom.dot.style.top = ((this.height - this.props.dot.height) / 2) + 'px'; - dom.dot.style.left = (this.props.dot.width / 2) + 'px'; + // TODO: deprecated since version 1.1.0, remove some day + Core.prototype.repaint = function () { + throw new Error('Function repaint is deprecated. Use redraw instead.'); + }; - this.dirty = false; + /** + * Set a current time. This can be used for example to ensure that a client's + * time is synchronized with a shared server time. + * Only applicable when option `showCurrentTime` is true. + * @param {Date | String | Number} time A Date, unix timestamp, or + * ISO date string. + */ + Core.prototype.setCurrentTime = function(time) { + if (!this.currentTime) { + throw new Error('Option showCurrentTime must be true'); } - this._repaintDeleteButton(dom.point); + this.currentTime.setCurrentTime(time); }; /** - * Show the item in the DOM (when not already visible). The items DOM will - * be created when needed. + * Get the current time. + * Only applicable when option `showCurrentTime` is true. + * @return {Date} Returns the current time. */ - PointItem.prototype.show = function() { - if (!this.displayed) { - this.redraw(); + Core.prototype.getCurrentTime = function() { + if (!this.currentTime) { + throw new Error('Option showCurrentTime must be true'); } + + return this.currentTime.getCurrentTime(); }; /** - * Hide the item from the DOM (when visible) + * Convert a position on screen (pixels) to a datetime + * @param {int} x Position on the screen in pixels + * @return {Date} time The datetime the corresponds with given position x + * @private */ - PointItem.prototype.hide = function() { - if (this.displayed) { - if (this.dom.point.parentNode) { - this.dom.point.parentNode.removeChild(this.dom.point); - } - - this.top = null; - this.left = null; - - this.displayed = false; - } + // TODO: move this function to Range + Core.prototype._toTime = function(x) { + return DateUtil.toTime(this, x, this.props.center.width); }; /** - * Reposition the item horizontally - * @Override + * Convert a position on the global screen (pixels) to a datetime + * @param {int} x Position on the screen in pixels + * @return {Date} time The datetime the corresponds with given position x + * @private */ - PointItem.prototype.repositionX = function() { - var start = this.conversion.toScreen(this.data.start); - - this.left = start - this.props.dot.width; - - // reposition point - this.dom.point.style.left = this.left + 'px'; + // TODO: move this function to Range + Core.prototype._toGlobalTime = function(x) { + return DateUtil.toTime(this, x, this.props.root.width); + //var conversion = this.range.conversion(this.props.root.width); + //return new Date(x / conversion.scale + conversion.offset); }; /** - * Reposition the item vertically - * @Override + * Convert a datetime (Date object) into a position on the screen + * @param {Date} time A date + * @return {int} x The position on the screen in pixels which corresponds + * with the given date. + * @private */ - PointItem.prototype.repositionY = function() { - var orientation = this.options.orientation, - point = this.dom.point; - - if (orientation == 'top') { - point.style.top = this.top + 'px'; - } - else { - point.style.top = (this.parent.height - this.top - this.height) + 'px'; - } + // TODO: move this function to Range + Core.prototype._toScreen = function(time) { + return DateUtil.toScreen(this, time, this.props.center.width); }; - module.exports = PointItem; - - -/***/ }, -/* 35 */ -/***/ function(module, exports, __webpack_require__) { - var Hammer = __webpack_require__(45); - var Item = __webpack_require__(31); /** - * @constructor RangeItem - * @extends Item - * @param {Object} data Object containing parameters start, end - * content, className. - * @param {{toScreen: function, toTime: function}} conversion - * Conversion functions from time to screen and vice versa - * @param {Object} [options] Configuration options - * // TODO: describe options + * Convert a datetime (Date object) into a position on the root + * This is used to get the pixel density estimate for the screen, not the center panel + * @param {Date} time A date + * @return {int} x The position on root in pixels which corresponds + * with the given date. + * @private */ - function RangeItem (data, conversion, options) { - this.props = { - content: { - width: 0 - } - }; - this.overflow = false; // if contents can overflow (css styling), this flag is set to true - - // validate data - if (data) { - if (data.start == undefined) { - throw new Error('Property "start" missing in item ' + data.id); - } - if (data.end == undefined) { - throw new Error('Property "end" missing in item ' + data.id); - } - } - - Item.call(this, data, conversion, options); - } - - RangeItem.prototype = new Item (null, null, null); + // TODO: move this function to Range + Core.prototype._toGlobalScreen = function(time) { + return DateUtil.toScreen(this, time, this.props.root.width); + //var conversion = this.range.conversion(this.props.root.width); + //return (time.valueOf() - conversion.offset) * conversion.scale; + }; - RangeItem.prototype.baseClassName = 'item range'; /** - * Check whether this item is visible inside given range - * @returns {{start: Number, end: Number}} range with a timestamp for start and end - * @returns {boolean} True if visible + * Initialize watching when option autoResize is true + * @private */ - RangeItem.prototype.isVisible = function(range) { - // determine visibility - return (this.data.start < range.end) && (this.data.end > range.start); + Core.prototype._initAutoResize = function () { + if (this.options.autoResize == true) { + this._startAutoResize(); + } + else { + this._stopAutoResize(); + } }; /** - * Repaint the item + * Watch for changes in the size of the container. On resize, the Panel will + * automatically redraw itself. + * @private */ - RangeItem.prototype.redraw = function() { - var dom = this.dom; - if (!dom) { - // create DOM - this.dom = {}; - dom = this.dom; - - // background box - dom.box = document.createElement('div'); - // className is updated in redraw() - - // contents box - dom.content = document.createElement('div'); - dom.content.className = 'content'; - dom.box.appendChild(dom.content); - - // attach this item as attribute - dom.box['timeline-item'] = this; + Core.prototype._startAutoResize = function () { + var me = this; - this.dirty = true; - } + this._stopAutoResize(); - // append DOM to parent DOM - if (!this.parent) { - throw new Error('Cannot redraw item: no parent attached'); - } - if (!dom.box.parentNode) { - var foreground = this.parent.dom.foreground; - if (!foreground) { - throw new Error('Cannot redraw item: parent has no foreground container element'); + this._onResize = function() { + if (me.options.autoResize != true) { + // stop watching when the option autoResize is changed to false + me._stopAutoResize(); + return; } - foreground.appendChild(dom.box); - } - this.displayed = true; - // Update DOM when item is marked dirty. An item is marked dirty when: - // - the item is not yet rendered - // - the item's data is changed - // - the item is selected/deselected - if (this.dirty) { - this._updateContents(this.dom.content); - this._updateTitle(this.dom.box); - this._updateDataAttributes(this.dom.box); - this._updateStyle(this.dom.box); + if (me.dom.root) { + // check whether the frame is resized + // Note: we compare offsetWidth here, not clientWidth. For some reason, + // IE does not restore the clientWidth from 0 to the actual width after + // changing the timeline's container display style from none to visible + if ((me.dom.root.offsetWidth != me.props.lastWidth) || + (me.dom.root.offsetHeight != me.props.lastHeight)) { + me.props.lastWidth = me.dom.root.offsetWidth; + me.props.lastHeight = me.dom.root.offsetHeight; - // update class - var className = (this.data.className ? (' ' + this.data.className) : '') + - (this.selected ? ' selected' : ''); - dom.box.className = this.baseClassName + className; + me.emit('change'); + } + } + }; - // determine from css whether this box has overflow - this.overflow = window.getComputedStyle(dom.content).overflow !== 'hidden'; + // add event listener to window resize + util.addEventListener(window, 'resize', this._onResize); - // recalculate size - // turn off max-width to be able to calculate the real width - // this causes an extra browser repaint/reflow, but so be it - this.dom.content.style.maxWidth = 'none'; - this.props.content.width = this.dom.content.offsetWidth; - this.height = this.dom.box.offsetHeight; - this.dom.content.style.maxWidth = ''; + this.watchTimer = setInterval(this._onResize, 1000); + }; - this.dirty = false; + /** + * Stop watching for a resize of the frame. + * @private + */ + Core.prototype._stopAutoResize = function () { + if (this.watchTimer) { + clearInterval(this.watchTimer); + this.watchTimer = undefined; } - this._repaintDeleteButton(dom.box); - this._repaintDragLeft(); - this._repaintDragRight(); + // remove event listener on window.resize + util.removeEventListener(window, 'resize', this._onResize); + this._onResize = null; }; /** - * Show the item in the DOM (when not already visible). The items DOM will - * be created when needed. + * Start moving the timeline vertically + * @param {Event} event + * @private */ - RangeItem.prototype.show = function() { - if (!this.displayed) { - this.redraw(); - } + Core.prototype._onTouch = function (event) { + this.touch.allowDragging = true; }; /** - * Hide the item from the DOM (when visible) - * @return {Boolean} changed + * Start moving the timeline vertically + * @param {Event} event + * @private */ - RangeItem.prototype.hide = function() { - if (this.displayed) { - var box = this.dom.box; - - if (box.parentNode) { - box.parentNode.removeChild(box); - } - - this.top = null; - this.left = null; - - this.displayed = false; - } + Core.prototype._onPinch = function (event) { + this.touch.allowDragging = false; }; /** - * Reposition the item horizontally - * @Override + * Start moving the timeline vertically + * @param {Event} event + * @private */ - RangeItem.prototype.repositionX = function() { - var parentWidth = this.parent.width; - var start = this.conversion.toScreen(this.data.start); - var end = this.conversion.toScreen(this.data.end); - var contentLeft; - var contentWidth; - - // limit the width of the this, as browsers cannot draw very wide divs - if (start < -parentWidth) { - start = -parentWidth; - } - if (end > 2 * parentWidth) { - end = 2 * parentWidth; - } - var boxWidth = Math.max(end - start, 1); - - if (this.overflow) { - this.left = start; - this.width = boxWidth + this.props.content.width; - contentWidth = this.props.content.width; - - // Note: The calculation of width is an optimistic calculation, giving - // a width which will not change when moving the Timeline - // So no re-stacking needed, which is nicer for the eye; - } - else { - this.left = start; - this.width = boxWidth; - contentWidth = Math.min(end - start - 2 * this.options.padding, this.props.content.width); - } - - this.dom.box.style.left = this.left + 'px'; - this.dom.box.style.width = boxWidth + 'px'; - - switch (this.options.align) { - case 'left': - this.dom.content.style.left = '0'; - break; - - case 'right': - this.dom.content.style.left = Math.max((boxWidth - contentWidth - 2 * this.options.padding), 0) + 'px'; - break; - - case 'center': - this.dom.content.style.left = Math.max((boxWidth - contentWidth - 2 * this.options.padding) / 2, 0) + 'px'; - break; - - default: // 'auto' - // when range exceeds left of the window, position the contents at the left of the visible area - if (this.overflow) { - if (end > 0) { - contentLeft = Math.max(-start, 0); - } - else { - contentLeft = -contentWidth; // ensure it's not visible anymore - } - } - else { - if (start < 0) { - contentLeft = Math.min(-start, - (end - start - contentWidth - 2 * this.options.padding)); - // TODO: remove the need for options.padding. it's terrible. - } - else { - contentLeft = 0; - } - } - this.dom.content.style.left = contentLeft + 'px'; - } + Core.prototype._onDragStart = function (event) { + this.touch.initialScrollTop = this.props.scrollTop; }; /** - * Reposition the item vertically - * @Override + * Move the timeline vertically + * @param {Event} event + * @private */ - RangeItem.prototype.repositionY = function() { - var orientation = this.options.orientation, - box = this.dom.box; + Core.prototype._onDrag = function (event) { + // refuse to drag when we where pinching to prevent the timeline make a jump + // when releasing the fingers in opposite order from the touch screen + if (!this.touch.allowDragging) return; - if (orientation == 'top') { - box.style.top = this.top + 'px'; - } - else { - box.style.top = (this.parent.height - this.top - this.height) + 'px'; + var delta = event.gesture.deltaY; + + var oldScrollTop = this._getScrollTop(); + var newScrollTop = this._setScrollTop(this.touch.initialScrollTop + delta); + + + if (newScrollTop != oldScrollTop) { + this.redraw(); // TODO: this causes two redraws when dragging, the other is triggered by rangechange already + this.emit("verticalDrag"); } }; /** - * Repaint a drag area on the left side of the range when the range is selected - * @protected + * Apply a scrollTop + * @param {Number} scrollTop + * @returns {Number} scrollTop Returns the applied scrollTop + * @private */ - RangeItem.prototype._repaintDragLeft = function () { - if (this.selected && this.options.editable.updateTime && !this.dom.dragLeft) { - // create and show drag area - var dragLeft = document.createElement('div'); - dragLeft.className = 'drag-left'; - dragLeft.dragLeftItem = this; - - // TODO: this should be redundant? - Hammer(dragLeft, { - preventDefault: true - }).on('drag', function () { - //console.log('drag left') - }); + Core.prototype._setScrollTop = function (scrollTop) { + this.props.scrollTop = scrollTop; + this._updateScrollTop(); + return this.props.scrollTop; + }; - this.dom.box.appendChild(dragLeft); - this.dom.dragLeft = dragLeft; - } - else if (!this.selected && this.dom.dragLeft) { - // delete drag area - if (this.dom.dragLeft.parentNode) { - this.dom.dragLeft.parentNode.removeChild(this.dom.dragLeft); + /** + * Update the current scrollTop when the height of the containers has been changed + * @returns {Number} scrollTop Returns the applied scrollTop + * @private + */ + Core.prototype._updateScrollTop = function () { + // recalculate the scrollTopMin + var scrollTopMin = Math.min(this.props.centerContainer.height - this.props.center.height, 0); // is negative or zero + if (scrollTopMin != this.props.scrollTopMin) { + // in case of bottom orientation, change the scrollTop such that the contents + // do not move relative to the time axis at the bottom + if (this.options.orientation == 'bottom') { + this.props.scrollTop += (scrollTopMin - this.props.scrollTopMin); } - this.dom.dragLeft = null; + this.props.scrollTopMin = scrollTopMin; } + + // limit the scrollTop to the feasible scroll range + if (this.props.scrollTop > 0) this.props.scrollTop = 0; + if (this.props.scrollTop < scrollTopMin) this.props.scrollTop = scrollTopMin; + + return this.props.scrollTop; }; /** - * Repaint a drag area on the right side of the range when the range is selected - * @protected + * Get the current scrollTop + * @returns {number} scrollTop + * @private */ - RangeItem.prototype._repaintDragRight = function () { - if (this.selected && this.options.editable.updateTime && !this.dom.dragRight) { - // create and show drag area - var dragRight = document.createElement('div'); - dragRight.className = 'drag-right'; - dragRight.dragRightItem = this; - - // TODO: this should be redundant? - Hammer(dragRight, { - preventDefault: true - }).on('drag', function () { - //console.log('drag right') - }); - - this.dom.box.appendChild(dragRight); - this.dom.dragRight = dragRight; - } - else if (!this.selected && this.dom.dragRight) { - // delete drag area - if (this.dom.dragRight.parentNode) { - this.dom.dragRight.parentNode.removeChild(this.dom.dragRight); - } - this.dom.dragRight = null; - } + Core.prototype._getScrollTop = function () { + return this.props.scrollTop; }; - module.exports = RangeItem; + module.exports = Core; /***/ }, -/* 36 */ +/* 26 */ /***/ function(module, exports, __webpack_require__) { - var Emitter = __webpack_require__(56); - var Hammer = __webpack_require__(45); - var keycharm = __webpack_require__(57); + var Hammer = __webpack_require__(19); var util = __webpack_require__(1); - var hammerUtil = __webpack_require__(47); - var DataSet = __webpack_require__(3); - var DataView = __webpack_require__(4); - var dotparser = __webpack_require__(42); - var gephiParser = __webpack_require__(43); - var Groups = __webpack_require__(38); - var Images = __webpack_require__(39); - var Node = __webpack_require__(40); - var Edge = __webpack_require__(37); - var Popup = __webpack_require__(41); - var MixinLoader = __webpack_require__(54); - var Activator = __webpack_require__(55); - var locales = __webpack_require__(49); + var DataSet = __webpack_require__(7); + var DataView = __webpack_require__(9); + var Component = __webpack_require__(23); + var Group = __webpack_require__(27); + var BackgroundGroup = __webpack_require__(31); + var BoxItem = __webpack_require__(32); + var PointItem = __webpack_require__(33); + var RangeItem = __webpack_require__(29); + var BackgroundItem = __webpack_require__(34); - // Load custom shapes into CanvasRenderingContext2D - __webpack_require__(50); + + var UNGROUPED = '__ungrouped__'; // reserved group id for ungrouped items + var BACKGROUND = '__background__'; // reserved group id for background items without group /** - * @constructor Network - * Create a network visualization, displaying nodes and edges. - * - * @param {Element} container The DOM element in which the Network will - * be created. Normally a div element. - * @param {Object} data An object containing parameters - * {Array} nodes - * {Array} edges - * @param {Object} options Options + * An ItemSet holds a set of items and ranges which can be displayed in a + * range. The width is determined by the parent of the ItemSet, and the height + * is determined by the size of the items. + * @param {{dom: Object, domProps: Object, emitter: Emitter, range: Range}} body + * @param {Object} [options] See ItemSet.setOptions for the available options. + * @constructor ItemSet + * @extends Component */ - function Network (container, data, options) { - if (!(this instanceof Network)) { - throw new SyntaxError('Constructor must be called with the new operator'); - } - - this._initializeMixinLoaders(); - - // create variables and set default values - this.containerElement = container; - - // render and calculation settings - this.renderRefreshRate = 60; // hz (fps) - this.renderTimestep = 1000 / this.renderRefreshRate; // ms -- saves calculation later on - this.renderTime = 0.5 * this.renderTimestep; // measured time it takes to render a frame - this.maxPhysicsTicksPerRender = 3; // max amount of physics ticks per render step. - this.physicsDiscreteStepsize = 0.50; // discrete stepsize of the simulation + function ItemSet(body, options) { + this.body = body; - this.initializing = true; + this.defaultOptions = { + type: null, // 'box', 'point', 'range', 'background' + orientation: 'bottom', // 'top' or 'bottom' + align: 'auto', // alignment of box items + stack: true, + groupOrder: null, - this.triggerFunctions = {add:null,edit:null,editEdge:null,connect:null,del:null}; + selectable: true, + editable: { + updateTime: false, + updateGroup: false, + add: false, + remove: false + }, - // set constant values - this.defaultOptions = { - nodes: { - mass: 1, - radiusMin: 10, - radiusMax: 30, - radius: 10, - shape: 'ellipse', - image: undefined, - widthMin: 16, // px - widthMax: 64, // px - fontColor: 'black', - fontSize: 14, // px - fontFace: 'verdana', - fontFill: undefined, - level: -1, - color: { - border: '#2B7CE9', - background: '#97C2FC', - highlight: { - border: '#2B7CE9', - background: '#D2E5FF' - }, - hover: { - border: '#2B7CE9', - background: '#D2E5FF' - } - }, - borderColor: '#2B7CE9', - backgroundColor: '#97C2FC', - highlightColor: '#D2E5FF', - group: undefined, - borderWidth: 1, - borderWidthSelected: undefined + onAdd: function (item, callback) { + callback(item); }, - edges: { - widthMin: 1, // - widthMax: 15,// - width: 1, - widthSelectionMultiplier: 2, - hoverWidth: 1.5, - style: 'line', - color: { - color:'#848484', - highlight:'#848484', - hover: '#848484' - }, - fontColor: '#343434', - fontSize: 14, // px - fontFace: 'arial', - fontFill: 'white', - arrowScaleFactor: 1, - dash: { - length: 10, - gap: 5, - altLength: undefined - }, - inheritColor: "from" // to, from, false, true (== from) + onUpdate: function (item, callback) { + callback(item); }, - configurePhysics:false, - physics: { - barnesHut: { - enabled: true, - theta: 1 / 0.6, // inverted to save time during calculation - gravitationalConstant: -2000, - centralGravity: 0.3, - springLength: 95, - springConstant: 0.04, - damping: 0.09 - }, - repulsion: { - centralGravity: 0.0, - springLength: 200, - springConstant: 0.05, - nodeDistance: 100, - damping: 0.09 - }, - hierarchicalRepulsion: { - enabled: false, - centralGravity: 0.0, - springLength: 100, - springConstant: 0.01, - nodeDistance: 150, - damping: 0.09 - }, - damping: null, - centralGravity: null, - springLength: null, - springConstant: null + onMove: function (item, callback) { + callback(item); }, - clustering: { // Per Node in Cluster = PNiC - enabled: false, // (Boolean) | global on/off switch for clustering. - initialMaxNodes: 100, // (# nodes) | if the initial amount of nodes is larger than this, we cluster until the total number is less than this threshold. - clusterThreshold:500, // (# nodes) | during calculate forces, we check if the total number of nodes is larger than this. If it is, cluster until reduced to reduceToNodes - reduceToNodes:300, // (# nodes) | during calculate forces, we check if the total number of nodes is larger than clusterThreshold. If it is, cluster until reduced to this - chainThreshold: 0.4, // (% of all drawn nodes)| maximum percentage of allowed chainnodes (long strings of connected nodes) within all nodes. (lower means less chains). - clusterEdgeThreshold: 20, // (px) | edge length threshold. if smaller, this node is clustered. - sectorThreshold: 100, // (# nodes in cluster) | cluster size threshold. If larger, expanding in own sector. - screenSizeThreshold: 0.2, // (% of canvas) | relative size threshold. If the width or height of a clusternode takes up this much of the screen, decluster node. - fontSizeMultiplier: 4.0, // (px PNiC) | how much the cluster font size grows per node in cluster (in px). - maxFontSize: 1000, - forceAmplification: 0.1, // (multiplier PNiC) | factor of increase fo the repulsion force of a cluster (per node in cluster). - distanceAmplification: 0.1, // (multiplier PNiC) | factor how much the repulsion distance of a cluster increases (per node in cluster). - edgeGrowth: 20, // (px PNiC) | amount of clusterSize connected to the edge is multiplied with this and added to edgeLength. - nodeScaling: {width: 1, // (px PNiC) | growth of the width per node in cluster. - height: 1, // (px PNiC) | growth of the height per node in cluster. - radius: 1}, // (px PNiC) | growth of the radius per node in cluster. - maxNodeSizeIncrements: 600, // (# increments) | max growth of the width per node in cluster. - activeAreaBoxSize: 80, // (px) | box area around the curser where clusters are popped open. - clusterLevelDifference: 2 + onRemove: function (item, callback) { + callback(item); }, - navigation: { - enabled: false + onMoving: function (item, callback) { + callback(item); }, - keyboard: { - enabled: false, - speed: {x: 10, y: 10, zoom: 0.02} + + margin: { + item: { + horizontal: 10, + vertical: 10 + }, + axis: 20 }, - dataManipulation: { - enabled: false, - initiallyVisible: false + padding: 5 + }; + + // options is shared by this ItemSet and all its items + this.options = util.extend({}, this.defaultOptions); + + // options for getting items from the DataSet with the correct type + this.itemOptions = { + type: {start: 'Date', end: 'Date'} + }; + + this.conversion = { + toScreen: body.util.toScreen, + toTime: body.util.toTime + }; + this.dom = {}; + this.props = {}; + this.hammer = null; + + var me = this; + this.itemsData = null; // DataSet + this.groupsData = null; // DataSet + + // listeners for the DataSet of the items + this.itemListeners = { + 'add': function (event, params, senderId) { + me._onAdd(params.items); }, - hierarchicalLayout: { - enabled:false, - levelSeparation: 150, - nodeSpacing: 100, - direction: "UD", // UD, DU, LR, RL - layout: "hubsize" // hubsize, directed + 'update': function (event, params, senderId) { + me._onUpdate(params.items); }, - freezeForStabilization: false, - smoothCurves: { - enabled: true, - dynamic: true, - type: "continuous", - roundness: 0.5 + 'remove': function (event, params, senderId) { + me._onRemove(params.items); + } + }; + + // listeners for the DataSet of the groups + this.groupListeners = { + 'add': function (event, params, senderId) { + me._onAddGroups(params.items); }, - maxVelocity: 30, - minVelocity: 0.1, // px/s - stabilize: true, // stabilize before displaying the network - stabilizationIterations: 1000, // maximum number of iteration to stabilize - locale: 'en', - locales: locales, - tooltip: { - delay: 300, - fontColor: 'black', - fontSize: 14, // px - fontFace: 'verdana', - color: { - border: '#666', - background: '#FFFFC6' - } + 'update': function (event, params, senderId) { + me._onUpdateGroups(params.items); }, - dragNetwork: true, - dragNodes: true, - zoomable: true, - hover: false, - hideEdgesOnDrag: false, - hideNodesOnDrag: false, - width : '100%', - height : '100%', - selectable: true + 'remove': function (event, params, senderId) { + me._onRemoveGroups(params.items); + } }; - this.constants = util.extend({}, this.defaultOptions); - this.pixelRatio = 1; - - - this.hoverObj = {nodes:{},edges:{}}; - this.controlNodesActive = false; - this.navigationHammers = {existing:[], _new: []}; - // animation properties - this.animationSpeed = 1/this.renderRefreshRate; - this.animationEasingFunction = "easeInOutQuint"; - this.easingTime = 0; - this.sourceScale = 0; - this.targetScale = 0; - this.sourceTranslation = 0; - this.targetTranslation = 0; - this.lockedOnNodeId = null; - this.lockedOnNodeOffset = null; - this.touchTime = 0; + this.items = {}; // object with an Item for every data item + this.groups = {}; // Group object for every group + this.groupIds = []; - // Node variables - var network = this; - this.groups = new Groups(); // object with groups - this.images = new Images(); // object with images - this.images.setOnloadCallback(function () { - network._redraw(); - }); + this.selection = []; // list with the ids of all selected nodes + this.stackDirty = true; // if true, all items will be restacked on next redraw - // keyboard navigation variables - this.xIncrement = 0; - this.yIncrement = 0; - this.zoomIncrement = 0; + this.touchParams = {}; // stores properties while dragging + // create the HTML DOM - // loading all the mixins: - // load the force calculation functions, grouped under the physics system. - this._loadPhysicsSystem(); - // create a frame and canvas this._create(); - // load the sector system. (mandatory, fully integrated with Network) - this._loadSectorSystem(); - // load the cluster system. (mandatory, even when not using the cluster system, there are function calls to it) - this._loadClusterSystem(); - // load the selection system. (mandatory, required by Network) - this._loadSelectionSystem(); - // load the selection system. (mandatory, required by Network) - this._loadHierarchySystem(); - - // apply options - this._setTranslation(this.frame.clientWidth / 2, this.frame.clientHeight / 2); - this._setScale(1); this.setOptions(options); + } - // other vars - this.freezeSimulation = false;// freeze the simulation - this.cachedFunctions = {}; - this.startedStabilization = false; - this.stabilized = false; - this.stabilizationIterations = null; - this.draggingNodes = false; + ItemSet.prototype = new Component(); - // containers for nodes and edges - this.calculationNodes = {}; - this.calculationNodeIndices = []; - this.nodeIndices = []; // array with all the indices of the nodes. Used to speed up forces calculation - this.nodes = {}; // object with Node objects - this.edges = {}; // object with Edge objects + // available item types will be registered here + ItemSet.types = { + background: BackgroundItem, + box: BoxItem, + range: RangeItem, + point: PointItem + }; - // position and scale variables and objects - this.canvasTopLeft = {"x": 0,"y": 0}; // coordinates of the top left of the canvas. they will be set during _redraw. - this.canvasBottomRight = {"x": 0,"y": 0}; // coordinates of the bottom right of the canvas. they will be set during _redraw - this.pointerPosition = {"x": 0,"y": 0}; // coordinates of the bottom right of the canvas. they will be set during _redraw - this.areaCenter = {}; // object with x and y elements used for determining the center of the zoom action - this.scale = 1; // defining the global scale variable in the constructor - this.previousScale = this.scale; // this is used to check if the zoom operation is zooming in or out + /** + * Create the HTML DOM for the ItemSet + */ + ItemSet.prototype._create = function(){ + var frame = document.createElement('div'); + frame.className = 'itemset'; + frame['timeline-itemset'] = this; + this.dom.frame = frame; - // datasets or dataviews - this.nodesData = null; // A DataSet or DataView - this.edgesData = null; // A DataSet or DataView + // create background panel + var background = document.createElement('div'); + background.className = 'background'; + frame.appendChild(background); + this.dom.background = background; - // create event listeners used to subscribe on the DataSets of the nodes and edges - this.nodesListeners = { - 'add': function (event, params) { - network._addNodes(params.items); - network.start(); - }, - 'update': function (event, params) { - network._updateNodes(params.items, params.data); - network.start(); - }, - 'remove': function (event, params) { - network._removeNodes(params.items); - network.start(); - } - }; - this.edgesListeners = { - 'add': function (event, params) { - network._addEdges(params.items); - network.start(); - }, - 'update': function (event, params) { - network._updateEdges(params.items); - network.start(); - }, - 'remove': function (event, params) { - network._removeEdges(params.items); - network.start(); - } - }; + // create foreground panel + var foreground = document.createElement('div'); + foreground.className = 'foreground'; + frame.appendChild(foreground); + this.dom.foreground = foreground; - // properties for the animation - this.moving = true; - this.timer = undefined; // Scheduling function. Is definded in this.start(); + // create axis panel + var axis = document.createElement('div'); + axis.className = 'axis'; + this.dom.axis = axis; - // load data (the disable start variable will be the same as the enabled clustering) - this.setData(data,this.constants.clustering.enabled || this.constants.hierarchicalLayout.enabled); + // create labelset + var labelSet = document.createElement('div'); + labelSet.className = 'labelset'; + this.dom.labelSet = labelSet; - // hierarchical layout - this.initializing = false; - if (this.constants.hierarchicalLayout.enabled == true) { - this._setupHierarchicalLayout(); - } - else { - // zoom so all data will fit on the screen, if clustering is enabled, we do not want start to be called here. - if (this.constants.stabilize == false) { - this.zoomExtent(undefined, true,this.constants.clustering.enabled); - } - } + // create ungrouped Group + this._updateUngrouped(); - // if clustering is disabled, the simulation will have started in the setData function - if (this.constants.clustering.enabled) { - this.startWithClustering(); - } - } + // create background Group + var backgroundGroup = new BackgroundGroup(BACKGROUND, null, this); + backgroundGroup.show(); + this.groups[BACKGROUND] = backgroundGroup; + + // attach event listeners + // Note: we bind to the centerContainer for the case where the height + // of the center container is larger than of the ItemSet, so we + // can click in the empty area to create a new item or deselect an item. + this.hammer = Hammer(this.body.dom.centerContainer, { + preventDefault: true + }); + + // drag items when selected + this.hammer.on('touch', this._onTouch.bind(this)); + this.hammer.on('dragstart', this._onDragStart.bind(this)); + this.hammer.on('drag', this._onDrag.bind(this)); + this.hammer.on('dragend', this._onDragEnd.bind(this)); + + // single select (or unselect) when tapping an item + this.hammer.on('tap', this._onSelectItem.bind(this)); + + // multi select when holding mouse/touch, or on ctrl+click + this.hammer.on('hold', this._onMultiSelectItem.bind(this)); - // Extend Network with an Emitter mixin - Emitter(Network.prototype); + // add item on doubletap + this.hammer.on('doubletap', this._onAddItem.bind(this)); + + // attach to the DOM + this.show(); + }; /** - * Get the script path where the vis.js library is located - * - * @returns {string | null} path Path or null when not found. Path does not - * end with a slash. - * @private + * Set options for the ItemSet. Existing options will be extended/overwritten. + * @param {Object} [options] The following options are available: + * {String} type + * Default type for the items. Choose from 'box' + * (default), 'point', 'range', or 'background'. + * The default style can be overwritten by + * individual items. + * {String} align + * Alignment for the items, only applicable for + * BoxItem. Choose 'center' (default), 'left', or + * 'right'. + * {String} orientation + * Orientation of the item set. Choose 'top' or + * 'bottom' (default). + * {Function} groupOrder + * A sorting function for ordering groups + * {Boolean} stack + * If true (deafult), items will be stacked on + * top of each other. + * {Number} margin.axis + * Margin between the axis and the items in pixels. + * Default is 20. + * {Number} margin.item.horizontal + * Horizontal margin between items in pixels. + * Default is 10. + * {Number} margin.item.vertical + * Vertical Margin between items in pixels. + * Default is 10. + * {Number} margin.item + * Margin between items in pixels in both horizontal + * and vertical direction. Default is 10. + * {Number} margin + * Set margin for both axis and items in pixels. + * {Number} padding + * Padding of the contents of an item in pixels. + * Must correspond with the items css. Default is 5. + * {Boolean} selectable + * If true (default), items can be selected. + * {Boolean} editable + * Set all editable options to true or false + * {Boolean} editable.updateTime + * Allow dragging an item to an other moment in time + * {Boolean} editable.updateGroup + * Allow dragging an item to an other group + * {Boolean} editable.add + * Allow creating new items on double tap + * {Boolean} editable.remove + * Allow removing items by clicking the delete button + * top right of a selected item. + * {Function(item: Item, callback: Function)} onAdd + * Callback function triggered when an item is about to be added: + * when the user double taps an empty space in the Timeline. + * {Function(item: Item, callback: Function)} onUpdate + * Callback function fired when an item is about to be updated. + * This function typically has to show a dialog where the user + * change the item. If not implemented, nothing happens. + * {Function(item: Item, callback: Function)} onMove + * Fired when an item has been moved. If not implemented, + * the move action will be accepted. + * {Function(item: Item, callback: Function)} onRemove + * Fired when an item is about to be deleted. + * If not implemented, the item will be always removed. */ - Network.prototype._getScriptPath = function() { - var scripts = document.getElementsByTagName( 'script' ); + ItemSet.prototype.setOptions = function(options) { + if (options) { + // copy all options that we know + var fields = ['type', 'align', 'orientation', 'padding', 'stack', 'selectable', 'groupOrder', 'dataAttributes', 'template','hide']; + util.selectiveExtend(fields, this.options, options); - // find script named vis.js or vis.min.js - for (var i = 0; i < scripts.length; i++) { - var src = scripts[i].src; - var match = src && /\/?vis(.min)?\.js$/.exec(src); - if (match) { - // return path without the script name - return src.substring(0, src.length - match[0].length); + if ('margin' in options) { + if (typeof options.margin === 'number') { + this.options.margin.axis = options.margin; + this.options.margin.item.horizontal = options.margin; + this.options.margin.item.vertical = options.margin; + } + else if (typeof options.margin === 'object') { + util.selectiveExtend(['axis'], this.options.margin, options.margin); + if ('item' in options.margin) { + if (typeof options.margin.item === 'number') { + this.options.margin.item.horizontal = options.margin.item; + this.options.margin.item.vertical = options.margin.item; + } + else if (typeof options.margin.item === 'object') { + util.selectiveExtend(['horizontal', 'vertical'], this.options.margin.item, options.margin.item); + } + } + } } - } - return null; - }; + if ('editable' in options) { + if (typeof options.editable === 'boolean') { + this.options.editable.updateTime = options.editable; + this.options.editable.updateGroup = options.editable; + this.options.editable.add = options.editable; + this.options.editable.remove = options.editable; + } + else if (typeof options.editable === 'object') { + util.selectiveExtend(['updateTime', 'updateGroup', 'add', 'remove'], this.options.editable, options.editable); + } + } + // callback functions + var addCallback = (function (name) { + var fn = options[name]; + if (fn) { + if (!(fn instanceof Function)) { + throw new Error('option ' + name + ' must be a function ' + name + '(item, callback)'); + } + this.options[name] = fn; + } + }).bind(this); + ['onAdd', 'onUpdate', 'onRemove', 'onMove', 'onMoving'].forEach(addCallback); - /** - * Find the center position of the network - * @private - */ - Network.prototype._getRange = function() { - var minY = 1e9, maxY = -1e9, minX = 1e9, maxX = -1e9, node; - for (var nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - node = this.nodes[nodeId]; - if (minX > (node.x)) {minX = node.x;} - if (maxX < (node.x)) {maxX = node.x;} - if (minY > (node.y)) {minY = node.y;} - if (maxY < (node.y)) {maxY = node.y;} - } - } - if (minX == 1e9 && maxX == -1e9 && minY == 1e9 && maxY == -1e9) { - minY = 0, maxY = 0, minX = 0, maxX = 0; + // force the itemSet to refresh: options like orientation and margins may be changed + this.markDirty(); } - return {minX: minX, maxX: maxX, minY: minY, maxY: maxY}; }; - /** - * @param {object} range = {minX: minX, maxX: maxX, minY: minY, maxY: maxY}; - * @returns {{x: number, y: number}} - * @private + * Mark the ItemSet dirty so it will refresh everything with next redraw */ - Network.prototype._findCenter = function(range) { - return {x: (0.5 * (range.maxX + range.minX)), - y: (0.5 * (range.maxY + range.minY))}; + ItemSet.prototype.markDirty = function() { + this.groupIds = []; + this.stackDirty = true; }; - /** - * This function zooms out to fit all data on screen based on amount of nodes - * - * @param {Boolean} [initialZoom] | zoom based on fitted formula or range, true = fitted, default = false; - * @param {Boolean} [disableStart] | If true, start is not called. + * Destroy the ItemSet */ - Network.prototype.zoomExtent = function(animationOptions, initialZoom, disableStart) { - if (initialZoom === undefined) { - initialZoom = false; - } - if (disableStart === undefined) { - disableStart = false; - } - if (animationOptions === undefined) { - animationOptions = false; - } + ItemSet.prototype.destroy = function() { + this.hide(); + this.setItems(null); + this.setGroups(null); - var range = this._getRange(); - var zoomLevel; + this.hammer = null; - if (initialZoom == true) { - var numberOfNodes = this.nodeIndices.length; - if (this.constants.smoothCurves == true) { - if (this.constants.clustering.enabled == true && - numberOfNodes >= this.constants.clustering.initialMaxNodes) { - zoomLevel = 49.07548 / (numberOfNodes + 142.05338) + 9.1444e-04; // this is obtained from fitting a dataset from 5 points with scale levels that looked good. - } - else { - zoomLevel = 12.662 / (numberOfNodes + 7.4147) + 0.0964822; // this is obtained from fitting a dataset from 5 points with scale levels that looked good. - } - } - else { - if (this.constants.clustering.enabled == true && - numberOfNodes >= this.constants.clustering.initialMaxNodes) { - zoomLevel = 77.5271985 / (numberOfNodes + 187.266146) + 4.76710517e-05; // this is obtained from fitting a dataset from 5 points with scale levels that looked good. - } - else { - zoomLevel = 30.5062972 / (numberOfNodes + 19.93597763) + 0.08413486; // this is obtained from fitting a dataset from 5 points with scale levels that looked good. - } - } + this.body = null; + this.conversion = null; + }; - // correct for larger canvasses. - var factor = Math.min(this.frame.canvas.clientWidth / 600, this.frame.canvas.clientHeight / 600); - zoomLevel *= factor; + /** + * Hide the component from the DOM + */ + ItemSet.prototype.hide = function() { + // remove the frame containing the items + if (this.dom.frame.parentNode) { + this.dom.frame.parentNode.removeChild(this.dom.frame); } - else { - var xDistance = Math.abs(range.maxX - range.minX) * 1.1; - var yDistance = Math.abs(range.maxY - range.minY) * 1.1; - var xZoomLevel = this.frame.canvas.clientWidth / xDistance; - var yZoomLevel = this.frame.canvas.clientHeight / yDistance; - - zoomLevel = (xZoomLevel <= yZoomLevel) ? xZoomLevel : yZoomLevel; + // remove the axis with dots + if (this.dom.axis.parentNode) { + this.dom.axis.parentNode.removeChild(this.dom.axis); } - if (zoomLevel > 1.0) { - zoomLevel = 1.0; + // remove the labelset containing all group labels + if (this.dom.labelSet.parentNode) { + this.dom.labelSet.parentNode.removeChild(this.dom.labelSet); } + }; + /** + * Show the component in the DOM (when not already visible). + * @return {Boolean} changed + */ + ItemSet.prototype.show = function() { + // show frame containing the items + if (!this.dom.frame.parentNode) { + this.body.dom.center.appendChild(this.dom.frame); + } - var center = this._findCenter(range); - if (disableStart == false) { - var options = {position: center, scale: zoomLevel, animation: animationOptions}; - this.moveTo(options); - this.moving = true; - this.start(); + // show axis with dots + if (!this.dom.axis.parentNode) { + this.body.dom.backgroundVertical.appendChild(this.dom.axis); } - else { - center.x *= zoomLevel; - center.y *= zoomLevel; - center.x -= 0.5 * this.frame.canvas.clientWidth; - center.y -= 0.5 * this.frame.canvas.clientHeight; - this._setScale(zoomLevel); - this._setTranslation(-center.x,-center.y); + + // show labelset containing labels + if (!this.dom.labelSet.parentNode) { + this.body.dom.left.appendChild(this.dom.labelSet); } }; - /** - * Update the this.nodeIndices with the most recent node index list - * @private + * Set selected items by their id. Replaces the current selection + * Unknown id's are silently ignored. + * @param {string[] | string} [ids] An array with zero or more id's of the items to be + * selected, or a single item id. If ids is undefined + * or an empty array, all items will be unselected. */ - Network.prototype._updateNodeIndexList = function() { - this._clearNodeIndexList(); - for (var idx in this.nodes) { - if (this.nodes.hasOwnProperty(idx)) { - this.nodeIndices.push(idx); + ItemSet.prototype.setSelection = function(ids) { + var i, ii, id, item; + + if (ids == undefined) ids = []; + if (!Array.isArray(ids)) ids = [ids]; + + // unselect currently selected items + for (i = 0, ii = this.selection.length; i < ii; i++) { + id = this.selection[i]; + item = this.items[id]; + if (item) item.unselect(); + } + + // select items + this.selection = []; + for (i = 0, ii = ids.length; i < ii; i++) { + id = ids[i]; + item = this.items[id]; + if (item) { + this.selection.push(id); + item.select(); } } }; + /** + * Get the selected items by their id + * @return {Array} ids The ids of the selected items + */ + ItemSet.prototype.getSelection = function() { + return this.selection.concat([]); + }; /** - * Set nodes and edges, and optionally options as well. - * - * @param {Object} data Object containing parameters: - * {Array | DataSet | DataView} [nodes] Array with nodes - * {Array | DataSet | DataView} [edges] Array with edges - * {String} [dot] String containing data in DOT format - * {String} [gephi] String containing data in gephi JSON format - * {Options} [options] Object with options - * @param {Boolean} [disableStart] | optional: disable the calling of the start function. + * Get the id's of the currently visible items. + * @returns {Array} The ids of the visible items */ - Network.prototype.setData = function(data, disableStart) { - if (disableStart === undefined) { - disableStart = false; - } - // we set initializing to true to ensure that the hierarchical layout is not performed until both nodes and edges are added. - this.initializing = true; + ItemSet.prototype.getVisibleItems = function() { + var range = this.body.range.getRange(); + var left = this.body.util.toScreen(range.start); + var right = this.body.util.toScreen(range.end); - if (data && data.dot && (data.nodes || data.edges)) { - throw new SyntaxError('Data must contain either parameter "dot" or ' + - ' parameter pair "nodes" and "edges", but not both.'); - } + var ids = []; + for (var groupId in this.groups) { + if (this.groups.hasOwnProperty(groupId)) { + var group = this.groups[groupId]; + var rawVisibleItems = group.visibleItems; - // set options - this.setOptions(data && data.options); - // set all data - if (data && data.dot) { - // parse DOT file - if(data && data.dot) { - var dotData = dotparser.DOTToGraph(data.dot); - this.setData(dotData); - return; - } - } - else if (data && data.gephi) { - // parse DOT file - if(data && data.gephi) { - var gephiData = gephiParser.parseGephi(data.gephi); - this.setData(gephiData); - return; + // filter the "raw" set with visibleItems into a set which is really + // visible by pixels + for (var i = 0; i < rawVisibleItems.length; i++) { + var item = rawVisibleItems[i]; + // TODO: also check whether visible vertically + if ((item.left < right) && (item.left + item.width > left)) { + ids.push(item.id); + } + } } } - else { - this._setNodes(data && data.nodes); - this._setEdges(data && data.edges); - } - this._putDataInSector(); - if (disableStart == false) { - if (this.constants.hierarchicalLayout.enabled == true) { - this._resetLevels(); - this._setupHierarchicalLayout(); - } - else { - // find a stable position or start animating to a stable position - if (this.constants.stabilize) { - this._stabilize(); - } + + return ids; + }; + + /** + * Deselect a selected item + * @param {String | Number} id + * @private + */ + ItemSet.prototype._deselect = function(id) { + var selection = this.selection; + for (var i = 0, ii = selection.length; i < ii; i++) { + if (selection[i] == id) { // non-strict comparison! + selection.splice(i, 1); + break; } - this.start(); } - this.initializing = false; }; /** - * Set options - * @param {Object} options + * Repaint the component + * @return {boolean} Returns true if the component is resized */ - Network.prototype.setOptions = function (options) { - if (options) { - var prop; + ItemSet.prototype.redraw = function() { + var margin = this.options.margin, + range = this.body.range, + asSize = util.option.asSize, + options = this.options, + orientation = options.orientation, + resized = false, + frame = this.dom.frame, + editable = options.editable.updateTime || options.editable.updateGroup; - var fields = ['nodes','edges','smoothCurves','hierarchicalLayout','clustering','navigation', - 'keyboard','dataManipulation','onAdd','onEdit','onEditEdge','onConnect','onDelete','clickToUse' - ]; - // extend all but the values in fields - util.selectiveNotDeepExtend(fields,this.constants, options); - util.selectiveNotDeepExtend(['color'],this.constants.nodes, options.nodes); - util.selectiveNotDeepExtend(['color','length'],this.constants.edges, options.edges); + // recalculate absolute position (before redrawing groups) + this.props.top = this.body.domProps.top.height + this.body.domProps.border.top; + this.props.left = this.body.domProps.left.width + this.body.domProps.border.left; - if (options.physics) { - util.mergeOptions(this.constants.physics, options.physics,'barnesHut'); - util.mergeOptions(this.constants.physics, options.physics,'repulsion'); + // update class name + frame.className = 'itemset' + (editable ? ' editable' : ''); - if (options.physics.hierarchicalRepulsion) { - this.constants.hierarchicalLayout.enabled = true; - this.constants.physics.hierarchicalRepulsion.enabled = true; - this.constants.physics.barnesHut.enabled = false; - for (prop in options.physics.hierarchicalRepulsion) { - if (options.physics.hierarchicalRepulsion.hasOwnProperty(prop)) { - this.constants.physics.hierarchicalRepulsion[prop] = options.physics.hierarchicalRepulsion[prop]; - } - } - } - } + // reorder the groups (if needed) + resized = this._orderGroups() || resized; - if (options.onAdd) {this.triggerFunctions.add = options.onAdd;} - if (options.onEdit) {this.triggerFunctions.edit = options.onEdit;} - if (options.onEditEdge) {this.triggerFunctions.editEdge = options.onEditEdge;} - if (options.onConnect) {this.triggerFunctions.connect = options.onConnect;} - if (options.onDelete) {this.triggerFunctions.del = options.onDelete;} + // check whether zoomed (in that case we need to re-stack everything) + // TODO: would be nicer to get this as a trigger from Range + var visibleInterval = range.end - range.start; + var zoomed = (visibleInterval != this.lastVisibleInterval) || (this.props.width != this.props.lastWidth); + if (zoomed) this.stackDirty = true; + this.lastVisibleInterval = visibleInterval; + this.props.lastWidth = this.props.width; - util.mergeOptions(this.constants, options,'smoothCurves'); - util.mergeOptions(this.constants, options,'hierarchicalLayout'); - util.mergeOptions(this.constants, options,'clustering'); - util.mergeOptions(this.constants, options,'navigation'); - util.mergeOptions(this.constants, options,'keyboard'); - util.mergeOptions(this.constants, options,'dataManipulation'); + var restack = this.stackDirty; + var firstGroup = this._firstGroup(); + var firstMargin = { + item: margin.item, + axis: margin.axis + }; + var nonFirstMargin = { + item: margin.item, + axis: margin.item.vertical / 2 + }; + var height = 0; + var minHeight = margin.axis + margin.item.vertical; + // redraw the background group + this.groups[BACKGROUND].redraw(range, nonFirstMargin, restack); - if (options.dataManipulation) { - this.editMode = this.constants.dataManipulation.initiallyVisible; - } + // redraw all regular groups + util.forEach(this.groups, function (group) { + var groupMargin = (group == firstGroup) ? firstMargin : nonFirstMargin; + var groupResized = group.redraw(range, groupMargin, restack); + resized = groupResized || resized; + height += group.height; + }); + height = Math.max(height, minHeight); + this.stackDirty = false; + // update frame height + frame.style.height = asSize(height); - // TODO: work out these options and document them - if (options.edges) { - if (options.edges.color !== undefined) { - if (util.isString(options.edges.color)) { - this.constants.edges.color = {}; - this.constants.edges.color.color = options.edges.color; - this.constants.edges.color.highlight = options.edges.color; - this.constants.edges.color.hover = options.edges.color; - } - else { - if (options.edges.color.color !== undefined) {this.constants.edges.color.color = options.edges.color.color;} - if (options.edges.color.highlight !== undefined) {this.constants.edges.color.highlight = options.edges.color.highlight;} - if (options.edges.color.hover !== undefined) {this.constants.edges.color.hover = options.edges.color.hover;} - } - } + // calculate actual size + this.props.width = frame.offsetWidth; + this.props.height = height; + + // reposition axis + this.dom.axis.style.top = asSize((orientation == 'top') ? + (this.body.domProps.top.height + this.body.domProps.border.top) : + (this.body.domProps.top.height + this.body.domProps.centerContainer.height)); + this.dom.axis.style.left = '0'; + + // check if this component is resized + resized = this._isResized() || resized; - if (!options.edges.fontColor) { - if (options.edges.color !== undefined) { - if (util.isString(options.edges.color)) {this.constants.edges.fontColor = options.edges.color;} - else if (options.edges.color.color !== undefined) {this.constants.edges.fontColor = options.edges.color.color;} - } - } - } + return resized; + }; - if (options.nodes) { - if (options.nodes.color) { - var newColorObj = util.parseColor(options.nodes.color); - this.constants.nodes.color.background = newColorObj.background; - this.constants.nodes.color.border = newColorObj.border; - this.constants.nodes.color.highlight.background = newColorObj.highlight.background; - this.constants.nodes.color.highlight.border = newColorObj.highlight.border; - this.constants.nodes.color.hover.background = newColorObj.hover.background; - this.constants.nodes.color.hover.border = newColorObj.hover.border; - } - } - if (options.groups) { - for (var groupname in options.groups) { - if (options.groups.hasOwnProperty(groupname)) { - var group = options.groups[groupname]; - this.groups.add(groupname, group); - } - } - } + /** + * Get the first group, aligned with the axis + * @return {Group | null} firstGroup + * @private + */ + ItemSet.prototype._firstGroup = function() { + var firstGroupIndex = (this.options.orientation == 'top') ? 0 : (this.groupIds.length - 1); + var firstGroupId = this.groupIds[firstGroupIndex]; + var firstGroup = this.groups[firstGroupId] || this.groups[UNGROUPED]; - if (options.tooltip) { - for (prop in options.tooltip) { - if (options.tooltip.hasOwnProperty(prop)) { - this.constants.tooltip[prop] = options.tooltip[prop]; + return firstGroup || null; + }; + + /** + * Create or delete the group holding all ungrouped items. This group is used when + * there are no groups specified. + * @protected + */ + ItemSet.prototype._updateUngrouped = function() { + var ungrouped = this.groups[UNGROUPED]; + var background = this.groups[BACKGROUND]; + var item, itemId; + + if (this.groupsData) { + // remove the group holding all ungrouped items + if (ungrouped) { + ungrouped.hide(); + delete this.groups[UNGROUPED]; + + for (itemId in this.items) { + if (this.items.hasOwnProperty(itemId)) { + item = this.items[itemId]; + item.parent && item.parent.remove(item); + var groupId = this._getGroupId(item.data); + var group = this.groups[groupId]; + group && group.add(item) || item.hide(); } } - if (options.tooltip.color) { - this.constants.tooltip.color = util.parseColor(options.tooltip.color); - } } + } + else { + // create a group holding all (unfiltered) items + if (!ungrouped) { + var id = null; + var data = null; + ungrouped = new Group(id, data, this); + this.groups[UNGROUPED] = ungrouped; - if ('clickToUse' in options) { - if (options.clickToUse) { - this.activator = new Activator(this.frame); - this.activator.on('change', this._createKeyBinds.bind(this)); - } - else { - if (this.activator) { - this.activator.destroy(); - delete this.activator; + for (itemId in this.items) { + if (this.items.hasOwnProperty(itemId)) { + item = this.items[itemId]; + ungrouped.add(item); } } - } - if (options.labels) { - throw new Error('Option "labels" is deprecated. Use options "locale" and "locales" instead.'); + ungrouped.show(); } } - - // (Re)loading the mixins that can be enabled or disabled in the options. - // load the force calculation functions, grouped under the physics system. - this._loadPhysicsSystem(); - // load the navigation system. - this._loadNavigationControls(); - // load the data manipulation system - this._loadManipulationSystem(); - // configure the smooth curves - this._configureSmoothCurves(); - - - // bind keys. If disabled, this will not do anything; - this._createKeyBinds(); - this.setSize(this.constants.width, this.constants.height); - this.moving = true; - this.start(); }; - - /** - * Create the main frame for the Network. - * This function is executed once when a Network object is created. The frame - * contains a canvas, and this canvas contains all objects like the axis and - * nodes. - * @private + * Get the element for the labelset + * @return {HTMLElement} labelSet */ - Network.prototype._create = function () { - // remove all elements from the container element. - while (this.containerElement.hasChildNodes()) { - this.containerElement.removeChild(this.containerElement.firstChild); - } + ItemSet.prototype.getLabelSet = function() { + return this.dom.labelSet; + }; - this.frame = document.createElement('div'); - this.frame.className = 'vis network-frame'; - this.frame.style.position = 'relative'; - this.frame.style.overflow = 'hidden'; + /** + * Set items + * @param {vis.DataSet | null} items + */ + ItemSet.prototype.setItems = function(items) { + var me = this, + ids, + oldItemsData = this.itemsData; + // replace the dataset + if (!items) { + this.itemsData = null; + } + else if (items instanceof DataSet || items instanceof DataView) { + this.itemsData = items; + } + else { + throw new TypeError('Data must be an instance of DataSet or DataView'); + } - ////////////////////////////////////////////////////////////////// + if (oldItemsData) { + // unsubscribe from old dataset + util.forEach(this.itemListeners, function (callback, event) { + oldItemsData.off(event, callback); + }); - this.frame.canvas = document.createElement("canvas"); + // remove all drawn items + ids = oldItemsData.getIds(); + this._onRemove(ids); + } - this.frame.canvas.style.position = 'relative'; - this.frame.appendChild(this.frame.canvas); + if (this.itemsData) { + // subscribe to new dataset + var id = this.id; + util.forEach(this.itemListeners, function (callback, event) { + me.itemsData.on(event, callback, id); + }); + // add all new items + ids = this.itemsData.getIds(); + this._onAdd(ids); - if (!this.frame.canvas.getContext) { - var noCanvas = document.createElement( 'DIV' ); - noCanvas.style.color = 'red'; - noCanvas.style.fontWeight = 'bold' ; - noCanvas.style.padding = '10px'; - noCanvas.innerHTML = 'Error: your browser does not support HTML canvas'; - this.frame.canvas.appendChild(noCanvas); + // update the group holding all ungrouped items + this._updateUngrouped(); } - else { + }; - var ctx = this.frame.canvas.getContext("2d"); + /** + * Get the current items + * @returns {vis.DataSet | null} + */ + ItemSet.prototype.getItems = function() { + return this.itemsData; + }; - this.pixelRatio = (window.devicePixelRatio || 1) / (ctx.webkitBackingStorePixelRatio || - ctx.mozBackingStorePixelRatio || - ctx.msBackingStorePixelRatio || - ctx.oBackingStorePixelRatio || - ctx.backingStorePixelRatio || 1); + /** + * Set groups + * @param {vis.DataSet} groups + */ + ItemSet.prototype.setGroups = function(groups) { + var me = this, + ids; + // unsubscribe from current dataset + if (this.groupsData) { + util.forEach(this.groupListeners, function (callback, event) { + me.groupsData.unsubscribe(event, callback); + }); + // remove all drawn groups + ids = this.groupsData.getIds(); + this.groupsData = null; + this._onRemoveGroups(ids); // note: this will cause a redraw + } - this.frame.canvas.getContext("2d").setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0); + // replace the dataset + if (!groups) { + this.groupsData = null; + } + else if (groups instanceof DataSet || groups instanceof DataView) { + this.groupsData = groups; + } + else { + throw new TypeError('Data must be an instance of DataSet or DataView'); } - ////////////////////////////////////////////////////////////////// + if (this.groupsData) { + // subscribe to new dataset + var id = this.id; + util.forEach(this.groupListeners, function (callback, event) { + me.groupsData.on(event, callback, id); + }); + // draw all ms + ids = this.groupsData.getIds(); + this._onAddGroups(ids); + } - var me = this; - this.drag = {}; - this.pinch = {}; - this.hammer = Hammer(this.frame.canvas, { - prevent_default: true - }); - this.hammer.on('tap', me._onTap.bind(me) ); - this.hammer.on('doubletap', me._onDoubleTap.bind(me) ); - this.hammer.on('hold', me._onHold.bind(me) ); - this.hammer.on('pinch', me._onPinch.bind(me) ); - this.hammer.on('touch', me._onTouch.bind(me) ); - this.hammer.on('dragstart', me._onDragStart.bind(me) ); - this.hammer.on('drag', me._onDrag.bind(me) ); - this.hammer.on('dragend', me._onDragEnd.bind(me) ); - this.hammer.on('mousewheel',me._onMouseWheel.bind(me) ); - this.hammer.on('DOMMouseScroll',me._onMouseWheel.bind(me) ); // for FF - this.hammer.on('mousemove', me._onMouseMoveTitle.bind(me) ); + // update the group holding all ungrouped items + this._updateUngrouped(); - this.hammerFrame = Hammer(this.frame, { - prevent_default: true - }); - this.hammerFrame.on('release', me._onRelease.bind(me) ); + // update the order of all items in each group + this._order(); - // add the frame to the container element - this.containerElement.appendChild(this.frame); + this.body.emitter.emit('change', {queue: true}); + }; + /** + * Get the current groups + * @returns {vis.DataSet | null} groups + */ + ItemSet.prototype.getGroups = function() { + return this.groupsData; }; + /** + * Remove an item by its id + * @param {String | Number} id + */ + ItemSet.prototype.removeItem = function(id) { + var item = this.itemsData.get(id), + dataset = this.itemsData.getDataSet(); + + if (item) { + // confirm deletion + this.options.onRemove(item, function (item) { + if (item) { + // remove by id here, it is possible that an item has no id defined + // itself, so better not delete by the item itself + dataset.remove(id); + } + }); + } + }; /** - * Binding the keys for keyboard navigation. These functions are defined in the NavigationMixin + * Get the time of an item based on it's data and options.type + * @param {Object} itemData + * @returns {string} Returns the type * @private */ - Network.prototype._createKeyBinds = function() { - var me = this; - if (this.keycharm !== undefined) { - this.keycharm.destroy(); - } - this.keycharm = keycharm(); + ItemSet.prototype._getType = function (itemData) { + return itemData.type || this.options.type || (itemData.end ? 'range' : 'box'); + }; - this.keycharm.reset(); - if (this.constants.keyboard.enabled && this.isActive()) { - this.keycharm.bind("up", this._moveUp.bind(me) , "keydown"); - this.keycharm.bind("up", this._yStopMoving.bind(me), "keyup"); - this.keycharm.bind("down", this._moveDown.bind(me) , "keydown"); - this.keycharm.bind("down", this._yStopMoving.bind(me), "keyup"); - this.keycharm.bind("left", this._moveLeft.bind(me) , "keydown"); - this.keycharm.bind("left", this._xStopMoving.bind(me), "keyup"); - this.keycharm.bind("right",this._moveRight.bind(me), "keydown"); - this.keycharm.bind("right",this._xStopMoving.bind(me), "keyup"); - this.keycharm.bind("=", this._zoomIn.bind(me), "keydown"); - this.keycharm.bind("=", this._stopZoom.bind(me), "keyup"); - this.keycharm.bind("num+", this._zoomIn.bind(me), "keydown"); - this.keycharm.bind("num+", this._stopZoom.bind(me), "keyup"); - this.keycharm.bind("num-", this._zoomOut.bind(me), "keydown"); - this.keycharm.bind("num-", this._stopZoom.bind(me), "keyup"); - this.keycharm.bind("-", this._zoomOut.bind(me), "keydown"); - this.keycharm.bind("-", this._stopZoom.bind(me), "keyup"); - this.keycharm.bind("[", this._zoomIn.bind(me), "keydown"); - this.keycharm.bind("[", this._stopZoom.bind(me), "keyup"); - this.keycharm.bind("]", this._zoomOut.bind(me), "keydown"); - this.keycharm.bind("]", this._stopZoom.bind(me), "keyup"); - this.keycharm.bind("pageup",this._zoomIn.bind(me), "keydown"); - this.keycharm.bind("pageup",this._stopZoom.bind(me), "keyup"); - this.keycharm.bind("pagedown",this._zoomOut.bind(me),"keydown"); - this.keycharm.bind("pagedown",this._stopZoom.bind(me), "keyup"); + /** + * Get the group id for an item + * @param {Object} itemData + * @returns {string} Returns the groupId + * @private + */ + ItemSet.prototype._getGroupId = function (itemData) { + var type = this._getType(itemData); + if (type == 'background' && itemData.group == undefined) { + return BACKGROUND; } - - if (this.constants.dataManipulation.enabled == true) { - this.keycharm.bind("esc",this._createManipulatorBar.bind(me)); - this.keycharm.bind("delete",this._deleteSelected.bind(me)); + else { + return this.groupsData ? itemData.group : UNGROUPED; } }; /** - * Get the pointer location from a touch location - * @param {{pageX: Number, pageY: Number}} touch - * @return {{x: Number, y: Number}} pointer - * @private + * Handle updated items + * @param {Number[]} ids + * @protected */ - Network.prototype._getPointer = function (touch) { - return { - x: touch.pageX - util.getAbsoluteLeft(this.frame.canvas), - y: touch.pageY - util.getAbsoluteTop(this.frame.canvas) - }; + ItemSet.prototype._onUpdate = function(ids) { + var me = this; + + ids.forEach(function (id) { + var itemData = me.itemsData.get(id, me.itemOptions); + var item = me.items[id]; + var type = me._getType(itemData); + + var constructor = ItemSet.types[type]; + + if (item) { + // update item + if (!constructor || !(item instanceof constructor)) { + // item type has changed, delete the item and recreate it + me._removeItem(item); + item = null; + } + else { + me._updateItem(item, itemData); + } + } + + if (!item) { + // create item + if (constructor) { + item = new constructor(itemData, me.conversion, me.options); + item.id = id; // TODO: not so nice setting id afterwards + me._addItem(item); + } + else if (type == 'rangeoverflow') { + // TODO: deprecated since version 2.1.0 (or 3.0.0?). cleanup some day + throw new TypeError('Item type "rangeoverflow" is deprecated. Use css styling instead: ' + + '.vis.timeline .item.range .content {overflow: visible;}'); + } + else { + throw new TypeError('Unknown item type "' + type + '"'); + } + } + }); + + this._order(); + this.stackDirty = true; // force re-stacking of all items next redraw + this.body.emitter.emit('change', {queue: true}); }; /** - * On start of a touch gesture, store the pointer - * @param event - * @private + * Handle added items + * @param {Number[]} ids + * @protected */ - Network.prototype._onTouch = function (event) { - if (new Date().valueOf() - this.touchTime > 100) { - this.drag.pointer = this._getPointer(event.gesture.center); - this.drag.pinched = false; - this.pinch.scale = this._getScale(); + ItemSet.prototype._onAdd = ItemSet.prototype._onUpdate; - // to avoid double fireing of this event because we have two hammer instances. (on canvas and on frame) - this.touchTime = new Date().valueOf(); + /** + * Handle removed items + * @param {Number[]} ids + * @protected + */ + ItemSet.prototype._onRemove = function(ids) { + var count = 0; + var me = this; + ids.forEach(function (id) { + var item = me.items[id]; + if (item) { + count++; + me._removeItem(item); + } + }); - this._handleTouch(this.drag.pointer); + if (count) { + // update order + this._order(); + this.stackDirty = true; // force re-stacking of all items next redraw + this.body.emitter.emit('change', {queue: true}); } }; /** - * handle drag start event + * Update the order of item in all groups * @private */ - Network.prototype._onDragStart = function () { - this._handleDragStart(); + ItemSet.prototype._order = function() { + // reorder the items in all groups + // TODO: optimization: only reorder groups affected by the changed items + util.forEach(this.groups, function (group) { + group.order(); + }); }; - /** - * This function is called by _onDragStart. - * It is separated out because we can then overload it for the datamanipulation system. - * + * Handle updated groups + * @param {Number[]} ids * @private */ - Network.prototype._handleDragStart = function() { - var drag = this.drag; - var node = this._getNodeAt(drag.pointer); - // note: drag.pointer is set in _onTouch to get the initial touch location - - drag.dragging = true; - drag.selection = []; - drag.translation = this._getTranslation(); - drag.nodeId = null; - this.draggingNodes = false; + ItemSet.prototype._onUpdateGroups = function(ids) { + this._onAddGroups(ids); + }; - if (node != null && this.constants.dragNodes == true) { - this.draggingNodes = true; - drag.nodeId = node.id; - // select the clicked node if not yet selected - if (!node.isSelected()) { - this._selectObject(node,false); - } + /** + * Handle changed groups (added or updated) + * @param {Number[]} ids + * @private + */ + ItemSet.prototype._onAddGroups = function(ids) { + var me = this; - this.emit("dragStart",{nodeIds:this.getSelection().nodes}); + ids.forEach(function (id) { + var groupData = me.groupsData.get(id); + var group = me.groups[id]; - // create an array with the selected nodes and their original location and status - for (var objectId in this.selectionObj.nodes) { - if (this.selectionObj.nodes.hasOwnProperty(objectId)) { - var object = this.selectionObj.nodes[objectId]; - var s = { - id: object.id, - node: object, + if (!group) { + // check for reserved ids + if (id == UNGROUPED || id == BACKGROUND) { + throw new Error('Illegal group id. ' + id + ' is a reserved id.'); + } - // store original x, y, xFixed and yFixed, make the node temporarily Fixed - x: object.x, - y: object.y, - xFixed: object.xFixed, - yFixed: object.yFixed - }; + var groupOptions = Object.create(me.options); + util.extend(groupOptions, { + height: null + }); - object.xFixed = true; - object.yFixed = true; + group = new Group(id, groupData, me); + me.groups[id] = group; - drag.selection.push(s); + // add items with this groupId to the new group + for (var itemId in me.items) { + if (me.items.hasOwnProperty(itemId)) { + var item = me.items[itemId]; + if (item.data.group == id) { + group.add(item); + } + } } - } - } - }; + group.order(); + group.show(); + } + else { + // update group + group.setData(groupData); + } + }); - /** - * handle drag event - * @private - */ - Network.prototype._onDrag = function (event) { - this._handleOnDrag(event) + this.body.emitter.emit('change', {queue: true}); }; - /** - * This function is called by _onDrag. - * It is separated out because we can then overload it for the datamanipulation system. - * + * Handle removed groups + * @param {Number[]} ids * @private */ - Network.prototype._handleOnDrag = function(event) { - if (this.drag.pinched) { - return; - } - - // remove the focus on node if it is focussed on by the focusOnNode - this.releaseNode(); + ItemSet.prototype._onRemoveGroups = function(ids) { + var groups = this.groups; + ids.forEach(function (id) { + var group = groups[id]; - var pointer = this._getPointer(event.gesture.center); - var me = this; - var drag = this.drag; - var selection = drag.selection; - if (selection && selection.length && this.constants.dragNodes == true) { - // calculate delta's and new location - var deltaX = pointer.x - drag.pointer.x; - var deltaY = pointer.y - drag.pointer.y; + if (group) { + group.hide(); + delete groups[id]; + } + }); - // update position of all selected nodes - selection.forEach(function (s) { - var node = s.node; + this.markDirty(); - if (!s.xFixed) { - node.x = me._XconvertDOMtoCanvas(me._XconvertCanvasToDOM(s.x) + deltaX); - } + this.body.emitter.emit('change', {queue: true}); + }; - if (!s.yFixed) { - node.y = me._YconvertDOMtoCanvas(me._YconvertCanvasToDOM(s.y) + deltaY); - } + /** + * Reorder the groups if needed + * @return {boolean} changed + * @private + */ + ItemSet.prototype._orderGroups = function () { + if (this.groupsData) { + // reorder the groups + var groupIds = this.groupsData.getIds({ + order: this.options.groupOrder }); + var changed = !util.equalArray(groupIds, this.groupIds); + if (changed) { + // hide all groups, removes them from the DOM + var groups = this.groups; + groupIds.forEach(function (groupId) { + groups[groupId].hide(); + }); + + // show the groups again, attach them to the DOM in correct order + groupIds.forEach(function (groupId) { + groups[groupId].show(); + }); - // start _animationStep if not yet running - if (!this.moving) { - this.moving = true; - this.start(); + this.groupIds = groupIds; } + + return changed; } else { - if (this.constants.dragNetwork == true) { - // move the network - var diffX = pointer.x - this.drag.pointer.x; - var diffY = pointer.y - this.drag.pointer.y; - - this._setTranslation( - this.drag.translation.x + diffX, - this.drag.translation.y + diffY - ); - this._redraw(); - // this.moving = true; - // this.start(); - } + return false; } }; /** - * handle drag start event + * Add a new item + * @param {Item} item * @private */ - Network.prototype._onDragEnd = function (event) { - this._handleDragEnd(event); - }; - + ItemSet.prototype._addItem = function(item) { + this.items[item.id] = item; - Network.prototype._handleDragEnd = function(event) { - this.drag.dragging = false; - var selection = this.drag.selection; - if (selection && selection.length) { - selection.forEach(function (s) { - // restore original xFixed and yFixed - s.node.xFixed = s.xFixed; - s.node.yFixed = s.yFixed; - }); - this.moving = true; - this.start(); - } - else { - this._redraw(); - } - if (this.draggingNodes == false) { - this.emit("dragEnd",{nodeIds:[]}); - } - else { - this.emit("dragEnd",{nodeIds:this.getSelection().nodes}); - } + // add to group + var groupId = this._getGroupId(item.data); + var group = this.groups[groupId]; + if (group) group.add(item); + }; - } /** - * handle tap/click event: select/unselect a node + * Update an existing item + * @param {Item} item + * @param {Object} itemData * @private */ - Network.prototype._onTap = function (event) { - var pointer = this._getPointer(event.gesture.center); - this.pointerPosition = pointer; - this._handleTap(pointer); + ItemSet.prototype._updateItem = function(item, itemData) { + var oldGroupId = item.data.group; - }; + // update the items data (will redraw the item when displayed) + item.setData(itemData); + + // update group + if (oldGroupId != item.data.group) { + var oldGroup = this.groups[oldGroupId]; + if (oldGroup) oldGroup.remove(item); + var groupId = this._getGroupId(item.data); + var group = this.groups[groupId]; + if (group) group.add(item); + } + }; /** - * handle doubletap event + * Delete an item from the ItemSet: remove it from the DOM, from the map + * with items, and from the map with visible items, and from the selection + * @param {Item} item * @private */ - Network.prototype._onDoubleTap = function (event) { - var pointer = this._getPointer(event.gesture.center); - this._handleDoubleTap(pointer); - }; + ItemSet.prototype._removeItem = function(item) { + // remove from DOM + item.hide(); + // remove from items + delete this.items[item.id]; - /** - * handle long tap event: multi select nodes - * @private - */ - Network.prototype._onHold = function (event) { - var pointer = this._getPointer(event.gesture.center); - this.pointerPosition = pointer; - this._handleOnHold(pointer); + // remove from selection + var index = this.selection.indexOf(item.id); + if (index != -1) this.selection.splice(index, 1); + + // remove from group + item.parent && item.parent.remove(item); }; /** - * handle the release of the screen - * + * Create an array containing all items being a range (having an end date) + * @param array + * @returns {Array} * @private */ - Network.prototype._onRelease = function (event) { - var pointer = this._getPointer(event.gesture.center); - this._handleOnRelease(pointer); + ItemSet.prototype._constructByEndArray = function(array) { + var endArray = []; + + for (var i = 0; i < array.length; i++) { + if (array[i] instanceof RangeItem) { + endArray.push(array[i]); + } + } + return endArray; }; /** - * Handle pinch event - * @param event + * Register the clicked item on touch, before dragStart is initiated. + * + * dragStart is initiated from a mousemove event, which can have left the item + * already resulting in an item == null + * + * @param {Event} event * @private */ - Network.prototype._onPinch = function (event) { - var pointer = this._getPointer(event.gesture.center); - - this.drag.pinched = true; - if (!('scale' in this.pinch)) { - this.pinch.scale = 1; - } - - // TODO: enabled moving while pinching? - var scale = this.pinch.scale * event.gesture.scale; - this._zoom(scale, pointer) + ItemSet.prototype._onTouch = function (event) { + // store the touched item, used in _onDragStart + this.touchParams.item = ItemSet.itemFromTarget(event); }; /** - * Zoom the network in or out - * @param {Number} scale a number around 1, and between 0.01 and 10 - * @param {{x: Number, y: Number}} pointer Position on screen - * @return {Number} appliedScale scale is limited within the boundaries + * Start dragging the selected events + * @param {Event} event * @private */ - Network.prototype._zoom = function(scale, pointer) { - if (this.constants.zoomable == true) { - var scaleOld = this._getScale(); - if (scale < 0.00001) { - scale = 0.00001; - } - if (scale > 10) { - scale = 10; - } + ItemSet.prototype._onDragStart = function (event) { + if (!this.options.editable.updateTime && !this.options.editable.updateGroup) { + return; + } - var preScaleDragPointer = null; - if (this.drag !== undefined) { - if (this.drag.dragging == true) { - preScaleDragPointer = this.DOMtoCanvas(this.drag.pointer); - } - } - // + this.frame.canvas.clientHeight / 2 - var translation = this._getTranslation(); + var item = this.touchParams.item || null; + var me = this; + var props; - var scaleFrac = scale / scaleOld; - var tx = (1 - scaleFrac) * pointer.x + translation.x * scaleFrac; - var ty = (1 - scaleFrac) * pointer.y + translation.y * scaleFrac; + if (item && item.selected) { + var dragLeftItem = event.target.dragLeftItem; + var dragRightItem = event.target.dragRightItem; - this.areaCenter = {"x" : this._XconvertDOMtoCanvas(pointer.x), - "y" : this._YconvertDOMtoCanvas(pointer.y)}; + if (dragLeftItem) { + props = { + item: dragLeftItem, + initialX: event.gesture.center.clientX + }; - this._setScale(scale); - this._setTranslation(tx, ty); - this.updateClustersDefault(); + if (me.options.editable.updateTime) { + props.start = item.data.start.valueOf(); + } + if (me.options.editable.updateGroup) { + if ('group' in item.data) props.group = item.data.group; + } - if (preScaleDragPointer != null) { - var postScaleDragPointer = this.canvasToDOM(preScaleDragPointer); - this.drag.pointer.x = postScaleDragPointer.x; - this.drag.pointer.y = postScaleDragPointer.y; + this.touchParams.itemProps = [props]; } + else if (dragRightItem) { + props = { + item: dragRightItem, + initialX: event.gesture.center.clientX + }; - this._redraw(); + if (me.options.editable.updateTime) { + props.end = item.data.end.valueOf(); + } + if (me.options.editable.updateGroup) { + if ('group' in item.data) props.group = item.data.group; + } - if (scaleOld < scale) { - this.emit("zoom", {direction:"+"}); + this.touchParams.itemProps = [props]; } else { - this.emit("zoom", {direction:"-"}); + this.touchParams.itemProps = this.getSelection().map(function (id) { + var item = me.items[id]; + var props = { + item: item, + initialX: event.gesture.center.clientX + }; + + if (me.options.editable.updateTime) { + if ('start' in item.data) props.start = item.data.start.valueOf(); + if ('end' in item.data) props.end = item.data.end.valueOf(); + } + if (me.options.editable.updateGroup) { + if ('group' in item.data) props.group = item.data.group; + } + + return props; + }); } - return scale; + event.stopPropagation(); } }; - /** - * Event handler for mouse wheel event, used to zoom the timeline - * See http://adomas.org/javascript-mouse-wheel/ - * https://github.com/EightMedia/hammer.js/issues/256 - * @param {MouseEvent} event + * Drag selected items + * @param {Event} event * @private */ - Network.prototype._onMouseWheel = function(event) { - // retrieve delta - var delta = 0; - if (event.wheelDelta) { /* IE/Opera. */ - delta = event.wheelDelta/120; - } else if (event.detail) { /* Mozilla case. */ - // In Mozilla, sign of delta is different than in IE. - // Also, delta is multiple of 3. - delta = -event.detail/3; - } + ItemSet.prototype._onDrag = function (event) { + event.preventDefault() - // If delta is nonzero, handle it. - // Basically, delta is now positive if wheel was scrolled up, - // and negative, if wheel was scrolled down. - if (delta) { + if (this.touchParams.itemProps) { + var me = this; + var snap = this.body.util.snap || null; + var xOffset = this.body.dom.root.offsetLeft + this.body.domProps.left.width; - // calculate the new scale - var scale = this._getScale(); - var zoom = delta / 10; - if (delta < 0) { - zoom = zoom / (1 - zoom); - } - scale *= (1 + zoom); + // move + this.touchParams.itemProps.forEach(function (props) { + var newProps = {}; + var current = me.body.util.toTime(event.gesture.center.clientX - xOffset); + var initial = me.body.util.toTime(props.initialX - xOffset); + var offset = current - initial; - // calculate the pointer location - var gesture = hammerUtil.fakeGesture(this, event); - var pointer = this._getPointer(gesture.center); + if ('start' in props) { + var start = new Date(props.start + offset); + newProps.start = snap ? snap(start) : start; + } - // apply the new scale - this._zoom(scale, pointer); - } + if ('end' in props) { + var end = new Date(props.end + offset); + newProps.end = snap ? snap(end) : end; + } - // Prevent default actions caused by mouse wheel. - event.preventDefault(); + if ('group' in props) { + // drag from one group to another + var group = ItemSet.groupFromTarget(event); + newProps.group = group && group.groupId; + } + + // confirm moving the item + var itemData = util.extend({}, props.item.data, newProps); + me.options.onMoving(itemData, function (itemData) { + if (itemData) { + me._updateItemProps(props.item, itemData); + } + }); + }); + + this.stackDirty = true; // force re-stacking of all items next redraw + this.body.emitter.emit('change'); + + event.stopPropagation(); + } }; + /** + * Update an items properties + * @param {Item} item + * @param {Object} props Can contain properties start, end, and group. + * @private + */ + ItemSet.prototype._updateItemProps = function(item, props) { + // TODO: copy all properties from props to item? (also new ones) + if ('start' in props) item.data.start = props.start; + if ('end' in props) item.data.end = props.end; + if ('group' in props && item.data.group != props.group) { + this._moveToGroup(item, props.group) + } + }; /** - * Mouse move handler for checking whether the title moves over a node with a title. - * @param {Event} event + * Move an item to another group + * @param {Item} item + * @param {String | Number} groupId * @private */ - Network.prototype._onMouseMoveTitle = function (event) { - var gesture = hammerUtil.fakeGesture(this, event); - var pointer = this._getPointer(gesture.center); + ItemSet.prototype._moveToGroup = function(item, groupId) { + var group = this.groups[groupId]; + if (group && group.groupId != item.data.group) { + var oldGroup = item.parent; + oldGroup.remove(item); + oldGroup.order(); + group.add(item); + group.order(); - // check if the previously selected node is still selected - if (this.popupObj) { - this._checkHidePopup(pointer); + item.data.group = group.groupId; } + }; - // start a timeout that will check if the mouse is positioned above - // an element - var me = this; - var checkShow = function() { - me._checkShowPopup(pointer); - }; - if (this.popupTimer) { - clearInterval(this.popupTimer); // stop any running calculationTimer - } - if (!this.drag.dragging) { - this.popupTimer = setTimeout(checkShow, this.constants.tooltip.delay); - } + /** + * End of dragging selected items + * @param {Event} event + * @private + */ + ItemSet.prototype._onDragEnd = function (event) { + event.preventDefault() + if (this.touchParams.itemProps) { + // prepare a change set for the changed items + var changes = [], + me = this, + dataset = this.itemsData.getDataSet(); - /** - * Adding hover highlights - */ - if (this.constants.hover == true) { - // removing all hover highlights - for (var edgeId in this.hoverObj.edges) { - if (this.hoverObj.edges.hasOwnProperty(edgeId)) { - this.hoverObj.edges[edgeId].hover = false; - delete this.hoverObj.edges[edgeId]; - } - } + var itemProps = this.touchParams.itemProps ; + this.touchParams.itemProps = null; + itemProps.forEach(function (props) { + var id = props.item.id, + itemData = me.itemsData.get(id, me.itemOptions); - // adding hover highlights - var obj = this._getNodeAt(pointer); - if (obj == null) { - obj = this._getEdgeAt(pointer); - } - if (obj != null) { - this._hoverObject(obj); - } + var changed = false; + if ('start' in props.item.data) { + changed = (props.start != props.item.data.start.valueOf()); + itemData.start = util.convert(props.item.data.start, + dataset._options.type && dataset._options.type.start || 'Date'); + } + if ('end' in props.item.data) { + changed = changed || (props.end != props.item.data.end.valueOf()); + itemData.end = util.convert(props.item.data.end, + dataset._options.type && dataset._options.type.end || 'Date'); + } + if ('group' in props.item.data) { + changed = changed || (props.group != props.item.data.group); + itemData.group = props.item.data.group; + } - // removing all node hover highlights except for the selected one. - for (var nodeId in this.hoverObj.nodes) { - if (this.hoverObj.nodes.hasOwnProperty(nodeId)) { - if (obj instanceof Node && obj.id != nodeId || obj instanceof Edge || obj == null) { - this._blurObject(this.hoverObj.nodes[nodeId]); - delete this.hoverObj.nodes[nodeId]; - } + // only apply changes when start or end is actually changed + if (changed) { + me.options.onMove(itemData, function (itemData) { + if (itemData) { + // apply changes + itemData[dataset._fieldId] = id; // ensure the item contains its id (can be undefined) + changes.push(itemData); + } + else { + // restore original values + me._updateItemProps(props.item, props); + + me.stackDirty = true; // force re-stacking of all items next redraw + me.body.emitter.emit('change'); + } + }); } + }); + + // apply the changes to the data (if there are changes) + if (changes.length) { + dataset.update(changes); } - this.redraw(); + + event.stopPropagation(); } }; /** - * Check if there is an element on the given position in the network - * (a node or edge). If so, and if this element has a title, - * show a popup window with its title. - * - * @param {{x:Number, y:Number}} pointer + * Handle selecting/deselecting an item when tapping it + * @param {Event} event * @private */ - Network.prototype._checkShowPopup = function (pointer) { - var obj = { - left: this._XconvertDOMtoCanvas(pointer.x), - top: this._YconvertDOMtoCanvas(pointer.y), - right: this._XconvertDOMtoCanvas(pointer.x), - bottom: this._YconvertDOMtoCanvas(pointer.y) - }; - - var id; - var lastPopupNode = this.popupObj; - - if (this.popupObj == undefined) { - // search the nodes for overlap, select the top one in case of multiple nodes - var nodes = this.nodes; - for (id in nodes) { - if (nodes.hasOwnProperty(id)) { - var node = nodes[id]; - if (node.getTitle() !== undefined && node.isOverlappingWith(obj)) { - this.popupObj = node; - break; - } - } - } - } + ItemSet.prototype._onSelectItem = function (event) { + if (!this.options.selectable) return; - if (this.popupObj === undefined) { - // search the edges for overlap - var edges = this.edges; - for (id in edges) { - if (edges.hasOwnProperty(id)) { - var edge = edges[id]; - if (edge.connected && (edge.getTitle() !== undefined) && - edge.isOverlappingWith(obj)) { - this.popupObj = edge; - break; - } - } - } + var ctrlKey = event.gesture.srcEvent && event.gesture.srcEvent.ctrlKey; + var shiftKey = event.gesture.srcEvent && event.gesture.srcEvent.shiftKey; + if (ctrlKey || shiftKey) { + this._onMultiSelectItem(event); + return; } - if (this.popupObj) { - // show popup message window - if (this.popupObj != lastPopupNode) { - var me = this; - if (!me.popup) { - me.popup = new Popup(me.frame, me.constants.tooltip); - } + var oldSelection = this.getSelection(); - // adjust a small offset such that the mouse cursor is located in the - // bottom left location of the popup, and you can easily move over the - // popup area - me.popup.setPosition(pointer.x - 3, pointer.y - 3); - me.popup.setText(me.popupObj.getTitle()); - me.popup.show(); - } - } - else { - if (this.popup) { - this.popup.hide(); - } - } - }; + var item = ItemSet.itemFromTarget(event); + var selection = item ? [item.id] : []; + this.setSelection(selection); + var newSelection = this.getSelection(); - /** - * Check if the popup must be hided, which is the case when the mouse is no - * longer hovering on the object - * @param {{x:Number, y:Number}} pointer - * @private - */ - Network.prototype._checkHidePopup = function (pointer) { - if (!this.popupObj || !this._getNodeAt(pointer) ) { - this.popupObj = undefined; - if (this.popup) { - this.popup.hide(); - } + // emit a select event, + // except when old selection is empty and new selection is still empty + if (newSelection.length > 0 || oldSelection.length > 0) { + this.body.emitter.emit('select', { + items: newSelection + }); } }; - /** - * Set a new size for the network - * @param {string} width Width in pixels or percentage (for example '800px' - * or '50%') - * @param {string} height Height in pixels or percentage (for example '400px' - * or '30%') + * Handle creation and updates of an item on double tap + * @param event + * @private */ - Network.prototype.setSize = function(width, height) { - var emitEvent = false; - var oldWidth = this.frame.canvas.width; - var oldHeight = this.frame.canvas.height; - if (width != this.constants.width || height != this.constants.height || this.frame.style.width != width || this.frame.style.height != height) { - this.frame.style.width = width; - this.frame.style.height = height; - - this.frame.canvas.style.width = '100%'; - this.frame.canvas.style.height = '100%'; + ItemSet.prototype._onAddItem = function (event) { + if (!this.options.selectable) return; + if (!this.options.editable.add) return; - this.frame.canvas.width = this.frame.canvas.clientWidth * this.pixelRatio; - this.frame.canvas.height = this.frame.canvas.clientHeight * this.pixelRatio; + var me = this, + snap = this.body.util.snap || null, + item = ItemSet.itemFromTarget(event); - this.constants.width = width; - this.constants.height = height; + if (item) { + // update item - emitEvent = true; + // execute async handler to update the item (or cancel it) + var itemData = me.itemsData.get(item.id); // get a clone of the data from the dataset + this.options.onUpdate(itemData, function (itemData) { + if (itemData) { + me.itemsData.getDataSet().update(itemData); + } + }); } else { - // this would adapt the width of the canvas to the width from 100% if and only if - // there is a change. + // add item + var xAbs = util.getAbsoluteLeft(this.dom.frame); + var x = event.gesture.center.pageX - xAbs; + var start = this.body.util.toTime(x); + var newItem = { + start: snap ? snap(start) : start, + content: 'new item' + }; - if (this.frame.canvas.width != this.frame.canvas.clientWidth * this.pixelRatio) { - this.frame.canvas.width = this.frame.canvas.clientWidth * this.pixelRatio; - emitEvent = true; + // when default type is a range, add a default end date to the new item + if (this.options.type === 'range') { + var end = this.body.util.toTime(x + this.props.width / 5); + newItem.end = snap ? snap(end) : end; } - if (this.frame.canvas.height != this.frame.canvas.clientHeight * this.pixelRatio) { - this.frame.canvas.height = this.frame.canvas.clientHeight * this.pixelRatio; - emitEvent = true; + + newItem[this.itemsData._fieldId] = util.randomUUID(); + + var group = ItemSet.groupFromTarget(event); + if (group) { + newItem.group = group.groupId; } - } - if (emitEvent == true) { - this.emit('resize', {width:this.frame.canvas.width * this.pixelRatio,height:this.frame.canvas.height * this.pixelRatio, oldWidth: oldWidth * this.pixelRatio, oldHeight: oldHeight * this.pixelRatio}); + // execute async handler to customize (or cancel) adding an item + this.options.onAdd(newItem, function (item) { + if (item) { + me.itemsData.getDataSet().add(item); + // TODO: need to trigger a redraw? + } + }); } }; /** - * Set a data set with nodes for the network - * @param {Array | DataSet | DataView} nodes The data containing the nodes. + * Handle selecting/deselecting multiple items when holding an item + * @param {Event} event * @private */ - Network.prototype._setNodes = function(nodes) { - var oldNodesData = this.nodesData; + ItemSet.prototype._onMultiSelectItem = function (event) { + if (!this.options.selectable) return; - if (nodes instanceof DataSet || nodes instanceof DataView) { - this.nodesData = nodes; - } - else if (Array.isArray(nodes)) { - this.nodesData = new DataSet(); - this.nodesData.add(nodes); - } - else if (!nodes) { - this.nodesData = new DataSet(); - } - else { - throw new TypeError('Array or DataSet expected'); - } + var selection, + item = ItemSet.itemFromTarget(event); - if (oldNodesData) { - // unsubscribe from old dataset - util.forEach(this.nodesListeners, function (callback, event) { - oldNodesData.off(event, callback); - }); - } + if (item) { + // multi select items + selection = this.getSelection(); // current selection - // remove drawn nodes - this.nodes = {}; + var shiftKey = event.gesture.touches[0] && event.gesture.touches[0].shiftKey || false; + if (shiftKey) { + // select all items between the old selection and the tapped item - if (this.nodesData) { - // subscribe to new dataset - var me = this; - util.forEach(this.nodesListeners, function (callback, event) { - me.nodesData.on(event, callback); - }); + // determine the selection range + selection.push(item.id); + var range = ItemSet._getItemRange(this.itemsData.get(selection, this.itemOptions)); - // draw all new nodes - var ids = this.nodesData.getIds(); - this._addNodes(ids); - } - this._updateSelection(); - }; + // select all items within the selection range + selection = []; + for (var id in this.items) { + if (this.items.hasOwnProperty(id)) { + var _item = this.items[id]; + var start = _item.data.start; + var end = (_item.data.end !== undefined) ? _item.data.end : start; - /** - * Add nodes - * @param {Number[] | String[]} ids - * @private - */ - Network.prototype._addNodes = function(ids) { - var id; - for (var i = 0, len = ids.length; i < len; i++) { - id = ids[i]; - var data = this.nodesData.get(id); - var node = new Node(data, this.images, this.groups, this.constants); - this.nodes[id] = node; // note: this may replace an existing node - if ((node.xFixed == false || node.yFixed == false) && (node.x === null || node.y === null)) { - var radius = 10 * 0.1*ids.length + 10; - var angle = 2 * Math.PI * Math.random(); - if (node.xFixed == false) {node.x = radius * Math.cos(angle);} - if (node.yFixed == false) {node.y = radius * Math.sin(angle);} + if (start >= range.min && end <= range.max) { + selection.push(_item.id); // do not use id but item.id, id itself is stringified + } + } + } + } + else { + // add/remove this item from the current selection + var index = selection.indexOf(item.id); + if (index == -1) { + // item is not yet selected -> select it + selection.push(item.id); + } + else { + // item is already selected -> deselect it + selection.splice(index, 1); + } } - this.moving = true; - } - this._updateNodeIndexList(); - if (this.constants.hierarchicalLayout.enabled == true && this.initializing == false) { - this._resetLevels(); - this._setupHierarchicalLayout(); + this.setSelection(selection); + + this.body.emitter.emit('select', { + items: this.getSelection() + }); } - this._updateCalculationNodes(); - this._reconnectEdges(); - this._updateValueRange(this.nodes); - this.updateLabels(); }; /** - * Update existing nodes, or create them when not yet existing - * @param {Number[] | String[]} ids + * Calculate the time range of a list of items + * @param {Array.} itemsData + * @return {{min: Date, max: Date}} Returns the range of the provided items * @private */ - Network.prototype._updateNodes = function(ids,changedData) { - var nodes = this.nodes; - for (var i = 0, len = ids.length; i < len; i++) { - var id = ids[i]; - var node = nodes[id]; - var data = changedData[i]; - if (node) { - // update node - node.setProperties(data, this.constants); + ItemSet._getItemRange = function(itemsData) { + var max = null; + var min = null; + + itemsData.forEach(function (data) { + if (min == null || data.start < min) { + min = data.start; + } + + if (data.end != undefined) { + if (max == null || data.end > max) { + max = data.end; + } } else { - // create node - node = new Node(properties, this.images, this.groups, this.constants); - nodes[id] = node; + if (max == null || data.start > max) { + max = data.start; + } } + }); + + return { + min: min, + max: max } - this.moving = true; - if (this.constants.hierarchicalLayout.enabled == true && this.initializing == false) { - this._resetLevels(); - this._setupHierarchicalLayout(); - } - this._updateNodeIndexList(); - this._updateValueRange(nodes); }; /** - * Remove existing nodes. If nodes do not exist, the method will just ignore it. - * @param {Number[] | String[]} ids - * @private + * Find an item from an event target: + * searches for the attribute 'timeline-item' in the event target's element tree + * @param {Event} event + * @return {Item | null} item */ - Network.prototype._removeNodes = function(ids) { - var nodes = this.nodes; - for (var i = 0, len = ids.length; i < len; i++) { - var id = ids[i]; - delete nodes[id]; - } - this._updateNodeIndexList(); - if (this.constants.hierarchicalLayout.enabled == true && this.initializing == false) { - this._resetLevels(); - this._setupHierarchicalLayout(); + ItemSet.itemFromTarget = function(event) { + var target = event.target; + while (target) { + if (target.hasOwnProperty('timeline-item')) { + return target['timeline-item']; + } + target = target.parentNode; } - this._updateCalculationNodes(); - this._reconnectEdges(); - this._updateSelection(); - this._updateValueRange(nodes); + + return null; }; /** - * Load edges by reading the data table - * @param {Array | DataSet | DataView} edges The data containing the edges. - * @private - * @private + * Find the Group from an event target: + * searches for the attribute 'timeline-group' in the event target's element tree + * @param {Event} event + * @return {Group | null} group */ - Network.prototype._setEdges = function(edges) { - var oldEdgesData = this.edgesData; - - if (edges instanceof DataSet || edges instanceof DataView) { - this.edgesData = edges; - } - else if (Array.isArray(edges)) { - this.edgesData = new DataSet(); - this.edgesData.add(edges); - } - else if (!edges) { - this.edgesData = new DataSet(); - } - else { - throw new TypeError('Array or DataSet expected'); - } - - if (oldEdgesData) { - // unsubscribe from old dataset - util.forEach(this.edgesListeners, function (callback, event) { - oldEdgesData.off(event, callback); - }); + ItemSet.groupFromTarget = function(event) { + var target = event.target; + while (target) { + if (target.hasOwnProperty('timeline-group')) { + return target['timeline-group']; + } + target = target.parentNode; } - // remove drawn edges - this.edges = {}; - - if (this.edgesData) { - // subscribe to new dataset - var me = this; - util.forEach(this.edgesListeners, function (callback, event) { - me.edgesData.on(event, callback); - }); + return null; + }; - // draw all new nodes - var ids = this.edgesData.getIds(); - this._addEdges(ids); + /** + * Find the ItemSet from an event target: + * searches for the attribute 'timeline-itemset' in the event target's element tree + * @param {Event} event + * @return {ItemSet | null} item + */ + ItemSet.itemSetFromTarget = function(event) { + var target = event.target; + while (target) { + if (target.hasOwnProperty('timeline-itemset')) { + return target['timeline-itemset']; + } + target = target.parentNode; } - this._reconnectEdges(); + return null; }; - /** - * Add edges - * @param {Number[] | String[]} ids - * @private - */ - Network.prototype._addEdges = function (ids) { - var edges = this.edges, - edgesData = this.edgesData; + module.exports = ItemSet; - for (var i = 0, len = ids.length; i < len; i++) { - var id = ids[i]; - var oldEdge = edges[id]; - if (oldEdge) { - oldEdge.disconnect(); - } +/***/ }, +/* 27 */ +/***/ function(module, exports, __webpack_require__) { - var data = edgesData.get(id, {"showInternalIds" : true}); - edges[id] = new Edge(data, this, this.constants); - } - this.moving = true; - this._updateValueRange(edges); - this._createBezierNodes(); - this._updateCalculationNodes(); - if (this.constants.hierarchicalLayout.enabled == true && this.initializing == false) { - this._resetLevels(); - this._setupHierarchicalLayout(); - } - }; + var util = __webpack_require__(1); + var stack = __webpack_require__(28); + var RangeItem = __webpack_require__(29); /** - * Update existing edges, or create them when not yet existing - * @param {Number[] | String[]} ids - * @private + * @constructor Group + * @param {Number | String} groupId + * @param {Object} data + * @param {ItemSet} itemSet */ - Network.prototype._updateEdges = function (ids) { - var edges = this.edges, - edgesData = this.edgesData; - for (var i = 0, len = ids.length; i < len; i++) { - var id = ids[i]; + function Group (groupId, data, itemSet) { + this.groupId = groupId; + this.subgroups = {}; + this.subgroupIndex = 0; + this.subgroupOrderer = data && data.subgroupOrder; + this.itemSet = itemSet; - var data = edgesData.get(id); - var edge = edges[id]; - if (edge) { - // update edge - edge.disconnect(); - edge.setProperties(data, this.constants); - edge.connect(); - } - else { - // create edge - edge = new Edge(data, this, this.constants); - this.edges[id] = edge; + this.dom = {}; + this.props = { + label: { + width: 0, + height: 0 } - } + }; + this.className = null; + + this.items = {}; // items filtered by groupId of this group + this.visibleItems = []; // items currently visible in window + this.orderedItems = { + byStart: [], + byEnd: [] + }; + this.checkRangedItems = false; // needed to refresh the ranged items if the window is programatically changed with NO overlap. + var me = this; + this.itemSet.body.emitter.on("checkRangedItems", function () { + me.checkRangedItems = true; + }) - this._createBezierNodes(); - if (this.constants.hierarchicalLayout.enabled == true && this.initializing == false) { - this._resetLevels(); - this._setupHierarchicalLayout(); - } - this.moving = true; - this._updateValueRange(edges); - }; + this._create(); + + this.setData(data); + } /** - * Remove existing edges. Non existing ids will be ignored - * @param {Number[] | String[]} ids + * Create DOM elements for the group * @private */ - Network.prototype._removeEdges = function (ids) { - var edges = this.edges; - for (var i = 0, len = ids.length; i < len; i++) { - var id = ids[i]; - var edge = edges[id]; - if (edge) { - if (edge.via != null) { - delete this.sectors['support']['nodes'][edge.via.id]; - } - edge.disconnect(); - delete edges[id]; - } - } + Group.prototype._create = function() { + var label = document.createElement('div'); + label.className = 'vlabel'; + this.dom.label = label; - this.moving = true; - this._updateValueRange(edges); - if (this.constants.hierarchicalLayout.enabled == true && this.initializing == false) { - this._resetLevels(); - this._setupHierarchicalLayout(); - } - this._updateCalculationNodes(); + var inner = document.createElement('div'); + inner.className = 'inner'; + label.appendChild(inner); + this.dom.inner = inner; + + var foreground = document.createElement('div'); + foreground.className = 'group'; + foreground['timeline-group'] = this; + this.dom.foreground = foreground; + + this.dom.background = document.createElement('div'); + this.dom.background.className = 'group'; + + this.dom.axis = document.createElement('div'); + this.dom.axis.className = 'group'; + + // create a hidden marker to detect when the Timelines container is attached + // to the DOM, or the style of a parent of the Timeline is changed from + // display:none is changed to visible. + this.dom.marker = document.createElement('div'); + this.dom.marker.style.visibility = 'hidden'; // TODO: ask jos why this is not none? + this.dom.marker.innerHTML = '?'; + this.dom.background.appendChild(this.dom.marker); }; /** - * Reconnect all edges - * @private + * Set the group data for this group + * @param {Object} data Group data, can contain properties content and className */ - Network.prototype._reconnectEdges = function() { - var id, - nodes = this.nodes, - edges = this.edges; - for (id in nodes) { - if (nodes.hasOwnProperty(id)) { - nodes[id].edges = []; - nodes[id].dynamicEdges = []; - } + Group.prototype.setData = function(data) { + // update contents + var content = data && data.content; + if (content instanceof Element) { + this.dom.inner.appendChild(content); } - - for (id in edges) { - if (edges.hasOwnProperty(id)) { - var edge = edges[id]; - edge.from = null; - edge.to = null; - edge.connect(); - } + else if (content !== undefined && content !== null) { + this.dom.inner.innerHTML = content; + } + else { + this.dom.inner.innerHTML = this.groupId || ''; // groupId can be null } - }; - /** - * Update the values of all object in the given array according to the current - * value range of the objects in the array. - * @param {Object} obj An object containing a set of Edges or Nodes - * The objects must have a method getValue() and - * setValueRange(min, max). - * @private - */ - Network.prototype._updateValueRange = function(obj) { - var id; + // update title + this.dom.label.title = data && data.title || ''; - // determine the range of the objects - var valueMin = undefined; - var valueMax = undefined; - for (id in obj) { - if (obj.hasOwnProperty(id)) { - var value = obj[id].getValue(); - if (value !== undefined) { - valueMin = (valueMin === undefined) ? value : Math.min(value, valueMin); - valueMax = (valueMax === undefined) ? value : Math.max(value, valueMax); - } - } + if (!this.dom.inner.firstChild) { + util.addClassName(this.dom.inner, 'hidden'); + } + else { + util.removeClassName(this.dom.inner, 'hidden'); } - // adjust the range of all objects - if (valueMin !== undefined && valueMax !== undefined) { - for (id in obj) { - if (obj.hasOwnProperty(id)) { - obj[id].setValueRange(valueMin, valueMax); - } + // update className + var className = data && data.className || null; + if (className != this.className) { + if (this.className) { + util.removeClassName(this.dom.label, this.className); + util.removeClassName(this.dom.foreground, this.className); + util.removeClassName(this.dom.background, this.className); + util.removeClassName(this.dom.axis, this.className); } + util.addClassName(this.dom.label, className); + util.addClassName(this.dom.foreground, className); + util.addClassName(this.dom.background, className); + util.addClassName(this.dom.axis, className); + this.className = className; + } + + // update style + if (this.style) { + util.removeCssText(this.dom.label, this.style); + this.style = null; + } + if (data && data.style) { + util.addCssText(this.dom.label, data.style); + this.style = data.style; } }; /** - * Redraw the network with the current data - * chart will be resized too. + * Get the width of the group label + * @return {number} width */ - Network.prototype.redraw = function() { - this.setSize(this.constants.width, this.constants.height); - this._redraw(); + Group.prototype.getLabelWidth = function() { + return this.props.label.width; }; + /** - * Redraw the network with the current data - * @private + * Repaint this group + * @param {{start: number, end: number}} range + * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin + * @param {boolean} [restack=false] Force restacking of all items + * @return {boolean} Returns true if the group is resized */ - Network.prototype._redraw = function() { - var ctx = this.frame.canvas.getContext('2d'); - - ctx.setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0); - - // clear the canvas - var w = this.frame.canvas.width * this.pixelRatio; - var h = this.frame.canvas.height * this.pixelRatio; - ctx.clearRect(0, 0, w, h); + Group.prototype.redraw = function(range, margin, restack) { + var resized = false; - // set scaling and translation - ctx.save(); - ctx.translate(this.translation.x, this.translation.y); - ctx.scale(this.scale, this.scale); + this.visibleItems = this._updateVisibleItems(this.orderedItems, this.visibleItems, range); - this.canvasTopLeft = { - "x": this._XconvertDOMtoCanvas(0), - "y": this._YconvertDOMtoCanvas(0) - }; - this.canvasBottomRight = { - "x": this._XconvertDOMtoCanvas(this.frame.canvas.clientWidth * this.pixelRatio), - "y": this._YconvertDOMtoCanvas(this.frame.canvas.clientHeight * this.pixelRatio) - }; + // force recalculation of the height of the items when the marker height changed + // (due to the Timeline being attached to the DOM or changed from display:none to visible) + var markerHeight = this.dom.marker.clientHeight; + if (markerHeight != this.lastMarkerHeight) { + this.lastMarkerHeight = markerHeight; + util.forEach(this.items, function (item) { + item.dirty = true; + if (item.displayed) item.redraw(); + }); - this._doInAllSectors("_drawAllSectorNodes",ctx); - if (this.drag.dragging == false || this.drag.dragging === undefined || this.constants.hideEdgesOnDrag == false) { - this._doInAllSectors("_drawEdges",ctx); + restack = true; } - if (this.drag.dragging == false || this.drag.dragging === undefined || this.constants.hideNodesOnDrag == false) { - this._doInAllSectors("_drawNodes",ctx,false); + // reposition visible items vertically + if (this.itemSet.options.stack) { // TODO: ugly way to access options... + stack.stack(this.visibleItems, margin, restack); } - - if (this.controlNodesActive == true) { - this._doInAllSectors("_drawControlNodes",ctx); + else { // no stacking + stack.nostack(this.visibleItems, margin, this.subgroups); } - // this._doInSupportSector("_drawNodes",ctx,true); - // this._drawTree(ctx,"#F00F0F"); + // recalculate the height of the group + var height = this._calculateHeight(margin); - // restore original scaling and translation - ctx.restore(); - }; + // calculate actual size and position + var foreground = this.dom.foreground; + this.top = foreground.offsetTop; + this.left = foreground.offsetLeft; + this.width = foreground.offsetWidth; + resized = util.updateProperty(this, 'height', height) || resized; - /** - * Set the translation of the network - * @param {Number} offsetX Horizontal offset - * @param {Number} offsetY Vertical offset - * @private - */ - Network.prototype._setTranslation = function(offsetX, offsetY) { - if (this.translation === undefined) { - this.translation = { - x: 0, - y: 0 - }; - } + // recalculate size of label + resized = util.updateProperty(this.props.label, 'width', this.dom.inner.clientWidth) || resized; + resized = util.updateProperty(this.props.label, 'height', this.dom.inner.clientHeight) || resized; - if (offsetX !== undefined) { - this.translation.x = offsetX; - } - if (offsetY !== undefined) { - this.translation.y = offsetY; + // apply new height + this.dom.background.style.height = height + 'px'; + this.dom.foreground.style.height = height + 'px'; + this.dom.label.style.height = height + 'px'; + + // update vertical position of items after they are re-stacked and the height of the group is calculated + for (var i = 0, ii = this.visibleItems.length; i < ii; i++) { + var item = this.visibleItems[i]; + item.repositionY(margin); } - this.emit('viewChanged'); + return resized; }; /** - * Get the translation of the network - * @return {Object} translation An object with parameters x and y, both a number + * recalculate the height of the group + * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin + * @returns {number} Returns the height * @private */ - Network.prototype._getTranslation = function() { - return { - x: this.translation.x, - y: this.translation.y - }; - }; + Group.prototype._calculateHeight = function (margin) { + // recalculate the height of the group + var height; + var visibleItems = this.visibleItems; + //var visibleSubgroups = []; + //this.visibleSubgroups = 0; + this.resetSubgroups(); + var me = this; + if (visibleItems.length) { + var min = visibleItems[0].top; + var max = visibleItems[0].top + visibleItems[0].height; + util.forEach(visibleItems, function (item) { + min = Math.min(min, item.top); + max = Math.max(max, (item.top + item.height)); + if (item.data.subgroup !== undefined) { + me.subgroups[item.data.subgroup].height = Math.max(me.subgroups[item.data.subgroup].height,item.height); + me.subgroups[item.data.subgroup].visible = true; + //if (visibleSubgroups.indexOf(item.data.subgroup) == -1){ + // visibleSubgroups.push(item.data.subgroup); + // me.visibleSubgroups += 1; + //} + } + }); + if (min > margin.axis) { + // there is an empty gap between the lowest item and the axis + var offset = min - margin.axis; + max -= offset; + util.forEach(visibleItems, function (item) { + item.top -= offset; + }); + } + height = max + margin.item.vertical / 2; + } + else { + height = margin.axis + margin.item.vertical; + } + height = Math.max(height, this.props.label.height); - /** - * Scale the network - * @param {Number} scale Scaling factor 1.0 is unscaled - * @private - */ - Network.prototype._setScale = function(scale) { - this.scale = scale; + return height; }; /** - * Get the current scale of the network - * @return {Number} scale Scaling factor 1.0 is unscaled - * @private + * Show this group: attach to the DOM */ - Network.prototype._getScale = function() { - return this.scale; - }; + Group.prototype.show = function() { + if (!this.dom.label.parentNode) { + this.itemSet.dom.labelSet.appendChild(this.dom.label); + } - /** - * Convert the X coordinate in DOM-space (coordinate point in browser relative to the container div) to - * the X coordinate in canvas-space (the simulation sandbox, which the camera looks upon) - * @param {number} x - * @returns {number} - * @private - */ - Network.prototype._XconvertDOMtoCanvas = function(x) { - return (x - this.translation.x) / this.scale; - }; + if (!this.dom.foreground.parentNode) { + this.itemSet.dom.foreground.appendChild(this.dom.foreground); + } - /** - * Convert the X coordinate in canvas-space (the simulation sandbox, which the camera looks upon) to - * the X coordinate in DOM-space (coordinate point in browser relative to the container div) - * @param {number} x - * @returns {number} - * @private - */ - Network.prototype._XconvertCanvasToDOM = function(x) { - return x * this.scale + this.translation.x; - }; + if (!this.dom.background.parentNode) { + this.itemSet.dom.background.appendChild(this.dom.background); + } - /** - * Convert the Y coordinate in DOM-space (coordinate point in browser relative to the container div) to - * the Y coordinate in canvas-space (the simulation sandbox, which the camera looks upon) - * @param {number} y - * @returns {number} - * @private - */ - Network.prototype._YconvertDOMtoCanvas = function(y) { - return (y - this.translation.y) / this.scale; + if (!this.dom.axis.parentNode) { + this.itemSet.dom.axis.appendChild(this.dom.axis); + } }; /** - * Convert the Y coordinate in canvas-space (the simulation sandbox, which the camera looks upon) to - * the Y coordinate in DOM-space (coordinate point in browser relative to the container div) - * @param {number} y - * @returns {number} - * @private + * Hide this group: remove from the DOM */ - Network.prototype._YconvertCanvasToDOM = function(y) { - return y * this.scale + this.translation.y ; - }; + Group.prototype.hide = function() { + var label = this.dom.label; + if (label.parentNode) { + label.parentNode.removeChild(label); + } + var foreground = this.dom.foreground; + if (foreground.parentNode) { + foreground.parentNode.removeChild(foreground); + } - /** - * - * @param {object} pos = {x: number, y: number} - * @returns {{x: number, y: number}} - * @constructor - */ - Network.prototype.canvasToDOM = function (pos) { - return {x: this._XconvertCanvasToDOM(pos.x), y: this._YconvertCanvasToDOM(pos.y)}; - }; + var background = this.dom.background; + if (background.parentNode) { + background.parentNode.removeChild(background); + } - /** - * - * @param {object} pos = {x: number, y: number} - * @returns {{x: number, y: number}} - * @constructor - */ - Network.prototype.DOMtoCanvas = function (pos) { - return {x: this._XconvertDOMtoCanvas(pos.x), y: this._YconvertDOMtoCanvas(pos.y)}; + var axis = this.dom.axis; + if (axis.parentNode) { + axis.parentNode.removeChild(axis); + } }; /** - * Redraw all nodes - * The 2d context of a HTML canvas can be retrieved by canvas.getContext('2d'); - * @param {CanvasRenderingContext2D} ctx - * @param {Boolean} [alwaysShow] - * @private + * Add an item to the group + * @param {Item} item */ - Network.prototype._drawNodes = function(ctx,alwaysShow) { - if (alwaysShow === undefined) { - alwaysShow = false; + Group.prototype.add = function(item) { + this.items[item.id] = item; + item.setParent(this); + + // add to + if (item.data.subgroup !== undefined) { + if (this.subgroups[item.data.subgroup] === undefined) { + this.subgroups[item.data.subgroup] = {height:0, visible: false, index:this.subgroupIndex, items: []}; + this.subgroupIndex++; + } + this.subgroups[item.data.subgroup].items.push(item); } + this.orderSubgroups(); - // first draw the unselected nodes - var nodes = this.nodes; - var selected = []; + if (this.visibleItems.indexOf(item) == -1) { + var range = this.itemSet.body.range; // TODO: not nice accessing the range like this + this._checkIfVisible(item, this.visibleItems, range); + } + }; - for (var id in nodes) { - if (nodes.hasOwnProperty(id)) { - nodes[id].setScaleAndPos(this.scale,this.canvasTopLeft,this.canvasBottomRight); - if (nodes[id].isSelected()) { - selected.push(id); + Group.prototype.orderSubgroups = function() { + if (this.subgroupOrderer !== undefined) { + var sortArray = []; + if (typeof this.subgroupOrderer == 'string') { + for (var subgroup in this.subgroups) { + sortArray.push({subgroup: subgroup, sortField: this.subgroups[subgroup].items[0].data[this.subgroupOrderer]}) } - else { - if (nodes[id].inArea() || alwaysShow) { - nodes[id].draw(ctx); - } + sortArray.sort(function (a, b) { + return a.sortField - b.sortField; + }) + } + else if (typeof this.subgroupOrderer == 'function') { + for (var subgroup in this.subgroups) { + sortArray.push(this.subgroups[subgroup].items[0].data); + } + sortArray.sort(this.subgroupOrderer); + } + + if (sortArray.length > 0) { + for (var i = 0; i < sortArray.length; i++) { + this.subgroups[sortArray[i].subgroup].index = i; } } } + }; - // draw the selected nodes on top - for (var s = 0, sMax = selected.length; s < sMax; s++) { - if (nodes[selected[s]].inArea() || alwaysShow) { - nodes[selected[s]].draw(ctx); + Group.prototype.resetSubgroups = function() { + for (var subgroup in this.subgroups) { + if (this.subgroups.hasOwnProperty(subgroup)) { + this.subgroups[subgroup].visible = false; } } }; /** - * Redraw all edges - * The 2d context of a HTML canvas can be retrieved by canvas.getContext('2d'); - * @param {CanvasRenderingContext2D} ctx - * @private + * Remove an item from the group + * @param {Item} item */ - Network.prototype._drawEdges = function(ctx) { - var edges = this.edges; - for (var id in edges) { - if (edges.hasOwnProperty(id)) { - var edge = edges[id]; - edge.setScale(this.scale); - if (edge.connected) { - edges[id].draw(ctx); - } - } - } + Group.prototype.remove = function(item) { + delete this.items[item.id]; + item.setParent(null); + + // remove from visible items + var index = this.visibleItems.indexOf(item); + if (index != -1) this.visibleItems.splice(index, 1); + + // TODO: also remove from ordered items? + }; + + + /** + * Remove an item from the corresponding DataSet + * @param {Item} item + */ + Group.prototype.removeFromDataSet = function(item) { + this.itemSet.removeItem(item.id); }; + /** - * Redraw all edges - * The 2d context of a HTML canvas can be retrieved by canvas.getContext('2d'); - * @param {CanvasRenderingContext2D} ctx - * @private + * Reorder the items */ - Network.prototype._drawControlNodes = function(ctx) { - var edges = this.edges; - for (var id in edges) { - if (edges.hasOwnProperty(id)) { - edges[id]._drawControlNodes(ctx); + Group.prototype.order = function() { + var array = util.toArray(this.items); + var startArray = []; + var endArray = []; + + for (var i = 0; i < array.length; i++) { + if (array[i].data.end !== undefined) { + endArray.push(array[i]); } + startArray.push(array[i]); } + this.orderedItems = { + byStart: startArray, + byEnd: endArray + }; + + stack.orderByStart(this.orderedItems.byStart); + stack.orderByEnd(this.orderedItems.byEnd); }; + /** - * Find a stable position for all nodes + * Update the visible items + * @param {{byStart: Item[], byEnd: Item[]}} orderedItems All items ordered by start date and by end date + * @param {Item[]} visibleItems The previously visible items. + * @param {{start: number, end: number}} range Visible range + * @return {Item[]} visibleItems The new visible items. * @private */ - Network.prototype._stabilize = function() { - if (this.constants.freezeForStabilization == true) { - this._freezeDefinedNodes(); + Group.prototype._updateVisibleItems = function(orderedItems, oldVisibleItems, range) { + var visibleItems = []; + var visibleItemsLookup = {}; // we keep this to quickly look up if an item already exists in the list without using indexOf on visibleItems + var interval = (range.end - range.start) / 4; + var lowerBound = range.start - interval; + var upperBound = range.end + interval; + var item, i; + + // this function is used to do the binary search. + var searchFunction = function (value) { + if (value < lowerBound) {return -1;} + else if (value <= upperBound) {return 0;} + else {return 1;} } - // find stable position - var count = 0; - while (this.moving && count < this.constants.stabilizationIterations) { - this._physicsTick(); - count++; + // first check if the items that were in view previously are still in view. + // IMPORTANT: this handles the case for the items with startdate before the window and enddate after the window! + // also cleans up invisible items. + if (oldVisibleItems.length > 0) { + for (i = 0; i < oldVisibleItems.length; i++) { + this._checkIfVisibleWithReference(oldVisibleItems[i], visibleItems, visibleItemsLookup, range); + } } - this.zoomExtent(undefined,false,true); - if (this.constants.freezeForStabilization == true) { - this._restoreFrozenNodes(); + + // we do a binary search for the items that have only start values. + var initialPosByStart = util.binarySearchCustom(orderedItems.byStart, searchFunction, 'data','start'); + + // trace the visible items from the inital start pos both ways until an invisible item is found, we only look at the start values. + this._traceVisible(initialPosByStart, orderedItems.byStart, visibleItems, visibleItemsLookup, function (item) { + return (item.data.start < lowerBound || item.data.start > upperBound); + }); + + // if the window has changed programmatically without overlapping the old window, the ranged items with start < lowerBound and end > upperbound are not shown. + // We therefore have to brute force check all items in the byEnd list + if (this.checkRangedItems == true) { + this.checkRangedItems = false; + for (i = 0; i < orderedItems.byEnd.length; i++) { + this._checkIfVisibleWithReference(orderedItems.byEnd[i], visibleItems, visibleItemsLookup, range); + } + } + else { + // we do a binary search for the items that have defined end times. + var initialPosByEnd = util.binarySearchCustom(orderedItems.byEnd, searchFunction, 'data','end'); + + // trace the visible items from the inital start pos both ways until an invisible item is found, we only look at the end values. + this._traceVisible(initialPosByEnd, orderedItems.byEnd, visibleItems, visibleItemsLookup, function (item) { + return (item.data.end < lowerBound || item.data.end > upperBound); + }); + } + + + // finally, we reposition all the visible items. + for (i = 0; i < visibleItems.length; i++) { + item = visibleItems[i]; + if (!item.displayed) item.show(); + // reposition item horizontally + item.repositionX(); } + + // debug + //console.log("new line") + //if (this.groupId == null) { + // for (i = 0; i < orderedItems.byStart.length; i++) { + // item = orderedItems.byStart[i].data; + // console.log('start',i,initialPosByStart, item.start.valueOf(), item.content, item.start >= lowerBound && item.start <= upperBound,i == initialPosByStart ? "<------------------- HEREEEE" : "") + // } + // for (i = 0; i < orderedItems.byEnd.length; i++) { + // item = orderedItems.byEnd[i].data; + // console.log('rangeEnd',i,initialPosByEnd, item.end.valueOf(), item.content, item.end >= range.start && item.end <= range.end,i == initialPosByEnd ? "<------------------- HEREEEE" : "") + // } + //} + + return visibleItems; }; - /** - * When initializing and stabilizing, we can freeze nodes with a predefined position. This greatly speeds up stabilization - * because only the supportnodes for the smoothCurves have to settle. - * - * @private - */ - Network.prototype._freezeDefinedNodes = function() { - var nodes = this.nodes; - for (var id in nodes) { - if (nodes.hasOwnProperty(id)) { - if (nodes[id].x != null && nodes[id].y != null) { - nodes[id].fixedData.x = nodes[id].xFixed; - nodes[id].fixedData.y = nodes[id].yFixed; - nodes[id].xFixed = true; - nodes[id].yFixed = true; + Group.prototype._traceVisible = function (initialPos, items, visibleItems, visibleItemsLookup, breakCondition) { + var item; + var i; + + if (initialPos != -1) { + for (i = initialPos; i >= 0; i--) { + item = items[i]; + if (breakCondition(item)) { + break; + } + else { + if (visibleItemsLookup[item.id] === undefined) { + visibleItemsLookup[item.id] = true; + visibleItems.push(item); + } } } - } - }; - /** - * Unfreezes the nodes that have been frozen by _freezeDefinedNodes. - * - * @private - */ - Network.prototype._restoreFrozenNodes = function() { - var nodes = this.nodes; - for (var id in nodes) { - if (nodes.hasOwnProperty(id)) { - if (nodes[id].fixedData.x != null) { - nodes[id].xFixed = nodes[id].fixedData.x; - nodes[id].yFixed = nodes[id].fixedData.y; + for (i = initialPos + 1; i < items.length; i++) { + item = items[i]; + if (breakCondition(item)) { + break; + } + else { + if (visibleItemsLookup[item.id] === undefined) { + visibleItemsLookup[item.id] = true; + visibleItems.push(item); + } } } } - }; + } /** - * Check if any of the nodes is still moving - * @param {number} vmin the minimum velocity considered as 'moving' - * @return {boolean} true if moving, false if non of the nodes is moving + * this function is very similar to the _checkIfInvisible() but it does not + * return booleans, hides the item if it should not be seen and always adds to + * the visibleItems. + * this one is for brute forcing and hiding. + * + * @param {Item} item + * @param {Array} visibleItems + * @param {{start:number, end:number}} range * @private */ - Network.prototype._isMoving = function(vmin) { - var nodes = this.nodes; - for (var id in nodes) { - if (nodes.hasOwnProperty(id) && nodes[id].isMoving(vmin)) { - return true; + Group.prototype._checkIfVisible = function(item, visibleItems, range) { + if (item.isVisible(range)) { + if (!item.displayed) item.show(); + // reposition item horizontally + item.repositionX(); + visibleItems.push(item); + } + else { + if (item.displayed) item.hide(); } - } - return false; }; /** - * /** - * Perform one discrete step for all nodes + * this function is very similar to the _checkIfInvisible() but it does not + * return booleans, hides the item if it should not be seen and always adds to + * the visibleItems. + * this one is for brute forcing and hiding. * + * @param {Item} item + * @param {Array} visibleItems + * @param {{start:number, end:number}} range * @private */ - Network.prototype._discreteStepNodes = function() { - var interval = this.physicsDiscreteStepsize; - var nodes = this.nodes; - var nodeId; - var nodesPresent = false; - - if (this.constants.maxVelocity > 0) { - for (nodeId in nodes) { - if (nodes.hasOwnProperty(nodeId)) { - nodes[nodeId].discreteStepLimited(interval, this.constants.maxVelocity); - nodesPresent = true; - } + Group.prototype._checkIfVisibleWithReference = function(item, visibleItems, visibleItemsLookup, range) { + if (item.isVisible(range)) { + if (visibleItemsLookup[item.id] === undefined) { + visibleItemsLookup[item.id] = true; + visibleItems.push(item); } } else { - for (nodeId in nodes) { - if (nodes.hasOwnProperty(nodeId)) { - nodes[nodeId].discreteStep(interval); - nodesPresent = true; - } - } - } - - if (nodesPresent == true) { - var vminCorrected = this.constants.minVelocity / Math.max(this.scale,0.05); - if (vminCorrected > 0.5*this.constants.maxVelocity) { - return true; - } - else { - return this._isMoving(vminCorrected); - } + if (item.displayed) item.hide(); } - return false; }; - /** - * A single simulation step (or "tick") in the physics simulation - * - * @private - */ - Network.prototype._physicsTick = function() { - if (!this.freezeSimulation) { - if (this.moving == true) { - var mainMovingStatus = false; - var supportMovingStatus = false; - this._doInAllActiveSectors("_initializeForceCalculation"); - var mainMoving = this._doInAllActiveSectors("_discreteStepNodes"); - if (this.constants.smoothCurves.enabled == true && this.constants.smoothCurves.dynamic == true) { - supportMovingStatus = this._doInSupportSector("_discreteStepNodes"); - } - // gather movement data from all sectors, if one moves, we are NOT stabilzied - for (var i = 0; i < mainMoving.length; i++) {mainMovingStatus = mainMoving[0] || mainMovingStatus;} - // determine if the network has stabilzied - this.moving = mainMovingStatus || supportMovingStatus; + module.exports = Group; - this.stabilizationIterations++; - } - } - }; +/***/ }, +/* 28 */ +/***/ function(module, exports, __webpack_require__) { + + // Utility functions for ordering and stacking of items + var EPSILON = 0.001; // used when checking collisions, to prevent round-off errors /** - * This function runs one step of the animation. It calls an x amount of physics ticks and one render tick. - * It reschedules itself at the beginning of the function - * - * @private + * Order items by their start data + * @param {Item[]} items */ - Network.prototype._animationStep = function() { - // reset the timer so a new scheduled animation step can be set - this.timer = undefined; - // handle the keyboad movement - this._handleNavigation(); + exports.orderByStart = function(items) { + items.sort(function (a, b) { + return a.data.start - b.data.start; + }); + }; - // this schedules a new animation step - this.start(); + /** + * Order items by their end date. If they have no end date, their start date + * is used. + * @param {Item[]} items + */ + exports.orderByEnd = function(items) { + items.sort(function (a, b) { + var aTime = ('end' in a.data) ? a.data.end : a.data.start, + bTime = ('end' in b.data) ? b.data.end : b.data.start; - // start the physics simulation - var calculationTime = Date.now(); - var maxSteps = 1; - this._physicsTick(); - var timeRequired = Date.now() - calculationTime; - while (timeRequired < 0.9*(this.renderTimestep - this.renderTime) && maxSteps < this.maxPhysicsTicksPerRender) { - this._physicsTick(); - timeRequired = Date.now() - calculationTime; - maxSteps++; - } - // start the rendering process - var renderTime = Date.now(); - this._redraw(); - this.renderTime = Date.now() - renderTime; + return aTime - bTime; + }); }; - if (typeof window !== 'undefined') { - window.requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || - window.webkitRequestAnimationFrame || window.msRequestAnimationFrame; - } - /** - * Schedule a animation step with the refreshrate interval. + * Adjust vertical positions of the items such that they don't overlap each + * other. + * @param {Item[]} items + * All visible items + * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin + * Margins between items and between items and the axis. + * @param {boolean} [force=false] + * If true, all items will be repositioned. If false (default), only + * items having a top===null will be re-stacked */ - Network.prototype.start = function() { - if (this.moving == true || this.xIncrement != 0 || this.yIncrement != 0 || this.zoomIncrement != 0) { - if (this.startedStabilization == false) { - this.emit("startStabilization"); - this.startedStabilization = true; + exports.stack = function(items, margin, force) { + var i, iMax; + + if (force) { + // reset top position of all items + for (i = 0, iMax = items.length; i < iMax; i++) { + items[i].top = null; } + } - if (!this.timer) { - var ua = navigator.userAgent.toLowerCase(); + // calculate new, non-overlapping positions + for (i = 0, iMax = items.length; i < iMax; i++) { + var item = items[i]; + if (item.stack && item.top === null) { + // initialize top position + item.top = margin.axis; - var requiresTimeout = false; - if (ua.indexOf('msie 9.0') != -1) { // IE 9 - requiresTimeout = true; - } - else if (ua.indexOf('safari') != -1) { // safari - if (ua.indexOf('chrome') <= -1) { - requiresTimeout = true; + do { + // TODO: optimize checking for overlap. when there is a gap without items, + // you only need to check for items from the next item on, not from zero + var collidingItem = null; + for (var j = 0, jj = items.length; j < jj; j++) { + var other = items[j]; + if (other.top !== null && other !== item && other.stack && exports.collision(item, other, margin.item)) { + collidingItem = other; + break; + } } - } - if (requiresTimeout == true) { - this.timer = window.setTimeout(this._animationStep.bind(this), this.renderTimestep); // wait this.renderTimeStep milliseconds and perform the animation step function - } - else{ - this.timer = window.requestAnimationFrame(this._animationStep.bind(this), this.renderTimestep); // wait this.renderTimeStep milliseconds and perform the animation step function - } - } - } - else { - this._redraw(); - if (this.stabilizationIterations > 0) { - // trigger the "stabilized" event. - // The event is triggered on the next tick, to prevent the case that - // it is fired while initializing the Network, in which case you would not - // be able to catch it - var me = this; - var params = { - iterations: me.stabilizationIterations - }; - me.stabilizationIterations = 0; - me.startedStabilization = false; - setTimeout(function () { - me.emit("stabilized", params); - }, 0); + if (collidingItem != null) { + // There is a collision. Reposition the items above the colliding element + item.top = collidingItem.top + collidingItem.height + margin.item.vertical; + } + } while (collidingItem); } } }; /** - * Move the network according to the keyboard presses. - * - * @private + * Adjust vertical positions of the items without stacking them + * @param {Item[]} items + * All visible items + * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin + * Margins between items and between items and the axis. */ - Network.prototype._handleNavigation = function() { - if (this.xIncrement != 0 || this.yIncrement != 0) { - var translation = this._getTranslation(); - this._setTranslation(translation.x+this.xIncrement, translation.y+this.yIncrement); - } - if (this.zoomIncrement != 0) { - var center = { - x: this.frame.canvas.clientWidth / 2, - y: this.frame.canvas.clientHeight / 2 - }; - this._zoom(this.scale*(1 + this.zoomIncrement), center); + exports.nostack = function(items, margin, subgroups) { + var i, iMax, newTop; + + // reset top position of all items + for (i = 0, iMax = items.length; i < iMax; i++) { + if (items[i].data.subgroup !== undefined) { + newTop = margin.axis; + for (var subgroup in subgroups) { + if (subgroups.hasOwnProperty(subgroup)) { + if (subgroups[subgroup].visible == true && subgroups[subgroup].index < subgroups[items[i].data.subgroup].index) { + newTop += subgroups[subgroup].height + margin.item.vertical; + } + } + } + items[i].top = newTop; + } + else { + items[i].top = margin.axis; + } } }; - /** - * Freeze the _animationStep + * Test if the two provided items collide + * The items must have parameters left, width, top, and height. + * @param {Item} a The first item + * @param {Item} b The second item + * @param {{horizontal: number, vertical: number}} margin + * An object containing a horizontal and vertical + * minimum required margin. + * @return {boolean} true if a and b collide, else false */ - Network.prototype.toggleFreeze = function() { - if (this.freezeSimulation == false) { - this.freezeSimulation = true; - } - else { - this.freezeSimulation = false; - this.start(); - } + exports.collision = function(a, b, margin) { + return ((a.left - margin.horizontal + EPSILON) < (b.left + b.width) && + (a.left + a.width + margin.horizontal - EPSILON) > b.left && + (a.top - margin.vertical + EPSILON) < (b.top + b.height) && + (a.top + a.height + margin.vertical - EPSILON) > b.top); }; +/***/ }, +/* 29 */ +/***/ function(module, exports, __webpack_require__) { + + var Hammer = __webpack_require__(19); + var Item = __webpack_require__(30); + /** - * This function cleans the support nodes if they are not needed and adds them when they are. - * - * @param {boolean} [disableStart] - * @private + * @constructor RangeItem + * @extends Item + * @param {Object} data Object containing parameters start, end + * content, className. + * @param {{toScreen: function, toTime: function}} conversion + * Conversion functions from time to screen and vice versa + * @param {Object} [options] Configuration options + * // TODO: describe options */ - Network.prototype._configureSmoothCurves = function(disableStart) { - if (disableStart === undefined) { - disableStart = true; - } - if (this.constants.smoothCurves.enabled == true && this.constants.smoothCurves.dynamic == true) { - this._createBezierNodes(); - // cleanup unused support nodes - for (var nodeId in this.sectors['support']['nodes']) { - if (this.sectors['support']['nodes'].hasOwnProperty(nodeId)) { - if (this.edges[this.sectors['support']['nodes'][nodeId].parentEdgeId] === undefined) { - delete this.sectors['support']['nodes'][nodeId]; - } - } + function RangeItem (data, conversion, options) { + this.props = { + content: { + width: 0 } - } - else { - // delete the support nodes - this.sectors['support']['nodes'] = {}; - for (var edgeId in this.edges) { - if (this.edges.hasOwnProperty(edgeId)) { - this.edges[edgeId].via = null; - } + }; + this.overflow = false; // if contents can overflow (css styling), this flag is set to true + + // validate data + if (data) { + if (data.start == undefined) { + throw new Error('Property "start" missing in item ' + data.id); + } + if (data.end == undefined) { + throw new Error('Property "end" missing in item ' + data.id); } } + Item.call(this, data, conversion, options); + } - this._updateCalculationNodes(); - if (!disableStart) { - this.moving = true; - this.start(); - } - }; + RangeItem.prototype = new Item (null, null, null); + RangeItem.prototype.baseClassName = 'item range'; /** - * Bezier curves require an anchor point to calculate the smooth flow. These points are nodes. These nodes are invisible but - * are used for the force calculation. - * - * @private + * Check whether this item is visible inside given range + * @returns {{start: Number, end: Number}} range with a timestamp for start and end + * @returns {boolean} True if visible */ - Network.prototype._createBezierNodes = function() { - if (this.constants.smoothCurves.enabled == true && this.constants.smoothCurves.dynamic == true) { - for (var edgeId in this.edges) { - if (this.edges.hasOwnProperty(edgeId)) { - var edge = this.edges[edgeId]; - if (edge.via == null) { - var nodeId = "edgeId:".concat(edge.id); - this.sectors['support']['nodes'][nodeId] = new Node( - {id:nodeId, - mass:1, - shape:'circle', - image:"", - internalMultiplier:1 - },{},{},this.constants); - edge.via = this.sectors['support']['nodes'][nodeId]; - edge.via.parentEdgeId = edge.id; - edge.positionBezierNode(); - } - } - } - } + RangeItem.prototype.isVisible = function(range) { + // determine visibility + return (this.data.start < range.end) && (this.data.end > range.start); }; /** - * load the functions that load the mixins into the prototype. - * - * @private + * Repaint the item */ - Network.prototype._initializeMixinLoaders = function () { - for (var mixin in MixinLoader) { - if (MixinLoader.hasOwnProperty(mixin)) { - Network.prototype[mixin] = MixinLoader[mixin]; + RangeItem.prototype.redraw = function() { + var dom = this.dom; + if (!dom) { + // create DOM + this.dom = {}; + dom = this.dom; + + // background box + dom.box = document.createElement('div'); + // className is updated in redraw() + + // contents box + dom.content = document.createElement('div'); + dom.content.className = 'content'; + dom.box.appendChild(dom.content); + + // attach this item as attribute + dom.box['timeline-item'] = this; + + this.dirty = true; + } + + // append DOM to parent DOM + if (!this.parent) { + throw new Error('Cannot redraw item: no parent attached'); + } + if (!dom.box.parentNode) { + var foreground = this.parent.dom.foreground; + if (!foreground) { + throw new Error('Cannot redraw item: parent has no foreground container element'); } + foreground.appendChild(dom.box); + } + this.displayed = true; + + // Update DOM when item is marked dirty. An item is marked dirty when: + // - the item is not yet rendered + // - the item's data is changed + // - the item is selected/deselected + if (this.dirty) { + this._updateContents(this.dom.content); + this._updateTitle(this.dom.box); + this._updateDataAttributes(this.dom.box); + this._updateStyle(this.dom.box); + + // update class + var className = (this.data.className ? (' ' + this.data.className) : '') + + (this.selected ? ' selected' : ''); + dom.box.className = this.baseClassName + className; + + // determine from css whether this box has overflow + this.overflow = window.getComputedStyle(dom.content).overflow !== 'hidden'; + + // recalculate size + // turn off max-width to be able to calculate the real width + // this causes an extra browser repaint/reflow, but so be it + this.dom.content.style.maxWidth = 'none'; + this.props.content.width = this.dom.content.offsetWidth; + this.height = this.dom.box.offsetHeight; + this.dom.content.style.maxWidth = ''; + + this.dirty = false; } + + this._repaintDeleteButton(dom.box); + this._repaintDragLeft(); + this._repaintDragRight(); }; /** - * Load the XY positions of the nodes into the dataset. + * Show the item in the DOM (when not already visible). The items DOM will + * be created when needed. */ - Network.prototype.storePosition = function() { - console.log("storePosition is depricated: use .storePositions() from now on.") - this.storePositions(); + RangeItem.prototype.show = function() { + if (!this.displayed) { + this.redraw(); + } }; /** - * Load the XY positions of the nodes into the dataset. + * Hide the item from the DOM (when visible) + * @return {Boolean} changed */ - Network.prototype.storePositions = function() { - var dataArray = []; - for (var nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - var node = this.nodes[nodeId]; - var allowedToMoveX = !this.nodes.xFixed; - var allowedToMoveY = !this.nodes.yFixed; - if (this.nodesData._data[nodeId].x != Math.round(node.x) || this.nodesData._data[nodeId].y != Math.round(node.y)) { - dataArray.push({id:nodeId,x:Math.round(node.x),y:Math.round(node.y),allowedToMoveX:allowedToMoveX,allowedToMoveY:allowedToMoveY}); - } + RangeItem.prototype.hide = function() { + if (this.displayed) { + var box = this.dom.box; + + if (box.parentNode) { + box.parentNode.removeChild(box); } + + this.top = null; + this.left = null; + + this.displayed = false; } - this.nodesData.update(dataArray); }; /** - * Return the positions of the nodes. + * Reposition the item horizontally + * @Override */ - Network.prototype.getPositions = function(ids) { - var dataArray = {}; - if (ids !== undefined) { - if (Array.isArray(ids) == true) { - for (var i = 0; i < ids.length; i++) { - if (this.nodes[ids[i]] !== undefined) { - var node = this.nodes[ids[i]]; - dataArray[ids[i]] = {x: Math.round(node.x), y: Math.round(node.y)}; - } - } - } - else { - if (this.nodes[ids] !== undefined) { - var node = this.nodes[ids]; - dataArray[ids] = {x: Math.round(node.x), y: Math.round(node.y)}; - } - } + RangeItem.prototype.repositionX = function() { + var parentWidth = this.parent.width; + var start = this.conversion.toScreen(this.data.start); + var end = this.conversion.toScreen(this.data.end); + var contentLeft; + var contentWidth; + + // limit the width of the this, as browsers cannot draw very wide divs + if (start < -parentWidth) { + start = -parentWidth; + } + if (end > 2 * parentWidth) { + end = 2 * parentWidth; + } + var boxWidth = Math.max(end - start, 1); + + if (this.overflow) { + this.left = start; + this.width = boxWidth + this.props.content.width; + contentWidth = this.props.content.width; + + // Note: The calculation of width is an optimistic calculation, giving + // a width which will not change when moving the Timeline + // So no re-stacking needed, which is nicer for the eye; } else { - for (var nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - var node = this.nodes[nodeId]; - dataArray[nodeId] = {x: Math.round(node.x), y: Math.round(node.y)}; - } - } + this.left = start; + this.width = boxWidth; + contentWidth = Math.min(end - start - 2 * this.options.padding, this.props.content.width); } - return dataArray; - }; + this.dom.box.style.left = this.left + 'px'; + this.dom.box.style.width = boxWidth + 'px'; + + switch (this.options.align) { + case 'left': + this.dom.content.style.left = '0'; + break; + + case 'right': + this.dom.content.style.left = Math.max((boxWidth - contentWidth - 2 * this.options.padding), 0) + 'px'; + break; + + case 'center': + this.dom.content.style.left = Math.max((boxWidth - contentWidth - 2 * this.options.padding) / 2, 0) + 'px'; + break; + default: // 'auto' + // when range exceeds left of the window, position the contents at the left of the visible area + if (this.overflow) { + if (end > 0) { + contentLeft = Math.max(-start, 0); + } + else { + contentLeft = -contentWidth; // ensure it's not visible anymore + } + } + else { + if (start < 0) { + contentLeft = Math.min(-start, + (end - start - contentWidth - 2 * this.options.padding)); + // TODO: remove the need for options.padding. it's terrible. + } + else { + contentLeft = 0; + } + } + this.dom.content.style.left = contentLeft + 'px'; + } + }; /** - * Center a node in view. - * - * @param {Number} nodeId - * @param {Number} [options] + * Reposition the item vertically + * @Override */ - Network.prototype.focusOnNode = function (nodeId, options) { - if (this.nodes.hasOwnProperty(nodeId)) { - if (options === undefined) { - options = {}; - } - var nodePosition = {x: this.nodes[nodeId].x, y: this.nodes[nodeId].y}; - options.position = nodePosition; - options.lockedOnNode = nodeId; + RangeItem.prototype.repositionY = function() { + var orientation = this.options.orientation, + box = this.dom.box; - this.moveTo(options) + if (orientation == 'top') { + box.style.top = this.top + 'px'; } else { - console.log("This nodeId cannot be found."); + box.style.top = (this.parent.height - this.top - this.height) + 'px'; } }; /** - * - * @param {Object} options | options.offset = {x:Number, y:Number} // offset from the center in DOM pixels - * | options.scale = Number // scale to move to - * | options.position = {x:Number, y:Number} // position to move to - * | options.animation = {duration:Number, easingFunction:String} || Boolean // position to move to + * Repaint a drag area on the left side of the range when the range is selected + * @protected */ - Network.prototype.moveTo = function (options) { - if (options === undefined) { - options = {}; - return; - } - if (options.offset === undefined) {options.offset = {x: 0, y: 0}; } - if (options.offset.x === undefined) {options.offset.x = 0; } - if (options.offset.y === undefined) {options.offset.y = 0; } - if (options.scale === undefined) {options.scale = this._getScale(); } - if (options.position === undefined) {options.position = this._getTranslation();} - if (options.animation === undefined) {options.animation = {duration:0}; } - if (options.animation === false ) {options.animation = {duration:0}; } - if (options.animation === true ) {options.animation = {}; } - if (options.animation.duration === undefined) {options.animation.duration = 1000; } // default duration - if (options.animation.easingFunction === undefined) {options.animation.easingFunction = "easeInOutQuad"; } // default easing function + RangeItem.prototype._repaintDragLeft = function () { + if (this.selected && this.options.editable.updateTime && !this.dom.dragLeft) { + // create and show drag area + var dragLeft = document.createElement('div'); + dragLeft.className = 'drag-left'; + dragLeft.dragLeftItem = this; - this.animateView(options); + // TODO: this should be redundant? + Hammer(dragLeft, { + preventDefault: true + }).on('drag', function () { + //console.log('drag left') + }); + + this.dom.box.appendChild(dragLeft); + this.dom.dragLeft = dragLeft; + } + else if (!this.selected && this.dom.dragLeft) { + // delete drag area + if (this.dom.dragLeft.parentNode) { + this.dom.dragLeft.parentNode.removeChild(this.dom.dragLeft); + } + this.dom.dragLeft = null; + } }; /** - * - * @param {Object} options | options.offset = {x:Number, y:Number} // offset from the center in DOM pixels - * | options.time = Number // animation time in milliseconds - * | options.scale = Number // scale to animate to - * | options.position = {x:Number, y:Number} // position to animate to - * | options.easingFunction = String // linear, easeInQuad, easeOutQuad, easeInOutQuad, - * // easeInCubic, easeOutCubic, easeInOutCubic, - * // easeInQuart, easeOutQuart, easeInOutQuart, - * // easeInQuint, easeOutQuint, easeInOutQuint + * Repaint a drag area on the right side of the range when the range is selected + * @protected */ - Network.prototype.animateView = function (options) { - if (options === undefined) { - options = {}; - return; - } + RangeItem.prototype._repaintDragRight = function () { + if (this.selected && this.options.editable.updateTime && !this.dom.dragRight) { + // create and show drag area + var dragRight = document.createElement('div'); + dragRight.className = 'drag-right'; + dragRight.dragRightItem = this; - // release if something focussed on the node - this.releaseNode(); - if (options.locked == true) { - this.lockedOnNodeId = options.lockedOnNode; - this.lockedOnNodeOffset = options.offset; - } + // TODO: this should be redundant? + Hammer(dragRight, { + preventDefault: true + }).on('drag', function () { + //console.log('drag right') + }); - // forcefully complete the old animation if it was still running - if (this.easingTime != 0) { - this._transitionRedraw(1); // by setting easingtime to 1, we finish the animation. + this.dom.box.appendChild(dragRight); + this.dom.dragRight = dragRight; } - - this.sourceScale = this._getScale(); - this.sourceTranslation = this._getTranslation(); - this.targetScale = options.scale; - - // set the scale so the viewCenter is based on the correct zoom level. This is overridden in the transitionRedraw - // but at least then we'll have the target transition - this._setScale(this.targetScale); - var viewCenter = this.DOMtoCanvas({x: 0.5 * this.frame.canvas.clientWidth, y: 0.5 * this.frame.canvas.clientHeight}); - var distanceFromCenter = { // offset from view, distance view has to change by these x and y to center the node - x: viewCenter.x - options.position.x, - y: viewCenter.y - options.position.y - }; - this.targetTranslation = { - x: this.sourceTranslation.x + distanceFromCenter.x * this.targetScale + options.offset.x, - y: this.sourceTranslation.y + distanceFromCenter.y * this.targetScale + options.offset.y - }; - - // if the time is set to 0, don't do an animation - if (options.animation.duration == 0) { - if (this.lockedOnNodeId != null) { - this._classicRedraw = this._redraw; - this._redraw = this._lockedRedraw; - } - else { - this._setScale(this.targetScale); - this._setTranslation(this.targetTranslation.x, this.targetTranslation.y); - this._redraw(); + else if (!this.selected && this.dom.dragRight) { + // delete drag area + if (this.dom.dragRight.parentNode) { + this.dom.dragRight.parentNode.removeChild(this.dom.dragRight); } - } - else { - this.animationSpeed = 1 / (this.renderRefreshRate * options.animation.duration * 0.001) || 1 / this.renderRefreshRate; - this.animationEasingFunction = options.animation.easingFunction; - this._classicRedraw = this._redraw; - this._redraw = this._transitionRedraw; - this._redraw(); - this.moving = true; - this.start(); + this.dom.dragRight = null; } }; + module.exports = RangeItem; - Network.prototype._lockedRedraw = function () { - var nodePosition = {x: this.nodes[this.lockedOnNodeId].x, y: this.nodes[this.lockedOnNodeId].y}; - var viewCenter = this.DOMtoCanvas({x: 0.5 * this.frame.canvas.clientWidth, y: 0.5 * this.frame.canvas.clientHeight}); - var distanceFromCenter = { // offset from view, distance view has to change by these x and y to center the node - x: viewCenter.x - nodePosition.x, - y: viewCenter.y - nodePosition.y - }; - var sourceTranslation = this._getTranslation(); - var targetTranslation = { - x: sourceTranslation.x + distanceFromCenter.x * this.scale + this.lockedOnNodeOffset.x, - y: sourceTranslation.y + distanceFromCenter.y * this.scale + this.lockedOnNodeOffset.y - }; - this._setTranslation(targetTranslation.x,targetTranslation.y); - this._classicRedraw(); - } +/***/ }, +/* 30 */ +/***/ function(module, exports, __webpack_require__) { - Network.prototype.releaseNode = function () { - if (this.lockedOnNodeId != null) { - this._redraw = this._classicRedraw; - this.lockedOnNodeId = null; - this.lockedOnNodeOffset = null; - } - } + var Hammer = __webpack_require__(19); + var util = __webpack_require__(1); /** - * - * @param easingTime - * @private + * @constructor Item + * @param {Object} data Object containing (optional) parameters type, + * start, end, content, group, className. + * @param {{toScreen: function, toTime: function}} conversion + * Conversion functions from time to screen and vice versa + * @param {Object} options Configuration options + * // TODO: describe available options */ - Network.prototype._transitionRedraw = function (easingTime) { - this.easingTime = easingTime || this.easingTime + this.animationSpeed; - this.easingTime += this.animationSpeed; + function Item (data, conversion, options) { + this.id = null; + this.parent = null; + this.data = data; + this.dom = null; + this.conversion = conversion || {}; + this.options = options || {}; - var progress = util.easingFunctions[this.animationEasingFunction](this.easingTime); + this.selected = false; + this.displayed = false; + this.dirty = true; - this._setScale(this.sourceScale + (this.targetScale - this.sourceScale) * progress); - this._setTranslation( - this.sourceTranslation.x + (this.targetTranslation.x - this.sourceTranslation.x) * progress, - this.sourceTranslation.y + (this.targetTranslation.y - this.sourceTranslation.y) * progress - ); + this.top = null; + this.left = null; + this.width = null; + this.height = null; + } - this._classicRedraw(); - this.moving = true; + Item.prototype.stack = true; - // cleanup - if (this.easingTime >= 1.0) { - this.easingTime = 0; - if (this.lockedOnNodeId != null) { - this._redraw = this._lockedRedraw; - } - else { - this._redraw = this._classicRedraw; - } - this.emit("animationFinished"); - } + /** + * Select current item + */ + Item.prototype.select = function() { + this.selected = true; + this.dirty = true; + if (this.displayed) this.redraw(); }; - Network.prototype._classicRedraw = function () { - // placeholder function to be overloaded by animations; + /** + * Unselect current item + */ + Item.prototype.unselect = function() { + this.selected = false; + this.dirty = true; + if (this.displayed) this.redraw(); + }; + + /** + * Set data for the item. Existing data will be updated. The id should not + * be changed. When the item is displayed, it will be redrawn immediately. + * @param {Object} data + */ + Item.prototype.setData = function(data) { + this.data = data; + this.dirty = true; + if (this.displayed) this.redraw(); + }; + + /** + * Set a parent for the item + * @param {ItemSet | Group} parent + */ + Item.prototype.setParent = function(parent) { + if (this.displayed) { + this.hide(); + this.parent = parent; + if (this.parent) { + this.show(); + } + } + else { + this.parent = parent; + } }; /** - * Returns true when the Network is active. - * @returns {boolean} + * Check whether this item is visible inside given range + * @returns {{start: Number, end: Number}} range with a timestamp for start and end + * @returns {boolean} True if visible */ - Network.prototype.isActive = function () { - return !this.activator || this.activator.active; + Item.prototype.isVisible = function(range) { + // Should be implemented by Item implementations + return false; }; - /** - * Sets the scale - * @returns {Number} + * Show the Item in the DOM (when not already visible) + * @return {Boolean} changed */ - Network.prototype.setScale = function () { - return this._setScale(); + Item.prototype.show = function() { + return false; }; + /** + * Hide the Item from the DOM (when visible) + * @return {Boolean} changed + */ + Item.prototype.hide = function() { + return false; + }; /** - * Returns the scale - * @returns {Number} + * Repaint the item */ - Network.prototype.getScale = function () { - return this._getScale(); + Item.prototype.redraw = function() { + // should be implemented by the item }; + /** + * Reposition the Item horizontally + */ + Item.prototype.repositionX = function() { + // should be implemented by the item + }; /** - * Returns the scale - * @returns {Number} + * Reposition the Item vertically */ - Network.prototype.getCenterCoordinates = function () { - return this.DOMtoCanvas({x: 0.5 * this.frame.canvas.clientWidth, y: 0.5 * this.frame.canvas.clientHeight}); + Item.prototype.repositionY = function() { + // should be implemented by the item }; - module.exports = Network; + /** + * Repaint a delete button on the top right of the item when the item is selected + * @param {HTMLElement} anchor + * @protected + */ + Item.prototype._repaintDeleteButton = function (anchor) { + if (this.selected && this.options.editable.remove && !this.dom.deleteButton) { + // create and show button + var me = this; + var deleteButton = document.createElement('div'); + deleteButton.className = 'delete'; + deleteButton.title = 'Delete this item'; -/***/ }, -/* 37 */ -/***/ function(module, exports, __webpack_require__) { + Hammer(deleteButton, { + preventDefault: true + }).on('tap', function (event) { + me.parent.removeFromDataSet(me); + event.stopPropagation(); + }); - var util = __webpack_require__(1); - var Node = __webpack_require__(40); + anchor.appendChild(deleteButton); + this.dom.deleteButton = deleteButton; + } + else if (!this.selected && this.dom.deleteButton) { + // remove button + if (this.dom.deleteButton.parentNode) { + this.dom.deleteButton.parentNode.removeChild(this.dom.deleteButton); + } + this.dom.deleteButton = null; + } + }; /** - * @class Edge - * - * A edge connects two nodes - * @param {Object} properties Object with properties. Must contain - * At least properties from and to. - * Available properties: from (number), - * to (number), label (string, color (string), - * width (number), style (string), - * length (number), title (string) - * @param {Network} network A Network object, used to find and edge to - * nodes. - * @param {Object} constants An object with default values for - * example for the color + * Set HTML contents for the item + * @param {Element} element HTML element to fill with the contents + * @private */ - function Edge (properties, network, networkConstants) { - if (!network) { - throw "No network provided"; + Item.prototype._updateContents = function (element) { + var content; + if (this.options.template) { + var itemData = this.parent.itemSet.itemsData.get(this.id); // get a clone of the data from the dataset + content = this.options.template(itemData); + } + else { + content = this.data.content; } - var fields = ['edges','physics']; - var constants = util.selectiveBridgeObject(fields,networkConstants); - this.options = constants.edges; - this.physics = constants.physics; - this.options['smoothCurves'] = networkConstants['smoothCurves']; - - - this.network = network; - - // initialize variables - this.id = undefined; - this.fromId = undefined; - this.toId = undefined; - this.title = undefined; - this.widthSelected = this.options.width * this.options.widthSelectionMultiplier; - this.value = undefined; - this.selected = false; - this.hover = false; - this.labelDimensions = {top:0,left:0,width:0,height:0,yLine:0}; // could be cached - this.dirtyLabel = true; - - this.from = null; // a node - this.to = null; // a node - this.via = null; // a temp node - - this.fromBackup = null; // used to clean up after reconnect - this.toBackup = null;; // used to clean up after reconnect - - // we use this to be able to reconnect the edge to a cluster if its node is put into a cluster - // by storing the original information we can revert to the original connection when the cluser is opened. - this.originalFromId = []; - this.originalToId = []; - - this.connected = false; - - this.widthFixed = false; - this.lengthFixed = false; - this.setProperties(properties); + if(content !== this.content) { + // only replace the content when changed + if (content instanceof Element) { + element.innerHTML = ''; + element.appendChild(content); + } + else if (content != undefined) { + element.innerHTML = content; + } + else { + if (!(this.data.type == 'background' && this.data.content === undefined)) { + throw new Error('Property "content" missing in item ' + this.id); + } + } - this.controlNodesEnabled = false; - this.controlNodes = {from:null, to:null, positions:{}}; - this.connectedNode = null; - } + this.content = content; + } + }; /** - * Set or overwrite properties for the edge - * @param {Object} properties an object with properties - * @param {Object} constants and object with default, global properties + * Set HTML contents for the item + * @param {Element} element HTML element to fill with the contents + * @private */ - Edge.prototype.setProperties = function(properties) { - if (!properties) { - return; + Item.prototype._updateTitle = function (element) { + if (this.data.title != null) { + element.title = this.data.title || ''; } + else { + element.removeAttribute('title'); + } + }; - var fields = ['style','fontSize','fontFace','fontColor','fontFill','width', - 'widthSelectionMultiplier','hoverWidth','arrowScaleFactor','dash','inheritColor' - ]; - util.selectiveDeepExtend(fields, this.options, properties); - - if (properties.from !== undefined) {this.fromId = properties.from;} - if (properties.to !== undefined) {this.toId = properties.to;} - - if (properties.id !== undefined) {this.id = properties.id;} - if (properties.label !== undefined) {this.label = properties.label; this.dirtyLabel = true;} - - if (properties.title !== undefined) {this.title = properties.title;} - if (properties.value !== undefined) {this.value = properties.value;} - if (properties.length !== undefined) {this.physics.springLength = properties.length;} + /** + * Process dataAttributes timeline option and set as data- attributes on dom.content + * @param {Element} element HTML element to which the attributes will be attached + * @private + */ + Item.prototype._updateDataAttributes = function(element) { + if (this.options.dataAttributes && this.options.dataAttributes.length > 0) { + var attributes = []; - if (properties.color !== undefined) { - this.options.inheritColor = false; - if (util.isString(properties.color)) { - this.options.color.color = properties.color; - this.options.color.highlight = properties.color; + if (Array.isArray(this.options.dataAttributes)) { + attributes = this.options.dataAttributes; + } + else if (this.options.dataAttributes == 'all') { + attributes = Object.keys(this.data); } else { - if (properties.color.color !== undefined) {this.options.color.color = properties.color.color;} - if (properties.color.highlight !== undefined) {this.options.color.highlight = properties.color.highlight;} - if (properties.color.hover !== undefined) {this.options.color.hover = properties.color.hover;} + return; } - } - // A node is connected when it has a from and to node. - this.connect(); + for (var i = 0; i < attributes.length; i++) { + var name = attributes[i]; + var value = this.data[name]; - this.widthFixed = this.widthFixed || (properties.width !== undefined); - this.lengthFixed = this.lengthFixed || (properties.length !== undefined); + if (value != null) { + element.setAttribute('data-' + name, value); + } + else { + element.removeAttribute('data-' + name); + } + } + } + }; - this.widthSelected = this.options.width* this.options.widthSelectionMultiplier; + /** + * Update custom styles of the element + * @param element + * @private + */ + Item.prototype._updateStyle = function(element) { + // remove old styles + if (this.style) { + util.removeCssText(element, this.style); + this.style = null; + } - // set draw method based on style - switch (this.options.style) { - case 'line': this.draw = this._drawLine; break; - case 'arrow': this.draw = this._drawArrow; break; - case 'arrow-center': this.draw = this._drawArrowCenter; break; - case 'dash-line': this.draw = this._drawDashLine; break; - default: this.draw = this._drawLine; break; + // append new styles + if (this.data.style) { + util.addCssText(element, this.data.style); + this.style = this.data.style; } }; + module.exports = Item; + + +/***/ }, +/* 31 */ +/***/ function(module, exports, __webpack_require__) { + + var util = __webpack_require__(1); + var Group = __webpack_require__(27); + /** - * Connect an edge to its nodes + * @constructor BackgroundGroup + * @param {Number | String} groupId + * @param {Object} data + * @param {ItemSet} itemSet */ - Edge.prototype.connect = function () { - this.disconnect(); + function BackgroundGroup (groupId, data, itemSet) { + Group.call(this, groupId, data, itemSet); - this.from = this.network.nodes[this.fromId] || null; - this.to = this.network.nodes[this.toId] || null; - this.connected = (this.from && this.to); + this.width = 0; + this.height = 0; + this.top = 0; + this.left = 0; + } - if (this.connected) { - this.from.attachEdge(this); - this.to.attachEdge(this); - } - else { - if (this.from) { - this.from.detachEdge(this); - } - if (this.to) { - this.to.detachEdge(this); - } - } - }; + BackgroundGroup.prototype = Object.create(Group.prototype); /** - * Disconnect an edge from its nodes + * Repaint this group + * @param {{start: number, end: number}} range + * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin + * @param {boolean} [restack=false] Force restacking of all items + * @return {boolean} Returns true if the group is resized */ - Edge.prototype.disconnect = function () { - if (this.from) { - this.from.detachEdge(this); - this.from = null; - } - if (this.to) { - this.to.detachEdge(this); - this.to = null; + BackgroundGroup.prototype.redraw = function(range, margin, restack) { + var resized = false; + + this.visibleItems = this._updateVisibleItems(this.orderedItems, this.visibleItems, range); + + // calculate actual size + this.width = this.dom.background.offsetWidth; + + // apply new height (just always zero for BackgroundGroup + this.dom.background.style.height = '0'; + + // update vertical position of items after they are re-stacked and the height of the group is calculated + for (var i = 0, ii = this.visibleItems.length; i < ii; i++) { + var item = this.visibleItems[i]; + item.repositionY(margin); } - this.connected = false; + return resized; }; /** - * get the title of this edge. - * @return {string} title The title of the edge, or undefined when no title - * has been set. + * Show this group: attach to the DOM */ - Edge.prototype.getTitle = function() { - return typeof this.title === "function" ? this.title() : this.title; + BackgroundGroup.prototype.show = function() { + if (!this.dom.background.parentNode) { + this.itemSet.dom.background.appendChild(this.dom.background); + } }; + module.exports = BackgroundGroup; - /** - * Retrieve the value of the edge. Can be undefined - * @return {Number} value - */ - Edge.prototype.getValue = function() { - return this.value; - }; + +/***/ }, +/* 32 */ +/***/ function(module, exports, __webpack_require__) { + + var Item = __webpack_require__(30); + var util = __webpack_require__(1); /** - * Adjust the value range of the edge. The edge will adjust it's width - * based on its value. - * @param {Number} min - * @param {Number} max + * @constructor BoxItem + * @extends Item + * @param {Object} data Object containing parameters start + * content, className. + * @param {{toScreen: function, toTime: function}} conversion + * Conversion functions from time to screen and vice versa + * @param {Object} [options] Configuration options + * // TODO: describe available options */ - Edge.prototype.setValueRange = function(min, max) { - if (!this.widthFixed && this.value !== undefined) { - var scale = (this.options.widthMax - this.options.widthMin) / (max - min); - this.options.width= (this.value - min) * scale + this.options.widthMin; - this.widthSelected = this.options.width* this.options.widthSelectionMultiplier; + function BoxItem (data, conversion, options) { + this.props = { + dot: { + width: 0, + height: 0 + }, + line: { + width: 0, + height: 0 + } + }; + + // validate data + if (data) { + if (data.start == undefined) { + throw new Error('Property "start" missing in item ' + data); + } } - }; + + Item.call(this, data, conversion, options); + } + + BoxItem.prototype = new Item (null, null, null); /** - * Redraw a edge - * Draw this edge in the given canvas - * The 2d context of a HTML canvas can be retrieved by canvas.getContext("2d"); - * @param {CanvasRenderingContext2D} ctx + * Check whether this item is visible inside given range + * @returns {{start: Number, end: Number}} range with a timestamp for start and end + * @returns {boolean} True if visible */ - Edge.prototype.draw = function(ctx) { - throw "Method draw not initialized in edge"; + BoxItem.prototype.isVisible = function(range) { + // determine visibility + // TODO: account for the real width of the item. Right now we just add 1/4 to the window + var interval = (range.end - range.start) / 4; + return (this.data.start > range.start - interval) && (this.data.start < range.end + interval); }; /** - * Check if this object is overlapping with the provided object - * @param {Object} obj an object with parameters left, top - * @return {boolean} True if location is located on the edge + * Repaint the item */ - Edge.prototype.isOverlappingWith = function(obj) { - if (this.connected) { - var distMax = 10; - var xFrom = this.from.x; - var yFrom = this.from.y; - var xTo = this.to.x; - var yTo = this.to.y; - var xObj = obj.left; - var yObj = obj.top; + BoxItem.prototype.redraw = function() { + var dom = this.dom; + if (!dom) { + // create DOM + this.dom = {}; + dom = this.dom; - var dist = this._getDistanceToEdge(xFrom, yFrom, xTo, yTo, xObj, yObj); + // create main box + dom.box = document.createElement('DIV'); - return (dist < distMax); - } - else { - return false + // contents box (inside the background box). used for making margins + dom.content = document.createElement('DIV'); + dom.content.className = 'content'; + dom.box.appendChild(dom.content); + + // line to axis + dom.line = document.createElement('DIV'); + dom.line.className = 'line'; + + // dot on axis + dom.dot = document.createElement('DIV'); + dom.dot.className = 'dot'; + + // attach this item as attribute + dom.box['timeline-item'] = this; + + this.dirty = true; } - }; - Edge.prototype._getColor = function() { - var colorObj = this.options.color; - if (this.options.inheritColor == "to") { - colorObj = { - highlight: this.to.options.color.highlight.border, - hover: this.to.options.color.hover.border, - color: this.to.options.color.border - }; + // append DOM to parent DOM + if (!this.parent) { + throw new Error('Cannot redraw item: no parent attached'); } - else if (this.options.inheritColor == "from" || this.options.inheritColor == true) { - colorObj = { - highlight: this.from.options.color.highlight.border, - hover: this.from.options.color.hover.border, - color: this.from.options.color.border - }; + if (!dom.box.parentNode) { + var foreground = this.parent.dom.foreground; + if (!foreground) throw new Error('Cannot redraw item: parent has no foreground container element'); + foreground.appendChild(dom.box); + } + if (!dom.line.parentNode) { + var background = this.parent.dom.background; + if (!background) throw new Error('Cannot redraw item: parent has no background container element'); + background.appendChild(dom.line); + } + if (!dom.dot.parentNode) { + var axis = this.parent.dom.axis; + if (!background) throw new Error('Cannot redraw item: parent has no axis container element'); + axis.appendChild(dom.dot); } + this.displayed = true; - if (this.selected == true) {return colorObj.highlight;} - else if (this.hover == true) {return colorObj.hover;} - else {return colorObj.color;} + // Update DOM when item is marked dirty. An item is marked dirty when: + // - the item is not yet rendered + // - the item's data is changed + // - the item is selected/deselected + if (this.dirty) { + this._updateContents(this.dom.content); + this._updateTitle(this.dom.box); + this._updateDataAttributes(this.dom.box); + this._updateStyle(this.dom.box); + + // update class + var className = (this.data.className? ' ' + this.data.className : '') + + (this.selected ? ' selected' : ''); + dom.box.className = 'item box' + className; + dom.line.className = 'item line' + className; + dom.dot.className = 'item dot' + className; + + // recalculate size + this.props.dot.height = dom.dot.offsetHeight; + this.props.dot.width = dom.dot.offsetWidth; + this.props.line.width = dom.line.offsetWidth; + this.width = dom.box.offsetWidth; + this.height = dom.box.offsetHeight; + + this.dirty = false; + } + + this._repaintDeleteButton(dom.box); }; + /** + * Show the item in the DOM (when not already displayed). The items DOM will + * be created when needed. + */ + BoxItem.prototype.show = function() { + if (!this.displayed) { + this.redraw(); + } + }; /** - * Redraw a edge as a line - * Draw this edge in the given canvas - * The 2d context of a HTML canvas can be retrieved by canvas.getContext("2d"); - * @param {CanvasRenderingContext2D} ctx - * @private + * Hide the item from the DOM (when visible) */ - Edge.prototype._drawLine = function(ctx) { - // set style - ctx.strokeStyle = this._getColor(); - ctx.lineWidth = this._getLineWidth(); + BoxItem.prototype.hide = function() { + if (this.displayed) { + var dom = this.dom; - if (this.from != this.to) { - // draw line - var via = this._line(ctx); + if (dom.box.parentNode) dom.box.parentNode.removeChild(dom.box); + if (dom.line.parentNode) dom.line.parentNode.removeChild(dom.line); + if (dom.dot.parentNode) dom.dot.parentNode.removeChild(dom.dot); - // draw label - var point; - if (this.label) { - if (this.options.smoothCurves.enabled == true && via != null) { - var midpointX = 0.5*(0.5*(this.from.x + via.x) + 0.5*(this.to.x + via.x)); - var midpointY = 0.5*(0.5*(this.from.y + via.y) + 0.5*(this.to.y + via.y)); - point = {x:midpointX, y:midpointY}; - } - else { - point = this._pointOnLine(0.5); - } - this._label(ctx, this.label, point.x, point.y); - } - } - else { - var x, y; - var radius = this.physics.springLength / 4; - var node = this.from; - if (!node.width) { - node.resize(ctx); - } - if (node.width > node.height) { - x = node.x + node.width / 2; - y = node.y - radius; - } - else { - x = node.x + radius; - y = node.y - node.height / 2; - } - this._circle(ctx, x, y, radius); - point = this._pointOnCircle(x, y, radius, 0.5); - this._label(ctx, this.label, point.x, point.y); + this.top = null; + this.left = null; + + this.displayed = false; } }; /** - * Get the line width of the edge. Depends on width and whether one of the - * connected nodes is selected. - * @return {Number} width - * @private + * Reposition the item horizontally + * @Override */ - Edge.prototype._getLineWidth = function() { - if (this.selected == true) { - return Math.max(Math.min(this.widthSelected, this.options.widthMax), 0.3*this.networkScaleInv); + BoxItem.prototype.repositionX = function() { + var start = this.conversion.toScreen(this.data.start); + var align = this.options.align; + var left; + var box = this.dom.box; + var line = this.dom.line; + var dot = this.dom.dot; + + // calculate left position of the box + if (align == 'right') { + this.left = start - this.width; + } + else if (align == 'left') { + this.left = start; } else { - if (this.hover == true) { - return Math.max(Math.min(this.options.hoverWidth, this.options.widthMax), 0.3*this.networkScaleInv); - } - else { - return Math.max(this.options.width, 0.3*this.networkScaleInv); - } + // default or 'center' + this.left = start - this.width / 2; } + + // reposition box + box.style.left = this.left + 'px'; + + // reposition line + line.style.left = (start - this.props.line.width / 2) + 'px'; + + // reposition dot + dot.style.left = (start - this.props.dot.width / 2) + 'px'; }; - Edge.prototype._getViaCoordinates = function () { - var xVia = null; - var yVia = null; - var factor = this.options.smoothCurves.roundness; - var type = this.options.smoothCurves.type; + /** + * Reposition the item vertically + * @Override + */ + BoxItem.prototype.repositionY = function() { + var orientation = this.options.orientation; + var box = this.dom.box; + var line = this.dom.line; + var dot = this.dom.dot; - var dx = Math.abs(this.from.x - this.to.x); - var dy = Math.abs(this.from.y - this.to.y); - if (type == 'discrete' || type == 'diagonalCross') { - if (Math.abs(this.from.x - this.to.x) < Math.abs(this.from.y - this.to.y)) { - if (this.from.y > this.to.y) { - if (this.from.x < this.to.x) { - xVia = this.from.x + factor * dy; - yVia = this.from.y - factor * dy; - } - else if (this.from.x > this.to.x) { - xVia = this.from.x - factor * dy; - yVia = this.from.y - factor * dy; - } - } - else if (this.from.y < this.to.y) { - if (this.from.x < this.to.x) { - xVia = this.from.x + factor * dy; - yVia = this.from.y + factor * dy; - } - else if (this.from.x > this.to.x) { - xVia = this.from.x - factor * dy; - yVia = this.from.y + factor * dy; - } - } - if (type == "discrete") { - xVia = dx < factor * dy ? this.from.x : xVia; - } - } - else if (Math.abs(this.from.x - this.to.x) > Math.abs(this.from.y - this.to.y)) { - if (this.from.y > this.to.y) { - if (this.from.x < this.to.x) { - xVia = this.from.x + factor * dx; - yVia = this.from.y - factor * dx; - } - else if (this.from.x > this.to.x) { - xVia = this.from.x - factor * dx; - yVia = this.from.y - factor * dx; - } - } - else if (this.from.y < this.to.y) { - if (this.from.x < this.to.x) { - xVia = this.from.x + factor * dx; - yVia = this.from.y + factor * dx; - } - else if (this.from.x > this.to.x) { - xVia = this.from.x - factor * dx; - yVia = this.from.y + factor * dx; - } - } - if (type == "discrete") { - yVia = dy < factor * dx ? this.from.y : yVia; - } - } - } - else if (type == "straightCross") { - if (Math.abs(this.from.x - this.to.x) < Math.abs(this.from.y - this.to.y)) { // up - down - xVia = this.from.x; - if (this.from.y < this.to.y) { - yVia = this.to.y - (1-factor) * dy; - } - else { - yVia = this.to.y + (1-factor) * dy; - } - } - else if (Math.abs(this.from.x - this.to.x) > Math.abs(this.from.y - this.to.y)) { // left - right - if (this.from.x < this.to.x) { - xVia = this.to.x - (1-factor) * dx; - } - else { - xVia = this.to.x + (1-factor) * dx; - } - yVia = this.from.y; - } - } - else if (type == 'horizontal') { - if (this.from.x < this.to.x) { - xVia = this.to.x - (1-factor) * dx; - } - else { - xVia = this.to.x + (1-factor) * dx; - } - yVia = this.from.y; - } - else if (type == 'vertical') { - xVia = this.from.x; - if (this.from.y < this.to.y) { - yVia = this.to.y - (1-factor) * dy; - } - else { - yVia = this.to.y + (1-factor) * dy; - } - } - else { // continuous - if (Math.abs(this.from.x - this.to.x) < Math.abs(this.from.y - this.to.y)) { - if (this.from.y > this.to.y) { - if (this.from.x < this.to.x) { - // console.log(1) - xVia = this.from.x + factor * dy; - yVia = this.from.y - factor * dy; - xVia = this.to.x < xVia ? this.to.x : xVia; - } - else if (this.from.x > this.to.x) { - // console.log(2) - xVia = this.from.x - factor * dy; - yVia = this.from.y - factor * dy; - xVia = this.to.x > xVia ? this.to.x :xVia; - } - } - else if (this.from.y < this.to.y) { - if (this.from.x < this.to.x) { - // console.log(3) - xVia = this.from.x + factor * dy; - yVia = this.from.y + factor * dy; - xVia = this.to.x < xVia ? this.to.x : xVia; - } - else if (this.from.x > this.to.x) { - // console.log(4, this.from.x, this.to.x) - xVia = this.from.x - factor * dy; - yVia = this.from.y + factor * dy; - xVia = this.to.x > xVia ? this.to.x : xVia; - } - } - } - else if (Math.abs(this.from.x - this.to.x) > Math.abs(this.from.y - this.to.y)) { - if (this.from.y > this.to.y) { - if (this.from.x < this.to.x) { - // console.log(5) - xVia = this.from.x + factor * dx; - yVia = this.from.y - factor * dx; - yVia = this.to.y > yVia ? this.to.y : yVia; - } - else if (this.from.x > this.to.x) { - // console.log(6) - xVia = this.from.x - factor * dx; - yVia = this.from.y - factor * dx; - yVia = this.to.y > yVia ? this.to.y : yVia; - } - } - else if (this.from.y < this.to.y) { - if (this.from.x < this.to.x) { - // console.log(7) - xVia = this.from.x + factor * dx; - yVia = this.from.y + factor * dx; - yVia = this.to.y < yVia ? this.to.y : yVia; - } - else if (this.from.x > this.to.x) { - // console.log(8) - xVia = this.from.x - factor * dx; - yVia = this.from.y + factor * dx; - yVia = this.to.y < yVia ? this.to.y : yVia; - } - } - } + if (orientation == 'top') { + box.style.top = (this.top || 0) + 'px'; + + line.style.top = '0'; + line.style.height = (this.parent.top + this.top + 1) + 'px'; + line.style.bottom = ''; } + else { // orientation 'bottom' + var itemSetHeight = this.parent.itemSet.props.height; // TODO: this is nasty + var lineHeight = itemSetHeight - this.parent.top - this.parent.height + this.top; + box.style.top = (this.parent.height - this.top - this.height || 0) + 'px'; + line.style.top = (itemSetHeight - lineHeight) + 'px'; + line.style.bottom = '0'; + } - return {x:xVia, y:yVia}; + dot.style.top = (-this.props.dot.height / 2) + 'px'; }; + module.exports = BoxItem; + + +/***/ }, +/* 33 */ +/***/ function(module, exports, __webpack_require__) { + + var Item = __webpack_require__(30); + /** - * Draw a line between two nodes - * @param {CanvasRenderingContext2D} ctx - * @private + * @constructor PointItem + * @extends Item + * @param {Object} data Object containing parameters start + * content, className. + * @param {{toScreen: function, toTime: function}} conversion + * Conversion functions from time to screen and vice versa + * @param {Object} [options] Configuration options + * // TODO: describe available options */ - Edge.prototype._line = function (ctx) { - // draw a straight line - ctx.beginPath(); - ctx.moveTo(this.from.x, this.from.y); - if (this.options.smoothCurves.enabled == true) { - if (this.options.smoothCurves.dynamic == false) { - var via = this._getViaCoordinates(); - if (via.x == null) { - ctx.lineTo(this.to.x, this.to.y); - ctx.stroke(); - return null; - } - else { - // this.via.x = via.x; - // this.via.y = via.y; - ctx.quadraticCurveTo(via.x,via.y,this.to.x, this.to.y); - ctx.stroke(); - return via; - } + function PointItem (data, conversion, options) { + this.props = { + dot: { + top: 0, + width: 0, + height: 0 + }, + content: { + height: 0, + marginLeft: 0 } - else { - ctx.quadraticCurveTo(this.via.x,this.via.y,this.to.x, this.to.y); - ctx.stroke(); - return this.via; + }; + + // validate data + if (data) { + if (data.start == undefined) { + throw new Error('Property "start" missing in item ' + data); } } - else { - ctx.lineTo(this.to.x, this.to.y); - ctx.stroke(); - return null; - } - }; + + Item.call(this, data, conversion, options); + } + + PointItem.prototype = new Item (null, null, null); /** - * Draw a line from a node to itself, a circle - * @param {CanvasRenderingContext2D} ctx - * @param {Number} x - * @param {Number} y - * @param {Number} radius - * @private + * Check whether this item is visible inside given range + * @returns {{start: Number, end: Number}} range with a timestamp for start and end + * @returns {boolean} True if visible */ - Edge.prototype._circle = function (ctx, x, y, radius) { - // draw a circle - ctx.beginPath(); - ctx.arc(x, y, radius, 0, 2 * Math.PI, false); - ctx.stroke(); + PointItem.prototype.isVisible = function(range) { + // determine visibility + // TODO: account for the real width of the item. Right now we just add 1/4 to the window + var interval = (range.end - range.start) / 4; + return (this.data.start > range.start - interval) && (this.data.start < range.end + interval); }; /** - * Draw label with white background and with the middle at (x, y) - * @param {CanvasRenderingContext2D} ctx - * @param {String} text - * @param {Number} x - * @param {Number} y - * @private + * Repaint the item */ - Edge.prototype._label = function (ctx, text, x, y) { - if (text) { - ctx.font = ((this.from.selected || this.to.selected) ? "bold " : "") + - this.options.fontSize + "px " + this.options.fontFace; - var yLine; - - if (this.dirtyLabel == true) { - var lines = String(text).split('\n'); - var lineCount = lines.length; - var fontSize = (Number(this.options.fontSize) + 4); - yLine = y + (1 - lineCount) / 2 * fontSize; + PointItem.prototype.redraw = function() { + var dom = this.dom; + if (!dom) { + // create DOM + this.dom = {}; + dom = this.dom; - var width = ctx.measureText(lines[0]).width; - for (var i = 1; i < lineCount; i++) { - var lineWidth = ctx.measureText(lines[i]).width; - width = lineWidth > width ? lineWidth : width; - } - var height = this.options.fontSize * lineCount; - var left = x - width / 2; - var top = y - height / 2; + // background box + dom.point = document.createElement('div'); + // className is updated in redraw() - // cache - this.labelDimensions = {top:top,left:left,width:width,height:height,yLine:yLine}; - } + // contents box, right from the dot + dom.content = document.createElement('div'); + dom.content.className = 'content'; + dom.point.appendChild(dom.content); + // dot at start + dom.dot = document.createElement('div'); + dom.point.appendChild(dom.dot); - if (this.options.fontFill !== undefined && this.options.fontFill !== null && this.options.fontFill !== "none") { - ctx.fillStyle = this.options.fontFill; - ctx.fillRect(this.labelDimensions.left, - this.labelDimensions.top, - this.labelDimensions.width, - this.labelDimensions.height); - } + // attach this item as attribute + dom.point['timeline-item'] = this; - // draw text - ctx.fillStyle = this.options.fontColor || "black"; - ctx.textAlign = "center"; - ctx.textBaseline = "middle"; - yLine = this.labelDimensions.yLine; - for (var i = 0; i < lineCount; i++) { - ctx.fillText(lines[i], x, yLine); - yLine += fontSize; - } + this.dirty = true; } - }; - - /** - * Redraw a edge as a dashed line - * Draw this edge in the given canvas - * @author David Jordan - * @date 2012-08-08 - * The 2d context of a HTML canvas can be retrieved by canvas.getContext("2d"); - * @param {CanvasRenderingContext2D} ctx - * @private - */ - Edge.prototype._drawDashLine = function(ctx) { - // set style - ctx.strokeStyle = this._getColor(); - ctx.lineWidth = this._getLineWidth(); - var via = null; - // only firefox and chrome support this method, else we use the legacy one. - if (ctx.mozDash !== undefined || ctx.setLineDash !== undefined) { - // configure the dash pattern - var pattern = [0]; - if (this.options.dash.length !== undefined && this.options.dash.gap !== undefined) { - pattern = [this.options.dash.length,this.options.dash.gap]; - } - else { - pattern = [5,5]; + // append DOM to parent DOM + if (!this.parent) { + throw new Error('Cannot redraw item: no parent attached'); + } + if (!dom.point.parentNode) { + var foreground = this.parent.dom.foreground; + if (!foreground) { + throw new Error('Cannot redraw item: parent has no foreground container element'); } + foreground.appendChild(dom.point); + } + this.displayed = true; - // set dash settings for chrome or firefox - if (typeof ctx.setLineDash !== 'undefined') { //Chrome - ctx.setLineDash(pattern); - ctx.lineDashOffset = 0; + // Update DOM when item is marked dirty. An item is marked dirty when: + // - the item is not yet rendered + // - the item's data is changed + // - the item is selected/deselected + if (this.dirty) { + this._updateContents(this.dom.content); + this._updateTitle(this.dom.point); + this._updateDataAttributes(this.dom.point); + this._updateStyle(this.dom.point); - } else { //Firefox - ctx.mozDash = pattern; - ctx.mozDashOffset = 0; - } + // update class + var className = (this.data.className? ' ' + this.data.className : '') + + (this.selected ? ' selected' : ''); + dom.point.className = 'item point' + className; + dom.dot.className = 'item dot' + className; - // draw the line - via = this._line(ctx); + // recalculate size + this.width = dom.point.offsetWidth; + this.height = dom.point.offsetHeight; + this.props.dot.width = dom.dot.offsetWidth; + this.props.dot.height = dom.dot.offsetHeight; + this.props.content.height = dom.content.offsetHeight; - // restore the dash settings. - if (typeof ctx.setLineDash !== 'undefined') { //Chrome - ctx.setLineDash([0]); - ctx.lineDashOffset = 0; + // resize contents + dom.content.style.marginLeft = 2 * this.props.dot.width + 'px'; + //dom.content.style.marginRight = ... + 'px'; // TODO: margin right - } else { //Firefox - ctx.mozDash = [0]; - ctx.mozDashOffset = 0; - } - } - else { // unsupporting smooth lines - // draw dashed line - ctx.beginPath(); - ctx.lineCap = 'round'; - if (this.options.dash.altLength !== undefined) //If an alt dash value has been set add to the array this value - { - ctx.dashedLine(this.from.x,this.from.y,this.to.x,this.to.y, - [this.options.dash.length,this.options.dash.gap,this.options.dash.altLength,this.options.dash.gap]); - } - else if (this.options.dash.length !== undefined && this.options.dash.gap !== undefined) //If a dash and gap value has been set add to the array this value - { - ctx.dashedLine(this.from.x,this.from.y,this.to.x,this.to.y, - [this.options.dash.length,this.options.dash.gap]); - } - else //If all else fails draw a line - { - ctx.moveTo(this.from.x, this.from.y); - ctx.lineTo(this.to.x, this.to.y); - } - ctx.stroke(); - } + dom.dot.style.top = ((this.height - this.props.dot.height) / 2) + 'px'; + dom.dot.style.left = (this.props.dot.width / 2) + 'px'; - // draw label - if (this.label) { - var point; - if (this.options.smoothCurves.enabled == true && via != null) { - var midpointX = 0.5*(0.5*(this.from.x + via.x) + 0.5*(this.to.x + via.x)); - var midpointY = 0.5*(0.5*(this.from.y + via.y) + 0.5*(this.to.y + via.y)); - point = {x:midpointX, y:midpointY}; - } - else { - point = this._pointOnLine(0.5); - } - this._label(ctx, this.label, point.x, point.y); + this.dirty = false; } + + this._repaintDeleteButton(dom.point); }; /** - * Get a point on a line - * @param {Number} percentage. Value between 0 (line start) and 1 (line end) - * @return {Object} point - * @private + * Show the item in the DOM (when not already visible). The items DOM will + * be created when needed. */ - Edge.prototype._pointOnLine = function (percentage) { - return { - x: (1 - percentage) * this.from.x + percentage * this.to.x, - y: (1 - percentage) * this.from.y + percentage * this.to.y + PointItem.prototype.show = function() { + if (!this.displayed) { + this.redraw(); } }; /** - * Get a point on a circle - * @param {Number} x - * @param {Number} y - * @param {Number} radius - * @param {Number} percentage. Value between 0 (line start) and 1 (line end) - * @return {Object} point - * @private + * Hide the item from the DOM (when visible) */ - Edge.prototype._pointOnCircle = function (x, y, radius, percentage) { - var angle = (percentage - 3/8) * 2 * Math.PI; - return { - x: x + radius * Math.cos(angle), - y: y - radius * Math.sin(angle) + PointItem.prototype.hide = function() { + if (this.displayed) { + if (this.dom.point.parentNode) { + this.dom.point.parentNode.removeChild(this.dom.point); + } + + this.top = null; + this.left = null; + + this.displayed = false; } }; /** - * Redraw a edge as a line with an arrow halfway the line - * Draw this edge in the given canvas - * The 2d context of a HTML canvas can be retrieved by canvas.getContext("2d"); - * @param {CanvasRenderingContext2D} ctx - * @private + * Reposition the item horizontally + * @Override */ - Edge.prototype._drawArrowCenter = function(ctx) { - var point; - // set style - ctx.strokeStyle = this._getColor(); - ctx.fillStyle = ctx.strokeStyle; - ctx.lineWidth = this._getLineWidth(); + PointItem.prototype.repositionX = function() { + var start = this.conversion.toScreen(this.data.start); - if (this.from != this.to) { - // draw line - var via = this._line(ctx); + this.left = start - this.props.dot.width; - var angle = Math.atan2((this.to.y - this.from.y), (this.to.x - this.from.x)); - var length = (10 + 5 * this.options.width) * this.options.arrowScaleFactor; - // draw an arrow halfway the line - if (this.options.smoothCurves.enabled == true && via != null) { - var midpointX = 0.5*(0.5*(this.from.x + via.x) + 0.5*(this.to.x + via.x)); - var midpointY = 0.5*(0.5*(this.from.y + via.y) + 0.5*(this.to.y + via.y)); - point = {x:midpointX, y:midpointY}; - } - else { - point = this._pointOnLine(0.5); - } + // reposition point + this.dom.point.style.left = this.left + 'px'; + }; - ctx.arrow(point.x, point.y, angle, length); - ctx.fill(); - ctx.stroke(); + /** + * Reposition the item vertically + * @Override + */ + PointItem.prototype.repositionY = function() { + var orientation = this.options.orientation, + point = this.dom.point; - // draw label - if (this.label) { - this._label(ctx, this.label, point.x, point.y); - } + if (orientation == 'top') { + point.style.top = this.top + 'px'; } else { - // draw circle - var x, y; - var radius = 0.25 * Math.max(100,this.physics.springLength); - var node = this.from; - if (!node.width) { - node.resize(ctx); + point.style.top = (this.parent.height - this.top - this.height) + 'px'; + } + }; + + module.exports = PointItem; + + +/***/ }, +/* 34 */ +/***/ function(module, exports, __webpack_require__) { + + var Hammer = __webpack_require__(19); + var Item = __webpack_require__(30); + var BackgroundGroup = __webpack_require__(31); + var RangeItem = __webpack_require__(29); + + /** + * @constructor BackgroundItem + * @extends Item + * @param {Object} data Object containing parameters start, end + * content, className. + * @param {{toScreen: function, toTime: function}} conversion + * Conversion functions from time to screen and vice versa + * @param {Object} [options] Configuration options + * // TODO: describe options + */ + // TODO: implement support for the BackgroundItem just having a start, then being displayed as a sort of an annotation + function BackgroundItem (data, conversion, options) { + this.props = { + content: { + width: 0 } - if (node.width > node.height) { - x = node.x + node.width * 0.5; - y = node.y - radius; + }; + this.overflow = false; // if contents can overflow (css styling), this flag is set to true + + // validate data + if (data) { + if (data.start == undefined) { + throw new Error('Property "start" missing in item ' + data.id); } - else { - x = node.x + radius; - y = node.y - node.height * 0.5; + if (data.end == undefined) { + throw new Error('Property "end" missing in item ' + data.id); } - this._circle(ctx, x, y, radius); + } - // draw all arrows - var angle = 0.2 * Math.PI; - var length = (10 + 5 * this.options.width) * this.options.arrowScaleFactor; - point = this._pointOnCircle(x, y, radius, 0.5); - ctx.arrow(point.x, point.y, angle, length); - ctx.fill(); - ctx.stroke(); + Item.call(this, data, conversion, options); - // draw label - if (this.label) { - point = this._pointOnCircle(x, y, radius, 0.5); - this._label(ctx, this.label, point.x, point.y); - } - } - }; + this.emptyContent = false; + } + BackgroundItem.prototype = new Item (null, null, null); + BackgroundItem.prototype.baseClassName = 'item background'; + BackgroundItem.prototype.stack = false; /** - * Redraw a edge as a line with an arrow - * Draw this edge in the given canvas - * The 2d context of a HTML canvas can be retrieved by canvas.getContext("2d"); - * @param {CanvasRenderingContext2D} ctx - * @private + * Check whether this item is visible inside given range + * @returns {{start: Number, end: Number}} range with a timestamp for start and end + * @returns {boolean} True if visible */ - Edge.prototype._drawArrow = function(ctx) { - // set style - ctx.strokeStyle = this._getColor(); - ctx.fillStyle = ctx.strokeStyle; - ctx.lineWidth = this._getLineWidth(); + BackgroundItem.prototype.isVisible = function(range) { + // determine visibility + return (this.data.start < range.end) && (this.data.end > range.start); + }; - var angle, length; - //draw a line - if (this.from != this.to) { - angle = Math.atan2((this.to.y - this.from.y), (this.to.x - this.from.x)); - var dx = (this.to.x - this.from.x); - var dy = (this.to.y - this.from.y); - var edgeSegmentLength = Math.sqrt(dx * dx + dy * dy); + /** + * Repaint the item + */ + BackgroundItem.prototype.redraw = function() { + var dom = this.dom; + if (!dom) { + // create DOM + this.dom = {}; + dom = this.dom; - var fromBorderDist = this.from.distanceToBorder(ctx, angle + Math.PI); - var fromBorderPoint = (edgeSegmentLength - fromBorderDist) / edgeSegmentLength; - var xFrom = (fromBorderPoint) * this.from.x + (1 - fromBorderPoint) * this.to.x; - var yFrom = (fromBorderPoint) * this.from.y + (1 - fromBorderPoint) * this.to.y; + // background box + dom.box = document.createElement('div'); + // className is updated in redraw() - var via; - if (this.options.smoothCurves.dynamic == true && this.options.smoothCurves.enabled == true ) { - via = this.via; - } - else if (this.options.smoothCurves.enabled == true) { - via = this._getViaCoordinates(); - } + // contents box + dom.content = document.createElement('div'); + dom.content.className = 'content'; + dom.box.appendChild(dom.content); - if (this.options.smoothCurves.enabled == true && via.x != null) { - angle = Math.atan2((this.to.y - via.y), (this.to.x - via.x)); - dx = (this.to.x - via.x); - dy = (this.to.y - via.y); - edgeSegmentLength = Math.sqrt(dx * dx + dy * dy); - } - var toBorderDist = this.to.distanceToBorder(ctx, angle); - var toBorderPoint = (edgeSegmentLength - toBorderDist) / edgeSegmentLength; + // Note: we do NOT attach this item as attribute to the DOM, + // such that background items cannot be selected + //dom.box['timeline-item'] = this; - var xTo,yTo; - if (this.options.smoothCurves.enabled == true && via.x != null) { - xTo = (1 - toBorderPoint) * via.x + toBorderPoint * this.to.x; - yTo = (1 - toBorderPoint) * via.y + toBorderPoint * this.to.y; - } - else { - xTo = (1 - toBorderPoint) * this.from.x + toBorderPoint * this.to.x; - yTo = (1 - toBorderPoint) * this.from.y + toBorderPoint * this.to.y; - } + this.dirty = true; + } - ctx.beginPath(); - ctx.moveTo(xFrom,yFrom); - if (this.options.smoothCurves.enabled == true && via.x != null) { - ctx.quadraticCurveTo(via.x,via.y,xTo, yTo); - } - else { - ctx.lineTo(xTo, yTo); + // append DOM to parent DOM + if (!this.parent) { + throw new Error('Cannot redraw item: no parent attached'); + } + if (!dom.box.parentNode) { + var background = this.parent.dom.background; + if (!background) { + throw new Error('Cannot redraw item: parent has no background container element'); } - ctx.stroke(); + background.appendChild(dom.box); + } + this.displayed = true; - // draw arrow at the end of the line - length = (10 + 5 * this.options.width) * this.options.arrowScaleFactor; - ctx.arrow(xTo, yTo, angle, length); - ctx.fill(); - ctx.stroke(); + // Update DOM when item is marked dirty. An item is marked dirty when: + // - the item is not yet rendered + // - the item's data is changed + // - the item is selected/deselected + if (this.dirty) { + this._updateContents(this.dom.content); + this._updateTitle(this.dom.content); + this._updateDataAttributes(this.dom.content); + this._updateStyle(this.dom.box); - // draw label - if (this.label) { - var point; - if (this.options.smoothCurves.enabled == true && via != null) { - var midpointX = 0.5*(0.5*(this.from.x + via.x) + 0.5*(this.to.x + via.x)); - var midpointY = 0.5*(0.5*(this.from.y + via.y) + 0.5*(this.to.y + via.y)); - point = {x:midpointX, y:midpointY}; - } - else { - point = this._pointOnLine(0.5); - } - this._label(ctx, this.label, point.x, point.y); - } - } - else { - // draw circle - var node = this.from; - var x, y, arrow; - var radius = 0.25 * Math.max(100,this.physics.springLength); - if (!node.width) { - node.resize(ctx); - } - if (node.width > node.height) { - x = node.x + node.width * 0.5; - y = node.y - radius; - arrow = { - x: x, - y: node.y, - angle: 0.9 * Math.PI - }; - } - else { - x = node.x + radius; - y = node.y - node.height * 0.5; - arrow = { - x: node.x, - y: y, - angle: 0.6 * Math.PI - }; - } - ctx.beginPath(); - // TODO: similarly, for a line without arrows, draw to the border of the nodes instead of the center - ctx.arc(x, y, radius, 0, 2 * Math.PI, false); - ctx.stroke(); + // update class + var className = (this.data.className ? (' ' + this.data.className) : '') + + (this.selected ? ' selected' : ''); + dom.box.className = this.baseClassName + className; - // draw all arrows - var length = (10 + 5 * this.options.width) * this.options.arrowScaleFactor; - ctx.arrow(arrow.x, arrow.y, arrow.angle, length); - ctx.fill(); - ctx.stroke(); + // determine from css whether this box has overflow + this.overflow = window.getComputedStyle(dom.content).overflow !== 'hidden'; - // draw label - if (this.label) { - point = this._pointOnCircle(x, y, radius, 0.5); - this._label(ctx, this.label, point.x, point.y); - } + // recalculate size + this.props.content.width = this.dom.content.offsetWidth; + this.height = 0; // set height zero, so this item will be ignored when stacking items + + this.dirty = false; } }; + /** + * Show the item in the DOM (when not already visible). The items DOM will + * be created when needed. + */ + BackgroundItem.prototype.show = RangeItem.prototype.show; + /** + * Hide the item from the DOM (when visible) + * @return {Boolean} changed + */ + BackgroundItem.prototype.hide = RangeItem.prototype.hide; /** - * Calculate the distance between a point (x3,y3) and a line segment from - * (x1,y1) to (x2,y2). - * http://stackoverflow.com/questions/849211/shortest-distancae-between-a-point-and-a-line-segment - * @param {number} x1 - * @param {number} y1 - * @param {number} x2 - * @param {number} y2 - * @param {number} x3 - * @param {number} y3 - * @private + * Reposition the item horizontally + * @Override */ - Edge.prototype._getDistanceToEdge = function (x1,y1, x2,y2, x3,y3) { // x3,y3 is the point - var returnValue = 0; - if (this.from != this.to) { - if (this.options.smoothCurves.enabled == true) { - var xVia, yVia; - if (this.options.smoothCurves.enabled == true && this.options.smoothCurves.dynamic == true) { - xVia = this.via.x; - yVia = this.via.y; - } - else { - var via = this._getViaCoordinates(); - xVia = via.x; - yVia = via.y; - } - var minDistance = 1e9; - var distance; - var i,t,x,y, lastX, lastY; - for (i = 0; i < 10; i++) { - t = 0.1*i; - x = Math.pow(1-t,2)*x1 + (2*t*(1 - t))*xVia + Math.pow(t,2)*x2; - y = Math.pow(1-t,2)*y1 + (2*t*(1 - t))*yVia + Math.pow(t,2)*y2; - if (i > 0) { - distance = this._getDistanceToLine(lastX,lastY,x,y, x3,y3); - minDistance = distance < minDistance ? distance : minDistance; + BackgroundItem.prototype.repositionX = RangeItem.prototype.repositionX; + + /** + * Reposition the item vertically + * @Override + */ + BackgroundItem.prototype.repositionY = function(margin) { + var onTop = this.options.orientation === 'top'; + this.dom.content.style.top = onTop ? '' : '0'; + this.dom.content.style.bottom = onTop ? '0' : ''; + var height; + + // special positioning for subgroups + if (this.data.subgroup !== undefined) { + var itemSubgroup = this.data.subgroup; + var subgroups = this.parent.subgroups; + var subgroupIndex = subgroups[itemSubgroup].index; + // if the orientation is top, we need to take the difference in height into account. + if (onTop == true) { + // the first subgroup will have to account for the distance from the top to the first item. + height = this.parent.subgroups[itemSubgroup].height + margin.item.vertical; + height += subgroupIndex == 0 ? margin.axis - 0.5*margin.item.vertical : 0; + var newTop = this.parent.top; + for (var subgroup in subgroups) { + if (subgroups.hasOwnProperty(subgroup)) { + if (subgroups[subgroup].visible == true && subgroups[subgroup].index < subgroupIndex) { + newTop += subgroups[subgroup].height + margin.item.vertical; + } } - lastX = x; lastY = y; } - returnValue = minDistance; + + // the others will have to be offset downwards with this same distance. + newTop += subgroupIndex != 0 ? margin.axis - 0.5 * margin.item.vertical : 0; + this.dom.box.style.top = newTop + 'px'; + this.dom.box.style.bottom = ''; } + // and when the orientation is bottom: else { - returnValue = this._getDistanceToLine(x1,y1,x2,y2,x3,y3); + var newTop = this.parent.top; + for (var subgroup in subgroups) { + if (subgroups.hasOwnProperty(subgroup)) { + if (subgroups[subgroup].visible == true && subgroups[subgroup].index > subgroupIndex) { + newTop += subgroups[subgroup].height + margin.item.vertical; + } + } + } + height = this.parent.subgroups[itemSubgroup].height + margin.item.vertical; + this.dom.box.style.top = newTop + 'px'; + this.dom.box.style.bottom = ''; } } + // and in the case of no subgroups: else { - var x, y, dx, dy; - var radius = 0.25 * this.physics.springLength; - var node = this.from; - if (node.width > node.height) { - x = node.x + 0.5 * node.width; - y = node.y - radius; + // we want backgrounds with groups to only show in groups. + if (this.parent instanceof BackgroundGroup) { + // if the item is not in a group: + height = Math.max(this.parent.height, + this.parent.itemSet.body.domProps.center.height, + this.parent.itemSet.body.domProps.centerContainer.height); + this.dom.box.style.top = onTop ? '0' : ''; + this.dom.box.style.bottom = onTop ? '' : '0'; } else { - x = node.x + radius; - y = node.y - 0.5 * node.height; + height = this.parent.height; + // same alignment for items when orientation is top or bottom + this.dom.box.style.top = this.parent.top + 'px'; + this.dom.box.style.bottom = ''; } - dx = x - x3; - dy = y - y3; - returnValue = Math.abs(Math.sqrt(dx*dx + dy*dy) - radius); } + this.dom.box.style.height = height + 'px'; + }; + + module.exports = BackgroundItem; + + +/***/ }, +/* 35 */ +/***/ function(module, exports, __webpack_require__) { + + var keycharm = __webpack_require__(36); + var Emitter = __webpack_require__(11); + var Hammer = __webpack_require__(19); + var util = __webpack_require__(1); + + /** + * Turn an element into an clickToUse element. + * When not active, the element has a transparent overlay. When the overlay is + * clicked, the mode is changed to active. + * When active, the element is displayed with a blue border around it, and + * the interactive contents of the element can be used. When clicked outside + * the element, the elements mode is changed to inactive. + * @param {Element} container + * @constructor + */ + function Activator(container) { + this.active = false; - if (this.labelDimensions.left < x3 && - this.labelDimensions.left + this.labelDimensions.width > x3 && - this.labelDimensions.top < y3 && - this.labelDimensions.top + this.labelDimensions.height > y3) { - return 0; - } - else { - return returnValue; - } - }; + this.dom = { + container: container + }; - Edge.prototype._getDistanceToLine = function(x1,y1,x2,y2,x3,y3) { - var px = x2-x1, - py = y2-y1, - something = px*px + py*py, - u = ((x3 - x1) * px + (y3 - y1) * py) / something; + this.dom.overlay = document.createElement('div'); + this.dom.overlay.className = 'overlay'; - if (u > 1) { - u = 1; - } - else if (u < 0) { - u = 0; + this.dom.container.appendChild(this.dom.overlay); + + this.hammer = Hammer(this.dom.overlay, {prevent_default: false}); + this.hammer.on('tap', this._onTapOverlay.bind(this)); + + // block all touch events (except tap) + var me = this; + var events = [ + 'touch', 'pinch', + 'doubletap', 'hold', + 'dragstart', 'drag', 'dragend', + 'mousewheel', 'DOMMouseScroll' // DOMMouseScroll is needed for Firefox + ]; + events.forEach(function (event) { + me.hammer.on(event, function (event) { + event.stopPropagation(); + }); + }); + + // attach a tap event to the window, in order to deactivate when clicking outside the timeline + this.windowHammer = Hammer(window, {prevent_default: false}); + this.windowHammer.on('tap', function (event) { + // deactivate when clicked outside the container + if (!_hasParent(event.target, container)) { + me.deactivate(); + } + }); + + if (this.keycharm !== undefined) { + this.keycharm.destroy(); } + this.keycharm = keycharm(); - var x = x1 + u * px, - y = y1 + u * py, - dx = x - x3, - dy = y - y3; + // keycharm listener only bounded when active) + this.escListener = this.deactivate.bind(this); + } - //# Note: If the actual distance does not matter, - //# if you only want to compare what this function - //# returns to other results of this function, you - //# can just return the squared distance instead - //# (i.e. remove the sqrt) to gain a little performance + // turn into an event emitter + Emitter(Activator.prototype); - return Math.sqrt(dx*dx + dy*dy); - }; + // The currently active activator + Activator.current = null; /** - * This allows the zoom level of the network to influence the rendering - * - * @param scale + * Destroy the activator. Cleans up all created DOM and event listeners */ - Edge.prototype.setScale = function(scale) { - this.networkScaleInv = 1.0/scale; - }; - + Activator.prototype.destroy = function () { + this.deactivate(); - Edge.prototype.select = function() { - this.selected = true; - }; + // remove dom + this.dom.overlay.parentNode.removeChild(this.dom.overlay); - Edge.prototype.unselect = function() { - this.selected = false; + // cleanup hammer instances + this.hammer = null; + this.windowHammer = null; + // FIXME: cleaning up hammer instances doesn't work (Timeline not removed from memory) }; - Edge.prototype.positionBezierNode = function() { - if (this.via !== null && this.from !== null && this.to !== null) { - this.via.x = 0.5 * (this.from.x + this.to.x); - this.via.y = 0.5 * (this.from.y + this.to.y); + /** + * Activate the element + * Overlay is hidden, element is decorated with a blue shadow border + */ + Activator.prototype.activate = function () { + // we allow only one active activator at a time + if (Activator.current) { + Activator.current.deactivate(); } + Activator.current = this; + + this.active = true; + this.dom.overlay.style.display = 'none'; + util.addClassName(this.dom.container, 'vis-active'); + + this.emit('change'); + this.emit('activate'); + + // ugly hack: bind ESC after emitting the events, as the Network rebinds all + // keyboard events on a 'change' event + this.keycharm.bind('esc', this.escListener); }; /** - * This function draws the control nodes for the manipulator. - * In order to enable this, only set the this.controlNodesEnabled to true. - * @param ctx + * Deactivate the element + * Overlay is displayed on top of the element */ - Edge.prototype._drawControlNodes = function(ctx) { - if (this.controlNodesEnabled == true) { - if (this.controlNodes.from === null && this.controlNodes.to === null) { - var nodeIdFrom = "edgeIdFrom:".concat(this.id); - var nodeIdTo = "edgeIdTo:".concat(this.id); - var constants = { - nodes:{group:'', radius:8}, - physics:{damping:0}, - clustering: {maxNodeSizeIncrements: 0 ,nodeScaling: {width:0, height: 0, radius:0}} - }; - this.controlNodes.from = new Node( - {id:nodeIdFrom, - shape:'dot', - color:{background:'#ff4e00', border:'#3c3c3c', highlight: {background:'#07f968'}} - },{},{},constants); - this.controlNodes.to = new Node( - {id:nodeIdTo, - shape:'dot', - color:{background:'#ff4e00', border:'#3c3c3c', highlight: {background:'#07f968'}} - },{},{},constants); - } - - if (this.controlNodes.from.selected == false && this.controlNodes.to.selected == false) { - this.controlNodes.positions = this.getControlNodePositions(ctx); - this.controlNodes.from.x = this.controlNodes.positions.from.x; - this.controlNodes.from.y = this.controlNodes.positions.from.y; - this.controlNodes.to.x = this.controlNodes.positions.to.x; - this.controlNodes.to.y = this.controlNodes.positions.to.y; - } + Activator.prototype.deactivate = function () { + this.active = false; + this.dom.overlay.style.display = ''; + util.removeClassName(this.dom.container, 'vis-active'); + this.keycharm.unbind('esc', this.escListener); - this.controlNodes.from.draw(ctx); - this.controlNodes.to.draw(ctx); - } - else { - this.controlNodes = {from:null, to:null, positions:{}}; - } + this.emit('change'); + this.emit('deactivate'); }; /** - * Enable control nodes. + * Handle a tap event: activate the container + * @param event * @private */ - Edge.prototype._enableControlNodes = function() { - this.fromBackup = this.from; - this.toBackup = this.to; - this.controlNodesEnabled = true; + Activator.prototype._onTapOverlay = function (event) { + // activate the container + this.activate(); + event.stopPropagation(); }; /** - * disable control nodes and remove from dynamicEdges from old node + * Test whether the element has the requested parent element somewhere in + * its chain of parent nodes. + * @param {HTMLElement} element + * @param {HTMLElement} parent + * @returns {boolean} Returns true when the parent is found somewhere in the + * chain of parent nodes. * @private */ - Edge.prototype._disableControlNodes = function() { - this.fromId = this.from.id; - this.toId = this.to.id; - if (this.fromId != this.fromBackup.id) { // from was changed, remove edge from old 'from' node dynamic edges - this.fromBackup.detachEdge(this); - } - else if (this.toId != this.toBackup.id) { // to was changed, remove edge from old 'to' node dynamic edges - this.toBackup.detachEdge(this); + function _hasParent(element, parent) { + while (element) { + if (element === parent) { + return true + } + element = element.parentNode; } + return false; + } + + module.exports = Activator; - this.fromBackup = null; - this.toBackup = null; - this.controlNodesEnabled = false; - }; +/***/ }, +/* 36 */ +/***/ function(module, exports, __webpack_require__) { + var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict"; /** - * This checks if one of the control nodes is selected and if so, returns the control node object. Else it returns null. - * @param x - * @param y - * @returns {null} - * @private + * Created by Alex on 11/6/2014. */ - Edge.prototype._getSelectedControlNode = function(x,y) { - var positions = this.controlNodes.positions; - var fromDistance = Math.sqrt(Math.pow(x - positions.from.x,2) + Math.pow(y - positions.from.y,2)); - var toDistance = Math.sqrt(Math.pow(x - positions.to.x ,2) + Math.pow(y - positions.to.y ,2)); - if (fromDistance < 15) { - this.connectedNode = this.from; - this.from = this.controlNodes.from; - return this.controlNodes.from; - } - else if (toDistance < 15) { - this.connectedNode = this.to; - this.to = this.controlNodes.to; - return this.controlNodes.to; - } - else { - return null; + // https://github.com/umdjs/umd/blob/master/returnExports.js#L40-L60 + // if the module has no dependencies, the above pattern can be simplified to + (function (root, factory) { + if (true) { + // AMD. Register as an anonymous module. + !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + } else if (typeof exports === 'object') { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(); + } else { + // Browser globals (root is window) + root.keycharm = factory(); } - }; + }(this, function () { + function keycharm(options) { + var preventDefault = options && options.preventDefault || false; - /** - * this resets the control nodes to their original position. - * @private - */ - Edge.prototype._restoreControlNodes = function() { - if (this.controlNodes.from.selected == true) { - this.from = this.connectedNode; - this.connectedNode = null; - this.controlNodes.from.unselect(); - } - else if (this.controlNodes.to.selected == true) { - this.to = this.connectedNode; - this.connectedNode = null; - this.controlNodes.to.unselect(); - } - }; + var _exportFunctions = {}; + var _bound = {keydown:{}, keyup:{}}; + var _keys = {}; + var i; - /** - * this calculates the position of the control nodes on the edges of the parent nodes. - * - * @param ctx - * @returns {{from: {x: number, y: number}, to: {x: *, y: *}}} - */ - Edge.prototype.getControlNodePositions = function(ctx) { - var angle = Math.atan2((this.to.y - this.from.y), (this.to.x - this.from.x)); - var dx = (this.to.x - this.from.x); - var dy = (this.to.y - this.from.y); - var edgeSegmentLength = Math.sqrt(dx * dx + dy * dy); - var fromBorderDist = this.from.distanceToBorder(ctx, angle + Math.PI); - var fromBorderPoint = (edgeSegmentLength - fromBorderDist) / edgeSegmentLength; - var xFrom = (fromBorderPoint) * this.from.x + (1 - fromBorderPoint) * this.to.x; - var yFrom = (fromBorderPoint) * this.from.y + (1 - fromBorderPoint) * this.to.y; + // a - z + for (i = 97; i <= 122; i++) {_keys[String.fromCharCode(i)] = {code:65 + (i - 97), shift: false};} + // A - Z + for (i = 65; i <= 90; i++) {_keys[String.fromCharCode(i)] = {code:i, shift: true};} + // 0 - 9 + for (i = 0; i <= 9; i++) {_keys['' + i] = {code:48 + i, shift: false};} + // F1 - F12 + for (i = 1; i <= 12; i++) {_keys['F' + i] = {code:111 + i, shift: false};} + // num0 - num9 + for (i = 0; i <= 9; i++) {_keys['num' + i] = {code:96 + i, shift: false};} - var via; - if (this.options.smoothCurves.dynamic == true && this.options.smoothCurves.enabled == true) { - via = this.via; - } - else if (this.options.smoothCurves.enabled == true) { - via = this._getViaCoordinates(); - } + // numpad misc + _keys['num*'] = {code:106, shift: false}; + _keys['num+'] = {code:107, shift: false}; + _keys['num-'] = {code:109, shift: false}; + _keys['num/'] = {code:111, shift: false}; + _keys['num.'] = {code:110, shift: false}; + // arrows + _keys['left'] = {code:37, shift: false}; + _keys['up'] = {code:38, shift: false}; + _keys['right'] = {code:39, shift: false}; + _keys['down'] = {code:40, shift: false}; + // extra keys + _keys['space'] = {code:32, shift: false}; + _keys['enter'] = {code:13, shift: false}; + _keys['shift'] = {code:16, shift: undefined}; + _keys['esc'] = {code:27, shift: false}; + _keys['backspace'] = {code:8, shift: false}; + _keys['tab'] = {code:9, shift: false}; + _keys['ctrl'] = {code:17, shift: false}; + _keys['alt'] = {code:18, shift: false}; + _keys['delete'] = {code:46, shift: false}; + _keys['pageup'] = {code:33, shift: false}; + _keys['pagedown'] = {code:34, shift: false}; + // symbols + _keys['='] = {code:187, shift: false}; + _keys['-'] = {code:189, shift: false}; + _keys[']'] = {code:221, shift: false}; + _keys['['] = {code:219, shift: false}; - if (this.options.smoothCurves.enabled == true && via.x != null) { - angle = Math.atan2((this.to.y - via.y), (this.to.x - via.x)); - dx = (this.to.x - via.x); - dy = (this.to.y - via.y); - edgeSegmentLength = Math.sqrt(dx * dx + dy * dy); - } - var toBorderDist = this.to.distanceToBorder(ctx, angle); - var toBorderPoint = (edgeSegmentLength - toBorderDist) / edgeSegmentLength; - var xTo,yTo; - if (this.options.smoothCurves.enabled == true && via.x != null) { - xTo = (1 - toBorderPoint) * via.x + toBorderPoint * this.to.x; - yTo = (1 - toBorderPoint) * via.y + toBorderPoint * this.to.y; - } - else { - xTo = (1 - toBorderPoint) * this.from.x + toBorderPoint * this.to.x; - yTo = (1 - toBorderPoint) * this.from.y + toBorderPoint * this.to.y; + + var down = function(event) {handleEvent(event,'keydown');}; + var up = function(event) {handleEvent(event,'keyup');}; + + // handle the actualy bound key with the event + var handleEvent = function(event,type) { + if (_bound[type][event.keyCode] !== undefined) { + var bound = _bound[type][event.keyCode]; + for (var i = 0; i < bound.length; i++) { + if (bound[i].shift === undefined) { + bound[i].fn(event); + } + else if (bound[i].shift == true && event.shiftKey == true) { + bound[i].fn(event); + } + else if (bound[i].shift == false && event.shiftKey == false) { + bound[i].fn(event); + } + } + + if (preventDefault == true) { + event.preventDefault(); + } + } + }; + + // bind a key to a callback + _exportFunctions.bind = function(key, callback, type) { + if (type === undefined) { + type = 'keydown'; + } + if (_keys[key] === undefined) { + throw new Error("unsupported key: " + key); + } + if (_bound[type][_keys[key].code] === undefined) { + _bound[type][_keys[key].code] = []; + } + _bound[type][_keys[key].code].push({fn:callback, shift:_keys[key].shift}); + }; + + + // bind all keys to a call back (demo purposes) + _exportFunctions.bindAll = function(callback, type) { + if (type === undefined) { + type = 'keydown'; + } + for (var key in _keys) { + if (_keys.hasOwnProperty(key)) { + _exportFunctions.bind(key,callback,type); + } + } + }; + + // get the key label from an event + _exportFunctions.getKey = function(event) { + for (var key in _keys) { + if (_keys.hasOwnProperty(key)) { + if (event.shiftKey == true && _keys[key].shift == true && event.keyCode == _keys[key].code) { + return key; + } + else if (event.shiftKey == false && _keys[key].shift == false && event.keyCode == _keys[key].code) { + return key; + } + else if (event.keyCode == _keys[key].code && key == 'shift') { + return key; + } + } + } + return "unknown key, currently not supported"; + }; + + // unbind either a specific callback from a key or all of them (by leaving callback undefined) + _exportFunctions.unbind = function(key, callback, type) { + if (type === undefined) { + type = 'keydown'; + } + if (_keys[key] === undefined) { + throw new Error("unsupported key: " + key); + } + if (callback !== undefined) { + var newBindings = []; + var bound = _bound[type][_keys[key].code]; + if (bound !== undefined) { + for (var i = 0; i < bound.length; i++) { + if (!(bound[i].fn == callback && bound[i].shift == _keys[key].shift)) { + newBindings.push(_bound[type][_keys[key].code][i]); + } + } + } + _bound[type][_keys[key].code] = newBindings; + } + else { + _bound[type][_keys[key].code] = []; + } + }; + + // reset all bound variables. + _exportFunctions.reset = function() { + _bound = {keydown:{}, keyup:{}}; + }; + + // unbind all listeners and reset all variables. + _exportFunctions.destroy = function() { + _bound = {keydown:{}, keyup:{}}; + window.removeEventListener('keydown', down, true); + window.removeEventListener('keyup', up, true); + }; + + // create listeners. + window.addEventListener('keydown',down,true); + window.addEventListener('keyup',up,true); + + // return the public functions. + return _exportFunctions; } - return {from:{x:xFrom,y:yFrom},to:{x:xTo,y:yTo}}; - }; + return keycharm; + })); + + - module.exports = Edge; /***/ }, -/* 38 */ +/* 37 */ /***/ function(module, exports, __webpack_require__) { var util = __webpack_require__(1); + var Component = __webpack_require__(23); + var TimeStep = __webpack_require__(38); + var DateUtil = __webpack_require__(24); + var moment = __webpack_require__(2); /** - * @class Groups - * This class can store groups and properties specific for groups. + * A horizontal time axis + * @param {{dom: Object, domProps: Object, emitter: Emitter, range: Range}} body + * @param {Object} [options] See TimeAxis.setOptions for the available + * options. + * @constructor TimeAxis + * @extends Component */ - function Groups() { - this.clear(); - this.defaultIndex = 0; - } + function TimeAxis (body, options) { + this.dom = { + foreground: null, + majorLines: [], + majorTexts: [], + minorLines: [], + minorTexts: [], + redundant: { + majorLines: [], + majorTexts: [], + minorLines: [], + minorTexts: [] + } + }; + this.props = { + range: { + start: 0, + end: 0, + minimumStep: 0 + }, + lineTop: 0 + }; + + this.defaultOptions = { + orientation: 'bottom', // supported: 'top', 'bottom' + // TODO: implement timeaxis orientations 'left' and 'right' + showMinorLabels: true, + showMajorLabels: true, + format: null + }; + this.options = util.extend({}, this.defaultOptions); + this.body = body; - /** - * default constants for group colors - */ - Groups.DEFAULT = [ - {border: "#2B7CE9", background: "#97C2FC", highlight: {border: "#2B7CE9", background: "#D2E5FF"}, hover: {border: "#2B7CE9", background: "#D2E5FF"}}, // blue - {border: "#FFA500", background: "#FFFF00", highlight: {border: "#FFA500", background: "#FFFFA3"}, hover: {border: "#FFA500", background: "#FFFFA3"}}, // yellow - {border: "#FA0A10", background: "#FB7E81", highlight: {border: "#FA0A10", background: "#FFAFB1"}, hover: {border: "#FA0A10", background: "#FFAFB1"}}, // red - {border: "#41A906", background: "#7BE141", highlight: {border: "#41A906", background: "#A1EC76"}, hover: {border: "#41A906", background: "#A1EC76"}}, // green - {border: "#E129F0", background: "#EB7DF4", highlight: {border: "#E129F0", background: "#F0B3F5"}, hover: {border: "#E129F0", background: "#F0B3F5"}}, // magenta - {border: "#7C29F0", background: "#AD85E4", highlight: {border: "#7C29F0", background: "#D3BDF0"}, hover: {border: "#7C29F0", background: "#D3BDF0"}}, // purple - {border: "#C37F00", background: "#FFA807", highlight: {border: "#C37F00", background: "#FFCA66"}, hover: {border: "#C37F00", background: "#FFCA66"}}, // orange - {border: "#4220FB", background: "#6E6EFD", highlight: {border: "#4220FB", background: "#9B9BFD"}, hover: {border: "#4220FB", background: "#9B9BFD"}}, // darkblue - {border: "#FD5A77", background: "#FFC0CB", highlight: {border: "#FD5A77", background: "#FFD1D9"}, hover: {border: "#FD5A77", background: "#FFD1D9"}}, // pink - {border: "#4AD63A", background: "#C2FABC", highlight: {border: "#4AD63A", background: "#E6FFE3"}, hover: {border: "#4AD63A", background: "#E6FFE3"}} // mint - ]; + // create the HTML DOM + this._create(); + + this.setOptions(options); + } + TimeAxis.prototype = new Component(); /** - * Clear all groups + * Set options for the TimeAxis. + * Parameters will be merged in current options. + * @param {Object} options Available options: + * {string} [orientation] + * {boolean} [showMinorLabels] + * {boolean} [showMajorLabels] */ - Groups.prototype.clear = function () { - this.groups = {}; - this.groups.length = function() - { - var i = 0; - for ( var p in this ) { - if (this.hasOwnProperty(p)) { - i++; + TimeAxis.prototype.setOptions = function(options) { + if (options) { + // copy all options that we know + util.selectiveExtend(['orientation', 'showMinorLabels', 'showMajorLabels','hiddenDates', 'format'], this.options, options); + + // apply locale to moment.js + // TODO: not so nice, this is applied globally to moment.js + if ('locale' in options) { + if (typeof moment.locale === 'function') { + // moment.js 2.8.1+ + moment.locale(options.locale); + } + else { + moment.lang(options.locale); } } - return i; } }; - /** - * get group properties of a groupname. If groupname is not found, a new group - * is added. - * @param {*} groupname Can be a number, string, Date, etc. - * @return {Object} group The created group, containing all group properties + * Create the HTML DOM for the TimeAxis */ - Groups.prototype.get = function (groupname) { - var group = this.groups[groupname]; - if (group == undefined) { - // create new group - var index = this.defaultIndex % Groups.DEFAULT.length; - this.defaultIndex++; - group = {}; - group.color = Groups.DEFAULT[index]; - this.groups[groupname] = group; - } + TimeAxis.prototype._create = function() { + this.dom.foreground = document.createElement('div'); + this.dom.background = document.createElement('div'); - return group; + this.dom.foreground.className = 'timeaxis foreground'; + this.dom.background.className = 'timeaxis background'; }; /** - * Add a custom group style - * @param {String} groupname - * @param {Object} style An object containing borderColor, - * backgroundColor, etc. - * @return {Object} group The created group object + * Destroy the TimeAxis */ - Groups.prototype.add = function (groupname, style) { - this.groups[groupname] = style; - if (style.color) { - style.color = util.parseColor(style.color); + TimeAxis.prototype.destroy = function() { + // remove from DOM + if (this.dom.foreground.parentNode) { + this.dom.foreground.parentNode.removeChild(this.dom.foreground); + } + if (this.dom.background.parentNode) { + this.dom.background.parentNode.removeChild(this.dom.background); } - return style; - }; - - module.exports = Groups; - -/***/ }, -/* 39 */ -/***/ function(module, exports, __webpack_require__) { + this.body = null; + }; /** - * @class Images - * This class loads images and keeps them stored. + * Repaint the component + * @return {boolean} Returns true if the component is resized */ - function Images() { - this.images = {}; + TimeAxis.prototype.redraw = function () { + var options = this.options; + var props = this.props; + var foreground = this.dom.foreground; + var background = this.dom.background; - this.callback = undefined; - } + // determine the correct parent DOM element (depending on option orientation) + var parent = (options.orientation == 'top') ? this.body.dom.top : this.body.dom.bottom; + var parentChanged = (foreground.parentNode !== parent); - /** - * Set an onload callback function. This will be called each time an image - * is loaded - * @param {function} callback - */ - Images.prototype.setOnloadCallback = function(callback) { - this.callback = callback; - }; + // calculate character width and height + this._calculateCharSize(); - /** - * - * @param {string} url Url of the image - * @param {string} url Url of an image to use if the url image is not found - * @return {Image} img The image object - */ - Images.prototype.load = function(url, brokenUrl) { - var img = this.images[url]; - if (img == undefined) { - // create the image - var images = this; - img = new Image(); - this.images[url] = img; - img.onload = function() { - if (images.callback) { - images.callback(this); - } - }; - - img.onerror = function () { - this.src = brokenUrl; - if (images.callback) { - images.callback(this); - } - }; - - img.src = url; - } + // TODO: recalculate sizes only needed when parent is resized or options is changed + var orientation = this.options.orientation, + showMinorLabels = this.options.showMinorLabels, + showMajorLabels = this.options.showMajorLabels; - return img; - }; + // determine the width and height of the elemens for the axis + props.minorLabelHeight = showMinorLabels ? props.minorCharHeight : 0; + props.majorLabelHeight = showMajorLabels ? props.majorCharHeight : 0; + props.height = props.minorLabelHeight + props.majorLabelHeight; + props.width = foreground.offsetWidth; - module.exports = Images; + props.minorLineHeight = this.body.domProps.root.height - props.majorLabelHeight - + (options.orientation == 'top' ? this.body.domProps.bottom.height : this.body.domProps.top.height); + props.minorLineWidth = 1; // TODO: really calculate width + props.majorLineHeight = props.minorLineHeight + props.majorLabelHeight; + props.majorLineWidth = 1; // TODO: really calculate width + + // take foreground and background offline while updating (is almost twice as fast) + var foregroundNextSibling = foreground.nextSibling; + var backgroundNextSibling = background.nextSibling; + foreground.parentNode && foreground.parentNode.removeChild(foreground); + background.parentNode && background.parentNode.removeChild(background); + foreground.style.height = this.props.height + 'px'; -/***/ }, -/* 40 */ -/***/ function(module, exports, __webpack_require__) { + this._repaintLabels(); - var util = __webpack_require__(1); + // put DOM online again (at the same place) + if (foregroundNextSibling) { + parent.insertBefore(foreground, foregroundNextSibling); + } + else { + parent.appendChild(foreground) + } + if (backgroundNextSibling) { + this.body.dom.backgroundVertical.insertBefore(background, backgroundNextSibling); + } + else { + this.body.dom.backgroundVertical.appendChild(background) + } + + return this._isResized() || parentChanged; + }; /** - * @class Node - * A node. A node can be connected to other nodes via one or multiple edges. - * @param {object} properties An object containing properties for the node. All - * properties are optional, except for the id. - * {number} id Id of the node. Required - * {string} label Text label for the node - * {number} x Horizontal position of the node - * {number} y Vertical position of the node - * {string} shape Node shape, available: - * "database", "circle", "ellipse", - * "box", "image", "text", "dot", - * "star", "triangle", "triangleDown", - * "square" - * {string} image An image url - * {string} title An title text, can be HTML - * {anytype} group A group name or number - * @param {Network.Images} imagelist A list with images. Only needed - * when the node has an image - * @param {Network.Groups} grouplist A list with groups. Needed for - * retrieving group properties - * @param {Object} constants An object with default values for - * example for the color - * + * Repaint major and minor text labels and vertical grid lines + * @private */ - function Node(properties, imagelist, grouplist, networkConstants) { - var constants = util.selectiveBridgeObject(['nodes'],networkConstants); - this.options = constants.nodes; - - this.selected = false; - this.hover = false; + TimeAxis.prototype._repaintLabels = function () { + var orientation = this.options.orientation; - this.edges = []; // all edges connected to this node - this.dynamicEdges = []; - this.reroutedEdges = {}; + // calculate range and step (step such that we have space for 7 characters per label) + var start = util.convert(this.body.range.start, 'Number'); + var end = util.convert(this.body.range.end, 'Number'); + var timeLabelsize = this.body.util.toTime((this.props.minorCharWidth || 10) * 7).valueOf(); + var minimumStep = timeLabelsize - DateUtil.getHiddenDurationBefore(this.body.hiddenDates, this.body.range, timeLabelsize); + minimumStep -= this.body.util.toTime(0).valueOf(); - this.fontDrawThreshold = 3; + var step = new TimeStep(new Date(start), new Date(end), minimumStep, this.body.hiddenDates); + if (this.options.format) { + step.setFormat(this.options.format); + } + this.step = step; - // set defaults for the properties - this.id = undefined; - this.x = null; - this.y = null; - this.allowedToMoveX = false; - this.allowedToMoveY = false; - this.xFixed = false; - this.yFixed = false; - this.horizontalAlignLeft = true; // these are for the navigation controls - this.verticalAlignTop = true; // these are for the navigation controls - this.baseRadiusValue = networkConstants.nodes.radius; - this.radiusFixed = false; - this.level = -1; - this.preassignedLevel = false; - this.hierarchyEnumerated = false; - this.labelDimensions = {top:0,left:0,width:0,height:0,yLine:0}; // could be cached + // Move all DOM elements to a "redundant" list, where they + // can be picked for re-use, and clear the lists with lines and texts. + // At the end of the function _repaintLabels, left over elements will be cleaned up + var dom = this.dom; + dom.redundant.majorLines = dom.majorLines; + dom.redundant.majorTexts = dom.majorTexts; + dom.redundant.minorLines = dom.minorLines; + dom.redundant.minorTexts = dom.minorTexts; + dom.majorLines = []; + dom.majorTexts = []; + dom.minorLines = []; + dom.minorTexts = []; + step.first(); + var xFirstMajorLabel = undefined; + var max = 0; + while (step.hasNext() && max < 1000) { + max++; + var cur = step.getCurrent(); + var x = this.body.util.toScreen(cur); + var isMajor = step.isMajor(); - this.imagelist = imagelist; - this.grouplist = grouplist; - // physics properties - this.fx = 0.0; // external force x - this.fy = 0.0; // external force y - this.vx = 0.0; // velocity x - this.vy = 0.0; // velocity y - this.damping = networkConstants.physics.damping; // written every time gravity is calculated - this.fixedData = {x:null,y:null}; + // TODO: lines must have a width, such that we can create css backgrounds - this.setProperties(properties, constants); + if (this.options.showMinorLabels) { + this._repaintMinorText(x, step.getLabelMinor(), orientation); + } - // creating the variables for clustering - this.resetCluster(); - this.dynamicEdgesLength = 0; - this.clusterSession = 0; - this.clusterSizeWidthFactor = networkConstants.clustering.nodeScaling.width; - this.clusterSizeHeightFactor = networkConstants.clustering.nodeScaling.height; - this.clusterSizeRadiusFactor = networkConstants.clustering.nodeScaling.radius; - this.maxNodeSizeIncrements = networkConstants.clustering.maxNodeSizeIncrements; - this.growthIndicator = 0; + if (isMajor && this.options.showMajorLabels) { + if (x > 0) { + if (xFirstMajorLabel == undefined) { + xFirstMajorLabel = x; + } + this._repaintMajorText(x, step.getLabelMajor(), orientation); + } + this._repaintMajorLine(x, orientation); + } + else { + this._repaintMinorLine(x, orientation); + } - // variables to tell the node about the network. - this.networkScaleInv = 1; - this.networkScale = 1; - this.canvasTopLeft = {"x": -300, "y": -300}; - this.canvasBottomRight = {"x": 300, "y": 300}; - this.parentEdgeId = null; - } + step.next(); + } - /** - * (re)setting the clustering variables and objects - */ - Node.prototype.resetCluster = function() { - // clustering variables - this.formationScale = undefined; // this is used to determine when to open the cluster - this.clusterSize = 1; // this signifies the total amount of nodes in this cluster - this.containedNodes = {}; - this.containedEdges = {}; - this.clusterSessions = []; - }; + // create a major label on the left when needed + if (this.options.showMajorLabels) { + var leftTime = this.body.util.toTime(0), + leftText = step.getLabelMajor(leftTime), + widthText = leftText.length * (this.props.majorCharWidth || 10) + 10; // upper bound estimation - /** - * Attach a edge to the node - * @param {Edge} edge - */ - Node.prototype.attachEdge = function(edge) { - if (this.edges.indexOf(edge) == -1) { - this.edges.push(edge); - } - if (this.dynamicEdges.indexOf(edge) == -1) { - this.dynamicEdges.push(edge); + if (xFirstMajorLabel == undefined || widthText < xFirstMajorLabel) { + this._repaintMajorText(0, leftText, orientation); + } } - this.dynamicEdgesLength = this.dynamicEdges.length; + + // Cleanup leftover DOM elements from the redundant list + util.forEach(this.dom.redundant, function (arr) { + while (arr.length) { + var elem = arr.pop(); + if (elem && elem.parentNode) { + elem.parentNode.removeChild(elem); + } + } + }); }; /** - * Detach a edge from the node - * @param {Edge} edge + * Create a minor label for the axis at position x + * @param {Number} x + * @param {String} text + * @param {String} orientation "top" or "bottom" (default) + * @private */ - Node.prototype.detachEdge = function(edge) { - var index = this.edges.indexOf(edge); - if (index != -1) { - this.edges.splice(index, 1); - } - index = this.dynamicEdges.indexOf(edge); - if (index != -1) { - this.dynamicEdges.splice(index, 1); + TimeAxis.prototype._repaintMinorText = function (x, text, orientation) { + // reuse redundant label + var label = this.dom.redundant.minorTexts.shift(); + + if (!label) { + // create new label + var content = document.createTextNode(''); + label = document.createElement('div'); + label.appendChild(content); + label.className = 'text minor'; + this.dom.foreground.appendChild(label); } - this.dynamicEdgesLength = this.dynamicEdges.length; - }; + this.dom.minorTexts.push(label); + + label.childNodes[0].nodeValue = text; + label.style.top = (orientation == 'top') ? (this.props.majorLabelHeight + 'px') : '0'; + label.style.left = x + 'px'; + //label.title = title; // TODO: this is a heavy operation + }; /** - * Set or overwrite properties for the node - * @param {Object} properties an object with properties - * @param {Object} constants and object with default, global properties + * Create a Major label for the axis at position x + * @param {Number} x + * @param {String} text + * @param {String} orientation "top" or "bottom" (default) + * @private */ - Node.prototype.setProperties = function(properties, constants) { - if (!properties) { - return; + TimeAxis.prototype._repaintMajorText = function (x, text, orientation) { + // reuse redundant label + var label = this.dom.redundant.majorTexts.shift(); + + if (!label) { + // create label + var content = document.createTextNode(text); + label = document.createElement('div'); + label.className = 'text major'; + label.appendChild(content); + this.dom.foreground.appendChild(label); } + this.dom.majorTexts.push(label); - var fields = ['borderWidth','borderWidthSelected','shape','image','brokenImage','radius','fontColor', - 'fontSize','fontFace','fontFill','group','mass' - ]; - util.selectiveDeepExtend(fields, this.options, properties); + label.childNodes[0].nodeValue = text; + //label.title = title; // TODO: this is a heavy operation - // basic properties - if (properties.id !== undefined) {this.id = properties.id;} - if (properties.label !== undefined) {this.label = properties.label; this.originalLabel = properties.label;} - if (properties.title !== undefined) {this.title = properties.title;} - if (properties.x !== undefined) {this.x = properties.x;} - if (properties.y !== undefined) {this.y = properties.y;} - if (properties.value !== undefined) {this.value = properties.value;} - if (properties.level !== undefined) {this.level = properties.level; this.preassignedLevel = true;} + label.style.top = (orientation == 'top') ? '0' : (this.props.minorLabelHeight + 'px'); + label.style.left = x + 'px'; + }; - // navigation controls properties - if (properties.horizontalAlignLeft !== undefined) {this.horizontalAlignLeft = properties.horizontalAlignLeft;} - if (properties.verticalAlignTop !== undefined) {this.verticalAlignTop = properties.verticalAlignTop;} - if (properties.triggerFunction !== undefined) {this.triggerFunction = properties.triggerFunction;} + /** + * Create a minor line for the axis at position x + * @param {Number} x + * @param {String} orientation "top" or "bottom" (default) + * @private + */ + TimeAxis.prototype._repaintMinorLine = function (x, orientation) { + // reuse redundant line + var line = this.dom.redundant.minorLines.shift(); - if (this.id === undefined) { - throw "Node must have an id"; + if (!line) { + // create vertical line + line = document.createElement('div'); + line.className = 'grid vertical minor'; + this.dom.background.appendChild(line); } + this.dom.minorLines.push(line); - // copy group properties - if (typeof this.options.group === 'number' || (typeof this.options.group === 'string' && this.options.group != '')) { - var groupObj = this.grouplist.get(this.options.group); - for (var prop in groupObj) { - if (groupObj.hasOwnProperty(prop)) { - this.options[prop] = groupObj[prop]; - } - } + var props = this.props; + if (orientation == 'top') { + line.style.top = props.majorLabelHeight + 'px'; } - - - // individual shape properties - if (properties.radius !== undefined) {this.baseRadiusValue = this.options.radius;} - if (properties.color !== undefined) {this.options.color = util.parseColor(properties.color);} - - if (this.options.image!== undefined && this.options.image!= "") { - if (this.imagelist) { - this.imageObj = this.imagelist.load(this.options.image, this.options.brokenImage); - } - else { - throw "No imagelist provided"; - } + else { + line.style.top = this.body.domProps.top.height + 'px'; } + line.style.height = props.minorLineHeight + 'px'; + line.style.left = (x - props.minorLineWidth / 2) + 'px'; + }; - if (properties.allowedToMoveX !== undefined) { - this.xFixed = !properties.allowedToMoveX; - this.allowedToMoveX = properties.allowedToMoveX; - } - else if (properties.x !== undefined && this.allowedToMoveX == false) { - this.xFixed = true; + /** + * Create a Major line for the axis at position x + * @param {Number} x + * @param {String} orientation "top" or "bottom" (default) + * @private + */ + TimeAxis.prototype._repaintMajorLine = function (x, orientation) { + // reuse redundant line + var line = this.dom.redundant.majorLines.shift(); + + if (!line) { + // create vertical line + line = document.createElement('DIV'); + line.className = 'grid vertical major'; + this.dom.background.appendChild(line); } + this.dom.majorLines.push(line); - - if (properties.allowedToMoveY !== undefined) { - this.yFixed = !properties.allowedToMoveY; - this.allowedToMoveY = properties.allowedToMoveY; + var props = this.props; + if (orientation == 'top') { + line.style.top = '0'; } - else if (properties.y !== undefined && this.allowedToMoveY == false) { - this.yFixed = true; + else { + line.style.top = this.body.domProps.top.height + 'px'; } + line.style.left = (x - props.majorLineWidth / 2) + 'px'; + line.style.height = props.majorLineHeight + 'px'; + }; - this.radiusFixed = this.radiusFixed || (properties.radius !== undefined); + /** + * Determine the size of text on the axis (both major and minor axis). + * The size is calculated only once and then cached in this.props. + * @private + */ + TimeAxis.prototype._calculateCharSize = function () { + // Note: We calculate char size with every redraw. Size may change, for + // example when any of the timelines parents had display:none for example. - if (this.options.shape == 'image') { - this.options.radiusMin = constants.nodes.widthMin; - this.options.radiusMax = constants.nodes.widthMax; - } + // determine the char width and height on the minor axis + if (!this.dom.measureCharMinor) { + this.dom.measureCharMinor = document.createElement('DIV'); + this.dom.measureCharMinor.className = 'text minor measure'; + this.dom.measureCharMinor.style.position = 'absolute'; + this.dom.measureCharMinor.appendChild(document.createTextNode('0')); + this.dom.foreground.appendChild(this.dom.measureCharMinor); + } + this.props.minorCharHeight = this.dom.measureCharMinor.clientHeight; + this.props.minorCharWidth = this.dom.measureCharMinor.clientWidth; + // determine the char width and height on the major axis + if (!this.dom.measureCharMajor) { + this.dom.measureCharMajor = document.createElement('DIV'); + this.dom.measureCharMajor.className = 'text major measure'; + this.dom.measureCharMajor.style.position = 'absolute'; - // choose draw method depending on the shape - switch (this.options.shape) { - case 'database': this.draw = this._drawDatabase; this.resize = this._resizeDatabase; break; - case 'box': this.draw = this._drawBox; this.resize = this._resizeBox; break; - case 'circle': this.draw = this._drawCircle; this.resize = this._resizeCircle; break; - case 'ellipse': this.draw = this._drawEllipse; this.resize = this._resizeEllipse; break; - // TODO: add diamond shape - case 'image': this.draw = this._drawImage; this.resize = this._resizeImage; break; - case 'text': this.draw = this._drawText; this.resize = this._resizeText; break; - case 'dot': this.draw = this._drawDot; this.resize = this._resizeShape; break; - case 'square': this.draw = this._drawSquare; this.resize = this._resizeShape; break; - case 'triangle': this.draw = this._drawTriangle; this.resize = this._resizeShape; break; - case 'triangleDown': this.draw = this._drawTriangleDown; this.resize = this._resizeShape; break; - case 'star': this.draw = this._drawStar; this.resize = this._resizeShape; break; - default: this.draw = this._drawEllipse; this.resize = this._resizeEllipse; break; + this.dom.measureCharMajor.appendChild(document.createTextNode('0')); + this.dom.foreground.appendChild(this.dom.measureCharMajor); } - // reset the size of the node, this can be changed - this._reset(); - + this.props.majorCharHeight = this.dom.measureCharMajor.clientHeight; + this.props.majorCharWidth = this.dom.measureCharMajor.clientWidth; }; /** - * select this node + * Snap a date to a rounded value. + * The snap intervals are dependent on the current scale and step. + * @param {Date} date the date to be snapped. + * @return {Date} snappedDate */ - Node.prototype.select = function() { - this.selected = true; - this._reset(); + TimeAxis.prototype.snap = function(date) { + return this.step.snap(date); }; - /** - * unselect this node - */ - Node.prototype.unselect = function() { - this.selected = false; - this._reset(); - }; + module.exports = TimeAxis; - /** - * Reset the calculated size of the node, forces it to recalculate its size - */ - Node.prototype.clearSizeCache = function() { - this._reset(); - }; +/***/ }, +/* 38 */ +/***/ function(module, exports, __webpack_require__) { + + var moment = __webpack_require__(2); + var DateUtil = __webpack_require__(24); + var util = __webpack_require__(1); /** - * Reset the calculated size of the node, forces it to recalculate its size - * @private + * @constructor TimeStep + * The class TimeStep is an iterator for dates. You provide a start date and an + * end date. The class itself determines the best scale (step size) based on the + * provided start Date, end Date, and minimumStep. + * + * If minimumStep is provided, the step size is chosen as close as possible + * to the minimumStep but larger than minimumStep. If minimumStep is not + * provided, the scale is set to 1 DAY. + * The minimumStep should correspond with the onscreen size of about 6 characters + * + * Alternatively, you can set a scale by hand. + * After creation, you can initialize the class by executing first(). Then you + * can iterate from the start date to the end date via next(). You can check if + * the end date is reached with the function hasNext(). After each step, you can + * retrieve the current date via getCurrent(). + * The TimeStep has scales ranging from milliseconds, seconds, minutes, hours, + * days, to years. + * + * Version: 1.2 + * + * @param {Date} [start] The start date, for example new Date(2010, 9, 21) + * or new Date(2010, 9, 21, 23, 45, 00) + * @param {Date} [end] The end date + * @param {Number} [minimumStep] Optional. Minimum step size in milliseconds */ - Node.prototype._reset = function() { - this.width = undefined; - this.height = undefined; + function TimeStep(start, end, minimumStep, hiddenDates) { + // variables + this.current = new Date(); + this._start = new Date(); + this._end = new Date(); + + this.autoScale = true; + this.scale = 'day'; + this.step = 1; + + // initialize the range + this.setRange(start, end, minimumStep); + + // hidden Dates options + this.switchedDay = false; + this.switchedMonth = false; + this.switchedYear = false; + this.hiddenDates = hiddenDates; + if (hiddenDates === undefined) { + this.hiddenDates = []; + } + + this.format = TimeStep.FORMAT; // default formatting + } + + // Time formatting + TimeStep.FORMAT = { + minorLabels: { + millisecond:'SSS', + second: 's', + minute: 'HH:mm', + hour: 'HH:mm', + weekday: 'ddd D', + day: 'D', + month: 'MMM', + year: 'YYYY' + }, + majorLabels: { + millisecond:'HH:mm:ss', + second: 'D MMMM HH:mm', + minute: 'ddd D MMMM', + hour: 'ddd D MMMM', + weekday: 'MMMM YYYY', + day: 'MMMM YYYY', + month: 'YYYY', + year: '' + } }; /** - * get the title of this node. - * @return {string} title The title of the node, or undefined when no title - * has been set. + * Set custom formatting for the minor an major labels of the TimeStep. + * Both `minorLabels` and `majorLabels` are an Object with properties: + * 'millisecond, 'second, 'minute', 'hour', 'weekday, 'day, 'month, 'year'. + * @param {{minorLabels: Object, majorLabels: Object}} format */ - Node.prototype.getTitle = function() { - return typeof this.title === "function" ? this.title() : this.title; + TimeStep.prototype.setFormat = function (format) { + var defaultFormat = util.deepExtend({}, TimeStep.FORMAT); + this.format = util.deepExtend(defaultFormat, format); }; /** - * Calculate the distance to the border of the Node - * @param {CanvasRenderingContext2D} ctx - * @param {Number} angle Angle in radians - * @returns {number} distance Distance to the border in pixels + * Set a new range + * If minimumStep is provided, the step size is chosen as close as possible + * to the minimumStep but larger than minimumStep. If minimumStep is not + * provided, the scale is set to 1 DAY. + * The minimumStep should correspond with the onscreen size of about 6 characters + * @param {Date} [start] The start date and time. + * @param {Date} [end] The end date and time. + * @param {int} [minimumStep] Optional. Minimum step size in milliseconds */ - Node.prototype.distanceToBorder = function (ctx, angle) { - var borderWidth = 1; - - if (!this.width) { - this.resize(ctx); + TimeStep.prototype.setRange = function(start, end, minimumStep) { + if (!(start instanceof Date) || !(end instanceof Date)) { + throw "No legal start or end date in method setRange"; } - switch (this.options.shape) { - case 'circle': - case 'dot': - return this.options.radius+ borderWidth; - - case 'ellipse': - var a = this.width / 2; - var b = this.height / 2; - var w = (Math.sin(angle) * a); - var h = (Math.cos(angle) * b); - return a * b / Math.sqrt(w * w + h * h); - - // TODO: implement distanceToBorder for database - // TODO: implement distanceToBorder for triangle - // TODO: implement distanceToBorder for triangleDown - - case 'box': - case 'image': - case 'text': - default: - if (this.width) { - return Math.min( - Math.abs(this.width / 2 / Math.cos(angle)), - Math.abs(this.height / 2 / Math.sin(angle))) + borderWidth; - // TODO: reckon with border radius too in case of box - } - else { - return 0; - } + this._start = (start != undefined) ? new Date(start.valueOf()) : new Date(); + this._end = (end != undefined) ? new Date(end.valueOf()) : new Date(); + if (this.autoScale) { + this.setMinimumStep(minimumStep); } - // TODO: implement calculation of distance to border for all shapes - }; - - /** - * Set forces acting on the node - * @param {number} fx Force in horizontal direction - * @param {number} fy Force in vertical direction - */ - Node.prototype._setForce = function(fx, fy) { - this.fx = fx; - this.fy = fy; }; /** - * Add forces acting on the node - * @param {number} fx Force in horizontal direction - * @param {number} fy Force in vertical direction - * @private + * Set the range iterator to the start date. */ - Node.prototype._addForce = function(fx, fy) { - this.fx += fx; - this.fy += fy; + TimeStep.prototype.first = function() { + this.current = new Date(this._start.valueOf()); + this.roundToMinor(); }; /** - * Perform one discrete step for the node - * @param {number} interval Time interval in seconds + * Round the current date to the first minor date value + * This must be executed once when the current date is set to start Date */ - Node.prototype.discreteStep = function(interval) { - if (!this.xFixed) { - var dx = this.damping * this.vx; // damping force - var ax = (this.fx - dx) / this.options.mass; // acceleration - this.vx += ax * interval; // velocity - this.x += this.vx * interval; // position - } - else { - this.fx = 0; - this.vx = 0; + TimeStep.prototype.roundToMinor = function() { + // round to floor + // IMPORTANT: we have no breaks in this switch! (this is no bug) + //noinspection FallthroughInSwitchStatementJS + switch (this.scale) { + case 'year': + this.current.setFullYear(this.step * Math.floor(this.current.getFullYear() / this.step)); + this.current.setMonth(0); + case 'month': this.current.setDate(1); + case 'day': // intentional fall through + case 'weekday': this.current.setHours(0); + case 'hour': this.current.setMinutes(0); + case 'minute': this.current.setSeconds(0); + case 'second': this.current.setMilliseconds(0); + //case 'millisecond': // nothing to do for milliseconds } - if (!this.yFixed) { - var dy = this.damping * this.vy; // damping force - var ay = (this.fy - dy) / this.options.mass; // acceleration - this.vy += ay * interval; // velocity - this.y += this.vy * interval; // position - } - else { - this.fy = 0; - this.vy = 0; + if (this.step != 1) { + // round down to the first minor value that is a multiple of the current step size + switch (this.scale) { + case 'millisecond': this.current.setMilliseconds(this.current.getMilliseconds() - this.current.getMilliseconds() % this.step); break; + case 'second': this.current.setSeconds(this.current.getSeconds() - this.current.getSeconds() % this.step); break; + case 'minute': this.current.setMinutes(this.current.getMinutes() - this.current.getMinutes() % this.step); break; + case 'hour': this.current.setHours(this.current.getHours() - this.current.getHours() % this.step); break; + case 'weekday': // intentional fall through + case 'day': this.current.setDate((this.current.getDate()-1) - (this.current.getDate()-1) % this.step + 1); break; + case 'month': this.current.setMonth(this.current.getMonth() - this.current.getMonth() % this.step); break; + case 'year': this.current.setFullYear(this.current.getFullYear() - this.current.getFullYear() % this.step); break; + default: break; + } } }; - + /** + * Check if the there is a next step + * @return {boolean} true if the current date has not passed the end date + */ + TimeStep.prototype.hasNext = function () { + return (this.current.valueOf() <= this._end.valueOf()); + }; /** - * Perform one discrete step for the node - * @param {number} interval Time interval in seconds - * @param {number} maxVelocity The speed limit imposed on the velocity + * Do the next step */ - Node.prototype.discreteStepLimited = function(interval, maxVelocity) { - if (!this.xFixed) { - var dx = this.damping * this.vx; // damping force - var ax = (this.fx - dx) / this.options.mass; // acceleration - this.vx += ax * interval; // velocity - this.vx = (Math.abs(this.vx) > maxVelocity) ? ((this.vx > 0) ? maxVelocity : -maxVelocity) : this.vx; - this.x += this.vx * interval; // position + TimeStep.prototype.next = function() { + var prev = this.current.valueOf(); + + // Two cases, needed to prevent issues with switching daylight savings + // (end of March and end of October) + if (this.current.getMonth() < 6) { + switch (this.scale) { + case 'millisecond': + + this.current = new Date(this.current.valueOf() + this.step); break; + case 'second': this.current = new Date(this.current.valueOf() + this.step * 1000); break; + case 'minute': this.current = new Date(this.current.valueOf() + this.step * 1000 * 60); break; + case 'hour': + this.current = new Date(this.current.valueOf() + this.step * 1000 * 60 * 60); + // in case of skipping an hour for daylight savings, adjust the hour again (else you get: 0h 5h 9h ... instead of 0h 4h 8h ...) + var h = this.current.getHours(); + this.current.setHours(h - (h % this.step)); + break; + case 'weekday': // intentional fall through + case 'day': this.current.setDate(this.current.getDate() + this.step); break; + case 'month': this.current.setMonth(this.current.getMonth() + this.step); break; + case 'year': this.current.setFullYear(this.current.getFullYear() + this.step); break; + default: break; + } } else { - this.fx = 0; - this.vx = 0; + switch (this.scale) { + case 'millisecond': this.current = new Date(this.current.valueOf() + this.step); break; + case 'second': this.current.setSeconds(this.current.getSeconds() + this.step); break; + case 'minute': this.current.setMinutes(this.current.getMinutes() + this.step); break; + case 'hour': this.current.setHours(this.current.getHours() + this.step); break; + case 'weekday': // intentional fall through + case 'day': this.current.setDate(this.current.getDate() + this.step); break; + case 'month': this.current.setMonth(this.current.getMonth() + this.step); break; + case 'year': this.current.setFullYear(this.current.getFullYear() + this.step); break; + default: break; + } } - if (!this.yFixed) { - var dy = this.damping * this.vy; // damping force - var ay = (this.fy - dy) / this.options.mass; // acceleration - this.vy += ay * interval; // velocity - this.vy = (Math.abs(this.vy) > maxVelocity) ? ((this.vy > 0) ? maxVelocity : -maxVelocity) : this.vy; - this.y += this.vy * interval; // position + if (this.step != 1) { + // round down to the correct major value + switch (this.scale) { + case 'millisecond': if(this.current.getMilliseconds() < this.step) this.current.setMilliseconds(0); break; + case 'second': if(this.current.getSeconds() < this.step) this.current.setSeconds(0); break; + case 'minute': if(this.current.getMinutes() < this.step) this.current.setMinutes(0); break; + case 'hour': if(this.current.getHours() < this.step) this.current.setHours(0); break; + case 'weekday': // intentional fall through + case 'day': if(this.current.getDate() < this.step+1) this.current.setDate(1); break; + case 'month': if(this.current.getMonth() < this.step) this.current.setMonth(0); break; + case 'year': break; // nothing to do for year + default: break; + } } - else { - this.fy = 0; - this.vy = 0; + + // safety mechanism: if current time is still unchanged, move to the end + if (this.current.valueOf() == prev) { + this.current = new Date(this._end.valueOf()); } - }; - /** - * Check if this node has a fixed x and y position - * @return {boolean} true if fixed, false if not - */ - Node.prototype.isFixed = function() { - return (this.xFixed && this.yFixed); + DateUtil.stepOverHiddenDates(this, prev); }; - /** - * Check if this node is moving - * @param {number} vmin the minimum velocity considered as "moving" - * @return {boolean} true if moving, false if it has no velocity - */ - Node.prototype.isMoving = function(vmin) { - var velocity = Math.sqrt(Math.pow(this.vx,2) + Math.pow(this.vy,2)); - // this.velocity = Math.sqrt(Math.pow(this.vx,2) + Math.pow(this.vy,2)) - return (velocity > vmin); - }; /** - * check if this node is selecte - * @return {boolean} selected True if node is selected, else false + * Get the current datetime + * @return {Date} current The current date */ - Node.prototype.isSelected = function() { - return this.selected; + TimeStep.prototype.getCurrent = function() { + return this.current; }; /** - * Retrieve the value of the node. Can be undefined - * @return {Number} value + * Set a custom scale. Autoscaling will be disabled. + * For example setScale(SCALE.MINUTES, 5) will result + * in minor steps of 5 minutes, and major steps of an hour. + * + * @param {string} newScale + * A scale. Choose from 'millisecond, 'second, + * 'minute', 'hour', 'weekday, 'day, 'month, 'year'. + * @param {Number} newStep A step size, by default 1. Choose for + * example 1, 2, 5, or 10. */ - Node.prototype.getValue = function() { - return this.value; + TimeStep.prototype.setScale = function(newScale, newStep) { + this.scale = newScale; + + if (newStep > 0) { + this.step = newStep; + } + + this.autoScale = false; }; /** - * Calculate the distance from the nodes location to the given location (x,y) - * @param {Number} x - * @param {Number} y - * @return {Number} value + * Enable or disable autoscaling + * @param {boolean} enable If true, autoascaling is set true */ - Node.prototype.getDistance = function(x, y) { - var dx = this.x - x, - dy = this.y - y; - return Math.sqrt(dx * dx + dy * dy); + TimeStep.prototype.setAutoScale = function (enable) { + this.autoScale = enable; }; /** - * Adjust the value range of the node. The node will adjust it's radius - * based on its value. - * @param {Number} min - * @param {Number} max + * Automatically determine the scale that bests fits the provided minimum step + * @param {Number} [minimumStep] The minimum step size in milliseconds */ - Node.prototype.setValueRange = function(min, max) { - if (!this.radiusFixed && this.value !== undefined) { - if (max == min) { - this.options.radius= (this.options.radiusMin + this.options.radiusMax) / 2; - } - else { - var scale = (this.options.radiusMax - this.options.radiusMin) / (max - min); - this.options.radius= (this.value - min) * scale + this.options.radiusMin; - } + TimeStep.prototype.setMinimumStep = function(minimumStep) { + if (minimumStep == undefined) { + return; } - this.baseRadiusValue = this.options.radius; - }; - /** - * Draw this node in the given canvas - * The 2d context of a HTML canvas can be retrieved by canvas.getContext("2d"); - * @param {CanvasRenderingContext2D} ctx - */ - Node.prototype.draw = function(ctx) { - throw "Draw method not initialized for node"; - }; + //var b = asc + ds; - /** - * Recalculate the size of this node in the given canvas - * The 2d context of a HTML canvas can be retrieved by canvas.getContext("2d"); - * @param {CanvasRenderingContext2D} ctx - */ - Node.prototype.resize = function(ctx) { - throw "Resize method not initialized for node"; + var stepYear = (1000 * 60 * 60 * 24 * 30 * 12); + var stepMonth = (1000 * 60 * 60 * 24 * 30); + var stepDay = (1000 * 60 * 60 * 24); + var stepHour = (1000 * 60 * 60); + var stepMinute = (1000 * 60); + var stepSecond = (1000); + var stepMillisecond= (1); + + // find the smallest step that is larger than the provided minimumStep + if (stepYear*1000 > minimumStep) {this.scale = 'year'; this.step = 1000;} + if (stepYear*500 > minimumStep) {this.scale = 'year'; this.step = 500;} + if (stepYear*100 > minimumStep) {this.scale = 'year'; this.step = 100;} + if (stepYear*50 > minimumStep) {this.scale = 'year'; this.step = 50;} + if (stepYear*10 > minimumStep) {this.scale = 'year'; this.step = 10;} + if (stepYear*5 > minimumStep) {this.scale = 'year'; this.step = 5;} + if (stepYear > minimumStep) {this.scale = 'year'; this.step = 1;} + if (stepMonth*3 > minimumStep) {this.scale = 'month'; this.step = 3;} + if (stepMonth > minimumStep) {this.scale = 'month'; this.step = 1;} + if (stepDay*5 > minimumStep) {this.scale = 'day'; this.step = 5;} + if (stepDay*2 > minimumStep) {this.scale = 'day'; this.step = 2;} + if (stepDay > minimumStep) {this.scale = 'day'; this.step = 1;} + if (stepDay/2 > minimumStep) {this.scale = 'weekday'; this.step = 1;} + if (stepHour*4 > minimumStep) {this.scale = 'hour'; this.step = 4;} + if (stepHour > minimumStep) {this.scale = 'hour'; this.step = 1;} + if (stepMinute*15 > minimumStep) {this.scale = 'minute'; this.step = 15;} + if (stepMinute*10 > minimumStep) {this.scale = 'minute'; this.step = 10;} + if (stepMinute*5 > minimumStep) {this.scale = 'minute'; this.step = 5;} + if (stepMinute > minimumStep) {this.scale = 'minute'; this.step = 1;} + if (stepSecond*15 > minimumStep) {this.scale = 'second'; this.step = 15;} + if (stepSecond*10 > minimumStep) {this.scale = 'second'; this.step = 10;} + if (stepSecond*5 > minimumStep) {this.scale = 'second'; this.step = 5;} + if (stepSecond > minimumStep) {this.scale = 'second'; this.step = 1;} + if (stepMillisecond*200 > minimumStep) {this.scale = 'millisecond'; this.step = 200;} + if (stepMillisecond*100 > minimumStep) {this.scale = 'millisecond'; this.step = 100;} + if (stepMillisecond*50 > minimumStep) {this.scale = 'millisecond'; this.step = 50;} + if (stepMillisecond*10 > minimumStep) {this.scale = 'millisecond'; this.step = 10;} + if (stepMillisecond*5 > minimumStep) {this.scale = 'millisecond'; this.step = 5;} + if (stepMillisecond > minimumStep) {this.scale = 'millisecond'; this.step = 1;} }; /** - * Check if this object is overlapping with the provided object - * @param {Object} obj an object with parameters left, top, right, bottom - * @return {boolean} True if location is located on node + * Snap a date to a rounded value. + * The snap intervals are dependent on the current scale and step. + * @param {Date} date the date to be snapped. + * @return {Date} snappedDate */ - Node.prototype.isOverlappingWith = function(obj) { - return (this.left < obj.right && - this.left + this.width > obj.left && - this.top < obj.bottom && - this.top + this.height > obj.top); - }; - - Node.prototype._resizeImage = function (ctx) { - // TODO: pre calculate the image size + TimeStep.prototype.snap = function(date) { + var clone = new Date(date.valueOf()); - if (!this.width || !this.height) { // undefined or 0 - var width, height; - if (this.value) { - this.options.radius= this.baseRadiusValue; - var scale = this.imageObj.height / this.imageObj.width; - if (scale !== undefined) { - width = this.options.radius|| this.imageObj.width; - height = this.options.radius* scale || this.imageObj.height; - } - else { - width = 0; - height = 0; - } + if (this.scale == 'year') { + var year = clone.getFullYear() + Math.round(clone.getMonth() / 12); + clone.setFullYear(Math.round(year / this.step) * this.step); + clone.setMonth(0); + clone.setDate(0); + clone.setHours(0); + clone.setMinutes(0); + clone.setSeconds(0); + clone.setMilliseconds(0); + } + else if (this.scale == 'month') { + if (clone.getDate() > 15) { + clone.setDate(1); + clone.setMonth(clone.getMonth() + 1); + // important: first set Date to 1, after that change the month. } else { - width = this.imageObj.width; - height = this.imageObj.height; + clone.setDate(1); } - this.width = width; - this.height = height; - this.growthIndicator = 0; - if (this.width > 0 && this.height > 0) { - this.width += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeWidthFactor; - this.height += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeHeightFactor; - this.options.radius+= Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeRadiusFactor; - this.growthIndicator = this.width - width; + clone.setHours(0); + clone.setMinutes(0); + clone.setSeconds(0); + clone.setMilliseconds(0); + } + else if (this.scale == 'day') { + //noinspection FallthroughInSwitchStatementJS + switch (this.step) { + case 5: + case 2: + clone.setHours(Math.round(clone.getHours() / 24) * 24); break; + default: + clone.setHours(Math.round(clone.getHours() / 12) * 12); break; } + clone.setMinutes(0); + clone.setSeconds(0); + clone.setMilliseconds(0); } - - }; - - Node.prototype._drawImage = function (ctx) { - this._resizeImage(ctx); - - this.left = this.x - this.width / 2; - this.top = this.y - this.height / 2; - - var yLabel; - if (this.imageObj.width != 0 ) { - // draw the shade - if (this.clusterSize > 1) { - var lineWidth = ((this.clusterSize > 1) ? 10 : 0.0); - lineWidth *= this.networkScaleInv; - lineWidth = Math.min(0.2 * this.width,lineWidth); - - ctx.globalAlpha = 0.5; - ctx.drawImage(this.imageObj, this.left - lineWidth, this.top - lineWidth, this.width + 2*lineWidth, this.height + 2*lineWidth); + else if (this.scale == 'weekday') { + //noinspection FallthroughInSwitchStatementJS + switch (this.step) { + case 5: + case 2: + clone.setHours(Math.round(clone.getHours() / 12) * 12); break; + default: + clone.setHours(Math.round(clone.getHours() / 6) * 6); break; } - - // draw the image - ctx.globalAlpha = 1.0; - ctx.drawImage(this.imageObj, this.left, this.top, this.width, this.height); - yLabel = this.y + this.height / 2; + clone.setMinutes(0); + clone.setSeconds(0); + clone.setMilliseconds(0); } - else { - // image still loading... just draw the label for now - yLabel = this.y; + else if (this.scale == 'hour') { + switch (this.step) { + case 4: + clone.setMinutes(Math.round(clone.getMinutes() / 60) * 60); break; + default: + clone.setMinutes(Math.round(clone.getMinutes() / 30) * 30); break; + } + clone.setSeconds(0); + clone.setMilliseconds(0); + } else if (this.scale == 'minute') { + //noinspection FallthroughInSwitchStatementJS + switch (this.step) { + case 15: + case 10: + clone.setMinutes(Math.round(clone.getMinutes() / 5) * 5); + clone.setSeconds(0); + break; + case 5: + clone.setSeconds(Math.round(clone.getSeconds() / 60) * 60); break; + default: + clone.setSeconds(Math.round(clone.getSeconds() / 30) * 30); break; + } + clone.setMilliseconds(0); } - - this._label(ctx, this.label, this.x, yLabel, undefined, "top"); + else if (this.scale == 'second') { + //noinspection FallthroughInSwitchStatementJS + switch (this.step) { + case 15: + case 10: + clone.setSeconds(Math.round(clone.getSeconds() / 5) * 5); + clone.setMilliseconds(0); + break; + case 5: + clone.setMilliseconds(Math.round(clone.getMilliseconds() / 1000) * 1000); break; + default: + clone.setMilliseconds(Math.round(clone.getMilliseconds() / 500) * 500); break; + } + } + else if (this.scale == 'millisecond') { + var step = this.step > 5 ? this.step / 2 : 1; + clone.setMilliseconds(Math.round(clone.getMilliseconds() / step) * step); + } + + return clone; }; + /** + * Check if the current value is a major value (for example when the step + * is DAY, a major value is each first day of the MONTH) + * @return {boolean} true if current date is major, else false. + */ + TimeStep.prototype.isMajor = function() { + if (this.switchedYear == true) { + this.switchedYear = false; + switch (this.scale) { + case 'year': + case 'month': + case 'weekday': + case 'day': + case 'hour': + case 'minute': + case 'second': + case 'millisecond': + return true; + default: + return false; + } + } + else if (this.switchedMonth == true) { + this.switchedMonth = false; + switch (this.scale) { + case 'weekday': + case 'day': + case 'hour': + case 'minute': + case 'second': + case 'millisecond': + return true; + default: + return false; + } + } + else if (this.switchedDay == true) { + this.switchedDay = false; + switch (this.scale) { + case 'millisecond': + case 'second': + case 'minute': + case 'hour': + return true; + default: + return false; + } + } - Node.prototype._resizeBox = function (ctx) { - if (!this.width) { - var margin = 5; - var textSize = this.getTextSize(ctx); - this.width = textSize.width + 2 * margin; - this.height = textSize.height + 2 * margin; - - this.width += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * 0.5 * this.clusterSizeWidthFactor; - this.height += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * 0.5 * this.clusterSizeHeightFactor; - this.growthIndicator = this.width - (textSize.width + 2 * margin); - // this.options.radius+= Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * 0.5 * this.clusterSizeRadiusFactor; - + switch (this.scale) { + case 'millisecond': + return (this.current.getMilliseconds() == 0); + case 'second': + return (this.current.getSeconds() == 0); + case 'minute': + return (this.current.getHours() == 0) && (this.current.getMinutes() == 0); + case 'hour': + return (this.current.getHours() == 0); + case 'weekday': // intentional fall through + case 'day': + return (this.current.getDate() == 1); + case 'month': + return (this.current.getMonth() == 0); + case 'year': + return false; + default: + return false; } }; - Node.prototype._drawBox = function (ctx) { - this._resizeBox(ctx); - - this.left = this.x - this.width / 2; - this.top = this.y - this.height / 2; - - var clusterLineWidth = 2.5; - var borderWidth = this.options.borderWidth; - var selectionLineWidth = this.options.borderWidthSelected || 2 * this.options.borderWidth; - ctx.strokeStyle = this.selected ? this.options.color.highlight.border : this.hover ? this.options.color.hover.border : this.options.color.border; + /** + * Returns formatted text for the minor axislabel, depending on the current + * date and the scale. For example when scale is MINUTE, the current time is + * formatted as "hh:mm". + * @param {Date} [date] custom date. if not provided, current date is taken + */ + TimeStep.prototype.getLabelMinor = function(date) { + if (date == undefined) { + date = this.current; + } - // draw the outer border - if (this.clusterSize > 1) { - ctx.lineWidth = (this.selected ? selectionLineWidth : borderWidth) + ((this.clusterSize > 1) ? clusterLineWidth : 0.0); - ctx.lineWidth *= this.networkScaleInv; - ctx.lineWidth = Math.min(this.width,ctx.lineWidth); + var format = this.format.minorLabels[this.scale]; + return (format && format.length > 0) ? moment(date).format(format) : ''; + }; - ctx.roundRect(this.left-2*ctx.lineWidth, this.top-2*ctx.lineWidth, this.width+4*ctx.lineWidth, this.height+4*ctx.lineWidth, this.options.radius); - ctx.stroke(); + /** + * Returns formatted text for the major axis label, depending on the current + * date and the scale. For example when scale is MINUTE, the major scale is + * hours, and the hour will be formatted as "hh". + * @param {Date} [date] custom date. if not provided, current date is taken + */ + TimeStep.prototype.getLabelMajor = function(date) { + if (date == undefined) { + date = this.current; } - ctx.lineWidth = (this.selected ? selectionLineWidth : borderWidth) + ((this.clusterSize > 1) ? clusterLineWidth : 0.0); - ctx.lineWidth *= this.networkScaleInv; - ctx.lineWidth = Math.min(this.width,ctx.lineWidth); - ctx.fillStyle = this.selected ? this.options.color.highlight.background : this.options.color.background; + var format = this.format.majorLabels[this.scale]; + return (format && format.length > 0) ? moment(date).format(format) : ''; + }; - ctx.roundRect(this.left, this.top, this.width, this.height, this.options.radius); - ctx.fill(); - ctx.stroke(); + module.exports = TimeStep; - this._label(ctx, this.label, this.x, this.y); - }; +/***/ }, +/* 39 */ +/***/ function(module, exports, __webpack_require__) { - Node.prototype._resizeDatabase = function (ctx) { - if (!this.width) { - var margin = 5; - var textSize = this.getTextSize(ctx); - var size = textSize.width + 2 * margin; - this.width = size; - this.height = size; + var util = __webpack_require__(1); + var Component = __webpack_require__(23); + var moment = __webpack_require__(2); + var locales = __webpack_require__(40); - // scaling used for clustering - this.width += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeWidthFactor; - this.height += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeHeightFactor; - this.options.radius+= Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeRadiusFactor; - this.growthIndicator = this.width - size; - } - }; + /** + * A current time bar + * @param {{range: Range, dom: Object, domProps: Object}} body + * @param {Object} [options] Available parameters: + * {Boolean} [showCurrentTime] + * @constructor CurrentTime + * @extends Component + */ + function CurrentTime (body, options) { + this.body = body; - Node.prototype._drawDatabase = function (ctx) { - this._resizeDatabase(ctx); - this.left = this.x - this.width / 2; - this.top = this.y - this.height / 2; + // default options + this.defaultOptions = { + showCurrentTime: true, - var clusterLineWidth = 2.5; - var borderWidth = this.options.borderWidth; - var selectionLineWidth = this.options.borderWidthSelected || 2 * this.options.borderWidth; + locales: locales, + locale: 'en' + }; + this.options = util.extend({}, this.defaultOptions); + this.offset = 0; - ctx.strokeStyle = this.selected ? this.options.color.highlight.border : this.hover ? this.options.color.hover.border : this.options.color.border; + this._create(); - // draw the outer border - if (this.clusterSize > 1) { - ctx.lineWidth = (this.selected ? selectionLineWidth : borderWidth) + ((this.clusterSize > 1) ? clusterLineWidth : 0.0); - ctx.lineWidth *= this.networkScaleInv; - ctx.lineWidth = Math.min(this.width,ctx.lineWidth); + this.setOptions(options); + } - ctx.database(this.x - this.width/2 - 2*ctx.lineWidth, this.y - this.height*0.5 - 2*ctx.lineWidth, this.width + 4*ctx.lineWidth, this.height + 4*ctx.lineWidth); - ctx.stroke(); - } - ctx.lineWidth = (this.selected ? selectionLineWidth : borderWidth) + ((this.clusterSize > 1) ? clusterLineWidth : 0.0); - ctx.lineWidth *= this.networkScaleInv; - ctx.lineWidth = Math.min(this.width,ctx.lineWidth); + CurrentTime.prototype = new Component(); - ctx.fillStyle = this.selected ? this.options.color.highlight.background : this.hover ? this.options.color.hover.background : this.options.color.background; - ctx.database(this.x - this.width/2, this.y - this.height*0.5, this.width, this.height); - ctx.fill(); - ctx.stroke(); + /** + * Create the HTML DOM for the current time bar + * @private + */ + CurrentTime.prototype._create = function() { + var bar = document.createElement('div'); + bar.className = 'currenttime'; + bar.style.position = 'absolute'; + bar.style.top = '0px'; + bar.style.height = '100%'; - this._label(ctx, this.label, this.x, this.y); + this.bar = bar; }; + /** + * Destroy the CurrentTime bar + */ + CurrentTime.prototype.destroy = function () { + this.options.showCurrentTime = false; + this.redraw(); // will remove the bar from the DOM and stop refreshing - Node.prototype._resizeCircle = function (ctx) { - if (!this.width) { - var margin = 5; - var textSize = this.getTextSize(ctx); - var diameter = Math.max(textSize.width, textSize.height) + 2 * margin; - this.options.radius = diameter / 2; - - this.width = diameter; - this.height = diameter; + this.body = null; + }; - // scaling used for clustering - // this.width += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * 0.5 * this.clusterSizeWidthFactor; - // this.height += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * 0.5 * this.clusterSizeHeightFactor; - this.options.radius += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * 0.5 * this.clusterSizeRadiusFactor; - this.growthIndicator = this.options.radius- 0.5*diameter; + /** + * Set options for the component. Options will be merged in current options. + * @param {Object} options Available parameters: + * {boolean} [showCurrentTime] + */ + CurrentTime.prototype.setOptions = function(options) { + if (options) { + // copy all options that we know + util.selectiveExtend(['showCurrentTime', 'locale', 'locales'], this.options, options); } }; - Node.prototype._drawCircle = function (ctx) { - this._resizeCircle(ctx); - this.left = this.x - this.width / 2; - this.top = this.y - this.height / 2; + /** + * Repaint the component + * @return {boolean} Returns true if the component is resized + */ + CurrentTime.prototype.redraw = function() { + if (this.options.showCurrentTime) { + var parent = this.body.dom.backgroundVertical; + if (this.bar.parentNode != parent) { + // attach to the dom + if (this.bar.parentNode) { + this.bar.parentNode.removeChild(this.bar); + } + parent.appendChild(this.bar); - var clusterLineWidth = 2.5; - var borderWidth = this.options.borderWidth; - var selectionLineWidth = this.options.borderWidthSelected || 2 * this.options.borderWidth; + this.start(); + } - ctx.strokeStyle = this.selected ? this.options.color.highlight.border : this.hover ? this.options.color.hover.border : this.options.color.border; + var now = new Date(new Date().valueOf() + this.offset); + var x = this.body.util.toScreen(now); - // draw the outer border - if (this.clusterSize > 1) { - ctx.lineWidth = (this.selected ? selectionLineWidth : borderWidth) + ((this.clusterSize > 1) ? clusterLineWidth : 0.0); - ctx.lineWidth *= this.networkScaleInv; - ctx.lineWidth = Math.min(this.width,ctx.lineWidth); + var locale = this.options.locales[this.options.locale]; + var title = locale.current + ' ' + locale.time + ': ' + moment(now).format('dddd, MMMM Do YYYY, H:mm:ss'); + title = title.charAt(0).toUpperCase() + title.substring(1); - ctx.circle(this.x, this.y, this.options.radius+2*ctx.lineWidth); - ctx.stroke(); + this.bar.style.left = x + 'px'; + this.bar.title = title; } - ctx.lineWidth = (this.selected ? selectionLineWidth : borderWidth) + ((this.clusterSize > 1) ? clusterLineWidth : 0.0); - ctx.lineWidth *= this.networkScaleInv; - ctx.lineWidth = Math.min(this.width,ctx.lineWidth); - - ctx.fillStyle = this.selected ? this.options.color.highlight.background : this.hover ? this.options.color.hover.background : this.options.color.background; - ctx.circle(this.x, this.y, this.options.radius); - ctx.fill(); - ctx.stroke(); - - this._label(ctx, this.label, this.x, this.y); - }; - - Node.prototype._resizeEllipse = function (ctx) { - if (!this.width) { - var textSize = this.getTextSize(ctx); - - this.width = textSize.width * 1.5; - this.height = textSize.height * 2; - if (this.width < this.height) { - this.width = this.height; + else { + // remove the line from the DOM + if (this.bar.parentNode) { + this.bar.parentNode.removeChild(this.bar); } - var defaultSize = this.width; - - // scaling used for clustering - this.width += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeWidthFactor; - this.height += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeHeightFactor; - this.options.radius += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeRadiusFactor; - this.growthIndicator = this.width - defaultSize; + this.stop(); } - }; - Node.prototype._drawEllipse = function (ctx) { - this._resizeEllipse(ctx); - this.left = this.x - this.width / 2; - this.top = this.y - this.height / 2; + return false; + }; - var clusterLineWidth = 2.5; - var borderWidth = this.options.borderWidth; - var selectionLineWidth = this.options.borderWidthSelected || 2 * this.options.borderWidth; + /** + * Start auto refreshing the current time bar + */ + CurrentTime.prototype.start = function() { + var me = this; - ctx.strokeStyle = this.selected ? this.options.color.highlight.border : this.hover ? this.options.color.hover.border : this.options.color.border; + function update () { + me.stop(); - // draw the outer border - if (this.clusterSize > 1) { - ctx.lineWidth = (this.selected ? selectionLineWidth : borderWidth) + ((this.clusterSize > 1) ? clusterLineWidth : 0.0); - ctx.lineWidth *= this.networkScaleInv; - ctx.lineWidth = Math.min(this.width,ctx.lineWidth); + // determine interval to refresh + var scale = me.body.range.conversion(me.body.domProps.center.width).scale; + var interval = 1 / scale / 10; + if (interval < 30) interval = 30; + if (interval > 1000) interval = 1000; - ctx.ellipse(this.left-2*ctx.lineWidth, this.top-2*ctx.lineWidth, this.width+4*ctx.lineWidth, this.height+4*ctx.lineWidth); - ctx.stroke(); - } - ctx.lineWidth = (this.selected ? selectionLineWidth : borderWidth) + ((this.clusterSize > 1) ? clusterLineWidth : 0.0); - ctx.lineWidth *= this.networkScaleInv; - ctx.lineWidth = Math.min(this.width,ctx.lineWidth); + me.redraw(); - ctx.fillStyle = this.selected ? this.options.color.highlight.background : this.hover ? this.options.color.hover.background : this.options.color.background; + // start a timer to adjust for the new time + me.currentTimeTimer = setTimeout(update, interval); + } - ctx.ellipse(this.left, this.top, this.width, this.height); - ctx.fill(); - ctx.stroke(); - this._label(ctx, this.label, this.x, this.y); + update(); }; - Node.prototype._drawDot = function (ctx) { - this._drawShape(ctx, 'circle'); + /** + * Stop auto refreshing the current time bar + */ + CurrentTime.prototype.stop = function() { + if (this.currentTimeTimer !== undefined) { + clearTimeout(this.currentTimeTimer); + delete this.currentTimeTimer; + } }; - Node.prototype._drawTriangle = function (ctx) { - this._drawShape(ctx, 'triangle'); + /** + * Set a current time. This can be used for example to ensure that a client's + * time is synchronized with a shared server time. + * @param {Date | String | Number} time A Date, unix timestamp, or + * ISO date string. + */ + CurrentTime.prototype.setCurrentTime = function(time) { + var t = util.convert(time, 'Date').valueOf(); + var now = new Date().valueOf(); + this.offset = t - now; + this.redraw(); }; - Node.prototype._drawTriangleDown = function (ctx) { - this._drawShape(ctx, 'triangleDown'); + /** + * Get the current time. + * @return {Date} Returns the current time. + */ + CurrentTime.prototype.getCurrentTime = function() { + return new Date(new Date().valueOf() + this.offset); }; - Node.prototype._drawSquare = function (ctx) { - this._drawShape(ctx, 'square'); - }; + module.exports = CurrentTime; - Node.prototype._drawStar = function (ctx) { - this._drawShape(ctx, 'star'); - }; - Node.prototype._resizeShape = function (ctx) { - if (!this.width) { - this.options.radius= this.baseRadiusValue; - var size = 2 * this.options.radius; - this.width = size; - this.height = size; +/***/ }, +/* 40 */ +/***/ function(module, exports, __webpack_require__) { - // scaling used for clustering - this.width += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeWidthFactor; - this.height += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeHeightFactor; - this.options.radius+= Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * 0.5 * this.clusterSizeRadiusFactor; - this.growthIndicator = this.width - size; - } + // English + exports['en'] = { + current: 'current', + time: 'time' }; + exports['en_EN'] = exports['en']; + exports['en_US'] = exports['en']; - Node.prototype._drawShape = function (ctx, shape) { - this._resizeShape(ctx); + // Dutch + exports['nl'] = { + custom: 'aangepaste', + time: 'tijd' + }; + exports['nl_NL'] = exports['nl']; + exports['nl_BE'] = exports['nl']; - this.left = this.x - this.width / 2; - this.top = this.y - this.height / 2; - var clusterLineWidth = 2.5; - var borderWidth = this.options.borderWidth; - var selectionLineWidth = this.options.borderWidthSelected || 2 * this.options.borderWidth; - var radiusMultiplier = 2; +/***/ }, +/* 41 */ +/***/ function(module, exports, __webpack_require__) { - // choose draw method depending on the shape - switch (shape) { - case 'dot': radiusMultiplier = 2; break; - case 'square': radiusMultiplier = 2; break; - case 'triangle': radiusMultiplier = 3; break; - case 'triangleDown': radiusMultiplier = 3; break; - case 'star': radiusMultiplier = 4; break; - } + var Hammer = __webpack_require__(19); + var util = __webpack_require__(1); + var Component = __webpack_require__(23); + var moment = __webpack_require__(2); + var locales = __webpack_require__(40); - ctx.strokeStyle = this.selected ? this.options.color.highlight.border : this.hover ? this.options.color.hover.border : this.options.color.border; - // draw the outer border - if (this.clusterSize > 1) { - ctx.lineWidth = (this.selected ? selectionLineWidth : borderWidth) + ((this.clusterSize > 1) ? clusterLineWidth : 0.0); - ctx.lineWidth *= this.networkScaleInv; - ctx.lineWidth = Math.min(this.width,ctx.lineWidth); + /** + * A custom time bar + * @param {{range: Range, dom: Object}} body + * @param {Object} [options] Available parameters: + * {Boolean} [showCustomTime] + * @constructor CustomTime + * @extends Component + */ - ctx[shape](this.x, this.y, this.options.radius+ radiusMultiplier * ctx.lineWidth); - ctx.stroke(); - } - ctx.lineWidth = (this.selected ? selectionLineWidth : borderWidth) + ((this.clusterSize > 1) ? clusterLineWidth : 0.0); - ctx.lineWidth *= this.networkScaleInv; - ctx.lineWidth = Math.min(this.width,ctx.lineWidth); + function CustomTime (body, options) { + this.body = body; - ctx.fillStyle = this.selected ? this.options.color.highlight.background : this.hover ? this.options.color.hover.background : this.options.color.background; - ctx[shape](this.x, this.y, this.options.radius); - ctx.fill(); - ctx.stroke(); + // default options + this.defaultOptions = { + showCustomTime: false, + locales: locales, + locale: 'en' + }; + this.options = util.extend({}, this.defaultOptions); - if (this.label) { - this._label(ctx, this.label, this.x, this.y + this.height / 2, undefined, 'top',true); - } - }; + this.customTime = new Date(); + this.eventParams = {}; // stores state parameters while dragging the bar - Node.prototype._resizeText = function (ctx) { - if (!this.width) { - var margin = 5; - var textSize = this.getTextSize(ctx); - this.width = textSize.width + 2 * margin; - this.height = textSize.height + 2 * margin; + // create the DOM + this._create(); - // scaling used for clustering - this.width += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeWidthFactor; - this.height += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeHeightFactor; - this.options.radius+= Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeRadiusFactor; - this.growthIndicator = this.width - (textSize.width + 2 * margin); - } - }; + this.setOptions(options); + } - Node.prototype._drawText = function (ctx) { - this._resizeText(ctx); - this.left = this.x - this.width / 2; - this.top = this.y - this.height / 2; + CustomTime.prototype = new Component(); - this._label(ctx, this.label, this.x, this.y); + /** + * Set options for the component. Options will be merged in current options. + * @param {Object} options Available parameters: + * {boolean} [showCustomTime] + */ + CustomTime.prototype.setOptions = function(options) { + if (options) { + // copy all options that we know + util.selectiveExtend(['showCustomTime', 'locale', 'locales'], this.options, options); + } }; + /** + * Create the DOM for the custom time + * @private + */ + CustomTime.prototype._create = function() { + var bar = document.createElement('div'); + bar.className = 'customtime'; + bar.style.position = 'absolute'; + bar.style.top = '0px'; + bar.style.height = '100%'; + this.bar = bar; - Node.prototype._label = function (ctx, text, x, y, align, baseline, labelUnderNode) { - if (text && Number(this.options.fontSize) * this.networkScale > this.fontDrawThreshold) { - ctx.font = (this.selected ? "bold " : "") + this.options.fontSize + "px " + this.options.fontFace; + var drag = document.createElement('div'); + drag.style.position = 'relative'; + drag.style.top = '0px'; + drag.style.left = '-10px'; + drag.style.height = '100%'; + drag.style.width = '20px'; + bar.appendChild(drag); - var lines = text.split('\n'); - var lineCount = lines.length; - var fontSize = (Number(this.options.fontSize) + 4); // TODO: why is this +4 ? - var yLine = y + (1 - lineCount) / 2 * fontSize; - if (labelUnderNode == true) { - yLine = y + (1 - lineCount) / (2 * fontSize); - } + // attach event listeners + this.hammer = Hammer(bar, { + prevent_default: true + }); + this.hammer.on('dragstart', this._onDragStart.bind(this)); + this.hammer.on('drag', this._onDrag.bind(this)); + this.hammer.on('dragend', this._onDragEnd.bind(this)); + }; - // font fill from edges now for nodes! - var width = ctx.measureText(lines[0]).width; - for (var i = 1; i < lineCount; i++) { - var lineWidth = ctx.measureText(lines[i]).width; - width = lineWidth > width ? lineWidth : width; - } - var height = this.options.fontSize * lineCount; - var left = x - width / 2; - var top = y - height / 2; - if (baseline == "top") { - top += 0.5 * fontSize; - } - this.labelDimensions = {top:top,left:left,width:width,height:height,yLine:yLine}; + /** + * Destroy the CustomTime bar + */ + CustomTime.prototype.destroy = function () { + this.options.showCustomTime = false; + this.redraw(); // will remove the bar from the DOM - // create the fontfill background - if (this.options.fontFill !== undefined && this.options.fontFill !== null && this.options.fontFill !== "none") { - ctx.fillStyle = this.options.fontFill; - ctx.fillRect(left, top, width, height); - } + this.hammer.enable(false); + this.hammer = null; - // draw text - ctx.fillStyle = this.options.fontColor || "black"; - ctx.textAlign = align || "center"; - ctx.textBaseline = baseline || "middle"; - for (var i = 0; i < lineCount; i++) { - ctx.fillText(lines[i], x, yLine); - yLine += fontSize; - } - } + this.body = null; }; + /** + * Repaint the component + * @return {boolean} Returns true if the component is resized + */ + CustomTime.prototype.redraw = function () { + if (this.options.showCustomTime) { + var parent = this.body.dom.backgroundVertical; + if (this.bar.parentNode != parent) { + // attach to the dom + if (this.bar.parentNode) { + this.bar.parentNode.removeChild(this.bar); + } + parent.appendChild(this.bar); + } - Node.prototype.getTextSize = function(ctx) { - if (this.label !== undefined) { - ctx.font = (this.selected ? "bold " : "") + this.options.fontSize + "px " + this.options.fontFace; - - var lines = this.label.split('\n'), - height = (Number(this.options.fontSize) + 4) * lines.length, - width = 0; + var x = this.body.util.toScreen(this.customTime); - for (var i = 0, iMax = lines.length; i < iMax; i++) { - width = Math.max(width, ctx.measureText(lines[i]).width); - } + var locale = this.options.locales[this.options.locale]; + var title = locale.time + ': ' + moment(this.customTime).format('dddd, MMMM Do YYYY, H:mm:ss'); + title = title.charAt(0).toUpperCase() + title.substring(1); - return {"width": width, "height": height}; + this.bar.style.left = x + 'px'; + this.bar.title = title; } else { - return {"width": 0, "height": 0}; + // remove the line from the DOM + if (this.bar.parentNode) { + this.bar.parentNode.removeChild(this.bar); + } } + + return false; }; /** - * this is used to determine if a node is visible at all. this is used to determine when it needs to be drawn. - * there is a safety margin of 0.3 * width; - * - * @returns {boolean} + * Set custom time. + * @param {Date | number | string} time */ - Node.prototype.inArea = function() { - if (this.width !== undefined) { - return (this.x + this.width *this.networkScaleInv >= this.canvasTopLeft.x && - this.x - this.width *this.networkScaleInv < this.canvasBottomRight.x && - this.y + this.height*this.networkScaleInv >= this.canvasTopLeft.y && - this.y - this.height*this.networkScaleInv < this.canvasBottomRight.y); - } - else { - return true; - } + CustomTime.prototype.setCustomTime = function(time) { + this.customTime = util.convert(time, 'Date'); + this.redraw(); }; /** - * checks if the core of the node is in the display area, this is used for opening clusters around zoom - * @returns {boolean} + * Retrieve the current custom time. + * @return {Date} customTime */ - Node.prototype.inView = function() { - return (this.x >= this.canvasTopLeft.x && - this.x < this.canvasBottomRight.x && - this.y >= this.canvasTopLeft.y && - this.y < this.canvasBottomRight.y); + CustomTime.prototype.getCustomTime = function() { + return new Date(this.customTime.valueOf()); }; /** - * This allows the zoom level of the network to influence the rendering - * We store the inverted scale and the coordinates of the top left, and bottom right points of the canvas - * - * @param scale - * @param canvasTopLeft - * @param canvasBottomRight + * Start moving horizontally + * @param {Event} event + * @private */ - Node.prototype.setScaleAndPos = function(scale,canvasTopLeft,canvasBottomRight) { - this.networkScaleInv = 1.0/scale; - this.networkScale = scale; - this.canvasTopLeft = canvasTopLeft; - this.canvasBottomRight = canvasBottomRight; - }; + CustomTime.prototype._onDragStart = function(event) { + this.eventParams.dragging = true; + this.eventParams.customTime = this.customTime; + event.stopPropagation(); + event.preventDefault(); + }; /** - * This allows the zoom level of the network to influence the rendering - * - * @param scale + * Perform moving operating. + * @param {Event} event + * @private */ - Node.prototype.setScale = function(scale) { - this.networkScaleInv = 1.0/scale; - this.networkScale = scale; - }; + CustomTime.prototype._onDrag = function (event) { + if (!this.eventParams.dragging) return; + var deltaX = event.gesture.deltaX, + x = this.body.util.toScreen(this.eventParams.customTime) + deltaX, + time = this.body.util.toTime(x); + this.setCustomTime(time); - /** - * set the velocity at 0. Is called when this node is contained in another during clustering - */ - Node.prototype.clearVelocity = function() { - this.vx = 0; - this.vy = 0; - }; + // fire a timechange event + this.body.emitter.emit('timechange', { + time: new Date(this.customTime.valueOf()) + }); + event.stopPropagation(); + event.preventDefault(); + }; /** - * Basic preservation of (kinectic) energy - * - * @param massBeforeClustering + * Stop moving operating. + * @param {event} event + * @private */ - Node.prototype.updateVelocity = function(massBeforeClustering) { - var energyBefore = this.vx * this.vx * massBeforeClustering; - //this.vx = (this.vx < 0) ? -Math.sqrt(energyBefore/this.options.mass) : Math.sqrt(energyBefore/this.options.mass); - this.vx = Math.sqrt(energyBefore/this.options.mass); - energyBefore = this.vy * this.vy * massBeforeClustering; - //this.vy = (this.vy < 0) ? -Math.sqrt(energyBefore/this.options.mass) : Math.sqrt(energyBefore/this.options.mass); - this.vy = Math.sqrt(energyBefore/this.options.mass); + CustomTime.prototype._onDragEnd = function (event) { + if (!this.eventParams.dragging) return; + + // fire a timechanged event + this.body.emitter.emit('timechanged', { + time: new Date(this.customTime.valueOf()) + }); + + event.stopPropagation(); + event.preventDefault(); }; - module.exports = Node; + module.exports = CustomTime; /***/ }, -/* 41 */ +/* 42 */ /***/ function(module, exports, __webpack_require__) { + var Emitter = __webpack_require__(11); + var Hammer = __webpack_require__(19); + var util = __webpack_require__(1); + var DataSet = __webpack_require__(7); + var DataView = __webpack_require__(9); + var Range = __webpack_require__(21); + var Core = __webpack_require__(25); + var TimeAxis = __webpack_require__(37); + var CurrentTime = __webpack_require__(39); + var CustomTime = __webpack_require__(41); + var LineGraph = __webpack_require__(43); + /** - * Popup is a class to create a popup window with some text - * @param {Element} container The container object. - * @param {Number} [x] - * @param {Number} [y] - * @param {String} [text] - * @param {Object} [style] An object containing borderColor, - * backgroundColor, etc. + * Create a timeline visualization + * @param {HTMLElement} container + * @param {vis.DataSet | Array | google.visualization.DataTable} [items] + * @param {Object} [options] See Graph2d.setOptions for the available options. + * @constructor + * @extends Core */ - function Popup(container, x, y, text, style) { - if (container) { - this.container = container; - } - else { - this.container = document.body; + function Graph2d (container, items, groups, options) { + // if the third element is options, the forth is groups (optionally); + if (!(Array.isArray(groups) || groups instanceof DataSet) && groups instanceof Object) { + var forthArgument = options; + options = groups; + groups = forthArgument; } - // x, y and text are optional, see if a style object was passed in their place - if (style === undefined) { - if (typeof x === "object") { - style = x; - x = undefined; - } else if (typeof text === "object") { - style = text; - text = undefined; - } else { - // for backwards compatibility, in case clients other than Network are creating Popup directly - style = { - fontColor: 'black', - fontSize: 14, // px - fontFace: 'verdana', - color: { - border: '#666', - background: '#FFFFC6' - } - } + var me = this; + this.defaultOptions = { + start: null, + end: null, + + autoResize: true, + + orientation: 'bottom', + width: null, + height: null, + maxHeight: null, + minHeight: null + }; + this.options = util.deepExtend({}, this.defaultOptions); + + // Create the DOM, props, and emitter + this._create(container); + + // all components listed here will be repainted automatically + this.components = []; + + this.body = { + dom: this.dom, + domProps: this.props, + emitter: { + on: this.on.bind(this), + off: this.off.bind(this), + emit: this.emit.bind(this) + }, + hiddenDates: [], + util: { + snap: null, // will be specified after TimeAxis is created + toScreen: me._toScreen.bind(me), + toGlobalScreen: me._toGlobalScreen.bind(me), // this refers to the root.width + toTime: me._toTime.bind(me), + toGlobalTime : me._toGlobalTime.bind(me) } + }; + + // range + this.range = new Range(this.body); + this.components.push(this.range); + this.body.range = this.range; + + // time axis + this.timeAxis = new TimeAxis(this.body); + this.components.push(this.timeAxis); + this.body.util.snap = this.timeAxis.snap.bind(this.timeAxis); + + // current time bar + this.currentTime = new CurrentTime(this.body); + this.components.push(this.currentTime); + + // custom time bar + // Note: time bar will be attached in this.setOptions when selected + this.customTime = new CustomTime(this.body); + this.components.push(this.customTime); + + // item set + this.linegraph = new LineGraph(this.body); + this.components.push(this.linegraph); + + this.itemsData = null; // DataSet + this.groupsData = null; // DataSet + + // apply options + if (options) { + this.setOptions(options); + } + + // IMPORTANT: THIS HAPPENS BEFORE SET ITEMS! + if (groups) { + this.setGroups(groups); + } + + // create itemset + if (items) { + this.setItems(items); + } + else { + this.redraw(); } + } + + // Extend the functionality from Core + Graph2d.prototype = new Core(); - this.x = 0; - this.y = 0; - this.padding = 5; + /** + * Set items + * @param {vis.DataSet | Array | google.visualization.DataTable | null} items + */ + Graph2d.prototype.setItems = function(items) { + var initialLoad = (this.itemsData == null); - if (x !== undefined && y !== undefined ) { - this.setPosition(x, y); + // convert to type DataSet when needed + var newDataSet; + if (!items) { + newDataSet = null; } - if (text !== undefined) { - this.setText(text); + else if (items instanceof DataSet || items instanceof DataView) { + newDataSet = items; + } + else { + // turn an array into a dataset + newDataSet = new DataSet(items, { + type: { + start: 'Date', + end: 'Date' + } + }); } - // create the frame - this.frame = document.createElement("div"); - var styleAttr = this.frame.style; - styleAttr.position = "absolute"; - styleAttr.visibility = "hidden"; - styleAttr.border = "1px solid " + style.color.border; - styleAttr.color = style.fontColor; - styleAttr.fontSize = style.fontSize + "px"; - styleAttr.fontFamily = style.fontFace; - styleAttr.padding = this.padding + "px"; - styleAttr.backgroundColor = style.color.background; - styleAttr.borderRadius = "3px"; - styleAttr.MozBorderRadius = "3px"; - styleAttr.WebkitBorderRadius = "3px"; - styleAttr.boxShadow = "3px 3px 10px rgba(128, 128, 128, 0.5)"; - styleAttr.whiteSpace = "nowrap"; - this.container.appendChild(this.frame); - } + // set items + this.itemsData = newDataSet; + this.linegraph && this.linegraph.setItems(newDataSet); - /** - * @param {number} x Horizontal position of the popup window - * @param {number} y Vertical position of the popup window - */ - Popup.prototype.setPosition = function(x, y) { - this.x = parseInt(x); - this.y = parseInt(y); + if (initialLoad) { + if (this.options.start != undefined || this.options.end != undefined) { + var start = this.options.start != undefined ? this.options.start : null; + var end = this.options.end != undefined ? this.options.end : null; + + this.setWindow(start, end, {animate: false}); + } + else { + this.fit({animate: false}); + } + } }; /** - * Set the content for the popup window. This can be HTML code or text. - * @param {string | Element} content + * Set groups + * @param {vis.DataSet | Array | google.visualization.DataTable} groups */ - Popup.prototype.setText = function(content) { - if (content instanceof Element) { - this.frame.innerHTML = ''; - this.frame.appendChild(content); + Graph2d.prototype.setGroups = function(groups) { + // convert to type DataSet when needed + var newDataSet; + if (!groups) { + newDataSet = null; + } + else if (groups instanceof DataSet || groups instanceof DataView) { + newDataSet = groups; } else { - this.frame.innerHTML = content; // string containing text or HTML + // turn an array into a dataset + newDataSet = new DataSet(groups); } + + this.groupsData = newDataSet; + this.linegraph.setGroups(newDataSet); }; /** - * Show the popup window - * @param {boolean} show Optional. Show or hide the window + * Returns an object containing an SVG element with the icon of the group (size determined by iconWidth and iconHeight), the label of the group (content) and the yAxisOrientation of the group (left or right). + * @param groupId + * @param width + * @param height */ - Popup.prototype.show = function (show) { - if (show === undefined) { - show = true; + Graph2d.prototype.getLegend = function(groupId, width, height) { + if (width === undefined) {width = 15;} + if (height === undefined) {height = 15;} + if (this.linegraph.groups[groupId] !== undefined) { + return this.linegraph.groups[groupId].getLegend(width,height); } + else { + return "cannot find group:" + groupId; + } + } - if (show) { - var height = this.frame.clientHeight; - var width = this.frame.clientWidth; - var maxHeight = this.frame.parentNode.clientHeight; - var maxWidth = this.frame.parentNode.clientWidth; - - var top = (this.y - height); - if (top + height + this.padding > maxHeight) { - top = maxHeight - height - this.padding; - } - if (top < this.padding) { - top = this.padding; - } - - var left = this.x; - if (left + width + this.padding > maxWidth) { - left = maxWidth - width - this.padding; - } - if (left < this.padding) { - left = this.padding; - } - - this.frame.style.left = left + "px"; - this.frame.style.top = top + "px"; - this.frame.style.visibility = "visible"; + /** + * This checks if the visible option of the supplied group (by ID) is true or false. + * @param groupId + * @returns {*} + */ + Graph2d.prototype.isGroupVisible = function(groupId) { + if (this.linegraph.groups[groupId] !== undefined) { + return (this.linegraph.groups[groupId].visible && (this.linegraph.options.groups.visibility[groupId] === undefined || this.linegraph.options.groups.visibility[groupId] == true)); } else { - this.hide(); + return false; } - }; + } + /** - * Hide the popup window + * Get the data range of the item set. + * @returns {{min: Date, max: Date}} range A range with a start and end Date. + * When no minimum is found, min==null + * When no maximum is found, max==null */ - Popup.prototype.hide = function () { - this.frame.style.visibility = "hidden"; + Graph2d.prototype.getItemRange = function() { + var min = null; + var max = null; + + // calculate min from start filed + for (var groupId in this.linegraph.groups) { + if (this.linegraph.groups.hasOwnProperty(groupId)) { + if (this.linegraph.groups[groupId].visible == true) { + for (var i = 0; i < this.linegraph.groups[groupId].itemsData.length; i++) { + var item = this.linegraph.groups[groupId].itemsData[i]; + var value = util.convert(item.x, 'Date').valueOf(); + min = min == null ? value : min > value ? value : min; + max = max == null ? value : max < value ? value : max; + } + } + } + } + + return { + min: (min != null) ? new Date(min) : null, + max: (max != null) ? new Date(max) : null + }; }; - module.exports = Popup; + + + module.exports = Graph2d; /***/ }, -/* 42 */ +/* 43 */ /***/ function(module, exports, __webpack_require__) { + var util = __webpack_require__(1); + var DOMutil = __webpack_require__(6); + var DataSet = __webpack_require__(7); + var DataView = __webpack_require__(9); + var Component = __webpack_require__(23); + var DataAxis = __webpack_require__(45); + var GraphGroup = __webpack_require__(46); + var Legend = __webpack_require__(50); + var BarGraphFunctions = __webpack_require__(49); + + var UNGROUPED = '__ungrouped__'; // reserved group id for ungrouped items + /** - * Parse a text source containing data in DOT language into a JSON object. - * The object contains two lists: one with nodes and one with edges. - * - * DOT language reference: http://www.graphviz.org/doc/info/lang.html + * This is the constructor of the LineGraph. It requires a Timeline body and options. * - * @param {String} data Text containing a graph in DOT-notation - * @return {Object} graph An object containing two parameters: - * {Object[]} nodes - * {Object[]} edges + * @param body + * @param options + * @constructor */ - function parseDOT (data) { - dot = data; - return parseGraph(); - } + function LineGraph(body, options) { + this.id = util.randomUUID(); + this.body = body; - // token types enumeration - var TOKENTYPE = { - NULL : 0, - DELIMITER : 1, - IDENTIFIER: 2, - UNKNOWN : 3 - }; + this.defaultOptions = { + yAxisOrientation: 'left', + defaultGroup: 'default', + sort: true, + sampling: true, + graphHeight: '400px', + shaded: { + enabled: false, + orientation: 'bottom' // top, bottom + }, + style: 'line', // line, bar + barChart: { + width: 50, + handleOverlap: 'overlap', + align: 'center' // left, center, right + }, + catmullRom: { + enabled: true, + parametrization: 'centripetal', // uniform (alpha = 0.0), chordal (alpha = 1.0), centripetal (alpha = 0.5) + alpha: 0.5 + }, + drawPoints: { + enabled: true, + size: 6, + style: 'square' // square, circle + }, + dataAxis: { + showMinorLabels: true, + showMajorLabels: true, + icons: false, + width: '40px', + visible: true, + alignZeros: true, + customRange: { + left: {min:undefined, max:undefined}, + right: {min:undefined, max:undefined} + } + //, these options are not set by default, but this shows the format they will be in + //format: { + // left: {decimals: 2}, + // right: {decimals: 2} + //}, + //title: { + // left: { + // text: 'left', + // style: 'color:black;' + // }, + // right: { + // text: 'right', + // style: 'color:black;' + // } + //} + }, + legend: { + enabled: false, + icons: true, + left: { + visible: true, + position: 'top-left' // top/bottom - left,right + }, + right: { + visible: true, + position: 'top-right' // top/bottom - left,right + } + }, + groups: { + visibility: {} + } + }; - // map with all delimiters - var DELIMITERS = { - '{': true, - '}': true, - '[': true, - ']': true, - ';': true, - '=': true, - ',': true, + // options is shared by this ItemSet and all its items + this.options = util.extend({}, this.defaultOptions); + this.dom = {}; + this.props = {}; + this.hammer = null; + this.groups = {}; + this.abortedGraphUpdate = false; + this.autoSizeSVG = false; - '->': true, - '--': true - }; + var me = this; + this.itemsData = null; // DataSet + this.groupsData = null; // DataSet - var dot = ''; // current dot file - var index = 0; // current index in dot file - var c = ''; // current token character in expr - var token = ''; // current token - var tokenType = TOKENTYPE.NULL; // type of the token + // listeners for the DataSet of the items + this.itemListeners = { + 'add': function (event, params, senderId) { + me._onAdd(params.items); + }, + 'update': function (event, params, senderId) { + me._onUpdate(params.items); + }, + 'remove': function (event, params, senderId) { + me._onRemove(params.items); + } + }; - /** - * Get the first character from the dot file. - * The character is stored into the char c. If the end of the dot file is - * reached, the function puts an empty string in c. - */ - function first() { - index = 0; - c = dot.charAt(0); - } + // listeners for the DataSet of the groups + this.groupListeners = { + 'add': function (event, params, senderId) { + me._onAddGroups(params.items); + }, + 'update': function (event, params, senderId) { + me._onUpdateGroups(params.items); + }, + 'remove': function (event, params, senderId) { + me._onRemoveGroups(params.items); + } + }; - /** - * Get the next character from the dot file. - * The character is stored into the char c. If the end of the dot file is - * reached, the function puts an empty string in c. - */ - function next() { - index++; - c = dot.charAt(index); - } + this.items = {}; // object with an Item for every data item + this.selection = []; // list with the ids of all selected nodes + this.lastStart = this.body.range.start; + this.touchParams = {}; // stores properties while dragging - /** - * Preview the next character from the dot file. - * @return {String} cNext - */ - function nextPreview() { - return dot.charAt(index + 1); - } + this.svgElements = {}; + this.setOptions(options); + this.groupsUsingDefaultStyles = [0]; + this.COUNTER = 0; + this.body.emitter.on('rangechanged', function() { + me.lastStart = me.body.range.start; + me.svg.style.left = util.option.asSize(-me.width); + me.redraw.call(me,true); + }); + + // create the HTML DOM + this._create(); + this.framework = {svg: this.svg, svgElements: this.svgElements, options: this.options, groups: this.groups}; + this.body.emitter.emit('change'); - /** - * Test whether given character is alphabetic or numeric - * @param {String} c - * @return {Boolean} isAlphaNumeric - */ - var regexAlphaNumeric = /[a-zA-Z_0-9.:#]/; - function isAlphaNumeric(c) { - return regexAlphaNumeric.test(c); } + LineGraph.prototype = new Component(); + /** - * Merge all properties of object b into object b - * @param {Object} a - * @param {Object} b - * @return {Object} a + * Create the HTML DOM for the ItemSet */ - function merge (a, b) { - if (!a) { - a = {}; - } + LineGraph.prototype._create = function(){ + var frame = document.createElement('div'); + frame.className = 'LineGraph'; + this.dom.frame = frame; - if (b) { - for (var name in b) { - if (b.hasOwnProperty(name)) { - a[name] = b[name]; - } - } - } - return a; - } + // create svg element for graph drawing. + this.svg = document.createElementNS('http://www.w3.org/2000/svg','svg'); + this.svg.style.position = 'relative'; + this.svg.style.height = ('' + this.options.graphHeight).replace('px','') + 'px'; + this.svg.style.display = 'block'; + frame.appendChild(this.svg); + + // data axis + this.options.dataAxis.orientation = 'left'; + this.yAxisLeft = new DataAxis(this.body, this.options.dataAxis, this.svg, this.options.groups); + + this.options.dataAxis.orientation = 'right'; + this.yAxisRight = new DataAxis(this.body, this.options.dataAxis, this.svg, this.options.groups); + delete this.options.dataAxis.orientation; + + // legends + this.legendLeft = new Legend(this.body, this.options.legend, 'left', this.options.groups); + this.legendRight = new Legend(this.body, this.options.legend, 'right', this.options.groups); + + this.show(); + }; /** - * Set a value in an object, where the provided parameter name can be a - * path with nested parameters. For example: - * - * var obj = {a: 2}; - * setValue(obj, 'b.c', 3); // obj = {a: 2, b: {c: 3}} - * - * @param {Object} obj - * @param {String} path A parameter name or dot-separated parameter path, - * like "color.highlight.border". - * @param {*} value + * set the options of the LineGraph. the mergeOptions is used for subObjects that have an enabled element. + * @param {object} options */ - function setValue(obj, path, value) { - var keys = path.split('.'); - var o = obj; - while (keys.length) { - var key = keys.shift(); - if (keys.length) { - // this isn't the end point - if (!o[key]) { - o[key] = {}; - } - o = o[key]; + LineGraph.prototype.setOptions = function(options) { + if (options) { + var fields = ['sampling','defaultGroup','graphHeight','yAxisOrientation','style','barChart','dataAxis','sort','groups']; + if (options.graphHeight === undefined && options.height !== undefined && this.body.domProps.centerContainer.height !== undefined) { + this.autoSizeSVG = true; } - else { - // this is the end point - o[key] = value; + else if (this.body.domProps.centerContainer.height !== undefined && options.graphHeight !== undefined) { + if (parseInt((options.graphHeight + '').replace("px",'')) < this.body.domProps.centerContainer.height) { + this.autoSizeSVG = true; + } } - } - } - - /** - * Add a node to a graph object. If there is already a node with - * the same id, their attributes will be merged. - * @param {Object} graph - * @param {Object} node - */ - function addNode(graph, node) { - var i, len; - var current = null; + util.selectiveDeepExtend(fields, this.options, options); + util.mergeOptions(this.options, options,'catmullRom'); + util.mergeOptions(this.options, options,'drawPoints'); + util.mergeOptions(this.options, options,'shaded'); + util.mergeOptions(this.options, options,'legend'); - // find root graph (in case of subgraph) - var graphs = [graph]; // list with all graphs from current graph to root graph - var root = graph; - while (root.parent) { - graphs.push(root.parent); - root = root.parent; - } + if (options.catmullRom) { + if (typeof options.catmullRom == 'object') { + if (options.catmullRom.parametrization) { + if (options.catmullRom.parametrization == 'uniform') { + this.options.catmullRom.alpha = 0; + } + else if (options.catmullRom.parametrization == 'chordal') { + this.options.catmullRom.alpha = 1.0; + } + else { + this.options.catmullRom.parametrization = 'centripetal'; + this.options.catmullRom.alpha = 0.5; + } + } + } + } - // find existing node (at root level) by its id - if (root.nodes) { - for (i = 0, len = root.nodes.length; i < len; i++) { - if (node.id === root.nodes[i].id) { - current = root.nodes[i]; - break; + if (this.yAxisLeft) { + if (options.dataAxis !== undefined) { + this.yAxisLeft.setOptions(this.options.dataAxis); + this.yAxisRight.setOptions(this.options.dataAxis); } } - } - if (!current) { - // this is a new node - current = { - id: node.id - }; - if (graph.node) { - // clone default attributes - current.attr = merge(current.attr, graph.node); + if (this.legendLeft) { + if (options.legend !== undefined) { + this.legendLeft.setOptions(this.options.legend); + this.legendRight.setOptions(this.options.legend); + } } - } - - // add node to this (sub)graph and all its parent graphs - for (i = graphs.length - 1; i >= 0; i--) { - var g = graphs[i]; - if (!g.nodes) { - g.nodes = []; - } - if (g.nodes.indexOf(current) == -1) { - g.nodes.push(current); + if (this.groups.hasOwnProperty(UNGROUPED)) { + this.groups[UNGROUPED].setOptions(options); } } - // merge attributes - if (node.attr) { - current.attr = merge(current.attr, node.attr); + // this is used to redraw the graph if the visibility of the groups is changed. + if (this.dom.frame) { + this.redraw(true); } - } + }; /** - * Add an edge to a graph object - * @param {Object} graph - * @param {Object} edge + * Hide the component from the DOM */ - function addEdge(graph, edge) { - if (!graph.edges) { - graph.edges = []; - } - graph.edges.push(edge); - if (graph.edge) { - var attr = merge({}, graph.edge); // clone default attributes - edge.attr = merge(attr, edge.attr); // merge attributes + LineGraph.prototype.hide = function() { + // remove the frame containing the items + if (this.dom.frame.parentNode) { + this.dom.frame.parentNode.removeChild(this.dom.frame); } - } + }; + /** - * Create an edge to a graph object - * @param {Object} graph - * @param {String | Number | Object} from - * @param {String | Number | Object} to - * @param {String} type - * @param {Object | null} attr - * @return {Object} edge + * Show the component in the DOM (when not already visible). + * @return {Boolean} changed */ - function createEdge(graph, from, to, type, attr) { - var edge = { - from: from, - to: to, - type: type - }; - - if (graph.edge) { - edge.attr = merge({}, graph.edge); // clone default attributes + LineGraph.prototype.show = function() { + // show frame containing the items + if (!this.dom.frame.parentNode) { + this.body.dom.center.appendChild(this.dom.frame); } - edge.attr = merge(edge.attr || {}, attr); // merge attributes + }; - return edge; - } /** - * Get next token in the current dot file. - * The token and token type are available as token and tokenType + * Set items + * @param {vis.DataSet | null} items */ - function getToken() { - tokenType = TOKENTYPE.NULL; - token = ''; + LineGraph.prototype.setItems = function(items) { + var me = this, + ids, + oldItemsData = this.itemsData; - // skip over whitespaces - while (c == ' ' || c == '\t' || c == '\n' || c == '\r') { // space, tab, enter - next(); + // replace the dataset + if (!items) { + this.itemsData = null; } - - do { - var isComment = false; - - // skip comment - if (c == '#') { - // find the previous non-space character - var i = index - 1; - while (dot.charAt(i) == ' ' || dot.charAt(i) == '\t') { - i--; - } - if (dot.charAt(i) == '\n' || dot.charAt(i) == '') { - // the # is at the start of a line, this is indeed a line comment - while (c != '' && c != '\n') { - next(); - } - isComment = true; - } - } - if (c == '/' && nextPreview() == '/') { - // skip line comment - while (c != '' && c != '\n') { - next(); - } - isComment = true; - } - if (c == '/' && nextPreview() == '*') { - // skip block comment - while (c != '') { - if (c == '*' && nextPreview() == '/') { - // end of block comment found. skip these last two characters - next(); - next(); - break; - } - else { - next(); - } - } - isComment = true; - } - - // skip over whitespaces - while (c == ' ' || c == '\t' || c == '\n' || c == '\r') { // space, tab, enter - next(); - } + else if (items instanceof DataSet || items instanceof DataView) { + this.itemsData = items; } - while (isComment); - - // check for end of dot file - if (c == '') { - // token is still empty - tokenType = TOKENTYPE.DELIMITER; - return; + else { + throw new TypeError('Data must be an instance of DataSet or DataView'); } - // check for delimiters consisting of 2 characters - var c2 = c + nextPreview(); - if (DELIMITERS[c2]) { - tokenType = TOKENTYPE.DELIMITER; - token = c2; - next(); - next(); - return; - } + if (oldItemsData) { + // unsubscribe from old dataset + util.forEach(this.itemListeners, function (callback, event) { + oldItemsData.off(event, callback); + }); - // check for delimiters consisting of 1 character - if (DELIMITERS[c]) { - tokenType = TOKENTYPE.DELIMITER; - token = c; - next(); - return; + // remove all drawn items + ids = oldItemsData.getIds(); + this._onRemove(ids); } - // check for an identifier (number or string) - // TODO: more precise parsing of numbers/strings (and the port separator ':') - if (isAlphaNumeric(c) || c == '-') { - token += c; - next(); - - while (isAlphaNumeric(c)) { - token += c; - next(); - } - if (token == 'false') { - token = false; // convert to boolean - } - else if (token == 'true') { - token = true; // convert to boolean - } - else if (!isNaN(Number(token))) { - token = Number(token); // convert to number - } - tokenType = TOKENTYPE.IDENTIFIER; - return; - } + if (this.itemsData) { + // subscribe to new dataset + var id = this.id; + util.forEach(this.itemListeners, function (callback, event) { + me.itemsData.on(event, callback, id); + }); - // check for a string enclosed by double quotes - if (c == '"') { - next(); - while (c != '' && (c != '"' || (c == '"' && nextPreview() == '"'))) { - token += c; - if (c == '"') { // skip the escape character - next(); - } - next(); - } - if (c != '"') { - throw newSyntaxError('End of string " expected'); - } - next(); - tokenType = TOKENTYPE.IDENTIFIER; - return; + // add all new items + ids = this.itemsData.getIds(); + this._onAdd(ids); } + this._updateUngrouped(); + //this._updateGraph(); + this.redraw(true); + }; - // something unknown is found, wrong characters, a syntax error - tokenType = TOKENTYPE.UNKNOWN; - while (c != '') { - token += c; - next(); - } - throw new SyntaxError('Syntax error in part "' + chop(token, 30) + '"'); - } /** - * Parse a graph. - * @returns {Object} graph + * Set groups + * @param {vis.DataSet} groups */ - function parseGraph() { - var graph = {}; + LineGraph.prototype.setGroups = function(groups) { + var me = this; + var ids; - first(); - getToken(); + // unsubscribe from current dataset + if (this.groupsData) { + util.forEach(this.groupListeners, function (callback, event) { + me.groupsData.unsubscribe(event, callback); + }); - // optional strict keyword - if (token == 'strict') { - graph.strict = true; - getToken(); + // remove all drawn groups + ids = this.groupsData.getIds(); + this.groupsData = null; + this._onRemoveGroups(ids); // note: this will cause a redraw } - // graph or digraph keyword - if (token == 'graph' || token == 'digraph') { - graph.type = token; - getToken(); + // replace the dataset + if (!groups) { + this.groupsData = null; } - - // optional graph id - if (tokenType == TOKENTYPE.IDENTIFIER) { - graph.id = token; - getToken(); + else if (groups instanceof DataSet || groups instanceof DataView) { + this.groupsData = groups; } - - // open angle bracket - if (token != '{') { - throw newSyntaxError('Angle bracket { expected'); + else { + throw new TypeError('Data must be an instance of DataSet or DataView'); } - getToken(); - // statements - parseStatements(graph); + if (this.groupsData) { + // subscribe to new dataset + var id = this.id; + util.forEach(this.groupListeners, function (callback, event) { + me.groupsData.on(event, callback, id); + }); - // close angle bracket - if (token != '}') { - throw newSyntaxError('Angle bracket } expected'); + // draw all ms + ids = this.groupsData.getIds(); + this._onAddGroups(ids); } - getToken(); + this._onUpdate(); + }; - // end of file - if (token !== '') { - throw newSyntaxError('End of file expected'); + + /** + * Update the data + * @param [ids] + * @private + */ + LineGraph.prototype._onUpdate = function(ids) { + this._updateUngrouped(); + this._updateAllGroupData(); + //this._updateGraph(); + this.redraw(true); + }; + LineGraph.prototype._onAdd = function (ids) {this._onUpdate(ids);}; + LineGraph.prototype._onRemove = function (ids) {this._onUpdate(ids);}; + LineGraph.prototype._onUpdateGroups = function (groupIds) { + for (var i = 0; i < groupIds.length; i++) { + var group = this.groupsData.get(groupIds[i]); + this._updateGroup(group, groupIds[i]); } - getToken(); - // remove temporary default properties - delete graph.node; - delete graph.edge; - delete graph.graph; + //this._updateGraph(); + this.redraw(true); + }; + LineGraph.prototype._onAddGroups = function (groupIds) {this._onUpdateGroups(groupIds);}; - return graph; - } /** - * Parse a list with statements. - * @param {Object} graph + * this cleans the group out off the legends and the dataaxis, updates the ungrouped and updates the graph + * @param {Array} groupIds + * @private */ - function parseStatements (graph) { - while (token !== '' && token != '}') { - parseStatement(graph); - if (token == ';') { - getToken(); + LineGraph.prototype._onRemoveGroups = function (groupIds) { + for (var i = 0; i < groupIds.length; i++) { + if (this.groups.hasOwnProperty(groupIds[i])) { + if (this.groups[groupIds[i]].options.yAxisOrientation == 'right') { + this.yAxisRight.removeGroup(groupIds[i]); + this.legendRight.removeGroup(groupIds[i]); + this.legendRight.redraw(); + } + else { + this.yAxisLeft.removeGroup(groupIds[i]); + this.legendLeft.removeGroup(groupIds[i]); + this.legendLeft.redraw(); + } + delete this.groups[groupIds[i]]; } } - } + this._updateUngrouped(); + //this._updateGraph(); + this.redraw(true); + }; + /** - * Parse a single statement. Can be a an attribute statement, node - * statement, a series of node statements and edge statements, or a - * parameter. - * @param {Object} graph + * update a group object with the group dataset entree + * + * @param group + * @param groupId + * @private */ - function parseStatement(graph) { - // parse subgraph - var subgraph = parseSubgraph(graph); - if (subgraph) { - // edge statements - parseEdge(graph, subgraph); - - return; - } - - // parse an attribute statement - var attr = parseAttributeStatement(graph); - if (attr) { - return; - } - - // parse node - if (tokenType != TOKENTYPE.IDENTIFIER) { - throw newSyntaxError('Identifier expected'); - } - var id = token; // id can be a string or a number - getToken(); - - if (token == '=') { - // id statement - getToken(); - if (tokenType != TOKENTYPE.IDENTIFIER) { - throw newSyntaxError('Identifier expected'); + LineGraph.prototype._updateGroup = function (group, groupId) { + if (!this.groups.hasOwnProperty(groupId)) { + this.groups[groupId] = new GraphGroup(group, groupId, this.options, this.groupsUsingDefaultStyles); + if (this.groups[groupId].options.yAxisOrientation == 'right') { + this.yAxisRight.addGroup(groupId, this.groups[groupId]); + this.legendRight.addGroup(groupId, this.groups[groupId]); + } + else { + this.yAxisLeft.addGroup(groupId, this.groups[groupId]); + this.legendLeft.addGroup(groupId, this.groups[groupId]); } - graph[id] = token; - getToken(); - // TODO: implement comma separated list with "a_list: ID=ID [','] [a_list] " } else { - parseNodeStatement(graph, id); + this.groups[groupId].update(group); + if (this.groups[groupId].options.yAxisOrientation == 'right') { + this.yAxisRight.updateGroup(groupId, this.groups[groupId]); + this.legendRight.updateGroup(groupId, this.groups[groupId]); + } + else { + this.yAxisLeft.updateGroup(groupId, this.groups[groupId]); + this.legendLeft.updateGroup(groupId, this.groups[groupId]); + } } - } + this.legendLeft.redraw(); + this.legendRight.redraw(); + }; + /** - * Parse a subgraph - * @param {Object} graph parent graph object - * @return {Object | null} subgraph + * this updates all groups, it is used when there is an update the the itemset. + * + * @private */ - function parseSubgraph (graph) { - var subgraph = null; - - // optional subgraph keyword - if (token == 'subgraph') { - subgraph = {}; - subgraph.type = 'subgraph'; - getToken(); - - // optional graph id - if (tokenType == TOKENTYPE.IDENTIFIER) { - subgraph.id = token; - getToken(); + LineGraph.prototype._updateAllGroupData = function () { + if (this.itemsData != null) { + var groupsContent = {}; + var groupId; + for (groupId in this.groups) { + if (this.groups.hasOwnProperty(groupId)) { + groupsContent[groupId] = []; + } } - } - - // open angle bracket - if (token == '{') { - getToken(); - - if (!subgraph) { - subgraph = {}; + for (var itemId in this.itemsData._data) { + if (this.itemsData._data.hasOwnProperty(itemId)) { + var item = this.itemsData._data[itemId]; + if (groupsContent[item.group] === undefined) { + throw new Error('Cannot find referenced group. Possible reason: items added before groups? Groups need to be added before items, as items refer to groups.') + } + item.x = util.convert(item.x,'Date'); + groupsContent[item.group].push(item); + } } - subgraph.parent = graph; - subgraph.node = graph.node; - subgraph.edge = graph.edge; - subgraph.graph = graph.graph; - - // statements - parseStatements(subgraph); - - // close angle bracket - if (token != '}') { - throw newSyntaxError('Angle bracket } expected'); + for (groupId in this.groups) { + if (this.groups.hasOwnProperty(groupId)) { + this.groups[groupId].setItems(groupsContent[groupId]); + } } - getToken(); + } + }; - // remove temporary default properties - delete subgraph.node; - delete subgraph.edge; - delete subgraph.graph; - delete subgraph.parent; - // register at the parent graph - if (!graph.subgraphs) { - graph.subgraphs = []; + /** + * Create or delete the group holding all ungrouped items. This group is used when + * there are no groups specified. This anonymous group is called 'graph'. + * @protected + */ + LineGraph.prototype._updateUngrouped = function() { + if (this.itemsData && this.itemsData != null) { + var ungroupedCounter = 0; + for (var itemId in this.itemsData._data) { + if (this.itemsData._data.hasOwnProperty(itemId)) { + var item = this.itemsData._data[itemId]; + if (item != undefined) { + if (item.hasOwnProperty('group')) { + if (item.group === undefined) { + item.group = UNGROUPED; + } + } + else { + item.group = UNGROUPED; + } + ungroupedCounter = item.group == UNGROUPED ? ungroupedCounter + 1 : ungroupedCounter; + } + } + } + + if (ungroupedCounter == 0) { + delete this.groups[UNGROUPED]; + this.legendLeft.removeGroup(UNGROUPED); + this.legendRight.removeGroup(UNGROUPED); + this.yAxisLeft.removeGroup(UNGROUPED); + this.yAxisRight.removeGroup(UNGROUPED); } - graph.subgraphs.push(subgraph); + else { + var group = {id: UNGROUPED, content: this.options.defaultGroup}; + this._updateGroup(group, UNGROUPED); + } + } + else { + delete this.groups[UNGROUPED]; + this.legendLeft.removeGroup(UNGROUPED); + this.legendRight.removeGroup(UNGROUPED); + this.yAxisLeft.removeGroup(UNGROUPED); + this.yAxisRight.removeGroup(UNGROUPED); } - return subgraph; - } + this.legendLeft.redraw(); + this.legendRight.redraw(); + }; + /** - * parse an attribute statement like "node [shape=circle fontSize=16]". - * Available keywords are 'node', 'edge', 'graph'. - * The previous list with default attributes will be replaced - * @param {Object} graph - * @returns {String | null} keyword Returns the name of the parsed attribute - * (node, edge, graph), or null if nothing - * is parsed. + * Redraw the component, mandatory function + * @return {boolean} Returns true if the component is resized */ - function parseAttributeStatement (graph) { - // attribute statements - if (token == 'node') { - getToken(); + LineGraph.prototype.redraw = function(forceGraphUpdate) { + var resized = false; - // node attributes - graph.node = parseAttributeList(); - return 'node'; + this.svg.style.height = ('' + this.options.graphHeight).replace('px','') + 'px'; + if (this.lastWidth === undefined && this.width || this.lastWidth != this.width) { + resized = true; } - else if (token == 'edge') { - getToken(); + // check if this component is resized + resized = this._isResized() || resized; + // check whether zoomed (in that case we need to re-stack everything) + var visibleInterval = this.body.range.end - this.body.range.start; + var zoomed = (visibleInterval != this.lastVisibleInterval) || (this.width != this.lastWidth); // we get this from the range changed event + this.lastVisibleInterval = visibleInterval; + this.lastWidth = this.width; - // edge attributes - graph.edge = parseAttributeList(); - return 'edge'; - } - else if (token == 'graph') { - getToken(); + // calculate actual size and position + this.width = this.dom.frame.offsetWidth; - // graph attributes - graph.graph = parseAttributeList(); - return 'graph'; + // the svg element is three times as big as the width, this allows for fully dragging left and right + // without reloading the graph. the controls for this are bound to events in the constructor + if (resized == true) { + this.svg.style.width = util.option.asSize(3*this.width); + this.svg.style.left = util.option.asSize(-this.width); } - return null; - } - - /** - * parse a node statement - * @param {Object} graph - * @param {String | Number} id - */ - function parseNodeStatement(graph, id) { - // node statement - var node = { - id: id - }; - var attr = parseAttributeList(); - if (attr) { - node.attr = attr; + // zoomed is here to ensure that animations are shown correctly. + if (zoomed == true || this.abortedGraphUpdate == true || forceGraphUpdate == true) { + resized = resized || this._updateGraph(); } - addNode(graph, node); - - // edge statements - parseEdge(graph, id); - } - - /** - * Parse an edge or a series of edges - * @param {Object} graph - * @param {String | Number} from Id of the from node - */ - function parseEdge(graph, from) { - while (token == '->' || token == '--') { - var to; - var type = token; - getToken(); - - var subgraph = parseSubgraph(graph); - if (subgraph) { - to = subgraph; - } - else { - if (tokenType != TOKENTYPE.IDENTIFIER) { - throw newSyntaxError('Identifier or subgraph expected'); + else { + // move the whole svg while dragging + if (this.lastStart != 0) { + var offset = this.body.range.start - this.lastStart; + var range = this.body.range.end - this.body.range.start; + if (this.width != 0) { + var rangePerPixelInv = this.width/range; + var xOffset = offset * rangePerPixelInv; + this.svg.style.left = (-this.width - xOffset) + 'px'; } - to = token; - addNode(graph, { - id: to - }); - getToken(); } - // parse edge attributes - var attr = parseAttributeList(); + } - // create edge - var edge = createEdge(graph, from, to, type, attr); - addEdge(graph, edge); + this.legendLeft.redraw(); + this.legendRight.redraw(); + + return resized; + }; - from = to; - } - } /** - * Parse a set with attributes, - * for example [label="1.000", shape=solid] - * @return {Object | null} attr + * Update and redraw the graph. + * */ - function parseAttributeList() { - var attr = null; + LineGraph.prototype._updateGraph = function () { + // reset the svg elements + DOMutil.prepareElements(this.svgElements); + if (this.width != 0 && this.itemsData != null) { + var group, i; + var preprocessedGroupData = {}; + var processedGroupData = {}; + var groupRanges = {}; + var changeCalled = false; - while (token == '[') { - getToken(); - attr = {}; - while (token !== '' && token != ']') { - if (tokenType != TOKENTYPE.IDENTIFIER) { - throw newSyntaxError('Attribute name expected'); + // update the height of the graph on each redraw of the graph. + if (this.autoSizeSVG == true) { + if (this.options.graphHeight != this.body.domProps.centerContainer.height + 'px') { + this.options.graphHeight = this.body.domProps.centerContainer.height + 'px'; + this.svg.style.height = this.body.domProps.centerContainer.height + 'px'; } - var name = token; + this.autoSizeSVG = false; + } - getToken(); - if (token != '=') { - throw newSyntaxError('Equal sign = expected'); + // getting group Ids + var groupIds = []; + for (var groupId in this.groups) { + if (this.groups.hasOwnProperty(groupId)) { + group = this.groups[groupId]; + if (group.visible == true && (this.options.groups.visibility[groupId] === undefined || this.options.groups.visibility[groupId] == true)) { + groupIds.push(groupId); + } } - getToken(); + } + if (groupIds.length > 0) { + // this is the range of the SVG canvas + var minDate = this.body.util.toGlobalTime(-this.body.domProps.root.width); + var maxDate = this.body.util.toGlobalTime(2 * this.body.domProps.root.width); + var groupsData = {}; + // fill groups data, this only loads the data we require based on the timewindow + this._getRelevantData(groupIds, groupsData, minDate, maxDate); - if (tokenType != TOKENTYPE.IDENTIFIER) { - throw newSyntaxError('Attribute value expected'); + // apply sampling, if disabled, it will pass through this function. + this._applySampling(groupIds, groupsData); + + // we transform the X coordinates to detect collisions + for (i = 0; i < groupIds.length; i++) { + preprocessedGroupData[groupIds[i]] = this._convertXcoordinates(groupsData[groupIds[i]]); } - var value = token; - setValue(attr, name, value); // name can be a path - getToken(); - if (token ==',') { - getToken(); + // now all needed data has been collected we start the processing. + this._getYRanges(groupIds, preprocessedGroupData, groupRanges); + + // update the Y axis first, we use this data to draw at the correct Y points + // changeCalled is required to clean the SVG on a change emit. + changeCalled = this._updateYAxis(groupIds, groupRanges); + var MAX_CYCLES = 5; + if (changeCalled == true && this.COUNTER < MAX_CYCLES) { + DOMutil.cleanupElements(this.svgElements); + this.abortedGraphUpdate = true; + this.COUNTER++; + this.body.emitter.emit('change'); + return true; } - } + else { + if (this.COUNTER > MAX_CYCLES) { + console.log("WARNING: there may be an infinite loop in the _updateGraph emitter cycle.") + } + this.COUNTER = 0; + this.abortedGraphUpdate = false; - if (token != ']') { - throw newSyntaxError('Bracket ] expected'); + // With the yAxis scaled correctly, use this to get the Y values of the points. + for (i = 0; i < groupIds.length; i++) { + group = this.groups[groupIds[i]]; + processedGroupData[groupIds[i]] = this._convertYcoordinates(groupsData[groupIds[i]], group); + } + + // draw the groups + for (i = 0; i < groupIds.length; i++) { + group = this.groups[groupIds[i]]; + if (group.options.style != 'bar') { // bar needs to be drawn enmasse + group.draw(processedGroupData[groupIds[i]], group, this.framework); + } + } + BarGraphFunctions.draw(groupIds, processedGroupData, this.framework); + } } - getToken(); } - return attr; - } - - /** - * Create a syntax error with extra information on current token and index. - * @param {String} message - * @returns {SyntaxError} err - */ - function newSyntaxError(message) { - return new SyntaxError(message + ', got "' + chop(token, 30) + '" (char ' + index + ')'); - } + // cleanup unused svg elements + DOMutil.cleanupElements(this.svgElements); + return false; + }; - /** - * Chop off text after a maximum length - * @param {String} text - * @param {Number} maxLength - * @returns {String} - */ - function chop (text, maxLength) { - return (text.length <= maxLength) ? text : (text.substr(0, 27) + '...'); - } /** - * Execute a function fn for each pair of elements in two arrays - * @param {Array | *} array1 - * @param {Array | *} array2 - * @param {function} fn + * first select and preprocess the data from the datasets. + * the groups have their preselection of data, we now loop over this data to see + * what data we need to draw. Sorted data is much faster. + * more optimization is possible by doing the sampling before and using the binary search + * to find the end date to determine the increment. + * + * @param {array} groupIds + * @param {object} groupsData + * @param {date} minDate + * @param {date} maxDate + * @private */ - function forEach2(array1, array2, fn) { - if (Array.isArray(array1)) { - array1.forEach(function (elem1) { - if (Array.isArray(array2)) { - array2.forEach(function (elem2) { - fn(elem1, elem2); - }); + LineGraph.prototype._getRelevantData = function (groupIds, groupsData, minDate, maxDate) { + var group, i, j, item; + if (groupIds.length > 0) { + for (i = 0; i < groupIds.length; i++) { + group = this.groups[groupIds[i]]; + groupsData[groupIds[i]] = []; + var dataContainer = groupsData[groupIds[i]]; + // optimization for sorted data + if (group.options.sort == true) { + var guess = Math.max(0, util.binarySearchValue(group.itemsData, minDate, 'x', 'before')); + for (j = guess; j < group.itemsData.length; j++) { + item = group.itemsData[j]; + if (item !== undefined) { + if (item.x > maxDate) { + dataContainer.push(item); + break; + } + else { + dataContainer.push(item); + } + } + } } else { - fn(elem1, array2); + for (j = 0; j < group.itemsData.length; j++) { + item = group.itemsData[j]; + if (item !== undefined) { + if (item.x > minDate && item.x < maxDate) { + dataContainer.push(item); + } + } + } } - }); - } - else { - if (Array.isArray(array2)) { - array2.forEach(function (elem2) { - fn(array1, elem2); - }); - } - else { - fn(array1, array2); } } - } + }; + /** - * Convert a string containing a graph in DOT language into a map containing - * with nodes and edges in the format of graph. - * @param {String} data Text containing a graph in DOT-notation - * @return {Object} graphData + * + * @param groupIds + * @param groupsData + * @private */ - function DOTToGraph (data) { - // parse the DOT file - var dotData = parseDOT(data); - var graphData = { - nodes: [], - edges: [], - options: {} - }; - - // copy the nodes - if (dotData.nodes) { - dotData.nodes.forEach(function (dotNode) { - var graphNode = { - id: dotNode.id, - label: String(dotNode.label || dotNode.id) - }; - merge(graphNode, dotNode.attr); - if (graphNode.image) { - graphNode.shape = 'image'; - } - graphData.nodes.push(graphNode); - }); - } + LineGraph.prototype._applySampling = function (groupIds, groupsData) { + var group; + if (groupIds.length > 0) { + for (var i = 0; i < groupIds.length; i++) { + group = this.groups[groupIds[i]]; + if (group.options.sampling == true) { + var dataContainer = groupsData[groupIds[i]]; + if (dataContainer.length > 0) { + var increment = 1; + var amountOfPoints = dataContainer.length; - // copy the edges - if (dotData.edges) { - /** - * Convert an edge in DOT format to an edge with VisGraph format - * @param {Object} dotEdge - * @returns {Object} graphEdge - */ - var convertEdge = function (dotEdge) { - var graphEdge = { - from: dotEdge.from, - to: dotEdge.to - }; - merge(graphEdge, dotEdge.attr); - graphEdge.style = (dotEdge.type == '->') ? 'arrow' : 'line'; - return graphEdge; - } + // the global screen is used because changing the width of the yAxis may affect the increment, resulting in an endless loop + // of width changing of the yAxis. + var xDistance = this.body.util.toGlobalScreen(dataContainer[dataContainer.length - 1].x) - this.body.util.toGlobalScreen(dataContainer[0].x); + var pointsPerPixel = amountOfPoints / xDistance; + increment = Math.min(Math.ceil(0.2 * amountOfPoints), Math.max(1, Math.round(pointsPerPixel))); - dotData.edges.forEach(function (dotEdge) { - var from, to; - if (dotEdge.from instanceof Object) { - from = dotEdge.from.nodes; - } - else { - from = { - id: dotEdge.from - } - } + var sampledData = []; + for (var j = 0; j < amountOfPoints; j += increment) { + sampledData.push(dataContainer[j]); - if (dotEdge.to instanceof Object) { - to = dotEdge.to.nodes; - } - else { - to = { - id: dotEdge.to + } + groupsData[groupIds[i]] = sampledData; } } + } + } + }; - if (dotEdge.from instanceof Object && dotEdge.from.edges) { - dotEdge.from.edges.forEach(function (subEdge) { - var graphEdge = convertEdge(subEdge); - graphData.edges.push(graphEdge); - }); - } - - forEach2(from, to, function (from, to) { - var subEdge = createEdge(graphData, from.id, to.id, dotEdge.type, dotEdge.attr); - var graphEdge = convertEdge(subEdge); - graphData.edges.push(graphEdge); - }); - if (dotEdge.to instanceof Object && dotEdge.to.edges) { - dotEdge.to.edges.forEach(function (subEdge) { - var graphEdge = convertEdge(subEdge); - graphData.edges.push(graphEdge); - }); + /** + * + * + * @param {array} groupIds + * @param {object} groupsData + * @param {object} groupRanges | this is being filled here + * @private + */ + LineGraph.prototype._getYRanges = function (groupIds, groupsData, groupRanges) { + var groupData, group, i; + var barCombinedDataLeft = []; + var barCombinedDataRight = []; + var options; + if (groupIds.length > 0) { + for (i = 0; i < groupIds.length; i++) { + groupData = groupsData[groupIds[i]]; + options = this.groups[groupIds[i]].options; + if (groupData.length > 0) { + group = this.groups[groupIds[i]]; + // if bar graphs are stacked, their range need to be handled differently and accumulated over all groups. + if (options.barChart.handleOverlap == 'stack' && options.style == 'bar') { + if (options.yAxisOrientation == 'left') {barCombinedDataLeft = barCombinedDataLeft.concat(group.getYRange(groupData)) ;} + else {barCombinedDataRight = barCombinedDataRight.concat(group.getYRange(groupData));} + } + else { + groupRanges[groupIds[i]] = group.getYRange(groupData,groupIds[i]); + } } - }); - } + } - // copy the options - if (dotData.attr) { - graphData.options = dotData.attr; + // if bar graphs are stacked, their range need to be handled differently and accumulated over all groups. + BarGraphFunctions.getStackedBarYRange(barCombinedDataLeft , groupRanges, groupIds, '__barchartLeft' , 'left' ); + BarGraphFunctions.getStackedBarYRange(barCombinedDataRight, groupRanges, groupIds, '__barchartRight', 'right'); } + }; - return graphData; - } - - // exports - exports.parseDOT = parseDOT; - exports.DOTToGraph = DOTToGraph; - - -/***/ }, -/* 43 */ -/***/ function(module, exports, __webpack_require__) { - - function parseGephi(gephiJSON, options) { - var edges = []; - var nodes = []; - this.options = { - edges: { - inheritColor: true - }, - nodes: { - allowedToMove: false, - parseColor: false + /** + * this sets the Y ranges for the Y axis. It also determines which of the axis should be shown or hidden. + * @param {Array} groupIds + * @param {Object} groupRanges + * @private + */ + LineGraph.prototype._updateYAxis = function (groupIds, groupRanges) { + var changeCalled = false; + var yAxisLeftUsed = false; + var yAxisRightUsed = false; + var minLeft = 1e9, minRight = 1e9, maxLeft = -1e9, maxRight = -1e9, minVal, maxVal; + // if groups are present + if (groupIds.length > 0) { + // this is here to make sure that if there are no items in the axis but there are groups, that there is no infinite draw/redraw loop. + for (var i = 0; i < groupIds.length; i++) { + var group = this.groups[groupIds[i]]; + if (group && group.options.yAxisOrientation == 'left') { + yAxisLeftUsed = true; + minLeft = 0; + maxLeft = 0; + } + else { + yAxisRightUsed = true; + minRight = 0; + maxRight = 0; + } } - }; - if (options !== undefined) { - this.options.nodes['allowedToMove'] = options.allowedToMove | false; - this.options.nodes['parseColor'] = options.parseColor | false; - this.options.edges['inheritColor'] = options.inheritColor | true; - } + // if there are items: + for (var i = 0; i < groupIds.length; i++) { + if (groupRanges.hasOwnProperty(groupIds[i])) { + if (groupRanges[groupIds[i]].ignore !== true) { + minVal = groupRanges[groupIds[i]].min; + maxVal = groupRanges[groupIds[i]].max; - var gEdges = gephiJSON.edges; - var gNodes = gephiJSON.nodes; - for (var i = 0; i < gEdges.length; i++) { - var edge = {}; - var gEdge = gEdges[i]; - edge['id'] = gEdge.id; - edge['from'] = gEdge.source; - edge['to'] = gEdge.target; - edge['attributes'] = gEdge.attributes; - // edge['value'] = gEdge.attributes !== undefined ? gEdge.attributes.Weight : undefined; - // edge['width'] = edge['value'] !== undefined ? undefined : edgegEdge.size; - edge['color'] = gEdge.color; - edge['inheritColor'] = edge['color'] !== undefined ? false : this.options.inheritColor; - edges.push(edge); - } + if (groupRanges[groupIds[i]].yAxisOrientation == 'left') { + yAxisLeftUsed = true; + minLeft = minLeft > minVal ? minVal : minLeft; + maxLeft = maxLeft < maxVal ? maxVal : maxLeft; + } + else { + yAxisRightUsed = true; + minRight = minRight > minVal ? minVal : minRight; + maxRight = maxRight < maxVal ? maxVal : maxRight; + } + } + } + } - for (var i = 0; i < gNodes.length; i++) { - var node = {}; - var gNode = gNodes[i]; - node['id'] = gNode.id; - node['attributes'] = gNode.attributes; - node['x'] = gNode.x; - node['y'] = gNode.y; - node['label'] = gNode.label; - if (this.options.nodes.parseColor == true) { - node['color'] = gNode.color; + if (yAxisLeftUsed == true) { + this.yAxisLeft.setRange(minLeft, maxLeft); } - else { - node['color'] = gNode.color !== undefined ? {background:gNode.color, border:gNode.color} : undefined; + if (yAxisRightUsed == true) { + this.yAxisRight.setRange(minRight, maxRight); } - node['radius'] = gNode.size; - node['allowedToMoveX'] = this.options.nodes.allowedToMove; - node['allowedToMoveY'] = this.options.nodes.allowedToMove; - nodes.push(node); } + changeCalled = this._toggleAxisVisiblity(yAxisLeftUsed , this.yAxisLeft) || changeCalled; + changeCalled = this._toggleAxisVisiblity(yAxisRightUsed, this.yAxisRight) || changeCalled; - return {nodes:nodes, edges:edges}; - } - - exports.parseGephi = parseGephi; - -/***/ }, -/* 44 */ -/***/ function(module, exports, __webpack_require__) { - - // first check if moment.js is already loaded in the browser window, if so, - // use this instance. Else, load via commonjs. - module.exports = (typeof window !== 'undefined') && window['moment'] || __webpack_require__(58); + if (yAxisRightUsed == true && yAxisLeftUsed == true) { + this.yAxisLeft.drawIcons = true; + this.yAxisRight.drawIcons = true; + } + else { + this.yAxisLeft.drawIcons = false; + this.yAxisRight.drawIcons = false; + } + this.yAxisRight.master = !yAxisLeftUsed; -/***/ }, -/* 45 */ -/***/ function(module, exports, __webpack_require__) { + if (this.yAxisRight.master == false) { + if (yAxisRightUsed == true) {this.yAxisLeft.lineOffset = this.yAxisRight.width;} + else {this.yAxisLeft.lineOffset = 0;} - // Only load hammer.js when in a browser environment - // (loading hammer.js in a node.js environment gives errors) - if (typeof window !== 'undefined') { - module.exports = window['Hammer'] || __webpack_require__(59); - } - else { - module.exports = function () { - throw Error('hammer.js is only available in a browser, not in node.js.'); + changeCalled = this.yAxisLeft.redraw() || changeCalled; + this.yAxisRight.stepPixelsForced = this.yAxisLeft.stepPixels; + this.yAxisRight.zeroCrossing = this.yAxisLeft.zeroCrossing; + changeCalled = this.yAxisRight.redraw() || changeCalled; + } + else { + changeCalled = this.yAxisRight.redraw() || changeCalled; } - } + // clean the accumulated lists + if (groupIds.indexOf('__barchartLeft') != -1) { + groupIds.splice(groupIds.indexOf('__barchartLeft'),1); + } + if (groupIds.indexOf('__barchartRight') != -1) { + groupIds.splice(groupIds.indexOf('__barchartRight'),1); + } -/***/ }, -/* 46 */ -/***/ function(module, exports, __webpack_require__) { + return changeCalled; + }; - var Emitter = __webpack_require__(56); - var Hammer = __webpack_require__(45); - var util = __webpack_require__(1); - var DataSet = __webpack_require__(3); - var DataView = __webpack_require__(4); - var Range = __webpack_require__(17); - var ItemSet = __webpack_require__(27); - var Activator = __webpack_require__(55); - var DateUtil = __webpack_require__(15); /** - * Create a timeline visualization - * @param {HTMLElement} container - * @param {vis.DataSet | Array | google.visualization.DataTable} [items] - * @param {Object} [options] See Core.setOptions for the available options. - * @constructor + * This shows or hides the Y axis if needed. If there is a change, the changed event is emitted by the updateYAxis function + * + * @param {boolean} axisUsed + * @returns {boolean} + * @private + * @param axis */ - function Core () {} + LineGraph.prototype._toggleAxisVisiblity = function (axisUsed, axis) { + var changed = false; + if (axisUsed == false) { + if (axis.dom.frame.parentNode && axis.hidden == false) { + axis.hide() + changed = true; + } + } + else { + if (!axis.dom.frame.parentNode && axis.hidden == true) { + axis.show(); + changed = true; + } + } + return changed; + }; - // turn Core into an event emitter - Emitter(Core.prototype); /** - * Create the main DOM for the Core: a root panel containing left, right, - * top, bottom, content, and background panel. - * @param {Element} container The container element where the Core will - * be attached. + * This uses the DataAxis object to generate the correct X coordinate on the SVG window. It uses the + * util function toScreen to get the x coordinate from the timestamp. It also pre-filters the data and get the minMax ranges for + * the yAxis. + * + * @param datapoints + * @returns {Array} * @private */ - Core.prototype._create = function (container) { - this.dom = {}; - - this.dom.root = document.createElement('div'); - this.dom.background = document.createElement('div'); - this.dom.backgroundVertical = document.createElement('div'); - this.dom.backgroundHorizontal = document.createElement('div'); - this.dom.centerContainer = document.createElement('div'); - this.dom.leftContainer = document.createElement('div'); - this.dom.rightContainer = document.createElement('div'); - this.dom.center = document.createElement('div'); - this.dom.left = document.createElement('div'); - this.dom.right = document.createElement('div'); - this.dom.top = document.createElement('div'); - this.dom.bottom = document.createElement('div'); - this.dom.shadowTop = document.createElement('div'); - this.dom.shadowBottom = document.createElement('div'); - this.dom.shadowTopLeft = document.createElement('div'); - this.dom.shadowBottomLeft = document.createElement('div'); - this.dom.shadowTopRight = document.createElement('div'); - this.dom.shadowBottomRight = document.createElement('div'); + LineGraph.prototype._convertXcoordinates = function (datapoints) { + var extractedData = []; + var xValue, yValue; + var toScreen = this.body.util.toScreen; - this.dom.root.className = 'vis timeline root'; - this.dom.background.className = 'vispanel background'; - this.dom.backgroundVertical.className = 'vispanel background vertical'; - this.dom.backgroundHorizontal.className = 'vispanel background horizontal'; - this.dom.centerContainer.className = 'vispanel center'; - this.dom.leftContainer.className = 'vispanel left'; - this.dom.rightContainer.className = 'vispanel right'; - this.dom.top.className = 'vispanel top'; - this.dom.bottom.className = 'vispanel bottom'; - this.dom.left.className = 'content'; - this.dom.center.className = 'content'; - this.dom.right.className = 'content'; - this.dom.shadowTop.className = 'shadow top'; - this.dom.shadowBottom.className = 'shadow bottom'; - this.dom.shadowTopLeft.className = 'shadow top'; - this.dom.shadowBottomLeft.className = 'shadow bottom'; - this.dom.shadowTopRight.className = 'shadow top'; - this.dom.shadowBottomRight.className = 'shadow bottom'; + for (var i = 0; i < datapoints.length; i++) { + xValue = toScreen(datapoints[i].x) + this.width; + yValue = datapoints[i].y; + extractedData.push({x: xValue, y: yValue}); + } - this.dom.root.appendChild(this.dom.background); - this.dom.root.appendChild(this.dom.backgroundVertical); - this.dom.root.appendChild(this.dom.backgroundHorizontal); - this.dom.root.appendChild(this.dom.centerContainer); - this.dom.root.appendChild(this.dom.leftContainer); - this.dom.root.appendChild(this.dom.rightContainer); - this.dom.root.appendChild(this.dom.top); - this.dom.root.appendChild(this.dom.bottom); + return extractedData; + }; - this.dom.centerContainer.appendChild(this.dom.center); - this.dom.leftContainer.appendChild(this.dom.left); - this.dom.rightContainer.appendChild(this.dom.right); - this.dom.centerContainer.appendChild(this.dom.shadowTop); - this.dom.centerContainer.appendChild(this.dom.shadowBottom); - this.dom.leftContainer.appendChild(this.dom.shadowTopLeft); - this.dom.leftContainer.appendChild(this.dom.shadowBottomLeft); - this.dom.rightContainer.appendChild(this.dom.shadowTopRight); - this.dom.rightContainer.appendChild(this.dom.shadowBottomRight); + /** + * This uses the DataAxis object to generate the correct X coordinate on the SVG window. It uses the + * util function toScreen to get the x coordinate from the timestamp. It also pre-filters the data and get the minMax ranges for + * the yAxis. + * + * @param datapoints + * @param group + * @returns {Array} + * @private + */ + LineGraph.prototype._convertYcoordinates = function (datapoints, group) { + var extractedData = []; + var xValue, yValue; + var toScreen = this.body.util.toScreen; + var axis = this.yAxisLeft; + var svgHeight = Number(this.svg.style.height.replace('px','')); + if (group.options.yAxisOrientation == 'right') { + axis = this.yAxisRight; + } - this.on('rangechange', this.redraw.bind(this)); - this.on('touch', this._onTouch.bind(this)); - this.on('pinch', this._onPinch.bind(this)); - this.on('dragstart', this._onDragStart.bind(this)); - this.on('drag', this._onDrag.bind(this)); + for (var i = 0; i < datapoints.length; i++) { + xValue = toScreen(datapoints[i].x) + this.width; + yValue = Math.round(axis.convertValue(datapoints[i].y)); + extractedData.push({x: xValue, y: yValue}); + } - var me = this; - this.on('change', function (properties) { - if (properties && properties.queue == true) { - // redraw once on next tick - if (!me._redrawTimer) { - me._redrawTimer = setTimeout(function () { - me._redrawTimer = null; - me.redraw(); - }, 0) - } - } - else { - // redraw immediately - me.redraw(); - } - }); + group.setZeroPosition(Math.min(svgHeight, axis.convertValue(0))); - // create event listeners for all interesting events, these events will be - // emitted via emitter - this.hammer = Hammer(this.dom.root, { - preventDefault: true - }); - this.listeners = {}; + return extractedData; + }; - var events = [ - 'touch', 'pinch', - 'tap', 'doubletap', 'hold', - 'dragstart', 'drag', 'dragend', - 'mousewheel', 'DOMMouseScroll' // DOMMouseScroll is needed for Firefox - ]; - events.forEach(function (event) { - var listener = function () { - var args = [event].concat(Array.prototype.slice.call(arguments, 0)); - if (me.isActive()) { - me.emit.apply(me, args); - } - }; - me.hammer.on(event, listener); - me.listeners[event] = listener; - }); - // size properties of each of the panels - this.props = { - root: {}, - background: {}, - centerContainer: {}, - leftContainer: {}, - rightContainer: {}, - center: {}, - left: {}, - right: {}, - top: {}, - bottom: {}, - border: {}, - scrollTop: 0, - scrollTopMin: 0 - }; - this.touch = {}; // store state information needed for touch events + module.exports = LineGraph; - this.redrawCount = 0; - // attach the root panel to the provided container - if (!container) throw new Error('No container provided'); - container.appendChild(this.dom.root); - }; +/***/ }, +/* 44 */ +/***/ function(module, exports, __webpack_require__) { /** - * Set options. Options will be passed to all components loaded in the Timeline. - * @param {Object} [options] - * {String} orientation - * Vertical orientation for the Timeline, - * can be 'bottom' (default) or 'top'. - * {String | Number} width - * Width for the timeline, a number in pixels or - * a css string like '1000px' or '75%'. '100%' by default. - * {String | Number} height - * Fixed height for the Timeline, a number in pixels or - * a css string like '400px' or '75%'. If undefined, - * The Timeline will automatically size such that - * its contents fit. - * {String | Number} minHeight - * Minimum height for the Timeline, a number in pixels or - * a css string like '400px' or '75%'. - * {String | Number} maxHeight - * Maximum height for the Timeline, a number in pixels or - * a css string like '400px' or '75%'. - * {Number | Date | String} start - * Start date for the visible window - * {Number | Date | String} end - * End date for the visible window + * @constructor DataStep + * The class DataStep is an iterator for data for the lineGraph. You provide a start data point and an + * end data point. The class itself determines the best scale (step size) based on the + * provided start Date, end Date, and minimumStep. + * + * If minimumStep is provided, the step size is chosen as close as possible + * to the minimumStep but larger than minimumStep. If minimumStep is not + * provided, the scale is set to 1 DAY. + * The minimumStep should correspond with the onscreen size of about 6 characters + * + * Alternatively, you can set a scale by hand. + * After creation, you can initialize the class by executing first(). Then you + * can iterate from the start date to the end date via next(). You can check if + * the end date is reached with the function hasNext(). After each step, you can + * retrieve the current date via getCurrent(). + * The DataStep has scales ranging from milliseconds, seconds, minutes, hours, + * days, to years. + * + * Version: 1.2 + * + * @param {Date} [start] The start date, for example new Date(2010, 9, 21) + * or new Date(2010, 9, 21, 23, 45, 00) + * @param {Date} [end] The end date + * @param {Number} [minimumStep] Optional. Minimum step size in milliseconds */ - Core.prototype.setOptions = function (options) { - if (options) { - // copy the known options - var fields = ['width', 'height', 'minHeight', 'maxHeight', 'autoResize', 'start', 'end', 'orientation', 'clickToUse', 'dataAttributes', 'hiddenDates']; - util.selectiveExtend(fields, this.options, options); + function DataStep(start, end, minimumStep, containerHeight, customRange, alignZeros) { + // variables + this.current = 0; - if ('hiddenDates' in this.options) { - DateUtil.convertHiddenOptions(this.body, this.options.hiddenDates); - } + this.autoScale = true; + this.stepIndex = 0; + this.step = 1; + this.scale = 1; - if ('clickToUse' in options) { - if (options.clickToUse) { - this.activator = new Activator(this.dom.root); - } - else { - if (this.activator) { - this.activator.destroy(); - delete this.activator; - } - } - } + this.marginStart; + this.marginEnd; + this.deadSpace = 0; - // enable/disable autoResize - this._initAutoResize(); - } + this.majorSteps = [1, 2, 5, 10]; + this.minorSteps = [0.25, 0.5, 1, 2]; - // propagate options to all components - this.components.forEach(function (component) { - component.setOptions(options); - }); + this.alignZeros = alignZeros; + + this.setRange(start, end, minimumStep, containerHeight, customRange); + } - // TODO: remove deprecation error one day (deprecated since version 0.8.0) - if (options && options.order) { - throw new Error('Option order is deprecated. There is no replacement for this feature.'); - } - // redraw everything - this.redraw(); - }; /** - * Returns true when the Timeline is active. - * @returns {boolean} + * Set a new range + * If minimumStep is provided, the step size is chosen as close as possible + * to the minimumStep but larger than minimumStep. If minimumStep is not + * provided, the scale is set to 1 DAY. + * The minimumStep should correspond with the onscreen size of about 6 characters + * @param {Number} [start] The start date and time. + * @param {Number} [end] The end date and time. + * @param {Number} [minimumStep] Optional. Minimum step size in milliseconds */ - Core.prototype.isActive = function () { - return !this.activator || this.activator.active; + DataStep.prototype.setRange = function(start, end, minimumStep, containerHeight, customRange) { + this._start = customRange.min === undefined ? start : customRange.min; + this._end = customRange.max === undefined ? end : customRange.max; + + if (this._start == this._end) { + this._start -= 0.75; + this._end += 1; + } + + if (this.autoScale == true) { + this.setMinimumStep(minimumStep, containerHeight); + } + + this.setFirst(customRange); }; /** - * Destroy the Core, clean up all DOM elements and event listeners. + * Automatically determine the scale that bests fits the provided minimum step + * @param {Number} [minimumStep] The minimum step size in milliseconds */ - Core.prototype.destroy = function () { - // unbind datasets - this.clear(); - - // remove all event listeners - this.off(); - - // stop checking for changed size - this._stopAutoResize(); + DataStep.prototype.setMinimumStep = function(minimumStep, containerHeight) { + // round to floor + var size = this._end - this._start; + var safeSize = size * 1.2; + var minimumStepValue = minimumStep * (safeSize / containerHeight); + var orderOfMagnitude = Math.round(Math.log(safeSize)/Math.LN10); - // remove from DOM - if (this.dom.root.parentNode) { - this.dom.root.parentNode.removeChild(this.dom.root); - } - this.dom = null; + var minorStepIdx = -1; + var magnitudefactor = Math.pow(10,orderOfMagnitude); - // remove Activator - if (this.activator) { - this.activator.destroy(); - delete this.activator; + var start = 0; + if (orderOfMagnitude < 0) { + start = orderOfMagnitude; } - // cleanup hammer touch events - for (var event in this.listeners) { - if (this.listeners.hasOwnProperty(event)) { - delete this.listeners[event]; + var solutionFound = false; + for (var i = start; Math.abs(i) <= Math.abs(orderOfMagnitude); i++) { + magnitudefactor = Math.pow(10,i); + for (var j = 0; j < this.minorSteps.length; j++) { + var stepSize = magnitudefactor * this.minorSteps[j]; + if (stepSize >= minimumStepValue) { + solutionFound = true; + minorStepIdx = j; + break; + } } - } - this.listeners = null; - this.hammer = null; - - // give all components the opportunity to cleanup - this.components.forEach(function (component) { - component.destroy(); - }); - - this.body = null; + if (solutionFound == true) { + break; + } + } + this.stepIndex = minorStepIdx; + this.scale = magnitudefactor; + this.step = magnitudefactor * this.minorSteps[minorStepIdx]; }; + /** - * Set a custom time bar - * @param {Date} time + * Round the current date to the first minor date value + * This must be executed once when the current date is set to start Date */ - Core.prototype.setCustomTime = function (time) { - if (!this.customTime) { - throw new Error('Cannot get custom time: Custom time bar is not enabled'); + DataStep.prototype.setFirst = function(customRange) { + if (customRange === undefined) { + customRange = {}; } - this.customTime.setCustomTime(time); - }; + var niceStart = customRange.min === undefined ? this._start - (this.scale * 2 * this.minorSteps[this.stepIndex]) : customRange.min; + var niceEnd = customRange.max === undefined ? this._end + (this.scale * this.minorSteps[this.stepIndex]) : customRange.max; - /** - * Retrieve the current custom time. - * @return {Date} customTime - */ - Core.prototype.getCustomTime = function() { - if (!this.customTime) { - throw new Error('Cannot get custom time: Custom time bar is not enabled'); + this.marginEnd = customRange.max === undefined ? this.roundToMinor(niceEnd) : customRange.max; + this.marginStart = customRange.min === undefined ? this.roundToMinor(niceStart) : customRange.min; + + // if we need to align the zero's we need to make sure that there is a zero to use. + if (this.alignZeros == true && (this.marginEnd - this.marginStart) % this.step != 0) { + this.marginEnd += this.marginEnd % this.step; } - return this.customTime.getCustomTime(); - }; + this.deadSpace = this.roundToMinor(niceEnd) - niceEnd + this.roundToMinor(niceStart) - niceStart; + this.marginRange = this.marginEnd - this.marginStart; - /** - * Get the id's of the currently visible items. - * @returns {Array} The ids of the visible items - */ - Core.prototype.getVisibleItems = function() { - return this.itemSet && this.itemSet.getVisibleItems() || []; + this.current = this.marginEnd; }; - - - /** - * Clear the Core. By Default, items, groups and options are cleared. - * Example usage: - * - * timeline.clear(); // clear items, groups, and options - * timeline.clear({options: true}); // clear options only - * - * @param {Object} [what] Optionally specify what to clear. By default: - * {items: true, groups: true, options: true} - */ - Core.prototype.clear = function(what) { - // clear items - if (!what || what.items) { - this.setItems(null); + DataStep.prototype.roundToMinor = function(value) { + var rounded = value - (value % (this.scale * this.minorSteps[this.stepIndex])); + if (value % (this.scale * this.minorSteps[this.stepIndex]) > 0.5 * (this.scale * this.minorSteps[this.stepIndex])) { + return rounded + (this.scale * this.minorSteps[this.stepIndex]); } - - // clear groups - if (!what || what.groups) { - this.setGroups(null); + else { + return rounded; } + } - // clear options of timeline and of each of the components - if (!what || what.options) { - this.components.forEach(function (component) { - component.setOptions(component.defaultOptions); - }); - this.setOptions(this.defaultOptions); // this will also do a redraw - } + /** + * Check if the there is a next step + * @return {boolean} true if the current date has not passed the end date + */ + DataStep.prototype.hasNext = function () { + return (this.current >= this.marginStart); }; /** - * Set Core window such that it fits all items - * @param {Object} [options] Available options: - * `animate: boolean | number` - * If true (default), the range is animated - * smoothly to the new window. - * If a number, the number is taken as duration - * for the animation. Default duration is 500 ms. + * Do the next step */ - Core.prototype.fit = function(options) { - var range = this._getDataRange(); + DataStep.prototype.next = function() { + var prev = this.current; + this.current -= this.step; - // skip range set if there is no start and end date - if (range.start === null && range.end === null) { - return; + // safety mechanism: if current time is still unchanged, move to the end + if (this.current == prev) { + this.current = this._end; } - - var animate = (options && options.animate !== undefined) ? options.animate : true; - this.range.setRange(range.start, range.end, animate); }; /** - * Calculate the data range of the items and applies a 5% window around it. - * @returns {{start: Date | null, end: Date | null}} - * @protected + * Do the next step */ - Core.prototype._getDataRange = function() { - // apply the data range as range - var dataRange = this.getItemRange(); + DataStep.prototype.previous = function() { + this.current += this.step; + this.marginEnd += this.step; + this.marginRange = this.marginEnd - this.marginStart; + }; - // add 5% space on both sides - var start = dataRange.min; - var end = dataRange.max; - if (start != null && end != null) { - var interval = (end.valueOf() - start.valueOf()); - if (interval <= 0) { - // prevent an empty interval - interval = 24 * 60 * 60 * 1000; // 1 day - } - start = new Date(start.valueOf() - interval * 0.05); - end = new Date(end.valueOf() + interval * 0.05); - } - return { - start: start, - end: end - } - }; /** - * Set the visible window. Both parameters are optional, you can change only - * start or only end. Syntax: - * - * TimeLine.setWindow(start, end) - * TimeLine.setWindow(range) - * - * Where start and end can be a Date, number, or string, and range is an - * object with properties start and end. - * - * @param {Date | Number | String | Object} [start] Start date of visible window - * @param {Date | Number | String} [end] End date of visible window - * @param {Object} [options] Available options: - * `animate: boolean | number` - * If true (default), the range is animated - * smoothly to the new window. - * If a number, the number is taken as duration - * for the animation. Default duration is 500 ms. + * Get the current datetime + * @return {String} current The current date */ - Core.prototype.setWindow = function(start, end, options) { - var animate = (options && options.animate !== undefined) ? options.animate : true; - if (arguments.length == 1) { - var range = arguments[0]; - this.range.setRange(range.start, range.end, animate); + DataStep.prototype.getCurrent = function(decimals) { + // prevent round-off errors when close to zero + var current = (Math.abs(this.current) < this.step / 2) ? 0 : this.current; + var toPrecision = '' + Number(current).toPrecision(5); + + // If decimals is specified, then limit or extend the string as required + if(decimals !== undefined && !isNaN(Number(decimals))) { + // If string includes exponent, then we need to add it to the end + var exp = ""; + var index = toPrecision.indexOf("e"); + if(index != -1) { + // Get the exponent + exp = toPrecision.slice(index); + // Remove the exponent in case we need to zero-extend + toPrecision = toPrecision.slice(0, index); + } + index = Math.max(toPrecision.indexOf(","), toPrecision.indexOf(".")); + if(index === -1) { + // No decimal found - if we want decimals, then we need to add it + if(decimals !== 0) { + toPrecision += '.'; + } + // Calculate how long the string should be + index = toPrecision.length + decimals; + } + else if(decimals !== 0) { + // Calculate how long the string should be - accounting for the decimal place + index += decimals + 1; + } + if(index > toPrecision.length) { + // We need to add zeros! + for(var cnt = index - toPrecision.length; cnt > 0; cnt--) { + toPrecision += '0'; + } + } + else { + // we need to remove characters + toPrecision = toPrecision.slice(0, index); + } + // Add the exponent if there is one + toPrecision += exp; } else { - this.range.setRange(start, end, animate); + if (toPrecision.indexOf(",") != -1 || toPrecision.indexOf(".") != -1) { + // If no decimal is specified, and there are decimal places, remove trailing zeros + for (var i = toPrecision.length - 1; i > 0; i--) { + if (toPrecision[i] == "0") { + toPrecision = toPrecision.slice(0, i); + } + else if (toPrecision[i] == "." || toPrecision[i] == ",") { + toPrecision = toPrecision.slice(0, i); + break; + } + else { + break; + } + } + } } + + return toPrecision; }; + + /** - * Move the window such that given time is centered on screen. - * @param {Date | Number | String} time - * @param {Object} [options] Available options: - * `animate: boolean | number` - * If true (default), the range is animated - * smoothly to the new window. - * If a number, the number is taken as duration - * for the animation. Default duration is 500 ms. + * Snap a date to a rounded value. + * The snap intervals are dependent on the current scale and step. + * @param {Date} date the date to be snapped. + * @return {Date} snappedDate */ - Core.prototype.moveTo = function(time, options) { - var interval = this.range.end - this.range.start; - var t = util.convert(time, 'Date').valueOf(); - - var start = t - interval / 2; - var end = t + interval / 2; - var animate = (options && options.animate !== undefined) ? options.animate : true; + DataStep.prototype.snap = function(date) { - this.range.setRange(start, end, animate); }; /** - * Get the visible window - * @return {{start: Date, end: Date}} Visible range + * Check if the current value is a major value (for example when the step + * is DAY, a major value is each first day of the MONTH) + * @return {boolean} true if current date is major, else false. */ - Core.prototype.getWindow = function() { - var range = this.range.getRange(); - return { - start: new Date(range.start), - end: new Date(range.end) - }; + DataStep.prototype.isMajor = function() { + return (this.current % (this.scale * this.majorSteps[this.stepIndex]) == 0); }; + module.exports = DataStep; + + +/***/ }, +/* 45 */ +/***/ function(module, exports, __webpack_require__) { + + var util = __webpack_require__(1); + var DOMutil = __webpack_require__(6); + var Component = __webpack_require__(23); + var DataStep = __webpack_require__(44); + /** - * Force a redraw of the Core. Can be useful to manually redraw when - * option autoResize=false + * A horizontal time axis + * @param {Object} [options] See DataAxis.setOptions for the available + * options. + * @constructor DataAxis + * @extends Component + * @param body */ - Core.prototype.redraw = function() { - var resized = false; - var options = this.options; - var props = this.props; - var dom = this.dom; + function DataAxis (body, options, svg, linegraphOptions) { + this.id = util.randomUUID(); + this.body = body; - if (!dom) return; // when destroyed + this.defaultOptions = { + orientation: 'left', // supported: 'left', 'right' + showMinorLabels: true, + showMajorLabels: true, + icons: true, + majorLinesOffset: 7, + minorLinesOffset: 4, + labelOffsetX: 10, + labelOffsetY: 2, + iconWidth: 20, + width: '40px', + visible: true, + alignZeros: true, + customRange: { + left: {min:undefined, max:undefined}, + right: {min:undefined, max:undefined} + }, + title: { + left: {text:undefined}, + right: {text:undefined} + }, + format: { + left: {decimals: undefined}, + right: {decimals: undefined} + } + }; - DateUtil.updateHiddenDates(this.body, this.options.hiddenDates); + this.linegraphOptions = linegraphOptions; + this.linegraphSVG = svg; + this.props = {}; + this.DOMelements = { // dynamic elements + lines: {}, + labels: {}, + title: {} + }; - // update class names - if (options.orientation == 'top') { - util.addClassName(dom.root, 'top'); - util.removeClassName(dom.root, 'bottom'); - } - else { - util.removeClassName(dom.root, 'top'); - util.addClassName(dom.root, 'bottom'); - } + this.dom = {}; - // update root width and height options - dom.root.style.maxHeight = util.option.asSize(options.maxHeight, ''); - dom.root.style.minHeight = util.option.asSize(options.minHeight, ''); - dom.root.style.width = util.option.asSize(options.width, ''); + this.range = {start:0, end:0}; - // calculate border widths - props.border.left = (dom.centerContainer.offsetWidth - dom.centerContainer.clientWidth) / 2; - props.border.right = props.border.left; - props.border.top = (dom.centerContainer.offsetHeight - dom.centerContainer.clientHeight) / 2; - props.border.bottom = props.border.top; - var borderRootHeight= dom.root.offsetHeight - dom.root.clientHeight; - var borderRootWidth = dom.root.offsetWidth - dom.root.clientWidth; + this.options = util.extend({}, this.defaultOptions); + this.conversionFactor = 1; - // workaround for a bug in IE: the clientWidth of an element with - // a height:0px and overflow:hidden is not calculated and always has value 0 - if (dom.centerContainer.clientHeight === 0) { - props.border.left = props.border.top; - props.border.right = props.border.left; + this.setOptions(options); + this.width = Number(('' + this.options.width).replace("px","")); + this.minWidth = this.width; + this.height = this.linegraphSVG.offsetHeight; + this.hidden = false; + + this.stepPixels = 25; + this.stepPixelsForced = 25; + this.zeroCrossing = -1; + + this.lineOffset = 0; + this.master = true; + this.svgElements = {}; + this.iconsRemoved = false; + + + this.groups = {}; + this.amountOfGroups = 0; + + // create the HTML DOM + this._create(); + + var me = this; + this.body.emitter.on("verticalDrag", function() { + me.dom.lineContainer.style.top = me.body.domProps.scrollTop + 'px'; + }); + } + + DataAxis.prototype = new Component(); + + + DataAxis.prototype.addGroup = function(label, graphOptions) { + if (!this.groups.hasOwnProperty(label)) { + this.groups[label] = graphOptions; } - if (dom.root.clientHeight === 0) { - borderRootWidth = borderRootHeight; + this.amountOfGroups += 1; + }; + + DataAxis.prototype.updateGroup = function(label, graphOptions) { + this.groups[label] = graphOptions; + }; + + DataAxis.prototype.removeGroup = function(label) { + if (this.groups.hasOwnProperty(label)) { + delete this.groups[label]; + this.amountOfGroups -= 1; } + }; - // calculate the heights. If any of the side panels is empty, we set the height to - // minus the border width, such that the border will be invisible - props.center.height = dom.center.offsetHeight; - props.left.height = dom.left.offsetHeight; - props.right.height = dom.right.offsetHeight; - props.top.height = dom.top.clientHeight || -props.border.top; - props.bottom.height = dom.bottom.clientHeight || -props.border.bottom; - // TODO: compensate borders when any of the panels is empty. + DataAxis.prototype.setOptions = function (options) { + if (options) { + var redraw = false; + if (this.options.orientation != options.orientation && options.orientation !== undefined) { + redraw = true; + } + var fields = [ + 'orientation', + 'showMinorLabels', + 'showMajorLabels', + 'icons', + 'majorLinesOffset', + 'minorLinesOffset', + 'labelOffsetX', + 'labelOffsetY', + 'iconWidth', + 'width', + 'visible', + 'customRange', + 'title', + 'format', + 'alignZeros' + ]; + util.selectiveExtend(fields, this.options, options); - // apply auto height - // TODO: only calculate autoHeight when needed (else we cause an extra reflow/repaint of the DOM) - var contentHeight = Math.max(props.left.height, props.center.height, props.right.height); - var autoHeight = props.top.height + contentHeight + props.bottom.height + - borderRootHeight + props.border.top + props.border.bottom; - dom.root.style.height = util.option.asSize(options.height, autoHeight + 'px'); + this.minWidth = Number(('' + this.options.width).replace("px","")); - // calculate heights of the content panels - props.root.height = dom.root.offsetHeight; - props.background.height = props.root.height - borderRootHeight; - var containerHeight = props.root.height - props.top.height - props.bottom.height - - borderRootHeight; - props.centerContainer.height = containerHeight; - props.leftContainer.height = containerHeight; - props.rightContainer.height = props.leftContainer.height; + if (redraw == true && this.dom.frame) { + this.hide(); + this.show(); + } + } + }; - // calculate the widths of the panels - props.root.width = dom.root.offsetWidth; - props.background.width = props.root.width - borderRootWidth; - props.left.width = dom.leftContainer.clientWidth || -props.border.left; - props.leftContainer.width = props.left.width; - props.right.width = dom.rightContainer.clientWidth || -props.border.right; - props.rightContainer.width = props.right.width; - var centerWidth = props.root.width - props.left.width - props.right.width - borderRootWidth; - props.center.width = centerWidth; - props.centerContainer.width = centerWidth; - props.top.width = centerWidth; - props.bottom.width = centerWidth; - // resize the panels - dom.background.style.height = props.background.height + 'px'; - dom.backgroundVertical.style.height = props.background.height + 'px'; - dom.backgroundHorizontal.style.height = props.centerContainer.height + 'px'; - dom.centerContainer.style.height = props.centerContainer.height + 'px'; - dom.leftContainer.style.height = props.leftContainer.height + 'px'; - dom.rightContainer.style.height = props.rightContainer.height + 'px'; + /** + * Create the HTML DOM for the DataAxis + */ + DataAxis.prototype._create = function() { + this.dom.frame = document.createElement('div'); + this.dom.frame.style.width = this.options.width; + this.dom.frame.style.height = this.height; - dom.background.style.width = props.background.width + 'px'; - dom.backgroundVertical.style.width = props.centerContainer.width + 'px'; - dom.backgroundHorizontal.style.width = props.background.width + 'px'; - dom.centerContainer.style.width = props.center.width + 'px'; - dom.top.style.width = props.top.width + 'px'; - dom.bottom.style.width = props.bottom.width + 'px'; + this.dom.lineContainer = document.createElement('div'); + this.dom.lineContainer.style.width = '100%'; + this.dom.lineContainer.style.height = this.height; + this.dom.lineContainer.style.position = 'relative'; - // reposition the panels - dom.background.style.left = '0'; - dom.background.style.top = '0'; - dom.backgroundVertical.style.left = (props.left.width + props.border.left) + 'px'; - dom.backgroundVertical.style.top = '0'; - dom.backgroundHorizontal.style.left = '0'; - dom.backgroundHorizontal.style.top = props.top.height + 'px'; - dom.centerContainer.style.left = props.left.width + 'px'; - dom.centerContainer.style.top = props.top.height + 'px'; - dom.leftContainer.style.left = '0'; - dom.leftContainer.style.top = props.top.height + 'px'; - dom.rightContainer.style.left = (props.left.width + props.center.width) + 'px'; - dom.rightContainer.style.top = props.top.height + 'px'; - dom.top.style.left = props.left.width + 'px'; - dom.top.style.top = '0'; - dom.bottom.style.left = props.left.width + 'px'; - dom.bottom.style.top = (props.top.height + props.centerContainer.height) + 'px'; + // create svg element for graph drawing. + this.svg = document.createElementNS('http://www.w3.org/2000/svg',"svg"); + this.svg.style.position = "absolute"; + this.svg.style.top = '0px'; + this.svg.style.height = '100%'; + this.svg.style.width = '100%'; + this.svg.style.display = "block"; + this.dom.frame.appendChild(this.svg); + }; - // update the scrollTop, feasible range for the offset can be changed - // when the height of the Core or of the contents of the center changed - this._updateScrollTop(); + DataAxis.prototype._redrawGroupIcons = function () { + DOMutil.prepareElements(this.svgElements); + + var x; + var iconWidth = this.options.iconWidth; + var iconHeight = 15; + var iconOffset = 4; + var y = iconOffset + 0.5 * iconHeight; - // reposition the scrollable contents - var offset = this.props.scrollTop; - if (options.orientation == 'bottom') { - offset += Math.max(this.props.centerContainer.height - this.props.center.height - - this.props.border.top - this.props.border.bottom, 0); + if (this.options.orientation == 'left') { + x = iconOffset; + } + else { + x = this.width - iconWidth - iconOffset; } - dom.center.style.left = '0'; - dom.center.style.top = offset + 'px'; - dom.left.style.left = '0'; - dom.left.style.top = offset + 'px'; - dom.right.style.left = '0'; - dom.right.style.top = offset + 'px'; - - // show shadows when vertical scrolling is available - var visibilityTop = this.props.scrollTop == 0 ? 'hidden' : ''; - var visibilityBottom = this.props.scrollTop == this.props.scrollTopMin ? 'hidden' : ''; - dom.shadowTop.style.visibility = visibilityTop; - dom.shadowBottom.style.visibility = visibilityBottom; - dom.shadowTopLeft.style.visibility = visibilityTop; - dom.shadowBottomLeft.style.visibility = visibilityBottom; - dom.shadowTopRight.style.visibility = visibilityTop; - dom.shadowBottomRight.style.visibility = visibilityBottom; - // redraw all components - this.components.forEach(function (component) { - resized = component.redraw() || resized; - }); - if (resized) { - // keep repainting until all sizes are settled - var MAX_REDRAWS = 3; // maximum number of consecutive redraws - if (this.redrawCount < MAX_REDRAWS) { - this.redrawCount++; - this.redraw(); - } - else { - console.log('WARNING: infinite loop in redraw?') + for (var groupId in this.groups) { + if (this.groups.hasOwnProperty(groupId)) { + if (this.groups[groupId].visible == true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] == true)) { + this.groups[groupId].drawIcon(x, y, this.svgElements, this.svg, iconWidth, iconHeight); + y += iconHeight + iconOffset; + } } - this.redrawCount = 0; } - this.emit("finishedRedraw"); + DOMutil.cleanupElements(this.svgElements); + this.iconsRemoved = false; }; - // TODO: deprecated since version 1.1.0, remove some day - Core.prototype.repaint = function () { - throw new Error('Function repaint is deprecated. Use redraw instead.'); - }; + DataAxis.prototype._cleanupIcons = function() { + if (this.iconsRemoved == false) { + DOMutil.prepareElements(this.svgElements); + DOMutil.cleanupElements(this.svgElements); + this.iconsRemoved = true; + } + } /** - * Set a current time. This can be used for example to ensure that a client's - * time is synchronized with a shared server time. - * Only applicable when option `showCurrentTime` is true. - * @param {Date | String | Number} time A Date, unix timestamp, or - * ISO date string. + * Create the HTML DOM for the DataAxis */ - Core.prototype.setCurrentTime = function(time) { - if (!this.currentTime) { - throw new Error('Option showCurrentTime must be true'); + DataAxis.prototype.show = function() { + this.hidden = false; + if (!this.dom.frame.parentNode) { + if (this.options.orientation == 'left') { + this.body.dom.left.appendChild(this.dom.frame); + } + else { + this.body.dom.right.appendChild(this.dom.frame); + } } - this.currentTime.setCurrentTime(time); + if (!this.dom.lineContainer.parentNode) { + this.body.dom.backgroundHorizontal.appendChild(this.dom.lineContainer); + } }; /** - * Get the current time. - * Only applicable when option `showCurrentTime` is true. - * @return {Date} Returns the current time. + * Create the HTML DOM for the DataAxis */ - Core.prototype.getCurrentTime = function() { - if (!this.currentTime) { - throw new Error('Option showCurrentTime must be true'); + DataAxis.prototype.hide = function() { + this.hidden = true; + if (this.dom.frame.parentNode) { + this.dom.frame.parentNode.removeChild(this.dom.frame); } - return this.currentTime.getCurrentTime(); + if (this.dom.lineContainer.parentNode) { + this.dom.lineContainer.parentNode.removeChild(this.dom.lineContainer); + } }; /** - * Convert a position on screen (pixels) to a datetime - * @param {int} x Position on the screen in pixels - * @return {Date} time The datetime the corresponds with given position x - * @private + * Set a range (start and end) + * @param end + * @param start + * @param end */ - // TODO: move this function to Range - Core.prototype._toTime = function(x) { - return DateUtil.toTime(this, x, this.props.center.width); + DataAxis.prototype.setRange = function (start, end) { + if (this.master == false && this.options.alignZeros == true && this.zeroCrossing != -1) { + if (start > 0) { + start = 0; + } + } + this.range.start = start; + this.range.end = end; }; /** - * Convert a position on the global screen (pixels) to a datetime - * @param {int} x Position on the screen in pixels - * @return {Date} time The datetime the corresponds with given position x - * @private + * Repaint the component + * @return {boolean} Returns true if the component is resized */ - // TODO: move this function to Range - Core.prototype._toGlobalTime = function(x) { - return DateUtil.toTime(this, x, this.props.root.width); - //var conversion = this.range.conversion(this.props.root.width); - //return new Date(x / conversion.scale + conversion.offset); + DataAxis.prototype.redraw = function () { + var changeCalled = false; + var activeGroups = 0; + + // Make sure the line container adheres to the vertical scrolling. + this.dom.lineContainer.style.top = this.body.domProps.scrollTop + 'px'; + + for (var groupId in this.groups) { + if (this.groups.hasOwnProperty(groupId)) { + if (this.groups[groupId].visible == true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] == true)) { + activeGroups++; + } + } + } + if (this.amountOfGroups == 0 || activeGroups == 0) { + this.hide(); + } + else { + this.show(); + this.height = Number(this.linegraphSVG.style.height.replace("px","")); + + // svg offsetheight did not work in firefox and explorer... + this.dom.lineContainer.style.height = this.height + 'px'; + this.width = this.options.visible == true ? Number(('' + this.options.width).replace("px","")) : 0; + + var props = this.props; + var frame = this.dom.frame; + + // update classname + frame.className = 'dataaxis'; + + // calculate character width and height + this._calculateCharSize(); + + var orientation = this.options.orientation; + var showMinorLabels = this.options.showMinorLabels; + var showMajorLabels = this.options.showMajorLabels; + + // determine the width and height of the elements for the axis + props.minorLabelHeight = showMinorLabels ? props.minorCharHeight : 0; + props.majorLabelHeight = showMajorLabels ? props.majorCharHeight : 0; + + props.minorLineWidth = this.body.dom.backgroundHorizontal.offsetWidth - this.lineOffset - this.width + 2 * this.options.minorLinesOffset; + props.minorLineHeight = 1; + props.majorLineWidth = this.body.dom.backgroundHorizontal.offsetWidth - this.lineOffset - this.width + 2 * this.options.majorLinesOffset; + props.majorLineHeight = 1; + + // take frame offline while updating (is almost twice as fast) + if (orientation == 'left') { + frame.style.top = '0'; + frame.style.left = '0'; + frame.style.bottom = ''; + frame.style.width = this.width + 'px'; + frame.style.height = this.height + "px"; + } + else { // right + frame.style.top = ''; + frame.style.bottom = '0'; + frame.style.left = '0'; + frame.style.width = this.width + 'px'; + frame.style.height = this.height + "px"; + } + changeCalled = this._redrawLabels(); + + if (this.options.icons == true) { + this._redrawGroupIcons(); + } + else { + this._cleanupIcons(); + } + + this._redrawTitle(orientation); + } + return changeCalled; }; /** - * Convert a datetime (Date object) into a position on the screen - * @param {Date} time A date - * @return {int} x The position on the screen in pixels which corresponds - * with the given date. + * Repaint major and minor text labels and vertical grid lines * @private */ - // TODO: move this function to Range - Core.prototype._toScreen = function(time) { - return DateUtil.toScreen(this, time, this.props.center.width); - }; + DataAxis.prototype._redrawLabels = function () { + DOMutil.prepareElements(this.DOMelements.lines); + DOMutil.prepareElements(this.DOMelements.labels); + var orientation = this.options['orientation']; + // calculate range and step (step such that we have space for 7 characters per label) + var minimumStep = this.master ? this.props.majorCharHeight || 10 : this.stepPixelsForced; - /** - * Convert a datetime (Date object) into a position on the root - * This is used to get the pixel density estimate for the screen, not the center panel - * @param {Date} time A date - * @return {int} x The position on root in pixels which corresponds - * with the given date. - * @private - */ - // TODO: move this function to Range - Core.prototype._toGlobalScreen = function(time) { - return DateUtil.toScreen(this, time, this.props.root.width); - //var conversion = this.range.conversion(this.props.root.width); - //return (time.valueOf() - conversion.offset) * conversion.scale; - }; + var step = new DataStep( + this.range.start, + this.range.end, + minimumStep, + this.dom.frame.offsetHeight, + this.options.customRange[this.options.orientation], + this.master == false && this.options.alignZeros // doess the step have to align zeros? only if not master and the options is on + ); + this.step = step; + // get the distance in pixels for a step + // dead space is space that is "left over" after a step + var stepPixels = (this.dom.frame.offsetHeight - (step.deadSpace * (this.dom.frame.offsetHeight / step.marginRange))) / (((step.marginRange - step.deadSpace) / step.step)); - /** - * Initialize watching when option autoResize is true - * @private - */ - Core.prototype._initAutoResize = function () { - if (this.options.autoResize == true) { - this._startAutoResize(); + this.stepPixels = stepPixels; + + var amountOfSteps = this.height / stepPixels; + var stepDifference = 0; + + // the slave axis needs to use the same horizontal lines as the master axis. + if (this.master == false) { + stepPixels = this.stepPixelsForced; + stepDifference = Math.round((this.dom.frame.offsetHeight / stepPixels) - amountOfSteps); + for (var i = 0; i < 0.5 * stepDifference; i++) { + step.previous(); + } + amountOfSteps = this.height / stepPixels; + + if (this.zeroCrossing != -1 && this.options.alignZeros == true) { + var zeroStepDifference = (step.marginEnd / step.step) - this.zeroCrossing; + if (zeroStepDifference > 0) { + for (var i = 0; i < zeroStepDifference; i++) {step.next();} + } + else if (zeroStepDifference < 0) { + for (var i = 0; i < -zeroStepDifference; i++) {step.previous();} + } + } } else { - this._stopAutoResize(); + amountOfSteps += 0.25; } - }; - /** - * Watch for changes in the size of the container. On resize, the Panel will - * automatically redraw itself. - * @private - */ - Core.prototype._startAutoResize = function () { - var me = this; - this._stopAutoResize(); + this.valueAtZero = step.marginEnd; + var marginStartPos = 0; - this._onResize = function() { - if (me.options.autoResize != true) { - // stop watching when the option autoResize is changed to false - me._stopAutoResize(); - return; - } + // do not draw the first label + var max = 1; - if (me.dom.root) { - // check whether the frame is resized - // Note: we compare offsetWidth here, not clientWidth. For some reason, - // IE does not restore the clientWidth from 0 to the actual width after - // changing the timeline's container display style from none to visible - if ((me.dom.root.offsetWidth != me.props.lastWidth) || - (me.dom.root.offsetHeight != me.props.lastHeight)) { - me.props.lastWidth = me.dom.root.offsetWidth; - me.props.lastHeight = me.dom.root.offsetHeight; + // Get the number of decimal places + var decimals; + if(this.options.format[orientation] !== undefined) { + decimals = this.options.format[orientation].decimals; + } - me.emit('change'); - } + this.maxLabelSize = 0; + var y = 0; + while (max < Math.round(amountOfSteps)) { + step.next(); + y = Math.round(max * stepPixels); + marginStartPos = max * stepPixels; + var isMajor = step.isMajor(); + + if (this.options['showMinorLabels'] && isMajor == false || this.master == false && this.options['showMinorLabels'] == true) { + this._redrawLabel(y - 2, step.getCurrent(decimals), orientation, 'yAxis minor', this.props.minorCharHeight); } - }; - // add event listener to window resize - util.addEventListener(window, 'resize', this._onResize); + if (isMajor && this.options['showMajorLabels'] && this.master == true || + this.options['showMinorLabels'] == false && this.master == false && isMajor == true) { + if (y >= 0) { + this._redrawLabel(y - 2, step.getCurrent(decimals), orientation, 'yAxis major', this.props.majorCharHeight); + } + this._redrawLine(y, orientation, 'grid horizontal major', this.options.majorLinesOffset, this.props.majorLineWidth); + } + else { + this._redrawLine(y, orientation, 'grid horizontal minor', this.options.minorLinesOffset, this.props.minorLineWidth); + } - this.watchTimer = setInterval(this._onResize, 1000); - }; + if (this.master == true && step.current == 0) { + this.zeroCrossing = max; + } - /** - * Stop watching for a resize of the frame. - * @private - */ - Core.prototype._stopAutoResize = function () { - if (this.watchTimer) { - clearInterval(this.watchTimer); - this.watchTimer = undefined; + max++; } - // remove event listener on window.resize - util.removeEventListener(window, 'resize', this._onResize); - this._onResize = null; - }; + if (this.master == false) { + this.conversionFactor = y / (this.valueAtZero - step.current); + } + else { + this.conversionFactor = this.dom.frame.offsetHeight / step.marginRange; + } - /** - * Start moving the timeline vertically - * @param {Event} event - * @private - */ - Core.prototype._onTouch = function (event) { - this.touch.allowDragging = true; - }; + // Note that title is rotated, so we're using the height, not width! + var titleWidth = 0; + if (this.options.title[orientation] !== undefined && this.options.title[orientation].text !== undefined) { + titleWidth = this.props.titleCharHeight; + } + var offset = this.options.icons == true ? Math.max(this.options.iconWidth, titleWidth) + this.options.labelOffsetX + 15 : titleWidth + this.options.labelOffsetX + 15; - /** - * Start moving the timeline vertically - * @param {Event} event - * @private - */ - Core.prototype._onPinch = function (event) { - this.touch.allowDragging = false; + // this will resize the yAxis to accommodate the labels. + if (this.maxLabelSize > (this.width - offset) && this.options.visible == true) { + this.width = this.maxLabelSize + offset; + this.options.width = this.width + "px"; + DOMutil.cleanupElements(this.DOMelements.lines); + DOMutil.cleanupElements(this.DOMelements.labels); + this.redraw(); + return true; + } + // this will resize the yAxis if it is too big for the labels. + else if (this.maxLabelSize < (this.width - offset) && this.options.visible == true && this.width > this.minWidth) { + this.width = Math.max(this.minWidth,this.maxLabelSize + offset); + this.options.width = this.width + "px"; + DOMutil.cleanupElements(this.DOMelements.lines); + DOMutil.cleanupElements(this.DOMelements.labels); + this.redraw(); + return true; + } + else { + DOMutil.cleanupElements(this.DOMelements.lines); + DOMutil.cleanupElements(this.DOMelements.labels); + return false; + } }; - /** - * Start moving the timeline vertically - * @param {Event} event - * @private - */ - Core.prototype._onDragStart = function (event) { - this.touch.initialScrollTop = this.props.scrollTop; + DataAxis.prototype.convertValue = function (value) { + var invertedValue = this.valueAtZero - value; + var convertedValue = invertedValue * this.conversionFactor; + return convertedValue; }; /** - * Move the timeline vertically - * @param {Event} event + * Create a label for the axis at position x * @private + * @param y + * @param text + * @param orientation + * @param className + * @param characterHeight */ - Core.prototype._onDrag = function (event) { - // refuse to drag when we where pinching to prevent the timeline make a jump - // when releasing the fingers in opposite order from the touch screen - if (!this.touch.allowDragging) return; - - var delta = event.gesture.deltaY; + DataAxis.prototype._redrawLabel = function (y, text, orientation, className, characterHeight) { + // reuse redundant label + var label = DOMutil.getDOMElement('div',this.DOMelements.labels, this.dom.frame); //this.dom.redundant.labels.shift(); + label.className = className; + label.innerHTML = text; + if (orientation == 'left') { + label.style.left = '-' + this.options.labelOffsetX + 'px'; + label.style.textAlign = "right"; + } + else { + label.style.right = '-' + this.options.labelOffsetX + 'px'; + label.style.textAlign = "left"; + } - var oldScrollTop = this._getScrollTop(); - var newScrollTop = this._setScrollTop(this.touch.initialScrollTop + delta); + label.style.top = y - 0.5 * characterHeight + this.options.labelOffsetY + 'px'; + text += ''; - if (newScrollTop != oldScrollTop) { - this.redraw(); // TODO: this causes two redraws when dragging, the other is triggered by rangechange already - this.emit("verticalDrag"); + var largestWidth = Math.max(this.props.majorCharWidth,this.props.minorCharWidth); + if (this.maxLabelSize < text.length * largestWidth) { + this.maxLabelSize = text.length * largestWidth; } }; /** - * Apply a scrollTop - * @param {Number} scrollTop - * @returns {Number} scrollTop Returns the applied scrollTop - * @private + * Create a minor line for the axis at position y + * @param y + * @param orientation + * @param className + * @param offset + * @param width */ - Core.prototype._setScrollTop = function (scrollTop) { - this.props.scrollTop = scrollTop; - this._updateScrollTop(); - return this.props.scrollTop; + DataAxis.prototype._redrawLine = function (y, orientation, className, offset, width) { + if (this.master == true) { + var line = DOMutil.getDOMElement('div',this.DOMelements.lines, this.dom.lineContainer);//this.dom.redundant.lines.shift(); + line.className = className; + line.innerHTML = ''; + + if (orientation == 'left') { + line.style.left = (this.width - offset) + 'px'; + } + else { + line.style.right = (this.width - offset) + 'px'; + } + + line.style.width = width + 'px'; + line.style.top = y + 'px'; + } }; /** - * Update the current scrollTop when the height of the containers has been changed - * @returns {Number} scrollTop Returns the applied scrollTop + * Create a title for the axis * @private + * @param orientation */ - Core.prototype._updateScrollTop = function () { - // recalculate the scrollTopMin - var scrollTopMin = Math.min(this.props.centerContainer.height - this.props.center.height, 0); // is negative or zero - if (scrollTopMin != this.props.scrollTopMin) { - // in case of bottom orientation, change the scrollTop such that the contents - // do not move relative to the time axis at the bottom - if (this.options.orientation == 'bottom') { - this.props.scrollTop += (scrollTopMin - this.props.scrollTopMin); + DataAxis.prototype._redrawTitle = function (orientation) { + DOMutil.prepareElements(this.DOMelements.title); + + // Check if the title is defined for this axes + if (this.options.title[orientation] !== undefined && this.options.title[orientation].text !== undefined) { + var title = DOMutil.getDOMElement('div', this.DOMelements.title, this.dom.frame); + title.className = 'yAxis title ' + orientation; + title.innerHTML = this.options.title[orientation].text; + + // Add style - if provided + if (this.options.title[orientation].style !== undefined) { + util.addCssText(title, this.options.title[orientation].style); + } + + if (orientation == 'left') { + title.style.left = this.props.titleCharHeight + 'px'; + } + else { + title.style.right = this.props.titleCharHeight + 'px'; } - this.props.scrollTopMin = scrollTopMin; - } - - // limit the scrollTop to the feasible scroll range - if (this.props.scrollTop > 0) this.props.scrollTop = 0; - if (this.props.scrollTop < scrollTopMin) this.props.scrollTop = scrollTopMin; - return this.props.scrollTop; - }; + title.style.width = this.height + 'px'; + } - /** - * Get the current scrollTop - * @returns {number} scrollTop - * @private - */ - Core.prototype._getScrollTop = function () { - return this.props.scrollTop; + // we need to clean up in case we did not use all elements. + DOMutil.cleanupElements(this.DOMelements.title); }; - module.exports = Core; - -/***/ }, -/* 47 */ -/***/ function(module, exports, __webpack_require__) { - var Hammer = __webpack_require__(45); /** - * Fake a hammer.js gesture. Event can be a ScrollEvent or MouseMoveEvent - * @param {Element} element - * @param {Event} event + * Determine the size of text on the axis (both major and minor axis). + * The size is calculated only once and then cached in this.props. + * @private */ - exports.fakeGesture = function(element, event) { - var eventType = null; - - // for hammer.js 1.0.5 - // var gesture = Hammer.event.collectEventData(this, eventType, event); + DataAxis.prototype._calculateCharSize = function () { + // determine the char width and height on the minor axis + if (!('minorCharHeight' in this.props)) { + var textMinor = document.createTextNode('0'); + var measureCharMinor = document.createElement('div'); + measureCharMinor.className = 'yAxis minor measure'; + measureCharMinor.appendChild(textMinor); + this.dom.frame.appendChild(measureCharMinor); - // for hammer.js 1.0.6+ - var touches = Hammer.event.getTouchList(event, eventType); - var gesture = Hammer.event.collectEventData(this, eventType, touches, event); + this.props.minorCharHeight = measureCharMinor.clientHeight; + this.props.minorCharWidth = measureCharMinor.clientWidth; - // on IE in standards mode, no touches are recognized by hammer.js, - // resulting in NaN values for center.pageX and center.pageY - if (isNaN(gesture.center.pageX)) { - gesture.center.pageX = event.pageX; - } - if (isNaN(gesture.center.pageY)) { - gesture.center.pageY = event.pageY; + this.dom.frame.removeChild(measureCharMinor); } - return gesture; - }; - - -/***/ }, -/* 48 */ -/***/ function(module, exports, __webpack_require__) { + if (!('majorCharHeight' in this.props)) { + var textMajor = document.createTextNode('0'); + var measureCharMajor = document.createElement('div'); + measureCharMajor.className = 'yAxis major measure'; + measureCharMajor.appendChild(textMajor); + this.dom.frame.appendChild(measureCharMajor); - // English - exports['en'] = { - current: 'current', - time: 'time' - }; - exports['en_EN'] = exports['en']; - exports['en_US'] = exports['en']; + this.props.majorCharHeight = measureCharMajor.clientHeight; + this.props.majorCharWidth = measureCharMajor.clientWidth; - // Dutch - exports['nl'] = { - custom: 'aangepaste', - time: 'tijd' - }; - exports['nl_NL'] = exports['nl']; - exports['nl_BE'] = exports['nl']; + this.dom.frame.removeChild(measureCharMajor); + } + if (!('titleCharHeight' in this.props)) { + var textTitle = document.createTextNode('0'); + var measureCharTitle = document.createElement('div'); + measureCharTitle.className = 'yAxis title measure'; + measureCharTitle.appendChild(textTitle); + this.dom.frame.appendChild(measureCharTitle); -/***/ }, -/* 49 */ -/***/ function(module, exports, __webpack_require__) { + this.props.titleCharHeight = measureCharTitle.clientHeight; + this.props.titleCharWidth = measureCharTitle.clientWidth; - // English - exports['en'] = { - edit: 'Edit', - del: 'Delete selected', - back: 'Back', - addNode: 'Add Node', - addEdge: 'Add Edge', - editNode: 'Edit Node', - editEdge: 'Edit Edge', - addDescription: 'Click in an empty space to place a new node.', - edgeDescription: 'Click on a node and drag the edge to another node to connect them.', - editEdgeDescription: 'Click on the control points and drag them to a node to connect to it.', - createEdgeError: 'Cannot link edges to a cluster.', - deleteClusterError: 'Clusters cannot be deleted.' + this.dom.frame.removeChild(measureCharTitle); + } }; - exports['en_EN'] = exports['en']; - exports['en_US'] = exports['en']; - // Dutch - exports['nl'] = { - edit: 'Wijzigen', - del: 'Selectie verwijderen', - back: 'Terug', - addNode: 'Node toevoegen', - addEdge: 'Link toevoegen', - editNode: 'Node wijzigen', - editEdge: 'Link wijzigen', - addDescription: 'Klik op een leeg gebied om een nieuwe node te maken.', - edgeDescription: 'Klik op een node en sleep de link naar een andere node om ze te verbinden.', - editEdgeDescription: 'Klik op de verbindingspunten en sleep ze naar een node om daarmee te verbinden.', - createEdgeError: 'Kan geen link maken naar een cluster.', - deleteClusterError: 'Clusters kunnen niet worden verwijderd.' + /** + * Snap a date to a rounded value. + * The snap intervals are dependent on the current scale and step. + * @param {Date} date the date to be snapped. + * @return {Date} snappedDate + */ + DataAxis.prototype.snap = function(date) { + return this.step.snap(date); }; - exports['nl_NL'] = exports['nl']; - exports['nl_BE'] = exports['nl']; + + module.exports = DataAxis; /***/ }, -/* 50 */ +/* 46 */ /***/ function(module, exports, __webpack_require__) { + var util = __webpack_require__(1); + var DOMutil = __webpack_require__(6); + var Line = __webpack_require__(47); + var Bar = __webpack_require__(49); + var Points = __webpack_require__(48); + /** - * Canvas shapes used by Network + * /** + * @param {object} group | the object of the group from the dataset + * @param {string} groupId | ID of the group + * @param {object} options | the default options + * @param {array} groupsUsingDefaultStyles | this array has one entree. + * It is passed as an array so it is passed by reference. + * It enumerates through the default styles + * @constructor */ - if (typeof CanvasRenderingContext2D !== 'undefined') { - - /** - * Draw a circle shape - */ - CanvasRenderingContext2D.prototype.circle = function(x, y, r) { - this.beginPath(); - this.arc(x, y, r, 0, 2*Math.PI, false); - }; - - /** - * Draw a square shape - * @param {Number} x horizontal center - * @param {Number} y vertical center - * @param {Number} r size, width and height of the square - */ - CanvasRenderingContext2D.prototype.square = function(x, y, r) { - this.beginPath(); - this.rect(x - r, y - r, r * 2, r * 2); - }; + function GraphGroup (group, groupId, options, groupsUsingDefaultStyles) { + this.id = groupId; + var fields = ['sampling','style','sort','yAxisOrientation','barChart','drawPoints','shaded','catmullRom'] + this.options = util.selectiveBridgeObject(fields,options); + this.usingDefaultStyle = group.className === undefined; + this.groupsUsingDefaultStyles = groupsUsingDefaultStyles; + this.zeroPosition = 0; + this.update(group); + if (this.usingDefaultStyle == true) { + this.groupsUsingDefaultStyles[0] += 1; + } + this.itemsData = []; + this.visible = group.visible === undefined ? true : group.visible; + } - /** - * Draw a triangle shape - * @param {Number} x horizontal center - * @param {Number} y vertical center - * @param {Number} r radius, half the length of the sides of the triangle - */ - CanvasRenderingContext2D.prototype.triangle = function(x, y, r) { - // http://en.wikipedia.org/wiki/Equilateral_triangle - this.beginPath(); - var s = r * 2; - var s2 = s / 2; - var ir = Math.sqrt(3) / 6 * s; // radius of inner circle - var h = Math.sqrt(s * s - s2 * s2); // height + /** + * this loads a reference to all items in this group into this group. + * @param {array} items + */ + GraphGroup.prototype.setItems = function(items) { + if (items != null) { + this.itemsData = items; + if (this.options.sort == true) { + this.itemsData.sort(function (a,b) {return a.x - b.x;}) + } + } + else { + this.itemsData = []; + } + }; - this.moveTo(x, y - (h - ir)); - this.lineTo(x + s2, y + ir); - this.lineTo(x - s2, y + ir); - this.lineTo(x, y - (h - ir)); - this.closePath(); - }; - /** - * Draw a triangle shape in downward orientation - * @param {Number} x horizontal center - * @param {Number} y vertical center - * @param {Number} r radius - */ - CanvasRenderingContext2D.prototype.triangleDown = function(x, y, r) { - // http://en.wikipedia.org/wiki/Equilateral_triangle - this.beginPath(); + /** + * this is used for plotting barcharts, this way, we only have to calculate it once. + * @param pos + */ + GraphGroup.prototype.setZeroPosition = function(pos) { + this.zeroPosition = pos; + }; - var s = r * 2; - var s2 = s / 2; - var ir = Math.sqrt(3) / 6 * s; // radius of inner circle - var h = Math.sqrt(s * s - s2 * s2); // height - this.moveTo(x, y + (h - ir)); - this.lineTo(x + s2, y - ir); - this.lineTo(x - s2, y - ir); - this.lineTo(x, y + (h - ir)); - this.closePath(); - }; + /** + * set the options of the graph group over the default options. + * @param options + */ + GraphGroup.prototype.setOptions = function(options) { + if (options !== undefined) { + var fields = ['sampling','style','sort','yAxisOrientation','barChart']; + util.selectiveDeepExtend(fields, this.options, options); - /** - * Draw a star shape, a star with 5 points - * @param {Number} x horizontal center - * @param {Number} y vertical center - * @param {Number} r radius, half the length of the sides of the triangle - */ - CanvasRenderingContext2D.prototype.star = function(x, y, r) { - // http://www.html5canvastutorials.com/labs/html5-canvas-star-spinner/ - this.beginPath(); + util.mergeOptions(this.options, options,'catmullRom'); + util.mergeOptions(this.options, options,'drawPoints'); + util.mergeOptions(this.options, options,'shaded'); - for (var n = 0; n < 10; n++) { - var radius = (n % 2 === 0) ? r * 1.3 : r * 0.5; - this.lineTo( - x + radius * Math.sin(n * 2 * Math.PI / 10), - y - radius * Math.cos(n * 2 * Math.PI / 10) - ); + if (options.catmullRom) { + if (typeof options.catmullRom == 'object') { + if (options.catmullRom.parametrization) { + if (options.catmullRom.parametrization == 'uniform') { + this.options.catmullRom.alpha = 0; + } + else if (options.catmullRom.parametrization == 'chordal') { + this.options.catmullRom.alpha = 1.0; + } + else { + this.options.catmullRom.parametrization = 'centripetal'; + this.options.catmullRom.alpha = 0.5; + } + } + } } + } - this.closePath(); - }; - - /** - * http://stackoverflow.com/questions/1255512/how-to-draw-a-rounded-rectangle-on-html-canvas - */ - CanvasRenderingContext2D.prototype.roundRect = function(x, y, w, h, r) { - var r2d = Math.PI/180; - if( w - ( 2 * r ) < 0 ) { r = ( w / 2 ); } //ensure that the radius isn't too large for x - if( h - ( 2 * r ) < 0 ) { r = ( h / 2 ); } //ensure that the radius isn't too large for y - this.beginPath(); - this.moveTo(x+r,y); - this.lineTo(x+w-r,y); - this.arc(x+w-r,y+r,r,r2d*270,r2d*360,false); - this.lineTo(x+w,y+h-r); - this.arc(x+w-r,y+h-r,r,0,r2d*90,false); - this.lineTo(x+r,y+h); - this.arc(x+r,y+h-r,r,r2d*90,r2d*180,false); - this.lineTo(x,y+r); - this.arc(x+r,y+r,r,r2d*180,r2d*270,false); - }; - - /** - * http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas - */ - CanvasRenderingContext2D.prototype.ellipse = function(x, y, w, h) { - var kappa = .5522848, - ox = (w / 2) * kappa, // control point offset horizontal - oy = (h / 2) * kappa, // control point offset vertical - xe = x + w, // x-end - ye = y + h, // y-end - xm = x + w / 2, // x-middle - ym = y + h / 2; // y-middle - - this.beginPath(); - this.moveTo(x, ym); - this.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y); - this.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym); - this.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye); - this.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym); - }; - - + if (this.options.style == 'line') { + this.type = new Line(this.id, this.options); + } + else if (this.options.style == 'bar') { + this.type = new Bar(this.id, this.options); + } + else if (this.options.style == 'points') { + this.type = new Points(this.id, this.options); + } + }; - /** - * http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas - */ - CanvasRenderingContext2D.prototype.database = function(x, y, w, h) { - var f = 1/3; - var wEllipse = w; - var hEllipse = h * f; - var kappa = .5522848, - ox = (wEllipse / 2) * kappa, // control point offset horizontal - oy = (hEllipse / 2) * kappa, // control point offset vertical - xe = x + wEllipse, // x-end - ye = y + hEllipse, // y-end - xm = x + wEllipse / 2, // x-middle - ym = y + hEllipse / 2, // y-middle - ymb = y + (h - hEllipse/2), // y-midlle, bottom ellipse - yeb = y + h; // y-end, bottom ellipse + /** + * this updates the current group class with the latest group dataset entree, used in _updateGroup in linegraph + * @param group + */ + GraphGroup.prototype.update = function(group) { + this.group = group; + this.content = group.content || 'graph'; + this.className = group.className || this.className || "graphGroup" + this.groupsUsingDefaultStyles[0] % 10; + this.visible = group.visible === undefined ? true : group.visible; + this.style = group.style; + this.setOptions(group.options); + }; - this.beginPath(); - this.moveTo(xe, ym); - this.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye); - this.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym); + /** + * draw the icon for the legend. + * + * @param x + * @param y + * @param JSONcontainer + * @param SVGcontainer + * @param iconWidth + * @param iconHeight + */ + GraphGroup.prototype.drawIcon = function(x, y, JSONcontainer, SVGcontainer, iconWidth, iconHeight) { + var fillHeight = iconHeight * 0.5; + var path, fillPath; - this.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y); - this.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym); + var outline = DOMutil.getSVGElement("rect", JSONcontainer, SVGcontainer); + outline.setAttributeNS(null, "x", x); + outline.setAttributeNS(null, "y", y - fillHeight); + outline.setAttributeNS(null, "width", iconWidth); + outline.setAttributeNS(null, "height", 2*fillHeight); + outline.setAttributeNS(null, "class", "outline"); - this.lineTo(xe, ymb); + if (this.options.style == 'line') { + path = DOMutil.getSVGElement("path", JSONcontainer, SVGcontainer); + path.setAttributeNS(null, "class", this.className); + if(this.style !== undefined) { + path.setAttributeNS(null, "style", this.style); + } - this.bezierCurveTo(xe, ymb + oy, xm + ox, yeb, xm, yeb); - this.bezierCurveTo(xm - ox, yeb, x, ymb + oy, x, ymb); + path.setAttributeNS(null, "d", "M" + x + ","+y+" L" + (x + iconWidth) + ","+y+""); + if (this.options.shaded.enabled == true) { + fillPath = DOMutil.getSVGElement("path", JSONcontainer, SVGcontainer); + if (this.options.shaded.orientation == 'top') { + fillPath.setAttributeNS(null, "d", "M"+x+", " + (y - fillHeight) + + "L"+x+","+y+" L"+ (x + iconWidth) + ","+y+" L"+ (x + iconWidth) + "," + (y - fillHeight)); + } + else { + fillPath.setAttributeNS(null, "d", "M"+x+","+y+" " + + "L"+x+"," + (y + fillHeight) + " " + + "L"+ (x + iconWidth) + "," + (y + fillHeight) + + "L"+ (x + iconWidth) + ","+y); + } + fillPath.setAttributeNS(null, "class", this.className + " iconFill"); + } - this.lineTo(x, ym); - }; + if (this.options.drawPoints.enabled == true) { + DOMutil.drawPoint(x + 0.5 * iconWidth,y, this, JSONcontainer, SVGcontainer); + } + } + else { + var barWidth = Math.round(0.3 * iconWidth); + var bar1Height = Math.round(0.4 * iconHeight); + var bar2Height = Math.round(0.75 * iconHeight); + var offset = Math.round((iconWidth - (2 * barWidth))/3); - /** - * Draw an arrow point (no line) - */ - CanvasRenderingContext2D.prototype.arrow = function(x, y, angle, length) { - // tail - var xt = x - length * Math.cos(angle); - var yt = y - length * Math.sin(angle); + DOMutil.drawBar(x + 0.5*barWidth + offset , y + fillHeight - bar1Height - 1, barWidth, bar1Height, this.className + ' bar', JSONcontainer, SVGcontainer); + DOMutil.drawBar(x + 1.5*barWidth + offset + 2, y + fillHeight - bar2Height - 1, barWidth, bar2Height, this.className + ' bar', JSONcontainer, SVGcontainer); + } + }; - // inner tail - // TODO: allow to customize different shapes - var xi = x - length * 0.9 * Math.cos(angle); - var yi = y - length * 0.9 * Math.sin(angle); - // left - var xl = xt + length / 3 * Math.cos(angle + 0.5 * Math.PI); - var yl = yt + length / 3 * Math.sin(angle + 0.5 * Math.PI); + /** + * return the legend entree for this group. + * + * @param iconWidth + * @param iconHeight + * @returns {{icon: HTMLElement, label: (group.content|*|string), orientation: (.options.yAxisOrientation|*)}} + */ + GraphGroup.prototype.getLegend = function(iconWidth, iconHeight) { + var svg = document.createElementNS('http://www.w3.org/2000/svg',"svg"); + this.drawIcon(0,0.5*iconHeight,[],svg,iconWidth,iconHeight); + return {icon: svg, label: this.content, orientation:this.options.yAxisOrientation}; + } - // right - var xr = xt + length / 3 * Math.cos(angle - 0.5 * Math.PI); - var yr = yt + length / 3 * Math.sin(angle - 0.5 * Math.PI); + GraphGroup.prototype.getYRange = function(groupData) { + return this.type.getYRange(groupData); + } - this.beginPath(); - this.moveTo(x, y); - this.lineTo(xl, yl); - this.lineTo(xi, yi); - this.lineTo(xr, yr); - this.closePath(); - }; + GraphGroup.prototype.draw = function(dataset, group, framework) { + this.type.draw(dataset, group, framework); + } - /** - * Sets up the dashedLine functionality for drawing - * Original code came from http://stackoverflow.com/questions/4576724/dotted-stroke-in-canvas - * @author David Jordan - * @date 2012-08-08 - */ - CanvasRenderingContext2D.prototype.dashedLine = function(x,y,x2,y2,dashArray){ - if (!dashArray) dashArray=[10,5]; - if (dashLength==0) dashLength = 0.001; // Hack for Safari - var dashCount = dashArray.length; - this.moveTo(x, y); - var dx = (x2-x), dy = (y2-y); - var slope = dy/dx; - var distRemaining = Math.sqrt( dx*dx + dy*dy ); - var dashIndex=0, draw=true; - while (distRemaining>=0.1){ - var dashLength = dashArray[dashIndex++%dashCount]; - if (dashLength > distRemaining) dashLength = distRemaining; - var xStep = Math.sqrt( dashLength*dashLength / (1 + slope*slope) ); - if (dx<0) xStep = -xStep; - x += xStep; - y += slope*xStep; - this[draw ? 'lineTo' : 'moveTo'](x,y); - distRemaining -= dashLength; - draw = !draw; - } - }; - // TODO: add diamond shape - } + module.exports = GraphGroup; /***/ }, -/* 51 */ +/* 47 */ /***/ function(module, exports, __webpack_require__) { /** * Created by Alex on 11/11/2014. */ - var DOMutil = __webpack_require__(2); - var Points = __webpack_require__(53); + var DOMutil = __webpack_require__(6); + var Points = __webpack_require__(48); function Line(groupId, options) { this.groupId = groupId; @@ -22800,14 +21961,62 @@ return /******/ (function(modules) { // webpackBootstrap /***/ }, -/* 52 */ +/* 48 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Created by Alex on 11/11/2014. + */ + var DOMutil = __webpack_require__(6); + + function Points(groupId, options) { + this.groupId = groupId; + this.options = options; + } + + + Points.prototype.getYRange = function(groupData) { + var yMin = groupData[0].y; + var yMax = groupData[0].y; + for (var j = 0; j < groupData.length; j++) { + yMin = yMin > groupData[j].y ? groupData[j].y : yMin; + yMax = yMax < groupData[j].y ? groupData[j].y : yMax; + } + return {min: yMin, max: yMax, yAxisOrientation: this.options.yAxisOrientation}; + }; + + Points.prototype.draw = function(dataset, group, framework, offset) { + Points.draw(dataset, group, framework, offset); + } + + /** + * draw the data points + * + * @param {Array} dataset + * @param {Object} JSONcontainer + * @param {Object} svg | SVG DOM element + * @param {GraphGroup} group + * @param {Number} [offset] + */ + Points.draw = function (dataset, group, framework, offset) { + if (offset === undefined) {offset = 0;} + for (var i = 0; i < dataset.length; i++) { + DOMutil.drawPoint(dataset[i].x + offset, dataset[i].y, group, framework.svgElements, framework.svg); + } + }; + + + module.exports = Points; + +/***/ }, +/* 49 */ /***/ function(module, exports, __webpack_require__) { /** * Created by Alex on 11/11/2014. */ - var DOMutil = __webpack_require__(2); - var Points = __webpack_require__(53); + var DOMutil = __webpack_require__(6); + var Points = __webpack_require__(48); function Bargraph(groupId, options) { this.groupId = groupId; @@ -23034,6409 +22243,7271 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = Bargraph; /***/ }, -/* 53 */ +/* 50 */ /***/ function(module, exports, __webpack_require__) { - /** - * Created by Alex on 11/11/2014. - */ - var DOMutil = __webpack_require__(2); - - function Points(groupId, options) { - this.groupId = groupId; - this.options = options; - } - - - Points.prototype.getYRange = function(groupData) { - var yMin = groupData[0].y; - var yMax = groupData[0].y; - for (var j = 0; j < groupData.length; j++) { - yMin = yMin > groupData[j].y ? groupData[j].y : yMin; - yMax = yMax < groupData[j].y ? groupData[j].y : yMax; - } - return {min: yMin, max: yMax, yAxisOrientation: this.options.yAxisOrientation}; - }; - - Points.prototype.draw = function(dataset, group, framework, offset) { - Points.draw(dataset, group, framework, offset); - } + var util = __webpack_require__(1); + var DOMutil = __webpack_require__(6); + var Component = __webpack_require__(23); /** - * draw the data points - * - * @param {Array} dataset - * @param {Object} JSONcontainer - * @param {Object} svg | SVG DOM element - * @param {GraphGroup} group - * @param {Number} [offset] + * Legend for Graph2d */ - Points.draw = function (dataset, group, framework, offset) { - if (offset === undefined) {offset = 0;} - for (var i = 0; i < dataset.length; i++) { - DOMutil.drawPoint(dataset[i].x + offset, dataset[i].y, group, framework.svgElements, framework.svg); + function Legend(body, options, side, linegraphOptions) { + this.body = body; + this.defaultOptions = { + enabled: true, + icons: true, + iconSize: 20, + iconSpacing: 6, + left: { + visible: true, + position: 'top-left' // top/bottom - left,center,right + }, + right: { + visible: true, + position: 'top-left' // top/bottom - left,center,right + } } - }; - + this.side = side; + this.options = util.extend({},this.defaultOptions); + this.linegraphOptions = linegraphOptions; - module.exports = Points; + this.svgElements = {}; + this.dom = {}; + this.groups = {}; + this.amountOfGroups = 0; + this._create(); -/***/ }, -/* 54 */ -/***/ function(module, exports, __webpack_require__) { + this.setOptions(options); + } - var PhysicsMixin = __webpack_require__(66); - var ClusterMixin = __webpack_require__(60); - var SectorsMixin = __webpack_require__(61); - var SelectionMixin = __webpack_require__(62); - var ManipulationMixin = __webpack_require__(63); - var NavigationMixin = __webpack_require__(64); - var HierarchicalLayoutMixin = __webpack_require__(65); + Legend.prototype = new Component(); - /** - * Load a mixin into the network object - * - * @param {Object} sourceVariable | this object has to contain functions. - * @private - */ - exports._loadMixin = function (sourceVariable) { - for (var mixinFunction in sourceVariable) { - if (sourceVariable.hasOwnProperty(mixinFunction)) { - this[mixinFunction] = sourceVariable[mixinFunction]; - } - } - }; + Legend.prototype.clear = function() { + this.groups = {}; + this.amountOfGroups = 0; + } + Legend.prototype.addGroup = function(label, graphOptions) { - /** - * removes a mixin from the network object. - * - * @param {Object} sourceVariable | this object has to contain functions. - * @private - */ - exports._clearMixin = function (sourceVariable) { - for (var mixinFunction in sourceVariable) { - if (sourceVariable.hasOwnProperty(mixinFunction)) { - this[mixinFunction] = undefined; - } + if (!this.groups.hasOwnProperty(label)) { + this.groups[label] = graphOptions; } + this.amountOfGroups += 1; }; - - /** - * Mixin the physics system and initialize the parameters required. - * - * @private - */ - exports._loadPhysicsSystem = function () { - this._loadMixin(PhysicsMixin); - this._loadSelectedForceSolver(); - if (this.constants.configurePhysics == true) { - this._loadPhysicsConfiguration(); - } + Legend.prototype.updateGroup = function(label, graphOptions) { + this.groups[label] = graphOptions; }; - - /** - * Mixin the cluster system and initialize the parameters required. - * - * @private - */ - exports._loadClusterSystem = function () { - this.clusterSession = 0; - this.hubThreshold = 5; - this._loadMixin(ClusterMixin); + Legend.prototype.removeGroup = function(label) { + if (this.groups.hasOwnProperty(label)) { + delete this.groups[label]; + this.amountOfGroups -= 1; + } }; + Legend.prototype._create = function() { + this.dom.frame = document.createElement('div'); + this.dom.frame.className = 'legend'; + this.dom.frame.style.position = "absolute"; + this.dom.frame.style.top = "10px"; + this.dom.frame.style.display = "block"; - /** - * Mixin the sector system and initialize the parameters required - * - * @private - */ - exports._loadSectorSystem = function () { - this.sectors = {}; - this.activeSector = ["default"]; - this.sectors["active"] = {}; - this.sectors["active"]["default"] = {"nodes": {}, - "edges": {}, - "nodeIndices": [], - "formationScale": 1.0, - "drawingNode": undefined }; - this.sectors["frozen"] = {}; - this.sectors["support"] = {"nodes": {}, - "edges": {}, - "nodeIndices": [], - "formationScale": 1.0, - "drawingNode": undefined }; + this.dom.textArea = document.createElement('div'); + this.dom.textArea.className = 'legendText'; + this.dom.textArea.style.position = "relative"; + this.dom.textArea.style.top = "0px"; - this.nodeIndices = this.sectors["active"]["default"]["nodeIndices"]; // the node indices list is used to speed up the computation of the repulsion fields + this.svg = document.createElementNS('http://www.w3.org/2000/svg',"svg"); + this.svg.style.position = 'absolute'; + this.svg.style.top = 0 +'px'; + this.svg.style.width = this.options.iconSize + 5 + 'px'; + this.svg.style.height = '100%'; - this._loadMixin(SectorsMixin); + this.dom.frame.appendChild(this.svg); + this.dom.frame.appendChild(this.dom.textArea); }; - /** - * Mixin the selection system and initialize the parameters required - * - * @private + * Hide the component from the DOM */ - exports._loadSelectionSystem = function () { - this.selectionObj = {nodes: {}, edges: {}}; - - this._loadMixin(SelectionMixin); + Legend.prototype.hide = function() { + // remove the frame containing the items + if (this.dom.frame.parentNode) { + this.dom.frame.parentNode.removeChild(this.dom.frame); + } }; - /** - * Mixin the navigationUI (User Interface) system and initialize the parameters required - * - * @private + * Show the component in the DOM (when not already visible). + * @return {Boolean} changed */ - exports._loadManipulationSystem = function () { - // reset global variables -- these are used by the selection of nodes and edges. - this.blockConnectingEdgeSelection = false; - this.forceAppendSelection = false; - - if (this.constants.dataManipulation.enabled == true) { - // load the manipulator HTML elements. All styling done in css. - if (this.manipulationDiv === undefined) { - this.manipulationDiv = document.createElement('div'); - this.manipulationDiv.className = 'network-manipulationDiv'; - if (this.editMode == true) { - this.manipulationDiv.style.display = "block"; - } - else { - this.manipulationDiv.style.display = "none"; - } - this.frame.appendChild(this.manipulationDiv); - } - - if (this.editModeDiv === undefined) { - this.editModeDiv = document.createElement('div'); - this.editModeDiv.className = 'network-manipulation-editMode'; - if (this.editMode == true) { - this.editModeDiv.style.display = "none"; - } - else { - this.editModeDiv.style.display = "block"; - } - this.frame.appendChild(this.editModeDiv); - } + Legend.prototype.show = function() { + // show frame containing the items + if (!this.dom.frame.parentNode) { + this.body.dom.center.appendChild(this.dom.frame); + } + }; - if (this.closeDiv === undefined) { - this.closeDiv = document.createElement('div'); - this.closeDiv.className = 'network-manipulation-closeDiv'; - this.closeDiv.style.display = this.manipulationDiv.style.display; - this.frame.appendChild(this.closeDiv); - } + Legend.prototype.setOptions = function(options) { + var fields = ['enabled','orientation','icons','left','right']; + util.selectiveDeepExtend(fields, this.options, options); + }; - // load the manipulation functions - this._loadMixin(ManipulationMixin); + Legend.prototype.redraw = function() { + var activeGroups = 0; + for (var groupId in this.groups) { + if (this.groups.hasOwnProperty(groupId)) { + if (this.groups[groupId].visible == true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] == true)) { + activeGroups++; + } + } + } - // create the manipulator toolbar - this._createManipulatorBar(); + if (this.options[this.side].visible == false || this.amountOfGroups == 0 || this.options.enabled == false || activeGroups == 0) { + this.hide(); } else { - if (this.manipulationDiv !== undefined) { - // removes all the bindings and overloads - this._createManipulatorBar(); + this.show(); + if (this.options[this.side].position == 'top-left' || this.options[this.side].position == 'bottom-left') { + this.dom.frame.style.left = '4px'; + this.dom.frame.style.textAlign = "left"; + this.dom.textArea.style.textAlign = "left"; + this.dom.textArea.style.left = (this.options.iconSize + 15) + 'px'; + this.dom.textArea.style.right = ''; + this.svg.style.left = 0 +'px'; + this.svg.style.right = ''; + } + else { + this.dom.frame.style.right = '4px'; + this.dom.frame.style.textAlign = "right"; + this.dom.textArea.style.textAlign = "right"; + this.dom.textArea.style.right = (this.options.iconSize + 15) + 'px'; + this.dom.textArea.style.left = ''; + this.svg.style.right = 0 +'px'; + this.svg.style.left = ''; + } - // remove the manipulation divs - this.frame.removeChild(this.manipulationDiv); - this.frame.removeChild(this.editModeDiv); - this.frame.removeChild(this.closeDiv); + if (this.options[this.side].position == 'top-left' || this.options[this.side].position == 'top-right') { + this.dom.frame.style.top = 4 - Number(this.body.dom.center.style.top.replace("px","")) + 'px'; + this.dom.frame.style.bottom = ''; + } + else { + var scrollableHeight = this.body.domProps.center.height - this.body.domProps.centerContainer.height; + this.dom.frame.style.bottom = 4 + scrollableHeight + Number(this.body.dom.center.style.top.replace("px","")) + 'px'; + this.dom.frame.style.top = ''; + } - this.manipulationDiv = undefined; - this.editModeDiv = undefined; - this.closeDiv = undefined; - // remove the mixin functions - this._clearMixin(ManipulationMixin); + if (this.options.icons == false) { + this.dom.frame.style.width = this.dom.textArea.offsetWidth + 10 + 'px'; + this.dom.textArea.style.right = ''; + this.dom.textArea.style.left = ''; + this.svg.style.width = '0px'; + } + else { + this.dom.frame.style.width = this.options.iconSize + 15 + this.dom.textArea.offsetWidth + 10 + 'px' + this.drawLegendIcons(); } + + var content = ''; + for (var groupId in this.groups) { + if (this.groups.hasOwnProperty(groupId)) { + if (this.groups[groupId].visible == true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] == true)) { + content += this.groups[groupId].content + '
'; + } + } + } + this.dom.textArea.innerHTML = content; + this.dom.textArea.style.lineHeight = ((0.75 * this.options.iconSize) + this.options.iconSpacing) + 'px'; } }; + Legend.prototype.drawLegendIcons = function() { + if (this.dom.frame.parentNode) { + DOMutil.prepareElements(this.svgElements); + var padding = window.getComputedStyle(this.dom.frame).paddingTop; + var iconOffset = Number(padding.replace('px','')); + var x = iconOffset; + var iconWidth = this.options.iconSize; + var iconHeight = 0.75 * this.options.iconSize; + var y = iconOffset + 0.5 * iconHeight + 3; - /** - * Mixin the navigation (User Interface) system and initialize the parameters required - * - * @private - */ - exports._loadNavigationControls = function () { - this._loadMixin(NavigationMixin); - // the clean function removes the button divs, this is done to remove the bindings. - this._cleanNavigation(); - if (this.constants.navigation.enabled == true) { - this._loadNavigationElements(); - } - }; + this.svg.style.width = iconWidth + 5 + iconOffset + 'px'; + for (var groupId in this.groups) { + if (this.groups.hasOwnProperty(groupId)) { + if (this.groups[groupId].visible == true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] == true)) { + this.groups[groupId].drawIcon(x, y, this.svgElements, this.svg, iconWidth, iconHeight); + y += iconHeight + this.options.iconSpacing; + } + } + } - /** - * Mixin the hierarchical layout system. - * - * @private - */ - exports._loadHierarchySystem = function () { - this._loadMixin(HierarchicalLayoutMixin); + DOMutil.cleanupElements(this.svgElements); + } }; + module.exports = Legend; + /***/ }, -/* 55 */ +/* 51 */ /***/ function(module, exports, __webpack_require__) { - var keycharm = __webpack_require__(57); - var Emitter = __webpack_require__(56); - var Hammer = __webpack_require__(45); + var Emitter = __webpack_require__(11); + var Hammer = __webpack_require__(19); + var keycharm = __webpack_require__(36); var util = __webpack_require__(1); + var hammerUtil = __webpack_require__(22); + var DataSet = __webpack_require__(7); + var DataView = __webpack_require__(9); + var dotparser = __webpack_require__(52); + var gephiParser = __webpack_require__(53); + var Groups = __webpack_require__(54); + var Images = __webpack_require__(55); + var Node = __webpack_require__(56); + var Edge = __webpack_require__(57); + var Popup = __webpack_require__(58); + var MixinLoader = __webpack_require__(59); + var Activator = __webpack_require__(35); + var locales = __webpack_require__(70); + + // Load custom shapes into CanvasRenderingContext2D + __webpack_require__(71); /** - * Turn an element into an clickToUse element. - * When not active, the element has a transparent overlay. When the overlay is - * clicked, the mode is changed to active. - * When active, the element is displayed with a blue border around it, and - * the interactive contents of the element can be used. When clicked outside - * the element, the elements mode is changed to inactive. - * @param {Element} container - * @constructor + * @constructor Network + * Create a network visualization, displaying nodes and edges. + * + * @param {Element} container The DOM element in which the Network will + * be created. Normally a div element. + * @param {Object} data An object containing parameters + * {Array} nodes + * {Array} edges + * @param {Object} options Options */ - function Activator(container) { - this.active = false; - - this.dom = { - container: container - }; - - this.dom.overlay = document.createElement('div'); - this.dom.overlay.className = 'overlay'; - - this.dom.container.appendChild(this.dom.overlay); - - this.hammer = Hammer(this.dom.overlay, {prevent_default: false}); - this.hammer.on('tap', this._onTapOverlay.bind(this)); + function Network (container, data, options) { + if (!(this instanceof Network)) { + throw new SyntaxError('Constructor must be called with the new operator'); + } - // block all touch events (except tap) - var me = this; - var events = [ - 'touch', 'pinch', - 'doubletap', 'hold', - 'dragstart', 'drag', 'dragend', - 'mousewheel', 'DOMMouseScroll' // DOMMouseScroll is needed for Firefox - ]; - events.forEach(function (event) { - me.hammer.on(event, function (event) { - event.stopPropagation(); - }); - }); + this._initializeMixinLoaders(); - // attach a tap event to the window, in order to deactivate when clicking outside the timeline - this.windowHammer = Hammer(window, {prevent_default: false}); - this.windowHammer.on('tap', function (event) { - // deactivate when clicked outside the container - if (!_hasParent(event.target, container)) { - me.deactivate(); - } - }); + // create variables and set default values + this.containerElement = container; - if (this.keycharm !== undefined) { - this.keycharm.destroy(); - } - this.keycharm = keycharm(); + // render and calculation settings + this.renderRefreshRate = 60; // hz (fps) + this.renderTimestep = 1000 / this.renderRefreshRate; // ms -- saves calculation later on + this.renderTime = 0.5 * this.renderTimestep; // measured time it takes to render a frame + this.maxPhysicsTicksPerRender = 3; // max amount of physics ticks per render step. + this.physicsDiscreteStepsize = 0.50; // discrete stepsize of the simulation - // keycharm listener only bounded when active) - this.escListener = this.deactivate.bind(this); - } + this.initializing = true; - // turn into an event emitter - Emitter(Activator.prototype); + this.triggerFunctions = {add:null,edit:null,editEdge:null,connect:null,del:null}; - // The currently active activator - Activator.current = null; + // set constant values + this.defaultOptions = { + nodes: { + mass: 1, + radiusMin: 10, + radiusMax: 30, + radius: 10, + shape: 'ellipse', + image: undefined, + widthMin: 16, // px + widthMax: 64, // px + fontColor: 'black', + fontSize: 14, // px + fontFace: 'verdana', + fontFill: undefined, + level: -1, + color: { + border: '#2B7CE9', + background: '#97C2FC', + highlight: { + border: '#2B7CE9', + background: '#D2E5FF' + }, + hover: { + border: '#2B7CE9', + background: '#D2E5FF' + } + }, + borderColor: '#2B7CE9', + backgroundColor: '#97C2FC', + highlightColor: '#D2E5FF', + group: undefined, + borderWidth: 1, + borderWidthSelected: undefined + }, + edges: { + widthMin: 1, // + widthMax: 15,// + width: 1, + widthSelectionMultiplier: 2, + hoverWidth: 1.5, + style: 'line', + color: { + color:'#848484', + highlight:'#848484', + hover: '#848484' + }, + fontColor: '#343434', + fontSize: 14, // px + fontFace: 'arial', + fontFill: 'white', + arrowScaleFactor: 1, + dash: { + length: 10, + gap: 5, + altLength: undefined + }, + inheritColor: "from" // to, from, false, true (== from) + }, + configurePhysics:false, + physics: { + barnesHut: { + enabled: true, + theta: 1 / 0.6, // inverted to save time during calculation + gravitationalConstant: -2000, + centralGravity: 0.3, + springLength: 95, + springConstant: 0.04, + damping: 0.09 + }, + repulsion: { + centralGravity: 0.0, + springLength: 200, + springConstant: 0.05, + nodeDistance: 100, + damping: 0.09 + }, + hierarchicalRepulsion: { + enabled: false, + centralGravity: 0.0, + springLength: 100, + springConstant: 0.01, + nodeDistance: 150, + damping: 0.09 + }, + damping: null, + centralGravity: null, + springLength: null, + springConstant: null + }, + clustering: { // Per Node in Cluster = PNiC + enabled: false, // (Boolean) | global on/off switch for clustering. + initialMaxNodes: 100, // (# nodes) | if the initial amount of nodes is larger than this, we cluster until the total number is less than this threshold. + clusterThreshold:500, // (# nodes) | during calculate forces, we check if the total number of nodes is larger than this. If it is, cluster until reduced to reduceToNodes + reduceToNodes:300, // (# nodes) | during calculate forces, we check if the total number of nodes is larger than clusterThreshold. If it is, cluster until reduced to this + chainThreshold: 0.4, // (% of all drawn nodes)| maximum percentage of allowed chainnodes (long strings of connected nodes) within all nodes. (lower means less chains). + clusterEdgeThreshold: 20, // (px) | edge length threshold. if smaller, this node is clustered. + sectorThreshold: 100, // (# nodes in cluster) | cluster size threshold. If larger, expanding in own sector. + screenSizeThreshold: 0.2, // (% of canvas) | relative size threshold. If the width or height of a clusternode takes up this much of the screen, decluster node. + fontSizeMultiplier: 4.0, // (px PNiC) | how much the cluster font size grows per node in cluster (in px). + maxFontSize: 1000, + forceAmplification: 0.1, // (multiplier PNiC) | factor of increase fo the repulsion force of a cluster (per node in cluster). + distanceAmplification: 0.1, // (multiplier PNiC) | factor how much the repulsion distance of a cluster increases (per node in cluster). + edgeGrowth: 20, // (px PNiC) | amount of clusterSize connected to the edge is multiplied with this and added to edgeLength. + nodeScaling: {width: 1, // (px PNiC) | growth of the width per node in cluster. + height: 1, // (px PNiC) | growth of the height per node in cluster. + radius: 1}, // (px PNiC) | growth of the radius per node in cluster. + maxNodeSizeIncrements: 600, // (# increments) | max growth of the width per node in cluster. + activeAreaBoxSize: 80, // (px) | box area around the curser where clusters are popped open. + clusterLevelDifference: 2 + }, + navigation: { + enabled: false + }, + keyboard: { + enabled: false, + speed: {x: 10, y: 10, zoom: 0.02} + }, + dataManipulation: { + enabled: false, + initiallyVisible: false + }, + hierarchicalLayout: { + enabled:false, + levelSeparation: 150, + nodeSpacing: 100, + direction: "UD", // UD, DU, LR, RL + layout: "hubsize" // hubsize, directed + }, + freezeForStabilization: false, + smoothCurves: { + enabled: true, + dynamic: true, + type: "continuous", + roundness: 0.5 + }, + maxVelocity: 30, + minVelocity: 0.1, // px/s + stabilize: true, // stabilize before displaying the network + stabilizationIterations: 1000, // maximum number of iteration to stabilize + locale: 'en', + locales: locales, + tooltip: { + delay: 300, + fontColor: 'black', + fontSize: 14, // px + fontFace: 'verdana', + color: { + border: '#666', + background: '#FFFFC6' + } + }, + dragNetwork: true, + dragNodes: true, + zoomable: true, + hover: false, + hideEdgesOnDrag: false, + hideNodesOnDrag: false, + width : '100%', + height : '100%', + selectable: true + }; + this.constants = util.extend({}, this.defaultOptions); + this.pixelRatio = 1; + + + this.hoverObj = {nodes:{},edges:{}}; + this.controlNodesActive = false; + this.navigationHammers = {existing:[], _new: []}; - /** - * Destroy the activator. Cleans up all created DOM and event listeners - */ - Activator.prototype.destroy = function () { - this.deactivate(); + // animation properties + this.animationSpeed = 1/this.renderRefreshRate; + this.animationEasingFunction = "easeInOutQuint"; + this.easingTime = 0; + this.sourceScale = 0; + this.targetScale = 0; + this.sourceTranslation = 0; + this.targetTranslation = 0; + this.lockedOnNodeId = null; + this.lockedOnNodeOffset = null; + this.touchTime = 0; - // remove dom - this.dom.overlay.parentNode.removeChild(this.dom.overlay); + // Node variables + var network = this; + this.groups = new Groups(); // object with groups + this.images = new Images(); // object with images + this.images.setOnloadCallback(function () { + network._redraw(); + }); - // cleanup hammer instances - this.hammer = null; - this.windowHammer = null; - // FIXME: cleaning up hammer instances doesn't work (Timeline not removed from memory) - }; + // keyboard navigation variables + this.xIncrement = 0; + this.yIncrement = 0; + this.zoomIncrement = 0; - /** - * Activate the element - * Overlay is hidden, element is decorated with a blue shadow border - */ - Activator.prototype.activate = function () { - // we allow only one active activator at a time - if (Activator.current) { - Activator.current.deactivate(); - } - Activator.current = this; + // loading all the mixins: + // load the force calculation functions, grouped under the physics system. + this._loadPhysicsSystem(); + // create a frame and canvas + this._create(); + // load the sector system. (mandatory, fully integrated with Network) + this._loadSectorSystem(); + // load the cluster system. (mandatory, even when not using the cluster system, there are function calls to it) + this._loadClusterSystem(); + // load the selection system. (mandatory, required by Network) + this._loadSelectionSystem(); + // load the selection system. (mandatory, required by Network) + this._loadHierarchySystem(); - this.active = true; - this.dom.overlay.style.display = 'none'; - util.addClassName(this.dom.container, 'vis-active'); - this.emit('change'); - this.emit('activate'); + // apply options + this._setTranslation(this.frame.clientWidth / 2, this.frame.clientHeight / 2); + this._setScale(1); + this.setOptions(options); - // ugly hack: bind ESC after emitting the events, as the Network rebinds all - // keyboard events on a 'change' event - this.keycharm.bind('esc', this.escListener); - }; + // other vars + this.freezeSimulation = false;// freeze the simulation + this.cachedFunctions = {}; + this.startedStabilization = false; + this.stabilized = false; + this.stabilizationIterations = null; + this.draggingNodes = false; - /** - * Deactivate the element - * Overlay is displayed on top of the element - */ - Activator.prototype.deactivate = function () { - this.active = false; - this.dom.overlay.style.display = ''; - util.removeClassName(this.dom.container, 'vis-active'); - this.keycharm.unbind('esc', this.escListener); + // containers for nodes and edges + this.calculationNodes = {}; + this.calculationNodeIndices = []; + this.nodeIndices = []; // array with all the indices of the nodes. Used to speed up forces calculation + this.nodes = {}; // object with Node objects + this.edges = {}; // object with Edge objects - this.emit('change'); - this.emit('deactivate'); - }; + // position and scale variables and objects + this.canvasTopLeft = {"x": 0,"y": 0}; // coordinates of the top left of the canvas. they will be set during _redraw. + this.canvasBottomRight = {"x": 0,"y": 0}; // coordinates of the bottom right of the canvas. they will be set during _redraw + this.pointerPosition = {"x": 0,"y": 0}; // coordinates of the bottom right of the canvas. they will be set during _redraw + this.areaCenter = {}; // object with x and y elements used for determining the center of the zoom action + this.scale = 1; // defining the global scale variable in the constructor + this.previousScale = this.scale; // this is used to check if the zoom operation is zooming in or out - /** - * Handle a tap event: activate the container - * @param event - * @private - */ - Activator.prototype._onTapOverlay = function (event) { - // activate the container - this.activate(); - event.stopPropagation(); - }; + // datasets or dataviews + this.nodesData = null; // A DataSet or DataView + this.edgesData = null; // A DataSet or DataView - /** - * Test whether the element has the requested parent element somewhere in - * its chain of parent nodes. - * @param {HTMLElement} element - * @param {HTMLElement} parent - * @returns {boolean} Returns true when the parent is found somewhere in the - * chain of parent nodes. - * @private - */ - function _hasParent(element, parent) { - while (element) { - if (element === parent) { - return true + // create event listeners used to subscribe on the DataSets of the nodes and edges + this.nodesListeners = { + 'add': function (event, params) { + network._addNodes(params.items); + network.start(); + }, + 'update': function (event, params) { + network._updateNodes(params.items, params.data); + network.start(); + }, + 'remove': function (event, params) { + network._removeNodes(params.items); + network.start(); + } + }; + this.edgesListeners = { + 'add': function (event, params) { + network._addEdges(params.items); + network.start(); + }, + 'update': function (event, params) { + network._updateEdges(params.items); + network.start(); + }, + 'remove': function (event, params) { + network._removeEdges(params.items); + network.start(); } - element = element.parentNode; - } - return false; - } + }; - module.exports = Activator; + // properties for the animation + this.moving = true; + this.timer = undefined; // Scheduling function. Is definded in this.start(); + // load data (the disable start variable will be the same as the enabled clustering) + this.setData(data,this.constants.clustering.enabled || this.constants.hierarchicalLayout.enabled); -/***/ }, -/* 56 */ -/***/ function(module, exports, __webpack_require__) { + // hierarchical layout + this.initializing = false; + if (this.constants.hierarchicalLayout.enabled == true) { + this._setupHierarchicalLayout(); + } + else { + // zoom so all data will fit on the screen, if clustering is enabled, we do not want start to be called here. + if (this.constants.stabilize == false) { + this.zoomExtent(undefined, true,this.constants.clustering.enabled); + } + } - - /** - * Expose `Emitter`. - */ + // if clustering is disabled, the simulation will have started in the setData function + if (this.constants.clustering.enabled) { + this.startWithClustering(); + } + } - module.exports = Emitter; + // Extend Network with an Emitter mixin + Emitter(Network.prototype); /** - * Initialize a new `Emitter`. + * Get the script path where the vis.js library is located * - * @api public + * @returns {string | null} path Path or null when not found. Path does not + * end with a slash. + * @private */ + Network.prototype._getScriptPath = function() { + var scripts = document.getElementsByTagName( 'script' ); - function Emitter(obj) { - if (obj) return mixin(obj); + // find script named vis.js or vis.min.js + for (var i = 0; i < scripts.length; i++) { + var src = scripts[i].src; + var match = src && /\/?vis(.min)?\.js$/.exec(src); + if (match) { + // return path without the script name + return src.substring(0, src.length - match[0].length); + } + } + + return null; }; + /** - * Mixin the emitter properties. - * - * @param {Object} obj - * @return {Object} - * @api private + * Find the center position of the network + * @private */ - - function mixin(obj) { - for (var key in Emitter.prototype) { - obj[key] = Emitter.prototype[key]; + Network.prototype._getRange = function() { + var minY = 1e9, maxY = -1e9, minX = 1e9, maxX = -1e9, node; + for (var nodeId in this.nodes) { + if (this.nodes.hasOwnProperty(nodeId)) { + node = this.nodes[nodeId]; + if (minX > (node.x)) {minX = node.x;} + if (maxX < (node.x)) {maxX = node.x;} + if (minY > (node.y)) {minY = node.y;} + if (maxY < (node.y)) {maxY = node.y;} + } } - return obj; - } + if (minX == 1e9 && maxX == -1e9 && minY == 1e9 && maxY == -1e9) { + minY = 0, maxY = 0, minX = 0, maxX = 0; + } + return {minX: minX, maxX: maxX, minY: minY, maxY: maxY}; + }; + /** - * Listen on the given `event` with `fn`. - * - * @param {String} event - * @param {Function} fn - * @return {Emitter} - * @api public + * @param {object} range = {minX: minX, maxX: maxX, minY: minY, maxY: maxY}; + * @returns {{x: number, y: number}} + * @private */ - - Emitter.prototype.on = - Emitter.prototype.addEventListener = function(event, fn){ - this._callbacks = this._callbacks || {}; - (this._callbacks[event] = this._callbacks[event] || []) - .push(fn); - return this; + Network.prototype._findCenter = function(range) { + return {x: (0.5 * (range.maxX + range.minX)), + y: (0.5 * (range.maxY + range.minY))}; }; + /** - * Adds an `event` listener that will be invoked a single - * time then automatically removed. + * This function zooms out to fit all data on screen based on amount of nodes * - * @param {String} event - * @param {Function} fn - * @return {Emitter} - * @api public + * @param {Boolean} [initialZoom] | zoom based on fitted formula or range, true = fitted, default = false; + * @param {Boolean} [disableStart] | If true, start is not called. */ + Network.prototype.zoomExtent = function(animationOptions, initialZoom, disableStart) { + if (initialZoom === undefined) { + initialZoom = false; + } + if (disableStart === undefined) { + disableStart = false; + } + if (animationOptions === undefined) { + animationOptions = false; + } - Emitter.prototype.once = function(event, fn){ - var self = this; - this._callbacks = this._callbacks || {}; + var range = this._getRange(); + var zoomLevel; - function on() { - self.off(event, on); - fn.apply(this, arguments); - } + if (initialZoom == true) { + var numberOfNodes = this.nodeIndices.length; + if (this.constants.smoothCurves == true) { + if (this.constants.clustering.enabled == true && + numberOfNodes >= this.constants.clustering.initialMaxNodes) { + zoomLevel = 49.07548 / (numberOfNodes + 142.05338) + 9.1444e-04; // this is obtained from fitting a dataset from 5 points with scale levels that looked good. + } + else { + zoomLevel = 12.662 / (numberOfNodes + 7.4147) + 0.0964822; // this is obtained from fitting a dataset from 5 points with scale levels that looked good. + } + } + else { + if (this.constants.clustering.enabled == true && + numberOfNodes >= this.constants.clustering.initialMaxNodes) { + zoomLevel = 77.5271985 / (numberOfNodes + 187.266146) + 4.76710517e-05; // this is obtained from fitting a dataset from 5 points with scale levels that looked good. + } + else { + zoomLevel = 30.5062972 / (numberOfNodes + 19.93597763) + 0.08413486; // this is obtained from fitting a dataset from 5 points with scale levels that looked good. + } + } - on.fn = fn; - this.on(event, on); - return this; - }; + // correct for larger canvasses. + var factor = Math.min(this.frame.canvas.clientWidth / 600, this.frame.canvas.clientHeight / 600); + zoomLevel *= factor; + } + else { + var xDistance = Math.abs(range.maxX - range.minX) * 1.1; + var yDistance = Math.abs(range.maxY - range.minY) * 1.1; - /** - * Remove the given callback for `event` or all - * registered callbacks. - * - * @param {String} event - * @param {Function} fn - * @return {Emitter} - * @api public - */ + var xZoomLevel = this.frame.canvas.clientWidth / xDistance; + var yZoomLevel = this.frame.canvas.clientHeight / yDistance; - Emitter.prototype.off = - Emitter.prototype.removeListener = - Emitter.prototype.removeAllListeners = - Emitter.prototype.removeEventListener = function(event, fn){ - this._callbacks = this._callbacks || {}; + zoomLevel = (xZoomLevel <= yZoomLevel) ? xZoomLevel : yZoomLevel; + } - // all - if (0 == arguments.length) { - this._callbacks = {}; - return this; + if (zoomLevel > 1.0) { + zoomLevel = 1.0; } - // specific event - var callbacks = this._callbacks[event]; - if (!callbacks) return this; - // remove all handlers - if (1 == arguments.length) { - delete this._callbacks[event]; - return this; + var center = this._findCenter(range); + if (disableStart == false) { + var options = {position: center, scale: zoomLevel, animation: animationOptions}; + this.moveTo(options); + this.moving = true; + this.start(); } - - // remove specific handler - var cb; - for (var i = 0; i < callbacks.length; i++) { - cb = callbacks[i]; - if (cb === fn || cb.fn === fn) { - callbacks.splice(i, 1); - break; - } + else { + center.x *= zoomLevel; + center.y *= zoomLevel; + center.x -= 0.5 * this.frame.canvas.clientWidth; + center.y -= 0.5 * this.frame.canvas.clientHeight; + this._setScale(zoomLevel); + this._setTranslation(-center.x,-center.y); } - return this; }; + /** - * Emit `event` with the given args. - * - * @param {String} event - * @param {Mixed} ... - * @return {Emitter} + * Update the this.nodeIndices with the most recent node index list + * @private */ - - Emitter.prototype.emit = function(event){ - this._callbacks = this._callbacks || {}; - var args = [].slice.call(arguments, 1) - , callbacks = this._callbacks[event]; - - if (callbacks) { - callbacks = callbacks.slice(0); - for (var i = 0, len = callbacks.length; i < len; ++i) { - callbacks[i].apply(this, args); + Network.prototype._updateNodeIndexList = function() { + this._clearNodeIndexList(); + for (var idx in this.nodes) { + if (this.nodes.hasOwnProperty(idx)) { + this.nodeIndices.push(idx); } } - - return this; }; - /** - * Return array of callbacks for `event`. - * - * @param {String} event - * @return {Array} - * @api public - */ - - Emitter.prototype.listeners = function(event){ - this._callbacks = this._callbacks || {}; - return this._callbacks[event] || []; - }; /** - * Check if this emitter has `event` handlers. + * Set nodes and edges, and optionally options as well. * - * @param {String} event - * @return {Boolean} - * @api public + * @param {Object} data Object containing parameters: + * {Array | DataSet | DataView} [nodes] Array with nodes + * {Array | DataSet | DataView} [edges] Array with edges + * {String} [dot] String containing data in DOT format + * {String} [gephi] String containing data in gephi JSON format + * {Options} [options] Object with options + * @param {Boolean} [disableStart] | optional: disable the calling of the start function. */ + Network.prototype.setData = function(data, disableStart) { + if (disableStart === undefined) { + disableStart = false; + } + // we set initializing to true to ensure that the hierarchical layout is not performed until both nodes and edges are added. + this.initializing = true; - Emitter.prototype.hasListeners = function(event){ - return !! this.listeners(event).length; - }; - + if (data && data.dot && (data.nodes || data.edges)) { + throw new SyntaxError('Data must contain either parameter "dot" or ' + + ' parameter pair "nodes" and "edges", but not both.'); + } -/***/ }, -/* 57 */ -/***/ function(module, exports, __webpack_require__) { + // set options + this.setOptions(data && data.options); + // set all data + if (data && data.dot) { + // parse DOT file + if(data && data.dot) { + var dotData = dotparser.DOTToGraph(data.dot); + this.setData(dotData); + return; + } + } + else if (data && data.gephi) { + // parse DOT file + if(data && data.gephi) { + var gephiData = gephiParser.parseGephi(data.gephi); + this.setData(gephiData); + return; + } + } + else { + this._setNodes(data && data.nodes); + this._setEdges(data && data.edges); + } + this._putDataInSector(); + if (disableStart == false) { + if (this.constants.hierarchicalLayout.enabled == true) { + this._resetLevels(); + this._setupHierarchicalLayout(); + } + else { + // find a stable position or start animating to a stable position + if (this.constants.stabilize) { + this._stabilize(); + } + } + this.start(); + } + this.initializing = false; + }; - var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict"; /** - * Created by Alex on 11/6/2014. + * Set options + * @param {Object} options */ + Network.prototype.setOptions = function (options) { + if (options) { + var prop; - // https://github.com/umdjs/umd/blob/master/returnExports.js#L40-L60 - // if the module has no dependencies, the above pattern can be simplified to - (function (root, factory) { - if (true) { - // AMD. Register as an anonymous module. - !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - } else if (typeof exports === 'object') { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory(); - } else { - // Browser globals (root is window) - root.keycharm = factory(); - } - }(this, function () { - - function keycharm(options) { - var preventDefault = options && options.preventDefault || false; + var fields = ['nodes','edges','smoothCurves','hierarchicalLayout','clustering','navigation', + 'keyboard','dataManipulation','onAdd','onEdit','onEditEdge','onConnect','onDelete','clickToUse' + ]; + // extend all but the values in fields + util.selectiveNotDeepExtend(fields,this.constants, options); + util.selectiveNotDeepExtend(['color'],this.constants.nodes, options.nodes); + util.selectiveNotDeepExtend(['color','length'],this.constants.edges, options.edges); - var _exportFunctions = {}; - var _bound = {keydown:{}, keyup:{}}; - var _keys = {}; - var i; + if (options.physics) { + util.mergeOptions(this.constants.physics, options.physics,'barnesHut'); + util.mergeOptions(this.constants.physics, options.physics,'repulsion'); - // a - z - for (i = 97; i <= 122; i++) {_keys[String.fromCharCode(i)] = {code:65 + (i - 97), shift: false};} - // A - Z - for (i = 65; i <= 90; i++) {_keys[String.fromCharCode(i)] = {code:i, shift: true};} - // 0 - 9 - for (i = 0; i <= 9; i++) {_keys['' + i] = {code:48 + i, shift: false};} - // F1 - F12 - for (i = 1; i <= 12; i++) {_keys['F' + i] = {code:111 + i, shift: false};} - // num0 - num9 - for (i = 0; i <= 9; i++) {_keys['num' + i] = {code:96 + i, shift: false};} + if (options.physics.hierarchicalRepulsion) { + this.constants.hierarchicalLayout.enabled = true; + this.constants.physics.hierarchicalRepulsion.enabled = true; + this.constants.physics.barnesHut.enabled = false; + for (prop in options.physics.hierarchicalRepulsion) { + if (options.physics.hierarchicalRepulsion.hasOwnProperty(prop)) { + this.constants.physics.hierarchicalRepulsion[prop] = options.physics.hierarchicalRepulsion[prop]; + } + } + } + } - // numpad misc - _keys['num*'] = {code:106, shift: false}; - _keys['num+'] = {code:107, shift: false}; - _keys['num-'] = {code:109, shift: false}; - _keys['num/'] = {code:111, shift: false}; - _keys['num.'] = {code:110, shift: false}; - // arrows - _keys['left'] = {code:37, shift: false}; - _keys['up'] = {code:38, shift: false}; - _keys['right'] = {code:39, shift: false}; - _keys['down'] = {code:40, shift: false}; - // extra keys - _keys['space'] = {code:32, shift: false}; - _keys['enter'] = {code:13, shift: false}; - _keys['shift'] = {code:16, shift: undefined}; - _keys['esc'] = {code:27, shift: false}; - _keys['backspace'] = {code:8, shift: false}; - _keys['tab'] = {code:9, shift: false}; - _keys['ctrl'] = {code:17, shift: false}; - _keys['alt'] = {code:18, shift: false}; - _keys['delete'] = {code:46, shift: false}; - _keys['pageup'] = {code:33, shift: false}; - _keys['pagedown'] = {code:34, shift: false}; - // symbols - _keys['='] = {code:187, shift: false}; - _keys['-'] = {code:189, shift: false}; - _keys[']'] = {code:221, shift: false}; - _keys['['] = {code:219, shift: false}; + if (options.onAdd) {this.triggerFunctions.add = options.onAdd;} + if (options.onEdit) {this.triggerFunctions.edit = options.onEdit;} + if (options.onEditEdge) {this.triggerFunctions.editEdge = options.onEditEdge;} + if (options.onConnect) {this.triggerFunctions.connect = options.onConnect;} + if (options.onDelete) {this.triggerFunctions.del = options.onDelete;} + util.mergeOptions(this.constants, options,'smoothCurves'); + util.mergeOptions(this.constants, options,'hierarchicalLayout'); + util.mergeOptions(this.constants, options,'clustering'); + util.mergeOptions(this.constants, options,'navigation'); + util.mergeOptions(this.constants, options,'keyboard'); + util.mergeOptions(this.constants, options,'dataManipulation'); - var down = function(event) {handleEvent(event,'keydown');}; - var up = function(event) {handleEvent(event,'keyup');}; + if (options.dataManipulation) { + this.editMode = this.constants.dataManipulation.initiallyVisible; + } - // handle the actualy bound key with the event - var handleEvent = function(event,type) { - if (_bound[type][event.keyCode] !== undefined) { - var bound = _bound[type][event.keyCode]; - for (var i = 0; i < bound.length; i++) { - if (bound[i].shift === undefined) { - bound[i].fn(event); - } - else if (bound[i].shift == true && event.shiftKey == true) { - bound[i].fn(event); - } - else if (bound[i].shift == false && event.shiftKey == false) { - bound[i].fn(event); - } - } - if (preventDefault == true) { - event.preventDefault(); + // TODO: work out these options and document them + if (options.edges) { + if (options.edges.color !== undefined) { + if (util.isString(options.edges.color)) { + this.constants.edges.color = {}; + this.constants.edges.color.color = options.edges.color; + this.constants.edges.color.highlight = options.edges.color; + this.constants.edges.color.hover = options.edges.color; } - } - }; - - // bind a key to a callback - _exportFunctions.bind = function(key, callback, type) { - if (type === undefined) { - type = 'keydown'; - } - if (_keys[key] === undefined) { - throw new Error("unsupported key: " + key); - } - if (_bound[type][_keys[key].code] === undefined) { - _bound[type][_keys[key].code] = []; - } - _bound[type][_keys[key].code].push({fn:callback, shift:_keys[key].shift}); - }; - - - // bind all keys to a call back (demo purposes) - _exportFunctions.bindAll = function(callback, type) { - if (type === undefined) { - type = 'keydown'; - } - for (var key in _keys) { - if (_keys.hasOwnProperty(key)) { - _exportFunctions.bind(key,callback,type); + else { + if (options.edges.color.color !== undefined) {this.constants.edges.color.color = options.edges.color.color;} + if (options.edges.color.highlight !== undefined) {this.constants.edges.color.highlight = options.edges.color.highlight;} + if (options.edges.color.hover !== undefined) {this.constants.edges.color.hover = options.edges.color.hover;} } } - }; - // get the key label from an event - _exportFunctions.getKey = function(event) { - for (var key in _keys) { - if (_keys.hasOwnProperty(key)) { - if (event.shiftKey == true && _keys[key].shift == true && event.keyCode == _keys[key].code) { - return key; - } - else if (event.shiftKey == false && _keys[key].shift == false && event.keyCode == _keys[key].code) { - return key; - } - else if (event.keyCode == _keys[key].code && key == 'shift') { - return key; - } + if (!options.edges.fontColor) { + if (options.edges.color !== undefined) { + if (util.isString(options.edges.color)) {this.constants.edges.fontColor = options.edges.color;} + else if (options.edges.color.color !== undefined) {this.constants.edges.fontColor = options.edges.color.color;} } } - return "unknown key, currently not supported"; - }; + } - // unbind either a specific callback from a key or all of them (by leaving callback undefined) - _exportFunctions.unbind = function(key, callback, type) { - if (type === undefined) { - type = 'keydown'; + if (options.nodes) { + if (options.nodes.color) { + var newColorObj = util.parseColor(options.nodes.color); + this.constants.nodes.color.background = newColorObj.background; + this.constants.nodes.color.border = newColorObj.border; + this.constants.nodes.color.highlight.background = newColorObj.highlight.background; + this.constants.nodes.color.highlight.border = newColorObj.highlight.border; + this.constants.nodes.color.hover.background = newColorObj.hover.background; + this.constants.nodes.color.hover.border = newColorObj.hover.border; } - if (_keys[key] === undefined) { - throw new Error("unsupported key: " + key); + } + if (options.groups) { + for (var groupname in options.groups) { + if (options.groups.hasOwnProperty(groupname)) { + var group = options.groups[groupname]; + this.groups.add(groupname, group); + } } - if (callback !== undefined) { - var newBindings = []; - var bound = _bound[type][_keys[key].code]; - if (bound !== undefined) { - for (var i = 0; i < bound.length; i++) { - if (!(bound[i].fn == callback && bound[i].shift == _keys[key].shift)) { - newBindings.push(_bound[type][_keys[key].code][i]); - } - } + } + + if (options.tooltip) { + for (prop in options.tooltip) { + if (options.tooltip.hasOwnProperty(prop)) { + this.constants.tooltip[prop] = options.tooltip[prop]; } - _bound[type][_keys[key].code] = newBindings; } - else { - _bound[type][_keys[key].code] = []; + if (options.tooltip.color) { + this.constants.tooltip.color = util.parseColor(options.tooltip.color); } - }; + } - // reset all bound variables. - _exportFunctions.reset = function() { - _bound = {keydown:{}, keyup:{}}; - }; + if ('clickToUse' in options) { + if (options.clickToUse) { + this.activator = new Activator(this.frame); + this.activator.on('change', this._createKeyBinds.bind(this)); + } + else { + if (this.activator) { + this.activator.destroy(); + delete this.activator; + } + } + } - // unbind all listeners and reset all variables. - _exportFunctions.destroy = function() { - _bound = {keydown:{}, keyup:{}}; - window.removeEventListener('keydown', down, true); - window.removeEventListener('keyup', up, true); - }; + if (options.labels) { + throw new Error('Option "labels" is deprecated. Use options "locale" and "locales" instead.'); + } + } - // create listeners. - window.addEventListener('keydown',down,true); - window.addEventListener('keyup',up,true); + // (Re)loading the mixins that can be enabled or disabled in the options. + // load the force calculation functions, grouped under the physics system. + this._loadPhysicsSystem(); + // load the navigation system. + this._loadNavigationControls(); + // load the data manipulation system + this._loadManipulationSystem(); + // configure the smooth curves + this._configureSmoothCurves(); - // return the public functions. - return _exportFunctions; - } - return keycharm; - })); + // bind keys. If disabled, this will not do anything; + this._createKeyBinds(); + this.setSize(this.constants.width, this.constants.height); + this.moving = true; + this.start(); + }; + /** + * Create the main frame for the Network. + * This function is executed once when a Network object is created. The frame + * contains a canvas, and this canvas contains all objects like the axis and + * nodes. + * @private + */ + Network.prototype._create = function () { + // remove all elements from the container element. + while (this.containerElement.hasChildNodes()) { + this.containerElement.removeChild(this.containerElement.firstChild); + } -/***/ }, -/* 58 */ -/***/ function(module, exports, __webpack_require__) { + this.frame = document.createElement('div'); + this.frame.className = 'vis network-frame'; + this.frame.style.position = 'relative'; + this.frame.style.overflow = 'hidden'; - var __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(global, module) {//! moment.js - //! version : 2.8.4 - //! authors : Tim Wood, Iskren Chernev, Moment.js contributors - //! license : MIT - //! momentjs.com - (function (undefined) { - /************************************ - Constants - ************************************/ + ////////////////////////////////////////////////////////////////// - var moment, - VERSION = '2.8.4', - // the global-scope this is NOT the global object in Node.js - globalScope = typeof global !== 'undefined' ? global : this, - oldGlobalMoment, - round = Math.round, - hasOwnProperty = Object.prototype.hasOwnProperty, - i, + this.frame.canvas = document.createElement("canvas"); - YEAR = 0, - MONTH = 1, - DATE = 2, - HOUR = 3, - MINUTE = 4, - SECOND = 5, - MILLISECOND = 6, + this.frame.canvas.style.position = 'relative'; + this.frame.appendChild(this.frame.canvas); - // internal storage for locale config files - locales = {}, - // extra moment internal properties (plugins register props here) - momentProperties = [], + if (!this.frame.canvas.getContext) { + var noCanvas = document.createElement( 'DIV' ); + noCanvas.style.color = 'red'; + noCanvas.style.fontWeight = 'bold' ; + noCanvas.style.padding = '10px'; + noCanvas.innerHTML = 'Error: your browser does not support HTML canvas'; + this.frame.canvas.appendChild(noCanvas); + } + else { - // check for nodeJS - hasModule = (typeof module !== 'undefined' && module && module.exports), + var ctx = this.frame.canvas.getContext("2d"); - // ASP.NET json date format regex - aspNetJsonRegex = /^\/?Date\((\-?\d+)/i, - aspNetTimeSpanJsonRegex = /(\-)?(?:(\d*)\.)?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/, + this.pixelRatio = (window.devicePixelRatio || 1) / (ctx.webkitBackingStorePixelRatio || + ctx.mozBackingStorePixelRatio || + ctx.msBackingStorePixelRatio || + ctx.oBackingStorePixelRatio || + ctx.backingStorePixelRatio || 1); - // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html - // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere - isoDurationRegex = /^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/, - // format tokens - formattingTokens = /(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Q|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,4}|x|X|zz?|ZZ?|.)/g, - localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g, - // parsing token regexes - parseTokenOneOrTwoDigits = /\d\d?/, // 0 - 99 - parseTokenOneToThreeDigits = /\d{1,3}/, // 0 - 999 - parseTokenOneToFourDigits = /\d{1,4}/, // 0 - 9999 - parseTokenOneToSixDigits = /[+\-]?\d{1,6}/, // -999,999 - 999,999 - parseTokenDigits = /\d+/, // nonzero number of digits - parseTokenWord = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i, // any word (or two) characters or numbers including two/three word month in arabic. - parseTokenTimezone = /Z|[\+\-]\d\d:?\d\d/gi, // +00:00 -00:00 +0000 -0000 or Z - parseTokenT = /T/i, // T (ISO separator) - parseTokenOffsetMs = /[\+\-]?\d+/, // 1234567890123 - parseTokenTimestampMs = /[\+\-]?\d+(\.\d{1,3})?/, // 123456789 123456789.123 + this.frame.canvas.getContext("2d").setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0); + } - //strict parsing regexes - parseTokenOneDigit = /\d/, // 0 - 9 - parseTokenTwoDigits = /\d\d/, // 00 - 99 - parseTokenThreeDigits = /\d{3}/, // 000 - 999 - parseTokenFourDigits = /\d{4}/, // 0000 - 9999 - parseTokenSixDigits = /[+-]?\d{6}/, // -999,999 - 999,999 - parseTokenSignedNumber = /[+-]?\d+/, // -inf - inf + ////////////////////////////////////////////////////////////////// - // iso 8601 regex - // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00) - isoRegex = /^\s*(?:[+-]\d{6}|\d{4})-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/, - isoFormat = 'YYYY-MM-DDTHH:mm:ssZ', + var me = this; + this.drag = {}; + this.pinch = {}; + this.hammer = Hammer(this.frame.canvas, { + prevent_default: true + }); + this.hammer.on('tap', me._onTap.bind(me) ); + this.hammer.on('doubletap', me._onDoubleTap.bind(me) ); + this.hammer.on('hold', me._onHold.bind(me) ); + this.hammer.on('pinch', me._onPinch.bind(me) ); + this.hammer.on('touch', me._onTouch.bind(me) ); + this.hammer.on('dragstart', me._onDragStart.bind(me) ); + this.hammer.on('drag', me._onDrag.bind(me) ); + this.hammer.on('dragend', me._onDragEnd.bind(me) ); + this.hammer.on('mousewheel',me._onMouseWheel.bind(me) ); + this.hammer.on('DOMMouseScroll',me._onMouseWheel.bind(me) ); // for FF + this.hammer.on('mousemove', me._onMouseMoveTitle.bind(me) ); - isoDates = [ - ['YYYYYY-MM-DD', /[+-]\d{6}-\d{2}-\d{2}/], - ['YYYY-MM-DD', /\d{4}-\d{2}-\d{2}/], - ['GGGG-[W]WW-E', /\d{4}-W\d{2}-\d/], - ['GGGG-[W]WW', /\d{4}-W\d{2}/], - ['YYYY-DDD', /\d{4}-\d{3}/] - ], + this.hammerFrame = Hammer(this.frame, { + prevent_default: true + }); + this.hammerFrame.on('release', me._onRelease.bind(me) ); - // iso time formats and regexes - isoTimes = [ - ['HH:mm:ss.SSSS', /(T| )\d\d:\d\d:\d\d\.\d+/], - ['HH:mm:ss', /(T| )\d\d:\d\d:\d\d/], - ['HH:mm', /(T| )\d\d:\d\d/], - ['HH', /(T| )\d\d/] - ], + // add the frame to the container element + this.containerElement.appendChild(this.frame); - // timezone chunker '+10:00' > ['10', '00'] or '-1530' > ['-15', '30'] - parseTimezoneChunker = /([\+\-]|\d\d)/gi, + }; - // getter and setter names - proxyGettersAndSetters = 'Date|Hours|Minutes|Seconds|Milliseconds'.split('|'), - unitMillisecondFactors = { - 'Milliseconds' : 1, - 'Seconds' : 1e3, - 'Minutes' : 6e4, - 'Hours' : 36e5, - 'Days' : 864e5, - 'Months' : 2592e6, - 'Years' : 31536e6 - }, - unitAliases = { - ms : 'millisecond', - s : 'second', - m : 'minute', - h : 'hour', - d : 'day', - D : 'date', - w : 'week', - W : 'isoWeek', - M : 'month', - Q : 'quarter', - y : 'year', - DDD : 'dayOfYear', - e : 'weekday', - E : 'isoWeekday', - gg: 'weekYear', - GG: 'isoWeekYear' - }, + /** + * Binding the keys for keyboard navigation. These functions are defined in the NavigationMixin + * @private + */ + Network.prototype._createKeyBinds = function() { + var me = this; + if (this.keycharm !== undefined) { + this.keycharm.destroy(); + } + this.keycharm = keycharm(); - camelFunctions = { - dayofyear : 'dayOfYear', - isoweekday : 'isoWeekday', - isoweek : 'isoWeek', - weekyear : 'weekYear', - isoweekyear : 'isoWeekYear' - }, + this.keycharm.reset(); - // format function strings - formatFunctions = {}, + if (this.constants.keyboard.enabled && this.isActive()) { + this.keycharm.bind("up", this._moveUp.bind(me) , "keydown"); + this.keycharm.bind("up", this._yStopMoving.bind(me), "keyup"); + this.keycharm.bind("down", this._moveDown.bind(me) , "keydown"); + this.keycharm.bind("down", this._yStopMoving.bind(me), "keyup"); + this.keycharm.bind("left", this._moveLeft.bind(me) , "keydown"); + this.keycharm.bind("left", this._xStopMoving.bind(me), "keyup"); + this.keycharm.bind("right",this._moveRight.bind(me), "keydown"); + this.keycharm.bind("right",this._xStopMoving.bind(me), "keyup"); + this.keycharm.bind("=", this._zoomIn.bind(me), "keydown"); + this.keycharm.bind("=", this._stopZoom.bind(me), "keyup"); + this.keycharm.bind("num+", this._zoomIn.bind(me), "keydown"); + this.keycharm.bind("num+", this._stopZoom.bind(me), "keyup"); + this.keycharm.bind("num-", this._zoomOut.bind(me), "keydown"); + this.keycharm.bind("num-", this._stopZoom.bind(me), "keyup"); + this.keycharm.bind("-", this._zoomOut.bind(me), "keydown"); + this.keycharm.bind("-", this._stopZoom.bind(me), "keyup"); + this.keycharm.bind("[", this._zoomIn.bind(me), "keydown"); + this.keycharm.bind("[", this._stopZoom.bind(me), "keyup"); + this.keycharm.bind("]", this._zoomOut.bind(me), "keydown"); + this.keycharm.bind("]", this._stopZoom.bind(me), "keyup"); + this.keycharm.bind("pageup",this._zoomIn.bind(me), "keydown"); + this.keycharm.bind("pageup",this._stopZoom.bind(me), "keyup"); + this.keycharm.bind("pagedown",this._zoomOut.bind(me),"keydown"); + this.keycharm.bind("pagedown",this._stopZoom.bind(me), "keyup"); + } - // default relative time thresholds - relativeTimeThresholds = { - s: 45, // seconds to minute - m: 45, // minutes to hour - h: 22, // hours to day - d: 26, // days to month - M: 11 // months to year - }, + if (this.constants.dataManipulation.enabled == true) { + this.keycharm.bind("esc",this._createManipulatorBar.bind(me)); + this.keycharm.bind("delete",this._deleteSelected.bind(me)); + } + }; - // tokens to ordinalize and pad - ordinalizeTokens = 'DDD w W M D d'.split(' '), - paddedTokens = 'M D H h m s w W'.split(' '), + /** + * Get the pointer location from a touch location + * @param {{pageX: Number, pageY: Number}} touch + * @return {{x: Number, y: Number}} pointer + * @private + */ + Network.prototype._getPointer = function (touch) { + return { + x: touch.pageX - util.getAbsoluteLeft(this.frame.canvas), + y: touch.pageY - util.getAbsoluteTop(this.frame.canvas) + }; + }; - formatTokenFunctions = { - M : function () { - return this.month() + 1; - }, - MMM : function (format) { - return this.localeData().monthsShort(this, format); - }, - MMMM : function (format) { - return this.localeData().months(this, format); - }, - D : function () { - return this.date(); - }, - DDD : function () { - return this.dayOfYear(); - }, - d : function () { - return this.day(); - }, - dd : function (format) { - return this.localeData().weekdaysMin(this, format); - }, - ddd : function (format) { - return this.localeData().weekdaysShort(this, format); - }, - dddd : function (format) { - return this.localeData().weekdays(this, format); - }, - w : function () { - return this.week(); - }, - W : function () { - return this.isoWeek(); - }, - YY : function () { - return leftZeroFill(this.year() % 100, 2); - }, - YYYY : function () { - return leftZeroFill(this.year(), 4); - }, - YYYYY : function () { - return leftZeroFill(this.year(), 5); - }, - YYYYYY : function () { - var y = this.year(), sign = y >= 0 ? '+' : '-'; - return sign + leftZeroFill(Math.abs(y), 6); - }, - gg : function () { - return leftZeroFill(this.weekYear() % 100, 2); - }, - gggg : function () { - return leftZeroFill(this.weekYear(), 4); - }, - ggggg : function () { - return leftZeroFill(this.weekYear(), 5); - }, - GG : function () { - return leftZeroFill(this.isoWeekYear() % 100, 2); - }, - GGGG : function () { - return leftZeroFill(this.isoWeekYear(), 4); - }, - GGGGG : function () { - return leftZeroFill(this.isoWeekYear(), 5); - }, - e : function () { - return this.weekday(); - }, - E : function () { - return this.isoWeekday(); - }, - a : function () { - return this.localeData().meridiem(this.hours(), this.minutes(), true); - }, - A : function () { - return this.localeData().meridiem(this.hours(), this.minutes(), false); - }, - H : function () { - return this.hours(); - }, - h : function () { - return this.hours() % 12 || 12; - }, - m : function () { - return this.minutes(); - }, - s : function () { - return this.seconds(); - }, - S : function () { - return toInt(this.milliseconds() / 100); - }, - SS : function () { - return leftZeroFill(toInt(this.milliseconds() / 10), 2); - }, - SSS : function () { - return leftZeroFill(this.milliseconds(), 3); - }, - SSSS : function () { - return leftZeroFill(this.milliseconds(), 3); - }, - Z : function () { - var a = -this.zone(), - b = '+'; - if (a < 0) { - a = -a; - b = '-'; - } - return b + leftZeroFill(toInt(a / 60), 2) + ':' + leftZeroFill(toInt(a) % 60, 2); - }, - ZZ : function () { - var a = -this.zone(), - b = '+'; - if (a < 0) { - a = -a; - b = '-'; - } - return b + leftZeroFill(toInt(a / 60), 2) + leftZeroFill(toInt(a) % 60, 2); - }, - z : function () { - return this.zoneAbbr(); - }, - zz : function () { - return this.zoneName(); - }, - x : function () { - return this.valueOf(); - }, - X : function () { - return this.unix(); - }, - Q : function () { - return this.quarter(); - } - }, + /** + * On start of a touch gesture, store the pointer + * @param event + * @private + */ + Network.prototype._onTouch = function (event) { + if (new Date().valueOf() - this.touchTime > 100) { + this.drag.pointer = this._getPointer(event.gesture.center); + this.drag.pinched = false; + this.pinch.scale = this._getScale(); - deprecations = {}, + // to avoid double fireing of this event because we have two hammer instances. (on canvas and on frame) + this.touchTime = new Date().valueOf(); - lists = ['months', 'monthsShort', 'weekdays', 'weekdaysShort', 'weekdaysMin']; + this._handleTouch(this.drag.pointer); + } + }; - // Pick the first defined of two or three arguments. dfl comes from - // default. - function dfl(a, b, c) { - switch (arguments.length) { - case 2: return a != null ? a : b; - case 3: return a != null ? a : b != null ? b : c; - default: throw new Error('Implement me'); - } - } + /** + * handle drag start event + * @private + */ + Network.prototype._onDragStart = function () { + this._handleDragStart(); + }; - function hasOwnProp(a, b) { - return hasOwnProperty.call(a, b); - } - function defaultParsingFlags() { - // We need to deep clone this object, and es5 standard is not very - // helpful. - return { - empty : false, - unusedTokens : [], - unusedInput : [], - overflow : -2, - charsLeftOver : 0, - nullInput : false, - invalidMonth : null, - invalidFormat : false, - userInvalidated : false, - iso: false - }; - } + /** + * This function is called by _onDragStart. + * It is separated out because we can then overload it for the datamanipulation system. + * + * @private + */ + Network.prototype._handleDragStart = function() { + var drag = this.drag; + var node = this._getNodeAt(drag.pointer); + // note: drag.pointer is set in _onTouch to get the initial touch location - function printMsg(msg) { - if (moment.suppressDeprecationWarnings === false && - typeof console !== 'undefined' && console.warn) { - console.warn('Deprecation warning: ' + msg); - } - } + drag.dragging = true; + drag.selection = []; + drag.translation = this._getTranslation(); + drag.nodeId = null; + this.draggingNodes = false; - function deprecate(msg, fn) { - var firstTime = true; - return extend(function () { - if (firstTime) { - printMsg(msg); - firstTime = false; - } - return fn.apply(this, arguments); - }, fn); + if (node != null && this.constants.dragNodes == true) { + this.draggingNodes = true; + drag.nodeId = node.id; + // select the clicked node if not yet selected + if (!node.isSelected()) { + this._selectObject(node,false); } - function deprecateSimple(name, msg) { - if (!deprecations[name]) { - printMsg(msg); - deprecations[name] = true; - } - } + this.emit("dragStart",{nodeIds:this.getSelection().nodes}); - function padToken(func, count) { - return function (a) { - return leftZeroFill(func.call(this, a), count); - }; - } - function ordinalizeToken(func, period) { - return function (a) { - return this.localeData().ordinal(func.call(this, a), period); + // create an array with the selected nodes and their original location and status + for (var objectId in this.selectionObj.nodes) { + if (this.selectionObj.nodes.hasOwnProperty(objectId)) { + var object = this.selectionObj.nodes[objectId]; + var s = { + id: object.id, + node: object, + + // store original x, y, xFixed and yFixed, make the node temporarily Fixed + x: object.x, + y: object.y, + xFixed: object.xFixed, + yFixed: object.yFixed }; - } - while (ordinalizeTokens.length) { - i = ordinalizeTokens.pop(); - formatTokenFunctions[i + 'o'] = ordinalizeToken(formatTokenFunctions[i], i); - } - while (paddedTokens.length) { - i = paddedTokens.pop(); - formatTokenFunctions[i + i] = padToken(formatTokenFunctions[i], 2); + object.xFixed = true; + object.yFixed = true; + + drag.selection.push(s); + } } - formatTokenFunctions.DDDD = padToken(formatTokenFunctions.DDD, 3); + } + }; - /************************************ - Constructors - ************************************/ + /** + * handle drag event + * @private + */ + Network.prototype._onDrag = function (event) { + this._handleOnDrag(event) + }; - function Locale() { - } - // Moment prototype object - function Moment(config, skipOverflow) { - if (skipOverflow !== false) { - checkOverflow(config); - } - copyConfig(this, config); - this._d = new Date(+config._d); - } + /** + * This function is called by _onDrag. + * It is separated out because we can then overload it for the datamanipulation system. + * + * @private + */ + Network.prototype._handleOnDrag = function(event) { + if (this.drag.pinched) { + return; + } - // Duration Constructor - function Duration(duration) { - var normalizedInput = normalizeObjectUnits(duration), - years = normalizedInput.year || 0, - quarters = normalizedInput.quarter || 0, - months = normalizedInput.month || 0, - weeks = normalizedInput.week || 0, - days = normalizedInput.day || 0, - hours = normalizedInput.hour || 0, - minutes = normalizedInput.minute || 0, - seconds = normalizedInput.second || 0, - milliseconds = normalizedInput.millisecond || 0; + // remove the focus on node if it is focussed on by the focusOnNode + this.releaseNode(); - // representation for dateAddRemove - this._milliseconds = +milliseconds + - seconds * 1e3 + // 1000 - minutes * 6e4 + // 1000 * 60 - hours * 36e5; // 1000 * 60 * 60 - // Because of dateAddRemove treats 24 hours as different from a - // day when working around DST, we need to store them separately - this._days = +days + - weeks * 7; - // It is impossible translate months into days without knowing - // which months you are are talking about, so we have to store - // it separately. - this._months = +months + - quarters * 3 + - years * 12; + var pointer = this._getPointer(event.gesture.center); + var me = this; + var drag = this.drag; + var selection = drag.selection; + if (selection && selection.length && this.constants.dragNodes == true) { + // calculate delta's and new location + var deltaX = pointer.x - drag.pointer.x; + var deltaY = pointer.y - drag.pointer.y; - this._data = {}; + // update position of all selected nodes + selection.forEach(function (s) { + var node = s.node; - this._locale = moment.localeData(); + if (!s.xFixed) { + node.x = me._XconvertDOMtoCanvas(me._XconvertCanvasToDOM(s.x) + deltaX); + } - this._bubble(); - } + if (!s.yFixed) { + node.y = me._YconvertDOMtoCanvas(me._YconvertCanvasToDOM(s.y) + deltaY); + } + }); - /************************************ - Helpers - ************************************/ + // start _animationStep if not yet running + if (!this.moving) { + this.moving = true; + this.start(); + } + } + else { + if (this.constants.dragNetwork == true) { + // move the network + var diffX = pointer.x - this.drag.pointer.x; + var diffY = pointer.y - this.drag.pointer.y; - function extend(a, b) { - for (var i in b) { - if (hasOwnProp(b, i)) { - a[i] = b[i]; - } - } + this._setTranslation( + this.drag.translation.x + diffX, + this.drag.translation.y + diffY + ); + this._redraw(); + // this.moving = true; + // this.start(); + } + } + }; - if (hasOwnProp(b, 'toString')) { - a.toString = b.toString; - } + /** + * handle drag start event + * @private + */ + Network.prototype._onDragEnd = function (event) { + this._handleDragEnd(event); + }; - if (hasOwnProp(b, 'valueOf')) { - a.valueOf = b.valueOf; - } - return a; - } + Network.prototype._handleDragEnd = function(event) { + this.drag.dragging = false; + var selection = this.drag.selection; + if (selection && selection.length) { + selection.forEach(function (s) { + // restore original xFixed and yFixed + s.node.xFixed = s.xFixed; + s.node.yFixed = s.yFixed; + }); + this.moving = true; + this.start(); + } + else { + this._redraw(); + } + if (this.draggingNodes == false) { + this.emit("dragEnd",{nodeIds:[]}); + } + else { + this.emit("dragEnd",{nodeIds:this.getSelection().nodes}); + } - function copyConfig(to, from) { - var i, prop, val; + } + /** + * handle tap/click event: select/unselect a node + * @private + */ + Network.prototype._onTap = function (event) { + var pointer = this._getPointer(event.gesture.center); + this.pointerPosition = pointer; + this._handleTap(pointer); - if (typeof from._isAMomentObject !== 'undefined') { - to._isAMomentObject = from._isAMomentObject; - } - if (typeof from._i !== 'undefined') { - to._i = from._i; - } - if (typeof from._f !== 'undefined') { - to._f = from._f; - } - if (typeof from._l !== 'undefined') { - to._l = from._l; - } - if (typeof from._strict !== 'undefined') { - to._strict = from._strict; - } - if (typeof from._tzm !== 'undefined') { - to._tzm = from._tzm; - } - if (typeof from._isUTC !== 'undefined') { - to._isUTC = from._isUTC; - } - if (typeof from._offset !== 'undefined') { - to._offset = from._offset; - } - if (typeof from._pf !== 'undefined') { - to._pf = from._pf; - } - if (typeof from._locale !== 'undefined') { - to._locale = from._locale; - } + }; - if (momentProperties.length > 0) { - for (i in momentProperties) { - prop = momentProperties[i]; - val = from[prop]; - if (typeof val !== 'undefined') { - to[prop] = val; - } - } - } - return to; - } + /** + * handle doubletap event + * @private + */ + Network.prototype._onDoubleTap = function (event) { + var pointer = this._getPointer(event.gesture.center); + this._handleDoubleTap(pointer); + }; - function absRound(number) { - if (number < 0) { - return Math.ceil(number); - } else { - return Math.floor(number); - } - } - // left zero fill a number - // see http://jsperf.com/left-zero-filling for performance comparison - function leftZeroFill(number, targetLength, forceSign) { - var output = '' + Math.abs(number), - sign = number >= 0; + /** + * handle long tap event: multi select nodes + * @private + */ + Network.prototype._onHold = function (event) { + var pointer = this._getPointer(event.gesture.center); + this.pointerPosition = pointer; + this._handleOnHold(pointer); + }; - while (output.length < targetLength) { - output = '0' + output; - } - return (sign ? (forceSign ? '+' : '') : '-') + output; - } + /** + * handle the release of the screen + * + * @private + */ + Network.prototype._onRelease = function (event) { + var pointer = this._getPointer(event.gesture.center); + this._handleOnRelease(pointer); + }; - function positiveMomentsDifference(base, other) { - var res = {milliseconds: 0, months: 0}; + /** + * Handle pinch event + * @param event + * @private + */ + Network.prototype._onPinch = function (event) { + var pointer = this._getPointer(event.gesture.center); - res.months = other.month() - base.month() + - (other.year() - base.year()) * 12; - if (base.clone().add(res.months, 'M').isAfter(other)) { - --res.months; - } + this.drag.pinched = true; + if (!('scale' in this.pinch)) { + this.pinch.scale = 1; + } - res.milliseconds = +other - +(base.clone().add(res.months, 'M')); + // TODO: enabled moving while pinching? + var scale = this.pinch.scale * event.gesture.scale; + this._zoom(scale, pointer) + }; - return res; + /** + * Zoom the network in or out + * @param {Number} scale a number around 1, and between 0.01 and 10 + * @param {{x: Number, y: Number}} pointer Position on screen + * @return {Number} appliedScale scale is limited within the boundaries + * @private + */ + Network.prototype._zoom = function(scale, pointer) { + if (this.constants.zoomable == true) { + var scaleOld = this._getScale(); + if (scale < 0.00001) { + scale = 0.00001; + } + if (scale > 10) { + scale = 10; } - function momentsDifference(base, other) { - var res; - other = makeAs(other, base); - if (base.isBefore(other)) { - res = positiveMomentsDifference(base, other); - } else { - res = positiveMomentsDifference(other, base); - res.milliseconds = -res.milliseconds; - res.months = -res.months; - } - - return res; + var preScaleDragPointer = null; + if (this.drag !== undefined) { + if (this.drag.dragging == true) { + preScaleDragPointer = this.DOMtoCanvas(this.drag.pointer); + } } + // + this.frame.canvas.clientHeight / 2 + var translation = this._getTranslation(); - // TODO: remove 'name' arg after deprecation is removed - function createAdder(direction, name) { - return function (val, period) { - var dur, tmp; - //invert the arguments, but complain about it - if (period !== null && !isNaN(+period)) { - deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period).'); - tmp = val; val = period; period = tmp; - } + var scaleFrac = scale / scaleOld; + var tx = (1 - scaleFrac) * pointer.x + translation.x * scaleFrac; + var ty = (1 - scaleFrac) * pointer.y + translation.y * scaleFrac; - val = typeof val === 'string' ? +val : val; - dur = moment.duration(val, period); - addOrSubtractDurationFromMoment(this, dur, direction); - return this; - }; - } + this.areaCenter = {"x" : this._XconvertDOMtoCanvas(pointer.x), + "y" : this._YconvertDOMtoCanvas(pointer.y)}; - function addOrSubtractDurationFromMoment(mom, duration, isAdding, updateOffset) { - var milliseconds = duration._milliseconds, - days = duration._days, - months = duration._months; - updateOffset = updateOffset == null ? true : updateOffset; + this._setScale(scale); + this._setTranslation(tx, ty); + this.updateClustersDefault(); - if (milliseconds) { - mom._d.setTime(+mom._d + milliseconds * isAdding); - } - if (days) { - rawSetter(mom, 'Date', rawGetter(mom, 'Date') + days * isAdding); - } - if (months) { - rawMonthSetter(mom, rawGetter(mom, 'Month') + months * isAdding); - } - if (updateOffset) { - moment.updateOffset(mom, days || months); - } + if (preScaleDragPointer != null) { + var postScaleDragPointer = this.canvasToDOM(preScaleDragPointer); + this.drag.pointer.x = postScaleDragPointer.x; + this.drag.pointer.y = postScaleDragPointer.y; } - // check if is an array - function isArray(input) { - return Object.prototype.toString.call(input) === '[object Array]'; - } + this._redraw(); - function isDate(input) { - return Object.prototype.toString.call(input) === '[object Date]' || - input instanceof Date; + if (scaleOld < scale) { + this.emit("zoom", {direction:"+"}); } - - // compare two arrays, return the number of differences - function compareArrays(array1, array2, dontConvert) { - var len = Math.min(array1.length, array2.length), - lengthDiff = Math.abs(array1.length - array2.length), - diffs = 0, - i; - for (i = 0; i < len; i++) { - if ((dontConvert && array1[i] !== array2[i]) || - (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) { - diffs++; - } - } - return diffs + lengthDiff; + else { + this.emit("zoom", {direction:"-"}); } - function normalizeUnits(units) { - if (units) { - var lowered = units.toLowerCase().replace(/(.)s$/, '$1'); - units = unitAliases[units] || camelFunctions[lowered] || lowered; - } - return units; - } + return scale; + } + }; - function normalizeObjectUnits(inputObject) { - var normalizedInput = {}, - normalizedProp, - prop; - for (prop in inputObject) { - if (hasOwnProp(inputObject, prop)) { - normalizedProp = normalizeUnits(prop); - if (normalizedProp) { - normalizedInput[normalizedProp] = inputObject[prop]; - } - } - } + /** + * Event handler for mouse wheel event, used to zoom the timeline + * See http://adomas.org/javascript-mouse-wheel/ + * https://github.com/EightMedia/hammer.js/issues/256 + * @param {MouseEvent} event + * @private + */ + Network.prototype._onMouseWheel = function(event) { + // retrieve delta + var delta = 0; + if (event.wheelDelta) { /* IE/Opera. */ + delta = event.wheelDelta/120; + } else if (event.detail) { /* Mozilla case. */ + // In Mozilla, sign of delta is different than in IE. + // Also, delta is multiple of 3. + delta = -event.detail/3; + } + + // If delta is nonzero, handle it. + // Basically, delta is now positive if wheel was scrolled up, + // and negative, if wheel was scrolled down. + if (delta) { - return normalizedInput; + // calculate the new scale + var scale = this._getScale(); + var zoom = delta / 10; + if (delta < 0) { + zoom = zoom / (1 - zoom); } + scale *= (1 + zoom); - function makeList(field) { - var count, setter; - - if (field.indexOf('week') === 0) { - count = 7; - setter = 'day'; - } - else if (field.indexOf('month') === 0) { - count = 12; - setter = 'month'; - } - else { - return; - } + // calculate the pointer location + var gesture = hammerUtil.fakeGesture(this, event); + var pointer = this._getPointer(gesture.center); - moment[field] = function (format, index) { - var i, getter, - method = moment._locale[field], - results = []; + // apply the new scale + this._zoom(scale, pointer); + } - if (typeof format === 'number') { - index = format; - format = undefined; - } + // Prevent default actions caused by mouse wheel. + event.preventDefault(); + }; - getter = function (i) { - var m = moment().utc().set(setter, i); - return method.call(moment._locale, m, format || ''); - }; - if (index != null) { - return getter(index); - } - else { - for (i = 0; i < count; i++) { - results.push(getter(i)); - } - return results; - } - }; - } + /** + * Mouse move handler for checking whether the title moves over a node with a title. + * @param {Event} event + * @private + */ + Network.prototype._onMouseMoveTitle = function (event) { + var gesture = hammerUtil.fakeGesture(this, event); + var pointer = this._getPointer(gesture.center); - function toInt(argumentForCoercion) { - var coercedNumber = +argumentForCoercion, - value = 0; + // check if the previously selected node is still selected + if (this.popupObj) { + this._checkHidePopup(pointer); + } - if (coercedNumber !== 0 && isFinite(coercedNumber)) { - if (coercedNumber >= 0) { - value = Math.floor(coercedNumber); - } else { - value = Math.ceil(coercedNumber); - } - } + // start a timeout that will check if the mouse is positioned above + // an element + var me = this; + var checkShow = function() { + me._checkShowPopup(pointer); + }; + if (this.popupTimer) { + clearInterval(this.popupTimer); // stop any running calculationTimer + } + if (!this.drag.dragging) { + this.popupTimer = setTimeout(checkShow, this.constants.tooltip.delay); + } - return value; - } - function daysInMonth(year, month) { - return new Date(Date.UTC(year, month + 1, 0)).getUTCDate(); + /** + * Adding hover highlights + */ + if (this.constants.hover == true) { + // removing all hover highlights + for (var edgeId in this.hoverObj.edges) { + if (this.hoverObj.edges.hasOwnProperty(edgeId)) { + this.hoverObj.edges[edgeId].hover = false; + delete this.hoverObj.edges[edgeId]; + } } - function weeksInYear(year, dow, doy) { - return weekOfYear(moment([year, 11, 31 + dow - doy]), dow, doy).week; + // adding hover highlights + var obj = this._getNodeAt(pointer); + if (obj == null) { + obj = this._getEdgeAt(pointer); } - - function daysInYear(year) { - return isLeapYear(year) ? 366 : 365; + if (obj != null) { + this._hoverObject(obj); } - function isLeapYear(year) { - return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; + // removing all node hover highlights except for the selected one. + for (var nodeId in this.hoverObj.nodes) { + if (this.hoverObj.nodes.hasOwnProperty(nodeId)) { + if (obj instanceof Node && obj.id != nodeId || obj instanceof Edge || obj == null) { + this._blurObject(this.hoverObj.nodes[nodeId]); + delete this.hoverObj.nodes[nodeId]; + } + } } + this.redraw(); + } + }; - function checkOverflow(m) { - var overflow; - if (m._a && m._pf.overflow === -2) { - overflow = - m._a[MONTH] < 0 || m._a[MONTH] > 11 ? MONTH : - m._a[DATE] < 1 || m._a[DATE] > daysInMonth(m._a[YEAR], m._a[MONTH]) ? DATE : - m._a[HOUR] < 0 || m._a[HOUR] > 24 || - (m._a[HOUR] === 24 && (m._a[MINUTE] !== 0 || - m._a[SECOND] !== 0 || - m._a[MILLISECOND] !== 0)) ? HOUR : - m._a[MINUTE] < 0 || m._a[MINUTE] > 59 ? MINUTE : - m._a[SECOND] < 0 || m._a[SECOND] > 59 ? SECOND : - m._a[MILLISECOND] < 0 || m._a[MILLISECOND] > 999 ? MILLISECOND : - -1; + /** + * Check if there is an element on the given position in the network + * (a node or edge). If so, and if this element has a title, + * show a popup window with its title. + * + * @param {{x:Number, y:Number}} pointer + * @private + */ + Network.prototype._checkShowPopup = function (pointer) { + var obj = { + left: this._XconvertDOMtoCanvas(pointer.x), + top: this._YconvertDOMtoCanvas(pointer.y), + right: this._XconvertDOMtoCanvas(pointer.x), + bottom: this._YconvertDOMtoCanvas(pointer.y) + }; - if (m._pf._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) { - overflow = DATE; - } + var id; + var lastPopupNode = this.popupObj; - m._pf.overflow = overflow; + if (this.popupObj == undefined) { + // search the nodes for overlap, select the top one in case of multiple nodes + var nodes = this.nodes; + for (id in nodes) { + if (nodes.hasOwnProperty(id)) { + var node = nodes[id]; + if (node.getTitle() !== undefined && node.isOverlappingWith(obj)) { + this.popupObj = node; + break; } + } } + } - function isValid(m) { - if (m._isValid == null) { - m._isValid = !isNaN(m._d.getTime()) && - m._pf.overflow < 0 && - !m._pf.empty && - !m._pf.invalidMonth && - !m._pf.nullInput && - !m._pf.invalidFormat && - !m._pf.userInvalidated; - - if (m._strict) { - m._isValid = m._isValid && - m._pf.charsLeftOver === 0 && - m._pf.unusedTokens.length === 0 && - m._pf.bigHour === undefined; - } + if (this.popupObj === undefined) { + // search the edges for overlap + var edges = this.edges; + for (id in edges) { + if (edges.hasOwnProperty(id)) { + var edge = edges[id]; + if (edge.connected && (edge.getTitle() !== undefined) && + edge.isOverlappingWith(obj)) { + this.popupObj = edge; + break; } - return m._isValid; + } } + } - function normalizeLocale(key) { - return key ? key.toLowerCase().replace('_', '-') : key; + if (this.popupObj) { + // show popup message window + if (this.popupObj != lastPopupNode) { + var me = this; + if (!me.popup) { + me.popup = new Popup(me.frame, me.constants.tooltip); + } + + // adjust a small offset such that the mouse cursor is located in the + // bottom left location of the popup, and you can easily move over the + // popup area + me.popup.setPosition(pointer.x - 3, pointer.y - 3); + me.popup.setText(me.popupObj.getTitle()); + me.popup.show(); + } + } + else { + if (this.popup) { + this.popup.hide(); } + } + }; - // pick the locale from the array - // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each - // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root - function chooseLocale(names) { - var i = 0, j, next, locale, split; - while (i < names.length) { - split = normalizeLocale(names[i]).split('-'); - j = split.length; - next = normalizeLocale(names[i + 1]); - next = next ? next.split('-') : null; - while (j > 0) { - locale = loadLocale(split.slice(0, j).join('-')); - if (locale) { - return locale; - } - if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) { - //the next array item is better than a shallower substring of this one - break; - } - j--; - } - i++; - } - return null; + /** + * Check if the popup must be hided, which is the case when the mouse is no + * longer hovering on the object + * @param {{x:Number, y:Number}} pointer + * @private + */ + Network.prototype._checkHidePopup = function (pointer) { + if (!this.popupObj || !this._getNodeAt(pointer) ) { + this.popupObj = undefined; + if (this.popup) { + this.popup.hide(); } + } + }; - function loadLocale(name) { - var oldLocale = null; - if (!locales[name] && hasModule) { - try { - oldLocale = moment.locale(); - !(function webpackMissingModule() { var e = new Error("Cannot find module \"./locale\""); e.code = 'MODULE_NOT_FOUND'; throw e; }()); - // because defineLocale currently also sets the global locale, we want to undo that for lazy loaded locales - moment.locale(oldLocale); - } catch (e) { } - } - return locales[name]; - } - // Return a moment from input, that is local/utc/zone equivalent to model. - function makeAs(input, model) { - var res, diff; - if (model._isUTC) { - res = model.clone(); - diff = (moment.isMoment(input) || isDate(input) ? - +input : +moment(input)) - (+res); - // Use low-level api, because this fn is low-level api. - res._d.setTime(+res._d + diff); - moment.updateOffset(res, false); - return res; - } else { - return moment(input).local(); - } + /** + * Set a new size for the network + * @param {string} width Width in pixels or percentage (for example '800px' + * or '50%') + * @param {string} height Height in pixels or percentage (for example '400px' + * or '30%') + */ + Network.prototype.setSize = function(width, height) { + var emitEvent = false; + var oldWidth = this.frame.canvas.width; + var oldHeight = this.frame.canvas.height; + if (width != this.constants.width || height != this.constants.height || this.frame.style.width != width || this.frame.style.height != height) { + this.frame.style.width = width; + this.frame.style.height = height; + + this.frame.canvas.style.width = '100%'; + this.frame.canvas.style.height = '100%'; + + this.frame.canvas.width = this.frame.canvas.clientWidth * this.pixelRatio; + this.frame.canvas.height = this.frame.canvas.clientHeight * this.pixelRatio; + + this.constants.width = width; + this.constants.height = height; + + emitEvent = true; + } + else { + // this would adapt the width of the canvas to the width from 100% if and only if + // there is a change. + + if (this.frame.canvas.width != this.frame.canvas.clientWidth * this.pixelRatio) { + this.frame.canvas.width = this.frame.canvas.clientWidth * this.pixelRatio; + emitEvent = true; + } + if (this.frame.canvas.height != this.frame.canvas.clientHeight * this.pixelRatio) { + this.frame.canvas.height = this.frame.canvas.clientHeight * this.pixelRatio; + emitEvent = true; } + } - /************************************ - Locale - ************************************/ + if (emitEvent == true) { + this.emit('resize', {width:this.frame.canvas.width * this.pixelRatio,height:this.frame.canvas.height * this.pixelRatio, oldWidth: oldWidth * this.pixelRatio, oldHeight: oldHeight * this.pixelRatio}); + } + }; + /** + * Set a data set with nodes for the network + * @param {Array | DataSet | DataView} nodes The data containing the nodes. + * @private + */ + Network.prototype._setNodes = function(nodes) { + var oldNodesData = this.nodesData; - extend(Locale.prototype, { + if (nodes instanceof DataSet || nodes instanceof DataView) { + this.nodesData = nodes; + } + else if (Array.isArray(nodes)) { + this.nodesData = new DataSet(); + this.nodesData.add(nodes); + } + else if (!nodes) { + this.nodesData = new DataSet(); + } + else { + throw new TypeError('Array or DataSet expected'); + } - set : function (config) { - var prop, i; - for (i in config) { - prop = config[i]; - if (typeof prop === 'function') { - this[i] = prop; - } else { - this['_' + i] = prop; - } - } - // Lenient ordinal parsing accepts just a number in addition to - // number + (possibly) stuff coming from _ordinalParseLenient. - this._ordinalParseLenient = new RegExp(this._ordinalParse.source + '|' + /\d{1,2}/.source); - }, + if (oldNodesData) { + // unsubscribe from old dataset + util.forEach(this.nodesListeners, function (callback, event) { + oldNodesData.off(event, callback); + }); + } - _months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), - months : function (m) { - return this._months[m.month()]; - }, + // remove drawn nodes + this.nodes = {}; - _monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), - monthsShort : function (m) { - return this._monthsShort[m.month()]; - }, + if (this.nodesData) { + // subscribe to new dataset + var me = this; + util.forEach(this.nodesListeners, function (callback, event) { + me.nodesData.on(event, callback); + }); - monthsParse : function (monthName, format, strict) { - var i, mom, regex; + // draw all new nodes + var ids = this.nodesData.getIds(); + this._addNodes(ids); + } + this._updateSelection(); + }; - if (!this._monthsParse) { - this._monthsParse = []; - this._longMonthsParse = []; - this._shortMonthsParse = []; - } + /** + * Add nodes + * @param {Number[] | String[]} ids + * @private + */ + Network.prototype._addNodes = function(ids) { + var id; + for (var i = 0, len = ids.length; i < len; i++) { + id = ids[i]; + var data = this.nodesData.get(id); + var node = new Node(data, this.images, this.groups, this.constants); + this.nodes[id] = node; // note: this may replace an existing node + if ((node.xFixed == false || node.yFixed == false) && (node.x === null || node.y === null)) { + var radius = 10 * 0.1*ids.length + 10; + var angle = 2 * Math.PI * Math.random(); + if (node.xFixed == false) {node.x = radius * Math.cos(angle);} + if (node.yFixed == false) {node.y = radius * Math.sin(angle);} + } + this.moving = true; + } - for (i = 0; i < 12; i++) { - // make the regex if we don't have it already - mom = moment.utc([2000, i]); - if (strict && !this._longMonthsParse[i]) { - this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i'); - this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i'); - } - if (!strict && !this._monthsParse[i]) { - regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, ''); - this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i'); - } - // test the regex - if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) { - return i; - } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) { - return i; - } else if (!strict && this._monthsParse[i].test(monthName)) { - return i; - } - } - }, + this._updateNodeIndexList(); + if (this.constants.hierarchicalLayout.enabled == true && this.initializing == false) { + this._resetLevels(); + this._setupHierarchicalLayout(); + } + this._updateCalculationNodes(); + this._reconnectEdges(); + this._updateValueRange(this.nodes); + this.updateLabels(); + }; - _weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), - weekdays : function (m) { - return this._weekdays[m.day()]; - }, + /** + * Update existing nodes, or create them when not yet existing + * @param {Number[] | String[]} ids + * @private + */ + Network.prototype._updateNodes = function(ids,changedData) { + var nodes = this.nodes; + for (var i = 0, len = ids.length; i < len; i++) { + var id = ids[i]; + var node = nodes[id]; + var data = changedData[i]; + if (node) { + // update node + node.setProperties(data, this.constants); + } + else { + // create node + node = new Node(properties, this.images, this.groups, this.constants); + nodes[id] = node; + } + } + this.moving = true; + if (this.constants.hierarchicalLayout.enabled == true && this.initializing == false) { + this._resetLevels(); + this._setupHierarchicalLayout(); + } + this._updateNodeIndexList(); + this._updateValueRange(nodes); + }; - _weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), - weekdaysShort : function (m) { - return this._weekdaysShort[m.day()]; - }, + /** + * Remove existing nodes. If nodes do not exist, the method will just ignore it. + * @param {Number[] | String[]} ids + * @private + */ + Network.prototype._removeNodes = function(ids) { + var nodes = this.nodes; + for (var i = 0, len = ids.length; i < len; i++) { + var id = ids[i]; + delete nodes[id]; + } + this._updateNodeIndexList(); + if (this.constants.hierarchicalLayout.enabled == true && this.initializing == false) { + this._resetLevels(); + this._setupHierarchicalLayout(); + } + this._updateCalculationNodes(); + this._reconnectEdges(); + this._updateSelection(); + this._updateValueRange(nodes); + }; - _weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), - weekdaysMin : function (m) { - return this._weekdaysMin[m.day()]; - }, + /** + * Load edges by reading the data table + * @param {Array | DataSet | DataView} edges The data containing the edges. + * @private + * @private + */ + Network.prototype._setEdges = function(edges) { + var oldEdgesData = this.edgesData; - weekdaysParse : function (weekdayName) { - var i, mom, regex; + if (edges instanceof DataSet || edges instanceof DataView) { + this.edgesData = edges; + } + else if (Array.isArray(edges)) { + this.edgesData = new DataSet(); + this.edgesData.add(edges); + } + else if (!edges) { + this.edgesData = new DataSet(); + } + else { + throw new TypeError('Array or DataSet expected'); + } - if (!this._weekdaysParse) { - this._weekdaysParse = []; - } + if (oldEdgesData) { + // unsubscribe from old dataset + util.forEach(this.edgesListeners, function (callback, event) { + oldEdgesData.off(event, callback); + }); + } - for (i = 0; i < 7; i++) { - // make the regex if we don't have it already - if (!this._weekdaysParse[i]) { - mom = moment([2000, 1]).day(i); - regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, ''); - this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i'); - } - // test the regex - if (this._weekdaysParse[i].test(weekdayName)) { - return i; - } - } - }, + // remove drawn edges + this.edges = {}; - _longDateFormat : { - LTS : 'h:mm:ss A', - LT : 'h:mm A', - L : 'MM/DD/YYYY', - LL : 'MMMM D, YYYY', - LLL : 'MMMM D, YYYY LT', - LLLL : 'dddd, MMMM D, YYYY LT' - }, - longDateFormat : function (key) { - var output = this._longDateFormat[key]; - if (!output && this._longDateFormat[key.toUpperCase()]) { - output = this._longDateFormat[key.toUpperCase()].replace(/MMMM|MM|DD|dddd/g, function (val) { - return val.slice(1); - }); - this._longDateFormat[key] = output; - } - return output; - }, + if (this.edgesData) { + // subscribe to new dataset + var me = this; + util.forEach(this.edgesListeners, function (callback, event) { + me.edgesData.on(event, callback); + }); - isPM : function (input) { - // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays - // Using charAt should be more compatible. - return ((input + '').toLowerCase().charAt(0) === 'p'); - }, + // draw all new nodes + var ids = this.edgesData.getIds(); + this._addEdges(ids); + } - _meridiemParse : /[ap]\.?m?\.?/i, - meridiem : function (hours, minutes, isLower) { - if (hours > 11) { - return isLower ? 'pm' : 'PM'; - } else { - return isLower ? 'am' : 'AM'; - } - }, + this._reconnectEdges(); + }; - _calendar : { - sameDay : '[Today at] LT', - nextDay : '[Tomorrow at] LT', - nextWeek : 'dddd [at] LT', - lastDay : '[Yesterday at] LT', - lastWeek : '[Last] dddd [at] LT', - sameElse : 'L' - }, - calendar : function (key, mom, now) { - var output = this._calendar[key]; - return typeof output === 'function' ? output.apply(mom, [now]) : output; - }, + /** + * Add edges + * @param {Number[] | String[]} ids + * @private + */ + Network.prototype._addEdges = function (ids) { + var edges = this.edges, + edgesData = this.edgesData; - _relativeTime : { - future : 'in %s', - past : '%s ago', - s : 'a few seconds', - m : 'a minute', - mm : '%d minutes', - h : 'an hour', - hh : '%d hours', - d : 'a day', - dd : '%d days', - M : 'a month', - MM : '%d months', - y : 'a year', - yy : '%d years' - }, + for (var i = 0, len = ids.length; i < len; i++) { + var id = ids[i]; - relativeTime : function (number, withoutSuffix, string, isFuture) { - var output = this._relativeTime[string]; - return (typeof output === 'function') ? - output(number, withoutSuffix, string, isFuture) : - output.replace(/%d/i, number); - }, + var oldEdge = edges[id]; + if (oldEdge) { + oldEdge.disconnect(); + } - pastFuture : function (diff, output) { - var format = this._relativeTime[diff > 0 ? 'future' : 'past']; - return typeof format === 'function' ? format(output) : format.replace(/%s/i, output); - }, + var data = edgesData.get(id, {"showInternalIds" : true}); + edges[id] = new Edge(data, this, this.constants); + } + this.moving = true; + this._updateValueRange(edges); + this._createBezierNodes(); + this._updateCalculationNodes(); + if (this.constants.hierarchicalLayout.enabled == true && this.initializing == false) { + this._resetLevels(); + this._setupHierarchicalLayout(); + } + }; - ordinal : function (number) { - return this._ordinal.replace('%d', number); - }, - _ordinal : '%d', - _ordinalParse : /\d{1,2}/, + /** + * Update existing edges, or create them when not yet existing + * @param {Number[] | String[]} ids + * @private + */ + Network.prototype._updateEdges = function (ids) { + var edges = this.edges, + edgesData = this.edgesData; + for (var i = 0, len = ids.length; i < len; i++) { + var id = ids[i]; - preparse : function (string) { - return string; - }, + var data = edgesData.get(id); + var edge = edges[id]; + if (edge) { + // update edge + edge.disconnect(); + edge.setProperties(data, this.constants); + edge.connect(); + } + else { + // create edge + edge = new Edge(data, this, this.constants); + this.edges[id] = edge; + } + } - postformat : function (string) { - return string; - }, + this._createBezierNodes(); + if (this.constants.hierarchicalLayout.enabled == true && this.initializing == false) { + this._resetLevels(); + this._setupHierarchicalLayout(); + } + this.moving = true; + this._updateValueRange(edges); + }; - week : function (mom) { - return weekOfYear(mom, this._week.dow, this._week.doy).week; - }, + /** + * Remove existing edges. Non existing ids will be ignored + * @param {Number[] | String[]} ids + * @private + */ + Network.prototype._removeEdges = function (ids) { + var edges = this.edges; + for (var i = 0, len = ids.length; i < len; i++) { + var id = ids[i]; + var edge = edges[id]; + if (edge) { + if (edge.via != null) { + delete this.sectors['support']['nodes'][edge.via.id]; + } + edge.disconnect(); + delete edges[id]; + } + } - _week : { - dow : 0, // Sunday is the first day of the week. - doy : 6 // The week that contains Jan 1st is the first week of the year. - }, + this.moving = true; + this._updateValueRange(edges); + if (this.constants.hierarchicalLayout.enabled == true && this.initializing == false) { + this._resetLevels(); + this._setupHierarchicalLayout(); + } + this._updateCalculationNodes(); + }; - _invalidDate: 'Invalid date', - invalidDate: function () { - return this._invalidDate; - } - }); + /** + * Reconnect all edges + * @private + */ + Network.prototype._reconnectEdges = function() { + var id, + nodes = this.nodes, + edges = this.edges; + for (id in nodes) { + if (nodes.hasOwnProperty(id)) { + nodes[id].edges = []; + nodes[id].dynamicEdges = []; + } + } - /************************************ - Formatting - ************************************/ + for (id in edges) { + if (edges.hasOwnProperty(id)) { + var edge = edges[id]; + edge.from = null; + edge.to = null; + edge.connect(); + } + } + }; + /** + * Update the values of all object in the given array according to the current + * value range of the objects in the array. + * @param {Object} obj An object containing a set of Edges or Nodes + * The objects must have a method getValue() and + * setValueRange(min, max). + * @private + */ + Network.prototype._updateValueRange = function(obj) { + var id; - function removeFormattingTokens(input) { - if (input.match(/\[[\s\S]/)) { - return input.replace(/^\[|\]$/g, ''); - } - return input.replace(/\\/g, ''); + // determine the range of the objects + var valueMin = undefined; + var valueMax = undefined; + for (id in obj) { + if (obj.hasOwnProperty(id)) { + var value = obj[id].getValue(); + if (value !== undefined) { + valueMin = (valueMin === undefined) ? value : Math.min(value, valueMin); + valueMax = (valueMax === undefined) ? value : Math.max(value, valueMax); + } } + } - function makeFormatFunction(format) { - var array = format.match(formattingTokens), i, length; + // adjust the range of all objects + if (valueMin !== undefined && valueMax !== undefined) { + for (id in obj) { + if (obj.hasOwnProperty(id)) { + obj[id].setValueRange(valueMin, valueMax); + } + } + } + }; - for (i = 0, length = array.length; i < length; i++) { - if (formatTokenFunctions[array[i]]) { - array[i] = formatTokenFunctions[array[i]]; - } else { - array[i] = removeFormattingTokens(array[i]); - } - } + /** + * Redraw the network with the current data + * chart will be resized too. + */ + Network.prototype.redraw = function() { + this.setSize(this.constants.width, this.constants.height); + this._redraw(); + }; - return function (mom) { - var output = ''; - for (i = 0; i < length; i++) { - output += array[i] instanceof Function ? array[i].call(mom, format) : array[i]; - } - return output; - }; - } + /** + * Redraw the network with the current data + * @private + */ + Network.prototype._redraw = function() { + var ctx = this.frame.canvas.getContext('2d'); - // format date using native date object - function formatMoment(m, format) { - if (!m.isValid()) { - return m.localeData().invalidDate(); - } + ctx.setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0); - format = expandFormat(format, m.localeData()); + // clear the canvas + var w = this.frame.canvas.width * this.pixelRatio; + var h = this.frame.canvas.height * this.pixelRatio; + ctx.clearRect(0, 0, w, h); - if (!formatFunctions[format]) { - formatFunctions[format] = makeFormatFunction(format); - } + // set scaling and translation + ctx.save(); + ctx.translate(this.translation.x, this.translation.y); + ctx.scale(this.scale, this.scale); - return formatFunctions[format](m); - } + this.canvasTopLeft = { + "x": this._XconvertDOMtoCanvas(0), + "y": this._YconvertDOMtoCanvas(0) + }; + this.canvasBottomRight = { + "x": this._XconvertDOMtoCanvas(this.frame.canvas.clientWidth * this.pixelRatio), + "y": this._YconvertDOMtoCanvas(this.frame.canvas.clientHeight * this.pixelRatio) + }; - function expandFormat(format, locale) { - var i = 5; - function replaceLongDateFormatTokens(input) { - return locale.longDateFormat(input) || input; - } + this._doInAllSectors("_drawAllSectorNodes",ctx); + if (this.drag.dragging == false || this.drag.dragging === undefined || this.constants.hideEdgesOnDrag == false) { + this._doInAllSectors("_drawEdges",ctx); + } - localFormattingTokens.lastIndex = 0; - while (i >= 0 && localFormattingTokens.test(format)) { - format = format.replace(localFormattingTokens, replaceLongDateFormatTokens); - localFormattingTokens.lastIndex = 0; - i -= 1; - } + if (this.drag.dragging == false || this.drag.dragging === undefined || this.constants.hideNodesOnDrag == false) { + this._doInAllSectors("_drawNodes",ctx,false); + } - return format; - } + if (this.controlNodesActive == true) { + this._doInAllSectors("_drawControlNodes",ctx); + } + // this._doInSupportSector("_drawNodes",ctx,true); + // this._drawTree(ctx,"#F00F0F"); - /************************************ - Parsing - ************************************/ + // restore original scaling and translation + ctx.restore(); + }; + /** + * Set the translation of the network + * @param {Number} offsetX Horizontal offset + * @param {Number} offsetY Vertical offset + * @private + */ + Network.prototype._setTranslation = function(offsetX, offsetY) { + if (this.translation === undefined) { + this.translation = { + x: 0, + y: 0 + }; + } - // get the regex to find the next token - function getParseRegexForToken(token, config) { - var a, strict = config._strict; - switch (token) { - case 'Q': - return parseTokenOneDigit; - case 'DDDD': - return parseTokenThreeDigits; - case 'YYYY': - case 'GGGG': - case 'gggg': - return strict ? parseTokenFourDigits : parseTokenOneToFourDigits; - case 'Y': - case 'G': - case 'g': - return parseTokenSignedNumber; - case 'YYYYYY': - case 'YYYYY': - case 'GGGGG': - case 'ggggg': - return strict ? parseTokenSixDigits : parseTokenOneToSixDigits; - case 'S': - if (strict) { - return parseTokenOneDigit; - } - /* falls through */ - case 'SS': - if (strict) { - return parseTokenTwoDigits; - } - /* falls through */ - case 'SSS': - if (strict) { - return parseTokenThreeDigits; - } - /* falls through */ - case 'DDD': - return parseTokenOneToThreeDigits; - case 'MMM': - case 'MMMM': - case 'dd': - case 'ddd': - case 'dddd': - return parseTokenWord; - case 'a': - case 'A': - return config._locale._meridiemParse; - case 'x': - return parseTokenOffsetMs; - case 'X': - return parseTokenTimestampMs; - case 'Z': - case 'ZZ': - return parseTokenTimezone; - case 'T': - return parseTokenT; - case 'SSSS': - return parseTokenDigits; - case 'MM': - case 'DD': - case 'YY': - case 'GG': - case 'gg': - case 'HH': - case 'hh': - case 'mm': - case 'ss': - case 'ww': - case 'WW': - return strict ? parseTokenTwoDigits : parseTokenOneOrTwoDigits; - case 'M': - case 'D': - case 'd': - case 'H': - case 'h': - case 'm': - case 's': - case 'w': - case 'W': - case 'e': - case 'E': - return parseTokenOneOrTwoDigits; - case 'Do': - return strict ? config._locale._ordinalParse : config._locale._ordinalParseLenient; - default : - a = new RegExp(regexpEscape(unescapeFormat(token.replace('\\', '')), 'i')); - return a; - } - } + if (offsetX !== undefined) { + this.translation.x = offsetX; + } + if (offsetY !== undefined) { + this.translation.y = offsetY; + } + + this.emit('viewChanged'); + }; + + /** + * Get the translation of the network + * @return {Object} translation An object with parameters x and y, both a number + * @private + */ + Network.prototype._getTranslation = function() { + return { + x: this.translation.x, + y: this.translation.y + }; + }; - function timezoneMinutesFromString(string) { - string = string || ''; - var possibleTzMatches = (string.match(parseTokenTimezone) || []), - tzChunk = possibleTzMatches[possibleTzMatches.length - 1] || [], - parts = (tzChunk + '').match(parseTimezoneChunker) || ['-', 0, 0], - minutes = +(parts[1] * 60) + toInt(parts[2]); + /** + * Scale the network + * @param {Number} scale Scaling factor 1.0 is unscaled + * @private + */ + Network.prototype._setScale = function(scale) { + this.scale = scale; + }; - return parts[0] === '+' ? -minutes : minutes; - } + /** + * Get the current scale of the network + * @return {Number} scale Scaling factor 1.0 is unscaled + * @private + */ + Network.prototype._getScale = function() { + return this.scale; + }; - // function to convert string input to date - function addTimeToArrayFromToken(token, input, config) { - var a, datePartArray = config._a; + /** + * Convert the X coordinate in DOM-space (coordinate point in browser relative to the container div) to + * the X coordinate in canvas-space (the simulation sandbox, which the camera looks upon) + * @param {number} x + * @returns {number} + * @private + */ + Network.prototype._XconvertDOMtoCanvas = function(x) { + return (x - this.translation.x) / this.scale; + }; - switch (token) { - // QUARTER - case 'Q': - if (input != null) { - datePartArray[MONTH] = (toInt(input) - 1) * 3; - } - break; - // MONTH - case 'M' : // fall through to MM - case 'MM' : - if (input != null) { - datePartArray[MONTH] = toInt(input) - 1; - } - break; - case 'MMM' : // fall through to MMMM - case 'MMMM' : - a = config._locale.monthsParse(input, token, config._strict); - // if we didn't find a month name, mark the date as invalid. - if (a != null) { - datePartArray[MONTH] = a; - } else { - config._pf.invalidMonth = input; - } - break; - // DAY OF MONTH - case 'D' : // fall through to DD - case 'DD' : - if (input != null) { - datePartArray[DATE] = toInt(input); - } - break; - case 'Do' : - if (input != null) { - datePartArray[DATE] = toInt(parseInt( - input.match(/\d{1,2}/)[0], 10)); - } - break; - // DAY OF YEAR - case 'DDD' : // fall through to DDDD - case 'DDDD' : - if (input != null) { - config._dayOfYear = toInt(input); - } + /** + * Convert the X coordinate in canvas-space (the simulation sandbox, which the camera looks upon) to + * the X coordinate in DOM-space (coordinate point in browser relative to the container div) + * @param {number} x + * @returns {number} + * @private + */ + Network.prototype._XconvertCanvasToDOM = function(x) { + return x * this.scale + this.translation.x; + }; - break; - // YEAR - case 'YY' : - datePartArray[YEAR] = moment.parseTwoDigitYear(input); - break; - case 'YYYY' : - case 'YYYYY' : - case 'YYYYYY' : - datePartArray[YEAR] = toInt(input); - break; - // AM / PM - case 'a' : // fall through to A - case 'A' : - config._isPm = config._locale.isPM(input); - break; - // HOUR - case 'h' : // fall through to hh - case 'hh' : - config._pf.bigHour = true; - /* falls through */ - case 'H' : // fall through to HH - case 'HH' : - datePartArray[HOUR] = toInt(input); - break; - // MINUTE - case 'm' : // fall through to mm - case 'mm' : - datePartArray[MINUTE] = toInt(input); - break; - // SECOND - case 's' : // fall through to ss - case 'ss' : - datePartArray[SECOND] = toInt(input); - break; - // MILLISECOND - case 'S' : - case 'SS' : - case 'SSS' : - case 'SSSS' : - datePartArray[MILLISECOND] = toInt(('0.' + input) * 1000); - break; - // UNIX OFFSET (MILLISECONDS) - case 'x': - config._d = new Date(toInt(input)); - break; - // UNIX TIMESTAMP WITH MS - case 'X': - config._d = new Date(parseFloat(input) * 1000); - break; - // TIMEZONE - case 'Z' : // fall through to ZZ - case 'ZZ' : - config._useUTC = true; - config._tzm = timezoneMinutesFromString(input); - break; - // WEEKDAY - human - case 'dd': - case 'ddd': - case 'dddd': - a = config._locale.weekdaysParse(input); - // if we didn't get a weekday name, mark the date as invalid - if (a != null) { - config._w = config._w || {}; - config._w['d'] = a; - } else { - config._pf.invalidWeekday = input; - } - break; - // WEEK, WEEK DAY - numeric - case 'w': - case 'ww': - case 'W': - case 'WW': - case 'd': - case 'e': - case 'E': - token = token.substr(0, 1); - /* falls through */ - case 'gggg': - case 'GGGG': - case 'GGGGG': - token = token.substr(0, 2); - if (input) { - config._w = config._w || {}; - config._w[token] = toInt(input); - } - break; - case 'gg': - case 'GG': - config._w = config._w || {}; - config._w[token] = moment.parseTwoDigitYear(input); - } - } + /** + * Convert the Y coordinate in DOM-space (coordinate point in browser relative to the container div) to + * the Y coordinate in canvas-space (the simulation sandbox, which the camera looks upon) + * @param {number} y + * @returns {number} + * @private + */ + Network.prototype._YconvertDOMtoCanvas = function(y) { + return (y - this.translation.y) / this.scale; + }; - function dayOfYearFromWeekInfo(config) { - var w, weekYear, week, weekday, dow, doy, temp; + /** + * Convert the Y coordinate in canvas-space (the simulation sandbox, which the camera looks upon) to + * the Y coordinate in DOM-space (coordinate point in browser relative to the container div) + * @param {number} y + * @returns {number} + * @private + */ + Network.prototype._YconvertCanvasToDOM = function(y) { + return y * this.scale + this.translation.y ; + }; - w = config._w; - if (w.GG != null || w.W != null || w.E != null) { - dow = 1; - doy = 4; - // TODO: We need to take the current isoWeekYear, but that depends on - // how we interpret now (local, utc, fixed offset). So create - // a now version of current config (take local/utc/offset flags, and - // create now). - weekYear = dfl(w.GG, config._a[YEAR], weekOfYear(moment(), 1, 4).year); - week = dfl(w.W, 1); - weekday = dfl(w.E, 1); - } else { - dow = config._locale._week.dow; - doy = config._locale._week.doy; + /** + * + * @param {object} pos = {x: number, y: number} + * @returns {{x: number, y: number}} + * @constructor + */ + Network.prototype.canvasToDOM = function (pos) { + return {x: this._XconvertCanvasToDOM(pos.x), y: this._YconvertCanvasToDOM(pos.y)}; + }; - weekYear = dfl(w.gg, config._a[YEAR], weekOfYear(moment(), dow, doy).year); - week = dfl(w.w, 1); + /** + * + * @param {object} pos = {x: number, y: number} + * @returns {{x: number, y: number}} + * @constructor + */ + Network.prototype.DOMtoCanvas = function (pos) { + return {x: this._XconvertDOMtoCanvas(pos.x), y: this._YconvertDOMtoCanvas(pos.y)}; + }; - if (w.d != null) { - // weekday -- low day numbers are considered next week - weekday = w.d; - if (weekday < dow) { - ++week; - } - } else if (w.e != null) { - // local weekday -- counting starts from begining of week - weekday = w.e + dow; - } else { - // default to begining of week - weekday = dow; - } + /** + * Redraw all nodes + * The 2d context of a HTML canvas can be retrieved by canvas.getContext('2d'); + * @param {CanvasRenderingContext2D} ctx + * @param {Boolean} [alwaysShow] + * @private + */ + Network.prototype._drawNodes = function(ctx,alwaysShow) { + if (alwaysShow === undefined) { + alwaysShow = false; + } + + // first draw the unselected nodes + var nodes = this.nodes; + var selected = []; + + for (var id in nodes) { + if (nodes.hasOwnProperty(id)) { + nodes[id].setScaleAndPos(this.scale,this.canvasTopLeft,this.canvasBottomRight); + if (nodes[id].isSelected()) { + selected.push(id); + } + else { + if (nodes[id].inArea() || alwaysShow) { + nodes[id].draw(ctx); } - temp = dayOfYearFromWeeks(weekYear, week, weekday, doy, dow); + } + } + } - config._a[YEAR] = temp.year; - config._dayOfYear = temp.dayOfYear; + // draw the selected nodes on top + for (var s = 0, sMax = selected.length; s < sMax; s++) { + if (nodes[selected[s]].inArea() || alwaysShow) { + nodes[selected[s]].draw(ctx); } + } + }; - // convert an array to a date. - // the array should mirror the parameters below - // note: all values past the year are optional and will default to the lowest possible value. - // [year, month, day , hour, minute, second, millisecond] - function dateFromConfig(config) { - var i, date, input = [], currentDate, yearToUse; + /** + * Redraw all edges + * The 2d context of a HTML canvas can be retrieved by canvas.getContext('2d'); + * @param {CanvasRenderingContext2D} ctx + * @private + */ + Network.prototype._drawEdges = function(ctx) { + var edges = this.edges; + for (var id in edges) { + if (edges.hasOwnProperty(id)) { + var edge = edges[id]; + edge.setScale(this.scale); + if (edge.connected) { + edges[id].draw(ctx); + } + } + } + }; - if (config._d) { - return; - } + /** + * Redraw all edges + * The 2d context of a HTML canvas can be retrieved by canvas.getContext('2d'); + * @param {CanvasRenderingContext2D} ctx + * @private + */ + Network.prototype._drawControlNodes = function(ctx) { + var edges = this.edges; + for (var id in edges) { + if (edges.hasOwnProperty(id)) { + edges[id]._drawControlNodes(ctx); + } + } + }; - currentDate = currentDateArray(config); + /** + * Find a stable position for all nodes + * @private + */ + Network.prototype._stabilize = function() { + if (this.constants.freezeForStabilization == true) { + this._freezeDefinedNodes(); + } - //compute day of the year from weeks and weekdays - if (config._w && config._a[DATE] == null && config._a[MONTH] == null) { - dayOfYearFromWeekInfo(config); - } + // find stable position + var count = 0; + while (this.moving && count < this.constants.stabilizationIterations) { + this._physicsTick(); + count++; + } + this.zoomExtent(undefined,false,true); + if (this.constants.freezeForStabilization == true) { + this._restoreFrozenNodes(); + } + }; - //if the day of the year is set, figure out what it is - if (config._dayOfYear) { - yearToUse = dfl(config._a[YEAR], currentDate[YEAR]); + /** + * When initializing and stabilizing, we can freeze nodes with a predefined position. This greatly speeds up stabilization + * because only the supportnodes for the smoothCurves have to settle. + * + * @private + */ + Network.prototype._freezeDefinedNodes = function() { + var nodes = this.nodes; + for (var id in nodes) { + if (nodes.hasOwnProperty(id)) { + if (nodes[id].x != null && nodes[id].y != null) { + nodes[id].fixedData.x = nodes[id].xFixed; + nodes[id].fixedData.y = nodes[id].yFixed; + nodes[id].xFixed = true; + nodes[id].yFixed = true; + } + } + } + }; - if (config._dayOfYear > daysInYear(yearToUse)) { - config._pf._overflowDayOfYear = true; - } + /** + * Unfreezes the nodes that have been frozen by _freezeDefinedNodes. + * + * @private + */ + Network.prototype._restoreFrozenNodes = function() { + var nodes = this.nodes; + for (var id in nodes) { + if (nodes.hasOwnProperty(id)) { + if (nodes[id].fixedData.x != null) { + nodes[id].xFixed = nodes[id].fixedData.x; + nodes[id].yFixed = nodes[id].fixedData.y; + } + } + } + }; - date = makeUTCDate(yearToUse, 0, config._dayOfYear); - config._a[MONTH] = date.getUTCMonth(); - config._a[DATE] = date.getUTCDate(); - } - // Default to current date. - // * if no year, month, day of month are given, default to today - // * if day of month is given, default month and year - // * if month is given, default only year - // * if year is given, don't default anything - for (i = 0; i < 3 && config._a[i] == null; ++i) { - config._a[i] = input[i] = currentDate[i]; - } + /** + * Check if any of the nodes is still moving + * @param {number} vmin the minimum velocity considered as 'moving' + * @return {boolean} true if moving, false if non of the nodes is moving + * @private + */ + Network.prototype._isMoving = function(vmin) { + var nodes = this.nodes; + for (var id in nodes) { + if (nodes.hasOwnProperty(id) && nodes[id].isMoving(vmin)) { + return true; + } + } + return false; + }; - // Zero out whatever was not defaulted, including time - for (; i < 7; i++) { - config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i]; - } - // Check for 24:00:00.000 - if (config._a[HOUR] === 24 && - config._a[MINUTE] === 0 && - config._a[SECOND] === 0 && - config._a[MILLISECOND] === 0) { - config._nextDay = true; - config._a[HOUR] = 0; - } + /** + * /** + * Perform one discrete step for all nodes + * + * @private + */ + Network.prototype._discreteStepNodes = function() { + var interval = this.physicsDiscreteStepsize; + var nodes = this.nodes; + var nodeId; + var nodesPresent = false; - config._d = (config._useUTC ? makeUTCDate : makeDate).apply(null, input); - // Apply timezone offset from input. The actual zone can be changed - // with parseZone. - if (config._tzm != null) { - config._d.setUTCMinutes(config._d.getUTCMinutes() + config._tzm); - } + if (this.constants.maxVelocity > 0) { + for (nodeId in nodes) { + if (nodes.hasOwnProperty(nodeId)) { + nodes[nodeId].discreteStepLimited(interval, this.constants.maxVelocity); + nodesPresent = true; + } + } + } + else { + for (nodeId in nodes) { + if (nodes.hasOwnProperty(nodeId)) { + nodes[nodeId].discreteStep(interval); + nodesPresent = true; + } + } + } - if (config._nextDay) { - config._a[HOUR] = 24; - } + if (nodesPresent == true) { + var vminCorrected = this.constants.minVelocity / Math.max(this.scale,0.05); + if (vminCorrected > 0.5*this.constants.maxVelocity) { + return true; + } + else { + return this._isMoving(vminCorrected); } + } + return false; + }; - function dateFromObject(config) { - var normalizedInput; + /** + * A single simulation step (or "tick") in the physics simulation + * + * @private + */ + Network.prototype._physicsTick = function() { + if (!this.freezeSimulation) { + if (this.moving == true) { + var mainMovingStatus = false; + var supportMovingStatus = false; - if (config._d) { - return; - } + this._doInAllActiveSectors("_initializeForceCalculation"); + var mainMoving = this._doInAllActiveSectors("_discreteStepNodes"); + if (this.constants.smoothCurves.enabled == true && this.constants.smoothCurves.dynamic == true) { + supportMovingStatus = this._doInSupportSector("_discreteStepNodes"); + } + // gather movement data from all sectors, if one moves, we are NOT stabilzied + for (var i = 0; i < mainMoving.length; i++) {mainMovingStatus = mainMoving[0] || mainMovingStatus;} - normalizedInput = normalizeObjectUnits(config._i); - config._a = [ - normalizedInput.year, - normalizedInput.month, - normalizedInput.day || normalizedInput.date, - normalizedInput.hour, - normalizedInput.minute, - normalizedInput.second, - normalizedInput.millisecond - ]; + // determine if the network has stabilzied + this.moving = mainMovingStatus || supportMovingStatus; - dateFromConfig(config); + this.stabilizationIterations++; } + } + }; - function currentDateArray(config) { - var now = new Date(); - if (config._useUTC) { - return [ - now.getUTCFullYear(), - now.getUTCMonth(), - now.getUTCDate() - ]; - } else { - return [now.getFullYear(), now.getMonth(), now.getDate()]; - } - } - // date from string and format string - function makeDateFromStringAndFormat(config) { - if (config._f === moment.ISO_8601) { - parseISO(config); - return; - } + /** + * This function runs one step of the animation. It calls an x amount of physics ticks and one render tick. + * It reschedules itself at the beginning of the function + * + * @private + */ + Network.prototype._animationStep = function() { + // reset the timer so a new scheduled animation step can be set + this.timer = undefined; + // handle the keyboad movement + this._handleNavigation(); - config._a = []; - config._pf.empty = true; + // this schedules a new animation step + this.start(); - // This array is used to make a Date, either with `new Date` or `Date.UTC` - var string = '' + config._i, - i, parsedInput, tokens, token, skipped, - stringLength = string.length, - totalParsedInputLength = 0; + // start the physics simulation + var calculationTime = Date.now(); + var maxSteps = 1; + this._physicsTick(); + var timeRequired = Date.now() - calculationTime; + while (timeRequired < 0.9*(this.renderTimestep - this.renderTime) && maxSteps < this.maxPhysicsTicksPerRender) { + this._physicsTick(); + timeRequired = Date.now() - calculationTime; + maxSteps++; + } + // start the rendering process + var renderTime = Date.now(); + this._redraw(); + this.renderTime = Date.now() - renderTime; + }; - tokens = expandFormat(config._f, config._locale).match(formattingTokens) || []; + if (typeof window !== 'undefined') { + window.requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || + window.webkitRequestAnimationFrame || window.msRequestAnimationFrame; + } - for (i = 0; i < tokens.length; i++) { - token = tokens[i]; - parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0]; - if (parsedInput) { - skipped = string.substr(0, string.indexOf(parsedInput)); - if (skipped.length > 0) { - config._pf.unusedInput.push(skipped); - } - string = string.slice(string.indexOf(parsedInput) + parsedInput.length); - totalParsedInputLength += parsedInput.length; - } - // don't parse if it's not a known token - if (formatTokenFunctions[token]) { - if (parsedInput) { - config._pf.empty = false; - } - else { - config._pf.unusedTokens.push(token); - } - addTimeToArrayFromToken(token, parsedInput, config); - } - else if (config._strict && !parsedInput) { - config._pf.unusedTokens.push(token); - } - } + /** + * Schedule a animation step with the refreshrate interval. + */ + Network.prototype.start = function() { + if (this.moving == true || this.xIncrement != 0 || this.yIncrement != 0 || this.zoomIncrement != 0) { + if (this.startedStabilization == false) { + this.emit("startStabilization"); + this.startedStabilization = true; + } - // add remaining unparsed input length to the string - config._pf.charsLeftOver = stringLength - totalParsedInputLength; - if (string.length > 0) { - config._pf.unusedInput.push(string); - } + if (!this.timer) { + var ua = navigator.userAgent.toLowerCase(); - // clear _12h flag if hour is <= 12 - if (config._pf.bigHour === true && config._a[HOUR] <= 12) { - config._pf.bigHour = undefined; - } - // handle am pm - if (config._isPm && config._a[HOUR] < 12) { - config._a[HOUR] += 12; - } - // if is 12 am, change hours to 0 - if (config._isPm === false && config._a[HOUR] === 12) { - config._a[HOUR] = 0; + var requiresTimeout = false; + if (ua.indexOf('msie 9.0') != -1) { // IE 9 + requiresTimeout = true; + } + else if (ua.indexOf('safari') != -1) { // safari + if (ua.indexOf('chrome') <= -1) { + requiresTimeout = true; } - dateFromConfig(config); - checkOverflow(config); - } + } - function unescapeFormat(s) { - return s.replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) { - return p1 || p2 || p3 || p4; - }); + if (requiresTimeout == true) { + this.timer = window.setTimeout(this._animationStep.bind(this), this.renderTimestep); // wait this.renderTimeStep milliseconds and perform the animation step function + } + else{ + this.timer = window.requestAnimationFrame(this._animationStep.bind(this), this.renderTimestep); // wait this.renderTimeStep milliseconds and perform the animation step function + } } - - // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript - function regexpEscape(s) { - return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); + } + else { + this._redraw(); + if (this.stabilizationIterations > 0) { + // trigger the "stabilized" event. + // The event is triggered on the next tick, to prevent the case that + // it is fired while initializing the Network, in which case you would not + // be able to catch it + var me = this; + var params = { + iterations: me.stabilizationIterations + }; + me.stabilizationIterations = 0; + me.startedStabilization = false; + setTimeout(function () { + me.emit("stabilized", params); + }, 0); } + } + }; - // date from string and array of format strings - function makeDateFromStringAndArray(config) { - var tempConfig, - bestMoment, - - scoreToBeat, - i, - currentScore; - - if (config._f.length === 0) { - config._pf.invalidFormat = true; - config._d = new Date(NaN); - return; - } - - for (i = 0; i < config._f.length; i++) { - currentScore = 0; - tempConfig = copyConfig({}, config); - if (config._useUTC != null) { - tempConfig._useUTC = config._useUTC; - } - tempConfig._pf = defaultParsingFlags(); - tempConfig._f = config._f[i]; - makeDateFromStringAndFormat(tempConfig); - if (!isValid(tempConfig)) { - continue; - } + /** + * Move the network according to the keyboard presses. + * + * @private + */ + Network.prototype._handleNavigation = function() { + if (this.xIncrement != 0 || this.yIncrement != 0) { + var translation = this._getTranslation(); + this._setTranslation(translation.x+this.xIncrement, translation.y+this.yIncrement); + } + if (this.zoomIncrement != 0) { + var center = { + x: this.frame.canvas.clientWidth / 2, + y: this.frame.canvas.clientHeight / 2 + }; + this._zoom(this.scale*(1 + this.zoomIncrement), center); + } + }; - // if there is any input that was not parsed add a penalty for that format - currentScore += tempConfig._pf.charsLeftOver; - //or tokens - currentScore += tempConfig._pf.unusedTokens.length * 10; + /** + * Freeze the _animationStep + */ + Network.prototype.toggleFreeze = function() { + if (this.freezeSimulation == false) { + this.freezeSimulation = true; + } + else { + this.freezeSimulation = false; + this.start(); + } + }; - tempConfig._pf.score = currentScore; - if (scoreToBeat == null || currentScore < scoreToBeat) { - scoreToBeat = currentScore; - bestMoment = tempConfig; - } + /** + * This function cleans the support nodes if they are not needed and adds them when they are. + * + * @param {boolean} [disableStart] + * @private + */ + Network.prototype._configureSmoothCurves = function(disableStart) { + if (disableStart === undefined) { + disableStart = true; + } + if (this.constants.smoothCurves.enabled == true && this.constants.smoothCurves.dynamic == true) { + this._createBezierNodes(); + // cleanup unused support nodes + for (var nodeId in this.sectors['support']['nodes']) { + if (this.sectors['support']['nodes'].hasOwnProperty(nodeId)) { + if (this.edges[this.sectors['support']['nodes'][nodeId].parentEdgeId] === undefined) { + delete this.sectors['support']['nodes'][nodeId]; } - - extend(config, bestMoment || tempConfig); + } + } + } + else { + // delete the support nodes + this.sectors['support']['nodes'] = {}; + for (var edgeId in this.edges) { + if (this.edges.hasOwnProperty(edgeId)) { + this.edges[edgeId].via = null; + } } + } - // date from iso format - function parseISO(config) { - var i, l, - string = config._i, - match = isoRegex.exec(string); - if (match) { - config._pf.iso = true; - for (i = 0, l = isoDates.length; i < l; i++) { - if (isoDates[i][1].exec(string)) { - // match[5] should be 'T' or undefined - config._f = isoDates[i][0] + (match[6] || ' '); - break; - } - } - for (i = 0, l = isoTimes.length; i < l; i++) { - if (isoTimes[i][1].exec(string)) { - config._f += isoTimes[i][0]; - break; - } - } - if (string.match(parseTokenTimezone)) { - config._f += 'Z'; - } - makeDateFromStringAndFormat(config); - } else { - config._isValid = false; - } - } + this._updateCalculationNodes(); + if (!disableStart) { + this.moving = true; + this.start(); + } + }; - // date from iso format or fallback - function makeDateFromString(config) { - parseISO(config); - if (config._isValid === false) { - delete config._isValid; - moment.createFromInputFallback(config); - } - } - function map(arr, fn) { - var res = [], i; - for (i = 0; i < arr.length; ++i) { - res.push(fn(arr[i], i)); + /** + * Bezier curves require an anchor point to calculate the smooth flow. These points are nodes. These nodes are invisible but + * are used for the force calculation. + * + * @private + */ + Network.prototype._createBezierNodes = function() { + if (this.constants.smoothCurves.enabled == true && this.constants.smoothCurves.dynamic == true) { + for (var edgeId in this.edges) { + if (this.edges.hasOwnProperty(edgeId)) { + var edge = this.edges[edgeId]; + if (edge.via == null) { + var nodeId = "edgeId:".concat(edge.id); + this.sectors['support']['nodes'][nodeId] = new Node( + {id:nodeId, + mass:1, + shape:'circle', + image:"", + internalMultiplier:1 + },{},{},this.constants); + edge.via = this.sectors['support']['nodes'][nodeId]; + edge.via.parentEdgeId = edge.id; + edge.positionBezierNode(); } - return res; + } } + } + }; - function makeDateFromInput(config) { - var input = config._i, matched; - if (input === undefined) { - config._d = new Date(); - } else if (isDate(input)) { - config._d = new Date(+input); - } else if ((matched = aspNetJsonRegex.exec(input)) !== null) { - config._d = new Date(+matched[1]); - } else if (typeof input === 'string') { - makeDateFromString(config); - } else if (isArray(input)) { - config._a = map(input.slice(0), function (obj) { - return parseInt(obj, 10); - }); - dateFromConfig(config); - } else if (typeof(input) === 'object') { - dateFromObject(config); - } else if (typeof(input) === 'number') { - // from milliseconds - config._d = new Date(input); - } else { - moment.createFromInputFallback(config); - } + /** + * load the functions that load the mixins into the prototype. + * + * @private + */ + Network.prototype._initializeMixinLoaders = function () { + for (var mixin in MixinLoader) { + if (MixinLoader.hasOwnProperty(mixin)) { + Network.prototype[mixin] = MixinLoader[mixin]; } + } + }; - function makeDate(y, m, d, h, M, s, ms) { - //can't just apply() to create a date: - //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply - var date = new Date(y, m, d, h, M, s, ms); + /** + * Load the XY positions of the nodes into the dataset. + */ + Network.prototype.storePosition = function() { + console.log("storePosition is depricated: use .storePositions() from now on.") + this.storePositions(); + }; - //the date constructor doesn't accept years < 1970 - if (y < 1970) { - date.setFullYear(y); - } - return date; + /** + * Load the XY positions of the nodes into the dataset. + */ + Network.prototype.storePositions = function() { + var dataArray = []; + for (var nodeId in this.nodes) { + if (this.nodes.hasOwnProperty(nodeId)) { + var node = this.nodes[nodeId]; + var allowedToMoveX = !this.nodes.xFixed; + var allowedToMoveY = !this.nodes.yFixed; + if (this.nodesData._data[nodeId].x != Math.round(node.x) || this.nodesData._data[nodeId].y != Math.round(node.y)) { + dataArray.push({id:nodeId,x:Math.round(node.x),y:Math.round(node.y),allowedToMoveX:allowedToMoveX,allowedToMoveY:allowedToMoveY}); + } } + } + this.nodesData.update(dataArray); + }; - function makeUTCDate(y) { - var date = new Date(Date.UTC.apply(null, arguments)); - if (y < 1970) { - date.setUTCFullYear(y); + /** + * Return the positions of the nodes. + */ + Network.prototype.getPositions = function(ids) { + var dataArray = {}; + if (ids !== undefined) { + if (Array.isArray(ids) == true) { + for (var i = 0; i < ids.length; i++) { + if (this.nodes[ids[i]] !== undefined) { + var node = this.nodes[ids[i]]; + dataArray[ids[i]] = {x: Math.round(node.x), y: Math.round(node.y)}; } - return date; + } } - - function parseWeekday(input, locale) { - if (typeof input === 'string') { - if (!isNaN(input)) { - input = parseInt(input, 10); - } - else { - input = locale.weekdaysParse(input); - if (typeof input !== 'number') { - return null; - } - } - } - return input; + else { + if (this.nodes[ids] !== undefined) { + var node = this.nodes[ids]; + dataArray[ids] = {x: Math.round(node.x), y: Math.round(node.y)}; + } } - - /************************************ - Relative Time - ************************************/ - - - // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize - function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) { - return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture); + } + else { + for (var nodeId in this.nodes) { + if (this.nodes.hasOwnProperty(nodeId)) { + var node = this.nodes[nodeId]; + dataArray[nodeId] = {x: Math.round(node.x), y: Math.round(node.y)}; + } } + } + return dataArray; + }; - function relativeTime(posNegDuration, withoutSuffix, locale) { - var duration = moment.duration(posNegDuration).abs(), - seconds = round(duration.as('s')), - minutes = round(duration.as('m')), - hours = round(duration.as('h')), - days = round(duration.as('d')), - months = round(duration.as('M')), - years = round(duration.as('y')), - args = seconds < relativeTimeThresholds.s && ['s', seconds] || - minutes === 1 && ['m'] || - minutes < relativeTimeThresholds.m && ['mm', minutes] || - hours === 1 && ['h'] || - hours < relativeTimeThresholds.h && ['hh', hours] || - days === 1 && ['d'] || - days < relativeTimeThresholds.d && ['dd', days] || - months === 1 && ['M'] || - months < relativeTimeThresholds.M && ['MM', months] || - years === 1 && ['y'] || ['yy', years]; - args[2] = withoutSuffix; - args[3] = +posNegDuration > 0; - args[4] = locale; - return substituteTimeAgo.apply({}, args); + /** + * Center a node in view. + * + * @param {Number} nodeId + * @param {Number} [options] + */ + Network.prototype.focusOnNode = function (nodeId, options) { + if (this.nodes.hasOwnProperty(nodeId)) { + if (options === undefined) { + options = {}; } + var nodePosition = {x: this.nodes[nodeId].x, y: this.nodes[nodeId].y}; + options.position = nodePosition; + options.lockedOnNode = nodeId; + + this.moveTo(options) + } + else { + console.log("This nodeId cannot be found."); + } + }; + /** + * + * @param {Object} options | options.offset = {x:Number, y:Number} // offset from the center in DOM pixels + * | options.scale = Number // scale to move to + * | options.position = {x:Number, y:Number} // position to move to + * | options.animation = {duration:Number, easingFunction:String} || Boolean // position to move to + */ + Network.prototype.moveTo = function (options) { + if (options === undefined) { + options = {}; + return; + } + if (options.offset === undefined) {options.offset = {x: 0, y: 0}; } + if (options.offset.x === undefined) {options.offset.x = 0; } + if (options.offset.y === undefined) {options.offset.y = 0; } + if (options.scale === undefined) {options.scale = this._getScale(); } + if (options.position === undefined) {options.position = this._getTranslation();} + if (options.animation === undefined) {options.animation = {duration:0}; } + if (options.animation === false ) {options.animation = {duration:0}; } + if (options.animation === true ) {options.animation = {}; } + if (options.animation.duration === undefined) {options.animation.duration = 1000; } // default duration + if (options.animation.easingFunction === undefined) {options.animation.easingFunction = "easeInOutQuad"; } // default easing function - /************************************ - Week of Year - ************************************/ + this.animateView(options); + }; + /** + * + * @param {Object} options | options.offset = {x:Number, y:Number} // offset from the center in DOM pixels + * | options.time = Number // animation time in milliseconds + * | options.scale = Number // scale to animate to + * | options.position = {x:Number, y:Number} // position to animate to + * | options.easingFunction = String // linear, easeInQuad, easeOutQuad, easeInOutQuad, + * // easeInCubic, easeOutCubic, easeInOutCubic, + * // easeInQuart, easeOutQuart, easeInOutQuart, + * // easeInQuint, easeOutQuint, easeInOutQuint + */ + Network.prototype.animateView = function (options) { + if (options === undefined) { + options = {}; + return; + } - // firstDayOfWeek 0 = sun, 6 = sat - // the day of the week that starts the week - // (usually sunday or monday) - // firstDayOfWeekOfYear 0 = sun, 6 = sat - // the first week is the week that contains the first - // of this day of the week - // (eg. ISO weeks use thursday (4)) - function weekOfYear(mom, firstDayOfWeek, firstDayOfWeekOfYear) { - var end = firstDayOfWeekOfYear - firstDayOfWeek, - daysToDayOfWeek = firstDayOfWeekOfYear - mom.day(), - adjustedMoment; + // release if something focussed on the node + this.releaseNode(); + if (options.locked == true) { + this.lockedOnNodeId = options.lockedOnNode; + this.lockedOnNodeOffset = options.offset; + } + // forcefully complete the old animation if it was still running + if (this.easingTime != 0) { + this._transitionRedraw(1); // by setting easingtime to 1, we finish the animation. + } - if (daysToDayOfWeek > end) { - daysToDayOfWeek -= 7; - } + this.sourceScale = this._getScale(); + this.sourceTranslation = this._getTranslation(); + this.targetScale = options.scale; - if (daysToDayOfWeek < end - 7) { - daysToDayOfWeek += 7; - } + // set the scale so the viewCenter is based on the correct zoom level. This is overridden in the transitionRedraw + // but at least then we'll have the target transition + this._setScale(this.targetScale); + var viewCenter = this.DOMtoCanvas({x: 0.5 * this.frame.canvas.clientWidth, y: 0.5 * this.frame.canvas.clientHeight}); + var distanceFromCenter = { // offset from view, distance view has to change by these x and y to center the node + x: viewCenter.x - options.position.x, + y: viewCenter.y - options.position.y + }; + this.targetTranslation = { + x: this.sourceTranslation.x + distanceFromCenter.x * this.targetScale + options.offset.x, + y: this.sourceTranslation.y + distanceFromCenter.y * this.targetScale + options.offset.y + }; - adjustedMoment = moment(mom).add(daysToDayOfWeek, 'd'); - return { - week: Math.ceil(adjustedMoment.dayOfYear() / 7), - year: adjustedMoment.year() - }; + // if the time is set to 0, don't do an animation + if (options.animation.duration == 0) { + if (this.lockedOnNodeId != null) { + this._classicRedraw = this._redraw; + this._redraw = this._lockedRedraw; } - - //http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday - function dayOfYearFromWeeks(year, week, weekday, firstDayOfWeekOfYear, firstDayOfWeek) { - var d = makeUTCDate(year, 0, 1).getUTCDay(), daysToAdd, dayOfYear; - - d = d === 0 ? 7 : d; - weekday = weekday != null ? weekday : firstDayOfWeek; - daysToAdd = firstDayOfWeek - d + (d > firstDayOfWeekOfYear ? 7 : 0) - (d < firstDayOfWeek ? 7 : 0); - dayOfYear = 7 * (week - 1) + (weekday - firstDayOfWeek) + daysToAdd + 1; - - return { - year: dayOfYear > 0 ? year : year - 1, - dayOfYear: dayOfYear > 0 ? dayOfYear : daysInYear(year - 1) + dayOfYear - }; + else { + this._setScale(this.targetScale); + this._setTranslation(this.targetTranslation.x, this.targetTranslation.y); + this._redraw(); } + } + else { + this.animationSpeed = 1 / (this.renderRefreshRate * options.animation.duration * 0.001) || 1 / this.renderRefreshRate; + this.animationEasingFunction = options.animation.easingFunction; + this._classicRedraw = this._redraw; + this._redraw = this._transitionRedraw; + this._redraw(); + this.moving = true; + this.start(); + } + }; - /************************************ - Top Level Functions - ************************************/ - - function makeMoment(config) { - var input = config._i, - format = config._f, - res; - - config._locale = config._locale || moment.localeData(config._l); - if (input === null || (format === undefined && input === '')) { - return moment.invalid({nullInput: true}); - } + Network.prototype._lockedRedraw = function () { + var nodePosition = {x: this.nodes[this.lockedOnNodeId].x, y: this.nodes[this.lockedOnNodeId].y}; + var viewCenter = this.DOMtoCanvas({x: 0.5 * this.frame.canvas.clientWidth, y: 0.5 * this.frame.canvas.clientHeight}); + var distanceFromCenter = { // offset from view, distance view has to change by these x and y to center the node + x: viewCenter.x - nodePosition.x, + y: viewCenter.y - nodePosition.y + }; + var sourceTranslation = this._getTranslation(); + var targetTranslation = { + x: sourceTranslation.x + distanceFromCenter.x * this.scale + this.lockedOnNodeOffset.x, + y: sourceTranslation.y + distanceFromCenter.y * this.scale + this.lockedOnNodeOffset.y + }; - if (typeof input === 'string') { - config._i = input = config._locale.preparse(input); - } + this._setTranslation(targetTranslation.x,targetTranslation.y); + this._classicRedraw(); + } - if (moment.isMoment(input)) { - return new Moment(input, true); - } else if (format) { - if (isArray(format)) { - makeDateFromStringAndArray(config); - } else { - makeDateFromStringAndFormat(config); - } - } else { - makeDateFromInput(config); - } + Network.prototype.releaseNode = function () { + if (this.lockedOnNodeId != null) { + this._redraw = this._classicRedraw; + this.lockedOnNodeId = null; + this.lockedOnNodeOffset = null; + } + } - res = new Moment(config); - if (res._nextDay) { - // Adding is smart enough around DST - res.add(1, 'd'); - res._nextDay = undefined; - } + /** + * + * @param easingTime + * @private + */ + Network.prototype._transitionRedraw = function (easingTime) { + this.easingTime = easingTime || this.easingTime + this.animationSpeed; + this.easingTime += this.animationSpeed; - return res; - } + var progress = util.easingFunctions[this.animationEasingFunction](this.easingTime); - moment = function (input, format, locale, strict) { - var c; + this._setScale(this.sourceScale + (this.targetScale - this.sourceScale) * progress); + this._setTranslation( + this.sourceTranslation.x + (this.targetTranslation.x - this.sourceTranslation.x) * progress, + this.sourceTranslation.y + (this.targetTranslation.y - this.sourceTranslation.y) * progress + ); - if (typeof(locale) === 'boolean') { - strict = locale; - locale = undefined; - } - // object construction must be done this way. - // https://github.com/moment/moment/issues/1423 - c = {}; - c._isAMomentObject = true; - c._i = input; - c._f = format; - c._l = locale; - c._strict = strict; - c._isUTC = false; - c._pf = defaultParsingFlags(); + this._classicRedraw(); + this.moving = true; - return makeMoment(c); - }; + // cleanup + if (this.easingTime >= 1.0) { + this.easingTime = 0; + if (this.lockedOnNodeId != null) { + this._redraw = this._lockedRedraw; + } + else { + this._redraw = this._classicRedraw; + } + this.emit("animationFinished"); + } + }; - moment.suppressDeprecationWarnings = false; + Network.prototype._classicRedraw = function () { + // placeholder function to be overloaded by animations; + }; - moment.createFromInputFallback = deprecate( - 'moment construction falls back to js Date. This is ' + - 'discouraged and will be removed in upcoming major ' + - 'release. Please refer to ' + - 'https://github.com/moment/moment/issues/1407 for more info.', - function (config) { - config._d = new Date(config._i + (config._useUTC ? ' UTC' : '')); - } - ); + /** + * Returns true when the Network is active. + * @returns {boolean} + */ + Network.prototype.isActive = function () { + return !this.activator || this.activator.active; + }; - // Pick a moment m from moments so that m[fn](other) is true for all - // other. This relies on the function fn to be transitive. - // - // moments should either be an array of moment objects or an array, whose - // first element is an array of moment objects. - function pickBy(fn, moments) { - var res, i; - if (moments.length === 1 && isArray(moments[0])) { - moments = moments[0]; - } - if (!moments.length) { - return moment(); - } - res = moments[0]; - for (i = 1; i < moments.length; ++i) { - if (moments[i][fn](res)) { - res = moments[i]; - } - } - return res; - } - moment.min = function () { - var args = [].slice.call(arguments, 0); + /** + * Sets the scale + * @returns {Number} + */ + Network.prototype.setScale = function () { + return this._setScale(); + }; - return pickBy('isBefore', args); - }; - moment.max = function () { - var args = [].slice.call(arguments, 0); + /** + * Returns the scale + * @returns {Number} + */ + Network.prototype.getScale = function () { + return this._getScale(); + }; - return pickBy('isAfter', args); - }; - // creating with utc - moment.utc = function (input, format, locale, strict) { - var c; + /** + * Returns the scale + * @returns {Number} + */ + Network.prototype.getCenterCoordinates = function () { + return this.DOMtoCanvas({x: 0.5 * this.frame.canvas.clientWidth, y: 0.5 * this.frame.canvas.clientHeight}); + }; - if (typeof(locale) === 'boolean') { - strict = locale; - locale = undefined; - } - // object construction must be done this way. - // https://github.com/moment/moment/issues/1423 - c = {}; - c._isAMomentObject = true; - c._useUTC = true; - c._isUTC = true; - c._l = locale; - c._i = input; - c._f = format; - c._strict = strict; - c._pf = defaultParsingFlags(); + module.exports = Network; - return makeMoment(c).utc(); - }; - // creating with unix timestamp (in seconds) - moment.unix = function (input) { - return moment(input * 1000); - }; +/***/ }, +/* 52 */ +/***/ function(module, exports, __webpack_require__) { - // duration - moment.duration = function (input, key) { - var duration = input, - // matching against regexp is expensive, do it on demand - match = null, - sign, - ret, - parseIso, - diffRes; + /** + * Parse a text source containing data in DOT language into a JSON object. + * The object contains two lists: one with nodes and one with edges. + * + * DOT language reference: http://www.graphviz.org/doc/info/lang.html + * + * @param {String} data Text containing a graph in DOT-notation + * @return {Object} graph An object containing two parameters: + * {Object[]} nodes + * {Object[]} edges + */ + function parseDOT (data) { + dot = data; + return parseGraph(); + } - if (moment.isDuration(input)) { - duration = { - ms: input._milliseconds, - d: input._days, - M: input._months - }; - } else if (typeof input === 'number') { - duration = {}; - if (key) { - duration[key] = input; - } else { - duration.milliseconds = input; - } - } else if (!!(match = aspNetTimeSpanJsonRegex.exec(input))) { - sign = (match[1] === '-') ? -1 : 1; - duration = { - y: 0, - d: toInt(match[DATE]) * sign, - h: toInt(match[HOUR]) * sign, - m: toInt(match[MINUTE]) * sign, - s: toInt(match[SECOND]) * sign, - ms: toInt(match[MILLISECOND]) * sign - }; - } else if (!!(match = isoDurationRegex.exec(input))) { - sign = (match[1] === '-') ? -1 : 1; - parseIso = function (inp) { - // We'd normally use ~~inp for this, but unfortunately it also - // converts floats to ints. - // inp may be undefined, so careful calling replace on it. - var res = inp && parseFloat(inp.replace(',', '.')); - // apply sign while we're at it - return (isNaN(res) ? 0 : res) * sign; - }; - duration = { - y: parseIso(match[2]), - M: parseIso(match[3]), - d: parseIso(match[4]), - h: parseIso(match[5]), - m: parseIso(match[6]), - s: parseIso(match[7]), - w: parseIso(match[8]) - }; - } else if (typeof duration === 'object' && - ('from' in duration || 'to' in duration)) { - diffRes = momentsDifference(moment(duration.from), moment(duration.to)); + // token types enumeration + var TOKENTYPE = { + NULL : 0, + DELIMITER : 1, + IDENTIFIER: 2, + UNKNOWN : 3 + }; - duration = {}; - duration.ms = diffRes.milliseconds; - duration.M = diffRes.months; - } + // map with all delimiters + var DELIMITERS = { + '{': true, + '}': true, + '[': true, + ']': true, + ';': true, + '=': true, + ',': true, - ret = new Duration(duration); + '->': true, + '--': true + }; - if (moment.isDuration(input) && hasOwnProp(input, '_locale')) { - ret._locale = input._locale; - } + var dot = ''; // current dot file + var index = 0; // current index in dot file + var c = ''; // current token character in expr + var token = ''; // current token + var tokenType = TOKENTYPE.NULL; // type of the token - return ret; - }; + /** + * Get the first character from the dot file. + * The character is stored into the char c. If the end of the dot file is + * reached, the function puts an empty string in c. + */ + function first() { + index = 0; + c = dot.charAt(0); + } - // version number - moment.version = VERSION; + /** + * Get the next character from the dot file. + * The character is stored into the char c. If the end of the dot file is + * reached, the function puts an empty string in c. + */ + function next() { + index++; + c = dot.charAt(index); + } - // default format - moment.defaultFormat = isoFormat; + /** + * Preview the next character from the dot file. + * @return {String} cNext + */ + function nextPreview() { + return dot.charAt(index + 1); + } - // constant that refers to the ISO standard - moment.ISO_8601 = function () {}; + /** + * Test whether given character is alphabetic or numeric + * @param {String} c + * @return {Boolean} isAlphaNumeric + */ + var regexAlphaNumeric = /[a-zA-Z_0-9.:#]/; + function isAlphaNumeric(c) { + return regexAlphaNumeric.test(c); + } - // Plugins that add properties should also add the key here (null value), - // so we can properly clone ourselves. - moment.momentProperties = momentProperties; + /** + * Merge all properties of object b into object b + * @param {Object} a + * @param {Object} b + * @return {Object} a + */ + function merge (a, b) { + if (!a) { + a = {}; + } - // This function will be called whenever a moment is mutated. - // It is intended to keep the offset in sync with the timezone. - moment.updateOffset = function () {}; + if (b) { + for (var name in b) { + if (b.hasOwnProperty(name)) { + a[name] = b[name]; + } + } + } + return a; + } - // This function allows you to set a threshold for relative time strings - moment.relativeTimeThreshold = function (threshold, limit) { - if (relativeTimeThresholds[threshold] === undefined) { - return false; - } - if (limit === undefined) { - return relativeTimeThresholds[threshold]; - } - relativeTimeThresholds[threshold] = limit; - return true; - }; + /** + * Set a value in an object, where the provided parameter name can be a + * path with nested parameters. For example: + * + * var obj = {a: 2}; + * setValue(obj, 'b.c', 3); // obj = {a: 2, b: {c: 3}} + * + * @param {Object} obj + * @param {String} path A parameter name or dot-separated parameter path, + * like "color.highlight.border". + * @param {*} value + */ + function setValue(obj, path, value) { + var keys = path.split('.'); + var o = obj; + while (keys.length) { + var key = keys.shift(); + if (keys.length) { + // this isn't the end point + if (!o[key]) { + o[key] = {}; + } + o = o[key]; + } + else { + // this is the end point + o[key] = value; + } + } + } - moment.lang = deprecate( - 'moment.lang is deprecated. Use moment.locale instead.', - function (key, value) { - return moment.locale(key, value); - } - ); + /** + * Add a node to a graph object. If there is already a node with + * the same id, their attributes will be merged. + * @param {Object} graph + * @param {Object} node + */ + function addNode(graph, node) { + var i, len; + var current = null; - // This function will load locale and then set the global locale. If - // no arguments are passed in, it will simply return the current global - // locale key. - moment.locale = function (key, values) { - var data; - if (key) { - if (typeof(values) !== 'undefined') { - data = moment.defineLocale(key, values); - } - else { - data = moment.localeData(key); - } + // find root graph (in case of subgraph) + var graphs = [graph]; // list with all graphs from current graph to root graph + var root = graph; + while (root.parent) { + graphs.push(root.parent); + root = root.parent; + } - if (data) { - moment.duration._locale = moment._locale = data; - } - } + // find existing node (at root level) by its id + if (root.nodes) { + for (i = 0, len = root.nodes.length; i < len; i++) { + if (node.id === root.nodes[i].id) { + current = root.nodes[i]; + break; + } + } + } - return moment._locale._abbr; + if (!current) { + // this is a new node + current = { + id: node.id }; + if (graph.node) { + // clone default attributes + current.attr = merge(current.attr, graph.node); + } + } - moment.defineLocale = function (name, values) { - if (values !== null) { - values.abbr = name; - if (!locales[name]) { - locales[name] = new Locale(); - } - locales[name].set(values); - - // backwards compat for now: also set the locale - moment.locale(name); + // add node to this (sub)graph and all its parent graphs + for (i = graphs.length - 1; i >= 0; i--) { + var g = graphs[i]; - return locales[name]; - } else { - // useful for testing - delete locales[name]; - return null; - } - }; + if (!g.nodes) { + g.nodes = []; + } + if (g.nodes.indexOf(current) == -1) { + g.nodes.push(current); + } + } - moment.langData = deprecate( - 'moment.langData is deprecated. Use moment.localeData instead.', - function (key) { - return moment.localeData(key); - } - ); + // merge attributes + if (node.attr) { + current.attr = merge(current.attr, node.attr); + } + } - // returns locale data - moment.localeData = function (key) { - var locale; + /** + * Add an edge to a graph object + * @param {Object} graph + * @param {Object} edge + */ + function addEdge(graph, edge) { + if (!graph.edges) { + graph.edges = []; + } + graph.edges.push(edge); + if (graph.edge) { + var attr = merge({}, graph.edge); // clone default attributes + edge.attr = merge(attr, edge.attr); // merge attributes + } + } - if (key && key._locale && key._locale._abbr) { - key = key._locale._abbr; - } + /** + * Create an edge to a graph object + * @param {Object} graph + * @param {String | Number | Object} from + * @param {String | Number | Object} to + * @param {String} type + * @param {Object | null} attr + * @return {Object} edge + */ + function createEdge(graph, from, to, type, attr) { + var edge = { + from: from, + to: to, + type: type + }; - if (!key) { - return moment._locale; - } + if (graph.edge) { + edge.attr = merge({}, graph.edge); // clone default attributes + } + edge.attr = merge(edge.attr || {}, attr); // merge attributes - if (!isArray(key)) { - //short-circuit everything else - locale = loadLocale(key); - if (locale) { - return locale; - } - key = [key]; - } + return edge; + } - return chooseLocale(key); - }; + /** + * Get next token in the current dot file. + * The token and token type are available as token and tokenType + */ + function getToken() { + tokenType = TOKENTYPE.NULL; + token = ''; - // compare moment object - moment.isMoment = function (obj) { - return obj instanceof Moment || - (obj != null && hasOwnProp(obj, '_isAMomentObject')); - }; + // skip over whitespaces + while (c == ' ' || c == '\t' || c == '\n' || c == '\r') { // space, tab, enter + next(); + } - // for typechecking Duration objects - moment.isDuration = function (obj) { - return obj instanceof Duration; - }; + do { + var isComment = false; - for (i = lists.length - 1; i >= 0; --i) { - makeList(lists[i]); + // skip comment + if (c == '#') { + // find the previous non-space character + var i = index - 1; + while (dot.charAt(i) == ' ' || dot.charAt(i) == '\t') { + i--; + } + if (dot.charAt(i) == '\n' || dot.charAt(i) == '') { + // the # is at the start of a line, this is indeed a line comment + while (c != '' && c != '\n') { + next(); + } + isComment = true; + } } - - moment.normalizeUnits = function (units) { - return normalizeUnits(units); - }; - - moment.invalid = function (flags) { - var m = moment.utc(NaN); - if (flags != null) { - extend(m._pf, flags); + if (c == '/' && nextPreview() == '/') { + // skip line comment + while (c != '' && c != '\n') { + next(); + } + isComment = true; + } + if (c == '/' && nextPreview() == '*') { + // skip block comment + while (c != '') { + if (c == '*' && nextPreview() == '/') { + // end of block comment found. skip these last two characters + next(); + next(); + break; } else { - m._pf.userInvalidated = true; + next(); } + } + isComment = true; + } - return m; - }; - - moment.parseZone = function () { - return moment.apply(null, arguments).parseZone(); - }; + // skip over whitespaces + while (c == ' ' || c == '\t' || c == '\n' || c == '\r') { // space, tab, enter + next(); + } + } + while (isComment); - moment.parseTwoDigitYear = function (input) { - return toInt(input) + (toInt(input) > 68 ? 1900 : 2000); - }; + // check for end of dot file + if (c == '') { + // token is still empty + tokenType = TOKENTYPE.DELIMITER; + return; + } - /************************************ - Moment Prototype - ************************************/ + // check for delimiters consisting of 2 characters + var c2 = c + nextPreview(); + if (DELIMITERS[c2]) { + tokenType = TOKENTYPE.DELIMITER; + token = c2; + next(); + next(); + return; + } + // check for delimiters consisting of 1 character + if (DELIMITERS[c]) { + tokenType = TOKENTYPE.DELIMITER; + token = c; + next(); + return; + } - extend(moment.fn = Moment.prototype, { + // check for an identifier (number or string) + // TODO: more precise parsing of numbers/strings (and the port separator ':') + if (isAlphaNumeric(c) || c == '-') { + token += c; + next(); - clone : function () { - return moment(this); - }, + while (isAlphaNumeric(c)) { + token += c; + next(); + } + if (token == 'false') { + token = false; // convert to boolean + } + else if (token == 'true') { + token = true; // convert to boolean + } + else if (!isNaN(Number(token))) { + token = Number(token); // convert to number + } + tokenType = TOKENTYPE.IDENTIFIER; + return; + } - valueOf : function () { - return +this._d + ((this._offset || 0) * 60000); - }, + // check for a string enclosed by double quotes + if (c == '"') { + next(); + while (c != '' && (c != '"' || (c == '"' && nextPreview() == '"'))) { + token += c; + if (c == '"') { // skip the escape character + next(); + } + next(); + } + if (c != '"') { + throw newSyntaxError('End of string " expected'); + } + next(); + tokenType = TOKENTYPE.IDENTIFIER; + return; + } - unix : function () { - return Math.floor(+this / 1000); - }, + // something unknown is found, wrong characters, a syntax error + tokenType = TOKENTYPE.UNKNOWN; + while (c != '') { + token += c; + next(); + } + throw new SyntaxError('Syntax error in part "' + chop(token, 30) + '"'); + } - toString : function () { - return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ'); - }, + /** + * Parse a graph. + * @returns {Object} graph + */ + function parseGraph() { + var graph = {}; - toDate : function () { - return this._offset ? new Date(+this) : this._d; - }, + first(); + getToken(); - toISOString : function () { - var m = moment(this).utc(); - if (0 < m.year() && m.year() <= 9999) { - if ('function' === typeof Date.prototype.toISOString) { - // native implementation is ~50x faster, use it when we can - return this.toDate().toISOString(); - } else { - return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); - } - } else { - return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); - } - }, + // optional strict keyword + if (token == 'strict') { + graph.strict = true; + getToken(); + } - toArray : function () { - var m = this; - return [ - m.year(), - m.month(), - m.date(), - m.hours(), - m.minutes(), - m.seconds(), - m.milliseconds() - ]; - }, + // graph or digraph keyword + if (token == 'graph' || token == 'digraph') { + graph.type = token; + getToken(); + } - isValid : function () { - return isValid(this); - }, + // optional graph id + if (tokenType == TOKENTYPE.IDENTIFIER) { + graph.id = token; + getToken(); + } - isDSTShifted : function () { - if (this._a) { - return this.isValid() && compareArrays(this._a, (this._isUTC ? moment.utc(this._a) : moment(this._a)).toArray()) > 0; - } + // open angle bracket + if (token != '{') { + throw newSyntaxError('Angle bracket { expected'); + } + getToken(); - return false; - }, + // statements + parseStatements(graph); - parsingFlags : function () { - return extend({}, this._pf); - }, + // close angle bracket + if (token != '}') { + throw newSyntaxError('Angle bracket } expected'); + } + getToken(); - invalidAt: function () { - return this._pf.overflow; - }, + // end of file + if (token !== '') { + throw newSyntaxError('End of file expected'); + } + getToken(); - utc : function (keepLocalTime) { - return this.zone(0, keepLocalTime); - }, + // remove temporary default properties + delete graph.node; + delete graph.edge; + delete graph.graph; - local : function (keepLocalTime) { - if (this._isUTC) { - this.zone(0, keepLocalTime); - this._isUTC = false; + return graph; + } - if (keepLocalTime) { - this.add(this._dateTzOffset(), 'm'); - } - } - return this; - }, + /** + * Parse a list with statements. + * @param {Object} graph + */ + function parseStatements (graph) { + while (token !== '' && token != '}') { + parseStatement(graph); + if (token == ';') { + getToken(); + } + } + } - format : function (inputString) { - var output = formatMoment(this, inputString || moment.defaultFormat); - return this.localeData().postformat(output); - }, + /** + * Parse a single statement. Can be a an attribute statement, node + * statement, a series of node statements and edge statements, or a + * parameter. + * @param {Object} graph + */ + function parseStatement(graph) { + // parse subgraph + var subgraph = parseSubgraph(graph); + if (subgraph) { + // edge statements + parseEdge(graph, subgraph); - add : createAdder(1, 'add'), + return; + } - subtract : createAdder(-1, 'subtract'), + // parse an attribute statement + var attr = parseAttributeStatement(graph); + if (attr) { + return; + } - diff : function (input, units, asFloat) { - var that = makeAs(input, this), - zoneDiff = (this.zone() - that.zone()) * 6e4, - diff, output, daysAdjust; + // parse node + if (tokenType != TOKENTYPE.IDENTIFIER) { + throw newSyntaxError('Identifier expected'); + } + var id = token; // id can be a string or a number + getToken(); - units = normalizeUnits(units); + if (token == '=') { + // id statement + getToken(); + if (tokenType != TOKENTYPE.IDENTIFIER) { + throw newSyntaxError('Identifier expected'); + } + graph[id] = token; + getToken(); + // TODO: implement comma separated list with "a_list: ID=ID [','] [a_list] " + } + else { + parseNodeStatement(graph, id); + } + } - if (units === 'year' || units === 'month') { - // average number of days in the months in the given dates - diff = (this.daysInMonth() + that.daysInMonth()) * 432e5; // 24 * 60 * 60 * 1000 / 2 - // difference in months - output = ((this.year() - that.year()) * 12) + (this.month() - that.month()); - // adjust by taking difference in days, average number of days - // and dst in the given months. - daysAdjust = (this - moment(this).startOf('month')) - - (that - moment(that).startOf('month')); - // same as above but with zones, to negate all dst - daysAdjust -= ((this.zone() - moment(this).startOf('month').zone()) - - (that.zone() - moment(that).startOf('month').zone())) * 6e4; - output += daysAdjust / diff; - if (units === 'year') { - output = output / 12; - } - } else { - diff = (this - that); - output = units === 'second' ? diff / 1e3 : // 1000 - units === 'minute' ? diff / 6e4 : // 1000 * 60 - units === 'hour' ? diff / 36e5 : // 1000 * 60 * 60 - units === 'day' ? (diff - zoneDiff) / 864e5 : // 1000 * 60 * 60 * 24, negate dst - units === 'week' ? (diff - zoneDiff) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst - diff; - } - return asFloat ? output : absRound(output); - }, + /** + * Parse a subgraph + * @param {Object} graph parent graph object + * @return {Object | null} subgraph + */ + function parseSubgraph (graph) { + var subgraph = null; - from : function (time, withoutSuffix) { - return moment.duration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix); - }, + // optional subgraph keyword + if (token == 'subgraph') { + subgraph = {}; + subgraph.type = 'subgraph'; + getToken(); - fromNow : function (withoutSuffix) { - return this.from(moment(), withoutSuffix); - }, + // optional graph id + if (tokenType == TOKENTYPE.IDENTIFIER) { + subgraph.id = token; + getToken(); + } + } - calendar : function (time) { - // We want to compare the start of today, vs this. - // Getting start-of-today depends on whether we're zone'd or not. - var now = time || moment(), - sod = makeAs(now, this).startOf('day'), - diff = this.diff(sod, 'days', true), - format = diff < -6 ? 'sameElse' : - diff < -1 ? 'lastWeek' : - diff < 0 ? 'lastDay' : - diff < 1 ? 'sameDay' : - diff < 2 ? 'nextDay' : - diff < 7 ? 'nextWeek' : 'sameElse'; - return this.format(this.localeData().calendar(format, this, moment(now))); - }, + // open angle bracket + if (token == '{') { + getToken(); - isLeapYear : function () { - return isLeapYear(this.year()); - }, + if (!subgraph) { + subgraph = {}; + } + subgraph.parent = graph; + subgraph.node = graph.node; + subgraph.edge = graph.edge; + subgraph.graph = graph.graph; - isDST : function () { - return (this.zone() < this.clone().month(0).zone() || - this.zone() < this.clone().month(5).zone()); - }, + // statements + parseStatements(subgraph); - day : function (input) { - var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay(); - if (input != null) { - input = parseWeekday(input, this.localeData()); - return this.add(input - day, 'd'); - } else { - return day; - } - }, + // close angle bracket + if (token != '}') { + throw newSyntaxError('Angle bracket } expected'); + } + getToken(); - month : makeAccessor('Month', true), + // remove temporary default properties + delete subgraph.node; + delete subgraph.edge; + delete subgraph.graph; + delete subgraph.parent; - startOf : function (units) { - units = normalizeUnits(units); - // the following switch intentionally omits break keywords - // to utilize falling through the cases. - switch (units) { - case 'year': - this.month(0); - /* falls through */ - case 'quarter': - case 'month': - this.date(1); - /* falls through */ - case 'week': - case 'isoWeek': - case 'day': - this.hours(0); - /* falls through */ - case 'hour': - this.minutes(0); - /* falls through */ - case 'minute': - this.seconds(0); - /* falls through */ - case 'second': - this.milliseconds(0); - /* falls through */ - } + // register at the parent graph + if (!graph.subgraphs) { + graph.subgraphs = []; + } + graph.subgraphs.push(subgraph); + } - // weeks are a special case - if (units === 'week') { - this.weekday(0); - } else if (units === 'isoWeek') { - this.isoWeekday(1); - } + return subgraph; + } - // quarters are also special - if (units === 'quarter') { - this.month(Math.floor(this.month() / 3) * 3); - } + /** + * parse an attribute statement like "node [shape=circle fontSize=16]". + * Available keywords are 'node', 'edge', 'graph'. + * The previous list with default attributes will be replaced + * @param {Object} graph + * @returns {String | null} keyword Returns the name of the parsed attribute + * (node, edge, graph), or null if nothing + * is parsed. + */ + function parseAttributeStatement (graph) { + // attribute statements + if (token == 'node') { + getToken(); - return this; - }, + // node attributes + graph.node = parseAttributeList(); + return 'node'; + } + else if (token == 'edge') { + getToken(); - endOf: function (units) { - units = normalizeUnits(units); - if (units === undefined || units === 'millisecond') { - return this; - } - return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms'); - }, + // edge attributes + graph.edge = parseAttributeList(); + return 'edge'; + } + else if (token == 'graph') { + getToken(); - isAfter: function (input, units) { - var inputMs; - units = normalizeUnits(typeof units !== 'undefined' ? units : 'millisecond'); - if (units === 'millisecond') { - input = moment.isMoment(input) ? input : moment(input); - return +this > +input; - } else { - inputMs = moment.isMoment(input) ? +input : +moment(input); - return inputMs < +this.clone().startOf(units); - } - }, + // graph attributes + graph.graph = parseAttributeList(); + return 'graph'; + } - isBefore: function (input, units) { - var inputMs; - units = normalizeUnits(typeof units !== 'undefined' ? units : 'millisecond'); - if (units === 'millisecond') { - input = moment.isMoment(input) ? input : moment(input); - return +this < +input; - } else { - inputMs = moment.isMoment(input) ? +input : +moment(input); - return +this.clone().endOf(units) < inputMs; - } - }, + return null; + } - isSame: function (input, units) { - var inputMs; - units = normalizeUnits(units || 'millisecond'); - if (units === 'millisecond') { - input = moment.isMoment(input) ? input : moment(input); - return +this === +input; - } else { - inputMs = +moment(input); - return +(this.clone().startOf(units)) <= inputMs && inputMs <= +(this.clone().endOf(units)); - } - }, + /** + * parse a node statement + * @param {Object} graph + * @param {String | Number} id + */ + function parseNodeStatement(graph, id) { + // node statement + var node = { + id: id + }; + var attr = parseAttributeList(); + if (attr) { + node.attr = attr; + } + addNode(graph, node); - min: deprecate( - 'moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548', - function (other) { - other = moment.apply(null, arguments); - return other < this ? this : other; - } - ), + // edge statements + parseEdge(graph, id); + } - max: deprecate( - 'moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548', - function (other) { - other = moment.apply(null, arguments); - return other > this ? this : other; - } - ), + /** + * Parse an edge or a series of edges + * @param {Object} graph + * @param {String | Number} from Id of the from node + */ + function parseEdge(graph, from) { + while (token == '->' || token == '--') { + var to; + var type = token; + getToken(); - // keepLocalTime = true means only change the timezone, without - // affecting the local hour. So 5:31:26 +0300 --[zone(2, true)]--> - // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist int zone - // +0200, so we adjust the time as needed, to be valid. - // - // Keeping the time actually adds/subtracts (one hour) - // from the actual represented time. That is why we call updateOffset - // a second time. In case it wants us to change the offset again - // _changeInProgress == true case, then we have to adjust, because - // there is no such time in the given timezone. - zone : function (input, keepLocalTime) { - var offset = this._offset || 0, - localAdjust; - if (input != null) { - if (typeof input === 'string') { - input = timezoneMinutesFromString(input); - } - if (Math.abs(input) < 16) { - input = input * 60; - } - if (!this._isUTC && keepLocalTime) { - localAdjust = this._dateTzOffset(); - } - this._offset = input; - this._isUTC = true; - if (localAdjust != null) { - this.subtract(localAdjust, 'm'); - } - if (offset !== input) { - if (!keepLocalTime || this._changeInProgress) { - addOrSubtractDurationFromMoment(this, - moment.duration(offset - input, 'm'), 1, false); - } else if (!this._changeInProgress) { - this._changeInProgress = true; - moment.updateOffset(this, true); - this._changeInProgress = null; - } - } - } else { - return this._isUTC ? offset : this._dateTzOffset(); - } - return this; - }, + var subgraph = parseSubgraph(graph); + if (subgraph) { + to = subgraph; + } + else { + if (tokenType != TOKENTYPE.IDENTIFIER) { + throw newSyntaxError('Identifier or subgraph expected'); + } + to = token; + addNode(graph, { + id: to + }); + getToken(); + } - zoneAbbr : function () { - return this._isUTC ? 'UTC' : ''; - }, + // parse edge attributes + var attr = parseAttributeList(); - zoneName : function () { - return this._isUTC ? 'Coordinated Universal Time' : ''; - }, + // create edge + var edge = createEdge(graph, from, to, type, attr); + addEdge(graph, edge); - parseZone : function () { - if (this._tzm) { - this.zone(this._tzm); - } else if (typeof this._i === 'string') { - this.zone(this._i); - } - return this; - }, + from = to; + } + } - hasAlignedHourOffset : function (input) { - if (!input) { - input = 0; - } - else { - input = moment(input).zone(); - } + /** + * Parse a set with attributes, + * for example [label="1.000", shape=solid] + * @return {Object | null} attr + */ + function parseAttributeList() { + var attr = null; - return (this.zone() - input) % 60 === 0; - }, + while (token == '[') { + getToken(); + attr = {}; + while (token !== '' && token != ']') { + if (tokenType != TOKENTYPE.IDENTIFIER) { + throw newSyntaxError('Attribute name expected'); + } + var name = token; - daysInMonth : function () { - return daysInMonth(this.year(), this.month()); - }, + getToken(); + if (token != '=') { + throw newSyntaxError('Equal sign = expected'); + } + getToken(); - dayOfYear : function (input) { - var dayOfYear = round((moment(this).startOf('day') - moment(this).startOf('year')) / 864e5) + 1; - return input == null ? dayOfYear : this.add((input - dayOfYear), 'd'); - }, + if (tokenType != TOKENTYPE.IDENTIFIER) { + throw newSyntaxError('Attribute value expected'); + } + var value = token; + setValue(attr, name, value); // name can be a path - quarter : function (input) { - return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3); - }, + getToken(); + if (token ==',') { + getToken(); + } + } - weekYear : function (input) { - var year = weekOfYear(this, this.localeData()._week.dow, this.localeData()._week.doy).year; - return input == null ? year : this.add((input - year), 'y'); - }, + if (token != ']') { + throw newSyntaxError('Bracket ] expected'); + } + getToken(); + } - isoWeekYear : function (input) { - var year = weekOfYear(this, 1, 4).year; - return input == null ? year : this.add((input - year), 'y'); - }, + return attr; + } - week : function (input) { - var week = this.localeData().week(this); - return input == null ? week : this.add((input - week) * 7, 'd'); - }, + /** + * Create a syntax error with extra information on current token and index. + * @param {String} message + * @returns {SyntaxError} err + */ + function newSyntaxError(message) { + return new SyntaxError(message + ', got "' + chop(token, 30) + '" (char ' + index + ')'); + } - isoWeek : function (input) { - var week = weekOfYear(this, 1, 4).week; - return input == null ? week : this.add((input - week) * 7, 'd'); - }, + /** + * Chop off text after a maximum length + * @param {String} text + * @param {Number} maxLength + * @returns {String} + */ + function chop (text, maxLength) { + return (text.length <= maxLength) ? text : (text.substr(0, 27) + '...'); + } - weekday : function (input) { - var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7; - return input == null ? weekday : this.add(input - weekday, 'd'); - }, + /** + * Execute a function fn for each pair of elements in two arrays + * @param {Array | *} array1 + * @param {Array | *} array2 + * @param {function} fn + */ + function forEach2(array1, array2, fn) { + if (Array.isArray(array1)) { + array1.forEach(function (elem1) { + if (Array.isArray(array2)) { + array2.forEach(function (elem2) { + fn(elem1, elem2); + }); + } + else { + fn(elem1, array2); + } + }); + } + else { + if (Array.isArray(array2)) { + array2.forEach(function (elem2) { + fn(array1, elem2); + }); + } + else { + fn(array1, array2); + } + } + } - isoWeekday : function (input) { - // behaves the same as moment#day except - // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6) - // as a setter, sunday should belong to the previous week. - return input == null ? this.day() || 7 : this.day(this.day() % 7 ? input : input - 7); - }, + /** + * Convert a string containing a graph in DOT language into a map containing + * with nodes and edges in the format of graph. + * @param {String} data Text containing a graph in DOT-notation + * @return {Object} graphData + */ + function DOTToGraph (data) { + // parse the DOT file + var dotData = parseDOT(data); + var graphData = { + nodes: [], + edges: [], + options: {} + }; - isoWeeksInYear : function () { - return weeksInYear(this.year(), 1, 4); - }, + // copy the nodes + if (dotData.nodes) { + dotData.nodes.forEach(function (dotNode) { + var graphNode = { + id: dotNode.id, + label: String(dotNode.label || dotNode.id) + }; + merge(graphNode, dotNode.attr); + if (graphNode.image) { + graphNode.shape = 'image'; + } + graphData.nodes.push(graphNode); + }); + } + + // copy the edges + if (dotData.edges) { + /** + * Convert an edge in DOT format to an edge with VisGraph format + * @param {Object} dotEdge + * @returns {Object} graphEdge + */ + var convertEdge = function (dotEdge) { + var graphEdge = { + from: dotEdge.from, + to: dotEdge.to + }; + merge(graphEdge, dotEdge.attr); + graphEdge.style = (dotEdge.type == '->') ? 'arrow' : 'line'; + return graphEdge; + } + + dotData.edges.forEach(function (dotEdge) { + var from, to; + if (dotEdge.from instanceof Object) { + from = dotEdge.from.nodes; + } + else { + from = { + id: dotEdge.from + } + } + + if (dotEdge.to instanceof Object) { + to = dotEdge.to.nodes; + } + else { + to = { + id: dotEdge.to + } + } + + if (dotEdge.from instanceof Object && dotEdge.from.edges) { + dotEdge.from.edges.forEach(function (subEdge) { + var graphEdge = convertEdge(subEdge); + graphData.edges.push(graphEdge); + }); + } - weeksInYear : function () { - var weekInfo = this.localeData()._week; - return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy); - }, + forEach2(from, to, function (from, to) { + var subEdge = createEdge(graphData, from.id, to.id, dotEdge.type, dotEdge.attr); + var graphEdge = convertEdge(subEdge); + graphData.edges.push(graphEdge); + }); - get : function (units) { - units = normalizeUnits(units); - return this[units](); - }, + if (dotEdge.to instanceof Object && dotEdge.to.edges) { + dotEdge.to.edges.forEach(function (subEdge) { + var graphEdge = convertEdge(subEdge); + graphData.edges.push(graphEdge); + }); + } + }); + } - set : function (units, value) { - units = normalizeUnits(units); - if (typeof this[units] === 'function') { - this[units](value); - } - return this; - }, + // copy the options + if (dotData.attr) { + graphData.options = dotData.attr; + } - // If passed a locale key, it will set the locale for this - // instance. Otherwise, it will return the locale configuration - // variables for this instance. - locale : function (key) { - var newLocaleData; + return graphData; + } - if (key === undefined) { - return this._locale._abbr; - } else { - newLocaleData = moment.localeData(key); - if (newLocaleData != null) { - this._locale = newLocaleData; - } - return this; - } - }, + // exports + exports.parseDOT = parseDOT; + exports.DOTToGraph = DOTToGraph; - lang : deprecate( - 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.', - function (key) { - if (key === undefined) { - return this.localeData(); - } else { - return this.locale(key); - } - } - ), - localeData : function () { - return this._locale; - }, +/***/ }, +/* 53 */ +/***/ function(module, exports, __webpack_require__) { - _dateTzOffset : function () { - // On Firefox.24 Date#getTimezoneOffset returns a floating point. - // https://github.com/moment/moment/pull/1871 - return Math.round(this._d.getTimezoneOffset() / 15) * 15; - } - }); + + function parseGephi(gephiJSON, options) { + var edges = []; + var nodes = []; + this.options = { + edges: { + inheritColor: true + }, + nodes: { + allowedToMove: false, + parseColor: false + } + }; - function rawMonthSetter(mom, value) { - var dayOfMonth; + if (options !== undefined) { + this.options.nodes['allowedToMove'] = options.allowedToMove | false; + this.options.nodes['parseColor'] = options.parseColor | false; + this.options.edges['inheritColor'] = options.inheritColor | true; + } - // TODO: Move this out of here! - if (typeof value === 'string') { - value = mom.localeData().monthsParse(value); - // TODO: Another silent failure? - if (typeof value !== 'number') { - return mom; - } - } + var gEdges = gephiJSON.edges; + var gNodes = gephiJSON.nodes; + for (var i = 0; i < gEdges.length; i++) { + var edge = {}; + var gEdge = gEdges[i]; + edge['id'] = gEdge.id; + edge['from'] = gEdge.source; + edge['to'] = gEdge.target; + edge['attributes'] = gEdge.attributes; + // edge['value'] = gEdge.attributes !== undefined ? gEdge.attributes.Weight : undefined; + // edge['width'] = edge['value'] !== undefined ? undefined : edgegEdge.size; + edge['color'] = gEdge.color; + edge['inheritColor'] = edge['color'] !== undefined ? false : this.options.inheritColor; + edges.push(edge); + } - dayOfMonth = Math.min(mom.date(), - daysInMonth(mom.year(), value)); - mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth); - return mom; + for (var i = 0; i < gNodes.length; i++) { + var node = {}; + var gNode = gNodes[i]; + node['id'] = gNode.id; + node['attributes'] = gNode.attributes; + node['x'] = gNode.x; + node['y'] = gNode.y; + node['label'] = gNode.label; + if (this.options.nodes.parseColor == true) { + node['color'] = gNode.color; } - - function rawGetter(mom, unit) { - return mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit](); + else { + node['color'] = gNode.color !== undefined ? {background:gNode.color, border:gNode.color} : undefined; } + node['radius'] = gNode.size; + node['allowedToMoveX'] = this.options.nodes.allowedToMove; + node['allowedToMoveY'] = this.options.nodes.allowedToMove; + nodes.push(node); + } - function rawSetter(mom, unit, value) { - if (unit === 'Month') { - return rawMonthSetter(mom, value); - } else { - return mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value); - } - } + return {nodes:nodes, edges:edges}; + } - function makeAccessor(unit, keepTime) { - return function (value) { - if (value != null) { - rawSetter(this, unit, value); - moment.updateOffset(this, keepTime); - return this; - } else { - return rawGetter(this, unit); - } - }; - } + exports.parseGephi = parseGephi; - moment.fn.millisecond = moment.fn.milliseconds = makeAccessor('Milliseconds', false); - moment.fn.second = moment.fn.seconds = makeAccessor('Seconds', false); - moment.fn.minute = moment.fn.minutes = makeAccessor('Minutes', false); - // Setting the hour should keep the time, because the user explicitly - // specified which hour he wants. So trying to maintain the same hour (in - // a new timezone) makes sense. Adding/subtracting hours does not follow - // this rule. - moment.fn.hour = moment.fn.hours = makeAccessor('Hours', true); - // moment.fn.month is defined separately - moment.fn.date = makeAccessor('Date', true); - moment.fn.dates = deprecate('dates accessor is deprecated. Use date instead.', makeAccessor('Date', true)); - moment.fn.year = makeAccessor('FullYear', true); - moment.fn.years = deprecate('years accessor is deprecated. Use year instead.', makeAccessor('FullYear', true)); +/***/ }, +/* 54 */ +/***/ function(module, exports, __webpack_require__) { - // add plural methods - moment.fn.days = moment.fn.day; - moment.fn.months = moment.fn.month; - moment.fn.weeks = moment.fn.week; - moment.fn.isoWeeks = moment.fn.isoWeek; - moment.fn.quarters = moment.fn.quarter; + var util = __webpack_require__(1); - // add aliased format methods - moment.fn.toJSON = moment.fn.toISOString; + /** + * @class Groups + * This class can store groups and properties specific for groups. + */ + function Groups() { + this.clear(); + this.defaultIndex = 0; + } - /************************************ - Duration Prototype - ************************************/ + /** + * default constants for group colors + */ + Groups.DEFAULT = [ + {border: "#2B7CE9", background: "#97C2FC", highlight: {border: "#2B7CE9", background: "#D2E5FF"}, hover: {border: "#2B7CE9", background: "#D2E5FF"}}, // blue + {border: "#FFA500", background: "#FFFF00", highlight: {border: "#FFA500", background: "#FFFFA3"}, hover: {border: "#FFA500", background: "#FFFFA3"}}, // yellow + {border: "#FA0A10", background: "#FB7E81", highlight: {border: "#FA0A10", background: "#FFAFB1"}, hover: {border: "#FA0A10", background: "#FFAFB1"}}, // red + {border: "#41A906", background: "#7BE141", highlight: {border: "#41A906", background: "#A1EC76"}, hover: {border: "#41A906", background: "#A1EC76"}}, // green + {border: "#E129F0", background: "#EB7DF4", highlight: {border: "#E129F0", background: "#F0B3F5"}, hover: {border: "#E129F0", background: "#F0B3F5"}}, // magenta + {border: "#7C29F0", background: "#AD85E4", highlight: {border: "#7C29F0", background: "#D3BDF0"}, hover: {border: "#7C29F0", background: "#D3BDF0"}}, // purple + {border: "#C37F00", background: "#FFA807", highlight: {border: "#C37F00", background: "#FFCA66"}, hover: {border: "#C37F00", background: "#FFCA66"}}, // orange + {border: "#4220FB", background: "#6E6EFD", highlight: {border: "#4220FB", background: "#9B9BFD"}, hover: {border: "#4220FB", background: "#9B9BFD"}}, // darkblue + {border: "#FD5A77", background: "#FFC0CB", highlight: {border: "#FD5A77", background: "#FFD1D9"}, hover: {border: "#FD5A77", background: "#FFD1D9"}}, // pink + {border: "#4AD63A", background: "#C2FABC", highlight: {border: "#4AD63A", background: "#E6FFE3"}, hover: {border: "#4AD63A", background: "#E6FFE3"}} // mint + ]; - function daysToYears (days) { - // 400 years have 146097 days (taking into account leap year rules) - return days * 400 / 146097; - } - function yearsToDays (years) { - // years * 365 + absRound(years / 4) - - // absRound(years / 100) + absRound(years / 400); - return years * 146097 / 400; + /** + * Clear all groups + */ + Groups.prototype.clear = function () { + this.groups = {}; + this.groups.length = function() + { + var i = 0; + for ( var p in this ) { + if (this.hasOwnProperty(p)) { + i++; + } } + return i; + } + }; - extend(moment.duration.fn = Duration.prototype, { - _bubble : function () { - var milliseconds = this._milliseconds, - days = this._days, - months = this._months, - data = this._data, - seconds, minutes, hours, years = 0; + /** + * get group properties of a groupname. If groupname is not found, a new group + * is added. + * @param {*} groupname Can be a number, string, Date, etc. + * @return {Object} group The created group, containing all group properties + */ + Groups.prototype.get = function (groupname) { + var group = this.groups[groupname]; + if (group == undefined) { + // create new group + var index = this.defaultIndex % Groups.DEFAULT.length; + this.defaultIndex++; + group = {}; + group.color = Groups.DEFAULT[index]; + this.groups[groupname] = group; + } - // The following code bubbles up values, see the tests for - // examples of what that means. - data.milliseconds = milliseconds % 1000; + return group; + }; - seconds = absRound(milliseconds / 1000); - data.seconds = seconds % 60; + /** + * Add a custom group style + * @param {String} groupname + * @param {Object} style An object containing borderColor, + * backgroundColor, etc. + * @return {Object} group The created group object + */ + Groups.prototype.add = function (groupname, style) { + this.groups[groupname] = style; + if (style.color) { + style.color = util.parseColor(style.color); + } + return style; + }; - minutes = absRound(seconds / 60); - data.minutes = minutes % 60; + module.exports = Groups; - hours = absRound(minutes / 60); - data.hours = hours % 24; - days += absRound(hours / 24); +/***/ }, +/* 55 */ +/***/ function(module, exports, __webpack_require__) { - // Accurately convert days to years, assume start from year 0. - years = absRound(daysToYears(days)); - days -= absRound(yearsToDays(years)); + /** + * @class Images + * This class loads images and keeps them stored. + */ + function Images() { + this.images = {}; - // 30 days to a month - // TODO (iskren): Use anchor date (like 1st Jan) to compute this. - months += absRound(days / 30); - days %= 30; + this.callback = undefined; + } - // 12 months -> 1 year - years += absRound(months / 12); - months %= 12; + /** + * Set an onload callback function. This will be called each time an image + * is loaded + * @param {function} callback + */ + Images.prototype.setOnloadCallback = function(callback) { + this.callback = callback; + }; - data.days = days; - data.months = months; - data.years = years; - }, + /** + * + * @param {string} url Url of the image + * @param {string} url Url of an image to use if the url image is not found + * @return {Image} img The image object + */ + Images.prototype.load = function(url, brokenUrl) { + var img = this.images[url]; + if (img == undefined) { + // create the image + var images = this; + img = new Image(); + this.images[url] = img; + img.onload = function() { + if (images.callback) { + images.callback(this); + } + }; + + img.onerror = function () { + this.src = brokenUrl; + if (images.callback) { + images.callback(this); + } + }; + + img.src = url; + } - abs : function () { - this._milliseconds = Math.abs(this._milliseconds); - this._days = Math.abs(this._days); - this._months = Math.abs(this._months); + return img; + }; - this._data.milliseconds = Math.abs(this._data.milliseconds); - this._data.seconds = Math.abs(this._data.seconds); - this._data.minutes = Math.abs(this._data.minutes); - this._data.hours = Math.abs(this._data.hours); - this._data.months = Math.abs(this._data.months); - this._data.years = Math.abs(this._data.years); + module.exports = Images; - return this; - }, - weeks : function () { - return absRound(this.days() / 7); - }, +/***/ }, +/* 56 */ +/***/ function(module, exports, __webpack_require__) { - valueOf : function () { - return this._milliseconds + - this._days * 864e5 + - (this._months % 12) * 2592e6 + - toInt(this._months / 12) * 31536e6; - }, + var util = __webpack_require__(1); - humanize : function (withSuffix) { - var output = relativeTime(this, !withSuffix, this.localeData()); + /** + * @class Node + * A node. A node can be connected to other nodes via one or multiple edges. + * @param {object} properties An object containing properties for the node. All + * properties are optional, except for the id. + * {number} id Id of the node. Required + * {string} label Text label for the node + * {number} x Horizontal position of the node + * {number} y Vertical position of the node + * {string} shape Node shape, available: + * "database", "circle", "ellipse", + * "box", "image", "text", "dot", + * "star", "triangle", "triangleDown", + * "square" + * {string} image An image url + * {string} title An title text, can be HTML + * {anytype} group A group name or number + * @param {Network.Images} imagelist A list with images. Only needed + * when the node has an image + * @param {Network.Groups} grouplist A list with groups. Needed for + * retrieving group properties + * @param {Object} constants An object with default values for + * example for the color + * + */ + function Node(properties, imagelist, grouplist, networkConstants) { + var constants = util.selectiveBridgeObject(['nodes'],networkConstants); + this.options = constants.nodes; - if (withSuffix) { - output = this.localeData().pastFuture(+this, output); - } + this.selected = false; + this.hover = false; - return this.localeData().postformat(output); - }, + this.edges = []; // all edges connected to this node + this.dynamicEdges = []; + this.reroutedEdges = {}; - add : function (input, val) { - // supports only 2.0-style add(1, 's') or add(moment) - var dur = moment.duration(input, val); + this.fontDrawThreshold = 3; - this._milliseconds += dur._milliseconds; - this._days += dur._days; - this._months += dur._months; + // set defaults for the properties + this.id = undefined; + this.x = null; + this.y = null; + this.allowedToMoveX = false; + this.allowedToMoveY = false; + this.xFixed = false; + this.yFixed = false; + this.horizontalAlignLeft = true; // these are for the navigation controls + this.verticalAlignTop = true; // these are for the navigation controls + this.baseRadiusValue = networkConstants.nodes.radius; + this.radiusFixed = false; + this.level = -1; + this.preassignedLevel = false; + this.hierarchyEnumerated = false; + this.labelDimensions = {top:0,left:0,width:0,height:0,yLine:0}; // could be cached - this._bubble(); - return this; - }, + this.imagelist = imagelist; + this.grouplist = grouplist; - subtract : function (input, val) { - var dur = moment.duration(input, val); + // physics properties + this.fx = 0.0; // external force x + this.fy = 0.0; // external force y + this.vx = 0.0; // velocity x + this.vy = 0.0; // velocity y + this.damping = networkConstants.physics.damping; // written every time gravity is calculated + this.fixedData = {x:null,y:null}; - this._milliseconds -= dur._milliseconds; - this._days -= dur._days; - this._months -= dur._months; + this.setProperties(properties, constants); - this._bubble(); + // creating the variables for clustering + this.resetCluster(); + this.dynamicEdgesLength = 0; + this.clusterSession = 0; + this.clusterSizeWidthFactor = networkConstants.clustering.nodeScaling.width; + this.clusterSizeHeightFactor = networkConstants.clustering.nodeScaling.height; + this.clusterSizeRadiusFactor = networkConstants.clustering.nodeScaling.radius; + this.maxNodeSizeIncrements = networkConstants.clustering.maxNodeSizeIncrements; + this.growthIndicator = 0; - return this; - }, + // variables to tell the node about the network. + this.networkScaleInv = 1; + this.networkScale = 1; + this.canvasTopLeft = {"x": -300, "y": -300}; + this.canvasBottomRight = {"x": 300, "y": 300}; + this.parentEdgeId = null; + } - get : function (units) { - units = normalizeUnits(units); - return this[units.toLowerCase() + 's'](); - }, + /** + * (re)setting the clustering variables and objects + */ + Node.prototype.resetCluster = function() { + // clustering variables + this.formationScale = undefined; // this is used to determine when to open the cluster + this.clusterSize = 1; // this signifies the total amount of nodes in this cluster + this.containedNodes = {}; + this.containedEdges = {}; + this.clusterSessions = []; + }; + + /** + * Attach a edge to the node + * @param {Edge} edge + */ + Node.prototype.attachEdge = function(edge) { + if (this.edges.indexOf(edge) == -1) { + this.edges.push(edge); + } + if (this.dynamicEdges.indexOf(edge) == -1) { + this.dynamicEdges.push(edge); + } + this.dynamicEdgesLength = this.dynamicEdges.length; + }; + + /** + * Detach a edge from the node + * @param {Edge} edge + */ + Node.prototype.detachEdge = function(edge) { + var index = this.edges.indexOf(edge); + if (index != -1) { + this.edges.splice(index, 1); + } + index = this.dynamicEdges.indexOf(edge); + if (index != -1) { + this.dynamicEdges.splice(index, 1); + } + this.dynamicEdgesLength = this.dynamicEdges.length; + }; - as : function (units) { - var days, months; - units = normalizeUnits(units); - if (units === 'month' || units === 'year') { - days = this._days + this._milliseconds / 864e5; - months = this._months + daysToYears(days) * 12; - return units === 'month' ? months : months / 12; - } else { - // handle milliseconds separately because of floating point math errors (issue #1867) - days = this._days + Math.round(yearsToDays(this._months / 12)); - switch (units) { - case 'week': return days / 7 + this._milliseconds / 6048e5; - case 'day': return days + this._milliseconds / 864e5; - case 'hour': return days * 24 + this._milliseconds / 36e5; - case 'minute': return days * 24 * 60 + this._milliseconds / 6e4; - case 'second': return days * 24 * 60 * 60 + this._milliseconds / 1000; - // Math.floor prevents floating point math errors here - case 'millisecond': return Math.floor(days * 24 * 60 * 60 * 1000) + this._milliseconds; - default: throw new Error('Unknown unit ' + units); - } - } - }, + /** + * Set or overwrite properties for the node + * @param {Object} properties an object with properties + * @param {Object} constants and object with default, global properties + */ + Node.prototype.setProperties = function(properties, constants) { + if (!properties) { + return; + } - lang : moment.fn.lang, - locale : moment.fn.locale, + var fields = ['borderWidth','borderWidthSelected','shape','image','brokenImage','radius','fontColor', + 'fontSize','fontFace','fontFill','group','mass' + ]; + util.selectiveDeepExtend(fields, this.options, properties); - toIsoString : deprecate( - 'toIsoString() is deprecated. Please use toISOString() instead ' + - '(notice the capitals)', - function () { - return this.toISOString(); - } - ), + // basic properties + if (properties.id !== undefined) {this.id = properties.id;} + if (properties.label !== undefined) {this.label = properties.label; this.originalLabel = properties.label;} + if (properties.title !== undefined) {this.title = properties.title;} + if (properties.x !== undefined) {this.x = properties.x;} + if (properties.y !== undefined) {this.y = properties.y;} + if (properties.value !== undefined) {this.value = properties.value;} + if (properties.level !== undefined) {this.level = properties.level; this.preassignedLevel = true;} - toISOString : function () { - // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js - var years = Math.abs(this.years()), - months = Math.abs(this.months()), - days = Math.abs(this.days()), - hours = Math.abs(this.hours()), - minutes = Math.abs(this.minutes()), - seconds = Math.abs(this.seconds() + this.milliseconds() / 1000); + // navigation controls properties + if (properties.horizontalAlignLeft !== undefined) {this.horizontalAlignLeft = properties.horizontalAlignLeft;} + if (properties.verticalAlignTop !== undefined) {this.verticalAlignTop = properties.verticalAlignTop;} + if (properties.triggerFunction !== undefined) {this.triggerFunction = properties.triggerFunction;} - if (!this.asSeconds()) { - // this is the same as C#'s (Noda) and python (isodate)... - // but not other JS (goog.date) - return 'P0D'; - } + if (this.id === undefined) { + throw "Node must have an id"; + } - return (this.asSeconds() < 0 ? '-' : '') + - 'P' + - (years ? years + 'Y' : '') + - (months ? months + 'M' : '') + - (days ? days + 'D' : '') + - ((hours || minutes || seconds) ? 'T' : '') + - (hours ? hours + 'H' : '') + - (minutes ? minutes + 'M' : '') + - (seconds ? seconds + 'S' : ''); - }, + // copy group properties + if (typeof this.options.group === 'number' || (typeof this.options.group === 'string' && this.options.group != '')) { + var groupObj = this.grouplist.get(this.options.group); + for (var prop in groupObj) { + if (groupObj.hasOwnProperty(prop)) { + this.options[prop] = groupObj[prop]; + } + } + } - localeData : function () { - return this._locale; - } - }); - moment.duration.fn.toString = moment.duration.fn.toISOString; + // individual shape properties + if (properties.radius !== undefined) {this.baseRadiusValue = this.options.radius;} + if (properties.color !== undefined) {this.options.color = util.parseColor(properties.color);} - function makeDurationGetter(name) { - moment.duration.fn[name] = function () { - return this._data[name]; - }; + if (this.options.image!== undefined && this.options.image!= "") { + if (this.imagelist) { + this.imageObj = this.imagelist.load(this.options.image, this.options.brokenImage); } - - for (i in unitMillisecondFactors) { - if (hasOwnProp(unitMillisecondFactors, i)) { - makeDurationGetter(i.toLowerCase()); - } + else { + throw "No imagelist provided"; } + } - moment.duration.fn.asMilliseconds = function () { - return this.as('ms'); - }; - moment.duration.fn.asSeconds = function () { - return this.as('s'); - }; - moment.duration.fn.asMinutes = function () { - return this.as('m'); - }; - moment.duration.fn.asHours = function () { - return this.as('h'); - }; - moment.duration.fn.asDays = function () { - return this.as('d'); - }; - moment.duration.fn.asWeeks = function () { - return this.as('weeks'); - }; - moment.duration.fn.asMonths = function () { - return this.as('M'); - }; - moment.duration.fn.asYears = function () { - return this.as('y'); - }; + if (properties.allowedToMoveX !== undefined) { + this.xFixed = !properties.allowedToMoveX; + this.allowedToMoveX = properties.allowedToMoveX; + } + else if (properties.x !== undefined && this.allowedToMoveX == false) { + this.xFixed = true; + } - /************************************ - Default Locale - ************************************/ + if (properties.allowedToMoveY !== undefined) { + this.yFixed = !properties.allowedToMoveY; + this.allowedToMoveY = properties.allowedToMoveY; + } + else if (properties.y !== undefined && this.allowedToMoveY == false) { + this.yFixed = true; + } - // Set default locale, other locale will inherit from English. - moment.locale('en', { - ordinalParse: /\d{1,2}(th|st|nd|rd)/, - ordinal : function (number) { - var b = number % 10, - output = (toInt(number % 100 / 10) === 1) ? 'th' : - (b === 1) ? 'st' : - (b === 2) ? 'nd' : - (b === 3) ? 'rd' : 'th'; - return number + output; - } - }); + this.radiusFixed = this.radiusFixed || (properties.radius !== undefined); - /* EMBED_LOCALES */ + if (this.options.shape == 'image') { + this.options.radiusMin = constants.nodes.widthMin; + this.options.radiusMax = constants.nodes.widthMax; + } - /************************************ - Exposing Moment - ************************************/ - function makeGlobal(shouldDeprecate) { - /*global ender:false */ - if (typeof ender !== 'undefined') { - return; - } - oldGlobalMoment = globalScope.moment; - if (shouldDeprecate) { - globalScope.moment = deprecate( - 'Accessing Moment through the global scope is ' + - 'deprecated, and will be removed in an upcoming ' + - 'release.', - moment); - } else { - globalScope.moment = moment; - } - } - // CommonJS module is defined - if (hasModule) { - module.exports = moment; - } else if (true) { - !(__WEBPACK_AMD_DEFINE_RESULT__ = function (require, exports, module) { - if (module.config && module.config() && module.config().noGlobal === true) { - // release the global variable - globalScope.moment = oldGlobalMoment; - } + // choose draw method depending on the shape + switch (this.options.shape) { + case 'database': this.draw = this._drawDatabase; this.resize = this._resizeDatabase; break; + case 'box': this.draw = this._drawBox; this.resize = this._resizeBox; break; + case 'circle': this.draw = this._drawCircle; this.resize = this._resizeCircle; break; + case 'ellipse': this.draw = this._drawEllipse; this.resize = this._resizeEllipse; break; + // TODO: add diamond shape + case 'image': this.draw = this._drawImage; this.resize = this._resizeImage; break; + case 'text': this.draw = this._drawText; this.resize = this._resizeText; break; + case 'dot': this.draw = this._drawDot; this.resize = this._resizeShape; break; + case 'square': this.draw = this._drawSquare; this.resize = this._resizeShape; break; + case 'triangle': this.draw = this._drawTriangle; this.resize = this._resizeShape; break; + case 'triangleDown': this.draw = this._drawTriangleDown; this.resize = this._resizeShape; break; + case 'star': this.draw = this._drawStar; this.resize = this._resizeShape; break; + default: this.draw = this._drawEllipse; this.resize = this._resizeEllipse; break; + } + // reset the size of the node, this can be changed + this._reset(); - return moment; - }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - makeGlobal(true); - } else { - makeGlobal(); - } - }).call(this); - - /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()), __webpack_require__(71)(module))) + }; -/***/ }, -/* 59 */ -/***/ function(module, exports, __webpack_require__) { + /** + * select this node + */ + Node.prototype.select = function() { + this.selected = true; + this._reset(); + }; - var __WEBPACK_AMD_DEFINE_RESULT__;/*! Hammer.JS - v1.1.3 - 2014-05-20 - * http://eightmedia.github.io/hammer.js - * - * Copyright (c) 2014 Jorik Tangelder ; - * Licensed under the MIT license */ + /** + * unselect this node + */ + Node.prototype.unselect = function() { + this.selected = false; + this._reset(); + }; - (function(window, undefined) { - 'use strict'; /** - * @main - * @module hammer - * - * @class Hammer - * @static + * Reset the calculated size of the node, forces it to recalculate its size */ + Node.prototype.clearSizeCache = function() { + this._reset(); + }; /** - * Hammer, use this to create instances - * ```` - * var hammertime = new Hammer(myElement); - * ```` - * - * @method Hammer - * @param {HTMLElement} element - * @param {Object} [options={}] - * @return {Hammer.Instance} + * Reset the calculated size of the node, forces it to recalculate its size + * @private */ - var Hammer = function Hammer(element, options) { - return new Hammer.Instance(element, options || {}); + Node.prototype._reset = function() { + this.width = undefined; + this.height = undefined; }; /** - * version, as defined in package.json - * the value will be set at each build - * @property VERSION - * @final - * @type {String} + * get the title of this node. + * @return {string} title The title of the node, or undefined when no title + * has been set. */ - Hammer.VERSION = '1.1.3'; + Node.prototype.getTitle = function() { + return typeof this.title === "function" ? this.title() : this.title; + }; /** - * default settings. - * more settings are defined per gesture at `/gestures`. Each gesture can be disabled/enabled - * by setting it's name (like `swipe`) to false. - * You can set the defaults for all instances by changing this object before creating an instance. - * @example - * ```` - * Hammer.defaults.drag = false; - * Hammer.defaults.behavior.touchAction = 'pan-y'; - * delete Hammer.defaults.behavior.userSelect; - * ```` - * @property defaults - * @type {Object} + * Calculate the distance to the border of the Node + * @param {CanvasRenderingContext2D} ctx + * @param {Number} angle Angle in radians + * @returns {number} distance Distance to the border in pixels */ - Hammer.defaults = { - /** - * this setting object adds styles and attributes to the element to prevent the browser from doing - * its native behavior. The css properties are auto prefixed for the browsers when needed. - * @property defaults.behavior - * @type {Object} - */ - behavior: { - /** - * Disables text selection to improve the dragging gesture. When the value is `none` it also sets - * `onselectstart=false` for IE on the element. Mainly for desktop browsers. - * @property defaults.behavior.userSelect - * @type {String} - * @default 'none' - */ - userSelect: 'none', + Node.prototype.distanceToBorder = function (ctx, angle) { + var borderWidth = 1; - /** - * Specifies whether and how a given region can be manipulated by the user (for instance, by panning or zooming). - * Used by Chrome 35> and IE10>. By default this makes the element blocking any touch event. - * @property defaults.behavior.touchAction - * @type {String} - * @default: 'pan-y' - */ - touchAction: 'pan-y', + if (!this.width) { + this.resize(ctx); + } - /** - * Disables the default callout shown when you touch and hold a touch target. - * On iOS, when you touch and hold a touch target such as a link, Safari displays - * a callout containing information about the link. This property allows you to disable that callout. - * @property defaults.behavior.touchCallout - * @type {String} - * @default 'none' - */ - touchCallout: 'none', + switch (this.options.shape) { + case 'circle': + case 'dot': + return this.options.radius+ borderWidth; - /** - * Specifies whether zooming is enabled. Used by IE10> - * @property defaults.behavior.contentZooming - * @type {String} - * @default 'none' - */ - contentZooming: 'none', + case 'ellipse': + var a = this.width / 2; + var b = this.height / 2; + var w = (Math.sin(angle) * a); + var h = (Math.cos(angle) * b); + return a * b / Math.sqrt(w * w + h * h); - /** - * Specifies that an entire element should be draggable instead of its contents. - * Mainly for desktop browsers. - * @property defaults.behavior.userDrag - * @type {String} - * @default 'none' - */ - userDrag: 'none', + // TODO: implement distanceToBorder for database + // TODO: implement distanceToBorder for triangle + // TODO: implement distanceToBorder for triangleDown - /** - * Overrides the highlight color shown when the user taps a link or a JavaScript - * clickable element in Safari on iPhone. This property obeys the alpha value, if specified. - * - * If you don't specify an alpha value, Safari on iPhone applies a default alpha value - * to the color. To disable tap highlighting, set the alpha value to 0 (invisible). - * If you set the alpha value to 1.0 (opaque), the element is not visible when tapped. - * @property defaults.behavior.tapHighlightColor - * @type {String} - * @default 'rgba(0,0,0,0)' - */ - tapHighlightColor: 'rgba(0,0,0,0)' - } + case 'box': + case 'image': + case 'text': + default: + if (this.width) { + return Math.min( + Math.abs(this.width / 2 / Math.cos(angle)), + Math.abs(this.height / 2 / Math.sin(angle))) + borderWidth; + // TODO: reckon with border radius too in case of box + } + else { + return 0; + } + + } + // TODO: implement calculation of distance to border for all shapes }; /** - * hammer document where the base events are added at - * @property DOCUMENT - * @type {HTMLElement} - * @default window.document + * Set forces acting on the node + * @param {number} fx Force in horizontal direction + * @param {number} fy Force in vertical direction */ - Hammer.DOCUMENT = document; + Node.prototype._setForce = function(fx, fy) { + this.fx = fx; + this.fy = fy; + }; /** - * detect support for pointer events - * @property HAS_POINTEREVENTS - * @type {Boolean} + * Add forces acting on the node + * @param {number} fx Force in horizontal direction + * @param {number} fy Force in vertical direction + * @private */ - Hammer.HAS_POINTEREVENTS = navigator.pointerEnabled || navigator.msPointerEnabled; + Node.prototype._addForce = function(fx, fy) { + this.fx += fx; + this.fy += fy; + }; /** - * detect support for touch events - * @property HAS_TOUCHEVENTS - * @type {Boolean} + * Perform one discrete step for the node + * @param {number} interval Time interval in seconds */ - Hammer.HAS_TOUCHEVENTS = ('ontouchstart' in window); + Node.prototype.discreteStep = function(interval) { + if (!this.xFixed) { + var dx = this.damping * this.vx; // damping force + var ax = (this.fx - dx) / this.options.mass; // acceleration + this.vx += ax * interval; // velocity + this.x += this.vx * interval; // position + } + else { + this.fx = 0; + this.vx = 0; + } + + if (!this.yFixed) { + var dy = this.damping * this.vy; // damping force + var ay = (this.fy - dy) / this.options.mass; // acceleration + this.vy += ay * interval; // velocity + this.y += this.vy * interval; // position + } + else { + this.fy = 0; + this.vy = 0; + } + }; + - /** - * detect mobile browsers - * @property IS_MOBILE - * @type {Boolean} - */ - Hammer.IS_MOBILE = /mobile|tablet|ip(ad|hone|od)|android|silk/i.test(navigator.userAgent); /** - * detect if we want to support mouseevents at all - * @property NO_MOUSEEVENTS - * @type {Boolean} + * Perform one discrete step for the node + * @param {number} interval Time interval in seconds + * @param {number} maxVelocity The speed limit imposed on the velocity */ - Hammer.NO_MOUSEEVENTS = (Hammer.HAS_TOUCHEVENTS && Hammer.IS_MOBILE) || Hammer.HAS_POINTEREVENTS; + Node.prototype.discreteStepLimited = function(interval, maxVelocity) { + if (!this.xFixed) { + var dx = this.damping * this.vx; // damping force + var ax = (this.fx - dx) / this.options.mass; // acceleration + this.vx += ax * interval; // velocity + this.vx = (Math.abs(this.vx) > maxVelocity) ? ((this.vx > 0) ? maxVelocity : -maxVelocity) : this.vx; + this.x += this.vx * interval; // position + } + else { + this.fx = 0; + this.vx = 0; + } + + if (!this.yFixed) { + var dy = this.damping * this.vy; // damping force + var ay = (this.fy - dy) / this.options.mass; // acceleration + this.vy += ay * interval; // velocity + this.vy = (Math.abs(this.vy) > maxVelocity) ? ((this.vy > 0) ? maxVelocity : -maxVelocity) : this.vy; + this.y += this.vy * interval; // position + } + else { + this.fy = 0; + this.vy = 0; + } + }; /** - * interval in which Hammer recalculates current velocity/direction/angle in ms - * @property CALCULATE_INTERVAL - * @type {Number} - * @default 25 + * Check if this node has a fixed x and y position + * @return {boolean} true if fixed, false if not */ - Hammer.CALCULATE_INTERVAL = 25; + Node.prototype.isFixed = function() { + return (this.xFixed && this.yFixed); + }; /** - * eventtypes per touchevent (start, move, end) are filled by `Event.determineEventTypes` on `setup` - * the object contains the DOM event names per type (`EVENT_START`, `EVENT_MOVE`, `EVENT_END`) - * @property EVENT_TYPES - * @private - * @writeOnce - * @type {Object} + * Check if this node is moving + * @param {number} vmin the minimum velocity considered as "moving" + * @return {boolean} true if moving, false if it has no velocity */ - var EVENT_TYPES = {}; + Node.prototype.isMoving = function(vmin) { + var velocity = Math.sqrt(Math.pow(this.vx,2) + Math.pow(this.vy,2)); + // this.velocity = Math.sqrt(Math.pow(this.vx,2) + Math.pow(this.vy,2)) + return (velocity > vmin); + }; /** - * direction strings, for safe comparisons - * @property DIRECTION_DOWN|LEFT|UP|RIGHT - * @final - * @type {String} - * @default 'down' 'left' 'up' 'right' + * check if this node is selecte + * @return {boolean} selected True if node is selected, else false */ - var DIRECTION_DOWN = Hammer.DIRECTION_DOWN = 'down'; - var DIRECTION_LEFT = Hammer.DIRECTION_LEFT = 'left'; - var DIRECTION_UP = Hammer.DIRECTION_UP = 'up'; - var DIRECTION_RIGHT = Hammer.DIRECTION_RIGHT = 'right'; + Node.prototype.isSelected = function() { + return this.selected; + }; /** - * pointertype strings, for safe comparisons - * @property POINTER_MOUSE|TOUCH|PEN - * @final - * @type {String} - * @default 'mouse' 'touch' 'pen' + * Retrieve the value of the node. Can be undefined + * @return {Number} value */ - var POINTER_MOUSE = Hammer.POINTER_MOUSE = 'mouse'; - var POINTER_TOUCH = Hammer.POINTER_TOUCH = 'touch'; - var POINTER_PEN = Hammer.POINTER_PEN = 'pen'; + Node.prototype.getValue = function() { + return this.value; + }; /** - * eventtypes - * @property EVENT_START|MOVE|END|RELEASE|TOUCH - * @final - * @type {String} - * @default 'start' 'change' 'move' 'end' 'release' 'touch' + * Calculate the distance from the nodes location to the given location (x,y) + * @param {Number} x + * @param {Number} y + * @return {Number} value */ - var EVENT_START = Hammer.EVENT_START = 'start'; - var EVENT_MOVE = Hammer.EVENT_MOVE = 'move'; - var EVENT_END = Hammer.EVENT_END = 'end'; - var EVENT_RELEASE = Hammer.EVENT_RELEASE = 'release'; - var EVENT_TOUCH = Hammer.EVENT_TOUCH = 'touch'; + Node.prototype.getDistance = function(x, y) { + var dx = this.x - x, + dy = this.y - y; + return Math.sqrt(dx * dx + dy * dy); + }; + /** - * if the window events are set... - * @property READY - * @writeOnce - * @type {Boolean} - * @default false + * Adjust the value range of the node. The node will adjust it's radius + * based on its value. + * @param {Number} min + * @param {Number} max */ - Hammer.READY = false; + Node.prototype.setValueRange = function(min, max) { + if (!this.radiusFixed && this.value !== undefined) { + if (max == min) { + this.options.radius= (this.options.radiusMin + this.options.radiusMax) / 2; + } + else { + var scale = (this.options.radiusMax - this.options.radiusMin) / (max - min); + this.options.radius= (this.value - min) * scale + this.options.radiusMin; + } + } + this.baseRadiusValue = this.options.radius; + }; /** - * plugins namespace - * @property plugins - * @type {Object} + * Draw this node in the given canvas + * The 2d context of a HTML canvas can be retrieved by canvas.getContext("2d"); + * @param {CanvasRenderingContext2D} ctx */ - Hammer.plugins = Hammer.plugins || {}; + Node.prototype.draw = function(ctx) { + throw "Draw method not initialized for node"; + }; /** - * gestures namespace - * see `/gestures` for the definitions - * @property gestures - * @type {Object} + * Recalculate the size of this node in the given canvas + * The 2d context of a HTML canvas can be retrieved by canvas.getContext("2d"); + * @param {CanvasRenderingContext2D} ctx */ - Hammer.gestures = Hammer.gestures || {}; + Node.prototype.resize = function(ctx) { + throw "Resize method not initialized for node"; + }; /** - * setup events to detect gestures on the document - * this function is called when creating an new instance - * @private + * Check if this object is overlapping with the provided object + * @param {Object} obj an object with parameters left, top, right, bottom + * @return {boolean} True if location is located on node */ - function setup() { - if(Hammer.READY) { - return; + Node.prototype.isOverlappingWith = function(obj) { + return (this.left < obj.right && + this.left + this.width > obj.left && + this.top < obj.bottom && + this.top + this.height > obj.top); + }; + + Node.prototype._resizeImage = function (ctx) { + // TODO: pre calculate the image size + + if (!this.width || !this.height) { // undefined or 0 + var width, height; + if (this.value) { + this.options.radius= this.baseRadiusValue; + var scale = this.imageObj.height / this.imageObj.width; + if (scale !== undefined) { + width = this.options.radius|| this.imageObj.width; + height = this.options.radius* scale || this.imageObj.height; + } + else { + width = 0; + height = 0; + } + } + else { + width = this.imageObj.width; + height = this.imageObj.height; } + this.width = width; + this.height = height; - // find what eventtypes we add listeners to - Event.determineEventTypes(); + this.growthIndicator = 0; + if (this.width > 0 && this.height > 0) { + this.width += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeWidthFactor; + this.height += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeHeightFactor; + this.options.radius+= Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeRadiusFactor; + this.growthIndicator = this.width - width; + } + } - // Register all gestures inside Hammer.gestures - Utils.each(Hammer.gestures, function(gesture) { - Detection.register(gesture); - }); + }; - // Add touch events on the document - Event.onTouch(Hammer.DOCUMENT, EVENT_MOVE, Detection.detect); - Event.onTouch(Hammer.DOCUMENT, EVENT_END, Detection.detect); + Node.prototype._drawImage = function (ctx) { + this._resizeImage(ctx); - // Hammer is ready...! - Hammer.READY = true; - } + this.left = this.x - this.width / 2; + this.top = this.y - this.height / 2; - /** - * @module hammer - * - * @class Utils - * @static - */ - var Utils = Hammer.utils = { - /** - * extend method, could also be used for cloning when `dest` is an empty object. - * changes the dest object - * @method extend - * @param {Object} dest - * @param {Object} src - * @param {Boolean} [merge=false] do a merge - * @return {Object} dest - */ - extend: function extend(dest, src, merge) { - for(var key in src) { - if(!src.hasOwnProperty(key) || (dest[key] !== undefined && merge)) { - continue; - } - dest[key] = src[key]; - } - return dest; - }, + var yLabel; + if (this.imageObj.width != 0 ) { + // draw the shade + if (this.clusterSize > 1) { + var lineWidth = ((this.clusterSize > 1) ? 10 : 0.0); + lineWidth *= this.networkScaleInv; + lineWidth = Math.min(0.2 * this.width,lineWidth); - /** - * simple addEventListener wrapper - * @method on - * @param {HTMLElement} element - * @param {String} type - * @param {Function} handler - */ - on: function on(element, type, handler) { - element.addEventListener(type, handler, false); - }, + ctx.globalAlpha = 0.5; + ctx.drawImage(this.imageObj, this.left - lineWidth, this.top - lineWidth, this.width + 2*lineWidth, this.height + 2*lineWidth); + } - /** - * simple removeEventListener wrapper - * @method off - * @param {HTMLElement} element - * @param {String} type - * @param {Function} handler - */ - off: function off(element, type, handler) { - element.removeEventListener(type, handler, false); - }, + // draw the image + ctx.globalAlpha = 1.0; + ctx.drawImage(this.imageObj, this.left, this.top, this.width, this.height); + yLabel = this.y + this.height / 2; + } + else { + // image still loading... just draw the label for now + yLabel = this.y; + } - /** - * forEach over arrays and objects - * @method each - * @param {Object|Array} obj - * @param {Function} iterator - * @param {any} iterator.item - * @param {Number} iterator.index - * @param {Object|Array} iterator.obj the source object - * @param {Object} context value to use as `this` in the iterator - */ - each: function each(obj, iterator, context) { - var i, len; + this._label(ctx, this.label, this.x, yLabel, undefined, "top"); + }; - // native forEach on arrays - if('forEach' in obj) { - obj.forEach(iterator, context); - // arrays - } else if(obj.length !== undefined) { - for(i = 0, len = obj.length; i < len; i++) { - if(iterator.call(context, obj[i], i, obj) === false) { - return; - } - } - // objects - } else { - for(i in obj) { - if(obj.hasOwnProperty(i) && - iterator.call(context, obj[i], i, obj) === false) { - return; - } - } - } - }, - /** - * find if a string contains the string using indexOf - * @method inStr - * @param {String} src - * @param {String} find - * @return {Boolean} found - */ - inStr: function inStr(src, find) { - return src.indexOf(find) > -1; - }, + Node.prototype._resizeBox = function (ctx) { + if (!this.width) { + var margin = 5; + var textSize = this.getTextSize(ctx); + this.width = textSize.width + 2 * margin; + this.height = textSize.height + 2 * margin; - /** - * find if a array contains the object using indexOf or a simple polyfill - * @method inArray - * @param {String} src - * @param {String} find - * @return {Boolean|Number} false when not found, or the index - */ - inArray: function inArray(src, find) { - if(src.indexOf) { - var index = src.indexOf(find); - return (index === -1) ? false : index; - } else { - for(var i = 0, len = src.length; i < len; i++) { - if(src[i] === find) { - return i; - } - } - return false; - } - }, + this.width += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * 0.5 * this.clusterSizeWidthFactor; + this.height += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * 0.5 * this.clusterSizeHeightFactor; + this.growthIndicator = this.width - (textSize.width + 2 * margin); + // this.options.radius+= Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * 0.5 * this.clusterSizeRadiusFactor; - /** - * convert an array-like object (`arguments`, `touchlist`) to an array - * @method toArray - * @param {Object} obj - * @return {Array} - */ - toArray: function toArray(obj) { - return Array.prototype.slice.call(obj, 0); - }, + } + }; - /** - * find if a node is in the given parent - * @method hasParent - * @param {HTMLElement} node - * @param {HTMLElement} parent - * @return {Boolean} found - */ - hasParent: function hasParent(node, parent) { - while(node) { - if(node == parent) { - return true; - } - node = node.parentNode; - } - return false; - }, + Node.prototype._drawBox = function (ctx) { + this._resizeBox(ctx); - /** - * get the center of all the touches - * @method getCenter - * @param {Array} touches - * @return {Object} center contains `pageX`, `pageY`, `clientX` and `clientY` properties - */ - getCenter: function getCenter(touches) { - var pageX = [], - pageY = [], - clientX = [], - clientY = [], - min = Math.min, - max = Math.max; + this.left = this.x - this.width / 2; + this.top = this.y - this.height / 2; - // no need to loop when only one touch - if(touches.length === 1) { - return { - pageX: touches[0].pageX, - pageY: touches[0].pageY, - clientX: touches[0].clientX, - clientY: touches[0].clientY - }; - } + var clusterLineWidth = 2.5; + var borderWidth = this.options.borderWidth; + var selectionLineWidth = this.options.borderWidthSelected || 2 * this.options.borderWidth; - Utils.each(touches, function(touch) { - pageX.push(touch.pageX); - pageY.push(touch.pageY); - clientX.push(touch.clientX); - clientY.push(touch.clientY); - }); + ctx.strokeStyle = this.selected ? this.options.color.highlight.border : this.hover ? this.options.color.hover.border : this.options.color.border; - return { - pageX: (min.apply(Math, pageX) + max.apply(Math, pageX)) / 2, - pageY: (min.apply(Math, pageY) + max.apply(Math, pageY)) / 2, - clientX: (min.apply(Math, clientX) + max.apply(Math, clientX)) / 2, - clientY: (min.apply(Math, clientY) + max.apply(Math, clientY)) / 2 - }; - }, + // draw the outer border + if (this.clusterSize > 1) { + ctx.lineWidth = (this.selected ? selectionLineWidth : borderWidth) + ((this.clusterSize > 1) ? clusterLineWidth : 0.0); + ctx.lineWidth *= this.networkScaleInv; + ctx.lineWidth = Math.min(this.width,ctx.lineWidth); - /** - * calculate the velocity between two points. unit is in px per ms. - * @method getVelocity - * @param {Number} deltaTime - * @param {Number} deltaX - * @param {Number} deltaY - * @return {Object} velocity `x` and `y` - */ - getVelocity: function getVelocity(deltaTime, deltaX, deltaY) { - return { - x: Math.abs(deltaX / deltaTime) || 0, - y: Math.abs(deltaY / deltaTime) || 0 - }; - }, + ctx.roundRect(this.left-2*ctx.lineWidth, this.top-2*ctx.lineWidth, this.width+4*ctx.lineWidth, this.height+4*ctx.lineWidth, this.options.radius); + ctx.stroke(); + } + ctx.lineWidth = (this.selected ? selectionLineWidth : borderWidth) + ((this.clusterSize > 1) ? clusterLineWidth : 0.0); + ctx.lineWidth *= this.networkScaleInv; + ctx.lineWidth = Math.min(this.width,ctx.lineWidth); - /** - * calculate the angle between two coordinates - * @method getAngle - * @param {Touch} touch1 - * @param {Touch} touch2 - * @return {Number} angle - */ - getAngle: function getAngle(touch1, touch2) { - var x = touch2.clientX - touch1.clientX, - y = touch2.clientY - touch1.clientY; + ctx.fillStyle = this.selected ? this.options.color.highlight.background : this.options.color.background; - return Math.atan2(y, x) * 180 / Math.PI; - }, + ctx.roundRect(this.left, this.top, this.width, this.height, this.options.radius); + ctx.fill(); + ctx.stroke(); - /** - * do a small comparision to get the direction between two touches. - * @method getDirection - * @param {Touch} touch1 - * @param {Touch} touch2 - * @return {String} direction matches `DIRECTION_LEFT|RIGHT|UP|DOWN` - */ - getDirection: function getDirection(touch1, touch2) { - var x = Math.abs(touch1.clientX - touch2.clientX), - y = Math.abs(touch1.clientY - touch2.clientY); + this._label(ctx, this.label, this.x, this.y); + }; - if(x >= y) { - return touch1.clientX - touch2.clientX > 0 ? DIRECTION_LEFT : DIRECTION_RIGHT; - } - return touch1.clientY - touch2.clientY > 0 ? DIRECTION_UP : DIRECTION_DOWN; - }, - /** - * calculate the distance between two touches - * @method getDistance - * @param {Touch}touch1 - * @param {Touch} touch2 - * @return {Number} distance - */ - getDistance: function getDistance(touch1, touch2) { - var x = touch2.clientX - touch1.clientX, - y = touch2.clientY - touch1.clientY; + Node.prototype._resizeDatabase = function (ctx) { + if (!this.width) { + var margin = 5; + var textSize = this.getTextSize(ctx); + var size = textSize.width + 2 * margin; + this.width = size; + this.height = size; - return Math.sqrt((x * x) + (y * y)); - }, + // scaling used for clustering + this.width += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeWidthFactor; + this.height += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeHeightFactor; + this.options.radius+= Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeRadiusFactor; + this.growthIndicator = this.width - size; + } + }; - /** - * calculate the scale factor between two touchLists - * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out - * @method getScale - * @param {Array} start array of touches - * @param {Array} end array of touches - * @return {Number} scale - */ - getScale: function getScale(start, end) { - // need two fingers... - if(start.length >= 2 && end.length >= 2) { - return this.getDistance(end[0], end[1]) / this.getDistance(start[0], start[1]); - } - return 1; - }, + Node.prototype._drawDatabase = function (ctx) { + this._resizeDatabase(ctx); + this.left = this.x - this.width / 2; + this.top = this.y - this.height / 2; - /** - * calculate the rotation degrees between two touchLists - * @method getRotation - * @param {Array} start array of touches - * @param {Array} end array of touches - * @return {Number} rotation - */ - getRotation: function getRotation(start, end) { - // need two fingers - if(start.length >= 2 && end.length >= 2) { - return this.getAngle(end[1], end[0]) - this.getAngle(start[1], start[0]); - } - return 0; - }, + var clusterLineWidth = 2.5; + var borderWidth = this.options.borderWidth; + var selectionLineWidth = this.options.borderWidthSelected || 2 * this.options.borderWidth; + + ctx.strokeStyle = this.selected ? this.options.color.highlight.border : this.hover ? this.options.color.hover.border : this.options.color.border; + + // draw the outer border + if (this.clusterSize > 1) { + ctx.lineWidth = (this.selected ? selectionLineWidth : borderWidth) + ((this.clusterSize > 1) ? clusterLineWidth : 0.0); + ctx.lineWidth *= this.networkScaleInv; + ctx.lineWidth = Math.min(this.width,ctx.lineWidth); + + ctx.database(this.x - this.width/2 - 2*ctx.lineWidth, this.y - this.height*0.5 - 2*ctx.lineWidth, this.width + 4*ctx.lineWidth, this.height + 4*ctx.lineWidth); + ctx.stroke(); + } + ctx.lineWidth = (this.selected ? selectionLineWidth : borderWidth) + ((this.clusterSize > 1) ? clusterLineWidth : 0.0); + ctx.lineWidth *= this.networkScaleInv; + ctx.lineWidth = Math.min(this.width,ctx.lineWidth); - /** - * find out if the direction is vertical * - * @method isVertical - * @param {String} direction matches `DIRECTION_UP|DOWN` - * @return {Boolean} is_vertical - */ - isVertical: function isVertical(direction) { - return direction == DIRECTION_UP || direction == DIRECTION_DOWN; - }, + ctx.fillStyle = this.selected ? this.options.color.highlight.background : this.hover ? this.options.color.hover.background : this.options.color.background; + ctx.database(this.x - this.width/2, this.y - this.height*0.5, this.width, this.height); + ctx.fill(); + ctx.stroke(); - /** - * set css properties with their prefixes - * @param {HTMLElement} element - * @param {String} prop - * @param {String} value - * @param {Boolean} [toggle=true] - * @return {Boolean} - */ - setPrefixedCss: function setPrefixedCss(element, prop, value, toggle) { - var prefixes = ['', 'Webkit', 'Moz', 'O', 'ms']; - prop = Utils.toCamelCase(prop); + this._label(ctx, this.label, this.x, this.y); + }; - for(var i = 0; i < prefixes.length; i++) { - var p = prop; - // prefixes - if(prefixes[i]) { - p = prefixes[i] + p.slice(0, 1).toUpperCase() + p.slice(1); - } - // test the style - if(p in element.style) { - element.style[p] = (toggle == null || toggle) && value || ''; - break; - } - } - }, + Node.prototype._resizeCircle = function (ctx) { + if (!this.width) { + var margin = 5; + var textSize = this.getTextSize(ctx); + var diameter = Math.max(textSize.width, textSize.height) + 2 * margin; + this.options.radius = diameter / 2; - /** - * toggle browser default behavior by setting css properties. - * `userSelect='none'` also sets `element.onselectstart` to false - * `userDrag='none'` also sets `element.ondragstart` to false - * - * @method toggleBehavior - * @param {HtmlElement} element - * @param {Object} props - * @param {Boolean} [toggle=true] - */ - toggleBehavior: function toggleBehavior(element, props, toggle) { - if(!props || !element || !element.style) { - return; - } + this.width = diameter; + this.height = diameter; - // set the css properties - Utils.each(props, function(value, prop) { - Utils.setPrefixedCss(element, prop, value, toggle); - }); + // scaling used for clustering + // this.width += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * 0.5 * this.clusterSizeWidthFactor; + // this.height += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * 0.5 * this.clusterSizeHeightFactor; + this.options.radius += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * 0.5 * this.clusterSizeRadiusFactor; + this.growthIndicator = this.options.radius- 0.5*diameter; + } + }; - var falseFn = toggle && function() { - return false; - }; + Node.prototype._drawCircle = function (ctx) { + this._resizeCircle(ctx); + this.left = this.x - this.width / 2; + this.top = this.y - this.height / 2; - // also the disable onselectstart - if(props.userSelect == 'none') { - element.onselectstart = falseFn; - } - // and disable ondragstart - if(props.userDrag == 'none') { - element.ondragstart = falseFn; - } - }, + var clusterLineWidth = 2.5; + var borderWidth = this.options.borderWidth; + var selectionLineWidth = this.options.borderWidthSelected || 2 * this.options.borderWidth; - /** - * convert a string with underscores to camelCase - * so prevent_default becomes preventDefault - * @param {String} str - * @return {String} camelCaseStr - */ - toCamelCase: function toCamelCase(str) { - return str.replace(/[_-]([a-z])/g, function(s) { - return s[1].toUpperCase(); - }); - } - }; + ctx.strokeStyle = this.selected ? this.options.color.highlight.border : this.hover ? this.options.color.hover.border : this.options.color.border; + // draw the outer border + if (this.clusterSize > 1) { + ctx.lineWidth = (this.selected ? selectionLineWidth : borderWidth) + ((this.clusterSize > 1) ? clusterLineWidth : 0.0); + ctx.lineWidth *= this.networkScaleInv; + ctx.lineWidth = Math.min(this.width,ctx.lineWidth); - /** - * @module hammer - */ - /** - * @class Event - * @static - */ - var Event = Hammer.event = { - /** - * when touch events have been fired, this is true - * this is used to stop mouse events - * @property prevent_mouseevents - * @private - * @type {Boolean} - */ - preventMouseEvents: false, + ctx.circle(this.x, this.y, this.options.radius+2*ctx.lineWidth); + ctx.stroke(); + } + ctx.lineWidth = (this.selected ? selectionLineWidth : borderWidth) + ((this.clusterSize > 1) ? clusterLineWidth : 0.0); + ctx.lineWidth *= this.networkScaleInv; + ctx.lineWidth = Math.min(this.width,ctx.lineWidth); - /** - * if EVENT_START has been fired - * @property started - * @private - * @type {Boolean} - */ - started: false, + ctx.fillStyle = this.selected ? this.options.color.highlight.background : this.hover ? this.options.color.hover.background : this.options.color.background; + ctx.circle(this.x, this.y, this.options.radius); + ctx.fill(); + ctx.stroke(); - /** - * when the mouse is hold down, this is true - * @property should_detect - * @private - * @type {Boolean} - */ - shouldDetect: false, + this._label(ctx, this.label, this.x, this.y); + }; - /** - * simple event binder with a hook and support for multiple types - * @method on - * @param {HTMLElement} element - * @param {String} type - * @param {Function} handler - * @param {Function} [hook] - * @param {Object} hook.type - */ - on: function on(element, type, handler, hook) { - var types = type.split(' '); - Utils.each(types, function(type) { - Utils.on(element, type, handler); - hook && hook(type); - }); - }, + Node.prototype._resizeEllipse = function (ctx) { + if (!this.width) { + var textSize = this.getTextSize(ctx); - /** - * simple event unbinder with a hook and support for multiple types - * @method off - * @param {HTMLElement} element - * @param {String} type - * @param {Function} handler - * @param {Function} [hook] - * @param {Object} hook.type - */ - off: function off(element, type, handler, hook) { - var types = type.split(' '); - Utils.each(types, function(type) { - Utils.off(element, type, handler); - hook && hook(type); - }); - }, + this.width = textSize.width * 1.5; + this.height = textSize.height * 2; + if (this.width < this.height) { + this.width = this.height; + } + var defaultSize = this.width; - /** - * the core touch event handler. - * this finds out if we should to detect gestures - * @method onTouch - * @param {HTMLElement} element - * @param {String} eventType matches `EVENT_START|MOVE|END` - * @param {Function} handler - * @return onTouchHandler {Function} the core event handler - */ - onTouch: function onTouch(element, eventType, handler) { - var self = this; + // scaling used for clustering + this.width += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeWidthFactor; + this.height += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeHeightFactor; + this.options.radius += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeRadiusFactor; + this.growthIndicator = this.width - defaultSize; + } + }; - var onTouchHandler = function onTouchHandler(ev) { - var srcType = ev.type.toLowerCase(), - isPointer = Hammer.HAS_POINTEREVENTS, - isMouse = Utils.inStr(srcType, 'mouse'), - triggerType; + Node.prototype._drawEllipse = function (ctx) { + this._resizeEllipse(ctx); + this.left = this.x - this.width / 2; + this.top = this.y - this.height / 2; - // if we are in a mouseevent, but there has been a touchevent triggered in this session - // we want to do nothing. simply break out of the event. - if(isMouse && self.preventMouseEvents) { - return; + var clusterLineWidth = 2.5; + var borderWidth = this.options.borderWidth; + var selectionLineWidth = this.options.borderWidthSelected || 2 * this.options.borderWidth; - // mousebutton must be down - } else if(isMouse && eventType == EVENT_START && ev.button === 0) { - self.preventMouseEvents = false; - self.shouldDetect = true; - } else if(isPointer && eventType == EVENT_START) { - self.shouldDetect = (ev.buttons === 1 || PointerEvent.matchType(POINTER_TOUCH, ev)); - // just a valid start event, but no mouse - } else if(!isMouse && eventType == EVENT_START) { - self.preventMouseEvents = true; - self.shouldDetect = true; - } + ctx.strokeStyle = this.selected ? this.options.color.highlight.border : this.hover ? this.options.color.hover.border : this.options.color.border; - // update the pointer event before entering the detection - if(isPointer && eventType != EVENT_END) { - PointerEvent.updatePointer(eventType, ev); - } + // draw the outer border + if (this.clusterSize > 1) { + ctx.lineWidth = (this.selected ? selectionLineWidth : borderWidth) + ((this.clusterSize > 1) ? clusterLineWidth : 0.0); + ctx.lineWidth *= this.networkScaleInv; + ctx.lineWidth = Math.min(this.width,ctx.lineWidth); - // we are in a touch/down state, so allowed detection of gestures - if(self.shouldDetect) { - triggerType = self.doDetect.call(self, ev, eventType, element, handler); - } + ctx.ellipse(this.left-2*ctx.lineWidth, this.top-2*ctx.lineWidth, this.width+4*ctx.lineWidth, this.height+4*ctx.lineWidth); + ctx.stroke(); + } + ctx.lineWidth = (this.selected ? selectionLineWidth : borderWidth) + ((this.clusterSize > 1) ? clusterLineWidth : 0.0); + ctx.lineWidth *= this.networkScaleInv; + ctx.lineWidth = Math.min(this.width,ctx.lineWidth); - // ...and we are done with the detection - // so reset everything to start each detection totally fresh - if(triggerType == EVENT_END) { - self.preventMouseEvents = false; - self.shouldDetect = false; - PointerEvent.reset(); - // update the pointerevent object after the detection - } + ctx.fillStyle = this.selected ? this.options.color.highlight.background : this.hover ? this.options.color.hover.background : this.options.color.background; - if(isPointer && eventType == EVENT_END) { - PointerEvent.updatePointer(eventType, ev); - } - }; + ctx.ellipse(this.left, this.top, this.width, this.height); + ctx.fill(); + ctx.stroke(); + this._label(ctx, this.label, this.x, this.y); + }; - this.on(element, EVENT_TYPES[eventType], onTouchHandler); - return onTouchHandler; - }, + Node.prototype._drawDot = function (ctx) { + this._drawShape(ctx, 'circle'); + }; - /** - * the core detection method - * this finds out what hammer-touch-events to trigger - * @method doDetect - * @param {Object} ev - * @param {String} eventType matches `EVENT_START|MOVE|END` - * @param {HTMLElement} element - * @param {Function} handler - * @return {String} triggerType matches `EVENT_START|MOVE|END` - */ - doDetect: function doDetect(ev, eventType, element, handler) { - var touchList = this.getTouchList(ev, eventType); - var touchListLength = touchList.length; - var triggerType = eventType; - var triggerChange = touchList.trigger; // used by fakeMultitouch plugin - var changedLength = touchListLength; + Node.prototype._drawTriangle = function (ctx) { + this._drawShape(ctx, 'triangle'); + }; - // at each touchstart-like event we want also want to trigger a TOUCH event... - if(eventType == EVENT_START) { - triggerChange = EVENT_TOUCH; - // ...the same for a touchend-like event - } else if(eventType == EVENT_END) { - triggerChange = EVENT_RELEASE; + Node.prototype._drawTriangleDown = function (ctx) { + this._drawShape(ctx, 'triangleDown'); + }; - // keep track of how many touches have been removed - changedLength = touchList.length - ((ev.changedTouches) ? ev.changedTouches.length : 1); - } + Node.prototype._drawSquare = function (ctx) { + this._drawShape(ctx, 'square'); + }; - // after there are still touches on the screen, - // we just want to trigger a MOVE event. so change the START or END to a MOVE - // but only after detection has been started, the first time we actualy want a START - if(changedLength > 0 && this.started) { - triggerType = EVENT_MOVE; - } + Node.prototype._drawStar = function (ctx) { + this._drawShape(ctx, 'star'); + }; - // detection has been started, we keep track of this, see above - this.started = true; + Node.prototype._resizeShape = function (ctx) { + if (!this.width) { + this.options.radius= this.baseRadiusValue; + var size = 2 * this.options.radius; + this.width = size; + this.height = size; - // generate some event data, some basic information - var evData = this.collectEventData(element, triggerType, touchList, ev); + // scaling used for clustering + this.width += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeWidthFactor; + this.height += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeHeightFactor; + this.options.radius+= Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * 0.5 * this.clusterSizeRadiusFactor; + this.growthIndicator = this.width - size; + } + }; - // trigger the triggerType event before the change (TOUCH, RELEASE) events - // but the END event should be at last - if(eventType != EVENT_END) { - handler.call(Detection, evData); - } + Node.prototype._drawShape = function (ctx, shape) { + this._resizeShape(ctx); - // trigger a change (TOUCH, RELEASE) event, this means the length of the touches changed - if(triggerChange) { - evData.changedLength = changedLength; - evData.eventType = triggerChange; + this.left = this.x - this.width / 2; + this.top = this.y - this.height / 2; - handler.call(Detection, evData); + var clusterLineWidth = 2.5; + var borderWidth = this.options.borderWidth; + var selectionLineWidth = this.options.borderWidthSelected || 2 * this.options.borderWidth; + var radiusMultiplier = 2; - evData.eventType = triggerType; - delete evData.changedLength; - } + // choose draw method depending on the shape + switch (shape) { + case 'dot': radiusMultiplier = 2; break; + case 'square': radiusMultiplier = 2; break; + case 'triangle': radiusMultiplier = 3; break; + case 'triangleDown': radiusMultiplier = 3; break; + case 'star': radiusMultiplier = 4; break; + } - // trigger the END event - if(triggerType == EVENT_END) { - handler.call(Detection, evData); + ctx.strokeStyle = this.selected ? this.options.color.highlight.border : this.hover ? this.options.color.hover.border : this.options.color.border; + // draw the outer border + if (this.clusterSize > 1) { + ctx.lineWidth = (this.selected ? selectionLineWidth : borderWidth) + ((this.clusterSize > 1) ? clusterLineWidth : 0.0); + ctx.lineWidth *= this.networkScaleInv; + ctx.lineWidth = Math.min(this.width,ctx.lineWidth); - // ...and we are done with the detection - // so reset everything to start each detection totally fresh - this.started = false; - } + ctx[shape](this.x, this.y, this.options.radius+ radiusMultiplier * ctx.lineWidth); + ctx.stroke(); + } + ctx.lineWidth = (this.selected ? selectionLineWidth : borderWidth) + ((this.clusterSize > 1) ? clusterLineWidth : 0.0); + ctx.lineWidth *= this.networkScaleInv; + ctx.lineWidth = Math.min(this.width,ctx.lineWidth); - return triggerType; - }, + ctx.fillStyle = this.selected ? this.options.color.highlight.background : this.hover ? this.options.color.hover.background : this.options.color.background; + ctx[shape](this.x, this.y, this.options.radius); + ctx.fill(); + ctx.stroke(); - /** - * we have different events for each device/browser - * determine what we need and set them in the EVENT_TYPES constant - * the `onTouch` method is bind to these properties. - * @method determineEventTypes - * @return {Object} events - */ - determineEventTypes: function determineEventTypes() { - var types; - if(Hammer.HAS_POINTEREVENTS) { - if(window.PointerEvent) { - types = [ - 'pointerdown', - 'pointermove', - 'pointerup pointercancel lostpointercapture' - ]; - } else { - types = [ - 'MSPointerDown', - 'MSPointerMove', - 'MSPointerUp MSPointerCancel MSLostPointerCapture' - ]; - } - } else if(Hammer.NO_MOUSEEVENTS) { - types = [ - 'touchstart', - 'touchmove', - 'touchend touchcancel' - ]; - } else { - types = [ - 'touchstart mousedown', - 'touchmove mousemove', - 'touchend touchcancel mouseup' - ]; - } + if (this.label) { + this._label(ctx, this.label, this.x, this.y + this.height / 2, undefined, 'top',true); + } + }; - EVENT_TYPES[EVENT_START] = types[0]; - EVENT_TYPES[EVENT_MOVE] = types[1]; - EVENT_TYPES[EVENT_END] = types[2]; - return EVENT_TYPES; - }, + Node.prototype._resizeText = function (ctx) { + if (!this.width) { + var margin = 5; + var textSize = this.getTextSize(ctx); + this.width = textSize.width + 2 * margin; + this.height = textSize.height + 2 * margin; - /** - * create touchList depending on the event - * @method getTouchList - * @param {Object} ev - * @param {String} eventType - * @return {Array} touches - */ - getTouchList: function getTouchList(ev, eventType) { - // get the fake pointerEvent touchlist - if(Hammer.HAS_POINTEREVENTS) { - return PointerEvent.getTouchList(); - } + // scaling used for clustering + this.width += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeWidthFactor; + this.height += Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeHeightFactor; + this.options.radius+= Math.min(this.clusterSize - 1, this.maxNodeSizeIncrements) * this.clusterSizeRadiusFactor; + this.growthIndicator = this.width - (textSize.width + 2 * margin); + } + }; - // get the touchlist - if(ev.touches) { - if(eventType == EVENT_MOVE) { - return ev.touches; - } + Node.prototype._drawText = function (ctx) { + this._resizeText(ctx); + this.left = this.x - this.width / 2; + this.top = this.y - this.height / 2; - var identifiers = []; - var concat = [].concat(Utils.toArray(ev.touches), Utils.toArray(ev.changedTouches)); - var touchList = []; + this._label(ctx, this.label, this.x, this.y); + }; - Utils.each(concat, function(touch) { - if(Utils.inArray(identifiers, touch.identifier) === false) { - touchList.push(touch); - } - identifiers.push(touch.identifier); - }); - return touchList; - } + Node.prototype._label = function (ctx, text, x, y, align, baseline, labelUnderNode) { + if (text && Number(this.options.fontSize) * this.networkScale > this.fontDrawThreshold) { + ctx.font = (this.selected ? "bold " : "") + this.options.fontSize + "px " + this.options.fontFace; + + var lines = text.split('\n'); + var lineCount = lines.length; + var fontSize = (Number(this.options.fontSize) + 4); // TODO: why is this +4 ? + var yLine = y + (1 - lineCount) / 2 * fontSize; + if (labelUnderNode == true) { + yLine = y + (1 - lineCount) / (2 * fontSize); + } + + // font fill from edges now for nodes! + var width = ctx.measureText(lines[0]).width; + for (var i = 1; i < lineCount; i++) { + var lineWidth = ctx.measureText(lines[i]).width; + width = lineWidth > width ? lineWidth : width; + } + var height = this.options.fontSize * lineCount; + var left = x - width / 2; + var top = y - height / 2; + if (baseline == "top") { + top += 0.5 * fontSize; + } + this.labelDimensions = {top:top,left:left,width:width,height:height,yLine:yLine}; - // make fake touchList from mouse position - ev.identifier = 1; - return [ev]; - }, + // create the fontfill background + if (this.options.fontFill !== undefined && this.options.fontFill !== null && this.options.fontFill !== "none") { + ctx.fillStyle = this.options.fontFill; + ctx.fillRect(left, top, width, height); + } - /** - * collect basic event data - * @method collectEventData - * @param {HTMLElement} element - * @param {String} eventType matches `EVENT_START|MOVE|END` - * @param {Array} touches - * @param {Object} ev - * @return {Object} ev - */ - collectEventData: function collectEventData(element, eventType, touches, ev) { - // find out pointerType - var pointerType = POINTER_TOUCH; - if(Utils.inStr(ev.type, 'mouse') || PointerEvent.matchType(POINTER_MOUSE, ev)) { - pointerType = POINTER_MOUSE; - } else if(PointerEvent.matchType(POINTER_PEN, ev)) { - pointerType = POINTER_PEN; - } + // draw text + ctx.fillStyle = this.options.fontColor || "black"; + ctx.textAlign = align || "center"; + ctx.textBaseline = baseline || "middle"; + for (var i = 0; i < lineCount; i++) { + ctx.fillText(lines[i], x, yLine); + yLine += fontSize; + } + } + }; - return { - center: Utils.getCenter(touches), - timeStamp: Date.now(), - target: ev.target, - touches: touches, - eventType: eventType, - pointerType: pointerType, - srcEvent: ev, - /** - * prevent the browser default actions - * mostly used to disable scrolling of the browser - */ - preventDefault: function() { - var srcEvent = this.srcEvent; - srcEvent.preventManipulation && srcEvent.preventManipulation(); - srcEvent.preventDefault && srcEvent.preventDefault(); - }, + Node.prototype.getTextSize = function(ctx) { + if (this.label !== undefined) { + ctx.font = (this.selected ? "bold " : "") + this.options.fontSize + "px " + this.options.fontFace; - /** - * stop bubbling the event up to its parents - */ - stopPropagation: function() { - this.srcEvent.stopPropagation(); - }, + var lines = this.label.split('\n'), + height = (Number(this.options.fontSize) + 4) * lines.length, + width = 0; - /** - * immediately stop gesture detection - * might be useful after a swipe was detected - * @return {*} - */ - stopDetect: function() { - return Detection.stopDetect(); - } - }; + for (var i = 0, iMax = lines.length; i < iMax; i++) { + width = Math.max(width, ctx.measureText(lines[i]).width); } - }; + return {"width": width, "height": height}; + } + else { + return {"width": 0, "height": 0}; + } + }; /** - * @module hammer + * this is used to determine if a node is visible at all. this is used to determine when it needs to be drawn. + * there is a safety margin of 0.3 * width; * - * @class PointerEvent - * @static + * @returns {boolean} */ - var PointerEvent = Hammer.PointerEvent = { - /** - * holds all pointers, by `identifier` - * @property pointers - * @type {Object} - */ - pointers: {}, + Node.prototype.inArea = function() { + if (this.width !== undefined) { + return (this.x + this.width *this.networkScaleInv >= this.canvasTopLeft.x && + this.x - this.width *this.networkScaleInv < this.canvasBottomRight.x && + this.y + this.height*this.networkScaleInv >= this.canvasTopLeft.y && + this.y - this.height*this.networkScaleInv < this.canvasBottomRight.y); + } + else { + return true; + } + }; - /** - * get the pointers as an array - * @method getTouchList - * @return {Array} touchlist - */ - getTouchList: function getTouchList() { - var touchlist = []; - // we can use forEach since pointerEvents only is in IE10 - Utils.each(this.pointers, function(pointer) { - touchlist.push(pointer); - }); - return touchlist; - }, + /** + * checks if the core of the node is in the display area, this is used for opening clusters around zoom + * @returns {boolean} + */ + Node.prototype.inView = function() { + return (this.x >= this.canvasTopLeft.x && + this.x < this.canvasBottomRight.x && + this.y >= this.canvasTopLeft.y && + this.y < this.canvasBottomRight.y); + }; - /** - * update the position of a pointer - * @method updatePointer - * @param {String} eventType matches `EVENT_START|MOVE|END` - * @param {Object} pointerEvent - */ - updatePointer: function updatePointer(eventType, pointerEvent) { - if(eventType == EVENT_END || (eventType != EVENT_END && pointerEvent.buttons !== 1)) { - delete this.pointers[pointerEvent.pointerId]; - } else { - pointerEvent.identifier = pointerEvent.pointerId; - this.pointers[pointerEvent.pointerId] = pointerEvent; - } - }, + /** + * This allows the zoom level of the network to influence the rendering + * We store the inverted scale and the coordinates of the top left, and bottom right points of the canvas + * + * @param scale + * @param canvasTopLeft + * @param canvasBottomRight + */ + Node.prototype.setScaleAndPos = function(scale,canvasTopLeft,canvasBottomRight) { + this.networkScaleInv = 1.0/scale; + this.networkScale = scale; + this.canvasTopLeft = canvasTopLeft; + this.canvasBottomRight = canvasBottomRight; + }; - /** - * check if ev matches pointertype - * @method matchType - * @param {String} pointerType matches `POINTER_MOUSE|TOUCH|PEN` - * @param {PointerEvent} ev - */ - matchType: function matchType(pointerType, ev) { - if(!ev.pointerType) { - return false; - } - var pt = ev.pointerType, - types = {}; + /** + * This allows the zoom level of the network to influence the rendering + * + * @param scale + */ + Node.prototype.setScale = function(scale) { + this.networkScaleInv = 1.0/scale; + this.networkScale = scale; + }; - types[POINTER_MOUSE] = (pt === (ev.MSPOINTER_TYPE_MOUSE || POINTER_MOUSE)); - types[POINTER_TOUCH] = (pt === (ev.MSPOINTER_TYPE_TOUCH || POINTER_TOUCH)); - types[POINTER_PEN] = (pt === (ev.MSPOINTER_TYPE_PEN || POINTER_PEN)); - return types[pointerType]; - }, - /** - * reset the stored pointers - * @method reset - */ - reset: function resetList() { - this.pointers = {}; - } + + /** + * set the velocity at 0. Is called when this node is contained in another during clustering + */ + Node.prototype.clearVelocity = function() { + this.vx = 0; + this.vy = 0; }; /** - * @module hammer + * Basic preservation of (kinectic) energy * - * @class Detection - * @static + * @param massBeforeClustering */ - var Detection = Hammer.detection = { - // contains all registred Hammer.gestures in the correct order - gestures: [], - - // data of the current Hammer.gesture detection session - current: null, - - // the previous Hammer.gesture session data - // is a full clone of the previous gesture.current object - previous: null, - - // when this becomes true, no gestures are fired - stopped: false, + Node.prototype.updateVelocity = function(massBeforeClustering) { + var energyBefore = this.vx * this.vx * massBeforeClustering; + //this.vx = (this.vx < 0) ? -Math.sqrt(energyBefore/this.options.mass) : Math.sqrt(energyBefore/this.options.mass); + this.vx = Math.sqrt(energyBefore/this.options.mass); + energyBefore = this.vy * this.vy * massBeforeClustering; + //this.vy = (this.vy < 0) ? -Math.sqrt(energyBefore/this.options.mass) : Math.sqrt(energyBefore/this.options.mass); + this.vy = Math.sqrt(energyBefore/this.options.mass); + }; - /** - * start Hammer.gesture detection - * @method startDetect - * @param {Hammer.Instance} inst - * @param {Object} eventData - */ - startDetect: function startDetect(inst, eventData) { - // already busy with a Hammer.gesture detection on an element - if(this.current) { - return; - } + module.exports = Node; - this.stopped = false; - // holds current session - this.current = { - inst: inst, // reference to HammerInstance we're working for - startEvent: Utils.extend({}, eventData), // start eventData for distances, timing etc - lastEvent: false, // last eventData - lastCalcEvent: false, // last eventData for calculations. - futureCalcEvent: false, // last eventData for calculations. - lastCalcData: {}, // last lastCalcData - name: '' // current gesture we're in/detected, can be 'tap', 'hold' etc - }; +/***/ }, +/* 57 */ +/***/ function(module, exports, __webpack_require__) { - this.detect(eventData); - }, + var util = __webpack_require__(1); + var Node = __webpack_require__(56); - /** - * Hammer.gesture detection - * @method detect - * @param {Object} eventData - * @return {any} - */ - detect: function detect(eventData) { - if(!this.current || this.stopped) { - return; - } + /** + * @class Edge + * + * A edge connects two nodes + * @param {Object} properties Object with properties. Must contain + * At least properties from and to. + * Available properties: from (number), + * to (number), label (string, color (string), + * width (number), style (string), + * length (number), title (string) + * @param {Network} network A Network object, used to find and edge to + * nodes. + * @param {Object} constants An object with default values for + * example for the color + */ + function Edge (properties, network, networkConstants) { + if (!network) { + throw "No network provided"; + } + var fields = ['edges','physics']; + var constants = util.selectiveBridgeObject(fields,networkConstants); + this.options = constants.edges; + this.physics = constants.physics; + this.options['smoothCurves'] = networkConstants['smoothCurves']; - // extend event data with calculations about scale, distance etc - eventData = this.extendEventData(eventData); - // hammer instance and instance options - var inst = this.current.inst, - instOptions = inst.options; + this.network = network; - // call Hammer.gesture handlers - Utils.each(this.gestures, function triggerGesture(gesture) { - // only when the instance options have enabled this gesture - if(!this.stopped && inst.enabled && instOptions[gesture.name]) { - gesture.handler.call(gesture, eventData, inst); - } - }, this); + // initialize variables + this.id = undefined; + this.fromId = undefined; + this.toId = undefined; + this.title = undefined; + this.widthSelected = this.options.width * this.options.widthSelectionMultiplier; + this.value = undefined; + this.selected = false; + this.hover = false; + this.labelDimensions = {top:0,left:0,width:0,height:0,yLine:0}; // could be cached + this.dirtyLabel = true; - // store as previous event event - if(this.current) { - this.current.lastEvent = eventData; - } + this.from = null; // a node + this.to = null; // a node + this.via = null; // a temp node - if(eventData.eventType == EVENT_END) { - this.stopDetect(); - } + this.fromBackup = null; // used to clean up after reconnect + this.toBackup = null;; // used to clean up after reconnect - return eventData; - }, + // we use this to be able to reconnect the edge to a cluster if its node is put into a cluster + // by storing the original information we can revert to the original connection when the cluser is opened. + this.originalFromId = []; + this.originalToId = []; - /** - * clear the Hammer.gesture vars - * this is called on endDetect, but can also be used when a final Hammer.gesture has been detected - * to stop other Hammer.gestures from being fired - * @method stopDetect - */ - stopDetect: function stopDetect() { - // clone current data to the store as the previous gesture - // used for the double tap gesture, since this is an other gesture detect session - this.previous = Utils.extend({}, this.current); + this.connected = false; - // reset the current - this.current = null; - this.stopped = true; - }, + this.widthFixed = false; + this.lengthFixed = false; - /** - * calculate velocity, angle and direction - * @method getVelocityData - * @param {Object} ev - * @param {Object} center - * @param {Number} deltaTime - * @param {Number} deltaX - * @param {Number} deltaY - */ - getCalculatedData: function getCalculatedData(ev, center, deltaTime, deltaX, deltaY) { - var cur = this.current, - recalc = false, - calcEv = cur.lastCalcEvent, - calcData = cur.lastCalcData; + this.setProperties(properties); - if(calcEv && ev.timeStamp - calcEv.timeStamp > Hammer.CALCULATE_INTERVAL) { - center = calcEv.center; - deltaTime = ev.timeStamp - calcEv.timeStamp; - deltaX = ev.center.clientX - calcEv.center.clientX; - deltaY = ev.center.clientY - calcEv.center.clientY; - recalc = true; - } + this.controlNodesEnabled = false; + this.controlNodes = {from:null, to:null, positions:{}}; + this.connectedNode = null; + } - if(ev.eventType == EVENT_TOUCH || ev.eventType == EVENT_RELEASE) { - cur.futureCalcEvent = ev; - } + /** + * Set or overwrite properties for the edge + * @param {Object} properties an object with properties + * @param {Object} constants and object with default, global properties + */ + Edge.prototype.setProperties = function(properties) { + if (!properties) { + return; + } - if(!cur.lastCalcEvent || recalc) { - calcData.velocity = Utils.getVelocity(deltaTime, deltaX, deltaY); - calcData.angle = Utils.getAngle(center, ev.center); - calcData.direction = Utils.getDirection(center, ev.center); + var fields = ['style','fontSize','fontFace','fontColor','fontFill','width', + 'widthSelectionMultiplier','hoverWidth','arrowScaleFactor','dash','inheritColor' + ]; + util.selectiveDeepExtend(fields, this.options, properties); - cur.lastCalcEvent = cur.futureCalcEvent || ev; - cur.futureCalcEvent = ev; - } + if (properties.from !== undefined) {this.fromId = properties.from;} + if (properties.to !== undefined) {this.toId = properties.to;} - ev.velocityX = calcData.velocity.x; - ev.velocityY = calcData.velocity.y; - ev.interimAngle = calcData.angle; - ev.interimDirection = calcData.direction; - }, + if (properties.id !== undefined) {this.id = properties.id;} + if (properties.label !== undefined) {this.label = properties.label; this.dirtyLabel = true;} - /** - * extend eventData for Hammer.gestures - * @method extendEventData - * @param {Object} ev - * @return {Object} ev - */ - extendEventData: function extendEventData(ev) { - var cur = this.current, - startEv = cur.startEvent, - lastEv = cur.lastEvent || startEv; + if (properties.title !== undefined) {this.title = properties.title;} + if (properties.value !== undefined) {this.value = properties.value;} + if (properties.length !== undefined) {this.physics.springLength = properties.length;} - // update the start touchlist to calculate the scale/rotation - if(ev.eventType == EVENT_TOUCH || ev.eventType == EVENT_RELEASE) { - startEv.touches = []; - Utils.each(ev.touches, function(touch) { - startEv.touches.push({ - clientX: touch.clientX, - clientY: touch.clientY - }); - }); - } + if (properties.color !== undefined) { + this.options.inheritColor = false; + if (util.isString(properties.color)) { + this.options.color.color = properties.color; + this.options.color.highlight = properties.color; + } + else { + if (properties.color.color !== undefined) {this.options.color.color = properties.color.color;} + if (properties.color.highlight !== undefined) {this.options.color.highlight = properties.color.highlight;} + if (properties.color.hover !== undefined) {this.options.color.hover = properties.color.hover;} + } + } - var deltaTime = ev.timeStamp - startEv.timeStamp, - deltaX = ev.center.clientX - startEv.center.clientX, - deltaY = ev.center.clientY - startEv.center.clientY; + // A node is connected when it has a from and to node. + this.connect(); - this.getCalculatedData(ev, lastEv.center, deltaTime, deltaX, deltaY); + this.widthFixed = this.widthFixed || (properties.width !== undefined); + this.lengthFixed = this.lengthFixed || (properties.length !== undefined); - Utils.extend(ev, { - startEvent: startEv, + this.widthSelected = this.options.width* this.options.widthSelectionMultiplier; - deltaTime: deltaTime, - deltaX: deltaX, - deltaY: deltaY, + // set draw method based on style + switch (this.options.style) { + case 'line': this.draw = this._drawLine; break; + case 'arrow': this.draw = this._drawArrow; break; + case 'arrow-center': this.draw = this._drawArrowCenter; break; + case 'dash-line': this.draw = this._drawDashLine; break; + default: this.draw = this._drawLine; break; + } + }; - distance: Utils.getDistance(startEv.center, ev.center), - angle: Utils.getAngle(startEv.center, ev.center), - direction: Utils.getDirection(startEv.center, ev.center), - scale: Utils.getScale(startEv.touches, ev.touches), - rotation: Utils.getRotation(startEv.touches, ev.touches) - }); + /** + * Connect an edge to its nodes + */ + Edge.prototype.connect = function () { + this.disconnect(); - return ev; - }, + this.from = this.network.nodes[this.fromId] || null; + this.to = this.network.nodes[this.toId] || null; + this.connected = (this.from && this.to); - /** - * register new gesture - * @method register - * @param {Object} gesture object, see `gestures/` for documentation - * @return {Array} gestures - */ - register: function register(gesture) { - // add an enable gesture options if there is no given - var options = gesture.defaults || {}; - if(options[gesture.name] === undefined) { - options[gesture.name] = true; - } + if (this.connected) { + this.from.attachEdge(this); + this.to.attachEdge(this); + } + else { + if (this.from) { + this.from.detachEdge(this); + } + if (this.to) { + this.to.detachEdge(this); + } + } + }; - // extend Hammer default options with the Hammer.gesture options - Utils.extend(Hammer.defaults, options, true); + /** + * Disconnect an edge from its nodes + */ + Edge.prototype.disconnect = function () { + if (this.from) { + this.from.detachEdge(this); + this.from = null; + } + if (this.to) { + this.to.detachEdge(this); + this.to = null; + } - // set its index - gesture.index = gesture.index || 1000; + this.connected = false; + }; - // add Hammer.gesture to the list - this.gestures.push(gesture); + /** + * get the title of this edge. + * @return {string} title The title of the edge, or undefined when no title + * has been set. + */ + Edge.prototype.getTitle = function() { + return typeof this.title === "function" ? this.title() : this.title; + }; - // sort the list by index - this.gestures.sort(function(a, b) { - if(a.index < b.index) { - return -1; - } - if(a.index > b.index) { - return 1; - } - return 0; - }); - return this.gestures; - } + /** + * Retrieve the value of the edge. Can be undefined + * @return {Number} value + */ + Edge.prototype.getValue = function() { + return this.value; }; + /** + * Adjust the value range of the edge. The edge will adjust it's width + * based on its value. + * @param {Number} min + * @param {Number} max + */ + Edge.prototype.setValueRange = function(min, max) { + if (!this.widthFixed && this.value !== undefined) { + var scale = (this.options.widthMax - this.options.widthMin) / (max - min); + this.options.width= (this.value - min) * scale + this.options.widthMin; + this.widthSelected = this.options.width* this.options.widthSelectionMultiplier; + } + }; /** - * @module hammer + * Redraw a edge + * Draw this edge in the given canvas + * The 2d context of a HTML canvas can be retrieved by canvas.getContext("2d"); + * @param {CanvasRenderingContext2D} ctx */ + Edge.prototype.draw = function(ctx) { + throw "Method draw not initialized in edge"; + }; /** - * create new hammer instance - * all methods should return the instance itself, so it is chainable. - * - * @class Instance - * @constructor - * @param {HTMLElement} element - * @param {Object} [options={}] options are merged with `Hammer.defaults` - * @return {Hammer.Instance} + * Check if this object is overlapping with the provided object + * @param {Object} obj an object with parameters left, top + * @return {boolean} True if location is located on the edge */ - Hammer.Instance = function(element, options) { - var self = this; + Edge.prototype.isOverlappingWith = function(obj) { + if (this.connected) { + var distMax = 10; + var xFrom = this.from.x; + var yFrom = this.from.y; + var xTo = this.to.x; + var yTo = this.to.y; + var xObj = obj.left; + var yObj = obj.top; - // setup HammerJS window events and register all gestures - // this also sets up the default options - setup(); + var dist = this._getDistanceToEdge(xFrom, yFrom, xTo, yTo, xObj, yObj); - /** - * @property element - * @type {HTMLElement} - */ - this.element = element; + return (dist < distMax); + } + else { + return false + } + }; - /** - * @property enabled - * @type {Boolean} - * @protected - */ - this.enabled = true; + Edge.prototype._getColor = function() { + var colorObj = this.options.color; + if (this.options.inheritColor == "to") { + colorObj = { + highlight: this.to.options.color.highlight.border, + hover: this.to.options.color.hover.border, + color: this.to.options.color.border + }; + } + else if (this.options.inheritColor == "from" || this.options.inheritColor == true) { + colorObj = { + highlight: this.from.options.color.highlight.border, + hover: this.from.options.color.hover.border, + color: this.from.options.color.border + }; + } - /** - * options, merged with the defaults - * options with an _ are converted to camelCase - * @property options - * @type {Object} - */ - Utils.each(options, function(value, name) { - delete options[name]; - options[Utils.toCamelCase(name)] = value; - }); + if (this.selected == true) {return colorObj.highlight;} + else if (this.hover == true) {return colorObj.hover;} + else {return colorObj.color;} + }; - this.options = Utils.extend(Utils.extend({}, Hammer.defaults), options || {}); - // add some css to the element to prevent the browser from doing its native behavoir - if(this.options.behavior) { - Utils.toggleBehavior(this.element, this.options.behavior, true); + /** + * Redraw a edge as a line + * Draw this edge in the given canvas + * The 2d context of a HTML canvas can be retrieved by canvas.getContext("2d"); + * @param {CanvasRenderingContext2D} ctx + * @private + */ + Edge.prototype._drawLine = function(ctx) { + // set style + ctx.strokeStyle = this._getColor(); + ctx.lineWidth = this._getLineWidth(); + + if (this.from != this.to) { + // draw line + var via = this._line(ctx); + + // draw label + var point; + if (this.label) { + if (this.options.smoothCurves.enabled == true && via != null) { + var midpointX = 0.5*(0.5*(this.from.x + via.x) + 0.5*(this.to.x + via.x)); + var midpointY = 0.5*(0.5*(this.from.y + via.y) + 0.5*(this.to.y + via.y)); + point = {x:midpointX, y:midpointY}; + } + else { + point = this._pointOnLine(0.5); + } + this._label(ctx, this.label, point.x, point.y); + } + } + else { + var x, y; + var radius = this.physics.springLength / 4; + var node = this.from; + if (!node.width) { + node.resize(ctx); + } + if (node.width > node.height) { + x = node.x + node.width / 2; + y = node.y - radius; + } + else { + x = node.x + radius; + y = node.y - node.height / 2; } + this._circle(ctx, x, y, radius); + point = this._pointOnCircle(x, y, radius, 0.5); + this._label(ctx, this.label, point.x, point.y); + } + }; - /** - * event start handler on the element to start the detection - * @property eventStartHandler - * @type {Object} - */ - this.eventStartHandler = Event.onTouch(element, EVENT_START, function(ev) { - if(self.enabled && ev.eventType == EVENT_START) { - Detection.startDetect(self, ev); - } else if(ev.eventType == EVENT_TOUCH) { - Detection.detect(ev); + /** + * Get the line width of the edge. Depends on width and whether one of the + * connected nodes is selected. + * @return {Number} width + * @private + */ + Edge.prototype._getLineWidth = function() { + if (this.selected == true) { + return Math.max(Math.min(this.widthSelected, this.options.widthMax), 0.3*this.networkScaleInv); + } + else { + if (this.hover == true) { + return Math.max(Math.min(this.options.hoverWidth, this.options.widthMax), 0.3*this.networkScaleInv); + } + else { + return Math.max(this.options.width, 0.3*this.networkScaleInv); + } + } + }; + + Edge.prototype._getViaCoordinates = function () { + var xVia = null; + var yVia = null; + var factor = this.options.smoothCurves.roundness; + var type = this.options.smoothCurves.type; + + var dx = Math.abs(this.from.x - this.to.x); + var dy = Math.abs(this.from.y - this.to.y); + if (type == 'discrete' || type == 'diagonalCross') { + if (Math.abs(this.from.x - this.to.x) < Math.abs(this.from.y - this.to.y)) { + if (this.from.y > this.to.y) { + if (this.from.x < this.to.x) { + xVia = this.from.x + factor * dy; + yVia = this.from.y - factor * dy; } - }); + else if (this.from.x > this.to.x) { + xVia = this.from.x - factor * dy; + yVia = this.from.y - factor * dy; + } + } + else if (this.from.y < this.to.y) { + if (this.from.x < this.to.x) { + xVia = this.from.x + factor * dy; + yVia = this.from.y + factor * dy; + } + else if (this.from.x > this.to.x) { + xVia = this.from.x - factor * dy; + yVia = this.from.y + factor * dy; + } + } + if (type == "discrete") { + xVia = dx < factor * dy ? this.from.x : xVia; + } + } + else if (Math.abs(this.from.x - this.to.x) > Math.abs(this.from.y - this.to.y)) { + if (this.from.y > this.to.y) { + if (this.from.x < this.to.x) { + xVia = this.from.x + factor * dx; + yVia = this.from.y - factor * dx; + } + else if (this.from.x > this.to.x) { + xVia = this.from.x - factor * dx; + yVia = this.from.y - factor * dx; + } + } + else if (this.from.y < this.to.y) { + if (this.from.x < this.to.x) { + xVia = this.from.x + factor * dx; + yVia = this.from.y + factor * dx; + } + else if (this.from.x > this.to.x) { + xVia = this.from.x - factor * dx; + yVia = this.from.y + factor * dx; + } + } + if (type == "discrete") { + yVia = dy < factor * dx ? this.from.y : yVia; + } + } + } + else if (type == "straightCross") { + if (Math.abs(this.from.x - this.to.x) < Math.abs(this.from.y - this.to.y)) { // up - down + xVia = this.from.x; + if (this.from.y < this.to.y) { + yVia = this.to.y - (1-factor) * dy; + } + else { + yVia = this.to.y + (1-factor) * dy; + } + } + else if (Math.abs(this.from.x - this.to.x) > Math.abs(this.from.y - this.to.y)) { // left - right + if (this.from.x < this.to.x) { + xVia = this.to.x - (1-factor) * dx; + } + else { + xVia = this.to.x + (1-factor) * dx; + } + yVia = this.from.y; + } + } + else if (type == 'horizontal') { + if (this.from.x < this.to.x) { + xVia = this.to.x - (1-factor) * dx; + } + else { + xVia = this.to.x + (1-factor) * dx; + } + yVia = this.from.y; + } + else if (type == 'vertical') { + xVia = this.from.x; + if (this.from.y < this.to.y) { + yVia = this.to.y - (1-factor) * dy; + } + else { + yVia = this.to.y + (1-factor) * dy; + } + } + else { // continuous + if (Math.abs(this.from.x - this.to.x) < Math.abs(this.from.y - this.to.y)) { + if (this.from.y > this.to.y) { + if (this.from.x < this.to.x) { + // console.log(1) + xVia = this.from.x + factor * dy; + yVia = this.from.y - factor * dy; + xVia = this.to.x < xVia ? this.to.x : xVia; + } + else if (this.from.x > this.to.x) { + // console.log(2) + xVia = this.from.x - factor * dy; + yVia = this.from.y - factor * dy; + xVia = this.to.x > xVia ? this.to.x :xVia; + } + } + else if (this.from.y < this.to.y) { + if (this.from.x < this.to.x) { + // console.log(3) + xVia = this.from.x + factor * dy; + yVia = this.from.y + factor * dy; + xVia = this.to.x < xVia ? this.to.x : xVia; + } + else if (this.from.x > this.to.x) { + // console.log(4, this.from.x, this.to.x) + xVia = this.from.x - factor * dy; + yVia = this.from.y + factor * dy; + xVia = this.to.x > xVia ? this.to.x : xVia; + } + } + } + else if (Math.abs(this.from.x - this.to.x) > Math.abs(this.from.y - this.to.y)) { + if (this.from.y > this.to.y) { + if (this.from.x < this.to.x) { + // console.log(5) + xVia = this.from.x + factor * dx; + yVia = this.from.y - factor * dx; + yVia = this.to.y > yVia ? this.to.y : yVia; + } + else if (this.from.x > this.to.x) { + // console.log(6) + xVia = this.from.x - factor * dx; + yVia = this.from.y - factor * dx; + yVia = this.to.y > yVia ? this.to.y : yVia; + } + } + else if (this.from.y < this.to.y) { + if (this.from.x < this.to.x) { + // console.log(7) + xVia = this.from.x + factor * dx; + yVia = this.from.y + factor * dx; + yVia = this.to.y < yVia ? this.to.y : yVia; + } + else if (this.from.x > this.to.x) { + // console.log(8) + xVia = this.from.x - factor * dx; + yVia = this.from.y + factor * dx; + yVia = this.to.y < yVia ? this.to.y : yVia; + } + } + } + } - /** - * keep a list of user event handlers which needs to be removed when calling 'dispose' - * @property eventHandlers - * @type {Array} - */ - this.eventHandlers = []; + + return {x:xVia, y:yVia}; }; - Hammer.Instance.prototype = { - /** - * bind events to the instance - * @method on - * @chainable - * @param {String} gestures multiple gestures by splitting with a space - * @param {Function} handler - * @param {Object} handler.ev event object - */ - on: function onEvent(gestures, handler) { - var self = this; - Event.on(self.element, gestures, handler, function(type) { - self.eventHandlers.push({ gesture: type, handler: handler }); - }); - return self; - }, + /** + * Draw a line between two nodes + * @param {CanvasRenderingContext2D} ctx + * @private + */ + Edge.prototype._line = function (ctx) { + // draw a straight line + ctx.beginPath(); + ctx.moveTo(this.from.x, this.from.y); + if (this.options.smoothCurves.enabled == true) { + if (this.options.smoothCurves.dynamic == false) { + var via = this._getViaCoordinates(); + if (via.x == null) { + ctx.lineTo(this.to.x, this.to.y); + ctx.stroke(); + return null; + } + else { + // this.via.x = via.x; + // this.via.y = via.y; + ctx.quadraticCurveTo(via.x,via.y,this.to.x, this.to.y); + ctx.stroke(); + return via; + } + } + else { + ctx.quadraticCurveTo(this.via.x,this.via.y,this.to.x, this.to.y); + ctx.stroke(); + return this.via; + } + } + else { + ctx.lineTo(this.to.x, this.to.y); + ctx.stroke(); + return null; + } + }; - /** - * unbind events to the instance - * @method off - * @chainable - * @param {String} gestures - * @param {Function} handler - */ - off: function offEvent(gestures, handler) { - var self = this; + /** + * Draw a line from a node to itself, a circle + * @param {CanvasRenderingContext2D} ctx + * @param {Number} x + * @param {Number} y + * @param {Number} radius + * @private + */ + Edge.prototype._circle = function (ctx, x, y, radius) { + // draw a circle + ctx.beginPath(); + ctx.arc(x, y, radius, 0, 2 * Math.PI, false); + ctx.stroke(); + }; - Event.off(self.element, gestures, handler, function(type) { - var index = Utils.inArray({ gesture: type, handler: handler }); - if(index !== false) { - self.eventHandlers.splice(index, 1); - } - }); - return self; - }, + /** + * Draw label with white background and with the middle at (x, y) + * @param {CanvasRenderingContext2D} ctx + * @param {String} text + * @param {Number} x + * @param {Number} y + * @private + */ + Edge.prototype._label = function (ctx, text, x, y) { + if (text) { + ctx.font = ((this.from.selected || this.to.selected) ? "bold " : "") + + this.options.fontSize + "px " + this.options.fontFace; + var yLine; + + if (this.dirtyLabel == true) { + var lines = String(text).split('\n'); + var lineCount = lines.length; + var fontSize = (Number(this.options.fontSize) + 4); + yLine = y + (1 - lineCount) / 2 * fontSize; + + var width = ctx.measureText(lines[0]).width; + for (var i = 1; i < lineCount; i++) { + var lineWidth = ctx.measureText(lines[i]).width; + width = lineWidth > width ? lineWidth : width; + } + var height = this.options.fontSize * lineCount; + var left = x - width / 2; + var top = y - height / 2; + + // cache + this.labelDimensions = {top:top,left:left,width:width,height:height,yLine:yLine}; + } - /** - * trigger gesture event - * @method trigger - * @chainable - * @param {String} gesture - * @param {Object} [eventData] - */ - trigger: function triggerEvent(gesture, eventData) { - // optional - if(!eventData) { - eventData = {}; - } - // create DOM event - var event = Hammer.DOCUMENT.createEvent('Event'); - event.initEvent(gesture, true, true); - event.gesture = eventData; + if (this.options.fontFill !== undefined && this.options.fontFill !== null && this.options.fontFill !== "none") { + ctx.fillStyle = this.options.fontFill; + ctx.fillRect(this.labelDimensions.left, + this.labelDimensions.top, + this.labelDimensions.width, + this.labelDimensions.height); + } - // trigger on the target if it is in the instance element, - // this is for event delegation tricks - var element = this.element; - if(Utils.hasParent(eventData.target, element)) { - element = eventData.target; - } + // draw text + ctx.fillStyle = this.options.fontColor || "black"; + ctx.textAlign = "center"; + ctx.textBaseline = "middle"; + yLine = this.labelDimensions.yLine; + for (var i = 0; i < lineCount; i++) { + ctx.fillText(lines[i], x, yLine); + yLine += fontSize; + } + } + }; - element.dispatchEvent(event); - return this; - }, + /** + * Redraw a edge as a dashed line + * Draw this edge in the given canvas + * @author David Jordan + * @date 2012-08-08 + * The 2d context of a HTML canvas can be retrieved by canvas.getContext("2d"); + * @param {CanvasRenderingContext2D} ctx + * @private + */ + Edge.prototype._drawDashLine = function(ctx) { + // set style + ctx.strokeStyle = this._getColor(); + ctx.lineWidth = this._getLineWidth(); - /** - * enable of disable hammer.js detection - * @method enable - * @chainable - * @param {Boolean} state - */ - enable: function enable(state) { - this.enabled = state; - return this; - }, + var via = null; + // only firefox and chrome support this method, else we use the legacy one. + if (ctx.mozDash !== undefined || ctx.setLineDash !== undefined) { + // configure the dash pattern + var pattern = [0]; + if (this.options.dash.length !== undefined && this.options.dash.gap !== undefined) { + pattern = [this.options.dash.length,this.options.dash.gap]; + } + else { + pattern = [5,5]; + } - /** - * dispose this hammer instance - * @method dispose - * @return {Null} - */ - dispose: function dispose() { - var i, eh; + // set dash settings for chrome or firefox + if (typeof ctx.setLineDash !== 'undefined') { //Chrome + ctx.setLineDash(pattern); + ctx.lineDashOffset = 0; - // undo all changes made by stop_browser_behavior - Utils.toggleBehavior(this.element, this.options.behavior, false); + } else { //Firefox + ctx.mozDash = pattern; + ctx.mozDashOffset = 0; + } - // unbind all custom event handlers - for(i = -1; (eh = this.eventHandlers[++i]);) { - Utils.off(this.element, eh.gesture, eh.handler); - } + // draw the line + via = this._line(ctx); - this.eventHandlers = []; + // restore the dash settings. + if (typeof ctx.setLineDash !== 'undefined') { //Chrome + ctx.setLineDash([0]); + ctx.lineDashOffset = 0; - // unbind the start event listener - Event.off(this.element, EVENT_TYPES[EVENT_START], this.eventStartHandler); + } else { //Firefox + ctx.mozDash = [0]; + ctx.mozDashOffset = 0; + } + } + else { // unsupporting smooth lines + // draw dashed line + ctx.beginPath(); + ctx.lineCap = 'round'; + if (this.options.dash.altLength !== undefined) //If an alt dash value has been set add to the array this value + { + ctx.dashedLine(this.from.x,this.from.y,this.to.x,this.to.y, + [this.options.dash.length,this.options.dash.gap,this.options.dash.altLength,this.options.dash.gap]); + } + else if (this.options.dash.length !== undefined && this.options.dash.gap !== undefined) //If a dash and gap value has been set add to the array this value + { + ctx.dashedLine(this.from.x,this.from.y,this.to.x,this.to.y, + [this.options.dash.length,this.options.dash.gap]); + } + else //If all else fails draw a line + { + ctx.moveTo(this.from.x, this.from.y); + ctx.lineTo(this.to.x, this.to.y); + } + ctx.stroke(); + } - return null; + // draw label + if (this.label) { + var point; + if (this.options.smoothCurves.enabled == true && via != null) { + var midpointX = 0.5*(0.5*(this.from.x + via.x) + 0.5*(this.to.x + via.x)); + var midpointY = 0.5*(0.5*(this.from.y + via.y) + 0.5*(this.to.y + via.y)); + point = {x:midpointX, y:midpointY}; + } + else { + point = this._pointOnLine(0.5); } + this._label(ctx, this.label, point.x, point.y); + } }; - - /** - * @module gestures - */ - /** - * Move with x fingers (default 1) around on the page. - * Preventing the default browser behavior is a good way to improve feel and working. - * ```` - * hammertime.on("drag", function(ev) { - * console.log(ev); - * ev.gesture.preventDefault(); - * }); - * ```` - * - * @class Drag - * @static - */ - /** - * @event drag - * @param {Object} ev - */ - /** - * @event dragstart - * @param {Object} ev - */ - /** - * @event dragend - * @param {Object} ev - */ - /** - * @event drapleft - * @param {Object} ev - */ - /** - * @event dragright - * @param {Object} ev - */ /** - * @event dragup - * @param {Object} ev + * Get a point on a line + * @param {Number} percentage. Value between 0 (line start) and 1 (line end) + * @return {Object} point + * @private */ + Edge.prototype._pointOnLine = function (percentage) { + return { + x: (1 - percentage) * this.from.x + percentage * this.to.x, + y: (1 - percentage) * this.from.y + percentage * this.to.y + } + }; + /** - * @event dragdown - * @param {Object} ev + * Get a point on a circle + * @param {Number} x + * @param {Number} y + * @param {Number} radius + * @param {Number} percentage. Value between 0 (line start) and 1 (line end) + * @return {Object} point + * @private */ + Edge.prototype._pointOnCircle = function (x, y, radius, percentage) { + var angle = (percentage - 3/8) * 2 * Math.PI; + return { + x: x + radius * Math.cos(angle), + y: y - radius * Math.sin(angle) + } + }; /** - * @param {String} name + * Redraw a edge as a line with an arrow halfway the line + * Draw this edge in the given canvas + * The 2d context of a HTML canvas can be retrieved by canvas.getContext("2d"); + * @param {CanvasRenderingContext2D} ctx + * @private */ - (function(name) { - var triggered = false; + Edge.prototype._drawArrowCenter = function(ctx) { + var point; + // set style + ctx.strokeStyle = this._getColor(); + ctx.fillStyle = ctx.strokeStyle; + ctx.lineWidth = this._getLineWidth(); - function dragGesture(ev, inst) { - var cur = Detection.current; + if (this.from != this.to) { + // draw line + var via = this._line(ctx); - // max touches - if(inst.options.dragMaxTouches > 0 && - ev.touches.length > inst.options.dragMaxTouches) { - return; - } + var angle = Math.atan2((this.to.y - this.from.y), (this.to.x - this.from.x)); + var length = (10 + 5 * this.options.width) * this.options.arrowScaleFactor; + // draw an arrow halfway the line + if (this.options.smoothCurves.enabled == true && via != null) { + var midpointX = 0.5*(0.5*(this.from.x + via.x) + 0.5*(this.to.x + via.x)); + var midpointY = 0.5*(0.5*(this.from.y + via.y) + 0.5*(this.to.y + via.y)); + point = {x:midpointX, y:midpointY}; + } + else { + point = this._pointOnLine(0.5); + } - switch(ev.eventType) { - case EVENT_START: - triggered = false; - break; + ctx.arrow(point.x, point.y, angle, length); + ctx.fill(); + ctx.stroke(); - case EVENT_MOVE: - // when the distance we moved is too small we skip this gesture - // or we can be already in dragging - if(ev.distance < inst.options.dragMinDistance && - cur.name != name) { - return; - } + // draw label + if (this.label) { + this._label(ctx, this.label, point.x, point.y); + } + } + else { + // draw circle + var x, y; + var radius = 0.25 * Math.max(100,this.physics.springLength); + var node = this.from; + if (!node.width) { + node.resize(ctx); + } + if (node.width > node.height) { + x = node.x + node.width * 0.5; + y = node.y - radius; + } + else { + x = node.x + radius; + y = node.y - node.height * 0.5; + } + this._circle(ctx, x, y, radius); - var startCenter = cur.startEvent.center; + // draw all arrows + var angle = 0.2 * Math.PI; + var length = (10 + 5 * this.options.width) * this.options.arrowScaleFactor; + point = this._pointOnCircle(x, y, radius, 0.5); + ctx.arrow(point.x, point.y, angle, length); + ctx.fill(); + ctx.stroke(); - // we are dragging! - if(cur.name != name) { - cur.name = name; - if(inst.options.dragDistanceCorrection && ev.distance > 0) { - // When a drag is triggered, set the event center to dragMinDistance pixels from the original event center. - // Without this correction, the dragged distance would jumpstart at dragMinDistance pixels instead of at 0. - // It might be useful to save the original start point somewhere - var factor = Math.abs(inst.options.dragMinDistance / ev.distance); - startCenter.pageX += ev.deltaX * factor; - startCenter.pageY += ev.deltaY * factor; - startCenter.clientX += ev.deltaX * factor; - startCenter.clientY += ev.deltaY * factor; + // draw label + if (this.label) { + point = this._pointOnCircle(x, y, radius, 0.5); + this._label(ctx, this.label, point.x, point.y); + } + } + }; - // recalculate event data using new start point - ev = Detection.extendEventData(ev); - } - } - // lock drag to axis? - if(cur.lastEvent.dragLockToAxis || - ( inst.options.dragLockToAxis && - inst.options.dragLockMinDistance <= ev.distance - )) { - ev.dragLockToAxis = true; - } - // keep direction on the axis that the drag gesture started on - var lastDirection = cur.lastEvent.direction; - if(ev.dragLockToAxis && lastDirection !== ev.direction) { - if(Utils.isVertical(lastDirection)) { - ev.direction = (ev.deltaY < 0) ? DIRECTION_UP : DIRECTION_DOWN; - } else { - ev.direction = (ev.deltaX < 0) ? DIRECTION_LEFT : DIRECTION_RIGHT; - } - } + /** + * Redraw a edge as a line with an arrow + * Draw this edge in the given canvas + * The 2d context of a HTML canvas can be retrieved by canvas.getContext("2d"); + * @param {CanvasRenderingContext2D} ctx + * @private + */ + Edge.prototype._drawArrow = function(ctx) { + // set style + ctx.strokeStyle = this._getColor(); + ctx.fillStyle = ctx.strokeStyle; + ctx.lineWidth = this._getLineWidth(); - // first time, trigger dragstart event - if(!triggered) { - inst.trigger(name + 'start', ev); - triggered = true; - } + var angle, length; + //draw a line + if (this.from != this.to) { + angle = Math.atan2((this.to.y - this.from.y), (this.to.x - this.from.x)); + var dx = (this.to.x - this.from.x); + var dy = (this.to.y - this.from.y); + var edgeSegmentLength = Math.sqrt(dx * dx + dy * dy); - // trigger events - inst.trigger(name, ev); - inst.trigger(name + ev.direction, ev); + var fromBorderDist = this.from.distanceToBorder(ctx, angle + Math.PI); + var fromBorderPoint = (edgeSegmentLength - fromBorderDist) / edgeSegmentLength; + var xFrom = (fromBorderPoint) * this.from.x + (1 - fromBorderPoint) * this.to.x; + var yFrom = (fromBorderPoint) * this.from.y + (1 - fromBorderPoint) * this.to.y; - var isVertical = Utils.isVertical(ev.direction); + var via; + if (this.options.smoothCurves.dynamic == true && this.options.smoothCurves.enabled == true ) { + via = this.via; + } + else if (this.options.smoothCurves.enabled == true) { + via = this._getViaCoordinates(); + } - // block the browser events - if((inst.options.dragBlockVertical && isVertical) || - (inst.options.dragBlockHorizontal && !isVertical)) { - ev.preventDefault(); - } - break; + if (this.options.smoothCurves.enabled == true && via.x != null) { + angle = Math.atan2((this.to.y - via.y), (this.to.x - via.x)); + dx = (this.to.x - via.x); + dy = (this.to.y - via.y); + edgeSegmentLength = Math.sqrt(dx * dx + dy * dy); + } + var toBorderDist = this.to.distanceToBorder(ctx, angle); + var toBorderPoint = (edgeSegmentLength - toBorderDist) / edgeSegmentLength; - case EVENT_RELEASE: - if(triggered && ev.changedLength <= inst.options.dragMaxTouches) { - inst.trigger(name + 'end', ev); - triggered = false; - } - break; + var xTo,yTo; + if (this.options.smoothCurves.enabled == true && via.x != null) { + xTo = (1 - toBorderPoint) * via.x + toBorderPoint * this.to.x; + yTo = (1 - toBorderPoint) * via.y + toBorderPoint * this.to.y; + } + else { + xTo = (1 - toBorderPoint) * this.from.x + toBorderPoint * this.to.x; + yTo = (1 - toBorderPoint) * this.from.y + toBorderPoint * this.to.y; + } - case EVENT_END: - triggered = false; - break; + ctx.beginPath(); + ctx.moveTo(xFrom,yFrom); + if (this.options.smoothCurves.enabled == true && via.x != null) { + ctx.quadraticCurveTo(via.x,via.y,xTo, yTo); + } + else { + ctx.lineTo(xTo, yTo); + } + ctx.stroke(); + + // draw arrow at the end of the line + length = (10 + 5 * this.options.width) * this.options.arrowScaleFactor; + ctx.arrow(xTo, yTo, angle, length); + ctx.fill(); + ctx.stroke(); + + // draw label + if (this.label) { + var point; + if (this.options.smoothCurves.enabled == true && via != null) { + var midpointX = 0.5*(0.5*(this.from.x + via.x) + 0.5*(this.to.x + via.x)); + var midpointY = 0.5*(0.5*(this.from.y + via.y) + 0.5*(this.to.y + via.y)); + point = {x:midpointX, y:midpointY}; + } + else { + point = this._pointOnLine(0.5); + } + this._label(ctx, this.label, point.x, point.y); + } + } + else { + // draw circle + var node = this.from; + var x, y, arrow; + var radius = 0.25 * Math.max(100,this.physics.springLength); + if (!node.width) { + node.resize(ctx); + } + if (node.width > node.height) { + x = node.x + node.width * 0.5; + y = node.y - radius; + arrow = { + x: x, + y: node.y, + angle: 0.9 * Math.PI + }; + } + else { + x = node.x + radius; + y = node.y - node.height * 0.5; + arrow = { + x: node.x, + y: y, + angle: 0.6 * Math.PI + }; + } + ctx.beginPath(); + // TODO: similarly, for a line without arrows, draw to the border of the nodes instead of the center + ctx.arc(x, y, radius, 0, 2 * Math.PI, false); + ctx.stroke(); + + // draw all arrows + var length = (10 + 5 * this.options.width) * this.options.arrowScaleFactor; + ctx.arrow(arrow.x, arrow.y, arrow.angle, length); + ctx.fill(); + ctx.stroke(); + + // draw label + if (this.label) { + point = this._pointOnCircle(x, y, radius, 0.5); + this._label(ctx, this.label, point.x, point.y); + } + } + }; + + + + /** + * Calculate the distance between a point (x3,y3) and a line segment from + * (x1,y1) to (x2,y2). + * http://stackoverflow.com/questions/849211/shortest-distancae-between-a-point-and-a-line-segment + * @param {number} x1 + * @param {number} y1 + * @param {number} x2 + * @param {number} y2 + * @param {number} x3 + * @param {number} y3 + * @private + */ + Edge.prototype._getDistanceToEdge = function (x1,y1, x2,y2, x3,y3) { // x3,y3 is the point + var returnValue = 0; + if (this.from != this.to) { + if (this.options.smoothCurves.enabled == true) { + var xVia, yVia; + if (this.options.smoothCurves.enabled == true && this.options.smoothCurves.dynamic == true) { + xVia = this.via.x; + yVia = this.via.y; + } + else { + var via = this._getViaCoordinates(); + xVia = via.x; + yVia = via.y; + } + var minDistance = 1e9; + var distance; + var i,t,x,y, lastX, lastY; + for (i = 0; i < 10; i++) { + t = 0.1*i; + x = Math.pow(1-t,2)*x1 + (2*t*(1 - t))*xVia + Math.pow(t,2)*x2; + y = Math.pow(1-t,2)*y1 + (2*t*(1 - t))*yVia + Math.pow(t,2)*y2; + if (i > 0) { + distance = this._getDistanceToLine(lastX,lastY,x,y, x3,y3); + minDistance = distance < minDistance ? distance : minDistance; } + lastX = x; lastY = y; + } + returnValue = minDistance; + } + else { + returnValue = this._getDistanceToLine(x1,y1,x2,y2,x3,y3); + } + } + else { + var x, y, dx, dy; + var radius = 0.25 * this.physics.springLength; + var node = this.from; + if (node.width > node.height) { + x = node.x + 0.5 * node.width; + y = node.y - radius; } + else { + x = node.x + radius; + y = node.y - 0.5 * node.height; + } + dx = x - x3; + dy = y - y3; + returnValue = Math.abs(Math.sqrt(dx*dx + dy*dy) - radius); + } - Hammer.gestures.Drag = { - name: name, - index: 50, - handler: dragGesture, - defaults: { - /** - * minimal movement that have to be made before the drag event gets triggered - * @property dragMinDistance - * @type {Number} - * @default 10 - */ - dragMinDistance: 10, - - /** - * Set dragDistanceCorrection to true to make the starting point of the drag - * be calculated from where the drag was triggered, not from where the touch started. - * Useful to avoid a jerk-starting drag, which can make fine-adjustments - * through dragging difficult, and be visually unappealing. - * @property dragDistanceCorrection - * @type {Boolean} - * @default true - */ - dragDistanceCorrection: true, - - /** - * set 0 for unlimited, but this can conflict with transform - * @property dragMaxTouches - * @type {Number} - * @default 1 - */ - dragMaxTouches: 1, + if (this.labelDimensions.left < x3 && + this.labelDimensions.left + this.labelDimensions.width > x3 && + this.labelDimensions.top < y3 && + this.labelDimensions.top + this.labelDimensions.height > y3) { + return 0; + } + else { + return returnValue; + } + }; - /** - * prevent default browser behavior when dragging occurs - * be careful with it, it makes the element a blocking element - * when you are using the drag gesture, it is a good practice to set this true - * @property dragBlockHorizontal - * @type {Boolean} - * @default false - */ - dragBlockHorizontal: false, + Edge.prototype._getDistanceToLine = function(x1,y1,x2,y2,x3,y3) { + var px = x2-x1, + py = y2-y1, + something = px*px + py*py, + u = ((x3 - x1) * px + (y3 - y1) * py) / something; - /** - * same as `dragBlockHorizontal`, but for vertical movement - * @property dragBlockVertical - * @type {Boolean} - * @default false - */ - dragBlockVertical: false, + if (u > 1) { + u = 1; + } + else if (u < 0) { + u = 0; + } - /** - * dragLockToAxis keeps the drag gesture on the axis that it started on, - * It disallows vertical directions if the initial direction was horizontal, and vice versa. - * @property dragLockToAxis - * @type {Boolean} - * @default false - */ - dragLockToAxis: false, + var x = x1 + u * px, + y = y1 + u * py, + dx = x - x3, + dy = y - y3; - /** - * drag lock only kicks in when distance > dragLockMinDistance - * This way, locking occurs only when the distance has become large enough to reliably determine the direction - * @property dragLockMinDistance - * @type {Number} - * @default 25 - */ - dragLockMinDistance: 25 - } - }; - })('drag'); + //# Note: If the actual distance does not matter, + //# if you only want to compare what this function + //# returns to other results of this function, you + //# can just return the squared distance instead + //# (i.e. remove the sqrt) to gain a little performance - /** - * @module gestures - */ - /** - * trigger a simple gesture event, so you can do anything in your handler. - * only usable if you know what your doing... - * - * @class Gesture - * @static - */ - /** - * @event gesture - * @param {Object} ev - */ - Hammer.gestures.Gesture = { - name: 'gesture', - index: 1337, - handler: function releaseGesture(ev, inst) { - inst.trigger(this.name, ev); - } + return Math.sqrt(dx*dx + dy*dy); }; /** - * @module gestures - */ - /** - * Touch stays at the same place for x time + * This allows the zoom level of the network to influence the rendering * - * @class Hold - * @static - */ - /** - * @event hold - * @param {Object} ev - */ - - /** - * @param {String} name + * @param scale */ - (function(name) { - var timer; - - function holdGesture(ev, inst) { - var options = inst.options, - current = Detection.current; + Edge.prototype.setScale = function(scale) { + this.networkScaleInv = 1.0/scale; + }; - switch(ev.eventType) { - case EVENT_START: - clearTimeout(timer); - // set the gesture so we can check in the timeout if it still is - current.name = name; + Edge.prototype.select = function() { + this.selected = true; + }; - // set timer and if after the timeout it still is hold, - // we trigger the hold event - timer = setTimeout(function() { - if(current && current.name == name) { - inst.trigger(name, ev); - } - }, options.holdTimeout); - break; + Edge.prototype.unselect = function() { + this.selected = false; + }; - case EVENT_MOVE: - if(ev.distance > options.holdThreshold) { - clearTimeout(timer); - } - break; + Edge.prototype.positionBezierNode = function() { + if (this.via !== null && this.from !== null && this.to !== null) { + this.via.x = 0.5 * (this.from.x + this.to.x); + this.via.y = 0.5 * (this.from.y + this.to.y); + } + }; - case EVENT_RELEASE: - clearTimeout(timer); - break; - } + /** + * This function draws the control nodes for the manipulator. + * In order to enable this, only set the this.controlNodesEnabled to true. + * @param ctx + */ + Edge.prototype._drawControlNodes = function(ctx) { + if (this.controlNodesEnabled == true) { + if (this.controlNodes.from === null && this.controlNodes.to === null) { + var nodeIdFrom = "edgeIdFrom:".concat(this.id); + var nodeIdTo = "edgeIdTo:".concat(this.id); + var constants = { + nodes:{group:'', radius:8}, + physics:{damping:0}, + clustering: {maxNodeSizeIncrements: 0 ,nodeScaling: {width:0, height: 0, radius:0}} + }; + this.controlNodes.from = new Node( + {id:nodeIdFrom, + shape:'dot', + color:{background:'#ff4e00', border:'#3c3c3c', highlight: {background:'#07f968'}} + },{},{},constants); + this.controlNodes.to = new Node( + {id:nodeIdTo, + shape:'dot', + color:{background:'#ff4e00', border:'#3c3c3c', highlight: {background:'#07f968'}} + },{},{},constants); } - Hammer.gestures.Hold = { - name: name, - index: 10, - defaults: { - /** - * @property holdTimeout - * @type {Number} - * @default 500 - */ - holdTimeout: 500, + if (this.controlNodes.from.selected == false && this.controlNodes.to.selected == false) { + this.controlNodes.positions = this.getControlNodePositions(ctx); + this.controlNodes.from.x = this.controlNodes.positions.from.x; + this.controlNodes.from.y = this.controlNodes.positions.from.y; + this.controlNodes.to.x = this.controlNodes.positions.to.x; + this.controlNodes.to.y = this.controlNodes.positions.to.y; + } - /** - * movement allowed while holding - * @property holdThreshold - * @type {Number} - * @default 2 - */ - holdThreshold: 2 - }, - handler: holdGesture - }; - })('hold'); + this.controlNodes.from.draw(ctx); + this.controlNodes.to.draw(ctx); + } + else { + this.controlNodes = {from:null, to:null, positions:{}}; + } + }; /** - * @module gestures + * Enable control nodes. + * @private */ + Edge.prototype._enableControlNodes = function() { + this.fromBackup = this.from; + this.toBackup = this.to; + this.controlNodesEnabled = true; + }; + /** - * when a touch is being released from the page - * - * @class Release - * @static + * disable control nodes and remove from dynamicEdges from old node + * @private */ + Edge.prototype._disableControlNodes = function() { + this.fromId = this.from.id; + this.toId = this.to.id; + if (this.fromId != this.fromBackup.id) { // from was changed, remove edge from old 'from' node dynamic edges + this.fromBackup.detachEdge(this); + } + else if (this.toId != this.toBackup.id) { // to was changed, remove edge from old 'to' node dynamic edges + this.toBackup.detachEdge(this); + } + + this.fromBackup = null; + this.toBackup = null; + this.controlNodesEnabled = false; + }; + + /** - * @event release - * @param {Object} ev + * This checks if one of the control nodes is selected and if so, returns the control node object. Else it returns null. + * @param x + * @param y + * @returns {null} + * @private */ - Hammer.gestures.Release = { - name: 'release', - index: Infinity, - handler: function releaseGesture(ev, inst) { - if(ev.eventType == EVENT_RELEASE) { - inst.trigger(this.name, ev); - } - } + Edge.prototype._getSelectedControlNode = function(x,y) { + var positions = this.controlNodes.positions; + var fromDistance = Math.sqrt(Math.pow(x - positions.from.x,2) + Math.pow(y - positions.from.y,2)); + var toDistance = Math.sqrt(Math.pow(x - positions.to.x ,2) + Math.pow(y - positions.to.y ,2)); + + if (fromDistance < 15) { + this.connectedNode = this.from; + this.from = this.controlNodes.from; + return this.controlNodes.from; + } + else if (toDistance < 15) { + this.connectedNode = this.to; + this.to = this.controlNodes.to; + return this.controlNodes.to; + } + else { + return null; + } }; + /** - * @module gestures + * this resets the control nodes to their original position. + * @private */ + Edge.prototype._restoreControlNodes = function() { + if (this.controlNodes.from.selected == true) { + this.from = this.connectedNode; + this.connectedNode = null; + this.controlNodes.from.unselect(); + } + else if (this.controlNodes.to.selected == true) { + this.to = this.connectedNode; + this.connectedNode = null; + this.controlNodes.to.unselect(); + } + }; + /** - * triggers swipe events when the end velocity is above the threshold - * for best usage, set `preventDefault` (on the drag gesture) to `true` - * ```` - * hammertime.on("dragleft swipeleft", function(ev) { - * console.log(ev); - * ev.gesture.preventDefault(); - * }); - * ```` + * this calculates the position of the control nodes on the edges of the parent nodes. * - * @class Swipe - * @static - */ - /** - * @event swipe - * @param {Object} ev - */ - /** - * @event swipeleft - * @param {Object} ev - */ - /** - * @event swiperight - * @param {Object} ev - */ - /** - * @event swipeup - * @param {Object} ev - */ - /** - * @event swipedown - * @param {Object} ev + * @param ctx + * @returns {{from: {x: number, y: number}, to: {x: *, y: *}}} */ - Hammer.gestures.Swipe = { - name: 'swipe', - index: 40, - defaults: { - /** - * @property swipeMinTouches - * @type {Number} - * @default 1 - */ - swipeMinTouches: 1, + Edge.prototype.getControlNodePositions = function(ctx) { + var angle = Math.atan2((this.to.y - this.from.y), (this.to.x - this.from.x)); + var dx = (this.to.x - this.from.x); + var dy = (this.to.y - this.from.y); + var edgeSegmentLength = Math.sqrt(dx * dx + dy * dy); + var fromBorderDist = this.from.distanceToBorder(ctx, angle + Math.PI); + var fromBorderPoint = (edgeSegmentLength - fromBorderDist) / edgeSegmentLength; + var xFrom = (fromBorderPoint) * this.from.x + (1 - fromBorderPoint) * this.to.x; + var yFrom = (fromBorderPoint) * this.from.y + (1 - fromBorderPoint) * this.to.y; - /** - * @property swipeMaxTouches - * @type {Number} - * @default 1 - */ - swipeMaxTouches: 1, + var via; + if (this.options.smoothCurves.dynamic == true && this.options.smoothCurves.enabled == true) { + via = this.via; + } + else if (this.options.smoothCurves.enabled == true) { + via = this._getViaCoordinates(); + } - /** - * horizontal swipe velocity - * @property swipeVelocityX - * @type {Number} - * @default 0.6 - */ - swipeVelocityX: 0.6, + if (this.options.smoothCurves.enabled == true && via.x != null) { + angle = Math.atan2((this.to.y - via.y), (this.to.x - via.x)); + dx = (this.to.x - via.x); + dy = (this.to.y - via.y); + edgeSegmentLength = Math.sqrt(dx * dx + dy * dy); + } + var toBorderDist = this.to.distanceToBorder(ctx, angle); + var toBorderPoint = (edgeSegmentLength - toBorderDist) / edgeSegmentLength; - /** - * vertical swipe velocity - * @property swipeVelocityY - * @type {Number} - * @default 0.6 - */ - swipeVelocityY: 0.6 - }, + var xTo,yTo; + if (this.options.smoothCurves.enabled == true && via.x != null) { + xTo = (1 - toBorderPoint) * via.x + toBorderPoint * this.to.x; + yTo = (1 - toBorderPoint) * via.y + toBorderPoint * this.to.y; + } + else { + xTo = (1 - toBorderPoint) * this.from.x + toBorderPoint * this.to.x; + yTo = (1 - toBorderPoint) * this.from.y + toBorderPoint * this.to.y; + } - handler: function swipeGesture(ev, inst) { - if(ev.eventType == EVENT_RELEASE) { - var touches = ev.touches.length, - options = inst.options; + return {from:{x:xFrom,y:yFrom},to:{x:xTo,y:yTo}}; + }; - // max touches - if(touches < options.swipeMinTouches || - touches > options.swipeMaxTouches) { - return; - } + module.exports = Edge; - // when the distance we moved is too small we skip this gesture - // or we can be already in dragging - if(ev.velocityX > options.swipeVelocityX || - ev.velocityY > options.swipeVelocityY) { - // trigger swipe events - inst.trigger(this.name, ev); - inst.trigger(this.name + ev.direction, ev); - } +/***/ }, +/* 58 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Popup is a class to create a popup window with some text + * @param {Element} container The container object. + * @param {Number} [x] + * @param {Number} [y] + * @param {String} [text] + * @param {Object} [style] An object containing borderColor, + * backgroundColor, etc. + */ + function Popup(container, x, y, text, style) { + if (container) { + this.container = container; + } + else { + this.container = document.body; + } + + // x, y and text are optional, see if a style object was passed in their place + if (style === undefined) { + if (typeof x === "object") { + style = x; + x = undefined; + } else if (typeof text === "object") { + style = text; + text = undefined; + } else { + // for backwards compatibility, in case clients other than Network are creating Popup directly + style = { + fontColor: 'black', + fontSize: 14, // px + fontFace: 'verdana', + color: { + border: '#666', + background: '#FFFFC6' } + } } - }; + } + + this.x = 0; + this.y = 0; + this.padding = 5; + + if (x !== undefined && y !== undefined ) { + this.setPosition(x, y); + } + if (text !== undefined) { + this.setText(text); + } + + // create the frame + this.frame = document.createElement("div"); + var styleAttr = this.frame.style; + styleAttr.position = "absolute"; + styleAttr.visibility = "hidden"; + styleAttr.border = "1px solid " + style.color.border; + styleAttr.color = style.fontColor; + styleAttr.fontSize = style.fontSize + "px"; + styleAttr.fontFamily = style.fontFace; + styleAttr.padding = this.padding + "px"; + styleAttr.backgroundColor = style.color.background; + styleAttr.borderRadius = "3px"; + styleAttr.MozBorderRadius = "3px"; + styleAttr.WebkitBorderRadius = "3px"; + styleAttr.boxShadow = "3px 3px 10px rgba(128, 128, 128, 0.5)"; + styleAttr.whiteSpace = "nowrap"; + this.container.appendChild(this.frame); + } /** - * @module gestures - */ - /** - * Single tap and a double tap on a place - * - * @class Tap - * @static - */ - /** - * @event tap - * @param {Object} ev + * @param {number} x Horizontal position of the popup window + * @param {number} y Vertical position of the popup window */ + Popup.prototype.setPosition = function(x, y) { + this.x = parseInt(x); + this.y = parseInt(y); + }; + /** - * @event doubletap - * @param {Object} ev + * Set the content for the popup window. This can be HTML code or text. + * @param {string | Element} content */ + Popup.prototype.setText = function(content) { + if (content instanceof Element) { + this.frame.innerHTML = ''; + this.frame.appendChild(content); + } + else { + this.frame.innerHTML = content; // string containing text or HTML + } + }; /** - * @param {String} name + * Show the popup window + * @param {boolean} show Optional. Show or hide the window */ - (function(name) { - var hasMoved = false; - - function tapGesture(ev, inst) { - var options = inst.options, - current = Detection.current, - prev = Detection.previous, - sincePrev, - didDoubleTap; - - switch(ev.eventType) { - case EVENT_START: - hasMoved = false; - break; - - case EVENT_MOVE: - hasMoved = hasMoved || (ev.distance > options.tapMaxDistance); - break; + Popup.prototype.show = function (show) { + if (show === undefined) { + show = true; + } - case EVENT_END: - if(!Utils.inStr(ev.srcEvent.type, 'cancel') && ev.deltaTime < options.tapMaxTime && !hasMoved) { - // previous gesture, for the double tap since these are two different gesture detections - sincePrev = prev && prev.lastEvent && ev.timeStamp - prev.lastEvent.timeStamp; - didDoubleTap = false; + if (show) { + var height = this.frame.clientHeight; + var width = this.frame.clientWidth; + var maxHeight = this.frame.parentNode.clientHeight; + var maxWidth = this.frame.parentNode.clientWidth; - // check if double tap - if(prev && prev.name == name && - (sincePrev && sincePrev < options.doubleTapInterval) && - ev.distance < options.doubleTapDistance) { - inst.trigger('doubletap', ev); - didDoubleTap = true; - } + var top = (this.y - height); + if (top + height + this.padding > maxHeight) { + top = maxHeight - height - this.padding; + } + if (top < this.padding) { + top = this.padding; + } - // do a single tap - if(!didDoubleTap || options.tapAlways) { - current.name = name; - inst.trigger(current.name, ev); - } - } - break; - } + var left = this.x; + if (left + width + this.padding > maxWidth) { + left = maxWidth - width - this.padding; + } + if (left < this.padding) { + left = this.padding; } - Hammer.gestures.Tap = { - name: name, - index: 100, - handler: tapGesture, - defaults: { - /** - * max time of a tap, this is for the slow tappers - * @property tapMaxTime - * @type {Number} - * @default 250 - */ - tapMaxTime: 250, + this.frame.style.left = left + "px"; + this.frame.style.top = top + "px"; + this.frame.style.visibility = "visible"; + } + else { + this.hide(); + } + }; - /** - * max distance of movement of a tap, this is for the slow tappers - * @property tapMaxDistance - * @type {Number} - * @default 10 - */ - tapMaxDistance: 10, + /** + * Hide the popup window + */ + Popup.prototype.hide = function () { + this.frame.style.visibility = "hidden"; + }; - /** - * always trigger the `tap` event, even while double-tapping - * @property tapAlways - * @type {Boolean} - * @default true - */ - tapAlways: true, + module.exports = Popup; - /** - * max distance between two taps - * @property doubleTapDistance - * @type {Number} - * @default 20 - */ - doubleTapDistance: 20, - /** - * max time between two taps - * @property doubleTapInterval - * @type {Number} - * @default 300 - */ - doubleTapInterval: 300 - } - }; - })('tap'); +/***/ }, +/* 59 */ +/***/ function(module, exports, __webpack_require__) { + + var PhysicsMixin = __webpack_require__(60); + var ClusterMixin = __webpack_require__(64); + var SectorsMixin = __webpack_require__(65); + var SelectionMixin = __webpack_require__(66); + var ManipulationMixin = __webpack_require__(67); + var NavigationMixin = __webpack_require__(68); + var HierarchicalLayoutMixin = __webpack_require__(69); /** - * @module gestures - */ - /** - * when a touch is being touched at the page + * Load a mixin into the network object * - * @class Touch - * @static - */ - /** - * @event touch - * @param {Object} ev + * @param {Object} sourceVariable | this object has to contain functions. + * @private */ - Hammer.gestures.Touch = { - name: 'touch', - index: -Infinity, - defaults: { - /** - * call preventDefault at touchstart, and makes the element blocking by disabling the scrolling of the page, - * but it improves gestures like transforming and dragging. - * be careful with using this, it can be very annoying for users to be stuck on the page - * @property preventDefault - * @type {Boolean} - * @default false - */ - preventDefault: false, - - /** - * disable mouse events, so only touch (or pen!) input triggers events - * @property preventMouse - * @type {Boolean} - * @default false - */ - preventMouse: false - }, - handler: function touchGesture(ev, inst) { - if(inst.options.preventMouse && ev.pointerType == POINTER_MOUSE) { - ev.stopDetect(); - return; - } - - if(inst.options.preventDefault) { - ev.preventDefault(); - } - - if(ev.eventType == EVENT_TOUCH) { - inst.trigger('touch', ev); - } + exports._loadMixin = function (sourceVariable) { + for (var mixinFunction in sourceVariable) { + if (sourceVariable.hasOwnProperty(mixinFunction)) { + this[mixinFunction] = sourceVariable[mixinFunction]; } + } }; + /** - * @module gestures - */ - /** - * User want to scale or rotate with 2 fingers - * Preventing the default browser behavior is a good way to improve feel and working. This can be done with the - * `preventDefault` option. + * removes a mixin from the network object. * - * @class Transform - * @static - */ - /** - * @event transform - * @param {Object} ev - */ - /** - * @event transformstart - * @param {Object} ev + * @param {Object} sourceVariable | this object has to contain functions. + * @private */ + exports._clearMixin = function (sourceVariable) { + for (var mixinFunction in sourceVariable) { + if (sourceVariable.hasOwnProperty(mixinFunction)) { + this[mixinFunction] = undefined; + } + } + }; + + /** - * @event transformend - * @param {Object} ev + * Mixin the physics system and initialize the parameters required. + * + * @private */ + exports._loadPhysicsSystem = function () { + this._loadMixin(PhysicsMixin); + this._loadSelectedForceSolver(); + if (this.constants.configurePhysics == true) { + this._loadPhysicsConfiguration(); + } + }; + + /** - * @event pinchin - * @param {Object} ev + * Mixin the cluster system and initialize the parameters required. + * + * @private */ + exports._loadClusterSystem = function () { + this.clusterSession = 0; + this.hubThreshold = 5; + this._loadMixin(ClusterMixin); + }; + + /** - * @event pinchout - * @param {Object} ev + * Mixin the sector system and initialize the parameters required + * + * @private */ + exports._loadSectorSystem = function () { + this.sectors = {}; + this.activeSector = ["default"]; + this.sectors["active"] = {}; + this.sectors["active"]["default"] = {"nodes": {}, + "edges": {}, + "nodeIndices": [], + "formationScale": 1.0, + "drawingNode": undefined }; + this.sectors["frozen"] = {}; + this.sectors["support"] = {"nodes": {}, + "edges": {}, + "nodeIndices": [], + "formationScale": 1.0, + "drawingNode": undefined }; + + this.nodeIndices = this.sectors["active"]["default"]["nodeIndices"]; // the node indices list is used to speed up the computation of the repulsion fields + + this._loadMixin(SectorsMixin); + }; + + /** - * @event rotate - * @param {Object} ev + * Mixin the selection system and initialize the parameters required + * + * @private */ + exports._loadSelectionSystem = function () { + this.selectionObj = {nodes: {}, edges: {}}; + + this._loadMixin(SelectionMixin); + }; + /** - * @param {String} name + * Mixin the navigationUI (User Interface) system and initialize the parameters required + * + * @private */ - (function(name) { - var triggered = false; + exports._loadManipulationSystem = function () { + // reset global variables -- these are used by the selection of nodes and edges. + this.blockConnectingEdgeSelection = false; + this.forceAppendSelection = false; - function transformGesture(ev, inst) { - switch(ev.eventType) { - case EVENT_START: - triggered = false; - break; + if (this.constants.dataManipulation.enabled == true) { + // load the manipulator HTML elements. All styling done in css. + if (this.manipulationDiv === undefined) { + this.manipulationDiv = document.createElement('div'); + this.manipulationDiv.className = 'network-manipulationDiv'; + if (this.editMode == true) { + this.manipulationDiv.style.display = "block"; + } + else { + this.manipulationDiv.style.display = "none"; + } + this.frame.appendChild(this.manipulationDiv); + } - case EVENT_MOVE: - // at least multitouch - if(ev.touches.length < 2) { - return; - } + if (this.editModeDiv === undefined) { + this.editModeDiv = document.createElement('div'); + this.editModeDiv.className = 'network-manipulation-editMode'; + if (this.editMode == true) { + this.editModeDiv.style.display = "none"; + } + else { + this.editModeDiv.style.display = "block"; + } + this.frame.appendChild(this.editModeDiv); + } - var scaleThreshold = Math.abs(1 - ev.scale); - var rotationThreshold = Math.abs(ev.rotation); + if (this.closeDiv === undefined) { + this.closeDiv = document.createElement('div'); + this.closeDiv.className = 'network-manipulation-closeDiv'; + this.closeDiv.style.display = this.manipulationDiv.style.display; + this.frame.appendChild(this.closeDiv); + } - // when the distance we moved is too small we skip this gesture - // or we can be already in dragging - if(scaleThreshold < inst.options.transformMinScale && - rotationThreshold < inst.options.transformMinRotation) { - return; - } + // load the manipulation functions + this._loadMixin(ManipulationMixin); - // we are transforming! - Detection.current.name = name; + // create the manipulator toolbar + this._createManipulatorBar(); + } + else { + if (this.manipulationDiv !== undefined) { + // removes all the bindings and overloads + this._createManipulatorBar(); - // first time, trigger dragstart event - if(!triggered) { - inst.trigger(name + 'start', ev); - triggered = true; - } + // remove the manipulation divs + this.frame.removeChild(this.manipulationDiv); + this.frame.removeChild(this.editModeDiv); + this.frame.removeChild(this.closeDiv); - inst.trigger(name, ev); // basic transform event + this.manipulationDiv = undefined; + this.editModeDiv = undefined; + this.closeDiv = undefined; + // remove the mixin functions + this._clearMixin(ManipulationMixin); + } + } + }; - // trigger rotate event - if(rotationThreshold > inst.options.transformMinRotation) { - inst.trigger('rotate', ev); - } - // trigger pinch event - if(scaleThreshold > inst.options.transformMinScale) { - inst.trigger('pinch', ev); - inst.trigger('pinch' + (ev.scale < 1 ? 'in' : 'out'), ev); - } - break; + /** + * Mixin the navigation (User Interface) system and initialize the parameters required + * + * @private + */ + exports._loadNavigationControls = function () { + this._loadMixin(NavigationMixin); + // the clean function removes the button divs, this is done to remove the bindings. + this._cleanNavigation(); + if (this.constants.navigation.enabled == true) { + this._loadNavigationElements(); + } + }; - case EVENT_RELEASE: - if(triggered && ev.changedLength < 2) { - inst.trigger(name + 'end', ev); - triggered = false; - } - break; - } - } - Hammer.gestures.Transform = { - name: name, - index: 45, - defaults: { - /** - * minimal scale factor, no scale is 1, zoomin is to 0 and zoomout until higher then 1 - * @property transformMinScale - * @type {Number} - * @default 0.01 - */ - transformMinScale: 0.01, + /** + * Mixin the hierarchical layout system. + * + * @private + */ + exports._loadHierarchySystem = function () { + this._loadMixin(HierarchicalLayoutMixin); + }; - /** - * rotation in degrees - * @property transformMinRotation - * @type {Number} - * @default 1 - */ - transformMinRotation: 1 - }, - handler: transformGesture - }; - })('transform'); +/***/ }, +/* 60 */ +/***/ function(module, exports, __webpack_require__) { + + var util = __webpack_require__(1); + var RepulsionMixin = __webpack_require__(61); + var HierarchialRepulsionMixin = __webpack_require__(62); + var BarnesHutMixin = __webpack_require__(63); /** - * @module hammer + * Toggling barnes Hut calculation on and off. + * + * @private */ + exports._toggleBarnesHut = function () { + this.constants.physics.barnesHut.enabled = !this.constants.physics.barnesHut.enabled; + this._loadSelectedForceSolver(); + this.moving = true; + this.start(); + }; - // AMD export - if(true) { - !(__WEBPACK_AMD_DEFINE_RESULT__ = function() { - return Hammer; - }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - // commonjs export - } else if(typeof module !== 'undefined' && module.exports) { - module.exports = Hammer; - // browser export - } else { - window.Hammer = Hammer; - } - })(window); + /** + * This loads the node force solver based on the barnes hut or repulsion algorithm + * + * @private + */ + exports._loadSelectedForceSolver = function () { + // this overloads the this._calculateNodeForces + if (this.constants.physics.barnesHut.enabled == true) { + this._clearMixin(RepulsionMixin); + this._clearMixin(HierarchialRepulsionMixin); + + this.constants.physics.centralGravity = this.constants.physics.barnesHut.centralGravity; + this.constants.physics.springLength = this.constants.physics.barnesHut.springLength; + this.constants.physics.springConstant = this.constants.physics.barnesHut.springConstant; + this.constants.physics.damping = this.constants.physics.barnesHut.damping; + + this._loadMixin(BarnesHutMixin); + } + else if (this.constants.physics.hierarchicalRepulsion.enabled == true) { + this._clearMixin(BarnesHutMixin); + this._clearMixin(RepulsionMixin); + + this.constants.physics.centralGravity = this.constants.physics.hierarchicalRepulsion.centralGravity; + this.constants.physics.springLength = this.constants.physics.hierarchicalRepulsion.springLength; + this.constants.physics.springConstant = this.constants.physics.hierarchicalRepulsion.springConstant; + this.constants.physics.damping = this.constants.physics.hierarchicalRepulsion.damping; + + this._loadMixin(HierarchialRepulsionMixin); + } + else { + this._clearMixin(BarnesHutMixin); + this._clearMixin(HierarchialRepulsionMixin); + this.barnesHutTree = undefined; + + this.constants.physics.centralGravity = this.constants.physics.repulsion.centralGravity; + this.constants.physics.springLength = this.constants.physics.repulsion.springLength; + this.constants.physics.springConstant = this.constants.physics.repulsion.springConstant; + this.constants.physics.damping = this.constants.physics.repulsion.damping; -/***/ }, -/* 60 */ -/***/ function(module, exports, __webpack_require__) { + this._loadMixin(RepulsionMixin); + } + }; /** - * Creation of the ClusterMixin var. + * Before calculating the forces, we check if we need to cluster to keep up performance and we check + * if there is more than one node. If it is just one node, we dont calculate anything. * - * This contains all the functions the Network object can use to employ clustering + * @private */ + exports._initializeForceCalculation = function () { + // stop calculation if there is only one node + if (this.nodeIndices.length == 1) { + this.nodes[this.nodeIndices[0]]._setForce(0, 0); + } + else { + // if there are too many nodes on screen, we cluster without repositioning + if (this.nodeIndices.length > this.constants.clustering.clusterThreshold && this.constants.clustering.enabled == true) { + this.clusterToFit(this.constants.clustering.reduceToNodes, false); + } - /** - * This is only called in the constructor of the network object - * - */ - exports.startWithClustering = function() { - // cluster if the data set is big - this.clusterToFit(this.constants.clustering.initialMaxNodes, true); - - // updates the lables after clustering - this.updateLabels(); - - // this is called here because if clusterin is disabled, the start and stabilize are called in - // the setData function. - if (this.stabilize) { - this._stabilize(); - } - this.start(); + // we now start the force calculation + this._calculateForces(); + } }; + /** - * This function clusters until the initialMaxNodes has been reached - * - * @param {Number} maxNumberOfNodes - * @param {Boolean} reposition + * Calculate the external forces acting on the nodes + * Forces are caused by: edges, repulsing forces between nodes, gravity + * @private */ - exports.clusterToFit = function(maxNumberOfNodes, reposition) { - var numberOfNodes = this.nodeIndices.length; + exports._calculateForces = function () { + // Gravity is required to keep separated groups from floating off + // the forces are reset to zero in this loop by using _setForce instead + // of _addForce - var maxLevels = 50; - var level = 0; + this._calculateGravitationalForces(); + this._calculateNodeForces(); - // we first cluster the hubs, then we pull in the outliers, repeat - while (numberOfNodes > maxNumberOfNodes && level < maxLevels) { - if (level % 3 == 0) { - this.forceAggregateHubs(true); - this.normalizeClusterLevels(); + if (this.constants.physics.springConstant > 0) { + if (this.constants.smoothCurves.enabled == true && this.constants.smoothCurves.dynamic == true) { + this._calculateSpringForcesWithSupport(); } else { - this.increaseClusterLevel(); // this also includes a cluster normalization + if (this.constants.physics.hierarchicalRepulsion.enabled == true) { + this._calculateHierarchicalSpringForces(); + } + else { + this._calculateSpringForces(); + } } - - numberOfNodes = this.nodeIndices.length; - level += 1; - } - - // after the clustering we reposition the nodes to reduce the initial chaos - if (level > 0 && reposition == true) { - this.repositionNodes(); } - this._updateCalculationNodes(); }; + /** - * This function can be called to open up a specific cluster. It is only called by - * It will unpack the cluster back one level. + * Smooth curves are created by adding invisible nodes in the center of the edges. These nodes are also + * handled in the calculateForces function. We then use a quadratic curve with the center node as control. + * This function joins the datanodes and invisible (called support) nodes into one object. + * We do this so we do not contaminate this.nodes with the support nodes. * - * @param node | Node object: cluster to open. + * @private */ - exports.openCluster = function(node) { - var isMovingBeforeClustering = this.moving; - if (node.clusterSize > this.constants.clustering.sectorThreshold && this._nodeInActiveArea(node) && - !(this._sector() == "default" && this.nodeIndices.length == 1)) { - // this loads a new sector, loads the nodes and edges and nodeIndices of it. - this._addSector(node); - var level = 0; + exports._updateCalculationNodes = function () { + if (this.constants.smoothCurves.enabled == true && this.constants.smoothCurves.dynamic == true) { + this.calculationNodes = {}; + this.calculationNodeIndices = []; - // we decluster until we reach a decent number of nodes - while ((this.nodeIndices.length < this.constants.clustering.initialMaxNodes) && (level < 10)) { - this.decreaseClusterLevel(); - level += 1; + for (var nodeId in this.nodes) { + if (this.nodes.hasOwnProperty(nodeId)) { + this.calculationNodes[nodeId] = this.nodes[nodeId]; + } + } + var supportNodes = this.sectors['support']['nodes']; + for (var supportNodeId in supportNodes) { + if (supportNodes.hasOwnProperty(supportNodeId)) { + if (this.edges.hasOwnProperty(supportNodes[supportNodeId].parentEdgeId)) { + this.calculationNodes[supportNodeId] = supportNodes[supportNodeId]; + } + else { + supportNodes[supportNodeId]._setForce(0, 0); + } + } } + for (var idx in this.calculationNodes) { + if (this.calculationNodes.hasOwnProperty(idx)) { + this.calculationNodeIndices.push(idx); + } + } } else { - this._expandClusterNode(node,false,true); - - // update the index list, dynamic edges and labels - this._updateNodeIndexList(); - this._updateDynamicEdges(); - this._updateCalculationNodes(); - this.updateLabels(); - } - - // if the simulation was settled, we restart the simulation if a cluster has been formed or expanded - if (this.moving != isMovingBeforeClustering) { - this.start(); + this.calculationNodes = this.nodes; + this.calculationNodeIndices = this.nodeIndices; } }; /** - * This calls the updateClustes with default arguments + * this function applies the central gravity effect to keep groups from floating off + * + * @private */ - exports.updateClustersDefault = function() { - if (this.constants.clustering.enabled == true) { - this.updateClusters(0,false,false); + exports._calculateGravitationalForces = function () { + var dx, dy, distance, node, i; + var nodes = this.calculationNodes; + var gravity = this.constants.physics.centralGravity; + var gravityForce = 0; + + for (i = 0; i < this.calculationNodeIndices.length; i++) { + node = nodes[this.calculationNodeIndices[i]]; + node.damping = this.constants.physics.damping; // possibly add function to alter damping properties of clusters. + // gravity does not apply when we are in a pocket sector + if (this._sector() == "default" && gravity != 0) { + dx = -node.x; + dy = -node.y; + distance = Math.sqrt(dx * dx + dy * dy); + + gravityForce = (distance == 0) ? 0 : (gravity / distance); + node.fx = dx * gravityForce; + node.fy = dy * gravityForce; + } + else { + node.fx = 0; + node.fy = 0; + } } }; - /** - * This function can be called to increase the cluster level. This means that the nodes with only one edge connection will - * be clustered with their connected node. This can be repeated as many times as needed. - * This can be called externally (by a keybind for instance) to reduce the complexity of big datasets. - */ - exports.increaseClusterLevel = function() { - this.updateClusters(-1,false,true); - }; /** - * This function can be called to decrease the cluster level. This means that the nodes with only one edge connection will - * be unpacked if they are a cluster. This can be repeated as many times as needed. - * This can be called externally (by a key-bind for instance) to look into clusters without zooming. + * this function calculates the effects of the springs in the case of unsmooth curves. + * + * @private */ - exports.decreaseClusterLevel = function() { - this.updateClusters(1,false,true); + exports._calculateSpringForces = function () { + var edgeLength, edge, edgeId; + var dx, dy, fx, fy, springForce, distance; + var edges = this.edges; + + // forces caused by the edges, modelled as springs + for (edgeId in edges) { + if (edges.hasOwnProperty(edgeId)) { + edge = edges[edgeId]; + if (edge.connected) { + // only calculate forces if nodes are in the same sector + if (this.nodes.hasOwnProperty(edge.toId) && this.nodes.hasOwnProperty(edge.fromId)) { + edgeLength = edge.physics.springLength; + // this implies that the edges between big clusters are longer + edgeLength += (edge.to.clusterSize + edge.from.clusterSize - 2) * this.constants.clustering.edgeGrowth; + + dx = (edge.from.x - edge.to.x); + dy = (edge.from.y - edge.to.y); + distance = Math.sqrt(dx * dx + dy * dy); + + if (distance == 0) { + distance = 0.01; + } + + // the 1/distance is so the fx and fy can be calculated without sine or cosine. + springForce = this.constants.physics.springConstant * (edgeLength - distance) / distance; + + fx = dx * springForce; + fy = dy * springForce; + + edge.from.fx += fx; + edge.from.fy += fy; + edge.to.fx -= fx; + edge.to.fy -= fy; + } + } + } + } }; + + /** - * This is the main clustering function. It clusters and declusters on zoom or forced - * This function clusters on zoom, it can be called with a predefined zoom direction - * If out, check if we can form clusters, if in, check if we can open clusters. - * This function is only called from _zoom() - * - * @param {Number} zoomDirection | -1 / 0 / +1 for zoomOut / determineByZoom / zoomIn - * @param {Boolean} recursive | enabled or disable recursive calling of the opening of clusters - * @param {Boolean} force | enabled or disable forcing - * @param {Boolean} doNotStart | if true do not call start + * This function calculates the springforces on the nodes, accounting for the support nodes. * + * @private */ - exports.updateClusters = function(zoomDirection,recursive,force,doNotStart) { - var isMovingBeforeClustering = this.moving; - var amountOfNodes = this.nodeIndices.length; + exports._calculateSpringForcesWithSupport = function () { + var edgeLength, edge, edgeId, combinedClusterSize; + var edges = this.edges; - // on zoom out collapse the sector if the scale is at the level the sector was made - if (this.previousScale > this.scale && zoomDirection == 0) { - this._collapseSector(); - } + // forces caused by the edges, modelled as springs + for (edgeId in edges) { + if (edges.hasOwnProperty(edgeId)) { + edge = edges[edgeId]; + if (edge.connected) { + // only calculate forces if nodes are in the same sector + if (this.nodes.hasOwnProperty(edge.toId) && this.nodes.hasOwnProperty(edge.fromId)) { + if (edge.via != null) { + var node1 = edge.to; + var node2 = edge.via; + var node3 = edge.from; - // check if we zoom in or out - if (this.previousScale > this.scale || zoomDirection == -1) { // zoom out - // forming clusters when forced pulls outliers in. When not forced, the edge length of the - // outer nodes determines if it is being clustered - this._formClusters(force); - } - else if (this.previousScale < this.scale || zoomDirection == 1) { // zoom in - if (force == true) { - // _openClusters checks for each node if the formationScale of the cluster is smaller than - // the current scale and if so, declusters. When forced, all clusters are reduced by one step - this._openClusters(recursive,force); - } - else { - // if a cluster takes up a set percentage of the active window - this._openClustersBySize(); - } - } - this._updateNodeIndexList(); + edgeLength = edge.physics.springLength; - // if a cluster was NOT formed and the user zoomed out, we try clustering by hubs - if (this.nodeIndices.length == amountOfNodes && (this.previousScale > this.scale || zoomDirection == -1)) { - this._aggregateHubs(force); - this._updateNodeIndexList(); - } + combinedClusterSize = node1.clusterSize + node3.clusterSize - 2; - // we now reduce chains. - if (this.previousScale > this.scale || zoomDirection == -1) { // zoom out - this.handleChains(); - this._updateNodeIndexList(); + // this implies that the edges between big clusters are longer + edgeLength += combinedClusterSize * this.constants.clustering.edgeGrowth; + this._calculateSpringForce(node1, node2, 0.5 * edgeLength); + this._calculateSpringForce(node2, node3, 0.5 * edgeLength); + } + } + } + } } + }; - this.previousScale = this.scale; - // rest of the update the index list, dynamic edges and labels - this._updateDynamicEdges(); - this.updateLabels(); + /** + * This is the code actually performing the calculation for the function above. It is split out to avoid repetition. + * + * @param node1 + * @param node2 + * @param edgeLength + * @private + */ + exports._calculateSpringForce = function (node1, node2, edgeLength) { + var dx, dy, fx, fy, springForce, distance; - // if a cluster was formed, we increase the clusterSession - if (this.nodeIndices.length < amountOfNodes) { // this means a clustering operation has taken place - this.clusterSession += 1; - // if clusters have been made, we normalize the cluster level - this.normalizeClusterLevels(); - } + dx = (node1.x - node2.x); + dy = (node1.y - node2.y); + distance = Math.sqrt(dx * dx + dy * dy); - if (doNotStart == false || doNotStart === undefined) { - // if the simulation was settled, we restart the simulation if a cluster has been formed or expanded - if (this.moving != isMovingBeforeClustering) { - this.start(); - } + if (distance == 0) { + distance = 0.01; } - this._updateCalculationNodes(); + // the 1/distance is so the fx and fy can be calculated without sine or cosine. + springForce = this.constants.physics.springConstant * (edgeLength - distance) / distance; + + fx = dx * springForce; + fy = dy * springForce; + + node1.fx += fx; + node1.fy += fy; + node2.fx -= fx; + node2.fy -= fy; }; + /** - * This function handles the chains. It is called on every updateClusters(). + * Load the HTML for the physics config and bind it + * @private */ - exports.handleChains = function() { - // after clustering we check how many chains there are - var chainPercentage = this._getChainFraction(); - if (chainPercentage > this.constants.clustering.chainThreshold) { - this._reduceAmountOfChains(1 - this.constants.clustering.chainThreshold / chainPercentage) + exports._loadPhysicsConfiguration = function () { + if (this.physicsConfiguration === undefined) { + this.backupConstants = {}; + util.deepExtend(this.backupConstants,this.constants); + + var hierarchicalLayoutDirections = ["LR", "RL", "UD", "DU"]; + this.physicsConfiguration = document.createElement('div'); + this.physicsConfiguration.className = "PhysicsConfiguration"; + this.physicsConfiguration.innerHTML = '' + + '' + + '' + + '' + + '' + + '' + + '' + + '
Simulation Mode:
Barnes HutRepulsionHierarchical
' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '
Options:
' + this.containerElement.parentElement.insertBefore(this.physicsConfiguration, this.containerElement); + this.optionsDiv = document.createElement("div"); + this.optionsDiv.style.fontSize = "14px"; + this.optionsDiv.style.fontFamily = "verdana"; + this.containerElement.parentElement.insertBefore(this.optionsDiv, this.containerElement); + + var rangeElement; + rangeElement = document.getElementById('graph_BH_gc'); + rangeElement.onchange = showValueOfRange.bind(this, 'graph_BH_gc', -1, "physics_barnesHut_gravitationalConstant"); + rangeElement = document.getElementById('graph_BH_cg'); + rangeElement.onchange = showValueOfRange.bind(this, 'graph_BH_cg', 1, "physics_centralGravity"); + rangeElement = document.getElementById('graph_BH_sc'); + rangeElement.onchange = showValueOfRange.bind(this, 'graph_BH_sc', 1, "physics_springConstant"); + rangeElement = document.getElementById('graph_BH_sl'); + rangeElement.onchange = showValueOfRange.bind(this, 'graph_BH_sl', 1, "physics_springLength"); + rangeElement = document.getElementById('graph_BH_damp'); + rangeElement.onchange = showValueOfRange.bind(this, 'graph_BH_damp', 1, "physics_damping"); + + rangeElement = document.getElementById('graph_R_nd'); + rangeElement.onchange = showValueOfRange.bind(this, 'graph_R_nd', 1, "physics_repulsion_nodeDistance"); + rangeElement = document.getElementById('graph_R_cg'); + rangeElement.onchange = showValueOfRange.bind(this, 'graph_R_cg', 1, "physics_centralGravity"); + rangeElement = document.getElementById('graph_R_sc'); + rangeElement.onchange = showValueOfRange.bind(this, 'graph_R_sc', 1, "physics_springConstant"); + rangeElement = document.getElementById('graph_R_sl'); + rangeElement.onchange = showValueOfRange.bind(this, 'graph_R_sl', 1, "physics_springLength"); + rangeElement = document.getElementById('graph_R_damp'); + rangeElement.onchange = showValueOfRange.bind(this, 'graph_R_damp', 1, "physics_damping"); + + rangeElement = document.getElementById('graph_H_nd'); + rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_nd', 1, "physics_hierarchicalRepulsion_nodeDistance"); + rangeElement = document.getElementById('graph_H_cg'); + rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_cg', 1, "physics_centralGravity"); + rangeElement = document.getElementById('graph_H_sc'); + rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_sc', 1, "physics_springConstant"); + rangeElement = document.getElementById('graph_H_sl'); + rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_sl', 1, "physics_springLength"); + rangeElement = document.getElementById('graph_H_damp'); + rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_damp', 1, "physics_damping"); + rangeElement = document.getElementById('graph_H_direction'); + rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_direction', hierarchicalLayoutDirections, "hierarchicalLayout_direction"); + rangeElement = document.getElementById('graph_H_levsep'); + rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_levsep', 1, "hierarchicalLayout_levelSeparation"); + rangeElement = document.getElementById('graph_H_nspac'); + rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_nspac', 1, "hierarchicalLayout_nodeSpacing"); + + var radioButton1 = document.getElementById("graph_physicsMethod1"); + var radioButton2 = document.getElementById("graph_physicsMethod2"); + var radioButton3 = document.getElementById("graph_physicsMethod3"); + radioButton2.checked = true; + if (this.constants.physics.barnesHut.enabled) { + radioButton1.checked = true; + } + if (this.constants.hierarchicalLayout.enabled) { + radioButton3.checked = true; + } + + var graph_toggleSmooth = document.getElementById("graph_toggleSmooth"); + var graph_repositionNodes = document.getElementById("graph_repositionNodes"); + var graph_generateOptions = document.getElementById("graph_generateOptions"); + + graph_toggleSmooth.onclick = graphToggleSmoothCurves.bind(this); + graph_repositionNodes.onclick = graphRepositionNodes.bind(this); + graph_generateOptions.onclick = graphGenerateOptions.bind(this); + if (this.constants.smoothCurves == true && this.constants.dynamicSmoothCurves == false) { + graph_toggleSmooth.style.background = "#A4FF56"; + } + else { + graph_toggleSmooth.style.background = "#FF8532"; + } + + + switchConfigurations.apply(this); + radioButton1.onchange = switchConfigurations.bind(this); + radioButton2.onchange = switchConfigurations.bind(this); + radioButton3.onchange = switchConfigurations.bind(this); } }; /** - * this functions starts clustering by hubs - * The minimum hub threshold is set globally + * This overwrites the this.constants. * + * @param constantsVariableName + * @param value * @private */ - exports._aggregateHubs = function(force) { - this._getHubSize(); - this._formClustersByHub(force,false); + exports._overWriteGraphConstants = function (constantsVariableName, value) { + var nameArray = constantsVariableName.split("_"); + if (nameArray.length == 1) { + this.constants[nameArray[0]] = value; + } + else if (nameArray.length == 2) { + this.constants[nameArray[0]][nameArray[1]] = value; + } + else if (nameArray.length == 3) { + this.constants[nameArray[0]][nameArray[1]][nameArray[2]] = value; + } }; /** - * This function is fired by keypress. It forces hubs to form. - * + * this function is bound to the toggle smooth curves button. That is also why it is not in the prototype. */ - exports.forceAggregateHubs = function(doNotStart) { - var isMovingBeforeClustering = this.moving; - var amountOfNodes = this.nodeIndices.length; - - this._aggregateHubs(true); - - // update the index list, dynamic edges and labels - this._updateNodeIndexList(); - this._updateDynamicEdges(); - this.updateLabels(); - - // if a cluster was formed, we increase the clusterSession - if (this.nodeIndices.length != amountOfNodes) { - this.clusterSession += 1; - } + function graphToggleSmoothCurves () { + this.constants.smoothCurves.enabled = !this.constants.smoothCurves.enabled; + var graph_toggleSmooth = document.getElementById("graph_toggleSmooth"); + if (this.constants.smoothCurves.enabled == true) {graph_toggleSmooth.style.background = "#A4FF56";} + else {graph_toggleSmooth.style.background = "#FF8532";} - if (doNotStart == false || doNotStart === undefined) { - // if the simulation was settled, we restart the simulation if a cluster has been formed or expanded - if (this.moving != isMovingBeforeClustering) { - this.start(); - } - } - }; + this._configureSmoothCurves(false); + } /** - * If a cluster takes up more than a set percentage of the screen, open the cluster + * this function is used to scramble the nodes * - * @private */ - exports._openClustersBySize = function() { - for (var nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - var node = this.nodes[nodeId]; - if (node.inView() == true) { - if ((node.width*this.scale > this.constants.clustering.screenSizeThreshold * this.frame.canvas.clientWidth) || - (node.height*this.scale > this.constants.clustering.screenSizeThreshold * this.frame.canvas.clientHeight)) { - this.openCluster(node); - } - } + function graphRepositionNodes () { + for (var nodeId in this.calculationNodes) { + if (this.calculationNodes.hasOwnProperty(nodeId)) { + this.calculationNodes[nodeId].vx = 0; this.calculationNodes[nodeId].vy = 0; + this.calculationNodes[nodeId].fx = 0; this.calculationNodes[nodeId].fy = 0; } } - }; - - - /** - * This function loops over all nodes in the nodeIndices list. For each node it checks if it is a cluster and if it - * has to be opened based on the current zoom level. - * - * @private - */ - exports._openClusters = function(recursive,force) { - for (var i = 0; i < this.nodeIndices.length; i++) { - var node = this.nodes[this.nodeIndices[i]]; - this._expandClusterNode(node,recursive,force); - this._updateCalculationNodes(); + if (this.constants.hierarchicalLayout.enabled == true) { + this._setupHierarchicalLayout(); + showValueOfRange.call(this, 'graph_H_nd', 1, "physics_hierarchicalRepulsion_nodeDistance"); + showValueOfRange.call(this, 'graph_H_cg', 1, "physics_centralGravity"); + showValueOfRange.call(this, 'graph_H_sc', 1, "physics_springConstant"); + showValueOfRange.call(this, 'graph_H_sl', 1, "physics_springLength"); + showValueOfRange.call(this, 'graph_H_damp', 1, "physics_damping"); } - }; + else { + this.repositionNodes(); + } + this.moving = true; + this.start(); + } /** - * This function checks if a node has to be opened. This is done by checking the zoom level. - * If the node contains child nodes, this function is recursively called on the child nodes as well. - * This recursive behaviour is optional and can be set by the recursive argument. - * - * @param {Node} parentNode | to check for cluster and expand - * @param {Boolean} recursive | enabled or disable recursive calling - * @param {Boolean} force | enabled or disable forcing - * @param {Boolean} [openAll] | This will recursively force all nodes in the parent to be released - * @private + * this is used to generate an options file from the playing with physics system. */ - exports._expandClusterNode = function(parentNode, recursive, force, openAll) { - // first check if node is a cluster - if (parentNode.clusterSize > 1) { - // this means that on a double tap event or a zoom event, the cluster fully unpacks if it is smaller than 20 - if (parentNode.clusterSize < this.constants.clustering.sectorThreshold) { - openAll = true; + function graphGenerateOptions () { + var options = "No options are required, default values used."; + var optionsSpecific = []; + var radioButton1 = document.getElementById("graph_physicsMethod1"); + var radioButton2 = document.getElementById("graph_physicsMethod2"); + if (radioButton1.checked == true) { + if (this.constants.physics.barnesHut.gravitationalConstant != this.backupConstants.physics.barnesHut.gravitationalConstant) {optionsSpecific.push("gravitationalConstant: " + this.constants.physics.barnesHut.gravitationalConstant);} + if (this.constants.physics.centralGravity != this.backupConstants.physics.barnesHut.centralGravity) {optionsSpecific.push("centralGravity: " + this.constants.physics.centralGravity);} + if (this.constants.physics.springLength != this.backupConstants.physics.barnesHut.springLength) {optionsSpecific.push("springLength: " + this.constants.physics.springLength);} + if (this.constants.physics.springConstant != this.backupConstants.physics.barnesHut.springConstant) {optionsSpecific.push("springConstant: " + this.constants.physics.springConstant);} + if (this.constants.physics.damping != this.backupConstants.physics.barnesHut.damping) {optionsSpecific.push("damping: " + this.constants.physics.damping);} + if (optionsSpecific.length != 0) { + options = "var options = {"; + options += "physics: {barnesHut: {"; + for (var i = 0; i < optionsSpecific.length; i++) { + options += optionsSpecific[i]; + if (i < optionsSpecific.length - 1) { + options += ", " + } + } + options += '}}' } - recursive = openAll ? true : recursive; - - // if the last child has been added on a smaller scale than current scale decluster - if (parentNode.formationScale < this.scale || force == true) { - // we will check if any of the contained child nodes should be removed from the cluster - for (var containedNodeId in parentNode.containedNodes) { - if (parentNode.containedNodes.hasOwnProperty(containedNodeId)) { - var childNode = parentNode.containedNodes[containedNodeId]; - - // force expand will expand the largest cluster size clusters. Since we cluster from outside in, we assume that - // the largest cluster is the one that comes from outside - if (force == true) { - if (childNode.clusterSession == parentNode.clusterSessions[parentNode.clusterSessions.length-1] - || openAll) { - this._expelChildFromParent(parentNode,containedNodeId,recursive,force,openAll); - } - } - else { - if (this._nodeInActiveArea(parentNode)) { - this._expelChildFromParent(parentNode,containedNodeId,recursive,force,openAll); - } - } + if (this.constants.smoothCurves.enabled != this.backupConstants.smoothCurves.enabled) { + if (optionsSpecific.length == 0) {options = "var options = {";} + else {options += ", "} + options += "smoothCurves: " + this.constants.smoothCurves.enabled; + } + if (options != "No options are required, default values used.") { + options += '};' + } + } + else if (radioButton2.checked == true) { + options = "var options = {"; + options += "physics: {barnesHut: {enabled: false}"; + if (this.constants.physics.repulsion.nodeDistance != this.backupConstants.physics.repulsion.nodeDistance) {optionsSpecific.push("nodeDistance: " + this.constants.physics.repulsion.nodeDistance);} + if (this.constants.physics.centralGravity != this.backupConstants.physics.repulsion.centralGravity) {optionsSpecific.push("centralGravity: " + this.constants.physics.centralGravity);} + if (this.constants.physics.springLength != this.backupConstants.physics.repulsion.springLength) {optionsSpecific.push("springLength: " + this.constants.physics.springLength);} + if (this.constants.physics.springConstant != this.backupConstants.physics.repulsion.springConstant) {optionsSpecific.push("springConstant: " + this.constants.physics.springConstant);} + if (this.constants.physics.damping != this.backupConstants.physics.repulsion.damping) {optionsSpecific.push("damping: " + this.constants.physics.damping);} + if (optionsSpecific.length != 0) { + options += ", repulsion: {"; + for (var i = 0; i < optionsSpecific.length; i++) { + options += optionsSpecific[i]; + if (i < optionsSpecific.length - 1) { + options += ", " } } + options += '}}' + } + if (optionsSpecific.length == 0) {options += "}"} + if (this.constants.smoothCurves != this.backupConstants.smoothCurves) { + options += ", smoothCurves: " + this.constants.smoothCurves; } + options += '};' } - }; - - /** - * ONLY CALLED FROM _expandClusterNode - * - * This function will expel a child_node from a parent_node. This is to de-cluster the node. This function will remove - * the child node from the parent contained_node object and put it back into the global nodes object. - * The same holds for the edge that was connected to the child node. It is moved back into the global edges object. - * - * @param {Node} parentNode | the parent node - * @param {String} containedNodeId | child_node id as it is contained in the containedNodes object of the parent node - * @param {Boolean} recursive | This will also check if the child needs to be expanded. - * With force and recursive both true, the entire cluster is unpacked - * @param {Boolean} force | This will disregard the zoom level and will expel this child from the parent - * @param {Boolean} openAll | This will recursively force all nodes in the parent to be released - * @private - */ - exports._expelChildFromParent = function(parentNode, containedNodeId, recursive, force, openAll) { - var childNode = parentNode.containedNodes[containedNodeId]; - - // if child node has been added on smaller scale than current, kick out - if (childNode.formationScale < this.scale || force == true) { - // unselect all selected items - this._unselectAll(); - - // put the child node back in the global nodes object - this.nodes[containedNodeId] = childNode; - - // release the contained edges from this childNode back into the global edges - this._releaseContainedEdges(parentNode,childNode); - - // reconnect rerouted edges to the childNode - this._connectEdgeBackToChild(parentNode,childNode); - - // validate all edges in dynamicEdges - this._validateEdges(parentNode); - - // undo the changes from the clustering operation on the parent node - parentNode.options.mass -= childNode.options.mass; - parentNode.clusterSize -= childNode.clusterSize; - parentNode.options.fontSize = Math.min(this.constants.clustering.maxFontSize, this.constants.nodes.fontSize + this.constants.clustering.fontSizeMultiplier*(parentNode.clusterSize-1)); - parentNode.dynamicEdgesLength = parentNode.dynamicEdges.length; - - // place the child node near the parent, not at the exact same location to avoid chaos in the system - childNode.x = parentNode.x + parentNode.growthIndicator * (0.5 - Math.random()); - childNode.y = parentNode.y + parentNode.growthIndicator * (0.5 - Math.random()); - - // remove node from the list - delete parentNode.containedNodes[containedNodeId]; - - // check if there are other childs with this clusterSession in the parent. - var othersPresent = false; - for (var childNodeId in parentNode.containedNodes) { - if (parentNode.containedNodes.hasOwnProperty(childNodeId)) { - if (parentNode.containedNodes[childNodeId].clusterSession == childNode.clusterSession) { - othersPresent = true; - break; + else { + options = "var options = {"; + if (this.constants.physics.hierarchicalRepulsion.nodeDistance != this.backupConstants.physics.hierarchicalRepulsion.nodeDistance) {optionsSpecific.push("nodeDistance: " + this.constants.physics.hierarchicalRepulsion.nodeDistance);} + if (this.constants.physics.centralGravity != this.backupConstants.physics.hierarchicalRepulsion.centralGravity) {optionsSpecific.push("centralGravity: " + this.constants.physics.centralGravity);} + if (this.constants.physics.springLength != this.backupConstants.physics.hierarchicalRepulsion.springLength) {optionsSpecific.push("springLength: " + this.constants.physics.springLength);} + if (this.constants.physics.springConstant != this.backupConstants.physics.hierarchicalRepulsion.springConstant) {optionsSpecific.push("springConstant: " + this.constants.physics.springConstant);} + if (this.constants.physics.damping != this.backupConstants.physics.hierarchicalRepulsion.damping) {optionsSpecific.push("damping: " + this.constants.physics.damping);} + if (optionsSpecific.length != 0) { + options += "physics: {hierarchicalRepulsion: {"; + for (var i = 0; i < optionsSpecific.length; i++) { + options += optionsSpecific[i]; + if (i < optionsSpecific.length - 1) { + options += ", "; } } + options += '}},'; } - // if there are no others, remove the cluster session from the list - if (othersPresent == false) { - parentNode.clusterSessions.pop(); + options += 'hierarchicalLayout: {'; + optionsSpecific = []; + if (this.constants.hierarchicalLayout.direction != this.backupConstants.hierarchicalLayout.direction) {optionsSpecific.push("direction: " + this.constants.hierarchicalLayout.direction);} + if (Math.abs(this.constants.hierarchicalLayout.levelSeparation) != this.backupConstants.hierarchicalLayout.levelSeparation) {optionsSpecific.push("levelSeparation: " + this.constants.hierarchicalLayout.levelSeparation);} + if (this.constants.hierarchicalLayout.nodeSpacing != this.backupConstants.hierarchicalLayout.nodeSpacing) {optionsSpecific.push("nodeSpacing: " + this.constants.hierarchicalLayout.nodeSpacing);} + if (optionsSpecific.length != 0) { + for (var i = 0; i < optionsSpecific.length; i++) { + options += optionsSpecific[i]; + if (i < optionsSpecific.length - 1) { + options += ", " + } + } + options += '}' } - - this._repositionBezierNodes(childNode); - // this._repositionBezierNodes(parentNode); - - // remove the clusterSession from the child node - childNode.clusterSession = 0; - - // recalculate the size of the node on the next time the node is rendered - parentNode.clearSizeCache(); - - // restart the simulation to reorganise all nodes - this.moving = true; + else { + options += "enabled:true}"; + } + options += '};' } - // check if a further expansion step is possible if recursivity is enabled - if (recursive == true) { - this._expandClusterNode(childNode,recursive,force,openAll); - } - }; + this.optionsDiv.innerHTML = options; + } /** - * position the bezier nodes at the center of the edges + * this is used to switch between barnesHut, repulsion and hierarchical. * - * @param node - * @private */ - exports._repositionBezierNodes = function(node) { - for (var i = 0; i < node.dynamicEdges.length; i++) { - node.dynamicEdges[i].positionBezierNode(); + function switchConfigurations () { + var ids = ["graph_BH_table", "graph_R_table", "graph_H_table"]; + var radioButton = document.querySelector('input[name="graph_physicsMethod"]:checked').value; + var tableId = "graph_" + radioButton + "_table"; + var table = document.getElementById(tableId); + table.style.display = "block"; + for (var i = 0; i < ids.length; i++) { + if (ids[i] != tableId) { + table = document.getElementById(ids[i]); + table.style.display = "none"; + } } - }; + this._restoreNodes(); + if (radioButton == "R") { + this.constants.hierarchicalLayout.enabled = false; + this.constants.physics.hierarchicalRepulsion.enabled = false; + this.constants.physics.barnesHut.enabled = false; + } + else if (radioButton == "H") { + if (this.constants.hierarchicalLayout.enabled == false) { + this.constants.hierarchicalLayout.enabled = true; + this.constants.physics.hierarchicalRepulsion.enabled = true; + this.constants.physics.barnesHut.enabled = false; + this.constants.smoothCurves.enabled = false; + this._setupHierarchicalLayout(); + } + } + else { + this.constants.hierarchicalLayout.enabled = false; + this.constants.physics.hierarchicalRepulsion.enabled = false; + this.constants.physics.barnesHut.enabled = true; + } + this._loadSelectedForceSolver(); + var graph_toggleSmooth = document.getElementById("graph_toggleSmooth"); + if (this.constants.smoothCurves.enabled == true) {graph_toggleSmooth.style.background = "#A4FF56";} + else {graph_toggleSmooth.style.background = "#FF8532";} + this.moving = true; + this.start(); + } /** - * This function checks if any nodes at the end of their trees have edges below a threshold length - * This function is called only from updateClusters() - * forceLevelCollapse ignores the length of the edge and collapses one level - * This means that a node with only one edge will be clustered with its connected node + * this generates the ranges depending on the iniital values. * - * @private - * @param {Boolean} force + * @param id + * @param map + * @param constantsVariableName */ - exports._formClusters = function(force) { - if (force == false) { - this._formClustersByZoom(); + function showValueOfRange (id,map,constantsVariableName) { + var valueId = id + "_value"; + var rangeValue = document.getElementById(id).value; + + if (Array.isArray(map)) { + document.getElementById(valueId).value = map[parseInt(rangeValue)]; + this._overWriteGraphConstants(constantsVariableName,map[parseInt(rangeValue)]); } else { - this._forceClustersByZoom(); + document.getElementById(valueId).value = parseInt(map) * parseFloat(rangeValue); + this._overWriteGraphConstants(constantsVariableName, parseInt(map) * parseFloat(rangeValue)); } - }; + if (constantsVariableName == "hierarchicalLayout_direction" || + constantsVariableName == "hierarchicalLayout_levelSeparation" || + constantsVariableName == "hierarchicalLayout_nodeSpacing") { + this._setupHierarchicalLayout(); + } + this.moving = true; + this.start(); + } + + +/***/ }, +/* 61 */ +/***/ function(module, exports, __webpack_require__) { /** - * This function handles the clustering by zooming out, this is based on a minimum edge distance + * Calculate the forces the nodes apply on each other based on a repulsion field. + * This field is linearly approximated. * * @private */ - exports._formClustersByZoom = function() { - var dx,dy,length, - minLength = this.constants.clustering.clusterEdgeThreshold/this.scale; + exports._calculateNodeForces = function () { + var dx, dy, angle, distance, fx, fy, combinedClusterSize, + repulsingForce, node1, node2, i, j; - // check if any edges are shorter than minLength and start the clustering - // the clustering favours the node with the larger mass - for (var edgeId in this.edges) { - if (this.edges.hasOwnProperty(edgeId)) { - var edge = this.edges[edgeId]; - if (edge.connected) { - if (edge.toId != edge.fromId) { - dx = (edge.to.x - edge.from.x); - dy = (edge.to.y - edge.from.y); - length = Math.sqrt(dx * dx + dy * dy); + var nodes = this.calculationNodes; + var nodeIndices = this.calculationNodeIndices; + // approximation constants + var a_base = -2 / 3; + var b = 4 / 3; - if (length < minLength) { - // first check which node is larger - var parentNode = edge.from; - var childNode = edge.to; - if (edge.to.options.mass > edge.from.options.mass) { - parentNode = edge.to; - childNode = edge.from; - } + // repulsing forces between nodes + var nodeDistance = this.constants.physics.repulsion.nodeDistance; + var minimumDistance = nodeDistance; - if (childNode.dynamicEdgesLength == 1) { - this._addToCluster(parentNode,childNode,false); - } - else if (parentNode.dynamicEdgesLength == 1) { - this._addToCluster(childNode,parentNode,false); - } - } + // we loop from i over all but the last entree in the array + // j loops from i+1 to the last. This way we do not double count any of the indices, nor i == j + for (i = 0; i < nodeIndices.length - 1; i++) { + node1 = nodes[nodeIndices[i]]; + for (j = i + 1; j < nodeIndices.length; j++) { + node2 = nodes[nodeIndices[j]]; + combinedClusterSize = node1.clusterSize + node2.clusterSize - 2; + + dx = node2.x - node1.x; + dy = node2.y - node1.y; + distance = Math.sqrt(dx * dx + dy * dy); + + minimumDistance = (combinedClusterSize == 0) ? nodeDistance : (nodeDistance * (1 + combinedClusterSize * this.constants.clustering.distanceAmplification)); + var a = a_base / minimumDistance; + if (distance < 2 * minimumDistance) { + if (distance < 0.5 * minimumDistance) { + repulsingForce = 1.0; } + else { + repulsingForce = a * distance + b; // linear approx of 1 / (1 + Math.exp((distance / minimumDistance - 1) * steepness)) + } + + // amplify the repulsion for clusters. + repulsingForce *= (combinedClusterSize == 0) ? 1 : 1 + combinedClusterSize * this.constants.clustering.forceAmplification; + repulsingForce = repulsingForce / distance; + + fx = dx * repulsingForce; + fy = dy * repulsingForce; + + node1.fx -= fx; + node1.fy -= fy; + node2.fx += fx; + node2.fy += fy; } } } }; + +/***/ }, +/* 62 */ +/***/ function(module, exports, __webpack_require__) { + /** - * This function forces the network to cluster all nodes with only one connecting edge to their - * connected node. + * Calculate the forces the nodes apply on eachother based on a repulsion field. + * This field is linearly approximated. * * @private */ - exports._forceClustersByZoom = function() { - for (var nodeId in this.nodes) { - // another node could have absorbed this child. - if (this.nodes.hasOwnProperty(nodeId)) { - var childNode = this.nodes[nodeId]; + exports._calculateNodeForces = function () { + var dx, dy, distance, fx, fy, + repulsingForce, node1, node2, i, j; - // the edges can be swallowed by another decrease - if (childNode.dynamicEdgesLength == 1 && childNode.dynamicEdges.length != 0) { - var edge = childNode.dynamicEdges[0]; - var parentNode = (edge.toId == childNode.id) ? this.nodes[edge.fromId] : this.nodes[edge.toId]; + var nodes = this.calculationNodes; + var nodeIndices = this.calculationNodeIndices; - // group to the largest node - if (childNode.id != parentNode.id) { - if (parentNode.options.mass > childNode.options.mass) { - this._addToCluster(parentNode,childNode,true); + // repulsing forces between nodes + var nodeDistance = this.constants.physics.hierarchicalRepulsion.nodeDistance; + + // we loop from i over all but the last entree in the array + // j loops from i+1 to the last. This way we do not double count any of the indices, nor i == j + for (i = 0; i < nodeIndices.length - 1; i++) { + node1 = nodes[nodeIndices[i]]; + for (j = i + 1; j < nodeIndices.length; j++) { + node2 = nodes[nodeIndices[j]]; + + // nodes only affect nodes on their level + if (node1.level == node2.level) { + + dx = node2.x - node1.x; + dy = node2.y - node1.y; + distance = Math.sqrt(dx * dx + dy * dy); + + + var steepness = 0.05; + if (distance < nodeDistance) { + repulsingForce = -Math.pow(steepness*distance,2) + Math.pow(steepness*nodeDistance,2); + } + else { + repulsingForce = 0; + } + // normalize force with + if (distance == 0) { + distance = 0.01; } else { - this._addToCluster(childNode,parentNode,true); + repulsingForce = repulsingForce / distance; } - } + fx = dx * repulsingForce; + fy = dy * repulsingForce; + + node1.fx -= fx; + node1.fy -= fy; + node2.fx += fx; + node2.fy += fy; } } } @@ -29444,3965 +29515,3786 @@ return /******/ (function(modules) { // webpackBootstrap /** - * To keep the nodes of roughly equal size we normalize the cluster levels. - * This function clusters a node to its smallest connected neighbour. + * this function calculates the effects of the springs in the case of unsmooth curves. * - * @param node * @private */ - exports._clusterToSmallestNeighbour = function(node) { - var smallestNeighbour = -1; - var smallestNeighbourNode = null; - for (var i = 0; i < node.dynamicEdges.length; i++) { - if (node.dynamicEdges[i] !== undefined) { - var neighbour = null; - if (node.dynamicEdges[i].fromId != node.id) { - neighbour = node.dynamicEdges[i].from; - } - else if (node.dynamicEdges[i].toId != node.id) { - neighbour = node.dynamicEdges[i].to; - } + exports._calculateHierarchicalSpringForces = function () { + var edgeLength, edge, edgeId; + var dx, dy, fx, fy, springForce, distance; + var edges = this.edges; + var nodes = this.calculationNodes; + var nodeIndices = this.calculationNodeIndices; - if (neighbour != null && smallestNeighbour > neighbour.clusterSessions.length) { - smallestNeighbour = neighbour.clusterSessions.length; - smallestNeighbourNode = neighbour; + + for (var i = 0; i < nodeIndices.length; i++) { + var node1 = nodes[nodeIndices[i]]; + node1.springFx = 0; + node1.springFy = 0; + } + + + // forces caused by the edges, modelled as springs + for (edgeId in edges) { + if (edges.hasOwnProperty(edgeId)) { + edge = edges[edgeId]; + if (edge.connected) { + // only calculate forces if nodes are in the same sector + if (this.nodes.hasOwnProperty(edge.toId) && this.nodes.hasOwnProperty(edge.fromId)) { + edgeLength = edge.physics.springLength; + // this implies that the edges between big clusters are longer + edgeLength += (edge.to.clusterSize + edge.from.clusterSize - 2) * this.constants.clustering.edgeGrowth; + + dx = (edge.from.x - edge.to.x); + dy = (edge.from.y - edge.to.y); + distance = Math.sqrt(dx * dx + dy * dy); + + if (distance == 0) { + distance = 0.01; + } + + // the 1/distance is so the fx and fy can be calculated without sine or cosine. + springForce = this.constants.physics.springConstant * (edgeLength - distance) / distance; + + fx = dx * springForce; + fy = dy * springForce; + + + + if (edge.to.level != edge.from.level) { + edge.to.springFx -= fx; + edge.to.springFy -= fy; + edge.from.springFx += fx; + edge.from.springFy += fy; + } + else { + var factor = 0.5; + edge.to.fx -= factor*fx; + edge.to.fy -= factor*fy; + edge.from.fx += factor*fx; + edge.from.fy += factor*fy; + } + } } } } - if (neighbour != null && this.nodes[neighbour.id] !== undefined) { - this._addToCluster(neighbour, node, true); + // normalize spring forces + var springForce = 1; + var springFx, springFy; + for (i = 0; i < nodeIndices.length; i++) { + var node = nodes[nodeIndices[i]]; + springFx = Math.min(springForce,Math.max(-springForce,node.springFx)); + springFy = Math.min(springForce,Math.max(-springForce,node.springFy)); + + node.fx += springFx; + node.fy += springFy; + } + + // retain energy balance + var totalFx = 0; + var totalFy = 0; + for (i = 0; i < nodeIndices.length; i++) { + var node = nodes[nodeIndices[i]]; + totalFx += node.fx; + totalFy += node.fy; + } + var correctionFx = totalFx / nodeIndices.length; + var correctionFy = totalFy / nodeIndices.length; + + for (i = 0; i < nodeIndices.length; i++) { + var node = nodes[nodeIndices[i]]; + node.fx -= correctionFx; + node.fy -= correctionFy; } + }; +/***/ }, +/* 63 */ +/***/ function(module, exports, __webpack_require__) { /** - * This function forms clusters from hubs, it loops over all nodes + * This function calculates the forces the nodes apply on eachother based on a gravitational model. + * The Barnes Hut method is used to speed up this N-body simulation. * - * @param {Boolean} force | Disregard zoom level - * @param {Boolean} onlyEqual | This only clusters a hub with a specific number of edges * @private */ - exports._formClustersByHub = function(force, onlyEqual) { - // we loop over all nodes in the list - for (var nodeId in this.nodes) { - // we check if it is still available since it can be used by the clustering in this loop - if (this.nodes.hasOwnProperty(nodeId)) { - this._formClusterFromHub(this.nodes[nodeId],force,onlyEqual); + exports._calculateNodeForces = function() { + if (this.constants.physics.barnesHut.gravitationalConstant != 0) { + var node; + var nodes = this.calculationNodes; + var nodeIndices = this.calculationNodeIndices; + var nodeCount = nodeIndices.length; + + this._formBarnesHutTree(nodes,nodeIndices); + + var barnesHutTree = this.barnesHutTree; + + // place the nodes one by one recursively + for (var i = 0; i < nodeCount; i++) { + node = nodes[nodeIndices[i]]; + if (node.options.mass > 0) { + // starting with root is irrelevant, it never passes the BarnesHut condition + this._getForceContribution(barnesHutTree.root.children.NW,node); + this._getForceContribution(barnesHutTree.root.children.NE,node); + this._getForceContribution(barnesHutTree.root.children.SW,node); + this._getForceContribution(barnesHutTree.root.children.SE,node); + } } } }; + /** - * This function forms a cluster from a specific preselected hub node + * This function traverses the barnesHutTree. It checks when it can approximate distant nodes with their center of mass. + * If a region contains a single node, we check if it is not itself, then we apply the force. * - * @param {Node} hubNode | the node we will cluster as a hub - * @param {Boolean} force | Disregard zoom level - * @param {Boolean} onlyEqual | This only clusters a hub with a specific number of edges - * @param {Number} [absorptionSizeOffset] | + * @param parentBranch + * @param node * @private */ - exports._formClusterFromHub = function(hubNode, force, onlyEqual, absorptionSizeOffset) { - if (absorptionSizeOffset === undefined) { - absorptionSizeOffset = 0; - } - // we decide if the node is a hub - if ((hubNode.dynamicEdgesLength >= this.hubThreshold && onlyEqual == false) || - (hubNode.dynamicEdgesLength == this.hubThreshold && onlyEqual == true)) { - // initialize variables - var dx,dy,length; - var minLength = this.constants.clustering.clusterEdgeThreshold/this.scale; - var allowCluster = false; - - // we create a list of edges because the dynamicEdges change over the course of this loop - var edgesIdarray = []; - var amountOfInitialEdges = hubNode.dynamicEdges.length; - for (var j = 0; j < amountOfInitialEdges; j++) { - edgesIdarray.push(hubNode.dynamicEdges[j].id); - } + exports._getForceContribution = function(parentBranch,node) { + // we get no force contribution from an empty region + if (parentBranch.childrenCount > 0) { + var dx,dy,distance; - // if the hub clustering is not forces, we check if one of the edges connected - // to a cluster is small enough based on the constants.clustering.clusterEdgeThreshold - if (force == false) { - allowCluster = false; - for (j = 0; j < amountOfInitialEdges; j++) { - var edge = this.edges[edgesIdarray[j]]; - if (edge !== undefined) { - if (edge.connected) { - if (edge.toId != edge.fromId) { - dx = (edge.to.x - edge.from.x); - dy = (edge.to.y - edge.from.y); - length = Math.sqrt(dx * dx + dy * dy); + // get the distance from the center of mass to the node. + dx = parentBranch.centerOfMass.x - node.x; + dy = parentBranch.centerOfMass.y - node.y; + distance = Math.sqrt(dx * dx + dy * dy); - if (length < minLength) { - allowCluster = true; - break; - } - } - } - } + // BarnesHut condition + // original condition : s/d < theta = passed === d/s > 1/theta = passed + // calcSize = 1/s --> d * 1/s > 1/theta = passed + if (distance * parentBranch.calcSize > this.constants.physics.barnesHut.theta) { + // duplicate code to reduce function calls to speed up program + if (distance == 0) { + distance = 0.1*Math.random(); + dx = distance; } + var gravityForce = this.constants.physics.barnesHut.gravitationalConstant * parentBranch.mass * node.options.mass / (distance * distance * distance); + var fx = dx * gravityForce; + var fy = dy * gravityForce; + node.fx += fx; + node.fy += fy; } - - // start the clustering if allowed - if ((!force && allowCluster) || force) { - // we loop over all edges INITIALLY connected to this hub - for (j = 0; j < amountOfInitialEdges; j++) { - edge = this.edges[edgesIdarray[j]]; - // the edge can be clustered by this function in a previous loop - if (edge !== undefined) { - var childNode = this.nodes[(edge.fromId == hubNode.id) ? edge.toId : edge.fromId]; - // we do not want hubs to merge with other hubs nor do we want to cluster itself. - if ((childNode.dynamicEdges.length <= (this.hubThreshold + absorptionSizeOffset)) && - (childNode.id != hubNode.id)) { - this._addToCluster(hubNode,childNode,force); + else { + // Did not pass the condition, go into children if available + if (parentBranch.childrenCount == 4) { + this._getForceContribution(parentBranch.children.NW,node); + this._getForceContribution(parentBranch.children.NE,node); + this._getForceContribution(parentBranch.children.SW,node); + this._getForceContribution(parentBranch.children.SE,node); + } + else { // parentBranch must have only one node, if it was empty we wouldnt be here + if (parentBranch.children.data.id != node.id) { // if it is not self + // duplicate code to reduce function calls to speed up program + if (distance == 0) { + distance = 0.5*Math.random(); + dx = distance; } + var gravityForce = this.constants.physics.barnesHut.gravitationalConstant * parentBranch.mass * node.options.mass / (distance * distance * distance); + var fx = dx * gravityForce; + var fy = dy * gravityForce; + node.fx += fx; + node.fy += fy; } } } } }; - - /** - * This function adds the child node to the parent node, creating a cluster if it is not already. + * This function constructs the barnesHut tree recursively. It creates the root, splits it and starts placing the nodes. * - * @param {Node} parentNode | this is the node that will house the child node - * @param {Node} childNode | this node will be deleted from the global this.nodes and stored in the parent node - * @param {Boolean} force | true will only update the remainingEdges at the very end of the clustering, ensuring single level collapse + * @param nodes + * @param nodeIndices * @private */ - exports._addToCluster = function(parentNode, childNode, force) { - // join child node in the parent node - parentNode.containedNodes[childNode.id] = childNode; + exports._formBarnesHutTree = function(nodes,nodeIndices) { + var node; + var nodeCount = nodeIndices.length; - // manage all the edges connected to the child and parent nodes - for (var i = 0; i < childNode.dynamicEdges.length; i++) { - var edge = childNode.dynamicEdges[i]; - if (edge.toId == parentNode.id || edge.fromId == parentNode.id) { // edge connected to parentNode - this._addToContainedEdges(parentNode,childNode,edge); - } - else { - this._connectEdgeToCluster(parentNode,childNode,edge); + var minX = Number.MAX_VALUE, + minY = Number.MAX_VALUE, + maxX =-Number.MAX_VALUE, + maxY =-Number.MAX_VALUE; + + // get the range of the nodes + for (var i = 0; i < nodeCount; i++) { + var x = nodes[nodeIndices[i]].x; + var y = nodes[nodeIndices[i]].y; + if (nodes[nodeIndices[i]].options.mass > 0) { + if (x < minX) { minX = x; } + if (x > maxX) { maxX = x; } + if (y < minY) { minY = y; } + if (y > maxY) { maxY = y; } } } - // a contained node has no dynamic edges. - childNode.dynamicEdges = []; - - // remove circular edges from clusters - this._containCircularEdgesFromNode(parentNode,childNode); - + // make the range a square + var sizeDiff = Math.abs(maxX - minX) - Math.abs(maxY - minY); // difference between X and Y + if (sizeDiff > 0) {minY -= 0.5 * sizeDiff; maxY += 0.5 * sizeDiff;} // xSize > ySize + else {minX += 0.5 * sizeDiff; maxX -= 0.5 * sizeDiff;} // xSize < ySize - // remove the childNode from the global nodes object - delete this.nodes[childNode.id]; - // update the properties of the child and parent - var massBefore = parentNode.options.mass; - childNode.clusterSession = this.clusterSession; - parentNode.options.mass += childNode.options.mass; - parentNode.clusterSize += childNode.clusterSize; - parentNode.options.fontSize = Math.min(this.constants.clustering.maxFontSize, this.constants.nodes.fontSize + this.constants.clustering.fontSizeMultiplier*parentNode.clusterSize); + var minimumTreeSize = 1e-5; + var rootSize = Math.max(minimumTreeSize,Math.abs(maxX - minX)); + var halfRootSize = 0.5 * rootSize; + var centerX = 0.5 * (minX + maxX), centerY = 0.5 * (minY + maxY); - // keep track of the clustersessions so we can open the cluster up as it has been formed. - if (parentNode.clusterSessions[parentNode.clusterSessions.length - 1] != this.clusterSession) { - parentNode.clusterSessions.push(this.clusterSession); - } + // construct the barnesHutTree + var barnesHutTree = { + root:{ + centerOfMass: {x:0, y:0}, + mass:0, + range: { + minX: centerX-halfRootSize,maxX:centerX+halfRootSize, + minY: centerY-halfRootSize,maxY:centerY+halfRootSize + }, + size: rootSize, + calcSize: 1 / rootSize, + children: { data:null}, + maxWidth: 0, + level: 0, + childrenCount: 4 + } + }; + this._splitBranch(barnesHutTree.root); - // forced clusters only open from screen size and double tap - if (force == true) { - // parentNode.formationScale = Math.pow(1 - (1.0/11.0),this.clusterSession+3); - parentNode.formationScale = 0; - } - else { - parentNode.formationScale = this.scale; // The latest child has been added on this scale + // place the nodes one by one recursively + for (i = 0; i < nodeCount; i++) { + node = nodes[nodeIndices[i]]; + if (node.options.mass > 0) { + this._placeInTree(barnesHutTree.root,node); + } } - // recalculate the size of the node on the next time the node is rendered - parentNode.clearSizeCache(); - - // set the pop-out scale for the childnode - parentNode.containedNodes[childNode.id].formationScale = parentNode.formationScale; - - // nullify the movement velocity of the child, this is to avoid hectic behaviour - childNode.clearVelocity(); - - // the mass has altered, preservation of energy dictates the velocity to be updated - parentNode.updateVelocity(massBefore); - - // restart the simulation to reorganise all nodes - this.moving = true; + // make global + this.barnesHutTree = barnesHutTree }; /** - * This function will apply the changes made to the remainingEdges during the formation of the clusters. - * This is a seperate function to allow for level-wise collapsing of the node barnesHutTree. - * It has to be called if a level is collapsed. It is called by _formClusters(). + * this updates the mass of a branch. this is increased by adding a node. + * + * @param parentBranch + * @param node * @private */ - exports._updateDynamicEdges = function() { - for (var i = 0; i < this.nodeIndices.length; i++) { - var node = this.nodes[this.nodeIndices[i]]; - node.dynamicEdgesLength = node.dynamicEdges.length; + exports._updateBranchMass = function(parentBranch, node) { + var totalMass = parentBranch.mass + node.options.mass; + var totalMassInv = 1/totalMass; + + parentBranch.centerOfMass.x = parentBranch.centerOfMass.x * parentBranch.mass + node.x * node.options.mass; + parentBranch.centerOfMass.x *= totalMassInv; + + parentBranch.centerOfMass.y = parentBranch.centerOfMass.y * parentBranch.mass + node.y * node.options.mass; + parentBranch.centerOfMass.y *= totalMassInv; + + parentBranch.mass = totalMass; + var biggestSize = Math.max(Math.max(node.height,node.radius),node.width); + parentBranch.maxWidth = (parentBranch.maxWidth < biggestSize) ? biggestSize : parentBranch.maxWidth; - // this corrects for multiple edges pointing at the same other node - var correction = 0; - if (node.dynamicEdgesLength > 1) { - for (var j = 0; j < node.dynamicEdgesLength - 1; j++) { - var edgeToId = node.dynamicEdges[j].toId; - var edgeFromId = node.dynamicEdges[j].fromId; - for (var k = j+1; k < node.dynamicEdgesLength; k++) { - if ((node.dynamicEdges[k].toId == edgeToId && node.dynamicEdges[k].fromId == edgeFromId) || - (node.dynamicEdges[k].fromId == edgeToId && node.dynamicEdges[k].toId == edgeFromId)) { - correction += 1; - } - } - } - } - node.dynamicEdgesLength -= correction; - } }; /** - * This adds an edge from the childNode to the contained edges of the parent node + * determine in which branch the node will be placed. * - * @param parentNode | Node object - * @param childNode | Node object - * @param edge | Edge object + * @param parentBranch + * @param node + * @param skipMassUpdate * @private */ - exports._addToContainedEdges = function(parentNode, childNode, edge) { - // create an array object if it does not yet exist for this childNode - if (!(parentNode.containedEdges.hasOwnProperty(childNode.id))) { - parentNode.containedEdges[childNode.id] = [] + exports._placeInTree = function(parentBranch,node,skipMassUpdate) { + if (skipMassUpdate != true || skipMassUpdate === undefined) { + // update the mass of the branch. + this._updateBranchMass(parentBranch,node); } - // add this edge to the list - parentNode.containedEdges[childNode.id].push(edge); - - // remove the edge from the global edges object - delete this.edges[edge.id]; - // remove the edge from the parent object - for (var i = 0; i < parentNode.dynamicEdges.length; i++) { - if (parentNode.dynamicEdges[i].id == edge.id) { - parentNode.dynamicEdges.splice(i,1); - break; + if (parentBranch.children.NW.range.maxX > node.x) { // in NW or SW + if (parentBranch.children.NW.range.maxY > node.y) { // in NW + this._placeInRegion(parentBranch,node,"NW"); + } + else { // in SW + this._placeInRegion(parentBranch,node,"SW"); + } + } + else { // in NE or SE + if (parentBranch.children.NW.range.maxY > node.y) { // in NE + this._placeInRegion(parentBranch,node,"NE"); + } + else { // in SE + this._placeInRegion(parentBranch,node,"SE"); } } }; + /** - * This function connects an edge that was connected to a child node to the parent node. - * It keeps track of which nodes it has been connected to with the originalId array. + * actually place the node in a region (or branch) * - * @param {Node} parentNode | Node object - * @param {Node} childNode | Node object - * @param {Edge} edge | Edge object + * @param parentBranch + * @param node + * @param region * @private */ - exports._connectEdgeToCluster = function(parentNode, childNode, edge) { - // handle circular edges - if (edge.toId == edge.fromId) { - this._addToContainedEdges(parentNode, childNode, edge); - } - else { - if (edge.toId == childNode.id) { // edge connected to other node on the "to" side - edge.originalToId.push(childNode.id); - edge.to = parentNode; - edge.toId = parentNode.id; - } - else { // edge connected to other node with the "from" side - - edge.originalFromId.push(childNode.id); - edge.from = parentNode; - edge.fromId = parentNode.id; - } - - this._addToReroutedEdges(parentNode,childNode,edge); + exports._placeInRegion = function(parentBranch,node,region) { + switch (parentBranch.children[region].childrenCount) { + case 0: // place node here + parentBranch.children[region].children.data = node; + parentBranch.children[region].childrenCount = 1; + this._updateBranchMass(parentBranch.children[region],node); + break; + case 1: // convert into children + // if there are two nodes exactly overlapping (on init, on opening of cluster etc.) + // we move one node a pixel and we do not put it in the tree. + if (parentBranch.children[region].children.data.x == node.x && + parentBranch.children[region].children.data.y == node.y) { + node.x += Math.random(); + node.y += Math.random(); + } + else { + this._splitBranch(parentBranch.children[region]); + this._placeInTree(parentBranch.children[region],node); + } + break; + case 4: // place in branch + this._placeInTree(parentBranch.children[region],node); + break; } }; /** - * If a node is connected to itself, a circular edge is drawn. When clustering we want to contain - * these edges inside of the cluster. + * this function splits a branch into 4 sub branches. If the branch contained a node, we place it in the subbranch + * after the split is complete. * - * @param parentNode - * @param childNode + * @param parentBranch * @private */ - exports._containCircularEdgesFromNode = function(parentNode, childNode) { - // manage all the edges connected to the child and parent nodes - for (var i = 0; i < parentNode.dynamicEdges.length; i++) { - var edge = parentNode.dynamicEdges[i]; - // handle circular edges - if (edge.toId == edge.fromId) { - this._addToContainedEdges(parentNode, childNode, edge); - } + exports._splitBranch = function(parentBranch) { + // if the branch is shaded with a node, replace the node in the new subset. + var containedNode = null; + if (parentBranch.childrenCount == 1) { + containedNode = parentBranch.children.data; + parentBranch.mass = 0; parentBranch.centerOfMass.x = 0; parentBranch.centerOfMass.y = 0; + } + parentBranch.childrenCount = 4; + parentBranch.children.data = null; + this._insertRegion(parentBranch,"NW"); + this._insertRegion(parentBranch,"NE"); + this._insertRegion(parentBranch,"SW"); + this._insertRegion(parentBranch,"SE"); + + if (containedNode != null) { + this._placeInTree(parentBranch,containedNode); } }; /** - * This adds an edge from the childNode to the rerouted edges of the parent node + * This function subdivides the region into four new segments. + * Specifically, this inserts a single new segment. + * It fills the children section of the parentBranch * - * @param parentNode | Node object - * @param childNode | Node object - * @param edge | Edge object + * @param parentBranch + * @param region + * @param parentRange * @private */ - exports._addToReroutedEdges = function(parentNode, childNode, edge) { - // create an array object if it does not yet exist for this childNode - // we store the edge in the rerouted edges so we can restore it when the cluster pops open - if (!(parentNode.reroutedEdges.hasOwnProperty(childNode.id))) { - parentNode.reroutedEdges[childNode.id] = []; + exports._insertRegion = function(parentBranch, region) { + var minX,maxX,minY,maxY; + var childSize = 0.5 * parentBranch.size; + switch (region) { + case "NW": + minX = parentBranch.range.minX; + maxX = parentBranch.range.minX + childSize; + minY = parentBranch.range.minY; + maxY = parentBranch.range.minY + childSize; + break; + case "NE": + minX = parentBranch.range.minX + childSize; + maxX = parentBranch.range.maxX; + minY = parentBranch.range.minY; + maxY = parentBranch.range.minY + childSize; + break; + case "SW": + minX = parentBranch.range.minX; + maxX = parentBranch.range.minX + childSize; + minY = parentBranch.range.minY + childSize; + maxY = parentBranch.range.maxY; + break; + case "SE": + minX = parentBranch.range.minX + childSize; + maxX = parentBranch.range.maxX; + minY = parentBranch.range.minY + childSize; + maxY = parentBranch.range.maxY; + break; } - parentNode.reroutedEdges[childNode.id].push(edge); - // this edge becomes part of the dynamicEdges of the cluster node - parentNode.dynamicEdges.push(edge); - }; + parentBranch.children[region] = { + centerOfMass:{x:0,y:0}, + mass:0, + range:{minX:minX,maxX:maxX,minY:minY,maxY:maxY}, + size: 0.5 * parentBranch.size, + calcSize: 2 * parentBranch.calcSize, + children: {data:null}, + maxWidth: 0, + level: parentBranch.level+1, + childrenCount: 0 + }; + }; /** - * This function connects an edge that was connected to a cluster node back to the child node. + * This function is for debugging purposed, it draws the tree. * - * @param parentNode | Node object - * @param childNode | Node object + * @param ctx + * @param color * @private */ - exports._connectEdgeBackToChild = function(parentNode, childNode) { - if (parentNode.reroutedEdges.hasOwnProperty(childNode.id)) { - for (var i = 0; i < parentNode.reroutedEdges[childNode.id].length; i++) { - var edge = parentNode.reroutedEdges[childNode.id][i]; - if (edge.originalFromId[edge.originalFromId.length-1] == childNode.id) { - edge.originalFromId.pop(); - edge.fromId = childNode.id; - edge.from = childNode; - } - else { - edge.originalToId.pop(); - edge.toId = childNode.id; - edge.to = childNode; - } + exports._drawTree = function(ctx,color) { + if (this.barnesHutTree !== undefined) { - // append this edge to the list of edges connecting to the childnode - childNode.dynamicEdges.push(edge); + ctx.lineWidth = 1; - // remove the edge from the parent object - for (var j = 0; j < parentNode.dynamicEdges.length; j++) { - if (parentNode.dynamicEdges[j].id == edge.id) { - parentNode.dynamicEdges.splice(j,1); - break; - } - } - } - // remove the entry from the rerouted edges - delete parentNode.reroutedEdges[childNode.id]; + this._drawBranch(this.barnesHutTree.root,ctx,color); } }; /** - * When loops are clustered, an edge can be both in the rerouted array and the contained array. - * This function is called last to verify that all edges in dynamicEdges are in fact connected to the - * parentNode + * This function is for debugging purposes. It draws the branches recursively. * - * @param parentNode | Node object + * @param branch + * @param ctx + * @param color * @private */ - exports._validateEdges = function(parentNode) { - for (var i = 0; i < parentNode.dynamicEdges.length; i++) { - var edge = parentNode.dynamicEdges[i]; - if (parentNode.id != edge.toId && parentNode.id != edge.fromId) { - parentNode.dynamicEdges.splice(i,1); - } + exports._drawBranch = function(branch,ctx,color) { + if (color === undefined) { + color = "#FF0000"; } - }; + if (branch.childrenCount == 4) { + this._drawBranch(branch.children.NW,ctx); + this._drawBranch(branch.children.NE,ctx); + this._drawBranch(branch.children.SE,ctx); + this._drawBranch(branch.children.SW,ctx); + } + ctx.strokeStyle = color; + ctx.beginPath(); + ctx.moveTo(branch.range.minX,branch.range.minY); + ctx.lineTo(branch.range.maxX,branch.range.minY); + ctx.stroke(); - /** - * This function released the contained edges back into the global domain and puts them back into the - * dynamic edges of both parent and child. - * - * @param {Node} parentNode | - * @param {Node} childNode | - * @private - */ - exports._releaseContainedEdges = function(parentNode, childNode) { - for (var i = 0; i < parentNode.containedEdges[childNode.id].length; i++) { - var edge = parentNode.containedEdges[childNode.id][i]; + ctx.beginPath(); + ctx.moveTo(branch.range.maxX,branch.range.minY); + ctx.lineTo(branch.range.maxX,branch.range.maxY); + ctx.stroke(); - // put the edge back in the global edges object - this.edges[edge.id] = edge; + ctx.beginPath(); + ctx.moveTo(branch.range.maxX,branch.range.maxY); + ctx.lineTo(branch.range.minX,branch.range.maxY); + ctx.stroke(); - // put the edge back in the dynamic edges of the child and parent - childNode.dynamicEdges.push(edge); - parentNode.dynamicEdges.push(edge); - } - // remove the entry from the contained edges - delete parentNode.containedEdges[childNode.id]; + ctx.beginPath(); + ctx.moveTo(branch.range.minX,branch.range.maxY); + ctx.lineTo(branch.range.minX,branch.range.minY); + ctx.stroke(); + /* + if (branch.mass > 0) { + ctx.circle(branch.centerOfMass.x, branch.centerOfMass.y, 3*branch.mass); + ctx.stroke(); + } + */ }; +/***/ }, +/* 64 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Creation of the ClusterMixin var. + * + * This contains all the functions the Network object can use to employ clustering + */ + /** + * This is only called in the constructor of the network object + * + */ + exports.startWithClustering = function() { + // cluster if the data set is big + this.clusterToFit(this.constants.clustering.initialMaxNodes, true); - // ------------------- UTILITY FUNCTIONS ---------------------------- // + // updates the lables after clustering + this.updateLabels(); + // this is called here because if clusterin is disabled, the start and stabilize are called in + // the setData function. + if (this.stabilize) { + this._stabilize(); + } + this.start(); + }; /** - * This updates the node labels for all nodes (for debugging purposes) + * This function clusters until the initialMaxNodes has been reached + * + * @param {Number} maxNumberOfNodes + * @param {Boolean} reposition */ - exports.updateLabels = function() { - var nodeId; - // update node labels - for (nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - var node = this.nodes[nodeId]; - if (node.clusterSize > 1) { - node.label = "[".concat(String(node.clusterSize),"]"); - } - } - } + exports.clusterToFit = function(maxNumberOfNodes, reposition) { + var numberOfNodes = this.nodeIndices.length; - // update node labels - for (nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - node = this.nodes[nodeId]; - if (node.clusterSize == 1) { - if (node.originalLabel !== undefined) { - node.label = node.originalLabel; - } - else { - node.label = String(node.id); - } - } + var maxLevels = 50; + var level = 0; + + // we first cluster the hubs, then we pull in the outliers, repeat + while (numberOfNodes > maxNumberOfNodes && level < maxLevels) { + if (level % 3 == 0) { + this.forceAggregateHubs(true); + this.normalizeClusterLevels(); + } + else { + this.increaseClusterLevel(); // this also includes a cluster normalization } - } - // /* Debug Override */ - // for (nodeId in this.nodes) { - // if (this.nodes.hasOwnProperty(nodeId)) { - // node = this.nodes[nodeId]; - // node.label = String(node.level); - // } - // } + numberOfNodes = this.nodeIndices.length; + level += 1; + } + // after the clustering we reposition the nodes to reduce the initial chaos + if (level > 0 && reposition == true) { + this.repositionNodes(); + } + this._updateCalculationNodes(); }; - /** - * We want to keep the cluster level distribution rather small. This means we do not want unclustered nodes - * if the rest of the nodes are already a few cluster levels in. - * To fix this we use this function. It determines the min and max cluster level and sends nodes that have not - * clustered enough to the clusterToSmallestNeighbours function. + * This function can be called to open up a specific cluster. It is only called by + * It will unpack the cluster back one level. + * + * @param node | Node object: cluster to open. */ - exports.normalizeClusterLevels = function() { - var maxLevel = 0; - var minLevel = 1e9; - var clusterLevel = 0; - var nodeId; + exports.openCluster = function(node) { + var isMovingBeforeClustering = this.moving; + if (node.clusterSize > this.constants.clustering.sectorThreshold && this._nodeInActiveArea(node) && + !(this._sector() == "default" && this.nodeIndices.length == 1)) { + // this loads a new sector, loads the nodes and edges and nodeIndices of it. + this._addSector(node); + var level = 0; - // we loop over all nodes in the list - for (nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - clusterLevel = this.nodes[nodeId].clusterSessions.length; - if (maxLevel < clusterLevel) {maxLevel = clusterLevel;} - if (minLevel > clusterLevel) {minLevel = clusterLevel;} + // we decluster until we reach a decent number of nodes + while ((this.nodeIndices.length < this.constants.clustering.initialMaxNodes) && (level < 10)) { + this.decreaseClusterLevel(); + level += 1; } + } + else { + this._expandClusterNode(node,false,true); - if (maxLevel - minLevel > this.constants.clustering.clusterLevelDifference) { - var amountOfNodes = this.nodeIndices.length; - var targetLevel = maxLevel - this.constants.clustering.clusterLevelDifference; - // we loop over all nodes in the list - for (nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - if (this.nodes[nodeId].clusterSessions.length < targetLevel) { - this._clusterToSmallestNeighbour(this.nodes[nodeId]); - } - } - } + // update the index list, dynamic edges and labels this._updateNodeIndexList(); this._updateDynamicEdges(); - // if a cluster was formed, we increase the clusterSession - if (this.nodeIndices.length != amountOfNodes) { - this.clusterSession += 1; - } + this._updateCalculationNodes(); + this.updateLabels(); } - }; + // if the simulation was settled, we restart the simulation if a cluster has been formed or expanded + if (this.moving != isMovingBeforeClustering) { + this.start(); + } + }; /** - * This function determines if the cluster we want to decluster is in the active area - * this means around the zoom center - * - * @param {Node} node - * @returns {boolean} - * @private + * This calls the updateClustes with default arguments */ - exports._nodeInActiveArea = function(node) { - return ( - Math.abs(node.x - this.areaCenter.x) <= this.constants.clustering.activeAreaBoxSize/this.scale - && - Math.abs(node.y - this.areaCenter.y) <= this.constants.clustering.activeAreaBoxSize/this.scale - ) + exports.updateClustersDefault = function() { + if (this.constants.clustering.enabled == true) { + this.updateClusters(0,false,false); + } }; /** - * This is an adaptation of the original repositioning function. This is called if the system is clustered initially - * It puts large clusters away from the center and randomizes the order. - * + * This function can be called to increase the cluster level. This means that the nodes with only one edge connection will + * be clustered with their connected node. This can be repeated as many times as needed. + * This can be called externally (by a keybind for instance) to reduce the complexity of big datasets. */ - exports.repositionNodes = function() { - for (var i = 0; i < this.nodeIndices.length; i++) { - var node = this.nodes[this.nodeIndices[i]]; - if ((node.xFixed == false || node.yFixed == false)) { - var radius = 10 * 0.1*this.nodeIndices.length * Math.min(100,node.options.mass); - var angle = 2 * Math.PI * Math.random(); - if (node.xFixed == false) {node.x = radius * Math.cos(angle);} - if (node.yFixed == false) {node.y = radius * Math.sin(angle);} - this._repositionBezierNodes(node); - } - } + exports.increaseClusterLevel = function() { + this.updateClusters(-1,false,true); }; /** - * We determine how many connections denote an important hub. - * We take the mean + 2*std as the important hub size. (Assuming a normal distribution of data, ~2.2%) - * - * @private + * This function can be called to decrease the cluster level. This means that the nodes with only one edge connection will + * be unpacked if they are a cluster. This can be repeated as many times as needed. + * This can be called externally (by a key-bind for instance) to look into clusters without zooming. */ - exports._getHubSize = function() { - var average = 0; - var averageSquared = 0; - var hubCounter = 0; - var largestHub = 0; - - for (var i = 0; i < this.nodeIndices.length; i++) { - - var node = this.nodes[this.nodeIndices[i]]; - if (node.dynamicEdgesLength > largestHub) { - largestHub = node.dynamicEdgesLength; - } - average += node.dynamicEdgesLength; - averageSquared += Math.pow(node.dynamicEdgesLength,2); - hubCounter += 1; - } - average = average / hubCounter; - averageSquared = averageSquared / hubCounter; - - var variance = averageSquared - Math.pow(average,2); - - var standardDeviation = Math.sqrt(variance); - - this.hubThreshold = Math.floor(average + 2*standardDeviation); - - // always have at least one to cluster - if (this.hubThreshold > largestHub) { - this.hubThreshold = largestHub; - } - - // console.log("average",average,"averageSQ",averageSquared,"var",variance,"std",standardDeviation); - // console.log("hubThreshold:",this.hubThreshold); + exports.decreaseClusterLevel = function() { + this.updateClusters(1,false,true); }; /** - * We reduce the amount of "extension nodes" or chains. These are not quickly clustered with the outliers and hubs methods - * with this amount we can cluster specifically on these chains. + * This is the main clustering function. It clusters and declusters on zoom or forced + * This function clusters on zoom, it can be called with a predefined zoom direction + * If out, check if we can form clusters, if in, check if we can open clusters. + * This function is only called from _zoom() + * + * @param {Number} zoomDirection | -1 / 0 / +1 for zoomOut / determineByZoom / zoomIn + * @param {Boolean} recursive | enabled or disable recursive calling of the opening of clusters + * @param {Boolean} force | enabled or disable forcing + * @param {Boolean} doNotStart | if true do not call start * - * @param {Number} fraction | between 0 and 1, the percentage of chains to reduce - * @private */ - exports._reduceAmountOfChains = function(fraction) { - this.hubThreshold = 2; - var reduceAmount = Math.floor(this.nodeIndices.length * fraction); - for (var nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - if (this.nodes[nodeId].dynamicEdgesLength == 2 && this.nodes[nodeId].dynamicEdges.length >= 2) { - if (reduceAmount > 0) { - this._formClusterFromHub(this.nodes[nodeId],true,true,1); - reduceAmount -= 1; - } - } - } + exports.updateClusters = function(zoomDirection,recursive,force,doNotStart) { + var isMovingBeforeClustering = this.moving; + var amountOfNodes = this.nodeIndices.length; + + // on zoom out collapse the sector if the scale is at the level the sector was made + if (this.previousScale > this.scale && zoomDirection == 0) { + this._collapseSector(); } - }; - /** - * We get the amount of "extension nodes" or chains. These are not quickly clustered with the outliers and hubs methods - * with this amount we can cluster specifically on these chains. - * - * @private - */ - exports._getChainFraction = function() { - var chains = 0; - var total = 0; - for (var nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - if (this.nodes[nodeId].dynamicEdgesLength == 2 && this.nodes[nodeId].dynamicEdges.length >= 2) { - chains += 1; - } - total += 1; + // check if we zoom in or out + if (this.previousScale > this.scale || zoomDirection == -1) { // zoom out + // forming clusters when forced pulls outliers in. When not forced, the edge length of the + // outer nodes determines if it is being clustered + this._formClusters(force); + } + else if (this.previousScale < this.scale || zoomDirection == 1) { // zoom in + if (force == true) { + // _openClusters checks for each node if the formationScale of the cluster is smaller than + // the current scale and if so, declusters. When forced, all clusters are reduced by one step + this._openClusters(recursive,force); + } + else { + // if a cluster takes up a set percentage of the active window + this._openClustersBySize(); } } - return chains/total; - }; - - -/***/ }, -/* 61 */ -/***/ function(module, exports, __webpack_require__) { + this._updateNodeIndexList(); - var util = __webpack_require__(1); - var Node = __webpack_require__(40); + // if a cluster was NOT formed and the user zoomed out, we try clustering by hubs + if (this.nodeIndices.length == amountOfNodes && (this.previousScale > this.scale || zoomDirection == -1)) { + this._aggregateHubs(force); + this._updateNodeIndexList(); + } - /** - * Creation of the SectorMixin var. - * - * This contains all the functions the Network object can use to employ the sector system. - * The sector system is always used by Network, though the benefits only apply to the use of clustering. - * If clustering is not used, there is no overhead except for a duplicate object with references to nodes and edges. - */ + // we now reduce chains. + if (this.previousScale > this.scale || zoomDirection == -1) { // zoom out + this.handleChains(); + this._updateNodeIndexList(); + } - /** - * This function is only called by the setData function of the Network object. - * This loads the global references into the active sector. This initializes the sector. - * - * @private - */ - exports._putDataInSector = function() { - this.sectors["active"][this._sector()].nodes = this.nodes; - this.sectors["active"][this._sector()].edges = this.edges; - this.sectors["active"][this._sector()].nodeIndices = this.nodeIndices; - }; + this.previousScale = this.scale; + // rest of the update the index list, dynamic edges and labels + this._updateDynamicEdges(); + this.updateLabels(); - /** - * /** - * This function sets the global references to nodes, edges and nodeIndices back to - * those of the supplied (active) sector. If a type is defined, do the specific type - * - * @param {String} sectorId - * @param {String} [sectorType] | "active" or "frozen" - * @private - */ - exports._switchToSector = function(sectorId, sectorType) { - if (sectorType === undefined || sectorType == "active") { - this._switchToActiveSector(sectorId); - } - else { - this._switchToFrozenSector(sectorId); + // if a cluster was formed, we increase the clusterSession + if (this.nodeIndices.length < amountOfNodes) { // this means a clustering operation has taken place + this.clusterSession += 1; + // if clusters have been made, we normalize the cluster level + this.normalizeClusterLevels(); } - }; + if (doNotStart == false || doNotStart === undefined) { + // if the simulation was settled, we restart the simulation if a cluster has been formed or expanded + if (this.moving != isMovingBeforeClustering) { + this.start(); + } + } - /** - * This function sets the global references to nodes, edges and nodeIndices back to - * those of the supplied active sector. - * - * @param sectorId - * @private - */ - exports._switchToActiveSector = function(sectorId) { - this.nodeIndices = this.sectors["active"][sectorId]["nodeIndices"]; - this.nodes = this.sectors["active"][sectorId]["nodes"]; - this.edges = this.sectors["active"][sectorId]["edges"]; + this._updateCalculationNodes(); }; - /** - * This function sets the global references to nodes, edges and nodeIndices back to - * those of the supplied active sector. - * - * @private + * This function handles the chains. It is called on every updateClusters(). */ - exports._switchToSupportSector = function() { - this.nodeIndices = this.sectors["support"]["nodeIndices"]; - this.nodes = this.sectors["support"]["nodes"]; - this.edges = this.sectors["support"]["edges"]; - }; - + exports.handleChains = function() { + // after clustering we check how many chains there are + var chainPercentage = this._getChainFraction(); + if (chainPercentage > this.constants.clustering.chainThreshold) { + this._reduceAmountOfChains(1 - this.constants.clustering.chainThreshold / chainPercentage) - /** - * This function sets the global references to nodes, edges and nodeIndices back to - * those of the supplied frozen sector. - * - * @param sectorId - * @private - */ - exports._switchToFrozenSector = function(sectorId) { - this.nodeIndices = this.sectors["frozen"][sectorId]["nodeIndices"]; - this.nodes = this.sectors["frozen"][sectorId]["nodes"]; - this.edges = this.sectors["frozen"][sectorId]["edges"]; + } }; - /** - * This function sets the global references to nodes, edges and nodeIndices back to - * those of the currently active sector. + * this functions starts clustering by hubs + * The minimum hub threshold is set globally * * @private */ - exports._loadLatestSector = function() { - this._switchToSector(this._sector()); + exports._aggregateHubs = function(force) { + this._getHubSize(); + this._formClustersByHub(force,false); }; /** - * This function returns the currently active sector Id + * This function is fired by keypress. It forces hubs to form. * - * @returns {String} - * @private */ - exports._sector = function() { - return this.activeSector[this.activeSector.length-1]; - }; + exports.forceAggregateHubs = function(doNotStart) { + var isMovingBeforeClustering = this.moving; + var amountOfNodes = this.nodeIndices.length; + this._aggregateHubs(true); - /** - * This function returns the previously active sector Id - * - * @returns {String} - * @private - */ - exports._previousSector = function() { - if (this.activeSector.length > 1) { - return this.activeSector[this.activeSector.length-2]; + // update the index list, dynamic edges and labels + this._updateNodeIndexList(); + this._updateDynamicEdges(); + this.updateLabels(); + + // if a cluster was formed, we increase the clusterSession + if (this.nodeIndices.length != amountOfNodes) { + this.clusterSession += 1; } - else { - throw new TypeError('there are not enough sectors in the this.activeSector array.'); + + if (doNotStart == false || doNotStart === undefined) { + // if the simulation was settled, we restart the simulation if a cluster has been formed or expanded + if (this.moving != isMovingBeforeClustering) { + this.start(); + } } }; - /** - * We add the active sector at the end of the this.activeSector array - * This ensures it is the currently active sector returned by _sector() and it reaches the top - * of the activeSector stack. When we reverse our steps we move from the end to the beginning of this stack. + * If a cluster takes up more than a set percentage of the screen, open the cluster * - * @param newId * @private */ - exports._setActiveSector = function(newId) { - this.activeSector.push(newId); + exports._openClustersBySize = function() { + for (var nodeId in this.nodes) { + if (this.nodes.hasOwnProperty(nodeId)) { + var node = this.nodes[nodeId]; + if (node.inView() == true) { + if ((node.width*this.scale > this.constants.clustering.screenSizeThreshold * this.frame.canvas.clientWidth) || + (node.height*this.scale > this.constants.clustering.screenSizeThreshold * this.frame.canvas.clientHeight)) { + this.openCluster(node); + } + } + } + } }; /** - * We remove the currently active sector id from the active sector stack. This happens when - * we reactivate the previously active sector + * This function loops over all nodes in the nodeIndices list. For each node it checks if it is a cluster and if it + * has to be opened based on the current zoom level. * * @private */ - exports._forgetLastSector = function() { - this.activeSector.pop(); + exports._openClusters = function(recursive,force) { + for (var i = 0; i < this.nodeIndices.length; i++) { + var node = this.nodes[this.nodeIndices[i]]; + this._expandClusterNode(node,recursive,force); + this._updateCalculationNodes(); + } }; - /** - * This function creates a new active sector with the supplied newId. This newId - * is the expanding node id. + * This function checks if a node has to be opened. This is done by checking the zoom level. + * If the node contains child nodes, this function is recursively called on the child nodes as well. + * This recursive behaviour is optional and can be set by the recursive argument. * - * @param {String} newId | Id of the new active sector + * @param {Node} parentNode | to check for cluster and expand + * @param {Boolean} recursive | enabled or disable recursive calling + * @param {Boolean} force | enabled or disable forcing + * @param {Boolean} [openAll] | This will recursively force all nodes in the parent to be released * @private */ - exports._createNewSector = function(newId) { - // create the new sector - this.sectors["active"][newId] = {"nodes":{}, - "edges":{}, - "nodeIndices":[], - "formationScale": this.scale, - "drawingNode": undefined}; + exports._expandClusterNode = function(parentNode, recursive, force, openAll) { + // first check if node is a cluster + if (parentNode.clusterSize > 1) { + // this means that on a double tap event or a zoom event, the cluster fully unpacks if it is smaller than 20 + if (parentNode.clusterSize < this.constants.clustering.sectorThreshold) { + openAll = true; + } + recursive = openAll ? true : recursive; - // create the new sector render node. This gives visual feedback that you are in a new sector. - this.sectors["active"][newId]['drawingNode'] = new Node( - {id:newId, - color: { - background: "#eaefef", - border: "495c5e" + // if the last child has been added on a smaller scale than current scale decluster + if (parentNode.formationScale < this.scale || force == true) { + // we will check if any of the contained child nodes should be removed from the cluster + for (var containedNodeId in parentNode.containedNodes) { + if (parentNode.containedNodes.hasOwnProperty(containedNodeId)) { + var childNode = parentNode.containedNodes[containedNodeId]; + + // force expand will expand the largest cluster size clusters. Since we cluster from outside in, we assume that + // the largest cluster is the one that comes from outside + if (force == true) { + if (childNode.clusterSession == parentNode.clusterSessions[parentNode.clusterSessions.length-1] + || openAll) { + this._expelChildFromParent(parentNode,containedNodeId,recursive,force,openAll); + } + } + else { + if (this._nodeInActiveArea(parentNode)) { + this._expelChildFromParent(parentNode,containedNodeId,recursive,force,openAll); + } + } } - },{},{},this.constants); - this.sectors["active"][newId]['drawingNode'].clusterSize = 2; + } + } + } }; - /** - * This function removes the currently active sector. This is called when we create a new - * active sector. + * ONLY CALLED FROM _expandClusterNode * - * @param {String} sectorId | Id of the active sector that will be removed - * @private - */ - exports._deleteActiveSector = function(sectorId) { - delete this.sectors["active"][sectorId]; - }; - - - /** - * This function removes the currently active sector. This is called when we reactivate - * the previously active sector. + * This function will expel a child_node from a parent_node. This is to de-cluster the node. This function will remove + * the child node from the parent contained_node object and put it back into the global nodes object. + * The same holds for the edge that was connected to the child node. It is moved back into the global edges object. * - * @param {String} sectorId | Id of the active sector that will be removed + * @param {Node} parentNode | the parent node + * @param {String} containedNodeId | child_node id as it is contained in the containedNodes object of the parent node + * @param {Boolean} recursive | This will also check if the child needs to be expanded. + * With force and recursive both true, the entire cluster is unpacked + * @param {Boolean} force | This will disregard the zoom level and will expel this child from the parent + * @param {Boolean} openAll | This will recursively force all nodes in the parent to be released * @private */ - exports._deleteFrozenSector = function(sectorId) { - delete this.sectors["frozen"][sectorId]; - }; + exports._expelChildFromParent = function(parentNode, containedNodeId, recursive, force, openAll) { + var childNode = parentNode.containedNodes[containedNodeId]; + // if child node has been added on smaller scale than current, kick out + if (childNode.formationScale < this.scale || force == true) { + // unselect all selected items + this._unselectAll(); - /** - * Freezing an active sector means moving it from the "active" object to the "frozen" object. - * We copy the references, then delete the active entree. - * - * @param sectorId - * @private - */ - exports._freezeSector = function(sectorId) { - // we move the set references from the active to the frozen stack. - this.sectors["frozen"][sectorId] = this.sectors["active"][sectorId]; + // put the child node back in the global nodes object + this.nodes[containedNodeId] = childNode; - // we have moved the sector data into the frozen set, we now remove it from the active set - this._deleteActiveSector(sectorId); - }; + // release the contained edges from this childNode back into the global edges + this._releaseContainedEdges(parentNode,childNode); + // reconnect rerouted edges to the childNode + this._connectEdgeBackToChild(parentNode,childNode); - /** - * This is the reverse operation of _freezeSector. Activating means moving the sector from the "frozen" - * object to the "active" object. - * - * @param sectorId - * @private - */ - exports._activateSector = function(sectorId) { - // we move the set references from the frozen to the active stack. - this.sectors["active"][sectorId] = this.sectors["frozen"][sectorId]; + // validate all edges in dynamicEdges + this._validateEdges(parentNode); - // we have moved the sector data into the active set, we now remove it from the frozen stack - this._deleteFrozenSector(sectorId); - }; + // undo the changes from the clustering operation on the parent node + parentNode.options.mass -= childNode.options.mass; + parentNode.clusterSize -= childNode.clusterSize; + parentNode.options.fontSize = Math.min(this.constants.clustering.maxFontSize, this.constants.nodes.fontSize + this.constants.clustering.fontSizeMultiplier*(parentNode.clusterSize-1)); + parentNode.dynamicEdgesLength = parentNode.dynamicEdges.length; + // place the child node near the parent, not at the exact same location to avoid chaos in the system + childNode.x = parentNode.x + parentNode.growthIndicator * (0.5 - Math.random()); + childNode.y = parentNode.y + parentNode.growthIndicator * (0.5 - Math.random()); - /** - * This function merges the data from the currently active sector with a frozen sector. This is used - * in the process of reverting back to the previously active sector. - * The data that is placed in the frozen (the previously active) sector is the node that has been removed from it - * upon the creation of a new active sector. - * - * @param sectorId - * @private - */ - exports._mergeThisWithFrozen = function(sectorId) { - // copy all nodes - for (var nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - this.sectors["frozen"][sectorId]["nodes"][nodeId] = this.nodes[nodeId]; - } - } + // remove node from the list + delete parentNode.containedNodes[containedNodeId]; - // copy all edges (if not fully clustered, else there are no edges) - for (var edgeId in this.edges) { - if (this.edges.hasOwnProperty(edgeId)) { - this.sectors["frozen"][sectorId]["edges"][edgeId] = this.edges[edgeId]; + // check if there are other childs with this clusterSession in the parent. + var othersPresent = false; + for (var childNodeId in parentNode.containedNodes) { + if (parentNode.containedNodes.hasOwnProperty(childNodeId)) { + if (parentNode.containedNodes[childNodeId].clusterSession == childNode.clusterSession) { + othersPresent = true; + break; + } + } + } + // if there are no others, remove the cluster session from the list + if (othersPresent == false) { + parentNode.clusterSessions.pop(); } + + this._repositionBezierNodes(childNode); + // this._repositionBezierNodes(parentNode); + + // remove the clusterSession from the child node + childNode.clusterSession = 0; + + // recalculate the size of the node on the next time the node is rendered + parentNode.clearSizeCache(); + + // restart the simulation to reorganise all nodes + this.moving = true; } - // merge the nodeIndices - for (var i = 0; i < this.nodeIndices.length; i++) { - this.sectors["frozen"][sectorId]["nodeIndices"].push(this.nodeIndices[i]); + // check if a further expansion step is possible if recursivity is enabled + if (recursive == true) { + this._expandClusterNode(childNode,recursive,force,openAll); } }; /** - * This clusters the sector to one cluster. It was a single cluster before this process started so - * we revert to that state. The clusterToFit function with a maximum size of 1 node does this. + * position the bezier nodes at the center of the edges * + * @param node * @private */ - exports._collapseThisToSingleCluster = function() { - this.clusterToFit(1,false); + exports._repositionBezierNodes = function(node) { + for (var i = 0; i < node.dynamicEdges.length; i++) { + node.dynamicEdges[i].positionBezierNode(); + } }; /** - * We create a new active sector from the node that we want to open. + * This function checks if any nodes at the end of their trees have edges below a threshold length + * This function is called only from updateClusters() + * forceLevelCollapse ignores the length of the edge and collapses one level + * This means that a node with only one edge will be clustered with its connected node * - * @param node * @private + * @param {Boolean} force */ - exports._addSector = function(node) { - // this is the currently active sector - var sector = this._sector(); - - // // this should allow me to select nodes from a frozen set. - // if (this.sectors['active'][sector]["nodes"].hasOwnProperty(node.id)) { - // console.log("the node is part of the active sector"); - // } - // else { - // console.log("I dont know what the fuck happened!!"); - // } - - // when we switch to a new sector, we remove the node that will be expanded from the current nodes list. - delete this.nodes[node.id]; - - var unqiueIdentifier = util.randomUUID(); - - // we fully freeze the currently active sector - this._freezeSector(sector); - - // we create a new active sector. This sector has the Id of the node to ensure uniqueness - this._createNewSector(unqiueIdentifier); - - // we add the active sector to the sectors array to be able to revert these steps later on - this._setActiveSector(unqiueIdentifier); - - // we redirect the global references to the new sector's references. this._sector() now returns unqiueIdentifier - this._switchToSector(this._sector()); - - // finally we add the node we removed from our previous active sector to the new active sector - this.nodes[node.id] = node; + exports._formClusters = function(force) { + if (force == false) { + this._formClustersByZoom(); + } + else { + this._forceClustersByZoom(); + } }; /** - * We close the sector that is currently open and revert back to the one before. - * If the active sector is the "default" sector, nothing happens. + * This function handles the clustering by zooming out, this is based on a minimum edge distance * * @private */ - exports._collapseSector = function() { - // the currently active sector - var sector = this._sector(); - - // we cannot collapse the default sector - if (sector != "default") { - if ((this.nodeIndices.length == 1) || - (this.sectors["active"][sector]["drawingNode"].width*this.scale < this.constants.clustering.screenSizeThreshold * this.frame.canvas.clientWidth) || - (this.sectors["active"][sector]["drawingNode"].height*this.scale < this.constants.clustering.screenSizeThreshold * this.frame.canvas.clientHeight)) { - var previousSector = this._previousSector(); - - // we collapse the sector back to a single cluster - this._collapseThisToSingleCluster(); - - // we move the remaining nodes, edges and nodeIndices to the previous sector. - // This previous sector is the one we will reactivate - this._mergeThisWithFrozen(previousSector); - - // the previously active (frozen) sector now has all the data from the currently active sector. - // we can now delete the active sector. - this._deleteActiveSector(sector); - - // we activate the previously active (and currently frozen) sector. - this._activateSector(previousSector); - - // we load the references from the newly active sector into the global references - this._switchToSector(previousSector); - - // we forget the previously active sector because we reverted to the one before - this._forgetLastSector(); + exports._formClustersByZoom = function() { + var dx,dy,length, + minLength = this.constants.clustering.clusterEdgeThreshold/this.scale; - // finally, we update the node index list. - this._updateNodeIndexList(); + // check if any edges are shorter than minLength and start the clustering + // the clustering favours the node with the larger mass + for (var edgeId in this.edges) { + if (this.edges.hasOwnProperty(edgeId)) { + var edge = this.edges[edgeId]; + if (edge.connected) { + if (edge.toId != edge.fromId) { + dx = (edge.to.x - edge.from.x); + dy = (edge.to.y - edge.from.y); + length = Math.sqrt(dx * dx + dy * dy); - // we refresh the list with calulation nodes and calculation node indices. - this._updateCalculationNodes(); - } - } - }; + if (length < minLength) { + // first check which node is larger + var parentNode = edge.from; + var childNode = edge.to; + if (edge.to.options.mass > edge.from.options.mass) { + parentNode = edge.to; + childNode = edge.from; + } - /** - * This runs a function in all active sectors. This is used in _redraw() and the _initializeForceCalculation(). - * - * @param {String} runFunction | This is the NAME of a function we want to call in all active sectors - * | we dont pass the function itself because then the "this" is the window object - * | instead of the Network object - * @param {*} [argument] | Optional: arguments to pass to the runFunction - * @private - */ - exports._doInAllActiveSectors = function(runFunction,argument) { - var returnValues = []; - if (argument === undefined) { - for (var sector in this.sectors["active"]) { - if (this.sectors["active"].hasOwnProperty(sector)) { - // switch the global references to those of this sector - this._switchToActiveSector(sector); - returnValues.push( this[runFunction]() ); - } - } - } - else { - for (var sector in this.sectors["active"]) { - if (this.sectors["active"].hasOwnProperty(sector)) { - // switch the global references to those of this sector - this._switchToActiveSector(sector); - var args = Array.prototype.splice.call(arguments, 1); - if (args.length > 1) { - returnValues.push( this[runFunction](args[0],args[1]) ); - } - else { - returnValues.push( this[runFunction](argument) ); + if (childNode.dynamicEdgesLength == 1) { + this._addToCluster(parentNode,childNode,false); + } + else if (parentNode.dynamicEdgesLength == 1) { + this._addToCluster(childNode,parentNode,false); + } + } } } } } - // we revert the global references back to our active sector - this._loadLatestSector(); - return returnValues; }; - /** - * This runs a function in all active sectors. This is used in _redraw() and the _initializeForceCalculation(). + * This function forces the network to cluster all nodes with only one connecting edge to their + * connected node. * - * @param {String} runFunction | This is the NAME of a function we want to call in all active sectors - * | we dont pass the function itself because then the "this" is the window object - * | instead of the Network object - * @param {*} [argument] | Optional: arguments to pass to the runFunction * @private */ - exports._doInSupportSector = function(runFunction,argument) { - var returnValues = false; - if (argument === undefined) { - this._switchToSupportSector(); - returnValues = this[runFunction](); - } - else { - this._switchToSupportSector(); - var args = Array.prototype.splice.call(arguments, 1); - if (args.length > 1) { - returnValues = this[runFunction](args[0],args[1]); - } - else { - returnValues = this[runFunction](argument); + exports._forceClustersByZoom = function() { + for (var nodeId in this.nodes) { + // another node could have absorbed this child. + if (this.nodes.hasOwnProperty(nodeId)) { + var childNode = this.nodes[nodeId]; + + // the edges can be swallowed by another decrease + if (childNode.dynamicEdgesLength == 1 && childNode.dynamicEdges.length != 0) { + var edge = childNode.dynamicEdges[0]; + var parentNode = (edge.toId == childNode.id) ? this.nodes[edge.fromId] : this.nodes[edge.toId]; + + // group to the largest node + if (childNode.id != parentNode.id) { + if (parentNode.options.mass > childNode.options.mass) { + this._addToCluster(parentNode,childNode,true); + } + else { + this._addToCluster(childNode,parentNode,true); + } + } + } } } - // we revert the global references back to our active sector - this._loadLatestSector(); - return returnValues; }; /** - * This runs a function in all frozen sectors. This is used in the _redraw(). + * To keep the nodes of roughly equal size we normalize the cluster levels. + * This function clusters a node to its smallest connected neighbour. * - * @param {String} runFunction | This is the NAME of a function we want to call in all active sectors - * | we don't pass the function itself because then the "this" is the window object - * | instead of the Network object - * @param {*} [argument] | Optional: arguments to pass to the runFunction + * @param node * @private */ - exports._doInAllFrozenSectors = function(runFunction,argument) { - if (argument === undefined) { - for (var sector in this.sectors["frozen"]) { - if (this.sectors["frozen"].hasOwnProperty(sector)) { - // switch the global references to those of this sector - this._switchToFrozenSector(sector); - this[runFunction](); + exports._clusterToSmallestNeighbour = function(node) { + var smallestNeighbour = -1; + var smallestNeighbourNode = null; + for (var i = 0; i < node.dynamicEdges.length; i++) { + if (node.dynamicEdges[i] !== undefined) { + var neighbour = null; + if (node.dynamicEdges[i].fromId != node.id) { + neighbour = node.dynamicEdges[i].from; } - } - } - else { - for (var sector in this.sectors["frozen"]) { - if (this.sectors["frozen"].hasOwnProperty(sector)) { - // switch the global references to those of this sector - this._switchToFrozenSector(sector); - var args = Array.prototype.splice.call(arguments, 1); - if (args.length > 1) { - this[runFunction](args[0],args[1]); - } - else { - this[runFunction](argument); - } + else if (node.dynamicEdges[i].toId != node.id) { + neighbour = node.dynamicEdges[i].to; + } + + + if (neighbour != null && smallestNeighbour > neighbour.clusterSessions.length) { + smallestNeighbour = neighbour.clusterSessions.length; + smallestNeighbourNode = neighbour; } } } - this._loadLatestSector(); + + if (neighbour != null && this.nodes[neighbour.id] !== undefined) { + this._addToCluster(neighbour, node, true); + } }; /** - * This runs a function in all sectors. This is used in the _redraw(). + * This function forms clusters from hubs, it loops over all nodes * - * @param {String} runFunction | This is the NAME of a function we want to call in all active sectors - * | we don't pass the function itself because then the "this" is the window object - * | instead of the Network object - * @param {*} [argument] | Optional: arguments to pass to the runFunction + * @param {Boolean} force | Disregard zoom level + * @param {Boolean} onlyEqual | This only clusters a hub with a specific number of edges * @private */ - exports._doInAllSectors = function(runFunction,argument) { - var args = Array.prototype.splice.call(arguments, 1); - if (argument === undefined) { - this._doInAllActiveSectors(runFunction); - this._doInAllFrozenSectors(runFunction); - } - else { - if (args.length > 1) { - this._doInAllActiveSectors(runFunction,args[0],args[1]); - this._doInAllFrozenSectors(runFunction,args[0],args[1]); - } - else { - this._doInAllActiveSectors(runFunction,argument); - this._doInAllFrozenSectors(runFunction,argument); + exports._formClustersByHub = function(force, onlyEqual) { + // we loop over all nodes in the list + for (var nodeId in this.nodes) { + // we check if it is still available since it can be used by the clustering in this loop + if (this.nodes.hasOwnProperty(nodeId)) { + this._formClusterFromHub(this.nodes[nodeId],force,onlyEqual); } } }; - /** - * This clears the nodeIndices list. We cannot use this.nodeIndices = [] because we would break the link with the - * active sector. Thus we clear the nodeIndices in the active sector, then reconnect the this.nodeIndices to it. + * This function forms a cluster from a specific preselected hub node * + * @param {Node} hubNode | the node we will cluster as a hub + * @param {Boolean} force | Disregard zoom level + * @param {Boolean} onlyEqual | This only clusters a hub with a specific number of edges + * @param {Number} [absorptionSizeOffset] | * @private */ - exports._clearNodeIndexList = function() { - var sector = this._sector(); - this.sectors["active"][sector]["nodeIndices"] = []; - this.nodeIndices = this.sectors["active"][sector]["nodeIndices"]; - }; + exports._formClusterFromHub = function(hubNode, force, onlyEqual, absorptionSizeOffset) { + if (absorptionSizeOffset === undefined) { + absorptionSizeOffset = 0; + } + // we decide if the node is a hub + if ((hubNode.dynamicEdgesLength >= this.hubThreshold && onlyEqual == false) || + (hubNode.dynamicEdgesLength == this.hubThreshold && onlyEqual == true)) { + // initialize variables + var dx,dy,length; + var minLength = this.constants.clustering.clusterEdgeThreshold/this.scale; + var allowCluster = false; + // we create a list of edges because the dynamicEdges change over the course of this loop + var edgesIdarray = []; + var amountOfInitialEdges = hubNode.dynamicEdges.length; + for (var j = 0; j < amountOfInitialEdges; j++) { + edgesIdarray.push(hubNode.dynamicEdges[j].id); + } - /** - * Draw the encompassing sector node - * - * @param ctx - * @param sectorType - * @private - */ - exports._drawSectorNodes = function(ctx,sectorType) { - var minY = 1e9, maxY = -1e9, minX = 1e9, maxX = -1e9, node; - for (var sector in this.sectors[sectorType]) { - if (this.sectors[sectorType].hasOwnProperty(sector)) { - if (this.sectors[sectorType][sector]["drawingNode"] !== undefined) { + // if the hub clustering is not forces, we check if one of the edges connected + // to a cluster is small enough based on the constants.clustering.clusterEdgeThreshold + if (force == false) { + allowCluster = false; + for (j = 0; j < amountOfInitialEdges; j++) { + var edge = this.edges[edgesIdarray[j]]; + if (edge !== undefined) { + if (edge.connected) { + if (edge.toId != edge.fromId) { + dx = (edge.to.x - edge.from.x); + dy = (edge.to.y - edge.from.y); + length = Math.sqrt(dx * dx + dy * dy); - this._switchToSector(sector,sectorType); + if (length < minLength) { + allowCluster = true; + break; + } + } + } + } + } + } - minY = 1e9; maxY = -1e9; minX = 1e9; maxX = -1e9; - for (var nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - node = this.nodes[nodeId]; - node.resize(ctx); - if (minX > node.x - 0.5 * node.width) {minX = node.x - 0.5 * node.width;} - if (maxX < node.x + 0.5 * node.width) {maxX = node.x + 0.5 * node.width;} - if (minY > node.y - 0.5 * node.height) {minY = node.y - 0.5 * node.height;} - if (maxY < node.y + 0.5 * node.height) {maxY = node.y + 0.5 * node.height;} + // start the clustering if allowed + if ((!force && allowCluster) || force) { + // we loop over all edges INITIALLY connected to this hub + for (j = 0; j < amountOfInitialEdges; j++) { + edge = this.edges[edgesIdarray[j]]; + // the edge can be clustered by this function in a previous loop + if (edge !== undefined) { + var childNode = this.nodes[(edge.fromId == hubNode.id) ? edge.toId : edge.fromId]; + // we do not want hubs to merge with other hubs nor do we want to cluster itself. + if ((childNode.dynamicEdges.length <= (this.hubThreshold + absorptionSizeOffset)) && + (childNode.id != hubNode.id)) { + this._addToCluster(hubNode,childNode,force); } } - node = this.sectors[sectorType][sector]["drawingNode"]; - node.x = 0.5 * (maxX + minX); - node.y = 0.5 * (maxY + minY); - node.width = 2 * (node.x - minX); - node.height = 2 * (node.y - minY); - node.options.radius = Math.sqrt(Math.pow(0.5*node.width,2) + Math.pow(0.5*node.height,2)); - node.setScale(this.scale); - node._drawCircle(ctx); } } } }; - exports._drawAllSectorNodes = function(ctx) { - this._drawSectorNodes(ctx,"frozen"); - this._drawSectorNodes(ctx,"active"); - this._loadLatestSector(); - }; - - -/***/ }, -/* 62 */ -/***/ function(module, exports, __webpack_require__) { - var Node = __webpack_require__(40); /** - * This function can be called from the _doInAllSectors function + * This function adds the child node to the parent node, creating a cluster if it is not already. * - * @param object - * @param overlappingNodes + * @param {Node} parentNode | this is the node that will house the child node + * @param {Node} childNode | this node will be deleted from the global this.nodes and stored in the parent node + * @param {Boolean} force | true will only update the remainingEdges at the very end of the clustering, ensuring single level collapse * @private */ - exports._getNodesOverlappingWith = function(object, overlappingNodes) { - var nodes = this.nodes; - for (var nodeId in nodes) { - if (nodes.hasOwnProperty(nodeId)) { - if (nodes[nodeId].isOverlappingWith(object)) { - overlappingNodes.push(nodeId); - } + exports._addToCluster = function(parentNode, childNode, force) { + // join child node in the parent node + parentNode.containedNodes[childNode.id] = childNode; + + // manage all the edges connected to the child and parent nodes + for (var i = 0; i < childNode.dynamicEdges.length; i++) { + var edge = childNode.dynamicEdges[i]; + if (edge.toId == parentNode.id || edge.fromId == parentNode.id) { // edge connected to parentNode + this._addToContainedEdges(parentNode,childNode,edge); + } + else { + this._connectEdgeToCluster(parentNode,childNode,edge); } } - }; - - /** - * retrieve all nodes overlapping with given object - * @param {Object} object An object with parameters left, top, right, bottom - * @return {Number[]} An array with id's of the overlapping nodes - * @private - */ - exports._getAllNodesOverlappingWith = function (object) { - var overlappingNodes = []; - this._doInAllActiveSectors("_getNodesOverlappingWith",object,overlappingNodes); - return overlappingNodes; - }; + // a contained node has no dynamic edges. + childNode.dynamicEdges = []; + // remove circular edges from clusters + this._containCircularEdgesFromNode(parentNode,childNode); - /** - * Return a position object in canvasspace from a single point in screenspace - * - * @param pointer - * @returns {{left: number, top: number, right: number, bottom: number}} - * @private - */ - exports._pointerToPositionObject = function(pointer) { - var x = this._XconvertDOMtoCanvas(pointer.x); - var y = this._YconvertDOMtoCanvas(pointer.y); - return { - left: x, - top: y, - right: x, - bottom: y - }; - }; + // remove the childNode from the global nodes object + delete this.nodes[childNode.id]; + // update the properties of the child and parent + var massBefore = parentNode.options.mass; + childNode.clusterSession = this.clusterSession; + parentNode.options.mass += childNode.options.mass; + parentNode.clusterSize += childNode.clusterSize; + parentNode.options.fontSize = Math.min(this.constants.clustering.maxFontSize, this.constants.nodes.fontSize + this.constants.clustering.fontSizeMultiplier*parentNode.clusterSize); - /** - * Get the top node at the a specific point (like a click) - * - * @param {{x: Number, y: Number}} pointer - * @return {Node | null} node - * @private - */ - exports._getNodeAt = function (pointer) { - // we first check if this is an navigation controls element - var positionObject = this._pointerToPositionObject(pointer); - var overlappingNodes = this._getAllNodesOverlappingWith(positionObject); + // keep track of the clustersessions so we can open the cluster up as it has been formed. + if (parentNode.clusterSessions[parentNode.clusterSessions.length - 1] != this.clusterSession) { + parentNode.clusterSessions.push(this.clusterSession); + } - // if there are overlapping nodes, select the last one, this is the - // one which is drawn on top of the others - if (overlappingNodes.length > 0) { - return this.nodes[overlappingNodes[overlappingNodes.length - 1]]; + // forced clusters only open from screen size and double tap + if (force == true) { + // parentNode.formationScale = Math.pow(1 - (1.0/11.0),this.clusterSession+3); + parentNode.formationScale = 0; } else { - return null; + parentNode.formationScale = this.scale; // The latest child has been added on this scale } - }; + // recalculate the size of the node on the next time the node is rendered + parentNode.clearSizeCache(); - /** - * retrieve all edges overlapping with given object, selector is around center - * @param {Object} object An object with parameters left, top, right, bottom - * @return {Number[]} An array with id's of the overlapping nodes - * @private - */ - exports._getEdgesOverlappingWith = function (object, overlappingEdges) { - var edges = this.edges; - for (var edgeId in edges) { - if (edges.hasOwnProperty(edgeId)) { - if (edges[edgeId].isOverlappingWith(object)) { - overlappingEdges.push(edgeId); - } - } - } - }; + // set the pop-out scale for the childnode + parentNode.containedNodes[childNode.id].formationScale = parentNode.formationScale; + // nullify the movement velocity of the child, this is to avoid hectic behaviour + childNode.clearVelocity(); - /** - * retrieve all nodes overlapping with given object - * @param {Object} object An object with parameters left, top, right, bottom - * @return {Number[]} An array with id's of the overlapping nodes - * @private - */ - exports._getAllEdgesOverlappingWith = function (object) { - var overlappingEdges = []; - this._doInAllActiveSectors("_getEdgesOverlappingWith",object,overlappingEdges); - return overlappingEdges; + // the mass has altered, preservation of energy dictates the velocity to be updated + parentNode.updateVelocity(massBefore); + + // restart the simulation to reorganise all nodes + this.moving = true; }; + /** - * Place holder. To implement change the _getNodeAt to a _getObjectAt. Have the _getObjectAt call - * _getNodeAt and _getEdgesAt, then priortize the selection to user preferences. - * - * @param pointer - * @returns {null} + * This function will apply the changes made to the remainingEdges during the formation of the clusters. + * This is a seperate function to allow for level-wise collapsing of the node barnesHutTree. + * It has to be called if a level is collapsed. It is called by _formClusters(). * @private */ - exports._getEdgeAt = function(pointer) { - var positionObject = this._pointerToPositionObject(pointer); - var overlappingEdges = this._getAllEdgesOverlappingWith(positionObject); + exports._updateDynamicEdges = function() { + for (var i = 0; i < this.nodeIndices.length; i++) { + var node = this.nodes[this.nodeIndices[i]]; + node.dynamicEdgesLength = node.dynamicEdges.length; - if (overlappingEdges.length > 0) { - return this.edges[overlappingEdges[overlappingEdges.length - 1]]; - } - else { - return null; + // this corrects for multiple edges pointing at the same other node + var correction = 0; + if (node.dynamicEdgesLength > 1) { + for (var j = 0; j < node.dynamicEdgesLength - 1; j++) { + var edgeToId = node.dynamicEdges[j].toId; + var edgeFromId = node.dynamicEdges[j].fromId; + for (var k = j+1; k < node.dynamicEdgesLength; k++) { + if ((node.dynamicEdges[k].toId == edgeToId && node.dynamicEdges[k].fromId == edgeFromId) || + (node.dynamicEdges[k].fromId == edgeToId && node.dynamicEdges[k].toId == edgeFromId)) { + correction += 1; + } + } + } + } + node.dynamicEdgesLength -= correction; } }; /** - * Add object to the selection array. + * This adds an edge from the childNode to the contained edges of the parent node * - * @param obj + * @param parentNode | Node object + * @param childNode | Node object + * @param edge | Edge object * @private */ - exports._addToSelection = function(obj) { - if (obj instanceof Node) { - this.selectionObj.nodes[obj.id] = obj; + exports._addToContainedEdges = function(parentNode, childNode, edge) { + // create an array object if it does not yet exist for this childNode + if (!(parentNode.containedEdges.hasOwnProperty(childNode.id))) { + parentNode.containedEdges[childNode.id] = [] } - else { - this.selectionObj.edges[obj.id] = obj; + // add this edge to the list + parentNode.containedEdges[childNode.id].push(edge); + + // remove the edge from the global edges object + delete this.edges[edge.id]; + + // remove the edge from the parent object + for (var i = 0; i < parentNode.dynamicEdges.length; i++) { + if (parentNode.dynamicEdges[i].id == edge.id) { + parentNode.dynamicEdges.splice(i,1); + break; + } } }; /** - * Add object to the selection array. + * This function connects an edge that was connected to a child node to the parent node. + * It keeps track of which nodes it has been connected to with the originalId array. * - * @param obj + * @param {Node} parentNode | Node object + * @param {Node} childNode | Node object + * @param {Edge} edge | Edge object * @private */ - exports._addToHover = function(obj) { - if (obj instanceof Node) { - this.hoverObj.nodes[obj.id] = obj; + exports._connectEdgeToCluster = function(parentNode, childNode, edge) { + // handle circular edges + if (edge.toId == edge.fromId) { + this._addToContainedEdges(parentNode, childNode, edge); } else { - this.hoverObj.edges[obj.id] = obj; - } - }; + if (edge.toId == childNode.id) { // edge connected to other node on the "to" side + edge.originalToId.push(childNode.id); + edge.to = parentNode; + edge.toId = parentNode.id; + } + else { // edge connected to other node with the "from" side + edge.originalFromId.push(childNode.id); + edge.from = parentNode; + edge.fromId = parentNode.id; + } - /** - * Remove a single option from selection. - * - * @param {Object} obj - * @private - */ - exports._removeFromSelection = function(obj) { - if (obj instanceof Node) { - delete this.selectionObj.nodes[obj.id]; - } - else { - delete this.selectionObj.edges[obj.id]; + this._addToReroutedEdges(parentNode,childNode,edge); } }; + /** - * Unselect all. The selectionObj is useful for this. + * If a node is connected to itself, a circular edge is drawn. When clustering we want to contain + * these edges inside of the cluster. * - * @param {Boolean} [doNotTrigger] | ignore trigger + * @param parentNode + * @param childNode * @private */ - exports._unselectAll = function(doNotTrigger) { - if (doNotTrigger === undefined) { - doNotTrigger = false; - } - for(var nodeId in this.selectionObj.nodes) { - if(this.selectionObj.nodes.hasOwnProperty(nodeId)) { - this.selectionObj.nodes[nodeId].unselect(); - } - } - for(var edgeId in this.selectionObj.edges) { - if(this.selectionObj.edges.hasOwnProperty(edgeId)) { - this.selectionObj.edges[edgeId].unselect(); + exports._containCircularEdgesFromNode = function(parentNode, childNode) { + // manage all the edges connected to the child and parent nodes + for (var i = 0; i < parentNode.dynamicEdges.length; i++) { + var edge = parentNode.dynamicEdges[i]; + // handle circular edges + if (edge.toId == edge.fromId) { + this._addToContainedEdges(parentNode, childNode, edge); } } - - this.selectionObj = {nodes:{},edges:{}}; - - if (doNotTrigger == false) { - this.emit('select', this.getSelection()); - } }; + /** - * Unselect all clusters. The selectionObj is useful for this. + * This adds an edge from the childNode to the rerouted edges of the parent node * - * @param {Boolean} [doNotTrigger] | ignore trigger + * @param parentNode | Node object + * @param childNode | Node object + * @param edge | Edge object * @private */ - exports._unselectClusters = function(doNotTrigger) { - if (doNotTrigger === undefined) { - doNotTrigger = false; + exports._addToReroutedEdges = function(parentNode, childNode, edge) { + // create an array object if it does not yet exist for this childNode + // we store the edge in the rerouted edges so we can restore it when the cluster pops open + if (!(parentNode.reroutedEdges.hasOwnProperty(childNode.id))) { + parentNode.reroutedEdges[childNode.id] = []; } + parentNode.reroutedEdges[childNode.id].push(edge); - for (var nodeId in this.selectionObj.nodes) { - if (this.selectionObj.nodes.hasOwnProperty(nodeId)) { - if (this.selectionObj.nodes[nodeId].clusterSize > 1) { - this.selectionObj.nodes[nodeId].unselect(); - this._removeFromSelection(this.selectionObj.nodes[nodeId]); - } - } - } + // this edge becomes part of the dynamicEdges of the cluster node + parentNode.dynamicEdges.push(edge); + }; - if (doNotTrigger == false) { - this.emit('select', this.getSelection()); - } - }; /** - * return the number of selected nodes + * This function connects an edge that was connected to a cluster node back to the child node. * - * @returns {number} + * @param parentNode | Node object + * @param childNode | Node object * @private */ - exports._getSelectedNodeCount = function() { - var count = 0; - for (var nodeId in this.selectionObj.nodes) { - if (this.selectionObj.nodes.hasOwnProperty(nodeId)) { - count += 1; - } - } - return count; - }; + exports._connectEdgeBackToChild = function(parentNode, childNode) { + if (parentNode.reroutedEdges.hasOwnProperty(childNode.id)) { + for (var i = 0; i < parentNode.reroutedEdges[childNode.id].length; i++) { + var edge = parentNode.reroutedEdges[childNode.id][i]; + if (edge.originalFromId[edge.originalFromId.length-1] == childNode.id) { + edge.originalFromId.pop(); + edge.fromId = childNode.id; + edge.from = childNode; + } + else { + edge.originalToId.pop(); + edge.toId = childNode.id; + edge.to = childNode; + } - /** - * return the selected node - * - * @returns {number} - * @private - */ - exports._getSelectedNode = function() { - for (var nodeId in this.selectionObj.nodes) { - if (this.selectionObj.nodes.hasOwnProperty(nodeId)) { - return this.selectionObj.nodes[nodeId]; + // append this edge to the list of edges connecting to the childnode + childNode.dynamicEdges.push(edge); + + // remove the edge from the parent object + for (var j = 0; j < parentNode.dynamicEdges.length; j++) { + if (parentNode.dynamicEdges[j].id == edge.id) { + parentNode.dynamicEdges.splice(j,1); + break; + } + } } + // remove the entry from the rerouted edges + delete parentNode.reroutedEdges[childNode.id]; } - return null; }; + /** - * return the selected edge + * When loops are clustered, an edge can be both in the rerouted array and the contained array. + * This function is called last to verify that all edges in dynamicEdges are in fact connected to the + * parentNode * - * @returns {number} + * @param parentNode | Node object * @private */ - exports._getSelectedEdge = function() { - for (var edgeId in this.selectionObj.edges) { - if (this.selectionObj.edges.hasOwnProperty(edgeId)) { - return this.selectionObj.edges[edgeId]; + exports._validateEdges = function(parentNode) { + for (var i = 0; i < parentNode.dynamicEdges.length; i++) { + var edge = parentNode.dynamicEdges[i]; + if (parentNode.id != edge.toId && parentNode.id != edge.fromId) { + parentNode.dynamicEdges.splice(i,1); } } - return null; }; /** - * return the number of selected edges + * This function released the contained edges back into the global domain and puts them back into the + * dynamic edges of both parent and child. * - * @returns {number} + * @param {Node} parentNode | + * @param {Node} childNode | * @private */ - exports._getSelectedEdgeCount = function() { - var count = 0; - for (var edgeId in this.selectionObj.edges) { - if (this.selectionObj.edges.hasOwnProperty(edgeId)) { - count += 1; - } + exports._releaseContainedEdges = function(parentNode, childNode) { + for (var i = 0; i < parentNode.containedEdges[childNode.id].length; i++) { + var edge = parentNode.containedEdges[childNode.id][i]; + + // put the edge back in the global edges object + this.edges[edge.id] = edge; + + // put the edge back in the dynamic edges of the child and parent + childNode.dynamicEdges.push(edge); + parentNode.dynamicEdges.push(edge); } - return count; + // remove the entry from the contained edges + delete parentNode.containedEdges[childNode.id]; + }; + + + // ------------------- UTILITY FUNCTIONS ---------------------------- // + + /** - * return the number of selected objects. - * - * @returns {number} - * @private + * This updates the node labels for all nodes (for debugging purposes) */ - exports._getSelectedObjectCount = function() { - var count = 0; - for(var nodeId in this.selectionObj.nodes) { - if(this.selectionObj.nodes.hasOwnProperty(nodeId)) { - count += 1; + exports.updateLabels = function() { + var nodeId; + // update node labels + for (nodeId in this.nodes) { + if (this.nodes.hasOwnProperty(nodeId)) { + var node = this.nodes[nodeId]; + if (node.clusterSize > 1) { + node.label = "[".concat(String(node.clusterSize),"]"); + } } } - for(var edgeId in this.selectionObj.edges) { - if(this.selectionObj.edges.hasOwnProperty(edgeId)) { - count += 1; + + // update node labels + for (nodeId in this.nodes) { + if (this.nodes.hasOwnProperty(nodeId)) { + node = this.nodes[nodeId]; + if (node.clusterSize == 1) { + if (node.originalLabel !== undefined) { + node.label = node.originalLabel; + } + else { + node.label = String(node.id); + } + } } } - return count; + + // /* Debug Override */ + // for (nodeId in this.nodes) { + // if (this.nodes.hasOwnProperty(nodeId)) { + // node = this.nodes[nodeId]; + // node.label = String(node.level); + // } + // } + }; + /** - * Check if anything is selected - * - * @returns {boolean} - * @private + * We want to keep the cluster level distribution rather small. This means we do not want unclustered nodes + * if the rest of the nodes are already a few cluster levels in. + * To fix this we use this function. It determines the min and max cluster level and sends nodes that have not + * clustered enough to the clusterToSmallestNeighbours function. */ - exports._selectionIsEmpty = function() { - for(var nodeId in this.selectionObj.nodes) { - if(this.selectionObj.nodes.hasOwnProperty(nodeId)) { - return false; - } - } - for(var edgeId in this.selectionObj.edges) { - if(this.selectionObj.edges.hasOwnProperty(edgeId)) { - return false; + exports.normalizeClusterLevels = function() { + var maxLevel = 0; + var minLevel = 1e9; + var clusterLevel = 0; + var nodeId; + + // we loop over all nodes in the list + for (nodeId in this.nodes) { + if (this.nodes.hasOwnProperty(nodeId)) { + clusterLevel = this.nodes[nodeId].clusterSessions.length; + if (maxLevel < clusterLevel) {maxLevel = clusterLevel;} + if (minLevel > clusterLevel) {minLevel = clusterLevel;} } } - return true; - }; - - /** - * check if one of the selected nodes is a cluster. - * - * @returns {boolean} - * @private - */ - exports._clusterInSelection = function() { - for(var nodeId in this.selectionObj.nodes) { - if(this.selectionObj.nodes.hasOwnProperty(nodeId)) { - if (this.selectionObj.nodes[nodeId].clusterSize > 1) { - return true; + if (maxLevel - minLevel > this.constants.clustering.clusterLevelDifference) { + var amountOfNodes = this.nodeIndices.length; + var targetLevel = maxLevel - this.constants.clustering.clusterLevelDifference; + // we loop over all nodes in the list + for (nodeId in this.nodes) { + if (this.nodes.hasOwnProperty(nodeId)) { + if (this.nodes[nodeId].clusterSessions.length < targetLevel) { + this._clusterToSmallestNeighbour(this.nodes[nodeId]); + } } } + this._updateNodeIndexList(); + this._updateDynamicEdges(); + // if a cluster was formed, we increase the clusterSession + if (this.nodeIndices.length != amountOfNodes) { + this.clusterSession += 1; + } } - return false; }; - /** - * select the edges connected to the node that is being selected - * - * @param {Node} node - * @private - */ - exports._selectConnectedEdges = function(node) { - for (var i = 0; i < node.dynamicEdges.length; i++) { - var edge = node.dynamicEdges[i]; - edge.select(); - this._addToSelection(edge); - } - }; + /** - * select the edges connected to the node that is being selected + * This function determines if the cluster we want to decluster is in the active area + * this means around the zoom center * * @param {Node} node + * @returns {boolean} * @private */ - exports._hoverConnectedEdges = function(node) { - for (var i = 0; i < node.dynamicEdges.length; i++) { - var edge = node.dynamicEdges[i]; - edge.hover = true; - this._addToHover(edge); - } + exports._nodeInActiveArea = function(node) { + return ( + Math.abs(node.x - this.areaCenter.x) <= this.constants.clustering.activeAreaBoxSize/this.scale + && + Math.abs(node.y - this.areaCenter.y) <= this.constants.clustering.activeAreaBoxSize/this.scale + ) }; /** - * unselect the edges connected to the node that is being selected + * This is an adaptation of the original repositioning function. This is called if the system is clustered initially + * It puts large clusters away from the center and randomizes the order. * - * @param {Node} node - * @private */ - exports._unselectConnectedEdges = function(node) { - for (var i = 0; i < node.dynamicEdges.length; i++) { - var edge = node.dynamicEdges[i]; - edge.unselect(); - this._removeFromSelection(edge); + exports.repositionNodes = function() { + for (var i = 0; i < this.nodeIndices.length; i++) { + var node = this.nodes[this.nodeIndices[i]]; + if ((node.xFixed == false || node.yFixed == false)) { + var radius = 10 * 0.1*this.nodeIndices.length * Math.min(100,node.options.mass); + var angle = 2 * Math.PI * Math.random(); + if (node.xFixed == false) {node.x = radius * Math.cos(angle);} + if (node.yFixed == false) {node.y = radius * Math.sin(angle);} + this._repositionBezierNodes(node); + } } }; - - /** - * This is called when someone clicks on a node. either select or deselect it. - * If there is an existing selection and we don't want to append to it, clear the existing selection + * We determine how many connections denote an important hub. + * We take the mean + 2*std as the important hub size. (Assuming a normal distribution of data, ~2.2%) * - * @param {Node || Edge} object - * @param {Boolean} append - * @param {Boolean} [doNotTrigger] | ignore trigger * @private */ - exports._selectObject = function(object, append, doNotTrigger, highlightEdges, overrideSelectable) { - if (doNotTrigger === undefined) { - doNotTrigger = false; - } - if (highlightEdges === undefined) { - highlightEdges = true; - } + exports._getHubSize = function() { + var average = 0; + var averageSquared = 0; + var hubCounter = 0; + var largestHub = 0; - if (this._selectionIsEmpty() == false && append == false && this.forceAppendSelection == false) { - this._unselectAll(true); - } + for (var i = 0; i < this.nodeIndices.length; i++) { - // selectable allows the object to be selected. Override can be used if needed to bypass this. - if (object.selected == false && (this.constants.selectable == true || overrideSelectable)) { - object.select(); - this._addToSelection(object); - if (object instanceof Node && this.blockConnectingEdgeSelection == false && highlightEdges == true) { - this._selectConnectedEdges(object); + var node = this.nodes[this.nodeIndices[i]]; + if (node.dynamicEdgesLength > largestHub) { + largestHub = node.dynamicEdgesLength; } + average += node.dynamicEdgesLength; + averageSquared += Math.pow(node.dynamicEdgesLength,2); + hubCounter += 1; } - // do not select the object if selectable is false, only add it to selection to allow drag to work - else if (object.selected == false) { - this._addToSelection(object); - doNotTrigger = true; - } - else { - object.unselect(); - this._removeFromSelection(object); - } + average = average / hubCounter; + averageSquared = averageSquared / hubCounter; - if (doNotTrigger == false) { - this.emit('select', this.getSelection()); + var variance = averageSquared - Math.pow(average,2); + + var standardDeviation = Math.sqrt(variance); + + this.hubThreshold = Math.floor(average + 2*standardDeviation); + + // always have at least one to cluster + if (this.hubThreshold > largestHub) { + this.hubThreshold = largestHub; } + + // console.log("average",average,"averageSQ",averageSquared,"var",variance,"std",standardDeviation); + // console.log("hubThreshold:",this.hubThreshold); }; /** - * This is called when someone clicks on a node. either select or deselect it. - * If there is an existing selection and we don't want to append to it, clear the existing selection + * We reduce the amount of "extension nodes" or chains. These are not quickly clustered with the outliers and hubs methods + * with this amount we can cluster specifically on these chains. * - * @param {Node || Edge} object + * @param {Number} fraction | between 0 and 1, the percentage of chains to reduce * @private */ - exports._blurObject = function(object) { - if (object.hover == true) { - object.hover = false; - this.emit("blurNode",{node:object.id}); + exports._reduceAmountOfChains = function(fraction) { + this.hubThreshold = 2; + var reduceAmount = Math.floor(this.nodeIndices.length * fraction); + for (var nodeId in this.nodes) { + if (this.nodes.hasOwnProperty(nodeId)) { + if (this.nodes[nodeId].dynamicEdgesLength == 2 && this.nodes[nodeId].dynamicEdges.length >= 2) { + if (reduceAmount > 0) { + this._formClusterFromHub(this.nodes[nodeId],true,true,1); + reduceAmount -= 1; + } + } + } } }; /** - * This is called when someone clicks on a node. either select or deselect it. - * If there is an existing selection and we don't want to append to it, clear the existing selection + * We get the amount of "extension nodes" or chains. These are not quickly clustered with the outliers and hubs methods + * with this amount we can cluster specifically on these chains. * - * @param {Node || Edge} object * @private */ - exports._hoverObject = function(object) { - if (object.hover == false) { - object.hover = true; - this._addToHover(object); - if (object instanceof Node) { - this.emit("hoverNode",{node:object.id}); + exports._getChainFraction = function() { + var chains = 0; + var total = 0; + for (var nodeId in this.nodes) { + if (this.nodes.hasOwnProperty(nodeId)) { + if (this.nodes[nodeId].dynamicEdgesLength == 2 && this.nodes[nodeId].dynamicEdges.length >= 2) { + chains += 1; + } + total += 1; } } - if (object instanceof Node) { - this._hoverConnectedEdges(object); - } + return chains/total; }; +/***/ }, +/* 65 */ +/***/ function(module, exports, __webpack_require__) { + + var util = __webpack_require__(1); + var Node = __webpack_require__(56); + /** - * handles the selection part of the touch, only for navigation controls elements; - * Touch is triggered before tap, also before hold. Hold triggers after a while. - * This is the most responsive solution + * Creation of the SectorMixin var. + * + * This contains all the functions the Network object can use to employ the sector system. + * The sector system is always used by Network, though the benefits only apply to the use of clustering. + * If clustering is not used, there is no overhead except for a duplicate object with references to nodes and edges. + */ + + /** + * This function is only called by the setData function of the Network object. + * This loads the global references into the active sector. This initializes the sector. * - * @param {Object} pointer * @private */ - exports._handleTouch = function(pointer) { + exports._putDataInSector = function() { + this.sectors["active"][this._sector()].nodes = this.nodes; + this.sectors["active"][this._sector()].edges = this.edges; + this.sectors["active"][this._sector()].nodeIndices = this.nodeIndices; }; /** - * handles the selection part of the tap; + * /** + * This function sets the global references to nodes, edges and nodeIndices back to + * those of the supplied (active) sector. If a type is defined, do the specific type * - * @param {Object} pointer + * @param {String} sectorId + * @param {String} [sectorType] | "active" or "frozen" * @private */ - exports._handleTap = function(pointer) { - var node = this._getNodeAt(pointer); - if (node != null) { - this._selectObject(node, false); + exports._switchToSector = function(sectorId, sectorType) { + if (sectorType === undefined || sectorType == "active") { + this._switchToActiveSector(sectorId); } else { - var edge = this._getEdgeAt(pointer); - if (edge != null) { - this._selectObject(edge, false); - } - else { - this._unselectAll(); - } - } - var properties = this.getSelection(); - properties['pointer'] = { - DOM: {x: pointer.x, y: pointer.y}, - canvas: {x: this._XconvertDOMtoCanvas(pointer.x), y: this._YconvertDOMtoCanvas(pointer.y)} + this._switchToFrozenSector(sectorId); } - this.emit("click", properties); - this._redraw(); }; /** - * handles the selection part of the double tap and opens a cluster if needed + * This function sets the global references to nodes, edges and nodeIndices back to + * those of the supplied active sector. * - * @param {Object} pointer + * @param sectorId * @private */ - exports._handleDoubleTap = function(pointer) { - var node = this._getNodeAt(pointer); - if (node != null && node !== undefined) { - // we reset the areaCenter here so the opening of the node will occur - this.areaCenter = {"x" : this._XconvertDOMtoCanvas(pointer.x), - "y" : this._YconvertDOMtoCanvas(pointer.y)}; - this.openCluster(node); - } - var properties = this.getSelection(); - properties['pointer'] = { - DOM: {x: pointer.x, y: pointer.y}, - canvas: {x: this._XconvertDOMtoCanvas(pointer.x), y: this._YconvertDOMtoCanvas(pointer.y)} - } - this.emit("doubleClick", properties); + exports._switchToActiveSector = function(sectorId) { + this.nodeIndices = this.sectors["active"][sectorId]["nodeIndices"]; + this.nodes = this.sectors["active"][sectorId]["nodes"]; + this.edges = this.sectors["active"][sectorId]["edges"]; }; /** - * Handle the onHold selection part + * This function sets the global references to nodes, edges and nodeIndices back to + * those of the supplied active sector. * - * @param pointer * @private */ - exports._handleOnHold = function(pointer) { - var node = this._getNodeAt(pointer); - if (node != null) { - this._selectObject(node,true); - } - else { - var edge = this._getEdgeAt(pointer); - if (edge != null) { - this._selectObject(edge,true); - } - } - this._redraw(); + exports._switchToSupportSector = function() { + this.nodeIndices = this.sectors["support"]["nodeIndices"]; + this.nodes = this.sectors["support"]["nodes"]; + this.edges = this.sectors["support"]["edges"]; }; /** - * handle the onRelease event. These functions are here for the navigation controls module - * and data manipulation module. + * This function sets the global references to nodes, edges and nodeIndices back to + * those of the supplied frozen sector. * - * @private + * @param sectorId + * @private */ - exports._handleOnRelease = function(pointer) { - this._manipulationReleaseOverload(pointer); - this._navigationReleaseOverload(pointer); + exports._switchToFrozenSector = function(sectorId) { + this.nodeIndices = this.sectors["frozen"][sectorId]["nodeIndices"]; + this.nodes = this.sectors["frozen"][sectorId]["nodes"]; + this.edges = this.sectors["frozen"][sectorId]["edges"]; + }; + + + /** + * This function sets the global references to nodes, edges and nodeIndices back to + * those of the currently active sector. + * + * @private + */ + exports._loadLatestSector = function() { + this._switchToSector(this._sector()); }; - exports._manipulationReleaseOverload = function (pointer) {}; - exports._navigationReleaseOverload = function (pointer) {}; /** + * This function returns the currently active sector Id * - * retrieve the currently selected objects - * @return {{nodes: Array., edges: Array.}} selection + * @returns {String} + * @private */ - exports.getSelection = function() { - var nodeIds = this.getSelectedNodes(); - var edgeIds = this.getSelectedEdges(); - return {nodes:nodeIds, edges:edgeIds}; + exports._sector = function() { + return this.activeSector[this.activeSector.length-1]; }; + /** + * This function returns the previously active sector Id * - * retrieve the currently selected nodes - * @return {String[]} selection An array with the ids of the - * selected nodes. + * @returns {String} + * @private */ - exports.getSelectedNodes = function() { - var idArray = []; - if (this.constants.selectable == true) { - for (var nodeId in this.selectionObj.nodes) { - if (this.selectionObj.nodes.hasOwnProperty(nodeId)) { - idArray.push(nodeId); - } - } + exports._previousSector = function() { + if (this.activeSector.length > 1) { + return this.activeSector[this.activeSector.length-2]; + } + else { + throw new TypeError('there are not enough sectors in the this.activeSector array.'); } - return idArray }; + /** + * We add the active sector at the end of the this.activeSector array + * This ensures it is the currently active sector returned by _sector() and it reaches the top + * of the activeSector stack. When we reverse our steps we move from the end to the beginning of this stack. * - * retrieve the currently selected edges - * @return {Array} selection An array with the ids of the - * selected nodes. + * @param newId + * @private */ - exports.getSelectedEdges = function() { - var idArray = []; - if (this.constants.selectable == true) { - for (var edgeId in this.selectionObj.edges) { - if (this.selectionObj.edges.hasOwnProperty(edgeId)) { - idArray.push(edgeId); - } - } - } - return idArray; + exports._setActiveSector = function(newId) { + this.activeSector.push(newId); }; /** - * select zero or more nodes DEPRICATED - * @param {Number[] | String[]} selection An array with the ids of the - * selected nodes. + * We remove the currently active sector id from the active sector stack. This happens when + * we reactivate the previously active sector + * + * @private */ - exports.setSelection = function() { - console.log("setSelection is deprecated. Please use selectNodes instead.") + exports._forgetLastSector = function() { + this.activeSector.pop(); }; /** - * select zero or more nodes with the option to highlight edges - * @param {Number[] | String[]} selection An array with the ids of the - * selected nodes. - * @param {boolean} [highlightEdges] + * This function creates a new active sector with the supplied newId. This newId + * is the expanding node id. + * + * @param {String} newId | Id of the new active sector + * @private */ - exports.selectNodes = function(selection, highlightEdges) { - var i, iMax, id; - - if (!selection || (selection.length == undefined)) - throw 'Selection must be an array with ids'; - - // first unselect any selected node - this._unselectAll(true); - - for (i = 0, iMax = selection.length; i < iMax; i++) { - id = selection[i]; + exports._createNewSector = function(newId) { + // create the new sector + this.sectors["active"][newId] = {"nodes":{}, + "edges":{}, + "nodeIndices":[], + "formationScale": this.scale, + "drawingNode": undefined}; - var node = this.nodes[id]; - if (!node) { - throw new RangeError('Node with id "' + id + '" not found'); - } - this._selectObject(node,true,true,highlightEdges,true); - } - this.redraw(); + // create the new sector render node. This gives visual feedback that you are in a new sector. + this.sectors["active"][newId]['drawingNode'] = new Node( + {id:newId, + color: { + background: "#eaefef", + border: "495c5e" + } + },{},{},this.constants); + this.sectors["active"][newId]['drawingNode'].clusterSize = 2; }; /** - * select zero or more edges - * @param {Number[] | String[]} selection An array with the ids of the - * selected nodes. + * This function removes the currently active sector. This is called when we create a new + * active sector. + * + * @param {String} sectorId | Id of the active sector that will be removed + * @private */ - exports.selectEdges = function(selection) { - var i, iMax, id; - - if (!selection || (selection.length == undefined)) - throw 'Selection must be an array with ids'; - - // first unselect any selected node - this._unselectAll(true); - - for (i = 0, iMax = selection.length; i < iMax; i++) { - id = selection[i]; - - var edge = this.edges[id]; - if (!edge) { - throw new RangeError('Edge with id "' + id + '" not found'); - } - this._selectObject(edge,true,true,false,true); - } - this.redraw(); + exports._deleteActiveSector = function(sectorId) { + delete this.sectors["active"][sectorId]; }; + /** - * Validate the selection: remove ids of nodes which no longer exist + * This function removes the currently active sector. This is called when we reactivate + * the previously active sector. + * + * @param {String} sectorId | Id of the active sector that will be removed * @private */ - exports._updateSelection = function () { - for(var nodeId in this.selectionObj.nodes) { - if(this.selectionObj.nodes.hasOwnProperty(nodeId)) { - if (!this.nodes.hasOwnProperty(nodeId)) { - delete this.selectionObj.nodes[nodeId]; - } - } - } - for(var edgeId in this.selectionObj.edges) { - if(this.selectionObj.edges.hasOwnProperty(edgeId)) { - if (!this.edges.hasOwnProperty(edgeId)) { - delete this.selectionObj.edges[edgeId]; - } - } - } + exports._deleteFrozenSector = function(sectorId) { + delete this.sectors["frozen"][sectorId]; }; -/***/ }, -/* 63 */ -/***/ function(module, exports, __webpack_require__) { + /** + * Freezing an active sector means moving it from the "active" object to the "frozen" object. + * We copy the references, then delete the active entree. + * + * @param sectorId + * @private + */ + exports._freezeSector = function(sectorId) { + // we move the set references from the active to the frozen stack. + this.sectors["frozen"][sectorId] = this.sectors["active"][sectorId]; + + // we have moved the sector data into the frozen set, we now remove it from the active set + this._deleteActiveSector(sectorId); + }; - var util = __webpack_require__(1); - var Node = __webpack_require__(40); - var Edge = __webpack_require__(37); /** - * clears the toolbar div element of children + * This is the reverse operation of _freezeSector. Activating means moving the sector from the "frozen" + * object to the "active" object. * + * @param sectorId * @private */ - exports._clearManipulatorBar = function() { - while (this.manipulationDiv.hasChildNodes()) { - this.manipulationDiv.removeChild(this.manipulationDiv.firstChild); - } - this.manipulationDOM = {}; + exports._activateSector = function(sectorId) { + // we move the set references from the frozen to the active stack. + this.sectors["active"][sectorId] = this.sectors["frozen"][sectorId]; - this._manipulationReleaseOverload = function () {}; - delete this.sectors['support']['nodes']['targetNode']; - delete this.sectors['support']['nodes']['targetViaNode']; - this.controlNodesActive = false; + // we have moved the sector data into the active set, we now remove it from the frozen stack + this._deleteFrozenSector(sectorId); }; + /** - * Manipulation UI temporarily overloads certain functions to extend or replace them. To be able to restore - * these functions to their original functionality, we saved them in this.cachedFunctions. - * This function restores these functions to their original function. + * This function merges the data from the currently active sector with a frozen sector. This is used + * in the process of reverting back to the previously active sector. + * The data that is placed in the frozen (the previously active) sector is the node that has been removed from it + * upon the creation of a new active sector. * + * @param sectorId * @private */ - exports._restoreOverloadedFunctions = function() { - for (var functionName in this.cachedFunctions) { - if (this.cachedFunctions.hasOwnProperty(functionName)) { - this[functionName] = this.cachedFunctions[functionName]; + exports._mergeThisWithFrozen = function(sectorId) { + // copy all nodes + for (var nodeId in this.nodes) { + if (this.nodes.hasOwnProperty(nodeId)) { + this.sectors["frozen"][sectorId]["nodes"][nodeId] = this.nodes[nodeId]; } } + + // copy all edges (if not fully clustered, else there are no edges) + for (var edgeId in this.edges) { + if (this.edges.hasOwnProperty(edgeId)) { + this.sectors["frozen"][sectorId]["edges"][edgeId] = this.edges[edgeId]; + } + } + + // merge the nodeIndices + for (var i = 0; i < this.nodeIndices.length; i++) { + this.sectors["frozen"][sectorId]["nodeIndices"].push(this.nodeIndices[i]); + } }; + /** - * Enable or disable edit-mode. + * This clusters the sector to one cluster. It was a single cluster before this process started so + * we revert to that state. The clusterToFit function with a maximum size of 1 node does this. * * @private */ - exports._toggleEditMode = function() { - this.editMode = !this.editMode; - var toolbar = this.manipulationDiv; - var closeDiv = this.closeDiv; - var editModeDiv = this.editModeDiv; - if (this.editMode == true) { - toolbar.style.display="block"; - closeDiv.style.display="block"; - editModeDiv.style.display="none"; - closeDiv.onclick = this._toggleEditMode.bind(this); - } - else { - toolbar.style.display="none"; - closeDiv.style.display="none"; - editModeDiv.style.display="block"; - closeDiv.onclick = null; - } - this._createManipulatorBar() + exports._collapseThisToSingleCluster = function() { + this.clusterToFit(1,false); }; + /** - * main function, creates the main toolbar. Removes functions bound to the select event. Binds all the buttons of the toolbar. + * We create a new active sector from the node that we want to open. * + * @param node * @private */ - exports._createManipulatorBar = function() { - // remove bound functions - if (this.boundFunction) { - this.off('select', this.boundFunction); - } + exports._addSector = function(node) { + // this is the currently active sector + var sector = this._sector(); - var locale = this.constants.locales[this.constants.locale]; + // // this should allow me to select nodes from a frozen set. + // if (this.sectors['active'][sector]["nodes"].hasOwnProperty(node.id)) { + // console.log("the node is part of the active sector"); + // } + // else { + // console.log("I dont know what the fuck happened!!"); + // } - if (this.edgeBeingEdited !== undefined) { - this.edgeBeingEdited._disableControlNodes(); - this.edgeBeingEdited = undefined; - this.selectedControlNode = null; - this.controlNodesActive = false; - this._redraw(); - } + // when we switch to a new sector, we remove the node that will be expanded from the current nodes list. + delete this.nodes[node.id]; - // restore overloaded functions - this._restoreOverloadedFunctions(); + var unqiueIdentifier = util.randomUUID(); - // resume calculation - this.freezeSimulation = false; + // we fully freeze the currently active sector + this._freezeSector(sector); - // reset global variables - this.blockConnectingEdgeSelection = false; - this.forceAppendSelection = false; - this.manipulationDOM = {}; + // we create a new active sector. This sector has the Id of the node to ensure uniqueness + this._createNewSector(unqiueIdentifier); - if (this.editMode == true) { - while (this.manipulationDiv.hasChildNodes()) { - this.manipulationDiv.removeChild(this.manipulationDiv.firstChild); - } + // we add the active sector to the sectors array to be able to revert these steps later on + this._setActiveSector(unqiueIdentifier); - this.manipulationDOM['addNodeSpan'] = document.createElement('span'); - this.manipulationDOM['addNodeSpan'].className = 'network-manipulationUI add'; - this.manipulationDOM['addNodeLabelSpan'] = document.createElement('span'); - this.manipulationDOM['addNodeLabelSpan'].className = 'network-manipulationLabel'; - this.manipulationDOM['addNodeLabelSpan'].innerHTML = locale['addNode']; - this.manipulationDOM['addNodeSpan'].appendChild(this.manipulationDOM['addNodeLabelSpan']); + // we redirect the global references to the new sector's references. this._sector() now returns unqiueIdentifier + this._switchToSector(this._sector()); - this.manipulationDOM['seperatorLineDiv1'] = document.createElement('div'); - this.manipulationDOM['seperatorLineDiv1'].className = 'network-seperatorLine'; + // finally we add the node we removed from our previous active sector to the new active sector + this.nodes[node.id] = node; + }; - this.manipulationDOM['addEdgeSpan'] = document.createElement('span'); - this.manipulationDOM['addEdgeSpan'].className = 'network-manipulationUI connect'; - this.manipulationDOM['addEdgeLabelSpan'] = document.createElement('span'); - this.manipulationDOM['addEdgeLabelSpan'].className = 'network-manipulationLabel'; - this.manipulationDOM['addEdgeLabelSpan'].innerHTML = locale['addEdge']; - this.manipulationDOM['addEdgeSpan'].appendChild(this.manipulationDOM['addEdgeLabelSpan']); - this.manipulationDiv.appendChild(this.manipulationDOM['addNodeSpan']); - this.manipulationDiv.appendChild(this.manipulationDOM['seperatorLineDiv1']); - this.manipulationDiv.appendChild(this.manipulationDOM['addEdgeSpan']); + /** + * We close the sector that is currently open and revert back to the one before. + * If the active sector is the "default" sector, nothing happens. + * + * @private + */ + exports._collapseSector = function() { + // the currently active sector + var sector = this._sector(); - if (this._getSelectedNodeCount() == 1 && this.triggerFunctions.edit) { - this.manipulationDOM['seperatorLineDiv2'] = document.createElement('div'); - this.manipulationDOM['seperatorLineDiv2'].className = 'network-seperatorLine'; + // we cannot collapse the default sector + if (sector != "default") { + if ((this.nodeIndices.length == 1) || + (this.sectors["active"][sector]["drawingNode"].width*this.scale < this.constants.clustering.screenSizeThreshold * this.frame.canvas.clientWidth) || + (this.sectors["active"][sector]["drawingNode"].height*this.scale < this.constants.clustering.screenSizeThreshold * this.frame.canvas.clientHeight)) { + var previousSector = this._previousSector(); - this.manipulationDOM['editNodeSpan'] = document.createElement('span'); - this.manipulationDOM['editNodeSpan'].className = 'network-manipulationUI edit'; - this.manipulationDOM['editNodeLabelSpan'] = document.createElement('span'); - this.manipulationDOM['editNodeLabelSpan'].className = 'network-manipulationLabel'; - this.manipulationDOM['editNodeLabelSpan'].innerHTML = locale['editNode']; - this.manipulationDOM['editNodeSpan'].appendChild(this.manipulationDOM['editNodeLabelSpan']); + // we collapse the sector back to a single cluster + this._collapseThisToSingleCluster(); - this.manipulationDiv.appendChild(this.manipulationDOM['seperatorLineDiv2']); - this.manipulationDiv.appendChild(this.manipulationDOM['editNodeSpan']); - } - else if (this._getSelectedEdgeCount() == 1 && this._getSelectedNodeCount() == 0) { - this.manipulationDOM['seperatorLineDiv3'] = document.createElement('div'); - this.manipulationDOM['seperatorLineDiv3'].className = 'network-seperatorLine'; + // we move the remaining nodes, edges and nodeIndices to the previous sector. + // This previous sector is the one we will reactivate + this._mergeThisWithFrozen(previousSector); - this.manipulationDOM['editEdgeSpan'] = document.createElement('span'); - this.manipulationDOM['editEdgeSpan'].className = 'network-manipulationUI edit'; - this.manipulationDOM['editEdgeLabelSpan'] = document.createElement('span'); - this.manipulationDOM['editEdgeLabelSpan'].className = 'network-manipulationLabel'; - this.manipulationDOM['editEdgeLabelSpan'].innerHTML = locale['editEdge']; - this.manipulationDOM['editEdgeSpan'].appendChild(this.manipulationDOM['editEdgeLabelSpan']); + // the previously active (frozen) sector now has all the data from the currently active sector. + // we can now delete the active sector. + this._deleteActiveSector(sector); - this.manipulationDiv.appendChild(this.manipulationDOM['seperatorLineDiv3']); - this.manipulationDiv.appendChild(this.manipulationDOM['editEdgeSpan']); - } - if (this._selectionIsEmpty() == false) { - this.manipulationDOM['seperatorLineDiv4'] = document.createElement('div'); - this.manipulationDOM['seperatorLineDiv4'].className = 'network-seperatorLine'; + // we activate the previously active (and currently frozen) sector. + this._activateSector(previousSector); - this.manipulationDOM['deleteSpan'] = document.createElement('span'); - this.manipulationDOM['deleteSpan'].className = 'network-manipulationUI delete'; - this.manipulationDOM['deleteLabelSpan'] = document.createElement('span'); - this.manipulationDOM['deleteLabelSpan'].className = 'network-manipulationLabel'; - this.manipulationDOM['deleteLabelSpan'].innerHTML = locale['del']; - this.manipulationDOM['deleteSpan'].appendChild(this.manipulationDOM['deleteLabelSpan']); + // we load the references from the newly active sector into the global references + this._switchToSector(previousSector); - this.manipulationDiv.appendChild(this.manipulationDOM['seperatorLineDiv4']); - this.manipulationDiv.appendChild(this.manipulationDOM['deleteSpan']); - } + // we forget the previously active sector because we reverted to the one before + this._forgetLastSector(); + // finally, we update the node index list. + this._updateNodeIndexList(); - // bind the icons - this.manipulationDOM['addNodeSpan'].onclick = this._createAddNodeToolbar.bind(this); - this.manipulationDOM['addEdgeSpan'].onclick = this._createAddEdgeToolbar.bind(this); - if (this._getSelectedNodeCount() == 1 && this.triggerFunctions.edit) { - this.manipulationDOM['editNodeSpan'].onclick = this._editNode.bind(this); - } - else if (this._getSelectedEdgeCount() == 1 && this._getSelectedNodeCount() == 0) { - this.manipulationDOM['editEdgeSpan'].onclick = this._createEditEdgeToolbar.bind(this); - } - if (this._selectionIsEmpty() == false) { - this.manipulationDOM['deleteSpan'].onclick = this._deleteSelected.bind(this); + // we refresh the list with calulation nodes and calculation node indices. + this._updateCalculationNodes(); } - this.closeDiv.onclick = this._toggleEditMode.bind(this); + } + }; - this.boundFunction = this._createManipulatorBar.bind(this); - this.on('select', this.boundFunction); + + /** + * This runs a function in all active sectors. This is used in _redraw() and the _initializeForceCalculation(). + * + * @param {String} runFunction | This is the NAME of a function we want to call in all active sectors + * | we dont pass the function itself because then the "this" is the window object + * | instead of the Network object + * @param {*} [argument] | Optional: arguments to pass to the runFunction + * @private + */ + exports._doInAllActiveSectors = function(runFunction,argument) { + var returnValues = []; + if (argument === undefined) { + for (var sector in this.sectors["active"]) { + if (this.sectors["active"].hasOwnProperty(sector)) { + // switch the global references to those of this sector + this._switchToActiveSector(sector); + returnValues.push( this[runFunction]() ); + } + } } else { - while (this.editModeDiv.hasChildNodes()) { - this.editModeDiv.removeChild(this.editModeDiv.firstChild); + for (var sector in this.sectors["active"]) { + if (this.sectors["active"].hasOwnProperty(sector)) { + // switch the global references to those of this sector + this._switchToActiveSector(sector); + var args = Array.prototype.splice.call(arguments, 1); + if (args.length > 1) { + returnValues.push( this[runFunction](args[0],args[1]) ); + } + else { + returnValues.push( this[runFunction](argument) ); + } + } } - - this.manipulationDOM['editModeSpan'] = document.createElement('span'); - this.manipulationDOM['editModeSpan'].className = 'network-manipulationUI edit editmode'; - this.manipulationDOM['editModeLabelSpan'] = document.createElement('span'); - this.manipulationDOM['editModeLabelSpan'].className = 'network-manipulationLabel'; - this.manipulationDOM['editModeLabelSpan'].innerHTML = locale['edit']; - this.manipulationDOM['editModeSpan'].appendChild(this.manipulationDOM['editModeLabelSpan']); - - this.editModeDiv.appendChild(this.manipulationDOM['editModeSpan']); - - this.manipulationDOM['editModeSpan'].onclick = this._toggleEditMode.bind(this); } + // we revert the global references back to our active sector + this._loadLatestSector(); + return returnValues; }; - /** - * Create the toolbar for adding Nodes + * This runs a function in all active sectors. This is used in _redraw() and the _initializeForceCalculation(). * + * @param {String} runFunction | This is the NAME of a function we want to call in all active sectors + * | we dont pass the function itself because then the "this" is the window object + * | instead of the Network object + * @param {*} [argument] | Optional: arguments to pass to the runFunction * @private */ - exports._createAddNodeToolbar = function() { - // clear the toolbar - this._clearManipulatorBar(); - if (this.boundFunction) { - this.off('select', this.boundFunction); + exports._doInSupportSector = function(runFunction,argument) { + var returnValues = false; + if (argument === undefined) { + this._switchToSupportSector(); + returnValues = this[runFunction](); } + else { + this._switchToSupportSector(); + var args = Array.prototype.splice.call(arguments, 1); + if (args.length > 1) { + returnValues = this[runFunction](args[0],args[1]); + } + else { + returnValues = this[runFunction](argument); + } + } + // we revert the global references back to our active sector + this._loadLatestSector(); + return returnValues; + }; - var locale = this.constants.locales[this.constants.locale]; - - this.manipulationDOM = {}; - this.manipulationDOM['backSpan'] = document.createElement('span'); - this.manipulationDOM['backSpan'].className = 'network-manipulationUI back'; - this.manipulationDOM['backLabelSpan'] = document.createElement('span'); - this.manipulationDOM['backLabelSpan'].className = 'network-manipulationLabel'; - this.manipulationDOM['backLabelSpan'].innerHTML = locale['back']; - this.manipulationDOM['backSpan'].appendChild(this.manipulationDOM['backLabelSpan']); - this.manipulationDOM['seperatorLineDiv1'] = document.createElement('div'); - this.manipulationDOM['seperatorLineDiv1'].className = 'network-seperatorLine'; + /** + * This runs a function in all frozen sectors. This is used in the _redraw(). + * + * @param {String} runFunction | This is the NAME of a function we want to call in all active sectors + * | we don't pass the function itself because then the "this" is the window object + * | instead of the Network object + * @param {*} [argument] | Optional: arguments to pass to the runFunction + * @private + */ + exports._doInAllFrozenSectors = function(runFunction,argument) { + if (argument === undefined) { + for (var sector in this.sectors["frozen"]) { + if (this.sectors["frozen"].hasOwnProperty(sector)) { + // switch the global references to those of this sector + this._switchToFrozenSector(sector); + this[runFunction](); + } + } + } + else { + for (var sector in this.sectors["frozen"]) { + if (this.sectors["frozen"].hasOwnProperty(sector)) { + // switch the global references to those of this sector + this._switchToFrozenSector(sector); + var args = Array.prototype.splice.call(arguments, 1); + if (args.length > 1) { + this[runFunction](args[0],args[1]); + } + else { + this[runFunction](argument); + } + } + } + } + this._loadLatestSector(); + }; - this.manipulationDOM['descriptionSpan'] = document.createElement('span'); - this.manipulationDOM['descriptionSpan'].className = 'network-manipulationUI none'; - this.manipulationDOM['descriptionLabelSpan'] = document.createElement('span'); - this.manipulationDOM['descriptionLabelSpan'].className = 'network-manipulationLabel'; - this.manipulationDOM['descriptionLabelSpan'].innerHTML = locale['addDescription']; - this.manipulationDOM['descriptionSpan'].appendChild(this.manipulationDOM['descriptionLabelSpan']); - this.manipulationDiv.appendChild(this.manipulationDOM['backSpan']); - this.manipulationDiv.appendChild(this.manipulationDOM['seperatorLineDiv1']); - this.manipulationDiv.appendChild(this.manipulationDOM['descriptionSpan']); + /** + * This runs a function in all sectors. This is used in the _redraw(). + * + * @param {String} runFunction | This is the NAME of a function we want to call in all active sectors + * | we don't pass the function itself because then the "this" is the window object + * | instead of the Network object + * @param {*} [argument] | Optional: arguments to pass to the runFunction + * @private + */ + exports._doInAllSectors = function(runFunction,argument) { + var args = Array.prototype.splice.call(arguments, 1); + if (argument === undefined) { + this._doInAllActiveSectors(runFunction); + this._doInAllFrozenSectors(runFunction); + } + else { + if (args.length > 1) { + this._doInAllActiveSectors(runFunction,args[0],args[1]); + this._doInAllFrozenSectors(runFunction,args[0],args[1]); + } + else { + this._doInAllActiveSectors(runFunction,argument); + this._doInAllFrozenSectors(runFunction,argument); + } + } + }; - // bind the icon - this.manipulationDOM['backSpan'].onclick = this._createManipulatorBar.bind(this); - // we use the boundFunction so we can reference it when we unbind it from the "select" event. - this.boundFunction = this._addNode.bind(this); - this.on('select', this.boundFunction); + /** + * This clears the nodeIndices list. We cannot use this.nodeIndices = [] because we would break the link with the + * active sector. Thus we clear the nodeIndices in the active sector, then reconnect the this.nodeIndices to it. + * + * @private + */ + exports._clearNodeIndexList = function() { + var sector = this._sector(); + this.sectors["active"][sector]["nodeIndices"] = []; + this.nodeIndices = this.sectors["active"][sector]["nodeIndices"]; }; /** - * create the toolbar to connect nodes + * Draw the encompassing sector node * + * @param ctx + * @param sectorType * @private */ - exports._createAddEdgeToolbar = function() { - // clear the toolbar - this._clearManipulatorBar(); - this._unselectAll(true); - this.freezeSimulation = true; + exports._drawSectorNodes = function(ctx,sectorType) { + var minY = 1e9, maxY = -1e9, minX = 1e9, maxX = -1e9, node; + for (var sector in this.sectors[sectorType]) { + if (this.sectors[sectorType].hasOwnProperty(sector)) { + if (this.sectors[sectorType][sector]["drawingNode"] !== undefined) { - var locale = this.constants.locales[this.constants.locale]; + this._switchToSector(sector,sectorType); - if (this.boundFunction) { - this.off('select', this.boundFunction); + minY = 1e9; maxY = -1e9; minX = 1e9; maxX = -1e9; + for (var nodeId in this.nodes) { + if (this.nodes.hasOwnProperty(nodeId)) { + node = this.nodes[nodeId]; + node.resize(ctx); + if (minX > node.x - 0.5 * node.width) {minX = node.x - 0.5 * node.width;} + if (maxX < node.x + 0.5 * node.width) {maxX = node.x + 0.5 * node.width;} + if (minY > node.y - 0.5 * node.height) {minY = node.y - 0.5 * node.height;} + if (maxY < node.y + 0.5 * node.height) {maxY = node.y + 0.5 * node.height;} + } + } + node = this.sectors[sectorType][sector]["drawingNode"]; + node.x = 0.5 * (maxX + minX); + node.y = 0.5 * (maxY + minY); + node.width = 2 * (node.x - minX); + node.height = 2 * (node.y - minY); + node.options.radius = Math.sqrt(Math.pow(0.5*node.width,2) + Math.pow(0.5*node.height,2)); + node.setScale(this.scale); + node._drawCircle(ctx); + } + } } + }; - this._unselectAll(); - this.forceAppendSelection = false; - this.blockConnectingEdgeSelection = true; - - this.manipulationDOM = {}; - this.manipulationDOM['backSpan'] = document.createElement('span'); - this.manipulationDOM['backSpan'].className = 'network-manipulationUI back'; - this.manipulationDOM['backLabelSpan'] = document.createElement('span'); - this.manipulationDOM['backLabelSpan'].className = 'network-manipulationLabel'; - this.manipulationDOM['backLabelSpan'].innerHTML = locale['back']; - this.manipulationDOM['backSpan'].appendChild(this.manipulationDOM['backLabelSpan']); - - this.manipulationDOM['seperatorLineDiv1'] = document.createElement('div'); - this.manipulationDOM['seperatorLineDiv1'].className = 'network-seperatorLine'; - - this.manipulationDOM['descriptionSpan'] = document.createElement('span'); - this.manipulationDOM['descriptionSpan'].className = 'network-manipulationUI none'; - this.manipulationDOM['descriptionLabelSpan'] = document.createElement('span'); - this.manipulationDOM['descriptionLabelSpan'].className = 'network-manipulationLabel'; - this.manipulationDOM['descriptionLabelSpan'].innerHTML = locale['edgeDescription']; - this.manipulationDOM['descriptionSpan'].appendChild(this.manipulationDOM['descriptionLabelSpan']); - - this.manipulationDiv.appendChild(this.manipulationDOM['backSpan']); - this.manipulationDiv.appendChild(this.manipulationDOM['seperatorLineDiv1']); - this.manipulationDiv.appendChild(this.manipulationDOM['descriptionSpan']); - - // bind the icon - this.manipulationDOM['backSpan'].onclick = this._createManipulatorBar.bind(this); + exports._drawAllSectorNodes = function(ctx) { + this._drawSectorNodes(ctx,"frozen"); + this._drawSectorNodes(ctx,"active"); + this._loadLatestSector(); + }; - // we use the boundFunction so we can reference it when we unbind it from the "select" event. - this.boundFunction = this._handleConnect.bind(this); - this.on('select', this.boundFunction); - // temporarily overload functions - this.cachedFunctions["_handleTouch"] = this._handleTouch; - this.cachedFunctions["_manipulationReleaseOverload"] = this._manipulationReleaseOverload; - this.cachedFunctions["_handleDragStart"] = this._handleDragStart; - this.cachedFunctions["_handleDragEnd"] = this._handleDragEnd; - this._handleTouch = this._handleConnect; - this._manipulationReleaseOverload = function () {}; - this._handleDragStart = function () {}; - this._handleDragEnd = this._finishConnect; +/***/ }, +/* 66 */ +/***/ function(module, exports, __webpack_require__) { - // redraw to show the unselect - this._redraw(); - }; + var Node = __webpack_require__(56); /** - * create the toolbar to edit edges + * This function can be called from the _doInAllSectors function * + * @param object + * @param overlappingNodes * @private */ - exports._createEditEdgeToolbar = function() { - // clear the toolbar - this._clearManipulatorBar(); - this.controlNodesActive = true; - - if (this.boundFunction) { - this.off('select', this.boundFunction); + exports._getNodesOverlappingWith = function(object, overlappingNodes) { + var nodes = this.nodes; + for (var nodeId in nodes) { + if (nodes.hasOwnProperty(nodeId)) { + if (nodes[nodeId].isOverlappingWith(object)) { + overlappingNodes.push(nodeId); + } + } } + }; - this.edgeBeingEdited = this._getSelectedEdge(); - this.edgeBeingEdited._enableControlNodes(); - - var locale = this.constants.locales[this.constants.locale]; - - this.manipulationDOM = {}; - this.manipulationDOM['backSpan'] = document.createElement('span'); - this.manipulationDOM['backSpan'].className = 'network-manipulationUI back'; - this.manipulationDOM['backLabelSpan'] = document.createElement('span'); - this.manipulationDOM['backLabelSpan'].className = 'network-manipulationLabel'; - this.manipulationDOM['backLabelSpan'].innerHTML = locale['back']; - this.manipulationDOM['backSpan'].appendChild(this.manipulationDOM['backLabelSpan']); - - this.manipulationDOM['seperatorLineDiv1'] = document.createElement('div'); - this.manipulationDOM['seperatorLineDiv1'].className = 'network-seperatorLine'; - - this.manipulationDOM['descriptionSpan'] = document.createElement('span'); - this.manipulationDOM['descriptionSpan'].className = 'network-manipulationUI none'; - this.manipulationDOM['descriptionLabelSpan'] = document.createElement('span'); - this.manipulationDOM['descriptionLabelSpan'].className = 'network-manipulationLabel'; - this.manipulationDOM['descriptionLabelSpan'].innerHTML = locale['editEdgeDescription']; - this.manipulationDOM['descriptionSpan'].appendChild(this.manipulationDOM['descriptionLabelSpan']); - - this.manipulationDiv.appendChild(this.manipulationDOM['backSpan']); - this.manipulationDiv.appendChild(this.manipulationDOM['seperatorLineDiv1']); - this.manipulationDiv.appendChild(this.manipulationDOM['descriptionSpan']); - - // bind the icon - this.manipulationDOM['backSpan'].onclick = this._createManipulatorBar.bind(this); - - // temporarily overload functions - this.cachedFunctions["_handleTouch"] = this._handleTouch; - this.cachedFunctions["_manipulationReleaseOverload"] = this._manipulationReleaseOverload; - this.cachedFunctions["_handleTap"] = this._handleTap; - this.cachedFunctions["_handleDragStart"] = this._handleDragStart; - this.cachedFunctions["_handleOnDrag"] = this._handleOnDrag; - this._handleTouch = this._selectControlNode; - this._handleTap = function () {}; - this._handleOnDrag = this._controlNodeDrag; - this._handleDragStart = function () {} - this._manipulationReleaseOverload = this._releaseControlNode; - - // redraw to show the unselect - this._redraw(); + /** + * retrieve all nodes overlapping with given object + * @param {Object} object An object with parameters left, top, right, bottom + * @return {Number[]} An array with id's of the overlapping nodes + * @private + */ + exports._getAllNodesOverlappingWith = function (object) { + var overlappingNodes = []; + this._doInAllActiveSectors("_getNodesOverlappingWith",object,overlappingNodes); + return overlappingNodes; }; /** - * the function bound to the selection event. It checks if you want to connect a cluster and changes the description - * to walk the user through the process. + * Return a position object in canvasspace from a single point in screenspace * + * @param pointer + * @returns {{left: number, top: number, right: number, bottom: number}} * @private */ - exports._selectControlNode = function(pointer) { - this.edgeBeingEdited.controlNodes.from.unselect(); - this.edgeBeingEdited.controlNodes.to.unselect(); - this.selectedControlNode = this.edgeBeingEdited._getSelectedControlNode(this._XconvertDOMtoCanvas(pointer.x),this._YconvertDOMtoCanvas(pointer.y)); - if (this.selectedControlNode !== null) { - this.selectedControlNode.select(); - this.freezeSimulation = true; - } - this._redraw(); + exports._pointerToPositionObject = function(pointer) { + var x = this._XconvertDOMtoCanvas(pointer.x); + var y = this._YconvertDOMtoCanvas(pointer.y); + + return { + left: x, + top: y, + right: x, + bottom: y + }; }; /** - * the function bound to the selection event. It checks if you want to connect a cluster and changes the description - * to walk the user through the process. + * Get the top node at the a specific point (like a click) * + * @param {{x: Number, y: Number}} pointer + * @return {Node | null} node * @private */ - exports._controlNodeDrag = function(event) { - var pointer = this._getPointer(event.gesture.center); - if (this.selectedControlNode !== null && this.selectedControlNode !== undefined) { - this.selectedControlNode.x = this._XconvertDOMtoCanvas(pointer.x); - this.selectedControlNode.y = this._YconvertDOMtoCanvas(pointer.y); - } - this._redraw(); - }; + exports._getNodeAt = function (pointer) { + // we first check if this is an navigation controls element + var positionObject = this._pointerToPositionObject(pointer); + var overlappingNodes = this._getAllNodesOverlappingWith(positionObject); - exports._releaseControlNode = function(pointer) { - var newNode = this._getNodeAt(pointer); - if (newNode !== null) { - if (this.edgeBeingEdited.controlNodes.from.selected == true) { - this._editEdge(newNode.id, this.edgeBeingEdited.to.id); - this.edgeBeingEdited.controlNodes.from.unselect(); - } - if (this.edgeBeingEdited.controlNodes.to.selected == true) { - this._editEdge(this.edgeBeingEdited.from.id, newNode.id); - this.edgeBeingEdited.controlNodes.to.unselect(); - } + // if there are overlapping nodes, select the last one, this is the + // one which is drawn on top of the others + if (overlappingNodes.length > 0) { + return this.nodes[overlappingNodes[overlappingNodes.length - 1]]; } else { - this.edgeBeingEdited._restoreControlNodes(); + return null; } - this.freezeSimulation = false; - this._redraw(); }; + /** - * the function bound to the selection event. It checks if you want to connect a cluster and changes the description - * to walk the user through the process. - * + * retrieve all edges overlapping with given object, selector is around center + * @param {Object} object An object with parameters left, top, right, bottom + * @return {Number[]} An array with id's of the overlapping nodes * @private */ - exports._handleConnect = function(pointer) { - if (this._getSelectedNodeCount() == 0) { - var node = this._getNodeAt(pointer); - - if (node != null) { - if (node.clusterSize > 1) { - alert(this.constants.locales[this.constants.locale]['createEdgeError']) - } - else { - this._selectObject(node,false); - var supportNodes = this.sectors['support']['nodes']; - - // create a node the temporary line can look at - supportNodes['targetNode'] = new Node({id:'targetNode'},{},{},this.constants); - var targetNode = supportNodes['targetNode']; - targetNode.x = node.x; - targetNode.y = node.y; - - // create a temporary edge - this.edges['connectionEdge'] = new Edge({id:"connectionEdge",from:node.id,to:targetNode.id}, this, this.constants); - var connectionEdge = this.edges['connectionEdge']; - connectionEdge.from = node; - connectionEdge.connected = true; - connectionEdge.options.smoothCurves = {enabled: true, - dynamic: false, - type: "continuous", - roundness: 0.5 - }; - connectionEdge.selected = true; - connectionEdge.to = targetNode; - - this.cachedFunctions["_handleOnDrag"] = this._handleOnDrag; - this._handleOnDrag = function(event) { - var pointer = this._getPointer(event.gesture.center); - var connectionEdge = this.edges['connectionEdge']; - connectionEdge.to.x = this._XconvertDOMtoCanvas(pointer.x); - connectionEdge.to.y = this._YconvertDOMtoCanvas(pointer.y); - }; - - this.moving = true; - this.start(); + exports._getEdgesOverlappingWith = function (object, overlappingEdges) { + var edges = this.edges; + for (var edgeId in edges) { + if (edges.hasOwnProperty(edgeId)) { + if (edges[edgeId].isOverlappingWith(object)) { + overlappingEdges.push(edgeId); } } } }; - exports._finishConnect = function(event) { - if (this._getSelectedNodeCount() == 1) { - var pointer = this._getPointer(event.gesture.center); - // restore the drag function - this._handleOnDrag = this.cachedFunctions["_handleOnDrag"]; - delete this.cachedFunctions["_handleOnDrag"]; - - // remember the edge id - var connectFromId = this.edges['connectionEdge'].fromId; - - // remove the temporary nodes and edge - delete this.edges['connectionEdge']; - delete this.sectors['support']['nodes']['targetNode']; - delete this.sectors['support']['nodes']['targetViaNode']; - var node = this._getNodeAt(pointer); - if (node != null) { - if (node.clusterSize > 1) { - alert(this.constants.locales[this.constants.locale]["createEdgeError"]) - } - else { - this._createEdge(connectFromId,node.id); - this._createManipulatorBar(); - } - } - this._unselectAll(); - } + /** + * retrieve all nodes overlapping with given object + * @param {Object} object An object with parameters left, top, right, bottom + * @return {Number[]} An array with id's of the overlapping nodes + * @private + */ + exports._getAllEdgesOverlappingWith = function (object) { + var overlappingEdges = []; + this._doInAllActiveSectors("_getEdgesOverlappingWith",object,overlappingEdges); + return overlappingEdges; }; - /** - * Adds a node on the specified location + * Place holder. To implement change the _getNodeAt to a _getObjectAt. Have the _getObjectAt call + * _getNodeAt and _getEdgesAt, then priortize the selection to user preferences. + * + * @param pointer + * @returns {null} + * @private */ - exports._addNode = function() { - if (this._selectionIsEmpty() && this.editMode == true) { - var positionObject = this._pointerToPositionObject(this.pointerPosition); - var defaultData = {id:util.randomUUID(),x:positionObject.left,y:positionObject.top,label:"new",allowedToMoveX:true,allowedToMoveY:true}; - if (this.triggerFunctions.add) { - if (this.triggerFunctions.add.length == 2) { - var me = this; - this.triggerFunctions.add(defaultData, function(finalizedData) { - me.nodesData.add(finalizedData); - me._createManipulatorBar(); - me.moving = true; - me.start(); - }); - } - else { - throw new Error('The function for add does not support two arguments (data,callback)'); - this._createManipulatorBar(); - this.moving = true; - this.start(); - } - } - else { - this.nodesData.add(defaultData); - this._createManipulatorBar(); - this.moving = true; - this.start(); - } + exports._getEdgeAt = function(pointer) { + var positionObject = this._pointerToPositionObject(pointer); + var overlappingEdges = this._getAllEdgesOverlappingWith(positionObject); + + if (overlappingEdges.length > 0) { + return this.edges[overlappingEdges[overlappingEdges.length - 1]]; + } + else { + return null; } }; /** - * connect two nodes with a new edge. + * Add object to the selection array. * + * @param obj * @private */ - exports._createEdge = function(sourceNodeId,targetNodeId) { - if (this.editMode == true) { - var defaultData = {from:sourceNodeId, to:targetNodeId}; - if (this.triggerFunctions.connect) { - if (this.triggerFunctions.connect.length == 2) { - var me = this; - this.triggerFunctions.connect(defaultData, function(finalizedData) { - me.edgesData.add(finalizedData); - me.moving = true; - me.start(); - }); - } - else { - throw new Error('The function for connect does not support two arguments (data,callback)'); - this.moving = true; - this.start(); - } - } - else { - this.edgesData.add(defaultData); - this.moving = true; - this.start(); - } + exports._addToSelection = function(obj) { + if (obj instanceof Node) { + this.selectionObj.nodes[obj.id] = obj; + } + else { + this.selectionObj.edges[obj.id] = obj; } }; /** - * connect two nodes with a new edge. + * Add object to the selection array. * + * @param obj * @private */ - exports._editEdge = function(sourceNodeId,targetNodeId) { - if (this.editMode == true) { - var defaultData = {id: this.edgeBeingEdited.id, from:sourceNodeId, to:targetNodeId}; - if (this.triggerFunctions.editEdge) { - if (this.triggerFunctions.editEdge.length == 2) { - var me = this; - this.triggerFunctions.editEdge(defaultData, function(finalizedData) { - me.edgesData.update(finalizedData); - me.moving = true; - me.start(); - }); - } - else { - throw new Error('The function for edit does not support two arguments (data, callback)'); - this.moving = true; - this.start(); - } - } - else { - this.edgesData.update(defaultData); - this.moving = true; - this.start(); - } + exports._addToHover = function(obj) { + if (obj instanceof Node) { + this.hoverObj.nodes[obj.id] = obj; + } + else { + this.hoverObj.edges[obj.id] = obj; } }; + /** - * Create the toolbar to edit the selected node. The label and the color can be changed. Other colors are derived from the chosen color. + * Remove a single option from selection. * + * @param {Object} obj * @private */ - exports._editNode = function() { - if (this.triggerFunctions.edit && this.editMode == true) { - var node = this._getSelectedNode(); - var data = {id:node.id, - label: node.label, - group: node.options.group, - shape: node.options.shape, - color: { - background:node.options.color.background, - border:node.options.color.border, - highlight: { - background:node.options.color.highlight.background, - border:node.options.color.highlight.border - } - }}; - if (this.triggerFunctions.edit.length == 2) { - var me = this; - this.triggerFunctions.edit(data, function (finalizedData) { - me.nodesData.update(finalizedData); - me._createManipulatorBar(); - me.moving = true; - me.start(); - }); - } - else { - throw new Error('The function for edit does not support two arguments (data, callback)'); - } + exports._removeFromSelection = function(obj) { + if (obj instanceof Node) { + delete this.selectionObj.nodes[obj.id]; } else { - throw new Error('No edit function has been bound to this button'); + delete this.selectionObj.edges[obj.id]; } }; - - - /** - * delete everything in the selection + * Unselect all. The selectionObj is useful for this. * + * @param {Boolean} [doNotTrigger] | ignore trigger * @private - */ - exports._deleteSelected = function() { - if (!this._selectionIsEmpty() && this.editMode == true) { - if (!this._clusterInSelection()) { - var selectedNodes = this.getSelectedNodes(); - var selectedEdges = this.getSelectedEdges(); - if (this.triggerFunctions.del) { - var me = this; - var data = {nodes: selectedNodes, edges: selectedEdges}; - if (this.triggerFunctions.del.length == 2) { - this.triggerFunctions.del(data, function (finalizedData) { - me.edgesData.remove(finalizedData.edges); - me.nodesData.remove(finalizedData.nodes); - me._unselectAll(); - me.moving = true; - me.start(); - }); - } - else { - throw new Error('The function for delete does not support two arguments (data, callback)') - } - } - else { - this.edgesData.remove(selectedEdges); - this.nodesData.remove(selectedNodes); - this._unselectAll(); - this.moving = true; - this.start(); - } - } - else { - alert(this.constants.locales[this.constants.locale]["deleteClusterError"]); + */ + exports._unselectAll = function(doNotTrigger) { + if (doNotTrigger === undefined) { + doNotTrigger = false; + } + for(var nodeId in this.selectionObj.nodes) { + if(this.selectionObj.nodes.hasOwnProperty(nodeId)) { + this.selectionObj.nodes[nodeId].unselect(); } } - }; - - -/***/ }, -/* 64 */ -/***/ function(module, exports, __webpack_require__) { - - var util = __webpack_require__(1); - var Hammer = __webpack_require__(45); - - exports._cleanNavigation = function() { - // clean hammer bindings - if (this.navigationHammers.existing.length != 0) { - for (var i = 0; i < this.navigationHammers.existing.length; i++) { - this.navigationHammers.existing[i].dispose(); + for(var edgeId in this.selectionObj.edges) { + if(this.selectionObj.edges.hasOwnProperty(edgeId)) { + this.selectionObj.edges[edgeId].unselect(); } - this.navigationHammers.existing = []; } - this._navigationReleaseOverload = function () {}; + this.selectionObj = {nodes:{},edges:{}}; - // clean up previous navigation items - if (this.navigationDivs && this.navigationDivs['wrapper'] && this.navigationDivs['wrapper'].parentNode) { - this.navigationDivs['wrapper'].parentNode.removeChild(this.navigationDivs['wrapper']); + if (doNotTrigger == false) { + this.emit('select', this.getSelection()); } }; /** - * Creation of the navigation controls nodes. They are drawn over the rest of the nodes and are not affected by scale and translation - * they have a triggerFunction which is called on click. If the position of the navigation controls is dependent - * on this.frame.canvas.clientWidth or this.frame.canvas.clientHeight, we flag horizontalAlignLeft and verticalAlignTop false. - * This means that the location will be corrected by the _relocateNavigation function on a size change of the canvas. + * Unselect all clusters. The selectionObj is useful for this. * + * @param {Boolean} [doNotTrigger] | ignore trigger * @private */ - exports._loadNavigationElements = function() { - this._cleanNavigation(); - - this.navigationDivs = {}; - var navigationDivs = ['up','down','left','right','zoomIn','zoomOut','zoomExtends']; - var navigationDivActions = ['_moveUp','_moveDown','_moveLeft','_moveRight','_zoomIn','_zoomOut','_zoomExtent']; - - this.navigationDivs['wrapper'] = document.createElement('div'); - this.frame.appendChild(this.navigationDivs['wrapper']); - - for (var i = 0; i < navigationDivs.length; i++) { - this.navigationDivs[navigationDivs[i]] = document.createElement('div'); - this.navigationDivs[navigationDivs[i]].className = 'network-navigation ' + navigationDivs[i]; - this.navigationDivs['wrapper'].appendChild(this.navigationDivs[navigationDivs[i]]); - - var hammer = Hammer(this.navigationDivs[navigationDivs[i]], {prevent_default: true}); - hammer.on('touch', this[navigationDivActions[i]].bind(this)); - this.navigationHammers._new.push(hammer); + exports._unselectClusters = function(doNotTrigger) { + if (doNotTrigger === undefined) { + doNotTrigger = false; } - this._navigationReleaseOverload = this._stopMovement; + for (var nodeId in this.selectionObj.nodes) { + if (this.selectionObj.nodes.hasOwnProperty(nodeId)) { + if (this.selectionObj.nodes[nodeId].clusterSize > 1) { + this.selectionObj.nodes[nodeId].unselect(); + this._removeFromSelection(this.selectionObj.nodes[nodeId]); + } + } + } - this.navigationHammers.existing = this.navigationHammers._new; + if (doNotTrigger == false) { + this.emit('select', this.getSelection()); + } }; /** - * this stops all movement induced by the navigation buttons + * return the number of selected nodes * + * @returns {number} * @private */ - exports._zoomExtent = function(event) { - this.zoomExtent({duration:700}); - event.stopPropagation(); + exports._getSelectedNodeCount = function() { + var count = 0; + for (var nodeId in this.selectionObj.nodes) { + if (this.selectionObj.nodes.hasOwnProperty(nodeId)) { + count += 1; + } + } + return count; }; /** - * this stops all movement induced by the navigation buttons + * return the selected node * + * @returns {number} * @private */ - exports._stopMovement = function() { - this._xStopMoving(); - this._yStopMoving(); - this._stopZoom(); + exports._getSelectedNode = function() { + for (var nodeId in this.selectionObj.nodes) { + if (this.selectionObj.nodes.hasOwnProperty(nodeId)) { + return this.selectionObj.nodes[nodeId]; + } + } + return null; }; - /** - * move the screen up - * By using the increments, instead of adding a fixed number to the translation, we keep fluent and - * instant movement. The onKeypress event triggers immediately, then pauses, then triggers frequently - * To avoid this behaviour, we do the translation in the start loop. + * return the selected edge * + * @returns {number} * @private */ - exports._moveUp = function(event) { - this.yIncrement = this.constants.keyboard.speed.y; - this.start(); // if there is no node movement, the calculation wont be done - event.preventDefault(); + exports._getSelectedEdge = function() { + for (var edgeId in this.selectionObj.edges) { + if (this.selectionObj.edges.hasOwnProperty(edgeId)) { + return this.selectionObj.edges[edgeId]; + } + } + return null; }; /** - * move the screen down + * return the number of selected edges + * + * @returns {number} * @private */ - exports._moveDown = function(event) { - this.yIncrement = -this.constants.keyboard.speed.y; - this.start(); // if there is no node movement, the calculation wont be done - event.preventDefault(); + exports._getSelectedEdgeCount = function() { + var count = 0; + for (var edgeId in this.selectionObj.edges) { + if (this.selectionObj.edges.hasOwnProperty(edgeId)) { + count += 1; + } + } + return count; }; /** - * move the screen left + * return the number of selected objects. + * + * @returns {number} * @private */ - exports._moveLeft = function(event) { - this.xIncrement = this.constants.keyboard.speed.x; - this.start(); // if there is no node movement, the calculation wont be done - event.preventDefault(); + exports._getSelectedObjectCount = function() { + var count = 0; + for(var nodeId in this.selectionObj.nodes) { + if(this.selectionObj.nodes.hasOwnProperty(nodeId)) { + count += 1; + } + } + for(var edgeId in this.selectionObj.edges) { + if(this.selectionObj.edges.hasOwnProperty(edgeId)) { + count += 1; + } + } + return count; }; - /** - * move the screen right + * Check if anything is selected + * + * @returns {boolean} * @private */ - exports._moveRight = function(event) { - this.xIncrement = -this.constants.keyboard.speed.y; - this.start(); // if there is no node movement, the calculation wont be done - event.preventDefault(); + exports._selectionIsEmpty = function() { + for(var nodeId in this.selectionObj.nodes) { + if(this.selectionObj.nodes.hasOwnProperty(nodeId)) { + return false; + } + } + for(var edgeId in this.selectionObj.edges) { + if(this.selectionObj.edges.hasOwnProperty(edgeId)) { + return false; + } + } + return true; }; /** - * Zoom in, using the same method as the movement. + * check if one of the selected nodes is a cluster. + * + * @returns {boolean} * @private */ - exports._zoomIn = function(event) { - this.zoomIncrement = this.constants.keyboard.speed.zoom; - this.start(); // if there is no node movement, the calculation wont be done - event.preventDefault(); + exports._clusterInSelection = function() { + for(var nodeId in this.selectionObj.nodes) { + if(this.selectionObj.nodes.hasOwnProperty(nodeId)) { + if (this.selectionObj.nodes[nodeId].clusterSize > 1) { + return true; + } + } + } + return false; }; - /** - * Zoom out + * select the edges connected to the node that is being selected + * + * @param {Node} node * @private */ - exports._zoomOut = function(event) { - this.zoomIncrement = -this.constants.keyboard.speed.zoom; - this.start(); // if there is no node movement, the calculation wont be done - event.preventDefault(); + exports._selectConnectedEdges = function(node) { + for (var i = 0; i < node.dynamicEdges.length; i++) { + var edge = node.dynamicEdges[i]; + edge.select(); + this._addToSelection(edge); + } }; - /** - * Stop zooming and unhighlight the zoom controls + * select the edges connected to the node that is being selected + * + * @param {Node} node * @private */ - exports._stopZoom = function(event) { - this.zoomIncrement = 0; - event && event.preventDefault(); + exports._hoverConnectedEdges = function(node) { + for (var i = 0; i < node.dynamicEdges.length; i++) { + var edge = node.dynamicEdges[i]; + edge.hover = true; + this._addToHover(edge); + } }; /** - * Stop moving in the Y direction and unHighlight the up and down + * unselect the edges connected to the node that is being selected + * + * @param {Node} node * @private */ - exports._yStopMoving = function(event) { - this.yIncrement = 0; - event && event.preventDefault(); + exports._unselectConnectedEdges = function(node) { + for (var i = 0; i < node.dynamicEdges.length; i++) { + var edge = node.dynamicEdges[i]; + edge.unselect(); + this._removeFromSelection(edge); + } }; + + /** - * Stop moving in the X direction and unHighlight left and right. + * This is called when someone clicks on a node. either select or deselect it. + * If there is an existing selection and we don't want to append to it, clear the existing selection + * + * @param {Node || Edge} object + * @param {Boolean} append + * @param {Boolean} [doNotTrigger] | ignore trigger * @private */ - exports._xStopMoving = function(event) { - this.xIncrement = 0; - event && event.preventDefault(); - }; - + exports._selectObject = function(object, append, doNotTrigger, highlightEdges, overrideSelectable) { + if (doNotTrigger === undefined) { + doNotTrigger = false; + } + if (highlightEdges === undefined) { + highlightEdges = true; + } -/***/ }, -/* 65 */ -/***/ function(module, exports, __webpack_require__) { + if (this._selectionIsEmpty() == false && append == false && this.forceAppendSelection == false) { + this._unselectAll(true); + } - exports._resetLevels = function() { - for (var nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - var node = this.nodes[nodeId]; - if (node.preassignedLevel == false) { - node.level = -1; - node.hierarchyEnumerated = false; - } + // selectable allows the object to be selected. Override can be used if needed to bypass this. + if (object.selected == false && (this.constants.selectable == true || overrideSelectable)) { + object.select(); + this._addToSelection(object); + if (object instanceof Node && this.blockConnectingEdgeSelection == false && highlightEdges == true) { + this._selectConnectedEdges(object); } } + // do not select the object if selectable is false, only add it to selection to allow drag to work + else if (object.selected == false) { + this._addToSelection(object); + doNotTrigger = true; + } + else { + object.unselect(); + this._removeFromSelection(object); + } + + if (doNotTrigger == false) { + this.emit('select', this.getSelection()); + } }; + /** - * This is the main function to layout the nodes in a hierarchical way. - * It checks if the node details are supplied correctly + * This is called when someone clicks on a node. either select or deselect it. + * If there is an existing selection and we don't want to append to it, clear the existing selection * + * @param {Node || Edge} object * @private */ - exports._setupHierarchicalLayout = function() { - if (this.constants.hierarchicalLayout.enabled == true && this.nodeIndices.length > 0) { - if (this.constants.hierarchicalLayout.direction == "RL" || this.constants.hierarchicalLayout.direction == "DU") { - this.constants.hierarchicalLayout.levelSeparation = this.constants.hierarchicalLayout.levelSeparation < 0 ? this.constants.hierarchicalLayout.levelSeparation : this.constants.hierarchicalLayout.levelSeparation * -1; - } - else { - this.constants.hierarchicalLayout.levelSeparation = Math.abs(this.constants.hierarchicalLayout.levelSeparation); - } - - if (this.constants.hierarchicalLayout.direction == "RL" || this.constants.hierarchicalLayout.direction == "LR") { - if (this.constants.smoothCurves.enabled == true) { - this.constants.smoothCurves.type = "vertical"; - } - } - else { - if (this.constants.smoothCurves.enabled == true) { - this.constants.smoothCurves.type = "horizontal"; - } - } - // get the size of the largest hubs and check if the user has defined a level for a node. - var hubsize = 0; - var node, nodeId; - var definedLevel = false; - var undefinedLevel = false; - - for (nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - node = this.nodes[nodeId]; - if (node.level != -1) { - definedLevel = true; - } - else { - undefinedLevel = true; - } - if (hubsize < node.edges.length) { - hubsize = node.edges.length; - } - } - } + exports._blurObject = function(object) { + if (object.hover == true) { + object.hover = false; + this.emit("blurNode",{node:object.id}); + } + }; - // if the user defined some levels but not all, alert and run without hierarchical layout - if (undefinedLevel == true && definedLevel == true) { - throw new Error("To use the hierarchical layout, nodes require either no predefined levels or levels have to be defined for all nodes."); - this.zoomExtent(undefined,true,this.constants.clustering.enabled); - if (!this.constants.clustering.enabled) { - this.start(); - } + /** + * This is called when someone clicks on a node. either select or deselect it. + * If there is an existing selection and we don't want to append to it, clear the existing selection + * + * @param {Node || Edge} object + * @private + */ + exports._hoverObject = function(object) { + if (object.hover == false) { + object.hover = true; + this._addToHover(object); + if (object instanceof Node) { + this.emit("hoverNode",{node:object.id}); } - else { - // setup the system to use hierarchical method. - this._changeConstants(); + } + if (object instanceof Node) { + this._hoverConnectedEdges(object); + } + }; - // define levels if undefined by the users. Based on hubsize - if (undefinedLevel == true) { - if (this.constants.hierarchicalLayout.layout == "hubsize") { - this._determineLevels(hubsize); - } - else { - this._determineLevelsDirected(); - } - } - // check the distribution of the nodes per level. - var distribution = this._getDistribution(); + /** + * handles the selection part of the touch, only for navigation controls elements; + * Touch is triggered before tap, also before hold. Hold triggers after a while. + * This is the most responsive solution + * + * @param {Object} pointer + * @private + */ + exports._handleTouch = function(pointer) { + }; - // place the nodes on the canvas. This also stablilizes the system. - this._placeNodesByHierarchy(distribution); - // start the simulation. - this.start(); + /** + * handles the selection part of the tap; + * + * @param {Object} pointer + * @private + */ + exports._handleTap = function(pointer) { + var node = this._getNodeAt(pointer); + if (node != null) { + this._selectObject(node, false); + } + else { + var edge = this._getEdgeAt(pointer); + if (edge != null) { + this._selectObject(edge, false); + } + else { + this._unselectAll(); } } + var properties = this.getSelection(); + properties['pointer'] = { + DOM: {x: pointer.x, y: pointer.y}, + canvas: {x: this._XconvertDOMtoCanvas(pointer.x), y: this._YconvertDOMtoCanvas(pointer.y)} + } + this.emit("click", properties); + this._redraw(); }; /** - * This function places the nodes on the canvas based on the hierarchial distribution. + * handles the selection part of the double tap and opens a cluster if needed * - * @param {Object} distribution | obtained by the function this._getDistribution() + * @param {Object} pointer * @private */ - exports._placeNodesByHierarchy = function(distribution) { - var nodeId, node; - - // start placing all the level 0 nodes first. Then recursively position their branches. - for (var level in distribution) { - if (distribution.hasOwnProperty(level)) { - - for (nodeId in distribution[level].nodes) { - if (distribution[level].nodes.hasOwnProperty(nodeId)) { - node = distribution[level].nodes[nodeId]; - if (this.constants.hierarchicalLayout.direction == "UD" || this.constants.hierarchicalLayout.direction == "DU") { - if (node.xFixed) { - node.x = distribution[level].minPos; - node.xFixed = false; - - distribution[level].minPos += distribution[level].nodeSpacing; - } - } - else { - if (node.yFixed) { - node.y = distribution[level].minPos; - node.yFixed = false; - - distribution[level].minPos += distribution[level].nodeSpacing; - } - } - this._placeBranchNodes(node.edges,node.id,distribution,node.level); - } - } - } + exports._handleDoubleTap = function(pointer) { + var node = this._getNodeAt(pointer); + if (node != null && node !== undefined) { + // we reset the areaCenter here so the opening of the node will occur + this.areaCenter = {"x" : this._XconvertDOMtoCanvas(pointer.x), + "y" : this._YconvertDOMtoCanvas(pointer.y)}; + this.openCluster(node); } - - // stabilize the system after positioning. This function calls zoomExtent. - this._stabilize(); + var properties = this.getSelection(); + properties['pointer'] = { + DOM: {x: pointer.x, y: pointer.y}, + canvas: {x: this._XconvertDOMtoCanvas(pointer.x), y: this._YconvertDOMtoCanvas(pointer.y)} + } + this.emit("doubleClick", properties); }; /** - * This function get the distribution of levels based on hubsize + * Handle the onHold selection part * - * @returns {Object} + * @param pointer * @private */ - exports._getDistribution = function() { - var distribution = {}; - var nodeId, node, level; - - // we fix Y because the hierarchy is vertical, we fix X so we do not give a node an x position for a second time. - // the fix of X is removed after the x value has been set. - for (nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - node = this.nodes[nodeId]; - node.xFixed = true; - node.yFixed = true; - if (this.constants.hierarchicalLayout.direction == "UD" || this.constants.hierarchicalLayout.direction == "DU") { - node.y = this.constants.hierarchicalLayout.levelSeparation*node.level; - } - else { - node.x = this.constants.hierarchicalLayout.levelSeparation*node.level; - } - if (distribution[node.level] === undefined) { - distribution[node.level] = {amount: 0, nodes: {}, minPos:0, nodeSpacing:0}; - } - distribution[node.level].amount += 1; - distribution[node.level].nodes[nodeId] = node; - } + exports._handleOnHold = function(pointer) { + var node = this._getNodeAt(pointer); + if (node != null) { + this._selectObject(node,true); } - - // determine the largest amount of nodes of all levels - var maxCount = 0; - for (level in distribution) { - if (distribution.hasOwnProperty(level)) { - if (maxCount < distribution[level].amount) { - maxCount = distribution[level].amount; - } + else { + var edge = this._getEdgeAt(pointer); + if (edge != null) { + this._selectObject(edge,true); } } + this._redraw(); + }; - // set the initial position and spacing of each nodes accordingly - for (level in distribution) { - if (distribution.hasOwnProperty(level)) { - distribution[level].nodeSpacing = (maxCount + 1) * this.constants.hierarchicalLayout.nodeSpacing; - distribution[level].nodeSpacing /= (distribution[level].amount + 1); - distribution[level].minPos = distribution[level].nodeSpacing - (0.5 * (distribution[level].amount + 1) * distribution[level].nodeSpacing); - } - } - return distribution; + /** + * handle the onRelease event. These functions are here for the navigation controls module + * and data manipulation module. + * + * @private + */ + exports._handleOnRelease = function(pointer) { + this._manipulationReleaseOverload(pointer); + this._navigationReleaseOverload(pointer); }; + exports._manipulationReleaseOverload = function (pointer) {}; + exports._navigationReleaseOverload = function (pointer) {}; /** - * this function allocates nodes in levels based on the recursive branching from the largest hubs. * - * @param hubsize - * @private + * retrieve the currently selected objects + * @return {{nodes: Array., edges: Array.}} selection */ - exports._determineLevels = function(hubsize) { - var nodeId, node; + exports.getSelection = function() { + var nodeIds = this.getSelectedNodes(); + var edgeIds = this.getSelectedEdges(); + return {nodes:nodeIds, edges:edgeIds}; + }; - // determine hubs - for (nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - node = this.nodes[nodeId]; - if (node.edges.length == hubsize) { - node.level = 0; + /** + * + * retrieve the currently selected nodes + * @return {String[]} selection An array with the ids of the + * selected nodes. + */ + exports.getSelectedNodes = function() { + var idArray = []; + if (this.constants.selectable == true) { + for (var nodeId in this.selectionObj.nodes) { + if (this.selectionObj.nodes.hasOwnProperty(nodeId)) { + idArray.push(nodeId); } } } + return idArray + }; - // branch from hubs - for (nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - node = this.nodes[nodeId]; - if (node.level == 0) { - this._setLevel(1,node.edges,node.id); + /** + * + * retrieve the currently selected edges + * @return {Array} selection An array with the ids of the + * selected nodes. + */ + exports.getSelectedEdges = function() { + var idArray = []; + if (this.constants.selectable == true) { + for (var edgeId in this.selectionObj.edges) { + if (this.selectionObj.edges.hasOwnProperty(edgeId)) { + idArray.push(edgeId); } } } + return idArray; }; + /** - * this function allocates nodes in levels based on the recursive branching from the largest hubs. - * - * @param hubsize - * @private + * select zero or more nodes DEPRICATED + * @param {Number[] | String[]} selection An array with the ids of the + * selected nodes. */ - exports._determineLevelsDirected = function() { - var nodeId, node; + exports.setSelection = function() { + console.log("setSelection is deprecated. Please use selectNodes instead.") + }; - // set first node to source - for (nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - this.nodes[nodeId].level = 10000; - break; - } - } - // branch from hubs - for (nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - node = this.nodes[nodeId]; - if (node.level == 10000) { - this._setLevelDirected(10000,node.edges,node.id); - } - } - } + /** + * select zero or more nodes with the option to highlight edges + * @param {Number[] | String[]} selection An array with the ids of the + * selected nodes. + * @param {boolean} [highlightEdges] + */ + exports.selectNodes = function(selection, highlightEdges) { + var i, iMax, id; + if (!selection || (selection.length == undefined)) + throw 'Selection must be an array with ids'; - // branch from hubs - var minLevel = 10000; - for (nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - node = this.nodes[nodeId]; - minLevel = node.level < minLevel ? node.level : minLevel; - } - } + // first unselect any selected node + this._unselectAll(true); - // branch from hubs - for (nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - node = this.nodes[nodeId]; - node.level -= minLevel; + for (i = 0, iMax = selection.length; i < iMax; i++) { + id = selection[i]; + + var node = this.nodes[id]; + if (!node) { + throw new RangeError('Node with id "' + id + '" not found'); } + this._selectObject(node,true,true,highlightEdges,true); } + this.redraw(); }; /** - * Since hierarchical layout does not support: - * - smooth curves (based on the physics), - * - clustering (based on dynamic node counts) - * - * We disable both features so there will be no problems. - * - * @private + * select zero or more edges + * @param {Number[] | String[]} selection An array with the ids of the + * selected nodes. */ - exports._changeConstants = function() { - this.constants.clustering.enabled = false; - this.constants.physics.barnesHut.enabled = false; - this.constants.physics.hierarchicalRepulsion.enabled = true; - this._loadSelectedForceSolver(); - if (this.constants.smoothCurves.enabled == true) { - this.constants.smoothCurves.dynamic = false; - } - this._configureSmoothCurves(); - }; + exports.selectEdges = function(selection) { + var i, iMax, id; + if (!selection || (selection.length == undefined)) + throw 'Selection must be an array with ids'; - /** - * This is a recursively called function to enumerate the branches from the largest hubs and place the nodes - * on a X position that ensures there will be no overlap. - * - * @param edges - * @param parentId - * @param distribution - * @param parentLevel - * @private - */ - exports._placeBranchNodes = function(edges, parentId, distribution, parentLevel) { - for (var i = 0; i < edges.length; i++) { - var childNode = null; - if (edges[i].toId == parentId) { - childNode = edges[i].from; - } - else { - childNode = edges[i].to; - } + // first unselect any selected node + this._unselectAll(true); - // if a node is conneceted to another node on the same level (or higher (means lower level))!, this is not handled here. - var nodeMoved = false; - if (this.constants.hierarchicalLayout.direction == "UD" || this.constants.hierarchicalLayout.direction == "DU") { - if (childNode.xFixed && childNode.level > parentLevel) { - childNode.xFixed = false; - childNode.x = distribution[childNode.level].minPos; - nodeMoved = true; - } - } - else { - if (childNode.yFixed && childNode.level > parentLevel) { - childNode.yFixed = false; - childNode.y = distribution[childNode.level].minPos; - nodeMoved = true; - } - } + for (i = 0, iMax = selection.length; i < iMax; i++) { + id = selection[i]; - if (nodeMoved == true) { - distribution[childNode.level].minPos += distribution[childNode.level].nodeSpacing; - if (childNode.edges.length > 1) { - this._placeBranchNodes(childNode.edges,childNode.id,distribution,childNode.level); - } + var edge = this.edges[id]; + if (!edge) { + throw new RangeError('Edge with id "' + id + '" not found'); } + this._selectObject(edge,true,true,false,true); } + this.redraw(); }; - /** - * this function is called recursively to enumerate the barnches of the largest hubs and give each node a level. - * - * @param level - * @param edges - * @param parentId + * Validate the selection: remove ids of nodes which no longer exist * @private */ - exports._setLevel = function(level, edges, parentId) { - for (var i = 0; i < edges.length; i++) { - var childNode = null; - if (edges[i].toId == parentId) { - childNode = edges[i].from; - } - else { - childNode = edges[i].to; + exports._updateSelection = function () { + for(var nodeId in this.selectionObj.nodes) { + if(this.selectionObj.nodes.hasOwnProperty(nodeId)) { + if (!this.nodes.hasOwnProperty(nodeId)) { + delete this.selectionObj.nodes[nodeId]; + } } - if (childNode.level == -1 || childNode.level > level) { - childNode.level = level; - if (childNode.edges.length > 1) { - this._setLevel(level+1, childNode.edges, childNode.id); + } + for(var edgeId in this.selectionObj.edges) { + if(this.selectionObj.edges.hasOwnProperty(edgeId)) { + if (!this.edges.hasOwnProperty(edgeId)) { + delete this.selectionObj.edges[edgeId]; } } } }; +/***/ }, +/* 67 */ +/***/ function(module, exports, __webpack_require__) { + + var util = __webpack_require__(1); + var Node = __webpack_require__(56); + var Edge = __webpack_require__(57); + /** - * this function is called recursively to enumerate the barnches of the largest hubs and give each node a level. + * clears the toolbar div element of children * - * @param level - * @param edges - * @param parentId * @private */ - exports._setLevelDirected = function(level, edges, parentId) { - this.nodes[parentId].hierarchyEnumerated = true; - for (var i = 0; i < edges.length; i++) { - var childNode = null; - var direction = 1; - if (edges[i].toId == parentId) { - childNode = edges[i].from; - direction = -1; - } - else { - childNode = edges[i].to; - } - if (childNode.level == -1) { - childNode.level = level + direction; - } + exports._clearManipulatorBar = function() { + while (this.manipulationDiv.hasChildNodes()) { + this.manipulationDiv.removeChild(this.manipulationDiv.firstChild); } + this.manipulationDOM = {}; - for (var i = 0; i < edges.length; i++) { - var childNode = null; - if (edges[i].toId == parentId) {childNode = edges[i].from;} - else {childNode = edges[i].to;} - if (childNode.edges.length > 1 && childNode.hierarchyEnumerated === false) { - this._setLevelDirected(childNode.level, childNode.edges, childNode.id); - } - } + this._manipulationReleaseOverload = function () {}; + delete this.sectors['support']['nodes']['targetNode']; + delete this.sectors['support']['nodes']['targetViaNode']; + this.controlNodesActive = false; }; - /** - * Unfix nodes + * Manipulation UI temporarily overloads certain functions to extend or replace them. To be able to restore + * these functions to their original functionality, we saved them in this.cachedFunctions. + * This function restores these functions to their original function. * * @private */ - exports._restoreNodes = function() { - for (var nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - this.nodes[nodeId].xFixed = false; - this.nodes[nodeId].yFixed = false; + exports._restoreOverloadedFunctions = function() { + for (var functionName in this.cachedFunctions) { + if (this.cachedFunctions.hasOwnProperty(functionName)) { + this[functionName] = this.cachedFunctions[functionName]; } } }; - -/***/ }, -/* 66 */ -/***/ function(module, exports, __webpack_require__) { - - var util = __webpack_require__(1); - var RepulsionMixin = __webpack_require__(68); - var HierarchialRepulsionMixin = __webpack_require__(69); - var BarnesHutMixin = __webpack_require__(70); - /** - * Toggling barnes Hut calculation on and off. + * Enable or disable edit-mode. * * @private */ - exports._toggleBarnesHut = function () { - this.constants.physics.barnesHut.enabled = !this.constants.physics.barnesHut.enabled; - this._loadSelectedForceSolver(); - this.moving = true; - this.start(); + exports._toggleEditMode = function() { + this.editMode = !this.editMode; + var toolbar = this.manipulationDiv; + var closeDiv = this.closeDiv; + var editModeDiv = this.editModeDiv; + if (this.editMode == true) { + toolbar.style.display="block"; + closeDiv.style.display="block"; + editModeDiv.style.display="none"; + closeDiv.onclick = this._toggleEditMode.bind(this); + } + else { + toolbar.style.display="none"; + closeDiv.style.display="none"; + editModeDiv.style.display="block"; + closeDiv.onclick = null; + } + this._createManipulatorBar() }; - /** - * This loads the node force solver based on the barnes hut or repulsion algorithm + * main function, creates the main toolbar. Removes functions bound to the select event. Binds all the buttons of the toolbar. * * @private */ - exports._loadSelectedForceSolver = function () { - // this overloads the this._calculateNodeForces - if (this.constants.physics.barnesHut.enabled == true) { - this._clearMixin(RepulsionMixin); - this._clearMixin(HierarchialRepulsionMixin); + exports._createManipulatorBar = function() { + // remove bound functions + if (this.boundFunction) { + this.off('select', this.boundFunction); + } - this.constants.physics.centralGravity = this.constants.physics.barnesHut.centralGravity; - this.constants.physics.springLength = this.constants.physics.barnesHut.springLength; - this.constants.physics.springConstant = this.constants.physics.barnesHut.springConstant; - this.constants.physics.damping = this.constants.physics.barnesHut.damping; + var locale = this.constants.locales[this.constants.locale]; - this._loadMixin(BarnesHutMixin); + if (this.edgeBeingEdited !== undefined) { + this.edgeBeingEdited._disableControlNodes(); + this.edgeBeingEdited = undefined; + this.selectedControlNode = null; + this.controlNodesActive = false; + this._redraw(); } - else if (this.constants.physics.hierarchicalRepulsion.enabled == true) { - this._clearMixin(BarnesHutMixin); - this._clearMixin(RepulsionMixin); - this.constants.physics.centralGravity = this.constants.physics.hierarchicalRepulsion.centralGravity; - this.constants.physics.springLength = this.constants.physics.hierarchicalRepulsion.springLength; - this.constants.physics.springConstant = this.constants.physics.hierarchicalRepulsion.springConstant; - this.constants.physics.damping = this.constants.physics.hierarchicalRepulsion.damping; + // restore overloaded functions + this._restoreOverloadedFunctions(); - this._loadMixin(HierarchialRepulsionMixin); - } - else { - this._clearMixin(BarnesHutMixin); - this._clearMixin(HierarchialRepulsionMixin); - this.barnesHutTree = undefined; + // resume calculation + this.freezeSimulation = false; - this.constants.physics.centralGravity = this.constants.physics.repulsion.centralGravity; - this.constants.physics.springLength = this.constants.physics.repulsion.springLength; - this.constants.physics.springConstant = this.constants.physics.repulsion.springConstant; - this.constants.physics.damping = this.constants.physics.repulsion.damping; + // reset global variables + this.blockConnectingEdgeSelection = false; + this.forceAppendSelection = false; + this.manipulationDOM = {}; - this._loadMixin(RepulsionMixin); - } - }; + if (this.editMode == true) { + while (this.manipulationDiv.hasChildNodes()) { + this.manipulationDiv.removeChild(this.manipulationDiv.firstChild); + } - /** - * Before calculating the forces, we check if we need to cluster to keep up performance and we check - * if there is more than one node. If it is just one node, we dont calculate anything. - * - * @private - */ - exports._initializeForceCalculation = function () { - // stop calculation if there is only one node - if (this.nodeIndices.length == 1) { - this.nodes[this.nodeIndices[0]]._setForce(0, 0); - } - else { - // if there are too many nodes on screen, we cluster without repositioning - if (this.nodeIndices.length > this.constants.clustering.clusterThreshold && this.constants.clustering.enabled == true) { - this.clusterToFit(this.constants.clustering.reduceToNodes, false); + this.manipulationDOM['addNodeSpan'] = document.createElement('span'); + this.manipulationDOM['addNodeSpan'].className = 'network-manipulationUI add'; + this.manipulationDOM['addNodeLabelSpan'] = document.createElement('span'); + this.manipulationDOM['addNodeLabelSpan'].className = 'network-manipulationLabel'; + this.manipulationDOM['addNodeLabelSpan'].innerHTML = locale['addNode']; + this.manipulationDOM['addNodeSpan'].appendChild(this.manipulationDOM['addNodeLabelSpan']); + + this.manipulationDOM['seperatorLineDiv1'] = document.createElement('div'); + this.manipulationDOM['seperatorLineDiv1'].className = 'network-seperatorLine'; + + this.manipulationDOM['addEdgeSpan'] = document.createElement('span'); + this.manipulationDOM['addEdgeSpan'].className = 'network-manipulationUI connect'; + this.manipulationDOM['addEdgeLabelSpan'] = document.createElement('span'); + this.manipulationDOM['addEdgeLabelSpan'].className = 'network-manipulationLabel'; + this.manipulationDOM['addEdgeLabelSpan'].innerHTML = locale['addEdge']; + this.manipulationDOM['addEdgeSpan'].appendChild(this.manipulationDOM['addEdgeLabelSpan']); + + this.manipulationDiv.appendChild(this.manipulationDOM['addNodeSpan']); + this.manipulationDiv.appendChild(this.manipulationDOM['seperatorLineDiv1']); + this.manipulationDiv.appendChild(this.manipulationDOM['addEdgeSpan']); + + if (this._getSelectedNodeCount() == 1 && this.triggerFunctions.edit) { + this.manipulationDOM['seperatorLineDiv2'] = document.createElement('div'); + this.manipulationDOM['seperatorLineDiv2'].className = 'network-seperatorLine'; + + this.manipulationDOM['editNodeSpan'] = document.createElement('span'); + this.manipulationDOM['editNodeSpan'].className = 'network-manipulationUI edit'; + this.manipulationDOM['editNodeLabelSpan'] = document.createElement('span'); + this.manipulationDOM['editNodeLabelSpan'].className = 'network-manipulationLabel'; + this.manipulationDOM['editNodeLabelSpan'].innerHTML = locale['editNode']; + this.manipulationDOM['editNodeSpan'].appendChild(this.manipulationDOM['editNodeLabelSpan']); + + this.manipulationDiv.appendChild(this.manipulationDOM['seperatorLineDiv2']); + this.manipulationDiv.appendChild(this.manipulationDOM['editNodeSpan']); } + else if (this._getSelectedEdgeCount() == 1 && this._getSelectedNodeCount() == 0) { + this.manipulationDOM['seperatorLineDiv3'] = document.createElement('div'); + this.manipulationDOM['seperatorLineDiv3'].className = 'network-seperatorLine'; - // we now start the force calculation - this._calculateForces(); - } - }; + this.manipulationDOM['editEdgeSpan'] = document.createElement('span'); + this.manipulationDOM['editEdgeSpan'].className = 'network-manipulationUI edit'; + this.manipulationDOM['editEdgeLabelSpan'] = document.createElement('span'); + this.manipulationDOM['editEdgeLabelSpan'].className = 'network-manipulationLabel'; + this.manipulationDOM['editEdgeLabelSpan'].innerHTML = locale['editEdge']; + this.manipulationDOM['editEdgeSpan'].appendChild(this.manipulationDOM['editEdgeLabelSpan']); + + this.manipulationDiv.appendChild(this.manipulationDOM['seperatorLineDiv3']); + this.manipulationDiv.appendChild(this.manipulationDOM['editEdgeSpan']); + } + if (this._selectionIsEmpty() == false) { + this.manipulationDOM['seperatorLineDiv4'] = document.createElement('div'); + this.manipulationDOM['seperatorLineDiv4'].className = 'network-seperatorLine'; + this.manipulationDOM['deleteSpan'] = document.createElement('span'); + this.manipulationDOM['deleteSpan'].className = 'network-manipulationUI delete'; + this.manipulationDOM['deleteLabelSpan'] = document.createElement('span'); + this.manipulationDOM['deleteLabelSpan'].className = 'network-manipulationLabel'; + this.manipulationDOM['deleteLabelSpan'].innerHTML = locale['del']; + this.manipulationDOM['deleteSpan'].appendChild(this.manipulationDOM['deleteLabelSpan']); - /** - * Calculate the external forces acting on the nodes - * Forces are caused by: edges, repulsing forces between nodes, gravity - * @private - */ - exports._calculateForces = function () { - // Gravity is required to keep separated groups from floating off - // the forces are reset to zero in this loop by using _setForce instead - // of _addForce + this.manipulationDiv.appendChild(this.manipulationDOM['seperatorLineDiv4']); + this.manipulationDiv.appendChild(this.manipulationDOM['deleteSpan']); + } - this._calculateGravitationalForces(); - this._calculateNodeForces(); - if (this.constants.physics.springConstant > 0) { - if (this.constants.smoothCurves.enabled == true && this.constants.smoothCurves.dynamic == true) { - this._calculateSpringForcesWithSupport(); + // bind the icons + this.manipulationDOM['addNodeSpan'].onclick = this._createAddNodeToolbar.bind(this); + this.manipulationDOM['addEdgeSpan'].onclick = this._createAddEdgeToolbar.bind(this); + if (this._getSelectedNodeCount() == 1 && this.triggerFunctions.edit) { + this.manipulationDOM['editNodeSpan'].onclick = this._editNode.bind(this); } - else { - if (this.constants.physics.hierarchicalRepulsion.enabled == true) { - this._calculateHierarchicalSpringForces(); - } - else { - this._calculateSpringForces(); - } + else if (this._getSelectedEdgeCount() == 1 && this._getSelectedNodeCount() == 0) { + this.manipulationDOM['editEdgeSpan'].onclick = this._createEditEdgeToolbar.bind(this); + } + if (this._selectionIsEmpty() == false) { + this.manipulationDOM['deleteSpan'].onclick = this._deleteSelected.bind(this); + } + this.closeDiv.onclick = this._toggleEditMode.bind(this); + + this.boundFunction = this._createManipulatorBar.bind(this); + this.on('select', this.boundFunction); + } + else { + while (this.editModeDiv.hasChildNodes()) { + this.editModeDiv.removeChild(this.editModeDiv.firstChild); } + + this.manipulationDOM['editModeSpan'] = document.createElement('span'); + this.manipulationDOM['editModeSpan'].className = 'network-manipulationUI edit editmode'; + this.manipulationDOM['editModeLabelSpan'] = document.createElement('span'); + this.manipulationDOM['editModeLabelSpan'].className = 'network-manipulationLabel'; + this.manipulationDOM['editModeLabelSpan'].innerHTML = locale['edit']; + this.manipulationDOM['editModeSpan'].appendChild(this.manipulationDOM['editModeLabelSpan']); + + this.editModeDiv.appendChild(this.manipulationDOM['editModeSpan']); + + this.manipulationDOM['editModeSpan'].onclick = this._toggleEditMode.bind(this); } }; + /** - * Smooth curves are created by adding invisible nodes in the center of the edges. These nodes are also - * handled in the calculateForces function. We then use a quadratic curve with the center node as control. - * This function joins the datanodes and invisible (called support) nodes into one object. - * We do this so we do not contaminate this.nodes with the support nodes. + * Create the toolbar for adding Nodes * * @private */ - exports._updateCalculationNodes = function () { - if (this.constants.smoothCurves.enabled == true && this.constants.smoothCurves.dynamic == true) { - this.calculationNodes = {}; - this.calculationNodeIndices = []; + exports._createAddNodeToolbar = function() { + // clear the toolbar + this._clearManipulatorBar(); + if (this.boundFunction) { + this.off('select', this.boundFunction); + } - for (var nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - this.calculationNodes[nodeId] = this.nodes[nodeId]; - } - } - var supportNodes = this.sectors['support']['nodes']; - for (var supportNodeId in supportNodes) { - if (supportNodes.hasOwnProperty(supportNodeId)) { - if (this.edges.hasOwnProperty(supportNodes[supportNodeId].parentEdgeId)) { - this.calculationNodes[supportNodeId] = supportNodes[supportNodeId]; - } - else { - supportNodes[supportNodeId]._setForce(0, 0); - } - } - } + var locale = this.constants.locales[this.constants.locale]; - for (var idx in this.calculationNodes) { - if (this.calculationNodes.hasOwnProperty(idx)) { - this.calculationNodeIndices.push(idx); - } - } - } - else { - this.calculationNodes = this.nodes; - this.calculationNodeIndices = this.nodeIndices; - } + this.manipulationDOM = {}; + this.manipulationDOM['backSpan'] = document.createElement('span'); + this.manipulationDOM['backSpan'].className = 'network-manipulationUI back'; + this.manipulationDOM['backLabelSpan'] = document.createElement('span'); + this.manipulationDOM['backLabelSpan'].className = 'network-manipulationLabel'; + this.manipulationDOM['backLabelSpan'].innerHTML = locale['back']; + this.manipulationDOM['backSpan'].appendChild(this.manipulationDOM['backLabelSpan']); + + this.manipulationDOM['seperatorLineDiv1'] = document.createElement('div'); + this.manipulationDOM['seperatorLineDiv1'].className = 'network-seperatorLine'; + + this.manipulationDOM['descriptionSpan'] = document.createElement('span'); + this.manipulationDOM['descriptionSpan'].className = 'network-manipulationUI none'; + this.manipulationDOM['descriptionLabelSpan'] = document.createElement('span'); + this.manipulationDOM['descriptionLabelSpan'].className = 'network-manipulationLabel'; + this.manipulationDOM['descriptionLabelSpan'].innerHTML = locale['addDescription']; + this.manipulationDOM['descriptionSpan'].appendChild(this.manipulationDOM['descriptionLabelSpan']); + + this.manipulationDiv.appendChild(this.manipulationDOM['backSpan']); + this.manipulationDiv.appendChild(this.manipulationDOM['seperatorLineDiv1']); + this.manipulationDiv.appendChild(this.manipulationDOM['descriptionSpan']); + + // bind the icon + this.manipulationDOM['backSpan'].onclick = this._createManipulatorBar.bind(this); + + // we use the boundFunction so we can reference it when we unbind it from the "select" event. + this.boundFunction = this._addNode.bind(this); + this.on('select', this.boundFunction); }; /** - * this function applies the central gravity effect to keep groups from floating off + * create the toolbar to connect nodes * * @private */ - exports._calculateGravitationalForces = function () { - var dx, dy, distance, node, i; - var nodes = this.calculationNodes; - var gravity = this.constants.physics.centralGravity; - var gravityForce = 0; + exports._createAddEdgeToolbar = function() { + // clear the toolbar + this._clearManipulatorBar(); + this._unselectAll(true); + this.freezeSimulation = true; - for (i = 0; i < this.calculationNodeIndices.length; i++) { - node = nodes[this.calculationNodeIndices[i]]; - node.damping = this.constants.physics.damping; // possibly add function to alter damping properties of clusters. - // gravity does not apply when we are in a pocket sector - if (this._sector() == "default" && gravity != 0) { - dx = -node.x; - dy = -node.y; - distance = Math.sqrt(dx * dx + dy * dy); + var locale = this.constants.locales[this.constants.locale]; - gravityForce = (distance == 0) ? 0 : (gravity / distance); - node.fx = dx * gravityForce; - node.fy = dy * gravityForce; - } - else { - node.fx = 0; - node.fy = 0; - } + if (this.boundFunction) { + this.off('select', this.boundFunction); } - }; + this._unselectAll(); + this.forceAppendSelection = false; + this.blockConnectingEdgeSelection = true; + + this.manipulationDOM = {}; + this.manipulationDOM['backSpan'] = document.createElement('span'); + this.manipulationDOM['backSpan'].className = 'network-manipulationUI back'; + this.manipulationDOM['backLabelSpan'] = document.createElement('span'); + this.manipulationDOM['backLabelSpan'].className = 'network-manipulationLabel'; + this.manipulationDOM['backLabelSpan'].innerHTML = locale['back']; + this.manipulationDOM['backSpan'].appendChild(this.manipulationDOM['backLabelSpan']); + + this.manipulationDOM['seperatorLineDiv1'] = document.createElement('div'); + this.manipulationDOM['seperatorLineDiv1'].className = 'network-seperatorLine'; + + this.manipulationDOM['descriptionSpan'] = document.createElement('span'); + this.manipulationDOM['descriptionSpan'].className = 'network-manipulationUI none'; + this.manipulationDOM['descriptionLabelSpan'] = document.createElement('span'); + this.manipulationDOM['descriptionLabelSpan'].className = 'network-manipulationLabel'; + this.manipulationDOM['descriptionLabelSpan'].innerHTML = locale['edgeDescription']; + this.manipulationDOM['descriptionSpan'].appendChild(this.manipulationDOM['descriptionLabelSpan']); + + this.manipulationDiv.appendChild(this.manipulationDOM['backSpan']); + this.manipulationDiv.appendChild(this.manipulationDOM['seperatorLineDiv1']); + this.manipulationDiv.appendChild(this.manipulationDOM['descriptionSpan']); + + // bind the icon + this.manipulationDOM['backSpan'].onclick = this._createManipulatorBar.bind(this); + + // we use the boundFunction so we can reference it when we unbind it from the "select" event. + this.boundFunction = this._handleConnect.bind(this); + this.on('select', this.boundFunction); + // temporarily overload functions + this.cachedFunctions["_handleTouch"] = this._handleTouch; + this.cachedFunctions["_manipulationReleaseOverload"] = this._manipulationReleaseOverload; + this.cachedFunctions["_handleDragStart"] = this._handleDragStart; + this.cachedFunctions["_handleDragEnd"] = this._handleDragEnd; + this._handleTouch = this._handleConnect; + this._manipulationReleaseOverload = function () {}; + this._handleDragStart = function () {}; + this._handleDragEnd = this._finishConnect; + // redraw to show the unselect + this._redraw(); + }; /** - * this function calculates the effects of the springs in the case of unsmooth curves. + * create the toolbar to edit edges * * @private */ - exports._calculateSpringForces = function () { - var edgeLength, edge, edgeId; - var dx, dy, fx, fy, springForce, distance; - var edges = this.edges; + exports._createEditEdgeToolbar = function() { + // clear the toolbar + this._clearManipulatorBar(); + this.controlNodesActive = true; - // forces caused by the edges, modelled as springs - for (edgeId in edges) { - if (edges.hasOwnProperty(edgeId)) { - edge = edges[edgeId]; - if (edge.connected) { - // only calculate forces if nodes are in the same sector - if (this.nodes.hasOwnProperty(edge.toId) && this.nodes.hasOwnProperty(edge.fromId)) { - edgeLength = edge.physics.springLength; - // this implies that the edges between big clusters are longer - edgeLength += (edge.to.clusterSize + edge.from.clusterSize - 2) * this.constants.clustering.edgeGrowth; + if (this.boundFunction) { + this.off('select', this.boundFunction); + } - dx = (edge.from.x - edge.to.x); - dy = (edge.from.y - edge.to.y); - distance = Math.sqrt(dx * dx + dy * dy); + this.edgeBeingEdited = this._getSelectedEdge(); + this.edgeBeingEdited._enableControlNodes(); - if (distance == 0) { - distance = 0.01; - } + var locale = this.constants.locales[this.constants.locale]; - // the 1/distance is so the fx and fy can be calculated without sine or cosine. - springForce = this.constants.physics.springConstant * (edgeLength - distance) / distance; + this.manipulationDOM = {}; + this.manipulationDOM['backSpan'] = document.createElement('span'); + this.manipulationDOM['backSpan'].className = 'network-manipulationUI back'; + this.manipulationDOM['backLabelSpan'] = document.createElement('span'); + this.manipulationDOM['backLabelSpan'].className = 'network-manipulationLabel'; + this.manipulationDOM['backLabelSpan'].innerHTML = locale['back']; + this.manipulationDOM['backSpan'].appendChild(this.manipulationDOM['backLabelSpan']); - fx = dx * springForce; - fy = dy * springForce; + this.manipulationDOM['seperatorLineDiv1'] = document.createElement('div'); + this.manipulationDOM['seperatorLineDiv1'].className = 'network-seperatorLine'; - edge.from.fx += fx; - edge.from.fy += fy; - edge.to.fx -= fx; - edge.to.fy -= fy; - } - } - } - } - }; + this.manipulationDOM['descriptionSpan'] = document.createElement('span'); + this.manipulationDOM['descriptionSpan'].className = 'network-manipulationUI none'; + this.manipulationDOM['descriptionLabelSpan'] = document.createElement('span'); + this.manipulationDOM['descriptionLabelSpan'].className = 'network-manipulationLabel'; + this.manipulationDOM['descriptionLabelSpan'].innerHTML = locale['editEdgeDescription']; + this.manipulationDOM['descriptionSpan'].appendChild(this.manipulationDOM['descriptionLabelSpan']); + + this.manipulationDiv.appendChild(this.manipulationDOM['backSpan']); + this.manipulationDiv.appendChild(this.manipulationDOM['seperatorLineDiv1']); + this.manipulationDiv.appendChild(this.manipulationDOM['descriptionSpan']); + + // bind the icon + this.manipulationDOM['backSpan'].onclick = this._createManipulatorBar.bind(this); + // temporarily overload functions + this.cachedFunctions["_handleTouch"] = this._handleTouch; + this.cachedFunctions["_manipulationReleaseOverload"] = this._manipulationReleaseOverload; + this.cachedFunctions["_handleTap"] = this._handleTap; + this.cachedFunctions["_handleDragStart"] = this._handleDragStart; + this.cachedFunctions["_handleOnDrag"] = this._handleOnDrag; + this._handleTouch = this._selectControlNode; + this._handleTap = function () {}; + this._handleOnDrag = this._controlNodeDrag; + this._handleDragStart = function () {} + this._manipulationReleaseOverload = this._releaseControlNode; + // redraw to show the unselect + this._redraw(); + }; /** - * This function calculates the springforces on the nodes, accounting for the support nodes. + * the function bound to the selection event. It checks if you want to connect a cluster and changes the description + * to walk the user through the process. * * @private */ - exports._calculateSpringForcesWithSupport = function () { - var edgeLength, edge, edgeId, combinedClusterSize; - var edges = this.edges; - - // forces caused by the edges, modelled as springs - for (edgeId in edges) { - if (edges.hasOwnProperty(edgeId)) { - edge = edges[edgeId]; - if (edge.connected) { - // only calculate forces if nodes are in the same sector - if (this.nodes.hasOwnProperty(edge.toId) && this.nodes.hasOwnProperty(edge.fromId)) { - if (edge.via != null) { - var node1 = edge.to; - var node2 = edge.via; - var node3 = edge.from; - - edgeLength = edge.physics.springLength; - - combinedClusterSize = node1.clusterSize + node3.clusterSize - 2; - - // this implies that the edges between big clusters are longer - edgeLength += combinedClusterSize * this.constants.clustering.edgeGrowth; - this._calculateSpringForce(node1, node2, 0.5 * edgeLength); - this._calculateSpringForce(node2, node3, 0.5 * edgeLength); - } - } - } - } + exports._selectControlNode = function(pointer) { + this.edgeBeingEdited.controlNodes.from.unselect(); + this.edgeBeingEdited.controlNodes.to.unselect(); + this.selectedControlNode = this.edgeBeingEdited._getSelectedControlNode(this._XconvertDOMtoCanvas(pointer.x),this._YconvertDOMtoCanvas(pointer.y)); + if (this.selectedControlNode !== null) { + this.selectedControlNode.select(); + this.freezeSimulation = true; } + this._redraw(); }; /** - * This is the code actually performing the calculation for the function above. It is split out to avoid repetition. + * the function bound to the selection event. It checks if you want to connect a cluster and changes the description + * to walk the user through the process. * - * @param node1 - * @param node2 - * @param edgeLength * @private */ - exports._calculateSpringForce = function (node1, node2, edgeLength) { - var dx, dy, fx, fy, springForce, distance; - - dx = (node1.x - node2.x); - dy = (node1.y - node2.y); - distance = Math.sqrt(dx * dx + dy * dy); - - if (distance == 0) { - distance = 0.01; + exports._controlNodeDrag = function(event) { + var pointer = this._getPointer(event.gesture.center); + if (this.selectedControlNode !== null && this.selectedControlNode !== undefined) { + this.selectedControlNode.x = this._XconvertDOMtoCanvas(pointer.x); + this.selectedControlNode.y = this._YconvertDOMtoCanvas(pointer.y); } - - // the 1/distance is so the fx and fy can be calculated without sine or cosine. - springForce = this.constants.physics.springConstant * (edgeLength - distance) / distance; - - fx = dx * springForce; - fy = dy * springForce; - - node1.fx += fx; - node1.fy += fy; - node2.fx -= fx; - node2.fy -= fy; + this._redraw(); }; + exports._releaseControlNode = function(pointer) { + var newNode = this._getNodeAt(pointer); + if (newNode !== null) { + if (this.edgeBeingEdited.controlNodes.from.selected == true) { + this._editEdge(newNode.id, this.edgeBeingEdited.to.id); + this.edgeBeingEdited.controlNodes.from.unselect(); + } + if (this.edgeBeingEdited.controlNodes.to.selected == true) { + this._editEdge(this.edgeBeingEdited.from.id, newNode.id); + this.edgeBeingEdited.controlNodes.to.unselect(); + } + } + else { + this.edgeBeingEdited._restoreControlNodes(); + } + this.freezeSimulation = false; + this._redraw(); + }; /** - * Load the HTML for the physics config and bind it + * the function bound to the selection event. It checks if you want to connect a cluster and changes the description + * to walk the user through the process. + * * @private */ - exports._loadPhysicsConfiguration = function () { - if (this.physicsConfiguration === undefined) { - this.backupConstants = {}; - util.deepExtend(this.backupConstants,this.constants); + exports._handleConnect = function(pointer) { + if (this._getSelectedNodeCount() == 0) { + var node = this._getNodeAt(pointer); - var hierarchicalLayoutDirections = ["LR", "RL", "UD", "DU"]; - this.physicsConfiguration = document.createElement('div'); - this.physicsConfiguration.className = "PhysicsConfiguration"; - this.physicsConfiguration.innerHTML = '' + - '' + - '' + - '' + - '' + - '' + - '' + - '
Simulation Mode:
Barnes HutRepulsionHierarchical
' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '' + - '
Options:
' - this.containerElement.parentElement.insertBefore(this.physicsConfiguration, this.containerElement); - this.optionsDiv = document.createElement("div"); - this.optionsDiv.style.fontSize = "14px"; - this.optionsDiv.style.fontFamily = "verdana"; - this.containerElement.parentElement.insertBefore(this.optionsDiv, this.containerElement); + if (node != null) { + if (node.clusterSize > 1) { + alert(this.constants.locales[this.constants.locale]['createEdgeError']) + } + else { + this._selectObject(node,false); + var supportNodes = this.sectors['support']['nodes']; - var rangeElement; - rangeElement = document.getElementById('graph_BH_gc'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_BH_gc', -1, "physics_barnesHut_gravitationalConstant"); - rangeElement = document.getElementById('graph_BH_cg'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_BH_cg', 1, "physics_centralGravity"); - rangeElement = document.getElementById('graph_BH_sc'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_BH_sc', 1, "physics_springConstant"); - rangeElement = document.getElementById('graph_BH_sl'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_BH_sl', 1, "physics_springLength"); - rangeElement = document.getElementById('graph_BH_damp'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_BH_damp', 1, "physics_damping"); + // create a node the temporary line can look at + supportNodes['targetNode'] = new Node({id:'targetNode'},{},{},this.constants); + var targetNode = supportNodes['targetNode']; + targetNode.x = node.x; + targetNode.y = node.y; - rangeElement = document.getElementById('graph_R_nd'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_R_nd', 1, "physics_repulsion_nodeDistance"); - rangeElement = document.getElementById('graph_R_cg'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_R_cg', 1, "physics_centralGravity"); - rangeElement = document.getElementById('graph_R_sc'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_R_sc', 1, "physics_springConstant"); - rangeElement = document.getElementById('graph_R_sl'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_R_sl', 1, "physics_springLength"); - rangeElement = document.getElementById('graph_R_damp'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_R_damp', 1, "physics_damping"); + // create a temporary edge + this.edges['connectionEdge'] = new Edge({id:"connectionEdge",from:node.id,to:targetNode.id}, this, this.constants); + var connectionEdge = this.edges['connectionEdge']; + connectionEdge.from = node; + connectionEdge.connected = true; + connectionEdge.options.smoothCurves = {enabled: true, + dynamic: false, + type: "continuous", + roundness: 0.5 + }; + connectionEdge.selected = true; + connectionEdge.to = targetNode; - rangeElement = document.getElementById('graph_H_nd'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_nd', 1, "physics_hierarchicalRepulsion_nodeDistance"); - rangeElement = document.getElementById('graph_H_cg'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_cg', 1, "physics_centralGravity"); - rangeElement = document.getElementById('graph_H_sc'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_sc', 1, "physics_springConstant"); - rangeElement = document.getElementById('graph_H_sl'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_sl', 1, "physics_springLength"); - rangeElement = document.getElementById('graph_H_damp'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_damp', 1, "physics_damping"); - rangeElement = document.getElementById('graph_H_direction'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_direction', hierarchicalLayoutDirections, "hierarchicalLayout_direction"); - rangeElement = document.getElementById('graph_H_levsep'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_levsep', 1, "hierarchicalLayout_levelSeparation"); - rangeElement = document.getElementById('graph_H_nspac'); - rangeElement.onchange = showValueOfRange.bind(this, 'graph_H_nspac', 1, "hierarchicalLayout_nodeSpacing"); + this.cachedFunctions["_handleOnDrag"] = this._handleOnDrag; + this._handleOnDrag = function(event) { + var pointer = this._getPointer(event.gesture.center); + var connectionEdge = this.edges['connectionEdge']; + connectionEdge.to.x = this._XconvertDOMtoCanvas(pointer.x); + connectionEdge.to.y = this._YconvertDOMtoCanvas(pointer.y); + }; - var radioButton1 = document.getElementById("graph_physicsMethod1"); - var radioButton2 = document.getElementById("graph_physicsMethod2"); - var radioButton3 = document.getElementById("graph_physicsMethod3"); - radioButton2.checked = true; - if (this.constants.physics.barnesHut.enabled) { - radioButton1.checked = true; + this.moving = true; + this.start(); + } } - if (this.constants.hierarchicalLayout.enabled) { - radioButton3.checked = true; + } + }; + + exports._finishConnect = function(event) { + if (this._getSelectedNodeCount() == 1) { + var pointer = this._getPointer(event.gesture.center); + // restore the drag function + this._handleOnDrag = this.cachedFunctions["_handleOnDrag"]; + delete this.cachedFunctions["_handleOnDrag"]; + + // remember the edge id + var connectFromId = this.edges['connectionEdge'].fromId; + + // remove the temporary nodes and edge + delete this.edges['connectionEdge']; + delete this.sectors['support']['nodes']['targetNode']; + delete this.sectors['support']['nodes']['targetViaNode']; + + var node = this._getNodeAt(pointer); + if (node != null) { + if (node.clusterSize > 1) { + alert(this.constants.locales[this.constants.locale]["createEdgeError"]) + } + else { + this._createEdge(connectFromId,node.id); + this._createManipulatorBar(); + } } + this._unselectAll(); + } + }; - var graph_toggleSmooth = document.getElementById("graph_toggleSmooth"); - var graph_repositionNodes = document.getElementById("graph_repositionNodes"); - var graph_generateOptions = document.getElementById("graph_generateOptions"); - graph_toggleSmooth.onclick = graphToggleSmoothCurves.bind(this); - graph_repositionNodes.onclick = graphRepositionNodes.bind(this); - graph_generateOptions.onclick = graphGenerateOptions.bind(this); - if (this.constants.smoothCurves == true && this.constants.dynamicSmoothCurves == false) { - graph_toggleSmooth.style.background = "#A4FF56"; + /** + * Adds a node on the specified location + */ + exports._addNode = function() { + if (this._selectionIsEmpty() && this.editMode == true) { + var positionObject = this._pointerToPositionObject(this.pointerPosition); + var defaultData = {id:util.randomUUID(),x:positionObject.left,y:positionObject.top,label:"new",allowedToMoveX:true,allowedToMoveY:true}; + if (this.triggerFunctions.add) { + if (this.triggerFunctions.add.length == 2) { + var me = this; + this.triggerFunctions.add(defaultData, function(finalizedData) { + me.nodesData.add(finalizedData); + me._createManipulatorBar(); + me.moving = true; + me.start(); + }); + } + else { + throw new Error('The function for add does not support two arguments (data,callback)'); + this._createManipulatorBar(); + this.moving = true; + this.start(); + } } else { - graph_toggleSmooth.style.background = "#FF8532"; + this.nodesData.add(defaultData); + this._createManipulatorBar(); + this.moving = true; + this.start(); } - - - switchConfigurations.apply(this); - - radioButton1.onchange = switchConfigurations.bind(this); - radioButton2.onchange = switchConfigurations.bind(this); - radioButton3.onchange = switchConfigurations.bind(this); } }; + /** - * This overwrites the this.constants. + * connect two nodes with a new edge. * - * @param constantsVariableName - * @param value * @private */ - exports._overWriteGraphConstants = function (constantsVariableName, value) { - var nameArray = constantsVariableName.split("_"); - if (nameArray.length == 1) { - this.constants[nameArray[0]] = value; - } - else if (nameArray.length == 2) { - this.constants[nameArray[0]][nameArray[1]] = value; - } - else if (nameArray.length == 3) { - this.constants[nameArray[0]][nameArray[1]][nameArray[2]] = value; + exports._createEdge = function(sourceNodeId,targetNodeId) { + if (this.editMode == true) { + var defaultData = {from:sourceNodeId, to:targetNodeId}; + if (this.triggerFunctions.connect) { + if (this.triggerFunctions.connect.length == 2) { + var me = this; + this.triggerFunctions.connect(defaultData, function(finalizedData) { + me.edgesData.add(finalizedData); + me.moving = true; + me.start(); + }); + } + else { + throw new Error('The function for connect does not support two arguments (data,callback)'); + this.moving = true; + this.start(); + } + } + else { + this.edgesData.add(defaultData); + this.moving = true; + this.start(); + } } }; - /** - * this function is bound to the toggle smooth curves button. That is also why it is not in the prototype. + * connect two nodes with a new edge. + * + * @private */ - function graphToggleSmoothCurves () { - this.constants.smoothCurves.enabled = !this.constants.smoothCurves.enabled; - var graph_toggleSmooth = document.getElementById("graph_toggleSmooth"); - if (this.constants.smoothCurves.enabled == true) {graph_toggleSmooth.style.background = "#A4FF56";} - else {graph_toggleSmooth.style.background = "#FF8532";} - - this._configureSmoothCurves(false); - } + exports._editEdge = function(sourceNodeId,targetNodeId) { + if (this.editMode == true) { + var defaultData = {id: this.edgeBeingEdited.id, from:sourceNodeId, to:targetNodeId}; + if (this.triggerFunctions.editEdge) { + if (this.triggerFunctions.editEdge.length == 2) { + var me = this; + this.triggerFunctions.editEdge(defaultData, function(finalizedData) { + me.edgesData.update(finalizedData); + me.moving = true; + me.start(); + }); + } + else { + throw new Error('The function for edit does not support two arguments (data, callback)'); + this.moving = true; + this.start(); + } + } + else { + this.edgesData.update(defaultData); + this.moving = true; + this.start(); + } + } + }; /** - * this function is used to scramble the nodes + * Create the toolbar to edit the selected node. The label and the color can be changed. Other colors are derived from the chosen color. * + * @private */ - function graphRepositionNodes () { - for (var nodeId in this.calculationNodes) { - if (this.calculationNodes.hasOwnProperty(nodeId)) { - this.calculationNodes[nodeId].vx = 0; this.calculationNodes[nodeId].vy = 0; - this.calculationNodes[nodeId].fx = 0; this.calculationNodes[nodeId].fy = 0; + exports._editNode = function() { + if (this.triggerFunctions.edit && this.editMode == true) { + var node = this._getSelectedNode(); + var data = {id:node.id, + label: node.label, + group: node.options.group, + shape: node.options.shape, + color: { + background:node.options.color.background, + border:node.options.color.border, + highlight: { + background:node.options.color.highlight.background, + border:node.options.color.highlight.border + } + }}; + if (this.triggerFunctions.edit.length == 2) { + var me = this; + this.triggerFunctions.edit(data, function (finalizedData) { + me.nodesData.update(finalizedData); + me._createManipulatorBar(); + me.moving = true; + me.start(); + }); + } + else { + throw new Error('The function for edit does not support two arguments (data, callback)'); } - } - if (this.constants.hierarchicalLayout.enabled == true) { - this._setupHierarchicalLayout(); - showValueOfRange.call(this, 'graph_H_nd', 1, "physics_hierarchicalRepulsion_nodeDistance"); - showValueOfRange.call(this, 'graph_H_cg', 1, "physics_centralGravity"); - showValueOfRange.call(this, 'graph_H_sc', 1, "physics_springConstant"); - showValueOfRange.call(this, 'graph_H_sl', 1, "physics_springLength"); - showValueOfRange.call(this, 'graph_H_damp', 1, "physics_damping"); } else { - this.repositionNodes(); + throw new Error('No edit function has been bound to this button'); } - this.moving = true; - this.start(); - } + }; + + + /** - * this is used to generate an options file from the playing with physics system. + * delete everything in the selection + * + * @private */ - function graphGenerateOptions () { - var options = "No options are required, default values used."; - var optionsSpecific = []; - var radioButton1 = document.getElementById("graph_physicsMethod1"); - var radioButton2 = document.getElementById("graph_physicsMethod2"); - if (radioButton1.checked == true) { - if (this.constants.physics.barnesHut.gravitationalConstant != this.backupConstants.physics.barnesHut.gravitationalConstant) {optionsSpecific.push("gravitationalConstant: " + this.constants.physics.barnesHut.gravitationalConstant);} - if (this.constants.physics.centralGravity != this.backupConstants.physics.barnesHut.centralGravity) {optionsSpecific.push("centralGravity: " + this.constants.physics.centralGravity);} - if (this.constants.physics.springLength != this.backupConstants.physics.barnesHut.springLength) {optionsSpecific.push("springLength: " + this.constants.physics.springLength);} - if (this.constants.physics.springConstant != this.backupConstants.physics.barnesHut.springConstant) {optionsSpecific.push("springConstant: " + this.constants.physics.springConstant);} - if (this.constants.physics.damping != this.backupConstants.physics.barnesHut.damping) {optionsSpecific.push("damping: " + this.constants.physics.damping);} - if (optionsSpecific.length != 0) { - options = "var options = {"; - options += "physics: {barnesHut: {"; - for (var i = 0; i < optionsSpecific.length; i++) { - options += optionsSpecific[i]; - if (i < optionsSpecific.length - 1) { - options += ", " - } - } - options += '}}' - } - if (this.constants.smoothCurves.enabled != this.backupConstants.smoothCurves.enabled) { - if (optionsSpecific.length == 0) {options = "var options = {";} - else {options += ", "} - options += "smoothCurves: " + this.constants.smoothCurves.enabled; - } - if (options != "No options are required, default values used.") { - options += '};' - } - } - else if (radioButton2.checked == true) { - options = "var options = {"; - options += "physics: {barnesHut: {enabled: false}"; - if (this.constants.physics.repulsion.nodeDistance != this.backupConstants.physics.repulsion.nodeDistance) {optionsSpecific.push("nodeDistance: " + this.constants.physics.repulsion.nodeDistance);} - if (this.constants.physics.centralGravity != this.backupConstants.physics.repulsion.centralGravity) {optionsSpecific.push("centralGravity: " + this.constants.physics.centralGravity);} - if (this.constants.physics.springLength != this.backupConstants.physics.repulsion.springLength) {optionsSpecific.push("springLength: " + this.constants.physics.springLength);} - if (this.constants.physics.springConstant != this.backupConstants.physics.repulsion.springConstant) {optionsSpecific.push("springConstant: " + this.constants.physics.springConstant);} - if (this.constants.physics.damping != this.backupConstants.physics.repulsion.damping) {optionsSpecific.push("damping: " + this.constants.physics.damping);} - if (optionsSpecific.length != 0) { - options += ", repulsion: {"; - for (var i = 0; i < optionsSpecific.length; i++) { - options += optionsSpecific[i]; - if (i < optionsSpecific.length - 1) { - options += ", " + exports._deleteSelected = function() { + if (!this._selectionIsEmpty() && this.editMode == true) { + if (!this._clusterInSelection()) { + var selectedNodes = this.getSelectedNodes(); + var selectedEdges = this.getSelectedEdges(); + if (this.triggerFunctions.del) { + var me = this; + var data = {nodes: selectedNodes, edges: selectedEdges}; + if (this.triggerFunctions.del.length == 2) { + this.triggerFunctions.del(data, function (finalizedData) { + me.edgesData.remove(finalizedData.edges); + me.nodesData.remove(finalizedData.nodes); + me._unselectAll(); + me.moving = true; + me.start(); + }); } - } - options += '}}' - } - if (optionsSpecific.length == 0) {options += "}"} - if (this.constants.smoothCurves != this.backupConstants.smoothCurves) { - options += ", smoothCurves: " + this.constants.smoothCurves; - } - options += '};' - } - else { - options = "var options = {"; - if (this.constants.physics.hierarchicalRepulsion.nodeDistance != this.backupConstants.physics.hierarchicalRepulsion.nodeDistance) {optionsSpecific.push("nodeDistance: " + this.constants.physics.hierarchicalRepulsion.nodeDistance);} - if (this.constants.physics.centralGravity != this.backupConstants.physics.hierarchicalRepulsion.centralGravity) {optionsSpecific.push("centralGravity: " + this.constants.physics.centralGravity);} - if (this.constants.physics.springLength != this.backupConstants.physics.hierarchicalRepulsion.springLength) {optionsSpecific.push("springLength: " + this.constants.physics.springLength);} - if (this.constants.physics.springConstant != this.backupConstants.physics.hierarchicalRepulsion.springConstant) {optionsSpecific.push("springConstant: " + this.constants.physics.springConstant);} - if (this.constants.physics.damping != this.backupConstants.physics.hierarchicalRepulsion.damping) {optionsSpecific.push("damping: " + this.constants.physics.damping);} - if (optionsSpecific.length != 0) { - options += "physics: {hierarchicalRepulsion: {"; - for (var i = 0; i < optionsSpecific.length; i++) { - options += optionsSpecific[i]; - if (i < optionsSpecific.length - 1) { - options += ", "; + else { + throw new Error('The function for delete does not support two arguments (data, callback)') } } - options += '}},'; - } - options += 'hierarchicalLayout: {'; - optionsSpecific = []; - if (this.constants.hierarchicalLayout.direction != this.backupConstants.hierarchicalLayout.direction) {optionsSpecific.push("direction: " + this.constants.hierarchicalLayout.direction);} - if (Math.abs(this.constants.hierarchicalLayout.levelSeparation) != this.backupConstants.hierarchicalLayout.levelSeparation) {optionsSpecific.push("levelSeparation: " + this.constants.hierarchicalLayout.levelSeparation);} - if (this.constants.hierarchicalLayout.nodeSpacing != this.backupConstants.hierarchicalLayout.nodeSpacing) {optionsSpecific.push("nodeSpacing: " + this.constants.hierarchicalLayout.nodeSpacing);} - if (optionsSpecific.length != 0) { - for (var i = 0; i < optionsSpecific.length; i++) { - options += optionsSpecific[i]; - if (i < optionsSpecific.length - 1) { - options += ", " - } + else { + this.edgesData.remove(selectedEdges); + this.nodesData.remove(selectedNodes); + this._unselectAll(); + this.moving = true; + this.start(); } - options += '}' } else { - options += "enabled:true}"; + alert(this.constants.locales[this.constants.locale]["deleteClusterError"]); } - options += '};' } + }; - this.optionsDiv.innerHTML = options; - } +/***/ }, +/* 68 */ +/***/ function(module, exports, __webpack_require__) { - /** - * this is used to switch between barnesHut, repulsion and hierarchical. - * - */ - function switchConfigurations () { - var ids = ["graph_BH_table", "graph_R_table", "graph_H_table"]; - var radioButton = document.querySelector('input[name="graph_physicsMethod"]:checked').value; - var tableId = "graph_" + radioButton + "_table"; - var table = document.getElementById(tableId); - table.style.display = "block"; - for (var i = 0; i < ids.length; i++) { - if (ids[i] != tableId) { - table = document.getElementById(ids[i]); - table.style.display = "none"; - } - } - this._restoreNodes(); - if (radioButton == "R") { - this.constants.hierarchicalLayout.enabled = false; - this.constants.physics.hierarchicalRepulsion.enabled = false; - this.constants.physics.barnesHut.enabled = false; - } - else if (radioButton == "H") { - if (this.constants.hierarchicalLayout.enabled == false) { - this.constants.hierarchicalLayout.enabled = true; - this.constants.physics.hierarchicalRepulsion.enabled = true; - this.constants.physics.barnesHut.enabled = false; - this.constants.smoothCurves.enabled = false; - this._setupHierarchicalLayout(); + var util = __webpack_require__(1); + var Hammer = __webpack_require__(19); + + exports._cleanNavigation = function() { + // clean hammer bindings + if (this.navigationHammers.existing.length != 0) { + for (var i = 0; i < this.navigationHammers.existing.length; i++) { + this.navigationHammers.existing[i].dispose(); } + this.navigationHammers.existing = []; } - else { - this.constants.hierarchicalLayout.enabled = false; - this.constants.physics.hierarchicalRepulsion.enabled = false; - this.constants.physics.barnesHut.enabled = true; - } - this._loadSelectedForceSolver(); - var graph_toggleSmooth = document.getElementById("graph_toggleSmooth"); - if (this.constants.smoothCurves.enabled == true) {graph_toggleSmooth.style.background = "#A4FF56";} - else {graph_toggleSmooth.style.background = "#FF8532";} - this.moving = true; - this.start(); - } + this._navigationReleaseOverload = function () {}; + + // clean up previous navigation items + if (this.navigationDivs && this.navigationDivs['wrapper'] && this.navigationDivs['wrapper'].parentNode) { + this.navigationDivs['wrapper'].parentNode.removeChild(this.navigationDivs['wrapper']); + } + }; /** - * this generates the ranges depending on the iniital values. + * Creation of the navigation controls nodes. They are drawn over the rest of the nodes and are not affected by scale and translation + * they have a triggerFunction which is called on click. If the position of the navigation controls is dependent + * on this.frame.canvas.clientWidth or this.frame.canvas.clientHeight, we flag horizontalAlignLeft and verticalAlignTop false. + * This means that the location will be corrected by the _relocateNavigation function on a size change of the canvas. * - * @param id - * @param map - * @param constantsVariableName + * @private */ - function showValueOfRange (id,map,constantsVariableName) { - var valueId = id + "_value"; - var rangeValue = document.getElementById(id).value; + exports._loadNavigationElements = function() { + this._cleanNavigation(); - if (Array.isArray(map)) { - document.getElementById(valueId).value = map[parseInt(rangeValue)]; - this._overWriteGraphConstants(constantsVariableName,map[parseInt(rangeValue)]); - } - else { - document.getElementById(valueId).value = parseInt(map) * parseFloat(rangeValue); - this._overWriteGraphConstants(constantsVariableName, parseInt(map) * parseFloat(rangeValue)); - } + this.navigationDivs = {}; + var navigationDivs = ['up','down','left','right','zoomIn','zoomOut','zoomExtends']; + var navigationDivActions = ['_moveUp','_moveDown','_moveLeft','_moveRight','_zoomIn','_zoomOut','_zoomExtent']; - if (constantsVariableName == "hierarchicalLayout_direction" || - constantsVariableName == "hierarchicalLayout_levelSeparation" || - constantsVariableName == "hierarchicalLayout_nodeSpacing") { - this._setupHierarchicalLayout(); + this.navigationDivs['wrapper'] = document.createElement('div'); + this.frame.appendChild(this.navigationDivs['wrapper']); + + for (var i = 0; i < navigationDivs.length; i++) { + this.navigationDivs[navigationDivs[i]] = document.createElement('div'); + this.navigationDivs[navigationDivs[i]].className = 'network-navigation ' + navigationDivs[i]; + this.navigationDivs['wrapper'].appendChild(this.navigationDivs[navigationDivs[i]]); + + var hammer = Hammer(this.navigationDivs[navigationDivs[i]], {prevent_default: true}); + hammer.on('touch', this[navigationDivActions[i]].bind(this)); + this.navigationHammers._new.push(hammer); } - this.moving = true; - this.start(); - } + this._navigationReleaseOverload = this._stopMovement; -/***/ }, -/* 67 */ -/***/ function(module, exports, __webpack_require__) { + this.navigationHammers.existing = this.navigationHammers._new; + }; - function webpackContext(req) { - throw new Error("Cannot find module '" + req + "'."); - } - webpackContext.keys = function() { return []; }; - webpackContext.resolve = webpackContext; - module.exports = webpackContext; - webpackContext.id = 67; + /** + * this stops all movement induced by the navigation buttons + * + * @private + */ + exports._zoomExtent = function(event) { + this.zoomExtent({duration:700}); + event.stopPropagation(); + }; + + /** + * this stops all movement induced by the navigation buttons + * + * @private + */ + exports._stopMovement = function() { + this._xStopMoving(); + this._yStopMoving(); + this._stopZoom(); + }; -/***/ }, -/* 68 */ -/***/ function(module, exports, __webpack_require__) { /** - * Calculate the forces the nodes apply on each other based on a repulsion field. - * This field is linearly approximated. + * move the screen up + * By using the increments, instead of adding a fixed number to the translation, we keep fluent and + * instant movement. The onKeypress event triggers immediately, then pauses, then triggers frequently + * To avoid this behaviour, we do the translation in the start loop. * * @private */ - exports._calculateNodeForces = function () { - var dx, dy, angle, distance, fx, fy, combinedClusterSize, - repulsingForce, node1, node2, i, j; + exports._moveUp = function(event) { + this.yIncrement = this.constants.keyboard.speed.y; + this.start(); // if there is no node movement, the calculation wont be done + event.preventDefault(); + }; - var nodes = this.calculationNodes; - var nodeIndices = this.calculationNodeIndices; - // approximation constants - var a_base = -2 / 3; - var b = 4 / 3; + /** + * move the screen down + * @private + */ + exports._moveDown = function(event) { + this.yIncrement = -this.constants.keyboard.speed.y; + this.start(); // if there is no node movement, the calculation wont be done + event.preventDefault(); + }; - // repulsing forces between nodes - var nodeDistance = this.constants.physics.repulsion.nodeDistance; - var minimumDistance = nodeDistance; - // we loop from i over all but the last entree in the array - // j loops from i+1 to the last. This way we do not double count any of the indices, nor i == j - for (i = 0; i < nodeIndices.length - 1; i++) { - node1 = nodes[nodeIndices[i]]; - for (j = i + 1; j < nodeIndices.length; j++) { - node2 = nodes[nodeIndices[j]]; - combinedClusterSize = node1.clusterSize + node2.clusterSize - 2; + /** + * move the screen left + * @private + */ + exports._moveLeft = function(event) { + this.xIncrement = this.constants.keyboard.speed.x; + this.start(); // if there is no node movement, the calculation wont be done + event.preventDefault(); + }; + + + /** + * move the screen right + * @private + */ + exports._moveRight = function(event) { + this.xIncrement = -this.constants.keyboard.speed.y; + this.start(); // if there is no node movement, the calculation wont be done + event.preventDefault(); + }; + + + /** + * Zoom in, using the same method as the movement. + * @private + */ + exports._zoomIn = function(event) { + this.zoomIncrement = this.constants.keyboard.speed.zoom; + this.start(); // if there is no node movement, the calculation wont be done + event.preventDefault(); + }; + + + /** + * Zoom out + * @private + */ + exports._zoomOut = function(event) { + this.zoomIncrement = -this.constants.keyboard.speed.zoom; + this.start(); // if there is no node movement, the calculation wont be done + event.preventDefault(); + }; - dx = node2.x - node1.x; - dy = node2.y - node1.y; - distance = Math.sqrt(dx * dx + dy * dy); - minimumDistance = (combinedClusterSize == 0) ? nodeDistance : (nodeDistance * (1 + combinedClusterSize * this.constants.clustering.distanceAmplification)); - var a = a_base / minimumDistance; - if (distance < 2 * minimumDistance) { - if (distance < 0.5 * minimumDistance) { - repulsingForce = 1.0; - } - else { - repulsingForce = a * distance + b; // linear approx of 1 / (1 + Math.exp((distance / minimumDistance - 1) * steepness)) - } + /** + * Stop zooming and unhighlight the zoom controls + * @private + */ + exports._stopZoom = function(event) { + this.zoomIncrement = 0; + event && event.preventDefault(); + }; - // amplify the repulsion for clusters. - repulsingForce *= (combinedClusterSize == 0) ? 1 : 1 + combinedClusterSize * this.constants.clustering.forceAmplification; - repulsingForce = repulsingForce / distance; - fx = dx * repulsingForce; - fy = dy * repulsingForce; + /** + * Stop moving in the Y direction and unHighlight the up and down + * @private + */ + exports._yStopMoving = function(event) { + this.yIncrement = 0; + event && event.preventDefault(); + }; - node1.fx -= fx; - node1.fy -= fy; - node2.fx += fx; - node2.fy += fy; - } - } - } + + /** + * Stop moving in the X direction and unHighlight left and right. + * @private + */ + exports._xStopMoving = function(event) { + this.xIncrement = 0; + event && event.preventDefault(); }; @@ -33410,579 +33302,688 @@ return /******/ (function(modules) { // webpackBootstrap /* 69 */ /***/ function(module, exports, __webpack_require__) { + exports._resetLevels = function() { + for (var nodeId in this.nodes) { + if (this.nodes.hasOwnProperty(nodeId)) { + var node = this.nodes[nodeId]; + if (node.preassignedLevel == false) { + node.level = -1; + node.hierarchyEnumerated = false; + } + } + } + }; + /** - * Calculate the forces the nodes apply on eachother based on a repulsion field. - * This field is linearly approximated. + * This is the main function to layout the nodes in a hierarchical way. + * It checks if the node details are supplied correctly * * @private */ - exports._calculateNodeForces = function () { - var dx, dy, distance, fx, fy, - repulsingForce, node1, node2, i, j; - - var nodes = this.calculationNodes; - var nodeIndices = this.calculationNodeIndices; - - // repulsing forces between nodes - var nodeDistance = this.constants.physics.hierarchicalRepulsion.nodeDistance; - - // we loop from i over all but the last entree in the array - // j loops from i+1 to the last. This way we do not double count any of the indices, nor i == j - for (i = 0; i < nodeIndices.length - 1; i++) { - node1 = nodes[nodeIndices[i]]; - for (j = i + 1; j < nodeIndices.length; j++) { - node2 = nodes[nodeIndices[j]]; + exports._setupHierarchicalLayout = function() { + if (this.constants.hierarchicalLayout.enabled == true && this.nodeIndices.length > 0) { + if (this.constants.hierarchicalLayout.direction == "RL" || this.constants.hierarchicalLayout.direction == "DU") { + this.constants.hierarchicalLayout.levelSeparation = this.constants.hierarchicalLayout.levelSeparation < 0 ? this.constants.hierarchicalLayout.levelSeparation : this.constants.hierarchicalLayout.levelSeparation * -1; + } + else { + this.constants.hierarchicalLayout.levelSeparation = Math.abs(this.constants.hierarchicalLayout.levelSeparation); + } - // nodes only affect nodes on their level - if (node1.level == node2.level) { + if (this.constants.hierarchicalLayout.direction == "RL" || this.constants.hierarchicalLayout.direction == "LR") { + if (this.constants.smoothCurves.enabled == true) { + this.constants.smoothCurves.type = "vertical"; + } + } + else { + if (this.constants.smoothCurves.enabled == true) { + this.constants.smoothCurves.type = "horizontal"; + } + } + // get the size of the largest hubs and check if the user has defined a level for a node. + var hubsize = 0; + var node, nodeId; + var definedLevel = false; + var undefinedLevel = false; - dx = node2.x - node1.x; - dy = node2.y - node1.y; - distance = Math.sqrt(dx * dx + dy * dy); + for (nodeId in this.nodes) { + if (this.nodes.hasOwnProperty(nodeId)) { + node = this.nodes[nodeId]; + if (node.level != -1) { + definedLevel = true; + } + else { + undefinedLevel = true; + } + if (hubsize < node.edges.length) { + hubsize = node.edges.length; + } + } + } + // if the user defined some levels but not all, alert and run without hierarchical layout + if (undefinedLevel == true && definedLevel == true) { + throw new Error("To use the hierarchical layout, nodes require either no predefined levels or levels have to be defined for all nodes."); + this.zoomExtent(undefined,true,this.constants.clustering.enabled); + if (!this.constants.clustering.enabled) { + this.start(); + } + } + else { + // setup the system to use hierarchical method. + this._changeConstants(); - var steepness = 0.05; - if (distance < nodeDistance) { - repulsingForce = -Math.pow(steepness*distance,2) + Math.pow(steepness*nodeDistance,2); + // define levels if undefined by the users. Based on hubsize + if (undefinedLevel == true) { + if (this.constants.hierarchicalLayout.layout == "hubsize") { + this._determineLevels(hubsize); } else { - repulsingForce = 0; + this._determineLevelsDirected(); } - // normalize force with - if (distance == 0) { - distance = 0.01; - } - else { - repulsingForce = repulsingForce / distance; - } - fx = dx * repulsingForce; - fy = dy * repulsingForce; - node1.fx -= fx; - node1.fy -= fy; - node2.fx += fx; - node2.fy += fy; } + // check the distribution of the nodes per level. + var distribution = this._getDistribution(); + + // place the nodes on the canvas. This also stablilizes the system. + this._placeNodesByHierarchy(distribution); + + // start the simulation. + this.start(); } } }; /** - * this function calculates the effects of the springs in the case of unsmooth curves. + * This function places the nodes on the canvas based on the hierarchial distribution. * + * @param {Object} distribution | obtained by the function this._getDistribution() * @private */ - exports._calculateHierarchicalSpringForces = function () { - var edgeLength, edge, edgeId; - var dx, dy, fx, fy, springForce, distance; - var edges = this.edges; - - var nodes = this.calculationNodes; - var nodeIndices = this.calculationNodeIndices; - - - for (var i = 0; i < nodeIndices.length; i++) { - var node1 = nodes[nodeIndices[i]]; - node1.springFx = 0; - node1.springFy = 0; - } - - - // forces caused by the edges, modelled as springs - for (edgeId in edges) { - if (edges.hasOwnProperty(edgeId)) { - edge = edges[edgeId]; - if (edge.connected) { - // only calculate forces if nodes are in the same sector - if (this.nodes.hasOwnProperty(edge.toId) && this.nodes.hasOwnProperty(edge.fromId)) { - edgeLength = edge.physics.springLength; - // this implies that the edges between big clusters are longer - edgeLength += (edge.to.clusterSize + edge.from.clusterSize - 2) * this.constants.clustering.edgeGrowth; - - dx = (edge.from.x - edge.to.x); - dy = (edge.from.y - edge.to.y); - distance = Math.sqrt(dx * dx + dy * dy); - - if (distance == 0) { - distance = 0.01; - } - - // the 1/distance is so the fx and fy can be calculated without sine or cosine. - springForce = this.constants.physics.springConstant * (edgeLength - distance) / distance; - - fx = dx * springForce; - fy = dy * springForce; + exports._placeNodesByHierarchy = function(distribution) { + var nodeId, node; + // start placing all the level 0 nodes first. Then recursively position their branches. + for (var level in distribution) { + if (distribution.hasOwnProperty(level)) { + for (nodeId in distribution[level].nodes) { + if (distribution[level].nodes.hasOwnProperty(nodeId)) { + node = distribution[level].nodes[nodeId]; + if (this.constants.hierarchicalLayout.direction == "UD" || this.constants.hierarchicalLayout.direction == "DU") { + if (node.xFixed) { + node.x = distribution[level].minPos; + node.xFixed = false; - if (edge.to.level != edge.from.level) { - edge.to.springFx -= fx; - edge.to.springFy -= fy; - edge.from.springFx += fx; - edge.from.springFy += fy; + distribution[level].minPos += distribution[level].nodeSpacing; + } } else { - var factor = 0.5; - edge.to.fx -= factor*fx; - edge.to.fy -= factor*fy; - edge.from.fx += factor*fx; - edge.from.fy += factor*fy; + if (node.yFixed) { + node.y = distribution[level].minPos; + node.yFixed = false; + + distribution[level].minPos += distribution[level].nodeSpacing; + } } + this._placeBranchNodes(node.edges,node.id,distribution,node.level); } } } } - // normalize spring forces - var springForce = 1; - var springFx, springFy; - for (i = 0; i < nodeIndices.length; i++) { - var node = nodes[nodeIndices[i]]; - springFx = Math.min(springForce,Math.max(-springForce,node.springFx)); - springFy = Math.min(springForce,Math.max(-springForce,node.springFy)); - - node.fx += springFx; - node.fy += springFy; - } - - // retain energy balance - var totalFx = 0; - var totalFy = 0; - for (i = 0; i < nodeIndices.length; i++) { - var node = nodes[nodeIndices[i]]; - totalFx += node.fx; - totalFy += node.fy; - } - var correctionFx = totalFx / nodeIndices.length; - var correctionFy = totalFy / nodeIndices.length; - - for (i = 0; i < nodeIndices.length; i++) { - var node = nodes[nodeIndices[i]]; - node.fx -= correctionFx; - node.fy -= correctionFy; - } - + // stabilize the system after positioning. This function calls zoomExtent. + this._stabilize(); }; -/***/ }, -/* 70 */ -/***/ function(module, exports, __webpack_require__) { /** - * This function calculates the forces the nodes apply on eachother based on a gravitational model. - * The Barnes Hut method is used to speed up this N-body simulation. + * This function get the distribution of levels based on hubsize * + * @returns {Object} * @private */ - exports._calculateNodeForces = function() { - if (this.constants.physics.barnesHut.gravitationalConstant != 0) { - var node; - var nodes = this.calculationNodes; - var nodeIndices = this.calculationNodeIndices; - var nodeCount = nodeIndices.length; - - this._formBarnesHutTree(nodes,nodeIndices); + exports._getDistribution = function() { + var distribution = {}; + var nodeId, node, level; - var barnesHutTree = this.barnesHutTree; + // we fix Y because the hierarchy is vertical, we fix X so we do not give a node an x position for a second time. + // the fix of X is removed after the x value has been set. + for (nodeId in this.nodes) { + if (this.nodes.hasOwnProperty(nodeId)) { + node = this.nodes[nodeId]; + node.xFixed = true; + node.yFixed = true; + if (this.constants.hierarchicalLayout.direction == "UD" || this.constants.hierarchicalLayout.direction == "DU") { + node.y = this.constants.hierarchicalLayout.levelSeparation*node.level; + } + else { + node.x = this.constants.hierarchicalLayout.levelSeparation*node.level; + } + if (distribution[node.level] === undefined) { + distribution[node.level] = {amount: 0, nodes: {}, minPos:0, nodeSpacing:0}; + } + distribution[node.level].amount += 1; + distribution[node.level].nodes[nodeId] = node; + } + } - // place the nodes one by one recursively - for (var i = 0; i < nodeCount; i++) { - node = nodes[nodeIndices[i]]; - if (node.options.mass > 0) { - // starting with root is irrelevant, it never passes the BarnesHut condition - this._getForceContribution(barnesHutTree.root.children.NW,node); - this._getForceContribution(barnesHutTree.root.children.NE,node); - this._getForceContribution(barnesHutTree.root.children.SW,node); - this._getForceContribution(barnesHutTree.root.children.SE,node); + // determine the largest amount of nodes of all levels + var maxCount = 0; + for (level in distribution) { + if (distribution.hasOwnProperty(level)) { + if (maxCount < distribution[level].amount) { + maxCount = distribution[level].amount; } } } + + // set the initial position and spacing of each nodes accordingly + for (level in distribution) { + if (distribution.hasOwnProperty(level)) { + distribution[level].nodeSpacing = (maxCount + 1) * this.constants.hierarchicalLayout.nodeSpacing; + distribution[level].nodeSpacing /= (distribution[level].amount + 1); + distribution[level].minPos = distribution[level].nodeSpacing - (0.5 * (distribution[level].amount + 1) * distribution[level].nodeSpacing); + } + } + + return distribution; }; /** - * This function traverses the barnesHutTree. It checks when it can approximate distant nodes with their center of mass. - * If a region contains a single node, we check if it is not itself, then we apply the force. + * this function allocates nodes in levels based on the recursive branching from the largest hubs. * - * @param parentBranch - * @param node + * @param hubsize * @private */ - exports._getForceContribution = function(parentBranch,node) { - // we get no force contribution from an empty region - if (parentBranch.childrenCount > 0) { - var dx,dy,distance; - - // get the distance from the center of mass to the node. - dx = parentBranch.centerOfMass.x - node.x; - dy = parentBranch.centerOfMass.y - node.y; - distance = Math.sqrt(dx * dx + dy * dy); + exports._determineLevels = function(hubsize) { + var nodeId, node; - // BarnesHut condition - // original condition : s/d < theta = passed === d/s > 1/theta = passed - // calcSize = 1/s --> d * 1/s > 1/theta = passed - if (distance * parentBranch.calcSize > this.constants.physics.barnesHut.theta) { - // duplicate code to reduce function calls to speed up program - if (distance == 0) { - distance = 0.1*Math.random(); - dx = distance; + // determine hubs + for (nodeId in this.nodes) { + if (this.nodes.hasOwnProperty(nodeId)) { + node = this.nodes[nodeId]; + if (node.edges.length == hubsize) { + node.level = 0; } - var gravityForce = this.constants.physics.barnesHut.gravitationalConstant * parentBranch.mass * node.options.mass / (distance * distance * distance); - var fx = dx * gravityForce; - var fy = dy * gravityForce; - node.fx += fx; - node.fy += fy; } - else { - // Did not pass the condition, go into children if available - if (parentBranch.childrenCount == 4) { - this._getForceContribution(parentBranch.children.NW,node); - this._getForceContribution(parentBranch.children.NE,node); - this._getForceContribution(parentBranch.children.SW,node); - this._getForceContribution(parentBranch.children.SE,node); - } - else { // parentBranch must have only one node, if it was empty we wouldnt be here - if (parentBranch.children.data.id != node.id) { // if it is not self - // duplicate code to reduce function calls to speed up program - if (distance == 0) { - distance = 0.5*Math.random(); - dx = distance; - } - var gravityForce = this.constants.physics.barnesHut.gravitationalConstant * parentBranch.mass * node.options.mass / (distance * distance * distance); - var fx = dx * gravityForce; - var fy = dy * gravityForce; - node.fx += fx; - node.fy += fy; - } + } + + // branch from hubs + for (nodeId in this.nodes) { + if (this.nodes.hasOwnProperty(nodeId)) { + node = this.nodes[nodeId]; + if (node.level == 0) { + this._setLevel(1,node.edges,node.id); } } } }; /** - * This function constructs the barnesHut tree recursively. It creates the root, splits it and starts placing the nodes. + * this function allocates nodes in levels based on the recursive branching from the largest hubs. * - * @param nodes - * @param nodeIndices + * @param hubsize * @private */ - exports._formBarnesHutTree = function(nodes,nodeIndices) { - var node; - var nodeCount = nodeIndices.length; - - var minX = Number.MAX_VALUE, - minY = Number.MAX_VALUE, - maxX =-Number.MAX_VALUE, - maxY =-Number.MAX_VALUE; + exports._determineLevelsDirected = function() { + var nodeId, node; - // get the range of the nodes - for (var i = 0; i < nodeCount; i++) { - var x = nodes[nodeIndices[i]].x; - var y = nodes[nodeIndices[i]].y; - if (nodes[nodeIndices[i]].options.mass > 0) { - if (x < minX) { minX = x; } - if (x > maxX) { maxX = x; } - if (y < minY) { minY = y; } - if (y > maxY) { maxY = y; } + // set first node to source + for (nodeId in this.nodes) { + if (this.nodes.hasOwnProperty(nodeId)) { + this.nodes[nodeId].level = 10000; + break; } } - // make the range a square - var sizeDiff = Math.abs(maxX - minX) - Math.abs(maxY - minY); // difference between X and Y - if (sizeDiff > 0) {minY -= 0.5 * sizeDiff; maxY += 0.5 * sizeDiff;} // xSize > ySize - else {minX += 0.5 * sizeDiff; maxX -= 0.5 * sizeDiff;} // xSize < ySize + // branch from hubs + for (nodeId in this.nodes) { + if (this.nodes.hasOwnProperty(nodeId)) { + node = this.nodes[nodeId]; + if (node.level == 10000) { + this._setLevelDirected(10000,node.edges,node.id); + } + } + } - var minimumTreeSize = 1e-5; - var rootSize = Math.max(minimumTreeSize,Math.abs(maxX - minX)); - var halfRootSize = 0.5 * rootSize; - var centerX = 0.5 * (minX + maxX), centerY = 0.5 * (minY + maxY); - // construct the barnesHutTree - var barnesHutTree = { - root:{ - centerOfMass: {x:0, y:0}, - mass:0, - range: { - minX: centerX-halfRootSize,maxX:centerX+halfRootSize, - minY: centerY-halfRootSize,maxY:centerY+halfRootSize - }, - size: rootSize, - calcSize: 1 / rootSize, - children: { data:null}, - maxWidth: 0, - level: 0, - childrenCount: 4 + // branch from hubs + var minLevel = 10000; + for (nodeId in this.nodes) { + if (this.nodes.hasOwnProperty(nodeId)) { + node = this.nodes[nodeId]; + minLevel = node.level < minLevel ? node.level : minLevel; } - }; - this._splitBranch(barnesHutTree.root); + } - // place the nodes one by one recursively - for (i = 0; i < nodeCount; i++) { - node = nodes[nodeIndices[i]]; - if (node.options.mass > 0) { - this._placeInTree(barnesHutTree.root,node); + // branch from hubs + for (nodeId in this.nodes) { + if (this.nodes.hasOwnProperty(nodeId)) { + node = this.nodes[nodeId]; + node.level -= minLevel; } } - - // make global - this.barnesHutTree = barnesHutTree }; /** - * this updates the mass of a branch. this is increased by adding a node. + * Since hierarchical layout does not support: + * - smooth curves (based on the physics), + * - clustering (based on dynamic node counts) + * + * We disable both features so there will be no problems. * - * @param parentBranch - * @param node * @private */ - exports._updateBranchMass = function(parentBranch, node) { - var totalMass = parentBranch.mass + node.options.mass; - var totalMassInv = 1/totalMass; - - parentBranch.centerOfMass.x = parentBranch.centerOfMass.x * parentBranch.mass + node.x * node.options.mass; - parentBranch.centerOfMass.x *= totalMassInv; - - parentBranch.centerOfMass.y = parentBranch.centerOfMass.y * parentBranch.mass + node.y * node.options.mass; - parentBranch.centerOfMass.y *= totalMassInv; - - parentBranch.mass = totalMass; - var biggestSize = Math.max(Math.max(node.height,node.radius),node.width); - parentBranch.maxWidth = (parentBranch.maxWidth < biggestSize) ? biggestSize : parentBranch.maxWidth; - + exports._changeConstants = function() { + this.constants.clustering.enabled = false; + this.constants.physics.barnesHut.enabled = false; + this.constants.physics.hierarchicalRepulsion.enabled = true; + this._loadSelectedForceSolver(); + if (this.constants.smoothCurves.enabled == true) { + this.constants.smoothCurves.dynamic = false; + } + this._configureSmoothCurves(); }; /** - * determine in which branch the node will be placed. + * This is a recursively called function to enumerate the branches from the largest hubs and place the nodes + * on a X position that ensures there will be no overlap. * - * @param parentBranch - * @param node - * @param skipMassUpdate + * @param edges + * @param parentId + * @param distribution + * @param parentLevel * @private */ - exports._placeInTree = function(parentBranch,node,skipMassUpdate) { - if (skipMassUpdate != true || skipMassUpdate === undefined) { - // update the mass of the branch. - this._updateBranchMass(parentBranch,node); - } - - if (parentBranch.children.NW.range.maxX > node.x) { // in NW or SW - if (parentBranch.children.NW.range.maxY > node.y) { // in NW - this._placeInRegion(parentBranch,node,"NW"); + exports._placeBranchNodes = function(edges, parentId, distribution, parentLevel) { + for (var i = 0; i < edges.length; i++) { + var childNode = null; + if (edges[i].toId == parentId) { + childNode = edges[i].from; } - else { // in SW - this._placeInRegion(parentBranch,node,"SW"); + else { + childNode = edges[i].to; } - } - else { // in NE or SE - if (parentBranch.children.NW.range.maxY > node.y) { // in NE - this._placeInRegion(parentBranch,node,"NE"); + + // if a node is conneceted to another node on the same level (or higher (means lower level))!, this is not handled here. + var nodeMoved = false; + if (this.constants.hierarchicalLayout.direction == "UD" || this.constants.hierarchicalLayout.direction == "DU") { + if (childNode.xFixed && childNode.level > parentLevel) { + childNode.xFixed = false; + childNode.x = distribution[childNode.level].minPos; + nodeMoved = true; + } } - else { // in SE - this._placeInRegion(parentBranch,node,"SE"); + else { + if (childNode.yFixed && childNode.level > parentLevel) { + childNode.yFixed = false; + childNode.y = distribution[childNode.level].minPos; + nodeMoved = true; + } + } + + if (nodeMoved == true) { + distribution[childNode.level].minPos += distribution[childNode.level].nodeSpacing; + if (childNode.edges.length > 1) { + this._placeBranchNodes(childNode.edges,childNode.id,distribution,childNode.level); + } } } }; /** - * actually place the node in a region (or branch) + * this function is called recursively to enumerate the barnches of the largest hubs and give each node a level. * - * @param parentBranch - * @param node - * @param region + * @param level + * @param edges + * @param parentId * @private */ - exports._placeInRegion = function(parentBranch,node,region) { - switch (parentBranch.children[region].childrenCount) { - case 0: // place node here - parentBranch.children[region].children.data = node; - parentBranch.children[region].childrenCount = 1; - this._updateBranchMass(parentBranch.children[region],node); - break; - case 1: // convert into children - // if there are two nodes exactly overlapping (on init, on opening of cluster etc.) - // we move one node a pixel and we do not put it in the tree. - if (parentBranch.children[region].children.data.x == node.x && - parentBranch.children[region].children.data.y == node.y) { - node.x += Math.random(); - node.y += Math.random(); - } - else { - this._splitBranch(parentBranch.children[region]); - this._placeInTree(parentBranch.children[region],node); + exports._setLevel = function(level, edges, parentId) { + for (var i = 0; i < edges.length; i++) { + var childNode = null; + if (edges[i].toId == parentId) { + childNode = edges[i].from; + } + else { + childNode = edges[i].to; + } + if (childNode.level == -1 || childNode.level > level) { + childNode.level = level; + if (childNode.edges.length > 1) { + this._setLevel(level+1, childNode.edges, childNode.id); } - break; - case 4: // place in branch - this._placeInTree(parentBranch.children[region],node); - break; + } } }; /** - * this function splits a branch into 4 sub branches. If the branch contained a node, we place it in the subbranch - * after the split is complete. + * this function is called recursively to enumerate the barnches of the largest hubs and give each node a level. * - * @param parentBranch + * @param level + * @param edges + * @param parentId * @private */ - exports._splitBranch = function(parentBranch) { - // if the branch is shaded with a node, replace the node in the new subset. - var containedNode = null; - if (parentBranch.childrenCount == 1) { - containedNode = parentBranch.children.data; - parentBranch.mass = 0; parentBranch.centerOfMass.x = 0; parentBranch.centerOfMass.y = 0; + exports._setLevelDirected = function(level, edges, parentId) { + this.nodes[parentId].hierarchyEnumerated = true; + for (var i = 0; i < edges.length; i++) { + var childNode = null; + var direction = 1; + if (edges[i].toId == parentId) { + childNode = edges[i].from; + direction = -1; + } + else { + childNode = edges[i].to; + } + if (childNode.level == -1) { + childNode.level = level + direction; + } } - parentBranch.childrenCount = 4; - parentBranch.children.data = null; - this._insertRegion(parentBranch,"NW"); - this._insertRegion(parentBranch,"NE"); - this._insertRegion(parentBranch,"SW"); - this._insertRegion(parentBranch,"SE"); - if (containedNode != null) { - this._placeInTree(parentBranch,containedNode); + for (var i = 0; i < edges.length; i++) { + var childNode = null; + if (edges[i].toId == parentId) {childNode = edges[i].from;} + else {childNode = edges[i].to;} + if (childNode.edges.length > 1 && childNode.hierarchyEnumerated === false) { + this._setLevelDirected(childNode.level, childNode.edges, childNode.id); + } } }; /** - * This function subdivides the region into four new segments. - * Specifically, this inserts a single new segment. - * It fills the children section of the parentBranch + * Unfix nodes * - * @param parentBranch - * @param region - * @param parentRange * @private */ - exports._insertRegion = function(parentBranch, region) { - var minX,maxX,minY,maxY; - var childSize = 0.5 * parentBranch.size; - switch (region) { - case "NW": - minX = parentBranch.range.minX; - maxX = parentBranch.range.minX + childSize; - minY = parentBranch.range.minY; - maxY = parentBranch.range.minY + childSize; - break; - case "NE": - minX = parentBranch.range.minX + childSize; - maxX = parentBranch.range.maxX; - minY = parentBranch.range.minY; - maxY = parentBranch.range.minY + childSize; - break; - case "SW": - minX = parentBranch.range.minX; - maxX = parentBranch.range.minX + childSize; - minY = parentBranch.range.minY + childSize; - maxY = parentBranch.range.maxY; - break; - case "SE": - minX = parentBranch.range.minX + childSize; - maxX = parentBranch.range.maxX; - minY = parentBranch.range.minY + childSize; - maxY = parentBranch.range.maxY; - break; + exports._restoreNodes = function() { + for (var nodeId in this.nodes) { + if (this.nodes.hasOwnProperty(nodeId)) { + this.nodes[nodeId].xFixed = false; + this.nodes[nodeId].yFixed = false; + } } + }; - parentBranch.children[region] = { - centerOfMass:{x:0,y:0}, - mass:0, - range:{minX:minX,maxX:maxX,minY:minY,maxY:maxY}, - size: 0.5 * parentBranch.size, - calcSize: 2 * parentBranch.calcSize, - children: {data:null}, - maxWidth: 0, - level: parentBranch.level+1, - childrenCount: 0 - }; +/***/ }, +/* 70 */ +/***/ function(module, exports, __webpack_require__) { + + // English + exports['en'] = { + edit: 'Edit', + del: 'Delete selected', + back: 'Back', + addNode: 'Add Node', + addEdge: 'Add Edge', + editNode: 'Edit Node', + editEdge: 'Edit Edge', + addDescription: 'Click in an empty space to place a new node.', + edgeDescription: 'Click on a node and drag the edge to another node to connect them.', + editEdgeDescription: 'Click on the control points and drag them to a node to connect to it.', + createEdgeError: 'Cannot link edges to a cluster.', + deleteClusterError: 'Clusters cannot be deleted.' + }; + exports['en_EN'] = exports['en']; + exports['en_US'] = exports['en']; + + // Dutch + exports['nl'] = { + edit: 'Wijzigen', + del: 'Selectie verwijderen', + back: 'Terug', + addNode: 'Node toevoegen', + addEdge: 'Link toevoegen', + editNode: 'Node wijzigen', + editEdge: 'Link wijzigen', + addDescription: 'Klik op een leeg gebied om een nieuwe node te maken.', + edgeDescription: 'Klik op een node en sleep de link naar een andere node om ze te verbinden.', + editEdgeDescription: 'Klik op de verbindingspunten en sleep ze naar een node om daarmee te verbinden.', + createEdgeError: 'Kan geen link maken naar een cluster.', + deleteClusterError: 'Clusters kunnen niet worden verwijderd.' }; + exports['nl_NL'] = exports['nl']; + exports['nl_BE'] = exports['nl']; + +/***/ }, +/* 71 */ +/***/ function(module, exports, __webpack_require__) { /** - * This function is for debugging purposed, it draws the tree. - * - * @param ctx - * @param color - * @private + * Canvas shapes used by Network */ - exports._drawTree = function(ctx,color) { - if (this.barnesHutTree !== undefined) { + if (typeof CanvasRenderingContext2D !== 'undefined') { - ctx.lineWidth = 1; + /** + * Draw a circle shape + */ + CanvasRenderingContext2D.prototype.circle = function(x, y, r) { + this.beginPath(); + this.arc(x, y, r, 0, 2*Math.PI, false); + }; - this._drawBranch(this.barnesHutTree.root,ctx,color); - } - }; + /** + * Draw a square shape + * @param {Number} x horizontal center + * @param {Number} y vertical center + * @param {Number} r size, width and height of the square + */ + CanvasRenderingContext2D.prototype.square = function(x, y, r) { + this.beginPath(); + this.rect(x - r, y - r, r * 2, r * 2); + }; + /** + * Draw a triangle shape + * @param {Number} x horizontal center + * @param {Number} y vertical center + * @param {Number} r radius, half the length of the sides of the triangle + */ + CanvasRenderingContext2D.prototype.triangle = function(x, y, r) { + // http://en.wikipedia.org/wiki/Equilateral_triangle + this.beginPath(); - /** - * This function is for debugging purposes. It draws the branches recursively. - * - * @param branch - * @param ctx - * @param color - * @private - */ - exports._drawBranch = function(branch,ctx,color) { - if (color === undefined) { - color = "#FF0000"; - } + var s = r * 2; + var s2 = s / 2; + var ir = Math.sqrt(3) / 6 * s; // radius of inner circle + var h = Math.sqrt(s * s - s2 * s2); // height - if (branch.childrenCount == 4) { - this._drawBranch(branch.children.NW,ctx); - this._drawBranch(branch.children.NE,ctx); - this._drawBranch(branch.children.SE,ctx); - this._drawBranch(branch.children.SW,ctx); - } - ctx.strokeStyle = color; - ctx.beginPath(); - ctx.moveTo(branch.range.minX,branch.range.minY); - ctx.lineTo(branch.range.maxX,branch.range.minY); - ctx.stroke(); + this.moveTo(x, y - (h - ir)); + this.lineTo(x + s2, y + ir); + this.lineTo(x - s2, y + ir); + this.lineTo(x, y - (h - ir)); + this.closePath(); + }; - ctx.beginPath(); - ctx.moveTo(branch.range.maxX,branch.range.minY); - ctx.lineTo(branch.range.maxX,branch.range.maxY); - ctx.stroke(); + /** + * Draw a triangle shape in downward orientation + * @param {Number} x horizontal center + * @param {Number} y vertical center + * @param {Number} r radius + */ + CanvasRenderingContext2D.prototype.triangleDown = function(x, y, r) { + // http://en.wikipedia.org/wiki/Equilateral_triangle + this.beginPath(); - ctx.beginPath(); - ctx.moveTo(branch.range.maxX,branch.range.maxY); - ctx.lineTo(branch.range.minX,branch.range.maxY); - ctx.stroke(); + var s = r * 2; + var s2 = s / 2; + var ir = Math.sqrt(3) / 6 * s; // radius of inner circle + var h = Math.sqrt(s * s - s2 * s2); // height - ctx.beginPath(); - ctx.moveTo(branch.range.minX,branch.range.maxY); - ctx.lineTo(branch.range.minX,branch.range.minY); - ctx.stroke(); + this.moveTo(x, y + (h - ir)); + this.lineTo(x + s2, y - ir); + this.lineTo(x - s2, y - ir); + this.lineTo(x, y + (h - ir)); + this.closePath(); + }; - /* - if (branch.mass > 0) { - ctx.circle(branch.centerOfMass.x, branch.centerOfMass.y, 3*branch.mass); - ctx.stroke(); - } + /** + * Draw a star shape, a star with 5 points + * @param {Number} x horizontal center + * @param {Number} y vertical center + * @param {Number} r radius, half the length of the sides of the triangle */ - }; + CanvasRenderingContext2D.prototype.star = function(x, y, r) { + // http://www.html5canvastutorials.com/labs/html5-canvas-star-spinner/ + this.beginPath(); + for (var n = 0; n < 10; n++) { + var radius = (n % 2 === 0) ? r * 1.3 : r * 0.5; + this.lineTo( + x + radius * Math.sin(n * 2 * Math.PI / 10), + y - radius * Math.cos(n * 2 * Math.PI / 10) + ); + } -/***/ }, -/* 71 */ -/***/ function(module, exports, __webpack_require__) { + this.closePath(); + }; - module.exports = function(module) { - if(!module.webpackPolyfill) { - module.deprecate = function() {}; - module.paths = []; - // module.parent = undefined by default - module.children = []; - module.webpackPolyfill = 1; - } - return module; + /** + * http://stackoverflow.com/questions/1255512/how-to-draw-a-rounded-rectangle-on-html-canvas + */ + CanvasRenderingContext2D.prototype.roundRect = function(x, y, w, h, r) { + var r2d = Math.PI/180; + if( w - ( 2 * r ) < 0 ) { r = ( w / 2 ); } //ensure that the radius isn't too large for x + if( h - ( 2 * r ) < 0 ) { r = ( h / 2 ); } //ensure that the radius isn't too large for y + this.beginPath(); + this.moveTo(x+r,y); + this.lineTo(x+w-r,y); + this.arc(x+w-r,y+r,r,r2d*270,r2d*360,false); + this.lineTo(x+w,y+h-r); + this.arc(x+w-r,y+h-r,r,0,r2d*90,false); + this.lineTo(x+r,y+h); + this.arc(x+r,y+h-r,r,r2d*90,r2d*180,false); + this.lineTo(x,y+r); + this.arc(x+r,y+r,r,r2d*180,r2d*270,false); + }; + + /** + * http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas + */ + CanvasRenderingContext2D.prototype.ellipse = function(x, y, w, h) { + var kappa = .5522848, + ox = (w / 2) * kappa, // control point offset horizontal + oy = (h / 2) * kappa, // control point offset vertical + xe = x + w, // x-end + ye = y + h, // y-end + xm = x + w / 2, // x-middle + ym = y + h / 2; // y-middle + + this.beginPath(); + this.moveTo(x, ym); + this.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y); + this.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym); + this.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye); + this.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym); + }; + + + + /** + * http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas + */ + CanvasRenderingContext2D.prototype.database = function(x, y, w, h) { + var f = 1/3; + var wEllipse = w; + var hEllipse = h * f; + + var kappa = .5522848, + ox = (wEllipse / 2) * kappa, // control point offset horizontal + oy = (hEllipse / 2) * kappa, // control point offset vertical + xe = x + wEllipse, // x-end + ye = y + hEllipse, // y-end + xm = x + wEllipse / 2, // x-middle + ym = y + hEllipse / 2, // y-middle + ymb = y + (h - hEllipse/2), // y-midlle, bottom ellipse + yeb = y + h; // y-end, bottom ellipse + + this.beginPath(); + this.moveTo(xe, ym); + + this.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye); + this.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym); + + this.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y); + this.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym); + + this.lineTo(xe, ymb); + + this.bezierCurveTo(xe, ymb + oy, xm + ox, yeb, xm, yeb); + this.bezierCurveTo(xm - ox, yeb, x, ymb + oy, x, ymb); + + this.lineTo(x, ym); + }; + + + /** + * Draw an arrow point (no line) + */ + CanvasRenderingContext2D.prototype.arrow = function(x, y, angle, length) { + // tail + var xt = x - length * Math.cos(angle); + var yt = y - length * Math.sin(angle); + + // inner tail + // TODO: allow to customize different shapes + var xi = x - length * 0.9 * Math.cos(angle); + var yi = y - length * 0.9 * Math.sin(angle); + + // left + var xl = xt + length / 3 * Math.cos(angle + 0.5 * Math.PI); + var yl = yt + length / 3 * Math.sin(angle + 0.5 * Math.PI); + + // right + var xr = xt + length / 3 * Math.cos(angle - 0.5 * Math.PI); + var yr = yt + length / 3 * Math.sin(angle - 0.5 * Math.PI); + + this.beginPath(); + this.moveTo(x, y); + this.lineTo(xl, yl); + this.lineTo(xi, yi); + this.lineTo(xr, yr); + this.closePath(); + }; + + /** + * Sets up the dashedLine functionality for drawing + * Original code came from http://stackoverflow.com/questions/4576724/dotted-stroke-in-canvas + * @author David Jordan + * @date 2012-08-08 + */ + CanvasRenderingContext2D.prototype.dashedLine = function(x,y,x2,y2,dashArray){ + if (!dashArray) dashArray=[10,5]; + if (dashLength==0) dashLength = 0.001; // Hack for Safari + var dashCount = dashArray.length; + this.moveTo(x, y); + var dx = (x2-x), dy = (y2-y); + var slope = dy/dx; + var distRemaining = Math.sqrt( dx*dx + dy*dy ); + var dashIndex=0, draw=true; + while (distRemaining>=0.1){ + var dashLength = dashArray[dashIndex++%dashCount]; + if (dashLength > distRemaining) dashLength = distRemaining; + var xStep = Math.sqrt( dashLength*dashLength / (1 + slope*slope) ); + if (dx<0) xStep = -xStep; + x += xStep; + y += slope*xStep; + this[draw ? 'lineTo' : 'moveTo'](x,y); + distRemaining -= dashLength; + draw = !draw; + } + }; + + // TODO: add diamond shape } diff --git a/examples/graph2d/01_basic.html b/examples/graph2d/01_basic.html index f878d25c..7e8ee46f 100644 --- a/examples/graph2d/01_basic.html +++ b/examples/graph2d/01_basic.html @@ -47,7 +47,7 @@ end: '2014-06-18' }; var graph2d = new vis.Graph2d(container, dataset, options); - + graph2d.fit(); \ No newline at end of file diff --git a/lib/timeline/component/LineGraph.js b/lib/timeline/component/LineGraph.js index d10bb17d..b2fa0807 100644 --- a/lib/timeline/component/LineGraph.js +++ b/lib/timeline/component/LineGraph.js @@ -549,7 +549,7 @@ LineGraph.prototype.redraw = function(forceGraphUpdate) { resized = this._isResized() || resized; // check whether zoomed (in that case we need to re-stack everything) var visibleInterval = this.body.range.end - this.body.range.start; - //var zoomed = (visibleInterval != this.lastVisibleInterval) || (this.width != this.lastWidth); // we get this from the range changed event + var zoomed = (visibleInterval != this.lastVisibleInterval) || (this.width != this.lastWidth); // we get this from the range changed event this.lastVisibleInterval = visibleInterval; this.lastWidth = this.width; @@ -563,7 +563,8 @@ LineGraph.prototype.redraw = function(forceGraphUpdate) { this.svg.style.left = util.option.asSize(-this.width); } - if (this.abortedGraphUpdate == true || forceGraphUpdate == true) { + // zoomed is here to ensure that animations are shown correctly. + if (zoomed == true || this.abortedGraphUpdate == true || forceGraphUpdate == true) { resized = resized || this._updateGraph(); } else { From d399fb18eb5f4de2e401303e7507b45863223a55 Mon Sep 17 00:00:00 2001 From: Alex de Mulder Date: Mon, 22 Dec 2014 12:06:05 +0100 Subject: [PATCH 13/20] removed fit --- examples/graph2d/01_basic.html | 1 - 1 file changed, 1 deletion(-) diff --git a/examples/graph2d/01_basic.html b/examples/graph2d/01_basic.html index 7e8ee46f..8b0510b8 100644 --- a/examples/graph2d/01_basic.html +++ b/examples/graph2d/01_basic.html @@ -47,7 +47,6 @@ end: '2014-06-18' }; var graph2d = new vis.Graph2d(container, dataset, options); - graph2d.fit(); \ No newline at end of file From cac743a3d3aa120265e0a6bec34c58f8064c7a8f Mon Sep 17 00:00:00 2001 From: Alex de Mulder Date: Mon, 22 Dec 2014 16:22:02 +0100 Subject: [PATCH 14/20] - added show major/minor lines options to dataAxis and timeline --- HISTORY.md | 2 + dist/vis.js | 1350 ++++++++++++++------------- docs/graph2d.html | 28 + docs/timeline.html | 17 + examples/graph2d/01_basic.html | 2 +- lib/timeline/component/DataAxis.js | 10 +- lib/timeline/component/LineGraph.js | 2 + lib/timeline/component/TimeAxis.js | 10 +- 8 files changed, 746 insertions(+), 675 deletions(-) diff --git a/HISTORY.md b/HISTORY.md index 8ca7c259..fcf886d0 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -11,10 +11,12 @@ http://visjs.org ### Graph2d - Fixed round-off errors of zero on the y-axis. +- added show major/minor lines options to dataAxis. ### Timeline - Support for custom date formatting of the labels on the time axis. +- added show major/minor lines options to timeline. ## 2014-12-09, version 3.7.2 diff --git a/dist/vis.js b/dist/vis.js index efbe3065..4bbeb840 100644 --- a/dist/vis.js +++ b/dist/vis.js @@ -106,7 +106,7 @@ return /******/ (function(modules) { // webpackBootstrap exports.Graph2d = __webpack_require__(42); exports.timeline = { DateUtil: __webpack_require__(24), - DataStep: __webpack_require__(44), + DataStep: __webpack_require__(50), Range: __webpack_require__(21), stack: __webpack_require__(28), TimeStep: __webpack_require__(38), @@ -123,12 +123,12 @@ return /******/ (function(modules) { // webpackBootstrap Component: __webpack_require__(23), CurrentTime: __webpack_require__(39), CustomTime: __webpack_require__(41), - DataAxis: __webpack_require__(45), - GraphGroup: __webpack_require__(46), + DataAxis: __webpack_require__(44), + GraphGroup: __webpack_require__(45), Group: __webpack_require__(27), BackgroundGroup: __webpack_require__(31), ItemSet: __webpack_require__(26), - Legend: __webpack_require__(50), + Legend: __webpack_require__(49), LineGraph: __webpack_require__(43), TimeAxis: __webpack_require__(37) } @@ -18069,6 +18069,8 @@ return /******/ (function(modules) { // webpackBootstrap // TODO: implement timeaxis orientations 'left' and 'right' showMinorLabels: true, showMajorLabels: true, + showMajorLines: true, + showMinorLines: true, format: null }; this.options = util.extend({}, this.defaultOptions); @@ -18094,7 +18096,7 @@ return /******/ (function(modules) { // webpackBootstrap TimeAxis.prototype.setOptions = function(options) { if (options) { // copy all options that we know - util.selectiveExtend(['orientation', 'showMinorLabels', 'showMajorLabels','hiddenDates', 'format'], this.options, options); + util.selectiveExtend(['orientation', 'showMinorLabels', 'showMajorLabels', 'showMinorLines', 'showMajorLines','hiddenDates', 'format'], this.options, options); // apply locale to moment.js // TODO: not so nice, this is applied globally to moment.js @@ -18253,9 +18255,11 @@ return /******/ (function(modules) { // webpackBootstrap } this._repaintMajorText(x, step.getLabelMajor(), orientation); } - this._repaintMajorLine(x, orientation); + if (this.options.showMajorLines == true) { + this._repaintMajorLine(x, orientation); + } } - else { + else if (this.options.showMinorLines == true) { this._repaintMinorLine(x, orientation); } @@ -19631,10 +19635,10 @@ return /******/ (function(modules) { // webpackBootstrap var DataSet = __webpack_require__(7); var DataView = __webpack_require__(9); var Component = __webpack_require__(23); - var DataAxis = __webpack_require__(45); - var GraphGroup = __webpack_require__(46); - var Legend = __webpack_require__(50); - var BarGraphFunctions = __webpack_require__(49); + var DataAxis = __webpack_require__(44); + var GraphGroup = __webpack_require__(45); + var Legend = __webpack_require__(49); + var BarGraphFunctions = __webpack_require__(48); var UNGROUPED = '__ungrouped__'; // reserved group id for ungrouped items @@ -19678,6 +19682,8 @@ return /******/ (function(modules) { // webpackBootstrap dataAxis: { showMinorLabels: true, showMajorLabels: true, + showMinorLines: true, + showMajorLines: true, icons: false, width: '40px', visible: true, @@ -20618,582 +20624,305 @@ return /******/ (function(modules) { // webpackBootstrap /* 44 */ /***/ function(module, exports, __webpack_require__) { + var util = __webpack_require__(1); + var DOMutil = __webpack_require__(6); + var Component = __webpack_require__(23); + var DataStep = __webpack_require__(50); + /** - * @constructor DataStep - * The class DataStep is an iterator for data for the lineGraph. You provide a start data point and an - * end data point. The class itself determines the best scale (step size) based on the - * provided start Date, end Date, and minimumStep. - * - * If minimumStep is provided, the step size is chosen as close as possible - * to the minimumStep but larger than minimumStep. If minimumStep is not - * provided, the scale is set to 1 DAY. - * The minimumStep should correspond with the onscreen size of about 6 characters - * - * Alternatively, you can set a scale by hand. - * After creation, you can initialize the class by executing first(). Then you - * can iterate from the start date to the end date via next(). You can check if - * the end date is reached with the function hasNext(). After each step, you can - * retrieve the current date via getCurrent(). - * The DataStep has scales ranging from milliseconds, seconds, minutes, hours, - * days, to years. - * - * Version: 1.2 - * - * @param {Date} [start] The start date, for example new Date(2010, 9, 21) - * or new Date(2010, 9, 21, 23, 45, 00) - * @param {Date} [end] The end date - * @param {Number} [minimumStep] Optional. Minimum step size in milliseconds + * A horizontal time axis + * @param {Object} [options] See DataAxis.setOptions for the available + * options. + * @constructor DataAxis + * @extends Component + * @param body */ - function DataStep(start, end, minimumStep, containerHeight, customRange, alignZeros) { - // variables - this.current = 0; + function DataAxis (body, options, svg, linegraphOptions) { + this.id = util.randomUUID(); + this.body = body; - this.autoScale = true; - this.stepIndex = 0; - this.step = 1; - this.scale = 1; + this.defaultOptions = { + orientation: 'left', // supported: 'left', 'right' + showMinorLabels: true, + showMajorLabels: true, + showMinorLines: true, + showMajorLines: true, + icons: true, + majorLinesOffset: 7, + minorLinesOffset: 4, + labelOffsetX: 10, + labelOffsetY: 2, + iconWidth: 20, + width: '40px', + visible: true, + alignZeros: true, + customRange: { + left: {min:undefined, max:undefined}, + right: {min:undefined, max:undefined} + }, + title: { + left: {text:undefined}, + right: {text:undefined} + }, + format: { + left: {decimals: undefined}, + right: {decimals: undefined} + } + }; - this.marginStart; - this.marginEnd; - this.deadSpace = 0; + this.linegraphOptions = linegraphOptions; + this.linegraphSVG = svg; + this.props = {}; + this.DOMelements = { // dynamic elements + lines: {}, + labels: {}, + title: {} + }; - this.majorSteps = [1, 2, 5, 10]; - this.minorSteps = [0.25, 0.5, 1, 2]; + this.dom = {}; - this.alignZeros = alignZeros; + this.range = {start:0, end:0}; - this.setRange(start, end, minimumStep, containerHeight, customRange); - } + this.options = util.extend({}, this.defaultOptions); + this.conversionFactor = 1; + this.setOptions(options); + this.width = Number(('' + this.options.width).replace("px","")); + this.minWidth = this.width; + this.height = this.linegraphSVG.offsetHeight; + this.hidden = false; + this.stepPixels = 25; + this.stepPixelsForced = 25; + this.zeroCrossing = -1; - /** - * Set a new range - * If minimumStep is provided, the step size is chosen as close as possible - * to the minimumStep but larger than minimumStep. If minimumStep is not - * provided, the scale is set to 1 DAY. - * The minimumStep should correspond with the onscreen size of about 6 characters - * @param {Number} [start] The start date and time. - * @param {Number} [end] The end date and time. - * @param {Number} [minimumStep] Optional. Minimum step size in milliseconds - */ - DataStep.prototype.setRange = function(start, end, minimumStep, containerHeight, customRange) { - this._start = customRange.min === undefined ? start : customRange.min; - this._end = customRange.max === undefined ? end : customRange.max; + this.lineOffset = 0; + this.master = true; + this.svgElements = {}; + this.iconsRemoved = false; - if (this._start == this._end) { - this._start -= 0.75; - this._end += 1; - } - if (this.autoScale == true) { - this.setMinimumStep(minimumStep, containerHeight); - } + this.groups = {}; + this.amountOfGroups = 0; - this.setFirst(customRange); - }; + // create the HTML DOM + this._create(); - /** - * Automatically determine the scale that bests fits the provided minimum step - * @param {Number} [minimumStep] The minimum step size in milliseconds - */ - DataStep.prototype.setMinimumStep = function(minimumStep, containerHeight) { - // round to floor - var size = this._end - this._start; - var safeSize = size * 1.2; - var minimumStepValue = minimumStep * (safeSize / containerHeight); - var orderOfMagnitude = Math.round(Math.log(safeSize)/Math.LN10); + var me = this; + this.body.emitter.on("verticalDrag", function() { + me.dom.lineContainer.style.top = me.body.domProps.scrollTop + 'px'; + }); + } - var minorStepIdx = -1; - var magnitudefactor = Math.pow(10,orderOfMagnitude); + DataAxis.prototype = new Component(); - var start = 0; - if (orderOfMagnitude < 0) { - start = orderOfMagnitude; - } - var solutionFound = false; - for (var i = start; Math.abs(i) <= Math.abs(orderOfMagnitude); i++) { - magnitudefactor = Math.pow(10,i); - for (var j = 0; j < this.minorSteps.length; j++) { - var stepSize = magnitudefactor * this.minorSteps[j]; - if (stepSize >= minimumStepValue) { - solutionFound = true; - minorStepIdx = j; - break; - } - } - if (solutionFound == true) { - break; - } + DataAxis.prototype.addGroup = function(label, graphOptions) { + if (!this.groups.hasOwnProperty(label)) { + this.groups[label] = graphOptions; } - this.stepIndex = minorStepIdx; - this.scale = magnitudefactor; - this.step = magnitudefactor * this.minorSteps[minorStepIdx]; + this.amountOfGroups += 1; }; + DataAxis.prototype.updateGroup = function(label, graphOptions) { + this.groups[label] = graphOptions; + }; - - /** - * Round the current date to the first minor date value - * This must be executed once when the current date is set to start Date - */ - DataStep.prototype.setFirst = function(customRange) { - if (customRange === undefined) { - customRange = {}; - } - - var niceStart = customRange.min === undefined ? this._start - (this.scale * 2 * this.minorSteps[this.stepIndex]) : customRange.min; - var niceEnd = customRange.max === undefined ? this._end + (this.scale * this.minorSteps[this.stepIndex]) : customRange.max; - - this.marginEnd = customRange.max === undefined ? this.roundToMinor(niceEnd) : customRange.max; - this.marginStart = customRange.min === undefined ? this.roundToMinor(niceStart) : customRange.min; - - // if we need to align the zero's we need to make sure that there is a zero to use. - if (this.alignZeros == true && (this.marginEnd - this.marginStart) % this.step != 0) { - this.marginEnd += this.marginEnd % this.step; + DataAxis.prototype.removeGroup = function(label) { + if (this.groups.hasOwnProperty(label)) { + delete this.groups[label]; + this.amountOfGroups -= 1; } + }; - this.deadSpace = this.roundToMinor(niceEnd) - niceEnd + this.roundToMinor(niceStart) - niceStart; - this.marginRange = this.marginEnd - this.marginStart; + DataAxis.prototype.setOptions = function (options) { + if (options) { + var redraw = false; + if (this.options.orientation != options.orientation && options.orientation !== undefined) { + redraw = true; + } + var fields = [ + 'orientation', + 'showMinorLabels', + 'showMajorLabels', + 'showMajorLines', + 'showMinorLines', + 'icons', + 'majorLinesOffset', + 'minorLinesOffset', + 'labelOffsetX', + 'labelOffsetY', + 'iconWidth', + 'width', + 'visible', + 'customRange', + 'title', + 'format', + 'alignZeros' + ]; + util.selectiveExtend(fields, this.options, options); - this.current = this.marginEnd; - }; + this.minWidth = Number(('' + this.options.width).replace("px","")); - DataStep.prototype.roundToMinor = function(value) { - var rounded = value - (value % (this.scale * this.minorSteps[this.stepIndex])); - if (value % (this.scale * this.minorSteps[this.stepIndex]) > 0.5 * (this.scale * this.minorSteps[this.stepIndex])) { - return rounded + (this.scale * this.minorSteps[this.stepIndex]); - } - else { - return rounded; + if (redraw == true && this.dom.frame) { + this.hide(); + this.show(); + } } - } + }; /** - * Check if the there is a next step - * @return {boolean} true if the current date has not passed the end date + * Create the HTML DOM for the DataAxis */ - DataStep.prototype.hasNext = function () { - return (this.current >= this.marginStart); - }; + DataAxis.prototype._create = function() { + this.dom.frame = document.createElement('div'); + this.dom.frame.style.width = this.options.width; + this.dom.frame.style.height = this.height; - /** - * Do the next step - */ - DataStep.prototype.next = function() { - var prev = this.current; - this.current -= this.step; - - // safety mechanism: if current time is still unchanged, move to the end - if (this.current == prev) { - this.current = this._end; - } - }; + this.dom.lineContainer = document.createElement('div'); + this.dom.lineContainer.style.width = '100%'; + this.dom.lineContainer.style.height = this.height; + this.dom.lineContainer.style.position = 'relative'; - /** - * Do the next step - */ - DataStep.prototype.previous = function() { - this.current += this.step; - this.marginEnd += this.step; - this.marginRange = this.marginEnd - this.marginStart; + // create svg element for graph drawing. + this.svg = document.createElementNS('http://www.w3.org/2000/svg',"svg"); + this.svg.style.position = "absolute"; + this.svg.style.top = '0px'; + this.svg.style.height = '100%'; + this.svg.style.width = '100%'; + this.svg.style.display = "block"; + this.dom.frame.appendChild(this.svg); }; + DataAxis.prototype._redrawGroupIcons = function () { + DOMutil.prepareElements(this.svgElements); + var x; + var iconWidth = this.options.iconWidth; + var iconHeight = 15; + var iconOffset = 4; + var y = iconOffset + 0.5 * iconHeight; - /** - * Get the current datetime - * @return {String} current The current date - */ - DataStep.prototype.getCurrent = function(decimals) { - // prevent round-off errors when close to zero - var current = (Math.abs(this.current) < this.step / 2) ? 0 : this.current; - var toPrecision = '' + Number(current).toPrecision(5); - - // If decimals is specified, then limit or extend the string as required - if(decimals !== undefined && !isNaN(Number(decimals))) { - // If string includes exponent, then we need to add it to the end - var exp = ""; - var index = toPrecision.indexOf("e"); - if(index != -1) { - // Get the exponent - exp = toPrecision.slice(index); - // Remove the exponent in case we need to zero-extend - toPrecision = toPrecision.slice(0, index); - } - index = Math.max(toPrecision.indexOf(","), toPrecision.indexOf(".")); - if(index === -1) { - // No decimal found - if we want decimals, then we need to add it - if(decimals !== 0) { - toPrecision += '.'; - } - // Calculate how long the string should be - index = toPrecision.length + decimals; - } - else if(decimals !== 0) { - // Calculate how long the string should be - accounting for the decimal place - index += decimals + 1; - } - if(index > toPrecision.length) { - // We need to add zeros! - for(var cnt = index - toPrecision.length; cnt > 0; cnt--) { - toPrecision += '0'; - } - } - else { - // we need to remove characters - toPrecision = toPrecision.slice(0, index); - } - // Add the exponent if there is one - toPrecision += exp; + if (this.options.orientation == 'left') { + x = iconOffset; } else { - if (toPrecision.indexOf(",") != -1 || toPrecision.indexOf(".") != -1) { - // If no decimal is specified, and there are decimal places, remove trailing zeros - for (var i = toPrecision.length - 1; i > 0; i--) { - if (toPrecision[i] == "0") { - toPrecision = toPrecision.slice(0, i); - } - else if (toPrecision[i] == "." || toPrecision[i] == ",") { - toPrecision = toPrecision.slice(0, i); - break; - } - else { - break; - } + x = this.width - iconWidth - iconOffset; + } + + for (var groupId in this.groups) { + if (this.groups.hasOwnProperty(groupId)) { + if (this.groups[groupId].visible == true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] == true)) { + this.groups[groupId].drawIcon(x, y, this.svgElements, this.svg, iconWidth, iconHeight); + y += iconHeight + iconOffset; } } } - return toPrecision; + DOMutil.cleanupElements(this.svgElements); + this.iconsRemoved = false; }; - + DataAxis.prototype._cleanupIcons = function() { + if (this.iconsRemoved == false) { + DOMutil.prepareElements(this.svgElements); + DOMutil.cleanupElements(this.svgElements); + this.iconsRemoved = true; + } + } /** - * Snap a date to a rounded value. - * The snap intervals are dependent on the current scale and step. - * @param {Date} date the date to be snapped. - * @return {Date} snappedDate + * Create the HTML DOM for the DataAxis */ - DataStep.prototype.snap = function(date) { + DataAxis.prototype.show = function() { + this.hidden = false; + if (!this.dom.frame.parentNode) { + if (this.options.orientation == 'left') { + this.body.dom.left.appendChild(this.dom.frame); + } + else { + this.body.dom.right.appendChild(this.dom.frame); + } + } + if (!this.dom.lineContainer.parentNode) { + this.body.dom.backgroundHorizontal.appendChild(this.dom.lineContainer); + } }; /** - * Check if the current value is a major value (for example when the step - * is DAY, a major value is each first day of the MONTH) - * @return {boolean} true if current date is major, else false. + * Create the HTML DOM for the DataAxis */ - DataStep.prototype.isMajor = function() { - return (this.current % (this.scale * this.majorSteps[this.stepIndex]) == 0); - }; - - module.exports = DataStep; - + DataAxis.prototype.hide = function() { + this.hidden = true; + if (this.dom.frame.parentNode) { + this.dom.frame.parentNode.removeChild(this.dom.frame); + } -/***/ }, -/* 45 */ -/***/ function(module, exports, __webpack_require__) { + if (this.dom.lineContainer.parentNode) { + this.dom.lineContainer.parentNode.removeChild(this.dom.lineContainer); + } + }; - var util = __webpack_require__(1); - var DOMutil = __webpack_require__(6); - var Component = __webpack_require__(23); - var DataStep = __webpack_require__(44); + /** + * Set a range (start and end) + * @param end + * @param start + * @param end + */ + DataAxis.prototype.setRange = function (start, end) { + if (this.master == false && this.options.alignZeros == true && this.zeroCrossing != -1) { + if (start > 0) { + start = 0; + } + } + this.range.start = start; + this.range.end = end; + }; /** - * A horizontal time axis - * @param {Object} [options] See DataAxis.setOptions for the available - * options. - * @constructor DataAxis - * @extends Component - * @param body + * Repaint the component + * @return {boolean} Returns true if the component is resized */ - function DataAxis (body, options, svg, linegraphOptions) { - this.id = util.randomUUID(); - this.body = body; + DataAxis.prototype.redraw = function () { + var changeCalled = false; + var activeGroups = 0; + + // Make sure the line container adheres to the vertical scrolling. + this.dom.lineContainer.style.top = this.body.domProps.scrollTop + 'px'; - this.defaultOptions = { - orientation: 'left', // supported: 'left', 'right' - showMinorLabels: true, - showMajorLabels: true, - icons: true, - majorLinesOffset: 7, - minorLinesOffset: 4, - labelOffsetX: 10, - labelOffsetY: 2, - iconWidth: 20, - width: '40px', - visible: true, - alignZeros: true, - customRange: { - left: {min:undefined, max:undefined}, - right: {min:undefined, max:undefined} - }, - title: { - left: {text:undefined}, - right: {text:undefined} - }, - format: { - left: {decimals: undefined}, - right: {decimals: undefined} + for (var groupId in this.groups) { + if (this.groups.hasOwnProperty(groupId)) { + if (this.groups[groupId].visible == true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] == true)) { + activeGroups++; + } } - }; + } + if (this.amountOfGroups == 0 || activeGroups == 0) { + this.hide(); + } + else { + this.show(); + this.height = Number(this.linegraphSVG.style.height.replace("px","")); - this.linegraphOptions = linegraphOptions; - this.linegraphSVG = svg; - this.props = {}; - this.DOMelements = { // dynamic elements - lines: {}, - labels: {}, - title: {} - }; + // svg offsetheight did not work in firefox and explorer... + this.dom.lineContainer.style.height = this.height + 'px'; + this.width = this.options.visible == true ? Number(('' + this.options.width).replace("px","")) : 0; - this.dom = {}; + var props = this.props; + var frame = this.dom.frame; - this.range = {start:0, end:0}; + // update classname + frame.className = 'dataaxis'; - this.options = util.extend({}, this.defaultOptions); - this.conversionFactor = 1; + // calculate character width and height + this._calculateCharSize(); - this.setOptions(options); - this.width = Number(('' + this.options.width).replace("px","")); - this.minWidth = this.width; - this.height = this.linegraphSVG.offsetHeight; - this.hidden = false; - - this.stepPixels = 25; - this.stepPixelsForced = 25; - this.zeroCrossing = -1; - - this.lineOffset = 0; - this.master = true; - this.svgElements = {}; - this.iconsRemoved = false; - - - this.groups = {}; - this.amountOfGroups = 0; - - // create the HTML DOM - this._create(); - - var me = this; - this.body.emitter.on("verticalDrag", function() { - me.dom.lineContainer.style.top = me.body.domProps.scrollTop + 'px'; - }); - } - - DataAxis.prototype = new Component(); - - - DataAxis.prototype.addGroup = function(label, graphOptions) { - if (!this.groups.hasOwnProperty(label)) { - this.groups[label] = graphOptions; - } - this.amountOfGroups += 1; - }; - - DataAxis.prototype.updateGroup = function(label, graphOptions) { - this.groups[label] = graphOptions; - }; - - DataAxis.prototype.removeGroup = function(label) { - if (this.groups.hasOwnProperty(label)) { - delete this.groups[label]; - this.amountOfGroups -= 1; - } - }; - - - DataAxis.prototype.setOptions = function (options) { - if (options) { - var redraw = false; - if (this.options.orientation != options.orientation && options.orientation !== undefined) { - redraw = true; - } - var fields = [ - 'orientation', - 'showMinorLabels', - 'showMajorLabels', - 'icons', - 'majorLinesOffset', - 'minorLinesOffset', - 'labelOffsetX', - 'labelOffsetY', - 'iconWidth', - 'width', - 'visible', - 'customRange', - 'title', - 'format', - 'alignZeros' - ]; - util.selectiveExtend(fields, this.options, options); - - this.minWidth = Number(('' + this.options.width).replace("px","")); - - if (redraw == true && this.dom.frame) { - this.hide(); - this.show(); - } - } - }; - - - /** - * Create the HTML DOM for the DataAxis - */ - DataAxis.prototype._create = function() { - this.dom.frame = document.createElement('div'); - this.dom.frame.style.width = this.options.width; - this.dom.frame.style.height = this.height; - - this.dom.lineContainer = document.createElement('div'); - this.dom.lineContainer.style.width = '100%'; - this.dom.lineContainer.style.height = this.height; - this.dom.lineContainer.style.position = 'relative'; - - // create svg element for graph drawing. - this.svg = document.createElementNS('http://www.w3.org/2000/svg',"svg"); - this.svg.style.position = "absolute"; - this.svg.style.top = '0px'; - this.svg.style.height = '100%'; - this.svg.style.width = '100%'; - this.svg.style.display = "block"; - this.dom.frame.appendChild(this.svg); - }; - - DataAxis.prototype._redrawGroupIcons = function () { - DOMutil.prepareElements(this.svgElements); - - var x; - var iconWidth = this.options.iconWidth; - var iconHeight = 15; - var iconOffset = 4; - var y = iconOffset + 0.5 * iconHeight; - - if (this.options.orientation == 'left') { - x = iconOffset; - } - else { - x = this.width - iconWidth - iconOffset; - } - - for (var groupId in this.groups) { - if (this.groups.hasOwnProperty(groupId)) { - if (this.groups[groupId].visible == true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] == true)) { - this.groups[groupId].drawIcon(x, y, this.svgElements, this.svg, iconWidth, iconHeight); - y += iconHeight + iconOffset; - } - } - } - - DOMutil.cleanupElements(this.svgElements); - this.iconsRemoved = false; - }; - - DataAxis.prototype._cleanupIcons = function() { - if (this.iconsRemoved == false) { - DOMutil.prepareElements(this.svgElements); - DOMutil.cleanupElements(this.svgElements); - this.iconsRemoved = true; - } - } - - /** - * Create the HTML DOM for the DataAxis - */ - DataAxis.prototype.show = function() { - this.hidden = false; - if (!this.dom.frame.parentNode) { - if (this.options.orientation == 'left') { - this.body.dom.left.appendChild(this.dom.frame); - } - else { - this.body.dom.right.appendChild(this.dom.frame); - } - } - - if (!this.dom.lineContainer.parentNode) { - this.body.dom.backgroundHorizontal.appendChild(this.dom.lineContainer); - } - }; - - /** - * Create the HTML DOM for the DataAxis - */ - DataAxis.prototype.hide = function() { - this.hidden = true; - if (this.dom.frame.parentNode) { - this.dom.frame.parentNode.removeChild(this.dom.frame); - } - - if (this.dom.lineContainer.parentNode) { - this.dom.lineContainer.parentNode.removeChild(this.dom.lineContainer); - } - }; - - /** - * Set a range (start and end) - * @param end - * @param start - * @param end - */ - DataAxis.prototype.setRange = function (start, end) { - if (this.master == false && this.options.alignZeros == true && this.zeroCrossing != -1) { - if (start > 0) { - start = 0; - } - } - this.range.start = start; - this.range.end = end; - }; - - /** - * Repaint the component - * @return {boolean} Returns true if the component is resized - */ - DataAxis.prototype.redraw = function () { - var changeCalled = false; - var activeGroups = 0; - - // Make sure the line container adheres to the vertical scrolling. - this.dom.lineContainer.style.top = this.body.domProps.scrollTop + 'px'; - - for (var groupId in this.groups) { - if (this.groups.hasOwnProperty(groupId)) { - if (this.groups[groupId].visible == true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] == true)) { - activeGroups++; - } - } - } - if (this.amountOfGroups == 0 || activeGroups == 0) { - this.hide(); - } - else { - this.show(); - this.height = Number(this.linegraphSVG.style.height.replace("px","")); - - // svg offsetheight did not work in firefox and explorer... - this.dom.lineContainer.style.height = this.height + 'px'; - this.width = this.options.visible == true ? Number(('' + this.options.width).replace("px","")) : 0; - - var props = this.props; - var frame = this.dom.frame; - - // update classname - frame.className = 'dataaxis'; - - // calculate character width and height - this._calculateCharSize(); - - var orientation = this.options.orientation; - var showMinorLabels = this.options.showMinorLabels; - var showMajorLabels = this.options.showMajorLabels; + var orientation = this.options.orientation; + var showMinorLabels = this.options.showMinorLabels; + var showMajorLabels = this.options.showMajorLabels; // determine the width and height of the elements for the axis props.minorLabelHeight = showMinorLabels ? props.minorCharHeight : 0; @@ -21318,9 +21047,11 @@ return /******/ (function(modules) { // webpackBootstrap if (y >= 0) { this._redrawLabel(y - 2, step.getCurrent(decimals), orientation, 'yAxis major', this.props.majorCharHeight); } - this._redrawLine(y, orientation, 'grid horizontal major', this.options.majorLinesOffset, this.props.majorLineWidth); + if (this.options.showMajorLines == true) { + this._redrawLine(y, orientation, 'grid horizontal major', this.options.majorLinesOffset, this.props.majorLineWidth); + } } - else { + else if (this.options.showMinorLines == true) { this._redrawLine(y, orientation, 'grid horizontal minor', this.options.minorLinesOffset, this.props.minorLineWidth); } @@ -21532,14 +21263,14 @@ return /******/ (function(modules) { // webpackBootstrap /***/ }, -/* 46 */ +/* 45 */ /***/ function(module, exports, __webpack_require__) { var util = __webpack_require__(1); var DOMutil = __webpack_require__(6); - var Line = __webpack_require__(47); - var Bar = __webpack_require__(49); - var Points = __webpack_require__(48); + var Line = __webpack_require__(46); + var Bar = __webpack_require__(48); + var Points = __webpack_require__(47); /** * /** @@ -21737,14 +21468,14 @@ return /******/ (function(modules) { // webpackBootstrap /***/ }, -/* 47 */ +/* 46 */ /***/ function(module, exports, __webpack_require__) { /** * Created by Alex on 11/11/2014. */ var DOMutil = __webpack_require__(6); - var Points = __webpack_require__(48); + var Points = __webpack_require__(47); function Line(groupId, options) { this.groupId = groupId; @@ -21961,7 +21692,7 @@ return /******/ (function(modules) { // webpackBootstrap /***/ }, -/* 48 */ +/* 47 */ /***/ function(module, exports, __webpack_require__) { /** @@ -22009,14 +21740,14 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = Points; /***/ }, -/* 49 */ +/* 48 */ /***/ function(module, exports, __webpack_require__) { /** * Created by Alex on 11/11/2014. */ var DOMutil = __webpack_require__(6); - var Points = __webpack_require__(48); + var Points = __webpack_require__(47); function Bargraph(groupId, options) { this.groupId = groupId; @@ -22243,7 +21974,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = Bargraph; /***/ }, -/* 50 */ +/* 49 */ /***/ function(module, exports, __webpack_require__) { var util = __webpack_require__(1); @@ -22273,183 +22004,464 @@ return /******/ (function(modules) { // webpackBootstrap this.options = util.extend({},this.defaultOptions); this.linegraphOptions = linegraphOptions; - this.svgElements = {}; - this.dom = {}; - this.groups = {}; - this.amountOfGroups = 0; - this._create(); + this.svgElements = {}; + this.dom = {}; + this.groups = {}; + this.amountOfGroups = 0; + this._create(); + + this.setOptions(options); + } + + Legend.prototype = new Component(); + + Legend.prototype.clear = function() { + this.groups = {}; + this.amountOfGroups = 0; + } + + Legend.prototype.addGroup = function(label, graphOptions) { + + if (!this.groups.hasOwnProperty(label)) { + this.groups[label] = graphOptions; + } + this.amountOfGroups += 1; + }; + + Legend.prototype.updateGroup = function(label, graphOptions) { + this.groups[label] = graphOptions; + }; + + Legend.prototype.removeGroup = function(label) { + if (this.groups.hasOwnProperty(label)) { + delete this.groups[label]; + this.amountOfGroups -= 1; + } + }; + + Legend.prototype._create = function() { + this.dom.frame = document.createElement('div'); + this.dom.frame.className = 'legend'; + this.dom.frame.style.position = "absolute"; + this.dom.frame.style.top = "10px"; + this.dom.frame.style.display = "block"; + + this.dom.textArea = document.createElement('div'); + this.dom.textArea.className = 'legendText'; + this.dom.textArea.style.position = "relative"; + this.dom.textArea.style.top = "0px"; + + this.svg = document.createElementNS('http://www.w3.org/2000/svg',"svg"); + this.svg.style.position = 'absolute'; + this.svg.style.top = 0 +'px'; + this.svg.style.width = this.options.iconSize + 5 + 'px'; + this.svg.style.height = '100%'; + + this.dom.frame.appendChild(this.svg); + this.dom.frame.appendChild(this.dom.textArea); + }; + + /** + * Hide the component from the DOM + */ + Legend.prototype.hide = function() { + // remove the frame containing the items + if (this.dom.frame.parentNode) { + this.dom.frame.parentNode.removeChild(this.dom.frame); + } + }; + + /** + * Show the component in the DOM (when not already visible). + * @return {Boolean} changed + */ + Legend.prototype.show = function() { + // show frame containing the items + if (!this.dom.frame.parentNode) { + this.body.dom.center.appendChild(this.dom.frame); + } + }; + + Legend.prototype.setOptions = function(options) { + var fields = ['enabled','orientation','icons','left','right']; + util.selectiveDeepExtend(fields, this.options, options); + }; + + Legend.prototype.redraw = function() { + var activeGroups = 0; + for (var groupId in this.groups) { + if (this.groups.hasOwnProperty(groupId)) { + if (this.groups[groupId].visible == true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] == true)) { + activeGroups++; + } + } + } + + if (this.options[this.side].visible == false || this.amountOfGroups == 0 || this.options.enabled == false || activeGroups == 0) { + this.hide(); + } + else { + this.show(); + if (this.options[this.side].position == 'top-left' || this.options[this.side].position == 'bottom-left') { + this.dom.frame.style.left = '4px'; + this.dom.frame.style.textAlign = "left"; + this.dom.textArea.style.textAlign = "left"; + this.dom.textArea.style.left = (this.options.iconSize + 15) + 'px'; + this.dom.textArea.style.right = ''; + this.svg.style.left = 0 +'px'; + this.svg.style.right = ''; + } + else { + this.dom.frame.style.right = '4px'; + this.dom.frame.style.textAlign = "right"; + this.dom.textArea.style.textAlign = "right"; + this.dom.textArea.style.right = (this.options.iconSize + 15) + 'px'; + this.dom.textArea.style.left = ''; + this.svg.style.right = 0 +'px'; + this.svg.style.left = ''; + } + + if (this.options[this.side].position == 'top-left' || this.options[this.side].position == 'top-right') { + this.dom.frame.style.top = 4 - Number(this.body.dom.center.style.top.replace("px","")) + 'px'; + this.dom.frame.style.bottom = ''; + } + else { + var scrollableHeight = this.body.domProps.center.height - this.body.domProps.centerContainer.height; + this.dom.frame.style.bottom = 4 + scrollableHeight + Number(this.body.dom.center.style.top.replace("px","")) + 'px'; + this.dom.frame.style.top = ''; + } + + if (this.options.icons == false) { + this.dom.frame.style.width = this.dom.textArea.offsetWidth + 10 + 'px'; + this.dom.textArea.style.right = ''; + this.dom.textArea.style.left = ''; + this.svg.style.width = '0px'; + } + else { + this.dom.frame.style.width = this.options.iconSize + 15 + this.dom.textArea.offsetWidth + 10 + 'px' + this.drawLegendIcons(); + } + + var content = ''; + for (var groupId in this.groups) { + if (this.groups.hasOwnProperty(groupId)) { + if (this.groups[groupId].visible == true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] == true)) { + content += this.groups[groupId].content + '
'; + } + } + } + this.dom.textArea.innerHTML = content; + this.dom.textArea.style.lineHeight = ((0.75 * this.options.iconSize) + this.options.iconSpacing) + 'px'; + } + }; + + Legend.prototype.drawLegendIcons = function() { + if (this.dom.frame.parentNode) { + DOMutil.prepareElements(this.svgElements); + var padding = window.getComputedStyle(this.dom.frame).paddingTop; + var iconOffset = Number(padding.replace('px','')); + var x = iconOffset; + var iconWidth = this.options.iconSize; + var iconHeight = 0.75 * this.options.iconSize; + var y = iconOffset + 0.5 * iconHeight + 3; + + this.svg.style.width = iconWidth + 5 + iconOffset + 'px'; + + for (var groupId in this.groups) { + if (this.groups.hasOwnProperty(groupId)) { + if (this.groups[groupId].visible == true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] == true)) { + this.groups[groupId].drawIcon(x, y, this.svgElements, this.svg, iconWidth, iconHeight); + y += iconHeight + this.options.iconSpacing; + } + } + } + + DOMutil.cleanupElements(this.svgElements); + } + }; + + module.exports = Legend; + + +/***/ }, +/* 50 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * @constructor DataStep + * The class DataStep is an iterator for data for the lineGraph. You provide a start data point and an + * end data point. The class itself determines the best scale (step size) based on the + * provided start Date, end Date, and minimumStep. + * + * If minimumStep is provided, the step size is chosen as close as possible + * to the minimumStep but larger than minimumStep. If minimumStep is not + * provided, the scale is set to 1 DAY. + * The minimumStep should correspond with the onscreen size of about 6 characters + * + * Alternatively, you can set a scale by hand. + * After creation, you can initialize the class by executing first(). Then you + * can iterate from the start date to the end date via next(). You can check if + * the end date is reached with the function hasNext(). After each step, you can + * retrieve the current date via getCurrent(). + * The DataStep has scales ranging from milliseconds, seconds, minutes, hours, + * days, to years. + * + * Version: 1.2 + * + * @param {Date} [start] The start date, for example new Date(2010, 9, 21) + * or new Date(2010, 9, 21, 23, 45, 00) + * @param {Date} [end] The end date + * @param {Number} [minimumStep] Optional. Minimum step size in milliseconds + */ + function DataStep(start, end, minimumStep, containerHeight, customRange, alignZeros) { + // variables + this.current = 0; + + this.autoScale = true; + this.stepIndex = 0; + this.step = 1; + this.scale = 1; + + this.marginStart; + this.marginEnd; + this.deadSpace = 0; + + this.majorSteps = [1, 2, 5, 10]; + this.minorSteps = [0.25, 0.5, 1, 2]; + + this.alignZeros = alignZeros; + + this.setRange(start, end, minimumStep, containerHeight, customRange); + } + + + + /** + * Set a new range + * If minimumStep is provided, the step size is chosen as close as possible + * to the minimumStep but larger than minimumStep. If minimumStep is not + * provided, the scale is set to 1 DAY. + * The minimumStep should correspond with the onscreen size of about 6 characters + * @param {Number} [start] The start date and time. + * @param {Number} [end] The end date and time. + * @param {Number} [minimumStep] Optional. Minimum step size in milliseconds + */ + DataStep.prototype.setRange = function(start, end, minimumStep, containerHeight, customRange) { + this._start = customRange.min === undefined ? start : customRange.min; + this._end = customRange.max === undefined ? end : customRange.max; + + if (this._start == this._end) { + this._start -= 0.75; + this._end += 1; + } + + if (this.autoScale == true) { + this.setMinimumStep(minimumStep, containerHeight); + } + + this.setFirst(customRange); + }; + + /** + * Automatically determine the scale that bests fits the provided minimum step + * @param {Number} [minimumStep] The minimum step size in milliseconds + */ + DataStep.prototype.setMinimumStep = function(minimumStep, containerHeight) { + // round to floor + var size = this._end - this._start; + var safeSize = size * 1.2; + var minimumStepValue = minimumStep * (safeSize / containerHeight); + var orderOfMagnitude = Math.round(Math.log(safeSize)/Math.LN10); + + var minorStepIdx = -1; + var magnitudefactor = Math.pow(10,orderOfMagnitude); + + var start = 0; + if (orderOfMagnitude < 0) { + start = orderOfMagnitude; + } + + var solutionFound = false; + for (var i = start; Math.abs(i) <= Math.abs(orderOfMagnitude); i++) { + magnitudefactor = Math.pow(10,i); + for (var j = 0; j < this.minorSteps.length; j++) { + var stepSize = magnitudefactor * this.minorSteps[j]; + if (stepSize >= minimumStepValue) { + solutionFound = true; + minorStepIdx = j; + break; + } + } + if (solutionFound == true) { + break; + } + } + this.stepIndex = minorStepIdx; + this.scale = magnitudefactor; + this.step = magnitudefactor * this.minorSteps[minorStepIdx]; + }; + - this.setOptions(options); - } - Legend.prototype = new Component(); + /** + * Round the current date to the first minor date value + * This must be executed once when the current date is set to start Date + */ + DataStep.prototype.setFirst = function(customRange) { + if (customRange === undefined) { + customRange = {}; + } - Legend.prototype.clear = function() { - this.groups = {}; - this.amountOfGroups = 0; - } + var niceStart = customRange.min === undefined ? this._start - (this.scale * 2 * this.minorSteps[this.stepIndex]) : customRange.min; + var niceEnd = customRange.max === undefined ? this._end + (this.scale * this.minorSteps[this.stepIndex]) : customRange.max; - Legend.prototype.addGroup = function(label, graphOptions) { + this.marginEnd = customRange.max === undefined ? this.roundToMinor(niceEnd) : customRange.max; + this.marginStart = customRange.min === undefined ? this.roundToMinor(niceStart) : customRange.min; - if (!this.groups.hasOwnProperty(label)) { - this.groups[label] = graphOptions; + // if we need to align the zero's we need to make sure that there is a zero to use. + if (this.alignZeros == true && (this.marginEnd - this.marginStart) % this.step != 0) { + this.marginEnd += this.marginEnd % this.step; } - this.amountOfGroups += 1; - }; - Legend.prototype.updateGroup = function(label, graphOptions) { - this.groups[label] = graphOptions; - }; + this.deadSpace = this.roundToMinor(niceEnd) - niceEnd + this.roundToMinor(niceStart) - niceStart; + this.marginRange = this.marginEnd - this.marginStart; - Legend.prototype.removeGroup = function(label) { - if (this.groups.hasOwnProperty(label)) { - delete this.groups[label]; - this.amountOfGroups -= 1; - } - }; - Legend.prototype._create = function() { - this.dom.frame = document.createElement('div'); - this.dom.frame.className = 'legend'; - this.dom.frame.style.position = "absolute"; - this.dom.frame.style.top = "10px"; - this.dom.frame.style.display = "block"; + this.current = this.marginEnd; + }; - this.dom.textArea = document.createElement('div'); - this.dom.textArea.className = 'legendText'; - this.dom.textArea.style.position = "relative"; - this.dom.textArea.style.top = "0px"; + DataStep.prototype.roundToMinor = function(value) { + var rounded = value - (value % (this.scale * this.minorSteps[this.stepIndex])); + if (value % (this.scale * this.minorSteps[this.stepIndex]) > 0.5 * (this.scale * this.minorSteps[this.stepIndex])) { + return rounded + (this.scale * this.minorSteps[this.stepIndex]); + } + else { + return rounded; + } + } - this.svg = document.createElementNS('http://www.w3.org/2000/svg',"svg"); - this.svg.style.position = 'absolute'; - this.svg.style.top = 0 +'px'; - this.svg.style.width = this.options.iconSize + 5 + 'px'; - this.svg.style.height = '100%'; - this.dom.frame.appendChild(this.svg); - this.dom.frame.appendChild(this.dom.textArea); + /** + * Check if the there is a next step + * @return {boolean} true if the current date has not passed the end date + */ + DataStep.prototype.hasNext = function () { + return (this.current >= this.marginStart); }; /** - * Hide the component from the DOM + * Do the next step */ - Legend.prototype.hide = function() { - // remove the frame containing the items - if (this.dom.frame.parentNode) { - this.dom.frame.parentNode.removeChild(this.dom.frame); + DataStep.prototype.next = function() { + var prev = this.current; + this.current -= this.step; + + // safety mechanism: if current time is still unchanged, move to the end + if (this.current == prev) { + this.current = this._end; } }; /** - * Show the component in the DOM (when not already visible). - * @return {Boolean} changed + * Do the next step */ - Legend.prototype.show = function() { - // show frame containing the items - if (!this.dom.frame.parentNode) { - this.body.dom.center.appendChild(this.dom.frame); - } + DataStep.prototype.previous = function() { + this.current += this.step; + this.marginEnd += this.step; + this.marginRange = this.marginEnd - this.marginStart; }; - Legend.prototype.setOptions = function(options) { - var fields = ['enabled','orientation','icons','left','right']; - util.selectiveDeepExtend(fields, this.options, options); - }; - Legend.prototype.redraw = function() { - var activeGroups = 0; - for (var groupId in this.groups) { - if (this.groups.hasOwnProperty(groupId)) { - if (this.groups[groupId].visible == true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] == true)) { - activeGroups++; - } - } - } - if (this.options[this.side].visible == false || this.amountOfGroups == 0 || this.options.enabled == false || activeGroups == 0) { - this.hide(); - } - else { - this.show(); - if (this.options[this.side].position == 'top-left' || this.options[this.side].position == 'bottom-left') { - this.dom.frame.style.left = '4px'; - this.dom.frame.style.textAlign = "left"; - this.dom.textArea.style.textAlign = "left"; - this.dom.textArea.style.left = (this.options.iconSize + 15) + 'px'; - this.dom.textArea.style.right = ''; - this.svg.style.left = 0 +'px'; - this.svg.style.right = ''; - } - else { - this.dom.frame.style.right = '4px'; - this.dom.frame.style.textAlign = "right"; - this.dom.textArea.style.textAlign = "right"; - this.dom.textArea.style.right = (this.options.iconSize + 15) + 'px'; - this.dom.textArea.style.left = ''; - this.svg.style.right = 0 +'px'; - this.svg.style.left = ''; - } + /** + * Get the current datetime + * @return {String} current The current date + */ + DataStep.prototype.getCurrent = function(decimals) { + // prevent round-off errors when close to zero + var current = (Math.abs(this.current) < this.step / 2) ? 0 : this.current; + var toPrecision = '' + Number(current).toPrecision(5); - if (this.options[this.side].position == 'top-left' || this.options[this.side].position == 'top-right') { - this.dom.frame.style.top = 4 - Number(this.body.dom.center.style.top.replace("px","")) + 'px'; - this.dom.frame.style.bottom = ''; + // If decimals is specified, then limit or extend the string as required + if(decimals !== undefined && !isNaN(Number(decimals))) { + // If string includes exponent, then we need to add it to the end + var exp = ""; + var index = toPrecision.indexOf("e"); + if(index != -1) { + // Get the exponent + exp = toPrecision.slice(index); + // Remove the exponent in case we need to zero-extend + toPrecision = toPrecision.slice(0, index); } - else { - var scrollableHeight = this.body.domProps.center.height - this.body.domProps.centerContainer.height; - this.dom.frame.style.bottom = 4 + scrollableHeight + Number(this.body.dom.center.style.top.replace("px","")) + 'px'; - this.dom.frame.style.top = ''; + index = Math.max(toPrecision.indexOf(","), toPrecision.indexOf(".")); + if(index === -1) { + // No decimal found - if we want decimals, then we need to add it + if(decimals !== 0) { + toPrecision += '.'; + } + // Calculate how long the string should be + index = toPrecision.length + decimals; } - - if (this.options.icons == false) { - this.dom.frame.style.width = this.dom.textArea.offsetWidth + 10 + 'px'; - this.dom.textArea.style.right = ''; - this.dom.textArea.style.left = ''; - this.svg.style.width = '0px'; + else if(decimals !== 0) { + // Calculate how long the string should be - accounting for the decimal place + index += decimals + 1; + } + if(index > toPrecision.length) { + // We need to add zeros! + for(var cnt = index - toPrecision.length; cnt > 0; cnt--) { + toPrecision += '0'; + } } else { - this.dom.frame.style.width = this.options.iconSize + 15 + this.dom.textArea.offsetWidth + 10 + 'px' - this.drawLegendIcons(); + // we need to remove characters + toPrecision = toPrecision.slice(0, index); } - - var content = ''; - for (var groupId in this.groups) { - if (this.groups.hasOwnProperty(groupId)) { - if (this.groups[groupId].visible == true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] == true)) { - content += this.groups[groupId].content + '
'; + // Add the exponent if there is one + toPrecision += exp; + } + else { + if (toPrecision.indexOf(",") != -1 || toPrecision.indexOf(".") != -1) { + // If no decimal is specified, and there are decimal places, remove trailing zeros + for (var i = toPrecision.length - 1; i > 0; i--) { + if (toPrecision[i] == "0") { + toPrecision = toPrecision.slice(0, i); + } + else if (toPrecision[i] == "." || toPrecision[i] == ",") { + toPrecision = toPrecision.slice(0, i); + break; + } + else { + break; } } } - this.dom.textArea.innerHTML = content; - this.dom.textArea.style.lineHeight = ((0.75 * this.options.iconSize) + this.options.iconSpacing) + 'px'; } + + return toPrecision; }; - Legend.prototype.drawLegendIcons = function() { - if (this.dom.frame.parentNode) { - DOMutil.prepareElements(this.svgElements); - var padding = window.getComputedStyle(this.dom.frame).paddingTop; - var iconOffset = Number(padding.replace('px','')); - var x = iconOffset; - var iconWidth = this.options.iconSize; - var iconHeight = 0.75 * this.options.iconSize; - var y = iconOffset + 0.5 * iconHeight + 3; - this.svg.style.width = iconWidth + 5 + iconOffset + 'px'; - for (var groupId in this.groups) { - if (this.groups.hasOwnProperty(groupId)) { - if (this.groups[groupId].visible == true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] == true)) { - this.groups[groupId].drawIcon(x, y, this.svgElements, this.svg, iconWidth, iconHeight); - y += iconHeight + this.options.iconSpacing; - } - } - } + /** + * Snap a date to a rounded value. + * The snap intervals are dependent on the current scale and step. + * @param {Date} date the date to be snapped. + * @return {Date} snappedDate + */ + DataStep.prototype.snap = function(date) { - DOMutil.cleanupElements(this.svgElements); - } }; - module.exports = Legend; + /** + * Check if the current value is a major value (for example when the step + * is DAY, a major value is each first day of the MONTH) + * @return {boolean} true if current date is major, else false. + */ + DataStep.prototype.isMajor = function() { + return (this.current % (this.scale * this.majorSteps[this.stepIndex]) == 0); + }; + + module.exports = DataStep; /***/ }, diff --git a/docs/graph2d.html b/docs/graph2d.html index 05ab0579..bcab9602 100644 --- a/docs/graph2d.html +++ b/docs/graph2d.html @@ -452,6 +452,18 @@ The options colored in green can also be used as options for the groups. All opt true Toggle the drawing of the major labels on the Y axis. + + dataAxis.showMajorLines + Boolean + true + Toggle the drawing of the major lines on the Y axis. + + + dataAxis.showMinorLines + Boolean + true + Toggle the drawing of the major lines on the Y axis. + dataAxis.icons Boolean @@ -713,6 +725,22 @@ The options colored in green can also be used as options for the groups. All opt visible. + + showMajorLines + boolean + true + By default, the timeline shows both minor and major date lines on the + time axis. You can use this option to hide the lines from the major dates. + + + + showMinorLines + boolean + true + By default, the timeline shows both minor and major date lines on the + time axis. You can use this option to hide the lines from the minor dates. + + start Date | Number | String diff --git a/docs/timeline.html b/docs/timeline.html index 72b2a3b8..d537db95 100644 --- a/docs/timeline.html +++ b/docs/timeline.html @@ -743,6 +743,23 @@ var options = { visible. + + + showMajorLines + boolean + true + By default, the timeline shows both minor and major date lines on the + time axis. You can use this option to hide the lines from the major dates. + + + + showMinorLines + boolean + true + By default, the timeline shows both minor and major date lines on the + time axis. You can use this option to hide the lines from the minor dates. + + stack Boolean diff --git a/examples/graph2d/01_basic.html b/examples/graph2d/01_basic.html index 8b0510b8..84565a9e 100644 --- a/examples/graph2d/01_basic.html +++ b/examples/graph2d/01_basic.html @@ -44,7 +44,7 @@ var dataset = new vis.DataSet(items); var options = { start: '2014-06-10', - end: '2014-06-18' + end: '2014-06-18', }; var graph2d = new vis.Graph2d(container, dataset, options); diff --git a/lib/timeline/component/DataAxis.js b/lib/timeline/component/DataAxis.js index 0c23f416..5ff846bd 100644 --- a/lib/timeline/component/DataAxis.js +++ b/lib/timeline/component/DataAxis.js @@ -19,6 +19,8 @@ function DataAxis (body, options, svg, linegraphOptions) { orientation: 'left', // supported: 'left', 'right' showMinorLabels: true, showMajorLabels: true, + showMinorLines: true, + showMajorLines: true, icons: true, majorLinesOffset: 7, minorLinesOffset: 4, @@ -118,6 +120,8 @@ DataAxis.prototype.setOptions = function (options) { 'orientation', 'showMinorLabels', 'showMajorLabels', + 'showMajorLines', + 'showMinorLines', 'icons', 'majorLinesOffset', 'minorLinesOffset', @@ -417,9 +421,11 @@ DataAxis.prototype._redrawLabels = function () { if (y >= 0) { this._redrawLabel(y - 2, step.getCurrent(decimals), orientation, 'yAxis major', this.props.majorCharHeight); } - this._redrawLine(y, orientation, 'grid horizontal major', this.options.majorLinesOffset, this.props.majorLineWidth); + if (this.options.showMajorLines == true) { + this._redrawLine(y, orientation, 'grid horizontal major', this.options.majorLinesOffset, this.props.majorLineWidth); + } } - else { + else if (this.options.showMinorLines == true) { this._redrawLine(y, orientation, 'grid horizontal minor', this.options.minorLinesOffset, this.props.minorLineWidth); } diff --git a/lib/timeline/component/LineGraph.js b/lib/timeline/component/LineGraph.js index b2fa0807..19d6f421 100644 --- a/lib/timeline/component/LineGraph.js +++ b/lib/timeline/component/LineGraph.js @@ -50,6 +50,8 @@ function LineGraph(body, options) { dataAxis: { showMinorLabels: true, showMajorLabels: true, + showMinorLines: true, + showMajorLines: true, icons: false, width: '40px', visible: true, diff --git a/lib/timeline/component/TimeAxis.js b/lib/timeline/component/TimeAxis.js index de6fd7b5..f0622f6f 100644 --- a/lib/timeline/component/TimeAxis.js +++ b/lib/timeline/component/TimeAxis.js @@ -40,6 +40,8 @@ function TimeAxis (body, options) { // TODO: implement timeaxis orientations 'left' and 'right' showMinorLabels: true, showMajorLabels: true, + showMajorLines: true, + showMinorLines: true, format: null }; this.options = util.extend({}, this.defaultOptions); @@ -65,7 +67,7 @@ TimeAxis.prototype = new Component(); TimeAxis.prototype.setOptions = function(options) { if (options) { // copy all options that we know - util.selectiveExtend(['orientation', 'showMinorLabels', 'showMajorLabels','hiddenDates', 'format'], this.options, options); + util.selectiveExtend(['orientation', 'showMinorLabels', 'showMajorLabels', 'showMinorLines', 'showMajorLines','hiddenDates', 'format'], this.options, options); // apply locale to moment.js // TODO: not so nice, this is applied globally to moment.js @@ -224,9 +226,11 @@ TimeAxis.prototype._repaintLabels = function () { } this._repaintMajorText(x, step.getLabelMajor(), orientation); } - this._repaintMajorLine(x, orientation); + if (this.options.showMajorLines == true) { + this._repaintMajorLine(x, orientation); + } } - else { + else if (this.options.showMinorLines == true) { this._repaintMinorLine(x, orientation); } From 4b35e18c700b70d04c24cbd26de31dc2152b0ff6 Mon Sep 17 00:00:00 2001 From: Alex de Mulder Date: Tue, 23 Dec 2014 11:23:25 +0100 Subject: [PATCH 15/20] - Fixed recursion error with smooth edges that are connected to non-existent nodes --- HISTORY.md | 1 + dist/vis.js | 1082 ++++++++++++++++++++++--------------------- lib/network/Edge.js | 4 + 3 files changed, 548 insertions(+), 539 deletions(-) diff --git a/HISTORY.md b/HISTORY.md index fcf886d0..2861b6c4 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -34,6 +34,7 @@ http://visjs.org - Sidestepped double touch event from hammer (ugly.. but functional) causing strange behaviour in manipulation mode - Better cleanup after reconnecting edges in manipulation mode +- Fixed recursion error with smooth edges that are connected to non-existent nodes ## 2014-11-28, version 3.7.1 diff --git a/dist/vis.js b/dist/vis.js index 4bbeb840..12aa0608 100644 --- a/dist/vis.js +++ b/dist/vis.js @@ -5,7 +5,7 @@ * A dynamic, browser-based visualization library. * * @version 3.7.2-SNAPSHOT - * @date 2014-12-22 + * @date 2014-12-23 * * @license * Copyright (C) 2011-2014 Almende B.V, http://almende.com @@ -106,7 +106,7 @@ return /******/ (function(modules) { // webpackBootstrap exports.Graph2d = __webpack_require__(42); exports.timeline = { DateUtil: __webpack_require__(24), - DataStep: __webpack_require__(50), + DataStep: __webpack_require__(45), Range: __webpack_require__(21), stack: __webpack_require__(28), TimeStep: __webpack_require__(38), @@ -124,11 +124,11 @@ return /******/ (function(modules) { // webpackBootstrap CurrentTime: __webpack_require__(39), CustomTime: __webpack_require__(41), DataAxis: __webpack_require__(44), - GraphGroup: __webpack_require__(45), + GraphGroup: __webpack_require__(46), Group: __webpack_require__(27), BackgroundGroup: __webpack_require__(31), ItemSet: __webpack_require__(26), - Legend: __webpack_require__(49), + Legend: __webpack_require__(50), LineGraph: __webpack_require__(43), TimeAxis: __webpack_require__(37) } @@ -19636,9 +19636,9 @@ return /******/ (function(modules) { // webpackBootstrap var DataView = __webpack_require__(9); var Component = __webpack_require__(23); var DataAxis = __webpack_require__(44); - var GraphGroup = __webpack_require__(45); - var Legend = __webpack_require__(49); - var BarGraphFunctions = __webpack_require__(48); + var GraphGroup = __webpack_require__(46); + var Legend = __webpack_require__(50); + var BarGraphFunctions = __webpack_require__(49); var UNGROUPED = '__ungrouped__'; // reserved group id for ungrouped items @@ -20627,7 +20627,7 @@ return /******/ (function(modules) { // webpackBootstrap var util = __webpack_require__(1); var DOMutil = __webpack_require__(6); var Component = __webpack_require__(23); - var DataStep = __webpack_require__(50); + var DataStep = __webpack_require__(45); /** * A horizontal time axis @@ -21266,151 +21266,432 @@ return /******/ (function(modules) { // webpackBootstrap /* 45 */ /***/ function(module, exports, __webpack_require__) { - var util = __webpack_require__(1); - var DOMutil = __webpack_require__(6); - var Line = __webpack_require__(46); - var Bar = __webpack_require__(48); - var Points = __webpack_require__(47); - /** - * /** - * @param {object} group | the object of the group from the dataset - * @param {string} groupId | ID of the group - * @param {object} options | the default options - * @param {array} groupsUsingDefaultStyles | this array has one entree. - * It is passed as an array so it is passed by reference. - * It enumerates through the default styles - * @constructor + * @constructor DataStep + * The class DataStep is an iterator for data for the lineGraph. You provide a start data point and an + * end data point. The class itself determines the best scale (step size) based on the + * provided start Date, end Date, and minimumStep. + * + * If minimumStep is provided, the step size is chosen as close as possible + * to the minimumStep but larger than minimumStep. If minimumStep is not + * provided, the scale is set to 1 DAY. + * The minimumStep should correspond with the onscreen size of about 6 characters + * + * Alternatively, you can set a scale by hand. + * After creation, you can initialize the class by executing first(). Then you + * can iterate from the start date to the end date via next(). You can check if + * the end date is reached with the function hasNext(). After each step, you can + * retrieve the current date via getCurrent(). + * The DataStep has scales ranging from milliseconds, seconds, minutes, hours, + * days, to years. + * + * Version: 1.2 + * + * @param {Date} [start] The start date, for example new Date(2010, 9, 21) + * or new Date(2010, 9, 21, 23, 45, 00) + * @param {Date} [end] The end date + * @param {Number} [minimumStep] Optional. Minimum step size in milliseconds */ - function GraphGroup (group, groupId, options, groupsUsingDefaultStyles) { - this.id = groupId; - var fields = ['sampling','style','sort','yAxisOrientation','barChart','drawPoints','shaded','catmullRom'] - this.options = util.selectiveBridgeObject(fields,options); - this.usingDefaultStyle = group.className === undefined; - this.groupsUsingDefaultStyles = groupsUsingDefaultStyles; - this.zeroPosition = 0; - this.update(group); - if (this.usingDefaultStyle == true) { - this.groupsUsingDefaultStyles[0] += 1; - } - this.itemsData = []; - this.visible = group.visible === undefined ? true : group.visible; + function DataStep(start, end, minimumStep, containerHeight, customRange, alignZeros) { + // variables + this.current = 0; + + this.autoScale = true; + this.stepIndex = 0; + this.step = 1; + this.scale = 1; + + this.marginStart; + this.marginEnd; + this.deadSpace = 0; + + this.majorSteps = [1, 2, 5, 10]; + this.minorSteps = [0.25, 0.5, 1, 2]; + + this.alignZeros = alignZeros; + + this.setRange(start, end, minimumStep, containerHeight, customRange); } + /** - * this loads a reference to all items in this group into this group. - * @param {array} items + * Set a new range + * If minimumStep is provided, the step size is chosen as close as possible + * to the minimumStep but larger than minimumStep. If minimumStep is not + * provided, the scale is set to 1 DAY. + * The minimumStep should correspond with the onscreen size of about 6 characters + * @param {Number} [start] The start date and time. + * @param {Number} [end] The end date and time. + * @param {Number} [minimumStep] Optional. Minimum step size in milliseconds */ - GraphGroup.prototype.setItems = function(items) { - if (items != null) { - this.itemsData = items; - if (this.options.sort == true) { - this.itemsData.sort(function (a,b) {return a.x - b.x;}) - } + DataStep.prototype.setRange = function(start, end, minimumStep, containerHeight, customRange) { + this._start = customRange.min === undefined ? start : customRange.min; + this._end = customRange.max === undefined ? end : customRange.max; + + if (this._start == this._end) { + this._start -= 0.75; + this._end += 1; } - else { - this.itemsData = []; + + if (this.autoScale == true) { + this.setMinimumStep(minimumStep, containerHeight); } - }; + this.setFirst(customRange); + }; /** - * this is used for plotting barcharts, this way, we only have to calculate it once. - * @param pos + * Automatically determine the scale that bests fits the provided minimum step + * @param {Number} [minimumStep] The minimum step size in milliseconds */ - GraphGroup.prototype.setZeroPosition = function(pos) { - this.zeroPosition = pos; + DataStep.prototype.setMinimumStep = function(minimumStep, containerHeight) { + // round to floor + var size = this._end - this._start; + var safeSize = size * 1.2; + var minimumStepValue = minimumStep * (safeSize / containerHeight); + var orderOfMagnitude = Math.round(Math.log(safeSize)/Math.LN10); + + var minorStepIdx = -1; + var magnitudefactor = Math.pow(10,orderOfMagnitude); + + var start = 0; + if (orderOfMagnitude < 0) { + start = orderOfMagnitude; + } + + var solutionFound = false; + for (var i = start; Math.abs(i) <= Math.abs(orderOfMagnitude); i++) { + magnitudefactor = Math.pow(10,i); + for (var j = 0; j < this.minorSteps.length; j++) { + var stepSize = magnitudefactor * this.minorSteps[j]; + if (stepSize >= minimumStepValue) { + solutionFound = true; + minorStepIdx = j; + break; + } + } + if (solutionFound == true) { + break; + } + } + this.stepIndex = minorStepIdx; + this.scale = magnitudefactor; + this.step = magnitudefactor * this.minorSteps[minorStepIdx]; }; + /** - * set the options of the graph group over the default options. - * @param options + * Round the current date to the first minor date value + * This must be executed once when the current date is set to start Date */ - GraphGroup.prototype.setOptions = function(options) { - if (options !== undefined) { - var fields = ['sampling','style','sort','yAxisOrientation','barChart']; - util.selectiveDeepExtend(fields, this.options, options); + DataStep.prototype.setFirst = function(customRange) { + if (customRange === undefined) { + customRange = {}; + } - util.mergeOptions(this.options, options,'catmullRom'); - util.mergeOptions(this.options, options,'drawPoints'); - util.mergeOptions(this.options, options,'shaded'); + var niceStart = customRange.min === undefined ? this._start - (this.scale * 2 * this.minorSteps[this.stepIndex]) : customRange.min; + var niceEnd = customRange.max === undefined ? this._end + (this.scale * this.minorSteps[this.stepIndex]) : customRange.max; - if (options.catmullRom) { - if (typeof options.catmullRom == 'object') { - if (options.catmullRom.parametrization) { - if (options.catmullRom.parametrization == 'uniform') { - this.options.catmullRom.alpha = 0; - } - else if (options.catmullRom.parametrization == 'chordal') { - this.options.catmullRom.alpha = 1.0; - } - else { - this.options.catmullRom.parametrization = 'centripetal'; - this.options.catmullRom.alpha = 0.5; - } - } - } - } - } + this.marginEnd = customRange.max === undefined ? this.roundToMinor(niceEnd) : customRange.max; + this.marginStart = customRange.min === undefined ? this.roundToMinor(niceStart) : customRange.min; - if (this.options.style == 'line') { - this.type = new Line(this.id, this.options); + // if we need to align the zero's we need to make sure that there is a zero to use. + if (this.alignZeros == true && (this.marginEnd - this.marginStart) % this.step != 0) { + this.marginEnd += this.marginEnd % this.step; } - else if (this.options.style == 'bar') { - this.type = new Bar(this.id, this.options); + + this.deadSpace = this.roundToMinor(niceEnd) - niceEnd + this.roundToMinor(niceStart) - niceStart; + this.marginRange = this.marginEnd - this.marginStart; + + + this.current = this.marginEnd; + }; + + DataStep.prototype.roundToMinor = function(value) { + var rounded = value - (value % (this.scale * this.minorSteps[this.stepIndex])); + if (value % (this.scale * this.minorSteps[this.stepIndex]) > 0.5 * (this.scale * this.minorSteps[this.stepIndex])) { + return rounded + (this.scale * this.minorSteps[this.stepIndex]); } - else if (this.options.style == 'points') { - this.type = new Points(this.id, this.options); + else { + return rounded; } - }; + } /** - * this updates the current group class with the latest group dataset entree, used in _updateGroup in linegraph - * @param group + * Check if the there is a next step + * @return {boolean} true if the current date has not passed the end date */ - GraphGroup.prototype.update = function(group) { - this.group = group; - this.content = group.content || 'graph'; - this.className = group.className || this.className || "graphGroup" + this.groupsUsingDefaultStyles[0] % 10; - this.visible = group.visible === undefined ? true : group.visible; - this.style = group.style; - this.setOptions(group.options); + DataStep.prototype.hasNext = function () { + return (this.current >= this.marginStart); }; + /** + * Do the next step + */ + DataStep.prototype.next = function() { + var prev = this.current; + this.current -= this.step; + + // safety mechanism: if current time is still unchanged, move to the end + if (this.current == prev) { + this.current = this._end; + } + }; /** - * draw the icon for the legend. - * - * @param x - * @param y - * @param JSONcontainer - * @param SVGcontainer - * @param iconWidth - * @param iconHeight + * Do the next step */ - GraphGroup.prototype.drawIcon = function(x, y, JSONcontainer, SVGcontainer, iconWidth, iconHeight) { - var fillHeight = iconHeight * 0.5; - var path, fillPath; + DataStep.prototype.previous = function() { + this.current += this.step; + this.marginEnd += this.step; + this.marginRange = this.marginEnd - this.marginStart; + }; - var outline = DOMutil.getSVGElement("rect", JSONcontainer, SVGcontainer); - outline.setAttributeNS(null, "x", x); - outline.setAttributeNS(null, "y", y - fillHeight); - outline.setAttributeNS(null, "width", iconWidth); - outline.setAttributeNS(null, "height", 2*fillHeight); - outline.setAttributeNS(null, "class", "outline"); - if (this.options.style == 'line') { - path = DOMutil.getSVGElement("path", JSONcontainer, SVGcontainer); - path.setAttributeNS(null, "class", this.className); - if(this.style !== undefined) { - path.setAttributeNS(null, "style", this.style); - } - path.setAttributeNS(null, "d", "M" + x + ","+y+" L" + (x + iconWidth) + ","+y+""); - if (this.options.shaded.enabled == true) { + /** + * Get the current datetime + * @return {String} current The current date + */ + DataStep.prototype.getCurrent = function(decimals) { + // prevent round-off errors when close to zero + var current = (Math.abs(this.current) < this.step / 2) ? 0 : this.current; + var toPrecision = '' + Number(current).toPrecision(5); + + // If decimals is specified, then limit or extend the string as required + if(decimals !== undefined && !isNaN(Number(decimals))) { + // If string includes exponent, then we need to add it to the end + var exp = ""; + var index = toPrecision.indexOf("e"); + if(index != -1) { + // Get the exponent + exp = toPrecision.slice(index); + // Remove the exponent in case we need to zero-extend + toPrecision = toPrecision.slice(0, index); + } + index = Math.max(toPrecision.indexOf(","), toPrecision.indexOf(".")); + if(index === -1) { + // No decimal found - if we want decimals, then we need to add it + if(decimals !== 0) { + toPrecision += '.'; + } + // Calculate how long the string should be + index = toPrecision.length + decimals; + } + else if(decimals !== 0) { + // Calculate how long the string should be - accounting for the decimal place + index += decimals + 1; + } + if(index > toPrecision.length) { + // We need to add zeros! + for(var cnt = index - toPrecision.length; cnt > 0; cnt--) { + toPrecision += '0'; + } + } + else { + // we need to remove characters + toPrecision = toPrecision.slice(0, index); + } + // Add the exponent if there is one + toPrecision += exp; + } + else { + if (toPrecision.indexOf(",") != -1 || toPrecision.indexOf(".") != -1) { + // If no decimal is specified, and there are decimal places, remove trailing zeros + for (var i = toPrecision.length - 1; i > 0; i--) { + if (toPrecision[i] == "0") { + toPrecision = toPrecision.slice(0, i); + } + else if (toPrecision[i] == "." || toPrecision[i] == ",") { + toPrecision = toPrecision.slice(0, i); + break; + } + else { + break; + } + } + } + } + + return toPrecision; + }; + + + + /** + * Snap a date to a rounded value. + * The snap intervals are dependent on the current scale and step. + * @param {Date} date the date to be snapped. + * @return {Date} snappedDate + */ + DataStep.prototype.snap = function(date) { + + }; + + /** + * Check if the current value is a major value (for example when the step + * is DAY, a major value is each first day of the MONTH) + * @return {boolean} true if current date is major, else false. + */ + DataStep.prototype.isMajor = function() { + return (this.current % (this.scale * this.majorSteps[this.stepIndex]) == 0); + }; + + module.exports = DataStep; + + +/***/ }, +/* 46 */ +/***/ function(module, exports, __webpack_require__) { + + var util = __webpack_require__(1); + var DOMutil = __webpack_require__(6); + var Line = __webpack_require__(47); + var Bar = __webpack_require__(49); + var Points = __webpack_require__(48); + + /** + * /** + * @param {object} group | the object of the group from the dataset + * @param {string} groupId | ID of the group + * @param {object} options | the default options + * @param {array} groupsUsingDefaultStyles | this array has one entree. + * It is passed as an array so it is passed by reference. + * It enumerates through the default styles + * @constructor + */ + function GraphGroup (group, groupId, options, groupsUsingDefaultStyles) { + this.id = groupId; + var fields = ['sampling','style','sort','yAxisOrientation','barChart','drawPoints','shaded','catmullRom'] + this.options = util.selectiveBridgeObject(fields,options); + this.usingDefaultStyle = group.className === undefined; + this.groupsUsingDefaultStyles = groupsUsingDefaultStyles; + this.zeroPosition = 0; + this.update(group); + if (this.usingDefaultStyle == true) { + this.groupsUsingDefaultStyles[0] += 1; + } + this.itemsData = []; + this.visible = group.visible === undefined ? true : group.visible; + } + + + /** + * this loads a reference to all items in this group into this group. + * @param {array} items + */ + GraphGroup.prototype.setItems = function(items) { + if (items != null) { + this.itemsData = items; + if (this.options.sort == true) { + this.itemsData.sort(function (a,b) {return a.x - b.x;}) + } + } + else { + this.itemsData = []; + } + }; + + + /** + * this is used for plotting barcharts, this way, we only have to calculate it once. + * @param pos + */ + GraphGroup.prototype.setZeroPosition = function(pos) { + this.zeroPosition = pos; + }; + + + /** + * set the options of the graph group over the default options. + * @param options + */ + GraphGroup.prototype.setOptions = function(options) { + if (options !== undefined) { + var fields = ['sampling','style','sort','yAxisOrientation','barChart']; + util.selectiveDeepExtend(fields, this.options, options); + + util.mergeOptions(this.options, options,'catmullRom'); + util.mergeOptions(this.options, options,'drawPoints'); + util.mergeOptions(this.options, options,'shaded'); + + if (options.catmullRom) { + if (typeof options.catmullRom == 'object') { + if (options.catmullRom.parametrization) { + if (options.catmullRom.parametrization == 'uniform') { + this.options.catmullRom.alpha = 0; + } + else if (options.catmullRom.parametrization == 'chordal') { + this.options.catmullRom.alpha = 1.0; + } + else { + this.options.catmullRom.parametrization = 'centripetal'; + this.options.catmullRom.alpha = 0.5; + } + } + } + } + } + + if (this.options.style == 'line') { + this.type = new Line(this.id, this.options); + } + else if (this.options.style == 'bar') { + this.type = new Bar(this.id, this.options); + } + else if (this.options.style == 'points') { + this.type = new Points(this.id, this.options); + } + }; + + + /** + * this updates the current group class with the latest group dataset entree, used in _updateGroup in linegraph + * @param group + */ + GraphGroup.prototype.update = function(group) { + this.group = group; + this.content = group.content || 'graph'; + this.className = group.className || this.className || "graphGroup" + this.groupsUsingDefaultStyles[0] % 10; + this.visible = group.visible === undefined ? true : group.visible; + this.style = group.style; + this.setOptions(group.options); + }; + + + /** + * draw the icon for the legend. + * + * @param x + * @param y + * @param JSONcontainer + * @param SVGcontainer + * @param iconWidth + * @param iconHeight + */ + GraphGroup.prototype.drawIcon = function(x, y, JSONcontainer, SVGcontainer, iconWidth, iconHeight) { + var fillHeight = iconHeight * 0.5; + var path, fillPath; + + var outline = DOMutil.getSVGElement("rect", JSONcontainer, SVGcontainer); + outline.setAttributeNS(null, "x", x); + outline.setAttributeNS(null, "y", y - fillHeight); + outline.setAttributeNS(null, "width", iconWidth); + outline.setAttributeNS(null, "height", 2*fillHeight); + outline.setAttributeNS(null, "class", "outline"); + + if (this.options.style == 'line') { + path = DOMutil.getSVGElement("path", JSONcontainer, SVGcontainer); + path.setAttributeNS(null, "class", this.className); + if(this.style !== undefined) { + path.setAttributeNS(null, "style", this.style); + } + + path.setAttributeNS(null, "d", "M" + x + ","+y+" L" + (x + iconWidth) + ","+y+""); + if (this.options.shaded.enabled == true) { fillPath = DOMutil.getSVGElement("path", JSONcontainer, SVGcontainer); if (this.options.shaded.orientation == 'top') { fillPath.setAttributeNS(null, "d", "M"+x+", " + (y - fillHeight) + @@ -21468,14 +21749,14 @@ return /******/ (function(modules) { // webpackBootstrap /***/ }, -/* 46 */ +/* 47 */ /***/ function(module, exports, __webpack_require__) { /** * Created by Alex on 11/11/2014. */ var DOMutil = __webpack_require__(6); - var Points = __webpack_require__(47); + var Points = __webpack_require__(48); function Line(groupId, options) { this.groupId = groupId; @@ -21692,7 +21973,7 @@ return /******/ (function(modules) { // webpackBootstrap /***/ }, -/* 47 */ +/* 48 */ /***/ function(module, exports, __webpack_require__) { /** @@ -21740,14 +22021,14 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = Points; /***/ }, -/* 48 */ +/* 49 */ /***/ function(module, exports, __webpack_require__) { /** * Created by Alex on 11/11/2014. */ var DOMutil = __webpack_require__(6); - var Points = __webpack_require__(47); + var Points = __webpack_require__(48); function Bargraph(groupId, options) { this.groupId = groupId; @@ -21974,7 +22255,7 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = Bargraph; /***/ }, -/* 49 */ +/* 50 */ /***/ function(module, exports, __webpack_require__) { var util = __webpack_require__(1); @@ -22004,464 +22285,183 @@ return /******/ (function(modules) { // webpackBootstrap this.options = util.extend({},this.defaultOptions); this.linegraphOptions = linegraphOptions; - this.svgElements = {}; - this.dom = {}; - this.groups = {}; - this.amountOfGroups = 0; - this._create(); - - this.setOptions(options); - } - - Legend.prototype = new Component(); - - Legend.prototype.clear = function() { - this.groups = {}; - this.amountOfGroups = 0; - } - - Legend.prototype.addGroup = function(label, graphOptions) { - - if (!this.groups.hasOwnProperty(label)) { - this.groups[label] = graphOptions; - } - this.amountOfGroups += 1; - }; - - Legend.prototype.updateGroup = function(label, graphOptions) { - this.groups[label] = graphOptions; - }; - - Legend.prototype.removeGroup = function(label) { - if (this.groups.hasOwnProperty(label)) { - delete this.groups[label]; - this.amountOfGroups -= 1; - } - }; - - Legend.prototype._create = function() { - this.dom.frame = document.createElement('div'); - this.dom.frame.className = 'legend'; - this.dom.frame.style.position = "absolute"; - this.dom.frame.style.top = "10px"; - this.dom.frame.style.display = "block"; - - this.dom.textArea = document.createElement('div'); - this.dom.textArea.className = 'legendText'; - this.dom.textArea.style.position = "relative"; - this.dom.textArea.style.top = "0px"; - - this.svg = document.createElementNS('http://www.w3.org/2000/svg',"svg"); - this.svg.style.position = 'absolute'; - this.svg.style.top = 0 +'px'; - this.svg.style.width = this.options.iconSize + 5 + 'px'; - this.svg.style.height = '100%'; - - this.dom.frame.appendChild(this.svg); - this.dom.frame.appendChild(this.dom.textArea); - }; - - /** - * Hide the component from the DOM - */ - Legend.prototype.hide = function() { - // remove the frame containing the items - if (this.dom.frame.parentNode) { - this.dom.frame.parentNode.removeChild(this.dom.frame); - } - }; - - /** - * Show the component in the DOM (when not already visible). - * @return {Boolean} changed - */ - Legend.prototype.show = function() { - // show frame containing the items - if (!this.dom.frame.parentNode) { - this.body.dom.center.appendChild(this.dom.frame); - } - }; - - Legend.prototype.setOptions = function(options) { - var fields = ['enabled','orientation','icons','left','right']; - util.selectiveDeepExtend(fields, this.options, options); - }; - - Legend.prototype.redraw = function() { - var activeGroups = 0; - for (var groupId in this.groups) { - if (this.groups.hasOwnProperty(groupId)) { - if (this.groups[groupId].visible == true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] == true)) { - activeGroups++; - } - } - } - - if (this.options[this.side].visible == false || this.amountOfGroups == 0 || this.options.enabled == false || activeGroups == 0) { - this.hide(); - } - else { - this.show(); - if (this.options[this.side].position == 'top-left' || this.options[this.side].position == 'bottom-left') { - this.dom.frame.style.left = '4px'; - this.dom.frame.style.textAlign = "left"; - this.dom.textArea.style.textAlign = "left"; - this.dom.textArea.style.left = (this.options.iconSize + 15) + 'px'; - this.dom.textArea.style.right = ''; - this.svg.style.left = 0 +'px'; - this.svg.style.right = ''; - } - else { - this.dom.frame.style.right = '4px'; - this.dom.frame.style.textAlign = "right"; - this.dom.textArea.style.textAlign = "right"; - this.dom.textArea.style.right = (this.options.iconSize + 15) + 'px'; - this.dom.textArea.style.left = ''; - this.svg.style.right = 0 +'px'; - this.svg.style.left = ''; - } - - if (this.options[this.side].position == 'top-left' || this.options[this.side].position == 'top-right') { - this.dom.frame.style.top = 4 - Number(this.body.dom.center.style.top.replace("px","")) + 'px'; - this.dom.frame.style.bottom = ''; - } - else { - var scrollableHeight = this.body.domProps.center.height - this.body.domProps.centerContainer.height; - this.dom.frame.style.bottom = 4 + scrollableHeight + Number(this.body.dom.center.style.top.replace("px","")) + 'px'; - this.dom.frame.style.top = ''; - } - - if (this.options.icons == false) { - this.dom.frame.style.width = this.dom.textArea.offsetWidth + 10 + 'px'; - this.dom.textArea.style.right = ''; - this.dom.textArea.style.left = ''; - this.svg.style.width = '0px'; - } - else { - this.dom.frame.style.width = this.options.iconSize + 15 + this.dom.textArea.offsetWidth + 10 + 'px' - this.drawLegendIcons(); - } - - var content = ''; - for (var groupId in this.groups) { - if (this.groups.hasOwnProperty(groupId)) { - if (this.groups[groupId].visible == true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] == true)) { - content += this.groups[groupId].content + '
'; - } - } - } - this.dom.textArea.innerHTML = content; - this.dom.textArea.style.lineHeight = ((0.75 * this.options.iconSize) + this.options.iconSpacing) + 'px'; - } - }; - - Legend.prototype.drawLegendIcons = function() { - if (this.dom.frame.parentNode) { - DOMutil.prepareElements(this.svgElements); - var padding = window.getComputedStyle(this.dom.frame).paddingTop; - var iconOffset = Number(padding.replace('px','')); - var x = iconOffset; - var iconWidth = this.options.iconSize; - var iconHeight = 0.75 * this.options.iconSize; - var y = iconOffset + 0.5 * iconHeight + 3; - - this.svg.style.width = iconWidth + 5 + iconOffset + 'px'; - - for (var groupId in this.groups) { - if (this.groups.hasOwnProperty(groupId)) { - if (this.groups[groupId].visible == true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] == true)) { - this.groups[groupId].drawIcon(x, y, this.svgElements, this.svg, iconWidth, iconHeight); - y += iconHeight + this.options.iconSpacing; - } - } - } - - DOMutil.cleanupElements(this.svgElements); - } - }; - - module.exports = Legend; - - -/***/ }, -/* 50 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * @constructor DataStep - * The class DataStep is an iterator for data for the lineGraph. You provide a start data point and an - * end data point. The class itself determines the best scale (step size) based on the - * provided start Date, end Date, and minimumStep. - * - * If minimumStep is provided, the step size is chosen as close as possible - * to the minimumStep but larger than minimumStep. If minimumStep is not - * provided, the scale is set to 1 DAY. - * The minimumStep should correspond with the onscreen size of about 6 characters - * - * Alternatively, you can set a scale by hand. - * After creation, you can initialize the class by executing first(). Then you - * can iterate from the start date to the end date via next(). You can check if - * the end date is reached with the function hasNext(). After each step, you can - * retrieve the current date via getCurrent(). - * The DataStep has scales ranging from milliseconds, seconds, minutes, hours, - * days, to years. - * - * Version: 1.2 - * - * @param {Date} [start] The start date, for example new Date(2010, 9, 21) - * or new Date(2010, 9, 21, 23, 45, 00) - * @param {Date} [end] The end date - * @param {Number} [minimumStep] Optional. Minimum step size in milliseconds - */ - function DataStep(start, end, minimumStep, containerHeight, customRange, alignZeros) { - // variables - this.current = 0; - - this.autoScale = true; - this.stepIndex = 0; - this.step = 1; - this.scale = 1; - - this.marginStart; - this.marginEnd; - this.deadSpace = 0; - - this.majorSteps = [1, 2, 5, 10]; - this.minorSteps = [0.25, 0.5, 1, 2]; - - this.alignZeros = alignZeros; - - this.setRange(start, end, minimumStep, containerHeight, customRange); - } - - - - /** - * Set a new range - * If minimumStep is provided, the step size is chosen as close as possible - * to the minimumStep but larger than minimumStep. If minimumStep is not - * provided, the scale is set to 1 DAY. - * The minimumStep should correspond with the onscreen size of about 6 characters - * @param {Number} [start] The start date and time. - * @param {Number} [end] The end date and time. - * @param {Number} [minimumStep] Optional. Minimum step size in milliseconds - */ - DataStep.prototype.setRange = function(start, end, minimumStep, containerHeight, customRange) { - this._start = customRange.min === undefined ? start : customRange.min; - this._end = customRange.max === undefined ? end : customRange.max; - - if (this._start == this._end) { - this._start -= 0.75; - this._end += 1; - } - - if (this.autoScale == true) { - this.setMinimumStep(minimumStep, containerHeight); - } - - this.setFirst(customRange); - }; - - /** - * Automatically determine the scale that bests fits the provided minimum step - * @param {Number} [minimumStep] The minimum step size in milliseconds - */ - DataStep.prototype.setMinimumStep = function(minimumStep, containerHeight) { - // round to floor - var size = this._end - this._start; - var safeSize = size * 1.2; - var minimumStepValue = minimumStep * (safeSize / containerHeight); - var orderOfMagnitude = Math.round(Math.log(safeSize)/Math.LN10); - - var minorStepIdx = -1; - var magnitudefactor = Math.pow(10,orderOfMagnitude); - - var start = 0; - if (orderOfMagnitude < 0) { - start = orderOfMagnitude; - } - - var solutionFound = false; - for (var i = start; Math.abs(i) <= Math.abs(orderOfMagnitude); i++) { - magnitudefactor = Math.pow(10,i); - for (var j = 0; j < this.minorSteps.length; j++) { - var stepSize = magnitudefactor * this.minorSteps[j]; - if (stepSize >= minimumStepValue) { - solutionFound = true; - minorStepIdx = j; - break; - } - } - if (solutionFound == true) { - break; - } - } - this.stepIndex = minorStepIdx; - this.scale = magnitudefactor; - this.step = magnitudefactor * this.minorSteps[minorStepIdx]; - }; - + this.svgElements = {}; + this.dom = {}; + this.groups = {}; + this.amountOfGroups = 0; + this._create(); + this.setOptions(options); + } - /** - * Round the current date to the first minor date value - * This must be executed once when the current date is set to start Date - */ - DataStep.prototype.setFirst = function(customRange) { - if (customRange === undefined) { - customRange = {}; - } + Legend.prototype = new Component(); - var niceStart = customRange.min === undefined ? this._start - (this.scale * 2 * this.minorSteps[this.stepIndex]) : customRange.min; - var niceEnd = customRange.max === undefined ? this._end + (this.scale * this.minorSteps[this.stepIndex]) : customRange.max; + Legend.prototype.clear = function() { + this.groups = {}; + this.amountOfGroups = 0; + } - this.marginEnd = customRange.max === undefined ? this.roundToMinor(niceEnd) : customRange.max; - this.marginStart = customRange.min === undefined ? this.roundToMinor(niceStart) : customRange.min; + Legend.prototype.addGroup = function(label, graphOptions) { - // if we need to align the zero's we need to make sure that there is a zero to use. - if (this.alignZeros == true && (this.marginEnd - this.marginStart) % this.step != 0) { - this.marginEnd += this.marginEnd % this.step; + if (!this.groups.hasOwnProperty(label)) { + this.groups[label] = graphOptions; } + this.amountOfGroups += 1; + }; - this.deadSpace = this.roundToMinor(niceEnd) - niceEnd + this.roundToMinor(niceStart) - niceStart; - this.marginRange = this.marginEnd - this.marginStart; - - - this.current = this.marginEnd; + Legend.prototype.updateGroup = function(label, graphOptions) { + this.groups[label] = graphOptions; }; - DataStep.prototype.roundToMinor = function(value) { - var rounded = value - (value % (this.scale * this.minorSteps[this.stepIndex])); - if (value % (this.scale * this.minorSteps[this.stepIndex]) > 0.5 * (this.scale * this.minorSteps[this.stepIndex])) { - return rounded + (this.scale * this.minorSteps[this.stepIndex]); - } - else { - return rounded; + Legend.prototype.removeGroup = function(label) { + if (this.groups.hasOwnProperty(label)) { + delete this.groups[label]; + this.amountOfGroups -= 1; } - } + }; + Legend.prototype._create = function() { + this.dom.frame = document.createElement('div'); + this.dom.frame.className = 'legend'; + this.dom.frame.style.position = "absolute"; + this.dom.frame.style.top = "10px"; + this.dom.frame.style.display = "block"; - /** - * Check if the there is a next step - * @return {boolean} true if the current date has not passed the end date - */ - DataStep.prototype.hasNext = function () { - return (this.current >= this.marginStart); + this.dom.textArea = document.createElement('div'); + this.dom.textArea.className = 'legendText'; + this.dom.textArea.style.position = "relative"; + this.dom.textArea.style.top = "0px"; + + this.svg = document.createElementNS('http://www.w3.org/2000/svg',"svg"); + this.svg.style.position = 'absolute'; + this.svg.style.top = 0 +'px'; + this.svg.style.width = this.options.iconSize + 5 + 'px'; + this.svg.style.height = '100%'; + + this.dom.frame.appendChild(this.svg); + this.dom.frame.appendChild(this.dom.textArea); }; /** - * Do the next step + * Hide the component from the DOM */ - DataStep.prototype.next = function() { - var prev = this.current; - this.current -= this.step; - - // safety mechanism: if current time is still unchanged, move to the end - if (this.current == prev) { - this.current = this._end; + Legend.prototype.hide = function() { + // remove the frame containing the items + if (this.dom.frame.parentNode) { + this.dom.frame.parentNode.removeChild(this.dom.frame); } }; /** - * Do the next step + * Show the component in the DOM (when not already visible). + * @return {Boolean} changed */ - DataStep.prototype.previous = function() { - this.current += this.step; - this.marginEnd += this.step; - this.marginRange = this.marginEnd - this.marginStart; + Legend.prototype.show = function() { + // show frame containing the items + if (!this.dom.frame.parentNode) { + this.body.dom.center.appendChild(this.dom.frame); + } }; + Legend.prototype.setOptions = function(options) { + var fields = ['enabled','orientation','icons','left','right']; + util.selectiveDeepExtend(fields, this.options, options); + }; + Legend.prototype.redraw = function() { + var activeGroups = 0; + for (var groupId in this.groups) { + if (this.groups.hasOwnProperty(groupId)) { + if (this.groups[groupId].visible == true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] == true)) { + activeGroups++; + } + } + } - /** - * Get the current datetime - * @return {String} current The current date - */ - DataStep.prototype.getCurrent = function(decimals) { - // prevent round-off errors when close to zero - var current = (Math.abs(this.current) < this.step / 2) ? 0 : this.current; - var toPrecision = '' + Number(current).toPrecision(5); - - // If decimals is specified, then limit or extend the string as required - if(decimals !== undefined && !isNaN(Number(decimals))) { - // If string includes exponent, then we need to add it to the end - var exp = ""; - var index = toPrecision.indexOf("e"); - if(index != -1) { - // Get the exponent - exp = toPrecision.slice(index); - // Remove the exponent in case we need to zero-extend - toPrecision = toPrecision.slice(0, index); + if (this.options[this.side].visible == false || this.amountOfGroups == 0 || this.options.enabled == false || activeGroups == 0) { + this.hide(); + } + else { + this.show(); + if (this.options[this.side].position == 'top-left' || this.options[this.side].position == 'bottom-left') { + this.dom.frame.style.left = '4px'; + this.dom.frame.style.textAlign = "left"; + this.dom.textArea.style.textAlign = "left"; + this.dom.textArea.style.left = (this.options.iconSize + 15) + 'px'; + this.dom.textArea.style.right = ''; + this.svg.style.left = 0 +'px'; + this.svg.style.right = ''; } - index = Math.max(toPrecision.indexOf(","), toPrecision.indexOf(".")); - if(index === -1) { - // No decimal found - if we want decimals, then we need to add it - if(decimals !== 0) { - toPrecision += '.'; - } - // Calculate how long the string should be - index = toPrecision.length + decimals; + else { + this.dom.frame.style.right = '4px'; + this.dom.frame.style.textAlign = "right"; + this.dom.textArea.style.textAlign = "right"; + this.dom.textArea.style.right = (this.options.iconSize + 15) + 'px'; + this.dom.textArea.style.left = ''; + this.svg.style.right = 0 +'px'; + this.svg.style.left = ''; } - else if(decimals !== 0) { - // Calculate how long the string should be - accounting for the decimal place - index += decimals + 1; + + if (this.options[this.side].position == 'top-left' || this.options[this.side].position == 'top-right') { + this.dom.frame.style.top = 4 - Number(this.body.dom.center.style.top.replace("px","")) + 'px'; + this.dom.frame.style.bottom = ''; } - if(index > toPrecision.length) { - // We need to add zeros! - for(var cnt = index - toPrecision.length; cnt > 0; cnt--) { - toPrecision += '0'; - } + else { + var scrollableHeight = this.body.domProps.center.height - this.body.domProps.centerContainer.height; + this.dom.frame.style.bottom = 4 + scrollableHeight + Number(this.body.dom.center.style.top.replace("px","")) + 'px'; + this.dom.frame.style.top = ''; + } + + if (this.options.icons == false) { + this.dom.frame.style.width = this.dom.textArea.offsetWidth + 10 + 'px'; + this.dom.textArea.style.right = ''; + this.dom.textArea.style.left = ''; + this.svg.style.width = '0px'; } else { - // we need to remove characters - toPrecision = toPrecision.slice(0, index); + this.dom.frame.style.width = this.options.iconSize + 15 + this.dom.textArea.offsetWidth + 10 + 'px' + this.drawLegendIcons(); } - // Add the exponent if there is one - toPrecision += exp; - } - else { - if (toPrecision.indexOf(",") != -1 || toPrecision.indexOf(".") != -1) { - // If no decimal is specified, and there are decimal places, remove trailing zeros - for (var i = toPrecision.length - 1; i > 0; i--) { - if (toPrecision[i] == "0") { - toPrecision = toPrecision.slice(0, i); - } - else if (toPrecision[i] == "." || toPrecision[i] == ",") { - toPrecision = toPrecision.slice(0, i); - break; - } - else { - break; + + var content = ''; + for (var groupId in this.groups) { + if (this.groups.hasOwnProperty(groupId)) { + if (this.groups[groupId].visible == true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] == true)) { + content += this.groups[groupId].content + '
'; } } } + this.dom.textArea.innerHTML = content; + this.dom.textArea.style.lineHeight = ((0.75 * this.options.iconSize) + this.options.iconSpacing) + 'px'; } - - return toPrecision; }; + Legend.prototype.drawLegendIcons = function() { + if (this.dom.frame.parentNode) { + DOMutil.prepareElements(this.svgElements); + var padding = window.getComputedStyle(this.dom.frame).paddingTop; + var iconOffset = Number(padding.replace('px','')); + var x = iconOffset; + var iconWidth = this.options.iconSize; + var iconHeight = 0.75 * this.options.iconSize; + var y = iconOffset + 0.5 * iconHeight + 3; + this.svg.style.width = iconWidth + 5 + iconOffset + 'px'; - /** - * Snap a date to a rounded value. - * The snap intervals are dependent on the current scale and step. - * @param {Date} date the date to be snapped. - * @return {Date} snappedDate - */ - DataStep.prototype.snap = function(date) { - - }; + for (var groupId in this.groups) { + if (this.groups.hasOwnProperty(groupId)) { + if (this.groups[groupId].visible == true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] == true)) { + this.groups[groupId].drawIcon(x, y, this.svgElements, this.svg, iconWidth, iconHeight); + y += iconHeight + this.options.iconSpacing; + } + } + } - /** - * Check if the current value is a major value (for example when the step - * is DAY, a major value is each first day of the MONTH) - * @return {boolean} true if current date is major, else false. - */ - DataStep.prototype.isMajor = function() { - return (this.current % (this.scale * this.majorSteps[this.stepIndex]) == 0); + DOMutil.cleanupElements(this.svgElements); + } }; - module.exports = DataStep; + module.exports = Legend; /***/ }, @@ -28171,6 +28171,10 @@ return /******/ (function(modules) { // webpackBootstrap this.via.x = 0.5 * (this.from.x + this.to.x); this.via.y = 0.5 * (this.from.y + this.to.y); } + else { + this.via.x = 0; + this.via.y = 0; + } }; /** diff --git a/lib/network/Edge.js b/lib/network/Edge.js index 6a7f54d0..4845a5be 100644 --- a/lib/network/Edge.js +++ b/lib/network/Edge.js @@ -1037,6 +1037,10 @@ Edge.prototype.positionBezierNode = function() { this.via.x = 0.5 * (this.from.x + this.to.x); this.via.y = 0.5 * (this.from.y + this.to.y); } + else { + this.via.x = 0; + this.via.y = 0; + } }; /** From c5be64e5586b0bc81aa359837192ef7ae7e7260a Mon Sep 17 00:00:00 2001 From: Alex de Mulder Date: Tue, 23 Dec 2014 12:21:21 +0100 Subject: [PATCH 16/20] added destroy method --- HISTORY.md | 2 +- dist/vis.js | 4015 ++++++++++++++++++++-------------------- docs/network.html | 6 +- lib/network/Network.js | 15 + 4 files changed, 2036 insertions(+), 2002 deletions(-) diff --git a/HISTORY.md b/HISTORY.md index 2861b6c4..19e045ba 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -35,7 +35,7 @@ http://visjs.org strange behaviour in manipulation mode - Better cleanup after reconnecting edges in manipulation mode - Fixed recursion error with smooth edges that are connected to non-existent nodes - +- Added destroy method. ## 2014-11-28, version 3.7.1 diff --git a/dist/vis.js b/dist/vis.js index 12aa0608..afc2ace1 100644 --- a/dist/vis.js +++ b/dist/vis.js @@ -137,13 +137,13 @@ return /******/ (function(modules) { // webpackBootstrap // Network exports.Network = __webpack_require__(51); exports.network = { - Edge: __webpack_require__(57), + Edge: __webpack_require__(52), Groups: __webpack_require__(54), Images: __webpack_require__(55), - Node: __webpack_require__(56), - Popup: __webpack_require__(58), - dotparser: __webpack_require__(52), - gephiParser: __webpack_require__(53) + Node: __webpack_require__(53), + Popup: __webpack_require__(56), + dotparser: __webpack_require__(57), + gephiParser: __webpack_require__(58) }; // Deprecated since v3.0.0 @@ -22475,13 +22475,13 @@ return /******/ (function(modules) { // webpackBootstrap var hammerUtil = __webpack_require__(22); var DataSet = __webpack_require__(7); var DataView = __webpack_require__(9); - var dotparser = __webpack_require__(52); - var gephiParser = __webpack_require__(53); + var dotparser = __webpack_require__(57); + var gephiParser = __webpack_require__(58); var Groups = __webpack_require__(54); var Images = __webpack_require__(55); - var Node = __webpack_require__(56); - var Edge = __webpack_require__(57); - var Popup = __webpack_require__(58); + var Node = __webpack_require__(53); + var Edge = __webpack_require__(52); + var Popup = __webpack_require__(56); var MixinLoader = __webpack_require__(59); var Activator = __webpack_require__(35); var locales = __webpack_require__(70); @@ -23305,6 +23305,21 @@ return /******/ (function(modules) { // webpackBootstrap } }; + + Network.prototype.destroy = function() { + // remove keybindings + this.keycharm.reset(); + + // clear hammer bindings + this.hammer.dispose(); + + // clear events + this.off(); + + + } + + /** * Get the pointer location from a touch location * @param {{pageX: Number, pageY: Number}} touch @@ -25064,1048 +25079,1219 @@ return /******/ (function(modules) { // webpackBootstrap /* 52 */ /***/ function(module, exports, __webpack_require__) { + var util = __webpack_require__(1); + var Node = __webpack_require__(53); + /** - * Parse a text source containing data in DOT language into a JSON object. - * The object contains two lists: one with nodes and one with edges. - * - * DOT language reference: http://www.graphviz.org/doc/info/lang.html + * @class Edge * - * @param {String} data Text containing a graph in DOT-notation - * @return {Object} graph An object containing two parameters: - * {Object[]} nodes - * {Object[]} edges + * A edge connects two nodes + * @param {Object} properties Object with properties. Must contain + * At least properties from and to. + * Available properties: from (number), + * to (number), label (string, color (string), + * width (number), style (string), + * length (number), title (string) + * @param {Network} network A Network object, used to find and edge to + * nodes. + * @param {Object} constants An object with default values for + * example for the color */ - function parseDOT (data) { - dot = data; - return parseGraph(); - } + function Edge (properties, network, networkConstants) { + if (!network) { + throw "No network provided"; + } + var fields = ['edges','physics']; + var constants = util.selectiveBridgeObject(fields,networkConstants); + this.options = constants.edges; + this.physics = constants.physics; + this.options['smoothCurves'] = networkConstants['smoothCurves']; - // token types enumeration - var TOKENTYPE = { - NULL : 0, - DELIMITER : 1, - IDENTIFIER: 2, - UNKNOWN : 3 - }; - // map with all delimiters - var DELIMITERS = { - '{': true, - '}': true, - '[': true, - ']': true, - ';': true, - '=': true, - ',': true, + this.network = network; - '->': true, - '--': true - }; + // initialize variables + this.id = undefined; + this.fromId = undefined; + this.toId = undefined; + this.title = undefined; + this.widthSelected = this.options.width * this.options.widthSelectionMultiplier; + this.value = undefined; + this.selected = false; + this.hover = false; + this.labelDimensions = {top:0,left:0,width:0,height:0,yLine:0}; // could be cached + this.dirtyLabel = true; - var dot = ''; // current dot file - var index = 0; // current index in dot file - var c = ''; // current token character in expr - var token = ''; // current token - var tokenType = TOKENTYPE.NULL; // type of the token + this.from = null; // a node + this.to = null; // a node + this.via = null; // a temp node - /** - * Get the first character from the dot file. - * The character is stored into the char c. If the end of the dot file is - * reached, the function puts an empty string in c. - */ - function first() { - index = 0; - c = dot.charAt(0); - } + this.fromBackup = null; // used to clean up after reconnect + this.toBackup = null;; // used to clean up after reconnect - /** - * Get the next character from the dot file. - * The character is stored into the char c. If the end of the dot file is - * reached, the function puts an empty string in c. - */ - function next() { - index++; - c = dot.charAt(index); - } + // we use this to be able to reconnect the edge to a cluster if its node is put into a cluster + // by storing the original information we can revert to the original connection when the cluser is opened. + this.originalFromId = []; + this.originalToId = []; - /** - * Preview the next character from the dot file. - * @return {String} cNext - */ - function nextPreview() { - return dot.charAt(index + 1); - } + this.connected = false; - /** - * Test whether given character is alphabetic or numeric - * @param {String} c - * @return {Boolean} isAlphaNumeric - */ - var regexAlphaNumeric = /[a-zA-Z_0-9.:#]/; - function isAlphaNumeric(c) { - return regexAlphaNumeric.test(c); + this.widthFixed = false; + this.lengthFixed = false; + + this.setProperties(properties); + + this.controlNodesEnabled = false; + this.controlNodes = {from:null, to:null, positions:{}}; + this.connectedNode = null; } /** - * Merge all properties of object b into object b - * @param {Object} a - * @param {Object} b - * @return {Object} a + * Set or overwrite properties for the edge + * @param {Object} properties an object with properties + * @param {Object} constants and object with default, global properties */ - function merge (a, b) { - if (!a) { - a = {}; + Edge.prototype.setProperties = function(properties) { + if (!properties) { + return; } - if (b) { - for (var name in b) { - if (b.hasOwnProperty(name)) { - a[name] = b[name]; - } + var fields = ['style','fontSize','fontFace','fontColor','fontFill','width', + 'widthSelectionMultiplier','hoverWidth','arrowScaleFactor','dash','inheritColor' + ]; + util.selectiveDeepExtend(fields, this.options, properties); + + if (properties.from !== undefined) {this.fromId = properties.from;} + if (properties.to !== undefined) {this.toId = properties.to;} + + if (properties.id !== undefined) {this.id = properties.id;} + if (properties.label !== undefined) {this.label = properties.label; this.dirtyLabel = true;} + + if (properties.title !== undefined) {this.title = properties.title;} + if (properties.value !== undefined) {this.value = properties.value;} + if (properties.length !== undefined) {this.physics.springLength = properties.length;} + + if (properties.color !== undefined) { + this.options.inheritColor = false; + if (util.isString(properties.color)) { + this.options.color.color = properties.color; + this.options.color.highlight = properties.color; + } + else { + if (properties.color.color !== undefined) {this.options.color.color = properties.color.color;} + if (properties.color.highlight !== undefined) {this.options.color.highlight = properties.color.highlight;} + if (properties.color.hover !== undefined) {this.options.color.hover = properties.color.hover;} } } - return a; - } + + // A node is connected when it has a from and to node. + this.connect(); + + this.widthFixed = this.widthFixed || (properties.width !== undefined); + this.lengthFixed = this.lengthFixed || (properties.length !== undefined); + + this.widthSelected = this.options.width* this.options.widthSelectionMultiplier; + + // set draw method based on style + switch (this.options.style) { + case 'line': this.draw = this._drawLine; break; + case 'arrow': this.draw = this._drawArrow; break; + case 'arrow-center': this.draw = this._drawArrowCenter; break; + case 'dash-line': this.draw = this._drawDashLine; break; + default: this.draw = this._drawLine; break; + } + }; /** - * Set a value in an object, where the provided parameter name can be a - * path with nested parameters. For example: - * - * var obj = {a: 2}; - * setValue(obj, 'b.c', 3); // obj = {a: 2, b: {c: 3}} - * - * @param {Object} obj - * @param {String} path A parameter name or dot-separated parameter path, - * like "color.highlight.border". - * @param {*} value + * Connect an edge to its nodes */ - function setValue(obj, path, value) { - var keys = path.split('.'); - var o = obj; - while (keys.length) { - var key = keys.shift(); - if (keys.length) { - // this isn't the end point - if (!o[key]) { - o[key] = {}; - } - o = o[key]; + Edge.prototype.connect = function () { + this.disconnect(); + + this.from = this.network.nodes[this.fromId] || null; + this.to = this.network.nodes[this.toId] || null; + this.connected = (this.from && this.to); + + if (this.connected) { + this.from.attachEdge(this); + this.to.attachEdge(this); + } + else { + if (this.from) { + this.from.detachEdge(this); } - else { - // this is the end point - o[key] = value; + if (this.to) { + this.to.detachEdge(this); } } - } + }; /** - * Add a node to a graph object. If there is already a node with - * the same id, their attributes will be merged. - * @param {Object} graph - * @param {Object} node + * Disconnect an edge from its nodes */ - function addNode(graph, node) { - var i, len; - var current = null; + Edge.prototype.disconnect = function () { + if (this.from) { + this.from.detachEdge(this); + this.from = null; + } + if (this.to) { + this.to.detachEdge(this); + this.to = null; + } - // find root graph (in case of subgraph) - var graphs = [graph]; // list with all graphs from current graph to root graph - var root = graph; - while (root.parent) { - graphs.push(root.parent); - root = root.parent; - } - - // find existing node (at root level) by its id - if (root.nodes) { - for (i = 0, len = root.nodes.length; i < len; i++) { - if (node.id === root.nodes[i].id) { - current = root.nodes[i]; - break; - } - } - } + this.connected = false; + }; - if (!current) { - // this is a new node - current = { - id: node.id - }; - if (graph.node) { - // clone default attributes - current.attr = merge(current.attr, graph.node); - } - } + /** + * get the title of this edge. + * @return {string} title The title of the edge, or undefined when no title + * has been set. + */ + Edge.prototype.getTitle = function() { + return typeof this.title === "function" ? this.title() : this.title; + }; - // add node to this (sub)graph and all its parent graphs - for (i = graphs.length - 1; i >= 0; i--) { - var g = graphs[i]; - if (!g.nodes) { - g.nodes = []; - } - if (g.nodes.indexOf(current) == -1) { - g.nodes.push(current); - } - } + /** + * Retrieve the value of the edge. Can be undefined + * @return {Number} value + */ + Edge.prototype.getValue = function() { + return this.value; + }; - // merge attributes - if (node.attr) { - current.attr = merge(current.attr, node.attr); + /** + * Adjust the value range of the edge. The edge will adjust it's width + * based on its value. + * @param {Number} min + * @param {Number} max + */ + Edge.prototype.setValueRange = function(min, max) { + if (!this.widthFixed && this.value !== undefined) { + var scale = (this.options.widthMax - this.options.widthMin) / (max - min); + this.options.width= (this.value - min) * scale + this.options.widthMin; + this.widthSelected = this.options.width* this.options.widthSelectionMultiplier; } - } + }; /** - * Add an edge to a graph object - * @param {Object} graph - * @param {Object} edge + * Redraw a edge + * Draw this edge in the given canvas + * The 2d context of a HTML canvas can be retrieved by canvas.getContext("2d"); + * @param {CanvasRenderingContext2D} ctx */ - function addEdge(graph, edge) { - if (!graph.edges) { - graph.edges = []; - } - graph.edges.push(edge); - if (graph.edge) { - var attr = merge({}, graph.edge); // clone default attributes - edge.attr = merge(attr, edge.attr); // merge attributes - } - } + Edge.prototype.draw = function(ctx) { + throw "Method draw not initialized in edge"; + }; /** - * Create an edge to a graph object - * @param {Object} graph - * @param {String | Number | Object} from - * @param {String | Number | Object} to - * @param {String} type - * @param {Object | null} attr - * @return {Object} edge + * Check if this object is overlapping with the provided object + * @param {Object} obj an object with parameters left, top + * @return {boolean} True if location is located on the edge */ - function createEdge(graph, from, to, type, attr) { - var edge = { - from: from, - to: to, - type: type - }; + Edge.prototype.isOverlappingWith = function(obj) { + if (this.connected) { + var distMax = 10; + var xFrom = this.from.x; + var yFrom = this.from.y; + var xTo = this.to.x; + var yTo = this.to.y; + var xObj = obj.left; + var yObj = obj.top; - if (graph.edge) { - edge.attr = merge({}, graph.edge); // clone default attributes + var dist = this._getDistanceToEdge(xFrom, yFrom, xTo, yTo, xObj, yObj); + + return (dist < distMax); } - edge.attr = merge(edge.attr || {}, attr); // merge attributes + else { + return false + } + }; + + Edge.prototype._getColor = function() { + var colorObj = this.options.color; + if (this.options.inheritColor == "to") { + colorObj = { + highlight: this.to.options.color.highlight.border, + hover: this.to.options.color.hover.border, + color: this.to.options.color.border + }; + } + else if (this.options.inheritColor == "from" || this.options.inheritColor == true) { + colorObj = { + highlight: this.from.options.color.highlight.border, + hover: this.from.options.color.hover.border, + color: this.from.options.color.border + }; + } + + if (this.selected == true) {return colorObj.highlight;} + else if (this.hover == true) {return colorObj.hover;} + else {return colorObj.color;} + }; - return edge; - } /** - * Get next token in the current dot file. - * The token and token type are available as token and tokenType + * Redraw a edge as a line + * Draw this edge in the given canvas + * The 2d context of a HTML canvas can be retrieved by canvas.getContext("2d"); + * @param {CanvasRenderingContext2D} ctx + * @private */ - function getToken() { - tokenType = TOKENTYPE.NULL; - token = ''; - - // skip over whitespaces - while (c == ' ' || c == '\t' || c == '\n' || c == '\r') { // space, tab, enter - next(); - } + Edge.prototype._drawLine = function(ctx) { + // set style + ctx.strokeStyle = this._getColor(); + ctx.lineWidth = this._getLineWidth(); - do { - var isComment = false; + if (this.from != this.to) { + // draw line + var via = this._line(ctx); - // skip comment - if (c == '#') { - // find the previous non-space character - var i = index - 1; - while (dot.charAt(i) == ' ' || dot.charAt(i) == '\t') { - i--; + // draw label + var point; + if (this.label) { + if (this.options.smoothCurves.enabled == true && via != null) { + var midpointX = 0.5*(0.5*(this.from.x + via.x) + 0.5*(this.to.x + via.x)); + var midpointY = 0.5*(0.5*(this.from.y + via.y) + 0.5*(this.to.y + via.y)); + point = {x:midpointX, y:midpointY}; } - if (dot.charAt(i) == '\n' || dot.charAt(i) == '') { - // the # is at the start of a line, this is indeed a line comment - while (c != '' && c != '\n') { - next(); - } - isComment = true; + else { + point = this._pointOnLine(0.5); } + this._label(ctx, this.label, point.x, point.y); } - if (c == '/' && nextPreview() == '/') { - // skip line comment - while (c != '' && c != '\n') { - next(); - } - isComment = true; + } + else { + var x, y; + var radius = this.physics.springLength / 4; + var node = this.from; + if (!node.width) { + node.resize(ctx); } - if (c == '/' && nextPreview() == '*') { - // skip block comment - while (c != '') { - if (c == '*' && nextPreview() == '/') { - // end of block comment found. skip these last two characters - next(); - next(); - break; - } - else { - next(); - } - } - isComment = true; + if (node.width > node.height) { + x = node.x + node.width / 2; + y = node.y - radius; } - - // skip over whitespaces - while (c == ' ' || c == '\t' || c == '\n' || c == '\r') { // space, tab, enter - next(); + else { + x = node.x + radius; + y = node.y - node.height / 2; } + this._circle(ctx, x, y, radius); + point = this._pointOnCircle(x, y, radius, 0.5); + this._label(ctx, this.label, point.x, point.y); } - while (isComment); + }; - // check for end of dot file - if (c == '') { - // token is still empty - tokenType = TOKENTYPE.DELIMITER; - return; + /** + * Get the line width of the edge. Depends on width and whether one of the + * connected nodes is selected. + * @return {Number} width + * @private + */ + Edge.prototype._getLineWidth = function() { + if (this.selected == true) { + return Math.max(Math.min(this.widthSelected, this.options.widthMax), 0.3*this.networkScaleInv); } - - // check for delimiters consisting of 2 characters - var c2 = c + nextPreview(); - if (DELIMITERS[c2]) { - tokenType = TOKENTYPE.DELIMITER; - token = c2; - next(); - next(); - return; - } - - // check for delimiters consisting of 1 character - if (DELIMITERS[c]) { - tokenType = TOKENTYPE.DELIMITER; - token = c; - next(); - return; + else { + if (this.hover == true) { + return Math.max(Math.min(this.options.hoverWidth, this.options.widthMax), 0.3*this.networkScaleInv); + } + else { + return Math.max(this.options.width, 0.3*this.networkScaleInv); + } } + }; - // check for an identifier (number or string) - // TODO: more precise parsing of numbers/strings (and the port separator ':') - if (isAlphaNumeric(c) || c == '-') { - token += c; - next(); + Edge.prototype._getViaCoordinates = function () { + var xVia = null; + var yVia = null; + var factor = this.options.smoothCurves.roundness; + var type = this.options.smoothCurves.type; - while (isAlphaNumeric(c)) { - token += c; - next(); + var dx = Math.abs(this.from.x - this.to.x); + var dy = Math.abs(this.from.y - this.to.y); + if (type == 'discrete' || type == 'diagonalCross') { + if (Math.abs(this.from.x - this.to.x) < Math.abs(this.from.y - this.to.y)) { + if (this.from.y > this.to.y) { + if (this.from.x < this.to.x) { + xVia = this.from.x + factor * dy; + yVia = this.from.y - factor * dy; + } + else if (this.from.x > this.to.x) { + xVia = this.from.x - factor * dy; + yVia = this.from.y - factor * dy; + } + } + else if (this.from.y < this.to.y) { + if (this.from.x < this.to.x) { + xVia = this.from.x + factor * dy; + yVia = this.from.y + factor * dy; + } + else if (this.from.x > this.to.x) { + xVia = this.from.x - factor * dy; + yVia = this.from.y + factor * dy; + } + } + if (type == "discrete") { + xVia = dx < factor * dy ? this.from.x : xVia; + } } - if (token == 'false') { - token = false; // convert to boolean + else if (Math.abs(this.from.x - this.to.x) > Math.abs(this.from.y - this.to.y)) { + if (this.from.y > this.to.y) { + if (this.from.x < this.to.x) { + xVia = this.from.x + factor * dx; + yVia = this.from.y - factor * dx; + } + else if (this.from.x > this.to.x) { + xVia = this.from.x - factor * dx; + yVia = this.from.y - factor * dx; + } + } + else if (this.from.y < this.to.y) { + if (this.from.x < this.to.x) { + xVia = this.from.x + factor * dx; + yVia = this.from.y + factor * dx; + } + else if (this.from.x > this.to.x) { + xVia = this.from.x - factor * dx; + yVia = this.from.y + factor * dx; + } + } + if (type == "discrete") { + yVia = dy < factor * dx ? this.from.y : yVia; + } } - else if (token == 'true') { - token = true; // convert to boolean + } + else if (type == "straightCross") { + if (Math.abs(this.from.x - this.to.x) < Math.abs(this.from.y - this.to.y)) { // up - down + xVia = this.from.x; + if (this.from.y < this.to.y) { + yVia = this.to.y - (1-factor) * dy; + } + else { + yVia = this.to.y + (1-factor) * dy; + } } - else if (!isNaN(Number(token))) { - token = Number(token); // convert to number + else if (Math.abs(this.from.x - this.to.x) > Math.abs(this.from.y - this.to.y)) { // left - right + if (this.from.x < this.to.x) { + xVia = this.to.x - (1-factor) * dx; + } + else { + xVia = this.to.x + (1-factor) * dx; + } + yVia = this.from.y; } - tokenType = TOKENTYPE.IDENTIFIER; - return; } - - // check for a string enclosed by double quotes - if (c == '"') { - next(); - while (c != '' && (c != '"' || (c == '"' && nextPreview() == '"'))) { - token += c; - if (c == '"') { // skip the escape character - next(); + else if (type == 'horizontal') { + if (this.from.x < this.to.x) { + xVia = this.to.x - (1-factor) * dx; + } + else { + xVia = this.to.x + (1-factor) * dx; + } + yVia = this.from.y; + } + else if (type == 'vertical') { + xVia = this.from.x; + if (this.from.y < this.to.y) { + yVia = this.to.y - (1-factor) * dy; + } + else { + yVia = this.to.y + (1-factor) * dy; + } + } + else { // continuous + if (Math.abs(this.from.x - this.to.x) < Math.abs(this.from.y - this.to.y)) { + if (this.from.y > this.to.y) { + if (this.from.x < this.to.x) { + // console.log(1) + xVia = this.from.x + factor * dy; + yVia = this.from.y - factor * dy; + xVia = this.to.x < xVia ? this.to.x : xVia; + } + else if (this.from.x > this.to.x) { + // console.log(2) + xVia = this.from.x - factor * dy; + yVia = this.from.y - factor * dy; + xVia = this.to.x > xVia ? this.to.x :xVia; + } + } + else if (this.from.y < this.to.y) { + if (this.from.x < this.to.x) { + // console.log(3) + xVia = this.from.x + factor * dy; + yVia = this.from.y + factor * dy; + xVia = this.to.x < xVia ? this.to.x : xVia; + } + else if (this.from.x > this.to.x) { + // console.log(4, this.from.x, this.to.x) + xVia = this.from.x - factor * dy; + yVia = this.from.y + factor * dy; + xVia = this.to.x > xVia ? this.to.x : xVia; + } } - next(); } - if (c != '"') { - throw newSyntaxError('End of string " expected'); + else if (Math.abs(this.from.x - this.to.x) > Math.abs(this.from.y - this.to.y)) { + if (this.from.y > this.to.y) { + if (this.from.x < this.to.x) { + // console.log(5) + xVia = this.from.x + factor * dx; + yVia = this.from.y - factor * dx; + yVia = this.to.y > yVia ? this.to.y : yVia; + } + else if (this.from.x > this.to.x) { + // console.log(6) + xVia = this.from.x - factor * dx; + yVia = this.from.y - factor * dx; + yVia = this.to.y > yVia ? this.to.y : yVia; + } + } + else if (this.from.y < this.to.y) { + if (this.from.x < this.to.x) { + // console.log(7) + xVia = this.from.x + factor * dx; + yVia = this.from.y + factor * dx; + yVia = this.to.y < yVia ? this.to.y : yVia; + } + else if (this.from.x > this.to.x) { + // console.log(8) + xVia = this.from.x - factor * dx; + yVia = this.from.y + factor * dx; + yVia = this.to.y < yVia ? this.to.y : yVia; + } + } } - next(); - tokenType = TOKENTYPE.IDENTIFIER; - return; } - // something unknown is found, wrong characters, a syntax error - tokenType = TOKENTYPE.UNKNOWN; - while (c != '') { - token += c; - next(); - } - throw new SyntaxError('Syntax error in part "' + chop(token, 30) + '"'); - } + + return {x:xVia, y:yVia}; + }; /** - * Parse a graph. - * @returns {Object} graph + * Draw a line between two nodes + * @param {CanvasRenderingContext2D} ctx + * @private */ - function parseGraph() { - var graph = {}; - - first(); - getToken(); - - // optional strict keyword - if (token == 'strict') { - graph.strict = true; - getToken(); + Edge.prototype._line = function (ctx) { + // draw a straight line + ctx.beginPath(); + ctx.moveTo(this.from.x, this.from.y); + if (this.options.smoothCurves.enabled == true) { + if (this.options.smoothCurves.dynamic == false) { + var via = this._getViaCoordinates(); + if (via.x == null) { + ctx.lineTo(this.to.x, this.to.y); + ctx.stroke(); + return null; + } + else { + // this.via.x = via.x; + // this.via.y = via.y; + ctx.quadraticCurveTo(via.x,via.y,this.to.x, this.to.y); + ctx.stroke(); + return via; + } + } + else { + ctx.quadraticCurveTo(this.via.x,this.via.y,this.to.x, this.to.y); + ctx.stroke(); + return this.via; + } + } + else { + ctx.lineTo(this.to.x, this.to.y); + ctx.stroke(); + return null; } + }; - // graph or digraph keyword - if (token == 'graph' || token == 'digraph') { - graph.type = token; - getToken(); - } - - // optional graph id - if (tokenType == TOKENTYPE.IDENTIFIER) { - graph.id = token; - getToken(); - } + /** + * Draw a line from a node to itself, a circle + * @param {CanvasRenderingContext2D} ctx + * @param {Number} x + * @param {Number} y + * @param {Number} radius + * @private + */ + Edge.prototype._circle = function (ctx, x, y, radius) { + // draw a circle + ctx.beginPath(); + ctx.arc(x, y, radius, 0, 2 * Math.PI, false); + ctx.stroke(); + }; - // open angle bracket - if (token != '{') { - throw newSyntaxError('Angle bracket { expected'); - } - getToken(); + /** + * Draw label with white background and with the middle at (x, y) + * @param {CanvasRenderingContext2D} ctx + * @param {String} text + * @param {Number} x + * @param {Number} y + * @private + */ + Edge.prototype._label = function (ctx, text, x, y) { + if (text) { + ctx.font = ((this.from.selected || this.to.selected) ? "bold " : "") + + this.options.fontSize + "px " + this.options.fontFace; + var yLine; - // statements - parseStatements(graph); + if (this.dirtyLabel == true) { + var lines = String(text).split('\n'); + var lineCount = lines.length; + var fontSize = (Number(this.options.fontSize) + 4); + yLine = y + (1 - lineCount) / 2 * fontSize; - // close angle bracket - if (token != '}') { - throw newSyntaxError('Angle bracket } expected'); - } - getToken(); + var width = ctx.measureText(lines[0]).width; + for (var i = 1; i < lineCount; i++) { + var lineWidth = ctx.measureText(lines[i]).width; + width = lineWidth > width ? lineWidth : width; + } + var height = this.options.fontSize * lineCount; + var left = x - width / 2; + var top = y - height / 2; - // end of file - if (token !== '') { - throw newSyntaxError('End of file expected'); - } - getToken(); + // cache + this.labelDimensions = {top:top,left:left,width:width,height:height,yLine:yLine}; + } - // remove temporary default properties - delete graph.node; - delete graph.edge; - delete graph.graph; - return graph; - } + if (this.options.fontFill !== undefined && this.options.fontFill !== null && this.options.fontFill !== "none") { + ctx.fillStyle = this.options.fontFill; + ctx.fillRect(this.labelDimensions.left, + this.labelDimensions.top, + this.labelDimensions.width, + this.labelDimensions.height); + } - /** - * Parse a list with statements. - * @param {Object} graph - */ - function parseStatements (graph) { - while (token !== '' && token != '}') { - parseStatement(graph); - if (token == ';') { - getToken(); + // draw text + ctx.fillStyle = this.options.fontColor || "black"; + ctx.textAlign = "center"; + ctx.textBaseline = "middle"; + yLine = this.labelDimensions.yLine; + for (var i = 0; i < lineCount; i++) { + ctx.fillText(lines[i], x, yLine); + yLine += fontSize; } } - } + }; /** - * Parse a single statement. Can be a an attribute statement, node - * statement, a series of node statements and edge statements, or a - * parameter. - * @param {Object} graph + * Redraw a edge as a dashed line + * Draw this edge in the given canvas + * @author David Jordan + * @date 2012-08-08 + * The 2d context of a HTML canvas can be retrieved by canvas.getContext("2d"); + * @param {CanvasRenderingContext2D} ctx + * @private */ - function parseStatement(graph) { - // parse subgraph - var subgraph = parseSubgraph(graph); - if (subgraph) { - // edge statements - parseEdge(graph, subgraph); - - return; - } + Edge.prototype._drawDashLine = function(ctx) { + // set style + ctx.strokeStyle = this._getColor(); + ctx.lineWidth = this._getLineWidth(); - // parse an attribute statement - var attr = parseAttributeStatement(graph); - if (attr) { - return; - } + var via = null; + // only firefox and chrome support this method, else we use the legacy one. + if (ctx.mozDash !== undefined || ctx.setLineDash !== undefined) { + // configure the dash pattern + var pattern = [0]; + if (this.options.dash.length !== undefined && this.options.dash.gap !== undefined) { + pattern = [this.options.dash.length,this.options.dash.gap]; + } + else { + pattern = [5,5]; + } - // parse node - if (tokenType != TOKENTYPE.IDENTIFIER) { - throw newSyntaxError('Identifier expected'); - } - var id = token; // id can be a string or a number - getToken(); + // set dash settings for chrome or firefox + if (typeof ctx.setLineDash !== 'undefined') { //Chrome + ctx.setLineDash(pattern); + ctx.lineDashOffset = 0; - if (token == '=') { - // id statement - getToken(); - if (tokenType != TOKENTYPE.IDENTIFIER) { - throw newSyntaxError('Identifier expected'); + } else { //Firefox + ctx.mozDash = pattern; + ctx.mozDashOffset = 0; } - graph[id] = token; - getToken(); - // TODO: implement comma separated list with "a_list: ID=ID [','] [a_list] " - } - else { - parseNodeStatement(graph, id); - } - } - /** - * Parse a subgraph - * @param {Object} graph parent graph object - * @return {Object | null} subgraph - */ - function parseSubgraph (graph) { - var subgraph = null; + // draw the line + via = this._line(ctx); - // optional subgraph keyword - if (token == 'subgraph') { - subgraph = {}; - subgraph.type = 'subgraph'; - getToken(); + // restore the dash settings. + if (typeof ctx.setLineDash !== 'undefined') { //Chrome + ctx.setLineDash([0]); + ctx.lineDashOffset = 0; - // optional graph id - if (tokenType == TOKENTYPE.IDENTIFIER) { - subgraph.id = token; - getToken(); + } else { //Firefox + ctx.mozDash = [0]; + ctx.mozDashOffset = 0; } } - - // open angle bracket - if (token == '{') { - getToken(); - - if (!subgraph) { - subgraph = {}; + else { // unsupporting smooth lines + // draw dashed line + ctx.beginPath(); + ctx.lineCap = 'round'; + if (this.options.dash.altLength !== undefined) //If an alt dash value has been set add to the array this value + { + ctx.dashedLine(this.from.x,this.from.y,this.to.x,this.to.y, + [this.options.dash.length,this.options.dash.gap,this.options.dash.altLength,this.options.dash.gap]); } - subgraph.parent = graph; - subgraph.node = graph.node; - subgraph.edge = graph.edge; - subgraph.graph = graph.graph; - - // statements - parseStatements(subgraph); - - // close angle bracket - if (token != '}') { - throw newSyntaxError('Angle bracket } expected'); + else if (this.options.dash.length !== undefined && this.options.dash.gap !== undefined) //If a dash and gap value has been set add to the array this value + { + ctx.dashedLine(this.from.x,this.from.y,this.to.x,this.to.y, + [this.options.dash.length,this.options.dash.gap]); } - getToken(); - - // remove temporary default properties - delete subgraph.node; - delete subgraph.edge; - delete subgraph.graph; - delete subgraph.parent; + else //If all else fails draw a line + { + ctx.moveTo(this.from.x, this.from.y); + ctx.lineTo(this.to.x, this.to.y); + } + ctx.stroke(); + } - // register at the parent graph - if (!graph.subgraphs) { - graph.subgraphs = []; + // draw label + if (this.label) { + var point; + if (this.options.smoothCurves.enabled == true && via != null) { + var midpointX = 0.5*(0.5*(this.from.x + via.x) + 0.5*(this.to.x + via.x)); + var midpointY = 0.5*(0.5*(this.from.y + via.y) + 0.5*(this.to.y + via.y)); + point = {x:midpointX, y:midpointY}; } - graph.subgraphs.push(subgraph); + else { + point = this._pointOnLine(0.5); + } + this._label(ctx, this.label, point.x, point.y); } - - return subgraph; - } + }; /** - * parse an attribute statement like "node [shape=circle fontSize=16]". - * Available keywords are 'node', 'edge', 'graph'. - * The previous list with default attributes will be replaced - * @param {Object} graph - * @returns {String | null} keyword Returns the name of the parsed attribute - * (node, edge, graph), or null if nothing - * is parsed. + * Get a point on a line + * @param {Number} percentage. Value between 0 (line start) and 1 (line end) + * @return {Object} point + * @private */ - function parseAttributeStatement (graph) { - // attribute statements - if (token == 'node') { - getToken(); - - // node attributes - graph.node = parseAttributeList(); - return 'node'; - } - else if (token == 'edge') { - getToken(); - - // edge attributes - graph.edge = parseAttributeList(); - return 'edge'; - } - else if (token == 'graph') { - getToken(); - - // graph attributes - graph.graph = parseAttributeList(); - return 'graph'; + Edge.prototype._pointOnLine = function (percentage) { + return { + x: (1 - percentage) * this.from.x + percentage * this.to.x, + y: (1 - percentage) * this.from.y + percentage * this.to.y } - - return null; - } + }; /** - * parse a node statement - * @param {Object} graph - * @param {String | Number} id + * Get a point on a circle + * @param {Number} x + * @param {Number} y + * @param {Number} radius + * @param {Number} percentage. Value between 0 (line start) and 1 (line end) + * @return {Object} point + * @private */ - function parseNodeStatement(graph, id) { - // node statement - var node = { - id: id - }; - var attr = parseAttributeList(); - if (attr) { - node.attr = attr; + Edge.prototype._pointOnCircle = function (x, y, radius, percentage) { + var angle = (percentage - 3/8) * 2 * Math.PI; + return { + x: x + radius * Math.cos(angle), + y: y - radius * Math.sin(angle) } - addNode(graph, node); - - // edge statements - parseEdge(graph, id); - } + }; /** - * Parse an edge or a series of edges - * @param {Object} graph - * @param {String | Number} from Id of the from node + * Redraw a edge as a line with an arrow halfway the line + * Draw this edge in the given canvas + * The 2d context of a HTML canvas can be retrieved by canvas.getContext("2d"); + * @param {CanvasRenderingContext2D} ctx + * @private */ - function parseEdge(graph, from) { - while (token == '->' || token == '--') { - var to; - var type = token; - getToken(); + Edge.prototype._drawArrowCenter = function(ctx) { + var point; + // set style + ctx.strokeStyle = this._getColor(); + ctx.fillStyle = ctx.strokeStyle; + ctx.lineWidth = this._getLineWidth(); - var subgraph = parseSubgraph(graph); - if (subgraph) { - to = subgraph; + if (this.from != this.to) { + // draw line + var via = this._line(ctx); + + var angle = Math.atan2((this.to.y - this.from.y), (this.to.x - this.from.x)); + var length = (10 + 5 * this.options.width) * this.options.arrowScaleFactor; + // draw an arrow halfway the line + if (this.options.smoothCurves.enabled == true && via != null) { + var midpointX = 0.5*(0.5*(this.from.x + via.x) + 0.5*(this.to.x + via.x)); + var midpointY = 0.5*(0.5*(this.from.y + via.y) + 0.5*(this.to.y + via.y)); + point = {x:midpointX, y:midpointY}; } else { - if (tokenType != TOKENTYPE.IDENTIFIER) { - throw newSyntaxError('Identifier or subgraph expected'); - } - to = token; - addNode(graph, { - id: to - }); - getToken(); + point = this._pointOnLine(0.5); } - // parse edge attributes - var attr = parseAttributeList(); + ctx.arrow(point.x, point.y, angle, length); + ctx.fill(); + ctx.stroke(); - // create edge - var edge = createEdge(graph, from, to, type, attr); - addEdge(graph, edge); + // draw label + if (this.label) { + this._label(ctx, this.label, point.x, point.y); + } + } + else { + // draw circle + var x, y; + var radius = 0.25 * Math.max(100,this.physics.springLength); + var node = this.from; + if (!node.width) { + node.resize(ctx); + } + if (node.width > node.height) { + x = node.x + node.width * 0.5; + y = node.y - radius; + } + else { + x = node.x + radius; + y = node.y - node.height * 0.5; + } + this._circle(ctx, x, y, radius); - from = to; + // draw all arrows + var angle = 0.2 * Math.PI; + var length = (10 + 5 * this.options.width) * this.options.arrowScaleFactor; + point = this._pointOnCircle(x, y, radius, 0.5); + ctx.arrow(point.x, point.y, angle, length); + ctx.fill(); + ctx.stroke(); + + // draw label + if (this.label) { + point = this._pointOnCircle(x, y, radius, 0.5); + this._label(ctx, this.label, point.x, point.y); + } } - } + }; + + /** - * Parse a set with attributes, - * for example [label="1.000", shape=solid] - * @return {Object | null} attr + * Redraw a edge as a line with an arrow + * Draw this edge in the given canvas + * The 2d context of a HTML canvas can be retrieved by canvas.getContext("2d"); + * @param {CanvasRenderingContext2D} ctx + * @private */ - function parseAttributeList() { - var attr = null; - - while (token == '[') { - getToken(); - attr = {}; - while (token !== '' && token != ']') { - if (tokenType != TOKENTYPE.IDENTIFIER) { - throw newSyntaxError('Attribute name expected'); - } - var name = token; + Edge.prototype._drawArrow = function(ctx) { + // set style + ctx.strokeStyle = this._getColor(); + ctx.fillStyle = ctx.strokeStyle; + ctx.lineWidth = this._getLineWidth(); - getToken(); - if (token != '=') { - throw newSyntaxError('Equal sign = expected'); - } - getToken(); + var angle, length; + //draw a line + if (this.from != this.to) { + angle = Math.atan2((this.to.y - this.from.y), (this.to.x - this.from.x)); + var dx = (this.to.x - this.from.x); + var dy = (this.to.y - this.from.y); + var edgeSegmentLength = Math.sqrt(dx * dx + dy * dy); - if (tokenType != TOKENTYPE.IDENTIFIER) { - throw newSyntaxError('Attribute value expected'); - } - var value = token; - setValue(attr, name, value); // name can be a path + var fromBorderDist = this.from.distanceToBorder(ctx, angle + Math.PI); + var fromBorderPoint = (edgeSegmentLength - fromBorderDist) / edgeSegmentLength; + var xFrom = (fromBorderPoint) * this.from.x + (1 - fromBorderPoint) * this.to.x; + var yFrom = (fromBorderPoint) * this.from.y + (1 - fromBorderPoint) * this.to.y; - getToken(); - if (token ==',') { - getToken(); - } + var via; + if (this.options.smoothCurves.dynamic == true && this.options.smoothCurves.enabled == true ) { + via = this.via; + } + else if (this.options.smoothCurves.enabled == true) { + via = this._getViaCoordinates(); } - if (token != ']') { - throw newSyntaxError('Bracket ] expected'); + if (this.options.smoothCurves.enabled == true && via.x != null) { + angle = Math.atan2((this.to.y - via.y), (this.to.x - via.x)); + dx = (this.to.x - via.x); + dy = (this.to.y - via.y); + edgeSegmentLength = Math.sqrt(dx * dx + dy * dy); } - getToken(); - } + var toBorderDist = this.to.distanceToBorder(ctx, angle); + var toBorderPoint = (edgeSegmentLength - toBorderDist) / edgeSegmentLength; - return attr; - } + var xTo,yTo; + if (this.options.smoothCurves.enabled == true && via.x != null) { + xTo = (1 - toBorderPoint) * via.x + toBorderPoint * this.to.x; + yTo = (1 - toBorderPoint) * via.y + toBorderPoint * this.to.y; + } + else { + xTo = (1 - toBorderPoint) * this.from.x + toBorderPoint * this.to.x; + yTo = (1 - toBorderPoint) * this.from.y + toBorderPoint * this.to.y; + } - /** - * Create a syntax error with extra information on current token and index. - * @param {String} message - * @returns {SyntaxError} err - */ - function newSyntaxError(message) { - return new SyntaxError(message + ', got "' + chop(token, 30) + '" (char ' + index + ')'); - } + ctx.beginPath(); + ctx.moveTo(xFrom,yFrom); + if (this.options.smoothCurves.enabled == true && via.x != null) { + ctx.quadraticCurveTo(via.x,via.y,xTo, yTo); + } + else { + ctx.lineTo(xTo, yTo); + } + ctx.stroke(); - /** - * Chop off text after a maximum length - * @param {String} text - * @param {Number} maxLength - * @returns {String} - */ - function chop (text, maxLength) { - return (text.length <= maxLength) ? text : (text.substr(0, 27) + '...'); - } + // draw arrow at the end of the line + length = (10 + 5 * this.options.width) * this.options.arrowScaleFactor; + ctx.arrow(xTo, yTo, angle, length); + ctx.fill(); + ctx.stroke(); - /** - * Execute a function fn for each pair of elements in two arrays - * @param {Array | *} array1 - * @param {Array | *} array2 - * @param {function} fn - */ - function forEach2(array1, array2, fn) { - if (Array.isArray(array1)) { - array1.forEach(function (elem1) { - if (Array.isArray(array2)) { - array2.forEach(function (elem2) { - fn(elem1, elem2); - }); + // draw label + if (this.label) { + var point; + if (this.options.smoothCurves.enabled == true && via != null) { + var midpointX = 0.5*(0.5*(this.from.x + via.x) + 0.5*(this.to.x + via.x)); + var midpointY = 0.5*(0.5*(this.from.y + via.y) + 0.5*(this.to.y + via.y)); + point = {x:midpointX, y:midpointY}; } else { - fn(elem1, array2); + point = this._pointOnLine(0.5); } - }); + this._label(ctx, this.label, point.x, point.y); + } } else { - if (Array.isArray(array2)) { - array2.forEach(function (elem2) { - fn(array1, elem2); - }); + // draw circle + var node = this.from; + var x, y, arrow; + var radius = 0.25 * Math.max(100,this.physics.springLength); + if (!node.width) { + node.resize(ctx); + } + if (node.width > node.height) { + x = node.x + node.width * 0.5; + y = node.y - radius; + arrow = { + x: x, + y: node.y, + angle: 0.9 * Math.PI + }; } else { - fn(array1, array2); + x = node.x + radius; + y = node.y - node.height * 0.5; + arrow = { + x: node.x, + y: y, + angle: 0.6 * Math.PI + }; } - } - } + ctx.beginPath(); + // TODO: similarly, for a line without arrows, draw to the border of the nodes instead of the center + ctx.arc(x, y, radius, 0, 2 * Math.PI, false); + ctx.stroke(); - /** - * Convert a string containing a graph in DOT language into a map containing - * with nodes and edges in the format of graph. - * @param {String} data Text containing a graph in DOT-notation - * @return {Object} graphData - */ - function DOTToGraph (data) { - // parse the DOT file - var dotData = parseDOT(data); - var graphData = { - nodes: [], - edges: [], - options: {} - }; + // draw all arrows + var length = (10 + 5 * this.options.width) * this.options.arrowScaleFactor; + ctx.arrow(arrow.x, arrow.y, arrow.angle, length); + ctx.fill(); + ctx.stroke(); - // copy the nodes - if (dotData.nodes) { - dotData.nodes.forEach(function (dotNode) { - var graphNode = { - id: dotNode.id, - label: String(dotNode.label || dotNode.id) - }; - merge(graphNode, dotNode.attr); - if (graphNode.image) { - graphNode.shape = 'image'; - } - graphData.nodes.push(graphNode); - }); + // draw label + if (this.label) { + point = this._pointOnCircle(x, y, radius, 0.5); + this._label(ctx, this.label, point.x, point.y); + } } + }; - // copy the edges - if (dotData.edges) { - /** - * Convert an edge in DOT format to an edge with VisGraph format - * @param {Object} dotEdge - * @returns {Object} graphEdge - */ - var convertEdge = function (dotEdge) { - var graphEdge = { - from: dotEdge.from, - to: dotEdge.to - }; - merge(graphEdge, dotEdge.attr); - graphEdge.style = (dotEdge.type == '->') ? 'arrow' : 'line'; - return graphEdge; - } - dotData.edges.forEach(function (dotEdge) { - var from, to; - if (dotEdge.from instanceof Object) { - from = dotEdge.from.nodes; - } - else { - from = { - id: dotEdge.from - } - } - if (dotEdge.to instanceof Object) { - to = dotEdge.to.nodes; + /** + * Calculate the distance between a point (x3,y3) and a line segment from + * (x1,y1) to (x2,y2). + * http://stackoverflow.com/questions/849211/shortest-distancae-between-a-point-and-a-line-segment + * @param {number} x1 + * @param {number} y1 + * @param {number} x2 + * @param {number} y2 + * @param {number} x3 + * @param {number} y3 + * @private + */ + Edge.prototype._getDistanceToEdge = function (x1,y1, x2,y2, x3,y3) { // x3,y3 is the point + var returnValue = 0; + if (this.from != this.to) { + if (this.options.smoothCurves.enabled == true) { + var xVia, yVia; + if (this.options.smoothCurves.enabled == true && this.options.smoothCurves.dynamic == true) { + xVia = this.via.x; + yVia = this.via.y; } else { - to = { - id: dotEdge.to + var via = this._getViaCoordinates(); + xVia = via.x; + yVia = via.y; + } + var minDistance = 1e9; + var distance; + var i,t,x,y, lastX, lastY; + for (i = 0; i < 10; i++) { + t = 0.1*i; + x = Math.pow(1-t,2)*x1 + (2*t*(1 - t))*xVia + Math.pow(t,2)*x2; + y = Math.pow(1-t,2)*y1 + (2*t*(1 - t))*yVia + Math.pow(t,2)*y2; + if (i > 0) { + distance = this._getDistanceToLine(lastX,lastY,x,y, x3,y3); + minDistance = distance < minDistance ? distance : minDistance; } + lastX = x; lastY = y; } + returnValue = minDistance; + } + else { + returnValue = this._getDistanceToLine(x1,y1,x2,y2,x3,y3); + } + } + else { + var x, y, dx, dy; + var radius = 0.25 * this.physics.springLength; + var node = this.from; + if (node.width > node.height) { + x = node.x + 0.5 * node.width; + y = node.y - radius; + } + else { + x = node.x + radius; + y = node.y - 0.5 * node.height; + } + dx = x - x3; + dy = y - y3; + returnValue = Math.abs(Math.sqrt(dx*dx + dy*dy) - radius); + } - if (dotEdge.from instanceof Object && dotEdge.from.edges) { - dotEdge.from.edges.forEach(function (subEdge) { - var graphEdge = convertEdge(subEdge); - graphData.edges.push(graphEdge); - }); - } + if (this.labelDimensions.left < x3 && + this.labelDimensions.left + this.labelDimensions.width > x3 && + this.labelDimensions.top < y3 && + this.labelDimensions.top + this.labelDimensions.height > y3) { + return 0; + } + else { + return returnValue; + } + }; - forEach2(from, to, function (from, to) { - var subEdge = createEdge(graphData, from.id, to.id, dotEdge.type, dotEdge.attr); - var graphEdge = convertEdge(subEdge); - graphData.edges.push(graphEdge); - }); + Edge.prototype._getDistanceToLine = function(x1,y1,x2,y2,x3,y3) { + var px = x2-x1, + py = y2-y1, + something = px*px + py*py, + u = ((x3 - x1) * px + (y3 - y1) * py) / something; - if (dotEdge.to instanceof Object && dotEdge.to.edges) { - dotEdge.to.edges.forEach(function (subEdge) { - var graphEdge = convertEdge(subEdge); - graphData.edges.push(graphEdge); - }); - } - }); + if (u > 1) { + u = 1; } - - // copy the options - if (dotData.attr) { - graphData.options = dotData.attr; + else if (u < 0) { + u = 0; } - return graphData; - } + var x = x1 + u * px, + y = y1 + u * py, + dx = x - x3, + dy = y - y3; - // exports - exports.parseDOT = parseDOT; - exports.DOTToGraph = DOTToGraph; + //# Note: If the actual distance does not matter, + //# if you only want to compare what this function + //# returns to other results of this function, you + //# can just return the squared distance instead + //# (i.e. remove the sqrt) to gain a little performance + return Math.sqrt(dx*dx + dy*dy); + }; -/***/ }, -/* 53 */ -/***/ function(module, exports, __webpack_require__) { + /** + * This allows the zoom level of the network to influence the rendering + * + * @param scale + */ + Edge.prototype.setScale = function(scale) { + this.networkScaleInv = 1.0/scale; + }; - - function parseGephi(gephiJSON, options) { - var edges = []; - var nodes = []; - this.options = { - edges: { - inheritColor: true - }, - nodes: { - allowedToMove: false, - parseColor: false - } - }; - if (options !== undefined) { - this.options.nodes['allowedToMove'] = options.allowedToMove | false; - this.options.nodes['parseColor'] = options.parseColor | false; - this.options.edges['inheritColor'] = options.inheritColor | true; - } + Edge.prototype.select = function() { + this.selected = true; + }; - var gEdges = gephiJSON.edges; - var gNodes = gephiJSON.nodes; - for (var i = 0; i < gEdges.length; i++) { - var edge = {}; - var gEdge = gEdges[i]; - edge['id'] = gEdge.id; - edge['from'] = gEdge.source; - edge['to'] = gEdge.target; - edge['attributes'] = gEdge.attributes; - // edge['value'] = gEdge.attributes !== undefined ? gEdge.attributes.Weight : undefined; - // edge['width'] = edge['value'] !== undefined ? undefined : edgegEdge.size; - edge['color'] = gEdge.color; - edge['inheritColor'] = edge['color'] !== undefined ? false : this.options.inheritColor; - edges.push(edge); - } + Edge.prototype.unselect = function() { + this.selected = false; + }; - for (var i = 0; i < gNodes.length; i++) { - var node = {}; - var gNode = gNodes[i]; - node['id'] = gNode.id; - node['attributes'] = gNode.attributes; - node['x'] = gNode.x; - node['y'] = gNode.y; - node['label'] = gNode.label; - if (this.options.nodes.parseColor == true) { - node['color'] = gNode.color; - } - else { - node['color'] = gNode.color !== undefined ? {background:gNode.color, border:gNode.color} : undefined; - } - node['radius'] = gNode.size; - node['allowedToMoveX'] = this.options.nodes.allowedToMove; - node['allowedToMoveY'] = this.options.nodes.allowedToMove; - nodes.push(node); + Edge.prototype.positionBezierNode = function() { + if (this.via !== null && this.from !== null && this.to !== null) { + this.via.x = 0.5 * (this.from.x + this.to.x); + this.via.y = 0.5 * (this.from.y + this.to.y); } - - return {nodes:nodes, edges:edges}; - } - - exports.parseGephi = parseGephi; - -/***/ }, -/* 54 */ -/***/ function(module, exports, __webpack_require__) { - - var util = __webpack_require__(1); + else { + this.via.x = 0; + this.via.y = 0; + } + }; /** - * @class Groups - * This class can store groups and properties specific for groups. + * This function draws the control nodes for the manipulator. + * In order to enable this, only set the this.controlNodesEnabled to true. + * @param ctx */ - function Groups() { - this.clear(); - this.defaultIndex = 0; - } - + Edge.prototype._drawControlNodes = function(ctx) { + if (this.controlNodesEnabled == true) { + if (this.controlNodes.from === null && this.controlNodes.to === null) { + var nodeIdFrom = "edgeIdFrom:".concat(this.id); + var nodeIdTo = "edgeIdTo:".concat(this.id); + var constants = { + nodes:{group:'', radius:8}, + physics:{damping:0}, + clustering: {maxNodeSizeIncrements: 0 ,nodeScaling: {width:0, height: 0, radius:0}} + }; + this.controlNodes.from = new Node( + {id:nodeIdFrom, + shape:'dot', + color:{background:'#ff4e00', border:'#3c3c3c', highlight: {background:'#07f968'}} + },{},{},constants); + this.controlNodes.to = new Node( + {id:nodeIdTo, + shape:'dot', + color:{background:'#ff4e00', border:'#3c3c3c', highlight: {background:'#07f968'}} + },{},{},constants); + } - /** - * default constants for group colors - */ - Groups.DEFAULT = [ - {border: "#2B7CE9", background: "#97C2FC", highlight: {border: "#2B7CE9", background: "#D2E5FF"}, hover: {border: "#2B7CE9", background: "#D2E5FF"}}, // blue - {border: "#FFA500", background: "#FFFF00", highlight: {border: "#FFA500", background: "#FFFFA3"}, hover: {border: "#FFA500", background: "#FFFFA3"}}, // yellow - {border: "#FA0A10", background: "#FB7E81", highlight: {border: "#FA0A10", background: "#FFAFB1"}, hover: {border: "#FA0A10", background: "#FFAFB1"}}, // red - {border: "#41A906", background: "#7BE141", highlight: {border: "#41A906", background: "#A1EC76"}, hover: {border: "#41A906", background: "#A1EC76"}}, // green - {border: "#E129F0", background: "#EB7DF4", highlight: {border: "#E129F0", background: "#F0B3F5"}, hover: {border: "#E129F0", background: "#F0B3F5"}}, // magenta - {border: "#7C29F0", background: "#AD85E4", highlight: {border: "#7C29F0", background: "#D3BDF0"}, hover: {border: "#7C29F0", background: "#D3BDF0"}}, // purple - {border: "#C37F00", background: "#FFA807", highlight: {border: "#C37F00", background: "#FFCA66"}, hover: {border: "#C37F00", background: "#FFCA66"}}, // orange - {border: "#4220FB", background: "#6E6EFD", highlight: {border: "#4220FB", background: "#9B9BFD"}, hover: {border: "#4220FB", background: "#9B9BFD"}}, // darkblue - {border: "#FD5A77", background: "#FFC0CB", highlight: {border: "#FD5A77", background: "#FFD1D9"}, hover: {border: "#FD5A77", background: "#FFD1D9"}}, // pink - {border: "#4AD63A", background: "#C2FABC", highlight: {border: "#4AD63A", background: "#E6FFE3"}, hover: {border: "#4AD63A", background: "#E6FFE3"}} // mint - ]; + if (this.controlNodes.from.selected == false && this.controlNodes.to.selected == false) { + this.controlNodes.positions = this.getControlNodePositions(ctx); + this.controlNodes.from.x = this.controlNodes.positions.from.x; + this.controlNodes.from.y = this.controlNodes.positions.from.y; + this.controlNodes.to.x = this.controlNodes.positions.to.x; + this.controlNodes.to.y = this.controlNodes.positions.to.y; + } + this.controlNodes.from.draw(ctx); + this.controlNodes.to.draw(ctx); + } + else { + this.controlNodes = {from:null, to:null, positions:{}}; + } + }; /** - * Clear all groups + * Enable control nodes. + * @private */ - Groups.prototype.clear = function () { - this.groups = {}; - this.groups.length = function() - { - var i = 0; - for ( var p in this ) { - if (this.hasOwnProperty(p)) { - i++; - } - } - return i; - } + Edge.prototype._enableControlNodes = function() { + this.fromBackup = this.from; + this.toBackup = this.to; + this.controlNodesEnabled = true; }; - /** - * get group properties of a groupname. If groupname is not found, a new group - * is added. - * @param {*} groupname Can be a number, string, Date, etc. - * @return {Object} group The created group, containing all group properties + * disable control nodes and remove from dynamicEdges from old node + * @private */ - Groups.prototype.get = function (groupname) { - var group = this.groups[groupname]; - if (group == undefined) { - // create new group - var index = this.defaultIndex % Groups.DEFAULT.length; - this.defaultIndex++; - group = {}; - group.color = Groups.DEFAULT[index]; - this.groups[groupname] = group; + Edge.prototype._disableControlNodes = function() { + this.fromId = this.from.id; + this.toId = this.to.id; + if (this.fromId != this.fromBackup.id) { // from was changed, remove edge from old 'from' node dynamic edges + this.fromBackup.detachEdge(this); + } + else if (this.toId != this.toBackup.id) { // to was changed, remove edge from old 'to' node dynamic edges + this.toBackup.detachEdge(this); } - return group; + this.fromBackup = null; + this.toBackup = null; + this.controlNodesEnabled = false; }; + /** - * Add a custom group style - * @param {String} groupname - * @param {Object} style An object containing borderColor, - * backgroundColor, etc. - * @return {Object} group The created group object + * This checks if one of the control nodes is selected and if so, returns the control node object. Else it returns null. + * @param x + * @param y + * @returns {null} + * @private */ - Groups.prototype.add = function (groupname, style) { - this.groups[groupname] = style; - if (style.color) { - style.color = util.parseColor(style.color); + Edge.prototype._getSelectedControlNode = function(x,y) { + var positions = this.controlNodes.positions; + var fromDistance = Math.sqrt(Math.pow(x - positions.from.x,2) + Math.pow(y - positions.from.y,2)); + var toDistance = Math.sqrt(Math.pow(x - positions.to.x ,2) + Math.pow(y - positions.to.y ,2)); + + if (fromDistance < 15) { + this.connectedNode = this.from; + this.from = this.controlNodes.from; + return this.controlNodes.from; + } + else if (toDistance < 15) { + this.connectedNode = this.to; + this.to = this.controlNodes.to; + return this.controlNodes.to; + } + else { + return null; } - return style; }; - module.exports = Groups; - - -/***/ }, -/* 55 */ -/***/ function(module, exports, __webpack_require__) { /** - * @class Images - * This class loads images and keeps them stored. + * this resets the control nodes to their original position. + * @private */ - function Images() { - this.images = {}; - - this.callback = undefined; - } - - /** - * Set an onload callback function. This will be called each time an image - * is loaded - * @param {function} callback - */ - Images.prototype.setOnloadCallback = function(callback) { - this.callback = callback; - }; + Edge.prototype._restoreControlNodes = function() { + if (this.controlNodes.from.selected == true) { + this.from = this.connectedNode; + this.connectedNode = null; + this.controlNodes.from.unselect(); + } + else if (this.controlNodes.to.selected == true) { + this.to = this.connectedNode; + this.connectedNode = null; + this.controlNodes.to.unselect(); + } + }; /** + * this calculates the position of the control nodes on the edges of the parent nodes. * - * @param {string} url Url of the image - * @param {string} url Url of an image to use if the url image is not found - * @return {Image} img The image object + * @param ctx + * @returns {{from: {x: number, y: number}, to: {x: *, y: *}}} */ - Images.prototype.load = function(url, brokenUrl) { - var img = this.images[url]; - if (img == undefined) { - // create the image - var images = this; - img = new Image(); - this.images[url] = img; - img.onload = function() { - if (images.callback) { - images.callback(this); - } - }; - - img.onerror = function () { - this.src = brokenUrl; - if (images.callback) { - images.callback(this); - } - }; - - img.src = url; + Edge.prototype.getControlNodePositions = function(ctx) { + var angle = Math.atan2((this.to.y - this.from.y), (this.to.x - this.from.x)); + var dx = (this.to.x - this.from.x); + var dy = (this.to.y - this.from.y); + var edgeSegmentLength = Math.sqrt(dx * dx + dy * dy); + var fromBorderDist = this.from.distanceToBorder(ctx, angle + Math.PI); + var fromBorderPoint = (edgeSegmentLength - fromBorderDist) / edgeSegmentLength; + var xFrom = (fromBorderPoint) * this.from.x + (1 - fromBorderPoint) * this.to.x; + var yFrom = (fromBorderPoint) * this.from.y + (1 - fromBorderPoint) * this.to.y; + + var via; + if (this.options.smoothCurves.dynamic == true && this.options.smoothCurves.enabled == true) { + via = this.via; + } + else if (this.options.smoothCurves.enabled == true) { + via = this._getViaCoordinates(); } - return img; - }; + if (this.options.smoothCurves.enabled == true && via.x != null) { + angle = Math.atan2((this.to.y - via.y), (this.to.x - via.x)); + dx = (this.to.x - via.x); + dy = (this.to.y - via.y); + edgeSegmentLength = Math.sqrt(dx * dx + dy * dy); + } + var toBorderDist = this.to.distanceToBorder(ctx, angle); + var toBorderPoint = (edgeSegmentLength - toBorderDist) / edgeSegmentLength; - module.exports = Images; + var xTo,yTo; + if (this.options.smoothCurves.enabled == true && via.x != null) { + xTo = (1 - toBorderPoint) * via.x + toBorderPoint * this.to.x; + yTo = (1 - toBorderPoint) * via.y + toBorderPoint * this.to.y; + } + else { + xTo = (1 - toBorderPoint) * this.from.x + toBorderPoint * this.to.x; + yTo = (1 - toBorderPoint) * this.from.y + toBorderPoint * this.to.y; + } + return {from:{x:xFrom,y:yFrom},to:{x:xTo,y:yTo}}; + }; + + module.exports = Edge; /***/ }, -/* 56 */ +/* 53 */ /***/ function(module, exports, __webpack_require__) { var util = __webpack_require__(1); @@ -27129,1365 +27315,1194 @@ return /******/ (function(modules) { // webpackBootstrap /***/ }, -/* 57 */ +/* 54 */ /***/ function(module, exports, __webpack_require__) { var util = __webpack_require__(1); - var Node = __webpack_require__(56); /** - * @class Edge - * - * A edge connects two nodes - * @param {Object} properties Object with properties. Must contain - * At least properties from and to. - * Available properties: from (number), - * to (number), label (string, color (string), - * width (number), style (string), - * length (number), title (string) - * @param {Network} network A Network object, used to find and edge to - * nodes. - * @param {Object} constants An object with default values for - * example for the color + * @class Groups + * This class can store groups and properties specific for groups. */ - function Edge (properties, network, networkConstants) { - if (!network) { - throw "No network provided"; - } - var fields = ['edges','physics']; - var constants = util.selectiveBridgeObject(fields,networkConstants); - this.options = constants.edges; - this.physics = constants.physics; - this.options['smoothCurves'] = networkConstants['smoothCurves']; - - - this.network = network; - - // initialize variables - this.id = undefined; - this.fromId = undefined; - this.toId = undefined; - this.title = undefined; - this.widthSelected = this.options.width * this.options.widthSelectionMultiplier; - this.value = undefined; - this.selected = false; - this.hover = false; - this.labelDimensions = {top:0,left:0,width:0,height:0,yLine:0}; // could be cached - this.dirtyLabel = true; - - this.from = null; // a node - this.to = null; // a node - this.via = null; // a temp node - - this.fromBackup = null; // used to clean up after reconnect - this.toBackup = null;; // used to clean up after reconnect - - // we use this to be able to reconnect the edge to a cluster if its node is put into a cluster - // by storing the original information we can revert to the original connection when the cluser is opened. - this.originalFromId = []; - this.originalToId = []; - - this.connected = false; + function Groups() { + this.clear(); + this.defaultIndex = 0; + } - this.widthFixed = false; - this.lengthFixed = false; - this.setProperties(properties); + /** + * default constants for group colors + */ + Groups.DEFAULT = [ + {border: "#2B7CE9", background: "#97C2FC", highlight: {border: "#2B7CE9", background: "#D2E5FF"}, hover: {border: "#2B7CE9", background: "#D2E5FF"}}, // blue + {border: "#FFA500", background: "#FFFF00", highlight: {border: "#FFA500", background: "#FFFFA3"}, hover: {border: "#FFA500", background: "#FFFFA3"}}, // yellow + {border: "#FA0A10", background: "#FB7E81", highlight: {border: "#FA0A10", background: "#FFAFB1"}, hover: {border: "#FA0A10", background: "#FFAFB1"}}, // red + {border: "#41A906", background: "#7BE141", highlight: {border: "#41A906", background: "#A1EC76"}, hover: {border: "#41A906", background: "#A1EC76"}}, // green + {border: "#E129F0", background: "#EB7DF4", highlight: {border: "#E129F0", background: "#F0B3F5"}, hover: {border: "#E129F0", background: "#F0B3F5"}}, // magenta + {border: "#7C29F0", background: "#AD85E4", highlight: {border: "#7C29F0", background: "#D3BDF0"}, hover: {border: "#7C29F0", background: "#D3BDF0"}}, // purple + {border: "#C37F00", background: "#FFA807", highlight: {border: "#C37F00", background: "#FFCA66"}, hover: {border: "#C37F00", background: "#FFCA66"}}, // orange + {border: "#4220FB", background: "#6E6EFD", highlight: {border: "#4220FB", background: "#9B9BFD"}, hover: {border: "#4220FB", background: "#9B9BFD"}}, // darkblue + {border: "#FD5A77", background: "#FFC0CB", highlight: {border: "#FD5A77", background: "#FFD1D9"}, hover: {border: "#FD5A77", background: "#FFD1D9"}}, // pink + {border: "#4AD63A", background: "#C2FABC", highlight: {border: "#4AD63A", background: "#E6FFE3"}, hover: {border: "#4AD63A", background: "#E6FFE3"}} // mint + ]; - this.controlNodesEnabled = false; - this.controlNodes = {from:null, to:null, positions:{}}; - this.connectedNode = null; - } /** - * Set or overwrite properties for the edge - * @param {Object} properties an object with properties - * @param {Object} constants and object with default, global properties + * Clear all groups */ - Edge.prototype.setProperties = function(properties) { - if (!properties) { - return; + Groups.prototype.clear = function () { + this.groups = {}; + this.groups.length = function() + { + var i = 0; + for ( var p in this ) { + if (this.hasOwnProperty(p)) { + i++; + } + } + return i; } + }; - var fields = ['style','fontSize','fontFace','fontColor','fontFill','width', - 'widthSelectionMultiplier','hoverWidth','arrowScaleFactor','dash','inheritColor' - ]; - util.selectiveDeepExtend(fields, this.options, properties); - - if (properties.from !== undefined) {this.fromId = properties.from;} - if (properties.to !== undefined) {this.toId = properties.to;} - if (properties.id !== undefined) {this.id = properties.id;} - if (properties.label !== undefined) {this.label = properties.label; this.dirtyLabel = true;} + /** + * get group properties of a groupname. If groupname is not found, a new group + * is added. + * @param {*} groupname Can be a number, string, Date, etc. + * @return {Object} group The created group, containing all group properties + */ + Groups.prototype.get = function (groupname) { + var group = this.groups[groupname]; + if (group == undefined) { + // create new group + var index = this.defaultIndex % Groups.DEFAULT.length; + this.defaultIndex++; + group = {}; + group.color = Groups.DEFAULT[index]; + this.groups[groupname] = group; + } - if (properties.title !== undefined) {this.title = properties.title;} - if (properties.value !== undefined) {this.value = properties.value;} - if (properties.length !== undefined) {this.physics.springLength = properties.length;} + return group; + }; - if (properties.color !== undefined) { - this.options.inheritColor = false; - if (util.isString(properties.color)) { - this.options.color.color = properties.color; - this.options.color.highlight = properties.color; - } - else { - if (properties.color.color !== undefined) {this.options.color.color = properties.color.color;} - if (properties.color.highlight !== undefined) {this.options.color.highlight = properties.color.highlight;} - if (properties.color.hover !== undefined) {this.options.color.hover = properties.color.hover;} - } + /** + * Add a custom group style + * @param {String} groupname + * @param {Object} style An object containing borderColor, + * backgroundColor, etc. + * @return {Object} group The created group object + */ + Groups.prototype.add = function (groupname, style) { + this.groups[groupname] = style; + if (style.color) { + style.color = util.parseColor(style.color); } + return style; + }; - // A node is connected when it has a from and to node. - this.connect(); - - this.widthFixed = this.widthFixed || (properties.width !== undefined); - this.lengthFixed = this.lengthFixed || (properties.length !== undefined); + module.exports = Groups; - this.widthSelected = this.options.width* this.options.widthSelectionMultiplier; - // set draw method based on style - switch (this.options.style) { - case 'line': this.draw = this._drawLine; break; - case 'arrow': this.draw = this._drawArrow; break; - case 'arrow-center': this.draw = this._drawArrowCenter; break; - case 'dash-line': this.draw = this._drawDashLine; break; - default: this.draw = this._drawLine; break; - } - }; +/***/ }, +/* 55 */ +/***/ function(module, exports, __webpack_require__) { /** - * Connect an edge to its nodes + * @class Images + * This class loads images and keeps them stored. */ - Edge.prototype.connect = function () { - this.disconnect(); + function Images() { + this.images = {}; - this.from = this.network.nodes[this.fromId] || null; - this.to = this.network.nodes[this.toId] || null; - this.connected = (this.from && this.to); - - if (this.connected) { - this.from.attachEdge(this); - this.to.attachEdge(this); - } - else { - if (this.from) { - this.from.detachEdge(this); - } - if (this.to) { - this.to.detachEdge(this); - } - } - }; - - /** - * Disconnect an edge from its nodes - */ - Edge.prototype.disconnect = function () { - if (this.from) { - this.from.detachEdge(this); - this.from = null; - } - if (this.to) { - this.to.detachEdge(this); - this.to = null; - } - - this.connected = false; - }; - - /** - * get the title of this edge. - * @return {string} title The title of the edge, or undefined when no title - * has been set. - */ - Edge.prototype.getTitle = function() { - return typeof this.title === "function" ? this.title() : this.title; - }; - - - /** - * Retrieve the value of the edge. Can be undefined - * @return {Number} value - */ - Edge.prototype.getValue = function() { - return this.value; - }; - - /** - * Adjust the value range of the edge. The edge will adjust it's width - * based on its value. - * @param {Number} min - * @param {Number} max - */ - Edge.prototype.setValueRange = function(min, max) { - if (!this.widthFixed && this.value !== undefined) { - var scale = (this.options.widthMax - this.options.widthMin) / (max - min); - this.options.width= (this.value - min) * scale + this.options.widthMin; - this.widthSelected = this.options.width* this.options.widthSelectionMultiplier; - } - }; + this.callback = undefined; + } /** - * Redraw a edge - * Draw this edge in the given canvas - * The 2d context of a HTML canvas can be retrieved by canvas.getContext("2d"); - * @param {CanvasRenderingContext2D} ctx + * Set an onload callback function. This will be called each time an image + * is loaded + * @param {function} callback */ - Edge.prototype.draw = function(ctx) { - throw "Method draw not initialized in edge"; + Images.prototype.setOnloadCallback = function(callback) { + this.callback = callback; }; /** - * Check if this object is overlapping with the provided object - * @param {Object} obj an object with parameters left, top - * @return {boolean} True if location is located on the edge + * + * @param {string} url Url of the image + * @param {string} url Url of an image to use if the url image is not found + * @return {Image} img The image object */ - Edge.prototype.isOverlappingWith = function(obj) { - if (this.connected) { - var distMax = 10; - var xFrom = this.from.x; - var yFrom = this.from.y; - var xTo = this.to.x; - var yTo = this.to.y; - var xObj = obj.left; - var yObj = obj.top; - - var dist = this._getDistanceToEdge(xFrom, yFrom, xTo, yTo, xObj, yObj); - - return (dist < distMax); - } - else { - return false - } - }; - - Edge.prototype._getColor = function() { - var colorObj = this.options.color; - if (this.options.inheritColor == "to") { - colorObj = { - highlight: this.to.options.color.highlight.border, - hover: this.to.options.color.hover.border, - color: this.to.options.color.border - }; - } - else if (this.options.inheritColor == "from" || this.options.inheritColor == true) { - colorObj = { - highlight: this.from.options.color.highlight.border, - hover: this.from.options.color.hover.border, - color: this.from.options.color.border + Images.prototype.load = function(url, brokenUrl) { + var img = this.images[url]; + if (img == undefined) { + // create the image + var images = this; + img = new Image(); + this.images[url] = img; + img.onload = function() { + if (images.callback) { + images.callback(this); + } }; + + img.onerror = function () { + this.src = brokenUrl; + if (images.callback) { + images.callback(this); + } + }; + + img.src = url; } - if (this.selected == true) {return colorObj.highlight;} - else if (this.hover == true) {return colorObj.hover;} - else {return colorObj.color;} + return img; }; + module.exports = Images; - /** - * Redraw a edge as a line - * Draw this edge in the given canvas - * The 2d context of a HTML canvas can be retrieved by canvas.getContext("2d"); - * @param {CanvasRenderingContext2D} ctx - * @private - */ - Edge.prototype._drawLine = function(ctx) { - // set style - ctx.strokeStyle = this._getColor(); - ctx.lineWidth = this._getLineWidth(); - - if (this.from != this.to) { - // draw line - var via = this._line(ctx); - // draw label - var point; - if (this.label) { - if (this.options.smoothCurves.enabled == true && via != null) { - var midpointX = 0.5*(0.5*(this.from.x + via.x) + 0.5*(this.to.x + via.x)); - var midpointY = 0.5*(0.5*(this.from.y + via.y) + 0.5*(this.to.y + via.y)); - point = {x:midpointX, y:midpointY}; - } - else { - point = this._pointOnLine(0.5); - } - this._label(ctx, this.label, point.x, point.y); - } - } - else { - var x, y; - var radius = this.physics.springLength / 4; - var node = this.from; - if (!node.width) { - node.resize(ctx); - } - if (node.width > node.height) { - x = node.x + node.width / 2; - y = node.y - radius; - } - else { - x = node.x + radius; - y = node.y - node.height / 2; - } - this._circle(ctx, x, y, radius); - point = this._pointOnCircle(x, y, radius, 0.5); - this._label(ctx, this.label, point.x, point.y); - } - }; +/***/ }, +/* 56 */ +/***/ function(module, exports, __webpack_require__) { /** - * Get the line width of the edge. Depends on width and whether one of the - * connected nodes is selected. - * @return {Number} width - * @private + * Popup is a class to create a popup window with some text + * @param {Element} container The container object. + * @param {Number} [x] + * @param {Number} [y] + * @param {String} [text] + * @param {Object} [style] An object containing borderColor, + * backgroundColor, etc. */ - Edge.prototype._getLineWidth = function() { - if (this.selected == true) { - return Math.max(Math.min(this.widthSelected, this.options.widthMax), 0.3*this.networkScaleInv); + function Popup(container, x, y, text, style) { + if (container) { + this.container = container; } else { - if (this.hover == true) { - return Math.max(Math.min(this.options.hoverWidth, this.options.widthMax), 0.3*this.networkScaleInv); - } - else { - return Math.max(this.options.width, 0.3*this.networkScaleInv); - } + this.container = document.body; } - }; - - Edge.prototype._getViaCoordinates = function () { - var xVia = null; - var yVia = null; - var factor = this.options.smoothCurves.roundness; - var type = this.options.smoothCurves.type; - var dx = Math.abs(this.from.x - this.to.x); - var dy = Math.abs(this.from.y - this.to.y); - if (type == 'discrete' || type == 'diagonalCross') { - if (Math.abs(this.from.x - this.to.x) < Math.abs(this.from.y - this.to.y)) { - if (this.from.y > this.to.y) { - if (this.from.x < this.to.x) { - xVia = this.from.x + factor * dy; - yVia = this.from.y - factor * dy; - } - else if (this.from.x > this.to.x) { - xVia = this.from.x - factor * dy; - yVia = this.from.y - factor * dy; - } - } - else if (this.from.y < this.to.y) { - if (this.from.x < this.to.x) { - xVia = this.from.x + factor * dy; - yVia = this.from.y + factor * dy; - } - else if (this.from.x > this.to.x) { - xVia = this.from.x - factor * dy; - yVia = this.from.y + factor * dy; - } - } - if (type == "discrete") { - xVia = dx < factor * dy ? this.from.x : xVia; - } - } - else if (Math.abs(this.from.x - this.to.x) > Math.abs(this.from.y - this.to.y)) { - if (this.from.y > this.to.y) { - if (this.from.x < this.to.x) { - xVia = this.from.x + factor * dx; - yVia = this.from.y - factor * dx; - } - else if (this.from.x > this.to.x) { - xVia = this.from.x - factor * dx; - yVia = this.from.y - factor * dx; - } - } - else if (this.from.y < this.to.y) { - if (this.from.x < this.to.x) { - xVia = this.from.x + factor * dx; - yVia = this.from.y + factor * dx; - } - else if (this.from.x > this.to.x) { - xVia = this.from.x - factor * dx; - yVia = this.from.y + factor * dx; + // x, y and text are optional, see if a style object was passed in their place + if (style === undefined) { + if (typeof x === "object") { + style = x; + x = undefined; + } else if (typeof text === "object") { + style = text; + text = undefined; + } else { + // for backwards compatibility, in case clients other than Network are creating Popup directly + style = { + fontColor: 'black', + fontSize: 14, // px + fontFace: 'verdana', + color: { + border: '#666', + background: '#FFFFC6' } } - if (type == "discrete") { - yVia = dy < factor * dx ? this.from.y : yVia; - } - } - } - else if (type == "straightCross") { - if (Math.abs(this.from.x - this.to.x) < Math.abs(this.from.y - this.to.y)) { // up - down - xVia = this.from.x; - if (this.from.y < this.to.y) { - yVia = this.to.y - (1-factor) * dy; - } - else { - yVia = this.to.y + (1-factor) * dy; - } - } - else if (Math.abs(this.from.x - this.to.x) > Math.abs(this.from.y - this.to.y)) { // left - right - if (this.from.x < this.to.x) { - xVia = this.to.x - (1-factor) * dx; - } - else { - xVia = this.to.x + (1-factor) * dx; - } - yVia = this.from.y; - } - } - else if (type == 'horizontal') { - if (this.from.x < this.to.x) { - xVia = this.to.x - (1-factor) * dx; - } - else { - xVia = this.to.x + (1-factor) * dx; - } - yVia = this.from.y; - } - else if (type == 'vertical') { - xVia = this.from.x; - if (this.from.y < this.to.y) { - yVia = this.to.y - (1-factor) * dy; - } - else { - yVia = this.to.y + (1-factor) * dy; } } - else { // continuous - if (Math.abs(this.from.x - this.to.x) < Math.abs(this.from.y - this.to.y)) { - if (this.from.y > this.to.y) { - if (this.from.x < this.to.x) { - // console.log(1) - xVia = this.from.x + factor * dy; - yVia = this.from.y - factor * dy; - xVia = this.to.x < xVia ? this.to.x : xVia; - } - else if (this.from.x > this.to.x) { - // console.log(2) - xVia = this.from.x - factor * dy; - yVia = this.from.y - factor * dy; - xVia = this.to.x > xVia ? this.to.x :xVia; - } - } - else if (this.from.y < this.to.y) { - if (this.from.x < this.to.x) { - // console.log(3) - xVia = this.from.x + factor * dy; - yVia = this.from.y + factor * dy; - xVia = this.to.x < xVia ? this.to.x : xVia; - } - else if (this.from.x > this.to.x) { - // console.log(4, this.from.x, this.to.x) - xVia = this.from.x - factor * dy; - yVia = this.from.y + factor * dy; - xVia = this.to.x > xVia ? this.to.x : xVia; - } - } - } - else if (Math.abs(this.from.x - this.to.x) > Math.abs(this.from.y - this.to.y)) { - if (this.from.y > this.to.y) { - if (this.from.x < this.to.x) { - // console.log(5) - xVia = this.from.x + factor * dx; - yVia = this.from.y - factor * dx; - yVia = this.to.y > yVia ? this.to.y : yVia; - } - else if (this.from.x > this.to.x) { - // console.log(6) - xVia = this.from.x - factor * dx; - yVia = this.from.y - factor * dx; - yVia = this.to.y > yVia ? this.to.y : yVia; - } - } - else if (this.from.y < this.to.y) { - if (this.from.x < this.to.x) { - // console.log(7) - xVia = this.from.x + factor * dx; - yVia = this.from.y + factor * dx; - yVia = this.to.y < yVia ? this.to.y : yVia; - } - else if (this.from.x > this.to.x) { - // console.log(8) - xVia = this.from.x - factor * dx; - yVia = this.from.y + factor * dx; - yVia = this.to.y < yVia ? this.to.y : yVia; - } - } - } + + this.x = 0; + this.y = 0; + this.padding = 5; + + if (x !== undefined && y !== undefined ) { + this.setPosition(x, y); + } + if (text !== undefined) { + this.setText(text); } + // create the frame + this.frame = document.createElement("div"); + var styleAttr = this.frame.style; + styleAttr.position = "absolute"; + styleAttr.visibility = "hidden"; + styleAttr.border = "1px solid " + style.color.border; + styleAttr.color = style.fontColor; + styleAttr.fontSize = style.fontSize + "px"; + styleAttr.fontFamily = style.fontFace; + styleAttr.padding = this.padding + "px"; + styleAttr.backgroundColor = style.color.background; + styleAttr.borderRadius = "3px"; + styleAttr.MozBorderRadius = "3px"; + styleAttr.WebkitBorderRadius = "3px"; + styleAttr.boxShadow = "3px 3px 10px rgba(128, 128, 128, 0.5)"; + styleAttr.whiteSpace = "nowrap"; + this.container.appendChild(this.frame); + } - return {x:xVia, y:yVia}; + /** + * @param {number} x Horizontal position of the popup window + * @param {number} y Vertical position of the popup window + */ + Popup.prototype.setPosition = function(x, y) { + this.x = parseInt(x); + this.y = parseInt(y); }; /** - * Draw a line between two nodes - * @param {CanvasRenderingContext2D} ctx - * @private + * Set the content for the popup window. This can be HTML code or text. + * @param {string | Element} content */ - Edge.prototype._line = function (ctx) { - // draw a straight line - ctx.beginPath(); - ctx.moveTo(this.from.x, this.from.y); - if (this.options.smoothCurves.enabled == true) { - if (this.options.smoothCurves.dynamic == false) { - var via = this._getViaCoordinates(); - if (via.x == null) { - ctx.lineTo(this.to.x, this.to.y); - ctx.stroke(); - return null; - } - else { - // this.via.x = via.x; - // this.via.y = via.y; - ctx.quadraticCurveTo(via.x,via.y,this.to.x, this.to.y); - ctx.stroke(); - return via; - } - } - else { - ctx.quadraticCurveTo(this.via.x,this.via.y,this.to.x, this.to.y); - ctx.stroke(); - return this.via; - } + Popup.prototype.setText = function(content) { + if (content instanceof Element) { + this.frame.innerHTML = ''; + this.frame.appendChild(content); } else { - ctx.lineTo(this.to.x, this.to.y); - ctx.stroke(); - return null; + this.frame.innerHTML = content; // string containing text or HTML } }; /** - * Draw a line from a node to itself, a circle - * @param {CanvasRenderingContext2D} ctx - * @param {Number} x - * @param {Number} y - * @param {Number} radius - * @private - */ - Edge.prototype._circle = function (ctx, x, y, radius) { - // draw a circle - ctx.beginPath(); - ctx.arc(x, y, radius, 0, 2 * Math.PI, false); - ctx.stroke(); - }; - - /** - * Draw label with white background and with the middle at (x, y) - * @param {CanvasRenderingContext2D} ctx - * @param {String} text - * @param {Number} x - * @param {Number} y - * @private + * Show the popup window + * @param {boolean} show Optional. Show or hide the window */ - Edge.prototype._label = function (ctx, text, x, y) { - if (text) { - ctx.font = ((this.from.selected || this.to.selected) ? "bold " : "") + - this.options.fontSize + "px " + this.options.fontFace; - var yLine; - - if (this.dirtyLabel == true) { - var lines = String(text).split('\n'); - var lineCount = lines.length; - var fontSize = (Number(this.options.fontSize) + 4); - yLine = y + (1 - lineCount) / 2 * fontSize; + Popup.prototype.show = function (show) { + if (show === undefined) { + show = true; + } - var width = ctx.measureText(lines[0]).width; - for (var i = 1; i < lineCount; i++) { - var lineWidth = ctx.measureText(lines[i]).width; - width = lineWidth > width ? lineWidth : width; - } - var height = this.options.fontSize * lineCount; - var left = x - width / 2; - var top = y - height / 2; + if (show) { + var height = this.frame.clientHeight; + var width = this.frame.clientWidth; + var maxHeight = this.frame.parentNode.clientHeight; + var maxWidth = this.frame.parentNode.clientWidth; - // cache - this.labelDimensions = {top:top,left:left,width:width,height:height,yLine:yLine}; + var top = (this.y - height); + if (top + height + this.padding > maxHeight) { + top = maxHeight - height - this.padding; } - - - if (this.options.fontFill !== undefined && this.options.fontFill !== null && this.options.fontFill !== "none") { - ctx.fillStyle = this.options.fontFill; - ctx.fillRect(this.labelDimensions.left, - this.labelDimensions.top, - this.labelDimensions.width, - this.labelDimensions.height); + if (top < this.padding) { + top = this.padding; } - // draw text - ctx.fillStyle = this.options.fontColor || "black"; - ctx.textAlign = "center"; - ctx.textBaseline = "middle"; - yLine = this.labelDimensions.yLine; - for (var i = 0; i < lineCount; i++) { - ctx.fillText(lines[i], x, yLine); - yLine += fontSize; + var left = this.x; + if (left + width + this.padding > maxWidth) { + left = maxWidth - width - this.padding; + } + if (left < this.padding) { + left = this.padding; } + + this.frame.style.left = left + "px"; + this.frame.style.top = top + "px"; + this.frame.style.visibility = "visible"; + } + else { + this.hide(); } }; /** - * Redraw a edge as a dashed line - * Draw this edge in the given canvas - * @author David Jordan - * @date 2012-08-08 - * The 2d context of a HTML canvas can be retrieved by canvas.getContext("2d"); - * @param {CanvasRenderingContext2D} ctx - * @private + * Hide the popup window */ - Edge.prototype._drawDashLine = function(ctx) { - // set style - ctx.strokeStyle = this._getColor(); - ctx.lineWidth = this._getLineWidth(); + Popup.prototype.hide = function () { + this.frame.style.visibility = "hidden"; + }; - var via = null; - // only firefox and chrome support this method, else we use the legacy one. - if (ctx.mozDash !== undefined || ctx.setLineDash !== undefined) { - // configure the dash pattern - var pattern = [0]; - if (this.options.dash.length !== undefined && this.options.dash.gap !== undefined) { - pattern = [this.options.dash.length,this.options.dash.gap]; - } - else { - pattern = [5,5]; - } + module.exports = Popup; - // set dash settings for chrome or firefox - if (typeof ctx.setLineDash !== 'undefined') { //Chrome - ctx.setLineDash(pattern); - ctx.lineDashOffset = 0; - } else { //Firefox - ctx.mozDash = pattern; - ctx.mozDashOffset = 0; - } +/***/ }, +/* 57 */ +/***/ function(module, exports, __webpack_require__) { - // draw the line - via = this._line(ctx); + /** + * Parse a text source containing data in DOT language into a JSON object. + * The object contains two lists: one with nodes and one with edges. + * + * DOT language reference: http://www.graphviz.org/doc/info/lang.html + * + * @param {String} data Text containing a graph in DOT-notation + * @return {Object} graph An object containing two parameters: + * {Object[]} nodes + * {Object[]} edges + */ + function parseDOT (data) { + dot = data; + return parseGraph(); + } - // restore the dash settings. - if (typeof ctx.setLineDash !== 'undefined') { //Chrome - ctx.setLineDash([0]); - ctx.lineDashOffset = 0; + // token types enumeration + var TOKENTYPE = { + NULL : 0, + DELIMITER : 1, + IDENTIFIER: 2, + UNKNOWN : 3 + }; - } else { //Firefox - ctx.mozDash = [0]; - ctx.mozDashOffset = 0; - } - } - else { // unsupporting smooth lines - // draw dashed line - ctx.beginPath(); - ctx.lineCap = 'round'; - if (this.options.dash.altLength !== undefined) //If an alt dash value has been set add to the array this value - { - ctx.dashedLine(this.from.x,this.from.y,this.to.x,this.to.y, - [this.options.dash.length,this.options.dash.gap,this.options.dash.altLength,this.options.dash.gap]); - } - else if (this.options.dash.length !== undefined && this.options.dash.gap !== undefined) //If a dash and gap value has been set add to the array this value - { - ctx.dashedLine(this.from.x,this.from.y,this.to.x,this.to.y, - [this.options.dash.length,this.options.dash.gap]); - } - else //If all else fails draw a line - { - ctx.moveTo(this.from.x, this.from.y); - ctx.lineTo(this.to.x, this.to.y); - } - ctx.stroke(); - } + // map with all delimiters + var DELIMITERS = { + '{': true, + '}': true, + '[': true, + ']': true, + ';': true, + '=': true, + ',': true, - // draw label - if (this.label) { - var point; - if (this.options.smoothCurves.enabled == true && via != null) { - var midpointX = 0.5*(0.5*(this.from.x + via.x) + 0.5*(this.to.x + via.x)); - var midpointY = 0.5*(0.5*(this.from.y + via.y) + 0.5*(this.to.y + via.y)); - point = {x:midpointX, y:midpointY}; - } - else { - point = this._pointOnLine(0.5); - } - this._label(ctx, this.label, point.x, point.y); - } + '->': true, + '--': true }; + var dot = ''; // current dot file + var index = 0; // current index in dot file + var c = ''; // current token character in expr + var token = ''; // current token + var tokenType = TOKENTYPE.NULL; // type of the token + /** - * Get a point on a line - * @param {Number} percentage. Value between 0 (line start) and 1 (line end) - * @return {Object} point - * @private + * Get the first character from the dot file. + * The character is stored into the char c. If the end of the dot file is + * reached, the function puts an empty string in c. */ - Edge.prototype._pointOnLine = function (percentage) { - return { - x: (1 - percentage) * this.from.x + percentage * this.to.x, - y: (1 - percentage) * this.from.y + percentage * this.to.y - } - }; + function first() { + index = 0; + c = dot.charAt(0); + } /** - * Get a point on a circle - * @param {Number} x - * @param {Number} y - * @param {Number} radius - * @param {Number} percentage. Value between 0 (line start) and 1 (line end) - * @return {Object} point - * @private + * Get the next character from the dot file. + * The character is stored into the char c. If the end of the dot file is + * reached, the function puts an empty string in c. */ - Edge.prototype._pointOnCircle = function (x, y, radius, percentage) { - var angle = (percentage - 3/8) * 2 * Math.PI; - return { - x: x + radius * Math.cos(angle), - y: y - radius * Math.sin(angle) - } - }; + function next() { + index++; + c = dot.charAt(index); + } /** - * Redraw a edge as a line with an arrow halfway the line - * Draw this edge in the given canvas - * The 2d context of a HTML canvas can be retrieved by canvas.getContext("2d"); - * @param {CanvasRenderingContext2D} ctx - * @private + * Preview the next character from the dot file. + * @return {String} cNext */ - Edge.prototype._drawArrowCenter = function(ctx) { - var point; - // set style - ctx.strokeStyle = this._getColor(); - ctx.fillStyle = ctx.strokeStyle; - ctx.lineWidth = this._getLineWidth(); + function nextPreview() { + return dot.charAt(index + 1); + } - if (this.from != this.to) { - // draw line - var via = this._line(ctx); + /** + * Test whether given character is alphabetic or numeric + * @param {String} c + * @return {Boolean} isAlphaNumeric + */ + var regexAlphaNumeric = /[a-zA-Z_0-9.:#]/; + function isAlphaNumeric(c) { + return regexAlphaNumeric.test(c); + } - var angle = Math.atan2((this.to.y - this.from.y), (this.to.x - this.from.x)); - var length = (10 + 5 * this.options.width) * this.options.arrowScaleFactor; - // draw an arrow halfway the line - if (this.options.smoothCurves.enabled == true && via != null) { - var midpointX = 0.5*(0.5*(this.from.x + via.x) + 0.5*(this.to.x + via.x)); - var midpointY = 0.5*(0.5*(this.from.y + via.y) + 0.5*(this.to.y + via.y)); - point = {x:midpointX, y:midpointY}; + /** + * Merge all properties of object b into object b + * @param {Object} a + * @param {Object} b + * @return {Object} a + */ + function merge (a, b) { + if (!a) { + a = {}; + } + + if (b) { + for (var name in b) { + if (b.hasOwnProperty(name)) { + a[name] = b[name]; + } + } + } + return a; + } + + /** + * Set a value in an object, where the provided parameter name can be a + * path with nested parameters. For example: + * + * var obj = {a: 2}; + * setValue(obj, 'b.c', 3); // obj = {a: 2, b: {c: 3}} + * + * @param {Object} obj + * @param {String} path A parameter name or dot-separated parameter path, + * like "color.highlight.border". + * @param {*} value + */ + function setValue(obj, path, value) { + var keys = path.split('.'); + var o = obj; + while (keys.length) { + var key = keys.shift(); + if (keys.length) { + // this isn't the end point + if (!o[key]) { + o[key] = {}; + } + o = o[key]; } else { - point = this._pointOnLine(0.5); + // this is the end point + o[key] = value; } + } + } - ctx.arrow(point.x, point.y, angle, length); - ctx.fill(); - ctx.stroke(); + /** + * Add a node to a graph object. If there is already a node with + * the same id, their attributes will be merged. + * @param {Object} graph + * @param {Object} node + */ + function addNode(graph, node) { + var i, len; + var current = null; - // draw label - if (this.label) { - this._label(ctx, this.label, point.x, point.y); - } + // find root graph (in case of subgraph) + var graphs = [graph]; // list with all graphs from current graph to root graph + var root = graph; + while (root.parent) { + graphs.push(root.parent); + root = root.parent; } - else { - // draw circle - var x, y; - var radius = 0.25 * Math.max(100,this.physics.springLength); - var node = this.from; - if (!node.width) { - node.resize(ctx); - } - if (node.width > node.height) { - x = node.x + node.width * 0.5; - y = node.y - radius; + + // find existing node (at root level) by its id + if (root.nodes) { + for (i = 0, len = root.nodes.length; i < len; i++) { + if (node.id === root.nodes[i].id) { + current = root.nodes[i]; + break; + } } - else { - x = node.x + radius; - y = node.y - node.height * 0.5; + } + + if (!current) { + // this is a new node + current = { + id: node.id + }; + if (graph.node) { + // clone default attributes + current.attr = merge(current.attr, graph.node); } - this._circle(ctx, x, y, radius); + } - // draw all arrows - var angle = 0.2 * Math.PI; - var length = (10 + 5 * this.options.width) * this.options.arrowScaleFactor; - point = this._pointOnCircle(x, y, radius, 0.5); - ctx.arrow(point.x, point.y, angle, length); - ctx.fill(); - ctx.stroke(); + // add node to this (sub)graph and all its parent graphs + for (i = graphs.length - 1; i >= 0; i--) { + var g = graphs[i]; - // draw label - if (this.label) { - point = this._pointOnCircle(x, y, radius, 0.5); - this._label(ctx, this.label, point.x, point.y); + if (!g.nodes) { + g.nodes = []; + } + if (g.nodes.indexOf(current) == -1) { + g.nodes.push(current); } } - }; - + // merge attributes + if (node.attr) { + current.attr = merge(current.attr, node.attr); + } + } /** - * Redraw a edge as a line with an arrow - * Draw this edge in the given canvas - * The 2d context of a HTML canvas can be retrieved by canvas.getContext("2d"); - * @param {CanvasRenderingContext2D} ctx - * @private + * Add an edge to a graph object + * @param {Object} graph + * @param {Object} edge */ - Edge.prototype._drawArrow = function(ctx) { - // set style - ctx.strokeStyle = this._getColor(); - ctx.fillStyle = ctx.strokeStyle; - ctx.lineWidth = this._getLineWidth(); - - var angle, length; - //draw a line - if (this.from != this.to) { - angle = Math.atan2((this.to.y - this.from.y), (this.to.x - this.from.x)); - var dx = (this.to.x - this.from.x); - var dy = (this.to.y - this.from.y); - var edgeSegmentLength = Math.sqrt(dx * dx + dy * dy); + function addEdge(graph, edge) { + if (!graph.edges) { + graph.edges = []; + } + graph.edges.push(edge); + if (graph.edge) { + var attr = merge({}, graph.edge); // clone default attributes + edge.attr = merge(attr, edge.attr); // merge attributes + } + } - var fromBorderDist = this.from.distanceToBorder(ctx, angle + Math.PI); - var fromBorderPoint = (edgeSegmentLength - fromBorderDist) / edgeSegmentLength; - var xFrom = (fromBorderPoint) * this.from.x + (1 - fromBorderPoint) * this.to.x; - var yFrom = (fromBorderPoint) * this.from.y + (1 - fromBorderPoint) * this.to.y; + /** + * Create an edge to a graph object + * @param {Object} graph + * @param {String | Number | Object} from + * @param {String | Number | Object} to + * @param {String} type + * @param {Object | null} attr + * @return {Object} edge + */ + function createEdge(graph, from, to, type, attr) { + var edge = { + from: from, + to: to, + type: type + }; - var via; - if (this.options.smoothCurves.dynamic == true && this.options.smoothCurves.enabled == true ) { - via = this.via; - } - else if (this.options.smoothCurves.enabled == true) { - via = this._getViaCoordinates(); - } + if (graph.edge) { + edge.attr = merge({}, graph.edge); // clone default attributes + } + edge.attr = merge(edge.attr || {}, attr); // merge attributes - if (this.options.smoothCurves.enabled == true && via.x != null) { - angle = Math.atan2((this.to.y - via.y), (this.to.x - via.x)); - dx = (this.to.x - via.x); - dy = (this.to.y - via.y); - edgeSegmentLength = Math.sqrt(dx * dx + dy * dy); - } - var toBorderDist = this.to.distanceToBorder(ctx, angle); - var toBorderPoint = (edgeSegmentLength - toBorderDist) / edgeSegmentLength; + return edge; + } - var xTo,yTo; - if (this.options.smoothCurves.enabled == true && via.x != null) { - xTo = (1 - toBorderPoint) * via.x + toBorderPoint * this.to.x; - yTo = (1 - toBorderPoint) * via.y + toBorderPoint * this.to.y; - } - else { - xTo = (1 - toBorderPoint) * this.from.x + toBorderPoint * this.to.x; - yTo = (1 - toBorderPoint) * this.from.y + toBorderPoint * this.to.y; - } + /** + * Get next token in the current dot file. + * The token and token type are available as token and tokenType + */ + function getToken() { + tokenType = TOKENTYPE.NULL; + token = ''; - ctx.beginPath(); - ctx.moveTo(xFrom,yFrom); - if (this.options.smoothCurves.enabled == true && via.x != null) { - ctx.quadraticCurveTo(via.x,via.y,xTo, yTo); - } - else { - ctx.lineTo(xTo, yTo); - } - ctx.stroke(); + // skip over whitespaces + while (c == ' ' || c == '\t' || c == '\n' || c == '\r') { // space, tab, enter + next(); + } - // draw arrow at the end of the line - length = (10 + 5 * this.options.width) * this.options.arrowScaleFactor; - ctx.arrow(xTo, yTo, angle, length); - ctx.fill(); - ctx.stroke(); + do { + var isComment = false; - // draw label - if (this.label) { - var point; - if (this.options.smoothCurves.enabled == true && via != null) { - var midpointX = 0.5*(0.5*(this.from.x + via.x) + 0.5*(this.to.x + via.x)); - var midpointY = 0.5*(0.5*(this.from.y + via.y) + 0.5*(this.to.y + via.y)); - point = {x:midpointX, y:midpointY}; + // skip comment + if (c == '#') { + // find the previous non-space character + var i = index - 1; + while (dot.charAt(i) == ' ' || dot.charAt(i) == '\t') { + i--; } - else { - point = this._pointOnLine(0.5); + if (dot.charAt(i) == '\n' || dot.charAt(i) == '') { + // the # is at the start of a line, this is indeed a line comment + while (c != '' && c != '\n') { + next(); + } + isComment = true; } - this._label(ctx, this.label, point.x, point.y); } - } - else { - // draw circle - var node = this.from; - var x, y, arrow; - var radius = 0.25 * Math.max(100,this.physics.springLength); - if (!node.width) { - node.resize(ctx); + if (c == '/' && nextPreview() == '/') { + // skip line comment + while (c != '' && c != '\n') { + next(); + } + isComment = true; } - if (node.width > node.height) { - x = node.x + node.width * 0.5; - y = node.y - radius; - arrow = { - x: x, - y: node.y, - angle: 0.9 * Math.PI - }; + if (c == '/' && nextPreview() == '*') { + // skip block comment + while (c != '') { + if (c == '*' && nextPreview() == '/') { + // end of block comment found. skip these last two characters + next(); + next(); + break; + } + else { + next(); + } + } + isComment = true; } - else { - x = node.x + radius; - y = node.y - node.height * 0.5; - arrow = { - x: node.x, - y: y, - angle: 0.6 * Math.PI - }; + + // skip over whitespaces + while (c == ' ' || c == '\t' || c == '\n' || c == '\r') { // space, tab, enter + next(); } - ctx.beginPath(); - // TODO: similarly, for a line without arrows, draw to the border of the nodes instead of the center - ctx.arc(x, y, radius, 0, 2 * Math.PI, false); - ctx.stroke(); + } + while (isComment); - // draw all arrows - var length = (10 + 5 * this.options.width) * this.options.arrowScaleFactor; - ctx.arrow(arrow.x, arrow.y, arrow.angle, length); - ctx.fill(); - ctx.stroke(); + // check for end of dot file + if (c == '') { + // token is still empty + tokenType = TOKENTYPE.DELIMITER; + return; + } - // draw label - if (this.label) { - point = this._pointOnCircle(x, y, radius, 0.5); - this._label(ctx, this.label, point.x, point.y); - } + // check for delimiters consisting of 2 characters + var c2 = c + nextPreview(); + if (DELIMITERS[c2]) { + tokenType = TOKENTYPE.DELIMITER; + token = c2; + next(); + next(); + return; } - }; + // check for delimiters consisting of 1 character + if (DELIMITERS[c]) { + tokenType = TOKENTYPE.DELIMITER; + token = c; + next(); + return; + } + // check for an identifier (number or string) + // TODO: more precise parsing of numbers/strings (and the port separator ':') + if (isAlphaNumeric(c) || c == '-') { + token += c; + next(); - /** - * Calculate the distance between a point (x3,y3) and a line segment from - * (x1,y1) to (x2,y2). - * http://stackoverflow.com/questions/849211/shortest-distancae-between-a-point-and-a-line-segment - * @param {number} x1 - * @param {number} y1 - * @param {number} x2 - * @param {number} y2 - * @param {number} x3 - * @param {number} y3 - * @private - */ - Edge.prototype._getDistanceToEdge = function (x1,y1, x2,y2, x3,y3) { // x3,y3 is the point - var returnValue = 0; - if (this.from != this.to) { - if (this.options.smoothCurves.enabled == true) { - var xVia, yVia; - if (this.options.smoothCurves.enabled == true && this.options.smoothCurves.dynamic == true) { - xVia = this.via.x; - yVia = this.via.y; - } - else { - var via = this._getViaCoordinates(); - xVia = via.x; - yVia = via.y; - } - var minDistance = 1e9; - var distance; - var i,t,x,y, lastX, lastY; - for (i = 0; i < 10; i++) { - t = 0.1*i; - x = Math.pow(1-t,2)*x1 + (2*t*(1 - t))*xVia + Math.pow(t,2)*x2; - y = Math.pow(1-t,2)*y1 + (2*t*(1 - t))*yVia + Math.pow(t,2)*y2; - if (i > 0) { - distance = this._getDistanceToLine(lastX,lastY,x,y, x3,y3); - minDistance = distance < minDistance ? distance : minDistance; - } - lastX = x; lastY = y; - } - returnValue = minDistance; + while (isAlphaNumeric(c)) { + token += c; + next(); } - else { - returnValue = this._getDistanceToLine(x1,y1,x2,y2,x3,y3); + if (token == 'false') { + token = false; // convert to boolean + } + else if (token == 'true') { + token = true; // convert to boolean + } + else if (!isNaN(Number(token))) { + token = Number(token); // convert to number } + tokenType = TOKENTYPE.IDENTIFIER; + return; } - else { - var x, y, dx, dy; - var radius = 0.25 * this.physics.springLength; - var node = this.from; - if (node.width > node.height) { - x = node.x + 0.5 * node.width; - y = node.y - radius; + + // check for a string enclosed by double quotes + if (c == '"') { + next(); + while (c != '' && (c != '"' || (c == '"' && nextPreview() == '"'))) { + token += c; + if (c == '"') { // skip the escape character + next(); + } + next(); } - else { - x = node.x + radius; - y = node.y - 0.5 * node.height; + if (c != '"') { + throw newSyntaxError('End of string " expected'); } - dx = x - x3; - dy = y - y3; - returnValue = Math.abs(Math.sqrt(dx*dx + dy*dy) - radius); + next(); + tokenType = TOKENTYPE.IDENTIFIER; + return; } - if (this.labelDimensions.left < x3 && - this.labelDimensions.left + this.labelDimensions.width > x3 && - this.labelDimensions.top < y3 && - this.labelDimensions.top + this.labelDimensions.height > y3) { - return 0; - } - else { - return returnValue; + // something unknown is found, wrong characters, a syntax error + tokenType = TOKENTYPE.UNKNOWN; + while (c != '') { + token += c; + next(); } - }; + throw new SyntaxError('Syntax error in part "' + chop(token, 30) + '"'); + } - Edge.prototype._getDistanceToLine = function(x1,y1,x2,y2,x3,y3) { - var px = x2-x1, - py = y2-y1, - something = px*px + py*py, - u = ((x3 - x1) * px + (y3 - y1) * py) / something; + /** + * Parse a graph. + * @returns {Object} graph + */ + function parseGraph() { + var graph = {}; - if (u > 1) { - u = 1; + first(); + getToken(); + + // optional strict keyword + if (token == 'strict') { + graph.strict = true; + getToken(); } - else if (u < 0) { - u = 0; + + // graph or digraph keyword + if (token == 'graph' || token == 'digraph') { + graph.type = token; + getToken(); } - var x = x1 + u * px, - y = y1 + u * py, - dx = x - x3, - dy = y - y3; + // optional graph id + if (tokenType == TOKENTYPE.IDENTIFIER) { + graph.id = token; + getToken(); + } - //# Note: If the actual distance does not matter, - //# if you only want to compare what this function - //# returns to other results of this function, you - //# can just return the squared distance instead - //# (i.e. remove the sqrt) to gain a little performance + // open angle bracket + if (token != '{') { + throw newSyntaxError('Angle bracket { expected'); + } + getToken(); - return Math.sqrt(dx*dx + dy*dy); - }; + // statements + parseStatements(graph); - /** - * This allows the zoom level of the network to influence the rendering - * - * @param scale - */ - Edge.prototype.setScale = function(scale) { - this.networkScaleInv = 1.0/scale; - }; + // close angle bracket + if (token != '}') { + throw newSyntaxError('Angle bracket } expected'); + } + getToken(); + // end of file + if (token !== '') { + throw newSyntaxError('End of file expected'); + } + getToken(); - Edge.prototype.select = function() { - this.selected = true; - }; + // remove temporary default properties + delete graph.node; + delete graph.edge; + delete graph.graph; - Edge.prototype.unselect = function() { - this.selected = false; - }; + return graph; + } - Edge.prototype.positionBezierNode = function() { - if (this.via !== null && this.from !== null && this.to !== null) { - this.via.x = 0.5 * (this.from.x + this.to.x); - this.via.y = 0.5 * (this.from.y + this.to.y); - } - else { - this.via.x = 0; - this.via.y = 0; + /** + * Parse a list with statements. + * @param {Object} graph + */ + function parseStatements (graph) { + while (token !== '' && token != '}') { + parseStatement(graph); + if (token == ';') { + getToken(); + } } - }; + } /** - * This function draws the control nodes for the manipulator. - * In order to enable this, only set the this.controlNodesEnabled to true. - * @param ctx + * Parse a single statement. Can be a an attribute statement, node + * statement, a series of node statements and edge statements, or a + * parameter. + * @param {Object} graph */ - Edge.prototype._drawControlNodes = function(ctx) { - if (this.controlNodesEnabled == true) { - if (this.controlNodes.from === null && this.controlNodes.to === null) { - var nodeIdFrom = "edgeIdFrom:".concat(this.id); - var nodeIdTo = "edgeIdTo:".concat(this.id); - var constants = { - nodes:{group:'', radius:8}, - physics:{damping:0}, - clustering: {maxNodeSizeIncrements: 0 ,nodeScaling: {width:0, height: 0, radius:0}} - }; - this.controlNodes.from = new Node( - {id:nodeIdFrom, - shape:'dot', - color:{background:'#ff4e00', border:'#3c3c3c', highlight: {background:'#07f968'}} - },{},{},constants); - this.controlNodes.to = new Node( - {id:nodeIdTo, - shape:'dot', - color:{background:'#ff4e00', border:'#3c3c3c', highlight: {background:'#07f968'}} - },{},{},constants); - } + function parseStatement(graph) { + // parse subgraph + var subgraph = parseSubgraph(graph); + if (subgraph) { + // edge statements + parseEdge(graph, subgraph); - if (this.controlNodes.from.selected == false && this.controlNodes.to.selected == false) { - this.controlNodes.positions = this.getControlNodePositions(ctx); - this.controlNodes.from.x = this.controlNodes.positions.from.x; - this.controlNodes.from.y = this.controlNodes.positions.from.y; - this.controlNodes.to.x = this.controlNodes.positions.to.x; - this.controlNodes.to.y = this.controlNodes.positions.to.y; - } + return; + } - this.controlNodes.from.draw(ctx); - this.controlNodes.to.draw(ctx); + // parse an attribute statement + var attr = parseAttributeStatement(graph); + if (attr) { + return; + } + + // parse node + if (tokenType != TOKENTYPE.IDENTIFIER) { + throw newSyntaxError('Identifier expected'); + } + var id = token; // id can be a string or a number + getToken(); + + if (token == '=') { + // id statement + getToken(); + if (tokenType != TOKENTYPE.IDENTIFIER) { + throw newSyntaxError('Identifier expected'); + } + graph[id] = token; + getToken(); + // TODO: implement comma separated list with "a_list: ID=ID [','] [a_list] " } else { - this.controlNodes = {from:null, to:null, positions:{}}; + parseNodeStatement(graph, id); } - }; + } /** - * Enable control nodes. - * @private + * Parse a subgraph + * @param {Object} graph parent graph object + * @return {Object | null} subgraph */ - Edge.prototype._enableControlNodes = function() { - this.fromBackup = this.from; - this.toBackup = this.to; - this.controlNodesEnabled = true; - }; + function parseSubgraph (graph) { + var subgraph = null; - /** - * disable control nodes and remove from dynamicEdges from old node - * @private - */ - Edge.prototype._disableControlNodes = function() { - this.fromId = this.from.id; - this.toId = this.to.id; - if (this.fromId != this.fromBackup.id) { // from was changed, remove edge from old 'from' node dynamic edges - this.fromBackup.detachEdge(this); - } - else if (this.toId != this.toBackup.id) { // to was changed, remove edge from old 'to' node dynamic edges - this.toBackup.detachEdge(this); + // optional subgraph keyword + if (token == 'subgraph') { + subgraph = {}; + subgraph.type = 'subgraph'; + getToken(); + + // optional graph id + if (tokenType == TOKENTYPE.IDENTIFIER) { + subgraph.id = token; + getToken(); + } } - this.fromBackup = null; - this.toBackup = null; - this.controlNodesEnabled = false; - }; + // open angle bracket + if (token == '{') { + getToken(); + + if (!subgraph) { + subgraph = {}; + } + subgraph.parent = graph; + subgraph.node = graph.node; + subgraph.edge = graph.edge; + subgraph.graph = graph.graph; + + // statements + parseStatements(subgraph); + + // close angle bracket + if (token != '}') { + throw newSyntaxError('Angle bracket } expected'); + } + getToken(); + + // remove temporary default properties + delete subgraph.node; + delete subgraph.edge; + delete subgraph.graph; + delete subgraph.parent; + + // register at the parent graph + if (!graph.subgraphs) { + graph.subgraphs = []; + } + graph.subgraphs.push(subgraph); + } + return subgraph; + } /** - * This checks if one of the control nodes is selected and if so, returns the control node object. Else it returns null. - * @param x - * @param y - * @returns {null} - * @private + * parse an attribute statement like "node [shape=circle fontSize=16]". + * Available keywords are 'node', 'edge', 'graph'. + * The previous list with default attributes will be replaced + * @param {Object} graph + * @returns {String | null} keyword Returns the name of the parsed attribute + * (node, edge, graph), or null if nothing + * is parsed. */ - Edge.prototype._getSelectedControlNode = function(x,y) { - var positions = this.controlNodes.positions; - var fromDistance = Math.sqrt(Math.pow(x - positions.from.x,2) + Math.pow(y - positions.from.y,2)); - var toDistance = Math.sqrt(Math.pow(x - positions.to.x ,2) + Math.pow(y - positions.to.y ,2)); + function parseAttributeStatement (graph) { + // attribute statements + if (token == 'node') { + getToken(); - if (fromDistance < 15) { - this.connectedNode = this.from; - this.from = this.controlNodes.from; - return this.controlNodes.from; + // node attributes + graph.node = parseAttributeList(); + return 'node'; } - else if (toDistance < 15) { - this.connectedNode = this.to; - this.to = this.controlNodes.to; - return this.controlNodes.to; + else if (token == 'edge') { + getToken(); + + // edge attributes + graph.edge = parseAttributeList(); + return 'edge'; } - else { - return null; + else if (token == 'graph') { + getToken(); + + // graph attributes + graph.graph = parseAttributeList(); + return 'graph'; } - }; + return null; + } /** - * this resets the control nodes to their original position. - * @private + * parse a node statement + * @param {Object} graph + * @param {String | Number} id */ - Edge.prototype._restoreControlNodes = function() { - if (this.controlNodes.from.selected == true) { - this.from = this.connectedNode; - this.connectedNode = null; - this.controlNodes.from.unselect(); - } - else if (this.controlNodes.to.selected == true) { - this.to = this.connectedNode; - this.connectedNode = null; - this.controlNodes.to.unselect(); + function parseNodeStatement(graph, id) { + // node statement + var node = { + id: id + }; + var attr = parseAttributeList(); + if (attr) { + node.attr = attr; } - }; + addNode(graph, node); + + // edge statements + parseEdge(graph, id); + } /** - * this calculates the position of the control nodes on the edges of the parent nodes. - * - * @param ctx - * @returns {{from: {x: number, y: number}, to: {x: *, y: *}}} + * Parse an edge or a series of edges + * @param {Object} graph + * @param {String | Number} from Id of the from node */ - Edge.prototype.getControlNodePositions = function(ctx) { - var angle = Math.atan2((this.to.y - this.from.y), (this.to.x - this.from.x)); - var dx = (this.to.x - this.from.x); - var dy = (this.to.y - this.from.y); - var edgeSegmentLength = Math.sqrt(dx * dx + dy * dy); - var fromBorderDist = this.from.distanceToBorder(ctx, angle + Math.PI); - var fromBorderPoint = (edgeSegmentLength - fromBorderDist) / edgeSegmentLength; - var xFrom = (fromBorderPoint) * this.from.x + (1 - fromBorderPoint) * this.to.x; - var yFrom = (fromBorderPoint) * this.from.y + (1 - fromBorderPoint) * this.to.y; - - var via; - if (this.options.smoothCurves.dynamic == true && this.options.smoothCurves.enabled == true) { - via = this.via; - } - else if (this.options.smoothCurves.enabled == true) { - via = this._getViaCoordinates(); - } - - if (this.options.smoothCurves.enabled == true && via.x != null) { - angle = Math.atan2((this.to.y - via.y), (this.to.x - via.x)); - dx = (this.to.x - via.x); - dy = (this.to.y - via.y); - edgeSegmentLength = Math.sqrt(dx * dx + dy * dy); - } - var toBorderDist = this.to.distanceToBorder(ctx, angle); - var toBorderPoint = (edgeSegmentLength - toBorderDist) / edgeSegmentLength; + function parseEdge(graph, from) { + while (token == '->' || token == '--') { + var to; + var type = token; + getToken(); - var xTo,yTo; - if (this.options.smoothCurves.enabled == true && via.x != null) { - xTo = (1 - toBorderPoint) * via.x + toBorderPoint * this.to.x; - yTo = (1 - toBorderPoint) * via.y + toBorderPoint * this.to.y; - } - else { - xTo = (1 - toBorderPoint) * this.from.x + toBorderPoint * this.to.x; - yTo = (1 - toBorderPoint) * this.from.y + toBorderPoint * this.to.y; - } + var subgraph = parseSubgraph(graph); + if (subgraph) { + to = subgraph; + } + else { + if (tokenType != TOKENTYPE.IDENTIFIER) { + throw newSyntaxError('Identifier or subgraph expected'); + } + to = token; + addNode(graph, { + id: to + }); + getToken(); + } - return {from:{x:xFrom,y:yFrom},to:{x:xTo,y:yTo}}; - }; + // parse edge attributes + var attr = parseAttributeList(); - module.exports = Edge; + // create edge + var edge = createEdge(graph, from, to, type, attr); + addEdge(graph, edge); -/***/ }, -/* 58 */ -/***/ function(module, exports, __webpack_require__) { + from = to; + } + } /** - * Popup is a class to create a popup window with some text - * @param {Element} container The container object. - * @param {Number} [x] - * @param {Number} [y] - * @param {String} [text] - * @param {Object} [style] An object containing borderColor, - * backgroundColor, etc. + * Parse a set with attributes, + * for example [label="1.000", shape=solid] + * @return {Object | null} attr */ - function Popup(container, x, y, text, style) { - if (container) { - this.container = container; - } - else { - this.container = document.body; - } + function parseAttributeList() { + var attr = null; - // x, y and text are optional, see if a style object was passed in their place - if (style === undefined) { - if (typeof x === "object") { - style = x; - x = undefined; - } else if (typeof text === "object") { - style = text; - text = undefined; - } else { - // for backwards compatibility, in case clients other than Network are creating Popup directly - style = { - fontColor: 'black', - fontSize: 14, // px - fontFace: 'verdana', - color: { - border: '#666', - background: '#FFFFC6' - } + while (token == '[') { + getToken(); + attr = {}; + while (token !== '' && token != ']') { + if (tokenType != TOKENTYPE.IDENTIFIER) { + throw newSyntaxError('Attribute name expected'); } - } - } + var name = token; - this.x = 0; - this.y = 0; - this.padding = 5; + getToken(); + if (token != '=') { + throw newSyntaxError('Equal sign = expected'); + } + getToken(); - if (x !== undefined && y !== undefined ) { - this.setPosition(x, y); - } - if (text !== undefined) { - this.setText(text); - } + if (tokenType != TOKENTYPE.IDENTIFIER) { + throw newSyntaxError('Attribute value expected'); + } + var value = token; + setValue(attr, name, value); // name can be a path - // create the frame - this.frame = document.createElement("div"); - var styleAttr = this.frame.style; - styleAttr.position = "absolute"; - styleAttr.visibility = "hidden"; - styleAttr.border = "1px solid " + style.color.border; - styleAttr.color = style.fontColor; - styleAttr.fontSize = style.fontSize + "px"; - styleAttr.fontFamily = style.fontFace; - styleAttr.padding = this.padding + "px"; - styleAttr.backgroundColor = style.color.background; - styleAttr.borderRadius = "3px"; - styleAttr.MozBorderRadius = "3px"; - styleAttr.WebkitBorderRadius = "3px"; - styleAttr.boxShadow = "3px 3px 10px rgba(128, 128, 128, 0.5)"; - styleAttr.whiteSpace = "nowrap"; - this.container.appendChild(this.frame); + getToken(); + if (token ==',') { + getToken(); + } + } + + if (token != ']') { + throw newSyntaxError('Bracket ] expected'); + } + getToken(); + } + + return attr; } /** - * @param {number} x Horizontal position of the popup window - * @param {number} y Vertical position of the popup window + * Create a syntax error with extra information on current token and index. + * @param {String} message + * @returns {SyntaxError} err */ - Popup.prototype.setPosition = function(x, y) { - this.x = parseInt(x); - this.y = parseInt(y); - }; + function newSyntaxError(message) { + return new SyntaxError(message + ', got "' + chop(token, 30) + '" (char ' + index + ')'); + } /** - * Set the content for the popup window. This can be HTML code or text. - * @param {string | Element} content + * Chop off text after a maximum length + * @param {String} text + * @param {Number} maxLength + * @returns {String} */ - Popup.prototype.setText = function(content) { - if (content instanceof Element) { - this.frame.innerHTML = ''; - this.frame.appendChild(content); + function chop (text, maxLength) { + return (text.length <= maxLength) ? text : (text.substr(0, 27) + '...'); + } + + /** + * Execute a function fn for each pair of elements in two arrays + * @param {Array | *} array1 + * @param {Array | *} array2 + * @param {function} fn + */ + function forEach2(array1, array2, fn) { + if (Array.isArray(array1)) { + array1.forEach(function (elem1) { + if (Array.isArray(array2)) { + array2.forEach(function (elem2) { + fn(elem1, elem2); + }); + } + else { + fn(elem1, array2); + } + }); } else { - this.frame.innerHTML = content; // string containing text or HTML + if (Array.isArray(array2)) { + array2.forEach(function (elem2) { + fn(array1, elem2); + }); + } + else { + fn(array1, array2); + } } - }; + } /** - * Show the popup window - * @param {boolean} show Optional. Show or hide the window + * Convert a string containing a graph in DOT language into a map containing + * with nodes and edges in the format of graph. + * @param {String} data Text containing a graph in DOT-notation + * @return {Object} graphData */ - Popup.prototype.show = function (show) { - if (show === undefined) { - show = true; - } + function DOTToGraph (data) { + // parse the DOT file + var dotData = parseDOT(data); + var graphData = { + nodes: [], + edges: [], + options: {} + }; - if (show) { - var height = this.frame.clientHeight; - var width = this.frame.clientWidth; - var maxHeight = this.frame.parentNode.clientHeight; - var maxWidth = this.frame.parentNode.clientWidth; + // copy the nodes + if (dotData.nodes) { + dotData.nodes.forEach(function (dotNode) { + var graphNode = { + id: dotNode.id, + label: String(dotNode.label || dotNode.id) + }; + merge(graphNode, dotNode.attr); + if (graphNode.image) { + graphNode.shape = 'image'; + } + graphData.nodes.push(graphNode); + }); + } - var top = (this.y - height); - if (top + height + this.padding > maxHeight) { - top = maxHeight - height - this.padding; - } - if (top < this.padding) { - top = this.padding; + // copy the edges + if (dotData.edges) { + /** + * Convert an edge in DOT format to an edge with VisGraph format + * @param {Object} dotEdge + * @returns {Object} graphEdge + */ + var convertEdge = function (dotEdge) { + var graphEdge = { + from: dotEdge.from, + to: dotEdge.to + }; + merge(graphEdge, dotEdge.attr); + graphEdge.style = (dotEdge.type == '->') ? 'arrow' : 'line'; + return graphEdge; } - var left = this.x; - if (left + width + this.padding > maxWidth) { - left = maxWidth - width - this.padding; - } - if (left < this.padding) { - left = this.padding; + dotData.edges.forEach(function (dotEdge) { + var from, to; + if (dotEdge.from instanceof Object) { + from = dotEdge.from.nodes; + } + else { + from = { + id: dotEdge.from + } + } + + if (dotEdge.to instanceof Object) { + to = dotEdge.to.nodes; + } + else { + to = { + id: dotEdge.to + } + } + + if (dotEdge.from instanceof Object && dotEdge.from.edges) { + dotEdge.from.edges.forEach(function (subEdge) { + var graphEdge = convertEdge(subEdge); + graphData.edges.push(graphEdge); + }); + } + + forEach2(from, to, function (from, to) { + var subEdge = createEdge(graphData, from.id, to.id, dotEdge.type, dotEdge.attr); + var graphEdge = convertEdge(subEdge); + graphData.edges.push(graphEdge); + }); + + if (dotEdge.to instanceof Object && dotEdge.to.edges) { + dotEdge.to.edges.forEach(function (subEdge) { + var graphEdge = convertEdge(subEdge); + graphData.edges.push(graphEdge); + }); + } + }); + } + + // copy the options + if (dotData.attr) { + graphData.options = dotData.attr; + } + + return graphData; + } + + // exports + exports.parseDOT = parseDOT; + exports.DOTToGraph = DOTToGraph; + + +/***/ }, +/* 58 */ +/***/ function(module, exports, __webpack_require__) { + + + function parseGephi(gephiJSON, options) { + var edges = []; + var nodes = []; + this.options = { + edges: { + inheritColor: true + }, + nodes: { + allowedToMove: false, + parseColor: false } + }; - this.frame.style.left = left + "px"; - this.frame.style.top = top + "px"; - this.frame.style.visibility = "visible"; + if (options !== undefined) { + this.options.nodes['allowedToMove'] = options.allowedToMove | false; + this.options.nodes['parseColor'] = options.parseColor | false; + this.options.edges['inheritColor'] = options.inheritColor | true; } - else { - this.hide(); + + var gEdges = gephiJSON.edges; + var gNodes = gephiJSON.nodes; + for (var i = 0; i < gEdges.length; i++) { + var edge = {}; + var gEdge = gEdges[i]; + edge['id'] = gEdge.id; + edge['from'] = gEdge.source; + edge['to'] = gEdge.target; + edge['attributes'] = gEdge.attributes; + // edge['value'] = gEdge.attributes !== undefined ? gEdge.attributes.Weight : undefined; + // edge['width'] = edge['value'] !== undefined ? undefined : edgegEdge.size; + edge['color'] = gEdge.color; + edge['inheritColor'] = edge['color'] !== undefined ? false : this.options.inheritColor; + edges.push(edge); } - }; - /** - * Hide the popup window - */ - Popup.prototype.hide = function () { - this.frame.style.visibility = "hidden"; - }; + for (var i = 0; i < gNodes.length; i++) { + var node = {}; + var gNode = gNodes[i]; + node['id'] = gNode.id; + node['attributes'] = gNode.attributes; + node['x'] = gNode.x; + node['y'] = gNode.y; + node['label'] = gNode.label; + if (this.options.nodes.parseColor == true) { + node['color'] = gNode.color; + } + else { + node['color'] = gNode.color !== undefined ? {background:gNode.color, border:gNode.color} : undefined; + } + node['radius'] = gNode.size; + node['allowedToMoveX'] = this.options.nodes.allowedToMove; + node['allowedToMoveY'] = this.options.nodes.allowedToMove; + nodes.push(node); + } - module.exports = Popup; + return {nodes:nodes, edges:edges}; + } + exports.parseGephi = parseGephi; /***/ }, /* 59 */ @@ -31180,7 +31195,7 @@ return /******/ (function(modules) { // webpackBootstrap /***/ function(module, exports, __webpack_require__) { var util = __webpack_require__(1); - var Node = __webpack_require__(56); + var Node = __webpack_require__(53); /** * Creation of the SectorMixin var. @@ -31738,7 +31753,7 @@ return /******/ (function(modules) { // webpackBootstrap /* 66 */ /***/ function(module, exports, __webpack_require__) { - var Node = __webpack_require__(56); + var Node = __webpack_require__(53); /** * This function can be called from the _doInAllSectors function @@ -32453,8 +32468,8 @@ return /******/ (function(modules) { // webpackBootstrap /***/ function(module, exports, __webpack_require__) { var util = __webpack_require__(1); - var Node = __webpack_require__(56); - var Edge = __webpack_require__(57); + var Node = __webpack_require__(53); + var Edge = __webpack_require__(52); /** * clears the toolbar div element of children diff --git a/docs/network.html b/docs/network.html index 867158ae..10f9f588 100644 --- a/docs/network.html +++ b/docs/network.html @@ -2222,7 +2222,11 @@ var options = { none Remove an event listener created before via function on(event, callback). See section Events for more information. - + + destroy() + none + Remove all bindings and clean up after the Network. + redraw() none diff --git a/lib/network/Network.js b/lib/network/Network.js index 8a84e425..c22afaec 100644 --- a/lib/network/Network.js +++ b/lib/network/Network.js @@ -835,6 +835,21 @@ Network.prototype._createKeyBinds = function() { } }; + +Network.prototype.destroy = function() { + // remove keybindings + this.keycharm.reset(); + + // clear hammer bindings + this.hammer.dispose(); + + // clear events + this.off(); + + +} + + /** * Get the pointer location from a touch location * @param {{pageX: Number, pageY: Number}} touch From cad2b17629151a4509fb3b19737bc8004dc73f9e Mon Sep 17 00:00:00 2001 From: Alex de Mulder Date: Wed, 24 Dec 2014 11:57:27 +0100 Subject: [PATCH 17/20] Added zoomExtentOnStabilize option to network. fixed ex 17 --- HISTORY.md | 1 + dist/vis.js | 3599 +++++++++++++------------ docs/network.html | 8 + examples/network/17_network_info.html | 7 +- lib/network/Network.js | 7 +- 5 files changed, 1821 insertions(+), 1801 deletions(-) diff --git a/HISTORY.md b/HISTORY.md index 19e045ba..90f84b11 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -7,6 +7,7 @@ http://visjs.org ### Network - Fixed flipping of hierarchical network on update when using RL and DU. +- Added zoomExtentOnStabilize option to network. ### Graph2d diff --git a/dist/vis.js b/dist/vis.js index afc2ace1..516d408f 100644 --- a/dist/vis.js +++ b/dist/vis.js @@ -5,7 +5,7 @@ * A dynamic, browser-based visualization library. * * @version 3.7.2-SNAPSHOT - * @date 2014-12-23 + * @date 2014-12-24 * * @license * Copyright (C) 2011-2014 Almende B.V, http://almende.com @@ -22484,10 +22484,10 @@ return /******/ (function(modules) { // webpackBootstrap var Popup = __webpack_require__(56); var MixinLoader = __webpack_require__(59); var Activator = __webpack_require__(35); - var locales = __webpack_require__(70); + var locales = __webpack_require__(60); // Load custom shapes into CanvasRenderingContext2D - __webpack_require__(71); + __webpack_require__(61); /** * @constructor Network @@ -22661,6 +22661,7 @@ return /******/ (function(modules) { // webpackBootstrap minVelocity: 0.1, // px/s stabilize: true, // stabilize before displaying the network stabilizationIterations: 1000, // maximum number of iteration to stabilize + zoomExtentOnStabilize: true, locale: 'en', locales: locales, tooltip: { @@ -24463,7 +24464,11 @@ return /******/ (function(modules) { // webpackBootstrap this._physicsTick(); count++; } - this.zoomExtent(undefined,false,true); + + if (this.constants.zoomExtentOnStabilize == true) { + this.zoomExtent(undefined, false, true); + } + if (this.constants.freezeForStabilization == true) { this._restoreFrozenNodes(); } @@ -28508,13 +28513,13 @@ return /******/ (function(modules) { // webpackBootstrap /* 59 */ /***/ function(module, exports, __webpack_require__) { - var PhysicsMixin = __webpack_require__(60); - var ClusterMixin = __webpack_require__(64); - var SectorsMixin = __webpack_require__(65); - var SelectionMixin = __webpack_require__(66); - var ManipulationMixin = __webpack_require__(67); - var NavigationMixin = __webpack_require__(68); - var HierarchicalLayoutMixin = __webpack_require__(69); + var PhysicsMixin = __webpack_require__(62); + var ClusterMixin = __webpack_require__(63); + var SectorsMixin = __webpack_require__(64); + var SelectionMixin = __webpack_require__(65); + var ManipulationMixin = __webpack_require__(66); + var NavigationMixin = __webpack_require__(67); + var HierarchicalLayoutMixin = __webpack_require__(68); /** * Load a mixin into the network object @@ -28707,12 +28712,284 @@ return /******/ (function(modules) { // webpackBootstrap /***/ }, /* 60 */ +/***/ function(module, exports, __webpack_require__) { + + // English + exports['en'] = { + edit: 'Edit', + del: 'Delete selected', + back: 'Back', + addNode: 'Add Node', + addEdge: 'Add Edge', + editNode: 'Edit Node', + editEdge: 'Edit Edge', + addDescription: 'Click in an empty space to place a new node.', + edgeDescription: 'Click on a node and drag the edge to another node to connect them.', + editEdgeDescription: 'Click on the control points and drag them to a node to connect to it.', + createEdgeError: 'Cannot link edges to a cluster.', + deleteClusterError: 'Clusters cannot be deleted.' + }; + exports['en_EN'] = exports['en']; + exports['en_US'] = exports['en']; + + // Dutch + exports['nl'] = { + edit: 'Wijzigen', + del: 'Selectie verwijderen', + back: 'Terug', + addNode: 'Node toevoegen', + addEdge: 'Link toevoegen', + editNode: 'Node wijzigen', + editEdge: 'Link wijzigen', + addDescription: 'Klik op een leeg gebied om een nieuwe node te maken.', + edgeDescription: 'Klik op een node en sleep de link naar een andere node om ze te verbinden.', + editEdgeDescription: 'Klik op de verbindingspunten en sleep ze naar een node om daarmee te verbinden.', + createEdgeError: 'Kan geen link maken naar een cluster.', + deleteClusterError: 'Clusters kunnen niet worden verwijderd.' + }; + exports['nl_NL'] = exports['nl']; + exports['nl_BE'] = exports['nl']; + + +/***/ }, +/* 61 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Canvas shapes used by Network + */ + if (typeof CanvasRenderingContext2D !== 'undefined') { + + /** + * Draw a circle shape + */ + CanvasRenderingContext2D.prototype.circle = function(x, y, r) { + this.beginPath(); + this.arc(x, y, r, 0, 2*Math.PI, false); + }; + + /** + * Draw a square shape + * @param {Number} x horizontal center + * @param {Number} y vertical center + * @param {Number} r size, width and height of the square + */ + CanvasRenderingContext2D.prototype.square = function(x, y, r) { + this.beginPath(); + this.rect(x - r, y - r, r * 2, r * 2); + }; + + /** + * Draw a triangle shape + * @param {Number} x horizontal center + * @param {Number} y vertical center + * @param {Number} r radius, half the length of the sides of the triangle + */ + CanvasRenderingContext2D.prototype.triangle = function(x, y, r) { + // http://en.wikipedia.org/wiki/Equilateral_triangle + this.beginPath(); + + var s = r * 2; + var s2 = s / 2; + var ir = Math.sqrt(3) / 6 * s; // radius of inner circle + var h = Math.sqrt(s * s - s2 * s2); // height + + this.moveTo(x, y - (h - ir)); + this.lineTo(x + s2, y + ir); + this.lineTo(x - s2, y + ir); + this.lineTo(x, y - (h - ir)); + this.closePath(); + }; + + /** + * Draw a triangle shape in downward orientation + * @param {Number} x horizontal center + * @param {Number} y vertical center + * @param {Number} r radius + */ + CanvasRenderingContext2D.prototype.triangleDown = function(x, y, r) { + // http://en.wikipedia.org/wiki/Equilateral_triangle + this.beginPath(); + + var s = r * 2; + var s2 = s / 2; + var ir = Math.sqrt(3) / 6 * s; // radius of inner circle + var h = Math.sqrt(s * s - s2 * s2); // height + + this.moveTo(x, y + (h - ir)); + this.lineTo(x + s2, y - ir); + this.lineTo(x - s2, y - ir); + this.lineTo(x, y + (h - ir)); + this.closePath(); + }; + + /** + * Draw a star shape, a star with 5 points + * @param {Number} x horizontal center + * @param {Number} y vertical center + * @param {Number} r radius, half the length of the sides of the triangle + */ + CanvasRenderingContext2D.prototype.star = function(x, y, r) { + // http://www.html5canvastutorials.com/labs/html5-canvas-star-spinner/ + this.beginPath(); + + for (var n = 0; n < 10; n++) { + var radius = (n % 2 === 0) ? r * 1.3 : r * 0.5; + this.lineTo( + x + radius * Math.sin(n * 2 * Math.PI / 10), + y - radius * Math.cos(n * 2 * Math.PI / 10) + ); + } + + this.closePath(); + }; + + /** + * http://stackoverflow.com/questions/1255512/how-to-draw-a-rounded-rectangle-on-html-canvas + */ + CanvasRenderingContext2D.prototype.roundRect = function(x, y, w, h, r) { + var r2d = Math.PI/180; + if( w - ( 2 * r ) < 0 ) { r = ( w / 2 ); } //ensure that the radius isn't too large for x + if( h - ( 2 * r ) < 0 ) { r = ( h / 2 ); } //ensure that the radius isn't too large for y + this.beginPath(); + this.moveTo(x+r,y); + this.lineTo(x+w-r,y); + this.arc(x+w-r,y+r,r,r2d*270,r2d*360,false); + this.lineTo(x+w,y+h-r); + this.arc(x+w-r,y+h-r,r,0,r2d*90,false); + this.lineTo(x+r,y+h); + this.arc(x+r,y+h-r,r,r2d*90,r2d*180,false); + this.lineTo(x,y+r); + this.arc(x+r,y+r,r,r2d*180,r2d*270,false); + }; + + /** + * http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas + */ + CanvasRenderingContext2D.prototype.ellipse = function(x, y, w, h) { + var kappa = .5522848, + ox = (w / 2) * kappa, // control point offset horizontal + oy = (h / 2) * kappa, // control point offset vertical + xe = x + w, // x-end + ye = y + h, // y-end + xm = x + w / 2, // x-middle + ym = y + h / 2; // y-middle + + this.beginPath(); + this.moveTo(x, ym); + this.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y); + this.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym); + this.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye); + this.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym); + }; + + + + /** + * http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas + */ + CanvasRenderingContext2D.prototype.database = function(x, y, w, h) { + var f = 1/3; + var wEllipse = w; + var hEllipse = h * f; + + var kappa = .5522848, + ox = (wEllipse / 2) * kappa, // control point offset horizontal + oy = (hEllipse / 2) * kappa, // control point offset vertical + xe = x + wEllipse, // x-end + ye = y + hEllipse, // y-end + xm = x + wEllipse / 2, // x-middle + ym = y + hEllipse / 2, // y-middle + ymb = y + (h - hEllipse/2), // y-midlle, bottom ellipse + yeb = y + h; // y-end, bottom ellipse + + this.beginPath(); + this.moveTo(xe, ym); + + this.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye); + this.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym); + + this.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y); + this.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym); + + this.lineTo(xe, ymb); + + this.bezierCurveTo(xe, ymb + oy, xm + ox, yeb, xm, yeb); + this.bezierCurveTo(xm - ox, yeb, x, ymb + oy, x, ymb); + + this.lineTo(x, ym); + }; + + + /** + * Draw an arrow point (no line) + */ + CanvasRenderingContext2D.prototype.arrow = function(x, y, angle, length) { + // tail + var xt = x - length * Math.cos(angle); + var yt = y - length * Math.sin(angle); + + // inner tail + // TODO: allow to customize different shapes + var xi = x - length * 0.9 * Math.cos(angle); + var yi = y - length * 0.9 * Math.sin(angle); + + // left + var xl = xt + length / 3 * Math.cos(angle + 0.5 * Math.PI); + var yl = yt + length / 3 * Math.sin(angle + 0.5 * Math.PI); + + // right + var xr = xt + length / 3 * Math.cos(angle - 0.5 * Math.PI); + var yr = yt + length / 3 * Math.sin(angle - 0.5 * Math.PI); + + this.beginPath(); + this.moveTo(x, y); + this.lineTo(xl, yl); + this.lineTo(xi, yi); + this.lineTo(xr, yr); + this.closePath(); + }; + + /** + * Sets up the dashedLine functionality for drawing + * Original code came from http://stackoverflow.com/questions/4576724/dotted-stroke-in-canvas + * @author David Jordan + * @date 2012-08-08 + */ + CanvasRenderingContext2D.prototype.dashedLine = function(x,y,x2,y2,dashArray){ + if (!dashArray) dashArray=[10,5]; + if (dashLength==0) dashLength = 0.001; // Hack for Safari + var dashCount = dashArray.length; + this.moveTo(x, y); + var dx = (x2-x), dy = (y2-y); + var slope = dy/dx; + var distRemaining = Math.sqrt( dx*dx + dy*dy ); + var dashIndex=0, draw=true; + while (distRemaining>=0.1){ + var dashLength = dashArray[dashIndex++%dashCount]; + if (dashLength > distRemaining) dashLength = distRemaining; + var xStep = Math.sqrt( dashLength*dashLength / (1 + slope*slope) ); + if (dx<0) xStep = -xStep; + x += xStep; + y += slope*xStep; + this[draw ? 'lineTo' : 'moveTo'](x,y); + distRemaining -= dashLength; + draw = !draw; + } + }; + + // TODO: add diamond shape + } + + +/***/ }, +/* 62 */ /***/ function(module, exports, __webpack_require__) { var util = __webpack_require__(1); - var RepulsionMixin = __webpack_require__(61); - var HierarchialRepulsionMixin = __webpack_require__(62); - var BarnesHutMixin = __webpack_require__(63); + var RepulsionMixin = __webpack_require__(69); + var HierarchialRepulsionMixin = __webpack_require__(70); + var BarnesHutMixin = __webpack_require__(71); /** * Toggling barnes Hut calculation on and off. @@ -29420,258 +29697,276 @@ return /******/ (function(modules) { // webpackBootstrap /***/ }, -/* 61 */ +/* 63 */ /***/ function(module, exports, __webpack_require__) { /** - * Calculate the forces the nodes apply on each other based on a repulsion field. - * This field is linearly approximated. + * Creation of the ClusterMixin var. * - * @private + * This contains all the functions the Network object can use to employ clustering */ - exports._calculateNodeForces = function () { - var dx, dy, angle, distance, fx, fy, combinedClusterSize, - repulsingForce, node1, node2, i, j; - - var nodes = this.calculationNodes; - var nodeIndices = this.calculationNodeIndices; - // approximation constants - var a_base = -2 / 3; - var b = 4 / 3; + /** + * This is only called in the constructor of the network object + * + */ + exports.startWithClustering = function() { + // cluster if the data set is big + this.clusterToFit(this.constants.clustering.initialMaxNodes, true); - // repulsing forces between nodes - var nodeDistance = this.constants.physics.repulsion.nodeDistance; - var minimumDistance = nodeDistance; + // updates the lables after clustering + this.updateLabels(); - // we loop from i over all but the last entree in the array - // j loops from i+1 to the last. This way we do not double count any of the indices, nor i == j - for (i = 0; i < nodeIndices.length - 1; i++) { - node1 = nodes[nodeIndices[i]]; - for (j = i + 1; j < nodeIndices.length; j++) { - node2 = nodes[nodeIndices[j]]; - combinedClusterSize = node1.clusterSize + node2.clusterSize - 2; + // this is called here because if clusterin is disabled, the start and stabilize are called in + // the setData function. + if (this.stabilize) { + this._stabilize(); + } + this.start(); + }; - dx = node2.x - node1.x; - dy = node2.y - node1.y; - distance = Math.sqrt(dx * dx + dy * dy); + /** + * This function clusters until the initialMaxNodes has been reached + * + * @param {Number} maxNumberOfNodes + * @param {Boolean} reposition + */ + exports.clusterToFit = function(maxNumberOfNodes, reposition) { + var numberOfNodes = this.nodeIndices.length; - minimumDistance = (combinedClusterSize == 0) ? nodeDistance : (nodeDistance * (1 + combinedClusterSize * this.constants.clustering.distanceAmplification)); - var a = a_base / minimumDistance; - if (distance < 2 * minimumDistance) { - if (distance < 0.5 * minimumDistance) { - repulsingForce = 1.0; - } - else { - repulsingForce = a * distance + b; // linear approx of 1 / (1 + Math.exp((distance / minimumDistance - 1) * steepness)) - } + var maxLevels = 50; + var level = 0; - // amplify the repulsion for clusters. - repulsingForce *= (combinedClusterSize == 0) ? 1 : 1 + combinedClusterSize * this.constants.clustering.forceAmplification; - repulsingForce = repulsingForce / distance; + // we first cluster the hubs, then we pull in the outliers, repeat + while (numberOfNodes > maxNumberOfNodes && level < maxLevels) { + if (level % 3 == 0) { + this.forceAggregateHubs(true); + this.normalizeClusterLevels(); + } + else { + this.increaseClusterLevel(); // this also includes a cluster normalization + } - fx = dx * repulsingForce; - fy = dy * repulsingForce; + numberOfNodes = this.nodeIndices.length; + level += 1; + } - node1.fx -= fx; - node1.fy -= fy; - node2.fx += fx; - node2.fy += fy; - } - } + // after the clustering we reposition the nodes to reduce the initial chaos + if (level > 0 && reposition == true) { + this.repositionNodes(); } + this._updateCalculationNodes(); }; - -/***/ }, -/* 62 */ -/***/ function(module, exports, __webpack_require__) { - /** - * Calculate the forces the nodes apply on eachother based on a repulsion field. - * This field is linearly approximated. + * This function can be called to open up a specific cluster. It is only called by + * It will unpack the cluster back one level. * - * @private + * @param node | Node object: cluster to open. */ - exports._calculateNodeForces = function () { - var dx, dy, distance, fx, fy, - repulsingForce, node1, node2, i, j; - - var nodes = this.calculationNodes; - var nodeIndices = this.calculationNodeIndices; - - // repulsing forces between nodes - var nodeDistance = this.constants.physics.hierarchicalRepulsion.nodeDistance; + exports.openCluster = function(node) { + var isMovingBeforeClustering = this.moving; + if (node.clusterSize > this.constants.clustering.sectorThreshold && this._nodeInActiveArea(node) && + !(this._sector() == "default" && this.nodeIndices.length == 1)) { + // this loads a new sector, loads the nodes and edges and nodeIndices of it. + this._addSector(node); + var level = 0; - // we loop from i over all but the last entree in the array - // j loops from i+1 to the last. This way we do not double count any of the indices, nor i == j - for (i = 0; i < nodeIndices.length - 1; i++) { - node1 = nodes[nodeIndices[i]]; - for (j = i + 1; j < nodeIndices.length; j++) { - node2 = nodes[nodeIndices[j]]; + // we decluster until we reach a decent number of nodes + while ((this.nodeIndices.length < this.constants.clustering.initialMaxNodes) && (level < 10)) { + this.decreaseClusterLevel(); + level += 1; + } - // nodes only affect nodes on their level - if (node1.level == node2.level) { + } + else { + this._expandClusterNode(node,false,true); - dx = node2.x - node1.x; - dy = node2.y - node1.y; - distance = Math.sqrt(dx * dx + dy * dy); + // update the index list, dynamic edges and labels + this._updateNodeIndexList(); + this._updateDynamicEdges(); + this._updateCalculationNodes(); + this.updateLabels(); + } + // if the simulation was settled, we restart the simulation if a cluster has been formed or expanded + if (this.moving != isMovingBeforeClustering) { + this.start(); + } + }; - var steepness = 0.05; - if (distance < nodeDistance) { - repulsingForce = -Math.pow(steepness*distance,2) + Math.pow(steepness*nodeDistance,2); - } - else { - repulsingForce = 0; - } - // normalize force with - if (distance == 0) { - distance = 0.01; - } - else { - repulsingForce = repulsingForce / distance; - } - fx = dx * repulsingForce; - fy = dy * repulsingForce; - node1.fx -= fx; - node1.fy -= fy; - node2.fx += fx; - node2.fy += fy; - } - } + /** + * This calls the updateClustes with default arguments + */ + exports.updateClustersDefault = function() { + if (this.constants.clustering.enabled == true) { + this.updateClusters(0,false,false); } }; /** - * this function calculates the effects of the springs in the case of unsmooth curves. - * - * @private + * This function can be called to increase the cluster level. This means that the nodes with only one edge connection will + * be clustered with their connected node. This can be repeated as many times as needed. + * This can be called externally (by a keybind for instance) to reduce the complexity of big datasets. */ - exports._calculateHierarchicalSpringForces = function () { - var edgeLength, edge, edgeId; - var dx, dy, fx, fy, springForce, distance; - var edges = this.edges; + exports.increaseClusterLevel = function() { + this.updateClusters(-1,false,true); + }; - var nodes = this.calculationNodes; - var nodeIndices = this.calculationNodeIndices; + /** + * This function can be called to decrease the cluster level. This means that the nodes with only one edge connection will + * be unpacked if they are a cluster. This can be repeated as many times as needed. + * This can be called externally (by a key-bind for instance) to look into clusters without zooming. + */ + exports.decreaseClusterLevel = function() { + this.updateClusters(1,false,true); + }; - for (var i = 0; i < nodeIndices.length; i++) { - var node1 = nodes[nodeIndices[i]]; - node1.springFx = 0; - node1.springFy = 0; - } + /** + * This is the main clustering function. It clusters and declusters on zoom or forced + * This function clusters on zoom, it can be called with a predefined zoom direction + * If out, check if we can form clusters, if in, check if we can open clusters. + * This function is only called from _zoom() + * + * @param {Number} zoomDirection | -1 / 0 / +1 for zoomOut / determineByZoom / zoomIn + * @param {Boolean} recursive | enabled or disable recursive calling of the opening of clusters + * @param {Boolean} force | enabled or disable forcing + * @param {Boolean} doNotStart | if true do not call start + * + */ + exports.updateClusters = function(zoomDirection,recursive,force,doNotStart) { + var isMovingBeforeClustering = this.moving; + var amountOfNodes = this.nodeIndices.length; - // forces caused by the edges, modelled as springs - for (edgeId in edges) { - if (edges.hasOwnProperty(edgeId)) { - edge = edges[edgeId]; - if (edge.connected) { - // only calculate forces if nodes are in the same sector - if (this.nodes.hasOwnProperty(edge.toId) && this.nodes.hasOwnProperty(edge.fromId)) { - edgeLength = edge.physics.springLength; - // this implies that the edges between big clusters are longer - edgeLength += (edge.to.clusterSize + edge.from.clusterSize - 2) * this.constants.clustering.edgeGrowth; + // on zoom out collapse the sector if the scale is at the level the sector was made + if (this.previousScale > this.scale && zoomDirection == 0) { + this._collapseSector(); + } - dx = (edge.from.x - edge.to.x); - dy = (edge.from.y - edge.to.y); - distance = Math.sqrt(dx * dx + dy * dy); + // check if we zoom in or out + if (this.previousScale > this.scale || zoomDirection == -1) { // zoom out + // forming clusters when forced pulls outliers in. When not forced, the edge length of the + // outer nodes determines if it is being clustered + this._formClusters(force); + } + else if (this.previousScale < this.scale || zoomDirection == 1) { // zoom in + if (force == true) { + // _openClusters checks for each node if the formationScale of the cluster is smaller than + // the current scale and if so, declusters. When forced, all clusters are reduced by one step + this._openClusters(recursive,force); + } + else { + // if a cluster takes up a set percentage of the active window + this._openClustersBySize(); + } + } + this._updateNodeIndexList(); - if (distance == 0) { - distance = 0.01; - } + // if a cluster was NOT formed and the user zoomed out, we try clustering by hubs + if (this.nodeIndices.length == amountOfNodes && (this.previousScale > this.scale || zoomDirection == -1)) { + this._aggregateHubs(force); + this._updateNodeIndexList(); + } - // the 1/distance is so the fx and fy can be calculated without sine or cosine. - springForce = this.constants.physics.springConstant * (edgeLength - distance) / distance; + // we now reduce chains. + if (this.previousScale > this.scale || zoomDirection == -1) { // zoom out + this.handleChains(); + this._updateNodeIndexList(); + } - fx = dx * springForce; - fy = dy * springForce; + this.previousScale = this.scale; + // rest of the update the index list, dynamic edges and labels + this._updateDynamicEdges(); + this.updateLabels(); + // if a cluster was formed, we increase the clusterSession + if (this.nodeIndices.length < amountOfNodes) { // this means a clustering operation has taken place + this.clusterSession += 1; + // if clusters have been made, we normalize the cluster level + this.normalizeClusterLevels(); + } - if (edge.to.level != edge.from.level) { - edge.to.springFx -= fx; - edge.to.springFy -= fy; - edge.from.springFx += fx; - edge.from.springFy += fy; - } - else { - var factor = 0.5; - edge.to.fx -= factor*fx; - edge.to.fy -= factor*fy; - edge.from.fx += factor*fx; - edge.from.fy += factor*fy; - } - } - } + if (doNotStart == false || doNotStart === undefined) { + // if the simulation was settled, we restart the simulation if a cluster has been formed or expanded + if (this.moving != isMovingBeforeClustering) { + this.start(); } } - // normalize spring forces - var springForce = 1; - var springFx, springFy; - for (i = 0; i < nodeIndices.length; i++) { - var node = nodes[nodeIndices[i]]; - springFx = Math.min(springForce,Math.max(-springForce,node.springFx)); - springFy = Math.min(springForce,Math.max(-springForce,node.springFy)); - - node.fx += springFx; - node.fy += springFy; - } + this._updateCalculationNodes(); + }; - // retain energy balance - var totalFx = 0; - var totalFy = 0; - for (i = 0; i < nodeIndices.length; i++) { - var node = nodes[nodeIndices[i]]; - totalFx += node.fx; - totalFy += node.fy; - } - var correctionFx = totalFx / nodeIndices.length; - var correctionFy = totalFy / nodeIndices.length; + /** + * This function handles the chains. It is called on every updateClusters(). + */ + exports.handleChains = function() { + // after clustering we check how many chains there are + var chainPercentage = this._getChainFraction(); + if (chainPercentage > this.constants.clustering.chainThreshold) { + this._reduceAmountOfChains(1 - this.constants.clustering.chainThreshold / chainPercentage) - for (i = 0; i < nodeIndices.length; i++) { - var node = nodes[nodeIndices[i]]; - node.fx -= correctionFx; - node.fy -= correctionFy; } + }; + /** + * this functions starts clustering by hubs + * The minimum hub threshold is set globally + * + * @private + */ + exports._aggregateHubs = function(force) { + this._getHubSize(); + this._formClustersByHub(force,false); }; -/***/ }, -/* 63 */ -/***/ function(module, exports, __webpack_require__) { /** - * This function calculates the forces the nodes apply on eachother based on a gravitational model. - * The Barnes Hut method is used to speed up this N-body simulation. + * This function is fired by keypress. It forces hubs to form. * - * @private */ - exports._calculateNodeForces = function() { - if (this.constants.physics.barnesHut.gravitationalConstant != 0) { - var node; - var nodes = this.calculationNodes; - var nodeIndices = this.calculationNodeIndices; - var nodeCount = nodeIndices.length; + exports.forceAggregateHubs = function(doNotStart) { + var isMovingBeforeClustering = this.moving; + var amountOfNodes = this.nodeIndices.length; - this._formBarnesHutTree(nodes,nodeIndices); + this._aggregateHubs(true); - var barnesHutTree = this.barnesHutTree; + // update the index list, dynamic edges and labels + this._updateNodeIndexList(); + this._updateDynamicEdges(); + this.updateLabels(); - // place the nodes one by one recursively - for (var i = 0; i < nodeCount; i++) { - node = nodes[nodeIndices[i]]; - if (node.options.mass > 0) { - // starting with root is irrelevant, it never passes the BarnesHut condition - this._getForceContribution(barnesHutTree.root.children.NW,node); - this._getForceContribution(barnesHutTree.root.children.NE,node); - this._getForceContribution(barnesHutTree.root.children.SW,node); - this._getForceContribution(barnesHutTree.root.children.SE,node); + // if a cluster was formed, we increase the clusterSession + if (this.nodeIndices.length != amountOfNodes) { + this.clusterSession += 1; + } + + if (doNotStart == false || doNotStart === undefined) { + // if the simulation was settled, we restart the simulation if a cluster has been formed or expanded + if (this.moving != isMovingBeforeClustering) { + this.start(); + } + } + }; + + /** + * If a cluster takes up more than a set percentage of the screen, open the cluster + * + * @private + */ + exports._openClustersBySize = function() { + for (var nodeId in this.nodes) { + if (this.nodes.hasOwnProperty(nodeId)) { + var node = this.nodes[nodeId]; + if (node.inView() == true) { + if ((node.width*this.scale > this.constants.clustering.screenSizeThreshold * this.frame.canvas.clientWidth) || + (node.height*this.scale > this.constants.clustering.screenSizeThreshold * this.frame.canvas.clientHeight)) { + this.openCluster(node); + } } } } @@ -29679,58 +29974,59 @@ return /******/ (function(modules) { // webpackBootstrap /** - * This function traverses the barnesHutTree. It checks when it can approximate distant nodes with their center of mass. - * If a region contains a single node, we check if it is not itself, then we apply the force. + * This function loops over all nodes in the nodeIndices list. For each node it checks if it is a cluster and if it + * has to be opened based on the current zoom level. * - * @param parentBranch - * @param node * @private */ - exports._getForceContribution = function(parentBranch,node) { - // we get no force contribution from an empty region - if (parentBranch.childrenCount > 0) { - var dx,dy,distance; - - // get the distance from the center of mass to the node. - dx = parentBranch.centerOfMass.x - node.x; - dy = parentBranch.centerOfMass.y - node.y; - distance = Math.sqrt(dx * dx + dy * dy); + exports._openClusters = function(recursive,force) { + for (var i = 0; i < this.nodeIndices.length; i++) { + var node = this.nodes[this.nodeIndices[i]]; + this._expandClusterNode(node,recursive,force); + this._updateCalculationNodes(); + } + }; - // BarnesHut condition - // original condition : s/d < theta = passed === d/s > 1/theta = passed - // calcSize = 1/s --> d * 1/s > 1/theta = passed - if (distance * parentBranch.calcSize > this.constants.physics.barnesHut.theta) { - // duplicate code to reduce function calls to speed up program - if (distance == 0) { - distance = 0.1*Math.random(); - dx = distance; - } - var gravityForce = this.constants.physics.barnesHut.gravitationalConstant * parentBranch.mass * node.options.mass / (distance * distance * distance); - var fx = dx * gravityForce; - var fy = dy * gravityForce; - node.fx += fx; - node.fy += fy; + /** + * This function checks if a node has to be opened. This is done by checking the zoom level. + * If the node contains child nodes, this function is recursively called on the child nodes as well. + * This recursive behaviour is optional and can be set by the recursive argument. + * + * @param {Node} parentNode | to check for cluster and expand + * @param {Boolean} recursive | enabled or disable recursive calling + * @param {Boolean} force | enabled or disable forcing + * @param {Boolean} [openAll] | This will recursively force all nodes in the parent to be released + * @private + */ + exports._expandClusterNode = function(parentNode, recursive, force, openAll) { + // first check if node is a cluster + if (parentNode.clusterSize > 1) { + // this means that on a double tap event or a zoom event, the cluster fully unpacks if it is smaller than 20 + if (parentNode.clusterSize < this.constants.clustering.sectorThreshold) { + openAll = true; } - else { - // Did not pass the condition, go into children if available - if (parentBranch.childrenCount == 4) { - this._getForceContribution(parentBranch.children.NW,node); - this._getForceContribution(parentBranch.children.NE,node); - this._getForceContribution(parentBranch.children.SW,node); - this._getForceContribution(parentBranch.children.SE,node); - } - else { // parentBranch must have only one node, if it was empty we wouldnt be here - if (parentBranch.children.data.id != node.id) { // if it is not self - // duplicate code to reduce function calls to speed up program - if (distance == 0) { - distance = 0.5*Math.random(); - dx = distance; + recursive = openAll ? true : recursive; + + // if the last child has been added on a smaller scale than current scale decluster + if (parentNode.formationScale < this.scale || force == true) { + // we will check if any of the contained child nodes should be removed from the cluster + for (var containedNodeId in parentNode.containedNodes) { + if (parentNode.containedNodes.hasOwnProperty(containedNodeId)) { + var childNode = parentNode.containedNodes[containedNodeId]; + + // force expand will expand the largest cluster size clusters. Since we cluster from outside in, we assume that + // the largest cluster is the one that comes from outside + if (force == true) { + if (childNode.clusterSession == parentNode.clusterSessions[parentNode.clusterSessions.length-1] + || openAll) { + this._expelChildFromParent(parentNode,containedNodeId,recursive,force,openAll); + } + } + else { + if (this._nodeInActiveArea(parentNode)) { + this._expelChildFromParent(parentNode,containedNodeId,recursive,force,openAll); + } } - var gravityForce = this.constants.physics.barnesHut.gravitationalConstant * parentBranch.mass * node.options.mass / (distance * distance * distance); - var fx = dx * gravityForce; - var fy = dy * gravityForce; - node.fx += fx; - node.fy += fy; } } } @@ -29738,1613 +30034,966 @@ return /******/ (function(modules) { // webpackBootstrap }; /** - * This function constructs the barnesHut tree recursively. It creates the root, splits it and starts placing the nodes. + * ONLY CALLED FROM _expandClusterNode * - * @param nodes - * @param nodeIndices + * This function will expel a child_node from a parent_node. This is to de-cluster the node. This function will remove + * the child node from the parent contained_node object and put it back into the global nodes object. + * The same holds for the edge that was connected to the child node. It is moved back into the global edges object. + * + * @param {Node} parentNode | the parent node + * @param {String} containedNodeId | child_node id as it is contained in the containedNodes object of the parent node + * @param {Boolean} recursive | This will also check if the child needs to be expanded. + * With force and recursive both true, the entire cluster is unpacked + * @param {Boolean} force | This will disregard the zoom level and will expel this child from the parent + * @param {Boolean} openAll | This will recursively force all nodes in the parent to be released * @private */ - exports._formBarnesHutTree = function(nodes,nodeIndices) { - var node; - var nodeCount = nodeIndices.length; + exports._expelChildFromParent = function(parentNode, containedNodeId, recursive, force, openAll) { + var childNode = parentNode.containedNodes[containedNodeId]; - var minX = Number.MAX_VALUE, - minY = Number.MAX_VALUE, - maxX =-Number.MAX_VALUE, - maxY =-Number.MAX_VALUE; + // if child node has been added on smaller scale than current, kick out + if (childNode.formationScale < this.scale || force == true) { + // unselect all selected items + this._unselectAll(); - // get the range of the nodes - for (var i = 0; i < nodeCount; i++) { - var x = nodes[nodeIndices[i]].x; - var y = nodes[nodeIndices[i]].y; - if (nodes[nodeIndices[i]].options.mass > 0) { - if (x < minX) { minX = x; } - if (x > maxX) { maxX = x; } - if (y < minY) { minY = y; } - if (y > maxY) { maxY = y; } - } - } - // make the range a square - var sizeDiff = Math.abs(maxX - minX) - Math.abs(maxY - minY); // difference between X and Y - if (sizeDiff > 0) {minY -= 0.5 * sizeDiff; maxY += 0.5 * sizeDiff;} // xSize > ySize - else {minX += 0.5 * sizeDiff; maxX -= 0.5 * sizeDiff;} // xSize < ySize + // put the child node back in the global nodes object + this.nodes[containedNodeId] = childNode; + // release the contained edges from this childNode back into the global edges + this._releaseContainedEdges(parentNode,childNode); - var minimumTreeSize = 1e-5; - var rootSize = Math.max(minimumTreeSize,Math.abs(maxX - minX)); - var halfRootSize = 0.5 * rootSize; - var centerX = 0.5 * (minX + maxX), centerY = 0.5 * (minY + maxY); + // reconnect rerouted edges to the childNode + this._connectEdgeBackToChild(parentNode,childNode); - // construct the barnesHutTree - var barnesHutTree = { - root:{ - centerOfMass: {x:0, y:0}, - mass:0, - range: { - minX: centerX-halfRootSize,maxX:centerX+halfRootSize, - minY: centerY-halfRootSize,maxY:centerY+halfRootSize - }, - size: rootSize, - calcSize: 1 / rootSize, - children: { data:null}, - maxWidth: 0, - level: 0, - childrenCount: 4 - } - }; - this._splitBranch(barnesHutTree.root); + // validate all edges in dynamicEdges + this._validateEdges(parentNode); - // place the nodes one by one recursively - for (i = 0; i < nodeCount; i++) { - node = nodes[nodeIndices[i]]; - if (node.options.mass > 0) { - this._placeInTree(barnesHutTree.root,node); - } - } + // undo the changes from the clustering operation on the parent node + parentNode.options.mass -= childNode.options.mass; + parentNode.clusterSize -= childNode.clusterSize; + parentNode.options.fontSize = Math.min(this.constants.clustering.maxFontSize, this.constants.nodes.fontSize + this.constants.clustering.fontSizeMultiplier*(parentNode.clusterSize-1)); + parentNode.dynamicEdgesLength = parentNode.dynamicEdges.length; - // make global - this.barnesHutTree = barnesHutTree - }; + // place the child node near the parent, not at the exact same location to avoid chaos in the system + childNode.x = parentNode.x + parentNode.growthIndicator * (0.5 - Math.random()); + childNode.y = parentNode.y + parentNode.growthIndicator * (0.5 - Math.random()); + // remove node from the list + delete parentNode.containedNodes[containedNodeId]; - /** - * this updates the mass of a branch. this is increased by adding a node. - * - * @param parentBranch - * @param node - * @private - */ - exports._updateBranchMass = function(parentBranch, node) { - var totalMass = parentBranch.mass + node.options.mass; - var totalMassInv = 1/totalMass; + // check if there are other childs with this clusterSession in the parent. + var othersPresent = false; + for (var childNodeId in parentNode.containedNodes) { + if (parentNode.containedNodes.hasOwnProperty(childNodeId)) { + if (parentNode.containedNodes[childNodeId].clusterSession == childNode.clusterSession) { + othersPresent = true; + break; + } + } + } + // if there are no others, remove the cluster session from the list + if (othersPresent == false) { + parentNode.clusterSessions.pop(); + } - parentBranch.centerOfMass.x = parentBranch.centerOfMass.x * parentBranch.mass + node.x * node.options.mass; - parentBranch.centerOfMass.x *= totalMassInv; + this._repositionBezierNodes(childNode); + // this._repositionBezierNodes(parentNode); - parentBranch.centerOfMass.y = parentBranch.centerOfMass.y * parentBranch.mass + node.y * node.options.mass; - parentBranch.centerOfMass.y *= totalMassInv; + // remove the clusterSession from the child node + childNode.clusterSession = 0; - parentBranch.mass = totalMass; - var biggestSize = Math.max(Math.max(node.height,node.radius),node.width); - parentBranch.maxWidth = (parentBranch.maxWidth < biggestSize) ? biggestSize : parentBranch.maxWidth; + // recalculate the size of the node on the next time the node is rendered + parentNode.clearSizeCache(); + + // restart the simulation to reorganise all nodes + this.moving = true; + } + // check if a further expansion step is possible if recursivity is enabled + if (recursive == true) { + this._expandClusterNode(childNode,recursive,force,openAll); + } }; /** - * determine in which branch the node will be placed. + * position the bezier nodes at the center of the edges * - * @param parentBranch * @param node - * @param skipMassUpdate * @private */ - exports._placeInTree = function(parentBranch,node,skipMassUpdate) { - if (skipMassUpdate != true || skipMassUpdate === undefined) { - // update the mass of the branch. - this._updateBranchMass(parentBranch,node); - } - - if (parentBranch.children.NW.range.maxX > node.x) { // in NW or SW - if (parentBranch.children.NW.range.maxY > node.y) { // in NW - this._placeInRegion(parentBranch,node,"NW"); - } - else { // in SW - this._placeInRegion(parentBranch,node,"SW"); - } - } - else { // in NE or SE - if (parentBranch.children.NW.range.maxY > node.y) { // in NE - this._placeInRegion(parentBranch,node,"NE"); - } - else { // in SE - this._placeInRegion(parentBranch,node,"SE"); - } + exports._repositionBezierNodes = function(node) { + for (var i = 0; i < node.dynamicEdges.length; i++) { + node.dynamicEdges[i].positionBezierNode(); } }; /** - * actually place the node in a region (or branch) + * This function checks if any nodes at the end of their trees have edges below a threshold length + * This function is called only from updateClusters() + * forceLevelCollapse ignores the length of the edge and collapses one level + * This means that a node with only one edge will be clustered with its connected node * - * @param parentBranch - * @param node - * @param region * @private + * @param {Boolean} force */ - exports._placeInRegion = function(parentBranch,node,region) { - switch (parentBranch.children[region].childrenCount) { - case 0: // place node here - parentBranch.children[region].children.data = node; - parentBranch.children[region].childrenCount = 1; - this._updateBranchMass(parentBranch.children[region],node); - break; - case 1: // convert into children - // if there are two nodes exactly overlapping (on init, on opening of cluster etc.) - // we move one node a pixel and we do not put it in the tree. - if (parentBranch.children[region].children.data.x == node.x && - parentBranch.children[region].children.data.y == node.y) { - node.x += Math.random(); - node.y += Math.random(); - } - else { - this._splitBranch(parentBranch.children[region]); - this._placeInTree(parentBranch.children[region],node); - } - break; - case 4: // place in branch - this._placeInTree(parentBranch.children[region],node); - break; + exports._formClusters = function(force) { + if (force == false) { + this._formClustersByZoom(); + } + else { + this._forceClustersByZoom(); } }; /** - * this function splits a branch into 4 sub branches. If the branch contained a node, we place it in the subbranch - * after the split is complete. + * This function handles the clustering by zooming out, this is based on a minimum edge distance * - * @param parentBranch * @private */ - exports._splitBranch = function(parentBranch) { - // if the branch is shaded with a node, replace the node in the new subset. - var containedNode = null; - if (parentBranch.childrenCount == 1) { - containedNode = parentBranch.children.data; - parentBranch.mass = 0; parentBranch.centerOfMass.x = 0; parentBranch.centerOfMass.y = 0; - } - parentBranch.childrenCount = 4; - parentBranch.children.data = null; - this._insertRegion(parentBranch,"NW"); - this._insertRegion(parentBranch,"NE"); - this._insertRegion(parentBranch,"SW"); - this._insertRegion(parentBranch,"SE"); + exports._formClustersByZoom = function() { + var dx,dy,length, + minLength = this.constants.clustering.clusterEdgeThreshold/this.scale; - if (containedNode != null) { - this._placeInTree(parentBranch,containedNode); + // check if any edges are shorter than minLength and start the clustering + // the clustering favours the node with the larger mass + for (var edgeId in this.edges) { + if (this.edges.hasOwnProperty(edgeId)) { + var edge = this.edges[edgeId]; + if (edge.connected) { + if (edge.toId != edge.fromId) { + dx = (edge.to.x - edge.from.x); + dy = (edge.to.y - edge.from.y); + length = Math.sqrt(dx * dx + dy * dy); + + + if (length < minLength) { + // first check which node is larger + var parentNode = edge.from; + var childNode = edge.to; + if (edge.to.options.mass > edge.from.options.mass) { + parentNode = edge.to; + childNode = edge.from; + } + + if (childNode.dynamicEdgesLength == 1) { + this._addToCluster(parentNode,childNode,false); + } + else if (parentNode.dynamicEdgesLength == 1) { + this._addToCluster(childNode,parentNode,false); + } + } + } + } + } } }; - /** - * This function subdivides the region into four new segments. - * Specifically, this inserts a single new segment. - * It fills the children section of the parentBranch + * This function forces the network to cluster all nodes with only one connecting edge to their + * connected node. * - * @param parentBranch - * @param region - * @param parentRange * @private */ - exports._insertRegion = function(parentBranch, region) { - var minX,maxX,minY,maxY; - var childSize = 0.5 * parentBranch.size; - switch (region) { - case "NW": - minX = parentBranch.range.minX; - maxX = parentBranch.range.minX + childSize; - minY = parentBranch.range.minY; - maxY = parentBranch.range.minY + childSize; - break; - case "NE": - minX = parentBranch.range.minX + childSize; - maxX = parentBranch.range.maxX; - minY = parentBranch.range.minY; - maxY = parentBranch.range.minY + childSize; - break; - case "SW": - minX = parentBranch.range.minX; - maxX = parentBranch.range.minX + childSize; - minY = parentBranch.range.minY + childSize; - maxY = parentBranch.range.maxY; - break; - case "SE": - minX = parentBranch.range.minX + childSize; - maxX = parentBranch.range.maxX; - minY = parentBranch.range.minY + childSize; - maxY = parentBranch.range.maxY; - break; - } + exports._forceClustersByZoom = function() { + for (var nodeId in this.nodes) { + // another node could have absorbed this child. + if (this.nodes.hasOwnProperty(nodeId)) { + var childNode = this.nodes[nodeId]; + // the edges can be swallowed by another decrease + if (childNode.dynamicEdgesLength == 1 && childNode.dynamicEdges.length != 0) { + var edge = childNode.dynamicEdges[0]; + var parentNode = (edge.toId == childNode.id) ? this.nodes[edge.fromId] : this.nodes[edge.toId]; - parentBranch.children[region] = { - centerOfMass:{x:0,y:0}, - mass:0, - range:{minX:minX,maxX:maxX,minY:minY,maxY:maxY}, - size: 0.5 * parentBranch.size, - calcSize: 2 * parentBranch.calcSize, - children: {data:null}, - maxWidth: 0, - level: parentBranch.level+1, - childrenCount: 0 - }; + // group to the largest node + if (childNode.id != parentNode.id) { + if (parentNode.options.mass > childNode.options.mass) { + this._addToCluster(parentNode,childNode,true); + } + else { + this._addToCluster(childNode,parentNode,true); + } + } + } + } + } }; /** - * This function is for debugging purposed, it draws the tree. + * To keep the nodes of roughly equal size we normalize the cluster levels. + * This function clusters a node to its smallest connected neighbour. * - * @param ctx - * @param color + * @param node * @private */ - exports._drawTree = function(ctx,color) { - if (this.barnesHutTree !== undefined) { + exports._clusterToSmallestNeighbour = function(node) { + var smallestNeighbour = -1; + var smallestNeighbourNode = null; + for (var i = 0; i < node.dynamicEdges.length; i++) { + if (node.dynamicEdges[i] !== undefined) { + var neighbour = null; + if (node.dynamicEdges[i].fromId != node.id) { + neighbour = node.dynamicEdges[i].from; + } + else if (node.dynamicEdges[i].toId != node.id) { + neighbour = node.dynamicEdges[i].to; + } - ctx.lineWidth = 1; - this._drawBranch(this.barnesHutTree.root,ctx,color); + if (neighbour != null && smallestNeighbour > neighbour.clusterSessions.length) { + smallestNeighbour = neighbour.clusterSessions.length; + smallestNeighbourNode = neighbour; + } + } + } + + if (neighbour != null && this.nodes[neighbour.id] !== undefined) { + this._addToCluster(neighbour, node, true); } }; /** - * This function is for debugging purposes. It draws the branches recursively. + * This function forms clusters from hubs, it loops over all nodes * - * @param branch - * @param ctx - * @param color + * @param {Boolean} force | Disregard zoom level + * @param {Boolean} onlyEqual | This only clusters a hub with a specific number of edges * @private */ - exports._drawBranch = function(branch,ctx,color) { - if (color === undefined) { - color = "#FF0000"; - } - - if (branch.childrenCount == 4) { - this._drawBranch(branch.children.NW,ctx); - this._drawBranch(branch.children.NE,ctx); - this._drawBranch(branch.children.SE,ctx); - this._drawBranch(branch.children.SW,ctx); + exports._formClustersByHub = function(force, onlyEqual) { + // we loop over all nodes in the list + for (var nodeId in this.nodes) { + // we check if it is still available since it can be used by the clustering in this loop + if (this.nodes.hasOwnProperty(nodeId)) { + this._formClusterFromHub(this.nodes[nodeId],force,onlyEqual); + } } - ctx.strokeStyle = color; - ctx.beginPath(); - ctx.moveTo(branch.range.minX,branch.range.minY); - ctx.lineTo(branch.range.maxX,branch.range.minY); - ctx.stroke(); - - ctx.beginPath(); - ctx.moveTo(branch.range.maxX,branch.range.minY); - ctx.lineTo(branch.range.maxX,branch.range.maxY); - ctx.stroke(); - - ctx.beginPath(); - ctx.moveTo(branch.range.maxX,branch.range.maxY); - ctx.lineTo(branch.range.minX,branch.range.maxY); - ctx.stroke(); - - ctx.beginPath(); - ctx.moveTo(branch.range.minX,branch.range.maxY); - ctx.lineTo(branch.range.minX,branch.range.minY); - ctx.stroke(); - - /* - if (branch.mass > 0) { - ctx.circle(branch.centerOfMass.x, branch.centerOfMass.y, 3*branch.mass); - ctx.stroke(); - } - */ }; - -/***/ }, -/* 64 */ -/***/ function(module, exports, __webpack_require__) { - /** - * Creation of the ClusterMixin var. + * This function forms a cluster from a specific preselected hub node * - * This contains all the functions the Network object can use to employ clustering + * @param {Node} hubNode | the node we will cluster as a hub + * @param {Boolean} force | Disregard zoom level + * @param {Boolean} onlyEqual | This only clusters a hub with a specific number of edges + * @param {Number} [absorptionSizeOffset] | + * @private */ + exports._formClusterFromHub = function(hubNode, force, onlyEqual, absorptionSizeOffset) { + if (absorptionSizeOffset === undefined) { + absorptionSizeOffset = 0; + } + // we decide if the node is a hub + if ((hubNode.dynamicEdgesLength >= this.hubThreshold && onlyEqual == false) || + (hubNode.dynamicEdgesLength == this.hubThreshold && onlyEqual == true)) { + // initialize variables + var dx,dy,length; + var minLength = this.constants.clustering.clusterEdgeThreshold/this.scale; + var allowCluster = false; - /** - * This is only called in the constructor of the network object - * - */ - exports.startWithClustering = function() { - // cluster if the data set is big - this.clusterToFit(this.constants.clustering.initialMaxNodes, true); + // we create a list of edges because the dynamicEdges change over the course of this loop + var edgesIdarray = []; + var amountOfInitialEdges = hubNode.dynamicEdges.length; + for (var j = 0; j < amountOfInitialEdges; j++) { + edgesIdarray.push(hubNode.dynamicEdges[j].id); + } - // updates the lables after clustering - this.updateLabels(); + // if the hub clustering is not forces, we check if one of the edges connected + // to a cluster is small enough based on the constants.clustering.clusterEdgeThreshold + if (force == false) { + allowCluster = false; + for (j = 0; j < amountOfInitialEdges; j++) { + var edge = this.edges[edgesIdarray[j]]; + if (edge !== undefined) { + if (edge.connected) { + if (edge.toId != edge.fromId) { + dx = (edge.to.x - edge.from.x); + dy = (edge.to.y - edge.from.y); + length = Math.sqrt(dx * dx + dy * dy); - // this is called here because if clusterin is disabled, the start and stabilize are called in - // the setData function. - if (this.stabilize) { - this._stabilize(); - } - this.start(); + if (length < minLength) { + allowCluster = true; + break; + } + } + } + } + } + } + + // start the clustering if allowed + if ((!force && allowCluster) || force) { + // we loop over all edges INITIALLY connected to this hub + for (j = 0; j < amountOfInitialEdges; j++) { + edge = this.edges[edgesIdarray[j]]; + // the edge can be clustered by this function in a previous loop + if (edge !== undefined) { + var childNode = this.nodes[(edge.fromId == hubNode.id) ? edge.toId : edge.fromId]; + // we do not want hubs to merge with other hubs nor do we want to cluster itself. + if ((childNode.dynamicEdges.length <= (this.hubThreshold + absorptionSizeOffset)) && + (childNode.id != hubNode.id)) { + this._addToCluster(hubNode,childNode,force); + } + } + } + } + } }; + + /** - * This function clusters until the initialMaxNodes has been reached + * This function adds the child node to the parent node, creating a cluster if it is not already. * - * @param {Number} maxNumberOfNodes - * @param {Boolean} reposition + * @param {Node} parentNode | this is the node that will house the child node + * @param {Node} childNode | this node will be deleted from the global this.nodes and stored in the parent node + * @param {Boolean} force | true will only update the remainingEdges at the very end of the clustering, ensuring single level collapse + * @private */ - exports.clusterToFit = function(maxNumberOfNodes, reposition) { - var numberOfNodes = this.nodeIndices.length; - - var maxLevels = 50; - var level = 0; + exports._addToCluster = function(parentNode, childNode, force) { + // join child node in the parent node + parentNode.containedNodes[childNode.id] = childNode; - // we first cluster the hubs, then we pull in the outliers, repeat - while (numberOfNodes > maxNumberOfNodes && level < maxLevels) { - if (level % 3 == 0) { - this.forceAggregateHubs(true); - this.normalizeClusterLevels(); + // manage all the edges connected to the child and parent nodes + for (var i = 0; i < childNode.dynamicEdges.length; i++) { + var edge = childNode.dynamicEdges[i]; + if (edge.toId == parentNode.id || edge.fromId == parentNode.id) { // edge connected to parentNode + this._addToContainedEdges(parentNode,childNode,edge); } else { - this.increaseClusterLevel(); // this also includes a cluster normalization + this._connectEdgeToCluster(parentNode,childNode,edge); } - - numberOfNodes = this.nodeIndices.length; - level += 1; } + // a contained node has no dynamic edges. + childNode.dynamicEdges = []; - // after the clustering we reposition the nodes to reduce the initial chaos - if (level > 0 && reposition == true) { - this.repositionNodes(); - } - this._updateCalculationNodes(); - }; + // remove circular edges from clusters + this._containCircularEdgesFromNode(parentNode,childNode); - /** - * This function can be called to open up a specific cluster. It is only called by - * It will unpack the cluster back one level. - * - * @param node | Node object: cluster to open. - */ - exports.openCluster = function(node) { - var isMovingBeforeClustering = this.moving; - if (node.clusterSize > this.constants.clustering.sectorThreshold && this._nodeInActiveArea(node) && - !(this._sector() == "default" && this.nodeIndices.length == 1)) { - // this loads a new sector, loads the nodes and edges and nodeIndices of it. - this._addSector(node); - var level = 0; - // we decluster until we reach a decent number of nodes - while ((this.nodeIndices.length < this.constants.clustering.initialMaxNodes) && (level < 10)) { - this.decreaseClusterLevel(); - level += 1; - } + // remove the childNode from the global nodes object + delete this.nodes[childNode.id]; - } - else { - this._expandClusterNode(node,false,true); + // update the properties of the child and parent + var massBefore = parentNode.options.mass; + childNode.clusterSession = this.clusterSession; + parentNode.options.mass += childNode.options.mass; + parentNode.clusterSize += childNode.clusterSize; + parentNode.options.fontSize = Math.min(this.constants.clustering.maxFontSize, this.constants.nodes.fontSize + this.constants.clustering.fontSizeMultiplier*parentNode.clusterSize); - // update the index list, dynamic edges and labels - this._updateNodeIndexList(); - this._updateDynamicEdges(); - this._updateCalculationNodes(); - this.updateLabels(); + // keep track of the clustersessions so we can open the cluster up as it has been formed. + if (parentNode.clusterSessions[parentNode.clusterSessions.length - 1] != this.clusterSession) { + parentNode.clusterSessions.push(this.clusterSession); } - // if the simulation was settled, we restart the simulation if a cluster has been formed or expanded - if (this.moving != isMovingBeforeClustering) { - this.start(); + // forced clusters only open from screen size and double tap + if (force == true) { + // parentNode.formationScale = Math.pow(1 - (1.0/11.0),this.clusterSession+3); + parentNode.formationScale = 0; } - }; - - - /** - * This calls the updateClustes with default arguments - */ - exports.updateClustersDefault = function() { - if (this.constants.clustering.enabled == true) { - this.updateClusters(0,false,false); + else { + parentNode.formationScale = this.scale; // The latest child has been added on this scale } - }; + // recalculate the size of the node on the next time the node is rendered + parentNode.clearSizeCache(); - /** - * This function can be called to increase the cluster level. This means that the nodes with only one edge connection will - * be clustered with their connected node. This can be repeated as many times as needed. - * This can be called externally (by a keybind for instance) to reduce the complexity of big datasets. - */ - exports.increaseClusterLevel = function() { - this.updateClusters(-1,false,true); - }; + // set the pop-out scale for the childnode + parentNode.containedNodes[childNode.id].formationScale = parentNode.formationScale; + // nullify the movement velocity of the child, this is to avoid hectic behaviour + childNode.clearVelocity(); - /** - * This function can be called to decrease the cluster level. This means that the nodes with only one edge connection will - * be unpacked if they are a cluster. This can be repeated as many times as needed. - * This can be called externally (by a key-bind for instance) to look into clusters without zooming. - */ - exports.decreaseClusterLevel = function() { - this.updateClusters(1,false,true); + // the mass has altered, preservation of energy dictates the velocity to be updated + parentNode.updateVelocity(massBefore); + + // restart the simulation to reorganise all nodes + this.moving = true; }; /** - * This is the main clustering function. It clusters and declusters on zoom or forced - * This function clusters on zoom, it can be called with a predefined zoom direction - * If out, check if we can form clusters, if in, check if we can open clusters. - * This function is only called from _zoom() - * - * @param {Number} zoomDirection | -1 / 0 / +1 for zoomOut / determineByZoom / zoomIn - * @param {Boolean} recursive | enabled or disable recursive calling of the opening of clusters - * @param {Boolean} force | enabled or disable forcing - * @param {Boolean} doNotStart | if true do not call start - * + * This function will apply the changes made to the remainingEdges during the formation of the clusters. + * This is a seperate function to allow for level-wise collapsing of the node barnesHutTree. + * It has to be called if a level is collapsed. It is called by _formClusters(). + * @private */ - exports.updateClusters = function(zoomDirection,recursive,force,doNotStart) { - var isMovingBeforeClustering = this.moving; - var amountOfNodes = this.nodeIndices.length; - - // on zoom out collapse the sector if the scale is at the level the sector was made - if (this.previousScale > this.scale && zoomDirection == 0) { - this._collapseSector(); - } + exports._updateDynamicEdges = function() { + for (var i = 0; i < this.nodeIndices.length; i++) { + var node = this.nodes[this.nodeIndices[i]]; + node.dynamicEdgesLength = node.dynamicEdges.length; - // check if we zoom in or out - if (this.previousScale > this.scale || zoomDirection == -1) { // zoom out - // forming clusters when forced pulls outliers in. When not forced, the edge length of the - // outer nodes determines if it is being clustered - this._formClusters(force); - } - else if (this.previousScale < this.scale || zoomDirection == 1) { // zoom in - if (force == true) { - // _openClusters checks for each node if the formationScale of the cluster is smaller than - // the current scale and if so, declusters. When forced, all clusters are reduced by one step - this._openClusters(recursive,force); - } - else { - // if a cluster takes up a set percentage of the active window - this._openClustersBySize(); + // this corrects for multiple edges pointing at the same other node + var correction = 0; + if (node.dynamicEdgesLength > 1) { + for (var j = 0; j < node.dynamicEdgesLength - 1; j++) { + var edgeToId = node.dynamicEdges[j].toId; + var edgeFromId = node.dynamicEdges[j].fromId; + for (var k = j+1; k < node.dynamicEdgesLength; k++) { + if ((node.dynamicEdges[k].toId == edgeToId && node.dynamicEdges[k].fromId == edgeFromId) || + (node.dynamicEdges[k].fromId == edgeToId && node.dynamicEdges[k].toId == edgeFromId)) { + correction += 1; + } + } + } } + node.dynamicEdgesLength -= correction; } - this._updateNodeIndexList(); + }; - // if a cluster was NOT formed and the user zoomed out, we try clustering by hubs - if (this.nodeIndices.length == amountOfNodes && (this.previousScale > this.scale || zoomDirection == -1)) { - this._aggregateHubs(force); - this._updateNodeIndexList(); - } - // we now reduce chains. - if (this.previousScale > this.scale || zoomDirection == -1) { // zoom out - this.handleChains(); - this._updateNodeIndexList(); + /** + * This adds an edge from the childNode to the contained edges of the parent node + * + * @param parentNode | Node object + * @param childNode | Node object + * @param edge | Edge object + * @private + */ + exports._addToContainedEdges = function(parentNode, childNode, edge) { + // create an array object if it does not yet exist for this childNode + if (!(parentNode.containedEdges.hasOwnProperty(childNode.id))) { + parentNode.containedEdges[childNode.id] = [] } + // add this edge to the list + parentNode.containedEdges[childNode.id].push(edge); - this.previousScale = this.scale; - - // rest of the update the index list, dynamic edges and labels - this._updateDynamicEdges(); - this.updateLabels(); - - // if a cluster was formed, we increase the clusterSession - if (this.nodeIndices.length < amountOfNodes) { // this means a clustering operation has taken place - this.clusterSession += 1; - // if clusters have been made, we normalize the cluster level - this.normalizeClusterLevels(); - } + // remove the edge from the global edges object + delete this.edges[edge.id]; - if (doNotStart == false || doNotStart === undefined) { - // if the simulation was settled, we restart the simulation if a cluster has been formed or expanded - if (this.moving != isMovingBeforeClustering) { - this.start(); + // remove the edge from the parent object + for (var i = 0; i < parentNode.dynamicEdges.length; i++) { + if (parentNode.dynamicEdges[i].id == edge.id) { + parentNode.dynamicEdges.splice(i,1); + break; } } - - this._updateCalculationNodes(); }; /** - * This function handles the chains. It is called on every updateClusters(). + * This function connects an edge that was connected to a child node to the parent node. + * It keeps track of which nodes it has been connected to with the originalId array. + * + * @param {Node} parentNode | Node object + * @param {Node} childNode | Node object + * @param {Edge} edge | Edge object + * @private */ - exports.handleChains = function() { - // after clustering we check how many chains there are - var chainPercentage = this._getChainFraction(); - if (chainPercentage > this.constants.clustering.chainThreshold) { - this._reduceAmountOfChains(1 - this.constants.clustering.chainThreshold / chainPercentage) + exports._connectEdgeToCluster = function(parentNode, childNode, edge) { + // handle circular edges + if (edge.toId == edge.fromId) { + this._addToContainedEdges(parentNode, childNode, edge); + } + else { + if (edge.toId == childNode.id) { // edge connected to other node on the "to" side + edge.originalToId.push(childNode.id); + edge.to = parentNode; + edge.toId = parentNode.id; + } + else { // edge connected to other node with the "from" side + + edge.originalFromId.push(childNode.id); + edge.from = parentNode; + edge.fromId = parentNode.id; + } + this._addToReroutedEdges(parentNode,childNode,edge); } }; + /** - * this functions starts clustering by hubs - * The minimum hub threshold is set globally + * If a node is connected to itself, a circular edge is drawn. When clustering we want to contain + * these edges inside of the cluster. * + * @param parentNode + * @param childNode * @private */ - exports._aggregateHubs = function(force) { - this._getHubSize(); - this._formClustersByHub(force,false); + exports._containCircularEdgesFromNode = function(parentNode, childNode) { + // manage all the edges connected to the child and parent nodes + for (var i = 0; i < parentNode.dynamicEdges.length; i++) { + var edge = parentNode.dynamicEdges[i]; + // handle circular edges + if (edge.toId == edge.fromId) { + this._addToContainedEdges(parentNode, childNode, edge); + } + } }; /** - * This function is fired by keypress. It forces hubs to form. + * This adds an edge from the childNode to the rerouted edges of the parent node * + * @param parentNode | Node object + * @param childNode | Node object + * @param edge | Edge object + * @private */ - exports.forceAggregateHubs = function(doNotStart) { - var isMovingBeforeClustering = this.moving; - var amountOfNodes = this.nodeIndices.length; - - this._aggregateHubs(true); + exports._addToReroutedEdges = function(parentNode, childNode, edge) { + // create an array object if it does not yet exist for this childNode + // we store the edge in the rerouted edges so we can restore it when the cluster pops open + if (!(parentNode.reroutedEdges.hasOwnProperty(childNode.id))) { + parentNode.reroutedEdges[childNode.id] = []; + } + parentNode.reroutedEdges[childNode.id].push(edge); - // update the index list, dynamic edges and labels - this._updateNodeIndexList(); - this._updateDynamicEdges(); - this.updateLabels(); + // this edge becomes part of the dynamicEdges of the cluster node + parentNode.dynamicEdges.push(edge); + }; - // if a cluster was formed, we increase the clusterSession - if (this.nodeIndices.length != amountOfNodes) { - this.clusterSession += 1; - } - if (doNotStart == false || doNotStart === undefined) { - // if the simulation was settled, we restart the simulation if a cluster has been formed or expanded - if (this.moving != isMovingBeforeClustering) { - this.start(); - } - } - }; /** - * If a cluster takes up more than a set percentage of the screen, open the cluster + * This function connects an edge that was connected to a cluster node back to the child node. * + * @param parentNode | Node object + * @param childNode | Node object * @private */ - exports._openClustersBySize = function() { - for (var nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - var node = this.nodes[nodeId]; - if (node.inView() == true) { - if ((node.width*this.scale > this.constants.clustering.screenSizeThreshold * this.frame.canvas.clientWidth) || - (node.height*this.scale > this.constants.clustering.screenSizeThreshold * this.frame.canvas.clientHeight)) { - this.openCluster(node); + exports._connectEdgeBackToChild = function(parentNode, childNode) { + if (parentNode.reroutedEdges.hasOwnProperty(childNode.id)) { + for (var i = 0; i < parentNode.reroutedEdges[childNode.id].length; i++) { + var edge = parentNode.reroutedEdges[childNode.id][i]; + if (edge.originalFromId[edge.originalFromId.length-1] == childNode.id) { + edge.originalFromId.pop(); + edge.fromId = childNode.id; + edge.from = childNode; + } + else { + edge.originalToId.pop(); + edge.toId = childNode.id; + edge.to = childNode; + } + + // append this edge to the list of edges connecting to the childnode + childNode.dynamicEdges.push(edge); + + // remove the edge from the parent object + for (var j = 0; j < parentNode.dynamicEdges.length; j++) { + if (parentNode.dynamicEdges[j].id == edge.id) { + parentNode.dynamicEdges.splice(j,1); + break; } } } + // remove the entry from the rerouted edges + delete parentNode.reroutedEdges[childNode.id]; } }; /** - * This function loops over all nodes in the nodeIndices list. For each node it checks if it is a cluster and if it - * has to be opened based on the current zoom level. - * - * @private - */ - exports._openClusters = function(recursive,force) { - for (var i = 0; i < this.nodeIndices.length; i++) { - var node = this.nodes[this.nodeIndices[i]]; - this._expandClusterNode(node,recursive,force); - this._updateCalculationNodes(); - } - }; - - /** - * This function checks if a node has to be opened. This is done by checking the zoom level. - * If the node contains child nodes, this function is recursively called on the child nodes as well. - * This recursive behaviour is optional and can be set by the recursive argument. + * When loops are clustered, an edge can be both in the rerouted array and the contained array. + * This function is called last to verify that all edges in dynamicEdges are in fact connected to the + * parentNode * - * @param {Node} parentNode | to check for cluster and expand - * @param {Boolean} recursive | enabled or disable recursive calling - * @param {Boolean} force | enabled or disable forcing - * @param {Boolean} [openAll] | This will recursively force all nodes in the parent to be released + * @param parentNode | Node object * @private */ - exports._expandClusterNode = function(parentNode, recursive, force, openAll) { - // first check if node is a cluster - if (parentNode.clusterSize > 1) { - // this means that on a double tap event or a zoom event, the cluster fully unpacks if it is smaller than 20 - if (parentNode.clusterSize < this.constants.clustering.sectorThreshold) { - openAll = true; - } - recursive = openAll ? true : recursive; - - // if the last child has been added on a smaller scale than current scale decluster - if (parentNode.formationScale < this.scale || force == true) { - // we will check if any of the contained child nodes should be removed from the cluster - for (var containedNodeId in parentNode.containedNodes) { - if (parentNode.containedNodes.hasOwnProperty(containedNodeId)) { - var childNode = parentNode.containedNodes[containedNodeId]; - - // force expand will expand the largest cluster size clusters. Since we cluster from outside in, we assume that - // the largest cluster is the one that comes from outside - if (force == true) { - if (childNode.clusterSession == parentNode.clusterSessions[parentNode.clusterSessions.length-1] - || openAll) { - this._expelChildFromParent(parentNode,containedNodeId,recursive,force,openAll); - } - } - else { - if (this._nodeInActiveArea(parentNode)) { - this._expelChildFromParent(parentNode,containedNodeId,recursive,force,openAll); - } - } - } - } + exports._validateEdges = function(parentNode) { + for (var i = 0; i < parentNode.dynamicEdges.length; i++) { + var edge = parentNode.dynamicEdges[i]; + if (parentNode.id != edge.toId && parentNode.id != edge.fromId) { + parentNode.dynamicEdges.splice(i,1); } } }; + /** - * ONLY CALLED FROM _expandClusterNode - * - * This function will expel a child_node from a parent_node. This is to de-cluster the node. This function will remove - * the child node from the parent contained_node object and put it back into the global nodes object. - * The same holds for the edge that was connected to the child node. It is moved back into the global edges object. + * This function released the contained edges back into the global domain and puts them back into the + * dynamic edges of both parent and child. * - * @param {Node} parentNode | the parent node - * @param {String} containedNodeId | child_node id as it is contained in the containedNodes object of the parent node - * @param {Boolean} recursive | This will also check if the child needs to be expanded. - * With force and recursive both true, the entire cluster is unpacked - * @param {Boolean} force | This will disregard the zoom level and will expel this child from the parent - * @param {Boolean} openAll | This will recursively force all nodes in the parent to be released + * @param {Node} parentNode | + * @param {Node} childNode | * @private */ - exports._expelChildFromParent = function(parentNode, containedNodeId, recursive, force, openAll) { - var childNode = parentNode.containedNodes[containedNodeId]; + exports._releaseContainedEdges = function(parentNode, childNode) { + for (var i = 0; i < parentNode.containedEdges[childNode.id].length; i++) { + var edge = parentNode.containedEdges[childNode.id][i]; - // if child node has been added on smaller scale than current, kick out - if (childNode.formationScale < this.scale || force == true) { - // unselect all selected items - this._unselectAll(); + // put the edge back in the global edges object + this.edges[edge.id] = edge; - // put the child node back in the global nodes object - this.nodes[containedNodeId] = childNode; + // put the edge back in the dynamic edges of the child and parent + childNode.dynamicEdges.push(edge); + parentNode.dynamicEdges.push(edge); + } + // remove the entry from the contained edges + delete parentNode.containedEdges[childNode.id]; - // release the contained edges from this childNode back into the global edges - this._releaseContainedEdges(parentNode,childNode); + }; - // reconnect rerouted edges to the childNode - this._connectEdgeBackToChild(parentNode,childNode); - // validate all edges in dynamicEdges - this._validateEdges(parentNode); - // undo the changes from the clustering operation on the parent node - parentNode.options.mass -= childNode.options.mass; - parentNode.clusterSize -= childNode.clusterSize; - parentNode.options.fontSize = Math.min(this.constants.clustering.maxFontSize, this.constants.nodes.fontSize + this.constants.clustering.fontSizeMultiplier*(parentNode.clusterSize-1)); - parentNode.dynamicEdgesLength = parentNode.dynamicEdges.length; - // place the child node near the parent, not at the exact same location to avoid chaos in the system - childNode.x = parentNode.x + parentNode.growthIndicator * (0.5 - Math.random()); - childNode.y = parentNode.y + parentNode.growthIndicator * (0.5 - Math.random()); + // ------------------- UTILITY FUNCTIONS ---------------------------- // - // remove node from the list - delete parentNode.containedNodes[containedNodeId]; - // check if there are other childs with this clusterSession in the parent. - var othersPresent = false; - for (var childNodeId in parentNode.containedNodes) { - if (parentNode.containedNodes.hasOwnProperty(childNodeId)) { - if (parentNode.containedNodes[childNodeId].clusterSession == childNode.clusterSession) { - othersPresent = true; - break; - } + /** + * This updates the node labels for all nodes (for debugging purposes) + */ + exports.updateLabels = function() { + var nodeId; + // update node labels + for (nodeId in this.nodes) { + if (this.nodes.hasOwnProperty(nodeId)) { + var node = this.nodes[nodeId]; + if (node.clusterSize > 1) { + node.label = "[".concat(String(node.clusterSize),"]"); } } - // if there are no others, remove the cluster session from the list - if (othersPresent == false) { - parentNode.clusterSessions.pop(); - } - - this._repositionBezierNodes(childNode); - // this._repositionBezierNodes(parentNode); - - // remove the clusterSession from the child node - childNode.clusterSession = 0; - - // recalculate the size of the node on the next time the node is rendered - parentNode.clearSizeCache(); - - // restart the simulation to reorganise all nodes - this.moving = true; } - // check if a further expansion step is possible if recursivity is enabled - if (recursive == true) { - this._expandClusterNode(childNode,recursive,force,openAll); + // update node labels + for (nodeId in this.nodes) { + if (this.nodes.hasOwnProperty(nodeId)) { + node = this.nodes[nodeId]; + if (node.clusterSize == 1) { + if (node.originalLabel !== undefined) { + node.label = node.originalLabel; + } + else { + node.label = String(node.id); + } + } + } } - }; + // /* Debug Override */ + // for (nodeId in this.nodes) { + // if (this.nodes.hasOwnProperty(nodeId)) { + // node = this.nodes[nodeId]; + // node.label = String(node.level); + // } + // } - /** - * position the bezier nodes at the center of the edges - * - * @param node - * @private - */ - exports._repositionBezierNodes = function(node) { - for (var i = 0; i < node.dynamicEdges.length; i++) { - node.dynamicEdges[i].positionBezierNode(); - } }; /** - * This function checks if any nodes at the end of their trees have edges below a threshold length - * This function is called only from updateClusters() - * forceLevelCollapse ignores the length of the edge and collapses one level - * This means that a node with only one edge will be clustered with its connected node - * - * @private - * @param {Boolean} force + * We want to keep the cluster level distribution rather small. This means we do not want unclustered nodes + * if the rest of the nodes are already a few cluster levels in. + * To fix this we use this function. It determines the min and max cluster level and sends nodes that have not + * clustered enough to the clusterToSmallestNeighbours function. */ - exports._formClusters = function(force) { - if (force == false) { - this._formClustersByZoom(); - } - else { - this._forceClustersByZoom(); - } - }; - - - /** - * This function handles the clustering by zooming out, this is based on a minimum edge distance - * - * @private - */ - exports._formClustersByZoom = function() { - var dx,dy,length, - minLength = this.constants.clustering.clusterEdgeThreshold/this.scale; - - // check if any edges are shorter than minLength and start the clustering - // the clustering favours the node with the larger mass - for (var edgeId in this.edges) { - if (this.edges.hasOwnProperty(edgeId)) { - var edge = this.edges[edgeId]; - if (edge.connected) { - if (edge.toId != edge.fromId) { - dx = (edge.to.x - edge.from.x); - dy = (edge.to.y - edge.from.y); - length = Math.sqrt(dx * dx + dy * dy); - + exports.normalizeClusterLevels = function() { + var maxLevel = 0; + var minLevel = 1e9; + var clusterLevel = 0; + var nodeId; - if (length < minLength) { - // first check which node is larger - var parentNode = edge.from; - var childNode = edge.to; - if (edge.to.options.mass > edge.from.options.mass) { - parentNode = edge.to; - childNode = edge.from; - } + // we loop over all nodes in the list + for (nodeId in this.nodes) { + if (this.nodes.hasOwnProperty(nodeId)) { + clusterLevel = this.nodes[nodeId].clusterSessions.length; + if (maxLevel < clusterLevel) {maxLevel = clusterLevel;} + if (minLevel > clusterLevel) {minLevel = clusterLevel;} + } + } - if (childNode.dynamicEdgesLength == 1) { - this._addToCluster(parentNode,childNode,false); - } - else if (parentNode.dynamicEdgesLength == 1) { - this._addToCluster(childNode,parentNode,false); - } - } + if (maxLevel - minLevel > this.constants.clustering.clusterLevelDifference) { + var amountOfNodes = this.nodeIndices.length; + var targetLevel = maxLevel - this.constants.clustering.clusterLevelDifference; + // we loop over all nodes in the list + for (nodeId in this.nodes) { + if (this.nodes.hasOwnProperty(nodeId)) { + if (this.nodes[nodeId].clusterSessions.length < targetLevel) { + this._clusterToSmallestNeighbour(this.nodes[nodeId]); } } } + this._updateNodeIndexList(); + this._updateDynamicEdges(); + // if a cluster was formed, we increase the clusterSession + if (this.nodeIndices.length != amountOfNodes) { + this.clusterSession += 1; + } } }; + + /** - * This function forces the network to cluster all nodes with only one connecting edge to their - * connected node. + * This function determines if the cluster we want to decluster is in the active area + * this means around the zoom center * + * @param {Node} node + * @returns {boolean} * @private */ - exports._forceClustersByZoom = function() { - for (var nodeId in this.nodes) { - // another node could have absorbed this child. - if (this.nodes.hasOwnProperty(nodeId)) { - var childNode = this.nodes[nodeId]; + exports._nodeInActiveArea = function(node) { + return ( + Math.abs(node.x - this.areaCenter.x) <= this.constants.clustering.activeAreaBoxSize/this.scale + && + Math.abs(node.y - this.areaCenter.y) <= this.constants.clustering.activeAreaBoxSize/this.scale + ) + }; - // the edges can be swallowed by another decrease - if (childNode.dynamicEdgesLength == 1 && childNode.dynamicEdges.length != 0) { - var edge = childNode.dynamicEdges[0]; - var parentNode = (edge.toId == childNode.id) ? this.nodes[edge.fromId] : this.nodes[edge.toId]; - // group to the largest node - if (childNode.id != parentNode.id) { - if (parentNode.options.mass > childNode.options.mass) { - this._addToCluster(parentNode,childNode,true); - } - else { - this._addToCluster(childNode,parentNode,true); - } - } - } + /** + * This is an adaptation of the original repositioning function. This is called if the system is clustered initially + * It puts large clusters away from the center and randomizes the order. + * + */ + exports.repositionNodes = function() { + for (var i = 0; i < this.nodeIndices.length; i++) { + var node = this.nodes[this.nodeIndices[i]]; + if ((node.xFixed == false || node.yFixed == false)) { + var radius = 10 * 0.1*this.nodeIndices.length * Math.min(100,node.options.mass); + var angle = 2 * Math.PI * Math.random(); + if (node.xFixed == false) {node.x = radius * Math.cos(angle);} + if (node.yFixed == false) {node.y = radius * Math.sin(angle);} + this._repositionBezierNodes(node); } } }; /** - * To keep the nodes of roughly equal size we normalize the cluster levels. - * This function clusters a node to its smallest connected neighbour. + * We determine how many connections denote an important hub. + * We take the mean + 2*std as the important hub size. (Assuming a normal distribution of data, ~2.2%) * - * @param node * @private */ - exports._clusterToSmallestNeighbour = function(node) { - var smallestNeighbour = -1; - var smallestNeighbourNode = null; - for (var i = 0; i < node.dynamicEdges.length; i++) { - if (node.dynamicEdges[i] !== undefined) { - var neighbour = null; - if (node.dynamicEdges[i].fromId != node.id) { - neighbour = node.dynamicEdges[i].from; - } - else if (node.dynamicEdges[i].toId != node.id) { - neighbour = node.dynamicEdges[i].to; - } + exports._getHubSize = function() { + var average = 0; + var averageSquared = 0; + var hubCounter = 0; + var largestHub = 0; + for (var i = 0; i < this.nodeIndices.length; i++) { - if (neighbour != null && smallestNeighbour > neighbour.clusterSessions.length) { - smallestNeighbour = neighbour.clusterSessions.length; - smallestNeighbourNode = neighbour; - } + var node = this.nodes[this.nodeIndices[i]]; + if (node.dynamicEdgesLength > largestHub) { + largestHub = node.dynamicEdgesLength; } + average += node.dynamicEdgesLength; + averageSquared += Math.pow(node.dynamicEdgesLength,2); + hubCounter += 1; } + average = average / hubCounter; + averageSquared = averageSquared / hubCounter; - if (neighbour != null && this.nodes[neighbour.id] !== undefined) { - this._addToCluster(neighbour, node, true); + var variance = averageSquared - Math.pow(average,2); + + var standardDeviation = Math.sqrt(variance); + + this.hubThreshold = Math.floor(average + 2*standardDeviation); + + // always have at least one to cluster + if (this.hubThreshold > largestHub) { + this.hubThreshold = largestHub; } + + // console.log("average",average,"averageSQ",averageSquared,"var",variance,"std",standardDeviation); + // console.log("hubThreshold:",this.hubThreshold); }; /** - * This function forms clusters from hubs, it loops over all nodes + * We reduce the amount of "extension nodes" or chains. These are not quickly clustered with the outliers and hubs methods + * with this amount we can cluster specifically on these chains. * - * @param {Boolean} force | Disregard zoom level - * @param {Boolean} onlyEqual | This only clusters a hub with a specific number of edges + * @param {Number} fraction | between 0 and 1, the percentage of chains to reduce * @private */ - exports._formClustersByHub = function(force, onlyEqual) { - // we loop over all nodes in the list + exports._reduceAmountOfChains = function(fraction) { + this.hubThreshold = 2; + var reduceAmount = Math.floor(this.nodeIndices.length * fraction); for (var nodeId in this.nodes) { - // we check if it is still available since it can be used by the clustering in this loop if (this.nodes.hasOwnProperty(nodeId)) { - this._formClusterFromHub(this.nodes[nodeId],force,onlyEqual); + if (this.nodes[nodeId].dynamicEdgesLength == 2 && this.nodes[nodeId].dynamicEdges.length >= 2) { + if (reduceAmount > 0) { + this._formClusterFromHub(this.nodes[nodeId],true,true,1); + reduceAmount -= 1; + } + } } } }; /** - * This function forms a cluster from a specific preselected hub node + * We get the amount of "extension nodes" or chains. These are not quickly clustered with the outliers and hubs methods + * with this amount we can cluster specifically on these chains. * - * @param {Node} hubNode | the node we will cluster as a hub - * @param {Boolean} force | Disregard zoom level - * @param {Boolean} onlyEqual | This only clusters a hub with a specific number of edges - * @param {Number} [absorptionSizeOffset] | * @private */ - exports._formClusterFromHub = function(hubNode, force, onlyEqual, absorptionSizeOffset) { - if (absorptionSizeOffset === undefined) { - absorptionSizeOffset = 0; - } - // we decide if the node is a hub - if ((hubNode.dynamicEdgesLength >= this.hubThreshold && onlyEqual == false) || - (hubNode.dynamicEdgesLength == this.hubThreshold && onlyEqual == true)) { - // initialize variables - var dx,dy,length; - var minLength = this.constants.clustering.clusterEdgeThreshold/this.scale; - var allowCluster = false; - - // we create a list of edges because the dynamicEdges change over the course of this loop - var edgesIdarray = []; - var amountOfInitialEdges = hubNode.dynamicEdges.length; - for (var j = 0; j < amountOfInitialEdges; j++) { - edgesIdarray.push(hubNode.dynamicEdges[j].id); - } - - // if the hub clustering is not forces, we check if one of the edges connected - // to a cluster is small enough based on the constants.clustering.clusterEdgeThreshold - if (force == false) { - allowCluster = false; - for (j = 0; j < amountOfInitialEdges; j++) { - var edge = this.edges[edgesIdarray[j]]; - if (edge !== undefined) { - if (edge.connected) { - if (edge.toId != edge.fromId) { - dx = (edge.to.x - edge.from.x); - dy = (edge.to.y - edge.from.y); - length = Math.sqrt(dx * dx + dy * dy); - - if (length < minLength) { - allowCluster = true; - break; - } - } - } - } - } - } - - // start the clustering if allowed - if ((!force && allowCluster) || force) { - // we loop over all edges INITIALLY connected to this hub - for (j = 0; j < amountOfInitialEdges; j++) { - edge = this.edges[edgesIdarray[j]]; - // the edge can be clustered by this function in a previous loop - if (edge !== undefined) { - var childNode = this.nodes[(edge.fromId == hubNode.id) ? edge.toId : edge.fromId]; - // we do not want hubs to merge with other hubs nor do we want to cluster itself. - if ((childNode.dynamicEdges.length <= (this.hubThreshold + absorptionSizeOffset)) && - (childNode.id != hubNode.id)) { - this._addToCluster(hubNode,childNode,force); - } - } + exports._getChainFraction = function() { + var chains = 0; + var total = 0; + for (var nodeId in this.nodes) { + if (this.nodes.hasOwnProperty(nodeId)) { + if (this.nodes[nodeId].dynamicEdgesLength == 2 && this.nodes[nodeId].dynamicEdges.length >= 2) { + chains += 1; } + total += 1; } } + return chains/total; }; +/***/ }, +/* 64 */ +/***/ function(module, exports, __webpack_require__) { + + var util = __webpack_require__(1); + var Node = __webpack_require__(53); /** - * This function adds the child node to the parent node, creating a cluster if it is not already. + * Creation of the SectorMixin var. * - * @param {Node} parentNode | this is the node that will house the child node - * @param {Node} childNode | this node will be deleted from the global this.nodes and stored in the parent node - * @param {Boolean} force | true will only update the remainingEdges at the very end of the clustering, ensuring single level collapse - * @private + * This contains all the functions the Network object can use to employ the sector system. + * The sector system is always used by Network, though the benefits only apply to the use of clustering. + * If clustering is not used, there is no overhead except for a duplicate object with references to nodes and edges. */ - exports._addToCluster = function(parentNode, childNode, force) { - // join child node in the parent node - parentNode.containedNodes[childNode.id] = childNode; - - // manage all the edges connected to the child and parent nodes - for (var i = 0; i < childNode.dynamicEdges.length; i++) { - var edge = childNode.dynamicEdges[i]; - if (edge.toId == parentNode.id || edge.fromId == parentNode.id) { // edge connected to parentNode - this._addToContainedEdges(parentNode,childNode,edge); - } - else { - this._connectEdgeToCluster(parentNode,childNode,edge); - } - } - // a contained node has no dynamic edges. - childNode.dynamicEdges = []; - - // remove circular edges from clusters - this._containCircularEdgesFromNode(parentNode,childNode); - - - // remove the childNode from the global nodes object - delete this.nodes[childNode.id]; - // update the properties of the child and parent - var massBefore = parentNode.options.mass; - childNode.clusterSession = this.clusterSession; - parentNode.options.mass += childNode.options.mass; - parentNode.clusterSize += childNode.clusterSize; - parentNode.options.fontSize = Math.min(this.constants.clustering.maxFontSize, this.constants.nodes.fontSize + this.constants.clustering.fontSizeMultiplier*parentNode.clusterSize); + /** + * This function is only called by the setData function of the Network object. + * This loads the global references into the active sector. This initializes the sector. + * + * @private + */ + exports._putDataInSector = function() { + this.sectors["active"][this._sector()].nodes = this.nodes; + this.sectors["active"][this._sector()].edges = this.edges; + this.sectors["active"][this._sector()].nodeIndices = this.nodeIndices; + }; - // keep track of the clustersessions so we can open the cluster up as it has been formed. - if (parentNode.clusterSessions[parentNode.clusterSessions.length - 1] != this.clusterSession) { - parentNode.clusterSessions.push(this.clusterSession); - } - // forced clusters only open from screen size and double tap - if (force == true) { - // parentNode.formationScale = Math.pow(1 - (1.0/11.0),this.clusterSession+3); - parentNode.formationScale = 0; + /** + * /** + * This function sets the global references to nodes, edges and nodeIndices back to + * those of the supplied (active) sector. If a type is defined, do the specific type + * + * @param {String} sectorId + * @param {String} [sectorType] | "active" or "frozen" + * @private + */ + exports._switchToSector = function(sectorId, sectorType) { + if (sectorType === undefined || sectorType == "active") { + this._switchToActiveSector(sectorId); } else { - parentNode.formationScale = this.scale; // The latest child has been added on this scale + this._switchToFrozenSector(sectorId); } + }; - // recalculate the size of the node on the next time the node is rendered - parentNode.clearSizeCache(); - - // set the pop-out scale for the childnode - parentNode.containedNodes[childNode.id].formationScale = parentNode.formationScale; - // nullify the movement velocity of the child, this is to avoid hectic behaviour - childNode.clearVelocity(); + /** + * This function sets the global references to nodes, edges and nodeIndices back to + * those of the supplied active sector. + * + * @param sectorId + * @private + */ + exports._switchToActiveSector = function(sectorId) { + this.nodeIndices = this.sectors["active"][sectorId]["nodeIndices"]; + this.nodes = this.sectors["active"][sectorId]["nodes"]; + this.edges = this.sectors["active"][sectorId]["edges"]; + }; - // the mass has altered, preservation of energy dictates the velocity to be updated - parentNode.updateVelocity(massBefore); - // restart the simulation to reorganise all nodes - this.moving = true; + /** + * This function sets the global references to nodes, edges and nodeIndices back to + * those of the supplied active sector. + * + * @private + */ + exports._switchToSupportSector = function() { + this.nodeIndices = this.sectors["support"]["nodeIndices"]; + this.nodes = this.sectors["support"]["nodes"]; + this.edges = this.sectors["support"]["edges"]; }; /** - * This function will apply the changes made to the remainingEdges during the formation of the clusters. - * This is a seperate function to allow for level-wise collapsing of the node barnesHutTree. - * It has to be called if a level is collapsed. It is called by _formClusters(). + * This function sets the global references to nodes, edges and nodeIndices back to + * those of the supplied frozen sector. + * + * @param sectorId * @private */ - exports._updateDynamicEdges = function() { - for (var i = 0; i < this.nodeIndices.length; i++) { - var node = this.nodes[this.nodeIndices[i]]; - node.dynamicEdgesLength = node.dynamicEdges.length; - - // this corrects for multiple edges pointing at the same other node - var correction = 0; - if (node.dynamicEdgesLength > 1) { - for (var j = 0; j < node.dynamicEdgesLength - 1; j++) { - var edgeToId = node.dynamicEdges[j].toId; - var edgeFromId = node.dynamicEdges[j].fromId; - for (var k = j+1; k < node.dynamicEdgesLength; k++) { - if ((node.dynamicEdges[k].toId == edgeToId && node.dynamicEdges[k].fromId == edgeFromId) || - (node.dynamicEdges[k].fromId == edgeToId && node.dynamicEdges[k].toId == edgeFromId)) { - correction += 1; - } - } - } - } - node.dynamicEdgesLength -= correction; - } + exports._switchToFrozenSector = function(sectorId) { + this.nodeIndices = this.sectors["frozen"][sectorId]["nodeIndices"]; + this.nodes = this.sectors["frozen"][sectorId]["nodes"]; + this.edges = this.sectors["frozen"][sectorId]["edges"]; }; /** - * This adds an edge from the childNode to the contained edges of the parent node + * This function sets the global references to nodes, edges and nodeIndices back to + * those of the currently active sector. * - * @param parentNode | Node object - * @param childNode | Node object - * @param edge | Edge object * @private */ - exports._addToContainedEdges = function(parentNode, childNode, edge) { - // create an array object if it does not yet exist for this childNode - if (!(parentNode.containedEdges.hasOwnProperty(childNode.id))) { - parentNode.containedEdges[childNode.id] = [] - } - // add this edge to the list - parentNode.containedEdges[childNode.id].push(edge); + exports._loadLatestSector = function() { + this._switchToSector(this._sector()); + }; - // remove the edge from the global edges object - delete this.edges[edge.id]; - // remove the edge from the parent object - for (var i = 0; i < parentNode.dynamicEdges.length; i++) { - if (parentNode.dynamicEdges[i].id == edge.id) { - parentNode.dynamicEdges.splice(i,1); - break; - } - } + /** + * This function returns the currently active sector Id + * + * @returns {String} + * @private + */ + exports._sector = function() { + return this.activeSector[this.activeSector.length-1]; }; + /** - * This function connects an edge that was connected to a child node to the parent node. - * It keeps track of which nodes it has been connected to with the originalId array. + * This function returns the previously active sector Id * - * @param {Node} parentNode | Node object - * @param {Node} childNode | Node object - * @param {Edge} edge | Edge object + * @returns {String} * @private */ - exports._connectEdgeToCluster = function(parentNode, childNode, edge) { - // handle circular edges - if (edge.toId == edge.fromId) { - this._addToContainedEdges(parentNode, childNode, edge); + exports._previousSector = function() { + if (this.activeSector.length > 1) { + return this.activeSector[this.activeSector.length-2]; } else { - if (edge.toId == childNode.id) { // edge connected to other node on the "to" side - edge.originalToId.push(childNode.id); - edge.to = parentNode; - edge.toId = parentNode.id; - } - else { // edge connected to other node with the "from" side - - edge.originalFromId.push(childNode.id); - edge.from = parentNode; - edge.fromId = parentNode.id; - } - - this._addToReroutedEdges(parentNode,childNode,edge); + throw new TypeError('there are not enough sectors in the this.activeSector array.'); } }; /** - * If a node is connected to itself, a circular edge is drawn. When clustering we want to contain - * these edges inside of the cluster. + * We add the active sector at the end of the this.activeSector array + * This ensures it is the currently active sector returned by _sector() and it reaches the top + * of the activeSector stack. When we reverse our steps we move from the end to the beginning of this stack. * - * @param parentNode - * @param childNode + * @param newId * @private */ - exports._containCircularEdgesFromNode = function(parentNode, childNode) { - // manage all the edges connected to the child and parent nodes - for (var i = 0; i < parentNode.dynamicEdges.length; i++) { - var edge = parentNode.dynamicEdges[i]; - // handle circular edges - if (edge.toId == edge.fromId) { - this._addToContainedEdges(parentNode, childNode, edge); - } - } + exports._setActiveSector = function(newId) { + this.activeSector.push(newId); }; /** - * This adds an edge from the childNode to the rerouted edges of the parent node + * We remove the currently active sector id from the active sector stack. This happens when + * we reactivate the previously active sector * - * @param parentNode | Node object - * @param childNode | Node object - * @param edge | Edge object * @private */ - exports._addToReroutedEdges = function(parentNode, childNode, edge) { - // create an array object if it does not yet exist for this childNode - // we store the edge in the rerouted edges so we can restore it when the cluster pops open - if (!(parentNode.reroutedEdges.hasOwnProperty(childNode.id))) { - parentNode.reroutedEdges[childNode.id] = []; - } - parentNode.reroutedEdges[childNode.id].push(edge); - - // this edge becomes part of the dynamicEdges of the cluster node - parentNode.dynamicEdges.push(edge); - }; - + exports._forgetLastSector = function() { + this.activeSector.pop(); + }; /** - * This function connects an edge that was connected to a cluster node back to the child node. + * This function creates a new active sector with the supplied newId. This newId + * is the expanding node id. * - * @param parentNode | Node object - * @param childNode | Node object - * @private - */ - exports._connectEdgeBackToChild = function(parentNode, childNode) { - if (parentNode.reroutedEdges.hasOwnProperty(childNode.id)) { - for (var i = 0; i < parentNode.reroutedEdges[childNode.id].length; i++) { - var edge = parentNode.reroutedEdges[childNode.id][i]; - if (edge.originalFromId[edge.originalFromId.length-1] == childNode.id) { - edge.originalFromId.pop(); - edge.fromId = childNode.id; - edge.from = childNode; - } - else { - edge.originalToId.pop(); - edge.toId = childNode.id; - edge.to = childNode; - } - - // append this edge to the list of edges connecting to the childnode - childNode.dynamicEdges.push(edge); - - // remove the edge from the parent object - for (var j = 0; j < parentNode.dynamicEdges.length; j++) { - if (parentNode.dynamicEdges[j].id == edge.id) { - parentNode.dynamicEdges.splice(j,1); - break; - } - } - } - // remove the entry from the rerouted edges - delete parentNode.reroutedEdges[childNode.id]; - } - }; - - - /** - * When loops are clustered, an edge can be both in the rerouted array and the contained array. - * This function is called last to verify that all edges in dynamicEdges are in fact connected to the - * parentNode - * - * @param parentNode | Node object - * @private - */ - exports._validateEdges = function(parentNode) { - for (var i = 0; i < parentNode.dynamicEdges.length; i++) { - var edge = parentNode.dynamicEdges[i]; - if (parentNode.id != edge.toId && parentNode.id != edge.fromId) { - parentNode.dynamicEdges.splice(i,1); - } - } - }; - - - /** - * This function released the contained edges back into the global domain and puts them back into the - * dynamic edges of both parent and child. - * - * @param {Node} parentNode | - * @param {Node} childNode | - * @private - */ - exports._releaseContainedEdges = function(parentNode, childNode) { - for (var i = 0; i < parentNode.containedEdges[childNode.id].length; i++) { - var edge = parentNode.containedEdges[childNode.id][i]; - - // put the edge back in the global edges object - this.edges[edge.id] = edge; - - // put the edge back in the dynamic edges of the child and parent - childNode.dynamicEdges.push(edge); - parentNode.dynamicEdges.push(edge); - } - // remove the entry from the contained edges - delete parentNode.containedEdges[childNode.id]; - - }; - - - - - // ------------------- UTILITY FUNCTIONS ---------------------------- // - - - /** - * This updates the node labels for all nodes (for debugging purposes) - */ - exports.updateLabels = function() { - var nodeId; - // update node labels - for (nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - var node = this.nodes[nodeId]; - if (node.clusterSize > 1) { - node.label = "[".concat(String(node.clusterSize),"]"); - } - } - } - - // update node labels - for (nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - node = this.nodes[nodeId]; - if (node.clusterSize == 1) { - if (node.originalLabel !== undefined) { - node.label = node.originalLabel; - } - else { - node.label = String(node.id); - } - } - } - } - - // /* Debug Override */ - // for (nodeId in this.nodes) { - // if (this.nodes.hasOwnProperty(nodeId)) { - // node = this.nodes[nodeId]; - // node.label = String(node.level); - // } - // } - - }; - - - /** - * We want to keep the cluster level distribution rather small. This means we do not want unclustered nodes - * if the rest of the nodes are already a few cluster levels in. - * To fix this we use this function. It determines the min and max cluster level and sends nodes that have not - * clustered enough to the clusterToSmallestNeighbours function. - */ - exports.normalizeClusterLevels = function() { - var maxLevel = 0; - var minLevel = 1e9; - var clusterLevel = 0; - var nodeId; - - // we loop over all nodes in the list - for (nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - clusterLevel = this.nodes[nodeId].clusterSessions.length; - if (maxLevel < clusterLevel) {maxLevel = clusterLevel;} - if (minLevel > clusterLevel) {minLevel = clusterLevel;} - } - } - - if (maxLevel - minLevel > this.constants.clustering.clusterLevelDifference) { - var amountOfNodes = this.nodeIndices.length; - var targetLevel = maxLevel - this.constants.clustering.clusterLevelDifference; - // we loop over all nodes in the list - for (nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - if (this.nodes[nodeId].clusterSessions.length < targetLevel) { - this._clusterToSmallestNeighbour(this.nodes[nodeId]); - } - } - } - this._updateNodeIndexList(); - this._updateDynamicEdges(); - // if a cluster was formed, we increase the clusterSession - if (this.nodeIndices.length != amountOfNodes) { - this.clusterSession += 1; - } - } - }; - - - - /** - * This function determines if the cluster we want to decluster is in the active area - * this means around the zoom center - * - * @param {Node} node - * @returns {boolean} - * @private - */ - exports._nodeInActiveArea = function(node) { - return ( - Math.abs(node.x - this.areaCenter.x) <= this.constants.clustering.activeAreaBoxSize/this.scale - && - Math.abs(node.y - this.areaCenter.y) <= this.constants.clustering.activeAreaBoxSize/this.scale - ) - }; - - - /** - * This is an adaptation of the original repositioning function. This is called if the system is clustered initially - * It puts large clusters away from the center and randomizes the order. - * - */ - exports.repositionNodes = function() { - for (var i = 0; i < this.nodeIndices.length; i++) { - var node = this.nodes[this.nodeIndices[i]]; - if ((node.xFixed == false || node.yFixed == false)) { - var radius = 10 * 0.1*this.nodeIndices.length * Math.min(100,node.options.mass); - var angle = 2 * Math.PI * Math.random(); - if (node.xFixed == false) {node.x = radius * Math.cos(angle);} - if (node.yFixed == false) {node.y = radius * Math.sin(angle);} - this._repositionBezierNodes(node); - } - } - }; - - - /** - * We determine how many connections denote an important hub. - * We take the mean + 2*std as the important hub size. (Assuming a normal distribution of data, ~2.2%) - * - * @private - */ - exports._getHubSize = function() { - var average = 0; - var averageSquared = 0; - var hubCounter = 0; - var largestHub = 0; - - for (var i = 0; i < this.nodeIndices.length; i++) { - - var node = this.nodes[this.nodeIndices[i]]; - if (node.dynamicEdgesLength > largestHub) { - largestHub = node.dynamicEdgesLength; - } - average += node.dynamicEdgesLength; - averageSquared += Math.pow(node.dynamicEdgesLength,2); - hubCounter += 1; - } - average = average / hubCounter; - averageSquared = averageSquared / hubCounter; - - var variance = averageSquared - Math.pow(average,2); - - var standardDeviation = Math.sqrt(variance); - - this.hubThreshold = Math.floor(average + 2*standardDeviation); - - // always have at least one to cluster - if (this.hubThreshold > largestHub) { - this.hubThreshold = largestHub; - } - - // console.log("average",average,"averageSQ",averageSquared,"var",variance,"std",standardDeviation); - // console.log("hubThreshold:",this.hubThreshold); - }; - - - /** - * We reduce the amount of "extension nodes" or chains. These are not quickly clustered with the outliers and hubs methods - * with this amount we can cluster specifically on these chains. - * - * @param {Number} fraction | between 0 and 1, the percentage of chains to reduce - * @private - */ - exports._reduceAmountOfChains = function(fraction) { - this.hubThreshold = 2; - var reduceAmount = Math.floor(this.nodeIndices.length * fraction); - for (var nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - if (this.nodes[nodeId].dynamicEdgesLength == 2 && this.nodes[nodeId].dynamicEdges.length >= 2) { - if (reduceAmount > 0) { - this._formClusterFromHub(this.nodes[nodeId],true,true,1); - reduceAmount -= 1; - } - } - } - } - }; - - /** - * We get the amount of "extension nodes" or chains. These are not quickly clustered with the outliers and hubs methods - * with this amount we can cluster specifically on these chains. - * - * @private - */ - exports._getChainFraction = function() { - var chains = 0; - var total = 0; - for (var nodeId in this.nodes) { - if (this.nodes.hasOwnProperty(nodeId)) { - if (this.nodes[nodeId].dynamicEdgesLength == 2 && this.nodes[nodeId].dynamicEdges.length >= 2) { - chains += 1; - } - total += 1; - } - } - return chains/total; - }; - - -/***/ }, -/* 65 */ -/***/ function(module, exports, __webpack_require__) { - - var util = __webpack_require__(1); - var Node = __webpack_require__(53); - - /** - * Creation of the SectorMixin var. - * - * This contains all the functions the Network object can use to employ the sector system. - * The sector system is always used by Network, though the benefits only apply to the use of clustering. - * If clustering is not used, there is no overhead except for a duplicate object with references to nodes and edges. - */ - - /** - * This function is only called by the setData function of the Network object. - * This loads the global references into the active sector. This initializes the sector. - * - * @private - */ - exports._putDataInSector = function() { - this.sectors["active"][this._sector()].nodes = this.nodes; - this.sectors["active"][this._sector()].edges = this.edges; - this.sectors["active"][this._sector()].nodeIndices = this.nodeIndices; - }; - - - /** - * /** - * This function sets the global references to nodes, edges and nodeIndices back to - * those of the supplied (active) sector. If a type is defined, do the specific type - * - * @param {String} sectorId - * @param {String} [sectorType] | "active" or "frozen" - * @private - */ - exports._switchToSector = function(sectorId, sectorType) { - if (sectorType === undefined || sectorType == "active") { - this._switchToActiveSector(sectorId); - } - else { - this._switchToFrozenSector(sectorId); - } - }; - - - /** - * This function sets the global references to nodes, edges and nodeIndices back to - * those of the supplied active sector. - * - * @param sectorId - * @private - */ - exports._switchToActiveSector = function(sectorId) { - this.nodeIndices = this.sectors["active"][sectorId]["nodeIndices"]; - this.nodes = this.sectors["active"][sectorId]["nodes"]; - this.edges = this.sectors["active"][sectorId]["edges"]; - }; - - - /** - * This function sets the global references to nodes, edges and nodeIndices back to - * those of the supplied active sector. - * - * @private - */ - exports._switchToSupportSector = function() { - this.nodeIndices = this.sectors["support"]["nodeIndices"]; - this.nodes = this.sectors["support"]["nodes"]; - this.edges = this.sectors["support"]["edges"]; - }; - - - /** - * This function sets the global references to nodes, edges and nodeIndices back to - * those of the supplied frozen sector. - * - * @param sectorId - * @private - */ - exports._switchToFrozenSector = function(sectorId) { - this.nodeIndices = this.sectors["frozen"][sectorId]["nodeIndices"]; - this.nodes = this.sectors["frozen"][sectorId]["nodes"]; - this.edges = this.sectors["frozen"][sectorId]["edges"]; - }; - - - /** - * This function sets the global references to nodes, edges and nodeIndices back to - * those of the currently active sector. - * - * @private - */ - exports._loadLatestSector = function() { - this._switchToSector(this._sector()); - }; - - - /** - * This function returns the currently active sector Id - * - * @returns {String} - * @private - */ - exports._sector = function() { - return this.activeSector[this.activeSector.length-1]; - }; - - - /** - * This function returns the previously active sector Id - * - * @returns {String} - * @private - */ - exports._previousSector = function() { - if (this.activeSector.length > 1) { - return this.activeSector[this.activeSector.length-2]; - } - else { - throw new TypeError('there are not enough sectors in the this.activeSector array.'); - } - }; - - - /** - * We add the active sector at the end of the this.activeSector array - * This ensures it is the currently active sector returned by _sector() and it reaches the top - * of the activeSector stack. When we reverse our steps we move from the end to the beginning of this stack. - * - * @param newId - * @private - */ - exports._setActiveSector = function(newId) { - this.activeSector.push(newId); - }; - - - /** - * We remove the currently active sector id from the active sector stack. This happens when - * we reactivate the previously active sector - * - * @private - */ - exports._forgetLastSector = function() { - this.activeSector.pop(); - }; - - - /** - * This function creates a new active sector with the supplied newId. This newId - * is the expanding node id. - * - * @param {String} newId | Id of the new active sector + * @param {String} newId | Id of the new active sector * @private */ exports._createNewSector = function(newId) { @@ -31750,7 +31399,7 @@ return /******/ (function(modules) { // webpackBootstrap /***/ }, -/* 66 */ +/* 65 */ /***/ function(module, exports, __webpack_require__) { var Node = __webpack_require__(53); @@ -32464,7 +32113,7 @@ return /******/ (function(modules) { // webpackBootstrap /***/ }, -/* 67 */ +/* 66 */ /***/ function(module, exports, __webpack_require__) { var util = __webpack_require__(1); @@ -33150,7 +32799,7 @@ return /******/ (function(modules) { // webpackBootstrap /***/ }, -/* 68 */ +/* 67 */ /***/ function(module, exports, __webpack_require__) { var util = __webpack_require__(1); @@ -33330,7 +32979,7 @@ return /******/ (function(modules) { // webpackBootstrap /***/ }, -/* 69 */ +/* 68 */ /***/ function(module, exports, __webpack_require__) { exports._resetLevels = function() { @@ -33747,275 +33396,631 @@ return /******/ (function(modules) { // webpackBootstrap /***/ }, -/* 70 */ +/* 69 */ /***/ function(module, exports, __webpack_require__) { - // English - exports['en'] = { - edit: 'Edit', - del: 'Delete selected', - back: 'Back', - addNode: 'Add Node', - addEdge: 'Add Edge', - editNode: 'Edit Node', - editEdge: 'Edit Edge', - addDescription: 'Click in an empty space to place a new node.', - edgeDescription: 'Click on a node and drag the edge to another node to connect them.', - editEdgeDescription: 'Click on the control points and drag them to a node to connect to it.', - createEdgeError: 'Cannot link edges to a cluster.', - deleteClusterError: 'Clusters cannot be deleted.' + /** + * Calculate the forces the nodes apply on each other based on a repulsion field. + * This field is linearly approximated. + * + * @private + */ + exports._calculateNodeForces = function () { + var dx, dy, angle, distance, fx, fy, combinedClusterSize, + repulsingForce, node1, node2, i, j; + + var nodes = this.calculationNodes; + var nodeIndices = this.calculationNodeIndices; + + // approximation constants + var a_base = -2 / 3; + var b = 4 / 3; + + // repulsing forces between nodes + var nodeDistance = this.constants.physics.repulsion.nodeDistance; + var minimumDistance = nodeDistance; + + // we loop from i over all but the last entree in the array + // j loops from i+1 to the last. This way we do not double count any of the indices, nor i == j + for (i = 0; i < nodeIndices.length - 1; i++) { + node1 = nodes[nodeIndices[i]]; + for (j = i + 1; j < nodeIndices.length; j++) { + node2 = nodes[nodeIndices[j]]; + combinedClusterSize = node1.clusterSize + node2.clusterSize - 2; + + dx = node2.x - node1.x; + dy = node2.y - node1.y; + distance = Math.sqrt(dx * dx + dy * dy); + + minimumDistance = (combinedClusterSize == 0) ? nodeDistance : (nodeDistance * (1 + combinedClusterSize * this.constants.clustering.distanceAmplification)); + var a = a_base / minimumDistance; + if (distance < 2 * minimumDistance) { + if (distance < 0.5 * minimumDistance) { + repulsingForce = 1.0; + } + else { + repulsingForce = a * distance + b; // linear approx of 1 / (1 + Math.exp((distance / minimumDistance - 1) * steepness)) + } + + // amplify the repulsion for clusters. + repulsingForce *= (combinedClusterSize == 0) ? 1 : 1 + combinedClusterSize * this.constants.clustering.forceAmplification; + repulsingForce = repulsingForce / distance; + + fx = dx * repulsingForce; + fy = dy * repulsingForce; + + node1.fx -= fx; + node1.fy -= fy; + node2.fx += fx; + node2.fy += fy; + } + } + } }; - exports['en_EN'] = exports['en']; - exports['en_US'] = exports['en']; - // Dutch - exports['nl'] = { - edit: 'Wijzigen', - del: 'Selectie verwijderen', - back: 'Terug', - addNode: 'Node toevoegen', - addEdge: 'Link toevoegen', - editNode: 'Node wijzigen', - editEdge: 'Link wijzigen', - addDescription: 'Klik op een leeg gebied om een nieuwe node te maken.', - edgeDescription: 'Klik op een node en sleep de link naar een andere node om ze te verbinden.', - editEdgeDescription: 'Klik op de verbindingspunten en sleep ze naar een node om daarmee te verbinden.', - createEdgeError: 'Kan geen link maken naar een cluster.', - deleteClusterError: 'Clusters kunnen niet worden verwijderd.' + +/***/ }, +/* 70 */ +/***/ function(module, exports, __webpack_require__) { + + /** + * Calculate the forces the nodes apply on eachother based on a repulsion field. + * This field is linearly approximated. + * + * @private + */ + exports._calculateNodeForces = function () { + var dx, dy, distance, fx, fy, + repulsingForce, node1, node2, i, j; + + var nodes = this.calculationNodes; + var nodeIndices = this.calculationNodeIndices; + + // repulsing forces between nodes + var nodeDistance = this.constants.physics.hierarchicalRepulsion.nodeDistance; + + // we loop from i over all but the last entree in the array + // j loops from i+1 to the last. This way we do not double count any of the indices, nor i == j + for (i = 0; i < nodeIndices.length - 1; i++) { + node1 = nodes[nodeIndices[i]]; + for (j = i + 1; j < nodeIndices.length; j++) { + node2 = nodes[nodeIndices[j]]; + + // nodes only affect nodes on their level + if (node1.level == node2.level) { + + dx = node2.x - node1.x; + dy = node2.y - node1.y; + distance = Math.sqrt(dx * dx + dy * dy); + + + var steepness = 0.05; + if (distance < nodeDistance) { + repulsingForce = -Math.pow(steepness*distance,2) + Math.pow(steepness*nodeDistance,2); + } + else { + repulsingForce = 0; + } + // normalize force with + if (distance == 0) { + distance = 0.01; + } + else { + repulsingForce = repulsingForce / distance; + } + fx = dx * repulsingForce; + fy = dy * repulsingForce; + + node1.fx -= fx; + node1.fy -= fy; + node2.fx += fx; + node2.fy += fy; + } + } + } }; - exports['nl_NL'] = exports['nl']; - exports['nl_BE'] = exports['nl']; + /** + * this function calculates the effects of the springs in the case of unsmooth curves. + * + * @private + */ + exports._calculateHierarchicalSpringForces = function () { + var edgeLength, edge, edgeId; + var dx, dy, fx, fy, springForce, distance; + var edges = this.edges; + + var nodes = this.calculationNodes; + var nodeIndices = this.calculationNodeIndices; + + + for (var i = 0; i < nodeIndices.length; i++) { + var node1 = nodes[nodeIndices[i]]; + node1.springFx = 0; + node1.springFy = 0; + } + + + // forces caused by the edges, modelled as springs + for (edgeId in edges) { + if (edges.hasOwnProperty(edgeId)) { + edge = edges[edgeId]; + if (edge.connected) { + // only calculate forces if nodes are in the same sector + if (this.nodes.hasOwnProperty(edge.toId) && this.nodes.hasOwnProperty(edge.fromId)) { + edgeLength = edge.physics.springLength; + // this implies that the edges between big clusters are longer + edgeLength += (edge.to.clusterSize + edge.from.clusterSize - 2) * this.constants.clustering.edgeGrowth; + + dx = (edge.from.x - edge.to.x); + dy = (edge.from.y - edge.to.y); + distance = Math.sqrt(dx * dx + dy * dy); + + if (distance == 0) { + distance = 0.01; + } + + // the 1/distance is so the fx and fy can be calculated without sine or cosine. + springForce = this.constants.physics.springConstant * (edgeLength - distance) / distance; + + fx = dx * springForce; + fy = dy * springForce; + + + + if (edge.to.level != edge.from.level) { + edge.to.springFx -= fx; + edge.to.springFy -= fy; + edge.from.springFx += fx; + edge.from.springFy += fy; + } + else { + var factor = 0.5; + edge.to.fx -= factor*fx; + edge.to.fy -= factor*fy; + edge.from.fx += factor*fx; + edge.from.fy += factor*fy; + } + } + } + } + } + + // normalize spring forces + var springForce = 1; + var springFx, springFy; + for (i = 0; i < nodeIndices.length; i++) { + var node = nodes[nodeIndices[i]]; + springFx = Math.min(springForce,Math.max(-springForce,node.springFx)); + springFy = Math.min(springForce,Math.max(-springForce,node.springFy)); + + node.fx += springFx; + node.fy += springFy; + } + + // retain energy balance + var totalFx = 0; + var totalFy = 0; + for (i = 0; i < nodeIndices.length; i++) { + var node = nodes[nodeIndices[i]]; + totalFx += node.fx; + totalFy += node.fy; + } + var correctionFx = totalFx / nodeIndices.length; + var correctionFy = totalFy / nodeIndices.length; + + for (i = 0; i < nodeIndices.length; i++) { + var node = nodes[nodeIndices[i]]; + node.fx -= correctionFx; + node.fy -= correctionFy; + } + + }; + /***/ }, /* 71 */ /***/ function(module, exports, __webpack_require__) { /** - * Canvas shapes used by Network + * This function calculates the forces the nodes apply on eachother based on a gravitational model. + * The Barnes Hut method is used to speed up this N-body simulation. + * + * @private */ - if (typeof CanvasRenderingContext2D !== 'undefined') { + exports._calculateNodeForces = function() { + if (this.constants.physics.barnesHut.gravitationalConstant != 0) { + var node; + var nodes = this.calculationNodes; + var nodeIndices = this.calculationNodeIndices; + var nodeCount = nodeIndices.length; - /** - * Draw a circle shape - */ - CanvasRenderingContext2D.prototype.circle = function(x, y, r) { - this.beginPath(); - this.arc(x, y, r, 0, 2*Math.PI, false); - }; + this._formBarnesHutTree(nodes,nodeIndices); - /** - * Draw a square shape - * @param {Number} x horizontal center - * @param {Number} y vertical center - * @param {Number} r size, width and height of the square - */ - CanvasRenderingContext2D.prototype.square = function(x, y, r) { - this.beginPath(); - this.rect(x - r, y - r, r * 2, r * 2); - }; + var barnesHutTree = this.barnesHutTree; - /** - * Draw a triangle shape - * @param {Number} x horizontal center - * @param {Number} y vertical center - * @param {Number} r radius, half the length of the sides of the triangle - */ - CanvasRenderingContext2D.prototype.triangle = function(x, y, r) { - // http://en.wikipedia.org/wiki/Equilateral_triangle - this.beginPath(); + // place the nodes one by one recursively + for (var i = 0; i < nodeCount; i++) { + node = nodes[nodeIndices[i]]; + if (node.options.mass > 0) { + // starting with root is irrelevant, it never passes the BarnesHut condition + this._getForceContribution(barnesHutTree.root.children.NW,node); + this._getForceContribution(barnesHutTree.root.children.NE,node); + this._getForceContribution(barnesHutTree.root.children.SW,node); + this._getForceContribution(barnesHutTree.root.children.SE,node); + } + } + } + }; - var s = r * 2; - var s2 = s / 2; - var ir = Math.sqrt(3) / 6 * s; // radius of inner circle - var h = Math.sqrt(s * s - s2 * s2); // height - this.moveTo(x, y - (h - ir)); - this.lineTo(x + s2, y + ir); - this.lineTo(x - s2, y + ir); - this.lineTo(x, y - (h - ir)); - this.closePath(); - }; + /** + * This function traverses the barnesHutTree. It checks when it can approximate distant nodes with their center of mass. + * If a region contains a single node, we check if it is not itself, then we apply the force. + * + * @param parentBranch + * @param node + * @private + */ + exports._getForceContribution = function(parentBranch,node) { + // we get no force contribution from an empty region + if (parentBranch.childrenCount > 0) { + var dx,dy,distance; - /** - * Draw a triangle shape in downward orientation - * @param {Number} x horizontal center - * @param {Number} y vertical center - * @param {Number} r radius - */ - CanvasRenderingContext2D.prototype.triangleDown = function(x, y, r) { - // http://en.wikipedia.org/wiki/Equilateral_triangle - this.beginPath(); + // get the distance from the center of mass to the node. + dx = parentBranch.centerOfMass.x - node.x; + dy = parentBranch.centerOfMass.y - node.y; + distance = Math.sqrt(dx * dx + dy * dy); - var s = r * 2; - var s2 = s / 2; - var ir = Math.sqrt(3) / 6 * s; // radius of inner circle - var h = Math.sqrt(s * s - s2 * s2); // height + // BarnesHut condition + // original condition : s/d < theta = passed === d/s > 1/theta = passed + // calcSize = 1/s --> d * 1/s > 1/theta = passed + if (distance * parentBranch.calcSize > this.constants.physics.barnesHut.theta) { + // duplicate code to reduce function calls to speed up program + if (distance == 0) { + distance = 0.1*Math.random(); + dx = distance; + } + var gravityForce = this.constants.physics.barnesHut.gravitationalConstant * parentBranch.mass * node.options.mass / (distance * distance * distance); + var fx = dx * gravityForce; + var fy = dy * gravityForce; + node.fx += fx; + node.fy += fy; + } + else { + // Did not pass the condition, go into children if available + if (parentBranch.childrenCount == 4) { + this._getForceContribution(parentBranch.children.NW,node); + this._getForceContribution(parentBranch.children.NE,node); + this._getForceContribution(parentBranch.children.SW,node); + this._getForceContribution(parentBranch.children.SE,node); + } + else { // parentBranch must have only one node, if it was empty we wouldnt be here + if (parentBranch.children.data.id != node.id) { // if it is not self + // duplicate code to reduce function calls to speed up program + if (distance == 0) { + distance = 0.5*Math.random(); + dx = distance; + } + var gravityForce = this.constants.physics.barnesHut.gravitationalConstant * parentBranch.mass * node.options.mass / (distance * distance * distance); + var fx = dx * gravityForce; + var fy = dy * gravityForce; + node.fx += fx; + node.fy += fy; + } + } + } + } + }; - this.moveTo(x, y + (h - ir)); - this.lineTo(x + s2, y - ir); - this.lineTo(x - s2, y - ir); - this.lineTo(x, y + (h - ir)); - this.closePath(); - }; + /** + * This function constructs the barnesHut tree recursively. It creates the root, splits it and starts placing the nodes. + * + * @param nodes + * @param nodeIndices + * @private + */ + exports._formBarnesHutTree = function(nodes,nodeIndices) { + var node; + var nodeCount = nodeIndices.length; - /** - * Draw a star shape, a star with 5 points - * @param {Number} x horizontal center - * @param {Number} y vertical center - * @param {Number} r radius, half the length of the sides of the triangle - */ - CanvasRenderingContext2D.prototype.star = function(x, y, r) { - // http://www.html5canvastutorials.com/labs/html5-canvas-star-spinner/ - this.beginPath(); + var minX = Number.MAX_VALUE, + minY = Number.MAX_VALUE, + maxX =-Number.MAX_VALUE, + maxY =-Number.MAX_VALUE; - for (var n = 0; n < 10; n++) { - var radius = (n % 2 === 0) ? r * 1.3 : r * 0.5; - this.lineTo( - x + radius * Math.sin(n * 2 * Math.PI / 10), - y - radius * Math.cos(n * 2 * Math.PI / 10) - ); + // get the range of the nodes + for (var i = 0; i < nodeCount; i++) { + var x = nodes[nodeIndices[i]].x; + var y = nodes[nodeIndices[i]].y; + if (nodes[nodeIndices[i]].options.mass > 0) { + if (x < minX) { minX = x; } + if (x > maxX) { maxX = x; } + if (y < minY) { minY = y; } + if (y > maxY) { maxY = y; } } + } + // make the range a square + var sizeDiff = Math.abs(maxX - minX) - Math.abs(maxY - minY); // difference between X and Y + if (sizeDiff > 0) {minY -= 0.5 * sizeDiff; maxY += 0.5 * sizeDiff;} // xSize > ySize + else {minX += 0.5 * sizeDiff; maxX -= 0.5 * sizeDiff;} // xSize < ySize - this.closePath(); - }; - /** - * http://stackoverflow.com/questions/1255512/how-to-draw-a-rounded-rectangle-on-html-canvas - */ - CanvasRenderingContext2D.prototype.roundRect = function(x, y, w, h, r) { - var r2d = Math.PI/180; - if( w - ( 2 * r ) < 0 ) { r = ( w / 2 ); } //ensure that the radius isn't too large for x - if( h - ( 2 * r ) < 0 ) { r = ( h / 2 ); } //ensure that the radius isn't too large for y - this.beginPath(); - this.moveTo(x+r,y); - this.lineTo(x+w-r,y); - this.arc(x+w-r,y+r,r,r2d*270,r2d*360,false); - this.lineTo(x+w,y+h-r); - this.arc(x+w-r,y+h-r,r,0,r2d*90,false); - this.lineTo(x+r,y+h); - this.arc(x+r,y+h-r,r,r2d*90,r2d*180,false); - this.lineTo(x,y+r); - this.arc(x+r,y+r,r,r2d*180,r2d*270,false); + var minimumTreeSize = 1e-5; + var rootSize = Math.max(minimumTreeSize,Math.abs(maxX - minX)); + var halfRootSize = 0.5 * rootSize; + var centerX = 0.5 * (minX + maxX), centerY = 0.5 * (minY + maxY); + + // construct the barnesHutTree + var barnesHutTree = { + root:{ + centerOfMass: {x:0, y:0}, + mass:0, + range: { + minX: centerX-halfRootSize,maxX:centerX+halfRootSize, + minY: centerY-halfRootSize,maxY:centerY+halfRootSize + }, + size: rootSize, + calcSize: 1 / rootSize, + children: { data:null}, + maxWidth: 0, + level: 0, + childrenCount: 4 + } }; + this._splitBranch(barnesHutTree.root); - /** - * http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas - */ - CanvasRenderingContext2D.prototype.ellipse = function(x, y, w, h) { - var kappa = .5522848, - ox = (w / 2) * kappa, // control point offset horizontal - oy = (h / 2) * kappa, // control point offset vertical - xe = x + w, // x-end - ye = y + h, // y-end - xm = x + w / 2, // x-middle - ym = y + h / 2; // y-middle + // place the nodes one by one recursively + for (i = 0; i < nodeCount; i++) { + node = nodes[nodeIndices[i]]; + if (node.options.mass > 0) { + this._placeInTree(barnesHutTree.root,node); + } + } - this.beginPath(); - this.moveTo(x, ym); - this.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y); - this.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym); - this.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye); - this.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym); - }; + // make global + this.barnesHutTree = barnesHutTree + }; + /** + * this updates the mass of a branch. this is increased by adding a node. + * + * @param parentBranch + * @param node + * @private + */ + exports._updateBranchMass = function(parentBranch, node) { + var totalMass = parentBranch.mass + node.options.mass; + var totalMassInv = 1/totalMass; - /** - * http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas - */ - CanvasRenderingContext2D.prototype.database = function(x, y, w, h) { - var f = 1/3; - var wEllipse = w; - var hEllipse = h * f; + parentBranch.centerOfMass.x = parentBranch.centerOfMass.x * parentBranch.mass + node.x * node.options.mass; + parentBranch.centerOfMass.x *= totalMassInv; - var kappa = .5522848, - ox = (wEllipse / 2) * kappa, // control point offset horizontal - oy = (hEllipse / 2) * kappa, // control point offset vertical - xe = x + wEllipse, // x-end - ye = y + hEllipse, // y-end - xm = x + wEllipse / 2, // x-middle - ym = y + hEllipse / 2, // y-middle - ymb = y + (h - hEllipse/2), // y-midlle, bottom ellipse - yeb = y + h; // y-end, bottom ellipse + parentBranch.centerOfMass.y = parentBranch.centerOfMass.y * parentBranch.mass + node.y * node.options.mass; + parentBranch.centerOfMass.y *= totalMassInv; - this.beginPath(); - this.moveTo(xe, ym); + parentBranch.mass = totalMass; + var biggestSize = Math.max(Math.max(node.height,node.radius),node.width); + parentBranch.maxWidth = (parentBranch.maxWidth < biggestSize) ? biggestSize : parentBranch.maxWidth; - this.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye); - this.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym); + }; - this.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y); - this.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym); - this.lineTo(xe, ymb); + /** + * determine in which branch the node will be placed. + * + * @param parentBranch + * @param node + * @param skipMassUpdate + * @private + */ + exports._placeInTree = function(parentBranch,node,skipMassUpdate) { + if (skipMassUpdate != true || skipMassUpdate === undefined) { + // update the mass of the branch. + this._updateBranchMass(parentBranch,node); + } - this.bezierCurveTo(xe, ymb + oy, xm + ox, yeb, xm, yeb); - this.bezierCurveTo(xm - ox, yeb, x, ymb + oy, x, ymb); + if (parentBranch.children.NW.range.maxX > node.x) { // in NW or SW + if (parentBranch.children.NW.range.maxY > node.y) { // in NW + this._placeInRegion(parentBranch,node,"NW"); + } + else { // in SW + this._placeInRegion(parentBranch,node,"SW"); + } + } + else { // in NE or SE + if (parentBranch.children.NW.range.maxY > node.y) { // in NE + this._placeInRegion(parentBranch,node,"NE"); + } + else { // in SE + this._placeInRegion(parentBranch,node,"SE"); + } + } + }; - this.lineTo(x, ym); - }; + + /** + * actually place the node in a region (or branch) + * + * @param parentBranch + * @param node + * @param region + * @private + */ + exports._placeInRegion = function(parentBranch,node,region) { + switch (parentBranch.children[region].childrenCount) { + case 0: // place node here + parentBranch.children[region].children.data = node; + parentBranch.children[region].childrenCount = 1; + this._updateBranchMass(parentBranch.children[region],node); + break; + case 1: // convert into children + // if there are two nodes exactly overlapping (on init, on opening of cluster etc.) + // we move one node a pixel and we do not put it in the tree. + if (parentBranch.children[region].children.data.x == node.x && + parentBranch.children[region].children.data.y == node.y) { + node.x += Math.random(); + node.y += Math.random(); + } + else { + this._splitBranch(parentBranch.children[region]); + this._placeInTree(parentBranch.children[region],node); + } + break; + case 4: // place in branch + this._placeInTree(parentBranch.children[region],node); + break; + } + }; - /** - * Draw an arrow point (no line) - */ - CanvasRenderingContext2D.prototype.arrow = function(x, y, angle, length) { - // tail - var xt = x - length * Math.cos(angle); - var yt = y - length * Math.sin(angle); + /** + * this function splits a branch into 4 sub branches. If the branch contained a node, we place it in the subbranch + * after the split is complete. + * + * @param parentBranch + * @private + */ + exports._splitBranch = function(parentBranch) { + // if the branch is shaded with a node, replace the node in the new subset. + var containedNode = null; + if (parentBranch.childrenCount == 1) { + containedNode = parentBranch.children.data; + parentBranch.mass = 0; parentBranch.centerOfMass.x = 0; parentBranch.centerOfMass.y = 0; + } + parentBranch.childrenCount = 4; + parentBranch.children.data = null; + this._insertRegion(parentBranch,"NW"); + this._insertRegion(parentBranch,"NE"); + this._insertRegion(parentBranch,"SW"); + this._insertRegion(parentBranch,"SE"); - // inner tail - // TODO: allow to customize different shapes - var xi = x - length * 0.9 * Math.cos(angle); - var yi = y - length * 0.9 * Math.sin(angle); + if (containedNode != null) { + this._placeInTree(parentBranch,containedNode); + } + }; - // left - var xl = xt + length / 3 * Math.cos(angle + 0.5 * Math.PI); - var yl = yt + length / 3 * Math.sin(angle + 0.5 * Math.PI); - // right - var xr = xt + length / 3 * Math.cos(angle - 0.5 * Math.PI); - var yr = yt + length / 3 * Math.sin(angle - 0.5 * Math.PI); + /** + * This function subdivides the region into four new segments. + * Specifically, this inserts a single new segment. + * It fills the children section of the parentBranch + * + * @param parentBranch + * @param region + * @param parentRange + * @private + */ + exports._insertRegion = function(parentBranch, region) { + var minX,maxX,minY,maxY; + var childSize = 0.5 * parentBranch.size; + switch (region) { + case "NW": + minX = parentBranch.range.minX; + maxX = parentBranch.range.minX + childSize; + minY = parentBranch.range.minY; + maxY = parentBranch.range.minY + childSize; + break; + case "NE": + minX = parentBranch.range.minX + childSize; + maxX = parentBranch.range.maxX; + minY = parentBranch.range.minY; + maxY = parentBranch.range.minY + childSize; + break; + case "SW": + minX = parentBranch.range.minX; + maxX = parentBranch.range.minX + childSize; + minY = parentBranch.range.minY + childSize; + maxY = parentBranch.range.maxY; + break; + case "SE": + minX = parentBranch.range.minX + childSize; + maxX = parentBranch.range.maxX; + minY = parentBranch.range.minY + childSize; + maxY = parentBranch.range.maxY; + break; + } - this.beginPath(); - this.moveTo(x, y); - this.lineTo(xl, yl); - this.lineTo(xi, yi); - this.lineTo(xr, yr); - this.closePath(); - }; - /** - * Sets up the dashedLine functionality for drawing - * Original code came from http://stackoverflow.com/questions/4576724/dotted-stroke-in-canvas - * @author David Jordan - * @date 2012-08-08 - */ - CanvasRenderingContext2D.prototype.dashedLine = function(x,y,x2,y2,dashArray){ - if (!dashArray) dashArray=[10,5]; - if (dashLength==0) dashLength = 0.001; // Hack for Safari - var dashCount = dashArray.length; - this.moveTo(x, y); - var dx = (x2-x), dy = (y2-y); - var slope = dy/dx; - var distRemaining = Math.sqrt( dx*dx + dy*dy ); - var dashIndex=0, draw=true; - while (distRemaining>=0.1){ - var dashLength = dashArray[dashIndex++%dashCount]; - if (dashLength > distRemaining) dashLength = distRemaining; - var xStep = Math.sqrt( dashLength*dashLength / (1 + slope*slope) ); - if (dx<0) xStep = -xStep; - x += xStep; - y += slope*xStep; - this[draw ? 'lineTo' : 'moveTo'](x,y); - distRemaining -= dashLength; - draw = !draw; - } + parentBranch.children[region] = { + centerOfMass:{x:0,y:0}, + mass:0, + range:{minX:minX,maxX:maxX,minY:minY,maxY:maxY}, + size: 0.5 * parentBranch.size, + calcSize: 2 * parentBranch.calcSize, + children: {data:null}, + maxWidth: 0, + level: parentBranch.level+1, + childrenCount: 0 }; + }; - // TODO: add diamond shape - } + + /** + * This function is for debugging purposed, it draws the tree. + * + * @param ctx + * @param color + * @private + */ + exports._drawTree = function(ctx,color) { + if (this.barnesHutTree !== undefined) { + + ctx.lineWidth = 1; + + this._drawBranch(this.barnesHutTree.root,ctx,color); + } + }; + + + /** + * This function is for debugging purposes. It draws the branches recursively. + * + * @param branch + * @param ctx + * @param color + * @private + */ + exports._drawBranch = function(branch,ctx,color) { + if (color === undefined) { + color = "#FF0000"; + } + + if (branch.childrenCount == 4) { + this._drawBranch(branch.children.NW,ctx); + this._drawBranch(branch.children.NE,ctx); + this._drawBranch(branch.children.SE,ctx); + this._drawBranch(branch.children.SW,ctx); + } + ctx.strokeStyle = color; + ctx.beginPath(); + ctx.moveTo(branch.range.minX,branch.range.minY); + ctx.lineTo(branch.range.maxX,branch.range.minY); + ctx.stroke(); + + ctx.beginPath(); + ctx.moveTo(branch.range.maxX,branch.range.minY); + ctx.lineTo(branch.range.maxX,branch.range.maxY); + ctx.stroke(); + + ctx.beginPath(); + ctx.moveTo(branch.range.maxX,branch.range.maxY); + ctx.lineTo(branch.range.minX,branch.range.maxY); + ctx.stroke(); + + ctx.beginPath(); + ctx.moveTo(branch.range.minX,branch.range.maxY); + ctx.lineTo(branch.range.minX,branch.range.minY); + ctx.stroke(); + + /* + if (branch.mass > 0) { + ctx.circle(branch.centerOfMass.x, branch.centerOfMass.y, 3*branch.mass); + ctx.stroke(); + } + */ + }; /***/ } diff --git a/docs/network.html b/docs/network.html index 10f9f588..56a70c54 100644 --- a/docs/network.html +++ b/docs/network.html @@ -790,6 +790,14 @@ var options = { before showing the result. If your simulation takes too long to stabilize, this number can be reduced. On the other hand, if your network is not stabilized after loading, this number can be increased. + + + zoomExtentOnStabilize + Boolean + true + When the internal stabilize function is called because the stabilize option is set to true OR the hierarchical system (re)initializes, a call to zoomExtent is done by default. By setting this to false, you can avoid this call. + + width String diff --git a/examples/network/17_network_info.html b/examples/network/17_network_info.html index 1619d4e3..017bcd76 100644 --- a/examples/network/17_network_info.html +++ b/examples/network/17_network_info.html @@ -4,16 +4,17 @@ Network | Images diff --git a/lib/network/Network.js b/lib/network/Network.js index c22afaec..e338578e 100644 --- a/lib/network/Network.js +++ b/lib/network/Network.js @@ -191,6 +191,7 @@ function Network (container, data, options) { minVelocity: 0.1, // px/s stabilize: true, // stabilize before displaying the network stabilizationIterations: 1000, // maximum number of iteration to stabilize + zoomExtentOnStabilize: true, locale: 'en', locales: locales, tooltip: { @@ -1993,7 +1994,11 @@ Network.prototype._stabilize = function() { this._physicsTick(); count++; } - this.zoomExtent(undefined,false,true); + + if (this.constants.zoomExtentOnStabilize == true) { + this.zoomExtent(undefined, false, true); + } + if (this.constants.freezeForStabilization == true) { this._restoreFrozenNodes(); } From cf55b328a04935a97bc0c7700b0bcdb264d69850 Mon Sep 17 00:00:00 2001 From: Alex de Mulder Date: Wed, 24 Dec 2014 14:26:38 +0100 Subject: [PATCH 18/20] changed title of example --- examples/network/32_hierarchicaLayoutMethods.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/network/32_hierarchicaLayoutMethods.html b/examples/network/32_hierarchicaLayoutMethods.html index d523a56e..16c843ca 100644 --- a/examples/network/32_hierarchicaLayoutMethods.html +++ b/examples/network/32_hierarchicaLayoutMethods.html @@ -113,7 +113,7 @@ -

Hierarchical Layout - User-defined

+

Hierarchical layout difference

This example shows a the effect of the different hierarchical layout methods. Hubsize is based on the amount of edges connected to a node. The node with the most connections (the largest hub) is drawn at the top of the tree. The direction method is based on the direction of the edges. From 1faeb76759e1c7b3a27cec117a946a6ca6dbefce Mon Sep 17 00:00:00 2001 From: Alex de Mulder Date: Wed, 24 Dec 2014 17:11:34 +0100 Subject: [PATCH 19/20] added v2 of website (in alpha stage) --- www2/css/bootstrap-theme.css | 470 + www2/css/bootstrap-theme.css.map | 1 + www2/css/bootstrap-theme.min.css | 5 + www2/css/bootstrap.css | 6332 +++ www2/css/bootstrap.css.map | 1 + www2/css/bootstrap.min.css | 5 + www2/css/carousel.css | 144 + www2/css/prettify.css | 87 + www2/dist/img/network/acceptDeleteIcon.png | Bin 0 -> 20675 bytes www2/dist/img/network/addNodeIcon.png | Bin 0 -> 20998 bytes www2/dist/img/network/backIcon.png | Bin 0 -> 20802 bytes www2/dist/img/network/connectIcon.png | Bin 0 -> 20764 bytes www2/dist/img/network/cross.png | Bin 0 -> 18303 bytes www2/dist/img/network/cross2.png | Bin 0 -> 17768 bytes www2/dist/img/network/deleteIcon.png | Bin 0 -> 20981 bytes www2/dist/img/network/downArrow.png | Bin 0 -> 4460 bytes www2/dist/img/network/editIcon.png | Bin 0 -> 21016 bytes www2/dist/img/network/leftArrow.png | Bin 0 -> 4531 bytes www2/dist/img/network/minus.png | Bin 0 -> 4147 bytes www2/dist/img/network/plus.png | Bin 0 -> 4341 bytes www2/dist/img/network/rightArrow.png | Bin 0 -> 4514 bytes www2/dist/img/network/upArrow.png | Bin 0 -> 4461 bytes www2/dist/img/network/zoomExtends.png | Bin 0 -> 4464 bytes www2/dist/img/timeline/delete.png | Bin 0 -> 665 bytes www2/dist/vis.css | 795 + www2/dist/vis.js | 34028 ++++++++++++++++ www2/dist/vis.map | 1 + www2/dist/vis.min.css | 1 + www2/dist/vis.min.js | 39 + www2/docs/css/prettify.css | 87 + www2/docs/css/style.css | 83 + www2/docs/dataset.html | 931 + www2/docs/dataview.html | 219 + www2/docs/graph2d.html | 1115 + www2/docs/graph3d.html | 673 + www2/docs/img/graph/graph.png | Bin 0 -> 23400 bytes www2/docs/img/graph/graph120x60.png | Bin 0 -> 4678 bytes www2/docs/img/graph3d.png | Bin 0 -> 101584 bytes www2/docs/img/graph3d120x60.png | Bin 0 -> 9904 bytes www2/docs/img/timeline/timeline.png | Bin 0 -> 23229 bytes www2/docs/img/timeline/timeline120x60.png | Bin 0 -> 6671 bytes www2/docs/img/vis_overview.odg | Bin 0 -> 16920 bytes www2/docs/img/vis_overview.png | Bin 0 -> 66220 bytes www2/docs/index.html | 225 + www2/docs/lib/prettify/lang-apollo.js | 2 + www2/docs/lib/prettify/lang-css.js | 2 + www2/docs/lib/prettify/lang-hs.js | 2 + www2/docs/lib/prettify/lang-lisp.js | 2 + www2/docs/lib/prettify/lang-lua.js | 2 + www2/docs/lib/prettify/lang-ml.js | 2 + www2/docs/lib/prettify/lang-proto.js | 1 + www2/docs/lib/prettify/lang-scala.js | 2 + www2/docs/lib/prettify/lang-sql.js | 2 + www2/docs/lib/prettify/lang-vb.js | 2 + www2/docs/lib/prettify/lang-vhdl.js | 3 + www2/docs/lib/prettify/lang-wiki.js | 2 + www2/docs/lib/prettify/lang-yaml.js | 2 + www2/docs/lib/prettify/prettify.css | 1 + www2/docs/lib/prettify/prettify.js | 33 + www2/docs/network.html | 2508 ++ www2/docs/timeline.html | 1355 + www2/examples/graph2d/01_basic.html | 52 + www2/examples/graph2d/02_bars.html | 57 + www2/examples/graph2d/03_groups.html | 112 + www2/examples/graph2d/04_rightAxis.html | 126 + www2/examples/graph2d/05_bothAxis.html | 138 + www2/examples/graph2d/06_interpolation.html | 101 + .../graph2d/07_scrollingAndSorting.html | 74 + www2/examples/graph2d/08_performance.html | 150 + www2/examples/graph2d/09_external_legend.html | 367 + www2/examples/graph2d/10_barsSideBySide.html | 74 + .../graph2d/11_barsSideBySideGroups.html | 87 + www2/examples/graph2d/12_customRange.html | 96 + www2/examples/graph2d/13_localization.html | 65 + www2/examples/graph2d/14_toggleGroups.html | 145 + www2/examples/graph2d/15_streaming_data.html | 122 + www2/examples/graph2d/16_bothAxis_titles.html | 215 + www2/examples/graph2d/17_dynamicStyling.html | 256 + www2/examples/graph2d/18_scatterplot.html | 63 + www2/examples/graph2d/default.css | 87 + www2/examples/graph2d/index.html | 31 + www2/examples/graph3d/default.css | 87 + www2/examples/graph3d/example01_basis.html | 60 + www2/examples/graph3d/example02_camera.html | 109 + www2/examples/graph3d/example03_filter.html | 63 + www2/examples/graph3d/example04_animate.html | 70 + www2/examples/graph3d/example05_line.html | 59 + .../graph3d/example06_moving_dots.html | 77 + .../graph3d/example07_dot_cloud_colors.html | 67 + .../graph3d/example08_dot_cloud_size.html | 67 + www2/examples/graph3d/example09_mobile.html | 78 + www2/examples/graph3d/example10_styles.html | 120 + www2/examples/graph3d/example11_tooltips.html | 103 + www2/examples/graph3d/example12_ticks.html | 115 + www2/examples/graph3d/index.html | 28 + www2/examples/graph3d/playground/csv2array.js | 120 + .../graph3d/playground/csv2datatable.html | 80 + .../graph3d/playground/datasource.html | 173 + .../graph3d/playground/datasource.php | 155 + www2/examples/graph3d/playground/index.html | 179 + .../graph3d/playground/playground.css | 91 + .../examples/graph3d/playground/playground.js | 544 + .../playground/prettify/lang-apollo.js | 2 + .../graph3d/playground/prettify/lang-css.js | 2 + .../graph3d/playground/prettify/lang-hs.js | 2 + .../graph3d/playground/prettify/lang-lisp.js | 2 + .../graph3d/playground/prettify/lang-lua.js | 2 + .../graph3d/playground/prettify/lang-ml.js | 2 + .../graph3d/playground/prettify/lang-proto.js | 1 + .../graph3d/playground/prettify/lang-scala.js | 2 + .../graph3d/playground/prettify/lang-sql.js | 2 + .../graph3d/playground/prettify/lang-vb.js | 2 + .../graph3d/playground/prettify/lang-vhdl.js | 3 + .../graph3d/playground/prettify/lang-wiki.js | 2 + .../graph3d/playground/prettify/lang-yaml.js | 2 + .../graph3d/playground/prettify/prettify.css | 1 + .../graph3d/playground/prettify/prettify.js | 33 + www2/examples/index.html | 22 + www2/examples/network/01_basic_usage.html | 51 + www2/examples/network/02_random_nodes.html | 111 + www2/examples/network/03_images.html | 84 + www2/examples/network/04_shapes.html | 77 + www2/examples/network/05_social_network.html | 79 + www2/examples/network/06_groups.html | 156 + www2/examples/network/07_selections.html | 64 + www2/examples/network/08_mobile_friendly.html | 109 + www2/examples/network/09_sizing.html | 81 + www2/examples/network/10_multiline_text.html | 51 + www2/examples/network/11_custom_style.html | 132 + www2/examples/network/12_scalable_images.html | 86 + www2/examples/network/13_dashed_lines.html | 64 + www2/examples/network/14_dot_language.html | 19 + .../network/15_dot_language_playground.html | 203 + www2/examples/network/16_dynamic_data.html | 266 + www2/examples/network/17_network_info.html | 157 + .../18_fully_random_nodes_clustering.html | 101 + .../19_scale_free_graph_clustering.html | 128 + www2/examples/network/20_navigation.html | 168 + .../network/21_data_manipulation.html | 221 + www2/examples/network/22_les_miserables.html | 374 + .../network/23_hierarchical_layout.html | 147 + .../24_hierarchical_layout_userdefined.html | 173 + .../network/25_physics_configuration.html | 109 + .../network/26_staticSmoothCurves.html | 76 + .../network/27_world_cup_network.html | 10109 +++++ .../28_world_cup_network_performance.html | 10053 +++++ .../network/29_neighbourhood_highlight.html | 10213 +++++ .../network/30_importing_from_gephi.html | 166 + www2/examples/network/31_localization.html | 231 + .../network/32_hierarchicaLayoutMethods.html | 140 + www2/examples/network/33_animation.html | 319 + www2/examples/network/data/WorldCup2014.json | 1 + .../examples/network/graphviz/data/fsm.gv.txt | 20 + .../network/graphviz/data/hello.gv.txt | 1 + .../network/graphviz/data/process.gv.txt | 15 + .../network/graphviz/data/siblings.gv.txt | 512 + .../network/graphviz/data/softmaint.gv.txt | 377 + .../graphviz/data/traffic_lights.gv.txt | 29 + .../network/graphviz/data/transparency.gv.txt | 105 + .../network/graphviz/data/twopi2.gv.txt | 2212 + .../network/graphviz/data/unix.gv.txt | 55 + .../network/graphviz/data/world.gv.txt | 67 + .../network/graphviz/graphviz_gallery.html | 86 + .../network/graphviz/screenshots/fsm.png | Bin 0 -> 70809 bytes .../network/graphviz/screenshots/hello.png | Bin 0 -> 18000 bytes .../graphviz/screenshots/softmaint.png | Bin 0 -> 267856 bytes .../graphviz/screenshots/traffic_lights.png | Bin 0 -> 59829 bytes .../img/refresh-cl/Hardware-Fax-icon.png | Bin 0 -> 3645 bytes .../img/refresh-cl/Hardware-Laptop-1-icon.png | Bin 0 -> 3781 bytes .../refresh-cl/Hardware-Mobile-Phone-icon.png | Bin 0 -> 3463 bytes .../Hardware-My-Computer-3-icon.png | Bin 0 -> 5402 bytes .../refresh-cl/Hardware-My-PDA-02-icon.png | Bin 0 -> 3531 bytes .../refresh-cl/Hardware-My-PDA-04-icon.png | Bin 0 -> 4153 bytes .../refresh-cl/Hardware-My-PDA-05-icon.png | Bin 0 -> 4131 bytes .../Hardware-My-Phone-Picture-icon.png | Bin 0 -> 3234 bytes .../refresh-cl/Hardware-Printer-Blue-icon.png | Bin 0 -> 3478 bytes .../refresh-cl/Misc-Scanner-default-icon.png | Bin 0 -> 3168 bytes .../img/refresh-cl/Network-Drive-icon.png | Bin 0 -> 3320 bytes .../Network-Internet-Connection-icon.png | Bin 0 -> 4320 bytes .../img/refresh-cl/Network-Pipe-icon.png | Bin 0 -> 1000 bytes .../img/refresh-cl/System-Firewall-2-icon.png | Bin 0 -> 4668 bytes .../img/refresh-cl/System-Globe-icon.png | Bin 0 -> 4595 bytes .../network/img/refresh-cl/license.txt | 14 + .../img/soft-scraps-icons/Document-icon24.png | Bin 0 -> 1104 bytes .../img/soft-scraps-icons/Document-icon32.png | Bin 0 -> 2771 bytes .../img/soft-scraps-icons/Document-icon48.png | Bin 0 -> 2771 bytes .../img/soft-scraps-icons/Email-icon24.png | Bin 0 -> 668 bytes .../img/soft-scraps-icons/Email-icon32.png | Bin 0 -> 873 bytes .../img/soft-scraps-icons/Email-icon48.png | Bin 0 -> 1487 bytes .../img/soft-scraps-icons/Folder-icon24.png | Bin 0 -> 691 bytes .../img/soft-scraps-icons/Folder-icon32.png | Bin 0 -> 874 bytes .../img/soft-scraps-icons/Folder-icon48.png | Bin 0 -> 1506 bytes .../img/soft-scraps-icons/Folder-icon64.png | Bin 0 -> 1771 bytes .../soft-scraps-icons/Smiley-Angry-icon.png | Bin 0 -> 3210 bytes .../soft-scraps-icons/Smiley-Grin-icon.png | Bin 0 -> 3917 bytes .../User-Administrator-Blue-icon.png | Bin 0 -> 3901 bytes .../User-Administrator-Green-icon.png | Bin 0 -> 3906 bytes .../soft-scraps-icons/User-Coat-Blue-icon.png | Bin 0 -> 3559 bytes .../User-Coat-Green-icon.png | Bin 0 -> 3571 bytes .../soft-scraps-icons/User-Coat-Red-icon.png | Bin 0 -> 3544 bytes .../User-Executive-Green-icon.png | Bin 0 -> 3805 bytes .../User-Preppy-Blue-icon.png | Bin 0 -> 3802 bytes .../User-Preppy-Red-icon.png | Bin 0 -> 3800 bytes .../network/img/soft-scraps-icons/license.txt | 12 + www2/examples/network/index.html | 52 + www2/examples/timeline/01_basic.html | 39 + www2/examples/timeline/02_interactive.html | 67 + www2/examples/timeline/03_performance.html | 64 + www2/examples/timeline/04_html_data.html | 74 + www2/examples/timeline/05_groups.html | 73 + .../examples/timeline/06_event_listeners.html | 60 + .../examples/timeline/07_custom_time_bar.html | 65 + www2/examples/timeline/08_edit_items.html | 106 + www2/examples/timeline/09_order_groups.html | 67 + .../timeline/10_limit_move_and_zoom.html | 52 + www2/examples/timeline/11_points.html | 59 + www2/examples/timeline/12_custom_styling.html | 92 + .../examples/timeline/13_past_and_future.html | 88 + .../timeline/14_group_performance.html | 109 + .../timeline/15_item_class_names.html | 116 + .../examples/timeline/16_navigation_menu.html | 88 + .../timeline/17_data_serialization.html | 120 + www2/examples/timeline/18_range_overflow.html | 53 + www2/examples/timeline/19_localization.html | 65 + www2/examples/timeline/20_click_to_use.html | 72 + www2/examples/timeline/21_set_selection.html | 65 + .../timeline/22_window_adjustment.html | 94 + .../examples/timeline/23_data_attributes.html | 43 + .../timeline/24_all_data_attributes.html | 43 + .../timeline/25_background_areas.html | 52 + www2/examples/timeline/26_external_data.html | 58 + www2/examples/timeline/27_templates.html | 250 + www2/examples/timeline/29_hiding_times.html | 50 + www2/examples/timeline/30_subgroups.html | 75 + .../31_background_areas_with_groups.html | 56 + www2/examples/timeline/data/basic.json | 34 + www2/examples/timeline/data/wk2014.json | 152 + .../img/Hardware-Mobile-Phone-icon.png | Bin 0 -> 3463 bytes .../examples/timeline/img/attachment-icon.png | Bin 0 -> 2774 bytes .../timeline/img/blog-post-edit-icon.png | Bin 0 -> 4225 bytes www2/examples/timeline/img/comments-icon.png | Bin 0 -> 3173 bytes .../timeline/img/community-users-icon.png | Bin 0 -> 4664 bytes www2/examples/timeline/img/license.txt | 17 + .../timeline/img/license_aesthetica-2.txt | 36 + .../timeline/img/license_refresh-cl.txt | 26 + www2/examples/timeline/img/mail-icon.png | Bin 0 -> 3298 bytes .../examples/timeline/img/notes-edit-icon.png | Bin 0 -> 2913 bytes www2/examples/timeline/img/product-icon.png | Bin 0 -> 1594 bytes www2/examples/timeline/img/truck-icon.png | Bin 0 -> 1703 bytes www2/examples/timeline/index.html | 50 + .../timeline/requirejs/requirejs_example.html | 13 + .../timeline/requirejs/scripts/main.js | 19 + .../timeline/requirejs/scripts/require.js | 35 + www2/featureRequests.html | 44 + www2/fonts/glyphicons-halflings-regular.eot | Bin 0 -> 20335 bytes www2/fonts/glyphicons-halflings-regular.svg | 229 + www2/fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 41280 bytes www2/fonts/glyphicons-halflings-regular.woff | Bin 0 -> 23320 bytes www2/graph2d_examples.html | 235 + www2/graph3d_examples.html | 229 + .../external-link-icon-white.png | Bin 0 -> 194 bytes .../external-link-icon.png | Bin 0 -> 205 bytes www2/images/external-link-icons/license.txt | 40 + www2/images/feature_requests.png | Bin 0 -> 110075 bytes www2/images/forkme_right_darkblue_121621.png | Bin 0 -> 7791 bytes www2/images/gallery/network/1.png | Bin 0 -> 29984 bytes www2/images/gallery/network/10.png | Bin 0 -> 43635 bytes www2/images/gallery/network/11.png | Bin 0 -> 58479 bytes www2/images/gallery/network/12.png | Bin 0 -> 90958 bytes www2/images/gallery/network/13.png | Bin 0 -> 37859 bytes www2/images/gallery/network/14.png | Bin 0 -> 27506 bytes www2/images/gallery/network/15.png | Bin 0 -> 38337 bytes www2/images/gallery/network/16.png | Bin 0 -> 41726 bytes www2/images/gallery/network/17.png | Bin 0 -> 39087 bytes www2/images/gallery/network/18.png | Bin 0 -> 37472 bytes www2/images/gallery/network/19.png | Bin 0 -> 40471 bytes www2/images/gallery/network/2.png | Bin 0 -> 32126 bytes www2/images/gallery/network/20.png | Bin 0 -> 37446 bytes www2/images/gallery/network/21.png | Bin 0 -> 43102 bytes www2/images/gallery/network/22.png | Bin 0 -> 53711 bytes www2/images/gallery/network/23.png | Bin 0 -> 28396 bytes www2/images/gallery/network/24.png | Bin 0 -> 29894 bytes www2/images/gallery/network/25.png | Bin 0 -> 50417 bytes www2/images/gallery/network/26.png | Bin 0 -> 31084 bytes www2/images/gallery/network/27.png | Bin 0 -> 83848 bytes www2/images/gallery/network/28.png | Bin 0 -> 90445 bytes www2/images/gallery/network/29.png | Bin 0 -> 99390 bytes www2/images/gallery/network/3.png | Bin 0 -> 36906 bytes www2/images/gallery/network/30.png | Bin 0 -> 119118 bytes www2/images/gallery/network/31.png | Bin 0 -> 38029 bytes www2/images/gallery/network/32.png | Bin 0 -> 34522 bytes www2/images/gallery/network/33.png | Bin 0 -> 48432 bytes www2/images/gallery/network/4.png | Bin 0 -> 33587 bytes www2/images/gallery/network/5.png | Bin 0 -> 38571 bytes www2/images/gallery/network/6.png | Bin 0 -> 29853 bytes www2/images/gallery/network/7.png | Bin 0 -> 27759 bytes www2/images/gallery/network/8.png | Bin 0 -> 66857 bytes www2/images/gallery/network/9.png | Bin 0 -> 44483 bytes www2/images/gallery/network/graphviz.png | Bin 0 -> 37573 bytes www2/images/gallery/timeline/1.png | Bin 0 -> 23695 bytes www2/images/gallery/timeline/10.png | Bin 0 -> 24378 bytes www2/images/gallery/timeline/11.png | Bin 0 -> 40748 bytes www2/images/gallery/timeline/12.png | Bin 0 -> 31327 bytes www2/images/gallery/timeline/13.png | Bin 0 -> 28385 bytes www2/images/gallery/timeline/14.png | Bin 0 -> 41478 bytes www2/images/gallery/timeline/15.png | Bin 0 -> 29027 bytes www2/images/gallery/timeline/16.png | Bin 0 -> 30570 bytes www2/images/gallery/timeline/17.png | Bin 0 -> 28444 bytes www2/images/gallery/timeline/18.png | Bin 0 -> 35016 bytes www2/images/gallery/timeline/19.png | Bin 0 -> 28701 bytes www2/images/gallery/timeline/2.png | Bin 0 -> 27189 bytes www2/images/gallery/timeline/20.png | Bin 0 -> 32328 bytes www2/images/gallery/timeline/21.png | Bin 0 -> 29393 bytes www2/images/gallery/timeline/22.png | Bin 0 -> 51104 bytes www2/images/gallery/timeline/23.png | Bin 0 -> 35906 bytes www2/images/gallery/timeline/24.png | Bin 0 -> 35285 bytes www2/images/gallery/timeline/25.png | Bin 0 -> 32272 bytes www2/images/gallery/timeline/26.png | Bin 0 -> 36032 bytes www2/images/gallery/timeline/27.png | Bin 0 -> 41459 bytes www2/images/gallery/timeline/28.png | Bin 0 -> 31222 bytes www2/images/gallery/timeline/29.png | Bin 0 -> 28793 bytes www2/images/gallery/timeline/3.png | Bin 0 -> 56799 bytes www2/images/gallery/timeline/30.png | Bin 0 -> 31774 bytes www2/images/gallery/timeline/31.png | Bin 0 -> 33141 bytes www2/images/gallery/timeline/4.png | Bin 0 -> 30636 bytes www2/images/gallery/timeline/5.png | Bin 0 -> 34948 bytes www2/images/gallery/timeline/6.png | Bin 0 -> 36175 bytes www2/images/gallery/timeline/7.png | Bin 0 -> 40287 bytes www2/images/gallery/timeline/8.png | Bin 0 -> 33718 bytes www2/images/gallery/timeline/9.png | Bin 0 -> 27048 bytes www2/images/graph2d.png | Bin 0 -> 26850 bytes www2/images/graph2dSlideDark.png | Bin 0 -> 82851 bytes www2/images/graph2dSlideLight.png | Bin 0 -> 198813 bytes www2/images/graph3d.png | Bin 0 -> 31749 bytes www2/images/graph3dSlide.png | Bin 0 -> 198131 bytes www2/images/license.png | Bin 0 -> 57696 bytes www2/images/network.png | Bin 0 -> 25307 bytes www2/images/networkSlide.png | Bin 0 -> 115118 bytes www2/images/octocat.png | Bin 0 -> 34335 bytes www2/images/showcase.png | Bin 0 -> 203077 bytes www2/images/timeline.png | Bin 0 -> 38530 bytes www2/images/timelineSlide.png | Bin 0 -> 119357 bytes www2/images/timelineSlideDark.png | Bin 0 -> 95191 bytes www2/images/visjes.png | Bin 0 -> 47654 bytes www2/images/visjes2.png | Bin 0 -> 48179 bytes www2/index.html | 288 + www2/js/bootstrap.js | 2320 ++ www2/js/bootstrap.min.js | 7 + www2/js/docs.min.js | 26 + www2/js/ie-emulation-modes-warning.js | 51 + www2/js/ie10-viewport-bug-workaround.js | 22 + www2/js/jquery.min.js | 4 + www2/js/prettify/lang-apollo.js | 2 + www2/js/prettify/lang-css.js | 2 + www2/js/prettify/lang-hs.js | 2 + www2/js/prettify/lang-lisp.js | 2 + www2/js/prettify/lang-lua.js | 2 + www2/js/prettify/lang-ml.js | 2 + www2/js/prettify/lang-proto.js | 1 + www2/js/prettify/lang-scala.js | 2 + www2/js/prettify/lang-sql.js | 2 + www2/js/prettify/lang-vb.js | 2 + www2/js/prettify/lang-vhdl.js | 3 + www2/js/prettify/lang-wiki.js | 2 + www2/js/prettify/lang-yaml.js | 2 + www2/js/prettify/prettify.css | 1 + www2/js/prettify/prettify.js | 33 + www2/js/vis.js | 34004 +++++++++++++++ www2/network_examples.html | 349 + www2/showcase.html | 47 + www2/timeline_examples.html | 317 + 371 files changed, 133155 insertions(+) create mode 100644 www2/css/bootstrap-theme.css create mode 100644 www2/css/bootstrap-theme.css.map create mode 100644 www2/css/bootstrap-theme.min.css create mode 100644 www2/css/bootstrap.css create mode 100644 www2/css/bootstrap.css.map create mode 100644 www2/css/bootstrap.min.css create mode 100644 www2/css/carousel.css create mode 100644 www2/css/prettify.css create mode 100644 www2/dist/img/network/acceptDeleteIcon.png create mode 100644 www2/dist/img/network/addNodeIcon.png create mode 100644 www2/dist/img/network/backIcon.png create mode 100644 www2/dist/img/network/connectIcon.png create mode 100644 www2/dist/img/network/cross.png create mode 100644 www2/dist/img/network/cross2.png create mode 100644 www2/dist/img/network/deleteIcon.png create mode 100644 www2/dist/img/network/downArrow.png create mode 100644 www2/dist/img/network/editIcon.png create mode 100644 www2/dist/img/network/leftArrow.png create mode 100644 www2/dist/img/network/minus.png create mode 100644 www2/dist/img/network/plus.png create mode 100644 www2/dist/img/network/rightArrow.png create mode 100644 www2/dist/img/network/upArrow.png create mode 100644 www2/dist/img/network/zoomExtends.png create mode 100644 www2/dist/img/timeline/delete.png create mode 100644 www2/dist/vis.css create mode 100644 www2/dist/vis.js create mode 100644 www2/dist/vis.map create mode 100644 www2/dist/vis.min.css create mode 100644 www2/dist/vis.min.js create mode 100644 www2/docs/css/prettify.css create mode 100644 www2/docs/css/style.css create mode 100644 www2/docs/dataset.html create mode 100644 www2/docs/dataview.html create mode 100644 www2/docs/graph2d.html create mode 100644 www2/docs/graph3d.html create mode 100644 www2/docs/img/graph/graph.png create mode 100644 www2/docs/img/graph/graph120x60.png create mode 100644 www2/docs/img/graph3d.png create mode 100644 www2/docs/img/graph3d120x60.png create mode 100644 www2/docs/img/timeline/timeline.png create mode 100644 www2/docs/img/timeline/timeline120x60.png create mode 100644 www2/docs/img/vis_overview.odg create mode 100644 www2/docs/img/vis_overview.png create mode 100644 www2/docs/index.html create mode 100644 www2/docs/lib/prettify/lang-apollo.js create mode 100644 www2/docs/lib/prettify/lang-css.js create mode 100644 www2/docs/lib/prettify/lang-hs.js create mode 100644 www2/docs/lib/prettify/lang-lisp.js create mode 100644 www2/docs/lib/prettify/lang-lua.js create mode 100644 www2/docs/lib/prettify/lang-ml.js create mode 100644 www2/docs/lib/prettify/lang-proto.js create mode 100644 www2/docs/lib/prettify/lang-scala.js create mode 100644 www2/docs/lib/prettify/lang-sql.js create mode 100644 www2/docs/lib/prettify/lang-vb.js create mode 100644 www2/docs/lib/prettify/lang-vhdl.js create mode 100644 www2/docs/lib/prettify/lang-wiki.js create mode 100644 www2/docs/lib/prettify/lang-yaml.js create mode 100644 www2/docs/lib/prettify/prettify.css create mode 100644 www2/docs/lib/prettify/prettify.js create mode 100644 www2/docs/network.html create mode 100644 www2/docs/timeline.html create mode 100644 www2/examples/graph2d/01_basic.html create mode 100644 www2/examples/graph2d/02_bars.html create mode 100644 www2/examples/graph2d/03_groups.html create mode 100644 www2/examples/graph2d/04_rightAxis.html create mode 100644 www2/examples/graph2d/05_bothAxis.html create mode 100644 www2/examples/graph2d/06_interpolation.html create mode 100644 www2/examples/graph2d/07_scrollingAndSorting.html create mode 100644 www2/examples/graph2d/08_performance.html create mode 100644 www2/examples/graph2d/09_external_legend.html create mode 100644 www2/examples/graph2d/10_barsSideBySide.html create mode 100644 www2/examples/graph2d/11_barsSideBySideGroups.html create mode 100644 www2/examples/graph2d/12_customRange.html create mode 100644 www2/examples/graph2d/13_localization.html create mode 100644 www2/examples/graph2d/14_toggleGroups.html create mode 100644 www2/examples/graph2d/15_streaming_data.html create mode 100644 www2/examples/graph2d/16_bothAxis_titles.html create mode 100644 www2/examples/graph2d/17_dynamicStyling.html create mode 100644 www2/examples/graph2d/18_scatterplot.html create mode 100644 www2/examples/graph2d/default.css create mode 100644 www2/examples/graph2d/index.html create mode 100644 www2/examples/graph3d/default.css create mode 100644 www2/examples/graph3d/example01_basis.html create mode 100644 www2/examples/graph3d/example02_camera.html create mode 100644 www2/examples/graph3d/example03_filter.html create mode 100644 www2/examples/graph3d/example04_animate.html create mode 100644 www2/examples/graph3d/example05_line.html create mode 100644 www2/examples/graph3d/example06_moving_dots.html create mode 100644 www2/examples/graph3d/example07_dot_cloud_colors.html create mode 100644 www2/examples/graph3d/example08_dot_cloud_size.html create mode 100644 www2/examples/graph3d/example09_mobile.html create mode 100644 www2/examples/graph3d/example10_styles.html create mode 100644 www2/examples/graph3d/example11_tooltips.html create mode 100644 www2/examples/graph3d/example12_ticks.html create mode 100644 www2/examples/graph3d/index.html create mode 100644 www2/examples/graph3d/playground/csv2array.js create mode 100644 www2/examples/graph3d/playground/csv2datatable.html create mode 100644 www2/examples/graph3d/playground/datasource.html create mode 100644 www2/examples/graph3d/playground/datasource.php create mode 100644 www2/examples/graph3d/playground/index.html create mode 100644 www2/examples/graph3d/playground/playground.css create mode 100644 www2/examples/graph3d/playground/playground.js create mode 100644 www2/examples/graph3d/playground/prettify/lang-apollo.js create mode 100644 www2/examples/graph3d/playground/prettify/lang-css.js create mode 100644 www2/examples/graph3d/playground/prettify/lang-hs.js create mode 100644 www2/examples/graph3d/playground/prettify/lang-lisp.js create mode 100644 www2/examples/graph3d/playground/prettify/lang-lua.js create mode 100644 www2/examples/graph3d/playground/prettify/lang-ml.js create mode 100644 www2/examples/graph3d/playground/prettify/lang-proto.js create mode 100644 www2/examples/graph3d/playground/prettify/lang-scala.js create mode 100644 www2/examples/graph3d/playground/prettify/lang-sql.js create mode 100644 www2/examples/graph3d/playground/prettify/lang-vb.js create mode 100644 www2/examples/graph3d/playground/prettify/lang-vhdl.js create mode 100644 www2/examples/graph3d/playground/prettify/lang-wiki.js create mode 100644 www2/examples/graph3d/playground/prettify/lang-yaml.js create mode 100644 www2/examples/graph3d/playground/prettify/prettify.css create mode 100644 www2/examples/graph3d/playground/prettify/prettify.js create mode 100644 www2/examples/index.html create mode 100644 www2/examples/network/01_basic_usage.html create mode 100644 www2/examples/network/02_random_nodes.html create mode 100644 www2/examples/network/03_images.html create mode 100644 www2/examples/network/04_shapes.html create mode 100644 www2/examples/network/05_social_network.html create mode 100644 www2/examples/network/06_groups.html create mode 100644 www2/examples/network/07_selections.html create mode 100644 www2/examples/network/08_mobile_friendly.html create mode 100644 www2/examples/network/09_sizing.html create mode 100644 www2/examples/network/10_multiline_text.html create mode 100644 www2/examples/network/11_custom_style.html create mode 100644 www2/examples/network/12_scalable_images.html create mode 100644 www2/examples/network/13_dashed_lines.html create mode 100644 www2/examples/network/14_dot_language.html create mode 100644 www2/examples/network/15_dot_language_playground.html create mode 100644 www2/examples/network/16_dynamic_data.html create mode 100644 www2/examples/network/17_network_info.html create mode 100644 www2/examples/network/18_fully_random_nodes_clustering.html create mode 100644 www2/examples/network/19_scale_free_graph_clustering.html create mode 100644 www2/examples/network/20_navigation.html create mode 100644 www2/examples/network/21_data_manipulation.html create mode 100644 www2/examples/network/22_les_miserables.html create mode 100644 www2/examples/network/23_hierarchical_layout.html create mode 100644 www2/examples/network/24_hierarchical_layout_userdefined.html create mode 100644 www2/examples/network/25_physics_configuration.html create mode 100644 www2/examples/network/26_staticSmoothCurves.html create mode 100644 www2/examples/network/27_world_cup_network.html create mode 100644 www2/examples/network/28_world_cup_network_performance.html create mode 100644 www2/examples/network/29_neighbourhood_highlight.html create mode 100644 www2/examples/network/30_importing_from_gephi.html create mode 100644 www2/examples/network/31_localization.html create mode 100644 www2/examples/network/32_hierarchicaLayoutMethods.html create mode 100644 www2/examples/network/33_animation.html create mode 100644 www2/examples/network/data/WorldCup2014.json create mode 100644 www2/examples/network/graphviz/data/fsm.gv.txt create mode 100644 www2/examples/network/graphviz/data/hello.gv.txt create mode 100644 www2/examples/network/graphviz/data/process.gv.txt create mode 100644 www2/examples/network/graphviz/data/siblings.gv.txt create mode 100644 www2/examples/network/graphviz/data/softmaint.gv.txt create mode 100644 www2/examples/network/graphviz/data/traffic_lights.gv.txt create mode 100644 www2/examples/network/graphviz/data/transparency.gv.txt create mode 100644 www2/examples/network/graphviz/data/twopi2.gv.txt create mode 100644 www2/examples/network/graphviz/data/unix.gv.txt create mode 100644 www2/examples/network/graphviz/data/world.gv.txt create mode 100644 www2/examples/network/graphviz/graphviz_gallery.html create mode 100644 www2/examples/network/graphviz/screenshots/fsm.png create mode 100644 www2/examples/network/graphviz/screenshots/hello.png create mode 100644 www2/examples/network/graphviz/screenshots/softmaint.png create mode 100644 www2/examples/network/graphviz/screenshots/traffic_lights.png create mode 100644 www2/examples/network/img/refresh-cl/Hardware-Fax-icon.png create mode 100644 www2/examples/network/img/refresh-cl/Hardware-Laptop-1-icon.png create mode 100644 www2/examples/network/img/refresh-cl/Hardware-Mobile-Phone-icon.png create mode 100644 www2/examples/network/img/refresh-cl/Hardware-My-Computer-3-icon.png create mode 100644 www2/examples/network/img/refresh-cl/Hardware-My-PDA-02-icon.png create mode 100644 www2/examples/network/img/refresh-cl/Hardware-My-PDA-04-icon.png create mode 100644 www2/examples/network/img/refresh-cl/Hardware-My-PDA-05-icon.png create mode 100644 www2/examples/network/img/refresh-cl/Hardware-My-Phone-Picture-icon.png create mode 100644 www2/examples/network/img/refresh-cl/Hardware-Printer-Blue-icon.png create mode 100644 www2/examples/network/img/refresh-cl/Misc-Scanner-default-icon.png create mode 100644 www2/examples/network/img/refresh-cl/Network-Drive-icon.png create mode 100644 www2/examples/network/img/refresh-cl/Network-Internet-Connection-icon.png create mode 100644 www2/examples/network/img/refresh-cl/Network-Pipe-icon.png create mode 100644 www2/examples/network/img/refresh-cl/System-Firewall-2-icon.png create mode 100644 www2/examples/network/img/refresh-cl/System-Globe-icon.png create mode 100644 www2/examples/network/img/refresh-cl/license.txt create mode 100644 www2/examples/network/img/soft-scraps-icons/Document-icon24.png create mode 100644 www2/examples/network/img/soft-scraps-icons/Document-icon32.png create mode 100644 www2/examples/network/img/soft-scraps-icons/Document-icon48.png create mode 100644 www2/examples/network/img/soft-scraps-icons/Email-icon24.png create mode 100644 www2/examples/network/img/soft-scraps-icons/Email-icon32.png create mode 100644 www2/examples/network/img/soft-scraps-icons/Email-icon48.png create mode 100644 www2/examples/network/img/soft-scraps-icons/Folder-icon24.png create mode 100644 www2/examples/network/img/soft-scraps-icons/Folder-icon32.png create mode 100644 www2/examples/network/img/soft-scraps-icons/Folder-icon48.png create mode 100644 www2/examples/network/img/soft-scraps-icons/Folder-icon64.png create mode 100644 www2/examples/network/img/soft-scraps-icons/Smiley-Angry-icon.png create mode 100644 www2/examples/network/img/soft-scraps-icons/Smiley-Grin-icon.png create mode 100644 www2/examples/network/img/soft-scraps-icons/User-Administrator-Blue-icon.png create mode 100644 www2/examples/network/img/soft-scraps-icons/User-Administrator-Green-icon.png create mode 100644 www2/examples/network/img/soft-scraps-icons/User-Coat-Blue-icon.png create mode 100644 www2/examples/network/img/soft-scraps-icons/User-Coat-Green-icon.png create mode 100644 www2/examples/network/img/soft-scraps-icons/User-Coat-Red-icon.png create mode 100644 www2/examples/network/img/soft-scraps-icons/User-Executive-Green-icon.png create mode 100644 www2/examples/network/img/soft-scraps-icons/User-Preppy-Blue-icon.png create mode 100644 www2/examples/network/img/soft-scraps-icons/User-Preppy-Red-icon.png create mode 100644 www2/examples/network/img/soft-scraps-icons/license.txt create mode 100644 www2/examples/network/index.html create mode 100644 www2/examples/timeline/01_basic.html create mode 100644 www2/examples/timeline/02_interactive.html create mode 100644 www2/examples/timeline/03_performance.html create mode 100644 www2/examples/timeline/04_html_data.html create mode 100644 www2/examples/timeline/05_groups.html create mode 100644 www2/examples/timeline/06_event_listeners.html create mode 100644 www2/examples/timeline/07_custom_time_bar.html create mode 100644 www2/examples/timeline/08_edit_items.html create mode 100644 www2/examples/timeline/09_order_groups.html create mode 100644 www2/examples/timeline/10_limit_move_and_zoom.html create mode 100644 www2/examples/timeline/11_points.html create mode 100644 www2/examples/timeline/12_custom_styling.html create mode 100644 www2/examples/timeline/13_past_and_future.html create mode 100644 www2/examples/timeline/14_group_performance.html create mode 100644 www2/examples/timeline/15_item_class_names.html create mode 100644 www2/examples/timeline/16_navigation_menu.html create mode 100644 www2/examples/timeline/17_data_serialization.html create mode 100644 www2/examples/timeline/18_range_overflow.html create mode 100644 www2/examples/timeline/19_localization.html create mode 100644 www2/examples/timeline/20_click_to_use.html create mode 100644 www2/examples/timeline/21_set_selection.html create mode 100644 www2/examples/timeline/22_window_adjustment.html create mode 100644 www2/examples/timeline/23_data_attributes.html create mode 100644 www2/examples/timeline/24_all_data_attributes.html create mode 100644 www2/examples/timeline/25_background_areas.html create mode 100644 www2/examples/timeline/26_external_data.html create mode 100644 www2/examples/timeline/27_templates.html create mode 100644 www2/examples/timeline/29_hiding_times.html create mode 100644 www2/examples/timeline/30_subgroups.html create mode 100644 www2/examples/timeline/31_background_areas_with_groups.html create mode 100644 www2/examples/timeline/data/basic.json create mode 100644 www2/examples/timeline/data/wk2014.json create mode 100644 www2/examples/timeline/img/Hardware-Mobile-Phone-icon.png create mode 100644 www2/examples/timeline/img/attachment-icon.png create mode 100644 www2/examples/timeline/img/blog-post-edit-icon.png create mode 100644 www2/examples/timeline/img/comments-icon.png create mode 100644 www2/examples/timeline/img/community-users-icon.png create mode 100644 www2/examples/timeline/img/license.txt create mode 100644 www2/examples/timeline/img/license_aesthetica-2.txt create mode 100644 www2/examples/timeline/img/license_refresh-cl.txt create mode 100644 www2/examples/timeline/img/mail-icon.png create mode 100644 www2/examples/timeline/img/notes-edit-icon.png create mode 100644 www2/examples/timeline/img/product-icon.png create mode 100644 www2/examples/timeline/img/truck-icon.png create mode 100644 www2/examples/timeline/index.html create mode 100644 www2/examples/timeline/requirejs/requirejs_example.html create mode 100644 www2/examples/timeline/requirejs/scripts/main.js create mode 100644 www2/examples/timeline/requirejs/scripts/require.js create mode 100644 www2/featureRequests.html create mode 100644 www2/fonts/glyphicons-halflings-regular.eot create mode 100644 www2/fonts/glyphicons-halflings-regular.svg create mode 100644 www2/fonts/glyphicons-halflings-regular.ttf create mode 100644 www2/fonts/glyphicons-halflings-regular.woff create mode 100644 www2/graph2d_examples.html create mode 100644 www2/graph3d_examples.html create mode 100644 www2/images/external-link-icons/external-link-icon-white.png create mode 100644 www2/images/external-link-icons/external-link-icon.png create mode 100644 www2/images/external-link-icons/license.txt create mode 100644 www2/images/feature_requests.png create mode 100644 www2/images/forkme_right_darkblue_121621.png create mode 100644 www2/images/gallery/network/1.png create mode 100644 www2/images/gallery/network/10.png create mode 100644 www2/images/gallery/network/11.png create mode 100644 www2/images/gallery/network/12.png create mode 100644 www2/images/gallery/network/13.png create mode 100644 www2/images/gallery/network/14.png create mode 100644 www2/images/gallery/network/15.png create mode 100644 www2/images/gallery/network/16.png create mode 100644 www2/images/gallery/network/17.png create mode 100644 www2/images/gallery/network/18.png create mode 100644 www2/images/gallery/network/19.png create mode 100644 www2/images/gallery/network/2.png create mode 100644 www2/images/gallery/network/20.png create mode 100644 www2/images/gallery/network/21.png create mode 100644 www2/images/gallery/network/22.png create mode 100644 www2/images/gallery/network/23.png create mode 100644 www2/images/gallery/network/24.png create mode 100644 www2/images/gallery/network/25.png create mode 100644 www2/images/gallery/network/26.png create mode 100644 www2/images/gallery/network/27.png create mode 100644 www2/images/gallery/network/28.png create mode 100644 www2/images/gallery/network/29.png create mode 100644 www2/images/gallery/network/3.png create mode 100644 www2/images/gallery/network/30.png create mode 100644 www2/images/gallery/network/31.png create mode 100644 www2/images/gallery/network/32.png create mode 100644 www2/images/gallery/network/33.png create mode 100644 www2/images/gallery/network/4.png create mode 100644 www2/images/gallery/network/5.png create mode 100644 www2/images/gallery/network/6.png create mode 100644 www2/images/gallery/network/7.png create mode 100644 www2/images/gallery/network/8.png create mode 100644 www2/images/gallery/network/9.png create mode 100644 www2/images/gallery/network/graphviz.png create mode 100644 www2/images/gallery/timeline/1.png create mode 100644 www2/images/gallery/timeline/10.png create mode 100644 www2/images/gallery/timeline/11.png create mode 100644 www2/images/gallery/timeline/12.png create mode 100644 www2/images/gallery/timeline/13.png create mode 100644 www2/images/gallery/timeline/14.png create mode 100644 www2/images/gallery/timeline/15.png create mode 100644 www2/images/gallery/timeline/16.png create mode 100644 www2/images/gallery/timeline/17.png create mode 100644 www2/images/gallery/timeline/18.png create mode 100644 www2/images/gallery/timeline/19.png create mode 100644 www2/images/gallery/timeline/2.png create mode 100644 www2/images/gallery/timeline/20.png create mode 100644 www2/images/gallery/timeline/21.png create mode 100644 www2/images/gallery/timeline/22.png create mode 100644 www2/images/gallery/timeline/23.png create mode 100644 www2/images/gallery/timeline/24.png create mode 100644 www2/images/gallery/timeline/25.png create mode 100644 www2/images/gallery/timeline/26.png create mode 100644 www2/images/gallery/timeline/27.png create mode 100644 www2/images/gallery/timeline/28.png create mode 100644 www2/images/gallery/timeline/29.png create mode 100644 www2/images/gallery/timeline/3.png create mode 100644 www2/images/gallery/timeline/30.png create mode 100644 www2/images/gallery/timeline/31.png create mode 100644 www2/images/gallery/timeline/4.png create mode 100644 www2/images/gallery/timeline/5.png create mode 100644 www2/images/gallery/timeline/6.png create mode 100644 www2/images/gallery/timeline/7.png create mode 100644 www2/images/gallery/timeline/8.png create mode 100644 www2/images/gallery/timeline/9.png create mode 100644 www2/images/graph2d.png create mode 100644 www2/images/graph2dSlideDark.png create mode 100644 www2/images/graph2dSlideLight.png create mode 100644 www2/images/graph3d.png create mode 100644 www2/images/graph3dSlide.png create mode 100644 www2/images/license.png create mode 100644 www2/images/network.png create mode 100644 www2/images/networkSlide.png create mode 100644 www2/images/octocat.png create mode 100644 www2/images/showcase.png create mode 100644 www2/images/timeline.png create mode 100644 www2/images/timelineSlide.png create mode 100644 www2/images/timelineSlideDark.png create mode 100644 www2/images/visjes.png create mode 100644 www2/images/visjes2.png create mode 100644 www2/index.html create mode 100644 www2/js/bootstrap.js create mode 100644 www2/js/bootstrap.min.js create mode 100644 www2/js/docs.min.js create mode 100644 www2/js/ie-emulation-modes-warning.js create mode 100644 www2/js/ie10-viewport-bug-workaround.js create mode 100644 www2/js/jquery.min.js create mode 100644 www2/js/prettify/lang-apollo.js create mode 100644 www2/js/prettify/lang-css.js create mode 100644 www2/js/prettify/lang-hs.js create mode 100644 www2/js/prettify/lang-lisp.js create mode 100644 www2/js/prettify/lang-lua.js create mode 100644 www2/js/prettify/lang-ml.js create mode 100644 www2/js/prettify/lang-proto.js create mode 100644 www2/js/prettify/lang-scala.js create mode 100644 www2/js/prettify/lang-sql.js create mode 100644 www2/js/prettify/lang-vb.js create mode 100644 www2/js/prettify/lang-vhdl.js create mode 100644 www2/js/prettify/lang-wiki.js create mode 100644 www2/js/prettify/lang-yaml.js create mode 100644 www2/js/prettify/prettify.css create mode 100644 www2/js/prettify/prettify.js create mode 100644 www2/js/vis.js create mode 100644 www2/network_examples.html create mode 100644 www2/showcase.html create mode 100644 www2/timeline_examples.html diff --git a/www2/css/bootstrap-theme.css b/www2/css/bootstrap-theme.css new file mode 100644 index 00000000..c4cadf15 --- /dev/null +++ b/www2/css/bootstrap-theme.css @@ -0,0 +1,470 @@ +/*! + * Bootstrap v3.3.1 (http://getbootstrap.com) + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +.btn-default, +.btn-primary, +.btn-success, +.btn-info, +.btn-warning, +.btn-danger { + text-shadow: 0 -1px 0 rgba(0, 0, 0, .2); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); +} +.btn-default:active, +.btn-primary:active, +.btn-success:active, +.btn-info:active, +.btn-warning:active, +.btn-danger:active, +.btn-default.active, +.btn-primary.active, +.btn-success.active, +.btn-info.active, +.btn-warning.active, +.btn-danger.active { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} +.btn-default .badge, +.btn-primary .badge, +.btn-success .badge, +.btn-info .badge, +.btn-warning .badge, +.btn-danger .badge { + text-shadow: none; +} +.btn:active, +.btn.active { + background-image: none; +} +.btn-default { + text-shadow: 0 1px 0 #fff; + background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%); + background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0)); + background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #dbdbdb; + border-color: #ccc; +} +.btn-default:hover, +.btn-default:focus { + background-color: #e0e0e0; + background-position: 0 -15px; +} +.btn-default:active, +.btn-default.active { + background-color: #e0e0e0; + border-color: #dbdbdb; +} +.btn-default:disabled, +.btn-default[disabled] { + background-color: #e0e0e0; + background-image: none; +} +.btn-primary { + background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88)); + background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #245580; +} +.btn-primary:hover, +.btn-primary:focus { + background-color: #265a88; + background-position: 0 -15px; +} +.btn-primary:active, +.btn-primary.active { + background-color: #265a88; + border-color: #245580; +} +.btn-primary:disabled, +.btn-primary[disabled] { + background-color: #265a88; + background-image: none; +} +.btn-success { + background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%); + background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641)); + background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #3e8f3e; +} +.btn-success:hover, +.btn-success:focus { + background-color: #419641; + background-position: 0 -15px; +} +.btn-success:active, +.btn-success.active { + background-color: #419641; + border-color: #3e8f3e; +} +.btn-success:disabled, +.btn-success[disabled] { + background-color: #419641; + background-image: none; +} +.btn-info { + background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); + background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2)); + background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #28a4c9; +} +.btn-info:hover, +.btn-info:focus { + background-color: #2aabd2; + background-position: 0 -15px; +} +.btn-info:active, +.btn-info.active { + background-color: #2aabd2; + border-color: #28a4c9; +} +.btn-info:disabled, +.btn-info[disabled] { + background-color: #2aabd2; + background-image: none; +} +.btn-warning { + background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); + background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316)); + background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #e38d13; +} +.btn-warning:hover, +.btn-warning:focus { + background-color: #eb9316; + background-position: 0 -15px; +} +.btn-warning:active, +.btn-warning.active { + background-color: #eb9316; + border-color: #e38d13; +} +.btn-warning:disabled, +.btn-warning[disabled] { + background-color: #eb9316; + background-image: none; +} +.btn-danger { + background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%); + background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a)); + background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #b92c28; +} +.btn-danger:hover, +.btn-danger:focus { + background-color: #c12e2a; + background-position: 0 -15px; +} +.btn-danger:active, +.btn-danger.active { + background-color: #c12e2a; + border-color: #b92c28; +} +.btn-danger:disabled, +.btn-danger[disabled] { + background-color: #c12e2a; + background-image: none; +} +.thumbnail, +.img-thumbnail { + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); + box-shadow: 0 1px 2px rgba(0, 0, 0, .075); +} +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + background-color: #e8e8e8; + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); + background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); + background-repeat: repeat-x; +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + background-color: #2e6da4; + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); + background-repeat: repeat-x; +} +.navbar-default { + background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%); + background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8)); + background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); +} +.navbar-default .navbar-nav > .open > a, +.navbar-default .navbar-nav > .active > a { + background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); + background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2)); + background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0); + background-repeat: repeat-x; + -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); + box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); +} +.navbar-brand, +.navbar-nav > li > a { + text-shadow: 0 1px 0 rgba(255, 255, 255, .25); +} +.navbar-inverse { + background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%); + background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222)); + background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; +} +.navbar-inverse .navbar-nav > .open > a, +.navbar-inverse .navbar-nav > .active > a { + background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%); + background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f)); + background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0); + background-repeat: repeat-x; + -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); + box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); +} +.navbar-inverse .navbar-brand, +.navbar-inverse .navbar-nav > li > a { + text-shadow: 0 -1px 0 rgba(0, 0, 0, .25); +} +.navbar-static-top, +.navbar-fixed-top, +.navbar-fixed-bottom { + border-radius: 0; +} +@media (max-width: 767px) { + .navbar .navbar-nav .open .dropdown-menu > .active > a, + .navbar .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #fff; + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); + background-repeat: repeat-x; + } +} +.alert { + text-shadow: 0 1px 0 rgba(255, 255, 255, .2); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); +} +.alert-success { + background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); + background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc)); + background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); + background-repeat: repeat-x; + border-color: #b2dba1; +} +.alert-info { + background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%); + background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0)); + background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); + background-repeat: repeat-x; + border-color: #9acfea; +} +.alert-warning { + background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); + background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0)); + background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); + background-repeat: repeat-x; + border-color: #f5e79e; +} +.alert-danger { + background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); + background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3)); + background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); + background-repeat: repeat-x; + border-color: #dca7a7; +} +.progress { + background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); + background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5)); + background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar { + background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090)); + background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-success { + background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%); + background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44)); + background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-info { + background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); + background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5)); + background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-warning { + background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); + background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f)); + background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-danger { + background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%); + background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c)); + background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.list-group { + border-radius: 4px; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); + box-shadow: 0 1px 2px rgba(0, 0, 0, .075); +} +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + text-shadow: 0 -1px 0 #286090; + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0); + background-repeat: repeat-x; + border-color: #2b669a; +} +.list-group-item.active .badge, +.list-group-item.active:hover .badge, +.list-group-item.active:focus .badge { + text-shadow: none; +} +.panel { + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05); + box-shadow: 0 1px 2px rgba(0, 0, 0, .05); +} +.panel-default > .panel-heading { + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); + background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); + background-repeat: repeat-x; +} +.panel-primary > .panel-heading { + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); + background-repeat: repeat-x; +} +.panel-success > .panel-heading { + background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); + background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6)); + background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); + background-repeat: repeat-x; +} +.panel-info > .panel-heading { + background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); + background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3)); + background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); + background-repeat: repeat-x; +} +.panel-warning > .panel-heading { + background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); + background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc)); + background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); + background-repeat: repeat-x; +} +.panel-danger > .panel-heading { + background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%); + background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc)); + background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); + background-repeat: repeat-x; +} +.well { + background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); + background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5)); + background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); + background-repeat: repeat-x; + border-color: #dcdcdc; + -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); +} +/*# sourceMappingURL=bootstrap-theme.css.map */ diff --git a/www2/css/bootstrap-theme.css.map b/www2/css/bootstrap-theme.css.map new file mode 100644 index 00000000..016a8dab --- /dev/null +++ b/www2/css/bootstrap-theme.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["less/theme.less","less/mixins/vendor-prefixes.less","bootstrap-theme.css","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":"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","file":"bootstrap-theme.css","sourcesContent":["\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n .badge {\n text-shadow: none;\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n\n &:disabled,\n &[disabled] {\n background-color: darken(@btn-color, 12%);\n background-image: none;\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-link-active-bg, 5%); @end-color: darken(@navbar-default-link-active-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-link-active-bg; @end-color: lighten(@navbar-inverse-link-active-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n// Fix active state of dropdown items in collapsed mode\n@media (max-width: @grid-float-breakpoint-max) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: #fff;\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n }\n }\n}\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255,255,255,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n// Reset the striped class because our mixins don't do multiple gradients and\n// the above custom styles override the new `.progress-bar-striped` in v3.2.0.\n.progress-bar-striped {\n #gradient > .striped();\n}\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n\n .badge {\n text-shadow: none;\n }\n}\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They will be removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility){\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // See https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n",".btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.btn-default:active,\n.btn-primary:active,\n.btn-success:active,\n.btn-info:active,\n.btn-warning:active,\n.btn-danger:active,\n.btn-default.active,\n.btn-primary.active,\n.btn-success.active,\n.btn-info.active,\n.btn-warning.active,\n.btn-danger.active {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-default .badge,\n.btn-primary .badge,\n.btn-success .badge,\n.btn-info .badge,\n.btn-warning .badge,\n.btn-danger .badge {\n text-shadow: none;\n}\n.btn:active,\n.btn.active {\n background-image: none;\n}\n.btn-default {\n background-image: -webkit-linear-gradient(top, #ffffff 0%, #e0e0e0 100%);\n background-image: -o-linear-gradient(top, #ffffff 0%, #e0e0e0 100%);\n background-image: linear-gradient(to bottom, #ffffff 0%, #e0e0e0 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #dbdbdb;\n text-shadow: 0 1px 0 #fff;\n border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus {\n background-color: #e0e0e0;\n background-position: 0 -15px;\n}\n.btn-default:active,\n.btn-default.active {\n background-color: #e0e0e0;\n border-color: #dbdbdb;\n}\n.btn-default:disabled,\n.btn-default[disabled] {\n background-color: #e0e0e0;\n background-image: none;\n}\n.btn-primary {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #245580;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n background-color: #265a88;\n background-position: 0 -15px;\n}\n.btn-primary:active,\n.btn-primary.active {\n background-color: #265a88;\n border-color: #245580;\n}\n.btn-primary:disabled,\n.btn-primary[disabled] {\n background-color: #265a88;\n background-image: none;\n}\n.btn-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #3e8f3e;\n}\n.btn-success:hover,\n.btn-success:focus {\n background-color: #419641;\n background-position: 0 -15px;\n}\n.btn-success:active,\n.btn-success.active {\n background-color: #419641;\n border-color: #3e8f3e;\n}\n.btn-success:disabled,\n.btn-success[disabled] {\n background-color: #419641;\n background-image: none;\n}\n.btn-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #28a4c9;\n}\n.btn-info:hover,\n.btn-info:focus {\n background-color: #2aabd2;\n background-position: 0 -15px;\n}\n.btn-info:active,\n.btn-info.active {\n background-color: #2aabd2;\n border-color: #28a4c9;\n}\n.btn-info:disabled,\n.btn-info[disabled] {\n background-color: #2aabd2;\n background-image: none;\n}\n.btn-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #e38d13;\n}\n.btn-warning:hover,\n.btn-warning:focus {\n background-color: #eb9316;\n background-position: 0 -15px;\n}\n.btn-warning:active,\n.btn-warning.active {\n background-color: #eb9316;\n border-color: #e38d13;\n}\n.btn-warning:disabled,\n.btn-warning[disabled] {\n background-color: #eb9316;\n background-image: none;\n}\n.btn-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #b92c28;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n background-color: #c12e2a;\n background-position: 0 -15px;\n}\n.btn-danger:active,\n.btn-danger.active {\n background-color: #c12e2a;\n border-color: #b92c28;\n}\n.btn-danger:disabled,\n.btn-danger[disabled] {\n background-color: #c12e2a;\n background-image: none;\n}\n.thumbnail,\n.img-thumbnail {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n background-color: #e8e8e8;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n background-color: #2e6da4;\n}\n.navbar-default {\n background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: -o-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);\n}\n.navbar-inverse {\n background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222222 100%);\n background-image: -o-linear-gradient(top, #3c3c3c 0%, #222222 100%);\n background-image: linear-gradient(to bottom, #3c3c3c 0%, #222222 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n}\n.navbar-inverse .navbar-brand,\n.navbar-inverse .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n@media (max-width: 767px) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n }\n}\n.alert {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.alert-success {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n border-color: #b2dba1;\n}\n.alert-info {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n border-color: #9acfea;\n}\n.alert-warning {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n border-color: #f5e79e;\n}\n.alert-danger {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n border-color: #dca7a7;\n}\n.progress {\n background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);\n}\n.progress-bar {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);\n}\n.progress-bar-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n}\n.progress-bar-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n}\n.progress-bar-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n}\n.progress-bar-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n}\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.list-group {\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 #286090;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);\n border-color: #2b669a;\n}\n.list-group-item.active .badge,\n.list-group-item.active:hover .badge,\n.list-group-item.active:focus .badge {\n text-shadow: none;\n}\n.panel {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.panel-default > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n}\n.panel-primary > .panel-heading {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n}\n.panel-success > .panel-heading {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);\n}\n.panel-info > .panel-heading {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);\n}\n.panel-warning > .panel-heading {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);\n}\n.panel-danger > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);\n}\n.well {\n background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n border-color: #dcdcdc;\n -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n}\n/*# sourceMappingURL=bootstrap-theme.css.map */","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n"]} \ No newline at end of file diff --git a/www2/css/bootstrap-theme.min.css b/www2/css/bootstrap-theme.min.css new file mode 100644 index 00000000..4c3e7bad --- /dev/null +++ b/www2/css/bootstrap-theme.min.css @@ -0,0 +1,5 @@ +/*! + * Bootstrap v3.3.1 (http://getbootstrap.com) + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */.btn-default,.btn-primary,.btn-success,.btn-info,.btn-warning,.btn-danger{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-default:active,.btn-primary:active,.btn-success:active,.btn-info:active,.btn-warning:active,.btn-danger:active,.btn-default.active,.btn-primary.active,.btn-success.active,.btn-info.active,.btn-warning.active,.btn-danger.active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-default .badge,.btn-primary .badge,.btn-success .badge,.btn-info .badge,.btn-warning .badge,.btn-danger .badge{text-shadow:none}.btn:active,.btn.active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;border-color:#ccc}.btn-default:hover,.btn-default:focus{background-color:#e0e0e0;background-position:0 -15px}.btn-default:active,.btn-default.active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default:disabled,.btn-default[disabled]{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-o-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#265a88));background-image:linear-gradient(to bottom,#337ab7 0,#265a88 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#245580}.btn-primary:hover,.btn-primary:focus{background-color:#265a88;background-position:0 -15px}.btn-primary:active,.btn-primary.active{background-color:#265a88;border-color:#245580}.btn-primary:disabled,.btn-primary[disabled]{background-color:#265a88;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:hover,.btn-success:focus{background-color:#419641;background-position:0 -15px}.btn-success:active,.btn-success.active{background-color:#419641;border-color:#3e8f3e}.btn-success:disabled,.btn-success[disabled]{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:hover,.btn-info:focus{background-color:#2aabd2;background-position:0 -15px}.btn-info:active,.btn-info.active{background-color:#2aabd2;border-color:#28a4c9}.btn-info:disabled,.btn-info[disabled]{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:hover,.btn-warning:focus{background-color:#eb9316;background-position:0 -15px}.btn-warning:active,.btn-warning.active{background-color:#eb9316;border-color:#e38d13}.btn-warning:disabled,.btn-warning[disabled]{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:hover,.btn-danger:focus{background-color:#c12e2a;background-position:0 -15px}.btn-danger:active,.btn-danger.active{background-color:#c12e2a;border-color:#b92c28}.btn-danger:disabled,.btn-danger[disabled]{background-color:#c12e2a;background-image:none}.thumbnail,.img-thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{background-color:#2e6da4;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-o-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dbdbdb),to(#e2e2e2));background-image:linear-gradient(to bottom,#dbdbdb 0,#e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-o-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#080808),to(#0f0f0f));background-image:linear-gradient(to bottom,#080808 0,#0f0f0f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-static-top,.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-o-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#286090));background-image:linear-gradient(to bottom,#337ab7 0,#286090 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{text-shadow:0 -1px 0 #286090;background-image:-webkit-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2b669a));background-image:linear-gradient(to bottom,#337ab7 0,#2b669a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);background-repeat:repeat-x;border-color:#2b669a}.list-group-item.active .badge,.list-group-item.active:hover .badge,.list-group-item.active:focus .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)} \ No newline at end of file diff --git a/www2/css/bootstrap.css b/www2/css/bootstrap.css new file mode 100644 index 00000000..11657933 --- /dev/null +++ b/www2/css/bootstrap.css @@ -0,0 +1,6332 @@ +/*! + * Bootstrap v3.3.1 (http://getbootstrap.com) + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +/*! normalize.css v3.0.2 | MIT License | git.io/normalize */ +html { + font-family: sans-serif; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} +body { + margin: 0; +} +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; +} +audio, +canvas, +progress, +video { + display: inline-block; + vertical-align: baseline; +} +audio:not([controls]) { + display: none; + height: 0; +} +[hidden], +template { + display: none; +} +a { + background-color: transparent; +} +a:active, +a:hover { + outline: 0; +} +abbr[title] { + border-bottom: 1px dotted; +} +b, +strong { + font-weight: bold; +} +dfn { + font-style: italic; +} +h1 { + margin: .67em 0; + font-size: 2em; +} +mark { + color: #000; + background: #ff0; +} +small { + font-size: 80%; +} +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} +sup { + top: -.5em; +} +sub { + bottom: -.25em; +} +img { + border: 0; +} +svg:not(:root) { + overflow: hidden; +} +figure { + margin: 1em 40px; +} +hr { + height: 0; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} +pre { + overflow: auto; +} +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} +button, +input, +optgroup, +select, +textarea { + margin: 0; + font: inherit; + color: inherit; +} +button { + overflow: visible; +} +button, +select { + text-transform: none; +} +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + cursor: pointer; +} +button[disabled], +html input[disabled] { + cursor: default; +} +button::-moz-focus-inner, +input::-moz-focus-inner { + padding: 0; + border: 0; +} +input { + line-height: normal; +} +input[type="checkbox"], +input[type="radio"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 0; +} +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} +input[type="search"] { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + -webkit-appearance: textfield; +} +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} +fieldset { + padding: .35em .625em .75em; + margin: 0 2px; + border: 1px solid #c0c0c0; +} +legend { + padding: 0; + border: 0; +} +textarea { + overflow: auto; +} +optgroup { + font-weight: bold; +} +table { + border-spacing: 0; + border-collapse: collapse; +} +td, +th { + padding: 0; +} +/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ +@media print { + *, + *:before, + *:after { + color: #000 !important; + text-shadow: none !important; + background: transparent !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + a[href^="#"]:after, + a[href^="javascript:"]:after { + content: ""; + } + pre, + blockquote { + border: 1px solid #999; + + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + img { + max-width: 100% !important; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + select { + background: #fff !important; + } + .navbar { + display: none; + } + .btn > .caret, + .dropup > .btn > .caret { + border-top-color: #000 !important; + } + .label { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table td, + .table th { + background-color: #fff !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #ddd !important; + } +} +@font-face { + font-family: 'Glyphicons Halflings'; + + src: url('../fonts/glyphicons-halflings-regular.eot'); + src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg'); +} +.glyphicon { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings'; + font-style: normal; + font-weight: normal; + line-height: 1; + + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.glyphicon-asterisk:before { + content: "\2a"; +} +.glyphicon-plus:before { + content: "\2b"; +} +.glyphicon-euro:before, +.glyphicon-eur:before { + content: "\20ac"; +} +.glyphicon-minus:before { + content: "\2212"; +} +.glyphicon-cloud:before { + content: "\2601"; +} +.glyphicon-envelope:before { + content: "\2709"; +} +.glyphicon-pencil:before { + content: "\270f"; +} +.glyphicon-glass:before { + content: "\e001"; +} +.glyphicon-music:before { + content: "\e002"; +} +.glyphicon-search:before { + content: "\e003"; +} +.glyphicon-heart:before { + content: "\e005"; +} +.glyphicon-star:before { + content: "\e006"; +} +.glyphicon-star-empty:before { + content: "\e007"; +} +.glyphicon-user:before { + content: "\e008"; +} +.glyphicon-film:before { + content: "\e009"; +} +.glyphicon-th-large:before { + content: "\e010"; +} +.glyphicon-th:before { + content: "\e011"; +} +.glyphicon-th-list:before { + content: "\e012"; +} +.glyphicon-ok:before { + content: "\e013"; +} +.glyphicon-remove:before { + content: "\e014"; +} +.glyphicon-zoom-in:before { + content: "\e015"; +} +.glyphicon-zoom-out:before { + content: "\e016"; +} +.glyphicon-off:before { + content: "\e017"; +} +.glyphicon-signal:before { + content: "\e018"; +} +.glyphicon-cog:before { + content: "\e019"; +} +.glyphicon-trash:before { + content: "\e020"; +} +.glyphicon-home:before { + content: "\e021"; +} +.glyphicon-file:before { + content: "\e022"; +} +.glyphicon-time:before { + content: "\e023"; +} +.glyphicon-road:before { + content: "\e024"; +} +.glyphicon-download-alt:before { + content: "\e025"; +} +.glyphicon-download:before { + content: "\e026"; +} +.glyphicon-upload:before { + content: "\e027"; +} +.glyphicon-inbox:before { + content: "\e028"; +} +.glyphicon-play-circle:before { + content: "\e029"; +} +.glyphicon-repeat:before { + content: "\e030"; +} +.glyphicon-refresh:before { + content: "\e031"; +} +.glyphicon-list-alt:before { + content: "\e032"; +} +.glyphicon-lock:before { + content: "\e033"; +} +.glyphicon-flag:before { + content: "\e034"; +} +.glyphicon-headphones:before { + content: "\e035"; +} +.glyphicon-volume-off:before { + content: "\e036"; +} +.glyphicon-volume-down:before { + content: "\e037"; +} +.glyphicon-volume-up:before { + content: "\e038"; +} +.glyphicon-qrcode:before { + content: "\e039"; +} +.glyphicon-barcode:before { + content: "\e040"; +} +.glyphicon-tag:before { + content: "\e041"; +} +.glyphicon-tags:before { + content: "\e042"; +} +.glyphicon-book:before { + content: "\e043"; +} +.glyphicon-bookmark:before { + content: "\e044"; +} +.glyphicon-print:before { + content: "\e045"; +} +.glyphicon-camera:before { + content: "\e046"; +} +.glyphicon-font:before { + content: "\e047"; +} +.glyphicon-bold:before { + content: "\e048"; +} +.glyphicon-italic:before { + content: "\e049"; +} +.glyphicon-text-height:before { + content: "\e050"; +} +.glyphicon-text-width:before { + content: "\e051"; +} +.glyphicon-align-left:before { + content: "\e052"; +} +.glyphicon-align-center:before { + content: "\e053"; +} +.glyphicon-align-right:before { + content: "\e054"; +} +.glyphicon-align-justify:before { + content: "\e055"; +} +.glyphicon-list:before { + content: "\e056"; +} +.glyphicon-indent-left:before { + content: "\e057"; +} +.glyphicon-indent-right:before { + content: "\e058"; +} +.glyphicon-facetime-video:before { + content: "\e059"; +} +.glyphicon-picture:before { + content: "\e060"; +} +.glyphicon-map-marker:before { + content: "\e062"; +} +.glyphicon-adjust:before { + content: "\e063"; +} +.glyphicon-tint:before { + content: "\e064"; +} +.glyphicon-edit:before { + content: "\e065"; +} +.glyphicon-share:before { + content: "\e066"; +} +.glyphicon-check:before { + content: "\e067"; +} +.glyphicon-move:before { + content: "\e068"; +} +.glyphicon-step-backward:before { + content: "\e069"; +} +.glyphicon-fast-backward:before { + content: "\e070"; +} +.glyphicon-backward:before { + content: "\e071"; +} +.glyphicon-play:before { + content: "\e072"; +} +.glyphicon-pause:before { + content: "\e073"; +} +.glyphicon-stop:before { + content: "\e074"; +} +.glyphicon-forward:before { + content: "\e075"; +} +.glyphicon-fast-forward:before { + content: "\e076"; +} +.glyphicon-step-forward:before { + content: "\e077"; +} +.glyphicon-eject:before { + content: "\e078"; +} +.glyphicon-chevron-left:before { + content: "\e079"; +} +.glyphicon-chevron-right:before { + content: "\e080"; +} +.glyphicon-plus-sign:before { + content: "\e081"; +} +.glyphicon-minus-sign:before { + content: "\e082"; +} +.glyphicon-remove-sign:before { + content: "\e083"; +} +.glyphicon-ok-sign:before { + content: "\e084"; +} +.glyphicon-question-sign:before { + content: "\e085"; +} +.glyphicon-info-sign:before { + content: "\e086"; +} +.glyphicon-screenshot:before { + content: "\e087"; +} +.glyphicon-remove-circle:before { + content: "\e088"; +} +.glyphicon-ok-circle:before { + content: "\e089"; +} +.glyphicon-ban-circle:before { + content: "\e090"; +} +.glyphicon-arrow-left:before { + content: "\e091"; +} +.glyphicon-arrow-right:before { + content: "\e092"; +} +.glyphicon-arrow-up:before { + content: "\e093"; +} +.glyphicon-arrow-down:before { + content: "\e094"; +} +.glyphicon-share-alt:before { + content: "\e095"; +} +.glyphicon-resize-full:before { + content: "\e096"; +} +.glyphicon-resize-small:before { + content: "\e097"; +} +.glyphicon-exclamation-sign:before { + content: "\e101"; +} +.glyphicon-gift:before { + content: "\e102"; +} +.glyphicon-leaf:before { + content: "\e103"; +} +.glyphicon-fire:before { + content: "\e104"; +} +.glyphicon-eye-open:before { + content: "\e105"; +} +.glyphicon-eye-close:before { + content: "\e106"; +} +.glyphicon-warning-sign:before { + content: "\e107"; +} +.glyphicon-plane:before { + content: "\e108"; +} +.glyphicon-calendar:before { + content: "\e109"; +} +.glyphicon-random:before { + content: "\e110"; +} +.glyphicon-comment:before { + content: "\e111"; +} +.glyphicon-magnet:before { + content: "\e112"; +} +.glyphicon-chevron-up:before { + content: "\e113"; +} +.glyphicon-chevron-down:before { + content: "\e114"; +} +.glyphicon-retweet:before { + content: "\e115"; +} +.glyphicon-shopping-cart:before { + content: "\e116"; +} +.glyphicon-folder-close:before { + content: "\e117"; +} +.glyphicon-folder-open:before { + content: "\e118"; +} +.glyphicon-resize-vertical:before { + content: "\e119"; +} +.glyphicon-resize-horizontal:before { + content: "\e120"; +} +.glyphicon-hdd:before { + content: "\e121"; +} +.glyphicon-bullhorn:before { + content: "\e122"; +} +.glyphicon-bell:before { + content: "\e123"; +} +.glyphicon-certificate:before { + content: "\e124"; +} +.glyphicon-thumbs-up:before { + content: "\e125"; +} +.glyphicon-thumbs-down:before { + content: "\e126"; +} +.glyphicon-hand-right:before { + content: "\e127"; +} +.glyphicon-hand-left:before { + content: "\e128"; +} +.glyphicon-hand-up:before { + content: "\e129"; +} +.glyphicon-hand-down:before { + content: "\e130"; +} +.glyphicon-circle-arrow-right:before { + content: "\e131"; +} +.glyphicon-circle-arrow-left:before { + content: "\e132"; +} +.glyphicon-circle-arrow-up:before { + content: "\e133"; +} +.glyphicon-circle-arrow-down:before { + content: "\e134"; +} +.glyphicon-globe:before { + content: "\e135"; +} +.glyphicon-wrench:before { + content: "\e136"; +} +.glyphicon-tasks:before { + content: "\e137"; +} +.glyphicon-filter:before { + content: "\e138"; +} +.glyphicon-briefcase:before { + content: "\e139"; +} +.glyphicon-fullscreen:before { + content: "\e140"; +} +.glyphicon-dashboard:before { + content: "\e141"; +} +.glyphicon-paperclip:before { + content: "\e142"; +} +.glyphicon-heart-empty:before { + content: "\e143"; +} +.glyphicon-link:before { + content: "\e144"; +} +.glyphicon-phone:before { + content: "\e145"; +} +.glyphicon-pushpin:before { + content: "\e146"; +} +.glyphicon-usd:before { + content: "\e148"; +} +.glyphicon-gbp:before { + content: "\e149"; +} +.glyphicon-sort:before { + content: "\e150"; +} +.glyphicon-sort-by-alphabet:before { + content: "\e151"; +} +.glyphicon-sort-by-alphabet-alt:before { + content: "\e152"; +} +.glyphicon-sort-by-order:before { + content: "\e153"; +} +.glyphicon-sort-by-order-alt:before { + content: "\e154"; +} +.glyphicon-sort-by-attributes:before { + content: "\e155"; +} +.glyphicon-sort-by-attributes-alt:before { + content: "\e156"; +} +.glyphicon-unchecked:before { + content: "\e157"; +} +.glyphicon-expand:before { + content: "\e158"; +} +.glyphicon-collapse-down:before { + content: "\e159"; +} +.glyphicon-collapse-up:before { + content: "\e160"; +} +.glyphicon-log-in:before { + content: "\e161"; +} +.glyphicon-flash:before { + content: "\e162"; +} +.glyphicon-log-out:before { + content: "\e163"; +} +.glyphicon-new-window:before { + content: "\e164"; +} +.glyphicon-record:before { + content: "\e165"; +} +.glyphicon-save:before { + content: "\e166"; +} +.glyphicon-open:before { + content: "\e167"; +} +.glyphicon-saved:before { + content: "\e168"; +} +.glyphicon-import:before { + content: "\e169"; +} +.glyphicon-export:before { + content: "\e170"; +} +.glyphicon-send:before { + content: "\e171"; +} +.glyphicon-floppy-disk:before { + content: "\e172"; +} +.glyphicon-floppy-saved:before { + content: "\e173"; +} +.glyphicon-floppy-remove:before { + content: "\e174"; +} +.glyphicon-floppy-save:before { + content: "\e175"; +} +.glyphicon-floppy-open:before { + content: "\e176"; +} +.glyphicon-credit-card:before { + content: "\e177"; +} +.glyphicon-transfer:before { + content: "\e178"; +} +.glyphicon-cutlery:before { + content: "\e179"; +} +.glyphicon-header:before { + content: "\e180"; +} +.glyphicon-compressed:before { + content: "\e181"; +} +.glyphicon-earphone:before { + content: "\e182"; +} +.glyphicon-phone-alt:before { + content: "\e183"; +} +.glyphicon-tower:before { + content: "\e184"; +} +.glyphicon-stats:before { + content: "\e185"; +} +.glyphicon-sd-video:before { + content: "\e186"; +} +.glyphicon-hd-video:before { + content: "\e187"; +} +.glyphicon-subtitles:before { + content: "\e188"; +} +.glyphicon-sound-stereo:before { + content: "\e189"; +} +.glyphicon-sound-dolby:before { + content: "\e190"; +} +.glyphicon-sound-5-1:before { + content: "\e191"; +} +.glyphicon-sound-6-1:before { + content: "\e192"; +} +.glyphicon-sound-7-1:before { + content: "\e193"; +} +.glyphicon-copyright-mark:before { + content: "\e194"; +} +.glyphicon-registration-mark:before { + content: "\e195"; +} +.glyphicon-cloud-download:before { + content: "\e197"; +} +.glyphicon-cloud-upload:before { + content: "\e198"; +} +.glyphicon-tree-conifer:before { + content: "\e199"; +} +.glyphicon-tree-deciduous:before { + content: "\e200"; +} +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +*:before, +*:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +html { + font-size: 10px; + + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} +body { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 1.42857143; + color: #333; + background-color: #fff; +} +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} +a { + color: #337ab7; + text-decoration: none; +} +a:hover, +a:focus { + color: #23527c; + text-decoration: underline; +} +a:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +figure { + margin: 0; +} +img { + vertical-align: middle; +} +.img-responsive, +.thumbnail > img, +.thumbnail a > img, +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + display: block; + max-width: 100%; + height: auto; +} +.img-rounded { + border-radius: 6px; +} +.img-thumbnail { + display: inline-block; + max-width: 100%; + height: auto; + padding: 4px; + line-height: 1.42857143; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: all .2s ease-in-out; + -o-transition: all .2s ease-in-out; + transition: all .2s ease-in-out; +} +.img-circle { + border-radius: 50%; +} +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-top: 1px solid #eee; +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-family: inherit; + font-weight: 500; + line-height: 1.1; + color: inherit; +} +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small, +.h1 small, +.h2 small, +.h3 small, +.h4 small, +.h5 small, +.h6 small, +h1 .small, +h2 .small, +h3 .small, +h4 .small, +h5 .small, +h6 .small, +.h1 .small, +.h2 .small, +.h3 .small, +.h4 .small, +.h5 .small, +.h6 .small { + font-weight: normal; + line-height: 1; + color: #777; +} +h1, +.h1, +h2, +.h2, +h3, +.h3 { + margin-top: 20px; + margin-bottom: 10px; +} +h1 small, +.h1 small, +h2 small, +.h2 small, +h3 small, +.h3 small, +h1 .small, +.h1 .small, +h2 .small, +.h2 .small, +h3 .small, +.h3 .small { + font-size: 65%; +} +h4, +.h4, +h5, +.h5, +h6, +.h6 { + margin-top: 10px; + margin-bottom: 10px; +} +h4 small, +.h4 small, +h5 small, +.h5 small, +h6 small, +.h6 small, +h4 .small, +.h4 .small, +h5 .small, +.h5 .small, +h6 .small, +.h6 .small { + font-size: 75%; +} +h1, +.h1 { + font-size: 36px; +} +h2, +.h2 { + font-size: 30px; +} +h3, +.h3 { + font-size: 24px; +} +h4, +.h4 { + font-size: 18px; +} +h5, +.h5 { + font-size: 14px; +} +h6, +.h6 { + font-size: 12px; +} +p { + margin: 0 0 10px; +} +.lead { + margin-bottom: 20px; + font-size: 16px; + font-weight: 300; + line-height: 1.4; +} +@media (min-width: 768px) { + .lead { + font-size: 21px; + } +} +small, +.small { + font-size: 85%; +} +mark, +.mark { + padding: .2em; + background-color: #fcf8e3; +} +.text-left { + text-align: left; +} +.text-right { + text-align: right; +} +.text-center { + text-align: center; +} +.text-justify { + text-align: justify; +} +.text-nowrap { + white-space: nowrap; +} +.text-lowercase { + text-transform: lowercase; +} +.text-uppercase { + text-transform: uppercase; +} +.text-capitalize { + text-transform: capitalize; +} +.text-muted { + color: #777; +} +.text-primary { + color: #337ab7; +} +a.text-primary:hover { + color: #286090; +} +.text-success { + color: #3c763d; +} +a.text-success:hover { + color: #2b542c; +} +.text-info { + color: #31708f; +} +a.text-info:hover { + color: #245269; +} +.text-warning { + color: #8a6d3b; +} +a.text-warning:hover { + color: #66512c; +} +.text-danger { + color: #a94442; +} +a.text-danger:hover { + color: #843534; +} +.bg-primary { + color: #fff; + background-color: #337ab7; +} +a.bg-primary:hover { + background-color: #286090; +} +.bg-success { + background-color: #dff0d8; +} +a.bg-success:hover { + background-color: #c1e2b3; +} +.bg-info { + background-color: #d9edf7; +} +a.bg-info:hover { + background-color: #afd9ee; +} +.bg-warning { + background-color: #fcf8e3; +} +a.bg-warning:hover { + background-color: #f7ecb5; +} +.bg-danger { + background-color: #f2dede; +} +a.bg-danger:hover { + background-color: #e4b9b9; +} +.page-header { + padding-bottom: 9px; + margin: 40px 0 20px; + border-bottom: 1px solid #eee; +} +ul, +ol { + margin-top: 0; + margin-bottom: 10px; +} +ul ul, +ol ul, +ul ol, +ol ol { + margin-bottom: 0; +} +.list-unstyled { + padding-left: 0; + list-style: none; +} +.list-inline { + padding-left: 0; + margin-left: -5px; + list-style: none; +} +.list-inline > li { + display: inline-block; + padding-right: 5px; + padding-left: 5px; +} +dl { + margin-top: 0; + margin-bottom: 20px; +} +dt, +dd { + line-height: 1.42857143; +} +dt { + font-weight: bold; +} +dd { + margin-left: 0; +} +@media (min-width: 768px) { + .dl-horizontal dt { + float: left; + width: 160px; + overflow: hidden; + clear: left; + text-align: right; + text-overflow: ellipsis; + white-space: nowrap; + } + .dl-horizontal dd { + margin-left: 180px; + } +} +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #777; +} +.initialism { + font-size: 90%; + text-transform: uppercase; +} +blockquote { + padding: 10px 20px; + margin: 0 0 20px; + font-size: 17.5px; + border-left: 5px solid #eee; +} +blockquote p:last-child, +blockquote ul:last-child, +blockquote ol:last-child { + margin-bottom: 0; +} +blockquote footer, +blockquote small, +blockquote .small { + display: block; + font-size: 80%; + line-height: 1.42857143; + color: #777; +} +blockquote footer:before, +blockquote small:before, +blockquote .small:before { + content: '\2014 \00A0'; +} +.blockquote-reverse, +blockquote.pull-right { + padding-right: 15px; + padding-left: 0; + text-align: right; + border-right: 5px solid #eee; + border-left: 0; +} +.blockquote-reverse footer:before, +blockquote.pull-right footer:before, +.blockquote-reverse small:before, +blockquote.pull-right small:before, +.blockquote-reverse .small:before, +blockquote.pull-right .small:before { + content: ''; +} +.blockquote-reverse footer:after, +blockquote.pull-right footer:after, +.blockquote-reverse small:after, +blockquote.pull-right small:after, +.blockquote-reverse .small:after, +blockquote.pull-right .small:after { + content: '\00A0 \2014'; +} +address { + margin-bottom: 20px; + font-style: normal; + line-height: 1.42857143; +} +code, +kbd, +pre, +samp { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; +} +code { + padding: 2px 4px; + font-size: 90%; + color: #c7254e; + background-color: #f9f2f4; + border-radius: 4px; +} +kbd { + padding: 2px 4px; + font-size: 90%; + color: #fff; + background-color: #333; + border-radius: 3px; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); +} +kbd kbd { + padding: 0; + font-size: 100%; + font-weight: bold; + -webkit-box-shadow: none; + box-shadow: none; +} +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 1.42857143; + color: #333; + word-break: break-all; + word-wrap: break-word; + background-color: #f5f5f5; + border: 1px solid #ccc; + border-radius: 4px; +} +pre code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border-radius: 0; +} +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} +.container { + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} +@media (min-width: 768px) { + .container { + width: 750px; + } +} +@media (min-width: 992px) { + .container { + width: 970px; + } +} +@media (min-width: 1200px) { + .container { + width: 1170px; + } +} +.container-fluid { + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} +.row { + margin-right: -15px; + margin-left: -15px; +} +.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { + position: relative; + min-height: 1px; + padding-right: 15px; + padding-left: 15px; +} +.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { + float: left; +} +.col-xs-12 { + width: 100%; +} +.col-xs-11 { + width: 91.66666667%; +} +.col-xs-10 { + width: 83.33333333%; +} +.col-xs-9 { + width: 75%; +} +.col-xs-8 { + width: 66.66666667%; +} +.col-xs-7 { + width: 58.33333333%; +} +.col-xs-6 { + width: 50%; +} +.col-xs-5 { + width: 41.66666667%; +} +.col-xs-4 { + width: 33.33333333%; +} +.col-xs-3 { + width: 25%; +} +.col-xs-2 { + width: 16.66666667%; +} +.col-xs-1 { + width: 8.33333333%; +} +.col-xs-pull-12 { + right: 100%; +} +.col-xs-pull-11 { + right: 91.66666667%; +} +.col-xs-pull-10 { + right: 83.33333333%; +} +.col-xs-pull-9 { + right: 75%; +} +.col-xs-pull-8 { + right: 66.66666667%; +} +.col-xs-pull-7 { + right: 58.33333333%; +} +.col-xs-pull-6 { + right: 50%; +} +.col-xs-pull-5 { + right: 41.66666667%; +} +.col-xs-pull-4 { + right: 33.33333333%; +} +.col-xs-pull-3 { + right: 25%; +} +.col-xs-pull-2 { + right: 16.66666667%; +} +.col-xs-pull-1 { + right: 8.33333333%; +} +.col-xs-pull-0 { + right: auto; +} +.col-xs-push-12 { + left: 100%; +} +.col-xs-push-11 { + left: 91.66666667%; +} +.col-xs-push-10 { + left: 83.33333333%; +} +.col-xs-push-9 { + left: 75%; +} +.col-xs-push-8 { + left: 66.66666667%; +} +.col-xs-push-7 { + left: 58.33333333%; +} +.col-xs-push-6 { + left: 50%; +} +.col-xs-push-5 { + left: 41.66666667%; +} +.col-xs-push-4 { + left: 33.33333333%; +} +.col-xs-push-3 { + left: 25%; +} +.col-xs-push-2 { + left: 16.66666667%; +} +.col-xs-push-1 { + left: 8.33333333%; +} +.col-xs-push-0 { + left: auto; +} +.col-xs-offset-12 { + margin-left: 100%; +} +.col-xs-offset-11 { + margin-left: 91.66666667%; +} +.col-xs-offset-10 { + margin-left: 83.33333333%; +} +.col-xs-offset-9 { + margin-left: 75%; +} +.col-xs-offset-8 { + margin-left: 66.66666667%; +} +.col-xs-offset-7 { + margin-left: 58.33333333%; +} +.col-xs-offset-6 { + margin-left: 50%; +} +.col-xs-offset-5 { + margin-left: 41.66666667%; +} +.col-xs-offset-4 { + margin-left: 33.33333333%; +} +.col-xs-offset-3 { + margin-left: 25%; +} +.col-xs-offset-2 { + margin-left: 16.66666667%; +} +.col-xs-offset-1 { + margin-left: 8.33333333%; +} +.col-xs-offset-0 { + margin-left: 0; +} +@media (min-width: 768px) { + .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { + float: left; + } + .col-sm-12 { + width: 100%; + } + .col-sm-11 { + width: 91.66666667%; + } + .col-sm-10 { + width: 83.33333333%; + } + .col-sm-9 { + width: 75%; + } + .col-sm-8 { + width: 66.66666667%; + } + .col-sm-7 { + width: 58.33333333%; + } + .col-sm-6 { + width: 50%; + } + .col-sm-5 { + width: 41.66666667%; + } + .col-sm-4 { + width: 33.33333333%; + } + .col-sm-3 { + width: 25%; + } + .col-sm-2 { + width: 16.66666667%; + } + .col-sm-1 { + width: 8.33333333%; + } + .col-sm-pull-12 { + right: 100%; + } + .col-sm-pull-11 { + right: 91.66666667%; + } + .col-sm-pull-10 { + right: 83.33333333%; + } + .col-sm-pull-9 { + right: 75%; + } + .col-sm-pull-8 { + right: 66.66666667%; + } + .col-sm-pull-7 { + right: 58.33333333%; + } + .col-sm-pull-6 { + right: 50%; + } + .col-sm-pull-5 { + right: 41.66666667%; + } + .col-sm-pull-4 { + right: 33.33333333%; + } + .col-sm-pull-3 { + right: 25%; + } + .col-sm-pull-2 { + right: 16.66666667%; + } + .col-sm-pull-1 { + right: 8.33333333%; + } + .col-sm-pull-0 { + right: auto; + } + .col-sm-push-12 { + left: 100%; + } + .col-sm-push-11 { + left: 91.66666667%; + } + .col-sm-push-10 { + left: 83.33333333%; + } + .col-sm-push-9 { + left: 75%; + } + .col-sm-push-8 { + left: 66.66666667%; + } + .col-sm-push-7 { + left: 58.33333333%; + } + .col-sm-push-6 { + left: 50%; + } + .col-sm-push-5 { + left: 41.66666667%; + } + .col-sm-push-4 { + left: 33.33333333%; + } + .col-sm-push-3 { + left: 25%; + } + .col-sm-push-2 { + left: 16.66666667%; + } + .col-sm-push-1 { + left: 8.33333333%; + } + .col-sm-push-0 { + left: auto; + } + .col-sm-offset-12 { + margin-left: 100%; + } + .col-sm-offset-11 { + margin-left: 91.66666667%; + } + .col-sm-offset-10 { + margin-left: 83.33333333%; + } + .col-sm-offset-9 { + margin-left: 75%; + } + .col-sm-offset-8 { + margin-left: 66.66666667%; + } + .col-sm-offset-7 { + margin-left: 58.33333333%; + } + .col-sm-offset-6 { + margin-left: 50%; + } + .col-sm-offset-5 { + margin-left: 41.66666667%; + } + .col-sm-offset-4 { + margin-left: 33.33333333%; + } + .col-sm-offset-3 { + margin-left: 25%; + } + .col-sm-offset-2 { + margin-left: 16.66666667%; + } + .col-sm-offset-1 { + margin-left: 8.33333333%; + } + .col-sm-offset-0 { + margin-left: 0; + } +} +@media (min-width: 992px) { + .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { + float: left; + } + .col-md-12 { + width: 100%; + } + .col-md-11 { + width: 91.66666667%; + } + .col-md-10 { + width: 83.33333333%; + } + .col-md-9 { + width: 75%; + } + .col-md-8 { + width: 66.66666667%; + } + .col-md-7 { + width: 58.33333333%; + } + .col-md-6 { + width: 50%; + } + .col-md-5 { + width: 41.66666667%; + } + .col-md-4 { + width: 33.33333333%; + } + .col-md-3 { + width: 25%; + } + .col-md-2 { + width: 16.66666667%; + } + .col-md-1 { + width: 8.33333333%; + } + .col-md-pull-12 { + right: 100%; + } + .col-md-pull-11 { + right: 91.66666667%; + } + .col-md-pull-10 { + right: 83.33333333%; + } + .col-md-pull-9 { + right: 75%; + } + .col-md-pull-8 { + right: 66.66666667%; + } + .col-md-pull-7 { + right: 58.33333333%; + } + .col-md-pull-6 { + right: 50%; + } + .col-md-pull-5 { + right: 41.66666667%; + } + .col-md-pull-4 { + right: 33.33333333%; + } + .col-md-pull-3 { + right: 25%; + } + .col-md-pull-2 { + right: 16.66666667%; + } + .col-md-pull-1 { + right: 8.33333333%; + } + .col-md-pull-0 { + right: auto; + } + .col-md-push-12 { + left: 100%; + } + .col-md-push-11 { + left: 91.66666667%; + } + .col-md-push-10 { + left: 83.33333333%; + } + .col-md-push-9 { + left: 75%; + } + .col-md-push-8 { + left: 66.66666667%; + } + .col-md-push-7 { + left: 58.33333333%; + } + .col-md-push-6 { + left: 50%; + } + .col-md-push-5 { + left: 41.66666667%; + } + .col-md-push-4 { + left: 33.33333333%; + } + .col-md-push-3 { + left: 25%; + } + .col-md-push-2 { + left: 16.66666667%; + } + .col-md-push-1 { + left: 8.33333333%; + } + .col-md-push-0 { + left: auto; + } + .col-md-offset-12 { + margin-left: 100%; + } + .col-md-offset-11 { + margin-left: 91.66666667%; + } + .col-md-offset-10 { + margin-left: 83.33333333%; + } + .col-md-offset-9 { + margin-left: 75%; + } + .col-md-offset-8 { + margin-left: 66.66666667%; + } + .col-md-offset-7 { + margin-left: 58.33333333%; + } + .col-md-offset-6 { + margin-left: 50%; + } + .col-md-offset-5 { + margin-left: 41.66666667%; + } + .col-md-offset-4 { + margin-left: 33.33333333%; + } + .col-md-offset-3 { + margin-left: 25%; + } + .col-md-offset-2 { + margin-left: 16.66666667%; + } + .col-md-offset-1 { + margin-left: 8.33333333%; + } + .col-md-offset-0 { + margin-left: 0; + } +} +@media (min-width: 1200px) { + .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { + float: left; + } + .col-lg-12 { + width: 100%; + } + .col-lg-11 { + width: 91.66666667%; + } + .col-lg-10 { + width: 83.33333333%; + } + .col-lg-9 { + width: 75%; + } + .col-lg-8 { + width: 66.66666667%; + } + .col-lg-7 { + width: 58.33333333%; + } + .col-lg-6 { + width: 50%; + } + .col-lg-5 { + width: 41.66666667%; + } + .col-lg-4 { + width: 33.33333333%; + } + .col-lg-3 { + width: 25%; + } + .col-lg-2 { + width: 16.66666667%; + } + .col-lg-1 { + width: 8.33333333%; + } + .col-lg-pull-12 { + right: 100%; + } + .col-lg-pull-11 { + right: 91.66666667%; + } + .col-lg-pull-10 { + right: 83.33333333%; + } + .col-lg-pull-9 { + right: 75%; + } + .col-lg-pull-8 { + right: 66.66666667%; + } + .col-lg-pull-7 { + right: 58.33333333%; + } + .col-lg-pull-6 { + right: 50%; + } + .col-lg-pull-5 { + right: 41.66666667%; + } + .col-lg-pull-4 { + right: 33.33333333%; + } + .col-lg-pull-3 { + right: 25%; + } + .col-lg-pull-2 { + right: 16.66666667%; + } + .col-lg-pull-1 { + right: 8.33333333%; + } + .col-lg-pull-0 { + right: auto; + } + .col-lg-push-12 { + left: 100%; + } + .col-lg-push-11 { + left: 91.66666667%; + } + .col-lg-push-10 { + left: 83.33333333%; + } + .col-lg-push-9 { + left: 75%; + } + .col-lg-push-8 { + left: 66.66666667%; + } + .col-lg-push-7 { + left: 58.33333333%; + } + .col-lg-push-6 { + left: 50%; + } + .col-lg-push-5 { + left: 41.66666667%; + } + .col-lg-push-4 { + left: 33.33333333%; + } + .col-lg-push-3 { + left: 25%; + } + .col-lg-push-2 { + left: 16.66666667%; + } + .col-lg-push-1 { + left: 8.33333333%; + } + .col-lg-push-0 { + left: auto; + } + .col-lg-offset-12 { + margin-left: 100%; + } + .col-lg-offset-11 { + margin-left: 91.66666667%; + } + .col-lg-offset-10 { + margin-left: 83.33333333%; + } + .col-lg-offset-9 { + margin-left: 75%; + } + .col-lg-offset-8 { + margin-left: 66.66666667%; + } + .col-lg-offset-7 { + margin-left: 58.33333333%; + } + .col-lg-offset-6 { + margin-left: 50%; + } + .col-lg-offset-5 { + margin-left: 41.66666667%; + } + .col-lg-offset-4 { + margin-left: 33.33333333%; + } + .col-lg-offset-3 { + margin-left: 25%; + } + .col-lg-offset-2 { + margin-left: 16.66666667%; + } + .col-lg-offset-1 { + margin-left: 8.33333333%; + } + .col-lg-offset-0 { + margin-left: 0; + } +} +table { + background-color: transparent; +} +caption { + padding-top: 8px; + padding-bottom: 8px; + color: #777; + text-align: left; +} +th { + text-align: left; +} +.table { + width: 100%; + max-width: 100%; + margin-bottom: 20px; +} +.table > thead > tr > th, +.table > tbody > tr > th, +.table > tfoot > tr > th, +.table > thead > tr > td, +.table > tbody > tr > td, +.table > tfoot > tr > td { + padding: 8px; + line-height: 1.42857143; + vertical-align: top; + border-top: 1px solid #ddd; +} +.table > thead > tr > th { + vertical-align: bottom; + border-bottom: 2px solid #ddd; +} +.table > caption + thead > tr:first-child > th, +.table > colgroup + thead > tr:first-child > th, +.table > thead:first-child > tr:first-child > th, +.table > caption + thead > tr:first-child > td, +.table > colgroup + thead > tr:first-child > td, +.table > thead:first-child > tr:first-child > td { + border-top: 0; +} +.table > tbody + tbody { + border-top: 2px solid #ddd; +} +.table .table { + background-color: #fff; +} +.table-condensed > thead > tr > th, +.table-condensed > tbody > tr > th, +.table-condensed > tfoot > tr > th, +.table-condensed > thead > tr > td, +.table-condensed > tbody > tr > td, +.table-condensed > tfoot > tr > td { + padding: 5px; +} +.table-bordered { + border: 1px solid #ddd; +} +.table-bordered > thead > tr > th, +.table-bordered > tbody > tr > th, +.table-bordered > tfoot > tr > th, +.table-bordered > thead > tr > td, +.table-bordered > tbody > tr > td, +.table-bordered > tfoot > tr > td { + border: 1px solid #ddd; +} +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td { + border-bottom-width: 2px; +} +.table-striped > tbody > tr:nth-child(odd) { + background-color: #f9f9f9; +} +.table-hover > tbody > tr:hover { + background-color: #f5f5f5; +} +table col[class*="col-"] { + position: static; + display: table-column; + float: none; +} +table td[class*="col-"], +table th[class*="col-"] { + position: static; + display: table-cell; + float: none; +} +.table > thead > tr > td.active, +.table > tbody > tr > td.active, +.table > tfoot > tr > td.active, +.table > thead > tr > th.active, +.table > tbody > tr > th.active, +.table > tfoot > tr > th.active, +.table > thead > tr.active > td, +.table > tbody > tr.active > td, +.table > tfoot > tr.active > td, +.table > thead > tr.active > th, +.table > tbody > tr.active > th, +.table > tfoot > tr.active > th { + background-color: #f5f5f5; +} +.table-hover > tbody > tr > td.active:hover, +.table-hover > tbody > tr > th.active:hover, +.table-hover > tbody > tr.active:hover > td, +.table-hover > tbody > tr:hover > .active, +.table-hover > tbody > tr.active:hover > th { + background-color: #e8e8e8; +} +.table > thead > tr > td.success, +.table > tbody > tr > td.success, +.table > tfoot > tr > td.success, +.table > thead > tr > th.success, +.table > tbody > tr > th.success, +.table > tfoot > tr > th.success, +.table > thead > tr.success > td, +.table > tbody > tr.success > td, +.table > tfoot > tr.success > td, +.table > thead > tr.success > th, +.table > tbody > tr.success > th, +.table > tfoot > tr.success > th { + background-color: #dff0d8; +} +.table-hover > tbody > tr > td.success:hover, +.table-hover > tbody > tr > th.success:hover, +.table-hover > tbody > tr.success:hover > td, +.table-hover > tbody > tr:hover > .success, +.table-hover > tbody > tr.success:hover > th { + background-color: #d0e9c6; +} +.table > thead > tr > td.info, +.table > tbody > tr > td.info, +.table > tfoot > tr > td.info, +.table > thead > tr > th.info, +.table > tbody > tr > th.info, +.table > tfoot > tr > th.info, +.table > thead > tr.info > td, +.table > tbody > tr.info > td, +.table > tfoot > tr.info > td, +.table > thead > tr.info > th, +.table > tbody > tr.info > th, +.table > tfoot > tr.info > th { + background-color: #d9edf7; +} +.table-hover > tbody > tr > td.info:hover, +.table-hover > tbody > tr > th.info:hover, +.table-hover > tbody > tr.info:hover > td, +.table-hover > tbody > tr:hover > .info, +.table-hover > tbody > tr.info:hover > th { + background-color: #c4e3f3; +} +.table > thead > tr > td.warning, +.table > tbody > tr > td.warning, +.table > tfoot > tr > td.warning, +.table > thead > tr > th.warning, +.table > tbody > tr > th.warning, +.table > tfoot > tr > th.warning, +.table > thead > tr.warning > td, +.table > tbody > tr.warning > td, +.table > tfoot > tr.warning > td, +.table > thead > tr.warning > th, +.table > tbody > tr.warning > th, +.table > tfoot > tr.warning > th { + background-color: #fcf8e3; +} +.table-hover > tbody > tr > td.warning:hover, +.table-hover > tbody > tr > th.warning:hover, +.table-hover > tbody > tr.warning:hover > td, +.table-hover > tbody > tr:hover > .warning, +.table-hover > tbody > tr.warning:hover > th { + background-color: #faf2cc; +} +.table > thead > tr > td.danger, +.table > tbody > tr > td.danger, +.table > tfoot > tr > td.danger, +.table > thead > tr > th.danger, +.table > tbody > tr > th.danger, +.table > tfoot > tr > th.danger, +.table > thead > tr.danger > td, +.table > tbody > tr.danger > td, +.table > tfoot > tr.danger > td, +.table > thead > tr.danger > th, +.table > tbody > tr.danger > th, +.table > tfoot > tr.danger > th { + background-color: #f2dede; +} +.table-hover > tbody > tr > td.danger:hover, +.table-hover > tbody > tr > th.danger:hover, +.table-hover > tbody > tr.danger:hover > td, +.table-hover > tbody > tr:hover > .danger, +.table-hover > tbody > tr.danger:hover > th { + background-color: #ebcccc; +} +.table-responsive { + min-height: .01%; + overflow-x: auto; +} +@media screen and (max-width: 767px) { + .table-responsive { + width: 100%; + margin-bottom: 15px; + overflow-y: hidden; + -ms-overflow-style: -ms-autohiding-scrollbar; + border: 1px solid #ddd; + } + .table-responsive > .table { + margin-bottom: 0; + } + .table-responsive > .table > thead > tr > th, + .table-responsive > .table > tbody > tr > th, + .table-responsive > .table > tfoot > tr > th, + .table-responsive > .table > thead > tr > td, + .table-responsive > .table > tbody > tr > td, + .table-responsive > .table > tfoot > tr > td { + white-space: nowrap; + } + .table-responsive > .table-bordered { + border: 0; + } + .table-responsive > .table-bordered > thead > tr > th:first-child, + .table-responsive > .table-bordered > tbody > tr > th:first-child, + .table-responsive > .table-bordered > tfoot > tr > th:first-child, + .table-responsive > .table-bordered > thead > tr > td:first-child, + .table-responsive > .table-bordered > tbody > tr > td:first-child, + .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; + } + .table-responsive > .table-bordered > thead > tr > th:last-child, + .table-responsive > .table-bordered > tbody > tr > th:last-child, + .table-responsive > .table-bordered > tfoot > tr > th:last-child, + .table-responsive > .table-bordered > thead > tr > td:last-child, + .table-responsive > .table-bordered > tbody > tr > td:last-child, + .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; + } + .table-responsive > .table-bordered > tbody > tr:last-child > th, + .table-responsive > .table-bordered > tfoot > tr:last-child > th, + .table-responsive > .table-bordered > tbody > tr:last-child > td, + .table-responsive > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0; + } +} +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: inherit; + color: #333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} +label { + display: inline-block; + max-width: 100%; + margin-bottom: 5px; + font-weight: bold; +} +input[type="search"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + line-height: normal; +} +input[type="file"] { + display: block; +} +input[type="range"] { + display: block; + width: 100%; +} +select[multiple], +select[size] { + height: auto; +} +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +output { + display: block; + padding-top: 7px; + font-size: 14px; + line-height: 1.42857143; + color: #555; +} +.form-control { + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + color: #555; + background-color: #fff; + background-image: none; + border: 1px solid #ccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; +} +.form-control:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); +} +.form-control::-moz-placeholder { + color: #999; + opacity: 1; +} +.form-control:-ms-input-placeholder { + color: #999; +} +.form-control::-webkit-input-placeholder { + color: #999; +} +.form-control[disabled], +.form-control[readonly], +fieldset[disabled] .form-control { + cursor: not-allowed; + background-color: #eee; + opacity: 1; +} +textarea.form-control { + height: auto; +} +input[type="search"] { + -webkit-appearance: none; +} +@media screen and (-webkit-min-device-pixel-ratio: 0) { + input[type="date"], + input[type="time"], + input[type="datetime-local"], + input[type="month"] { + line-height: 34px; + } + input[type="date"].input-sm, + input[type="time"].input-sm, + input[type="datetime-local"].input-sm, + input[type="month"].input-sm { + line-height: 30px; + } + input[type="date"].input-lg, + input[type="time"].input-lg, + input[type="datetime-local"].input-lg, + input[type="month"].input-lg { + line-height: 46px; + } +} +.form-group { + margin-bottom: 15px; +} +.radio, +.checkbox { + position: relative; + display: block; + margin-top: 10px; + margin-bottom: 10px; +} +.radio label, +.checkbox label { + min-height: 20px; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; +} +.radio input[type="radio"], +.radio-inline input[type="radio"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + position: absolute; + margin-top: 4px \9; + margin-left: -20px; +} +.radio + .radio, +.checkbox + .checkbox { + margin-top: -5px; +} +.radio-inline, +.checkbox-inline { + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + vertical-align: middle; + cursor: pointer; +} +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; +} +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"].disabled, +input[type="checkbox"].disabled, +fieldset[disabled] input[type="radio"], +fieldset[disabled] input[type="checkbox"] { + cursor: not-allowed; +} +.radio-inline.disabled, +.checkbox-inline.disabled, +fieldset[disabled] .radio-inline, +fieldset[disabled] .checkbox-inline { + cursor: not-allowed; +} +.radio.disabled label, +.checkbox.disabled label, +fieldset[disabled] .radio label, +fieldset[disabled] .checkbox label { + cursor: not-allowed; +} +.form-control-static { + padding-top: 7px; + padding-bottom: 7px; + margin-bottom: 0; +} +.form-control-static.input-lg, +.form-control-static.input-sm { + padding-right: 0; + padding-left: 0; +} +.input-sm, +.form-group-sm .form-control { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-sm, +select.form-group-sm .form-control { + height: 30px; + line-height: 30px; +} +textarea.input-sm, +textarea.form-group-sm .form-control, +select[multiple].input-sm, +select[multiple].form-group-sm .form-control { + height: auto; +} +.input-lg, +.form-group-lg .form-control { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} +select.input-lg, +select.form-group-lg .form-control { + height: 46px; + line-height: 46px; +} +textarea.input-lg, +textarea.form-group-lg .form-control, +select[multiple].input-lg, +select[multiple].form-group-lg .form-control { + height: auto; +} +.has-feedback { + position: relative; +} +.has-feedback .form-control { + padding-right: 42.5px; +} +.form-control-feedback { + position: absolute; + top: 0; + right: 0; + z-index: 2; + display: block; + width: 34px; + height: 34px; + line-height: 34px; + text-align: center; + pointer-events: none; +} +.input-lg + .form-control-feedback { + width: 46px; + height: 46px; + line-height: 46px; +} +.input-sm + .form-control-feedback { + width: 30px; + height: 30px; + line-height: 30px; +} +.has-success .help-block, +.has-success .control-label, +.has-success .radio, +.has-success .checkbox, +.has-success .radio-inline, +.has-success .checkbox-inline, +.has-success.radio label, +.has-success.checkbox label, +.has-success.radio-inline label, +.has-success.checkbox-inline label { + color: #3c763d; +} +.has-success .form-control { + border-color: #3c763d; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-success .form-control:focus { + border-color: #2b542c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; +} +.has-success .input-group-addon { + color: #3c763d; + background-color: #dff0d8; + border-color: #3c763d; +} +.has-success .form-control-feedback { + color: #3c763d; +} +.has-warning .help-block, +.has-warning .control-label, +.has-warning .radio, +.has-warning .checkbox, +.has-warning .radio-inline, +.has-warning .checkbox-inline, +.has-warning.radio label, +.has-warning.checkbox label, +.has-warning.radio-inline label, +.has-warning.checkbox-inline label { + color: #8a6d3b; +} +.has-warning .form-control { + border-color: #8a6d3b; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-warning .form-control:focus { + border-color: #66512c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; +} +.has-warning .input-group-addon { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #8a6d3b; +} +.has-warning .form-control-feedback { + color: #8a6d3b; +} +.has-error .help-block, +.has-error .control-label, +.has-error .radio, +.has-error .checkbox, +.has-error .radio-inline, +.has-error .checkbox-inline, +.has-error.radio label, +.has-error.checkbox label, +.has-error.radio-inline label, +.has-error.checkbox-inline label { + color: #a94442; +} +.has-error .form-control { + border-color: #a94442; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-error .form-control:focus { + border-color: #843534; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; +} +.has-error .input-group-addon { + color: #a94442; + background-color: #f2dede; + border-color: #a94442; +} +.has-error .form-control-feedback { + color: #a94442; +} +.has-feedback label ~ .form-control-feedback { + top: 25px; +} +.has-feedback label.sr-only ~ .form-control-feedback { + top: 0; +} +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #737373; +} +@media (min-width: 768px) { + .form-inline .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .form-inline .form-control-static { + display: inline-block; + } + .form-inline .input-group { + display: inline-table; + vertical-align: middle; + } + .form-inline .input-group .input-group-addon, + .form-inline .input-group .input-group-btn, + .form-inline .input-group .form-control { + width: auto; + } + .form-inline .input-group > .form-control { + width: 100%; + } + .form-inline .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio, + .form-inline .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio label, + .form-inline .checkbox label { + padding-left: 0; + } + .form-inline .radio input[type="radio"], + .form-inline .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .form-inline .has-feedback .form-control-feedback { + top: 0; + } +} +.form-horizontal .radio, +.form-horizontal .checkbox, +.form-horizontal .radio-inline, +.form-horizontal .checkbox-inline { + padding-top: 7px; + margin-top: 0; + margin-bottom: 0; +} +.form-horizontal .radio, +.form-horizontal .checkbox { + min-height: 27px; +} +.form-horizontal .form-group { + margin-right: -15px; + margin-left: -15px; +} +@media (min-width: 768px) { + .form-horizontal .control-label { + padding-top: 7px; + margin-bottom: 0; + text-align: right; + } +} +.form-horizontal .has-feedback .form-control-feedback { + right: 15px; +} +@media (min-width: 768px) { + .form-horizontal .form-group-lg .control-label { + padding-top: 14.3px; + } +} +@media (min-width: 768px) { + .form-horizontal .form-group-sm .control-label { + padding-top: 6px; + } +} +.btn { + display: inline-block; + padding: 6px 12px; + margin-bottom: 0; + font-size: 14px; + font-weight: normal; + line-height: 1.42857143; + text-align: center; + white-space: nowrap; + vertical-align: middle; + -ms-touch-action: manipulation; + touch-action: manipulation; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; +} +.btn:focus, +.btn:active:focus, +.btn.active:focus, +.btn.focus, +.btn:active.focus, +.btn.active.focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.btn:hover, +.btn:focus, +.btn.focus { + color: #333; + text-decoration: none; +} +.btn:active, +.btn.active { + background-image: none; + outline: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} +.btn.disabled, +.btn[disabled], +fieldset[disabled] .btn { + pointer-events: none; + cursor: not-allowed; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + box-shadow: none; + opacity: .65; +} +.btn-default { + color: #333; + background-color: #fff; + border-color: #ccc; +} +.btn-default:hover, +.btn-default:focus, +.btn-default.focus, +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + color: #333; + background-color: #e6e6e6; + border-color: #adadad; +} +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + background-image: none; +} +.btn-default.disabled, +.btn-default[disabled], +fieldset[disabled] .btn-default, +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled.focus, +.btn-default[disabled].focus, +fieldset[disabled] .btn-default.focus, +.btn-default.disabled:active, +.btn-default[disabled]:active, +fieldset[disabled] .btn-default:active, +.btn-default.disabled.active, +.btn-default[disabled].active, +fieldset[disabled] .btn-default.active { + background-color: #fff; + border-color: #ccc; +} +.btn-default .badge { + color: #fff; + background-color: #333; +} +.btn-primary { + color: #fff; + background-color: #337ab7; + border-color: #2e6da4; +} +.btn-primary:hover, +.btn-primary:focus, +.btn-primary.focus, +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + color: #fff; + background-color: #286090; + border-color: #204d74; +} +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + background-image: none; +} +.btn-primary.disabled, +.btn-primary[disabled], +fieldset[disabled] .btn-primary, +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled.focus, +.btn-primary[disabled].focus, +fieldset[disabled] .btn-primary.focus, +.btn-primary.disabled:active, +.btn-primary[disabled]:active, +fieldset[disabled] .btn-primary:active, +.btn-primary.disabled.active, +.btn-primary[disabled].active, +fieldset[disabled] .btn-primary.active { + background-color: #337ab7; + border-color: #2e6da4; +} +.btn-primary .badge { + color: #337ab7; + background-color: #fff; +} +.btn-success { + color: #fff; + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success:hover, +.btn-success:focus, +.btn-success.focus, +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + color: #fff; + background-color: #449d44; + border-color: #398439; +} +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + background-image: none; +} +.btn-success.disabled, +.btn-success[disabled], +fieldset[disabled] .btn-success, +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled.focus, +.btn-success[disabled].focus, +fieldset[disabled] .btn-success.focus, +.btn-success.disabled:active, +.btn-success[disabled]:active, +fieldset[disabled] .btn-success:active, +.btn-success.disabled.active, +.btn-success[disabled].active, +fieldset[disabled] .btn-success.active { + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success .badge { + color: #5cb85c; + background-color: #fff; +} +.btn-info { + color: #fff; + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info:hover, +.btn-info:focus, +.btn-info.focus, +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + color: #fff; + background-color: #31b0d5; + border-color: #269abc; +} +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + background-image: none; +} +.btn-info.disabled, +.btn-info[disabled], +fieldset[disabled] .btn-info, +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled.focus, +.btn-info[disabled].focus, +fieldset[disabled] .btn-info.focus, +.btn-info.disabled:active, +.btn-info[disabled]:active, +fieldset[disabled] .btn-info:active, +.btn-info.disabled.active, +.btn-info[disabled].active, +fieldset[disabled] .btn-info.active { + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info .badge { + color: #5bc0de; + background-color: #fff; +} +.btn-warning { + color: #fff; + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning:hover, +.btn-warning:focus, +.btn-warning.focus, +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + color: #fff; + background-color: #ec971f; + border-color: #d58512; +} +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + background-image: none; +} +.btn-warning.disabled, +.btn-warning[disabled], +fieldset[disabled] .btn-warning, +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled.focus, +.btn-warning[disabled].focus, +fieldset[disabled] .btn-warning.focus, +.btn-warning.disabled:active, +.btn-warning[disabled]:active, +fieldset[disabled] .btn-warning:active, +.btn-warning.disabled.active, +.btn-warning[disabled].active, +fieldset[disabled] .btn-warning.active { + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning .badge { + color: #f0ad4e; + background-color: #fff; +} +.btn-danger { + color: #fff; + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger:hover, +.btn-danger:focus, +.btn-danger.focus, +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + color: #fff; + background-color: #c9302c; + border-color: #ac2925; +} +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + background-image: none; +} +.btn-danger.disabled, +.btn-danger[disabled], +fieldset[disabled] .btn-danger, +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled.focus, +.btn-danger[disabled].focus, +fieldset[disabled] .btn-danger.focus, +.btn-danger.disabled:active, +.btn-danger[disabled]:active, +fieldset[disabled] .btn-danger:active, +.btn-danger.disabled.active, +.btn-danger[disabled].active, +fieldset[disabled] .btn-danger.active { + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger .badge { + color: #d9534f; + background-color: #fff; +} +.btn-link { + font-weight: normal; + color: #337ab7; + border-radius: 0; +} +.btn-link, +.btn-link:active, +.btn-link.active, +.btn-link[disabled], +fieldset[disabled] .btn-link { + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-link, +.btn-link:hover, +.btn-link:focus, +.btn-link:active { + border-color: transparent; +} +.btn-link:hover, +.btn-link:focus { + color: #23527c; + text-decoration: underline; + background-color: transparent; +} +.btn-link[disabled]:hover, +fieldset[disabled] .btn-link:hover, +.btn-link[disabled]:focus, +fieldset[disabled] .btn-link:focus { + color: #777; + text-decoration: none; +} +.btn-lg, +.btn-group-lg > .btn { + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} +.btn-sm, +.btn-group-sm > .btn { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-xs, +.btn-group-xs > .btn { + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-block { + display: block; + width: 100%; +} +.btn-block + .btn-block { + margin-top: 5px; +} +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} +.fade { + opacity: 0; + -webkit-transition: opacity .15s linear; + -o-transition: opacity .15s linear; + transition: opacity .15s linear; +} +.fade.in { + opacity: 1; +} +.collapse { + display: none; + visibility: hidden; +} +.collapse.in { + display: block; + visibility: visible; +} +tr.collapse.in { + display: table-row; +} +tbody.collapse.in { + display: table-row-group; +} +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-timing-function: ease; + -o-transition-timing-function: ease; + transition-timing-function: ease; + -webkit-transition-duration: .35s; + -o-transition-duration: .35s; + transition-duration: .35s; + -webkit-transition-property: height, visibility; + -o-transition-property: height, visibility; + transition-property: height, visibility; +} +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px solid; + border-right: 4px solid transparent; + border-left: 4px solid transparent; +} +.dropdown { + position: relative; +} +.dropdown-toggle:focus { + outline: 0; +} +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + font-size: 14px; + text-align: left; + list-style: none; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, .15); + border-radius: 4px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175); + box-shadow: 0 6px 12px rgba(0, 0, 0, .175); +} +.dropdown-menu.pull-right { + right: 0; + left: auto; +} +.dropdown-menu .divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.42857143; + color: #333; + white-space: nowrap; +} +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + color: #262626; + text-decoration: none; + background-color: #f5f5f5; +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #fff; + text-decoration: none; + background-color: #337ab7; + outline: 0; +} +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + color: #777; +} +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + text-decoration: none; + cursor: not-allowed; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.open > .dropdown-menu { + display: block; +} +.open > a { + outline: 0; +} +.dropdown-menu-right { + right: 0; + left: auto; +} +.dropdown-menu-left { + right: auto; + left: 0; +} +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: 12px; + line-height: 1.42857143; + color: #777; + white-space: nowrap; +} +.dropdown-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 990; +} +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + content: ""; + border-top: 0; + border-bottom: 4px solid; +} +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 1px; +} +@media (min-width: 768px) { + .navbar-right .dropdown-menu { + right: 0; + left: auto; + } + .navbar-right .dropdown-menu-left { + right: auto; + left: 0; + } +} +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; +} +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + float: left; +} +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover, +.btn-group > .btn:focus, +.btn-group-vertical > .btn:focus, +.btn-group > .btn:active, +.btn-group-vertical > .btn:active, +.btn-group > .btn.active, +.btn-group-vertical > .btn.active { + z-index: 2; +} +.btn-group .btn + .btn, +.btn-group .btn + .btn-group, +.btn-group .btn-group + .btn, +.btn-group .btn-group + .btn-group { + margin-left: -1px; +} +.btn-toolbar { + margin-left: -5px; +} +.btn-toolbar .btn-group, +.btn-toolbar .input-group { + float: left; +} +.btn-toolbar > .btn, +.btn-toolbar > .btn-group, +.btn-toolbar > .input-group { + margin-left: 5px; +} +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} +.btn-group > .btn:first-child { + margin-left: 0; +} +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group > .btn-group { + float: left; +} +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group > .btn-group:first-child > .btn:last-child, +.btn-group > .btn-group:first-child > .dropdown-toggle { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.btn-group > .btn-group:last-child > .btn:first-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} +.btn-group > .btn + .dropdown-toggle { + padding-right: 8px; + padding-left: 8px; +} +.btn-group > .btn-lg + .dropdown-toggle { + padding-right: 12px; + padding-left: 12px; +} +.btn-group.open .dropdown-toggle { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} +.btn-group.open .dropdown-toggle.btn-link { + -webkit-box-shadow: none; + box-shadow: none; +} +.btn .caret { + margin-left: 0; +} +.btn-lg .caret { + border-width: 5px 5px 0; + border-bottom-width: 0; +} +.dropup .btn-lg .caret { + border-width: 0 5px 5px; +} +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group, +.btn-group-vertical > .btn-group > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; +} +.btn-group-vertical > .btn-group > .btn { + float: none; +} +.btn-group-vertical > .btn + .btn, +.btn-group-vertical > .btn + .btn-group, +.btn-group-vertical > .btn-group + .btn, +.btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; +} +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0; +} +.btn-group-vertical > .btn:first-child:not(:last-child) { + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-left-radius: 4px; +} +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.btn-group-justified { + display: table; + width: 100%; + table-layout: fixed; + border-collapse: separate; +} +.btn-group-justified > .btn, +.btn-group-justified > .btn-group { + display: table-cell; + float: none; + width: 1%; +} +.btn-group-justified > .btn-group .btn { + width: 100%; +} +.btn-group-justified > .btn-group .dropdown-menu { + left: auto; +} +[data-toggle="buttons"] > .btn input[type="radio"], +[data-toggle="buttons"] > .btn-group > .btn input[type="radio"], +[data-toggle="buttons"] > .btn input[type="checkbox"], +[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} +.input-group { + position: relative; + display: table; + border-collapse: separate; +} +.input-group[class*="col-"] { + float: none; + padding-right: 0; + padding-left: 0; +} +.input-group .form-control { + position: relative; + z-index: 2; + float: left; + width: 100%; + margin-bottom: 0; +} +.input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} +select.input-group-lg > .form-control, +select.input-group-lg > .input-group-addon, +select.input-group-lg > .input-group-btn > .btn { + height: 46px; + line-height: 46px; +} +textarea.input-group-lg > .form-control, +textarea.input-group-lg > .input-group-addon, +textarea.input-group-lg > .input-group-btn > .btn, +select[multiple].input-group-lg > .form-control, +select[multiple].input-group-lg > .input-group-addon, +select[multiple].input-group-lg > .input-group-btn > .btn { + height: auto; +} +.input-group-sm > .form-control, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .btn { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-group-sm > .form-control, +select.input-group-sm > .input-group-addon, +select.input-group-sm > .input-group-btn > .btn { + height: 30px; + line-height: 30px; +} +textarea.input-group-sm > .form-control, +textarea.input-group-sm > .input-group-addon, +textarea.input-group-sm > .input-group-btn > .btn, +select[multiple].input-group-sm > .form-control, +select[multiple].input-group-sm > .input-group-addon, +select[multiple].input-group-sm > .input-group-btn > .btn { + height: auto; +} +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: table-cell; +} +.input-group-addon:not(:first-child):not(:last-child), +.input-group-btn:not(:first-child):not(:last-child), +.input-group .form-control:not(:first-child):not(:last-child) { + border-radius: 0; +} +.input-group-addon, +.input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle; +} +.input-group-addon { + padding: 6px 12px; + font-size: 14px; + font-weight: normal; + line-height: 1; + color: #555; + text-align: center; + background-color: #eee; + border: 1px solid #ccc; + border-radius: 4px; +} +.input-group-addon.input-sm { + padding: 5px 10px; + font-size: 12px; + border-radius: 3px; +} +.input-group-addon.input-lg { + padding: 10px 16px; + font-size: 18px; + border-radius: 6px; +} +.input-group-addon input[type="radio"], +.input-group-addon input[type="checkbox"] { + margin-top: 0; +} +.input-group .form-control:first-child, +.input-group-addon:first-child, +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group > .btn, +.input-group-btn:first-child > .dropdown-toggle, +.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.input-group-addon:first-child { + border-right: 0; +} +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group > .btn, +.input-group-btn:last-child > .dropdown-toggle, +.input-group-btn:first-child > .btn:not(:first-child), +.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.input-group-addon:last-child { + border-left: 0; +} +.input-group-btn { + position: relative; + font-size: 0; + white-space: nowrap; +} +.input-group-btn > .btn { + position: relative; +} +.input-group-btn > .btn + .btn { + margin-left: -1px; +} +.input-group-btn > .btn:hover, +.input-group-btn > .btn:focus, +.input-group-btn > .btn:active { + z-index: 2; +} +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group { + margin-right: -1px; +} +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group { + margin-left: -1px; +} +.nav { + padding-left: 0; + margin-bottom: 0; + list-style: none; +} +.nav > li { + position: relative; + display: block; +} +.nav > li > a { + position: relative; + display: block; + padding: 10px 15px; +} +.nav > li > a:hover, +.nav > li > a:focus { + text-decoration: none; + background-color: #eee; +} +.nav > li.disabled > a { + color: #777; +} +.nav > li.disabled > a:hover, +.nav > li.disabled > a:focus { + color: #777; + text-decoration: none; + cursor: not-allowed; + background-color: transparent; +} +.nav .open > a, +.nav .open > a:hover, +.nav .open > a:focus { + background-color: #eee; + border-color: #337ab7; +} +.nav .nav-divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.nav > li > a > img { + max-width: none; +} +.nav-tabs { + border-bottom: 1px solid #ddd; +} +.nav-tabs > li { + float: left; + margin-bottom: -1px; +} +.nav-tabs > li > a { + margin-right: 2px; + line-height: 1.42857143; + border: 1px solid transparent; + border-radius: 4px 4px 0 0; +} +.nav-tabs > li > a:hover { + border-color: #eee #eee #ddd; +} +.nav-tabs > li.active > a, +.nav-tabs > li.active > a:hover, +.nav-tabs > li.active > a:focus { + color: #555; + cursor: default; + background-color: #fff; + border: 1px solid #ddd; + border-bottom-color: transparent; +} +.nav-tabs.nav-justified { + width: 100%; + border-bottom: 0; +} +.nav-tabs.nav-justified > li { + float: none; +} +.nav-tabs.nav-justified > li > a { + margin-bottom: 5px; + text-align: center; +} +.nav-tabs.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-tabs.nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs.nav-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs.nav-justified > .active > a, +.nav-tabs.nav-justified > .active > a:hover, +.nav-tabs.nav-justified > .active > a:focus { + border: 1px solid #ddd; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li > a { + border-bottom: 1px solid #ddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs.nav-justified > .active > a, + .nav-tabs.nav-justified > .active > a:hover, + .nav-tabs.nav-justified > .active > a:focus { + border-bottom-color: #fff; + } +} +.nav-pills > li { + float: left; +} +.nav-pills > li > a { + border-radius: 4px; +} +.nav-pills > li + li { + margin-left: 2px; +} +.nav-pills > li.active > a, +.nav-pills > li.active > a:hover, +.nav-pills > li.active > a:focus { + color: #fff; + background-color: #337ab7; +} +.nav-stacked > li { + float: none; +} +.nav-stacked > li + li { + margin-top: 2px; + margin-left: 0; +} +.nav-justified { + width: 100%; +} +.nav-justified > li { + float: none; +} +.nav-justified > li > a { + margin-bottom: 5px; + text-align: center; +} +.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs-justified { + border-bottom: 0; +} +.nav-tabs-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs-justified > .active > a, +.nav-tabs-justified > .active > a:hover, +.nav-tabs-justified > .active > a:focus { + border: 1px solid #ddd; +} +@media (min-width: 768px) { + .nav-tabs-justified > li > a { + border-bottom: 1px solid #ddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs-justified > .active > a, + .nav-tabs-justified > .active > a:hover, + .nav-tabs-justified > .active > a:focus { + border-bottom-color: #fff; + } +} +.tab-content > .tab-pane { + display: none; + visibility: hidden; +} +.tab-content > .active { + display: block; + visibility: visible; +} +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.navbar { + position: relative; + min-height: 50px; + margin-bottom: 20px; + border: 1px solid transparent; +} +@media (min-width: 768px) { + .navbar { + border-radius: 4px; + } +} +@media (min-width: 768px) { + .navbar-header { + float: left; + } +} +.navbar-collapse { + padding-right: 15px; + padding-left: 15px; + overflow-x: visible; + -webkit-overflow-scrolling: touch; + border-top: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); +} +.navbar-collapse.in { + overflow-y: auto; +} +@media (min-width: 768px) { + .navbar-collapse { + width: auto; + border-top: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + .navbar-collapse.collapse { + display: block !important; + height: auto !important; + padding-bottom: 0; + overflow: visible !important; + visibility: visible !important; + } + .navbar-collapse.in { + overflow-y: visible; + } + .navbar-fixed-top .navbar-collapse, + .navbar-static-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + padding-right: 0; + padding-left: 0; + } +} +.navbar-fixed-top .navbar-collapse, +.navbar-fixed-bottom .navbar-collapse { + max-height: 340px; +} +@media (max-device-width: 480px) and (orientation: landscape) { + .navbar-fixed-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + max-height: 200px; + } +} +.container > .navbar-header, +.container-fluid > .navbar-header, +.container > .navbar-collapse, +.container-fluid > .navbar-collapse { + margin-right: -15px; + margin-left: -15px; +} +@media (min-width: 768px) { + .container > .navbar-header, + .container-fluid > .navbar-header, + .container > .navbar-collapse, + .container-fluid > .navbar-collapse { + margin-right: 0; + margin-left: 0; + } +} +.navbar-static-top { + z-index: 1000; + border-width: 0 0 1px; +} +@media (min-width: 768px) { + .navbar-static-top { + border-radius: 0; + } +} +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; +} +@media (min-width: 768px) { + .navbar-fixed-top, + .navbar-fixed-bottom { + border-radius: 0; + } +} +.navbar-fixed-top { + top: 0; + border-width: 0 0 1px; +} +.navbar-fixed-bottom { + bottom: 0; + margin-bottom: 0; + border-width: 1px 0 0; +} +.navbar-brand { + float: left; + height: 50px; + padding: 15px 15px; + font-size: 18px; + line-height: 20px; +} +.navbar-brand:hover, +.navbar-brand:focus { + text-decoration: none; +} +.navbar-brand > img { + display: block; +} +@media (min-width: 768px) { + .navbar > .container .navbar-brand, + .navbar > .container-fluid .navbar-brand { + margin-left: -15px; + } +} +.navbar-toggle { + position: relative; + float: right; + padding: 9px 10px; + margin-top: 8px; + margin-right: 15px; + margin-bottom: 8px; + background-color: transparent; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; +} +.navbar-toggle:focus { + outline: 0; +} +.navbar-toggle .icon-bar { + display: block; + width: 22px; + height: 2px; + border-radius: 1px; +} +.navbar-toggle .icon-bar + .icon-bar { + margin-top: 4px; +} +@media (min-width: 768px) { + .navbar-toggle { + display: none; + } +} +.navbar-nav { + margin: 7.5px -15px; +} +.navbar-nav > li > a { + padding-top: 10px; + padding-bottom: 10px; + line-height: 20px; +} +@media (max-width: 767px) { + .navbar-nav .open .dropdown-menu { + position: static; + float: none; + width: auto; + margin-top: 0; + background-color: transparent; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + .navbar-nav .open .dropdown-menu > li > a, + .navbar-nav .open .dropdown-menu .dropdown-header { + padding: 5px 15px 5px 25px; + } + .navbar-nav .open .dropdown-menu > li > a { + line-height: 20px; + } + .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-nav .open .dropdown-menu > li > a:focus { + background-image: none; + } +} +@media (min-width: 768px) { + .navbar-nav { + float: left; + margin: 0; + } + .navbar-nav > li { + float: left; + } + .navbar-nav > li > a { + padding-top: 15px; + padding-bottom: 15px; + } +} +.navbar-form { + padding: 10px 15px; + margin-top: 8px; + margin-right: -15px; + margin-bottom: 8px; + margin-left: -15px; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); +} +@media (min-width: 768px) { + .navbar-form .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .navbar-form .form-control-static { + display: inline-block; + } + .navbar-form .input-group { + display: inline-table; + vertical-align: middle; + } + .navbar-form .input-group .input-group-addon, + .navbar-form .input-group .input-group-btn, + .navbar-form .input-group .form-control { + width: auto; + } + .navbar-form .input-group > .form-control { + width: 100%; + } + .navbar-form .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio, + .navbar-form .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio label, + .navbar-form .checkbox label { + padding-left: 0; + } + .navbar-form .radio input[type="radio"], + .navbar-form .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .navbar-form .has-feedback .form-control-feedback { + top: 0; + } +} +@media (max-width: 767px) { + .navbar-form .form-group { + margin-bottom: 5px; + } + .navbar-form .form-group:last-child { + margin-bottom: 0; + } +} +@media (min-width: 768px) { + .navbar-form { + width: auto; + padding-top: 0; + padding-bottom: 0; + margin-right: 0; + margin-left: 0; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } +} +.navbar-nav > li > .dropdown-menu { + margin-top: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.navbar-btn { + margin-top: 8px; + margin-bottom: 8px; +} +.navbar-btn.btn-sm { + margin-top: 10px; + margin-bottom: 10px; +} +.navbar-btn.btn-xs { + margin-top: 14px; + margin-bottom: 14px; +} +.navbar-text { + margin-top: 15px; + margin-bottom: 15px; +} +@media (min-width: 768px) { + .navbar-text { + float: left; + margin-right: 15px; + margin-left: 15px; + } +} +@media (min-width: 768px) { + .navbar-left { + float: left !important; + } + .navbar-right { + float: right !important; + margin-right: -15px; + } + .navbar-right ~ .navbar-right { + margin-right: 0; + } +} +.navbar-default { + background-color: #f8f8f8; + border-color: #e7e7e7; +} +.navbar-default .navbar-brand { + color: #777; +} +.navbar-default .navbar-brand:hover, +.navbar-default .navbar-brand:focus { + color: #5e5e5e; + background-color: transparent; +} +.navbar-default .navbar-text { + color: #777; +} +.navbar-default .navbar-nav > li > a { + color: #777; +} +.navbar-default .navbar-nav > li > a:hover, +.navbar-default .navbar-nav > li > a:focus { + color: #333; + background-color: transparent; +} +.navbar-default .navbar-nav > .active > a, +.navbar-default .navbar-nav > .active > a:hover, +.navbar-default .navbar-nav > .active > a:focus { + color: #555; + background-color: #e7e7e7; +} +.navbar-default .navbar-nav > .disabled > a, +.navbar-default .navbar-nav > .disabled > a:hover, +.navbar-default .navbar-nav > .disabled > a:focus { + color: #ccc; + background-color: transparent; +} +.navbar-default .navbar-toggle { + border-color: #ddd; +} +.navbar-default .navbar-toggle:hover, +.navbar-default .navbar-toggle:focus { + background-color: #ddd; +} +.navbar-default .navbar-toggle .icon-bar { + background-color: #888; +} +.navbar-default .navbar-collapse, +.navbar-default .navbar-form { + border-color: #e7e7e7; +} +.navbar-default .navbar-nav > .open > a, +.navbar-default .navbar-nav > .open > a:hover, +.navbar-default .navbar-nav > .open > a:focus { + color: #555; + background-color: #e7e7e7; +} +@media (max-width: 767px) { + .navbar-default .navbar-nav .open .dropdown-menu > li > a { + color: #777; + } + .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { + color: #333; + background-color: transparent; + } + .navbar-default .navbar-nav .open .dropdown-menu > .active > a, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #555; + background-color: #e7e7e7; + } + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #ccc; + background-color: transparent; + } +} +.navbar-default .navbar-link { + color: #777; +} +.navbar-default .navbar-link:hover { + color: #333; +} +.navbar-default .btn-link { + color: #777; +} +.navbar-default .btn-link:hover, +.navbar-default .btn-link:focus { + color: #333; +} +.navbar-default .btn-link[disabled]:hover, +fieldset[disabled] .navbar-default .btn-link:hover, +.navbar-default .btn-link[disabled]:focus, +fieldset[disabled] .navbar-default .btn-link:focus { + color: #ccc; +} +.navbar-inverse { + background-color: #428dfe; + border-color: #032740; +} +.navbar-inverse .navbar-brand { + color: #ffffff; +} +.navbar-inverse .navbar-brand:hover, +.navbar-inverse .navbar-brand:focus { + color: #fff; + background-color: transparent; +} +.navbar-inverse .navbar-text { + color: #ffffff; +} +.navbar-inverse .navbar-nav > li > a { + color: #ffffff; +} +.navbar-inverse .navbar-nav > li > a:hover, +.navbar-inverse .navbar-nav > li > a:focus { + color: #fff; + background-color: transparent; +} +.navbar-inverse .navbar-nav > .active > a, +.navbar-inverse .navbar-nav > .active > a:hover, +.navbar-inverse .navbar-nav > .active > a:focus { + color: #fff; + background-color: #080808; +} +.navbar-inverse .navbar-nav > .disabled > a, +.navbar-inverse .navbar-nav > .disabled > a:hover, +.navbar-inverse .navbar-nav > .disabled > a:focus { + color: #444; + background-color: transparent; +} +.navbar-inverse .navbar-toggle { + border-color: #333; +} +.navbar-inverse .navbar-toggle:hover, +.navbar-inverse .navbar-toggle:focus { + background-color: #333; +} +.navbar-inverse .navbar-toggle .icon-bar { + background-color: #fff; +} +.navbar-inverse .navbar-collapse, +.navbar-inverse .navbar-form { + border-color: #101010; +} +.navbar-inverse .navbar-nav > .open > a, +.navbar-inverse .navbar-nav > .open > a:hover, +.navbar-inverse .navbar-nav > .open > a:focus { + color: #fff; + background-color: #080808; +} +@media (max-width: 767px) { + .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { + border-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu .divider { + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { + color: #9d9d9d; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { + color: #fff; + background-color: transparent; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #fff; + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #444; + background-color: transparent; + } +} +.navbar-inverse .navbar-link { + color: #9d9d9d; +} +.navbar-inverse .navbar-link:hover { + color: #fff; +} +.navbar-inverse .btn-link { + color: #9d9d9d; +} +.navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link:focus { + color: #fff; +} +.navbar-inverse .btn-link[disabled]:hover, +fieldset[disabled] .navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link[disabled]:focus, +fieldset[disabled] .navbar-inverse .btn-link:focus { + color: #444; +} +.breadcrumb { + padding: 8px 15px; + margin-bottom: 20px; + list-style: none; + background-color: #f5f5f5; + border-radius: 4px; +} +.breadcrumb > li { + display: inline-block; +} +.breadcrumb > li + li:before { + padding: 0 5px; + color: #ccc; + content: "/\00a0"; +} +.breadcrumb > .active { + color: #777; +} +.pagination { + display: inline-block; + padding-left: 0; + margin: 20px 0; + border-radius: 4px; +} +.pagination > li { + display: inline; +} +.pagination > li > a, +.pagination > li > span { + position: relative; + float: left; + padding: 6px 12px; + margin-left: -1px; + line-height: 1.42857143; + color: #337ab7; + text-decoration: none; + background-color: #fff; + border: 1px solid #ddd; +} +.pagination > li:first-child > a, +.pagination > li:first-child > span { + margin-left: 0; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} +.pagination > li:last-child > a, +.pagination > li:last-child > span { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} +.pagination > li > a:hover, +.pagination > li > span:hover, +.pagination > li > a:focus, +.pagination > li > span:focus { + color: #23527c; + background-color: #eee; + border-color: #ddd; +} +.pagination > .active > a, +.pagination > .active > span, +.pagination > .active > a:hover, +.pagination > .active > span:hover, +.pagination > .active > a:focus, +.pagination > .active > span:focus { + z-index: 2; + color: #fff; + cursor: default; + background-color: #337ab7; + border-color: #337ab7; +} +.pagination > .disabled > span, +.pagination > .disabled > span:hover, +.pagination > .disabled > span:focus, +.pagination > .disabled > a, +.pagination > .disabled > a:hover, +.pagination > .disabled > a:focus { + color: #777; + cursor: not-allowed; + background-color: #fff; + border-color: #ddd; +} +.pagination-lg > li > a, +.pagination-lg > li > span { + padding: 10px 16px; + font-size: 18px; +} +.pagination-lg > li:first-child > a, +.pagination-lg > li:first-child > span { + border-top-left-radius: 6px; + border-bottom-left-radius: 6px; +} +.pagination-lg > li:last-child > a, +.pagination-lg > li:last-child > span { + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; +} +.pagination-sm > li > a, +.pagination-sm > li > span { + padding: 5px 10px; + font-size: 12px; +} +.pagination-sm > li:first-child > a, +.pagination-sm > li:first-child > span { + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; +} +.pagination-sm > li:last-child > a, +.pagination-sm > li:last-child > span { + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} +.pager { + padding-left: 0; + margin: 20px 0; + text-align: center; + list-style: none; +} +.pager li { + display: inline; +} +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 15px; +} +.pager li > a:hover, +.pager li > a:focus { + text-decoration: none; + background-color: #eee; +} +.pager .next > a, +.pager .next > span { + float: right; +} +.pager .previous > a, +.pager .previous > span { + float: left; +} +.pager .disabled > a, +.pager .disabled > a:hover, +.pager .disabled > a:focus, +.pager .disabled > span { + color: #777; + cursor: not-allowed; + background-color: #fff; +} +.label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25em; +} +a.label:hover, +a.label:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} +.label:empty { + display: none; +} +.btn .label { + position: relative; + top: -1px; +} +.label-default { + background-color: #777; +} +.label-default[href]:hover, +.label-default[href]:focus { + background-color: #5e5e5e; +} +.label-primary { + background-color: #337ab7; +} +.label-primary[href]:hover, +.label-primary[href]:focus { + background-color: #286090; +} +.label-success { + background-color: #5cb85c; +} +.label-success[href]:hover, +.label-success[href]:focus { + background-color: #449d44; +} +.label-info { + background-color: #5bc0de; +} +.label-info[href]:hover, +.label-info[href]:focus { + background-color: #31b0d5; +} +.label-warning { + background-color: #f0ad4e; +} +.label-warning[href]:hover, +.label-warning[href]:focus { + background-color: #ec971f; +} +.label-danger { + background-color: #d9534f; +} +.label-danger[href]:hover, +.label-danger[href]:focus { + background-color: #c9302c; +} +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: 12px; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + background-color: #777; + border-radius: 10px; +} +.badge:empty { + display: none; +} +.btn .badge { + position: relative; + top: -1px; +} +.btn-xs .badge { + top: 0; + padding: 1px 5px; +} +a.badge:hover, +a.badge:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} +.list-group-item.active > .badge, +.nav-pills > .active > a > .badge { + color: #337ab7; + background-color: #fff; +} +.list-group-item > .badge { + float: right; +} +.list-group-item > .badge + .badge { + margin-right: 5px; +} +.nav-pills > li > a > .badge { + margin-left: 3px; +} +.jumbotron { + padding: 30px 15px; + margin-bottom: 30px; + color: inherit; + background-color: #eee; +} +.jumbotron h1, +.jumbotron .h1 { + color: inherit; +} +.jumbotron p { + margin-bottom: 15px; + font-size: 21px; + font-weight: 200; +} +.jumbotron > hr { + border-top-color: #d5d5d5; +} +.container .jumbotron, +.container-fluid .jumbotron { + border-radius: 6px; +} +.jumbotron .container { + max-width: 100%; +} +@media screen and (min-width: 768px) { + .jumbotron { + padding: 48px 0; + } + .container .jumbotron, + .container-fluid .jumbotron { + padding-right: 60px; + padding-left: 60px; + } + .jumbotron h1, + .jumbotron .h1 { + font-size: 63px; + } +} +.thumbnail { + display: block; + padding: 4px; + margin-bottom: 20px; + line-height: 1.42857143; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: border .2s ease-in-out; + -o-transition: border .2s ease-in-out; + transition: border .2s ease-in-out; +} +.thumbnail > img, +.thumbnail a > img { + margin-right: auto; + margin-left: auto; +} +a.thumbnail:hover, +a.thumbnail:focus, +a.thumbnail.active { + border-color: #337ab7; +} +.thumbnail .caption { + padding: 9px; + color: #333; +} +.alert { + padding: 15px; + margin-bottom: 20px; + border: 1px solid transparent; + border-radius: 4px; +} +.alert h4 { + margin-top: 0; + color: inherit; +} +.alert .alert-link { + font-weight: bold; +} +.alert > p, +.alert > ul { + margin-bottom: 0; +} +.alert > p + p { + margin-top: 5px; +} +.alert-dismissable, +.alert-dismissible { + padding-right: 35px; +} +.alert-dismissable .close, +.alert-dismissible .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; +} +.alert-success { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; +} +.alert-success hr { + border-top-color: #c9e2b3; +} +.alert-success .alert-link { + color: #2b542c; +} +.alert-info { + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1; +} +.alert-info hr { + border-top-color: #a6e1ec; +} +.alert-info .alert-link { + color: #245269; +} +.alert-warning { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; +} +.alert-warning hr { + border-top-color: #f7e1b5; +} +.alert-warning .alert-link { + color: #66512c; +} +.alert-danger { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; +} +.alert-danger hr { + border-top-color: #e4b9c0; +} +.alert-danger .alert-link { + color: #843534; +} +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@-o-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +.progress { + height: 20px; + margin-bottom: 20px; + overflow: hidden; + background-color: #f5f5f5; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); +} +.progress-bar { + float: left; + width: 0; + height: 100%; + font-size: 12px; + line-height: 20px; + color: #fff; + text-align: center; + background-color: #337ab7; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); + -webkit-transition: width .6s ease; + -o-transition: width .6s ease; + transition: width .6s ease; +} +.progress-striped .progress-bar, +.progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + -webkit-background-size: 40px 40px; + background-size: 40px 40px; +} +.progress.active .progress-bar, +.progress-bar.active { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} +.progress-bar-success { + background-color: #5cb85c; +} +.progress-striped .progress-bar-success { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.progress-bar-info { + background-color: #5bc0de; +} +.progress-striped .progress-bar-info { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.progress-bar-warning { + background-color: #f0ad4e; +} +.progress-striped .progress-bar-warning { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.progress-bar-danger { + background-color: #d9534f; +} +.progress-striped .progress-bar-danger { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.media { + margin-top: 15px; +} +.media:first-child { + margin-top: 0; +} +.media-right, +.media > .pull-right { + padding-left: 10px; +} +.media-left, +.media > .pull-left { + padding-right: 10px; +} +.media-left, +.media-right, +.media-body { + display: table-cell; + vertical-align: top; +} +.media-middle { + vertical-align: middle; +} +.media-bottom { + vertical-align: bottom; +} +.media-heading { + margin-top: 0; + margin-bottom: 5px; +} +.media-list { + padding-left: 0; + list-style: none; +} +.list-group { + padding-left: 0; + margin-bottom: 20px; +} +.list-group-item { + position: relative; + display: block; + padding: 10px 15px; + margin-bottom: -1px; + background-color: #fff; + border: 1px solid #ddd; +} +.list-group-item:first-child { + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +a.list-group-item { + color: #555; +} +a.list-group-item .list-group-item-heading { + color: #333; +} +a.list-group-item:hover, +a.list-group-item:focus { + color: #555; + text-decoration: none; + background-color: #f5f5f5; +} +.list-group-item.disabled, +.list-group-item.disabled:hover, +.list-group-item.disabled:focus { + color: #777; + cursor: not-allowed; + background-color: #eee; +} +.list-group-item.disabled .list-group-item-heading, +.list-group-item.disabled:hover .list-group-item-heading, +.list-group-item.disabled:focus .list-group-item-heading { + color: inherit; +} +.list-group-item.disabled .list-group-item-text, +.list-group-item.disabled:hover .list-group-item-text, +.list-group-item.disabled:focus .list-group-item-text { + color: #777; +} +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + z-index: 2; + color: #fff; + background-color: #337ab7; + border-color: #337ab7; +} +.list-group-item.active .list-group-item-heading, +.list-group-item.active:hover .list-group-item-heading, +.list-group-item.active:focus .list-group-item-heading, +.list-group-item.active .list-group-item-heading > small, +.list-group-item.active:hover .list-group-item-heading > small, +.list-group-item.active:focus .list-group-item-heading > small, +.list-group-item.active .list-group-item-heading > .small, +.list-group-item.active:hover .list-group-item-heading > .small, +.list-group-item.active:focus .list-group-item-heading > .small { + color: inherit; +} +.list-group-item.active .list-group-item-text, +.list-group-item.active:hover .list-group-item-text, +.list-group-item.active:focus .list-group-item-text { + color: #c7ddef; +} +.list-group-item-success { + color: #3c763d; + background-color: #dff0d8; +} +a.list-group-item-success { + color: #3c763d; +} +a.list-group-item-success .list-group-item-heading { + color: inherit; +} +a.list-group-item-success:hover, +a.list-group-item-success:focus { + color: #3c763d; + background-color: #d0e9c6; +} +a.list-group-item-success.active, +a.list-group-item-success.active:hover, +a.list-group-item-success.active:focus { + color: #fff; + background-color: #3c763d; + border-color: #3c763d; +} +.list-group-item-info { + color: #31708f; + background-color: #d9edf7; +} +a.list-group-item-info { + color: #31708f; +} +a.list-group-item-info .list-group-item-heading { + color: inherit; +} +a.list-group-item-info:hover, +a.list-group-item-info:focus { + color: #31708f; + background-color: #c4e3f3; +} +a.list-group-item-info.active, +a.list-group-item-info.active:hover, +a.list-group-item-info.active:focus { + color: #fff; + background-color: #31708f; + border-color: #31708f; +} +.list-group-item-warning { + color: #8a6d3b; + background-color: #fcf8e3; +} +a.list-group-item-warning { + color: #8a6d3b; +} +a.list-group-item-warning .list-group-item-heading { + color: inherit; +} +a.list-group-item-warning:hover, +a.list-group-item-warning:focus { + color: #8a6d3b; + background-color: #faf2cc; +} +a.list-group-item-warning.active, +a.list-group-item-warning.active:hover, +a.list-group-item-warning.active:focus { + color: #fff; + background-color: #8a6d3b; + border-color: #8a6d3b; +} +.list-group-item-danger { + color: #a94442; + background-color: #f2dede; +} +a.list-group-item-danger { + color: #a94442; +} +a.list-group-item-danger .list-group-item-heading { + color: inherit; +} +a.list-group-item-danger:hover, +a.list-group-item-danger:focus { + color: #a94442; + background-color: #ebcccc; +} +a.list-group-item-danger.active, +a.list-group-item-danger.active:hover, +a.list-group-item-danger.active:focus { + color: #fff; + background-color: #a94442; + border-color: #a94442; +} +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px; +} +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3; +} +.panel { + margin-bottom: 20px; + background-color: #fff; + border: 1px solid transparent; + border-radius: 4px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: 0 1px 1px rgba(0, 0, 0, .05); +} +.panel-body { + padding: 15px; +} +.panel-heading { + padding: 10px 15px; + border-bottom: 1px solid transparent; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel-heading > .dropdown .dropdown-toggle { + color: inherit; +} +.panel-title { + margin-top: 0; + margin-bottom: 0; + font-size: 16px; + color: inherit; +} +.panel-title > a { + color: inherit; +} +.panel-footer { + padding: 10px 15px; + background-color: #f5f5f5; + border-top: 1px solid #ddd; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .list-group, +.panel > .panel-collapse > .list-group { + margin-bottom: 0; +} +.panel > .list-group .list-group-item, +.panel > .panel-collapse > .list-group .list-group-item { + border-width: 1px 0; + border-radius: 0; +} +.panel > .list-group:first-child .list-group-item:first-child, +.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { + border-top: 0; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .list-group:last-child .list-group-item:last-child, +.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { + border-bottom: 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel-heading + .list-group .list-group-item:first-child { + border-top-width: 0; +} +.list-group + .panel-footer { + border-top-width: 0; +} +.panel > .table, +.panel > .table-responsive > .table, +.panel > .panel-collapse > .table { + margin-bottom: 0; +} +.panel > .table caption, +.panel > .table-responsive > .table caption, +.panel > .panel-collapse > .table caption { + padding-right: 15px; + padding-left: 15px; +} +.panel > .table:first-child, +.panel > .table-responsive:first-child > .table:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { + border-top-left-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { + border-top-right-radius: 3px; +} +.panel > .table:last-child, +.panel > .table-responsive:last-child > .table:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { + border-bottom-right-radius: 3px; +} +.panel > .panel-body + .table, +.panel > .panel-body + .table-responsive, +.panel > .table + .panel-body, +.panel > .table-responsive + .panel-body { + border-top: 1px solid #ddd; +} +.panel > .table > tbody:first-child > tr:first-child th, +.panel > .table > tbody:first-child > tr:first-child td { + border-top: 0; +} +.panel > .table-bordered, +.panel > .table-responsive > .table-bordered { + border: 0; +} +.panel > .table-bordered > thead > tr > th:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, +.panel > .table-bordered > tbody > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, +.panel > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-bordered > thead > tr > td:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, +.panel > .table-bordered > tbody > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, +.panel > .table-bordered > tfoot > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; +} +.panel > .table-bordered > thead > tr > th:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, +.panel > .table-bordered > tbody > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, +.panel > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-bordered > thead > tr > td:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, +.panel > .table-bordered > tbody > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, +.panel > .table-bordered > tfoot > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; +} +.panel > .table-bordered > thead > tr:first-child > td, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, +.panel > .table-bordered > tbody > tr:first-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, +.panel > .table-bordered > thead > tr:first-child > th, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, +.panel > .table-bordered > tbody > tr:first-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { + border-bottom: 0; +} +.panel > .table-bordered > tbody > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, +.panel > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-bordered > tbody > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, +.panel > .table-bordered > tfoot > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { + border-bottom: 0; +} +.panel > .table-responsive { + margin-bottom: 0; + border: 0; +} +.panel-group { + margin-bottom: 20px; +} +.panel-group .panel { + margin-bottom: 0; + border-radius: 4px; +} +.panel-group .panel + .panel { + margin-top: 5px; +} +.panel-group .panel-heading { + border-bottom: 0; +} +.panel-group .panel-heading + .panel-collapse > .panel-body, +.panel-group .panel-heading + .panel-collapse > .list-group { + border-top: 1px solid #ddd; +} +.panel-group .panel-footer { + border-top: 0; +} +.panel-group .panel-footer + .panel-collapse .panel-body { + border-bottom: 1px solid #ddd; +} +.panel-default { + border-color: #ddd; +} +.panel-default > .panel-heading { + color: #333; + background-color: #f5f5f5; + border-color: #ddd; +} +.panel-default > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ddd; +} +.panel-default > .panel-heading .badge { + color: #f5f5f5; + background-color: #333; +} +.panel-default > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ddd; +} +.panel-primary { + border-color: #337ab7; +} +.panel-primary > .panel-heading { + color: #fff; + background-color: #337ab7; + border-color: #337ab7; +} +.panel-primary > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #337ab7; +} +.panel-primary > .panel-heading .badge { + color: #337ab7; + background-color: #fff; +} +.panel-primary > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #337ab7; +} +.panel-success { + border-color: #d6e9c6; +} +.panel-success > .panel-heading { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; +} +.panel-success > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d6e9c6; +} +.panel-success > .panel-heading .badge { + color: #dff0d8; + background-color: #3c763d; +} +.panel-success > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d6e9c6; +} +.panel-info { + border-color: #bce8f1; +} +.panel-info > .panel-heading { + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1; +} +.panel-info > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #bce8f1; +} +.panel-info > .panel-heading .badge { + color: #d9edf7; + background-color: #31708f; +} +.panel-info > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #bce8f1; +} +.panel-warning { + border-color: #faebcc; +} +.panel-warning > .panel-heading { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; +} +.panel-warning > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #faebcc; +} +.panel-warning > .panel-heading .badge { + color: #fcf8e3; + background-color: #8a6d3b; +} +.panel-warning > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #faebcc; +} +.panel-danger { + border-color: #ebccd1; +} +.panel-danger > .panel-heading { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; +} +.panel-danger > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ebccd1; +} +.panel-danger > .panel-heading .badge { + color: #f2dede; + background-color: #a94442; +} +.panel-danger > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ebccd1; +} +.embed-responsive { + position: relative; + display: block; + height: 0; + padding: 0; + overflow: hidden; +} +.embed-responsive .embed-responsive-item, +.embed-responsive iframe, +.embed-responsive embed, +.embed-responsive object, +.embed-responsive video { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + border: 0; +} +.embed-responsive.embed-responsive-16by9 { + padding-bottom: 56.25%; +} +.embed-responsive.embed-responsive-4by3 { + padding-bottom: 75%; +} +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); +} +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, .15); +} +.well-lg { + padding: 24px; + border-radius: 6px; +} +.well-sm { + padding: 9px; + border-radius: 3px; +} +.close { + float: right; + font-size: 21px; + font-weight: bold; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + filter: alpha(opacity=20); + opacity: .2; +} +.close:hover, +.close:focus { + color: #000; + text-decoration: none; + cursor: pointer; + filter: alpha(opacity=50); + opacity: .5; +} +button.close { + -webkit-appearance: none; + padding: 0; + cursor: pointer; + background: transparent; + border: 0; +} +.modal-open { + overflow: hidden; +} +.modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + display: none; + overflow: hidden; + -webkit-overflow-scrolling: touch; + outline: 0; +} +.modal.fade .modal-dialog { + -webkit-transition: -webkit-transform .3s ease-out; + -o-transition: -o-transform .3s ease-out; + transition: transform .3s ease-out; + -webkit-transform: translate(0, -25%); + -ms-transform: translate(0, -25%); + -o-transform: translate(0, -25%); + transform: translate(0, -25%); +} +.modal.in .modal-dialog { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); +} +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} +.modal-dialog { + position: relative; + width: auto; + margin: 10px; +} +.modal-content { + position: relative; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, .2); + border-radius: 6px; + outline: 0; + -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5); + box-shadow: 0 3px 9px rgba(0, 0, 0, .5); +} +.modal-backdrop { + position: absolute; + top: 0; + right: 0; + left: 0; + background-color: #000; +} +.modal-backdrop.fade { + filter: alpha(opacity=0); + opacity: 0; +} +.modal-backdrop.in { + filter: alpha(opacity=50); + opacity: .5; +} +.modal-header { + min-height: 16.42857143px; + padding: 15px; + border-bottom: 1px solid #e5e5e5; +} +.modal-header .close { + margin-top: -2px; +} +.modal-title { + margin: 0; + line-height: 1.42857143; +} +.modal-body { + position: relative; + padding: 15px; +} +.modal-footer { + padding: 15px; + text-align: right; + border-top: 1px solid #e5e5e5; +} +.modal-footer .btn + .btn { + margin-bottom: 0; + margin-left: 5px; +} +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} +@media (min-width: 768px) { + .modal-dialog { + width: 600px; + margin: 30px auto; + } + .modal-content { + -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5); + box-shadow: 0 5px 15px rgba(0, 0, 0, .5); + } + .modal-sm { + width: 300px; + } +} +@media (min-width: 992px) { + .modal-lg { + width: 900px; + } +} +.tooltip { + position: absolute; + z-index: 1070; + display: block; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 12px; + font-weight: normal; + line-height: 1.4; + visibility: visible; + filter: alpha(opacity=0); + opacity: 0; +} +.tooltip.in { + filter: alpha(opacity=90); + opacity: .9; +} +.tooltip.top { + padding: 5px 0; + margin-top: -3px; +} +.tooltip.right { + padding: 0 5px; + margin-left: 3px; +} +.tooltip.bottom { + padding: 5px 0; + margin-top: 3px; +} +.tooltip.left { + padding: 0 5px; + margin-left: -3px; +} +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #fff; + text-align: center; + text-decoration: none; + background-color: #000; + border-radius: 4px; +} +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.top-left .tooltip-arrow { + right: 5px; + bottom: 0; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.top-right .tooltip-arrow { + bottom: 0; + left: 5px; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-width: 5px 5px 5px 0; + border-right-color: #000; +} +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-width: 5px 0 5px 5px; + border-left-color: #000; +} +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.tooltip.bottom-left .tooltip-arrow { + top: 0; + right: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.tooltip.bottom-right .tooltip-arrow { + top: 0; + left: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: none; + max-width: 276px; + padding: 1px; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-weight: normal; + line-height: 1.42857143; + text-align: left; + white-space: normal; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, .2); + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2); + box-shadow: 0 5px 10px rgba(0, 0, 0, .2); +} +.popover.top { + margin-top: -10px; +} +.popover.right { + margin-left: 10px; +} +.popover.bottom { + margin-top: 10px; +} +.popover.left { + margin-left: -10px; +} +.popover-title { + padding: 8px 14px; + margin: 0; + font-size: 14px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-radius: 5px 5px 0 0; +} +.popover-content { + padding: 9px 14px; +} +.popover > .arrow, +.popover > .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.popover > .arrow { + border-width: 11px; +} +.popover > .arrow:after { + content: ""; + border-width: 10px; +} +.popover.top > .arrow { + bottom: -11px; + left: 50%; + margin-left: -11px; + border-top-color: #999; + border-top-color: rgba(0, 0, 0, .25); + border-bottom-width: 0; +} +.popover.top > .arrow:after { + bottom: 1px; + margin-left: -10px; + content: " "; + border-top-color: #fff; + border-bottom-width: 0; +} +.popover.right > .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-right-color: #999; + border-right-color: rgba(0, 0, 0, .25); + border-left-width: 0; +} +.popover.right > .arrow:after { + bottom: -10px; + left: 1px; + content: " "; + border-right-color: #fff; + border-left-width: 0; +} +.popover.bottom > .arrow { + top: -11px; + left: 50%; + margin-left: -11px; + border-top-width: 0; + border-bottom-color: #999; + border-bottom-color: rgba(0, 0, 0, .25); +} +.popover.bottom > .arrow:after { + top: 1px; + margin-left: -10px; + content: " "; + border-top-width: 0; + border-bottom-color: #fff; +} +.popover.left > .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-right-width: 0; + border-left-color: #999; + border-left-color: rgba(0, 0, 0, .25); +} +.popover.left > .arrow:after { + right: 1px; + bottom: -10px; + content: " "; + border-right-width: 0; + border-left-color: #fff; +} +.carousel { + position: relative; +} +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} +.carousel-inner > .item { + position: relative; + display: none; + -webkit-transition: .6s ease-in-out left; + -o-transition: .6s ease-in-out left; + transition: .6s ease-in-out left; +} +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + line-height: 1; +} +@media all and (transform-3d), (-webkit-transform-3d) { + .carousel-inner > .item { + -webkit-transition: -webkit-transform .6s ease-in-out; + -o-transition: -o-transform .6s ease-in-out; + transition: transform .6s ease-in-out; + + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-perspective: 1000; + perspective: 1000; + } + .carousel-inner > .item.next, + .carousel-inner > .item.active.right { + left: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + .carousel-inner > .item.prev, + .carousel-inner > .item.active.left { + left: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } + .carousel-inner > .item.next.left, + .carousel-inner > .item.prev.right, + .carousel-inner > .item.active { + left: 0; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +.carousel-inner > .active, +.carousel-inner > .next, +.carousel-inner > .prev { + display: block; +} +.carousel-inner > .active { + left: 0; +} +.carousel-inner > .next, +.carousel-inner > .prev { + position: absolute; + top: 0; + width: 100%; +} +.carousel-inner > .next { + left: 100%; +} +.carousel-inner > .prev { + left: -100%; +} +.carousel-inner > .next.left, +.carousel-inner > .prev.right { + left: 0; +} +.carousel-inner > .active.left { + left: -100%; +} +.carousel-inner > .active.right { + left: 100%; +} +.carousel-control { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 15%; + font-size: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, .6); + filter: alpha(opacity=50); + opacity: .5; +} +.carousel-control.left { + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001))); + background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); + background-repeat: repeat-x; +} +.carousel-control.right { + right: 0; + left: auto; + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5))); + background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); + background-repeat: repeat-x; +} +.carousel-control:hover, +.carousel-control:focus { + color: #fff; + text-decoration: none; + filter: alpha(opacity=90); + outline: 0; + opacity: .9; +} +.carousel-control .icon-prev, +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-left, +.carousel-control .glyphicon-chevron-right { + position: absolute; + top: 50%; + z-index: 5; + display: inline-block; +} +.carousel-control .icon-prev, +.carousel-control .glyphicon-chevron-left { + left: 50%; + margin-left: -10px; +} +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-right { + right: 50%; + margin-right: -10px; +} +.carousel-control .icon-prev, +.carousel-control .icon-next { + width: 20px; + height: 20px; + margin-top: -10px; + font-family: serif; +} +.carousel-control .icon-prev:before { + content: '\2039'; +} +.carousel-control .icon-next:before { + content: '\203a'; +} +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + padding-left: 0; + margin-left: -30%; + text-align: center; + list-style: none; +} +.carousel-indicators li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + cursor: pointer; + background-color: #000 \9; + background-color: rgba(0, 0, 0, 0); + border: 1px solid #fff; + border-radius: 10px; +} +.carousel-indicators .active { + width: 12px; + height: 12px; + margin: 0; + background-color: #fff; +} +.carousel-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, .6); +} +.carousel-caption .btn { + text-shadow: none; +} +@media screen and (min-width: 768px) { + .carousel-control .glyphicon-chevron-left, + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-prev, + .carousel-control .icon-next { + width: 30px; + height: 30px; + margin-top: -15px; + font-size: 30px; + } + .carousel-control .glyphicon-chevron-left, + .carousel-control .icon-prev { + margin-left: -15px; + } + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-next { + margin-right: -15px; + } + .carousel-caption { + right: 20%; + left: 20%; + padding-bottom: 30px; + } + .carousel-indicators { + bottom: 20px; + } +} +.clearfix:before, +.clearfix:after, +.dl-horizontal dd:before, +.dl-horizontal dd:after, +.container:before, +.container:after, +.container-fluid:before, +.container-fluid:after, +.row:before, +.row:after, +.form-horizontal .form-group:before, +.form-horizontal .form-group:after, +.btn-toolbar:before, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:before, +.btn-group-vertical > .btn-group:after, +.nav:before, +.nav:after, +.navbar:before, +.navbar:after, +.navbar-header:before, +.navbar-header:after, +.navbar-collapse:before, +.navbar-collapse:after, +.pager:before, +.pager:after, +.panel-body:before, +.panel-body:after, +.modal-footer:before, +.modal-footer:after { + display: table; + content: " "; +} +.clearfix:after, +.dl-horizontal dd:after, +.container:after, +.container-fluid:after, +.row:after, +.form-horizontal .form-group:after, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:after, +.nav:after, +.navbar:after, +.navbar-header:after, +.navbar-collapse:after, +.pager:after, +.panel-body:after, +.modal-footer:after { + clear: both; +} +.center-block { + display: block; + margin-right: auto; + margin-left: auto; +} +.pull-right { + float: right !important; +} +.pull-left { + float: left !important; +} +.hide { + display: none !important; +} +.show { + display: block !important; +} +.invisible { + visibility: hidden; +} +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} +.hidden { + display: none !important; + visibility: hidden !important; +} +.affix { + position: fixed; +} +@-ms-viewport { + width: device-width; +} +.visible-xs, +.visible-sm, +.visible-md, +.visible-lg { + display: none !important; +} +.visible-xs-block, +.visible-xs-inline, +.visible-xs-inline-block, +.visible-sm-block, +.visible-sm-inline, +.visible-sm-inline-block, +.visible-md-block, +.visible-md-inline, +.visible-md-inline-block, +.visible-lg-block, +.visible-lg-inline, +.visible-lg-inline-block { + display: none !important; +} +@media (max-width: 767px) { + .visible-xs { + display: block !important; + } + table.visible-xs { + display: table; + } + tr.visible-xs { + display: table-row !important; + } + th.visible-xs, + td.visible-xs { + display: table-cell !important; + } +} +@media (max-width: 767px) { + .visible-xs-block { + display: block !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline { + display: inline !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline-block { + display: inline-block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm { + display: block !important; + } + table.visible-sm { + display: table; + } + tr.visible-sm { + display: table-row !important; + } + th.visible-sm, + td.visible-sm { + display: table-cell !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-block { + display: block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline { + display: inline !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline-block { + display: inline-block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md { + display: block !important; + } + table.visible-md { + display: table; + } + tr.visible-md { + display: table-row !important; + } + th.visible-md, + td.visible-md { + display: table-cell !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-block { + display: block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline { + display: inline !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline-block { + display: inline-block !important; + } +} +@media (min-width: 1200px) { + .visible-lg { + display: block !important; + } + table.visible-lg { + display: table; + } + tr.visible-lg { + display: table-row !important; + } + th.visible-lg, + td.visible-lg { + display: table-cell !important; + } +} +@media (min-width: 1200px) { + .visible-lg-block { + display: block !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline { + display: inline !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline-block { + display: inline-block !important; + } +} +@media (max-width: 767px) { + .hidden-xs { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .hidden-sm { + display: none !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-md { + display: none !important; + } +} +@media (min-width: 1200px) { + .hidden-lg { + display: none !important; + } +} +.visible-print { + display: none !important; +} +@media print { + .visible-print { + display: block !important; + } + table.visible-print { + display: table; + } + tr.visible-print { + display: table-row !important; + } + th.visible-print, + td.visible-print { + display: table-cell !important; + } +} +.visible-print-block { + display: none !important; +} +@media print { + .visible-print-block { + display: block !important; + } +} +.visible-print-inline { + display: none !important; +} +@media print { + .visible-print-inline { + display: inline !important; + } +} +.visible-print-inline-block { + display: none !important; +} +@media print { + .visible-print-inline-block { + display: inline-block !important; + } +} +@media print { + .hidden-print { + display: none !important; + } +} +/*# sourceMappingURL=bootstrap.css.map */ diff --git a/www2/css/bootstrap.css.map b/www2/css/bootstrap.css.map new file mode 100644 index 00000000..a02f6ba0 --- /dev/null +++ b/www2/css/bootstrap.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["bootstrap.css","less/normalize.less","less/print.less","less/glyphicons.less","less/scaffolding.less","less/mixins/vendor-prefixes.less","less/mixins/tab-focus.less","less/mixins/image.less","less/type.less","less/mixins/text-emphasis.less","less/mixins/background-variant.less","less/mixins/text-overflow.less","less/code.less","less/grid.less","less/mixins/grid.less","less/mixins/grid-framework.less","less/tables.less","less/mixins/table-row.less","less/forms.less","less/mixins/forms.less","less/buttons.less","less/mixins/buttons.less","less/mixins/opacity.less","less/component-animations.less","less/dropdowns.less","less/mixins/nav-divider.less","less/mixins/reset-filter.less","less/button-groups.less","less/mixins/border-radius.less","less/input-groups.less","less/navs.less","less/navbar.less","less/mixins/nav-vertical-align.less","less/utilities.less","less/breadcrumbs.less","less/pagination.less","less/mixins/pagination.less","less/pager.less","less/labels.less","less/mixins/labels.less","less/badges.less","less/jumbotron.less","less/thumbnails.less","less/alerts.less","less/mixins/alerts.less","less/progress-bars.less","less/mixins/gradients.less","less/mixins/progress-bar.less","less/media.less","less/list-group.less","less/mixins/list-group.less","less/panels.less","less/mixins/panels.less","less/responsive-embed.less","less/wells.less","less/close.less","less/modals.less","less/tooltip.less","less/popovers.less","less/carousel.less","less/mixins/clearfix.less","less/mixins/center-block.less","less/mixins/hide-text.less","less/responsive-utilities.less","less/mixins/responsive-visibility.less"],"names":[],"mappings":"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AAA;EHsR9C;AGrRmC;EAAW,kBAAA;EHwR9C;AGvRmC;EAAW,kBAAA;EH0R9C;AGzRmC;EAAW,kBAAA;EH4R9C;AG3RmC;EAAW,kBAAA;EH8R9C;AG7RmC;EAAW,kBAAA;EHgS9C;AG/RmC;EAAW,kBAAA;EHkS9C;AGjSmC;EAAW,kBAAA;EHoS9C;AGnSmC;EAAW,kBAAA;EHsS9C;AGrSmC;EAAW,kBAAA;EHwS9C;AGvSmC;EAAW,kBAAA;EH0S9C;AGzSmC;EAAW,kBAAA;EH4S9C;AG3SmC;EAAW,kBAAA;EH8S9C;AG7SmC;EAAW,kBAAA;EHgT9C;AG/SmC;EAAW,kBAAA;EHkT9C;AGjTmC;EAAW,kBAAA;EHoT9C;AGnTmC;EAAW,kBAAA;EHsT9C;AGrTmC;EAAW,kBAAA;EHwT9C;AGvTmC;EAAW,kBAAA;EH0T9C;AGzTmC;EAAW,kBAAA;EH4T9C;AG3TmC;EAAW,kBAAA;EH8T9C;AG7TmC;EAAW,kBAAA;EHgU9C;AG/TmC;EAAW,kBAAA;EHkU9C;AGjUmC;EAAW,kBAAA;EHoU9C;AGnUmC;EAAW,kBAAA;EHsU9C;AGrUmC;EAAW,kBAAA;EHwU9C;AGvUmC;EAAW,kBAAA;EH0U9C;AGzUmC;EAAW,kBAAA;EH4U9C;AG3UmC;EAAW,kBAAA;EH8U9C;AG7UmC;EAAW,kBAAA;EHgV9C;AG/UmC;EAAW,kBAAA;EHkV9C;AGjVmC;EAAW,kBAAA;EHoV9C;AGnVmC;EAAW,kBAAA;EHsV9C;AGrVmC;EAAW,kBAAA;EHwV9C;AGvVmC;EAAW,kBAAA;EH0V9C;AGzVmC;EAAW,kBAAA;EH4V9C;AG3VmC;EAAW,kBAAA;EH8V9C;AG7VmC;EAAW,kBAAA;EHgW9C;AG/VmC;EAAW,kBAAA;EHkW9C;AGjWmC;EAAW,kBAAA;EHoW9C;AGnWmC;EAAW,kBAAA;EHsW9C;AGrWmC;EAAW,kBAAA;EHwW9C;AGvWmC;EAAW,kBAAA;EH0W9C;AGzWmC;EAAW,kBAAA;EH4W9C;AG3WmC;EAAW,kBAAA;EH8W9C;AG7WmC;EAAW,kBAAA;EHgX9C;AG/WmC;EAAW,kBAAA;EHkX9C;AGjXmC;EAAW,kBAAA;EHoX9C;AGnXmC;EAAW,kBAAA;EHsX9C;AGrXmC;EAAW,kBAAA;EHwX9C;AGvXmC;EAAW,kBAAA;EH0X9C;AGzXmC;EAAW,kBAAA;EH4X9C;AG3XmC;EAAW,kBAAA;EH8X9C;AG7XmC;EAAW,kBAAA;EHgY9C;AG/XmC;EAAW,kBAAA;EHkY9C;AGjYmC;EAAW,kBAAA;EHoY9C;AGnYmC;EAAW,kBAAA;EHsY9C;AGrYmC;EAAW,kBAAA;EHwY9C;AGvYmC;EAAW,kBAAA;EH0Y9C;AGzYmC;EAAW,kBAAA;EH4Y9C;AG3YmC;EAAW,kBAAA;EH8Y9C;AG7YmC;EAAW,kBAAA;EHgZ9C;AG/YmC;EAAW,kBAAA;EHkZ9C;AGjZmC;EAAW,kBAAA;EHoZ9C;AGnZmC;EAAW,kBAAA;EHsZ9C;AGrZmC;EAAW,kBAAA;EHwZ9C;AGvZmC;EAAW,kBAAA;EH0Z9C;AGzZmC;EAAW,kBAAA;EH4Z9C;AG3ZmC;EAAW,kBAAA;EH8Z9C;AG7ZmC;EAAW,kBAAA;EHga9C;AG/ZmC;EAAW,kBAAA;EHka9C;AGjamC;EAAW,kBAAA;EHoa9C;AGnamC;EAAW,kBAAA;EHsa9C;AGramC;EAAW,kBAAA;EHwa9C;AGvamC;EAAW,kBAAA;EH0a9C;AGzamC;EAAW,kBAAA;EH4a9C;AG3amC;EAAW,kBAAA;EH8a9C;AG7amC;EAAW,kBAAA;EHgb9C;AG/amC;EAAW,kBAAA;EHkb9C;AGjbmC;EAAW,kBAAA;EHob9C;AGnbmC;EAAW,kBAAA;EHsb9C;AGrbmC;EAAW,kBAAA;EHwb9C;AGvbmC;EAAW,kBAAA;EH0b9C;AGzbmC;EAAW,kBAAA;EH4b9C;AG3bmC;EAAW,kBAAA;EH8b9C;AG7bmC;EAAW,kBAAA;EHgc9C;AG/bmC;EAAW,kBAAA;EHkc9C;AGjcmC;EAAW,kBAAA;EHoc9C;AGncmC;EAAW,kBAAA;EHsc9C;AGrcmC;EAAW,kBAAA;EHwc9C;AGvcmC;EAAW,kBAAA;EH0c9C;AGzcmC;EAAW,kBAAA;EH4c9C;AG3cmC;EAAW,kBAAA;EH8c9C;AG7cmC;EAAW,kBAAA;EHgd9C;AG/cmC;EAAW,kBAAA;EHkd9C;AGjdmC;EAAW,kBAAA;EHod9C;AGndmC;EAAW,kBAAA;EHsd9C;AGrdmC;EAAW,kBAAA;EHwd9C;AGvdmC;EAAW,kBAAA;EH0d9C;AGzdmC;EAAW,kBAAA;EH4d9C;AG3dmC;EAAW,kBAAA;EH8d9C;AG7dmC;EAAW,kBAAA;EHge9C;AG/dmC;EAAW,kBAAA;EHke9C;AGjemC;EAAW,kBAAA;EHoe9C;AGnemC;EAAW,kBAAA;EHse9C;AGremC;EAAW,kBAAA;EHwe9C;AGvemC;EAAW,kBAAA;EH0e9C;AGzemC;EAAW,kBAAA;EH4e9C;AG3emC;EAAW,kBAAA;EH8e9C;AG7emC;EAAW,kBAAA;EHgf9C;AG/emC;EAAW,kBAAA;EHkf9C;AGjfmC;EAAW,kBAAA;EHof9C;AGnfmC;EAAW,kBAAA;EHsf9C;AGrfmC;EAAW,kBAAA;EHwf9C;AGvfmC;EAAW,kBAAA;EH0f9C;AGzfmC;EAAW,kBAAA;EH4f9C;AG3fmC;EAAW,kBAAA;EH8f9C;AG7fmC;EAAW,kBAAA;EHggB9C;AG/fmC;EAAW,kBAAA;EHkgB9C;AGjgBmC;EAAW,kBAAA;EHogB9C;AGngBmC;EAAW,kBAAA;EHsgB9C;AGrgBmC;EAAW,kBAAA;EHwgB9C;AGvgBmC;EAAW,kBAAA;EH0gB9C;AGzgBmC;EAAW,kBAAA;EH4gB9C;AG3gBmC;EAAW,kBAAA;EH8gB9C;AG7gBmC;EAAW,kBAAA;EHghB9C;AG/gBmC;EAAW,kBAAA;EHkhB9C;AGjhBmC;EAAW,kBAAA;EHohB9C;AGnhBmC;EAAW,kBAAA;EHshB9C;AGrhBmC;EAAW,kBAAA;EHwhB9C;AGvhBmC;EAAW,kBAAA;EH0hB9C;AGzhBmC;EAAW,kBAAA;EH4hB9C;AG3hBmC;EAAW,kBAAA;EH8hB9C;AG7hBmC;EAAW,kBAAA;EHgiB9C;AG/hBmC;EAAW,kBAAA;EHkiB9C;AGjiBmC;EAAW,kBAAA;EHoiB9C;AGniBmC;EAAW,kBAAA;EHsiB9C;AGriBmC;EAAW,kBAAA;EHwiB9C;AGviBmC;EAAW,kBAAA;EH0iB9C;AGziBmC;EAAW,kBAAA;EH4iB9C;AG3iBmC;EAAW,kBAAA;EH8iB9C;AG7iBmC;EAAW,kBAAA;EHgjB9C;AG/iBmC;EAAW,kBA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EACE,mBAAA;Efi7CH;Ael7CC;EACE,2BAAA;Efo7CH;Aer7CC;EACE,2BAAA;Efu7CH;Aex7CC;EACE,kBAAA;Ef07CH;Ae37CC;EACE,2BAAA;Ef67CH;Ae97CC;EACE,2BAAA;Efg8CH;Aej8CC;EACE,kBAAA;Efm8CH;Aep8CC;EACE,2BAAA;Efs8CH;Aev8CC;EACE,2BAAA;Efy8CH;Ae18CC;EACE,kBAAA;Ef48CH;Ae78CC;EACE,2BAAA;Ef+8CH;Aeh9CC;EACE,0BAAA;Efk9CH;Aen9CC;EACE,iBAAA;Efq9CH;Aaz9CD;EE9BI;IACE,aAAA;If0/CH;Een/CD;IACE,aAAA;Ifq/CD;Eet/CD;IACE,qBAAA;Ifw/CD;Eez/CD;IACE,qBAAA;If2/CD;Ee5/CD;IACE,YAAA;If8/CD;Ee//CD;IACE,qBAAA;IfigDD;EelgDD;IACE,qBAAA;IfogDD;EergDD;IACE,YAAA;IfugDD;EexgDD;IACE,qBAAA;If0gDD;Ee3gDD;IACE,qBAAA;If6gDD;Ee9gDD;IACE,YAAA;IfghDD;EejhDD;IACE,qBAAA;IfmhDD;EephDD;IACE,oBAAA;IfshDD;EexgDD;IACE,aAAA;If0gDD;Ee3gDD;IACE,qBAAA;If6gDD;Ee9gDD;IACE,qBAAA;IfghDD;EejhDD;IACE,YAAA;IfmhDD;EephDD;IACE,qBAAA;IfshDD;EevhDD;IACE,qBAAA;IfyhDD;Ee1hDD;IACE,YAAA;If4hDD;Ee7hDD;IACE,qBAAA;If+hDD;EehiDD;IACE,qBAAA;IfkiDD;EeniDD;IACE,YAAA;IfqiDD;EetiDD;IACE,qBAAA;IfwiDD;EeziDD;IACE,oBAAA;If2iDD;EeviDD;IACE,aAAA;IfyiDD;EezjDD;IACE,YAAA;If2jDD;Ee5jDD;IACE,oBAAA;If8jDD;Ee/jDD;IACE,oBAAA;IfikDD;EelkDD;IACE,WAAA;IfokDD;EerkDD;IACE,oBAAA;IfukDD;EexkDD;IACE,oBAAA;If0kDD;Ee3kDD;IACE,WAAA;If6kDD;Ee9kDD;IACE,oBAAA;IfglDD;EejlDD;IACE,oBAAA;IfmlDD;EeplDD;IACE,WAAA;IfslDD;EevlDD;IACE,oBAAA;IfylDD;Ee1lDD;IACE,mBAAA;If4lDD;EexlDD;IACE,YAAA;If0lDD;Ee5kDD;IACE,mBAAA;If8kDD;Ee/kDD;IACE,2BAAA;IfilDD;EellDD;IACE,2BAAA;IfolDD;EerlDD;IACE,kBAAA;IfulDD;EexlDD;IACE,2BAAA;If0lDD;Ee3lDD;IACE,2BAAA;If6lDD;Ee9lDD;IACE,kBAAA;IfgmDD;EejmDD;IACE,2BAAA;IfmmDD;EepmDD;IACE,2BAAA;IfsmDD;EevmDD;IACE,kBAAA;IfymDD;Ee1mDD;IACE,2BAAA;If4mDD;Ee7mDD;IACE,0BAAA;If+mDD;EehnDD;IACE,iBAAA;IfknDD;EACF;Aa9mDD;EEvCI;IACE,aAAA;IfwpDH;EejpDD;IACE,aAAA;IfmpDD;EeppDD;IACE,qBAAA;IfspDD;EevpDD;IACE,qBAAA;IfypDD;Ee1pDD;IACE,YAAA;If4pDD;Ee7pDD;IACE,qBAAA;If+pDD;EehqDD;IACE,qBAAA;IfkqDD;EenqDD;IACE,YAAA;IfqqDD;EetqDD;IACE,qBAAA;IfwqDD;EezqDD;IACE,qBAAA;If2qDD;Ee5qDD;IACE,YAAA;If8qDD;Ee/qDD;IACE,qBAAA;IfirDD;EelrDD;IACE,oBAAA;IforDD;EetqDD;IACE,aAAA;IfwqDD;EezqDD;IACE,qBAAA;If2qDD;Ee5qDD;IACE,qBAAA;If8qDD;Ee/qDD;IACE,YAAA;IfirDD;EelrDD;IACE,qBAAA;IforDD;EerrDD;IACE,qBAAA;IfurDD;EexrDD;IACE,YAAA;If0rDD;Ee3rDD;IACE,qBAAA;If6rDD;Ee9rDD;IACE,qBAAA;IfgsDD;EejsDD;IACE,YAAA;IfmsDD;EepsDD;IACE,qBAAA;IfssDD;EevsDD;IACE,oBAAA;IfysDD;EersDD;IACE,aAAA;IfusDD;EevtDD;IACE,YAAA;IfytDD;Ee1tDD;IACE,oBAAA;If4tDD;Ee7tDD;IACE,oBAAA;If+tDD;EehuDD;IACE,WAAA;IfkuDD;EenuDD;IACE,oBAAA;IfquDD;EetuDD;IACE,oBAAA;IfwuDD;EezuDD;IACE,WAAA;If2uDD;Ee5uDD;IACE,oBAAA;If8uDD;Ee/uDD;IACE,oBAAA;IfivDD;EelvDD;IACE,WAAA;IfovDD;EervDD;IACE,oBAAA;IfuvDD;EexvDD;IACE,mBAAA;If0vDD;EetvDD;IACE,YAAA;IfwvDD;Ee1uDD;IACE,mBAAA;If4uDD;Ee7uDD;IACE,2BAAA;If+uDD;EehvDD;IACE,2BAAA;IfkvDD;EenvDD;IACE,kBAAA;IfqvDD;EetvDD;IACE,2BAAA;IfwvDD;EezvDD;IACE,2BAAA;If2vDD;Ee5vDD;IACE,kBAAA;If8vDD;Ee/vDD;IACE,2BAAA;IfiwDD;EelwDD;IACE,2BAAA;IfowDD;EerwDD;IACE,kBAAA;IfuwDD;EexwDD;IACE,2BAAA;If0wDD;Ee3wDD;IACE,0BAAA;If6wDD;Ee9wDD;IACE,iBAAA;IfgxDD;EACF;AarwDD;EE9CI;IACE,aAAA;IfszDH;Ee/yDD;IACE,aAAA;IfizDD;EelzDD;IACE,qBAAA;IfozDD;EerzDD;IACE,qBAAA;IfuzDD;EexzDD;IACE,YAAA;If0zDD;Ee3zDD;IACE,qBAAA;If6zDD;Ee9zDD;IACE,qBAAA;Ifg0DD;Eej0DD;IACE,YAAA;Ifm0DD;Eep0DD;IACE,qBAAA;Ifs0DD;Eev0DD;IACE,qBAAA;Ify0DD;Ee10DD;IACE,YAAA;If40DD;Ee70DD;IACE,qBAAA;If+0DD;Eeh1DD;IACE,oBAAA;Ifk1DD;Eep0DD;IACE,aAAA;Ifs0DD;Eev0DD;IACE,qBAAA;Ify0DD;Ee10DD;IACE,qBAAA;If40DD;Ee70DD;IACE,YAAA;If+0DD;Eeh1DD;IACE,qBAAA;Ifk1DD;Een1DD;IACE,qBAAA;Ifq1DD;Eet1DD;IACE,YAAA;Ifw1DD;Eez1DD;IACE,qBAAA;If21DD;Ee51DD;IACE,qBAAA;If81DD;Ee/1DD;IACE,YAAA;Ifi2DD;Eel2DD;IACE,qBAAA;Ifo2DD;Eer2DD;IACE,oBAAA;Ifu2DD;Een2DD;IACE,aAAA;Ifq2DD;Eer3DD;IACE,YAAA;Ifu3DD;Eex3DD;IACE,oBAAA;If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EACA,uBAAA;ErB+tFD;AqB7tFC;;;;;;EAME,gBAAA;EACA,2BAAA;EACI,uBAAA;ErB+tFP;AqB7tFC;;;EAGE,wBAAA;ErB+tFH;AqB1tFG;;;;;;;;;;;;;;;;;;EAME,2BAAA;EACI,uBAAA;ErBwuFT;AoBhtFD;ECnBI,gBAAA;EACA,2BAAA;ErBsuFH;AoBjtFD;ECxDE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErB4wFD;AqB1wFC;;;;;;EAME,gBAAA;EACA,2BAAA;EACI,uBAAA;ErB4wFP;AqB1wFC;;;EAGE,wBAAA;ErB4wFH;AqBvwFG;;;;;;;;;;;;;;;;;;EAME,2BAAA;EACI,uBAAA;ErBqxFT;AoB1vFD;ECtBI,gBAAA;EACA,2BAAA;ErBmxFH;AoB1vFD;EC5DE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErByzFD;AqBvzFC;;;;;;EAME,gBAAA;EACA,2BAAA;EACI,uBAAA;ErByzFP;AqBvzFC;;;EAGE,wBAAA;ErByzFH;AqBpzFG;;;;;;;;;;;;;;;;;;EAME,2BAAA;EACI,uBAAA;ErBk0FT;AoBnyFD;EC1BI,gBAAA;EACA,2BAAA;ErBg0FH;AoBnyFD;EChEE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErBs2FD;AqBp2FC;;;;;;EAME,gBAAA;EACA,2BAAA;EACI,uBAAA;ErBs2FP;AqBp2FC;;;EAGE,wBAAA;ErBs2FH;AqBj2FG;;;;;;;;;;;;;;;;;;EAME,2BAAA;EACI,uBAAA;ErB+2FT;AoB50FD;EC9BI,gBAAA;EACA,2BAAA;ErB62FH;AoB50FD;ECpEE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErBm5FD;AqBj5FC;;;;;;EAME,gBAAA;EACA,2BAAA;EACI,uBAAA;ErBm5FP;AqBj5FC;;;EAGE,wBAAA;ErBm5FH;AqB94FG;;;;;;;;;;;;;;;;;;EAME,2BAAA;EACI,uBAAA;ErB45FT;AoBr3FD;EClCI,gBAAA;EACA,2BAAA;ErB05FH;AoBr3FD;ECxEE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErBg8FD;AqB97FC;;;;;;EAME,gBAAA;EACA,2BAAA;EACI,uBAAA;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","file":"bootstrap.css","sourcesContent":["/*! normalize.css v3.0.2 | MIT License | git.io/normalize */\nhtml {\n font-family: sans-serif;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n}\nbody {\n margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block;\n vertical-align: baseline;\n}\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n[hidden],\ntemplate {\n display: none;\n}\na {\n background-color: transparent;\n}\na:active,\na:hover {\n outline: 0;\n}\nabbr[title] {\n border-bottom: 1px dotted;\n}\nb,\nstrong {\n font-weight: bold;\n}\ndfn {\n font-style: italic;\n}\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\nmark {\n background: #ff0;\n color: #000;\n}\nsmall {\n font-size: 80%;\n}\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\nsup {\n top: -0.5em;\n}\nsub {\n bottom: -0.25em;\n}\nimg {\n border: 0;\n}\nsvg:not(:root) {\n overflow: hidden;\n}\nfigure {\n margin: 1em 40px;\n}\nhr {\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n height: 0;\n}\npre {\n overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit;\n font: inherit;\n margin: 0;\n}\nbutton {\n overflow: visible;\n}\nbutton,\nselect {\n text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button;\n cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\ninput {\n line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box;\n padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: textfield;\n -moz-box-sizing: content-box;\n -webkit-box-sizing: content-box;\n box-sizing: content-box;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\nlegend {\n border: 0;\n padding: 0;\n}\ntextarea {\n overflow: auto;\n}\noptgroup {\n font-weight: bold;\n}\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\ntd,\nth {\n padding: 0;\n}\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important;\n box-shadow: none !important;\n text-shadow: none !important;\n }\n a,\n a:visited {\n text-decoration: underline;\n }\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n thead {\n display: table-header-group;\n }\n tr,\n img {\n page-break-inside: avoid;\n }\n img {\n max-width: 100% !important;\n }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n h2,\n h3 {\n page-break-after: avoid;\n }\n select {\n background: #fff !important;\n }\n .navbar {\n display: none;\n }\n .btn > .caret,\n .dropup > .btn > .caret {\n border-top-color: #000 !important;\n }\n .label {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #ddd !important;\n }\n}\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('../fonts/glyphicons-halflings-regular.eot');\n src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');\n}\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n content: \"\\2a\";\n}\n.glyphicon-plus:before {\n content: \"\\2b\";\n}\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n content: \"\\270f\";\n}\n.glyphicon-glass:before {\n content: \"\\e001\";\n}\n.glyphicon-music:before {\n content: \"\\e002\";\n}\n.glyphicon-search:before {\n content: \"\\e003\";\n}\n.glyphicon-heart:before {\n content: \"\\e005\";\n}\n.glyphicon-star:before {\n content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n content: \"\\e007\";\n}\n.glyphicon-user:before {\n content: \"\\e008\";\n}\n.glyphicon-film:before {\n content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n content: \"\\e010\";\n}\n.glyphicon-th:before {\n content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n content: \"\\e012\";\n}\n.glyphicon-ok:before {\n content: \"\\e013\";\n}\n.glyphicon-remove:before {\n content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n content: \"\\e016\";\n}\n.glyphicon-off:before {\n content: \"\\e017\";\n}\n.glyphicon-signal:before {\n content: \"\\e018\";\n}\n.glyphicon-cog:before {\n content: \"\\e019\";\n}\n.glyphicon-trash:before {\n content: \"\\e020\";\n}\n.glyphicon-home:before {\n content: \"\\e021\";\n}\n.glyphicon-file:before {\n content: \"\\e022\";\n}\n.glyphicon-time:before {\n content: \"\\e023\";\n}\n.glyphicon-road:before {\n content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n content: \"\\e025\";\n}\n.glyphicon-download:before {\n content: \"\\e026\";\n}\n.glyphicon-upload:before {\n content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n content: \"\\e032\";\n}\n.glyphicon-lock:before {\n content: \"\\e033\";\n}\n.glyphicon-flag:before {\n content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n content: \"\\e040\";\n}\n.glyphicon-tag:before {\n content: \"\\e041\";\n}\n.glyphicon-tags:before {\n content: \"\\e042\";\n}\n.glyphicon-book:before {\n content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n content: \"\\e044\";\n}\n.glyphicon-print:before {\n content: \"\\e045\";\n}\n.glyphicon-camera:before {\n content: \"\\e046\";\n}\n.glyphicon-font:before {\n content: \"\\e047\";\n}\n.glyphicon-bold:before {\n content: \"\\e048\";\n}\n.glyphicon-italic:before {\n content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n content: \"\\e055\";\n}\n.glyphicon-list:before {\n content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n content: \"\\e059\";\n}\n.glyphicon-picture:before {\n content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n content: \"\\e063\";\n}\n.glyphicon-tint:before {\n content: \"\\e064\";\n}\n.glyphicon-edit:before {\n content: \"\\e065\";\n}\n.glyphicon-share:before {\n content: \"\\e066\";\n}\n.glyphicon-check:before {\n content: \"\\e067\";\n}\n.glyphicon-move:before {\n content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n content: \"\\e070\";\n}\n.glyphicon-backward:before {\n content: \"\\e071\";\n}\n.glyphicon-play:before {\n content: \"\\e072\";\n}\n.glyphicon-pause:before {\n content: \"\\e073\";\n}\n.glyphicon-stop:before {\n content: \"\\e074\";\n}\n.glyphicon-forward:before {\n content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n content: \"\\e077\";\n}\n.glyphicon-eject:before {\n content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n content: \"\\e101\";\n}\n.glyphicon-gift:before {\n content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n content: \"\\e103\";\n}\n.glyphicon-fire:before {\n content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n content: \"\\e107\";\n}\n.glyphicon-plane:before {\n content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n content: \"\\e109\";\n}\n.glyphicon-random:before {\n content: \"\\e110\";\n}\n.glyphicon-comment:before {\n content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n content: \"\\e122\";\n}\n.glyphicon-bell:before {\n content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n content: \"\\e134\";\n}\n.glyphicon-globe:before {\n content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n content: \"\\e137\";\n}\n.glyphicon-filter:before {\n content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n content: \"\\e143\";\n}\n.glyphicon-link:before {\n content: \"\\e144\";\n}\n.glyphicon-phone:before {\n content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n content: \"\\e146\";\n}\n.glyphicon-usd:before {\n content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n content: \"\\e149\";\n}\n.glyphicon-sort:before {\n content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n content: \"\\e157\";\n}\n.glyphicon-expand:before {\n content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n content: \"\\e161\";\n}\n.glyphicon-flash:before {\n content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n content: \"\\e164\";\n}\n.glyphicon-record:before {\n content: \"\\e165\";\n}\n.glyphicon-save:before {\n content: \"\\e166\";\n}\n.glyphicon-open:before {\n content: \"\\e167\";\n}\n.glyphicon-saved:before {\n content: \"\\e168\";\n}\n.glyphicon-import:before {\n content: \"\\e169\";\n}\n.glyphicon-export:before {\n content: \"\\e170\";\n}\n.glyphicon-send:before {\n content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n content: \"\\e179\";\n}\n.glyphicon-header:before {\n content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n content: \"\\e183\";\n}\n.glyphicon-tower:before {\n content: \"\\e184\";\n}\n.glyphicon-stats:before {\n content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n content: \"\\e200\";\n}\n* {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n*:before,\n*:after {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px;\n line-height: 1.42857143;\n color: #333333;\n background-color: #ffffff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\na {\n color: #337ab7;\n text-decoration: none;\n}\na:hover,\na:focus {\n color: #23527c;\n text-decoration: underline;\n}\na:focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\nfigure {\n margin: 0;\n}\nimg {\n vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n display: block;\n max-width: 100%;\n height: auto;\n}\n.img-rounded {\n border-radius: 6px;\n}\n.img-thumbnail {\n padding: 4px;\n line-height: 1.42857143;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-radius: 4px;\n -webkit-transition: all 0.2s ease-in-out;\n -o-transition: all 0.2s ease-in-out;\n transition: all 0.2s ease-in-out;\n display: inline-block;\n max-width: 100%;\n height: auto;\n}\n.img-circle {\n border-radius: 50%;\n}\nhr {\n margin-top: 20px;\n margin-bottom: 20px;\n border: 0;\n border-top: 1px solid #eeeeee;\n}\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n font-family: inherit;\n font-weight: 500;\n line-height: 1.1;\n color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n font-weight: normal;\n line-height: 1;\n color: #777777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n margin-top: 20px;\n margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n margin-top: 10px;\n margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n font-size: 75%;\n}\nh1,\n.h1 {\n font-size: 36px;\n}\nh2,\n.h2 {\n font-size: 30px;\n}\nh3,\n.h3 {\n font-size: 24px;\n}\nh4,\n.h4 {\n font-size: 18px;\n}\nh5,\n.h5 {\n font-size: 14px;\n}\nh6,\n.h6 {\n font-size: 12px;\n}\np {\n margin: 0 0 10px;\n}\n.lead {\n margin-bottom: 20px;\n font-size: 16px;\n font-weight: 300;\n line-height: 1.4;\n}\n@media (min-width: 768px) {\n .lead {\n font-size: 21px;\n }\n}\nsmall,\n.small {\n font-size: 85%;\n}\nmark,\n.mark {\n background-color: #fcf8e3;\n padding: .2em;\n}\n.text-left {\n text-align: left;\n}\n.text-right {\n text-align: right;\n}\n.text-center {\n text-align: center;\n}\n.text-justify {\n text-align: justify;\n}\n.text-nowrap {\n white-space: nowrap;\n}\n.text-lowercase {\n text-transform: lowercase;\n}\n.text-uppercase {\n text-transform: uppercase;\n}\n.text-capitalize {\n text-transform: capitalize;\n}\n.text-muted {\n color: #777777;\n}\n.text-primary {\n color: #337ab7;\n}\na.text-primary:hover {\n color: #286090;\n}\n.text-success {\n color: #3c763d;\n}\na.text-success:hover {\n color: #2b542c;\n}\n.text-info {\n color: #31708f;\n}\na.text-info:hover {\n color: #245269;\n}\n.text-warning {\n color: #8a6d3b;\n}\na.text-warning:hover {\n color: #66512c;\n}\n.text-danger {\n color: #a94442;\n}\na.text-danger:hover {\n color: #843534;\n}\n.bg-primary {\n color: #fff;\n background-color: #337ab7;\n}\na.bg-primary:hover {\n background-color: #286090;\n}\n.bg-success {\n background-color: #dff0d8;\n}\na.bg-success:hover {\n background-color: #c1e2b3;\n}\n.bg-info {\n background-color: #d9edf7;\n}\na.bg-info:hover {\n background-color: #afd9ee;\n}\n.bg-warning {\n background-color: #fcf8e3;\n}\na.bg-warning:hover {\n background-color: #f7ecb5;\n}\n.bg-danger {\n background-color: #f2dede;\n}\na.bg-danger:hover {\n background-color: #e4b9b9;\n}\n.page-header {\n padding-bottom: 9px;\n margin: 40px 0 20px;\n border-bottom: 1px solid #eeeeee;\n}\nul,\nol {\n margin-top: 0;\n margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n margin-bottom: 0;\n}\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n.list-inline {\n padding-left: 0;\n list-style: none;\n margin-left: -5px;\n}\n.list-inline > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n}\ndl {\n margin-top: 0;\n margin-bottom: 20px;\n}\ndt,\ndd {\n line-height: 1.42857143;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0;\n}\n@media (min-width: 768px) {\n .dl-horizontal dt {\n float: left;\n width: 160px;\n clear: left;\n text-align: right;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .dl-horizontal dd {\n margin-left: 180px;\n }\n}\nabbr[title],\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted #777777;\n}\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\nblockquote {\n padding: 10px 20px;\n margin: 0 0 20px;\n font-size: 17.5px;\n border-left: 5px solid #eeeeee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n display: block;\n font-size: 80%;\n line-height: 1.42857143;\n color: #777777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n content: '\\2014 \\00A0';\n}\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid #eeeeee;\n border-left: 0;\n text-align: right;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n content: '';\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n content: '\\00A0 \\2014';\n}\naddress {\n margin-bottom: 20px;\n font-style: normal;\n line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: #c7254e;\n background-color: #f9f2f4;\n border-radius: 4px;\n}\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: #ffffff;\n background-color: #333333;\n border-radius: 3px;\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none;\n}\npre {\n display: block;\n padding: 9.5px;\n margin: 0 0 10px;\n font-size: 13px;\n line-height: 1.42857143;\n word-break: break-all;\n word-wrap: break-word;\n color: #333333;\n background-color: #f5f5f5;\n border: 1px solid #cccccc;\n border-radius: 4px;\n}\npre code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n}\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n.container {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n@media (min-width: 768px) {\n .container {\n width: 750px;\n }\n}\n@media (min-width: 992px) {\n .container {\n width: 970px;\n }\n}\n@media (min-width: 1200px) {\n .container {\n width: 1170px;\n }\n}\n.container-fluid {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n.row {\n margin-left: -15px;\n margin-right: -15px;\n}\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n position: relative;\n min-height: 1px;\n padding-left: 15px;\n padding-right: 15px;\n}\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n float: left;\n}\n.col-xs-12 {\n width: 100%;\n}\n.col-xs-11 {\n width: 91.66666667%;\n}\n.col-xs-10 {\n width: 83.33333333%;\n}\n.col-xs-9 {\n width: 75%;\n}\n.col-xs-8 {\n width: 66.66666667%;\n}\n.col-xs-7 {\n width: 58.33333333%;\n}\n.col-xs-6 {\n width: 50%;\n}\n.col-xs-5 {\n width: 41.66666667%;\n}\n.col-xs-4 {\n width: 33.33333333%;\n}\n.col-xs-3 {\n width: 25%;\n}\n.col-xs-2 {\n width: 16.66666667%;\n}\n.col-xs-1 {\n width: 8.33333333%;\n}\n.col-xs-pull-12 {\n right: 100%;\n}\n.col-xs-pull-11 {\n right: 91.66666667%;\n}\n.col-xs-pull-10 {\n right: 83.33333333%;\n}\n.col-xs-pull-9 {\n right: 75%;\n}\n.col-xs-pull-8 {\n right: 66.66666667%;\n}\n.col-xs-pull-7 {\n right: 58.33333333%;\n}\n.col-xs-pull-6 {\n right: 50%;\n}\n.col-xs-pull-5 {\n right: 41.66666667%;\n}\n.col-xs-pull-4 {\n right: 33.33333333%;\n}\n.col-xs-pull-3 {\n right: 25%;\n}\n.col-xs-pull-2 {\n right: 16.66666667%;\n}\n.col-xs-pull-1 {\n right: 8.33333333%;\n}\n.col-xs-pull-0 {\n right: auto;\n}\n.col-xs-push-12 {\n left: 100%;\n}\n.col-xs-push-11 {\n left: 91.66666667%;\n}\n.col-xs-push-10 {\n left: 83.33333333%;\n}\n.col-xs-push-9 {\n left: 75%;\n}\n.col-xs-push-8 {\n left: 66.66666667%;\n}\n.col-xs-push-7 {\n left: 58.33333333%;\n}\n.col-xs-push-6 {\n left: 50%;\n}\n.col-xs-push-5 {\n left: 41.66666667%;\n}\n.col-xs-push-4 {\n left: 33.33333333%;\n}\n.col-xs-push-3 {\n left: 25%;\n}\n.col-xs-push-2 {\n left: 16.66666667%;\n}\n.col-xs-push-1 {\n left: 8.33333333%;\n}\n.col-xs-push-0 {\n left: auto;\n}\n.col-xs-offset-12 {\n margin-left: 100%;\n}\n.col-xs-offset-11 {\n margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n margin-left: 75%;\n}\n.col-xs-offset-8 {\n margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n margin-left: 50%;\n}\n.col-xs-offset-5 {\n margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n margin-left: 25%;\n}\n.col-xs-offset-2 {\n margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n margin-left: 0%;\n}\n@media (min-width: 768px) {\n .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {\n float: left;\n }\n .col-sm-12 {\n width: 100%;\n }\n .col-sm-11 {\n width: 91.66666667%;\n }\n .col-sm-10 {\n width: 83.33333333%;\n }\n .col-sm-9 {\n width: 75%;\n }\n .col-sm-8 {\n width: 66.66666667%;\n }\n .col-sm-7 {\n width: 58.33333333%;\n }\n .col-sm-6 {\n width: 50%;\n }\n .col-sm-5 {\n width: 41.66666667%;\n }\n .col-sm-4 {\n width: 33.33333333%;\n }\n .col-sm-3 {\n width: 25%;\n }\n .col-sm-2 {\n width: 16.66666667%;\n }\n .col-sm-1 {\n width: 8.33333333%;\n }\n .col-sm-pull-12 {\n right: 100%;\n }\n .col-sm-pull-11 {\n right: 91.66666667%;\n }\n .col-sm-pull-10 {\n right: 83.33333333%;\n }\n .col-sm-pull-9 {\n right: 75%;\n }\n .col-sm-pull-8 {\n right: 66.66666667%;\n }\n .col-sm-pull-7 {\n right: 58.33333333%;\n }\n .col-sm-pull-6 {\n right: 50%;\n }\n .col-sm-pull-5 {\n right: 41.66666667%;\n }\n .col-sm-pull-4 {\n right: 33.33333333%;\n }\n .col-sm-pull-3 {\n right: 25%;\n }\n .col-sm-pull-2 {\n right: 16.66666667%;\n }\n .col-sm-pull-1 {\n right: 8.33333333%;\n }\n .col-sm-pull-0 {\n right: auto;\n }\n .col-sm-push-12 {\n left: 100%;\n }\n .col-sm-push-11 {\n left: 91.66666667%;\n }\n .col-sm-push-10 {\n left: 83.33333333%;\n }\n .col-sm-push-9 {\n left: 75%;\n }\n .col-sm-push-8 {\n left: 66.66666667%;\n }\n .col-sm-push-7 {\n left: 58.33333333%;\n }\n .col-sm-push-6 {\n left: 50%;\n }\n .col-sm-push-5 {\n left: 41.66666667%;\n }\n .col-sm-push-4 {\n left: 33.33333333%;\n }\n .col-sm-push-3 {\n left: 25%;\n }\n .col-sm-push-2 {\n left: 16.66666667%;\n }\n .col-sm-push-1 {\n left: 8.33333333%;\n }\n .col-sm-push-0 {\n left: auto;\n }\n .col-sm-offset-12 {\n margin-left: 100%;\n }\n .col-sm-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-sm-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-sm-offset-9 {\n margin-left: 75%;\n }\n .col-sm-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-sm-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-sm-offset-6 {\n margin-left: 50%;\n }\n .col-sm-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-sm-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-sm-offset-3 {\n margin-left: 25%;\n }\n .col-sm-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-sm-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-sm-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 992px) {\n .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {\n float: left;\n }\n .col-md-12 {\n width: 100%;\n }\n .col-md-11 {\n width: 91.66666667%;\n }\n .col-md-10 {\n width: 83.33333333%;\n }\n .col-md-9 {\n width: 75%;\n }\n .col-md-8 {\n width: 66.66666667%;\n }\n .col-md-7 {\n width: 58.33333333%;\n }\n .col-md-6 {\n width: 50%;\n }\n .col-md-5 {\n width: 41.66666667%;\n }\n .col-md-4 {\n width: 33.33333333%;\n }\n .col-md-3 {\n width: 25%;\n }\n .col-md-2 {\n width: 16.66666667%;\n }\n .col-md-1 {\n width: 8.33333333%;\n }\n .col-md-pull-12 {\n right: 100%;\n }\n .col-md-pull-11 {\n right: 91.66666667%;\n }\n .col-md-pull-10 {\n right: 83.33333333%;\n }\n .col-md-pull-9 {\n right: 75%;\n }\n .col-md-pull-8 {\n right: 66.66666667%;\n }\n .col-md-pull-7 {\n right: 58.33333333%;\n }\n .col-md-pull-6 {\n right: 50%;\n }\n .col-md-pull-5 {\n right: 41.66666667%;\n }\n .col-md-pull-4 {\n right: 33.33333333%;\n }\n .col-md-pull-3 {\n right: 25%;\n }\n .col-md-pull-2 {\n right: 16.66666667%;\n }\n .col-md-pull-1 {\n right: 8.33333333%;\n }\n .col-md-pull-0 {\n right: auto;\n }\n .col-md-push-12 {\n left: 100%;\n }\n .col-md-push-11 {\n left: 91.66666667%;\n }\n .col-md-push-10 {\n left: 83.33333333%;\n }\n .col-md-push-9 {\n left: 75%;\n }\n .col-md-push-8 {\n left: 66.66666667%;\n }\n .col-md-push-7 {\n left: 58.33333333%;\n }\n .col-md-push-6 {\n left: 50%;\n }\n .col-md-push-5 {\n left: 41.66666667%;\n }\n .col-md-push-4 {\n left: 33.33333333%;\n }\n .col-md-push-3 {\n left: 25%;\n }\n .col-md-push-2 {\n left: 16.66666667%;\n }\n .col-md-push-1 {\n left: 8.33333333%;\n }\n .col-md-push-0 {\n left: auto;\n }\n .col-md-offset-12 {\n margin-left: 100%;\n }\n .col-md-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-md-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-md-offset-9 {\n margin-left: 75%;\n }\n .col-md-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-md-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-md-offset-6 {\n margin-left: 50%;\n }\n .col-md-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-md-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-md-offset-3 {\n margin-left: 25%;\n }\n .col-md-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-md-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-md-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 1200px) {\n .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {\n float: left;\n }\n .col-lg-12 {\n width: 100%;\n }\n .col-lg-11 {\n width: 91.66666667%;\n }\n .col-lg-10 {\n width: 83.33333333%;\n }\n .col-lg-9 {\n width: 75%;\n }\n .col-lg-8 {\n width: 66.66666667%;\n }\n .col-lg-7 {\n width: 58.33333333%;\n }\n .col-lg-6 {\n width: 50%;\n }\n .col-lg-5 {\n width: 41.66666667%;\n }\n .col-lg-4 {\n width: 33.33333333%;\n }\n .col-lg-3 {\n width: 25%;\n }\n .col-lg-2 {\n width: 16.66666667%;\n }\n .col-lg-1 {\n width: 8.33333333%;\n }\n .col-lg-pull-12 {\n right: 100%;\n }\n .col-lg-pull-11 {\n right: 91.66666667%;\n }\n .col-lg-pull-10 {\n right: 83.33333333%;\n }\n .col-lg-pull-9 {\n right: 75%;\n }\n .col-lg-pull-8 {\n right: 66.66666667%;\n }\n .col-lg-pull-7 {\n right: 58.33333333%;\n }\n .col-lg-pull-6 {\n right: 50%;\n }\n .col-lg-pull-5 {\n right: 41.66666667%;\n }\n .col-lg-pull-4 {\n right: 33.33333333%;\n }\n .col-lg-pull-3 {\n right: 25%;\n }\n .col-lg-pull-2 {\n right: 16.66666667%;\n }\n .col-lg-pull-1 {\n right: 8.33333333%;\n }\n .col-lg-pull-0 {\n right: auto;\n }\n .col-lg-push-12 {\n left: 100%;\n }\n .col-lg-push-11 {\n left: 91.66666667%;\n }\n .col-lg-push-10 {\n left: 83.33333333%;\n }\n .col-lg-push-9 {\n left: 75%;\n }\n .col-lg-push-8 {\n left: 66.66666667%;\n }\n .col-lg-push-7 {\n left: 58.33333333%;\n }\n .col-lg-push-6 {\n left: 50%;\n }\n .col-lg-push-5 {\n left: 41.66666667%;\n }\n .col-lg-push-4 {\n left: 33.33333333%;\n }\n .col-lg-push-3 {\n left: 25%;\n }\n .col-lg-push-2 {\n left: 16.66666667%;\n }\n .col-lg-push-1 {\n left: 8.33333333%;\n }\n .col-lg-push-0 {\n left: auto;\n }\n .col-lg-offset-12 {\n margin-left: 100%;\n }\n .col-lg-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-lg-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-lg-offset-9 {\n margin-left: 75%;\n }\n .col-lg-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-lg-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-lg-offset-6 {\n margin-left: 50%;\n }\n .col-lg-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-lg-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-lg-offset-3 {\n margin-left: 25%;\n }\n .col-lg-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-lg-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-lg-offset-0 {\n margin-left: 0%;\n }\n}\ntable {\n background-color: transparent;\n}\ncaption {\n padding-top: 8px;\n padding-bottom: 8px;\n color: #777777;\n text-align: left;\n}\nth {\n text-align: left;\n}\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n padding: 8px;\n line-height: 1.42857143;\n vertical-align: top;\n border-top: 1px solid #dddddd;\n}\n.table > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid #dddddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n border-top: 0;\n}\n.table > tbody + tbody {\n border-top: 2px solid #dddddd;\n}\n.table .table {\n background-color: #ffffff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n padding: 5px;\n}\n.table-bordered {\n border: 1px solid #dddddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n border: 1px solid #dddddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-child(odd) {\n background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n background-color: #f5f5f5;\n}\ntable col[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-column;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-cell;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n background-color: #ebcccc;\n}\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%;\n}\n@media screen and (max-width: 767px) {\n .table-responsive {\n width: 100%;\n margin-bottom: 15px;\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid #dddddd;\n }\n .table-responsive > .table {\n margin-bottom: 0;\n }\n .table-responsive > .table > thead > tr > th,\n .table-responsive > .table > tbody > tr > th,\n .table-responsive > .table > tfoot > tr > th,\n .table-responsive > .table > thead > tr > td,\n .table-responsive > .table > tbody > tr > td,\n .table-responsive > .table > tfoot > tr > td {\n white-space: nowrap;\n }\n .table-responsive > .table-bordered {\n border: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:first-child,\n .table-responsive > .table-bordered > tbody > tr > th:first-child,\n .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n .table-responsive > .table-bordered > thead > tr > td:first-child,\n .table-responsive > .table-bordered > tbody > tr > td:first-child,\n .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:last-child,\n .table-responsive > .table-bordered > tbody > tr > th:last-child,\n .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n .table-responsive > .table-bordered > thead > tr > td:last-child,\n .table-responsive > .table-bordered > tbody > tr > td:last-child,\n .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n }\n .table-responsive > .table-bordered > tbody > tr:last-child > th,\n .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n .table-responsive > .table-bordered > tbody > tr:last-child > td,\n .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n border-bottom: 0;\n }\n}\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n min-width: 0;\n}\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: 20px;\n font-size: 21px;\n line-height: inherit;\n color: #333333;\n border: 0;\n border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n display: inline-block;\n max-width: 100%;\n margin-bottom: 5px;\n font-weight: bold;\n}\ninput[type=\"search\"] {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9;\n line-height: normal;\n}\ninput[type=\"file\"] {\n display: block;\n}\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\nselect[multiple],\nselect[size] {\n height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\noutput {\n display: block;\n padding-top: 7px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n}\n.form-control {\n display: block;\n width: 100%;\n height: 34px;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n background-color: #ffffff;\n background-image: none;\n border: 1px solid #cccccc;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n border-color: #66afe9;\n outline: 0;\n -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n.form-control::-moz-placeholder {\n color: #999999;\n opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n color: #999999;\n}\n.form-control::-webkit-input-placeholder {\n color: #999999;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n cursor: not-allowed;\n background-color: #eeeeee;\n opacity: 1;\n}\ntextarea.form-control {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: none;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n input[type=\"date\"],\n input[type=\"time\"],\n input[type=\"datetime-local\"],\n input[type=\"month\"] {\n line-height: 34px;\n }\n input[type=\"date\"].input-sm,\n input[type=\"time\"].input-sm,\n input[type=\"datetime-local\"].input-sm,\n input[type=\"month\"].input-sm {\n line-height: 30px;\n }\n input[type=\"date\"].input-lg,\n input[type=\"time\"].input-lg,\n input[type=\"datetime-local\"].input-lg,\n input[type=\"month\"].input-lg {\n line-height: 46px;\n }\n}\n.form-group {\n margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.radio label,\n.checkbox label {\n min-height: 20px;\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-left: -20px;\n margin-top: 4px \\9;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n cursor: not-allowed;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n cursor: not-allowed;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n cursor: not-allowed;\n}\n.form-control-static {\n padding-top: 7px;\n padding-bottom: 7px;\n margin-bottom: 0;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n padding-left: 0;\n padding-right: 0;\n}\n.input-sm,\n.form-group-sm .form-control {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-sm,\nselect.form-group-sm .form-control {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-sm,\ntextarea.form-group-sm .form-control,\nselect[multiple].input-sm,\nselect[multiple].form-group-sm .form-control {\n height: auto;\n}\n.input-lg,\n.form-group-lg .form-control {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.33;\n border-radius: 6px;\n}\nselect.input-lg,\nselect.form-group-lg .form-control {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-lg,\ntextarea.form-group-lg .form-control,\nselect[multiple].input-lg,\nselect[multiple].form-group-lg .form-control {\n height: auto;\n}\n.has-feedback {\n position: relative;\n}\n.has-feedback .form-control {\n padding-right: 42.5px;\n}\n.form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n display: block;\n width: 34px;\n height: 34px;\n line-height: 34px;\n text-align: center;\n pointer-events: none;\n}\n.input-lg + .form-control-feedback {\n width: 46px;\n height: 46px;\n line-height: 46px;\n}\n.input-sm + .form-control-feedback {\n width: 30px;\n height: 30px;\n line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n color: #3c763d;\n}\n.has-success .form-control {\n border-color: #3c763d;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-success .form-control:focus {\n border-color: #2b542c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n color: #3c763d;\n border-color: #3c763d;\n background-color: #dff0d8;\n}\n.has-success .form-control-feedback {\n color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n color: #8a6d3b;\n}\n.has-warning .form-control {\n border-color: #8a6d3b;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-warning .form-control:focus {\n border-color: #66512c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n color: #8a6d3b;\n border-color: #8a6d3b;\n background-color: #fcf8e3;\n}\n.has-warning .form-control-feedback {\n color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n color: #a94442;\n}\n.has-error .form-control {\n border-color: #a94442;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-error .form-control:focus {\n border-color: #843534;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n color: #a94442;\n border-color: #a94442;\n background-color: #f2dede;\n}\n.has-error .form-control-feedback {\n color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n top: 0;\n}\n.help-block {\n display: block;\n margin-top: 5px;\n margin-bottom: 10px;\n color: #737373;\n}\n@media (min-width: 768px) {\n .form-inline .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-static {\n display: inline-block;\n }\n .form-inline .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .form-inline .input-group .input-group-addon,\n .form-inline .input-group .input-group-btn,\n .form-inline .input-group .form-control {\n width: auto;\n }\n .form-inline .input-group > .form-control {\n width: 100%;\n }\n .form-inline .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio,\n .form-inline .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio label,\n .form-inline .checkbox label {\n padding-left: 0;\n }\n .form-inline .radio input[type=\"radio\"],\n .form-inline .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .form-inline .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n margin-top: 0;\n margin-bottom: 0;\n padding-top: 7px;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n min-height: 27px;\n}\n.form-horizontal .form-group {\n margin-left: -15px;\n margin-right: -15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .control-label {\n text-align: right;\n margin-bottom: 0;\n padding-top: 7px;\n }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n right: 15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-lg .control-label {\n padding-top: 14.3px;\n }\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-sm .control-label {\n padding-top: 6px;\n }\n}\n.btn {\n display: inline-block;\n margin-bottom: 0;\n font-weight: normal;\n text-align: center;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none;\n border: 1px solid transparent;\n white-space: nowrap;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n border-radius: 4px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n color: #333333;\n text-decoration: none;\n}\n.btn:active,\n.btn.active {\n outline: 0;\n background-image: none;\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n cursor: not-allowed;\n pointer-events: none;\n opacity: 0.65;\n filter: alpha(opacity=65);\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-default {\n color: #333333;\n background-color: #ffffff;\n border-color: #cccccc;\n}\n.btn-default:hover,\n.btn-default:focus,\n.btn-default.focus,\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n color: #333333;\n background-color: #e6e6e6;\n border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n background-image: none;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n background-color: #ffffff;\n border-color: #cccccc;\n}\n.btn-default .badge {\n color: #ffffff;\n background-color: #333333;\n}\n.btn-primary {\n color: #ffffff;\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary:hover,\n.btn-primary:focus,\n.btn-primary.focus,\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n color: #ffffff;\n background-color: #286090;\n border-color: #204d74;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n background-image: none;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary .badge {\n color: #337ab7;\n background-color: #ffffff;\n}\n.btn-success {\n color: #ffffff;\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success:hover,\n.btn-success:focus,\n.btn-success.focus,\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n color: #ffffff;\n background-color: #449d44;\n border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n background-image: none;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success .badge {\n color: #5cb85c;\n background-color: #ffffff;\n}\n.btn-info {\n color: #ffffff;\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info:hover,\n.btn-info:focus,\n.btn-info.focus,\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n color: #ffffff;\n background-color: #31b0d5;\n border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n background-image: none;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info .badge {\n color: #5bc0de;\n background-color: #ffffff;\n}\n.btn-warning {\n color: #ffffff;\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning:hover,\n.btn-warning:focus,\n.btn-warning.focus,\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n color: #ffffff;\n background-color: #ec971f;\n border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n background-image: none;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning .badge {\n color: #f0ad4e;\n background-color: #ffffff;\n}\n.btn-danger {\n color: #ffffff;\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger:hover,\n.btn-danger:focus,\n.btn-danger.focus,\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n color: #ffffff;\n background-color: #c9302c;\n border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n background-image: none;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger .badge {\n color: #d9534f;\n background-color: #ffffff;\n}\n.btn-link {\n color: #337ab7;\n font-weight: normal;\n border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n background-color: transparent;\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n color: #23527c;\n text-decoration: underline;\n background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n color: #777777;\n text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.33;\n border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n padding: 1px 5px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-block {\n display: block;\n width: 100%;\n}\n.btn-block + .btn-block {\n margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n.fade {\n opacity: 0;\n -webkit-transition: opacity 0.15s linear;\n -o-transition: opacity 0.15s linear;\n transition: opacity 0.15s linear;\n}\n.fade.in {\n opacity: 1;\n}\n.collapse {\n display: none;\n visibility: hidden;\n}\n.collapse.in {\n display: block;\n visibility: visible;\n}\ntr.collapse.in {\n display: table-row;\n}\ntbody.collapse.in {\n display: table-row-group;\n}\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n -webkit-transition-property: height, visibility;\n transition-property: height, visibility;\n -webkit-transition-duration: 0.35s;\n transition-duration: 0.35s;\n -webkit-transition-timing-function: ease;\n transition-timing-function: ease;\n}\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: 4px solid;\n border-right: 4px solid transparent;\n border-left: 4px solid transparent;\n}\n.dropdown {\n position: relative;\n}\n.dropdown-toggle:focus {\n outline: 0;\n}\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0;\n list-style: none;\n font-size: 14px;\n text-align: left;\n background-color: #ffffff;\n border: 1px solid #cccccc;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 4px;\n -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n background-clip: padding-box;\n}\n.dropdown-menu.pull-right {\n right: 0;\n left: auto;\n}\n.dropdown-menu .divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: 1.42857143;\n color: #333333;\n white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n text-decoration: none;\n color: #262626;\n background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n color: #ffffff;\n text-decoration: none;\n outline: 0;\n background-color: #337ab7;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n color: #777777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n text-decoration: none;\n background-color: transparent;\n background-image: none;\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n cursor: not-allowed;\n}\n.open > .dropdown-menu {\n display: block;\n}\n.open > a {\n outline: 0;\n}\n.dropdown-menu-right {\n left: auto;\n right: 0;\n}\n.dropdown-menu-left {\n left: 0;\n right: auto;\n}\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: 12px;\n line-height: 1.42857143;\n color: #777777;\n white-space: nowrap;\n}\n.dropdown-backdrop {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n z-index: 990;\n}\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n border-top: 0;\n border-bottom: 4px solid;\n content: \"\";\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 1px;\n}\n@media (min-width: 768px) {\n .navbar-right .dropdown-menu {\n left: auto;\n right: 0;\n }\n .navbar-right .dropdown-menu-left {\n left: 0;\n right: auto;\n }\n}\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n z-index: 2;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n margin-left: -1px;\n}\n.btn-toolbar {\n margin-left: -5px;\n}\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n.btn-group > .btn:first-child {\n margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child > .btn:last-child,\n.btn-group > .btn-group:first-child > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group > .btn-group:last-child > .btn:first-child {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px;\n}\n.btn-group.open .dropdown-toggle {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn .caret {\n margin-left: 0;\n}\n.btn-lg .caret {\n border-width: 5px 5px 0;\n border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n border-top-right-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n border-bottom-left-radius: 4px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n float: none;\n display: table-cell;\n width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n.input-group {\n position: relative;\n display: table;\n border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n float: none;\n padding-left: 0;\n padding-right: 0;\n}\n.input-group .form-control {\n position: relative;\n z-index: 2;\n float: left;\n width: 100%;\n margin-bottom: 0;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.33;\n border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle;\n}\n.input-group-addon {\n padding: 6px 12px;\n font-size: 14px;\n font-weight: normal;\n line-height: 1;\n color: #555555;\n text-align: center;\n background-color: #eeeeee;\n border: 1px solid #cccccc;\n border-radius: 4px;\n}\n.input-group-addon.input-sm {\n padding: 5px 10px;\n font-size: 12px;\n border-radius: 3px;\n}\n.input-group-addon.input-lg {\n padding: 10px 16px;\n font-size: 18px;\n border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n.input-group-btn {\n position: relative;\n font-size: 0;\n white-space: nowrap;\n}\n.input-group-btn > .btn {\n position: relative;\n}\n.input-group-btn > .btn + .btn {\n margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n margin-left: -1px;\n}\n.nav {\n margin-bottom: 0;\n padding-left: 0;\n list-style: none;\n}\n.nav > li {\n position: relative;\n display: block;\n}\n.nav > li > a {\n position: relative;\n display: block;\n padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.nav > li.disabled > a {\n color: #777777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n color: #777777;\n text-decoration: none;\n background-color: transparent;\n cursor: not-allowed;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n background-color: #eeeeee;\n border-color: #337ab7;\n}\n.nav .nav-divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.nav > li > a > img {\n max-width: none;\n}\n.nav-tabs {\n border-bottom: 1px solid #dddddd;\n}\n.nav-tabs > li {\n float: left;\n margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n margin-right: 2px;\n line-height: 1.42857143;\n border: 1px solid transparent;\n border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n border-color: #eeeeee #eeeeee #dddddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n color: #555555;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-bottom-color: transparent;\n cursor: default;\n}\n.nav-tabs.nav-justified {\n width: 100%;\n border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n float: none;\n}\n.nav-tabs.nav-justified > li > a {\n text-align: center;\n margin-bottom: 5px;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-tabs.nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs.nav-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n border: 1px solid #dddddd;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li > a {\n border-bottom: 1px solid #dddddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs.nav-justified > .active > a,\n .nav-tabs.nav-justified > .active > a:hover,\n .nav-tabs.nav-justified > .active > a:focus {\n border-bottom-color: #ffffff;\n }\n}\n.nav-pills > li {\n float: left;\n}\n.nav-pills > li > a {\n border-radius: 4px;\n}\n.nav-pills > li + li {\n margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n color: #ffffff;\n background-color: #337ab7;\n}\n.nav-stacked > li {\n float: none;\n}\n.nav-stacked > li + li {\n margin-top: 2px;\n margin-left: 0;\n}\n.nav-justified {\n width: 100%;\n}\n.nav-justified > li {\n float: none;\n}\n.nav-justified > li > a {\n text-align: center;\n margin-bottom: 5px;\n}\n.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs-justified {\n border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n border: 1px solid #dddddd;\n}\n@media (min-width: 768px) {\n .nav-tabs-justified > li > a {\n border-bottom: 1px solid #dddddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs-justified > .active > a,\n .nav-tabs-justified > .active > a:hover,\n .nav-tabs-justified > .active > a:focus {\n border-bottom-color: #ffffff;\n }\n}\n.tab-content > .tab-pane {\n display: none;\n visibility: hidden;\n}\n.tab-content > .active {\n display: block;\n visibility: visible;\n}\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.navbar {\n position: relative;\n min-height: 50px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n .navbar {\n border-radius: 4px;\n }\n}\n@media (min-width: 768px) {\n .navbar-header {\n float: left;\n }\n}\n.navbar-collapse {\n overflow-x: visible;\n padding-right: 15px;\n padding-left: 15px;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n -webkit-overflow-scrolling: touch;\n}\n.navbar-collapse.in {\n overflow-y: auto;\n}\n@media (min-width: 768px) {\n .navbar-collapse {\n width: auto;\n border-top: 0;\n box-shadow: none;\n }\n .navbar-collapse.collapse {\n display: block !important;\n visibility: visible !important;\n height: auto !important;\n padding-bottom: 0;\n overflow: visible !important;\n }\n .navbar-collapse.in {\n overflow-y: visible;\n }\n .navbar-fixed-top .navbar-collapse,\n .navbar-static-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n padding-left: 0;\n padding-right: 0;\n }\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n .navbar-fixed-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n max-height: 200px;\n }\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n margin-right: -15px;\n margin-left: -15px;\n}\n@media (min-width: 768px) {\n .container > .navbar-header,\n .container-fluid > .navbar-header,\n .container > .navbar-collapse,\n .container-fluid > .navbar-collapse {\n margin-right: 0;\n margin-left: 0;\n }\n}\n.navbar-static-top {\n z-index: 1000;\n border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n .navbar-static-top {\n border-radius: 0;\n }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n@media (min-width: 768px) {\n .navbar-fixed-top,\n .navbar-fixed-bottom {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0;\n border-width: 1px 0 0;\n}\n.navbar-brand {\n float: left;\n padding: 15px 15px;\n font-size: 18px;\n line-height: 20px;\n height: 50px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n text-decoration: none;\n}\n.navbar-brand > img {\n display: block;\n}\n@media (min-width: 768px) {\n .navbar > .container .navbar-brand,\n .navbar > .container-fluid .navbar-brand {\n margin-left: -15px;\n }\n}\n.navbar-toggle {\n position: relative;\n float: right;\n margin-right: 15px;\n padding: 9px 10px;\n margin-top: 8px;\n margin-bottom: 8px;\n background-color: transparent;\n background-image: none;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.navbar-toggle:focus {\n outline: 0;\n}\n.navbar-toggle .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n margin-top: 4px;\n}\n@media (min-width: 768px) {\n .navbar-toggle {\n display: none;\n }\n}\n.navbar-nav {\n margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: 20px;\n}\n@media (max-width: 767px) {\n .navbar-nav .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n }\n .navbar-nav .open .dropdown-menu > li > a,\n .navbar-nav .open .dropdown-menu .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n .navbar-nav .open .dropdown-menu > li > a {\n line-height: 20px;\n }\n .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-nav .open .dropdown-menu > li > a:focus {\n background-image: none;\n }\n}\n@media (min-width: 768px) {\n .navbar-nav {\n float: left;\n margin: 0;\n }\n .navbar-nav > li {\n float: left;\n }\n .navbar-nav > li > a {\n padding-top: 15px;\n padding-bottom: 15px;\n }\n}\n.navbar-form {\n margin-left: -15px;\n margin-right: -15px;\n padding: 10px 15px;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n margin-top: 8px;\n margin-bottom: 8px;\n}\n@media (min-width: 768px) {\n .navbar-form .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .navbar-form .form-control-static {\n display: inline-block;\n }\n .navbar-form .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .navbar-form .input-group .input-group-addon,\n .navbar-form .input-group .input-group-btn,\n .navbar-form .input-group .form-control {\n width: auto;\n }\n .navbar-form .input-group > .form-control {\n width: 100%;\n }\n .navbar-form .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio,\n .navbar-form .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio label,\n .navbar-form .checkbox label {\n padding-left: 0;\n }\n .navbar-form .radio input[type=\"radio\"],\n .navbar-form .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .navbar-form .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n@media (max-width: 767px) {\n .navbar-form .form-group {\n margin-bottom: 5px;\n }\n .navbar-form .form-group:last-child {\n margin-bottom: 0;\n }\n}\n@media (min-width: 768px) {\n .navbar-form {\n width: auto;\n border: 0;\n margin-left: 0;\n margin-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n}\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.navbar-btn {\n margin-top: 8px;\n margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n margin-top: 14px;\n margin-bottom: 14px;\n}\n.navbar-text {\n margin-top: 15px;\n margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n .navbar-text {\n float: left;\n margin-left: 15px;\n margin-right: 15px;\n }\n}\n@media (min-width: 768px) {\n .navbar-left {\n float: left !important;\n }\n .navbar-right {\n float: right !important;\n margin-right: -15px;\n }\n .navbar-right ~ .navbar-right {\n margin-right: 0;\n }\n}\n.navbar-default {\n background-color: #f8f8f8;\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n color: #777777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n color: #5e5e5e;\n background-color: transparent;\n}\n.navbar-default .navbar-text {\n color: #777777;\n}\n.navbar-default .navbar-nav > li > a {\n color: #777777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n color: #333333;\n background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n color: #555555;\n background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n color: #cccccc;\n background-color: transparent;\n}\n.navbar-default .navbar-toggle {\n border-color: #dddddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n background-color: #dddddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n background-color: #888888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n background-color: #e7e7e7;\n color: #555555;\n}\n@media (max-width: 767px) {\n .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n color: #777777;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #333333;\n background-color: transparent;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #555555;\n background-color: #e7e7e7;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #cccccc;\n background-color: transparent;\n }\n}\n.navbar-default .navbar-link {\n color: #777777;\n}\n.navbar-default .navbar-link:hover {\n color: #333333;\n}\n.navbar-default .btn-link {\n color: #777777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n color: #333333;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n color: #cccccc;\n}\n.navbar-inverse {\n background-color: #222222;\n border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n color: #ffffff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n color: #ffffff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n color: #ffffff;\n background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n color: #444444;\n background-color: transparent;\n}\n.navbar-inverse .navbar-toggle {\n border-color: #333333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n background-color: #333333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n background-color: #ffffff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n border-color: #101010;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n background-color: #080808;\n color: #ffffff;\n}\n@media (max-width: 767px) {\n .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n border-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n color: #9d9d9d;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #ffffff;\n background-color: transparent;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #ffffff;\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #444444;\n background-color: transparent;\n }\n}\n.navbar-inverse .navbar-link {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-link:hover {\n color: #ffffff;\n}\n.navbar-inverse .btn-link {\n color: #9d9d9d;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n color: #ffffff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n color: #444444;\n}\n.breadcrumb {\n padding: 8px 15px;\n margin-bottom: 20px;\n list-style: none;\n background-color: #f5f5f5;\n border-radius: 4px;\n}\n.breadcrumb > li {\n display: inline-block;\n}\n.breadcrumb > li + li:before {\n content: \"/\\00a0\";\n padding: 0 5px;\n color: #cccccc;\n}\n.breadcrumb > .active {\n color: #777777;\n}\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: 20px 0;\n border-radius: 4px;\n}\n.pagination > li {\n display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n position: relative;\n float: left;\n padding: 6px 12px;\n line-height: 1.42857143;\n text-decoration: none;\n color: #337ab7;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n margin-left: -1px;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n margin-left: 0;\n border-bottom-left-radius: 4px;\n border-top-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n border-bottom-right-radius: 4px;\n border-top-right-radius: 4px;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n color: #23527c;\n background-color: #eeeeee;\n border-color: #dddddd;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n z-index: 2;\n color: #ffffff;\n background-color: #337ab7;\n border-color: #337ab7;\n cursor: default;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n color: #777777;\n background-color: #ffffff;\n border-color: #dddddd;\n cursor: not-allowed;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n padding: 10px 16px;\n font-size: 18px;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n border-bottom-left-radius: 6px;\n border-top-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n border-bottom-right-radius: 6px;\n border-top-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n padding: 5px 10px;\n font-size: 12px;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n border-bottom-left-radius: 3px;\n border-top-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n border-bottom-right-radius: 3px;\n border-top-right-radius: 3px;\n}\n.pager {\n padding-left: 0;\n margin: 20px 0;\n list-style: none;\n text-align: center;\n}\n.pager li {\n display: inline;\n}\n.pager li > a,\n.pager li > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.pager .next > a,\n.pager .next > span {\n float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n color: #777777;\n background-color: #ffffff;\n cursor: not-allowed;\n}\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: #ffffff;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n}\na.label:hover,\na.label:focus {\n color: #ffffff;\n text-decoration: none;\n cursor: pointer;\n}\n.label:empty {\n display: none;\n}\n.btn .label {\n position: relative;\n top: -1px;\n}\n.label-default {\n background-color: #777777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n background-color: #5e5e5e;\n}\n.label-primary {\n background-color: #337ab7;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n background-color: #286090;\n}\n.label-success {\n background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n background-color: #449d44;\n}\n.label-info {\n background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n background-color: #31b0d5;\n}\n.label-warning {\n background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n background-color: #ec971f;\n}\n.label-danger {\n background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n background-color: #c9302c;\n}\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: 12px;\n font-weight: bold;\n color: #ffffff;\n line-height: 1;\n vertical-align: baseline;\n white-space: nowrap;\n text-align: center;\n background-color: #777777;\n border-radius: 10px;\n}\n.badge:empty {\n display: none;\n}\n.btn .badge {\n position: relative;\n top: -1px;\n}\n.btn-xs .badge {\n top: 0;\n padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n color: #ffffff;\n text-decoration: none;\n cursor: pointer;\n}\n.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n color: #337ab7;\n background-color: #ffffff;\n}\n.list-group-item > .badge {\n float: right;\n}\n.list-group-item > .badge + .badge {\n margin-right: 5px;\n}\n.nav-pills > li > a > .badge {\n margin-left: 3px;\n}\n.jumbotron {\n padding: 30px 15px;\n margin-bottom: 30px;\n color: inherit;\n background-color: #eeeeee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n color: inherit;\n}\n.jumbotron p {\n margin-bottom: 15px;\n font-size: 21px;\n font-weight: 200;\n}\n.jumbotron > hr {\n border-top-color: #d5d5d5;\n}\n.container .jumbotron,\n.container-fluid .jumbotron {\n border-radius: 6px;\n}\n.jumbotron .container {\n max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n .jumbotron {\n padding: 48px 0;\n }\n .container .jumbotron,\n .container-fluid .jumbotron {\n padding-left: 60px;\n padding-right: 60px;\n }\n .jumbotron h1,\n .jumbotron .h1 {\n font-size: 63px;\n }\n}\n.thumbnail {\n display: block;\n padding: 4px;\n margin-bottom: 20px;\n line-height: 1.42857143;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-radius: 4px;\n -webkit-transition: border 0.2s ease-in-out;\n -o-transition: border 0.2s ease-in-out;\n transition: border 0.2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n margin-left: auto;\n margin-right: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n border-color: #337ab7;\n}\n.thumbnail .caption {\n padding: 9px;\n color: #333333;\n}\n.alert {\n padding: 15px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.alert h4 {\n margin-top: 0;\n color: inherit;\n}\n.alert .alert-link {\n font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n margin-bottom: 0;\n}\n.alert > p + p {\n margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n}\n.alert-success {\n background-color: #dff0d8;\n border-color: #d6e9c6;\n color: #3c763d;\n}\n.alert-success hr {\n border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n color: #2b542c;\n}\n.alert-info {\n background-color: #d9edf7;\n border-color: #bce8f1;\n color: #31708f;\n}\n.alert-info hr {\n border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n color: #245269;\n}\n.alert-warning {\n background-color: #fcf8e3;\n border-color: #faebcc;\n color: #8a6d3b;\n}\n.alert-warning hr {\n border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n color: #66512c;\n}\n.alert-danger {\n background-color: #f2dede;\n border-color: #ebccd1;\n color: #a94442;\n}\n.alert-danger hr {\n border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n@keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n.progress {\n overflow: hidden;\n height: 20px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: 12px;\n line-height: 20px;\n color: #ffffff;\n text-align: center;\n background-color: #337ab7;\n -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n -webkit-transition: width 0.6s ease;\n -o-transition: width 0.6s ease;\n transition: width 0.6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n -webkit-animation: progress-bar-stripes 2s linear infinite;\n -o-animation: progress-bar-stripes 2s linear infinite;\n animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.media {\n margin-top: 15px;\n}\n.media:first-child {\n margin-top: 0;\n}\n.media-right,\n.media > .pull-right {\n padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top;\n}\n.media-middle {\n vertical-align: middle;\n}\n.media-bottom {\n vertical-align: bottom;\n}\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n.list-group {\n margin-bottom: 20px;\n padding-left: 0;\n}\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n margin-bottom: -1px;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n}\n.list-group-item:first-child {\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n}\n.list-group-item:last-child {\n margin-bottom: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\na.list-group-item {\n color: #555555;\n}\na.list-group-item .list-group-item-heading {\n color: #333333;\n}\na.list-group-item:hover,\na.list-group-item:focus {\n text-decoration: none;\n color: #555555;\n background-color: #f5f5f5;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n background-color: #eeeeee;\n color: #777777;\n cursor: not-allowed;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n color: #777777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n z-index: 2;\n color: #ffffff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n color: #c7ddef;\n}\n.list-group-item-success {\n color: #3c763d;\n background-color: #dff0d8;\n}\na.list-group-item-success {\n color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-success:hover,\na.list-group-item-success:focus {\n color: #3c763d;\n background-color: #d0e9c6;\n}\na.list-group-item-success.active,\na.list-group-item-success.active:hover,\na.list-group-item-success.active:focus {\n color: #fff;\n background-color: #3c763d;\n border-color: #3c763d;\n}\n.list-group-item-info {\n color: #31708f;\n background-color: #d9edf7;\n}\na.list-group-item-info {\n color: #31708f;\n}\na.list-group-item-info .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-info:hover,\na.list-group-item-info:focus {\n color: #31708f;\n background-color: #c4e3f3;\n}\na.list-group-item-info.active,\na.list-group-item-info.active:hover,\na.list-group-item-info.active:focus {\n color: #fff;\n background-color: #31708f;\n border-color: #31708f;\n}\n.list-group-item-warning {\n color: #8a6d3b;\n background-color: #fcf8e3;\n}\na.list-group-item-warning {\n color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-warning:hover,\na.list-group-item-warning:focus {\n color: #8a6d3b;\n background-color: #faf2cc;\n}\na.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus {\n color: #fff;\n background-color: #8a6d3b;\n border-color: #8a6d3b;\n}\n.list-group-item-danger {\n color: #a94442;\n background-color: #f2dede;\n}\na.list-group-item-danger {\n color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-danger:hover,\na.list-group-item-danger:focus {\n color: #a94442;\n background-color: #ebcccc;\n}\na.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus {\n color: #fff;\n background-color: #a94442;\n border-color: #a94442;\n}\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n.panel {\n margin-bottom: 20px;\n background-color: #ffffff;\n border: 1px solid transparent;\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.panel-body {\n padding: 15px;\n}\n.panel-heading {\n padding: 10px 15px;\n border-bottom: 1px solid transparent;\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n color: inherit;\n}\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: 16px;\n color: inherit;\n}\n.panel-title > a {\n color: inherit;\n}\n.panel-footer {\n padding: 10px 15px;\n background-color: #f5f5f5;\n border-top: 1px solid #dddddd;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n border-top: 0;\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n border-bottom: 0;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n border-top-width: 0;\n}\n.list-group + .panel-footer {\n border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n padding-left: 15px;\n padding-right: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n border-bottom-left-radius: 3px;\n border-bottom-right-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n border-top: 1px solid #dddddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n border-bottom: 0;\n}\n.panel > .table-responsive {\n border: 0;\n margin-bottom: 0;\n}\n.panel-group {\n margin-bottom: 20px;\n}\n.panel-group .panel {\n margin-bottom: 0;\n border-radius: 4px;\n}\n.panel-group .panel + .panel {\n margin-top: 5px;\n}\n.panel-group .panel-heading {\n border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n border-top: 1px solid #dddddd;\n}\n.panel-group .panel-footer {\n border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n border-bottom: 1px solid #dddddd;\n}\n.panel-default {\n border-color: #dddddd;\n}\n.panel-default > .panel-heading {\n color: #333333;\n background-color: #f5f5f5;\n border-color: #dddddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #dddddd;\n}\n.panel-default > .panel-heading .badge {\n color: #f5f5f5;\n background-color: #333333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #dddddd;\n}\n.panel-primary {\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading {\n color: #ffffff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #337ab7;\n}\n.panel-primary > .panel-heading .badge {\n color: #337ab7;\n background-color: #ffffff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #337ab7;\n}\n.panel-success {\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #d6e9c6;\n}\n.panel-success > .panel-heading .badge {\n color: #dff0d8;\n background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #d6e9c6;\n}\n.panel-info {\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n color: #31708f;\n background-color: #d9edf7;\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n color: #d9edf7;\n background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #bce8f1;\n}\n.panel-warning {\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n color: #fcf8e3;\n background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #faebcc;\n}\n.panel-danger {\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n color: #a94442;\n background-color: #f2dede;\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ebccd1;\n}\n.panel-danger > .panel-heading .badge {\n color: #f2dede;\n background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ebccd1;\n}\n.embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n width: 100%;\n border: 0;\n}\n.embed-responsive.embed-responsive-16by9 {\n padding-bottom: 56.25%;\n}\n.embed-responsive.embed-responsive-4by3 {\n padding-bottom: 75%;\n}\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border: 1px solid #e3e3e3;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.well blockquote {\n border-color: #ddd;\n border-color: rgba(0, 0, 0, 0.15);\n}\n.well-lg {\n padding: 24px;\n border-radius: 6px;\n}\n.well-sm {\n padding: 9px;\n border-radius: 3px;\n}\n.close {\n float: right;\n font-size: 21px;\n font-weight: bold;\n line-height: 1;\n color: #000000;\n text-shadow: 0 1px 0 #ffffff;\n opacity: 0.2;\n filter: alpha(opacity=20);\n}\n.close:hover,\n.close:focus {\n color: #000000;\n text-decoration: none;\n cursor: pointer;\n opacity: 0.5;\n filter: alpha(opacity=50);\n}\nbutton.close {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n}\n.modal-open {\n overflow: hidden;\n}\n.modal {\n display: none;\n overflow: hidden;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1040;\n -webkit-overflow-scrolling: touch;\n outline: 0;\n}\n.modal.fade .modal-dialog {\n -webkit-transform: translate(0, -25%);\n -ms-transform: translate(0, -25%);\n -o-transform: translate(0, -25%);\n transform: translate(0, -25%);\n -webkit-transition: -webkit-transform 0.3s ease-out;\n -moz-transition: -moz-transform 0.3s ease-out;\n -o-transition: -o-transform 0.3s ease-out;\n transition: transform 0.3s ease-out;\n}\n.modal.in .modal-dialog {\n -webkit-transform: translate(0, 0);\n -ms-transform: translate(0, 0);\n -o-transform: translate(0, 0);\n transform: translate(0, 0);\n}\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n.modal-content {\n position: relative;\n background-color: #ffffff;\n border: 1px solid #999999;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n background-clip: padding-box;\n outline: 0;\n}\n.modal-backdrop {\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n background-color: #000000;\n}\n.modal-backdrop.fade {\n opacity: 0;\n filter: alpha(opacity=0);\n}\n.modal-backdrop.in {\n opacity: 0.5;\n filter: alpha(opacity=50);\n}\n.modal-header {\n padding: 15px;\n border-bottom: 1px solid #e5e5e5;\n min-height: 16.42857143px;\n}\n.modal-header .close {\n margin-top: -2px;\n}\n.modal-title {\n margin: 0;\n line-height: 1.42857143;\n}\n.modal-body {\n position: relative;\n padding: 15px;\n}\n.modal-footer {\n padding: 15px;\n text-align: right;\n border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n margin-left: 5px;\n margin-bottom: 0;\n}\n.modal-footer .btn-group .btn + .btn {\n margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n margin-left: 0;\n}\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n@media (min-width: 768px) {\n .modal-dialog {\n width: 600px;\n margin: 30px auto;\n }\n .modal-content {\n -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n }\n .modal-sm {\n width: 300px;\n }\n}\n@media (min-width: 992px) {\n .modal-lg {\n width: 900px;\n }\n}\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n visibility: visible;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 12px;\n font-weight: normal;\n line-height: 1.4;\n opacity: 0;\n filter: alpha(opacity=0);\n}\n.tooltip.in {\n opacity: 0.9;\n filter: alpha(opacity=90);\n}\n.tooltip.top {\n margin-top: -3px;\n padding: 5px 0;\n}\n.tooltip.right {\n margin-left: 3px;\n padding: 0 5px;\n}\n.tooltip.bottom {\n margin-top: 3px;\n padding: 5px 0;\n}\n.tooltip.left {\n margin-left: -3px;\n padding: 0 5px;\n}\n.tooltip-inner {\n max-width: 200px;\n padding: 3px 8px;\n color: #ffffff;\n text-align: center;\n text-decoration: none;\n background-color: #000000;\n border-radius: 4px;\n}\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.tooltip.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000000;\n}\n.tooltip.top-left .tooltip-arrow {\n bottom: 0;\n right: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000000;\n}\n.tooltip.top-right .tooltip-arrow {\n bottom: 0;\n left: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000000;\n}\n.tooltip.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -5px;\n border-width: 5px 5px 5px 0;\n border-right-color: #000000;\n}\n.tooltip.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -5px;\n border-width: 5px 0 5px 5px;\n border-left-color: #000000;\n}\n.tooltip.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n top: 0;\n right: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n top: 0;\n left: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000000;\n}\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: none;\n max-width: 276px;\n padding: 1px;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px;\n font-weight: normal;\n line-height: 1.42857143;\n text-align: left;\n background-color: #ffffff;\n background-clip: padding-box;\n border: 1px solid #cccccc;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n white-space: normal;\n}\n.popover.top {\n margin-top: -10px;\n}\n.popover.right {\n margin-left: 10px;\n}\n.popover.bottom {\n margin-top: 10px;\n}\n.popover.left {\n margin-left: -10px;\n}\n.popover-title {\n margin: 0;\n padding: 8px 14px;\n font-size: 14px;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-radius: 5px 5px 0 0;\n}\n.popover-content {\n padding: 9px 14px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.popover > .arrow {\n border-width: 11px;\n}\n.popover > .arrow:after {\n border-width: 10px;\n content: \"\";\n}\n.popover.top > .arrow {\n left: 50%;\n margin-left: -11px;\n border-bottom-width: 0;\n border-top-color: #999999;\n border-top-color: rgba(0, 0, 0, 0.25);\n bottom: -11px;\n}\n.popover.top > .arrow:after {\n content: \" \";\n bottom: 1px;\n margin-left: -10px;\n border-bottom-width: 0;\n border-top-color: #ffffff;\n}\n.popover.right > .arrow {\n top: 50%;\n left: -11px;\n margin-top: -11px;\n border-left-width: 0;\n border-right-color: #999999;\n border-right-color: rgba(0, 0, 0, 0.25);\n}\n.popover.right > .arrow:after {\n content: \" \";\n left: 1px;\n bottom: -10px;\n border-left-width: 0;\n border-right-color: #ffffff;\n}\n.popover.bottom > .arrow {\n left: 50%;\n margin-left: -11px;\n border-top-width: 0;\n border-bottom-color: #999999;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n top: -11px;\n}\n.popover.bottom > .arrow:after {\n content: \" \";\n top: 1px;\n margin-left: -10px;\n border-top-width: 0;\n border-bottom-color: #ffffff;\n}\n.popover.left > .arrow {\n top: 50%;\n right: -11px;\n margin-top: -11px;\n border-right-width: 0;\n border-left-color: #999999;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n.popover.left > .arrow:after {\n content: \" \";\n right: 1px;\n border-right-width: 0;\n border-left-color: #ffffff;\n bottom: -10px;\n}\n.carousel {\n position: relative;\n}\n.carousel-inner {\n position: relative;\n overflow: hidden;\n width: 100%;\n}\n.carousel-inner > .item {\n display: none;\n position: relative;\n -webkit-transition: 0.6s ease-in-out left;\n -o-transition: 0.6s ease-in-out left;\n transition: 0.6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n .carousel-inner > .item {\n transition: transform 0.6s ease-in-out;\n backface-visibility: hidden;\n perspective: 1000;\n }\n .carousel-inner > .item.next,\n .carousel-inner > .item.active.right {\n transform: translate3d(100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.prev,\n .carousel-inner > .item.active.left {\n transform: translate3d(-100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.next.left,\n .carousel-inner > .item.prev.right,\n .carousel-inner > .item.active {\n transform: translate3d(0, 0, 0);\n left: 0;\n }\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n display: block;\n}\n.carousel-inner > .active {\n left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n}\n.carousel-inner > .next {\n left: 100%;\n}\n.carousel-inner > .prev {\n left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n left: 0;\n}\n.carousel-inner > .active.left {\n left: -100%;\n}\n.carousel-inner > .active.right {\n left: 100%;\n}\n.carousel-control {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 15%;\n opacity: 0.5;\n filter: alpha(opacity=50);\n font-size: 20px;\n color: #ffffff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-control.left {\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n}\n.carousel-control.right {\n left: auto;\n right: 0;\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n}\n.carousel-control:hover,\n.carousel-control:focus {\n outline: 0;\n color: #ffffff;\n text-decoration: none;\n opacity: 0.9;\n filter: alpha(opacity=90);\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n z-index: 5;\n display: inline-block;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n width: 20px;\n height: 20px;\n margin-top: -10px;\n font-family: serif;\n}\n.carousel-control .icon-prev:before {\n content: '\\2039';\n}\n.carousel-control .icon-next:before {\n content: '\\203a';\n}\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n margin-left: -30%;\n padding-left: 0;\n list-style: none;\n text-align: center;\n}\n.carousel-indicators li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n border: 1px solid #ffffff;\n border-radius: 10px;\n cursor: pointer;\n background-color: #000 \\9;\n background-color: rgba(0, 0, 0, 0);\n}\n.carousel-indicators .active {\n margin: 0;\n width: 12px;\n height: 12px;\n background-color: #ffffff;\n}\n.carousel-caption {\n position: absolute;\n left: 15%;\n right: 15%;\n bottom: 20px;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #ffffff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-caption .btn {\n text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-prev,\n .carousel-control .icon-next {\n width: 30px;\n height: 30px;\n margin-top: -15px;\n font-size: 30px;\n }\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .icon-prev {\n margin-left: -15px;\n }\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-next {\n margin-right: -15px;\n }\n .carousel-caption {\n left: 20%;\n right: 20%;\n padding-bottom: 30px;\n }\n .carousel-indicators {\n bottom: 20px;\n }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-footer:before,\n.modal-footer:after {\n content: \" \";\n display: table;\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-footer:after {\n clear: both;\n}\n.center-block {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n.hidden {\n display: none !important;\n visibility: hidden !important;\n}\n.affix {\n position: fixed;\n}\n@-ms-viewport {\n width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important;\n}\n@media (max-width: 767px) {\n .visible-xs {\n display: block !important;\n }\n table.visible-xs {\n display: table;\n }\n tr.visible-xs {\n display: table-row !important;\n }\n th.visible-xs,\n td.visible-xs {\n display: table-cell !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-block {\n display: block !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline {\n display: inline !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm {\n display: block !important;\n }\n table.visible-sm {\n display: table;\n }\n tr.visible-sm {\n display: table-row !important;\n }\n th.visible-sm,\n td.visible-sm {\n display: table-cell !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-block {\n display: block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline {\n display: inline !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md {\n display: block !important;\n }\n table.visible-md {\n display: table;\n }\n tr.visible-md {\n display: table-row !important;\n }\n th.visible-md,\n td.visible-md {\n display: table-cell !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-block {\n display: block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline {\n display: inline !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg {\n display: block !important;\n }\n table.visible-lg {\n display: table;\n }\n tr.visible-lg {\n display: table-row !important;\n }\n th.visible-lg,\n td.visible-lg {\n display: table-cell !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-block {\n display: block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline {\n display: inline !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline-block {\n display: inline-block !important;\n }\n}\n@media (max-width: 767px) {\n .hidden-xs {\n display: none !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .hidden-sm {\n display: none !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .hidden-md {\n display: none !important;\n }\n}\n@media (min-width: 1200px) {\n .hidden-lg {\n display: none !important;\n }\n}\n.visible-print {\n display: none !important;\n}\n@media print {\n .visible-print {\n display: block !important;\n }\n table.visible-print {\n display: table;\n }\n tr.visible-print {\n display: table-row !important;\n }\n th.visible-print,\n td.visible-print {\n display: table-cell !important;\n }\n}\n.visible-print-block {\n display: none !important;\n}\n@media print {\n .visible-print-block {\n display: block !important;\n }\n}\n.visible-print-inline {\n display: none !important;\n}\n@media print {\n .visible-print-inline {\n display: inline !important;\n }\n}\n.visible-print-inline-block {\n display: none !important;\n}\n@media print {\n .visible-print-inline-block {\n display: inline-block !important;\n }\n}\n@media print {\n .hidden-print {\n display: none !important;\n }\n}\n/*# sourceMappingURL=bootstrap.css.map */","/*! normalize.css v3.0.2 | MIT License | git.io/normalize */\n\n//\n// 1. Set default font family to sans-serif.\n// 2. Prevent iOS text size adjust after orientation change, without disabling\n// user zoom.\n//\n\nhtml {\n font-family: sans-serif; // 1\n -ms-text-size-adjust: 100%; // 2\n -webkit-text-size-adjust: 100%; // 2\n}\n\n//\n// Remove default margin.\n//\n\nbody {\n margin: 0;\n}\n\n// HTML5 display definitions\n// ==========================================================================\n\n//\n// Correct `block` display not defined for any HTML5 element in IE 8/9.\n// Correct `block` display not defined for `details` or `summary` in IE 10/11\n// and Firefox.\n// Correct `block` display not defined for `main` in IE 11.\n//\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\n\n//\n// 1. Correct `inline-block` display not defined in IE 8/9.\n// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n//\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block; // 1\n vertical-align: baseline; // 2\n}\n\n//\n// Prevent modern browsers from displaying `audio` without controls.\n// Remove excess height in iOS 5 devices.\n//\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n//\n// Address `[hidden]` styling not present in IE 8/9/10.\n// Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.\n//\n\n[hidden],\ntemplate {\n display: none;\n}\n\n// Links\n// ==========================================================================\n\n//\n// Remove the gray background color from active links in IE 10.\n//\n\na {\n background-color: transparent;\n}\n\n//\n// Improve readability when focused and also mouse hovered in all browsers.\n//\n\na:active,\na:hover {\n outline: 0;\n}\n\n// Text-level semantics\n// ==========================================================================\n\n//\n// Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n//\n\nabbr[title] {\n border-bottom: 1px dotted;\n}\n\n//\n// Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n//\n\nb,\nstrong {\n font-weight: bold;\n}\n\n//\n// Address styling not present in Safari and Chrome.\n//\n\ndfn {\n font-style: italic;\n}\n\n//\n// Address variable `h1` font-size and margin within `section` and `article`\n// contexts in Firefox 4+, Safari, and Chrome.\n//\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n//\n// Address styling not present in IE 8/9.\n//\n\nmark {\n background: #ff0;\n color: #000;\n}\n\n//\n// Address inconsistent and variable font size in all browsers.\n//\n\nsmall {\n font-size: 80%;\n}\n\n//\n// Prevent `sub` and `sup` affecting `line-height` in all browsers.\n//\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n// Embedded content\n// ==========================================================================\n\n//\n// Remove border when inside `a` element in IE 8/9/10.\n//\n\nimg {\n border: 0;\n}\n\n//\n// Correct overflow not hidden in IE 9/10/11.\n//\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n// Grouping content\n// ==========================================================================\n\n//\n// Address margin not present in IE 8/9 and Safari.\n//\n\nfigure {\n margin: 1em 40px;\n}\n\n//\n// Address differences between Firefox and other browsers.\n//\n\nhr {\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n height: 0;\n}\n\n//\n// Contain overflow in all browsers.\n//\n\npre {\n overflow: auto;\n}\n\n//\n// Address odd `em`-unit font size rendering in all browsers.\n//\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\n// Forms\n// ==========================================================================\n\n//\n// Known limitation: by default, Chrome and Safari on OS X allow very limited\n// styling of `select`, unless a `border` property is set.\n//\n\n//\n// 1. Correct color not being inherited.\n// Known issue: affects color of disabled elements.\n// 2. Correct font properties not being inherited.\n// 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n//\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit; // 1\n font: inherit; // 2\n margin: 0; // 3\n}\n\n//\n// Address `overflow` set to `hidden` in IE 8/9/10/11.\n//\n\nbutton {\n overflow: visible;\n}\n\n//\n// Address inconsistent `text-transform` inheritance for `button` and `select`.\n// All other form control elements do not inherit `text-transform` values.\n// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n// Correct `select` style inheritance in Firefox.\n//\n\nbutton,\nselect {\n text-transform: none;\n}\n\n//\n// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n// and `video` controls.\n// 2. Correct inability to style clickable `input` types in iOS.\n// 3. Improve usability and consistency of cursor style between image-type\n// `input` and others.\n//\n\nbutton,\nhtml input[type=\"button\"], // 1\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; // 2\n cursor: pointer; // 3\n}\n\n//\n// Re-set default cursor for disabled elements.\n//\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n//\n// Remove inner padding and border in Firefox 4+.\n//\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n//\n// Address Firefox 4+ setting `line-height` on `input` using `!important` in\n// the UA stylesheet.\n//\n\ninput {\n line-height: normal;\n}\n\n//\n// It's recommended that you don't attempt to style these elements.\n// Firefox's implementation doesn't respect box-sizing, padding, or width.\n//\n// 1. Address box sizing set to `content-box` in IE 8/9/10.\n// 2. Remove excess padding in IE 8/9/10.\n//\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; // 1\n padding: 0; // 2\n}\n\n//\n// Fix the cursor style for Chrome's increment/decrement buttons. For certain\n// `font-size` values of the `input`, it causes the cursor style of the\n// decrement button to change from `default` to `text`.\n//\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n//\n// 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n// 2. Address `box-sizing` set to `border-box` in Safari and Chrome\n// (include `-moz` to future-proof).\n//\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; // 1\n -moz-box-sizing: content-box;\n -webkit-box-sizing: content-box; // 2\n box-sizing: content-box;\n}\n\n//\n// Remove inner padding and search cancel button in Safari and Chrome on OS X.\n// Safari (but not Chrome) clips the cancel button when the search input has\n// padding (and `textfield` appearance).\n//\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// Define consistent border, margin, and padding.\n//\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n//\n// 1. Correct `color` not being inherited in IE 8/9/10/11.\n// 2. Remove padding so people aren't caught out if they zero out fieldsets.\n//\n\nlegend {\n border: 0; // 1\n padding: 0; // 2\n}\n\n//\n// Remove default vertical scrollbar in IE 8/9/10/11.\n//\n\ntextarea {\n overflow: auto;\n}\n\n//\n// Don't inherit the `font-weight` (applied by a rule above).\n// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n//\n\noptgroup {\n font-weight: bold;\n}\n\n// Tables\n// ==========================================================================\n\n//\n// Remove most spacing between table cells.\n//\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}\n","/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n\n// ==========================================================================\n// Print styles.\n// Inlined to avoid the additional HTTP request: h5bp.com/r\n// ==========================================================================\n\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important; // Black prints faster: h5bp.com/s\n box-shadow: none !important;\n text-shadow: none !important;\n }\n\n a,\n a:visited {\n text-decoration: underline;\n }\n\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n\n // Don't show links that are fragment identifiers,\n // or use the `javascript:` pseudo protocol\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n\n thead {\n display: table-header-group; // h5bp.com/t\n }\n\n tr,\n img {\n page-break-inside: avoid;\n }\n\n img {\n max-width: 100% !important;\n }\n\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n\n h2,\n h3 {\n page-break-after: avoid;\n }\n\n // Bootstrap specific changes start\n //\n // Chrome (OSX) fix for https://github.com/twbs/bootstrap/issues/11245\n // Once fixed, we can just straight up remove this.\n select {\n background: #fff !important;\n }\n\n // Bootstrap components\n .navbar {\n display: none;\n }\n .btn,\n .dropup > .btn {\n > .caret {\n border-top-color: #000 !important;\n }\n }\n .label {\n border: 1px solid #000;\n }\n\n .table {\n border-collapse: collapse !important;\n\n td,\n th {\n background-color: #fff !important;\n }\n }\n .table-bordered {\n th,\n td {\n border: 1px solid #ddd !important;\n }\n }\n\n // Bootstrap specific changes end\n}\n","//\n// Glyphicons for Bootstrap\n//\n// Since icons are fonts, they can be placed anywhere text is placed and are\n// thus automatically sized to match the surrounding child. To use, create an\n// inline element with the appropriate classes, like so:\n//\n// Star\n\n// Import the fonts\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('@{icon-font-path}@{icon-font-name}.eot');\n src: url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype'),\n url('@{icon-font-path}@{icon-font-name}.woff') format('woff'),\n url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype'),\n url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg');\n}\n\n// Catchall baseclass\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n// Individual icons\n.glyphicon-asterisk { &:before { content: \"\\2a\"; } }\n.glyphicon-plus { &:before { content: \"\\2b\"; } }\n.glyphicon-euro,\n.glyphicon-eur { &:before { content: \"\\20ac\"; } }\n.glyphicon-minus { &:before { content: \"\\2212\"; } }\n.glyphicon-cloud { &:before { content: \"\\2601\"; } }\n.glyphicon-envelope { &:before { content: \"\\2709\"; } }\n.glyphicon-pencil { &:before { content: \"\\270f\"; } }\n.glyphicon-glass { &:before { content: \"\\e001\"; } }\n.glyphicon-music { &:before { content: \"\\e002\"; } }\n.glyphicon-search { &:before { content: \"\\e003\"; } }\n.glyphicon-heart { &:before { content: \"\\e005\"; } }\n.glyphicon-star { &:before { content: \"\\e006\"; } }\n.glyphicon-star-empty { &:before { content: \"\\e007\"; } }\n.glyphicon-user { &:before { content: \"\\e008\"; } }\n.glyphicon-film { &:before { content: \"\\e009\"; } }\n.glyphicon-th-large { &:before { content: \"\\e010\"; } }\n.glyphicon-th { &:before { content: \"\\e011\"; } }\n.glyphicon-th-list { &:before { content: \"\\e012\"; } }\n.glyphicon-ok { &:before { content: \"\\e013\"; } }\n.glyphicon-remove { &:before { content: \"\\e014\"; } }\n.glyphicon-zoom-in { &:before { content: \"\\e015\"; } }\n.glyphicon-zoom-out { &:before { content: \"\\e016\"; } }\n.glyphicon-off { &:before { content: \"\\e017\"; } }\n.glyphicon-signal { &:before { content: \"\\e018\"; } }\n.glyphicon-cog { &:before { content: \"\\e019\"; } }\n.glyphicon-trash { &:before { content: \"\\e020\"; } }\n.glyphicon-home { &:before { content: \"\\e021\"; } }\n.glyphicon-file { &:before { content: \"\\e022\"; } }\n.glyphicon-time { &:before { content: \"\\e023\"; } }\n.glyphicon-road { &:before { content: \"\\e024\"; } }\n.glyphicon-download-alt { &:before { content: \"\\e025\"; } }\n.glyphicon-download { &:before { content: \"\\e026\"; } }\n.glyphicon-upload { &:before { content: \"\\e027\"; } }\n.glyphicon-inbox { &:before { content: \"\\e028\"; } }\n.glyphicon-play-circle { &:before { content: \"\\e029\"; } }\n.glyphicon-repeat { &:before { content: \"\\e030\"; } }\n.glyphicon-refresh { &:before { content: \"\\e031\"; } }\n.glyphicon-list-alt { &:before { content: \"\\e032\"; } }\n.glyphicon-lock { &:before { content: \"\\e033\"; } }\n.glyphicon-flag { &:before { content: \"\\e034\"; } }\n.glyphicon-headphones { &:before { content: \"\\e035\"; } }\n.glyphicon-volume-off { &:before { content: \"\\e036\"; } }\n.glyphicon-volume-down { &:before { content: \"\\e037\"; } }\n.glyphicon-volume-up { &:before { content: \"\\e038\"; } }\n.glyphicon-qrcode { &:before { content: \"\\e039\"; } }\n.glyphicon-barcode { &:before { content: \"\\e040\"; } }\n.glyphicon-tag { &:before { content: \"\\e041\"; } }\n.glyphicon-tags { &:before { content: \"\\e042\"; } }\n.glyphicon-book { &:before { content: \"\\e043\"; } }\n.glyphicon-bookmark { &:before { content: \"\\e044\"; } }\n.glyphicon-print { &:before { content: \"\\e045\"; } }\n.glyphicon-camera { &:before { content: \"\\e046\"; } }\n.glyphicon-font { &:before { content: \"\\e047\"; } }\n.glyphicon-bold { &:before { content: \"\\e048\"; } }\n.glyphicon-italic { &:before { content: \"\\e049\"; } }\n.glyphicon-text-height { &:before { content: \"\\e050\"; } }\n.glyphicon-text-width { &:before { content: \"\\e051\"; } }\n.glyphicon-align-left { &:before { content: \"\\e052\"; } }\n.glyphicon-align-center { &:before { content: \"\\e053\"; } }\n.glyphicon-align-right { &:before { content: \"\\e054\"; } }\n.glyphicon-align-justify { &:before { content: \"\\e055\"; } }\n.glyphicon-list { &:before { content: \"\\e056\"; } }\n.glyphicon-indent-left { &:before { content: \"\\e057\"; } }\n.glyphicon-indent-right { &:before { content: \"\\e058\"; } }\n.glyphicon-facetime-video { &:before { content: \"\\e059\"; } }\n.glyphicon-picture { &:before { content: \"\\e060\"; } }\n.glyphicon-map-marker { &:before { content: \"\\e062\"; } }\n.glyphicon-adjust { &:before { content: \"\\e063\"; } }\n.glyphicon-tint { &:before { content: \"\\e064\"; } }\n.glyphicon-edit { &:before { content: \"\\e065\"; } }\n.glyphicon-share { &:before { content: \"\\e066\"; } }\n.glyphicon-check { &:before { content: \"\\e067\"; } }\n.glyphicon-move { &:before { content: \"\\e068\"; } }\n.glyphicon-step-backward { &:before { content: \"\\e069\"; } }\n.glyphicon-fast-backward { &:before { content: \"\\e070\"; } }\n.glyphicon-backward { &:before { content: \"\\e071\"; } }\n.glyphicon-play { &:before { content: \"\\e072\"; } }\n.glyphicon-pause { &:before { content: \"\\e073\"; } }\n.glyphicon-stop { &:before { content: \"\\e074\"; } }\n.glyphicon-forward { &:before { content: \"\\e075\"; } }\n.glyphicon-fast-forward { &:before { content: \"\\e076\"; } }\n.glyphicon-step-forward { &:before { content: \"\\e077\"; } }\n.glyphicon-eject { &:before { content: \"\\e078\"; } }\n.glyphicon-chevron-left { &:before { content: \"\\e079\"; } }\n.glyphicon-chevron-right { &:before { content: \"\\e080\"; } }\n.glyphicon-plus-sign { &:before { content: \"\\e081\"; } }\n.glyphicon-minus-sign { &:before { content: \"\\e082\"; } }\n.glyphicon-remove-sign { &:before { content: \"\\e083\"; } }\n.glyphicon-ok-sign { &:before { content: \"\\e084\"; } }\n.glyphicon-question-sign { &:before { content: \"\\e085\"; } }\n.glyphicon-info-sign { &:before { content: \"\\e086\"; } }\n.glyphicon-screenshot { &:before { content: \"\\e087\"; } }\n.glyphicon-remove-circle { &:before { content: \"\\e088\"; } }\n.glyphicon-ok-circle { &:before { content: \"\\e089\"; } }\n.glyphicon-ban-circle { &:before { content: \"\\e090\"; } }\n.glyphicon-arrow-left { &:before { content: \"\\e091\"; } }\n.glyphicon-arrow-right { &:before { content: \"\\e092\"; } }\n.glyphicon-arrow-up { &:before { content: \"\\e093\"; } }\n.glyphicon-arrow-down { &:before { content: \"\\e094\"; } }\n.glyphicon-share-alt { &:before { content: \"\\e095\"; } }\n.glyphicon-resize-full { &:before { content: \"\\e096\"; } }\n.glyphicon-resize-small { &:before { content: \"\\e097\"; } }\n.glyphicon-exclamation-sign { &:before { content: \"\\e101\"; } }\n.glyphicon-gift { &:before { content: \"\\e102\"; } }\n.glyphicon-leaf { &:before { content: \"\\e103\"; } }\n.glyphicon-fire { &:before { content: \"\\e104\"; } }\n.glyphicon-eye-open { &:before { content: \"\\e105\"; } }\n.glyphicon-eye-close { &:before { content: \"\\e106\"; } }\n.glyphicon-warning-sign { &:before { content: \"\\e107\"; } }\n.glyphicon-plane { &:before { content: \"\\e108\"; } }\n.glyphicon-calendar { &:before { content: \"\\e109\"; } }\n.glyphicon-random { &:before { content: \"\\e110\"; } }\n.glyphicon-comment { &:before { content: \"\\e111\"; } }\n.glyphicon-magnet { &:before { content: \"\\e112\"; } }\n.glyphicon-chevron-up { &:before { content: \"\\e113\"; } }\n.glyphicon-chevron-down { &:before { content: \"\\e114\"; } }\n.glyphicon-retweet { &:before { content: \"\\e115\"; } }\n.glyphicon-shopping-cart { &:before { content: \"\\e116\"; } }\n.glyphicon-folder-close { &:before { content: \"\\e117\"; } }\n.glyphicon-folder-open { &:before { content: \"\\e118\"; } }\n.glyphicon-resize-vertical { &:before { content: \"\\e119\"; } }\n.glyphicon-resize-horizontal { &:before { content: \"\\e120\"; } }\n.glyphicon-hdd { &:before { content: \"\\e121\"; } }\n.glyphicon-bullhorn { &:before { content: \"\\e122\"; } }\n.glyphicon-bell { &:before { content: \"\\e123\"; } }\n.glyphicon-certificate { &:before { content: \"\\e124\"; } }\n.glyphicon-thumbs-up { &:before { content: \"\\e125\"; } }\n.glyphicon-thumbs-down { &:before { content: \"\\e126\"; } }\n.glyphicon-hand-right { &:before { content: \"\\e127\"; } }\n.glyphicon-hand-left { &:before { content: \"\\e128\"; } }\n.glyphicon-hand-up { &:before { content: \"\\e129\"; } }\n.glyphicon-hand-down { &:before { content: \"\\e130\"; } }\n.glyphicon-circle-arrow-right { &:before { content: \"\\e131\"; } }\n.glyphicon-circle-arrow-left { &:before { content: \"\\e132\"; } }\n.glyphicon-circle-arrow-up { &:before { content: \"\\e133\"; } }\n.glyphicon-circle-arrow-down { &:before { content: \"\\e134\"; } }\n.glyphicon-globe { &:before { content: \"\\e135\"; } }\n.glyphicon-wrench { &:before { content: \"\\e136\"; } }\n.glyphicon-tasks { &:before { content: \"\\e137\"; } }\n.glyphicon-filter { &:before { content: \"\\e138\"; } }\n.glyphicon-briefcase { &:before { content: \"\\e139\"; } }\n.glyphicon-fullscreen { &:before { content: \"\\e140\"; } }\n.glyphicon-dashboard { &:before { content: \"\\e141\"; } }\n.glyphicon-paperclip { &:before { content: \"\\e142\"; } }\n.glyphicon-heart-empty { &:before { content: \"\\e143\"; } }\n.glyphicon-link { &:before { content: \"\\e144\"; } }\n.glyphicon-phone { &:before { content: \"\\e145\"; } }\n.glyphicon-pushpin { &:before { content: \"\\e146\"; } }\n.glyphicon-usd { &:before { content: \"\\e148\"; } }\n.glyphicon-gbp { &:before { content: \"\\e149\"; } }\n.glyphicon-sort { &:before { content: \"\\e150\"; } }\n.glyphicon-sort-by-alphabet { &:before { content: \"\\e151\"; } }\n.glyphicon-sort-by-alphabet-alt { &:before { content: \"\\e152\"; } }\n.glyphicon-sort-by-order { &:before { content: \"\\e153\"; } }\n.glyphicon-sort-by-order-alt { &:before { content: \"\\e154\"; } }\n.glyphicon-sort-by-attributes { &:before { content: \"\\e155\"; } }\n.glyphicon-sort-by-attributes-alt { &:before { content: \"\\e156\"; } }\n.glyphicon-unchecked { &:before { content: \"\\e157\"; } }\n.glyphicon-expand { &:before { content: \"\\e158\"; } }\n.glyphicon-collapse-down { &:before { content: \"\\e159\"; } }\n.glyphicon-collapse-up { &:before { content: \"\\e160\"; } }\n.glyphicon-log-in { &:before { content: \"\\e161\"; } }\n.glyphicon-flash { &:before { content: \"\\e162\"; } }\n.glyphicon-log-out { &:before { content: \"\\e163\"; } }\n.glyphicon-new-window { &:before { content: \"\\e164\"; } }\n.glyphicon-record { &:before { content: \"\\e165\"; } }\n.glyphicon-save { &:before { content: \"\\e166\"; } }\n.glyphicon-open { &:before { content: \"\\e167\"; } }\n.glyphicon-saved { &:before { content: \"\\e168\"; } }\n.glyphicon-import { &:before { content: \"\\e169\"; } }\n.glyphicon-export { &:before { content: \"\\e170\"; } }\n.glyphicon-send { &:before { content: \"\\e171\"; } }\n.glyphicon-floppy-disk { &:before { content: \"\\e172\"; } }\n.glyphicon-floppy-saved { &:before { content: \"\\e173\"; } }\n.glyphicon-floppy-remove { &:before { content: \"\\e174\"; } }\n.glyphicon-floppy-save { &:before { content: \"\\e175\"; } }\n.glyphicon-floppy-open { &:before { content: \"\\e176\"; } }\n.glyphicon-credit-card { &:before { content: \"\\e177\"; } }\n.glyphicon-transfer { &:before { content: \"\\e178\"; } }\n.glyphicon-cutlery { &:before { content: \"\\e179\"; } }\n.glyphicon-header { &:before { content: \"\\e180\"; } }\n.glyphicon-compressed { &:before { content: \"\\e181\"; } }\n.glyphicon-earphone { &:before { content: \"\\e182\"; } }\n.glyphicon-phone-alt { &:before { content: \"\\e183\"; } }\n.glyphicon-tower { &:before { content: \"\\e184\"; } }\n.glyphicon-stats { &:before { content: \"\\e185\"; } }\n.glyphicon-sd-video { &:before { content: \"\\e186\"; } }\n.glyphicon-hd-video { &:before { content: \"\\e187\"; } }\n.glyphicon-subtitles { &:before { content: \"\\e188\"; } }\n.glyphicon-sound-stereo { &:before { content: \"\\e189\"; } }\n.glyphicon-sound-dolby { &:before { content: \"\\e190\"; } }\n.glyphicon-sound-5-1 { &:before { content: \"\\e191\"; } }\n.glyphicon-sound-6-1 { &:before { content: \"\\e192\"; } }\n.glyphicon-sound-7-1 { &:before { content: \"\\e193\"; } }\n.glyphicon-copyright-mark { &:before { content: \"\\e194\"; } }\n.glyphicon-registration-mark { &:before { content: \"\\e195\"; } }\n.glyphicon-cloud-download { &:before { content: \"\\e197\"; } }\n.glyphicon-cloud-upload { &:before { content: \"\\e198\"; } }\n.glyphicon-tree-conifer { &:before { content: \"\\e199\"; } }\n.glyphicon-tree-deciduous { &:before { content: \"\\e200\"; } }\n","//\n// Scaffolding\n// --------------------------------------------------\n\n\n// Reset the box-sizing\n//\n// Heads up! This reset may cause conflicts with some third-party widgets.\n// For recommendations on resolving such conflicts, see\n// http://getbootstrap.com/getting-started/#third-box-sizing\n* {\n .box-sizing(border-box);\n}\n*:before,\n*:after {\n .box-sizing(border-box);\n}\n\n\n// Body reset\n\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0,0,0,0);\n}\n\nbody {\n font-family: @font-family-base;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @text-color;\n background-color: @body-bg;\n}\n\n// Reset fonts for relevant elements\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\n\n// Links\n\na {\n color: @link-color;\n text-decoration: none;\n\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: @link-hover-decoration;\n }\n\n &:focus {\n .tab-focus();\n }\n}\n\n\n// Figures\n//\n// We reset this here because previously Normalize had no `figure` margins. This\n// ensures we don't break anyone's use of the element.\n\nfigure {\n margin: 0;\n}\n\n\n// Images\n\nimg {\n vertical-align: middle;\n}\n\n// Responsive images (ensure images don't scale beyond their parents)\n.img-responsive {\n .img-responsive();\n}\n\n// Rounded corners\n.img-rounded {\n border-radius: @border-radius-large;\n}\n\n// Image thumbnails\n//\n// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.\n.img-thumbnail {\n padding: @thumbnail-padding;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(all .2s ease-in-out);\n\n // Keep them at most 100% wide\n .img-responsive(inline-block);\n}\n\n// Perfect circle\n.img-circle {\n border-radius: 50%; // set radius in percents\n}\n\n\n// Horizontal rules\n\nhr {\n margin-top: @line-height-computed;\n margin-bottom: @line-height-computed;\n border: 0;\n border-top: 1px solid @hr-border;\n}\n\n\n// Only display content to screen readers\n//\n// See: http://a11yproject.com/posts/how-to-hide-content/\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0,0,0,0);\n border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n// Useful for \"Skip to main content\" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n// Credit: HTML5 Boilerplate\n\n.sr-only-focusable {\n &:active,\n &:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n }\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They will be removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility){\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // See https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// WebKit-style focus\n\n.tab-focus() {\n // Default\n outline: thin dotted;\n // WebKit\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n.img-responsive(@display: block) {\n display: @display;\n max-width: 100%; // Part 1: Set a maximum relative to the parent\n height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size. Note that the\n// spelling of `min--moz-device-pixel-ratio` is intentional.\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n background-image: url(\"@{file-1x}\");\n\n @media\n only screen and (-webkit-min-device-pixel-ratio: 2),\n only screen and ( min--moz-device-pixel-ratio: 2),\n only screen and ( -o-min-device-pixel-ratio: 2/1),\n only screen and ( min-device-pixel-ratio: 2),\n only screen and ( min-resolution: 192dpi),\n only screen and ( min-resolution: 2dppx) {\n background-image: url(\"@{file-2x}\");\n background-size: @width-1x @height-1x;\n }\n}\n","//\n// Typography\n// --------------------------------------------------\n\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n font-family: @headings-font-family;\n font-weight: @headings-font-weight;\n line-height: @headings-line-height;\n color: @headings-color;\n\n small,\n .small {\n font-weight: normal;\n line-height: 1;\n color: @headings-small-color;\n }\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n margin-top: @line-height-computed;\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 65%;\n }\n}\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n margin-top: (@line-height-computed / 2);\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 75%;\n }\n}\n\nh1, .h1 { font-size: @font-size-h1; }\nh2, .h2 { font-size: @font-size-h2; }\nh3, .h3 { font-size: @font-size-h3; }\nh4, .h4 { font-size: @font-size-h4; }\nh5, .h5 { font-size: @font-size-h5; }\nh6, .h6 { font-size: @font-size-h6; }\n\n\n// Body text\n// -------------------------\n\np {\n margin: 0 0 (@line-height-computed / 2);\n}\n\n.lead {\n margin-bottom: @line-height-computed;\n font-size: floor((@font-size-base * 1.15));\n font-weight: 300;\n line-height: 1.4;\n\n @media (min-width: @screen-sm-min) {\n font-size: (@font-size-base * 1.5);\n }\n}\n\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: (12px small font / 14px base font) * 100% = about 85%\nsmall,\n.small {\n font-size: floor((100% * @font-size-small / @font-size-base));\n}\n\nmark,\n.mark {\n background-color: @state-warning-bg;\n padding: .2em;\n}\n\n// Alignment\n.text-left { text-align: left; }\n.text-right { text-align: right; }\n.text-center { text-align: center; }\n.text-justify { text-align: justify; }\n.text-nowrap { white-space: nowrap; }\n\n// Transformation\n.text-lowercase { text-transform: lowercase; }\n.text-uppercase { text-transform: uppercase; }\n.text-capitalize { text-transform: capitalize; }\n\n// Contextual colors\n.text-muted {\n color: @text-muted;\n}\n.text-primary {\n .text-emphasis-variant(@brand-primary);\n}\n.text-success {\n .text-emphasis-variant(@state-success-text);\n}\n.text-info {\n .text-emphasis-variant(@state-info-text);\n}\n.text-warning {\n .text-emphasis-variant(@state-warning-text);\n}\n.text-danger {\n .text-emphasis-variant(@state-danger-text);\n}\n\n// Contextual backgrounds\n// For now we'll leave these alongside the text classes until v4 when we can\n// safely shift things around (per SemVer rules).\n.bg-primary {\n // Given the contrast here, this is the only class to have its color inverted\n // automatically.\n color: #fff;\n .bg-variant(@brand-primary);\n}\n.bg-success {\n .bg-variant(@state-success-bg);\n}\n.bg-info {\n .bg-variant(@state-info-bg);\n}\n.bg-warning {\n .bg-variant(@state-warning-bg);\n}\n.bg-danger {\n .bg-variant(@state-danger-bg);\n}\n\n\n// Page header\n// -------------------------\n\n.page-header {\n padding-bottom: ((@line-height-computed / 2) - 1);\n margin: (@line-height-computed * 2) 0 @line-height-computed;\n border-bottom: 1px solid @page-header-border-color;\n}\n\n\n// Lists\n// -------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n margin-top: 0;\n margin-bottom: (@line-height-computed / 2);\n ul,\n ol {\n margin-bottom: 0;\n }\n}\n\n// List options\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n .list-unstyled();\n margin-left: -5px;\n\n > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n }\n}\n\n// Description Lists\ndl {\n margin-top: 0; // Remove browser default\n margin-bottom: @line-height-computed;\n}\ndt,\ndd {\n line-height: @line-height-base;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n.dl-horizontal {\n dd {\n &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present\n }\n\n @media (min-width: @grid-float-breakpoint) {\n dt {\n float: left;\n width: (@dl-horizontal-offset - 20);\n clear: left;\n text-align: right;\n .text-overflow();\n }\n dd {\n margin-left: @dl-horizontal-offset;\n }\n }\n}\n\n\n// Misc\n// -------------------------\n\n// Abbreviations and acronyms\nabbr[title],\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted @abbr-border-color;\n}\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\n\n// Blockquotes\nblockquote {\n padding: (@line-height-computed / 2) @line-height-computed;\n margin: 0 0 @line-height-computed;\n font-size: @blockquote-font-size;\n border-left: 5px solid @blockquote-border-color;\n\n p,\n ul,\n ol {\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n // Note: Deprecated small and .small as of v3.1.0\n // Context: https://github.com/twbs/bootstrap/issues/11660\n footer,\n small,\n .small {\n display: block;\n font-size: 80%; // back to default font-size\n line-height: @line-height-base;\n color: @blockquote-small-color;\n\n &:before {\n content: '\\2014 \\00A0'; // em dash, nbsp\n }\n }\n}\n\n// Opposite alignment of blockquote\n//\n// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid @blockquote-border-color;\n border-left: 0;\n text-align: right;\n\n // Account for citation\n footer,\n small,\n .small {\n &:before { content: ''; }\n &:after {\n content: '\\00A0 \\2014'; // nbsp, em dash\n }\n }\n}\n\n// Addresses\naddress {\n margin-bottom: @line-height-computed;\n font-style: normal;\n line-height: @line-height-base;\n}\n","// Typography\n\n.text-emphasis-variant(@color) {\n color: @color;\n a&:hover {\n color: darken(@color, 10%);\n }\n}\n","// Contextual backgrounds\n\n.bg-variant(@color) {\n background-color: @color;\n a&:hover {\n background-color: darken(@color, 10%);\n }\n}\n","// Text overflow\n// Requires inline-block or block for proper styling\n\n.text-overflow() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n","//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n font-family: @font-family-monospace;\n}\n\n// Inline code\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: @code-color;\n background-color: @code-bg;\n border-radius: @border-radius-base;\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: @kbd-color;\n background-color: @kbd-bg;\n border-radius: @border-radius-small;\n box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);\n\n kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none;\n }\n}\n\n// Blocks of code\npre {\n display: block;\n padding: ((@line-height-computed - 1) / 2);\n margin: 0 0 (@line-height-computed / 2);\n font-size: (@font-size-base - 1); // 14px to 13px\n line-height: @line-height-base;\n word-break: break-all;\n word-wrap: break-word;\n color: @pre-color;\n background-color: @pre-bg;\n border: 1px solid @pre-border-color;\n border-radius: @border-radius-base;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: @pre-scrollable-max-height;\n overflow-y: scroll;\n}\n","//\n// Grid system\n// --------------------------------------------------\n\n\n// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n.container {\n .container-fixed();\n\n @media (min-width: @screen-sm-min) {\n width: @container-sm;\n }\n @media (min-width: @screen-md-min) {\n width: @container-md;\n }\n @media (min-width: @screen-lg-min) {\n width: @container-lg;\n }\n}\n\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but without any defined\n// width for fluid, full width layouts.\n\n.container-fluid {\n .container-fixed();\n}\n\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n.row {\n .make-row();\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n.make-grid-columns();\n\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n.make-grid(xs);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: @screen-sm-min) {\n .make-grid(sm);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: @screen-md-min) {\n .make-grid(md);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: @screen-lg-min) {\n .make-grid(lg);\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n// Centered container element\n.container-fixed(@gutter: @grid-gutter-width) {\n margin-right: auto;\n margin-left: auto;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n &:extend(.clearfix all);\n}\n\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n margin-left: (@gutter / -2);\n margin-right: (@gutter / -2);\n &:extend(.clearfix all);\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n float: left;\n width: percentage((@columns / @grid-columns));\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n}\n.make-xs-column-offset(@columns) {\n margin-left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-push(@columns) {\n left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-pull(@columns) {\n right: percentage((@columns / @grid-columns));\n}\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-sm-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-offset(@columns) {\n @media (min-width: @screen-sm-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-push(@columns) {\n @media (min-width: @screen-sm-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-pull(@columns) {\n @media (min-width: @screen-sm-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-md-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-offset(@columns) {\n @media (min-width: @screen-md-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-push(@columns) {\n @media (min-width: @screen-md-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-pull(@columns) {\n @media (min-width: @screen-md-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-lg-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-offset(@columns) {\n @media (min-width: @screen-lg-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-push(@columns) {\n @media (min-width: @screen-lg-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-pull(@columns) {\n @media (min-width: @screen-lg-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `@grid-columns`.\n\n.make-grid-columns() {\n // Common styles for all sizes of grid columns, widths 1-12\n .col(@index) { // initial\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general; \"=<\" isn't a typo\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n position: relative;\n // Prevent columns from collapsing when empty\n min-height: 1px;\n // Inner gutter via padding\n padding-left: (@grid-gutter-width / 2);\n padding-right: (@grid-gutter-width / 2);\n }\n }\n .col(1); // kickstart it\n}\n\n.float-grid-columns(@class) {\n .col(@index) { // initial\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n float: left;\n }\n }\n .col(1); // kickstart it\n}\n\n.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {\n .col-@{class}-@{index} {\n width: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) {\n .col-@{class}-push-@{index} {\n left: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) {\n .col-@{class}-push-0 {\n left: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) {\n .col-@{class}-pull-@{index} {\n right: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) {\n .col-@{class}-pull-0 {\n right: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = offset) {\n .col-@{class}-offset-@{index} {\n margin-left: percentage((@index / @grid-columns));\n }\n}\n\n// Basic looping in LESS\n.loop-grid-columns(@index, @class, @type) when (@index >= 0) {\n .calc-grid-column(@index, @class, @type);\n // next iteration\n .loop-grid-columns((@index - 1), @class, @type);\n}\n\n// Create grid for specific class\n.make-grid(@class) {\n .float-grid-columns(@class);\n .loop-grid-columns(@grid-columns, @class, width);\n .loop-grid-columns(@grid-columns, @class, pull);\n .loop-grid-columns(@grid-columns, @class, push);\n .loop-grid-columns(@grid-columns, @class, offset);\n}\n","//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n background-color: @table-bg;\n}\ncaption {\n padding-top: @table-cell-padding;\n padding-bottom: @table-cell-padding;\n color: @text-muted;\n text-align: left;\n}\nth {\n text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: @line-height-computed;\n // Cells\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-cell-padding;\n line-height: @line-height-base;\n vertical-align: top;\n border-top: 1px solid @table-border-color;\n }\n }\n }\n // Bottom align for column headings\n > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid @table-border-color;\n }\n // Remove top border from thead by default\n > caption + thead,\n > colgroup + thead,\n > thead:first-child {\n > tr:first-child {\n > th,\n > td {\n border-top: 0;\n }\n }\n }\n // Account for multiple tbody instances\n > tbody + tbody {\n border-top: 2px solid @table-border-color;\n }\n\n // Nesting\n .table {\n background-color: @body-bg;\n }\n}\n\n\n// Condensed table w/ half padding\n\n.table-condensed {\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-condensed-cell-padding;\n }\n }\n }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n border: 1px solid @table-border-color;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n border: 1px solid @table-border-color;\n }\n }\n }\n > thead > tr {\n > th,\n > td {\n border-bottom-width: 2px;\n }\n }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n > tbody > tr:nth-child(odd) {\n background-color: @table-bg-accent;\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n > tbody > tr:hover {\n background-color: @table-bg-hover;\n }\n}\n\n\n// Table cell sizing\n//\n// Reset default table behavior\n\ntable col[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-column;\n}\ntable {\n td,\n th {\n &[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-cell;\n }\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n// Generate the contextual variants\n.table-row-variant(active; @table-bg-active);\n.table-row-variant(success; @state-success-bg);\n.table-row-variant(info; @state-info-bg);\n.table-row-variant(warning; @state-warning-bg);\n.table-row-variant(danger; @state-danger-bg);\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%; // Workaround for IE9 bug (see https://github.com/twbs/bootstrap/issues/14837)\n\n @media screen and (max-width: @screen-xs-max) {\n width: 100%;\n margin-bottom: (@line-height-computed * 0.75);\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid @table-border-color;\n\n // Tighten up spacing\n > .table {\n margin-bottom: 0;\n\n // Ensure the content doesn't wrap\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n white-space: nowrap;\n }\n }\n }\n }\n\n // Special overrides for the bordered tables\n > .table-bordered {\n border: 0;\n\n // Nuke the appropriate borders so that the parent can handle them\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n\n // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\n // chances are there will be only one `tr` in a `thead` and that would\n // remove the border altogether.\n > tbody,\n > tfoot {\n > tr:last-child {\n > th,\n > td {\n border-bottom: 0;\n }\n }\n }\n\n }\n }\n}\n","// Tables\n\n.table-row-variant(@state; @background) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table > thead > tr,\n .table > tbody > tr,\n .table > tfoot > tr {\n > td.@{state},\n > th.@{state},\n &.@{state} > td,\n &.@{state} > th {\n background-color: @background;\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover > tbody > tr {\n > td.@{state}:hover,\n > th.@{state}:hover,\n &.@{state}:hover > td,\n &:hover > .@{state},\n &.@{state}:hover > th {\n background-color: darken(@background, 5%);\n }\n }\n}\n","//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n // Chrome and Firefox set a `min-width: min-content;` on fieldsets,\n // so we reset that to ensure it behaves more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359.\n min-width: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: @line-height-computed;\n font-size: (@font-size-base * 1.5);\n line-height: inherit;\n color: @legend-color;\n border: 0;\n border-bottom: 1px solid @legend-border-color;\n}\n\nlabel {\n display: inline-block;\n max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)\n margin-bottom: 5px;\n font-weight: bold;\n}\n\n\n// Normalize form controls\n//\n// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\n\n// Override content-box in Normalize (* isn't specific enough)\ninput[type=\"search\"] {\n .box-sizing(border-box);\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9; // IE8-9\n line-height: normal;\n}\n\n// Set the height of file controls to match text inputs\ninput[type=\"file\"] {\n display: block;\n}\n\n// Make range inputs behave like textual form controls\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\n\n// Make multiple select elements height not fixed\nselect[multiple],\nselect[size] {\n height: auto;\n}\n\n// Focus for file, radio, and checkbox\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n .tab-focus();\n}\n\n// Adjust output element\noutput {\n display: block;\n padding-top: (@padding-base-vertical + 1);\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n}\n\n\n// Common form controls\n//\n// Shared size and type resets for form controls. Apply `.form-control` to any\n// of the following form controls:\n//\n// select\n// textarea\n// input[type=\"text\"]\n// input[type=\"password\"]\n// input[type=\"datetime\"]\n// input[type=\"datetime-local\"]\n// input[type=\"date\"]\n// input[type=\"month\"]\n// input[type=\"time\"]\n// input[type=\"week\"]\n// input[type=\"number\"]\n// input[type=\"email\"]\n// input[type=\"url\"]\n// input[type=\"search\"]\n// input[type=\"tel\"]\n// input[type=\"color\"]\n\n.form-control {\n display: block;\n width: 100%;\n height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n background-color: @input-bg;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid @input-border;\n border-radius: @input-border-radius;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));\n .transition(~\"border-color ease-in-out .15s, box-shadow ease-in-out .15s\");\n\n // Customize the `:focus` state to imitate native WebKit styles.\n .form-control-focus();\n\n // Placeholder\n .placeholder();\n\n // Disabled and read-only inputs\n //\n // HTML5 says that controls under a fieldset > legend:first-child won't be\n // disabled if the fieldset is disabled. Due to implementation difficulty, we\n // don't honor that edge case; we style them as disabled anyway.\n &[disabled],\n &[readonly],\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n background-color: @input-bg-disabled;\n opacity: 1; // iOS fix for unreadable disabled content\n }\n\n // Reset height for `textarea`s\n textarea& {\n height: auto;\n }\n}\n\n\n// Search inputs in iOS\n//\n// This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n\ninput[type=\"search\"] {\n -webkit-appearance: none;\n}\n\n\n// Special styles for iOS temporal inputs\n//\n// In Mobile Safari, setting `display: block` on temporal inputs causes the\n// text within the input to become vertically misaligned. As a workaround, we\n// set a pixel line-height that matches the given height of the input, but only\n// for Safari.\n\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n input[type=\"date\"],\n input[type=\"time\"],\n input[type=\"datetime-local\"],\n input[type=\"month\"] {\n line-height: @input-height-base;\n }\n input[type=\"date\"].input-sm,\n input[type=\"time\"].input-sm,\n input[type=\"datetime-local\"].input-sm,\n input[type=\"month\"].input-sm {\n line-height: @input-height-small;\n }\n input[type=\"date\"].input-lg,\n input[type=\"time\"].input-lg,\n input[type=\"datetime-local\"].input-lg,\n input[type=\"month\"].input-lg {\n line-height: @input-height-large;\n }\n}\n\n\n// Form groups\n//\n// Designed to help with the organization and spacing of vertical forms. For\n// horizontal forms, use the predefined grid classes.\n\n.form-group {\n margin-bottom: 15px;\n}\n\n\n// Checkboxes and radios\n//\n// Indent the labels to position radios/checkboxes as hanging controls.\n\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px;\n\n label {\n min-height: @line-height-computed; // Ensure the input doesn't jump when there is no text\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer;\n }\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-left: -20px;\n margin-top: 4px \\9;\n}\n\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing\n}\n\n// Radios and checkboxes on same line\n.radio-inline,\n.checkbox-inline {\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px; // space out consecutive inline controls\n}\n\n// Apply same disabled cursor tweak as for inputs\n// Some special care is needed because
+ + diff --git a/www2/examples/graph2d/01_basic.html b/www2/examples/graph2d/01_basic.html new file mode 100644 index 00000000..84565a9e --- /dev/null +++ b/www2/examples/graph2d/01_basic.html @@ -0,0 +1,52 @@ + + + + + + + Graph2d | Basic Example + + + + + + + +

Graph2d | Basic Example

+
+ This example shows the most basic functionality of the vis.js Graph2d module. An array or a vis.Dataset can be used as input. + In the following examples we'll explore the options Graph2d offest for customization. This example uses all default settings. + There are 10 predefined styles that will be cycled through automatically when you add different groups. Alternatively you can + create your own styling. +

+ Graph2d is built upon the framework of the newly refactored timeline. A lot of the timeline options will also apply to Graph2d. + In these examples however, we will focus on what's new in Graph2d! +
+
+
+ + + + \ No newline at end of file diff --git a/www2/examples/graph2d/02_bars.html b/www2/examples/graph2d/02_bars.html new file mode 100644 index 00000000..1c0ec2b7 --- /dev/null +++ b/www2/examples/graph2d/02_bars.html @@ -0,0 +1,57 @@ + + + + Graph2d | Bar Graph Example + + + + + + + +

Graph2d | Bar Graph Example

+
+ This example shows the most the same data as the first example, except we plot the data as bars! The + dataAxis (y-axis) icons have been enabled as well. These icons are generated automatically from the CSS + styling of the graphs. Finally, we've used the option from Timeline where we draw the x-axis (time-axis) on top. +

+ The align option can be used to align the bar at the center of the datapoint or on the left or right side of it. + This example uses the default center alignment. +
+
+ +
+ + + + \ No newline at end of file diff --git a/www2/examples/graph2d/03_groups.html b/www2/examples/graph2d/03_groups.html new file mode 100644 index 00000000..8b924a63 --- /dev/null +++ b/www2/examples/graph2d/03_groups.html @@ -0,0 +1,112 @@ + + + + Graph2d | Groups Example + + + + + + + + +

Graph2d | Groups Example

+
+ This example shows the groups functionality within Graph2d. This works in the same way as it does in Timeline, + We have however simplified the constructor to accept groups as well to shorten the code. These groups are the + method used in Graph2d to define individual graphs. These groups can be given an individual class as well as all the + styling options you can supply to Graph2d! This example, as well as the ones that follow will showcase a few different usages + of these options.

+ + This example also introduces the automatically generated legend. The icons are automatically generated and the label is the + content as you define it in the groups. If you have datapoints that are not part of a group, a default group is created with the label: 'default'. + In this example, the setting defaultGroup is used to rename the default group to 'ungrouped'. +
+
+ +
+ + + + \ No newline at end of file diff --git a/www2/examples/graph2d/04_rightAxis.html b/www2/examples/graph2d/04_rightAxis.html new file mode 100644 index 00000000..597c33c0 --- /dev/null +++ b/www2/examples/graph2d/04_rightAxis.html @@ -0,0 +1,126 @@ + + + + Graph2d | Right Axis Example + + + + + + + +

Graph2d | Right Axis Example

+
+ This example shows the all of the graphs outlined on the right side using the yAxisOrientation option. + We also show a few custom styles for the graph and show icons on the axis, which are adhering to the custom styling. + Finally, the legend is manually positioned. Both the left and right axis + have their own legend. If one of the axis is unused, the legend is not shown. The options for the legend have been split + in a left and a right segment. Since this example shows the right axis, the right legend is configured. + + +
+
+
+ + + + \ No newline at end of file diff --git a/www2/examples/graph2d/05_bothAxis.html b/www2/examples/graph2d/05_bothAxis.html new file mode 100644 index 00000000..57fe7daa --- /dev/null +++ b/www2/examples/graph2d/05_bothAxis.html @@ -0,0 +1,138 @@ + + + + Graph2d | Both Axis Example + + + + + + + +

Graph2d | Both Axis Example

+
+ This example shows the some of the graphs outlined on the right side using the yAxisOrientation option within the groups. + We also show a few more custom styles for the graphs. Finally, the legend is manually positioned. Both the left and right axis + have their own legend. If one of the axis is unused, the legend is not shown. The options for the legend have been split + in a left and a right segment. The default position of the left axis has been changed. + + +
+
+
+ + + + \ No newline at end of file diff --git a/www2/examples/graph2d/06_interpolation.html b/www2/examples/graph2d/06_interpolation.html new file mode 100644 index 00000000..55fd0bbe --- /dev/null +++ b/www2/examples/graph2d/06_interpolation.html @@ -0,0 +1,101 @@ + + + + Graph2d | Interpolation + + + + + + + +

Graph2d | Interpolation

+
+ The Graph2d makes use of Catmull-Rom spline interpolation. + The user can configure these per group, or globally. In this example we show all 4 possiblities. The differences are in the parametrization of + the curves. The options are uniform, chordal and centripetal. Alternatively you can disable the Catmull-Rom interpolation and + a linear interpolation will be used. The centripetal parametrization produces the best result (no self intersection, yet follows the line closely) and is therefore the default setting. +

+ For both the centripetal and chordal parametrization, the distances between the points have to be calculated and this makes these methods computationally intensive + if there are very many points. The uniform parametrization still has to do transformations, though it does not have to calculate the distance between point. Finally, the + linear interpolation is the fastest method. For more on the Catmull-Rom method, C. Yuksel et al. have an interesting paper titled ″On the parametrization of Catmull-Rom Curves″. +
+
+
+ + + + \ No newline at end of file diff --git a/www2/examples/graph2d/07_scrollingAndSorting.html b/www2/examples/graph2d/07_scrollingAndSorting.html new file mode 100644 index 00000000..98e8629d --- /dev/null +++ b/www2/examples/graph2d/07_scrollingAndSorting.html @@ -0,0 +1,74 @@ + + + + Graph2d | Scrolling and Sorting + + + + + + + +

Graph2d | Scrolling and Sorting

+
+ You can determine the height of the Graph2d seperately from the height of the frame. If the graphHeight + is defined, and the height is not, the frame will auto-scale to accommodate the graphHeight. If the height + is defined as well, the user can scroll up and down vertically as well as horizontally to view the graph. +

+ Vertical scrolling is planned, though not yet available. The graphHeight also does not conform if only the height is defined. +

+ You can manually disable the automatic sorting of the datapoints by using the sort option. However, doing so does reduce the optimization + of the drawing so if you have a lot of points, keep sort turned on for the best results. +
+
+
+ + + + \ No newline at end of file diff --git a/www2/examples/graph2d/08_performance.html b/www2/examples/graph2d/08_performance.html new file mode 100644 index 00000000..9a249f6c --- /dev/null +++ b/www2/examples/graph2d/08_performance.html @@ -0,0 +1,150 @@ + + + + Graph2d | Performance + + + + + + + + + + +

Graph2d | Performance

+
+ This example is a test of the performance of the Graph2d. Select the amount of datapoints you want to plot and press draw. + You can choose between the style of the points as well as the interpolation method. This can only be toggled with the buttons. + The interpolation options may not look different for this dataset but you can see their effects clearly in example 7. +

+ Linear interpolation and no points are the settings that will render quickest. By default, Graph2d will downsample when there are more + than 1 point per pixel. This can be manually disabled at the cost of performance by using the sampling option. +
+
+

+ Number of items: + Click the draw button to load the data! +
+ + Interpolation method: + +
+ Points style: + + +

+
+ + + + \ No newline at end of file diff --git a/www2/examples/graph2d/09_external_legend.html b/www2/examples/graph2d/09_external_legend.html new file mode 100644 index 00000000..5ed73491 --- /dev/null +++ b/www2/examples/graph2d/09_external_legend.html @@ -0,0 +1,367 @@ + + + + Graph2d | External legend Example + + + + + + + +

Graph2d | External custom legend

+
+ This example shows how to create an external custom legend using the getLegend function. We use normal JavaScript to show and hide the + groups by updating the dataset. + +
+
+
+
+ + + + + \ No newline at end of file diff --git a/www2/examples/graph2d/10_barsSideBySide.html b/www2/examples/graph2d/10_barsSideBySide.html new file mode 100644 index 00000000..c64e8b87 --- /dev/null +++ b/www2/examples/graph2d/10_barsSideBySide.html @@ -0,0 +1,74 @@ + + + + Graph2d | Bar Graphs Side by Side Example + + + + + + + +

Graph2d | Bar Graphs Side by Side Example

+
+ When using Bar graphs, it can often be the case that there are multiple bars on the same timepoint. This may not always be the desired result. You can use the + barChart.handleOverlap option to automatically plot the bars next to eachother or stacked on top of eachother if they occupy the same timeslot. By default, this option is on, the bars overlap. + Use the dropdown box to experiment with the options. The stacked only really makes sense when using groups as is shown in the next example. + +

+ Handle overlap:
+
+
+ +
+ + + + \ No newline at end of file diff --git a/www2/examples/graph2d/11_barsSideBySideGroups.html b/www2/examples/graph2d/11_barsSideBySideGroups.html new file mode 100644 index 00000000..b54ee119 --- /dev/null +++ b/www2/examples/graph2d/11_barsSideBySideGroups.html @@ -0,0 +1,87 @@ + + + + Graph2d | Bar Graphs Side by Side Example with Groups + + + + + + + +

Graph2d | Bar Graphs Side by Side Example with Groups

+
+ When using Bar graphs, it can often be the case that there are multiple bars on the same timepoint. This may not always be the desired result. You can use the + barChart.handleOverlap option to automatically plot the bars next to eachother or stacked on top of eachother if they occupy the same timeslot. By default, this option is on, the bars overlap. + Use the dropdown box to experiment with the options. The stacked only really makes sense when using groups as is shown here. + +

+ Handle overlap: +
+
+ +
+ + + + \ No newline at end of file diff --git a/www2/examples/graph2d/12_customRange.html b/www2/examples/graph2d/12_customRange.html new file mode 100644 index 00000000..eb8f091a --- /dev/null +++ b/www2/examples/graph2d/12_customRange.html @@ -0,0 +1,96 @@ + + + + Graph2d | Bar Graph Example + + + + + + + +

Graph2d | Custom axis range

+
+ You can define a custom range for the Y axis. Since there are two Y axis, you can define both of them. You can also + only define the min or max values. Since one of the Y axis is slaved to the other one (the right one is slaved to the left one), + you cannot absolutely define the range of the slaved axis because it has to use the same lines. The values you supply are used as guidelines however. + If the zero-lines have to be aligned, you can use the option alignZeros. It is enabled by default. + +
+var options = {
+    dataAxis: {
+        customRange: {
+            left: {
+                min:-5, max:30
+            },
+            right: {
+                min:-5
+            }
+        }
+    }
+};
+
+
+
+ +
+ + + + \ No newline at end of file diff --git a/www2/examples/graph2d/13_localization.html b/www2/examples/graph2d/13_localization.html new file mode 100644 index 00000000..f249fc6f --- /dev/null +++ b/www2/examples/graph2d/13_localization.html @@ -0,0 +1,65 @@ + + + + + + + Graph2d | Localization + + + + + + + + +

Graph2d | Localization

+

+ To localize Graph2d, one has to load a version of moment.js including locales. To set a locale, specify option {locale: STRING}. +

+ +

+ + +

+ +
+ + + + \ No newline at end of file diff --git a/www2/examples/graph2d/14_toggleGroups.html b/www2/examples/graph2d/14_toggleGroups.html new file mode 100644 index 00000000..f84d6188 --- /dev/null +++ b/www2/examples/graph2d/14_toggleGroups.html @@ -0,0 +1,145 @@ + + + + Graph2d | Toggle Groups Example + + + + + + + + +

Graph2d | Groups Example

+
+ This example shows the groups visibility functionality within Graph2d. Groups have their own visibility option. By using this, + all graph2d instances using those groups would show or hide that group. If you have multiple instances sharing the same data and groups, + you can use the groups.visibility option to set it on an instance level. The graphs below all share the same groups, items and initial options. + We then use a setOptions like so: + + +
+        graph2d1.setOptions({
+            groups:{
+                visibility:{
+                    0:true,               // group id:0 visible
+                    1:false,              // group id:1 hidden
+                    2:false,              // group id:2 hidden
+                    3:false,              // group id:3 hidden
+                    "__ungrouped__":false // default group hidden
+                }
+            }
+        })
+    
+
+
+ +
+
+
+
+
+
+ + + + \ No newline at end of file diff --git a/www2/examples/graph2d/15_streaming_data.html b/www2/examples/graph2d/15_streaming_data.html new file mode 100644 index 00000000..4271320f --- /dev/null +++ b/www2/examples/graph2d/15_streaming_data.html @@ -0,0 +1,122 @@ + + + + + + + Graph2d | Streaming data + + + + + + + +

Graph2d | Streaming data

+

+ This example demonstrates how to apply streaming data input to the Graph2d. The example shows two different ways to let the window move along with the new data, and there are more strategies for that. Note also that it is possible to disable moving and/or zooming the graph by setting options moveable and zoomable false. +

+ +

+ + +

+ +
+ + + + \ No newline at end of file diff --git a/www2/examples/graph2d/16_bothAxis_titles.html b/www2/examples/graph2d/16_bothAxis_titles.html new file mode 100644 index 00000000..8351677e --- /dev/null +++ b/www2/examples/graph2d/16_bothAxis_titles.html @@ -0,0 +1,215 @@ + + + + Graph2d | Axis Titles and Styling + + + + + + + +

Graph2d | Axis Titles and Styling

+
+ + + + + +
+ This example shows setting a title for the left and right axis. Optionally the example allows the user + to show icons and labels on the left and right axis. + + + + + + + + + + + + + + + + + + + + + + +
Left decimals +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/www2/examples/graph2d/17_dynamicStyling.html b/www2/examples/graph2d/17_dynamicStyling.html new file mode 100644 index 00000000..fed71c38 --- /dev/null +++ b/www2/examples/graph2d/17_dynamicStyling.html @@ -0,0 +1,256 @@ + + + + + + + Graph2d | Dynamic Styling + + + + + + + +

Graph2d | Dynamic Styling Example

+ +
+ This example shows how to programmatically change the styling of a group. While this can also + be done in CSS, this must be statically defined, and the programmatic interface allows the + user to define the look of the graph at runtime. +
+
+ + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Line Color + +
Line Style + +
Line thickness + +
Fill Position + +
Fill Color + +
Fill Opacity + +
Points Shape + +
Points Size + +
Points Color + +
Point Line Thickness + +
Points Fill Color + +
+
+ + + + + diff --git a/www2/examples/graph2d/18_scatterplot.html b/www2/examples/graph2d/18_scatterplot.html new file mode 100644 index 00000000..51c4bf63 --- /dev/null +++ b/www2/examples/graph2d/18_scatterplot.html @@ -0,0 +1,63 @@ + + + + Graph2d | Scatterplot + + + + + + + +

Graph2d | Scatterplot

+
+ You can manually disable the automatic sorting of the datapoints by using the sort option. You can use this with the + style: 'points' option for making a scatterplot! +
+
+var options = {
+    sort: false,
+    sampling:false,
+    style:'points'
+};
+
+
+
+ + + + \ No newline at end of file diff --git a/www2/examples/graph2d/default.css b/www2/examples/graph2d/default.css new file mode 100644 index 00000000..f7afb828 --- /dev/null +++ b/www2/examples/graph2d/default.css @@ -0,0 +1,87 @@ +html, body { + width: 100%; + height: 100%; + padding: 0; + margin: 0; +} + +body, td, th { + font-family: arial, sans-serif; + font-size: 11pt; + color: #4D4D4D; + line-height: 1.7em; +} + +#container { + margin: 0 auto; + padding-bottom: 50px; + width: 900px; +} + +h1 { + font-size: 180%; + font-weight: bold; + padding: 0; + margin: 1em 0 1em 0; +} + +h2 { + padding-top: 20px; + padding-bottom: 10px; + border-bottom: 1px solid #a0c0f0; + color: #2B7CE9; +} + +h3 { + font-size: 140%; +} + + +a { + color: #2B7CE9; + text-decoration: none; +} +a:visited { + color: #2E60A4; +} +a:hover { + color: red; + text-decoration: underline; +} + +hr { + border: none 0; + border-top: 1px solid #abc; + height: 1px; +} + +pre { + display: block; + font-size: 10pt; + line-height: 1.5em; + font-family: monospace; +} + +pre, code { + background-color: #f5f5f5; +} + +table +{ + border-collapse: collapse; +} + +th { + font-weight: bold; + border: 1px solid lightgray; + background-color: #E5E5E5; + text-align: left; + vertical-align: top; + padding: 5px; +} + +td { + border: 1px solid lightgray; + padding: 5px; + vertical-align: top; +} diff --git a/www2/examples/graph2d/index.html b/www2/examples/graph2d/index.html new file mode 100644 index 00000000..560f9d3f --- /dev/null +++ b/www2/examples/graph2d/index.html @@ -0,0 +1,31 @@ + + + + + + + + diff --git a/www2/examples/graph3d/default.css b/www2/examples/graph3d/default.css new file mode 100644 index 00000000..f7afb828 --- /dev/null +++ b/www2/examples/graph3d/default.css @@ -0,0 +1,87 @@ +html, body { + width: 100%; + height: 100%; + padding: 0; + margin: 0; +} + +body, td, th { + font-family: arial, sans-serif; + font-size: 11pt; + color: #4D4D4D; + line-height: 1.7em; +} + +#container { + margin: 0 auto; + padding-bottom: 50px; + width: 900px; +} + +h1 { + font-size: 180%; + font-weight: bold; + padding: 0; + margin: 1em 0 1em 0; +} + +h2 { + padding-top: 20px; + padding-bottom: 10px; + border-bottom: 1px solid #a0c0f0; + color: #2B7CE9; +} + +h3 { + font-size: 140%; +} + + +a { + color: #2B7CE9; + text-decoration: none; +} +a:visited { + color: #2E60A4; +} +a:hover { + color: red; + text-decoration: underline; +} + +hr { + border: none 0; + border-top: 1px solid #abc; + height: 1px; +} + +pre { + display: block; + font-size: 10pt; + line-height: 1.5em; + font-family: monospace; +} + +pre, code { + background-color: #f5f5f5; +} + +table +{ + border-collapse: collapse; +} + +th { + font-weight: bold; + border: 1px solid lightgray; + background-color: #E5E5E5; + text-align: left; + vertical-align: top; + padding: 5px; +} + +td { + border: 1px solid lightgray; + padding: 5px; + vertical-align: top; +} diff --git a/www2/examples/graph3d/example01_basis.html b/www2/examples/graph3d/example01_basis.html new file mode 100644 index 00000000..b088aa0c --- /dev/null +++ b/www2/examples/graph3d/example01_basis.html @@ -0,0 +1,60 @@ + + + + Graph 3D demo + + + + + + + + + +
+ +
+ + diff --git a/www2/examples/graph3d/example02_camera.html b/www2/examples/graph3d/example02_camera.html new file mode 100644 index 00000000..3c14adfe --- /dev/null +++ b/www2/examples/graph3d/example02_camera.html @@ -0,0 +1,109 @@ + + + + Graph 3D camera position + + + + + + + + + +

Graph 3d camera position

+ + + + + + + + + + + + + + + + + +
Horizontal angle (0 to 2*pi)
Vertical angle (0 to 0.5*pi)
Distance (0.71 to 5.0)
+ +
+ +
+ + diff --git a/www2/examples/graph3d/example03_filter.html b/www2/examples/graph3d/example03_filter.html new file mode 100644 index 00000000..58a0bc3e --- /dev/null +++ b/www2/examples/graph3d/example03_filter.html @@ -0,0 +1,63 @@ + + + + Graph 3D demo + + + + + + + + + +
+ +
+ + diff --git a/www2/examples/graph3d/example04_animate.html b/www2/examples/graph3d/example04_animate.html new file mode 100644 index 00000000..779e6a28 --- /dev/null +++ b/www2/examples/graph3d/example04_animate.html @@ -0,0 +1,70 @@ + + + + Graph 3D animation demo + + + + + + + + + +
+ +
+ + diff --git a/www2/examples/graph3d/example05_line.html b/www2/examples/graph3d/example05_line.html new file mode 100644 index 00000000..7a7e9601 --- /dev/null +++ b/www2/examples/graph3d/example05_line.html @@ -0,0 +1,59 @@ + + + + Graph 3D line demo + + + + + + + + + +
+ +
+ + diff --git a/www2/examples/graph3d/example06_moving_dots.html b/www2/examples/graph3d/example06_moving_dots.html new file mode 100644 index 00000000..f5664bb5 --- /dev/null +++ b/www2/examples/graph3d/example06_moving_dots.html @@ -0,0 +1,77 @@ + + + + Graph 3D animation moving dots + + + + + + + + + +
+ +
+ + diff --git a/www2/examples/graph3d/example07_dot_cloud_colors.html b/www2/examples/graph3d/example07_dot_cloud_colors.html new file mode 100644 index 00000000..eab36f26 --- /dev/null +++ b/www2/examples/graph3d/example07_dot_cloud_colors.html @@ -0,0 +1,67 @@ + + + + Graph 3D cloud with colored dots + + + + + + + + + +
+ +
+ + diff --git a/www2/examples/graph3d/example08_dot_cloud_size.html b/www2/examples/graph3d/example08_dot_cloud_size.html new file mode 100644 index 00000000..edff678c --- /dev/null +++ b/www2/examples/graph3d/example08_dot_cloud_size.html @@ -0,0 +1,67 @@ + + + + Graph 3D cloud with sized dots + + + + + + + + +
+ +
+ + diff --git a/www2/examples/graph3d/example09_mobile.html b/www2/examples/graph3d/example09_mobile.html new file mode 100644 index 00000000..7d0b0c35 --- /dev/null +++ b/www2/examples/graph3d/example09_mobile.html @@ -0,0 +1,78 @@ + + + + Graph 3D demo + + + + + + + + + + + + +
+ + diff --git a/www2/examples/graph3d/example10_styles.html b/www2/examples/graph3d/example10_styles.html new file mode 100644 index 00000000..7791d985 --- /dev/null +++ b/www2/examples/graph3d/example10_styles.html @@ -0,0 +1,120 @@ + + + + Graph 3D styles + + + + + + + + + + +

+ +

+ +

+ +

+ +

+ +

+

+ +

+ +
+ +
+ + diff --git a/www2/examples/graph3d/example11_tooltips.html b/www2/examples/graph3d/example11_tooltips.html new file mode 100644 index 00000000..e4244387 --- /dev/null +++ b/www2/examples/graph3d/example11_tooltips.html @@ -0,0 +1,103 @@ + + + + Graph 3D tooltips + + + + + + + + + + +

+ +

+ +
+ +
+ + diff --git a/www2/examples/graph3d/example12_ticks.html b/www2/examples/graph3d/example12_ticks.html new file mode 100644 index 00000000..0d4c4cdb --- /dev/null +++ b/www2/examples/graph3d/example12_ticks.html @@ -0,0 +1,115 @@ + + + + Graph 3D Axis Ticks + + + + + + + + + + +

+ +

+ +
+ +
+ + diff --git a/www2/examples/graph3d/index.html b/www2/examples/graph3d/index.html new file mode 100644 index 00000000..3e7a9b6f --- /dev/null +++ b/www2/examples/graph3d/index.html @@ -0,0 +1,28 @@ + + + + + + + + diff --git a/www2/examples/graph3d/playground/csv2array.js b/www2/examples/graph3d/playground/csv2array.js new file mode 100644 index 00000000..95d0c4a6 --- /dev/null +++ b/www2/examples/graph3d/playground/csv2array.js @@ -0,0 +1,120 @@ +/** + * Convert data in CSV (comma separated value) format to a javascript array. + * + * Values are separated by a comma, or by a custom one character delimeter. + * Rows are separated by a new-line character. + * + * Leading and trailing spaces and tabs are ignored. + * Values may optionally be enclosed by double quotes. + * Values containing a special character (comma's, double-quotes, or new-lines) + * must be enclosed by double-quotes. + * Embedded double-quotes must be represented by a pair of consecutive + * double-quotes. + * + * Example usage: + * var csv = '"x", "y", "z"\n12.3, 2.3, 8.7\n4.5, 1.2, -5.6\n'; + * var array = csv2array(csv); + * + * Author: Jos de Jong, 2010 + * + * @param {string} data The data in CSV format. + * @param {string} delimeter [optional] a custom delimeter. Comma ',' by default + * The Delimeter must be a single character. + * @return {Array} array A two dimensional array containing the data + * @throw {String} error The method throws an error when there is an + * error in the provided data. + */ +function csv2array(data, delimeter) { + // Retrieve the delimeter + if (delimeter == undefined) + delimeter = ','; + if (delimeter && delimeter.length > 1) + delimeter = ','; + + // initialize variables + var newline = '\n'; + var eof = ''; + var i = 0; + var c = data.charAt(i); + var row = 0; + var col = 0; + var array = new Array(); + + while (c != eof) { + // skip whitespaces + while (c == ' ' || c == '\t' || c == '\r') { + c = data.charAt(++i); // read next char + } + + // get value + var value = ""; + if (c == '\"') { + // value enclosed by double-quotes + c = data.charAt(++i); + + do { + if (c != '\"') { + // read a regular character and go to the next character + value += c; + c = data.charAt(++i); + } + + if (c == '\"') { + // check for escaped double-quote + var cnext = data.charAt(i+1); + if (cnext == '\"') { + // this is an escaped double-quote. + // Add a double-quote to the value, and move two characters ahead. + value += '\"'; + i += 2; + c = data.charAt(i); + } + } + } + while (c != eof && c != '\"'); + + if (c == eof) { + throw "Unexpected end of data, double-quote expected"; + } + + c = data.charAt(++i); + } + else { + // value without quotes + while (c != eof && c != delimeter && c!= newline && c != ' ' && c != '\t' && c != '\r') { + value += c; + c = data.charAt(++i); + } + } + + // add the value to the array + if (array.length <= row) + array.push(new Array()); + array[row].push(value); + + // skip whitespaces + while (c == ' ' || c == '\t' || c == '\r') { + c = data.charAt(++i); + } + + // go to the next row or column + if (c == delimeter) { + // to the next column + col++; + } + else if (c == newline) { + // to the next row + col = 0; + row++; + } + else if (c != eof) { + // unexpected character + throw "Delimiter expected after character " + i; + } + + // go to the next character + c = data.charAt(++i); + } + + return array; +} diff --git a/www2/examples/graph3d/playground/csv2datatable.html b/www2/examples/graph3d/playground/csv2datatable.html new file mode 100644 index 00000000..35dc9bd0 --- /dev/null +++ b/www2/examples/graph3d/playground/csv2datatable.html @@ -0,0 +1,80 @@ + + + + Convert CSV to Google Datatable + + + + + + + + + + +
+ +
+ +CSV
+ +
+
+ +
+
+ +Google DataTable
+ + + + diff --git a/www2/examples/graph3d/playground/datasource.html b/www2/examples/graph3d/playground/datasource.html new file mode 100644 index 00000000..efb47e1c --- /dev/null +++ b/www2/examples/graph3d/playground/datasource.html @@ -0,0 +1,173 @@ + + + + Graph3d documentation + + + + + + + + +
+<?php
+
+/*
+This datasource returns a response in the form of a google query response
+
+USAGE
+All parameters are optional
+datasource.php?xmin=0&xmax=314&xstepnum=25&ymin=0&ymax=314&ystepnum=25
+
+DOCUMENTATION
+http://code.google.com/apis/visualization/documentation/dev/implementing_data_source.html
+
+
+EXAMPLE OF A RESPONSE FILE
+
+Note that the reqId in the response must correspond with the reqId from the
+request.
+________________________________________________________________________________
+
+google.visualization.Query.setResponse({
+  version:'0.6',
+  reqId:'0',
+  status:'ok',
+  table:{
+    cols:[
+      {id:'x',
+       label:'x',
+       type:'number'},
+      {id:'y',
+       label:'y',
+       type:'number'},
+      {id:'value',
+       label:'value',
+       type:'number'}
+    ],
+    rows:[
+      {c:[{v:0}, {v:0}, {v:10.0}]},
+      {c:[{v:1}, {v:0}, {v:12.0}]},
+      {c:[{v:2}, {v:0}, {v:13.0}]},
+      {c:[{v:0}, {v:1}, {v:11.0}]},
+      {c:[{v:1}, {v:1}, {v:14.0}]},
+      {c:[{v:2}, {v:1}, {v:11.0}]}
+    ]
+  }
+});
+________________________________________________________________________________
+
+*/
+
+
+/**
+ * A custom function
+ */
+function custom($x, $y) {
+  $d = sqrt(pow($x/100, 2) + pow($y/100, 2));
+
+  return 50 * exp(-5 * $d / 10) * sin($d*5)
+}
+
+
+
+
+// retrieve parameters
+$default_stepnum = 25;
+
+$xmin     = isset($_REQUEST['xmin'])     ? (float)$_REQUEST['xmin']   : -100;
+$xmax     = isset($_REQUEST['xmax'])     ? (float)$_REQUEST['xmax']   : 100;
+$xstepnum = isset($_REQUEST['xstepnum']) ? (int)$_REQUEST['xstepnum'] : $default_stepnum;
+
+$ymin     = isset($_REQUEST['ymin'])     ? (float)$_REQUEST['ymin']   : -100;
+$ymax     = isset($_REQUEST['ymax'])     ? (float)$_REQUEST['ymax']   : 100;
+$ystepnum = isset($_REQUEST['ystepnum']) ? (int)$_REQUEST['ystepnum'] : $default_stepnum;
+
+// in the reply we must fill in the request id that came with the request
+$reqId = getReqId();
+
+// check for a maximum number of datapoints (for safety)
+if ($xstepnum * $ystepnum > 10000) {
+  echo "google.visualization.Query.setResponse({
+    version:'0.6',
+    reqId:'$reqId',
+    status:'error',
+    errors:[{reason:'not_supported', message:'Maximum number of datapoints exceeded'}]
+  });";
+
+  exit;
+}
+
+
+// output the header part of the response
+echo "google.visualization.Query.setResponse({
+  version:'0.6',
+  reqId:'$reqId',
+  status:'ok',
+  table:{
+    cols:[
+      {id:'x',
+       label:'x',
+       type:'number'},
+      {id:'y',
+       label:'y',
+       type:'number'},
+      {id:'value',
+       label:'',
+       type:'number'}
+    ],
+    rows:[";
+
+// output the actual values
+$first = true;
+$xstep = ($xmax - $xmin) / $xstepnum;
+$ystep = ($ymax - $ymin) / $ystepnum;
+for ($x = $xmin; $x < $xmax; $x+=$xstep) {
+  for ($y = $ymin; $y < $ymax; $y+=$ystep) {
+    $value = custom($x,$y);
+
+    if (!$first) {
+      echo ",\n";
+    }
+    else {
+      echo "\n";
+    }
+    echo "      {c:[{v:$x}, {v:$y}, {v:$value}]}";
+
+    $first = false;
+  }
+}
+
+
+// output the end part of the response
+echo "
+    ]
+  }
+});
+";
+
+
+/**
+ * Retrieve the request id from the get/post data
+ * @return {number} $reqId       The request id, or 0 if not found
+ */
+function getReqId() {
+  $reqId = 0;
+
+  foreach ($_REQUEST as $req) {
+    if (substr($req, 0,6) == "reqId:") {
+      $reqId = substr($req, 6);
+    }
+  }
+
+  return $reqId;
+}
+
+
+?>
+
+
+ + + diff --git a/www2/examples/graph3d/playground/datasource.php b/www2/examples/graph3d/playground/datasource.php new file mode 100644 index 00000000..9c265cb9 --- /dev/null +++ b/www2/examples/graph3d/playground/datasource.php @@ -0,0 +1,155 @@ + 10000) { + echo "google.visualization.Query.setResponse({ + version:'0.6', + reqId:'$reqId', + status:'error', + errors:[{reason:'not_supported', message:'Maximum number of datapoints exceeded'}] + });"; + + exit; +} + + +// output the header part of the response +echo "google.visualization.Query.setResponse({ + version:'0.6', + reqId:'$reqId', + status:'ok', + table:{ + cols:[ + {id:'x', + label:'x', + type:'number'}, + {id:'y', + label:'y', + type:'number'}, + {id:'value', + label:'', + type:'number'} + ], + rows:["; + +// output the actual values +$first = true; +$xstep = ($xmax - $xmin) / $xstepnum; +$ystep = ($ymax - $ymin) / $ystepnum; +for ($x = $xmin; $x < $xmax; $x+=$xstep) { + for ($y = $ymin; $y < $ymax; $y+=$ystep) { + $value = custom($x,$y); + + if (!$first) { + echo ",\n"; + } + else { + echo "\n"; + } + echo " {c:[{v:$x}, {v:$y}, {v:$value}]}"; + + $first = false; + } +} + + +// output the end part of the response +echo " + ] + } +}); +"; + + +/** + * Retrieve the request id from the get/post data + * @return {number} $reqId The request id, or 0 if not found + */ +function getReqId() { + $reqId = 0; + + foreach ($_REQUEST as $req) { + if (substr($req, 0,6) == "reqId:") { + $reqId = substr($req, 6); + } + } + + return $reqId; +} + + +?> diff --git a/www2/examples/graph3d/playground/index.html b/www2/examples/graph3d/playground/index.html new file mode 100644 index 00000000..d9a7ed3a --- /dev/null +++ b/www2/examples/graph3d/playground/index.html @@ -0,0 +1,179 @@ + + + + + Graph 3D - Playground + + + + + + + + + + + + + +

Graph 3D - Playground

+ + +++ + + + + + + + +
+

Data

+

+ Graph 3D expects a data table with first three to five columns: + colums x, y, z (optional), + style, filter (optional). +

+ + + + + + + +
+ Csv + + +
+ +
+
+

Graph

+

+ +

+ +
+
+

Options

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OptionValue
width for example "500px" or "100%"
height for example "500px" or "100%"
style + +
showAnimationControls
showGrid
showPerspective
showShadow
keepAspectRatio
verticalRatio a value between 0.1 and 1.0
animationInterval in milliseconds
animationPreload
animationAutoStart
xCenter
yCenter
xMin
xMax
xStep
yMin
yMax
yStep
zMin
zMax
zStep
valueMin
valueMax
xBarWidth
yBarWidth
xLabel
yLabel
zLabel
filterLabel
legendLabel
+ +
+ + diff --git a/www2/examples/graph3d/playground/playground.css b/www2/examples/graph3d/playground/playground.css new file mode 100644 index 00000000..5139d4b5 --- /dev/null +++ b/www2/examples/graph3d/playground/playground.css @@ -0,0 +1,91 @@ +body +{ + font: 13px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif; +} + +h1 +{ + font-size: 180%; + font-weight: bold; + + margin: 1em 0 1em 0; +} + +h2 +{ + font-size: 140%; + padding: 5px; + border-bottom: 1px solid #a0c0f0; + color: #2B7CE9; +} + +h3 +{ + font-size: 100%; +} + +hr +{ + border: none 0; + border-top: 1px solid #a0c0f0; + height: 1px; +} + +pre.code +{ + display: block; + padding: 8px; + border: 1px dashed #ccc; +} + +table +{ + border-collapse: collapse; +} + +th, td +{ + font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif; + text-align: left; + vertical-align: top; + /*border: 1px solid #888;*/ + padding: 3px; +} + +th +{ + font-weight: bold; +} + + +textarea { + width: 500px; + height: 200px; + border: 1px solid #888; +} + +input[type=text] { + border: 1px solid #888; +} + +#datasourceText, #googlespreadsheetText { + width: 500px; + +} + +.info { + color: gray; +} + +a { + color: gray; +} +a:hover { + color: red; +} + + +#graph { + width: 100%; + height: 600px; +} diff --git a/www2/examples/graph3d/playground/playground.js b/www2/examples/graph3d/playground/playground.js new file mode 100644 index 00000000..5b93dddb --- /dev/null +++ b/www2/examples/graph3d/playground/playground.js @@ -0,0 +1,544 @@ + +var query = null; + + +function load() { + selectDataType(); + + loadCsvExample(); + loadJsonExample(); + loadJavascriptExample(); + loadGooglespreadsheetExample(); + loadDatasourceExample(); + + draw(); +} + + + +/** + * Upate the UI based on the currently selected datatype + */ +function selectDataType() { +} + + +function round(value, decimals) { + return parseFloat(value.toFixed(decimals)); +} + +function loadCsvExample() { + var csv = ""; + + // headers + csv += '"x", "y", "value"\n'; + + // create some nice looking data with sin/cos + var steps = 30; + var axisMax = 314; + var axisStep = axisMax / steps; + for (var x = 0; x < axisMax; x+=axisStep) { + for (var y = 0; y < axisMax; y+=axisStep) { + var value = Math.sin(x/50) * Math.cos(y/50) * 50 + 50; + + csv += round(x, 2) + ', ' + round(y, 2) + ', ' + round(value, 2) + '\n'; + } + } + + document.getElementById("csvTextarea").innerHTML = csv; + + // also adjust some settings + document.getElementById("style").value = "surface"; + document.getElementById("verticalRatio").value = "0.5"; + + document.getElementById("xLabel").value = "x"; + document.getElementById("yLabel").value = "y"; + document.getElementById("zLabel").value = "value"; + document.getElementById("filterLabel").value = ""; + document.getElementById("legendLabel").value = ""; + drawCsv(); +} + + +function loadCsvAnimationExample() { + var csv = ""; + + // headers + csv += '"x", "y", "value", "time"\n'; + + // create some nice looking data with sin/cos + var steps = 20; + var axisMax = 314; + var tMax = 31; + var axisStep = axisMax / steps; + for (var t = 0; t < tMax; t++) { + for (var x = 0; x < axisMax; x+=axisStep) { + for (var y = 0; y < axisMax; y+=axisStep) { + var value = Math.sin(x/50 + t/10) * Math.cos(y/50 + t/10) * 50 + 50; + csv += round(x, 2) + ', ' + round(y, 2) + ', ' + round(value, 2) + ', ' + t + '\n'; + } + } + } + + document.getElementById("csvTextarea").innerHTML = csv; + + // also adjust some settings + document.getElementById("style").value = "surface"; + document.getElementById("verticalRatio").value = "0.5"; + document.getElementById("animationInterval").value = 100; + + document.getElementById("xLabel").value = "x"; + document.getElementById("yLabel").value = "y"; + document.getElementById("zLabel").value = "value"; + document.getElementById("filterLabel").value = "time"; + document.getElementById("legendLabel").value = ""; + + drawCsv(); +} + + +function loadCsvLineExample() { + var csv = ""; + + // headers + csv += '"sin(t)", "cos(t)", "t"\n'; + + // create some nice looking data with sin/cos + var steps = 100; + var axisMax = 314; + var tmax = 4 * 2 * Math.PI; + var axisStep = axisMax / steps; + for (t = 0; t < tmax; t += tmax / steps) { + var r = 1; + var x = r * Math.sin(t); + var y = r * Math.cos(t); + var z = t; + csv += round(x, 2) + ', ' + round(y, 2) + ', ' + round(z, 2) + '\n'; + } + + document.getElementById("csvTextarea").innerHTML = csv; + + // also adjust some settings + document.getElementById("style").value = "line"; + document.getElementById("verticalRatio").value = "1.0"; + document.getElementById("showPerspective").checked = false; + + document.getElementById("xLabel").value = "sin(t)"; + document.getElementById("yLabel").value = "cos(t)"; + document.getElementById("zLabel").value = "t"; + document.getElementById("filterLabel").value = ""; + document.getElementById("legendLabel").value = ""; + + drawCsv(); +} + +function loadCsvMovingDotsExample() { + var csv = ""; + + // headers + csv += '"x", "y", "z", "color value", "time"\n'; + + // create some shortcuts to math functions + var sin = Math.sin; + var cos = Math.cos; + var pi = Math.PI; + + // create the animation data + var tmax = 2.0 * pi; + var tstep = tmax / 75; + var dotCount = 1; // set this to 1, 2, 3, 4, ... + for (var t = 0; t < tmax; t += tstep) { + var tgroup = parseFloat(t.toFixed(2)); + var value = t; + + // a dot in the center + var x = 0; + var y = 0; + var z = 0; + csv += round(x, 2) + ', ' + round(y, 2) + ', ' + round(z, 2) + ', ' + round(value, 2)+ ', ' + round(tgroup, 2) + '\n'; + + // one or multiple dots moving around the center + for (var dot = 0; dot < dotCount; dot++) { + var tdot = t + 2*pi * dot / dotCount; + //data.addRow([sin(tdot), cos(tdot), sin(tdot), value, tgroup]); + //data.addRow([sin(tdot), -cos(tdot), sin(tdot + tmax*1/2), value, tgroup]); + + var x = sin(tdot); + var y = cos(tdot); + var z = sin(tdot); + csv += round(x, 2) + ', ' + round(y, 2) + ', ' + round(z, 2) + ', ' + round(value, 2)+ ', ' + round(tgroup, 2) + '\n'; + + var x = sin(tdot); + var y = -cos(tdot); + var z = sin(tdot + tmax*1/2); + csv += round(x, 2) + ', ' + round(y, 2) + ', ' + round(z, 2) + ', ' + round(value, 2)+ ', ' + round(tgroup, 2) + '\n'; + + } + } + + document.getElementById("csvTextarea").innerHTML = csv; + + // also adjust some settings + document.getElementById("style").value = "dot-color"; + document.getElementById("verticalRatio").value = "1.0"; + document.getElementById("animationInterval").value = "35"; + document.getElementById("animationAutoStart").checked = true; + document.getElementById("showPerspective").checked = true; + + document.getElementById("xLabel").value = "x"; + document.getElementById("yLabel").value = "y"; + document.getElementById("zLabel").value = "z"; + document.getElementById("filterLabel").value = "time"; + document.getElementById("legendLabel").value = "color value"; + + drawCsv(); +} + +function loadCsvColoredDotsExample() { + var csv = ""; + + // headers + csv += '"x", "y", "z", "distance"\n'; + + // create some shortcuts to math functions + var sqrt = Math.sqrt; + var pow = Math.pow; + var random = Math.random; + + // create the animation data + var imax = 200; + for (var i = 0; i < imax; i++) { + var x = pow(random(), 2); + var y = pow(random(), 2); + var z = pow(random(), 2); + var dist = sqrt(pow(x, 2) + pow(y, 2) + pow(z, 2)); + + csv += round(x, 2) + ', ' + round(y, 2) + ', ' + round(z, 2) + ', ' + round(dist, 2)+ '\n'; + } + + document.getElementById("csvTextarea").innerHTML = csv; + + // also adjust some settings + document.getElementById("style").value = "dot-color"; + document.getElementById("verticalRatio").value = "1.0"; + document.getElementById("showPerspective").checked = true; + + document.getElementById("xLabel").value = "x"; + document.getElementById("yLabel").value = "y"; + document.getElementById("zLabel").value = "value"; + document.getElementById("legendLabel").value = "distance" + document.getElementById("filterLabel").value = ""; + + drawCsv(); +} + +function loadCsvSizedDotsExample() { + var csv = ""; + + // headers + csv += '"x", "y", "z", "range"\n'; + + // create some shortcuts to math functions + var sqrt = Math.sqrt; + var pow = Math.pow; + var random = Math.random; + + // create the animation data + var imax = 200; + for (var i = 0; i < imax; i++) { + var x = pow(random(), 2); + var y = pow(random(), 2); + var z = pow(random(), 2); + var dist = sqrt(pow(x, 2) + pow(y, 2) + pow(z, 2)); + var range = sqrt(2) - dist; + + csv += round(x, 2) + ', ' + round(y, 2) + ', ' + round(z, 2) + ', ' + round(range, 2)+ '\n'; + } + + document.getElementById("csvTextarea").innerHTML = csv; + + // also adjust some settings + document.getElementById("style").value = "dot-size"; + document.getElementById("verticalRatio").value = "1.0"; + document.getElementById("showPerspective").checked = true; + + document.getElementById("xLabel").value = "x"; + document.getElementById("yLabel").value = "y"; + document.getElementById("zLabel").value = "z"; + document.getElementById("legendLabel").value = "range"; + document.getElementById("filterLabel").value = ""; + + drawCsv(); +} + + +function loadJsonExample() { +} + + +function loadJavascriptExample() { +} + +function loadJavascriptFunctionExample() { +} + +function loadGooglespreadsheetExample() { + +} + + +function loadDatasourceExample() { +} + + + +/** + * Retrieve teh currently selected datatype + * @return {string} datatype + */ +function getDataType() { + return "csv"; +} + + +/** + * Retrieve the datatable from the entered contents of the csv text + * @param {boolean} [skipValue] | if true, the 4th element is a filter value + * @return {vis DataSet} + */ +function getDataCsv() { + var csv = document.getElementById("csvTextarea").value; + + // parse the csv content + var csvArray = csv2array(csv); + + var data = new vis.DataSet(); + + var skipValue = false; + if (document.getElementById("filterLabel").value != "" && document.getElementById("legendLabel").value == "") { + skipValue = true; + } + + // read all data + for (var row = 1; row < csvArray.length; row++) { + if (csvArray[row].length == 4 && skipValue == false) { + data.add({x:parseFloat(csvArray[row][0]), + y:parseFloat(csvArray[row][1]), + z:parseFloat(csvArray[row][2]), + style:parseFloat(csvArray[row][3])}); + } + else if (csvArray[row].length == 4 && skipValue == true) { + data.add({x:parseFloat(csvArray[row][0]), + y:parseFloat(csvArray[row][1]), + z:parseFloat(csvArray[row][2]), + filter:parseFloat(csvArray[row][3])}); + } + else if (csvArray[row].length == 5) { + data.add({x:parseFloat(csvArray[row][0]), + y:parseFloat(csvArray[row][1]), + z:parseFloat(csvArray[row][2]), + style:parseFloat(csvArray[row][3]), + filter:parseFloat(csvArray[row][4])}); + } + else { + data.add({x:parseFloat(csvArray[row][0]), + y:parseFloat(csvArray[row][1]), + z:parseFloat(csvArray[row][2]), + style:parseFloat(csvArray[row][2])}); + } + } + + return data; +} + +/** + * remove leading and trailing spaces + */ +function trim(text) { + while (text.length && text.charAt(0) == ' ') + text = text.substr(1); + + while (text.length && text.charAt(text.length-1) == ' ') + text = text.substr(0, text.length-1); + + return text; +} + +/** + * Retrieve the datatable from the entered contents of the javascript text + * @return {vis Dataset} + */ +function getDataJson() { + var json = document.getElementById("jsonTextarea").value; + var data = new google.visualization.DataTable(json); + + return data; +} + + +/** + * Retrieve the datatable from the entered contents of the javascript text + * @return {vis Dataset} + */ +function getDataJavascript() { + var js = document.getElementById("javascriptTextarea").value; + + eval(js); + + return data; +} + + +/** + * Retrieve the datatable from the entered contents of the datasource text + * @return {vis Dataset} + */ +function getDataDatasource() { +} + +/** + * Retrieve a JSON object with all options + */ +function getOptions() { + return { + width: document.getElementById("width").value, + height: document.getElementById("height").value, + style: document.getElementById("style").value, + showAnimationControls: (document.getElementById("showAnimationControls").checked != false), + showGrid: (document.getElementById("showGrid").checked != false), + showPerspective: (document.getElementById("showPerspective").checked != false), + showShadow: (document.getElementById("showShadow").checked != false), + keepAspectRatio: (document.getElementById("keepAspectRatio").checked != false), + verticalRatio: document.getElementById("verticalRatio").value, + animationInterval: document.getElementById("animationInterval").value, + xLabel: document.getElementById("xLabel").value, + yLabel: document.getElementById("yLabel").value, + zLabel: document.getElementById("zLabel").value, + filterLabel: document.getElementById("filterLabel").value, + legendLabel: document.getElementById("legendLabel").value, + animationPreload: (document.getElementById("animationPreload").checked != false), + animationAutoStart:(document.getElementById("animationAutoStart").checked != false), + + xCenter: Number(document.getElementById("xCenter").value) || undefined, + yCenter: Number(document.getElementById("yCenter").value) || undefined, + + xMin: Number(document.getElementById("xMin").value) || undefined, + xMax: Number(document.getElementById("xMax").value) || undefined, + xStep: Number(document.getElementById("xStep").value) || undefined, + yMin: Number(document.getElementById("yMin").value) || undefined, + yMax: Number(document.getElementById("yMax").value) || undefined, + yStep: Number(document.getElementById("yStep").value) || undefined, + zMin: Number(document.getElementById("zMin").value) || undefined, + zMax: Number(document.getElementById("zMax").value) || undefined, + zStep: Number(document.getElementById("zStep").value) || undefined, + + valueMin: Number(document.getElementById("valueMin").value) || undefined, + valueMax: Number(document.getElementById("valueMax").value) || undefined, + + xBarWidth: Number(document.getElementById("xBarWidth").value) || undefined, + yBarWidth: Number(document.getElementById("yBarWidth").value) || undefined + }; +} + +/** + * Redraw the graph with the entered data and options + */ +function draw() { + return drawCsv(); +} + + +function drawCsv() { + // retrieve data and options + var data = getDataCsv(); + var options = getOptions(); + + // Creat a graph + var graph = new vis.Graph3d(document.getElementById('graph'), data, options); +} + +function drawJson() { + // retrieve data and options + var data = getDataJson(); + var options = getOptions(); + + // Creat a graph + var graph = new vis.Graph3d(document.getElementById('graph'), data, options); +} + +function drawJavascript() { + // retrieve data and options + var data = getDataJavascript(); + var options = getOptions(); + + // Creat a graph + var graph = new vis.Graph3d(document.getElementById('graph'), data, options); +} + + +function drawGooglespreadsheet() { + // Instantiate our graph object. + drawGraph = function(response) { + document.getElementById("draw").disabled = ""; + + if (response.isError()) { + error = 'Error: ' + response.getMessage(); + document.getElementById('graph').innerHTML = + "" + error + ""; ; + } + + // retrieve the data from the query response + data = response.getDataTable(); + + // specify options + options = getOptions(); + + // Instantiate our graph object. + var graph = new vis.Graph3d(document.getElementById('graph'), data, options); + } + + url = document.getElementById("googlespreadsheetText").value; + document.getElementById("draw").disabled = "disabled"; + + // send the request + query && query.abort(); + query = new google.visualization.Query(url); + query.send(drawGraph); +} + + +function drawDatasource() { + // Instantiate our graph object. + drawGraph = function(response) { + document.getElementById("draw").disabled = ""; + + if (response.isError()) { + error = 'Error: ' + response.getMessage(); + document.getElementById('graph').innerHTML = + "" + error + ""; ; + } + + // retrieve the data from the query response + data = response.getDataTable(); + + // specify options + options = getOptions(); + + // Instantiate our graph object. + var graph = new vis.Graph3d(document.getElementById('graph'), data, options); + }; + + url = document.getElementById("datasourceText").value; + document.getElementById("draw").disabled = "disabled"; + + // if the entered url is a google spreadsheet url, replace the part + // "/ccc?" with "/tq?" in order to retrieve a neat data query result + if (url.indexOf("/ccc?")) { + url.replace("/ccc?", "/tq?"); + } + + // send the request + query && query.abort(); + query = new google.visualization.Query(url); + query.send(drawGraph); +} diff --git a/www2/examples/graph3d/playground/prettify/lang-apollo.js b/www2/examples/graph3d/playground/prettify/lang-apollo.js new file mode 100644 index 00000000..bfc0014c --- /dev/null +++ b/www2/examples/graph3d/playground/prettify/lang-apollo.js @@ -0,0 +1,2 @@ +PR.registerLangHandler(PR.createSimpleLexer([["com",/^#[^\r\n]*/,null,"#"],["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/,null,'"']],[["kwd",/^(?:ADS|AD|AUG|BZF|BZMF|CAE|CAF|CA|CCS|COM|CS|DAS|DCA|DCOM|DCS|DDOUBL|DIM|DOUBLE|DTCB|DTCF|DV|DXCH|EDRUPT|EXTEND|INCR|INDEX|NDX|INHINT|LXCH|MASK|MSK|MP|MSU|NOOP|OVSK|QXCH|RAND|READ|RELINT|RESUME|RETURN|ROR|RXOR|SQUARE|SU|TCR|TCAA|OVSK|TCF|TC|TS|WAND|WOR|WRITE|XCH|XLQ|XXALQ|ZL|ZQ|ADD|ADZ|SUB|SUZ|MPY|MPR|MPZ|DVP|COM|ABS|CLA|CLZ|LDQ|STO|STQ|ALS|LLS|LRS|TRA|TSQ|TMI|TOV|AXT|TIX|DLY|INP|OUT)\s/, +null],["typ",/^(?:-?GENADR|=MINUS|2BCADR|VN|BOF|MM|-?2CADR|-?[1-6]DNADR|ADRES|BBCON|[SE]?BANK\=?|BLOCK|BNKSUM|E?CADR|COUNT\*?|2?DEC\*?|-?DNCHAN|-?DNPTR|EQUALS|ERASE|MEMORY|2?OCT|REMADR|SETLOC|SUBRO|ORG|BSS|BES|SYN|EQU|DEFINE|END)\s/,null],["lit",/^\'(?:-*(?:\w|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?)?/],["pln",/^-*(?:[!-z_]|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?/i],["pun",/^[^\w\t\n\r \xA0()\"\\\';]+/]]),["apollo","agc","aea"]) \ No newline at end of file diff --git a/www2/examples/graph3d/playground/prettify/lang-css.js b/www2/examples/graph3d/playground/prettify/lang-css.js new file mode 100644 index 00000000..61157f38 --- /dev/null +++ b/www2/examples/graph3d/playground/prettify/lang-css.js @@ -0,0 +1,2 @@ +PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[ \t\r\n\f]+/,null," \t\r\n\u000c"]],[["str",/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],["str",/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],["kwd",/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],["com",/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//], +["com",/^(?: + + + + + + + + + +
+ + diff --git a/www2/examples/network/09_sizing.html b/www2/examples/network/09_sizing.html new file mode 100644 index 00000000..a6ef2ab8 --- /dev/null +++ b/www2/examples/network/09_sizing.html @@ -0,0 +1,81 @@ + + + + Network | Sizing + + + + + + + + + + +
+ + diff --git a/www2/examples/network/10_multiline_text.html b/www2/examples/network/10_multiline_text.html new file mode 100644 index 00000000..dfea910d --- /dev/null +++ b/www2/examples/network/10_multiline_text.html @@ -0,0 +1,51 @@ + + + + Network | Multiline text + + + + + + + + + + +
+ + diff --git a/www2/examples/network/11_custom_style.html b/www2/examples/network/11_custom_style.html new file mode 100644 index 00000000..b58eb07c --- /dev/null +++ b/www2/examples/network/11_custom_style.html @@ -0,0 +1,132 @@ + + + + Network | Custom style + + + + + + + + + + +
+ + diff --git a/www2/examples/network/12_scalable_images.html b/www2/examples/network/12_scalable_images.html new file mode 100644 index 00000000..50be00fe --- /dev/null +++ b/www2/examples/network/12_scalable_images.html @@ -0,0 +1,86 @@ + + + + Network | Scalable images + + + + + + + + + + +
+ +
+ + diff --git a/www2/examples/network/13_dashed_lines.html b/www2/examples/network/13_dashed_lines.html new file mode 100644 index 00000000..ceab2e54 --- /dev/null +++ b/www2/examples/network/13_dashed_lines.html @@ -0,0 +1,64 @@ + + + + Network | Dashed lines + + + + + + + + + + +

+ This example shows the different options for dashed lines. +

+ +
+ + diff --git a/www2/examples/network/14_dot_language.html b/www2/examples/network/14_dot_language.html new file mode 100644 index 00000000..ad645c9b --- /dev/null +++ b/www2/examples/network/14_dot_language.html @@ -0,0 +1,19 @@ + + + Network | DOT Language + + + + + +
+ + + + diff --git a/www2/examples/network/15_dot_language_playground.html b/www2/examples/network/15_dot_language_playground.html new file mode 100644 index 00000000..021955c6 --- /dev/null +++ b/www2/examples/network/15_dot_language_playground.html @@ -0,0 +1,203 @@ + + + + Network | DOT language playground + + + + + + + + + + + + + + + + + + +
+

DOT language playground

+ +
+
+ + +
+
+ + +
+
+ + + + + + + + + + + diff --git a/www2/examples/network/16_dynamic_data.html b/www2/examples/network/16_dynamic_data.html new file mode 100644 index 00000000..34aca765 --- /dev/null +++ b/www2/examples/network/16_dynamic_data.html @@ -0,0 +1,266 @@ + + + + Network | DataSet + + + + + + + + + + + + +

+ This example demonstrates dynamically adding, updating and removing nodes + and edges using a DataSet. +

+ +

Adjust

+ + + + + + +
+

Node

+ + + + + + + + + + + + + + + + +
Action + + + +
+
+

Edge

+ + + + + + + + + + + + + + + + + + + + + +
Action + + + +
+
+ +

View

+ + + + + + + + + + + + + +
+

Nodes

+

+    
+

Edges

+

+    
+

Network

+
+
+ + + diff --git a/www2/examples/network/17_network_info.html b/www2/examples/network/17_network_info.html new file mode 100644 index 00000000..017bcd76 --- /dev/null +++ b/www2/examples/network/17_network_info.html @@ -0,0 +1,157 @@ + + + + Network | Images + + + + + + + + + + + +
+ + + + \ No newline at end of file diff --git a/www2/examples/network/18_fully_random_nodes_clustering.html b/www2/examples/network/18_fully_random_nodes_clustering.html new file mode 100644 index 00000000..71f64fe3 --- /dev/null +++ b/www2/examples/network/18_fully_random_nodes_clustering.html @@ -0,0 +1,101 @@ + + + + Network | Fully random nodes clustering + + + + + + + + + + +

Clustering - Fully random network

+
+ This example shows a fully randomly generated set of nodes and connected edges. + By clicking the checkbox you can turn clustering on and off. If you increase the number of nodes to + a value higher than 100, automatic clustering is used before the initial draw (assuming the checkbox is checked). +
+
+ Clustering is done automatically when zooming out. When zooming in over the cluster, the cluster pops open. When the cluster is very big, a special instance + will be created and the cluster contents will only be simulated in there. Double click will also open a cluster. +
+
+ Try values of 500 and 5000 with and without clustering. All thresholds can be changed to suit your dataset. +
+
+
+ + + + + +
+
+ +
+ +

+ + diff --git a/www2/examples/network/19_scale_free_graph_clustering.html b/www2/examples/network/19_scale_free_graph_clustering.html new file mode 100644 index 00000000..e782f748 --- /dev/null +++ b/www2/examples/network/19_scale_free_graph_clustering.html @@ -0,0 +1,128 @@ + + + + Network | Scale free network clustering + + + + + + + + + + +

Clustering - Scale-Free-Network

+
+ This example shows the randomly generated scale-free-network set of nodes and connected edges from example 2. + By clicking the checkbox you can turn clustering on and off. If you increase the number of nodes to + a value higher than 100, automatic clustering is used before the initial draw (assuming the checkbox is checked). +
+
+ Clustering is done automatically when zooming out. When zooming in over the cluster, the cluster pops open. When the cluster is very big, a special instance + will be created and the cluster contents will only be simulated in there. Double click will also open a cluster. +
+
+ Try values of 500 and 5000 with and without clustering. All thresholds can be changed to suit your dataset. + Experiment with the clusterEdgeThreshold, which increases the formation of clusters when zoomed out (assuming the checkbox is checked). +
+
+
+ + + + + + + +
+
+ +
+ +

+ + diff --git a/www2/examples/network/20_navigation.html b/www2/examples/network/20_navigation.html new file mode 100644 index 00000000..8cf4edee --- /dev/null +++ b/www2/examples/network/20_navigation.html @@ -0,0 +1,168 @@ + + + + Network | Navigation + + + + + + + + + + +

Navigation controls and keyboad navigation

+
+ This example is the same as example 2, except for the navigation controls that have been activated. The navigation controls are described below.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Icons:
Keyboard shortcuts:
Up arrow
Down arrow
Left arrow
Right arrow
=
[
Page up
-
]
Page down
None
Description:
Move up
Move down
Move left
Move right
Zoom in
Zoom out
Zoom extent
+
+ Apart from clicking the icons, you can also navigate using the keyboard. The buttons are in table above. + Zoom Extends changes the zoom and position of the camera to encompass all visible nodes. To correctly display the navigation icons, the vis.css file must be included. + The user is free to alter or overload the CSS classes but without them the navigation icons are not visible. + + +
+
+ +
+ + + +
+
+ +
+ +

+ + diff --git a/www2/examples/network/21_data_manipulation.html b/www2/examples/network/21_data_manipulation.html new file mode 100644 index 00000000..a878fcfa --- /dev/null +++ b/www2/examples/network/21_data_manipulation.html @@ -0,0 +1,221 @@ + + + + Network | Data Manipulation + + + + + + + + + +

Editing the dataset

+
+ In this example we have enabled the data manipulation setting. If the dataManipulation option is set to true, the edit button will appear. + If you prefer to have the toolbar visible initially, you can set the initiallyVisible option to true. The exact method is described in the docs. +

+ The data manipulation allows the user to add nodes, connect them, edit them and delete any selected items. In this example we have created trigger functions + for the add and edit operations. By settings these trigger functions the user can direct the way the data is manipulated. In this example we have created a simple + pop-up that allows us to edit some of the properties. +
+
+ +
+ node
+ + + + + +
id
label
+ + +
+
+
+ +

+ + + diff --git a/www2/examples/network/22_les_miserables.html b/www2/examples/network/22_les_miserables.html new file mode 100644 index 00000000..5a5e0cc4 --- /dev/null +++ b/www2/examples/network/22_les_miserables.html @@ -0,0 +1,374 @@ + + + + Network | Multiline text + + + + + + + + + + +
+ + diff --git a/www2/examples/network/23_hierarchical_layout.html b/www2/examples/network/23_hierarchical_layout.html new file mode 100644 index 00000000..51f226f4 --- /dev/null +++ b/www2/examples/network/23_hierarchical_layout.html @@ -0,0 +1,147 @@ + + + + Network | Random nodes + + + + + + + + + + +

Hierarchical Layout - Scale-Free-Network

+
+ This example shows the randomly generated scale-free-network set of nodes and connected edges from example 2. + In this example, hierarchical layout has been enabled and the vertical levels are determined automatically. +
+
+
+ + + +
+ + + + + + + +
+ +
+ +

+ + diff --git a/www2/examples/network/24_hierarchical_layout_userdefined.html b/www2/examples/network/24_hierarchical_layout_userdefined.html new file mode 100644 index 00000000..59d127f8 --- /dev/null +++ b/www2/examples/network/24_hierarchical_layout_userdefined.html @@ -0,0 +1,173 @@ + + + + Network | Hierarchical Layout, userDefined + + + + + + + + + + +

Hierarchical Layout - User-defined

+
+ This example shows a user-defined hierarchical layout. If the user defines levels for nodes but does not do so for all nodes, an alert will show up and hierarchical layout will be disabled. Either all or none can be defined. + If the smooth curves appear to be inverted, the direction of the edge is not in the same direction as the network. +
+ + + + + +
+ +
+ +

+ + + diff --git a/www2/examples/network/25_physics_configuration.html b/www2/examples/network/25_physics_configuration.html new file mode 100644 index 00000000..104040be --- /dev/null +++ b/www2/examples/network/25_physics_configuration.html @@ -0,0 +1,109 @@ + + + + Network | Playing with Physics + + + + + + + + + + + +

Playing with Physics

+
+ Every dataset is different. Nodes can have different sizes based on content, interconnectivity can be high or low etc. Because of this, network has a special option + that the user can use to explore which settings may be good for him or her. This is ment to be used during the development phase when you are implementing vis.js. Once you have found + settings you are happy with, you can supply them to network using the documented physics options. + + On start, the default settings will be loaded. Keep in mind that selecting the hierarchical simulation mode disables smooth curves. These will not be enabled again afterwards. +
+
+
+ +

+ + diff --git a/www2/examples/network/26_staticSmoothCurves.html b/www2/examples/network/26_staticSmoothCurves.html new file mode 100644 index 00000000..1c338269 --- /dev/null +++ b/www2/examples/network/26_staticSmoothCurves.html @@ -0,0 +1,76 @@ + + + + Network | Static smooth curves + + + + + + + + + +

Static smooth curves

+
+ All the smooth curves in the examples so far have been using dynamic smooth curves. This means that each curve has a + support node which takes part in the physics simulation. For large networks or dense clusters, this may not be the ideal + solution. To solve this, static smooth curves have been added. The static smooth curves are based only on the positions of the connected + nodes. There are multiple ways to determine the way this curve is drawn. This example shows the effect of the different + types.

+ Drag the nodes around each other to see how the smooth curves are drawn for each setting. For animated system, we + recommend only the continuous mode. In the next example you can see the effect of these methods on a large network. Keep in mind + that the direction (the from and to) of the curve matters. +

+
+ +Smooth curve type: + +
+ + + + + diff --git a/www2/examples/network/27_world_cup_network.html b/www2/examples/network/27_world_cup_network.html new file mode 100644 index 00000000..54e85cb5 --- /dev/null +++ b/www2/examples/network/27_world_cup_network.html @@ -0,0 +1,10109 @@ + + + + Network | Static smooth curves - World Cup Network + + + + + + + + + +

Static smooth curves - World Cup Network

+
+ The static smooth curves are based only on the positions of the connected nodes. + There are multiple ways to determine the way this curve is drawn. + This example shows the effect of the different types on a large network. +

+ Also shown in this example is the inheritColor option of the edges as well as the roundness factor.
+

+ To improve performance, the physics have been disabled with: +
{barnesHut: {gravitationalConstant: 0, centralGravity: 0, springConstant: 0}}
and we have enabled + the toggle hideEdgesOnDrag. +

+
+ +Smooth curve type: +
+inheritColor option: +
+Roundness (0..1): (0.5 is max roundness for continuous, 1.0 for the others) +
+Hide edges on drag:
+Hide nodes on drag: + +
+ + + + + + diff --git a/www2/examples/network/28_world_cup_network_performance.html b/www2/examples/network/28_world_cup_network_performance.html new file mode 100644 index 00000000..cffc274c --- /dev/null +++ b/www2/examples/network/28_world_cup_network_performance.html @@ -0,0 +1,10053 @@ + + + + Network | Static smooth curves - World Cup Network + + + + + + + + + +

Performance - World Cup Network

+
+ This example shows the performance of vis with a larger network. The edges in particular (~9200) are very computationally intensive + to draw. Drag and hold the graph to see the performance difference if the edges are hidden. +

+ We use the following physics configuration:
+ {barnesHut: {gravitationalConstant: -80000, springConstant: 0.001, springLength: 200}} +

+
+ +
+ + + + + + diff --git a/www2/examples/network/29_neighbourhood_highlight.html b/www2/examples/network/29_neighbourhood_highlight.html new file mode 100644 index 00000000..783dfb29 --- /dev/null +++ b/www2/examples/network/29_neighbourhood_highlight.html @@ -0,0 +1,10213 @@ + + + + Network | Static smooth curves - World Cup Network + + + + + + + + + +

Dynamic Data - Neighbourhood Highlight

+
+ This example shows the power of the DataSet. Once a node is clicked, all nodes are greyed out except for the first and second order connected nodes. + In this example we show how you can determine the order of connection per node as well as applying individual styling to the nodes based on whether or not + they are connected to the selected node. The code doing the highlighting only takes about 20ms, the rest of the time is the redrawing of the network (9200 edges..). +

+
+ +
+ + + + + + diff --git a/www2/examples/network/30_importing_from_gephi.html b/www2/examples/network/30_importing_from_gephi.html new file mode 100644 index 00000000..589d4333 --- /dev/null +++ b/www2/examples/network/30_importing_from_gephi.html @@ -0,0 +1,166 @@ + + + + Dynamic Data - Importing from Gephi (JSON) + + + + + + + + +

Dynamic Data - Importing from Gephi (JSON)

+
+ This example shows how to import a JSON file exported by Gephi. The two options available for the import are + available through the checkboxes. You can download the Gephi JSON exporter here: + https://marketplace.gephi.org/plugin/json-exporter/. + All of Gephi's attributes are also contained within the node elements. This means you can access all of this data through the DataSet. +
+
+ + +: Allow to move after import.
+: Parse the color instead of copy (adds borders, highlights etc.) +
+

Node Content:

+ + + + + + diff --git a/www2/examples/network/31_localization.html b/www2/examples/network/31_localization.html new file mode 100644 index 00000000..7e28ff7a --- /dev/null +++ b/www2/examples/network/31_localization.html @@ -0,0 +1,231 @@ + + + + Network | Localization + + + + + + + + + +

Editing the dataset (localized)

+

+ This is the same example as 21_data_manipulation.html, except that there is a select box added which allows to switch locale. The localization is only relevant to the manipulation buttons. +

+ +

+ + +

+ +
+ node
+ + + + + +
id
label
+ + +
+
+
+ +

+ + + diff --git a/www2/examples/network/32_hierarchicaLayoutMethods.html b/www2/examples/network/32_hierarchicaLayoutMethods.html new file mode 100644 index 00000000..16c843ca --- /dev/null +++ b/www2/examples/network/32_hierarchicaLayoutMethods.html @@ -0,0 +1,140 @@ + + + + Network | Hierarchical layout difference + + + + + + + + + + +

Hierarchical layout difference

+
+ This example shows a the effect of the different hierarchical layout methods. Hubsize is based on the amount of edges connected to a node. + The node with the most connections (the largest hub) is drawn at the top of the tree. The direction method is based on the direction of the edges. + Try switching between the methods with the dropdown box below. +
+Layout method: +
+
+ +
+ +

+ + + diff --git a/www2/examples/network/33_animation.html b/www2/examples/network/33_animation.html new file mode 100644 index 00000000..0bebc4f2 --- /dev/null +++ b/www2/examples/network/33_animation.html @@ -0,0 +1,319 @@ + + + + Network | Animation + + + + + + + + + + +

Camera animations

+
+ You can move the view around programmatically using the .moveTo(options) function. The options supplied to this function can + also be (partially) supplied to the .zoomExtent() and .focusOnNode() methods. These are explained in the docs. +

+ The buttons below take the fields from the table when they can. For instance, the "Animate with default settings." takes the position, scale and offset while using + the default animation values for duration and easing function. The focusOnNode takes everything except the position and the zoomExtent takes only the duration and easing function. +

+ Here you can see a full description of the options you can supply to moveTo: +
+
+var moveToOptions = {
+    position: {x:x, y:x},    // position to animate to (Numbers)
+    scale: 1.0,              // scale to animate to  (Number)
+    offset: {x:x, y:y},      // offset from the center in DOM pixels (Numbers)
+    animation: {             // animation object, can also be Boolean
+      duration: 1000,                 // animation duration in milliseconds (Number)
+      easingFunction: "easeInOutQuad" // Animation easing function, available are:
+    }                                   // linear, easeInQuad, easeOutQuad, easeInOutQuad,
+}                                       // easeInCubic, easeOutCubic, easeInOutCubic,
+                                        // easeInQuart, easeOutQuart, easeInOutQuart,
+                                        // easeInQuint, easeOutQuint, easeInOutQuint
+
+
+ + + + + + + + + + + + + + + + + + + + + + +
position x
position y
scale
offset x px
offset y px
duration ms
easingFunction + +
+
+
+ Examples: +
+
+
+
+
+
+
+
+
+ +

+

+
+ + diff --git a/www2/examples/network/data/WorldCup2014.json b/www2/examples/network/data/WorldCup2014.json new file mode 100644 index 00000000..2f921e0e --- /dev/null +++ b/www2/examples/network/data/WorldCup2014.json @@ -0,0 +1 @@ +{"edges":[{"source":"131","target":"580","id":"4385","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"186","target":"368","id":"5487","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"651","target":"725","id":"10555","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"28","target":"83","id":"2090","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"570","target":"584","id":"10163","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"113","target":"337","id":"4011","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"89","target":"726","id":"3532","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"245","target":"643","id":"6493","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"314","target":"714","id":"7596","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"325","target":"496","id":"7735","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"52","target":"492","id":"2661","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"489","target":"548","id":"9605","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"72","target":"363","id":"3136","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"296","target":"716","id":"7337","attributes":{"Weight":"1.0"},"color":"rgb(148,164,148)","size":1.0},{"source":"60","target":"713","id":"2864","attributes":{"Weight":"1.0"},"color":"rgb(148,148,132)","size":1.0},{"source":"210","target":"217","id":"5899","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"246","target":"696","id":"6512","attributes":{"Weight":"1.0"},"color":"rgb(196,67,164)","size":1.0},{"source":"62","target":"375","id":"2912","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"377","target":"561","id":"8391","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"14","target":"190","id":"1777","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"16","target":"21","id":"1821","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"90","target":"375","id":"3544","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"80","target":"348","id":"3315","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"34","target":"229","id":"2247","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"4","target":"347","id":"1543","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"61","target":"350","id":"2879","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"483","target":"512","id":"9570","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"461","target":"463","id":"9374","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"449","target":"478","id":"9249","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"2","target":"99","id":"1489","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"535","target":"669","id":"9978","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"242","target":"502","id":"6439","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"196","target":"728","id":"5678","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"303","target":"616","id":"7445","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"316","target":"643","id":"7620","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"549","target":"700","id":"10058","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"135","target":"717","id":"4479","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"97","target":"655","id":"3703","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"724","target":"730","id":"10678","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"173","target":"418","id":"5237","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"439","target":"695","id":"9144","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"350","target":"534","id":"8081","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"377","target":"391","id":"8378","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"176","target":"492","id":"5293","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"76","target":"728","id":"3240","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"95","target":"448","id":"3653","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"66","target":"78","id":"2993","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"236","target":"552","id":"6351","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"139","target":"434","id":"4545","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"22","target":"24","id":"1958","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"186","target":"334","id":"5485","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"30","target":"324","id":"2154","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"202","target":"450","id":"5775","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"524","target":"688","id":"9891","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"665","target":"693","id":"10599","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"215","target":"723","id":"6005","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"28","target":"627","id":"2118","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"2","target":"31","id":"1487","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"177","target":"625","id":"5320","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"179","target":"677","id":"5365","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"182","target":"662","id":"5412","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"135","target":"567","id":"4473","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"128","target":"248","id":"4309","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"45","target":"123","id":"2495","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"141","target":"622","id":"4601","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"71","target":"714","id":"3128","attributes":{"Weight":"1.0"},"color":"rgb(132,99,229)","size":1.0},{"source":"155","target":"227","id":"4888","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"591","target":"693","id":"10293","attributes":{"Weight":"1.0"},"color":"rgb(196,148,132)","size":1.0},{"source":"44","target":"648","id":"2487","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"23","target":"568","id":"1989","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"6","target":"477","id":"1594","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"145","target":"454","id":"4690","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"184","target":"270","id":"5442","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"385","target":"442","id":"8501","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"139","target":"702","id":"4554","attributes":{"Weight":"1.0"},"color":"rgb(67,229,116)","size":1.0},{"source":"173","target":"605","id":"5246","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"428","target":"652","id":"9013","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"16","target":"732","id":"1841","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"23","target":"540","id":"1988","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"444","target":"514","id":"9211","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"37","target":"210","id":"2312","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"103","target":"446","id":"3816","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"316","target":"720","id":"7625","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"82","target":"374","id":"3349","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"481","target":"670","id":"9564","attributes":{"Weight":"1.0"},"color":"rgb(132,229,132)","size":1.0},{"source":"262","target":"483","id":"6778","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"112","target":"209","id":"3990","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"345","target":"682","id":"8023","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"201","target":"334","id":"5755","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"337","target":"488","id":"7916","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"29","target":"307","id":"2128","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"224","target":"717","id":"6165","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"399","target":"647","id":"8691","attributes":{"Weight":"1.0"},"color":"rgb(148,83,196)","size":1.0},{"source":"347","target":"670","id":"8045","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"627","target":"717","id":"10445","attributes":{"Weight":"1.0"},"color":"rgb(148,99,213)","size":1.0},{"source":"115","target":"587","id":"4060","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"186","target":"710","id":"5494","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"551","target":"609","id":"10065","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"252","target":"291","id":"6599","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"442","target":"678","id":"9193","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"274","target":"631","id":"6970","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"454","target":"475","id":"9295","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"216","target":"286","id":"6007","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"567","target":"586","id":"10144","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"383","target":"587","id":"8477","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"230","target":"362","id":"6253","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"382","target":"438","id":"8451","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"104","target":"357","id":"3833","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"79","target":"385","id":"3286","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"191","target":"463","id":"5576","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"527","target":"679","id":"9918","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"104","target":"317","id":"3830","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"343","target":"588","id":"8001","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"252","target":"447","id":"6603","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"38","target":"277","id":"2340","attributes":{"Weight":"1.0"},"color":"rgb(229,180,67)","size":1.0},{"source":"557","target":"696","id":"10100","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"87","target":"663","id":"3478","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"215","target":"339","id":"5989","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"571","target":"719","id":"10178","attributes":{"Weight":"1.0"},"color":"rgb(229,115,132)","size":1.0},{"source":"204","target":"302","id":"5807","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"79","target":"455","id":"3290","attributes":{"Weight":"1.0"},"color":"rgb(99,148,196)","size":1.0},{"source":"9","target":"102","id":"1662","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"529","target":"699","id":"9941","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"228","target":"324","id":"6220","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"290","target":"395","id":"7245","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"275","target":"304","id":"6975","attributes":{"Weight":"1.0"},"color":"rgb(67,148,148)","size":1.0},{"source":"5","target":"258","id":"1564","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"44","target":"82","id":"2459","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"323","target":"443","id":"7711","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"212","target":"608","id":"5949","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"644","target":"720","id":"10518","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"300","target":"669","id":"7399","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"105","target":"234","id":"3846","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"677","target":"679","id":"10622","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"164","target":"166","id":"5056","attributes":{"Weight":"1.0"},"color":"rgb(229,132,132)","size":1.0},{"source":"299","target":"624","id":"7382","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"64","target":"354","id":"2963","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"176","target":"427","id":"5290","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"238","target":"713","id":"6385","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"293","target":"708","id":"7290","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"567","target":"676","id":"10145","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"213","target":"242","id":"5956","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"163","target":"388","id":"5046","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"396","target":"606","id":"8648","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"176","target":"456","id":"5291","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"41","target":"137","id":"2396","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"368","target":"569","id":"8272","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"78","target":"570","id":"3272","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"5","target":"603","id":"1576","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"241","target":"504","id":"6420","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"107","target":"705","id":"3888","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"323","target":"717","id":"7719","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"79","target":"140","id":"3279","attributes":{"Weight":"1.0"},"color":"rgb(67,229,148)","size":1.0},{"source":"299","target":"653","id":"7383","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"516","target":"633","id":"9815","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"511","target":"716","id":"9796","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"427","target":"609","id":"8999","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"325","target":"659","id":"7743","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"345","target":"714","id":"8024","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"207","target":"362","id":"5863","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"44","target":"79","id":"2458","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"66","target":"306","id":"3000","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"44","target":"573","id":"2480","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"133","target":"673","id":"4431","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"162","target":"384","id":"5024","attributes":{"Weight":"1.0"},"color":"rgb(115,229,99)","size":1.0},{"source":"216","target":"652","id":"6026","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"114","target":"246","id":"4026","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"146","target":"626","id":"4717","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"477","target":"515","id":"9532","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"251","target":"255","id":"6582","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"226","target":"714","id":"6194","attributes":{"Weight":"1.0"},"color":"rgb(213,132,148)","size":1.0},{"source":"272","target":"437","id":"6939","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"342","target":"691","id":"7989","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"110","target":"397","id":"3946","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"241","target":"480","id":"6418","attributes":{"Weight":"1.0"},"color":"rgb(115,229,115)","size":1.0},{"source":"55","target":"444","id":"2735","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"564","target":"592","id":"10131","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"38","target":"424","id":"2343","attributes":{"Weight":"1.0"},"color":"rgb(148,213,148)","size":1.0},{"source":"238","target":"668","id":"6384","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"646","target":"730","id":"10527","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"431","target":"586","id":"9046","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"425","target":"675","id":"8979","attributes":{"Weight":"1.0"},"color":"rgb(213,148,148)","size":1.0},{"source":"345","target":"534","id":"8017","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"86","target":"180","id":"3434","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"167","target":"607","id":"5127","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"180","target":"286","id":"5373","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"448","target":"501","id":"9239","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"235","target":"710","id":"6341","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"71","target":"83","id":"3105","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"151","target":"676","id":"4826","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"34","target":"581","id":"2262","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"372","target":"426","id":"8308","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"276","target":"355","id":"6995","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"110","target":"231","id":"3937","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"133","target":"613","id":"4429","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"44","target":"231","id":"2466","attributes":{"Weight":"1.0"},"color":"rgb(67,229,148)","size":1.0},{"source":"60","target":"201","id":"2839","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"493","target":"605","id":"9649","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"160","target":"671","id":"4996","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"415","target":"612","id":"8851","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"251","target":"696","id":"6598","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"117","target":"530","id":"4107","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"432","target":"443","id":"9052","attributes":{"Weight":"1.0"},"color":"rgb(180,67,213)","size":1.0},{"source":"64","target":"239","id":"2957","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"232","target":"576","id":"6289","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"209","target":"483","id":"5896","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"565","target":"663","id":"10136","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"63","target":"632","id":"2938","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"145","target":"331","id":"4683","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"125","target":"478","id":"4260","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"231","target":"575","id":"6269","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"20","target":"513","id":"1927","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"142","target":"542","id":"4620","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"222","target":"710","id":"6129","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"640","target":"708","id":"10502","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"33","target":"124","id":"2212","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"86","target":"428","id":"3442","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"241","target":"271","id":"6414","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"368","target":"548","id":"8270","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"487","target":"645","id":"9594","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"126","target":"513","id":"4280","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"193","target":"491","id":"5606","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"381","target":"719","id":"8449","attributes":{"Weight":"1.0"},"color":"rgb(229,67,213)","size":1.0},{"source":"392","target":"399","id":"8596","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"351","target":"609","id":"8099","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"74","target":"428","id":"3178","attributes":{"Weight":"1.0"},"color":"rgb(148,196,99)","size":1.0},{"source":"207","target":"344","id":"5860","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"72","target":"342","id":"3135","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"291","target":"481","id":"7265","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"1","target":"605","id":"1482","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"295","target":"592","id":"7322","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"334","target":"552","id":"7878","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"374","target":"433","id":"8334","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"205","target":"519","id":"5828","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"16","target":"51","id":"1827","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"100","target":"672","id":"3760","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"305","target":"334","id":"7464","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"326","target":"341","id":"7747","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"410","target":"557","id":"8813","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"300","target":"698","id":"7400","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"92","target":"176","id":"3575","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"80","target":"668","id":"3323","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"315","target":"389","id":"7598","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"157","target":"299","id":"4926","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"211","target":"261","id":"5915","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"460","target":"667","id":"9368","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"103","target":"318","id":"3813","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"69","target":"396","id":"3066","attributes":{"Weight":"1.0"},"color":"rgb(132,83,229)","size":1.0},{"source":"339","target":"504","id":"7940","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"479","target":"686","id":"9548","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"145","target":"289","id":"4679","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"434","target":"576","id":"9089","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"635","target":"697","id":"10477","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"298","target":"459","id":"7357","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"114","target":"632","id":"4038","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"165","target":"359","id":"5085","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"214","target":"483","id":"5981","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"332","target":"652","id":"7853","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"244","target":"682","id":"6475","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"61","target":"577","id":"2890","attributes":{"Weight":"1.0"},"color":"rgb(132,148,196)","size":1.0},{"source":"130","target":"701","id":"4369","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"23","target":"24","id":"1978","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"498","target":"573","id":"9691","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"266","target":"723","id":"6845","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"382","target":"481","id":"8456","attributes":{"Weight":"1.0"},"color":"rgb(132,164,148)","size":1.0},{"source":"258","target":"430","id":"6701","attributes":{"Weight":"1.0"},"color":"rgb(148,213,99)","size":1.0},{"source":"148","target":"458","id":"4745","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"279","target":"366","id":"7038","attributes":{"Weight":"1.0"},"color":"rgb(148,67,213)","size":1.0},{"source":"79","target":"614","id":"3298","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"150","target":"155","id":"4778","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"205","target":"526","id":"5830","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"647","target":"730","id":"10536","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"122","target":"614","id":"4206","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"332","target":"645","id":"7852","attributes":{"Weight":"1.0"},"color":"rgb(148,196,148)","size":1.0},{"source":"210","target":"488","id":"5905","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"387","target":"520","id":"8538","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"341","target":"365","id":"7965","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"199","target":"670","id":"5729","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"152","target":"163","id":"4829","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"561","target":"658","id":"10114","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"348","target":"603","id":"8055","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"166","target":"168","id":"5096","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"606","target":"646","id":"10353","attributes":{"Weight":"1.0"},"color":"rgb(132,83,229)","size":1.0},{"source":"3","target":"711","id":"1531","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"118","target":"387","id":"4119","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"239","target":"262","id":"6387","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"283","target":"413","id":"7129","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"202","target":"486","id":"5778","attributes":{"Weight":"1.0"},"color":"rgb(148,213,148)","size":1.0},{"source":"136","target":"206","id":"4483","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"65","target":"347","id":"2982","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"233","target":"699","id":"6310","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"116","target":"415","id":"4079","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"270","target":"312","id":"6905","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"561","target":"647","id":"10113","attributes":{"Weight":"1.0"},"color":"rgb(148,83,196)","size":1.0},{"source":"538","target":"684","id":"9998","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"205","target":"655","id":"5836","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"490","target":"675","id":"9617","attributes":{"Weight":"1.0"},"color":"rgb(213,148,132)","size":1.0},{"source":"64","target":"223","id":"2955","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"18","target":"65","id":"1866","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"460","target":"654","id":"9367","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"103","target":"357","id":"3815","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"30","target":"499","id":"2160","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"230","target":"262","id":"6248","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"368","target":"720","id":"8276","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"395","target":"405","id":"8633","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"165","target":"226","id":"5081","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"377","target":"394","id":"8381","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"5","target":"116","id":"1556","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"160","target":"322","id":"4985","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"338","target":"507","id":"7929","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"50","target":"419","id":"2619","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"253","target":"356","id":"6617","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"79","target":"475","id":"3291","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"362","target":"483","id":"8199","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"86","target":"332","id":"3440","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"182","target":"626","id":"5410","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"139","target":"430","id":"4544","attributes":{"Weight":"1.0"},"color":"rgb(148,213,99)","size":1.0},{"source":"174","target":"292","id":"5251","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"196","target":"381","id":"5658","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"560","target":"731","id":"10112","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"515","target":"686","id":"9812","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"506","target":"588","id":"9754","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"12","target":"424","id":"1741","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"299","target":"669","id":"7384","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"460","target":"606","id":"9363","attributes":{"Weight":"1.0"},"color":"rgb(132,148,180)","size":1.0},{"source":"401","target":"545","id":"8710","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"390","target":"658","id":"8576","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"661","target":"690","id":"10588","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"515","target":"518","id":"9808","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"162","target":"431","id":"5025","attributes":{"Weight":"1.0"},"color":"rgb(196,148,132)","size":1.0},{"source":"71","target":"210","id":"3112","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"395","target":"658","id":"8641","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"50","target":"643","id":"2627","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"317","target":"509","id":"7631","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"47","target":"254","id":"2546","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"398","target":"638","id":"8673","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"578","target":"596","id":"10224","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"523","target":"565","id":"9877","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"518","target":"541","id":"9834","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"305","target":"353","id":"7465","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"115","target":"363","id":"4052","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"28","target":"419","id":"2108","attributes":{"Weight":"1.0"},"color":"rgb(67,180,229)","size":1.0},{"source":"7","target":"596","id":"1616","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"61","target":"327","id":"2876","attributes":{"Weight":"1.0"},"color":"rgb(132,148,196)","size":1.0},{"source":"313","target":"459","id":"7569","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"343","target":"378","id":"7994","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"532","target":"685","id":"9957","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"6","target":"77","id":"1581","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"550","target":"712","id":"10063","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"196","target":"667","id":"5677","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"204","target":"636","id":"5815","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"299","target":"703","id":"7386","attributes":{"Weight":"1.0"},"color":"rgb(180,115,148)","size":1.0},{"source":"294","target":"629","id":"7307","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"204","target":"516","id":"5810","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"471","target":"515","id":"9469","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"297","target":"715","id":"7351","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"351","target":"367","id":"8089","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"400","target":"423","id":"8697","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"79","target":"648","id":"3300","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"660","target":"696","id":"10586","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"466","target":"646","id":"9419","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"155","target":"359","id":"4893","attributes":{"Weight":"1.0"},"color":"rgb(229,132,132)","size":1.0},{"source":"96","target":"234","id":"3673","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"370","target":"701","id":"8290","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"296","target":"525","id":"7329","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"438","target":"466","id":"9126","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"85","target":"323","id":"3417","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"432","target":"514","id":"9056","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"44","target":"627","id":"2486","attributes":{"Weight":"1.0"},"color":"rgb(67,180,196)","size":1.0},{"source":"272","target":"347","id":"6936","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"138","target":"437","id":"4525","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"300","target":"432","id":"7388","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"4","target":"664","id":"1551","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"345","target":"507","id":"8016","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"170","target":"556","id":"5182","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"290","target":"330","id":"7238","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"31","target":"153","id":"2171","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"220","target":"520","id":"6086","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"46","target":"565","id":"2538","attributes":{"Weight":"1.0"},"color":"rgb(213,148,148)","size":1.0},{"source":"150","target":"154","id":"4777","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"216","target":"593","id":"6020","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"217","target":"625","id":"6038","attributes":{"Weight":"1.0"},"color":"rgb(67,180,180)","size":1.0},{"source":"310","target":"518","id":"7534","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"16","target":"23","id":"1823","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"82","target":"480","id":"3357","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"332","target":"703","id":"7854","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"448","target":"712","id":"9246","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"384","target":"679","id":"8496","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"218","target":"572","id":"6058","attributes":{"Weight":"1.0"},"color":"rgb(148,115,213)","size":1.0},{"source":"454","target":"623","id":"9303","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"328","target":"615","id":"7791","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"378","target":"388","id":"8394","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"27","target":"575","id":"2077","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"23","target":"174","id":"1983","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"205","target":"218","id":"5821","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"242","target":"365","id":"6435","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"57","target":"604","id":"2788","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"289","target":"529","id":"7227","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"177","target":"366","id":"5308","attributes":{"Weight":"1.0"},"color":"rgb(67,148,180)","size":1.0},{"source":"416","target":"675","id":"8868","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"99","target":"672","id":"3743","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"153","target":"457","id":"4854","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"54","target":"261","id":"2699","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"184","target":"637","id":"5452","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"107","target":"662","id":"3887","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"124","target":"361","id":"4241","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"632","target":"639","id":"10460","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"406","target":"544","id":"8766","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"14","target":"72","id":"1774","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"170","target":"423","id":"5180","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"252","target":"661","id":"6613","attributes":{"Weight":"1.0"},"color":"rgb(180,229,67)","size":1.0},{"source":"96","target":"99","id":"3664","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"328","target":"609","id":"7790","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"537","target":"691","id":"9991","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"162","target":"723","id":"5039","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"24","target":"439","id":"2007","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"559","target":"560","id":"10106","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"246","target":"639","id":"6509","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"367","target":"551","id":"8260","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"36","target":"495","id":"2299","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"45","target":"478","id":"2509","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"48","target":"641","id":"2574","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"218","target":"279","id":"6047","attributes":{"Weight":"1.0"},"color":"rgb(148,115,213)","size":1.0},{"source":"304","target":"554","id":"7457","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"138","target":"404","id":"4523","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"154","target":"572","id":"4876","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"354","target":"484","id":"8128","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"56","target":"612","id":"2759","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"144","target":"150","id":"4649","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"575","target":"576","id":"10202","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"492","target":"549","id":"9637","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"431","target":"436","id":"9040","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"93","target":"618","id":"3613","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"359","target":"486","id":"8175","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"39","target":"711","id":"2374","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"160","target":"638","id":"4993","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"401","target":"556","id":"8711","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"113","target":"533","id":"4015","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"586","target":"699","id":"10269","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"76","target":"288","id":"3216","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"289","target":"717","id":"7236","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"98","target":"329","id":"3709","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"129","target":"155","id":"4325","attributes":{"Weight":"1.0"},"color":"rgb(229,132,132)","size":1.0},{"source":"243","target":"568","id":"6451","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"374","target":"396","id":"8333","attributes":{"Weight":"1.0"},"color":"rgb(132,148,196)","size":1.0},{"source":"176","target":"536","id":"5294","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"238","target":"303","id":"6369","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"206","target":"550","id":"5847","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"473","target":"594","id":"9498","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"370","target":"554","id":"8287","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"328","target":"551","id":"7789","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"23","target":"704","id":"1994","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"23","target":"733","id":"1997","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"260","target":"339","id":"6733","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"459","target":"477","id":"9349","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"44","target":"678","id":"2488","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"575","target":"668","id":"10207","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"465","target":"646","id":"9407","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"290","target":"560","id":"7253","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"129","target":"352","id":"4335","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"374","target":"623","id":"8345","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"343","target":"712","id":"8003","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"96","target":"457","id":"3679","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"542","target":"669","id":"10020","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"10","target":"457","id":"1699","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"416","target":"622","id":"8866","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"48","target":"733","id":"2579","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"433","target":"629","id":"9081","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"130","target":"481","id":"4362","attributes":{"Weight":"1.0"},"color":"rgb(132,148,148)","size":1.0},{"source":"259","target":"553","id":"6721","attributes":{"Weight":"1.0"},"color":"rgb(115,148,164)","size":1.0},{"source":"422","target":"572","id":"8937","attributes":{"Weight":"1.0"},"color":"rgb(213,148,132)","size":1.0},{"source":"8","target":"318","id":"1637","attributes":{"Weight":"1.0"},"color":"rgb(67,229,99)","size":1.0},{"source":"286","target":"703","id":"7178","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"147","target":"157","id":"4721","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"60","target":"324","id":"2846","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"27","target":"308","id":"2067","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"210","target":"407","id":"5903","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"231","target":"583","id":"6271","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"304","target":"630","id":"7458","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"41","target":"380","id":"2403","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"24","target":"732","id":"2015","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"38","target":"531","id":"2349","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"385","target":"678","id":"8515","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"580","target":"593","id":"10241","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"303","target":"415","id":"7435","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"375","target":"577","id":"8359","attributes":{"Weight":"1.0"},"color":"rgb(83,229,115)","size":1.0},{"source":"455","target":"698","id":"9319","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"102","target":"235","id":"3788","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"163","target":"617","id":"5053","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"180","target":"188","id":"5370","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"320","target":"609","id":"7683","attributes":{"Weight":"1.0"},"color":"rgb(164,99,148)","size":1.0},{"source":"57","target":"87","id":"2768","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"68","target":"270","id":"3039","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"342","target":"702","id":"7990","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"261","target":"450","id":"6760","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"516","target":"697","id":"9822","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"261","target":"279","id":"6752","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"536","target":"700","id":"9984","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"237","target":"452","id":"6361","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"14","target":"115","id":"1776","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"44","target":"717","id":"2490","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"217","target":"627","id":"6040","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"52","target":"615","id":"2666","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"287","target":"631","id":"7192","attributes":{"Weight":"1.0"},"color":"rgb(67,196,229)","size":1.0},{"source":"593","target":"703","id":"10300","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"57","target":"409","id":"2774","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"712","target":"727","id":"10672","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"62","target":"406","id":"2913","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"22","target":"568","id":"1970","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"38","target":"359","id":"2342","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"288","target":"523","id":"7207","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"410","target":"545","id":"8811","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"134","target":"476","id":"4443","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"60","target":"222","id":"2840","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"234","target":"600","id":"6322","attributes":{"Weight":"1.0"},"color":"rgb(67,148,229)","size":1.0},{"source":"247","target":"584","id":"6524","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"346","target":"664","id":"8034","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"150","target":"373","id":"4787","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"318","target":"371","id":"7639","attributes":{"Weight":"1.0"},"color":"rgb(148,148,132)","size":1.0},{"source":"145","target":"586","id":"4697","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"94","target":"673","id":"3636","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"482","target":"653","id":"9567","attributes":{"Weight":"1.0"},"color":"rgb(164,148,148)","size":1.0},{"source":"392","target":"394","id":"8594","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"53","target":"633","id":"2683","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"354","target":"362","id":"8125","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"485","target":"671","id":"9582","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"113","target":"705","id":"4021","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"474","target":"657","id":"9508","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"76","target":"508","id":"3227","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"17","target":"49","id":"1844","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"260","target":"266","id":"6730","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"112","target":"230","id":"3993","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"624","target":"698","id":"10433","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"601","target":"703","id":"10331","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"181","target":"369","id":"5393","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"229","target":"318","id":"6237","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"541","target":"686","id":"10017","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"443","target":"567","id":"9199","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"359","target":"430","id":"8172","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"556","target":"557","id":"10088","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"340","target":"346","id":"7953","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"155","target":"591","id":"4899","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"247","target":"389","id":"6520","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"316","target":"371","id":"7608","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"27","target":"576","id":"2078","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"95","target":"617","id":"3660","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"110","target":"179","id":"3935","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"545","target":"696","id":"10041","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"432","target":"719","id":"9068","attributes":{"Weight":"1.0"},"color":"rgb(180,67,213)","size":1.0},{"source":"568","target":"704","id":"10151","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"68","target":"73","id":"3033","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"297","target":"485","id":"7342","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"304","target":"652","id":"7459","attributes":{"Weight":"1.0"},"color":"rgb(148,115,148)","size":1.0},{"source":"159","target":"671","id":"4976","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"67","target":"73","id":"3013","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"332","target":"528","id":"7845","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"104","target":"275","id":"3827","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"89","target":"127","id":"3513","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"12","target":"202","id":"1731","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"168","target":"430","id":"5137","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"505","target":"574","id":"9745","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"299","target":"455","id":"7375","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"74","target":"172","id":"3170","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"465","target":"724","id":"9412","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"10","target":"130","id":"1688","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"2","target":"130","id":"1493","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"479","target":"515","id":"9543","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"5","target":"308","id":"1566","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"656","target":"660","id":"10573","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"401","target":"660","id":"8715","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"377","target":"390","id":"8377","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"56","target":"667","id":"2762","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"678","target":"687","id":"10625","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"420","target":"705","id":"8913","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"625","target":"654","id":"10434","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"8","target":"177","id":"1634","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"100","target":"181","id":"3749","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"143","target":"698","id":"4648","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"144","target":"603","id":"4668","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"348","target":"702","id":"8059","attributes":{"Weight":"1.0"},"color":"rgb(67,229,116)","size":1.0},{"source":"497","target":"684","id":"9685","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"382","target":"651","id":"8463","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"122","target":"687","id":"4210","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"422","target":"693","id":"8941","attributes":{"Weight":"1.0"},"color":"rgb(180,229,67)","size":1.0},{"source":"15","target":"274","id":"1806","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"156","target":"375","id":"4913","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"44","target":"547","id":"2479","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"309","target":"369","id":"7517","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"152","target":"343","id":"4833","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"310","target":"470","id":"7529","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"379","target":"505","id":"8411","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"11","target":"272","id":"1713","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"641","target":"733","id":"10510","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"178","target":"367","id":"5332","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"425","target":"472","id":"8965","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"624","target":"653","id":"10431","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"90","target":"213","id":"3538","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"86","target":"716","id":"3454","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"8","target":"646","id":"1652","attributes":{"Weight":"1.0"},"color":"rgb(67,164,180)","size":1.0},{"source":"66","target":"389","id":"3003","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"639","target":"715","id":"10497","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"16","target":"293","id":"1832","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"49","target":"317","id":"2590","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"32","target":"656","id":"2202","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"288","target":"567","id":"7213","attributes":{"Weight":"1.0"},"color":"rgb(229,67,213)","size":1.0},{"source":"174","target":"732","id":"5261","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"37","target":"722","id":"2327","attributes":{"Weight":"1.0"},"color":"rgb(67,148,229)","size":1.0},{"source":"402","target":"545","id":"8721","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"105","target":"309","id":"3848","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"234","target":"630","id":"6324","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"296","target":"582","id":"7331","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"555","target":"642","id":"10084","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"5","target":"335","id":"1567","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"415","target":"616","id":"8852","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"333","target":"528","id":"7858","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"634","target":"711","id":"10472","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"279","target":"676","id":"7051","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"531","target":"634","id":"9948","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"148","target":"298","id":"4741","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"218","target":"519","id":"6055","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"280","target":"376","id":"7059","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"94","target":"507","id":"3630","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"55","target":"542","id":"2741","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"425","target":"676","id":"8980","attributes":{"Weight":"1.0"},"color":"rgb(229,67,213)","size":1.0},{"source":"193","target":"466","id":"5605","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"5","target":"238","id":"1562","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"251","target":"410","id":"6588","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"67","target":"736","id":"3032","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"102","target":"324","id":"3792","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"337","target":"627","id":"7920","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"236","target":"324","id":"6343","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"143","target":"332","id":"4635","attributes":{"Weight":"1.0"},"color":"rgb(180,115,148)","size":1.0},{"source":"493","target":"494","id":"9643","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"280","target":"289","id":"7056","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"10","target":"369","id":"1697","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"306","target":"467","id":"7477","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"163","target":"448","id":"5047","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"218","target":"585","id":"6060","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"360","target":"727","id":"8192","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"99","target":"366","id":"3736","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"27","target":"76","id":"2057","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"125","target":"483","id":"4263","attributes":{"Weight":"1.0"},"color":"rgb(213,180,67)","size":1.0},{"source":"676","target":"699","id":"10619","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"364","target":"602","id":"8221","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"485","target":"657","id":"9580","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"167","target":"191","id":"5117","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"89","target":"322","id":"3520","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"279","target":"436","id":"7042","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"134","target":"683","id":"4449","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"255","target":"402","id":"6651","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"206","target":"360","id":"5841","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"670","target":"709","id":"10609","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"425","target":"440","id":"8963","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"294","target":"589","id":"7304","attributes":{"Weight":"1.0"},"color":"rgb(229,67,213)","size":1.0},{"source":"239","target":"361","id":"6391","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"152","target":"378","id":"4835","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"335","target":"575","id":"7886","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"283","target":"393","id":"7122","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"625","target":"707","id":"10439","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"684","target":"688","id":"10632","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"471","target":"518","id":"9470","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"121","target":"486","id":"4186","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"330","target":"566","id":"7827","attributes":{"Weight":"1.0"},"color":"rgb(213,67,196)","size":1.0},{"source":"48","target":"158","id":"2565","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"503","target":"628","id":"9729","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"301","target":"444","id":"7404","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"31","target":"99","id":"2166","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"208","target":"471","id":"5876","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"379","target":"597","id":"8415","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"40","target":"570","id":"2389","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"300","target":"444","id":"7389","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"547","target":"676","id":"10049","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"425","target":"473","id":"8966","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"460","target":"625","id":"9365","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"195","target":"274","id":"5637","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"176","target":"615","id":"5298","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"588","target":"727","id":"10278","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"603","target":"713","id":"10344","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"50","target":"371","id":"2616","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"218","target":"260","id":"6044","attributes":{"Weight":"1.0"},"color":"rgb(115,196,148)","size":1.0},{"source":"667","target":"677","id":"10602","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"478","target":"482","id":"9539","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"470","target":"541","id":"9463","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"119","target":"360","id":"4138","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"109","target":"248","id":"3914","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"82","target":"337","id":"3348","attributes":{"Weight":"1.0"},"color":"rgb(67,180,196)","size":1.0},{"source":"148","target":"310","id":"4743","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"5","target":"415","id":"1569","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"181","target":"370","id":"5394","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"100","target":"457","id":"3757","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"252","target":"565","id":"6611","attributes":{"Weight":"1.0"},"color":"rgb(213,148,148)","size":1.0},{"source":"256","target":"357","id":"6670","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"73","target":"633","id":"3161","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"61","target":"345","id":"2878","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"85","target":"547","id":"3425","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"375","target":"721","id":"8364","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"373","target":"677","id":"8327","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"258","target":"348","id":"6698","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"501","target":"617","id":"9718","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"136","target":"501","id":"4491","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"316","target":"719","id":"7624","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"349","target":"397","id":"8064","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"418","target":"631","id":"8888","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"245","target":"397","id":"6484","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"14","target":"695","id":"1797","attributes":{"Weight":"1.0"},"color":"rgb(148,148,83)","size":1.0},{"source":"10","target":"309","id":"1694","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"118","target":"670","id":"4128","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"115","target":"537","id":"4058","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"538","target":"688","id":"9999","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"106","target":"370","id":"3866","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"53","target":"688","id":"2688","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"311","target":"408","id":"7541","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"158","target":"568","id":"4951","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"146","target":"182","id":"4704","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"266","target":"665","id":"6840","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"582","target":"631","id":"10251","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"264","target":"734","id":"6816","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"39","target":"634","id":"2373","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"122","target":"385","id":"4195","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"142","target":"469","id":"4616","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"263","target":"444","id":"6785","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"131","target":"528","id":"4383","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"88","target":"610","id":"3504","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"458","target":"477","id":"9338","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"700","target":"718","id":"10663","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"618","target":"716","id":"10409","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"77","target":"307","id":"3245","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"113","target":"420","id":"4013","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"167","target":"711","id":"5129","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"508","target":"562","id":"9770","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"4","target":"590","id":"1549","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"361","target":"445","id":"8194","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"338","target":"350","id":"7925","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"315","target":"598","id":"7603","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"82","target":"454","id":"3355","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"29","target":"680","id":"2142","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"51","target":"568","id":"2638","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"69","target":"438","id":"3067","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"435","target":"631","id":"9103","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"115","target":"706","id":"4065","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"132","target":"214","id":"4400","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"443","target":"571","id":"9200","attributes":{"Weight":"1.0"},"color":"rgb(229,115,132)","size":1.0},{"source":"119","target":"617","id":"4147","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"4","target":"199","id":"1538","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"335","target":"713","id":"7894","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"58","target":"416","id":"2801","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"240","target":"603","id":"6408","attributes":{"Weight":"1.0"},"color":"rgb(148,213,99)","size":1.0},{"source":"152","target":"248","id":"4831","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"345","target":"606","id":"8019","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"94","target":"417","id":"3628","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"496","target":"566","id":"9670","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"120","target":"499","id":"4164","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"14","target":"200","id":"1779","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"135","target":"279","id":"4455","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"12","target":"642","id":"1749","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"177","target":"572","id":"5317","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"332","target":"571","id":"7846","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"234","target":"366","id":"6316","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"111","target":"569","id":"3978","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"46","target":"422","id":"2529","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"78","target":"380","id":"3268","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"5","target":"232","id":"1561","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"454","target":"678","id":"9305","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"504","target":"693","id":"9741","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"337","target":"420","id":"7915","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"66","target":"599","id":"3010","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"150","target":"591","id":"4795","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"249","target":"452","id":"6549","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"558","target":"660","id":"10102","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"448","target":"617","id":"9245","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"124","target":"132","id":"4228","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"196","target":"369","id":"5657","attributes":{"Weight":"1.0"},"color":"rgb(148,67,229)","size":1.0},{"source":"202","target":"211","id":"5765","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"109","target":"563","id":"3924","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"27","target":"238","id":"2064","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"95","target":"588","id":"3659","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"129","target":"531","id":"4343","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"547","target":"586","id":"10047","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"427","target":"492","id":"8995","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"375","target":"455","id":"8353","attributes":{"Weight":"1.0"},"color":"rgb(116,148,148)","size":1.0},{"source":"3","target":"38","id":"1510","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"180","target":"216","id":"5371","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"224","target":"280","id":"6144","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"247","target":"306","id":"6517","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"182","target":"407","id":"5405","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"393","target":"413","id":"8613","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"524","target":"684","id":"9890","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"330","target":"414","id":"7823","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"190","target":"363","id":"5555","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"197","target":"551","id":"5693","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"221","target":"600","id":"6110","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"349","target":"720","id":"8076","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"328","target":"549","id":"7788","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"239","target":"445","id":"6394","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"470","target":"479","id":"9460","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"34","target":"275","id":"2250","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"150","target":"245","id":"4781","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"217","target":"321","id":"6031","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"528","target":"619","id":"9929","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"226","target":"461","id":"6187","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"185","target":"425","id":"5463","attributes":{"Weight":"1.0"},"color":"rgb(229,132,148)","size":1.0},{"source":"296","target":"619","id":"7334","attributes":{"Weight":"1.0"},"color":"rgb(148,164,148)","size":1.0},{"source":"53","target":"183","id":"2672","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"443","target":"589","id":"9202","attributes":{"Weight":"1.0"},"color":"rgb(229,67,213)","size":1.0},{"source":"26","target":"252","id":"2044","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"143","target":"624","id":"4644","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"72","target":"200","id":"3133","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"114","target":"160","id":"4024","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"274","target":"494","id":"6963","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"95","target":"630","id":"3661","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"485","target":"632","id":"9577","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"355","target":"510","id":"8133","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"382","target":"650","id":"8462","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"256","target":"355","id":"6669","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"397","target":"644","id":"8660","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"150","target":"164","id":"4779","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"2","target":"630","id":"1506","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"203","target":"577","id":"5798","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"382","target":"735","id":"8471","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"119","target":"388","id":"4140","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"509","target":"546","id":"9778","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"145","target":"567","id":"4695","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"141","target":"249","id":"4588","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"93","target":"571","id":"3608","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"217","target":"337","id":"6032","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"289","target":"732","id":"7237","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"63","target":"671","id":"2942","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"254","target":"401","id":"6635","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"34","target":"510","id":"2259","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"51","target":"439","id":"2636","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"187","target":"301","id":"5498","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"248","target":"360","id":"6530","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"546","target":"592","id":"10045","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"134","target":"544","id":"4447","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"42","target":"580","id":"2429","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"131","target":"188","id":"4371","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"432","target":"653","id":"9065","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"400","target":"557","id":"8700","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"167","target":"185","id":"5116","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"631","target":"734","id":"10458","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"55","target":"669","id":"2744","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"313","target":"479","id":"7574","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"617","target":"727","id":"10405","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"330","target":"413","id":"7822","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"212","target":"676","id":"5954","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"387","target":"396","id":"8534","attributes":{"Weight":"1.0"},"color":"rgb(132,148,213)","size":1.0},{"source":"147","target":"444","id":"4729","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"117","target":"265","id":"4098","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"48","target":"540","id":"2571","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"489","target":"643","id":"9609","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"338","target":"345","id":"7924","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"30","target":"710","id":"2164","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"528","target":"606","id":"9927","attributes":{"Weight":"1.0"},"color":"rgb(213,115,148)","size":1.0},{"source":"21","target":"24","id":"1934","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"142","target":"539","id":"4619","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"125","target":"291","id":"4252","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"153","target":"219","id":"4847","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"77","target":"148","id":"3242","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"261","target":"366","id":"6756","attributes":{"Weight":"1.0"},"color":"rgb(67,148,229)","size":1.0},{"source":"457","target":"672","id":"9332","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"122","target":"374","id":"4194","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"207","target":"361","id":"5862","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"87","target":"562","id":"3472","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"94","target":"396","id":"3627","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"13","target":"192","id":"1758","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"38","target":"711","id":"2354","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"2","target":"234","id":"1497","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"119","target":"727","id":"4149","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"134","target":"530","id":"4446","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"166","target":"240","id":"5100","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"552","target":"710","id":"10070","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"105","target":"130","id":"3842","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"66","target":"192","id":"2995","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"80","target":"116","id":"3304","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"289","target":"704","id":"7235","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"129","target":"711","id":"4348","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"58","target":"125","id":"2794","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"259","target":"537","id":"6720","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"18","target":"199","id":"1869","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"227","target":"371","id":"6202","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"9","target":"60","id":"1661","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"7","target":"480","id":"1612","attributes":{"Weight":"1.0"},"color":"rgb(115,229,115)","size":1.0},{"source":"576","target":"646","id":"10214","attributes":{"Weight":"1.0"},"color":"rgb(67,164,180)","size":1.0},{"source":"42","target":"652","id":"2434","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"72","target":"702","id":"3148","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"202","target":"462","id":"5777","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"411","target":"658","id":"8826","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"148","target":"468","id":"4747","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"401","target":"402","id":"8707","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"2","target":"100","id":"1490","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"216","target":"277","id":"6006","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"42","target":"618","id":"2432","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"521","target":"594","id":"9858","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"421","target":"663","id":"8928","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"141","target":"481","id":"4598","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"186","target":"324","id":"5484","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"108","target":"494","id":"3898","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"480","target":"577","id":"9553","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"131","target":"716","id":"4395","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"264","target":"646","id":"6806","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"409","target":"440","id":"8792","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"211","target":"462","id":"5923","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"127","target":"246","id":"4288","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"61","target":"325","id":"2875","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"454","target":"517","id":"9298","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"17","target":"103","id":"1845","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"480","target":"678","id":"9558","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"159","target":"553","id":"4970","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"393","target":"561","id":"8617","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"368","target":"595","id":"8273","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"44","target":"614","id":"2484","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"488","target":"561","id":"9596","attributes":{"Weight":"1.0"},"color":"rgb(148,99,196)","size":1.0},{"source":"189","target":"655","id":"5547","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"136","target":"388","id":"4489","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"195","target":"205","id":"5635","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"199","target":"347","id":"5720","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"395","target":"399","id":"8632","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"62","target":"513","id":"2916","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"578","target":"610","id":"10227","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"177","target":"522","id":"5314","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"420","target":"626","id":"8910","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"221","target":"366","id":"6099","attributes":{"Weight":"1.0"},"color":"rgb(67,148,229)","size":1.0},{"source":"138","target":"628","id":"4529","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"157","target":"521","id":"4936","attributes":{"Weight":"1.0"},"color":"rgb(180,67,229)","size":1.0},{"source":"201","target":"548","id":"5761","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"391","target":"414","id":"8587","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"332","target":"618","id":"7850","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"201","target":"429","id":"5758","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"58","target":"249","id":"2797","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"474","target":"726","id":"9511","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"690","target":"692","id":"10645","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"475","target":"480","id":"9512","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"434","target":"668","id":"9093","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"386","target":"415","id":"8518","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"128","target":"336","id":"4310","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"450","target":"462","id":"9258","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"496","target":"714","id":"9677","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"47","target":"255","id":"2547","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"83","target":"407","id":"3379","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"522","target":"679","id":"9872","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"149","target":"566","id":"4770","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"42","target":"131","id":"2414","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"224","target":"547","id":"6157","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"242","target":"513","id":"6440","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"529","target":"569","id":"9937","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"86","target":"99","id":"3432","attributes":{"Weight":"1.0"},"color":"rgb(148,115,148)","size":1.0},{"source":"2","target":"701","id":"1509","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"2","target":"153","id":"1494","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"596","target":"602","id":"10306","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"112","target":"214","id":"3991","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"102","target":"264","id":"3790","attributes":{"Weight":"1.0"},"color":"rgb(148,83,180)","size":1.0},{"source":"29","target":"298","id":"2127","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"101","target":"230","id":"3770","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"187","target":"535","id":"5504","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"83","target":"533","id":"3382","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"82","target":"498","id":"3358","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"241","target":"453","id":"6417","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"149","target":"659","id":"4773","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"166","target":"677","id":"5112","attributes":{"Weight":"1.0"},"color":"rgb(148,213,99)","size":1.0},{"source":"307","target":"515","id":"7493","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"393","target":"731","id":"8619","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"87","target":"288","id":"3458","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"267","target":"446","id":"6853","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"376","target":"676","id":"8374","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"307","target":"620","id":"7496","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"429","target":"643","id":"9025","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"331","target":"567","id":"7837","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"57","target":"381","id":"2773","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"134","target":"265","id":"4437","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"239","target":"484","id":"6396","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"596","target":"665","id":"10309","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"36","target":"570","id":"2300","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"248","target":"501","id":"6534","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"637","target":"684","id":"10484","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"324","target":"499","id":"7725","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"126","target":"375","id":"4276","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"171","target":"579","id":"5203","attributes":{"Weight":"1.0"},"color":"rgb(132,99,229)","size":1.0},{"source":"205","target":"435","id":"5825","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"60","target":"120","id":"2835","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"287","target":"734","id":"7195","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"319","target":"600","id":"7668","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"52","target":"329","id":"2653","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"176","target":"351","id":"5286","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"584","target":"598","id":"10260","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"493","target":"525","id":"9645","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"352","target":"461","id":"8106","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"76","target":"425","id":"3221","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"222","target":"334","id":"6120","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"242","target":"683","id":"6445","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"330","target":"391","id":"7813","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"156","target":"476","id":"4915","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"301","target":"542","id":"7410","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"269","target":"731","id":"6903","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"111","target":"245","id":"3965","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"364","target":"721","id":"8229","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"40","target":"284","id":"2382","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"308","target":"555","id":"7504","attributes":{"Weight":"1.0"},"color":"rgb(67,229,180)","size":1.0},{"source":"151","target":"233","id":"4808","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"473","target":"663","id":"9500","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"266","target":"271","id":"6830","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"501","target":"588","id":"9717","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"536","target":"549","id":"9980","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"462","target":"555","id":"9384","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"251","target":"558","id":"6593","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"396","target":"534","id":"8646","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"496","target":"534","id":"9669","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"221","target":"225","id":"6092","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"88","target":"177","id":"3483","attributes":{"Weight":"1.0"},"color":"rgb(115,229,99)","size":1.0},{"source":"31","target":"106","id":"2169","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"166","target":"185","id":"5097","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"138","target":"220","id":"4517","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"314","target":"350","id":"7584","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"565","target":"589","id":"10132","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"534","target":"606","id":"9967","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"187","target":"653","id":"5508","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"279","target":"280","id":"7034","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"134","target":"502","id":"4444","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"273","target":"306","id":"6948","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"281","target":"466","id":"7082","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"4","target":"272","id":"1540","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"464","target":"492","id":"9396","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"674","target":"694","id":"10615","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"56","target":"707","id":"2766","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"197","target":"232","id":"5679","attributes":{"Weight":"1.0"},"color":"rgb(83,148,180)","size":1.0},{"source":"36","target":"40","id":"2285","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"199","target":"503","id":"5724","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"289","target":"376","id":"7221","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"246","target":"553","id":"6505","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"190","target":"232","id":"5551","attributes":{"Weight":"1.0"},"color":"rgb(67,229,116)","size":1.0},{"source":"365","target":"502","id":"8235","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"140","target":"455","id":"4569","attributes":{"Weight":"1.0"},"color":"rgb(99,148,180)","size":1.0},{"source":"310","target":"620","id":"7536","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"504","target":"661","id":"9737","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"131","target":"332","id":"4376","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"556","target":"694","id":"10093","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"183","target":"538","id":"5427","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"356","target":"401","id":"8139","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"407","target":"533","id":"8771","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"458","target":"468","id":"9335","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"534","target":"566","id":"9966","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"10","target":"100","id":"1685","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"290","target":"394","id":"7244","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"17","target":"318","id":"1855","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"198","target":"736","id":"5714","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"182","target":"210","id":"5400","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"218","target":"493","id":"6053","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"385","target":"573","id":"8508","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"341","target":"530","id":"7971","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"473","target":"508","id":"9490","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"591","target":"629","id":"10290","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"404","target":"709","id":"8752","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"456","target":"615","id":"9327","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"394","target":"658","id":"8630","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"443","target":"623","id":"9203","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"4","target":"628","id":"1550","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"493","target":"722","id":"9653","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"331","target":"586","id":"7838","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"329","target":"700","id":"7809","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"87","target":"523","id":"3470","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"36","target":"41","id":"2286","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"83","target":"662","id":"3386","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"110","target":"316","id":"3941","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"381","target":"562","id":"8440","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"140","target":"179","id":"4559","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"511","target":"601","id":"9791","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"384","target":"408","id":"8484","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"106","target":"309","id":"3863","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"403","target":"505","id":"8731","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"267","target":"564","id":"6858","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"571","target":"580","id":"10167","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"378","target":"617","id":"8404","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"367","target":"700","id":"8263","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"80","target":"616","id":"3322","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"102","target":"334","id":"3793","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"27","target":"348","id":"2069","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"138","target":"199","id":"4516","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"33","target":"643","id":"2241","attributes":{"Weight":"1.0"},"color":"rgb(229,99,132)","size":1.0},{"source":"118","target":"520","id":"4123","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"168","target":"359","id":"5135","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"77","target":"470","id":"3251","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"520","target":"628","id":"9849","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"485","target":"621","id":"9576","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"202","target":"225","id":"5768","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"396","target":"682","id":"8653","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"3","target":"226","id":"1520","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"284","target":"380","id":"7139","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"613","target":"714","id":"10393","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"219","target":"672","id":"6076","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"333","target":"618","id":"7864","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"381","target":"604","id":"8445","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"339","target":"596","id":"7943","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"417","target":"613","id":"8874","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"215","target":"578","id":"5994","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"138","target":"503","id":"4526","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"75","target":"194","id":"3196","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"102","target":"186","id":"3784","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"26","target":"59","id":"2038","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"164","target":"629","id":"5069","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"298","target":"515","id":"7363","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"456","target":"549","id":"9324","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"397","target":"719","id":"8663","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"35","target":"584","id":"2281","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"203","target":"623","id":"5801","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"171","target":"338","id":"5194","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"62","target":"91","id":"2901","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"703","target":"716","id":"10665","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"543","target":"629","id":"10028","attributes":{"Weight":"1.0"},"color":"rgb(229,67,213)","size":1.0},{"source":"173","target":"585","id":"5245","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"93","target":"528","id":"3607","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"177","target":"667","id":"5322","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"304","target":"366","id":"7452","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"112","target":"124","id":"3986","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"151","target":"342","id":"4815","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"349","target":"629","id":"8072","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"208","target":"515","id":"5879","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"409","target":"629","id":"8806","attributes":{"Weight":"1.0"},"color":"rgb(229,67,213)","size":1.0},{"source":"455","target":"624","id":"9314","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"205","target":"296","id":"5823","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"11","target":"709","id":"1727","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"296","target":"722","id":"7338","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"230","target":"239","id":"6247","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"241","target":"690","id":"6427","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"294","target":"569","id":"7301","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"91","target":"156","id":"3557","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"325","target":"613","id":"7742","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"485","target":"715","id":"9583","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"13","target":"570","id":"1768","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"189","target":"484","id":"5543","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"56","target":"384","id":"2752","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"106","target":"457","id":"3867","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"227","target":"644","id":"6213","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"438","target":"729","id":"9136","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"68","target":"736","id":"3055","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"565","target":"728","id":"10137","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"506","target":"563","id":"9753","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"562","target":"646","id":"10122","attributes":{"Weight":"1.0"},"color":"rgb(148,83,229)","size":1.0},{"source":"317","target":"546","id":"7633","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"160","target":"485","id":"4988","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"21","target":"439","id":"1946","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"33","target":"262","id":"2223","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"146","target":"321","id":"4709","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"425","target":"589","id":"8974","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"30","target":"429","id":"2158","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"650","target":"725","id":"10548","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"393","target":"560","id":"8616","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"199","target":"340","id":"5718","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"294","target":"349","id":"7294","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"454","target":"611","id":"9301","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"278","target":"662","id":"7032","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"660","target":"694","id":"10585","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"112","target":"262","id":"3995","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"35","target":"380","id":"2276","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"99","target":"130","id":"3728","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"20","target":"681","id":"1930","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"24","target":"540","id":"2008","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"9","target":"235","id":"1668","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"8","target":"60","id":"1627","attributes":{"Weight":"1.0"},"color":"rgb(148,148,132)","size":1.0},{"source":"183","target":"707","id":"5437","attributes":{"Weight":"1.0"},"color":"rgb(99,229,99)","size":1.0},{"source":"573","target":"679","id":"10193","attributes":{"Weight":"1.0"},"color":"rgb(67,229,148)","size":1.0},{"source":"577","target":"721","id":"10223","attributes":{"Weight":"1.0"},"color":"rgb(115,229,115)","size":1.0},{"source":"152","target":"588","id":"4842","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"378","target":"563","id":"8402","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"82","target":"475","id":"3356","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"498","target":"577","id":"9692","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"125","target":"565","id":"4264","attributes":{"Weight":"1.0"},"color":"rgb(213,148,148)","size":1.0},{"source":"151","target":"436","id":"4818","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"277","target":"333","id":"7006","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"279","target":"331","id":"7037","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"242","target":"406","id":"6437","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"49","target":"658","id":"2601","attributes":{"Weight":"1.0"},"color":"rgb(148,148,115)","size":1.0},{"source":"115","target":"383","id":"4054","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"89","target":"398","id":"3521","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"195","target":"444","id":"5641","attributes":{"Weight":"1.0"},"color":"rgb(99,115,229)","size":1.0},{"source":"252","target":"675","id":"6614","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"44","target":"238","id":"2467","attributes":{"Weight":"1.0"},"color":"rgb(67,229,148)","size":1.0},{"source":"275","target":"546","id":"6986","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"82","target":"327","id":"3347","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"46","target":"58","id":"2517","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"69","target":"689","id":"3077","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"342","target":"547","id":"7982","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"71","target":"626","id":"3124","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"262","target":"484","id":"6779","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"46","target":"661","id":"2540","attributes":{"Weight":"1.0"},"color":"rgb(180,229,67)","size":1.0},{"source":"16","target":"695","id":"1838","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"299","target":"602","id":"7381","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"459","target":"515","id":"9351","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"228","target":"334","id":"6221","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"60","target":"228","id":"2841","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"429","target":"569","id":"9023","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"338","target":"566","id":"7931","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"33","target":"720","id":"2242","attributes":{"Weight":"1.0"},"color":"rgb(229,99,132)","size":1.0},{"source":"393","target":"414","id":"8614","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"141","target":"252","id":"4589","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"215","target":"602","id":"5996","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"75","target":"383","id":"3202","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"214","target":"354","id":"5977","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"77","target":"298","id":"3244","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"127","target":"638","id":"4298","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"100","target":"630","id":"3759","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"30","target":"489","id":"2159","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"325","target":"714","id":"7746","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"7","target":"241","id":"1605","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"114","target":"553","id":"4036","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"388","target":"727","id":"8554","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"440","target":"663","id":"9163","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"70","target":"202","id":"3084","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"521","target":"543","id":"9854","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"321","target":"533","id":"7689","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"147","target":"669","id":"4738","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"104","target":"546","id":"3837","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"349","target":"419","id":"8065","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"89","target":"632","id":"3526","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"688","target":"736","id":"10638","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"431","target":"547","id":"9044","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"372","target":"492","id":"8312","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"40","target":"389","id":"2386","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"118","target":"664","id":"4127","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"71","target":"407","id":"3119","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"123","target":"482","id":"4224","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"267","target":"317","id":"6849","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"546","target":"564","id":"10043","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"435","target":"493","id":"9095","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"356","target":"400","id":"8138","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"430","target":"634","id":"9035","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"134","target":"513","id":"4445","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"7","target":"578","id":"1615","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"310","target":"477","id":"7531","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"172","target":"625","id":"5224","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"22","target":"158","id":"1963","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"14","target":"194","id":"1778","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"375","target":"687","id":"8363","attributes":{"Weight":"1.0"},"color":"rgb(83,229,115)","size":1.0},{"source":"222","target":"228","id":"6115","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"213","target":"530","id":"5966","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"266","target":"364","id":"6832","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"127","target":"257","id":"4289","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"2","target":"672","id":"1508","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"391","target":"394","id":"8580","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"138","target":"520","id":"4527","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"204","target":"637","id":"5816","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"127","target":"726","id":"4304","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"497","target":"538","id":"9680","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"269","target":"559","id":"6899","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"88","target":"261","id":"3489","attributes":{"Weight":"1.0"},"color":"rgb(115,229,148)","size":1.0},{"source":"289","target":"547","id":"7230","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"107","target":"146","id":"3873","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"461","target":"531","id":"9377","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"325","target":"338","id":"7730","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"163","target":"588","id":"5052","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"137","target":"666","id":"4514","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"278","target":"626","id":"7030","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"257","target":"553","id":"6684","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"27","target":"679","id":"2084","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"264","target":"724","id":"6812","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"49","target":"357","id":"2593","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"94","target":"682","id":"3637","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"366","target":"572","id":"8246","attributes":{"Weight":"1.0"},"color":"rgb(148,67,213)","size":1.0},{"source":"107","target":"579","id":"3884","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"253","target":"556","id":"6624","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"141","target":"696","id":"4603","attributes":{"Weight":"1.0"},"color":"rgb(213,148,83)","size":1.0},{"source":"16","target":"24","id":"1824","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"215","target":"638","id":"5998","attributes":{"Weight":"1.0"},"color":"rgb(164,148,148)","size":1.0},{"source":"264","target":"729","id":"6814","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"336","target":"343","id":"7896","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"1","target":"218","id":"1470","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"212","target":"462","id":"5944","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"629","target":"644","id":"10450","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"38","target":"168","id":"2335","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"19","target":"449","id":"1903","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"170","target":"356","id":"5175","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"130","target":"534","id":"4364","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"365","target":"544","id":"8238","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"266","target":"578","id":"6835","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"441","target":"465","id":"9167","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"381","target":"409","id":"8428","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"3","target":"121","id":"1512","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"196","target":"652","id":"5675","attributes":{"Weight":"1.0"},"color":"rgb(229,115,148)","size":1.0},{"source":"98","target":"176","id":"3705","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"227","target":"720","id":"6216","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"94","target":"613","id":"3634","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"489","target":"552","id":"9606","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"66","target":"402","id":"3004","attributes":{"Weight":"1.0"},"color":"rgb(148,132,164)","size":1.0},{"source":"545","target":"656","id":"10037","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"100","target":"219","id":"3750","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"159","target":"246","id":"4962","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"8","target":"654","id":"1653","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"401","target":"558","id":"8713","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"241","target":"602","id":"6423","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"356","target":"674","id":"8149","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"125","target":"237","id":"4249","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"57","target":"440","id":"2777","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"60","target":"562","id":"2858","attributes":{"Weight":"1.0"},"color":"rgb(229,67,180)","size":1.0},{"source":"45","target":"59","id":"2493","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"328","target":"372","id":"7781","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"72","target":"706","id":"3149","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"74","target":"625","id":"3185","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"53","target":"270","id":"2676","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"173","target":"655","id":"5248","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"159","target":"639","id":"4974","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"54","target":"451","id":"2710","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"336","target":"501","id":"7903","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"103","target":"509","id":"3817","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"142","target":"624","id":"4621","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"277","target":"528","id":"7011","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"96","target":"366","id":"3676","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"187","target":"299","id":"5496","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"392","target":"393","id":"8593","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"521","target":"604","id":"9860","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"444","target":"624","id":"9215","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"137","target":"584","id":"4511","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"308","target":"348","id":"7500","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"319","target":"720","id":"7673","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"33","target":"361","id":"2229","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"121","target":"634","id":"4189","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"169","target":"318","id":"5155","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"133","target":"396","id":"4422","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"331","target":"490","id":"7834","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"86","target":"131","id":"3433","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"90","target":"544","id":"3550","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"172","target":"654","id":"5225","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"204","target":"635","id":"5814","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"107","target":"337","id":"3879","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"473","target":"523","id":"9492","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"132","target":"484","id":"4412","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"285","target":"382","id":"7148","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"94","target":"314","id":"3622","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"160","target":"553","id":"4989","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"203","target":"678","id":"5804","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"219","target":"554","id":"6074","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"226","target":"486","id":"6189","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"310","target":"479","id":"7532","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"104","target":"295","id":"3829","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"60","target":"334","id":"2847","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"69","target":"650","id":"3075","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"295","target":"446","id":"7316","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"241","target":"266","id":"6413","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"466","target":"647","id":"9420","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"640","target":"732","id":"10503","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"169","target":"355","id":"5157","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"175","target":"263","id":"5264","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"179","target":"238","id":"5348","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"263","target":"300","id":"6782","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"63","target":"89","id":"2921","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"265","target":"544","id":"6827","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"93","target":"579","id":"3609","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"478","target":"622","id":"9541","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"111","target":"368","id":"3970","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"350","target":"417","id":"8078","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"215","target":"266","id":"5987","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"247","target":"315","id":"6518","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"171","target":"350","id":"5196","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"367","target":"549","id":"8259","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"82","target":"203","id":"3346","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"49","target":"509","id":"2595","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"57","target":"523","id":"2782","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"32","target":"696","id":"2206","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"271","target":"453","id":"6920","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"253","target":"694","id":"6630","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"69","target":"647","id":"3074","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"3","target":"185","id":"1518","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"388","target":"712","id":"8553","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"190","target":"537","id":"5561","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"481","target":"482","id":"9560","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"146","target":"286","id":"4708","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"334","target":"710","id":"7880","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"143","target":"542","id":"4643","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"387","target":"633","id":"8541","attributes":{"Weight":"1.0"},"color":"rgb(99,229,132)","size":1.0},{"source":"17","target":"581","id":"1863","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"290","target":"392","id":"7242","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"180","target":"333","id":"5375","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"16","target":"158","id":"1828","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"99","target":"369","id":"3737","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"61","target":"714","id":"2898","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"384","target":"431","id":"8485","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"149","target":"325","id":"4761","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"378","target":"448","id":"8396","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"408","target":"612","id":"8781","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"128","target":"501","id":"4316","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"539","target":"653","id":"10004","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"149","target":"714","id":"4776","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"284","target":"389","id":"7140","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"427","target":"549","id":"8997","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"57","target":"521","id":"2781","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"461","target":"661","id":"9381","attributes":{"Weight":"1.0"},"color":"rgb(196,213,67)","size":1.0},{"source":"419","target":"462","id":"8895","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"261","target":"693","id":"6771","attributes":{"Weight":"1.0"},"color":"rgb(115,229,148)","size":1.0},{"source":"392","target":"559","id":"8602","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"694","target":"696","id":"10656","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"24","target":"158","id":"2002","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"526","target":"652","id":"9907","attributes":{"Weight":"1.0"},"color":"rgb(148,164,148)","size":1.0},{"source":"31","target":"369","id":"2178","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"578","target":"665","id":"10230","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"139","target":"583","id":"4549","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"146","target":"662","id":"4719","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"480","target":"687","id":"9559","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"12","target":"608","id":"1748","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"193","target":"646","id":"5607","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"63","target":"161","id":"2927","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"244","target":"325","id":"6460","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"30","target":"120","id":"2146","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"190","target":"342","id":"5554","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"448","target":"588","id":"9244","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"28","target":"643","id":"2119","attributes":{"Weight":"1.0"},"color":"rgb(148,99,213)","size":1.0},{"source":"315","target":"666","id":"7605","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"524","target":"736","id":"9893","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"102","target":"201","id":"3785","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"60","target":"353","id":"2848","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"122","target":"480","id":"4200","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"298","target":"310","id":"7354","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"39","target":"430","id":"2367","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"334","target":"548","id":"7877","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"428","target":"593","id":"9009","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"112","target":"239","id":"3994","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"250","target":"400","id":"6564","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"252","target":"483","id":"6610","attributes":{"Weight":"1.0"},"color":"rgb(213,180,67)","size":1.0},{"source":"381","target":"432","id":"8431","attributes":{"Weight":"1.0"},"color":"rgb(180,67,229)","size":1.0},{"source":"129","target":"486","id":"4342","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"149","target":"314","id":"4760","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"77","target":"458","id":"3248","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"243","target":"292","id":"6447","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"21","target":"74","id":"1938","attributes":{"Weight":"1.0"},"color":"rgb(148,148,99)","size":1.0},{"source":"364","target":"661","id":"8223","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"177","target":"527","id":"5315","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"199","target":"437","id":"5723","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"229","target":"592","id":"6246","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"301","target":"432","id":"7403","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"166","target":"191","id":"5098","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"84","target":"627","id":"3403","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"255","target":"400","id":"6649","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"284","target":"599","id":"7146","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"663","target":"728","id":"10594","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"167","target":"240","id":"5119","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"392","target":"658","id":"8605","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"70","target":"642","id":"3103","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"33","target":"419","id":"2232","attributes":{"Weight":"1.0"},"color":"rgb(148,180,148)","size":1.0},{"source":"119","target":"136","id":"4131","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"156","target":"513","id":"4917","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"495","target":"598","id":"9665","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"44","target":"577","id":"2481","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"261","target":"422","id":"6758","attributes":{"Weight":"1.0"},"color":"rgb(132,229,148)","size":1.0},{"source":"21","target":"158","id":"1939","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"15","target":"582","id":"1815","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"622","target":"676","id":"10424","attributes":{"Weight":"1.0"},"color":"rgb(213,148,132)","size":1.0},{"source":"383","target":"537","id":"8475","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"142","target":"514","id":"4617","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"632","target":"657","id":"10461","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"143","target":"147","id":"4626","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"265","target":"406","id":"6822","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"195","target":"585","id":"5648","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"274","target":"655","id":"6971","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"284","target":"570","id":"7143","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"386","target":"612","id":"8524","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"651","target":"734","id":"10558","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"113","target":"321","id":"4010","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"270","target":"736","id":"6917","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"253","target":"545","id":"6623","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"246","target":"621","id":"6506","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"95","target":"128","id":"3641","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"513","target":"544","id":"9798","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"118","target":"347","id":"4118","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"389","target":"598","id":"8559","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"107","target":"626","id":"3885","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"504","target":"690","id":"9739","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"373","target":"719","id":"8329","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"171","target":"325","id":"5193","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"429","target":"720","id":"9027","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"28","target":"429","id":"2110","attributes":{"Weight":"1.0"},"color":"rgb(148,99,180)","size":1.0},{"source":"37","target":"217","id":"2313","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"24","target":"174","id":"2003","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"54","target":"225","id":"2698","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"358","target":"642","id":"8168","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"381","target":"440","id":"8432","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"305","target":"429","id":"7467","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"247","target":"284","id":"6516","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"455","target":"721","id":"9320","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"298","target":"477","id":"7361","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"90","target":"549","id":"3551","attributes":{"Weight":"1.0"},"color":"rgb(100,148,148)","size":1.0},{"source":"28","target":"182","id":"2097","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"57","target":"271","id":"2771","attributes":{"Weight":"1.0"},"color":"rgb(196,148,148)","size":1.0},{"source":"67","target":"538","id":"3024","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"197","target":"427","id":"5687","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"245","target":"368","id":"6481","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"245","target":"569","id":"6489","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"494","target":"631","id":"9660","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"391","target":"395","id":"8581","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"425","target":"594","id":"8975","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"293","target":"704","id":"7289","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"120","target":"548","id":"4165","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"68","target":"198","id":"3036","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"27","target":"144","id":"2061","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"1","target":"274","id":"1471","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"621","target":"632","id":"10415","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"69","target":"382","id":"3064","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"341","target":"513","id":"7970","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"508","target":"728","id":"9776","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"408","target":"654","id":"8783","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"441","target":"651","id":"9173","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"438","target":"650","id":"9130","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"382","target":"465","id":"8454","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"318","target":"581","id":"7649","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"4","target":"670","id":"1552","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"204","target":"697","id":"5819","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"428","target":"716","id":"9016","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"577","target":"614","id":"10218","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"319","target":"487","id":"7663","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"179","target":"522","id":"5355","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"369","target":"526","id":"8279","attributes":{"Weight":"1.0"},"color":"rgb(67,115,229)","size":1.0},{"source":"128","target":"712","id":"4323","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"111","target":"150","id":"3960","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"575","target":"612","id":"10205","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"59","target":"141","id":"2817","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"494","target":"525","id":"9655","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"257","target":"398","id":"6680","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"478","target":"481","id":"9538","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"67","target":"633","id":"3025","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"322","target":"632","id":"7700","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"571","target":"644","id":"10174","attributes":{"Weight":"1.0"},"color":"rgb(229,115,132)","size":1.0},{"source":"366","target":"422","id":"8243","attributes":{"Weight":"1.0"},"color":"rgb(132,148,148)","size":1.0},{"source":"426","target":"492","id":"8985","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"107","target":"182","id":"3874","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"392","target":"413","id":"8600","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"642","target":"707","id":"10512","attributes":{"Weight":"1.0"},"color":"rgb(67,229,180)","size":1.0},{"source":"381","target":"565","id":"8441","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"331","target":"443","id":"7833","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"114","target":"161","id":"4025","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"522","target":"677","id":"9871","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"313","target":"620","id":"7578","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"281","target":"729","id":"7092","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"84","target":"579","id":"3401","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"70","target":"287","id":"3091","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"2","target":"309","id":"1499","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"491","target":"647","id":"9625","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"655","target":"722","id":"10572","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"268","target":"392","id":"6868","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"57","target":"508","id":"2780","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"142","target":"535","id":"4618","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"275","target":"317","id":"6976","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"10","target":"96","id":"1683","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"222","target":"353","id":"6121","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"222","target":"595","id":"6128","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"223","target":"239","id":"6131","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"518","target":"656","id":"9837","attributes":{"Weight":"1.0"},"color":"rgb(229,83,83)","size":1.0},{"source":"324","target":"368","id":"7722","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"91","target":"406","id":"3565","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"371","target":"576","id":"8298","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"126","target":"213","id":"4270","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"285","target":"725","id":"7160","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"37","target":"113","id":"2309","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"187","target":"300","id":"5497","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"115","target":"691","id":"4063","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"519","target":"655","id":"9846","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"20","target":"213","id":"1917","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"149","target":"673","id":"4774","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"237","target":"711","id":"6367","attributes":{"Weight":"1.0"},"color":"rgb(213,213,67)","size":1.0},{"source":"314","target":"417","id":"7586","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"368","target":"489","id":"8267","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"55","target":"299","id":"2730","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"21","target":"532","id":"1947","attributes":{"Weight":"1.0"},"color":"rgb(148,148,99)","size":1.0},{"source":"367","target":"427","id":"8254","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"149","target":"613","id":"4772","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"431","target":"443","id":"9041","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"246","target":"516","id":"6504","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"179","target":"685","id":"5367","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"172","target":"612","id":"5222","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"70","target":"225","id":"3089","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"409","target":"521","id":"8797","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"350","target":"507","id":"8080","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"151","target":"289","id":"4812","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"399","target":"560","id":"8689","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"196","target":"565","id":"5671","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"290","target":"689","id":"7256","attributes":{"Weight":"1.0"},"color":"rgb(148,83,196)","size":1.0},{"source":"396","target":"496","id":"8644","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"374","target":"573","id":"8341","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"94","target":"133","id":"3618","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"46","target":"125","id":"2521","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"5","target":"139","id":"1557","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"245","target":"294","id":"6477","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"481","target":"534","id":"9562","attributes":{"Weight":"1.0"},"color":"rgb(197,148,148)","size":1.0},{"source":"473","target":"562","id":"9495","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"28","target":"662","id":"2120","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"162","target":"301","id":"5021","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"440","target":"521","id":"9153","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"197","target":"254","id":"5680","attributes":{"Weight":"1.0"},"color":"rgb(164,67,164)","size":1.0},{"source":"469","target":"535","id":"9447","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"621","target":"639","id":"10417","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"496","target":"630","id":"9673","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"143","target":"469","id":"4639","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"551","target":"718","id":"10068","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"297","target":"322","id":"7339","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"378","target":"506","id":"8399","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"136","target":"617","id":"4496","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"108","target":"525","id":"3900","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"141","target":"447","id":"4594","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"489","target":"720","id":"9611","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"370","target":"672","id":"8289","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"16","target":"22","id":"1822","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"59","target":"711","id":"2832","attributes":{"Weight":"1.0"},"color":"rgb(213,213,67)","size":1.0},{"source":"60","target":"460","id":"2852","attributes":{"Weight":"1.0"},"color":"rgb(148,148,132)","size":1.0},{"source":"281","target":"725","id":"7091","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"282","target":"730","id":"7113","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"689","target":"729","id":"10641","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"206","target":"588","id":"5849","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"44","target":"442","id":"2473","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"56","target":"74","id":"2746","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"129","target":"463","id":"4341","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"228","target":"548","id":"6227","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"223","target":"484","id":"6140","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"535","target":"624","id":"9976","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"210","target":"626","id":"5908","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"165","target":"634","id":"5092","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"382","target":"534","id":"8459","attributes":{"Weight":"1.0"},"color":"rgb(132,83,229)","size":1.0},{"source":"642","target":"726","id":"10513","attributes":{"Weight":"1.0"},"color":"rgb(115,148,229)","size":1.0},{"source":"69","target":"441","id":"3068","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"324","target":"710","id":"7729","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"157","target":"432","id":"4929","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"142","target":"301","id":"4612","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"55","target":"455","id":"2736","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"51","target":"640","id":"2639","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"604","target":"663","id":"10346","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"602","target":"692","id":"10337","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"148","target":"459","id":"4746","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"76","target":"629","id":"3237","attributes":{"Weight":"1.0"},"color":"rgb(229,67,213)","size":1.0},{"source":"269","target":"377","id":"6886","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"40","target":"495","id":"2388","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"611","target":"678","id":"10379","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"154","target":"569","id":"4875","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"486","target":"618","id":"9587","attributes":{"Weight":"1.0"},"color":"rgb(229,180,67)","size":1.0},{"source":"491","target":"650","id":"9626","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"216","target":"571","id":"6017","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"510","target":"581","id":"9784","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"194","target":"691","id":"5632","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"121","target":"352","id":"4181","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"60","target":"305","id":"2844","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"39","target":"607","id":"2372","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"37","target":"83","id":"2306","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"202","target":"618","id":"5783","attributes":{"Weight":"1.0"},"color":"rgb(148,196,148)","size":1.0},{"source":"53","target":"302","id":"2677","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"79","target":"577","id":"3296","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"154","target":"294","id":"4865","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"55","target":"539","id":"2740","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"54","target":"432","id":"2707","attributes":{"Weight":"1.0"},"color":"rgb(99,148,229)","size":1.0},{"source":"411","target":"560","id":"8824","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"406","target":"683","id":"8768","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"399","target":"413","id":"8685","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"171","target":"566","id":"5202","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"176","target":"329","id":"5285","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"337","target":"662","id":"7922","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"145","target":"151","id":"4674","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"32","target":"556","id":"2199","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"7","target":"693","id":"1623","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"536","target":"551","id":"9981","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"38","target":"185","id":"2336","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"220","target":"503","id":"6085","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"621","target":"715","id":"10421","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"281","target":"735","id":"7095","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"191","target":"352","id":"5572","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"70","target":"451","id":"3097","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"391","target":"560","id":"8589","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"264","target":"285","id":"6799","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"616","target":"713","id":"10402","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"248","target":"336","id":"6528","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"22","target":"292","id":"1966","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"283","target":"411","id":"7127","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"190","target":"702","id":"5567","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"472","target":"473","id":"9476","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"127","target":"485","id":"4294","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"189","target":"262","id":"5534","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"232","target":"668","id":"6293","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"112","target":"320","id":"3996","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"36","target":"78","id":"2288","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"93","target":"703","id":"3616","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"126","target":"406","id":"4277","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"86","target":"277","id":"3437","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"278","target":"627","id":"7031","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"164","target":"719","id":"5074","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"135","target":"436","id":"4467","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"54","target":"450","id":"2709","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"48","target":"732","id":"2578","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"280","target":"436","id":"7061","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"339","target":"692","id":"7949","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"538","target":"635","id":"9995","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"145","target":"676","id":"4698","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"650","target":"729","id":"10549","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"633","target":"637","id":"10467","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"347","target":"590","id":"8042","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"133","target":"338","id":"4419","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"258","target":"702","id":"6711","attributes":{"Weight":"1.0"},"color":"rgb(67,229,116)","size":1.0},{"source":"124","target":"189","id":"4229","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"436","target":"567","id":"9111","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"15","target":"418","id":"1808","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"330","target":"411","id":"7820","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"251","target":"557","id":"6592","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"63","target":"553","id":"2936","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"306","target":"495","id":"7478","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"54","target":"221","id":"2697","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"95","target":"119","id":"3640","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"50","target":"489","id":"2621","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"391","target":"731","id":"8592","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"125","target":"622","id":"4265","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"389","target":"584","id":"8558","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"339","target":"661","id":"7946","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"121","target":"531","id":"4187","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"9","target":"324","id":"1671","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"173","target":"722","id":"5249","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"388","target":"501","id":"8547","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"302","target":"312","id":"7417","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"377","target":"393","id":"8380","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"163","target":"563","id":"5051","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"654","target":"668","id":"10566","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"527","target":"654","id":"9915","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"449","target":"675","id":"9254","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"212","target":"419","id":"5938","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"59","target":"249","id":"2819","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"298","target":"468","id":"7358","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"617","target":"680","id":"10403","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"429","target":"489","id":"9018","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"336","target":"617","id":"7908","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"224","target":"233","id":"6142","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"93","target":"619","id":"3614","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"431","target":"676","id":"9048","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"227","target":"342","id":"6200","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"279","target":"529","id":"7045","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"364","target":"453","id":"8217","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"265","target":"683","id":"6829","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"267","target":"510","id":"6856","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"529","target":"547","id":"9935","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"88","target":"366","id":"3495","attributes":{"Weight":"1.0"},"color":"rgb(115,148,148)","size":1.0},{"source":"525","target":"526","id":"9894","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"126","target":"326","id":"4273","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"286","target":"571","id":"7171","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"213","target":"683","id":"5970","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"303","target":"603","id":"7444","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"179","target":"612","id":"5360","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"37","target":"84","id":"2307","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"68","target":"637","id":"3050","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"25","target":"733","id":"2034","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"422","target":"481","id":"8935","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"123","target":"416","id":"4217","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"96","target":"153","id":"3669","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"14","target":"342","id":"1783","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"263","target":"542","id":"6791","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"354","target":"361","id":"8124","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"131","target":"644","id":"4392","attributes":{"Weight":"1.0"},"color":"rgb(229,115,132)","size":1.0},{"source":"125","target":"482","id":"4262","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"638","target":"723","id":"10493","attributes":{"Weight":"1.0"},"color":"rgb(164,148,148)","size":1.0},{"source":"97","target":"605","id":"3701","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"316","target":"349","id":"7607","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"356","target":"557","id":"8145","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"54","target":"212","id":"2695","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"442","target":"648","id":"9192","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"90","target":"156","id":"3537","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"46","target":"237","id":"2523","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"365","target":"681","id":"8239","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"661","target":"723","id":"10592","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"27","target":"616","id":"2081","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"62","target":"213","id":"2906","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"8","target":"408","id":"1641","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"207","target":"239","id":"5857","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"54","target":"555","id":"2713","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"58","target":"141","id":"2795","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"29","target":"458","id":"2131","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"183","target":"697","id":"5436","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"427","target":"551","id":"8998","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"92","target":"492","id":"3587","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"466","target":"730","id":"9427","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"329","target":"343","id":"7794","attributes":{"Weight":"1.0"},"color":"rgb(164,148,148)","size":1.0},{"source":"139","target":"576","id":"4548","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"105","target":"370","id":"3851","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"173","target":"205","id":"5233","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"643","target":"720","id":"10516","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"381","target":"728","id":"8450","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"253","target":"674","id":"6629","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"314","target":"345","id":"7583","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"327","target":"374","id":"7758","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"104","target":"318","id":"3831","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"42","target":"619","id":"2433","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"379","target":"403","id":"8409","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"78","target":"247","id":"3263","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"142","target":"175","id":"4607","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"76","target":"472","id":"3224","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"358","target":"450","id":"8161","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"341","target":"502","id":"7969","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"33","target":"445","id":"2234","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"387","target":"437","id":"8536","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"216","target":"623","id":"6024","attributes":{"Weight":"1.0"},"color":"rgb(148,196,115)","size":1.0},{"source":"226","target":"634","id":"6192","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"96","target":"672","id":"3682","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"90","target":"681","id":"3552","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"77","target":"541","id":"3257","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"154","target":"726","id":"4885","attributes":{"Weight":"1.0"},"color":"rgb(196,67,213)","size":1.0},{"source":"127","target":"322","id":"4291","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"90","target":"134","id":"3536","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"314","target":"534","id":"7589","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"228","target":"353","id":"6222","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"453","target":"602","id":"9285","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"397","target":"629","id":"8658","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"186","target":"353","id":"5486","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"144","target":"434","id":"4661","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"229","target":"581","id":"6245","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"614","target":"678","id":"10396","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"305","target":"499","id":"7469","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"124","target":"362","id":"4242","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"651","target":"724","id":"10554","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"172","target":"384","id":"5214","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"431","target":"699","id":"9049","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"96","target":"369","id":"3677","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"111","target":"529","id":"3977","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"166","target":"531","id":"5109","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"208","target":"680","id":"5883","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"443","target":"717","id":"9207","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"359","target":"373","id":"8170","attributes":{"Weight":"1.0"},"color":"rgb(229,132,132)","size":1.0},{"source":"160","target":"257","id":"4982","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"53","target":"637","id":"2686","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"369","target":"554","id":"8280","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"81","target":"310","id":"3329","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"387","target":"404","id":"8535","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"73","target":"635","id":"3162","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"43","target":"138","id":"2439","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"47","target":"400","id":"2550","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"191","target":"486","id":"5577","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"57","target":"615","id":"2789","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"104","target":"267","id":"3826","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"153","target":"309","id":"4850","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"95","target":"206","id":"3645","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"227","target":"591","id":"6209","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"68","target":"636","id":"3049","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"6","target":"307","id":"1586","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"139","target":"258","id":"4537","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"43","target":"404","id":"2447","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"489","target":"569","id":"9607","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"48","target":"640","id":"2573","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"291","target":"449","id":"7262","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"96","target":"630","id":"3681","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"428","target":"532","id":"9005","attributes":{"Weight":"1.0"},"color":"rgb(148,196,99)","size":1.0},{"source":"135","target":"419","id":"4464","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"87","target":"449","id":"3464","attributes":{"Weight":"1.0"},"color":"rgb(213,148,148)","size":1.0},{"source":"55","target":"469","id":"2737","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"25","target":"120","id":"2019","attributes":{"Weight":"1.0"},"color":"rgb(229,67,99)","size":1.0},{"source":"341","target":"681","id":"7973","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"275","target":"352","id":"6978","attributes":{"Weight":"1.0"},"color":"rgb(148,213,67)","size":1.0},{"source":"10","target":"99","id":"1684","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"371","target":"528","id":"8294","attributes":{"Weight":"1.0"},"color":"rgb(229,115,132)","size":1.0},{"source":"239","target":"344","id":"6389","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"85","target":"135","id":"3407","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"338","target":"673","id":"7935","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"192","target":"284","id":"5584","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"525","target":"655","id":"9901","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"8","target":"685","id":"1657","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"116","target":"616","id":"4089","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"39","target":"461","id":"2368","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"166","target":"685","id":"5113","attributes":{"Weight":"1.0"},"color":"rgb(148,213,99)","size":1.0},{"source":"288","target":"508","id":"7204","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"133","target":"171","id":"4415","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"295","target":"564","id":"7320","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"9","target":"228","id":"1667","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"430","target":"668","id":"9037","attributes":{"Weight":"1.0"},"color":"rgb(148,213,99)","size":1.0},{"source":"250","target":"482","id":"6569","attributes":{"Weight":"1.0"},"color":"rgb(213,148,83)","size":1.0},{"source":"77","target":"680","id":"3259","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"76","target":"562","id":"3231","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"252","target":"452","id":"6605","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"289","target":"431","id":"7223","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"356","target":"556","id":"8144","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"18","target":"138","id":"1868","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"178","target":"372","id":"5333","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"272","target":"404","id":"6938","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"391","target":"561","id":"8590","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"473","target":"521","id":"9491","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"301","target":"514","id":"7407","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"28","target":"489","id":"2112","attributes":{"Weight":"1.0"},"color":"rgb(148,99,180)","size":1.0},{"source":"52","target":"56","id":"2646","attributes":{"Weight":"1.0"},"color":"rgb(83,148,180)","size":1.0},{"source":"243","target":"695","id":"6454","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"599","target":"666","id":"10321","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"410","target":"696","id":"8819","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"135","target":"368","id":"4462","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"45","target":"565","id":"2513","attributes":{"Weight":"1.0"},"color":"rgb(213,148,148)","size":1.0},{"source":"206","target":"712","id":"5851","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"15","target":"494","id":"1811","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"179","target":"386","id":"5352","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"74","target":"704","id":"3191","attributes":{"Weight":"1.0"},"color":"rgb(148,148,99)","size":1.0},{"source":"54","target":"419","id":"2705","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"428","target":"601","id":"9010","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"121","target":"607","id":"4188","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"241","target":"364","id":"6416","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"5","target":"668","id":"1578","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"231","target":"258","id":"6260","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"286","target":"528","id":"7170","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"292","target":"704","id":"7279","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"169","target":"546","id":"5164","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"49","target":"581","id":"2599","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"176","target":"609","id":"5297","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"271","target":"690","id":"6929","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"211","target":"358","id":"5918","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"314","target":"325","id":"7581","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"317","target":"564","id":"7634","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"103","target":"229","id":"3806","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"423","target":"557","id":"8944","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"418","target":"519","id":"8882","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"35","target":"598","id":"2282","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"271","target":"610","id":"6925","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"221","target":"287","id":"6096","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"440","target":"508","id":"9152","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"74","target":"679","id":"3189","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"158","target":"174","id":"4945","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"45","target":"675","id":"2516","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"45","target":"622","id":"2514","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"76","target":"523","id":"3229","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"375","target":"406","id":"8350","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"68","target":"574","id":"3046","attributes":{"Weight":"1.0"},"color":"rgb(99,229,83)","size":1.0},{"source":"519","target":"585","id":"9843","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"562","target":"594","id":"10119","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"79","target":"316","id":"3282","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"76","target":"409","id":"3219","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"364","target":"692","id":"8227","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"444","target":"669","id":"9217","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"36","target":"380","id":"2296","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"64","target":"101","id":"2946","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"201","target":"324","id":"5754","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"121","target":"276","id":"4180","attributes":{"Weight":"1.0"},"color":"rgb(148,213,67)","size":1.0},{"source":"527","target":"707","id":"9920","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"182","target":"705","id":"5413","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"283","target":"394","id":"7123","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"28","target":"488","id":"2111","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"447","target":"675","id":"9237","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"24","target":"695","id":"2012","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"281","target":"491","id":"7083","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"511","target":"528","id":"9786","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"550","target":"617","id":"10062","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"562","target":"728","id":"10125","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"73","target":"637","id":"3164","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"274","target":"605","id":"6969","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"508","target":"565","id":"9771","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"79","target":"145","id":"3280","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"223","target":"362","id":"6137","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"311","target":"685","id":"7554","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"50","target":"227","id":"2609","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"556","target":"674","id":"10092","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"23","target":"48","id":"1980","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"446","target":"564","id":"9228","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"189","target":"354","id":"5538","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"391","target":"393","id":"8579","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"493","target":"655","id":"9652","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"174","target":"708","id":"5260","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"246","target":"726","id":"6514","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"337","target":"387","id":"7912","attributes":{"Weight":"1.0"},"color":"rgb(67,180,213)","size":1.0},{"source":"297","target":"553","id":"7343","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"571","target":"589","id":"10168","attributes":{"Weight":"1.0"},"color":"rgb(229,115,148)","size":1.0},{"source":"63","target":"638","id":"2939","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"304","target":"457","id":"7455","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"177","target":"677","id":"5323","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"286","target":"511","id":"7169","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"94","target":"338","id":"3624","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"357","target":"592","id":"8158","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"256","target":"581","id":"6676","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"633","target":"697","id":"10470","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"92","target":"328","id":"3578","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"4","target":"340","id":"1541","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"22","target":"708","id":"1975","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"612","target":"625","id":"10382","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"208","target":"307","id":"5869","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"42","target":"601","id":"2431","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"26","target":"45","id":"2035","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"453","target":"721","id":"9292","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"439","target":"733","id":"9149","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"432","target":"539","id":"9058","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"58","target":"277","id":"2799","attributes":{"Weight":"1.0"},"color":"rgb(213,196,67)","size":1.0},{"source":"175","target":"301","id":"5267","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"493","target":"582","id":"9647","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"336","target":"378","id":"7899","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"99","target":"234","id":"3732","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"46","target":"416","id":"2528","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"33","target":"112","id":"2211","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"633","target":"736","id":"10471","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"120","target":"305","id":"4157","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"47","target":"558","id":"2558","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"355","target":"546","id":"8134","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"146","target":"579","id":"4716","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"21","target":"568","id":"1949","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"304","target":"667","id":"7460","attributes":{"Weight":"1.0"},"color":"rgb(67,148,180)","size":1.0},{"source":"637","target":"688","id":"10485","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"395","target":"560","id":"8639","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"115","target":"505","id":"4057","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"8","target":"150","id":"1632","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"13","target":"284","id":"1761","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"193","target":"382","id":"5600","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"196","target":"526","id":"5668","attributes":{"Weight":"1.0"},"color":"rgb(148,115,229)","size":1.0},{"source":"503","target":"590","id":"9728","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"202","target":"319","id":"5771","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"23","target":"243","id":"1984","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"56","target":"311","id":"2751","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"33","target":"135","id":"2214","attributes":{"Weight":"1.0"},"color":"rgb(229,99,132)","size":1.0},{"source":"25","target":"708","id":"2032","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"178","target":"456","id":"5336","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"34","target":"355","id":"2255","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"567","target":"699","id":"10146","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"165","target":"285","id":"5083","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"45","target":"141","id":"2497","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"516","target":"688","id":"9820","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"532","target":"679","id":"9956","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"101","target":"354","id":"3775","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"357","target":"546","id":"8155","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"336","target":"588","id":"7907","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"323","target":"331","id":"7707","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"192","target":"584","id":"5592","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"319","target":"451","id":"7661","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"270","target":"497","id":"6906","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"59","target":"482","id":"2829","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"126","target":"156","id":"4269","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"143","target":"175","id":"4628","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"370","target":"457","id":"8286","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"219","target":"370","id":"6072","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"200","target":"587","id":"5742","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"343","target":"448","id":"7996","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"341","target":"683","id":"7974","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"172","target":"667","id":"5226","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"25","target":"568","id":"2027","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"435","target":"525","id":"9098","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"632","target":"715","id":"10463","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"155","target":"720","id":"4906","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"213","target":"341","id":"5959","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"260","target":"661","id":"6745","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"619","target":"716","id":"10412","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"151","target":"699","id":"4827","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"57","target":"473","id":"2779","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"231","target":"713","id":"6277","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"689","target":"735","id":"10644","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"352","target":"369","id":"8104","attributes":{"Weight":"1.0"},"color":"rgb(148,132,148)","size":1.0},{"source":"376","target":"431","id":"8365","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"102","target":"499","id":"3798","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"111","target":"373","id":"3972","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"80","target":"583","id":"3320","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"441","target":"730","id":"9178","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"37","target":"146","id":"2310","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"125","target":"449","id":"4257","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"206","target":"506","id":"5846","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"280","target":"631","id":"7071","attributes":{"Weight":"1.0"},"color":"rgb(148,115,213)","size":1.0},{"source":"682","target":"714","id":"10631","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"63","target":"114","id":"2923","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"49","target":"229","id":"2584","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"33","target":"354","id":"2228","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"42","target":"86","id":"2412","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"113","target":"217","id":"4008","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"474","target":"621","id":"9504","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"240","target":"491","id":"6405","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"291","target":"447","id":"7261","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"170","target":"402","id":"5178","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"258","target":"415","id":"6700","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"31","target":"672","id":"2183","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"71","target":"84","id":"3106","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"125","target":"252","id":"4251","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"293","target":"540","id":"7284","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"540","target":"640","id":"10008","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"121","target":"711","id":"4190","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"243","target":"540","id":"6450","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"228","target":"429","id":"6224","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"140","target":"145","id":"4556","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"294","target":"443","id":"7300","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"66","target":"284","id":"2999","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"150","target":"719","id":"4802","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"406","target":"681","id":"8767","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"317","target":"510","id":"7632","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"281","target":"724","id":"7090","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"421","target":"682","id":"8929","attributes":{"Weight":"1.0"},"color":"rgb(213,67,229)","size":1.0},{"source":"158","target":"292","id":"4947","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"259","target":"649","id":"6725","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"653","target":"669","id":"10563","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"535","target":"539","id":"9974","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"432","target":"644","id":"9064","attributes":{"Weight":"1.0"},"color":"rgb(180,67,213)","size":1.0},{"source":"692","target":"721","id":"10652","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"522","target":"625","id":"9868","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"375","target":"544","id":"8358","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"306","target":"584","id":"7480","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"528","target":"601","id":"9926","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"627","target":"662","id":"10443","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"173","target":"435","id":"5238","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"139","target":"440","id":"4546","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"559","target":"561","id":"10107","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"330","target":"394","id":"7816","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"207","target":"223","id":"5855","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"511","target":"571","id":"9788","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"558","target":"694","id":"10104","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"216","target":"432","id":"6013","attributes":{"Weight":"1.0"},"color":"rgb(180,115,148)","size":1.0},{"source":"15","target":"435","id":"1809","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"50","target":"294","id":"2611","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"224","target":"555","id":"6158","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"78","target":"192","id":"3262","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"5","target":"144","id":"1558","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"126","target":"681","id":"4283","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"270","target":"697","id":"6916","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"87","target":"565","id":"3473","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"256","target":"295","id":"6666","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"166","target":"352","id":"5101","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"201","target":"368","id":"5757","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"594","target":"604","id":"10302","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"148","target":"470","id":"4748","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"145","target":"323","id":"4681","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"256","target":"318","id":"6668","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"410","target":"694","id":"8818","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"216","target":"294","id":"6008","attributes":{"Weight":"1.0"},"color":"rgb(229,115,132)","size":1.0},{"source":"163","target":"360","id":"5044","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"332","target":"511","id":"7844","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"625","target":"685","id":"10438","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"311","target":"522","id":"7543","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"132","target":"230","id":"4402","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"151","target":"529","id":"4821","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"173","target":"519","id":"5241","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"554","target":"672","id":"10080","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"5","target":"713","id":"1579","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"16","target":"568","id":"1835","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"265","target":"530","id":"6826","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"613","target":"682","id":"10392","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"28","target":"569","id":"2115","attributes":{"Weight":"1.0"},"color":"rgb(148,99,213)","size":1.0},{"source":"2","target":"366","id":"1501","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"62","target":"502","id":"2915","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"19","target":"55","id":"1889","attributes":{"Weight":"1.0"},"color":"rgb(164,148,148)","size":1.0},{"source":"189","target":"239","id":"5533","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"164","target":"245","id":"5058","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"316","target":"577","id":"7617","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"225","target":"319","id":"6169","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"112","target":"354","id":"3998","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"614","target":"623","id":"10394","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"448","target":"727","id":"9247","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"126","target":"544","id":"4282","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"59","target":"481","id":"2828","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"162","target":"299","id":"5020","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"90","target":"406","id":"3545","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"398","target":"715","id":"8680","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"621","target":"706","id":"10420","attributes":{"Weight":"1.0"},"color":"rgb(115,148,164)","size":1.0},{"source":"337","target":"705","id":"7923","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"188","target":"703","id":"5526","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"277","target":"652","id":"7020","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"19","target":"141","id":"1894","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"338","target":"606","id":"7932","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"132","target":"362","id":"4409","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"587","target":"702","id":"10274","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"110","target":"547","id":"3947","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"97","target":"525","id":"3697","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"554","target":"630","id":"10079","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"432","target":"669","id":"9066","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"393","target":"559","id":"8615","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"82","target":"396","id":"3352","attributes":{"Weight":"1.0"},"color":"rgb(132,148,196)","size":1.0},{"source":"46","target":"59","id":"2518","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"43","target":"346","id":"2444","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"529","target":"643","id":"9939","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"385","target":"517","id":"8506","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"21","target":"292","id":"1943","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"568","target":"708","id":"10152","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"442","target":"721","id":"9195","attributes":{"Weight":"1.0"},"color":"rgb(115,229,115)","size":1.0},{"source":"1","target":"526","id":"1479","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"19","target":"478","id":"1905","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"345","target":"715","id":"8025","attributes":{"Weight":"1.0"},"color":"rgb(180,67,229)","size":1.0},{"source":"287","target":"608","id":"7191","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"293","target":"732","id":"7291","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"21","target":"640","id":"1950","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"492","target":"615","id":"9640","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"398","target":"621","id":"8671","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"27","target":"498","id":"2074","attributes":{"Weight":"1.0"},"color":"rgb(67,229,148)","size":1.0},{"source":"455","target":"669","id":"9316","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"342","target":"383","id":"7977","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"600","target":"642","id":"10324","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"504","target":"665","id":"9738","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"332","target":"601","id":"7849","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"58","target":"622","id":"2812","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"141","target":"675","id":"4602","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"134","target":"326","id":"4438","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"32","target":"558","id":"2201","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"290","target":"561","id":"7254","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"94","target":"566","id":"3632","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"93","target":"428","id":"3605","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"465","target":"735","id":"9417","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"528","target":"576","id":"9923","attributes":{"Weight":"1.0"},"color":"rgb(148,196,99)","size":1.0},{"source":"89","target":"485","id":"3523","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"10","target":"672","id":"1702","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"148","target":"208","id":"4740","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"237","target":"675","id":"6366","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"406","target":"530","id":"8765","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"71","target":"420","id":"3120","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"222","target":"235","id":"6116","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"282","target":"491","id":"7103","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"19","target":"26","id":"1886","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"140","target":"721","id":"4585","attributes":{"Weight":"1.0"},"color":"rgb(115,229,99)","size":1.0},{"source":"147","target":"698","id":"4739","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"61","target":"375","id":"2880","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"170","target":"401","id":"5177","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"74","target":"667","id":"3187","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"58","target":"237","id":"2796","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"143","target":"309","id":"4634","attributes":{"Weight":"1.0"},"color":"rgb(99,67,229)","size":1.0},{"source":"391","target":"411","id":"8584","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"14","target":"706","id":"1799","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"274","target":"418","id":"6960","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"173","target":"274","id":"5235","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"130","target":"503","id":"4363","attributes":{"Weight":"1.0"},"color":"rgb(67,148,213)","size":1.0},{"source":"26","target":"558","id":"2054","attributes":{"Weight":"1.0"},"color":"rgb(213,148,83)","size":1.0},{"source":"310","target":"459","id":"7527","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"614","target":"648","id":"10395","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"59","target":"452","id":"2826","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"142","target":"299","id":"4610","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"308","target":"713","id":"7513","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"13","target":"273","id":"1760","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"162","target":"504","id":"5027","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"308","target":"616","id":"7509","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"71","target":"533","id":"3122","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"8","target":"116","id":"1629","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"314","target":"566","id":"7590","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"170","target":"254","id":"5173","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"212","target":"221","id":"5932","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"665","target":"692","id":"10598","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"76","target":"303","id":"3217","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"37","target":"71","id":"2305","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"580","target":"618","id":"10243","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"118","target":"709","id":"4129","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"292","target":"732","id":"7281","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"251","target":"660","id":"6595","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"390","target":"561","id":"8575","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"611","target":"623","id":"10376","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"79","target":"611","id":"3297","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"156","target":"530","id":"4918","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"167","target":"430","id":"5122","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"4","target":"503","id":"1547","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"390","target":"394","id":"8565","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"308","target":"603","id":"7508","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"46","target":"482","id":"2536","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"529","target":"586","id":"9938","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"255","target":"558","id":"6657","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"66","target":"273","id":"2998","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"6","target":"458","id":"1589","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"83","target":"210","id":"3374","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"650","target":"735","id":"10552","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"109","target":"136","id":"3910","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"542","target":"624","id":"10018","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"445","target":"484","id":"9220","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"12","target":"645","id":"1750","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"492","target":"551","id":"9638","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"216","target":"619","id":"6023","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"646","target":"724","id":"10524","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"178","target":"700","id":"5344","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"596","target":"721","id":"10313","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"75","target":"342","id":"3199","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"160","target":"657","id":"4995","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"303","target":"335","id":"7432","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"302","target":"635","id":"7423","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"249","target":"483","id":"6554","attributes":{"Weight":"1.0"},"color":"rgb(213,180,67)","size":1.0},{"source":"57","target":"594","id":"2787","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"122","target":"577","id":"4204","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"151","target":"443","id":"4819","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"646","target":"735","id":"10529","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"382","target":"725","id":"8467","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"241","target":"693","id":"6429","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"432","target":"542","id":"9059","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"75","target":"379","id":"3201","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"321","target":"420","id":"7687","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"133","target":"417","id":"4423","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"218","target":"693","id":"6065","attributes":{"Weight":"1.0"},"color":"rgb(115,196,148)","size":1.0},{"source":"1","target":"97","id":"1465","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"546","target":"581","id":"10044","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"201","target":"552","id":"5762","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"97","target":"195","id":"3686","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"56","target":"677","id":"2763","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"138","target":"193","id":"4515","attributes":{"Weight":"1.0"},"color":"rgb(67,164,213)","size":1.0},{"source":"295","target":"510","id":"7318","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"428","target":"540","id":"9006","attributes":{"Weight":"1.0"},"color":"rgb(229,115,67)","size":1.0},{"source":"316","target":"397","id":"7611","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"485","target":"639","id":"9579","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"569","target":"719","id":"10161","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"330","target":"561","id":"7826","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"490","target":"676","id":"9618","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"584","target":"599","id":"10261","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"277","target":"571","id":"7013","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"443","target":"490","id":"9196","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"128","target":"513","id":"4318","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"137","target":"380","id":"4506","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"166","target":"167","id":"5095","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"172","target":"522","id":"5218","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"177","target":"311","id":"5307","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"404","target":"661","id":"8749","attributes":{"Weight":"1.0"},"color":"rgb(115,229,132)","size":1.0},{"source":"328","target":"700","id":"7792","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"14","target":"243","id":"1780","attributes":{"Weight":"1.0"},"color":"rgb(148,148,83)","size":1.0},{"source":"693","target":"723","id":"10655","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"404","target":"664","id":"8750","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"399","target":"411","id":"8683","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"169","target":"667","id":"5169","attributes":{"Weight":"1.0"},"color":"rgb(67,229,99)","size":1.0},{"source":"306","target":"666","id":"7483","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"240","target":"521","id":"6406","attributes":{"Weight":"1.0"},"color":"rgb(229,132,148)","size":1.0},{"source":"446","target":"510","id":"9226","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"470","target":"477","id":"9459","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"92","target":"426","id":"3583","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"231","target":"586","id":"6272","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"432","target":"589","id":"9061","attributes":{"Weight":"1.0"},"color":"rgb(180,67,229)","size":1.0},{"source":"116","target":"150","id":"4068","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"41","target":"66","id":"2394","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"656","target":"696","id":"10576","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"318","target":"510","id":"7643","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"642","target":"645","id":"10511","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"142","target":"432","id":"4613","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"374","target":"633","id":"8346","attributes":{"Weight":"1.0"},"color":"rgb(99,229,115)","size":1.0},{"source":"50","target":"135","id":"2604","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"102","target":"489","id":"3797","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"243","target":"704","id":"6455","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"623","target":"648","id":"10427","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"440","target":"594","id":"9160","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"102","target":"710","id":"3803","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"629","target":"643","id":"10449","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"180","target":"580","id":"5380","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"64","target":"125","id":"2949","attributes":{"Weight":"1.0"},"color":"rgb(213,180,67)","size":1.0},{"source":"200","target":"537","id":"5739","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"328","target":"367","id":"7780","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"175","target":"698","id":"5281","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"131","target":"333","id":"4377","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"172","target":"621","id":"5223","attributes":{"Weight":"1.0"},"color":"rgb(115,148,180)","size":1.0},{"source":"306","target":"599","id":"7482","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"264","target":"282","id":"6798","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"255","target":"410","id":"6652","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"571","target":"601","id":"10170","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"432","target":"444","id":"9053","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"366","target":"630","id":"8248","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"558","target":"674","id":"10103","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"428","target":"703","id":"9014","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"460","target":"612","id":"9364","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"72","target":"259","id":"3134","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"154","target":"707","id":"4882","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"224","target":"279","id":"6143","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"35","target":"36","id":"2264","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"169","target":"357","id":"5158","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"144","target":"562","id":"4664","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"35","target":"192","id":"2270","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"213","target":"681","id":"5969","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"199","target":"272","id":"5716","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"729","target":"734","id":"10686","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"409","target":"562","id":"8800","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"455","target":"577","id":"9313","attributes":{"Weight":"1.0"},"color":"rgb(99,148,196)","size":1.0},{"source":"376","target":"502","id":"8369","attributes":{"Weight":"1.0"},"color":"rgb(164,148,132)","size":1.0},{"source":"194","target":"259","id":"5619","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"540","target":"568","id":"10007","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"185","target":"531","id":"5470","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"311","target":"667","id":"7551","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"340","target":"437","id":"7957","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"284","target":"467","id":"7141","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"234","target":"672","id":"6326","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"120","target":"368","id":"4161","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"289","target":"436","id":"7224","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"232","target":"415","id":"6286","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"154","target":"155","id":"4859","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"13","target":"389","id":"1765","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"494","target":"526","id":"9656","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"141","target":"452","id":"4596","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"108","target":"195","id":"3890","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"443","target":"529","id":"9197","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"45","target":"661","id":"2515","attributes":{"Weight":"1.0"},"color":"rgb(180,229,67)","size":1.0},{"source":"195","target":"435","id":"5640","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"240","target":"461","id":"6402","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"45","target":"422","id":"2504","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"173","target":"494","id":"5240","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"457","target":"701","id":"9333","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"247","target":"598","id":"6525","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"547","target":"717","id":"10051","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"371","target":"569","id":"8296","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"328","target":"329","id":"7778","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"80","target":"603","id":"3321","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"172","target":"532","id":"5220","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"200","target":"649","id":"5745","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"555","target":"645","id":"10085","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"26","target":"675","id":"2056","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"53","target":"524","id":"2681","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"71","target":"705","id":"3127","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"3","target":"486","id":"1527","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"434","target":"713","id":"9094","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"639","target":"657","id":"10495","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"203","target":"454","id":"5791","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"95","target":"248","id":"3647","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"3","target":"39","id":"1511","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"49","target":"510","id":"2596","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"92","target":"615","id":"3592","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"419","target":"451","id":"8894","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"128","target":"388","id":"4314","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"187","target":"539","id":"5505","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"8","target":"667","id":"1654","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"92","target":"197","id":"3577","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"87","target":"473","id":"3466","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"189","target":"483","id":"5542","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"152","target":"617","id":"4843","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"154","target":"316","id":"4867","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"252","target":"481","id":"6608","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"507","target":"613","id":"9761","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"45","target":"46","id":"2491","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"120","target":"222","id":"4152","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"150","target":"644","id":"4799","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"312","target":"635","id":"7561","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"15","target":"631","id":"1818","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"275","target":"355","id":"6979","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"427","target":"718","id":"9002","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"38","target":"634","id":"2352","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"139","target":"575","id":"4547","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"375","target":"442","id":"8351","attributes":{"Weight":"1.0"},"color":"rgb(83,229,115)","size":1.0},{"source":"570","target":"599","id":"10165","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"327","target":"480","id":"7766","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"388","target":"563","id":"8550","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"240","target":"607","id":"6409","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"373","target":"397","id":"8320","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"351","target":"426","id":"8091","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"171","target":"200","id":"5190","attributes":{"Weight":"1.0"},"color":"rgb(132,148,164)","size":1.0},{"source":"348","target":"575","id":"8052","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"50","target":"591","id":"2625","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"276","target":"295","id":"6992","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"214","target":"230","id":"5972","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"630","target":"701","id":"10455","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"204","target":"524","id":"5811","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"246","target":"257","id":"6497","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"505","target":"649","id":"9748","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"17","target":"267","id":"1850","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"2","target":"639","id":"1507","attributes":{"Weight":"1.0"},"color":"rgb(115,67,229)","size":1.0},{"source":"555","target":"600","id":"10082","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"116","target":"231","id":"4069","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"498","target":"678","id":"9698","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"108","target":"418","id":"3895","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"221","target":"487","id":"6106","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"218","target":"366","id":"6049","attributes":{"Weight":"1.0"},"color":"rgb(67,115,229)","size":1.0},{"source":"398","target":"657","id":"8676","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"523","target":"594","id":"9879","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"275","target":"564","id":"6987","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"318","target":"646","id":"7652","attributes":{"Weight":"1.0"},"color":"rgb(67,164,148)","size":1.0},{"source":"462","target":"600","id":"9385","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"18","target":"387","id":"1876","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"38","target":"226","id":"2338","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"180","target":"593","id":"5381","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"555","target":"608","id":"10083","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"127","target":"657","id":"4300","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"196","target":"562","id":"5670","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"505","target":"537","id":"9744","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"415","target":"576","id":"8848","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"486","target":"607","id":"9586","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"91","target":"613","id":"3571","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"42","target":"703","id":"2435","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"264","target":"438","id":"6801","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"87","target":"212","id":"3457","attributes":{"Weight":"1.0"},"color":"rgb(148,148,229)","size":1.0},{"source":"279","target":"323","id":"7036","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"268","target":"283","id":"6862","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"218","target":"274","id":"6046","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"117","target":"126","id":"4093","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"231","target":"576","id":"6270","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"409","target":"565","id":"8801","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"101","target":"262","id":"3772","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"278","target":"488","id":"7027","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"725","target":"730","id":"10682","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"233","target":"567","id":"6307","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"269","target":"399","id":"6893","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"436","target":"547","id":"9110","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"157","target":"603","id":"4940","attributes":{"Weight":"1.0"},"color":"rgb(99,148,180)","size":1.0},{"source":"518","target":"686","id":"9839","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"158","target":"704","id":"4955","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"160","target":"614","id":"4990","attributes":{"Weight":"1.0"},"color":"rgb(115,148,196)","size":1.0},{"source":"52","target":"178","id":"2650","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"436","target":"529","id":"9109","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"429","target":"548","id":"9021","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"433","target":"623","id":"9080","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"51","target":"540","id":"2637","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"21","target":"243","id":"1941","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"43","target":"340","id":"2443","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"543","target":"562","id":"10022","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"69","target":"387","id":"3065","attributes":{"Weight":"1.0"},"color":"rgb(67,164,213)","size":1.0},{"source":"4","target":"404","id":"1545","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"198","target":"688","id":"5712","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"430","target":"711","id":"9039","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"72","target":"574","id":"3143","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"280","target":"608","id":"7070","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"251","target":"253","id":"6580","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"37","target":"579","id":"2322","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"272","target":"503","id":"6940","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"258","target":"583","id":"6706","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"277","target":"618","id":"7017","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"98","target":"492","id":"3717","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"124","target":"223","id":"4233","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"258","target":"440","id":"6703","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"266","target":"690","id":"6841","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"108","target":"519","id":"3899","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"202","target":"261","id":"5769","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"85","target":"431","id":"3420","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"347","target":"709","id":"8046","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"497","target":"516","id":"9678","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"423","target":"656","id":"8946","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"183","target":"302","id":"5419","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"86","target":"580","id":"3446","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"426","target":"456","id":"8983","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"221","target":"591","id":"6109","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"679","target":"685","id":"10627","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"363","target":"537","id":"8208","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"295","target":"509","id":"7317","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"596","target":"692","id":"10311","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"71","target":"662","id":"3126","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"368","target":"710","id":"8275","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"527","target":"685","id":"9919","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"228","target":"710","id":"6230","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"115","target":"702","id":"4064","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"99","target":"309","id":"3735","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"459","target":"680","id":"9355","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"175","target":"653","id":"5279","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"366","target":"457","id":"8244","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"359","target":"397","id":"8171","attributes":{"Weight":"1.0"},"color":"rgb(229,132,132)","size":1.0},{"source":"102","target":"697","id":"3802","attributes":{"Weight":"1.0"},"color":"rgb(180,148,99)","size":1.0},{"source":"234","target":"287","id":"6313","attributes":{"Weight":"1.0"},"color":"rgb(67,148,229)","size":1.0},{"source":"130","target":"370","id":"4358","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"480","target":"497","id":"9549","attributes":{"Weight":"1.0"},"color":"rgb(99,229,115)","size":1.0},{"source":"288","target":"473","id":"7203","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"352","target":"526","id":"8109","attributes":{"Weight":"1.0"},"color":"rgb(148,180,148)","size":1.0},{"source":"145","target":"375","id":"4684","attributes":{"Weight":"1.0"},"color":"rgb(164,148,132)","size":1.0},{"source":"424","target":"636","id":"8960","attributes":{"Weight":"1.0"},"color":"rgb(99,229,148)","size":1.0},{"source":"133","target":"606","id":"4428","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"49","target":"295","id":"2589","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"318","target":"606","id":"7651","attributes":{"Weight":"1.0"},"color":"rgb(132,148,148)","size":1.0},{"source":"160","target":"632","id":"4992","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"175","target":"455","id":"5271","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"265","target":"502","id":"6824","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"64","target":"512","id":"2972","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"101","target":"209","id":"3767","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"275","target":"318","id":"6977","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"340","target":"404","id":"7956","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"160","target":"726","id":"4998","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"578","target":"601","id":"10225","attributes":{"Weight":"1.0"},"color":"rgb(196,196,67)","size":1.0},{"source":"23","target":"293","id":"1986","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"71","target":"488","id":"3121","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"287","target":"469","id":"7187","attributes":{"Weight":"1.0"},"color":"rgb(99,148,229)","size":1.0},{"source":"601","target":"716","id":"10332","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"119","target":"128","id":"4130","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"126","target":"476","id":"4278","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"364","target":"504","id":"8218","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"142","target":"455","id":"4615","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"516","target":"736","id":"9823","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"425","target":"562","id":"8972","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"424","target":"645","id":"8962","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"543","target":"663","id":"10029","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"578","target":"602","id":"10226","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"656","target":"674","id":"10574","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"411","target":"561","id":"8825","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"243","target":"641","id":"6453","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"458","target":"686","id":"9345","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"257","target":"723","id":"6693","attributes":{"Weight":"1.0"},"color":"rgb(164,148,148)","size":1.0},{"source":"474","target":"553","id":"9503","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"62","target":"341","id":"2910","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"171","target":"345","id":"5195","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"464","target":"549","id":"9398","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"202","target":"645","id":"5785","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"498","target":"614","id":"9694","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"297","target":"663","id":"7349","attributes":{"Weight":"1.0"},"color":"rgb(196,67,229)","size":1.0},{"source":"255","target":"674","id":"6660","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"507","target":"715","id":"9766","attributes":{"Weight":"1.0"},"color":"rgb(180,67,229)","size":1.0},{"source":"327","target":"573","id":"7769","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"128","target":"206","id":"4308","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"203","target":"614","id":"5800","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"351","target":"549","id":"8097","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"319","target":"642","id":"7670","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"282","target":"466","id":"7102","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"280","target":"699","id":"7073","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"145","target":"224","id":"4675","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"240","target":"531","id":"6407","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"169","target":"446","id":"5160","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"124","target":"271","id":"4237","attributes":{"Weight":"1.0"},"color":"rgb(196,180,67)","size":1.0},{"source":"64","target":"661","id":"2974","attributes":{"Weight":"1.0"},"color":"rgb(196,180,67)","size":1.0},{"source":"8","target":"371","id":"1638","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"159","target":"322","id":"4966","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"100","target":"369","id":"3755","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"444","target":"535","id":"9212","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"118","target":"138","id":"4112","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"675","target":"676","id":"10617","attributes":{"Weight":"1.0"},"color":"rgb(213,148,132)","size":1.0},{"source":"352","target":"531","id":"8110","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"276","target":"564","id":"7001","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"307","target":"468","id":"7488","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"119","target":"336","id":"4136","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"192","target":"247","id":"5582","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"230","target":"483","id":"6255","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"230","target":"512","id":"6257","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"280","target":"734","id":"7075","attributes":{"Weight":"1.0"},"color":"rgb(148,83,213)","size":1.0},{"source":"474","target":"632","id":"9505","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"553","target":"671","id":"10076","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"386","target":"460","id":"8519","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"606","target":"682","id":"10356","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"574","target":"718","id":"10201","attributes":{"Weight":"1.0"},"color":"rgb(83,148,164)","size":1.0},{"source":"108","target":"655","id":"3906","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"223","target":"344","id":"6134","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"125","target":"141","id":"4248","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"405","target":"411","id":"8753","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"339","target":"610","id":"7945","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"389","target":"599","id":"8560","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"661","target":"721","id":"10591","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"77","target":"620","id":"3258","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"141","target":"237","id":"4586","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"175","target":"535","id":"5275","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"443","target":"586","id":"9201","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"30","target":"552","id":"2162","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"135","target":"429","id":"4465","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"496","target":"659","id":"9674","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"130","target":"382","id":"4359","attributes":{"Weight":"1.0"},"color":"rgb(67,83,229)","size":1.0},{"source":"7","target":"504","id":"1614","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"500","target":"537","id":"9706","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"327","target":"687","id":"7776","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"307","target":"541","id":"7495","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"327","target":"375","id":"7759","attributes":{"Weight":"1.0"},"color":"rgb(83,229,115)","size":1.0},{"source":"211","target":"486","id":"5924","attributes":{"Weight":"1.0"},"color":"rgb(148,213,148)","size":1.0},{"source":"523","target":"543","id":"9875","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"76","target":"440","id":"3223","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"342","target":"574","id":"7983","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"237","target":"252","id":"6355","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"249","target":"622","id":"6556","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"478","target":"675","id":"9542","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"119","target":"248","id":"4135","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"111","target":"591","id":"3980","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"249","target":"461","id":"6550","attributes":{"Weight":"1.0"},"color":"rgb(213,213,67)","size":1.0},{"source":"310","target":"458","id":"7526","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"194","target":"403","id":"5624","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"136","target":"448","id":"4490","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"215","target":"260","id":"5986","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"401","target":"656","id":"8714","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"98","target":"551","id":"3720","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"604","target":"621","id":"10345","attributes":{"Weight":"1.0"},"color":"rgb(196,67,229)","size":1.0},{"source":"37","target":"337","id":"2316","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"180","target":"528","id":"5378","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"361","target":"483","id":"8195","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"110","target":"349","id":"3943","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"162","target":"339","id":"5022","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"231","target":"308","id":"6262","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"89","target":"715","id":"3531","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"338","target":"714","id":"7937","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"185","target":"461","id":"5466","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"433","target":"687","id":"9085","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"217","target":"705","id":"6042","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"224","target":"676","id":"6162","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"533","target":"627","id":"9963","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"12","target":"600","id":"1747","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"418","target":"722","id":"8890","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"288","target":"381","id":"7197","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"15","target":"519","id":"1812","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"475","target":"678","id":"9523","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"74","target":"527","id":"3181","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"143","target":"535","id":"4641","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"98","target":"456","id":"3715","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"41","target":"192","id":"2397","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"394","target":"559","id":"8627","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"158","target":"439","id":"4949","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"268","target":"390","id":"6866","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"331","target":"436","id":"7832","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"238","target":"308","id":"6370","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"27","target":"116","id":"2059","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"161","target":"322","id":"5002","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"364","target":"693","id":"8228","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"498","target":"679","id":"9699","attributes":{"Weight":"1.0"},"color":"rgb(67,229,148)","size":1.0},{"source":"344","target":"484","id":"8010","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"517","target":"648","id":"9831","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"134","target":"375","id":"4441","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"142","target":"157","id":"4606","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"596","target":"693","id":"10312","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"188","target":"428","id":"5516","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"382","target":"647","id":"8461","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"4","target":"65","id":"1535","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"340","target":"387","id":"7955","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"52","target":"464","id":"2660","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"78","target":"389","id":"3269","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"573","target":"687","id":"10194","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"124","target":"615","id":"4247","attributes":{"Weight":"1.0"},"color":"rgb(164,99,148)","size":1.0},{"source":"11","target":"65","id":"1707","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"612","target":"679","id":"10386","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"112","target":"189","id":"3988","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"166","target":"359","id":"5102","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"572","target":"644","id":"10182","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"429","target":"529","id":"9020","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"193","target":"734","id":"5616","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"280","target":"547","id":"7066","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"19","target":"59","id":"1891","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"57","target":"124","id":"2769","attributes":{"Weight":"1.0"},"color":"rgb(229,99,148)","size":1.0},{"source":"533","target":"626","id":"9962","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"64","target":"124","id":"2948","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"451","target":"487","id":"9268","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"72","target":"194","id":"3132","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"185","target":"191","id":"5457","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"289","target":"699","id":"7234","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"371","target":"606","id":"8300","attributes":{"Weight":"1.0"},"color":"rgb(213,67,213)","size":1.0},{"source":"113","target":"674","id":"4020","attributes":{"Weight":"1.0"},"color":"rgb(148,99,164)","size":1.0},{"source":"31","target":"130","id":"2170","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"82","target":"385","id":"3350","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"203","target":"611","id":"5799","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"612","target":"667","id":"10384","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"55","target":"653","id":"2743","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"250","target":"410","id":"6567","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"20","target":"502","id":"1926","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"249","target":"449","id":"6548","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"528","target":"571","id":"9922","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"179","target":"408","id":"5353","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"30","target":"305","id":"2153","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"111","target":"227","id":"3964","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"36","target":"273","id":"2292","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"208","target":"620","id":"5882","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"173","target":"525","id":"5242","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"510","target":"564","id":"9783","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"149","target":"417","id":"4766","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"175","target":"669","id":"5280","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"344","target":"445","id":"8008","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"99","target":"701","id":"3744","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"129","target":"373","id":"4337","attributes":{"Weight":"1.0"},"color":"rgb(229,132,132)","size":1.0},{"source":"342","target":"627","id":"7987","attributes":{"Weight":"1.0"},"color":"rgb(67,180,164)","size":1.0},{"source":"198","target":"633","id":"5706","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"291","target":"422","id":"7260","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"292","target":"695","id":"7278","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"292","target":"439","id":"7273","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"502","target":"681","id":"9724","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"436","target":"717","id":"9116","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"97","target":"437","id":"3693","attributes":{"Weight":"1.0"},"color":"rgb(67,196,213)","size":1.0},{"source":"177","target":"384","id":"5309","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"213","target":"365","id":"5960","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"704","target":"733","id":"10668","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"473","target":"604","id":"9499","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"90","target":"326","id":"3541","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"14","target":"379","id":"1785","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"56","target":"177","id":"2749","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"188","target":"593","id":"5521","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"433","target":"678","id":"9083","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"131","target":"623","id":"4391","attributes":{"Weight":"1.0"},"color":"rgb(148,196,115)","size":1.0},{"source":"88","target":"279","id":"3492","attributes":{"Weight":"1.0"},"color":"rgb(196,148,132)","size":1.0},{"source":"182","target":"627","id":"5411","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"224","target":"490","id":"6155","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"345","target":"417","id":"8014","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"76","target":"543","id":"3230","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"8","target":"384","id":"1639","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"51","target":"641","id":"2640","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"6","target":"298","id":"1585","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"44","target":"586","id":"2482","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"229","target":"256","id":"6231","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"2","target":"105","id":"1491","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"688","target":"697","id":"10637","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"349","target":"569","id":"8069","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"130","target":"291","id":"4353","attributes":{"Weight":"1.0"},"color":"rgb(132,148,148)","size":1.0},{"source":"39","target":"240","id":"2364","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"192","target":"380","id":"5587","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"194","target":"342","id":"5620","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"73","target":"184","id":"3151","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"664","target":"709","id":"10596","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"193","target":"689","id":"5611","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"296","target":"519","id":"7328","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"124","target":"354","id":"4240","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"66","target":"467","id":"3005","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"301","target":"384","id":"7401","attributes":{"Weight":"1.0"},"color":"rgb(99,148,180)","size":1.0},{"source":"110","target":"164","id":"3934","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"42","target":"528","id":"2427","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"63","target":"639","id":"2940","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"56","target":"625","id":"2760","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"601","target":"619","id":"10328","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"84","target":"113","id":"3389","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"523","target":"562","id":"9876","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"294","target":"397","id":"7298","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"323","target":"676","id":"7717","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"176","target":"718","id":"5300","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"28","target":"113","id":"2094","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"146","target":"210","id":"4705","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"252","target":"416","id":"6601","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"184","target":"736","id":"5456","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"612","target":"681","id":"10387","attributes":{"Weight":"1.0"},"color":"rgb(83,229,99)","size":1.0},{"source":"392","target":"411","id":"8598","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"336","target":"356","id":"7897","attributes":{"Weight":"1.0"},"color":"rgb(229,148,83)","size":1.0},{"source":"137","target":"598","id":"4512","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"172","target":"604","id":"5221","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"250","target":"423","id":"6568","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"381","target":"594","id":"8444","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"498","target":"629","id":"9696","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"394","target":"731","id":"8631","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"7","target":"271","id":"1608","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"266","target":"693","id":"6843","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"201","target":"710","id":"5764","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"391","target":"399","id":"8582","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"179","target":"231","id":"5347","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"325","target":"539","id":"7739","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"11","target":"220","id":"1711","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"459","target":"620","id":"9354","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"42","target":"93","id":"2413","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"198","target":"524","id":"5704","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"350","target":"659","id":"8085","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"316","target":"442","id":"7612","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"50","target":"429","id":"2620","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"409","target":"573","id":"8802","attributes":{"Weight":"1.0"},"color":"rgb(148,148,196)","size":1.0},{"source":"430","target":"702","id":"9038","attributes":{"Weight":"1.0"},"color":"rgb(148,213,83)","size":1.0},{"source":"21","target":"733","id":"1956","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"385","target":"614","id":"8511","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"211","target":"608","id":"5928","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"44","target":"122","id":"2461","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"435","target":"494","id":"9096","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"724","target":"734","id":"10679","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"283","target":"392","id":"7121","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"383","target":"649","id":"8479","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"185","target":"352","id":"5461","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"177","target":"532","id":"5316","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"384","target":"667","id":"8494","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"291","target":"478","id":"7264","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"377","target":"731","id":"8393","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"115","target":"379","id":"4053","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"490","target":"699","id":"9619","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"455","target":"687","id":"9318","attributes":{"Weight":"1.0"},"color":"rgb(99,148,196)","size":1.0},{"source":"46","target":"141","id":"2522","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"586","target":"627","id":"10267","attributes":{"Weight":"1.0"},"color":"rgb(148,99,213)","size":1.0},{"source":"409","target":"433","id":"8791","attributes":{"Weight":"1.0"},"color":"rgb(148,148,196)","size":1.0},{"source":"403","target":"649","id":"8736","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"317","target":"357","id":"7629","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"65","target":"346","id":"2981","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"46","target":"291","id":"2526","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"272","target":"340","id":"6934","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"550","target":"588","id":"10061","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"150","target":"720","id":"4803","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"184","target":"636","id":"5451","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"84","target":"407","id":"3397","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"71","target":"579","id":"3123","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"405","target":"731","id":"8761","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"349","target":"644","id":"8074","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"281","target":"614","id":"7084","attributes":{"Weight":"1.0"},"color":"rgb(67,164,196)","size":1.0},{"source":"116","target":"528","id":"4082","attributes":{"Weight":"1.0"},"color":"rgb(148,196,99)","size":1.0},{"source":"575","target":"583","id":"10203","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"251","target":"694","id":"6597","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"248","target":"712","id":"6540","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"421","target":"728","id":"8930","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"60","target":"646","id":"2862","attributes":{"Weight":"1.0"},"color":"rgb(148,83,180)","size":1.0},{"source":"258","target":"654","id":"6709","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"319","target":"429","id":"7659","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"260","target":"271","id":"6731","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"86","target":"286","id":"3438","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"329","target":"367","id":"7796","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"454","target":"480","id":"9296","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"210","target":"337","id":"5902","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"590","target":"709","id":"10289","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"229","target":"267","id":"6232","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"419","target":"642","id":"8903","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"382","target":"491","id":"8457","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"289","target":"323","id":"7219","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"120","target":"708","id":"4168","attributes":{"Weight":"1.0"},"color":"rgb(229,67,99)","size":1.0},{"source":"459","target":"471","id":"9348","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"183","target":"224","id":"5417","attributes":{"Weight":"1.0"},"color":"rgb(180,148,132)","size":1.0},{"source":"536","target":"718","id":"9985","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"280","target":"490","id":"7064","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"28","target":"420","id":"2109","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"284","target":"315","id":"7138","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"343","target":"388","id":"7995","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"335","target":"415","id":"7882","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"70","target":"645","id":"3104","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"689","target":"724","id":"10639","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"424","target":"642","id":"8961","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"195","target":"218","id":"5636","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"83","target":"420","id":"3380","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"140","target":"460","id":"4570","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"528","target":"593","id":"9925","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"623","target":"719","id":"10430","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"115","target":"194","id":"4048","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"330","target":"560","id":"7825","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"305","target":"324","id":"7463","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"524","target":"636","id":"9888","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"150","target":"371","id":"4786","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"68","target":"312","id":"3041","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"526","target":"582","id":"9903","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"82","target":"517","id":"3359","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"339","target":"693","id":"7950","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"183","target":"726","id":"5438","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"518","target":"620","id":"9836","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"217","target":"533","id":"6036","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"199","target":"664","id":"5728","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"337","target":"533","id":"7917","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"416","target":"447","id":"8857","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"378","target":"399","id":"8395","attributes":{"Weight":"1.0"},"color":"rgb(229,148,115)","size":1.0},{"source":"158","target":"641","id":"4953","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"417","target":"534","id":"8871","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"19","target":"447","id":"1902","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"577","target":"678","id":"10221","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"197","target":"456","id":"5688","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"294","target":"644","id":"7309","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"583","target":"603","id":"10254","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"572","target":"693","id":"10183","attributes":{"Weight":"1.0"},"color":"rgb(196,148,132)","size":1.0},{"source":"506","target":"727","id":"9757","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"148","target":"307","id":"4742","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"528","target":"646","id":"9930","attributes":{"Weight":"1.0"},"color":"rgb(148,132,148)","size":1.0},{"source":"61","target":"145","id":"2869","attributes":{"Weight":"1.0"},"color":"rgb(213,67,213)","size":1.0},{"source":"52","target":"718","id":"2668","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"159","target":"632","id":"4972","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"433","target":"543","id":"9075","attributes":{"Weight":"1.0"},"color":"rgb(148,148,196)","size":1.0},{"source":"356","target":"423","id":"8142","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"206","target":"448","id":"5844","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"170","target":"545","id":"5181","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"295","target":"357","id":"7315","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"229","target":"564","id":"6244","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"128","target":"360","id":"4312","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"129","target":"240","id":"4334","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"88","target":"422","id":"3496","attributes":{"Weight":"1.0"},"color":"rgb(180,229,67)","size":1.0},{"source":"159","target":"621","id":"4971","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"31","target":"100","id":"2167","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"76","target":"594","id":"3235","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"600","target":"608","id":"10322","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"97","target":"296","id":"3690","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"121","target":"191","id":"4177","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"566","target":"613","id":"10139","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"296","target":"494","id":"7327","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"12","target":"450","id":"1742","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"27","target":"139","id":"2060","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"432","target":"455","id":"9054","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"399","target":"731","id":"8693","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"396","target":"566","id":"8647","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"537","target":"649","id":"9990","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"147","target":"539","id":"4734","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"266","target":"692","id":"6842","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"470","target":"471","id":"9458","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"421","target":"473","id":"8917","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"288","target":"409","id":"7198","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"472","target":"508","id":"9477","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"428","target":"619","id":"9012","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"53","target":"736","id":"2690","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"288","target":"728","id":"7218","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"45","target":"237","id":"2498","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"15","target":"108","id":"1801","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"49","target":"169","id":"2582","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"441","target":"734","id":"9179","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"236","target":"305","id":"6342","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"100","target":"130","id":"3747","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"144","target":"668","id":"4672","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"335","target":"726","id":"7895","attributes":{"Weight":"1.0"},"color":"rgb(115,148,180)","size":1.0},{"source":"318","target":"509","id":"7642","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"607","target":"711","id":"10360","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"639","target":"671","id":"10496","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"605","target":"631","id":"10349","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"91","target":"242","id":"3559","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"315","target":"467","id":"7599","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"108","target":"218","id":"3892","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"140","target":"678","id":"4580","attributes":{"Weight":"1.0"},"color":"rgb(67,229,148)","size":1.0},{"source":"144","target":"303","id":"4654","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"82","target":"633","id":"3365","attributes":{"Weight":"1.0"},"color":"rgb(99,229,115)","size":1.0},{"source":"255","target":"660","id":"6659","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"167","target":"226","id":"5118","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"96","target":"701","id":"3683","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"169","target":"352","id":"5156","attributes":{"Weight":"1.0"},"color":"rgb(148,213,67)","size":1.0},{"source":"517","target":"573","id":"9825","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"339","target":"453","id":"7939","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"60","target":"429","id":"2851","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"594","target":"728","id":"10304","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"75","target":"537","id":"3206","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"27","target":"573","id":"2076","attributes":{"Weight":"1.0"},"color":"rgb(67,229,148)","size":1.0},{"source":"169","target":"581","id":"5166","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"225","target":"462","id":"6175","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"311","target":"654","id":"7550","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"254","target":"674","id":"6645","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"586","target":"676","id":"10268","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"160","target":"297","id":"4984","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"508","target":"604","id":"9774","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"261","target":"642","id":"6769","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"587","target":"649","id":"10272","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"235","target":"353","id":"6333","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"248","target":"343","id":"6529","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"401","target":"694","id":"8717","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"568","target":"733","id":"10155","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"188","target":"652","id":"5525","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"637","target":"736","id":"10487","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"289","target":"540","id":"7229","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"102","target":"222","id":"3786","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"61","target":"94","id":"2866","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"435","target":"582","id":"9100","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"282","target":"650","id":"7106","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"44","target":"475","id":"2475","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"347","target":"628","id":"8043","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"20","target":"375","id":"1923","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"677","target":"707","id":"10624","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"404","target":"565","id":"8746","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"7","target":"690","id":"1621","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"430","target":"440","id":"9028","attributes":{"Weight":"1.0"},"color":"rgb(229,132,148)","size":1.0},{"source":"225","target":"358","id":"6170","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"77","target":"208","id":"3243","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"465","target":"689","id":"9411","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"17","target":"564","id":"1862","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"124","target":"445","id":"4243","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"523","target":"649","id":"9881","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"326","target":"513","id":"7753","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"205","target":"631","id":"5835","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"59","target":"478","id":"2827","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"284","target":"495","id":"7142","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"259","target":"500","id":"6718","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"123","target":"141","id":"4212","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"274","target":"296","id":"6959","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"107","target":"488","id":"3882","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"145","target":"699","id":"4701","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"602","target":"610","id":"10333","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"269","target":"405","id":"6894","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"213","target":"476","id":"5963","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"257","target":"474","id":"6682","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"14","target":"259","id":"1781","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"64","target":"262","id":"2960","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"114","target":"297","id":"4028","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"191","target":"634","id":"5580","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"674","target":"696","id":"10616","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"286","target":"601","id":"7174","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"423","target":"558","id":"8945","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"436","target":"676","id":"9113","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"654","target":"707","id":"10571","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"61","target":"140","id":"2868","attributes":{"Weight":"1.0"},"color":"rgb(132,148,180)","size":1.0},{"source":"328","target":"718","id":"7793","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"144","target":"583","id":"4667","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"279","target":"289","id":"7035","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"357","target":"446","id":"8152","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"197","target":"328","id":"5681","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"247","target":"380","id":"6519","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"269","target":"393","id":"6890","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"453","target":"610","id":"9286","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"498","target":"517","id":"9689","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"290","target":"731","id":"7257","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"32","target":"410","id":"2196","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"291","target":"534","id":"7268","attributes":{"Weight":"1.0"},"color":"rgb(197,148,148)","size":1.0},{"source":"110","target":"572","id":"3949","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"83","target":"107","id":"3370","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"62","target":"134","id":"2904","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"7","target":"723","id":"1625","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"171","target":"606","id":"5205","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"458","target":"471","id":"9337","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"562","target":"606","id":"10121","attributes":{"Weight":"1.0"},"color":"rgb(213,67,229)","size":1.0},{"source":"161","target":"671","id":"5012","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"336","target":"550","id":"7905","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"266","target":"602","id":"6837","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"80","target":"144","id":"3306","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"569","target":"629","id":"10158","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"371","target":"719","id":"8306","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"353","target":"429","id":"8117","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"129","target":"677","id":"4346","attributes":{"Weight":"1.0"},"color":"rgb(148,213,99)","size":1.0},{"source":"159","target":"398","id":"4967","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"48","target":"174","id":"2566","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"190","target":"383","id":"5557","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"252","target":"461","id":"6606","attributes":{"Weight":"1.0"},"color":"rgb(213,213,67)","size":1.0},{"source":"396","target":"613","id":"8649","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"57","target":"472","id":"2778","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"87","target":"421","id":"3461","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"186","target":"595","id":"5493","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"479","target":"541","id":"9545","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"409","target":"472","id":"8793","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"335","target":"348","id":"7881","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"308","target":"583","id":"7507","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"321","target":"488","id":"7688","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"297","target":"398","id":"7340","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"635","target":"636","id":"10473","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"19","target":"45","id":"1887","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"245","target":"719","id":"6495","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"264","target":"465","id":"6803","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"216","target":"428","id":"6012","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"112","target":"344","id":"3997","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"153","target":"672","id":"4857","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"172","target":"177","id":"5211","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"184","target":"497","id":"5445","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"483","target":"661","id":"9572","attributes":{"Weight":"1.0"},"color":"rgb(196,180,67)","size":1.0},{"source":"143","target":"455","id":"4638","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"627","target":"705","id":"10444","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"275","target":"526","id":"6985","attributes":{"Weight":"1.0"},"color":"rgb(67,196,148)","size":1.0},{"source":"672","target":"701","id":"10612","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"218","target":"591","id":"6061","attributes":{"Weight":"1.0"},"color":"rgb(148,115,213)","size":1.0},{"source":"111","target":"164","id":"3963","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"543","target":"604","id":"10027","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"337","target":"626","id":"7919","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"18","target":"220","id":"1870","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"57","target":"76","id":"2767","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"26","target":"416","id":"2046","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"108","target":"631","id":"3905","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"169","target":"592","id":"5167","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"295","target":"581","id":"7321","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"85","target":"490","id":"3423","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"275","target":"592","id":"6989","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"89","target":"297","id":"3519","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"157","target":"300","id":"4927","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"496","target":"613","id":"9672","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"51","target":"158","id":"2631","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"30","target":"368","id":"2157","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"227","target":"397","id":"6204","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"73","target":"736","id":"3168","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"276","target":"357","id":"6996","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"582","target":"585","id":"10249","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"242","target":"574","id":"6443","attributes":{"Weight":"1.0"},"color":"rgb(83,229,83)","size":1.0},{"source":"269","target":"283","id":"6883","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"29","target":"515","id":"2138","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"42","target":"277","id":"2420","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"286","target":"326","id":"7165","attributes":{"Weight":"1.0"},"color":"rgb(164,196,67)","size":1.0},{"source":"582","target":"722","id":"10253","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"19","target":"58","id":"1890","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"51","target":"733","id":"2645","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"95","target":"109","id":"3639","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"188","target":"619","id":"5524","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"93","target":"332","id":"3603","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"215","target":"241","id":"5984","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"111","target":"644","id":"3983","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"275","target":"652","id":"6990","attributes":{"Weight":"1.0"},"color":"rgb(148,196,67)","size":1.0},{"source":"35","target":"306","id":"2274","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"508","target":"663","id":"9775","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"144","target":"575","id":"4665","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"298","target":"458","id":"7356","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"85","target":"676","id":"3428","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"108","target":"585","id":"3903","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"134","target":"681","id":"4448","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"165","target":"461","id":"5087","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"654","target":"667","id":"10565","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"425","target":"449","id":"8964","attributes":{"Weight":"1.0"},"color":"rgb(213,148,148)","size":1.0},{"source":"404","target":"416","id":"8740","attributes":{"Weight":"1.0"},"color":"rgb(132,229,132)","size":1.0},{"source":"444","target":"455","id":"9209","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"128","target":"550","id":"4319","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"126","target":"502","id":"4279","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"283","target":"658","id":"7135","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"661","target":"692","id":"10589","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"96","target":"130","id":"3668","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"131","target":"443","id":"4381","attributes":{"Weight":"1.0"},"color":"rgb(229,115,132)","size":1.0},{"source":"659","target":"714","id":"10583","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"73","target":"688","id":"3166","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"6","target":"81","id":"1582","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"5","target":"157","id":"1559","attributes":{"Weight":"1.0"},"color":"rgb(99,148,180)","size":1.0},{"source":"253","target":"402","id":"6620","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"44","target":"151","id":"2462","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"229","target":"546","id":"6243","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"610","target":"693","id":"10372","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"725","target":"735","id":"10684","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"51","target":"292","id":"2634","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"155","target":"349","id":"4892","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"650","target":"734","id":"10551","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"121","target":"185","id":"4176","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"56","target":"386","id":"2753","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"168","target":"352","id":"5134","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"61","target":"534","id":"2888","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"189","target":"512","id":"5544","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"199","target":"387","id":"5721","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"419","target":"555","id":"8899","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"318","target":"592","id":"7650","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"10","target":"106","id":"1687","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"282","target":"465","id":"7101","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"23","target":"695","id":"1992","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"133","target":"534","id":"4426","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"45","target":"447","id":"2505","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"155","target":"316","id":"4891","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"254","target":"557","id":"6641","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"441","target":"724","id":"9175","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"252","target":"449","id":"6604","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"67","target":"312","id":"3020","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"16","target":"708","id":"1840","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"144","target":"616","id":"4670","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"219","target":"457","id":"6073","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"439","target":"732","id":"9148","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"72","target":"691","id":"3147","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"352","target":"607","id":"8111","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"224","target":"529","id":"6156","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"216","target":"716","id":"6028","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"159","target":"485","id":"4969","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"175","target":"539","id":"5276","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"68","target":"635","id":"3048","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"174","target":"733","id":"5262","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"568","target":"709","id":"10153","attributes":{"Weight":"1.0"},"color":"rgb(148,148,132)","size":1.0},{"source":"345","target":"659","id":"8021","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"54","target":"216","id":"2696","attributes":{"Weight":"1.0"},"color":"rgb(148,196,148)","size":1.0},{"source":"6","target":"148","id":"1583","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"188","target":"528","id":"5518","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"9","target":"201","id":"1665","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"282","target":"735","id":"7115","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"10","target":"105","id":"1686","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"212","target":"449","id":"5941","attributes":{"Weight":"1.0"},"color":"rgb(132,229,148)","size":1.0},{"source":"169","target":"564","id":"5165","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"162","target":"721","id":"5038","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"259","target":"587","id":"6723","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"192","target":"495","id":"5590","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"296","target":"631","id":"7335","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"296","target":"526","id":"7330","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"574","target":"587","id":"10195","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"385","target":"475","id":"8503","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"640","target":"695","id":"10500","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"202","target":"642","id":"5784","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"452","target":"503","id":"9277","attributes":{"Weight":"1.0"},"color":"rgb(132,229,132)","size":1.0},{"source":"387","target":"709","id":"8544","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"66","target":"380","id":"3002","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"171","target":"673","id":"5208","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"488","target":"626","id":"9598","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"121","target":"463","id":"4185","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"22","target":"439","id":"1968","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"608","target":"631","id":"10361","attributes":{"Weight":"1.0"},"color":"rgb(67,196,229)","size":1.0},{"source":"59","target":"252","id":"2820","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"517","target":"577","id":"9826","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"323","target":"567","id":"7715","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"106","target":"369","id":"3865","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"470","target":"680","id":"9465","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"170","target":"251","id":"5171","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"224","target":"726","id":"6166","attributes":{"Weight":"1.0"},"color":"rgb(196,67,213)","size":1.0},{"source":"375","target":"683","id":"8362","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"5","target":"303","id":"1565","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"240","target":"486","id":"6404","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"94","target":"345","id":"3625","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"225","target":"600","id":"6178","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"279","target":"693","id":"7052","attributes":{"Weight":"1.0"},"color":"rgb(196,148,132)","size":1.0},{"source":"307","target":"686","id":"7498","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"342","target":"717","id":"7992","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"176","target":"328","id":"5284","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"82","target":"678","id":"3367","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"494","target":"585","id":"9658","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"98","target":"351","id":"3710","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"68","target":"302","id":"3040","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"460","target":"713","id":"9373","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"28","target":"278","id":"2101","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"57","target":"288","id":"2772","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"162","target":"690","id":"5034","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"94","target":"244","id":"3621","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"266","target":"339","id":"6831","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"283","target":"559","id":"7131","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"120","target":"595","id":"4167","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"187","target":"669","id":"5509","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"293","target":"641","id":"7287","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"439","target":"568","id":"9141","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"52","target":"176","id":"2649","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"579","target":"626","id":"10237","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"235","target":"429","id":"6335","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"398","target":"654","id":"8675","attributes":{"Weight":"1.0"},"color":"rgb(115,148,180)","size":1.0},{"source":"397","target":"569","id":"8655","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"65","target":"503","id":"2986","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"148","target":"541","id":"4754","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"264","target":"730","id":"6815","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"551","target":"615","id":"10066","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"128","target":"152","id":"4306","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"33","target":"344","id":"2226","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"273","target":"315","id":"6949","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"212","target":"358","id":"5937","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"386","target":"685","id":"8532","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"577","target":"648","id":"10220","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"164","target":"591","id":"5068","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"253","target":"254","id":"6615","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"444","target":"542","id":"9214","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"116","target":"576","id":"4085","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"297","target":"638","id":"7346","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"76","target":"589","id":"3234","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"118","target":"346","id":"4117","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"18","target":"670","id":"1884","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"172","target":"527","id":"5219","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"26","target":"125","id":"2040","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"129","target":"359","id":"4336","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"18","target":"404","id":"1877","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"268","target":"413","id":"6876","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"270","target":"633","id":"6910","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"226","target":"607","id":"6191","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"314","target":"659","id":"7593","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"310","target":"680","id":"7537","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"528","target":"580","id":"9924","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"651","target":"735","id":"10559","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"42","target":"202","id":"2417","attributes":{"Weight":"1.0"},"color":"rgb(148,196,148)","size":1.0},{"source":"363","target":"379","id":"8202","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"113","target":"662","id":"4019","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"261","target":"462","id":"6762","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"266","target":"596","id":"6836","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"201","target":"222","id":"5749","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"506","target":"712","id":"9756","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"163","target":"378","id":"5045","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"31","target":"96","id":"2165","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"19","target":"622","id":"1908","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"276","target":"509","id":"6998","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"2","target":"322","id":"1500","attributes":{"Weight":"1.0"},"color":"rgb(115,67,229)","size":1.0},{"source":"360","target":"448","id":"8184","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"216","target":"644","id":"6025","attributes":{"Weight":"1.0"},"color":"rgb(229,115,132)","size":1.0},{"source":"502","target":"530","id":"9722","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"158","target":"640","id":"4952","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"209","target":"512","id":"5898","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"167","target":"359","id":"5121","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"170","target":"253","id":"5172","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"212","target":"319","id":"5936","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"517","target":"614","id":"9828","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"344","target":"354","id":"8005","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"224","target":"567","id":"6159","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"251","target":"336","id":"6583","attributes":{"Weight":"1.0"},"color":"rgb(229,148,83)","size":1.0},{"source":"625","target":"679","id":"10437","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"197","target":"329","id":"5682","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"132","target":"189","id":"4397","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"78","target":"306","id":"3266","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"351","target":"615","id":"8100","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"165","target":"430","id":"5086","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"202","target":"287","id":"5770","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"2","target":"370","id":"1503","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"464","target":"615","id":"9402","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"168","target":"226","id":"5132","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"143","target":"645","id":"4645","attributes":{"Weight":"1.0"},"color":"rgb(99,148,229)","size":1.0},{"source":"165","target":"711","id":"5093","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"24","target":"243","id":"2004","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"121","target":"240","id":"4179","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"374","target":"687","id":"8349","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"114","target":"322","id":"4029","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"169","target":"510","id":"5162","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"191","target":"359","id":"5573","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"342","target":"649","id":"7988","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"311","target":"527","id":"7545","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"59","target":"416","id":"2822","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"222","target":"236","id":"6117","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"390","target":"731","id":"8577","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"40","target":"41","id":"2375","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"693","target":"721","id":"10654","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"81","target":"148","id":"3325","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"202","target":"424","id":"5774","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"312","target":"736","id":"7567","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"28","target":"135","id":"2095","attributes":{"Weight":"1.0"},"color":"rgb(148,99,213)","size":1.0},{"source":"122","target":"442","id":"4197","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"352","target":"667","id":"8114","attributes":{"Weight":"1.0"},"color":"rgb(148,213,99)","size":1.0},{"source":"228","target":"499","id":"6226","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"90","target":"341","id":"3542","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"329","target":"372","id":"7797","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"371","target":"572","id":"8297","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"464","target":"536","id":"9397","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"381","target":"508","id":"8436","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"116","target":"303","id":"4073","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"421","target":"562","id":"8922","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"303","target":"498","id":"7438","attributes":{"Weight":"1.0"},"color":"rgb(67,229,148)","size":1.0},{"source":"280","target":"443","id":"7062","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"151","target":"490","id":"4820","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"421","target":"440","id":"8915","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"286","target":"580","id":"7172","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"264","target":"647","id":"6807","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"440","target":"523","id":"9154","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"303","target":"434","id":"7437","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"229","target":"446","id":"6240","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"43","target":"590","id":"2453","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"117","target":"156","id":"4095","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"217","target":"488","id":"6035","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"234","target":"554","id":"6321","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"186","target":"552","id":"5492","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"106","target":"153","id":"3858","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"95","target":"712","id":"3662","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"553","target":"715","id":"10077","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"19","target":"452","id":"1904","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"45","target":"481","id":"2510","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"133","target":"314","id":"4417","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"489","target":"595","id":"9608","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"466","target":"729","id":"9426","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"95","target":"343","id":"3649","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"86","target":"93","id":"3431","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"38","target":"537","id":"2350","attributes":{"Weight":"1.0"},"color":"rgb(148,213,83)","size":1.0},{"source":"464","target":"552","id":"9400","attributes":{"Weight":"1.0"},"color":"rgb(164,67,180)","size":1.0},{"source":"1","target":"722","id":"1485","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"208","target":"518","id":"5880","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"91","target":"341","id":"3562","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"157","target":"469","id":"4933","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"411","target":"412","id":"8820","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"377","target":"559","id":"8389","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"263","target":"432","id":"6784","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"253","target":"410","id":"6621","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"608","target":"734","id":"10364","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"326","target":"530","id":"7754","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"116","target":"713","id":"4092","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"211","target":"600","id":"5927","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"201","target":"236","id":"5752","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"121","target":"166","id":"4173","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"232","target":"583","id":"6290","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"85","target":"279","id":"3414","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"4","target":"387","id":"1544","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"186","target":"201","id":"5478","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"102","target":"552","id":"3800","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"228","target":"368","id":"6223","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"64","target":"344","id":"2962","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"222","target":"499","id":"6125","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"312","target":"538","id":"7559","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"135","target":"289","id":"4457","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"399","target":"658","id":"8692","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"210","target":"533","id":"5906","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"103","target":"317","id":"3812","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"52","target":"551","id":"2664","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"501","target":"506","id":"9714","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"315","target":"584","id":"7602","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"375","target":"476","id":"8354","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"195","target":"631","id":"5650","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"94","target":"659","id":"3635","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"251","target":"423","id":"6589","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"205","target":"722","id":"5837","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"647","target":"735","id":"10538","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"19","target":"125","id":"1893","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"575","target":"616","id":"10206","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"41","target":"315","id":"2402","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"118","target":"595","id":"4125","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"148","target":"518","id":"4753","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"650","target":"689","id":"10546","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"355","target":"564","id":"8135","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"11","target":"664","id":"1725","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"17","target":"510","id":"1860","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"8","target":"679","id":"1656","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"570","target":"666","id":"10166","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"301","target":"669","id":"7414","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"199","target":"404","id":"5722","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"42","target":"188","id":"2416","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"19","target":"123","id":"1892","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"289","target":"443","id":"7225","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"490","target":"547","id":"9613","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"110","target":"245","id":"3939","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"373","target":"569","id":"8321","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"277","target":"593","id":"7015","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"163","target":"248","id":"5041","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"227","target":"373","id":"6203","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"47","target":"556","id":"2556","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"206","target":"563","id":"5848","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"301","target":"455","id":"7405","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"193","target":"441","id":"5603","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"235","target":"305","id":"6330","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"120","target":"201","id":"4151","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"116","target":"562","id":"4083","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"444","target":"653","id":"9216","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"46","target":"252","id":"2525","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"329","target":"536","id":"7803","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"267","target":"592","id":"6860","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"104","target":"581","id":"3839","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"162","target":"266","id":"5018","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"465","target":"491","id":"9406","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"91","target":"326","id":"3561","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"268","target":"330","id":"6864","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"285","target":"441","id":"7150","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"86","target":"333","id":"3441","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"282","target":"647","id":"7105","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"431","target":"602","id":"9047","attributes":{"Weight":"1.0"},"color":"rgb(196,148,132)","size":1.0},{"source":"667","target":"679","id":"10603","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"85","target":"233","id":"3413","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"330","target":"395","id":"7817","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"30","target":"595","id":"2163","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"249","target":"447","id":"6547","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"145","target":"721","id":"4703","attributes":{"Weight":"1.0"},"color":"rgb(196,148,132)","size":1.0},{"source":"467","target":"666","id":"9435","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"160","target":"474","id":"4987","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"463","target":"531","id":"9392","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"440","target":"583","id":"9158","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"122","target":"433","id":"4196","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"28","target":"111","id":"2093","attributes":{"Weight":"1.0"},"color":"rgb(148,99,213)","size":1.0},{"source":"200","target":"403","id":"5736","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"407","target":"579","id":"8772","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"689","target":"734","id":"10643","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"131","target":"652","id":"4393","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"62","target":"156","id":"2905","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"255","target":"423","id":"6653","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"25","target":"292","id":"2023","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"362","target":"445","id":"8198","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"499","target":"548","id":"9701","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"150","target":"397","id":"4788","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"209","target":"320","id":"5890","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"277","target":"428","id":"7008","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"212","target":"450","id":"5942","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"8","target":"140","id":"1630","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"145","target":"717","id":"4702","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"241","target":"339","id":"6415","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"529","target":"676","id":"9940","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"391","target":"413","id":"8586","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"17","target":"357","id":"1857","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"336","target":"563","id":"7906","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"376","target":"586","id":"8373","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"75","target":"259","id":"3198","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"6","target":"686","id":"1601","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"333","target":"593","id":"7862","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"212","target":"261","id":"5934","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"603","target":"668","id":"10343","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"68","target":"497","id":"3042","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"45","target":"452","id":"2507","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"325","target":"345","id":"7731","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"110","target":"373","id":"3945","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"331","target":"717","id":"7841","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"280","target":"676","id":"7072","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"53","target":"73","id":"2671","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"326","target":"375","id":"7749","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"245","target":"572","id":"6490","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"489","target":"529","id":"9604","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"505","target":"691","id":"9749","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"386","target":"707","id":"8533","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"715","target":"726","id":"10673","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"400","target":"660","id":"8703","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"63","target":"322","id":"2932","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"516","target":"538","id":"9814","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"383","target":"597","id":"8478","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"166","target":"461","id":"5106","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"319","target":"529","id":"7665","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"1","target":"631","id":"1483","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"514","target":"669","id":"9806","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"649","target":"691","id":"10542","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"395","target":"561","id":"8640","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"156","target":"213","id":"4907","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"61","target":"673","id":"2894","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"384","target":"703","id":"8498","attributes":{"Weight":"1.0"},"color":"rgb(148,196,99)","size":1.0},{"source":"585","target":"655","id":"10265","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"187","target":"514","id":"5503","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"339","target":"723","id":"7952","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"281","target":"650","id":"7087","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"91","target":"530","id":"3569","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"3","target":"165","id":"1514","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"574","target":"691","id":"10198","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"526","target":"585","id":"9904","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"290","target":"391","id":"7241","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"400","target":"402","id":"8695","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"272","target":"346","id":"6935","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"346","target":"628","id":"8033","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"540","target":"708","id":"10012","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"519","target":"582","id":"9842","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"565","target":"604","id":"10134","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"405","target":"560","id":"8758","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"179","target":"679","id":"5366","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"107","target":"113","id":"3872","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"181","target":"672","id":"5398","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"223","target":"262","id":"6132","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"79","target":"687","id":"3302","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"218","target":"494","id":"6054","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"227","target":"643","id":"6212","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"476","target":"513","id":"9526","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"422","target":"591","id":"8938","attributes":{"Weight":"1.0"},"color":"rgb(213,148,132)","size":1.0},{"source":"248","target":"388","id":"6532","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"416","target":"461","id":"8860","attributes":{"Weight":"1.0"},"color":"rgb(213,213,67)","size":1.0},{"source":"458","target":"518","id":"9341","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"28","target":"368","id":"2106","attributes":{"Weight":"1.0"},"color":"rgb(148,99,180)","size":1.0},{"source":"88","target":"215","id":"3484","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"545","target":"674","id":"10039","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"270","target":"636","id":"6912","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"458","target":"470","id":"9336","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"328","target":"456","id":"7784","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"583","target":"668","id":"10257","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"17","target":"34","id":"1843","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"177","target":"279","id":"5306","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"77","target":"477","id":"3253","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"68","target":"688","id":"3052","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"225","target":"555","id":"6177","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"9","target":"710","id":"1681","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"279","target":"443","id":"7043","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"332","target":"333","id":"7842","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"209","target":"230","id":"5887","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"74","target":"289","id":"3173","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"5","target":"80","id":"1555","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"246","target":"638","id":"6508","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"170","target":"558","id":"5184","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"264","target":"491","id":"6805","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"451","target":"608","id":"9271","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"29","target":"477","id":"2136","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"197","target":"718","id":"5697","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"296","target":"655","id":"7336","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"426","target":"609","id":"8989","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"39","target":"168","id":"2360","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"151","target":"238","id":"4809","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"535","target":"542","id":"9975","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"571","target":"619","id":"10172","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"353","target":"499","id":"8119","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"95","target":"550","id":"3657","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"159","target":"638","id":"4973","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"68","target":"524","id":"3044","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"24","target":"641","id":"2011","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"561","target":"731","id":"10115","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"98","target":"197","id":"3707","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"602","target":"723","id":"10341","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"118","target":"199","id":"4113","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"148","target":"313","id":"4744","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"211","target":"451","id":"5922","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"154","target":"591","id":"4877","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"181","target":"309","id":"5391","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"569","target":"643","id":"10159","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"500","target":"574","id":"9707","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"72","target":"403","id":"3139","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"221","target":"555","id":"6107","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"130","target":"452","id":"4360","attributes":{"Weight":"1.0"},"color":"rgb(132,148,148)","size":1.0},{"source":"65","target":"670","id":"2991","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"190","target":"197","id":"5549","attributes":{"Weight":"1.0"},"color":"rgb(83,148,164)","size":1.0},{"source":"526","target":"631","id":"9906","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"186","target":"222","id":"5479","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"255","target":"556","id":"6655","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"117","target":"544","id":"4108","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"81","target":"459","id":"3332","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"9","target":"222","id":"1666","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"67","target":"524","id":"3023","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"54","target":"589","id":"2715","attributes":{"Weight":"1.0"},"color":"rgb(148,148,229)","size":1.0},{"source":"24","target":"704","id":"2013","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"86","target":"662","id":"3452","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"364","target":"690","id":"8226","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"724","target":"735","id":"10680","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"638","target":"715","id":"10492","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"122","target":"498","id":"4201","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"390","target":"393","id":"8564","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"104","target":"446","id":"3834","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"460","target":"522","id":"9357","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"440","target":"543","id":"9155","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"244","target":"417","id":"6465","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"60","target":"595","id":"2860","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"409","target":"589","id":"8803","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"579","target":"627","id":"10238","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"388","target":"617","id":"8552","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"301","target":"653","id":"7413","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"181","target":"366","id":"5392","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"154","target":"373","id":"4871","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"578","target":"690","id":"10231","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"17","target":"104","id":"1846","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"348","target":"440","id":"8051","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"624","target":"669","id":"10432","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"116","target":"460","id":"4081","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"193","target":"650","id":"5609","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"320","target":"361","id":"7676","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"204","target":"538","id":"5812","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"251","target":"656","id":"6594","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"652","target":"716","id":"10562","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"469","target":"608","id":"9451","attributes":{"Weight":"1.0"},"color":"rgb(99,148,229)","size":1.0},{"source":"43","target":"533","id":"2452","attributes":{"Weight":"1.0"},"color":"rgb(67,180,213)","size":1.0},{"source":"545","target":"557","id":"10035","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"445","target":"638","id":"9222","attributes":{"Weight":"1.0"},"color":"rgb(196,99,148)","size":1.0},{"source":"523","target":"682","id":"9883","attributes":{"Weight":"1.0"},"color":"rgb(213,67,229)","size":1.0},{"source":"277","target":"619","id":"7018","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"623","target":"687","id":"10429","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"347","target":"503","id":"8040","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"31","target":"219","id":"2173","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"175","target":"444","id":"5270","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"353","target":"552","id":"8121","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"189","target":"207","id":"5528","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"321","target":"627","id":"7692","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"60","target":"144","id":"2836","attributes":{"Weight":"1.0"},"color":"rgb(148,148,132)","size":1.0},{"source":"177","target":"261","id":"5305","attributes":{"Weight":"1.0"},"color":"rgb(67,229,180)","size":1.0},{"source":"188","target":"618","id":"5523","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"157","target":"444","id":"4931","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"105","target":"672","id":"3855","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"268","target":"395","id":"6871","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"56","target":"408","id":"2754","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"173","target":"526","id":"5243","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"258","target":"398","id":"6699","attributes":{"Weight":"1.0"},"color":"rgb(115,148,180)","size":1.0},{"source":"282","target":"683","id":"7108","attributes":{"Weight":"1.0"},"color":"rgb(83,164,148)","size":1.0},{"source":"493","target":"631","id":"9651","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"408","target":"532","id":"8780","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"73","target":"538","id":"3160","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"113","target":"407","id":"4012","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"75","target":"363","id":"3200","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"503","target":"709","id":"9732","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"168","target":"410","id":"5136","attributes":{"Weight":"1.0"},"color":"rgb(229,132,83)","size":1.0},{"source":"435","target":"655","id":"9104","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"156","target":"406","id":"4914","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"470","target":"518","id":"9462","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"384","target":"532","id":"8489","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"343","target":"563","id":"8000","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"64","target":"404","id":"2966","attributes":{"Weight":"1.0"},"color":"rgb(148,180,132)","size":1.0},{"source":"137","target":"570","id":"4510","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"47","target":"250","id":"2543","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"250","target":"556","id":"6571","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"60","target":"489","id":"2853","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"453","target":"504","id":"9282","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"641","target":"709","id":"10508","attributes":{"Weight":"1.0"},"color":"rgb(148,148,132)","size":1.0},{"source":"410","target":"558","id":"8814","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"433","target":"498","id":"9073","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"596","target":"661","id":"10308","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"429","target":"552","id":"9022","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"504","target":"578","id":"9733","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"193","target":"408","id":"5601","attributes":{"Weight":"1.0"},"color":"rgb(67,164,180)","size":1.0},{"source":"433","target":"517","id":"9074","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"256","target":"267","id":"6663","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"152","target":"388","id":"4836","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"309","target":"370","id":"7518","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"331","target":"699","id":"7840","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"183","target":"636","id":"5431","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"224","target":"642","id":"6161","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"13","target":"247","id":"1759","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"643","target":"719","id":"10515","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"364","target":"596","id":"8220","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"298","target":"471","id":"7360","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"465","target":"650","id":"9409","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"441","target":"646","id":"9170","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"399","target":"414","id":"8686","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"288","target":"527","id":"7209","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"375","target":"513","id":"8356","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"100","target":"554","id":"3758","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"212","target":"622","id":"5950","attributes":{"Weight":"1.0"},"color":"rgb(132,229,148)","size":1.0},{"source":"22","target":"120","id":"1962","attributes":{"Weight":"1.0"},"color":"rgb(229,67,99)","size":1.0},{"source":"649","target":"682","id":"10541","attributes":{"Weight":"1.0"},"color":"rgb(132,148,164)","size":1.0},{"source":"190","target":"691","id":"5566","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"257","target":"638","id":"6687","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"324","target":"548","id":"7726","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"273","target":"598","id":"6956","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"525","target":"527","id":"9895","attributes":{"Weight":"1.0"},"color":"rgb(67,196,180)","size":1.0},{"source":"609","target":"700","id":"10366","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"250","target":"402","id":"6566","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"66","target":"584","id":"3008","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"534","target":"659","id":"9969","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"233","target":"547","id":"6306","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"447","target":"452","id":"9232","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"66","target":"315","id":"3001","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"60","target":"576","id":"2859","attributes":{"Weight":"1.0"},"color":"rgb(148,148,132)","size":1.0},{"source":"220","target":"664","id":"6089","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"376","target":"547","id":"8371","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"231","target":"627","id":"6275","attributes":{"Weight":"1.0"},"color":"rgb(67,180,180)","size":1.0},{"source":"263","target":"455","id":"6786","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"144","target":"232","id":"4651","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"453","target":"596","id":"9284","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"60","target":"235","id":"2842","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"219","target":"304","id":"6068","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"61","target":"79","id":"2865","attributes":{"Weight":"1.0"},"color":"rgb(132,148,196)","size":1.0},{"source":"334","target":"499","id":"7876","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"324","target":"353","id":"7721","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"420","target":"579","id":"8909","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"106","target":"701","id":"3871","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"59","target":"449","id":"2825","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"285","target":"491","id":"7153","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"133","target":"682","id":"4432","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"49","target":"546","id":"2597","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"730","target":"734","id":"10688","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"277","target":"580","id":"7014","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"282","target":"441","id":"7100","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"76","target":"196","id":"3215","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"52","target":"427","id":"2658","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"105","target":"106","id":"3841","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"88","target":"266","id":"3490","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"269","target":"392","id":"6889","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"629","target":"719","id":"10452","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"86","target":"593","id":"3447","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"2","target":"554","id":"1505","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"650","target":"724","id":"10547","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"46","target":"481","id":"2535","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"223","target":"361","id":"6136","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"539","target":"542","id":"10002","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"203","target":"517","id":"5795","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"237","target":"622","id":"6365","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"499","target":"595","id":"9703","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"184","target":"697","id":"5455","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"27","target":"409","id":"2070","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"469","target":"600","id":"9450","attributes":{"Weight":"1.0"},"color":"rgb(99,148,229)","size":1.0},{"source":"245","target":"644","id":"6494","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"188","target":"216","id":"5511","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"143","target":"669","id":"4647","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"476","target":"530","id":"9527","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"498","target":"648","id":"9697","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"260","target":"693","id":"6749","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"566","target":"673","id":"10141","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"426","target":"464","id":"8984","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"44","target":"623","id":"2485","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"379","target":"574","id":"8413","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"200","target":"500","id":"5737","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"316","target":"591","id":"7618","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"246","target":"671","id":"6511","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"138","target":"347","id":"4521","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"254","target":"556","id":"6640","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"30","target":"102","id":"2145","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"13","target":"306","id":"1762","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"259","target":"574","id":"6722","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"154","target":"245","id":"4864","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"261","target":"572","id":"6765","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"632","target":"726","id":"10464","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"265","target":"326","id":"6818","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"527","target":"532","id":"9911","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"267","target":"355","id":"6851","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"203","target":"480","id":"5793","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"215","target":"257","id":"5985","attributes":{"Weight":"1.0"},"color":"rgb(164,148,148)","size":1.0},{"source":"416","target":"483","id":"8864","attributes":{"Weight":"1.0"},"color":"rgb(213,180,67)","size":1.0},{"source":"75","target":"200","id":"3197","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"12","target":"54","id":"1729","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"372","target":"609","id":"8316","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"152","target":"501","id":"4838","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"196","target":"425","id":"5661","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"13","target":"137","id":"1757","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"256","target":"509","id":"6672","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"234","target":"608","id":"6323","attributes":{"Weight":"1.0"},"color":"rgb(67,148,229)","size":1.0},{"source":"421","target":"649","id":"8927","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"33","target":"368","id":"2231","attributes":{"Weight":"1.0"},"color":"rgb(229,99,99)","size":1.0},{"source":"398","target":"485","id":"8668","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"296","target":"418","id":"7323","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"301","target":"535","id":"7408","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"609","target":"615","id":"10365","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"573","target":"648","id":"10191","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"235","target":"324","id":"6331","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"136","target":"152","id":"4481","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"154","target":"644","id":"4881","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"161","target":"474","id":"5004","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"68","target":"184","id":"3035","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"264","target":"725","id":"6813","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"99","target":"300","id":"3733","attributes":{"Weight":"1.0"},"color":"rgb(99,67,229)","size":1.0},{"source":"235","target":"334","id":"6332","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"461","target":"607","id":"9379","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"515","target":"680","id":"9811","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"468","target":"620","id":"9443","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"485","target":"663","id":"9581","attributes":{"Weight":"1.0"},"color":"rgb(196,67,229)","size":1.0},{"source":"553","target":"657","id":"10075","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"474","target":"485","id":"9502","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"185","target":"676","id":"5475","attributes":{"Weight":"1.0"},"color":"rgb(229,132,132)","size":1.0},{"source":"164","target":"359","id":"5062","attributes":{"Weight":"1.0"},"color":"rgb(229,132,132)","size":1.0},{"source":"288","target":"421","id":"7199","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"73","target":"516","id":"3158","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"106","target":"234","id":"3861","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"291","target":"675","id":"7271","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"53","target":"635","id":"2684","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"191","target":"607","id":"5579","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"410","target":"674","id":"8817","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"397","target":"720","id":"8664","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"90","target":"242","id":"3539","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"88","target":"578","id":"3500","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"98","target":"464","id":"3716","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"162","target":"665","id":"5033","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"178","target":"426","id":"5334","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"13","target":"78","id":"1756","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"25","target":"293","id":"2024","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"350","target":"613","id":"8084","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"250","target":"660","id":"6576","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"131","target":"216","id":"4372","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"11","target":"340","id":"1714","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"455","target":"514","id":"9309","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"172","target":"707","id":"5231","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"214","target":"344","id":"5976","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"236","target":"595","id":"6352","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"299","target":"542","id":"7380","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"67","target":"497","id":"3021","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"311","target":"707","id":"7555","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"157","target":"301","id":"4928","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"67","target":"302","id":"3019","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"262","target":"362","id":"6776","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"53","target":"198","id":"2674","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"161","target":"715","id":"5013","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"6","target":"470","id":"1592","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"580","target":"703","id":"10246","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"422","target":"622","id":"8939","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"91","target":"544","id":"3570","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"50","target":"572","id":"2624","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"66","target":"253","id":"2997","attributes":{"Weight":"1.0"},"color":"rgb(148,132,164)","size":1.0},{"source":"192","target":"599","id":"5594","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"62","target":"265","id":"2908","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"138","target":"664","id":"4530","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"350","target":"566","id":"8082","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"179","target":"667","id":"5364","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"93","target":"652","id":"3615","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"52","target":"367","id":"2655","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"70","target":"212","id":"3086","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"454","target":"498","id":"9297","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"725","target":"734","id":"10683","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"69","target":"491","id":"3071","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"390","target":"395","id":"8566","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"423","target":"660","id":"8947","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"15","target":"722","id":"1820","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"497","target":"524","id":"9679","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"420","target":"627","id":"8911","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"5","target":"583","id":"1575","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"223","target":"445","id":"6138","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"322","target":"671","id":"7704","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"22","target":"641","id":"1972","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"347","target":"520","id":"8041","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"98","target":"700","id":"3723","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"143","target":"263","id":"4630","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"607","target":"634","id":"10359","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"430","target":"607","id":"9034","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"85","target":"224","id":"3412","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"262","target":"445","id":"6777","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"379","target":"587","id":"8414","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"459","target":"686","id":"9356","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"24","target":"51","id":"2000","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"379","target":"500","id":"8410","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"452","target":"675","id":"9281","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"30","target":"228","id":"2150","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"120","target":"236","id":"4155","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"72","target":"115","id":"3130","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"175","target":"187","id":"5263","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"144","target":"460","id":"4662","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"220","target":"437","id":"6084","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"283","target":"399","id":"7125","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"408","target":"685","id":"8787","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"44","target":"203","id":"2464","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"186","target":"305","id":"5483","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"178","target":"329","id":"5330","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"120","target":"710","id":"4169","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"175","target":"299","id":"5265","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"154","target":"349","id":"4869","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"95","target":"727","id":"3663","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"139","target":"398","id":"4542","attributes":{"Weight":"1.0"},"color":"rgb(115,148,180)","size":1.0},{"source":"193","target":"264","id":"5596","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"195","target":"296","id":"5638","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"367","target":"536","id":"8258","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"207","target":"484","id":"5866","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"311","target":"612","id":"7548","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"91","target":"126","id":"3555","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"233","target":"280","id":"6296","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"22","target":"25","id":"1959","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"443","target":"644","id":"9204","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"421","target":"604","id":"8926","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"353","target":"710","id":"8123","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"101","target":"362","id":"3777","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"33","target":"239","id":"2221","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"215","target":"271","id":"5988","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"562","target":"565","id":"10116","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"60","target":"186","id":"2838","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"379","target":"691","id":"8417","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"238","target":"616","id":"6382","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"491","target":"521","id":"9622","attributes":{"Weight":"1.0"},"color":"rgb(148,83,229)","size":1.0},{"source":"332","target":"428","id":"7843","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"372","target":"718","id":"8319","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"50","target":"349","id":"2614","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"707","target":"726","id":"10669","attributes":{"Weight":"1.0"},"color":"rgb(115,148,180)","size":1.0},{"source":"650","target":"651","id":"10545","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"236","target":"353","id":"6345","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"119","target":"588","id":"4146","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"35","target":"137","id":"2269","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"330","target":"377","id":"7811","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"187","target":"455","id":"5501","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"256","target":"317","id":"6667","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"123","target":"622","id":"4226","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"231","target":"547","id":"6268","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"635","target":"688","id":"10476","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"130","target":"366","id":"4356","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"172","target":"386","id":"5215","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"300","target":"662","id":"7398","attributes":{"Weight":"1.0"},"color":"rgb(99,99,229)","size":1.0},{"source":"96","target":"554","id":"3680","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"343","target":"360","id":"7993","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"415","target":"668","id":"8853","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"286","target":"333","id":"7167","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"115","target":"403","id":"4055","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"462","target":"487","id":"9383","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"280","target":"287","id":"7055","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"38","target":"240","id":"2339","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"162","target":"692","id":"5035","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"319","target":"555","id":"7666","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"565","target":"594","id":"10133","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"28","target":"337","id":"2104","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"608","target":"642","id":"10362","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"64","target":"416","id":"2967","attributes":{"Weight":"1.0"},"color":"rgb(213,180,67)","size":1.0},{"source":"1","target":"582","id":"1480","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"172","target":"311","id":"5213","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"227","target":"629","id":"6211","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"384","target":"527","id":"8488","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"63","target":"160","id":"2926","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"109","target":"152","id":"3911","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"283","target":"731","id":"7136","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"388","target":"506","id":"8548","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"597","target":"649","id":"10315","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"584","target":"666","id":"10262","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"140","target":"311","id":"4560","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"80","target":"139","id":"3305","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"107","target":"420","id":"3881","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"102","target":"236","id":"3789","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"135","target":"145","id":"4450","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"160","target":"161","id":"4980","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"219","target":"369","id":"6071","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"42","target":"286","id":"2421","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"203","target":"498","id":"5794","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"472","target":"604","id":"9485","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"251","target":"400","id":"6585","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"381","target":"543","id":"8439","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"350","target":"496","id":"8079","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"189","target":"445","id":"5541","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"195","target":"655","id":"5651","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"381","target":"421","id":"8429","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"371","target":"646","id":"8304","attributes":{"Weight":"1.0"},"color":"rgb(148,83,213)","size":1.0},{"source":"319","target":"368","id":"7656","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"268","target":"405","id":"6873","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"162","target":"661","id":"5032","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"297","target":"639","id":"7347","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"580","target":"652","id":"10245","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"92","target":"98","id":"3574","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"250","target":"696","id":"6579","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"76","target":"498","id":"3226","attributes":{"Weight":"1.0"},"color":"rgb(148,148,196)","size":1.0},{"source":"533","target":"662","id":"9964","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"438","target":"689","id":"9133","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"365","target":"476","id":"8234","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"264","target":"650","id":"6808","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"378","target":"488","id":"8397","attributes":{"Weight":"1.0"},"color":"rgb(148,180,148)","size":1.0},{"source":"253","target":"558","id":"6626","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"452","target":"482","id":"9276","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"47","target":"251","id":"2544","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"155","target":"685","id":"4904","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"320","target":"354","id":"7675","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"346","target":"520","id":"8031","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"19","target":"46","id":"1888","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"515","target":"541","id":"9809","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"333","target":"652","id":"7866","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"102","target":"368","id":"3795","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"215","target":"610","id":"5997","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"109","target":"448","id":"3920","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"104","target":"355","id":"3832","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"44","target":"611","id":"2483","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"54","target":"424","id":"2706","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"97","target":"218","id":"3688","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"109","target":"163","id":"3912","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"85","target":"187","id":"3411","attributes":{"Weight":"1.0"},"color":"rgb(180,67,213)","size":1.0},{"source":"497","target":"688","id":"9686","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"121","target":"165","id":"4172","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"122","target":"611","id":"4205","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"35","target":"247","id":"2271","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"619","target":"703","id":"10411","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"25","target":"158","id":"2020","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"432","target":"698","id":"9067","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"332","target":"619","id":"7851","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"64","target":"483","id":"2970","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"397","target":"572","id":"8656","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"18","target":"272","id":"1871","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"10","target":"366","id":"1696","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"44","target":"517","id":"2478","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"88","target":"721","id":"3510","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"308","target":"576","id":"7506","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"570","target":"598","id":"10164","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"320","target":"445","id":"7679","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"200","target":"593","id":"5743","attributes":{"Weight":"1.0"},"color":"rgb(148,196,83)","size":1.0},{"source":"55","target":"157","id":"2726","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"54","target":"131","id":"2692","attributes":{"Weight":"1.0"},"color":"rgb(148,196,148)","size":1.0},{"source":"154","target":"555","id":"4874","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"155","target":"397","id":"4896","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"271","target":"692","id":"6930","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"334","target":"429","id":"7873","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"22","target":"48","id":"1960","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"275","target":"295","id":"6974","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"241","target":"596","id":"6422","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"136","target":"550","id":"4493","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"128","target":"163","id":"4307","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"280","target":"586","id":"7068","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"93","target":"580","id":"3610","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"111","target":"719","id":"3984","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"372","target":"536","id":"8313","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"360","target":"550","id":"8187","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"45","target":"404","id":"2502","attributes":{"Weight":"1.0"},"color":"rgb(132,229,132)","size":1.0},{"source":"43","target":"520","id":"2451","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"125","target":"422","id":"4255","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"84","target":"217","id":"3393","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"475","target":"623","id":"9520","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"553","target":"621","id":"10071","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"130","target":"457","id":"4361","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"1","target":"195","id":"1468","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"400","target":"656","id":"8702","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"371","target":"591","id":"8299","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"69","target":"193","id":"3057","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"294","target":"572","id":"7303","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"579","target":"593","id":"10236","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"69","target":"730","id":"3081","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"111","target":"572","id":"3979","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"72","target":"383","id":"3138","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"28","target":"533","id":"2114","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"41","target":"78","id":"2395","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"159","target":"302","id":"4965","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"430","target":"486","id":"9031","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"308","target":"434","id":"7502","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"27","target":"583","id":"2079","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"395","target":"413","id":"8636","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"721","target":"723","id":"10675","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"128","target":"378","id":"4313","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"251","target":"402","id":"6587","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"274","target":"585","id":"6968","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"597","target":"691","id":"10316","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"11","target":"347","id":"1716","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"352","target":"486","id":"8108","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"386","target":"575","id":"8523","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"5","target":"616","id":"1577","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"50","target":"629","id":"2626","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"215","target":"453","id":"5992","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"131","target":"286","id":"4374","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"238","target":"258","id":"6368","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"67","target":"636","id":"3027","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"2","target":"181","id":"1495","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"128","target":"448","id":"4315","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"281","target":"465","id":"7081","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"424","target":"537","id":"8956","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"185","target":"226","id":"5459","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"231","target":"238","id":"6259","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"243","target":"733","id":"6458","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"575","target":"603","id":"10204","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"143","target":"444","id":"4637","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"496","target":"606","id":"9671","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"5","target":"491","id":"1571","attributes":{"Weight":"1.0"},"color":"rgb(67,164,180)","size":1.0},{"source":"109","target":"588","id":"3925","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"365","target":"375","id":"8231","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"342","target":"587","id":"7985","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"272","target":"664","id":"6944","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"140","target":"707","id":"4584","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"195","target":"494","id":"5643","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"91","target":"375","id":"3564","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"612","target":"616","id":"10381","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"673","target":"714","id":"10614","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"473","target":"565","id":"9496","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"374","target":"678","id":"8348","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"243","target":"640","id":"6452","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"218","target":"526","id":"6057","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"203","target":"385","id":"5788","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"349","target":"489","id":"8067","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"477","target":"620","id":"9535","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"329","target":"351","id":"7795","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"109","target":"343","id":"3916","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"65","target":"138","id":"2976","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"250","target":"255","id":"6562","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"259","target":"379","id":"6715","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"288","target":"522","id":"7206","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"134","target":"406","id":"4442","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"169","target":"652","id":"5168","attributes":{"Weight":"1.0"},"color":"rgb(148,196,67)","size":1.0},{"source":"373","target":"572","id":"8322","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"85","target":"717","id":"3430","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"180","target":"332","id":"5374","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"163","target":"712","id":"5054","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"333","target":"619","id":"7865","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"324","target":"595","id":"7728","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"43","target":"709","id":"2457","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"238","target":"576","id":"6378","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"85","target":"331","id":"3418","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"225","target":"645","id":"6181","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"342","target":"706","id":"7991","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"84","target":"705","id":"3405","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"185","target":"240","id":"5460","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"400","target":"696","id":"8706","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"343","target":"727","id":"8004","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"131","target":"601","id":"4388","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"15","target":"655","id":"1819","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"154","target":"642","id":"4879","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"230","target":"445","id":"6254","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"559","target":"658","id":"10108","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"467","target":"584","id":"9432","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"97","target":"722","id":"3704","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"9","target":"120","id":"1663","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"288","target":"604","id":"7216","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"536","target":"609","id":"9982","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"114","target":"127","id":"4022","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"14","target":"363","id":"1784","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"169","target":"509","id":"5161","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"209","target":"262","id":"5889","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"294","target":"371","id":"7295","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"303","target":"573","id":"7440","attributes":{"Weight":"1.0"},"color":"rgb(67,229,148)","size":1.0},{"source":"573","target":"611","id":"10187","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"288","target":"565","id":"7212","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"576","target":"603","id":"10211","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"261","target":"419","id":"6757","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"359","target":"607","id":"8177","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"273","target":"284","id":"6947","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"75","target":"649","id":"3210","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"418","target":"585","id":"8886","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"46","target":"452","id":"2532","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"37","target":"321","id":"2315","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"268","target":"559","id":"6878","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"144","target":"713","id":"4673","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"470","target":"620","id":"9464","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"261","target":"319","id":"6754","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"265","target":"513","id":"6825","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"209","target":"362","id":"5894","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"137","target":"204","id":"4500","attributes":{"Weight":"1.0"},"color":"rgb(99,213,148)","size":1.0},{"source":"77","target":"81","id":"3241","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"327","target":"385","id":"7760","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"10","target":"554","id":"1700","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"37","target":"627","id":"2324","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"125","target":"461","id":"4259","attributes":{"Weight":"1.0"},"color":"rgb(213,213,67)","size":1.0},{"source":"123","target":"291","id":"4216","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"7","target":"602","id":"1617","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"9","target":"552","id":"1679","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"111","target":"154","id":"3961","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"244","target":"338","id":"6461","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"506","target":"550","id":"9752","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"296","target":"585","id":"7332","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"227","target":"231","id":"6195","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"292","target":"568","id":"7275","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"534","target":"613","id":"9968","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"15","target":"605","id":"1817","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"115","target":"200","id":"4049","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"128","target":"343","id":"4311","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"69","target":"337","id":"3062","attributes":{"Weight":"1.0"},"color":"rgb(67,116,229)","size":1.0},{"source":"222","target":"548","id":"6126","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"324","target":"429","id":"7723","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"198","target":"636","id":"5708","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"236","target":"334","id":"6344","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"432","target":"571","id":"9060","attributes":{"Weight":"1.0"},"color":"rgb(180,115,148)","size":1.0},{"source":"28","target":"84","id":"2091","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"418","target":"435","id":"8879","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"305","target":"710","id":"7473","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"132","target":"207","id":"4398","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"300","target":"455","id":"7390","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"177","target":"591","id":"5318","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"85","target":"145","id":"3408","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"1","target":"15","id":"1464","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"168","target":"531","id":"5141","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"549","target":"609","id":"10056","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"203","target":"327","id":"5786","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"345","target":"566","id":"8018","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"339","target":"690","id":"7948","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"281","target":"382","id":"7078","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"65","target":"437","id":"2985","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"589","target":"623","id":"10281","attributes":{"Weight":"1.0"},"color":"rgb(148,148,196)","size":1.0},{"source":"383","target":"691","id":"8480","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"440","target":"589","id":"9159","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"43","target":"503","id":"2450","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"333","target":"571","id":"7859","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"341","target":"406","id":"7967","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"375","target":"530","id":"8357","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"47","target":"660","id":"2560","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"76","target":"381","id":"3218","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"150","target":"606","id":"4796","attributes":{"Weight":"1.0"},"color":"rgb(213,67,213)","size":1.0},{"source":"108","target":"296","id":"3894","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"55","target":"432","id":"2734","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"258","target":"668","id":"6710","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"434","target":"583","id":"9090","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"38","target":"486","id":"2347","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"371","target":"643","id":"8302","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"27","target":"434","id":"2073","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"183","target":"308","id":"5420","attributes":{"Weight":"1.0"},"color":"rgb(99,229,99)","size":1.0},{"source":"336","target":"360","id":"7898","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"286","target":"619","id":"7176","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"573","target":"577","id":"10186","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"131","target":"381","id":"4378","attributes":{"Weight":"1.0"},"color":"rgb(229,115,148)","size":1.0},{"source":"43","target":"387","id":"2446","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"313","target":"471","id":"7572","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"124","target":"484","id":"4245","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"98","target":"178","id":"3706","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"185","target":"449","id":"5465","attributes":{"Weight":"1.0"},"color":"rgb(213,213,67)","size":1.0},{"source":"415","target":"713","id":"8855","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"40","target":"306","id":"2383","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"435","target":"585","id":"9101","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"92","target":"372","id":"3582","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"473","target":"589","id":"9497","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"135","target":"699","id":"4478","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"244","target":"350","id":"6463","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"87","target":"381","id":"3459","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"143","target":"299","id":"4631","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"84","target":"626","id":"3402","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"249","target":"482","id":"6553","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"519","target":"631","id":"9845","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"484","target":"701","id":"9574","attributes":{"Weight":"1.0"},"color":"rgb(148,99,148)","size":1.0},{"source":"437","target":"664","id":"9121","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"408","target":"679","id":"8786","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"171","target":"613","id":"5206","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"180","target":"716","id":"5387","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"396","target":"633","id":"8650","attributes":{"Weight":"1.0"},"color":"rgb(164,148,148)","size":1.0},{"source":"312","target":"688","id":"7565","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"323","target":"431","id":"7709","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"329","target":"492","id":"7802","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"436","target":"586","id":"9112","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"270","target":"524","id":"6908","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"129","target":"226","id":"4333","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"33","target":"529","id":"2239","attributes":{"Weight":"1.0"},"color":"rgb(229,99,132)","size":1.0},{"source":"424","target":"600","id":"8958","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"150","target":"646","id":"4800","attributes":{"Weight":"1.0"},"color":"rgb(148,83,213)","size":1.0},{"source":"409","target":"425","id":"8790","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"62","target":"90","id":"2900","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"230","target":"354","id":"6251","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"547","target":"627","id":"10048","attributes":{"Weight":"1.0"},"color":"rgb(148,99,213)","size":1.0},{"source":"273","target":"389","id":"6951","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"89","target":"639","id":"3528","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"285","target":"466","id":"7152","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"398","target":"474","id":"8667","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"25","target":"732","id":"2033","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"657","target":"726","id":"10579","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"319","target":"450","id":"7660","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"146","target":"326","id":"4710","attributes":{"Weight":"1.0"},"color":"rgb(83,180,148)","size":1.0},{"source":"44","target":"385","id":"2471","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"161","target":"257","id":"5000","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"137","target":"389","id":"4507","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"186","target":"548","id":"5491","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"385","target":"454","id":"8502","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"82","target":"611","id":"3362","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"455","target":"539","id":"9311","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"372","target":"615","id":"8317","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"92","target":"329","id":"3579","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"265","target":"476","id":"6823","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"316","target":"454","id":"7613","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"121","target":"226","id":"4178","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"176","target":"178","id":"5282","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"647","target":"729","id":"10535","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"402","target":"694","id":"8728","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"329","target":"426","id":"7798","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"227","target":"294","id":"6198","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"164","target":"644","id":"5071","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"287","target":"450","id":"7184","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"113","target":"146","id":"4005","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"164","target":"373","id":"5064","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"401","target":"410","id":"8708","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"363","target":"383","id":"8203","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"90","target":"502","id":"3547","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"33","target":"101","id":"2209","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"409","target":"523","id":"8798","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"21","target":"732","id":"1955","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"215","target":"445","id":"5991","attributes":{"Weight":"1.0"},"color":"rgb(196,180,67)","size":1.0},{"source":"521","target":"523","id":"9853","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"438","target":"441","id":"9124","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"125","target":"416","id":"4254","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"591","target":"720","id":"10295","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"485","target":"638","id":"9578","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"251","target":"545","id":"6590","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"330","target":"390","id":"7812","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"177","target":"685","id":"5325","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"516","target":"636","id":"9817","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"225","target":"642","id":"6180","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"288","target":"562","id":"7211","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"379","target":"383","id":"8408","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"520","target":"670","id":"9851","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"439","target":"540","id":"9140","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"196","target":"523","id":"5667","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"539","target":"698","id":"10006","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"628","target":"709","id":"10448","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"210","target":"662","id":"5910","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"104","target":"510","id":"3836","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"137","target":"192","id":"4499","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"19","target":"370","id":"1899","attributes":{"Weight":"1.0"},"color":"rgb(132,148,148)","size":1.0},{"source":"212","target":"424","id":"5939","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"275","target":"509","id":"6983","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"500","target":"597","id":"9709","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"331","target":"676","id":"7839","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"94","target":"606","id":"3633","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"271","target":"723","id":"6933","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"667","target":"685","id":"10604","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"95","target":"336","id":"3648","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"201","target":"489","id":"5759","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"260","target":"572","id":"6739","attributes":{"Weight":"1.0"},"color":"rgb(196,148,132)","size":1.0},{"source":"116","target":"434","id":"4080","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"381","target":"644","id":"8447","attributes":{"Weight":"1.0"},"color":"rgb(229,67,213)","size":1.0},{"source":"442","target":"623","id":"9191","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"84","target":"662","id":"3404","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"52","target":"609","id":"2665","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"424","target":"451","id":"8952","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"35","target":"78","id":"2268","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"279","target":"591","id":"7050","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"303","target":"583","id":"7443","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"318","target":"357","id":"7638","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"16","target":"540","id":"1834","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"355","target":"592","id":"8137","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"110","target":"238","id":"3938","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"95","target":"152","id":"3643","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"274","target":"519","id":"6964","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"522","target":"685","id":"9873","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"136","target":"727","id":"4498","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"93","target":"333","id":"3604","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"611","target":"648","id":"10377","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"88","target":"572","id":"3499","attributes":{"Weight":"1.0"},"color":"rgb(196,148,132)","size":1.0},{"source":"460","target":"528","id":"9359","attributes":{"Weight":"1.0"},"color":"rgb(148,196,99)","size":1.0},{"source":"433","target":"442","id":"9069","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"54","target":"487","id":"2712","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"21","target":"540","id":"1948","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"142","target":"444","id":"4614","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"254","target":"423","id":"6638","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"649","target":"702","id":"10543","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"79","target":"721","id":"3303","attributes":{"Weight":"1.0"},"color":"rgb(115,229,115)","size":1.0},{"source":"529","target":"720","id":"9943","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"227","target":"238","id":"6196","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"510","target":"546","id":"9782","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"491","target":"730","id":"9632","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"88","target":"661","id":"3505","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"35","target":"66","id":"2267","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"403","target":"587","id":"8734","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"181","target":"304","id":"5390","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"147","target":"469","id":"4731","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"294","target":"432","id":"7299","attributes":{"Weight":"1.0"},"color":"rgb(180,67,213)","size":1.0},{"source":"303","target":"308","id":"7431","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"103","target":"169","id":"3805","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"159","target":"160","id":"4959","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"167","target":"634","id":"5128","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"233","target":"289","id":"6297","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"621","target":"726","id":"10422","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"40","target":"192","id":"2379","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"252","target":"622","id":"6612","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"255","target":"557","id":"6656","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"393","target":"395","id":"8608","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"127","target":"474","id":"4293","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"335","target":"583","id":"7888","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"142","target":"143","id":"4604","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"119","target":"343","id":"4137","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"184","target":"684","id":"5453","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"493","target":"624","id":"9650","attributes":{"Weight":"1.0"},"color":"rgb(99,115,229)","size":1.0},{"source":"433","target":"454","id":"9070","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"219","target":"366","id":"6070","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"545","target":"722","id":"10042","attributes":{"Weight":"1.0"},"color":"rgb(148,115,164)","size":1.0},{"source":"320","target":"484","id":"7681","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"401","target":"674","id":"8716","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"64","target":"230","id":"2956","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"138","target":"709","id":"4532","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"211","target":"645","id":"5931","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"133","target":"507","id":"4425","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"418","target":"655","id":"8889","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"351","target":"536","id":"8096","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"340","target":"520","id":"7959","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"231","target":"348","id":"6265","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"577","target":"623","id":"10219","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"403","target":"574","id":"8733","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"20","target":"134","id":"1915","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"472","target":"649","id":"9486","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"311","target":"567","id":"7547","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"40","target":"599","id":"2392","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"203","target":"656","id":"5803","attributes":{"Weight":"1.0"},"color":"rgb(148,148,132)","size":1.0},{"source":"453","target":"665","id":"9288","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"340","target":"664","id":"7962","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"534","target":"673","id":"9971","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"220","target":"346","id":"6080","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"326","target":"365","id":"7748","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"418","target":"493","id":"8880","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"203","target":"573","id":"5797","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"524","target":"633","id":"9886","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"95","target":"378","id":"3651","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"465","target":"725","id":"9413","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"355","target":"581","id":"8136","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"164","target":"227","id":"5057","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"374","target":"648","id":"8347","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"121","target":"168","id":"4175","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"24","target":"120","id":"2001","attributes":{"Weight":"1.0"},"color":"rgb(229,67,99)","size":1.0},{"source":"606","target":"713","id":"10357","attributes":{"Weight":"1.0"},"color":"rgb(132,148,180)","size":1.0},{"source":"340","target":"628","id":"7961","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"606","target":"613","id":"10352","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"305","target":"368","id":"7466","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"648","target":"687","id":"10540","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"343","target":"506","id":"7998","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"207","target":"483","id":"5865","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"190","target":"505","id":"5560","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"150","target":"643","id":"4798","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"48","target":"292","id":"2568","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"483","target":"565","id":"9571","attributes":{"Weight":"1.0"},"color":"rgb(229,99,148)","size":1.0},{"source":"122","target":"327","id":"4193","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"647","target":"651","id":"10531","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"496","target":"507","id":"9668","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"43","target":"118","id":"2438","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"112","target":"132","id":"3987","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"279","target":"431","id":"7041","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"114","target":"523","id":"4035","attributes":{"Weight":"1.0"},"color":"rgb(196,67,229)","size":1.0},{"source":"461","target":"711","id":"9382","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"183","target":"524","id":"5426","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"278","target":"321","id":"7023","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"647","target":"689","id":"10532","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"547","target":"699","id":"10050","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"366","target":"701","id":"8251","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"215","target":"692","id":"6002","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"11","target":"437","id":"1719","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"186","target":"228","id":"5480","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"32","target":"47","id":"2185","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"411","target":"731","id":"8827","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"17","target":"295","id":"1853","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"588","target":"617","id":"10276","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"91","target":"134","id":"3556","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"9","target":"305","id":"1670","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"565","target":"661","id":"10135","attributes":{"Weight":"1.0"},"color":"rgb(196,148,148)","size":1.0},{"source":"44","target":"227","id":"2465","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"57","target":"421","id":"2775","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"566","target":"714","id":"10143","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"522","target":"707","id":"9874","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"4","target":"220","id":"1539","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"233","target":"586","id":"6308","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"212","target":"425","id":"5940","attributes":{"Weight":"1.0"},"color":"rgb(148,148,229)","size":1.0},{"source":"440","target":"654","id":"9162","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"612","target":"654","id":"10383","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"426","target":"615","id":"8990","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"371","target":"373","id":"8291","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"37","target":"488","id":"2319","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"279","target":"490","id":"7044","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"155","target":"719","id":"4905","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"63","target":"697","id":"2943","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"260","target":"578","id":"6740","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"115","target":"649","id":"4062","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"227","target":"245","id":"6197","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"124","target":"483","id":"4244","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"431","target":"529","id":"9043","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"137","target":"247","id":"4501","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"7","target":"266","id":"1607","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"301","target":"539","id":"7409","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"98","target":"615","id":"3722","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"494","target":"655","id":"9661","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"140","target":"177","id":"4558","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"90","target":"513","id":"3548","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"216","target":"332","id":"6009","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"258","target":"603","id":"6707","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"392","target":"731","id":"8606","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"518","target":"680","id":"9838","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"127","target":"297","id":"4290","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"39","target":"185","id":"2361","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"299","target":"431","id":"7372","attributes":{"Weight":"1.0"},"color":"rgb(180,67,213)","size":1.0},{"source":"262","target":"361","id":"6775","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"100","target":"366","id":"3754","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"57","target":"425","id":"2776","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"244","target":"673","id":"6474","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"227","target":"717","id":"6214","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"313","target":"458","id":"7568","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"141","target":"449","id":"4595","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"84","target":"146","id":"3390","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"209","target":"223","id":"5886","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"394","target":"405","id":"8622","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"390","target":"559","id":"8573","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"6","target":"471","id":"1593","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"321","target":"340","id":"7685","attributes":{"Weight":"1.0"},"color":"rgb(67,180,213)","size":1.0},{"source":"208","target":"298","id":"5868","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"97","target":"494","id":"3695","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"204","target":"312","id":"5808","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"204","target":"633","id":"5813","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"609","target":"718","id":"10367","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"708","target":"732","id":"10670","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"181","target":"554","id":"5396","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"46","target":"478","id":"2534","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"441","target":"689","id":"9174","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"335","target":"668","id":"7892","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"188","target":"333","id":"5515","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"408","target":"527","id":"8779","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"64","target":"214","id":"2954","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"597","target":"706","id":"10318","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"91","target":"513","id":"3568","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"83","target":"217","id":"3375","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"196","target":"663","id":"5676","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"499","target":"710","id":"9704","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"562","target":"663","id":"10123","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"509","target":"581","id":"9780","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"302","target":"714","id":"7429","attributes":{"Weight":"1.0"},"color":"rgb(164,148,148)","size":1.0},{"source":"380","target":"666","id":"8427","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"271","target":"578","id":"6922","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"600","target":"631","id":"10323","attributes":{"Weight":"1.0"},"color":"rgb(67,196,229)","size":1.0},{"source":"414","target":"560","id":"8842","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"73","target":"684","id":"3165","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"165","target":"167","id":"5077","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"100","target":"106","id":"3746","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"344","target":"361","id":"8006","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"239","target":"362","id":"6392","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"46","target":"64","id":"2519","attributes":{"Weight":"1.0"},"color":"rgb(213,180,67)","size":1.0},{"source":"88","target":"260","id":"3488","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"78","target":"284","id":"3265","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"50","target":"529","id":"2622","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"238","target":"575","id":"6377","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"521","target":"728","id":"9862","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"509","target":"510","id":"9777","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"12","target":"70","id":"1730","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"224","target":"289","id":"6145","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"557","target":"656","id":"10096","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"33","target":"223","id":"2219","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"354","target":"445","id":"8126","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"16","target":"48","id":"1826","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"532","target":"612","id":"9951","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"235","target":"236","id":"6329","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"38","target":"607","id":"2351","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"152","target":"727","id":"4845","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"236","target":"548","id":"6350","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"476","target":"683","id":"9530","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"304","target":"672","id":"7461","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"322","target":"485","id":"7697","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"180","target":"618","id":"5383","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"213","target":"544","id":"5967","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"354","target":"512","id":"8129","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"33","target":"512","id":"2238","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"208","target":"310","id":"5870","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"266","target":"721","id":"6844","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"111","target":"629","id":"3981","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"555","target":"726","id":"10087","attributes":{"Weight":"1.0"},"color":"rgb(115,148,229)","size":1.0},{"source":"120","target":"334","id":"4159","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"61","target":"338","id":"2877","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"93","target":"593","id":"3611","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"213","target":"375","id":"5961","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"150","target":"528","id":"4790","attributes":{"Weight":"1.0"},"color":"rgb(229,115,132)","size":1.0},{"source":"409","target":"421","id":"8789","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"416","target":"478","id":"8861","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"356","target":"656","id":"8147","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"338","target":"659","id":"7934","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"115","target":"597","id":"4061","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"413","target":"658","id":"8839","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"238","target":"603","id":"6381","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"406","target":"502","id":"8763","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"404","target":"670","id":"8751","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"397","target":"643","id":"8659","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"299","target":"469","id":"7376","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"190","target":"403","id":"5558","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"414","target":"559","id":"8841","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"27","target":"629","id":"2082","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"42","target":"211","id":"2418","attributes":{"Weight":"1.0"},"color":"rgb(148,196,148)","size":1.0},{"source":"539","target":"624","id":"10003","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"30","target":"548","id":"2161","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"103","target":"256","id":"3807","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"91","target":"117","id":"3554","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"52","target":"98","id":"2648","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"36","target":"598","id":"2302","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"356","target":"558","id":"8146","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"338","target":"396","id":"7926","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"453","target":"692","id":"9290","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"155","target":"294","id":"4890","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"398","target":"553","id":"8669","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"222","target":"305","id":"6118","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"649","target":"706","id":"10544","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"640","target":"641","id":"10499","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"11","target":"590","id":"1723","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"24","target":"293","id":"2006","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"44","target":"687","id":"2489","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"178","target":"615","id":"5343","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"434","target":"491","id":"9086","attributes":{"Weight":"1.0"},"color":"rgb(67,164,180)","size":1.0},{"source":"641","target":"708","id":"10507","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"620","target":"686","id":"10414","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"385","target":"480","id":"8504","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"30","target":"222","id":"2149","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"75","target":"115","id":"3194","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"226","target":"359","id":"6185","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"227","target":"627","id":"6210","attributes":{"Weight":"1.0"},"color":"rgb(148,99,213)","size":1.0},{"source":"181","target":"701","id":"5399","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"93","target":"277","id":"3601","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"441","target":"729","id":"9177","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"410","target":"556","id":"8812","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"351","target":"492","id":"8095","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"398","target":"430","id":"8665","attributes":{"Weight":"1.0"},"color":"rgb(196,132,148)","size":1.0},{"source":"88","target":"596","id":"3502","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"49","target":"198","id":"2583","attributes":{"Weight":"1.0"},"color":"rgb(99,229,67)","size":1.0},{"source":"430","target":"531","id":"9032","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"419","target":"643","id":"8904","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"328","target":"492","id":"7786","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"111","target":"371","id":"3971","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"229","target":"509","id":"6241","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"469","target":"698","id":"9456","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"135","target":"376","id":"4463","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"70","target":"462","id":"3098","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"272","target":"709","id":"6946","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"434","target":"575","id":"9088","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"261","target":"287","id":"6753","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"224","target":"331","id":"6148","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"123","target":"422","id":"4218","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"176","target":"372","id":"5288","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"134","target":"213","id":"4435","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"5","target":"521","id":"1572","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"402","target":"556","id":"8722","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"416","target":"422","id":"8856","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"182","target":"278","id":"5402","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"346","target":"503","id":"8030","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"113","target":"210","id":"4007","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"300","target":"624","id":"7396","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"623","target":"678","id":"10428","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"394","target":"413","id":"8625","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"114","target":"639","id":"4040","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"326","target":"681","id":"7756","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"172","target":"677","id":"5227","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"13","target":"380","id":"1764","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"246","target":"715","id":"6513","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"151","target":"280","id":"4811","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"360","target":"712","id":"8191","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"197","target":"351","id":"5683","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"88","target":"504","id":"3498","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"68","target":"516","id":"3043","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"275","target":"510","id":"6984","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"151","target":"279","id":"4810","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"146","target":"278","id":"4707","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"79","target":"433","id":"3287","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"145","target":"327","id":"4682","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"170","target":"557","id":"5183","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"21","target":"428","id":"1945","attributes":{"Weight":"1.0"},"color":"rgb(229,115,67)","size":1.0},{"source":"63","target":"398","id":"2933","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"203","target":"648","id":"5802","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"24","target":"640","id":"2010","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"46","target":"447","id":"2530","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"19","target":"675","id":"1909","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"475","target":"577","id":"9517","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"106","target":"554","id":"3868","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"298","target":"686","id":"7368","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"118","target":"503","id":"4122","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"232","target":"254","id":"6280","attributes":{"Weight":"1.0"},"color":"rgb(148,148,116)","size":1.0},{"source":"470","target":"515","id":"9461","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"231","target":"303","id":"6261","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"438","target":"651","id":"9131","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"155","target":"166","id":"4887","attributes":{"Weight":"1.0"},"color":"rgb(229,132,132)","size":1.0},{"source":"469","target":"631","id":"9453","attributes":{"Weight":"1.0"},"color":"rgb(99,115,229)","size":1.0},{"source":"394","target":"395","id":"8620","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"462","target":"726","id":"9390","attributes":{"Weight":"1.0"},"color":"rgb(115,148,229)","size":1.0},{"source":"344","target":"362","id":"8007","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"192","target":"306","id":"5585","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"566","target":"606","id":"10138","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"299","target":"300","id":"7369","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"461","target":"565","id":"9378","attributes":{"Weight":"1.0"},"color":"rgb(229,132,148)","size":1.0},{"source":"27","target":"668","id":"2083","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"33","target":"483","id":"2235","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"275","target":"276","id":"6973","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"307","target":"310","id":"7484","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"461","target":"483","id":"9375","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"287","target":"555","id":"7189","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"300","target":"535","id":"7393","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"238","target":"586","id":"6380","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"307","target":"470","id":"7489","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"135","target":"323","id":"4459","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"89","target":"657","id":"3529","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"342","target":"586","id":"7984","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"367","target":"718","id":"8264","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"107","target":"533","id":"3883","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"110","target":"644","id":"3955","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"39","target":"166","id":"2358","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"119","target":"206","id":"4134","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"342","target":"379","id":"7976","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"187","target":"624","id":"5507","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"384","target":"460","id":"8486","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"22","target":"695","id":"1973","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"216","target":"580","id":"6018","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"151","target":"224","id":"4805","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"445","target":"512","id":"9221","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"28","target":"529","id":"2113","attributes":{"Weight":"1.0"},"color":"rgb(148,99,213)","size":1.0},{"source":"20","target":"156","id":"1916","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"145","target":"529","id":"4693","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"92","target":"609","id":"3591","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"46","target":"483","id":"2537","attributes":{"Weight":"1.0"},"color":"rgb(213,180,67)","size":1.0},{"source":"424","target":"517","id":"8955","attributes":{"Weight":"1.0"},"color":"rgb(67,229,196)","size":1.0},{"source":"9","target":"499","id":"1677","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"271","target":"596","id":"6923","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"477","target":"479","id":"9531","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"130","target":"672","id":"4368","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"212","target":"451","id":"5943","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"315","target":"495","id":"7600","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"170","target":"410","id":"5179","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"629","target":"720","id":"10453","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"268","target":"269","id":"6861","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"558","target":"656","id":"10101","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"26","target":"249","id":"2043","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"269","target":"412","id":"6896","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"35","target":"666","id":"2284","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"1","target":"205","id":"1469","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"303","target":"576","id":"7442","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"69","target":"264","id":"3058","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"284","target":"598","id":"7145","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"145","target":"443","id":"4689","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"37","target":"533","id":"2320","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"175","target":"300","id":"5266","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"245","target":"720","id":"6496","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"203","target":"687","id":"5805","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"253","target":"423","id":"6622","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"381","target":"425","id":"8430","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"114","target":"671","id":"4043","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"221","target":"608","id":"6111","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"316","target":"721","id":"7626","attributes":{"Weight":"1.0"},"color":"rgb(196,148,132)","size":1.0},{"source":"127","target":"398","id":"4292","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"243","target":"708","id":"6456","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"44","target":"327","id":"2468","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"199","target":"590","id":"5726","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"601","target":"655","id":"10330","attributes":{"Weight":"1.0"},"color":"rgb(148,164,148)","size":1.0},{"source":"127","target":"553","id":"4295","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"277","target":"537","id":"7012","attributes":{"Weight":"1.0"},"color":"rgb(148,196,83)","size":1.0},{"source":"13","target":"666","id":"1772","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"297","target":"657","id":"7348","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"197","target":"464","id":"5689","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"50","target":"373","id":"2617","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"488","target":"627","id":"9599","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"583","target":"654","id":"10256","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"99","target":"105","id":"3726","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"61","target":"316","id":"2874","attributes":{"Weight":"1.0"},"color":"rgb(213,67,213)","size":1.0},{"source":"47","target":"402","id":"2552","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"502","target":"513","id":"9721","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"71","target":"321","id":"3117","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"571","target":"716","id":"10177","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"590","target":"628","id":"10286","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"36","target":"192","id":"2290","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"60","target":"102","id":"2833","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"297","target":"474","id":"7341","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"131","target":"719","id":"4396","attributes":{"Weight":"1.0"},"color":"rgb(229,115,132)","size":1.0},{"source":"322","target":"621","id":"7699","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"409","target":"663","id":"8807","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"678","target":"721","id":"10626","attributes":{"Weight":"1.0"},"color":"rgb(115,229,115)","size":1.0},{"source":"3","target":"461","id":"1525","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"198","target":"497","id":"5702","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"123","target":"558","id":"4225","attributes":{"Weight":"1.0"},"color":"rgb(213,148,83)","size":1.0},{"source":"62","target":"530","id":"2917","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"140","target":"527","id":"4572","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"162","target":"602","id":"5030","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"473","target":"543","id":"9494","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"170","target":"250","id":"5170","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"419","target":"429","id":"8892","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"702","target":"706","id":"10664","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"454","target":"721","id":"9307","attributes":{"Weight":"1.0"},"color":"rgb(115,229,115)","size":1.0},{"source":"142","target":"660","id":"4623","attributes":{"Weight":"1.0"},"color":"rgb(180,67,164)","size":1.0},{"source":"467","target":"598","id":"9433","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"117","target":"213","id":"4096","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"218","target":"418","id":"6050","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"20","target":"341","id":"1921","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"363","target":"505","id":"8207","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"214","target":"262","id":"5974","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"114","target":"715","id":"4045","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"158","target":"733","id":"4958","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"417","target":"566","id":"8872","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"451","target":"600","id":"9270","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"38","target":"191","id":"2337","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"576","target":"668","id":"10215","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"137","target":"467","id":"4508","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"136","target":"163","id":"4482","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"646","target":"713","id":"10523","attributes":{"Weight":"1.0"},"color":"rgb(67,164,180)","size":1.0},{"source":"149","target":"345","id":"4763","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"524","target":"538","id":"9885","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"690","target":"723","id":"10648","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"151","target":"376","id":"4816","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"116","target":"668","id":"4091","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"110","target":"586","id":"3950","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"80","target":"434","id":"3317","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"234","target":"280","id":"6312","attributes":{"Weight":"1.0"},"color":"rgb(148,67,213)","size":1.0},{"source":"168","target":"191","id":"5131","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"20","target":"683","id":"1931","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"500","target":"706","id":"9713","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"130","target":"219","id":"4351","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"194","target":"505","id":"5626","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"17","target":"446","id":"1858","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"178","target":"197","id":"5328","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"261","target":"555","id":"6764","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"406","target":"476","id":"8762","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"47","target":"170","id":"2542","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"611","target":"656","id":"10378","attributes":{"Weight":"1.0"},"color":"rgb(148,148,132)","size":1.0},{"source":"196","target":"589","id":"5672","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"454","target":"648","id":"9304","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"67","target":"198","id":"3016","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"34","target":"592","id":"2263","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"224","target":"335","id":"6149","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"40","target":"315","id":"2384","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"528","target":"562","id":"9921","attributes":{"Weight":"1.0"},"color":"rgb(229,115,148)","size":1.0},{"source":"196","target":"543","id":"5669","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"101","target":"483","id":"3780","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"52","target":"700","id":"2667","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"157","target":"624","id":"4941","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"151","target":"179","id":"4804","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"228","target":"552","id":"6228","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"535","target":"653","id":"9977","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"20","target":"476","id":"1925","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"155","target":"245","id":"4889","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"494","target":"605","id":"9659","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"516","target":"524","id":"9813","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"501","target":"727","id":"9720","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"433","target":"648","id":"9082","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"365","target":"390","id":"8232","attributes":{"Weight":"1.0"},"color":"rgb(164,148,115)","size":1.0},{"source":"404","target":"503","id":"8744","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"4","target":"138","id":"1537","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"636","target":"697","id":"10482","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"503","target":"670","id":"9731","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"356","target":"696","id":"8151","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"615","target":"700","id":"10398","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"168","target":"607","id":"5143","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"320","target":"344","id":"7674","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"638","target":"671","id":"10490","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"40","target":"137","id":"2378","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"384","target":"677","id":"8495","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"295","target":"317","id":"7312","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"179","target":"311","id":"5349","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"245","target":"489","id":"6487","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"135","target":"547","id":"4472","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"78","target":"273","id":"3264","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"147","target":"514","id":"4732","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"384","target":"522","id":"8487","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"29","target":"208","id":"2126","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"60","target":"606","id":"2861","attributes":{"Weight":"1.0"},"color":"rgb(213,67,180)","size":1.0},{"source":"233","target":"376","id":"6300","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"635","target":"736","id":"10478","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"54","target":"381","id":"2704","attributes":{"Weight":"1.0"},"color":"rgb(148,148,229)","size":1.0},{"source":"171","target":"714","id":"5210","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"5","target":"575","id":"1573","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"112","target":"512","id":"4004","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"182","target":"420","id":"5406","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"69","target":"282","id":"3060","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"37","target":"545","id":"2321","attributes":{"Weight":"1.0"},"color":"rgb(148,99,164)","size":1.0},{"source":"363","target":"574","id":"8209","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"175","target":"624","id":"5278","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"40","target":"380","id":"2385","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"25","target":"439","id":"2025","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"39","target":"352","id":"2365","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"386","target":"532","id":"8522","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"449","target":"490","id":"9252","attributes":{"Weight":"1.0"},"color":"rgb(213,148,132)","size":1.0},{"source":"157","target":"187","id":"4923","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"78","target":"137","id":"3261","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"724","target":"729","id":"10677","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"211","target":"555","id":"5926","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"148","target":"477","id":"4750","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"253","target":"557","id":"6625","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"9","target":"429","id":"1675","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"252","target":"478","id":"6607","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"611","target":"687","id":"10380","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"421","target":"565","id":"8923","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"511","target":"593","id":"9790","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"279","target":"717","id":"7054","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"32","target":"250","id":"2187","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"93","target":"131","id":"3595","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"360","target":"563","id":"8188","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"404","target":"483","id":"8743","attributes":{"Weight":"1.0"},"color":"rgb(148,180,132)","size":1.0},{"source":"344","target":"483","id":"8009","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"13","target":"35","id":"1751","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"367","target":"609","id":"8261","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"442","target":"687","id":"9194","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"35","target":"599","id":"2283","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"557","target":"558","id":"10095","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"471","target":"686","id":"9475","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"156","target":"502","id":"4916","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"486","target":"531","id":"9585","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"68","target":"718","id":"3054","attributes":{"Weight":"1.0"},"color":"rgb(116,148,148)","size":1.0},{"source":"273","target":"467","id":"6952","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"269","target":"560","id":"6900","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"256","target":"446","id":"6671","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"631","target":"655","id":"10456","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"433","target":"611","id":"9078","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"226","target":"463","id":"6188","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"224","target":"699","id":"6163","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"135","target":"224","id":"4452","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"508","target":"521","id":"9767","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"197","target":"536","id":"5691","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"11","target":"346","id":"1715","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"259","target":"702","id":"6727","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"116","target":"371","id":"4078","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"220","target":"404","id":"6083","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"540","target":"732","id":"10013","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"174","target":"695","id":"5258","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"253","target":"400","id":"6618","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"316","target":"644","id":"7621","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"116","target":"308","id":"4074","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"71","target":"278","id":"3115","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"7","target":"453","id":"1611","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"352","target":"634","id":"8112","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"194","target":"649","id":"5631","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"376","target":"443","id":"8367","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"285","target":"734","id":"7163","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"290","target":"411","id":"7248","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"416","target":"449","id":"8858","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"374","target":"442","id":"8335","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"593","target":"619","id":"10298","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"257","target":"632","id":"6686","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"399","target":"488","id":"8687","attributes":{"Weight":"1.0"},"color":"rgb(148,99,196)","size":1.0},{"source":"409","target":"473","id":"8794","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"57","target":"562","id":"2784","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"50","target":"644","id":"2628","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"376","target":"567","id":"8372","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"208","target":"458","id":"5872","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"532","target":"540","id":"9950","attributes":{"Weight":"1.0"},"color":"rgb(148,148,99)","size":1.0},{"source":"389","target":"570","id":"8557","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"381","target":"521","id":"8437","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"183","target":"555","id":"5428","attributes":{"Weight":"1.0"},"color":"rgb(99,229,148)","size":1.0},{"source":"270","target":"688","id":"6915","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"381","target":"473","id":"8435","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"353","target":"368","id":"8116","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"38","target":"430","id":"2344","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"270","target":"538","id":"6909","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"452","target":"534","id":"9278","attributes":{"Weight":"1.0"},"color":"rgb(197,148,148)","size":1.0},{"source":"84","target":"107","id":"3388","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"258","target":"335","id":"6697","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"458","target":"620","id":"9343","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"270","target":"637","id":"6913","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"91","target":"502","id":"3567","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"13","target":"66","id":"1755","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"54","target":"608","id":"2717","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"361","target":"484","id":"8196","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"342","target":"500","id":"7979","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"73","target":"524","id":"3159","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"31","target":"370","id":"2179","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"593","target":"601","id":"10296","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"394","target":"414","id":"8626","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"171","target":"417","id":"5198","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"371","target":"562","id":"8295","attributes":{"Weight":"1.0"},"color":"rgb(229,67,213)","size":1.0},{"source":"48","target":"708","id":"2577","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"460","target":"677","id":"9369","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"661","target":"665","id":"10587","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"448","target":"506","id":"9240","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"133","target":"244","id":"4416","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"23","target":"158","id":"1982","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"81","target":"479","id":"3338","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"218","target":"435","id":"6052","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"65","target":"520","id":"2987","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"367","target":"426","id":"8253","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"123","target":"481","id":"4223","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"390","target":"399","id":"8567","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"428","target":"571","id":"9007","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"507","target":"714","id":"9765","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"267","target":"275","id":"6846","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"725","target":"729","id":"10681","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"261","target":"600","id":"6767","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"466","target":"735","id":"9429","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"336","target":"388","id":"7900","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"174","target":"568","id":"5255","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"522","target":"612","id":"9867","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"294","target":"643","id":"7308","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"612","target":"707","id":"10389","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"576","target":"606","id":"10212","attributes":{"Weight":"1.0"},"color":"rgb(132,148,180)","size":1.0},{"source":"75","target":"574","id":"3207","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"417","target":"659","id":"8875","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"276","target":"546","id":"7000","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"135","target":"280","id":"4456","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"391","target":"405","id":"8583","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"124","target":"320","id":"4238","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"12","target":"462","id":"1744","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"507","target":"534","id":"9758","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"104","target":"229","id":"3824","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"170","target":"255","id":"5174","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"526","target":"667","id":"9909","attributes":{"Weight":"1.0"},"color":"rgb(67,196,180)","size":1.0},{"source":"117","target":"375","id":"4102","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"371","target":"713","id":"8305","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"279","target":"567","id":"7047","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"525","target":"722","id":"9902","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"257","target":"445","id":"6681","attributes":{"Weight":"1.0"},"color":"rgb(196,99,148)","size":1.0},{"source":"71","target":"226","id":"3114","attributes":{"Weight":"1.0"},"color":"rgb(148,164,148)","size":1.0},{"source":"452","target":"481","id":"9275","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"242","target":"341","id":"6434","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"286","target":"593","id":"7173","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"247","target":"599","id":"6526","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"241","target":"610","id":"6424","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"100","target":"701","id":"3761","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"425","target":"565","id":"8973","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"61","target":"455","id":"2885","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"143","target":"187","id":"4629","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"221","target":"419","id":"6100","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"34","target":"546","id":"2260","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"259","target":"706","id":"6728","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"289","target":"532","id":"7228","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"6","target":"680","id":"1600","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"349","target":"643","id":"8073","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"93","target":"180","id":"3597","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"326","target":"544","id":"7755","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"295","target":"355","id":"7314","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"128","target":"588","id":"4321","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"626","target":"662","id":"10441","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"207","target":"230","id":"5856","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"17","target":"317","id":"1854","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"287","target":"451","id":"7185","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"610","target":"690","id":"10370","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"335","target":"616","id":"7890","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"275","target":"357","id":"6980","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"566","target":"659","id":"10140","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"330","target":"399","id":"7818","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"120","target":"429","id":"4162","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"564","target":"581","id":"10130","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"98","target":"372","id":"3712","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"442","target":"577","id":"9188","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"154","target":"719","id":"4883","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"71","target":"627","id":"3125","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"16","target":"174","id":"1829","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"87","target":"675","id":"3479","attributes":{"Weight":"1.0"},"color":"rgb(213,148,148)","size":1.0},{"source":"54","target":"70","id":"2691","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"505","target":"702","id":"9750","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"241","target":"578","id":"6421","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"422","target":"447","id":"8931","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"326","target":"683","id":"7757","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"54","target":"645","id":"2721","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"157","target":"240","id":"4924","attributes":{"Weight":"1.0"},"color":"rgb(180,132,148)","size":1.0},{"source":"239","target":"391","id":"6393","attributes":{"Weight":"1.0"},"color":"rgb(229,99,115)","size":1.0},{"source":"162","target":"364","id":"5023","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"213","target":"635","id":"5968","attributes":{"Weight":"1.0"},"color":"rgb(116,229,67)","size":1.0},{"source":"248","target":"448","id":"6533","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"425","target":"728","id":"8981","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"277","target":"332","id":"7005","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"103","target":"275","id":"3809","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"378","target":"588","id":"8403","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"425","target":"543","id":"8971","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"179","target":"654","id":"5363","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"101","target":"207","id":"3766","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"349","target":"591","id":"8071","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"64","target":"249","id":"2958","attributes":{"Weight":"1.0"},"color":"rgb(213,180,67)","size":1.0},{"source":"462","target":"707","id":"9389","attributes":{"Weight":"1.0"},"color":"rgb(67,229,180)","size":1.0},{"source":"65","target":"664","id":"2990","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"596","target":"723","id":"10314","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"260","target":"610","id":"6744","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"337","target":"579","id":"7918","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"39","target":"121","id":"2355","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"285","target":"438","id":"7149","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"14","target":"702","id":"1798","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"97","target":"173","id":"3685","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"166","target":"397","id":"5104","attributes":{"Weight":"1.0"},"color":"rgb(229,132,132)","size":1.0},{"source":"250","target":"694","id":"6578","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"258","target":"713","id":"6712","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"184","target":"302","id":"5443","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"421","target":"472","id":"8916","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"508","target":"543","id":"9769","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"117","target":"134","id":"4094","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"7","target":"661","id":"1619","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"389","target":"467","id":"8555","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"316","target":"327","id":"7606","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"6","target":"518","id":"1597","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"32","target":"255","id":"2191","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"33","target":"245","id":"2222","attributes":{"Weight":"1.0"},"color":"rgb(229,99,132)","size":1.0},{"source":"80","target":"575","id":"3318","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"144","target":"308","id":"4655","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"131","target":"432","id":"4380","attributes":{"Weight":"1.0"},"color":"rgb(180,115,148)","size":1.0},{"source":"32","target":"660","id":"2203","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"61","target":"678","id":"2895","attributes":{"Weight":"1.0"},"color":"rgb(132,148,196)","size":1.0},{"source":"210","target":"278","id":"5900","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"453","target":"690","id":"9289","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"54","target":"719","id":"2722","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"80","target":"335","id":"3314","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"34","target":"318","id":"2254","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"31","target":"701","id":"2184","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"582","target":"655","id":"10252","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"211","target":"487","id":"5925","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"224","target":"443","id":"6153","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"82","target":"573","id":"3360","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"614","target":"687","id":"10397","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"268","target":"731","id":"6882","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"517","target":"678","id":"9832","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"610","target":"692","id":"10371","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"398","target":"702","id":"8679","attributes":{"Weight":"1.0"},"color":"rgb(115,148,164)","size":1.0},{"source":"515","target":"620","id":"9810","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"133","target":"659","id":"4430","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"283","target":"330","id":"7117","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"264","target":"466","id":"6804","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"8","target":"527","id":"1644","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"161","target":"553","id":"5006","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"205","target":"582","id":"5832","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"129","target":"164","id":"4326","attributes":{"Weight":"1.0"},"color":"rgb(229,132,132)","size":1.0},{"source":"530","target":"683","id":"9946","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"44","target":"179","id":"2463","attributes":{"Weight":"1.0"},"color":"rgb(67,229,148)","size":1.0},{"source":"225","target":"419","id":"6171","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"675","target":"728","id":"10618","attributes":{"Weight":"1.0"},"color":"rgb(213,148,148)","size":1.0},{"source":"212","target":"645","id":"5952","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"230","target":"484","id":"6256","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"16","target":"733","id":"1842","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"61","target":"314","id":"2873","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"370","target":"630","id":"8288","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"360","target":"388","id":"8183","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"421","target":"594","id":"8925","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"76","target":"663","id":"3238","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"9","target":"236","id":"1669","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"242","target":"544","id":"6442","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"82","target":"623","id":"3364","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"456","target":"536","id":"9323","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"225","target":"424","id":"6172","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"401","target":"557","id":"8712","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"392","target":"414","id":"8601","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"121","target":"461","id":"4184","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"285","target":"650","id":"7156","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"38","target":"517","id":"2348","attributes":{"Weight":"1.0"},"color":"rgb(148,213,115)","size":1.0},{"source":"181","target":"219","id":"5388","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"492","target":"535","id":"9635","attributes":{"Weight":"1.0"},"color":"rgb(116,67,229)","size":1.0},{"source":"6","target":"310","id":"1587","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"384","target":"707","id":"8499","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"67","target":"697","id":"3031","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"437","target":"520","id":"9118","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"28","target":"720","id":"2122","attributes":{"Weight":"1.0"},"color":"rgb(148,99,213)","size":1.0},{"source":"225","target":"451","id":"6174","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"572","target":"719","id":"10184","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"27","target":"80","id":"2058","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"279","target":"572","id":"7048","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"115","target":"342","id":"4051","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"63","target":"257","id":"2929","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"182","target":"488","id":"5407","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"311","target":"384","id":"7539","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"387","target":"664","id":"8542","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"263","target":"669","id":"6795","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"131","target":"511","id":"4382","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"63","target":"485","id":"2935","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"164","target":"720","id":"5075","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"70","target":"608","id":"3102","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"283","target":"414","id":"7130","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"40","target":"598","id":"2391","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"98","target":"718","id":"3724","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"238","target":"335","id":"6371","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"640","target":"733","id":"10504","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"132","target":"512","id":"4413","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"119","target":"378","id":"4139","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"405","target":"658","id":"8760","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"313","target":"468","id":"7570","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"398","target":"632","id":"8672","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"155","target":"643","id":"4901","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"377","target":"414","id":"8388","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"135","target":"489","id":"4469","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"31","target":"309","id":"2176","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"102","target":"595","id":"3801","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"509","target":"592","id":"9781","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"25","target":"51","id":"2018","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"445","target":"483","id":"9219","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"21","target":"25","id":"1935","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"50","target":"164","id":"2608","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"203","target":"374","id":"5787","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"227","target":"569","id":"6206","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"384","target":"685","id":"8497","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"18","target":"628","id":"1882","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"140","target":"687","id":"4583","attributes":{"Weight":"1.0"},"color":"rgb(67,229,148)","size":1.0},{"source":"78","target":"495","id":"3271","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"52","target":"456","id":"2659","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"42","target":"428","id":"2424","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"220","target":"340","id":"6079","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"269","target":"658","id":"6902","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"98","target":"367","id":"3711","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"212","target":"487","id":"5945","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"545","target":"556","id":"10034","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"39","target":"463","id":"2369","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"96","target":"370","id":"3678","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"190","target":"706","id":"5568","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"244","target":"613","id":"6471","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"635","target":"637","id":"10474","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"313","target":"477","id":"7573","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"200","target":"597","id":"5744","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"69","target":"285","id":"3061","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"250","target":"674","id":"6577","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"587","target":"597","id":"10271","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"256","target":"276","id":"6665","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"147","target":"455","id":"4730","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"136","target":"712","id":"4497","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"144","target":"606","id":"4669","attributes":{"Weight":"1.0"},"color":"rgb(132,148,180)","size":1.0},{"source":"319","target":"349","id":"7654","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"284","target":"306","id":"7137","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"195","target":"605","id":"5649","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"628","target":"664","id":"10446","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"421","target":"508","id":"8918","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"101","target":"361","id":"3776","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"21","target":"708","id":"1954","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"184","target":"312","id":"5444","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"154","target":"224","id":"4862","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"174","target":"704","id":"5259","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"10","target":"153","id":"1689","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"84","target":"533","id":"3400","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"18","target":"383","id":"1875","attributes":{"Weight":"1.0"},"color":"rgb(67,229,148)","size":1.0},{"source":"198","target":"538","id":"5705","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"260","target":"665","id":"6746","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"306","target":"380","id":"7475","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"235","target":"489","id":"6336","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"1","target":"519","id":"1477","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"665","target":"723","id":"10601","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"46","target":"675","id":"2541","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"127","target":"715","id":"4303","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"81","target":"620","id":"3342","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"216","target":"618","id":"6022","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"54","target":"202","id":"2693","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"192","target":"666","id":"5595","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"177","target":"221","id":"5303","attributes":{"Weight":"1.0"},"color":"rgb(67,229,180)","size":1.0},{"source":"183","target":"462","id":"5423","attributes":{"Weight":"1.0"},"color":"rgb(99,229,148)","size":1.0},{"source":"185","target":"728","id":"5477","attributes":{"Weight":"1.0"},"color":"rgb(229,132,148)","size":1.0},{"source":"60","target":"150","id":"2837","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"287","target":"462","id":"7186","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"179","target":"586","id":"5359","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"269","target":"390","id":"6887","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"16","target":"439","id":"1833","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"176","target":"700","id":"5299","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"8","target":"460","id":"1642","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"114","target":"257","id":"4027","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"52","target":"197","id":"2651","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"122","target":"266","id":"4192","attributes":{"Weight":"1.0"},"color":"rgb(115,229,115)","size":1.0},{"source":"95","target":"244","id":"3646","attributes":{"Weight":"1.0"},"color":"rgb(213,148,148)","size":1.0},{"source":"416","target":"481","id":"8862","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"342","target":"403","id":"7978","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"114","target":"421","id":"4031","attributes":{"Weight":"1.0"},"color":"rgb(196,67,229)","size":1.0},{"source":"177","target":"218","id":"5302","attributes":{"Weight":"1.0"},"color":"rgb(67,196,180)","size":1.0},{"source":"82","target":"614","id":"3363","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"192","target":"315","id":"5586","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"548","target":"710","id":"10054","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"65","target":"340","id":"2980","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"71","target":"146","id":"3109","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"159","target":"257","id":"4963","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"137","target":"306","id":"4504","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"225","target":"287","id":"6168","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"117","target":"700","id":"4111","attributes":{"Weight":"1.0"},"color":"rgb(100,148,148)","size":1.0},{"source":"208","target":"541","id":"5881","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"195","target":"493","id":"5642","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"668","target":"713","id":"10607","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"280","target":"331","id":"7058","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"469","target":"514","id":"9446","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"87","target":"185","id":"3455","attributes":{"Weight":"1.0"},"color":"rgb(229,132,148)","size":1.0},{"source":"677","target":"685","id":"10623","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"197","target":"700","id":"5696","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"79","target":"375","id":"3285","attributes":{"Weight":"1.0"},"color":"rgb(83,229,115)","size":1.0},{"source":"156","target":"242","id":"4908","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"537","target":"706","id":"9993","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"214","target":"320","id":"5975","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"632","target":"671","id":"10462","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"448","target":"520","id":"9241","attributes":{"Weight":"1.0"},"color":"rgb(148,229,132)","size":1.0},{"source":"211","target":"618","id":"5929","attributes":{"Weight":"1.0"},"color":"rgb(148,196,148)","size":1.0},{"source":"524","target":"637","id":"9889","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"189","target":"230","id":"5532","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"454","target":"577","id":"9300","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"29","target":"310","id":"2129","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"298","target":"479","id":"7362","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"79","target":"623","id":"3299","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"141","target":"482","id":"4599","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"211","target":"642","id":"5930","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"438","target":"724","id":"9134","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"189","target":"361","id":"5539","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"329","target":"464","id":"7801","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"259","target":"363","id":"6714","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"525","target":"567","id":"9896","attributes":{"Weight":"1.0"},"color":"rgb(148,115,213)","size":1.0},{"source":"475","target":"614","id":"9519","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"122","target":"454","id":"4198","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"15","target":"97","id":"1800","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"661","target":"693","id":"10590","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"477","target":"680","id":"9536","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"183","target":"736","id":"5439","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"110","target":"719","id":"3957","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"200","target":"579","id":"5741","attributes":{"Weight":"1.0"},"color":"rgb(67,180,164)","size":1.0},{"source":"543","target":"589","id":"10025","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"258","target":"575","id":"6704","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"3","target":"634","id":"1530","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"633","target":"635","id":"10465","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"35","target":"570","id":"2280","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"196","target":"421","id":"5660","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"336","target":"448","id":"7902","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"87","target":"440","id":"3463","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"374","target":"611","id":"8343","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"220","target":"709","id":"6091","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"205","target":"585","id":"5833","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"15","target":"296","id":"1807","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"44","target":"454","id":"2474","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"577","target":"611","id":"10217","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"327","target":"455","id":"7764","attributes":{"Weight":"1.0"},"color":"rgb(99,148,196)","size":1.0},{"source":"572","target":"629","id":"10180","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"441","target":"650","id":"9172","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"216","target":"703","id":"6027","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"243","target":"439","id":"6449","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"289","target":"567","id":"7231","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"440","target":"472","id":"9150","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"372","target":"549","id":"8314","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"39","target":"129","id":"2356","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"468","target":"680","id":"9444","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"114","target":"398","id":"4030","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"205","target":"525","id":"5829","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"234","target":"304","id":"6314","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"302","target":"736","id":"7430","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"364","target":"665","id":"8224","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"267","target":"509","id":"6855","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"263","target":"539","id":"6790","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"166","target":"607","id":"5110","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"312","target":"497","id":"7556","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"412","target":"413","id":"8828","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"109","target":"119","id":"3908","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"264","target":"281","id":"6797","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"68","target":"697","id":"3053","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"287","target":"487","id":"7188","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"59","target":"422","id":"2823","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"58","target":"452","id":"2806","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"524","target":"635","id":"9887","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"414","target":"658","id":"8844","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"15","target":"195","id":"1803","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"277","target":"424","id":"7007","attributes":{"Weight":"1.0"},"color":"rgb(148,196,148)","size":1.0},{"source":"136","target":"336","id":"4485","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"174","target":"640","id":"5256","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"202","target":"221","id":"5767","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"125","target":"404","id":"4253","attributes":{"Weight":"1.0"},"color":"rgb(132,229,132)","size":1.0},{"source":"43","target":"437","id":"2448","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"569","target":"572","id":"10156","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"457","target":"630","id":"9331","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"425","target":"508","id":"8968","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"351","target":"456","id":"8093","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"114","target":"682","id":"4044","attributes":{"Weight":"1.0"},"color":"rgb(180,67,229)","size":1.0},{"source":"500","target":"505","id":"9705","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"47","target":"696","id":"2563","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"451","target":"462","id":"9267","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"307","target":"479","id":"7492","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"110","target":"150","id":"3930","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"315","target":"380","id":"7597","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"384","target":"625","id":"8492","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"23","target":"698","id":"1993","attributes":{"Weight":"1.0"},"color":"rgb(180,67,148)","size":1.0},{"source":"103","target":"581","id":"3821","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"244","target":"314","id":"6459","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"38","target":"461","id":"2345","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"113","target":"278","id":"4009","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"1","target":"108","id":"1466","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"527","target":"612","id":"9913","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"33","target":"50","id":"2207","attributes":{"Weight":"1.0"},"color":"rgb(229,99,132)","size":1.0},{"source":"241","target":"692","id":"6428","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"466","target":"651","id":"9422","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"309","target":"332","id":"7515","attributes":{"Weight":"1.0"},"color":"rgb(148,115,148)","size":1.0},{"source":"317","target":"355","id":"7628","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"182","target":"533","id":"5408","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"88","target":"241","id":"3487","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"504","target":"692","id":"9740","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"208","target":"459","id":"5873","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"14","target":"292","id":"1782","attributes":{"Weight":"1.0"},"color":"rgb(148,148,83)","size":1.0},{"source":"41","target":"584","id":"2408","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"633","target":"688","id":"10469","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"7","target":"339","id":"1609","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"373","target":"720","id":"8330","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"26","target":"123","id":"2039","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"263","target":"299","id":"6781","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"447","target":"481","id":"9234","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"228","target":"489","id":"6225","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"291","target":"670","id":"7270","attributes":{"Weight":"1.0"},"color":"rgb(132,229,132)","size":1.0},{"source":"12","target":"319","id":"1738","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"433","target":"577","id":"9077","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"345","target":"613","id":"8020","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"25","target":"243","id":"2022","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"178","target":"427","id":"5335","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"454","target":"614","id":"9302","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"402","target":"696","id":"8729","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"323","target":"529","id":"7713","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"157","target":"175","id":"4922","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"473","target":"728","id":"9501","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"88","target":"723","id":"3511","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"541","target":"620","id":"10015","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"29","target":"471","id":"2135","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"8","target":"311","id":"1636","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"106","target":"304","id":"3862","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"3","target":"607","id":"1529","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"37","target":"626","id":"2323","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"149","target":"682","id":"4775","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"176","target":"551","id":"5296","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"109","target":"501","id":"3921","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"183","target":"204","id":"5416","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"251","target":"401","id":"6586","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"492","target":"609","id":"9639","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"254","target":"545","id":"6639","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"169","target":"275","id":"5150","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"28","target":"33","id":"2086","attributes":{"Weight":"1.0"},"color":"rgb(148,132,148)","size":1.0},{"source":"108","target":"435","id":"3896","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"193","target":"724","id":"5612","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"320","target":"362","id":"7677","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"74","target":"654","id":"3186","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"323","target":"699","id":"7718","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"77","target":"310","id":"3246","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"353","target":"595","id":"8122","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"36","target":"315","id":"2295","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"547","target":"567","id":"10046","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"199","target":"274","id":"5717","attributes":{"Weight":"1.0"},"color":"rgb(67,196,213)","size":1.0},{"source":"7","target":"692","id":"1622","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"136","target":"506","id":"4492","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"571","target":"703","id":"10176","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"460","target":"679","id":"9370","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"190","target":"254","id":"5552","attributes":{"Weight":"1.0"},"color":"rgb(148,148,100)","size":1.0},{"source":"14","target":"574","id":"1791","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"42","target":"716","id":"2436","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"233","target":"443","id":"6303","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"61","target":"171","id":"2871","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"459","target":"470","id":"9347","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"127","target":"639","id":"4299","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"43","target":"347","id":"2445","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"18","target":"43","id":"1865","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"277","target":"636","id":"7019","attributes":{"Weight":"1.0"},"color":"rgb(180,196,67)","size":1.0},{"source":"154","target":"462","id":"4873","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"161","target":"398","id":"5003","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"522","target":"532","id":"9865","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"275","target":"667","id":"6991","attributes":{"Weight":"1.0"},"color":"rgb(67,229,99)","size":1.0},{"source":"161","target":"726","id":"5014","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"193","target":"281","id":"5597","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"41","target":"273","id":"2399","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"468","target":"515","id":"9440","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"495","target":"666","id":"9667","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"166","target":"226","id":"5099","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"50","target":"316","id":"2612","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"435","target":"526","id":"9099","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"41","target":"570","id":"2407","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"176","target":"464","id":"5292","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"245","target":"629","id":"6492","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"438","target":"647","id":"9129","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"140","target":"384","id":"4564","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"196","target":"508","id":"5665","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"485","target":"726","id":"9584","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"387","target":"670","id":"8543","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"68","target":"684","id":"3051","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"329","target":"563","id":"7806","attributes":{"Weight":"1.0"},"color":"rgb(164,148,148)","size":1.0},{"source":"67","target":"684","id":"3029","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"26","target":"447","id":"2048","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"538","target":"636","id":"9996","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"197","target":"367","id":"5684","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"312","target":"684","id":"7564","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"268","target":"560","id":"6879","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"611","target":"614","id":"10375","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"437","target":"628","id":"9120","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"197","target":"615","id":"5695","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"110","target":"591","id":"3951","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"298","target":"307","id":"7353","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"610","target":"723","id":"10374","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"73","target":"697","id":"3167","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"179","target":"527","id":"5356","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"387","target":"503","id":"8537","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"74","target":"179","id":"3172","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"374","target":"385","id":"8331","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"138","target":"346","id":"4520","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"326","target":"406","id":"7750","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"268","target":"377","id":"6865","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"482","target":"622","id":"9566","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"317","target":"446","id":"7630","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"72","target":"190","id":"3131","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"146","target":"407","id":"4712","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"161","target":"632","id":"5008","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"425","target":"663","id":"8978","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"107","target":"278","id":"3877","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"133","target":"325","id":"4418","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"142","target":"187","id":"4608","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"390","target":"405","id":"8568","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"41","target":"467","id":"2405","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"300","target":"469","id":"7391","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"122","target":"203","id":"4191","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"652","target":"667","id":"10560","attributes":{"Weight":"1.0"},"color":"rgb(148,196,99)","size":1.0},{"source":"502","target":"683","id":"9725","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"402","target":"656","id":"8725","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"394","target":"399","id":"8621","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"358","target":"600","id":"8166","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"205","target":"494","id":"5827","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"249","target":"481","id":"6552","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"519","target":"605","id":"9844","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"382","target":"689","id":"8465","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"266","target":"610","id":"6838","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"299","target":"384","id":"7371","attributes":{"Weight":"1.0"},"color":"rgb(99,148,180)","size":1.0},{"source":"346","target":"404","id":"8028","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"8","target":"576","id":"1648","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"52","target":"426","id":"2657","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"329","target":"551","id":"7805","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"146","target":"627","id":"4718","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"360","target":"617","id":"8190","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"296","target":"450","id":"7325","attributes":{"Weight":"1.0"},"color":"rgb(67,196,229)","size":1.0},{"source":"88","target":"271","id":"3491","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"246","target":"474","id":"6502","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"375","target":"678","id":"8360","attributes":{"Weight":"1.0"},"color":"rgb(83,229,115)","size":1.0},{"source":"436","target":"490","id":"9107","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"532","target":"677","id":"9955","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"363","target":"597","id":"8211","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"418","target":"494","id":"8881","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"264","target":"382","id":"6800","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"81","target":"477","id":"3337","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"264","target":"689","id":"6810","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"423","target":"545","id":"8942","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"349","target":"529","id":"8068","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"165","target":"240","id":"5082","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"45","target":"249","id":"2499","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"200","target":"342","id":"5732","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"545","target":"694","id":"10040","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"396","target":"417","id":"8643","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"719","target":"720","id":"10674","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"549","target":"615","id":"10057","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"264","target":"441","id":"6802","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"732","target":"733","id":"10690","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"28","target":"407","id":"2107","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"319","target":"608","id":"7669","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"111","target":"489","id":"3976","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"36","target":"66","id":"2287","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"37","target":"182","id":"2311","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"17","target":"256","id":"1849","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"459","target":"518","id":"9352","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"403","target":"537","id":"8732","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"248","target":"588","id":"6538","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"28","target":"705","id":"2121","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"46","target":"404","id":"2527","attributes":{"Weight":"1.0"},"color":"rgb(132,229,132)","size":1.0},{"source":"136","target":"248","id":"4484","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"391","target":"412","id":"8585","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"441","target":"466","id":"9168","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"589","target":"604","id":"10280","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"500","target":"691","id":"9711","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"98","target":"427","id":"3714","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"26","target":"291","id":"2045","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"409","target":"508","id":"8796","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"69","target":"466","id":"3070","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"484","target":"512","id":"9573","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"123","target":"249","id":"4214","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"237","target":"416","id":"6357","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"249","target":"675","id":"6558","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"360","target":"506","id":"8186","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"560","target":"561","id":"10110","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"190","target":"200","id":"5550","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"148","target":"686","id":"4757","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"12","target":"221","id":"1734","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"3","target":"240","id":"1521","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"240","target":"359","id":"6399","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"278","target":"579","id":"7029","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"378","target":"647","id":"8405","attributes":{"Weight":"1.0"},"color":"rgb(148,164,148)","size":1.0},{"source":"298","target":"680","id":"7367","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"92","target":"700","id":"3593","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"335","target":"434","id":"7883","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"171","target":"659","id":"5207","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"305","target":"595","id":"7472","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"388","target":"448","id":"8546","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"174","target":"439","id":"5253","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"199","target":"346","id":"5719","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"198","target":"637","id":"5709","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"33","target":"209","id":"2217","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"294","target":"720","id":"7311","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"319","target":"462","id":"7662","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"19","target":"237","id":"1895","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"246","target":"657","id":"6510","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"163","target":"343","id":"5043","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"38","target":"129","id":"2331","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"13","target":"599","id":"1771","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"149","target":"606","id":"4771","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"13","target":"40","id":"1753","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"189","target":"344","id":"5537","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"131","target":"277","id":"4373","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"526","target":"722","id":"9910","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"164","target":"397","id":"5065","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"156","target":"265","id":"4909","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"194","target":"587","id":"5629","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"443","target":"676","id":"9205","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"54","target":"571","id":"2714","attributes":{"Weight":"1.0"},"color":"rgb(148,196,148)","size":1.0},{"source":"90","target":"530","id":"3549","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"557","target":"660","id":"10097","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"123","target":"675","id":"4227","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"458","target":"541","id":"9342","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"300","target":"542","id":"7395","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"464","target":"609","id":"9401","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"23","target":"732","id":"1996","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"647","target":"734","id":"10537","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"149","target":"534","id":"4769","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"101","target":"112","id":"3762","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"70","target":"600","id":"3101","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"373","target":"685","id":"8328","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"532","target":"704","id":"9958","attributes":{"Weight":"1.0"},"color":"rgb(148,148,99)","size":1.0},{"source":"3","target":"430","id":"1524","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"65","target":"590","id":"2988","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"161","target":"246","id":"4999","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"196","target":"304","id":"5655","attributes":{"Weight":"1.0"},"color":"rgb(148,67,229)","size":1.0},{"source":"373","target":"643","id":"8325","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"1","target":"655","id":"1484","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"39","target":"165","id":"2357","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"455","target":"469","id":"9308","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"98","target":"536","id":"3718","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"443","target":"699","id":"9206","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"632","target":"638","id":"10459","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"461","target":"486","id":"9376","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"355","target":"446","id":"8131","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"32","target":"254","id":"2190","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"163","target":"206","id":"5040","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"246","target":"485","id":"6503","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"418","target":"526","id":"8884","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"414","target":"561","id":"8843","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"271","target":"339","id":"6918","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"104","target":"276","id":"3828","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"157","target":"434","id":"4930","attributes":{"Weight":"1.0"},"color":"rgb(99,148,180)","size":1.0},{"source":"107","target":"407","id":"3880","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"77","target":"471","id":"3252","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"695","target":"732","id":"10659","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"545","target":"558","id":"10036","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"50","target":"155","id":"2607","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"85","target":"586","id":"3427","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"11","target":"118","id":"1708","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"67","target":"270","id":"3018","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"314","target":"496","id":"7587","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"435","target":"519","id":"9097","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"242","target":"375","id":"6436","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"173","target":"582","id":"5244","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"347","target":"664","id":"8044","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"5","target":"27","id":"1554","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"456","target":"700","id":"9328","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"434","target":"616","id":"9092","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"150","target":"294","id":"4782","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"454","target":"455","id":"9294","attributes":{"Weight":"1.0"},"color":"rgb(99,148,196)","size":1.0},{"source":"36","target":"584","id":"2301","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"504","target":"610","id":"9736","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"290","target":"393","id":"7243","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"23","target":"708","id":"1995","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"268","target":"658","id":"6881","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"127","target":"160","id":"4286","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"97","target":"493","id":"3694","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"92","target":"427","id":"3584","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"48","target":"704","id":"2576","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"154","target":"371","id":"4870","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"468","target":"686","id":"9445","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"107","target":"321","id":"3878","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"29","target":"479","id":"2137","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"578","target":"692","id":"10232","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"276","target":"446","id":"6997","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"45","target":"58","id":"2492","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"170","target":"696","id":"5189","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"28","target":"321","id":"2103","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"47","target":"694","id":"2562","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"490","target":"586","id":"9615","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"455","target":"678","id":"9317","attributes":{"Weight":"1.0"},"color":"rgb(99,148,196)","size":1.0},{"source":"268","target":"394","id":"6870","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"297","target":"621","id":"7344","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"41","target":"389","id":"2404","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"53","target":"497","id":"2679","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"53","target":"68","id":"2670","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"382","target":"441","id":"8452","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"95","target":"163","id":"3644","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"303","target":"679","id":"7448","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"139","target":"616","id":"4551","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"578","target":"721","id":"10234","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"145","target":"316","id":"4680","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"507","target":"566","id":"9759","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"180","target":"652","id":"5385","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"202","target":"451","id":"5776","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"87","target":"521","id":"3469","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"349","target":"368","id":"8061","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"118","target":"220","id":"4114","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"58","target":"123","id":"2793","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"300","target":"301","id":"7387","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"367","target":"372","id":"8252","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"21","target":"23","id":"1933","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"325","target":"507","id":"7736","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"34","target":"317","id":"2253","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"605","target":"655","id":"10350","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"215","target":"364","id":"5990","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"261","target":"608","id":"6768","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"194","target":"379","id":"5622","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"178","target":"718","id":"5345","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"422","target":"478","id":"8934","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"61","target":"721","id":"2899","attributes":{"Weight":"1.0"},"color":"rgb(180,148,148)","size":1.0},{"source":"79","target":"517","id":"3294","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"3","target":"129","id":"1513","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"246","target":"632","id":"6507","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"147","target":"175","id":"4722","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"422","target":"675","id":"8940","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"80","target":"576","id":"3319","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"8","target":"74","id":"1628","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"329","target":"718","id":"7810","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"144","target":"258","id":"4653","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"117","target":"341","id":"4100","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"238","target":"348","id":"6373","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"468","target":"518","id":"9441","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"231","target":"232","id":"6258","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"392","target":"412","id":"8599","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"81","target":"518","id":"3340","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"56","target":"679","id":"2764","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"140","target":"522","id":"4571","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"440","target":"473","id":"9151","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"355","target":"357","id":"8130","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"244","target":"534","id":"6468","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"130","target":"309","id":"4355","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"115","target":"190","id":"4047","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"259","target":"383","id":"6716","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"46","target":"461","id":"2533","attributes":{"Weight":"1.0"},"color":"rgb(213,213,67)","size":1.0},{"source":"21","target":"704","id":"1953","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"543","target":"594","id":"10026","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"220","target":"387","id":"6082","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"402","target":"410","id":"8719","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"246","target":"297","id":"6498","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"619","target":"652","id":"10410","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"491","target":"646","id":"9624","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"112","target":"445","id":"4001","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"80","target":"308","id":"3313","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"685","target":"707","id":"10635","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"242","target":"265","id":"6432","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"166","target":"430","id":"5105","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"171","target":"244","id":"5191","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"180","target":"428","id":"5376","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"198","target":"635","id":"5707","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"180","target":"601","id":"5382","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"97","target":"418","id":"3691","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"170","target":"674","id":"5187","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"283","target":"377","id":"7118","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"151","target":"227","id":"4806","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"608","target":"645","id":"10363","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"695","target":"704","id":"10657","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"155","target":"629","id":"4900","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"477","target":"518","id":"9533","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"404","target":"437","id":"8741","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"438","target":"730","id":"9137","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"311","target":"679","id":"7553","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"553","target":"639","id":"10074","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"55","target":"147","id":"2725","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"517","target":"687","id":"9833","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"101","target":"132","id":"3764","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"20","target":"62","id":"1910","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"52","target":"92","id":"2647","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"261","target":"358","id":"6755","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"50","target":"110","id":"2602","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"165","target":"191","id":"5080","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"458","target":"515","id":"9340","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"332","target":"593","id":"7848","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"296","target":"435","id":"7324","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"245","target":"591","id":"6491","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"168","target":"461","id":"5138","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"130","target":"181","id":"4350","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"144","target":"646","id":"4671","attributes":{"Weight":"1.0"},"color":"rgb(67,164,180)","size":1.0},{"source":"226","target":"711","id":"6193","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"143","target":"301","id":"4633","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"60","target":"236","id":"2843","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"653","target":"698","id":"10564","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"16","target":"292","id":"1831","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"127","target":"159","id":"4285","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"17","target":"169","id":"1847","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"168","target":"240","id":"5133","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"58","target":"517","id":"2810","attributes":{"Weight":"1.0"},"color":"rgb(132,229,115)","size":1.0},{"source":"139","target":"308","id":"4539","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"435","target":"605","id":"9102","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"405","target":"412","id":"8754","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"129","target":"634","id":"4345","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"53","target":"636","id":"2685","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"394","target":"411","id":"8623","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"421","target":"523","id":"8920","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"319","target":"358","id":"7655","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"171","target":"682","id":"5209","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"271","target":"721","id":"6932","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"383","target":"505","id":"8474","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"346","target":"590","id":"8032","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"382","target":"734","id":"8470","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"559","target":"731","id":"10109","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"153","target":"366","id":"4851","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"33","target":"362","id":"2230","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"44","target":"480","id":"2476","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"43","target":"473","id":"2449","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"164","target":"349","id":"5061","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"273","target":"599","id":"6957","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"217","target":"407","id":"6033","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"320","target":"483","id":"7680","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"267","target":"581","id":"6859","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"212","target":"287","id":"5935","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"263","target":"535","id":"6789","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"147","target":"535","id":"4733","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"407","target":"627","id":"8774","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"636","target":"684","id":"10480","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"327","target":"614","id":"7772","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"309","target":"457","id":"7519","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"332","target":"716","id":"7855","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"187","target":"698","id":"5510","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"248","target":"617","id":"6539","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"27","target":"433","id":"2072","attributes":{"Weight":"1.0"},"color":"rgb(67,229,148)","size":1.0},{"source":"173","target":"195","id":"5232","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"89","target":"621","id":"3525","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"501","target":"712","id":"9719","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"447","target":"478","id":"9233","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"469","target":"542","id":"9449","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"72","target":"649","id":"3146","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"442","target":"573","id":"9187","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"424","target":"608","id":"8959","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"316","target":"687","id":"7623","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"537","target":"574","id":"9986","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"416","target":"565","id":"8865","attributes":{"Weight":"1.0"},"color":"rgb(213,148,148)","size":1.0},{"source":"154","target":"335","id":"4868","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"162","target":"215","id":"5015","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"207","target":"209","id":"5853","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"95","target":"388","id":"3652","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"395","target":"559","id":"8638","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"378","target":"727","id":"8407","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"27","target":"603","id":"2080","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"14","target":"75","id":"1775","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"185","target":"622","id":"5472","attributes":{"Weight":"1.0"},"color":"rgb(213,213,67)","size":1.0},{"source":"169","target":"317","id":"5154","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"57","target":"663","id":"2790","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"250","target":"656","id":"6575","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"5","target":"231","id":"1560","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"418","target":"605","id":"8887","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"356","target":"402","id":"8140","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"155","target":"164","id":"4886","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"248","target":"563","id":"6537","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"514","target":"542","id":"9803","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"148","target":"620","id":"4755","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"221","target":"642","id":"6112","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"132","target":"320","id":"4405","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"83","target":"488","id":"3381","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"395","target":"414","id":"8637","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"184","target":"635","id":"5450","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"236","target":"710","id":"6353","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"331","target":"376","id":"7830","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"330","target":"658","id":"7828","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"601","target":"652","id":"10329","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"523","target":"604","id":"9880","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"36","target":"389","id":"2297","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"145","target":"442","id":"4688","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"412","target":"414","id":"8829","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"288","target":"663","id":"7217","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"525","target":"582","id":"9897","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"83","target":"579","id":"3383","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"27","target":"335","id":"2068","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"317","target":"318","id":"7627","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"24","target":"733","id":"2016","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"251","target":"254","id":"6581","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"85","target":"436","id":"3421","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"281","target":"689","id":"7089","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"352","target":"463","id":"8107","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"157","target":"653","id":"4942","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"16","target":"25","id":"1825","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"151","target":"431","id":"4817","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"2","target":"369","id":"1502","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"409","target":"679","id":"8808","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"69","target":"735","id":"3083","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"433","target":"475","id":"9071","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"58","target":"447","id":"2804","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"60","target":"710","id":"2863","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"189","target":"578","id":"5545","attributes":{"Weight":"1.0"},"color":"rgb(196,180,67)","size":1.0},{"source":"307","target":"459","id":"7487","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"262","target":"344","id":"6773","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"427","target":"700","id":"9001","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"336","target":"727","id":"7910","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"20","target":"406","id":"1924","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"244","target":"630","id":"6472","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"288","target":"472","id":"7202","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"125","target":"452","id":"4258","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"208","target":"470","id":"5875","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"67","target":"635","id":"3026","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"473","target":"533","id":"9493","attributes":{"Weight":"1.0"},"color":"rgb(148,99,229)","size":1.0},{"source":"132","target":"262","id":"4404","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"2","target":"10","id":"1486","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"94","target":"149","id":"3619","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"451","target":"555","id":"9269","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"140","target":"612","id":"4575","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"491","target":"651","id":"9627","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"311","target":"525","id":"7544","attributes":{"Weight":"1.0"},"color":"rgb(67,196,180)","size":1.0},{"source":"250","target":"558","id":"6573","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"466","target":"725","id":"9425","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"245","target":"349","id":"6480","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"486","target":"634","id":"9588","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"152","target":"506","id":"4839","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"185","target":"430","id":"5464","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"255","target":"656","id":"6658","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"231","target":"668","id":"6276","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"181","target":"457","id":"5395","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"104","target":"564","id":"3838","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"16","target":"243","id":"1830","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"46","target":"622","id":"2539","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"363","target":"403","id":"8204","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"241","target":"723","id":"6431","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"49","target":"276","id":"2588","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"397","target":"677","id":"8661","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"22","target":"733","id":"1977","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"70","target":"214","id":"3087","attributes":{"Weight":"1.0"},"color":"rgb(148,180,148)","size":1.0},{"source":"69","target":"633","id":"3072","attributes":{"Weight":"1.0"},"color":"rgb(99,164,148)","size":1.0},{"source":"183","target":"637","id":"5432","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"604","target":"706","id":"10347","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"407","target":"626","id":"8773","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"269","target":"391","id":"6888","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"312","target":"697","id":"7566","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"122","target":"475","id":"4199","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"78","target":"315","id":"3267","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"177","target":"679","id":"5324","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"86","target":"618","id":"3449","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"667","target":"707","id":"10605","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"43","target":"199","id":"2440","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"426","target":"700","id":"8991","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"101","target":"457","id":"3779","attributes":{"Weight":"1.0"},"color":"rgb(148,99,148)","size":1.0},{"source":"53","target":"204","id":"2675","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"211","target":"287","id":"5916","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"106","target":"219","id":"3860","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"292","target":"293","id":"7272","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"56","target":"460","id":"2755","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"8","target":"606","id":"1649","attributes":{"Weight":"1.0"},"color":"rgb(132,148,180)","size":1.0},{"source":"87","target":"409","id":"3460","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"263","target":"698","id":"6796","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"145","target":"687","id":"4700","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"289","target":"676","id":"7233","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"118","target":"272","id":"4115","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"134","target":"365","id":"4440","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"408","target":"625","id":"8782","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"23","target":"25","id":"1979","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"151","target":"547","id":"4822","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"218","target":"261","id":"6045","attributes":{"Weight":"1.0"},"color":"rgb(67,196,229)","size":1.0},{"source":"270","target":"635","id":"6911","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"398","target":"440","id":"8666","attributes":{"Weight":"1.0"},"color":"rgb(196,67,229)","size":1.0},{"source":"377","target":"395","id":"8382","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"689","target":"730","id":"10642","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"471","target":"620","id":"9473","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"34","target":"267","id":"2249","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"178","target":"609","id":"5342","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"185","target":"711","id":"5476","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"74","target":"386","id":"3176","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"39","target":"359","id":"2366","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"238","target":"627","id":"6383","attributes":{"Weight":"1.0"},"color":"rgb(67,180,180)","size":1.0},{"source":"161","target":"657","id":"5011","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"202","target":"358","id":"5772","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"511","target":"703","id":"9795","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"31","target":"181","id":"2172","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"217","target":"662","id":"6041","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"534","target":"682","id":"9972","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"10","target":"630","id":"1701","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"87","target":"589","id":"3474","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"622","target":"728","id":"10425","attributes":{"Weight":"1.0"},"color":"rgb(213,148,148)","size":1.0},{"source":"160","target":"639","id":"4994","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"11","target":"43","id":"1705","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"480","target":"614","id":"9555","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"113","target":"627","id":"4018","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"250","target":"254","id":"6561","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"56","target":"654","id":"2761","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"669","target":"698","id":"10608","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"205","target":"274","id":"5822","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"290","target":"413","id":"7250","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"456","target":"718","id":"9329","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"269","target":"394","id":"6891","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"616","target":"668","id":"10400","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"173","target":"296","id":"5236","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"384","target":"654","id":"8493","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"448","target":"563","id":"9243","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"563","target":"727","id":"10129","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"98","target":"426","id":"3713","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"486","target":"711","id":"9589","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"557","target":"694","id":"10099","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"219","target":"309","id":"6069","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"246","target":"322","id":"6499","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"73","target":"312","id":"3156","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"147","target":"432","id":"4728","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"605","target":"722","id":"10351","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"386","target":"408","id":"8517","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"349","target":"429","id":"8066","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"364","target":"438","id":"8216","attributes":{"Weight":"1.0"},"color":"rgb(115,164,148)","size":1.0},{"source":"339","target":"602","id":"7944","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"340","target":"347","id":"7954","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"219","target":"234","id":"6067","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"208","target":"468","id":"5874","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"303","target":"433","id":"7436","attributes":{"Weight":"1.0"},"color":"rgb(67,229,148)","size":1.0},{"source":"116","target":"606","id":"4088","attributes":{"Weight":"1.0"},"color":"rgb(132,148,180)","size":1.0},{"source":"407","target":"488","id":"8770","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"223","target":"230","id":"6130","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"64","target":"207","id":"2952","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"341","target":"476","id":"7968","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"109","target":"360","id":"3917","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"148","target":"479","id":"4751","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"225","target":"450","id":"6173","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"207","target":"512","id":"5867","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"376","target":"436","id":"8366","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"111","target":"429","id":"3975","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"31","target":"366","id":"2177","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"261","target":"645","id":"6770","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"207","target":"445","id":"5864","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"691","target":"706","id":"10650","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"20","target":"365","id":"1922","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"146","target":"533","id":"4715","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"436","target":"516","id":"9108","attributes":{"Weight":"1.0"},"color":"rgb(180,148,132)","size":1.0},{"source":"100","target":"304","id":"3752","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"233","target":"529","id":"6305","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"235","target":"499","id":"6337","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"110","target":"371","id":"3944","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"38","target":"165","id":"2332","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"351","target":"551","id":"8098","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"94","target":"534","id":"3631","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"390","target":"413","id":"8571","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"69","target":"729","id":"3080","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"197","target":"549","id":"5692","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"116","target":"139","id":"4066","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"288","target":"311","id":"7196","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"263","target":"514","id":"6788","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"281","target":"651","id":"7088","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"33","target":"349","id":"2227","attributes":{"Weight":"1.0"},"color":"rgb(229,99,132)","size":1.0},{"source":"50","target":"111","id":"2603","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"309","target":"645","id":"7522","attributes":{"Weight":"1.0"},"color":"rgb(67,148,229)","size":1.0},{"source":"310","target":"471","id":"7530","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"364","target":"610","id":"8222","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"10","target":"234","id":"1692","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"442","target":"455","id":"9182","attributes":{"Weight":"1.0"},"color":"rgb(99,148,196)","size":1.0},{"source":"105","target":"369","id":"3850","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"33","target":"111","id":"2210","attributes":{"Weight":"1.0"},"color":"rgb(229,99,132)","size":1.0},{"source":"34","target":"295","id":"2252","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"425","target":"490","id":"8967","attributes":{"Weight":"1.0"},"color":"rgb(229,67,213)","size":1.0},{"source":"125","target":"249","id":"4250","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"8","target":"562","id":"1647","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"563","target":"712","id":"10128","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"235","target":"548","id":"6338","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"26","target":"622","id":"2055","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"283","target":"395","id":"7124","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"251","target":"556","id":"6591","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"483","target":"484","id":"9569","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"398","target":"726","id":"8681","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"621","target":"638","id":"10416","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"358","target":"645","id":"8169","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"330","target":"412","id":"7821","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"218","target":"722","id":"6066","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"229","target":"510","id":"6242","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"249","target":"252","id":"6542","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"235","target":"368","id":"6334","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"422","target":"482","id":"8936","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"381","target":"571","id":"8442","attributes":{"Weight":"1.0"},"color":"rgb(229,115,148)","size":1.0},{"source":"623","target":"644","id":"10426","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"159","target":"226","id":"4961","attributes":{"Weight":"1.0"},"color":"rgb(196,132,148)","size":1.0},{"source":"86","target":"571","id":"3445","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"417","target":"496","id":"8869","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"394","target":"412","id":"8624","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"437","target":"670","id":"9122","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"391","target":"392","id":"8578","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"516","target":"696","id":"9821","attributes":{"Weight":"1.0"},"color":"rgb(180,148,83)","size":1.0},{"source":"27","target":"303","id":"2066","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"237","target":"482","id":"6364","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"74","target":"732","id":"3193","attributes":{"Weight":"1.0"},"color":"rgb(148,148,99)","size":1.0},{"source":"676","target":"717","id":"10620","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"3","target":"166","id":"1515","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"131","target":"619","id":"4390","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"491","target":"724","id":"9629","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"454","target":"573","id":"9299","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"310","target":"313","id":"7525","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"11","target":"711","id":"1728","attributes":{"Weight":"1.0"},"color":"rgb(148,213,132)","size":1.0},{"source":"239","target":"512","id":"6397","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"588","target":"712","id":"10277","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"353","target":"548","id":"8120","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"180","target":"619","id":"5384","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"475","target":"517","id":"9514","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"616","target":"681","id":"10401","attributes":{"Weight":"1.0"},"color":"rgb(83,229,99)","size":1.0},{"source":"224","target":"436","id":"6152","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"480","target":"498","id":"9550","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"202","target":"608","id":"5782","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"279","target":"699","id":"7053","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"79","target":"442","id":"3288","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"434","target":"603","id":"9091","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"245","target":"529","id":"6488","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"99","target":"457","id":"3739","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"79","target":"327","id":"3283","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"130","target":"554","id":"4365","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"9","target":"489","id":"1676","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"150","target":"460","id":"4789","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"522","target":"527","id":"9864","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"131","target":"703","id":"4394","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"45","target":"482","id":"2511","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"227","target":"547","id":"6205","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"85","target":"376","id":"3419","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"525","target":"605","id":"9899","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"88","target":"693","id":"3509","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"276","target":"318","id":"6994","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"254","target":"558","id":"6642","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"602","target":"693","id":"10338","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"276","target":"581","id":"7002","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"425","target":"604","id":"8976","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"293","target":"733","id":"7292","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"319","target":"645","id":"7672","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"12","target":"487","id":"1745","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"613","target":"673","id":"10391","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"626","target":"627","id":"10440","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"380","target":"598","id":"8425","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"198","target":"302","id":"5700","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"313","target":"680","id":"7579","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"327","target":"498","id":"7767","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"15","target":"218","id":"1805","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"42","target":"216","id":"2419","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"400","target":"558","id":"8701","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"232","target":"308","id":"6283","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"129","target":"461","id":"4340","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"386","target":"677","id":"8529","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"119","target":"550","id":"4144","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"281","target":"730","id":"7093","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"493","target":"519","id":"9644","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"277","target":"601","id":"7016","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"196","target":"288","id":"5654","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"470","target":"686","id":"9466","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"277","target":"286","id":"7004","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"103","target":"510","id":"3818","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"378","target":"712","id":"8406","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"12","target":"451","id":"1743","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"115","target":"500","id":"4056","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"288","target":"594","id":"7215","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"573","target":"614","id":"10188","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"32","target":"251","id":"2188","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"193","target":"651","id":"5610","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"280","target":"600","id":"7069","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"141","target":"291","id":"4590","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"476","target":"502","id":"9525","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"383","target":"500","id":"8473","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"358","target":"608","id":"8167","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"659","target":"682","id":"10582","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"280","target":"469","id":"7063","attributes":{"Weight":"1.0"},"color":"rgb(180,67,213)","size":1.0},{"source":"7","target":"497","id":"1613","attributes":{"Weight":"1.0"},"color":"rgb(148,229,67)","size":1.0},{"source":"22","target":"732","id":"1976","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"224","target":"462","id":"6154","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"132","target":"361","id":"4408","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"322","target":"639","id":"7702","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"83","target":"146","id":"3372","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"152","target":"206","id":"4830","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"170","target":"400","id":"5176","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"449","target":"676","id":"9255","attributes":{"Weight":"1.0"},"color":"rgb(213,148,132)","size":1.0},{"source":"41","target":"284","id":"2400","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"78","target":"598","id":"3274","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"495","target":"599","id":"9666","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"147","target":"653","id":"4737","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"191","target":"711","id":"5581","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"214","target":"445","id":"5980","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"135","target":"331","id":"4460","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"282","target":"651","id":"7107","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"6","target":"459","id":"1590","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"256","target":"510","id":"6673","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"167","target":"461","id":"5123","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"195","target":"525","id":"5645","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"200","target":"574","id":"5740","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"511","target":"652","id":"9794","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"57","target":"589","id":"2786","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"358","target":"487","id":"8164","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"133","target":"714","id":"4433","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"80","target":"258","id":"3311","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"117","target":"513","id":"4106","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"26","target":"46","id":"2036","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"69","target":"465","id":"3069","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"455","target":"535","id":"9310","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"601","target":"618","id":"10327","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"618","target":"619","id":"10406","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"115","target":"259","id":"4050","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"202","target":"555","id":"5780","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"144","target":"238","id":"4652","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"174","target":"540","id":"5254","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"104","target":"592","id":"3840","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"491","target":"725","id":"9630","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"206","target":"388","id":"5843","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"244","target":"714","id":"6476","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"87","target":"622","id":"3477","attributes":{"Weight":"1.0"},"color":"rgb(213,148,148)","size":1.0},{"source":"25","target":"174","id":"2021","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"200","target":"379","id":"5734","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"437","target":"590","id":"9119","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"88","target":"218","id":"3485","attributes":{"Weight":"1.0"},"color":"rgb(115,196,148)","size":1.0},{"source":"3","target":"359","id":"1523","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"421","target":"425","id":"8914","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"20","target":"126","id":"1914","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"159","target":"297","id":"4964","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"79","target":"82","id":"3277","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"241","target":"665","id":"6426","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"49","target":"256","id":"2585","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"405","target":"414","id":"8756","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"76","target":"421","id":"3220","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"53","target":"697","id":"2689","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"108","target":"205","id":"3891","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"51","target":"732","id":"2644","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"118","target":"628","id":"4126","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"222","target":"552","id":"6127","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"521","target":"603","id":"9859","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"282","target":"382","id":"7098","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"40","target":"584","id":"2390","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"242","target":"476","id":"6438","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"273","target":"666","id":"6958","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"336","target":"712","id":"7909","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"654","target":"677","id":"10567","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"444","target":"698","id":"9218","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"330","target":"559","id":"7824","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"120","target":"293","id":"4156","attributes":{"Weight":"1.0"},"color":"rgb(229,67,99)","size":1.0},{"source":"299","target":"444","id":"7374","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"84","target":"278","id":"3394","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"75","target":"500","id":"3204","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"184","target":"198","id":"5440","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"488","target":"705","id":"9602","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"283","target":"560","id":"7132","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"573","target":"623","id":"10189","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"23","target":"292","id":"1985","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"83","target":"627","id":"3385","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"154","target":"643","id":"4880","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"39","target":"226","id":"2363","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"400","target":"674","id":"8704","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"111","target":"397","id":"3973","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"207","target":"262","id":"5858","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"126","target":"683","id":"4284","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"334","target":"368","id":"7872","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"323","target":"436","id":"7710","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"286","target":"428","id":"7168","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"93","target":"200","id":"3599","attributes":{"Weight":"1.0"},"color":"rgb(148,196,83)","size":1.0},{"source":"516","target":"684","id":"9819","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"209","target":"344","id":"5891","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"255","target":"696","id":"6662","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"378","target":"550","id":"8400","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"65","target":"199","id":"2977","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"511","target":"619","id":"9793","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"165","target":"607","id":"5091","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"280","target":"431","id":"7060","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"351","target":"372","id":"8090","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"20","target":"544","id":"1929","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"1","target":"435","id":"1474","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"364","target":"723","id":"8230","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"216","target":"511","id":"6015","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"103","target":"276","id":"3810","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"417","target":"507","id":"8870","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"250","target":"251","id":"6559","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"64","target":"112","id":"2947","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"41","target":"598","id":"2409","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"236","target":"429","id":"6347","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"294","target":"571","id":"7302","attributes":{"Weight":"1.0"},"color":"rgb(229,115,132)","size":1.0},{"source":"489","target":"499","id":"9603","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"105","target":"457","id":"3852","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"176","target":"549","id":"5295","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"235","target":"595","id":"6340","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"165","target":"166","id":"5076","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"385","target":"623","id":"8512","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"150","target":"349","id":"4785","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"345","target":"350","id":"8012","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"338","target":"682","id":"7936","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"17","target":"592","id":"1864","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"49","target":"592","id":"2600","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"52","target":"351","id":"2654","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"374","target":"454","id":"8336","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"222","target":"429","id":"6123","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"301","target":"703","id":"7416","attributes":{"Weight":"1.0"},"color":"rgb(180,115,148)","size":1.0},{"source":"32","target":"423","id":"2197","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"233","target":"323","id":"6298","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"630","target":"672","id":"10454","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"363","target":"706","id":"8215","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"498","target":"543","id":"9690","attributes":{"Weight":"1.0"},"color":"rgb(148,148,196)","size":1.0},{"source":"401","target":"696","id":"8718","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"141","target":"516","id":"4600","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"101","target":"239","id":"3771","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"314","target":"682","id":"7595","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"67","target":"184","id":"3015","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"61","target":"244","id":"2872","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"393","target":"394","id":"8607","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"71","target":"107","id":"3107","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"309","target":"672","id":"7523","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"419","target":"489","id":"8897","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"33","target":"64","id":"2208","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"154","target":"629","id":"4878","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"193","target":"729","id":"5614","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"337","target":"396","id":"7913","attributes":{"Weight":"1.0"},"color":"rgb(132,99,229)","size":1.0},{"source":"708","target":"733","id":"10671","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"42","target":"593","id":"2430","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"395","target":"411","id":"8634","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"207","target":"214","id":"5854","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"518","target":"611","id":"9835","attributes":{"Weight":"1.0"},"color":"rgb(148,164,115)","size":1.0},{"source":"7","target":"665","id":"1620","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"249","target":"478","id":"6551","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"257","target":"639","id":"6688","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"281","target":"285","id":"7077","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"438","target":"465","id":"9125","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"126","target":"265","id":"4272","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"240","target":"430","id":"6400","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"156","target":"341","id":"4911","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"116","target":"144","id":"4067","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"29","target":"459","id":"2132","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"347","target":"437","id":"8039","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"513","target":"681","id":"9799","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"406","target":"513","id":"8764","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"188","target":"716","id":"5527","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"494","target":"582","id":"9657","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"469","target":"669","id":"9455","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"263","target":"624","id":"6792","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"491","target":"735","id":"9634","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"144","target":"415","id":"4660","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"119","target":"501","id":"4142","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"140","target":"327","id":"4562","attributes":{"Weight":"1.0"},"color":"rgb(67,229,148)","size":1.0},{"source":"154","target":"227","id":"4863","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"396","target":"714","id":"8654","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"416","target":"482","id":"8863","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"8","target":"386","id":"1640","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"270","target":"684","id":"6914","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"436","target":"699","id":"9115","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"153","target":"304","id":"4849","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"245","target":"371","id":"6482","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"328","target":"464","id":"7785","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"64","target":"132","id":"2950","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"277","target":"716","id":"7022","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"109","target":"206","id":"3913","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"208","target":"479","id":"5878","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"321","target":"337","id":"7684","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"156","target":"683","id":"4921","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"139","target":"144","id":"4533","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"383","target":"403","id":"8472","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"226","target":"302","id":"6183","attributes":{"Weight":"1.0"},"color":"rgb(180,213,67)","size":1.0},{"source":"680","target":"686","id":"10629","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"398","target":"671","id":"8678","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"139","target":"713","id":"4555","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"70","target":"211","id":"3085","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"363","target":"417","id":"8205","attributes":{"Weight":"1.0"},"color":"rgb(132,148,164)","size":1.0},{"source":"403","target":"702","id":"8738","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"372","target":"456","id":"8310","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"124","target":"239","id":"4235","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"471","target":"541","id":"9471","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"154","target":"308","id":"4866","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"22","target":"640","id":"1971","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"298","target":"541","id":"7365","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"249","target":"661","id":"6557","attributes":{"Weight":"1.0"},"color":"rgb(180,229,67)","size":1.0},{"source":"117","target":"681","id":"4109","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"472","target":"562","id":"9481","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"18","target":"437","id":"1878","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"286","target":"332","id":"7166","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"306","target":"570","id":"7479","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"214","target":"512","id":"5983","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"33","target":"489","id":"2237","attributes":{"Weight":"1.0"},"color":"rgb(229,99,99)","size":1.0},{"source":"131","target":"428","id":"4379","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"273","target":"570","id":"6954","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"3","target":"352","id":"1522","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"371","target":"720","id":"8307","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"359","target":"463","id":"8174","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"27","target":"232","id":"2063","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"83","target":"705","id":"3387","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"451","target":"642","id":"9272","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"596","target":"690","id":"10310","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"64","target":"362","id":"2965","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"444","target":"469","id":"9210","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"246","target":"398","id":"6500","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"160","target":"715","id":"4997","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"175","target":"511","id":"5273","attributes":{"Weight":"1.0"},"color":"rgb(180,115,148)","size":1.0},{"source":"217","target":"626","id":"6039","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"250","target":"545","id":"6570","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"432","target":"535","id":"9057","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"729","target":"735","id":"10687","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"491","target":"689","id":"9628","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"121","target":"359","id":"4182","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"242","target":"326","id":"6433","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"288","target":"425","id":"7200","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"89","target":"246","id":"3517","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"145","target":"577","id":"4696","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"259","target":"597","id":"6724","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"55","target":"142","id":"2723","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"20","target":"530","id":"1928","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"192","target":"598","id":"5593","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"150","target":"629","id":"4797","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"210","target":"579","id":"5907","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"526","target":"655","id":"9908","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"28","target":"71","id":"2089","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"184","target":"633","id":"5449","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"324","target":"334","id":"7720","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"184","target":"538","id":"5448","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"390","target":"411","id":"8569","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"308","target":"462","id":"7503","attributes":{"Weight":"1.0"},"color":"rgb(67,229,180)","size":1.0},{"source":"83","target":"278","id":"3376","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"629","target":"679","id":"10451","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"402","target":"558","id":"8724","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"384","target":"386","id":"8483","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"49","target":"267","id":"2586","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"467","target":"599","id":"9434","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"350","target":"673","id":"8086","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"105","target":"701","id":"3856","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"322","target":"638","id":"7701","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"34","target":"104","id":"2245","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"161","target":"638","id":"5009","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"255","target":"356","id":"6648","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"2","target":"304","id":"1498","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"187","target":"444","id":"5500","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"54","target":"600","id":"2716","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"138","target":"590","id":"4528","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"134","target":"242","id":"4436","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"30","target":"201","id":"2148","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"147","target":"301","id":"4727","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"70","target":"487","id":"3099","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"24","target":"568","id":"2009","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"76","target":"565","id":"3232","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"569","target":"644","id":"10160","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"69","target":"281","id":"3059","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"108","target":"173","id":"3889","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"647","target":"725","id":"10534","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"178","target":"492","id":"5338","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"496","target":"682","id":"9676","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"21","target":"22","id":"1932","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"48","target":"439","id":"2570","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"36","target":"467","id":"2298","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"124","target":"207","id":"4230","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"571","target":"652","id":"10175","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"37","target":"662","id":"2325","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"28","target":"579","id":"2116","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"338","target":"496","id":"7928","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"48","target":"695","id":"2575","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"110","target":"155","id":"3933","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"177","target":"422","id":"5312","attributes":{"Weight":"1.0"},"color":"rgb(132,229,99)","size":1.0},{"source":"579","target":"705","id":"10240","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"181","target":"234","id":"5389","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"291","target":"416","id":"7259","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"302","target":"637","id":"7425","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"205","target":"493","id":"5826","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"333","target":"578","id":"7860","attributes":{"Weight":"1.0"},"color":"rgb(196,196,67)","size":1.0},{"source":"654","target":"685","id":"10569","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"280","target":"323","id":"7057","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"271","target":"364","id":"6919","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"466","target":"650","id":"9421","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"449","target":"481","id":"9250","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"363","target":"587","id":"8210","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"129","target":"165","id":"4327","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"94","target":"496","id":"3629","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"307","target":"313","id":"7485","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"87","target":"196","id":"3456","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"522","target":"654","id":"9869","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"374","target":"480","id":"8338","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"81","target":"541","id":"3341","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"303","target":"575","id":"7441","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"340","target":"590","id":"7960","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"231","target":"603","id":"6273","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"269","target":"413","id":"6897","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"436","target":"696","id":"9114","attributes":{"Weight":"1.0"},"color":"rgb(229,67,148)","size":1.0},{"source":"578","target":"655","id":"10228","attributes":{"Weight":"1.0"},"color":"rgb(115,196,148)","size":1.0},{"source":"309","target":"701","id":"7524","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"363","target":"500","id":"8206","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"516","target":"635","id":"9816","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"475","target":"498","id":"9513","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"269","target":"561","id":"6901","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"500","target":"649","id":"9710","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"245","target":"429","id":"6486","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"394","target":"560","id":"8628","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"195","target":"582","id":"5647","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"492","target":"718","id":"9642","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"150","target":"316","id":"4783","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"554","target":"701","id":"10081","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"357","target":"581","id":"8157","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"638","target":"657","id":"10489","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"523","target":"728","id":"9884","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"130","target":"369","id":"4357","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"189","target":"333","id":"5536","attributes":{"Weight":"1.0"},"color":"rgb(229,148,67)","size":1.0},{"source":"321","target":"407","id":"7686","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"142","target":"300","id":"4611","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"17","target":"229","id":"1848","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"490","target":"622","id":"9616","attributes":{"Weight":"1.0"},"color":"rgb(213,148,132)","size":1.0},{"source":"431","target":"567","id":"9045","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"613","target":"659","id":"10390","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"503","target":"664","id":"9730","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"204","target":"497","id":"5809","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"532","target":"667","id":"9954","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"198","target":"697","id":"5713","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"360","target":"588","id":"8189","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"254","target":"656","id":"6643","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"492","target":"536","id":"9636","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"362","target":"512","id":"8201","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"75","target":"587","id":"3208","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"481","target":"622","id":"9563","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"290","target":"377","id":"7239","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"105","target":"304","id":"3847","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"179","target":"547","id":"5358","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"314","target":"606","id":"7591","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"374","target":"498","id":"8339","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"102","target":"429","id":"3796","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"307","target":"477","id":"7491","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"19","target":"422","id":"1901","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"281","target":"441","id":"7080","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"560","target":"658","id":"10111","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"511","target":"618","id":"9792","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"244","target":"566","id":"6469","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"287","target":"358","id":"7181","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"177","target":"693","id":"5326","attributes":{"Weight":"1.0"},"color":"rgb(115,229,99)","size":1.0},{"source":"299","target":"535","id":"7378","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"348","target":"713","id":"8060","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"407","target":"705","id":"8776","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"293","target":"568","id":"7285","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"572","target":"643","id":"10181","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"19","target":"249","id":"1896","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"53","target":"538","id":"2682","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"135","target":"431","id":"4466","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"534","target":"714","id":"9973","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"573","target":"629","id":"10190","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"213","target":"326","id":"5958","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"456","target":"464","id":"9321","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"399","target":"561","id":"8690","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"85","target":"567","id":"3426","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"679","target":"707","id":"10628","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"18","target":"118","id":"1867","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"294","target":"381","id":"7297","attributes":{"Weight":"1.0"},"color":"rgb(229,67,213)","size":1.0},{"source":"385","target":"648","id":"8513","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"280","target":"717","id":"7074","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"276","target":"317","id":"6993","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"11","target":"670","id":"1726","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"491","target":"734","id":"9633","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"463","target":"607","id":"9393","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"84","target":"210","id":"3392","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"61","target":"613","id":"2892","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"288","target":"543","id":"7210","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"88","target":"453","id":"3497","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"135","target":"490","id":"4470","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"127","target":"671","id":"4301","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"177","target":"654","id":"5321","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"35","target":"273","id":"2272","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"368","target":"499","id":"8268","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"245","target":"319","id":"6479","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"365","target":"406","id":"8233","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"188","target":"277","id":"5512","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"145","target":"431","id":"4686","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"369","target":"652","id":"8282","attributes":{"Weight":"1.0"},"color":"rgb(148,115,148)","size":1.0},{"source":"142","target":"653","id":"4622","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"479","target":"620","id":"9546","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"67","target":"183","id":"3014","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"271","target":"504","id":"6921","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"602","target":"661","id":"10334","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"417","target":"714","id":"8878","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"21","target":"289","id":"1942","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"201","target":"353","id":"5756","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"579","target":"662","id":"10239","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"177","target":"386","id":"5310","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"298","target":"313","id":"7355","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"81","target":"680","id":"3343","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"218","target":"582","id":"6059","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"80","target":"232","id":"3309","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"154","target":"183","id":"4861","attributes":{"Weight":"1.0"},"color":"rgb(180,148,132)","size":1.0},{"source":"279","target":"422","id":"7040","attributes":{"Weight":"1.0"},"color":"rgb(213,148,132)","size":1.0},{"source":"438","target":"491","id":"9127","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"379","target":"706","id":"8419","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"109","target":"727","id":"3928","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"525","target":"585","id":"9898","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"64","target":"445","id":"2968","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"221","target":"422","id":"6101","attributes":{"Weight":"1.0"},"color":"rgb(132,229,148)","size":1.0},{"source":"257","target":"485","id":"6683","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"474","target":"638","id":"9506","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"368","target":"552","id":"8271","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"242","target":"718","id":"6446","attributes":{"Weight":"1.0"},"color":"rgb(100,148,148)","size":1.0},{"source":"154","target":"164","id":"4860","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"58","target":"482","id":"2809","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"209","target":"361","id":"5893","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"59","target":"622","id":"2830","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"368","target":"643","id":"8274","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"93","target":"216","id":"3600","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"84","target":"488","id":"3399","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"306","target":"598","id":"7481","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"572","target":"591","id":"10179","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"490","target":"728","id":"9621","attributes":{"Weight":"1.0"},"color":"rgb(229,67,213)","size":1.0},{"source":"53","target":"184","id":"2673","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"525","target":"631","id":"9900","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"149","target":"496","id":"4767","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"70","target":"450","id":"3096","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"135","target":"720","id":"4480","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"222","target":"489","id":"6124","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"469","target":"624","id":"9452","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"129","target":"685","id":"4347","attributes":{"Weight":"1.0"},"color":"rgb(148,213,99)","size":1.0},{"source":"6","target":"313","id":"1588","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"257","target":"657","id":"6689","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"522","target":"567","id":"9866","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"327","target":"577","id":"7770","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"113","target":"488","id":"4014","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"318","target":"446","id":"7640","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"15","target":"585","id":"1816","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"32","target":"694","id":"2205","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"58","target":"481","id":"2808","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"203","target":"442","id":"5790","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"258","target":"303","id":"6695","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"568","target":"640","id":"10148","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"529","target":"717","id":"9942","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"160","target":"246","id":"4981","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"333","target":"601","id":"7863","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"460","target":"685","id":"9371","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"147","target":"299","id":"4725","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"293","target":"640","id":"7286","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"298","target":"620","id":"7366","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"235","target":"552","id":"6339","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"291","target":"452","id":"7263","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"643","target":"644","id":"10514","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"503","target":"520","id":"9726","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"250","target":"401","id":"6565","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"11","target":"628","id":"1724","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"190","target":"379","id":"5556","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"99","target":"370","id":"3738","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"36","target":"137","id":"2289","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"45","target":"64","id":"2494","attributes":{"Weight":"1.0"},"color":"rgb(213,180,67)","size":1.0},{"source":"190","target":"259","id":"5553","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"366","target":"369","id":"8241","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"149","target":"396","id":"4765","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"468","target":"471","id":"9437","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"213","target":"502","id":"5964","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"265","target":"375","id":"6821","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"459","target":"468","id":"9346","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"273","target":"584","id":"6955","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"480","target":"573","id":"9552","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"40","target":"666","id":"2393","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"292","target":"640","id":"7276","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"63","target":"726","id":"2945","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"309","target":"366","id":"7516","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"445","target":"692","id":"9223","attributes":{"Weight":"1.0"},"color":"rgb(196,180,67)","size":1.0},{"source":"516","target":"637","id":"9818","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"151","target":"323","id":"4813","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"97","target":"526","id":"3698","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"28","target":"349","id":"2105","attributes":{"Weight":"1.0"},"color":"rgb(148,99,213)","size":1.0},{"source":"64","target":"252","id":"2959","attributes":{"Weight":"1.0"},"color":"rgb(213,180,67)","size":1.0},{"source":"418","target":"525","id":"8883","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"145","target":"490","id":"4692","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"86","target":"216","id":"3436","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"315","target":"599","id":"7604","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"18","target":"709","id":"1885","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"216","target":"333","id":"6010","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"224","target":"308","id":"6146","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"260","target":"422","id":"6736","attributes":{"Weight":"1.0"},"color":"rgb(180,229,67)","size":1.0},{"source":"651","target":"689","id":"10553","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"391","target":"658","id":"8591","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"190","target":"597","id":"5564","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"471","target":"550","id":"9472","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"330","target":"731","id":"7829","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"194","target":"706","id":"5634","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"58","target":"449","id":"2805","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"301","target":"624","id":"7412","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"116","target":"646","id":"4090","attributes":{"Weight":"1.0"},"color":"rgb(67,164,180)","size":1.0},{"source":"450","target":"642","id":"9264","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"363","target":"691","id":"8213","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"78","target":"599","id":"3275","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"140","target":"386","id":"4565","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"172","target":"679","id":"5228","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"384","target":"602","id":"8490","attributes":{"Weight":"1.0"},"color":"rgb(115,229,99)","size":1.0},{"source":"86","target":"528","id":"3444","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"77","target":"686","id":"3260","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"375","target":"454","id":"8352","attributes":{"Weight":"1.0"},"color":"rgb(83,229,115)","size":1.0},{"source":"37","target":"407","id":"2317","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"413","target":"561","id":"8838","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"219","target":"630","id":"6075","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"80","target":"231","id":"3308","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"239","target":"354","id":"6390","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"508","target":"589","id":"9772","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"6","target":"479","id":"1595","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"29","target":"541","id":"2140","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"310","target":"541","id":"7535","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"99","target":"304","id":"3734","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"538","target":"736","id":"10001","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"453","target":"693","id":"9291","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"188","target":"511","id":"5517","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"79","target":"678","id":"3301","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"408","target":"667","id":"8784","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"247","target":"666","id":"6527","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"82","target":"122","id":"3345","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"128","target":"727","id":"4324","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"238","target":"415","id":"6374","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"217","target":"579","id":"6037","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"543","target":"573","id":"10024","attributes":{"Weight":"1.0"},"color":"rgb(148,148,196)","size":1.0},{"source":"326","target":"476","id":"7751","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"578","target":"661","id":"10229","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"111","target":"316","id":"3967","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"445","target":"723","id":"9224","attributes":{"Weight":"1.0"},"color":"rgb(196,180,67)","size":1.0},{"source":"197","target":"609","id":"5694","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"641","target":"732","id":"10509","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"131","target":"593","id":"4387","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"86","target":"601","id":"3448","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"145","target":"547","id":"4694","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"329","target":"609","id":"7807","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"272","target":"590","id":"6942","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"101","target":"484","id":"3781","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"52","target":"549","id":"2663","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"640","target":"704","id":"10501","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"571","target":"593","id":"10169","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"59","target":"237","id":"2818","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"455","target":"653","id":"9315","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"85","target":"699","id":"3429","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"449","target":"622","id":"9253","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"646","target":"650","id":"10520","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"381","target":"589","id":"8443","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"234","target":"734","id":"6328","attributes":{"Weight":"1.0"},"color":"rgb(67,83,229)","size":1.0},{"source":"540","target":"695","id":"10010","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"549","target":"551","id":"10055","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"537","target":"636","id":"9989","attributes":{"Weight":"1.0"},"color":"rgb(99,229,83)","size":1.0},{"source":"398","target":"583","id":"8670","attributes":{"Weight":"1.0"},"color":"rgb(115,148,180)","size":1.0},{"source":"637","target":"697","id":"10486","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"527","target":"667","id":"9916","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"440","target":"565","id":"9157","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"238","target":"717","id":"6386","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"294","target":"373","id":"7296","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"389","target":"495","id":"8556","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"263","target":"653","id":"6793","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"84","target":"182","id":"3391","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"134","target":"156","id":"4434","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"33","target":"320","id":"2225","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"543","target":"565","id":"10023","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"238","target":"434","id":"6375","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"66","target":"247","id":"2996","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"474","target":"671","id":"9509","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"232","target":"258","id":"6281","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"29","target":"81","id":"2124","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"102","target":"120","id":"3783","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"302","target":"697","id":"7428","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"158","target":"243","id":"4946","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"21","target":"174","id":"1940","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"147","target":"300","id":"4726","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"183","target":"642","id":"5433","attributes":{"Weight":"1.0"},"color":"rgb(99,229,148)","size":1.0},{"source":"58","target":"537","id":"2811","attributes":{"Weight":"1.0"},"color":"rgb(132,229,83)","size":1.0},{"source":"90","target":"117","id":"3534","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"114","target":"649","id":"4041","attributes":{"Weight":"1.0"},"color":"rgb(115,148,164)","size":1.0},{"source":"303","target":"348","id":"7433","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"215","target":"693","id":"6003","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"704","target":"708","id":"10666","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"631","target":"722","id":"10457","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"59","target":"123","id":"2815","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"372","target":"464","id":"8311","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"135","target":"529","id":"4471","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"25","target":"641","id":"2029","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"131","target":"294","id":"4375","attributes":{"Weight":"1.0"},"color":"rgb(229,115,132)","size":1.0},{"source":"81","target":"686","id":"3344","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"188","target":"286","id":"5513","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"127","target":"690","id":"4302","attributes":{"Weight":"1.0"},"color":"rgb(164,148,148)","size":1.0},{"source":"152","target":"336","id":"4832","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"91","target":"476","id":"3566","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"7","target":"260","id":"1606","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"351","target":"700","id":"8101","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"598","target":"666","id":"10320","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"260","target":"364","id":"6734","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"133","target":"350","id":"4421","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"10","target":"219","id":"1691","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"307","target":"458","id":"7486","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"532","target":"625","id":"9952","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"558","target":"696","id":"10105","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"232","target":"575","id":"6288","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"427","target":"464","id":"8994","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"371","target":"644","id":"8303","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"418","target":"582","id":"8885","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"426","target":"536","id":"8986","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"382","target":"730","id":"8469","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"130","target":"670","id":"4367","attributes":{"Weight":"1.0"},"color":"rgb(67,148,213)","size":1.0},{"source":"229","target":"276","id":"6234","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"26","target":"481","id":"2052","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"311","target":"460","id":"7542","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"200","target":"691","id":"5746","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"576","target":"583","id":"10210","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"240","target":"634","id":"6410","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"118","target":"590","id":"4124","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"151","target":"717","id":"4828","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"343","target":"617","id":"8002","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"39","target":"167","id":"2359","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"118","target":"340","id":"4116","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"257","target":"692","id":"6691","attributes":{"Weight":"1.0"},"color":"rgb(164,148,148)","size":1.0},{"source":"299","target":"432","id":"7373","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"197","target":"426","id":"5686","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"88","target":"690","id":"3507","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"139","target":"603","id":"4550","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"302","target":"538","id":"7421","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"11","target":"447","id":"1720","attributes":{"Weight":"1.0"},"color":"rgb(132,229,132)","size":1.0},{"source":"158","target":"293","id":"4948","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"514","target":"539","id":"9802","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"621","target":"657","id":"10418","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"258","target":"576","id":"6705","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"404","target":"628","id":"8748","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"99","target":"219","id":"3731","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"569","target":"720","id":"10162","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"29","target":"148","id":"2125","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"435","target":"722","id":"9105","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"138","target":"272","id":"4518","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"91","target":"213","id":"3558","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"383","target":"702","id":"8481","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"183","target":"335","id":"5422","attributes":{"Weight":"1.0"},"color":"rgb(99,229,99)","size":1.0},{"source":"466","target":"491","id":"9418","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"377","target":"399","id":"8383","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"116","target":"583","id":"4086","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"498","target":"623","id":"9695","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"31","target":"630","id":"2182","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"183","target":"312","id":"5421","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"110","target":"720","id":"3958","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"163","target":"550","id":"5050","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"253","target":"660","id":"6628","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"1","target":"585","id":"1481","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"116","target":"238","id":"4071","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"298","target":"470","id":"7359","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"224","target":"376","id":"6150","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"187","target":"432","id":"5499","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"30","target":"235","id":"2151","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"421","target":"543","id":"8921","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"7","target":"215","id":"1604","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"200","target":"383","id":"5735","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"521","target":"663","id":"9861","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"164","target":"316","id":"5060","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"189","target":"214","id":"5530","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"79","target":"573","id":"3295","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"132","target":"239","id":"4403","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"117","target":"683","id":"4110","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"152","target":"360","id":"4834","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"101","target":"214","id":"3768","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"105","target":"181","id":"3844","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"374","target":"517","id":"8340","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"306","target":"389","id":"7476","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"501","target":"550","id":"9715","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"348","target":"398","id":"8047","attributes":{"Weight":"1.0"},"color":"rgb(115,148,180)","size":1.0},{"source":"621","target":"671","id":"10419","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"313","target":"470","id":"7571","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"83","target":"113","id":"3371","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"232","target":"616","id":"6292","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"633","target":"636","id":"10466","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"73","target":"198","id":"3152","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"357","target":"509","id":"8153","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"13","target":"495","id":"1767","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"136","target":"563","id":"4494","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"155","target":"572","id":"4898","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"260","target":"504","id":"6738","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"267","target":"546","id":"6857","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"59","target":"125","id":"2816","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"533","target":"579","id":"9961","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"112","target":"207","id":"3989","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"56","target":"685","id":"2765","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"277","target":"517","id":"7010","attributes":{"Weight":"1.0"},"color":"rgb(148,196,115)","size":1.0},{"source":"317","target":"581","id":"7635","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"626","target":"705","id":"10442","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"198","target":"658","id":"5710","attributes":{"Weight":"1.0"},"color":"rgb(180,148,115)","size":1.0},{"source":"229","target":"317","id":"6236","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"65","target":"118","id":"2975","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"124","target":"230","id":"4234","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"428","target":"618","id":"9011","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"574","target":"702","id":"10199","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"334","target":"489","id":"7875","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"97","target":"519","id":"3696","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"180","target":"703","id":"5386","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"497","target":"635","id":"9682","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"157","target":"455","id":"4932","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"442","target":"611","id":"9189","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"164","target":"572","id":"5067","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"122","target":"623","id":"4207","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"403","target":"706","id":"8739","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"111","target":"643","id":"3982","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"63","target":"621","id":"2937","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"141","target":"416","id":"4591","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"520","target":"664","id":"9850","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"585","target":"605","id":"10263","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"81","target":"313","id":"3330","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"18","target":"520","id":"1880","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"248","target":"550","id":"6536","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"167","target":"168","id":"5115","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"14","target":"640","id":"1794","attributes":{"Weight":"1.0"},"color":"rgb(148,148,83)","size":1.0},{"source":"14","target":"500","id":"1788","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"415","target":"603","id":"8850","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"369","target":"630","id":"8281","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"56","target":"140","id":"2747","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"145","target":"280","id":"4678","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"209","target":"214","id":"5885","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"26","target":"482","id":"2053","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"59","target":"675","id":"2831","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"45","target":"291","id":"2501","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"428","target":"528","id":"9004","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"88","target":"162","id":"3482","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"51","target":"243","id":"2633","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"544","target":"681","id":"10032","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"281","target":"734","id":"7094","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"543","target":"728","id":"10031","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"419","target":"645","id":"8905","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"426","target":"551","id":"8988","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"381","target":"472","id":"8434","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"76","target":"473","id":"3225","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"527","target":"567","id":"9912","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"356","target":"410","id":"8141","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"161","target":"485","id":"5005","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"283","target":"561","id":"7133","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"38","target":"39","id":"2328","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"51","target":"708","id":"2643","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"134","target":"341","id":"4439","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"201","target":"235","id":"5751","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"63","target":"264","id":"2930","attributes":{"Weight":"1.0"},"color":"rgb(115,83,229)","size":1.0},{"source":"676","target":"728","id":"10621","attributes":{"Weight":"1.0"},"color":"rgb(229,67,213)","size":1.0},{"source":"286","target":"716","id":"7179","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"684","target":"697","id":"10633","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"358","target":"451","id":"8162","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"112","target":"361","id":"3999","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"335","target":"603","id":"7889","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"212","target":"642","id":"5951","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"412","target":"559","id":"8830","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"114","target":"726","id":"4046","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"146","target":"217","id":"4706","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"64","target":"189","id":"2951","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"244","target":"396","id":"6464","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"92","target":"456","id":"3585","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"80","target":"167","id":"3307","attributes":{"Weight":"1.0"},"color":"rgb(148,213,99)","size":1.0},{"source":"521","target":"565","id":"9856","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"109","target":"336","id":"3915","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"104","target":"509","id":"3835","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"226","target":"240","id":"6182","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"480","target":"611","id":"9554","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"305","target":"552","id":"7471","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"119","target":"152","id":"4132","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"317","target":"592","id":"7636","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"257","target":"297","id":"6678","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"514","target":"624","id":"9804","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"48","target":"243","id":"2567","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"372","target":"427","id":"8309","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"209","target":"239","id":"5888","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"381","target":"443","id":"8433","attributes":{"Weight":"1.0"},"color":"rgb(229,67,213)","size":1.0},{"source":"385","target":"577","id":"8509","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"165","target":"352","id":"5084","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"254","target":"660","id":"6644","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"10","target":"701","id":"1703","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"200","target":"259","id":"5731","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"409","target":"498","id":"8795","attributes":{"Weight":"1.0"},"color":"rgb(148,148,196)","size":1.0},{"source":"12","target":"287","id":"1737","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"14","target":"16","id":"1773","attributes":{"Weight":"1.0"},"color":"rgb(148,148,83)","size":1.0},{"source":"179","target":"227","id":"5346","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"245","target":"373","id":"6483","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"471","target":"477","id":"9467","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"575","target":"681","id":"10208","attributes":{"Weight":"1.0"},"color":"rgb(83,229,99)","size":1.0},{"source":"462","target":"645","id":"9388","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"83","target":"321","id":"3377","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"95","target":"136","id":"3642","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"252","target":"482","id":"6609","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"494","target":"722","id":"9662","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"171","target":"534","id":"5201","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"41","target":"599","id":"2410","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"438","target":"646","id":"9128","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"490","target":"529","id":"9612","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"393","target":"412","id":"8612","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"215","target":"661","id":"5999","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"100","target":"234","id":"3751","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"305","target":"489","id":"7468","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"136","target":"588","id":"4495","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"203","target":"518","id":"5796","attributes":{"Weight":"1.0"},"color":"rgb(148,164,115)","size":1.0},{"source":"475","target":"518","id":"9515","attributes":{"Weight":"1.0"},"color":"rgb(148,164,115)","size":1.0},{"source":"189","target":"320","id":"5535","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"268","target":"290","id":"6863","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"272","target":"387","id":"6937","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"66","target":"598","id":"3009","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"493","target":"585","id":"9648","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"216","target":"589","id":"6019","attributes":{"Weight":"1.0"},"color":"rgb(229,115,148)","size":1.0},{"source":"469","target":"653","id":"9454","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"292","target":"540","id":"7274","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"359","target":"531","id":"8176","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"14","target":"691","id":"1796","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"304","target":"526","id":"7456","attributes":{"Weight":"1.0"},"color":"rgb(67,115,229)","size":1.0},{"source":"97","target":"205","id":"3687","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"420","target":"533","id":"8908","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"618","target":"652","id":"10407","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"108","target":"526","id":"3901","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"692","target":"723","id":"10653","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"544","target":"683","id":"10033","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"103","target":"104","id":"3804","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"70","target":"555","id":"3100","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"274","target":"493","id":"6962","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"97","target":"631","id":"3702","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"46","target":"449","id":"2531","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"241","target":"721","id":"6430","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"185","target":"463","id":"5467","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"157","target":"535","id":"4937","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"25","target":"540","id":"2026","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"556","target":"660","id":"10091","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"471","target":"479","id":"9468","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"158","target":"708","id":"4956","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"221","target":"358","id":"6098","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"359","target":"685","id":"8180","attributes":{"Weight":"1.0"},"color":"rgb(148,213,99)","size":1.0},{"source":"12","target":"261","id":"1736","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"141","target":"478","id":"4597","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"548","target":"552","id":"10052","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"90","target":"683","id":"3553","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"68","target":"633","id":"3047","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"2","target":"106","id":"1492","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"191","target":"461","id":"5575","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"582","target":"605","id":"10250","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"7","target":"610","id":"1618","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"487","target":"600","id":"9591","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"237","target":"481","id":"6363","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"165","target":"185","id":"5079","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"690","target":"693","id":"10646","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"3","target":"191","id":"1519","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"323","target":"376","id":"7708","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"333","target":"511","id":"7857","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"132","target":"354","id":"4407","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"465","target":"466","id":"9405","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"576","target":"713","id":"10216","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"172","target":"179","id":"5212","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"206","target":"617","id":"5850","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"63","target":"297","id":"2931","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"98","target":"549","id":"3719","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"77","target":"459","id":"3249","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"318","target":"576","id":"7648","attributes":{"Weight":"1.0"},"color":"rgb(67,229,99)","size":1.0},{"source":"191","target":"430","id":"5574","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"442","target":"517","id":"9186","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"63","target":"127","id":"2924","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"555","target":"707","id":"10086","attributes":{"Weight":"1.0"},"color":"rgb(67,229,180)","size":1.0},{"source":"81","target":"298","id":"3327","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"311","target":"677","id":"7552","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"460","target":"562","id":"9361","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"131","target":"589","id":"4386","attributes":{"Weight":"1.0"},"color":"rgb(229,115,148)","size":1.0},{"source":"199","target":"709","id":"5730","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"290","target":"390","id":"7240","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"472","target":"682","id":"9488","attributes":{"Weight":"1.0"},"color":"rgb(213,67,229)","size":1.0},{"source":"98","target":"328","id":"3708","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"79","target":"454","id":"3289","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"55","target":"175","id":"2727","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"16","target":"704","id":"1839","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"593","target":"618","id":"10297","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"505","target":"587","id":"9746","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"249","target":"404","id":"6544","attributes":{"Weight":"1.0"},"color":"rgb(132,229,132)","size":1.0},{"source":"409","target":"594","id":"8804","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"175","target":"432","id":"5269","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"346","target":"670","id":"8035","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"221","target":"451","id":"6104","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"175","target":"325","id":"5268","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"220","target":"670","id":"6090","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"129","target":"430","id":"4339","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"58","target":"675","id":"2814","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"432","target":"623","id":"9062","attributes":{"Weight":"1.0"},"color":"rgb(99,148,196)","size":1.0},{"source":"185","target":"486","id":"5468","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"238","target":"342","id":"6372","attributes":{"Weight":"1.0"},"color":"rgb(67,229,116)","size":1.0},{"source":"657","target":"715","id":"10578","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"89","target":"161","id":"3516","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"652","target":"703","id":"10561","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"9","target":"368","id":"1674","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"253","target":"696","id":"6631","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"491","target":"729","id":"9631","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"259","target":"342","id":"6713","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"49","target":"103","id":"2580","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"6","target":"208","id":"1584","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"452","target":"478","id":"9274","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"437","target":"503","id":"9117","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"255","target":"545","id":"6654","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"162","target":"596","id":"5029","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"442","target":"475","id":"9183","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"47","target":"545","id":"2555","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"50","target":"154","id":"2606","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"116","target":"603","id":"4087","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"195","target":"526","id":"5646","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"141","target":"422","id":"4592","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"261","target":"451","id":"6761","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"193","target":"465","id":"5604","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"203","target":"433","id":"5789","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"123","target":"478","id":"4222","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"259","target":"403","id":"6717","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"322","target":"726","id":"7706","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"21","target":"641","id":"1951","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"241","target":"260","id":"6412","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"241","target":"497","id":"6419","attributes":{"Weight":"1.0"},"color":"rgb(148,229,67)","size":1.0},{"source":"225","target":"608","id":"6179","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"196","target":"473","id":"5664","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"480","target":"623","id":"9556","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"423","target":"696","id":"8950","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"472","target":"663","id":"9487","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"334","target":"353","id":"7870","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"99","target":"554","id":"3740","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"413","target":"731","id":"8840","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"74","target":"677","id":"3188","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"42","target":"486","id":"2425","attributes":{"Weight":"1.0"},"color":"rgb(229,180,67)","size":1.0},{"source":"200","target":"363","id":"5733","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"233","target":"717","id":"6311","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"502","target":"544","id":"9723","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"124","target":"344","id":"4239","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"53","target":"312","id":"2678","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"304","target":"309","id":"7450","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"339","target":"364","id":"7938","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"479","target":"518","id":"9544","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"124","target":"512","id":"4246","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"410","target":"423","id":"8810","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"236","target":"499","id":"6349","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"233","target":"331","id":"6299","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"82","target":"442","id":"3354","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"55","target":"535","id":"2739","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"1","target":"494","id":"1476","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"385","target":"433","id":"8500","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"27","target":"713","id":"2085","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"103","target":"564","id":"3820","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"40","target":"66","id":"2376","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"697","target":"736","id":"10661","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"159","target":"657","id":"4975","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"583","target":"702","id":"10258","attributes":{"Weight":"1.0"},"color":"rgb(67,229,116)","size":1.0},{"source":"290","target":"405","id":"7247","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"267","target":"276","id":"6847","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"386","target":"654","id":"8527","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"139","target":"654","id":"4552","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"348","target":"430","id":"8049","attributes":{"Weight":"1.0"},"color":"rgb(148,213,99)","size":1.0},{"source":"244","target":"659","id":"6473","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"11","target":"59","id":"1706","attributes":{"Weight":"1.0"},"color":"rgb(132,229,132)","size":1.0},{"source":"466","target":"724","id":"9424","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"505","target":"597","id":"9747","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"241","target":"661","id":"6425","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"301","target":"698","id":"7415","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"70","target":"419","id":"3094","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"304","target":"352","id":"7451","attributes":{"Weight":"1.0"},"color":"rgb(148,132,148)","size":1.0},{"source":"369","target":"370","id":"8277","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"253","target":"255","id":"6616","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"113","target":"626","id":"4017","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"356","target":"660","id":"8148","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"184","target":"688","id":"5454","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"54","target":"211","id":"2694","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"606","target":"673","id":"10355","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"581","target":"592","id":"10248","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"636","target":"736","id":"10483","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"42","target":"332","id":"2422","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"150","target":"318","id":"4784","attributes":{"Weight":"1.0"},"color":"rgb(148,148,132)","size":1.0},{"source":"155","target":"677","id":"4903","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"405","target":"561","id":"8759","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"69","target":"646","id":"3073","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"191","target":"226","id":"5569","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"97","target":"108","id":"3684","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"299","target":"698","id":"7385","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"30","target":"236","id":"2152","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"150","target":"713","id":"4801","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"61","target":"507","id":"2887","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"110","target":"227","id":"3936","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"13","target":"41","id":"1754","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"458","target":"459","id":"9334","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"149","target":"338","id":"4762","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"96","target":"304","id":"3674","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"124","target":"209","id":"4231","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"50","target":"720","id":"2630","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"95","target":"501","id":"3655","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"179","target":"707","id":"5368","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"236","target":"489","id":"6348","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"258","target":"434","id":"6702","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"11","target":"18","id":"1704","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"430","target":"583","id":"9033","attributes":{"Weight":"1.0"},"color":"rgb(148,213,99)","size":1.0},{"source":"99","target":"181","id":"3730","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"423","target":"556","id":"8943","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"7","target":"721","id":"1624","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"64","target":"461","id":"2969","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"176","target":"197","id":"5283","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"196","target":"594","id":"5673","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"602","target":"690","id":"10336","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"327","target":"611","id":"7771","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"325","target":"682","id":"7745","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"171","target":"314","id":"5192","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"103","target":"267","id":"3808","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"35","target":"495","id":"2279","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"92","target":"178","id":"3576","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"225","target":"261","id":"6167","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"402","target":"660","id":"8726","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"296","target":"493","id":"7326","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"168","target":"185","id":"5130","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"211","target":"319","id":"5917","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"194","target":"383","id":"5623","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"92","target":"536","id":"3588","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"281","target":"282","id":"7076","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"365","target":"530","id":"8237","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"258","target":"616","id":"6708","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"3","target":"168","id":"1517","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"86","target":"188","id":"3435","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"234","target":"370","id":"6318","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"120","target":"489","id":"4163","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"120","target":"228","id":"4153","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"234","target":"457","id":"6319","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"620","target":"680","id":"10413","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"412","target":"560","id":"8831","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"316","target":"629","id":"7619","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"323","target":"547","id":"7714","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"135","target":"151","id":"4451","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"32","target":"557","id":"2200","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"88","target":"665","id":"3506","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"145","target":"455","id":"4691","attributes":{"Weight":"1.0"},"color":"rgb(180,67,213)","size":1.0},{"source":"346","target":"387","id":"8027","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"412","target":"731","id":"8834","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"230","target":"320","id":"6249","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"400","target":"401","id":"8694","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"335","target":"707","id":"7893","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"126","target":"134","id":"4268","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"112","target":"483","id":"4002","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"68","target":"538","id":"3045","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"5","target":"348","id":"1568","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"117","target":"365","id":"4101","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"589","target":"728","id":"10285","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"324","target":"489","id":"7724","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"285","target":"724","id":"7159","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"335","target":"462","id":"7884","attributes":{"Weight":"1.0"},"color":"rgb(67,229,180)","size":1.0},{"source":"89","target":"160","id":"3515","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"505","target":"706","id":"9751","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"419","target":"569","id":"8900","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"219","target":"701","id":"6077","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"53","target":"67","id":"2669","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"43","target":"65","id":"2437","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"439","target":"709","id":"9147","attributes":{"Weight":"1.0"},"color":"rgb(148,148,132)","size":1.0},{"source":"359","target":"634","id":"8178","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"81","target":"468","id":"3333","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"538","target":"697","id":"10000","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"304","target":"369","id":"7453","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"127","target":"621","id":"4296","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"28","target":"319","id":"2102","attributes":{"Weight":"1.0"},"color":"rgb(67,180,229)","size":1.0},{"source":"53","target":"516","id":"2680","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"163","target":"506","id":"5049","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"87","target":"490","id":"3467","attributes":{"Weight":"1.0"},"color":"rgb(229,67,213)","size":1.0},{"source":"50","target":"245","id":"2610","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"234","target":"701","id":"6327","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"138","target":"670","id":"4531","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"116","target":"335","id":"4076","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"29","target":"470","id":"2134","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"450","target":"487","id":"9259","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"75","target":"702","id":"3212","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"226","target":"352","id":"6184","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"11","target":"520","id":"1722","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"393","target":"658","id":"8618","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"352","target":"359","id":"8103","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"450","target":"619","id":"9263","attributes":{"Weight":"1.0"},"color":"rgb(148,196,148)","size":1.0},{"source":"268","target":"412","id":"6875","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"79","target":"203","id":"3281","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"213","target":"265","id":"5957","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"482","target":"675","id":"9568","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"61","target":"687","id":"2897","attributes":{"Weight":"1.0"},"color":"rgb(132,148,196)","size":1.0},{"source":"290","target":"399","id":"7246","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"539","target":"669","id":"10005","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"334","target":"355","id":"7871","attributes":{"Weight":"1.0"},"color":"rgb(148,148,99)","size":1.0},{"source":"62","target":"126","id":"2903","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"153","target":"181","id":"4846","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"188","target":"580","id":"5520","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"99","target":"153","id":"3729","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"232","target":"434","id":"6287","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"399","target":"559","id":"8688","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"316","target":"455","id":"7614","attributes":{"Weight":"1.0"},"color":"rgb(180,67,213)","size":1.0},{"source":"198","target":"516","id":"5703","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"132","target":"344","id":"4406","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"312","target":"633","id":"7560","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"439","target":"640","id":"9142","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"202","target":"419","id":"5773","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"602","target":"721","id":"10340","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"208","target":"477","id":"5877","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"145","target":"678","id":"4699","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"646","target":"725","id":"10525","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"194","target":"537","id":"5627","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"528","target":"652","id":"9931","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"598","target":"599","id":"10319","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"474","target":"639","id":"9507","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"32","target":"674","id":"2204","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"135","target":"443","id":"4468","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"90","target":"126","id":"3535","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"25","target":"695","id":"2030","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"568","target":"695","id":"10150","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"220","target":"272","id":"6078","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"580","target":"619","id":"10244","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"519","target":"525","id":"9840","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"318","target":"528","id":"7644","attributes":{"Weight":"1.0"},"color":"rgb(148,196,67)","size":1.0},{"source":"173","target":"631","id":"5247","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"8","target":"172","id":"1633","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"72","target":"500","id":"3140","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"265","target":"681","id":"6828","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"220","target":"628","id":"6088","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"635","target":"684","id":"10475","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"321","target":"705","id":"7694","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"162","target":"610","id":"5031","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"74","target":"460","id":"3179","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"260","target":"261","id":"6729","attributes":{"Weight":"1.0"},"color":"rgb(115,229,148)","size":1.0},{"source":"78","target":"467","id":"3270","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"665","target":"721","id":"10600","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"69","target":"724","id":"3078","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"380","target":"389","id":"8420","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"468","target":"477","id":"9438","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"340","target":"670","id":"7963","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"359","target":"677","id":"8179","attributes":{"Weight":"1.0"},"color":"rgb(148,213,99)","size":1.0},{"source":"73","target":"302","id":"3155","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"156","target":"681","id":"4920","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"517","target":"636","id":"9830","attributes":{"Weight":"1.0"},"color":"rgb(99,229,115)","size":1.0},{"source":"369","target":"457","id":"8278","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"65","target":"272","id":"2979","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"319","target":"419","id":"7657","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"120","target":"186","id":"4150","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"5","target":"434","id":"1570","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"290","target":"559","id":"7252","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"14","target":"383","id":"1786","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"110","target":"294","id":"3940","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"28","target":"37","id":"2087","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"556","target":"558","id":"10089","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"568","target":"641","id":"10149","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"218","target":"525","id":"6056","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"497","target":"636","id":"9683","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"92","target":"549","id":"3589","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"47","target":"423","id":"2554","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"538","target":"633","id":"9994","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"497","target":"637","id":"9684","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"69","target":"82","id":"3056","attributes":{"Weight":"1.0"},"color":"rgb(67,164,196)","size":1.0},{"source":"24","target":"25","id":"1998","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"416","target":"661","id":"8867","attributes":{"Weight":"1.0"},"color":"rgb(180,229,67)","size":1.0},{"source":"393","target":"405","id":"8610","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"349","target":"719","id":"8075","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"327","target":"442","id":"7762","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"303","target":"409","id":"7434","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"143","target":"300","id":"4632","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"285","target":"465","id":"7151","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"185","target":"359","id":"5462","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"316","target":"678","id":"7622","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"8","target":"532","id":"1646","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"29","target":"77","id":"2123","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"404","target":"461","id":"8742","attributes":{"Weight":"1.0"},"color":"rgb(148,213,132)","size":1.0},{"source":"15","target":"525","id":"1813","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"96","target":"186","id":"3671","attributes":{"Weight":"1.0"},"color":"rgb(148,67,180)","size":1.0},{"source":"62","target":"681","id":"2919","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"38","target":"167","id":"2334","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"193","target":"285","id":"5599","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"101","target":"445","id":"3778","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"172","target":"460","id":"5217","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"442","target":"480","id":"9184","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"327","target":"648","id":"7774","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"119","target":"563","id":"4145","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"88","target":"591","id":"3501","attributes":{"Weight":"1.0"},"color":"rgb(196,148,132)","size":1.0},{"source":"278","target":"407","id":"7025","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"388","target":"423","id":"8545","attributes":{"Weight":"1.0"},"color":"rgb(229,148,83)","size":1.0},{"source":"351","target":"427","id":"8092","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"25","target":"704","id":"2031","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"45","target":"125","id":"2496","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"471","target":"680","id":"9474","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"514","target":"698","id":"9807","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"43","target":"664","id":"2455","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"323","target":"490","id":"7712","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"341","target":"544","id":"7972","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"165","target":"531","id":"5090","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"254","target":"356","id":"6633","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"126","target":"530","id":"4281","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"586","target":"717","id":"10270","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"414","target":"731","id":"8845","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"400","target":"694","id":"8705","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"65","target":"404","id":"2984","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"294","target":"591","id":"7305","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"354","target":"483","id":"8127","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"67","target":"637","id":"3028","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"144","target":"348","id":"4658","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"82","target":"648","id":"3366","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"30","target":"353","id":"2156","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"24","target":"708","id":"2014","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"312","target":"524","id":"7558","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"220","target":"347","id":"6081","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"507","target":"682","id":"9764","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"440","target":"562","id":"9156","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"639","target":"726","id":"10498","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"108","target":"582","id":"3902","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"214","target":"361","id":"5978","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"474","target":"715","id":"9510","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"26","target":"452","id":"2050","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"520","target":"590","id":"9848","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"86","target":"652","id":"3451","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"510","target":"592","id":"9785","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"44","target":"374","id":"2470","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"123","target":"452","id":"4221","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"187","target":"469","id":"5502","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"115","target":"574","id":"4059","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"734","target":"735","id":"10691","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"206","target":"501","id":"5845","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"153","target":"369","id":"4852","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"151","target":"331","id":"4814","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"221","target":"462","id":"6105","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"125","target":"661","id":"4266","attributes":{"Weight":"1.0"},"color":"rgb(180,229,67)","size":1.0},{"source":"41","target":"666","id":"2411","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"118","target":"437","id":"4121","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"587","target":"706","id":"10275","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"374","target":"475","id":"8337","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"633","target":"684","id":"10468","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"60","target":"552","id":"2857","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"244","target":"606","id":"6470","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"577","target":"687","id":"10222","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"382","target":"670","id":"8464","attributes":{"Weight":"1.0"},"color":"rgb(67,164,213)","size":1.0},{"source":"4","target":"437","id":"1546","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"75","target":"706","id":"3213","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"287","target":"642","id":"7193","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"228","target":"595","id":"6229","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"34","target":"256","id":"2248","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"468","target":"479","id":"9439","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"206","target":"248","id":"5838","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"12","target":"212","id":"1733","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"464","target":"718","id":"9404","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"18","target":"590","id":"1881","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"103","target":"592","id":"3822","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"35","target":"41","id":"2266","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"130","target":"630","id":"4366","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"89","target":"474","id":"3522","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"318","target":"546","id":"7645","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"33","target":"207","id":"2216","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"392","target":"405","id":"8597","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"322","target":"553","id":"7698","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"26","target":"422","id":"2047","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"231","target":"717","id":"6278","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"137","target":"599","id":"4513","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"147","target":"263","id":"4724","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"562","target":"713","id":"10124","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"182","target":"579","id":"5409","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"511","target":"580","id":"9789","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"159","target":"474","id":"4968","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"93","target":"171","id":"3596","attributes":{"Weight":"1.0"},"color":"rgb(213,115,148)","size":1.0},{"source":"301","target":"431","id":"7402","attributes":{"Weight":"1.0"},"color":"rgb(180,67,213)","size":1.0},{"source":"35","target":"389","id":"2277","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"328","target":"426","id":"7782","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"528","target":"618","id":"9928","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"398","target":"668","id":"8677","attributes":{"Weight":"1.0"},"color":"rgb(115,148,180)","size":1.0},{"source":"55","target":"624","id":"2742","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"12","target":"419","id":"1740","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"415","target":"434","id":"8846","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"164","target":"685","id":"5073","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"366","target":"370","id":"8242","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"148","target":"515","id":"4752","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"130","target":"234","id":"4352","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"49","target":"318","id":"2591","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"140","target":"375","id":"4563","attributes":{"Weight":"1.0"},"color":"rgb(83,229,99)","size":1.0},{"source":"183","target":"198","id":"5415","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"262","target":"320","id":"6772","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"83","target":"337","id":"3378","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"636","target":"637","id":"10479","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"425","target":"622","id":"8977","attributes":{"Weight":"1.0"},"color":"rgb(213,148,148)","size":1.0},{"source":"308","target":"642","id":"7510","attributes":{"Weight":"1.0"},"color":"rgb(67,229,180)","size":1.0},{"source":"27","target":"231","id":"2062","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"231","target":"415","id":"6266","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"363","target":"649","id":"8212","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"119","target":"448","id":"4141","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"9","target":"334","id":"1672","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"38","target":"121","id":"2330","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"289","target":"331","id":"7220","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"8","target":"677","id":"1655","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"35","target":"315","id":"2275","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"417","target":"606","id":"8873","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"35","target":"284","id":"2273","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"13","target":"467","id":"1766","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"247","target":"570","id":"6523","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"28","target":"107","id":"2092","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"299","target":"539","id":"7379","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"56","target":"179","id":"2750","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"221","target":"319","id":"6097","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"306","target":"315","id":"7474","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"327","target":"678","id":"7775","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"323","target":"586","id":"7716","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"282","target":"285","id":"7096","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"183","target":"184","id":"5414","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"34","target":"49","id":"2243","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"45","target":"449","id":"2506","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"422","target":"452","id":"8933","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"449","target":"728","id":"9256","attributes":{"Weight":"1.0"},"color":"rgb(213,148,148)","size":1.0},{"source":"343","target":"550","id":"7999","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"167","target":"463","id":"5124","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"135","target":"643","id":"4476","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"138","target":"408","id":"4524","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"109","target":"550","id":"3923","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"290","target":"414","id":"7251","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"175","target":"469","id":"5272","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"14","target":"537","id":"1790","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"269","target":"414","id":"6898","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"124","target":"214","id":"4232","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"76","target":"87","id":"3214","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"481","target":"675","id":"9565","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"68","target":"242","id":"3038","attributes":{"Weight":"1.0"},"color":"rgb(116,229,67)","size":1.0},{"source":"140","target":"577","id":"4574","attributes":{"Weight":"1.0"},"color":"rgb(67,229,148)","size":1.0},{"source":"386","target":"679","id":"8530","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"531","target":"607","id":"9947","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"519","target":"722","id":"9847","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"105","target":"630","id":"3854","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"328","target":"351","id":"7779","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"487","target":"642","id":"9593","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"457","target":"554","id":"9330","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"140","target":"685","id":"4582","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"232","target":"348","id":"6285","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"237","target":"478","id":"6362","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"74","target":"540","id":"3183","attributes":{"Weight":"1.0"},"color":"rgb(148,148,99)","size":1.0},{"source":"191","target":"324","id":"5571","attributes":{"Weight":"1.0"},"color":"rgb(229,132,99)","size":1.0},{"source":"433","target":"573","id":"9076","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"34","target":"509","id":"2258","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"60","target":"368","id":"2849","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"186","target":"499","id":"5490","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"211","target":"450","id":"5921","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"146","target":"705","id":"4720","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"532","target":"732","id":"9960","attributes":{"Weight":"1.0"},"color":"rgb(148,148,99)","size":1.0},{"source":"392","target":"395","id":"8595","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"149","target":"350","id":"4764","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"8","target":"56","id":"1626","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"64","target":"209","id":"2953","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"25","target":"640","id":"2028","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"11","target":"503","id":"1721","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"160","target":"281","id":"4983","attributes":{"Weight":"1.0"},"color":"rgb(115,83,229)","size":1.0},{"source":"446","target":"581","id":"9229","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"376","target":"490","id":"8368","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"409","target":"604","id":"8805","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"45","target":"461","id":"2508","attributes":{"Weight":"1.0"},"color":"rgb(213,213,67)","size":1.0},{"source":"18","target":"664","id":"1883","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"9","target":"353","id":"1673","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"244","target":"507","id":"6467","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"198","target":"312","id":"5701","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"450","target":"451","id":"9257","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"360","target":"378","id":"8182","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"507","target":"673","id":"9763","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"297","target":"726","id":"7352","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"178","target":"328","id":"5329","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"488","target":"579","id":"9597","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"671","target":"715","id":"10610","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"148","target":"680","id":"4756","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"233","target":"490","id":"6304","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"526","target":"605","id":"9905","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"179","target":"625","id":"5361","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"441","target":"735","id":"9180","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"316","target":"375","id":"7610","attributes":{"Weight":"1.0"},"color":"rgb(164,148,132)","size":1.0},{"source":"33","target":"319","id":"2224","attributes":{"Weight":"1.0"},"color":"rgb(148,180,148)","size":1.0},{"source":"117","target":"242","id":"4097","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"350","target":"682","id":"8087","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"319","target":"424","id":"7658","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"463","target":"486","id":"9391","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"509","target":"564","id":"9779","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"376","target":"717","id":"8376","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"142","target":"263","id":"4609","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"174","target":"243","id":"5250","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"64","target":"565","id":"2973","attributes":{"Weight":"1.0"},"color":"rgb(229,99,148)","size":1.0},{"source":"324","target":"552","id":"7727","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"177","target":"260","id":"5304","attributes":{"Weight":"1.0"},"color":"rgb(115,229,99)","size":1.0},{"source":"427","target":"456","id":"8993","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"379","target":"649","id":"8416","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"120","target":"552","id":"4166","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"374","target":"387","id":"8332","attributes":{"Weight":"1.0"},"color":"rgb(67,229,180)","size":1.0},{"source":"458","target":"680","id":"9344","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"91","target":"265","id":"3560","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"254","target":"410","id":"6637","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"117","target":"406","id":"4103","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"97","target":"435","id":"3692","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"61","target":"133","id":"2867","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"255","target":"694","id":"6661","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"244","target":"345","id":"6462","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"382","target":"452","id":"8453","attributes":{"Weight":"1.0"},"color":"rgb(132,164,148)","size":1.0},{"source":"424","target":"462","id":"8953","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"52","target":"536","id":"2662","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"209","target":"354","id":"5892","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"309","target":"630","id":"7521","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"112","target":"362","id":"4000","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"145","target":"376","id":"4685","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"32","target":"253","id":"2189","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"164","target":"677","id":"5072","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"254","target":"694","id":"6646","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"159","target":"715","id":"4978","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"410","target":"656","id":"8815","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"66","target":"570","id":"3007","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"234","target":"369","id":"6317","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"105","target":"219","id":"3845","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"141","target":"436","id":"4593","attributes":{"Weight":"1.0"},"color":"rgb(213,148,132)","size":1.0},{"source":"21","target":"51","id":"1937","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"366","target":"554","id":"8245","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"93","target":"601","id":"3612","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"70","target":"319","id":"3092","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"32","target":"401","id":"2194","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"437","target":"709","id":"9123","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"271","target":"661","id":"6927","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"67","target":"688","id":"3030","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"279","target":"547","id":"7046","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"130","target":"153","id":"4349","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"11","target":"199","id":"1710","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"183","target":"635","id":"5430","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"38","target":"463","id":"2346","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"26","target":"478","id":"2051","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"121","target":"430","id":"4183","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"276","target":"592","id":"7003","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"169","target":"229","id":"5147","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"178","target":"536","id":"5339","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"325","target":"350","id":"7732","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"110","target":"717","id":"3956","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"95","target":"496","id":"3654","attributes":{"Weight":"1.0"},"color":"rgb(213,148,148)","size":1.0},{"source":"167","target":"352","id":"5120","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"178","target":"549","id":"5340","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"402","target":"674","id":"8727","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"426","target":"718","id":"8992","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"33","target":"214","id":"2218","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"612","target":"677","id":"10385","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"260","target":"690","id":"6747","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"73","target":"636","id":"3163","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"205","target":"418","id":"5824","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"364","target":"578","id":"8219","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"252","target":"422","id":"6602","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"263","target":"660","id":"6794","attributes":{"Weight":"1.0"},"color":"rgb(180,67,164)","size":1.0},{"source":"57","target":"728","id":"2791","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"180","target":"277","id":"5372","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"476","target":"544","id":"9528","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"450","target":"555","id":"9260","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"446","target":"546","id":"9227","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"105","target":"153","id":"3843","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"223","target":"483","id":"6139","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"390","target":"391","id":"8562","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"111","target":"720","id":"3985","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"377","target":"413","id":"8387","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"348","target":"583","id":"8054","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"110","target":"151","id":"3931","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"339","target":"578","id":"7942","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"74","target":"707","id":"3192","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"27","target":"258","id":"2065","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"285","target":"729","id":"7161","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"293","target":"695","id":"7288","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"405","target":"413","id":"8755","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"129","target":"167","id":"4329","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"302","target":"636","id":"7424","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"447","target":"711","id":"9238","attributes":{"Weight":"1.0"},"color":"rgb(213,213,67)","size":1.0},{"source":"26","target":"141","id":"2041","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"334","target":"446","id":"7874","attributes":{"Weight":"1.0"},"color":"rgb(148,148,99)","size":1.0},{"source":"283","target":"405","id":"7126","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"84","target":"420","id":"3398","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"17","target":"509","id":"1859","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"94","target":"350","id":"3626","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"250","target":"356","id":"6563","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"47","target":"356","id":"2549","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"37","target":"705","id":"2326","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"56","target":"522","id":"2756","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"107","target":"210","id":"3875","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"14","target":"597","id":"1793","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"300","target":"539","id":"7394","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"174","target":"641","id":"5257","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"287","target":"419","id":"7182","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"52","target":"372","id":"2656","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"84","target":"321","id":"3395","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"248","target":"378","id":"6531","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"164","target":"294","id":"5059","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"63","target":"159","id":"2925","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"310","target":"686","id":"7538","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"488","target":"533","id":"9595","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"403","target":"597","id":"8735","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"49","target":"446","id":"2594","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"302","target":"688","id":"7427","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"38","target":"352","id":"2341","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"438","target":"734","id":"9138","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"116","target":"258","id":"4072","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"184","target":"516","id":"5446","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"431","target":"717","id":"9051","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"131","target":"618","id":"4389","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"587","target":"691","id":"10273","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"348","target":"616","id":"8056","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"281","target":"647","id":"7086","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"123","target":"125","id":"4211","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"549","target":"718","id":"10059","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"158","target":"695","id":"4954","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"388","target":"588","id":"8551","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"282","target":"689","id":"7109","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"286","target":"652","id":"7177","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"504","target":"602","id":"9735","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"15","target":"493","id":"1810","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"88","target":"602","id":"3503","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"229","target":"357","id":"6239","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"446","target":"592","id":"9230","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"415","target":"575","id":"8847","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"590","target":"670","id":"10288","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"336","target":"401","id":"7901","attributes":{"Weight":"1.0"},"color":"rgb(229,148,83)","size":1.0},{"source":"178","target":"464","id":"5337","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"395","target":"731","id":"8642","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"377","target":"411","id":"8385","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"111","target":"319","id":"3968","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"390","target":"392","id":"8563","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"280","target":"567","id":"7067","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"507","target":"659","id":"9762","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"60","target":"499","id":"2854","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"531","target":"711","id":"9949","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"122","target":"678","id":"4209","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"111","target":"349","id":"3969","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"5","target":"576","id":"1574","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"135","target":"676","id":"4477","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"81","target":"458","id":"3331","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"339","target":"514","id":"7941","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"173","target":"493","id":"5239","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"271","target":"693","id":"6931","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"4","target":"18","id":"1533","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"419","target":"608","id":"8902","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"439","target":"641","id":"9143","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"409","target":"728","id":"8809","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"617","target":"712","id":"10404","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"156","target":"365","id":"4912","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"275","target":"369","id":"6981","attributes":{"Weight":"1.0"},"color":"rgb(67,148,148)","size":1.0},{"source":"428","target":"704","id":"9015","attributes":{"Weight":"1.0"},"color":"rgb(229,115,67)","size":1.0},{"source":"126","target":"341","id":"4274","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"77","target":"468","id":"3250","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"440","target":"604","id":"9161","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"50","target":"150","id":"2605","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"100","target":"309","id":"3753","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"691","target":"702","id":"10649","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"8","target":"625","id":"1651","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"24","target":"292","id":"2005","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"48","target":"568","id":"2572","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"112","target":"484","id":"4003","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"153","target":"554","id":"4855","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"318","target":"564","id":"7647","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"436","target":"443","id":"9106","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"96","target":"105","id":"3666","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"143","target":"539","id":"4642","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"148","target":"471","id":"4749","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"280","target":"529","id":"7065","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"557","target":"674","id":"10098","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"39","target":"191","id":"2362","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"452","target":"622","id":"9279","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"411","target":"414","id":"8822","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"393","target":"411","id":"8611","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"264","target":"651","id":"6809","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"465","target":"734","id":"9416","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"93","target":"188","id":"3598","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"429","target":"710","id":"9026","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"22","target":"174","id":"1964","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"83","target":"182","id":"3373","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"327","target":"433","id":"7761","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"210","target":"705","id":"5911","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"329","target":"427","id":"7799","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"120","target":"235","id":"4154","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"319","target":"489","id":"7664","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"139","target":"415","id":"4543","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"276","target":"510","id":"6999","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"39","target":"531","id":"2371","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"687","target":"721","id":"10636","attributes":{"Weight":"1.0"},"color":"rgb(115,229,115)","size":1.0},{"source":"441","target":"725","id":"9176","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"326","target":"502","id":"7752","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"129","target":"397","id":"4338","attributes":{"Weight":"1.0"},"color":"rgb(229,132,132)","size":1.0},{"source":"173","target":"218","id":"5234","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"353","target":"489","id":"8118","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"200","target":"706","id":"5748","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"233","target":"431","id":"6301","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"257","target":"671","id":"6690","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"168","target":"557","id":"5142","attributes":{"Weight":"1.0"},"color":"rgb(229,132,83)","size":1.0},{"source":"201","target":"305","id":"5753","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"65","target":"387","id":"2983","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"61","target":"442","id":"2883","attributes":{"Weight":"1.0"},"color":"rgb(132,148,196)","size":1.0},{"source":"197","target":"372","id":"5685","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"578","target":"693","id":"10233","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"373","target":"591","id":"8323","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"325","target":"566","id":"7740","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"140","target":"654","id":"4577","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"189","target":"601","id":"5546","attributes":{"Weight":"1.0"},"color":"rgb(229,148,67)","size":1.0},{"source":"259","target":"691","id":"6726","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"343","target":"501","id":"7997","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"211","target":"419","id":"5919","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"205","target":"559","id":"5831","attributes":{"Weight":"1.0"},"color":"rgb(148,115,196)","size":1.0},{"source":"211","target":"221","id":"5913","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"232","target":"603","id":"6291","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"169","target":"256","id":"5148","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"382","target":"503","id":"8458","attributes":{"Weight":"1.0"},"color":"rgb(67,164,213)","size":1.0},{"source":"478","target":"558","id":"9540","attributes":{"Weight":"1.0"},"color":"rgb(213,148,83)","size":1.0},{"source":"230","target":"361","id":"6252","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"583","target":"616","id":"10255","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"345","target":"396","id":"8013","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"101","target":"320","id":"3773","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"99","target":"100","id":"3725","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"59","target":"447","id":"2824","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"562","target":"576","id":"10117","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"342","target":"597","id":"7986","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"271","target":"602","id":"6924","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"166","target":"711","id":"5114","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"447","target":"482","id":"9235","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"99","target":"106","id":"3727","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"8","target":"612","id":"1650","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"226","target":"531","id":"6190","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"372","target":"700","id":"8318","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"553","target":"632","id":"10072","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"81","target":"208","id":"3326","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"234","target":"631","id":"6325","attributes":{"Weight":"1.0"},"color":"rgb(67,115,229)","size":1.0},{"source":"329","target":"615","id":"7808","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"116","target":"232","id":"4070","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"104","target":"256","id":"3825","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"179","target":"532","id":"5357","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"369","target":"672","id":"8284","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"167","target":"531","id":"5126","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"251","target":"356","id":"6584","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"303","target":"713","id":"7449","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"34","target":"446","id":"2257","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"295","target":"546","id":"7319","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"730","target":"735","id":"10689","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"171","target":"496","id":"5199","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"37","target":"420","id":"2318","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"184","target":"524","id":"5447","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"11","target":"138","id":"1709","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"327","target":"454","id":"7763","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"117","target":"326","id":"4099","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"144","target":"335","id":"4657","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"19","target":"291","id":"1898","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"274","target":"582","id":"6967","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"150","target":"227","id":"4780","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"193","target":"725","id":"5613","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"200","target":"505","id":"5738","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"462","target":"608","id":"9386","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"16","target":"640","id":"1836","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"479","target":"680","id":"9547","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"438","target":"735","id":"9139","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"257","target":"715","id":"6692","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"109","target":"128","id":"3909","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"157","target":"539","id":"4938","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"419","target":"450","id":"8893","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"227","target":"719","id":"6215","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"349","target":"572","id":"8070","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"14","target":"649","id":"1795","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"282","target":"364","id":"7097","attributes":{"Weight":"1.0"},"color":"rgb(115,164,148)","size":1.0},{"source":"38","target":"58","id":"2329","attributes":{"Weight":"1.0"},"color":"rgb(213,213,67)","size":1.0},{"source":"520","target":"709","id":"9852","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"220","target":"590","id":"6087","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"14","target":"505","id":"1789","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"69","target":"651","id":"3076","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"6","target":"29","id":"1580","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"111","target":"419","id":"3974","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"238","target":"547","id":"6376","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"371","target":"629","id":"8301","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"342","target":"363","id":"7975","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"35","target":"40","id":"2265","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"371","target":"397","id":"8292","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"55","target":"187","id":"2728","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"411","target":"559","id":"8823","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"108","target":"605","id":"3904","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"54","target":"462","id":"2711","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"190","target":"587","id":"5563","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"58","target":"59","id":"2792","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"434","target":"521","id":"9087","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"17","target":"275","id":"1851","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"190","target":"649","id":"5565","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"69","target":"734","id":"3082","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"139","target":"303","id":"4538","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"325","target":"511","id":"7737","attributes":{"Weight":"1.0"},"color":"rgb(213,115,148)","size":1.0},{"source":"196","target":"275","id":"5653","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"85","target":"289","id":"3416","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"347","target":"404","id":"8038","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"151","target":"567","id":"4823","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"224","target":"323","id":"6147","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"57","target":"565","id":"2785","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"80","target":"713","id":"3324","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"245","target":"316","id":"6478","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"491","target":"603","id":"9623","attributes":{"Weight":"1.0"},"color":"rgb(67,164,180)","size":1.0},{"source":"397","target":"685","id":"8662","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"14","target":"403","id":"1787","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"287","target":"424","id":"7183","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"551","target":"700","id":"10067","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"385","target":"498","id":"8505","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"172","target":"408","id":"5216","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"472","target":"589","id":"9483","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"350","target":"606","id":"8083","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"288","target":"440","id":"7201","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"261","target":"487","id":"6763","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"314","target":"673","id":"7594","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"136","target":"360","id":"4487","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"345","target":"496","id":"8015","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"206","target":"378","id":"5842","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"108","target":"722","id":"3907","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"466","target":"734","id":"9428","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"377","target":"658","id":"8392","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"66","target":"495","id":"3006","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"68","target":"204","id":"3037","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"314","target":"613","id":"7592","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"407","target":"420","id":"8769","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"318","target":"460","id":"7641","attributes":{"Weight":"1.0"},"color":"rgb(67,229,99)","size":1.0},{"source":"101","target":"223","id":"3769","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"287","target":"600","id":"7190","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"268","target":"399","id":"6872","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"523","target":"663","id":"9882","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"543","target":"679","id":"10030","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"61","target":"417","id":"2882","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"223","target":"320","id":"6133","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"58","target":"252","id":"2798","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"100","target":"370","id":"3756","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"143","target":"432","id":"4636","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"150","target":"562","id":"4791","attributes":{"Weight":"1.0"},"color":"rgb(229,67,213)","size":1.0},{"source":"54","target":"623","id":"2718","attributes":{"Weight":"1.0"},"color":"rgb(67,229,196)","size":1.0},{"source":"140","target":"454","id":"4568","attributes":{"Weight":"1.0"},"color":"rgb(67,229,148)","size":1.0},{"source":"490","target":"567","id":"9614","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"563","target":"617","id":"10127","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"517","target":"537","id":"9824","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"453","target":"578","id":"9283","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"413","target":"559","id":"8836","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"73","target":"497","id":"3157","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"144","target":"576","id":"4666","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"424","target":"450","id":"8951","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"446","target":"509","id":"9225","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"72","target":"505","id":"3141","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"249","target":"565","id":"6555","attributes":{"Weight":"1.0"},"color":"rgb(213,148,148)","size":1.0},{"source":"284","target":"666","id":"7147","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"110","target":"111","id":"3929","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"448","target":"550","id":"9242","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"316","target":"373","id":"7609","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"196","target":"521","id":"5666","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"164","target":"569","id":"5066","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"395","target":"412","id":"8635","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"4","target":"346","id":"1542","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"218","target":"422","id":"6051","attributes":{"Weight":"1.0"},"color":"rgb(132,196,148)","size":1.0},{"source":"36","target":"284","id":"2293","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"224","target":"707","id":"6164","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"8","target":"713","id":"1659","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"337","target":"374","id":"7911","attributes":{"Weight":"1.0"},"color":"rgb(67,180,196)","size":1.0},{"source":"320","target":"367","id":"7678","attributes":{"Weight":"1.0"},"color":"rgb(164,99,148)","size":1.0},{"source":"15","target":"173","id":"1802","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"221","target":"279","id":"6095","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"361","target":"362","id":"8193","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"571","target":"618","id":"10171","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"329","target":"456","id":"7800","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"417","target":"673","id":"8876","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"250","target":"653","id":"6574","attributes":{"Weight":"1.0"},"color":"rgb(180,67,164)","size":1.0},{"source":"309","target":"554","id":"7520","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"107","target":"217","id":"3876","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"140","target":"442","id":"4567","attributes":{"Weight":"1.0"},"color":"rgb(67,229,148)","size":1.0},{"source":"92","target":"464","id":"3586","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"86","target":"511","id":"3443","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"602","target":"703","id":"10339","attributes":{"Weight":"1.0"},"color":"rgb(196,196,67)","size":1.0},{"source":"302","target":"516","id":"7419","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"140","target":"625","id":"4576","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"494","target":"519","id":"9654","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"521","target":"589","id":"9857","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"149","target":"507","id":"4768","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"78","target":"584","id":"3273","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"17","target":"276","id":"1852","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"340","target":"709","id":"7964","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"19","target":"482","id":"1907","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"318","target":"713","id":"7653","attributes":{"Weight":"1.0"},"color":"rgb(67,229,99)","size":1.0},{"source":"180","target":"571","id":"5379","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"31","target":"304","id":"2175","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"12","target":"211","id":"1732","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"269","target":"411","id":"6895","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"81","target":"470","id":"3334","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"18","target":"503","id":"1879","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"322","target":"398","id":"7695","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"73","target":"270","id":"3154","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"12","target":"358","id":"1739","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"91","target":"683","id":"3573","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"247","target":"495","id":"6522","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"382","target":"466","id":"8455","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"433","target":"679","id":"9084","attributes":{"Weight":"1.0"},"color":"rgb(67,229,148)","size":1.0},{"source":"382","target":"646","id":"8460","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"574","target":"597","id":"10196","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"51","target":"174","id":"2632","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"215","target":"690","id":"6001","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"411","target":"413","id":"8821","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"489","target":"710","id":"9610","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"10","target":"31","id":"1682","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"263","target":"469","id":"6787","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"218","target":"605","id":"6062","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"236","target":"368","id":"6346","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"367","target":"456","id":"8255","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"212","target":"600","id":"5948","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"86","target":"703","id":"3453","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"31","target":"234","id":"2174","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"183","target":"497","id":"5424","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"2","target":"96","id":"1488","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"114","target":"485","id":"4034","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"224","target":"586","id":"6160","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"133","target":"149","id":"4414","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"553","target":"726","id":"10078","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"403","target":"500","id":"8730","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"189","target":"362","id":"5540","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"233","target":"436","id":"6302","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"61","target":"566","id":"2889","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"42","target":"333","id":"2423","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"155","target":"371","id":"4894","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"426","target":"427","id":"8982","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"472","target":"594","id":"9484","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"152","target":"712","id":"4844","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"206","target":"336","id":"5839","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"507","target":"606","id":"9760","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"308","target":"668","id":"7511","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"651","target":"730","id":"10557","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"44","target":"498","id":"2477","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"61","target":"454","id":"2884","attributes":{"Weight":"1.0"},"color":"rgb(132,148,196)","size":1.0},{"source":"333","target":"655","id":"7867","attributes":{"Weight":"1.0"},"color":"rgb(148,164,148)","size":1.0},{"source":"517","target":"623","id":"9829","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"26","target":"58","id":"2037","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"110","target":"154","id":"3932","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"480","target":"648","id":"9557","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"396","target":"673","id":"8652","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"85","target":"147","id":"3409","attributes":{"Weight":"1.0"},"color":"rgb(180,67,213)","size":1.0},{"source":"47","target":"557","id":"2557","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"127","target":"632","id":"4297","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"163","target":"336","id":"5042","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"283","target":"566","id":"7134","attributes":{"Weight":"1.0"},"color":"rgb(213,67,196)","size":1.0},{"source":"85","target":"529","id":"3424","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"161","target":"621","id":"5007","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"197","target":"492","id":"5690","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"139","target":"232","id":"4535","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"252","target":"404","id":"6600","attributes":{"Weight":"1.0"},"color":"rgb(132,229,132)","size":1.0},{"source":"151","target":"627","id":"4825","attributes":{"Weight":"1.0"},"color":"rgb(148,99,213)","size":1.0},{"source":"185","target":"212","id":"5458","attributes":{"Weight":"1.0"},"color":"rgb(148,213,148)","size":1.0},{"source":"167","target":"486","id":"5125","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"311","target":"625","id":"7549","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"503","target":"534","id":"9727","attributes":{"Weight":"1.0"},"color":"rgb(132,148,213)","size":1.0},{"source":"333","target":"703","id":"7868","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"92","target":"367","id":"3581","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"60","target":"528","id":"2855","attributes":{"Weight":"1.0"},"color":"rgb(229,115,99)","size":1.0},{"source":"303","target":"668","id":"7447","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"45","target":"416","id":"2503","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"355","target":"509","id":"8132","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"118","target":"404","id":"4120","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"106","target":"672","id":"3870","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"463","target":"711","id":"9395","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"37","target":"278","id":"2314","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"162","target":"693","id":"5036","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"169","target":"526","id":"5163","attributes":{"Weight":"1.0"},"color":"rgb(67,196,148)","size":1.0},{"source":"294","target":"316","id":"7293","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"81","target":"474","id":"3336","attributes":{"Weight":"1.0"},"color":"rgb(196,83,148)","size":1.0},{"source":"62","target":"117","id":"2902","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"65","target":"220","id":"2978","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"290","target":"412","id":"7249","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"221","target":"261","id":"6094","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"264","target":"697","id":"6811","attributes":{"Weight":"1.0"},"color":"rgb(99,164,148)","size":1.0},{"source":"660","target":"674","id":"10584","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"54","target":"287","id":"2700","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"149","target":"171","id":"4758","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"87","target":"425","id":"3462","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"64","target":"484","id":"2971","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"390","target":"412","id":"8570","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"237","target":"447","id":"6359","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"342","target":"537","id":"7981","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"644","target":"719","id":"10517","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"29","target":"686","id":"2143","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"155","target":"373","id":"4895","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"117","target":"476","id":"4104","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"239","target":"483","id":"6395","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"206","target":"343","id":"5840","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"56","target":"532","id":"2758","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"207","target":"354","id":"5861","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"271","target":"665","id":"6928","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"684","target":"736","id":"10634","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"114","target":"621","id":"4037","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"153","target":"370","id":"4853","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"278","target":"420","id":"7026","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"10","target":"370","id":"1698","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"74","target":"140","id":"3169","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"49","target":"104","id":"2581","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"333","target":"580","id":"7861","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"384","target":"612","id":"8491","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"222","target":"368","id":"6122","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"101","target":"512","id":"3782","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"529","target":"567","id":"9936","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"127","target":"161","id":"4287","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"101","target":"189","id":"3765","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"168","target":"634","id":"5144","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"245","target":"419","id":"6485","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"191","target":"240","id":"5570","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"199","target":"628","id":"5727","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"346","target":"347","id":"8026","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"267","target":"357","id":"6852","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"15","target":"205","id":"1804","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"18","target":"346","id":"1873","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"234","target":"469","id":"6320","attributes":{"Weight":"1.0"},"color":"rgb(99,67,229)","size":1.0},{"source":"348","target":"576","id":"8053","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"151","target":"586","id":"4824","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"215","target":"596","id":"5995","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"177","target":"707","id":"5327","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"231","target":"342","id":"6264","attributes":{"Weight":"1.0"},"color":"rgb(67,229,116)","size":1.0},{"source":"330","target":"392","id":"7814","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"20","target":"326","id":"1920","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"351","target":"718","id":"8102","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"429","target":"499","id":"9019","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"523","target":"589","id":"9878","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"101","target":"344","id":"3774","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"128","target":"136","id":"4305","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"350","target":"714","id":"8088","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"135","target":"586","id":"4475","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"417","target":"682","id":"8877","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"67","target":"204","id":"3017","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"394","target":"561","id":"8629","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"333","target":"716","id":"7869","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"447","target":"449","id":"9231","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"528","target":"703","id":"9932","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"131","target":"571","id":"4384","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"137","target":"315","id":"4505","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"1","target":"493","id":"1475","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"224","target":"431","id":"6151","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"341","target":"375","id":"7966","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"203","target":"475","id":"5792","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"441","target":"491","id":"9169","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"415","target":"681","id":"8854","attributes":{"Weight":"1.0"},"color":"rgb(83,229,99)","size":1.0},{"source":"14","target":"587","id":"1792","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"33","target":"429","id":"2233","attributes":{"Weight":"1.0"},"color":"rgb(229,99,99)","size":1.0},{"source":"277","target":"703","id":"7021","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"248","target":"727","id":"6541","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"270","target":"516","id":"6907","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"430","target":"654","id":"9036","attributes":{"Weight":"1.0"},"color":"rgb(148,213,99)","size":1.0},{"source":"87","target":"604","id":"3476","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"234","target":"309","id":"6315","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"204","target":"688","id":"5818","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"116","target":"318","id":"4075","attributes":{"Weight":"1.0"},"color":"rgb(67,229,99)","size":1.0},{"source":"375","target":"502","id":"8355","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"359","target":"461","id":"8173","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"294","target":"719","id":"7310","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"396","target":"659","id":"8651","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"162","target":"260","id":"5017","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"93","target":"511","id":"3606","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"85","target":"280","id":"3415","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"591","target":"643","id":"10291","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"463","target":"634","id":"9394","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"352","target":"430","id":"8105","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"199","target":"520","id":"5725","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"380","target":"467","id":"8421","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"86","target":"619","id":"3450","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"59","target":"291","id":"2821","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"169","target":"276","id":"5151","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"1","target":"418","id":"1473","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"297","target":"632","id":"7345","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"458","target":"479","id":"9339","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"223","target":"512","id":"6141","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"79","target":"374","id":"3284","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"47","target":"253","id":"2545","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"212","target":"225","id":"5933","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"186","target":"235","id":"5481","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"12","target":"225","id":"1735","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"128","target":"617","id":"4322","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"80","target":"415","id":"3316","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"193","target":"438","id":"5602","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"477","target":"686","id":"9537","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"308","target":"415","id":"7501","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"60","target":"318","id":"2845","attributes":{"Weight":"1.0"},"color":"rgb(148,148,99)","size":1.0},{"source":"572","target":"720","id":"10185","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"585","target":"631","id":"10264","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"275","target":"446","id":"6982","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"625","target":"677","id":"10436","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"182","target":"337","id":"5404","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"410","target":"660","id":"8816","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"21","target":"695","id":"1952","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"215","target":"504","id":"5993","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"132","target":"223","id":"4401","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"109","target":"712","id":"3927","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"40","target":"273","id":"2381","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"46","target":"123","id":"2520","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"8","target":"707","id":"1658","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"7","target":"364","id":"1610","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"408","target":"707","id":"8788","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"227","target":"572","id":"6207","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"89","target":"638","id":"3527","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"22","target":"704","id":"1974","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"193","target":"647","id":"5608","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"493","target":"526","id":"9646","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"218","target":"631","id":"6063","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"60","target":"548","id":"2856","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"162","target":"703","id":"5037","attributes":{"Weight":"1.0"},"color":"rgb(196,196,67)","size":1.0},{"source":"195","target":"722","id":"5652","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"129","target":"607","id":"4344","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"192","target":"273","id":"5583","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"63","target":"657","id":"2941","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"359","target":"711","id":"8181","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"240","target":"352","id":"6398","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"368","target":"419","id":"8265","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"125","target":"447","id":"4256","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"88","target":"221","id":"3486","attributes":{"Weight":"1.0"},"color":"rgb(115,229,148)","size":1.0},{"source":"425","target":"521","id":"8969","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"83","target":"626","id":"3384","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"13","target":"36","id":"1752","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"346","target":"437","id":"8029","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"231","target":"434","id":"6267","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"671","target":"726","id":"10611","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"72","target":"537","id":"3142","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"279","target":"586","id":"7049","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"121","target":"167","id":"4174","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"33","target":"569","id":"2240","attributes":{"Weight":"1.0"},"color":"rgb(229,99,132)","size":1.0},{"source":"120","target":"324","id":"4158","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"38","target":"636","id":"2353","attributes":{"Weight":"1.0"},"color":"rgb(180,213,67)","size":1.0},{"source":"472","target":"543","id":"9480","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"129","target":"168","id":"4330","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"4","target":"11","id":"1532","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"87","target":"508","id":"3468","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"421","target":"589","id":"8924","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"107","target":"627","id":"3886","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"39","target":"486","id":"2370","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"282","target":"646","id":"7104","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"47","target":"401","id":"2551","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"291","target":"382","id":"7258","attributes":{"Weight":"1.0"},"color":"rgb(132,164,148)","size":1.0},{"source":"393","target":"399","id":"8609","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"90","target":"91","id":"3533","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"89","target":"114","id":"3512","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"221","target":"260","id":"6093","attributes":{"Weight":"1.0"},"color":"rgb(115,229,148)","size":1.0},{"source":"54","target":"443","id":"2708","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"548","target":"595","id":"10053","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"202","target":"212","id":"5766","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"157","target":"542","id":"4939","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"228","target":"236","id":"6218","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"185","target":"607","id":"5471","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"333","target":"428","id":"7856","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"51","target":"293","id":"2635","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"62","target":"544","id":"2918","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"22","target":"243","id":"1965","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"157","target":"698","id":"4944","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"196","target":"440","id":"5662","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"152","target":"550","id":"4840","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"95","target":"563","id":"3658","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"269","target":"330","id":"6885","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"192","target":"467","id":"5589","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"182","target":"321","id":"5403","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"285","target":"730","id":"7162","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"604","target":"728","id":"10348","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"139","target":"348","id":"4541","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"177","target":"460","id":"5313","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"396","target":"507","id":"8645","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"170","target":"656","id":"5185","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"325","target":"534","id":"7738","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"321","target":"662","id":"7693","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"540","target":"733","id":"10014","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"646","target":"729","id":"10526","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"485","target":"553","id":"9575","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"28","target":"217","id":"2099","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"196","target":"409","id":"5659","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"105","target":"554","id":"3853","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"179","target":"342","id":"5350","attributes":{"Weight":"1.0"},"color":"rgb(67,229,116)","size":1.0},{"source":"125","target":"481","id":"4261","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"140","target":"408","id":"4566","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"188","target":"601","id":"5522","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"349","target":"371","id":"8062","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"64","target":"361","id":"2964","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"656","target":"694","id":"10575","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"66","target":"137","id":"2994","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"7","target":"162","id":"1603","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"51","target":"704","id":"2642","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"74","target":"408","id":"3177","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"72","target":"587","id":"3144","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"606","target":"659","id":"10354","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"212","target":"728","id":"5955","attributes":{"Weight":"1.0"},"color":"rgb(148,148,229)","size":1.0},{"source":"65","target":"628","id":"2989","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"283","target":"391","id":"7120","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"150","target":"569","id":"4792","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"149","target":"244","id":"4759","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"229","target":"275","id":"6233","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"166","target":"463","id":"5107","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"424","target":"555","id":"8957","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"126","target":"242","id":"4271","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"228","target":"235","id":"6217","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"175","target":"514","id":"5274","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"27","target":"543","id":"2075","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"535","target":"698","id":"9979","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"264","target":"735","id":"6817","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"358","target":"419","id":"8159","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"662","target":"705","id":"10593","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"266","target":"661","id":"6839","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"108","target":"493","id":"3897","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"519","target":"526","id":"9841","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"143","target":"514","id":"4640","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"460","target":"707","id":"9372","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"349","target":"373","id":"8063","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"440","target":"702","id":"9165","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"232","target":"303","id":"6282","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"328","target":"536","id":"7787","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"156","target":"326","id":"4910","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"153","target":"234","id":"4848","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"9","target":"548","id":"1678","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"221","target":"693","id":"6114","attributes":{"Weight":"1.0"},"color":"rgb(115,229,148)","size":1.0},{"source":"161","target":"297","id":"5001","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"419","target":"424","id":"8891","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"97","target":"582","id":"3699","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"145","target":"436","id":"4687","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"545","target":"660","id":"10038","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"186","target":"429","id":"5488","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"426","target":"549","id":"8987","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"381","target":"623","id":"8446","attributes":{"Weight":"1.0"},"color":"rgb(148,148,196)","size":1.0},{"source":"313","target":"515","id":"7575","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"538","target":"637","id":"9997","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"681","target":"683","id":"10630","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"345","target":"673","id":"8022","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"237","target":"291","id":"6356","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"62","target":"476","id":"2914","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"182","target":"217","id":"5401","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"532","target":"707","id":"9959","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"390","target":"414","id":"8572","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"139","target":"668","id":"4553","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"161","target":"639","id":"5010","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"71","target":"113","id":"3108","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"222","target":"324","id":"6119","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"6","target":"515","id":"1596","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"430","target":"463","id":"9030","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"165","target":"729","id":"5094","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"260","target":"279","id":"6732","attributes":{"Weight":"1.0"},"color":"rgb(196,148,132)","size":1.0},{"source":"421","target":"521","id":"8919","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"162","target":"241","id":"5016","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"40","target":"467","id":"2387","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"61","target":"396","id":"2881","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"397","target":"591","id":"8657","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"43","target":"628","id":"2454","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"227","target":"349","id":"6201","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"260","target":"692","id":"6748","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"11","target":"237","id":"1712","attributes":{"Weight":"1.0"},"color":"rgb(132,229,132)","size":1.0},{"source":"147","target":"542","id":"4735","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"81","target":"307","id":"3328","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"240","target":"463","id":"6403","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"380","target":"584","id":"8424","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"444","target":"539","id":"9213","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"282","target":"734","id":"7114","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"79","target":"498","id":"3293","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"11","target":"387","id":"1717","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"190","target":"500","id":"5559","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"171","target":"593","id":"5204","attributes":{"Weight":"1.0"},"color":"rgb(213,115,148)","size":1.0},{"source":"120","target":"353","id":"4160","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"340","target":"503","id":"7958","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"36","target":"247","id":"2291","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"57","target":"543","id":"2783","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"314","target":"396","id":"7585","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"102","target":"228","id":"3787","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"302","target":"684","id":"7426","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"603","target":"616","id":"10342","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"196","target":"352","id":"5656","attributes":{"Weight":"1.0"},"color":"rgb(229,132,148)","size":1.0},{"source":"612","target":"685","id":"10388","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"92","target":"351","id":"3580","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"218","target":"655","id":"6064","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"282","target":"729","id":"7112","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"13","target":"315","id":"1763","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"208","target":"313","id":"5871","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"42","target":"571","id":"2428","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"55","target":"370","id":"2733","attributes":{"Weight":"1.0"},"color":"rgb(99,67,229)","size":1.0},{"source":"168","target":"711","id":"5145","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"43","target":"220","id":"2441","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"221","target":"572","id":"6108","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"250","target":"253","id":"6560","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"29","target":"468","id":"2133","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"190","target":"194","id":"5548","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"159","target":"161","id":"4960","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"147","target":"624","id":"4736","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"249","target":"416","id":"6545","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"10","target":"304","id":"1693","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"172","target":"685","id":"5229","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"242","target":"530","id":"6441","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"33","target":"132","id":"2213","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"419","target":"529","id":"8898","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"95","target":"360","id":"3650","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"30","target":"60","id":"2144","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"487","target":"608","id":"9592","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"254","target":"255","id":"6632","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"178","target":"351","id":"5331","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"50","target":"569","id":"2623","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"475","target":"611","id":"9518","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"126","target":"365","id":"4275","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"71","target":"159","id":"3110","attributes":{"Weight":"1.0"},"color":"rgb(115,99,229)","size":1.0},{"source":"427","target":"615","id":"9000","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"58","target":"422","id":"2802","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"33","target":"189","id":"2215","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"302","target":"497","id":"7418","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"475","target":"656","id":"9522","attributes":{"Weight":"1.0"},"color":"rgb(148,148,132)","size":1.0},{"source":"367","target":"492","id":"8257","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"646","target":"689","id":"10522","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"334","target":"595","id":"7879","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"138","target":"340","id":"4519","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"201","target":"228","id":"5750","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"575","target":"713","id":"10209","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"71","target":"302","id":"3116","attributes":{"Weight":"1.0"},"color":"rgb(99,180,148)","size":1.0},{"source":"3","target":"167","id":"1516","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"285","target":"651","id":"7157","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"113","target":"182","id":"4006","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"223","target":"354","id":"6135","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"589","target":"594","id":"10279","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"431","target":"703","id":"9050","attributes":{"Weight":"1.0"},"color":"rgb(229,115,132)","size":1.0},{"source":"22","target":"293","id":"1967","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"337","target":"407","id":"7914","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"128","target":"563","id":"4320","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"88","target":"364","id":"3494","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"346","target":"709","id":"8036","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"26","target":"237","id":"2042","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"109","target":"617","id":"3926","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"198","target":"270","id":"5699","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"450","target":"600","id":"9261","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"338","target":"613","id":"7933","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"313","target":"686","id":"7580","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"569","target":"591","id":"10157","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"500","target":"587","id":"9708","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"390","target":"560","id":"8574","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"215","target":"665","id":"6000","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"274","target":"435","id":"6961","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"28","target":"245","id":"2100","attributes":{"Weight":"1.0"},"color":"rgb(148,99,213)","size":1.0},{"source":"6","target":"620","id":"1599","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"34","target":"357","id":"2256","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"6","target":"468","id":"1591","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"646","target":"647","id":"10519","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"513","target":"683","id":"9800","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"668","target":"702","id":"10606","attributes":{"Weight":"1.0"},"color":"rgb(67,229,116)","size":1.0},{"source":"468","target":"470","id":"9436","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"528","target":"716","id":"9934","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"465","target":"729","id":"9414","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"659","target":"673","id":"10581","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"139","target":"231","id":"4534","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"166","target":"486","id":"5108","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"77","target":"515","id":"3255","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"8","target":"522","id":"1643","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"331","target":"547","id":"7836","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"144","target":"371","id":"4659","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"196","target":"604","id":"5674","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"60","target":"371","id":"2850","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"42","target":"180","id":"2415","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"452","target":"670","id":"9280","attributes":{"Weight":"1.0"},"color":"rgb(132,229,132)","size":1.0},{"source":"497","target":"736","id":"9688","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"132","target":"445","id":"4410","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"487","target":"555","id":"9590","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"308","target":"726","id":"7514","attributes":{"Weight":"1.0"},"color":"rgb(115,148,180)","size":1.0},{"source":"573","target":"678","id":"10192","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"110","target":"627","id":"3952","attributes":{"Weight":"1.0"},"color":"rgb(148,99,213)","size":1.0},{"source":"74","target":"177","id":"3171","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"110","target":"643","id":"3954","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"442","target":"498","id":"9185","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"352","target":"652","id":"8113","attributes":{"Weight":"1.0"},"color":"rgb(229,180,67)","size":1.0},{"source":"216","target":"443","id":"6014","attributes":{"Weight":"1.0"},"color":"rgb(229,115,132)","size":1.0},{"source":"553","target":"638","id":"10073","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"289","target":"428","id":"7222","attributes":{"Weight":"1.0"},"color":"rgb(229,115,132)","size":1.0},{"source":"155","target":"644","id":"4902","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"477","target":"541","id":"9534","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"189","target":"209","id":"5529","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"281","target":"646","id":"7085","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"329","target":"549","id":"7804","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"71","target":"337","id":"3118","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"211","target":"424","id":"5920","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"260","target":"591","id":"6741","attributes":{"Weight":"1.0"},"color":"rgb(196,148,132)","size":1.0},{"source":"475","target":"648","id":"9521","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"46","target":"249","id":"2524","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"84","target":"337","id":"3396","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"285","target":"647","id":"7155","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"532","target":"654","id":"9953","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"451","target":"645","id":"9273","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"450","target":"645","id":"9265","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"254","target":"400","id":"6634","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"347","target":"387","id":"8037","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"242","target":"681","id":"6444","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"32","target":"170","id":"2186","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"31","target":"457","id":"2180","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"58","target":"424","id":"2803","attributes":{"Weight":"1.0"},"color":"rgb(132,229,148)","size":1.0},{"source":"3","target":"463","id":"1526","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"268","target":"393","id":"6869","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"92","target":"718","id":"3594","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"695","target":"708","id":"10658","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"524","target":"697","id":"9892","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"322","target":"657","id":"7703","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"381","target":"523","id":"8438","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"42","target":"511","id":"2426","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"58","target":"478","id":"2807","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"275","target":"581","id":"6988","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"155","target":"569","id":"4897","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"540","target":"704","id":"10011","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"82","target":"433","id":"3353","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"140","target":"677","id":"4579","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"433","target":"614","id":"9079","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"194","target":"574","id":"5628","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"62","target":"326","id":"2909","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"356","target":"694","id":"8150","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"377","target":"412","id":"8386","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"342","target":"505","id":"7980","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"153","target":"701","id":"4858","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"278","target":"533","id":"7028","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"348","target":"668","id":"8058","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"336","target":"506","id":"7904","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"530","target":"544","id":"9944","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"310","target":"468","id":"7528","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"429","target":"595","id":"9024","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"207","target":"320","id":"5859","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"492","target":"700","id":"9641","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"23","target":"640","id":"1990","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"32","target":"400","id":"2193","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"232","target":"713","id":"6294","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"233","target":"676","id":"6309","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"45","target":"483","id":"2512","attributes":{"Weight":"1.0"},"color":"rgb(213,180,67)","size":1.0},{"source":"290","target":"658","id":"7255","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"383","target":"706","id":"8482","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"212","target":"675","id":"5953","attributes":{"Weight":"1.0"},"color":"rgb(132,229,148)","size":1.0},{"source":"490","target":"717","id":"9620","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"261","target":"424","id":"6759","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"285","target":"646","id":"7154","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"480","target":"517","id":"9551","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"179","target":"717","id":"5369","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"481","target":"503","id":"9561","attributes":{"Weight":"1.0"},"color":"rgb(132,229,132)","size":1.0},{"source":"596","target":"610","id":"10307","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"399","target":"405","id":"8682","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"7","target":"88","id":"1602","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"593","target":"652","id":"10299","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"18","target":"347","id":"1874","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"542","target":"653","id":"10019","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"385","target":"518","id":"8507","attributes":{"Weight":"1.0"},"color":"rgb(148,164,115)","size":1.0},{"source":"285","target":"689","id":"7158","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"647","target":"650","id":"10530","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"75","target":"190","id":"3195","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"339","target":"665","id":"7947","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"36","target":"599","id":"2303","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"475","target":"573","id":"9516","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"453","target":"661","id":"9287","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"521","target":"562","id":"9855","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"189","target":"223","id":"5531","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"288","target":"525","id":"7208","attributes":{"Weight":"1.0"},"color":"rgb(148,115,229)","size":1.0},{"source":"468","target":"541","id":"9442","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"68","target":"183","id":"3034","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"237","target":"422","id":"6358","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"61","target":"659","id":"2893","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"226","target":"430","id":"6186","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"360","target":"501","id":"8185","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"646","target":"651","id":"10521","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"571","target":"623","id":"10173","attributes":{"Weight":"1.0"},"color":"rgb(148,196,115)","size":1.0},{"source":"454","target":"687","id":"9306","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"120","target":"733","id":"4170","attributes":{"Weight":"1.0"},"color":"rgb(229,67,99)","size":1.0},{"source":"407","target":"662","id":"8775","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"141","target":"246","id":"4587","attributes":{"Weight":"1.0"},"color":"rgb(180,148,148)","size":1.0},{"source":"464","target":"700","id":"9403","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"606","target":"714","id":"10358","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"500","target":"702","id":"9712","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"650","target":"730","id":"10550","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"43","target":"272","id":"2442","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"550","target":"727","id":"10064","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"247","target":"273","id":"6515","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"568","target":"732","id":"10154","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"67","target":"68","id":"3012","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"274","target":"722","id":"6972","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"61","target":"606","id":"2891","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"287","target":"645","id":"7194","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"602","target":"665","id":"10335","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"542","target":"698","id":"10021","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"135","target":"233","id":"4453","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"403","target":"691","id":"8737","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"327","target":"623","id":"7773","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"641","target":"704","id":"10506","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"530","target":"681","id":"9945","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"366","target":"672","id":"8249","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"50","target":"368","id":"2615","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"33","target":"230","id":"2220","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"87","target":"472","id":"3465","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"99","target":"662","id":"3742","attributes":{"Weight":"1.0"},"color":"rgb(67,99,229)","size":1.0},{"source":"272","target":"520","id":"6941","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"194","target":"200","id":"5618","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"214","target":"223","id":"5971","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"162","target":"453","id":"5026","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"169","target":"304","id":"5153","attributes":{"Weight":"1.0"},"color":"rgb(67,148,148)","size":1.0},{"source":"304","target":"370","id":"7454","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"610","target":"721","id":"10373","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"260","target":"721","id":"6750","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"74","target":"612","id":"3184","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"38","target":"166","id":"2333","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"259","target":"505","id":"6719","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"591","target":"719","id":"10294","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"211","target":"225","id":"5914","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"114","target":"472","id":"4032","attributes":{"Weight":"1.0"},"color":"rgb(196,67,229)","size":1.0},{"source":"142","target":"669","id":"4624","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"159","target":"714","id":"4977","attributes":{"Weight":"1.0"},"color":"rgb(180,67,229)","size":1.0},{"source":"416","target":"452","id":"8859","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"125","target":"675","id":"4267","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"248","target":"506","id":"6535","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"593","target":"716","id":"10301","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"62","target":"242","id":"2907","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"299","target":"514","id":"7377","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"432","target":"624","id":"9063","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"74","target":"532","id":"3182","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"216","target":"601","id":"6021","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"47","target":"336","id":"2548","attributes":{"Weight":"1.0"},"color":"rgb(229,148,83)","size":1.0},{"source":"116","target":"575","id":"4084","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"84","target":"731","id":"3406","attributes":{"Weight":"1.0"},"color":"rgb(148,99,196)","size":1.0},{"source":"2","target":"219","id":"1496","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"296","target":"605","id":"7333","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"208","target":"686","id":"5884","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"265","target":"365","id":"6820","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"428","target":"511","id":"9003","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"30","target":"334","id":"2155","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"321","target":"579","id":"7690","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"94","target":"714","id":"3638","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"419","target":"720","id":"8906","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"348","target":"434","id":"8050","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"461","target":"634","id":"9380","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"136","target":"378","id":"4488","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"8","target":"528","id":"1645","attributes":{"Weight":"1.0"},"color":"rgb(148,196,99)","size":1.0},{"source":"60","target":"116","id":"2834","attributes":{"Weight":"1.0"},"color":"rgb(148,148,132)","size":1.0},{"source":"312","target":"637","id":"7563","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"209","target":"445","id":"5895","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"440","target":"668","id":"9164","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"267","target":"318","id":"6850","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"628","target":"670","id":"10447","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"537","target":"587","id":"9987","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"154","target":"720","id":"4884","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"257","target":"621","id":"6685","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"132","target":"209","id":"4399","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"48","target":"293","id":"2569","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"58","target":"636","id":"2813","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"467","target":"495","id":"9430","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"450","target":"608","id":"9262","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"163","target":"727","id":"5055","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"268","target":"391","id":"6867","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"449","target":"452","id":"9248","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"580","target":"716","id":"10247","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"460","target":"576","id":"9362","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"574","target":"706","id":"10200","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"303","target":"543","id":"7439","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"19","target":"252","id":"1897","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"176","target":"426","id":"5289","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"585","target":"722","id":"10266","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"408","target":"460","id":"8777","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"72","target":"379","id":"3137","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"158","target":"540","id":"4950","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"514","target":"535","id":"9801","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"190","target":"574","id":"5562","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"297","target":"671","id":"7350","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"312","target":"636","id":"7562","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"100","target":"105","id":"3745","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"389","target":"666","id":"8561","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"374","target":"577","id":"8342","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"319","target":"569","id":"7667","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"260","target":"453","id":"6737","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"513","target":"530","id":"9797","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"123","target":"449","id":"4220","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"111","target":"155","id":"3962","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"77","target":"313","id":"3247","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"412","target":"658","id":"8833","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"469","target":"734","id":"9457","attributes":{"Weight":"1.0"},"color":"rgb(99,83,229)","size":1.0},{"source":"96","target":"219","id":"3672","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"302","target":"633","id":"7422","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"460","target":"532","id":"9360","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"385","target":"687","id":"8516","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"386","target":"667","id":"8528","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"363","target":"702","id":"8214","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"49","target":"275","id":"2587","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"270","target":"302","id":"6904","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"192","target":"570","id":"5591","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"35","target":"467","id":"2278","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"129","target":"166","id":"4328","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"50","target":"719","id":"2629","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"162","target":"578","id":"5028","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"215","target":"721","id":"6004","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"256","target":"592","id":"6677","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"527","target":"625","id":"9914","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"402","target":"557","id":"8723","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"119","target":"712","id":"4148","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"74","target":"311","id":"3174","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"62","target":"683","id":"2920","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"247","target":"467","id":"6521","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"284","target":"584","id":"7144","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"55","target":"263","id":"2729","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"24","target":"48","id":"1999","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"249","target":"422","id":"6546","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"243","target":"732","id":"6457","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"385","target":"611","id":"8510","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"198","target":"204","id":"5698","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"154","target":"397","id":"4872","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"172","target":"706","id":"5230","attributes":{"Weight":"1.0"},"color":"rgb(67,229,116)","size":1.0},{"source":"537","target":"702","id":"9992","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"56","target":"172","id":"2748","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"28","target":"626","id":"2117","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"225","target":"487","id":"6176","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"140","target":"316","id":"4561","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"376","target":"699","id":"8375","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"398","target":"639","id":"8674","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"80","target":"303","id":"3312","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"44","target":"433","id":"2472","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"497","target":"697","id":"9687","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"187","target":"542","id":"5506","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"196","target":"472","id":"5663","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"93","target":"716","id":"3617","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"313","target":"518","id":"7576","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"339","target":"721","id":"7951","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"9","target":"186","id":"1664","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"262","target":"354","id":"6774","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"23","target":"641","id":"1991","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"729","target":"730","id":"10685","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"212","target":"555","id":"5947","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"23","target":"439","id":"1987","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"517","target":"611","id":"9827","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"139","target":"238","id":"4536","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"94","target":"171","id":"3620","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"4","target":"709","id":"1553","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"690","target":"721","id":"10647","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"420","target":"488","id":"8907","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"114","target":"657","id":"4042","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"135","target":"349","id":"4461","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"140","target":"679","id":"4581","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"53","target":"684","id":"2687","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"600","target":"645","id":"10325","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"85","target":"443","id":"3422","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"673","target":"682","id":"10613","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"325","target":"417","id":"7734","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"73","target":"183","id":"3150","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"432","target":"469","id":"9055","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"431","target":"490","id":"9042","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"21","target":"48","id":"1936","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"4","target":"520","id":"1548","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"658","target":"731","id":"10580","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"282","target":"725","id":"7111","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"327","target":"517","id":"7768","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"689","target":"725","id":"10640","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"54","target":"319","id":"2702","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"272","target":"670","id":"6945","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"131","target":"180","id":"4370","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"77","target":"518","id":"3256","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"366","target":"591","id":"8247","attributes":{"Weight":"1.0"},"color":"rgb(148,67,213)","size":1.0},{"source":"128","target":"506","id":"4317","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"119","target":"506","id":"4143","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"692","target":"693","id":"10651","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"443","target":"547","id":"9198","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"66","target":"666","id":"3011","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"63","target":"474","id":"2934","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"188","target":"571","id":"5519","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"419","target":"600","id":"8901","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"269","target":"290","id":"6884","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"430","target":"461","id":"9029","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"147","target":"187","id":"4723","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"20","target":"91","id":"1912","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"488","target":"647","id":"9600","attributes":{"Weight":"1.0"},"color":"rgb(67,116,229)","size":1.0},{"source":"240","target":"711","id":"6411","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"618","target":"703","id":"10408","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"237","target":"449","id":"6360","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"351","target":"464","id":"8094","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"88","target":"692","id":"3508","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"459","target":"479","id":"9350","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"385","target":"656","id":"8514","attributes":{"Weight":"1.0"},"color":"rgb(148,148,132)","size":1.0},{"source":"638","target":"692","id":"10491","attributes":{"Weight":"1.0"},"color":"rgb(164,148,148)","size":1.0},{"source":"533","target":"705","id":"9965","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"318","target":"562","id":"7646","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"133","target":"345","id":"4420","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"171","target":"396","id":"5197","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"399","target":"412","id":"8684","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"439","target":"708","id":"9146","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"137","target":"273","id":"4502","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"82","target":"687","id":"3368","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"1","target":"525","id":"1478","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"231","target":"616","id":"6274","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"295","target":"318","id":"7313","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"110","target":"569","id":"3948","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"318","target":"355","id":"7637","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"26","target":"449","id":"2049","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"142","target":"147","id":"4605","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"168","target":"486","id":"5140","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"75","target":"403","id":"3203","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"72","target":"75","id":"3129","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"169","target":"267","id":"5149","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"103","target":"295","id":"3811","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"19","target":"416","id":"1900","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"103","target":"355","id":"3814","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"102","target":"305","id":"3791","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"90","target":"265","id":"3540","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"260","target":"596","id":"6742","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"135","target":"319","id":"4458","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"552","target":"595","id":"10069","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"43","target":"670","id":"2456","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"301","target":"469","id":"7406","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"567","target":"717","id":"10147","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"56","target":"527","id":"2757","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"150","target":"572","id":"4793","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"229","target":"355","id":"6238","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"111","target":"135","id":"3959","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"109","target":"378","id":"3918","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"86","target":"300","id":"3439","attributes":{"Weight":"1.0"},"color":"rgb(180,115,148)","size":1.0},{"source":"187","target":"263","id":"5495","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"335","target":"576","id":"7887","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"391","target":"559","id":"8588","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"164","target":"643","id":"5070","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"453","target":"723","id":"9293","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"378","target":"501","id":"8398","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"183","target":"684","id":"5434","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"58","target":"291","id":"2800","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"428","target":"732","id":"9017","attributes":{"Weight":"1.0"},"color":"rgb(229,115,67)","size":1.0},{"source":"34","target":"169","id":"2246","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"79","target":"480","id":"3292","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"228","target":"305","id":"6219","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"425","target":"523","id":"8970","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"260","target":"602","id":"6743","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"106","target":"630","id":"3869","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"314","target":"338","id":"7582","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"111","target":"294","id":"3966","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"36","target":"666","id":"2304","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"595","target":"710","id":"10305","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"376","target":"529","id":"8370","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"55","target":"514","id":"2738","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"330","target":"393","id":"7815","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"157","target":"669","id":"4943","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"438","target":"725","id":"9135","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"106","target":"181","id":"3859","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"400","target":"545","id":"8698","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"540","target":"641","id":"10009","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"130","target":"304","id":"4354","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"386","target":"527","id":"8521","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"316","target":"572","id":"7616","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"191","target":"531","id":"5578","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"169","target":"295","id":"5152","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"31","target":"554","id":"2181","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"122","target":"517","id":"4202","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"160","target":"621","id":"4991","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"267","target":"494","id":"6854","attributes":{"Weight":"1.0"},"color":"rgb(67,196,148)","size":1.0},{"source":"73","target":"204","id":"3153","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"47","target":"656","id":"2559","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"307","target":"680","id":"7497","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"527","target":"677","id":"9917","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"13","target":"584","id":"1769","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"495","target":"584","id":"9664","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"67","target":"516","id":"3022","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"227","target":"316","id":"6199","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"386","target":"522","id":"8520","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"464","target":"551","id":"9399","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"37","target":"107","id":"2308","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"273","target":"495","id":"6953","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"357","target":"564","id":"8156","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"591","target":"644","id":"10292","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"96","target":"100","id":"3665","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"263","target":"301","id":"6783","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"392","target":"561","id":"8604","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"422","target":"449","id":"8932","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"177","target":"408","id":"5311","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"101","target":"124","id":"3763","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"321","target":"626","id":"7691","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"344","target":"512","id":"8011","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"695","target":"733","id":"10660","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"289","target":"586","id":"7232","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"194","target":"702","id":"5633","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"76","target":"604","id":"3236","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"654","target":"702","id":"10570","attributes":{"Weight":"1.0"},"color":"rgb(67,229,116)","size":1.0},{"source":"428","target":"580","id":"9008","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"4","target":"118","id":"1536","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"169","target":"369","id":"5159","attributes":{"Weight":"1.0"},"color":"rgb(67,148,148)","size":1.0},{"source":"229","target":"295","id":"6235","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"537","target":"597","id":"9988","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"365","target":"513","id":"8236","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"2","target":"457","id":"1504","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"36","target":"306","id":"2294","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"23","target":"51","id":"1981","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"278","target":"705","id":"7033","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"257","target":"322","id":"6679","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"387","target":"590","id":"8539","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"300","target":"514","id":"7392","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"157","target":"514","id":"4935","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"106","target":"130","id":"3857","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"291","target":"503","id":"7267","attributes":{"Weight":"1.0"},"color":"rgb(132,229,132)","size":1.0},{"source":"288","target":"589","id":"7214","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"379","target":"702","id":"8418","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"322","target":"715","id":"7705","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"33","target":"484","id":"2236","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"202","target":"487","id":"5779","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"30","target":"186","id":"2147","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"55","target":"143","id":"2724","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"267","target":"295","id":"6848","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"3","target":"531","id":"1528","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"177","target":"612","id":"5319","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"81","target":"515","id":"3339","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"51","target":"695","id":"2641","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"304","target":"701","id":"7462","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"496","target":"673","id":"9675","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"380","target":"599","id":"8426","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"47","target":"674","id":"2561","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"392","target":"560","id":"8603","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"54","target":"294","id":"2701","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"251","target":"674","id":"6596","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"211","target":"212","id":"5912","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"166","target":"373","id":"5103","attributes":{"Weight":"1.0"},"color":"rgb(229,132,132)","size":1.0},{"source":"194","target":"500","id":"5625","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"303","target":"629","id":"7446","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"102","target":"353","id":"3794","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"654","target":"679","id":"10568","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"11","target":"404","id":"1718","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"180","target":"511","id":"5377","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"495","target":"570","id":"9663","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"81","target":"471","id":"3335","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"415","target":"583","id":"8849","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"268","target":"414","id":"6877","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"50","target":"319","id":"2613","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"76","target":"573","id":"3233","attributes":{"Weight":"1.0"},"color":"rgb(148,148,196)","size":1.0},{"source":"379","target":"537","id":"8412","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"368","target":"429","id":"8266","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"108","target":"274","id":"3893","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"254","target":"696","id":"6647","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"185","target":"634","id":"5473","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"369","target":"667","id":"8283","attributes":{"Weight":"1.0"},"color":"rgb(67,148,180)","size":1.0},{"source":"61","target":"496","id":"2886","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"165","target":"486","id":"5089","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"274","target":"526","id":"6966","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"65","target":"709","id":"2992","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"556","target":"656","id":"10090","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"455","target":"542","id":"9312","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"19","target":"481","id":"1906","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"153","target":"630","id":"4856","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"651","target":"729","id":"10556","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"195","target":"519","id":"5644","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"589","target":"719","id":"10284","attributes":{"Weight":"1.0"},"color":"rgb(229,67,213)","size":1.0},{"source":"90","target":"476","id":"3546","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"213","target":"513","id":"5965","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"260","target":"723","id":"6751","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"87","target":"728","id":"3481","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"52","target":"328","id":"2652","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"5","target":"240","id":"1563","attributes":{"Weight":"1.0"},"color":"rgb(148,213,99)","size":1.0},{"source":"374","target":"614","id":"8344","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"85","target":"151","id":"3410","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"186","target":"489","id":"5489","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"221","target":"645","id":"6113","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"78","target":"666","id":"3276","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"366","target":"693","id":"8250","attributes":{"Weight":"1.0"},"color":"rgb(115,148,148)","size":1.0},{"source":"365","target":"683","id":"8240","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"472","target":"521","id":"9478","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"176","target":"367","id":"5287","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"150","target":"576","id":"4794","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"227","target":"586","id":"6208","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"337","target":"633","id":"7921","attributes":{"Weight":"1.0"},"color":"rgb(99,180,148)","size":1.0},{"source":"10","target":"181","id":"1690","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"348","target":"654","id":"8057","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"136","target":"343","id":"4486","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"367","target":"464","id":"8256","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"301","target":"602","id":"7411","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"217","target":"278","id":"6030","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"140","target":"172","id":"4557","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"299","target":"301","id":"7370","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"590","target":"664","id":"10287","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"364","target":"683","id":"8225","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"70","target":"424","id":"3095","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"308","target":"575","id":"7505","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"166","target":"634","id":"5111","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"250","target":"557","id":"6572","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"594","target":"663","id":"10303","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"74","target":"384","id":"3175","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"61","target":"149","id":"2870","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"183","target":"633","id":"5429","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"260","target":"366","id":"6735","attributes":{"Weight":"1.0"},"color":"rgb(115,148,148)","size":1.0},{"source":"641","target":"695","id":"10505","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"144","target":"231","id":"4650","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"174","target":"293","id":"5252","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"373","target":"644","id":"8326","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"314","target":"507","id":"7588","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"427","target":"536","id":"8996","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"449","target":"482","id":"9251","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"320","target":"512","id":"7682","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"163","target":"501","id":"5048","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"261","target":"591","id":"6766","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"89","target":"257","id":"3518","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"648","target":"678","id":"10539","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"88","target":"339","id":"3493","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"217","target":"420","id":"6034","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"332","target":"580","id":"7847","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"362","target":"484","id":"8200","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"230","target":"344","id":"6250","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"319","target":"643","id":"7671","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"188","target":"332","id":"5514","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"129","target":"191","id":"4332","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"499","target":"552","id":"9702","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"144","target":"528","id":"4663","attributes":{"Weight":"1.0"},"color":"rgb(148,196,99)","size":1.0},{"source":"49","target":"355","id":"2592","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"210","target":"321","id":"5901","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"625","target":"667","id":"10435","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"233","target":"279","id":"6295","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"283","target":"412","id":"7128","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"75","target":"505","id":"3205","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"283","target":"290","id":"7116","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"206","target":"727","id":"5852","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"469","target":"539","id":"9448","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"283","target":"390","id":"7119","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"4","target":"43","id":"1534","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"20","target":"90","id":"1911","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"199","target":"220","id":"5715","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"238","target":"583","id":"6379","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"165","target":"168","id":"5078","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"442","target":"614","id":"9190","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"29","target":"313","id":"2130","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"146","target":"337","id":"4711","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"97","target":"274","id":"3689","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"287","target":"319","id":"7180","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"472","target":"565","id":"9482","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"55","target":"698","id":"2745","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"268","target":"411","id":"6874","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"156","target":"544","id":"4919","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"646","target":"734","id":"10528","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"610","target":"661","id":"10368","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"61","target":"682","id":"2896","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"325","target":"396","id":"7733","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"265","target":"341","id":"6819","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"87","target":"594","id":"3475","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"386","target":"681","id":"8531","attributes":{"Weight":"1.0"},"color":"rgb(83,229,99)","size":1.0},{"source":"372","target":"551","id":"8315","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"285","target":"735","id":"7164","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"476","target":"681","id":"9529","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"112","target":"223","id":"3992","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"541","target":"680","id":"10016","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"1","target":"173","id":"1467","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"204","target":"270","id":"5806","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"578","target":"723","id":"10235","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"424","target":"487","id":"8954","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"243","target":"293","id":"6448","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"269","target":"395","id":"6892","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"246","target":"436","id":"6501","attributes":{"Weight":"1.0"},"color":"rgb(196,67,213)","size":1.0},{"source":"277","target":"511","id":"7009","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"183","target":"688","id":"5435","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"443","target":"719","id":"9208","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"99","target":"630","id":"3741","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"497","target":"633","id":"9681","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"460","target":"527","id":"9358","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"377","target":"392","id":"8379","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"137","target":"284","id":"4503","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"74","target":"685","id":"3190","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"423","target":"674","id":"8948","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"589","target":"644","id":"10282","attributes":{"Weight":"1.0"},"color":"rgb(229,67,213)","size":1.0},{"source":"77","target":"479","id":"3254","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"17","target":"546","id":"1861","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"216","target":"381","id":"6011","attributes":{"Weight":"1.0"},"color":"rgb(229,115,148)","size":1.0},{"source":"600","target":"734","id":"10326","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"271","target":"615","id":"6926","attributes":{"Weight":"1.0"},"color":"rgb(132,148,148)","size":1.0},{"source":"253","target":"656","id":"6627","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"268","target":"561","id":"6880","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"358","target":"424","id":"8160","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"638","target":"639","id":"10488","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"179","target":"627","id":"5362","attributes":{"Weight":"1.0"},"color":"rgb(67,180,180)","size":1.0},{"source":"456","target":"551","id":"9325","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"138","target":"387","id":"4522","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"501","target":"563","id":"9716","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"82","target":"577","id":"3361","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"387","target":"628","id":"8540","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"194","target":"597","id":"5630","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"63","target":"715","id":"2944","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"325","target":"606","id":"7741","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"335","target":"555","id":"7885","attributes":{"Weight":"1.0"},"color":"rgb(67,229,180)","size":1.0},{"source":"135","target":"569","id":"4474","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"562","target":"604","id":"10120","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"232","target":"335","id":"6284","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"272","target":"628","id":"6943","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"194","target":"363","id":"5621","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"308","target":"335","id":"7499","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"291","target":"622","id":"7269","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"386","target":"616","id":"8525","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"123","target":"237","id":"4213","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"20","target":"265","id":"1919","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"55","target":"301","id":"2732","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"110","target":"629","id":"3953","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"528","target":"713","id":"9933","attributes":{"Weight":"1.0"},"color":"rgb(148,196,99)","size":1.0},{"source":"316","target":"569","id":"7615","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"105","target":"366","id":"3849","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"152","target":"448","id":"4837","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"456","target":"609","id":"9326","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"310","target":"515","id":"7533","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"158","target":"732","id":"4957","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"109","target":"388","id":"3919","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"96","target":"181","id":"3670","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"71","target":"182","id":"3111","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"202","target":"600","id":"5781","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"286","target":"618","id":"7175","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"100","target":"153","id":"3748","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"307","target":"518","id":"7494","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"201","target":"595","id":"5763","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"273","target":"380","id":"6950","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"181","target":"630","id":"5397","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"576","target":"616","id":"10213","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"465","target":"647","id":"9408","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"64","target":"320","id":"2961","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"279","target":"376","id":"7039","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"140","target":"667","id":"4578","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"266","target":"504","id":"6834","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"239","target":"320","id":"6388","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"76","target":"679","id":"3239","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"162","target":"271","id":"5019","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"40","target":"247","id":"2380","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"20","target":"242","id":"1918","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"352","target":"711","id":"8115","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"54","target":"358","id":"2703","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"9","target":"595","id":"1680","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"244","target":"496","id":"6466","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"401","target":"423","id":"8709","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"382","target":"724","id":"8466","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"31","target":"105","id":"2168","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"40","target":"78","id":"2377","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"498","target":"687","id":"9700","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"298","target":"518","id":"7364","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"10","target":"341","id":"1695","attributes":{"Weight":"1.0"},"color":"rgb(83,148,148)","size":1.0},{"source":"184","target":"204","id":"5441","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"335","target":"642","id":"7891","attributes":{"Weight":"1.0"},"color":"rgb(67,229,180)","size":1.0},{"source":"45","target":"252","id":"2500","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"205","target":"605","id":"5834","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"47","target":"410","id":"2553","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"237","target":"249","id":"6354","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"312","target":"516","id":"7557","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"123","target":"447","id":"4219","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"183","target":"270","id":"5418","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"214","target":"362","id":"5979","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"75","target":"691","id":"3211","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"6","target":"541","id":"1598","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"62","target":"365","id":"2911","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"356","target":"545","id":"8143","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"27","target":"415","id":"2071","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"140","target":"532","id":"4573","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"50","target":"397","id":"2618","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"249","target":"291","id":"6543","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"508","target":"594","id":"9773","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"70","target":"358","id":"3093","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"294","target":"623","id":"7306","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"322","target":"474","id":"7696","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"402","target":"423","id":"8720","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"143","target":"157","id":"4627","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"699","target":"717","id":"10662","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"15","target":"526","id":"1814","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"274","target":"525","id":"6965","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"8","target":"144","id":"1631","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"522","target":"525","id":"9863","attributes":{"Weight":"1.0"},"color":"rgb(67,196,180)","size":1.0},{"source":"22","target":"51","id":"1961","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"91","target":"365","id":"3563","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"221","target":"424","id":"6102","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"615","target":"718","id":"10399","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"447","target":"622","id":"9236","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"96","target":"106","id":"3667","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"404","target":"520","id":"8745","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"22","target":"23","id":"1957","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"34","target":"276","id":"2251","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"16","target":"641","id":"1837","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"460","target":"646","id":"9366","attributes":{"Weight":"1.0"},"color":"rgb(67,164,180)","size":1.0},{"source":"400","target":"410","id":"8696","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"488","target":"662","id":"9601","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"168","target":"463","id":"5139","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"636","target":"688","id":"10481","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"175","target":"542","id":"5277","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"327","target":"721","id":"7777","attributes":{"Weight":"1.0"},"color":"rgb(115,229,115)","size":1.0},{"source":"71","target":"217","id":"3113","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"231","target":"335","id":"6263","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"302","target":"524","id":"7420","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"28","target":"210","id":"2098","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"48","target":"51","id":"2564","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"133","target":"566","id":"4427","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"89","target":"159","id":"3514","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"157","target":"491","id":"4934","attributes":{"Weight":"1.0"},"color":"rgb(99,83,229)","size":1.0},{"source":"232","target":"238","id":"6279","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"262","target":"512","id":"6780","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"574","target":"649","id":"10197","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"109","target":"506","id":"3922","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"257","target":"726","id":"6694","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"123","target":"252","id":"4215","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"583","target":"713","id":"10259","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"466","target":"689","id":"9423","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"440","target":"728","id":"9166","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"63","target":"102","id":"2922","attributes":{"Weight":"1.0"},"color":"rgb(196,67,180)","size":1.0},{"source":"216","target":"719","id":"6029","attributes":{"Weight":"1.0"},"color":"rgb(229,115,132)","size":1.0},{"source":"459","target":"541","id":"9353","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"192","target":"389","id":"5588","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"95","target":"506","id":"3656","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"28","target":"50","id":"2088","attributes":{"Weight":"1.0"},"color":"rgb(148,99,213)","size":1.0},{"source":"377","target":"405","id":"8384","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"404","target":"590","id":"8747","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"506","target":"617","id":"9755","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"311","target":"532","id":"7546","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"408","target":"522","id":"8778","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"8","target":"179","id":"1635","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"96","target":"309","id":"3675","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"146","target":"488","id":"4714","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"291","target":"482","id":"7266","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"378","target":"561","id":"8401","attributes":{"Weight":"1.0"},"color":"rgb(229,148,115)","size":1.0},{"source":"121","target":"129","id":"4171","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"377","target":"560","id":"8390","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"32","target":"545","id":"2198","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"368","target":"529","id":"8269","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"511","target":"539","id":"9787","attributes":{"Weight":"1.0"},"color":"rgb(180,115,148)","size":1.0},{"source":"439","target":"704","id":"9145","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"420","target":"662","id":"8912","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"647","target":"724","id":"10533","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"278","target":"337","id":"7024","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"292","target":"708","id":"7280","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"373","target":"629","id":"8324","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"361","target":"512","id":"8197","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"97","target":"585","id":"3700","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"177","target":"179","id":"5301","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"331","target":"431","id":"7831","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"80","target":"238","id":"3310","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"256","target":"564","id":"6675","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"380","target":"570","id":"8423","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"49","target":"564","id":"2598","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"622","target":"675","id":"10423","attributes":{"Weight":"1.0"},"color":"rgb(197,229,67)","size":1.0},{"source":"413","target":"414","id":"8835","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"29","target":"620","id":"2141","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"193","target":"730","id":"5615","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"70","target":"221","id":"3088","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"146","target":"420","id":"4713","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"69","target":"725","id":"3079","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"508","target":"523","id":"9768","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"69","target":"374","id":"3063","attributes":{"Weight":"1.0"},"color":"rgb(67,164,196)","size":1.0},{"source":"357","target":"510","id":"8154","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"214","target":"484","id":"5982","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"186","target":"236","id":"5482","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"419","target":"487","id":"8896","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"498","target":"611","id":"9693","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"664","target":"670","id":"10595","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"266","target":"453","id":"6833","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"288","target":"521","id":"7205","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"132","target":"483","id":"4411","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"72","target":"597","id":"3145","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"139","target":"335","id":"4540","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"102","target":"548","id":"3799","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"185","target":"675","id":"5474","attributes":{"Weight":"1.0"},"color":"rgb(213,213,67)","size":1.0},{"source":"198","target":"684","id":"5711","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"209","target":"484","id":"5897","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"597","target":"702","id":"10317","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"92","target":"551","id":"3590","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"89","target":"671","id":"3530","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"216","target":"528","id":"6016","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"106","target":"366","id":"3864","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"185","target":"490","id":"5469","attributes":{"Weight":"1.0"},"color":"rgb(229,132,132)","size":1.0},{"source":"383","target":"574","id":"8476","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"330","target":"405","id":"7819","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"308","target":"707","id":"7512","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"9","target":"30","id":"1660","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"82","target":"387","id":"3351","attributes":{"Weight":"1.0"},"color":"rgb(67,229,180)","size":1.0},{"source":"110","target":"342","id":"3942","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"74","target":"522","id":"3180","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"589","target":"663","id":"10283","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"300","target":"653","id":"7397","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"380","target":"495","id":"8422","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"75","target":"597","id":"3209","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"221","target":"450","id":"6103","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"358","target":"462","id":"8163","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"338","target":"417","id":"7927","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"704","target":"732","id":"10667","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"358","target":"555","id":"8165","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"281","target":"438","id":"7079","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"144","target":"318","id":"4656","attributes":{"Weight":"1.0"},"color":"rgb(67,229,99)","size":1.0},{"source":"200","target":"702","id":"5747","attributes":{"Weight":"1.0"},"color":"rgb(67,229,100)","size":1.0},{"source":"21","target":"293","id":"1944","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"313","target":"541","id":"7577","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"44","target":"342","id":"2469","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"305","target":"548","id":"7470","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"438","target":"683","id":"9132","attributes":{"Weight":"1.0"},"color":"rgb(83,164,148)","size":1.0},{"source":"556","target":"696","id":"10094","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"408","target":"677","id":"8785","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"179","target":"384","id":"5351","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"282","target":"438","id":"7099","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"213","target":"406","id":"5962","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"137","target":"495","id":"4509","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"18","target":"340","id":"1872","attributes":{"Weight":"1.0"},"color":"rgb(67,229,197)","size":1.0},{"source":"258","target":"308","id":"6696","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"76","target":"433","id":"3222","attributes":{"Weight":"1.0"},"color":"rgb(148,148,196)","size":1.0},{"source":"1","target":"296","id":"1472","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"145","target":"233","id":"4676","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"90","target":"365","id":"3543","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"22","target":"540","id":"1969","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"165","target":"463","id":"5088","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"412","target":"561","id":"8832","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"193","target":"282","id":"5598","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"218","target":"221","id":"6043","attributes":{"Weight":"1.0"},"color":"rgb(67,196,229)","size":1.0},{"source":"210","target":"627","id":"5909","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"20","target":"117","id":"1913","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"119","target":"163","id":"4133","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"93","target":"286","id":"3602","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"34","target":"103","id":"2244","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"256","target":"546","id":"6674","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"28","target":"146","id":"2096","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"375","target":"681","id":"8361","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"103","target":"546","id":"3819","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"195","target":"418","id":"5639","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"54","target":"644","id":"2720","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"371","target":"460","id":"8293","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0},{"source":"169","target":"196","id":"5146","attributes":{"Weight":"1.0"},"color":"rgb(148,148,148)","size":1.0},{"source":"178","target":"551","id":"5341","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"87","target":"676","id":"3480","attributes":{"Weight":"1.0"},"color":"rgb(229,67,213)","size":1.0},{"source":"566","target":"682","id":"10142","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"122","target":"573","id":"4203","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"472","target":"523","id":"9479","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"212","target":"490","id":"5946","attributes":{"Weight":"1.0"},"color":"rgb(148,148,213)","size":1.0},{"source":"293","target":"439","id":"7283","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"17","target":"355","id":"1856","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"350","target":"396","id":"8077","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"472","target":"728","id":"9489","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"369","target":"701","id":"8285","attributes":{"Weight":"1.0"},"color":"rgb(67,67,229)","size":1.0},{"source":"338","target":"534","id":"7930","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"98","target":"609","id":"3721","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"179","target":"460","id":"5354","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"331","target":"529","id":"7835","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"218","target":"296","id":"6048","attributes":{"Weight":"1.0"},"color":"rgb(67,164,229)","size":1.0},{"source":"400","target":"556","id":"8699","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"292","target":"733","id":"7282","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"638","target":"726","id":"10494","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"122","target":"648","id":"4208","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"70","target":"261","id":"3090","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"450","target":"716","id":"9266","attributes":{"Weight":"1.0"},"color":"rgb(148,196,148)","size":1.0},{"source":"44","target":"110","id":"2460","attributes":{"Weight":"1.0"},"color":"rgb(148,148,180)","size":1.0},{"source":"41","target":"495","id":"2406","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"183","target":"516","id":"5425","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"124","target":"262","id":"4236","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"381","target":"663","id":"8448","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"170","target":"694","id":"5188","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"214","target":"239","id":"5973","attributes":{"Weight":"1.0"},"color":"rgb(229,132,67)","size":1.0},{"source":"171","target":"507","id":"5200","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"116","target":"348","id":"4077","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"292","target":"641","id":"7277","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"580","target":"601","id":"10242","attributes":{"Weight":"1.0"},"color":"rgb(229,164,67)","size":1.0},{"source":"327","target":"475","id":"7765","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"83","target":"84","id":"3369","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"442","target":"454","id":"9181","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"129","target":"185","id":"4331","attributes":{"Weight":"1.0"},"color":"rgb(229,197,67)","size":1.0},{"source":"256","target":"275","id":"6664","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"87","target":"543","id":"3471","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"164","target":"371","id":"5063","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"382","target":"729","id":"8468","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"562","target":"589","id":"10118","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"348","target":"415","id":"8048","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"433","target":"480","id":"9072","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"89","target":"553","id":"3524","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"386","target":"625","id":"8526","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"41","target":"306","id":"2401","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"405","target":"559","id":"8757","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"34","target":"564","id":"2261","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"54","target":"642","id":"2719","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"79","target":"122","id":"3278","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"55","target":"300","id":"2731","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"724","target":"725","id":"10676","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"665","target":"690","id":"10597","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"57","target":"196","id":"2770","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"159","target":"726","id":"4979","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"465","target":"651","id":"9410","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"282","target":"724","id":"7110","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"325","target":"673","id":"7744","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"504","target":"596","id":"9734","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"94","target":"325","id":"3623","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"113","target":"579","id":"4016","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"409","target":"543","id":"8799","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"253","target":"401","id":"6619","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"311","target":"386","id":"7540","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"462","target":"642","id":"9387","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"504","target":"723","id":"9743","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"514","target":"653","id":"9805","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"367","target":"615","id":"8262","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"423","target":"694","id":"8949","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"157","target":"263","id":"4925","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"160","target":"398","id":"4986","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"114","target":"474","id":"4033","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"143","target":"653","id":"4646","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"563","target":"588","id":"10126","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"504","target":"721","id":"9742","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"289","target":"490","id":"7226","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"135","target":"245","id":"4454","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"104","target":"169","id":"3823","attributes":{"Weight":"1.0"},"color":"rgb(67,229,67)","size":1.0},{"source":"12","target":"555","id":"1746","attributes":{"Weight":"1.0"},"color":"rgb(67,229,229)","size":1.0},{"source":"307","target":"471","id":"7490","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"25","target":"48","id":"2017","attributes":{"Weight":"1.0"},"color":"rgb(229,67,67)","size":1.0},{"source":"114","target":"159","id":"4023","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"328","target":"427","id":"7783","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"657","target":"671","id":"10577","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"522","target":"667","id":"9870","attributes":{"Weight":"1.0"},"color":"rgb(67,229,132)","size":1.0},{"source":"467","target":"570","id":"9431","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"441","target":"647","id":"9171","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"534","target":"670","id":"9970","attributes":{"Weight":"1.0"},"color":"rgb(132,148,213)","size":1.0},{"source":"465","target":"730","id":"9415","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"201","target":"499","id":"5760","attributes":{"Weight":"1.0"},"color":"rgb(229,67,132)","size":1.0},{"source":"29","target":"518","id":"2139","attributes":{"Weight":"1.0"},"color":"rgb(229,100,67)","size":1.0},{"source":"550","target":"563","id":"10060","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"254","target":"402","id":"6636","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"204","target":"736","id":"5820","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"133","target":"496","id":"4424","attributes":{"Weight":"1.0"},"color":"rgb(197,67,229)","size":1.0},{"source":"255","target":"401","id":"6650","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"388","target":"550","id":"8549","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"114","target":"638","id":"4039","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"193","target":"735","id":"5617","attributes":{"Weight":"1.0"},"color":"rgb(67,100,229)","size":1.0},{"source":"117","target":"502","id":"4105","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"41","target":"247","id":"2398","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"152","target":"563","id":"4841","attributes":{"Weight":"1.0"},"color":"rgb(229,229,67)","size":1.0},{"source":"32","target":"356","id":"2192","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"32","target":"402","id":"2195","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"142","target":"698","id":"4625","attributes":{"Weight":"1.0"},"color":"rgb(132,67,229)","size":1.0},{"source":"413","target":"560","id":"8837","attributes":{"Weight":"1.0"},"color":"rgb(229,67,164)","size":1.0},{"source":"456","target":"492","id":"9322","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"91","target":"681","id":"3572","attributes":{"Weight":"1.0"},"color":"rgb(100,229,67)","size":1.0},{"source":"240","target":"434","id":"6401","attributes":{"Weight":"1.0"},"color":"rgb(148,213,99)","size":1.0},{"source":"610","target":"665","id":"10369","attributes":{"Weight":"1.0"},"color":"rgb(164,229,67)","size":1.0},{"source":"76","target":"521","id":"3228","attributes":{"Weight":"1.0"},"color":"rgb(229,67,229)","size":1.0},{"source":"204","target":"684","id":"5817","attributes":{"Weight":"1.0"},"color":"rgb(132,229,67)","size":1.0},{"source":"210","target":"420","id":"5904","attributes":{"Weight":"1.0"},"color":"rgb(67,132,229)","size":1.0},{"source":"145","target":"279","id":"4677","attributes":{"Weight":"1.0"},"color":"rgb(229,67,197)","size":1.0},{"source":"536","target":"615","id":"9983","attributes":{"Weight":"1.0"},"color":"rgb(100,67,229)","size":1.0},{"source":"63","target":"246","id":"2928","attributes":{"Weight":"1.0"},"color":"rgb(164,67,229)","size":1.0},{"source":"170","target":"660","id":"5186","attributes":{"Weight":"1.0"},"color":"rgb(229,67,100)","size":1.0},{"source":"475","target":"687","id":"9524","attributes":{"Weight":"1.0"},"color":"rgb(67,229,164)","size":1.0},{"source":"13","target":"598","id":"1770","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"315","target":"570","id":"7601","attributes":{"Weight":"1.0"},"color":"rgb(67,197,229)","size":1.0},{"source":"151","target":"231","id":"4807","attributes":{"Weight":"1.0"},"color":"rgb(148,148,164)","size":1.0}],"nodes":[{"label":"Ha Dae-sung","x":1235.4569091796875,"y":1551.8240966796875,"id":"268","attributes":{"Eigenvector Centrality":"0.2315255949886878","Betweenness Centrality":"0.0","Appearances":"13","No":"8","Country":"South Korea","Club Country":"China","Club":"Beijing Guoan","Weighted Degree":"22.0","Modularity Class":"10","Date of birth / Age":"2 March 1985 (aged 29)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.24614869390488947"},"color":"rgb(229,67,164)","size":10.0},{"label":"Maxi Pereira","x":-192.70481872558594,"y":101.33695220947266,"id":"486","attributes":{"Eigenvector Centrality":"0.445244561946227","Betweenness Centrality":"0.002622941975601633","Appearances":"90","No":"16","Country":"Uruguay","Club Country":"Portugal","Club":"Benfica","Weighted Degree":"26.0","Modularity Class":"6","Date of birth / Age":"8 June 1984 (aged 30)","Degree":"26","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.32096069868995636"},"color":"rgb(229,197,67)","size":15.333333969116211},{"label":"Manabu Saito","x":700.6929931640625,"y":617.4116821289062,"id":"441","attributes":{"Eigenvector Centrality":"0.3171815377783478","Betweenness Centrality":"0.0","Appearances":"5","No":"20","Country":"Japan","Club Country":"Japan","Club":"Yokohama F. Marinos","Weighted Degree":"22.0","Modularity Class":"27","Date of birth / Age":"4 April 1990 (aged 24)","Degree":"22","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3107822410147992"},"color":"rgb(67,100,229)","size":10.0},{"label":"Augusto Fernández","x":-1096.7728271484375,"y":332.52386474609375,"id":"70","attributes":{"Eigenvector Centrality":"0.4883294167498835","Betweenness Centrality":"0.0013747511405558612","Appearances":"9","No":"13","Country":"Argentina","Club Country":"Spain","Club":"Celta Vigo","Weighted Degree":"23.0","Modularity Class":"19","Date of birth / Age":"10 April 1986 (aged 28)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3013530135301353"},"color":"rgb(67,229,229)","size":11.333333015441895},{"label":"Edinson Cavani","x":-109.81510162353516,"y":97.26505279541016,"id":"185","attributes":{"Eigenvector Centrality":"0.5745311470651605","Betweenness Centrality":"0.003956184981235499","Appearances":"62","No":"21","Country":"Uruguay","Club Country":"France","Club":"Paris Saint-Germain","Weighted Degree":"31.0","Modularity Class":"6","Date of birth / Age":"14 February 1987 (aged 27)","Degree":"31","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.328125"},"color":"rgb(229,197,67)","size":22.0},{"label":"Matthias Ginter","x":444.2855224609375,"y":-312.178466796875,"id":"480","attributes":{"Eigenvector Centrality":"0.5180768997288345","Betweenness Centrality":"0.0023990924168658203","Appearances":"2","No":"3","Country":"Germany","Club Country":"Germany","Club":"SC Freiburg","Weighted Degree":"25.0","Modularity Class":"13","Date of birth / Age":"19 January 1994 (aged 20)","Degree":"25","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3188720173535792"},"color":"rgb(67,229,164)","size":14.0},{"label":"Ki Sung-yueng","x":1168.5513916015625,"y":1424.8240966796875,"id":"390","attributes":{"Eigenvector Centrality":"0.24281665265392566","Betweenness Centrality":"0.0038744127800200497","Appearances":"58","No":"16","Country":"South Korea","Club Country":"England","Club":"Sunderland","Weighted Degree":"23.0","Modularity Class":"10","Date of birth / Age":"24 January 1989 (aged 25)","Degree":"23","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.2628755364806867"},"color":"rgb(229,67,164)","size":11.333333015441895},{"label":"Johan Djourou","x":57.069740295410156,"y":323.0292663574219,"id":"339","attributes":{"Eigenvector Centrality":"0.39804740593626875","Betweenness Centrality":"7.203079250750265E-4","Appearances":"44","No":"20","Country":"Switzerland","Club Country":"Germany","Club":"Hamburger SV","Weighted Degree":"23.0","Modularity Class":"0","Date of birth / Age":"18 January 1987 (aged 27)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3002450980392157"},"color":"rgb(164,229,67)","size":11.333333015441895},{"label":"Ogenyi Onazi","x":-33.87162780761719,"y":-1294.2327880859375,"id":"537","attributes":{"Eigenvector Centrality":"0.4166984434880051","Betweenness Centrality":"0.01153289479646615","Appearances":"21","No":"17","Country":"Nigeria","Club Country":"Italy","Club":"Lazio","Weighted Degree":"28.0","Modularity Class":"14","Date of birth / Age":"25 December 1992 (aged 21)","Degree":"28","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3336359509759419"},"color":"rgb(67,229,100)","size":18.0},{"label":"Noel Valladares (c)","x":1633.689697265625,"y":-1230.439697265625,"id":"536","attributes":{"Eigenvector Centrality":"0.2366488794633179","Betweenness Centrality":"0.0","Appearances":"122","No":"18","Country":"Honduras","Club Country":"Honduras","Club":"Olimpia","Weighted Degree":"22.0","Modularity Class":"7","Date of birth / Age":"3 May 1977 (aged 37)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.26344086021505375"},"color":"rgb(100,67,229)","size":10.0},{"label":"Jackson Martínez","x":-870.146240234375,"y":947.0243530273438,"id":"304","attributes":{"Eigenvector Centrality":"0.446466126398784","Betweenness Centrality":"0.007655587436909223","Appearances":"27","No":"21","Country":"Colombia","Club Country":"Portugal","Club":"Porto","Weighted Degree":"29.0","Modularity Class":"11","Date of birth / Age":"3 October 1986 (aged 27)","Degree":"29","Position":"FW","Eccentricity":"6.0","Closeness Centrality":"0.3315290933694181"},"color":"rgb(67,67,229)","size":19.333332061767578},{"label":"Shkodran Mustafi","x":459.89215087890625,"y":-438.27008056640625,"id":"648","attributes":{"Eigenvector Centrality":"0.4748329217376384","Betweenness Centrality":"0.0","Appearances":"1","No":"21","Country":"Germany","Club Country":"Italy","Club":"Sampdoria","Weighted Degree":"22.0","Modularity Class":"13","Date of birth / Age":"17 April 1992 (aged 22)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2955367913148371"},"color":"rgb(67,229,164)","size":10.0},{"label":"Leonardo Bonucci","x":125.05670928955078,"y":766.1940307617188,"id":"416","attributes":{"Eigenvector Centrality":"0.5455496050511396","Betweenness Centrality":"0.0016215443882875223","Appearances":"37","No":"19","Country":"Italy","Club Country":"Italy","Club":"Juventus","Weighted Degree":"28.0","Modularity Class":"3","Date of birth / Age":"1 May 1987 (aged 27)","Degree":"28","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3242170269078077"},"color":"rgb(197,229,67)","size":18.0},{"label":"Eugenio Mena","x":-294.9122009277344,"y":1499.1805419921875,"id":"209","attributes":{"Eigenvector Centrality":"0.316119262177923","Betweenness Centrality":"0.0","Appearances":"25","No":"2","Country":"Chile","Club Country":"Brazil","Club":"Santos","Weighted Degree":"22.0","Modularity Class":"18","Date of birth / Age":"18 July 1988 (aged 25)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.2737430167597765"},"color":"rgb(229,132,67)","size":10.0},{"label":"Rafael Márquez (c)","x":-2148.71923828125,"y":446.01300048828125,"id":"581","attributes":{"Eigenvector Centrality":"0.27712645238679473","Betweenness Centrality":"0.0","Appearances":"120","No":"4","Country":"Mexico","Club Country":"Mexico","Club":"León","Weighted Degree":"22.0","Modularity Class":"21","Date of birth / Age":"13 February 1979 (aged 35)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.2599929253625752"},"color":"rgb(67,229,67)","size":10.0},{"label":"Glen Johnson","x":-77.03864288330078,"y":-917.1484985351562,"id":"258","attributes":{"Eigenvector Centrality":"0.6237674591008824","Betweenness Centrality":"0.0010635550306756442","Appearances":"52","No":"2","Country":"England","Club Country":"England","Club":"Liverpool","Weighted Degree":"27.0","Modularity Class":"28","Date of birth / Age":"23 August 1984 (aged 29)","Degree":"27","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3247901016349978"},"color":"rgb(67,229,132)","size":16.666667938232422},{"label":"Kunle Odunlami","x":-51.50978469848633,"y":-1656.866943359375,"id":"403","attributes":{"Eigenvector Centrality":"0.30581490023520397","Betweenness Centrality":"0.0","Appearances":"11","No":"12","Country":"Nigeria","Club Country":"Nigeria","Club":"Sunshine Stars","Weighted Degree":"22.0","Modularity Class":"14","Date of birth / Age":"5 March 1990 (aged 24)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.28800940438871475"},"color":"rgb(67,229,100)","size":10.0},{"label":"Jerry Bengtson","x":1590.51611328125,"y":-1207.114501953125,"id":"328","attributes":{"Eigenvector Centrality":"0.23664887946331797","Betweenness Centrality":"0.0","Appearances":"44","No":"11","Country":"Honduras","Club Country":"United States","Club":"New England Revolution","Weighted Degree":"22.0","Modularity Class":"7","Date of birth / Age":"8 April 1987 (aged 27)","Degree":"22","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.26344086021505375"},"color":"rgb(100,67,229)","size":10.0},{"label":"Park Chu-young","x":1047.7447509765625,"y":1576.7559814453125,"id":"559","attributes":{"Eigenvector Centrality":"0.2434948987926026","Betweenness Centrality":"0.005100478514823181","Appearances":"64","No":"10","Country":"South Korea","Club Country":"England","Club":"Watford","Weighted Degree":"23.0","Modularity Class":"10","Date of birth / Age":"10 July 1985 (aged 28)","Degree":"23","Position":"FW","Eccentricity":"6.0","Closeness Centrality":"0.26649746192893403"},"color":"rgb(229,67,164)","size":11.333333015441895},{"label":"Sergey Ryzhikov","x":-1292.9913330078125,"y":-1369.3878173828125,"id":"641","attributes":{"Eigenvector Centrality":"0.2784495406871368","Betweenness Centrality":"0.0019868644316807485","Appearances":"1","No":"16","Country":"Russia","Club Country":"Russia","Club":"Rubin Kazan","Weighted Degree":"23.0","Modularity Class":"2","Date of birth / Age":"19 September 1980 (aged 33)","Degree":"23","Position":"GK","Eccentricity":"6.0","Closeness Centrality":"0.256186824677588"},"color":"rgb(229,67,67)","size":11.333333015441895},{"label":"Sammir","x":-386.4237060546875,"y":741.6884155273438,"id":"624","attributes":{"Eigenvector Centrality":"0.3564884604564037","Betweenness Centrality":"0.0013005076523818384","Appearances":"6","No":"19","Country":"Croatia","Club Country":"Spain","Club":"Getafe","Weighted Degree":"23.0","Modularity Class":"25","Date of birth / Age":"23 April 1987 (aged 27)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.30209617755856966"},"color":"rgb(132,67,229)","size":11.333333015441895},{"label":"Milan Badelj","x":-271.9816589355469,"y":685.1373901367188,"id":"514","attributes":{"Eigenvector Centrality":"0.3589573457329694","Betweenness Centrality":"6.712739342317829E-4","Appearances":"9","No":"15","Country":"Croatia","Club Country":"Germany","Club":"Hamburger SV","Weighted Degree":"23.0","Modularity Class":"25","Date of birth / Age":"25 February 1989 (aged 25)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3008595988538682"},"color":"rgb(132,67,229)","size":11.333333015441895},{"label":"José María Basanta","x":-1144.7310791015625,"y":286.07470703125,"id":"358","attributes":{"Eigenvector Centrality":"0.4756507714516443","Betweenness Centrality":"0.0","Appearances":"10","No":"23","Country":"Argentina","Club Country":"Mexico","Club":"Monterrey","Weighted Degree":"22.0","Modularity Class":"19","Date of birth / Age":"3 April 1984 (aged 30)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2930622009569378"},"color":"rgb(67,229,229)","size":10.0},{"label":"Raúl Albiol","x":-934.9326782226562,"y":-101.35684204101562,"id":"591","attributes":{"Eigenvector Centrality":"0.9188656127061582","Betweenness Centrality":"0.004836935094169011","Appearances":"46","No":"2","Country":"Spain","Club Country":"Italy","Club":"Napoli","Weighted Degree":"32.0","Modularity Class":"23","Date of birth / Age":"4 September 1985 (aged 28)","Degree":"32","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.34249767008387694"},"color":"rgb(229,67,197)","size":23.33333396911621},{"label":"Jordan Henderson","x":-137.00108337402344,"y":-918.7854614257812,"id":"348","attributes":{"Eigenvector Centrality":"0.6237674591008823","Betweenness Centrality":"0.0010635550306756442","Appearances":"11","No":"14","Country":"England","Club Country":"England","Club":"Liverpool","Weighted Degree":"27.0","Modularity Class":"28","Date of birth / Age":"17 June 1990 (aged 23)","Degree":"27","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3247901016349978"},"color":"rgb(67,229,132)","size":16.666667938232422},{"label":"Masoud Shojaei","x":2059.234375,"y":1154.055419921875,"id":"467","attributes":{"Eigenvector Centrality":"0.2127442934422965","Betweenness Centrality":"0.0","Appearances":"50","No":"7","Country":"Iran","Club Country":"Spain","Club":"Las Palmas","Weighted Degree":"22.0","Modularity Class":"1","Date of birth / Age":"9 June 1984 (aged 30)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.206809229037704"},"color":"rgb(67,197,229)","size":10.0},{"label":"Eden Hazard","x":-567.4556884765625,"y":-819.4087524414062,"id":"179","attributes":{"Eigenvector Centrality":"0.8054480780736979","Betweenness Centrality":"0.004148263742758199","Appearances":"45","No":"10","Country":"Belgium","Club Country":"England","Club":"Chelsea","Weighted Degree":"33.0","Modularity Class":"28","Date of birth / Age":"7 January 1991 (aged 23)","Degree":"33","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.34950071326676174"},"color":"rgb(67,229,132)","size":24.666667938232422},{"label":"Victor Moses","x":-114.1285629272461,"y":-1433.164306640625,"id":"702","attributes":{"Eigenvector Centrality":"0.4988980810402226","Betweenness Centrality":"0.0059333803012395","Appearances":"22","No":"11","Country":"Nigeria","Club Country":"England","Club":"Liverpool","Weighted Degree":"31.0","Modularity Class":"14","Date of birth / Age":"12 December 1990 (aged 23)","Degree":"31","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3206806282722513"},"color":"rgb(67,229,100)","size":22.0},{"label":"Gotoku Sakai","x":626.2552490234375,"y":448.10638427734375,"id":"264","attributes":{"Eigenvector Centrality":"0.3583261950704595","Betweenness Centrality":"0.006133180800190253","Appearances":"12","No":"3","Country":"Japan","Club Country":"Germany","Club":"VfB Stuttgart","Weighted Degree":"25.0","Modularity Class":"27","Date of birth / Age":"14 March 1991 (aged 23)","Degree":"25","Position":"DF","Eccentricity":"4.0","Closeness Centrality":"0.33669262482821805"},"color":"rgb(67,100,229)","size":14.0},{"label":"Jung Sung-ryong","x":1253.423583984375,"y":1593.709716796875,"id":"377","attributes":{"Eigenvector Centrality":"0.2315255949886878","Betweenness Centrality":"0.0","Appearances":"61","No":"1","Country":"South Korea","Club Country":"South Korea","Club":"Suwon Bluewings","Weighted Degree":"22.0","Modularity Class":"10","Date of birth / Age":"4 January 1985 (aged 29)","Degree":"22","Position":"GK","Eccentricity":"7.0","Closeness Centrality":"0.24614869390488947"},"color":"rgb(229,67,164)","size":10.0},{"label":"Giorgos Samaras","x":1468.084716796875,"y":290.1719665527344,"id":"254","attributes":{"Eigenvector Centrality":"0.3022386539935686","Betweenness Centrality":"0.015975933226232208","Appearances":"74","No":"7","Country":"Greece","Club Country":"Scotland","Club":"Celtic","Weighted Degree":"25.0","Modularity Class":"15","Date of birth / Age":"21 February 1985 (aged 29)","Degree":"25","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.30523255813953487"},"color":"rgb(229,67,100)","size":14.0},{"label":"Fabrice Olinga","x":342.7852783203125,"y":88.49571228027344,"id":"217","attributes":{"Eigenvector Centrality":"0.3410519410379994","Betweenness Centrality":"0.0014859748176380408","Appearances":"8","No":"19","Country":"Cameroon","Club Country":"Belgium","Club":"Zulte Waregem","Weighted Degree":"23.0","Modularity Class":"17","Date of birth / Age":"12 May 1996 (aged 18)","Degree":"23","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.32407407407407407"},"color":"rgb(67,132,229)","size":11.333333015441895},{"label":"Maxim Choupo-Moting","x":590.2083740234375,"y":305.8430480957031,"id":"488","attributes":{"Eigenvector Centrality":"0.37131553578083376","Betweenness Centrality":"0.01444381785094054","Appearances":"26","No":"13","Country":"Cameroon","Club Country":"Germany","Club":"Mainz 05","Weighted Degree":"26.0","Modularity Class":"17","Date of birth / Age":"23 March 1989 (aged 25)","Degree":"26","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3319783197831978"},"color":"rgb(67,132,229)","size":15.333333969116211},{"label":"Jermaine Jones","x":734.7730102539062,"y":-1356.2696533203125,"id":"326","attributes":{"Eigenvector Centrality":"0.30080819732983394","Betweenness Centrality":"0.005869237175578168","Appearances":"42","No":"13","Country":"United States","Club Country":"Turkey","Club":"Be?ikta?","Weighted Degree":"24.0","Modularity Class":"26","Date of birth / Age":"3 November 1981 (aged 32)","Degree":"24","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3057404326123128"},"color":"rgb(100,229,67)","size":12.666666984558105},{"label":"Viktor Fayzulin","x":-1257.4415283203125,"y":-1320.703125,"id":"704","attributes":{"Eigenvector Centrality":"0.34982465542448266","Betweenness Centrality":"0.004583905120882726","Appearances":"19","No":"20","Country":"Russia","Club Country":"Russia","Club":"Zenit Saint Petersburg","Weighted Degree":"26.0","Modularity Class":"2","Date of birth / Age":"22 April 1986 (aged 28)","Degree":"26","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.27904328018223234"},"color":"rgb(229,67,67)","size":15.333333969116211},{"label":"Ghasem Haddadifar","x":1942.61962890625,"y":1184.328125,"id":"247","attributes":{"Eigenvector Centrality":"0.21274429344229648","Betweenness Centrality":"0.0","Appearances":"17","No":"11","Country":"Iran","Club Country":"Iran","Club":"Zob Ahan","Weighted Degree":"22.0","Modularity Class":"1","Date of birth / Age":"12 July 1983 (aged 30)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.206809229037704"},"color":"rgb(67,197,229)","size":10.0},{"label":"Mamadou Sakho","x":-55.28839874267578,"y":-503.58740234375,"id":"440","attributes":{"Eigenvector Centrality":"0.6719226159356836","Betweenness Centrality":"0.0030924546628977845","Appearances":"19","No":"5","Country":"France","Club Country":"England","Club":"Liverpool","Weighted Degree":"31.0","Modularity Class":"16","Date of birth / Age":"13 February 1990 (aged 24)","Degree":"31","Position":"DF","Eccentricity":"6.0","Closeness Centrality":"0.3309320126069338"},"color":"rgb(229,67,229)","size":22.0},{"label":"Majeed Waris","x":324.3560485839844,"y":1417.5355224609375,"id":"437","attributes":{"Eigenvector Centrality":"0.30228653977349984","Betweenness Centrality":"0.002131225990650735","Appearances":"13","No":"18","Country":"Ghana","Club Country":"France","Club":"Valenciennes","Weighted Degree":"23.0","Modularity Class":"5","Date of birth / Age":"19 September 1991 (aged 22)","Degree":"23","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.29708973322554566"},"color":"rgb(67,229,197)","size":11.333333015441895},{"label":"Jaime Ayoví","x":-1695.57470703125,"y":-675.8545532226562,"id":"305","attributes":{"Eigenvector Centrality":"0.3623062182068215","Betweenness Centrality":"0.0","Appearances":"30","No":"17","Country":"Ecuador","Club Country":"Mexico","Club":"Tijuana","Weighted Degree":"22.0","Modularity Class":"4","Date of birth / Age":"21 February 1988 (aged 26)","Degree":"22","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.2881223049784398"},"color":"rgb(229,67,132)","size":10.0},{"label":"Christian Atsu","x":298.6339111328125,"y":1290.552734375,"id":"118","attributes":{"Eigenvector Centrality":"0.3040272220343691","Betweenness Centrality":"0.0033363298478359237","Appearances":"23","No":"7","Country":"Ghana","Club Country":"Netherlands","Club":"Vitesse","Weighted Degree":"23.0","Modularity Class":"5","Date of birth / Age":"10 January 1992 (aged 22)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2960128876359243"},"color":"rgb(67,229,197)","size":11.333333015441895},{"label":"Albert Adomah","x":449.0231628417969,"y":1183.720458984375,"id":"18","attributes":{"Eigenvector Centrality":"0.3025700565824491","Betweenness Centrality":"0.003289744732058429","Appearances":"15","No":"14","Country":"Ghana","Club Country":"England","Club":"Middlesbrough","Weighted Degree":"23.0","Modularity Class":"5","Date of birth / Age":"13 December 1987 (aged 26)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2973300970873787"},"color":"rgb(67,229,197)","size":11.333333015441895},{"label":"João Moutinho","x":-709.1241455078125,"y":410.86029052734375,"id":"332","attributes":{"Eigenvector Centrality":"0.45621028793672236","Betweenness Centrality":"0.0015929309060191388","Appearances":"68","No":"8","Country":"Portugal","Club Country":"France","Club":"AS Monaco","Weighted Degree":"25.0","Modularity Class":"8","Date of birth / Age":"8 September 1986 (aged 27)","Degree":"25","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3242170269078077"},"color":"rgb(229,164,67)","size":14.0},{"label":"Neymar","x":-688.3394775390625,"y":-195.9782257080078,"id":"529","attributes":{"Eigenvector Centrality":"0.9475639715704524","Betweenness Centrality":"0.005368122690024312","Appearances":"49","No":"10","Country":"Brazil","Club Country":"Spain","Club":"Barcelona","Weighted Degree":"36.0","Modularity Class":"23","Date of birth / Age":"5 February 1992 (aged 22)","Degree":"36","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.34249767008387694"},"color":"rgb(229,67,197)","size":28.66666603088379},{"label":"Giannis Fetfatzidis","x":1469.207275390625,"y":587.9270629882812,"id":"250","attributes":{"Eigenvector Centrality":"0.2880961103470562","Betweenness Centrality":"0.004458743060852615","Appearances":"19","No":"18","Country":"Greece","Club Country":"Italy","Club":"Genoa","Weighted Degree":"24.0","Modularity Class":"15","Date of birth / Age":"21 December 1990 (aged 23)","Degree":"24","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2996331023236853"},"color":"rgb(229,67,100)","size":12.666666984558105},{"label":"Axel Witsel","x":-844.521240234375,"y":-894.0247192382812,"id":"74","attributes":{"Eigenvector Centrality":"0.6174086302888657","Betweenness Centrality":"0.006770928561410678","Appearances":"48","No":"6","Country":"Belgium","Club Country":"Russia","Club":"Zenit Saint Petersburg","Weighted Degree":"28.0","Modularity Class":"28","Date of birth / Age":"12 January 1989 (aged 25)","Degree":"28","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3343949044585987"},"color":"rgb(67,229,132)","size":18.0},{"label":"Gary Medel","x":-135.52125549316406,"y":1534.207275390625,"id":"239","attributes":{"Eigenvector Centrality":"0.32635320504193394","Betweenness Centrality":"0.006690023717310697","Appearances":"61","No":"17","Country":"Chile","Club Country":"Wales","Club":"Cardiff City","Weighted Degree":"23.0","Modularity Class":"18","Date of birth / Age":"3 August 1987 (aged 26)","Degree":"23","Position":"DF","Eccentricity":"6.0","Closeness Centrality":"0.2878965922444183"},"color":"rgb(229,132,67)","size":11.333333015441895},{"label":"Eyong Enoh","x":420.9879455566406,"y":149.03363037109375,"id":"210","attributes":{"Eigenvector Centrality":"0.3227718779440803","Betweenness Centrality":"0.0","Appearances":"38","No":"18","Country":"Cameroon","Club Country":"Turkey","Club":"Antalyaspor","Weighted Degree":"22.0","Modularity Class":"17","Date of birth / Age":"23 March 1986 (aged 28)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3139683895771038"},"color":"rgb(67,132,229)","size":10.0},{"label":"Reza Haghighi","x":1912.50830078125,"y":1151.8526611328125,"id":"599","attributes":{"Eigenvector Centrality":"0.21274429344229642","Betweenness Centrality":"0.0","Appearances":"8","No":"8","Country":"Iran","Club Country":"Iran","Club":"Persepolis","Weighted Degree":"22.0","Modularity Class":"1","Date of birth / Age":"1 February 1989 (aged 25)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.206809229037704"},"color":"rgb(67,197,229)","size":10.0},{"label":"Rahman Ahmadi","x":2011.62890625,"y":1143.9183349609375,"id":"584","attributes":{"Eigenvector Centrality":"0.21274429344229648","Betweenness Centrality":"0.0","Appearances":"10","No":"1","Country":"Iran","Club Country":"Iran","Club":"Sepahan","Weighted Degree":"22.0","Modularity Class":"1","Date of birth / Age":"30 July 1980 (aged 33)","Degree":"22","Position":"GK","Eccentricity":"7.0","Closeness Centrality":"0.206809229037704"},"color":"rgb(67,197,229)","size":10.0},{"label":"Landry N\u0027Guémo","x":380.334228515625,"y":127.53271484375,"id":"407","attributes":{"Eigenvector Centrality":"0.3227718779440803","Betweenness Centrality":"0.0","Appearances":"40","No":"7","Country":"Cameroon","Club Country":"France","Club":"Bordeaux","Weighted Degree":"22.0","Modularity Class":"17","Date of birth / Age":"28 November 1985 (aged 28)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3139683895771038"},"color":"rgb(67,132,229)","size":10.0},{"label":"Omar Gonzalez","x":770.2596435546875,"y":-1596.33251953125,"id":"544","attributes":{"Eigenvector Centrality":"0.27181518429351065","Betweenness Centrality":"0.0","Appearances":"20","No":"3","Country":"United States","Club Country":"United States","Club":"Los Angeles Galaxy","Weighted Degree":"22.0","Modularity Class":"26","Date of birth / Age":"11 October 1988 (aged 25)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.28021349599695006"},"color":"rgb(100,229,67)","size":10.0},{"label":"Mauricio Isla","x":-142.6880340576172,"y":1330.8896484375,"id":"483","attributes":{"Eigenvector Centrality":"0.5204561062047254","Betweenness Centrality":"0.00860736609402208","Appearances":"47","No":"4","Country":"Chile","Club Country":"Italy","Club":"Juventus","Weighted Degree":"32.0","Modularity Class":"18","Date of birth / Age":"12 June 1988 (aged 26)","Degree":"32","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.31599312123817713"},"color":"rgb(229,132,67)","size":23.33333396911621},{"label":"Marco Ureña","x":2171.260498046875,"y":406.7074890136719,"id":"448","attributes":{"Eigenvector Centrality":"0.24681597010360032","Betweenness Centrality":"0.007576013866204986","Appearances":"24","No":"21","Country":"Costa Rica","Club Country":"Russia","Club":"Kuban Krasnodar","Weighted Degree":"23.0","Modularity Class":"29","Date of birth / Age":"5 March 1990 (aged 24)","Degree":"23","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.27212143650499815"},"color":"rgb(229,229,67)","size":11.333333015441895},{"label":"Alireza Haghighi","x":1910.173095703125,"y":1066.8309326171875,"id":"35","attributes":{"Eigenvector Centrality":"0.21274429344229648","Betweenness Centrality":"0.0","Appearances":"6","No":"12","Country":"Iran","Club Country":"Portugal","Club":"Sporting Covilhã","Weighted Degree":"22.0","Modularity Class":"1","Date of birth / Age":"2 May 1988 (aged 26)","Degree":"22","Position":"GK","Eccentricity":"7.0","Closeness Centrality":"0.206809229037704"},"color":"rgb(67,197,229)","size":10.0},{"label":"Nabil Ghilas","x":-1331.1390380859375,"y":965.755126953125,"id":"526","attributes":{"Eigenvector Centrality":"0.4451346192495991","Betweenness Centrality":"0.00948599580264796","Appearances":"5","No":"9","Country":"Algeria","Club Country":"Portugal","Club":"Porto","Weighted Degree":"30.0","Modularity Class":"24","Date of birth / Age":"20 April 1990 (aged 24)","Degree":"30","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.32608695652173914"},"color":"rgb(67,164,229)","size":20.666667938232422},{"label":"Ejike Uzoenyi","x":-90.41376495361328,"y":-1613.627685546875,"id":"194","attributes":{"Eigenvector Centrality":"0.30581490023520397","Betweenness Centrality":"0.0","Appearances":"21","No":"3","Country":"Nigeria","Club Country":"Nigeria","Club":"Enugu Rangers","Weighted Degree":"22.0","Modularity Class":"14","Date of birth / Age":"23 March 1988 (aged 26)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.28800940438871475"},"color":"rgb(67,229,100)","size":10.0},{"label":"Giancarlo González","x":2265.36669921875,"y":299.92572021484375,"id":"248","attributes":{"Eigenvector Centrality":"0.23496944760866384","Betweenness Centrality":"0.0","Appearances":"35","No":"3","Country":"Costa Rica","Club Country":"United States","Club":"Columbus Crew","Weighted Degree":"22.0","Modularity Class":"29","Date of birth / Age":"8 February 1988 (aged 26)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2515400410677618"},"color":"rgb(229,229,67)","size":10.0},{"label":"Ezequiel Lavezzi","x":-846.7564697265625,"y":254.6559600830078,"id":"212","attributes":{"Eigenvector Centrality":"0.6719025529242287","Betweenness Centrality":"0.0033630652398584098","Appearances":"31","No":"22","Country":"Argentina","Club Country":"France","Club":"Paris Saint-Germain","Weighted Degree":"31.0","Modularity Class":"19","Date of birth / Age":"3 May 1985 (aged 29)","Degree":"31","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3173575129533679"},"color":"rgb(67,229,229)","size":22.0},{"label":"Mats Hummels","x":607.8975219726562,"y":-421.7085876464844,"id":"475","attributes":{"Eigenvector Centrality":"0.500680986024227","Betweenness Centrality":"0.008472576600609625","Appearances":"30","No":"5","Country":"Germany","Club Country":"Germany","Club":"Borussia Dortmund","Weighted Degree":"24.0","Modularity Class":"13","Date of birth / Age":"16 December 1988 (aged 25)","Degree":"24","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.310126582278481"},"color":"rgb(67,229,164)","size":12.666666984558105},{"label":"Lee Keun-ho","x":1296.3543701171875,"y":1607.599609375,"id":"413","attributes":{"Eigenvector Centrality":"0.23152559498868786","Betweenness Centrality":"0.0","Appearances":"63","No":"11","Country":"South Korea","Club Country":"South Korea","Club":"Sangju Sangmu","Weighted Degree":"22.0","Modularity Class":"10","Date of birth / Age":"11 April 1985 (aged 29)","Degree":"22","Position":"FW","Eccentricity":"7.0","Closeness Centrality":"0.24614869390488947"},"color":"rgb(229,67,164)","size":10.0},{"label":"Giovanni Sio","x":405.2397155761719,"y":-662.28076171875,"id":"257","attributes":{"Eigenvector Centrality":"0.37146876286160685","Betweenness Centrality":"0.004611725554141086","Appearances":"7","No":"21","Country":"Ivory Coast","Club Country":"Switzerland","Club":"Basel","Weighted Degree":"26.0","Modularity Class":"9","Date of birth / Age":"31 March 1989 (aged 25)","Degree":"26","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3107822410147992"},"color":"rgb(164,67,229)","size":15.333333969116211},{"label":"Yuri Lodygin","x":-1301.04150390625,"y":-1265.7510986328125,"id":"732","attributes":{"Eigenvector Centrality":"0.34982465542448254","Betweenness Centrality":"0.004583905120882726","Appearances":"3","No":"12","Country":"Russia","Club Country":"Russia","Club":"Zenit Saint Petersburg","Weighted Degree":"26.0","Modularity Class":"2","Date of birth / Age":"26 May 1990 (aged 24)","Degree":"26","Position":"GK","Eccentricity":"6.0","Closeness Centrality":"0.27904328018223234"},"color":"rgb(229,67,67)","size":15.333333969116211},{"label":"Sol Bamba","x":570.6759033203125,"y":-908.820556640625,"id":"657","attributes":{"Eigenvector Centrality":"0.30966117600400694","Betweenness Centrality":"0.0","Appearances":"43","No":"22","Country":"Ivory Coast","Club Country":"Turkey","Club":"Trabzonspor","Weighted Degree":"22.0","Modularity Class":"9","Date of birth / Age":"13 January 1985 (aged 29)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2929453965723396"},"color":"rgb(164,67,229)","size":10.0},{"label":"Aïssa Mandi","x":-1380.8287353515625,"y":1169.2930908203125,"id":"15","attributes":{"Eigenvector Centrality":"0.2958935568628798","Betweenness Centrality":"0.0","Appearances":"2","No":"20","Country":"Algeria","Club Country":"France","Club":"Reims","Weighted Degree":"22.0","Modularity Class":"24","Date of birth / Age":"22 October 1991 (aged 22)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.28389339513325607"},"color":"rgb(67,164,229)","size":10.0},{"label":"Ognjen Vukojevic","x":-265.94671630859375,"y":620.2861938476562,"id":"539","attributes":{"Eigenvector Centrality":"0.37500667699203727","Betweenness Centrality":"0.0014678886642237275","Appearances":"55","No":"8","Country":"Croatia","Club Country":"Ukraine","Club":"Dynamo Kyiv","Weighted Degree":"24.0","Modularity Class":"25","Date of birth / Age":"20 December 1983 (aged 30)","Degree":"24","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.31450577663671375"},"color":"rgb(132,67,229)","size":12.666666984558105},{"label":"Lucas Digne","x":-18.41677474975586,"y":-111.03685760498047,"id":"425","attributes":{"Eigenvector Centrality":"0.6370473545952836","Betweenness Centrality":"0.001865102966313942","Appearances":"2","No":"17","Country":"France","Club Country":"France","Club":"Paris Saint-Germain","Weighted Degree":"29.0","Modularity Class":"16","Date of birth / Age":"20 July 1993 (aged 20)","Degree":"29","Position":"DF","Eccentricity":"6.0","Closeness Centrality":"0.3253652058432935"},"color":"rgb(229,67,229)","size":19.333332061767578},{"label":"Christian Noboa","x":-1672.23583984375,"y":-885.3366088867188,"id":"120","attributes":{"Eigenvector Centrality":"0.4300722628882676","Betweenness Centrality":"0.01081726782351466","Appearances":"42","No":"6","Country":"Ecuador","Club Country":"Russia","Club":"Dynamo Moscow","Weighted Degree":"28.0","Modularity Class":"4","Date of birth / Age":"9 April 1985 (aged 29)","Degree":"28","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.29317909852413243"},"color":"rgb(229,67,132)","size":18.0},{"label":"Koo Ja-cheol (c)","x":1210.030029296875,"y":1383.635498046875,"id":"399","attributes":{"Eigenvector Centrality":"0.2716656711357499","Betweenness Centrality":"0.007710065459146181","Appearances":"37","No":"13","Country":"South Korea","Club Country":"Germany","Club":"Mainz 05","Weighted Degree":"25.0","Modularity Class":"10","Date of birth / Age":"27 February 1989 (aged 25)","Degree":"25","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.28846153846153844"},"color":"rgb(229,67,164)","size":14.0},{"label":"Adnan Januzaj","x":-638.5029907226562,"y":-663.0790405273438,"id":"8","attributes":{"Eigenvector Centrality":"0.8465738555476343","Betweenness Centrality":"0.005671820760248386","Appearances":"1","No":"20","Country":"Belgium","Club Country":"England","Club":"Manchester United","Weighted Degree":"34.0","Modularity Class":"28","Date of birth / Age":"5 February 1995 (aged 19)","Degree":"34","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3554158607350097"},"color":"rgb(67,229,132)","size":26.0},{"label":"Rúben Amorim","x":-743.581787109375,"y":322.57769775390625,"id":"618","attributes":{"Eigenvector Centrality":"0.4623139362600413","Betweenness Centrality":"0.0011159545915913598","Appearances":"13","No":"20","Country":"Portugal","Club Country":"Portugal","Club":"Benfica","Weighted Degree":"25.0","Modularity Class":"8","Date of birth / Age":"27 January 1985 (aged 29)","Degree":"25","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.31722054380664655"},"color":"rgb(229,164,67)","size":14.0},{"label":"Daniel Van Buyten","x":-361.6231994628906,"y":-626.7444458007812,"id":"140","attributes":{"Eigenvector Centrality":"0.835724321534549","Betweenness Centrality":"0.008695741941330284","Appearances":"79","No":"15","Country":"Belgium","Club Country":"Germany","Club":"Bayern Munich","Weighted Degree":"35.0","Modularity Class":"28","Date of birth / Age":"7 February 1978 (aged 36)","Degree":"35","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.35627726611730487"},"color":"rgb(67,229,132)","size":27.33333396911621},{"label":"Cristian Gamboa","x":2154.08251953125,"y":199.01004028320312,"id":"128","attributes":{"Eigenvector Centrality":"0.24626357410920513","Betweenness Centrality":"0.004369178047589387","Appearances":"25","No":"16","Country":"Costa Rica","Club Country":"Norway","Club":"Rosenborg","Weighted Degree":"23.0","Modularity Class":"29","Date of birth / Age":"24 October 1989 (aged 24)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.26717557251908397"},"color":"rgb(229,229,67)","size":11.333333015441895},{"label":"Luiz Gustavo","x":-456.71649169921875,"y":-142.21359252929688,"id":"431","attributes":{"Eigenvector Centrality":"0.6500423521794667","Betweenness Centrality":"0.002644490835880301","Appearances":"19","No":"17","Country":"Brazil","Club Country":"Germany","Club":"VfL Wolfsburg","Weighted Degree":"28.0","Modularity Class":"23","Date of birth / Age":"23 July 1987 (aged 26)","Degree":"28","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.33242876526458615"},"color":"rgb(229,67,197)","size":18.0},{"label":"Haris Seferovic","x":141.21534729003906,"y":262.27655029296875,"id":"271","attributes":{"Eigenvector Centrality":"0.4282958634195428","Betweenness Centrality":"0.006035628087924649","Appearances":"11","No":"9","Country":"Switzerland","Club Country":"Spain","Club":"Real Sociedad","Weighted Degree":"25.0","Modularity Class":"0","Date of birth / Age":"22 February 1992 (aged 22)","Degree":"25","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.317083692838654"},"color":"rgb(164,229,67)","size":14.0},{"label":"Bruno Martins Indi","x":870.9440307617188,"y":71.02484130859375,"id":"94","attributes":{"Eigenvector Centrality":"0.335211163684756","Betweenness Centrality":"0.0","Appearances":"16","No":"4","Country":"Netherlands","Club Country":"Netherlands","Club":"Feyenoord","Weighted Degree":"22.0","Modularity Class":"22","Date of birth / Age":"8 February 1992 (aged 22)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3088235294117647"},"color":"rgb(197,67,229)","size":10.0},{"label":"Harrison Afful","x":468.0885314941406,"y":1387.692626953125,"id":"272","attributes":{"Eigenvector Centrality":"0.2902743690727881","Betweenness Centrality":"0.0","Appearances":"41","No":"23","Country":"Ghana","Club Country":"Tunisia","Club":"Espérance","Weighted Degree":"22.0","Modularity Class":"5","Date of birth / Age":"24 June 1986 (aged 27)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2849941837921675"},"color":"rgb(67,229,197)","size":10.0},{"label":"Pedro","x":-1064.4056396484375,"y":-381.1362609863281,"id":"569","attributes":{"Eigenvector Centrality":"0.9370904429273632","Betweenness Centrality":"0.0017384725186443504","Appearances":"40","No":"11","Country":"Spain","Club Country":"Spain","Club":"Barcelona","Weighted Degree":"31.0","Modularity Class":"23","Date of birth / Age":"28 July 1987 (aged 26)","Degree":"31","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.33777573529411764"},"color":"rgb(229,67,197)","size":22.0},{"label":"Marcos Rojo","x":-1169.275390625,"y":359.34051513671875,"id":"450","attributes":{"Eigenvector Centrality":"0.5206596128107512","Betweenness Centrality":"0.0012988089193429497","Appearances":"22","No":"16","Country":"Argentina","Club Country":"Portugal","Club":"Sporting CP","Weighted Degree":"25.0","Modularity Class":"19","Date of birth / Age":"20 March 1990 (aged 24)","Degree":"25","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.31038851351351354"},"color":"rgb(67,229,229)","size":14.0},{"label":"Rony Martínez","x":1436.8521728515625,"y":-978.241455078125,"id":"615","attributes":{"Eigenvector Centrality":"0.2843426001461682","Betweenness Centrality":"0.011544965385101183","Appearances":"12","No":"16","Country":"Honduras","Club Country":"Honduras","Club":"Real Sociedad","Weighted Degree":"25.0","Modularity Class":"7","Date of birth / Age":"16 October 1988 (aged 25)","Degree":"25","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.2986590816741162"},"color":"rgb(100,67,229)","size":14.0},{"label":"Marcelo","x":-546.0523071289062,"y":-181.72265625,"id":"443","attributes":{"Eigenvector Centrality":"0.8244385370187147","Betweenness Centrality":"0.002939462204472773","Appearances":"31","No":"6","Country":"Brazil","Club Country":"Spain","Club":"Real Madrid","Weighted Degree":"33.0","Modularity Class":"23","Date of birth / Age":"12 May 1988 (aged 26)","Degree":"33","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3394919168591224"},"color":"rgb(229,67,197)","size":24.666667938232422},{"label":"Lukas Podolski","x":202.08969116210938,"y":-446.2755126953125,"id":"433","attributes":{"Eigenvector Centrality":"0.6437896004097903","Betweenness Centrality":"0.002673471053911242","Appearances":"114","No":"10","Country":"Germany","Club Country":"England","Club":"Arsenal","Weighted Degree":"29.0","Modularity Class":"13","Date of birth / Age":"4 June 1985 (aged 29)","Degree":"29","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3219448094612352"},"color":"rgb(67,229,164)","size":19.333332061767578},{"label":"Diego Lugano (c)","x":-32.81373596191406,"y":-13.45755386352539,"id":"167","attributes":{"Eigenvector Centrality":"0.3938483696056438","Betweenness Centrality":"5.998164097045359E-4","Appearances":"94","No":"2","Country":"Uruguay","Club Country":"England","Club":"West Bromwich Albion","Weighted Degree":"23.0","Modularity Class":"6","Date of birth / Age":"2 November 1980 (aged 33)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.31831961888263316"},"color":"rgb(229,197,67)","size":11.333333015441895},{"label":"Bryan Ruiz (c)","x":2006.2958984375,"y":332.363525390625,"id":"95","attributes":{"Eigenvector Centrality":"0.27578394718697025","Betweenness Centrality":"0.017798712465968473","Appearances":"63","No":"10","Country":"Costa Rica","Club Country":"Netherlands","Club":"PSV","Weighted Degree":"25.0","Modularity Class":"29","Date of birth / Age":"18 August 1985 (aged 28)","Degree":"25","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.2892561983471074"},"color":"rgb(229,229,67)","size":14.0},{"label":"Jerry Palacios","x":1713.39697265625,"y":-1049.36083984375,"id":"329","attributes":{"Eigenvector Centrality":"0.2572578722910379","Betweenness Centrality":"0.007827260909354134","Appearances":"24","No":"9","Country":"Honduras","Club Country":"Costa Rica","Club":"Alajuelense","Weighted Degree":"24.0","Modularity Class":"7","Date of birth / Age":"1 November 1981 (aged 32)","Degree":"24","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.2768361581920904"},"color":"rgb(100,67,229)","size":12.666666984558105},{"label":"Emilio Izaguirre","x":1455.924072265625,"y":-1104.433837890625,"id":"197","attributes":{"Eigenvector Centrality":"0.2813611118856367","Betweenness Centrality":"0.011679703221250124","Appearances":"68","No":"7","Country":"Honduras","Club Country":"Scotland","Club":"Celtic","Weighted Degree":"25.0","Modularity Class":"7","Date of birth / Age":"10 May 1986 (aged 28)","Degree":"25","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2968497576736672"},"color":"rgb(100,67,229)","size":14.0},{"label":"Nicolás Lodeiro","x":-54.9222297668457,"y":16.616008758544922,"id":"531","attributes":{"Eigenvector Centrality":"0.37564528732258246","Betweenness Centrality":"0.0","Appearances":"26","No":"14","Country":"Uruguay","Club Country":"Brazil","Club":"Corinthians","Weighted Degree":"22.0","Modularity Class":"6","Date of birth / Age":"21 March 1989 (aged 25)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3121019108280255"},"color":"rgb(229,197,67)","size":10.0},{"label":"Raphaël Varane","x":-176.20541381835938,"y":-169.9130401611328,"id":"589","attributes":{"Eigenvector Centrality":"0.742488542981204","Betweenness Centrality":"0.0035273454232103265","Appearances":"6","No":"4","Country":"France","Club Country":"Spain","Club":"Real Madrid","Weighted Degree":"32.0","Modularity Class":"16","Date of birth / Age":"25 April 1993 (aged 21)","Degree":"32","Position":"DF","Eccentricity":"6.0","Closeness Centrality":"0.33576975788031066"},"color":"rgb(229,67,229)","size":23.33333396911621},{"label":"Mattia Perin","x":272.2126770019531,"y":763.703857421875,"id":"482","attributes":{"Eigenvector Centrality":"0.44532305932946153","Betweenness Centrality":"0.0034549672499168743","Appearances":"0","No":"13","Country":"Italy","Club Country":"Italy","Club":"Genoa","Weighted Degree":"24.0","Modularity Class":"3","Date of birth / Age":"10 November 1992 (aged 21)","Degree":"24","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.31183708103521424"},"color":"rgb(197,229,67)","size":12.666666984558105},{"label":"Šime Vrsaljko","x":-183.1659393310547,"y":697.4119873046875,"id":"653","attributes":{"Eigenvector Centrality":"0.3720817713091997","Betweenness Centrality":"0.0039034450268718027","Appearances":"7","No":"2","Country":"Croatia","Club Country":"Italy","Club":"Genoa","Weighted Degree":"24.0","Modularity Class":"25","Date of birth / Age":"10 January 1992 (aged 22)","Degree":"24","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3139683895771038"},"color":"rgb(132,67,229)","size":12.666666984558105},{"label":"Paulinho","x":-575.74462890625,"y":-298.09417724609375,"id":"567","attributes":{"Eigenvector Centrality":"0.6368676039157191","Betweenness Centrality":"0.002227988166518949","Appearances":"26","No":"8","Country":"Brazil","Club Country":"England","Club":"Tottenham Hotspur","Weighted Degree":"27.0","Modularity Class":"23","Date of birth / Age":"25 July 1988 (aged 25)","Degree":"27","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3327297419646899"},"color":"rgb(229,67,197)","size":16.666667938232422},{"label":"Medhi Lacen","x":-1321.0677490234375,"y":1173.3302001953125,"id":"493","attributes":{"Eigenvector Centrality":"0.30926248352056784","Betweenness Centrality":"0.0011823348492373809","Appearances":"30","No":"8","Country":"Algeria","Club Country":"Spain","Club":"Getafe","Weighted Degree":"23.0","Modularity Class":"24","Date of birth / Age":"15 May 1984 (aged 30)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2950622240064231"},"color":"rgb(67,164,229)","size":11.333333015441895},{"label":"Ahmed Musa","x":-341.6416320800781,"y":-1640.5048828125,"id":"14","attributes":{"Eigenvector Centrality":"0.36203263260642976","Betweenness Centrality":"0.009769556368358679","Appearances":"35","No":"7","Country":"Nigeria","Club Country":"Russia","Club":"CSKA Moscow","Weighted Degree":"27.0","Modularity Class":"14","Date of birth / Age":"14 October 1992 (aged 21)","Degree":"27","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.2930622009569378"},"color":"rgb(67,229,100)","size":16.666667938232422},{"label":"Max Gradel","x":486.3621826171875,"y":-849.3237915039062,"id":"485","attributes":{"Eigenvector Centrality":"0.32737398677050034","Betweenness Centrality":"5.067313329973086E-4","Appearances":"26","No":"15","Country":"Ivory Coast","Club Country":"France","Club":"Saint-Étienne","Weighted Degree":"23.0","Modularity Class":"9","Date of birth / Age":"30 November 1987 (aged 26)","Degree":"23","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.30548628428927677"},"color":"rgb(164,67,229)","size":11.333333015441895},{"label":"Yoichiro Kakitani","x":646.9409790039062,"y":622.2392578125,"id":"729","attributes":{"Eigenvector Centrality":"0.33192039229134085","Betweenness Centrality":"0.0010231003820519223","Appearances":"12","No":"11","Country":"Japan","Club Country":"Japan","Club":"Cerezo Osaka","Weighted Degree":"23.0","Modularity Class":"27","Date of birth / Age":"3 January 1990 (aged 24)","Degree":"23","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3190104166666667"},"color":"rgb(67,100,229)","size":11.333333015441895},{"label":"Jefferson","x":-426.4915771484375,"y":-267.5847473144531,"id":"323","attributes":{"Eigenvector Centrality":"0.5425650576268322","Betweenness Centrality":"0.0","Appearances":"9","No":"1","Country":"Brazil","Club Country":"Brazil","Club":"Botafogo","Weighted Degree":"22.0","Modularity Class":"23","Date of birth / Age":"2 January 1983 (aged 31)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3158573270305114"},"color":"rgb(229,67,197)","size":10.0},{"label":"Reuben Gabriel","x":-132.04296875,"y":-1684.207275390625,"id":"597","attributes":{"Eigenvector Centrality":"0.30581490023520397","Betweenness Centrality":"0.0","Appearances":"11","No":"4","Country":"Nigeria","Club Country":"Belgium","Club":"Waasland-Beveren","Weighted Degree":"22.0","Modularity Class":"14","Date of birth / Age":"25 September 1990 (aged 23)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.28800940438871475"},"color":"rgb(67,229,100)","size":10.0},{"label":"Adam Kwarasey","x":427.3985290527344,"y":1398.171875,"id":"4","attributes":{"Eigenvector Centrality":"0.2902743690727881","Betweenness Centrality":"0.0","Appearances":"21","No":"12","Country":"Ghana","Club Country":"Norway","Club":"Strømsgodset","Weighted Degree":"22.0","Modularity Class":"5","Date of birth / Age":"12 December 1987 (aged 26)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.2849941837921675"},"color":"rgb(67,229,197)","size":10.0},{"label":"Sergio Busquets","x":-999.5798950195312,"y":-234.14259338378906,"id":"643","attributes":{"Eigenvector Centrality":"0.9370904429273632","Betweenness Centrality":"0.0017384725186443504","Appearances":"65","No":"16","Country":"Spain","Club Country":"Spain","Club":"Barcelona","Weighted Degree":"31.0","Modularity Class":"23","Date of birth / Age":"16 July 1988 (aged 25)","Degree":"31","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.33777573529411764"},"color":"rgb(229,67,197)","size":22.0},{"label":"James Milner","x":-219.63795471191406,"y":-778.5797119140625,"id":"308","attributes":{"Eigenvector Centrality":"0.7015324384017535","Betweenness Centrality":"0.003652191896387035","Appearances":"47","No":"17","Country":"England","Club Country":"England","Club":"Manchester City","Weighted Degree":"30.0","Modularity Class":"28","Date of birth / Age":"4 January 1986 (aged 28)","Degree":"30","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3316787003610108"},"color":"rgb(67,229,132)","size":20.666667938232422},{"label":"Kyle Beckerman","x":814.4154052734375,"y":-1616.4197998046875,"id":"406","attributes":{"Eigenvector Centrality":"0.2718151842935107","Betweenness Centrality":"0.0","Appearances":"37","No":"15","Country":"United States","Club Country":"United States","Club":"Real Salt Lake","Weighted Degree":"22.0","Modularity Class":"26","Date of birth / Age":"23 April 1982 (aged 32)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.28021349599695006"},"color":"rgb(100,229,67)","size":10.0},{"label":"Charles Itandje","x":514.8746337890625,"y":203.30963134765625,"id":"113","attributes":{"Eigenvector Centrality":"0.3337787545251496","Betweenness Centrality":"0.0034398247134625596","Appearances":"9","No":"16","Country":"Cameroon","Club Country":"Turkey","Club":"Konyaspor","Weighted Degree":"23.0","Modularity Class":"17","Date of birth / Age":"2 November 1982 (aged 31)","Degree":"23","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3253652058432935"},"color":"rgb(67,132,229)","size":11.333333015441895},{"label":"Javad Nekounam (c)","x":1956.9619140625,"y":1077.9049072265625,"id":"315","attributes":{"Eigenvector Centrality":"0.2127442934422965","Betweenness Centrality":"0.0","Appearances":"140","No":"6","Country":"Iran","Club Country":"Kuwait","Club":"Al-Kuwait","Weighted Degree":"22.0","Modularity Class":"1","Date of birth / Age":"7 October 1980 (aged 33)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.206809229037704"},"color":"rgb(67,197,229)","size":10.0},{"label":"Oleg Shatov","x":-1223.315185546875,"y":-1368.6673583984375,"id":"540","attributes":{"Eigenvector Centrality":"0.34982465542448277","Betweenness Centrality":"0.004583905120882726","Appearances":"7","No":"17","Country":"Russia","Club Country":"Russia","Club":"Zenit Saint Petersburg","Weighted Degree":"26.0","Modularity Class":"2","Date of birth / Age":"29 July 1990 (aged 23)","Degree":"26","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.27904328018223234"},"color":"rgb(229,67,67)","size":15.333333969116211},{"label":"Park Joo-ho","x":1252.9921875,"y":1424.8128662109375,"id":"561","attributes":{"Eigenvector Centrality":"0.2716656711357499","Betweenness Centrality":"0.007710065459146181","Appearances":"14","No":"22","Country":"South Korea","Club Country":"Germany","Club":"Mainz 05","Weighted Degree":"25.0","Modularity Class":"10","Date of birth / Age":"16 January 1987 (aged 27)","Degree":"25","Position":"DF","Eccentricity":"6.0","Closeness Centrality":"0.28846153846153844"},"color":"rgb(229,67,164)","size":14.0},{"label":"James Troisi","x":2041.552490234375,"y":-703.1470336914062,"id":"310","attributes":{"Eigenvector Centrality":"0.22132294330055022","Betweenness Centrality":"0.0","Appearances":"11","No":"14","Country":"Australia","Club Country":"Australia","Club":"Melbourne Victory","Weighted Degree":"22.0","Modularity Class":"12","Date of birth / Age":"3 July 1988 (aged 25)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.22025771651183698"},"color":"rgb(229,100,67)","size":10.0},{"label":"José Holebas","x":1657.004638671875,"y":513.2495727539062,"id":"356","attributes":{"Eigenvector Centrality":"0.269759009750252","Betweenness Centrality":"0.0018881692306353887","Appearances":"22","No":"20","Country":"Greece","Club Country":"Greece","Club":"Olympiacos","Weighted Degree":"23.0","Modularity Class":"15","Date of birth / Age":"27 June 1984 (aged 29)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2878965922444183"},"color":"rgb(229,67,100)","size":11.333333015441895},{"label":"Cristián Zapata","x":-503.78399658203125,"y":1159.0504150390625,"id":"130","attributes":{"Eigenvector Centrality":"0.43182337544263927","Betweenness Centrality":"0.007566531908575593","Appearances":"24","No":"2","Country":"Colombia","Club Country":"Italy","Club":"Milan","Weighted Degree":"29.0","Modularity Class":"11","Date of birth / Age":"30 September 1986 (aged 27)","Degree":"29","Position":"DF","Eccentricity":"6.0","Closeness Centrality":"0.32054077627562144"},"color":"rgb(67,67,229)","size":19.333332061767578},{"label":"José María Giménez","x":-198.00405883789062,"y":-82.70488739013672,"id":"359","attributes":{"Eigenvector Centrality":"0.5243629945948548","Betweenness Centrality":"0.0015151368839237088","Appearances":"6","No":"13","Country":"Uruguay","Club Country":"Spain","Club":"Atlético Madrid","Weighted Degree":"28.0","Modularity Class":"6","Date of birth / Age":"20 January 1995 (aged 19)","Degree":"28","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3236459709379128"},"color":"rgb(229,197,67)","size":18.0},{"label":"Brayan Beckeles","x":1616.7569580078125,"y":-1172.5592041015625,"id":"92","attributes":{"Eigenvector Centrality":"0.23664887946331797","Betweenness Centrality":"0.0","Appearances":"23","No":"21","Country":"Honduras","Club Country":"Honduras","Club":"Olimpia","Weighted Degree":"22.0","Modularity Class":"7","Date of birth / Age":"28 November 1985 (aged 28)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.26344086021505375"},"color":"rgb(100,67,229)","size":10.0},{"label":"Cheick Tioté","x":389.42742919921875,"y":-827.5474853515625,"id":"114","attributes":{"Eigenvector Centrality":"0.3955908250789612","Betweenness Centrality":"0.0038844035920882927","Appearances":"43","No":"9","Country":"Ivory Coast","Club Country":"England","Club":"Newcastle United","Weighted Degree":"27.0","Modularity Class":"9","Date of birth / Age":"21 June 1986 (aged 27)","Degree":"27","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3215223097112861"},"color":"rgb(164,67,229)","size":16.666667938232422},{"label":"Bakhtiar Rahmani","x":2063.09375,"y":1033.573974609375,"id":"78","attributes":{"Eigenvector Centrality":"0.21274429344229648","Betweenness Centrality":"0.0","Appearances":"4","No":"18","Country":"Iran","Club Country":"Iran","Club":"Foolad","Weighted Degree":"22.0","Modularity Class":"1","Date of birth / Age":"23 September 1991 (aged 22)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.206809229037704"},"color":"rgb(67,197,229)","size":10.0},{"label":"Lucas Biglia","x":-845.6185913085938,"y":161.40000915527344,"id":"424","attributes":{"Eigenvector Centrality":"0.5820067449262724","Betweenness Centrality":"0.006925465581949424","Appearances":"18","No":"6","Country":"Argentina","Club Country":"Italy","Club":"Lazio","Weighted Degree":"28.0","Modularity Class":"19","Date of birth / Age":"30 January 1986 (aged 28)","Degree":"28","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3346994535519126"},"color":"rgb(67,229,229)","size":18.0},{"label":"Ben Halloran","x":1954.241943359375,"y":-623.5980834960938,"id":"81","attributes":{"Eigenvector Centrality":"0.23369288429660703","Betweenness Centrality":"0.013237904694991245","Appearances":"2","No":"10","Country":"Australia","Club Country":"Germany","Club":"Fortuna Düsseldorf","Weighted Degree":"23.0","Modularity Class":"12","Date of birth / Age":"14 June 1992 (aged 21)","Degree":"23","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.25008506294658045"},"color":"rgb(229,100,67)","size":11.333333015441895},{"label":"Vladimir Granat","x":-1378.149658203125,"y":-1417.718994140625,"id":"708","attributes":{"Eigenvector Centrality":"0.2816622746350613","Betweenness Centrality":"6.368705012250895E-4","Appearances":"5","No":"13","Country":"Russia","Club Country":"Russia","Club":"Dynamo Moscow","Weighted Degree":"23.0","Modularity Class":"2","Date of birth / Age":"22 May 1987 (aged 27)","Degree":"23","Position":"DF","Eccentricity":"6.0","Closeness Centrality":"0.25538568450312715"},"color":"rgb(229,67,67)","size":11.333333015441895},{"label":"Loukas Vyntra","x":1712.4525146484375,"y":526.8307495117188,"id":"423","attributes":{"Eigenvector Centrality":"0.2684383531644051","Betweenness Centrality":"0.0025456380080491328","Appearances":"50","No":"11","Country":"Greece","Club Country":"Spain","Club":"Levante","Weighted Degree":"23.0","Modularity Class":"15","Date of birth / Age":"5 February 1981 (aged 33)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2878965922444183"},"color":"rgb(229,67,100)","size":11.333333015441895},{"label":"Mark Milligan","x":2173.81640625,"y":-588.3220825195312,"id":"459","attributes":{"Eigenvector Centrality":"0.22132294330055022","Betweenness Centrality":"0.0","Appearances":"29","No":"5","Country":"Australia","Club Country":"Australia","Club":"Melbourne Victory","Weighted Degree":"22.0","Modularity Class":"12","Date of birth / Age":"4 August 1985 (aged 28)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.22025771651183698"},"color":"rgb(229,100,67)","size":10.0},{"label":"Ermin Bicakcic","x":1292.2596435546875,"y":-362.4537353515625,"id":"204","attributes":{"Eigenvector Centrality":"0.2936293974441563","Betweenness Centrality":"0.03700993584936544","Appearances":"7","No":"3","Country":"Bosnia and Herzegovina","Club Country":"Germany","Club":"Eintracht Braunschweig","Weighted Degree":"23.0","Modularity Class":"20","Date of birth / Age":"24 January 1990 (aged 24)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3107822410147992"},"color":"rgb(132,229,67)","size":11.333333015441895},{"label":"Wilfried Bony","x":607.7100219726562,"y":-803.1463012695312,"id":"715","attributes":{"Eigenvector Centrality":"0.3359593705908816","Betweenness Centrality":"0.0021532541982020393","Appearances":"24","No":"12","Country":"Ivory Coast","Club Country":"Wales","Club":"Swansea City","Weighted Degree":"24.0","Modularity Class":"9","Date of birth / Age":"10 December 1988 (aged 25)","Degree":"24","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3077889447236181"},"color":"rgb(164,67,229)","size":12.666666984558105},{"label":"Hélder Postiga","x":-469.88958740234375,"y":192.2259979248047,"id":"277","attributes":{"Eigenvector Centrality":"0.5176962646733128","Betweenness Centrality":"0.009650096557354645","Appearances":"69","No":"23","Country":"Portugal","Club Country":"Italy","Club":"Lazio","Weighted Degree":"28.0","Modularity Class":"8","Date of birth / Age":"2 August 1982 (aged 31)","Degree":"28","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3437792329279701"},"color":"rgb(229,164,67)","size":18.0},{"label":"Jorge Valdivia","x":-250.01519775390625,"y":1428.5059814453125,"id":"354","attributes":{"Eigenvector Centrality":"0.316119262177923","Betweenness Centrality":"0.0","Appearances":"57","No":"10","Country":"Chile","Club Country":"Brazil","Club":"Palmeiras","Weighted Degree":"22.0","Modularity Class":"18","Date of birth / Age":"3 October 1983 (aged 30)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.2737430167597765"},"color":"rgb(229,132,67)","size":10.0},{"label":"Beto","x":-614.7037963867188,"y":392.89617919921875,"id":"86","attributes":{"Eigenvector Centrality":"0.45178798123360137","Betweenness Centrality":"0.00215629425092769","Appearances":"7","No":"22","Country":"Portugal","Club Country":"Spain","Club":"Sevilla","Weighted Degree":"25.0","Modularity Class":"8","Date of birth / Age":"1 May 1982 (aged 32)","Degree":"25","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3278322925958965"},"color":"rgb(229,164,67)","size":14.0},{"label":"Cesc Fàbregas","x":-1070.073486328125,"y":-271.4660339355469,"id":"111","attributes":{"Eigenvector Centrality":"0.9370904429273634","Betweenness Centrality":"0.0017384725186443504","Appearances":"89","No":"10","Country":"Spain","Club Country":"Spain","Club":"Barcelona","Weighted Degree":"31.0","Modularity Class":"23","Date of birth / Age":"4 May 1987 (aged 27)","Degree":"31","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.33777573529411764"},"color":"rgb(229,67,197)","size":22.0},{"label":"Josip Drmic","x":179.95460510253906,"y":206.55291748046875,"id":"364","attributes":{"Eigenvector Centrality":"0.42346070544921693","Betweenness Centrality":"0.005301782677055976","Appearances":"7","No":"19","Country":"Switzerland","Club Country":"Germany","Club":"1. FC Nürnberg","Weighted Degree":"25.0","Modularity Class":"0","Date of birth / Age":"8 August 1992 (aged 21)","Degree":"25","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3111769686706181"},"color":"rgb(164,229,67)","size":14.0},{"label":"André Ayew","x":486.661865234375,"y":1226.37353515625,"id":"43","attributes":{"Eigenvector Centrality":"0.32139173401751836","Betweenness Centrality":"0.003044413609568673","Appearances":"49","No":"10","Country":"Ghana","Club Country":"France","Club":"Marseille","Weighted Degree":"24.0","Modularity Class":"5","Date of birth / Age":"17 December 1989 (aged 24)","Degree":"24","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.31025749261291685"},"color":"rgb(67,229,197)","size":12.666666984558105},{"label":"Stéphane Mbia","x":284.8869934082031,"y":226.59521484375,"id":"662","attributes":{"Eigenvector Centrality":"0.36731258194731503","Betweenness Centrality":"0.006208857054612341","Appearances":"49","No":"17","Country":"Cameroon","Club Country":"Spain","Club":"Sevilla","Weighted Degree":"25.0","Modularity Class":"17","Date of birth / Age":"20 May 1986 (aged 28)","Degree":"25","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.33182844243792325"},"color":"rgb(67,132,229)","size":14.0},{"label":"Michael Babatunde","x":-143.01881408691406,"y":-1634.2734375,"id":"500","attributes":{"Eigenvector Centrality":"0.30581490023520397","Betweenness Centrality":"0.0","Appearances":"5","No":"18","Country":"Nigeria","Club Country":"Ukraine","Club":"Volyn Lutsk","Weighted Degree":"22.0","Modularity Class":"14","Date of birth / Age":"24 December 1992 (aged 21)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.28800940438871475"},"color":"rgb(67,229,100)","size":10.0},{"label":"Peter Odemwingie","x":110.87254333496094,"y":-1595.626953125,"id":"574","attributes":{"Eigenvector Centrality":"0.3422176819910441","Betweenness Centrality":"0.008219781078795195","Appearances":"61","No":"8","Country":"Nigeria","Club Country":"England","Club":"Stoke City","Weighted Degree":"25.0","Modularity Class":"14","Date of birth / Age":"15 July 1981 (aged 32)","Degree":"25","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.315450643776824"},"color":"rgb(67,229,100)","size":14.0},{"label":"Aron Jóhannsson","x":819.320068359375,"y":-1520.021240234375,"id":"62","attributes":{"Eigenvector Centrality":"0.27181518429351065","Betweenness Centrality":"0.0","Appearances":"8","No":"9","Country":"United States","Club Country":"Netherlands","Club":"AZ","Weighted Degree":"22.0","Modularity Class":"26","Date of birth / Age":"10 November 1990 (aged 23)","Degree":"22","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.28021349599695006"},"color":"rgb(100,229,67)","size":10.0},{"label":"Gianluigi Buffon (c)","x":152.25355529785156,"y":824.187744140625,"id":"249","attributes":{"Eigenvector Centrality":"0.5455496050511397","Betweenness Centrality":"0.0016215443882875223","Appearances":"140","No":"1","Country":"Italy","Club Country":"Italy","Club":"Juventus","Weighted Degree":"28.0","Modularity Class":"3","Date of birth / Age":"28 January 1978 (aged 36)","Degree":"28","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3242170269078077"},"color":"rgb(197,229,67)","size":18.0},{"label":"Leighton Baines","x":-237.56211853027344,"y":-998.0780029296875,"id":"415","attributes":{"Eigenvector Centrality":"0.5738583419916762","Betweenness Centrality":"0.0013664563333722465","Appearances":"24","No":"3","Country":"England","Club Country":"England","Club":"Everton","Weighted Degree":"25.0","Modularity Class":"28","Date of birth / Age":"11 December 1984 (aged 29)","Degree":"25","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.31183708103521424"},"color":"rgb(67,229,132)","size":14.0},{"label":"Mathis Bolly","x":651.6246337890625,"y":-893.9707641601562,"id":"474","attributes":{"Eigenvector Centrality":"0.3195851154336105","Betweenness Centrality":"0.014729679390309034","Appearances":"4","No":"6","Country":"Ivory Coast","Club Country":"Germany","Club":"Fortuna Düsseldorf","Weighted Degree":"23.0","Modularity Class":"9","Date of birth / Age":"14 November 1990 (aged 23)","Degree":"23","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.2979327117957033"},"color":"rgb(164,67,229)","size":11.333333015441895},{"label":"Fidel Martínez","x":-1762.245361328125,"y":-617.6648559570312,"id":"228","attributes":{"Eigenvector Centrality":"0.3623062182068215","Betweenness Centrality":"0.0","Appearances":"8","No":"20","Country":"Ecuador","Club Country":"Mexico","Club":"Tijuana","Weighted Degree":"22.0","Modularity Class":"4","Date of birth / Age":"15 February 1990 (aged 24)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2881223049784398"},"color":"rgb(229,67,132)","size":10.0},{"label":"Bernard","x":-458.79998779296875,"y":-206.65052795410156,"id":"85","attributes":{"Eigenvector Centrality":"0.5696754174200716","Betweenness Centrality":"0.0013333964544832435","Appearances":"11","No":"20","Country":"Brazil","Club Country":"Ukraine","Club":"Shakhtar Donetsk","Weighted Degree":"24.0","Modularity Class":"23","Date of birth / Age":"8 September 1992 (aged 21)","Degree":"24","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3202614379084967"},"color":"rgb(229,67,197)","size":12.666666984558105},{"label":"Michael Essien","x":376.83282470703125,"y":1298.3724365234375,"id":"503","attributes":{"Eigenvector Centrality":"0.3941490291913924","Betweenness Centrality":"0.004358888803155806","Appearances":"57","No":"5","Country":"Ghana","Club Country":"Italy","Club":"Milan","Weighted Degree":"28.0","Modularity Class":"5","Date of birth / Age":"3 December 1982 (aged 31)","Degree":"28","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.31223449447748514"},"color":"rgb(67,229,197)","size":18.0},{"label":"Luis Garrido","x":1665.724609375,"y":-1263.9407958984375,"id":"426","attributes":{"Eigenvector Centrality":"0.23664887946331803","Betweenness Centrality":"0.0","Appearances":"20","No":"19","Country":"Honduras","Club Country":"Honduras","Club":"Olimpia","Weighted Degree":"22.0","Modularity Class":"7","Date of birth / Age":"5 November 1990 (aged 23)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.26344086021505375"},"color":"rgb(100,67,229)","size":10.0},{"label":"David Myrie","x":2254.470947265625,"y":256.6007080078125,"id":"152","attributes":{"Eigenvector Centrality":"0.2349694476086638","Betweenness Centrality":"0.0","Appearances":"10","No":"8","Country":"Costa Rica","Club Country":"Costa Rica","Club":"Herediano","Weighted Degree":"22.0","Modularity Class":"29","Date of birth / Age":"1 June 1988 (aged 26)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2515400410677618"},"color":"rgb(229,229,67)","size":10.0},{"label":"Anthony Vanden Borre","x":-577.663330078125,"y":-888.8426513671875,"id":"56","attributes":{"Eigenvector Centrality":"0.532050214639082","Betweenness Centrality":"0.006584182583039559","Appearances":"25","No":"21","Country":"Belgium","Club Country":"Belgium","Club":"Anderlecht","Weighted Degree":"23.0","Modularity Class":"28","Date of birth / Age":"24 October 1987 (aged 26)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3321283325802079"},"color":"rgb(67,229,132)","size":11.333333015441895},{"label":"Jasper Cillessen","x":884.7673950195312,"y":31.96728515625,"id":"314","attributes":{"Eigenvector Centrality":"0.335211163684756","Betweenness Centrality":"0.0","Appearances":"8","No":"1","Country":"Netherlands","Club Country":"Netherlands","Club":"Ajax","Weighted Degree":"22.0","Modularity Class":"22","Date of birth / Age":"22 April 1989 (aged 25)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3088235294117647"},"color":"rgb(197,67,229)","size":10.0},{"label":"Fraser Forster","x":12.960638999938965,"y":-928.6837768554688,"id":"232","attributes":{"Eigenvector Centrality":"0.5560882486054125","Betweenness Centrality":"0.010448734894018583","Appearances":"2","No":"22","Country":"England","Club Country":"Scotland","Club":"Celtic","Weighted Degree":"25.0","Modularity Class":"28","Date of birth / Age":"17 March 1988 (aged 26)","Degree":"25","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3197042192257503"},"color":"rgb(67,229,132)","size":14.0},{"label":"Andrés Iniesta","x":-1067.9244384765625,"y":-187.44284057617188,"id":"50","attributes":{"Eigenvector Centrality":"0.9370904429273634","Betweenness Centrality":"0.0017384725186443504","Appearances":"97","No":"6","Country":"Spain","Club Country":"Spain","Club":"Barcelona","Weighted Degree":"31.0","Modularity Class":"23","Date of birth / Age":"11 May 1984 (aged 30)","Degree":"31","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.33777573529411764"},"color":"rgb(229,67,197)","size":22.0},{"label":"Santi Cazorla","x":-670.4064331054688,"y":-383.8587951660156,"id":"629","attributes":{"Eigenvector Centrality":"0.8894294715329176","Betweenness Centrality":"0.002430245927643242","Appearances":"64","No":"20","Country":"Spain","Club Country":"England","Club":"Arsenal","Weighted Degree":"31.0","Modularity Class":"23","Date of birth / Age":"13 December 1984 (aged 29)","Degree":"31","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3287119856887299"},"color":"rgb(229,67,197)","size":22.0},{"label":"Henri Bedimo","x":380.5469665527344,"y":174.65756225585938,"id":"278","attributes":{"Eigenvector Centrality":"0.3227718779440803","Betweenness Centrality":"0.0","Appearances":"31","No":"12","Country":"Cameroon","Club Country":"France","Club":"Lyon","Weighted Degree":"22.0","Modularity Class":"17","Date of birth / Age":"4 June 1984 (aged 30)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3139683895771038"},"color":"rgb(67,132,229)","size":10.0},{"label":"Koke","x":-921.220947265625,"y":-304.28424072265625,"id":"397","attributes":{"Eigenvector Centrality":"0.7852248920099726","Betweenness Centrality":"7.220203040676876E-4","Appearances":"8","No":"17","Country":"Spain","Club Country":"Spain","Club":"Atlético Madrid","Weighted Degree":"27.0","Modularity Class":"23","Date of birth / Age":"8 January 1992 (aged 22)","Degree":"27","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3215223097112861"},"color":"rgb(229,67,197)","size":16.666667938232422},{"label":"Vedran Corluka","x":-415.46148681640625,"y":539.5565185546875,"id":"698","attributes":{"Eigenvector Centrality":"0.35564443225400655","Betweenness Centrality":"0.004616126670181397","Appearances":"72","No":"5","Country":"Croatia","Club Country":"Russia","Club":"Lokomotiv Moscow","Weighted Degree":"23.0","Modularity Class":"25","Date of birth / Age":"5 February 1986 (aged 28)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2995110024449878"},"color":"rgb(132,67,229)","size":11.333333015441895},{"label":"Salomon Kalou","x":392.3309326171875,"y":-927.29150390625,"id":"621","attributes":{"Eigenvector Centrality":"0.3612323923614013","Betweenness Centrality":"0.0028479267154006356","Appearances":"67","No":"8","Country":"Ivory Coast","Club Country":"France","Club":"Lille","Weighted Degree":"25.0","Modularity Class":"9","Date of birth / Age":"5 August 1985 (aged 28)","Degree":"25","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.31722054380664655"},"color":"rgb(164,67,229)","size":14.0},{"label":"Maya Yoshida","x":540.3438720703125,"y":427.262451171875,"id":"491","attributes":{"Eigenvector Centrality":"0.43319192924031613","Betweenness Centrality":"0.006300072262103494","Appearances":"41","No":"22","Country":"Japan","Club Country":"England","Club":"Southampton","Weighted Degree":"28.0","Modularity Class":"27","Date of birth / Age":"24 August 1988 (aged 25)","Degree":"28","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3331822302810517"},"color":"rgb(67,100,229)","size":18.0},{"label":"Luis López","x":1610.1837158203125,"y":-1129.569091796875,"id":"427","attributes":{"Eigenvector Centrality":"0.23664887946331797","Betweenness Centrality":"0.0","Appearances":"0","No":"1","Country":"Honduras","Club Country":"Honduras","Club":"Real España","Weighted Degree":"22.0","Modularity Class":"7","Date of birth / Age":"13 September 1993 (aged 20)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.26344086021505375"},"color":"rgb(100,67,229)","size":10.0},{"label":"Kolo Touré","x":297.0413513183594,"y":-918.4600830078125,"id":"398","attributes":{"Eigenvector Centrality":"0.5026225442560357","Betweenness Centrality":"0.006800410251941604","Appearances":"107","No":"4","Country":"Ivory Coast","Club Country":"England","Club":"Liverpool","Weighted Degree":"31.0","Modularity Class":"9","Date of birth / Age":"19 March 1981 (aged 33)","Degree":"31","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3237885462555066"},"color":"rgb(164,67,229)","size":22.0},{"label":"Fernando Gago","x":-1147.2889404296875,"y":214.82017517089844,"id":"225","attributes":{"Eigenvector Centrality":"0.4756507714516442","Betweenness Centrality":"0.0","Appearances":"49","No":"5","Country":"Argentina","Club Country":"Argentina","Club":"Boca Juniors","Weighted Degree":"22.0","Modularity Class":"19","Date of birth / Age":"10 April 1986 (aged 28)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2930622009569378"},"color":"rgb(67,229,229)","size":10.0},{"label":"Juan Guillermo Cuadrado","x":-683.1348266601562,"y":1184.008056640625,"id":"370","attributes":{"Eigenvector Centrality":"0.343991844651082","Betweenness Centrality":"0.0018381218571182874","Appearances":"28","No":"11","Country":"Colombia","Club Country":"Italy","Club":"Fiorentina","Weighted Degree":"24.0","Modularity Class":"11","Date of birth / Age":"26 May 1988 (aged 26)","Degree":"24","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.3115727002967359"},"color":"rgb(67,67,229)","size":12.666666984558105},{"label":"Arjen Robben","x":630.8056640625,"y":-143.44236755371094,"id":"61","attributes":{"Eigenvector Centrality":"0.6544203740928541","Betweenness Centrality":"0.013375499273402567","Appearances":"75","No":"11","Country":"Netherlands","Club Country":"Germany","Club":"Bayern Munich","Weighted Degree":"35.0","Modularity Class":"22","Date of birth / Age":"23 January 1984 (aged 30)","Degree":"35","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.34834123222748814"},"color":"rgb(197,67,229)","size":27.33333396911621},{"label":"Mitchell Langerak","x":1759.883544921875,"y":-484.94677734375,"id":"518","attributes":{"Eigenvector Centrality":"0.30472064669130067","Betweenness Centrality":"0.03540110990626156","Appearances":"3","No":"12","Country":"Australia","Club Country":"Germany","Club":"Borussia Dortmund","Weighted Degree":"27.0","Modularity Class":"12","Date of birth / Age":"22 August 1988 (aged 25)","Degree":"27","Position":"GK","Eccentricity":"6.0","Closeness Centrality":"0.2609158679446219"},"color":"rgb(229,100,67)","size":16.666667938232422},{"label":"Yohan Cabaye","x":-73.94801330566406,"y":-145.8044891357422,"id":"728","attributes":{"Eigenvector Centrality":"0.6370473545952837","Betweenness Centrality":"0.001865102966313942","Appearances":"30","No":"6","Country":"France","Club Country":"France","Club":"Paris Saint-Germain","Weighted Degree":"29.0","Modularity Class":"16","Date of birth / Age":"14 January 1986 (aged 28)","Degree":"29","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.3253652058432935"},"color":"rgb(229,67,229)","size":19.333332061767578},{"label":"Jonathan Mensah","x":461.7189025878906,"y":1342.453125,"id":"346","attributes":{"Eigenvector Centrality":"0.2902743690727881","Betweenness Centrality":"0.0","Appearances":"27","No":"19","Country":"Ghana","Club Country":"France","Club":"Évian","Weighted Degree":"22.0","Modularity Class":"5","Date of birth / Age":"13 July 1990 (aged 23)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2849941837921675"},"color":"rgb(67,229,197)","size":10.0},{"label":"Cristopher Toselli","x":-291.25885009765625,"y":1453.383056640625,"id":"132","attributes":{"Eigenvector Centrality":"0.316119262177923","Betweenness Centrality":"0.0","Appearances":"4","No":"12","Country":"Chile","Club Country":"Chile","Club":"Universidad Católica","Weighted Degree":"22.0","Modularity Class":"18","Date of birth / Age":"22 June 1988 (aged 25)","Degree":"22","Position":"GK","Eccentricity":"7.0","Closeness Centrality":"0.2737430167597765"},"color":"rgb(229,132,67)","size":10.0},{"label":"Claudio Marchisio","x":71.69534301757812,"y":813.5997924804688,"id":"125","attributes":{"Eigenvector Centrality":"0.5455496050511397","Betweenness Centrality":"0.0016215443882875223","Appearances":"44","No":"8","Country":"Italy","Club Country":"Italy","Club":"Juventus","Weighted Degree":"28.0","Modularity Class":"3","Date of birth / Age":"19 January 1986 (aged 28)","Degree":"28","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3242170269078077"},"color":"rgb(197,229,67)","size":18.0},{"label":"Phil Jones","x":-300.3230285644531,"y":-774.0247192382812,"id":"576","attributes":{"Eigenvector Centrality":"0.7938188270448314","Betweenness Centrality":"0.0038886080479693477","Appearances":"10","No":"16","Country":"England","Club Country":"England","Club":"Manchester United","Weighted Degree":"32.0","Modularity Class":"28","Date of birth / Age":"21 February 1992 (aged 22)","Degree":"32","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3393351800554017"},"color":"rgb(67,229,132)","size":23.33333396911621},{"label":"Jack Wilshere","x":-130.01361083984375,"y":-811.2896728515625,"id":"303","attributes":{"Eigenvector Centrality":"0.7063239842607693","Betweenness Centrality":"0.001711566637513174","Appearances":"18","No":"7","Country":"England","Club Country":"England","Club":"Arsenal","Weighted Degree":"30.0","Modularity Class":"28","Date of birth / Age":"1 January 1992 (aged 22)","Degree":"30","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3199825859817153"},"color":"rgb(67,229,132)","size":20.666667938232422},{"label":"Stephen Adams","x":502.8428955078125,"y":1418.3192138671875,"id":"664","attributes":{"Eigenvector Centrality":"0.2902743690727881","Betweenness Centrality":"0.0","Appearances":"7","No":"1","Country":"Ghana","Club Country":"Ghana","Club":"Aduana Stars","Weighted Degree":"22.0","Modularity Class":"5","Date of birth / Age":"28 September 1989 (aged 24)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.2849941837921675"},"color":"rgb(67,229,197)","size":10.0},{"label":"Randall Brenes","x":2309.687255859375,"y":299.45452880859375,"id":"588","attributes":{"Eigenvector Centrality":"0.2349694476086638","Betweenness Centrality":"0.0","Appearances":"39","No":"14","Country":"Costa Rica","Club Country":"Costa Rica","Club":"Cartaginés","Weighted Degree":"22.0","Modularity Class":"29","Date of birth / Age":"13 August 1983 (aged 30)","Degree":"22","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.2515400410677618"},"color":"rgb(229,229,67)","size":10.0},{"label":"Darijo Srna (c)","x":-317.2035827636719,"y":580.4688720703125,"id":"147","attributes":{"Eigenvector Centrality":"0.36375321381526937","Betweenness Centrality":"2.8773715502087595E-4","Appearances":"112","No":"11","Country":"Croatia","Club Country":"Ukraine","Club":"Shakhtar Donetsk","Weighted Degree":"23.0","Modularity Class":"25","Date of birth / Age":"1 May 1982 (aged 32)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.30246913580246915"},"color":"rgb(132,67,229)","size":11.333333015441895},{"label":"Carlos Bacca","x":-687.1920776367188,"y":1106.895751953125,"id":"99","attributes":{"Eigenvector Centrality":"0.3586902689991431","Betweenness Centrality":"0.004048504558302689","Appearances":"11","No":"17","Country":"Colombia","Club Country":"Spain","Club":"Sevilla","Weighted Degree":"25.0","Modularity Class":"11","Date of birth / Age":"8 September 1986 (aged 27)","Degree":"25","Position":"FW","Eccentricity":"6.0","Closeness Centrality":"0.31928757602085145"},"color":"rgb(67,67,229)","size":14.0},{"label":"Dejan Lovren","x":-235.10853576660156,"y":422.8890686035156,"id":"157","attributes":{"Eigenvector Centrality":"0.45972067931258953","Betweenness Centrality":"0.007199493511865955","Appearances":"25","No":"6","Country":"Croatia","Club Country":"England","Club":"Southampton","Weighted Degree":"28.0","Modularity Class":"25","Date of birth / Age":"5 July 1989 (aged 24)","Degree":"28","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3242170269078077"},"color":"rgb(132,67,229)","size":18.0},{"label":"Mario Götze","x":301.4177551269531,"y":-338.4355163574219,"id":"454","attributes":{"Eigenvector Centrality":"0.6585766805388434","Betweenness Centrality":"0.0026429368589338613","Appearances":"29","No":"19","Country":"Germany","Club Country":"Germany","Club":"Bayern Munich","Weighted Degree":"29.0","Modularity Class":"13","Date of birth / Age":"3 June 1992 (aged 22)","Degree":"29","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3390221402214022"},"color":"rgb(67,229,164)","size":19.333332061767578},{"label":"Danny Welbeck","x":-294.47705078125,"y":-689.566650390625,"id":"144","attributes":{"Eigenvector Centrality":"0.793818827044831","Betweenness Centrality":"0.0038886080479693477","Appearances":"24","No":"11","Country":"England","Club Country":"England","Club":"Manchester United","Weighted Degree":"32.0","Modularity Class":"28","Date of birth / Age":"26 November 1990 (aged 23)","Degree":"32","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3393351800554017"},"color":"rgb(67,229,132)","size":23.33333396911621},{"label":"Óscar Boniek García","x":1554.068359375,"y":-1285.441650390625,"id":"549","attributes":{"Eigenvector Centrality":"0.24794367045748955","Betweenness Centrality":"0.0014579941476906906","Appearances":"92","No":"14","Country":"Honduras","Club Country":"United States","Club":"Houston Dynamo","Weighted Degree":"23.0","Modularity Class":"7","Date of birth / Age":"4 September 1984 (aged 29)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2750748502994012"},"color":"rgb(100,67,229)","size":11.333333015441895},{"label":"Jorge Fucile","x":-342.37835693359375,"y":145.5472869873047,"id":"352","attributes":{"Eigenvector Centrality":"0.5227167128747061","Betweenness Centrality":"0.009620495110563395","Appearances":"42","No":"4","Country":"Uruguay","Club Country":"Portugal","Club":"Porto","Weighted Degree":"30.0","Modularity Class":"6","Date of birth / Age":"19 November 1984 (aged 29)","Degree":"30","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.34154275092936803"},"color":"rgb(229,197,67)","size":20.666667938232422},{"label":"Rickie Lambert","x":-64.72023010253906,"y":-747.4366455078125,"id":"603","attributes":{"Eigenvector Centrality":"0.5904515327423896","Betweenness Centrality":"0.0016054547217210155","Appearances":"6","No":"18","Country":"England","Club Country":"England","Club":"Southampton","Weighted Degree":"26.0","Modularity Class":"28","Date of birth / Age":"16 February 1982 (aged 32)","Degree":"26","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.32407407407407407"},"color":"rgb(67,229,132)","size":15.333333969116211},{"label":"Ignazio Abate","x":229.4017333984375,"y":946.2020263671875,"id":"291","attributes":{"Eigenvector Centrality":"0.4999140209709583","Betweenness Centrality":"0.003073405743850096","Appearances":"20","No":"7","Country":"Italy","Club Country":"Italy","Club":"Milan","Weighted Degree":"27.0","Modularity Class":"3","Date of birth / Age":"12 November 1986 (aged 27)","Degree":"27","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.31928757602085145"},"color":"rgb(197,229,67)","size":16.666667938232422},{"label":"Antoine Griezmann","x":63.922183990478516,"y":-173.6581573486328,"id":"57","attributes":{"Eigenvector Centrality":"0.5246495592217708","Betweenness Centrality":"0.008309679999517289","Appearances":"4","No":"11","Country":"France","Club Country":"Spain","Club":"Real Sociedad","Weighted Degree":"25.0","Modularity Class":"16","Date of birth / Age":"21 March 1991 (aged 23)","Degree":"25","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.32695729537366547"},"color":"rgb(229,67,229)","size":14.0},{"label":"Asmir Begovic","x":1126.9224853515625,"y":-656.7363891601562,"id":"68","attributes":{"Eigenvector Centrality":"0.320955391099679","Betweenness Centrality":"0.010086360119179452","Appearances":"30","No":"1","Country":"Bosnia and Herzegovina","Club Country":"England","Club":"Stoke City","Weighted Degree":"25.0","Modularity Class":"20","Date of birth / Age":"20 June 1987 (aged 26)","Degree":"25","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.32666666666666666"},"color":"rgb(132,229,67)","size":14.0},{"label":"Gervinho","x":560.3703002929688,"y":-680.4623413085938,"id":"246","attributes":{"Eigenvector Centrality":"0.3739231420118122","Betweenness Centrality":"0.008762525083432785","Appearances":"53","No":"10","Country":"Ivory Coast","Club Country":"Italy","Club":"Roma","Weighted Degree":"26.0","Modularity Class":"9","Date of birth / Age":"27 May 1987 (aged 27)","Degree":"26","Position":"FW","Eccentricity":"4.0","Closeness Centrality":"0.329006266786034"},"color":"rgb(164,67,229)","size":15.333333969116211},{"label":"Shinji Kagawa","x":282.6526184082031,"y":314.0347900390625,"id":"646","attributes":{"Eigenvector Centrality":"0.6754701881349925","Betweenness Centrality":"0.015603619215489676","Appearances":"57","No":"10","Country":"Japan","Club Country":"England","Club":"Manchester United","Weighted Degree":"35.0","Modularity Class":"27","Date of birth / Age":"17 March 1989 (aged 25)","Degree":"35","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3491686460807601"},"color":"rgb(67,100,229)","size":27.33333396911621},{"label":"Leroy Fer","x":837.33251953125,"y":-102.8897476196289,"id":"417","attributes":{"Eigenvector Centrality":"0.34753754509962104","Betweenness Centrality":"0.0017622038238311907","Appearances":"6","No":"18","Country":"Netherlands","Club Country":"England","Club":"Norwich City","Weighted Degree":"23.0","Modularity Class":"22","Date of birth / Age":"5 January 1990 (aged 24)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.317083692838654"},"color":"rgb(197,67,229)","size":11.333333015441895},{"label":"Abel Hernández","x":-85.60250091552734,"y":-6.678264617919922,"id":"3","attributes":{"Eigenvector Centrality":"0.37564528732258257","Betweenness Centrality":"0.0","Appearances":"12","No":"8","Country":"Uruguay","Club Country":"Italy","Club":"Palermo","Weighted Degree":"22.0","Modularity Class":"6","Date of birth / Age":"8 August 1990 (aged 23)","Degree":"22","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3121019108280255"},"color":"rgb(229,197,67)","size":10.0},{"label":"Aurélien Chedjou","x":479.9815979003906,"y":42.06589126586914,"id":"71","attributes":{"Eigenvector Centrality":"0.38111818720911783","Betweenness Centrality":"0.007567747700183238","Appearances":"31","No":"14","Country":"Cameroon","Club Country":"Turkey","Club":"Galatasaray","Weighted Degree":"26.0","Modularity Class":"17","Date of birth / Age":"20 June 1985 (aged 28)","Degree":"26","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3423381462505822"},"color":"rgb(67,132,229)","size":15.333333969116211},{"label":"Mateo Kovacic","x":-492.02667236328125,"y":654.4241943359375,"id":"469","attributes":{"Eigenvector Centrality":"0.47619962944812927","Betweenness Centrality":"0.0057313310683672425","Appearances":"10","No":"20","Country":"Croatia","Club Country":"Italy","Club":"Internazionale","Weighted Degree":"29.0","Modularity Class":"25","Date of birth / Age":"6 May 1994 (aged 20)","Degree":"29","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.32608695652173914"},"color":"rgb(132,67,229)","size":19.333332061767578},{"label":"Vasilis Torosidis","x":1423.180908203125,"y":425.19268798828125,"id":"696","attributes":{"Eigenvector Centrality":"0.32379379672378844","Betweenness Centrality":"0.015251801587601078","Appearances":"66","No":"15","Country":"Greece","Club Country":"Italy","Club":"Roma","Weighted Degree":"26.0","Modularity Class":"15","Date of birth / Age":"10 June 1985 (aged 29)","Degree":"26","Position":"DF","Eccentricity":"4.0","Closeness Centrality":"0.31928757602085145"},"color":"rgb(229,67,100)","size":15.333333969116211},{"label":"Matteo Darmian","x":332.641357421875,"y":846.0514526367188,"id":"478","attributes":{"Eigenvector Centrality":"0.43196054419267377","Betweenness Centrality":"0.0018820457212751422","Appearances":"1","No":"4","Country":"Italy","Club Country":"Italy","Club":"Torino","Weighted Degree":"23.0","Modularity Class":"3","Date of birth / Age":"2 December 1989 (aged 24)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.30497925311203317"},"color":"rgb(197,229,67)","size":11.333333015441895},{"label":"Fernando Muslera","x":73.75354766845703,"y":-37.718238830566406,"id":"226","attributes":{"Eigenvector Centrality":"0.43253266088929565","Betweenness Centrality":"0.00796097224898124","Appearances":"58","No":"1","Country":"Uruguay","Club Country":"Turkey","Club":"Galatasaray","Weighted Degree":"26.0","Modularity Class":"6","Date of birth / Age":"16 June 1986 (aged 27)","Degree":"26","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.34249767008387694"},"color":"rgb(229,197,67)","size":15.333333969116211},{"label":"Rio Mavuba","x":-65.83039093017578,"y":-421.9732971191406,"id":"604","attributes":{"Eigenvector Centrality":"0.5305324640410493","Betweenness Centrality":"0.0017087585037009543","Appearances":"12","No":"12","Country":"France","Club Country":"France","Club":"Lille","Weighted Degree":"25.0","Modularity Class":"16","Date of birth / Age":"8 March 1984 (aged 30)","Degree":"25","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.32579787234042556"},"color":"rgb(229,67,229)","size":14.0},{"label":"Didier Ya Konan","x":543.8720092773438,"y":-767.3469848632812,"id":"160","attributes":{"Eigenvector Centrality":"0.34039082013140126","Betweenness Centrality":"0.003415370768047869","Appearances":"25","No":"13","Country":"Ivory Coast","Club Country":"Germany","Club":"Hannover 96","Weighted Degree":"24.0","Modularity Class":"9","Date of birth / Age":"22 May 1984 (aged 30)","Degree":"24","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.31370038412291934"},"color":"rgb(164,67,229)","size":12.666666984558105},{"label":"Islam Slimani","x":-1357.2412109375,"y":1056.663818359375,"id":"296","attributes":{"Eigenvector Centrality":"0.34570611332658036","Betweenness Centrality":"0.00227391237436229","Appearances":"20","No":"13","Country":"Algeria","Club Country":"Portugal","Club":"Sporting CP","Weighted Degree":"25.0","Modularity Class":"24","Date of birth / Age":"18 June 1988 (aged 25)","Degree":"25","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.30246913580246915"},"color":"rgb(67,164,229)","size":14.0},{"label":"Brad Guzan","x":829.8171997070312,"y":-1411.882568359375,"id":"91","attributes":{"Eigenvector Centrality":"0.28491855645503317","Betweenness Centrality":"0.0014353729751920106","Appearances":"25","No":"12","Country":"United States","Club Country":"England","Club":"Aston Villa","Weighted Degree":"23.0","Modularity Class":"26","Date of birth / Age":"9 September 1984 (aged 29)","Degree":"23","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.2929453965723396"},"color":"rgb(100,229,67)","size":11.333333015441895},{"label":"José Pedro Fuenzalida","x":-198.39776611328125,"y":1545.63720703125,"id":"361","attributes":{"Eigenvector Centrality":"0.316119262177923","Betweenness Centrality":"0.0","Appearances":"23","No":"19","Country":"Chile","Club Country":"Chile","Club":"Colo-Colo","Weighted Degree":"22.0","Modularity Class":"18","Date of birth / Age":"22 February 1985 (aged 29)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.2737430167597765"},"color":"rgb(229,132,67)","size":10.0},{"label":"Luís Neto","x":-787.0558471679688,"y":-14.597501754760742,"id":"428","attributes":{"Eigenvector Centrality":"0.5291116763411419","Betweenness Centrality":"0.007266376231630914","Appearances":"9","No":"14","Country":"Portugal","Club Country":"Russia","Club":"Zenit Saint Petersburg","Weighted Degree":"29.0","Modularity Class":"8","Date of birth / Age":"26 May 1988 (aged 26)","Degree":"29","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3223684210526316"},"color":"rgb(229,164,67)","size":19.333332061767578},{"label":"Dries Mertens","x":-646.4434204101562,"y":-473.26361083984375,"id":"177","attributes":{"Eigenvector Centrality":"0.7906646703428208","Betweenness Centrality":"0.007893651717681398","Appearances":"25","No":"14","Country":"Belgium","Club Country":"Italy","Club":"Napoli","Weighted Degree":"33.0","Modularity Class":"28","Date of birth / Age":"6 May 1987 (aged 27)","Degree":"33","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3531955790485344"},"color":"rgb(67,229,132)","size":24.666667938232422},{"label":"Jan Vertonghen","x":-726.4645385742188,"y":-735.5794067382812,"id":"311","attributes":{"Eigenvector Centrality":"0.5781054780643132","Betweenness Centrality":"0.0013899483715746057","Appearances":"56","No":"5","Country":"Belgium","Club Country":"England","Club":"Tottenham Hotspur","Weighted Degree":"25.0","Modularity Class":"28","Date of birth / Age":"24 April 1987 (aged 27)","Degree":"25","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.33638443935926776"},"color":"rgb(67,229,132)","size":14.0},{"label":"Joao Rojas","x":-1776.6961669921875,"y":-531.8544921875,"id":"334","attributes":{"Eigenvector Centrality":"0.38534499087839263","Betweenness Centrality":"0.003660717358574628","Appearances":"30","No":"9","Country":"Ecuador","Club Country":"Mexico","Club":"Cruz Azul","Weighted Degree":"24.0","Modularity Class":"4","Date of birth / Age":"14 June 1989 (aged 24)","Degree":"24","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2942353883106485"},"color":"rgb(229,67,132)","size":12.666666984558105},{"label":"Ben Foster","x":-170.4840545654297,"y":-869.5690307617188,"id":"80","attributes":{"Eigenvector Centrality":"0.5333561865660762","Betweenness Centrality":"4.2496140393833733E-4","Appearances":"7","No":"13","Country":"England","Club Country":"England","Club":"West Bromwich Albion","Weighted Degree":"23.0","Modularity Class":"28","Date of birth / Age":"3 May 1983 (aged 31)","Degree":"23","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.30624999999999997"},"color":"rgb(67,229,132)","size":11.333333015441895},{"label":"Reza Ghoochannejhad","x":2037.90625,"y":1109.2969970703125,"id":"598","attributes":{"Eigenvector Centrality":"0.21274429344229648","Betweenness Centrality":"0.0","Appearances":"14","No":"16","Country":"Iran","Club Country":"England","Club":"Charlton Athletic","Weighted Degree":"22.0","Modularity Class":"1","Date of birth / Age":"20 September 1987 (aged 26)","Degree":"22","Position":"FW","Eccentricity":"7.0","Closeness Centrality":"0.206809229037704"},"color":"rgb(67,197,229)","size":10.0},{"label":"Ivan Perišic","x":-294.8162841796875,"y":494.7712097167969,"id":"299","attributes":{"Eigenvector Centrality":"0.44148422896622697","Betweenness Centrality":"0.0021210911790253153","Appearances":"29","No":"4","Country":"Croatia","Club Country":"Germany","Club":"VfL Wolfsburg","Weighted Degree":"27.0","Modularity Class":"25","Date of birth / Age":"2 February 1989 (aged 25)","Degree":"27","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.317083692838654"},"color":"rgb(132,67,229)","size":16.666667938232422},{"label":"Frank Lampard","x":-247.65232849121094,"y":-855.8526000976562,"id":"231","attributes":{"Eigenvector Centrality":"0.7775723533806831","Betweenness Centrality":"0.0029928487399309587","Appearances":"105","No":"8","Country":"England","Club Country":"England","Club":"Chelsea","Weighted Degree":"32.0","Modularity Class":"28","Date of birth / Age":"20 June 1978 (aged 35)","Degree":"32","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3315290933694181"},"color":"rgb(67,229,132)","size":23.33333396911621},{"label":"Yasuhito Endo","x":785.9192504882812,"y":586.3290405273438,"id":"724","attributes":{"Eigenvector Centrality":"0.31718153777834773","Betweenness Centrality":"0.0","Appearances":"144","No":"7","Country":"Japan","Club Country":"Japan","Club":"Gamba Osaka","Weighted Degree":"22.0","Modularity Class":"27","Date of birth / Age":"28 January 1980 (aged 34)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3107822410147992"},"color":"rgb(67,100,229)","size":10.0},{"label":"Kevin Mirallas","x":-563.9285278320312,"y":-964.3165893554688,"id":"386","attributes":{"Eigenvector Centrality":"0.5945562042887822","Betweenness Centrality":"0.0024227939394388456","Appearances":"44","No":"11","Country":"Belgium","Club Country":"England","Club":"Everton","Weighted Degree":"26.0","Modularity Class":"28","Date of birth / Age":"5 October 1987 (aged 26)","Degree":"26","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3330312641594925"},"color":"rgb(67,229,132)","size":15.333333969116211},{"label":"Johnny Acosta","x":2202.927978515625,"y":222.98760986328125,"id":"343","attributes":{"Eigenvector Centrality":"0.24571486118323416","Betweenness Centrality":"0.003463283566079935","Appearances":"25","No":"2","Country":"Costa Rica","Club Country":"Costa Rica","Club":"Alajuelense","Weighted Degree":"23.0","Modularity Class":"29","Date of birth / Age":"21 July 1983 (aged 30)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.26601520086862107"},"color":"rgb(229,229,67)","size":11.333333015441895},{"label":"Vincent Enyeama","x":-105.49050903320312,"y":-1519.4764404296875,"id":"706","attributes":{"Eigenvector Centrality":"0.3575079291455913","Betweenness Centrality":"0.0026743855225904787","Appearances":"91","No":"1","Country":"Nigeria","Club Country":"France","Club":"Lille","Weighted Degree":"25.0","Modularity Class":"14","Date of birth / Age":"29 August 1982 (aged 31)","Degree":"25","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.31437125748503"},"color":"rgb(67,229,100)","size":14.0},{"label":"Rodrigo Muñoz","x":-20.128692626953125,"y":28.408824920654297,"id":"607","attributes":{"Eigenvector Centrality":"0.37564528732258257","Betweenness Centrality":"0.0","Appearances":"0","No":"12","Country":"Uruguay","Club Country":"Paraguay","Club":"Libertad","Weighted Degree":"22.0","Modularity Class":"6","Date of birth / Age":"22 January 1982 (aged 32)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3121019108280255"},"color":"rgb(229,197,67)","size":10.0},{"label":"Laurent Koscielny","x":-15.055593490600586,"y":-387.5162048339844,"id":"409","attributes":{"Eigenvector Centrality":"0.6518193073443905","Betweenness Centrality":"0.0017629955601543275","Appearances":"17","No":"21","Country":"France","Club Country":"England","Club":"Arsenal","Weighted Degree":"29.0","Modularity Class":"16","Date of birth / Age":"10 September 1985 (aged 28)","Degree":"29","Position":"DF","Eccentricity":"6.0","Closeness Centrality":"0.3262316910785619"},"color":"rgb(229,67,229)","size":19.333332061767578},{"label":"Steven Gerrard (c)","x":-159.652099609375,"y":-980.668701171875,"id":"668","attributes":{"Eigenvector Centrality":"0.6237674591008822","Betweenness Centrality":"0.0010635550306756442","Appearances":"111","No":"4","Country":"England","Club Country":"England","Club":"Liverpool","Weighted Degree":"27.0","Modularity Class":"28","Date of birth / Age":"30 May 1980 (aged 34)","Degree":"27","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3247901016349978"},"color":"rgb(67,229,132)","size":16.666667938232422},{"label":"Andrea Pirlo","x":108.05339813232422,"y":870.1171264648438,"id":"46","attributes":{"Eigenvector Centrality":"0.5455496050511397","Betweenness Centrality":"0.0016215443882875223","Appearances":"109","No":"21","Country":"Italy","Club Country":"Italy","Club":"Juventus","Weighted Degree":"28.0","Modularity Class":"3","Date of birth / Age":"19 May 1979 (aged 35)","Degree":"28","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3242170269078077"},"color":"rgb(197,229,67)","size":18.0},{"label":"Aleksei Kozlov","x":-1463.252685546875,"y":-1376.61376953125,"id":"25","attributes":{"Eigenvector Centrality":"0.28166227463506127","Betweenness Centrality":"6.368705012250895E-4","Appearances":"11","No":"2","Country":"Russia","Club Country":"Russia","Club":"Dynamo Moscow","Weighted Degree":"23.0","Modularity Class":"2","Date of birth / Age":"16 November 1986 (aged 27)","Degree":"23","Position":"DF","Eccentricity":"6.0","Closeness Centrality":"0.25538568450312715"},"color":"rgb(229,67,67)","size":11.333333015441895},{"label":"Yeltsin Tejeda","x":2354.937255859375,"y":330.5636291503906,"id":"727","attributes":{"Eigenvector Centrality":"0.2349694476086638","Betweenness Centrality":"0.0","Appearances":"22","No":"17","Country":"Costa Rica","Club Country":"Costa Rica","Club":"Saprissa","Weighted Degree":"22.0","Modularity Class":"29","Date of birth / Age":"17 March 1992 (aged 22)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2515400410677618"},"color":"rgb(229,229,67)","size":10.0},{"label":"John Brooks","x":729.48095703125,"y":-1409.59375,"id":"341","attributes":{"Eigenvector Centrality":"0.2843366476001853","Betweenness Centrality":"0.0036883088645504737","Appearances":"4","No":"6","Country":"United States","Club Country":"Germany","Club":"Hertha BSC","Weighted Degree":"23.0","Modularity Class":"26","Date of birth / Age":"28 January 1993 (aged 21)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2979327117957033"},"color":"rgb(100,229,67)","size":11.333333015441895},{"label":"Kwadwo Asamoah","x":285.1675720214844,"y":1193.169677734375,"id":"404","attributes":{"Eigenvector Centrality":"0.5138638941206055","Betweenness Centrality":"0.013451953978807028","Appearances":"62","No":"20","Country":"Ghana","Club Country":"Italy","Club":"Juventus","Weighted Degree":"33.0","Modularity Class":"5","Date of birth / Age":"9 December 1988 (aged 25)","Degree":"33","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3225098727512067"},"color":"rgb(67,229,197)","size":24.666667938232422},{"label":"Andrei Semyonov","x":-1427.725830078125,"y":-1522.6015625,"id":"48","attributes":{"Eigenvector Centrality":"0.26569304291819806","Betweenness Centrality":"0.0","Appearances":"1","No":"5","Country":"Russia","Club Country":"Russia","Club":"Terek Grozny","Weighted Degree":"22.0","Modularity Class":"2","Date of birth / Age":"24 March 1989 (aged 25)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.23244781783681215"},"color":"rgb(229,67,67)","size":10.0},{"label":"Geoff Cameron","x":820.3438720703125,"y":-1464.11474609375,"id":"242","attributes":{"Eigenvector Centrality":"0.3091550505336035","Betweenness Centrality":"0.007189506868566205","Appearances":"27","No":"20","Country":"United States","Club Country":"England","Club":"Stoke City","Weighted Degree":"25.0","Modularity Class":"26","Date of birth / Age":"11 July 1985 (aged 28)","Degree":"25","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3090832632464256"},"color":"rgb(100,229,67)","size":14.0},{"label":"Juan Camilo Zúñiga","x":-759.6773071289062,"y":893.1192626953125,"id":"366","attributes":{"Eigenvector Centrality":"0.5886662376124554","Betweenness Centrality":"0.01051159651060277","Appearances":"50","No":"18","Country":"Colombia","Club Country":"Italy","Club":"Napoli","Weighted Degree":"33.0","Modularity Class":"11","Date of birth / Age":"14 December 1985 (aged 28)","Degree":"33","Position":"DF","Eccentricity":"6.0","Closeness Centrality":"0.3333333333333333"},"color":"rgb(67,67,229)","size":24.666667938232422},{"label":"Julian Green","x":627.960205078125,"y":-1176.4527587890625,"id":"375","attributes":{"Eigenvector Centrality":"0.592763148395897","Betweenness Centrality":"0.018661873881244673","Appearances":"2","No":"16","Country":"United States","Club Country":"Germany","Club":"Bayern Munich","Weighted Degree":"35.0","Modularity Class":"26","Date of birth / Age":"6 June 1995 (aged 19)","Degree":"35","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3327297419646899"},"color":"rgb(100,229,67)","size":27.33333396911621},{"label":"Yuya Osako","x":806.6990356445312,"y":633.545654296875,"id":"735","attributes":{"Eigenvector Centrality":"0.31718153777834784","Betweenness Centrality":"0.0","Appearances":"9","No":"18","Country":"Japan","Club Country":"Germany","Club":"1860 München","Weighted Degree":"22.0","Modularity Class":"27","Date of birth / Age":"18 May 1990 (aged 24)","Degree":"22","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3107822410147992"},"color":"rgb(67,100,229)","size":10.0},{"label":"Sammy N\u0027Djock","x":341.5248107910156,"y":155.8591766357422,"id":"626","attributes":{"Eigenvector Centrality":"0.32277187794408035","Betweenness Centrality":"0.0","Appearances":"3","No":"23","Country":"Cameroon","Club Country":"Turkey","Club":"Fethiyespor","Weighted Degree":"22.0","Modularity Class":"17","Date of birth / Age":"25 February 1990 (aged 24)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3139683895771038"},"color":"rgb(67,132,229)","size":10.0},{"label":"João Pereira","x":-649.9645385742188,"y":448.8273620605469,"id":"333","attributes":{"Eigenvector Centrality":"0.4540996988101742","Betweenness Centrality":"0.0033859990894464925","Appearances":"36","No":"21","Country":"Portugal","Club Country":"Spain","Club":"Valencia","Weighted Degree":"25.0","Modularity Class":"8","Date of birth / Age":"25 February 1984 (aged 30)","Degree":"25","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.32507739938080493"},"color":"rgb(229,164,67)","size":14.0},{"label":"Ron-Robert Zieler","x":479.21453857421875,"y":-376.45037841796875,"id":"614","attributes":{"Eigenvector Centrality":"0.5011578446474096","Betweenness Centrality":"0.0032324185183237805","Appearances":"3","No":"12","Country":"Germany","Club Country":"Germany","Club":"Hannover 96","Weighted Degree":"24.0","Modularity Class":"13","Date of birth / Age":"12 February 1989 (aged 25)","Degree":"24","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.31599312123817713"},"color":"rgb(67,229,164)","size":12.666666984558105},{"label":"Éder Álvarez Balanta","x":-862.3296508789062,"y":1190.236083984375,"id":"181","attributes":{"Eigenvector Centrality":"0.313949251078916","Betweenness Centrality":"0.0","Appearances":"3","No":"16","Country":"Colombia","Club Country":"Argentina","Club":"River Plate","Weighted Degree":"22.0","Modularity Class":"11","Date of birth / Age":"28 February 1993 (aged 21)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.29329608938547486"},"color":"rgb(67,67,229)","size":10.0},{"label":"Martín Demichelis","x":-893.08544921875,"y":82.94781494140625,"id":"462","attributes":{"Eigenvector Centrality":"0.6398902783818312","Betweenness Centrality":"0.003598075368399343","Appearances":"38","No":"15","Country":"Argentina","Club Country":"England","Club":"Manchester City","Weighted Degree":"29.0","Modularity Class":"19","Date of birth / Age":"20 December 1980 (aged 33)","Degree":"29","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3316787003610108"},"color":"rgb(67,229,229)","size":19.333332061767578},{"label":"Mattia De Sciglio","x":304.86956787109375,"y":920.4893798828125,"id":"481","attributes":{"Eigenvector Centrality":"0.49991402097095844","Betweenness Centrality":"0.003073405743850096","Appearances":"11","No":"2","Country":"Italy","Club Country":"Italy","Club":"Milan","Weighted Degree":"27.0","Modularity Class":"3","Date of birth / Age":"20 October 1992 (aged 21)","Degree":"27","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.31928757602085145"},"color":"rgb(197,229,67)","size":16.666667938232422},{"label":"Silvestre Varela","x":-839.6356811523438,"y":400.2161865234375,"id":"652","attributes":{"Eigenvector Centrality":"0.5557776384808136","Betweenness Centrality":"0.006533778730302813","Appearances":"24","No":"18","Country":"Portugal","Club Country":"Portugal","Club":"Porto","Weighted Degree":"30.0","Modularity Class":"8","Date of birth / Age":"2 February 1985 (aged 29)","Degree":"30","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3387096774193548"},"color":"rgb(229,164,67)","size":20.666667938232422},{"label":"Sergei Ignashevich","x":-1314.4222412109375,"y":-1444.7847900390625,"id":"640","attributes":{"Eigenvector Centrality":"0.27975304502942105","Betweenness Centrality":"8.329697214751982E-4","Appearances":"96","No":"4","Country":"Russia","Club Country":"Russia","Club":"CSKA Moscow","Weighted Degree":"23.0","Modularity Class":"2","Date of birth / Age":"14 July 1979 (aged 34)","Degree":"23","Position":"DF","Eccentricity":"6.0","Closeness Centrality":"0.2544132917964694"},"color":"rgb(229,67,67)","size":11.333333015441895},{"label":"Masato Morishige","x":677.7444458007812,"y":664.5134887695312,"id":"466","attributes":{"Eigenvector Centrality":"0.3171815377783477","Betweenness Centrality":"0.0","Appearances":"10","No":"6","Country":"Japan","Club Country":"Japan","Club":"F.C. Tokyo","Weighted Degree":"22.0","Modularity Class":"27","Date of birth / Age":"21 May 1987 (aged 27)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3107822410147992"},"color":"rgb(67,100,229)","size":10.0},{"label":"Daniele De Rossi","x":294.1720886230469,"y":656.4853515625,"id":"141","attributes":{"Eigenvector Centrality":"0.4810207457061944","Betweenness Centrality":"0.006374040778649005","Appearances":"95","No":"16","Country":"Italy","Club Country":"Italy","Club":"Roma","Weighted Degree":"26.0","Modularity Class":"3","Date of birth / Age":"24 July 1983 (aged 30)","Degree":"26","Position":"MF","Eccentricity":"4.0","Closeness Centrality":"0.32754010695187163"},"color":"rgb(197,229,67)","size":15.333333969116211},{"label":"Asamoah Gyan (c)","x":384.49658203125,"y":1385.8724365234375,"id":"65","attributes":{"Eigenvector Centrality":"0.29027436907278803","Betweenness Centrality":"0.0","Appearances":"79","No":"3","Country":"Ghana","Club Country":"United Arab Emirates","Club":"Al-Ain","Weighted Degree":"22.0","Modularity Class":"5","Date of birth / Age":"22 November 1985 (aged 28)","Degree":"22","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.2849941837921675"},"color":"rgb(67,229,197)","size":10.0},{"label":"Eduardo dos Reis Carvalho","x":-685.5633544921875,"y":299.7951965332031,"id":"188","attributes":{"Eigenvector Centrality":"0.40962360528145036","Betweenness Centrality":"0.0","Appearances":"34","No":"1","Country":"Portugal","Club Country":"Portugal","Club":"Braga","Weighted Degree":"22.0","Modularity Class":"8","Date of birth / Age":"19 September 1982 (aged 31)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.30714584203928125"},"color":"rgb(229,164,67)","size":10.0},{"label":"Claudio Bravo (c)","x":-193.7080078125,"y":1267.75439453125,"id":"124","attributes":{"Eigenvector Centrality":"0.36167758865639443","Betweenness Centrality":"0.00416233990960059","Appearances":"79","No":"1","Country":"Chile","Club Country":"Spain","Club":"Real Sociedad","Weighted Degree":"25.0","Modularity Class":"18","Date of birth / Age":"13 April 1983 (aged 31)","Degree":"25","Position":"GK","Eccentricity":"6.0","Closeness Centrality":"0.30561330561330563"},"color":"rgb(229,132,67)","size":14.0},{"label":"Mickaël Landreau","x":-46.635650634765625,"y":-207.5623779296875,"id":"508","attributes":{"Eigenvector Centrality":"0.4836397599249273","Betweenness Centrality":"0.0","Appearances":"11","No":"23","Country":"France","Club Country":"France","Club":"Bastia","Weighted Degree":"22.0","Modularity Class":"16","Date of birth / Age":"14 May 1979 (aged 35)","Degree":"22","Position":"GK","Eccentricity":"7.0","Closeness Centrality":"0.3037190082644628"},"color":"rgb(229,67,229)","size":10.0},{"label":"Carlos Valdés","x":-788.6849365234375,"y":1186.095947265625,"id":"106","attributes":{"Eigenvector Centrality":"0.313949251078916","Betweenness Centrality":"0.0","Appearances":"14","No":"23","Country":"Colombia","Club Country":"Argentina","Club":"San Lorenzo","Weighted Degree":"22.0","Modularity Class":"11","Date of birth / Age":"22 May 1985 (aged 29)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.29329608938547486"},"color":"rgb(67,67,229)","size":10.0},{"label":"Reto Ziegler","x":3.86130690574646,"y":248.17929077148438,"id":"596","attributes":{"Eigenvector Centrality":"0.384616160215653","Betweenness Centrality":"0.0","Appearances":"35","No":"3","Country":"Switzerland","Club Country":"Italy","Club":"Sassuolo","Weighted Degree":"22.0","Modularity Class":"0","Date of birth / Age":"16 January 1986 (aged 28)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2922465208747515"},"color":"rgb(164,229,67)","size":10.0},{"label":"Diego Benaglio","x":-65.3055419921875,"y":256.201171875,"id":"162","attributes":{"Eigenvector Centrality":"0.4795399294217994","Betweenness Centrality":"0.0025216888133772915","Appearances":"57","No":"1","Country":"Switzerland","Club Country":"Germany","Club":"VfL Wolfsburg","Weighted Degree":"27.0","Modularity Class":"0","Date of birth / Age":"8 September 1983 (aged 30)","Degree":"27","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.31942633637548895"},"color":"rgb(164,229,67)","size":16.666667938232422},{"label":"Mario Martínez","x":1689.1534423828125,"y":-1223.1529541015625,"id":"456","attributes":{"Eigenvector Centrality":"0.23664887946331803","Betweenness Centrality":"0.0","Appearances":"37","No":"10","Country":"Honduras","Club Country":"Honduras","Club":"Real España","Weighted Degree":"22.0","Modularity Class":"7","Date of birth / Age":"30 July 1989 (aged 24)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.26344086021505375"},"color":"rgb(100,67,229)","size":10.0},{"label":"DeAndre Yedlin","x":776.4466552734375,"y":-1500.7615966796875,"id":"156","attributes":{"Eigenvector Centrality":"0.2718151842935107","Betweenness Centrality":"0.0","Appearances":"4","No":"2","Country":"United States","Club Country":"United States","Club":"Seattle Sounders FC","Weighted Degree":"22.0","Modularity Class":"26","Date of birth / Age":"9 July 1993 (aged 20)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.28021349599695006"},"color":"rgb(100,229,67)","size":10.0},{"label":"Alex Wilkinson","x":2120.3818359375,"y":-724.7479858398438,"id":"29","attributes":{"Eigenvector Centrality":"0.22132294330055022","Betweenness Centrality":"0.0","Appearances":"3","No":"22","Country":"Australia","Club Country":"South Korea","Club":"Jeonbuk Hyundai Motors","Weighted Degree":"22.0","Modularity Class":"12","Date of birth / Age":"13 August 1984 (aged 29)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.22025771651183698"},"color":"rgb(229,100,67)","size":10.0},{"label":"Yuri Zhirkov","x":-1464.4825439453125,"y":-1475.711669921875,"id":"733","attributes":{"Eigenvector Centrality":"0.2816622746350614","Betweenness Centrality":"6.368705012250895E-4","Appearances":"60","No":"18","Country":"Russia","Club Country":"Russia","Club":"Dynamo Moscow","Weighted Degree":"23.0","Modularity Class":"2","Date of birth / Age":"20 August 1983 (aged 30)","Degree":"23","Position":"FW","Eccentricity":"6.0","Closeness Centrality":"0.25538568450312715"},"color":"rgb(229,67,67)","size":11.333333015441895},{"label":"Alan Dzagoev","x":-1268.1650390625,"y":-1469.7052001953125,"id":"16","attributes":{"Eigenvector Centrality":"0.27975304502942094","Betweenness Centrality":"8.329697214751982E-4","Appearances":"32","No":"10","Country":"Russia","Club Country":"Russia","Club":"CSKA Moscow","Weighted Degree":"23.0","Modularity Class":"2","Date of birth / Age":"17 June 1990 (aged 23)","Degree":"23","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.2544132917964694"},"color":"rgb(229,67,67)","size":11.333333015441895},{"label":"Rui Patrício","x":-770.5219116210938,"y":432.8207702636719,"id":"619","attributes":{"Eigenvector Centrality":"0.4410475661612916","Betweenness Centrality":"0.001075874410151188","Appearances":"30","No":"12","Country":"Portugal","Club Country":"Portugal","Club":"Sporting CP","Weighted Degree":"24.0","Modularity Class":"8","Date of birth / Age":"15 February 1988 (aged 26)","Degree":"24","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3185955786736021"},"color":"rgb(229,164,67)","size":12.666666984558105},{"label":"Kostas Katsouranis","x":1625.112060546875,"y":590.2659301757812,"id":"400","attributes":{"Eigenvector Centrality":"0.2581333696341679","Betweenness Centrality":"0.0","Appearances":"111","No":"21","Country":"Greece","Club Country":"Greece","Club":"PAOK","Weighted Degree":"22.0","Modularity Class":"15","Date of birth / Age":"21 June 1979 (aged 34)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2760045061960195"},"color":"rgb(229,67,100)","size":10.0},{"label":"Jozy Altidore","x":866.4315185546875,"y":-1353.639892578125,"id":"365","attributes":{"Eigenvector Centrality":"0.282018657273756","Betweenness Centrality":"0.004513119899770913","Appearances":"70","No":"17","Country":"United States","Club Country":"England","Club":"Sunderland","Weighted Degree":"23.0","Modularity Class":"26","Date of birth / Age":"6 November 1989 (aged 24)","Degree":"23","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.28800940438871475"},"color":"rgb(100,229,67)","size":11.333333015441895},{"label":"Yacine Brahimi","x":-1176.72509765625,"y":1144.9345703125,"id":"722","attributes":{"Eigenvector Centrality":"0.3206186598118753","Betweenness Centrality":"0.011120766403752676","Appearances":"6","No":"11","Country":"Algeria","Club Country":"Spain","Club":"Granada","Weighted Degree":"24.0","Modularity Class":"24","Date of birth / Age":"8 February 1990 (aged 24)","Degree":"24","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3125"},"color":"rgb(67,164,229)","size":12.666666984558105},{"label":"Lee Bum-young","x":1190.99267578125,"y":1637.5755615234375,"id":"411","attributes":{"Eigenvector Centrality":"0.23152559498868786","Betweenness Centrality":"0.0","Appearances":"0","No":"23","Country":"South Korea","Club Country":"South Korea","Club":"Busan IPark","Weighted Degree":"22.0","Modularity Class":"10","Date of birth / Age":"2 April 1989 (aged 25)","Degree":"22","Position":"GK","Eccentricity":"7.0","Closeness Centrality":"0.24614869390488947"},"color":"rgb(229,67,164)","size":10.0},{"label":"Juan Carlos Paredes","x":-1452.1322021484375,"y":-446.3980712890625,"id":"368","attributes":{"Eigenvector Centrality":"0.7525405481416904","Betweenness Centrality":"0.006691544296226193","Appearances":"38","No":"4","Country":"Ecuador","Club Country":"Ecuador","Club":"Barcelona","Weighted Degree":"35.0","Modularity Class":"4","Date of birth / Age":"8 July 1987 (aged 26)","Degree":"35","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3253652058432935"},"color":"rgb(229,67,132)","size":27.33333396911621},{"label":"Eduardo da Silva","x":-364.40460205078125,"y":586.625732421875,"id":"187","attributes":{"Eigenvector Centrality":"0.36375321381526937","Betweenness Centrality":"2.8773715502087595E-4","Appearances":"63","No":"22","Country":"Croatia","Club Country":"Ukraine","Club":"Shakhtar Donetsk","Weighted Degree":"23.0","Modularity Class":"25","Date of birth / Age":"25 February 1983 (aged 31)","Degree":"23","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.30246913580246915"},"color":"rgb(132,67,229)","size":11.333333015441895},{"label":"Giorgos Karagounis (c)","x":1659.2034912109375,"y":651.7564086914062,"id":"253","attributes":{"Eigenvector Centrality":"0.26821419599108537","Betweenness Centrality":"0.011764360515140076","Appearances":"135","No":"10","Country":"Greece","Club Country":"England","Club":"Fulham","Weighted Degree":"23.0","Modularity Class":"15","Date of birth / Age":"6 March 1977 (aged 37)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2784090909090909"},"color":"rgb(229,67,100)","size":11.333333015441895},{"label":"Fernandinho","x":-442.978759765625,"y":-336.26580810546875,"id":"224","attributes":{"Eigenvector Centrality":"0.7476247846505292","Betweenness Centrality":"0.004586029475076887","Appearances":"7","No":"5","Country":"Brazil","Club Country":"England","Club":"Manchester City","Weighted Degree":"31.0","Modularity Class":"23","Date of birth / Age":"4 May 1985 (aged 29)","Degree":"31","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.34653465346534656"},"color":"rgb(229,67,197)","size":22.0},{"label":"Willian","x":-440.7384338378906,"y":-410.82391357421875,"id":"717","attributes":{"Eigenvector Centrality":"0.7525362816963489","Betweenness Centrality":"0.002196566654268722","Appearances":"7","No":"19","Country":"Brazil","Club Country":"England","Club":"Chelsea","Weighted Degree":"30.0","Modularity Class":"23","Date of birth / Age":"9 August 1988 (aged 25)","Degree":"30","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3471894189891356"},"color":"rgb(229,67,197)","size":20.666667938232422},{"label":"Ricardo Rodríguez","x":-71.6590805053711,"y":197.1143798828125,"id":"602","attributes":{"Eigenvector Centrality":"0.47953992942179946","Betweenness Centrality":"0.0025216888133772915","Appearances":"21","No":"13","Country":"Switzerland","Club Country":"Germany","Club":"VfL Wolfsburg","Weighted Degree":"27.0","Modularity Class":"0","Date of birth / Age":"25 August 1992 (aged 21)","Degree":"27","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.31942633637548895"},"color":"rgb(164,229,67)","size":16.666667938232422},{"label":"Brad Davis","x":915.6695556640625,"y":-1565.895263671875,"id":"90","attributes":{"Eigenvector Centrality":"0.282163463180194","Betweenness Centrality":"0.0017638995236230006","Appearances":"16","No":"14","Country":"United States","Club Country":"United States","Club":"Houston Dynamo","Weighted Degree":"23.0","Modularity Class":"26","Date of birth / Age":"8 November 1981 (aged 32)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2877838684416601"},"color":"rgb(100,229,67)","size":11.333333015441895},{"label":"Xavi","x":-1013.392822265625,"y":-319.8654479980469,"id":"720","attributes":{"Eigenvector Centrality":"0.9370904429273632","Betweenness Centrality":"0.0017384725186443504","Appearances":"132","No":"8","Country":"Spain","Club Country":"Spain","Club":"Barcelona","Weighted Degree":"31.0","Modularity Class":"23","Date of birth / Age":"25 January 1980 (aged 34)","Degree":"31","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.33777573529411764"},"color":"rgb(229,67,197)","size":22.0},{"label":"Yaya Touré","x":251.69076538085938,"y":-758.7758178710938,"id":"726","attributes":{"Eigenvector Centrality":"0.5209154819658625","Betweenness Centrality":"0.009566975454863513","Appearances":"82","No":"19","Country":"Ivory Coast","Club Country":"England","Club":"Manchester City","Weighted Degree":"31.0","Modularity Class":"9","Date of birth / Age":"13 May 1983 (aged 31)","Degree":"31","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3330312641594925"},"color":"rgb(164,67,229)","size":22.0},{"label":"Kevin De Bruyne","x":-581.4454956054688,"y":-583.9620971679688,"id":"384","attributes":{"Eigenvector Centrality":"0.6295071279602001","Betweenness Centrality":"0.0038293176434487024","Appearances":"21","No":"7","Country":"Belgium","Club Country":"Germany","Club":"VfL Wolfsburg","Weighted Degree":"28.0","Modularity Class":"28","Date of birth / Age":"28 June 1991 (aged 22)","Degree":"28","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3380864765409384"},"color":"rgb(67,229,132)","size":18.0},{"label":"Oswaldo Minda","x":-1549.43017578125,"y":-719.5339965820312,"id":"552","attributes":{"Eigenvector Centrality":"0.37271345847500326","Betweenness Centrality":"0.005310330072733828","Appearances":"18","No":"14","Country":"Ecuador","Club Country":"United States","Club":"Chivas USA","Weighted Degree":"23.0","Modularity Class":"4","Date of birth / Age":"July 26, 1983 (aged 30)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3006134969325153"},"color":"rgb(229,67,132)","size":11.333333015441895},{"label":"Raheem Sterling","x":-93.5101089477539,"y":-985.4642944335938,"id":"583","attributes":{"Eigenvector Centrality":"0.6237674591008822","Betweenness Centrality":"0.0010635550306756442","Appearances":"4","No":"19","Country":"England","Club Country":"England","Club":"Liverpool","Weighted Degree":"27.0","Modularity Class":"28","Date of birth / Age":"8 December 1994 (aged 19)","Degree":"27","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3247901016349978"},"color":"rgb(67,229,132)","size":16.666667938232422},{"label":"Chigozie Agbim","x":-67.00606536865234,"y":-1575.5159912109375,"id":"115","attributes":{"Eigenvector Centrality":"0.3058149002352039","Betweenness Centrality":"0.0","Appearances":"11","No":"21","Country":"Nigeria","Club Country":"Nigeria","Club":"Gombe United","Weighted Degree":"22.0","Modularity Class":"14","Date of birth / Age":"28 November 1984 (aged 29)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.28800940438871475"},"color":"rgb(67,229,100)","size":10.0},{"label":"Bacary Sagna","x":-102.57307434082031,"y":-365.2166442871094,"id":"76","attributes":{"Eigenvector Centrality":"0.6518193073443906","Betweenness Centrality":"0.0017629955601543275","Appearances":"41","No":"15","Country":"France","Club Country":"England","Club":"Arsenal","Weighted Degree":"29.0","Modularity Class":"16","Date of birth / Age":"14 February 1983 (aged 31)","Degree":"29","Position":"DF","Eccentricity":"6.0","Closeness Centrality":"0.3262316910785619"},"color":"rgb(229,67,229)","size":19.333332061767578},{"label":"Timothy Chandler","x":803.3570556640625,"y":-1282.82470703125,"id":"683","attributes":{"Eigenvector Centrality":"0.3137272348985455","Betweenness Centrality":"0.005346568845878015","Appearances":"13","No":"21","Country":"United States","Club Country":"Germany","Club":"1. FC Nürnberg","Weighted Degree":"25.0","Modularity Class":"26","Date of birth / Age":"29 March 1990 (aged 24)","Degree":"25","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.30284301606922126"},"color":"rgb(100,229,67)","size":14.0},{"label":"Muhamed Bešic","x":1194.709228515625,"y":-510.0015563964844,"id":"524","attributes":{"Eigenvector Centrality":"0.2839695417201138","Betweenness Centrality":"0.0","Appearances":"9","No":"7","Country":"Bosnia and Herzegovina","Club Country":"Hungary","Club":"Ferencváros","Weighted Degree":"22.0","Modularity Class":"20","Date of birth / Age":"10 September 1992 (aged 21)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3077889447236181"},"color":"rgb(132,229,67)","size":10.0},{"label":"Patrice Evra","x":-226.57672119140625,"y":-327.58880615234375,"id":"562","attributes":{"Eigenvector Centrality":"0.8374426942127946","Betweenness Centrality":"0.008276091758701315","Appearances":"58","No":"3","Country":"France","Club Country":"England","Club":"Manchester United","Weighted Degree":"35.0","Modularity Class":"16","Date of birth / Age":"15 May 1981 (aged 33)","Degree":"35","Position":"DF","Eccentricity":"6.0","Closeness Centrality":"0.3441011235955056"},"color":"rgb(229,67,229)","size":27.33333396911621},{"label":"Edgar Salli","x":416.1859130859375,"y":196.34884643554688,"id":"182","attributes":{"Eigenvector Centrality":"0.3227718779440803","Betweenness Centrality":"0.0","Appearances":"9","No":"20","Country":"Cameroon","Club Country":"France","Club":"Lens","Weighted Degree":"22.0","Modularity Class":"17","Date of birth / Age":"17 August 1992 (aged 21)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3139683895771038"},"color":"rgb(67,132,229)","size":10.0},{"label":"José de Jesús Corona","x":-2099.093994140625,"y":287.1224670410156,"id":"355","attributes":{"Eigenvector Centrality":"0.29131873163694544","Betweenness Centrality":"0.0012783129193471678","Appearances":"34","No":"1","Country":"Mexico","Club Country":"Mexico","Club":"Cruz Azul","Weighted Degree":"23.0","Modularity Class":"21","Date of birth / Age":"26 January 1981 (aged 33)","Degree":"23","Position":"GK","Eccentricity":"6.0","Closeness Centrality":"0.2744585511575803"},"color":"rgb(67,229,67)","size":11.333333015441895},{"label":"Óscar Bagüí","x":-1773.5125732421875,"y":-705.2896118164062,"id":"548","attributes":{"Eigenvector Centrality":"0.3623062182068213","Betweenness Centrality":"0.0","Appearances":"21","No":"18","Country":"Ecuador","Club Country":"Ecuador","Club":"Emelec","Weighted Degree":"22.0","Modularity Class":"4","Date of birth / Age":"10 December 1982 (aged 31)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2881223049784398"},"color":"rgb(229,67,132)","size":10.0},{"label":"Djamel Mesbah","x":-1360.75830078125,"y":1211.451904296875,"id":"173","attributes":{"Eigenvector Centrality":"0.29589355686287977","Betweenness Centrality":"0.0","Appearances":"26","No":"6","Country":"Algeria","Club Country":"Italy","Club":"Livorno","Weighted Degree":"22.0","Modularity Class":"24","Date of birth / Age":"9 October 1984 (aged 29)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.28389339513325607"},"color":"rgb(67,164,229)","size":10.0},{"label":"Austin Ejide","x":-127.88009643554688,"y":-1587.7188720703125,"id":"72","attributes":{"Eigenvector Centrality":"0.3058149002352039","Betweenness Centrality":"0.0","Appearances":"31","No":"16","Country":"Nigeria","Club Country":"Israel","Club":"Hapoel Be\u0027er Sheva","Weighted Degree":"22.0","Modularity Class":"14","Date of birth / Age":"8 April 1984 (aged 30)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.28800940438871475"},"color":"rgb(67,229,100)","size":10.0},{"label":"Daniel Sturridge","x":-202.59893798828125,"y":-933.4009399414062,"id":"139","attributes":{"Eigenvector Centrality":"0.6237674591008823","Betweenness Centrality":"0.0010635550306756442","Appearances":"12","No":"9","Country":"England","Club Country":"England","Club":"Liverpool","Weighted Degree":"27.0","Modularity Class":"28","Date of birth / Age":"1 September 1989 (aged 24)","Degree":"27","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3247901016349978"},"color":"rgb(67,229,132)","size":16.666667938232422},{"label":"Toby Alderweireld","x":-719.4182739257812,"y":-665.7479858398438,"id":"685","attributes":{"Eigenvector Centrality":"0.6799862056462357","Betweenness Centrality":"0.0018763771735177332","Appearances":"34","No":"2","Country":"Belgium","Club Country":"Spain","Club":"Atlético Madrid","Weighted Degree":"29.0","Modularity Class":"28","Date of birth / Age":"2 March 1989 (aged 25)","Degree":"29","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3313796212804328"},"color":"rgb(67,229,132)","size":19.333332061767578},{"label":"Christoph Kramer","x":422.9450988769531,"y":-364.4662170410156,"id":"122","attributes":{"Eigenvector Centrality":"0.4894396183916067","Betweenness Centrality":"6.915469095936232E-4","Appearances":"2","No":"23","Country":"Germany","Club Country":"Germany","Club":"Borussia Mönchengladbach","Weighted Degree":"23.0","Modularity Class":"13","Date of birth / Age":"12 February 1991 (aged 23)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.30599500416319736"},"color":"rgb(67,229,164)","size":11.333333015441895},{"label":"Esteban Granados","x":2281.050048828125,"y":393.7303161621094,"id":"206","attributes":{"Eigenvector Centrality":"0.2349694476086638","Betweenness Centrality":"0.0","Appearances":"11","No":"13","Country":"Costa Rica","Club Country":"Costa Rica","Club":"Herediano","Weighted Degree":"22.0","Modularity Class":"29","Date of birth / Age":"25 October 1985 (aged 28)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2515400410677618"},"color":"rgb(229,229,67)","size":10.0},{"label":"Gary Cahill","x":-301.79718017578125,"y":-918.284912109375,"id":"238","attributes":{"Eigenvector Centrality":"0.7775723533806831","Betweenness Centrality":"0.0029928487399309587","Appearances":"24","No":"5","Country":"England","Club Country":"England","Club":"Chelsea","Weighted Degree":"32.0","Modularity Class":"28","Date of birth / Age":"19 December 1985 (aged 28)","Degree":"32","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3315290933694181"},"color":"rgb(67,229,132)","size":23.33333396911621},{"label":"Jonathan de Guzmán","x":917.8981323242188,"y":-45.65421676635742,"id":"345","attributes":{"Eigenvector Centrality":"0.3481568776699336","Betweenness Centrality":"0.0010475901113017954","Appearances":"10","No":"8","Country":"Netherlands","Club Country":"Wales","Club":"Swansea City","Weighted Degree":"23.0","Modularity Class":"22","Date of birth / Age":"13 September 1987 (aged 26)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.31873373807458805"},"color":"rgb(197,67,229)","size":11.333333015441895},{"label":"Senijad Ibricic","x":1235.974853515625,"y":-497.09393310546875,"id":"637","attributes":{"Eigenvector Centrality":"0.2839695417201138","Betweenness Centrality":"0.0","Appearances":"42","No":"17","Country":"Bosnia and Herzegovina","Club Country":"Turkey","Club":"Kayseri Erciyesspor","Weighted Degree":"22.0","Modularity Class":"20","Date of birth / Age":"26 September 1985 (aged 28)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3077889447236181"},"color":"rgb(132,229,67)","size":10.0},{"label":"Héctor Herrera","x":-1799.6182861328125,"y":372.85076904296875,"id":"275","attributes":{"Eigenvector Centrality":"0.4116885255313005","Betweenness Centrality":"0.009305549137125925","Appearances":"13","No":"6","Country":"Mexico","Club Country":"Portugal","Club":"Porto","Weighted Degree":"29.0","Modularity Class":"21","Date of birth / Age":"19 April 1990 (aged 24)","Degree":"29","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.3128991060025543"},"color":"rgb(67,229,67)","size":19.333332061767578},{"label":"Mario Gavranovic","x":52.757667541503906,"y":247.96585083007812,"id":"453","attributes":{"Eigenvector Centrality":"0.384616160215653","Betweenness Centrality":"0.0","Appearances":"11","No":"17","Country":"Switzerland","Club Country":"Switzerland","Club":"Zürich","Weighted Degree":"22.0","Modularity Class":"0","Date of birth / Age":"24 November 1989 (aged 24)","Degree":"22","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.2922465208747515"},"color":"rgb(164,229,67)","size":10.0},{"label":"Fabian Schär","x":38.15908432006836,"y":161.535400390625,"id":"215","attributes":{"Eigenvector Centrality":"0.4279165187640593","Betweenness Centrality":"0.0017015426628181239","Appearances":"6","No":"22","Country":"Switzerland","Club Country":"Switzerland","Club":"Basel","Weighted Degree":"25.0","Modularity Class":"0","Date of birth / Age":"20 December 1991 (aged 22)","Degree":"25","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.31038851351351354"},"color":"rgb(164,229,67)","size":14.0},{"label":"Faryd Mondragón","x":-825.1312255859375,"y":1158.5755615234375,"id":"219","attributes":{"Eigenvector Centrality":"0.313949251078916","Betweenness Centrality":"0.0","Appearances":"50","No":"22","Country":"Colombia","Club Country":"Colombia","Club":"Deportivo Cali","Weighted Degree":"22.0","Modularity Class":"11","Date of birth / Age":"21 June 1971 (aged 42)","Degree":"22","Position":"GK","Eccentricity":"7.0","Closeness Centrality":"0.29329608938547486"},"color":"rgb(67,67,229)","size":10.0},{"label":"Agustín Orión","x":-1115.8746337890625,"y":250.34307861328125,"id":"12","attributes":{"Eigenvector Centrality":"0.47565077145164436","Betweenness Centrality":"0.0","Appearances":"3","No":"12","Country":"Argentina","Club Country":"Argentina","Club":"Boca Juniors","Weighted Degree":"22.0","Modularity Class":"19","Date of birth / Age":"26 July 1981 (aged 32)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.2930622009569378"},"color":"rgb(67,229,229)","size":10.0},{"label":"Lazaros Christodoulopoulos","x":1501.577880859375,"y":504.683837890625,"id":"410","attributes":{"Eigenvector Centrality":"0.27279029487191714","Betweenness Centrality":"0.003339511771537693","Appearances":"19","No":"16","Country":"Greece","Club Country":"Italy","Club":"Bologna","Weighted Degree":"23.0","Modularity Class":"15","Date of birth / Age":"19 December 1986 (aged 27)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2955367913148371"},"color":"rgb(229,67,100)","size":11.333333015441895},{"label":"Gökhan Inler (c)","x":-228.7349853515625,"y":213.2960662841797,"id":"260","attributes":{"Eigenvector Centrality":"0.6153709092825858","Betweenness Centrality":"0.004199284588766183","Appearances":"73","No":"8","Country":"Switzerland","Club Country":"Italy","Club":"Napoli","Weighted Degree":"31.0","Modularity Class":"0","Date of birth / Age":"27 June 1984 (aged 29)","Degree":"31","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3331822302810517"},"color":"rgb(164,229,67)","size":22.0},{"label":"Makoto Hasebe (c)","x":672.8050537109375,"y":505.12762451171875,"id":"438","attributes":{"Eigenvector Centrality":"0.34512034913799255","Betweenness Centrality":"0.003186055679065411","Appearances":"78","No":"17","Country":"Japan","Club Country":"Germany","Club":"1. FC Nürnberg","Weighted Degree":"24.0","Modularity Class":"27","Date of birth / Age":"18 January 1984 (aged 30)","Degree":"24","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3237885462555066"},"color":"rgb(67,100,229)","size":12.666666984558105},{"label":"Pierre Webó","x":292.5826721191406,"y":67.77238464355469,"id":"579","attributes":{"Eigenvector Centrality":"0.3844635752484932","Betweenness Centrality":"0.004484998410532358","Appearances":"56","No":"15","Country":"Cameroon","Club Country":"Turkey","Club":"Fenerbahçe","Weighted Degree":"26.0","Modularity Class":"17","Date of birth / Age":"20 January 1982 (aged 32)","Degree":"26","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3312302839116719"},"color":"rgb(67,132,229)","size":15.333333969116211},{"label":"Philipp Lahm (c)","x":350.3982849121094,"y":-483.0366516113281,"id":"577","attributes":{"Eigenvector Centrality":"0.6585766805388437","Betweenness Centrality":"0.0026429368589338613","Appearances":"106","No":"16","Country":"Germany","Club Country":"Germany","Club":"Bayern Munich","Weighted Degree":"29.0","Modularity Class":"13","Date of birth / Age":"11 November 1983 (aged 30)","Degree":"29","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3390221402214022"},"color":"rgb(67,229,164)","size":19.333332061767578},{"label":"Senad Lulic","x":921.6593627929688,"y":-424.2279052734375,"id":"636","attributes":{"Eigenvector Centrality":"0.39543615259664133","Betweenness Centrality":"0.012993279574519087","Appearances":"33","No":"16","Country":"Bosnia and Herzegovina","Club Country":"Italy","Club":"Lazio","Weighted Degree":"28.0","Modularity Class":"20","Date of birth / Age":"18 January 1986 (aged 28)","Degree":"28","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3447467166979362"},"color":"rgb(132,229,67)","size":18.0},{"label":"Benedikt Höwedes","x":472.64324951171875,"y":-229.064208984375,"id":"82","attributes":{"Eigenvector Centrality":"0.5529715553555452","Betweenness Centrality":"0.006227653676219969","Appearances":"21","No":"4","Country":"Germany","Club Country":"Germany","Club":"Schalke \u002704","Weighted Degree":"27.0","Modularity Class":"13","Date of birth / Age":"29 February 1988 (aged 26)","Degree":"27","Position":"DF","Eccentricity":"4.0","Closeness Centrality":"0.3353102189781022"},"color":"rgb(67,229,164)","size":16.666667938232422},{"label":"Kostas Manolas","x":1643.82080078125,"y":458.0362854003906,"id":"401","attributes":{"Eigenvector Centrality":"0.26975900975025197","Betweenness Centrality":"0.0018881692306353887","Appearances":"9","No":"4","Country":"Greece","Club Country":"Greece","Club":"Olympiacos","Weighted Degree":"23.0","Modularity Class":"15","Date of birth / Age":"14 June 1991 (aged 22)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2878965922444183"},"color":"rgb(229,67,100)","size":11.333333015441895},{"label":"Fabián Orellana","x":-331.134033203125,"y":1411.263916015625,"id":"214","attributes":{"Eigenvector Centrality":"0.3330736796416985","Betweenness Centrality":"0.001077331406628747","Appearances":"26","No":"14","Country":"Chile","Club Country":"Spain","Club":"Celta Vigo","Weighted Degree":"23.0","Modularity Class":"18","Date of birth / Age":"27 January 1986 (aged 28)","Degree":"23","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.2851047323506594"},"color":"rgb(229,132,67)","size":11.333333015441895},{"label":"Donis Escober","x":1653.1510009765625,"y":-1192.211181640625,"id":"176","attributes":{"Eigenvector Centrality":"0.23664887946331797","Betweenness Centrality":"0.0","Appearances":"26","No":"22","Country":"Honduras","Club Country":"Honduras","Club":"Olimpia","Weighted Degree":"22.0","Modularity Class":"7","Date of birth / Age":"3 February 1980 (aged 34)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.26344086021505375"},"color":"rgb(100,67,229)","size":10.0},{"label":"Ricardo Costa","x":-699.53125,"y":481.9271545410156,"id":"601","attributes":{"Eigenvector Centrality":"0.4540996988101741","Betweenness Centrality":"0.0033859990894464925","Appearances":"19","No":"13","Country":"Portugal","Club Country":"Spain","Club":"Valencia","Weighted Degree":"25.0","Modularity Class":"8","Date of birth / Age":"16 May 1981 (aged 33)","Degree":"25","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.32507739938080493"},"color":"rgb(229,164,67)","size":14.0},{"label":"Ezequiel Garay","x":-1064.4405517578125,"y":219.3739471435547,"id":"211","attributes":{"Eigenvector Centrality":"0.5249878217996955","Betweenness Centrality":"8.46487079105798E-4","Appearances":"18","No":"2","Country":"Argentina","Club Country":"Portugal","Club":"Benfica","Weighted Degree":"25.0","Modularity Class":"19","Date of birth / Age":"10 October 1986 (aged 27)","Degree":"25","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3084347461183382"},"color":"rgb(67,229,229)","size":14.0},{"label":"Alexis Sánchez","x":-613.0529174804688,"y":828.0868530273438,"id":"33","attributes":{"Eigenvector Centrality":"0.7577535645406533","Betweenness Centrality":"0.017626870894997412","Appearances":"67","No":"7","Country":"Chile","Club Country":"Spain","Club":"Barcelona","Weighted Degree":"37.0","Modularity Class":"18","Date of birth / Age":"19 December 1988 (aged 25)","Degree":"37","Position":"FW","Eccentricity":"6.0","Closeness Centrality":"0.31599312123817713"},"color":"rgb(229,132,67)","size":30.0},{"label":"Fernando Torres","x":-744.5380249023438,"y":-446.9110107421875,"id":"227","attributes":{"Eigenvector Centrality":"0.9333483233206638","Betweenness Centrality":"0.002581134642452991","Appearances":"107","No":"9","Country":"Spain","Club Country":"England","Club":"Chelsea","Weighted Degree":"32.0","Modularity Class":"23","Date of birth / Age":"20 March 1984 (aged 30)","Degree":"32","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.34186046511627904"},"color":"rgb(229,67,197)","size":23.33333396911621},{"label":"Gonzalo Higuaín","x":-976.8049926757812,"y":255.48199462890625,"id":"261","attributes":{"Eigenvector Centrality":"0.7220713713108181","Betweenness Centrality":"0.003097438956551802","Appearances":"36","No":"9","Country":"Argentina","Club Country":"Italy","Club":"Napoli","Weighted Degree":"32.0","Modularity Class":"19","Date of birth / Age":"10 December 1987 (aged 26)","Degree":"32","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3313796212804328"},"color":"rgb(67,229,229)","size":23.33333396911621},{"label":"Ehsan Hajsafi","x":1992.868408203125,"y":1102.4462890625,"id":"192","attributes":{"Eigenvector Centrality":"0.21274429344229648","Betweenness Centrality":"0.0","Appearances":"62","No":"3","Country":"Iran","Club Country":"Iran","Club":"Sepahan","Weighted Degree":"22.0","Modularity Class":"1","Date of birth / Age":"25 February 1990 (aged 24)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.206809229037704"},"color":"rgb(67,197,229)","size":10.0},{"label":"Bruno Alves","x":-538.8344116210938,"y":183.03184509277344,"id":"93","attributes":{"Eigenvector Centrality":"0.45315937558107916","Betweenness Centrality":"0.0029488481093627983","Appearances":"72","No":"2","Country":"Portugal","Club Country":"Turkey","Club":"Fenerbahçe","Weighted Degree":"25.0","Modularity Class":"8","Date of birth / Age":"27 November 1981 (aged 32)","Degree":"25","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3295964125560538"},"color":"rgb(229,164,67)","size":14.0},{"label":"Nicolas N\u0027Koulou","x":368.8940734863281,"y":227.7928924560547,"id":"533","attributes":{"Eigenvector Centrality":"0.3530552378369678","Betweenness Centrality":"0.004082717349656557","Appearances":"48","No":"3","Country":"Cameroon","Club Country":"France","Club":"Marseille","Weighted Degree":"24.0","Modularity Class":"17","Date of birth / Age":"27 March 1990 (aged 24)","Degree":"24","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.32856504246759055"},"color":"rgb(67,132,229)","size":12.666666984558105},{"label":"Olivier Giroud","x":-51.68798065185547,"y":-320.7739562988281,"id":"543","attributes":{"Eigenvector Centrality":"0.6518193073443905","Betweenness Centrality":"0.0017629955601543275","Appearances":"30","No":"9","Country":"France","Club Country":"England","Club":"Arsenal","Weighted Degree":"29.0","Modularity Class":"16","Date of birth / Age":"30 September 1986 (aged 27)","Degree":"29","Position":"FW","Eccentricity":"6.0","Closeness Centrality":"0.3262316910785619"},"color":"rgb(229,67,229)","size":19.333332061767578},{"label":"Carlo Costly","x":1569.5697021484375,"y":-1167.26904296875,"id":"98","attributes":{"Eigenvector Centrality":"0.23664887946331803","Betweenness Centrality":"0.0","Appearances":"70","No":"13","Country":"Honduras","Club Country":"Honduras","Club":"Real España","Weighted Degree":"22.0","Modularity Class":"7","Date of birth / Age":"18 July 1982 (aged 31)","Degree":"22","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.26344086021505375"},"color":"rgb(100,67,229)","size":10.0},{"label":"Joseph Yobo (c)","x":3.398852586746216,"y":-1540.3546142578125,"id":"363","attributes":{"Eigenvector Centrality":"0.31894295086009894","Betweenness Centrality":"0.001459927835720332","Appearances":"97","No":"2","Country":"Nigeria","Club Country":"England","Club":"Norwich City","Weighted Degree":"23.0","Modularity Class":"14","Date of birth / Age":"6 September 1980 (aged 33)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.30359355638166047"},"color":"rgb(67,229,100)","size":11.333333015441895},{"label":"Ángel di María","x":-968.576416015625,"y":161.4849395751953,"id":"54","attributes":{"Eigenvector Centrality":"0.7593130725565046","Betweenness Centrality":"0.0038213005480664053","Appearances":"47","No":"7","Country":"Argentina","Club Country":"Spain","Club":"Real Madrid","Weighted Degree":"33.0","Modularity Class":"19","Date of birth / Age":"14 February 1988 (aged 26)","Degree":"33","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.32450331125827814"},"color":"rgb(67,229,229)","size":24.666667938232422},{"label":"Jordy Clasie","x":920.4804077148438,"y":7.3684821128845215,"id":"350","attributes":{"Eigenvector Centrality":"0.335211163684756","Betweenness Centrality":"0.0","Appearances":"8","No":"16","Country":"Netherlands","Club Country":"Netherlands","Club":"Feyenoord","Weighted Degree":"22.0","Modularity Class":"22","Date of birth / Age":"27 June 1991 (aged 22)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3088235294117647"},"color":"rgb(197,67,229)","size":10.0},{"label":"Steve von Bergen","x":10.285480499267578,"y":206.5318145751953,"id":"665","attributes":{"Eigenvector Centrality":"0.384616160215653","Betweenness Centrality":"0.0","Appearances":"41","No":"5","Country":"Switzerland","Club Country":"Switzerland","Club":"Young Boys","Weighted Degree":"22.0","Modularity Class":"0","Date of birth / Age":"10 June 1983 (aged 31)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2922465208747515"},"color":"rgb(164,229,67)","size":10.0},{"label":"Jorge Claros","x":1693.2894287109375,"y":-1172.8018798828125,"id":"351","attributes":{"Eigenvector Centrality":"0.23664887946331803","Betweenness Centrality":"0.0","Appearances":"49","No":"20","Country":"Honduras","Club Country":"Honduras","Club":"Motagua","Weighted Degree":"22.0","Modularity Class":"7","Date of birth / Age":"8 January 1986 (aged 28)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.26344086021505375"},"color":"rgb(100,67,229)","size":10.0},{"label":"Afriyie Acquah","x":358.2573547363281,"y":1238.4801025390625,"id":"11","attributes":{"Eigenvector Centrality":"0.3547601242424494","Betweenness Centrality":"0.0031553330963140233","Appearances":"5","No":"6","Country":"Ghana","Club Country":"Italy","Club":"Parma","Weighted Degree":"26.0","Modularity Class":"5","Date of birth / Age":"5 January 1992 (aged 22)","Degree":"26","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3001224989791752"},"color":"rgb(67,229,197)","size":15.333333969116211},{"label":"Godfrey Oboabona","x":9.590389251708984,"y":-1597.5946044921875,"id":"259","attributes":{"Eigenvector Centrality":"0.3182459136756436","Betweenness Centrality":"0.0012640880568401147","Appearances":"35","No":"14","Country":"Nigeria","Club Country":"Turkey","Club":"Çaykur Rizespor","Weighted Degree":"23.0","Modularity Class":"14","Date of birth / Age":"16 August 1990 (aged 23)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3007364975450082"},"color":"rgb(67,229,100)","size":11.333333015441895},{"label":"Chris Smalling","x":-375.0207214355469,"y":-737.6563720703125,"id":"116","attributes":{"Eigenvector Centrality":"0.7938188270448313","Betweenness Centrality":"0.0038886080479693477","Appearances":"12","No":"12","Country":"England","Club Country":"England","Club":"Manchester United","Weighted Degree":"32.0","Modularity Class":"28","Date of birth / Age":"22 November 1989 (aged 24)","Degree":"32","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3393351800554017"},"color":"rgb(67,229,132)","size":23.33333396911621},{"label":"Shinji Okazaki","x":873.31982421875,"y":703.7589721679688,"id":"647","attributes":{"Eigenvector Centrality":"0.3658451426994684","Betweenness Centrality":"0.01364644508084283","Appearances":"76","No":"9","Country":"Japan","Club Country":"Germany","Club":"Mainz 05","Weighted Degree":"26.0","Modularity Class":"27","Date of birth / Age":"16 April 1986 (aged 28)","Degree":"26","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3313796212804328"},"color":"rgb(67,100,229)","size":15.333333969116211},{"label":"Panagiotis Kone","x":1535.2935791015625,"y":466.85699462890625,"id":"557","attributes":{"Eigenvector Centrality":"0.27279029487191714","Betweenness Centrality":"0.003339511771537693","Appearances":"16","No":"8","Country":"Greece","Club Country":"Italy","Club":"Bologna","Weighted Degree":"23.0","Modularity Class":"15","Date of birth / Age":"26 July 1987 (aged 26)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2955367913148371"},"color":"rgb(229,67,100)","size":11.333333015441895},{"label":"Michel Vorm","x":868.7987060546875,"y":-56.30570602416992,"id":"507","attributes":{"Eigenvector Centrality":"0.34815687766993364","Betweenness Centrality":"0.0010475901113017954","Appearances":"14","No":"22","Country":"Netherlands","Club Country":"Wales","Club":"Swansea City","Weighted Degree":"23.0","Modularity Class":"22","Date of birth / Age":"3 October 1983 (aged 30)","Degree":"23","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.31873373807458805"},"color":"rgb(197,67,229)","size":11.333333015441895},{"label":"Moussa Sissoko","x":49.93161392211914,"y":-364.4847106933594,"id":"523","attributes":{"Eigenvector Centrality":"0.5292224497836602","Betweenness Centrality":"0.0019647591823339743","Appearances":"17","No":"18","Country":"France","Club Country":"England","Club":"Newcastle United","Weighted Degree":"25.0","Modularity Class":"16","Date of birth / Age":"16 August 1989 (aged 24)","Degree":"25","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.3315290933694181"},"color":"rgb(229,67,229)","size":14.0},{"label":"Haris Medunjanin","x":1200.25390625,"y":-418.5536193847656,"id":"270","attributes":{"Eigenvector Centrality":"0.2839695417201138","Betweenness Centrality":"0.0","Appearances":"35","No":"18","Country":"Bosnia and Herzegovina","Club Country":"Turkey","Club":"Gaziantepspor","Weighted Degree":"22.0","Modularity Class":"20","Date of birth / Age":"8 March 1985 (aged 29)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3077889447236181"},"color":"rgb(132,229,67)","size":10.0},{"label":"Jasmin Fejzic","x":1170.343505859375,"y":-544.86572265625,"id":"312","attributes":{"Eigenvector Centrality":"0.2839695417201138","Betweenness Centrality":"0.0","Appearances":"0","No":"12","Country":"Bosnia and Herzegovina","Club Country":"Germany","Club":"VfR Aalen","Weighted Degree":"22.0","Modularity Class":"20","Date of birth / Age":"15 May 1986 (aged 28)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3077889447236181"},"color":"rgb(132,229,67)","size":10.0},{"label":"Mohammed Rabiu","x":577.3356323242188,"y":1315.146484375,"id":"520","attributes":{"Eigenvector Centrality":"0.3006021575032019","Betweenness Centrality":"0.008146054895944195","Appearances":"17","No":"17","Country":"Ghana","Club Country":"Russia","Club":"Kuban Krasnodar","Weighted Degree":"23.0","Modularity Class":"5","Date of birth / Age":"31 December 1989 (aged 24)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.29720986655883547"},"color":"rgb(67,229,197)","size":11.333333015441895},{"label":"Morgan Schneiderlin","x":8.893564224243164,"y":-207.0862274169922,"id":"521","attributes":{"Eigenvector Centrality":"0.5951644353181168","Betweenness Centrality":"0.003380555121507494","Appearances":"1","No":"22","Country":"France","Club Country":"England","Club":"Southampton","Weighted Degree":"28.0","Modularity Class":"16","Date of birth / Age":"8 November 1989 (aged 24)","Degree":"28","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.32989228007181326"},"color":"rgb(229,67,229)","size":18.0},{"label":"Xabi Alonso","x":-899.6201171875,"y":-193.28744506835938,"id":"719","attributes":{"Eigenvector Centrality":"0.904011259559127","Betweenness Centrality":"0.001687861941424018","Appearances":"111","No":"14","Country":"Spain","Club Country":"Spain","Club":"Real Madrid","Weighted Degree":"31.0","Modularity Class":"23","Date of birth / Age":"25 November 1981 (aged 32)","Degree":"31","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3350045578851413"},"color":"rgb(229,67,197)","size":22.0},{"label":"Sergio Ramos","x":-838.3143310546875,"y":-237.3342742919922,"id":"644","attributes":{"Eigenvector Centrality":"0.9040112595591273","Betweenness Centrality":"0.001687861941424018","Appearances":"117","No":"15","Country":"Spain","Club Country":"Spain","Club":"Real Madrid","Weighted Degree":"31.0","Modularity Class":"23","Date of birth / Age":"30 March 1986 (aged 28)","Degree":"31","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3350045578851413"},"color":"rgb(229,67,197)","size":22.0},{"label":"Mauricio Pinilla","x":-356.00860595703125,"y":1526.689208984375,"id":"484","attributes":{"Eigenvector Centrality":"0.32867119536836353","Betweenness Centrality":"0.0016022418362757359","Appearances":"27","No":"9","Country":"Chile","Club Country":"Italy","Club":"Cagliari","Weighted Degree":"23.0","Modularity Class":"18","Date of birth / Age":"4 February 1984 (aged 30)","Degree":"23","Position":"FW","Eccentricity":"7.0","Closeness Centrality":"0.2854368932038835"},"color":"rgb(229,132,67)","size":11.333333015441895},{"label":"Giovani dos Santos","x":-2058.406494140625,"y":426.6941833496094,"id":"256","attributes":{"Eigenvector Centrality":"0.2771264523867947","Betweenness Centrality":"0.0","Appearances":"76","No":"10","Country":"Mexico","Club Country":"Spain","Club":"Villarreal","Weighted Degree":"22.0","Modularity Class":"21","Date of birth / Age":"11 May 1989 (aged 25)","Degree":"22","Position":"FW","Eccentricity":"7.0","Closeness Centrality":"0.2599929253625752"},"color":"rgb(67,229,67)","size":10.0},{"label":"Sebastián Coates","x":-52.67010498046875,"y":55.84718322753906,"id":"634","attributes":{"Eigenvector Centrality":"0.37564528732258257","Betweenness Centrality":"0.0","Appearances":"15","No":"19","Country":"Uruguay","Club Country":"Uruguay","Club":"Nacional","Weighted Degree":"22.0","Modularity Class":"6","Date of birth / Age":"7 October 1990 (aged 23)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3121019108280255"},"color":"rgb(229,197,67)","size":10.0},{"label":"Rodrigo Palacio","x":-1056.1539306640625,"y":433.82733154296875,"id":"608","attributes":{"Eigenvector Centrality":"0.5658107599692683","Betweenness Centrality":"0.0025393109943757006","Appearances":"22","No":"18","Country":"Argentina","Club Country":"Italy","Club":"Internazionale","Weighted Degree":"27.0","Modularity Class":"19","Date of birth / Age":"5 February 1982 (aged 32)","Degree":"27","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3272484416740873"},"color":"rgb(67,229,229)","size":16.666667938232422},{"label":"Pejman Montazeri","x":2022.994140625,"y":1015.429931640625,"id":"570","attributes":{"Eigenvector Centrality":"0.2127442934422965","Betweenness Centrality":"0.0","Appearances":"22","No":"15","Country":"Iran","Club Country":"Qatar","Club":"Umm Salal","Weighted Degree":"22.0","Modularity Class":"1","Date of birth / Age":"6 September 1983 (aged 30)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.206809229037704"},"color":"rgb(67,197,229)","size":10.0},{"label":"Osman Chávez","x":1657.87158203125,"y":-1139.41357421875,"id":"551","attributes":{"Eigenvector Centrality":"0.23664887946331795","Betweenness Centrality":"0.0","Appearances":"54","No":"2","Country":"Honduras","Club Country":"China","Club":"Qingdao Jonoon","Weighted Degree":"22.0","Modularity Class":"7","Date of birth / Age":"29 July 1984 (aged 29)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.26344086021505375"},"color":"rgb(100,67,229)","size":10.0},{"label":"Kim Shin-wook","x":1231.204833984375,"y":1679.30859375,"id":"394","attributes":{"Eigenvector Centrality":"0.23152559498868786","Betweenness Centrality":"0.0","Appearances":"27","No":"18","Country":"South Korea","Club Country":"South Korea","Club":"Ulsan Hyundai","Weighted Degree":"22.0","Modularity Class":"10","Date of birth / Age":"14 April 1988 (aged 26)","Degree":"22","Position":"FW","Eccentricity":"7.0","Closeness Centrality":"0.24614869390488947"},"color":"rgb(229,67,164)","size":10.0},{"label":"Khosro Heydari","x":2085.276611328125,"y":1118.5545654296875,"id":"389","attributes":{"Eigenvector Centrality":"0.2127442934422965","Betweenness Centrality":"0.0","Appearances":"49","No":"2","Country":"Iran","Club Country":"Iran","Club":"Esteghlal","Weighted Degree":"22.0","Modularity Class":"1","Date of birth / Age":"14 September 1983 (aged 30)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.206809229037704"},"color":"rgb(67,197,229)","size":10.0},{"label":"Diego Costa","x":-946.3432006835938,"y":-379.19134521484375,"id":"164","attributes":{"Eigenvector Centrality":"0.7852248920099726","Betweenness Centrality":"7.220203040676876E-4","Appearances":"2","No":"19","Country":"Spain","Club Country":"Spain","Club":"Atlético Madrid","Weighted Degree":"27.0","Modularity Class":"23","Date of birth / Age":"7 October 1988 (aged 25)","Degree":"27","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3215223097112861"},"color":"rgb(229,67,197)","size":16.666667938232422},{"label":"Hiroki Sakai","x":714.5648803710938,"y":462.325927734375,"id":"281","attributes":{"Eigenvector Centrality":"0.3477183857332478","Betweenness Centrality":"0.0032794346304893863","Appearances":"18","No":"21","Country":"Japan","Club Country":"Germany","Club":"Hannover 96","Weighted Degree":"24.0","Modularity Class":"27","Date of birth / Age":"12 April 1990 (aged 24)","Degree":"24","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3253652058432935"},"color":"rgb(67,100,229)","size":12.666666984558105},{"label":"Mario Mandžukic","x":-149.63389587402344,"y":325.6033020019531,"id":"455","attributes":{"Eigenvector Centrality":"0.663406558743265","Betweenness Centrality":"0.010037273598114245","Appearances":"50","No":"17","Country":"Croatia","Club Country":"Germany","Club":"Bayern Munich","Weighted Degree":"35.0","Modularity Class":"25","Date of birth / Age":"21 May 1986 (aged 28)","Degree":"35","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.33777573529411764"},"color":"rgb(132,67,229)","size":27.33333396911621},{"label":"Ashkan Dejagah","x":1842.160400390625,"y":978.629150390625,"id":"66","attributes":{"Eigenvector Centrality":"0.23463431563555487","Betweenness Centrality":"0.021760525958165706","Appearances":"14","No":"21","Country":"Iran","Club Country":"England","Club":"Fulham","Weighted Degree":"24.0","Modularity Class":"1","Date of birth / Age":"5 July 1986 (aged 27)","Degree":"24","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.2317880794701987"},"color":"rgb(67,197,229)","size":12.666666984558105},{"label":"Philippe Senderos","x":-84.25211334228516,"y":385.70135498046875,"id":"578","attributes":{"Eigenvector Centrality":"0.44557482377385943","Betweenness Centrality":"0.0032141732482156185","Appearances":"53","No":"4","Country":"Switzerland","Club Country":"Spain","Club":"Valencia","Weighted Degree":"26.0","Modularity Class":"0","Date of birth / Age":"14 February 1985 (aged 29)","Degree":"26","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.31558608844997854"},"color":"rgb(164,229,67)","size":15.333333969116211},{"label":"Massimo Luongo","x":2135.375244140625,"y":-676.9358520507812,"id":"468","attributes":{"Eigenvector Centrality":"0.22132294330055022","Betweenness Centrality":"0.0","Appearances":"1","No":"21","Country":"Australia","Club Country":"England","Club":"Swindon Town","Weighted Degree":"22.0","Modularity Class":"12","Date of birth / Age":"25 September 1992 (aged 21)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.22025771651183698"},"color":"rgb(229,100,67)","size":10.0},{"label":"Ivan Franjic","x":2090.4951171875,"y":-571.4816284179688,"id":"298","attributes":{"Eigenvector Centrality":"0.22132294330055013","Betweenness Centrality":"0.0","Appearances":"9","No":"2","Country":"Australia","Club Country":"Australia","Club":"Brisbane Roar","Weighted Degree":"22.0","Modularity Class":"12","Date of birth / Age":"10 September 1987 (aged 26)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.22025771651183698"},"color":"rgb(229,100,67)","size":10.0},{"label":"Joël Matip","x":540.7796630859375,"y":139.5815887451172,"id":"337","attributes":{"Eigenvector Centrality":"0.4237417749913705","Betweenness Centrality":"0.007099320902674921","Appearances":"23","No":"21","Country":"Cameroon","Club Country":"Germany","Club":"Schalke \u002704","Weighted Degree":"28.0","Modularity Class":"17","Date of birth / Age":"8 August 1991 (aged 22)","Degree":"28","Position":"MF","Eccentricity":"4.0","Closeness Centrality":"0.3452325035227807"},"color":"rgb(67,132,229)","size":18.0},{"label":"Michael Bradley","x":721.9478759765625,"y":-1477.4307861328125,"id":"502","attributes":{"Eigenvector Centrality":"0.29057372512473595","Betweenness Centrality":"0.0021113417181140752","Appearances":"86","No":"4","Country":"United States","Club Country":"Canada","Club":"Toronto FC","Weighted Degree":"23.0","Modularity Class":"26","Date of birth / Age":"31 July 1987 (aged 26)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.29829545454545453"},"color":"rgb(100,229,67)","size":11.333333015441895},{"label":"Fredy Guarín","x":-787.8544311523438,"y":1018.7176513671875,"id":"234","attributes":{"Eigenvector Centrality":"0.44651895950904885","Betweenness Centrality":"0.006124835129264176","Appearances":"49","No":"13","Country":"Colombia","Club Country":"Italy","Club":"Internazionale","Weighted Degree":"29.0","Modularity Class":"11","Date of birth / Age":"30 June 1986 (aged 27)","Degree":"29","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.32579787234042556"},"color":"rgb(67,67,229)","size":19.333332061767578},{"label":"Júlio César","x":-374.46234130859375,"y":-336.2733154296875,"id":"376","attributes":{"Eigenvector Centrality":"0.554070122482655","Betweenness Centrality":"0.002682419843539279","Appearances":"80","No":"12","Country":"Brazil","Club Country":"Canada","Club":"Toronto FC","Weighted Degree":"23.0","Modularity Class":"23","Date of birth / Age":"3 September 1979 (aged 34)","Degree":"23","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.32579787234042556"},"color":"rgb(229,67,197)","size":11.333333015441895},{"label":"Robin van Persie (c)","x":425.4057312011719,"y":-117.818603515625,"id":"606","attributes":{"Eigenvector Centrality":"0.6930127535568564","Betweenness Centrality":"0.016157179699501083","Appearances":"85","No":"9","Country":"Netherlands","Club Country":"England","Club":"Manchester United","Weighted Degree":"35.0","Modularity Class":"22","Date of birth / Age":"6 August 1983 (aged 30)","Degree":"35","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.349002849002849"},"color":"rgb(197,67,229)","size":27.33333396911621},{"label":"Mariano Andújar","x":-1186.145263671875,"y":246.04403686523438,"id":"451","attributes":{"Eigenvector Centrality":"0.47565077145164436","Betweenness Centrality":"0.0","Appearances":"10","No":"21","Country":"Argentina","Club Country":"Italy","Club":"Catania","Weighted Degree":"22.0","Modularity Class":"19","Date of birth / Age":"30 July 1983 (aged 30)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.2930622009569378"},"color":"rgb(67,229,229)","size":10.0},{"label":"Lee Chung-yong","x":1146.0408935546875,"y":1647.960205078125,"id":"412","attributes":{"Eigenvector Centrality":"0.23152559498868786","Betweenness Centrality":"0.0","Appearances":"55","No":"17","Country":"South Korea","Club Country":"England","Club":"Bolton Wanderers","Weighted Degree":"22.0","Modularity Class":"10","Date of birth / Age":"2 July 1988 (aged 25)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.24614869390488947"},"color":"rgb(229,67,164)","size":10.0},{"label":"Andranik Teymourian","x":1940.65771484375,"y":1114.891357421875,"id":"41","attributes":{"Eigenvector Centrality":"0.21274429344229648","Betweenness Centrality":"0.0","Appearances":"79","No":"14","Country":"Iran","Club Country":"Iran","Club":"Esteghlal","Weighted Degree":"22.0","Modularity Class":"1","Date of birth / Age":"6 March 1983 (aged 31)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.206809229037704"},"color":"rgb(67,197,229)","size":10.0},{"label":"Sammy Bossut","x":-665.6251831054688,"y":-835.4097900390625,"id":"625","attributes":{"Eigenvector Centrality":"0.5344280608201899","Betweenness Centrality":"0.001607259967508427","Appearances":"0","No":"13","Country":"Belgium","Club Country":"Belgium","Club":"Zulte Waregem","Weighted Degree":"23.0","Modularity Class":"28","Date of birth / Age":"11 August 1985 (aged 28)","Degree":"23","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3343949044585987"},"color":"rgb(67,229,132)","size":11.333333015441895},{"label":"Juan Mata","x":-837.1373291015625,"y":-428.5978088378906,"id":"371","attributes":{"Eigenvector Centrality":"1.0","Betweenness Centrality":"0.005194225936839837","Appearances":"33","No":"13","Country":"Spain","Club Country":"England","Club":"Manchester United","Weighted Degree":"34.0","Modularity Class":"23","Date of birth / Age":"28 April 1988 (aged 26)","Degree":"34","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3478466635115949"},"color":"rgb(229,67,197)","size":26.0},{"label":"Faouzi Ghoulam","x":-1163.78857421875,"y":887.729736328125,"id":"218","attributes":{"Eigenvector Centrality":"0.571120930615696","Betweenness Centrality":"0.011614602667759096","Appearances":"6","No":"3","Country":"Algeria","Club Country":"Italy","Club":"Napoli","Weighted Degree":"33.0","Modularity Class":"24","Date of birth / Age":"1 February 1991 (aged 23)","Degree":"33","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3282715497990174"},"color":"rgb(67,164,229)","size":24.666667938232422},{"label":"Kenneth Omeruo","x":-33.326751708984375,"y":-1484.3856201171875,"id":"383","attributes":{"Eigenvector Centrality":"0.3177111385028752","Betweenness Centrality":"0.0033306119897154834","Appearances":"17","No":"22","Country":"Nigeria","Club Country":"England","Club":"Middlesbrough","Weighted Degree":"23.0","Modularity Class":"14","Date of birth / Age":"17 October 1993 (aged 20)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.30222039473684215"},"color":"rgb(67,229,100)","size":11.333333015441895},{"label":"Yann Sommer","x":110.02254486083984,"y":216.66073608398438,"id":"723","attributes":{"Eigenvector Centrality":"0.4279165187640593","Betweenness Centrality":"0.0017015426628181239","Appearances":"6","No":"12","Country":"Switzerland","Club Country":"Switzerland","Club":"Basel","Weighted Degree":"25.0","Modularity Class":"0","Date of birth / Age":"17 December 1988 (aged 25)","Degree":"25","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.31038851351351354"},"color":"rgb(164,229,67)","size":14.0},{"label":"Park Jong-woo","x":1236.085205078125,"y":1634.40380859375,"id":"560","attributes":{"Eigenvector Centrality":"0.2315255949886878","Betweenness Centrality":"0.0","Appearances":"10","No":"15","Country":"South Korea","Club Country":"China","Club":"Guangzhou R\u0026F","Weighted Degree":"22.0","Modularity Class":"10","Date of birth / Age":"10 March 1989 (aged 25)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.24614869390488947"},"color":"rgb(229,67,164)","size":10.0},{"label":"Arthur Boka","x":447.86834716796875,"y":-798.1806030273438,"id":"63","attributes":{"Eigenvector Centrality":"0.35099862946861243","Betweenness Centrality":"0.008388572053063042","Appearances":"78","No":"3","Country":"Ivory Coast","Club Country":"Germany","Club":"VfB Stuttgart","Weighted Degree":"25.0","Modularity Class":"9","Date of birth / Age":"2 April 1983 (aged 31)","Degree":"25","Position":"DF","Eccentricity":"4.0","Closeness Centrality":"0.32407407407407407"},"color":"rgb(164,67,229)","size":14.0},{"label":"Eiji Kawashima","x":599.2489624023438,"y":588.3504638671875,"id":"193","attributes":{"Eigenvector Centrality":"0.34852679481914073","Betweenness Centrality":"0.0021785252251571444","Appearances":"56","No":"1","Country":"Japan","Club Country":"Belgium","Club":"Standard Liège","Weighted Degree":"24.0","Modularity Class":"27","Date of birth / Age":"20 March 1983 (aged 31)","Degree":"24","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3249336870026525"},"color":"rgb(67,100,229)","size":12.666666984558105},{"label":"Javier Hernández","x":-1606.5635986328125,"y":123.67082214355469,"id":"318","attributes":{"Eigenvector Centrality":"0.6365445749365468","Betweenness Centrality":"0.02191152925089069","Appearances":"62","No":"14","Country":"Mexico","Club Country":"England","Club":"Manchester United","Weighted Degree":"35.0","Modularity Class":"21","Date of birth / Age":"1 June 1988 (aged 26)","Degree":"35","Position":"FW","Eccentricity":"6.0","Closeness Centrality":"0.3211009174311927"},"color":"rgb(67,229,67)","size":27.33333396911621},{"label":"Terence Kongolo","x":966.4187622070312,"y":-4.162721157073975,"id":"673","attributes":{"Eigenvector Centrality":"0.335211163684756","Betweenness Centrality":"0.0","Appearances":"1","No":"14","Country":"Netherlands","Club Country":"Netherlands","Club":"Feyenoord","Weighted Degree":"22.0","Modularity Class":"22","Date of birth / Age":"14 February 1994 (aged 20)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3088235294117647"},"color":"rgb(197,67,229)","size":10.0},{"label":"Fabian Johnson","x":879.2975463867188,"y":-1453.8760986328125,"id":"213","attributes":{"Eigenvector Centrality":"0.28349810265891734","Betweenness Centrality":"0.002395894042282543","Appearances":"22","No":"23","Country":"United States","Club Country":"Germany","Club":"1899 Hoffenheim","Weighted Degree":"23.0","Modularity Class":"26","Date of birth / Age":"11 December 1987 (aged 26)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2973300970873787"},"color":"rgb(100,229,67)","size":11.333333015441895},{"label":"Mehdi Mostefa","x":-1480.4698486328125,"y":1115.907470703125,"id":"494","attributes":{"Eigenvector Centrality":"0.30735480949810884","Betweenness Centrality":"0.001735065078748807","Appearances":"23","No":"22","Country":"Algeria","Club Country":"France","Club":"Ajaccio","Weighted Degree":"23.0","Modularity Class":"24","Date of birth / Age":"30 August 1983 (aged 30)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.29178245335450576"},"color":"rgb(67,164,229)","size":11.333333015441895},{"label":"Andrés Guardado","x":-1822.0682373046875,"y":449.0326232910156,"id":"49","attributes":{"Eigenvector Centrality":"0.2999622703453746","Betweenness Centrality":"0.009651872776145686","Appearances":"104","No":"18","Country":"Mexico","Club Country":"Germany","Club":"Bayer Leverkusen","Weighted Degree":"24.0","Modularity Class":"21","Date of birth / Age":"28 September 1986 (aged 27)","Degree":"24","Position":"DF","Eccentricity":"6.0","Closeness Centrality":"0.28982649842271296"},"color":"rgb(67,229,67)","size":12.666666984558105},{"label":"Maksim Kanunnikov","x":-1315.3818359375,"y":-1323.4705810546875,"id":"439","attributes":{"Eigenvector Centrality":"0.2784495406871368","Betweenness Centrality":"0.0019868644316807485","Appearances":"2","No":"6","Country":"Russia","Club Country":"Russia","Club":"Rubin Kazan","Weighted Degree":"23.0","Modularity Class":"2","Date of birth / Age":"14 July 1991 (aged 22)","Degree":"23","Position":"FW","Eccentricity":"6.0","Closeness Centrality":"0.256186824677588"},"color":"rgb(229,67,67)","size":11.333333015441895},{"label":"Edin Višca","x":1198.7845458984375,"y":-465.6673889160156,"id":"184","attributes":{"Eigenvector Centrality":"0.28396954172011374","Betweenness Centrality":"0.0","Appearances":"10","No":"19","Country":"Bosnia and Herzegovina","Club Country":"Turkey","Club":"?stanbul Ba?ak?ehir","Weighted Degree":"22.0","Modularity Class":"20","Date of birth / Age":"17 February 1990 (aged 24)","Degree":"22","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3077889447236181"},"color":"rgb(132,229,67)","size":10.0},{"label":"Pablo Armero","x":-854.2186889648438,"y":1249.3016357421875,"id":"554","attributes":{"Eigenvector Centrality":"0.31394925107891597","Betweenness Centrality":"0.0","Appearances":"53","No":"7","Country":"Colombia","Club Country":"England","Club":"West Ham United","Weighted Degree":"22.0","Modularity Class":"11","Date of birth / Age":"2 November 1986 (aged 27)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.29329608938547486"},"color":"rgb(67,67,229)","size":10.0},{"label":"Dario Vidošic","x":2016.283203125,"y":-666.3252563476562,"id":"148","attributes":{"Eigenvector Centrality":"0.22132294330055013","Betweenness Centrality":"0.0","Appearances":"23","No":"20","Country":"Australia","Club Country":"Switzerland","Club":"Sion","Weighted Degree":"22.0","Modularity Class":"12","Date of birth / Age":"8 April 1987 (aged 27)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.22025771651183698"},"color":"rgb(229,100,67)","size":10.0},{"label":"Theofanis Gekas","x":1527.901123046875,"y":552.6124267578125,"id":"674","attributes":{"Eigenvector Centrality":"0.27085145055391363","Betweenness Centrality":"0.002908370966594667","Appearances":"72","No":"17","Country":"Greece","Club Country":"Turkey","Club":"Konyaspor","Weighted Degree":"23.0","Modularity Class":"15","Date of birth / Age":"23 May 1980 (aged 34)","Degree":"23","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.2961321514907333"},"color":"rgb(229,67,100)","size":11.333333015441895},{"label":"Paul Aguilar","x":-2114.9287109375,"y":482.1558532714844,"id":"564","attributes":{"Eigenvector Centrality":"0.27712645238679473","Betweenness Centrality":"0.0","Appearances":"30","No":"22","Country":"Mexico","Club Country":"Mexico","Club":"América","Weighted Degree":"22.0","Modularity Class":"21","Date of birth / Age":"6 March 1986 (aged 28)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.2599929253625752"},"color":"rgb(67,229,67)","size":10.0},{"label":"Karim Benzema","x":-255.21575927734375,"y":-165.30316162109375,"id":"381","attributes":{"Eigenvector Centrality":"0.7424885429812043","Betweenness Centrality":"0.0035273454232103265","Appearances":"66","No":"10","Country":"France","Club Country":"Spain","Club":"Real Madrid","Weighted Degree":"32.0","Modularity Class":"16","Date of birth / Age":"19 December 1987 (aged 26)","Degree":"32","Position":"FW","Eccentricity":"6.0","Closeness Centrality":"0.33576975788031066"},"color":"rgb(229,67,229)","size":23.33333396911621},{"label":"Vedad Ibiševic","x":1011.349853515625,"y":-507.7367248535156,"id":"697","attributes":{"Eigenvector Centrality":"0.32601187536143794","Betweenness Centrality":"0.009130368482483735","Appearances":"55","No":"9","Country":"Bosnia and Herzegovina","Club Country":"Germany","Club":"VfB Stuttgart","Weighted Degree":"25.0","Modularity Class":"20","Date of birth / Age":"6 August 1984 (aged 29)","Degree":"25","Position":"FW","Eccentricity":"4.0","Closeness Centrality":"0.3321283325802079"},"color":"rgb(132,229,67)","size":14.0},{"label":"Jefferson Montero","x":-1599.2291259765625,"y":-622.9718627929688,"id":"324","attributes":{"Eigenvector Centrality":"0.37658875098697026","Betweenness Centrality":"0.0026941239537997667","Appearances":"40","No":"7","Country":"Ecuador","Club Country":"Mexico","Club":"Morelia","Weighted Degree":"23.0","Modularity Class":"4","Date of birth / Age":"1 September 1989 (aged 24)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.30110610405571486"},"color":"rgb(229,67,132)","size":11.333333015441895},{"label":"Marco Parolo","x":223.34402465820312,"y":798.16845703125,"id":"447","attributes":{"Eigenvector Centrality":"0.44952910121457834","Betweenness Centrality":"4.3533065978638123E-4","Appearances":"4","No":"18","Country":"Italy","Club Country":"Italy","Club":"Parma","Weighted Degree":"24.0","Modularity Class":"3","Date of birth / Age":"25 January 1985 (aged 29)","Degree":"24","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.30714584203928125"},"color":"rgb(197,229,67)","size":12.666666984558105},{"label":"José Rojas","x":-307.82147216796875,"y":1544.14697265625,"id":"362","attributes":{"Eigenvector Centrality":"0.316119262177923","Betweenness Centrality":"0.0","Appearances":"19","No":"13","Country":"Chile","Club Country":"Chile","Club":"Universidad de Chile","Weighted Degree":"22.0","Modularity Class":"18","Date of birth / Age":"3 June 1983 (aged 31)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.2737430167597765"},"color":"rgb(229,132,67)","size":10.0},{"label":"Thiago Motta","x":60.09503936767578,"y":671.3873291015625,"id":"675","attributes":{"Eigenvector Centrality":"0.5779444332967031","Betweenness Centrality":"0.001710601263663759","Appearances":"20","No":"5","Country":"Italy","Club Country":"France","Club":"Paris Saint-Germain","Weighted Degree":"29.0","Modularity Class":"3","Date of birth / Age":"28 August 1982 (aged 31)","Degree":"29","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3166738474795347"},"color":"rgb(197,229,67)","size":19.333332061767578},{"label":"Masahiko Inoha","x":730.9411010742188,"y":583.111083984375,"id":"465","attributes":{"Eigenvector Centrality":"0.3171815377783478","Betweenness Centrality":"0.0","Appearances":"21","No":"19","Country":"Japan","Club Country":"Japan","Club":"Jubilo Iwata","Weighted Degree":"22.0","Modularity Class":"27","Date of birth / Age":"28 August 1983 (aged 30)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3107822410147992"},"color":"rgb(67,100,229)","size":10.0},{"label":"Dani Alves","x":-742.1677856445312,"y":-271.697998046875,"id":"135","attributes":{"Eigenvector Centrality":"0.947563971570452","Betweenness Centrality":"0.005368122690024312","Appearances":"75","No":"2","Country":"Brazil","Club Country":"Spain","Club":"Barcelona","Weighted Degree":"36.0","Modularity Class":"23","Date of birth / Age":"6 May 1983 (aged 31)","Degree":"36","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.34249767008387694"},"color":"rgb(229,67,197)","size":28.66666603088379},{"label":"Ryan McGowan","x":2185.520263671875,"y":-671.7802124023438,"id":"620","attributes":{"Eigenvector Centrality":"0.22132294330055013","Betweenness Centrality":"0.0","Appearances":"9","No":"19","Country":"Australia","Club Country":"China","Club":"Shandong Luneng Taishan","Weighted Degree":"22.0","Modularity Class":"12","Date of birth / Age":"15 August 1989 (aged 24)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.22025771651183698"},"color":"rgb(229,100,67)","size":10.0},{"label":"Lee Yong","x":1208.6063232421875,"y":1598.1090087890625,"id":"414","attributes":{"Eigenvector Centrality":"0.23152559498868786","Betweenness Centrality":"0.0","Appearances":"12","No":"12","Country":"South Korea","Club Country":"South Korea","Club":"Ulsan Hyundai","Weighted Degree":"22.0","Modularity Class":"10","Date of birth / Age":"24 December 1986 (aged 27)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.24614869390488947"},"color":"rgb(229,67,164)","size":10.0},{"label":"Antonio Candreva","x":180.96414184570312,"y":574.769287109375,"id":"58","attributes":{"Eigenvector Centrality":"0.5275205103981985","Betweenness Centrality":"0.00895640114460652","Appearances":"20","No":"6","Country":"Italy","Club Country":"Italy","Club":"Lazio","Weighted Degree":"28.0","Modularity Class":"3","Date of birth / Age":"28 February 1987 (aged 27)","Degree":"28","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.33424283765347884"},"color":"rgb(197,229,67)","size":18.0},{"label":"Walter Gargano","x":-40.0959358215332,"y":145.01853942871094,"id":"711","attributes":{"Eigenvector Centrality":"0.4378381017420734","Betweenness Centrality":"0.0029785823951134294","Appearances":"63","No":"5","Country":"Uruguay","Club Country":"Italy","Club":"Parma","Weighted Degree":"26.0","Modularity Class":"6","Date of birth / Age":"23 July 1984 (aged 29)","Degree":"26","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3204010462074978"},"color":"rgb(229,197,67)","size":15.333333969116211},{"label":"Steven Defour","x":-855.4899291992188,"y":-553.7450561523438,"id":"667","attributes":{"Eigenvector Centrality":"0.6646783589767196","Betweenness Centrality":"0.008614529247819509","Appearances":"43","No":"16","Country":"Belgium","Club Country":"Portugal","Club":"Porto","Weighted Degree":"30.0","Modularity Class":"28","Date of birth / Age":"15 April 1988 (aged 26)","Degree":"30","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.35083532219570407"},"color":"rgb(67,229,132)","size":20.666667938232422},{"label":"Maxi Rodríguez","x":-1193.765625,"y":294.735595703125,"id":"487","attributes":{"Eigenvector Centrality":"0.47565077145164436","Betweenness Centrality":"0.0","Appearances":"55","No":"11","Country":"Argentina","Club Country":"Argentina","Club":"Newell\u0027s Old Boys","Weighted Degree":"22.0","Modularity Class":"19","Date of birth / Age":"2 January 1981 (aged 33)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2930622009569378"},"color":"rgb(67,229,229)","size":10.0},{"label":"Tranquillo Barnetta","x":73.72463989257812,"y":117.78337097167969,"id":"690","attributes":{"Eigenvector Centrality":"0.3971021212364907","Betweenness Centrality":"9.117937878248679E-4","Appearances":"74","No":"7","Country":"Switzerland","Club Country":"Germany","Club":"Eintracht Frankfurt","Weighted Degree":"23.0","Modularity Class":"0","Date of birth / Age":"22 May 1985 (aged 29)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3053593685085168"},"color":"rgb(164,229,67)","size":11.333333015441895},{"label":"Constant Djakpa","x":513.1433715820312,"y":-809.9959106445312,"id":"127","attributes":{"Eigenvector Centrality":"0.32415574535906994","Betweenness Centrality":"8.776465884449839E-4","Appearances":"5","No":"18","Country":"Ivory Coast","Club Country":"Germany","Club":"Eintracht Frankfurt","Weighted Degree":"23.0","Modularity Class":"9","Date of birth / Age":"17 October 1986 (aged 27)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.30523255813953487"},"color":"rgb(164,67,229)","size":11.333333015441895},{"label":"Carlos Carbonero","x":-742.2178344726562,"y":1199.126220703125,"id":"100","attributes":{"Eigenvector Centrality":"0.3139492510789159","Betweenness Centrality":"0.0","Appearances":"1","No":"5","Country":"Colombia","Club Country":"Argentina","Club":"River Plate","Weighted Degree":"22.0","Modularity Class":"11","Date of birth / Age":"25 July 1990 (aged 23)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.29329608938547486"},"color":"rgb(67,67,229)","size":10.0},{"label":"Thiago Silva (c)","x":-361.4657287597656,"y":-169.6861114501953,"id":"676","attributes":{"Eigenvector Centrality":"0.7136149540335622","Betweenness Centrality":"0.0035076449501830744","Appearances":"46","No":"3","Country":"Brazil","Club Country":"France","Club":"Paris Saint-Germain","Weighted Degree":"30.0","Modularity Class":"23","Date of birth / Age":"22 September 1984 (aged 29)","Degree":"30","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3336359509759419"},"color":"rgb(229,67,197)","size":20.666667938232422},{"label":"Miroslav Klose","x":293.1423645019531,"y":-267.2074890136719,"id":"517","attributes":{"Eigenvector Centrality":"0.5811899312198234","Betweenness Centrality":"0.010562454139187511","Appearances":"132","No":"11","Country":"Germany","Club Country":"Italy","Club":"Lazio","Weighted Degree":"28.0","Modularity Class":"13","Date of birth / Age":"9 June 1978 (aged 36)","Degree":"28","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.33746556473829203"},"color":"rgb(67,229,164)","size":18.0},{"label":"Xherdan Shaqiri","x":141.72509765625,"y":12.289528846740723,"id":"721","attributes":{"Eigenvector Centrality":"0.7024966189465659","Betweenness Centrality":"0.009639109401232904","Appearances":"33","No":"23","Country":"Switzerland","Club Country":"Germany","Club":"Bayern Munich","Weighted Degree":"35.0","Modularity Class":"0","Date of birth / Age":"10 October 1991 (aged 22)","Degree":"35","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3383977900552486"},"color":"rgb(164,229,67)","size":27.33333396911621},{"label":"Roman Weidenfeller","x":605.18408203125,"y":-360.4881896972656,"id":"611","attributes":{"Eigenvector Centrality":"0.5006809860242267","Betweenness Centrality":"0.008472576600609625","Appearances":"3","No":"22","Country":"Germany","Club Country":"Germany","Club":"Borussia Dortmund","Weighted Degree":"24.0","Modularity Class":"13","Date of birth / Age":"6 August 1980 (aged 33)","Degree":"24","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.310126582278481"},"color":"rgb(67,229,164)","size":12.666666984558105},{"label":"Javier Mascherano","x":-1221.532470703125,"y":91.2391586303711,"id":"319","attributes":{"Eigenvector Centrality":"0.884141666517999","Betweenness Centrality":"0.004626645517321425","Appearances":"98","No":"14","Country":"Argentina","Club Country":"Spain","Club":"Barcelona","Weighted Degree":"36.0","Modularity Class":"19","Date of birth / Age":"8 June 1984 (aged 30)","Degree":"36","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3273942093541203"},"color":"rgb(67,229,229)","size":28.66666603088379},{"label":"Carlos Carmona","x":-345.68072509765625,"y":1473.065185546875,"id":"101","attributes":{"Eigenvector Centrality":"0.3286711953683635","Betweenness Centrality":"0.0016022418362757356","Appearances":"44","No":"6","Country":"Chile","Club Country":"Italy","Club":"Atalanta","Weighted Degree":"23.0","Modularity Class":"18","Date of birth / Age":"21 February 1987 (aged 27)","Degree":"23","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.2854368932038835"},"color":"rgb(229,132,67)","size":11.333333015441895},{"label":"Liassine Cadamuro-Bentaïba","x":-1424.95849609375,"y":1185.5799560546875,"id":"418","attributes":{"Eigenvector Centrality":"0.29589355686287977","Betweenness Centrality":"0.0","Appearances":"7","No":"17","Country":"Algeria","Club Country":"Spain","Club":"Mallorca","Weighted Degree":"22.0","Modularity Class":"24","Date of birth / Age":"5 March 1988 (aged 26)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.28389339513325607"},"color":"rgb(67,164,229)","size":10.0},{"label":"Alex Oxlade-Chamberlain","x":-56.5023193359375,"y":-825.344482421875,"id":"27","attributes":{"Eigenvector Centrality":"0.706323984260769","Betweenness Centrality":"0.001711566637513174","Appearances":"15","No":"15","Country":"England","Club Country":"England","Club":"Arsenal","Weighted Degree":"30.0","Modularity Class":"28","Date of birth / Age":"15 August 1993 (aged 20)","Degree":"30","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3199825859817153"},"color":"rgb(67,229,132)","size":20.666667938232422},{"label":"Jalal Hosseini","x":2076.03515625,"y":1075.61083984375,"id":"306","attributes":{"Eigenvector Centrality":"0.2127442934422965","Betweenness Centrality":"0.0","Appearances":"85","No":"4","Country":"Iran","Club Country":"Iran","Club":"Persepolis","Weighted Degree":"22.0","Modularity Class":"1","Date of birth / Age":"3 February 1982 (aged 32)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.206809229037704"},"color":"rgb(67,197,229)","size":10.0},{"label":"Johnny Herrera","x":-225.40228271484375,"y":1509.60302734375,"id":"344","attributes":{"Eigenvector Centrality":"0.316119262177923","Betweenness Centrality":"0.0","Appearances":"8","No":"23","Country":"Chile","Club Country":"Chile","Club":"Universidad de Chile","Weighted Degree":"22.0","Modularity Class":"18","Date of birth / Age":"9 May 1981 (aged 33)","Degree":"22","Position":"GK","Eccentricity":"7.0","Closeness Centrality":"0.2737430167597765"},"color":"rgb(229,132,67)","size":10.0},{"label":"Rafik Halliche","x":-1426.09912109375,"y":1266.290771484375,"id":"582","attributes":{"Eigenvector Centrality":"0.29589355686287977","Betweenness Centrality":"0.0","Appearances":"29","No":"5","Country":"Algeria","Club Country":"Portugal","Club":"Académica","Weighted Degree":"22.0","Modularity Class":"24","Date of birth / Age":"2 September 1986 (aged 27)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.28389339513325607"},"color":"rgb(67,164,229)","size":10.0},{"label":"Kim Seung-gyu","x":1189.895751953125,"y":1559.8544921875,"id":"393","attributes":{"Eigenvector Centrality":"0.23152559498868777","Betweenness Centrality":"0.0","Appearances":"5","No":"21","Country":"South Korea","Club Country":"South Korea","Club":"Ulsan Hyundai","Weighted Degree":"22.0","Modularity Class":"10","Date of birth / Age":"30 September 1990 (aged 23)","Degree":"22","Position":"GK","Eccentricity":"7.0","Closeness Centrality":"0.24614869390488947"},"color":"rgb(229,67,164)","size":10.0},{"label":"William Carvalho","x":-772.361083984375,"y":375.0953674316406,"id":"716","attributes":{"Eigenvector Centrality":"0.4410475661612916","Betweenness Centrality":"0.001075874410151188","Appearances":"4","No":"6","Country":"Portugal","Club Country":"Portugal","Club":"Sporting CP","Weighted Degree":"24.0","Modularity Class":"8","Date of birth / Age":"7 April 1992 (aged 22)","Degree":"24","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3185955786736021"},"color":"rgb(229,164,67)","size":12.666666984558105},{"label":"Gabriel Paletta","x":206.93821716308594,"y":845.000732421875,"id":"237","attributes":{"Eigenvector Centrality":"0.4495291012145782","Betweenness Centrality":"4.3533065978638123E-4","Appearances":"2","No":"20","Country":"Italy","Club Country":"Italy","Club":"Parma","Weighted Degree":"24.0","Modularity Class":"3","Date of birth / Age":"15 February 1986 (aged 28)","Degree":"24","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.30714584203928125"},"color":"rgb(197,229,67)","size":12.666666984558105},{"label":"Keylor Navas","x":2179.6376953125,"y":330.6126708984375,"id":"388","attributes":{"Eigenvector Centrality":"0.24591596591658982","Betweenness Centrality":"0.0020809246802811297","Appearances":"53","No":"1","Country":"Costa Rica","Club Country":"Spain","Club":"Levante","Weighted Degree":"23.0","Modularity Class":"29","Date of birth / Age":"15 December 1986 (aged 27)","Degree":"23","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.26844411979547117"},"color":"rgb(229,229,67)","size":11.333333015441895},{"label":"Martín Silva","x":-0.6348667740821838,"y":1.9825427532196045,"id":"463","attributes":{"Eigenvector Centrality":"0.37564528732258246","Betweenness Centrality":"0.0","Appearances":"4","No":"23","Country":"Uruguay","Club Country":"Brazil","Club":"Vasco da Gama","Weighted Degree":"22.0","Modularity Class":"6","Date of birth / Age":"25 March 1983 (aged 31)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3121019108280255"},"color":"rgb(229,197,67)","size":10.0},{"label":"Mathieu Valbuena","x":44.39426040649414,"y":-119.34598541259766,"id":"473","attributes":{"Eigenvector Centrality":"0.5095573508334031","Betweenness Centrality":"0.0046278408281149215","Appearances":"34","No":"8","Country":"France","Club Country":"France","Club":"Marseille","Weighted Degree":"24.0","Modularity Class":"16","Date of birth / Age":"28 September 1984 (aged 29)","Degree":"24","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.3247901016349978"},"color":"rgb(229,67,229)","size":12.666666984558105},{"label":"Ante Rebic","x":-308.12176513671875,"y":744.3989868164062,"id":"55","attributes":{"Eigenvector Centrality":"0.37367251459016204","Betweenness Centrality":"0.002289273069692677","Appearances":"5","No":"16","Country":"Croatia","Club Country":"Italy","Club":"Fiorentina","Weighted Degree":"24.0","Modularity Class":"25","Date of birth / Age":"21 September 1993 (aged 20)","Degree":"24","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3125"},"color":"rgb(132,67,229)","size":12.666666984558105},{"label":"Danijel Pranjic","x":-193.00035095214844,"y":612.0997924804688,"id":"142","attributes":{"Eigenvector Centrality":"0.35596191653510817","Betweenness Centrality":"0.00248185018192758","Appearances":"50","No":"3","Country":"Croatia","Club Country":"Greece","Club":"Panathinaikos","Weighted Degree":"23.0","Modularity Class":"25","Date of birth / Age":"2 December 1981 (aged 32)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.30676126878130217"},"color":"rgb(132,67,229)","size":11.333333015441895},{"label":"Andrey Yeshchenko","x":-1412.1168212890625,"y":-1477.236083984375,"id":"51","attributes":{"Eigenvector Centrality":"0.2656930429181982","Betweenness Centrality":"0.0","Appearances":"12","No":"22","Country":"Russia","Club Country":"Russia","Club":"Anzhi Makhachkala","Weighted Degree":"22.0","Modularity Class":"2","Date of birth / Age":"9 February 1984 (aged 30)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.23244781783681215"},"color":"rgb(229,67,67)","size":10.0},{"label":"Atsuto Uchida","x":789.1749877929688,"y":479.1142272949219,"id":"69","attributes":{"Eigenvector Centrality":"0.4182713819100073","Betweenness Centrality":"0.00731168207978959","Appearances":"68","No":"2","Country":"Japan","Club Country":"Germany","Club":"Schalke \u002704","Weighted Degree":"28.0","Modularity Class":"27","Date of birth / Age":"27 March 1988 (aged 26)","Degree":"28","Position":"DF","Eccentricity":"4.0","Closeness Centrality":"0.34329752452125173"},"color":"rgb(67,100,229)","size":18.0},{"label":"Thibaut Courtois","x":-784.1881713867188,"y":-694.4415893554688,"id":"677","attributes":{"Eigenvector Centrality":"0.6799862056462357","Betweenness Centrality":"0.0018763771735177332","Appearances":"17","No":"1","Country":"Belgium","Club Country":"Spain","Club":"Atlético Madrid","Weighted Degree":"29.0","Modularity Class":"28","Date of birth / Age":"11 May 1992 (aged 22)","Degree":"29","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3313796212804328"},"color":"rgb(67,229,132)","size":19.333332061767578},{"label":"John Boye","x":493.59832763671875,"y":1298.4100341796875,"id":"340","attributes":{"Eigenvector Centrality":"0.30301525489271036","Betweenness Centrality":"0.0013356812076157393","Appearances":"30","No":"21","Country":"Ghana","Club Country":"France","Club":"Rennes","Weighted Degree":"23.0","Modularity Class":"5","Date of birth / Age":"23 April 1987 (aged 27)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2984165651644336"},"color":"rgb(67,229,197)","size":11.333333015441895},{"label":"Lionel Messi (c)","x":-1133.2008056640625,"y":55.981807708740234,"id":"419","attributes":{"Eigenvector Centrality":"0.884141666517999","Betweenness Centrality":"0.004626645517321425","Appearances":"86","No":"10","Country":"Argentina","Club Country":"Spain","Club":"Barcelona","Weighted Degree":"36.0","Modularity Class":"19","Date of birth / Age":"24 June 1987 (aged 26)","Degree":"36","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3273942093541203"},"color":"rgb(67,229,229)","size":28.66666603088379},{"label":"Mathieu Debuchy","x":14.882935523986816,"y":-313.2035827636719,"id":"472","attributes":{"Eigenvector Centrality":"0.5292224497836601","Betweenness Centrality":"0.0019647591823339743","Appearances":"21","No":"2","Country":"France","Club Country":"England","Club":"Newcastle United","Weighted Degree":"25.0","Modularity Class":"16","Date of birth / Age":"28 July 1985 (aged 28)","Degree":"25","Position":"DF","Eccentricity":"6.0","Closeness Centrality":"0.3315290933694181"},"color":"rgb(229,67,229)","size":14.0},{"label":"Blaise Matuidi","x":-108.93384552001953,"y":-90.56800842285156,"id":"87","attributes":{"Eigenvector Centrality":"0.6370473545952838","Betweenness Centrality":"0.001865102966313942","Appearances":"23","No":"14","Country":"France","Club Country":"France","Club":"Paris Saint-Germain","Weighted Degree":"29.0","Modularity Class":"16","Date of birth / Age":"9 April 1987 (aged 27)","Degree":"29","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.3253652058432935"},"color":"rgb(229,67,229)","size":19.333332061767578},{"label":"Lorenzo Insigne","x":-68.64961242675781,"y":680.9847412109375,"id":"422","attributes":{"Eigenvector Centrality":"0.6915881955717977","Betweenness Centrality":"0.008719166745740005","Appearances":"5","No":"22","Country":"Italy","Club Country":"Italy","Club":"Napoli","Weighted Degree":"33.0","Modularity Class":"3","Date of birth / Age":"4 June 1991 (aged 23)","Degree":"33","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3322784810126582"},"color":"rgb(197,229,67)","size":24.666667938232422},{"label":"Diego Calvo","x":2308.55810546875,"y":341.5826416015625,"id":"163","attributes":{"Eigenvector Centrality":"0.2349694476086638","Betweenness Centrality":"0.0","Appearances":"10","No":"20","Country":"Costa Rica","Club Country":"Norway","Club":"Vålerenga","Weighted Degree":"22.0","Modularity Class":"29","Date of birth / Age":"25 March 1991 (aged 23)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2515400410677618"},"color":"rgb(229,229,67)","size":10.0},{"label":"Hiroshi Kiyotake","x":729.6253662109375,"y":516.7271728515625,"id":"282","attributes":{"Eigenvector Centrality":"0.34512034913799255","Betweenness Centrality":"0.003186055679065411","Appearances":"25","No":"8","Country":"Japan","Club Country":"Germany","Club":"1. FC Nürnberg","Weighted Degree":"24.0","Modularity Class":"27","Date of birth / Age":"12 November 1989 (aged 24)","Degree":"24","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3237885462555066"},"color":"rgb(67,100,229)","size":12.666666984558105},{"label":"Renato Ibarra","x":-1613.8062744140625,"y":-545.0514526367188,"id":"595","attributes":{"Eigenvector Centrality":"0.3742367393926188","Betweenness Centrality":"0.003419150984977221","Appearances":"18","No":"5","Country":"Ecuador","Club Country":"Netherlands","Club":"Vitesse","Weighted Degree":"23.0","Modularity Class":"4","Date of birth / Age":"20 January 1991 (aged 23)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3"},"color":"rgb(229,67,132)","size":11.333333015441895},{"label":"Miralem Pjanic","x":1103.220947265625,"y":-385.4655456542969,"id":"516","attributes":{"Eigenvector Centrality":"0.3489363879046361","Betweenness Centrality":"0.008708846173341396","Appearances":"48","No":"8","Country":"Bosnia and Herzegovina","Club Country":"Italy","Club":"Roma","Weighted Degree":"26.0","Modularity Class":"20","Date of birth / Age":"2 April 1990 (aged 24)","Degree":"26","Position":"MF","Eccentricity":"4.0","Closeness Centrality":"0.3385536619069553"},"color":"rgb(132,229,67)","size":15.333333969116211},{"label":"Charles Aránguiz","x":-251.59664916992188,"y":1476.45458984375,"id":"112","attributes":{"Eigenvector Centrality":"0.316119262177923","Betweenness Centrality":"0.0","Appearances":"21","No":"20","Country":"Chile","Club Country":"Brazil","Club":"Internacional","Weighted Degree":"22.0","Modularity Class":"18","Date of birth / Age":"17 April 1989 (aged 25)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.2737430167597765"},"color":"rgb(229,132,67)","size":10.0},{"label":"César Azpilicueta","x":-780.8587646484375,"y":-518.6594848632812,"id":"110","attributes":{"Eigenvector Centrality":"0.9333483233206638","Betweenness Centrality":"0.002581134642452991","Appearances":"6","No":"22","Country":"Spain","Club Country":"England","Club":"Chelsea","Weighted Degree":"32.0","Modularity Class":"23","Date of birth / Age":"28 August 1989 (aged 24)","Degree":"32","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.34186046511627904"},"color":"rgb(229,67,197)","size":23.33333396911621},{"label":"Rémy Cabella","x":-28.49822998046875,"y":-252.28802490234375,"id":"594","attributes":{"Eigenvector Centrality":"0.48363975992492747","Betweenness Centrality":"0.0","Appearances":"1","No":"7","Country":"France","Club Country":"France","Club":"Montpellier","Weighted Degree":"22.0","Modularity Class":"16","Date of birth / Age":"8 March 1990 (aged 24)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.3037190082644628"},"color":"rgb(229,67,229)","size":10.0},{"label":"Aleksei Ionov","x":-1428.007080078125,"y":-1427.2176513671875,"id":"24","attributes":{"Eigenvector Centrality":"0.2816622746350613","Betweenness Centrality":"6.368705012250895E-4","Appearances":"5","No":"21","Country":"Russia","Club Country":"Russia","Club":"Dynamo Moscow","Weighted Degree":"23.0","Modularity Class":"2","Date of birth / Age":"18 February 1989 (aged 25)","Degree":"23","Position":"FW","Eccentricity":"6.0","Closeness Centrality":"0.25538568450312715"},"color":"rgb(229,67,67)","size":11.333333015441895},{"label":"Vieirinha","x":-584.5398559570312,"y":300.7301940917969,"id":"703","attributes":{"Eigenvector Centrality":"0.5206064074642943","Betweenness Centrality":"0.0029301281450007945","Appearances":"9","No":"10","Country":"Portugal","Club Country":"Germany","Club":"VfL Wolfsburg","Weighted Degree":"28.0","Modularity Class":"8","Date of birth / Age":"24 January 1986 (aged 28)","Degree":"28","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.32565352237483386"},"color":"rgb(229,164,67)","size":18.0},{"label":"Joel Campbell","x":2111.1640625,"y":365.17755126953125,"id":"336","attributes":{"Eigenvector Centrality":"0.2789506377156212","Betweenness Centrality":"0.00832814736706791","Appearances":"33","No":"9","Country":"Costa Rica","Club Country":"Greece","Club":"Olympiacos","Weighted Degree":"26.0","Modularity Class":"29","Date of birth / Age":"26 June 1992 (aged 21)","Degree":"26","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.2687385740402194"},"color":"rgb(229,229,67)","size":15.333333969116211},{"label":"Carlos Salcido","x":-2011.8602294921875,"y":347.6936340332031,"id":"104","attributes":{"Eigenvector Centrality":"0.2771264523867947","Betweenness Centrality":"0.0","Appearances":"122","No":"3","Country":"Mexico","Club Country":"Mexico","Club":"UANL","Weighted Degree":"22.0","Modularity Class":"21","Date of birth / Age":"2 April 1980 (aged 34)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.2599929253625752"},"color":"rgb(67,229,67)","size":10.0},{"label":"Mathew Ryan","x":2056.780517578125,"y":-519.5844116210938,"id":"471","attributes":{"Eigenvector Centrality":"0.2315995769978225","Betweenness Centrality":"0.0038336165219305914","Appearances":"7","No":"1","Country":"Australia","Club Country":"Belgium","Club":"Club Brugge","Weighted Degree":"23.0","Modularity Class":"12","Date of birth / Age":"8 April 1992 (aged 22)","Degree":"23","Position":"GK","Eccentricity":"6.0","Closeness Centrality":"0.23535062439961577"},"color":"rgb(229,100,67)","size":11.333333015441895},{"label":"Samuel Inkoom","x":406.61175537109375,"y":1441.41943359375,"id":"628","attributes":{"Eigenvector Centrality":"0.29027436907278803","Betweenness Centrality":"0.0","Appearances":"46","No":"2","Country":"Ghana","Club Country":"Greece","Club":"Platanias","Weighted Degree":"22.0","Modularity Class":"5","Date of birth / Age":"1 June 1989 (aged 25)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2849941837921675"},"color":"rgb(67,229,197)","size":10.0},{"label":"Granit Xhaka","x":60.45975875854492,"y":205.4804229736328,"id":"266","attributes":{"Eigenvector Centrality":"0.4016189697530195","Betweenness Centrality":"6.451424399991758E-4","Appearances":"26","No":"10","Country":"Switzerland","Club Country":"Germany","Club":"Borussia Mönchengladbach","Weighted Degree":"23.0","Modularity Class":"0","Date of birth / Age":"27 September 1992 (aged 21)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.30222039473684215"},"color":"rgb(164,229,67)","size":11.333333015441895},{"label":"Carl Medjani","x":-1275.965087890625,"y":1205.1011962890625,"id":"97","attributes":{"Eigenvector Centrality":"0.30778242364802144","Betweenness Centrality":"0.002125132721118146","Appearances":"26","No":"12","Country":"Algeria","Club Country":"France","Club":"Valenciennes","Weighted Degree":"23.0","Modularity Class":"24","Date of birth / Age":"15 May 1985 (aged 29)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2980535279805353"},"color":"rgb(67,164,229)","size":11.333333015441895},{"label":"Ramon Azeez","x":-83.1539077758789,"y":-1703.900634765625,"id":"587","attributes":{"Eigenvector Centrality":"0.30581490023520397","Betweenness Centrality":"0.0","Appearances":"2","No":"15","Country":"Nigeria","Club Country":"Spain","Club":"Almería","Weighted Degree":"22.0","Modularity Class":"14","Date of birth / Age":"12 December 1992 (aged 21)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.28800940438871475"},"color":"rgb(67,229,100)","size":10.0},{"label":"Didier Zokora","x":526.2356567382812,"y":-881.0933227539062,"id":"161","attributes":{"Eigenvector Centrality":"0.30966117600400694","Betweenness Centrality":"0.0","Appearances":"119","No":"5","Country":"Ivory Coast","Club Country":"Turkey","Club":"Trabzonspor","Weighted Degree":"22.0","Modularity Class":"9","Date of birth / Age":"14 December 1980 (aged 33)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2929453965723396"},"color":"rgb(164,67,229)","size":10.0},{"label":"Yasuyuki Konno","x":772.3632202148438,"y":672.5744018554688,"id":"725","attributes":{"Eigenvector Centrality":"0.31718153777834784","Betweenness Centrality":"0.0","Appearances":"81","No":"15","Country":"Japan","Club Country":"Japan","Club":"Gamba Osaka","Weighted Degree":"22.0","Modularity Class":"27","Date of birth / Age":"25 January 1983 (aged 31)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3107822410147992"},"color":"rgb(67,100,229)","size":10.0},{"label":"Phil Jagielka","x":-210.36138916015625,"y":-1046.0340576171875,"id":"575","attributes":{"Eigenvector Centrality":"0.5738583419916762","Betweenness Centrality":"0.0013664563333722465","Appearances":"26","No":"6","Country":"England","Club Country":"England","Club":"Everton","Weighted Degree":"25.0","Modularity Class":"28","Date of birth / Age":"17 August 1982 (aged 31)","Degree":"25","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.31183708103521424"},"color":"rgb(67,229,132)","size":14.0},{"label":"Michael Uchebo","x":-95.68781280517578,"y":-1656.3585205078125,"id":"505","attributes":{"Eigenvector Centrality":"0.30581490023520397","Betweenness Centrality":"0.0","Appearances":"4","No":"20","Country":"Nigeria","Club Country":"Belgium","Club":"Cercle Brugge","Weighted Degree":"22.0","Modularity Class":"14","Date of birth / Age":"2 February 1990 (aged 24)","Degree":"22","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.28800940438871475"},"color":"rgb(67,229,100)","size":10.0},{"label":"Andreas Samaris","x":1692.9754638671875,"y":475.92816162109375,"id":"47","attributes":{"Eigenvector Centrality":"0.2697590097502519","Betweenness Centrality":"0.0018881692306353887","Appearances":"4","No":"22","Country":"Greece","Club Country":"Greece","Club":"Olympiacos","Weighted Degree":"23.0","Modularity Class":"15","Date of birth / Age":"13 June 1989 (aged 24)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2878965922444183"},"color":"rgb(229,67,100)","size":11.333333015441895},{"label":"Emmanuel Agyemang-Badu","x":311.23797607421875,"y":1367.975341796875,"id":"199","attributes":{"Eigenvector Centrality":"0.30228653977349984","Betweenness Centrality":"0.002131225990650736","Appearances":"49","No":"8","Country":"Ghana","Club Country":"Italy","Club":"Udinese","Weighted Degree":"23.0","Modularity Class":"5","Date of birth / Age":"2 December 1990 (aged 23)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.29708973322554566"},"color":"rgb(67,229,197)","size":11.333333015441895},{"label":"Michael Lang","x":29.4794864654541,"y":282.8443908691406,"id":"504","attributes":{"Eigenvector Centrality":"0.3846161602156529","Betweenness Centrality":"0.0","Appearances":"6","No":"6","Country":"Switzerland","Club Country":"Switzerland","Club":"Grasshopper","Weighted Degree":"22.0","Modularity Class":"0","Date of birth / Age":"8 February 1991 (aged 23)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2922465208747515"},"color":"rgb(164,229,67)","size":10.0},{"label":"Shuichi Gonda","x":757.8242797851562,"y":624.099853515625,"id":"650","attributes":{"Eigenvector Centrality":"0.31718153777834773","Betweenness Centrality":"0.0","Appearances":"2","No":"23","Country":"Japan","Club Country":"Japan","Club":"F.C. Tokyo","Weighted Degree":"22.0","Modularity Class":"27","Date of birth / Age":"3 March 1989 (aged 25)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3107822410147992"},"color":"rgb(67,100,229)","size":10.0},{"label":"Celso Borges","x":2214.53955078125,"y":283.7978820800781,"id":"109","attributes":{"Eigenvector Centrality":"0.2349694476086638","Betweenness Centrality":"0.0","Appearances":"63","No":"5","Country":"Costa Rica","Club Country":"Sweden","Club":"AIK","Weighted Degree":"22.0","Modularity Class":"29","Date of birth / Age":"27 May 1988 (aged 26)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2515400410677618"},"color":"rgb(229,229,67)","size":10.0},{"label":"Javi Martínez","x":-549.7433471679688,"y":-388.08502197265625,"id":"316","attributes":{"Eigenvector Centrality":"0.9931923382141185","Betweenness Centrality":"0.008269325861106165","Appearances":"17","No":"4","Country":"Spain","Club Country":"Germany","Club":"Bayern Munich","Weighted Degree":"35.0","Modularity Class":"23","Date of birth / Age":"2 September 1988 (aged 25)","Degree":"35","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.34653465346534656"},"color":"rgb(229,67,197)","size":27.33333396911621},{"label":"Sylvain Gbohouo","x":531.5452880859375,"y":-936.862060546875,"id":"671","attributes":{"Eigenvector Centrality":"0.30966117600400694","Betweenness Centrality":"0.0","Appearances":"2","No":"16","Country":"Ivory Coast","Club Country":"Ivory Coast","Club":"Séwé Sport","Weighted Degree":"22.0","Modularity Class":"9","Date of birth / Age":"29 October 1988 (aged 25)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.2929453965723396"},"color":"rgb(164,67,229)","size":10.0},{"label":"Sead Kolašinac","x":1107.5244140625,"y":-303.2990417480469,"id":"633","attributes":{"Eigenvector Centrality":"0.3859570622009839","Betweenness Centrality":"0.013926412977704486","Appearances":"4","No":"5","Country":"Bosnia and Herzegovina","Club Country":"Germany","Club":"Schalke \u002704","Weighted Degree":"28.0","Modularity Class":"20","Date of birth / Age":"20 June 1993 (aged 20)","Degree":"28","Position":"DF","Eccentricity":"4.0","Closeness Centrality":"0.34090909090909094"},"color":"rgb(132,229,67)","size":18.0},{"label":"Vangelis Moras","x":1602.7227783203125,"y":488.2573547363281,"id":"694","attributes":{"Eigenvector Centrality":"0.25813336963416805","Betweenness Centrality":"0.0","Appearances":"19","No":"5","Country":"Greece","Club Country":"Italy","Club":"Verona","Weighted Degree":"22.0","Modularity Class":"15","Date of birth / Age":"26 August 1981 (aged 32)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2760045061960195"},"color":"rgb(229,67,100)","size":10.0},{"label":"Mesut Özil","x":266.2100524902344,"y":-466.7005310058594,"id":"498","attributes":{"Eigenvector Centrality":"0.6437896004097903","Betweenness Centrality":"0.002673471053911242","Appearances":"55","No":"8","Country":"Germany","Club Country":"England","Club":"Arsenal","Weighted Degree":"29.0","Modularity Class":"13","Date of birth / Age":"15 October 1988 (aged 25)","Degree":"29","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3219448094612352"},"color":"rgb(67,229,164)","size":19.333332061767578},{"label":"Daniel Cambronero","x":2228.9765625,"y":327.57440185546875,"id":"136","attributes":{"Eigenvector Centrality":"0.2349694476086638","Betweenness Centrality":"0.0","Appearances":"4","No":"23","Country":"Costa Rica","Club Country":"Costa Rica","Club":"Herediano","Weighted Degree":"22.0","Modularity Class":"29","Date of birth / Age":"8 January 1986 (aged 28)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.2515400410677618"},"color":"rgb(229,229,67)","size":10.0},{"label":"Alberto Aquilani","x":51.16946029663086,"y":883.6702880859375,"id":"19","attributes":{"Eigenvector Centrality":"0.446913802610424","Betweenness Centrality":"0.00214616718692594","Appearances":"35","No":"14","Country":"Italy","Club Country":"Italy","Club":"Fiorentina","Weighted Degree":"24.0","Modularity Class":"3","Date of birth / Age":"7 July 1984 (aged 29)","Degree":"24","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.310126582278481"},"color":"rgb(197,229,67)","size":12.666666984558105},{"label":"Matthew Špiranovic","x":2061.166748046875,"y":-656.2603149414062,"id":"479","attributes":{"Eigenvector Centrality":"0.2213229433005502","Betweenness Centrality":"0.0","Appearances":"18","No":"6","Country":"Australia","Club Country":"Australia","Club":"Western Sydney Wanderers","Weighted Degree":"22.0","Modularity Class":"12","Date of birth / Age":"27 June 1988 (aged 25)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.22025771651183698"},"color":"rgb(229,100,67)","size":10.0},{"label":"Thomas Müller","x":396.2323913574219,"y":-434.3363952636719,"id":"678","attributes":{"Eigenvector Centrality":"0.6585766805388439","Betweenness Centrality":"0.0026429368589338613","Appearances":"49","No":"13","Country":"Germany","Club Country":"Germany","Club":"Bayern Munich","Weighted Degree":"29.0","Modularity Class":"13","Date of birth / Age":"13 September 1989 (aged 24)","Degree":"29","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3390221402214022"},"color":"rgb(67,229,164)","size":19.333332061767578},{"label":"Riyad Mahrez","x":-1375.4896240234375,"y":1263.62109375,"id":"605","attributes":{"Eigenvector Centrality":"0.29589355686287977","Betweenness Centrality":"0.0","Appearances":"2","No":"21","Country":"Algeria","Club Country":"England","Club":"Leicester City","Weighted Degree":"22.0","Modularity Class":"24","Date of birth / Age":"21 February 1991 (aged 23)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.28389339513325607"},"color":"rgb(67,164,229)","size":10.0},{"label":"Alireza Jahanbakhsh","x":1942.0732421875,"y":1034.900146484375,"id":"36","attributes":{"Eigenvector Centrality":"0.21274429344229648","Betweenness Centrality":"0.0","Appearances":"7","No":"9","Country":"Iran","Club Country":"Netherlands","Club":"NEC","Weighted Degree":"22.0","Modularity Class":"1","Date of birth / Age":"11 August 1993 (aged 20)","Degree":"22","Position":"FW","Eccentricity":"7.0","Closeness Centrality":"0.206809229037704"},"color":"rgb(67,197,229)","size":10.0},{"label":"Hotaru Yamaguchi","x":665.15576171875,"y":571.1557006835938,"id":"285","attributes":{"Eigenvector Centrality":"0.33192039229134085","Betweenness Centrality":"0.0010231003820519223","Appearances":"12","No":"16","Country":"Japan","Club Country":"Japan","Club":"Cerezo Osaka","Weighted Degree":"23.0","Modularity Class":"27","Date of birth / Age":"6 October 1990 (aged 23)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3190104166666667"},"color":"rgb(67,100,229)","size":11.333333015441895},{"label":"Hugo Campagnaro","x":-1030.6343994140625,"y":363.070556640625,"id":"287","attributes":{"Eigenvector Centrality":"0.5658107599692684","Betweenness Centrality":"0.0025393109943757006","Appearances":"15","No":"3","Country":"Argentina","Club Country":"Italy","Club":"Internazionale","Weighted Degree":"27.0","Modularity Class":"19","Date of birth / Age":"27 June 1980 (aged 33)","Degree":"27","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3272484416740873"},"color":"rgb(67,229,229)","size":16.666667938232422},{"label":"Diego Godín","x":-229.68458557128906,"y":-28.488847732543945,"id":"166","attributes":{"Eigenvector Centrality":"0.5243629945948549","Betweenness Centrality":"0.0015151368839237088","Appearances":"77","No":"3","Country":"Uruguay","Club Country":"Spain","Club":"Atlético Madrid","Weighted Degree":"28.0","Modularity Class":"6","Date of birth / Age":"16 February 1986 (aged 28)","Degree":"28","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3236459709379128"},"color":"rgb(229,197,67)","size":18.0},{"label":"Roman Bürki","x":84.80470275878906,"y":279.10205078125,"id":"610","attributes":{"Eigenvector Centrality":"0.3846161602156529","Betweenness Centrality":"0.0","Appearances":"0","No":"21","Country":"Switzerland","Club Country":"Switzerland","Club":"Grasshopper","Weighted Degree":"22.0","Modularity Class":"0","Date of birth / Age":"14 November 1990 (aged 23)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.2922465208747515"},"color":"rgb(164,229,67)","size":10.0},{"label":"Didier Drogba (c)","x":598.4851684570312,"y":-735.1734008789062,"id":"159","attributes":{"Eigenvector Centrality":"0.3683202285259076","Betweenness Centrality":"0.006250022365764094","Appearances":"101","No":"11","Country":"Ivory Coast","Club Country":"Turkey","Club":"Galatasaray","Weighted Degree":"26.0","Modularity Class":"9","Date of birth / Age":"11 March 1978 (aged 36)","Degree":"26","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3276861346411057"},"color":"rgb(164,67,229)","size":15.333333969116211},{"label":"Sejad Salihovic","x":1178.591064453125,"y":-598.7509765625,"id":"635","attributes":{"Eigenvector Centrality":"0.29529844322499244","Betweenness Centrality":"0.0028150615386489113","Appearances":"42","No":"23","Country":"Bosnia and Herzegovina","Club Country":"Germany","Club":"1899 Hoffenheim","Weighted Degree":"23.0","Modularity Class":"20","Date of birth / Age":"8 October 1984 (aged 29)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.31518010291595194"},"color":"rgb(132,229,67)","size":11.333333015441895},{"label":"Christian Bolaños","x":2234.70166015625,"y":376.90460205078125,"id":"119","attributes":{"Eigenvector Centrality":"0.23496944760866384","Betweenness Centrality":"0.0","Appearances":"55","No":"7","Country":"Costa Rica","Club Country":"Denmark","Club":"Copenhagen","Weighted Degree":"22.0","Modularity Class":"29","Date of birth / Age":"17 May 1984 (aged 30)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2515400410677618"},"color":"rgb(229,229,67)","size":10.0},{"label":"Carlos Peña","x":-2037.2489013671875,"y":386.7759704589844,"id":"103","attributes":{"Eigenvector Centrality":"0.2771264523867947","Betweenness Centrality":"0.0","Appearances":"16","No":"21","Country":"Mexico","Club Country":"Mexico","Club":"León","Weighted Degree":"22.0","Modularity Class":"21","Date of birth / Age":"29 March 1990 (aged 24)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.2599929253625752"},"color":"rgb(67,229,67)","size":10.0},{"label":"Izet Hajrovic","x":1073.4324951171875,"y":-468.6595458984375,"id":"302","attributes":{"Eigenvector Centrality":"0.3433334744187318","Betweenness Centrality":"0.0069532743678391755","Appearances":"7","No":"20","Country":"Bosnia and Herzegovina","Club Country":"Turkey","Club":"Galatasaray","Weighted Degree":"26.0","Modularity Class":"20","Date of birth / Age":"4 August 1991 (aged 22)","Degree":"26","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3359232175502742"},"color":"rgb(132,229,67)","size":15.333333969116211},{"label":"Joël Veltman","x":921.6832885742188,"y":59.57893753051758,"id":"338","attributes":{"Eigenvector Centrality":"0.335211163684756","Betweenness Centrality":"0.0","Appearances":"2","No":"13","Country":"Netherlands","Club Country":"Netherlands","Club":"Ajax","Weighted Degree":"22.0","Modularity Class":"22","Date of birth / Age":"15 January 1992 (aged 22)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3088235294117647"},"color":"rgb(197,67,229)","size":10.0},{"label":"David Silva","x":-782.8482666015625,"y":-359.30230712890625,"id":"154","attributes":{"Eigenvector Centrality":"0.8845575771108349","Betweenness Centrality":"0.006629652754318272","Appearances":"80","No":"21","Country":"Spain","Club Country":"England","Club":"Manchester City","Weighted Degree":"31.0","Modularity Class":"23","Date of birth / Age":"8 January 1986 (aged 28)","Degree":"31","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3407510431154381"},"color":"rgb(229,67,197)","size":22.0},{"label":"Manuel Neuer","x":362.2953186035156,"y":-299.9522399902344,"id":"442","attributes":{"Eigenvector Centrality":"0.6585766805388434","Betweenness Centrality":"0.0026429368589338613","Appearances":"45","No":"1","Country":"Germany","Club Country":"Germany","Club":"Bayern Munich","Weighted Degree":"29.0","Modularity Class":"13","Date of birth / Age":"27 March 1986 (aged 28)","Degree":"29","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3390221402214022"},"color":"rgb(67,229,164)","size":19.333332061767578},{"label":"Kim Bo-kyung","x":1094.657470703125,"y":1613.0086669921875,"id":"391","attributes":{"Eigenvector Centrality":"0.24403600463458192","Betweenness Centrality":"0.006087158361550197","Appearances":"28","No":"7","Country":"South Korea","Club Country":"Wales","Club":"Cardiff City","Weighted Degree":"23.0","Modularity Class":"10","Date of birth / Age":"6 October 1989 (aged 24)","Degree":"23","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.26785714285714285"},"color":"rgb(229,67,164)","size":11.333333015441895},{"label":"Eugene Galekovic","x":2152.16015625,"y":-634.9464721679688,"id":"208","attributes":{"Eigenvector Centrality":"0.22132294330055013","Betweenness Centrality":"0.0","Appearances":"8","No":"18","Country":"Australia","Club Country":"Australia","Club":"Adelaide United","Weighted Degree":"22.0","Modularity Class":"12","Date of birth / Age":"12 June 1981 (aged 33)","Degree":"22","Position":"GK","Eccentricity":"7.0","Closeness Centrality":"0.22025771651183698"},"color":"rgb(229,100,67)","size":10.0},{"label":"Emmanuel Emenike","x":-64.24840545654297,"y":-1362.014404296875,"id":"200","attributes":{"Eigenvector Centrality":"0.36794115334947153","Betweenness Centrality":"0.005599744925127154","Appearances":"23","No":"9","Country":"Nigeria","Club Country":"Turkey","Club":"Fenerbahçe","Weighted Degree":"26.0","Modularity Class":"14","Date of birth / Age":"10 May 1987 (aged 27)","Degree":"26","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3168103448275862"},"color":"rgb(67,229,100)","size":15.333333969116211},{"label":"Wesley Sneijder","x":805.6671752929688,"y":-40.13237762451172,"id":"714","attributes":{"Eigenvector Centrality":"0.39319035954961806","Betweenness Centrality":"0.006544290321462833","Appearances":"99","No":"10","Country":"Netherlands","Club Country":"Turkey","Club":"Galatasaray","Weighted Degree":"26.0","Modularity Class":"22","Date of birth / Age":"9 June 1984 (aged 30)","Degree":"26","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.337620578778135"},"color":"rgb(197,67,229)","size":15.333333969116211},{"label":"Walter Ayoví","x":-1792.04833984375,"y":-657.5009155273438,"id":"710","attributes":{"Eigenvector Centrality":"0.36230621820682135","Betweenness Centrality":"0.0","Appearances":"90","No":"10","Country":"Ecuador","Club Country":"Mexico","Club":"Pachuca","Weighted Degree":"22.0","Modularity Class":"4","Date of birth / Age":"11 August 1979 (aged 34)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2881223049784398"},"color":"rgb(229,67,132)","size":10.0},{"label":"Valentin Stocker","x":93.9429931640625,"y":165.77862548828125,"id":"692","attributes":{"Eigenvector Centrality":"0.4279165187640592","Betweenness Centrality":"0.0017015426628181239","Appearances":"24","No":"14","Country":"Switzerland","Club Country":"Switzerland","Club":"Basel","Weighted Degree":"25.0","Modularity Class":"0","Date of birth / Age":"12 April 1989 (aged 25)","Degree":"25","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.31038851351351354"},"color":"rgb(164,229,67)","size":14.0},{"label":"David Villa","x":-854.8253784179688,"y":-313.9442443847656,"id":"155","attributes":{"Eigenvector Centrality":"0.7852248920099724","Betweenness Centrality":"7.220203040676876E-4","Appearances":"96","No":"7","Country":"Spain","Club Country":"Spain","Club":"Atlético Madrid","Weighted Degree":"27.0","Modularity Class":"23","Date of birth / Age":"3 December 1981 (aged 32)","Degree":"27","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3215223097112861"},"color":"rgb(229,67,197)","size":16.666667938232422},{"label":"Sergio Agüero","x":-986.2796630859375,"y":70.57652282714844,"id":"642","attributes":{"Eigenvector Centrality":"0.6398902783818313","Betweenness Centrality":"0.003598075368399343","Appearances":"51","No":"20","Country":"Argentina","Club Country":"England","Club":"Manchester City","Weighted Degree":"29.0","Modularity Class":"19","Date of birth / Age":"2 June 1988 (aged 26)","Degree":"29","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3316787003610108"},"color":"rgb(67,229,229)","size":19.333332061767578},{"label":"Kim Young-gwon","x":1284.3221435546875,"y":1556.894775390625,"id":"395","attributes":{"Eigenvector Centrality":"0.23152559498868786","Betweenness Centrality":"0.0","Appearances":"21","No":"5","Country":"South Korea","Club Country":"China","Club":"Guangzhou Evergrande","Weighted Degree":"22.0","Modularity Class":"10","Date of birth / Age":"27 February 1990 (aged 24)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.24614869390488947"},"color":"rgb(229,67,164)","size":10.0},{"label":"Adrián Bone","x":-1657.1593017578125,"y":-645.242919921875,"id":"9","attributes":{"Eigenvector Centrality":"0.36230621820682135","Betweenness Centrality":"0.0","Appearances":"3","No":"12","Country":"Ecuador","Club Country":"Ecuador","Club":"El Nacional","Weighted Degree":"22.0","Modularity Class":"4","Date of birth / Age":"8 September 1988 (aged 25)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.2881223049784398"},"color":"rgb(229,67,132)","size":10.0},{"label":"Benoît Assou-Ekotto","x":484.17120361328125,"y":273.5126953125,"id":"84","attributes":{"Eigenvector Centrality":"0.3330106718881068","Betweenness Centrality":"0.0036584595528713027","Appearances":"22","No":"2","Country":"Cameroon","Club Country":"England","Club":"Queens Park Rangers","Weighted Degree":"23.0","Modularity Class":"17","Date of birth / Age":"24 March 1984 (aged 30)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3190104166666667"},"color":"rgb(67,132,229)","size":11.333333015441895},{"label":"Efe Ambrose","x":91.53675842285156,"y":-1502.422119140625,"id":"190","attributes":{"Eigenvector Centrality":"0.3486435360657821","Betweenness Centrality":"0.008270857775066283","Appearances":"37","No":"5","Country":"Nigeria","Club Country":"Scotland","Club":"Celtic","Weighted Degree":"25.0","Modularity Class":"14","Date of birth / Age":"18 October 1988 (aged 25)","Degree":"25","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.31518010291595194"},"color":"rgb(67,229,100)","size":14.0},{"label":"Oliver Bozanic","x":2198.375732421875,"y":-627.1802368164062,"id":"541","attributes":{"Eigenvector Centrality":"0.22132294330055013","Betweenness Centrality":"0.0","Appearances":"3","No":"13","Country":"Australia","Club Country":"Switzerland","Club":"Luzern","Weighted Degree":"22.0","Modularity Class":"12","Date of birth / Age":"8 January 1989 (aged 25)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.22025771651183698"},"color":"rgb(229,100,67)","size":10.0},{"label":"Eduardo Vargas","x":-348.89111328125,"y":1339.4359130859375,"id":"189","attributes":{"Eigenvector Centrality":"0.3789565490107093","Betweenness Centrality":"0.006733824897676562","Appearances":"30","No":"11","Country":"Chile","Club Country":"Spain","Club":"Valencia","Weighted Degree":"26.0","Modularity Class":"18","Date of birth / Age":"20 November 1989 (aged 24)","Degree":"26","Position":"FW","Eccentricity":"6.0","Closeness Centrality":"0.30359355638166047"},"color":"rgb(229,132,67)","size":15.333333969116211},{"label":"Azubuike Egwuekwe","x":-40.1948127746582,"y":-1612.722900390625,"id":"75","attributes":{"Eigenvector Centrality":"0.30581490023520397","Betweenness Centrality":"0.0","Appearances":"31","No":"6","Country":"Nigeria","Club Country":"Nigeria","Club":"Warri Wolves","Weighted Degree":"22.0","Modularity Class":"14","Date of birth / Age":"16 July 1989 (aged 24)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.28800940438871475"},"color":"rgb(67,229,100)","size":10.0},{"label":"Giannis Maniatis","x":1675.661376953125,"y":562.7532958984375,"id":"251","attributes":{"Eigenvector Centrality":"0.269759009750252","Betweenness Centrality":"0.0018881692306353887","Appearances":"30","No":"2","Country":"Greece","Club Country":"Greece","Club":"Olympiacos","Weighted Degree":"23.0","Modularity Class":"15","Date of birth / Age":"12 October 1986 (aged 27)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2878965922444183"},"color":"rgb(229,67,100)","size":11.333333015441895},{"label":"Víctor Bernárdez","x":1542.3271484375,"y":-1230.5048828125,"id":"700","attributes":{"Eigenvector Centrality":"0.24794367045748958","Betweenness Centrality":"0.0014579941476906906","Appearances":"78","No":"5","Country":"Honduras","Club Country":"United States","Club":"San Jose Earthquakes","Weighted Degree":"23.0","Modularity Class":"7","Date of birth / Age":"24 May 1982 (aged 32)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2750748502994012"},"color":"rgb(100,67,229)","size":11.333333015441895},{"label":"Asmir Avdukic","x":1126.556396484375,"y":-529.686279296875,"id":"67","attributes":{"Eigenvector Centrality":"0.2839695417201138","Betweenness Centrality":"0.0","Appearances":"3","No":"22","Country":"Bosnia and Herzegovina","Club Country":"Bosnia and Herzegovina","Club":"Borac Banja Luka","Weighted Degree":"22.0","Modularity Class":"20","Date of birth / Age":"13 May 1981 (aged 33)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3077889447236181"},"color":"rgb(132,229,67)","size":10.0},{"label":"Avdija Vršajevic","x":1155.9981689453125,"y":-446.0126647949219,"id":"73","attributes":{"Eigenvector Centrality":"0.2839695417201138","Betweenness Centrality":"0.0","Appearances":"13","No":"2","Country":"Bosnia and Herzegovina","Club Country":"Croatia","Club":"Hajduk Split","Weighted Degree":"22.0","Modularity Class":"20","Date of birth / Age":"6 March 1986 (aged 28)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3077889447236181"},"color":"rgb(132,229,67)","size":10.0},{"label":"Carlos Sánchez","x":-775.6780395507812,"y":1232.408935546875,"id":"105","attributes":{"Eigenvector Centrality":"0.31394925107891597","Betweenness Centrality":"0.0","Appearances":"44","No":"6","Country":"Colombia","Club Country":"Spain","Club":"Elche","Weighted Degree":"22.0","Modularity Class":"11","Date of birth / Age":"6 February 1986 (aged 28)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.29329608938547486"},"color":"rgb(67,67,229)","size":10.0},{"label":"Diego Reyes","x":-1751.081298828125,"y":432.3384704589844,"id":"169","attributes":{"Eigenvector Centrality":"0.41168852553130064","Betweenness Centrality":"0.009305549137125925","Appearances":"14","No":"5","Country":"Mexico","Club Country":"Portugal","Club":"Porto","Weighted Degree":"29.0","Modularity Class":"21","Date of birth / Age":"19 September 1992 (aged 21)","Degree":"29","Position":"DF","Eccentricity":"6.0","Closeness Centrality":"0.3128991060025543"},"color":"rgb(67,229,67)","size":19.333332061767578},{"label":"Serge Aurier","x":471.92193603515625,"y":-746.9190673828125,"id":"639","attributes":{"Eigenvector Centrality":"0.3226876976851504","Betweenness Centrality":"0.002014868000803819","Appearances":"8","No":"17","Country":"Ivory Coast","Club Country":"France","Club":"Toulouse","Weighted Degree":"23.0","Modularity Class":"9","Date of birth / Age":"24 December 1992 (aged 21)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.30817610062893086"},"color":"rgb(164,67,229)","size":11.333333015441895},{"label":"Juan Fernando Quintero","x":-908.9094848632812,"y":1006.1945190429688,"id":"369","attributes":{"Eigenvector Centrality":"0.446466126398784","Betweenness Centrality":"0.007655587436909223","Appearances":"4","No":"20","Country":"Colombia","Club Country":"Portugal","Club":"Porto","Weighted Degree":"29.0","Modularity Class":"11","Date of birth / Age":"18 January 1993 (aged 21)","Degree":"29","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.3315290933694181"},"color":"rgb(67,67,229)","size":19.333332061767578},{"label":"Vasili Berezutski (c)","x":-1323.1439208984375,"y":-1494.270751953125,"id":"695","attributes":{"Eigenvector Centrality":"0.2797530450294211","Betweenness Centrality":"8.329697214751982E-4","Appearances":"78","No":"14","Country":"Russia","Club Country":"Russia","Club":"CSKA Moscow","Weighted Degree":"23.0","Modularity Class":"2","Date of birth / Age":"20 June 1982 (aged 31)","Degree":"23","Position":"DF","Eccentricity":"6.0","Closeness Centrality":"0.2544132917964694"},"color":"rgb(229,67,67)","size":11.333333015441895},{"label":"Patrick Pemberton","x":2230.439208984375,"y":179.53189086914062,"id":"563","attributes":{"Eigenvector Centrality":"0.24571486118323413","Betweenness Centrality":"0.003463283566079935","Appearances":"21","No":"18","Country":"Costa Rica","Club Country":"Costa Rica","Club":"Alajuelense","Weighted Degree":"23.0","Modularity Class":"29","Date of birth / Age":"24 April 1982 (aged 32)","Degree":"23","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.26601520086862107"},"color":"rgb(229,229,67)","size":11.333333015441895},{"label":"Alessio Cerci","x":276.6270751953125,"y":826.5160522460938,"id":"26","attributes":{"Eigenvector Centrality":"0.4319605441926736","Betweenness Centrality":"0.0018820457212751422","Appearances":"12","No":"11","Country":"Italy","Club Country":"Italy","Club":"Torino","Weighted Degree":"23.0","Modularity Class":"3","Date of birth / Age":"23 July 1987 (aged 26)","Degree":"23","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.30497925311203317"},"color":"rgb(197,229,67)","size":11.333333015441895},{"label":"Hulk","x":-676.1294555664062,"y":-547.0525512695312,"id":"289","attributes":{"Eigenvector Centrality":"0.6585476210563139","Betweenness Centrality":"0.00902132999561875","Appearances":"35","No":"7","Country":"Brazil","Club Country":"Russia","Club":"Zenit Saint Petersburg","Weighted Degree":"29.0","Modularity Class":"23","Date of birth / Age":"25 July 1986 (aged 27)","Degree":"29","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.33018867924528306"},"color":"rgb(229,67,197)","size":19.333332061767578},{"label":"Juan Carlos García","x":1576.5137939453125,"y":-1044.39697265625,"id":"367","attributes":{"Eigenvector Centrality":"0.2495870836760396","Betweenness Centrality":"0.00224748146417088","Appearances":"34","No":"6","Country":"Honduras","Club Country":"England","Club":"Wigan Athletic","Weighted Degree":"23.0","Modularity Class":"7","Date of birth / Age":"8 March 1988 (aged 26)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.28021349599695006"},"color":"rgb(100,67,229)","size":11.333333015441895},{"label":"Miguel Layún","x":-2150.14892578125,"y":351.6337890625,"id":"510","attributes":{"Eigenvector Centrality":"0.27712645238679473","Betweenness Centrality":"0.0","Appearances":"15","No":"7","Country":"Mexico","Club Country":"Mexico","Club":"América","Weighted Degree":"22.0","Modularity Class":"21","Date of birth / Age":"25 June 1988 (aged 25)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.2599929253625752"},"color":"rgb(67,229,67)","size":10.0},{"label":"Kwak Tae-hwi","x":1276.581298828125,"y":1652.844970703125,"id":"405","attributes":{"Eigenvector Centrality":"0.23152559498868777","Betweenness Centrality":"0.0","Appearances":"35","No":"4","Country":"South Korea","Club Country":"Saudi Arabia","Club":"Al-Hilal","Weighted Degree":"22.0","Modularity Class":"10","Date of birth / Age":"8 July 1981 (aged 32)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.24614869390488947"},"color":"rgb(229,67,164)","size":10.0},{"label":"Graham Zusi","x":821.1793823242188,"y":-1568.8907470703125,"id":"265","attributes":{"Eigenvector Centrality":"0.2718151842935107","Betweenness Centrality":"0.0","Appearances":"23","No":"19","Country":"United States","Club Country":"United States","Club":"Sporting Kansas City","Weighted Degree":"22.0","Modularity Class":"26","Date of birth / Age":"18 August 1986 (aged 27)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.28021349599695006"},"color":"rgb(100,229,67)","size":10.0},{"label":"Gastón Ramírez","x":-52.539005279541016,"y":-56.3730354309082,"id":"240","attributes":{"Eigenvector Centrality":"0.49007679600185783","Betweenness Centrality":"0.004586755672605624","Appearances":"29","No":"18","Country":"Uruguay","Club Country":"England","Club":"Southampton","Weighted Degree":"28.0","Modularity Class":"6","Date of birth / Age":"2 December 1990 (aged 23)","Degree":"28","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3339391185824625"},"color":"rgb(229,197,67)","size":18.0},{"label":"Gerard Piqué","x":-1126.433837890625,"y":-326.654052734375,"id":"245","attributes":{"Eigenvector Centrality":"0.9370904429273632","Betweenness Centrality":"0.0017384725186443504","Appearances":"60","No":"3","Country":"Spain","Club Country":"Spain","Club":"Barcelona","Weighted Degree":"31.0","Modularity Class":"23","Date of birth / Age":"2 February 1987 (aged 27)","Degree":"31","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.33777573529411764"},"color":"rgb(229,67,197)","size":22.0},{"label":"Bailey Wright","x":2074.923095703125,"y":-613.9719848632812,"id":"77","attributes":{"Eigenvector Centrality":"0.22132294330055022","Betweenness Centrality":"0.0","Appearances":"0","No":"8","Country":"Australia","Club Country":"England","Club":"Preston North End","Weighted Degree":"22.0","Modularity Class":"12","Date of birth / Age":"28 July 1992 (aged 21)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.22025771651183698"},"color":"rgb(229,100,67)","size":10.0},{"label":"Toni Šunjic","x":1221.8553466796875,"y":-554.8410034179688,"id":"688","attributes":{"Eigenvector Centrality":"0.28396954172011374","Betweenness Centrality":"0.0","Appearances":"8","No":"15","Country":"Bosnia and Herzegovina","Club Country":"Ukraine","Club":"Zorya Luhansk","Weighted Degree":"22.0","Modularity Class":"20","Date of birth / Age":"15 December 1988 (aged 25)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3077889447236181"},"color":"rgb(132,229,67)","size":10.0},{"label":"Sergio Romero","x":-1110.6038818359375,"y":391.8827819824219,"id":"645","attributes":{"Eigenvector Centrality":"0.52052076818968","Betweenness Centrality":"0.00163007937425408","Appearances":"47","No":"1","Country":"Argentina","Club Country":"France","Club":"AS Monaco","Weighted Degree":"25.0","Modularity Class":"19","Date of birth / Age":"22 February 1987 (aged 27)","Degree":"25","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3168103448275862"},"color":"rgb(67,229,229)","size":14.0},{"label":"David Luiz","x":-401.1297607421875,"y":-483.5873107910156,"id":"151","attributes":{"Eigenvector Centrality":"0.7525362816963485","Betweenness Centrality":"0.002196566654268722","Appearances":"36","No":"4","Country":"Brazil","Club Country":"England","Club":"Chelsea","Weighted Degree":"30.0","Modularity Class":"23","Date of birth / Age":"22 April 1987 (aged 27)","Degree":"30","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3471894189891356"},"color":"rgb(229,67,197)","size":20.666667938232422},{"label":"Sulley Muntari","x":435.7590026855469,"y":1263.3812255859375,"id":"670","attributes":{"Eigenvector Centrality":"0.39414902919139266","Betweenness Centrality":"0.004358888803155806","Appearances":"82","No":"11","Country":"Ghana","Club Country":"Italy","Club":"Milan","Weighted Degree":"28.0","Modularity Class":"5","Date of birth / Age":"27 August 1984 (aged 29)","Degree":"28","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.31223449447748514"},"color":"rgb(67,229,197)","size":18.0},{"label":"Yoshito Okubo","x":717.3280639648438,"y":699.9623413085938,"id":"730","attributes":{"Eigenvector Centrality":"0.31718153777834784","Betweenness Centrality":"0.0","Appearances":"57","No":"13","Country":"Japan","Club Country":"Japan","Club":"Kawasaki Frontale","Weighted Degree":"22.0","Modularity Class":"27","Date of birth / Age":"9 June 1982 (aged 32)","Degree":"22","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3107822410147992"},"color":"rgb(67,100,229)","size":10.0},{"label":"Francisco Javier Rodríguez","x":-2058.64453125,"y":342.1274719238281,"id":"229","attributes":{"Eigenvector Centrality":"0.2771264523867947","Betweenness Centrality":"0.0","Appearances":"95","No":"2","Country":"Mexico","Club Country":"Mexico","Club":"América","Weighted Degree":"22.0","Modularity Class":"21","Date of birth / Age":"20 October 1981 (aged 32)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.2599929253625752"},"color":"rgb(67,229,67)","size":10.0},{"label":"Tim Howard","x":597.1010131835938,"y":-1458.6304931640625,"id":"681","attributes":{"Eigenvector Centrality":"0.37125489722394445","Betweenness Centrality":"0.007200099994456211","Appearances":"100","No":"1","Country":"United States","Club Country":"England","Club":"Everton","Weighted Degree":"27.0","Modularity Class":"26","Date of birth / Age":"6 March 1979 (aged 35)","Degree":"27","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.30359355638166047"},"color":"rgb(100,229,67)","size":16.666667938232422},{"label":"Kim Chang-soo","x":1182.64794921875,"y":1681.892333984375,"id":"392","attributes":{"Eigenvector Centrality":"0.23152559498868777","Betweenness Centrality":"0.0","Appearances":"9","No":"2","Country":"South Korea","Club Country":"Japan","Club":"Kashiwa Reysol","Weighted Degree":"22.0","Modularity Class":"10","Date of birth / Age":"12 September 1985 (aged 28)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.24614869390488947"},"color":"rgb(229,67,164)","size":10.0},{"label":"Igor Akinfeev","x":-1278.8709716796875,"y":-1521.6795654296875,"id":"292","attributes":{"Eigenvector Centrality":"0.27975304502942094","Betweenness Centrality":"8.329697214751982E-4","Appearances":"68","No":"1","Country":"Russia","Club Country":"Russia","Club":"CSKA Moscow","Weighted Degree":"23.0","Modularity Class":"2","Date of birth / Age":"8 April 1986 (aged 28)","Degree":"23","Position":"GK","Eccentricity":"6.0","Closeness Centrality":"0.2544132917964694"},"color":"rgb(229,67,67)","size":11.333333015441895},{"label":"Anel Hadžic","x":1149.517822265625,"y":-490.4151306152344,"id":"53","attributes":{"Eigenvector Centrality":"0.2839695417201138","Betweenness Centrality":"0.0","Appearances":"2","No":"21","Country":"Bosnia and Herzegovina","Club Country":"Austria","Club":"Sturm Graz","Weighted Degree":"22.0","Modularity Class":"20","Date of birth / Age":"16 August 1989 (aged 24)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3077889447236181"},"color":"rgb(132,229,67)","size":10.0},{"label":"Jordi Alba","x":-1139.678955078125,"y":-237.86505126953125,"id":"349","attributes":{"Eigenvector Centrality":"0.9370904429273634","Betweenness Centrality":"0.0017384725186443504","Appearances":"26","No":"18","Country":"Spain","Club Country":"Spain","Club":"Barcelona","Weighted Degree":"31.0","Modularity Class":"23","Date of birth / Age":"21 March 1989 (aged 25)","Degree":"31","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.33777573529411764"},"color":"rgb(229,67,197)","size":22.0},{"label":"Teófilo Gutiérrez","x":-811.0554809570312,"y":1271.3983154296875,"id":"672","attributes":{"Eigenvector Centrality":"0.31394925107891597","Betweenness Centrality":"0.0","Appearances":"30","No":"9","Country":"Colombia","Club Country":"Argentina","Club":"River Plate","Weighted Degree":"22.0","Modularity Class":"11","Date of birth / Age":"17 May 1985 (aged 29)","Degree":"22","Position":"FW","Eccentricity":"7.0","Closeness Centrality":"0.29329608938547486"},"color":"rgb(67,67,229)","size":10.0},{"label":"Daniel Davari","x":1905.60986328125,"y":955.88916015625,"id":"137","attributes":{"Eigenvector Centrality":"0.22438444470902533","Betweenness Centrality":"0.034852343427392886","Appearances":"4","No":"22","Country":"Iran","Club Country":"Germany","Club":"Eintracht Braunschweig","Weighted Degree":"23.0","Modularity Class":"1","Date of birth / Age":"6 January 1988 (aged 26)","Degree":"23","Position":"GK","Eccentricity":"6.0","Closeness Centrality":"0.24739145069000334"},"color":"rgb(67,197,229)","size":11.333333015441895},{"label":"Serey Die","x":467.3825988769531,"y":-653.703857421875,"id":"638","attributes":{"Eigenvector Centrality":"0.37146876286160685","Betweenness Centrality":"0.004611725554141086","Appearances":"7","No":"20","Country":"Ivory Coast","Club Country":"Switzerland","Club":"Basel","Weighted Degree":"26.0","Modularity Class":"9","Date of birth / Age":"7 November 1984 (aged 29)","Degree":"26","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3107822410147992"},"color":"rgb(164,67,229)","size":15.333333969116211},{"label":"Yun Suk-young","x":1131.668212890625,"y":1494.437255859375,"id":"731","attributes":{"Eigenvector Centrality":"0.2442236139118131","Betweenness Centrality":"0.002477907299557519","Appearances":"4","No":"3","Country":"South Korea","Club Country":"England","Club":"Queens Park Rangers","Weighted Degree":"23.0","Modularity Class":"10","Date of birth / Age":"13 February 1990 (aged 24)","Degree":"23","Position":"DF","Eccentricity":"6.0","Closeness Centrality":"0.27242401779095626"},"color":"rgb(229,67,164)","size":11.333333015441895},{"label":"Wilson Palacios","x":1475.9537353515625,"y":-1233.8828125,"id":"718","attributes":{"Eigenvector Centrality":"0.2749352578108993","Betweenness Centrality":"0.008565859408081519","Appearances":"95","No":"8","Country":"Honduras","Club Country":"England","Club":"Stoke City","Weighted Degree":"25.0","Modularity Class":"7","Date of birth / Age":"29 July 1984 (aged 29)","Degree":"25","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.29672991522002423"},"color":"rgb(100,67,229)","size":14.0},{"label":"Steven Beitashour","x":1978.978515625,"y":1007.80078125,"id":"666","attributes":{"Eigenvector Centrality":"0.21274429344229642","Betweenness Centrality":"0.0","Appearances":"6","No":"20","Country":"Iran","Club Country":"Canada","Club":"Vancouver Whitecaps FC","Weighted Degree":"22.0","Modularity Class":"1","Date of birth / Age":"1 February 1987 (aged 27)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.206809229037704"},"color":"rgb(67,197,229)","size":10.0},{"label":"Nicolas Lombaerts","x":-803.9263916015625,"y":-951.1397705078125,"id":"532","attributes":{"Eigenvector Centrality":"0.6174086302888655","Betweenness Centrality":"0.006770928561410678","Appearances":"25","No":"18","Country":"Belgium","Club Country":"Russia","Club":"Zenit Saint Petersburg","Weighted Degree":"28.0","Modularity Class":"28","Date of birth / Age":"20 March 1985 (aged 29)","Degree":"28","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3343949044585987"},"color":"rgb(67,229,132)","size":18.0},{"label":"Victor","x":-504.1156921386719,"y":-310.5911865234375,"id":"699","attributes":{"Eigenvector Centrality":"0.5425650576268322","Betweenness Centrality":"0.0","Appearances":"6","No":"22","Country":"Brazil","Club Country":"Brazil","Club":"Atlético Mineiro","Weighted Degree":"22.0","Modularity Class":"23","Date of birth / Age":"21 January 1983 (aged 31)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3158573270305114"},"color":"rgb(229,67,197)","size":10.0},{"label":"Mikkel Diskerud","x":941.4994506835938,"y":-1436.3448486328125,"id":"513","attributes":{"Eigenvector Centrality":"0.2821282119717931","Betweenness Centrality":"0.00491295354819868","Appearances":"20","No":"10","Country":"United States","Club Country":"Norway","Club":"Rosenborg","Weighted Degree":"23.0","Modularity Class":"26","Date of birth / Age":"2 October 1990 (aged 23)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.28857479387514723"},"color":"rgb(100,229,67)","size":11.333333015441895},{"label":"Dante","x":-212.989501953125,"y":-416.6596374511719,"id":"145","attributes":{"Eigenvector Centrality":"0.856259545753813","Betweenness Centrality":"0.008027278474858441","Appearances":"12","No":"13","Country":"Brazil","Club Country":"Germany","Club":"Bayern Munich","Weighted Degree":"35.0","Modularity Class":"23","Date of birth / Age":"18 October 1983 (aged 30)","Degree":"35","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3510028653295129"},"color":"rgb(229,67,197)","size":27.33333396911621},{"label":"Emir Spahic (c)","x":1039.750244140625,"y":-336.38665771484375,"id":"198","attributes":{"Eigenvector Centrality":"0.30657356383479545","Betweenness Centrality":"0.01353674285470377","Appearances":"74","No":"4","Country":"Bosnia and Herzegovina","Club Country":"Germany","Club":"Bayer Leverkusen","Weighted Degree":"24.0","Modularity Class":"20","Date of birth / Age":"18 August 1980 (aged 33)","Degree":"24","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3225098727512067"},"color":"rgb(132,229,67)","size":12.666666984558105},{"label":"Tim Krul","x":749.574951171875,"y":-122.82310485839844,"id":"682","attributes":{"Eigenvector Centrality":"0.42046095610267226","Betweenness Centrality":"0.005581921144737077","Appearances":"5","No":"23","Country":"Netherlands","Club Country":"England","Club":"Newcastle United","Weighted Degree":"27.0","Modularity Class":"22","Date of birth / Age":"3 April 1988 (aged 26)","Degree":"27","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3313796212804328"},"color":"rgb(197,67,229)","size":16.666667938232422},{"label":"Edder Delgado","x":1622.098388671875,"y":-1283.4814453125,"id":"178","attributes":{"Eigenvector Centrality":"0.23664887946331803","Betweenness Centrality":"0.0","Appearances":"26","No":"12","Country":"Honduras","Club Country":"Honduras","Club":"Real España","Weighted Degree":"22.0","Modularity Class":"7","Date of birth / Age":"20 November 1986 (aged 27)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.26344086021505375"},"color":"rgb(100,67,229)","size":10.0},{"label":"Chris Wondolowski","x":915.552978515625,"y":-1512.6751708984375,"id":"117","attributes":{"Eigenvector Centrality":"0.282163463180194","Betweenness Centrality":"0.0017638995236230008","Appearances":"21","No":"18","Country":"United States","Club Country":"United States","Club":"San Jose Earthquakes","Weighted Degree":"23.0","Modularity Class":"26","Date of birth / Age":"28 January 1983 (aged 31)","Degree":"23","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.2877838684416601"},"color":"rgb(100,229,67)","size":11.333333015441895},{"label":"Memphis Depay","x":929.3518676757812,"y":119.25907897949219,"id":"496","attributes":{"Eigenvector Centrality":"0.36016990192205894","Betweenness Centrality":"0.005645297467686556","Appearances":"6","No":"21","Country":"Netherlands","Club Country":"Netherlands","Club":"PSV","Weighted Degree":"24.0","Modularity Class":"22","Date of birth / Age":"13 February 1994 (aged 20)","Degree":"24","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3273942093541203"},"color":"rgb(197,67,229)","size":12.666666984558105},{"label":"Jérôme Boateng","x":313.90338134765625,"y":-414.4244689941406,"id":"327","attributes":{"Eigenvector Centrality":"0.6585766805388437","Betweenness Centrality":"0.0026429368589338613","Appearances":"39","No":"20","Country":"Germany","Club Country":"Germany","Club":"Bayern Munich","Weighted Degree":"29.0","Modularity Class":"13","Date of birth / Age":"3 September 1988 (aged 25)","Degree":"29","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3390221402214022"},"color":"rgb(67,229,164)","size":19.333332061767578},{"label":"Nani","x":-646.500244140625,"y":40.37836456298828,"id":"528","attributes":{"Eigenvector Centrality":"0.7654159805026451","Betweenness Centrality":"0.010494679938814755","Appearances":"75","No":"17","Country":"Portugal","Club Country":"England","Club":"Manchester United","Weighted Degree":"35.0","Modularity Class":"8","Date of birth / Age":"17 November 1986 (aged 27)","Degree":"35","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.34702549575070823"},"color":"rgb(229,164,67)","size":27.33333396911621},{"label":"Michael Barrantes","x":2300.956298828125,"y":256.1389465332031,"id":"501","attributes":{"Eigenvector Centrality":"0.23496944760866373","Betweenness Centrality":"0.0","Appearances":"50","No":"11","Country":"Costa Rica","Club Country":"Norway","Club":"Aalesund","Weighted Degree":"22.0","Modularity Class":"29","Date of birth / Age":"4 October 1983 (aged 30)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2515400410677618"},"color":"rgb(229,229,67)","size":10.0},{"label":"Gelson Fernandes","x":151.718017578125,"y":158.9506072998047,"id":"241","attributes":{"Eigenvector Centrality":"0.41564407300864686","Betweenness Centrality":"0.0029131326818128433","Appearances":"47","No":"16","Country":"Switzerland","Club Country":"Germany","Club":"SC Freiburg","Weighted Degree":"24.0","Modularity Class":"0","Date of birth / Age":"2 September 1986 (aged 27)","Degree":"24","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3150450064294899"},"color":"rgb(164,229,67)","size":12.666666984558105},{"label":"Oscar","x":-364.28692626953125,"y":-412.46795654296875,"id":"547","attributes":{"Eigenvector Centrality":"0.7525362816963487","Betweenness Centrality":"0.002196566654268722","Appearances":"31","No":"11","Country":"Brazil","Club Country":"England","Club":"Chelsea","Weighted Degree":"30.0","Modularity Class":"23","Date of birth / Age":"9 September 1991 (aged 22)","Degree":"30","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3471894189891356"},"color":"rgb(229,67,197)","size":20.666667938232422},{"label":"El Arbi Hillel Soudani","x":-1331.9407958984375,"y":1124.369873046875,"id":"195","attributes":{"Eigenvector Centrality":"0.3092624835205678","Betweenness Centrality":"0.0011823348492373815","Appearances":"22","No":"15","Country":"Algeria","Club Country":"Croatia","Club":"Dinamo Zagreb","Weighted Degree":"23.0","Modularity Class":"24","Date of birth / Age":"25 November 1987 (aged 26)","Degree":"23","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.2950622240064231"},"color":"rgb(67,164,229)","size":11.333333015441895},{"label":"Vincent Aboubakar","x":458.3448486328125,"y":202.27162170410156,"id":"705","attributes":{"Eigenvector Centrality":"0.32277187794408035","Betweenness Centrality":"0.0","Appearances":"24","No":"10","Country":"Cameroon","Club Country":"France","Club":"Lorient","Weighted Degree":"22.0","Modularity Class":"17","Date of birth / Age":"22 January 1992 (aged 22)","Degree":"22","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3139683895771038"},"color":"rgb(67,132,229)","size":10.0},{"label":"Paul Pogba","x":8.138252258300781,"y":94.41950225830078,"id":"565","attributes":{"Eigenvector Centrality":"0.7020295109364902","Betweenness Centrality":"0.00827672737020524","Appearances":"11","No":"19","Country":"France","Club Country":"Italy","Club":"Juventus","Weighted Degree":"33.0","Modularity Class":"16","Date of birth / Age":"15 March 1993 (aged 21)","Degree":"33","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.33424283765347884"},"color":"rgb(229,67,229)","size":24.666667938232422},{"label":"Alejandro Bedoya","x":784.4288940429688,"y":-1547.6514892578125,"id":"20","attributes":{"Eigenvector Centrality":"0.27181518429351065","Betweenness Centrality":"0.0","Appearances":"28","No":"11","Country":"United States","Club Country":"France","Club":"Nantes","Weighted Degree":"22.0","Modularity Class":"26","Date of birth / Age":"29 April 1987 (aged 27)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.28021349599695006"},"color":"rgb(100,229,67)","size":10.0},{"label":"Hossein Mahini","x":1969.51806640625,"y":1144.54345703125,"id":"284","attributes":{"Eigenvector Centrality":"0.2127442934422965","Betweenness Centrality":"0.0","Appearances":"22","No":"13","Country":"Iran","Club Country":"Iran","Club":"Persepolis","Weighted Degree":"22.0","Modularity Class":"1","Date of birth / Age":"16 September 1986 (aged 27)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.206809229037704"},"color":"rgb(67,197,229)","size":10.0},{"label":"Aleksandr Kerzhakov","x":-1228.88916015625,"y":-1267.0670166015625,"id":"21","attributes":{"Eigenvector Centrality":"0.3498246554244825","Betweenness Centrality":"0.004583905120882726","Appearances":"80","No":"11","Country":"Russia","Club Country":"Russia","Club":"Zenit Saint Petersburg","Weighted Degree":"26.0","Modularity Class":"2","Date of birth / Age":"27 November 1982 (aged 31)","Degree":"26","Position":"FW","Eccentricity":"6.0","Closeness Centrality":"0.27904328018223234"},"color":"rgb(229,67,67)","size":15.333333969116211},{"label":"Frickson Erazo","x":-1740.312255859375,"y":-668.1109619140625,"id":"235","attributes":{"Eigenvector Centrality":"0.3623062182068215","Betweenness Centrality":"0.0","Appearances":"37","No":"3","Country":"Ecuador","Club Country":"Brazil","Club":"Flamengo","Weighted Degree":"22.0","Modularity Class":"4","Date of birth / Age":"5 May 1988 (aged 26)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2881223049784398"},"color":"rgb(229,67,132)","size":10.0},{"label":"Ousmane Viera","x":474.08282470703125,"y":-965.5185546875,"id":"553","attributes":{"Eigenvector Centrality":"0.3219703768914536","Betweenness Centrality":"0.0013416368447328885","Appearances":"1","No":"2","Country":"Ivory Coast","Club Country":"Turkey","Club":"Çaykur Rizespor","Weighted Degree":"23.0","Modularity Class":"9","Date of birth / Age":"21 December 1986 (aged 27)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.30334296326867516"},"color":"rgb(164,67,229)","size":11.333333015441895},{"label":"Shusaku Nishikawa","x":727.420166015625,"y":656.2659301757812,"id":"651","attributes":{"Eigenvector Centrality":"0.31718153777834773","Betweenness Centrality":"0.0","Appearances":"13","No":"12","Country":"Japan","Club Country":"Japan","Club":"Urawa Red Diamonds","Weighted Degree":"22.0","Modularity Class":"27","Date of birth / Age":"18 June 1986 (aged 27)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3107822410147992"},"color":"rgb(67,100,229)","size":10.0},{"label":"Andrea Barzagli","x":109.97048950195312,"y":937.1626586914062,"id":"45","attributes":{"Eigenvector Centrality":"0.5455496050511397","Betweenness Centrality":"0.0016215443882875223","Appearances":"47","No":"15","Country":"Italy","Club Country":"Italy","Club":"Juventus","Weighted Degree":"28.0","Modularity Class":"3","Date of birth / Age":"8 May 1981 (aged 33)","Degree":"28","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3242170269078077"},"color":"rgb(197,229,67)","size":18.0},{"label":"Oliver Zelenika","x":-310.13934326171875,"y":653.3941040039062,"id":"542","attributes":{"Eigenvector Centrality":"0.34443939620173625","Betweenness Centrality":"0.0","Appearances":"0","No":"12","Country":"Croatia","Club Country":"Croatia","Club":"Lokomotiva","Weighted Degree":"22.0","Modularity Class":"25","Date of birth / Age":"14 May 1993 (aged 21)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.29178245335450576"},"color":"rgb(132,67,229)","size":10.0},{"label":"Alan Pulido","x":-2016.3092041015625,"y":442.1366271972656,"id":"17","attributes":{"Eigenvector Centrality":"0.27712645238679473","Betweenness Centrality":"0.0","Appearances":"6","No":"11","Country":"Mexico","Club Country":"Mexico","Club":"UANL","Weighted Degree":"22.0","Modularity Class":"21","Date of birth / Age":"8 March 1991 (aged 23)","Degree":"22","Position":"FW","Eccentricity":"7.0","Closeness Centrality":"0.2599929253625752"},"color":"rgb(67,229,67)","size":10.0},{"label":"Ivica Olic","x":-356.2250061035156,"y":503.7689208984375,"id":"301","attributes":{"Eigenvector Centrality":"0.4414842289662269","Betweenness Centrality":"0.0021210911790253153","Appearances":"92","No":"18","Country":"Croatia","Club Country":"Germany","Club":"VfL Wolfsburg","Weighted Degree":"27.0","Modularity Class":"25","Date of birth / Age":"14 September 1979 (aged 34)","Degree":"27","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.317083692838654"},"color":"rgb(132,67,229)","size":16.666667938232422},{"label":"Divock Origi","x":-634.9317016601562,"y":-895.1273803710938,"id":"172","attributes":{"Eigenvector Centrality":"0.567406470826805","Betweenness Centrality":"0.002778667740909008","Appearances":"2","No":"17","Country":"Belgium","Club Country":"France","Club":"Lille","Weighted Degree":"25.0","Modularity Class":"28","Date of birth / Age":"18 April 1995 (aged 19)","Degree":"25","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3383977900552486"},"color":"rgb(67,229,132)","size":14.0},{"label":"Han Kook-young","x":1158.830810546875,"y":1599.3704833984375,"id":"269","attributes":{"Eigenvector Centrality":"0.2315255949886878","Betweenness Centrality":"0.0","Appearances":"10","No":"14","Country":"South Korea","Club Country":"Japan","Club":"Kashiwa Reysol","Weighted Degree":"22.0","Modularity Class":"10","Date of birth / Age":"19 April 1990 (aged 24)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.24614869390488947"},"color":"rgb(229,67,164)","size":10.0},{"label":"Tommy Oar","x":2165.022705078125,"y":-713.5425415039062,"id":"686","attributes":{"Eigenvector Centrality":"0.22132294330055022","Betweenness Centrality":"0.0","Appearances":"15","No":"11","Country":"Australia","Club Country":"Netherlands","Club":"Utrecht","Weighted Degree":"22.0","Modularity Class":"12","Date of birth / Age":"10 December 1991 (aged 22)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.22025771651183698"},"color":"rgb(229,100,67)","size":10.0},{"label":"Raúl Jiménez","x":-2167.43408203125,"y":400.8553161621094,"id":"592","attributes":{"Eigenvector Centrality":"0.27712645238679473","Betweenness Centrality":"0.0","Appearances":"25","No":"9","Country":"Mexico","Club Country":"Mexico","Club":"América","Weighted Degree":"22.0","Modularity Class":"21","Date of birth / Age":"5 May 1991 (aged 23)","Degree":"22","Position":"FW","Eccentricity":"7.0","Closeness Centrality":"0.2599929253625752"},"color":"rgb(67,229,67)","size":10.0},{"label":"Luka Modric","x":-410.41796875,"y":416.6111145019531,"id":"432","attributes":{"Eigenvector Centrality":"0.6315855500081669","Betweenness Centrality":"0.005842271062684167","Appearances":"75","No":"10","Country":"Croatia","Club Country":"Spain","Club":"Real Madrid","Weighted Degree":"33.0","Modularity Class":"25","Date of birth / Age":"9 September 1985 (aged 28)","Degree":"33","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3262316910785619"},"color":"rgb(132,67,229)","size":24.666667938232422},{"label":"Georginio Wijnaldum","x":874.0654907226562,"y":135.7948455810547,"id":"244","attributes":{"Eigenvector Centrality":"0.36016990192205894","Betweenness Centrality":"0.005645297467686556","Appearances":"5","No":"20","Country":"Netherlands","Club Country":"Netherlands","Club":"PSV","Weighted Degree":"24.0","Modularity Class":"22","Date of birth / Age":"11 November 1990 (aged 23)","Degree":"24","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3273942093541203"},"color":"rgb(197,67,229)","size":12.666666984558105},{"label":"Alfredo Talavera","x":-1995.7100830078125,"y":401.94842529296875,"id":"34","attributes":{"Eigenvector Centrality":"0.27712645238679473","Betweenness Centrality":"0.0","Appearances":"14","No":"12","Country":"Mexico","Club Country":"Mexico","Club":"Toluca","Weighted Degree":"22.0","Modularity Class":"21","Date of birth / Age":"18 September 1982 (aged 31)","Degree":"22","Position":"GK","Eccentricity":"7.0","Closeness Centrality":"0.2599929253625752"},"color":"rgb(67,229,67)","size":10.0},{"label":"Esteban Paredes","x":-262.22747802734375,"y":1531.853271484375,"id":"207","attributes":{"Eigenvector Centrality":"0.316119262177923","Betweenness Centrality":"0.0","Appearances":"35","No":"22","Country":"Chile","Club Country":"Chile","Club":"Colo-Colo","Weighted Degree":"22.0","Modularity Class":"18","Date of birth / Age":"1 August 1980 (aged 33)","Degree":"22","Position":"FW","Eccentricity":"7.0","Closeness Centrality":"0.2737430167597765"},"color":"rgb(229,132,67)","size":10.0},{"label":"Enzo Pérez","x":-1057.39599609375,"y":279.5024719238281,"id":"202","attributes":{"Eigenvector Centrality":"0.5249878217996955","Betweenness Centrality":"8.46487079105798E-4","Appearances":"7","No":"8","Country":"Argentina","Club Country":"Portugal","Club":"Benfica","Weighted Degree":"25.0","Modularity Class":"19","Date of birth / Age":"22 February 1986 (aged 28)","Degree":"25","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3084347461183382"},"color":"rgb(67,229,229)","size":14.0},{"label":"Martín Cáceres","x":-21.211044311523438,"y":343.7950439453125,"id":"461","attributes":{"Eigenvector Centrality":"0.5969418716202328","Betweenness Centrality":"0.009327834149799673","Appearances":"57","No":"22","Country":"Uruguay","Club Country":"Italy","Club":"Juventus","Weighted Degree":"33.0","Modularity Class":"6","Date of birth / Age":"7 April 1987 (aged 27)","Degree":"33","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.33731069297843047"},"color":"rgb(229,197,67)","size":24.666667938232422},{"label":"Thomas Vermaelen","x":-482.7641296386719,"y":-771.1542358398438,"id":"679","attributes":{"Eigenvector Centrality":"0.7319614548533502","Betweenness Centrality":"0.0031592253025152935","Appearances":"47","No":"3","Country":"Belgium","Club Country":"England","Club":"Arsenal","Weighted Degree":"31.0","Modularity Class":"28","Date of birth / Age":"14 November 1985 (aged 28)","Degree":"31","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.33731069297843047"},"color":"rgb(67,229,132)","size":22.0},{"label":"Matt Besler","x":861.9520874023438,"y":-1604.162841796875,"id":"476","attributes":{"Eigenvector Centrality":"0.2718151842935107","Betweenness Centrality":"0.0","Appearances":"17","No":"5","Country":"United States","Club Country":"United States","Club":"Sporting Kansas City","Weighted Degree":"22.0","Modularity Class":"26","Date of birth / Age":"11 February 1987 (aged 27)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.28021349599695006"},"color":"rgb(100,229,67)","size":10.0},{"label":"Benjamin Moukandjo","x":415.3848876953125,"y":99.65612030029297,"id":"83","attributes":{"Eigenvector Centrality":"0.3227718779440804","Betweenness Centrality":"0.0","Appearances":"17","No":"8","Country":"Cameroon","Club Country":"France","Club":"Nancy","Weighted Degree":"22.0","Modularity Class":"17","Date of birth / Age":"12 November 1988 (aged 25)","Degree":"22","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3139683895771038"},"color":"rgb(67,132,229)","size":10.0},{"label":"David Ospina","x":-821.8875122070312,"y":1214.61767578125,"id":"153","attributes":{"Eigenvector Centrality":"0.3139492510789159","Betweenness Centrality":"0.0","Appearances":"44","No":"1","Country":"Colombia","Club Country":"France","Club":"Nice","Weighted Degree":"22.0","Modularity Class":"11","Date of birth / Age":"31 August 1988 (aged 25)","Degree":"22","Position":"GK","Eccentricity":"7.0","Closeness Centrality":"0.29329608938547486"},"color":"rgb(67,67,229)","size":10.0},{"label":"Felipe Caicedo","x":-1726.1597900390625,"y":-587.7854614257812,"id":"222","attributes":{"Eigenvector Centrality":"0.3623062182068215","Betweenness Centrality":"0.0","Appearances":"50","No":"11","Country":"Ecuador","Club Country":"United Arab Emirates","Club":"Al-Jazira","Weighted Degree":"22.0","Modularity Class":"4","Date of birth / Age":"5 September 1988 (aged 25)","Degree":"22","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.2881223049784398"},"color":"rgb(229,67,132)","size":10.0},{"label":"Kevin Großkreutz","x":553.7317504882812,"y":-380.0992126464844,"id":"385","attributes":{"Eigenvector Centrality":"0.500680986024227","Betweenness Centrality":"0.008472576600609625","Appearances":"5","No":"2","Country":"Germany","Club Country":"Germany","Club":"Borussia Dortmund","Weighted Degree":"24.0","Modularity Class":"13","Date of birth / Age":"19 July 1988 (aged 25)","Degree":"24","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.310126582278481"},"color":"rgb(67,229,164)","size":12.666666984558105},{"label":"Jô","x":-470.48614501953125,"y":-271.3874816894531,"id":"331","attributes":{"Eigenvector Centrality":"0.5425650576268322","Betweenness Centrality":"0.0","Appearances":"17","No":"21","Country":"Brazil","Club Country":"Brazil","Club":"Atlético Mineiro","Weighted Degree":"22.0","Modularity Class":"23","Date of birth / Age":"20 March 1987 (aged 27)","Degree":"22","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3158573270305114"},"color":"rgb(229,67,197)","size":10.0},{"label":"Pavel Mogilevets","x":-1357.9305419921875,"y":-1289.38330078125,"id":"568","attributes":{"Eigenvector Centrality":"0.2784495406871368","Betweenness Centrality":"0.0019868644316807485","Appearances":"1","No":"15","Country":"Russia","Club Country":"Russia","Club":"Rubin Kazan","Weighted Degree":"23.0","Modularity Class":"2","Date of birth / Age":"25 January 1993 (aged 21)","Degree":"23","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.256186824677588"},"color":"rgb(229,67,67)","size":11.333333015441895},{"label":"Raïs M\u0027Bolhi","x":-1459.36083984375,"y":1229.281982421875,"id":"585","attributes":{"Eigenvector Centrality":"0.2958935568628797","Betweenness Centrality":"0.0","Appearances":"28","No":"23","Country":"Algeria","Club Country":"Bulgaria","Club":"CSKA Sofia","Weighted Degree":"22.0","Modularity Class":"24","Date of birth / Age":"25 April 1986 (aged 28)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.28389339513325607"},"color":"rgb(67,164,229)","size":10.0},{"label":"Henrique","x":-572.6226806640625,"y":-84.16056823730469,"id":"279","attributes":{"Eigenvector Centrality":"0.8111998945620833","Betweenness Centrality":"0.00493020854872855","Appearances":"5","No":"15","Country":"Brazil","Club Country":"Italy","Club":"Napoli","Weighted Degree":"33.0","Modularity Class":"23","Date of birth / Age":"14 October 1986 (aged 27)","Degree":"33","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3458823529411765"},"color":"rgb(229,67,197)","size":24.666667938232422},{"label":"Daryl Janmaat","x":832.5292358398438,"y":28.84025001525879,"id":"149","attributes":{"Eigenvector Centrality":"0.335211163684756","Betweenness Centrality":"0.0","Appearances":"16","No":"7","Country":"Netherlands","Club Country":"Netherlands","Club":"Feyenoord","Weighted Degree":"22.0","Modularity Class":"22","Date of birth / Age":"22 July 1989 (aged 24)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3088235294117647"},"color":"rgb(197,67,229)","size":10.0},{"label":"Álvaro González","x":13.41373348236084,"y":-43.777435302734375,"id":"38","attributes":{"Eigenvector Centrality":"0.4846353390672056","Betweenness Centrality":"0.006932977102729991","Appearances":"43","No":"20","Country":"Uruguay","Club Country":"Italy","Club":"Lazio","Weighted Degree":"28.0","Modularity Class":"6","Date of birth / Age":"29 October 1984 (aged 29)","Degree":"28","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.34507042253521125"},"color":"rgb(229,197,67)","size":18.0},{"label":"Essaïd Belkalem","x":-1238.16552734375,"y":1250.7357177734375,"id":"205","attributes":{"Eigenvector Centrality":"0.30611433682396827","Betweenness Centrality":"0.005838443339718533","Appearances":"13","No":"4","Country":"Algeria","Club Country":"England","Club":"Watford","Weighted Degree":"23.0","Modularity Class":"24","Date of birth / Age":"1 January 1989 (aged 25)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.29388244702119154"},"color":"rgb(67,164,229)","size":11.333333015441895},{"label":"Adrián Ramos","x":-712.1338500976562,"y":1053.31591796875,"id":"10","attributes":{"Eigenvector Centrality":"0.3252993880084764","Betweenness Centrality":"0.003909094271768691","Appearances":"26","No":"19","Country":"Colombia","Club Country":"Germany","Club":"Hertha BSC","Weighted Degree":"23.0","Modularity Class":"11","Date of birth / Age":"22 January 1986 (aged 28)","Degree":"23","Position":"FW","Eccentricity":"6.0","Closeness Centrality":"0.3080469404861693"},"color":"rgb(67,67,229)","size":11.333333015441895},{"label":"José Miguel Cubero","x":2268.583740234375,"y":346.56884765625,"id":"360","attributes":{"Eigenvector Centrality":"0.2349694476086638","Betweenness Centrality":"0.0","Appearances":"35","No":"22","Country":"Costa Rica","Club Country":"Costa Rica","Club":"Herediano","Weighted Degree":"22.0","Modularity Class":"29","Date of birth / Age":"14 February 1987 (aged 27)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2515400410677618"},"color":"rgb(229,229,67)","size":10.0},{"label":"Yuto Nagatomo","x":395.0039367675781,"y":607.56591796875,"id":"734","attributes":{"Eigenvector Centrality":"0.44967087937585604","Betweenness Centrality":"0.011059526851986908","Appearances":"70","No":"5","Country":"Japan","Club Country":"Italy","Club":"Internazionale","Weighted Degree":"29.0","Modularity Class":"27","Date of birth / Age":"12 September 1986 (aged 27)","Degree":"29","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.33731069297843047"},"color":"rgb(67,100,229)","size":19.333332061767578},{"label":"Hassan Yebda","x":-1303.48681640625,"y":1254.45166015625,"id":"274","attributes":{"Eigenvector Centrality":"0.30778242364802144","Betweenness Centrality":"0.0021251327211181483","Appearances":"25","No":"7","Country":"Algeria","Club Country":"Italy","Club":"Udinese","Weighted Degree":"23.0","Modularity Class":"24","Date of birth / Age":"14 May 1984 (aged 30)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2980535279805353"},"color":"rgb(67,164,229)","size":11.333333015441895},{"label":"Mensur Mujdža","x":1039.0458984375,"y":-418.0989685058594,"id":"497","attributes":{"Eigenvector Centrality":"0.3323231211056512","Betweenness Centrality":"0.006714488569703231","Appearances":"24","No":"13","Country":"Bosnia and Herzegovina","Club Country":"Germany","Club":"SC Freiburg","Weighted Degree":"25.0","Modularity Class":"20","Date of birth / Age":"28 March 1984 (aged 30)","Degree":"25","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3253652058432935"},"color":"rgb(132,229,67)","size":14.0},{"label":"Matt McKay","x":2090.569580078125,"y":-687.9733276367188,"id":"477","attributes":{"Eigenvector Centrality":"0.2213229433005502","Betweenness Centrality":"0.0","Appearances":"47","No":"17","Country":"Australia","Club Country":"Australia","Club":"Brisbane Roar","Weighted Degree":"22.0","Modularity Class":"12","Date of birth / Age":"11 January 1983 (aged 31)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.22025771651183698"},"color":"rgb(229,100,67)","size":10.0},{"label":"Dany Nounkeu","x":382.61639404296875,"y":41.81476974487305,"id":"146","attributes":{"Eigenvector Centrality":"0.3503932506862968","Betweenness Centrality":"0.003969104553989964","Appearances":"16","No":"5","Country":"Cameroon","Club Country":"Turkey","Club":"Be?ikta?","Weighted Degree":"24.0","Modularity Class":"17","Date of birth / Age":"11 April 1986 (aged 28)","Degree":"24","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3272484416740873"},"color":"rgb(67,132,229)","size":12.666666984558105},{"label":"Toshihiro Aoyama","x":774.469970703125,"y":733.8078002929688,"id":"689","attributes":{"Eigenvector Centrality":"0.327417913267161","Betweenness Centrality":"0.0034073119067962805","Appearances":"6","No":"14","Country":"Japan","Club Country":"Japan","Club":"Sanfrecce Hiroshima","Weighted Degree":"23.0","Modularity Class":"27","Date of birth / Age":"22 February 1986 (aged 28)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.315450643776824"},"color":"rgb(67,100,229)","size":11.333333015441895},{"label":"Pablo Zabaleta","x":-933.6387939453125,"y":24.648056030273438,"id":"555","attributes":{"Eigenvector Centrality":"0.6398902783818313","Betweenness Centrality":"0.003598075368399343","Appearances":"36","No":"4","Country":"Argentina","Club Country":"England","Club":"Manchester City","Weighted Degree":"29.0","Modularity Class":"19","Date of birth / Age":"16 January 1985 (aged 29)","Degree":"29","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3316787003610108"},"color":"rgb(67,229,229)","size":19.333332061767578},{"label":"Luis Saritama","x":-1546.898681640625,"y":-441.077392578125,"id":"429","attributes":{"Eigenvector Centrality":"0.7525405481416904","Betweenness Centrality":"0.006691544296226193","Appearances":"49","No":"19","Country":"Ecuador","Club Country":"Ecuador","Club":"Barcelona","Weighted Degree":"35.0","Modularity Class":"4","Date of birth / Age":"20 October 1983 (aged 30)","Degree":"35","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3253652058432935"},"color":"rgb(229,67,132)","size":27.33333396911621},{"label":"Orestis Karnezis","x":1393.8565673828125,"y":576.5565795898438,"id":"545","attributes":{"Eigenvector Centrality":"0.28385897578556757","Betweenness Centrality":"0.01153344916312804","Appearances":"19","No":"1","Country":"Greece","Club Country":"Spain","Club":"Granada","Weighted Degree":"24.0","Modularity Class":"15","Date of birth / Age":"11 July 1985 (aged 28)","Degree":"24","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.30624999999999997"},"color":"rgb(229,67,100)","size":12.666666984558105},{"label":"Abel Aguilar","x":-660.8257446289062,"y":1009.1897583007812,"id":"2","attributes":{"Eigenvector Centrality":"0.33885801794641307","Betweenness Centrality":"0.004574685606976985","Appearances":"49","No":"8","Country":"Colombia","Club Country":"France","Club":"Toulouse","Weighted Degree":"24.0","Modularity Class":"11","Date of birth / Age":"6 January 1985 (aged 29)","Degree":"24","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.3088235294117647"},"color":"rgb(67,67,229)","size":12.666666984558105},{"label":"Panagiotis Glykos","x":1575.4261474609375,"y":522.7161865234375,"id":"556","attributes":{"Eigenvector Centrality":"0.2581333696341679","Betweenness Centrality":"0.0","Appearances":"2","No":"12","Country":"Greece","Club Country":"Greece","Club":"PAOK","Weighted Degree":"22.0","Modularity Class":"15","Date of birth / Age":"3 June 1986 (aged 28)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.2760045061960195"},"color":"rgb(229,67,100)","size":10.0},{"label":"José Juan Vázquez","x":-2102.5595703125,"y":434.6721496582031,"id":"357","attributes":{"Eigenvector Centrality":"0.27712645238679473","Betweenness Centrality":"0.0","Appearances":"5","No":"23","Country":"Mexico","Club Country":"Mexico","Club":"León","Weighted Degree":"22.0","Modularity Class":"21","Date of birth / Age":"14 March 1988 (aged 26)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.2599929253625752"},"color":"rgb(67,229,67)","size":10.0},{"label":"Vincent Kompany (c)","x":-575.3739013671875,"y":-726.921630859375,"id":"707","attributes":{"Eigenvector Centrality":"0.7270895604312667","Betweenness Centrality":"0.008072864238933854","Appearances":"59","No":"4","Country":"Belgium","Club Country":"England","Club":"Manchester City","Weighted Degree":"31.0","Modularity Class":"28","Date of birth / Age":"10 April 1986 (aged 28)","Degree":"31","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3506679389312977"},"color":"rgb(67,229,132)","size":22.0},{"label":"Mehrdad Pouladi","x":1894.86376953125,"y":1109.2691650390625,"id":"495","attributes":{"Eigenvector Centrality":"0.2127442934422965","Betweenness Centrality":"0.0","Appearances":"20","No":"23","Country":"Iran","Club Country":"Iran","Club":"Persepolis","Weighted Degree":"22.0","Modularity Class":"1","Date of birth / Age":"26 February 1987 (aged 27)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.206809229037704"},"color":"rgb(67,197,229)","size":10.0},{"label":"Marcelo Brozovic","x":-406.1941833496094,"y":695.7294311523438,"id":"444","attributes":{"Eigenvector Centrality":"0.35648846045640376","Betweenness Centrality":"0.0013005076523818384","Appearances":"1","No":"14","Country":"Croatia","Club Country":"Croatia","Club":"Dinamo Zagreb","Weighted Degree":"23.0","Modularity Class":"25","Date of birth / Age":"16 October 1992 (aged 21)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.30209617755856966"},"color":"rgb(132,67,229)","size":11.333333015441895},{"label":"Laurent Ciman","x":-542.019287109375,"y":-660.8407592773438,"id":"408","attributes":{"Eigenvector Centrality":"0.5473733076826977","Betweenness Centrality":"0.004841485029495745","Appearances":"8","No":"23","Country":"Belgium","Club Country":"Belgium","Club":"Standard Liège","Weighted Degree":"24.0","Modularity Class":"28","Date of birth / Age":"5 August 1985 (aged 28)","Degree":"24","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3359232175502742"},"color":"rgb(67,229,132)","size":12.666666984558105},{"label":"Isaác Brizuela","x":-2104.457275390625,"y":342.27984619140625,"id":"295","attributes":{"Eigenvector Centrality":"0.27712645238679473","Betweenness Centrality":"0.0","Appearances":"7","No":"17","Country":"Mexico","Club Country":"Mexico","Club":"Toluca","Weighted Degree":"22.0","Modularity Class":"21","Date of birth / Age":"28 August 1990 (aged 23)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.2599929253625752"},"color":"rgb(67,229,67)","size":10.0},{"label":"Mario Yepes (c)","x":-719.3209838867188,"y":1256.8892822265625,"id":"457","attributes":{"Eigenvector Centrality":"0.326518739989132","Betweenness Centrality":"0.0018851206504077599","Appearances":"98","No":"3","Country":"Colombia","Club Country":"Italy","Club":"Atalanta","Weighted Degree":"23.0","Modularity Class":"11","Date of birth / Age":"13 January 1976 (aged 38)","Degree":"23","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.2995110024449878"},"color":"rgb(67,67,229)","size":11.333333015441895},{"label":"Ramires","x":-481.0262451171875,"y":-469.7139587402344,"id":"586","attributes":{"Eigenvector Centrality":"0.7525362816963487","Betweenness Centrality":"0.002196566654268722","Appearances":"42","No":"16","Country":"Brazil","Club Country":"England","Club":"Chelsea","Weighted Degree":"30.0","Modularity Class":"23","Date of birth / Age":"24 March 1987 (aged 27)","Degree":"30","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3471894189891356"},"color":"rgb(229,67,197)","size":20.666667938232422},{"label":"Cédric Djeugoué","x":458.0302734375,"y":113.75821685791016,"id":"107","attributes":{"Eigenvector Centrality":"0.32277187794408035","Betweenness Centrality":"0.0","Appearances":"3","No":"4","Country":"Cameroon","Club Country":"Cameroon","Club":"Coton Sport","Weighted Degree":"22.0","Modularity Class":"17","Date of birth / Age":"28 August 1992 (aged 21)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3139683895771038"},"color":"rgb(67,132,229)","size":10.0},{"label":"Igor Denisov","x":-1478.451904296875,"y":-1427.125244140625,"id":"293","attributes":{"Eigenvector Centrality":"0.28166227463506127","Betweenness Centrality":"6.368705012250895E-4","Appearances":"43","No":"7","Country":"Russia","Club Country":"Russia","Club":"Dynamo Moscow","Weighted Degree":"23.0","Modularity Class":"2","Date of birth / Age":"17 May 1984 (aged 30)","Degree":"23","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.25538568450312715"},"color":"rgb(229,67,67)","size":11.333333015441895},{"label":"Marco Fabián","x":-2042.7996826171875,"y":288.5499267578125,"id":"446","attributes":{"Eigenvector Centrality":"0.29131873163694544","Betweenness Centrality":"0.0012783129193471678","Appearances":"15","No":"8","Country":"Mexico","Club Country":"Mexico","Club":"Cruz Azul","Weighted Degree":"23.0","Modularity Class":"21","Date of birth / Age":"21 July 1989 (aged 24)","Degree":"23","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.2744585511575803"},"color":"rgb(67,229,67)","size":11.333333015441895},{"label":"Kevin-Prince Boateng","x":528.2719116210938,"y":1086.7677001953125,"id":"387","attributes":{"Eigenvector Centrality":"0.3920782711719237","Betweenness Centrality":"0.013927046623876642","Appearances":"13","No":"9","Country":"Ghana","Club Country":"Germany","Club":"Schalke \u002704","Weighted Degree":"28.0","Modularity Class":"5","Date of birth / Age":"6 March 1987 (aged 27)","Degree":"28","Position":"FW","Eccentricity":"4.0","Closeness Centrality":"0.3287119856887299"},"color":"rgb(67,229,197)","size":18.0},{"label":"Shola Ameobi","x":18.68687629699707,"y":-1408.741943359375,"id":"649","attributes":{"Eigenvector Centrality":"0.39186636186315155","Betweenness Centrality":"0.004728167800452107","Appearances":"7","No":"23","Country":"Nigeria","Club Country":"England","Club":"Newcastle United","Weighted Degree":"27.0","Modularity Class":"14","Date of birth / Age":"12 October 1981 (aged 32)","Degree":"27","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.31873373807458805"},"color":"rgb(67,229,100)","size":16.666667938232422},{"label":"Oribe Peralta","x":-2123.54345703125,"y":394.2029113769531,"id":"546","attributes":{"Eigenvector Centrality":"0.27712645238679473","Betweenness Centrality":"0.0","Appearances":"33","No":"19","Country":"Mexico","Club Country":"Mexico","Club":"Santos Laguna","Weighted Degree":"22.0","Modularity Class":"21","Date of birth / Age":"12 January 1984 (aged 30)","Degree":"22","Position":"FW","Eccentricity":"7.0","Closeness Centrality":"0.2599929253625752"},"color":"rgb(67,229,67)","size":10.0},{"label":"Marouane Fellaini","x":-655.5911865234375,"y":-756.7737426757812,"id":"460","attributes":{"Eigenvector Centrality":"0.8465738555476342","Betweenness Centrality":"0.005671820760248386","Appearances":"50","No":"8","Country":"Belgium","Club Country":"England","Club":"Manchester United","Weighted Degree":"34.0","Modularity Class":"28","Date of birth / Age":"22 November 1987 (aged 26)","Degree":"34","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3554158607350097"},"color":"rgb(67,229,132)","size":26.0},{"label":"Mark Bresciano","x":2122.005615234375,"y":-604.5106811523438,"id":"458","attributes":{"Eigenvector Centrality":"0.22132294330055022","Betweenness Centrality":"0.0","Appearances":"74","No":"23","Country":"Australia","Club Country":"Qatar","Club":"Al-Gharafa","Weighted Degree":"22.0","Modularity Class":"12","Date of birth / Age":"11 February 1980 (aged 34)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.22025771651183698"},"color":"rgb(229,100,67)","size":10.0},{"label":"Juan Pablo Montes","x":1592.6820068359375,"y":-1250.384033203125,"id":"372","attributes":{"Eigenvector Centrality":"0.23664887946331797","Betweenness Centrality":"0.0","Appearances":"11","No":"4","Country":"Honduras","Club Country":"Honduras","Club":"Motagua","Weighted Degree":"22.0","Modularity Class":"7","Date of birth / Age":"26 October 1985 (aged 28)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.26344086021505375"},"color":"rgb(100,67,229)","size":10.0},{"label":"Sokratis Papastathopoulos","x":1506.5098876953125,"y":339.672119140625,"id":"656","attributes":{"Eigenvector Centrality":"0.34048353254028174","Betweenness Centrality":"0.015463773824795727","Appearances":"47","No":"19","Country":"Greece","Club Country":"Germany","Club":"Borussia Dortmund","Weighted Degree":"27.0","Modularity Class":"15","Date of birth / Age":"9 June 1988 (aged 26)","Degree":"27","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.29178245335450576"},"color":"rgb(229,67,100)","size":16.666667938232422},{"label":"Blerim Džemaili","x":-243.03868103027344,"y":290.1379699707031,"id":"88","attributes":{"Eigenvector Centrality":"0.6153709092825856","Betweenness Centrality":"0.004199284588766183","Appearances":"34","No":"15","Country":"Switzerland","Club Country":"Italy","Club":"Napoli","Weighted Degree":"31.0","Modularity Class":"0","Date of birth / Age":"12 April 1986 (aged 28)","Degree":"31","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3331822302810517"},"color":"rgb(164,229,67)","size":22.0},{"label":"Mario Balotelli","x":253.78076171875,"y":886.2698364257812,"id":"452","attributes":{"Eigenvector Centrality":"0.49991402097095833","Betweenness Centrality":"0.003073405743850096","Appearances":"30","No":"9","Country":"Italy","Club Country":"Italy","Club":"Milan","Weighted Degree":"27.0","Modularity Class":"3","Date of birth / Age":"12 August 1990 (aged 23)","Degree":"27","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.31928757602085145"},"color":"rgb(197,229,67)","size":16.666667938232422},{"label":"Ivan Rakitic","x":-359.27825927734375,"y":645.7860717773438,"id":"300","attributes":{"Eigenvector Centrality":"0.38837093893822316","Betweenness Centrality":"0.003900575726937713","Appearances":"62","No":"7","Country":"Croatia","Club Country":"Spain","Club":"Sevilla","Weighted Degree":"25.0","Modularity Class":"25","Date of birth / Age":"10 March 1988 (aged 26)","Degree":"25","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.31873373807458805"},"color":"rgb(132,67,229)","size":14.0},{"label":"Denis Glushakov","x":-1381.390869140625,"y":-1518.66748046875,"id":"158","attributes":{"Eigenvector Centrality":"0.26569304291819806","Betweenness Centrality":"0.0","Appearances":"26","No":"8","Country":"Russia","Club Country":"Russia","Club":"Spartak Moscow","Weighted Degree":"22.0","Modularity Class":"2","Date of birth / Age":"27 January 1987 (aged 27)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.23244781783681215"},"color":"rgb(229,67,67)","size":10.0},{"label":"Alexander Mejía","x":-761.3262329101562,"y":1152.329833984375,"id":"31","attributes":{"Eigenvector Centrality":"0.31394925107891597","Betweenness Centrality":"0.0","Appearances":"8","No":"15","Country":"Colombia","Club Country":"Colombia","Club":"Atlético Nacional","Weighted Degree":"22.0","Modularity Class":"11","Date of birth / Age":"11 July 1988 (aged 25)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.29329608938547486"},"color":"rgb(67,67,229)","size":10.0},{"label":"Iker Casillas (c)","x":-800.6239624023438,"y":-169.28741455078125,"id":"294","attributes":{"Eigenvector Centrality":"0.9040112595591265","Betweenness Centrality":"0.001687861941424018","Appearances":"154","No":"1","Country":"Spain","Club Country":"Spain","Club":"Real Madrid","Weighted Degree":"31.0","Modularity Class":"23","Date of birth / Age":"20 May 1981 (aged 33)","Degree":"31","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3350045578851413"},"color":"rgb(229,67,197)","size":22.0},{"label":"Bastian Schweinsteiger","x":244.85414123535156,"y":-373.9827575683594,"id":"79","attributes":{"Eigenvector Centrality":"0.6585766805388439","Betweenness Centrality":"0.0026429368589338613","Appearances":"102","No":"7","Country":"Germany","Club Country":"Germany","Club":"Bayern Munich","Weighted Degree":"29.0","Modularity Class":"13","Date of birth / Age":"1 August 1984 (aged 29)","Degree":"29","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3390221402214022"},"color":"rgb(67,229,164)","size":19.333332061767578},{"label":"Héctor Moreno","x":-1943.870849609375,"y":364.6249694824219,"id":"276","attributes":{"Eigenvector Centrality":"0.2913525846132968","Betweenness Centrality":"0.0014244038755752933","Appearances":"53","No":"15","Country":"Mexico","Club Country":"Spain","Club":"Espanyol","Weighted Degree":"23.0","Modularity Class":"21","Date of birth / Age":"17 January 1988 (aged 26)","Degree":"23","Position":"DF","Eccentricity":"6.0","Closeness Centrality":"0.2797868290826037"},"color":"rgb(67,229,67)","size":11.333333015441895},{"label":"Enner Valencia","x":-1712.62646484375,"y":-633.4451293945312,"id":"201","attributes":{"Eigenvector Centrality":"0.3623062182068215","Betweenness Centrality":"0.0","Appearances":"10","No":"13","Country":"Ecuador","Club Country":"Mexico","Club":"Pachuca","Weighted Degree":"22.0","Modularity Class":"4","Date of birth / Age":"11 April 1989 (aged 25)","Degree":"22","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.2881223049784398"},"color":"rgb(229,67,132)","size":10.0},{"label":"Miiko Albornoz","x":-282.7862243652344,"y":1583.49462890625,"id":"512","attributes":{"Eigenvector Centrality":"0.316119262177923","Betweenness Centrality":"0.0","Appearances":"2","No":"3","Country":"Chile","Club Country":"Sweden","Club":"Malmö FF","Weighted Degree":"22.0","Modularity Class":"18","Date of birth / Age":"30 November 1990 (aged 23)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.2737430167597765"},"color":"rgb(229,132,67)","size":10.0},{"label":"Nigel de Jong","x":764.1231689453125,"y":266.0992126464844,"id":"534","attributes":{"Eigenvector Centrality":"0.4525178607313098","Betweenness Centrality":"0.007743435699427788","Appearances":"71","No":"6","Country":"Netherlands","Club Country":"Italy","Club":"Milan","Weighted Degree":"29.0","Modularity Class":"22","Date of birth / Age":"13 November 1984 (aged 29)","Degree":"29","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3300404131118096"},"color":"rgb(197,67,229)","size":19.333332061767578},{"label":"Diego Forlán","x":22.54448699951172,"y":32.10325241088867,"id":"165","attributes":{"Eigenvector Centrality":"0.40103485022538","Betweenness Centrality":"0.0023543724845431786","Appearances":"110","No":"10","Country":"Uruguay","Club Country":"Japan","Club":"Cerezo Osaka","Weighted Degree":"24.0","Modularity Class":"6","Date of birth / Age":"19 May 1979 (aged 35)","Degree":"24","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3220858895705521"},"color":"rgb(229,197,67)","size":12.666666984558105},{"label":"Marco Verratti","x":74.62252044677734,"y":597.4002075195312,"id":"449","attributes":{"Eigenvector Centrality":"0.577944433296703","Betweenness Centrality":"0.001710601263663759","Appearances":"6","No":"23","Country":"Italy","Club Country":"France","Club":"Paris Saint-Germain","Weighted Degree":"29.0","Modularity Class":"3","Date of birth / Age":"5 November 1992 (aged 21)","Degree":"29","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3166738474795347"},"color":"rgb(197,229,67)","size":19.333332061767578},{"label":"Joe Hart","x":-212.69390869140625,"y":-704.6478271484375,"id":"335","attributes":{"Eigenvector Centrality":"0.7015324384017536","Betweenness Centrality":"0.003652191896387035","Appearances":"41","No":"1","Country":"England","Club Country":"England","Club":"Manchester City","Weighted Degree":"30.0","Modularity Class":"28","Date of birth / Age":"19 May 1987 (aged 27)","Degree":"30","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3316787003610108"},"color":"rgb(67,229,132)","size":20.666667938232422},{"label":"Loïc Feudjou","x":464.741943359375,"y":157.33299255371094,"id":"420","attributes":{"Eigenvector Centrality":"0.3227718779440803","Betweenness Centrality":"0.0","Appearances":"2","No":"1","Country":"Cameroon","Club Country":"Cameroon","Club":"Coton Sport","Weighted Degree":"22.0","Modularity Class":"17","Date of birth / Age":"14 April 1992 (aged 22)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3139683895771038"},"color":"rgb(67,132,229)","size":10.0},{"label":"Wakaso Mubarak","x":209.4365234375,"y":1057.447998046875,"id":"709","attributes":{"Eigenvector Centrality":"0.32387682859035066","Betweenness Centrality":"0.009270286480100764","Appearances":"17","No":"22","Country":"Ghana","Club Country":"Russia","Club":"Rubin Kazan","Weighted Degree":"25.0","Modularity Class":"5","Date of birth / Age":"25 July 1990 (aged 23)","Degree":"25","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2897122585731179"},"color":"rgb(67,229,197)","size":14.0},{"label":"Alexander Domínguez","x":-1643.0283203125,"y":-689.7501831054688,"id":"30","attributes":{"Eigenvector Centrality":"0.3623062182068214","Betweenness Centrality":"0.0","Appearances":"18","No":"22","Country":"Ecuador","Club Country":"Ecuador","Club":"LDU Quito","Weighted Degree":"22.0","Modularity Class":"4","Date of birth / Age":"5 June 1987 (aged 27)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.2881223049784398"},"color":"rgb(229,67,132)","size":10.0},{"label":"Camilo Vargas","x":-870.7738037109375,"y":1102.7423095703125,"id":"96","attributes":{"Eigenvector Centrality":"0.32771831640802235","Betweenness Centrality":"0.0031253464825959647","Appearances":"0","No":"12","Country":"Colombia","Club Country":"Colombia","Club":"Santa Fe","Weighted Degree":"23.0","Modularity Class":"11","Date of birth / Age":"9 March 1989 (aged 25)","Degree":"23","Position":"GK","Eccentricity":"6.0","Closeness Centrality":"0.3046000828843763"},"color":"rgb(67,67,229)","size":11.333333015441895},{"label":"Gordon Schildenfeld","x":-217.73817443847656,"y":655.733154296875,"id":"263","attributes":{"Eigenvector Centrality":"0.35596191653510817","Betweenness Centrality":"0.00248185018192758","Appearances":"21","No":"13","Country":"Croatia","Club Country":"Greece","Club":"Panathinaikos","Weighted Degree":"23.0","Modularity Class":"25","Date of birth / Age":"18 March 1985 (aged 29)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.30676126878130217"},"color":"rgb(132,67,229)","size":11.333333015441895},{"label":"Miguel Ángel Ponce","x":-2068.725830078125,"y":475.1539306640625,"id":"509","attributes":{"Eigenvector Centrality":"0.2771264523867947","Betweenness Centrality":"0.0","Appearances":"8","No":"16","Country":"Mexico","Club Country":"Mexico","Club":"Toluca","Weighted Degree":"22.0","Modularity Class":"21","Date of birth / Age":"12 April 1989 (aged 25)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.2599929253625752"},"color":"rgb(67,229,67)","size":10.0},{"label":"Klaas-Jan Huntelaar","x":809.1665649414062,"y":91.84487915039062,"id":"396","attributes":{"Eigenvector Centrality":"0.4358139473318699","Betweenness Centrality":"0.00591887145222094","Appearances":"62","No":"19","Country":"Netherlands","Club Country":"Germany","Club":"Schalke \u002704","Weighted Degree":"28.0","Modularity Class":"22","Date of birth / Age":"12 August 1983 (aged 30)","Degree":"28","Position":"FW","Eccentricity":"4.0","Closeness Centrality":"0.34106728538283065"},"color":"rgb(197,67,229)","size":18.0},{"label":"Adam Lallana","x":-133.68426513671875,"y":-732.5047607421875,"id":"5","attributes":{"Eigenvector Centrality":"0.5904515327423898","Betweenness Centrality":"0.0016054547217210155","Appearances":"6","No":"20","Country":"England","Club Country":"England","Club":"Southampton","Weighted Degree":"26.0","Modularity Class":"28","Date of birth / Age":"10 May 1988 (aged 26)","Degree":"26","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.32407407407407407"},"color":"rgb(67,229,132)","size":15.333333969116211},{"label":"Ognjen Vranješ","x":1242.7872314453125,"y":-442.58514404296875,"id":"538","attributes":{"Eigenvector Centrality":"0.2839695417201138","Betweenness Centrality":"0.0","Appearances":"13","No":"6","Country":"Bosnia and Herzegovina","Club Country":"Turkey","Club":"Elaz??spor","Weighted Degree":"22.0","Modularity Class":"20","Date of birth / Age":"24 October 1989 (aged 24)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3077889447236181"},"color":"rgb(132,229,67)","size":10.0},{"label":"Nabil Bentaleb","x":-1282.9583740234375,"y":861.7017822265625,"id":"525","attributes":{"Eigenvector Centrality":"0.3967886399693337","Betweenness Centrality":"0.0057727171211353545","Appearances":"3","No":"14","Country":"Algeria","Club Country":"England","Club":"Tottenham Hotspur","Weighted Degree":"27.0","Modularity Class":"24","Date of birth / Age":"24 November 1994 (aged 19)","Degree":"27","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3127659574468085"},"color":"rgb(67,164,229)","size":16.666667938232422},{"label":"Christian Stuani","x":-159.97439575195312,"y":40.9938850402832,"id":"121","attributes":{"Eigenvector Centrality":"0.38716306457328087","Betweenness Centrality":"0.002173292405131628","Appearances":"10","No":"11","Country":"Uruguay","Club Country":"Spain","Club":"Espanyol","Weighted Degree":"23.0","Modularity Class":"6","Date of birth / Age":"12 October 1986 (aged 27)","Degree":"23","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3169469598965071"},"color":"rgb(229,197,67)","size":11.333333015441895},{"label":"Wayne Rooney","x":-356.8543395996094,"y":-834.0883178710938,"id":"713","attributes":{"Eigenvector Centrality":"0.7938188270448313","Betweenness Centrality":"0.0038886080479693477","Appearances":"92","No":"10","Country":"England","Club Country":"England","Club":"Manchester United","Weighted Degree":"32.0","Modularity Class":"28","Date of birth / Age":"24 October 1985 (aged 28)","Degree":"32","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3393351800554017"},"color":"rgb(67,229,132)","size":23.33333396911621},{"label":"Víctor Ibarbo","x":-760.33837890625,"y":1293.089111328125,"id":"701","attributes":{"Eigenvector Centrality":"0.32651873998913206","Betweenness Centrality":"0.0018851206504077605","Appearances":"9","No":"14","Country":"Colombia","Club Country":"Italy","Club":"Cagliari","Weighted Degree":"23.0","Modularity Class":"11","Date of birth / Age":"19 May 1990 (aged 24)","Degree":"23","Position":"FW","Eccentricity":"7.0","Closeness Centrality":"0.2995110024449878"},"color":"rgb(67,67,229)","size":11.333333015441895},{"label":"Stephan Lichtsteiner","x":67.66877746582031,"y":456.6788330078125,"id":"661","attributes":{"Eigenvector Centrality":"0.6056758151342643","Betweenness Centrality":"0.009695316861352839","Appearances":"63","No":"2","Country":"Switzerland","Club Country":"Italy","Club":"Juventus","Weighted Degree":"33.0","Modularity Class":"0","Date of birth / Age":"16 January 1984 (aged 30)","Degree":"33","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3272484416740873"},"color":"rgb(164,229,67)","size":24.666667938232422},{"label":"Stefanos Kapino","x":1427.728271484375,"y":531.8199462890625,"id":"660","attributes":{"Eigenvector Centrality":"0.28485567017526575","Betweenness Centrality":"0.005086946710578289","Appearances":"2","No":"13","Country":"Greece","Club Country":"Greece","Club":"Panathinaikos","Weighted Degree":"24.0","Modularity Class":"15","Date of birth / Age":"18 March 1994 (aged 20)","Degree":"24","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.29108910891089107"},"color":"rgb(229,67,100)","size":12.666666984558105},{"label":"Daley Blind","x":865.136962890625,"y":-4.895512104034424,"id":"133","attributes":{"Eigenvector Centrality":"0.335211163684756","Betweenness Centrality":"0.0","Appearances":"12","No":"5","Country":"Netherlands","Club Country":"Netherlands","Club":"Ajax","Weighted Degree":"22.0","Modularity Class":"22","Date of birth / Age":"9 March 1990 (aged 24)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3088235294117647"},"color":"rgb(197,67,229)","size":10.0},{"label":"Domagoj Vida","x":-257.2379455566406,"y":568.6809692382812,"id":"175","attributes":{"Eigenvector Centrality":"0.3750066769920371","Betweenness Centrality":"0.0014678886642237275","Appearances":"23","No":"21","Country":"Croatia","Club Country":"Ukraine","Club":"Dynamo Kyiv","Weighted Degree":"24.0","Modularity Class":"25","Date of birth / Age":"29 April 1989 (aged 25)","Degree":"24","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.31450577663671375"},"color":"rgb(132,67,229)","size":12.666666984558105},{"label":"DaMarcus Beasley","x":860.4318237304688,"y":-1509.4605712890625,"id":"134","attributes":{"Eigenvector Centrality":"0.2718151842935107","Betweenness Centrality":"0.0","Appearances":"116","No":"7","Country":"United States","Club Country":"Mexico","Club":"Puebla","Weighted Degree":"22.0","Modularity Class":"26","Date of birth / Age":"24 May 1982 (aged 32)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.28021349599695006"},"color":"rgb(100,229,67)","size":10.0},{"label":"Guillermo Ochoa","x":-2012.4979248046875,"y":495.5871276855469,"id":"267","attributes":{"Eigenvector Centrality":"0.2891264231632272","Betweenness Centrality":"0.0013552426869013025","Appearances":"59","No":"13","Country":"Mexico","Club Country":"France","Club":"Ajaccio","Weighted Degree":"23.0","Modularity Class":"21","Date of birth / Age":"13 July 1985 (aged 28)","Degree":"23","Position":"GK","Eccentricity":"6.0","Closeness Centrality":"0.2753840389659048"},"color":"rgb(67,229,67)","size":11.333333015441895},{"label":"Gonzalo Jara","x":-235.43576049804688,"y":1571.703369140625,"id":"262","attributes":{"Eigenvector Centrality":"0.316119262177923","Betweenness Centrality":"0.0","Appearances":"65","No":"18","Country":"Chile","Club Country":"England","Club":"Nottingham Forest","Weighted Degree":"22.0","Modularity Class":"18","Date of birth / Age":"29 August 1985 (aged 28)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.2737430167597765"},"color":"rgb(229,132,67)","size":10.0},{"label":"Julian Draxler","x":528.5164184570312,"y":-263.5556335449219,"id":"374","attributes":{"Eigenvector Centrality":"0.5529715553555452","Betweenness Centrality":"0.006227653676219969","Appearances":"11","No":"14","Country":"Germany","Club Country":"Germany","Club":"Schalke \u002704","Weighted Degree":"27.0","Modularity Class":"13","Date of birth / Age":"20 September 1993 (aged 20)","Degree":"27","Position":"MF","Eccentricity":"4.0","Closeness Centrality":"0.3353102189781022"},"color":"rgb(67,229,164)","size":16.666667938232422},{"label":"André Almeida","x":-733.0572509765625,"y":266.98699951171875,"id":"42","attributes":{"Eigenvector Centrality":"0.4623139362600412","Betweenness Centrality":"0.0011159545915913598","Appearances":"5","No":"19","Country":"Portugal","Club Country":"Portugal","Club":"Benfica","Weighted Degree":"25.0","Modularity Class":"8","Date of birth / Age":"10 September 1990 (aged 23)","Degree":"25","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.31722054380664655"},"color":"rgb(229,164,67)","size":14.0},{"label":"Aleksandr Kokorin","x":-1414.3739013671875,"y":-1377.2596435546875,"id":"22","attributes":{"Eigenvector Centrality":"0.2816622746350614","Betweenness Centrality":"6.368705012250895E-4","Appearances":"21","No":"9","Country":"Russia","Club Country":"Russia","Club":"Dynamo Moscow","Weighted Degree":"23.0","Modularity Class":"2","Date of birth / Age":"19 March 1991 (aged 23)","Degree":"23","Position":"FW","Eccentricity":"6.0","Closeness Centrality":"0.25538568450312715"},"color":"rgb(229,67,67)","size":11.333333015441895},{"label":"Felipe Gutiérrez","x":-184.13504028320312,"y":1490.4881591796875,"id":"223","attributes":{"Eigenvector Centrality":"0.316119262177923","Betweenness Centrality":"0.0","Appearances":"18","No":"16","Country":"Chile","Club Country":"Netherlands","Club":"Twente","Weighted Degree":"22.0","Modularity Class":"18","Date of birth / Age":"8 October 1990 (aged 23)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.2737430167597765"},"color":"rgb(229,132,67)","size":10.0},{"label":"Simon Mignolet","x":-491.4549255371094,"y":-919.83154296875,"id":"654","attributes":{"Eigenvector Centrality":"0.7087966227214388","Betweenness Centrality":"0.004200915543181152","Appearances":"14","No":"12","Country":"Belgium","Club Country":"England","Club":"Liverpool","Weighted Degree":"31.0","Modularity Class":"28","Date of birth / Age":"6 August 1988 (aged 25)","Degree":"31","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.34329752452125173"},"color":"rgb(67,229,132)","size":22.0},{"label":"Maxwell","x":-388.1637878417969,"y":-99.59259033203125,"id":"490","attributes":{"Eigenvector Centrality":"0.7136149540335622","Betweenness Centrality":"0.0035076449501830744","Appearances":"9","No":"14","Country":"Brazil","Club Country":"France","Club":"Paris Saint-Germain","Weighted Degree":"30.0","Modularity Class":"23","Date of birth / Age":"27 August 1981 (aged 32)","Degree":"30","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3336359509759419"},"color":"rgb(229,67,197)","size":20.666667938232422},{"label":"Mohamed Zemmamouche","x":-1405.252685546875,"y":1223.2103271484375,"id":"519","attributes":{"Eigenvector Centrality":"0.29589355686287977","Betweenness Centrality":"0.0","Appearances":"7","No":"16","Country":"Algeria","Club Country":"Algeria","Club":"USM Alger","Weighted Degree":"22.0","Modularity Class":"24","Date of birth / Age":"19 March 1985 (aged 29)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.28389339513325607"},"color":"rgb(67,164,229)","size":10.0},{"label":"Ciro Immobile","x":317.4281921386719,"y":794.2503662109375,"id":"123","attributes":{"Eigenvector Centrality":"0.43196054419267377","Betweenness Centrality":"0.0018820457212751422","Appearances":"2","No":"17","Country":"Italy","Club Country":"Italy","Club":"Torino","Weighted Degree":"23.0","Modularity Class":"3","Date of birth / Age":"20 February 1990 (aged 24)","Degree":"23","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.30497925311203317"},"color":"rgb(197,229,67)","size":11.333333015441895},{"label":"Stipe Pletikosa","x":-333.28179931640625,"y":696.1630249023438,"id":"669","attributes":{"Eigenvector Centrality":"0.34443939620173625","Betweenness Centrality":"0.0","Appearances":"111","No":"1","Country":"Croatia","Club Country":"Russia","Club":"Rostov","Weighted Degree":"22.0","Modularity Class":"25","Date of birth / Age":"8 January 1979 (aged 35)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.29178245335450576"},"color":"rgb(132,67,229)","size":10.0},{"label":"Ismaël Diomandé","x":445.3325500488281,"y":-874.9510498046875,"id":"297","attributes":{"Eigenvector Centrality":"0.3273739867705004","Betweenness Centrality":"5.067313329973086E-4","Appearances":"2","No":"14","Country":"Ivory Coast","Club Country":"France","Club":"Saint-Étienne","Weighted Degree":"23.0","Modularity Class":"9","Date of birth / Age":"28 August 1992 (aged 21)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.30548628428927677"},"color":"rgb(164,67,229)","size":11.333333015441895},{"label":"Roger Espinoza","x":1525.8236083984375,"y":-1042.1474609375,"id":"609","attributes":{"Eigenvector Centrality":"0.24958708367603963","Betweenness Centrality":"0.00224748146417088","Appearances":"42","No":"15","Country":"Honduras","Club Country":"England","Club":"Wigan Athletic","Weighted Degree":"23.0","Modularity Class":"7","Date of birth / Age":"25 October 1986 (aged 27)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.28021349599695006"},"color":"rgb(100,67,229)","size":11.333333015441895},{"label":"Júnior Díaz","x":2052.333251953125,"y":457.9170837402344,"id":"378","attributes":{"Eigenvector Centrality":"0.2858658445617843","Betweenness Centrality":"0.019511326160720172","Appearances":"62","No":"15","Country":"Costa Rica","Club Country":"Germany","Club":"Mainz 05","Weighted Degree":"26.0","Modularity Class":"29","Date of birth / Age":"12 September 1983 (aged 30)","Degree":"26","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2916666666666667"},"color":"rgb(229,229,67)","size":15.333333969116211},{"label":"Diego Pérez","x":71.02754211425781,"y":37.87593078613281,"id":"168","attributes":{"Eigenvector Centrality":"0.3977686122666346","Betweenness Centrality":"0.008159853566079373","Appearances":"89","No":"15","Country":"Uruguay","Club Country":"Italy","Club":"Bologna","Weighted Degree":"24.0","Modularity Class":"6","Date of birth / Age":"18 May 1980 (aged 34)","Degree":"24","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.32637655417406747"},"color":"rgb(229,197,67)","size":12.666666984558105},{"label":"Danijel Subašic","x":-426.1968078613281,"y":636.2631225585938,"id":"143","attributes":{"Eigenvector Centrality":"0.39279324564134416","Betweenness Centrality":"0.002055537854408172","Appearances":"6","No":"23","Country":"Croatia","Club Country":"France","Club":"AS Monaco","Weighted Degree":"25.0","Modularity Class":"25","Date of birth / Age":"27 October 1984 (aged 29)","Degree":"25","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3150450064294899"},"color":"rgb(132,67,229)","size":14.0},{"label":"Luis Suárez","x":-100.21392822265625,"y":-246.3746795654297,"id":"430","attributes":{"Eigenvector Centrality":"0.5668349766194245","Betweenness Centrality":"0.005273786093229346","Appearances":"77","No":"9","Country":"Uruguay","Club Country":"England","Club":"Liverpool","Weighted Degree":"31.0","Modularity Class":"6","Date of birth / Age":"24 January 1987 (aged 27)","Degree":"31","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3365384615384615"},"color":"rgb(229,197,67)","size":22.0},{"label":"Marvin Chávez","x":1429.798828125,"y":-1179.989501953125,"id":"464","attributes":{"Eigenvector Centrality":"0.25036259885703577","Betweenness Centrality":"0.004810204715637005","Appearances":"42","No":"23","Country":"Honduras","Club Country":"United States","Club":"Chivas USA","Weighted Degree":"23.0","Modularity Class":"7","Date of birth / Age":"3 November 1983 (aged 30)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.28171713300114987"},"color":"rgb(100,67,229)","size":11.333333015441895},{"label":"Allan Nyom","x":381.5302734375,"y":285.7757568359375,"id":"37","attributes":{"Eigenvector Centrality":"0.3467862797568034","Betweenness Centrality":"0.00587663072397192","Appearances":"10","No":"22","Country":"Cameroon","Club Country":"Spain","Club":"Granada","Weighted Degree":"24.0","Modularity Class":"17","Date of birth / Age":"10 May 1988 (aged 26)","Degree":"24","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3328804347826087"},"color":"rgb(67,132,229)","size":12.666666984558105},{"label":"Santiago Arias","x":-524.8426513671875,"y":1069.8533935546875,"id":"630","attributes":{"Eigenvector Centrality":"0.35261132545784823","Betweenness Centrality":"0.01168806541697648","Appearances":"6","No":"4","Country":"Colombia","Club Country":"Netherlands","Club":"PSV","Weighted Degree":"25.0","Modularity Class":"11","Date of birth / Age":"13 January 1992 (aged 22)","Degree":"25","Position":"DF","Eccentricity":"6.0","Closeness Centrality":"0.3168103448275862"},"color":"rgb(67,67,229)","size":14.0},{"label":"Óscar Duarte","x":2292.369873046875,"y":190.4766845703125,"id":"550","attributes":{"Eigenvector Centrality":"0.2448400755989879","Betweenness Centrality":"0.004512594233796394","Appearances":"11","No":"6","Country":"Costa Rica","Club Country":"Belgium","Club":"Club Brugge","Weighted Degree":"23.0","Modularity Class":"29","Date of birth / Age":"3 June 1989 (aged 25)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2558301427079708"},"color":"rgb(229,229,67)","size":11.333333015441895},{"label":"Abdelmoumene Djabou","x":-1392.5499267578125,"y":1124.161376953125,"id":"1","attributes":{"Eigenvector Centrality":"0.29589355686287977","Betweenness Centrality":"0.0","Appearances":"8","No":"18","Country":"Algeria","Club Country":"Tunisia","Club":"Club Africain","Weighted Degree":"22.0","Modularity Class":"24","Date of birth / Age":"31 January 1987 (aged 27)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.28389339513325607"},"color":"rgb(67,164,229)","size":10.0},{"label":"Juwon Oshaniwa","x":-3.99511456489563,"y":-1656.1483154296875,"id":"379","attributes":{"Eigenvector Centrality":"0.30581490023520397","Betweenness Centrality":"0.0","Appearances":"10","No":"13","Country":"Nigeria","Club Country":"Israel","Club":"Ashdod","Weighted Degree":"22.0","Modularity Class":"14","Date of birth / Age":"14 September 1990 (aged 23)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.28800940438871475"},"color":"rgb(67,229,100)","size":10.0},{"label":"Francisco Silva","x":-207.91714477539062,"y":1451.440673828125,"id":"230","attributes":{"Eigenvector Centrality":"0.316119262177923","Betweenness Centrality":"0.0","Appearances":"12","No":"5","Country":"Chile","Club Country":"Spain","Club":"Osasuna","Weighted Degree":"22.0","Modularity Class":"18","Date of birth / Age":"11 February 1986 (aged 28)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.2737430167597765"},"color":"rgb(229,132,67)","size":10.0},{"label":"Jason Davidson","x":2027.00927734375,"y":-621.2344360351562,"id":"313","attributes":{"Eigenvector Centrality":"0.22132294330055022","Betweenness Centrality":"0.0","Appearances":"7","No":"3","Country":"Australia","Club Country":"Netherlands","Club":"Heracles Almelo","Weighted Degree":"22.0","Modularity Class":"12","Date of birth / Age":"29 June 1991 (aged 22)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.22025771651183698"},"color":"rgb(229,100,67)","size":10.0},{"label":"Mousa Dembélé","x":-780.701416015625,"y":-765.0794067382812,"id":"522","attributes":{"Eigenvector Centrality":"0.5781054780643133","Betweenness Centrality":"0.0013899483715746057","Appearances":"57","No":"19","Country":"Belgium","Club Country":"England","Club":"Tottenham Hotspur","Weighted Degree":"25.0","Modularity Class":"28","Date of birth / Age":"16 July 1987 (aged 26)","Degree":"25","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.33638443935926776"},"color":"rgb(67,229,132)","size":14.0},{"label":"David de Gea","x":-916.8024291992188,"y":-469.9519348144531,"id":"150","attributes":{"Eigenvector Centrality":"1.0","Betweenness Centrality":"0.005194225936839837","Appearances":"1","No":"12","Country":"Spain","Club Country":"England","Club":"Manchester United","Weighted Degree":"34.0","Modularity Class":"23","Date of birth / Age":"7 November 1990 (aged 23)","Degree":"34","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3478466635115949"},"color":"rgb(229,67,197)","size":26.0},{"label":"Tim Cahill","x":2114.5048828125,"y":-511.01007080078125,"id":"680","attributes":{"Eigenvector Centrality":"0.2315995769978224","Betweenness Centrality":"0.0038336165219305914","Appearances":"69","No":"4","Country":"Australia","Club Country":"United States","Club":"New York Red Bulls","Weighted Degree":"23.0","Modularity Class":"12","Date of birth / Age":"6 December 1979 (aged 34)","Degree":"23","Position":"FW","Eccentricity":"6.0","Closeness Centrality":"0.23535062439961577"},"color":"rgb(229,100,67)","size":11.333333015441895},{"label":"Dimitris Salpingidis","x":1578.1973876953125,"y":570.6368408203125,"id":"170","attributes":{"Eigenvector Centrality":"0.2581333696341679","Betweenness Centrality":"0.0","Appearances":"76","No":"14","Country":"Greece","Club Country":"Greece","Club":"PAOK","Weighted Degree":"22.0","Modularity Class":"15","Date of birth / Age":"18 August 1981 (aged 32)","Degree":"22","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.2760045061960195"},"color":"rgb(229,67,100)","size":10.0},{"label":"Arturo Vidal","x":-116.50799560546875,"y":1233.550048828125,"id":"64","attributes":{"Eigenvector Centrality":"0.5204561062047255","Betweenness Centrality":"0.00860736609402208","Appearances":"54","No":"8","Country":"Chile","Club Country":"Italy","Club":"Juventus","Weighted Degree":"32.0","Modularity Class":"18","Date of birth / Age":"22 May 1987 (aged 27)","Degree":"32","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.31599312123817713"},"color":"rgb(229,132,67)","size":23.33333396911621},{"label":"Andy Najar","x":1494.201416015625,"y":-1172.4866943359375,"id":"52","attributes":{"Eigenvector Centrality":"0.25486924877772427","Betweenness Centrality":"0.0055302334935236706","Appearances":"17","No":"17","Country":"Honduras","Club Country":"Belgium","Club":"Anderlecht","Weighted Degree":"23.0","Modularity Class":"7","Date of birth / Age":"16 March 1993 (aged 21)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.28880157170923376"},"color":"rgb(100,67,229)","size":11.333333015441895},{"label":"Alex Song","x":-256.0782775878906,"y":56.99077224731445,"id":"28","attributes":{"Eigenvector Centrality":"0.764223422109595","Betweenness Centrality":"0.016336622858350185","Appearances":"47","No":"6","Country":"Cameroon","Club Country":"Spain","Club":"Barcelona","Weighted Degree":"37.0","Modularity Class":"17","Date of birth / Age":"9 September 1987 (aged 26)","Degree":"37","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.34106728538283065"},"color":"rgb(67,132,229)","size":30.0},{"label":"Georgi Shchennikov","x":-1330.42041015625,"y":-1544.396240234375,"id":"243","attributes":{"Eigenvector Centrality":"0.279753045029421","Betweenness Centrality":"8.329697214751982E-4","Appearances":"4","No":"3","Country":"Russia","Club Country":"Russia","Club":"CSKA Moscow","Weighted Degree":"23.0","Modularity Class":"2","Date of birth / Age":"27 April 1991 (aged 23)","Degree":"23","Position":"DF","Eccentricity":"6.0","Closeness Centrality":"0.2544132917964694"},"color":"rgb(229,67,67)","size":11.333333015441895},{"label":"Mathew Leckie","x":2138.549072265625,"y":-562.8361206054688,"id":"470","attributes":{"Eigenvector Centrality":"0.22132294330055022","Betweenness Centrality":"0.0","Appearances":"8","No":"7","Country":"Australia","Club Country":"Germany","Club":"FSV Frankfurt","Weighted Degree":"22.0","Modularity Class":"12","Date of birth / Age":"4 February 1991 (aged 23)","Degree":"22","Position":"FW","Eccentricity":"7.0","Closeness Centrality":"0.22025771651183698"},"color":"rgb(229,100,67)","size":10.0},{"label":"James Holland","x":2105.74951171875,"y":-645.3329467773438,"id":"307","attributes":{"Eigenvector Centrality":"0.22132294330055022","Betweenness Centrality":"0.0","Appearances":"14","No":"16","Country":"Australia","Club Country":"Austria","Club":"Austria Wien","Weighted Degree":"22.0","Modularity Class":"12","Date of birth / Age":"15 May 1989 (aged 25)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.22025771651183698"},"color":"rgb(229,100,67)","size":10.0},{"label":"Stéphane Ruffier","x":44.78597640991211,"y":-265.3774108886719,"id":"663","attributes":{"Eigenvector Centrality":"0.5087837777709764","Betweenness Centrality":"0.0017249059427091587","Appearances":"2","No":"16","Country":"France","Club Country":"France","Club":"Saint-Étienne","Weighted Degree":"24.0","Modularity Class":"16","Date of birth / Age":"27 September 1986 (aged 27)","Degree":"24","Position":"GK","Eccentricity":"6.0","Closeness Centrality":"0.3164012053379251"},"color":"rgb(229,67,229)","size":12.666666984558105},{"label":"Salvatore Sirigu","x":133.34747314453125,"y":646.74609375,"id":"622","attributes":{"Eigenvector Centrality":"0.5779444332967031","Betweenness Centrality":"0.001710601263663759","Appearances":"8","No":"12","Country":"Italy","Club Country":"France","Club":"Paris Saint-Germain","Weighted Degree":"29.0","Modularity Class":"3","Date of birth / Age":"12 January 1987 (aged 27)","Degree":"29","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3166738474795347"},"color":"rgb(197,229,67)","size":19.333332061767578},{"label":"Rashid Sumaila","x":457.3916015625,"y":1442.739013671875,"id":"590","attributes":{"Eigenvector Centrality":"0.2902743690727881","Betweenness Centrality":"0.0","Appearances":"6","No":"15","Country":"Ghana","Club Country":"South Africa","Club":"Mamelodi Sundowns","Weighted Degree":"22.0","Modularity Class":"5","Date of birth / Age":"18 December 1992 (aged 21)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2849941837921675"},"color":"rgb(67,229,197)","size":10.0},{"label":"Panagiotis Tachtsidis","x":1428.6138916015625,"y":635.1239013671875,"id":"558","attributes":{"Eigenvector Centrality":"0.3047172931159461","Betweenness Centrality":"0.006160383817594169","Appearances":"6","No":"23","Country":"Greece","Club Country":"Italy","Club":"Torino","Weighted Degree":"25.0","Modularity Class":"15","Date of birth / Age":"15 February 1991 (aged 23)","Degree":"25","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.29016975917883936"},"color":"rgb(229,67,100)","size":14.0},{"label":"Antonio Valencia (c)","x":-1293.8275146484375,"y":-612.4883422851562,"id":"60","attributes":{"Eigenvector Centrality":"0.7194865947551579","Betweenness Centrality":"0.016480573584016885","Appearances":"71","No":"16","Country":"Ecuador","Club Country":"England","Club":"Manchester United","Weighted Degree":"35.0","Modularity Class":"4","Date of birth / Age":"4 August 1985 (aged 28)","Degree":"35","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.33607681755829905"},"color":"rgb(229,67,132)","size":27.33333396911621},{"label":"Hashem Beikzadeh","x":1986.336181640625,"y":1189.6458740234375,"id":"273","attributes":{"Eigenvector Centrality":"0.2127442934422965","Betweenness Centrality":"0.0","Appearances":"17","No":"19","Country":"Iran","Club Country":"Iran","Club":"Esteghlal","Weighted Degree":"22.0","Modularity Class":"1","Date of birth / Age":"22 January 1984 (aged 30)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.206809229037704"},"color":"rgb(67,197,229)","size":10.0},{"label":"Rafa Silva","x":-692.36767578125,"y":355.65155029296875,"id":"580","attributes":{"Eigenvector Centrality":"0.40962360528145025","Betweenness Centrality":"0.0","Appearances":"3","No":"15","Country":"Portugal","Club Country":"Portugal","Club":"Braga","Weighted Degree":"22.0","Modularity Class":"8","Date of birth / Age":"17 May 1993 (aged 21)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.30714584203928125"},"color":"rgb(229,164,67)","size":10.0},{"label":"Loïc Rémy","x":73.68376922607422,"y":-313.17633056640625,"id":"421","attributes":{"Eigenvector Centrality":"0.5292224497836601","Betweenness Centrality":"0.0019647591823339743","Appearances":"25","No":"20","Country":"France","Club Country":"England","Club":"Newcastle United","Weighted Degree":"25.0","Modularity Class":"16","Date of birth / Age":"2 January 1987 (aged 27)","Degree":"25","Position":"FW","Eccentricity":"6.0","Closeness Centrality":"0.3315290933694181"},"color":"rgb(229,67,229)","size":14.0},{"label":"Jean-Daniel Akpa-Akpro","x":413.52197265625,"y":-756.9923706054688,"id":"322","attributes":{"Eigenvector Centrality":"0.32268769768515043","Betweenness Centrality":"0.002014868000803819","Appearances":"1","No":"7","Country":"Ivory Coast","Club Country":"France","Club":"Toulouse","Weighted Degree":"23.0","Modularity Class":"9","Date of birth / Age":"11 October 1992 (aged 21)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.30817610062893086"},"color":"rgb(164,67,229)","size":11.333333015441895},{"label":"Giorgos Tzavellas","x":1582.3857421875,"y":615.6647338867188,"id":"255","attributes":{"Eigenvector Centrality":"0.25813336963416794","Betweenness Centrality":"0.0","Appearances":"13","No":"3","Country":"Greece","Club Country":"Greece","Club":"PAOK","Weighted Degree":"22.0","Modularity Class":"15","Date of birth / Age":"26 November 1987 (aged 26)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2760045061960195"},"color":"rgb(229,67,100)","size":10.0},{"label":"Fred","x":-513.3817749023438,"y":-260.2742919921875,"id":"233","attributes":{"Eigenvector Centrality":"0.5425650576268323","Betweenness Centrality":"0.0","Appearances":"33","No":"9","Country":"Brazil","Club Country":"Brazil","Club":"Fluminense","Weighted Degree":"22.0","Modularity Class":"23","Date of birth / Age":"3 October 1983 (aged 30)","Degree":"22","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3158573270305114"},"color":"rgb(229,67,197)","size":10.0},{"label":"Per Mertesacker","x":261.4919738769531,"y":-532.3377075195312,"id":"573","attributes":{"Eigenvector Centrality":"0.6437896004097902","Betweenness Centrality":"0.002673471053911242","Appearances":"98","No":"17","Country":"Germany","Club Country":"England","Club":"Arsenal","Weighted Degree":"29.0","Modularity Class":"13","Date of birth / Age":"29 September 1984 (aged 29)","Degree":"29","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3219448094612352"},"color":"rgb(67,229,164)","size":19.333332061767578},{"label":"Hernanes","x":-528.0017700195312,"y":-15.909561157226562,"id":"280","attributes":{"Eigenvector Centrality":"0.669052616458677","Betweenness Centrality":"0.005981834884331946","Appearances":"24","No":"18","Country":"Brazil","Club Country":"Italy","Club":"Internazionale","Weighted Degree":"29.0","Modularity Class":"23","Date of birth / Age":"29 May 1985 (aged 29)","Degree":"29","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.34281716417910446"},"color":"rgb(229,67,197)","size":19.333332061767578},{"label":"Máximo Banguera","x":-1488.96337890625,"y":-533.3309326171875,"id":"489","attributes":{"Eigenvector Centrality":"0.7525405481416904","Betweenness Centrality":"0.006691544296226193","Appearances":"25","No":"1","Country":"Ecuador","Club Country":"Ecuador","Club":"Barcelona","Weighted Degree":"35.0","Modularity Class":"4","Date of birth / Age":"16 December 1985 (aged 28)","Degree":"35","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.3253652058432935"},"color":"rgb(229,67,132)","size":27.33333396911621},{"label":"Eliaquim Mangala","x":-347.64447021484375,"y":-15.025993347167969,"id":"196","attributes":{"Eigenvector Centrality":"0.6278043521909648","Betweenness Centrality":"0.009092242970245117","Appearances":"3","No":"13","Country":"France","Club Country":"Portugal","Club":"Porto","Weighted Degree":"30.0","Modularity Class":"16","Date of birth / Age":"13 February 1991 (aged 23)","Degree":"30","Position":"DF","Eccentricity":"6.0","Closeness Centrality":"0.33669262482821805"},"color":"rgb(229,67,229)","size":20.666667938232422},{"label":"Álvaro Pereira","x":-93.80169677734375,"y":34.24333190917969,"id":"39","attributes":{"Eigenvector Centrality":"0.37564528732258246","Betweenness Centrality":"0.0","Appearances":"57","No":"6","Country":"Uruguay","Club Country":"Brazil","Club":"São Paulo","Weighted Degree":"22.0","Modularity Class":"6","Date of birth / Age":"28 November 1985 (aged 28)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3121019108280255"},"color":"rgb(229,197,67)","size":10.0},{"label":"Miguel Veloso","x":-552.1939086914062,"y":364.9159240722656,"id":"511","attributes":{"Eigenvector Centrality":"0.4519394040645381","Betweenness Centrality":"0.0020459479374588265","Appearances":"49","No":"4","Country":"Portugal","Club Country":"Ukraine","Club":"Dynamo Kyiv","Weighted Degree":"25.0","Modularity Class":"8","Date of birth / Age":"11 May 1986 (aged 28)","Degree":"25","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3242170269078077"},"color":"rgb(229,164,67)","size":14.0},{"label":"Saphir Taïder","x":-1233.49755859375,"y":1029.03173828125,"id":"631","attributes":{"Eigenvector Centrality":"0.4289736525122905","Betweenness Centrality":"0.007067153381945787","Appearances":"11","No":"19","Country":"Algeria","Club Country":"Italy","Club":"Internazionale","Weighted Degree":"29.0","Modularity Class":"24","Date of birth / Age":"29 February 1992 (aged 22)","Degree":"29","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3208206023570493"},"color":"rgb(67,164,229)","size":19.333332061767578},{"label":"Dirk Kuyt","x":698.8324584960938,"y":-15.171172142028809,"id":"171","attributes":{"Eigenvector Centrality":"0.3965357475889929","Betweenness Centrality":"0.004158989584106385","Appearances":"98","No":"15","Country":"Netherlands","Club Country":"Turkey","Club":"Fenerbahçe","Weighted Degree":"26.0","Modularity Class":"22","Date of birth / Age":"22 July 1980 (aged 33)","Degree":"26","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.329153605015674"},"color":"rgb(197,67,229)","size":15.333333969116211},{"label":"Jorge Guagua","x":-1678.4407958984375,"y":-602.8709716796875,"id":"353","attributes":{"Eigenvector Centrality":"0.3623062182068214","Betweenness Centrality":"0.0","Appearances":"59","No":"2","Country":"Ecuador","Club Country":"Ecuador","Club":"Emelec","Weighted Degree":"22.0","Modularity Class":"4","Date of birth / Age":"28 September 1981 (aged 32)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2881223049784398"},"color":"rgb(229,67,132)","size":10.0},{"label":"Keisuke Honda","x":610.3965454101562,"y":750.2002563476562,"id":"382","attributes":{"Eigenvector Centrality":"0.4349752953094465","Betweenness Centrality":"0.007469372100698354","Appearances":"56","No":"4","Country":"Japan","Club Country":"Italy","Club":"Milan","Weighted Degree":"29.0","Modularity Class":"27","Date of birth / Age":"13 June 1986 (aged 27)","Degree":"29","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3309320126069338"},"color":"rgb(67,100,229)","size":19.333332061767578},{"label":"Cédric Si Mohamed","x":-1432.4459228515625,"y":1140.2423095703125,"id":"108","attributes":{"Eigenvector Centrality":"0.29589355686287977","Betweenness Centrality":"0.0","Appearances":"1","No":"1","Country":"Algeria","Club Country":"Algeria","Club":"CS Constantine","Weighted Degree":"22.0","Modularity Class":"24","Date of birth / Age":"9 January 1985 (aged 29)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.28389339513325607"},"color":"rgb(67,164,229)","size":10.0},{"label":"Tino-Sven Sušic","x":1264.1190185546875,"y":-534.239990234375,"id":"684","attributes":{"Eigenvector Centrality":"0.2839695417201138","Betweenness Centrality":"0.0","Appearances":"2","No":"14","Country":"Bosnia and Herzegovina","Club Country":"Croatia","Club":"Hajduk Split","Weighted Degree":"22.0","Modularity Class":"20","Date of birth / Age":"13 February 1992 (aged 22)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3077889447236181"},"color":"rgb(132,229,67)","size":10.0},{"label":"Samuel Eto\u0027o (c)","x":207.89883422851562,"y":-77.14188385009766,"id":"627","attributes":{"Eigenvector Centrality":"0.6120719582915053","Betweenness Centrality":"0.010941183209963411","Appearances":"117","No":"9","Country":"Cameroon","Club Country":"England","Club":"Chelsea","Weighted Degree":"33.0","Modularity Class":"17","Date of birth / Age":"10 March 1981 (aged 33)","Degree":"33","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.34507042253521125"},"color":"rgb(67,132,229)","size":24.666667938232422},{"label":"Karim Ansarifard","x":2030.397705078125,"y":1187.7640380859375,"id":"380","attributes":{"Eigenvector Centrality":"0.2127442934422965","Betweenness Centrality":"0.0","Appearances":"42","No":"10","Country":"Iran","Club Country":"Iran","Club":"Tractor Sazi","Weighted Degree":"22.0","Modularity Class":"1","Date of birth / Age":"3 April 1990 (aged 24)","Degree":"22","Position":"FW","Eccentricity":"7.0","Closeness Centrality":"0.206809229037704"},"color":"rgb(67,197,229)","size":10.0},{"label":"Uche Nwofor","x":-33.313961029052734,"y":-1701.16748046875,"id":"691","attributes":{"Eigenvector Centrality":"0.30581490023520397","Betweenness Centrality":"0.0","Appearances":"6","No":"19","Country":"Nigeria","Club Country":"Netherlands","Club":"Heerenveen","Weighted Degree":"22.0","Modularity Class":"14","Date of birth / Age":"17 September 1991 (aged 22)","Degree":"22","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.28800940438871475"},"color":"rgb(67,229,100)","size":10.0},{"label":"Michael Umaña","x":2330.072509765625,"y":379.5473937988281,"id":"506","attributes":{"Eigenvector Centrality":"0.23496944760866376","Betweenness Centrality":"0.0","Appearances":"83","No":"4","Country":"Costa Rica","Club Country":"Costa Rica","Club":"Saprissa","Weighted Degree":"22.0","Modularity Class":"29","Date of birth / Age":"16 July 1982 (aged 31)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2515400410677618"},"color":"rgb(229,229,67)","size":10.0},{"label":"Jordan Ayew","x":418.2088317871094,"y":1351.912841796875,"id":"347","attributes":{"Eigenvector Centrality":"0.29027436907278803","Betweenness Centrality":"0.0","Appearances":"13","No":"13","Country":"Ghana","Club Country":"France","Club":"Sochaux","Weighted Degree":"22.0","Modularity Class":"5","Date of birth / Age":"11 September 1991 (aged 22)","Degree":"22","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.2849941837921675"},"color":"rgb(67,229,197)","size":10.0},{"label":"Ron Vlaar","x":922.5167236328125,"y":-99.8844985961914,"id":"613","attributes":{"Eigenvector Centrality":"0.3465757821519946","Betweenness Centrality":"0.0018348657473652398","Appearances":"24","No":"2","Country":"Netherlands","Club Country":"England","Club":"Aston Villa","Weighted Degree":"23.0","Modularity Class":"22","Date of birth / Age":"16 February 1985 (aged 29)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3139683895771038"},"color":"rgb(197,67,229)","size":11.333333015441895},{"label":"Aleksandr Samedov","x":-1362.3624267578125,"y":-1347.75,"id":"23","attributes":{"Eigenvector Centrality":"0.2790405449937141","Betweenness Centrality":"0.003584997128855062","Appearances":"17","No":"19","Country":"Russia","Club Country":"Russia","Club":"Lokomotiv Moscow","Weighted Degree":"23.0","Modularity Class":"2","Date of birth / Age":"19 July 1984 (aged 29)","Degree":"23","Position":"FW","Eccentricity":"6.0","Closeness Centrality":"0.2573529411764706"},"color":"rgb(229,67,67)","size":11.333333015441895},{"label":"Hugo Almeida","x":-570.7293090820312,"y":230.9239959716797,"id":"286","attributes":{"Eigenvector Centrality":"0.43486864997258184","Betweenness Centrality":"0.00453740780637059","Appearances":"55","No":"9","Country":"Portugal","Club Country":"Turkey","Club":"Be?ikta?","Weighted Degree":"24.0","Modularity Class":"8","Date of birth / Age":"23 May 1984 (aged 30)","Degree":"24","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3253652058432935"},"color":"rgb(229,164,67)","size":12.666666984558105},{"label":"Federico Fernández","x":-945.4159545898438,"y":329.44189453125,"id":"221","attributes":{"Eigenvector Centrality":"0.7220713713108182","Betweenness Centrality":"0.003097438956551802","Appearances":"26","No":"17","Country":"Argentina","Club Country":"Italy","Club":"Napoli","Weighted Degree":"32.0","Modularity Class":"19","Date of birth / Age":"21 February 1989 (aged 25)","Degree":"32","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3313796212804328"},"color":"rgb(67,229,229)","size":23.33333396911621},{"label":"Edin Džeko","x":747.855712890625,"y":-487.78179931640625,"id":"183","attributes":{"Eigenvector Centrality":"0.4959287278586879","Betweenness Centrality":"0.019893239141010762","Appearances":"62","No":"11","Country":"Bosnia and Herzegovina","Club Country":"England","Club":"Manchester City","Weighted Degree":"31.0","Modularity Class":"20","Date of birth / Age":"17 March 1986 (aged 28)","Degree":"31","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3436185133239832"},"color":"rgb(132,229,67)","size":22.0},{"label":"Fatau Dauda","x":508.3158874511719,"y":1362.838134765625,"id":"220","attributes":{"Eigenvector Centrality":"0.29027436907278803","Betweenness Centrality":"0.0","Appearances":"18","No":"16","Country":"Ghana","Club Country":"South Africa","Club":"Orlando Pirates","Weighted Degree":"22.0","Modularity Class":"5","Date of birth / Age":"6 April 1985 (aged 29)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.2849941837921675"},"color":"rgb(67,229,197)","size":10.0},{"label":"Giorgio Chiellini","x":168.96609497070312,"y":898.1615600585938,"id":"252","attributes":{"Eigenvector Centrality":"0.5455496050511397","Betweenness Centrality":"0.0016215443882875223","Appearances":"68","No":"3","Country":"Italy","Club Country":"Italy","Club":"Juventus","Weighted Degree":"28.0","Modularity Class":"3","Date of birth / Age":"14 August 1984 (aged 29)","Degree":"28","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3242170269078077"},"color":"rgb(197,229,67)","size":18.0},{"label":"Éder","x":-652.5069580078125,"y":328.9391174316406,"id":"180","attributes":{"Eigenvector Centrality":"0.4096236052814504","Betweenness Centrality":"0.0","Appearances":"8","No":"11","Country":"Portugal","Club Country":"Portugal","Club":"Braga","Weighted Degree":"22.0","Modularity Class":"8","Date of birth / Age":"22 December 1987 (aged 26)","Degree":"22","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.30714584203928125"},"color":"rgb(229,164,67)","size":10.0},{"label":"Édison Méndez","x":-1680.7288818359375,"y":-523.7875366210938,"id":"186","attributes":{"Eigenvector Centrality":"0.37488664289499546","Betweenness Centrality":"0.003053300601509073","Appearances":"110","No":"8","Country":"Ecuador","Club Country":"Colombia","Club":"Santa Fe","Weighted Degree":"23.0","Modularity Class":"4","Date of birth / Age":"15 March 1979 (aged 35)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3001224989791752"},"color":"rgb(229,67,132)","size":11.333333015441895},{"label":"Hugo Lloris (c)","x":-181.9427032470703,"y":-259.6800842285156,"id":"288","attributes":{"Eigenvector Centrality":"0.579458372910698","Betweenness Centrality":"0.002663127912981995","Appearances":"57","No":"1","Country":"France","Club Country":"England","Club":"Tottenham Hotspur","Weighted Degree":"27.0","Modularity Class":"16","Date of birth / Age":"26 December 1986 (aged 27)","Degree":"27","Position":"GK","Eccentricity":"6.0","Closeness Centrality":"0.32407407407407407"},"color":"rgb(229,67,229)","size":16.666667938232422},{"label":"Ricardo Álvarez","x":-991.7132568359375,"y":419.20452880859375,"id":"600","attributes":{"Eigenvector Centrality":"0.5658107599692682","Betweenness Centrality":"0.0025393109943757006","Appearances":"7","No":"19","Country":"Argentina","Club Country":"Italy","Club":"Internazionale","Weighted Degree":"27.0","Modularity Class":"19","Date of birth / Age":"12 April 1988 (aged 26)","Degree":"27","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3272484416740873"},"color":"rgb(67,229,229)","size":16.666667938232422},{"label":"Sofiane Feghouli","x":-1244.94921875,"y":1115.6298828125,"id":"655","attributes":{"Eigenvector Centrality":"0.3592587866347209","Betweenness Centrality":"0.005117058445342943","Appearances":"19","No":"10","Country":"Algeria","Club Country":"Spain","Club":"Valencia","Weighted Degree":"26.0","Modularity Class":"24","Date of birth / Age":"26 December 1989 (aged 24)","Degree":"26","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.30973451327433627"},"color":"rgb(67,164,229)","size":15.333333969116211},{"label":"Cristiano Ronaldo (c)","x":-705.8994140625,"y":163.7381134033203,"id":"131","attributes":{"Eigenvector Centrality":"0.651122142378051","Betweenness Centrality":"0.002704889595809238","Appearances":"111","No":"7","Country":"Portugal","Club Country":"Spain","Club":"Real Madrid","Weighted Degree":"31.0","Modularity Class":"8","Date of birth / Age":"5 February 1985 (aged 29)","Degree":"31","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.33546325878594246"},"color":"rgb(229,164,67)","size":22.0},{"label":"John Obi Mikel","x":-197.90223693847656,"y":-1324.32470703125,"id":"342","attributes":{"Eigenvector Centrality":"0.5955495363924806","Betweenness Centrality":"0.01100579205017528","Appearances":"59","No":"10","Country":"Nigeria","Club Country":"England","Club":"Chelsea","Weighted Degree":"33.0","Modularity Class":"14","Date of birth / Age":"22 April 1987 (aged 27)","Degree":"33","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3295964125560538"},"color":"rgb(67,229,100)","size":24.666667938232422},{"label":"Roy Miller","x":2341.18359375,"y":210.36285400390625,"id":"617","attributes":{"Eigenvector Centrality":"0.2448400755989879","Betweenness Centrality":"0.004512594233796391","Appearances":"48","No":"19","Country":"Costa Rica","Club Country":"United States","Club":"New York Red Bulls","Weighted Degree":"23.0","Modularity Class":"29","Date of birth / Age":"24 November 1984 (aged 29)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2558301427079708"},"color":"rgb(229,229,67)","size":11.333333015441895},{"label":"Kostas Mitroglou","x":1704.1070556640625,"y":623.1121215820312,"id":"402","attributes":{"Eigenvector Centrality":"0.26821419599108537","Betweenness Centrality":"0.011764360515140076","Appearances":"32","No":"9","Country":"Greece","Club Country":"England","Club":"Fulham","Weighted Degree":"23.0","Modularity Class":"15","Date of birth / Age":"12 March 1988 (aged 26)","Degree":"23","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.2784090909090909"},"color":"rgb(229,67,100)","size":11.333333015441895},{"label":"Daniel Opare","x":399.6513366699219,"y":1199.5255126953125,"id":"138","attributes":{"Eigenvector Centrality":"0.3223336840810573","Betweenness Centrality":"0.004091587855968099","Appearances":"16","No":"4","Country":"Ghana","Club Country":"Belgium","Club":"Standard Liège","Weighted Degree":"24.0","Modularity Class":"5","Date of birth / Age":"18 October 1990 (aged 23)","Degree":"24","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.30973451327433627"},"color":"rgb(67,229,197)","size":12.666666984558105},{"label":"Jean Beausejour","x":-67.39273834228516,"y":1286.549072265625,"id":"320","attributes":{"Eigenvector Centrality":"0.336908513308338","Betweenness Centrality":"0.005662725175478597","Appearances":"59","No":"15","Country":"Chile","Club Country":"England","Club":"Wigan Athletic","Weighted Degree":"24.0","Modularity Class":"18","Date of birth / Age":"3 June 1984 (aged 30)","Degree":"24","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.28891509433962265"},"color":"rgb(229,132,67)","size":12.666666984558105},{"label":"Erik Durm","x":553.0518188476562,"y":-438.38714599609375,"id":"203","attributes":{"Eigenvector Centrality":"0.500680986024227","Betweenness Centrality":"0.008472576600609625","Appearances":"1","No":"15","Country":"Germany","Club Country":"Germany","Club":"Borussia Dortmund","Weighted Degree":"24.0","Modularity Class":"13","Date of birth / Age":"12 May 1992 (aged 22)","Degree":"24","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.310126582278481"},"color":"rgb(67,229,164)","size":12.666666984558105},{"label":"Egidio Arévalo Ríos","x":-140.44900512695312,"y":-11.467087745666504,"id":"191","attributes":{"Eigenvector Centrality":"0.3894572111283446","Betweenness Centrality":"0.002989706787662918","Appearances":"55","No":"17","Country":"Uruguay","Club Country":"Mexico","Club":"Morelia","Weighted Degree":"23.0","Modularity Class":"6","Date of birth / Age":"1 January 1982 (aged 32)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.31873373807458805"},"color":"rgb(229,197,67)","size":11.333333015441895},{"label":"Raul Meireles","x":-515.27490234375,"y":255.2202911376953,"id":"593","attributes":{"Eigenvector Centrality":"0.45315937558107944","Betweenness Centrality":"0.0029488481093627983","Appearances":"74","No":"16","Country":"Portugal","Club Country":"Turkey","Club":"Fenerbahçe","Weighted Degree":"25.0","Modularity Class":"8","Date of birth / Age":"17 March 1983 (aged 31)","Degree":"25","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3295964125560538"},"color":"rgb(229,164,67)","size":14.0},{"label":"Maicon","x":-278.0897216796875,"y":-249.45703125,"id":"436","attributes":{"Eigenvector Centrality":"0.6006324446964797","Betweenness Centrality":"0.010333588970217586","Appearances":"72","No":"23","Country":"Brazil","Club Country":"Italy","Club":"Roma","Weighted Degree":"26.0","Modularity Class":"23","Date of birth / Age":"26 July 1981 (aged 32)","Degree":"26","Position":"DF","Eccentricity":"4.0","Closeness Centrality":"0.3475177304964539"},"color":"rgb(229,67,197)","size":15.333333969116211},{"label":"Luke Shaw","x":-92.2292251586914,"y":-688.8857421875,"id":"434","attributes":{"Eigenvector Centrality":"0.5904515327423896","Betweenness Centrality":"0.0016054547217210155","Appearances":"2","No":"23","Country":"England","Club Country":"England","Club":"Southampton","Weighted Degree":"26.0","Modularity Class":"28","Date of birth / Age":"12 July 1995 (aged 18)","Degree":"26","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.32407407407407407"},"color":"rgb(67,229,132)","size":15.333333969116211},{"label":"Toni Kroos","x":364.4765319824219,"y":-371.8941650390625,"id":"687","attributes":{"Eigenvector Centrality":"0.6585766805388439","Betweenness Centrality":"0.0026429368589338613","Appearances":"44","No":"18","Country":"Germany","Club Country":"Germany","Club":"Bayern Munich","Weighted Degree":"29.0","Modularity Class":"13","Date of birth / Age":"4 January 1990 (aged 24)","Degree":"29","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3390221402214022"},"color":"rgb(67,229,164)","size":19.333332061767578},{"label":"Antonio Cassano","x":193.04763793945312,"y":758.9298706054688,"id":"59","attributes":{"Eigenvector Centrality":"0.44952910121457806","Betweenness Centrality":"4.3533065978638123E-4","Appearances":"37","No":"10","Country":"Italy","Club Country":"Italy","Club":"Parma","Weighted Degree":"24.0","Modularity Class":"3","Date of birth / Age":"12 July 1982 (aged 31)","Degree":"24","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.30714584203928125"},"color":"rgb(197,229,67)","size":12.666666984558105},{"label":"Son Heung-min","x":1048.6976318359375,"y":1445.7691650390625,"id":"658","attributes":{"Eigenvector Centrality":"0.2555712186488899","Betweenness Centrality":"0.010566232255619219","Appearances":"25","No":"9","Country":"South Korea","Club Country":"Germany","Club":"Bayer Leverkusen","Weighted Degree":"24.0","Modularity Class":"10","Date of birth / Age":"8 July 1992 (aged 21)","Degree":"24","Position":"FW","Eccentricity":"6.0","Closeness Centrality":"0.28021349599695006"},"color":"rgb(229,67,164)","size":12.666666984558105},{"label":"Alexandros Tziolis","x":1617.329345703125,"y":542.8191528320312,"id":"32","attributes":{"Eigenvector Centrality":"0.25813336963416794","Betweenness Centrality":"0.0","Appearances":"49","No":"6","Country":"Greece","Club Country":"Turkey","Club":"Kayserispor","Weighted Degree":"22.0","Modularity Class":"15","Date of birth / Age":"13 February 1985 (aged 29)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2760045061960195"},"color":"rgb(229,67,100)","size":10.0},{"label":"Marcelo Díaz","x":-193.8722381591797,"y":1188.14697265625,"id":"445","attributes":{"Eigenvector Centrality":"0.3914962580991112","Betweenness Centrality":"0.007300142578773374","Appearances":"21","No":"21","Country":"Chile","Club Country":"Switzerland","Club":"Basel","Weighted Degree":"27.0","Modularity Class":"18","Date of birth / Age":"30 December 1986 (aged 27)","Degree":"27","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.29902359641985354"},"color":"rgb(229,132,67)","size":16.666667938232422},{"label":"Pepe","x":-652.334228515625,"y":226.08396911621094,"id":"571","attributes":{"Eigenvector Centrality":"0.651122142378051","Betweenness Centrality":"0.002704889595809238","Appearances":"58","No":"3","Country":"Portugal","Club Country":"Spain","Club":"Real Madrid","Weighted Degree":"31.0","Modularity Class":"8","Date of birth / Age":"26 February 1983 (aged 31)","Degree":"31","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.33546325878594246"},"color":"rgb(229,164,67)","size":22.0},{"label":"Sayouba Mandé","x":565.8164672851562,"y":-858.4483642578125,"id":"632","attributes":{"Eigenvector Centrality":"0.30966117600400683","Betweenness Centrality":"0.0","Appearances":"1","No":"23","Country":"Ivory Coast","Club Country":"Norway","Club":"Stabæk","Weighted Degree":"22.0","Modularity Class":"9","Date of birth / Age":"15 June 1993 (aged 20)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.2929453965723396"},"color":"rgb(164,67,229)","size":10.0},{"label":"Romelu Lukaku","x":-624.7638549804688,"y":-965.3787841796875,"id":"612","attributes":{"Eigenvector Centrality":"0.5945562042887822","Betweenness Centrality":"0.0024227939394388456","Appearances":"29","No":"9","Country":"Belgium","Club Country":"England","Club":"Everton","Weighted Degree":"26.0","Modularity Class":"28","Date of birth / Age":"13 May 1993 (aged 21)","Degree":"26","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3330312641594925"},"color":"rgb(67,229,132)","size":15.333333969116211},{"label":"Carlos Gruezo","x":-1417.1590576171875,"y":-636.35205078125,"id":"102","attributes":{"Eigenvector Centrality":"0.40234260169062663","Betweenness Centrality":"0.012924077143976812","Appearances":"3","No":"23","Country":"Ecuador","Club Country":"Germany","Club":"VfB Stuttgart","Weighted Degree":"25.0","Modularity Class":"4","Date of birth / Age":"19 April 1995 (aged 19)","Degree":"25","Position":"MF","Eccentricity":"4.0","Closeness Centrality":"0.3208206023570493"},"color":"rgb(229,67,132)","size":14.0},{"label":"Boubacar Barry","x":488.794921875,"y":-907.9202880859375,"id":"89","attributes":{"Eigenvector Centrality":"0.3096611760040069","Betweenness Centrality":"0.0","Appearances":"77","No":"1","Country":"Ivory Coast","Club Country":"Belgium","Club":"Lokeren","Weighted Degree":"22.0","Modularity Class":"9","Date of birth / Age":"30 December 1979 (aged 34)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.2929453965723396"},"color":"rgb(164,67,229)","size":10.0},{"label":"Adam Taggart","x":2042.42724609375,"y":-579.6041870117188,"id":"6","attributes":{"Eigenvector Centrality":"0.22132294330055022","Betweenness Centrality":"0.0","Appearances":"5","No":"9","Country":"Australia","Club Country":"Australia","Club":"Newcastle Jets","Weighted Degree":"22.0","Modularity Class":"12","Date of birth / Age":"2 June 1993 (aged 21)","Degree":"22","Position":"FW","Eccentricity":"7.0","Closeness Centrality":"0.22025771651183698"},"color":"rgb(229,100,67)","size":10.0},{"label":"Gabriel Achilier","x":-1682.26220703125,"y":-719.3626708984375,"id":"236","attributes":{"Eigenvector Centrality":"0.3623062182068216","Betweenness Centrality":"0.0","Appearances":"23","No":"21","Country":"Ecuador","Club Country":"Ecuador","Club":"Emelec","Weighted Degree":"22.0","Modularity Class":"4","Date of birth / Age":"24 March 1985 (aged 29)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2881223049784398"},"color":"rgb(229,67,132)","size":10.0},{"label":"Paul Verhaegh","x":949.3831176757812,"y":201.00778198242188,"id":"566","attributes":{"Eigenvector Centrality":"0.35574061516727906","Betweenness Centrality":"0.008783426226424064","Appearances":"2","No":"12","Country":"Netherlands","Club Country":"Germany","Club":"FC Augsburg","Weighted Degree":"24.0","Modularity Class":"22","Date of birth / Age":"1 September 1983 (aged 30)","Degree":"24","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3153153153153153"},"color":"rgb(197,67,229)","size":12.666666984558105},{"label":"Clint Dempsey (c)","x":742.0546264648438,"y":-1547.4185791015625,"id":"126","attributes":{"Eigenvector Centrality":"0.27181518429351065","Betweenness Centrality":"0.0","Appearances":"105","No":"8","Country":"United States","Club Country":"United States","Club":"Seattle Sounders FC","Weighted Degree":"22.0","Modularity Class":"26","Date of birth / Age":"9 March 1983 (aged 31)","Degree":"22","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.28021349599695006"},"color":"rgb(100,229,67)","size":10.0},{"label":"Madjid Bougherra (c)","x":-1470.3363037109375,"y":1180.3843994140625,"id":"435","attributes":{"Eigenvector Centrality":"0.29589355686287977","Betweenness Centrality":"0.0","Appearances":"62","No":"2","Country":"Algeria","Club Country":"Qatar","Club":"Lekhwiya","Weighted Degree":"22.0","Modularity Class":"24","Date of birth / Age":"7 October 1982 (aged 31)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.28389339513325607"},"color":"rgb(67,164,229)","size":10.0},{"label":"James Rodríguez","x":-798.67431640625,"y":1094.4688720703125,"id":"309","attributes":{"Eigenvector Centrality":"0.3631125757022638","Betweenness Centrality":"0.002531708436743698","Appearances":"22","No":"10","Country":"Colombia","Club Country":"France","Club":"AS Monaco","Weighted Degree":"25.0","Modularity Class":"11","Date of birth / Age":"12 July 1991 (aged 22)","Degree":"25","Position":"MF","Eccentricity":"6.0","Closeness Centrality":"0.315450643776824"},"color":"rgb(67,67,229)","size":14.0},{"label":"Jeremain Lens","x":718.18798828125,"y":97.26069641113281,"id":"325","attributes":{"Eigenvector Centrality":"0.37953617711875015","Betweenness Centrality":"0.00411799412159424","Appearances":"22","No":"17","Country":"Netherlands","Club Country":"Ukraine","Club":"Dynamo Kyiv","Weighted Degree":"25.0","Modularity Class":"22","Date of birth / Age":"24 November 1987 (aged 26)","Degree":"25","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3255093002657219"},"color":"rgb(197,67,229)","size":14.0},{"label":"Juanfran","x":-888.2894897460938,"y":-365.1721496582031,"id":"373","attributes":{"Eigenvector Centrality":"0.7852248920099726","Betweenness Centrality":"7.220203040676876E-4","Appearances":"8","No":"5","Country":"Spain","Club Country":"Spain","Club":"Atlético Madrid","Weighted Degree":"27.0","Modularity Class":"23","Date of birth / Age":"9 January 1985 (aged 29)","Degree":"27","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3215223097112861"},"color":"rgb(229,67,197)","size":16.666667938232422},{"label":"Amir Hossein Sadeghi","x":1990.185546875,"y":1052.62548828125,"id":"40","attributes":{"Eigenvector Centrality":"0.21274429344229648","Betweenness Centrality":"0.0","Appearances":"17","No":"5","Country":"Iran","Club Country":"Iran","Club":"Esteghlal","Weighted Degree":"22.0","Modularity Class":"1","Date of birth / Age":"6 September 1981 (aged 32)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.206809229037704"},"color":"rgb(67,197,229)","size":10.0},{"label":"Zvjezdan Misimovic","x":1277.4697265625,"y":-479.1226501464844,"id":"736","attributes":{"Eigenvector Centrality":"0.2839695417201138","Betweenness Centrality":"0.0","Appearances":"81","No":"10","Country":"Bosnia and Herzegovina","Club Country":"China","Club":"Guizhou Renhe","Weighted Degree":"22.0","Modularity Class":"20","Date of birth / Age":"5 June 1982 (aged 32)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3077889447236181"},"color":"rgb(132,229,67)","size":10.0},{"label":"Nacer Chadli","x":-730.6295166015625,"y":-798.0245971679688,"id":"527","attributes":{"Eigenvector Centrality":"0.5781054780643133","Betweenness Centrality":"0.0013899483715746057","Appearances":"20","No":"22","Country":"Belgium","Club Country":"England","Club":"Tottenham Hotspur","Weighted Degree":"25.0","Modularity Class":"28","Date of birth / Age":"2 October 1989 (aged 24)","Degree":"25","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.33638443935926776"},"color":"rgb(67,229,132)","size":14.0},{"label":"Michael Arroyo","x":-1730.895751953125,"y":-727.3639526367188,"id":"499","attributes":{"Eigenvector Centrality":"0.3623062182068213","Betweenness Centrality":"0.0","Appearances":"21","No":"15","Country":"Ecuador","Club Country":"Mexico","Club":"Atlante","Weighted Degree":"22.0","Modularity Class":"4","Date of birth / Age":"23 April 1987 (aged 27)","Degree":"22","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.2881223049784398"},"color":"rgb(229,67,132)","size":10.0},{"label":"Valon Behrami","x":-152.94186401367188,"y":233.4356231689453,"id":"693","attributes":{"Eigenvector Centrality":"0.6153709092825856","Betweenness Centrality":"0.004199284588766183","Appearances":"48","No":"11","Country":"Switzerland","Club Country":"Italy","Club":"Napoli","Weighted Degree":"31.0","Modularity Class":"0","Date of birth / Age":"19 April 1985 (aged 29)","Degree":"31","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3331822302810517"},"color":"rgb(164,229,67)","size":22.0},{"label":"Sami Khedira","x":147.37220764160156,"y":-251.9683837890625,"id":"623","attributes":{"Eigenvector Centrality":"0.7584962588500563","Betweenness Centrality":"0.008327156420560313","Appearances":"46","No":"6","Country":"Germany","Club Country":"Spain","Club":"Real Madrid","Weighted Degree":"33.0","Modularity Class":"13","Date of birth / Age":"4 April 1987 (aged 27)","Degree":"33","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.32974427994616423"},"color":"rgb(67,229,164)","size":24.666667938232422},{"label":"Admir Mehmedi","x":126.91813659667969,"y":115.84123229980469,"id":"7","attributes":{"Eigenvector Centrality":"0.41564407300864686","Betweenness Centrality":"0.0029131326818128433","Appearances":"21","No":"18","Country":"Switzerland","Club Country":"Germany","Club":"SC Freiburg","Weighted Degree":"24.0","Modularity Class":"0","Date of birth / Age":"16 March 1991 (aged 23)","Degree":"24","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.3150450064294899"},"color":"rgb(164,229,67)","size":12.666666984558105},{"label":"Hong Jeong-ho","x":1189.017578125,"y":1491.9881591796875,"id":"283","attributes":{"Eigenvector Centrality":"0.24502153540109495","Betweenness Centrality":"0.0031284111071300832","Appearances":"25","No":"20","Country":"South Korea","Club Country":"Germany","Club":"FC Augsburg","Weighted Degree":"23.0","Modularity Class":"10","Date of birth / Age":"12 August 1989 (aged 24)","Degree":"23","Position":"DF","Eccentricity":"6.0","Closeness Centrality":"0.2726261127596439"},"color":"rgb(229,67,164)","size":11.333333015441895},{"label":"Nikica Jelavic","x":-197.76739501953125,"y":532.7603149414062,"id":"535","attributes":{"Eigenvector Centrality":"0.354839329394506","Betweenness Centrality":"0.005268740805035136","Appearances":"33","No":"9","Country":"Croatia","Club Country":"England","Club":"Hull City","Weighted Degree":"23.0","Modularity Class":"25","Date of birth / Age":"27 August 1985 (aged 28)","Degree":"23","Position":"FW","Eccentricity":"5.0","Closeness Centrality":"0.303970223325062"},"color":"rgb(132,67,229)","size":11.333333015441895},{"label":"Ross Barkley","x":-149.76280212402344,"y":-1043.209228515625,"id":"616","attributes":{"Eigenvector Centrality":"0.5738583419916762","Betweenness Centrality":"0.0013664563333722465","Appearances":"6","No":"21","Country":"England","Club Country":"England","Club":"Everton","Weighted Degree":"25.0","Modularity Class":"28","Date of birth / Age":"5 December 1993 (aged 20)","Degree":"25","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.31183708103521424"},"color":"rgb(67,229,132)","size":14.0},{"label":"Ji Dong-won","x":1240.84521484375,"y":1492.1494140625,"id":"330","attributes":{"Eigenvector Centrality":"0.24502153540109498","Betweenness Centrality":"0.0031284111071300832","Appearances":"28","No":"19","Country":"South Korea","Club Country":"Germany","Club":"FC Augsburg","Weighted Degree":"23.0","Modularity Class":"10","Date of birth / Age":"28 May 1991 (aged 23)","Degree":"23","Position":"FW","Eccentricity":"6.0","Closeness Centrality":"0.2726261127596439"},"color":"rgb(229,67,164)","size":11.333333015441895},{"label":"Nick Rimando","x":864.0869140625,"y":-1556.7880859375,"id":"530","attributes":{"Eigenvector Centrality":"0.27181518429351065","Betweenness Centrality":"0.0","Appearances":"14","No":"22","Country":"United States","Club Country":"United States","Club":"Real Salt Lake","Weighted Degree":"22.0","Modularity Class":"26","Date of birth / Age":"17 June 1979 (aged 34)","Degree":"22","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.28021349599695006"},"color":"rgb(100,229,67)","size":10.0},{"label":"Hwang Seok-ho","x":1138.2103271484375,"y":1544.553466796875,"id":"290","attributes":{"Eigenvector Centrality":"0.2441012483722342","Betweenness Centrality":"0.0022277566561183537","Appearances":"3","No":"6","Country":"South Korea","Club Country":"Japan","Club":"Sanfrecce Hiroshima","Weighted Degree":"23.0","Modularity Class":"10","Date of birth / Age":"27 June 1989 (aged 24)","Degree":"23","Position":"DF","Eccentricity":"6.0","Closeness Centrality":"0.27051895472948106"},"color":"rgb(229,67,164)","size":11.333333015441895},{"label":"André Schürrle","x":130.84710693359375,"y":-528.9302368164062,"id":"44","attributes":{"Eigenvector Centrality":"0.7600410241243024","Betweenness Centrality":"0.006814981026437991","Appearances":"33","No":"9","Country":"Germany","Club Country":"England","Club":"Chelsea","Weighted Degree":"33.0","Modularity Class":"13","Date of birth / Age":"6 November 1990 (aged 23)","Degree":"33","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3343949044585987"},"color":"rgb(67,229,164)","size":24.666667938232422},{"label":"Pepe Reina","x":-850.5621948242188,"y":-89.60556030273438,"id":"572","attributes":{"Eigenvector Centrality":"0.9188656127061582","Betweenness Centrality":"0.004836935094169011","Appearances":"32","No":"23","Country":"Spain","Club Country":"Italy","Club":"Napoli","Weighted Degree":"32.0","Modularity Class":"23","Date of birth / Age":"31 August 1982 (aged 31)","Degree":"32","Position":"GK","Eccentricity":"5.0","Closeness Centrality":"0.34249767008387694"},"color":"rgb(229,67,197)","size":23.33333396911621},{"label":"Maynor Figueroa","x":1528.1024169921875,"y":-1100.3426513671875,"id":"492","attributes":{"Eigenvector Centrality":"0.24997612632443128","Betweenness Centrality":"0.00471069378362544","Appearances":"105","No":"3","Country":"Honduras","Club Country":"England","Club":"Hull City","Weighted Degree":"23.0","Modularity Class":"7","Date of birth / Age":"2 May 1983 (aged 31)","Degree":"23","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.28107074569789675"},"color":"rgb(100,67,229)","size":11.333333015441895},{"label":"Dmitri Kombarov","x":-1369.3797607421875,"y":-1467.8458251953125,"id":"174","attributes":{"Eigenvector Centrality":"0.2656930429181982","Betweenness Centrality":"0.0","Appearances":"22","No":"23","Country":"Russia","Club Country":"Russia","Club":"Spartak Moscow","Weighted Degree":"22.0","Modularity Class":"2","Date of birth / Age":"22 January 1987 (aged 27)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.23244781783681215"},"color":"rgb(229,67,67)","size":10.0},{"label":"Waylon Francis","x":2350.48974609375,"y":280.3184509277344,"id":"712","attributes":{"Eigenvector Centrality":"0.2349694476086638","Betweenness Centrality":"0.0","Appearances":"1","No":"12","Country":"Costa Rica","Club Country":"United States","Club":"Columbus Crew","Weighted Degree":"22.0","Modularity Class":"29","Date of birth / Age":"20 September 1990 (aged 23)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.2515400410677618"},"color":"rgb(229,229,67)","size":10.0},{"label":"Ahmad Alenemeh","x":2028.45654296875,"y":1067.91259765625,"id":"13","attributes":{"Eigenvector Centrality":"0.21274429344229648","Betweenness Centrality":"0.0","Appearances":"9","No":"17","Country":"Iran","Club Country":"Iran","Club":"Naft Tehran","Weighted Degree":"22.0","Modularity Class":"1","Date of birth / Age":"10 October 1982 (aged 31)","Degree":"22","Position":"DF","Eccentricity":"7.0","Closeness Centrality":"0.206809229037704"},"color":"rgb(67,197,229)","size":10.0},{"label":"Fábio Coentrão","x":-620.6026611328125,"y":152.4325408935547,"id":"216","attributes":{"Eigenvector Centrality":"0.6511221423780509","Betweenness Centrality":"0.002704889595809238","Appearances":"45","No":"5","Country":"Portugal","Club Country":"Spain","Club":"Real Madrid","Weighted Degree":"31.0","Modularity Class":"8","Date of birth / Age":"11 March 1988 (aged 26)","Degree":"31","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.33546325878594246"},"color":"rgb(229,164,67)","size":22.0},{"label":"Stefan de Vrij","x":967.5440673828125,"y":46.13400650024414,"id":"659","attributes":{"Eigenvector Centrality":"0.335211163684756","Betweenness Centrality":"0.0","Appearances":"12","No":"3","Country":"Netherlands","Club Country":"Netherlands","Club":"Feyenoord","Weighted Degree":"22.0","Modularity Class":"22","Date of birth / Age":"5 February 1992 (aged 22)","Degree":"22","Position":"DF","Eccentricity":"5.0","Closeness Centrality":"0.3088235294117647"},"color":"rgb(197,67,229)","size":10.0},{"label":"Javier Aquino","x":-2081.5556640625,"y":384.58026123046875,"id":"317","attributes":{"Eigenvector Centrality":"0.27712645238679473","Betweenness Centrality":"0.0","Appearances":"22","No":"20","Country":"Mexico","Club Country":"Spain","Club":"Villarreal","Weighted Degree":"22.0","Modularity Class":"21","Date of birth / Age":"11 February 1990 (aged 24)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.2599929253625752"},"color":"rgb(67,229,67)","size":10.0},{"label":"Mile Jedinak (c)","x":2075.45263671875,"y":-732.8336791992188,"id":"515","attributes":{"Eigenvector Centrality":"0.2213229433005502","Betweenness Centrality":"0.0","Appearances":"44","No":"15","Country":"Australia","Club Country":"England","Club":"Crystal Palace","Weighted Degree":"22.0","Modularity Class":"12","Date of birth / Age":"3 August 1984 (aged 29)","Degree":"22","Position":"MF","Eccentricity":"7.0","Closeness Centrality":"0.22025771651183698"},"color":"rgb(229,100,67)","size":10.0},{"label":"Cristian Rodríguez","x":-272.8934631347656,"y":-76.41095733642578,"id":"129","attributes":{"Eigenvector Centrality":"0.5243629945948548","Betweenness Centrality":"0.0015151368839237088","Appearances":"73","No":"7","Country":"Uruguay","Club Country":"Spain","Club":"Atlético Madrid","Weighted Degree":"28.0","Modularity Class":"6","Date of birth / Age":"30 September 1985 (aged 28)","Degree":"28","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3236459709379128"},"color":"rgb(229,197,67)","size":18.0},{"label":"Jean Makoun","x":430.8337097167969,"y":257.7498474121094,"id":"321","attributes":{"Eigenvector Centrality":"0.3346787587121599","Betweenness Centrality":"0.0017126023775967546","Appearances":"66","No":"11","Country":"Cameroon","Club Country":"France","Club":"Rennes","Weighted Degree":"23.0","Modularity Class":"17","Date of birth / Age":"29 May 1983 (aged 31)","Degree":"23","Position":"MF","Eccentricity":"5.0","Closeness Centrality":"0.3202614379084967"},"color":"rgb(67,132,229)","size":11.333333015441895}]} \ No newline at end of file diff --git a/www2/examples/network/graphviz/data/fsm.gv.txt b/www2/examples/network/graphviz/data/fsm.gv.txt new file mode 100644 index 00000000..e59b7c2d --- /dev/null +++ b/www2/examples/network/graphviz/data/fsm.gv.txt @@ -0,0 +1,20 @@ +digraph finite_state_machine { + rankdir=LR; + size="8,5" + node [shape = doublecircle]; LR_0 LR_3 LR_4 LR_8; + node [shape = circle]; + LR_0 -> LR_2 [ label = "SS(B)" ]; + LR_0 -> LR_1 [ label = "SS(S)" ]; + LR_1 -> LR_3 [ label = "S($end)" ]; + LR_2 -> LR_6 [ label = "SS(b)" ]; + LR_2 -> LR_5 [ label = "SS(a)" ]; + LR_2 -> LR_4 [ label = "S(A)" ]; + LR_5 -> LR_7 [ label = "S(b)" ]; + LR_5 -> LR_5 [ label = "S(a)" ]; + LR_6 -> LR_6 [ label = "S(b)" ]; + LR_6 -> LR_5 [ label = "S(a)" ]; + LR_7 -> LR_8 [ label = "S(b)" ]; + LR_7 -> LR_5 [ label = "S(a)" ]; + LR_8 -> LR_6 [ label = "S(b)" ]; + LR_8 -> LR_5 [ label = "S(a)" ]; +} diff --git a/www2/examples/network/graphviz/data/hello.gv.txt b/www2/examples/network/graphviz/data/hello.gv.txt new file mode 100644 index 00000000..7bc71ff4 --- /dev/null +++ b/www2/examples/network/graphviz/data/hello.gv.txt @@ -0,0 +1 @@ +digraph G {Hello->World} \ No newline at end of file diff --git a/www2/examples/network/graphviz/data/process.gv.txt b/www2/examples/network/graphviz/data/process.gv.txt new file mode 100644 index 00000000..34fe9fb5 --- /dev/null +++ b/www2/examples/network/graphviz/data/process.gv.txt @@ -0,0 +1,15 @@ +graph G { + run -- intr; + intr -- runbl; + runbl -- run; + run -- kernel; + kernel -- zombie; + kernel -- sleep; + kernel -- runmem; + sleep -- swap; + swap -- runswap; + runswap -- new; + runswap -- runmem; + new -- runmem; + sleep -- runmem; +} diff --git a/www2/examples/network/graphviz/data/siblings.gv.txt b/www2/examples/network/graphviz/data/siblings.gv.txt new file mode 100644 index 00000000..e6628dfc --- /dev/null +++ b/www2/examples/network/graphviz/data/siblings.gv.txt @@ -0,0 +1,512 @@ +/* +This is a graphviz-produced layout of the "family tree" of a fraternity and sorority. + +Each member in the graph was assigned a "big brother" from one organization and a "big sister" from the other. Blue icons represent Brothers from the fraternity, Pink represents Sisters from the sorority (Purple members are in both organizations - like honoraries.) + +Charter members (who can have no parent nodes) are outlined. + +... + +dot -Tgif -Goverlap=false -o siblings.gif siblings.dot + + +We're experimenting with different ways of coloring and graphing, but found this the easiest for now. When we have more people in, we might look at different shades depending on generation number -- earlier people would get lighter colors, more recent members darker. Thumbnail images would be an interesting alteration as well. + +from Japheth Cleaver +*/ + + +digraph sdsu { + size="36,36"; + node [color=grey, style=filled]; + node [fontname="Verdana", size="30,30"]; + graph [ fontname = "Arial", + fontsize = 36, + style = "bold", + label = "\nKappa Kappa Psi/Tau Beta Sigma\nSan Diego State University\nEta Mu and Zeta Xi Family Tree\n\nto date: November 30th, 2008\n", + ssize = "30,60" ]; +"Lori Brede" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=10"]; +"Michael Griffith" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=24"]; +"Amie Holston" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=30"]; +"Michael Griffith" -> "Lori Brede" +"Amie Holston" -> "Lori Brede" +"Casey Carter" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=11"]; +"Laura De'Armond" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=14"]; +"Laura De'Armond" -> "Casey Carter" +"Japheth Cleaver" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=12"]; +"Chuk Gawlik" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=22"]; +"Stacy Snyder" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=309"]; +"Chuk Gawlik" -> "Japheth Cleaver" +"Stacy Snyder" -> "Japheth Cleaver" +"Jillian Clifton" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=13"]; +"David Guthrie" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=25"]; +"David Guthrie" -> "Jillian Clifton" +"Japheth Cleaver" -> "Jillian Clifton" +"Tony Sacco" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=55"]; +"Heather Smith" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=59"]; +"Tony Sacco" -> "Laura De'Armond" +"Heather Smith" -> "Laura De'Armond" +"Kevin Decker" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=15"]; +"Alex Hansen" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=26"]; +"Wanda Livelsberger" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=53"]; +"Alex Hansen" -> "Kevin Decker" +"Wanda Livelsberger" -> "Kevin Decker" +"Patrick Doerr" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=16"]; +"Deanna Jagow" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=23"]; +"Alex Hansen" -> "Patrick Doerr" +"Deanna Jagow" -> "Patrick Doerr" +"Lori Asaro" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=178"]; +"Mark Pearson" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=169"]; +"Lori Ball" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=167"]; +"Mark Pearson" -> "Lori Asaro" +"Lori Ball" -> "Lori Asaro" +"Ryan Farris" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=18"]; +"Rob Reiner" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=51"]; +"Cindy Teel" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=62"]; +"Rob Reiner" -> "Ryan Farris" +"Cindy Teel" -> "Ryan Farris" +"Ginger Palmer" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=180"]; +"Mark Newton-John" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=46"]; +"Mark Newton-John" -> "Ginger Palmer" +"Matthew FitzGerald" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=19"]; +"Mervin Maniago" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=41"]; +"Mervin Maniago" -> "Matthew FitzGerald" +"Amie Holston" -> "Matthew FitzGerald" +"Tani Miller" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=195"]; +"Mark Pearson" -> "Tani Miller" +"Vienna McMurtry" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=196"]; +"Robert Walwick" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=153"]; +"Robert Walwick" -> "Vienna McMurtry" +"Ginger Palmer" -> "Vienna McMurtry" +"Chuck Foster" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=20"]; +"Karen Saye" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=56"]; +"Kevin Decker" -> "Chuck Foster" +"Karen Saye" -> "Chuck Foster" +"Gary Frampton" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=201"]; +"Ginger Palmer" -> "Gary Frampton" +"Pat Norris" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=207"]; +"Sean Tipps" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=204"]; +"Teresa Long" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=194"]; +"Sean Tipps" -> "Pat Norris" +"Teresa Long" -> "Pat Norris" +"Marc Martin-ez" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=208"]; +"Mark Pearson" -> "Marc Martin-ez" +"Tani Miller" -> "Marc Martin-ez" +"Kristen Villone" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=209"]; +"Kelly Erickson" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=199"]; +"Anna Pedroza" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=197"]; +"Kelly Erickson" -> "Kristen Villone" +"Anna Pedroza" -> "Kristen Villone" +"Geoff Frank" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=21"]; +"Chris Livelsberger" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=40"]; +"Amy Price" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=57"]; +"Chris Livelsberger" -> "Geoff Frank" +"Amy Price" -> "Geoff Frank" +"Tracy Murray" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=210"]; +"John FitzGibbon" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=92"]; +"Judy Dulcich" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=177"]; +"John FitzGibbon" -> "Tracy Murray" +"Judy Dulcich" -> "Tracy Murray" +"Ian McIntosh" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=215"]; +"Barbara Tollison" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=172"]; +"Robert Walwick" -> "Ian McIntosh" +"Barbara Tollison" -> "Ian McIntosh" +"Jayson Smith" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=58"]; +"Jayson Smith" -> "Chuk Gawlik" +"Heather Smith" -> "Chuk Gawlik" +"Kelly McKinney" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=222"]; +"Mark Nadeau" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=183"]; +"Mark Nadeau" -> "Kelly McKinney" +"Judy Dulcich" -> "Kelly McKinney" +"Chris Livelsberger" -> "Deanna Jagow" +"Amy Price" -> "Deanna Jagow" +"Renee Thompson" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=231"]; +"J. Angeles" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=3"]; +"Kelley Smith" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=223"]; +"J. Angeles" -> "Renee Thompson" +"Kelley Smith" -> "Renee Thompson" +"Steven Smith" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=233"]; +"John FitzGibbon" -> "Steven Smith" +"Charlene Andrews" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=234"]; +"Diane Reoch" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=227"]; +"Diane Reoch" -> "Charlene Andrews" +"Tonya Alexander" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=238"]; +"Gail Vasquez" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=225"]; +"Gail Vasquez" -> "Tonya Alexander" +"Spencer Caldwell" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=239"]; +"Becky Bernal" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=218"]; +"Becky Bernal" -> "Spencer Caldwell" +"Chuk Gawlik" -> "Michael Griffith" +"Wanda Livelsberger" -> "Michael Griffith" +"Russell Grant" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=242"]; +"Steven Smith" -> "Russell Grant" +"Tiffany Worthington" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=66"]; +"Chuck Foster" -> "David Guthrie" +"Tiffany Worthington" -> "David Guthrie" +"Jerry Maya" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=250"]; +"John FitzGibbon" -> "Jerry Maya" +"Melissa Schwartz" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=252"]; +"Russell Grant" -> "Melissa Schwartz" +"Delphy Shaulis" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=255"]; +"Renee Thompson" -> "Delphy Shaulis" +"Martin Naiman" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=45"]; +"Janean Angeles" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=86"]; +"Martin Naiman" -> "Alex Hansen" +"Janean Angeles" -> "Alex Hansen" +"Leslie Harlow" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=265"]; +"Dennis McColl" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=251"]; +"Denise Luna" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=236"]; +"Dennis McColl" -> "Leslie Harlow" +"Denise Luna" -> "Leslie Harlow" +"Jonathan Yudman" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=267"]; +"April Ortiz-cloninger" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=258"]; +"April Ortiz-cloninger" -> "Jonathan Yudman" +"Michael Elgo" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=268"]; +"Carol Kropp" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=254"]; +"Spencer Caldwell" -> "Michael Elgo" +"Carol Kropp" -> "Michael Elgo" +"Denmark Vea" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=269"]; +"Marc Martin-ez" -> "Denmark Vea" +"Kelley Smith" -> "Denmark Vea" +"Kathleen Hansen" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=27"]; +"Martin Naiman" -> "Kathleen Hansen" +"Heather Smith" -> "Kathleen Hansen" +"Laura Stegner" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=274"]; +"April Ortiz-cloninger" -> "Laura Stegner" +"Kathy Jones" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=28"]; +"J. Angeles" -> "Kathy Jones" +"Eric Gates" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=282"]; +"Erick Sugimura" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=280"]; +"Erick Sugimura" -> "Eric Gates" +"Laura Stegner" -> "Eric Gates" +"Jennifer Stoewe" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=288"]; +"Eric Gates" -> "Jennifer Stoewe" +"Karen Helbling" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=29"]; +"Regan Ashker" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=5"]; +"Kevin Decker" -> "Karen Helbling" +"Regan Ashker" -> "Karen Helbling" +"Scott Wood" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=295"]; +"Eric Gates" -> "Scott Wood" +"Greg Flood" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=200"]; +"Greg Flood" -> "J. Angeles" +"Ginger Palmer" -> "J. Angeles" +"Lynn Reeves" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=48"]; +"Chuk Gawlik" -> "Amie Holston" +"Lynn Reeves" -> "Amie Holston" +"Susan Colwell" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=302"]; +"Michael Elgo" -> "Susan Colwell" +"Christopher Jouan" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=306"]; +"Kevin Owens" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=245"]; +"Kevin Owens" -> "Christopher Jouan" +"Kristianna Reynante" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=308"]; +"Michael Elgo" -> "Kristianna Reynante" +"Janean Angeles" -> "Kristianna Reynante" +"Amy Berner" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=300"]; +"Amy Berner" -> "Stacy Snyder" +"Deanna Johnson" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=31"]; +"Alex Hansen" -> "Deanna Johnson" +"Laura De'Armond" -> "Deanna Johnson" +"Johnny Richardson" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=310"]; +"Russell Grant" -> "Johnny Richardson" +"Nathan Fellhauer" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=313"]; +"James Rowland" [color=thistle, URL="http://sdsu.kkytbs.net/members/profile.html?who=52"]; +"James Rowland" -> "Nathan Fellhauer" +"Kristianna Reynante" -> "Nathan Fellhauer" +"Brian Raneses" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=314"]; +"Sean McHenry" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=42"]; +"Sean McHenry" -> "Brian Raneses" +"Penny Lewis" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=315"]; +"Martin Naiman" -> "Penny Lewis" +"Becky Graham" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=316"]; +"Kristen Elgo" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=7"]; +"Kristen Elgo" -> "Becky Graham" +"Steven Gross" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=318"]; +"Rob Reiner" -> "Steven Gross" +"Stacy Snyder" -> "Steven Gross" +"Sedona Reynolds" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=32"]; +"Mark Newton-John" -> "Sedona Reynolds" +"Cindy Teel" -> "Sedona Reynolds" +"Klair Mayerchak" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=320"]; +"Nathan Fellhauer" -> "Klair Mayerchak" +"Becky Graham" -> "Klair Mayerchak" +"Shari VerBerkmoes" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=321"]; +"Sean McHenry" -> "Shari VerBerkmoes" +"Janean Angeles" -> "Shari VerBerkmoes" +"Anson Summers" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=326"]; +"James Rowland" -> "Anson Summers" +"Dusty Jolliff" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=33"]; +"Rob Reiner" -> "Dusty Jolliff" +"Stacy Snyder" -> "Dusty Jolliff" +"Jennifer Garman" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=331"]; +"James Rowland" -> "Jennifer Garman" +"Kelly Greenhill" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=333"]; +"Rob Reiner" -> "Kelly Greenhill" +"Kristen Elgo" -> "Kelly Greenhill" +"Lucinda Farless" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=334"]; +"J. Angeles" -> "Lucinda Farless" +"Susan Colwell" -> "Lucinda Farless" +"Alfredo Cardenas" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=335"]; +"Chuk Gawlik" -> "Alfredo Cardenas" +"Kathleen Hansen" -> "Alfredo Cardenas" +"Jennifer Jouan" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=34"]; +"Andrea Owens" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=276"]; +"Andrea Owens" -> "Jennifer Jouan" +"Tamara Scrivner" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=345"]; +"Joseph Butler" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=69"]; +"Sarah Maltese" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=83"]; +"Joseph Butler" -> "Tamara Scrivner" +"Sarah Maltese" -> "Tamara Scrivner" +"Bradley Stouse" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=346"]; +"Ryan Underwood" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=74"]; +"Ryan Underwood" -> "Bradley Stouse" +"Cindy Teel" -> "Bradley Stouse" +"Casondra Brimmage" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=347"]; +"Kristopher Lininger" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=85"]; +"Ilana Melcher" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=73"]; +"Kristopher Lininger" -> "Casondra Brimmage" +"Ilana Melcher" -> "Casondra Brimmage" +"Cassiopeia Guthrie" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=348"]; +"Jeremy Frazier" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=79"]; +"Christine Mount" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=76"]; +"Jeremy Frazier" -> "Cassiopeia Guthrie" +"Christine Mount" -> "Cassiopeia Guthrie" +"Kathleen Moran" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=349"]; +"Matthew FitzGerald" -> "Kathleen Moran" +"Lori Brede" -> "Kathleen Moran" +"Tiffany Kalland" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=35"]; +"Tony Sacco" -> "Tiffany Kalland" +"Karen Helbling" -> "Tiffany Kalland" +"Kristen Anderson" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=350"]; +"Jennie Bogart" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=78"]; +"David Guthrie" -> "Kristen Anderson" +"Jennie Bogart" -> "Kristen Anderson" +"Laura Simonette" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=351"]; +"Jon Weisel" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=89"]; +"Jon Weisel" -> "Laura Simonette" +"Japheth Cleaver" -> "Laura Simonette" +"Nathan Williams" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=352"]; +"David Guthrie" -> "Nathan Williams" +"Karen Helbling" -> "Nathan Williams" +"Rebecca Hippert" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=353"]; +"Ryan Underwood" -> "Rebecca Hippert" +"Tiffany Kalland" -> "Rebecca Hippert" +"Samuel Wallace" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=354"]; +"Joseph Butler" -> "Samuel Wallace" +"Deanna Jagow" -> "Samuel Wallace" +"Scott Gardner" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=355"]; +"Jeremy Frazier" -> "Scott Gardner" +"Christine Mount" -> "Scott Gardner" +"Alberto Ayon" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=356"]; +"Bradley Stouse" -> "Alberto Ayon" +"Jennie Bogart" -> "Alberto Ayon" +"Susannah Clayton" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=357"]; +"Nathan Williams" -> "Susannah Clayton" +"Karen Helbling" -> "Susannah Clayton" +"Lisa Gochnauer" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=358"]; +"Scott Gardner" -> "Lisa Gochnauer" +"Casondra Brimmage" -> "Lisa Gochnauer" +"Jamie Jackson" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=359"]; +"Samuel Wallace" -> "Jamie Jackson" +"Tamara Scrivner" -> "Jamie Jackson" +"Christina Kelly" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=36"]; +"Matthew FitzGerald" -> "Christina Kelly" +"Lori Brede" -> "Christina Kelly" +"Gara Thornton" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=360"]; +"Mark Newton-John" -> "Gara Thornton" +"Laura Simonette" -> "Gara Thornton" +"Robert Winebarger" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=361"]; +"Robin Ellison" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=90"]; +"Scott Gardner" -> "Robert Winebarger" +"Robin Ellison" -> "Robert Winebarger" +"Jeremy Kirchner" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=37"]; +"Rob Reiner" -> "Jeremy Kirchner" +"Sandy Konar" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=38"]; +"Jennifer Brandon" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=9"]; +"Jennifer Brandon" -> "Sandy Konar" +"Dan Kuhlman" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=39"]; +"Rob Reiner" -> "Dan Kuhlman" +"Dusty Jolliff" -> "Dan Kuhlman" +"Lindsay Arehart" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=4"]; +"Martin Naiman" -> "Lindsay Arehart" +"Jennifer Brandon" -> "Lindsay Arehart" +"J. Angeles" -> "Mervin Maniago" +"Kathy Jones" -> "Mervin Maniago" +"Jarrod Monroe" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=43"]; +"Jamie Fratacci" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=44"]; +"Mark Newton-John" -> "Jarrod Monroe" +"Jamie Fratacci" -> "Jarrod Monroe" +"Chuk Gawlik" -> "Jamie Fratacci" +"Tiffany Worthington" -> "Jamie Fratacci" +"Russell Grant" -> "Martin Naiman" +"Tonya Alexander" -> "Martin Naiman" +"Edward Givens" [color=lightblue, outline=bold, style=bold, URL="http://sdsu.kkytbs.net/members/profile.html?who=106"]; +"Edward Givens" -> "Mark Newton-John" +"Veronica Nickel" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=47"]; +"Regan Ashker" -> "Veronica Nickel" +"Wanda Livelsberger" -> "Lynn Reeves" +"Bryan Ransom" [color=thistle, URL="http://sdsu.kkytbs.net/members/profile.html?who=49"]; +"Jayson Smith" -> "Bryan Ransom" +"Tony Sacco" -> "Regan Ashker" +"Dusty Jolliff" -> "Regan Ashker" +"Jennifer Stout" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=50"]; +"Matthew FitzGerald" -> "Jennifer Stout" +"Deanna Jagow" -> "Jennifer Stout" +"Sean McHenry" -> "James Rowland" +"James Rowland" -> "Wanda Livelsberger" +"Janean Angeles" -> "Wanda Livelsberger" +"Melissa Roy" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=54"]; +"Mervin Maniago" -> "Melissa Roy" +"Christina Kelly" -> "Melissa Roy" +"Dennis McColl" -> "Tony Sacco" +"April Ortiz-cloninger" -> "Tony Sacco" +"Tony Sacco" -> "Karen Saye" +"Tony Sacco" -> "Amy Price" +"Kathleen Hansen" -> "Amy Price" +"James Rowland" -> "Jayson Smith" +"Brian Raneses" -> "Heather Smith" +"Kristen Elgo" -> "Heather Smith" +"Josh Atwood" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=6"]; +"David Guthrie" -> "Josh Atwood" +"Lori Brede" -> "Josh Atwood" +"Katie Browne" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=60"]; +"Patrick Doerr" -> "Katie Browne" +"Jamie Fratacci" -> "Katie Browne" +"Kristin Tang" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=61"]; +"James Rowland" -> "Kristin Tang" +"Heather Smith" -> "Kristin Tang" +"Mervin Maniago" -> "Cindy Teel" +"Veronica Nickel" -> "Cindy Teel" +"Mike Tulumello" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=63"]; +"Matthew FitzGerald" -> "Mike Tulumello" +"Katie Browne" -> "Mike Tulumello" +"Veronica Villanueva" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=64"]; +"Ryan Farris" -> "Veronica Villanueva" +"Sedona Reynolds" -> "Veronica Villanueva" +"Mervin Maniago" -> "Tiffany Worthington" +"Jennifer Jouan" -> "Tiffany Worthington" +"Scott Wright" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=67"]; +"James Rowland" -> "Scott Wright" +"Kristen Elgo" -> "Scott Wright" +"Jeremy Browne" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=68"]; +"Matthew FitzGerald" -> "Jeremy Browne" +"Japheth Cleaver" -> "Jeremy Browne" +"James Fogelman" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=688"]; +"Alberto Ayon" -> "James Fogelman" +"Susannah Clayton" -> "James Fogelman" +"Sandra Chase" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=689"]; +"David Guthrie" -> "Sandra Chase" +"Japheth Cleaver" -> "Sandra Chase" +"Patrick Doerr" -> "Joseph Butler" +"Deanna Jagow" -> "Joseph Butler" +"Laura Fisher" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=690"]; +"Nathan Williams" -> "Laura Fisher" +"Casondra Brimmage" -> "Laura Fisher" +"Katie Kozma" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=691"]; +"Scott Wright" -> "Katie Kozma" +"Robin Ellison" -> "Katie Kozma" +"Rachel Perkins" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=692"]; +"Joseph Butler" -> "Rachel Perkins" +"Cassiopeia Guthrie" -> "Rachel Perkins" +"Sarah Titilah" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=693"]; +"Robert Winebarger" -> "Sarah Titilah" +"Karen Helbling" -> "Sarah Titilah" +"Ashley Rehart" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=694"]; +"Laura Fisher" -> "Ashley Rehart" +"Cara Yancey" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=695"]; +"Katie Kozma" -> "Cara Yancey" +"Ashley Presley" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=698"]; +"Cara Yancey" -> "Ashley Presley" +"Leila Wilhelm" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=699"]; +"Robin Ellison" -> "Leila Wilhelm" +"Sean McHenry" -> "Kristen Elgo" +"Stacy Snyder" -> "Kristen Elgo" +"Greg Moody" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=70"]; +"Ryan Farris" -> "Greg Moody" +"Jennifer Stout" -> "Greg Moody" +"Lisa Fleck" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=700"]; +"Rachel Perkins" -> "Lisa Fleck" +"Christine Coyne" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=701"]; +"Rachel Perkins" -> "Christine Coyne" +"Jennifer Cooley" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=702"]; +"Laura Fisher" -> "Jennifer Cooley" +"Elizabeth Larios" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=703"]; +"Ashley Rehart" -> "Elizabeth Larios" +"Cate Threlkeld" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=707"]; +"Katie Kozma" -> "Cate Threlkeld" +"Erika Tapia" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=71"]; +"Patrick Doerr" -> "Erika Tapia" +"Melissa Roy" -> "Erika Tapia" +"Robbyn Rozelle" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=72"]; +"Jarrod Monroe" -> "Robbyn Rozelle" +"Tiffany Kalland" -> "Robbyn Rozelle" +"Ryan Farris" -> "Ilana Melcher" +"Veronica Villanueva" -> "Ilana Melcher" +"Greg Moody" -> "Ryan Underwood" +"Katie Browne" -> "Ryan Underwood" +"Cameron Brown" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=75"]; +"Joseph Butler" -> "Cameron Brown" +"Tiffany Kalland" -> "Cameron Brown" +"Ryan Underwood" -> "Christine Mount" +"Lori Brede" -> "Christine Mount" +"Janay Rabe" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=77"]; +"Greg Moody" -> "Janay Rabe" +"Cindy Teel" -> "Janay Rabe" +"Jeremy Browne" -> "Jennie Bogart" +"Tiffany Kalland" -> "Jennie Bogart" +"Ryan Farris" -> "Jeremy Frazier" +"Ilana Melcher" -> "Jeremy Frazier" +"Crystal Bozak" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=8"]; +"Patrick Doerr" -> "Crystal Bozak" +"Katie Browne" -> "Crystal Bozak" +"Kameka Smith" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=80"]; +"Matthew FitzGerald" -> "Kameka Smith" +"Ilana Melcher" -> "Kameka Smith" +"Kyra Sacco" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=81"]; +"Joseph Butler" -> "Kyra Sacco" +"Robbyn Rozelle" -> "Kyra Sacco" +"Samuel Behar" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=82"]; +"Ryan Underwood" -> "Samuel Behar" +"Lori Brede" -> "Samuel Behar" +"Patrick Doerr" -> "Sarah Maltese" +"Deanna Jagow" -> "Sarah Maltese" +"David Bronson" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=84"]; +"Kristin Alongi-Hutchins" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=87"]; +"Tony Sacco" -> "David Bronson" +"Kristin Alongi-Hutchins" -> "David Bronson" +"Cameron Brown" -> "Kristopher Lininger" +"Kameka Smith" -> "Kristopher Lininger" +"Rakan Abu-Rahma" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=852"]; +"Christine Coyne" -> "Rakan Abu-Rahma" +"Jennifer Berry" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=270"]; +"Jennifer Berry" -> "Janean Angeles" +"Penny Lewis" -> "Kristin Alongi-Hutchins" +"Melissa Bebak" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=88"]; +"Greg Moody" -> "Melissa Bebak" +"Sarah Maltese" -> "Melissa Bebak" +"Scott Wright" -> "Jennifer Brandon" +"Japheth Cleaver" -> "Jennifer Brandon" +"Samuel Behar" -> "Robin Ellison" +"Kyra Sacco" -> "Robin Ellison" +"Teresa Simms" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=91"]; +"Joseph Butler" -> "Teresa Simms" +"Janay Rabe" -> "Teresa Simms" +"Robert Schmidtke" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=188"]; +"Jean Newman" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=166"]; +"Robert Schmidtke" -> "John FitzGibbon" +"Jean Newman" -> "John FitzGibbon" +"Brittany DePew" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=928"]; +"Elizabeth Larios" -> "Brittany DePew" +"Kathleen Halberg" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=929"]; +"Ashley Rehart" -> "Kathleen Halberg" +"Terrance Hirsch" [color=lightblue, URL="http://sdsu.kkytbs.net/members/profile.html?who=96"]; +"J. Angeles" -> "Terrance Hirsch" +"Susan Colwell" -> "Terrance Hirsch" +"Monique Arellano" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=972"]; +"Ashley Presley" -> "Monique Arellano" +"Anthony Henderson" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=973"]; +"Jennifer Cooley" -> "Anthony Henderson" +"Amethyst Tagle" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=974"]; +"Cate Threlkeld" -> "Amethyst Tagle" +"Mallory Williams" [color=lightpink, URL="http://sdsu.kkytbs.net/members/profile.html?who=975"]; +"Lisa Fleck" -> "Mallory Williams" +} \ No newline at end of file diff --git a/www2/examples/network/graphviz/data/softmaint.gv.txt b/www2/examples/network/graphviz/data/softmaint.gv.txt new file mode 100644 index 00000000..04110890 --- /dev/null +++ b/www2/examples/network/graphviz/data/softmaint.gv.txt @@ -0,0 +1,377 @@ +digraph G { + size="7,10" + page="8.5,11" + center="" + node[width=.25,height=.375,fontsize=9] + fcfpr1_1_2t_17 -> 341411; + fcfpr1_1t_1 -> 341411; + rdlfpr2_0_rdlt_4 -> 341411; + fpfpr1_0_1t_1 -> 341411; + fpfpr1_1_2t_11 -> 341411; + rtafpr1_1_2t_28 -> 341411; + rtafpr1_1_3t_6 -> 341411; + rdlfpr1_1t_1 -> 358866; + rtafpr1_1_3t_6 -> 358866; + tmfpr1_1_3t_5 -> 358930; + fcfpr1_1_3t_9 -> 358930; + pcfpr1_1_3t_7 -> 358930; + fpfpr1_1_3g_1 -> 358930; + fpfpr1_1_3t_1 -> 358930; + aufpr1_1_3t_1 -> 358930; + rtafpr1_0_3g_1 -> 358930; + rtafpr1_1_3t_6 -> 358930; + msgfpr1_1_1g_12 -> 371943; + rtafpr1_1_1g_8 -> 371943; + rtafpr1_1_1t_35 -> 371943; + rtafpr1_1_1t_45 -> 371943; + rtafpr1_1_3t_6 -> 371943; + tlfpr2_0_rdlg_2 -> 374300; + fcfpr1_1_3t_8 -> 374300; + fcfpr1_1_3t_9 -> 374300; + rtafpr1_1_3t_6 -> 374300; + fcfpr1_0_5g_1 -> 371942; + fcfpr1_1_1t_19 -> 371942; + fcfpr1_1_3t_9 -> 371942; + fcfpr1_1_3t_9 -> 374700; + tymsgfpr1_1_3t_3 -> 374700; + fpfpr1_1_3t_1 -> 374700; + rtafpr1_1_3t_7 -> 374700; + fcfpr1_1_3g_2 -> 374741; + fcfpr1_1_3t_9 -> 374741; + fpfpr1_1_3t_1 -> 374741; + rtafpr1_1_3t_7 -> 374741; + fcfpr1_1_1t_18 -> 374886; + fcfpr1_1_3t_9 -> 374886; + fpfpr1_1_3t_1 -> 374886; + rtafpr1_1_3t_7 -> 374886; + fcfpr1_1_3t_9 -> 375039; + fpfpr1_1_3t_1 -> 375039; + fcfpr1_1_3t_42 -> 375507; + fcfpr1_1_3t_9 -> 375507; + rdlfpr2_0_rdlt_158 -> 375507; + rtafpr1_1_3t_7 -> 375507; + rtafpr1_1_3t_71 -> 375507; + dbfpr1_1_3t_2 -> 375507; + fcfpr1_1_3t_9 -> 375508; + rdlfpr1_1g_13 -> 375508; + rtafpr1_1_3t_7 -> 375508; + rtafpr2_1_rdlg_1 -> 375508; + dbfpr1_1_3t_2 -> 375508; + fcfpr1_1_3t_9 -> 375519; + fpfpr1_1_3g_1 -> 375519; + fpfpr1_1_3t_1 -> 375519; + fcfpr1_1_3t_9 -> 377380; + rdlfpr1_1g_16 -> 377380; + rdlfpr1_1t_100 -> 377380; + fcfpr1_0_2g_1 -> 377719; + fcfpr1_1_3t_10 -> 377719; + fcfpr1_1_3t_7 -> 377719; + fcfpr1_1_3t_9 -> 377719; + rdlfpr2_0_rdlg_12 -> 377719; + rdlfpr2_0_rdlt_108 -> 377719; + rdlfpr2_0_rdlt_27 -> 377719; + rdlfpr2_0_rdlt_30 -> 377719; + fcfpr1_1_3t_9 -> 377763; + fcfpr1_1_3t_9 -> 379848; + fpfpr1_1_3t_1 -> 379848; + fcfpr1_1_3t_9 -> 380571; + fcfpr1_1_3t_9 -> 380604; + fpfpr1_1_3t_1 -> 380604; + fcfpr1_1_3t_9 -> 381211; + fpfpr1_1_3t_1 -> 381211; + fcfpr1_1_3t_9 -> 381835; + fcfpr1_1_3t_9 -> 381897; + fcfpr1_1_3t_9 -> 381901; + fpfpr1_1_3t_1 -> 381901; + fcfpr1_1_3t_9 -> 382103; + rtafpr1_1_3t_7 -> 382103; + fcfpr1_1_3t_9 -> 382161; + fcfpr1_1_3t_9 -> 383174; + fpfpr1_1_3t_1 -> 383174; + rtafpr1_1_3t_7 -> 383174; + fpfpr1_1_3g_1 -> 352010; + fpfpr1_1_3t_1 -> 352010; + fpfpr1_1_3t_1 -> 382409; + fpfpr1_1_3t_1 -> 382827; + fpfpr1_1_3t_1 -> 382928; + rtafpr1_1_3t_7 -> 382928; + tlfpr1_1_1t_5 -> 358224; + tymsgfpr1_1_1t_23 -> 358224; + tymsgfpr1_1_3t_3 -> 358224; + rcfpr0_0_1t_9 -> 358224; + rcfpr1_1_1t_5 -> 358224; + odfpr0_0_1t_8 -> 358224; + odfpr1_1_1t_6 -> 358224; + ecdsgfpr1_1_1t_4 -> 358224; + tymsgfpr1_1_1t_18 -> 358900; + tymsgfpr1_1_3t_3 -> 358900; + rcfpr1_1_1t_100 -> 358900; + rcfpr1_1_1t_22 -> 358900; + rcfpr1_1_1t_37 -> 358900; + odfpr1_1_1t_21 -> 358900; + tymsgfpr1_1_3t_3 -> 372568; + rcfpr1_1_1t_30 -> 372568; + odfpr1_1_1t_31 -> 372568; + tlfpr1_1_1t_20 -> 375557; + tymsgfpr1_1_1t_24 -> 375557; + tymsgfpr1_1_3t_3 -> 375557; + rcfpr1_1_1t_11 -> 375557; + odfpr1_1_1t_9 -> 375557; + ecdsgfpr1_1_1t_19 -> 375557; + rtafpr1_1_1g_14 -> 376956; + rtafpr1_1_1t_64 -> 376956; + rtafpr1_1_2t_18 -> 376956; + rtafpr1_1_3t_30 -> 376956; + rtafpr1_1_3t_7 -> 376956; + rtafpr1_1_3t_7 -> 379339; + rtafpr1_1_1t_14 -> 379422; + rtafpr1_1_1t_20 -> 379422; + rtafpr1_1_3t_7 -> 379422; + rtafpr1_1_3t_7 -> 383039; + fcfpr1_1_1t_18 -> 359471; + fcfpr2_0_1t_1 -> 359471; + fcfpr2_0_1t_2 -> 359471; + ccsfpr2_0_1t_99 -> 359471; + fcfpr1_1_3t_42 -> 384096; + rtafpr1_1_3t_71 -> 384096; + tlfpr1_0_4g_4 -> 354290; + rcfpr0_0_1t_9 -> 354290; + odfpr0_0_1t_8 -> 354290; + pagfpr1_1_1t_23 -> 354290; + rcfpr1_1_1t_5 -> 379864; + rcfpr1_1_1t_100 -> 382574; + rcfpr1_1_1t_22 -> 382574; + rcfpr1_1_1t_37 -> 382574; + rcfpr1_1_1t_30 -> 370706; + rcfpr1_1_1t_30 -> 377908; + rcfpr1_1_1t_30 -> 377924; + rcfpr1_1_1t_30 -> 377971; + rcfpr1_1_1t_30 -> 377980; + odfpr1_1_1t_31 -> 377980; + rcfpr1_1_1t_30 -> 378362; + rcfpr1_1_1t_30 -> 378656; + rcfpr1_1_1t_30 -> 378666; + rcfpr1_1_1t_30 -> 379169; + odfpr1_1_1t_31 -> 379169; + rcfpr1_1_1t_110 -> 379341; + rcfpr1_1_1t_30 -> 379341; + rcfpr1_1_1t_62 -> 379341; + odfpr1_1_1t_31 -> 379341; + rcfpr1_1_1t_30 -> 379972; + rcfpr1_1_1t_30 -> 380298; + rcfpr1_1_1t_30 -> 380448; + rcfpr1_1_1t_30 -> 380475; + odfpr1_1_1t_31 -> 380475; + rcfpr1_1_1t_30 -> 380526; + odfpr1_1_1t_31 -> 357430; + rcfpr1_1_1t_11 -> 379968; + odfpr1_1_1t_9 -> 379968; + ccsfpr2_0_1t_99 -> 359100; + ccsfpr2_0_1t_99 -> 376529; + ccsfpr2_0_1t_99 -> 377801; + ccsfpr2_0_1t_99 -> 379126; + ccsfpr2_0_1t_99 -> 379212; + ccsfpr2_0_1t_99 -> 380285; + ccsfpr2_0_1t_99 -> 380963; + ccsfpr2_0_1t_99 -> 384909; + tlfpr1_0_4g_4 -> 358471; + odfpr0_0_1t_7 -> 358471; + odfpr1_0_1t_36 -> 358471; + odfpr1_0_3t_18 -> 358471; + odfpr1_0_3t_21 -> 358471; + tlfpr1_0_4g_4 -> 375024; + tlfpr1_0_4g_4 -> 375027; + rcfpr1_1_1t_110 -> 381710; + rcfpr1_1_1t_62 -> 381710; + rcfpr1_1_1t_110 -> 381775; + rcfpr1_1_1t_62 -> 381775; + rcfpr1_1_1t_110 -> 382436; + fcfpr1_1_3t_34 -> 382528; + rcfpr1_1_1t_110 -> 382528; + rtafpr1_1_3t_48 -> 382528; + rcfpr1_1_1t_110 -> 382566; + rcfpr1_1_1t_110 -> 382572; + odfpr0_0_1t_7 -> 353506; + rcfpr1_0_1t_35 -> 370509; + odfpr0_0_1t_7 -> 370509; + odfpr0_0_1t_7 -> 370510; + odfpr1_0_1t_38 -> 370510; + tlfpr1_0_4g_5 -> 354546; + rcfpr1_1_1t_61 -> 354546; + odfpr1_0_3t_18 -> 354546; + odfpr1_0_3t_20 -> 354546; + odfpr1_0_3t_18 -> 354757; + odfpr1_0_3t_20 -> 354757; + odfpr1_0_3t_18 -> 354766; + odfpr1_0_3t_20 -> 354766; + odfpr1_0_3t_18 -> 354771; + odfpr1_0_3t_20 -> 354771; + odfpr1_0_3t_18 -> 354785; + odfpr1_0_3t_23 -> 354785; + odfpr1_0_3t_24 -> 354785; + odfpr1_0_3t_18 -> 354878; + odfpr1_0_3t_23 -> 354878; + odfpr1_0_3t_24 -> 354878; + odfpr1_0_3t_18 -> 355080; + odfpr1_0_3t_23 -> 355080; + odfpr1_0_3t_24 -> 355080; + odfpr1_0_3t_18 -> 355288; + odfpr1_0_3t_23 -> 355288; + odfpr1_0_3t_24 -> 355288; + odfpr2_0_03t_13 -> 355288; + odfpr1_0_3t_18 -> 355800; + odfpr1_0_3t_21 -> 355800; + odfpr1_0_3t_18 -> 356116; + odfpr1_0_3t_21 -> 356116; + odfpr1_0_3t_18 -> 356741; + odfpr1_0_3t_21 -> 356741; + odfpr1_0_3t_18 -> 357340; + odfpr1_0_3t_21 -> 357340; + odfpr1_0_3t_18 -> 357538; + odfpr1_0_3t_21 -> 357538; + odfpr1_0_3t_18 -> 357769; + odfpr1_0_3t_21 -> 357769; + odfpr1_0_3t_18 -> 357793; + odfpr1_0_3t_21 -> 357793; + odfpr1_0_3t_18 -> 358155; + odfpr1_0_3t_21 -> 358155; + odfpr1_0_3t_18 -> 358157; + odfpr1_0_3t_21 -> 358157; + odfpr1_0_3t_18 -> 358159; + odfpr1_0_3t_21 -> 358159; + odfpr1_0_3t_18 -> 358584; + odfpr1_0_3t_21 -> 358584; + odfpr1_0_3t_18 -> 360104; + odfpr1_0_3t_21 -> 360104; + odfpr1_0_3t_18 -> 360144; + odfpr1_0_3t_21 -> 360144; + odfpr1_0_3t_18 -> 360672; + odfpr1_0_3t_21 -> 360672; + odfpr1_0_3t_5 -> 360672; + odfpr1_0_3t_18 -> 360839; + odfpr1_0_3t_21 -> 360839; + odfpr1_0_3t_18 -> 371187; + tlfpr1_0_3g_5 -> 373300; + odfpr1_0_3t_12 -> 373300; + odfpr1_0_3t_18 -> 373300; + odfpr1_0_3t_18 -> 375134; + odfpr1_0_5t_18 -> 375134; + rcfpr0_0_1t_10 -> 375319; + odfpr1_0_3t_18 -> 375319; + odfpr1_0_3t_36 -> 375319; + odfpr1_0_5t_17 -> 375319; + odfpr1_0_5t_19 -> 375319; + odfpr1_0_3t_18 -> 375499; + odfpr1_0_3t_18 -> 377220; + odfpr1_0_5t_21 -> 377220; + tlfpr1_0_3g_7 -> 377562; + tlfpr1_1_1t_3 -> 377562; + odfpr1_0_3t_18 -> 377562; + odfpr1_0_3t_36 -> 377562; + odfpr1_0_5t_20 -> 377562; + odfpr1_0_3t_18 -> 378108; + odfpr1_0_3t_6 -> 378108; + odfpr1_0_5t_20 -> 354221; + + odfpr0_0_1t_7 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + tlfpr1_0_3g_5 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + odfpr0_0_1t_8 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + rcfpr1_1_1t_61 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + fcfpr1_1t_1 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + odfpr1_0_3t_18 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + tlfpr1_0_3g_7 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + rcfpr1_1_1t_62 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + ccsfpr2_0_1t_99 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + tymsgfpr1_1_3t_3 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + rcfpr0_0_1t_9 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + rtafpr1_1_1t_14 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + rtafpr1_1_3t_30 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + rcfpr1_1_1t_110 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + dbfpr1_1_3t_2 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + rtafpr1_1_1g_8 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + rcfpr1_1_1t_30 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + tlfpr1_1_1t_20 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + rtafpr1_1_1t_64 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + tlfpr2_0_rdlg_2 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + rtafpr1_1_2t_28 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + tlfpr1_1_1t_3 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + odfpr1_1_1t_6 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + fpfpr1_1_3t_1 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + aufpr1_1_3t_1 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + fcfpr1_1_3t_34 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + rcfpr1_1_1t_5 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + fcfpr1_1_1t_18 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + odfpr1_0_3t_36 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + tlfpr1_1_1t_5 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + fcfpr1_1_1t_19 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + odfpr1_1_1t_9 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + fcfpr1_1_3t_7 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + rcfpr1_1_1t_37 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + fcfpr1_1_3t_8 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + odfpr1_1_1t_21 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + fcfpr1_1_3t_9 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + rdlfpr2_0_rdlt_27 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + fcfpr1_1_3g_2 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + rtafpr1_1_1t_35 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + odfpr1_0_5t_20 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + fpfpr1_1_3g_1 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + odfpr1_0_5t_21 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + fpfpr1_1_2t_11 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + ecdsgfpr1_1_1t_19 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + odfpr1_0_1t_36 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + rtafpr1_1_1g_14 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + tymsgfpr1_1_1t_23 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + tymsgfpr1_1_1t_24 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + odfpr1_0_1t_38 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + fcfpr1_0_2g_1 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + rdlfpr1_1t_1 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + rcfpr0_0_1t_10 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + rcfpr1_1_1t_100 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + rdlfpr2_0_rdlt_108 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + pcfpr1_1_3t_7 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + odfpr1_0_3t_20 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + ecdsgfpr1_1_1t_4 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + tmfpr1_1_3t_5 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + odfpr1_0_3t_21 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + fpfpr1_0_1t_1 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + odfpr1_0_3t_23 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + rcfpr1_1_1t_22 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + pagfpr1_1_1t_23 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + rtafpr1_1_3t_71 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + rtafpr1_1_2t_18 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + rdlfpr2_0_rdlt_158 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + rtafpr1_1_3t_6 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + odfpr1_0_3t_24 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + rtafpr1_1_3t_7 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + rtafpr1_0_3g_1 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + rtafpr1_1_1t_20 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + rdlfpr1_1g_13 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + rcfpr1_0_1t_35 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + fcfpr1_1_2t_17 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + rtafpr2_1_rdlg_1 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + rdlfpr2_0_rdlt_4 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + rdlfpr1_1g_16 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + fcfpr2_0_1t_1 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + fcfpr2_0_1t_2 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + rdlfpr1_1t_100 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + msgfpr1_1_1g_12 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + rdlfpr2_0_rdlt_30 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + odfpr1_0_3t_5 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + tlfpr1_0_4g_4 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + fcfpr1_1_3t_42 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + odfpr1_0_3t_6 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + tlfpr1_0_4g_5 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + rtafpr1_1_3t_48 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + odfpr1_0_5t_17 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + odfpr1_0_5t_18 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + tymsgfpr1_1_1t_18 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + odfpr1_0_5t_19 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + fcfpr1_1_3t_10 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + fcfpr1_0_5g_1 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + odfpr1_0_3t_12 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + odfpr2_0_03t_13 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + rcfpr1_1_1t_11 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + odfpr1_1_1t_31 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + rdlfpr2_0_rdlg_12 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; + rtafpr1_1_1t_45 [label="",shape=circle,height=0.12,width=0.12,fontsize=1]; +} diff --git a/www2/examples/network/graphviz/data/traffic_lights.gv.txt b/www2/examples/network/graphviz/data/traffic_lights.gv.txt new file mode 100644 index 00000000..2cc3c482 --- /dev/null +++ b/www2/examples/network/graphviz/data/traffic_lights.gv.txt @@ -0,0 +1,29 @@ +##"I played some days with making an interface between our ConceptBase system (essentially a database system to store models) and graphviz. One example graph is attached. It is a so-called petri net for Dutch traffic lights. The example is actually taken from a book by Wil van der Aalst." Contributed by Manfred Jeusfeld. + +##Command to produce the output: "neato -Tpng thisfile > thisfile.png" + +digraph TrafficLights { +node [shape=box]; gy2; yr2; rg2; gy1; yr1; rg1; +node [shape=circle,fixedsize=true,width=0.9]; green2; yellow2; red2; safe2; safe1; green1; yellow1; red1; +gy2->yellow2; +rg2->green2; +yr2->safe1; +yr2->red2; +safe2->rg2; +green2->gy2; +yellow2->yr2; +red2->rg2; +gy1->yellow1; +rg1->green1; +yr1->safe2; +yr1->red1; +safe1->rg1; +green1->gy1; +yellow1->yr1; +red1->rg1; + +overlap=false +label="PetriNet Model TrafficLights\nExtracted from ConceptBase and layed out by Graphviz" +fontsize=12; +} + diff --git a/www2/examples/network/graphviz/data/transparency.gv.txt b/www2/examples/network/graphviz/data/transparency.gv.txt new file mode 100644 index 00000000..cfb82319 --- /dev/null +++ b/www2/examples/network/graphviz/data/transparency.gv.txt @@ -0,0 +1,105 @@ +graph G { +// graph [splines=true overlap=false] +// graph [truecolor bgcolor="#ff00005f"] + node [style=filled fillcolor="#00ff005f"] + 1 -- 30 [f=1]; + 1 -- 40 [f=14]; + 8 -- 46 [f=1]; + 8 -- 16 [f=18]; + 10 -- 25 [f=1]; + 10 -- 19 [f=5]; + 10 -- 33 [f=1]; + 12 -- 8 [f=1]; + 12 -- 36 [f=5]; + 12 -- 17 [f=16]; + 13 -- 38 [f=1]; + 13 -- 24 [f=19]; + 24 -- 49 [f=1]; + 24 -- 13 [f=1]; + 24 -- 47 [f=12]; + 24 -- 12 [f=19]; + 25 -- 27 [f=1]; + 25 -- 12 [f=1]; + 27 -- 12 [f=1]; + 27 -- 14 [f=8]; + 29 -- 10 [f=1]; + 29 -- 8 [f=17]; + 30 -- 24 [f=1]; + 30 -- 44 [f=15]; + 38 -- 29 [f=1]; + 38 -- 35 [f=15]; + 2 -- 42 [f=2]; + 2 -- 35 [f=3]; + 2 -- 11 [f=19]; + 14 -- 18 [f=2]; + 14 -- 24 [f=15]; + 14 -- 38 [f=18]; + 18 -- 49 [f=2]; + 18 -- 47 [f=20]; + 26 -- 41 [f=2]; + 26 -- 42 [f=15]; + 31 -- 39 [f=2]; + 31 -- 47 [f=17]; + 31 -- 25 [f=14]; + 37 -- 26 [f=2]; + 37 -- 16 [f=14]; + 39 -- 50 [f=2]; + 39 -- 14 [f=2]; + 39 -- 18 [f=17]; + 39 -- 47 [f=10]; + 41 -- 31 [f=2]; + 41 -- 8 [f=16]; + 42 -- 44 [f=2]; + 42 -- 29 [f=12]; + 44 -- 37 [f=2]; + 44 -- 32 [f=15]; + 3 -- 20 [f=2]; + 3 -- 28 [f=19]; + 6 -- 45 [f=2]; + 6 -- 28 [f=10]; + 9 -- 6 [f=2]; + 9 -- 16 [f=1]; + 15 -- 16 [f=2]; + 15 -- 48 [f=2]; + 16 -- 50 [f=2]; + 16 -- 32 [f=14]; + 16 -- 39 [f=8]; + 20 -- 33 [f=2]; + 33 -- 9 [f=2]; + 33 -- 46 [f=3]; + 33 -- 48 [f=17]; + 45 -- 15 [f=2]; + 4 -- 17 [f=4]; + 4 -- 15 [f=6]; + 4 -- 12 [f=16]; + 17 -- 21 [f=4]; + 19 -- 35 [f=4]; + 19 -- 15 [f=9]; + 19 -- 43 [f=4]; + 21 -- 19 [f=4]; + 21 -- 50 [f=4]; + 23 -- 36 [f=4]; + 34 -- 23 [f=4]; + 34 -- 24 [f=11]; + 35 -- 34 [f=4]; + 35 -- 16 [f=6]; + 35 -- 18 [f=16]; + 36 -- 46 [f=4]; + 5 -- 7 [f=1]; + 5 -- 36 [f=6]; + 7 -- 32 [f=1]; + 7 -- 11 [f=2]; + 7 -- 14 [f=17]; + 11 -- 40 [f=1]; + 11 -- 50 [f=1]; + 22 -- 46 [f=1]; + 28 -- 43 [f=1]; + 28 -- 8 [f=18]; + 32 -- 28 [f=1]; + 32 -- 39 [f=13]; + 32 -- 42 [f=15]; + 40 -- 22 [f=1]; + 40 -- 47 [f=1]; + 43 -- 11 [f=1]; + 43 -- 17 [f=19]; +} diff --git a/www2/examples/network/graphviz/data/twopi2.gv.txt b/www2/examples/network/graphviz/data/twopi2.gv.txt new file mode 100644 index 00000000..72b28fa7 --- /dev/null +++ b/www2/examples/network/graphviz/data/twopi2.gv.txt @@ -0,0 +1,2212 @@ +digraph G { + ranksep=3; + ratio=auto; +"1" [ label="02f5daf56e299b8a8ecea892",shape="hexagon",style="filled",color="green" ]; +"189E" [ label="ca5af2",shape="box",style="filled",color="grey" ]; +"790E" [ label="b4dfef6",shape="box",style="filled",color="grey" ]; +"2" [ label="171192dc1f8e6ea551548a910c00",shape="hexagon",style="filled",color="green" ]; +"191E" [ label="629e42",shape="box",style="filled",color="grey" ]; +"3" [ label="6bce02baf91781a831e1b95",shape="hexagon",style="filled",color="green" ]; +"193E" [ label="1c08373",shape="box",style="filled",color="grey" ]; +"4" [ label="6236a67933a619a6a3d48",shape="hexagon",style="filled",color="green" ]; +"195E" [ label="be8f4199f",shape="box",style="filled",color="grey" ]; +"5" [ label="50962c93b4cb293f5beb59eb",shape="hexagon",style="filled",color="green" ]; +"197E" [ label="be8f4199f",shape="box",style="filled",color="grey" ]; +"6" [ label="05d4b1ed6a6135eec3abd3f2",shape="hexagon",style="filled",color="green" ]; +"199E" [ label="",shape="box",style="filled",color="grey" ]; +"7" [ label="08769f73d31c1a99be2d9363f",shape="hexagon",style="filled",color="green" ]; +"201E" [ label="629e42",shape="box",style="filled",color="grey" ]; +"8" [ label="a6a196a504c3a7657d1fa41",shape="hexagon",style="filled",color="green" ]; +"203E" [ label="cd856f",shape="box",style="filled",color="grey" ]; +"9" [ label="837ebf4bde22e1f1535cb662",shape="hexagon",style="filled",color="green" ]; +"725E" [ label="d0eb84",shape="box",style="filled",color="grey" ]; +"785E" [ label="dd2ba36",shape="box",style="filled",color="grey" ]; +"10" [ label="5f865c374cb3fe976dd376b8",shape="hexagon",style="filled",color="green" ]; +"205E" [ label="23ad1",shape="box",style="filled",color="grey" ]; +"11" [ label="8be752bc95d436a90493bec9",shape="hexagon",style="filled",color="green" ]; +"207E" [ label="ee91c97828",shape="box",style="filled",color="grey" ]; +"12" [ label="969a58db14386cb9d2f51ec",shape="hexagon",style="filled",color="green" ]; +"209E" [ label="7c7c",shape="box",style="filled",color="grey" ]; +"13" [ label="da24f74aad2ff519009d1f38c",shape="hexagon",style="filled",color="green" ]; +"211E" [ label="460aed10cc9",shape="box",style="filled",color="grey" ]; +"14" [ label="3124d3a6ed3381a6341c6",shape="hexagon",style="filled",color="green" ]; +"213E" [ label="bbe0a8f93dc1",shape="box",style="filled",color="grey" ]; +"15" [ label="71512ec7d43f958f2b6da",shape="hexagon",style="filled",color="green" ]; +"215E" [ label="3f0a2b4eb62f",shape="box",style="filled",color="grey" ]; +"16" [ label="3828a2c682419423cf",shape="hexagon",style="filled",color="green" ]; +"727E" [ label="2",shape="box",style="filled",color="grey" ]; +"784E" [ label="",shape="box",style="filled",color="grey" ]; +"17" [ label="aa868f65c34cdb64f1fad19a",shape="hexagon",style="filled",color="green" ]; +"217E" [ label="3089106e3b",shape="box",style="filled",color="grey" ]; +"787E" [ label="1aaaab063",shape="box",style="filled",color="grey" ]; +"18" [ label="dca32af03698c988b22",shape="hexagon",style="filled",color="green" ]; +"219E" [ label="eb8",shape="box",style="filled",color="grey" ]; +"19" [ label="d8f4a9e463a1e89217f",shape="hexagon",style="filled",color="green" ]; +"221E" [ label="4c6c8c",shape="box",style="filled",color="grey" ]; +"20" [ label="c96782ef56711c5d6a3f69",shape="hexagon",style="filled",color="green" ]; +"223E" [ label="6a8f5bafb1",shape="box",style="filled",color="grey" ]; +"21" [ label="4f04c39708f",shape="hexagon",style="filled",color="green" ]; +"225E" [ label="a49284e9",shape="box",style="filled",color="grey" ]; +"22" [ label="97284d4c3a5d499853f0e",shape="hexagon",style="filled",color="green" ]; +"227E" [ label="53069e384a2",shape="box",style="filled",color="grey" ]; +"792E" [ label="79b69c612",shape="box",style="filled",color="grey" ]; +"23" [ label="c4d32527b670afb370d643",shape="hexagon",style="filled",color="green" ]; +"231E" [ label="e851f5ddd920",shape="box",style="filled",color="grey" ]; +"24" [ label="5e9156098c064",shape="hexagon",style="filled",color="green" ]; +"233E" [ label="",shape="box",style="filled",color="grey" ]; +"25" [ label="3d475ea3aeca51b60212dd",shape="hexagon",style="filled",color="green" ]; +"235E" [ label="4280833ef80172",shape="box",style="filled",color="grey" ]; +"26" [ label="966d271c22e75c7538",shape="hexagon",style="filled",color="green" ]; +"237E" [ label="cab04b7c14a",shape="box",style="filled",color="grey" ]; +"27" [ label="b630e1af6ae1997f0e8ba750",shape="hexagon",style="filled",color="green" ]; +"239E" [ label="bb828f1a326",shape="box",style="filled",color="grey" ]; +"783E" [ label="499f6985db294c",shape="box",style="filled",color="grey" ]; +"28" [ label="ebd8ffc2ac3a90efb8af9",shape="hexagon",style="filled",color="green" ]; +"241E" [ label="1ebeec",shape="box",style="filled",color="grey" ]; +"791E" [ label="c0b727",shape="box",style="filled",color="grey" ]; +"29" [ label="69fdd1a1f4768c5efe7",shape="hexagon",style="filled",color="green" ]; +"243E" [ label="35b8742610",shape="box",style="filled",color="grey" ]; +"30" [ label="d93a80739fc1edb41a11b7294",shape="hexagon",style="filled",color="green" ]; +"245E" [ label="e03b8bc0435a",shape="box",style="filled",color="grey" ]; +"31" [ label="bf65cfddeb00ff847feae0c",shape="hexagon",style="filled",color="green" ]; +"247E" [ label="8df",shape="box",style="filled",color="grey" ]; +"32" [ label="916c686a1e82dba72524a",shape="hexagon",style="filled",color="green" ]; +"249E" [ label="a849f9d352e",shape="box",style="filled",color="grey" ]; +"33" [ label="f496bcf0889b301d77819c",shape="hexagon",style="filled",color="green" ]; +"251E" [ label="f29dfb9",shape="box",style="filled",color="grey" ]; +"34" [ label="76889f7d35e",shape="hexagon",style="filled",color="green" ]; +"253E" [ label="e7ef998",shape="box",style="filled",color="grey" ]; +"35" [ label="668d636002",shape="hexagon",style="filled",color="green" ]; +"255E" [ label="4379b5ed",shape="box",style="filled",color="grey" ]; +"36" [ label="e1e4c23db39d8bd633c3a",shape="hexagon",style="filled",color="green" ]; +"257E" [ label="1ed5d7f63b8c6",shape="box",style="filled",color="grey" ]; +"37" [ label="842bc5775657c1e0d67",shape="hexagon",style="filled",color="green" ]; +"259E" [ label="a387210a27b",shape="box",style="filled",color="grey" ]; +"38" [ label="e4e2f4e6d",shape="hexagon",style="filled",color="green" ]; +"261E" [ label="1f4f0fdf",shape="box",style="filled",color="grey" ]; +"39" [ label="04390dec6f1779353c07f5",shape="hexagon",style="filled",color="green" ]; +"263E" [ label="bac77c3f414a",shape="box",style="filled",color="grey" ]; +"40" [ label="69f2611acc42c36ed7cc",shape="hexagon",style="filled",color="green" ]; +"265E" [ label="cab04b7c14a",shape="box",style="filled",color="grey" ]; +"41" [ label="1562abef0d8241",shape="hexagon",style="filled",color="green" ]; +"267E" [ label="6a8f5bafb1",shape="box",style="filled",color="grey" ]; +"42" [ label="e49aaa5cc4e44355d6a0",shape="hexagon",style="filled",color="green" ]; +"269E" [ label="cc3f63d",shape="box",style="filled",color="grey" ]; +"43" [ label="e8ebe1bf5f421c1223",shape="hexagon",style="filled",color="green" ]; +"271E" [ label="96325ea",shape="box",style="filled",color="grey" ]; +"44" [ label="2759e82e30d6d",shape="hexagon",style="filled",color="green" ]; +"273E" [ label="ca5af2",shape="box",style="filled",color="grey" ]; +"45" [ label="23c1ec53358d237c1",shape="hexagon",style="filled",color="green" ]; +"275E" [ label="cab04b7c14a",shape="box",style="filled",color="grey" ]; +"46" [ label="5838586c293d455",shape="hexagon",style="filled",color="green" ]; +"277E" [ label="83c397b8bf7f",shape="box",style="filled",color="grey" ]; +"47" [ label="f841118350a27b7ea29a9c9d",shape="hexagon",style="filled",color="green" ]; +"279E" [ label="69f4ecb77d",shape="box",style="filled",color="grey" ]; +"48" [ label="658d208447d8ec5d6de8",shape="hexagon",style="filled",color="green" ]; +"281E" [ label="f7b22b9640",shape="box",style="filled",color="grey" ]; +"49" [ label="11180ae7706510211bc4",shape="hexagon",style="filled",color="green" ]; +"283E" [ label="052bb6e3",shape="box",style="filled",color="grey" ]; +"50" [ label="5807acd8d58e006f43",shape="hexagon",style="filled",color="green" ]; +"285E" [ label="",shape="box",style="filled",color="grey" ]; +"51" [ label="fe4e848cb5291ee59a2",shape="hexagon",style="filled",color="green" ]; +"287E" [ label="e3aefac763",shape="box",style="filled",color="grey" ]; +"52" [ label="c4f31ea3844e12da27ad47c6",shape="hexagon",style="filled",color="green" ]; +"289E" [ label="fb16636aae",shape="box",style="filled",color="grey" ]; +"53" [ label="00cbeb87c182ca0785f",shape="hexagon",style="filled",color="green" ]; +"291E" [ label="3089106e3b",shape="box",style="filled",color="grey" ]; +"54" [ label="11f088bfd8",shape="hexagon",style="filled",color="green" ]; +"293E" [ label="6a80cbe",shape="box",style="filled",color="grey" ]; +"55" [ label="64a9ec24428099ad8ed82ba6",shape="hexagon",style="filled",color="green" ]; +"745E" [ label="68d8993e61d8c82cd29e8d0182b0",shape="box",style="filled",color="grey" ]; +"56" [ label="3c2a62e0e5e9f7",shape="hexagon",style="filled",color="green" ]; +"295E" [ label="ae32701",shape="box",style="filled",color="grey" ]; +"57" [ label="dd84fe6a65cfac7bca03ebd",shape="hexagon",style="filled",color="green" ]; +"297E" [ label="",shape="box",style="filled",color="grey" ]; +"58" [ label="b06bbfa920aa95dd",shape="hexagon",style="filled",color="green" ]; +"299E" [ label="07",shape="box",style="filled",color="grey" ]; +"59" [ label="6b5aaa4bdf44b2c898854",shape="hexagon",style="filled",color="green" ]; +"301E" [ label="4c6c8c",shape="box",style="filled",color="grey" ]; +"789E" [ label="3a0ff0",shape="box",style="filled",color="grey" ]; +"60" [ label="855d26296eda4eb7",shape="hexagon",style="filled",color="green" ]; +"303E" [ label="53069e384a2",shape="box",style="filled",color="grey" ]; +"61" [ label="e82f47b8d4949ba4af69b38cbc19",shape="hexagon",style="filled",color="green" ]; +"305E" [ label="b62cd1d0a0",shape="box",style="filled",color="grey" ]; +"62" [ label="86569bffb49adf6b3d0ebac",shape="hexagon",style="filled",color="green" ]; +"307E" [ label="660ffeb76fc59",shape="box",style="filled",color="grey" ]; +"63" [ label="a96e47ff37983425a3e452095",shape="hexagon",style="filled",color="green" ]; +"309E" [ label="cab04b7c14a",shape="box",style="filled",color="grey" ]; +"64" [ label="71a48d11b2e7e56b1df128bd",shape="hexagon",style="filled",color="green" ]; +"311E" [ label="be8f4199f",shape="box",style="filled",color="grey" ]; +"65" [ label="a0befe6dd1ca7b165786835",shape="hexagon",style="filled",color="green" ]; +"313E" [ label="3cfae",shape="box",style="filled",color="grey" ]; +"66" [ label="f33ec11db496f7bfcb024f",shape="hexagon",style="filled",color="green" ]; +"315E" [ label="71e6b",shape="box",style="filled",color="grey" ]; +"67" [ label="fe6be3206549f5b5564acde84783",shape="hexagon",style="filled",color="green" ]; +"317E" [ label="",shape="box",style="filled",color="grey" ]; +"68" [ label="e4dba079d5fcb1f165920a3bf",shape="hexagon",style="filled",color="green" ]; +"319E" [ label="",shape="box",style="filled",color="grey" ]; +"69" [ label="35dfbee3123dc389cba0b15",shape="hexagon",style="filled",color="green" ]; +"746E" [ label="4c865eec228e41e7f4e5fc68a9a6",shape="box",style="filled",color="grey" ]; +"70" [ label="16c508ab98483d430bbe",shape="hexagon",style="filled",color="green" ]; +"321E" [ label="cab04b7c14a",shape="box",style="filled",color="grey" ]; +"71" [ label="9c9e2e0f2da8758e436c",shape="hexagon",style="filled",color="green" ]; +"327E" [ label="cd0d985a366cad7e",shape="box",style="filled",color="grey" ]; +"72" [ label="fb039d7a2a9fe73b5f468eba9",shape="hexagon",style="filled",color="green" ]; +"329E" [ label="81dabfaba8",shape="box",style="filled",color="grey" ]; +"73" [ label="2ef949c4a39b",shape="hexagon",style="filled",color="green" ]; +"331E" [ label="617809d979f",shape="box",style="filled",color="grey" ]; +"74" [ label="a9497e0757b0969bde707ed5",shape="hexagon",style="filled",color="green" ]; +"333E" [ label="541ab86a2e",shape="box",style="filled",color="grey" ]; +"75" [ label="230cc6bbc66b24eae94fa03d",shape="hexagon",style="filled",color="green" ]; +"335E" [ label="",shape="box",style="filled",color="grey" ]; +"76" [ label="1d163eac141def176461c",shape="hexagon",style="filled",color="green" ]; +"337E" [ label="0acc5bb8ca4",shape="box",style="filled",color="grey" ]; +"77" [ label="32979f8cf86",shape="hexagon",style="filled",color="green" ]; +"339E" [ label="a7e89580",shape="box",style="filled",color="grey" ]; +"78" [ label="37d80ae421dba4a70730338860",shape="hexagon",style="filled",color="green" ]; +"341E" [ label="",shape="box",style="filled",color="grey" ]; +"79" [ label="fbba7215e7c13173a60206",shape="hexagon",style="filled",color="green" ]; +"343E" [ label="617809d979f",shape="box",style="filled",color="grey" ]; +"80" [ label="2dd8cc4d693415f93c0f8fc",shape="hexagon",style="filled",color="green" ]; +"345E" [ label="94da691e20e3",shape="box",style="filled",color="grey" ]; +"81" [ label="00880e6f50c765ebc1f85d3e9",shape="hexagon",style="filled",color="green" ]; +"347E" [ label="e7ef998",shape="box",style="filled",color="grey" ]; +"82" [ label="ef13d45b1277ac9a0444adb",shape="hexagon",style="filled",color="green" ]; +"349E" [ label="a7fe7",shape="box",style="filled",color="grey" ]; +"83" [ label="2573e1bf51f1b307f4640",shape="hexagon",style="filled",color="green" ]; +"351E" [ label="84e4ede82074",shape="box",style="filled",color="grey" ]; +"84" [ label="162d8039483d8",shape="hexagon",style="filled",color="green" ]; +"353E" [ label="a8e9",shape="box",style="filled",color="grey" ]; +"85" [ label="f490de272a7f6e4af346d40",shape="hexagon",style="filled",color="green" ]; +"355E" [ label="460aed10cc9",shape="box",style="filled",color="grey" ]; +"788E" [ label="391256c872",shape="box",style="filled",color="grey" ]; +"86" [ label="678bf739c344b9ad41da1",shape="hexagon",style="filled",color="green" ]; +"357E" [ label="396b16a892fe",shape="box",style="filled",color="grey" ]; +"87" [ label="876d120b38b0e88817",shape="hexagon",style="filled",color="green" ]; +"359E" [ label="e5",shape="box",style="filled",color="grey" ]; +"88" [ label="503737b64d432c60d6ac557e0e6",shape="hexagon",style="filled",color="green" ]; +"361E" [ label="9937ccba1469",shape="box",style="filled",color="grey" ]; +"89" [ label="b36e0be6f67fc25286127456",shape="hexagon",style="filled",color="green" ]; +"363E" [ label="87a7e69a72412",shape="box",style="filled",color="grey" ]; +"90" [ label="4cc20a0b7651e486",shape="hexagon",style="filled",color="green" ]; +"365E" [ label="e079d2c",shape="box",style="filled",color="grey" ]; +"91" [ label="08dade990b2282",shape="hexagon",style="filled",color="green" ]; +"367E" [ label="45827dbdd8",shape="box",style="filled",color="grey" ]; +"92" [ label="f8128d574c356631b8a9",shape="hexagon",style="filled",color="green" ]; +"369E" [ label="",shape="box",style="filled",color="grey" ]; +"93" [ label="88a4f0337c2189c3fc7b31",shape="hexagon",style="filled",color="green" ]; +"729E" [ label="da0d7bbcf30",shape="box",style="filled",color="grey" ]; +"94" [ label="1b13908a9f0763c0ae54af9062080",shape="hexagon",style="filled",color="green" ]; +"371E" [ label="8b06a67a",shape="box",style="filled",color="grey" ]; +"95" [ label="e2a5d11499b7e",shape="hexagon",style="filled",color="green" ]; +"373E" [ label="66abc181ac4",shape="box",style="filled",color="grey" ]; +"96" [ label="90cc275011c2013c61eb11",shape="hexagon",style="filled",color="green" ]; +"375E" [ label="",shape="box",style="filled",color="grey" ]; +"97" [ label="1e003bfe8fc840df0163f4c",shape="hexagon",style="filled",color="green" ]; +"747E" [ label="8983ffbc30deb364dd92c3ad85c9",shape="box",style="filled",color="grey" ]; +"98" [ label="1927c743a0d440a5a0",shape="hexagon",style="filled",color="green" ]; +"377E" [ label="b12441ecff15fa12c",shape="box",style="filled",color="grey" ]; +"99" [ label="155d892827c33ed3cae3",shape="hexagon",style="filled",color="green" ]; +"379E" [ label="71e6b",shape="box",style="filled",color="grey" ]; +"100" [ label="9f24ba80192c339a64c0",shape="hexagon",style="filled",color="green" ]; +"381E" [ label="",shape="box",style="filled",color="grey" ]; +"101" [ label="3e814305b42beb41b8c706",shape="hexagon",style="filled",color="green" ]; +"383E" [ label="1c08373",shape="box",style="filled",color="grey" ]; +"102" [ label="eccfe5ff0af70fe9fbec8b2360f90",shape="hexagon",style="filled",color="green" ]; +"385E" [ label="be8f4199f",shape="box",style="filled",color="grey" ]; +"103" [ label="8fa622d9f842c5572a545ed72982",shape="hexagon",style="filled",color="green" ]; +"387E" [ label="4dccb",shape="box",style="filled",color="grey" ]; +"104" [ label="ad9142a65f5eab78b4ca5e",shape="hexagon",style="filled",color="green" ]; +"389E" [ label="f36cce089",shape="box",style="filled",color="grey" ]; +"105" [ label="20f234fdcd0e1fc50261ce8",shape="hexagon",style="filled",color="green" ]; +"391E" [ label="67219ef689f0146b544",shape="box",style="filled",color="grey" ]; +"106" [ label="e06cc38155ff6781cf944d745",shape="hexagon",style="filled",color="green" ]; +"393E" [ label="87a7e69a72412",shape="box",style="filled",color="grey" ]; +"107" [ label="cfdf1932665dcb4cd3c",shape="hexagon",style="filled",color="green" ]; +"395E" [ label="964b86fc1bba0e",shape="box",style="filled",color="grey" ]; +"108" [ label="6d4a4a5a5af91b895272c30",shape="hexagon",style="filled",color="green" ]; +"397E" [ label="b5e86c73d1198f",shape="box",style="filled",color="grey" ]; +"109" [ label="e0ad365c2fb444358201",shape="hexagon",style="filled",color="green" ]; +"399E" [ label="bb5e89c8963",shape="box",style="filled",color="grey" ]; +"110" [ label="b07bbdc8cca5985d4c4",shape="hexagon",style="filled",color="green" ]; +"401E" [ label="50023f6f88",shape="box",style="filled",color="grey" ]; +"111" [ label="df5dba74c75b228de48c",shape="hexagon",style="filled",color="green" ]; +"403E" [ label="7e493ee44b28",shape="box",style="filled",color="grey" ]; +"112" [ label="0b8694c9ef9b27b9c3d8",shape="hexagon",style="filled",color="green" ]; +"405E" [ label="2342b759c03",shape="box",style="filled",color="grey" ]; +"113" [ label="81e20155999fa64e0ae6fd",shape="hexagon",style="filled",color="green" ]; +"407E" [ label="4280833ef80172",shape="box",style="filled",color="grey" ]; +"114" [ label="3ef07ae75d29a707",shape="hexagon",style="filled",color="green" ]; +"409E" [ label="4280833ef80172",shape="box",style="filled",color="grey" ]; +"115" [ label="4a36db80f1ab1e97",shape="hexagon",style="filled",color="green" ]; +"411E" [ label="460aed10cc9",shape="box",style="filled",color="grey" ]; +"116" [ label="16da5f1301b36df4df0f",shape="hexagon",style="filled",color="green" ]; +"413E" [ label="460aed10cc9",shape="box",style="filled",color="grey" ]; +"117" [ label="6b3f3fa236bb90592d23a",shape="hexagon",style="filled",color="green" ]; +"415E" [ label="83c397b8bf7f",shape="box",style="filled",color="grey" ]; +"118" [ label="f2a57e4d4f0cec516891e3",shape="hexagon",style="filled",color="green" ]; +"417E" [ label="bd2484",shape="box",style="filled",color="grey" ]; +"119" [ label="deb3089920548bf1ecb23f0d",shape="hexagon",style="filled",color="green" ]; +"419E" [ label="87a7e69a72412",shape="box",style="filled",color="grey" ]; +"120" [ label="bf01c8a262",shape="hexagon",style="filled",color="green" ]; +"421E" [ label="01",shape="box",style="filled",color="grey" ]; +"121" [ label="23dc3a52fed9c119610b5e8",shape="hexagon",style="filled",color="green" ]; +"423E" [ label="71e6b",shape="box",style="filled",color="grey" ]; +"122" [ label="aff7fc220edc93572bb2",shape="hexagon",style="filled",color="green" ]; +"748E" [ label="68d8993e61d8c82cd29e8d0182b0",shape="box",style="filled",color="grey" ]; +"123" [ label="78cc16f965adc5f712ea2372c6",shape="hexagon",style="filled",color="green" ]; +"425E" [ label="23ad1",shape="box",style="filled",color="grey" ]; +"124" [ label="5be631dff7b97697be7dc0a2f07f2",shape="hexagon",style="filled",color="green" ]; +"427E" [ label="",shape="box",style="filled",color="grey" ]; +"786E" [ label="421",shape="box",style="filled",color="grey" ]; +"125" [ label="48398d080dfcccced48da1980",shape="hexagon",style="filled",color="green" ]; +"431E" [ label="866808df",shape="box",style="filled",color="grey" ]; +"126" [ label="03716a2c341e5edaa31",shape="hexagon",style="filled",color="green" ]; +"433E" [ label="21407f8a6d7",shape="box",style="filled",color="grey" ]; +"127" [ label="ddfeabe456a9de5f5784",shape="hexagon",style="filled",color="green" ]; +"435E" [ label="aac615ae78",shape="box",style="filled",color="grey" ]; +"128" [ label="d550a7f392c787661aadd48",shape="hexagon",style="filled",color="green" ]; +"437E" [ label="e3aefac763",shape="box",style="filled",color="grey" ]; +"129" [ label="4c82921f4ad3f07066540",shape="hexagon",style="filled",color="green" ]; +"439E" [ label="a7fe7",shape="box",style="filled",color="grey" ]; +"130" [ label="0bc7f8f513e0e74b270",shape="hexagon",style="filled",color="green" ]; +"441E" [ label="a849f9d352e",shape="box",style="filled",color="grey" ]; +"131" [ label="3b1563a23eb9",shape="hexagon",style="filled",color="green" ]; +"443E" [ label="a8e9",shape="box",style="filled",color="grey" ]; +"132" [ label="be233fafa38d931d894",shape="hexagon",style="filled",color="green" ]; +"445E" [ label="a849f9d352e",shape="box",style="filled",color="grey" ]; +"133" [ label="f906dc5244ee6a371f8",shape="hexagon",style="filled",color="green" ]; +"749E" [ label="4c865eec228e41e7f4e5fc68a9a6",shape="box",style="filled",color="grey" ]; +"134" [ label="e7a887d88c2318beba51",shape="hexagon",style="filled",color="green" ]; +"447E" [ label="9d8988c0945d6",shape="box",style="filled",color="grey" ]; +"135" [ label="be6b73bd46a7a5183e8c91a",shape="hexagon",style="filled",color="green" ]; +"449E" [ label="ee91c97828",shape="box",style="filled",color="grey" ]; +"769E" [ label="444189d179b5db71fe",shape="box",style="filled",color="grey" ]; +"770E" [ label="1e1fbbe14ac24e0518",shape="box",style="filled",color="grey" ]; +"136" [ label="644f112bb0aa452ee7040a",shape="hexagon",style="filled",color="green" ]; +"451E" [ label="52f247fc3b",shape="box",style="filled",color="grey" ]; +"137" [ label="010957669f3770aac",shape="hexagon",style="filled",color="green" ]; +"453E" [ label="78",shape="box",style="filled",color="grey" ]; +"138" [ label="0a185946ee443342b07d8e1",shape="hexagon",style="filled",color="green" ]; +"455E" [ label="87a7e69a72412",shape="box",style="filled",color="grey" ]; +"139" [ label="f66fe4df3d189e69ce10c9c",shape="hexagon",style="filled",color="green" ]; +"457E" [ label="21407f8a6d7",shape="box",style="filled",color="grey" ]; +"140" [ label="247e407f45b353f8",shape="hexagon",style="filled",color="green" ]; +"459E" [ label="",shape="box",style="filled",color="grey" ]; +"141" [ label="84907547f36d0ff7",shape="hexagon",style="filled",color="green" ]; +"461E" [ label="e920b915087",shape="box",style="filled",color="grey" ]; +"142" [ label="805004328dad9d315d",shape="hexagon",style="filled",color="green" ]; +"463E" [ label="4280833ef80172",shape="box",style="filled",color="grey" ]; +"143" [ label="4f0cbd3fbf0cb1e8c",shape="hexagon",style="filled",color="green" ]; +"465E" [ label="403126",shape="box",style="filled",color="grey" ]; +"144" [ label="4869e993f2bb10f",shape="hexagon",style="filled",color="green" ]; +"467E" [ label="ff",shape="box",style="filled",color="grey" ]; +"145" [ label="665b76844ff78fc2cf66ca2",shape="hexagon",style="filled",color="green" ]; +"469E" [ label="af0268dddd",shape="box",style="filled",color="grey" ]; +"146" [ label="3f16509139c7dad5163b91799",shape="hexagon",style="filled",color="green" ]; +"471E" [ label="3089106e3b",shape="box",style="filled",color="grey" ]; +"147" [ label="01db23a60422ba93a68611cc0",shape="hexagon",style="filled",color="green" ]; +"473E" [ label="",shape="box",style="filled",color="grey" ]; +"148" [ label="46125fcc583c0f494a3a1d3",shape="hexagon",style="filled",color="green" ]; +"475E" [ label="db6c4213a717bc",shape="box",style="filled",color="grey" ]; +"149" [ label="731857fe189fb398e80a0594",shape="hexagon",style="filled",color="green" ]; +"477E" [ label="3089106e3b",shape="box",style="filled",color="grey" ]; +"150" [ label="6fb7a84e370ef70feac5cb",shape="hexagon",style="filled",color="green" ]; +"479E" [ label="396b16a892fe",shape="box",style="filled",color="grey" ]; +"151" [ label="e343cea291b79a2ed4e",shape="hexagon",style="filled",color="green" ]; +"481E" [ label="88d8b220746882d",shape="box",style="filled",color="grey" ]; +"152" [ label="5f2592b20f13356b7fc8b42",shape="hexagon",style="filled",color="green" ]; +"483E" [ label="",shape="box",style="filled",color="grey" ]; +"153" [ label="275a0407e33e9b8aa9cdd051",shape="hexagon",style="filled",color="green" ]; +"731E" [ label="",shape="box",style="filled",color="grey" ]; +"154" [ label="011d119375cf494ca2fa8d59",shape="hexagon",style="filled",color="green" ]; +"750E" [ label="8983ffbc30deb364dd92c3ad85c9",shape="box",style="filled",color="grey" ]; +"155" [ label="173fd00917644f0f1f3e3",shape="hexagon",style="filled",color="green" ]; +"485E" [ label="0acc5bb8ca4",shape="box",style="filled",color="grey" ]; +"156" [ label="c72df69b40156a3254",shape="hexagon",style="filled",color="green" ]; +"487E" [ label="fff03efcd",shape="box",style="filled",color="grey" ]; +"157" [ label="6c632ad9c42228bb337",shape="hexagon",style="filled",color="green" ]; +"489E" [ label="eb8",shape="box",style="filled",color="grey" ]; +"158" [ label="bbb13dc62adf2de2a42b6",shape="hexagon",style="filled",color="green" ]; +"491E" [ label="69ce90c9b2",shape="box",style="filled",color="grey" ]; +"159" [ label="6282bc21f6",shape="hexagon",style="filled",color="green" ]; +"495E" [ label="de34214b4c258c9333ec3",shape="box",style="filled",color="grey" ]; +"160" [ label="71cf45dd4e91bcca945137b40e",shape="hexagon",style="filled",color="green" ]; +"499E" [ label="65fd8495",shape="box",style="filled",color="grey" ]; +"161" [ label="a3b6df27179b175c88fa4c9cf9f",shape="hexagon",style="filled",color="green" ]; +"501E" [ label="6577",shape="box",style="filled",color="grey" ]; +"162" [ label="284f14a259991806654e74",shape="hexagon",style="filled",color="green" ]; +"503E" [ label="4280833ef80172",shape="box",style="filled",color="grey" ]; +"163" [ label="a7c99ccf6ddf6f5ebbe",shape="hexagon",style="filled",color="green" ]; +"505E" [ label="c4fd8",shape="box",style="filled",color="grey" ]; +"164" [ label="c32d2697e8",shape="hexagon",style="filled",color="green" ]; +"507E" [ label="52f247fc3b",shape="box",style="filled",color="grey" ]; +"165" [ label="d12bd75c24b110ef90cdd35d3",shape="hexagon",style="filled",color="green" ]; +"509E" [ label="0668",shape="box",style="filled",color="grey" ]; +"166" [ label="1c07453d584f3d14b1876fdb",shape="hexagon",style="filled",color="green" ]; +"511E" [ label="460aed10cc9",shape="box",style="filled",color="grey" ]; +"167" [ label="f713a8b311ffa05ce3683ad10",shape="hexagon",style="filled",color="green" ]; +"513E" [ label="30d6138b63eb",shape="box",style="filled",color="grey" ]; +"168" [ label="3cdc90c57243373efaba65a",shape="hexagon",style="filled",color="green" ]; +"515E" [ label="fa2afbd869",shape="box",style="filled",color="grey" ]; +"169" [ label="e3bdbca0e2256fffa8a59018",shape="hexagon",style="filled",color="green" ]; +"517E" [ label="81dabfaba8",shape="box",style="filled",color="grey" ]; +"170" [ label="75ba8d840070942eb4e737849",shape="hexagon",style="filled",color="green" ]; +"519E" [ label="81dabfaba8",shape="box",style="filled",color="grey" ]; +"171" [ label="fbdc3ca37406f66635c8b226e",shape="hexagon",style="filled",color="green" ]; +"521E" [ label="8cbcf5cb5",shape="box",style="filled",color="grey" ]; +"172" [ label="40b49a5a9bb256c7a3286e56",shape="hexagon",style="filled",color="green" ]; +"523E" [ label="f72564578be",shape="box",style="filled",color="grey" ]; +"173" [ label="3b2f08d52e4bca3f9ca7bbbd6",shape="hexagon",style="filled",color="green" ]; +"525E" [ label="81dabfaba8",shape="box",style="filled",color="grey" ]; +"174" [ label="4a38abc630c82b0c48dfbf5271",shape="hexagon",style="filled",color="green" ]; +"527E" [ label="f0bd1521",shape="box",style="filled",color="grey" ]; +"175" [ label="2d7b7fb6c9ad6821752651f7",shape="hexagon",style="filled",color="green" ]; +"529E" [ label="47b2da3d",shape="box",style="filled",color="grey" ]; +"176" [ label="910b00285f11bb90d0a15641",shape="hexagon",style="filled",color="green" ]; +"531E" [ label="81dabfaba8",shape="box",style="filled",color="grey" ]; +"177" [ label="24431c3eb075102f07cc2c1be",shape="hexagon",style="filled",color="green" ]; +"533E" [ label="",shape="box",style="filled",color="grey" ]; +"178" [ label="07f8a9e55a16beddb3c9153b0",shape="hexagon",style="filled",color="green" ]; +"535E" [ label="81dabfaba8",shape="box",style="filled",color="grey" ]; +"179" [ label="c1c30f30d40c4f1f84924622f",shape="hexagon",style="filled",color="green" ]; +"537E" [ label="c5d5be3942",shape="box",style="filled",color="grey" ]; +"180" [ label="86276bb1e23f2c7ffcbe82a0",shape="hexagon",style="filled",color="green" ]; +"539E" [ label="0f940646",shape="box",style="filled",color="grey" ]; +"181" [ label="f78e145a127014eb43345a0c",shape="hexagon",style="filled",color="green" ]; +"541E" [ label="d370c12dbc",shape="box",style="filled",color="grey" ]; +"182" [ label="a27037332d9fa5c43bcfe94c0",shape="hexagon",style="filled",color="green" ]; +"543E" [ label="80874aa8",shape="box",style="filled",color="grey" ]; +"183" [ label="c29ce10bb8d19b498355aa04",shape="hexagon",style="filled",color="green" ]; +"545E" [ label="1c08373",shape="box",style="filled",color="grey" ]; +"184" [ label="4f8c642b53c349c687534bda35db",shape="hexagon",style="filled",color="green" ]; +"547E" [ label="46969c4",shape="box",style="filled",color="grey" ]; +"185" [ label="30cc206b1878485",shape="hexagon",style="filled",color="green" ]; +"549E" [ label="23ad1",shape="box",style="filled",color="grey" ]; +"186" [ label="5d69639a5e3bdd3d",shape="hexagon",style="filled",color="green" ]; +"551E" [ label="6139fa6adc88d",shape="box",style="filled",color="grey" ]; +"187" [ label="b656f0ed2202b8e46eb",shape="hexagon",style="filled",color="green" ]; +"553E" [ label="f6e6236b48bc3",shape="box",style="filled",color="grey" ]; +"188" [ label="3b566eaa70ed401479d43a9",shape="hexagon",style="filled",color="green" ]; +"555E" [ label="4c6c8c",shape="box",style="filled",color="grey" ]; +"189" [ label="d6125ef42bd9958",shape="hexagon",style="filled",color="green" ]; +"557E" [ label="4c6c8c",shape="box",style="filled",color="grey" ]; +"190" [ label="dd12f26f8d9bb55",shape="hexagon",style="filled",color="green" ]; +"559E" [ label="83c397b8bf7f",shape="box",style="filled",color="grey" ]; +"191" [ label="ea890ccca2f7c2107351",shape="hexagon",style="filled",color="green" ]; +"561E" [ label="eb8",shape="box",style="filled",color="grey" ]; +"192" [ label="84e4f1c582427a98d7b",shape="hexagon",style="filled",color="green" ]; +"563E" [ label="eb8",shape="box",style="filled",color="grey" ]; +"193" [ label="d378760b814eaecb6efe636e0efc4",shape="hexagon",style="filled",color="green" ]; +"565E" [ label="81bcc35f82891",shape="box",style="filled",color="grey" ]; +"194" [ label="f722890f70a32dce3baff371a",shape="hexagon",style="filled",color="green" ]; +"567E" [ label="84e4ede82074",shape="box",style="filled",color="grey" ]; +"195" [ label="666f11bb45c3a8dcf26e1ed79",shape="hexagon",style="filled",color="green" ]; +"569E" [ label="c90f755c8b6612d",shape="box",style="filled",color="grey" ]; +"196" [ label="91ecbe29a71f00ed5a3",shape="hexagon",style="filled",color="green" ]; +"571E" [ label="0a963fef9",shape="box",style="filled",color="grey" ]; +"197" [ label="30c3f3bf8463d3843dc57d8e98",shape="hexagon",style="filled",color="green" ]; +"573E" [ label="3089106e3b",shape="box",style="filled",color="grey" ]; +"198" [ label="8ea965ab6ee8dedb6c3333e9",shape="hexagon",style="filled",color="green" ]; +"575E" [ label="84e4ede82074",shape="box",style="filled",color="grey" ]; +"199" [ label="3eecb304bab2136a76deda",shape="hexagon",style="filled",color="green" ]; +"577E" [ label="8df",shape="box",style="filled",color="grey" ]; +"200" [ label="d886e4b76537a99bc71b8a9331c94",shape="hexagon",style="filled",color="green" ]; +"579E" [ label="1172dca23",shape="box",style="filled",color="grey" ]; +"201" [ label="dcc5d5e9d6c4e",shape="hexagon",style="filled",color="green" ]; +"581E" [ label="a8e9",shape="box",style="filled",color="grey" ]; +"202" [ label="8292af691429f8d9ed481ff71ffd",shape="hexagon",style="filled",color="green" ]; +"583E" [ label="212af4",shape="box",style="filled",color="grey" ]; +"203" [ label="12fcb26b3de00ef98719c2ca",shape="hexagon",style="filled",color="green" ]; +"585E" [ label="",shape="box",style="filled",color="grey" ]; +"204" [ label="a141a557a60912051f3c135",shape="hexagon",style="filled",color="green" ]; +"587E" [ label="",shape="box",style="filled",color="grey" ]; +"205" [ label="64eeeddfc34489ff396",shape="hexagon",style="filled",color="green" ]; +"751E" [ label="8983ffbc30deb364dd92c3ad85c9",shape="box",style="filled",color="grey" ]; +"206" [ label="f5d636e14a6cd716362158d",shape="hexagon",style="filled",color="green" ]; +"589E" [ label="32c958c9997",shape="box",style="filled",color="grey" ]; +"207" [ label="84e4978afc069d5a1aecbf2b",shape="hexagon",style="filled",color="green" ]; +"593E" [ label="56caa96d171a9ac2da7c",shape="box",style="filled",color="grey" ]; +"208" [ label="52a6c2063bccd83110c32",shape="hexagon",style="filled",color="green" ]; +"597E" [ label="",shape="box",style="filled",color="grey" ]; +"209" [ label="46f754ea06f070dbc023e571a876",shape="hexagon",style="filled",color="green" ]; +"599E" [ label="ffccaa9e3",shape="box",style="filled",color="grey" ]; +"210" [ label="c10cb9baf4dcb43e24",shape="hexagon",style="filled",color="green" ]; +"601E" [ label="ac6e99186",shape="box",style="filled",color="grey" ]; +"211" [ label="3dafe1619016463f521f",shape="hexagon",style="filled",color="green" ]; +"603E" [ label="b9",shape="box",style="filled",color="grey" ]; +"212" [ label="0f5db6ce12751ddcc64e",shape="hexagon",style="filled",color="green" ]; +"605E" [ label="bb828f1a326",shape="box",style="filled",color="grey" ]; +"213" [ label="34c8c8dc0f6e41c7e7b2",shape="hexagon",style="filled",color="green" ]; +"607E" [ label="2832ed5cea6",shape="box",style="filled",color="grey" ]; +"214" [ label="0a49c95f107c0aa57c9b5748",shape="hexagon",style="filled",color="green" ]; +"609E" [ label="",shape="box",style="filled",color="grey" ]; +"215" [ label="3b4fdad8e0429d112",shape="hexagon",style="filled",color="green" ]; +"611E" [ label="cab04b7c14a",shape="box",style="filled",color="grey" ]; +"216" [ label="17dafa5ebaafd48440e3",shape="hexagon",style="filled",color="green" ]; +"613E" [ label="b5f038f79a3",shape="box",style="filled",color="grey" ]; +"217" [ label="f4c69e5e212f89348122e8",shape="hexagon",style="filled",color="green" ]; +"615E" [ label="396b16a892fe",shape="box",style="filled",color="grey" ]; +"218" [ label="4f2e020854dfacce46a12",shape="hexagon",style="filled",color="green" ]; +"617E" [ label="e079d2c",shape="box",style="filled",color="grey" ]; +"219" [ label="6448451ac2ceade90715378b",shape="hexagon",style="filled",color="green" ]; +"619E" [ label="",shape="box",style="filled",color="grey" ]; +"220" [ label="7d7b14baa649330",shape="hexagon",style="filled",color="green" ]; +"621E" [ label="77d145b32328880440c7a",shape="box",style="filled",color="grey" ]; +"221" [ label="d7c27cc6f7b02a31eb64d",shape="hexagon",style="filled",color="green" ]; +"623E" [ label="87a7e69a72412",shape="box",style="filled",color="grey" ]; +"222" [ label="8f5a69ece1",shape="hexagon",style="filled",color="green" ]; +"752E" [ label="eb9cf6456613d4cd06f7c0894bd6",shape="box",style="filled",color="grey" ]; +"223" [ label="eccf7c722ddf",shape="hexagon",style="filled",color="green" ]; +"625E" [ label="df61d5f5fc",shape="box",style="filled",color="grey" ]; +"224" [ label="86633c26be93ada8b",shape="hexagon",style="filled",color="green" ]; +"627E" [ label="08500a6044",shape="box",style="filled",color="grey" ]; +"225" [ label="3f9ddf1ffbc0d38b",shape="hexagon",style="filled",color="green" ]; +"629E" [ label="07",shape="box",style="filled",color="grey" ]; +"226" [ label="e33792703",shape="hexagon",style="filled",color="green" ]; +"631E" [ label="6a8f5bafb1",shape="box",style="filled",color="grey" ]; +"227" [ label="293a225dc56dd1e0564e6bb",shape="hexagon",style="filled",color="green" ]; +"633E" [ label="e3aefac763",shape="box",style="filled",color="grey" ]; +"228" [ label="57c77c341f94afddef07e6",shape="hexagon",style="filled",color="green" ]; +"635E" [ label="5e80f85274",shape="box",style="filled",color="grey" ]; +"229" [ label="3bbfc7bfdbbb1ba1bfad7517",shape="hexagon",style="filled",color="green" ]; +"637E" [ label="",shape="box",style="filled",color="grey" ]; +"230" [ label="a7167d5eb5408b3839903",shape="hexagon",style="filled",color="green" ]; +"639E" [ label="8c8b5bde6",shape="box",style="filled",color="grey" ]; +"231" [ label="34d7bb6af4fcd8d630de72500c8",shape="hexagon",style="filled",color="green" ]; +"641E" [ label="32fe7eee5283",shape="box",style="filled",color="grey" ]; +"232" [ label="8e69341faa4489",shape="hexagon",style="filled",color="green" ]; +"643E" [ label="cab04b7c14a",shape="box",style="filled",color="grey" ]; +"233" [ label="459236f07c73814faf5",shape="hexagon",style="filled",color="green" ]; +"645E" [ label="18083a711d",shape="box",style="filled",color="grey" ]; +"234" [ label="c71aa521578164debd0c5",shape="hexagon",style="filled",color="green" ]; +"647E" [ label="78",shape="box",style="filled",color="grey" ]; +"235" [ label="a5520019b8a73bc141b5fd416a",shape="hexagon",style="filled",color="green" ]; +"649E" [ label="3219b6b71443",shape="box",style="filled",color="grey" ]; +"236" [ label="6c89dc59ee7aaebbbd6bb64",shape="hexagon",style="filled",color="green" ]; +"651E" [ label="8c8b5bde6",shape="box",style="filled",color="grey" ]; +"237" [ label="a9a36ef02f",shape="hexagon",style="filled",color="green" ]; +"653E" [ label="6a80cbe",shape="box",style="filled",color="grey" ]; +"238" [ label="3db761b596844f133c",shape="hexagon",style="filled",color="green" ]; +"655E" [ label="e920b915087",shape="box",style="filled",color="grey" ]; +"239" [ label="383db224d7508ef072bea21d0",shape="hexagon",style="filled",color="green" ]; +"657E" [ label="975fedfb64df",shape="box",style="filled",color="grey" ]; +"240" [ label="8e307415fb435445ced7",shape="hexagon",style="filled",color="green" ]; +"659E" [ label="21dff35936370ae5f",shape="box",style="filled",color="grey" ]; +"241" [ label="aff6d7896e0e142bbc3e78",shape="hexagon",style="filled",color="green" ]; +"661E" [ label="d2498",shape="box",style="filled",color="grey" ]; +"242" [ label="e153c6e676c7369b285b4e9033a",shape="hexagon",style="filled",color="green" ]; +"663E" [ label="",shape="box",style="filled",color="grey" ]; +"243" [ label="f3c4311de0e931f08c232b",shape="hexagon",style="filled",color="green" ]; +"665E" [ label="a849f9d352e",shape="box",style="filled",color="grey" ]; +"244" [ label="0c72a426929600000f5",shape="hexagon",style="filled",color="green" ]; +"667E" [ label="45827dbdd8",shape="box",style="filled",color="grey" ]; +"245" [ label="38fa61352f5086d2cb51",shape="hexagon",style="filled",color="green" ]; +"669E" [ label="af0268dddd",shape="box",style="filled",color="grey" ]; +"246" [ label="ad1dd724f1c3e",shape="hexagon",style="filled",color="green" ]; +"671E" [ label="cab04b7c14a",shape="box",style="filled",color="grey" ]; +"247" [ label="11bb8ed3ae227d3acefc",shape="hexagon",style="filled",color="green" ]; +"673E" [ label="eb8",shape="box",style="filled",color="grey" ]; +"248" [ label="f2c7b3bb4d44f977d0ab8a42351",shape="hexagon",style="filled",color="green" ]; +"675E" [ label="",shape="box",style="filled",color="grey" ]; +"249" [ label="51e045ca826077ae765",shape="hexagon",style="filled",color="green" ]; +"679E" [ label="e842",shape="box",style="filled",color="grey" ]; +"250" [ label="aa0adc8978020629574",shape="hexagon",style="filled",color="green" ]; +"753E" [ label="68d8993e61d8c82cd29e8d0182b0",shape="box",style="filled",color="grey" ]; +"251" [ label="3b6b2c549de670d7bf5fc0ee",shape="hexagon",style="filled",color="green" ]; +"681E" [ label="",shape="box",style="filled",color="grey" ]; +"252" [ label="5eea496cc301b2a9721",shape="hexagon",style="filled",color="green" ]; +"683E" [ label="",shape="box",style="filled",color="grey" ]; +"253" [ label="bfc6564cbdeeffac00a141",shape="hexagon",style="filled",color="green" ]; +"685E" [ label="3b0a8a1c2e5050bd",shape="box",style="filled",color="grey" ]; +"254" [ label="c360aaeb167487c9578a8f",shape="hexagon",style="filled",color="green" ]; +"687E" [ label="d",shape="box",style="filled",color="grey" ]; +"255" [ label="39d025b265f9790490781cb201",shape="hexagon",style="filled",color="green" ]; +"689E" [ label="5e80f85274",shape="box",style="filled",color="grey" ]; +"256" [ label="b4ce21e0a3df1d097277d6",shape="hexagon",style="filled",color="green" ]; +"691E" [ label="a849f9d352e",shape="box",style="filled",color="grey" ]; +"257" [ label="8bdb6a91c6dee925b557c705b3",shape="hexagon",style="filled",color="green" ]; +"693E" [ label="53069e384a2",shape="box",style="filled",color="grey" ]; +"258" [ label="ac487676a04e4",shape="hexagon",style="filled",color="green" ]; +"695E" [ label="a8e9",shape="box",style="filled",color="grey" ]; +"259" [ label="18115fa32ff1cb99",shape="hexagon",style="filled",color="green" ]; +"697E" [ label="45827dbdd8",shape="box",style="filled",color="grey" ]; +"260" [ label="b7b899dc8bc6a32b28cb098fa16",shape="hexagon",style="filled",color="green" ]; +"699E" [ label="32fe7eee5283",shape="box",style="filled",color="grey" ]; +"261" [ label="b69e426d974e1907e88",shape="hexagon",style="filled",color="green" ]; +"703E" [ label="e842",shape="box",style="filled",color="grey" ]; +"262" [ label="60d0128bdb61ae40e98638bd1391",shape="hexagon",style="filled",color="green" ]; +"705E" [ label="23ad1",shape="box",style="filled",color="grey" ]; +"264" [ label="8fb60d769e4c387",shape="hexagon",style="filled",color="green" ]; +"709E" [ label="6a8f5bafb1",shape="box",style="filled",color="grey" ]; +"265" [ label="e1fa7f549e5a0893bb42da5",shape="hexagon",style="filled",color="green" ]; +"711E" [ label="6a3c6921b0aeceda3",shape="box",style="filled",color="grey" ]; +"266" [ label="a77622f2ff77ffeeb2",shape="hexagon",style="filled",color="green" ]; +"713E" [ label="21dff35936370ae5f",shape="box",style="filled",color="grey" ]; +"267" [ label="30d9d350943c0e3ff7594b50",shape="hexagon",style="filled",color="green" ]; +"715E" [ label="b5e86c73d1198f",shape="box",style="filled",color="grey" ]; +"268" [ label="89ced1a7906d58d687d5a04",shape="hexagon",style="filled",color="green" ]; +"717E" [ label="c0174bbe7ae8",shape="box",style="filled",color="grey" ]; +"269" [ label="1de26f6b12b0d292f94184",shape="hexagon",style="filled",color="green" ]; +"719E" [ label="65fd8495",shape="box",style="filled",color="grey" ]; +"270" [ label="26fa7360ab81be9d4434a",shape="hexagon",style="filled",color="green" ]; +"721E" [ label="af0268dddd",shape="box",style="filled",color="grey" ]; +"272" [ label="4a9d79c960b8d33e39251e5f66",shape="hexagon" ]; +"34E" [ label="330342f283ef2",shape="box",style="filled",color="grey" ]; +"252E" [ label="3dafb9a29c00",shape="box",style="filled",color="grey" ]; +"436E" [ label="8d5137b16a",shape="box",style="filled",color="grey" ]; +"274" [ label="10a7d61c201c67a5e78542807cd",shape="hexagon" ]; +"59E" [ label="ef6361295eba07",shape="box",style="filled",color="grey" ]; +"500E" [ label="a8f0fe2eb7bc1471",shape="box",style="filled",color="grey" ]; +"720E" [ label="cfff3acd8e9d",shape="box",style="filled",color="grey" ]; +"275" [ label="f8ff39eab120851f143bf19",shape="hexagon" ]; +"98E" [ label="4e3cfd27a",shape="box",style="filled",color="grey" ]; +"278" [ label="4995c71223c9f6067324d387a2",shape="hexagon" ]; +"35E" [ label="57948adb5dead",shape="box",style="filled",color="grey" ]; +"488E" [ label="a738ba39",shape="box",style="filled",color="grey" ]; +"598E" [ label="be7d637c50c",shape="box",style="filled",color="grey" ]; +"604E" [ label="8d52f183ec",shape="box",style="filled",color="grey" ]; +"628E" [ label="cef12b6",shape="box",style="filled",color="grey" ]; +"279" [ label="b9ae94e6935503603341ecf4",shape="hexagon" ]; +"99E" [ label="14a3c17f3d",shape="box",style="filled",color="grey" ]; +"280" [ label="fd28c194a46fde909b019c52f",shape="hexagon" ]; +"242E" [ label="9fe65061641",shape="box",style="filled",color="grey" ]; +"270E" [ label="34d06d1ed6",shape="box",style="filled",color="grey" ]; +"272E" [ label="713db1c1",shape="box",style="filled",color="grey" ]; +"284E" [ label="90dccb18c0",shape="box",style="filled",color="grey" ]; +"286E" [ label="e17fea65",shape="box",style="filled",color="grey" ]; +"288E" [ label="aebb7b91b",shape="box",style="filled",color="grey" ]; +"586E" [ label="4348f3abcb7716",shape="box",style="filled",color="grey" ]; +"763E" [ label="b082f7a5ff",shape="box",style="filled",color="grey" ]; +"281" [ label="7c0ab977f5a3c4ab6d625f5033",shape="hexagon" ]; +"45E" [ label="20949455f573f",shape="box",style="filled",color="grey" ]; +"470E" [ label="c338481d79773",shape="box",style="filled",color="grey" ]; +"670E" [ label="e1d01ef89f",shape="box",style="filled",color="grey" ]; +"722E" [ label="c4507c22d19",shape="box",style="filled",color="grey" ]; +"282" [ label="7e0b91491c8c8566892cd9a0889",shape="hexagon" ]; +"103E" [ label="de9efa12873949",shape="box",style="filled",color="grey" ]; +"283" [ label="d58478d9c273ad4f4b2e091324",shape="hexagon" ]; +"165E" [ label="1a220eb692c",shape="box",style="filled",color="grey" ]; +"284" [ label="8be0efdd94a6383e87fbfded4f",shape="hexagon" ]; +"39E" [ label="c8a6c26d4fd9f",shape="box",style="filled",color="grey" ]; +"224E" [ label="8cbae42a3900",shape="box",style="filled",color="grey" ]; +"268E" [ label="fc73",shape="box",style="filled",color="grey" ]; +"632E" [ label="",shape="box",style="filled",color="grey" ]; +"710E" [ label="102f1",shape="box",style="filled",color="grey" ]; +"285" [ label="3aeb78ea51020a44f2d2615436dae",shape="hexagon" ]; +"53E" [ label="96deede0c6b44119",shape="box",style="filled",color="grey" ]; +"286" [ label="6bbd5b422edb8e358dcc20eecf9",shape="hexagon" ]; +"38E" [ label="4f2de229621272",shape="box",style="filled",color="grey" ]; +"166E" [ label="d495de0b35f6",shape="box",style="filled",color="grey" ]; +"288" [ label="4856000a6802ddfc121ef40432297",shape="hexagon",style="filled",color="#ff0000" ]; +"40E" [ label="04904a458422a5b9",shape="box",style="filled",color="grey" ]; +"218E" [ label="8cd4d",shape="box",style="filled",color="grey" ]; +"244E" [ label="",shape="box",style="filled",color="grey" ]; +"246E" [ label="9be88247",shape="box",style="filled",color="grey" ]; +"258E" [ label="4f05b",shape="box",style="filled",color="grey" ]; +"290E" [ label="8b092",shape="box",style="filled",color="grey" ]; +"292E" [ label="c3bbf4",shape="box",style="filled",color="grey" ]; +"308E" [ label="6331b3f",shape="box",style="filled",color="grey" ]; +"318E" [ label="",shape="box",style="filled",color="grey" ]; +"388E" [ label="3711",shape="box",style="filled",color="grey" ]; +"472E" [ label="c5255d",shape="box",style="filled",color="grey" ]; +"478E" [ label="5c6a2",shape="box",style="filled",color="grey" ]; +"566E" [ label="51ec95518d1b3",shape="box",style="filled",color="grey" ]; +"570E" [ label="82a65ed4b69",shape="box",style="filled",color="grey" ]; +"574E" [ label="05fed5e",shape="box",style="filled",color="grey" ]; +"608E" [ label="bf",shape="box",style="filled",color="grey" ]; +"614E" [ label="ce",shape="box",style="filled",color="grey" ]; +"658E" [ label="1a830d9f",shape="box",style="filled",color="grey" ]; +"664E" [ label="",shape="box",style="filled",color="grey" ]; +"682E" [ label="",shape="box",style="filled",color="grey" ]; +"289" [ label="2e31175cbd52fcd08360fe86d20",shape="hexagon" ]; +"41E" [ label="4ad5d68f07981a",shape="box",style="filled",color="grey" ]; +"636E" [ label="51192117f9b4",shape="box",style="filled",color="grey" ]; +"642E" [ label="6bf214d9e7fa5f2df",shape="box",style="filled",color="grey" ]; +"690E" [ label="558d8534f92fddfe",shape="box",style="filled",color="grey" ]; +"700E" [ label="6819fd5a6cdd280dd",shape="box",style="filled",color="grey" ]; +"290" [ label="3aa0ce5efcf79bc3ecced1886e89",shape="hexagon" ]; +"56E" [ label="ff9d64ddf49a20f",shape="box",style="filled",color="grey" ]; +"264E" [ label="6c93f24516f01d",shape="box",style="filled",color="grey" ]; +"510E" [ label="32b98f11f3d01d6",shape="box",style="filled",color="grey" ]; +"718E" [ label="8f7c875500073",shape="box",style="filled",color="grey" ]; +"291" [ label="7c1767485953d9c2",shape="hexagon" ]; +"66E" [ label="086",shape="box",style="filled",color="grey" ]; +"76E" [ label="",shape="box",style="filled",color="grey" ]; +"610E" [ label="450d3a2d49cbfd",shape="box",style="filled",color="grey" ]; +"292" [ label="9c1305d59c37e9be9f13d7d049c",shape="hexagon" ]; +"73E" [ label="817",shape="box",style="filled",color="grey" ]; +"293" [ label="efe092824916a5637ee35d439589",shape="hexagon" ]; +"49E" [ label="",shape="box",style="filled",color="grey" ]; +"214E" [ label="",shape="box",style="filled",color="grey" ]; +"216E" [ label="",shape="box",style="filled",color="grey" ]; +"236E" [ label="",shape="box",style="filled",color="grey" ]; +"278E" [ label="",shape="box",style="filled",color="grey" ]; +"358E" [ label="",shape="box",style="filled",color="grey" ]; +"398E" [ label="",shape="box",style="filled",color="grey" ]; +"400E" [ label="",shape="box",style="filled",color="grey" ]; +"402E" [ label="",shape="box",style="filled",color="grey" ]; +"404E" [ label="",shape="box",style="filled",color="grey" ]; +"406E" [ label="",shape="box",style="filled",color="grey" ]; +"408E" [ label="",shape="box",style="filled",color="grey" ]; +"412E" [ label="",shape="box",style="filled",color="grey" ]; +"438E" [ label="",shape="box",style="filled",color="grey" ]; +"448E" [ label="",shape="box",style="filled",color="grey" ]; +"476E" [ label="",shape="box",style="filled",color="grey" ]; +"504E" [ label="",shape="box",style="filled",color="grey" ]; +"552E" [ label="",shape="box",style="filled",color="grey" ]; +"634E" [ label="",shape="box",style="filled",color="grey" ]; +"768E" [ label="",shape="box",style="filled",color="grey" ]; +"295" [ label="70815f0352b43dc1562133ab6eb",shape="hexagon",style="filled",color="#A52A2A" ]; +"44E" [ label="ef2d4636934472",shape="box",style="filled",color="grey" ]; +"92E" [ label="22bd92e302816",shape="box",style="filled",color="grey" ]; +"250E" [ label="74e86",shape="box",style="filled",color="grey" ]; +"316E" [ label="",shape="box",style="filled",color="grey" ]; +"380E" [ label="",shape="box",style="filled",color="grey" ]; +"424E" [ label="c",shape="box",style="filled",color="grey" ]; +"442E" [ label="a5a",shape="box",style="filled",color="grey" ]; +"446E" [ label="bce",shape="box",style="filled",color="grey" ]; +"454E" [ label="",shape="box",style="filled",color="grey" ]; +"460E" [ label="",shape="box",style="filled",color="grey" ]; +"462E" [ label="",shape="box",style="filled",color="grey" ]; +"648E" [ label="",shape="box",style="filled",color="grey" ]; +"656E" [ label="e9",shape="box",style="filled",color="grey" ]; +"666E" [ label="b701e7",shape="box",style="filled",color="grey" ]; +"692E" [ label="f2e7cc",shape="box",style="filled",color="grey" ]; +"712E" [ label="8a9eb2806b0aa",shape="box",style="filled",color="grey" ]; +"296" [ label="e287d497450664a4c0f4efc338",shape="hexagon",style="filled",color="#ff0000" ]; +"47E" [ label="06eff1db45cdf",shape="box",style="filled",color="grey" ]; +"330E" [ label="c0f34a600",shape="box",style="filled",color="grey" ]; +"514E" [ label="bd7aca295ca",shape="box",style="filled",color="grey" ]; +"516E" [ label="0da9135",shape="box",style="filled",color="grey" ]; +"518E" [ label="fe821bce",shape="box",style="filled",color="grey" ]; +"520E" [ label="e64f22a31",shape="box",style="filled",color="grey" ]; +"522E" [ label="46e412a3",shape="box",style="filled",color="grey" ]; +"526E" [ label="99da1f8a5",shape="box",style="filled",color="grey" ]; +"528E" [ label="0f167280",shape="box",style="filled",color="grey" ]; +"530E" [ label="82d201",shape="box",style="filled",color="grey" ]; +"532E" [ label="1d529eb4",shape="box",style="filled",color="grey" ]; +"534E" [ label="",shape="box",style="filled",color="grey" ]; +"536E" [ label="bf141dbce",shape="box",style="filled",color="grey" ]; +"538E" [ label="e3fd0c7b3",shape="box",style="filled",color="grey" ]; +"540E" [ label="c96cb3",shape="box",style="filled",color="grey" ]; +"542E" [ label="0fabab47",shape="box",style="filled",color="grey" ]; +"544E" [ label="1b82200",shape="box",style="filled",color="grey" ]; +"297" [ label="2ced414a91575a48f2dd29a",shape="hexagon" ]; +"46E" [ label="85221d5e9e",shape="box",style="filled",color="grey" ]; +"93E" [ label="97a7eea3f",shape="box",style="filled",color="grey" ]; +"206E" [ label="4d22e1",shape="box",style="filled",color="grey" ]; +"426E" [ label="e65185ca",shape="box",style="filled",color="grey" ]; +"550E" [ label="",shape="box",style="filled",color="grey" ]; +"706E" [ label="a9012b7bb5",shape="box",style="filled",color="grey" ]; +"298" [ label="38f162cf917ce7298663a1f1c607",shape="hexagon" ]; +"36E" [ label="a031c9192ae8e75",shape="box",style="filled",color="grey" ]; +"95E" [ label="062fc905b9eb35",shape="box",style="filled",color="grey" ]; +"364E" [ label="c8fc17180bea86",shape="box",style="filled",color="grey" ]; +"394E" [ label="09e64744536c5e1",shape="box",style="filled",color="grey" ]; +"420E" [ label="af4a1fac3e2076",shape="box",style="filled",color="grey" ]; +"456E" [ label="238805e2194c3",shape="box",style="filled",color="grey" ]; +"624E" [ label="73e6ed83012",shape="box",style="filled",color="grey" ]; +"299" [ label="549fa15d68f0b3bee6192f888cd8",shape="hexagon" ]; +"48E" [ label="d17f8f4eeb8e63d",shape="box",style="filled",color="grey" ]; +"168E" [ label="cca7040e47789",shape="box",style="filled",color="grey" ]; +"260E" [ label="47ebc3f17",shape="box",style="filled",color="grey" ]; +"282E" [ label="cf5a6049ad",shape="box",style="filled",color="grey" ]; +"554E" [ label="2a47a6a27",shape="box",style="filled",color="grey" ]; +"590E" [ label="eff3468631dd4",shape="box",style="filled",color="grey" ]; +"767E" [ label="efb52b499303115c33fd",shape="box",style="filled",color="grey" ]; +"300" [ label="8593dcf973b110d00cecdc1e756",shape="hexagon",style="filled",color="#ff7f00" ]; +"62E" [ label="472a156cf2b55f",shape="box",style="filled",color="grey" ]; +"190E" [ label="647",shape="box",style="filled",color="grey" ]; +"226E" [ label="",shape="box",style="filled",color="grey" ]; +"238E" [ label="8a",shape="box",style="filled",color="grey" ]; +"254E" [ label="",shape="box",style="filled",color="grey" ]; +"256E" [ label="",shape="box",style="filled",color="grey" ]; +"262E" [ label="",shape="box",style="filled",color="grey" ]; +"266E" [ label="e8b",shape="box",style="filled",color="grey" ]; +"274E" [ label="",shape="box",style="filled",color="grey" ]; +"276E" [ label="f",shape="box",style="filled",color="grey" ]; +"294E" [ label="",shape="box",style="filled",color="grey" ]; +"296E" [ label="",shape="box",style="filled",color="grey" ]; +"310E" [ label="1b34fb150",shape="box",style="filled",color="grey" ]; +"320E" [ label="",shape="box",style="filled",color="grey" ]; +"322E" [ label="a7d2",shape="box",style="filled",color="grey" ]; +"332E" [ label="",shape="box",style="filled",color="grey" ]; +"340E" [ label="",shape="box",style="filled",color="grey" ]; +"344E" [ label="f55670",shape="box",style="filled",color="grey" ]; +"346E" [ label="1ed67841",shape="box",style="filled",color="grey" ]; +"348E" [ label="07283",shape="box",style="filled",color="grey" ]; +"374E" [ label="73ba1714ee",shape="box",style="filled",color="grey" ]; +"378E" [ label="27709106",shape="box",style="filled",color="grey" ]; +"452E" [ label="93ea0",shape="box",style="filled",color="grey" ]; +"508E" [ label="",shape="box",style="filled",color="grey" ]; +"524E" [ label="1d792d81",shape="box",style="filled",color="grey" ]; +"612E" [ label="a",shape="box",style="filled",color="grey" ]; +"626E" [ label="",shape="box",style="filled",color="grey" ]; +"638E" [ label="",shape="box",style="filled",color="grey" ]; +"644E" [ label="",shape="box",style="filled",color="grey" ]; +"654E" [ label="",shape="box",style="filled",color="grey" ]; +"672E" [ label="",shape="box",style="filled",color="grey" ]; +"302" [ label="23f94655294d3ff537f2915fa",shape="hexagon" ]; +"797E" [ label="",shape="box",style="filled",color="grey" ]; +"798E" [ label="a2eab7c9fa641e5f",shape="box",style="filled",color="grey" ]; +"303" [ label="a9058241db5b6b6c25569acdf5",shape="hexagon" ]; +"52E" [ label="b2babf3244213",shape="box",style="filled",color="grey" ]; +"650E" [ label="b354cd9e9dbb0bfa",shape="box",style="filled",color="grey" ]; +"304" [ label="bdbdb31bd777fb65dd6dd2d0e7",shape="hexagon" ]; +"50E" [ label="3bec1c012b498",shape="box",style="filled",color="grey" ]; +"640E" [ label="c54f0fc1e05",shape="box",style="filled",color="grey" ]; +"646E" [ label="9ab6c66dc",shape="box",style="filled",color="grey" ]; +"652E" [ label="699e3db878047",shape="box",style="filled",color="grey" ]; +"306" [ label="1d4ea80c7194689d69f9592186",shape="hexagon" ]; +"55E" [ label="8066f87a88f4e",shape="box",style="filled",color="grey" ]; +"220E" [ label="3a8173d6c",shape="box",style="filled",color="grey" ]; +"338E" [ label="24dfe1a997a",shape="box",style="filled",color="grey" ]; +"368E" [ label="65a1",shape="box",style="filled",color="grey" ]; +"486E" [ label="59a8b435ccd",shape="box",style="filled",color="grey" ]; +"490E" [ label="86e9b0428",shape="box",style="filled",color="grey" ]; +"562E" [ label="5a7a610a8a",shape="box",style="filled",color="grey" ]; +"564E" [ label="8f143077e",shape="box",style="filled",color="grey" ]; +"600E" [ label="6472c2861e0e0dd681",shape="box",style="filled",color="grey" ]; +"668E" [ label="f0f45e707",shape="box",style="filled",color="grey" ]; +"674E" [ label="95e93c4a13",shape="box",style="filled",color="grey" ]; +"698E" [ label="33e1de",shape="box",style="filled",color="grey" ]; +"307" [ label="7204950f6233bf9c9e1f00d4a870",shape="hexagon" ]; +"107E" [ label="ccceeef40edda78",shape="box",style="filled",color="grey" ]; +"308" [ label="a2c4b1d72e2da483a86ae0c62e5",shape="hexagon" ]; +"108E" [ label="eedc819a68add6",shape="box",style="filled",color="grey" ]; +"309" [ label="f603819d560c5603259aa05dca",shape="hexagon" ]; +"109E" [ label="acacfc83af504",shape="box",style="filled",color="grey" ]; +"310" [ label="2f43cba12702078b4e0d3bfdae2bc",shape="hexagon" ]; +"110E" [ label="3c1edc8de4795936",shape="box",style="filled",color="grey" ]; +"311" [ label="8f9cdc26798117dd3e9ee4a8770",shape="hexagon" ]; +"58E" [ label="881d373",shape="box",style="filled",color="grey" ]; +"234E" [ label="",shape="box",style="filled",color="grey" ]; +"300E" [ label="",shape="box",style="filled",color="grey" ]; +"306E" [ label="8c7cd9b93b1cbe48e1",shape="box",style="filled",color="grey" ]; +"314E" [ label="616d8a7b",shape="box",style="filled",color="grey" ]; +"342E" [ label="",shape="box",style="filled",color="grey" ]; +"354E" [ label="",shape="box",style="filled",color="grey" ]; +"370E" [ label="",shape="box",style="filled",color="grey" ]; +"382E" [ label="",shape="box",style="filled",color="grey" ]; +"422E" [ label="",shape="box",style="filled",color="grey" ]; +"444E" [ label="",shape="box",style="filled",color="grey" ]; +"582E" [ label="",shape="box",style="filled",color="grey" ]; +"620E" [ label="",shape="box",style="filled",color="grey" ]; +"630E" [ label="",shape="box",style="filled",color="grey" ]; +"684E" [ label="",shape="box",style="filled",color="grey" ]; +"696E" [ label="",shape="box",style="filled",color="grey" ]; +"801E" [ label="",shape="box",style="filled",color="grey" ]; +"312" [ label="97c9d726e27304311901a52ce",shape="hexagon",style="filled",color="#ff0000" ]; +"42E" [ label="1112164c2f7a",shape="box",style="filled",color="grey" ]; +"192E" [ label="5c609b12c",shape="box",style="filled",color="grey" ]; +"194E" [ label="00265",shape="box",style="filled",color="grey" ]; +"196E" [ label="04767",shape="box",style="filled",color="grey" ]; +"198E" [ label="f0d99f16",shape="box",style="filled",color="grey" ]; +"200E" [ label="",shape="box",style="filled",color="grey" ]; +"202E" [ label="6e186b",shape="box",style="filled",color="grey" ]; +"204E" [ label="d382",shape="box",style="filled",color="grey" ]; +"312E" [ label="c6b5321a",shape="box",style="filled",color="grey" ]; +"336E" [ label="",shape="box",style="filled",color="grey" ]; +"376E" [ label="",shape="box",style="filled",color="grey" ]; +"384E" [ label="aeb8",shape="box",style="filled",color="grey" ]; +"386E" [ label="2e53009d4a375",shape="box",style="filled",color="grey" ]; +"428E" [ label="",shape="box",style="filled",color="grey" ]; +"474E" [ label="",shape="box",style="filled",color="grey" ]; +"484E" [ label="",shape="box",style="filled",color="grey" ]; +"546E" [ label="dea1d1",shape="box",style="filled",color="grey" ]; +"548E" [ label="5a0b4b906a",shape="box",style="filled",color="grey" ]; +"314" [ label="1727041c622518c9dd24f7c211",shape="hexagon" ]; +"113E" [ label="49704867bee95",shape="box",style="filled",color="grey" ]; +"315" [ label="31f2f9aef958979f9f3532b9b",shape="hexagon",style="filled",color="#ff0000" ]; +"43E" [ label="47cd70f",shape="box",style="filled",color="grey" ]; +"240E" [ label="248df40dae",shape="box",style="filled",color="grey" ]; +"298E" [ label="",shape="box",style="filled",color="grey" ]; +"334E" [ label="9dd5bf47f",shape="box",style="filled",color="grey" ]; +"360E" [ label="",shape="box",style="filled",color="grey" ]; +"390E" [ label="28533c",shape="box",style="filled",color="grey" ]; +"418E" [ label="",shape="box",style="filled",color="grey" ]; +"492E" [ label="a4c7d0",shape="box",style="filled",color="grey" ]; +"502E" [ label="4f6f7f",shape="box",style="filled",color="grey" ]; +"584E" [ label="7ab64a969",shape="box",style="filled",color="grey" ]; +"588E" [ label="",shape="box",style="filled",color="grey" ]; +"602E" [ label="69",shape="box",style="filled",color="grey" ]; +"606E" [ label="67513d",shape="box",style="filled",color="grey" ]; +"662E" [ label="cf",shape="box",style="filled",color="grey" ]; +"316" [ label="a54092a3033f7d5e41e0a76c1",shape="hexagon" ]; +"51E" [ label="1467f017b74e",shape="box",style="filled",color="grey" ]; +"317" [ label="2043b477ac0393676a4309514d0",shape="hexagon" ]; +"116E" [ label="bdec8c86db51b9",shape="box",style="filled",color="grey" ]; +"318" [ label="ab48d1f65812bc0f8ab6941c3b5",shape="hexagon" ]; +"74E" [ label="81",shape="box",style="filled",color="grey" ]; +"319" [ label="ca3d67754cf62fdafbf0a1e0",shape="hexagon" ]; +"57E" [ label="75b14f1719d",shape="box",style="filled",color="grey" ]; +"94E" [ label="62f36ea98a",shape="box",style="filled",color="grey" ]; +"350E" [ label="e3a76d31ca59a",shape="box",style="filled",color="grey" ]; +"440E" [ label="b3cadc253f7",shape="box",style="filled",color="grey" ]; +"466E" [ label="fb58e11",shape="box",style="filled",color="grey" ]; +"676E" [ label="8606837526d81cdec",shape="box",style="filled",color="grey" ]; +"320" [ label="a7a7f3681dad1250b01cf80bc17",shape="hexagon" ]; +"60E" [ label="2c514b0cd8f7d3",shape="box",style="filled",color="grey" ]; +"366E" [ label="7e494b",shape="box",style="filled",color="grey" ]; +"434E" [ label="15d44ab97",shape="box",style="filled",color="grey" ]; +"458E" [ label="78b2d75d00166",shape="box",style="filled",color="grey" ]; +"618E" [ label="761e0f72f95",shape="box",style="filled",color="grey" ]; +"321" [ label="275afb2b215b966d9fac51b96b9",shape="hexagon" ]; +"72E" [ label="ac284d73563",shape="box",style="filled",color="grey" ]; +"362E" [ label="7e74e1587f3a4d208",shape="box",style="filled",color="grey" ]; +"372E" [ label="ffd1b1af3b6864078f3",shape="box",style="filled",color="grey" ]; +"572E" [ label="b38049e00",shape="box",style="filled",color="grey" ]; +"322" [ label="c3c93c700edc0cb4f95f03c04",shape="hexagon" ]; +"54E" [ label="99237fce1358",shape="box",style="filled",color="grey" ]; +"222E" [ label="3dcf8f454",shape="box",style="filled",color="grey" ]; +"302E" [ label="c5acd20cad2",shape="box",style="filled",color="grey" ]; +"556E" [ label="6c998bf2a5edd",shape="box",style="filled",color="grey" ]; +"558E" [ label="4b683",shape="box",style="filled",color="grey" ]; +"323" [ label="63a3d4fb9d38a0182be6e39e76",shape="hexagon" ]; +"37E" [ label="bba6e6e194ccf",shape="box",style="filled",color="grey" ]; +"208E" [ label="01938827",shape="box",style="filled",color="grey" ]; +"210E" [ label="9",shape="box",style="filled",color="grey" ]; +"352E" [ label="64ef1d545",shape="box",style="filled",color="grey" ]; +"450E" [ label="b473716",shape="box",style="filled",color="grey" ]; +"568E" [ label="7c13bf753da",shape="box",style="filled",color="grey" ]; +"576E" [ label="4e4a79111d",shape="box",style="filled",color="grey" ]; +"686E" [ label="af4abb0d6a99",shape="box",style="filled",color="grey" ]; +"324" [ label="4399cf78123dedd0dfe9776104",shape="hexagon" ]; +"228E" [ label="af9c489df53",shape="box",style="filled",color="grey" ]; +"248E" [ label="3703059dbc5a8",shape="box",style="filled",color="grey" ]; +"304E" [ label="8a46e6",shape="box",style="filled",color="grey" ]; +"468E" [ label="f9d09",shape="box",style="filled",color="grey" ]; +"578E" [ label="cd1e9af3dec2",shape="box",style="filled",color="grey" ]; +"660E" [ label="9e650e89bb",shape="box",style="filled",color="grey" ]; +"688E" [ label="f62b136b2171",shape="box",style="filled",color="grey" ]; +"694E" [ label="4727c415d06bcbef",shape="box",style="filled",color="grey" ]; +"714E" [ label="38b3b0d9",shape="box",style="filled",color="grey" ]; +"766E" [ label="a153512d982",shape="box",style="filled",color="grey" ]; +"325" [ label="40f253cd228f7ac2d0aee",shape="hexagon" ]; +"97E" [ label="a3ff993",shape="box",style="filled",color="grey" ]; +"506E" [ label="7528dd86b",shape="box",style="filled",color="grey" ]; +"326" [ label="89a2505da6179a80202d4a6c3",shape="hexagon" ]; +"61E" [ label="75eea05672a5",shape="box",style="filled",color="grey" ]; +"175E" [ label="3b0c08dd2ca",shape="box",style="filled",color="grey" ]; +"482E" [ label="a3781072b",shape="box",style="filled",color="grey" ]; +"328" [ label="2601085bde1b2450d64509f36",shape="hexagon" ]; +"75E" [ label="0efbd",shape="box",style="filled",color="grey" ]; +"580E" [ label="bb92d1da1f38d52f8ff",shape="box",style="filled",color="grey" ]; +"329" [ label="5c81103c751345d0ee0f4bd",shape="hexagon" ]; +"96E" [ label="b23526044",shape="box",style="filled",color="grey" ]; +"330" [ label="fcbd9ad14139718bc6fcc8b4",shape="hexagon" ]; +"100E" [ label="73ca543bf1",shape="box",style="filled",color="grey" ]; +"170E" [ label="c2f32e2cf9",shape="box",style="filled",color="grey" ]; +"333" [ label="44cbb41a9cfc15497eacd294",color="yellow",style="filled",shape="doubleoctagon" ]; +"63E" [ label="6a91",shape="box",style="filled",color="grey" ]; +"67E" [ label="b074e",shape="box",style="filled",color="grey" ]; +"68E" [ label="06209",shape="box",style="filled",color="grey" ]; +"69E" [ label="58e3dcc618",shape="box",style="filled",color="grey" ]; +"70E" [ label="eee44624da",shape="box",style="filled",color="grey" ]; +"71E" [ label="6a91",shape="box",style="filled",color="grey" ]; +"802E" [ label="e1e8c",shape="box",style="filled",color="grey" ]; +"793E" [ label="",shape="box",style="filled",color="grey" ]; +"334" [ label="b46b0756dba915943839e90a55",color="yellow",style="filled",shape="doubleoctagon" ]; +"64E" [ label="5fdf",shape="box",style="filled",color="grey" ]; +"81E" [ label="3eca1f94dc181",shape="box",style="filled",color="grey" ]; +"82E" [ label="6b1bb9b0e",shape="box",style="filled",color="grey" ]; +"83E" [ label="a54d477232",shape="box",style="filled",color="grey" ]; +"84E" [ label="a164d9f60fbbdd",shape="box",style="filled",color="grey" ]; +"85E" [ label="78c8463ea",shape="box",style="filled",color="grey" ]; +"86E" [ label="c110ba7",shape="box",style="filled",color="grey" ]; +"87E" [ label="3b63cdc0f",shape="box",style="filled",color="grey" ]; +"88E" [ label="6f578c5128",shape="box",style="filled",color="grey" ]; +"89E" [ label="3e048573fd",shape="box",style="filled",color="grey" ]; +"336" [ URL="tes hi",area="test",label="825c7994d5da13afe519861818",color="#ff0000",style="filled",shape="tripleoctagon" ]; +"1E" [ label="f4bef37b6a94bfd00",shape="box",style="filled",color="grey" ]; +"2E" [ label="d2647f8b6d8661d08",shape="box",style="filled",color="grey" ]; +"3E" [ label="964cb56d8f69ff058",shape="box",style="filled",color="grey" ]; +"4E" [ label="4f35e206816c3bd22",shape="box",style="filled",color="grey" ]; +"5E" [ label="affb2d716803a2d3e",shape="box",style="filled",color="grey" ]; +"6E" [ label="e4ae306d9bd669c70",shape="box",style="filled",color="grey" ]; +"7E" [ label="4dbf4395236fb03ed",shape="box",style="filled",color="grey" ]; +"8E" [ label="15b3ad672cd2f713a",shape="box",style="filled",color="grey" ]; +"9E" [ label="8d6e6e0cd9b842a47",shape="box",style="filled",color="grey" ]; +"10E" [ label="00d0dd018fe879f96",shape="box",style="filled",color="grey" ]; +"11E" [ label="f28b78d4803c",shape="box",style="filled",color="grey" ]; +"12E" [ label="2d886da042b5384b4",shape="box",style="filled",color="grey" ]; +"13E" [ label="548c0081a62132b44",shape="box",style="filled",color="grey" ]; +"14E" [ label="52126553e52385d16",shape="box",style="filled",color="grey" ]; +"15E" [ label="9fe716e738eaea34e",shape="box",style="filled",color="grey" ]; +"16E" [ label="5782807b5f575e0a8",shape="box",style="filled",color="grey" ]; +"17E" [ label="792fd6f9df1fa1e33",shape="box",style="filled",color="grey" ]; +"18E" [ label="c471b6fdbfb852661",shape="box",style="filled",color="grey" ]; +"19E" [ label="a84844dfd0052b3b5",shape="box",style="filled",color="grey" ]; +"20E" [ label="724dabdce9744d061",shape="box",style="filled",color="grey" ]; +"21E" [ label="57f7fd2eecec93c8b",shape="box",style="filled",color="grey" ]; +"22E" [ label="baba65f670ee34a88",shape="box",style="filled",color="grey" ]; +"23E" [ label="ac34ec0f0488b17ec",shape="box",style="filled",color="grey" ]; +"24E" [ label="51e74bec5513083bb",shape="box",style="filled",color="grey" ]; +"25E" [ label="8e2d970b2f820ee35",shape="box",style="filled",color="grey" ]; +"26E" [ label="19398d3cd6b9c674f",shape="box",style="filled",color="grey" ]; +"27E" [ label="6505e29f4a11d9530",shape="box",style="filled",color="grey" ]; +"28E" [ label="bc4824f07a9d2bba6",shape="box",style="filled",color="grey" ]; +"29E" [ label="3acbf8a1537e4e1a1",shape="box",style="filled",color="grey" ]; +"30E" [ label="536264e787cf70469",shape="box",style="filled",color="grey" ]; +"31E" [ label="d",shape="box",style="filled",color="grey" ]; +"65E" [ label="d4b2",shape="box",style="filled",color="grey" ]; +"119E" [ label="2a9caef7",shape="box",style="filled",color="grey" ]; +"150E" [ label="73d12",shape="box",style="filled",color="grey" ]; +"176E" [ label="8896166adc0",shape="box",style="filled",color="grey" ]; +"743E" [ label="9f",shape="box",style="filled",color="grey" ]; +"744E" [ label="2e1313c",shape="box",style="filled",color="grey" ]; +"764E" [ label="cd6",shape="box",style="filled",color="grey" ]; +"337" [ label="8304a439f91fc90b3fe8dd35be8",color="yellow",style="filled",shape="doubleoctagon" ]; +"120E" [ label="345d26b3f821fe",shape="box",style="filled",color="grey" ]; +"121E" [ label="357679fea1e2f",shape="box",style="filled",color="grey" ]; +"122E" [ label="c71043819b6a79",shape="box",style="filled",color="grey" ]; +"123E" [ label="f9df653b86fb8df",shape="box",style="filled",color="grey" ]; +"124E" [ label="020df871874cd",shape="box",style="filled",color="grey" ]; +"125E" [ label="4c52fdd8e396692",shape="box",style="filled",color="grey" ]; +"126E" [ label="8b98c3ddbe0b336",shape="box",style="filled",color="grey" ]; +"127E" [ label="d9f4abac731a9e",shape="box",style="filled",color="grey" ]; +"128E" [ label="50f4d9b97aefe",shape="box",style="filled",color="grey" ]; +"129E" [ label="ea920d9f5b295119",shape="box",style="filled",color="grey" ]; +"130E" [ label="ff5c9b242337c",shape="box",style="filled",color="grey" ]; +"131E" [ label="4e12f7ff0918",shape="box",style="filled",color="grey" ]; +"132E" [ label="ee3b6be71d59b",shape="box",style="filled",color="grey" ]; +"133E" [ label="615cd6b5e3d21c",shape="box",style="filled",color="grey" ]; +"134E" [ label="6d52dd1b198bb",shape="box",style="filled",color="grey" ]; +"135E" [ label="8c932e1e502dca",shape="box",style="filled",color="grey" ]; +"136E" [ label="e84330eef281284a",shape="box",style="filled",color="grey" ]; +"137E" [ label="85fc23f1c88b4",shape="box",style="filled",color="grey" ]; +"138E" [ label="5997cb0c083422",shape="box",style="filled",color="grey" ]; +"339" [ label="b1ffbabb24d71f67d1e0ce23c51",color="yellow",style="filled",shape="doubleoctagon" ]; +"151E" [ label="",shape="box",style="filled",color="grey" ]; +"153E" [ label="41a8b095c7fd3",shape="box",style="filled",color="grey" ]; +"154E" [ label="151bcc2a8de7ea634",shape="box",style="filled",color="grey" ]; +"155E" [ label="6c541cad8de1b15",shape="box",style="filled",color="grey" ]; +"156E" [ label="c935c7f4d1090ac",shape="box",style="filled",color="grey" ]; +"157E" [ label="5ce1fcfb042b",shape="box",style="filled",color="grey" ]; +"158E" [ label="531806429433",shape="box",style="filled",color="grey" ]; +"159E" [ label="d285240b89cb",shape="box",style="filled",color="grey" ]; +"160E" [ label="f22c27c0f0a54e",shape="box",style="filled",color="grey" ]; +"161E" [ label="8d0d8314d211d80",shape="box",style="filled",color="grey" ]; +"162E" [ label="",shape="box",style="filled",color="grey" ]; +"347" [ label="9652ab8b55fdb2a36d1f3fe020",shape="hexagon" ]; +"139E" [ label="ef8b68bb5772f3",shape="box",style="filled",color="grey" ]; +"795E" [ label="16c3ae29c0bc713",shape="box",style="filled",color="grey" ]; +"348" [ label="676bbe7d1c1fb71742df534ce8",shape="hexagon" ]; +"799E" [ label="a78eb40ae56aaa9",shape="box",style="filled",color="grey" ]; +"800E" [ label="6aae8d25951",shape="box",style="filled",color="grey" ]; +"349" [ label="66c0220688a999aaf7f1702d1",shape="hexagon" ]; +"141E" [ label="67b6a4dca3a6d",shape="box",style="filled",color="grey" ]; +"350" [ label="1322fb0818783e6f9a4f173d47c52",shape="hexagon" ]; +"142E" [ label="9696c0950295d8cb5",shape="box",style="filled",color="grey" ]; +"678E" [ label="b5c747cc9",shape="box",style="filled",color="grey" ]; +"351" [ label="ff07977fca5513098d220d1eb3a",shape="hexagon" ]; +"143E" [ label="89a36b13f8c344b",shape="box",style="filled",color="grey" ]; +"232E" [ label="56292d076643",shape="box",style="filled",color="grey" ]; +"680E" [ label="b5c747cc9",shape="box",style="filled",color="grey" ]; +"704E" [ label="431430c49",shape="box",style="filled",color="grey" ]; +"352" [ label="a97ef281eafc34b1630d450a1df",shape="hexagon" ]; +"144E" [ label="4ff4e275c710c3b",shape="box",style="filled",color="grey" ]; +"432E" [ label="d13da6273c9b4da",shape="box",style="filled",color="grey" ]; +"353" [ label="72cbb37db85ed3c6eda5dcf8",shape="hexagon" ]; +"145E" [ label="33ff9e43d5ab",shape="box",style="filled",color="grey" ]; +"354" [ label="0f6784e49852c0be0da23b16",shape="hexagon" ]; +"146E" [ label="d4f958b03a98",shape="box",style="filled",color="grey" ]; +"396E" [ label="8e24e9b4e",shape="box",style="filled",color="grey" ]; +"355" [ label="383f5c65cc6c25aa0a0e6dbb",shape="hexagon" ]; +"147E" [ label="1ff8ff951ee9",shape="box",style="filled",color="grey" ]; +"356" [ label="f52a45620969f0df4e6ae1dcd7",shape="hexagon" ]; +"148E" [ label="5256925081c812",shape="box",style="filled",color="grey" ]; +"357" [ label="1f5df34ad75a55a76ef4afa0a47",shape="hexagon" ]; +"149E" [ label="26a185dde9a93dd",shape="box",style="filled",color="grey" ]; +"358" [ label="45ba4d4c61c9601a26d59e47e0260",shape="hexagon" ]; +"167E" [ label="99bd3e7feeb710",shape="box",style="filled",color="grey" ]; +"359" [ label="f95344b0ae31693f3a2746597d4",shape="hexagon" ]; +"169E" [ label="4e8259973f1f",shape="box",style="filled",color="grey" ]; +"360" [ label="b79798b186d6b82288e8be4017d",shape="hexagon" ]; +"171E" [ label="63b079bd5847",shape="box",style="filled",color="grey" ]; +"361" [ label="47e0067f4d853afd2012f04daa8",shape="hexagon" ]; +"172E" [ label="92fb5d4a0805",shape="box",style="filled",color="grey" ]; +"362" [ label="f2b6201774de40a29b504b1f716",shape="hexagon" ]; +"173E" [ label="d7203571944b",shape="box",style="filled",color="grey" ]; +"363" [ label="800422ab81d804eef3e7b91dfba91",shape="hexagon" ]; +"174E" [ label="952316a1a5a785",shape="box",style="filled",color="grey" ]; +"364" [ label="35b941379e1af658078cffb83a2",shape="hexagon" ]; +"101E" [ label="331675c046693f",shape="box",style="filled",color="grey" ]; +"365" [ label="d4f7b7fba7afcf7a72397353ec",shape="hexagon" ]; +"102E" [ label="32c4684b55361",shape="box",style="filled",color="grey" ]; +"367" [ label="e4b45b7a2f884d3734bfd5985656",shape="hexagon" ]; +"104E" [ label="1333074979f2d0b",shape="box",style="filled",color="grey" ]; +"368" [ label="02c2ba83680ab57f236a33d702",shape="hexagon" ]; +"105E" [ label="084d4bfa5853e",shape="box",style="filled",color="grey" ]; +"369" [ label="9ccd974150a18260b207b6584caa",shape="hexagon" ]; +"106E" [ label="28f7bfc40c88e6a",shape="box",style="filled",color="grey" ]; +"374" [ label="653ae44d45dcadeb481b53027d",shape="hexagon" ]; +"111E" [ label="8f95518f48528",shape="box",style="filled",color="grey" ]; +"375" [ label="d66f542ef1ce4d02c59bec65e",shape="hexagon" ]; +"112E" [ label="2ef209509e2a",shape="box",style="filled",color="grey" ]; +"377" [ label="a2984b7a11e49440420058c1d80",shape="hexagon" ]; +"114E" [ label="ef42184297591d",shape="box",style="filled",color="grey" ]; +"378" [ label="31055116421c96b37f72a262bb",shape="hexagon" ]; +"115E" [ label="be9c5958196ed",shape="box",style="filled",color="grey" ]; +"380" [ label="8462bb2eec1a62d19a15865e57c92",shape="hexagon" ]; +"117E" [ label="16a795a1d63f30df",shape="box",style="filled",color="grey" ]; +"392E" [ label="85a34bc9616ff",shape="box",style="filled",color="grey" ]; +"381" [ label="c21eb96fe100a1efaa128181b7",shape="hexagon" ]; +"118E" [ label="f1b0d754353a6",shape="box",style="filled",color="grey" ]; +"382" [ label="e3e284d0cc803d98d674f9c3f6d",color="yellow",style="filled",shape="doubleoctagon" ]; +"177E" [ label="30417faf916",shape="box",style="filled",color="grey" ]; +"178E" [ label="e618df70814a",shape="box",style="filled",color="grey" ]; +"179E" [ label="fa90ddf10bd574",shape="box",style="filled",color="grey" ]; +"180E" [ label="815cc0b83d733",shape="box",style="filled",color="grey" ]; +"181E" [ label="f787d827958c",shape="box",style="filled",color="grey" ]; +"182E" [ label="f20f7f513e",shape="box",style="filled",color="grey" ]; +"183E" [ label="290907417e13",shape="box",style="filled",color="grey" ]; +"184E" [ label="e8386a8e1c8a",shape="box",style="filled",color="grey" ]; +"185E" [ label="319bc900218b",shape="box",style="filled",color="grey" ]; +"186E" [ label="3ba7afb0e48ae1",shape="box",style="filled",color="grey" ]; +"187E" [ label="6ba0776fc8e",shape="box",style="filled",color="grey" ]; +"188E" [ label="09847696ae",shape="box",style="filled",color="grey" ]; +"383" [ label="908f9ad506eae9ab6ada185e3",color="yellow",style="filled",shape="doubleoctagon" ]; +"730E" [ label="65694ca6d575",shape="box",style="filled",color="grey" ]; +"732E" [ label="37f57e81ebed95",shape="box",style="filled",color="grey" ]; +"741E" [ label="9b6c",shape="box",style="filled",color="grey" ]; +"765E" [ label="88ebe2e8782c",shape="box",style="filled",color="grey" ]; +"796E" [ label="901b2105a902ee7791",shape="box",style="filled",color="grey" ]; +"384" [ label="593caebf2037317648bb451aa79",color="yellow",style="filled",shape="doubleoctagon" ]; +"726E" [ label="351dd0aefe480c",shape="box",style="filled",color="grey" ]; +"728E" [ label="56e1a896",shape="box",style="filled",color="grey" ]; +"742E" [ label="5ba4693031",shape="box",style="filled",color="grey" ]; +"385" [ label="717c254aeffbb527dabfc",shape="hexagon" ]; +"328E" [ label="123cc6d1ac",shape="box",style="filled",color="grey" ]; +"496E" [ label="",shape="box",style="filled",color="grey" ]; +"594E" [ label="7f8c557bcf3889",shape="box",style="filled",color="grey" ]; +"622E" [ label="da3d5",shape="box",style="filled",color="grey" ]; +"754E" [ label="68d8993e61d8c82cd29e8d0182b0",shape="box",style="filled",color="grey" ]; +"755E" [ label="4c865eec228e41e7f4e5fc68a9a6",shape="box",style="filled",color="grey" ]; +"756E" [ label="8983ffbc30deb364dd92c3ad85c9",shape="box",style="filled",color="grey" ]; +"757E" [ label="68d8993e61d8c82cd29e8d0182b0",shape="box",style="filled",color="grey" ]; +"758E" [ label="4c865eec228e41e7f4e5fc68a9a6",shape="box",style="filled",color="grey" ]; +"759E" [ label="8983ffbc30deb364dd92c3ad85c9",shape="box",style="filled",color="grey" ]; +"760E" [ label="8983ffbc30deb364dd92c3ad85c9",shape="box",style="filled",color="grey" ]; +"761E" [ label="eb9cf6456613d4cd06f7c0894bd6",shape="box",style="filled",color="grey" ]; +"762E" [ label="1e2298c4bb",shape="box",style="filled",color="grey" ]; +"1" -> "189E" [ label=" ",color="blue",arrowhead="dot" ]; +"1" -> "790E" [ label=" ",color="blue",arrowhead="dot" ]; +"2" -> "191E" [ label=" ",color="blue",arrowhead="dot" ]; +"3" -> "193E" [ label=" ",color="blue",arrowhead="dot" ]; +"4" -> "195E" [ label=" ",color="blue",arrowhead="dot" ]; +"5" -> "197E" [ label=" ",color="blue",arrowhead="dot" ]; +"6" -> "199E" [ label=" ",color="blue",arrowhead="dot" ]; +"7" -> "201E" [ label=" ",color="blue",arrowhead="dot" ]; +"8" -> "203E" [ label=" ",color="blue",arrowhead="dot" ]; +"9" -> "725E" [ label=" ",color="blue",arrowhead="dot" ]; +"9" -> "785E" [ label=" ",color="blue",arrowhead="dot" ]; +"10" -> "205E" [ label=" ",color="blue",arrowhead="dot" ]; +"11" -> "207E" [ label=" ",color="blue",arrowhead="dot" ]; +"12" -> "209E" [ label=" ",color="blue",arrowhead="dot" ]; +"13" -> "211E" [ label=" ",color="blue",arrowhead="dot" ]; +"14" -> "213E" [ label=" ",color="blue",arrowhead="dot" ]; +"15" -> "215E" [ label=" ",color="blue",arrowhead="dot" ]; +"16" -> "727E" [ label=" ",color="blue",arrowhead="dot" ]; +"16" -> "784E" [ label=" ",color="blue",arrowhead="dot" ]; +"17" -> "217E" [ label=" ",color="blue",arrowhead="dot" ]; +"17" -> "787E" [ label=" ",color="blue",arrowhead="dot" ]; +"18" -> "219E" [ label=" ",color="blue",arrowhead="dot" ]; +"19" -> "221E" [ label=" ",color="blue",arrowhead="dot" ]; +"20" -> "223E" [ label=" ",color="blue",arrowhead="dot" ]; +"21" -> "225E" [ label=" ",color="blue",arrowhead="dot" ]; +"22" -> "227E" [ label=" ",color="blue",arrowhead="dot" ]; +"22" -> "792E" [ label=" ",color="blue",arrowhead="dot" ]; +"23" -> "231E" [ label=" ",color="blue",arrowhead="dot" ]; +"24" -> "233E" [ label=" ",color="blue",arrowhead="dot" ]; +"25" -> "235E" [ label=" ",color="blue",arrowhead="dot" ]; +"26" -> "237E" [ label=" ",color="blue",arrowhead="dot" ]; +"27" -> "239E" [ label=" ",color="blue",arrowhead="dot" ]; +"27" -> "783E" [ label=" ",color="blue",arrowhead="dot" ]; +"28" -> "241E" [ label=" ",color="blue",arrowhead="dot" ]; +"28" -> "791E" [ label=" ",color="blue",arrowhead="dot" ]; +"29" -> "243E" [ label=" ",color="blue",arrowhead="dot" ]; +"30" -> "245E" [ label=" ",color="blue",arrowhead="dot" ]; +"31" -> "247E" [ label=" ",color="blue",arrowhead="dot" ]; +"32" -> "249E" [ label=" ",color="blue",arrowhead="dot" ]; +"33" -> "251E" [ label=" ",color="blue",arrowhead="dot" ]; +"34" -> "253E" [ label=" ",color="blue",arrowhead="dot" ]; +"35" -> "255E" [ label=" ",color="blue",arrowhead="dot" ]; +"36" -> "257E" [ label=" ",color="blue",arrowhead="dot" ]; +"37" -> "259E" [ label=" ",color="blue",arrowhead="dot" ]; +"38" -> "261E" [ label=" ",color="blue",arrowhead="dot" ]; +"39" -> "263E" [ label=" ",color="blue",arrowhead="dot" ]; +"40" -> "265E" [ label=" ",color="blue",arrowhead="dot" ]; +"41" -> "267E" [ label=" ",color="blue",arrowhead="dot" ]; +"42" -> "269E" [ label=" ",color="blue",arrowhead="dot" ]; +"43" -> "271E" [ label=" ",color="blue",arrowhead="dot" ]; +"44" -> "273E" [ label=" ",color="blue",arrowhead="dot" ]; +"45" -> "275E" [ label=" ",color="blue",arrowhead="dot" ]; +"46" -> "277E" [ label=" ",color="blue",arrowhead="dot" ]; +"47" -> "279E" [ label=" ",color="blue",arrowhead="dot" ]; +"48" -> "281E" [ label=" ",color="blue",arrowhead="dot" ]; +"49" -> "283E" [ label=" ",color="blue",arrowhead="dot" ]; +"50" -> "285E" [ label=" ",color="blue",arrowhead="dot" ]; +"51" -> "287E" [ label=" ",color="blue",arrowhead="dot" ]; +"52" -> "289E" [ label=" ",color="blue",arrowhead="dot" ]; +"53" -> "291E" [ label=" ",color="blue",arrowhead="dot" ]; +"54" -> "293E" [ label=" ",color="blue",arrowhead="dot" ]; +"55" -> "745E" [ label=" ",color="blue",arrowhead="dot" ]; +"56" -> "295E" [ label=" ",color="blue",arrowhead="dot" ]; +"57" -> "297E" [ label=" ",color="blue",arrowhead="dot" ]; +"58" -> "299E" [ label=" ",color="blue",arrowhead="dot" ]; +"59" -> "301E" [ label=" ",color="blue",arrowhead="dot" ]; +"59" -> "789E" [ label=" ",color="blue",arrowhead="dot" ]; +"60" -> "303E" [ label=" ",color="blue",arrowhead="dot" ]; +"61" -> "305E" [ label=" ",color="blue",arrowhead="dot" ]; +"62" -> "307E" [ label=" ",color="blue",arrowhead="dot" ]; +"63" -> "309E" [ label=" ",color="blue",arrowhead="dot" ]; +"64" -> "311E" [ label=" ",color="blue",arrowhead="dot" ]; +"65" -> "313E" [ label=" ",color="blue",arrowhead="dot" ]; +"66" -> "315E" [ label=" ",color="blue",arrowhead="dot" ]; +"67" -> "317E" [ label=" ",color="blue",arrowhead="dot" ]; +"68" -> "319E" [ label=" ",color="blue",arrowhead="dot" ]; +"69" -> "746E" [ label=" ",color="blue",arrowhead="dot" ]; +"70" -> "321E" [ label=" ",color="blue",arrowhead="dot" ]; +"71" -> "327E" [ label=" ",color="blue",arrowhead="dot" ]; +"72" -> "329E" [ label=" ",color="blue",arrowhead="dot" ]; +"73" -> "331E" [ label=" ",color="blue",arrowhead="dot" ]; +"74" -> "333E" [ label=" ",color="blue",arrowhead="dot" ]; +"75" -> "335E" [ label=" ",color="blue",arrowhead="dot" ]; +"76" -> "337E" [ label=" ",color="blue",arrowhead="dot" ]; +"77" -> "339E" [ label=" ",color="blue",arrowhead="dot" ]; +"78" -> "341E" [ label=" ",color="blue",arrowhead="dot" ]; +"79" -> "343E" [ label=" ",color="blue",arrowhead="dot" ]; +"80" -> "345E" [ label=" ",color="blue",arrowhead="dot" ]; +"81" -> "347E" [ label=" ",color="blue",arrowhead="dot" ]; +"82" -> "349E" [ label=" ",color="blue",arrowhead="dot" ]; +"83" -> "351E" [ label=" ",color="blue",arrowhead="dot" ]; +"84" -> "353E" [ label=" ",color="blue",arrowhead="dot" ]; +"85" -> "355E" [ label=" ",color="blue",arrowhead="dot" ]; +"85" -> "788E" [ label=" ",color="blue",arrowhead="dot" ]; +"86" -> "357E" [ label=" ",color="blue",arrowhead="dot" ]; +"87" -> "359E" [ label=" ",color="blue",arrowhead="dot" ]; +"88" -> "361E" [ label=" ",color="blue",arrowhead="dot" ]; +"89" -> "363E" [ label=" ",color="blue",arrowhead="dot" ]; +"90" -> "365E" [ label=" ",color="blue",arrowhead="dot" ]; +"91" -> "367E" [ label=" ",color="blue",arrowhead="dot" ]; +"92" -> "369E" [ label=" ",color="blue",arrowhead="dot" ]; +"93" -> "729E" [ label=" ",color="blue",arrowhead="dot" ]; +"94" -> "371E" [ label=" ",color="blue",arrowhead="dot" ]; +"95" -> "373E" [ label=" ",color="blue",arrowhead="dot" ]; +"96" -> "375E" [ label=" ",color="blue",arrowhead="dot" ]; +"97" -> "747E" [ label=" ",color="blue",arrowhead="dot" ]; +"98" -> "377E" [ label=" ",color="blue",arrowhead="dot" ]; +"99" -> "379E" [ label=" ",color="blue",arrowhead="dot" ]; +"100" -> "381E" [ label=" ",color="blue",arrowhead="dot" ]; +"101" -> "383E" [ label=" ",color="blue",arrowhead="dot" ]; +"102" -> "385E" [ label=" ",color="blue",arrowhead="dot" ]; +"103" -> "387E" [ label=" ",color="blue",arrowhead="dot" ]; +"104" -> "389E" [ label=" ",color="blue",arrowhead="dot" ]; +"105" -> "391E" [ label=" ",color="blue",arrowhead="dot" ]; +"106" -> "393E" [ label=" ",color="blue",arrowhead="dot" ]; +"107" -> "395E" [ label=" ",color="blue",arrowhead="dot" ]; +"108" -> "397E" [ label=" ",color="blue",arrowhead="dot" ]; +"109" -> "399E" [ label=" ",color="blue",arrowhead="dot" ]; +"110" -> "401E" [ label=" ",color="blue",arrowhead="dot" ]; +"111" -> "403E" [ label=" ",color="blue",arrowhead="dot" ]; +"112" -> "405E" [ label=" ",color="blue",arrowhead="dot" ]; +"113" -> "407E" [ label=" ",color="blue",arrowhead="dot" ]; +"114" -> "409E" [ label=" ",color="blue",arrowhead="dot" ]; +"115" -> "411E" [ label=" ",color="blue",arrowhead="dot" ]; +"116" -> "413E" [ label=" ",color="blue",arrowhead="dot" ]; +"117" -> "415E" [ label=" ",color="blue",arrowhead="dot" ]; +"118" -> "417E" [ label=" ",color="blue",arrowhead="dot" ]; +"119" -> "419E" [ label=" ",color="blue",arrowhead="dot" ]; +"120" -> "421E" [ label=" ",color="blue",arrowhead="dot" ]; +"121" -> "423E" [ label=" ",color="blue",arrowhead="dot" ]; +"122" -> "748E" [ label=" ",color="blue",arrowhead="dot" ]; +"123" -> "425E" [ label=" ",color="blue",arrowhead="dot" ]; +"124" -> "427E" [ label=" ",color="blue",arrowhead="dot" ]; +"124" -> "786E" [ label=" ",color="blue",arrowhead="dot" ]; +"125" -> "431E" [ label=" ",color="blue",arrowhead="dot" ]; +"126" -> "433E" [ label=" ",color="blue",arrowhead="dot" ]; +"127" -> "435E" [ label=" ",color="blue",arrowhead="dot" ]; +"128" -> "437E" [ label=" ",color="blue",arrowhead="dot" ]; +"129" -> "439E" [ label=" ",color="blue",arrowhead="dot" ]; +"130" -> "441E" [ label=" ",color="blue",arrowhead="dot" ]; +"131" -> "443E" [ label=" ",color="blue",arrowhead="dot" ]; +"132" -> "445E" [ label=" ",color="blue",arrowhead="dot" ]; +"133" -> "749E" [ label=" ",color="blue",arrowhead="dot" ]; +"134" -> "447E" [ label=" ",color="blue",arrowhead="dot" ]; +"135" -> "449E" [ label=" ",color="blue",arrowhead="dot" ]; +"135" -> "769E" [ label=" ",color="blue",arrowhead="dot" ]; +"135" -> "770E" [ label=" ",color="blue",arrowhead="dot" ]; +"136" -> "451E" [ label=" ",color="blue",arrowhead="dot" ]; +"137" -> "453E" [ label=" ",color="blue",arrowhead="dot" ]; +"138" -> "455E" [ label=" ",color="blue",arrowhead="dot" ]; +"139" -> "457E" [ label=" ",color="blue",arrowhead="dot" ]; +"140" -> "459E" [ label=" ",color="blue",arrowhead="dot" ]; +"141" -> "461E" [ label=" ",color="blue",arrowhead="dot" ]; +"142" -> "463E" [ label=" ",color="blue",arrowhead="dot" ]; +"143" -> "465E" [ label=" ",color="blue",arrowhead="dot" ]; +"144" -> "467E" [ label=" ",color="blue",arrowhead="dot" ]; +"145" -> "469E" [ label=" ",color="blue",arrowhead="dot" ]; +"146" -> "471E" [ label=" ",color="blue",arrowhead="dot" ]; +"147" -> "473E" [ label=" ",color="blue",arrowhead="dot" ]; +"148" -> "475E" [ label=" ",color="blue",arrowhead="dot" ]; +"149" -> "477E" [ label=" ",color="blue",arrowhead="dot" ]; +"150" -> "479E" [ label=" ",color="blue",arrowhead="dot" ]; +"151" -> "481E" [ label=" ",color="blue",arrowhead="dot" ]; +"152" -> "483E" [ label=" ",color="blue",arrowhead="dot" ]; +"153" -> "731E" [ label=" ",color="blue",arrowhead="dot" ]; +"154" -> "750E" [ label=" ",color="blue",arrowhead="dot" ]; +"155" -> "485E" [ label=" ",color="blue",arrowhead="dot" ]; +"156" -> "487E" [ label=" ",color="blue",arrowhead="dot" ]; +"157" -> "489E" [ label=" ",color="blue",arrowhead="dot" ]; +"158" -> "491E" [ label=" ",color="blue",arrowhead="dot" ]; +"159" -> "495E" [ label=" ",color="blue",arrowhead="dot" ]; +"160" -> "499E" [ label=" ",color="blue",arrowhead="dot" ]; +"161" -> "501E" [ label=" ",color="blue",arrowhead="dot" ]; +"162" -> "503E" [ label=" ",color="blue",arrowhead="dot" ]; +"163" -> "505E" [ label=" ",color="blue",arrowhead="dot" ]; +"164" -> "507E" [ label=" ",color="blue",arrowhead="dot" ]; +"165" -> "509E" [ label=" ",color="blue",arrowhead="dot" ]; +"166" -> "511E" [ label=" ",color="blue",arrowhead="dot" ]; +"167" -> "513E" [ label=" ",color="blue",arrowhead="dot" ]; +"168" -> "515E" [ label=" ",color="blue",arrowhead="dot" ]; +"169" -> "517E" [ label=" ",color="blue",arrowhead="dot" ]; +"170" -> "519E" [ label=" ",color="blue",arrowhead="dot" ]; +"171" -> "521E" [ label=" ",color="blue",arrowhead="dot" ]; +"172" -> "523E" [ label=" ",color="blue",arrowhead="dot" ]; +"173" -> "525E" [ label=" ",color="blue",arrowhead="dot" ]; +"174" -> "527E" [ label=" ",color="blue",arrowhead="dot" ]; +"175" -> "529E" [ label=" ",color="blue",arrowhead="dot" ]; +"176" -> "531E" [ label=" ",color="blue",arrowhead="dot" ]; +"177" -> "533E" [ label=" ",color="blue",arrowhead="dot" ]; +"178" -> "535E" [ label=" ",color="blue",arrowhead="dot" ]; +"179" -> "537E" [ label=" ",color="blue",arrowhead="dot" ]; +"180" -> "539E" [ label=" ",color="blue",arrowhead="dot" ]; +"181" -> "541E" [ label=" ",color="blue",arrowhead="dot" ]; +"182" -> "543E" [ label=" ",color="blue",arrowhead="dot" ]; +"183" -> "545E" [ label=" ",color="blue",arrowhead="dot" ]; +"184" -> "547E" [ label=" ",color="blue",arrowhead="dot" ]; +"185" -> "549E" [ label=" ",color="blue",arrowhead="dot" ]; +"186" -> "551E" [ label=" ",color="blue",arrowhead="dot" ]; +"187" -> "553E" [ label=" ",color="blue",arrowhead="dot" ]; +"188" -> "555E" [ label=" ",color="blue",arrowhead="dot" ]; +"189" -> "557E" [ label=" ",color="blue",arrowhead="dot" ]; +"190" -> "559E" [ label=" ",color="blue",arrowhead="dot" ]; +"191" -> "561E" [ label=" ",color="blue",arrowhead="dot" ]; +"192" -> "563E" [ label=" ",color="blue",arrowhead="dot" ]; +"193" -> "565E" [ label=" ",color="blue",arrowhead="dot" ]; +"194" -> "567E" [ label=" ",color="blue",arrowhead="dot" ]; +"195" -> "569E" [ label=" ",color="blue",arrowhead="dot" ]; +"196" -> "571E" [ label=" ",color="blue",arrowhead="dot" ]; +"197" -> "573E" [ label=" ",color="blue",arrowhead="dot" ]; +"198" -> "575E" [ label=" ",color="blue",arrowhead="dot" ]; +"199" -> "577E" [ label=" ",color="blue",arrowhead="dot" ]; +"200" -> "579E" [ label=" ",color="blue",arrowhead="dot" ]; +"201" -> "581E" [ label=" ",color="blue",arrowhead="dot" ]; +"202" -> "583E" [ label=" ",color="blue",arrowhead="dot" ]; +"203" -> "585E" [ label=" ",color="blue",arrowhead="dot" ]; +"204" -> "587E" [ label=" ",color="blue",arrowhead="dot" ]; +"205" -> "751E" [ label=" ",color="blue",arrowhead="dot" ]; +"206" -> "589E" [ label=" ",color="blue",arrowhead="dot" ]; +"207" -> "593E" [ label=" ",color="blue",arrowhead="dot" ]; +"208" -> "597E" [ label=" ",color="blue",arrowhead="dot" ]; +"209" -> "599E" [ label=" ",color="blue",arrowhead="dot" ]; +"210" -> "601E" [ label=" ",color="blue",arrowhead="dot" ]; +"211" -> "603E" [ label=" ",color="blue",arrowhead="dot" ]; +"212" -> "605E" [ label=" ",color="blue",arrowhead="dot" ]; +"213" -> "607E" [ label=" ",color="blue",arrowhead="dot" ]; +"214" -> "609E" [ label=" ",color="blue",arrowhead="dot" ]; +"215" -> "611E" [ label=" ",color="blue",arrowhead="dot" ]; +"216" -> "613E" [ label=" ",color="blue",arrowhead="dot" ]; +"217" -> "615E" [ label=" ",color="blue",arrowhead="dot" ]; +"218" -> "617E" [ label=" ",color="blue",arrowhead="dot" ]; +"219" -> "619E" [ label=" ",color="blue",arrowhead="dot" ]; +"220" -> "621E" [ label=" ",color="blue",arrowhead="dot" ]; +"221" -> "623E" [ label=" ",color="blue",arrowhead="dot" ]; +"222" -> "752E" [ label=" ",color="blue",arrowhead="dot" ]; +"223" -> "625E" [ label=" ",color="blue",arrowhead="dot" ]; +"224" -> "627E" [ label=" ",color="blue",arrowhead="dot" ]; +"225" -> "629E" [ label=" ",color="blue",arrowhead="dot" ]; +"226" -> "631E" [ label=" ",color="blue",arrowhead="dot" ]; +"227" -> "633E" [ label=" ",color="blue",arrowhead="dot" ]; +"228" -> "635E" [ label=" ",color="blue",arrowhead="dot" ]; +"229" -> "637E" [ label=" ",color="blue",arrowhead="dot" ]; +"230" -> "639E" [ label=" ",color="blue",arrowhead="dot" ]; +"231" -> "641E" [ label=" ",color="blue",arrowhead="dot" ]; +"232" -> "643E" [ label=" ",color="blue",arrowhead="dot" ]; +"233" -> "645E" [ label=" ",color="blue",arrowhead="dot" ]; +"234" -> "647E" [ label=" ",color="blue",arrowhead="dot" ]; +"235" -> "649E" [ label=" ",color="blue",arrowhead="dot" ]; +"236" -> "651E" [ label=" ",color="blue",arrowhead="dot" ]; +"237" -> "653E" [ label=" ",color="blue",arrowhead="dot" ]; +"238" -> "655E" [ label=" ",color="blue",arrowhead="dot" ]; +"239" -> "657E" [ label=" ",color="blue",arrowhead="dot" ]; +"240" -> "659E" [ label=" ",color="blue",arrowhead="dot" ]; +"241" -> "661E" [ label=" ",color="blue",arrowhead="dot" ]; +"242" -> "663E" [ label=" ",color="blue",arrowhead="dot" ]; +"243" -> "665E" [ label=" ",color="blue",arrowhead="dot" ]; +"244" -> "667E" [ label=" ",color="blue",arrowhead="dot" ]; +"245" -> "669E" [ label=" ",color="blue",arrowhead="dot" ]; +"246" -> "671E" [ label=" ",color="blue",arrowhead="dot" ]; +"247" -> "673E" [ label=" ",color="blue",arrowhead="dot" ]; +"248" -> "675E" [ label=" ",color="blue",arrowhead="dot" ]; +"249" -> "679E" [ label=" ",color="blue",arrowhead="dot" ]; +"250" -> "753E" [ label=" ",color="blue",arrowhead="dot" ]; +"251" -> "681E" [ label=" ",color="blue",arrowhead="dot" ]; +"252" -> "683E" [ label=" ",color="blue",arrowhead="dot" ]; +"253" -> "685E" [ label=" ",color="blue",arrowhead="dot" ]; +"254" -> "687E" [ label=" ",color="blue",arrowhead="dot" ]; +"255" -> "689E" [ label=" ",color="blue",arrowhead="dot" ]; +"256" -> "691E" [ label=" ",color="blue",arrowhead="dot" ]; +"257" -> "693E" [ label=" ",color="blue",arrowhead="dot" ]; +"258" -> "695E" [ label=" ",color="blue",arrowhead="dot" ]; +"259" -> "697E" [ label=" ",color="blue",arrowhead="dot" ]; +"260" -> "699E" [ label=" ",color="blue",arrowhead="dot" ]; +"261" -> "703E" [ label=" ",color="blue",arrowhead="dot" ]; +"262" -> "705E" [ label=" ",color="blue",arrowhead="dot" ]; +"264" -> "709E" [ label=" ",color="blue",arrowhead="dot" ]; +"265" -> "711E" [ label=" ",color="blue",arrowhead="dot" ]; +"266" -> "713E" [ label=" ",color="blue",arrowhead="dot" ]; +"267" -> "715E" [ label=" ",color="blue",arrowhead="dot" ]; +"268" -> "717E" [ label=" ",color="blue",arrowhead="dot" ]; +"269" -> "719E" [ label=" ",color="blue",arrowhead="dot" ]; +"270" -> "721E" [ label=" ",color="blue",arrowhead="dot" ]; +"272" -> "34E" [ label=" ",color="blue",arrowhead="dot" ]; +"272" -> "252E" [ label=" ",color="blue",arrowhead="dot" ]; +"272" -> "436E" [ label=" ",color="blue",arrowhead="dot" ]; +"274" -> "59E" [ label=" ",color="blue",arrowhead="dot" ]; +"274" -> "500E" [ label=" ",color="blue",arrowhead="dot" ]; +"274" -> "720E" [ label=" ",color="blue",arrowhead="dot" ]; +"275" -> "98E" [ label=" ",color="blue",arrowhead="dot" ]; +"278" -> "35E" [ label=" ",color="blue",arrowhead="dot" ]; +"278" -> "488E" [ label=" ",color="blue",arrowhead="dot" ]; +"278" -> "598E" [ label=" ",color="blue",arrowhead="dot" ]; +"278" -> "604E" [ label=" ",color="blue",arrowhead="dot" ]; +"278" -> "628E" [ label=" ",color="blue",arrowhead="dot" ]; +"279" -> "99E" [ label=" ",color="blue",arrowhead="dot" ]; +"280" -> "242E" [ label=" ",color="blue",arrowhead="dot" ]; +"280" -> "270E" [ label=" ",color="blue",arrowhead="dot" ]; +"280" -> "272E" [ label=" ",color="blue",arrowhead="dot" ]; +"280" -> "284E" [ label=" ",color="blue",arrowhead="dot" ]; +"280" -> "286E" [ label=" ",color="blue",arrowhead="dot" ]; +"280" -> "288E" [ label=" ",color="blue",arrowhead="dot" ]; +"280" -> "586E" [ label=" ",color="blue",arrowhead="dot" ]; +"280" -> "763E" [ label=" ",color="blue",arrowhead="dot" ]; +"281" -> "45E" [ label=" ",color="blue",arrowhead="dot" ]; +"281" -> "470E" [ label=" ",color="blue",arrowhead="dot" ]; +"281" -> "670E" [ label=" ",color="blue",arrowhead="dot" ]; +"281" -> "722E" [ label=" ",color="blue",arrowhead="dot" ]; +"282" -> "103E" [ label=" ",color="blue",arrowhead="dot" ]; +"283" -> "165E" [ label=" ",color="blue",arrowhead="dot" ]; +"284" -> "39E" [ label=" ",color="blue",arrowhead="dot" ]; +"284" -> "224E" [ label=" ",color="blue",arrowhead="dot" ]; +"284" -> "268E" [ label=" ",color="blue",arrowhead="dot" ]; +"284" -> "632E" [ label=" ",color="blue",arrowhead="dot" ]; +"284" -> "710E" [ label=" ",color="blue",arrowhead="dot" ]; +"285" -> "53E" [ label=" ",color="blue",arrowhead="dot" ]; +"286" -> "38E" [ label=" ",color="blue",arrowhead="dot" ]; +"286" -> "166E" [ label=" ",color="blue",arrowhead="dot" ]; +"288" -> "40E" [ label=" ",color="blue",arrowhead="dot" ]; +"288" -> "218E" [ label=" ",color="blue",arrowhead="dot" ]; +"288" -> "244E" [ label=" ",color="blue",arrowhead="dot" ]; +"288" -> "246E" [ label=" ",color="blue",arrowhead="dot" ]; +"288" -> "258E" [ label=" ",color="blue",arrowhead="dot" ]; +"288" -> "290E" [ label=" ",color="blue",arrowhead="dot" ]; +"288" -> "292E" [ label=" ",color="blue",arrowhead="dot" ]; +"288" -> "308E" [ label=" ",color="blue",arrowhead="dot" ]; +"288" -> "318E" [ label=" ",color="blue",arrowhead="dot" ]; +"288" -> "388E" [ label=" ",color="blue",arrowhead="dot" ]; +"288" -> "472E" [ label=" ",color="blue",arrowhead="dot" ]; +"288" -> "478E" [ label=" ",color="blue",arrowhead="dot" ]; +"288" -> "566E" [ label=" ",color="blue",arrowhead="dot" ]; +"288" -> "570E" [ label=" ",color="blue",arrowhead="dot" ]; +"288" -> "574E" [ label=" ",color="blue",arrowhead="dot" ]; +"288" -> "608E" [ label=" ",color="blue",arrowhead="dot" ]; +"288" -> "614E" [ label=" ",color="blue",arrowhead="dot" ]; +"288" -> "658E" [ label=" ",color="blue",arrowhead="dot" ]; +"288" -> "664E" [ label=" ",color="blue",arrowhead="dot" ]; +"288" -> "682E" [ label=" ",color="blue",arrowhead="dot" ]; +"289" -> "41E" [ label=" ",color="blue",arrowhead="dot" ]; +"289" -> "636E" [ label=" ",color="blue",arrowhead="dot" ]; +"289" -> "642E" [ label=" ",color="blue",arrowhead="dot" ]; +"289" -> "690E" [ label=" ",color="blue",arrowhead="dot" ]; +"289" -> "700E" [ label=" ",color="blue",arrowhead="dot" ]; +"290" -> "56E" [ label=" ",color="blue",arrowhead="dot" ]; +"290" -> "264E" [ label=" ",color="blue",arrowhead="dot" ]; +"290" -> "510E" [ label=" ",color="blue",arrowhead="dot" ]; +"290" -> "718E" [ label=" ",color="blue",arrowhead="dot" ]; +"291" -> "66E" [ label=" ",color="blue",arrowhead="dot" ]; +"291" -> "76E" [ label=" ",color="blue",arrowhead="dot" ]; +"291" -> "610E" [ label=" ",color="blue",arrowhead="dot" ]; +"292" -> "73E" [ label=" ",color="blue",arrowhead="dot" ]; +"293" -> "49E" [ label=" ",color="blue",arrowhead="dot" ]; +"293" -> "214E" [ label=" ",color="blue",arrowhead="dot" ]; +"293" -> "216E" [ label=" ",color="blue",arrowhead="dot" ]; +"293" -> "236E" [ label=" ",color="blue",arrowhead="dot" ]; +"293" -> "278E" [ label=" ",color="blue",arrowhead="dot" ]; +"293" -> "358E" [ label=" ",color="blue",arrowhead="dot" ]; +"293" -> "398E" [ label=" ",color="blue",arrowhead="dot" ]; +"293" -> "400E" [ label=" ",color="blue",arrowhead="dot" ]; +"293" -> "402E" [ label=" ",color="blue",arrowhead="dot" ]; +"293" -> "404E" [ label=" ",color="blue",arrowhead="dot" ]; +"293" -> "406E" [ label=" ",color="blue",arrowhead="dot" ]; +"293" -> "408E" [ label=" ",color="blue",arrowhead="dot" ]; +"293" -> "412E" [ label=" ",color="blue",arrowhead="dot" ]; +"293" -> "438E" [ label=" ",color="blue",arrowhead="dot" ]; +"293" -> "448E" [ label=" ",color="blue",arrowhead="dot" ]; +"293" -> "476E" [ label=" ",color="blue",arrowhead="dot" ]; +"293" -> "504E" [ label=" ",color="blue",arrowhead="dot" ]; +"293" -> "552E" [ label=" ",color="blue",arrowhead="dot" ]; +"293" -> "634E" [ label=" ",color="blue",arrowhead="dot" ]; +"293" -> "768E" [ label=" ",color="blue",arrowhead="dot" ]; +"295" -> "44E" [ label=" ",color="blue",arrowhead="dot" ]; +"295" -> "92E" [ label=" ",color="blue",arrowhead="dot" ]; +"295" -> "250E" [ label=" ",color="blue",arrowhead="dot" ]; +"295" -> "316E" [ label=" ",color="blue",arrowhead="dot" ]; +"295" -> "380E" [ label=" ",color="blue",arrowhead="dot" ]; +"295" -> "424E" [ label=" ",color="blue",arrowhead="dot" ]; +"295" -> "442E" [ label=" ",color="blue",arrowhead="dot" ]; +"295" -> "446E" [ label=" ",color="blue",arrowhead="dot" ]; +"295" -> "454E" [ label=" ",color="blue",arrowhead="dot" ]; +"295" -> "460E" [ label=" ",color="blue",arrowhead="dot" ]; +"295" -> "462E" [ label=" ",color="blue",arrowhead="dot" ]; +"295" -> "648E" [ label=" ",color="blue",arrowhead="dot" ]; +"295" -> "656E" [ label=" ",color="blue",arrowhead="dot" ]; +"295" -> "666E" [ label=" ",color="blue",arrowhead="dot" ]; +"295" -> "692E" [ label=" ",color="blue",arrowhead="dot" ]; +"295" -> "712E" [ label=" ",color="blue",arrowhead="dot" ]; +"296" -> "47E" [ label=" ",color="blue",arrowhead="dot" ]; +"296" -> "330E" [ label=" ",color="blue",arrowhead="dot" ]; +"296" -> "514E" [ label=" ",color="blue",arrowhead="dot" ]; +"296" -> "516E" [ label=" ",color="blue",arrowhead="dot" ]; +"296" -> "518E" [ label=" ",color="blue",arrowhead="dot" ]; +"296" -> "520E" [ label=" ",color="blue",arrowhead="dot" ]; +"296" -> "522E" [ label=" ",color="blue",arrowhead="dot" ]; +"296" -> "526E" [ label=" ",color="blue",arrowhead="dot" ]; +"296" -> "528E" [ label=" ",color="blue",arrowhead="dot" ]; +"296" -> "530E" [ label=" ",color="blue",arrowhead="dot" ]; +"296" -> "532E" [ label=" ",color="blue",arrowhead="dot" ]; +"296" -> "534E" [ label=" ",color="blue",arrowhead="dot" ]; +"296" -> "536E" [ label=" ",color="blue",arrowhead="dot" ]; +"296" -> "538E" [ label=" ",color="blue",arrowhead="dot" ]; +"296" -> "540E" [ label=" ",color="blue",arrowhead="dot" ]; +"296" -> "542E" [ label=" ",color="blue",arrowhead="dot" ]; +"296" -> "544E" [ label=" ",color="blue",arrowhead="dot" ]; +"297" -> "46E" [ label=" ",color="blue",arrowhead="dot" ]; +"297" -> "93E" [ label=" ",color="blue",arrowhead="dot" ]; +"297" -> "206E" [ label=" ",color="blue",arrowhead="dot" ]; +"297" -> "426E" [ label=" ",color="blue",arrowhead="dot" ]; +"297" -> "550E" [ label=" ",color="blue",arrowhead="dot" ]; +"297" -> "706E" [ label=" ",color="blue",arrowhead="dot" ]; +"298" -> "36E" [ label=" ",color="blue",arrowhead="dot" ]; +"298" -> "95E" [ label=" ",color="blue",arrowhead="dot" ]; +"298" -> "364E" [ label=" ",color="blue",arrowhead="dot" ]; +"298" -> "394E" [ label=" ",color="blue",arrowhead="dot" ]; +"298" -> "420E" [ label=" ",color="blue",arrowhead="dot" ]; +"298" -> "456E" [ label=" ",color="blue",arrowhead="dot" ]; +"298" -> "624E" [ label=" ",color="blue",arrowhead="dot" ]; +"299" -> "48E" [ label=" ",color="blue",arrowhead="dot" ]; +"299" -> "168E" [ label=" ",color="blue",arrowhead="dot" ]; +"299" -> "260E" [ label=" ",color="blue",arrowhead="dot" ]; +"299" -> "282E" [ label=" ",color="blue",arrowhead="dot" ]; +"299" -> "554E" [ label=" ",color="blue",arrowhead="dot" ]; +"299" -> "590E" [ label=" ",color="blue",arrowhead="dot" ]; +"299" -> "767E" [ label=" ",color="blue",arrowhead="dot" ]; +"300" -> "62E" [ label=" ",color="blue",arrowhead="dot" ]; +"300" -> "190E" [ label=" ",color="blue",arrowhead="dot" ]; +"300" -> "226E" [ label=" ",color="blue",arrowhead="dot" ]; +"300" -> "238E" [ label=" ",color="blue",arrowhead="dot" ]; +"300" -> "254E" [ label=" ",color="blue",arrowhead="dot" ]; +"300" -> "256E" [ label=" ",color="blue",arrowhead="dot" ]; +"300" -> "262E" [ label=" ",color="blue",arrowhead="dot" ]; +"300" -> "266E" [ label=" ",color="blue",arrowhead="dot" ]; +"300" -> "274E" [ label=" ",color="blue",arrowhead="dot" ]; +"300" -> "276E" [ label=" ",color="blue",arrowhead="dot" ]; +"300" -> "294E" [ label=" ",color="blue",arrowhead="dot" ]; +"300" -> "296E" [ label=" ",color="blue",arrowhead="dot" ]; +"300" -> "310E" [ label=" ",color="blue",arrowhead="dot" ]; +"300" -> "320E" [ label=" ",color="blue",arrowhead="dot" ]; +"300" -> "322E" [ label=" ",color="blue",arrowhead="dot" ]; +"300" -> "332E" [ label=" ",color="blue",arrowhead="dot" ]; +"300" -> "340E" [ label=" ",color="blue",arrowhead="dot" ]; +"300" -> "344E" [ label=" ",color="blue",arrowhead="dot" ]; +"300" -> "346E" [ label=" ",color="blue",arrowhead="dot" ]; +"300" -> "348E" [ label=" ",color="blue",arrowhead="dot" ]; +"300" -> "374E" [ label=" ",color="blue",arrowhead="dot" ]; +"300" -> "378E" [ label=" ",color="blue",arrowhead="dot" ]; +"300" -> "452E" [ label=" ",color="blue",arrowhead="dot" ]; +"300" -> "508E" [ label=" ",color="blue",arrowhead="dot" ]; +"300" -> "524E" [ label=" ",color="blue",arrowhead="dot" ]; +"300" -> "612E" [ label=" ",color="blue",arrowhead="dot" ]; +"300" -> "626E" [ label=" ",color="blue",arrowhead="dot" ]; +"300" -> "638E" [ label=" ",color="blue",arrowhead="dot" ]; +"300" -> "644E" [ label=" ",color="blue",arrowhead="dot" ]; +"300" -> "654E" [ label=" ",color="blue",arrowhead="dot" ]; +"300" -> "672E" [ label=" ",color="blue",arrowhead="dot" ]; +"302" -> "797E" [ label=" ",color="blue",arrowhead="dot" ]; +"302" -> "798E" [ label=" ",color="blue",arrowhead="dot" ]; +"303" -> "52E" [ label=" ",color="blue",arrowhead="dot" ]; +"303" -> "650E" [ label=" ",color="blue",arrowhead="dot" ]; +"304" -> "50E" [ label=" ",color="blue",arrowhead="dot" ]; +"304" -> "640E" [ label=" ",color="blue",arrowhead="dot" ]; +"304" -> "646E" [ label=" ",color="blue",arrowhead="dot" ]; +"304" -> "652E" [ label=" ",color="blue",arrowhead="dot" ]; +"306" -> "55E" [ label=" ",color="blue",arrowhead="dot" ]; +"306" -> "220E" [ label=" ",color="blue",arrowhead="dot" ]; +"306" -> "338E" [ label=" ",color="blue",arrowhead="dot" ]; +"306" -> "368E" [ label=" ",color="blue",arrowhead="dot" ]; +"306" -> "486E" [ label=" ",color="blue",arrowhead="dot" ]; +"306" -> "490E" [ label=" ",color="blue",arrowhead="dot" ]; +"306" -> "562E" [ label=" ",color="blue",arrowhead="dot" ]; +"306" -> "564E" [ label=" ",color="blue",arrowhead="dot" ]; +"306" -> "600E" [ label=" ",color="blue",arrowhead="dot" ]; +"306" -> "668E" [ label=" ",color="blue",arrowhead="dot" ]; +"306" -> "674E" [ label=" ",color="blue",arrowhead="dot" ]; +"306" -> "698E" [ label=" ",color="blue",arrowhead="dot" ]; +"307" -> "107E" [ label=" ",color="blue",arrowhead="dot" ]; +"308" -> "108E" [ label=" ",color="blue",arrowhead="dot" ]; +"309" -> "109E" [ label=" ",color="blue",arrowhead="dot" ]; +"310" -> "110E" [ label=" ",color="blue",arrowhead="dot" ]; +"311" -> "58E" [ label=" ",color="blue",arrowhead="dot" ]; +"311" -> "234E" [ label=" ",color="blue",arrowhead="dot" ]; +"311" -> "300E" [ label=" ",color="blue",arrowhead="dot" ]; +"311" -> "306E" [ label=" ",color="blue",arrowhead="dot" ]; +"311" -> "314E" [ label=" ",color="blue",arrowhead="dot" ]; +"311" -> "342E" [ label=" ",color="blue",arrowhead="dot" ]; +"311" -> "354E" [ label=" ",color="blue",arrowhead="dot" ]; +"311" -> "370E" [ label=" ",color="blue",arrowhead="dot" ]; +"311" -> "382E" [ label=" ",color="blue",arrowhead="dot" ]; +"311" -> "422E" [ label=" ",color="blue",arrowhead="dot" ]; +"311" -> "444E" [ label=" ",color="blue",arrowhead="dot" ]; +"311" -> "582E" [ label=" ",color="blue",arrowhead="dot" ]; +"311" -> "620E" [ label=" ",color="blue",arrowhead="dot" ]; +"311" -> "630E" [ label=" ",color="blue",arrowhead="dot" ]; +"311" -> "684E" [ label=" ",color="blue",arrowhead="dot" ]; +"311" -> "696E" [ label=" ",color="blue",arrowhead="dot" ]; +"311" -> "801E" [ label=" ",color="blue",arrowhead="dot" ]; +"312" -> "42E" [ label=" ",color="blue",arrowhead="dot" ]; +"312" -> "192E" [ label=" ",color="blue",arrowhead="dot" ]; +"312" -> "194E" [ label=" ",color="blue",arrowhead="dot" ]; +"312" -> "196E" [ label=" ",color="blue",arrowhead="dot" ]; +"312" -> "198E" [ label=" ",color="blue",arrowhead="dot" ]; +"312" -> "200E" [ label=" ",color="blue",arrowhead="dot" ]; +"312" -> "202E" [ label=" ",color="blue",arrowhead="dot" ]; +"312" -> "204E" [ label=" ",color="blue",arrowhead="dot" ]; +"312" -> "312E" [ label=" ",color="blue",arrowhead="dot" ]; +"312" -> "336E" [ label=" ",color="blue",arrowhead="dot" ]; +"312" -> "376E" [ label=" ",color="blue",arrowhead="dot" ]; +"312" -> "384E" [ label=" ",color="blue",arrowhead="dot" ]; +"312" -> "386E" [ label=" ",color="blue",arrowhead="dot" ]; +"312" -> "428E" [ label=" ",color="blue",arrowhead="dot" ]; +"312" -> "474E" [ label=" ",color="blue",arrowhead="dot" ]; +"312" -> "484E" [ label=" ",color="blue",arrowhead="dot" ]; +"312" -> "546E" [ label=" ",color="blue",arrowhead="dot" ]; +"312" -> "548E" [ label=" ",color="blue",arrowhead="dot" ]; +"314" -> "113E" [ label=" ",color="blue",arrowhead="dot" ]; +"315" -> "43E" [ label=" ",color="blue",arrowhead="dot" ]; +"315" -> "240E" [ label=" ",color="blue",arrowhead="dot" ]; +"315" -> "298E" [ label=" ",color="blue",arrowhead="dot" ]; +"315" -> "334E" [ label=" ",color="blue",arrowhead="dot" ]; +"315" -> "360E" [ label=" ",color="blue",arrowhead="dot" ]; +"315" -> "390E" [ label=" ",color="blue",arrowhead="dot" ]; +"315" -> "418E" [ label=" ",color="blue",arrowhead="dot" ]; +"315" -> "492E" [ label=" ",color="blue",arrowhead="dot" ]; +"315" -> "502E" [ label=" ",color="blue",arrowhead="dot" ]; +"315" -> "584E" [ label=" ",color="blue",arrowhead="dot" ]; +"315" -> "588E" [ label=" ",color="blue",arrowhead="dot" ]; +"315" -> "602E" [ label=" ",color="blue",arrowhead="dot" ]; +"315" -> "606E" [ label=" ",color="blue",arrowhead="dot" ]; +"315" -> "662E" [ label=" ",color="blue",arrowhead="dot" ]; +"316" -> "51E" [ label=" ",color="blue",arrowhead="dot" ]; +"317" -> "116E" [ label=" ",color="blue",arrowhead="dot" ]; +"318" -> "74E" [ label=" ",color="blue",arrowhead="dot" ]; +"319" -> "57E" [ label=" ",color="blue",arrowhead="dot" ]; +"319" -> "94E" [ label=" ",color="blue",arrowhead="dot" ]; +"319" -> "350E" [ label=" ",color="blue",arrowhead="dot" ]; +"319" -> "440E" [ label=" ",color="blue",arrowhead="dot" ]; +"319" -> "466E" [ label=" ",color="blue",arrowhead="dot" ]; +"319" -> "676E" [ label=" ",color="blue",arrowhead="dot" ]; +"320" -> "60E" [ label=" ",color="blue",arrowhead="dot" ]; +"320" -> "366E" [ label=" ",color="blue",arrowhead="dot" ]; +"320" -> "434E" [ label=" ",color="blue",arrowhead="dot" ]; +"320" -> "458E" [ label=" ",color="blue",arrowhead="dot" ]; +"320" -> "618E" [ label=" ",color="blue",arrowhead="dot" ]; +"321" -> "72E" [ label=" ",color="blue",arrowhead="dot" ]; +"321" -> "362E" [ label=" ",color="blue",arrowhead="dot" ]; +"321" -> "372E" [ label=" ",color="blue",arrowhead="dot" ]; +"321" -> "572E" [ label=" ",color="blue",arrowhead="dot" ]; +"322" -> "54E" [ label=" ",color="blue",arrowhead="dot" ]; +"322" -> "222E" [ label=" ",color="blue",arrowhead="dot" ]; +"322" -> "302E" [ label=" ",color="blue",arrowhead="dot" ]; +"322" -> "556E" [ label=" ",color="blue",arrowhead="dot" ]; +"322" -> "558E" [ label=" ",color="blue",arrowhead="dot" ]; +"323" -> "37E" [ label=" ",color="blue",arrowhead="dot" ]; +"323" -> "208E" [ label=" ",color="blue",arrowhead="dot" ]; +"323" -> "210E" [ label=" ",color="blue",arrowhead="dot" ]; +"323" -> "352E" [ label=" ",color="blue",arrowhead="dot" ]; +"323" -> "450E" [ label=" ",color="blue",arrowhead="dot" ]; +"323" -> "568E" [ label=" ",color="blue",arrowhead="dot" ]; +"323" -> "576E" [ label=" ",color="blue",arrowhead="dot" ]; +"323" -> "686E" [ label=" ",color="blue",arrowhead="dot" ]; +"324" -> "228E" [ label=" ",color="blue",arrowhead="dot" ]; +"324" -> "248E" [ label=" ",color="blue",arrowhead="dot" ]; +"324" -> "304E" [ label=" ",color="blue",arrowhead="dot" ]; +"324" -> "468E" [ label=" ",color="blue",arrowhead="dot" ]; +"324" -> "578E" [ label=" ",color="blue",arrowhead="dot" ]; +"324" -> "660E" [ label=" ",color="blue",arrowhead="dot" ]; +"324" -> "688E" [ label=" ",color="blue",arrowhead="dot" ]; +"324" -> "694E" [ label=" ",color="blue",arrowhead="dot" ]; +"324" -> "714E" [ label=" ",color="blue",arrowhead="dot" ]; +"324" -> "766E" [ label=" ",color="blue",arrowhead="dot" ]; +"325" -> "97E" [ label=" ",color="blue",arrowhead="dot" ]; +"325" -> "506E" [ label=" ",color="blue",arrowhead="dot" ]; +"326" -> "61E" [ label=" ",color="blue",arrowhead="dot" ]; +"326" -> "175E" [ label=" ",color="blue",arrowhead="dot" ]; +"326" -> "482E" [ label=" ",color="blue",arrowhead="dot" ]; +"328" -> "75E" [ label=" ",color="blue",arrowhead="dot" ]; +"328" -> "580E" [ label=" ",color="blue",arrowhead="dot" ]; +"329" -> "96E" [ label=" ",color="blue",arrowhead="dot" ]; +"330" -> "100E" [ label=" ",color="blue",arrowhead="dot" ]; +"330" -> "170E" [ label=" ",color="blue",arrowhead="dot" ]; +"333" -> "63E" [ label=" ",color="blue",arrowhead="dot" ]; +"333" -> "67E" [ label=" ",color="blue",arrowhead="dot" ]; +"333" -> "68E" [ label=" ",color="blue",arrowhead="dot" ]; +"333" -> "69E" [ label=" ",color="blue",arrowhead="dot" ]; +"333" -> "70E" [ label=" ",color="blue",arrowhead="dot" ]; +"333" -> "71E" [ label=" ",color="blue",arrowhead="dot" ]; +"333" -> "802E" [ label=" ",color="blue",arrowhead="dot" ]; +"333" -> "793E" [ label=" ",color="blue",arrowhead="dot" ]; +"334" -> "64E" [ label=" ",color="blue",arrowhead="dot" ]; +"334" -> "81E" [ label=" ",color="blue",arrowhead="dot" ]; +"334" -> "82E" [ label=" ",color="blue",arrowhead="dot" ]; +"334" -> "83E" [ label=" ",color="blue",arrowhead="dot" ]; +"334" -> "84E" [ label=" ",color="blue",arrowhead="dot" ]; +"334" -> "85E" [ label=" ",color="blue",arrowhead="dot" ]; +"334" -> "86E" [ label=" ",color="blue",arrowhead="dot" ]; +"334" -> "87E" [ label=" ",color="blue",arrowhead="dot" ]; +"334" -> "88E" [ label=" ",color="blue",arrowhead="dot" ]; +"334" -> "89E" [ label=" ",color="blue",arrowhead="dot" ]; +"336" -> "1E" [ label=" ",color="blue",arrowhead="dot" ]; +"336" -> "2E" [ label=" ",color="blue",arrowhead="dot" ]; +"336" -> "3E" [ label=" ",color="blue",arrowhead="dot" ]; +"336" -> "4E" [ label=" ",color="blue",arrowhead="dot" ]; +"336" -> "5E" [ label=" ",color="blue",arrowhead="dot" ]; +"336" -> "6E" [ label=" ",color="blue",arrowhead="dot" ]; +"336" -> "7E" [ label=" ",color="blue",arrowhead="dot" ]; +"336" -> "8E" [ label=" ",color="blue",arrowhead="dot" ]; +"336" -> "9E" [ label=" ",color="blue",arrowhead="dot" ]; +"336" -> "10E" [ label=" ",color="blue",arrowhead="dot" ]; +"336" -> "11E" [ label=" ",color="blue",arrowhead="dot" ]; +"336" -> "12E" [ label=" ",color="blue",arrowhead="dot" ]; +"336" -> "13E" [ label=" ",color="blue",arrowhead="dot" ]; +"336" -> "14E" [ label=" ",color="blue",arrowhead="dot" ]; +"336" -> "15E" [ label=" ",color="blue",arrowhead="dot" ]; +"336" -> "16E" [ label=" ",color="blue",arrowhead="dot" ]; +"336" -> "17E" [ label=" ",color="blue",arrowhead="dot" ]; +"336" -> "18E" [ label=" ",color="blue",arrowhead="dot" ]; +"336" -> "19E" [ label=" ",color="blue",arrowhead="dot" ]; +"336" -> "20E" [ label=" ",color="blue",arrowhead="dot" ]; +"336" -> "21E" [ label=" ",color="blue",arrowhead="dot" ]; +"336" -> "22E" [ label=" ",color="blue",arrowhead="dot" ]; +"336" -> "23E" [ label=" ",color="blue",arrowhead="dot" ]; +"336" -> "24E" [ label=" ",color="blue",arrowhead="dot" ]; +"336" -> "25E" [ label=" ",color="blue",arrowhead="dot" ]; +"336" -> "26E" [ label=" ",color="blue",arrowhead="dot" ]; +"336" -> "27E" [ label=" ",color="blue",arrowhead="dot" ]; +"336" -> "28E" [ label=" ",color="blue",arrowhead="dot" ]; +"336" -> "29E" [ label=" ",color="blue",arrowhead="dot" ]; +"336" -> "30E" [ label=" ",color="blue",arrowhead="dot" ]; +"336" -> "31E" [ label=" ",color="blue",arrowhead="dot" ]; +"336" -> "65E" [ label=" ",color="blue",arrowhead="dot" ]; +"336" -> "119E" [ label=" ",color="blue",arrowhead="dot" ]; +"336" -> "150E" [ label=" ",color="blue",arrowhead="dot" ]; +"336" -> "176E" [ label=" ",color="blue",arrowhead="dot" ]; +"336" -> "743E" [ label=" ",color="blue",arrowhead="dot" ]; +"336" -> "744E" [ label=" ",color="blue",arrowhead="dot" ]; +"336" -> "764E" [ label=" ",color="blue",arrowhead="dot" ]; +"337" -> "120E" [ label=" ",color="blue",arrowhead="dot" ]; +"337" -> "121E" [ label=" ",color="blue",arrowhead="dot" ]; +"337" -> "122E" [ label=" ",color="blue",arrowhead="dot" ]; +"337" -> "123E" [ label=" ",color="blue",arrowhead="dot" ]; +"337" -> "124E" [ label=" ",color="blue",arrowhead="dot" ]; +"337" -> "125E" [ label=" ",color="blue",arrowhead="dot" ]; +"337" -> "126E" [ label=" ",color="blue",arrowhead="dot" ]; +"337" -> "127E" [ label=" ",color="blue",arrowhead="dot" ]; +"337" -> "128E" [ label=" ",color="blue",arrowhead="dot" ]; +"337" -> "129E" [ label=" ",color="blue",arrowhead="dot" ]; +"337" -> "130E" [ label=" ",color="blue",arrowhead="dot" ]; +"337" -> "131E" [ label=" ",color="blue",arrowhead="dot" ]; +"337" -> "132E" [ label=" ",color="blue",arrowhead="dot" ]; +"337" -> "133E" [ label=" ",color="blue",arrowhead="dot" ]; +"337" -> "134E" [ label=" ",color="blue",arrowhead="dot" ]; +"337" -> "135E" [ label=" ",color="blue",arrowhead="dot" ]; +"337" -> "136E" [ label=" ",color="blue",arrowhead="dot" ]; +"337" -> "137E" [ label=" ",color="blue",arrowhead="dot" ]; +"337" -> "138E" [ label=" ",color="blue",arrowhead="dot" ]; +"339" -> "151E" [ label=" ",color="blue",arrowhead="dot" ]; +"339" -> "153E" [ label=" ",color="blue",arrowhead="dot" ]; +"339" -> "154E" [ label=" ",color="blue",arrowhead="dot" ]; +"339" -> "155E" [ label=" ",color="blue",arrowhead="dot" ]; +"339" -> "156E" [ label=" ",color="blue",arrowhead="dot" ]; +"339" -> "157E" [ label=" ",color="blue",arrowhead="dot" ]; +"339" -> "158E" [ label=" ",color="blue",arrowhead="dot" ]; +"339" -> "159E" [ label=" ",color="blue",arrowhead="dot" ]; +"339" -> "160E" [ label=" ",color="blue",arrowhead="dot" ]; +"339" -> "161E" [ label=" ",color="blue",arrowhead="dot" ]; +"339" -> "162E" [ label=" ",color="blue",arrowhead="dot" ]; +"347" -> "139E" [ label=" ",color="blue",arrowhead="dot" ]; +"347" -> "795E" [ label=" ",color="blue",arrowhead="dot" ]; +"348" -> "799E" [ label=" ",color="blue",arrowhead="dot" ]; +"348" -> "800E" [ label=" ",color="blue",arrowhead="dot" ]; +"349" -> "141E" [ label=" ",color="blue",arrowhead="dot" ]; +"350" -> "142E" [ label=" ",color="blue",arrowhead="dot" ]; +"350" -> "678E" [ label=" ",color="blue",arrowhead="dot" ]; +"351" -> "143E" [ label=" ",color="blue",arrowhead="dot" ]; +"351" -> "232E" [ label=" ",color="blue",arrowhead="dot" ]; +"351" -> "680E" [ label=" ",color="blue",arrowhead="dot" ]; +"351" -> "704E" [ label=" ",color="blue",arrowhead="dot" ]; +"352" -> "144E" [ label=" ",color="blue",arrowhead="dot" ]; +"352" -> "432E" [ label=" ",color="blue",arrowhead="dot" ]; +"353" -> "145E" [ label=" ",color="blue",arrowhead="dot" ]; +"354" -> "146E" [ label=" ",color="blue",arrowhead="dot" ]; +"354" -> "396E" [ label=" ",color="blue",arrowhead="dot" ]; +"355" -> "147E" [ label=" ",color="blue",arrowhead="dot" ]; +"356" -> "148E" [ label=" ",color="blue",arrowhead="dot" ]; +"357" -> "149E" [ label=" ",color="blue",arrowhead="dot" ]; +"358" -> "167E" [ label=" ",color="blue",arrowhead="dot" ]; +"359" -> "169E" [ label=" ",color="blue",arrowhead="dot" ]; +"360" -> "171E" [ label=" ",color="blue",arrowhead="dot" ]; +"361" -> "172E" [ label=" ",color="blue",arrowhead="dot" ]; +"362" -> "173E" [ label=" ",color="blue",arrowhead="dot" ]; +"363" -> "174E" [ label=" ",color="blue",arrowhead="dot" ]; +"364" -> "101E" [ label=" ",color="blue",arrowhead="dot" ]; +"365" -> "102E" [ label=" ",color="blue",arrowhead="dot" ]; +"367" -> "104E" [ label=" ",color="blue",arrowhead="dot" ]; +"368" -> "105E" [ label=" ",color="blue",arrowhead="dot" ]; +"369" -> "106E" [ label=" ",color="blue",arrowhead="dot" ]; +"374" -> "111E" [ label=" ",color="blue",arrowhead="dot" ]; +"375" -> "112E" [ label=" ",color="blue",arrowhead="dot" ]; +"377" -> "114E" [ label=" ",color="blue",arrowhead="dot" ]; +"378" -> "115E" [ label=" ",color="blue",arrowhead="dot" ]; +"380" -> "117E" [ label=" ",color="blue",arrowhead="dot" ]; +"380" -> "392E" [ label=" ",color="blue",arrowhead="dot" ]; +"381" -> "118E" [ label=" ",color="blue",arrowhead="dot" ]; +"382" -> "177E" [ label=" ",color="blue",arrowhead="dot" ]; +"382" -> "178E" [ label=" ",color="blue",arrowhead="dot" ]; +"382" -> "179E" [ label=" ",color="blue",arrowhead="dot" ]; +"382" -> "180E" [ label=" ",color="blue",arrowhead="dot" ]; +"382" -> "181E" [ label=" ",color="blue",arrowhead="dot" ]; +"382" -> "182E" [ label=" ",color="blue",arrowhead="dot" ]; +"382" -> "183E" [ label=" ",color="blue",arrowhead="dot" ]; +"382" -> "184E" [ label=" ",color="blue",arrowhead="dot" ]; +"382" -> "185E" [ label=" ",color="blue",arrowhead="dot" ]; +"382" -> "186E" [ label=" ",color="blue",arrowhead="dot" ]; +"382" -> "187E" [ label=" ",color="blue",arrowhead="dot" ]; +"382" -> "188E" [ label=" ",color="blue",arrowhead="dot" ]; +"383" -> "730E" [ label=" ",color="blue",arrowhead="dot" ]; +"383" -> "732E" [ label=" ",color="blue",arrowhead="dot" ]; +"383" -> "741E" [ label=" ",color="blue",arrowhead="dot" ]; +"383" -> "765E" [ label=" ",color="blue",arrowhead="dot" ]; +"383" -> "796E" [ label=" ",color="blue",arrowhead="dot" ]; +"384" -> "726E" [ label=" ",color="blue",arrowhead="dot" ]; +"384" -> "728E" [ label=" ",color="blue",arrowhead="dot" ]; +"384" -> "742E" [ label=" ",color="blue",arrowhead="dot" ]; +"385" -> "328E" [ label=" ",color="blue",arrowhead="dot" ]; +"385" -> "496E" [ label=" ",color="blue",arrowhead="dot" ]; +"385" -> "594E" [ label=" ",color="blue",arrowhead="dot" ]; +"385" -> "622E" [ label=" ",color="blue",arrowhead="dot" ]; +"385" -> "754E" [ label=" ",color="blue",arrowhead="dot" ]; +"385" -> "755E" [ label=" ",color="blue",arrowhead="dot" ]; +"385" -> "756E" [ label=" ",color="blue",arrowhead="dot" ]; +"385" -> "757E" [ label=" ",color="blue",arrowhead="dot" ]; +"385" -> "758E" [ label=" ",color="blue",arrowhead="dot" ]; +"385" -> "759E" [ label=" ",color="blue",arrowhead="dot" ]; +"385" -> "760E" [ label=" ",color="blue",arrowhead="dot" ]; +"385" -> "761E" [ label=" ",color="blue",arrowhead="dot" ]; +"385" -> "762E" [ label=" ",color="blue",arrowhead="dot" ]; +"1E" -> "34E" [ color="purple",arrowhead="none" ]; +"2E" -> "35E" [ color="purple",arrowhead="none" ]; +"3E" -> "36E" [ color="purple",arrowhead="none" ]; +"4E" -> "37E" [ color="purple",arrowhead="none" ]; +"5E" -> "38E" [ color="purple",arrowhead="none" ]; +"6E" -> "39E" [ color="purple",arrowhead="none" ]; +"7E" -> "40E" [ color="purple",arrowhead="none" ]; +"9E" -> "41E" [ color="purple",arrowhead="none" ]; +"10E" -> "42E" [ color="purple",arrowhead="none" ]; +"11E" -> "43E" [ color="purple",arrowhead="none" ]; +"12E" -> "44E" [ color="purple",arrowhead="none" ]; +"13E" -> "45E" [ color="purple",arrowhead="none" ]; +"14E" -> "46E" [ color="purple",arrowhead="none" ]; +"15E" -> "47E" [ color="purple",arrowhead="none" ]; +"16E" -> "48E" [ color="purple",arrowhead="none" ]; +"49E" -> "17E" [ color="purple",arrowhead="none" ]; +"18E" -> "50E" [ color="purple",arrowhead="none" ]; +"19E" -> "51E" [ color="purple",arrowhead="none" ]; +"20E" -> "52E" [ color="purple",arrowhead="none" ]; +"21E" -> "53E" [ color="purple",arrowhead="none" ]; +"22E" -> "54E" [ color="purple",arrowhead="none" ]; +"23E" -> "55E" [ color="purple",arrowhead="none" ]; +"24E" -> "56E" [ color="purple",arrowhead="none" ]; +"25E" -> "57E" [ color="purple",arrowhead="none" ]; +"26E" -> "58E" [ color="purple",arrowhead="none" ]; +"27E" -> "59E" [ color="purple",arrowhead="none" ]; +"28E" -> "60E" [ color="purple",arrowhead="none" ]; +"29E" -> "61E" [ color="purple",arrowhead="none" ]; +"30E" -> "62E" [ color="purple",arrowhead="none" ]; +"31E" -> "63E" [ color="purple",arrowhead="none" ]; +"64E" -> "65E" [ color="purple",arrowhead="none" ]; +"66E" -> "8E" [ color="purple",arrowhead="none" ]; +"71E" -> "76E" [ color="purple",arrowhead="none" ]; +"67E" -> "72E" [ color="purple",arrowhead="none" ]; +"68E" -> "73E" [ color="purple",arrowhead="none" ]; +"69E" -> "74E" [ color="purple",arrowhead="none" ]; +"70E" -> "75E" [ color="purple",arrowhead="none" ]; +"81E" -> "92E" [ color="purple",arrowhead="none" ]; +"82E" -> "93E" [ color="purple",arrowhead="none" ]; +"83E" -> "94E" [ color="purple",arrowhead="none" ]; +"84E" -> "95E" [ color="purple",arrowhead="none" ]; +"85E" -> "96E" [ color="purple",arrowhead="none" ]; +"86E" -> "97E" [ color="purple",arrowhead="none" ]; +"87E" -> "98E" [ color="purple",arrowhead="none" ]; +"88E" -> "99E" [ color="purple",arrowhead="none" ]; +"89E" -> "100E" [ color="purple",arrowhead="none" ]; +"101E" -> "120E" [ color="purple",arrowhead="none" ]; +"102E" -> "121E" [ color="purple",arrowhead="none" ]; +"103E" -> "122E" [ color="purple",arrowhead="none" ]; +"104E" -> "123E" [ color="purple",arrowhead="none" ]; +"105E" -> "124E" [ color="purple",arrowhead="none" ]; +"106E" -> "125E" [ color="purple",arrowhead="none" ]; +"107E" -> "126E" [ color="purple",arrowhead="none" ]; +"108E" -> "127E" [ color="purple",arrowhead="none" ]; +"109E" -> "128E" [ color="purple",arrowhead="none" ]; +"110E" -> "129E" [ color="purple",arrowhead="none" ]; +"111E" -> "130E" [ color="purple",arrowhead="none" ]; +"112E" -> "131E" [ color="purple",arrowhead="none" ]; +"113E" -> "132E" [ color="purple",arrowhead="none" ]; +"114E" -> "133E" [ color="purple",arrowhead="none" ]; +"115E" -> "134E" [ color="purple",arrowhead="none" ]; +"116E" -> "135E" [ color="purple",arrowhead="none" ]; +"117E" -> "136E" [ color="purple",arrowhead="none" ]; +"118E" -> "137E" [ color="purple",arrowhead="none" ]; +"119E" -> "138E" [ color="purple",arrowhead="none" ]; +"139E" -> "151E" [ color="purple",arrowhead="none" ]; +"141E" -> "153E" [ color="purple",arrowhead="none" ]; +"142E" -> "154E" [ color="purple",arrowhead="none" ]; +"143E" -> "155E" [ color="purple",arrowhead="none" ]; +"144E" -> "156E" [ color="purple",arrowhead="none" ]; +"145E" -> "157E" [ color="purple",arrowhead="none" ]; +"146E" -> "158E" [ color="purple",arrowhead="none" ]; +"147E" -> "159E" [ color="purple",arrowhead="none" ]; +"148E" -> "160E" [ color="purple",arrowhead="none" ]; +"149E" -> "161E" [ color="purple",arrowhead="none" ]; +"150E" -> "162E" [ color="purple",arrowhead="none" ]; +"165E" -> "177E" [ color="purple",arrowhead="none" ]; +"166E" -> "178E" [ color="purple",arrowhead="none" ]; +"167E" -> "179E" [ color="purple",arrowhead="none" ]; +"168E" -> "180E" [ color="purple",arrowhead="none" ]; +"169E" -> "181E" [ color="purple",arrowhead="none" ]; +"170E" -> "182E" [ color="purple",arrowhead="none" ]; +"171E" -> "183E" [ color="purple",arrowhead="none" ]; +"172E" -> "184E" [ color="purple",arrowhead="none" ]; +"173E" -> "185E" [ color="purple",arrowhead="none" ]; +"174E" -> "186E" [ color="purple",arrowhead="none" ]; +"175E" -> "187E" [ color="purple",arrowhead="none" ]; +"176E" -> "188E" [ color="purple",arrowhead="none" ]; +"189E" -> "190E" [ color="purple",arrowhead="none" ]; +"191E" -> "192E" [ color="purple",arrowhead="none" ]; +"193E" -> "194E" [ color="purple",arrowhead="none" ]; +"195E" -> "196E" [ color="purple",arrowhead="none" ]; +"197E" -> "198E" [ color="purple",arrowhead="none" ]; +"199E" -> "200E" [ color="purple",arrowhead="none" ]; +"201E" -> "202E" [ color="purple",arrowhead="none" ]; +"203E" -> "204E" [ color="purple",arrowhead="none" ]; +"205E" -> "206E" [ color="purple",arrowhead="none" ]; +"207E" -> "208E" [ color="purple",arrowhead="none" ]; +"209E" -> "210E" [ color="purple",arrowhead="none" ]; +"412E" -> "211E" [ color="purple",arrowhead="none" ]; +"214E" -> "213E" [ color="purple",arrowhead="none" ]; +"216E" -> "215E" [ color="purple",arrowhead="none" ]; +"217E" -> "218E" [ color="purple",arrowhead="none" ]; +"219E" -> "220E" [ color="purple",arrowhead="none" ]; +"221E" -> "222E" [ color="purple",arrowhead="none" ]; +"223E" -> "224E" [ color="purple",arrowhead="none" ]; +"225E" -> "226E" [ color="purple",arrowhead="none" ]; +"227E" -> "228E" [ color="purple",arrowhead="none" ]; +"231E" -> "232E" [ color="purple",arrowhead="none" ]; +"233E" -> "234E" [ color="purple",arrowhead="none" ]; +"236E" -> "235E" [ color="purple",arrowhead="none" ]; +"237E" -> "238E" [ color="purple",arrowhead="none" ]; +"239E" -> "240E" [ color="purple",arrowhead="none" ]; +"241E" -> "242E" [ color="purple",arrowhead="none" ]; +"243E" -> "244E" [ color="purple",arrowhead="none" ]; +"245E" -> "246E" [ color="purple",arrowhead="none" ]; +"247E" -> "248E" [ color="purple",arrowhead="none" ]; +"249E" -> "250E" [ color="purple",arrowhead="none" ]; +"251E" -> "252E" [ color="purple",arrowhead="none" ]; +"253E" -> "254E" [ color="purple",arrowhead="none" ]; +"255E" -> "256E" [ color="purple",arrowhead="none" ]; +"257E" -> "258E" [ color="purple",arrowhead="none" ]; +"259E" -> "260E" [ color="purple",arrowhead="none" ]; +"261E" -> "262E" [ color="purple",arrowhead="none" ]; +"263E" -> "264E" [ color="purple",arrowhead="none" ]; +"265E" -> "266E" [ color="purple",arrowhead="none" ]; +"267E" -> "268E" [ color="purple",arrowhead="none" ]; +"269E" -> "270E" [ color="purple",arrowhead="none" ]; +"271E" -> "272E" [ color="purple",arrowhead="none" ]; +"273E" -> "274E" [ color="purple",arrowhead="none" ]; +"275E" -> "276E" [ color="purple",arrowhead="none" ]; +"278E" -> "277E" [ color="purple",arrowhead="none" ]; +"279E" -> "767E" [ color="purple",arrowhead="none" ]; +"281E" -> "282E" [ color="purple",arrowhead="none" ]; +"283E" -> "284E" [ color="purple",arrowhead="none" ]; +"285E" -> "286E" [ color="purple",arrowhead="none" ]; +"768E" -> "287E" [ color="purple",arrowhead="none" ]; +"289E" -> "290E" [ color="purple",arrowhead="none" ]; +"291E" -> "292E" [ color="purple",arrowhead="none" ]; +"293E" -> "294E" [ color="purple",arrowhead="none" ]; +"295E" -> "296E" [ color="purple",arrowhead="none" ]; +"297E" -> "298E" [ color="purple",arrowhead="none" ]; +"299E" -> "300E" [ color="purple",arrowhead="none" ]; +"301E" -> "302E" [ color="purple",arrowhead="none" ]; +"303E" -> "304E" [ color="purple",arrowhead="none" ]; +"305E" -> "306E" [ color="purple",arrowhead="none" ]; +"307E" -> "308E" [ color="purple",arrowhead="none" ]; +"309E" -> "310E" [ color="purple",arrowhead="none" ]; +"311E" -> "312E" [ color="purple",arrowhead="none" ]; +"313E" -> "314E" [ color="purple",arrowhead="none" ]; +"315E" -> "316E" [ color="purple",arrowhead="none" ]; +"317E" -> "318E" [ color="purple",arrowhead="none" ]; +"319E" -> "320E" [ color="purple",arrowhead="none" ]; +"321E" -> "322E" [ color="purple",arrowhead="none" ]; +"327E" -> "800E" [ color="purple",arrowhead="none" ]; +"329E" -> "330E" [ color="purple",arrowhead="none" ]; +"331E" -> "332E" [ color="purple",arrowhead="none" ]; +"333E" -> "334E" [ color="purple",arrowhead="none" ]; +"335E" -> "336E" [ color="purple",arrowhead="none" ]; +"337E" -> "338E" [ color="purple",arrowhead="none" ]; +"339E" -> "340E" [ color="purple",arrowhead="none" ]; +"341E" -> "342E" [ color="purple",arrowhead="none" ]; +"343E" -> "344E" [ color="purple",arrowhead="none" ]; +"345E" -> "346E" [ color="purple",arrowhead="none" ]; +"347E" -> "348E" [ color="purple",arrowhead="none" ]; +"349E" -> "350E" [ color="purple",arrowhead="none" ]; +"351E" -> "352E" [ color="purple",arrowhead="none" ]; +"353E" -> "354E" [ color="purple",arrowhead="none" ]; +"412E" -> "355E" [ color="purple",arrowhead="none" ]; +"357E" -> "358E" [ color="purple",arrowhead="none" ]; +"359E" -> "360E" [ color="purple",arrowhead="none" ]; +"361E" -> "362E" [ color="purple",arrowhead="none" ]; +"363E" -> "364E" [ color="purple",arrowhead="none" ]; +"365E" -> "366E" [ color="purple",arrowhead="none" ]; +"367E" -> "368E" [ color="purple",arrowhead="none" ]; +"369E" -> "370E" [ color="purple",arrowhead="none" ]; +"371E" -> "372E" [ color="purple",arrowhead="none" ]; +"373E" -> "374E" [ color="purple",arrowhead="none" ]; +"375E" -> "376E" [ color="purple",arrowhead="none" ]; +"377E" -> "378E" [ color="purple",arrowhead="none" ]; +"379E" -> "380E" [ color="purple",arrowhead="none" ]; +"381E" -> "382E" [ color="purple",arrowhead="none" ]; +"383E" -> "384E" [ color="purple",arrowhead="none" ]; +"385E" -> "386E" [ color="purple",arrowhead="none" ]; +"387E" -> "388E" [ color="purple",arrowhead="none" ]; +"389E" -> "390E" [ color="purple",arrowhead="none" ]; +"391E" -> "392E" [ color="purple",arrowhead="none" ]; +"393E" -> "394E" [ color="purple",arrowhead="none" ]; +"395E" -> "396E" [ color="purple",arrowhead="none" ]; +"397E" -> "398E" [ color="purple",arrowhead="none" ]; +"399E" -> "400E" [ color="purple",arrowhead="none" ]; +"402E" -> "401E" [ color="purple",arrowhead="none" ]; +"404E" -> "403E" [ color="purple",arrowhead="none" ]; +"406E" -> "405E" [ color="purple",arrowhead="none" ]; +"408E" -> "407E" [ color="purple",arrowhead="none" ]; +"236E" -> "409E" [ color="purple",arrowhead="none" ]; +"412E" -> "411E" [ color="purple",arrowhead="none" ]; +"412E" -> "413E" [ color="purple",arrowhead="none" ]; +"278E" -> "415E" [ color="purple",arrowhead="none" ]; +"417E" -> "418E" [ color="purple",arrowhead="none" ]; +"419E" -> "420E" [ color="purple",arrowhead="none" ]; +"421E" -> "422E" [ color="purple",arrowhead="none" ]; +"423E" -> "424E" [ color="purple",arrowhead="none" ]; +"425E" -> "426E" [ color="purple",arrowhead="none" ]; +"427E" -> "428E" [ color="purple",arrowhead="none" ]; +"431E" -> "432E" [ color="purple",arrowhead="none" ]; +"433E" -> "434E" [ color="purple",arrowhead="none" ]; +"435E" -> "436E" [ color="purple",arrowhead="none" ]; +"438E" -> "437E" [ color="purple",arrowhead="none" ]; +"439E" -> "440E" [ color="purple",arrowhead="none" ]; +"441E" -> "442E" [ color="purple",arrowhead="none" ]; +"443E" -> "444E" [ color="purple",arrowhead="none" ]; +"445E" -> "446E" [ color="purple",arrowhead="none" ]; +"448E" -> "447E" [ color="purple",arrowhead="none" ]; +"449E" -> "450E" [ color="purple",arrowhead="none" ]; +"451E" -> "452E" [ color="purple",arrowhead="none" ]; +"453E" -> "454E" [ color="purple",arrowhead="none" ]; +"455E" -> "456E" [ color="purple",arrowhead="none" ]; +"457E" -> "458E" [ color="purple",arrowhead="none" ]; +"459E" -> "460E" [ color="purple",arrowhead="none" ]; +"461E" -> "462E" [ color="purple",arrowhead="none" ]; +"236E" -> "463E" [ color="purple",arrowhead="none" ]; +"465E" -> "466E" [ color="purple",arrowhead="none" ]; +"467E" -> "468E" [ color="purple",arrowhead="none" ]; +"469E" -> "470E" [ color="purple",arrowhead="none" ]; +"471E" -> "472E" [ color="purple",arrowhead="none" ]; +"473E" -> "474E" [ color="purple",arrowhead="none" ]; +"476E" -> "475E" [ color="purple",arrowhead="none" ]; +"477E" -> "478E" [ color="purple",arrowhead="none" ]; +"479E" -> "358E" [ color="purple",arrowhead="none" ]; +"481E" -> "482E" [ color="purple",arrowhead="none" ]; +"483E" -> "484E" [ color="purple",arrowhead="none" ]; +"485E" -> "486E" [ color="purple",arrowhead="none" ]; +"487E" -> "488E" [ color="purple",arrowhead="none" ]; +"489E" -> "490E" [ color="purple",arrowhead="none" ]; +"491E" -> "492E" [ color="purple",arrowhead="none" ]; +"495E" -> "795E" [ color="purple",arrowhead="none" ]; +"499E" -> "500E" [ color="purple",arrowhead="none" ]; +"501E" -> "502E" [ color="purple",arrowhead="none" ]; +"504E" -> "503E" [ color="purple",arrowhead="none" ]; +"505E" -> "506E" [ color="purple",arrowhead="none" ]; +"507E" -> "508E" [ color="purple",arrowhead="none" ]; +"509E" -> "510E" [ color="purple",arrowhead="none" ]; +"412E" -> "511E" [ color="purple",arrowhead="none" ]; +"513E" -> "514E" [ color="purple",arrowhead="none" ]; +"515E" -> "516E" [ color="purple",arrowhead="none" ]; +"517E" -> "518E" [ color="purple",arrowhead="none" ]; +"519E" -> "520E" [ color="purple",arrowhead="none" ]; +"521E" -> "522E" [ color="purple",arrowhead="none" ]; +"523E" -> "524E" [ color="purple",arrowhead="none" ]; +"525E" -> "526E" [ color="purple",arrowhead="none" ]; +"527E" -> "528E" [ color="purple",arrowhead="none" ]; +"529E" -> "530E" [ color="purple",arrowhead="none" ]; +"531E" -> "532E" [ color="purple",arrowhead="none" ]; +"533E" -> "534E" [ color="purple",arrowhead="none" ]; +"535E" -> "536E" [ color="purple",arrowhead="none" ]; +"537E" -> "538E" [ color="purple",arrowhead="none" ]; +"539E" -> "540E" [ color="purple",arrowhead="none" ]; +"541E" -> "542E" [ color="purple",arrowhead="none" ]; +"543E" -> "544E" [ color="purple",arrowhead="none" ]; +"545E" -> "546E" [ color="purple",arrowhead="none" ]; +"547E" -> "548E" [ color="purple",arrowhead="none" ]; +"549E" -> "550E" [ color="purple",arrowhead="none" ]; +"551E" -> "552E" [ color="purple",arrowhead="none" ]; +"553E" -> "554E" [ color="purple",arrowhead="none" ]; +"555E" -> "556E" [ color="purple",arrowhead="none" ]; +"557E" -> "558E" [ color="purple",arrowhead="none" ]; +"278E" -> "559E" [ color="purple",arrowhead="none" ]; +"561E" -> "562E" [ color="purple",arrowhead="none" ]; +"563E" -> "564E" [ color="purple",arrowhead="none" ]; +"565E" -> "566E" [ color="purple",arrowhead="none" ]; +"567E" -> "568E" [ color="purple",arrowhead="none" ]; +"569E" -> "570E" [ color="purple",arrowhead="none" ]; +"571E" -> "572E" [ color="purple",arrowhead="none" ]; +"573E" -> "574E" [ color="purple",arrowhead="none" ]; +"575E" -> "576E" [ color="purple",arrowhead="none" ]; +"577E" -> "578E" [ color="purple",arrowhead="none" ]; +"579E" -> "580E" [ color="purple",arrowhead="none" ]; +"581E" -> "582E" [ color="purple",arrowhead="none" ]; +"583E" -> "584E" [ color="purple",arrowhead="none" ]; +"585E" -> "586E" [ color="purple",arrowhead="none" ]; +"587E" -> "588E" [ color="purple",arrowhead="none" ]; +"589E" -> "590E" [ color="purple",arrowhead="none" ]; +"593E" -> "594E" [ color="purple",arrowhead="none" ]; +"597E" -> "598E" [ color="purple",arrowhead="none" ]; +"599E" -> "600E" [ color="purple",arrowhead="none" ]; +"601E" -> "602E" [ color="purple",arrowhead="none" ]; +"603E" -> "604E" [ color="purple",arrowhead="none" ]; +"605E" -> "606E" [ color="purple",arrowhead="none" ]; +"607E" -> "608E" [ color="purple",arrowhead="none" ]; +"609E" -> "610E" [ color="purple",arrowhead="none" ]; +"611E" -> "612E" [ color="purple",arrowhead="none" ]; +"613E" -> "614E" [ color="purple",arrowhead="none" ]; +"615E" -> "358E" [ color="purple",arrowhead="none" ]; +"617E" -> "618E" [ color="purple",arrowhead="none" ]; +"619E" -> "620E" [ color="purple",arrowhead="none" ]; +"621E" -> "622E" [ color="purple",arrowhead="none" ]; +"623E" -> "624E" [ color="purple",arrowhead="none" ]; +"625E" -> "626E" [ color="purple",arrowhead="none" ]; +"627E" -> "628E" [ color="purple",arrowhead="none" ]; +"629E" -> "630E" [ color="purple",arrowhead="none" ]; +"631E" -> "632E" [ color="purple",arrowhead="none" ]; +"634E" -> "633E" [ color="purple",arrowhead="none" ]; +"635E" -> "636E" [ color="purple",arrowhead="none" ]; +"637E" -> "638E" [ color="purple",arrowhead="none" ]; +"639E" -> "640E" [ color="purple",arrowhead="none" ]; +"641E" -> "642E" [ color="purple",arrowhead="none" ]; +"643E" -> "644E" [ color="purple",arrowhead="none" ]; +"645E" -> "646E" [ color="purple",arrowhead="none" ]; +"647E" -> "648E" [ color="purple",arrowhead="none" ]; +"649E" -> "650E" [ color="purple",arrowhead="none" ]; +"651E" -> "652E" [ color="purple",arrowhead="none" ]; +"653E" -> "654E" [ color="purple",arrowhead="none" ]; +"655E" -> "656E" [ color="purple",arrowhead="none" ]; +"657E" -> "658E" [ color="purple",arrowhead="none" ]; +"659E" -> "660E" [ color="purple",arrowhead="none" ]; +"661E" -> "662E" [ color="purple",arrowhead="none" ]; +"663E" -> "664E" [ color="purple",arrowhead="none" ]; +"665E" -> "666E" [ color="purple",arrowhead="none" ]; +"667E" -> "668E" [ color="purple",arrowhead="none" ]; +"669E" -> "670E" [ color="purple",arrowhead="none" ]; +"671E" -> "672E" [ color="purple",arrowhead="none" ]; +"673E" -> "674E" [ color="purple",arrowhead="none" ]; +"675E" -> "676E" [ color="purple",arrowhead="none" ]; +"679E" -> "680E" [ color="purple",arrowhead="none" ]; +"681E" -> "682E" [ color="purple",arrowhead="none" ]; +"683E" -> "684E" [ color="purple",arrowhead="none" ]; +"685E" -> "686E" [ color="purple",arrowhead="none" ]; +"687E" -> "688E" [ color="purple",arrowhead="none" ]; +"689E" -> "690E" [ color="purple",arrowhead="none" ]; +"691E" -> "692E" [ color="purple",arrowhead="none" ]; +"693E" -> "694E" [ color="purple",arrowhead="none" ]; +"695E" -> "696E" [ color="purple",arrowhead="none" ]; +"697E" -> "698E" [ color="purple",arrowhead="none" ]; +"699E" -> "700E" [ color="purple",arrowhead="none" ]; +"703E" -> "704E" [ color="purple",arrowhead="none" ]; +"705E" -> "706E" [ color="purple",arrowhead="none" ]; +"709E" -> "710E" [ color="purple",arrowhead="none" ]; +"711E" -> "712E" [ color="purple",arrowhead="none" ]; +"713E" -> "714E" [ color="purple",arrowhead="none" ]; +"715E" -> "398E" [ color="purple",arrowhead="none" ]; +"717E" -> "718E" [ color="purple",arrowhead="none" ]; +"719E" -> "720E" [ color="purple",arrowhead="none" ]; +"721E" -> "722E" [ color="purple",arrowhead="none" ]; +"725E" -> "726E" [ color="purple",arrowhead="none" ]; +"727E" -> "728E" [ color="purple",arrowhead="none" ]; +"729E" -> "730E" [ color="purple",arrowhead="none" ]; +"731E" -> "732E" [ color="purple",arrowhead="none" ]; +"741E" -> "743E" [ color="purple",arrowhead="none" ]; +"742E" -> "744E" [ color="purple",arrowhead="none" ]; +"745E" -> "754E" [ color="purple",arrowhead="none" ]; +"746E" -> "755E" [ color="purple",arrowhead="none" ]; +"747E" -> "756E" [ color="purple",arrowhead="none" ]; +"748E" -> "757E" [ color="purple",arrowhead="none" ]; +"749E" -> "758E" [ color="purple",arrowhead="none" ]; +"750E" -> "759E" [ color="purple",arrowhead="none" ]; +"751E" -> "760E" [ color="purple",arrowhead="none" ]; +"752E" -> "761E" [ color="purple",arrowhead="none" ]; +"753E" -> "762E" [ color="purple",arrowhead="none" ]; +"763E" -> "764E" [ color="purple",arrowhead="none" ]; +"765E" -> "766E" [ color="purple",arrowhead="none" ]; +"770E" -> "783E" [ color="purple",arrowhead="none" ]; +"770E" -> "784E" [ color="purple",arrowhead="none" ]; +"769E" -> "785E" [ color="purple",arrowhead="none" ]; +"769E" -> "786E" [ color="purple",arrowhead="none" ]; +"769E" -> "787E" [ color="purple",arrowhead="none" ]; +"770E" -> "788E" [ color="purple",arrowhead="none" ]; +"770E" -> "789E" [ color="purple",arrowhead="none" ]; +"769E" -> "790E" [ color="purple",arrowhead="none" ]; +"770E" -> "791E" [ color="purple",arrowhead="none" ]; +"769E" -> "792E" [ color="purple",arrowhead="none" ]; +"793E" -> "769E" [ color="purple",arrowhead="none" ]; +"769E" -> "784E" [ color="purple",arrowhead="none" ]; +"770E" -> "785E" [ color="purple",arrowhead="none" ]; +"788E" -> "787E" [ color="purple",arrowhead="none" ]; +"770E" -> "792E" [ color="purple",arrowhead="none" ]; +"798E" -> "799E" [ color="purple",arrowhead="none" ]; +"796E" -> "797E" [ color="purple",arrowhead="none" ]; +"793E" -> "789E" [ color="purple",arrowhead="none" ]; +"783E" -> "787E" [ color="purple",arrowhead="none" ]; +"784E" -> "792E" [ color="purple",arrowhead="none" ]; +"787E" -> "789E" [ color="purple",arrowhead="none" ]; +"769E" -> "791E" [ color="purple",arrowhead="none" ]; +"802E" -> "801E" [ color="purple",arrowhead="none" ]; +} diff --git a/www2/examples/network/graphviz/data/unix.gv.txt b/www2/examples/network/graphviz/data/unix.gv.txt new file mode 100644 index 00000000..431ab655 --- /dev/null +++ b/www2/examples/network/graphviz/data/unix.gv.txt @@ -0,0 +1,55 @@ +/* courtesy Ian Darwin and Geoff Collyer, Softquad Inc. */ +digraph unix { + size="6,6"; + node [color=lightblue, style=filled]; + "5th Edition" -> "6th Edition"; + "5th Edition" -> "PWB 1.0"; + "6th Edition" -> "LSX"; + "6th Edition" -> "1 BSD"; + "6th Edition" -> "Mini Unix"; + "6th Edition" -> "Wollongong"; + "6th Edition" -> "Interdata"; + "Interdata" -> "Unix/TS 3.0"; + "Interdata" -> "PWB 2.0"; + "Interdata" -> "7th Edition"; + "7th Edition" -> "8th Edition"; + "7th Edition" -> "32V"; + "7th Edition" -> "V7M"; + "7th Edition" -> "Ultrix-11"; + "7th Edition" -> "Xenix"; + "7th Edition" -> "UniPlus+"; + "V7M" -> "Ultrix-11"; + "8th Edition" -> "9th Edition"; + "1 BSD" -> "2 BSD"; + "2 BSD" -> "2.8 BSD"; + "2.8 BSD" -> "Ultrix-11"; + "2.8 BSD" -> "2.9 BSD"; + "32V" -> "3 BSD"; + "3 BSD" -> "4 BSD"; + "4 BSD" -> "4.1 BSD"; + "4.1 BSD" -> "4.2 BSD"; + "4.1 BSD" -> "2.8 BSD"; + "4.1 BSD" -> "8th Edition"; + "4.2 BSD" -> "4.3 BSD"; + "4.2 BSD" -> "Ultrix-32"; + "PWB 1.0" -> "PWB 1.2"; + "PWB 1.0" -> "USG 1.0"; + "PWB 1.2" -> "PWB 2.0"; + "USG 1.0" -> "CB Unix 1"; + "USG 1.0" -> "USG 2.0"; + "CB Unix 1" -> "CB Unix 2"; + "CB Unix 2" -> "CB Unix 3"; + "CB Unix 3" -> "Unix/TS++"; + "CB Unix 3" -> "PDP-11 Sys V"; + "USG 2.0" -> "USG 3.0"; + "USG 3.0" -> "Unix/TS 3.0"; + "PWB 2.0" -> "Unix/TS 3.0"; + "Unix/TS 1.0" -> "Unix/TS 3.0"; + "Unix/TS 3.0" -> "TS 4.0"; + "Unix/TS++" -> "TS 4.0"; + "CB Unix 3" -> "TS 4.0"; + "TS 4.0" -> "System V.0"; + "System V.0" -> "System V.2"; + "System V.2" -> "System V.3"; +} + diff --git a/www2/examples/network/graphviz/data/world.gv.txt b/www2/examples/network/graphviz/data/world.gv.txt new file mode 100644 index 00000000..3e6e4e37 --- /dev/null +++ b/www2/examples/network/graphviz/data/world.gv.txt @@ -0,0 +1,67 @@ +digraph world { +size="7,7"; + {rank=same; S8 S24 S1 S35 S30;} + {rank=same; T8 T24 T1 T35 T30;} + {rank=same; 43 37 36 10 2;} + {rank=same; 25 9 38 40 13 17 12 18;} + {rank=same; 26 42 11 3 33 19 39 14 16;} + {rank=same; 4 31 34 21 41 28 20;} + {rank=same; 27 5 22 32 29 15;} + {rank=same; 6 23;} + {rank=same; 7;} + + S8 -> 9; + S24 -> 25; + S24 -> 27; + S1 -> 2; + S1 -> 10; + S35 -> 43; + S35 -> 36; + S30 -> 31; + S30 -> 33; + 9 -> 42; + 9 -> T1; + 25 -> T1; + 25 -> 26; + 27 -> T24; + 2 -> {3 ; 16 ; 17 ; T1 ; 18} + 10 -> { 11 ; 14 ; T1 ; 13; 12;} + 31 -> T1; + 31 -> 32; + 33 -> T30; + 33 -> 34; + 42 -> 4; + 26 -> 4; + 3 -> 4; + 16 -> 15; + 17 -> 19; + 18 -> 29; + 11 -> 4; + 14 -> 15; + 37 -> {39 ; 41 ; 38 ; 40;} + 13 -> 19; + 12 -> 29; + 43 -> 38; + 43 -> 40; + 36 -> 19; + 32 -> 23; + 34 -> 29; + 39 -> 15; + 41 -> 29; + 38 -> 4; + 40 -> 19; + 4 -> 5; + 19 -> {21 ; 20 ; 28;} + 5 -> {6 ; T35 ; 23;} + 21 -> 22; + 20 -> 15; + 28 -> 29; + 6 -> 7; + 15 -> T1; + 22 -> T35; + 22 -> 23; + 29 -> T30; + 7 -> T8; + 23 -> T24; + 23 -> T1; +} diff --git a/www2/examples/network/graphviz/graphviz_gallery.html b/www2/examples/network/graphviz/graphviz_gallery.html new file mode 100644 index 00000000..4580edcf --- /dev/null +++ b/www2/examples/network/graphviz/graphviz_gallery.html @@ -0,0 +1,86 @@ + + + Network | Graphviz Gallery + + + + + + + + + + +

+ The following examples are unmodified copies from the + Graphviz Gallery. +

+

+ Note that some style attributes of Graphviz are not supported by vis.js, + and that vis.js offers options not supported by Graphviz (which could make + some examples look much nicer). +

+ +

+ + +

+ +
+ + + diff --git a/www2/examples/network/graphviz/screenshots/fsm.png b/www2/examples/network/graphviz/screenshots/fsm.png new file mode 100644 index 0000000000000000000000000000000000000000..544b8ed68b6d36cdd3d40283f219f23533b27d40 GIT binary patch literal 70809 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%0D5@+`~O*U#gTXu_rh@2FrN} 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 z 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 literal 0 HcmV?d00001 diff --git a/www2/examples/network/graphviz/screenshots/traffic_lights.png b/www2/examples/network/graphviz/screenshots/traffic_lights.png new file mode 100644 index 0000000000000000000000000000000000000000..237016a63250dbde44ca17d680b12e5c4fd2d610 GIT binary patch literal 59829 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 bb%b=e-j$^MRt2aiLLeF{y2|B>4^aOD$R^W| literal 0 HcmV?d00001 diff --git a/www2/examples/network/img/refresh-cl/Hardware-Fax-icon.png b/www2/examples/network/img/refresh-cl/Hardware-Fax-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..eab07c7e2b492d183e796d5bbc4c14f398f8eac0 GIT binary patch literal 3645 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 literal 0 HcmV?d00001 diff --git a/www2/examples/network/img/refresh-cl/Hardware-My-Computer-3-icon.png b/www2/examples/network/img/refresh-cl/Hardware-My-Computer-3-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..26ac6260791799717be9893fcffaa4d4edf3cbdb GIT binary patch literal 5402 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 Ef_{oenE(I) literal 0 HcmV?d00001 diff --git a/www2/examples/network/img/refresh-cl/Hardware-My-PDA-02-icon.png b/www2/examples/network/img/refresh-cl/Hardware-My-PDA-02-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a761307d25ed268636a98d310b74555559f436a9 GIT binary patch literal 3531 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 literal 0 HcmV?d00001 diff --git a/www2/examples/network/img/refresh-cl/Hardware-My-Phone-Picture-icon.png b/www2/examples/network/img/refresh-cl/Hardware-My-Phone-Picture-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..5e9ea6c56f7ee92297ac2953e22d0f9988c7f0b1 GIT binary patch literal 3234 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 O0000>P)i`S}gIuRu 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 literal 0 HcmV?d00001 diff --git a/www2/examples/network/img/refresh-cl/license.txt b/www2/examples/network/img/refresh-cl/license.txt new file mode 100644 index 00000000..7b8b9d43 --- /dev/null +++ b/www2/examples/network/img/refresh-cl/license.txt @@ -0,0 +1,14 @@ +Refresh Cl icon set + +http://www.iconarchive.com/show/refresh-cl-icons-by-tpdkdesign.net.html +http://www.iconarchive.com/artist/tpdkdesign.net.html + +Artist: TpdkDesign.net +License: Free for non-commercial use. + +Name: TpdkDesign.net +URL: http://www.tpdkdesign.net +Available for custom work: No +Default License: Free for non-commercial use. +Commercial usage: Not allowed + diff --git a/www2/examples/network/img/soft-scraps-icons/Document-icon24.png b/www2/examples/network/img/soft-scraps-icons/Document-icon24.png new file mode 100644 index 0000000000000000000000000000000000000000..c420b202ed4b113b4ed87575181c8034b95b29dc GIT binary patch literal 1104 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 Z{tXy76{%(M^g;jt002ovPDHLkV1kG0M@j$y literal 0 HcmV?d00001 diff --git a/www2/examples/network/img/soft-scraps-icons/Document-icon48.png b/www2/examples/network/img/soft-scraps-icons/Document-icon48.png new file mode 100644 index 0000000000000000000000000000000000000000..5938c512fbe77d44642dda1cab861ba8c3d851a2 GIT binary patch literal 2771 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 Z{tXy76{%(M^g;jt002ovPDHLkV1kG0M@j$y literal 0 HcmV?d00001 diff --git a/www2/examples/network/img/soft-scraps-icons/Email-icon24.png b/www2/examples/network/img/soft-scraps-icons/Email-icon24.png new file mode 100644 index 0000000000000000000000000000000000000000..c01c9040ecb5f5567275dd9da81d3c18db7bb40f GIT binary patch literal 668 zcmV;N0%QG&P)z34j@%(E-J`BtZH8 z4QP=NL=U4NyLWx8f2Rwqe85i|p!61+-hxnEC-x9@gx$Li@{u-Mw3i0X&A0%KZ^&+c z1;!&T{(p*Y#euF4Brc+21DHjYC=5|5f^s8Hq9b8B`W;yF-jA5f=U24(?TEDB*Y zLFG+gLO&Tm-Qb`aL?{AkT5L~y0Bgv`+&Ze)fa(r|@nX&EAa4MgOFw)ys2yAX-E%ixIzu!t<*VuZK?6y>naoi?zx$`LX) zI3mA+>$li9eAu_kAe{z3*;b#rXHZ{&rZP2!f?I`@%c$9#A~o#vqM%m6tjT1lQ*#c3 z@5Tbgld<3r`t3#b8MU|<&EbdKTzdH&51-BUcd`C9=2_Ag^H`PulPt~a**x;Y>glxW znh9Fnz?ZJTJ#SO?(P?=ur$oTyS>U;UHvY*29e)6g0VL7EWag3p0000jt+nzW0hPEBe_rsJs7KhD|NG~O>`kQ?^EoW0imzrEJl>l`mk@$i}k zmezkk%~#B78g}ZqopljKKCh1)!u5QdS!9 zy#~+)POf+t6}_W@i#LJn-v9-Wwq*dV7NE0%5FwKzZtVe75r8@vkgpM7p8z;XfOMx( z(?=S$19L(rR=l%|KS6*d-1%R=PJjaf;5Y#`^c%l@4TLfk;S&@IE5&V`LHhn@@(ltU z5&%aDu-?_Fnnf}{h9Cjs7jHKMVbQM7kNx-_eP8+JG<5fO+w(DV6)WTuy)!0$@J@ zQr(Rh1eo3cjm<#vMpmzCI9Uapj&%=tYW9`b*n#`Ke3t;H1VBCkR=FEBGy&Qu=J5w$ ztR_SjPh%fiyq7!HRsfOAxym1~d;sR^1^~E60D}O?Bfv^m0}D?b!aM7ybVmyd$@B?W zwwWgy1j5eUOw6rb3k1({KC`k8+CK9jVSfSKCqSV9*h_#F{fpn)0Dn68sa>7w>i{!z zo4CmxqEEbx)y_0&BVE_5^yz2;X8dujjeqD@&jRy-e>$vz_hb`xMZE7!_C%?70Q9y-rPR(I1^ zhB|=|+@YCJI(E3Yr9=DKc&mEYWi`Ck@*@JA6#zRSZAoTWdDVP|5f{VUNQinTfSw`O z>PF_*O$a-i)8)qmIHv%d&xN#=DexYl_;`n-zg%Dnb`&`QYKw9Zlat~ZaWRSskXwv8 z2f)?Ui;-ED@3{{|#|2tr04l0b>d;)oS(%xLplsHG|0rATXh#S0U&8#CJ_p+ylEk4| z&ma?s0QH!6AK74601?2LJ53r500000NkvXXu0mjf-=}-n literal 0 HcmV?d00001 diff --git a/www2/examples/network/img/soft-scraps-icons/Email-icon48.png b/www2/examples/network/img/soft-scraps-icons/Email-icon48.png new file mode 100644 index 0000000000000000000000000000000000000000..799ebb70bfe43285841801bb4b70ea7899e4fce7 GIT binary patch literal 1487 zcmV;=1u*)FP)leV_qYTI?LcFJhGx>3u7DXSfbf`}BIhz#Z!RQ#uZL{a=D{t>4l zg2-^x3o3R9Zrwz-sk^AV)Xudqtz(^?y(CSVq_^bwd|#U8%a^1{)=OH*3x~cvIp;g? z^F7b^zV8uO<0euaKpH@*14si%bpUAq9Q!%SQXR-`+K>X^0!O_DkX*pm&Ly%w*=Hu} zUkU-^qvOlihwMw(pP~=1K=fq zTn0Yw0<4>L60-LIg#{2Z(~y@>0*%!W!nZmYfB|A+5;Ct2$jF3nj6+(t=p4GrdMfn>8^A0BgH0UMt8v*2pD6KU(g2-P7xv7G4a+w(r zkWL3MI|5JqU`{izl_^sfazIY>4d0cl`UKk zOiV-Ex(d0mHUS16*GuTD*Z`D&um8f+2oJU*cRI$ z%4$Quk9!~;|L{ZJpvgkf06d|W(3i0#^zTiUbG{*qF;Y^$vU_#%@6NsKxe{zS{A8?` zvdQE64O=56<775+^UU({1tj#OUP7O%03zPjD0`x;;=r4a)=K!9pHCfS@Z}IKPlq>u zQ5ndfY$#XUg1Bb~*NfAfM@^CwcS=)^&656Ae(4i0mlMF`Y z@_uYg?n0x~h!d>VnJkDk5Avh0o}0f8d6SnU>4s=-<9jJc?n2|8WC!78XPT>F;90$d zJ_!Jro`RgsWPUeA_C>n>D56JEeAhT|?j#SPelz%V4q>3~ZPapo3q+nJ_A?jqJ)i?S(JJ;RJzFJRrP zlhDYA)H@l-GRE&)Vo7MZ?!;PuhH`R|f#Ur-2@QY5a&Afduv7t1{1M)XOZJ5ToaNYd z;~=o!wl)9^jzLy*s3DwJ0KCs};9Y*z9j%Mg=t|kaZs3JOs{4TgfW;hVtR`f3zXY+h zdUZ4K`v64iTab1Sn3K>PY(w7Qc*T?r@eB*mc3$8O@p{@7HXp-3%MSQ3Z)~1v70jC) zuLi?Z{=UfZI!C@{PU?K^T&y+8`pNENkAT-W-a&xDFe~OzE^9T2f3H|+Qvi?y@bZfh p?HgRvmIjb&O9M!?r2(Yc{s$l2wJRpk{*eFx002ovPDHLkV1gzKz-Ryf literal 0 HcmV?d00001 diff --git a/www2/examples/network/img/soft-scraps-icons/Folder-icon24.png b/www2/examples/network/img/soft-scraps-icons/Folder-icon24.png new file mode 100644 index 0000000000000000000000000000000000000000..16d050846ffe218089d2306d6064ce8bdf2e6718 GIT binary patch literal 691 zcmV;k0!;mhP)L z-#B!!Nf^w{FRbkFtcI@RnfH3|?zsR4h6fG_SDRd6fFL#dkxQF{E$dhnKrAKDaXvn+ z2d8G91iH2!yj7jISi$$l$B;|dv8h>tLjr89M8?b#{dU-nrv*AM&xdvQOJw|rU+z9F z%-mwh7Pk8B874#Hf^r~t6NwfFNCzT`1RORZJ3DqssKQ3!@CF>dADJ!zjP3W!JNkGc zGA0$4cG1s81?3Y|idQH|P1A>Wuh89}Gyq0>eDe0*IyO`dDP$1)Isqj(W3*`0=a)Nn z)of9@|5uKdC*&3&GPBGuO3|Nyauz0ocAxCsR)3|UzzdTE@^N70hp~Z564L=r!C)}v z_RF%oItD`HYSSdtl%T?L#r!DaDJM+^&zt@7=GH0z`kM!|9G|$Hb&IS3PM82M?0(tf zv>2dq#VS{<)?NcEfTJcrhOk{D82b&i$2Z0#m;u6u`Qa909*FpvmShS^%5@J zyi!JUjR5@6wL8G=A&lrj59=eZg1%N)WA5msWr&3cUb1K{O2ak z6@ZDMQTg3*#z>?9dl@B+P6NKeruR-e;{rBBLoOx-iSdRb{E>3{0vvdKLEKLUVrkQ(>^+O(QgU6|b>`^=Sf?H*~6L}3IZv^1= z`DCoSV5J|BRJhMI05J>Pk}khc84=5R{a&+gZR>s zhUQie;=NiV%$Kl`gBh!rVBmz*h%0L~ko0^)dQLIj)VUO+g`;Z}m)aG;Ap#1^*ufau zZ47;YufG|CLtmLto=7S}l9crwIGOqbeB&DQemCICZ3(rnh68|90&)uoFoZRpkXc(~ zpSth*JV4)5oT-0@;wDc3aD;%9N6C)~4-jf|51{;7BXVva0I(2{zMB9wB_Pb^()KBS0JOt#XeWW#VBT#YQL3*u#F0fLaBRLBN4U1cXx6 zn8fE|!Z9A5s*(l)S_!zS05S>KzW_7u&P*b6TxGX^Ifa-s2+%@6l>)GeCt&ysz~>)Z zF{vWd>`eqzD1aOR(E2OZ7Z|OabH)aBx=g{26eIfKmmJFP34H0SyF{ zD1fsB9F8*JCIOcfK#|UDwaj7}{!OcJxRGu1DgcOSVZ4{oYVoa1sq8Pt^t>USwLY+gNs%y zc3dqe`vf9(eN&jXJRg=@d!qzq14n>zxsjWTc}eCb95#O4E~0ad`IMKP`Xu}ODwWsv zNwZm=9hagXfu$?&B=PD)#GdI`esNXFl4V=!ga_r>iWQ-D=Wu>+7MyY^I5KB6`)d2I zv`@9GT(&hRH@=kt+y{KJY%$UC9g1+x-oR8`LBf%(2Na1?x1+zN=ws(_n5pLsiPQB$ zEjZ8Ni-lK^r19T{#HqhkF5eLtCeQ%Xe*FSb^_nM$Zr(ip91jMFkFTO&AfIwv$&^z3 zajG*+i(bAU&7+b)Gf?TRBl4{KOmNQ3m{m_G17`cg!@R$-jizh4V$KW~=ekiBiV)z# zF2#_jg3?r?Qk5!^w!mqm(_|0(jf2FWU145Q*EyU4gTU(`P*X41U6dLEZB2a1e}F!3 zRz%P%_&OAGVYU$YZsKXElN^T-Zjf;*1`$1CC;m7TCZ}YGNTrRSu?<@oewRbEcB_2P zo(nMqs=RN4K=n>cC`?hJaYywZB=?3S;B63Cz7ZM7 zO-&8hv=csV@L%Em`D4Ci8^vUx(z_c3Zd)hVkrO#cmOaPVX5UzI618p5)j~}D9VGf% zh3|A5ms$u^dC}#0maIl~WoKF^BZJYG450NKXa~;YzM$%EUk6d?<7AQ0UJzJRAy~=E ztb|x)3I!mQPQe2gSnA$7$Jb6=y45NnydrqYmV$sg{RCJu?oy$E;81|&%Evp-*9HQQ zS|#)@2$U|wZdbbWf!4Jb=*D~1B||PY2MAE<7ORBzfxv=!Xdaytm;pQow0@>=4~g)9 zx?GaUoSuPARtez+%`^W75KvNl7sAE0K_>Mw3ANAAc)S|0OJJi_LLY!Y$qejPQlk(J z4;pR20IMk#pDv*dRtX&dfw@Jd3?v~T`97e9V1$gqw6Us5Wx$UNthY+&BS|0+6GdVK zWS~3*BWye9ln|)3O6XG%xGBrt%djqQ)sV(WNu+J~&Ot)=TP5^`B;bs{TC5pe;aCz% zM=vBZa26R@XO$3Ich8MtWTLqxCZ0UaT$DhKRYHd(fwZe3ISHMGgw|Rm)Fg}8{%U13 z1Fguwy;cbwnPLQ1TL~PUVg#yU2~>Go1fIm1R=2(3`wKO&Qs-l;fx|hpV2&%1|DugG zCs8}`|IGP^xU{<8l7a6bp?R5JTbmg;gA7#AFo8y3?TN!gx8FK7YT&0|h?iCCAsmtf zo(A67^dQlDyQT(#%}){UYtTb@MiRJQW(7~)>94&=v>h+YPG_b?GWw9;9(L{_dhQjy z1^WjsPqcHp8$dHbdBwAc7kY>kWpWj@fsNB{r; literal 0 HcmV?d00001 diff --git a/www2/examples/network/img/soft-scraps-icons/Folder-icon64.png b/www2/examples/network/img/soft-scraps-icons/Folder-icon64.png new file mode 100644 index 0000000000000000000000000000000000000000..6c5d457aa6d13f68f28253ec4180b051899f6e67 GIT binary patch literal 1771 zcmV;P)>{9t5Old5y2RZR3ro>h!=`cV>}26m|!$2cp%D6 zjDXRYpaBgPu}U~pVuC0djP26xwQV`vw7c^)}Vk6#z`4 zwo-j8uJ<@KgZfP-fSahjR1c9UDWOMq0=@FhsmxmgZ2uTIawJ|1?nZCGO?0MeHccqQA?;5B2!?tA`*w^qw-i~$fqAENq-%xF#zGdU>@DbRXNTFifz$^at51HTOe zavUfrk^q1DOU?jSBp6|XZ@ zyqQOmLUTQ+-^Zb_9BaxHRQ_N?|9m?N^K8g*D#+&MD2rQzOuK>%a&ZcACT12ko1$-B zm8k4CC^m5+A;sQ4ugSr`6F0HxQ~IbCH8^q72*8_6jbRVSEHD><7zT%*L&#Z)FMd++ z%T61z6$QDRZZrrE9YTg93c;qupvMyfpamN()agWjD;gN>dhA-XToE_nwTY|hP<`46 zz)Ge@avWs1%mpAU*u>)qiK|}tx!W#LakoCXP8wLNA;f# z**H>`gN0ig;cGSmz!eI^xcv3#WetFiruxmfZ@>rCmI0yT*zd{3^cPyu*wPU|-zb2g zk8#lD$pK)haow-nh8EQW_X9vfb7CKm0I-@V_dEjVDcf6ftgQ<0eu_blbI+sibUOfe zkEwy&4mxvXyPAFz^Gow_&N=09Kf=!7GXn5FQ~mGanj>$Yp5CC@&HZfZ)=Itg!y&EM zy)YGkwM-RG=29W&l$M^LBV1w`T^m;wzc(Iqvbh%+0Vs$9aE-qN0YvnDMS!jCuQ3ez z902u30C*TeZ=Qv1nX)6gFbna78Du1Z`hN|&9f0|%0Ekr25$pk76oBa7Y72vI)D;PK z>NaAbGX}7UshsQB1Jd*iAYG=m0cTIL#ZR%NI~R020CQ6T5Kl|9uO+y13e! z_LfcwV0J11A2H>0nfEv>9yE7lVZSbMBDC1tvr+-r#*`!98~|F-L4D?y5Og~LrA7ey z5x{l8+?xu( zXNc|rI`O_vw6HjQbkU&O0k}IAfE}XD5r3w3{(vLUT3ZV^B0Hvw12Dq~09U^X@oH3b z|C9hC(O6@_Uz+BgP5?DV0CtKpqu?*yU=0CGO9kLd*{)dxV2Tld{si!qY}YITFqr_V zjR2I%cFiIH6H@`$Bil8L08B6fP(%QGWxHk(fD!`m8UZMm?V3dZZc72+ukXY=L2KXD zTW=}`-`ZpVU;qK^(ym|L#`YaNl|7)!06@h-+1^=W?y+$ITLgd)s0A+ee&12qu32M! zuLl~MwB%X=U=gC9t{&h{aO_Cg?wM-`4+G<-#IsKb0Neqff^rtKYkbWkaYh$=DxNM2 z1c5tv6yB!~b@2ew9Xt7mk7J$`iAg1#6jlR8{bakFUK5|j&U+Nty*FO8idq~4AYKK1 zLyZ#|@frL0VnRsgx8gE`=fUUOeQff?L+1n3?UX?_`hiwSX-Y==!Y@$CB{szqds z4*z4Q2ch?d%jH`c@lR8t)x}4lhmtSI{--JF)(t?m1G23ffNTe3+dmSwJ_Hi#dGG)L N002ovPDHLkV1fXtCQ1MR literal 0 HcmV?d00001 diff --git a/www2/examples/network/img/soft-scraps-icons/Smiley-Angry-icon.png b/www2/examples/network/img/soft-scraps-icons/Smiley-Angry-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f40bc381b951af8fc418a9816b33dce90fbba030 GIT binary patch literal 3210 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 literal 0 HcmV?d00001 diff --git a/www2/examples/network/img/soft-scraps-icons/User-Administrator-Blue-icon.png b/www2/examples/network/img/soft-scraps-icons/User-Administrator-Blue-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ba2ffac73718abfc5a1d4e0d3dfcaa4201fea7b6 GIT binary patch literal 3901 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 LNkvXXu0mjf!el#T literal 0 HcmV?d00001 diff --git a/www2/examples/network/img/soft-scraps-icons/User-Administrator-Green-icon.png b/www2/examples/network/img/soft-scraps-icons/User-Administrator-Green-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a3d3167785d95927c0699b5e9f3c58ac43c77aaf GIT binary patch literal 3906 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 literal 0 HcmV?d00001 diff --git a/www2/examples/network/img/soft-scraps-icons/User-Coat-Green-icon.png b/www2/examples/network/img/soft-scraps-icons/User-Coat-Green-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..4a4326b749ed16552a3db1fff820d53a29594c84 GIT binary patch literal 3571 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 Sw%*AA0000)oZU}yJ~@ZOWNC8 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 TfngXZ00000NkvXXu0mjf7*j=+ literal 0 HcmV?d00001 diff --git a/www2/examples/network/img/soft-scraps-icons/User-Preppy-Blue-icon.png b/www2/examples/network/img/soft-scraps-icons/User-Preppy-Blue-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b3c774083ec033c622e17a995397c318d94eb750 GIT binary patch literal 3802 zcmV<04khu4P)u)XOFk)nuO{)aJN zCv?RL2#4Ivs5DuukUP2q{B`ekBN$ zF%GfjOsPf`Yy(l z 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 Q&j0`b07*qoM6N<$f?a(FSpWb4 literal 0 HcmV?d00001 diff --git a/www2/examples/network/img/soft-scraps-icons/User-Preppy-Red-icon.png b/www2/examples/network/img/soft-scraps-icons/User-Preppy-Red-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f569776ea011a9bbd1488f51c350e6aec7dc2071 GIT binary patch literal 3800 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 Visit artist homepage for details). + diff --git a/www2/examples/network/index.html b/www2/examples/network/index.html new file mode 100644 index 00000000..d3d4d6ad --- /dev/null +++ b/www2/examples/network/index.html @@ -0,0 +1,52 @@ + + + + + vis.js | Network examples + + + + + +

+ + \ No newline at end of file diff --git a/www2/examples/timeline/01_basic.html b/www2/examples/timeline/01_basic.html new file mode 100644 index 00000000..289555f7 --- /dev/null +++ b/www2/examples/timeline/01_basic.html @@ -0,0 +1,39 @@ + + + + Timeline | Basic demo + + + + + + + +
+ + + + \ No newline at end of file diff --git a/www2/examples/timeline/02_interactive.html b/www2/examples/timeline/02_interactive.html new file mode 100644 index 00000000..e555b29c --- /dev/null +++ b/www2/examples/timeline/02_interactive.html @@ -0,0 +1,67 @@ + + + + Timeline | Interactive example + + + + + + + + +

Drag items around, create new items, and remove items.

+ +
+ + + + \ No newline at end of file diff --git a/www2/examples/timeline/03_performance.html b/www2/examples/timeline/03_performance.html new file mode 100644 index 00000000..665b473a --- /dev/null +++ b/www2/examples/timeline/03_performance.html @@ -0,0 +1,64 @@ + + + + Timeline | a lot of data + + + + + + + + + + +

+ Test with a lot of data +

+

+ + + +

+
+ + + + \ No newline at end of file diff --git a/www2/examples/timeline/04_html_data.html b/www2/examples/timeline/04_html_data.html new file mode 100644 index 00000000..c7c1609d --- /dev/null +++ b/www2/examples/timeline/04_html_data.html @@ -0,0 +1,74 @@ + + + + Timeline | HTML data + + + + + + + + +

+ Load HTML contents in the Timeline +

+
+ + + + \ No newline at end of file diff --git a/www2/examples/timeline/05_groups.html b/www2/examples/timeline/05_groups.html new file mode 100644 index 00000000..7182670f --- /dev/null +++ b/www2/examples/timeline/05_groups.html @@ -0,0 +1,73 @@ + + + + Timeline | Group example + + + + + + + + + + +

+ This example demonstrate using groups. Note that a DataSet is used for both + items and groups, allowing to dynamically add, update or remove both items + and groups via the DataSet. +

+
+ + + + \ No newline at end of file diff --git a/www2/examples/timeline/06_event_listeners.html b/www2/examples/timeline/06_event_listeners.html new file mode 100644 index 00000000..df240ce4 --- /dev/null +++ b/www2/examples/timeline/06_event_listeners.html @@ -0,0 +1,60 @@ + + + + Timeline | Event listeners + + + + + + + +
+

+
+ + + + \ No newline at end of file diff --git a/www2/examples/timeline/07_custom_time_bar.html b/www2/examples/timeline/07_custom_time_bar.html new file mode 100644 index 00000000..d40b76fc --- /dev/null +++ b/www2/examples/timeline/07_custom_time_bar.html @@ -0,0 +1,65 @@ + + + + Timeline | Show current and custom time bars + + + + + + + + +

+ + +

+

+ + +

+

+ timechange event: +

+

+ timechanged event: +

+ +
+ + + + \ No newline at end of file diff --git a/www2/examples/timeline/08_edit_items.html b/www2/examples/timeline/08_edit_items.html new file mode 100644 index 00000000..9948098b --- /dev/null +++ b/www2/examples/timeline/08_edit_items.html @@ -0,0 +1,106 @@ + + + + Timeline | Edit items + + + + + + + +

+ This example shows how to use callback functions onAdd, onMove, onMoving, onUpdate, and onRemove. The onMoving function updates an item while dragging, and can be used to prevent the item from being drawn at disallowed or infeasible timeslots. In this example, the items cannot be moved outside of the month April 2013. The other callback functions are called after an add, move, update, or remove action has taken place, and can be used to cancel these actions. +

+ +
+

+
+ + + + \ No newline at end of file diff --git a/www2/examples/timeline/09_order_groups.html b/www2/examples/timeline/09_order_groups.html new file mode 100644 index 00000000..7b1bd16e --- /dev/null +++ b/www2/examples/timeline/09_order_groups.html @@ -0,0 +1,67 @@ + + + + Timeline | Order groups + + + + + + + +

+ This example demonstrate custom ordering of groups. +

+
+ + + + \ No newline at end of file diff --git a/www2/examples/timeline/10_limit_move_and_zoom.html b/www2/examples/timeline/10_limit_move_and_zoom.html new file mode 100644 index 00000000..2f622cb7 --- /dev/null +++ b/www2/examples/timeline/10_limit_move_and_zoom.html @@ -0,0 +1,52 @@ + + + + Timeline | Limit move and zoom + + + + + + + +

+ The visible range is limited in this demo: +

+
    +
  • minimum visible date is limited to 2012-01-01 using option min
  • +
  • maximum visible date is limited to 2013-01-01 (excluded) using option max
  • +
  • visible zoom interval is limited to a minimum of 24 hours using option zoomMin
  • +
  • visible zoom interval is limited to a maximum of about 3 months using option zoomMax
  • +
+
+ + + + \ No newline at end of file diff --git a/www2/examples/timeline/11_points.html b/www2/examples/timeline/11_points.html new file mode 100644 index 00000000..9ae67166 --- /dev/null +++ b/www2/examples/timeline/11_points.html @@ -0,0 +1,59 @@ + + + + Timeline | Points + + + + + + + +

World War II timeline

+

Source: http://www.onwar.com/chrono/index.htm

+
+ +
+ + + + diff --git a/www2/examples/timeline/12_custom_styling.html b/www2/examples/timeline/12_custom_styling.html new file mode 100644 index 00000000..e43ab3fb --- /dev/null +++ b/www2/examples/timeline/12_custom_styling.html @@ -0,0 +1,92 @@ + + + + Timeline | Custom styling + + + + + + + + + +
+ + + + \ No newline at end of file diff --git a/www2/examples/timeline/13_past_and_future.html b/www2/examples/timeline/13_past_and_future.html new file mode 100644 index 00000000..019dde17 --- /dev/null +++ b/www2/examples/timeline/13_past_and_future.html @@ -0,0 +1,88 @@ + + + Timeline | Past and future + + + + + + + + +

+ When the custom time bar is shown, the user can drag this bar to a specific + time. The Timeline sends an event that the custom time is changed, after + which the contents of the timeline can be changed according to the specified + time in past or future. +

+ +
 
+

+ +
+ + + + + + diff --git a/www2/examples/timeline/14_group_performance.html b/www2/examples/timeline/14_group_performance.html new file mode 100644 index 00000000..3cafa6b9 --- /dev/null +++ b/www2/examples/timeline/14_group_performance.html @@ -0,0 +1,109 @@ + + + Timeline | A lot of grouped data + + + + + + + + +

Timeline grouping performance

+ +

+ Choose a number of items: + 100, + 1000, + 10000, + 100000 +

+

+ Current number of items: 100 +

+ +
+ + + + + diff --git a/www2/examples/timeline/15_item_class_names.html b/www2/examples/timeline/15_item_class_names.html new file mode 100644 index 00000000..ea1d14ef --- /dev/null +++ b/www2/examples/timeline/15_item_class_names.html @@ -0,0 +1,116 @@ + + + Timeline | Item class names + + + + + + + + +

This page demonstrates the Timeline with custom css classes for individual items.

+ +
+ + + + diff --git a/www2/examples/timeline/16_navigation_menu.html b/www2/examples/timeline/16_navigation_menu.html new file mode 100644 index 00000000..7c5153be --- /dev/null +++ b/www2/examples/timeline/16_navigation_menu.html @@ -0,0 +1,88 @@ + + + + Timeline | navigation menu + + + + + + + +
+ +
+ + + + \ No newline at end of file diff --git a/www2/examples/timeline/17_data_serialization.html b/www2/examples/timeline/17_data_serialization.html new file mode 100644 index 00000000..80d73f7b --- /dev/null +++ b/www2/examples/timeline/17_data_serialization.html @@ -0,0 +1,120 @@ + + + + Timeline | Data serialization + + + + + + + + +

Serialization and deserialization

+ +

This example shows how to serialize and deserialize JSON data, and load this in the Timeline via a DataSet. Serialization and deserialization is needed when loading or saving data from a server.

+ + + +
+ + +
+ +
+ + + + \ No newline at end of file diff --git a/www2/examples/timeline/18_range_overflow.html b/www2/examples/timeline/18_range_overflow.html new file mode 100644 index 00000000..8f9f7506 --- /dev/null +++ b/www2/examples/timeline/18_range_overflow.html @@ -0,0 +1,53 @@ + + + + Timeline | Range overflow + + + + + + + + +

+ In case of ranges being spread over a wide range of time, it can be interesting to have the text contents of the ranges overflow the box. This can be achieved by changing the overflow property of the contents to visible with css: +

+
+.vis.timeline .item.range .content {
+  overflow: visible;
+}
+
+ +
+ + + + \ No newline at end of file diff --git a/www2/examples/timeline/19_localization.html b/www2/examples/timeline/19_localization.html new file mode 100644 index 00000000..e2624abd --- /dev/null +++ b/www2/examples/timeline/19_localization.html @@ -0,0 +1,65 @@ + + + + Timeline | Localization + + + + + + + + +

+ To localize the Timeline, one has to load a version of moment.js including locales. To set a locale, specify option {locale: STRING}. +

+ +

+ + +

+ +
+ + + + \ No newline at end of file diff --git a/www2/examples/timeline/20_click_to_use.html b/www2/examples/timeline/20_click_to_use.html new file mode 100644 index 00000000..46e1a567 --- /dev/null +++ b/www2/examples/timeline/20_click_to_use.html @@ -0,0 +1,72 @@ + + + + Timeline | Click to use + + + + + + + +
+

Timeline click to use

+

+ This example demonstrates how to use the clickToUse option: before you can scroll and drag in the timeline, you first have to click in the timeline to activate. +

+
+ + + + \ No newline at end of file diff --git a/www2/examples/timeline/21_set_selection.html b/www2/examples/timeline/21_set_selection.html new file mode 100644 index 00000000..82e64888 --- /dev/null +++ b/www2/examples/timeline/21_set_selection.html @@ -0,0 +1,65 @@ + + + + Timeline | Select items + + + + + + + +

Set selection

+

+ Enter one or multiple ids of items, then press select to select the items. This demo uses the function Timeline.setSelection(ids). Optionally, the window can be moved to the selected items. +

+ +

+ Select item(s):
+ +

+
+ + + + \ No newline at end of file diff --git a/www2/examples/timeline/22_window_adjustment.html b/www2/examples/timeline/22_window_adjustment.html new file mode 100644 index 00000000..cade9b07 --- /dev/null +++ b/www2/examples/timeline/22_window_adjustment.html @@ -0,0 +1,94 @@ + + + + Timeline | Adjusting window + + + + + + + + +

This example demonstrates functions to adjust the visible window of the Timeline.

+ +
+
+
+
+
+
+
+
+ +
+ + + + \ No newline at end of file diff --git a/www2/examples/timeline/23_data_attributes.html b/www2/examples/timeline/23_data_attributes.html new file mode 100644 index 00000000..477f1a80 --- /dev/null +++ b/www2/examples/timeline/23_data_attributes.html @@ -0,0 +1,43 @@ + + + + Timeline | Basic demo + + + + + + + +

+ In this example all items get an HTML attribute attached: each item gets an attribute data-id, and items 1 and 6 have an additional attribute data-tooltip. +

+ +
+ + + + \ No newline at end of file diff --git a/www2/examples/timeline/24_all_data_attributes.html b/www2/examples/timeline/24_all_data_attributes.html new file mode 100644 index 00000000..dc077aa3 --- /dev/null +++ b/www2/examples/timeline/24_all_data_attributes.html @@ -0,0 +1,43 @@ + + + + Timeline | Basic demo + + + + + + + +

+ In this example all items get HTML attributes attached: each item gets data-? attributes for each field defined on the JS object. +

+ +
+ + + + \ No newline at end of file diff --git a/www2/examples/timeline/25_background_areas.html b/www2/examples/timeline/25_background_areas.html new file mode 100644 index 00000000..777baa9c --- /dev/null +++ b/www2/examples/timeline/25_background_areas.html @@ -0,0 +1,52 @@ + + + + Timeline | Background areas + + + + + + + + +

This example demonstrates the item type "background", see "Period A" and "Period B". The background areas can be styled with css.

+ +
+ + + + \ No newline at end of file diff --git a/www2/examples/timeline/26_external_data.html b/www2/examples/timeline/26_external_data.html new file mode 100644 index 00000000..df8e68d4 --- /dev/null +++ b/www2/examples/timeline/26_external_data.html @@ -0,0 +1,58 @@ + + + + Timeline | External data + + + + + + + + + + +

Load external data

+

+ This demo shows how to load external data via an ajax call. +

+
+
loading...
+ + + + \ No newline at end of file diff --git a/www2/examples/timeline/27_templates.html b/www2/examples/timeline/27_templates.html new file mode 100644 index 00000000..eb68de13 --- /dev/null +++ b/www2/examples/timeline/27_templates.html @@ -0,0 +1,250 @@ + + + + Timeline | Templates + + + + + + + + + + + + +

WK 2014

+

+ This example demonstrates using templates to format item contents. In this case handlebars is used as template engine, but you can just use your favorite template engine or manually craft HTML from the data of an item. +

+ +
+ +
+ + + + \ No newline at end of file diff --git a/www2/examples/timeline/29_hiding_times.html b/www2/examples/timeline/29_hiding_times.html new file mode 100644 index 00000000..edf2577e --- /dev/null +++ b/www2/examples/timeline/29_hiding_times.html @@ -0,0 +1,50 @@ + + + + Timeline | Hiding times demo + + + + + + + +
+ + + \ No newline at end of file diff --git a/www2/examples/timeline/30_subgroups.html b/www2/examples/timeline/30_subgroups.html new file mode 100644 index 00000000..d042b81d --- /dev/null +++ b/www2/examples/timeline/30_subgroups.html @@ -0,0 +1,75 @@ + + + + Timeline | Background areas + + + + + + + + +

This example shows the workings of the subgroups. Subgroups do not use stacking, and only work when stacking is disabled.

+ +
+ + + + \ No newline at end of file diff --git a/www2/examples/timeline/31_background_areas_with_groups.html b/www2/examples/timeline/31_background_areas_with_groups.html new file mode 100644 index 00000000..b557b5a2 --- /dev/null +++ b/www2/examples/timeline/31_background_areas_with_groups.html @@ -0,0 +1,56 @@ + + + + Timeline | Background areas with groups + + + + + + + + +

This example demonstrates the item type "background" when using groups.

+
    +
  • Background items having a group are displayed in that group
  • +
  • Background items without a group are spread over the whole timeline
  • +
  • Background items with a non-existing group are not displayed
  • +
+
+ + + + \ No newline at end of file diff --git a/www2/examples/timeline/data/basic.json b/www2/examples/timeline/data/basic.json new file mode 100644 index 00000000..711dd8e2 --- /dev/null +++ b/www2/examples/timeline/data/basic.json @@ -0,0 +1,34 @@ +[ + { + "id": 1, + "content": "item 1", + "start": "2014-04-20" + }, + { + "id": 2, + "content": "item 2", + "start": "2014-04-14" + }, + { + "id": 3, + "content": "item 3", + "start": "2014-04-18" + }, + { + "id": 4, + "content": "item 4", + "start": "2014-04-16", + "end": "2014-04-19" + }, + { + "id": 5, + "content": "item 5", + "start": "2014-04-25" + }, + { + "id": 6, + "content": "item 6", + "start": "2014-04-27", + "type": "point" + } +] \ No newline at end of file diff --git a/www2/examples/timeline/data/wk2014.json b/www2/examples/timeline/data/wk2014.json new file mode 100644 index 00000000..2bcb3d75 --- /dev/null +++ b/www2/examples/timeline/data/wk2014.json @@ -0,0 +1,152 @@ +[ + { + "player1": "Brazil", + "abbr1": "br", + "score1": "1 (3)", + "player2": "Chile", + "abbr2": "cl", + "score2": "1 (2)", + "description": "round of 16", + "start": "2014-06-28 13:00" + }, + { + "player1": "Colombia", + "abbr1": "co", + "score1": 2, + "player2": "Uruguay", + "abbr2": "uy", + "score2": 0, + "description": "round of 16", + "start": "2014-06-28 17:00" + }, + { + "player1": "Netherlands", + "abbr1": "nl", + "score1": 2, + "player2": "Mexico", + "abbr2": "mx", + "score2": 1, + "description": "round of 16", + "start": "2014-06-29 13:00" + }, + { + "player1": "Costa Rica", + "abbr1": "cr", + "score1": "1 (5)", + "player2": "Greece", + "abbr2": "gr", + "score2": "1 (3)", + "description": "round of 16", + "start": "2014-06-29 17:00" + }, + { + "player1": "France", + "abbr1": "fr", + "score1": 2, + "player2": "Nigeria", + "abbr2": "ng", + "score2": 0, + "description": "round of 16", + "start": "2014-06-30 13:00" + }, + { + "player1": "Germany", + "abbr1": "de", + "score1": 2, + "player2": "Algeria", + "abbr2": "dz", + "score2": 1, + "description": "round of 16", + "start": "2014-06-30 17:00" + }, + { + "player1": "Argentina", + "abbr1": "ar", + "score1": 1, + "player2": "Switzerland", + "abbr2": "ch", + "score2": 0, + "description": "round of 16", + "start": "2014-07-01 13:00" + }, + { + "player1": "Belgium", + "abbr1": "be", + "score1": 2, + "player2": "USA", + "abbr2": "us", + "score2": 1, + "description": "round of 16", + "start": "2014-07-01 17:00" + }, + { + "player1": "France", + "abbr1": "fr", + "score1": 0, + "player2": "Germany", + "abbr2": "de", + "score2": 1, + "description": "quarter-finals", + "start": "2014-07-04 13:00" + }, + { + "player1": "Brazil", + "abbr1": "br", + "score1": 2, + "player2": "Colombia", + "abbr2": "co", + "score2": 1, + "description": "quarter-finals", + "start": "2014-07-04 17:00" + }, + { + "player1": "Argentina", + "abbr1": "ar", + "score1": 1, + "player2": "Belgium", + "abbr2": "be", + "score2": 0, + "description": "quarter-finals", + "start": "2014-07-05 13:00" + }, + { + "player1": "Netherlands", + "abbr1": "nl", + "score1": "0 (4)", + "player2": "Costa Rica", + "abbr2": "cr", + "score2": "0 (3)", + "description": "quarter-finals", + "start": "2014-07-05 17:00" + }, + { + "player1": "Brazil", + "abbr1": "br", + "score1": 1, + "player2": "Germany", + "abbr2": "de", + "score2": 7, + "description": "semi-finals", + "start": "2014-07-08 17:00" + }, + { + "player1": "Netherlands", + "abbr1": "nl", + "score1": "0 (2)", + "player2": "Argentina", + "abbr2": "ar", + "score2": "0 (4)", + "description": "semi-finals", + "start": "2014-07-09 17:00" + }, + { + "player1": "Germany", + "score1": 1, + "abbr1": "de", + "player2": "Argentina", + "abbr2": "ar", + "score2": 0, + "description": "final", + "start": "2014-07-13 16:00" + } +] \ No newline at end of file diff --git a/www2/examples/timeline/img/Hardware-Mobile-Phone-icon.png b/www2/examples/timeline/img/Hardware-Mobile-Phone-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..66a6d35fc329c86b12d57185fb82879b471c5546 GIT binary patch literal 3463 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 literal 0 HcmV?d00001 diff --git a/www2/examples/timeline/img/attachment-icon.png b/www2/examples/timeline/img/attachment-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..fc82517762e5c83e8030e4947fd0b5ed62e73b4d GIT binary patch literal 2774 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 literal 0 HcmV?d00001 diff --git a/www2/examples/timeline/img/blog-post-edit-icon.png b/www2/examples/timeline/img/blog-post-edit-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..12ab23c64717a0b361a739661f5bdabf16df85a6 GIT binary patch literal 4225 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 X4%%syG(5Yu00000NkvXXu0mjfMVmS1 literal 0 HcmV?d00001 diff --git a/www2/examples/timeline/img/comments-icon.png b/www2/examples/timeline/img/comments-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..736789edd6ffce59fd55e89948bd5ead588a8106 GIT binary patch literal 3173 zcmV-r44U(aP) zphX2CDpHO#2LUI9keFOJPK=${iEZrI@fqLV%e(8nUjO%IW<9$ZJ5ETV^5oh1XJ$R~ zfA9bP|9$@~Mz>(>Km1MBxId6T?)NYAjR!KuyuKNsP&hkGh#oF0FvcE*0*`3as#cv= zV^^zGb#YqF1r^6#++4oOem&2^H_Pe0Umi{M_{O)5I$RIAy}n|Vk~10g@z`wCW4$g8 z#c9+;sZ_G(g+d|X^9L{hLr&Ki8gaS^01m;WAw#_G9Q@B7_kKDlMZ< z_wW0MM|Wscs>Hm^bd;5zj4UPtQma)6V+CxOe~`F`LD&aj`*0|X9PTkRIBG}j-F>L@ z${@Y!wwUz06HUf9w{I%1xg`KT{`}BG-F-uE01Z-03vzL0S~5~{98my2utGt(LNN25 z{!yDg4-5ViOn4Lw2MinzhrtNbXyDe4UewTfnK;~@aAJaCk2S&g!uE~j9XAC4%(@z8 z?4|x;`wMe(v(!a-nM9*jgU{f!LJ8yOjyle9Y>#;m zY@^q3XkyAVfh(I`up=t?sh}r&tpPZ^| z#O*!($d;V=+++7|di}Zq>^XR(q^+l~YH3lvCdZaaIO;Uayx;F99*+m}5dhj?oS-iA8L8Hd4{f>o*mVJT?~~7VLd||;?V=*Y zDU~!~dFrr@&N#oPmFI^H8WkwDj6Q5n>BJ}%g0kyDUmUN7vaG3soj3jh9Gcdv_S9 zv}M`=b{{-43;5T(y?i;+YSq+Pa9YWn_WQ?)XUro@8&)^@(nF94Mrw;*%g~EfCtwsd z8jY+ZgY!5D0EX=j^3}I>*lf_hHEjT&eEwBo&%kiQ!|PWu`cTJ}Y_AX~q>TE$)IYiN z;_S=OM>;|xeZ(yogoF;DFOHoB%HlKE1Hjfl;%M2jda(wi0izI=1Ae$6gc!n0*z7<8 z6Oa*D1>iIq6^W12VvSlugCMK}SeS4WsY0<7l3Zh#sN+GPP?$vko)-*}FHhBCNb0U> z1AxWL3fX@c!dC1VAIBqh7pn?l8N{Ma;1^c@JcJzt8U_$ZuhWnOy$;(_k`Ra_0>vQm z>{zEG6cnhIkYJ*x1OPmkgD1{{9X@wW0J|y<&$2t+zqY%^wtC0MXHsF7YPFywiwRkv zyy?I>P?dZ|f*c65MJUX|3;>Y>#M-dki3Ud;sBd_b`9yV6UX~3N&YFqRk`g1nO6eoD zX+j5Cq$!Pp$m<=4N^}Or$7$ZjQ#hUrtL=-hX#G^L(<*Z_(ok+jIN@iYL4d}cEZr3Ipi z+dz3Xv|L6Y!HLyu!bQ0@WJ^tEl}ng^c3-pE%yK9g1PTFwuTR$z0RLTzC1F(*04SAl zFzas&j5u}_%(N*==HwuqRtqvgkOp*tVgijRv={(Vr6~en^BDy|&^k~d!wif+5Jb(F zyGYH27EJBM#dFB=(s_|+NY@0Q4{mPnMrSX4KbD=IvT5Vm?|JNF*=W%t0)+bc>66*FzARMWsJtH7*NaykhkOe6xl<4nxUt*qCu#kwz2 zC@kcJ-eABgl?nv{0do3$6K=lTjSBN1|1xd3v8^)%cX{8MV0wA=l9H&V2E**9KxL>) zPqL%{0G=XjbyY^_61&}uAyP;bY|&8yBZ4}ex1*3g8| z(du)gr+HR1B^}rt!Vc}TS>D?|L&6y-t&|!fPe1X+n!@f$({!b76&4XRh|fKxCn(L+!be7 zcGl^{A{kvXSv16JB86Bq=!y%r-RU9~$IoJ*(RWWha^FH(0PlVJ`Tiucam$jT*--#Q z+E4&Ey2xKeA<=0m#iRhHQk>#3lqJ4#VG9-y#_RKu{YOtzKYD-lldUsk0etes;pbpk z{@cct3n7H+NTs1#pN7$HkABk^yI|pIQYlvF#~z!YX;G;ug(liakI#qpSDr>7&zp8U zd|#m~fQq9hGCQvf)~qNkOq`Kyov1=WLW}Qn#+fK_#iJ z)9E6#6*p*FkkjqyPfIeF+`VYlKF|AxMS6|IUQH} z_vL42%$+wo2MhIIT5TfXk9~b2N2ke}lgVDIh!h%iy6~ZsHAtgU9<(GFw}JBXP744X zRkaN!XlCBh$HhImbbbMXrsgX8&=I@1O;wFzX)_s(s7)nAWpy1rJPF*tr+mfYDSz;g zed^izMit2GCxCx10-a`L+fvzUL-9Fs5sTvQyomh;yHAdb3=Ey)8T_TP^C0}rGondfAtC1bPEaKq~W^tJ?=C*0jP zK!1(#!ud+z`Umk^&8{W$3xm_~>AC<&fW(7FDeWB?{`VbarCFe2BmTL@ym;8|5Y#K* z%~7v|pe$)4?(zDdk@p8(ZjWco=Np1DU2V|Coq|QG0{*{!VbL6NJ-*x!0C7}QR=rzV znD+#IlOUXeHn0;rT<(`OYV`?d0Zq_57yv*V{Y4V4+qG(yU8Pcv!SN7)?0{}-S`@h@ z08Z4L-vL$Xox;4V$hq3aR-{%c?&Blo`kbP@JFp7=6VEgPf|p5Kc)n=M>~+cmCf4pyPZ~>&z>IBlRm6 z7U}4lXb@cldg`3wIe8s7de7SmfDXuoXEiF-Yalzg`j$5OGwI5u^9xV@XaHRJzD)^H zcq`Ft++i^pa9da3pVyU@zVbuvd0PR{appY84yXH7U7YrJV;*mlL9Z)WR$Ao$(Ey<1 z*qL)2tgcTwTw{NMJa}epS?R7H6##J@`S!a!sHz*+l`VMlb^-VwilrKO3NlN*00000 LNkvXXu0mjfA!Y1$ literal 0 HcmV?d00001 diff --git a/www2/examples/timeline/img/community-users-icon.png b/www2/examples/timeline/img/community-users-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a77e239a3cb3df9cb8367d0beedbf1ab545fcaf0 GIT binary patch literal 4664 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 LNkvXXu0mjfwykOf literal 0 HcmV?d00001 diff --git a/www2/examples/timeline/img/product-icon.png b/www2/examples/timeline/img/product-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..fb12da43b3d7979fc6377f30398dbd12bcedded2 GIT binary patch literal 1594 zcmV-A2F3Y_P)3`Oy;0h7DOD~)MWi595e+d4w7XP@7D~Alfl#X$B8s5K5aT~F(O(*Y)F2@- zCQX%qs6e@xD0EAyn5IymQd)Ym+Z&~&H(Iys?#y`RTxMss3qLSXe|VacbLLFb_c`zP zeREDF{L4-HAK*U)Q1{aZ+wHDV?>ghBOp_#;yw$q|Iw!w6G}w!Q?l#D>4K~sxnXGFX zR8@hZsz^*qA&(mQUD7p`z9VnhNS*`zEsaXx_O3@?_#|%_K<$b5b~<7wd}wpUBRJ4b z#U)7>vC|Qx_uOnjYuy#t?GDoIkZm^l#}y@nP%wy;1zA)GnnFg>RW^c-Dx7f>KmZUJ zy!lb`(oc690M`rO8B2uPo$(L3LVtDw`tBqmEL#D(JDSmQ{Sp@^U6yox=0GTfIcclz z0T80kj**E7+-|$0siBFm;-Ec6Cp1X6+5>ZI~O3Gt&OO!EF;S@WSS!q zGyy!v`yEo^7NXU+s2Gm|YPpd$p)gc^U zVOY34mphPR=&o| zjze&Oa3XRD?!e5fFBm}ekv9y0u&@A;c^=4UYpO?8c?r#a_HBUSfZi8pZ)W0@N*9Y( z5hj2YdpW?5uSapfS^;_(S{rLoSypVsUwlObz>Dj*(5eWBf#t#79C&QyJ`V81W|D-$ zfrtc@!VWYyT*u|#in#q8K%)pyiSY7`Tlwxyd0-Y7a{;hwKLfb-{U)A-ChH^OuRGwY zuffIAGe{gi3EiC?R5&I!p27_F_hIF$+e{&d%mdZ*J)mozS*yQd09A)y3Fm;xb~cwG z&V{Dh8gzHv#MATBQE}djhU!XqmSrPu)EJyTdH_q;ZK6;bKL@NKP|X!U9hkM|YYuQI z$4!L1!@quE`*nccTU{8P@Blpn0z*T%cBve5pG~ECaHG|S@slQtvS1KUt%+!HLG{dD zo6i8Q9^Akk(5)5_R&n#`s0UyFVM!>l-Lk#&xoWsz{w!N7LiMD)^bG^}{lHo`5%os5 zpMQv`AU~eLAPfL1Yy~h}Fn^k@$>>R0e~Wk_s_gR5FD?h=#>O1IU*GUWN7Dj0rDtDZS87Ycw3HyJ2E%#?I=*yf?9 zr-xoVDlV2|*6bAc{eDbOo`L$hT8tZ)NX4&JT}Aeq73eSfSj50`B{Lk*T~Vz7WWh5h z_f!M`X)%vv;X=zOG&TJJhr@{zg-5Y4)s4QsUZg+21SMy^NP2iG6)QUZGxGNCM_=jt zMk0g(B0~@c;IPpFMoi5_dGl!ad^&&wCyy6m!NN2Ouqb^o&Xp900nYq_J$YZ^_OCl4 z$}l>BaEUhyKpGi}^|>=C0~ead5P&8MaO&i7%wLd-{=PoA7p0^0TnUnrlIUOX7M;Q8 zd-5=Neg_vv_(m+;7%nWDn*f}p0GIPKCXh)Bnc5`RI0VOMAf(9j+SPTd6Jy6F&@0!- z*f3#!4MvCV97t zbbU;eG-Zq({x~v^0V{ZYblj(AkaRy-Jp3WV3}}+Am(06JuO|IF9Y7Z$HxM{Y-Nn29 sE|#y|Pb2?mV2}gc;XNRFPEJnnFH4UWN> zrU6p1wW6qjsz{?D6*MGZ0?M{{sq4bR-fwf+o!PnU%$e&sGjn{;Fq?=j1&odV@Fj0% z<~x_?_rCA*ecv$nfd_LH;3~lP^`fVD?`10OwvHB0V`srIv~)J>OJ{PvoUZ$G`FwQq z-5ZPFJHYREzS!ur+1ANCdz+`euG48%>a129!*MJ)j)Nr0&~(knYWZ|K6Ubt*pvqZ^0|)*IgRY$~xeS2>6>5oSR)7G_ zFg+j$;-y>g$5#*B)8MYzHow-@Lat$W%2Y8kqB5ExnV*z-cshdav;BxAGZ^SS4Tf4I zlc1TkAW9`qm~G(7{Vx^^=DacJ^<5m`cROE_6`Om)D=e%@lCbDdV7KsaFhw-*27Xj6 zLyu1(98KWtWDf2M0g0Iq{G$WZYoXNh**2H}CWt`uR4xK@z?MJ%?VKzri-QFjzM_nAUBE~R z(8Wr+%Hqhac071=8VoPtm&~VVZEZm$rD1HKueA1AD);D20z>f>Qq;CKmlK?S7<_sL zr~dPA+<4O(V=x%5`s~<|nYm54{qKFW=G)A@JeSKrpf$hvnr1}e35-XwST^5@`%b2D zbDaY}Q@qgiJW_d}yZdttMq=onj>6@1qRFnnolhe^9VGMVxZ%b%c>nNwx&ATl{n4qw zdwMQwo(1`D0o=RkzCJ^0Y-?TMDJ?aR$Ah+}MX*^ESSZ8ZfngjzGmT|6EYj)Z`JGX+ zV%PrtCC9J-@p5!DHsIqA4N2OdH;rDBoWg{9I2y5jYyq=P0LnnKr!Xrs$!0ySs;XbuZB}D^eBz;0JoXVunFiF%g>eDE%3nRw zR_k{6wl>spHIh&|(I&h;h%PrcGGrjG;xX}G=&JcOqM;yO-L-?XvTE3XyuzJ<1O&iw!VJT(USIg7I*!1{~aE;g$K^{azTH`@@3cJn${)Q z_vXH#zSBMTmwTEl3nwVDvqt-0gPG$uK|rFADU@=^R7OQqtW^bFV_enlH$C<9?CtIC zIDGWz_ORdga#>g{gA^_$d@+D;UgIcu3gPQOJXOeQx38vuIN@k;@(t?mtZ?y?idO(I x*S+l5fXv_IW=1y;=_?ifE&%_RaTVYyz*l!zp+91aH)j9<002ovPDHLkV1m_RMTh_Z literal 0 HcmV?d00001 diff --git a/www2/examples/timeline/index.html b/www2/examples/timeline/index.html new file mode 100644 index 00000000..c02c1182 --- /dev/null +++ b/www2/examples/timeline/index.html @@ -0,0 +1,50 @@ + + + + + vis.js | timeline examples + + + + + + + + \ No newline at end of file diff --git a/www2/examples/timeline/requirejs/requirejs_example.html b/www2/examples/timeline/requirejs/requirejs_example.html new file mode 100644 index 00000000..d4e85f08 --- /dev/null +++ b/www2/examples/timeline/requirejs/requirejs_example.html @@ -0,0 +1,13 @@ + + + + Timeline requirejs demo + + + + + + +
+ + diff --git a/www2/examples/timeline/requirejs/scripts/main.js b/www2/examples/timeline/requirejs/scripts/main.js new file mode 100644 index 00000000..6549d024 --- /dev/null +++ b/www2/examples/timeline/requirejs/scripts/main.js @@ -0,0 +1,19 @@ +require.config({ + paths: { + vis: '../../../../dist/vis' + } +}); + +require(['vis'], function (vis) { + var container = document.getElementById('visualization'); + var data = new vis.DataSet([ + {id: 1, content: 'item 1', start: '2013-04-20'}, + {id: 2, content: 'item 2', start: '2013-04-14'}, + {id: 3, content: 'item 3', start: '2013-04-18'}, + {id: 4, content: 'item 4', start: '2013-04-16', end: '2013-04-19'}, + {id: 5, content: 'item 5', start: '2013-04-25'}, + {id: 6, content: 'item 6', start: '2013-04-27'} + ]); + var options = {}; + var timeline = new vis.Timeline(container, data, options); +}); diff --git a/www2/examples/timeline/requirejs/scripts/require.js b/www2/examples/timeline/requirejs/scripts/require.js new file mode 100644 index 00000000..8de013dc --- /dev/null +++ b/www2/examples/timeline/requirejs/scripts/require.js @@ -0,0 +1,35 @@ +/* + RequireJS 2.1.2 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved. + Available via the MIT or new BSD license. + see: http://github.com/jrburke/requirejs for details +*/ +var requirejs,require,define; +(function(Y){function H(b){return"[object Function]"===L.call(b)}function I(b){return"[object Array]"===L.call(b)}function x(b,c){if(b){var d;for(d=0;dthis.depCount&&!this.defined){if(H(n)){if(this.events.error)try{e=j.execCb(c,n,b,e)}catch(d){a=d}else e=j.execCb(c,n,b,e);this.map.isDefine&&((b=this.module)&&void 0!==b.exports&&b.exports!==this.exports?e=b.exports:void 0===e&&this.usingExports&&(e=this.exports));if(a)return a.requireMap=this.map,a.requireModules=[this.map.id],a.requireType="define",C(this.error=a)}else e=n;this.exports=e;if(this.map.isDefine&& +!this.ignore&&(p[c]=e,l.onResourceLoad))l.onResourceLoad(j,this.map,this.depMaps);delete k[c];this.defined=!0}this.defining=!1;this.defined&&!this.defineEmitted&&(this.defineEmitted=!0,this.emit("defined",this.exports),this.defineEmitComplete=!0)}}else this.fetch()}},callPlugin:function(){var a=this.map,b=a.id,d=h(a.prefix);this.depMaps.push(d);s(d,"defined",t(this,function(e){var n,d;d=this.map.name;var v=this.map.parentMap?this.map.parentMap.name:null,f=j.makeRequire(a.parentMap,{enableBuildCallback:!0, +skipMap:!0});if(this.map.unnormalized){if(e.normalize&&(d=e.normalize(d,function(a){return c(a,v,!0)})||""),e=h(a.prefix+"!"+d,this.map.parentMap),s(e,"defined",t(this,function(a){this.init([],function(){return a},null,{enabled:!0,ignore:!0})})),d=i(k,e.id)){this.depMaps.push(e);if(this.events.error)d.on("error",t(this,function(a){this.emit("error",a)}));d.enable()}}else n=t(this,function(a){this.init([],function(){return a},null,{enabled:!0})}),n.error=t(this,function(a){this.inited=!0;this.error= +a;a.requireModules=[b];E(k,function(a){0===a.map.id.indexOf(b+"_unnormalized")&&delete k[a.map.id]});C(a)}),n.fromText=t(this,function(e,c){var d=a.name,u=h(d),v=O;c&&(e=c);v&&(O=!1);q(u);r(m.config,b)&&(m.config[d]=m.config[b]);try{l.exec(e)}catch(k){throw Error("fromText eval for "+d+" failed: "+k);}v&&(O=!0);this.depMaps.push(u);j.completeLoad(d);f([d],n)}),e.load(a.name,f,n,m)}));j.enable(d,this);this.pluginMaps[d.id]=d},enable:function(){this.enabling=this.enabled=!0;x(this.depMaps,t(this,function(a, +b){var c,e;if("string"===typeof a){a=h(a,this.map.isDefine?this.map:this.map.parentMap,!1,!this.skipMap);this.depMaps[b]=a;if(c=i(N,a.id)){this.depExports[b]=c(this);return}this.depCount+=1;s(a,"defined",t(this,function(a){this.defineDep(b,a);this.check()}));this.errback&&s(a,"error",this.errback)}c=a.id;e=k[c];!r(N,c)&&(e&&!e.enabled)&&j.enable(a,this)}));E(this.pluginMaps,t(this,function(a){var b=i(k,a.id);b&&!b.enabled&&j.enable(a,this)}));this.enabling=!1;this.check()},on:function(a,b){var c= +this.events[a];c||(c=this.events[a]=[]);c.push(b)},emit:function(a,b){x(this.events[a],function(a){a(b)});"error"===a&&delete this.events[a]}};j={config:m,contextName:b,registry:k,defined:p,urlFetched:S,defQueue:F,Module:W,makeModuleMap:h,nextTick:l.nextTick,configure:function(a){a.baseUrl&&"/"!==a.baseUrl.charAt(a.baseUrl.length-1)&&(a.baseUrl+="/");var b=m.pkgs,c=m.shim,e={paths:!0,config:!0,map:!0};E(a,function(a,b){e[b]?"map"===b?Q(m[b],a,!0,!0):Q(m[b],a,!0):m[b]=a});a.shim&&(E(a.shim,function(a, +b){I(a)&&(a={deps:a});if((a.exports||a.init)&&!a.exportsFn)a.exportsFn=j.makeShimExports(a);c[b]=a}),m.shim=c);a.packages&&(x(a.packages,function(a){a="string"===typeof a?{name:a}:a;b[a.name]={name:a.name,location:a.location||a.name,main:(a.main||"main").replace(ga,"").replace(aa,"")}}),m.pkgs=b);E(k,function(a,b){!a.inited&&!a.map.unnormalized&&(a.map=h(b))});if(a.deps||a.callback)j.require(a.deps||[],a.callback)},makeShimExports:function(a){return function(){var b;a.init&&(b=a.init.apply(Y,arguments)); +return b||a.exports&&Z(a.exports)}},makeRequire:function(a,d){function f(e,c,u){var i,m;d.enableBuildCallback&&(c&&H(c))&&(c.__requireJsBuild=!0);if("string"===typeof e){if(H(c))return C(J("requireargs","Invalid require call"),u);if(a&&r(N,e))return N[e](k[a.id]);if(l.get)return l.get(j,e,a);i=h(e,a,!1,!0);i=i.id;return!r(p,i)?C(J("notloaded",'Module name "'+i+'" has not been loaded yet for context: '+b+(a?"":". Use require([])"))):p[i]}K();j.nextTick(function(){K();m=q(h(null,a));m.skipMap=d.skipMap; +m.init(e,c,u,{enabled:!0});B()});return f}d=d||{};Q(f,{isBrowser:z,toUrl:function(b){var d=b.lastIndexOf("."),g=null;-1!==d&&(g=b.substring(d,b.length),b=b.substring(0,d));return j.nameToUrl(c(b,a&&a.id,!0),g)},defined:function(b){return r(p,h(b,a,!1,!0).id)},specified:function(b){b=h(b,a,!1,!0).id;return r(p,b)||r(k,b)}});a||(f.undef=function(b){w();var c=h(b,a,!0),d=i(k,b);delete p[b];delete S[c.url];delete X[b];d&&(d.events.defined&&(X[b]=d.events),delete k[b])});return f},enable:function(a){i(k, +a.id)&&q(a).enable()},completeLoad:function(a){var b,c,d=i(m.shim,a)||{},h=d.exports;for(w();F.length;){c=F.shift();if(null===c[0]){c[0]=a;if(b)break;b=!0}else c[0]===a&&(b=!0);D(c)}c=i(k,a);if(!b&&!r(p,a)&&c&&!c.inited){if(m.enforceDefine&&(!h||!Z(h)))return y(a)?void 0:C(J("nodefine","No define call for "+a,null,[a]));D([a,d.deps||[],d.exportsFn])}B()},nameToUrl:function(a,b){var c,d,h,f,j,k;if(l.jsExtRegExp.test(a))f=a+(b||"");else{c=m.paths;d=m.pkgs;f=a.split("/");for(j=f.length;0f.attachEvent.toString().indexOf("[native code"))&&!V?(O=!0,f.attachEvent("onreadystatechange", +b.onScriptLoad)):(f.addEventListener("load",b.onScriptLoad,!1),f.addEventListener("error",b.onScriptError,!1)),f.src=d,K=f,D?A.insertBefore(f,D):A.appendChild(f),K=null,f;$&&(importScripts(d),b.completeLoad(c))};z&&M(document.getElementsByTagName("script"),function(b){A||(A=b.parentNode);if(s=b.getAttribute("data-main"))return q.baseUrl||(G=s.split("/"),ba=G.pop(),ca=G.length?G.join("/")+"/":"./",q.baseUrl=ca,s=ba),s=s.replace(aa,""),q.deps=q.deps?q.deps.concat(s):[s],!0});define=function(b,c,d){var i, +f;"string"!==typeof b&&(d=c,c=b,b=null);I(c)||(d=c,c=[]);!c.length&&H(d)&&d.length&&(d.toString().replace(ia,"").replace(ja,function(b,d){c.push(d)}),c=(1===d.length?["require"]:["require","exports","module"]).concat(c));if(O){if(!(i=K))P&&"interactive"===P.readyState||M(document.getElementsByTagName("script"),function(b){if("interactive"===b.readyState)return P=b}),i=P;i&&(b||(b=i.getAttribute("data-requiremodule")),f=B[i.getAttribute("data-requirecontext")])}(f?f.defQueue:R).push([b,c,d])};define.amd= +{jQuery:!0};l.exec=function(b){return eval(b)};l(q)}})(this); diff --git a/www2/featureRequests.html b/www2/featureRequests.html new file mode 100644 index 00000000..4d30e944 --- /dev/null +++ b/www2/featureRequests.html @@ -0,0 +1,44 @@ + + + + + + + Feature Requests + + + + + + + + + + + + + +

Feature requests

+ +
The ones we marked in blue are on our todo list but if someone wants to pick them up for us that would be great! Once we start working on a feature, we'll remove it from this list. + The issues marked in green are being worked on by the community and link to their forked version. Finally, the ones in black are not on our immediate todo list but would be great if someone added them.
+ + + + + + + + \ No newline at end of file diff --git a/www2/fonts/glyphicons-halflings-regular.eot b/www2/fonts/glyphicons-halflings-regular.eot new file mode 100644 index 0000000000000000000000000000000000000000..4a4ca865d67e86f961bc6e2ef00bffa4e34bb9ed GIT binary patch literal 20335 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

!oRptb@n+ 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 literal 0 HcmV?d00001 diff --git a/www2/fonts/glyphicons-halflings-regular.svg b/www2/fonts/glyphicons-halflings-regular.svg new file mode 100644 index 00000000..25691af8 --- /dev/null +++ b/www2/fonts/glyphicons-halflings-regular.svg @@ -0,0 +1,229 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/www2/fonts/glyphicons-halflings-regular.ttf b/www2/fonts/glyphicons-halflings-regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..67fa00bf83801d2fa568546b982c80d27f6ef74e GIT binary patch literal 41280 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

PBK;&Wcg|NX{>QR@W3{K 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 literal 0 HcmV?d00001 diff --git a/www2/fonts/glyphicons-halflings-regular.woff b/www2/fonts/glyphicons-halflings-regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..8c54182aa5d4d1ab3c9171976b615c1dcb1dc187 GIT binary patch literal 23320 zcmY&6mA1(8T6a0V( z7zzkXUYUXEN9+9I!ap!DFOd#1wlTB=0s{G=z_>rwLFyJd-Ppy62nY!Dzg$rNAC#b> zW_IQ_KN{(eU)_(Nsd6JjiMgTUPb}E#|M~#|A(>mdoBe3JKtOVEKtTU^2nd*oEldqf zfPj=PfBaZ}zy@NZ@n!KN0s$!#{qXEt`TP45!w50c8!{TL10RAG)dniu*zrR^LTrn}O+tRb0xd~0E&>H($0brSGJ*iX z8bUAslphEzmTHiWB72`anLv4VuEY~_ za}WVZu^zT;R-~y&T~BYSiJ>00^O~gpl9q$zHI%Y>Lhsr-MaOrb%y%q|(42pX<4bce z&%S(EIYGx}q8~@4pX*EKdS?h=SI&tEv`GGM8)AScL0;U}brn10v;~p2;1NOn2Um$W z*U=i%VuwBRz@Z11qKr(qgO8vr*&X5{?12dd{6*l`Yp`?k3MDcih%qI+g!qV2n61L{ zS-80y9H-NmrN`sSUC*p$lut-w`?nyb*goYXni_zf3okCBA{zrCwXDq^$DQB5U?DQ* z61o2X9r4;yA!5sN`)f6pe9e8pguH(cK5%0-vMf9zrWWth^A{_9wXmH0nW$}wo9hf@Mt&V*5m2_W0Zac{Bwl*3N0W}7D6V5mO|AbT zMePe7b5d1qntWOB)2(kfH3+1h@`qdCj$7%?Ws`6C=E;z?vBmFy(ZuU>?ZKAjdKnE_$3iyZHlp%_ z77-FteGS2x>7s==RC=EgNc20pi}B5ZYP?<*;Yn$7M)<7;<>9ljc|Q@}q1HAXA>?XX z{-<=FYU*8Yx_bmPn*eq|(6}#S=KV{`|BZ*Xn#BSEOxT0n<2%3UJglMVh`FJxT)N*_o6m(8iH0h%=F{CzZaZ8j3d^x{KT0bRC__^79ko z=tr+cA_{hBgbop+gr}pTjdh4lR9OGJYID{f-h7TdFVsTYrJ)sVL)@`Nes|mRJSCBQ z1vY;D{cTS=MKu(Wy%|e~Iy~QIi?KJEB~oXKHbERbMSWb} zZ$4oLo6Q7!JY7E&nSn99sadal3PMV~{548>MpAHY2H1T`ZcmF;%7p*Gd@)Z2X$V%V z$1bYU`a7{N-&8b(7EKxaD_#{2yNI&{t3rygLIQh8i%wdtQ^A4QWPw@AUkIZjStyRy zt6gfVP}$xz$w}4TO!~910gWc?ujr|I`%rxo*~ZRJj0)|c2kf0tbH}jLi*?h7#a}r#3UcIh%=Rq+9Oy<}9gOY2vy$@K}ixTio-4X=M1@9qI z^=K!qz=h?boc7!Dn&OoiZq*aBh4h7*kXhO z>pcXk->0DSLp`H8gAy`9imj3RrTwYMLn%~ax2R;y6z$S#bv?dXh$n!f{I%|F6CUzH zNglJr&iX(OdhO|M-zijiorLRikL!4b&v<-I;cb2U*9AhJqg6Km0|C@3UPi3VuIeHB zEvJkk^d768V;-U<9n39OEzwHebV z^!;=ohVM{+SKmNmc(fHuOajOg)eZg4gP9Z?_0r_5C&wd<_hxoo_+<48kwZJ{Y3kdj z-euRxbNtS4ORoUDw~*0{d?YbybVf*Z&j3f0Df|p6wtg}#){z60vHIVDYyvXYiqtw5fLstI@;wPh+Bd5ldW?|#AJXDCfR%eUYew_;&(+g6-=ThC?S3>8w7??8cY@rx zXANRWBOACbA6cC_l4+aF!&NSKMmjmK4PZoF7UG%C5 zf)X%cLC&;>^$NdUhi>}OaeOh-03Qt>c;rBMl8FXlh6u#+T;)aNQAM7iYm9MwQAwQ$ zauN?iXC->xfF|9A>Yn3rfOkVpm+8&z?LmtUcZTECdVP6@K8N`=NVn%wvgYT?wv(~@ zRQi1syDn_w+iAw6*B2j_C#*4Oa=3>>HsxLFzfc-lqHiBWPsG=v_Rqfna_4v6=XxDj zbWvX=bCj4jf>-mGLa)^qT)yEMN*AOa6}Y=z5r^W#5+eB*=NMYFLlxp|l;Umkrykmm z>1Pb@=d7ZMXh-p<@vNTD{%C%$y%YYN-VTD)5%>5QvQPlpLYJRSmulc?J zubo~#6g|MIS#tM^y?0~C`jU2#a#T$VEGW;6HZHFWLEd6C6gfhTw6Hw56Q8*V+~VWN z4AL!NdF6?QxaUpsR*ZThZ22BrG(+5-Ud8j`|8n^?HPZ7*MH$Y-GdTEy_<}Ip%UH`% zC_ybkuvZT`(*5-7zTSgt1y-AX_=4Vq{_y1PK|t=n8Jsz8N`x^1R#L(Hf(SZ(R}et= z20=K0`i!{GTB{~I3$HZ!fZ7PE0K3mgrlOj^=HLjmlzB{Q!INjU2`4JhvkVArhWI3g z2BFDRMNusx)0QK>n-{_BPLkO*tH?}~b^*t2 zL|B8@3a#it1GzFLG>-jntCpno1TF0OMs-3&ICPgAm$awK{?_0%(W?W=|3Ym<2B399 z6?sOv=odFeFq-4ZH~dK}*A#W0I_F%hOcy3B(B=(oS9N?rZK6R)u8SFgYl67%j$Vzn zT2com)G;k5ej>5&f(ldAjf;DQ6!5hOSn{C{3@HGgJfyHHbCwb;JWINl)t_@@KmMH+bk8Q`tU&fRBnQ(#)4NSadxDOZI(w zdDV`IZHTev{l3e|YJOjG)!*{Qd3Bbc-oK>W2LbR{;`&r7v=uuYN}Q!j?bR6qQf6%Z zD|U^HaP=Duw&<9^4wcHPM`Vo0d8#?cwduvt)W!CY2}SzBBsBVDmS^qNq)C$4z-w!v zu|}GDNU(nCqGP?m2nGh>so7Y#2jSAF;UD3l zTWTJlAQB4XoWDz=q%Vn+jEY#AwT@9A52;uB*W>Xje?f=`^s2DJ+s}6b zZHctO--vJs(vA6u2D!C~MMV%ZF_OWKERqY*L7bn~pu>emnX~};w>xKsx+HmlModD* zRe7jxvS`Tr6uHz_O`!|yld+VyK0FQd$icoJ&6I5J_C@tYl{!GM>wg8ezB^sMFG{SP z+~tO=8DM|68>>8kL{vLa+9stZVE2&^q(j&WrimlxADG12>h3l$)MnnoG~F+Q9%u&_RYNWV-S zu8Zij1T3udO7yF++y7qK8?@Qy;j&>d29gBr(=CZ4lKGZq^?3#ajS1CkdX7~BF>3+> zYZVG#qpmz`T?l5}q@jYe4}&tAuC*{c-?JynbwY*R0wc+;hotR!1CBsHEV}H{pEV_Q zQbs{v@#pEsI<-g|xh#rQJeXH}di`N|kNqjL$UE~3So5Z0bsl-UTxtBvq=J|gu+RPErd8o zq%Cu)1CPBz7A=EEzAUR|YC=IU9%hvt-M5s$vP}yYbrS8_xEfnDFCI~k&{z?w$lx zkHl$$>l6w9E<=%h&m}p0DcU+fGPM`d($iGo+S3fJhaypcIE2yU{5H<0HCgoFK{GLe zCVD+P9e_etX_H9_t6xc?c?>7@pb;TOf6%r&2oND`VL682Y@H zo9cs|v@$?BZbm;;TeI&1a|hDjryghe`LAHHYtRh=V`G;8&hH=u_R(Y1pv%n=LH^3^ zFkvIs>V~3aP^2c9bjt$HI!&KIsHF;<6GGV<&cs3&h&!7&F_0TJrW*V^F`?h4z4b9P z)shrVOIq;gnBtPE8xy|c?B+5Qhe9v=A{q0$_8i?gn>U-#3cMhdDV#r)gg$jBSHuwk zk}gryawT5)H|i8gP1CW0tGr3sKVvSH=C;mKYmExi&<#lKQbxbVfh72pcQ7oRvXB%= zj1OXzBoz0nqSwe)?dUE|N0dA`Jm0((=&k$p`L1c)=>Mo*a}LJx~+>;2tcjSh+G1pg5Y6PO}pj8+;DLXc4La-kzxi{dPSiJ7 z8JC>pyci_t`xsI3_*zD$W!*$<4tXVP|Lyd;LAI{(?h2Cw%dD@_;lH-jHe9S+i*4E z4mm+=yxP3;fjmRcM+tj5WK$Q-9_(!w&4?Zu{~+v=o|o`vvKeY_m&uw>iUOhrn)3ws&_6vxHpM+hCYx}osCc0Y-Tyq0z_HH?lw9s=QM+-Q{gQx~FocK9j!8!mtbNX&zBR0Xt$l zvErya$XNJ@m2B@ie45(Z(19?S0|j@Eej=zw0gE??YVlwp4LSl7VHUHoo|LraFf00W znbw<}e@IUzes(fu}n<{VdSNo|T`)7axnJ2E3 zGN-K>ywjN_qvqSYS+3(Tift}Ac+Th~V)w~#F13j;D~$iUE^?zyrm7R;K!FVAfwf4+ zgEe5#q65&2_@2P9Xi0@IzKKB$Mr=t77zjDw^ry*`L~i%3hjv^6l}?gMTjnmHPNyRD!RE? zVzeC>gkFuW>V5P|ms&5GT4O@NM-mhCx+a!f0)LQsDAs{!i(cE9Ov8j9Ot~S$SX^Tu zbvv@~cen9fE3YI>r2~|YyQVnWpZ-X~m^M6OE$L`m&MG`G=33X8DprYlBgvrAjN>#) zf7F5}TO}Od#i%Pvr08HxB1L|F7Lms;vt;^z`LYoE^HAlcM$*80N!_Nc@Z0C)>z37! zB*8pC&7s#0b$L(fb6zzb_{hxyz+_iYonkQLn|M^r48oOlXXt>e7{zFo03wLhcxL@> zruxmZD;ZM5U?3RR7ni`br#{#)H87#K@FBbE7!;=-Y}c+8!h3d5JExlz2JatQJ+?rH zEiUGqC0jaoW>(Evnh`H^?>C|E?;wdM>7y!8D4dVkC<+|T0zP?LNZT4#$T22k5m50< zzoALNpZ84Yo=WEiK^k;g##y>nq*73%RqJFJOX%P{Sin)USV69lwgt`-QDJjC{IgNf zBW4`*siNB=F5h|FpHc}mY9&H}jGvvlX!|~~dIc_J`?;(WsSic(jU>39iqS|Q7u!DA zY&kA%G@cdsQv^FWgQ+Nx#A;({7tI>&nigS1N0T`xz+mg6@_{zT%;E%P(``j&bsETN zs(q(bWF8KI1M_eY6S%3}4I-pbgJgDL2EYIzPp(Kd(4_CqWI0N zt8t_kb+H2&h#4kT$#q>Ac%Z2bj@0N+O;y@sWv$8hU9Zv@p#uT7sP~{kG6820-K~jc zzx+zAW+=CEi%kufkYzrAXi1hFg5D^8VfWJSQx~1y>x~0bBV$33&FY`a087m+i@@r# zv~L(PphOgimWm81wL^lXk96(eK$#U=hQ}pu<-Srb@X)RzEK4@vVL9cwNBv&D7`P0@ zqV@&7+T19`yV}oc>o1R%dLPHOtgykfkQ$mBKeZU*==5=O;{`t7RV`&nOFus5HWa@{ zXbhx+TZxRv=(Ko|DZe>7Tjhggvxn2ed0umrYSl8cq1^h1GLxv~Ovi$ld?|yHWQbL0 z!Ivh5s&TPz0K^%VfE05%mJqQKs?A%Hu%Xt@^>Aoa$L6|fp<>G;+%>slePPEnR_yRL zj;yc0lCyoP$Ic|g#bX(o<$00nsg*!S33aGHMx(FL1IZKmm2(3;)8v{BEh zq+0};_3dYnO)g&8rn2p~Esgh&5iy4}Tc`s#l(NQVP*B`-s(Tsgb%=E*x!`vNJk-`k z+fm(7Qcae_0=zlj<0~2F)s}a7tknTT`cdo_)g;9@CX6}Sx(tZ-vBXh9eV`-C^l3uT_&kk_ zy!QGr?i9qmGaJ`03`VTK^)eYd43pD#6!NwJr0B=zjQz5pDVIxqPspfGxc527cKuN} zM+02tzw?((Ojfsh0mh)!EsE8yz$@B*zv5LC{@~DSWie_CKtd_%3$Mw8a()p(IDD|g zE`aGjSXm`BggX|S0Iz8=DQwWq7Y>nH=l2gF6&gHY9=4{U@)*&>a5Lg$i6r`O!H}dD zW;VLr?c@ISTZz-X^w-r)NsJz*7Ik*4Ly0i!Bq{Zd;rF?m8fkO1OM@>WW%j&Gv#v`$ zQmZ$kLeIBScr38Jb@l%c_PQ|;xB~H7qh?jaoofQxl!Mou$divTfpW_5t{jt5n6rPK z!vRqg8v?Nc`M^e6lM(@2!!NA&BnKun1vVjc1z9YJv06oEUF=G;UtEZ%aSas1z8-O2 z9BC#xzszD?1bF!myHOXw5=A=9o9-@Lhm!h0YZ-|@A8@Y(+_Z-DK5aN{$p1>cump2t zD5Y<$oDGvcGH&@I&=`_@&z9%lM_#_W8iyXJa<&`Ydn;~#brX*PwN-j%3hf05d z4E%>Bj9t_c-iGDTJ%p5oMe%gVzvc6bd`PTb9cQF~$q=bA787VjPi04Chi`i>W<+{G zV&FRA7KPur^W&w!IseMOaI{i>RU}bnWQwl$BQA-{N7}-t4=-KVk!vbXQ}zLtKK~Vb zh}Ni+HS~8TjiAhC5SP%}5)++t1N`_`^O*%;^P^`Rj#KY=G1%z*MAySF&MiUH~wJ&BDU^kXcQH6%9!xbzqRA z*C;FT!ttCmLLmGAVU95En90d_(qX5~%fa`pstx}K4cq`D|L4WUM|^?pXIDSM7j{_` z3G3~Fb+5YFcta__mAzP+vqYM1(W%@8)d!*dz-)tf@tMWp!rn*|T0x9DwQmg`{~HF^ z(&{06L_~x$VO)QgY!}xSiz9L|mX(gredtzS?t3cy_RjmTIU(u5dB$Pw+b^CLxKo!Kal-ql57+p#JJ3zg*_!Lh#CTQlhLZaSdUpir$y9?7cH^D{5SFz4E4#R}~cZf9Y7m zo;9Cm&MV)C>%p+!bv-*M+$WJVT;|RqRPchoQ_7BbK-|yWM-<~FecpFY< z*+V%yqBEN@TuW|VvPKxu;wzn6PE#vLx(^m2Npl0_=R`(f{eE#>@hhO=C}MNbxWW_v z>i*?56p5poIt)%$`T(F>Fbvwm_u72fIj{*&-QjYl(EG&}&x2XCp-|gm&6LNw(*^~r z(;e^7)q{$HCsydP(lnZ{CMFoZw`Di*O0teoyeuOUSTp1qVs*`Z9<21;EeAe2nsvN~ zRC6*s$3cgHx807}TdF!K-J0iGN^SO{w>QZ;&Y$k3Kg?6j$YHFGxQg*a{%}-aq4xqy z&jBywOH07(H!X%N)*9k*pouLg-u)|*fP*&bSExgq7b56vts%pZKc$!0Wz)kTr{n^c zH0~1dFP!u<3h8{HY$Lt50id%$jqN@8k8{VALlSz2UVh`a-#R#>zHXSNNR|{7e9pN> z7TX5KSq#wFmVO-1xo)>HN)vR#Rlnv;&}%R75X^KT9xE{?m|>iz_BH-9O;l0+ZPl<= zgateSH#Dy&8cL!Z-sT5hq(D<^FoqY@mUzl=C-x$j>?y7nvAexvXwZ#MsHgqBZp zatbN4V_H3K-L2vU@+EGATIm6Ap`GU7lnAV|6g`8C(61y*zDel%2}VNAy1~`blPHN= zu~bPszDZI*Nw!P&qvtzvpA@&tGdJu;DIn1jLdX; z)t`xZwPI`TdB?s+nt}J71mU}hawwEbPnX$OL8-5nO5zHu%kT?MIW=*XjkB-H;p1>i zcVuPz(G&BP?D09Rzm-PH5sJ;n5|jQEen*(AWy!9%8%FrobT2yz?d&1r2KSS&4>U<6 zI`!cdm9dC1Hqn|R>+xX&B?|~3hd5zh)13!mfVsLczdYF0Z^iL|oZ=M%0c8`h0j{;h z%1hkP*~06j7+rI@eA;#HV5_3yPVSKp^*V2eP_Sfgqg3u-*%?R0LP3RyTYh<}z$74T zm;u}KQ$iP(LarIp;*m~l_iNZU>-f~@+~!>SGMv8xF)qs2Y$b}ymmJp+*51+kk=cjL zmrRQpnwbhoGj^9~t(5N((?x;Acs$~9zAnWpC^CsfbL2PPH_JB*;3Rr>5>gypdKu}@ z_u^!zU-oM)A~Rv>w@^Qe=A>t8Iv^I5(_hL|C*0994Dztje1-tP3-Ei}#z%jPDdt{8 zyj~NQD-NaTJp#iw;$eW^b71W?UD@s5BzgyHwZ@1vXRIB(t^Jc6R_Dv)Hs|F8qoLtu zkC$6KPc3aY4^Z{pf-Y8+AhHwBfE}WYF<334Vo!l}AXb%trV`AC8!T6My>xRvk#pm3 zHHM+JX=1+RLngN;k-3IQ<#A5MJ7DB2=>^LqDb1%kc#Q5A6%d%>IN;UIK4n-`2>D{q z6jHM}#0~z-%3!K9@Y#+aN0N<0nV7!}Yjdma*li{=yZCa;H1McT5{GWCXe?F`+{8IZy5ljQQS zrTFrqEl5LQ6y%wNh;`4Sr5J9RFfaH9Na!?n-MFD%$2Vk4(|tbc=g}P52_RgNSWcn3t)I333gCka0q_DoXC$EE|u?la)3Hi z^Oqsl%8F|h!WfxtA3&}E0KOg)%}(*;8p7JP~oIr7x~qr5ZS zt}-eG#D;|kb-q_a=YwMke!SFlTUXIIIyhgBr@r1$`M=v573zGUZ&Z;ovB#T+9BM0n zr7D53GV;cMPnitw@6~l#XLgD-r1|n4y?bO!UcEc(qc7(MCKr0=6j!>Gfu7UOSM}Wr zrxrvQMB^yRGbu2{3OLrjP=6`>V`nK;{YAu2$`B8FPF$7gZq2ZawtwRV0kK!LeuHJz zBRuR2nG8L&T7&sF(BmF^9-`K%l-a6BxnQhEsSCcMv@ca`7C+N|8~^)`NY6R>9&v-F zrSt9am3)7()aGkIp=6JF|$3I0`=vgS2}W>J>gIe0La)`lZ1P z{l;udc}QmIM(7D`(wZl?Lb}i=W9(rVd}caMm3YX@2^XEe7&6ov>SA_Ul!YAv^tDYe z*R}KK;n3W|(DgTksHFp3@6t-fBvNI)YrjgMY^JK*K9SzP;OKf3rVT zZIRx%tWtOEFkX+LaNh*i3kxphn^$o6AR{?)Vf=48wJF#hmJAL{4=%^PHvR5{s~IP{ zw@K5SuH&}_b#waDN@Dr*1#;8 zj3>L`zy2mj!ymgpko;mUZsF9%+di@q6&^JI&CNM|2-W!Zeqx=@JCWw~Na&^Xr+cBx zD~Z_rhQn8JeQezgl~_%EHY<}DHhMelQ2W>38M}*g^5Ct4+hNyYc-PQrKYdKg5LHHH z5W7c4sF^;~J5~Mpel;s1wg&NA+sZYw=yb=+oocgx@pdsA=k7k;S&^0Ye2PKV+jA=J z%kv8!s;L>%L)sb~z5JD`X-KkMJ5d1~ffCHpybzHPuu8Wkh9i;1AKMAU1s;ZClWgMl z9P`0tCm%NxKJ+&MOk+0dFd)syx<+DEDBOC1G?twC@TmJP@Pf+(*wj=;G#0iQZJ(iJ zhG-xA3G|5*R@}e@#7hh_*PQ0J_Ka#hcc~Q+8mb_($57A2Z^ikOt#!vf@PA|k3?1E5 z^UZ$&A+KqZAMh0`O@?fzgWeM%dCVoQ%|~*CFOh+?GLu=z8cs0Doi&=R*WpzS47aux zHba&$jRt-gFb4(L@D#uGjmM|c$++VCtQCqFUas=KKW6lql}beIi}Ay+xI^LtKc@0l zdkQ#o-z()ZN*r?{x*<KqloOmbT5w&V zwbjn3a$Q(Enfrp$2j4p_eha~MoJ&}&iUWxSZ!8q_P97wWkI`RGWaL1RonK|Uak^P; z{w86F#atZuy~}Jq{ejUdkdpr)fS;-)D&h^{m;kRv&q0P&gY>_Wn_t;WSnIeQ`eb z%#)mE*~XX(4i>^EwvF2`&wtc>49nS`qmL5rVz_@uPo?s)>dW#p*sb5eNQ$qmB5fE7 zIKEk*|9H&Y!}-D4T&BI9rH|YQxZHIugY!WQFWiyQn?n9k3;PL8)U< z#A$~V3iae6z(8e(o%*Jz6x-yjLA3G>j@cDD{8TQFa@~$UQzl;@bJcoH%=3~W6|DQs z(HWs+Dv4k7d(U{^^k~iOA&FEyEHm?ov{QGSJr>~ zNBu!tDZKyZ{}g5cj*I*BSypu7bHuIB>1sJ{JNP717@@1r>7Y4r23)bUfoFRm^)9*) zCp9u|gQ?d{lA>+D7QCSr-=sytp!RCmlefdPbI3o?<*$WGQBXkp!Cmif{c*L*AGg&b z?7DWdx+ZbqK6&wh=w7UbYfJvH%6U0zyA-;}t7CBq?(%dq3th6bFl7)PLYI4xVL;II zyHxo?4$HrM`P6?8Tvl|24X-t54n_i-h0-n0Sl27fDZZL8HpAEcQr6*yVHCb~N7E27 zmK=cCh>pD6WTW;ikgkvgiM7ROCf}QC3cT(BH$oGu-0t^8PgZ6MX?z=8Lz0ne4T4^V z-thAcyiPMh&#zu3J_ES$FBkO~$SuMt-s!u@48@57H?*$e8Pwbi2Yrp3CQGtR8@!yj zUk8vkyy#dDr0sf^D6wod7j5Ylf6w`wCmvcUyN^|w?dyUD_KL31 zE~V1>J!2e)z`E#xwN&7d0=DYa2DB6pQ4$wj;@8aSM@4AZA{vjr3qxAHqrY=7T1`94 z_r7;6x{PXo9hdnJ!N8{tBM9uaKE8=KN-T_n=P(rOra}Vi)`j2v%gIZ{7+g3|lAtj* zB}}a4stt3~a*NENyqPR5c(%njgkzR6v4J&RA53RN_zXRj1VRWa@ngnMMCvLZvQ@+s}}=U?P|DLxeem<(Nuv7p63NlkA7!CE10D3wO$!ANw9 zObXX`YL=R6%2TeGd1?xrLK$VEwP`qN7HPlo`MM}dK3I_H9Mzu;W}$)%JINEGUpF90 z#}mTOLB17SWhL}ZMRGTaFgmU`2O4g(>;@kprlF*Cp)kpy38(i>~14$R3s?6^?3 z(HgVQFov4jM7QWqadph`*vm$aIIXJNNcy|m2$G|ntBgb!GwWC48iMztD|o=(>;15q z{$%3Oyvm9@O`4JoB64cJ6IF%XU*;BiuoJW(Z#j^UH$l#9HR{Mm7GhSUp-f9TbS(>+ z=TBhELjbeJW#KE%-tr3Zh`nd{*Z|1O0F`(MTCf5%G2HfRAaIr0SmvO)Tb5xAR`)IS zDJQ*_aT_PknaBS3@{3I7may&O+zm8(y_ea0+%G2M5N-*A7TFy3Ev_pPhhj93^hy2p zsf~STscg0VHv6)-suJJ_HvfhYQrC_Zn#OPKnOTJx| zt$bef1E2v24uA^CoX;uvbNr#<^;$Bn%#1V#=IB2G9-e7lqg49ji0~i?uStqONO;%fa+^ReCL3RZjio@nXo^g1nNPbwp1HNQV$> z1@gTfZyF)87$l6~%5yxJnEQ+ie9+G%;f-}&?6HbOe(kPIzzE$iqX`vfok4&ai`W-d zwC99WD{QBt=6MXVD;D962#XX?i!3ihIshIg{q>fXgAMys=@kLkS%9d+mfwd@#_C~~ zWK@5#ngAyP8WOs%@7M-tVjQG={`OIT#6O?~USMV}Aqz>h#^!wFb!x$Ak5eY`gw_Il z+T)(XzI$10nIxlz0YQ2v4bhDugbSQ_y@s>>rHp1+Svi2@-tSsqlpIzzPTyUJ4&6Wg z8t%*#w>(z0UiMXQELXctsZ9~k5wCOwHVp$8E;=11PHAtA3;??YDwCu|jO0#YA&u$Y zH5r8Whl=eb)AhDqcB?eTs5~8M?tF{1{8~NvkvAAqv1XpE@W8WAi4NlSL<2eyn*gM< z`9H|9_I|T^m{J0!3b3`LzciFAtd2LRu7s*s_Jsb0!7S+S7aJc*lt;`*gA-fKO8ArY zhA?VR7)jaRX;6nU@n|8Tf?%{mBM3tZ{xr8|dm^KZpSP}F*K>^y1+c#*N_x*PnQV4j zHXXs6C)_oV)=7T8wRg}#7y$*Oxzi|WxACj3t`$g+Hqob;^h}z0MYNO*)*)W%TP2K^ z8+E9AzoFgl+*G|4FIloWVp$TG!&6mGHAR&+;NTh5J^p6y6{5nltCkJrWQ|oU6qW*h zPfOY$qZTp;a(A%n4fddVdJyiB=7!MR^#1%L6Aw9d{;jcxYG!qJqe2pMrVyVhg_AWH zCaVB55F%KKa5^A)lmMTPG=x(hh32&U*SA$xDMyd3{ZPxizi!QSz5K)*82;WGBaTay zHDeWU8ME{rnLTO@q8U-xW(Oe4ST5z)w)yoW?X}$W+~i-yIXAq7T_olt03# zG2Gu}eml^<1&ha=qIj=`nCg>Wm_0+Cwd6oS*LRkQkSgAw;gvpLKW`3noP`D1=r5(` zPz>bAt@<5_%*bgTP#IghY!XJ=NFJ98zDt@(K^*}B$ts!PZjYpvq%tq5kYKLcJ@r)h zpjGeWgspjG$}U5I3;E(wFu-T*ttBj99nkVSJy04B*>3M>M=4CJBW{W+wr zmo8Lbm?dVE#ijL><;n9dCt|#Od|9HFF4#}Y<2rV})IKejs~q4`MWlQNc41Kjp$r;F zAUY8dDHmc{hLF%=Kik+j1W{WEZP4aaE0T_9G2k3)50J+n4@!F~;6Mm#3~zA2!(uNW zD?3~9!k5Ezu$*P; z0Z-5cF&^e2ZT=G7;H2(U6=DL_gI^{}SNj?dg8|^Sxt0p`cq^jwVM;7!Xjm8d4}Ns& zKcd#kpeC&YrVPU?^63<(P>{Ui+6jp;gFDhm^1pecu3C8b+kR_Tdy{IMWKB?1fmzJA zRrWbi2iAWJf`OWX5*Mgp>n7+MnqV+8M&DPEmPa?H%ZJ7^zBIqoh9?*U3kCchz3T<( z{o=DphBZPs)&O&+xL<}PTrSUw@BBJF-j`J7B@go*T)LO-j{0ZZpPSq}+fSEg4@}1L zZ8|B8jgb2gyHh2Popw{~EdhN#pk1m(0#ygca8F4f!i2@Brzr~+t!U)sEME!yD(7c} zHIM`C5Sn4OHuPfASSw^KEK{5G&ZKT-udhQ|yIrv`02n2nEE6 zJaaj=cYtkxDp%*vn;v7!mw#(ERHUI8&%?XwWWwd^?J-?@A*9kw-cvd2{8XJT$}8H$!5 z(CR70IjoaC>DD~Sdvbq8(GW$Ab&QVqs>5qM-s&(pM zPqqe9RFj;kYc-8w?^V+V%7{u54k`7Ve?+hh+r~`oRnKXVB3p_X{b-SP*}HtZ{G!PA zYJH&DPN4_-LI0Qq?XoMhMUDvc#~1H5z9hRdmx!A;m8^?6m~Y-#b1hlP<)Eq8U>?U? zbrG~tojEl{f3~|C?x{5NaaOUOJ;yJ2hOz;`4;z|OgBGHrpdB>_F3<8WI*%OHZMd3j zy2oRMzZ)xk)fy^F3L0R20hg0paZ$rdG{I|!)H%|BW%n4OCnFJO{@5hlKEt@{ZF)bo zm3&_P62l@ToZ9vsZl7rqgY|j&J=M}0aCXo$QWJ`uVjhB(*uS+H^UDM}9(ER4+JpW&Q9Bny4m*?YQ~L|5@IZr?xwVdan$7a%9{gv7nROdai@`14 zG+-^|Z})4_OtE~I#aE~AS0(LCtNXU(!?C{8pLWYD$$@TV2HsDljoVJZ)B}69$9)?5 ziNy=R_Yv5a^;THLpxNLO zy{q2MTR&jkfAcY;d3}8rjNG3Cyi-4GYlGzJkoOXtWoKd{@;N{&Tdn@M?Y}BW7UX`* zGLMt1)|BC45~;O zYEbYSZ2{~+yv)QlkAVg?M_pjZ-!GCpjqn>zMaydQ%*lyE0`=2E_1o>1!sJ380i_My zB})!KN8vNL^sR*WbvXhjt`v!TIljZl+nd*r_Ksa?e3=XQf1O-aR2;mzg<{2Bixzj6 z!AsHN?hb=%ahKw5#bL1GFgQgEgBN$VL0hCa#pd##a~|%x_wD3M@@21YV9+3{YvzBcTXYf<5#f zw@nazWj_=%=H(>O2QSy@P=u8`{8`_bk}x;!P%>I-jlqoScuG}=Yua=oBl+#ICF~F+ znS@$6yzx^4vw5R$n+4Gep@PYrOxf{U!b#0SW0W|~0Cd`pgH+d9 zHF2Y}rq%oV6;IeW|n{J_U0dOcSD`AWh!D^dDYCb*c8^ladlx6e8v=7}U zpGCJ-DErivDK7O9PLYZ!KW$fh`Bl7Ghke)_A2^fB_mP3$@dtVOu4PdD;J9^%pt#r7 z9aUCSF@MAA8f69~*msmp;gomRMsbEyIuir9mRT;mS7@#2U>)4Yq%WOoTL5&hULy8K z>kDnMX|3fn-RNuw(0Sen*8dtIY+Cz>5U7I^6VXeO{2jLdd$q><>Xl&1Vu0p7fs&1| z$PbIJ`zdYzEI~m!7&#%G%tX&h5*}N*sl~^UqaR>nhkNBS8AZM}wh=ZX zrjv;)`|w%_y2#qZAId_YsddV+wJ2*du<$W+5t&FUFZk{rEi3ntr&SUnt|%1C=Jd5_ ze_CF4u9zeMdmT+erqTwwyjqRMS zXmyK_a6D!#O9m>R+q5u*q)F~4F&iq;iKuj7YDjg=gR!K0M@3p&cI+#a>do7bc+EFf zp}{hAArKj;X%SHZ6D9Rz4`|SSmahv#VAGy11cXaX)Mt;d8M1&}1|-hAvZVNiXA6o< z6cfy5!JL;QBlt}Ru*oAMLs~|FY5`ga72TPzIc9tZFpU~37kdem-*}k9(J*PIpJJ^J zsSU)i+YsOesy~Wy%t%w6zMqz(_qC;@@v>^vIJuyqXhxU}irkNHR{VlcZHy_J-_{`! z{(i{Z^`o?+;-T}NH3_eik^=@7nJ{&KH>NC>I8$+d06Es1h|Pqo^o{1;)^}_EW(|57 zyJj+53*y)m6e5F~AR#?Ia_O;t0+cCf@_;lqd9@>cWM%$cNkbgsDZ7Cp`OsmBv5a=TQADA0^??l-fO1^j=fqzmv>$Ik zsF<+b%&B*pk!HX9Wifnau{En>S<+**we#g+tIq++C!fFshl@IZ%_AS&j%yNkj=w#j zV1zL4>BCBv?8m!_A8vU5w_+jRJAUa*K$Sh=>u;o)@%gZm(Hl#>>H9yA=VDeWW`zerl}&-1icy~%Cs2WRZT1JiK;)SUZQ>Vwq?HIZ#4y{7%`Ht@uU9-2mT?U8mz zC94OXy-c}dfYYZ@TnK!7OnYwUnU#=S)k-Tj1Py{Y_*g>!$igUn_8Hg?Yd`YAZ|zO)ET;+xY)CD|&4M8hSGJ5rwlLozN)`xJkphmTWhnkH7R zp|GN?86tSl;KdX2OoQGhRYBxMNYX@MpSn5D7F}DSPf1*q`Ib#*a4Jg@qHh z`7qyVkKaMCcRemWNY651aHvi)Dt;N!*0nRH%gv3csv7=?{>O*|2rMzztJ4FC53iHh~I24S*ZN8u3B45qTO2k zV#a%2-hio? zIFEIohf8EYWRDv0QIK6XdRv9JD+t>+-4?eH^&08HLs(EaIj}>ufdPG-&FK`ox(hP) zSX*Zqbos^?mzT7`kU=2R(_sFto#;e1-jS!3{wMk2OMcoJ>~6zIk%mvT-Jh7Kvbt$B z8|rO?J^g2Xr^H3M{Vu`P<)l*|Vr*E1X<+$j`p8kgt6ScMbN952xjmdzc;`UuBmU19zH1 zdQm<7)we%}!ruutZS5wmd;bx?EJ416t*z8Mi{3Jr!!9It;_W3U$&c}W?2NupfPAbz zaEvS>tF=;!K5Ao~-wL{`AaKW`2vX9W!v);+3Ne%UcVx zb;L=lm)%rYtA=x^cwa@f^IsmG_fHBMF!yLCJ+BFOHR>7stJd)?=Nxz%8iP-Ve6eSZD~t{%G|HvhpWj*; za3=~ov&HyCmD2vW$N+mUE$10$G3&6M?QY&iR^o`>Vh|lw=YCxOOE?w`X@(U<9Y7~6 z)Fcq!<`YOUk`P*#e17Azvnu6Onjf2;iYsll!t!`CbngkGOAaC^m4^RW((d+S-n)L~ zTM!mauKzQ?74*h_S1@6)A_2|}RmHj8#A&~vV*Vg@W*Y<^Q_2%(ZD@hdlKyCe zl)xetJ8!pZ#}qf;Cj>*iNq*>30qx?euIoKYV8uSrbVuX;KB~UnQ#KvGL+w`BNcSS1 z;U~2{1T}vKDOh?GjZqA^@8P+OEsh={qVYmQ$vY&4jYp=IpNGGesr;aBWx6o41JoSQ z(}BH4cv2?sB~?BFm6;E1bvk7aC#n*P%Oi?dG5L^1-hlm5(P&r2+cnG+!{_XV`;L8< zl|p)Pedy^d3gl4Zq{eg%;hsN&VW1 z*YjjpggMwY-|~3Adr8jW^cl@Ov{4xMvHHP;dHlW{U@^uuI}B#!zEBT+oebadmu;(T zo?I5REG^zcKLB?tC^&z^j$_l$2Lu>djULQa(#{(k8C0@jcH@Y5plQC>XSdZR<%2Fn zC1CnY9?x1zI@i^uFuX5uMtLaq!#%??TkQR2I!ifI;x}j8 zfr`BP^Q6sA8vDu}yITqBe`9jn(s4p+U@XAi4YXGwT!~ej6K_%!Fo)U1FJx5?IX7s? znI|z&$~=$$T+LNGw@LY9(K6|S?R%;K9(2@!slJPxmJQWG-*CpPI!DGkfnTM3=U`@k zo*N7*koGrw`pli4^pJpjgSMLFVm&}>!aSM4cPn7hzsL14QkK>UK(EW*q=T~B>6G2r z3kc0PU=Gmf_i1!^$IwY;XsZc*z39uQZd1T0?3v{XK|jR#Tw@inoudHrzw!~8x`ZUL zP>9mhb4GJ95$7l35USY0dK*R}JR4u>ysHdTTaV{r`q%*N4gv7}Dp8PMMD8}ve;U>< zz?5tAj*Jp>e1)7Dm#5|^+uIQ)R zX62|+|J^j_h#O};zES66?fadp5IKr-?2tmw=@pHfATcp)iM6Rfhw?q^hF;g%B>Ngy zio;8u$*OB7`R;LZ8jGhZ+?gbNu(sYscLxZv$G)#thMhWlfXW2Q$W_rJ(Q!NDXH0+x zQ3s->rPUy=JY3Vfy|$uMz(uPW}@g0hNlv$ z8ijAn!zVyZm6Y}Z3dOh3D#DU@xDFGReL@V#ku=QZMao^QT&DAIy!9xSy^UP-`SW&!tYS7JG zFuK6m-6-0VSp-+>X2;maXQ{4IlvcA2;7P8*nSegnv|P;nf$F9NvbhM?*;a6o)S^Gb z(#qjN-*PB$lw~&sFU;|DeLP1Jbw(%3@f$Qif%2~O;`X-ZWzTE(*kP+j%s0<2)Gc{o zZK-afhs+SDT!8Ina4zgiAp9*+$_7H7)cTEKJW8+e^gJKxMz$6cypGY^89fs|HazKi z9n3p~+HR|@$_yMOa9sUnF;{1K)uoFj5JlS{O;LE*{bHusUdI3Tf@H8^QTqikAog%~ zKpdW@gb&u4i17=8{|9yEsYL~NCnUb3#Jq@Qp#7zhik~?7U0OP-<_c7yiHiuw$`g5h z4Dk+W4~Sojj=p;}luTuL6Lg+6F>9i|YRt#X8cuo(eUrk>Z>~;aJ7ZEaCnWA`MdBc) zfcc&Z3TO&v%@gFl5^ijq;B^ zvz8RN(2l6Y91W9g(>MrZChD2F_&#rCv~!t_YmXK2dn;Sfp`KiR*b4t{fjQf3Q%`r#62E zj5SJx>6Fh)rVp`o2&;!MR!DuBI_q1wKrBVwev-|v@UfT;AjKp)rCR(I^k*jgDeg(( zdIc?W4ny#lvCc_WrNwMjR|zJNNMLrso)T%|FFxc4pSXieYJ+Job9`0RJB;*H!b0G7 zyjcJul}ATXgRQD@Yuqc@Nx`3oT8^GKT7Y2wB1^J~i?05JS~|{5gv0O!nY8;jhq0iY zVPoNDo!<0;UZgQ{97H7O8$7r_f}$GyC*2ad(Cb5O_SsS6e2xlbCFI@169mKacNBKf zncO?#D0m>Z?KHU#0TyrHUQLXd?I=E6L`*jy4f(hrAVIealGr`&NqObgCPsaV$ z8;05!V_^4BID!xGSMV_+$cnGE^*&HvV`wNmYWa_4B{2+)8oakTZumHz++1AiUv>v2 z#nF>*L#C+#6)*VlrjjSHLTcbM41+%nJ9?1D{^dNxjG)t8k0`ncWIu@OM^XynqfH0G z=WwG`Md9|NH0e)Y7u}|NWi1mh^%BJSW&Nd4yG7L! zA@u}#ogp?Nh4ArWVO%kyr}loh$H1|nzQ_RWz(EfYHvCCq4=quN)z(Gd%sNZ1qRFGv z^hc>BnG`qrT+|>4Uw)fXDcX!5DHZN5M4oHh9*!Q7CqcvjL}A1_)JxPVR25u2+)p?i^lS|4 zjQzB!bd8Ey${wkDsmttcR2Kpl#CSw_%6N}-o^&?yFDaL)RVk|sp31*snxmUTn+rX1 zuLX`#W=*Z`t%|L_j&!B*r;5=rQZLcp$!;nKg+9Uml|yqxGeC1j^F_la5N8H5Q>wdb z2p1WZcd5uoTc?ikYU3_oEdZ)=wYDl{Dm^PsHT{bw%L~eaR3K8cGL})_vJVJrMQa6D zNmp~5gOA&f#-}&RAC)+jT~aqW16dJJ!<{1SBRwNC-+@s#0J0xpc8U*({ev?ecGPiyM}y+{LPI^Pz?Ji3a8#5efn?b(KWc-fBU|^ znzO>c4x)cqC;rQm)MvF;V?w20k|d9a4=;gCLFjI~FAkIXegCKr4lG7?rbLS=Ln@|L z3$L)>=Fje6xLl#+7Nq=-S)MTw-AEsaotO9R?|`NzO}OzLB(ed{M5IYv+ZmE2)-yjn z2;LdNB6l201nn}Usb78XPvsv(=a!oOv=Mt%G*z0SZdP*I7d0QUxQDKO-T~4G=ztAc z@B5-Vu`Zg*ttfNbRp&NiZ?^jV+^pKthCKh^v*imA8R6#*MAthXKqK*C3<_ro+!3&|sV3VO#qfx35<~sF#wVm#wXr zv7ndFub0-Mm+PsQd81c|xtyG^oTa>+{`$UVUrwz(!b9^**P7>RzFx_3TK;;vTtKm$ zGI}yV@QugpOa4lP@k+wRO1RicT=z;;;7ZanAOryr9S->N5fBdngwX{r(}c7_!*5CkfA>g#46{`oCAdW=8fv-O$1Et7)?S0IJTuYb}cw|G&rE{b=#ln zcJ1qS4CYi+WlZDI*ue}(LFN#t^cb$&^Ceg#i;iA!~bT6jrXc!gwoNoab7xphgg zb%h{ti7#=5-h273_iFgwj`wgXy8!hHIC13FsTn2m{qdX#eajU}YW!4kITQvWO?tT;Vf8g(x{~xTU8MmMO%erSx?CP6!SO0-5{u$k4 zCf4#NV_{_?ECrJF}4UgOzZ`I+?ZFg9Uc||hEIS~1iw|&Yk-GO)NhbQ mX4Rts + + + + + + Graph2d Examples + + + + + + + + + + + + + + + + + + +

Graph2d Examples

View all examples » View docs » + +
This small code example shows the easiest way to get a Graph2d up and running. This code has been taken from example 1. The working example is shown next to it. Click it to start the interaction.
+
+<div id="visualization"></div>
+<script type="text/javascript">
+    var container = document.getElementById('visualization');
+  var items = [
+    {x: '2014-06-11', y: 10},
+    {x: '2014-06-12', y: 25},
+    {x: '2014-06-13', y: 30},
+    {x: '2014-06-14', y: 10},
+    {x: '2014-06-15', y: 15},
+    {x: '2014-06-16', y: 30}
+  ];
+
+  var dataset = new vis.DataSet(items);
+  var options = {
+    start: '2014-06-10',
+    end: '2014-06-18'
+  };
+  var graph2d = new vis.Graph2d(container, dataset, options);
+</script>
+
+
+ +

All examples

+ +
+
+
+
+ + + + + + + \ No newline at end of file diff --git a/www2/graph3d_examples.html b/www2/graph3d_examples.html new file mode 100644 index 00000000..a0a1f14f --- /dev/null +++ b/www2/graph3d_examples.html @@ -0,0 +1,229 @@ + + + + + + + Graph3d Examples + + + + + + + + + + + + + + + + + + +

Graph3d Examples

View all examples » View docs » + +
This small code example shows the easiest way to get a Graph2d up and running. This code has been taken from example 1. The working example is shown next to it. Click it to start the interaction.
+
+<div id="visualization"></div>
+<script type="text/javascript">
+    // Create and populate a data table.
+    var data = new vis.DataSet();
+    // create some nice looking data with sin/cos
+    var counter = 0;
+    var steps = 50;  // number of datapoints will be steps*steps
+    var axisMax = 314;
+    var axisStep = axisMax / steps;
+    for (var x = 0; x < axisMax; x+=axisStep) {
+        for (var y = 0; y < axisMax; y+=axisStep) {
+            var value = (Math.sin(x/50) * Math.cos(y/50) * 50 + 50);
+            data.add({id:counter++,x:x,y:y,z:value,style:value});
+        }
+    }
+
+    // specify options
+    var options = {
+        width:  '500px',
+        height: '552px',
+        style: 'surface',
+        showPerspective: true,
+        showGrid: true,
+        showShadow: false,
+        keepAspectRatio: true,
+        verticalRatio: 0.5
+    };
+
+    // Instantiate our graph object.
+    var container = document.getElementById('visualization');
+    var graph3d = new vis.Graph3d(container, data, options);
+</script>
+
+
+ +

All examples

+ +
+
+
+
+ + + + + + + \ No newline at end of file diff --git a/www2/images/external-link-icons/external-link-icon-white.png b/www2/images/external-link-icons/external-link-icon-white.png new file mode 100644 index 0000000000000000000000000000000000000000..29b21e958aeca356111da513eb69923f5fd23479 GIT binary patch literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{VY)RhkE)4%caKYZ?lR?r29+AZi z4BWyX%*Zfnjs#GUy~NYkmHjR!7oUl~)Se>`fI|MBE{-7*mwP98a~&|?U_Cye_Fety zI|;iy#5!+WVm!$2Kd;T};MJTfNB9`3!epJx^Sn1|%O$WD@{VY)RhkE)4%caKYZ?lR?r29+AZi z4BWyX%*Zfnjs#GUy~NYkmHi$o6Suxps?xqsK%pp47sn8Z%gKNK|F>thy0EggRp~^B zui&mEx3{yVYphyl(rtK1BqmcV`O3=Luk#&uKYRKg2#ggH>rxDXDkQpoY|KbXa4J6L qp7J`O$%n^sPDRUc0(`cZ8CHpjNJ~Lf008F4 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 OKs#e#reBG3iu^bAV8ZPH literal 0 HcmV?d00001 diff --git a/www2/images/forkme_right_darkblue_121621.png b/www2/images/forkme_right_darkblue_121621.png new file mode 100644 index 0000000000000000000000000000000000000000..146ef8a800602169cf78c686fc5a6d138a76bc0a GIT binary patch literal 7791 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 literal 0 HcmV?d00001 diff --git a/www2/images/gallery/network/10.png b/www2/images/gallery/network/10.png new file mode 100644 index 0000000000000000000000000000000000000000..b4e92d8bca0d82fe82ea765ccd0677b45240c2a9 GIT binary patch literal 43635 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 literal 0 HcmV?d00001 diff --git a/www2/images/gallery/network/11.png b/www2/images/gallery/network/11.png new file mode 100644 index 0000000000000000000000000000000000000000..7d3bf3d527387a4f6a1f4f405a1d0782cb1b0b68 GIT binary patch literal 58479 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 O$HdTd+3!p2_xu+Etd^7j literal 0 HcmV?d00001 diff --git a/www2/images/gallery/network/12.png b/www2/images/gallery/network/12.png new file mode 100644 index 0000000000000000000000000000000000000000..61eef84535522e4eb6efff61bcaaa299defd2da4 GIT binary patch literal 90958 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 Voqo)@UTukhLmhWhm3#&7|34AvYx)2H literal 0 HcmV?d00001 diff --git a/www2/images/gallery/network/13.png b/www2/images/gallery/network/13.png new file mode 100644 index 0000000000000000000000000000000000000000..33b65eed9d84789bae6a76de446dbf5b64a320c6 GIT binary patch literal 37859 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 Ak^lez literal 0 HcmV?d00001 diff --git a/www2/images/gallery/network/14.png b/www2/images/gallery/network/14.png new file mode 100644 index 0000000000000000000000000000000000000000..83104262cc1f0bbf6d00df874ab01dd958e3dff3 GIT binary patch literal 27506 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≪j<-w{w>_n~^SJw?~T$A5QL}BJz;^l4e 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 literal 0 HcmV?d00001 diff --git a/www2/images/gallery/network/28.png b/www2/images/gallery/network/28.png new file mode 100644 index 0000000000000000000000000000000000000000..6ce74f7911c7f778264437a2ca7fe40e950a3392 GIT binary patch literal 90445 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 Hu0mjfzwZbZ literal 0 HcmV?d00001 diff --git a/www2/images/gallery/network/29.png b/www2/images/gallery/network/29.png new file mode 100644 index 0000000000000000000000000000000000000000..0003f88e2e520e9eb827f7854879ce7e0087c2e7 GIT binary patch literal 99390 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

50U* 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 literal 0 HcmV?d00001 diff --git a/www2/images/gallery/network/30.png b/www2/images/gallery/network/30.png new file mode 100644 index 0000000000000000000000000000000000000000..5d383c31efa4a836df8ce58517ab4ef2c77ffce4 GIT binary patch literal 119118 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

!-e$`?YCU$ln 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 literal 0 HcmV?d00001 diff --git a/www2/images/gallery/network/31.png b/www2/images/gallery/network/31.png new file mode 100644 index 0000000000000000000000000000000000000000..c4b9a0199e08b7458f363e7effe9b9c40a3638ee GIT binary patch literal 38029 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ℑ`&-M*9WK@DFKs<> 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

2{0>3R^es!;ZN{TQiQ@3sUYpSZU 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 Q!~g&Q07*qoM6N<$f+ctRFaQ7m literal 0 HcmV?d00001 diff --git a/www2/images/gallery/network/32.png b/www2/images/gallery/network/32.png new file mode 100644 index 0000000000000000000000000000000000000000..35e83a37433c08284a3159602038505c5d089671 GIT binary patch literal 34522 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

4`2alpqL!&w(qm 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 literal 0 HcmV?d00001 diff --git a/www2/images/gallery/network/4.png b/www2/images/gallery/network/4.png new file mode 100644 index 0000000000000000000000000000000000000000..b6716952d091c61470b6fcb882b2a7351301c261 GIT binary patch literal 33587 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 literal 0 HcmV?d00001 diff --git a/www2/images/gallery/network/5.png b/www2/images/gallery/network/5.png new file mode 100644 index 0000000000000000000000000000000000000000..3ccb199bf513dbee606ce1f822a886af9eb1dea7 GIT binary patch literal 38571 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 literal 0 HcmV?d00001 diff --git a/www2/images/gallery/network/8.png b/www2/images/gallery/network/8.png new file mode 100644 index 0000000000000000000000000000000000000000..e069347fabac5ee37a21703da46e75dce8227db9 GIT binary patch literal 66857 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

>%sBxT~Ok2YuG_v1E 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 literal 0 HcmV?d00001 diff --git a/www2/images/gallery/network/9.png b/www2/images/gallery/network/9.png new file mode 100644 index 0000000000000000000000000000000000000000..be9191a1d9d49cf814fd3dcaf8670d83f6843483 GIT binary patch literal 44483 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

Do^; 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 literal 0 HcmV?d00001 diff --git a/www2/images/gallery/timeline/23.png b/www2/images/gallery/timeline/23.png new file mode 100644 index 0000000000000000000000000000000000000000..1532792a84cc30c62f26263b28aad309734dfd63 GIT binary patch literal 35906 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 literal 0 HcmV?d00001 diff --git a/www2/images/gallery/timeline/25.png b/www2/images/gallery/timeline/25.png new file mode 100644 index 0000000000000000000000000000000000000000..2a2c245144282f0fe84ea707351e1d6f16bf3922 GIT binary patch literal 32272 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 b{xdTCGmN;M$^W4hbg`zVtDnm{r-UW|)LGB~ literal 0 HcmV?d00001 diff --git a/www2/images/gallery/timeline/26.png b/www2/images/gallery/timeline/26.png new file mode 100644 index 0000000000000000000000000000000000000000..631b3f1422380425e5126e08682db9723192f7da GIT binary patch literal 36032 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�uWs1cjK@bf7?qs1T3Yw-3POvgw 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 literal 0 HcmV?d00001 diff --git a/www2/images/gallery/timeline/29.png b/www2/images/gallery/timeline/29.png new file mode 100644 index 0000000000000000000000000000000000000000..b4ace4d2d7834bcd69707f08b90250bc7b6a4665 GIT binary patch literal 28793 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 x>CjCA1xb|tQ#RGe3p

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�fI{huo&^N0 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

t(%5}YDU12ab2;&gkI_t4_zlmLN|`ly>k7I( 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 DN$`s< literal 0 HcmV?d00001 diff --git a/www2/images/gallery/timeline/30.png b/www2/images/gallery/timeline/30.png new file mode 100644 index 0000000000000000000000000000000000000000..d498cd47e848271f5baef3f6ef3bc4b9a8166913 GIT binary patch literal 31774 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 zΜ(azyCsk9$vW@CozJ*cz2LSU(qT^zS{X%Y3LhdKDQLox08Zcts(Q2EMqmsH7ru z=yh*{9QW0U-X@n!``l2EQ6Gg3f;2M*B1XVS>U`zl8gKUT^-!hnfv^g;ipYC?=jy$^ z(br9%6sp=|SJC7|MJiPFQF8_TE%VzHlmv}4Be=`#DkQ^+idTt5_OQA#g43=TIwh0EM70K&nf!2F7!-xCIWGuYrn!; z!YNP{d2`R}>@1x1a3H%&(sI5TeLW}QvbxHzf$QRXBXwonhrx79qrVsl`hAvQ@*lOQmZB@nON&o$v>>PA=OeVWzjF79(`8DRANFX+Kn}LY$uqJT$f<9R-&+QB{sh!za-Swj1pb1cRDk>^t+=H?8)AK4Ck}5?Nk-* z<@Cjbj2Ev*;W@dkSZtinNlcx-@U8~0J+buYEE+L$V~#!0-;n1CGapuLRi;7%%oT&N z!lf~dpbX6@+VvZ=*oRmF3a!kC_E2RY(zzHX8Dq#czg^8B0p}h}#AI{MHDO(LFUFr+ zcQrKICOyKu^pW~oIM3j`XtjV=L?ag9+K45~W(j6``~Nj==h0B$aR9&-DmQs!Y+({s zXpAh@09AO;8u#OU&D|gN&gegKLlq=&JVT`L$m}Q(B&qQS$VdR<|Imf8M%#PiC zZ}*SgxBLJ1{l4G#eZN1x-}n1{&;$s-_EKJ>#sNlV&_=h+=*ms4bPTQL@$5Wfa>U-4 zRoCl`oG`aT)4J1?Ojk?*)1Ox&D=JPt(4;G?7GF7nHfXHuzq9KZ zFN*wYGRY>o;I3PFlh7UD#w zc_I#5(uK1564+WXCBU}SIitZ+am}UWU*V#!h+EftfSuDw*QrayO)SUjC~ePBKGwmv zsJ%(D9D*;yndp3E!Y5hL1)L?{2g~j!z0I?HkO1|Z)zA1*4D-lEZbPhd)!}bfw@2;S zSvkVVA|kpi;UaDXx-qhY&^sNIwoIq$(90e=dsCdyop0KM3jupOObU^9CUjdott7y1 zPYCZ16)Op-0Xexdh^pS--IB%_;^S^>J=ZrzsKx4B#BQrLlx8j_AtqG|Rs8v5D~>`% z$#>PHi|kS=tOtL(1hWl{SNA>KEkRC1A}4n@Ld-fyG#i8H9kds@At5GLB1ygy%^XAs zZ#HfYkH9uopNMK>2%ngcmLGNmQ7Rz*HUvOMTika1Q z=7ai9gGDqry7aXo>To?kE=xLFL3yPVwm!B4v++dn`fgG$zZWsKy_=VB&W@XqJBtbl zG(U!|JmBzc&Y0MpWPI$xD^RN5=Bp-P^7+s}iCiD@Gp$Hv#o)AV>6mQE zw{Hq_Wvec9PJ*lk7Dz$k&~KJ3@W(bCZ$kNafjRwC#tr%!wctzi$V-*n+@yRQqY(A< z?QAWilF!Ntd?}T~1WBj1?iWd&C>qX#TGqM&n@Dw!=vr7$jSH48l^lzE;&?69yEbYM zEselxdQJJ{GEM#60XQ6~8Fw2ILhK=kiVfGV4u{6HCk2IsyIJPz_tn}u zqdUFp#b(x(c2{>+M;&~+haE&*C!WUiNDA9ztjk8gGO$C>g?`r1>wT1*_23l&)ZM}! z3=1(e(0h+L>A52Xm5}WkSOM?f-A@OB7W%awTW*eP;27p8ePJ4>Zk?FC)R2x5A4xt{ z(|`+C1&M=BS-->^cct>gl{Ib}>Nn{5%UK>78GkjfuocDo%%&T$cEX8(8oDP8(6KSE z9^`FA_mvYQzt0fLcoXX453<7{|4On-Bkbp literal 0 HcmV?d00001 diff --git a/www2/images/gallery/timeline/4.png b/www2/images/gallery/timeline/4.png new file mode 100644 index 0000000000000000000000000000000000000000..f6fad9a690e8e79c1ddc29df20da9b44847f5176 GIT binary patch literal 30636 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 mzVOi4t*5+h)IWPw|8D?&^xTiNu4@bc0000 literal 0 HcmV?d00001 diff --git a/www2/images/gallery/timeline/7.png b/www2/images/gallery/timeline/7.png new file mode 100644 index 0000000000000000000000000000000000000000..01784eb540b5bf42a2da5d6a90f6accbbec62684 GIT binary patch literal 40287 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 a7j9tG24sumSA_(;4p~W%M7fxu-~Rz2h*mEE literal 0 HcmV?d00001 diff --git a/www2/images/gallery/timeline/8.png b/www2/images/gallery/timeline/8.png new file mode 100644 index 0000000000000000000000000000000000000000..29913f9624799f63263aea7c9b8efc3f9c364898 GIT binary patch literal 33718 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 LNkvXXu0mjfTcB@* literal 0 HcmV?d00001 diff --git a/www2/images/gallery/timeline/9.png b/www2/images/gallery/timeline/9.png new file mode 100644 index 0000000000000000000000000000000000000000..c41e2cfef933c61025d63560bde206668d6861e8 GIT binary patch literal 27048 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 literal 0 HcmV?d00001 diff --git a/www2/images/graph2d.png b/www2/images/graph2d.png new file mode 100644 index 0000000000000000000000000000000000000000..13db2b00946199467712cab0fbef89342f5b8ccc GIT binary patch literal 26850 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�@(Ikly#cP&RSHR^PZt-@Sx9I{b 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 YGB;&skjLNu4G171^6F(7=(XSf2N<{NlmGw# literal 0 HcmV?d00001 diff --git a/www2/images/graph2dSlideDark.png b/www2/images/graph2dSlideDark.png new file mode 100644 index 0000000000000000000000000000000000000000..d75e3c24ae2144400e9ab08abbce71536dedc333 GIT binary patch literal 82851 zcmeFa1z45M);GQ>Dd`r2knZm8u1!kq4Vx|jNoi2&?i2*18>FN`T1rYlxpsx#zkGR92KiL%D|n007Wrq{USM062dD0Ok-0 z7Fx3r=?MJ-K(>?Cb^riSac=&?0FqJ&0RR*wb1^YxWiwkxTL&{+I}#Z&F%mm_TN86D z2ms(Rm8xb6R9nXvIGH^Zm3!qKBWJ6MheV<(8tjc5Nl8nJj4Aty^z|g3N(+{R1U&JF zj8|}BVcsElD)e`QP$m$UNHfFyvR(!CoX@*wS$=9bS?Ry38W&tGJV>n=L~KU78z;@C z!r^^4PxK+y7r(Cd&iN%qVIP#ob^uJI3S&}-OL7>%sV6@_9a%HtdjO2f2r3ewSs}TZ z`Tommj1AF5T^MhFm}bXFZaE}xT!64!m}m|_SQ5rNHGxtMkO2=c>@@-}0+bm5hE!fF zBLMHz(?oX|z>^qKJeZ6~00|D{l{mnR4^TL$5hMZ7Vg}%v$hGqTCKv$BGMXmRfYKU3 z^8hAlIRNP{fLY~L01W`%9bou@oZJQAp9sK}+}GsaqbtT-rG+AuSk7Pjm`B3r2@=Co zL`_Y`htvZy1a!EZAXre6Fk`E0A`z<(JI0rTJ^&yi5)Z2F!KKRpdhx&jXIM450mDYq zoog~Mc=2j^u)t0j0GN059J-=ss<`LPcgNfMDwARd-b^1gh;Bg5wdm}aIF?C?xG6z(=hR*kOS6ivOv)&nhuKLYvYAE`g1tJ zISxRng&>T3B*R-hBe-KZDoicM=7kdgV87nBWt18T&fCmye$e@PSLjkIg96}fA`|r# z0MHkI%n0nM5b8n#0K_wVXiG(i4_gT7oA2CjLHOK)dSS@vFZ#H>RTNVc#n}74y&+AZ zuPF74{?Z4uhD@Wv57?Vk%w9y>p)_xvR@Q9l|xvLuD$XC!~Lue>J^!ufjjV}TjQRJfp67jyF(AtGD5 z6*FUJn`jv~J#w^BZy8zP-Ga`0r5c5B^?^r5gJsU}*gg`?$ei%bq9mY)BGOv&T8b0W zZ%OVyX2+UB=0b+^S81gpi+(FtNm+;Wt(_3e%JNc6nx6a;Hmc<7^m)nb()Y-tyQhpT%Mp2E=t<~41T3X4wJotN5igPMKS44YD zW#qDpGGj;XnGu+sn3t?M)?v-WK2(hVs5#ubF0~fF26yOu7wrX}U)L*BYNBL9L_$*{ zXTp*M`5dB=V4^M{GZ)Kd!fGN$qOH0XZ8hz4yvQDuSlL+0SYlcxU|xPs{%k&~`hj{c zFg#CR&7)XSolR{q4|z1MKs`TIc~gy8%`}hi?aO@Ax3)l`H=f#;fp@gq^=PFdDJ`P_-NKH>5~eXu}&-fJE)Hd!{!3e|%c6CuRK zgr}z|j*7^u)Vc8oo0`}ofE-2p=W4vwd`{12GAruS6D^xA~QvO%$+_<8@x z+9Cd|G09L#j1coq-Nna?)}7X!S(JAuNh#$NHWYS}R26D-Xma@E`Q*F$`}#BcKP7S` z3$To{t|qT0k0;O780xs_&{w~$eg}~$U((6Z-l=Y|3DDuu&el@b(W{UwN-d)JR9{q| zi=baAzHwFk%)Oki5mQQWo@-5Bjr=Mj1-fQa^T z620Jo&I3<}N_$*h4c^(Lfs`E~kB-B*btY4-LCnDkw#90kUYd6ERJG(0DN_Q|S_i*_ zSHXdDzP*g`f{e+;oiiUAmt-A}p6boJ4IiZ@S0uM?znw1G;oLFbdHFfLk3F3xO`FZ( zW7`L@FDlDJLa6Dn%$9S7o=Rd$KBiTxNWJ`}9S@MSiYX z)>&i3?ZMJC!0drzr2tJnvEkybREM zArxl!O6%SbOFW13&}T7+Iq@^`IPuwJQx+wj5(ZfgTEToq3;rptI`%rDPDT^$zA>#- zEg37h`#g-a#hf-)@8>SI4_+>$E}$;D6C^Nw(6e)WJkc*$kh)vHMCoKO;kvrzA z2qx`Y{1A$L9A}C!6xY@Vt)^s5L!3jeCd71UA1dxk(<-<{ZACV4xIXS+%cfth^{2{< zXpl#fpGoFT!%uP|v1S$EZDjF_ii~(Fnop__U2VEyx?r@i`Z>h z5mAVs&45xZnzIJfp&qA2EH{N{nl$wX_VC0Nq|x2hO#h#6nZVHw@`Yk=aEmbg< zo2cq2%K;vnpU1cLl(d+%=c+(wFH(sG@dAU2ai?t&YJyF?^MuO6=*9eXe=08|bCM7Jr0-u3AHRqC!Y0~#lqdT2`L z0=b>I>(crO^4!ToG~Owv5ck4)#F0l%4@@60S%@a>CrKu&C7nM3KdDpd6CC=qG3$0A zHT?)9g`Hp9RrUbbZ9cW`I}&ZWKNyl4o9f}o`0cadbY`{ts?orl1%~Zz9j4>_u*7xn zDqjQNfbRY~$Nlo@WgN|Snn@+R2G$#n8~j(%BT8NMDfLOkwYrwIJ8q3t?j|Se#A#du zGlz|?d-&I%#?p8MW*QINY)?8)j^^-ZJngA22YTx#ovC(;8k8Cg4u!WxCdFo6jtM=v z`aH4w*~_BYIpbjHv((9*0KdVj$fIx!F@*5M@ZJ|_FE-P-1$lTDgzPWZFLK2OjRz^y z2(B`(dW#A0nLJO&Hpd5s5{6#K@5e_sSwGLd+-Tk;Dw*zV?R@yY+l7rq|4`$6yT$pl z^Ml>2ISi$x=OkX#*Jj_!j?_Npo<|c!M_>?B+~j4T|STs&O#B&^WyOw8O&tjr9|JiHuiyv(d5zkSFA zQJ^J$dt(z`RdLDRx`TcbATx7xwBu!Ba&~rRbY^3;wKrvA;o;$7VrFGxWo3X;FgUo{ zID%XlY#hjc2>D%(IK;uo-rUa7+}4KVMlJ|!`^-^*jO?bPKR&Y<>VFyK# z$pvJ`#KOqT^mj~lzbEm3&-zF6zZ76>^arQiGkdG=x)~cWL98Iw5F1AaC?Ct;b_|^p z1%*FY|8~6A)_=?C;3(k)h2S?x|CZAM=xPUHQiV9!KC?H1NH{@9LjHH!J2UISLC4I( z%glUB$PdcD$WVYfkuk^-^p8^5fh-)nP(jSBx2608?O)~C8k?KA{##Q1q`W2L4`byO zv$e9dSFkmP2(s}r{ay9nazVGT%0G6of)1)uq9igBVw@~IoSY1-j4Zds+@kwiIY5Yu zqddqJV()Nk?w~XHePIveA(QF(%tRQY?BL;5JAEHf|*%^#MU@jh3ZdPM%@PAb_Cl4nF zgbl=VBbw{CQU6bgHZkEb0kd*KMS~#!v!cOZFvx_9`~LPeXZo}9&n5aM!Ye57%GfwKf}r**BQ6N7U^IuCB8Y{P zh0_GY#Q-rjF=2pkv2!tSa~p9ofO**2IoM2ipcVv;od3lBPojSxCsg#`TRInrnah}k zi<^NP%=Np?aIzUO7_+f+gPDz4z+5a)|Nha@En)xEk&?YRH01|b-J-eC#Tcp!D<_u; z8wlD3$ONhjn1vn000M)V86a%TY^-1-ZeunG==U!EM$A8TC2fA==&t`5(Z0uSHOSL{ zto^UX?(ZoqFUaU7trs-9N$4O@6#k+1&td%;t$z@h|MPVIdl38+`@inP*$iUyA0>o8 zM180F*Fqd@O&py;_7D+M=mPrhdlF7-&__y8j z9}%0x(U#=aV*5k$TQdG1>S_$JH~-Jr>8(-z0Tapp$8`R0d*;6v?|ymaAF<}fzrSzo z{xRnL9!LKMdb^*O%>oH&yx3%ioCkv$x;p;TGJtG86urLnmHnt^$3Jr3 zYWa=xhtu3Twf#OVKWd?8!qDSrra#W3Z_U_kzxy99|Ebddu;AO`esyvijh~i(!Sz#! zZWH{1>oyucE&qb+rx4vH_yyN(G=5tC1=mj@x=rv4uG?t*wEPRMpF(t-;1^uC(fDck z7hFGu=r+MGxNf8I)ABF4ehSfTf?sgmM&qaDUvT{tqT2+&;JS^*Ps_jH`YA-W34XzK z8;zfqf5G)rh;9@7g6lRKKP~@)>!%RiCin%{Z8Uyb{sq@hA-YZQ3$EK}{IvWFuAf45 zo8T8*x6$}%`4?P2h3GcHFSu@_@ze4zxPA)JZGvBL-A3c5x!#!t(? z;QA>Q^b;vztosjXDk=fuv5*Xg@`W{x^h7}`!&U1h0!Wex@c zuX(11hlMe8rbH*Jn=#@TOHt|T5j^F57@+T$qoEIotFNq#$#$F+wOvbmqcGBLlRPr8 z{P?}C_ITfOFR$km+HsOuk?c_v=dMliPanIopFDp*c;YIEfkmeY>q~-k^V0`^e+L#` z1oP&ngZj5hFz$~E5#sVR1)Y$-Gqif0U%8QtUpzdtBd?PN(evcO`SCbc{l9D6!Thm<_XP6(@L3N};_DiHBOcMZGY{zfVFGT8ygbhat}i2UyxIwGxbTYJj$GktONx zGZA4$qH=PA!bg8B-{^_UY8N17N%h-6G!v9O@G}S{ehl6|z<8P*=Qpv^c@9_3553Br zGsw9=Vr_XYSM8<@>d)+@O1anb`NBPD@zF#Vx(axZXE53pDR|aC9VjGq287Kdl8{mP z%@$%fL+8HrJy>lUNw52)`)s}6>!I#`WQow3C*a+Y92a{izt{MS{7-1k51i7Q4jgLU zxTz2nDzBSej}BT=k=BMiWDSYR{B3YF){34xybfcKM{cLg&683>$MphP>T--Q@0NWj z;wqpoZ5nd&K6dv!T%a*s{B*RzwDAIuw!@Rw3i=kW-*AtZ6pszykkc_(e)xbJ)Ai}D zH0I~x>E(`ytT40iia=OmaYo~|Ow zO>%$UMU=aBuX)dZ5t$0J)pH)%mMlfs#b*(|71^Il!gE!@ABTHZ+y!S|L3hb0=L6kP z4fy(TLm;$W>N*0)dogQwAIdt9OeJ3g_vBG47AtvcFlCpv)SX+CZ2BnDL&@?mi)KJy1SfhAJ#~Z2u85(-s$S>T$y~Q z&N1@F$PZ^_@-aY5oxJo@#$HKyC{2qYX2;r=={F73bI6E7wJ9_AcayJGnX>>lxg^O- zQOGLjF3Z7$Ilya*lCKiu4$61)gH?@ezoyJ}9e-41v;rax*tID2e6 zcW?mQ-BCO_OKaSQPA}Vl#lQ#{p`hI zSBZ_R`#oMR&Q}*#U9%^t7@o^VFaV@9mmQ&97eWBgU=)0^xm|ByJ2=;qMaW>?({LYf z=q!6=o!J{Kg>$oR*at{Rp4UHCs!$%MO?wTe=*UGGtwyLC%Fdu?e0dM)wiaZw2XvcXiPM`wjMdFF1&s|ILq#%j+>Po z+R*|dY$!^!9n0VETahFL_ru2@%VmOw?7ZUP0cj>c*-~?l>DB9bjf%;Xj=4L2El?~R zaI-3i;+}ZqklzKM)`**Ie_x}!(T5ZPhLxHo;8E@VML`(AKQ27m*z=j;lat>xb(oKc z4u@J8i2(O>B=}>X;7La+kM%K4TQC+qGf^6DVdPoM0vIylTML`+x%z_HTa!|&Eq9$_ zQyxMjsYM!q6gzWL&d zsEW#B2LR!AER1)y=6DUr_$I_8x~7bM=5Vg3M}Pl*)Cw{2tUZ$gH!FZ3D^f1|^_%wl z#EqdRJudK2wIUXx9Q%DcTHw4pS}H!u!-yqL$yf1!JRNQ9|C)^?WMrl zV@4iWEWA^6^$iUbNo_e9&>?>4QzfDj-h859)l+{OSnIrqCI2PhYEGws3wQtQPqIXr13I^FRAcCJGfxQxfonJv?Y;=kx`4;sRZ0HqXi z=7T!hMVQPs{Gp@3#oJ4ar;jfLS|n&0v_&w1H@fp#Kb{EAWe|qS)&@ z{{l7jhy~L3@8h)JC&(?e^q5E)jT|Bc4Z&gwP4>&*=ci!x4(6F%1fbto_rrxv%kywK zOw-p|I)~2P-VbM~B~c|WjJfD?#BLU+$EXWb^^@)7?%Agxtj`lMMpo}1cGGD!;}Y$a z4q+6)&7XZ#tx+Q(9-2zsa+Md_!esg8? z3IhX!^Vh?`*&Nb!b_Z5|Ic4)d&&LQ@=t+wyGmfGz^xo?PiFg@qWu zl&9`y!snqUx^R@DzLIc4F8fpmolYd*wU@C>REMx=^5uwh1H3C(K!y=&m4YF{Eo?9( zBpbSrhPxI+2`gUs(@4F#BP&}Ojx`-I>{gmd$iM&o}-t^k`N?G=o!D3h`ivU=QyLgxeg$g!*X2H1g7a%i514pyi( zDv5Da!ndOK1GDeC;2SQM5Va9;eQZy3gUX#0e;#f9DF}Il5o(7tB-wQf$f4_U_K!b4 z1~eBVQW@e;nGdZC-57Kk&fLTMA}l&)GF@&2EEDq1d(J}&X7YoE@tE}~L60~&1{?I` zyxQeqsFhKmp-bHBwVDvM3>JK1K~&h~fb4^ybpMMQ?0p#qy_LFpzG%ln=OKEMd2Ct} zaXt`o))ucRVkSHS^*Ki9WwheD;;{j&FcPUSGA8xBGC#EU>Ot~j_dMKjGUy`NC|f+r z<>UIi)V}PBv3rCb$Z-Hi!ORmyEu1?_mEB#{T&EcB)s zs}%-e^k(gnKusyD`p_PXNbNv|vA*gW=rdmX3|CijFj&xd%-OBeYSI zhjzkI8B6Day>g&}D3s#vcmz!j1Ug~wgIe)|RI*gI5p;%2<=#HdY0$QdkJU=sK^m(G zd{#us2{HJ5F9tT-BzJtqQU6;jsvat5;4y7z6PNZ3M?s0;!4#Z7Hj015#AgBM@@7S; zUlUvRVskfUV_IB^&EPo(4K#6%g6k7bn0Y1Wxa+Dk`z5%$vVyLOG zuD>SDV|!c}0)X|;z=mdvG@>bEeOY%_*Hl9A@zv)}quwSPIegxWYo&0RR9coUy~g*c zS9>mKChlk7pgd#`T8^@g4Q9f!TAoZX!9#`0Wp!C{73G%YfyG7IfC6AbRS1zUcRw*J z+1lUl&?RnW{j9aB3g2Ni{}$Lw#DF|;-&vTUC8Iu7!4*|PFj?7{D3e{p4?B#>c4|R; zFRcf{2k)R=?7YfQgYnP}{}rq_3<)L!L=+k~Vjr(IK|@2a#jI}9SWOwFyeS}?Hb})7 zf8Lx$gdM%#e%dsX+^p5H0XBx$BHmq7Pp@&m(YN1vbo^cNK!vLgC883hER8aKo)o4r zqiXqyz!pgW*wI9hFFxK`!$D$GsArhYR6*N--IToq97B1@%Rn(|OjlylI9z|G<9-zN z{P|@=XwCiegKLC*!2ANeG&Dq+;L#%l2VgIPh@N)b*ER09(OM+F(bX_9zB{z3(;X5Y z&vbxaLI_!p%}2gN!IB(7oA<%xNM;dYb{PMb4Tmn&nWMNw&&z0RSPnV8tGA_orEYQ1 zQw{wk(n!|Yo-5N914zn+kt-c`#P&Nl2Z+tpQbziIzc9o@Z<0nP(jX}vC8^DEb4c2`7 z7uzx5?48`RY4swh5k%mViLGo(xtq60GV$Qq68ikPXmIbq_kMjXfgMpu=`_uSabNxFWqEw2)?68UP~V>nT> z{oxi?W@FY8_RIkmV(1(5vqHure^D0%7c5ld&9X;tAU*!)MOQ?#ke zXv?vvGqL@?-4-7-_*SZTSE>{b8^n;5XyRB%kyug9&G1O4dYK;{%VKGrW{Z;+ol-2NHgke6aYd2 zjzwHVkK`AH7bUdWj>c=JA3p9C`+4n+7N(59o77+F_q-UXt~g*aP{&2+O~8a7Lar81 ze=3_vtSDn-2MbRn3?Vnz;Da=11|sJyG_Z&S*3bvrHnkhp=sY-2frSXMX0uM{maaV? zc0$P0Pr#tK7oI8IXnN9AyVEyXCB#knQ<>Ge73si06-94^&GsII?5F*}Y?~%r2PxVCj+0UjrJ?eW?B+P#cvL5n z;cW*_rV?dZHA^CGdlvJ?6ks3I*L?J&M}noRxwega&FwBq_+C4D2QV3|-mn?sJr_{p zSCxA7X{*wvZb+Y&ZfhR}5MdSaLBG2q-BJJ3eHs=PUau-MnniIstRjjGf3h(-oQmyA zBbrkB2h|@CGg|Iarjfy@$l~=p{rE1fQXhTCmF*oexu4#-^PKZms!%qqkF11iZ-9v= z+U7BQOeVerrnui29|JTfex!_3wsX{IH6fSaGtt1SA>>F5oW$ahK9;Q%`oKm}Y&Zd6 zfA1*ImcfUIiQtT8?v9bC4f_UZfJN55?qu72x#`Y1y6IO<|AWE?l(*P<^{rp1eM$1P zE7%rRR76{bw2_lT57`gi(FN&*=;*-%j00i4v)Vh%B6DfolMqN~`#;Ghjl$^Vh|^HO z;}??4%_4xG&P0l}1p1vn5u;wvoVt;mXNgCTo(5szh!H)yi#q32 zQ{X&mOstwhsvp`X@a9eX+hjQJ$O={fcm6xocP6q`s0_)J(l*ujSszSsQpWDDF*FA$ z_6KW}gNgST8K?Y)M;dpV)6&nVULHQ5P^oBL(UukobjixR4@KzGrW>x=tOPfN-HB;i zSczq|qyJN1V=a}W-hIH`)F>F?O8W-nlkE_dr3z%Mu5(42qPq}T+@AaoJ-y8uDogb< zTtm)=gO}uDT}RK~)optS(|puI!$DDn&h=-8`o~Uf?VUSp(vg~+S%jg6tT+H9#J9H6 zFxW#m6#U+8z-8Yy6Q>QG02g8v)k)zveOOWRcl9#!&C|9QIlETwQ%Y_c`Ut?zo6LjV za3X6zP!kvLW+uVMlvCQFoFpqw>@GM721y1*{J9(e$x9l*t7>rk)2Rpc!94Fi z>`3`hOrrufZ8-2K-o*4M&)h{Fge#6=^puSyw-s>OIozCjRH4B++1N`>4M4fcfHF~{ z1+zR@)kHfUJ<1#HYcO_w8Y}V5kYT1z05>a;8XLj8*~R>o%BKL%S}z;(U>@&@ClY*T z@~$=Dk^Ms5K-xDJFy>QQnKP_>7*{++4~uj>U3HCd7ol0iV{EpEpdmzjY6(o-tc?U~ zcz`Gj3V>7yL1%yDkOFPQH8y)ic*sjM69vd=A4B`4*e6bb!ULBV-6BK{gK0%S-!3ofL!V9J!u6S zSawT8Bff2vqRjd>RYE>0rLdt9oMi8G0aukMT>f|0kwDMW*x;H4dFWU-PF}9BA8p0c zZUOu=2o-8$)I6RidW zN5(%%HsV#nG$QwISypJpKI^7Hg;&Oj;r^!oS7=59id50*>$)ov;oJ65c(F0E-a}@I zo^ob3x1~Cp+pnIUj;XpPG72|~05Q9WR0hIzA&3bv9_CYHh7Jx6sVguXz z*~s!$%o{>Haah3omr=1%AxYAyqW1|>wu_A&QOvYc-LVGtHrIu15!q#BdMaE&8O+(@ zKC1bzdaG&MS%XU|mF*VVhfJdlm~3m2kfd0wq5JHrRoo~J_5O?8^smp)ki%65HLUuz zK7&W^0!R>Y(y|JXajJ922RBmjgZ&KN_qz>sZPhY`hHg)AmvF~YJ5+~PrXeOc?@?u! z_h@^?xDRY46Y?dyeAAkNJhN6&85re(X62822-y@x(tG9eY(w8htn_z2cEfkDl!P8o zM2D!xa?P6cL*71~>P|}4I6f~gGTFvpQwy1BSD-;x#|t=qhz6%ltxjJ&rT)nE!|vNR z4kG?4ZWkZex|!m+3;>vqh$IApNTkU+(%JHJ-}q1vugS~xM%KM0tl~a}{z?m-?8y#X z8Z?%Bi8A~dPb36muUN;XdK1;+U@;QP$^R0SK{7h=0Z*2Eeh!{R+1{sC2JKIC?J-ZC-MO#G z`VdmX90x3HzHx5mB%|0(G8bjPGU4Uq_VT?}-=5lpF$6c58kbrs>e*+BQBigdDAXgl zmKECIDaVNix7?)oJm%488`C)^6BQM{K~6vv;x!ED*$bSE!F}DaKHK-*Ho!65AeF|) z1k4CzV~5$POMJyyN{GKg_YVb#+QcFr4nV*3WxOmKn{N_Y)EGeO!~?E0}QN`b2Rb`9?iJ?6?8PMd_uC3K>2w{~6K z(et-VeH4-O{gp>l6`rM?Ld!?~ad#hU zGz^j{Nc*&#t)ufgFc}7g%!bLCPPJ*LyY5{*kbL%NM~E@I@rAZ83^D6Ut}}J0q5xfW zPp5i~z=C(Z<(GiGHt}uO&fw3Qj`zSdnz97!p;Mw%<_Lv;DAPX~9TV|y7u7~@X#8Rbu ze0y!^LJ_h^#2aFF8b|ms%B3v8mwgKXI&J?WN2ymGX65euETj{26k_ax`Fq)0MU~On zZpT8X!A{%gtO7a#Id2f~v$8o9Y`+3_-nBE9($}R(?CWIe6Pn{O*EfSXKh!p3KOJ!N zKd|c;*P(-%PpY{-D7W0j>I=;KtU4jY`y4!=?~>I<)kZp3$@bdwXw*}T1L`2eoP(Vx z$Y5MoDP@7EFl%2Y5x0xGe8Ho}I%Ak}1(0wP{6}M_s&HrxMx^;y#mq~VpPu4JbQ^#~A`>k>8g|jk0CHRzd+JmbJj68Z=O1AP>^u{i{ zVV6^NFFDdhRyp~&yn%G^Q&-u5(nZe{plj)g8r(C&~$0tPCm_*3G+HcTpZ z2HRI?BdMJ)DH2a8anE$!>_G<)lVm=enlvp5#s%T7PigC%tcNLkBx_CfIqwX7 z17-j+lw}`q$i*968JIy?oi1h~XWG@cNrWQ?ij*i*r!dMr6cf0*=+$!_skjxK@#dBY_?j=rNTz zF;J11jTo;eL1g$2&E%7^IQFf0`6}^pbv3W}C3F1zq%kT$Xpfg1l8T589tnZx=+*G$ zdmj5%VwUElg77{U0fJhEh>!|bY;3>Enbbq}CnLzgr=6=K#td1hW1olR=r>DhSn*D9a9>9}4#a-Y5WQetaxj4yRp zni=U-O0*>~?+CZ=c%ws&Lq35MYVw5moklflQTQK`-=L|o9^qRGbf8Q)oJh0gb8Ceo znb>gF0u5k;pVh^E2w zrqT*4ReyS)c&BLE-f~K4FZ2X|MT^NXwBhvq+~wESRXPS3BgKco*G-IWS0#L2b4&O8 zJvfDw)I)H@L*rJhw@g7o!oL@YIH7ro6(%J0JmRyCUTz8p7kcPOXD z?c$1ISYIDB6?zE72RzHB$`2~H;iWC+EOiVs^hh6CKO_gIE>Eie?a?)xp$U6m6z=b?X)R5N&M1jGx zaJ-5#>>e9Nmn6#SOqFrQ$wK6pMihoYVgGM058Pf|8};_iO&rR;&n-u4ZnB;@>hEVV zZS>FZGEO2a(uc?Dbq8ibA0(iv_w&13m^BMx8q`OR2n*Oa=`U*M6s;^uyjHn{t&DF2 ziWEu)#l{%VqxN1cL7ygyq=TP+P0ZQm@Vr=UOclBYZp{gurhgHZ%4iaRK7zjQvb-J+ z2iQ6t$ZDK`o|G&6qr*nm*`?iV1U zu{lGwV^nqUQ)b0c6PMSW^eMPy8!J9TB{+-~uKw^%&PLxZHX75-r!`9}b}9;vJv@(Q z>6xNGwpW6p3Ld^&+iMk+NAfk^2lk|6H?G)>=MZm8GAN%v#hK%gS*@T?bV2=kidbOL zOhFznHAexXJ|3T!b6!Es6gYV$RU_aB9PbRDJ70+BYVXZZ>MyzPx-3MW#_6D5P`h#Q zKnTYBNt2`4$cF=G>$es&cH^LvZ+t?|a)H4rB9DcIWi6U;lit8L>k9K#PQ2?M0o&gj zeE}rrdpz0FLd~AD{;ZmQq^tyJ#pH^mT zwkRPH4PbMs-r#e*mMYQN?{U%fYumh6;MbTtsCYhcMtic>?DIkBI1IjJTSsRK%&wqZ z=#8P~R5|PV2?Nkuqcfbw;~q_@ZM({MYLD`Homo(DaEZEDD&zvkc1I0d5=1wEOW;Ux08-#~arHd{`dW~!9rV&h>B(1eE-uQ;F`xG=&PP#+0%g%o)bmL5 zNL>}zuw6J|R4Kwp=K)j=fp)O-2w^x#R0;HY!jvgTmiH@zzEVOfY{{Tk78G88LB&_Q z&fFgNU;cJ;tpV3P7|H;zh&h>wM1>g^-l*u}W5-X*@1APMU#bpn!W_#I-JGt56)xQ} z_fAd2A3<<-dNXCRTRsS= zal5~&eaq^d?djs<$?39~#i*7}u1E4-9$$#*;|vVkOt(M_BXw$A{C#U1OSbEtZjHs65T zpPJ~Jlh~PRaSY=fx@+KkuFJX47{6_dK(Bb@Y^DI*KNmJE@R!l-JzdQ6!2P1HHg-ht z*;T4FxPSL5V#4ud+B3x?ZU+uZ!Baxic&|GdjhWk21nfmawRXGZq1}T$opJRrX?c^U zW2i|B|CTv zy}wu+PoL9zPT&wln2nN+GFF6lzlajRYUg5L|F-vO+2q0(_vuH(oBijyV(M&7I}JfY z`rkV02MVr5YIC)@52wfAXwHOPpwIbhJHilc6{gQE7ehbQCEw50uRE!F`9AsUC+HLV z48_k!S?&Xl@{M?PLv_oPQgg)Dhf`v8yqCI%EbcSUr^~3kDzEo;DGNa!$rIluB#869?vD*Yk8viN2gAjs|7wDE8tNig)}1TG{H>k`?+eGdzB7j zpPud?-(^gHlarU3MayUkJvK7##N2LQ#`6_~6e`I)d1fr_QACQ`&A!N)m0R1{SD)W) zwzGpMKg^A0K?*eDMD!({;A39M*THkOZk)bLp7m1pNr;8GwQqFcQ*Bb!Ckw={vKvjX zFGM&DgH;&<)bw6~isic~q$79o(!G^n@}qQOUK8tz2kPi@Sl3*1st%cb*jqp#en=Okja;In658Mz<`O{rqDSSc^R)XGx z3wg!5bdM2ao{?HO;+9kgdwEpVS1nUj56Y2fe6hu=6pZ|qQ3jBt{tcNjD>8QQ^Cija z!hrRNEw1a$@Gx}#Z_VecFo42_qfChwf$&SJi;d+rpPXP%4?W_(`n4YyljenXQzvow z!et}XixVFNBp4gF$Z=xRHdiIlM(bpKp<#QF$N8qWQ#HZZrNOK*`z%8w_CeU=uw0MI*&Vvxb+VkQ?Hyo=I-tyaAwP*gaoJ66|->c=@;t2FV zcl020&0Jws+I;B=aT+6f2N#N$#l<)rzttKDov*ibB;&gUypK39?>OnD(*_)_NW6Tw zsq@wnNKR=oXYY#yy_{eTG_neKDY2+!93}zpVB4$hji!W`r9L*I%`Fgm484i7Tet$g ztR#I_x#lSK_Ps)(CC7S5gJcYz%;?9&r(NnRc{(K(Cth3m=R$F(k%&9*HhlPk)=~x! z)`D;klR#}W{fAvK=*Ib_6;jVQMewpZ!?tK;37fU8?yJA`()~ol(_55n+uk8lTB|vG zh#Fi!JFy5UizBY0E+DZk63X7pvUc`c6*YQaweei*s0e6lW65nk#HD6iU5BGTFF`yo zOpX+Va-2XHvMzwi(g~X=ADhEETpXmuw_bN-&P2PsCQwtP0oBGoj&(OJHIytoP!rB* zxI_M-19UeMDw8ql+%La**-@Ee@hAs~ZhSAFKJgTHta8;2KLmQuqeZ1(LYyjF81Ljc zHafL{l&COX2K#<=t(^>X79M$OZ|TYh?q^yrBkn>UZQm8r$A1!_5QrCadX6i7-Lnx$ktux7!>2ZzK?lpl5hiD0){a#;|B z6jV(Uf;#m_C$WI!-9F}i&ynhZVJG(>A8XCbp!bw2lV+XK>J7EDfZbiq6x@l!He6lD zgz7X5zUx})^Z|JF!OTP`z#L$tZ8|=P`$)+nETUD9xp0BW{xn=Jf^3y_ge{zb6C|87)E1b^o-d+(G&KDVyK%q_ z=%$*{(;TR5s9UZ{4UBZHn3;Jut8(2^VJb+)d0~Gb^nU8J*vtFX!+vhTBd;IzMSOSx&E?kG%lV#yE42Dy?&Z+~q($Sp!0E;5Rk2Q}hupt$%Co7?k;O|59 z(ak7FoY&hGJ_#)2t-yRPRb)-)0Yuz>$~gwDdb|&`J%-m#Cj$MRZU+P)}_L zjpwSsgOeRlTPJZ^2s+DOpSwoO9qU#K``~r4ueDR~W=McOm`zE-e}YGP9@Ns~-P16l znyj|XEs+x>??cN%L#Uqp(F>eb;-+`7+$*t4YY8E*$D|T7%!3Cc)XcApFkMO`Bhn!H z+X)A51SF}i25DzqH^y~I;f2?QmR!D zjJZmnd40TERLy}1-{WP~CthOpNh?Hw{(5s})K6CYez| zFL;%6pT6K^3I1ZXA7kW{`spZZ-lar{Cd}GA-$kulO`!oVeCM)66(c&|lP^=?&qV(i^}`=NR|=nbDD-3+ge4bC~Y<0=EVSQu$ztq2@kYP9oZ zVHYFlUXr0XakbcLN8rF@r}t^XuwM4q?!ayw&;VAfgkrW!VSV=j^v;D!Fqt&yBaRe( zlKR-@!x9Ct0ve5@a<|+g`7W1%*NHKnyNTEb1JBVeUf6QKp^osyRpdzAMU2H%&p#{r zY-PQI$@3uU)!2p02AyuY@O~u{z^+aJ9&l7}mm2&2T9nV*abgpeyQ*XF^OWWGOxSiK zjg|2cDN+D&!SzaBleG)B){i_hYD{@&yllPy+!lf;JTM!bWx&JP-0Xi z_Cm+}>F3~!G2<0nA*iHx9>eg+ucJf0y|}Om)G;2VeUmIl)~+`h!bJj4bGKm5RIhqW z7rUSb{HT_Id8{fC@TI?t3dV3AKbSO$J6260$#L*8Ft>su{|nmQ?47C=rLB{zJ_mut zEWNzm$ch;C{3#Eo=(#xXVq>{`+LyxlPPfVzZ|GU;cAG9kE!)d`LNo&vx~T3KWhk*s z^9(79zE6Qw=)O#0Eu%2{#Lpgw(eqT)wbwNbZ#Pf3Je6zu5=6pdwp(}Wf)jvUm9AF#_{p)cqxhza<)WI|josb&$9Xw9 zCS&>PyRL)o_lU>pUdQFp&oO25gz7DaQWmOsc2X) zAUK5=IYh%LM9z_Uj|sKU$KvdB`~P9;9it=bqDJeAZFkbK(XnmYw%M`ONvC78V%s)4 zw$ZU|^Vaiz_Z{~eqkfzpHEPt}XV%PU@U2MF=zkO-XLp?Nb$Eo= zeBtILfm7rXM#S`NFUm{M0A`?czi8+g8TLmt)f@U@nQ4pB3J%K=kv)j78*)C*PfBu% zf5sm+SWaj2`#g?P<#gW9$vXCYxGQI7N78GQBM$Ui-zHad(kT%UO9eTwPx1lv44N1D z5bjGQLLKUxdFM&Yl{A1cT7i3r`}aojOD+=e9M$U^gb@$lCQ9LAma3N!5vklbCvX?} z*0hHvmhD$*xkQW#b)f^9SRWeAn;{q1XFw5bJ}E&%%;<2b-C@v>Mf=GDN|BKD*Q^s) z?gIV(s%xi_+hUH#zjnn>uZOCh3T=;HK{83qj`Ivc=0=2y(!YL1{qXG5(>SIQo0Q3( zez0IemE!y$KaPHoNw`n0@jWOj$ z%hn8#6PQDDEoaKfuop|g6jw2^&YdMnS6LPOh8z|8OJKCiXs_P3r{{!~k=_2Ivx?Sm zaec9(8hZkHOaq|8aULF>$1W!k`+j10@!l0mpMwVJqAp(z*1u(Vs2-2$b+ijc6A=Vlq&pXSEGOhDUJ9V*f+Csx2sx~9TJ$0orSRaQ ztMxa^K}lV~`-*b&RCIwJ?Y94V?H>Jeofm2an7PU;B6Z9H5{;%6E9Z`quFd+Ude&Zm z&UzxlO6}Uuxj(*M_J(5x9~M--1zz?O6|;HVWPDy6t*aM1hbDQDVSK8=8K*STs|pD|&MUGdMP!YRq? z!kqo3RJ&}$$>r}}xN{j__DZd~3tR4h%fK*T)X&1w9&AcbQaie%-pj0( z?u??-*TEn|QH}sY^0ocJGTZC-scml=^%(0kpUXe{7V*>owii~$>?+xZqv{B#n1weD zWCcJl@empv=$Lpk(0+ps_%gN85Kys4wVEh9^3ZD%1~-3yo-_7SG>|0+0czCW%K4x1cLyA7ci zh5BRPUF%1A3!)9g=dib_W}?gIfoz=a`MM{~BZaHve&}^<+hsqdgx+tnpKK=zeZmXV z>K`^#03ow zYwq*&vn=4AKj->#Yl;oh?7?M4y{=ci4)6dLjEPvnslq(z;P>jYGl5x7t3o+nRfN#g zJSYM;YY1EXb2lr0SK2avtJ2l%LPpx)fx4fJeksTg1b~MiW@*TAY^qy=lLB@W_`Wt; z{O{1Low>FwjpuhS+HkkO4*wLBEnWke{Mjx<JQ)$aJosY{7rT-gUq2Z{t*joZla@K*52&L^(I}=zm=|*b}GDPobmd1=NUUp|l z*#u0=MY-`ak@Pn^89}rvV*>6ozbltBc@!RS%M2n^22k%>P}v#fyz~cwHbdy zn~z_#E7_2oT)2ofmiDW|oHzFk+fm2&_eLnXgr_l92Ix@_aj<+n)XDzhk;uuZA_Fa`@wxvy2$;mKJJ25arjC*_}{t`9t`g zp#0b0TTd3x&Ow27w}5^c0o2;hn^y1KmSTsh0d5pfA)NU95@#}-K6=|KhCCJK?;GBU zFxgtFQU^r(LC>IMq}6#Oh_=eL-nXki@>r^6G|?}scVU2iv7#3tV8&z5@0Ds|_Ip1p zz?~Ga6tUAPR+hi2JODG=KVMj7a+QGwgbfE`{CK&QRkj@Vwx&%QTR0?_-I7mngwT`^ ziv4>$6W;Rp`C8T0lZ|^dx;x!vTLVK2K@E`cmH*JnVOgWoCE&9S@~%Xr)1y&KIYIz_}m< zm4EW}lH#U=x_u9M#&-m4dr|X1VyNGPu-YS&y=9wxeIg0J-=0B3KX@(8$UejK8L=o& z(eh1&64PJgLj~bga}FX!Xb|Dm`gtpan|Ir0%^hqkXKB`S3+HJM-A`?YQT2L?7kRNo z^am|z^x+73Y_X|^DpOYE#4=?f+=LlRiA&=MjG}vZcs$(!PkzIjpNW{rX7^#2P)F(d zcUFI2*^G+?AeCE=STlz3_PXFvOC6ZONB{&Re5iz6L9~r$Wsa`zuZJ_9hS?l?s1pdO zhUpJETW=cwq^RBYthr$?3>OUgA1}OBp}1oHb^GxGgx-1r`7W4{py{6)Ym`4KQp`1v zZ?Kc!O-l(;|7zLe03A4(+Eb`NK;F!~aq}eviIn|Zx(p#+LUY+_(mmL zX^Ri7M;7GJYtmN0Px50`P-Q2_%>Hz?#}{e)ZOM{m zSM>1fZ4J9h@tzNAIH3B*-^JxF<~#4b?{ZP90Z+iEFV~GN*OOSk?$_fhwz~Xzm9D;a zmUM+WxRz=x@sL$V>xl(Kfvs1_{%iXFZ=st(2=AGZ09gl&oTef3JS9tZ$0TcC(BRFW z+xPz){8=qE!1V$dtoPRb1Vb@B#w^x|-`nB`+ZUTw)M=YpAu1HWK<$e@GV1p(X+huU zgh;_RsM}G6o@{IkC63^5i$Cb#^7tbOk;0AGi$QQuRLGYB`^W#j3P!wZrcc$cVjqJu zQaHSe$tENsgmdQFc#~GqDCdjMDZY;Xp=|g+*9Cx^^AYK8bb5w$O#nBxHop|k&ipb0 z{{5u7?J_$C@KjX16RX+>6!{jG{7iNR*DqXc!D2i9< zoG9lnWdY7o(_t5z=AgC;OiX~xp2exDDtcB&@G5n_wdx~ff4Voydmqb-0BpC(`^g9} zrK($?LnEDqqUF7*B@@ zrMo}fNEiS6YS+&rw@yDauc$fl>?(S7b|MI+4#pMl4{6#7rc|WM)QGX-e2~7}PtUsQ zqJ_>tuN|oK1rF|R&o8iInnw&?hWP@nry4$&32*nBI805F5%;)zJM#I}O?pU&tTYaDzG3++$t)4e$; zZl)TnZ0!GLFZjVU4e0dpH zEPcpj1nMsj+~gF!yGI_x@LoP|K6SU44#%{&^C)9-#{fAUHxE(`{ipe#d~XwTFsDDU z4L$%;AjJA*_^bKhT57jVjLZMz^sK5mg8m6gSUQ53JD$l{|DC&l2Vc$Rze!L?FT3h; zw`0$%^3};nNlIv!g?~+wf?vHfy7Xbx4n0a{{XU2A6fJny1;?)o&tpe0u@XdMJ9ijm zbFQO_1Oxfn?ks~b%RvQPY6wyhFaA^pMJ;L^BI6dsMaCj@p%9K&K2Ea{73H@78U?kR zZo7taK2UP`l;A^#u0DhG^v7UP0Wz>b<&=HOG{{*hQx`s-*CQ^G)$iU1bFxV51|H(` zyI8!joe#K^otYO;S&?Q|K=>u0dRxS@m{&)R|R9%Jk3-&rZ7X707`y-XV1m;L8A z+UTBl{RH>}^8L=WoW|lTqZR zAL2>Hc4k6>0MwZ4&Oz&XF8L7FP%7xH&x_$rul>Ct>@^=7UELJ@_>C=ppRZRniVIcH z!)@9j2qI^BFAQZ*GVcT7`dmVt;x*^O_RDW;Xnz^>?wvCGN!NpeZAe-rNal!;Fj}wAK$NteW~2Kp8Us7*?b6nH`?} zYj%Wsa$iU}mx-G+l7n>3YDALk)MX7F7Bs-L%FfX-2(&=55N8OO9KsXtqMMB`F2}tv zI7>MJ?0*xcFgYXrmuGh!KL`+YKJ5p7R554X3`-cIz;E>N(@ag@Yt zh^n+0a@kfRg+_Qfwb^4pthd9Q*Qf?@7N7$>~)InotC)A zb>FVk2C%uZMVXwJfY^A$cK%#uHTYuqlB^3c;am1##M}5&pJH-nd%ZtS#-R9=PRmJ# zH>;14s%TCimb|XvX3tBn>80BgHT1l8+Z-irPD`d2O4RcKjYm$U7IjLqfFopD)aX#~ z8LLlHu)tGn3`f!dOBxaaRFN_f>iA!YSphFL)7_HT1~2T(@6i$`$_7kCUT3jtqt6OY zlYaOyv2FgIJ9i4q`dND;V7Q~Lg9}&A2eMh*aKir(3@Z|4;MvXP(Yi`B! zLnA%?6iSYaZ~-Yr#~G_>ge*i1@{$N`zOH6>63YaPs%+}Y z78lO6n|GZrUJd6zkBBiLbJ3O3X<3S#3(x!(ILFMOWJr!x^M@1(P=m16-d$!@ zzm6J+@mOuI%Cy^@H^S;GY6A9Gb{PU%jST~ub|j4*dpyR89HcbzgGcL4F66c8lmSY| z1YH;;QU(jsDv#umJ9u-ER?xFj{_@F}W%_|RXg5tS^a4B@sBlqW0}#DJ0+MPF`UwOY>vx`sPeE2S1sZQiezG7y2OMtb<#8gjbiABQbPeBD z7|6&VZ4is9-z9=ju*rWDXPeXY>w>TSxtPVmk#;`XeO)6O?;5Tc)aka_t6DWTmVx(Be9I_8@!P-j!-s}Qsa!TDHu`wQ2c`(z z$NQ`;OUdkps;c(5FBbo6@c0?=9j-i3co{o*;-^|@szkFnvl8ON0vx}Z`pKoyhm^eb z8_y(-R!Wt7MY)MP0i6N!7!MVcn-(`D6*VAje8B?4h6`|wLiJ;ReTNAYF3Ji5&cGruP%7rlU}O|{hLM&(5&IhZHu$TXcL1!Q$j_jB2L~C_euv9 z^phLg70T{u-C+)1Za!yvkIU^41=|MrF)o06cOCz7>*%p7#-pPEl@CNg3;Dn%C`wiK&Vf%Go&)eFj{6ODd z*b1v3y4{DrL&vu&wpI;fd0>Y3=3USrM-5ik@8ZSk7?$|vW}WiK_oCh#sQ1yCj$eh)K zPn)YG1@#(G#i+%kOy(rR)ReqM-%}g;Z$WS8qZDK+4d7f%A-|!2&1%e@#ks z1-Wk4YeMUOcC1m0K_<3-se7Kejg9j)J(FM(*CU1~jSYIJ5phf6FT*Fx?^>a_X}HQG zZgfAj(Bas9WV(F**5hdFZ?L*}2?)4dx#KT+lKAxpZ#y+4Ear#b@v#c1TziwvTXT3` zf14+M8UL+f+9F|0F7KxH7y;=0(M(2m5cYfA@FcyZqh*P)s8tTOtjch?)vAJ6D~i{i z1_bvPE^=n6_yLct58Z4SO_9D7Jwkp745~8#gfzN7>Vw3a_$T|e>v12Mi|3>?4J4j@#73JF1uNuFnP?=#|=gP6oq0VSDi_7h&TyBG{H~ty29z-!pBuM5TP6~`ow)9uJ;&Zn4LO=-;|nMzIa{Qzv9s3eoQzke ztbkTALS&+jAoe0d2vZQ%0%g6IsB9~!IRptOsy-zO=<d|kJQs9M(d0fGD|3fLAz z^`*^L!}$C3V&-vwZ-k!NV1QWUb-RU)wdvmDpfE8t6#^c@Mthn+YyhCt!uC;U2~Py0 zk*`Rj{?}YrxN&NC4+lObhwoMI_Utkghh?5(!@8gnh98d?CWR%@G7m2pY;GAT(UfOD z57wQE;fZ?FyJ)U}Ypis1A%G7vGmaLY+vB?;7kXN*kSFo`%xuqpsj^M~ z;6Q`PMRWycKxMtRb5ZM>N`vuRwzu*ZFzs?)8) z%V6TFs2>QrTF!h52W=r3T^0{cbdzd(071%+wO|0nNB}HLML2tLj&O=Sdq<~;C=mDT zD4UlasZPa1vd9Vv$#KEov~M;zRD3>R$-@_VcK)>@t{YNZYA#gR)HyNGBuYdRO9U&L zPYHKcDt?MJW?-|>Wfi`T0<3pr-uRaA zu{gU|&4Yq45H)5->Ce5JY8b{CEz6v==|FLvF-G9QBuS!Fqk|E*vjWxVSRN^GBN1Vhvr>&Mupokn8%T|&hR^jtm;we0o~5tA zictmGueAMF^XYm7n7O%FR=6c&c1Mhkj<2OPy-eRDLF+uzcjqm=*@QI2iEjt$$C`dP z>KItEu`ePeRcQr0{UiO7(vF-FYfu#;Kqy|CT1XTO7D{SF(EqTP7iGhtDoxOFervI^ zL%P=D#D^Hx!g1pp=tXl*gm?ap@SFgj`{D`7tc9(jYEE0Ar?Y-gf0aHBKJ|nIX87&{ zOMS8vq{IIPTuvASWO+8T{^_p~fnO1YZjz#FtR_n-Zt?p=qROLPMn04m}0ab!q(k zDnPgUP9sfz@-DdTWiFsf`wa}hwQ&>1?MAHV(RHlzl=rMTcDnpCSX_rw98%m@u+cBN4+7x+yV+9W&HKmb9!GaC%~EdmTgL zY{x79NIV8dykWr3P1hcaL$ax$vN#UhH3N4tV2T<`H2vp9j0D@n|PZ(J^3 z(mYO7Z9@nc@;SIMXzP}@vtoC<)QHuquawL}B2nK6)`C``^&!rJdbUd+Jya4$1|I%c zdz2M6%!mib9!+{2XrKI1F4m=nA`bbb)&eP}btauu-G#sRtRCsBEh~sAv2+o7A1HS~J~ey6STJ5K6bn zYcICh`g4CjyEP_Po4g9uLRbbCj5x`uGrjdN9X}Pi{V6lwor-HLh_&&DIulwS7Uao7 zUr#2_GfvE2rTN{Mjm`y@eDkdYu%b`zkiu-qy*%#26p$1wQVK4V{~ZCg_BVLa-_K;z z_rUPkP~F-VLYDDGX=j&|oBs%|@lGi8f;u}e?1CyoYdJ=tMeqwyD^mjm;G z;~!=4TmaqIHWz6LS935oge}z~%IXFIASzq62S*NZr25#H~%|H8F#$(6O!6-_W~=wN{^&> z;4jznQ0WF#%gUNm9?I7n)B02gTf$y2Yb&fz9w9Cwg#&Mpx;mc4$Y?sna4s5=vgwru@UC2pUJ|~{N)$w zcZ}Q%RInNH*=0wcmGqy|YkYKY27CBdJfu>BK|>rhG&_ zGFotC7yU3vE-=4I%mX8yh0Gwh?5Lw+i!8&mPjrAB#ek~*74FEnwMF5T5!$}A;2gJ~ z^iaBilGw&x#2(Fvj+S%duTh~%m)sDuN<5)$NHt>x`pJPd8Zd3Z{pa7904FsC{<}BX{TE z(7R~xooA~me#tVCAxUGCq_r#~5Bx;gjP!-XcT>v`Q%m)&1E@%&pBWPheJU0#9gq#b zIJM!ZVDqz36_`@N03>`h1%kl@xARt%?CRv)=Osc#+mL{fJZTwoad=v1DR_ku6`^== z6;Bo97c3fLSunphtq)k`S$IkexG>TSxO$`*$`(&%Q(g?SnAt4~hIR1&k(_h}X!c`) z$`M`}P?qcg(Bz^Vf9DHn>@B~4GZzw9sYw~v#>rGVJXcSjvrOVn!f1;77CAm6r!Tcf z=oN4BE;RNb;Hp!t3zr=I-u6qS9v!Nm-SMrzbCO8f0D|T`hc`xHGz!sO#u#K7_0--t z4bK*xwf2UHnt~k1xb9Wnz}GM|M&RG@?z|Ae9C4B1O$Srn@Mx zb(z`m@Bhh`&<~tkA?+TNU6U4tq|w*1zl{pZK+m9M7Ehp6=ADl>b`lBifhlChn;b(b zKPJx-5Cs(84_e7R)unr92WC>gkS3l7A^tu7n|pqLd&%SQUrpD1kw6Rqs1ofD=rtpo zXJY~FQYe8wt8P!NhmKNtL+yxceA5z4uyZLH4LA$g`n!Y%=ijR9-p)lWLkZwJT@7;}Iv6_%TYW=@dtD(0XroMaELb1X@Fx|uMRa$}PQI2}_D@DQ?iTtW&!#BFU)#J!?!AiSrGgE$gLjfM7YcEhLUcsf)m- zw48rezdtL{p-W!;VfYwCl$Ld;@-cdi7%E;Be7^~$&&j~!D*a&{pQtWgE+5B-9bjwz z_cwpxHDhMkm;TYNBrncOv}zFE8MByg$7VNd(ql5k zX0VXGTk`T2)GogkgW3+bMSJav`%u9`Rbs@}DlD){PBJ3q3rCGaQAJ1WNXavr%I2o^TP$DUAONE6b|ajIBjuHY!1Ue0@@!6pFW0k(S#Y zz6$NPUj1Q7vI0Ip)MFvH_3{0Z%pzTl-uEhpMlW}B&wdamm(t9%9ope_5;EY?eZ}(nNeRQT^8Isp5G#)zAePtd0R0EC#cA9 z=MsQHQKQsD4)`(g2wf=Dw!!Bp@Bniu5#XSAbvi8wOVa)6GRJ9TU{yS|)Z>&tat?Dz zpb?;L<<>(Z79oWcwY+}}6rpD%fy<+LF>Aw_9lxO>&slR9oKU{{Aj=9FZ=$P`OJnAG z{liJ={Ni1cVI#=Ce}hJ#+UGtXTHEAvo@WFl53B#9I`bMRt{w5+zqj9{<~aDMZaZVa z_;2N6E)Rz7iG%1rwV8R}*V=fg6lSLor;xoMSRqKz?tu!N!pt}6K074O1@(R}G?jwV zJH5viKyW(&0i_t88bma+Wb zcBI{6#&0ki@kfEU(cvl<>^3vfXZUJ>+U$Vy;?w@Zlw6)A=MdserlB`CNTB{QicW20Pgf@AB#4z~JL`#@KpNr*^v7|Q7T*W^o(3=M zllPSViP^8ajOBo~2bz+!n#4_G_%G)(RYN_XpX59UAbl6K&mN2)vGOlDQI%Ht!Q(NF z5d-tX;W8UTidYDGIw55t!qEM_qYbS6YPK%^=e6Mz9jz>B~ zAK&C2Wj?mh5u^5f0zQUQQm@up>9+2`Ah#><-Ti#VWwj%ezph=G+fhkbJ6N$$WEH3m zf-qnslW$3tL@0-(rlpSsk-E_`yO()bO-PfzIk6$EM?ee1L(kK#Rk7dkw^X$IVpGUh z^NjrUREB;7ygAVXw^VY|NMHdbi*xaqXKMgL>0uRir~sqm!b};Eq+!9n z-JI>-4Zz$GFX=>D!+W;HasDdzuRHiVFu=;^?ylm=f)yOtO*C=&TDET}Gf%6+0qnK# zO&Gci|M01gFSOeg;PDV-_nS_a(jqPRwXcT*+N*#56un=nB;`zxK@J{S4?0O!OKF!& z^ty+_Jktq1H>)^ZuM3*LM`ecqsVvhul`f%lDKa{bD-VOP-`F^PT+6d%e-~;^=rE5J z3f1Et$N>P(T&#Iaz8c_xx8B|KDy*gCG|KR~fSJP!L%YozMr|$BP|@!9i!u~?zJ&1w zFLz)2`HJOcg2|tPs0y{MXQWUM-i>yrA^jl^q}nobAwo1ea63U5fvjlR@>@V+TyjxA zr)mtPUACIB{EUHYZwO6vn%j@JA;WWnw6hK)ukqTj76^ zPKS-dShKf63`@5D1hE|Qs;{s;wwu`J*#7bThs9X%p;W0L-UMDAsy6cYsHZH~5E%~v%V#_2qDXx1K3t=*m$u<1g^>twXH5(B{N`L$`oBn)_g|JaSCV`@3q6z!@-~cl?pK`$GqqY z8u^(<1~+|g1mnsgvF4OR|*B zPo%y!Ez8t|&4iuj;&yM)u0J1uid(Yx5%2e%)7w;i6W-Ci(f?TUvKW*DiOS4zK9Bw3 zV=L-*h+KSNYkVR&kP>G6X3(0Cu*nIl>Du?$ReNBp^*XK8t?`wxgKz^g6L-)+TsohlYZ^t5NVoa_d)kYur2mIhPNxBzz8{oaLHoxTK8Pzdhhh zdZu+<#U`F3x4)4S+e|h%o5~=1>d5eW-5G4QC@LgHWFdV((HGBPC%>mipZLcD|G6XNf@t3{N_O7MT z2~Kav_j7q8XD~pTo{=N?mAlp}RO>U|N;`grBZPq_!VF{0ma4-NFr*hD{7u+ZO_4W$ zHGhZ9zL1t;t$YDw?{)%*3mZK~J>duIqB3gSqJM_ttWcGu8Wu_ka$>^5V<&c<sUb+#624$%#md2RDgP?gxY3))KO{*Y62 z!e&aD$@uQMzpRU2o#@x*qEP-Oaag)U-RQ-qzax0BY0pKaU#M8V0XUgRt%=`!`H7#l;A3ohO1ik-a{DU z2ah0GjHQp~2xJ6C%N8QJN7`Jx^>onkn~Xb?tfxHy+0og*9e}FIa2hTLzIUD2G7@1@ zS2WJm2*0O-95D-L>{?YM--J@MbnMMyHgn@O%hSmq!^0Mb&jWnx$){4J`awox(u?BZ z(LGL%5L1^vJU-!bg3?8D3c7v*`(;ofcLooeeM!qkLTMu;p;jUSJBsr3M~d!*Ui&R? zJFPYIH|Cx2E&MhCC{vln=7#|kt+6BgCT7Z6hx5%gXJO6c!JJQ*V2EZua0G#b4^D^a&Uuld&u?keaV;v#dE$Xu{e=!TEtQ8%eu71#S;@)jFZQr;OOCCgc>)FTJV5W@1&=Uf zZf;0}zysO;;&;|Rm+`%Z*?6NictM+hLQ|ZG+7r(0HtJ=@J3UCCf5CU6#U=qjejEJ_ zCidS|x6L7SUhym$ZVX2kAiaXB8F~%|*+mu?s1)7@!23=KvEgv66JYG<_W_7P2?_x3 z?=vBCc$F|}4RZn)%P4c!4ij%Wi$o(om<-S2&O)~($G810a7NKONN9bSuFva3nHDT9 z!@NqL2sa<-_?wlzE&-ZGg&95`ytqt~=#Bqh{llNgL?f3P5b_H>Bu4g2*0wE3w&D7g z;-O?Np!xxSyKN>{_cL_n6)F0Ou}si>afivg?myxV$|Z(>vSbiHVno1nOyp}_SiJEL zfkUfcN5x-yl%cfqjuJWMl;uk4Ms5QRGRPYZ>aJ#P~RKo<&Wc)d8E5m;m54 zu6MI@F~a;Dlxzh4q->~2I4TpQO?yS`J9`Q z4vDE!iTS-U{F8fWUsFG-*Z*tAuVowF=j-QV{{JQiRspl)g^hP<)H2KcOb4@Ie%n*Y zEU!!#*9jZ%atukX(8nsn`l{)B7oajNHNmkUJZ<5H=0HpJRpM;c&3q|aEaiB z1FSUPj~0BUf=+&B_+t-;3f>uh5H4Yo-z(li7rBl7N=pVU=3qi8IjBdUuoR-8m_R{S z6q}rUPm~H0FBfq5Hfr92{`hS^5#g*fxR9cE32#yG8A8pm>d8;?aDa18LB!7?HR$j1R-5Y8&fj<{`G zQD>ipo9>Eb@mCt0Wwo|NMVjMXG_1;s+N@QDwoT-ZdAVI2tjQk$(pvYjHfrTwJ0^0N zT{2EPK2{vsO?u=X0tGblDuOAasK5h7p^`Iy0oYd+2PxsqLKh0|`P>DcajbxXpk34g zbRjlk+B7&o2 zgSk*-2`w3I9!e=EWxb^v8RWWZ2N~#zlL3iwgdbQca*(!Q+VnC|6254D`=b$EfjAQo z0zwAm03|BAmW?b z4yFuM7MS?7G7W})WKB#~sl^(V%l+yVgZsnHks>>?%J3-xAx zL*OPEq3}ntK~P>}(`-+i7l?OsrX%i>&g2=K@WGn9By<&Z>{q3tW{2gpmKP#Mow9f7=7#bZwZRJrant0vMt*oqO+TK|bQ__e-Tr}D6+3(r@Blt`P z%l0=8Hm;i^GEmhT|^fZ)#MQO+_yZO=U*#^qr&E|FNBe zl!`Ia7$m0|^foMGpQC?QE7Lh5jggt!zhhfLc*C`i5pIMQiCnq!6K+@jP zxqV=_oMo4v=2^I-B<2(PO<54Km#TlqPcr(O-*9)$%q^Lb$xN9<{I0m5)xi%6;h~(cZwk4(%6MdGABIrB5ksX z0UE}b99s#gy#w}ma4ZA4sw)1)H5@+Va7s$3i?IMMV_6I(18~q>cQTMzV*LlLs-E9B znp+7h$3dPOZyiW#BO^y_Hhozu6TOkBe|pQlhw#fX22tRF^dN7Ccs~#pAVu==Q*zC7 z)bjhC4gyb14g2Al#IFpB?}vzXh2+w&rdD4EqO4L$ z1c_T$R-at#hAY49jA&+in*~&Uo^7188dc^A792y}#03xQjM5V3J$K|kvrK@%RS7Oa z%y5+~RWD3Ht`YNW*}pgs?rD6cP*(?)hWRd|`JU3Z%Z{3Y0?{{C7-WLhug|xV&q-Z% zK@QZ~Vjb}5NWv@lf$GOXyN}&A)5GMD3~kef_?0e!l(Ax}B-?BG&U@CxQ_T#3(Xb$o zY_8h!oiSjw(ZU z#NvN6J^9{JIe4swq{<}P@mBElR)jJA)gzKJeI49ZJ`@NrUQUxev$s|`a#qOZds$Fb zJbBqyRpfWO-5)(xKq>VvW_{36U##4Q8t507^H-nhI^wTzb`y^bRdq{U(h;daq@g!O zmm!S^37H5nk!VcRYBssEXeK!DSShilXbzQYA`-VwWRhRh1iEn5x9E{V7XQATNXxp;^7@j`OfPuH|=m z<0kUsncmdAqF_}+u8eY0Nsd2H`+K+C@>pC|w*R&|IQgL6#CY|cnj+4OWpaj*ZE|@> zBXpSxQ=;VcTCAw)Y+4{4T!4UtXr>9r*bUk&#|t7-Jw_so!gS?(Fu*ynGi z`*p2vBt+TPui+m37KxfgyhjDz#d)~$qx*kIW!2(^kj*jo%miZAxBE(-zTVfiSK9jR zk_#$_^wTSb=Vgyh8#lALie0!t4~ODUMt-O5z{gud0Zzq-hubl15W=?PNjlK^_t`7X zQ=0<^zS`7Hd`JO65xb4x1;LOE$7O%ICI@h`(*z7!^+`2L)85V^jBkz9-BmR+Cw`vk z>zbVh@S)z*Y+U4-q%qLs#q`~f{2K9V61yEIF3@WJigMpGizWia2p#4_-UJa(jz#*q$ z(jNNb{SxH<0@-%n@&hgK)BnS8Z5apY5AuaN-q`s2<)+S}pxw;60XJ8C7BLXm00*+k z09wmm&M5;`(oI=!l6>cdA@&i;-4X$SH=?J8+4w&l$kM_3O4htvl;gqsp`}ygr53uB z1(x@Ox3hi$ne8PYuSos%D)~>{&j(1CWjGEWb4c=J(_2k> zp$ni^2fmi=QbTkD zF5R40m1p48fm}uW@|SVbL61}OCSzIY0O+n*zW7#|rn*p#?$((v2{lEQxkpLvacHhi zSaO0T(Qa_`EyG0&)ic|Bi{79{a^UGMM_I+`8K{ojC!{Apm9xUVNIn1i^33fuo|QvV zjl6dd%=;ULDDfs^H$}w}$IID+q1yh3mMg5Ebt4L{GkA8=&F zqb$S=mrcZC(ZK?FZ{D9aUneCCM|XT3b>|bllXLRkgvI`le%btw=u(>&v9Yna4=~*y z*poEYGI#!pH>Eujh1IV8`;6+-f6R?eMSXeF)~GK>_aJTaSgGH-s<&kUzV{k`Y^|I| zC1XM#uiO|8l_u*@?7ymUN6!QX`&`Q%+&5Q?%T#Eu-uLI=$|8PAuwmbWc*EoPGuEJK zKl!Fib4jyJ5+?s8z(+E8+nqr@;HO69ERD1btRxp9SGH4eo+;zy+l|lAG~viu%NoHV z`vZ6Q$8ZeeLaj>hp5S6bT$Anc>DSOm*kTGF2+PWo9fa#C_Rrc-wtwD~#pO?3@}rgH z@d(pOrmI-KTuYYEv%S^JJ{6F&s?YqNuN+@!0d|-GEOy)^HE?M`kT1KHDfdk?3yyc^ z3QsL}FDl6H%pfKDENlK(N?%4oH(syRFt0N=U^j5*O7t;@Bk;7M9gRY8jPIh!ID2Oj zBppGA8dEmJbuogWKpaBViTaX-0n6w#YY0o_)ERzFxdhF8ivT*k4fQ1y2ZZIAs{oY9 zLABJp(LRq)(ih2bAmfA~@82PDU6?oI(BQq*k2XVe|6BL7tTO}EfVX`|qn(o8rQEK# z@4W8sS6`ns*}>j1d(Dnp$cZI8`;G})T~}F4``q5MdP}WVx~~*>CU=jFD}0d*moLTj zHhsIhu4zK@uMRD%9nArID4(O^><>Kv&t9FUS%k~?j@|BdMzBDHOEnKSb6w`Ie#JlX z<+{SAqlkML9>9xfEs%|~rtP9&+OiS)e~f3=JA**1=>UbdM{`YZx#rHV!QzVI2@lbo z>9o9$1ja8L6JL1?#q~AGBhC#3P!FQNf9V&?1sh_sO!dndW9ywDt6z(!(V2CbmQP>S z*GZWd=JuxezfDGtkI0`}LM{^)(&NDon()P=XFa+B*S#MghuMuFz4#45uY8cu1C)mV zk%u52%!>9FWpVqA1-5&72X+Ac#bkuO-_ge&BSy8rB;77LNNw#fusEIm?9v455nr^+ z3b;5Ee2jcXQuOed_*i4UeKoP9L`X$_JHT0gVN@d3>hyr%Yq)F9lxmbN*=CUu2il>p}2<#j|oz{!YkpGI-eF1bzs}+-F{x_tUq|I^7VB(y(EK9 z!1!00di^VgJz&ebmjPORGZA9uQ+(y!=$r8Ris!0%>c;_Nfb^Sws=m9nsVUicH_fV< zE4f*BiN1Ixy`FzjuBgUus<4ji7wjFeeqbPM$h9{#V6#KNnd2raOwg%VwEfuhvHhjl zRPod5Yj2C;5W{quGZJylWjQ%ifUjDqY{XcY_ zRZv`A6Rsyn(BLk?-QC^Y-Q9z`ySqEV-8EQncMA|8xI=Jg7hsQ}ES6z)q;u!(FTG`u?oXR11u>wuGAI5gv?{@F>#m~j+^8I6a zK||dGV};#RKuZ9R)!%H!lWOb26D970_*|I(c`m-SrKN;ROugpE+x`0XBSXRA*q(cD zkNbiHqms)qYjxdU+GRFqMbp+77MzUXhYz~cdzsyC=Gl~7|2qm?mkR{nkEr)cgSp<1 zE5Xv!pC{!g%S21f_}Q{9>K45A6FA6${GB7?T8S)KzY|)UW1vrV<&<@1(>h7IeK9pYT4WDZaAohzLa;mVUC5(SNy)Ci&Es6 zga%ENh^EYi$NBn8pyy`vBk`5w>9MDDi08~~v-;z;3`*nTT;c5y{{!}o!HPi$DFk3R z&;VJOX)T04a{~yXo&bD@nUM#k%d5>b)aFrL&%?PWoejecJHuw;(&h?WCuY-&Q^hUq zv@P5XxJ-$K)g4SD6_<@OD{w)?4mACh#1NdP0=>!m=&GH3Q~Wy;qGHCP3CL%CH`7gi zl)eki#@`fXSkt~@Ua6Ab_ta{)1jatOSH;&xjMD5+5`5A$~VjVy`u;aOID-v?DB6&M-*vLU>o%hM#qZVGS;DA7%BU}2 zzFc~5ypzi##sXr7cAdO2H9@vq{>s3`Q#i!~s)oMNQid%UhovwXT^GUy7 zHOk}BV&`lz!&=kB&D!!#)iXDu0R zkXQh?FeMpKH?}X|4b-t-@vpaf>4i;WCb3s&z23L6_c@J)LgUKjiVzt<&-XAot!pi{ zWMYu}Sw#@g+G!+&v-K-1ENuN-=XvY;HyNMZ!McJs13{@tq9V}8VQ7tn_&93w9njFP zZM*-xlCR9wIKx7;T%s3a*^bhF02t{3ev@TdigJCl8O2}EQ}y(FDl_AKH7dhVJDJR^ zmG*AMOE<)LwAvwg>4MzAjI}i?fSaX%4SdvSA`}^_jGr*0iErJd^31=Fu5dlw0$`Jd zg#oRpsZc-jCc8yxi-FI>P&mqZ29kM(8hqK@EX$@YQ9QNGTTFL#|3jvs2oyf=z%%bQ zc{d z*WIF3*Pr981N;8N1n3tEV7TPE1k`Y)=M2JWt$MpI9DDT>k@8A7P3NX@mYM9tS;$eQ z&ylW7ku#REOXMN3k;zTV^P^ehpD2MCxb@mC!dWn@asbNtyi;Y=g9G*qHAhi9eKVTf z@bx%gAz{K`rzTg*XMHX}By`+XsK)05vx1o$Z> zVfnnY5qKXa#!tNSgZEbSH<@lBG{3|4@9n4U> zTdpaMaygsL4>V`lxCWFx2%qUbT8%WubrJ!!LB7z+Oo0!bN1Mo#wgW9h1DLElbi9xy zG~nDFsq)un24dx z-{q$F?X-&RCE7z?k)@JM{t;vTrEt~(<3?r&+G2nIK`Ap{(Me`EVg(WN#@FAB4b8jIU)ee5ebSk#;;RmP(^U0z{% z!ywZgsp>P&h|6AIKvI~zzfRlWsOQ7(Mn9OIWO_?c;&+y`zR;Abh|;0i6i~bIosL89 zEsh5QmQ79pJzd7}NBI&M9w?PEwSriMTBQ=C7BD~RPg0nIE#N2!p^t|5wP|SH^^e60 z{`-K1@NRclwW6!t`gjWmTq*78slT_&nCCxTTJMz{=N4W$|0N;^DWwuHNp{>HRHssc zD4o*EysMu(oi&i^(qu318Yt2lIG!Q2)C=|2VwF)!h~akR@Kyy2RZ-worBdxO1vKsT zF_bGgM)`?*Qb@yEuf(j#!Yvgu#0Mj&!S$Hoy5sN1!80b52${yU=`&>)ZNHm+E2$K( zs8+{Au-*|$43GvCXh1Mp3giW>+=24Y+v3y6(K@!e_7pj@>+d5gz5b4W&-_1q+3V2< z7%o*DzN|JMbHM}XhXQVI7Wy3?q^7_|AU0$&-*bQG=ELEwZ#(L7<=kv@DVzVKQZr$q zKQ%$%)F#Zc7m)NuDhsT@aXF?Hu-~#yEPtpO8(Vu4~oiVANG!~HJy{HT=!WsM= zB;Cz}@+~+v8zx_M9vfyFOr_%XRqEmnj*aD;>iP;3hc*3AG(FpbTf_^r1E*9dF|)(6 zdfCAd144}d^k^FY)1#G!%aHg>4)|F!JDZ39?2<&M8hrVX!Rt1DJR)e4dCn=7w?(gF z-&9xWrI!hn80)sL(SDwl=y`rV=nEh_UBZIbyjbh>JQgA7c&Jfh&b{}ktT1S^-nGNf z5vvUs%G7DYS{m^o>O>-2L~j_;sjQS@7ri&tflFc+R}-GrZOZU)RgQ{#W8p)Kl$6EL zmdC|j%AZa=+pIemnNI3jKp_1E?*UWdSj1!<$hAP^+7_O1$_Vx}gKefkOC}@$|GB&q z1%gQ)#(B{gDjFYT$qC&Df_awWoV1l#HRS`|0#?Z>YFE3#5S+%Y(eg91Js#LtfxOvU?lwu-vvHS>+DWo)`^_3BTO@be$} zL5~Upp(}l%D-}NPkJ&Syd`vLlNl~I`lj|5rx4IlYAg1RqWn&tN$-o37Xa@ulUDJZ) zrlvMcKPP8$>#8bAjw1GfAizZv0~7KF0zD^0b;z&@AVA7n=7~Y$4jdB4-|r1JkG^d- z{z;nQI6fAZ>Ppl!1F9UoXlQ@)CCAMK$rl3#Td2t#(G*`(c3)I+oQp|eVE+} zvtM24S|&(=`A&8%E+&QGE0uqV#b(vv!4qi<4-OHVs|^P2W}fRrxoLSJsPr@XqdtMf z*w=FP>)HW@avCHqhnZ(#{-GmasZMN~(i;n&3?alDSFfX$>>~ z3>M=Q&KitOf1PZ&XEgDJO;BDkbq+CYD@dw`q|EzPUsSqFgY88K3)k<$KYL2K@%p$BsW`l}_&65AJbm_1cfWM}Nmua{Y1fxs^sq zwktImd-wHfuZMkTbF_G-5`S6FmSvp(j(N~Fjh`Gh=l>&PqLX0-FwJwXimY45Dyqe! zN2r-GRV_kf+UgEsTo|eKG6qe*M8&!)jrN;Ii?y(wl}Pu8#aNlmfEoP=7}msRWNz44&grRH1O!H*;V4e3qTOiP=cQk z`MNJhF0DR>pu%_zCZ#abI9h9a%>dP|=V8r3`|F8o9BS8%dfn!0!}49*o>Zi8ah6~0 z|?_eL^f1|=j4%w z9~vMW>;N%cG~TX2oy0^6aFxu1)olahjR>u@g_smP;cfY+i0^#gC#6$JSkZ`m%PI!G znC(B8pr{%8EJ7e)LSljf(1H{bLSB(z1vw=H;N81^JdW}e z@2i+B(&v1%E~eQew<~BvJ=aZ}N0cC=U&WL)C{nG!%hXQ5%R;VuOw;sSa+kEw+hTP+ z22UuHSM;$RytC(PV>(O6Y&+O^#~IfCJg}2r1O_wk?-1ZpCpLuO;rbVDe`a4HD&HEis5gX{zcgp!ushMYaphFl$sH~1wGD^A^UO*uHe&vjBFW^$u(pYiP6~A2F z9f*mqbwSvttI}Ir>Zixa$_0qOcz9JC*}<1{+IQvvpudc7V2a*=a3 z7~-3WSub4M--1^B^>7v7Vc^O`xB<1zwvZIQC zuJ7w4M5#{(oSa;)-tbwp>=|v8wymA6zr}xtR40M!ss*1p$i1YEhnZ2_3mgK$!OTqm z%2jMm-jPBO2h5ArljPwNom3OY6d5w;7S-6MUZ_+!^R)2{BTwY1_7LU2zMQ)Mcz@2# zLcgq8zjn;FFj}5qk7QS{qp=A_LwNGp?e2-({JH1wQveS(PR6L0Hk_0SIt7d<$nd~Z ziBSuMZt1Pcs zv^o+)6aU(P{kiJwJ;Q$;HD>C}Vf&Z1dr_%lbf=nZb^1@XXlG~Rs@|$Db+{IQk`rw1 zOa=StWVgF_Oq)rNdZW$Y!eXGgBxv zX2+%87`|;P3Zo4S8rn?;kHrC>hNy$#dkjM_OK(e^=`dz?Q*cnfk!L^@Ljsdf1e6de zM9Lsxm=RJcS^1zXiF0~~6mW~9jXqO^;NSjU?jOe+AVJPP{Y^{PnYMI>`qY`W4qUs7 z&;3)=f}vJF`}3iRXw1C0Zf2!hc19RlSEmYRcV(U>8VCmwTDT-a7Lcj2X2XnF#Md^>lhJx$61Wjw;i zReM%#?tGhhZn0J0KUlK2(nKc;3%G%bD(?~V)19&JR32FL(SZpuStopjjF?_qu!<~J zCE6u%yU`q)k7_EzS8ksblCG3|pJM@Dm6z9rQ>Jd2wDNtr=8c@5$#RV8$o(*dxej3V zjZR&o6@cozt9&$ae<=zrs+%$txD(>SQ%qq@9cV-=P)!r@<2p+&DIkU{{v*1F$(MRv zA;yAUW5}H704*3$;bBx^IU4~gNdc?(^c>g8exA;|EV4WO@at%4q$*_-VFn?#obr2| zgc4A06Yd+TLj;#4jz8!llIbQHWJxG?stH{sD}7l8WZHS=@4X*piwPJJXJ~S9G!o2} zEY-02F;R03o5?{p=^N)n=Q4)N&70?!Nx}S~=fftQVCCU}{py^Av?)#ql5l{7tvNR3 zA+G8&?KOifTn@MKh0la|hjHe5l1Q?XB{QR6ZSxFRb}+&NYFtqw+NQBzSCy5b^i*xu z^})@?)L|#4Ez>GZm@f#UUVCxcBf81_ZplL5J3z5O5c>O2efP7gRB?yQ{D^UA1I*0a znX%ZA__e5=OYht~I#e|&?^6Og;$#T(!%~$EI?kFX2r!>mQK+5yg{iPa^h=P6A)Js? zXbM5OX%PZsi=lsWg9d_78H+dmUpJ=CHz&}~_mQ^%LKX?+%|RHX<%UR-5Q-d7jv(iD z%T_2111mk8&8cA}G77rf2 z79w#}jN?$F?JBn(yN?pPM6tb~#jti<(V*{j`EyPIGb7f9Dg8!!B0#^-Ii`Qcen#e( znqJGGM%_Gd01SQ(c=m8@nla2Eb=L&LyE`pSv^#gHx%zUHNv=h0;TkqA2ei{8WV9k| zNo6WQ#NJ|%1+nU_pULnH=6v** zqG+hozoAZ=anX1CO`L<*#us&aJ-lr|nR1))#V?LF<4Fj2vv=v;>q&P)Xd{{-&CSMq7_Y{g2pZ9E$-j z?5t`i&>_8rnMEdFmp zyGX5D3C?&FDA@hh~(Xsc}H-q!;o?J`i$ z1Fn5@V^sLZ+nVL!1(=oYm($Fh{CD~!gv-^$my6gh;mWB$EqupFW!80hQ<E~t2ntzf! zJTW`Uz>4z)Qd$p=eH!4q@9)@!%3y6!(a3*HrjqTGO< ze>QSvr+lK4luECdGB02DK4RtSXrajd{&}DpAC_b?C++6;pI1fQ+Y^MQE|-=8h9_Lr zYC3TYA*DDV(_sgipA`vNx!n~4uT!W=kwCqO9(jOR)EUgaKe&cYoTO=qDbjLJE^io$ z-$XAFMgLID+x1lKhW)o~mA-BS9lKT+U>(zRs3AyI(k#iF*DUpI9-l-_uj5_Z-%A;k zZqEV`D4mz6l6oW>-q$P&291?yJ%$I>D-Z(7Q<|e@(bG#9H)%S%e8gdyjiD0zC5ecp zty3`7w2N1FE<%7Yeo-!oJT69qmdJoY`kO*+>Vq~MR$=)$8@1Yu(>LE(BB>lYRMJA7 zgpD#(@+=vw#E?07>I*wZ2EL&qQgUpDooGF!pf||t{zDy!7SEnJl6_9sydh1edjFoe zu6xo3<$U;?%hWUO%-K7nA~q$IDfvW(i+Upk$FcgG?0eGB6Ky$A{fp4n5CKh<^|Y3l zQst#g%K@LsTTAr)nzbeRcL-enCX*WO>oHr1CF3XT-)s_EfFWkNK(hu8=C&WZK$+>59ERJx0CjATneu&{2g z3g`D94Hs`L7glDHWSy0l-3@wWS}9eXBtW+e22@=QxTwzRxXd^CyKiD|D1@Rq@${O$ zQki9&T2rACH94ep-ONZ7TO*s#r@qVpz?N)>VxFUr$4s`n?^*8TzDCH7d+kp|JPwmH%+VQAgp2GWrw%Mk|`gNwwJN! zr-is)*+MC3nD(J)BRHg?Ck0WjX{y8eMdDeZtK_-1rJDKtx!opflD+JR&`A&pg4(F!B611?^IlruDtnnp$@XmXbFS?@MDq7Jj9hk(MOvcN*r&h#B`IaRCaa9g-hdx0gifJ{G@|gDyiK2!IG$@PC1DZKz><~9jBB>rENAHdn-bljZ1x3 zC3=_2$SHvMX$!7{t$8MRut`VG2@{e)d%jhae69Lj@cX35iF!~~DafXVQh93?+}8rJ zof-r1Ne1}EgbQSU%_a7e&fn}mxN2jpJ};INmGq6VRMOIyoXBKB+Q#`cYXtST+BBx3 zg0N(euW(M21JPUy^-J+}qao5xxHHzRHP{t!`5Q*dKdlaf8eF5%=S!$v$Dx!ngqwXW zcg%L^GVf*nCDGr?6wvJGEuVuR;OYTcDaZ&4lmZo)!)cxwx=wz_@%exNL6Jst=V=N8 zkmKk{1Mu3l{l0t4Hck$e)?}bL z9c{f{vQTgWHcj6gPyZY|D>GNQ<9Nfiv}|U>lxYPCw~-ZmrSInIkD)LJvH7v(e^T2ddBsAR?viA>@AKepGo7@I#mr=|H?K_6Gt5HhGR{-WkkGq2E#fg5u_^higGL zE|B)q_70B8iINE#C8RW!8s&({g4ev)Qw-%C7Kz9R04Kiu#p9n;4Da=v%JAdYUU?xh zR9GSZA`YUtVmA04E1aO3*GF-XnqEEgiRsQ4l2|8CSu=9!1Mz8inNnJF8W5kd8VT)G z7|qpq%v23e70bHmlAuXYbdMiq)9*yK>fHLzpM-!lyj;2i?Vq{`nKN+|_9`|pu*snn z_47=CJyx-n28k3PGC*zRfR?xw7dP=lU~adOT1PMTQd0UIMs;)wfpf-Ft%G>A z+4>;VoT~Aj`{7Ks1aH`Q*=cxW5&w{H6J%c5RaF}t#VpX#RHoGtUnB|dGJs45803sL(8UzoT zQJI6qz|F90GWzOYO<)Sci5fXISC*baOJ1oM7YvCjdDmZ zRH^T4_fRDOiGi2f(5y6Md+6i{BX{4ekU=_?7}9R*Ak4(mXt169lF!re!Sxn2%u#Jh zIu#93`a`;5P=^PeK;V52I-zQB!rZBSUi#_1wtiy5J1ZoRUTX#x6J#>Ah-4ZU0N$BF zEtl7K7+CL6LB$_ut@2G9t7p6MTC40$EvO1;DlY#wWT)-DQ4M5azzD zZ;)9Lb+rROIg&~yY>6-lBx47ofL)JaAo6)hdi4lAlCyh!|6dfa?{DX5XMQa=@j!$xPhfUnXtUT7XY zpvE2GV`K;QC_z6G;z4*0!_obd#LRLDL;Qgd4v}mvSMR5cWxq?2QX>K2-+yEVs&$gU z?0c`Wdz{bL2&%LlAr-lpRRnZSmf%^@rP&=#g(}9YiHl-S|52FievFkKYEA#f6G2ri zgJ5VR3IU0;E{U4eNzM{c=VZLi)_zbfi?mn5vD#G7lADnvN1do-v;>gRCeW zhyqfiq%?vKFC~??#mU$W*d-AN0nY>f69Bvo_$w$mNT0V`7=%^o_eqf{IUeHP_(QeS zi%uD`91Qj)v5!Nz-{_C5pa&4kF9^OeI)hA<(38;F=I_l2L?z<@`qY$4b3MUnss%I?}|Gk6@`?ckPV(-~fwOZdcq5tvTBo zqaL!-xi#GLq?+x$L=o zk=`{ZTsMH1KNqBc*`U+DF<3&EWMnP}c>hLtyAI(}-6bd>rZp)CDRs#qq=c$PJW0{!m1-GR-8TM662;?|+w08#)Q>GwlnamdF?C-zK>9*+AL zhB&m~F%3_AM6!(kjtCZY?6GzJS*3~{72LikHPKP8gAk`Fwz-q|$2Dnk z{;0vH^jkgdwb>?K%{Y>12HMm$Pd-WIzkl8(&|1>?)ntl{oBy!gS#@@wvVJ+gjLO*X z$buvshOp8kr0etMJslA^)nVb14d#a>RnBMSpfV+)0a>on4u@fUsqy@nS2afv$_FFe zjVo~WAq)hLEQy(lRbv9AZTW+crJ=4bss)aES1*y~<9nh8E8AsB2JUQj7}fMR(UEC} zytSQt@POB^mL^T9Y!kSeh2APEN9u!zIJ;n??-ba(`>h2jT-7`w<`%Ch znkk*ZUj>D=Q&>!ubCg8;T+38_w5~@ks?6zrF)_r@QA&fL!ivIu*Ww>$>fekM9&m$w z!%?6hLh5uI0d$s?6;7Pn1;Qs8+>%wz$@1wR%oT~eI$5E8Wk(szImXN1*BZ!lxB|;% z1f?C5>C1V8u`KVhcqfQJ}hEoJN zVj3Pg-q9!xumc~WOwtbnD@hs8SvAtWzR>Eb$c6d<7_1?fH0c+hN>DukWyV)CM88-E zCADHgswrpsy&`1DgaJHX;gm$H1tk)k>h*~-*d*1aivt{>6ly-5MfTpf9aT0|j65&T zuE6MLCjI-(&?!Th^$_CU!75@-8VyZ)ztNMXs`V{d)Zzw701Z#T@wOubbAt{OMAZBT zfIhNEOx4&>!tiBg<#q<2rN_vMV>i4K%+xtlb zjCWaRmxjgecV1rOk$E}gCW>x_1&ijNY{$<=%)Y+~nbsP$s>g}4ur7IU$G%8zI1)aP z)GiRKf{QfD-@x+FY2mO2{mb*5R7%Q}aW$E?nx|g`xpy`a;qt{!VfnrQQH}tg8~G#3 zds_@Sc&UGSu}RBStuIl`euj3*C?9MAT(4oWe-A#8cKlanyJ?9Gv}M*XMZrRyemu9T z+_0p0nKveCyDZP}Y(2CYGgKwA^yq$nShJ?v6;`HZ*gDFVc7?}-mjepLX8QMKGQ|L37=q~1=sIc(C+h?? zdj2HdCdOyF!o?2DEZi=}#PrT7f5|O?;?Rk(6b|pcu&`_N`*gz7&kFn2^ka{P(Rp#U zC=X_`%{qP(l^Lw7FM1|d_Dg)FYrBFn3RN9E=&5CDc^NgaegEYWBN@(BbDh@P`%>FS zTep|gS$9*J+e{yy)5TuiqyG;a4iKdyzL3RZg-Jp67}{Gdkt;p*CTogS(QlF>TD;Wd zD;K~QSwUd?=@vCFglnJI$PgLvrph9Vr<40OB&-$(@@|a}LDkJKJ*8fKjcS^Ex6!qR zJR)rqlcKto{y=UxTQaeZ@!!WBB^#+6>d;?E)6;s?{V|%Uw1a(2e7FvhuG>_50(jOe7s7mR+%nzXLH#??3;S$g0w4noC{Y zeZy>RAAL-9Y)>L@-S#u9_-G8`p2<^6O(!FIKmlq3s+ggDdO4F@TZOh@=- zc%40DR&IWHfSg#!?BbSDmfCO*Y%BSeCYtdlb_|`jGTm&A3t9NP@cmPqNjr`O*BX-Z zY8a)*4-q}R{u#LMnb$-SI%9lt@556nOrh?w)bm;D)u8L7T{;y1%wxd_VToQ$w+Xms z=jf^PH;?iu+uW>%)DNKLL1&Ybsmv6gA6Y(aCtjz|Osy}m*ef%?FP5YrAmZIDih~UU zTz^4S>x}DcytGgiWj}QjYE;#Ml}M(4)xfUlW-bg7W4Z1-8CH=j8s-MvTPh*~;93Q! z4eM1ol#-Y@ZZ&Gfknt?HWMwo@LAD~S?X-VagTTrBFe9GVn#vD^SI_%Gy#u$$cJ0f; z90%D_3Lc8bGe!GfwV39{2{4HnVM&cQM*DXpiDXWxpdC_QZ9fASXjEgf@$vGgZ~9wh zxxG(=)A>!`$I|AFilvSj^NcYRzto|{wXw!2pc_T`F@1WO&&PJGC^z~wta3iFuQmg# zWu>)|%S-r^{+nR?k{>qUh55m1H^^8~5IJWUwF;k}}v1KY6Cx85?~8x0@M)wfFP~ z)~_0Bg_RLGT`lj6ZLSo9TzQ5&a>reII-*C2$#zJ*#&==A1YPFlK#S~;v(O? zNoDhAXeqJFRmedyQPkwORv_L`8g6Q?9(QnVOVIy01{kUJRWvCHm zu37o4Jg`Bff|A8p!iK%HSqRCIGw@); zea_tbv(J`fV6A*-T*4|Pja3G|3x{SIqd0Gyvshw4pGqy~;P@@pTRmGzM74ZY%RRDy zRYN${Gm_&Q87UTV^P<-`&pl3f?sRcoTy$Qx)VLW$fhRtp;FdE`ZNtUrHpec9p{e%k za=Fblrh?EaRz^$8SfX4%$t(Kh2lFp;uB20_bH*B9p9$D>|2p!iO!l;6h@`#sU7-8i+p=GxQRinGxej7F$GwbwyC~QC8XJQl4B2SQg7G<9OB32|l^p=} zpxsjCcE;Xb$y2^Wr1WyC*5qO!XgUY{x{HSlG!T^nd%(Mn!>5>XKF4x_eE$HT1A$s za2J)s3d5=q7iXt^zseaKQmzQH`DMzZBBuygVk3EEUrxDrV5f7~g%T>+G2eJz)AlOf ztYPM+aTmYm`qtBMoN90DRRU7T0MhgAW7?a^n+d0lpgMI*(2D4Vu_4?=?Pk&fqUWZX z0F?KBk>NJ4U#ha{g?Co=85~`<_u$8kRs!>80W}XF<`yAYA& z_j>LG>_p%&{&Y58b!)H<$~gukb*jW!SR}A^vseqmc&;%_#XZ`t=!WPynev^wK(;WA zsdjq0-B0I=iw=~L9Eyx`9BM=Tmu~uz;y-BE>|S(lN&xN3ycu=BaI&X%Z&h}@FF*~0 z+@x~1`|Y}0D6)DM{&&%juxo6mHl7tSw*wsS__JqM0ZV|1Z&ZVHij~}3?12`n)i{?| zQu)eDCn@2{JYxq>iM1jl9pFuUq>8QR1JjWQjLURJ{#??!6qcE&J-elec6}ZYh*uxU z@f1u0H@QZie}b6S=q8A8atgLVQA!X(Ox$IufS5w(`Q3iSzJu=+lFCWnd@w7wNTBC& z6&vRE?N5KNxsm~c%mP|QOCi&bWFvF93^3FoEbDRBAEn%KGb!rA)0U+rw>Ybrwxv8h zX*pD7#u3)k<*-PW+Hju#rqWR6C@Wt%s zz)Dj(rxW-~AWh13%(LVF)$KZ}M7e}?-}?x>)q6P7&7?e$itxVocI{E6bF#Eqg;Twr z)+m^t2v94uwV+LOIi3sN#3>2Y1sO%)qoWpaJ#X6lEc9Kw+t5n(mhvbyT9cKTTRnEs zmZNLv@D}m8oM{d>c~0tJ+7tGv(Y#u4rsSOs#V&$Q;`@cryq8L8-&)tcO)(wT!o@J- z(cpSI-^StD)W|?*0JmB5NB>LQkYO#T4`v<4wKi4)lR`}b+Z3~zXLX^ zqoI@<#zKN_ggbAK0TRFDDD&jcV{Y2rm>c)nrc@b|-M@B7T_=`#Wzq*69^kn}rBtJo zM2+e9To323+N5FEOA5y<711-ftPI1eh4<94m__46X`pY6vRd{rgCTQ$0;S4xXK|=bsjurYh0dr1ke6lYFK?I~54IzY*pMX_aSq<1S8E2NAr$NOk6@r9;qM-Hb+xS~*n&4-DMQ3c=4RE_H zWu?Ng6uKa_{~@-R&k?zYX1D5o=Ldd0D3eRf&Si7tD)N-z@vY}%8ox(zy6IN%1XFcR zn7&uuazZ(L&WtkV%IzpfJSoubOsnu%ikNE@!*=b#Uq^ogMg^Z)p9ksp`0s?6`zF1p ztG@BPZJ@Fw2+*%0F#8!l2lo0R=LPdVXkoUuDh%HQPKLob#0=4)Me0!9C7ufa@%nxebk=LzM`vgs#76)owL#tT z8?Vb+=x|`f<*tZ1({^EbdM8MjO36-|uO*J_*D0n&rusrzmZwIIe$>OzB*42%IMKbS z#P_ENd!O^i`PNRezjfh%f?3CRuXpcV2{CR;05UNuOoo{S%eTeh>VXb29YcJlc~G{0WaEGT16?5#bXzs(&nP8(uKE3$G7DV{kX;yz4pu&n&LE-XSWM`6 zhhQbn!tTR?+ow`budL)tMHCdz{lRM7%rrM9&!Wzd+R0J*RlMnh2kfnn>9SnU+G1o{e|n$sdX z_uxZelb$7KqULw+N{%f(ckQx)6tic)KXeEYE#P#(_2S?Z^>a@|7#es(<&%edndM#g zW&uE-8CUHSJAaqrmNFX}iiRM}+Di0cI+Yia2P~va7b|Ew{Aj+qSr485F+}EE%Q_s! zf)|Q0Q)_W9et5F_|47$?QndU(PE`%Z$GrMdPW)y4FX|ZWMNc-18ZReSn=NoSe&aoM z);GOMFLKl}T}5y5=(nFR>TVFQ%OO;&;a#J1s5{1M!t&<}gT=~0mwccj_g=YFsZ8qj zjEcQ+$*-$4%sf6oKlROt2Z2DEA)BnM8fN=S`ZHGb5X4+07=+NRqn?Rt{lo35Rb5S; zQ#^tw9Or!;MBlk~lrh?vexy@Z`_Ayo*(RCiGmb>&O1YR_3xh?=n-K-CMe60ZQLg}2=()kzX)uk@>tQ?24X3q z9rHOf+cE_>TPZBRaTt=uqgsZ(L5U?^AmNalPApv7?|Kf-S!BFl-j9jd$z_U&x3L{n z>1f-P6r0e{+W`QO7iJrJ1bhTFjv_}8TETssv1JJV0;({uGn;&%b-LQRF%U2xxpxS)0-l8V9^0$vB_roit)Q9(oguZbelhJm#b74jqTOCN-S-V(P;X` z2n(eYVPwD{gwu$|Otas3dj;}VSy)z+xwdcop8Cf!Gg&OMGiP{h;uZBhma+yXE5a7R z^qg9U4bxbkjrh(FUSA@qWqLX*>P;|^_hbAMEuDooqb3MmH_PAfqPSAZfAzo8s2{_M zv?`J~>!Iv3=!%JQ>w(Yle0Ki!-j5~X*j>#b{iNZOkA)gpN_RcRzE>d4Xg95 zZOfLCmG1okU;eQD=hdXXtY`^M|A?C*6$6T0-be5Y&h+ioPkQn~;ID59Vq;8e7dYCh zd7Pped*6R85y5bNZ|ez&k<)UKxG;0~@Q2Ofch#aP(^tyUVOODTXijE&QYj>GZ%);J z|C79pIrfMdX_x0Sg&4!qv$7sPsZdx$`uHgsQ?JyNpX;s=h_Z>^bLYCBChSERr7oNA zZJrXBJkD)t)?c{zCTA7$tJ#sw*V{BeY z6*aS#w>NZ=6iv8|LR62yAI2=p$;FeTevIXw7hLk=%xbbyBUy6xE(3NL0cL#{wf>4+ znjViCA<=X{3Zl!-;ROPI??3+UEc^`f#~LR$@A+e1w@-Y%Usn6~V!Eybo)(Tb>X4P3 zT2u1u>UB;PF8$coyynx$j$$XB9y>17^OQ)-EKYf{XT*KF=!sSty^r%G>R@&9-e_(f zmG$m$SDq#qI(_i_LBkp;%PYj$^76|g|>K-y=GLt)T5yEu0 zP=^zz(Y!;YSGd~tW7^MMB)|GnovIIdHB!v@*_^-T7`tE9snnEBKs8-?l4V)aToDxR zU@o*|DFFX3>5azODe59Q{Q@`e`3eiSRK_^nhiYK1M0EY259?uq1Gf_K*V+u?Q&!pZ z$1{b$=7!S&Wly_dMv^7NWkgLCZ0qwkg3Z?5M{ot&_E3ay-eTH`#bs6eaPM&Hr1rQ% z(Hv(o`%V0TT+!|!I;&6-6mf5YMJiWzGIWHMZ&=ZkcPQ3xoVJeY!tMrff_pcNLH${V z2sRWKM04o~vQiZ&VkZ%(lXE3Uv5nOxqPmMK58V&StjJK<_?k|Ic^i{l0ykQo-zxOk zXFH0BG}4)zTZtUO9KY_C$!N&zb`A~3nUx;M6qon+Q~O;bG6r=;dovhO7EzR|743_GIi z1L3qB$%tvZnVRY|JE7qUf*rMNdEM`9ZzNaOiH?@9ZQkfgYZKLWZ4+v54qvdK@%~V8 zXnXD(+_CIVw-mI)7--9f^fD96V>WgOJwle~!W5;wn1KGw6c?~{ ztDo|gFA@crBV$DF<-lGlN#a0FWu6>i?9l3R0l#D#f0Iutn$bn94*wO~dLv5gfqd?}{wuB>YoVpr{b@YYsAV(4S@7zaV4UpH)=N3hymXl9;7bpD zlXlaLlqjZNs-UPvWex<$`gRs^<#njTWtRs*Ce`FcFRbQNomWCMoBdmjT*t+BaGJZ@ zdwuhHH>P?oPW*bD_4DIYQH<0=&r^O6c7XVv^(=XY3S2cE1yo1gw>I&zXsv~n^wmR= zrKP3w-yJu*@dDqht#@)PEG%a7_`HwjOHj#0vxHbZt!K>G-5E4Gxm*jyZGNV%7`)|D z^SKeCqCdako2nv-dG#%1Auhp-7lPQ_o{UH9d@>{RIp+NCL+Fr6G(%IN9<x~E5bd43md&M_&s|9BTmHYU7ebx6vM6O ztC2q@#j}+_A#+UVqLC5J16&Czw}R|NrO)_g4g*xI>nP+{CJ1&#QYYRhdTrnI#Kgn~ zz0t*1dwjk1^fnm$pJclEEeFZuLMr5N?IM}BI+ZfCC@X?50*Tnt>HIzJH7fU zFh@iCFjQoeFY=9++UT6_=tFlcDy@^nP!4H@OuuyB(maGt~q;Cpsvp`kJHzBv}UO)EFwPDGgX^3 zKABH@mr{ES#S0tbJ;1dnNywt@pgm3*TD7rSK&s@>&~84H?PfW*fSg zacHHezBLh}axQ1u^vPSThIai-{$jlkR<$&Me&qFs-7Qvx&*kQ+C~h?mGU9rsxa_jQTJCl>6NHFd@>}Hz zjCHN-k=(gb*65`Oo+y0{<y8QIyXpUacTESiwnNk4cc-EBaQ-IrzWeYG%Hn|iwj z?~uu?ZcE{ZaJIM3ppz(Eu_`E$$9{&WQ8XHTMr3De`{L3>YqGgTg5={?)5LP?u&n&--dlp!wr{)MSKJfy8YW zt-#`^PM+(+@H^Q)Vt4`_oQ@~gPN?N->8_<_X#muI^Sf&~C8bFl)9>>w-dQ#92ff+|&k8nJMRt1YvloCz|Y`Q;@|J zKJ#Q%ZP?Z_d7>PH{w?ve4ejG7J=XwAVS^Z0$biyq>G91qE-wFWGn37eF4qxHGFX?@ zQvc7Sf1YE!k~X3{WW+U5WRNqDMorCW94soidZ$tBGG9T}3BE#=&andLr zd(nsB@q{cJG>+g!o~5XW!5#IZ(Y zi|c2?D$4v$iooDl2~dRCc`1M1ZEIm4jkwLo@z$b+Et1osNKfRp>L&Dz+~n^e;mHK8 zIyZ9&9=5dhF_JP``epM_0KHS5ztfO-xXCzN5PV4|7t`6DhNIqL?_5(n_ndZ-?o-QZ z{gXd{X1+@I9Md%`!R#oi?42@5Ny+i* zEJ+yA&A=|zm!z~#=5AO{&CgP+c(Q4IsJbgc97iOJu1to5HXQPb=5P?f@Xsg0ZOj-j zvGum>23h$IC|9Ba46+KDDyl6NGQ8OxE4%SZ@Zuv>YAkK{s%fn9#2EJ7=;?GOOi&#hL-n)P2xbw`blccuky0M5an-ibbSUPbfnwcAAZp!S`s;QI>8Os*o! zX}%lb{j3ou4YtL?gY@+{(;<{#L(C+beUNokCu3S>{o3c~+Mcpp+eA6AZ$f*OmNi8= z{u_-2dabIXd{Z|72)ukqKw}i<*ujJ>W$0SAsk0NDAOkkl4vh?N`#xhqM z5qW;TlG8C9I2T*Jm2Q^<$t>btb3424?1`JB*TmRTP!AT<$jRp{jTCB3cwEb@!Vo*k^b4^p`$nQ*Mo^q+i&{ zp-%7q1U%dJYf(t=U>KZeJ*cYrrSi{ox9r4hAziL~?^JYtR;~L>R+yK_n6pS!*=ujk zk)@VCT^OlRU-Y$wJb^|ibpu8q(@~3gUr&`gIH5rWbuu?5pCz!YoQQwG?(Al?HMR64 z>q!>pA5r-ZS(+|E3mA`?p4MKD7P)YJ;k1cut=r785$OUtAb&QrZ=Tj9+&#(zd(G}_}6(lS}y zDQqB%$G`K5AGC#Adp#j!Jj9`79tjJB3R+g;)-6 zDeZ@3S*=E^z{TYW$!HnLG?9WFOUlQZ>rfR#vbSp;tte%k#yf?rwHrfNhfF$JCQKxM zS%Q)JP*e_|L9uSDv~jm#t28pFrpo27Tj8DVaQEHiAGCn7;!_Dzm=ep)YFqbF_X`%) z;01Wcek88AS;rscQrsQXbUdAKpl4|_60V&sH+1;A9Y@epV4}`B*9yAcb5%1LK@gA@ z^5DZysz1%7Z*DU%;g?5@a39Pl>x68GE5he?vv2sW>Gu>;u$m(-PFwWv&`Ils%TO84 z;Lggs6aOstHP!Lqf})x;KDTkTmErYSPh9vqJhsXo;^;TL0?+m5W2^Fr3?lD>Q4cuZ zl5BQ*Tw(5(xNe%nGkz2E{QRWr0Vi>gxiWGAU(_V-jeR;*%Z0)L91rM;Des(rCw|@^ zYIGt8PDNWQwNy3?(yMl3Khx`rWq7N)+ccBNYii+%4io}kcMv(?{H<>l6m0D@^02)P zs%Uv8$}fB%nmQ?K75@QcET1ab3zv&mCZ(+x>Gez#4p+Ak;@ioLi)fdwIiujX?EHEW z;ma+chS$t)aZP_SYg=1F@zkX}og0&4lTjIOXo9S{Ii5VA$Di*ig{Lg* zbd@?kZ`bu@q3VS5+yj?}Zx3!dKHuoP1myh-9gx;uYT4e{(NMXSAOS@aLyTe0-vRUF zl0JDW+YTyIYVm6px*Pe~pXF?(?Y>_Ahio^}ZZEGV~L$_Gh>YuZ>Yx@bsUU z-yOTz3JNup5Jz;cMe&+-RTe{XFsDthsLXvA*42*XqS>J*tU+Y^A7mi!U!)UwkEzgD zi!GHHQTd!N$)|^pC(5q@*#HCRBOZ%~7{3``XuYOi44G0)fwvElyQ!g5h#~VSinkh@ z9PETSS&D}Un%IV)ONW5kwf{UR{4-2hm> zwkI}(5H1yPR1b+x%*wW4lBS*L$*zMo)-SH22kYOXCH1I>eC>|3Kd`8=!Fj`C{l(75 zGDq)xcezN zrUT54ww-O>thf*?!w{21Vm6a`Rz49g~OlW&x1+P6k zME<%>MUEk=)&#z|ZYg}&dX|3C8YZQ1$Ck5x_|86)bt_lTM^a~X4Bzm2cIs|(`(^wt zRE6V0e|(?_l+sjk9?H_4t~_?U0l2=X`4X1%bdyeh5zXa&@cOfoQ8JLyowcF))wUSS zOON_7e&+tLvS-|T<;-HTdgw-w96D~CZ=wz~oOeuf(II0kR+FhJvr4xYq?_Aw1N!sN zYYZcTMV1(Dr$%}OOo6<^K-u;q>yzwpXIe;SJ2|lLLywU~NKi-2H)AzmXKg4hZLSNy zkHN)=yIRPqie6J!jD&k6Swb4$V2bd;GBOqWB>hFk!1zMcyr|H|ARK;NX<_iOJ-%yP zMa3@B+I~=JlY4_4O6p##JGwBIy2DLbl}m1=G&2*~*a}IRrIiuU6Y{KLP}a^wlKxoU zXJOY}-^Y5Dm>{b^_Pi)KL4>yq94h|y-^h?h3;H0LZb&F9Xqt5Z)v3-c8xq}4C-gyY z(=EEai~QxPQ}l0Nvz%MkK0RYQ1eNb)kVCf8MPEm!1pjI*_9piTDTCoPBIUXsRODWb z7<*|;|1zTKN^fr0*%NaP7E}Ejh!Vnjg(N-jeiX*;e80j4R`^FFxkN`JEcM^`(REx5 z6Fb+iUPi9OT0-+n`=A0tubAr(Q5XGG!8ZwgXZ-%vD-d#)x5VFNt;R&Y!RdqtoP)yn z#v$s$^r!p_dD1eZ6e={zVCBa`I|CbU;sYS;YD~0UiC{2W_nd=J4U6ye$hFiN{n{Y; zz$z)+*?geBq$H=N)Vvn4vMfu<dxAxiodDVxt{8e zic|GyUJ@aql~qG?-Y~M<_#2J;5l)gEz4EK5MEp(s-Vsvh<6To8@Zmk5zi#_>O#0ZVBfV zX1Bg3#BrYPF`~^Y$!giGl9-Q;G)OqhArz`|h;!}wYG|O-UiZ|wODSQ=$*ne30_k<@ z;cb&TixMtJkl?8)72vClg7UIeMmF(eR{wbGx!uXVb-lr$%PsW2q(AARMc%3@-csJR zKJFOE$;8y#PSkn;XrZ)7^d-QTF1jv49Fck1%YW>ZL1FfPx8h9gIir8Yi|D^h9(B9E znIGG}R8sDpIAYh0N)YnoOfDU#HxFm&CD(cnX1CDNl99BK$(luNmLr5HDA+A(7a{e& z`rmm;1L$lJ4d7I9?exg#$jGFa6nIQZ$vA!3^*b#zBj*-A*NeP$Ui?dV5RgpDL2)MS zQkagFWSUU2-g;X?xh~*U^!j-Cm{~Of)UeZ;fugZsO-mCwD?p9&R~yPTdBWzJr0 zoJug-6TRdH==*^Zd*B^Mh%Di*OL?wv+Gjd-FGI5EQ#?w*wy3Lxyw@=F&$vb4AR4k` z4xB4<4Q&+Dje(VmiU`EV_?T#MCVJm!=J2|ixp!b=Hx}h*v`m)9!t)qdj9e$!?My$G zHE^Q>HKx6#bGk)g#PIo)65Ie-mxW=)xxm)6H>;~5IE9Oy32_F^fU8wHG=e^p zFqfHkqK+q&H{KTn9s5)I#-5K{f`E(LoG>=2>Y1@bZBfYv8hIG(ZbmQ=9FW?6Tn+?< zwVpAuG0{%O;Ae0;Kqjlzv_u4wdJ}{dXYC0hibkD^N1a&9`Jx$qrNqbRL`FuZTT(j6 zQd-CkAwg#0U;QNPy+ziZsf+5-!oiBsb#%D!V6Ih1$I@4FFu4wr%6wwZkr;X`t*Q`f zuLx^}#*Q{QYuipn9ix!fiI82zSe`0bo)!(61iz=5zAF!YGj_PsnYHM6L+d)~2I_-c zt5x%2$p%doNfy;cf+cha-QBkec2VloWFV^-y;DDyAzmiA;!NuC38g9nf9P{I@Oco> z0$8V1McB;LhMUXf?T(X(u%25{zrE|!4Eoe9zIis6o>TyOMJf?^E$Tk4t-!;z2p*7_ zAIDOBL7bSv7M8>BpR1VY6TsL>t(u#lm8p92Ld}9jzbfwH^a=faek-GIK6FmU+h0;m zT5nO$h{A4cstZ0~st6T!7Kcd|tW)|FBj$6o(5o8l2vROvK1T7iz98 zi!-aFwO9eLm!n!zF<#6sxSs*|#wAL_CoT9#wj$7Ry#whHWfs?(128^)UL-k(-4c3; zy|yYe-(b8u6+~Jv_?r&uoxDHtT~Cm?O9Ib?`l4m6qdt7=)WD?jZM;uA9h6cBGBnlM z>4D{NU5uT+3ebkrjn>Nju`A-J11v93n@aiE#*&V-cUloZb~Ifa`_`AMq-V<)F$Q$$ z=a$>sF}2htO|K^|Kt{p}3y2xx1Udu(uixRsEUnbFwuvg#6x2iA6gt zazk*Yw#W3lT_17he)xv_*yc%ijq)&svh=gHIqF)+57!#1O7qW^I~eUHqY+5SmiHet zuNK7~&v9T7?Z#uh{52VtZH%V?5D{$V^yOGW|~#lpmQ)!6DKaB3o~OLn`qrXbBn{9Pq>cSnh89%%b_XCw;C1oQIY zz0>Z1(3yc#WX(IE5W`t95W90JXJeSHz8>m>8aI8?q6Kfh2X+?TnetQlj`}-d!!I<7 zu|vVZqL4ZB>MkW_Tm4tbObQIE6t>SX?$I7!><-~Jmf~a*$O~X@) zNq}u$B}mgaK!#|;KTz0RtUq>jaPUIJAFLG=wf!@WeVxA7f} z<~Se>3}Vq3*h4Hn(2n+pzRo(S6z_!gcc+hrf?q&mA{8Iec8$@|sOi1ye#P_cQMPiV z9CiRKB)3%TInjgrK}gfaKDwL*79+-R57mKF@OwK5D`$F9gW9wk_)G`iRC1KNKhXdA zHo}p&rV`;1kBTHX6o}w#Xc_vP;(JqQ$s(b7aC^}}3!IGn&ElVNdhU>`chXQ}Y)g(G ziXlf=lia_JqJH~bhFZ;7!Gd1}%f&EscuxJyViCRN%A5=QE%7t$kooUv&& zFKM6&VB05$mbxZ(9XL^M{VL4W0J{ zG1X3aW2z{nF&>t@G{?Gh7BdBd+zXqs5t2D63xDLnJaD>HLIxqmo1vek1eeM3Qgb1y zANz!~h_&(?LmPwzX>(Qn{s51F!VrsUL%q`j35>5}CqKl%3R7hzjL}yRbwu_mB(-Ov zNDhdyYrz)&`j&jnLb{S*#&s+J9oBKGGo79N0+qgkI0+`qDw|SkuQvR{O&2W=VTI+) z&nZ$0$my(>Wl^oNlG<@1&q+)*vZ=UseRWzCDK_(SA7gw`4Yc+m_F+C5|I4Eqz`-NO zz`%TfXp#3}lM`NqP1zMA68Tb0vH8ZF!i9Bvt+dQE{c2;Ub%{qg8SvrSvPw5tN@HUx zt!iZ|F;IAx0v4#YRQ^RoVIP%jX1|XkUo(>e4UG+L!wBXV;S5uPAMCNw{+YwPhcG5x4-ukDd5%ZVL z%%zyfdT*bCxL^XlZffM@n_CdqGfHKJeLi9-Vk}~XE~m#YfGMb44S8S;#)>aqc6PqK zeD_O(mvaRs=qc#gG!-Mb29rfaN-I>xnTG8dh83&q!wz9GDaC_h$i4(XJxxd*Y*cxP zPlOJlOneGJ>3MXnUeH>{`%1CCPL7}_ zw?hat6bygA?1C%Q+z$;tn(F^3F!50+l|N!pwQf&LC_E( zdv5fhzX*>sIE4k=LEBPMkC(8gL9hjlD+>uC_)dW1TEktN3>b|>E^N8XZAoeSw53F-4h>lB&A|_5H6b! z?ogV7H|QiGhU|wr>2jW}r4W3_2SH|L9<{mCT8gEp%X&un3*q9L5eet~ ztj>C=K4i9$5>Z7;$H^Y<5WT`h2rwBdXE@8GJc=ccP2-zgCd**HrA;NC(R3lj2lI(d z!|qc)Zw&*iGMMM%m74iZzH&0BwZqk%Pr7(}jrPAI-(D_fN1pc^_Q(^&$zWQ=1Wgzx zIWzQ6gI65`?aV*)nZkM`CJP-{L3GF`;{Fpg>uJj>^OgFie1sFPX-6L1JCN_M6?>DF zFx>+gG-v_|QuHE-!BXek$ND*4MsF2+9hK%twc1V_yKOV_ww}KAla}r19_qYX? zWSbOfF-9?0Jpdg+`m46ZC?xi#prEmbM(j&36|vkrBA(Ai9p3jQhS-unr(CV~?fY?3 zSS7pa$EF7{;DUm(bNJPfnd~nMN8&J@5AmP-%qzna7=EJyVT&8jGZ;>lpJ@C1YY<2Odc~pJZy-&g?Cv^XVxJx3e%>_nX)FM~ z=(K5jlm6!Sw$qrufl3#_Bi_a*u*#8kEhm&wT{r|2??v;BH9t@MPO8@aM|s)i$ht3j zIGSvN5+KS$n58H^$|O()rJDc)qt<0N3mhcH}aJg$DMN#y^%wjTj%XEiNwK zYQ``V!2dtP$at6tuLjdK{L|?jT?&Dh6<8YdKB-~OaavQT8@P8^7;p6SW1W2p z*qdd=4{&j#m=u%(V3*P^Bd=7wqFCK5z8F4j=t$I>pVc_B>hOlEaYKUzBUD=~hXy7# z@x0jM>Flg`=>k>nnTN5S%4oLzVL13K6EluU0gp}Q@hEoxl2eL^4kcS5sd|;kgiEbJ zs=fG$cHo*dc0oPd(dxn5K&m3ae=smI_v+>I@<4`wAwgEj8cDHs?A#=#!` z$*NKE$u^q!8{lRi1E`x%L3nVI4QD9RJr6MQ!~F4R_3>zFyz{K3WrPivs57mwu<8PImtH%Yw1p@vEbuoQ<+F zEnH*}Gqe7Rt)T0gSf!{uLtcpSxA$iIH?zeCnuS^2EbyvwT~&_f64WM z1^H9FN|u&^w~{|oQW$W9Zvif1M3v!uFprWZ2zR?5-2E@ig_vz@Io8tZ6^}LWDI|xi zhBvLi=~E$jT=V!0<)@H)`Cz|Argp%RjFlNMFkii$1b2*YF`m#ta7s|JYuOodUh;%4qAn@3e;F3OT?`jPdWPdl|C8tTGnx z#4jNOy|NWL%uW6=wL*-YqS*HhnVsGh=%Vv4dcI~oz}VD8j-^Fw7RQyCH5`*r`}05( zI_MI)pa6>IhMO{25#tM(GT0<$8&yh2^NKkDo}gEU!G?ZMUuQ4c(p`>}!6tzYm0=X! zRSUj{Y+a4m#&9}qTT0ySw+NzKrlq>UUP5GC#1S>Q+gL)IHCay%Y}GY3xzAO{so{s; z=evI>MCRYw&C)iwlO__Gspr|PyUQ5IWSDf5{xEZY#&E+->%F#?E^e`vhIbV;dg##@ zhEKJq5EVQix7|asD0#sI8hZHrlIO6`45~8pGkihFM()u^eThD*St%j(%3_+4B~D6A zo3a4BoiAF1STF);A}B0q_!&2WRxVSN<^=wlEuA}P;M|3s$I0`@N>xR#JcS#7bR$nS zux4(t`Q(_tTWk2vVqp^!C<}@QhJ0JDZOfzI$Qk zKcpkk0!ePvIkVN{>7$~V*R~l-5@fXqV|i?FVb*<7l~t+xblzXyg7c*e#-@ho-P!z^ zXUeIns1;9HGpNjCt~`ZrF=+0xtP4NA<8ESp1?MA{lLh#vglJ!-qMg#X^@S4-2MHEN zU7Hy}FOZqWV1Axe>tO9evor`J`}hiXaLQ@DbEJKqrKLo)^pr-Ym+{_{1-=Cqlb?8c zsvw#j7pUUn)pma)Bt9iL6!m zaNr>r7#Uv4TJznD(;OcaQ#p5|6kSre=YsrT@&Ndzl24$ zCV~}>qX+KQiw+1<;k>Y3#puLhqv#*^T0}RG4XBkiOWeJNO}F7eBvI1M3dQe6WLwBu z=($aR?<+<(Cojw}8$bDj*$yQRfB5&?W4%Y4O_9=O3j5;Uejaz;-L79pxqGuu1RA>E z3uI@QXIpg-SU{d76+JKAW@GtSyno=?<5DIkBi=$J-$F>i(Fdca&oBC)P{=T z%r(08?sD8NsL^T7;4EuqRocJHJ$>F~KBO#vHJ>C`uhGwLce0VR@J=stm=S3aqo{wn zY=84jrZ%jiERt);|FXkBr%1DjMd*1-lH4wR2#6ILW=2vIsZKi~etNrrEw}0=Hk3r98BNd({Mvu%_A62!f z5?-CHxSe}ya#|^fIE!8BuhC3co2#KFa=;_T4i9M$uOy4VxNR~Yq`wR)Jguk>!XkS; z;H)8Wy0y8OS-5swGrFobf z0S8)cvrK`(3Tf!d@-LQ)2;JL5hfP82usyq?Kf^b@Kg`7Tn49;eHt{plTpU)8`kynN zC7$&crKc}7`cEaN7i8yV*w5}VGp9k+hi`<-7m^;*WTL$dXY3IgLaZy}WwUA-eOnUl zoktG*X$L490ZOmaxu==Tn>UylKkXA|t2MFM^e+ zoZ~$ER~-yKO3R$qp1Cb5H+la3P~WbmdE;Y+PEQotB2uwooIh<0din8Bb&icM6)uYa zpH9u*lcuU&R(if29f{%Tl)<1roOAz!QuNsQR8?)^7WQj3=N+3$!ef%fa*cvR9=b)p z0!?5W`aoa31|x;6oIaz1%3bdqC)Vm;ji1{sliuxB3b+Td-PGj-MB{ZMo5)JjjRa3O zFEz_j6q7tpTG`)Zrk-)k`-ZG9OT_svNsJv{-5v1h+NhW6AloYx+cXmNNJemmr7U3&nLk^X8mF~Y435LRsC0{Nb2_y%l~8`>aAXA& z%DZGO{&yAGUXR$xyhLKsL5Zu<_fB(i@sl5_$|*;(p-^XW_fx?t#BOtH$>5&o(QLB+ z>AnGivTnAB%KOM=4x5Y;IL@!p(QE^3v%*trSCD-^DnweMY^VV4lEd#C} zMhli0?L9BNs>Yt?DD=4;3R}@|o4x6GNQoQ$RDV!^sXjcLn0gRPR#Ujo+R{+?#^l#X zUJ-QDy==z7=wu#ga4@o@yP1Eup-=dcJAe6zv2M`vv{EZGRgi{8xY1+~^S*M0%AU!c zU|9QgyhycOHzdh@DHU9c76#Q{HfvqFEZ!dW6*O%2HF!v9*Uo7PAGoai(1Hf@H~Ds? z83IJCya`zIt2=O5&n1185cZ?h0L zFUYp$a*-5Nlb*SW4H$&K`(Xrwf67L7kJs^d;L!KaWH{th7<6p{dh@AuyIU$8*H7mz z&(prQ>NffLnk74^76>IK4c!i%Sp>9Gi>C@~>mybgM67J)nwU-+9ayybDdWr%w^2uP zH{8RsfAlW?IZ{&dVHKPCndR31+BLlc{hdWi%*9zdT&Vd?zbR*A8Nu3hL45abK4xV! zeq15wIy5{7A2+JX&S6rM)UX3*dcIk|*==W$?+ht=6J?Rc(BL$XQYWIt+ViG;F*T0) zE>p@KEmvlLxZCM0HXLqU+IyRdXja)R^|nA_*1LE>5^s8vw7Lh}w}>xZsJ2e-AsnY3 zQ3y@Dd*2m0RH?muxe!eJBN{1r@;ZXa;hk)E{8-NDvln)VMioRO8vQv%g8$`QQITKO zgsPiNM!jhcBB1i{TI`SWu@}VTtf4v2T(1$b^KH@O@x(-d=^jHdTk`wy6%{=l@;oo6uv!wxjb9jy#Lj; zxVgC#+DM-t+U$3$Lqjt{!VqYf1Njb37aQIw$hBhGWz240!NHnkQPy)?BC-~P*bv2& z47IedIvVWy4I3v^Olrj^8fD*c&Cyv%_%>=M`=4ofcLEw~_F29EAvb ztm}Ep-)btT6&#MN~7X4y0IGv`>)U{29p zT~mw`QR!^8@k`Bk2U?m!Z=<`4-^ry4rIQW2F{EylE(fW)HEb+4=%WEiFjzOONHkH* z{RV(-c!cQlwq1P9JOkYtv#qEf+arW5&Q=FY<8g(U2eW%E)0-Jg&I0oZx{gcehgDe> zO)0@~am%E|2!Fk^wvdvc?>MZ6rVP!VL!Z37Wkexha7?Ys5@tW>!-jA2$AOWy!m+7=8)g{p_E%1!qd8 zN$%ZC_pR)xutjWDjSg46UfFTmJP07fe_a-KC43p2PJMhjCEdr;e3SH$x#i>{d9|Qi z*spk3Yi|!BdsTNZ9E*M7%wOD^`z2(;R#zM+E4n}krq*rIczYHgEaSFO>!5oPnm*fP zE3J0(tJbe^;|(tIR-o2zTIgamXzsk1z6(y(a*p<-p}9Q&l*)3}H^1kzcvvT4%(`6G zp!M$gt<@%^(Ngq+rV>^%<7@ZKVH4q1$@50+TC|JSNcAA=k-mxW{5} z@X$xWQr{JLVE|4%f6L9}VbJ0kTCDmkI5m9RkI{6YD{ua(I7DRglUuHrGWy$9eB38- z52ork$33`6VZQCb&2wll>o}^u%ty_2A1V~y+Ho?qF|QqZ>Q)2@6_2&z|xQ>U!Z$59iOU{ZD@G~wfCUzb- zJ0L4@+2C;`z`$7i-KP{5VcwJoX%BgBmFM8Qb8~Y1=~r#-(zT?h=ie_Y3|H#TuS-Ki zOX{zG^@&Bq72YJ|sx)r?3wpcJK)k@|#ejC&A}^c_p?e1Tn<%g|csJ=|!mfG{65pyO zjUeRc9PX;%^7+eGcZz}W*`*jj73+FebKS37LQEb&KA)J7S%~`0bh(q0L5nTsJ(quu zy9zSW;#I3E;oJl1;r|7spKFX_0(ah`-vP-J;JS~z|IM`jAH{$7{&&@f0xYr`JBMlj zS80axc;nc9dK1S!Tb^^E7~8J4Qoda>ciJ|R0U`i;@Ac zpygN64~&^69q%@=s+Z;*Hh4-~R(6g$-HYd)XmMvR{tSM%Yots}R^>j6+Kj>KN1=CB zGKY5!L(6#Gv1&`_BSW)*I0``je?WOC)(Hze=dGe~@QLoO zr*A7?mIoJdC!UCG(|x`sCmQgh^LyfU%ymvLaoPND2m55!rjuE}u9X?q^ymR6hT6q~ zW6Q)pq^LS=Bzci*0$mMM{qmrPa~&FNsVp5buC}26X>K)x;E0zdGnbZ33;m&~w*4;9 zTfu3=Wyf4m?Zv3Fpidv|ShurSZAecH!Vk&hlRA7VV3lK@Gn*r8}~({-(O-bhxqTF+%n%upzk16xSn z55A@TqIXtBFWL9J;(I^8<|R=}Q{J>e-F`&B0+ai~G!^Rru;Nso@?felUF4IP(LvW$ z2sHomFU;q8g3PBa;Q;_=I6X+oAJ)ApZe2Pgr_tFT&5BD8p||s<>NlvdT0)gMoW}>@ z=mhsb4x2$*t)wd#-V=U1?{0K)S{FPLf~Sk_4kr&?iKm|eg8qb4|MCSe8wpUk&h;Wd z)0>h_^~xao|5Y8C``i@<28{Iol;SVXRfhSqV8kZij)Xma+Sfjk#^4S*V>}Z@QJ5Sz zF4x_A;}&oFE;?fvmV^N-ov|WA*L$kr;EsR*gNkm3h3flIA8@57idrUt)CAtAxobee zpJw-t?EX=oKV>9Q-v0qe^nC%OrT%yEKllDWRxPGK3c7FOGp`ck&p-lhi^p*u=rNyf zta-iW6!n9$WGZm>qd9SPskK5Au}?M`DNHd!P*cMM+tQz1_|3NEOz;pQPlt42u+sm8 z#aR}5Twxs0a$rhSnQMjMjPhB~2Q}-zZdwY(GUkM;zqa?kCrZV{sdS&Ic{?A+%RWcj zmk{0kN6R+Lgcd<3JZ%1!z>%(qKc_v@ZFagcchUJ0l53r4THoliAKgmqjdjrId%N)k zSK#Cs_hrb_RDNqAC0EU_)dKdy8+c9r<^*c}iBXeuCOHne=?Psa+k@GzOwd7l!h&}GK) zXxw2<74wz~Mn-QjHw`1S3szkI{`$rQ=LUI(y57vdKOcTa^8YJ1UyzZXa|h&F6j79E z;P0pAl?ZrAYKs1tBaAU$Q8oV6x;Ype&Yo03cfFC>Ti{7fF^B6xgBz=d|D+gfI>g}2 zuj&7nZT5Jc-lm-@kv|Q#p>g1TSl44ktN(CnTC&gPM)NweXEgmwKrM)xzFb*`=)WOb z_VnPGR$dNgiEr_ld5|+V(=xQdYf^B=^^}3z>`@wV$wRTSz-f0? zC$GxctTucF^2 z+pI5B(`0UhHrLnu6pq9#S$j`O?lUtj>l$lXr8e!6B-nkWXF_U){k2r;+j?gi--mY8kr-Ki?P2xdPFIZT5xPXImYt-x8;Y&O#cxs3QtdC%IaxrKh@GVfIA54 zeG7|F0Vp1lsF6lgyiVPxd?@ZM{7W29ObjVwtK!g;g2A&0&`MzombT(yVbt2DX}OQ)~XdRQoT(L)#fiUbh30YGz5uVlnj?Is(y3u-b{z=lpn) zwg(9ktvImkS(+UJh=)716fRt8HR+-9)I5oo*%w){_h7npI z(+60KjK9YH<$}Z|cuh;9W-8CFNl>QF@1N$ZJkB(gb+g4Gnc$IzW7N_{GKmZaF$~4D zk$$t#dRDqlBv)M;f;aG$ZNoC8Veg&(2JXKmKpHAdbZDWk`8i+JpXv?n16R4PJ{uN& z*}cynLdvVY3nxn^*-lT>NN}-Ud7*#e^3yRr`khlHQqJkI$e0(l$=oC-P)8IaR!yvF z6FeD9`L99w{14U|r@q=)&_zG3)IYqJ?+qMzMt>_b9}J-e&+f;?#i41++UFJ^4?H=&UX1Hr?>jR zv=6pVtZpuQ3Hy|rph>`3Wh+dX{}!iotJWP%`6`6bbo(+qH`3xF7Y3q{Uq}At6NK_> zj3RNehQ*`2kJRE8ax!kGM+B-$ID626L7(mtk#~ z*X_=ay1T=Vz7DKW34{dmUbfk3ORASWp+o+aKXo4e$~~RIv;<|$?x-%}ql2ai6Ig2e zaXt#RM7ubQ@tdg~{O%dQG3J5X`(_MS$|Xln0_776q0XqFU=WRNqkG|STXgsnoc=U0 z2q%gOerSPZCQb$ji0D9yl5;EJEqWRg{B9-JNJ$}pwrmEsG8L<;;IrHL^vk^$E{PNL zV9J6*nJvx##2MGLY6K}p9YAxkT&>z~<$%m;o#giLQ10JoBRB$V=7tUPCd8YlZ~E?iFa8s;fv1$(1x1AaIWXxDJ(DW0|MQ~6?|xA% uWQ8eEQQgl`0hcuP{d_YZJ!98*4=}ijahdo0LiFxy literal 0 HcmV?d00001 diff --git a/www2/images/graph2dSlideLight.png b/www2/images/graph2dSlideLight.png new file mode 100644 index 0000000000000000000000000000000000000000..4dbc0655797c9c77eac9404b7db5866f1e6a843e GIT binary patch literal 198813 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 WCMxjDUN^w+Pf}D)q(;af;Qs-bigCyQ literal 0 HcmV?d00001 diff --git a/www2/images/graph3d.png b/www2/images/graph3d.png new file mode 100644 index 0000000000000000000000000000000000000000..240ba16f88acf2e6df2ff6f4c7c14541834734e3 GIT binary patch literal 31749 zcmeFZbx>T(*6=;J6C8qN(BSUD-JRgh;O-L0;2PWs8VD97Sa5fDcXtRRK+unzbMHOp za_^IRs=oLA=dJ9jk=3i$>h52!UekNm-V>@QFM)!Hj|cz&P^2V9l^;J(A72shkdN;} zGnH>2KM?FCHJtzeB+Q>L2tew4JOBVu!9qktQPJGa+0Mz_&K@WwA_BB`v@^A^1_1!> z^XV#Psw#Upe3#4Lgk?g&@iKPG*ziDQ;czfk3?&T-0-AIPN%kDJQX9IM7&Jj|RtQvN zBsc|o?V zVPf=E|DMk7wM_;=Uqo_y02+Ly35nAk83f?UhnJU@v=y!y0O3A?1P^GHOKW8!41RdF zFPx$S0SI}qG z!&11kSR96shN*%K?H(!5S$x@^t)34809i5EkE1=mb00=69UkV0tU=YM-*16^AT=`D zxZfHnwig5d)|`FD?&%mS@xiZP!8Z3f6vxo!dPrF=m*J)r&jhOhS$p&9=k`C@h-F9D z&CP9XZq7<~3Tqqot9##@wd=R4-&z0g;k~{5zS_J_?#rU3*6#oi4pxlxl z!YhWpK-U=RLgpo!hI8xsB>-^NVAnQD1rG%__g@=vdpHrelgOd~fK8=h9RL75QE~>= z{z`!!cmO~&%a^8Hh~Qfr9$hOeVH?b18`7--M}RPSXS*<(Fro>V(9wYUlb!M zjRE7NAQ4-ul6g>^Jt{-HS}iJ{{j+OB_>4BHMqdPIpot6^4Sd7dD@3G|lN=*dgym&jG^Et$T-9-m zaq)3mWwJfG!ZbEXe6qN{c@wJ&IPQ2lAZ>5pX8LBwChI1_CdrvLV!Dx_L++KzI+b$2 zrS$VHv@NzRSWq&HklKe-<)wmbRdn_!E#Z>v8s##j-~voGmsIW{e;g^9ypo)R34C*0 z^Gl1eUFUlAr37O6q*3+pfjx=cq+O_QZpbJ>*#12sW>nA9@Zj*wp1a|dCCh$%J`w)B zN0o__`5<{GhN7N9`S5%nIEy60zs$Qvl9&aiDw~_2{_1;+?VTUR| z>D(u58S8|4otoeyn`|93NXM!uF)2}_Sh85DSmL0Gqx2|0{bQ3@gXWDds!)&gOP!Yz zW>Ld1={qWODogo@`8aZXJl{(himdVovKvI*T5R)=lQWw2z!|c3`O6+nJJ*EXjCZPc zHrM&zC6F~>E0M`z7m$bXc)Qpg?0AV7dltSbiRg9+isTt47$&U+#MF)PewY$}C;lwL zqFZN!e8Z;OruzdWEF}r0jNHE5ajLRh-AC$=uVi1z_6!XU&I?WE15 zt$Z=ia@V4(DX6IhNmXoWebhXzX|xU0;?~U5P}9<_6fa3Hp_pzcX~;*nQ(P(^pgY<$3wmEbKyQjZKZWp_vh`*_W=;j^ntdIPZGzcXxbnD8X~6#Y9>}K2BAR zSUj(JmQ#n{9}9SQeM{V9G}9PC8<}O@sKFed?zBi(Nt=)`!!@gO@;?s=50&v7U`XO; zNF(T8>TTMTcK+_5yXHCmJw2^5t^KHAq3oFB*y1>NF>{bDlR86_)oHY&S7cRbYfJzs zGl9u!<&%$sh=Q+K^$r=MF=LE+$xQi|Jh!4t!xLQo3x3DU4gL*Y&SjQmP5nX6)-SzZ z1{6B%GV}viMBb7;m^^qsi~;h&6cA=mp}s=C+K@L_o^ME6A_aIBKo=ErM?w)z4Xdysdr=Fx4{1-vYbZj?olT}tE0z)5ul z+OY8PG%@?f#zZ>^7m>)t)tK#@ZJW9dd;$el+;`cAe_oIyKuG+5cc5Y74iB=g}2qa9-{wk9t~MxCBWW4q~-C3gj{ zgU15m1~v?B&}-OFytQF9G&WNT#YgH%r9MrRo^n>cdTsrFZPgG~2S{p&TY=sOi!(>M z3L1=>E7gYALFoki*r8#iSPQsG*l%a47Tvc9g6;ZSQWoQ@3X41IOh!z{P4~8!=`*xZ z6N{3zlTd9@=H{zVR$f;feZLS}U`!gKT4?aE5vlvo!du%2%I_NLn82&?g6(i>LA&wtj=!&YK@CDpZpw5DbR%_Bc_~mDTC{hScw?hmB5&hx z)B`mRbq7a=S~F8OIYl(ir>Yz^O?x1L+Vi6MKK;av9)$x%?cMwCbuxQVkIlVHgq2HT z6rOq42(M3Ta1$?FiOh%?ErnChQpM9$Qg5`4wCfcH`NyXBmpyMK7G6Ai&&I3iA$_je zXEDF$HxXxcHWHDZknZin@MFZxTs`ZoK{`@HvY6AC>I?;BD}>vXK@jy;>Iy-Y9n2r@W_m%cT5e8qW~p330n zTWUJ@w7cxO{Jw&-@pE&p3pn2G-R6son2bq<{G3dHnvfn2{9tM-^u)K2o8d4FWaf6oDdkjvydA z0|&h^6Eho-lbeB=or9B`lMcx8C^Ir~F|shxGja2rD3FI$>h`FF*D! zj@EzhF)?NYS%YjIO`IM(&-`DzVE@lEkbjx~TQ~lt{vSv0Y+?G>v_+Syt2{~2X}oj*OEKK+a;AeFj>t%;qR6E!d6 zQe+=^9&Hux-sGYIP&p>)~{pZ3ru`_;j|F7`i zVP)rLG2~)0rsp!`=Avh22C>m|nKH4_n;05#a6dWxc^OB+U z-|GAvi^*eSY;2sI>|CrYk4+dE(K8#danKvGbC}Q@v9f{;S=l+5xs6%>*~EWw^B+w~ zS~xvMlgHnp>@n8<$UG__hkq~qr^4Fej|^gO=;#FcxiI-i|G6^%m2&=-QGVL|vA}r@ zjeq7Ie&e6v3o_wl{I}A-y7e#1f0$YP=XCz>5d7)?Z|47V8*b(x+h2wMpRWF>^*=jt zvNLsdGjs$AnLS3x|7KGj{up1S8{{F$q*E&eY|gp;A`|G#PY->s_uC#K=AC^j}X zv^4{n@H751fd5(Wzni%~=kwoJ)<0M4f38Gc6Js7zJ4YKsXMPJCLo*Pgy{#E9<6nh; zwaNQe4id4mwsVxTGXe2G=7IlK{9mmeue>S#dEt%UNm)V|C?zKHm`XS}=vf$;|L*2* z_5SAP=Z_rEW43vWe8WFh`J>H$ls&Dl@iS{!yZlj~lZEN=U}XOJ{twf?tDl-`{@V2K z>ZhiES*qDuIPgD|2U%-~T0H(%IQ`6d zENqX1`orj{=D%8M{$|4FY;eEn|Z36Nilzj6JV&lBx$Tu*@fTKtXc*LJqL$gjoUxPHy&iS{?HCqRBJ{>JrdK2Nm2 zaXkU@YwrJpuA-@i(qt^Le8Ejq3@JUyHwS{hH4c?QdL9fc#qgjqBHZo@jsLdIIFv;%{8P z=JQ1R8`l#czZQRq3-PZ9K|!{UPk*{SKIZ9AjLQ1>h$zrlQdtfF@T33$!2SThkB7(4 zJpjOk2>{qPczn7v834ewi`DNE2LL$Eq(p^O-RBRRJmO6*)pmX~wQM!vYKw2`sikP9 zRLjtmB$`MiTGN#iSVQ=ir#LNwmzcmVyBz*YD0)o(Hu&>|scnP{y%o`)+h*ad#4|1& zKiZ(S`-6=8gk!5!3(3_AD_ANWM|vZUY+6>*1xQJ0S!t6(3YxGk<8zfwItScaE4?Hy6tBFy^9M}i zyZ)_!gBo@rg57W>Is^aKcxjdt@)Ehc_N|Ka%jeh5U=wxRJmv9oXh05!Hm>My1>*})t9VSIs%*A_dY z#%5QSyJ@$qLfQ|Hcawqti zXeVV-B;m~70;Q){(8D2SXnKcD%{>0~Cn+`ofv+heqIt?XR9rGLMn=N2a)pkXbo8NI ziC{`cK;0SZONG}D1T%);eMu`xm^2_t$t6g!piwFY{Q?4^y#)JXY2wNI9X+#wDIEnU zuL*W5EhX_V-(FM}3X?$MF{$yP07eCo%}vFym?gjz>-+kEq6ckA)M#KV*r2nO)Co4e zoGz3c9S^Ab!0lp&*6T8MoMH~;?J8zkx$Fy7_%cJ|hY@n;AZ$p8aF)4Em?Rp4AcT}4 zAXc)J0NF?$+&DyU42y^LTr&TUwyE14tSOzY3yZKtE70b)&h1)*Hzpo>rh%|+Xc0ym zS?^iaw|Zijik#BUVpS*BZ0Z`p{0{4#kwmX@<9GU|U{*b}Uxg2%1d)Y=ps0Vic-_iH zNZW~!jQj~H*B7hT_bgh~`k~B?@eRH4M2Gz=G1K5fqG+OY%Z2g@fluSQJTqjf+JXA( zf-P6;;dMF;PN~zpZi3;emIIfwDCQjC7;7w93`&%Pc2}UI2am8Ai_R{VP84BiKu|30 zr}&~_956lU10h~Am@goCE=hy@`73S#cF3{`Dc5(m^AhR9%^ZG7AdrO+-=9S9(>iHmt{td zf(Ya~j=Js`T9Z@sGY_iYOJM*~(OFt(&`dbYm3C_qrzjH0Lclia;9Ap)4ic)a*n*3; z>o&3&KXWqzM$N3azD*Czvm~-Hfalm9igj8TiE&$L`zS`T$ zWF$Ta^aD}(k&{zYq+-Pw$coj-#0f4v-$c2U-e&hP)n=f`QYoBVTwL^k;Yq1VYaxRr zHu~E zrrvybHRvKrn7T1LV}io|ypXM?EqECa(`Cmono%%DL;SvUEgWH!N}o?j!$OFDuAmHc zAes`EMajsiVj{ZQ_PPN-4RKVWUf4io4U^>^f@mBI4+$DA1aAB{gB95z?jqpe2bKRYHfpo?8qWY$?3cMXR#eJ5A~(j*qxR zqoU+_$bMPuSu(5&gYWo*s2B&z6xsX@;&YgVa{)<`R3Vm|LJ(OXHJUf@q$R#Kt*9Ep zCbc?(9x(%$gB~Vl&=VmZqq~<_&=~K^5F*6z9PvmZd+`9|FkT2IJQ2kTboA9PE%ZJK zLXB!A4Qx5{EVY}3zkHZ_dwnV88xkMz+MdW6AzZYy_3c5fR#eAu{HuzQ(f&2iIDTUG^MHGweojBtgiv%3?voC!9F zi&W#?tgnk80{k-?h?zj;+)c~$bQm7PGC$@JTEZQ4*|x~f?}IXe8HD2n68q*gY0%ILzirP?$JEGdKGjLlr!+;gO( zw!=lXvl|3^Y}xLyvkt4KQu)~!qxcBH0pKj`t22xJX#gy#AJ9Cw9A!503RaayM^Drt zVuNBcgHqO7Yqv^VRzW7r?9Z4QP}gpic7RhR`@{&@yyWv36| zga93i`{L_L>7CB-;Zf@;xY8^QpV+l*Z+d~HzJX79>lVVMWU0x^jV8f!EfBYAnv9GL z;OXV{iihXTih_+=VWVw<&@Qp{drQ@TDv>$DHeeVRvLeHW@=l;R%1q!!bbLNM2dq-B zQUI4YmOp^BmH~sfN`!qE0EmGIm%|MEXi5d0iu9b2fQi!ghaN+eVxx>>Qo;Nhr2R}& zKD21HI5a>J7O>B{i^^S)rLoDRNA>O2p66?4I1W~&R;(0jeA_W`omcPk=gyb5GwRL- zw(1lMY?-uKfoO2gh@tHlY`&CuG$|KWL9zj3?@SRKp{mK@9aJY`v|?PNAq~*G2(Jp_ zmFSq@rPcMJ(F4FA);xMYk-LNXb}JCpKB;x6g_MZSZKM!q49xuyVmQooSDcr}?kOjU z^JU5sqeRGtXws>!x}V6oNDA3N;|K`NhOU1l3DG0mSqM5ViP{h&d=Y-X7s_HD1d85s z(z`hz%iMLlPEfYV8p%{G&hhf})T)zeJT$dn71vo)F_?6iOs!J!qF~|WZqwC`?~B#S zE}21l!(-JBv99&Xebt`7!--q=G9{1XEI4qF!ck2P?qFX@O>SczkJ1#AgvOU13W$U$JvVts25a5g4Ht|CR?T8iw%r?T7icov9`fos zZkpvgJY3AbB(lGJ_Ns$AJ)p~kDP@9N!LtmO_O=nyo3ai&TLq_4NkbOQwf^pK9#k7g zT}w<|=d0Fq97B&ttvBCY`O4Y{4%fA>Hp)8EM9ny(#*a2i8c{2zl#_EFk7JulSVNpp z11(o#8WK4#Tc-dS!DSxTtXxdh1knIRQm{5!6Fwhj91~2Tb@=`*>|lwR-!C;NK<3uWK{>Po zP*(90&}xjo=8{G5Blo@ry#|xQMj9UCb>GkVBpHi?kEMGIYMtKJ+BH;efWE#5&*q^b z7x?-gPeEClk1kPnQed+2mI=O$>r3=~ZHrsENN!~Yr7_@GJc-Y#ZArfRx`$kf3&9Zs zV1Tk7EeCFeBcR1Xfa~{lMi4x7B5VsN{|Ngz&DU8Sy$@h5;_@c(OEUs@RhHs@ksGpU z5UiAz`j|4`a=RMiggvts&)^7u=9@$!cLs>7L=R}@R}|m6bfNI(s9m4+#TfEACV1JW zEsvFWF=%1?==r+p&fs+n(wjIZ#2NO3&k5>m2`j3ht5b*sA*VSMOWsQNC~Le@20B-9+Q!v=!cdwbrH zb{BMUl|SMj$8M!}ij5wZt5FCCP?e*>dNUVtz0oe zGxAa69>dp`X+bMk;Vx(am)qZ?L539jGKdD{lfGx-GG!)H96eP5Q)U;b<6N`Z22h&Y zBZ9K<&Sc?r{nS@;MWxA(Vsf|BhheRE-*J_e`o7?i@sWmxDR7_Y<6&>6rj(S7T7`HH zSPij(7BzSg^cJD<9igd!{z{Dc8YX;Cne{_kWr0?8M zOJM86F0=0pnF}&O0vn9UdOmXAC)WdG`u@b3Xm{`D(WEV(tT1>WqiE zV(dPx*h{`Qc?x$Ttxz65cc1DgqBun>kf8l~sBF4oNN!sq0;3aT=6yF}UTS}Kw)z<6 zi!ujWZMwiE;)BtqIW?-v$z24KXRU;=l#*q)i26S3I5rKaF3jW$(USx96*UqiC;B#Q zmDf;;$4L=pyp3k7Y0pL>HH!rE`Ur^+P9uK323=%iq$x{Eb~Xt>;HvG}o0XR9{o)ti-^QGI?u-R4jFtPXIbI3y z>jxH~Ve294dsdun4vYkVUR-9Zx235q|P=G4lz2<8; zWVCDy&&mXwmxmXalSf{}+yjJZ*mhNlK(+M7)bg5e<49u>A+V#6fl#j)mxonYw1Y~7 zq|hml)y1x@wL1cS8ZPNMGDc^Z6a;GS@~JB`#Wty=&~_I4JGx_qzR516s`#_KB)v0U zJ9F~_{Iu{Kb8G9vL~UD-y}TsEKw*ZYH2k#d?L*EMhcklUAE)U2XQWN=Fw&FA?3UxS zlu6y!djp!+${E3CLkA_b#-X+@(JEEP44_owMpEYa%4ukNc1%1UR9I*DwegWzr1nRnWe3tB(?riK#aUP3fiSr?jYD)| zyhK_J22LwUa^LSueHf)ArR)!&^69KQu^=F_{bpIDj1U}aw?U9PrYg`~C5ye@d}zD+3icXf3E;fp|{x=p$Q$Uaw+U(qoFCaIlr zxbv`C9{<$0M^-dC3zcUqzZv>AeZ=ccV{`i#sYZE{qfeA+SK*zHFZ$;H>+Z zU?>sRgxyWZYWTSzp(TaLXV!=FgF8m{w@AQ38%_ScX?`!hzJZ2}2h;YFNY2v~$OE`S z6gfiZs^{S6@ zToGTsd?}MRo-Gnw+H^5*+3R6$Zfq;E;K*(( z?OBYhuZUFW*hvnLe+tz3yp2pHB@xGEdHMtVO!f2{Y?n|wBvesanE;wqi=i&HB9e}k z^`qz7oR#3RRSOD0Qeu4bN;`XtGUo&gkeN|dCY1s>^}-|f2ZiGR%^}pIDGS)`F^vWi z@UWps$zecC`&Sq>Ln9`YtKB>A;Cr#x>?8XIKOgFOdC#4>R^R2oKCYv(=Et|B2hO-Y zRXE|6?eGLuy~yq zUl_csnxGqr=No8Os}WVr?MK*_EjCyFd6U}Na@-LVCT>4z{c*axM15P+6r<``ZoIIb z@kcokSeK|lUK5NFPh!%_uM%3@TYYM$^CIvB5&@oGi>-#7N-S8J3u~hirr9<12Fe}g z_-mGnO;~G?i8_*iXdHP4cBFAcFjP-_aYh9hqlYd~xX+A0P&Lb&3!NJWI1VmFjWCMD z%NFW&?amJn48~Z#7W0KfXSc$iqoforF@8Hx?a~6WG*9AG zFzB#W3_4ecNHmmH&6SV^vK3C7QcPfXfm_)AhNnFY6&; zcQxv;w4**v1z}utihn^Bc6W7@G(r)vR?!zei`L$Fe88SouvH@$yUyrtCk!UW;`IvR zdx%k3E_xwzU(_`GQIRC5(Yu-zq$WVyH6pu+Jp=+)D~vc~eC{@bAo9g?{@KZrBjkWe z;htB?a>kVFJ>K82_e~lUX?rQb!G@? zQ5IH2n{(gjc`I5YJLLK0t3?9fod7wCWSLW=4W4Y_;1omUZ#-Ai7rBHy<#L zwSA5DE*ospNK9o;b(hIYlTB#*nC!6!(oKGfqoX zeVER+ZB4Mf^2#ce@I=#<=f2lOMcRxSxbjHSo4$tG<7J$>4YFtbWInbF6#4#@iq_b* zSMfrp_9ZUBe4H(sc-DNF&%&sU05S;*;I-%nhPFh!v6iG4#RH?nk$xL*ln`LLO^zZ8 z=M|n^%juxVlRtXVFzA5R|D*gZ9X?mky>S16z7B6lp&|R&$?!*ZY4LP;SK@c5{DyD} zT88h{%zQbMy;qg1p2Pw!JXpbmptEQ8nPk^~Z9Tt}FV;SbKm;eM8LPu#HB zMeJ0dL@fLUd$G8n60SlkMk5H48gACg9>i^m8on7t>m<2Gq22;a7qMdFL>C>PNu9a* zv}QZ!#jsn?WK1}&RR1v=e`3_CPhO?^7@cC)k0Lm_{aV6`99bDwn91ooS3BPp|7-7l z1Or}^=LQR;Cq=PGG4btD-`#l8Ykp7s zQ5H6=uwHGfUPxFf-ZchR?YnK4J^yBMc4#bq201;1sem~3_H1s_6073_SHtX7zTAADI1w%IZz9W@DbD6TFiE|JFA@kr-dohxphZ``(WfF4E2 z=DfkPhgWae{inux!BJZ_w#RIQYw4*X}| zJ7upx9T;_V9lQY_WP$CjXk#RW=y*x#7>(C`jT})*4({ue(#yhg>52iCF|E@vA)s39 za@y{Du5D?;=(oc1{Bc=5uj(I8ru{~%G8BYh(`{!SJ8j>?4I(p|7j*VQ9i1E}ndc_$)_+?MR5ngy=nh>%GJ&UqDkM6a1IVMYdcGX2Gg^`r<7+ zsUXdDrf2$2eg3i?axojz0u|_U(A2#u)+yFQHd)J^rhLpCut7lmV6M$}HbOC5$m%vl z6rL|1FC;Xt#8BfLuFb4@r!5C<(*=EyH)j{tkagMxdmL`>PTmTn%dgmXpaAMeDZDKv zTv=P}&$-4dMvg2Q(vclfJ_B$fuzD#p>_gGP^l>s)#^dx}kf?14z7D88XjFQOu&Dx(njl#wzzsD3XEe2y+NKAQ8lL5ps=H*Xem0>Ed>j z?Ow_TLcI{`%!5H&<+9gxBn6H+pVjs8yg!tC~X+lq79IY$5?W>L^kC>{+3+Q?9#Zlr7@iM0r`~$gkoY18;#aW zZ8Wm&UFda8=&m+ECt4%FW86U;J+y~kpqT3BIByuWG-1Jt0W|mn9z}0#36DlB4LXRK&M&k<&|qM2ER>x`U*c252QWgLau9em zv2afazux-xvIIhzGERvoiD^{pAoI2_llRTl>EWTZzMZ~dPV{gtC-nTBiUB1 zadapIARw`odb!c9pf4D;w!HwH(nqmR?pVZpfO!~2I;w*YCJdNq2s=!!Gg35!2U3fv zhn>swwKYpqglC9)vu%ZaW!Gj;VbPA(!>)vqv@*xFXzeBxhkvt)n?fHSv=emeqdG!j#t$?L0k+eIzC%I-i%D zu%LS8-oi8wo#nY;ud4B9lG#jj{F|^+zQ$X`z zXcToRgSwzS6=6sKv`t4(=PRN@5+j)pQ;f;%6`eP~tnpeW4f_Fq8+*Wal>5wUZpV3> zsV;A*g2t1`>a&EcfP@I|Fy<&9AD`QzL-2Gx$4SEHiMhJ9#NtLhbE_>7g{3{5KurYR zCK?5NsFr2-u$FSbwPYA<)Au42m2eJIU?Z$+_;+|cc(3;z>Wbrp)*mJrYP}WpY+f*c zJMe@Asil^zRL{ig;!8d>r!|+Me!+^DCZhnH8f7F?&%iLPk7k@&yvFpT+AF3090cXa zZVxgqMaET1E{o<{C(m$Y4Q@JgB6Sh1Z`*$fn@N0P?9T=oMz`2u?Eh?u1D8Fq_X%_} zeW$FQLYP|+Lmy&gr=6Zkf|i6QW3a4c=#)47nVg&?c8C^7X<{ybx%9o@+(tWULArfI zpOX~VWSZ7zQ1?fw@o7#y%)Bf1S_*O@gxOj7cxLL*hF%#uyUSW1fH(j(1Y`9;*h`ly zDlY|ctvt?seyCB=f8le{JbIleAM$0Uzg_~;^BSnp=dSIV0`WqY9VTo01m6BPhIzFI zBEr*r*;3U@aYbQq%bm2YwjsOK2bOLeu zt%^f%%ke4+Ji?A&5+9J#v0#%rSF4}c;i;D5BmOcE^`vU>Er2t&K-S_Jwg6}w0~1{ttq|MIhVG!0Pi3Uykfp0wLx*%~@C-lZzB`5|kM8J(_-+ zIo3($j{8f+y)Q4z!dvbr`8;05AWdncg#!qMB-<6nl?E7t-E)n+AP+y+3X>L~YRs=H zc}Uyj$4GZ*p^5}R;NWTilpXM5cS1An*^4DyV>bs={po)!zIc}2FuZ{TSJf(L3it}E zFJzmoDTS$G%+P4zs0wR`;Q(c1AA0njLM*L{+p(1@i^nIRes^#vL4}84BK}9s@(+6A zyEoqs4|Y3`itGu*Y)h8F_~Z-zU(E@5_s<2=JLOm3q0E|oZzJCHJmqCFFn+};7mDm+ zGEIXDOQmp39Y+RzE9T?2r@qX3rU!5!WMp7)b#v2a5QKU@Y`yzK399c1Ho_R=-8L4% zyD%!nL@F7A8tzi(t6}ADp1Ku#VIsrW!L?`V+q*(Hw?}L~!8FT~i^(?9Qz=~Gvix&; z(JSx!bzUzh$GB#HGd0}et|_-Z_4v_!9nNej z^Bf*Eli{7T9@`t?<7|E6d$rdbOEFqnT9EdS7lq{IhS%ulq>vF<#oW_3fxWL6LesuaB7|bl20C^xlft8Udc*niy z0|aC1FbkF_V~mUr>l;!h@$^+@BN_Mi_c1XsU%!6c*BKe;3@VL@mb@KaUa9k1J62HexwdO+5nGZ1 zN?CKVe?X~`Y@VEXPsa|yRxPi=o}^cu8v}<)h9EsQCs7Aq%0vOYevQY`?far4#ZNi6 zQjuCU_@Giu_3<2@JaDF|pH2z<;w(pD97t~!=b75;zEG6!c+KLN{jIz9GU}4gS!_qn z%7=@W7un$Qc&Wkdg#U&Ek9C6-y_?J_>W%4F)`#RP32975miI&J&AbEeOwQbEQm!13 z^-T6{@r6olk*B1r^yz%bmdl4eYkpqEa6(WeDy+oM-A!xBYPor-7_>p!BNGskAVUK~ z5Nn_Hs+?E4`og+~SF`mQSv*!LYpu|#bg-+JJ%uoEKGiysR24D)NQ>3P7Z=y3xaZC3 zwQeNO%1wP?xUY%T(eCbUZ*TAN?eYWfUFOMQ%en73l*HaH&Wb#zsbj4iPUhUSU2pZg zkyx5BeNu)cU(ztlHcKzbSVOZ#XG{^_{ChfX&DmsH%7w>@($oag07dPKuEuc@v#Ei@zDUQg)!}&ipvl9XPTG za4ltkXLy6V0{50tlxEcm*MV=1=COa0Q~?JGfYQb1%3zsUuICuXn(x*xOI2* ztohRNut)*(cz4O=$;#W?tFK0%XD5ChPDa9-d_!rnKjGLp}>a^ zbBsE}VqOziIprqTRtOu~St2>OBoWEwH24w#WdQ~RKs`uI=g3_D(XxbDBru%<&Z%g? zSGKxko;((eXdqVz(Jk%O4Z1SFep3j+zDYhdDX=Kc21Q0}$|WuHrbOp7JMF@%$HT&w zCq)`v2`?yPr)eLI^LX;jkmU7v6GC@)cWKN0_5Q(^Z_8)%i&hV|>nHrLF6MUXGqt^r z2+DxfLjaW48m#*@@uXW-h9>9+6Kbh^w;}tKI)HLksmn*V(zl7&!QL;1F;s(8A$6v* zAcY0NNRRW|z6MQ#ROahqFEkp$P7L(`6eV4?!g<8_IL&pvRCrk?B)XlZ?iObcvol{? z4hb|Fc4a8znoly{K07jUKrFtY7#SG}HmtQ-n4fPCTyNLUxE*Ne*57G3&p&SKCakqo zpmkxl6gx#$QJ>JQB4ol5@*eVvn~G`UkHe8<@#w@B_XUFKIJYE%^zRj}Pa8t{G&E)W zD-DM`_F83Nc*RtETa`+76or{2PT%Mdt$Vf$J>!E2IZ@scXmqfzwVKlKi+icy>g=4W zT&PYx`mT2^uOk!xVKNC*zjVx^^<1{8ik&&o6r8bxV|wP;`rd48rM{^bB%Z=mAm6b@ ziSK^!#qHMaMGVqO>mY_HbRusU23k4Nhi|Hg#?KwoD^)N$rz)5_8qIBa?;GBZUfye8 zNarzPNOtB4S60_F%-;3!W#0PTx6>Pcu@5C7=ubvtPq{X&a*WGlri~}xhv3d4W|MOo zQah!}ws7OLm0o9uILR<`gN?$qH$tGQs`xP_Znh7ubML~g)W0r)dQpGZA0E6N-W6mk zn&ET3_m~5HkDvs+Hxydxc7`q^mu_0up*CC_NklhHA#oR#HzS8Lf-L&{%uF?OZ6bh< zV_P{rXZC@xU(S&zuGa|l-mfu1Bv7RDe>fo4CXj2q!<9a1e(82sO@vGEGASa6qr20A zFa;ibP~XzD^QGnU5y1(|$@*Lg%O<^SSBuG~a(0G7{_k#3qJHnOh;}gqzCb;I&{`(^ zzp&I()}67acXKgR*>6;w$at<@J_vfR-W5t)9QMX+*kozPKi+`y_Tk<#;kBCUw(I?m zskir2ljBEQuM=Yg2^8qWgXKx zl4XR&j&LgK-S?=6vXf+=UD}z4&ZrYW^neR03JTFHSGvfJ@US=;>i*Alve+N_oz7S@ zF*9jhlBTLi+So=fr|A%0E;@bVnC~BECZ8M(j@G-hWAG@VRlP{ofxZ*F#{C) zQfu1G-puMv*vUv)ye0rg5=YULgw)8puq3XF`%AO82Yhge`p-H}_wqA|2?-Z{mg5%6 zaI%WeItMW?hnH{c_YM0?@ch|^b_M-ENYwQT77My%SSY5wb;Qvo#)>%;ivW~;$_6A; z_!y(NGzv`l=R%m5QDn`e?Fs)eQn>i&t+#syphYF3QMveRi>shm?GL=u0vTRZ*;j(hF+`62nekz z`{M4b=20y)Ni%0crYdpYk-yuB@IEyDR;Zx+<7#7t=gn2%#|Xa1{jdHhUIz#yB16q- zSwC6YY&OFuQ2C8DGvn&p&bOWQWA_fPx~UprQ&@j{-<+{SLG$Efr1NO$&1+!ibre42 z8*!yi_h(yHW$8c49$apYzFf-6XMDS>t(g%vjvd))xokSwa;$rGTq`2&0r9+cF^4d1 zK(MFv#fz(r;E87~pmqAj+BV5()>)`4VV=Nlk-CsPUJQ%K1kP^w`z!QCgKSZ@05}*HOGqjmo~IR6Is9F>N1iS2SM>bUm%H0$?=Tac zgG7FQzWVi9sOb8a%iD{Yo927kuVn_MKgje99+sDcng7243kCH01Dv0I@3z9{-@5m5 zrTNm<&_am*{{D12-P*_B_{KM0d+oKSM_YI0cKuoQ&+eMM>%Ou3{xSQHlxbLBURX1d z^oCzR071Mrp8LqHxu4qIdwKgsm#~J8<2aE>95`^GtnNcX-?alqk@KWOFlQYxPZJ;mKhl^4-+;Brv;nL=o#u2~1 z>(~Fs!2kG<3;)rZ_8O`wJ+p0K&**+IdYvZ*LoCdEV6gJpH;)_`=p7i@{p@qkwSj(B zOMj;SWBWh$)$CV)`s7bj9+uAZ{XrFIV=#ntIUk0!rS!Z-@j?cPwlI1HTI2feBMA3gq~_w~H*n?2ur$J9G`o-Y!QkeS)K zkYGPLSQ-19TT<`4Z4a#;XyiCfI-S0}X>J4EoQ#i;YfnG&gGcst?fc|`PyUVmo7auK zuG&<4R-D4tpOy?D#Y_G>ys5AJyTLc@-Ttb*Ms1**kb?&gCX>lp_kh4%19v^N`=O8c z9~qn+4Q+O@@v#~3Y(CbnVCYNkjZ3vdwWlR=znMW zJNM1p_dh%TXUl#eM@)-^o@PFh=l@Xp4<8!(PhoKD1`@!ZQb&7x`WD@46>_&;C98+w0s0`aDXE zhfh9yZ{gl2I-h7{KUoeL#Z7n5u;`iY`H=Uat6sip&Yv6HIe75k!S*t@qa5c;6z(3n z`{7*=|6b|$`X>9=Zhm>ysr1U7;z8=M~)nE9H+g!ZIk0d$|KW{e0uiN zkK`U%cU&)rj51aZ0tNts{;B>CdLR6y;a^(D{rK_Y$BrGl`R1F?|GsH$pxXif6B859 z{OFlmZn!1WnYn-L{s+Pbj`kc~GxOkdpt;O%nt#(D^!>qAJy*5Yux)Z&MDqOe&+py0 z_lM8?P&)FS-S>Qb;OoCR|C{c#yQ=(SO|jD)zh~(^U)=M>HqC9IFTO`1(ZImK^7F7i z)BlJ2|M08XuiiC&*Q&k&u9+Fblf(DP`#!SoBihyN)oYs^7o9xz*kcnD6T`#9H{5W; zDm5JOgA)(lTe|nz?q^98R~Qm+nS0Aew|{g`*PiyewSm4!g_-mDd}rtS^8@mw{Jkgd zy)V3PDO!48>U|&F`9bNl)7fpHFL8Nd_KB%r>a7EBZ7)R|=(e<_?G(194Rl-D(gwOM iZD|ADmbNr6|Nj7l>K)K{(5*rM0000f_BSYol=4@@} z00aQMC-byzbhOtA#ZG1qrIn+D)0CaH2#~3?q~n6|AJH>YqhKpVQx{DTXm;Yr$-$HL z6-L7)CI-h7XtJWmqJBYIrY=qlD~XOBIA8E9vH#S1vO0A2^0PRk`XH}i7^wppJzbGU zlP?&(LYfk1KCJg$&%!dhWC-eA7XUVLgB7*=B`pl#G*DEOg{A|k9RTA!iiQm6P|fM! zB#*kr+K|qA023Sz(*b%UsEizp50Latlr95E%EJWbWzuT{3gH1}gO(Oc01Y;P8AH(O zC?GiRG|LYLV3bBp08{t~K!pd4mIc^~0IG-Y$I1cpIRW_A%I|~#U)TVg_w=k40neHM z9bjyP4IH3dw~SA+xz6 z>FKdkGJ@|BvEcKY!?G2ITltqEG8$4Q)ZJ(lE4K;inN-hs;v zHgZMD%@Y$V%gbMs-bovo59kG4*>st9=v_K|3lzOLIht=@yc@!89HIb!I^XsFP^FZ7 zI0Yr#VtO@6;i3uc`hsGV=G{GuW_@P-B~4t{MA_{41MX6q80i$IZn}@xR*Q42=Wyb4 ze1K;U#bNv&v6UNJ!W}C!VC#cA7Eb_x{TAoWF-By#VB4^TVXy05iA#k-IzX`Xy%bjf zz(n>gyUsv^L@zP`AX^y1{7j1Mu#=dz1ChKFVY(CT!i+y$`tG|fX>4g!t6*|BGp6cL zX~xK*XB5n49AlCcyd9dhk*O}2>|MIAFvVQ3&dibXI~iL;P~fHdknzl^C!=93V)bbg zk%_V*PN_Q;;c?^cQuRmUYtkq`;#1_(iq)agRixM#bAuI%dLaM$kw_naJM<#5Re>ul zq+U~O4E?1{bGZO%xO_3%2P+U)b`oJ>&Ih*_q+;>>MUW3wwpf!%;xfIQ9c#o$JntMh z*?ZnfKNn<0Nwpk&PE(Cu)kFI1el=W6%#r2rb1!(@5V;N%et0iwDsxIHMST^0wJ(b0 zROEMgaVAj&P~gHfyBKIv%avcyzsC9Yj@W{mD@tFHmG%>E5*`P(U$o3SfxEadGTaQ! z$*}jHKhgP!`%(U*lNRkdYef#PA}MWZ|D=_DJ(5rwD-}y$#B$#9+hv|*vSsRhBh)+# zN!KT*+KY@@0}qu*RE)vbYEXaM!G(qsC^WXv2o6_sU`vz2JN2fBkg zNfjpA0k!hFJlabYC}ZhWx|Mkvo7!aBHWeb}QI$63&N>oL0u3%>5Dng{yj7QZqFMOd zbg8w63eA$F!JC!Z9-}JKBZTiA{qvy-e^2I?%u9-vII+r#A|V+bB_6#7t%Edc38bY= z*V9~(8VZE*X~scd>@5B+(;^dD8Lvt+7x007WqL-sewAXCW|hKb8-MNg)4Z}axfX-- z5KO6FC58tK3N}e#ggl7$g!ar+)Te~1V!}tY?3MPVWJN8qUT>V9?que-n*`^pI6s~B zX@i`R2XI{KTsodTJyJl|M{Gd9i#UZ2CKm1Hb9EM_;OL#&)08oOD=AZI{@6TYA^cJE zh-k^Ue1beyyj{R zaed~74_hFcdN<)z>vNZji6ZtD*bUQq%Gj z=V`NAs#;b4C!4p=_8R*eE1F22t$ab8s%>;^3^2E`AhK!du6?_c+LjvdIw0Xv3<)D@ z0<((3kRs6ig&V%`ec{<`aPE#oK=)z#I){z^F!t~lo~1^-L8fnFCQ;tQLl2&9riYeH8#Yp8Aewvub8Pav7#M_@b52#vtCPalxXSIy(z2BI@WL`CRD zN+h~O>ywUfW$<~8Ov|{>$)3rk%g*N5aH$K`u_^H}i&wHg6rB`!&HGxShuzxX{kVRf z{yhg}av^r+T7D;o_PLAggQ&&4MYJV9qD+oHV;7$yaMxkPQ^E>%Tvp+9NtI|d!L+YZ z*v#dG@pSumUUZ45K3x=DHZ&X~{3Fp{WF9b6s_iQ>tNNyFJ!<9ix!cWC%DU1V&QOuu zs)C_1lOvo@nC(gB$So$^#ub+GDA`rIl3F#j(PqPD)!K8g8W>T3)$J75#6kHOso%aK zxf;QM4Yg6aY)!|I@iQ}0y$w*$`prKFiSd`-Xw3WP#k>g6nPEF5HEb#?nY- zJvIvc)wb$~LiM7qK2xYm1PCmV_Ytc_U&S^uJC3VYZR=&!2DZ`rs@jK`bPj}ezJ#&g zMAJoGi3r%7{=99huFqjG_tN|_N%;IFE$K*4Bdp> zo<&+0S)b+g6O_3VN(|vi&v?J;1*FkCo)k6|91o?l_p{}5w6o8RER0^OzZW0*v@z>@ zp)hp^E08MNE6{%Z)C!*7E4}PGVN=Hq(1z$$>Zp2eOKwYcZSw>B<{jU*mwwhK>ty)? z;F-fVpFP6sPviMQVl!3- zC%P)W8muKEypEDyOQ84A9n2(bo;A z?W?9^>1%H(WJMz(jwDxA1esHLJ32VI3ww*ve3vT>eZHyYprQKS1Y|EpBX!du zmAR~tvhH*jK&rOauMd>@bdCv_u^r9cC+E&5)u;P;N<4u=4OMoU~~6z z0-1ZWIl0sR5c0bmS)jY6o1F{D&e@6TMy|Pqvj<3whUTWDKR&>N9M^5g)VFyK# z!`s}2gNvP$;~$t*Re#Rr==g6r-9d7m(2@M6*}v`3UB|}-$e{&vclL0z1j=~=oj|nz zZV)cN?Suyh zmX>Usyu93OLV^~&Y(hf(R{VmNyn^Q3*58%4;)oZCWx+nkRd8eD$w;@^n*m#!4; z+@aRw^A{_F+S>QXqYZTZd+qN82fObP#Kqjr9eCrIVl=;d<{u&FkBD-^^WDLP%`I%V%U=%0~A2j~q_G4}zwx&Pf1zI&>)xy|2eZ^rw>aQ0}D&{Zk{vyZ9QrOzr&CwhrZs%xj1LSaV zvJvI@v+^%3Z?;py(7YC!W0`-?C!x~+rS5in{hR#M!Q*>-0d7v{hlA_p@84MeO1{l% z@N?F`l5eyA$*JpP2NLK0t+!j%f8n~>^9g^)SsQvh0ThR-cDw3!YYjVZpo6|FbRlwb zzsatJZj}1Yber;TISu~gX~fffub^U-$N9g~2*2b<|9=@1SL}~L{yC=qTa98hf5SxT_c0X` z%Y8>x3j2>S{Vy~UN{FVHg!Yph5mQ@%j!Ye@C`;W^mufHc0_C@{#&SPCj77C5w=ShC{F$WZ@g0$Dx-L1%Zqe#$`tXuah=#76`$1p7ep8=J22l;ub6 z_mQ_z6`|aKU=^ZqT*8ssG&_xuEUFL#D~VW0MAhu6JAS7PecWPB>vXc>z z4BYY%l)Mu>slV&JYcyhk{2OrA=u31}1a%BS?c>CflUBTQ-W1sJZt}nL(+>NEjk|t3 z3k<18sTP%tuBaG!)(*2B`P)obA(~A*!A(&251@PW{^e2e%l`&eW7i7Pqnng`S{^EIz3JC%kBpJ+27a}k7`#5;Q z1Fy*RxPh4+*@4obSXbn1k?%1=%?^tRZm?J`R@lZsxu55LH1I-loa<8&pgZ@VH-F>$ zBi4sMHBC9(jM}auCD$delO7vMvyG{on4FxNJ8;b(C~p2^;CFLZmWErMj7)Y}nHte} zu_OU^0Vsv|g~XC`GgDWy=i{FMlc-rd(OZV0_kUOk9N!n)nAvNNlflhT(P~IIjDxH7 zbq-{w$5{J$T!eAOF@MOehs6fTVuv6{NHk|J8Db8Fz8BN?B$ToaYrs{;djYi+qUiu7 znWGpey2)`W0sD`*(+Y~DP?WU3I|9@T8W<&o04`vKD-=lpGBv!Ql-PG~h1!l)B*L2A zQNPgRBl@7cer=n5{>HmYPWb~SIvjX~0O0_fqhULjI2Nx}rf zK#FG^IgA|Hj2&5w?DzR`nd2`E#qlQgwlP$OU~rIef;FfRxMJDA4+2JVm@!mEE6i>F z0q+z!A6Xus-WL{uKI>t@xeRp7-F>4o&kIsUBrWV>_+Y?7xx)9b1`T{FI$^ld?@JSQ z&Nd%ld?udpz;mtwy*)o~yo3#QH?%F|)KUj0x=7zl=8bEUg1p7ok`YToZR^_K&3Ly} zU6J;$x5j!i$y^VhE33BmW+$RJOw(jBOljr6|5VI~Zfg%^A!{uWsud^`^zK-kVX; zPN@rcX`)R)vsO+8^B9F7iYKY~dx#@sUn7xY7se2-zxy$HXW1qY6QGhDzXKG2a(`ZS z%nh5twQBI{b_@`?gIMdvjtv%sgkyseZ=gUUKa8g#Dnb-{jEygAz(ZO-0^`fF#wyE? ztBIA8kBkeUiuILBtDr&)W!-!)95!PHA{{bG?Pj>wLo(MbJKR1q_lCS&1)hQcL=_!g z=zgF%iD=l-911nRLTQU_%+%+*v9IkKKQ(L@r3QT?qUj6Y zh^7jo!l40ZPz8fEtMEJ=ZLs;g6v^`8Ejf&oNpdeMj(|=$)O}J@ zia68aQ3OAe6nf)$=!Q`Z&C)Xwh+WZj6J%twwlfJ7TQ5OpB+@P(S(tf1a%Ca(NKh;3 zJ&g`8(Yd%8-wauTG&f2mVp=F;=mfkPQMl#x)Xb&h3tXrU_}_z3vJZny2oGjFNxa6( z?E5tg^a2{@o&xU;m~oInyGlK9z9lkGo7C>%t!Z5+vB4i9cziR8=r#e0?{pwXfBH1#CWo* zW$22+CAjL%z`d>!G@S4KV$gQ4U-;k&hfrQ=&@L?ifrJ@A9j*b8gfMa|>km~KA7g<$ z*75AH0exSw5U2pnqW#u(_eNsPPJ@KBKRiGVy@@~1tr*c02GL+SOr`DlalV2LW zL?g0II2@3yQ2%hczGt`;ZqeL1sr*j#jasibLqDYMwTH}J`j!mZx~U(EgfA}!>?Ll8 zBZniyBWr}XH& z4y;Ho5hf22ja@M{FOLKy@!t7HHoA{@5gRm4(Ln+sg&3M&ZEC3FSgl@SSeI$_fE%*Q zU@T7sp>Z4s$fM>QcWmkI)ne5~R4d5ZA4qFTo%=ZZ97KzTrs5#_NHt2Mh{xd>*Z^d%Q z)i##=TSus{rv01IprcAegqHS6w-YIs-3i=&%QIUoS&i5x!;sXJh-mgalyzYV@I#hi zOxK6Inoso}fZ$X_rY@!nR~w?dBt$>>&0ko6CL9q+21v*}9~Dy?uUR!T8`w6mkSr*<<{Xd7A0RJe<~M9y8{fLXoxco)Z#rT^kNC7U?w|ny=*} zV1w-e@M5B?F=>)lC|GCDUfsd-{j!ZnFkjtVLK;jZ2}F5PFGBn1Y1C5=+V6%!_!@sD zmuHo^Y@7^Y2l5#l=^d_85L2FoEzIN5N>aklGJoM;Tmsp2^74C5gf83%XAAHF5OkDB zZMZ$tZ)rIfk0ROqVbLza7X7Q(4+Vxc^Iwn$h<@>M5#@Tl#XnE}swaz|*J@ZZhNeN9 z-lMQ)lgD}xjc;6I6{&!1;6lR)lK_}awe7Th=FdJAc3&EMIYC+$kBTT4moF>)brnab zKq+3-oyQ>SmWGF8rS#5WokpoBo&X>@@dA0@S4FXfOc(qtgO3$qYgLM+NtJ}ret&C#oWNIa&ea;M&_&U^YFXy$% z86_k>mqPnS?Fc+A)kwrUak8e1P}fr(0`wO7z)Q_~yJS)}YrL?fZV0#ep> zS2(%!toA>x?ICk{LYZZmnZ5iiJYAjDitgdD!&d?SR)-0JhwR^)n~npeY~JF*NzF=r z;E8=erIqFm_U?9j2r{+`P-Z|fOcXQu3>s{Xb0Elwm5<6+1-M|wcSL9ULT57BAb21> zdmKx%f;XGHj8}6+(v!W0tzBl&<*^$fpdw*ktYvPtI`6j` zzMM8_B0+`$1Bmae6LxQ%Aaj=pDmj_IxJyjpNCMMS$nk_$nhwY1nDi#35k{j^Q05^4 zu2*(Hv$n^z4~OK7^?UCc+<}5s3ZipKq&-6Bt|DfQ!xK8sqz;AOH&BE`kNb&DqJB>n zBxBqFU_qPWq32t(QSO9uq0uyu*6nvZkif0-7F6#d8pg1qkA=a$_)^w{CCxPH#7&D# zFc?;G2i#PrRsG68c^BygG)=={}=_ID#b(2K#u8rq!c9^5@Q z-m4UWp~^y*m8n4+z<%!H$35%SBgeQ=4P*&%4}6$Osjz`#Rn|{$R9!aaZIKq*%}9S% zApdO!37k!i+Iv;<&$>d}!P{sb$lEBUz-RC7H=8qd6WDa{0lvf9fDXF& zc$Y5sez4|cKJ%%uPhO_RW5yrI5*6XHp$~n2vm!z2bQMXp5#@CCkeyht6~M;*C1|-i zx1_NWgIvE;gZz|OT^U}g%#}e4mm*5saBIMO8sPA*0}km!$F|n=vC81=2{&I@qja(m zB3>nR1G7v~vb+xD@CL2ax;=DNLP6g9Bgb)MJ!59`8k!T?qZTg~wP2SIiNzq2sH5^I zpAh7dvuN;yCSB)e9uHpkI;GRP3Z=qn0!k=z`N3mX$8C3pdUEET<@-r;esYJBNnWmPXxTJvL!u|- zQRrx-JC#PcRuThV==(xSvEvQC+1Qrt#+PcT+UXP(U#{9qg480tp8M}7XcmQTc@MJ5 z?Os1olItPn+-cjqS_an`o1W?=IvL(9TPoTyutkqQ`&Vy$JjrW`%pQJ6vyJvi^0}gd z$-R5~>s?`=_W3G0MvCl8;=?+GAmN3$P%YcVRDw9m z!3n!t_~zCKuJ%WI2q-jtG(59-^In#^>~=2=SP!;anjMK+{JUZqjx)hY6v)pLLS_A#Ze< zG`kb$OFZsWC42yL-M7W9ERb!Ynrqiw)9HstURR6m_KoWIV-nxh4Es9` z9lzbZSP6*3)Z~Wa=E{j-ZXSif(;3V0$LJuD*e0iFWP@%cO9=_A`nM?#aBZlF-&<6m zVMN@dbumnu;BrQe_N6G`=3LM$#}nL3_XeAnjcbF>-)6A*#dbg1*gTPH5&!IqJ;z7&-o8^g(Mer#VP)U97BKAvx~sQ$l93^Dlu*F&<_9+39uSC4~C8f_X?B?0ZPjy-a6&kq|DwC$-gV)Ciw0}^OOOZ@x5 z$e|D3d1>*H`7GW87Ct=QF^LWkT?#)?U_ZbL% zjyGf76KiLP_;ZWTFox0Rk>rw8IOx*Q0 zlG4-$(a&xTO`2tQ-5FAB{lEK%P7E&d*xWv!`e;tsr`R&^fLPln!ppst;h{DcT7X2` z{={Wiek#}b@>b!>@Y%ch>i6=#k;~$}DA2({G8$}IJ!h60=TOXstKtFP4mxSn*{7Cz z^KZudVO7JS2au1@Bx7P})*j8nGEly+@|3N|I*@(roRA`0i;w{}@$q~MBDsBs7E(Q$ zEM7U2hIFz+$X7LDZ5VY2(dtYS~GE|-t`5LXSuhEHf$D;rlL*EMro*3W1 zoY~$^9_Z>@e6!BV+aw9>E*nVU;A;wkwQ;Ap=^I14xOn9CVXbMVf5NCkqL!=mQMoZV zU_IrY8UewfhO5AsKR`tn@_>*YTh)veX;=5d={?1lQkya#uFyV!wL8`aGg^;Z($8Me zs5jH5bPJ@-pa^yr7b0^!aW2n@gV7aMl8R{zETFXO{mvp%Hl`pbH7m*xMEjtDB0V4gpU#)Pj9LF|*JTKk zG4SA&<@MnN7OOZXikQEeIBVVnnv5YxKgL2+13n9H;Nm({af4@Kq#zDna_NIahjPFj zq|iX}n|I3k^S3I6APCeVvGh@t~wnp!E z>A&u(yc5hh3%(w$Zxc2z=CMGK65hn?UlT6*ikl86m)tB}{Haq)7|h222!9(Mis2Y> zV>Qk9i=kQC;_Tce#R`w-Xof1!s|*3X##cvKC^gK6W^Z>3_h+={^uLLiU+zlPC%&Av z?3>mf;RlLD%lmciMC>ceXe(%@(DZG+mCRBks@Z@KenYS6mTqpg!mTa`riXyYRorRMdP z{rm(kkCBHd;@}&hPhIu{!iRWd6`x7AYyxQd%6P)oG?Qrh$hn9Erp=X;N_d2VKchWb z9?do96@w;@#pb3Z1=~8P7x2~Au4dN z4VoLXlfxLE*0_QNKMU#!jS6yHa02+ze4*xmy1ytAXv<_GPA0}{;LkHY)>E8+PyO`D74_ldV^ZiVE%r7{}126Z|ag-D_}%h(sIjd56!e7Wh=)OcBQ_ac$?^8Sr6~<$W1_NOtNv zT*Vj{FB;U|+VpuDbGMP`!VL#9UTxHQjGNknRB1~6*CS6(9M2H|E~p(SB%~D#+PZ8q zOma24RrXE(u9yzyUb-hITX}&Z*7t;lNoT99n;2$?AhDW*J}0Oh3zcHm6QNXnWU~BI zkA^%8DQ?u1tCFgqnzH}wL+b1@?npS?zsrMz4t}U`NwBaqjEAZ5HChXnJXl3D2G*s2 z=b`U8oK=~V!B6(>*n0Nboj_@zW<4c1YhY>f&sL(KC zH~67w;nW;MNzQ2Kq4Q|Y42Ds--7pdB)ak<4k*7k`f1D_n@$0LXe>iNs6DK@Kp68R& zxmq3{IaM~H#?6tZkd$rDFlB9Tzlobmx!$c(eRvT|au*5 zz#yM*t4W5j>EP0=>8r9V?2>(-cjaKQy-)QMTf>3J4NnUKeV+_AHr;$q`WXtQ>w$v- zCo>F#HmlTW#*oI;zCp-(OPw7q1lP@62L79)K#h5P+r?yJS)ww09Y%W=F8b-!Nc zHXk^M|K_GhfXN9(lgaUvMEg5FgzZQwWG%o!yqc-kK2DaDIs+1$6(WI0Ps-6r_0?C) zs@Zefy^R)YjTk~kgX=)Bt{Jlpb8t_yr!{EIYF7F1lTc&c)EimsCwBbYnd1d@mUu^! zRh4JohJ&sup5~K!>;oVd&@o@^XS}Jdw8895N`J_k%%A8rt~s(~8cH-Q7Y1HtWIMiI z9iD1xcbi`)YBXdcY`6pgXmBv%HtbI*1zV3E!*MuInQ9t7te+gQg_^?CJ7cz?{Z+#a zACnG79|FUrU*4}~G&y(jy7Z9El%qYrKRvR43gM$edqDdDjvWwEF~sk1wFzlhNUR(x z$ZW`pEiQLI&pGouR(<-Y@s(qY`*gWKAIisY(6M^Z*{EeN7>~zqz9S@x(swQF&c*zC z(u?=aRWEyb{We|B3FA^I>q_GyaXGBqh3Hb@gKa}ADh-!$)Z`4ig)c}T6QS=HM&B0*s@St@g4nehi;A!z$1mUDO?zvYJrJlDVh_@##d!2 zFHcBkJlvldg*xolcpL2=7r+q-+JxKZqJ<~-50TSF+(T&HEWPveJc)nySVoE;oL~?) z@L5$mo)W#~X1C*#}r@ zmZ#iaEXPWwST^oH^B0GCPbc1U0WatC_kI18H%Ci+j8W8|8IZuujIJdynYo2cxOoUx zv^Ymp8^N*Ug?G%pc0iBp815n7vl$`V@+}#4*vn$QLU~uMlAWTwyE$_#k!vT(D=j-e z=^}agggiHbx0DxjnAL_g`|PlGZq0$t-ORM1+u2K3L8eCAY2k7E;z9Kz2SoQHpDCZ! zEE{^_$zftY=)>&!>QwTZZ_C zz1?7RfAw&?meek?HHrQjS9xMU_5^006hgWH3&~Bs$D%3C$bcW6j7mOt8CFHuwj`x6 zMBr|=R=+X$lvdsp4IjcQ#b9e$i!%#zwF#aA@65C?w2uUwA1BxbeKt^T$bQxqq|$6) zB9^Z!Z2N^t z^PW~oCsiygsk@Za5uxeZb3~qF4Pr^+Z#`&3Fcn2>XF6Yxydeh-$Al5=KF|Pg%eW!Gx;3n7+0(w4q8N2!NH)SnW0Kz=5zgHHB=huYa?u;$@B^YL(Wse}AV0OX?FFv$=eaLDsx zn|8|G>Gsp(sCTaRscHq4XZ9zK_IYlw7g6fGi45|ze$=kGtdOiOmU}71DuIHm8 zsf@1=5`xP~+>t}MHg}xYx6nJH7u!lbk6((z4HBeFwQiJLBIv4b(om=PFfqOvUjY|@ zbnJM(-f8?M)9s_Gl#MG#0CcJ)mpV{WUVo@Tfq2tM0)k<2f}?e?Lk7Z?7M3`6PG^C8 zJ2MRr;ZwUI9L8cRb=PerzMLYpUd`J@2mFhB-t_I=qbyD0-surY4UunNjK`m`1@$vG zy!7rOlQQNGa=Mef-`neXH>IK*!$T|}WbWEg0Pu?ZeqFDw{@E#ypCAOfT)@mXB{|tN z6O&@V0GPA;zI+y@mh3~92)?U#uY0v_V{>+r3z^OM14;0)iQp^@&R0UyE4h={CcOUe zUW6>a4?L)}yVf^t>()vb0XsNSGzHY2 z9FKmn|2Zk)!s_~Jl&7dU`|_ZKqv&yRgT~`D6WBZ$w`R=;GMH$~4b53I#eV&H()}wG zaLN6-vow|;MzOMuAOC_0?+iZ-UAX;heZ+KpMJJ|ICehxNk#J= z%WIA;eTiApkf(*)K|Ka0#>N3N9-mdMjEou`m^e71j!mWKETPl12tF!#Xkprqn$d*g zEPxyuAHISc@^+4IRKpGj8zvaz@=J}z#_IFLH+TI^@;Zn5JsG%8-3M&3gke>}su6up zENDo-et_n*5RDkO9+ZX0ED@2LX0;z%)v@U^L|^YVF<@Okw)=(>*!|UXACW|?fUUx+6L6DADb7H5? z*wez`eJuZZxP%1AqxiveHov*^S)|Symw9a)wn?t}ptUtdIq?K*XVs;IRAGS41(sBD zT!zkdQGT20^VpC`?s7(JU|>ycJduc2Mf;n>?dz-ePJ{CXtfXRA(?}(qEorgbltfmE z2AS^iQBkWNh+1!Az;5NIptaqJocJT&+E;HmL-KgPWe^8oteXu^peQitCR98lg_)N` zMvxX9K}Irz-b|q-AG?})laTA*zPF7fxLKRO;6*EC_+l|JU@A~}!T=Re=(?XzRO`20 z^X8?ZC44szLgO65W*|cTpu!ts*}Xy2tNk!6@zbq_;e3()5Nv3MoPNI3q8{%Qw(SKc zV#&g!`+7IRo`eDNqQdCKA||sU-d03*_mdOk`a(*Dht&rWvSv{)tx~B(UN~s*5k`qn zuEcij^N4z-Dq3q2b7a&2s0OUnzKPb~!2y9!W}Vs{QlA%-BQq8$euZ4)T~DFuw>}J{ zMwZ`&O)b)h*8RvzXg=a0Yt!6uB3Sn%Gyv&+BQEp=0fq@Lj{gmOI4%uzA=HAdPyL0d zuRGKOfUgjwg8@b1*lLo4rDrFiDRC!Xs`#}u1ybu2QaT-2P!KUYmwCh@>LWkB+O8QN zvh;k+^x?oJnPOg_FP+l3$!X@b$0o7mgad!Zper~oHkRLM`g9~I@Nm+;j^H(Ar12ei zwt!Uwgk7Jj*BR$Z!~8S^gmwN;fw(w_g?ABsO@pwJOLgwb0+_LB@ZXDJB?U)lF7mEOnP6&rt^W{s8xYi+e-V47xrLYnj=Ea|!+ zmQgPdv&=(hcpYb!>pg*?rgkwc%@JT@B-{P3zHzlv)f_BJ?e$SrLZVHpXlMgGzDh9< z->(qavmuczZhU5Q4#FA1`(sH%V0{(6Ux zSRrZW`tG3w(qKDcPpqb1MQv^S_0{?C74Im<)UJ?MJ|n>22U7aRxkBRP;H=DO3tU;j zgx4xS-PeUzieN*T^Kz9ZjG^EVy1))Z3jyEdMZ&p!^#z3X;fVp`{KX*0H`GEZ{UBRF5zjh&chstdxWZtH;Hpx?GSwJGnz0csLy~C-!Uu zO++CkuhIaNT4%LlFb?<|AV?0<{(mp_pKU0Y2hvFsz6zCKH;vC$);)5+`$k9}@7&`gb1 zE{2J@Bt#&s)GKEey-CCDa;z2yT29!Wzu zP!j?GmZUm$Z{jsvXOGaJ2RF5{d<_QGExzqG4U4&VM85Wx>3U6)mkfLHdT%7OpB+lF zVE2UJfJ4wT5XFX$h#~JO)$%XXBRqy;v&kcU5(--kn<$*&U9quul+z>7=)osf1qpeRa;O zc#Aelukh#UQ#fUg1Jm79Mmyq+TwW#$d<$wX-qIKU)m&iOcqon$;9b8S$&lwZ) zvjxevW4#<$;=kfbMu>1R_D~{rPR3VL>o7xjZWBu9;Vhh*9e{C+$#6vGumL)2fo+Z}r8ZLRX8H?u7W}{}KRw4=^ z;Bs-|xR*fcDS@Us>k39gBITOLPWlppk*P%=VZ%(Xhqv~udGTXM(4=DBz$A70Y7{F( z26OvL%mwNqVkK7i9}QxC8!ywCgrpG)(>@$jW_2;3>kx3?O9o=g$2(!erX;ShnKioR zC2GnG(yCBsl|EHs#;TZk6r!p#NEe25heGs1ucW1iGojNSK&9j2yD{`BMgNI$&INg4 zHGTURqvMjdgGmY$@|tXX4Batwp5TXF?qVyZGXd*Srn46hynOD9_)RN(G9XQFd-=re zZ8-;GD&40m!?iEkZ(&qu@aq$xx^u;cz&lpUQ1Ftg#%|Y!hIK$fI5DL=GlUuwsR6kFY>k7vUk0l^EhuYNQ>z*3^NoUe z5S#A~msO-7)naVk6@1JYrvaPmriSuCXMU|6$=P$vp>lHH$Ef>k9W=3CVdOEPAe>!* z1=?Or#S-r;UvyUEzgo2_k<$5me#U?5M;rw327_j&Zv zxa3~rRdKv<4^UcBbA2QBb(Nf^M2WM;+bDP-L#PTOb5`ycD^7rEBOLSsiGD>3FBvSc zqixw&%Dj8hF^)9~dXEQoW#GUZ`s}lNd+ItDpPM#5)g(T|)(ioBLHMdqebPkq`g&Vg zr8Cr%QJw=phnfpR5Wb;Gw6|w3be1_};95)U#?f98H0%sbCwQfK=Rq_RyC~GT8uO$H z=+8j8g36NQmOTumX3ucL9>WD^FHPL-Ur`jtiqE6I7XqNm#p|+raWpO_(fVoJ+i~2Z zpdqa``;3WY;~}XtBeU_S=VDf08mnv#KB``z_vN~<$x2~7mdC_{lc~_{ z!5u@YFRs_u?r(P0rsy^=;&P%DA18w6!z2>L&bZ536u5lN8Gl^EvexA{dDpAnPbaJ< zuGg?u)=;W7V@(Aw2sckID74~C##5FLpzc7SPQyc$rE11M%%4}g!__kEg}WYYfMh)n zD75lsmva*;UPgAo1Su|YV+3PYMkGp*iC@K6t@p$Z71XEK=DYPKSgVg#deJQf7}sz_ zh4wzx5CILmYE3BBCF`vd=RESd^e64XD=1fblogJQYqK>?{`#N_&Dm`xpmf`Wkk1N{ zx;I3F@u=?1cI6t;$63B;DX9>jz61JyTQj`%A1`^-dF6bWj4VO&TFkA7FV{81;t(UF zNJBBLADQ}Ua84pweW+B$M+SO#_c)`L%fR1;T(51&uw8hzIm0~xde-E9_2^9cBfVNM zaxS+SjSB&ypEtMCG?23s_OL#r5Ahj(xLr0x>uyHG|Hsrh21oXVTfc*eCbluLZD(TJ zoY=N)PHY%;h4_(#g?7ge^bDs5EYwJF`xKR`Lt!(cMLnD1` zD0zzws(no&l$V5OF1Qvy9w&va@d`m;2xy$&;VV@Tdj)NzjutZ3K+#Xju#ayN9h^p1IyxYP_OWTw*F;;QJDBsMJ z0U?8o3P+J81Py>{>Bl|$o>b!EIhc}nP3QT2nz}TAJ(J&6u2q#?m*`Xw6&^n-bnRv0 zpn)P}Ia|%n|2K&3mRC$vfG8~vH-K0413{jlz&GkIK?52+Z7DuWjJA=Az~Yko$M;(Q zlUG@P0gk-a!nzfUUj9XPkx0a%VygSodjW&TjLb)>`>r;z44Y!^4pFaS`>Rqk;VkR1twG%XR?p zBxfc&r-;6K{*cu*HEdEi5uHO*LZYAq08~iQ_E*SE=0v5)JDvz$7dr22$7Uah=sNcG zXAJXpE9g#r$Z37aX%~DbaIIoPw0CD}Wvv{nYH(s0s*2WkD(gEdhsTb1@XA-7x#RGX zi$`LVN@!oTSFr5SIR-jO1d?0REC61=9i49uwiv&r-gpHB@_|`@kiyTM4`lk=m55;T zP1}{AiU^OvZ-*?M&E&#Or5dEO)^$4sk;2(@Rh`7ey5fYm7$j6D{*rf|R znHVVffqgz;NEFqp;mnsdc91m5=+phM;{U|hS!1#%F(D>X<|i)$)!I9HVGj;q&y%76 zKiLWrao&IQTj`3q{y*3t*+qw4~n7anL#`$)kOp7j*M=>v55!#Ek%#w!2@;$Ono6Zi&&`1omomR ze6o6PA{p(3*cbLWQ15M`Jv-?U*+ntq*n&!cYR--9Whi$*6KpcNe-!SV97HT5G;(Zj z8xjDp>TMZ5HQ0yaEmE3ZKB*cv1N)uVo8W8c{*1%N`Jd?Nl6*Wp-38KdT{(R+5EV|o zyIkr946{tPH@2J{Cgy>j;|H`22xtzqBC3zFvnAFL&XfQmRM6nb$Rb=tAg2C1yy`zS zNpVdU5gWo^j8Hs9=805jjjYhq8}BaecXJ_%MJ1qHn%}Qx;h~9XVaXYkfa%smDol;U zL?uQ?#My~)j)m_QLQis20WIBmk51dhaPOviIqU_*h-OgJRe14Qxu=4;yq%#1w$O@3_{V(&AAn{EK&wDy?{)Kz~E4dT6?<;h(`*Vl(7|KLVE}o=bp$e+1;q{c(OEzAjYXChw{#tQ8)XO za$GYAWnB;4&oCRD`5xj!0VM>3A)G8c?WhD!!zBHUe2N=d9`@Vz{_Zgy%doD|=0MXO z8D5J;M{MfDomdQ^G{JJ3_hr&7$T!uuauSC@VZYM7FX?9BUfRq%hdbu-BG)WmF<(@L zXtwq{($L^lRO6H?7XzeSxs0)(!yzi=%q`uwK+E^^M&?167L2qkVoJU?p}Mmm;iLu|gDt~{{HG>DWscqkCA&8Rh)1|yNiHTe(iXt5 zR1jO8TGpdEoz%}6EMxU_p@_F}$$h2A!Bjd=WO<#;>V^-E8Y<%1~&&MDa$URl1h|vU~~3~zT^?OG_Bj$lJVP= z&7Yu6qAckX-5QFeCN#1j$Yf!j&0zxaKai`e zL^M3?Feg@nqvu8NTh2>0JCqj^-E#lRR;Pb4HiiqP^USWvRw9T|Evp>Oqx?Hp0gV>p zkcjCdfFeTWFqR=6A=EY&2_*|rD?-+13}N_yoJDk~`|en3w%eWIaaAt!O^NZeCJ9J$ zN}mLzIGqSGAy!2K((EZ<72*y94MgLxw7Mj%~Hk+BRPMtVRg1CD-&ZI-W3>RTT0~6tL0DGWf zaU_)Kdc7h9K=fhHiC4f(r1~H3-`!OiNTBh?o5#OEdWSk{)i`1xdsM%LE7A8az!SRs zw}lk3poiUZNA>U@(FsSsQ;(9m=LaE2?Hr>wXJFwDN2~pfC9`%z1D2mW*HLzVg1<`x>4|x}BrNhj zZm{hTWo+CwMoDE`$)urvKEfXqy!BXrxofRWDvwfALcL)2AOTc6p-T{PpGqc$CR%o# z4ZbQj6srtz%3#Ss+LeT(ga{K=T~FUM1!mF|?oB&e#Bw16JoUEGK}3>%xwH$H|L+-t z?)|vD(`w_?Z}DBic1pqJo4PAr<{R~sC3-9i;usa;N)N}ZGI~EPmoX^1=2c!n7~NLu zys4Rdia4~6c$AX!O%#dytzwH(`gPNcGx>?45E=kk1dNLkl8Zb9tSlSjFv%*L)sV&^ zw#=9h18ha~-0zoLptTTGiMR_S--g zTnrdM5nL5=uK_M1HHOn?e-Sk7pn~Hw0Fm81EkDM1^=V2!*$mlqDd`_(dDDOJl z13|@tpQ|rEJip;4b1tafu9H5#TD-#ba@DVUWb!_CSC_s#Uvj^eeMgay=rvZFk}S-W z3lc%=vz*lvPx)h*>&S#^hf0QWLBCJJo~p65SM)CN0M@!*O*h)Eava}@VknS6%)-k&3Q|=_ko~!_{#J06-2JO zWJ*(jlUgHYM5j?gNPM5U&xQyb9b%FbPRhk?TY@pdSN#VGWCyb6M%}1Fl0npaMGUe+ zSL8F$Fw>l1gJ24f(JKb9M-1Pql}{!{AuKER&i6c=2mKXMDuld`a1>Ny!kRs|d8qlh zxg{?Oa&ddr{wvv1@_v746<`SlNo7@h5NmdCz3%gbdGe&@D}VP5*!~Sq$Ro`;r@Ngv zgA2j!JODzFrD4AP0AK`4izY-82U3A#GhvD#S&(9bN`kuY%r`%{`gHyIJ0Whzl}ib- zLQ%@Pt#UB~`hQah4oR@`&F@|0y;U4PX5HUqS=uR|C);s~zUIer3_A87R_=r|O5UgH z{3>U0zg}~jL7;OMVjhWjcXZg{28%chG%)N}y4ge`2mTr)6S|$?KKVf(><&I;tg|>a zL@n4%fOQ|0!%*OjYI4~R(S-Ivu^N43R}Z;3YfCVId>Rv#F5O(F%m12^sl+9e3S*oP zwVT>+=(h@fD^a%FxU@W7;hh=09GQBX={W&>EHBO&^d8ab>@%aVCq>0SE$=ztsnbQ7hE)&_YH|1S$7ADdq%5|LlGs`evIsfsoytt%NaX`yj=B;ml2L(RY{1ZhdT(HW1pprV z8<3kRH|{6R5G;u}Ub@~uL?t=^F#n#gTE_G%y=VJk2%7>@m?Ch?yKbdPnwUbV$%<}e z;i*RT6ejbVXYc?ON?;XM1S+{|dGCRBZYif+4Tjw0@Q;{E)CHvn*yKRc(KrI z;2?OkmER)XyX#h8u56M-6D+2-^)pFP!%VCSi2(esd` zTXgaJ?kOeb#|vWYZ`idRn;L4JcXRkFUNkdJgpv%zSKr}&(o zbK|d5aH|d7P=7mD>>F=3J5~|rdkN&G=wI{#;N+LK&Q-)98zE|2KNu; z7%9DqW=nzk0+z3j{To6k9ThWAvaITKM&_l@h<3v-9$QOoKMuDWkYS_dL0%xZ!WiSZ z_S>*D(^Akmbzp0G{THs?F`FK3%g8f0MOum!FpJhh0HT;A8I|n<5m_8ZXCl?-q zW=85*2~rr?fi_p!z-Y?4@L_I7L59!5ZDC9K(0mn5t}jRSxJ!%Q;4pBUfQk{jSmOS% zzOTbJc?c=IX!hz0EEoro=t~rhXguX@-z&F}4p$qoq&O063@gF6n*SrwvqM^-3-*lC z`_e~_7Hz&BBE`_Ev1lT0wem*Hz7+q_ZSTjz`*2(HPy^t3rC}Z91OF7@lz{K)ViWe5 z_gAWtX6GrFB*@*$2K}Uzg!^BcY+B9(Jod{=^U;+lRnEdxhJfykV*Zm9|CtRk7vEp6Gy4s+yY_;VoJi`P z#*6$$46weF{bYL|zp=)l%kO&+=95(P=k$BJ!E?>B66MN3xI1a#$^S|+sC=df`zEv^ zgs|_0`gGvYcZx?2DS?e~OgNvRWB0OPJZun{<%MdUTZ?vV72%i8aD3N zUC8x}-2(%M92+pF9~~xw8G%ipUa0;Se>64&A5D2`n05lEs5eTHDcvDnqbCr90FaIQiE-$PKPVbH-{EDD}6HV1*E zQYZlkrLPE&2iBH*G!^x_M_XCkJ#zdW#7no~$5l5za2JgZlC<<*+(`L&XF~-nBh)w( zIN|?IL9wV_hrH$(uuF+CHV<&$bS$tG~YIG2a3L^P`u`G~2URl+YRQ?)cwKFO#=$3`zr{g=Q& z-p6hHQ$;2NY7~a7AD;__Y+47zDDkk4lzOI-M^Ogxt$r7REdYQc!zF_k^s8xtF!?>l zSl5*)X~DCpc@Z)wPe5T!h!`!x_+Qhm(c4!4<5#HDnb6?ULGEI%V{rm>Qb2Oh&|Zik z4gdZRtfKxqQMtvGCqB@=j1Dl#@icpS0CpH38AOi#xiq@A$-ErmOY83l-+5RYzKP$| za<}>MOLb8TxH&x6GyDC;_eoabL{yb}Cg3|H7Za539teY0FCpD1i4mp&uehE*hm=xq z5ueTwVnLRIZuk_*wH!ke7MO+?3Y;!r_L3e2F)`($iH_~-UB|;>dAHCTKKXe7f*y$S z1jQ!FcR5pyk0w=5|0j3Fcn0L8if*yXaw?vMnc4nw00-^TGi=z6|HwMa@YHqzcXZI- zhVx4U;QaABwF}fRd`l@-(_~4`k%9e5?^FOP!E8~M;Yn|NqmQ#?nGrZn={?k&Rvt_t zqWlzU$2IL!!p>+SAOyaGfjC4_gsK1>8LS*eluVTZ^adA(Qj&nofMG##`I+~f=ZB~fpp>eH&qDUbsN(y#4^*^V5@R8o}p9EcB zWDejV$RYtSKQ}0o;i+d-1Yw*wC}y4&Hr~Z<`i#=4}{15nBWSrCGkry;Ea#Sxe_tC#?Zp%^cGp)O&gBMR4sSD_MW9B zM0rsVvmLklaKNClA@=Z_3VxL9LTraP3+(3}@pJ=Kw8_p~wA3ccGjmyEEpdo3>B;w- z*-&8SL;>JrQl{cmU_YDy@@yj1$nsQ0$qvere}LQ$H0W-b&Q3HL7=QrcY5S*-e zvXni3z^&3VCRZQ1$>qcP=Yhi5SS7e`63hG0BmiH%oGQ5I`svrr2G~E#1Kb}*%f?COGWt+pEV4R=3}##M}QAO5Mx}*m8FW(l;_}ayBn8rdTu`- z9Vs`n8XP_sd4C;$wsU@rgVC{A1T!K$7iC{y!Wc_yRrL=E*LGbBC?4uO2zD$K*Pv4E zWRs9F8fdA>tlJZK6nbra461_|OFA)f0Id5q2|rB`G4hYx#iF02cvL?VXWIXDRI=&8t~iEolV<3Q*S*ku&t+to1zQ%-oWdBHA8GM`stGZweQ~J-GhYVW$yYcvNS>Ljm|J`VTZW^T5l0dKZP+b!U$O5h zx@&}Gk2MFb_b<%PEP8(vzH;6eCpMp^k1dV6M|_X5w7ie}fmMfn0O;c~U(gZQvubmD zY$25r4<1dC3NWtDpIA@v{RUD*LQeK zcH^>_{OVSd*{DO9?>ya=9t$Rt=3{8T#!8C2C>$_TtA*O;ejQOFn$KlOxm$^zDuVy4 zzYB>FlIRd~Y&rfm&~TvU-gAMOHa9be_54v3PsFqAIHYFzu;G5BCWFN(T39dmc`-`B zn{_nwlDxw`oqRWev?M7nwcpMm^X8CuS31=pU}4QEEDiw#y9MN5g;&YczUmz;Z7zOh zBuCY&*aKwcnAsOLo^pbEe^F7w2I+SFYT8cw^~r8etK~gqV?SY5mrl*BZG!)VX=#9% z+OcvPR)UC6OVaSPPJSfEZrZ33^QG-@*!%LX!Fp7#%(bTHC7q7>VzbnBw~?BZ8CTsg zl7EcuMP^$UtlIn6HAyEbxjZghr_W9$iPl4uV;tHv8myR)L~Ul1P&twOm-?KIv{f@M zTo!?Z2{cpc0bMn9w6pL~!Q?p+aZ*}|v`3Fb!w|K*Ho<9ajy4Cs-2gVu$M1q|dJ*|f zk?@VepO(4P^j^Y3v~_KNQXa1!uIAOiMK#w$JpDl_a^99 z+yd-1y*qeA3{O^dKy;(aRA6zAlSaQaww7ZhKre)wkfy&Kd`&`XyZZC6OyXNAsQK+! z%C2_#9d_%&;QZso)2DTWP9X0)IJzm7Q)2W?L2}_@C1BGtHu9XekWM-RECg^Y z1YSD1*XnIYgDKYuVh?#DVs5PDxZ3FA&Az6m%yxi6A+6lCI;jS*C&yGWY5|Iu;$IlO ziFsU!-?#g*K`ky|A?mm7q{)^0M`##~!+b$Ea}1J@sR8d6*U@GVk>MID?Oe6n1=gM zIkQTgKJHwf6w*5 z_NNGUi}BLFKIBNn*NB6kH(Ut(2P~kBB85Q+hv$|ED}c;(Ra9)$nH?HX0S^Xh@zUbc|p&qzwYAy~^gc^=))`y79>%uFFEig9ASUgmY- z-@1I6v7Im$uJ*|)zWY~2?UyWEz`=2e3KXW`mP z{ugp{U+(F&;Ef^Xd0Y^l>vdX@DAHc_-|NiY|7|UmUgtj#$XJ8V<|CS?XLijpJ_cGk z(-@X=1t&NFk3sJ~5Xsj=r;96Rns8hry`*VQdZFtE%BXLoPqf5Ik};{dtXSI6sRlC< z(mGlZHbyH#ITcp$F9Qm@t5i>`ZeFXC$4Y%raJgek4*Ev6p#JyKJZ_DH^aO~_G$P#+ znahQCnfbPadz_3_(zM|UUH2Dn84-x?n(p6db7lNxCZhEvD#9|~wIY=P9QSYF3B@tY zB4PTdEI6q^lMD5;6Hb$?=HiiFvxA1DA9+*}epjQzxtpvk@kQfjG>JOnwRtA>Jb zpBv;_f;z7#$43b>#8Y9Lv-jDWu@V;-MCY$I8VnqGW}__R)q?@?&Z$XVnevue{{<=? z+x#1^dzFy6xotmB0%bnLM9gT)KVlE%=2v8i;!>-r_1>2-67YFAR8y{iym2#YYj2^9 zKEmkX@ex4Q(=jPAT=Sooh2$Rcd17?IYmkB#=qr1Z)5y;S;m=hc$I5*pg@K5QUJWE6uU>J-HQc6%$j zW6rvFY{xJ1r%*#{eQMwvSA{bd)N3lmwW9LX$^Ytvl{&YzIu7`Qd%YB;6s$z<{_OMh z!*&Fu9OJ~Ome}9dDvoh8!u-;rJbma8y=^LD&X8suBJ{U2_<^4+d-=B2SW-~?u{<-E zv6srJHm|NBT_|}{jXzg+|4FeQ`%!ciXQd8D4VX?Zra)M!CVBYi$+MMdnMf61a>{A< zOBhmLR^=)num-yB+MfRMP(U{sJqHJp7YSl4heHW7U^9<_0Ytk^<2v^r>FxL*LrM?I zR^$y<*>bTlV$tkR%LG48G(oMyx2G%r>%Y)~_XS7@AN1JbdbUi~*j3+z6Zm^5_{t<2 zK>0dZTMsk+ibNVK7`1^AO2cpkPlF(`+3^Si2<&Yxyj zW6?H{u5OxGzDrVHP5hpk)E8M?rNeGt7?@K!i_C5({d8%3;5*=jV6VqO`J~dDwZE=K zo$6|KFF$mlx2{gnkfLlCerRv$Grp?hZSb{`_Z;H15`!@t!s4Rz{Tv4bmbY>c|rWX@f)wmQj|l4YY8zLyPeZ6iwn^#-2HMSLWdL)D)B{8xB9 zb+AVZ&>5%Fd11@WiJ_n)scR?})10G;6^931;0Brvk%ju|AKmPGD`N})(?dHx7N%&< znji$?zr{A&u0b^U_@$Ydn|T!lIg`n1BvDIWpr&yl&17oAOy}ll82q%^A+a9^U z6g!*bC@KWR=%4V#jtJ!{8E=bPr~b9to=+zLPaqM?50{E-h_bzm1lVr)#<@lr^Nhg1 zU1ZW2C0>AX8utv@q1-;p3)g*V@q6D29c-$3-d$^6^? z_H7ouc246EW6Kk=Id>HIvX`jsN(Bq|5BC`f!HZ5?4vr3XSBtV1Xz2&yghpQsH@yjz zck6vI4)H)F6F&=>QPrm1JU$tL45m$N#Z>5K4857#>JN^o-S~Fgt z|LT9113&^Ewsqam3488zS$U1Cf!|&Do~JLBFbnqyb|XQomOY)_W=S$k$O2xF_w8WJ z+(DR71YU3^EKD`0OWuSBx_BVqXg~6EmhQOrPfIgyPBZdG9wX2JmI~fMf+Kce1RVVD0$P@`dS9t|0{K{w`9_lvlNf9uGbLrYcPDR{Gm5sxT+ zLMu<9pSdS6NKdf%GNcRd;ip zo~PEt3s&n13xS85T>Fov`KAIVc2QNB#)4t_NM>8DgHX|qQ zi(g!PsXti|aH5-=ZhmH5C*Jo7G@;&xMJZvs?IYs~yq@Rg>Gz&re$A~&ALeVAMQ{D* zqAO*`va;T4>&yh%BPT^yS32EM8$7-~Kg!mKVl`f)BtAgY3$xDq-tqc3S8YxXkmV5g zb~n_pCw#N=n3Qr*u;Dm``xHR&M^(FPc7ZlRn};%WXLvBJ`PG;?W{Ms1v; zrHjFU%vrfA;Hn z5s=M_u;4-kEV(}+(=dSw4@!l5eq@hDJEh+^nGvFg`uz6wx=x{g@Of_Yvl}geB*ob2 z&qTRTUkokbQ%!ldCU)Dowf-MLS3j4$81LTJ0q9g4CFgHtz^~<$%f9bM`afL{3l9un z21702g}C@@av(%exBo0hr+zw*J3j$OTHq0)>BbqLY2d`2UEYi{NW-T;sl+J@L}3fE z6^TVUz6NTq4BDS_khraC(}UwuGz&g+kK{&ZE*J~C31KaY6cWN1Fig&s z>|ZV<@DseO;Rm^@-AxWX5O;GY@1(wXi`T2Y^=M++pRr% zj9$H+l2zK?a6aMK2F6s_th`lfKQ-l?4|Ptt3~b5Pa*%o#oBaqjmu1#qHHWM+-TlaT z#xr5~v3}42L}v99xmax%v zv3<>C_|B`Yufa2E9}Zm-vtg=@K1!3X3gpzlsJjn-7%VK*L>)!YjQtqbu<4>->gwF< z6&OtBA`Fe*A2ds~4+?c*3ms!l%8Vp>Ua`HH^7TbLwbdjzK-8FY(FT#JGTkM{))QEi z%W;+Rg_m0=DH7ISC7ZJ`JY#Rc{c6Up$?;Fcx=fT!Hn;0HkKS$%s^@1cE#|S-(NG#Z zKW7L%sn5J0L%!_a&Ui_IWosY)0;;Xet&bMdubn@ehvU|0e=wW#Xw-zLvq~?l%9rsg^cX~UKa>j0XWXb8DUCXP~foxMKI+(t``r$Qd@(N4iy4m~$A+hfHC zey!EiIf7AKkB_k3C*Pz9FFrWX@+}vqEnF+-R)~I}3B( zl}(h8=ZI;iYrsOKq@0b|y2^XT3|E)W#&3R~wa=1RArg@U`64}NAOOfWAWy1<_@+ns zT2mq2xpBKR$;%nRLU?D6FZWrTU7k`MrdHu3GbhZS#kG~(rh&%YfM0T~JBdZEYw;N0 z!JNV`i)F9XXyU|^a1pvRPCo9 z)~PtIY#w@6b#P@*7rDRz)0s_W7^@~oja_Ety@#*#XEzQc&i#ot-ZZ)3ZarB>ncr@W z*p|9_z{ZkRDxJCS{W^i9qZ~gZ8#{z+sqqb~@7ut^N~x{Pw6$z(@#>~+yV}_yad~q{ zvzRU9mG?TbYR)*o01H|blO NyD`5{PQOL&PJQeZ_eVd(DH#WLIEJ$m=f@x%k_OT zthCb)6y414y~dH*{W;4HO7bjQ|ChIB)tj=xW5)g55^lJ{30xbgRIBpx@}g)PRI5@) zX!bz_QS*7)5~CqkjC!^#-jt4_46AQ{J~zEDUDI?oSP~5Ofn9#fzhy@e<7e3|Ruz{v zve*yQ95Z?;6WA$Pcv`uQ7pT{QN&wT_FjX;-Nfg`2lGNUv7X`@3 zvcUt$99ogT?sgiWo(xxiG?Up-C}~l@LQ~LU9HRL?8C2?P!)$<*g zl)DB!)~zLxietS|O}`XQYP zl3Y{vO1M=|Cof2YoXxtnHT2<&W$-&Fy!WS zU}Z~F9I?A2#3>Qbl`B3WJXr>UO{EZ-)q1U*Kp|#>;n=|TTz{Ax`LV}n^&cWQ|9%BE zr32xF$Y@6XQ`rx8A>IhvdhSZDfL1ngVjBy$Y*B)ysyCG3X>sjsdq$G(IjxCjwOQrC zsmfj#%}XL3-+2fH+)otZ>G<7a^cS^gPHQv9Wd4Z_>s@tq*BZ(E$TfjI#%Jnwo7YfE zUdM7+orqdW6kyw)Ia^S+zBMd|ftlwGs)5y!ME^yaOmr-X|#E( zPeSPOukmzHY(}@M#yE_SH|2ee(zmM7{Ml(uU*BB1c^F{KWV=jsJ6GH>fZsH7s#dz# zdtPU8k+$RkAtW?&oU1s>;~l@0tXFy_^8^8VQ}&p0uAsa4=beQZd^0#<#f+Hf;PuYn zejUJ%E6{aBo@CQmajc@DC9o%3hhu}b8voPayT|Mq1FPR|>8?L}#A3#3g2nAAfh&)7 zhT$JDfXeR9VYn{l^ch%_(G)qvbe{=$83_T;&E1KVjTT)+{JyxLH<~3AFIHOD)sD+e znEa$~HBub(_CB$wEPE|)ua4&t5`tRv&3Zbgy-LuG;J9$b&u_+IV+SbM@)?rcb3Z8a z;+uMo%iBfRCZY^-lxGZ`zCoxUb@C$Lu7fi4j*Vn>LsfZ`b14P$HtgcXizX*0k2V$& zIM*E}*_Zk*k$&zjYeg4EU0#~ok64*U&xDz_X3+KAwPY)Vf{IW=Wa$W@a>;U`2tWv8 zN*dXne(t98k!_Vmk1133+uJxsVI04AwTYD2yrFS7$wpSHYe_n>lhfL+8@RT}0#*iE z^u`WEePIlZn$}NnlHq?0hKiQ)-UIuWo2bad<7B<~wn)pkwh)dp#Y{%Q&DIj`QranV zp47;#n>xPfRR07+n$O$+0WsQCan4RNz9}VibD!@cB6FdPF9_l zTOUlcN?5U#V*i%cj$D}*94U{&Z-yZQh=VS}tQYw|?-z0GUo=~u;Kq}1YtS3^Hcq87 z-gA5E+-XSoFz?Q(8P;lV{S4cEycKxKcKdJ~pkjnsU{9!2xlSiBWn{cK&F5$!f0{Oy z-Cl@25H&tuv31locQCSR`eeA6dl}Ykn%t<#r zk+BroctZZwtt~+y&v+W+*YmKTJg*-Zy&#YKiFvC5C`=@!*G5iiFr<{Qa>e3l@ya0i zS8_y$`_@b8fsFmdB?_T;cQRU`I}3zbYxQxgXh_K;SQ&%=dxBD)dbX3>l~EnOj6Dsk z1`QYEwwr)W)a5%h=3-33X-`qF=Tz=t<3P$|8iQ++a;HFru$5DPe_bHvE zLST{=clM;z1x{5VtdQ`WMGpDp&WkzkxT-w6_?}ijuDyoDkeW3@hw_Q4bZ_Tc-e?4| zkjjjq%ydTKrk6rn>&G=-E(Kb9+aML-`P(>qj|>S!QL!61fH*TtbYe6f={-u}Cl9eb z%wSk1Uf0*+7Rh09!M*g)PeK4xf`V{L9ZPXG_Jn-5GzZG0sazgYYL`9JWn?LQMK-^} zm~5@gM((TRb&1JURbhDtzu)iCU+k!92onxI*UJzEMZF;>Ir5^@?X^8}Bpoif**7si zw#NfWAaa;T_QTIY;2FW;`bbisXDnRPI7HpPO!e_4?wZf&H1w@HUs=XWo0Y{-*ri@B zzp=$z+YL}8F>fY^CGtNS|g|1_uWKydTFUY{P=5WbRV zu`_#z@3v@o#-#V=EkMIPQfsWgtPyOZ8a&Rj?{XPebML*6`Y`EBGQOWoa~BJ~MK!n= z%{mxNizeVOeUrM{2^NSKoFiJg;?+hU)7D#jCNi);KWPDxJ_>oGLsFrv%6oEFnGX3& z-vNaK3=dD|7j*JR#hTiAqmfG~E}X+P-4zAYL>j3s_!e%h(ACys9lWgaa^!Nk#0a#* z9W}0E^>HBx0936NYv88hLhknn#>*NLK7$L85L`18Q@=#7Un&z%iC7BY{J^1T^v5$SWd~or$NPxPoJCi1mi9{f$0XvWaDasM9t=yp&~`a z8b1Iu5WlH(vQrP2$7!;ZQMG<_(Asl63rsHxqdJZp2rCi)4zobLKV)fbBwPFvX|VUE zY0`rgNF(xKS$NZI`-mUC)F|EJ1*+0xQTNFRnaW-PW=U=Sub)WR4fI^sLoa7U^RJ8?zW=P)(gF#1*0m zK?m-jk0b=UjEKRJ@jG~PM! z0xt!Ffe4Qnd#%QeE9y1cu5)sn8-8yWty_L?pifOs2hv%SP#3)c|C>i}>ATO*sOzpy zPemgsS9O^=qB^6pkNVMFC+Gpn1#pa*!5Fu;?|3&J&Kk#$E8a-H5-^f0E}?8qWt$&j z)jdDwsM8WamOXv*qKmc)j!F8RW7jBWTM2V%dw0m9Tp_4u5`SU+Xq}xI<5}9!-I+rR zl7BZLVdDT~OToyEcsP#y;GuPjlIMUDt!vv-`&!hMDv>dg6 z9Q;j3fq^HRppEW$y?ZRV6u>p9BYIGK{b6eaZBCYvrk?!J9Hv{}R9nH;QcEWEdM90) zbYOshv@6PwUerh>4kl#uQj>ueUt(~pN#~bUB_n9zh^>!;=x1`R^M&z#K|6}}{qIQD zByErWt-_Uyjpclb(%9-<@E!km*5B~tx2WL_RKE%CC~D{a=C?grys8P1Gg~>$${ z?8rh*#7AFzaE1O``+x!$)C;qYoxZYyt4Jj*KfAXu!KV2fBLNZIv<)w%bYit#g$$V_n}^G-^h2C z!V2vi^kWcpdMf;2gf=dn`}r$V9%rH|)HzCot$=rR&wDEK0~*O&pHH=xMfng`4Qo)x zyIK!oQCp#W6{|rqiliWc&DYgiOTP#&b93EicP-mUPt?S1N88V!;|*9##1lX*1fM+^ zV1_CF=~-p+xs}9d!&X;MX`BDo^}Ye=WphCT|J~)vUmz!an8An?Ij=pe(%8xhQRtfk zt_&TqSlRP(KEBYL_|kX$aw=6G#`{JYM)6lwmjU8~aiCjC;GtK@Uq5y(w4NbsQI zPD7+T)A2(aIkh~N4hcnwW3_y*6XoHzEzHjwdxlHeSZp78Dbj zW1)n*(dz<(byX4-_7lN~1cf)nflD^;9=R923Qj#sXz3nEn z_|If~opyBOuiX%|z0LNMT11N+-76=S>Gx}QgY0lNO>dtk8(%cAkDDBpf95)TJHr7m z6b}Q;XNR<2D!8s0XiN6T>NwQS5{x>i4r_Bz%o@sxHgxd>$Jau*?>%ha7Wpl}5D6s~ zsZ7^i&+{Q>0Hf8<+gF$vB~YAdE{h(H^z2G*>es^gtUMK%&sGS<3Bv4&KrTm7M zJg*(3D}K7s7mz)Q`q?%HNlGZ0;R~VuJq(GP2bQB|oXWtXPz7*B-ID?eVVFn-5Je)1 z(Po51AyD=kiHxLwEUn`D9;`f{O-bl`u(<7)bYr*TqTxE|@V=c38@ZYY=1)%DWWY1bO;ZS<+=RP+3?z zR%{-|8@TbUa#xq~PHGjoyBmtVC#nLfK#>?VNFra22?znHU?PEv$Sw)-pwNsTo%wG_ z4$m?U`!fH9W)M8+Jx22``5PU*Hf}0dWA%<2G+4oP=D@Z>yM3U-5WwkWPW9hon%|fU z-lCMXH&n^3e~M7EAH_E+vF$=2!M#ylM3`6fym@XcGf3cK~s3i)Sk2+z`1 z6_&)A$Q#*dwDhp8FWTe5WCs2G-Dv0hmuiI*n|&QgqabpQAV3YOl9dD66ZR zf&@nfPvdMM5;)!PUv4cX%WteN{-tR!+hc5?<3?IcJwN7Z4S8}Shpg&+Y(G4X(KLSYhxpmp`;x|SArG<%7VE~92fF{hEakZ3#?k3DX{W3-!3kLi@DJ7k5;D*s z5JgyxWzzr4WvkX;zW0E)WekC};pb-qyK1rm;pf>rlz4BCxvj*%*P`(})~LNr_aENG z4d!qcWokF1jP{?CqeHA)`5~YL96psvzrlHD1B9akk8TTxk2C12-$~<{3RaB0nzL;z z=_J>+I&1WYK1X&6wt6mGRi8_(Z|b$jwr793{iY3$CW8j_*R{pK?AD!rEzvG`hNftg zFjgVrX$e$~L{TW!wmhr^1`+?!_P1Eugv$regrL6ue6vY$qEe-4bzhN@E(-d``&La; z#&}WP{>vBSeusLxa)yVD%@0P)As-g|PL+ ze()n2)wS<^3YJHjm}_so3Y4^S8bzouK_$lnoep=q;_&BU__M=*w91K% zht7%m7(r19eC7IV=F&0*8ifW6D{cKotlo0N5Pp{C7)BGXuJ$Eu;X=^MzSh>IRq1xW zV3%I1XkW%;*e}@;8S;9hz2{Jaae`H)Nn34*g2gh!QJn5aZ#n7rL$mZ;YmP=Uc1tf5 zD(G6LTBlN{T1Oy2Q@8?E1axj346$U0v=BMZd%Wt`O*fLR|9$Hd^-T}X3W@zp19{aY zD*4BJ&!;~n9>@C$fp^d*PV4-p@Ku;#_Z}TNjr1$%8@IBgNVFP^VVpEG+wZf(TcqMk z_*9vjeIx?DOC=0A@co9}QS~ntbFv(E_zh`n8$o3sH8lmVzWD`P2!eCL!+NRqs3b@W z#iQ?VO7xg4Wh@<{x|c*uwYoe2IDCPV+G`0hG~Shys%qaXn}#A6p@fW*QN^>-R}#*! zE8_3Sp(&-}(g#xPI;Q2%;xF$0>Yq<_tG(V3?H?RYTUjG|g7hB?<}w00g|wM_0&WzK z{HqW3$<}ohKWv_Y>mYUg{-`3Bc6a6;fA~22pkBKD7@>HJIu%1&p!2M>x=~S!&Z{VY z$;>>Kf%;TGm3#FyYz`QNBg9gDc7A!5(F^b8qlYbQRP*1b%*b?=@Fq?VQbqiSV-Y`> za7^dF6)$>q?AW0z1>bdhhx&6dAJ2G`3R)=u721T?eej9j*(f*T<*#t*{uD2h-Z7Da z{{Bh1xqo^t1mFmhHo~ir)u|}-%tV~qD8}Mcu^wi-jL)_IAp-_X8q~dnYnKEgUT`lr zU;CMDz1XlIno!zq;1#@ap@SdoB1`{uY`A#cJDdsC7$)-(ICI7-msDQ(-(d?xo-e0? ztc_ft_FPHT6|+v6tGmqq0B}H$zxEyo9{dv!;hbT5I$wtA4OaKRedt~%x%9+dL&frt zm=)cQ{PVx9Q&JK&ss|4{>zl#~XU%Pny1Jl7wWBSbQg_;48b5fTD6i4At2?_o+=CH= zQDUoCckS3&6;4RepxI&0r~BmU(m}H$UsD{~zP~)9h@e4bMa*T$>_6bmX5^kO`z@EX zx~%NEZRLgR%2b36i#vC{=B_S_bSG>|P5^+#)gcnibAXn9J776*f+ z%IUf?8{eCVY_%8?c2i6bM-8Mo+WSbb{eM|@8intPXj^@mVbkrcgF}!1Q$I-stQM2m zQyky*)aWk}J;!t|zrVUEm52OU&K3re1m$k9Cc9dHb3e~spmRorVyFMEI}!$ce%$lU zM!}xVg&ul@s~2;^(b*QGeCYDdXF+Een&vEsL^gua!i^R#QbshQX@qG2BN7`FGX@>>BX@?C8=|URvrJJkO~8 z*o3nB|J=9c-OpXWwXcMqDGL3is~0VQyQDKu^Drd)4g?Q9dRmMM^GuA22FGXb|A%6E zeV_+Qs^jgi`cu88a7=DJVOzE#aQLt@mlBt*@7uAhNK@#NHGKyT6lXHh;wAmzsIH~Y zR^rN*md6hr^rlszsWHqLX>D^*fW?ajl^lC{TSc_jxNcEsWmEWYha(!(g8=K7^c_Cp zjD`&$L0%E6N@8kUmaW;|pat@Gw)Sn)$Ppd>Gq_!^D+UCrpC67C8wkeUQVR=LNhV{Jzdpt*9_qdBQ zZGjzFkO{>oGJ{m=eK*S+g`{q%WaPOxq({{!wH7qk|4_J*m49==)?H?7Ko_dp|C?4t1rj%DUtBG6tN`7>B`O%2e zAZq27gg_?rdaW?wnXZbj?q2udm#==lr|hh{^RmuTzx1u8l^Z5lW9d9E%^k0Yjy^F@ zJ)@$*^=}{ihg$pEcv#DKn<4{-6R-Nq)(r01=J)#3V9D=1>|C-mlIB`#yK`|Wha~b9OS?~=@FbEtN#JYObRF1JuH*zYFZsQR&ZDj> zZ^Yux>W$1MCimtdzW z=>Bb`gK>R$(7a-CUz+P;{ko+~15QOvrFmz!Q&VX?uCJ>JXPFd>>cR=bHJA4;s~k+8 zw8jGZSj5=gYj&BP)bc_k5(fmuC^Azw5JIkUtaB&5ppG_#B~$RxhZBE3JYf&w751y{ z^L!+75-2CC!yHwHOcb!#H;hmRz(#bOsk7}`-aon5Bn*zX%J;%v&o6rcBUj| zD%6rt$xy#sD_NY#jq(U$1ROjWe*V{Eif>Ixp4`TwC#|3ui0X2>Eh4uGSyS*p?3Et| zU;j;}?cfD&@YMD_?i;QqUVC~Bi+V)R?cCq{k6+;|f019Ovww>P-~@nxnkT_tX0;Qu zbF@2xfyf4K0nQlYl02KDiV95Qr(|m(uOlUdQ_cvXG!;0y@4=fLHJhroeBL&(676H* z@;2C<740XU3H0oRDPqk5 z8&54Cv6rWxxR;!iwQt^iaQ#q)V_V8EmSG*rhDF+(&i1Ay0)HW`(dUM?pD8k+j1q#{C4ihp z_v|WZSTW$RWvflGm!Ge#s~=pwy8GEzDm0b0oN(1vh64ff%Ebf4g4WsVK61$Ku_-IB zXlZYC^tYE)tawvv$NwyZdK(BbHyq0KZO!d&ELsfh1lXCkcM4FfI}C?*rVdQJ!FxO( zN(MQw@$RDeUUFsS4Sx^)wk6v>k6wo)$vzkcU}uJt5C9J8G+13rB-xqE&saJzuH}{f zHa$HR$$SPD5psd^*Qbpg+!{Z+OLjRWTM+;NQ`3VTEE<^?HfP~j*T+9u@#F8&QeS^z zY?Tk$oB;Sma2#)K|J1*+eEQ;lX`G|8oDfbZaE(R=SUN#m#W2>SPfEdHB?c=805!+6 z36fKYk}I68g`j&v32=>bLO6-Gyt3zq*SZ?7t-9`WmeN&IH-xCKU3{~@Y;F7Tr=#Ji zJNDD6_-uFiv)$!W`?}p(RoQTz+2WsB`>UDwi2KSJ|G$tC46e_7=-oAR{lE$6*zJ}q zxma2#ZVEMA*%vxtThS0z(-IuBS60PS#~hLEE>}@1cvuN;E2RQ=S2TCMT2ZSIPea7% zPw`D{ftcOpjkmN~lZ+C8s;c0LL;iv=udNI9v{_Xkj6*c+=slEdu!WM#$iYM2nwoGn zuImpOC4jU-TaJ0Jzp`V8aC!=_*Ov@;n$4it&AE6|CjztwtV#l09DoMBZ7>~6(m#rH7;9dK=cY0s?U0u_rc8lzb#pHOzRMQwfa@ggI-&kJu=Z^M% z)DSb`c)>Xj2-9+3>HVRv%=PB#8(<&@@nJoxBT%ew(YO3d&(~X(NdzjJs7(!>=LVWj zLp&3osf>hk18175rZjDIrxK;0C;?TC&FCi8#F3X=xBiPxf}DEhQ;CDe1mP3gCe}_WM3u`js!(FIkqz1IR!C2m>Pp@$kvck9|rx)Ugn*(>cg9O5k*z z1P+{ont^yo(8>I~o<9`yp`wi}Dowaz% z`zq_q-s0spXH_m6&COVK-3eiHR@N_hOL@%|^0a4&o=fE9bJ5mU2rZNYJvB@(T*!Gw z4K~NuKK6l<#vlmd4U251TNdqvG;}Yin2(SkWj>6)U#_g zwC;boG8xh@U)$5x>C9`yWzVgu3qcy1TRhpEplVbCT3H)B+2$~yP91U4=%RiocJthop z@~;sbIG+*#+F0+mn91SLvNUc48LC1|lv> zp6iBVV6lM&+v4F@_>AUKWy!Q;GWu35kEh_Y4kl1x0eaaE$^HIAy>@;3^9ZxO`feShz5; zgc`Du$VRXL2Y_6f=aP`il3W@z;6Mlv;4paPvBATCchp`{e$^+Ob(^QI3mp|p*StF! z@9XQ_5eyt+vzf=3QqkjIQdEA)G~?yZbFPmw&HRE?qIQq-%Xfd$o2lXOy2)g@j$a@QFW;9lKwzkXe&>&bXr$04)k@pa|-1EK4;2m%Ae@5=2g09YxUdi zJ*;zPpBE?t&;S&M~>wWWR4%twRUS6MVoX84xPXa zlK_Cg;#zEeSt%KP&0Ta&Bx=p&&PZ;rGlIT_EQt3&oNz>`rYx0)j{=<@xNz9Xo$6b5nr{hW(i2bh>-47P(B> zP_LpWL~oj$9ug&@GZB*wtZp#bK&J;m006=?0+0!J^zZp~=;-5;(P{EDOgZ9S)>&NM z#-j3ddV^il6eT;8w-rK&%~@GiwXtr=TRi?IS!bD5>jw`#n&{q3h60$xGb%7$cvDDM zuB`dgjsNOn_3@};t4L-JxpMnm%&2w0T;y6gn26~jy~d&qeSs5>R76+2Ixx^~Nrp|n z#!yayK&R8;Nju6?T?hOcBjw9`q5*4s&?Hc(T+`mYw=9*Cb8&;&o(}ITs;wAkToNuS zkL`Y~B9|8gfTb$}u|8vPz$yU9dgk-Sd-l5=yGAbmL7QYTYbO%F3%(v+$qXb&=jubfGxOc zd~@a*<-jQ+gi}s900m$~(&_CMbGkRc6CvU%2cvB&ZA*G0>A~zCI*{1}WD`7_O7tE) z^vib|+%=^eKT@>jZeglwPZV|j($)Ub)p;cy4YfoeVb*fVbKcu8#7Uz>)ZKB*mA5RrP0rZTy*cr)JLAbjo-J`*-_^UvEt@ssNd%s% zvbeHY$PKnyjK;jCONLs@MF3k_{P;_iB7mbb5g(MZd1|-iWK%w}*Qx;&*M`y&LnbLx z0DpZX9+Z1p>_UsZ>8j4Mx_Ed^&;G;Sd|I;G5<7P;q5ye-B})VGfceCJzkg7-d2L59 zCCB?r;jp0)Oc#q74T@y8sgjQ8vOob6IhxNHu3ppi(36V@00U^*=WV*Yy}i{_R1&YS zCfc{T%&yeHfFT+*q*wWf~Xt%TH(K_Rbs|?n^XJYfe z;KnIYIREEv3I?auL>Q-xLtdpyCdu-%S=gNrQPA6nlIKDS1WnBVGDF&DnhoqsZ@tcY z3sC)7F-%kd?o?loy*Teqd!{D4T0UFRU}&gboywY34JctYb0QvnwX5|@T%F-C8mhB` z06+-4)+3T(F39xUIr?u)qZ%jBp@%4V-RQZ+`?dl?P6O(MDXQAQ`4{YKvfW z5Tj%04w27hvx(*xzS;WxH~dT9Qo8XYMo;~e+m>Xbr)X)R3{qZ6r4s$AWPdgt$z~!- zE}`Z#nx?2~u26_g6m^0ii;_XsS@Z^n-smuyeI|=fl1*>SEhe8idvf^yXYakk>^QDF z(Nonq-JI{_fSfY{0uVDPQNfZdTMlxN?RAp9Z`W(@uJ_p+p4abt>$F6Z^r=sL zDK{0Z zcO*%sKk{Q2>(3<@zB43c+l~j){Mv0}>-HUe`W=Eq-*Qy?!&fpPe8? zZa4E3eDun-re+l*w);oxv$&$bmUff%)Z^d-XvJ;zj`G-17EWg-Z~i?js3#=KCv~vqw^OjKdI}}A%0_3r@lDW z4BnAzotKtTY zHzfvu0EAP<gzY>Po2zcy=|d>E?S`~bW9;CHMkv%v*uXTPc{T-zDx;-9 z(lE;M$iVv!C?{RLaSLk~O0L7B_)SR%dieoy`9pvB7}&~8Gd8UXmP6!~zV??`C;6ASyM?RQ=L?rpfR|K0Sj{ORcb z-ZHSmu7c-)=K)Z_7+4XMD4dhd{OSCEJ!hQ1b#JlT*xzluQ7r374rI6dU()bL8yzUm z0#J}e=*!$cp4nSG`1`G?r>K7`rAxB0l(KA8*|Zx8vfMw~JGsC4{9|su#MdALIBwD(9Rv}&Rr~1;v$6UVs@u(&`yO?9|>8&d_~0NDwDl>KoXD~v(<;f< z!G6ILT;J_|XE`?;*9JQN*=SPhj;=37`a8Da3!!eLzt$?V)iTc@C$nz0F&(qIJOB)B z&NZjPMq37e_;{^1uh~U~j4A3sAgX8tJ+beEP&Yw#GfY+6VH{=Slkzm-~wk218F~uiZ&0K^MWVM8W4V8K! zXgG|fx_dt`gU?1P&kZq}&1+t#s&Fio`x>2vu*Rgk)PX{^cx$h`%Ng7FiXlYbj110e zyZFjy-K-Bq_^vxQty(_*cVFJ`SvQ%;5HZ5NcWs@1_VAYn?i_AVSjdBJf#ZSWfo?*x zlNGg{@xg!TEZAhpKl;|oqpgPrBmG{`*5qJJV_5~*5VRB3XZ+=kH1<<>eq@8N&1^b8m?*6yh6z2L(bwhCSH^_- zVDG+*V*t)D2rr=CVKu8V@M!u$}o9>xCeFy}w<(?5E zT@p{$)wQL$3#@Lmi6wfrQ_WETGZ?0tE4GTCgJ9aZVl2aoX=iSrJ~;=f9wjRD9_rvF@gx9i{YvPbs1PrOO8cJ08H4eLJt%n^xSmR#c+Ac>!t!)?-MlCRG$DYei9qJrfnw!@UE|`>Jo91fZxz|zaV*moBDu@{+klk5p z7H-X6%3(7$uffFS4o>c82O(@PKiZ3srM^Nvu25G~gl zLxcT=LK{&`fkD(m2vdTA`apbW7HPXeg9#i=!OiH3`Mu5p-)!g1cJ8Go9V=={QB4VI zTu>6c91)Z_FGqMK#!F%J#*gat4BWGOp3}SjyKA*wv+Y`K*KWIJ+g5^jc=Ib84Nw4T z_i&>Ih^32o^s;mG4Thu$C9=Vf-}~OXR_zTH6YX|~n~Er>Bef0l>fc6Jn+1hBEZf(%J>RRzjA~)c(ocqcYWe*OdI4LsjTKAh^X>Ef z7DxOzXXUcG9Cz*)ys*+J&cV4Er4V(S8D@e#=k#Pw!XVF47Gqz9T8zPx;3b*^0>B`!t)rK$LX_n)er z3(w^=2B2~}nck6W|EXi%g+T7%WxC)5Zd+(hhdL!q9Tt>iyPgY~RVg&m z%pH@$-8~ytedXARbGPz=O|yk=0ew7 z%6NOdlDA8F`;n!2c>SWp);TEXys{`C193q&K?<$_%){Frj3QPV_~qZP#s(|;OKe6! zU|2Bg!tkao(FcF3@Mr%WsJHao--clH$`eBr0Od>N4Qo~%ICu^aLI?xJl=uiShf!drhzyPr2)U$1E$0?+j+BnW8ztcmpLKGi2+v7I5EI*GAn2ZVU|}AW*JVx z43BS=|B4x&yduY$c+S-qJ*Nkh`mRNYOMTb(EJ}UfF@0C}J)3xzXZJ4u;Jl8K-dF2) z1ptCd*cNgfz$`*65CrIo1N)7Ep)1y8_H5kov9S-LE~|V!X<07Av+CiY`tC{Y&;UZD zJ5=GG9j5`?R1JJ+3g_D&|(=>V}s0Ik-)|ps0 z+H$sf-NXw0SE63@<&*{Oq4QctBIj>!c%;j;5tZ zaLcAV$~xr}G1KB$03RT`vSwGf*2VO?9W$p6kJhWwvbA|!Qx}eAQX3YQ?Z};fZU8VW z-?7j>8lZwL$-ZSUt%jn_22&%oPDNXFM?vZ%O^SG06%YxG8!MBO`mDywB(f_f9i_En znSlqU5-aMdtdkk~*zwbUK>b^}EAeGKdR>At+Q)t@6+Y7WT6GFw+b+aCDERTuzdcLmbV;*h!>6z}S zXgAO@w~_Y1SZ`a(SGd+_9;X!eexGGOAg>2hpu6rNMU0^=v$1?1BbFoh6hd!1Cp;aNBMp*il9 z+Nae<`%LuEfK}cQi$tr{(yhI~7I7!K*)>eB<^jD1fAP(`1NW=n{_bN>KPw0V#)wjS zX|{IL=gF2>*Y~*B7&byZ$Ikmd6vIx6!(Z-y?|L%?g);cwwOP_lq>B&q56Jy@|8nk$ zX?qEeF3B5W*Kv%GZkWPNfWaWD351xpKRavezK=C|i5jm8a10ly8V=sIxB2ilm!A9E z8H@q|@?2dvO(~ExJLN?Jc1jTdMHmCc6fi;rQI9T0?Ws>Yb=s*RC5%ETcmvvIzDq?8 zka`{wiU0s3N)ftDeQ*=-C?iF74)^`Ux(_O0DH4lhD(P0YQ%>ZiY1Iz3?G#Cz4tuc{ zuwMMdw4E@_4x2d>x6@tA!c0LhNAo15D{bGs{|t=ic#6Z@o3OIcn8RjrraQ{iN0QAo zgKq5mAZ>MbZK!Exa)1f{y?~=?+7vSqdy(8C+SO|KbWww%6V{ zb!PuydS%g^iaI*a0CbBXUUlE|$+IUux6$>11@Jtae{N*uht3N=sXjIy-O%7a+^uh< zD(xDoe=?$8RI_c73w7NUt(IWXX+B6XYV+Kjs5K&dAmv0XXH%n|$hNCGM^<^}?UmF# z_u(UV|Me5!^~_tpF!Kf>`bDKX9?*t9V_#fSjZ1RVr89dVv8E)6(U(W+DR3eL zWN4gxn%oMx%X~bozji?j1>g6jvDHmj0;6wtFbdRj>dn^ZkbLGex>ELv7Yn?BVuUbI zLJ3CHN65bhN%a=h8z87Cm_%yi?aAMMYZX2zKg`5pPTV-&zirw2 z<=p5RVMUM)@>4?iJ3*g-vBK>;nU)>t($1;Gzw}GCG;`Nv>{~-}Tb>=h5PYmpt*h<6 zn)p;&%LQs1Jm*O+bS~Bzs&y+~;CL7%+86uP*>t+RIpGRFh>skFqMg31J5wcC#gHZm zNJs19ZC>e2UwE+Iy^vT0HA=!1WxF}kPdqGkDm(7ImprPCO?@EXoWt48imBit^25++r~z5VNiImBt6A z=L4Qw7KKOq`sOt?tLw|!Z9YjJ+b9j*|5Lwk=Sc3EXPZ)PcbD zi7|O@>7m~OU=*lVZ!`z{vS&`uT`9CjfGApw+9M2d1P&(N{B+WHl2Bd(vxg9-fDy(NFoGY%If@u=?RejVo9-N_X6~NZojs8(j#P6i ziiV@RtfTMjnh`hlY+5AZ#k(gXM>BzzGQDS7nT%>}xv(Y2Rb{2Fv_~5@b%Qy%BX(;cfY!@s^8>pW7 z8i}kb+0zl_AP}#b9uGyS=*J3Y!+$wr$P!?OPr=apJp=f9tz1-rDu`Hy4jyeYYFq(OU_LBE*!D z^SkX+f12Ei3>zHp8giU|HhSS-pU2{Fr7=N~} z7HOS-|BN~xgs45cdPjrW)4x3{VnwcuAr2FscR1WK|r69}wqHh=QcR7H{;z~DlUVHMq+ zM0{uC&e5^e|Lub_`@i$h979yevUP#0Z)5z=Zw;a8(8cMfEKX8z#`+j@nw1`sR) z_t#gHgorJR`*eyZZw_r3foAU`hcYFx>fE=O1g`{f1j3OPy5TZVJG6 z8mIoTS9l@0{@2H%%MoAzsGa;;{nX#xLcNRhlLs<)e5lHWomX+=hIrsyyL;f^(i6W$ zz-X<55W+&}O2ygrkaUqA|9VJDfMQArqCP@|QV&r~DWO+l_ejwASjrQE6!6m1{XTR$ zClE>y^??#f2?9a^qeUS0>W~y+X4$gTuHjAF3hVcfty)KJYkIno5Nbk`ZB|z{R9gav zsgBn5xJ6yM?wc#XgVvtT=ywOx6Y+(W`T9UTb1LSnE>zZ6{1RImpR?npU879JY(&jN zBkX)+MLY3^BnJz(-K{_Vx1BcP^{&LUDd@!8tN)MEey-#Q}r^J%cO@YxY zcSp5iJN{oMhquUqUD?5no`2wTfAP$>p8-mjR`23kd@VeBi$GNlVaK;WnLpi1JNJ$a zqzx*&7>HjJNK=5Xwx)i+bgik+23h-D-+kj14E4%2Hz%d2WkTED&=>!7-(4S>d;DcQ zO+H0F^%#Z)|J7Fxg{rHcc5i`DX@BJX>(c+(vY=Ljd>zOYRi!EeBbooWIsr4y&z~=S z`qt{`^DYsmHns5N|8?t*zkBGQJ#nmm=UsDc@W{(|kjO#?d(H2BeyKI+>y$UM1JjMg zaDUE4~R&SR_S6h3iSYODPmWQ-7!y0 zPOr$W#RitwMb2^0q!EB?vI4LJcQ5E?lj7#4{~Nil-W_RTaop^78BTM&UA6N1UZcP& z)JJREt+n;$y`_BEai+oni(vtf&!E1pv8zx$8jW3u2J^B~=ft#btgkgQma(?lVr}|D zByk{-@DbWot5|@`iaetRVy?Zi(>kg}rbJ2b{NXLzHugn|(^K8O_A2VMO&16j?`fQP&6NLSbKJ3K6X?d-Ipvz%V$4$sU7U34#XYH zzOeO@+jQg^p(AuB#xBJVhPqw<*)`IW{p-&4FYjmp`UdxcLJaG4%KpW99?6m-s{KBm z=x2NpA%@#jfrDA0AS;`4pprm;*E^Z^3~q5i+M0q-BzS+NcSrBVaHOwgrhW5(nmjH= zYanJ^^P8!GLxK3bpw5VaY)_w5g3pJN$*#Gv-pJ_2>TYX8rSb4UwxUYl0Z=e`c0p6a zmVJAn;sJgxnQBQq5U5FFi{rP|YJ%sNWy#{0gl&DSFq5{-A}^**W3Vr~_3k^3!c@M{ zdKah1y-JJG>(|el(1Y~mfziePngk9S&9Aib4|Pgst)BDJ7N9>K>H9a@7ARK0yJ6r0 z0VP1lKrH@jZ>r>8^UZjOiEwzYHViFeG4S#7$&^IMYM*bNe_nt4R?A^l>Wh3}Jn}n@ zO0>~N+$(Ma0bl^z14~EQ=oUc`o90PM+$BxFBsUw6KB`8d5s?>IPT|;?fRjAQC=_{m z@6>(*E@_xc3-5I)Kt8tNEw5aA@V&cq!+83ch6{{%5hdC8Yoas4ptv^aJ-^ zijUA<8@lair=)gkWt;kz0hWOrlXE=>1fP|bQ0c1)xpW8^7GWMU0x&$n93TcE3>dFj zJuu1*>?RxUO5DbWg|YASgU+h#8LKWnR!kDJ)81 zMN2ALlH-+|d&^GcQuB}hb(|T?3}jMTUwCSZf+BK^6}A+)r^mrz7{zCP{Je>n(%-BA zf&oBY*5rSFlJ?O_MR^g&HP4kf_o3*3$uWXQ?r0Y-go87Rwiqwm)hGkN^NHkD+iHEi zv9noOP!*eH&cs4RSq2J#VNHgnAbl2hoAcOfBWBG z&&9u%T=6ITPM9yedg>W5hzsc>1C8pZ^7MmYURm4|!WevFG!J72~6T*jIPZH(`I< zLs9?oX+$qiEFc_92RDSq@6@*5p4l3<1Izb~!3i?GeSUULZs<@ZSPb-^@u#;IvX|m> z>vH`sNP5EZB7^|-fv`GmF%{(cm5}Y^?Ws)VJDE$`dNxES_h9XE}CP z@4kfDQIx}h&_Fmk8j6l`y!^x8G@lq_)~2o5nx$fMYD^|Qkx}Vr6)$MuU;yx4j2A?; zEk*8}>>e4A)290?v*j!^fy3YA236{85$fL!_nRD}xZXXT!c0J$(KMg{3~X%G72-XS z%v?U`5rj==#O(Z2W~9e*!+K}iLQR*rqsho-NWUkN!>n-S>|TL!$*f8xQ~kpemrSe{G%l!{WgO=j|I? zL=4{-`jBNp_j@5x0AK(d7dKnbAO3KychYy4Fu{`C^cBhSi8wz#Qe@fUB4^qnx+sCB zh6X?UlbGiVfAs&+TY)_Ft<-66d6*smI;L>@wv{iQm<00Lwm7={g|5Vo5kd&R_v0TB zH^0x;kq4nUG!Vixj}w#3K$i`7*)ZXhAPe)5FtBE0$)haeJ0Y)0T^BG=%r4QC0swe6 zZI=OI%<#cbU@VsX$)Wpyb;rklvGSoi&)n8G9jT18l^V+%Y_KNJudK?tAoN6^^JaGE ztE(%^9t*{$l<=&SAE`G}dOO&g8lLNWO7hRUe;=RtA46w9qs_iZjcM8Hu|N1B=ed^N zE!QjO3v(~Do3oVoq8!CPB&C-NsP(uM;&?kKnh`#>D)Qeyt;G zpE@!BUb7hDj8{yIEoeCP_Z0~{0p7=-P#L( zUY~Bgy^H8EE3Qudw`L_^S+7fXBLLThbZn&D`-bDTmNv$c+~ftxN&WxjkM-fvd_f`Vy0=NmT z5fr1RxEPWwV(VbFhiug91wD~~)d8yuc31OiwyBy1!ImlU4U6L_6#)2mv#*poCSv%o zqKt)y*AA_@Yj*qc3*%gaE3IlJ&P9;V#xAP))z$ImMQk%8M^aOFmy|}squtRbg-)N_ zN!wDDb3M0jpSu5Nr(EB$zeWEnap{?8+s5RkBLPZjyD{5t%uY`{5=*Vl3~W~e=^yN^ z#5H$y_Wc=}qFlT{G6IR{-h75w7$b@T4oxE-c@ejtkNCL`R}$?x(j zM}(+uFk;W|cl8M=cu#Ald^K(V2wmVGIOLt6>E6-dg_2Sf<7CkHoTfH43|W z<>%F;kI_i4@sN<-^U#cdvLdA$Ho{|a(v{F zL=Zx5_(YWvG|#bA%jhXyOEJ-8od@0|wyt|-h-veTZrNSOV_YmyB)$vtN@e0^)Z~DZ z8LbRQ)gT}M#}5?)&X`dhX{D#*iK%dF*r*M*!wUf;X?F%1z_F{p5@9Vav|ydNyXH3? zwusJcn436K{enfKi4!&6SB;Q6cYJEc;IL1W*AVAzKHXc{|bj$(= zfMB4j|BE&>BWfYn3A=W(X@0OU*W`s4f=L8GuXIgc+ii}vJKqcscnt37+}>R2Y%Fv> z6aor+$|bQ&J|7a5&#jECc?rHOiNc|*eV!D#HGAGq^> z{mrBM4xE1Qz8(2;S=FSw_U!nRzx>W~hbG>8_ttVX-)b4x|4AgGL?hu#Q~B@fgO)8z zuK&m{vaB#{xB9KlxYv#%n5aa-5-d~e+2H|JztkD%SWyWi8JGx*SA>Y}hGkLE6pj}K zU__DOWreG&nk%rB@hLSavGKdC20vYCE1VED!x0)xxiNbT`fDkbsEQ?4*K}hG8sl@p zhCK1!LO0d)-15rDwXSSq%<^?0E)k04%=W_m_`;u-QC=ulY2{;k%+Epu6Dt zuPlluvY@Ag&o)k;G2UrDa!E+^1%9Gd|30Xs2|y$S7CqIn&MmcNT9TW(Z`t4-ck%0Y zG<@{xTN~nftM>ITFU{6#$Q$ArB@}%B@`iU^*KuK}FI1{j9lZ(wg;KdMo1UGiy~IGD z&)s|H9)LsN*9Q%5x_8c8Q7w2~k}A2<&fwgUnl{@G03tw0Txj=D{A8;Ss0*GAzBQl} ziIF(fQp0>hf`%ZpV{$XaGqtvqQfPri)HJ{}!M1$IR;)I4sfh%Hc)m~XA` zHXjdWx*RtnsAFb#t=ZVj*22VoDA3>Fgv(b_=&;;(BYnR;f0_XL^VBNJphY8bTGV_% zcQuNSN7DwwZLd`=gZ&yiB!GWL2m^)3rR;rHu0o^#Mu5H*Dj_Q`Bw(lvAGtQ_BGUv5okg$E&Z4J!7nuz-g&p~`aMc1`o7u} z15g0dD^vd+LbAi~!5|K0wJkD^dDPUs>c#GU;+eNZSNC_AU{2sz4EC#H1P%Z(EMoX2 z0{k}{jP}~?Gv_b-hu`=x#`wVDqs>Nd#aPlbFJ~k5bX^j!0R=ITeE&Ub6j@5fW8YUy zjaTBe$gU&B=wk7AfVabp^}I0%3Ted+R>gb4I3LHi}#oRk-1t3Zz^(F_r zX2~>(1XB=zkLLp2wHC?~ASl$XoJ?Kw$xG4u2J zOFhg!Mbj79pwFY*oXVYc=_w)A0dAj|x?L|ni82S+Y2lvH!f#c4J8(BcAV1O<#`4Q!MbT(`dEh(a5FQys5w5z~b6%>vAK%&~w>Eg5zz$yiIx6qe-co zmAb1Vt<}Mv?a_#2#S}9lIUAEL>Wg!|ga;xZ5wJLvv=k&vlm~1YF1HggfoDe*BN%2y zSrvJe<5^ZnVajnl!|?(}Jh&XuRkuSumjZ!zL>yo3)HT~teK|w}s;Y&haN0^H>?jlE zoI#`y_Ka91TqbHACng2#Bka+IRfaZ=3~IJa{kNB2_(#;R-)3H8-*;-IGmhO2MMe;2 zzV{z!A@j^vg6*hAg0d!-e!f%~WX_w3FLsw@IWrP)<~eQ1?fod85rCKu+ut?D_0CSO zGUutWo-^p^N!xm#kr#ZwB8Vo(x)=k%hF+ce=%^OEK3062S)KRQ$ArH1t;RCaDN3@7 zFksl)t%cgoJ}F&gCC|azd$p1*+lzxoFw*TRhS&4CBVycU7@$yKD0ySG2cc>Q7etMZ&){!;5~1v`_h(H8wD zN$C&jM}8}R_^@#;^pxV5O=`5CmzGO`1TXN&?;?)evXl!1d{GD_gB$9vuZGD3NXEhE zPhBW~nvz=^5MWliE%CFrM}DtYQfhhBZ8Aoi)!S^h4ghvQiNCBDUK@K)Kn~3s#|T+! zfBI(PQGz@pvVB+ATjX_m$u9#EMDjBW|Ly;#ma#NdZ?4xGf-r0E-#cLp))HTP~C@b-U4e zmr;4ilVl`CdjXooa!;fI>}1@+y5fd!NZCsQ5txZP?PyGpY7kgpNXncWapqdR-x$4= z>%4uBv{LR^x0PG5;m0I7^4eGO>E(K$->U1~U~S^PW>FbNZS~uzZ?9UoU9C@g!6BoQ zCT2(BzvT=Vz*@j;XR4RHz$rG209c!ho1JM;&oH4x%^rrH%VQ+dlxuxS9lkDp3K`Rk z_UuR1tcjQ>1L^I0^&X?}d?FDdPJcuHuF^*k0t%Pp05Q;>V)2<&rpvK+Hi}G}evuy; z^}BbQg>NhUJ|F^UpO|@{vCu)>1RI=TwXk5{>*Swg(q6A)Bw<@lwYQ5P!f3Z&88y!3dC(_|&8@YPzX0CJB|MTj^s{mZ?E;aJs zQ+wA#5?l`u0t6M*eZ-#oAC3$JZ!QUC^1UO}_HZ{O+= zP2obD5sL*P0Z9G38v07N~!eb{!=Bt7E zTCm=e<8pid`Qdy;E4S5BBf#@iZ{vN328)$oJ|C);!)p@V28r}|rWP~Qu%!e!MTv+)U5*k-qoU%ADklg$$M-nR<3yif5cL9nkJvir8Q8b5 z?@&qr5McCnhNq(5O_u8t6$MeyST*iN6C}=#%47v%!{*opB)73@OMyDe`HU-(`hc&^ zVVl~x=KamC`G3#NH{k6a@Nyl!S~#T!v!WFK9?n#&3-iZ2+wG%D3UQ&56dPsjEmG?l zBXh8uD%sMoq(4Q|H4r_(8Dy^Eo6q7Dz4Cmw(Ar@(G0SLkR4w|7>9KcNMUK!O%h@br zV+JUw)ZN=D9pDlzmIn$HP>xsXM0kI5VUJngVe9Ts~jBS)S3?bhYyT zHoo$6;X5=x~p%QMLJZrA}9D1~+#mL*p9=t9}Na0^xMy#w%Q_qqLY zEEJE$#h{{uAf!Rubd_TV^8fpf^g~CMrs%B!qn2UjO7%TEHx2Ydegd9uH#D!yEV4K6Y#}KHt#VrZ5t3mbz-Ot`dv@ zU?|=V^X9~S40r?xAqH(5nm;|=*D(awXKj!7ff zMp@>@m0Bo@1O( zZ)R{jDof#z;Ja#yB_|oykm5D;DsZ{ z%H`G@4MurJ_z%g||0%GIo9{xi2?PKz00ux{+0Zc}Z16ql^2`0IyGrzCrI>uhjqkAHQ?`D`(HlpFQ(h2Vt>nFbrnJpl5!MNIk==Zt(U>msyO^ zaI7Ddj2CD7uLf*}!qw?=6tNUA0D)xK;(#gFWIzBw!9~kQYR!7M+YvyZ)w)(KD2e`F zoWm#2Mzhh@j#9I=Hd>Z6a9!j&#IY`E!S$VD%~veP1=l2&QMNM6%#yBij^lu1_8hCv zse?sZ4%oiy`*wo%SeFv&bJSjR+6QT`QE$4oec52eEHH~-9KsB|T+OerGt^3Q}ILJ*|@KI_t8t1CN%DuTpIs;^42%=HPf z<@Z%#Y@XLQa!$X%=UJ)E20FAn>SRyzzURkJl^S4(arkGPx-w7f*lP_w024 z)>qvL;eoC=rnwDl2cDl_#zuH0gihH(KqSjsan5>}^eGbuF$7LO(jP_H zt8W#i_JF59g;PDuJkKN}roGZ_{d8}N1^R!~@t2(*JN5FctDeE(`?|TiQ1MA2eHp4^ z*wZOrGPJ56zXOU-$QcuuMQ6{mT$ue(-A-YvkeSzCzDq01B1rG9mrj$sNCvd%^Z@Jqj@5>L(X| ze_aNx7`>;_hDIGsZ}G-}0I&d&7?1#Lm&YW? z`&$NDUYE^|wt!OKLt9t0DivkRvZ@cnb`b$?+p^LlPY-hnxDEpj1%>WeUwH1Rk#bX* zorz6P_r`v;-P{m#EDF8{p4%azDJihgsvq;?Kpe&~!7(f&w6WJZ@A9_eIF3`YGecHY z@3F4yd7iCPUAB#?$*R~4GA4Ll+l}@GW6knHtE~eiKq+`Gcn(|!r`Nm70N_>d9zqPu zNtjWPC=woc#90_TjDR|l$9R}=F#x!Nj{vbYMu0ql00Pcp5m29}z#_>Jc*Ic#u~Clm znUD{$vKY~nzIG^xm3Urmtf9jt4*Mu^4$a^0$1eJ=<5WZ4e_?W8K(}fZ_SE@@5yGjy z&98Prcwkp=@*Bsi0*P9?v$<3DD%&R@kX3x+Fc9sRLgsYP5FQyhQ52+#e3Dl zQ%cGMyh*Q1J?~MPr3?z%?t5_QQ87a(0stHEqg?h^jESDZK5rz?k&qAQgTmY@rghE_ zRjGK91~#+xXPne?R{Cx+UvkBRc6=*a{qkJq$3ODx6qu(Udv;0p-9!-t-uExNwRDSh zJue=MUe8{KSaHwJZBOode($dB=+!#C-NY(ygf_}azU@O-f0cfr2q=MiYfn14l4DPJ z*Sl2t9}TfAz#(0qu-?{5@SfW{mH)kT=2<%^KJ*rj{Qt@P+g}a-tW<`c4Pn2JVAv)t_Y;uiGQU;)vm2Jf zD{PdSQU7(M=zBi&3{zl&OB-`ZmcZx_v#yZOM$6J|TM+CB^ zzg^4=!)}wBV0PJ9M$b(I7LG;z6v}S(I>q0 zr!YcPU1kAIGfvz zMuEMa5dwfiZ0ugMume>O2#L!m*6B11q2qIt5cClO zfT!H-T~H`9Qr#0y`Qba+!g^?&bRviS_+G92jn+VpS2V`_dOrD)5C01F;h86w@aWCc zU5l0@!T{j=zU#W8@RDXfJGYO`E##-?t-JQ#NaZ3Hs7L8dYZbw9@+L6>h6C^#gliZ~ zJL@O<#o!6E3joUn`ty<4-ax1yA)caA*queVV9ZmGRLAdSlW z00HKX!0jIpw}dKadDlrChCbm;QO806 zuxQ-dIv^cBIr5{=YA<}P@%StM$|nwDUKf1}0ze3HSYFzgOR@w;e?Z99LOmpUDrr2^Nix8eQd)OJ{>YKD)#bSJFxBSR3ZKH-*(U}==)=6c- zAQZU+@l-fgK7R7FZ|hgUD20~*PM27KrUrX=&c#UKhg<1i`~dmI4Lk;Q7PU~+cQ=EI)gqi_*I9g$E$3kOn`76Xl~ z2h4F%J0?k#PtS3UWh6C+2?m=bmu~CLKRoxx8X>nh^FO6@;?!4HZTxsBGW^Ql%E{G? z7*?U)$FQ~?xkH)Z%tW6|_ZJ6k;61_)NJd?j4(M?ie4ZnNy#5}oIPa^s)5--t&<36Y zY<21f*|oiTRX+_Q+^sKbSZld1$UwH!?@2Q_>iA? zzc9bxDaJ0AQ^M9in3UP`OKS&qnS`$CndEJ^j|wZ2Dk zC^@E>qJ>00HuoTfgFum$DYibKa*AkFFo8FUQrxg)5bnG zaWvF7rhi=^+Ctt|hlI4>y ztFuD;&S?8wGcc#KvnVsHG>c7+=ezx*{fW%*sT2Ei3#BWn=o$<~2yvp^7uH5XeThma zt_Nw0v=TQsL(z@7{!<^9KfT9jEAPQPaUuuL6K$yGFzfJF?4DTeiD{ zwp8{~Ek-CJBgv+HPQsj`OYI>k)>IR&s+HyPav4WOvB3rMY;T0lul3pq-EAz`kD0$8 zATD|*^q?ZXJ8|O6>v#Op4f&q>Mz%7!M`o+>j>#A;W!o@$nkLUWAz(N_%!tx^R!`1a zDj)zGHj9mYZswR385DZExQZ(=3E6D1e1S?=-J%SlJ4p2fhzGKVo+qP0lHC5TTcJ*KXeyNxF{QEn(BFs*S-$Z2w09Q7)!0!mShQx{-827Z@vHiIAVC}y($4-GC4L|8niuT zF=2G1zgDV>)J4Dm_>f9;TP@seaex3kP{Ot(IMZ`c3g7||fT6)gel}(UEV>{IJoC9=T8Z$6pYE2jAAHA9pNlW?KDcPd^vbd=_wk0fXxpH?yM&Rr9jCf6-E_r z2(h!K2E=!WH_Zquh2~S`coY0-%UjOW*M+MpFWL+Zi2|oEhv%2;e0^ts^{&*=#WT+w zJap0*PyMc6Ue-yr zRqQgw zfE85R0wR;91S|odE43!Vbly-F{go0T1AK3vnd%Vkv>85ag!@eW!=&A${C#5KBp)tO z2@tF%Ez4)-$xF)QRqXj5+TTt*5Y9g(r0e8bNOz}Io$Dz_-ROfff16r8fD%{Hs(~5g z(v@cW8~)%TwTnm5elK;ekZ)q4>GJ?^5E6Hxe4P_mLI<7R0M-YnzP}oO9unKawMLCw z;FO(_YTe^|Al>=lUu$>%@WjcPB|Z2*Jw!M4%!2To5#{O9IyP+Pv3d;v(ArJ zfC2>oLdX%CxieTQ`9X_fpk$sXLmI5X^h`4X;9sPnv?SI#VoPTcYHuE@#zOw1Q_HZ*UbUV_sxUS7bkp0wjvTg{2e6LRN?jh~{AN$pO`M+07%_UX%!w7YaN1ojG zi68s$$3GI8o}K^eFMNx7)_eAD2nGV*e&i@|b?SKl;31~gXmq;08#V?+H_zT{y3XIX z&OQ)Z#x{E3xvx^gL?IYB$+hO3-fzT0a?b?+hVdv2jh2{*ZkE-_w|xtlb>f&LiLc{< zfynSOVs&`4Y4Be(PMRT8rOKLx2R^e*S)dVmjdt{1mf01<=-Q3 zQAX^NEXfZhZwSxm4K>%81s>MpfkIFq<%VS%|*Ji(WvZjUD=pOMj0+Cc?0R@nsqJILVW|x zM5-5#IYTR&nf~U&$s}@kpF-DWBc>DE+?wQqi(nKG>QXk2?F?(=d<_r=j1AxgMEkL| z;0G3onHosBEzm64K@%ikgbr3WM2xe|WKNGxc9T0Y-Bl5<=7n^s5J!slulxAU)&J_! z`|iB3Yp~WQdA!x{W{YtZ$uT3WkGgR^7_mbE65uorr?^Ztp@F7>><{3+Qe5R#L6bY1 z-GC^X!#!THjwqy+oQCE!_QqU7=RNy2b z)Z{z;xV4^`q2~BgIdQ)2^vu5-M*pC4@5rU!>l76&B`dL)0s`EtPW2k|VU1S;@+Fc1 zP6aHi4fZe(r>*E>b%4zHJCxc!GwEK*4Gl8xMy9pjN;ni(eesf^VI6*!n>G-00!94m z&W>@^&6?IeCkY6uzNp*WE?TW}B8SOtqxz(svVZ{q4^ZBhx6^u?<+_;LMrz@v{kWbf zy3!!l!<gi+Zr;ikl)0kD~L< z&~Tvp;(WYk!Dw7ryCQq!_=N8)wW|A}q+aVjweRq^zq@b$3nz@82>`Qmr3)A5D7of- zqrP+I>~yu#zA+BDsXU`~&l=U#l~M|N7SNZ~9Z~=avSKB*e_z{oq*wb_@%V7H1+D`( zCR6u7RljI;FIfKD{3%2ja17M{rmYkyw*`kPM+-=X%8hTa?PMQ&KG#s;7f z=>2j1bJmU8mbUG@2gb6@Hfr&%^OB)2rpF2*L7`z2Wdqd$}cf?{7L z^=f^XMn+O&%RZDz>1(sCLD?A&>8yq3kEW{=$(i$Uv!?Q#dFYuzy(xA&JfgU7tTuHd zOML8lnD}^Lbs>K&-7G8Jnpi6;l5E@aTJE_aZy_R>Qb4qpudSkDI2<)%qxDc>sj6azVwALtU-A+}0d9)C(#^5jnva^0T?P zjHHmI>0@598rD2b5tRBi(@T49+!PdxixAe=*S^RN%n6ubL|IPNL=}k=Ct5>7rogEn zvI0+1Vx}T0RM32(vr_Dv<3+?tKDV%oHPWspmlCH6mdphvJGy7j5&w6xnoG$$b@g|e z^U1!A7{B!BqF!ZkUnYc0Owwi}z^jtPZ4Y*yG1D$EfDll0yILtzan@F^9tC^V%B-#C zJ!!FIf>1;;$kd;1syoD5hvzzk2LJ_oJH6ULE7qgj;z8d6zG{iLqv}fBe!d$oQR(VH zY+x$BupR1A#*TFCCwrMi>|61qokF$A@Lh6wO%{oKpPXCgx90NNGmX@|rEUq-tDa=| zY|H0|l`e;9%@P~Fur*wt>uOb3+>xm6pHDH44czFi4Z)))&y!n_Z1SBXHy4bWgq$-A z+Y$q5J_@c2m#e1eh}fyr}^TamoEU&pNmBX+B$gdtK?bw5RD!u?hA(ZHitMD zy!y|E?uv8+@S5fSZkinO&wQo5@68{fOPo#8%FWT0UJu}rQz?bFF({fNXd;k zoGRvdlhpf@qX9NZDKHE$3@{i(2?8OA_QA34Umh<1?Gh4Qk|i+uLkp(2ZQXe2$mtvY za`no!gZz8TCj*_?Kxrz|975CRw&uVGJU6jTO)0HlYi0%mIq0RZp;Lh)`q zW|uF zSWHyp@sx}(z4wa?5!+qucUF^5);0y=Z{V7eNtWa8TCSb)omFakTSX8QJP6@dsIg2}K@uI2 zWBJ}1ue`Ns#9DTw5wQ`CTVsd4%p8v788^Xa@`6OTkShbl}T&&8gHXG2{&HyU|?*-Y?8ne5cq|XQ`bm6%v@vxzp-m|O)tNLSHJH& zo@Ynm%dUS>P~)xRe*m} z?T>_)MYDi;U@*u6C@RDPtr-5Yb>ZI?PEg_iz)welgNOnBhTd@s90!TS=R1wFmj5wjzh-%wPm6UotnaNlwnD1xD^Omjq^!_0Z|YnH@&9VJwD{P z$ak@=^Gd2CxzPBRRdhbu?^}38mj!PPZ7$b418sA*t_g&ks)b*y#Ll&X7u$gojcAy6 zW}1O#=TjFN!SnUt#ZGX9*Q;e|0L)=*2n@Mnu+(#T!ZK6s(0IH@Tzq^oKHt^ev$EEy z%X3uh+*M8KxbIxLn=#F-LmAMMh8uT_w>KQ6)k&4LhJ%9s_(9r#0Vif~H;%$BUhT4q z&9?^;i@ic!<$FB;kybayKy zje3vtG6c{yFiIiJIm?~iBbDq%z^B!%eh;o0E&O4HcG0;^bqp@CK9J7fW(R!#70yu)lIasX`khkSC$~W3(2`$S7aC2;ebBaFaW4o& z3wf;P>fe2anp}Xs|K3vl>k5K61op zmsKn^VmNC9yk6Krvp?qYfgznAQYy^?IXgD*COros38nPHxocAgPG z{n1~zFu3KynQvI;yP~eeG8&1@`j;ToW^v}yWZj7s%_JkK^LFyNLVvlV*&U&eSZlOq zu`8`sT4CO45HZP{gN(7im%PlvM1f<-Zn=6|4>erja?~EsjG^Af)m7hHpi1XD_b0;i zy+Yw^GdN{wZJU3OQYo^c;j@c>csExl)upG}spVW(6}*yn1@9s#x$+vmy+^2YYW&mX zluej6;Wh;uC0DY177&yjX=k`HZ>x^a)E#j{u+jCorX}=%-4UyvsfK%$-Il2B&!yI+ znwN6?@}c2@gnj1R#G3>SuV)Hd!lQ2t7zF@AyrV|_$r~kG&^F(X@qTO|` z^MaqTya)%|!cpkxaJj~OF`(~3Ak;}leyK1wWjVLRG|oGOOtEjEAQkP=*=zBT`hsp??ZRG!^3Ho zWfm4*ZXkvtT1Nh2E0k7E)sQI9V8sVatnA1n+fc)B+$UT!_)_n z8)3R>e|}w$L>$3xjXpCKo$VMLY9}Q*ubb4h9sA*}>pp+~FE%2{c4Kya>X~=R9|8;Ex~9d*V+ipFXo0#j|B{t%kls#we}?=00=Cf z(O5StnDd6}6J%rNo>-B=bPyZs)W+6uO|Z$bP-kVd*>kx}&^TMrwyhcpY0Zg?Z#>!4 zE4jPh^?39R0;7x4CDbB*&2!yX@q9mJ`Z1N+l1zgj0-?b1pvaI(>yglJR`TC&zh(Zm z9g6btaKFmXE^&17x>iWV>pamtQ0FRJdL@wvCF8O46SFUSJ)0b4T0d(VTr}D4A8c;hRZ3`HMl$+TE3T_S*=)U# z=^PrgW+D)Z&QA@gp_1qWM!1 z+7U@jVWM5WCgO+3g{inO8JA;LbahLzaX*4ySJN!k8_`V2Z;#kFt0WSmQqnfua(tfU#bScwuxLil> zxu7A>Y{9r(rwnOPnNrv-%^zyTdcJTKjPjW5P)lbT!Mvg7ddg0z7Eqi8PtjO+H>&Qd zCQZsL+A}p*V$#SZs*Br+MyT_xCHlnc9&M0^aDOcfZz_XY?Rq!wdiP|H)E)a zpH*{(RZ2?-w&U^uP;;e~YKviMO0pp!Vb9gd79_h?oQX`_X zGTW>f(#o;bwmH49@J6T8(JP)&3~&X8zPs`08wy5WhXd7rOeg33jwcCg;xPyX&hyOY zUE{x0@(;a5NHoimzZu&0srZWfl*Bz!>PJF-yOdCjWsaHOn?bWj+ylL{-|9a755_nC zR{zT1=>Pl|?XP~J{m6md#anNUA@qy!pZ>1{|M4fHAN^?bgZBmQvZ;Q_nq7h~uaxM9 z2idhBny&(-S5ylEKww)y8Jy0HbaIFN?h=#T5*U4bBFgMwfA;i5?q%s~ckX(BDmE}a zQXLPu2?r-qoyNYA_K9?FK4MfQHQO=r0aq6Q0I?)EUU%~mx5r}ugdntO!F+L$dWZrr zJPE8VTgQ{sV<-Tlnd+)KIg_FUBaX7!p0KjSoam<S4htG-L{B zp{*um`@)5Q==<@Yy=Oz^z=_1^>F{7&HzdTQeT{LWmsp^n)!CV?c6^S(9*7-O8~5b~ z!EC9P(^*<6JImDSu_`fLeY8m>7~&ERa(&PW!Aq`Kj_ zPDQ2@nb>FF`%4#=T@F?EI>oukC*M`uz&2Zv#EPq#qX^^X>|tN8B?A16n;~2fI2AzH zJKLx6pbm}55yL7)5`g&(BWJ>8_=g}fo6y21v(t= zUd#swi&Vk;_QC#vh~BN?aEPv0Hg@*HQN8;HlRcp;2?v+IQ=sqaA_IiEyYIg3v8N7y zECa&|(uvn~-&B%$O1yKX`)%F*yLRC-&Fbe`ork;LyzRXuv$0HIpB%q;t0e?-ZLZ$Y z+E%jTt>FTDQiC124V=;S8&K=|9t7h-zcy*+&n?Z>5*U45qC4{X z)&1wD>b|XC?>BgG`-iw=>-?#pITNuf0WsFAo=yP42tWv$T2?n^qP~kM0H@f2!DjPh z8UQGOoH3NahFQ?qu*rw5@V1H;vk~@$k%}@>i{4SvG>;2)#L=2KQdM_VWC~c;xoneL zS(kUznnpn>lmn)>zV-opzaCV!__%Mv&rSJIC zw#Dib)gTZ63S~#yk*((%isdn`g9X`7%hq#;lamWULG(VlcP>{^XUj@Vc6uB`wpxi2 zRf;U@GDJeP0XJCXfWf^GZH^GJ4Mu=kX*_=ibmd-tdD{uwUd%|HnU7AFLbEMjWCoAc zIGbXJ=2vO)nI2FIre7LYrMY&OIL{8O`@%iH(9^E<#+;peLhqK}Z99PyKblx^^}kkg zo>Y%HY@kbHNC*I<#Di!!V!v2PdXxc#fS{33E5zBS>j?^|0xFG8!1Y0NEJ>jBLVj4AZrlrnSRNH4_0V}DQ z3w5<_3G1`XsxHh`w5?;cW?Pu8Xi>>NdOEahh}p4e#fvA8JJuUX_Jpp)7l1B#Mgd@B z#Qlwt$bV28Ka$cOOsJn6&^|e=tYT& zse_Mpo`fa2ie}Vsc=dxi8#k;QaFk&TAq_e62aWktOLMgZMqihBj=gjH+FWkB)4t}L z;gs+)=Yz(DQP<);AIYhf6ePX*Af<=`D47l?Ij!jk0AL2fD_UZzMOhLUX+|==zTIVw z(y(I0Vn#$YL!+I@LL^!YM(V*(Q)RSH?AxmXXOqFnIM0FD;Nss|9-4`%`7rdiqx-Xg zGjWk}Ouxeg$Z#u2`t5_ZMy@zVT@MrNk4cT$ZV(s*DMYJ=$paF(TS6tEG<}fLgIP{3J}Xak{==GTkTg}D&9LytLD zJEZGDr?`!Hnq@?FDw?Iuv=^+~LS1M!K=G3oO2bF0+0(67lnX8xTHThLetx;8^?Xiu zIn!$lD2xYO+eErElfk;@etyq~pV<9Dim$bP@my>2?6>H<&qrnIwe-NYYn-FR>rOt@ zq*1~KK?q_YxGHJZY$@Lh0fPV`7SqkK(sUZSk;06^E_qMV&jtemMVURibI`!e}4uX}DHbZ|aiF~qIu##~QzecUjlEq#rODRg_h zgYcGt#zZbyw}jirDlcA$4)z)C7B{ybW+U1?dxj33JmbEBO?T+EU_B+*AnChO#x?hE z)~DCD3tFux)Jjsfp>&%Oa5rb8t3u+_wXXiQZ^e1jj1-3Zjp*>bOcZiupx1?37Zcp00M-mz|fH3z9*dP7dw5Vks+<1?U_wJ zhI^{zG|Gyg`>akYbzyn9!{{_doHfBtQZ+YbnvtO0^*G(+nvSr2tag4rNIjIRD@o0~ zcusRnX6>40yCR;Q4?7>!W8G@zbW`ZKmZ%RLs>h~vspcZjUADg!F1d_O8fhjrX96WI zgWE%LWX=Sjm_m76iOqHq1qabuR*>_(9g4dcmp!RU;Y7XqZrrPs5>X1P zfy-?+IW?L;{P!kNK?njLk|b$GynCcJL@*B+1E7>@3@DvLr7Xpl8-&U{*$^q7sl?}6 zk#b8NXDh?Ojw^`EP-%Z{$fNjr7`8lE<1O!zsi9$^(I4*3+QG%wCC-13Qa+rIRt&LX z33sPTIZrk`b}^0}5$)UA`it|Cbikao6hbaT*s>|_j@Bwf=s6r<*b=Fw9kbXFpPx+v z0@GoWnjMy%d`otHj2Re@_NE$I%i>33JwSB6s3u}oh7~AUg@4Zbu za^?bY-%v7qx>QFW64`&=lGx07Xkiw->*$j#8+2nl66a=8|HjulOLO%u1*3@Jf9A*UoSvJ1?3v?Z!|8y=R+(Rpvl7{Q5k9;Ki>_lvl>z*vHF%H8OH3~pA&)hk~FN8?kphGS9-g%Lw z9BYPTidJ{}%dymfWOXcmDt!F&2mkqxAOG&tr=LG@W@2V0zh)!|$<=*aYqMBh;TQcH ztu-~pv-h1EoGFH9D#3+{mhXxo!Q6kLZ=tFz)Rp;?idgFD==o#G`Jys2s}>sa#za%l z$)>(WL^H!dcQ~dOYErk!IXqt3*M0oy%%C*C{=fS0 zZ??4fD<9U(xps%|_}q@c+J#cE z(v`N4)@O>UhnRt=erh@r;7#n0-?f){;rK=BFOe6%f%5Ca!jB{bzVHejL&U4YMl5|`^-~Iv-Iu-qkaA19a}bh`72MFx_*9QHkYgQ z^@Wy=4t@Qb`+8kNl9_Ze@v{D(rsHo~zvB3*$*T)$ZT2>0;V!@+W}1mL)qxG&sAwmU zo3_Nzd<>|CA6^a>iRv6xT^zCDVt6qGNS4>IjhSK)004u#c^%#}Ps2lD%-4}6yU+b@*9_JyaPn9R-lPWP(&mN#eLzj0G;M!YbW zI6j|VsE1}7YG0_+ain@rrU(HB-4X_(O&&wNCoMJ&t@niWBgJwl2S-Q)Kq~~y2$dkdlG^1Ub3Er{2EVF*q5=-l3Rq@i7%+hK;Htisw znBdX~8_PS`BRX;Il>mr}p64Q$FN}*>GtLHdhx&6+s-Sr7a5O1`T zjj4(6zH2vwZM8E4+c0yP1hkvKK#CIqp3j8%wS9hvMjSq9c>+)-rCC|2d9>P3ub!0{ zZci;7DP#?oTLg%dB8ReJ>~OX#NM6ZRFE@||*bpq4UG8Ed3Jg$+7CNC-QYEChF6P#v z=3{f2%blDM)GaZ>I^*HqjHB!dR;&thq!gd)pk0?k$o3XH8_xZh~pw7<8Df6b+uY$%&T#ZkP>>*`E(* zGZqHRzA+f(xq6uYZ0#K$o)#GKUqyZ^`O zIKQ8*vlVSoi}{$Kh=c128EQM(8ke>M%k@Y-sC0PHY1<@&&yI$Rk`Hj{-r4l&%(;~p zj)smORu4b>u04x9l)W;L``08{u*9=^S_7qMPGkb<+ zFP0({05DiKd!Z6rH(Gq^=h^fHQh`-e;N zBYlUD#lH1)=AKQp<|VZuJ5S%1*&1iVrABjz56@cB8K*iTx8q!>Xs0fkr$&QDRFLad ze8#E`h-O3-8fNU0e(F78HiW8b;IHrb*wjl2-mjNdeG2GX7BiJt@3v%dXR5F=+!znF z(y}hIuFAPRmoq%BWXO~4@P$@*e=+kyDPwpyf9X<6o3%^v^xDhgNvxPV_(a3x1<5`; zA-TM_v44(9l&8JH718>+Mw0ljn6(K6R>WFu1J`uzRdjJonGVk`1+!y7s|2siG`1(7Q706D3@7; zo;`~_TMgWqEPrjG|FXS?A&P9F=boqpiHCrNQb%gr?5cR@WIhBe99f9|*qZrxz^rzp zxrVYV(j7_kX3DBTnETh~M%6B2=$fHMR@GSqoA0eZaX8Hfy=Pwt?cVy4``=T2__4>A z)a4uE58$<^$U&tCl-}46hyh&hfu#2L3p%}_m+YM-1n87+Y|-M-Y~JXEA~Yy>eeWGV z4=$y7nj4h+p>g92JjJW|)ukQuGHIWB94I6<|41Uei(qWG%S>asbL2qn(7#YuUz(qH zH5g?uGt}Sr^m8xlJ2>;e9jorSd+X%X480EYAoLO)JlLOILAX*%k=`E%c1w(I^A_NvQJ zfPvX+aAmAA6m3seg1`V^sQ09@E^ivC9KDbL4uFAkx#;M+YBt`>S5#o2-V_#^%8rfI zefyIjLB1pvMx?IJ9Xb&UtM0~);sbjNsjz)?B7Cl-uoZE7B7FakPaPXgWQGJgRMcvO zHEDd>FRclLDop^$Oq1DdkC*ClnHo25Dk^Q&r>}xh zHN66;&9VkY`nd(krGcqZJQU=&tSs#ax0{CCmc@o80R@hsV@mmOzVCW4p@~j{Z$DOF zVfpyciP0T{3-|R;J=g4CEf*$gao0oFU@Hd8Wy&2z2vrgFt~yXJA2~ic-VA**apCjT zamT}#;V*)d)lk1;t`D_NHbM+T9!M5*my`uo-aJr$=0a-G96FYZ+&NaBY-)zh_&z>f zirkiJeyb%R26UJGxgC?I&qVS$=~z1|g7^3{eaEtqoonikJeA(Ov3~n-qpPzUb`~y8 zMs{!cWVup4dSa;x^$lO0ln;u6Vu7z$ z&%ER3!E-x*S^cXI4Bj?ZA=r6Ih6V)?gV0m#znuEq(hj--9zFed_rk%z${mOioz{X? znDwpJ(zLwY&GI)POdkk}JjXrz+)3Bc8IG=5x$NT9{OaXnFCIGw0OMo*iXxvqcO@I0 zcoP@qCN9j$3MWfUE>{JBzI0%3`RCB3C~+A|5i{5Yps0AcIk>;7z)Z%$e!3RDTpUfI=LxHmm0~;SxEK%s0h_Wb)1|pm zgir(wRJ+3Z(Q2ixm?jGdsx5Kvwo-0ZYv|ncye4sEIBF#nPf^_!8)^%ap(FcKLqi=D z#GMhDXgx!+j1aA^SM>-qW4<2nYa0Sy&@<#N#of|s&1%ok{N$vQ{Mv?JHKfRE-_*>- z$2|AVbG-z3=U=Zo_Jw=C`-$b}$3ra^zuvQ!L3AY0{=m@mFRnT*vi_My%<^vzB=vnK zGq8Q}XHE{!@Be#E#)#EgW*YH9AE~;n1ypZhHssXt>UcdG(3_6h7wCw{J6nxkYjNqr zwsfJ|Qge*}FhBt5RiWLKm% zJslVf>C=YhU!idTf*O`^d$P9R%e!J#H^=Uuj90tj*1>ws5_F3L42I1nWIHIkg{}k$ zng%}>>kUTqWx+OA1EUSn!(&r4$nWc?3qJ-FZ`DSpZQAe(F=u{a;5qGuUBg8 zm7(#C1wD0@w_CTlzHpCY{8~$1%oDXNE*dbSs+q57i}19qi$kfF>*97p1Pq>q2}4%& z)u(5|z<_NsoI;ilb|z;u1W<2^{Tbujp=75l@f_LnzhI=e1bM*TN9PQqUW`02zy2Jcz*3-|VUOX9{ zE(P|itDT+=`ZkhOf4HwVJEQ6@yJdCb!ekI*SUJ{t{<(B2YS-q~XpG#pW6f;wbgkN5 z(wjF|RtNC>f)v8eb1eG<)(6cwEMOVFC01r2yIGkTidwbH!mN;bY0$SN;un* zmo?;7#o&;${BZx^iBxPh?28`T;6t-v55N;hZA~$Iq)%YLiIVE}{2}(xKQdqZllEu+ z>HMS5A3xFUb-@3@@7>gmYyvrfJ%)iVhg=EhKD#zqnQexB9{~aIp{T1H`l?-5q=->v zPZeE3aJLNAYla}po-7f=6UPRc978H41$-#hM-W=5sTHd{5Jp|y)4PTRpZ?(QoLX`3s}-eQ zFWuHcrTAvVVaI~4Z@u?hKeytn#NHfrDKh>&{qqkF%{*J^t6S0!`EKFps3?aQe>Msy zt=d%AiUJn`HiWRcX1Lcjq(U_UJhC0OTvt7tT@`B}0y@KVY!L_`fd8Mpua2|pIM06P z@VVz)=DT;9NsN|lnK9rr;51DNY14jfn(|lrnxswIv?--2r)knOP0}!$*^+F_VreC< zmgzFnVVLiaT}dljWPvT&`~38Wz4zWZbLPyMdFF-ZT@y+ctIlNExqRTG9?1pumyfq> zZk{iJAZzp@a}9}dA5+*h*=7@{CUYz@RyF0PC9iFxfT(Y9pC})~^{)?k$(( zm8J6vBCRR+#JoNS3-!hsZ>kNzG7yU$R)~L?A+T+{rH198T>o)nZVpt!!G2%Qd_kK2 ztK#Tat0m>y%R$*FuKxSBzk84W!L90+zFJS8**l>1uM@W16TZhu@cX2Lm(jL;NILp> zGdO9|p~K@lUN|s0m0Ucr<#N@XFCKh;*Z%Q|g|o&&nIQCcM~|GyVavEZ^0wxM zH6{YPsfyO7TZ*$c-!;XncfR%i#dc$ymp|z%HH5}9t4?~@mu?df9p=^#VzJJ5%6FIo{m)|JrFLSoqOO4h*8G#lpHoYe~a-3R_W zy{xLx`BBK7s1&cdbl*>PO#blRAGf=%ywY35A%CcMbiVF7S_)iFJAy0X@-#10 z@e!MF0qq6S!|~3+*7E+DZqud!5kMdSw5fOD@x5)c)8d9mx+Pps%5I)E`aOmH^HIYh zm;2&x?U)~#2_|x`s^qw#dAlccSLDECd)je2rnM{Oo~fU#vD)6-{%=n5yX1>R4r_CRjEB0A+>! z@TN(JY&`yCYpwRx8TN>UpJ*(}>ZAbaTw-=205BP=-cx8AjR6a(SbF-V<3E-k{_EuD|7YRp!-&-7{0}nFVLmS9|WM z_SB4!TX0NHdN^8jC{%gD_PaW!Frc03rb}*wcX)llo~09!QcWIy21qB69w0njEvANjiJT8e8V~_C zY6{B{XXWr@ldLkcDWAjC*EXewTPibI=R)3dI`zVW&S=ePHxAD=0SOI>sn&(9@%aK4 zB4SO{%|nUE@?y$~lB>;G-qM^*C7g$6Lrd)tP?Z@MqqhedGbN`_)NgZTpWGjvON(tm z$>Y)!C1J4^R7GOCf(-|6rHi~nH1CMy^emCi2uCKoz(BP@_chfGgvv!$R;Z@1;^3`J zme19>Evt&@0$<3ne!m{|YlkP?Z84c=?1^dj;81D&NWkNf9CqaHdwXZIqxsy5cJvj) zj06k1zUihLSj)7$KEv%*UA~Io*;O-s{cw7$PQ8Uo17OQGuUV&a7uWo!u}?J>+sy)) z<{3}Pw!zc^Da6{qdW%vH$Rn5c5N*rW&pHl%Hu^IypJ_5y6=#tmfoXzaf?NR}#Lm!Q z)l8+;>6KS(1uJCql3zWuy*)>e`>`9`m;zj0I*rvQy@(4kqic0c-+G9aTrl z$xAE^VD%W~p4=hj=+|4n_OHsn|J%zy*)z7UTx($SDhB>nD%IhkepVFwy`@1R8?~yF zN4=VilJl>SSSe93TqKmG}M@!@|zf846;P|f|5rxW-_8>l8R1MtB&U8(vgGB znY55eh?6Hg9WC|3n775N4Ybz%5xKpyVK(ThOx5db|EkjLQQyL-uX|n5>r#tZM|HiQ zCTtls=$XQEy{o@<>u+hS_?m7cJ-!@FYV_v z;|N7pojMUEc7F#*5lA=9d-_`J$xM@C2tZJP2*AYFzPX8oaJj|-3AT;01yQc^_YcmN z6mGuiw(O-mHk!m6VhhLTLN$p41VBJTqRVyR=C*|+eTG|-Y`^{PCIp(Fo0OoTOONq6&u{<;nK{sb0O>4 zv_3y_#K()KTQIA2h9wP34{X^IA6+)l^|RL0h01?6vMD}OMC zzA;}bYG`F}u2CTBfxz1yv>%Yp?F_dJ;B4gZa=WD+b?d6cxAeL;-R1fDd=hkZS>aR+ zh6)}*AbE7K^3+P5vlXn6(MyLv;0%O(Qnvc@Qy=!sd9XzwK)F?E*R-FOXcE8>bR(j9 zOa5Y{aG?Fbw_M-+PUZ*yI`PAOGy8Mp%Ii}$#?+*nhIl{fpE<%D8EHB`8Y-0>MTr~i zN-w1SriB(WnIx6z?x8e3^!LAx(6Y~k7H0KOOWSplgTPp^|f`fRzf89^Ee%K~o zb9Q-h?nOhtS~6_^cg?;(*|6tzn>m}p8N()C$Xtqjlp>i(^MG$?7<$_ZqvNhxo>|wEDH(#SP=KK`Ty-P;@JtAZ zlf;4mNunbzv%^(BlnH7EwcIj_NW3B{o zqoRII6!dh?QED)KZS|T$6|<~6pxwMB)6l54=Ej;;rEH$>UtO3z;bk0FHBGxY|JE%X zW2qHBdgX`>$=-Lz=I=hTb63&aQ?`;a!j`_mA+BY#vf)oeKFL&_hH}2BeA9w{cXSdh z991W;yonc)TY_(I*4C8^@QMUC8v|B>3TS()Pg>T>d%A*a8rO7sW;&DOSY|_XwWzoj z-(XAtrZHRPSON$hq@L<{&&WT=|KS($Fa7-3pZxoa-`u(Xu=%=IvwZxir{)(j;}c;? zp@0UUp;Y2)vZJ#-59ZP^%QY&Ia}D(77by!6kk1Hph3RZBF5Mcy(a}J-x#AYgMKSfG zM|_SzB^FdMK&{H`dMe(iGl{)HZPryf;azvf!uI>-Z5zhNMb)%MzZ*>)vR`zp-_`m~ zj4tJ|8v51BO8Kdd$xm;7@pXPEpW5`&2f9yO$~YMEvUQ&FhkZ1qQncoF)Th!6wk*Il z00xA6n@X9I%hXP4)Z5^2SaEOV*i`iJvFPL>-|exf_DCHl==Kzk&iSx)MtORNV7kcK zQ@dg}#b-ppfK!{434PHrqv%h))S6mwZfTu^<>7)DINH>T#2L?+gafla7nrS)2ABXA z#A8y}Qj4=(Zc&4Rf#WkS7iTs_WU#=p(9vo4U`vg1*nnW~34ecUo#bp9a6w{z`KQM} z{PwvapV}Q#HwP4H+#BYtL6=Td*th-EbUZ5e-jFL-Y^t>8SKjs8u@?6g+Ea-${;gmI z*F1cTcfg7%#S7$zVgqV5xZQb&kL0g>C$MGMD#GVHwb7RtN!+P?ce>)pZxjf_J8@v^t2(B-l*z9r9#P4za4GW zPxA>2MyCU9@hU4?OLk`xPD}><0o5N+mQ>9V96TCo>#R6A3j+`U`I3;Yux%YhSgZo5 z($jO^cz2E@fC0#4`JzOHx~g-t;<25Pmw(XF8j)|3hn0NGD@?F?h zCr7ozRsHwvPrV_I#(%o$*ff5hsHw=(->|mEzKeuLP2G1pzzfncEub@B&eL4a<+-~&imF!ONhYH zfO2Ov{rDrXJ%%#D0+ZMiztS<)}2)Nex#DS1&y^C*M zdEzU$KFBB{nfvd(;dg%HgTMNb_k8qM-Z#9e?Q&YPlp;-2-Fzow0?k6Lr8d6h(9^;b zA7eiD;lv;OIVPEI+e z#>B!TUp>YZPS6WCH5)_z%ee*fDv(hE;ji5GxSM%nq*z4S`0DMCQN(MDLb1-2FhqQ~ zSY$29sHUmaq2yp&ilz;)p(9dDIPC+qtzEn>|tu38=cjkV#w-5mPrhTvB=2EMYn>7V-| zA8hj8y7K5(aK&-OV@7eYD$mYM*BgzSZ`i!|;Ne34vQln)I-75Vn`VjmpS1k=^VUCp zVe$u0jO<;=Bn#F2tTo|l! zk!aaCn@OPg8{5=C;4*Jve(Jd^J}kf3f9#hBM=s@;-gVISLFoD@^!*X^{~-)~9J>Aw zw0;Oew}99QmI~@cCH_Yoa!qG;XQQua4!3mPa@y)Je^^>L>JYg3xpt`(_Osl&o+|Gm zdz;J89qh7gVkr#NhK{DHNNFRZp~W~(0009z+p6U}Q_oZV-GzmU$1;|pOSg0;7v`Pm zjB}C8rt_{=ZzUd;bPTObdG|=GxtRP!fFe+;Lf)CRKf`a*gCQi8fveMrCea6nnK^YDShiu zPML8Wc`1wtuq~oo;HnjNV0Ecc<|=iDM9|Suo0)N88+8npCPw@&zv}gCsZp=LS<3DX zi(V=2Yu>oIZ8CkLRBBw#(s8nW6Td1B|vwsgI~OL-m;-fLIU z1$}aY6CSo7dA9yCTsc14#WvmRyX^u0J$E~A9N=Ru4qhO^FhMo}18@SkBak9SzMK3D z-G0qvw9Ws{HIa`C+IG1TtCf*lqw7_$bWf1Ju|0gRhO?Cw#i$ir<78BkD(EA4(PCrz|_NL`T96fj9FR zVUcs#I%p@2M7Vl0pkU+3j#Mn+s{JNPXS=4AHQHiz~*q~KSzfzzFsIoL`&!P zQ~xVvC-uY&mg!Y=zi9>v#b|P_>6YPQYfMj8g;K)-7Fy(j+XfPQkA`K1S@JhvU>JKt zU+UPX|Jcz`NR(Ii2ys9?V|CQz<8 z{DQQ7Z3fk>7xpw;m;eI6hJ1~?adj?H6;+J{44lK>-jb2hOiibfNdZUz0`e7hV}CJS zbI1w>1e9ycV0*Qyu(pNnT9tNll^$))mszF2hE)PIeEKW~bb8mFeiK zXcab-ajrW{ZQCl23s@6dd4;?ve0R6wfezv3CR#Ss1&LZoe!AM=2>NEv9irjF=O=pv_=E5* z<%h=_$FJ0-*9m=}Yx%1WFc03LuIrLIy%j#9L)-@u7w7^IZU{wT8uooF@yX(A*S&A| zzh`y$PYNk_HV?WEh6$DhmIaCi^#&+1bVN65IA2x9R_4G8u30h)0Pwc^wy_NJ@S}S! zzvZ%Ibo2#Ze(}JyKa{$vG({~9-zH0^%Z@ixZm=sooABEv0sMptvG zx2e?bRYijt=xBI#GhrZ3S7IRQSQQdC@|lU^&`S@P?(Xbs5`g zm=0OGtJC&~SET=`xtDDFN@jZg?&|&bw$8qWA4Kkft>1$9dw{)&cmviCkvpOJeIU(3 z<9ufxmb4U;+L4Z5WG^U+iMQW)`mxqB^@%4G#f!0*Kwd<65OVtc`q91d4qv0Qy;RY7 zxkk4%HC$BV=tT6i43i1*cr7TXheyJgKnqEilhoD@o(wB6fUnM}EXfO}UhWX6PNUW#p7 zn_Vahszd<^wt*}Ht?ns}O}T*rtfPiO-F;)S&np`S0tNz-mxG|ddd+QKbEH_DFe z#BB0XY0#^Uqs#t|(517h%lYj!Pe%XW2H}$%L+_2i4Nhgf4{!Aow|4~Bg{T*EnxwDr z(W_~I0F$BZclowetLL0w7{Kd;ea@r*p8NO9Dh;{}tNEV4Z~4nLdY_SmMg?>QOa+Vv zpgQ;k@Oab_{L+`xpWapY-@NvkrK2P6t;3-|DkPoN+LDjw)W1asjHZJwGab=&MRlKI zhqrRoF_T$v9V#+x$(o%QpQ!tiP>q7=x^kX zMKZI#YT8wta|2 z!s@?)p-%z*8cn>k8{+QAYi2XHh}aP;-UN+B^0~bqk5S)!Z!2%sCe~lS-8tY%e!#rdnixfUb_}%>#w$1A)Cq z{g#a=1nr%*lHSYcC>X@L8Fq>&X)d4 zBPG^~Y;?Gk-5>P!RO=H?mLfK_Z&-VKWXHiV+qkqq8hnyC;8V!LvJHc(H8@SDFoxOV zVQ))O%~KX>UDYx_Ca`YoW&X(9Hq+B@1Vb|;|eGsc1DoT^FywgDR$OolKc z;d(kLU;w}{G3|cz`#r0~;_bsZiXoP#4@818GPFd}yF@w>010E0VKYy6_)WLl0P_qo zx~4mooDs*T1IG`AZtR_9_>-AQ2E-$^2vvXV>HbQVThp69W6!f-*Wu`UZp&3$9N8O+ttw!Eg(+9>y>l2L+ok(f7xOue3d^a3 zuKFz3lfCm(zw{AbFm%bU{K>dF`&En8iuThP_~jw?_t&_{QU)3lSmx;gR23-aZuKa? zzb;HN&P#6p)(HB^&HlspMNhmVKK9P|x3+mV`0bTpUk=@GEQqt z$}|a}>l7u{U4E&Y#imn|J`lHESD2ueawo1}1*T7Lda=h-xroyc16%$Vf;V06^@LXN zZh++X&t)GKX!Cz3E=u=Ga79j4U;+Sa>T}P110j(hJb=8S!`a$qjUH=7m?02F0AbpM z-zVp0oXvqU?J}|@5i9^3ZeBNg{CK!h;ZC3U3}|Vuh@^JxU}(+SbgJyq6cPvk3*26H zD4O59r%5-+V%g#0^w!q$T*?Cg4#B>mclN-Gv2ugW=A5g0lQMGD$|p^*7Kl#$w$+Ja zBf+VJNCOZ6ib=2p?r5)1Ew~nWaG}7h9V*_sK8ur%y)VZ~MZUeOYHDP;#sEebqptq) z^pqO_ES>D?siYR1l1>Pm6^_Z71+iS>28W6yiF^TNaAUTur|KkdxUCThDr8EGZOS=R z%H3JxBMNfrm{Ven{u?&+746hQ@{+xHr|h6h+ae+e!1xlaq;E#cs866jzR}-l7ob{O za-g1W3jhO{#!zcuv|Jl4Spa}YdUM43{LR64ck%5mphGArhy0zO zgd16Jt>BSLeO}?6Z2^I?cI54qfYehco3&Bps6uJcU|0z77HyC|Faw$%kWSFY|2*^Q z7i)X3;N^ZJ{E_X{b|{`Zjo$>)N0_9vyYZSCaJ&Cq9&~rTifnu#@l*iOjSV7Ql8>&; zffZbHmQh=)9y&Dr-1CQ?erErZPwkzY$XtG#$#kZ*x#@Zt&|KAxBYT?` z5?)Ow=Eox)!>Ln2fF!`|iI6*76&$90@-fVfhQ0BMgJ06EGcA-Hk4A=)7ytkxu+ql^ zWGn%`it?c-__!f0t|pHfPi22deoP8we5epqlZ=AcEc3Unc;|xby!HcPltYD zAXpgaEKE;&_n+`D9CqEYZbo!ji#lKHdvep`uDZ-DZUB4s$5>Tg-Jb&khC4Hjlw%?1 zqyTgijU0+^>`Bn94Hkd}oM_$9z3~07_csL^0hhiwd1!!?9YA6`k#NQ|NZ;t-~BVwKexAW=*o6UAOym` zkZ`jFJh~KX1pyScFZRir21g+WtY8J#qGj|dzyf;1>b|`P$FF=LwX0$qwKC;gK-f}D zM;G@@5!!bMZS$jSY8|Kw=sV z60okDszEoTceU6)@oIEjmI{^P^c87pdo1zueHW288odvOK6NGU!MheJN6wnhL?ZlB zHab!DUYOHHhg_cKD&w>*A~EZA z6WYK)zN4jZg2q8aXQ%m z4T;&jHg{~yD|*cbZ<{TT_*IE&$gJF;Nq}mN?HedoD_ldOF(AOGtGzrk=e7Z`Np^IU z6SMA)zDiG5b=#&aJ`%{i9OgN*Hti}cI2qAo9Y$%!#X5D~t5uHsxb7;Ukn*^Pk4f4y zO*C&2V@?Va!)=3`Hn(VmJd>(`{aVYwU;unFl^!94mKhOgg5(fMpNuZOkd^MuXc=vF zp?8J}R(jVd&%q*7<(GGUqb^n^32dbmt4H<7OL z*`)KDj`UbYjoJUW}@)-Zq_{Nwz^I97Z zIX5`0P4dM(Szfg2_{E}hc!fx<;F`0HUJcahSdwMY?Y>^dw3IJc!ox1t8G>?im}L;%TYkHaH--NvbMpovMJBOp1Qy1l3xX%eX^PoO6Q*f2phs9Ir5uW{AJL3Caz z-E!C*x(JIn$-%0>yz;lP`m;cu-E6!ubWwJCK|Es|2#Usl0c;DbP^ea|3aSnWYyiN3 zY0{2GD>Em;^vQSW@bPGM!n=K_9Q12TtnehWTHBi)AB|Y{(h=qGNTfI++`4w|#^Lz` z2ZM%zmM82q6n4)`@jC}oQ)2;HJEOYFkt30qs~!w1tNU|o1C5;svj7vLL9ZY;N99Gv zM*=J)#72$XxH0#@mN{v{J95lFJLVZ4PMaqWKl3x5?!MAu^{>Q&i{kBQP_Y1JlcFys zf9L}zwgx2ig>ZJnUrdR$8dFM(-oY{gD2==MmIlXJrBOfAT&Fp!yg$ecm5e;ER2ZhO zEFBD(Ue$UkrXHbtN4EXZra$`I-~RQxZry}P=Cz;hmf}aTZ36(o2$7g49`uQVi=-Wh z;t)Z-HSMEbmUIdXoX4Ar0c^Ov#rf&YVV_=xQg&%>p`{;@^)f0Y{_VEtrqF5gDx$cL z^#y2Cg<9h*`vU^7?1)+Wy@3#-xHs95_Hx|&18pDhL~izO{OO)Y?+pF7Aa6}fP@~6T zd=yR`hy0w|Z{G9vrXStY@fDhKz9F5QQfKO94W0Y3BLXmmPblM;X8hp=6_FREsUirU(A{kQ`#9!)$JYMa2z7VunJ zFbp!*S~*#)9%?nNQend_<)w`Qpi<#$H8#>-#<1vI#S2qD**2V!yhS$1_jrl;Rb2iA zXXHvXHRLZ|gkk4Hz+Z*ncRmiSKXdk-=Hg0&3a=vNG;LzQ1b|bJa~b~RfdcCQeS?KU zT98!o)YiZN2rl)R?{{=Nr0q8*NCLnD(4oDff^|qH-PE#K@zQ}NmyXtV7E_tCoG}7^ ztuimPH#bP)^xi-M$OiS|i!E>4Hs0&0?0uEc}81T52GzHt6R8E!prnlDs>}gWNbL%e8H& zmLm?Pm8-vL29u(=Ukr3V-uB-AcHa8W;g7th^&cu3dU71HX}}mL01|)#Fbqg8z|1(< zwfHS9f5uR602MnVkLip~`0!bu4+5Y4K9HKT?J5UX#tucugAt zfDKU1Iy={-rGhB>^gvV9AItfp#g>6&X)s`RMX&NyU<#RIhH(YzC;#8I`=gHYyQmOs z_yREAt8ynoCrp3wEPE(MUpT(%0@G3q#@n{N;*X_W|0pfj$&MbHU(B`!ZGo!(BjU$#V=qzKm#cD{R z5u+v2F0||;r>Nh!I5NZ5wh<3r&uDt7VP^&}_t!b|hX;rd-HIri~a9$6G5i^DY8FmYJLGo*(qfc+5Am ztH~9X44Kg++LY*Ee_2fnicGP*Ax0D_A*uyObWKK@^QZ-fx4&qXcxB$@TwSp9oSJY7 zThhkiu0O1o9?+|n~P_~5K~rEO+KFj6vcZst!rOB)cw9& zZ+p-1ZE+kCOFT`|3g1ACp_@vrp<>IpurU6c(M>-o32OqVKR`mGu`~nDuy6qgj(NhT z5`<6Afu^3FTw(x%pg7^16WZbs*_7i>zu8WxpsMHOqcnZo=KpnuxwJZy*BTro^XJhu zp9HrZJzolCbBKD?prVuVCTg7yIy*zYwu(Bfn5Eab!!^6SEwq);Xr!T6 z%HW??`H3Phx7hHPk+KpCN3m9YTJ6mv)Sk9saDUIz+?k7 zH$zT;JXLveg+*QcrGdJ}V=1r9f$)vG@Lf0ek|d!U1^{eczvjg~`(J$Vm@gFg(0lKC zX6Kl#pK<1%OC-BH+ODT@#nxoz;l7p!>c`qo8MGE=d~Ll&w?{1%_(euiX>hp=*E(33 zI_`J6^iY%Rb=A9it8L-2@(CwpP^N;FL$2AI1?hFUeYdY&mI{~O&V@ytyz4+{zgo8; zc7S(1l=r{l&mmsEm=SpOAN2+;I;dz|qa9klpc^W-0NVha%_T$Tibd|!s%-*v4`g!- ze#1lv(4iOGdWKW?+&DE~bc04FlP==S1--MaOxxCDKkVIf(_~{XJ8~?1iZpFpn<>mW zG8N9+9bL11dS*_@m-)pQNeke{4f7{nh%kcI6jBN~o?LRD65~f>1M3&2raZb$yz}M+ zk#;=4FF3d*k(zN~8<7ArQ{L^pWxq!)6nF%%Fyq{GbIs#4um!i>lyEheYTC6h<)Hw| zY0=+XtY+g2bC@ntfRh8UZz@)op2_bJ`U1QQ1+-R1rS>3L}FxMLt#+BN^_*SW*r zD?Mg|{ddiO8LTn&I$#TI0Ga`(6GqsSLYw{akX?jKW$76b4BQsnI^5j<(d6$xTY2gH zji1Q=*V?9NG`234Iu+1y#^J>Vh(|%C_m5`&ZG|XaJ4&0q+0t>n*g+LrT3(+%yM68Hg)5*!;=Ewqdib`hdnch=Urk0u`oak`9^ct1 zvT2ZVjbsYq*8W`4a81v7R2etL>&dBr35Y&PE=A4`hZ+Z;=^{?7_mvpj4-)js$Pnnt14` zPD3Y5fK>yf5QF#bZ0YDJtQtx^`%K58&=Coc&N-S(+`vHI$(e4M8aWcM05p|t@2iX* z_tF5GP0Wt_`d1ZpJkv}9R3s*!cHDaBtVcr9@xXXq=-xidGC@lx$}>)1YgP1U^$MFF z4R+l+mp|?|4WcmV@vqG-?2MI0eQmcau;XTF-0KL-VnohWK9UDf-uw1s75U43i z)@0kVfB|Jts|5>gOI0lPsmb|0N9VD*U+`|SJl1T3akEqQEo$R@#Ocs>*Uvv(`+Pif~f z0xyW2KfOY*jttu3Y90MS!^wAeux7;#YZ!qbs~%fIybb=5pa07xZ1(p#J#2`UP$ zWEoFeMLHB#seO;C8sINTb_TG}_a}tFk|6 z!zaA3CCxqAZ22_(hP3<9HZ9AmJ!St>tx{i6k1D=rqH=3Z3TmEbT{dfzUQPFDx?9I} zn@u_h12GaoH)vh5nc-wTmJo?ugECaqWA>wQ0& zAvEnQ?75tS9#`}h_x5k(e{}wLMAkAd&i~e6!aKts`jr-^YvEu1+16_-Wc2cYhu~U9Rx=32m}-sX0W1S$#=_pTbK3{94NE-YQA%ZDv0ag~!lByq;V3?H z@9r5+9DcgZHmN(d&pgM(C#T#9z~wMIn~S3_bfA;(VWrB?>}$GZV`3rC8znB2axW`f z4$gvKv{rgsOW9-La+RY2EE}c{$JX4Gn4fiy_M%>G1P$D`6JbWv!5oOhBZK5Kt-^J`mtb zoW+`&Td#+e*;}S$aopvp&1P$#|K3j)<_o75lanUtw=l5%LJIDETp4iHXcD;?QZnta z669qJpaQ@TrmD9_0x_Bd-8_rWm7;(bz$$ufClAw+%7NoFiow zmWMeD4kHlzhq20zYpf>uDvtS==56b-NLE#-Yk)K$i0$6!JDZxnTAlpk?6h@`@YZh5 zH^}+{Q~)a>L~|(uUr6u$)LW?;U`t%U(fx*y(M1&WdI6SfG#?DUXB}RrpTlZ~0jgE_ zdGF6ZQF*4ISI^(9suvHYJ~zqyPe|Ar5H?zj$S8Mf9 zz&{2_r<1cRyHY)iJ2jQg#vqN4wL8b_ydKN{L}x31u>c#Tt0V=Od%AQs&+uT})P zMlUKyszuS%38AT6nes2%(zK!=D`x2)#)u2AbDx9Z!OJJ3b)E4r=gn+jUPC^$uIvBx zU;p*kV~<&uwVazSEG+!wCqKFCuDgEemwt(1mc%OJr-K;Xp( zq^oRUh5({KUB8nSLU(PMIkpfS8;$4|L}E2;ph8|Gmf1=p(FRN6a>iw1Ks(xRx?zSQ z@R146+U~qubXKaT<4s9``J_wmnD6_*kuUxIW&=*wu15fhP8{DC|EUKjvSY4&6F%zX zPx3iFFzr~kA@TC=W)q;LS=us~Iq;qS=$dRWsFd?O319=vjRtx)XJ#k;no1&o*-2kZ zU-^UY8q*F26XQY7sdwExnIHFJ6IF9U#H4*qwcM0Pk?4Bf5f~_?4hQ5SC)ZhDdnGaD zk&Ary+h*IEYg}3&5BrHCXP)pFIgZ?%z~ep`^&9uk67w$dsNcM+K@60c5x?fvrA=93 zPgo)C@@@0}C)$(>m$-k%HRqx%5)6XY$?yTcXWA`=l>BfWv)DW3revlTK4Cf!dHs$@ zr{+KX{asqEu$+f2qoik?c;8aSQ2>yY`ab29EAS$(%x6I}PTPQG$>$P38Xrg+>ObbsF1l$ion{aKScrN}ULgcPAV7$^M#dq|G>Jf; zhbLM#G}Fxj;tEi`U~9HnubTCmmYA+SjIoUXFgEQsql5U`0YMAF+ul*}Ig7=!1$iSd z4JfKa{AWH|JGx&!Jo2Wx_t%@Bnd*1G_w=8C_KSb@cmH+Z$gv+k`lMFN9vV4*^9`GR z{r^1pYrpXJ1BZ{=+F9O{xkR!l8outvcWNO&yn6QlLXGFz6Hj+n5^lB5HuAi)Ge?}R zYzWoykl0xw5k9#-;@XK24j8Y0hXauzg1FqZHLvg&Is{!T$<}rK)1UtI!w)~aoQa-Z zE^Yg<#~%CSCqJpZ!Y_3;$(5{fK6NmHpw2}`Ny;*m)4P-n5bn=5vd;8aAh)A?ZLo3M zZ4(}k($ZF%KM`J@D1rdmd$PHyfQf+wDC8WI&v$I8-r{0>2L+JNIrIkA z+*w`BKk!GC)+U)OcvIs+08s0UR1-s8MGF7}bDC(=E|m(af6M$cLYmRvlMd z)ZdL9{P@=%)@s?ang-u$)blmL)~Y}ItnygeQUWa?xK5U>B7o%})B-#YS_)2ju?byj zUJN9`_7^7fHIGgI)q?S;<(lMtNg?ow390qr%oiqfY^vAPJ^pU6<5t@Pa~aU|ldlDW zMLFO~jZT#Qz}>rsKf5aGPPz7oHU}IFfDz!=B)WhB>}yG+VO*Ik8WMSK>P*^jTp6w6 z*FY$-WmtOEHtLp9UtywG8%#%pUVTGDI(NDuf{FsNpA&iq-)uzu4ZQYOzP;=4@d5x$ zO=kb?D?fa8*Gpgf&X0HQI&#)8k4-C0vB-5dzNS)s?4=(yvZ5+2*+CINZ6eG^Ycy}* zlg~iPI87T1&GnOi!Agk_?jI5NyxvD2isl00fy-=Ux^^K=yNmYn{MUc|*Wtq#sPJ*@ z*s=fo&;LBL{j=l~j91R5Bo&MdQRf!%whZ!=coW0gqED*M`v?FT%OPz3^g1q&M$a~lZMPnnIC_)>%N=k{cbB)XJ3(A@Aavj?ZsW+91ilz(Au22 zY|o=eSi3Pf{%nZFW_x$VSoQ)-Dm8c9zh-^<&ReGI$Gw>(PXnZm1w#?V6IASz`_R;p zaA$7`0GitCw{Kf0Jkd(iio>HVwqG3g`CH2rfeC=pf}7o4+L#hQeeZ0sLoRoe>hU>nmL{RQY2&^B+H0SA%hA>4kVF#M>a+3bX~T{Jz60@ zJt94@t33E~ z@yfK}CV&-?WnDseKE7s310GY3WvCP)&uz!$V86PrW?L&S#kC1U(>lj%7dirICScQi zlim9pNk+9=_LLE{lq(!NI=?V?PF*2G%GtI}3!&?7h!0Fo$W1#=MSdaxO`?^8;O;Ih zKU7zb$6WoHlixuI2xT_nPrr=5^(fZ$*R#X1)-9L2CYCPbh1V}inQviX;n7DQy_j!4 z@x&7|Gt1m?`dJczPgH#8X(8IW`J7DDBu?2sYyelNX3M-Ey+Bg*?qx|HHlLt70N}nlyctu zw)q=Z=gK=LEtNSDj11;201F^L=?!npZMbb_fY9x4 zcVPnziN*?Pml$%WfB~#AF9apzFzhmKmw41!0*qjP$Xt`dtPP_<9f7ts3(*Q|0c^^~ zN5cL8I!tG|+?p(95V7Z449=RpXU?K=cq95zIrQi0XM$bgvwWeU_eu$1Ne4O0vO==!>~TU?RVwi8tKJk})KX#8Jq z|FNFCelOJ8%f7Nu!ne!w{~#YVn|vLp5^&k*;syW%Fcc6DqoiCbQ43?rYzie=_t^&m zG2rmP^V0M7O2p^23exH3{T|XfuPibKL;xweR>S#o4EmAZ-RUNdEao8p)#%neJ06_v}l)QxH6mrw@fBd^yDZFkS7F|)dukCVL*qyzQ zK7ak9O4U92V=-HRr)(oedqN)RUJ$hePZsw&H0-#dhE7P8#4N2l;Stbjhy|-W| zcw~?~XP+{+mls?#CPK|im#_g;mD;>MCmjrzG7cIbcRb>5YS6p|0G5qv^Ma?XK@u1N zR1zMF*Lasfb9Pftxw)$vSa8dGn~g~q>8q1o4Fl+t0Ww}jtZg?KqaYIfB@AF54cT24 zU@cs5SQ*jo&)bYmS=fI2tS>D0KH3)C6{>X=fPm1Rm?o;(^;yb9O;5KlB{s1=QRph? z*X`lSec0AN`@P5h_G`~tO8GU+ycJ4%Ui{Ur0yt=}WiZvVsDvT{@!o&fTe`k(Dq|{& zTnFpCvZ$H`k{+(ve<7?o-2L`#q7zZl*oZ>F zo0X8K1-Z?N{_T%z^ZQ@74!3k{znq`Hl#N~>b-ldrV%j-)@HMRRXL$2p)xKd9FQl6; z?S7X_T`>-W<@IXPvpmDt(^gROqM=clLrv6V@U|PLTiUA~eTCelPd84RMJ)i2NB0G! z;sKdRJF6N1OW~gWeCAldum}Jk0SZ}1W!$&p33KoMv$-Pnbk_ zXR91+1mhm!U7E#fCBIYAYDIL*RG+`fR9(6`)u~Fj|N7)Eg<-ScY(tL zz6d}Y{xN>!4;MaJFzPEW!ZizZd|rO;N1||^5*6T}fy*@H`RO;=y`? zZxpBTLwrET%hs~$wAT@;Yh^O@-YI5 zvc!@AwGyA)*|up-qB$-_nyaKl6jP@;E(wsF451SHt_MfmfD|V~%)|5?OeKC9 zwcY1zb12`(&O^b_X|8@&CQ1N=;*dknOjRDe)&}I!$}_(^^Lu}-{_Bgum%r!!;gi0n zA8|hWiNc@$=G-SLMs4L4xR!xURhb_1Q^1{L0YeD_NiBV`e*yLo;8vcA=JO-eGDs}t658H6khx{!giC$!_&TKE2>TQ zP*@}phkyb^2D{57w#zetQ$qK$O1nfW=r;*oDQ4YFq&_P!H|L(z1~d4|%HLJ1Dj+foTe>aH4-KM^JYOp~N2 z)74TdCESbcTL6Z{^=)5hjntH#?Q)5?Rho~LfdsAOAOLig7NZKuTlJiS1W;>Su(xE{ zWdGJwJnyhl4%?vYB9Ad5cudEuM#7Cvg79jTTeUNy)!^vPBB(U3u~u26)@JQlFVR|O zw&cA&rS+i>&!JGQH-}7`tFUC1FKtOW=G}}$lMSx4IpIjTIf=$PnSRf>vH9Sx#MqyI z`6qi0T)rC-Ul+ybUpW|y8jkyDuLzyOrQwd-$b zoieR8f^&fNK~;Li(Q#?t;1~#dAy)%Q0YDIP0Y}1o9%>E1i|0N9EE6hqAMNboQ-6_p zxG6Nmp`b1!6V51!xoAXYDDXw}I{(!3^Pi}xiED67ie~kt`o0(HJAYVz{@MC-Kd3%? zq<#qSO5W0S0HadlU0z>jk8C3opRtS~1TB7WOiU*K`OnS5o2~rS^<+P&Nmy02P>8=C z2U@CBrimX4{?k*-#zf(mPi(KSPF;*wJ8nv>z2|syjrLg(JQC$zY(vMJn3{)6Hn}{m zKp-4MZ2_{yIi9Y6{x`JL(W~8I(HV&}t-a)*KQ`Z%l^y4!3)5e`U?ag`@Zzr+2n0^< zPG5Kh5h<$NPi8yL`m1o$I>C8fl?IGi1TLS<3A!uXP)aVtIQ`ZT1opQT%43n`+m#@g zj$m#4+nv4&x8=@pr%yK*BRhxkjg+X!^m6lOE-P>v7Z2!w2>dDoOxx=0)FW|Upym%K z)|v0^!r^E?eG50wga?YcB3 zS^B4v2j)Z@LjEQ8c^W3r6vTrd=}?uISf!hTvILR>KrZ8%1OPy`)MEQv?b)3Rf8vfb zS~?*X1&RQCl7_M@#G9e14UlW*xw$`m{i}e!CS>%oZAx{cZmt+auOC>2Y~t_!*4+7M zrw^K4;N!r29oj$p$&cyN^KZTzzn(0k*wXs@T6A4ar%Tu2P-C6R_4>D& zc|Sg>OwIfB*6s7Lh}y);zNCvk+zhiGLkAR+acVJF4iSi?5JPsr!IKEKCptzCC_!XKU>kwEQ&C&hs>qPN&Dl#xC-TTeoiA zv}qG4NjUhiS0rcr?V%0NB+pW)iD8}nYacwnt|~V5!V_QNEtk(jH}z9ywOOl%Xe5w` z!$1W)>Kte0$3n|bb)JqQOBvP4keqRHCNytIRLTz9pu30XQ~Nq>^K=xc4Inyoe^aHh zFB}+5=aO#ABu{CVdqYxJZ$9yKH(^0!Z6-hC!}jUNE%>zVo-%2m+@u#{v}nJv0a-OJ zvM!aM@!2+VxU{u5%vuM+mLRDquWcd(V92y1RtFj@C7u9K8jQcIqDze0pgV6&b_HZq z64j9)n1rp+Oh?()Si8z#gCKnx4qdu(E^pege5PdmH9zx?y>d*E%iwX}qejOEW-TKe^|jGn@5 z8K1~oC-T{W$ur3I2aZP0yGuC1|T5hhOifG42dFG zHUI*WfPfQ{<+E*i2*3sh3l8CXr4xz9a~X4o+vyH?Bf$XW_JKbDq*yMJ&+N&6YOMHu z*;qL^t>Ef#1ygD4J0QRGB$=4=#hSf5&m^X~#B}X{zL@#af126MoAR!&Co&3vTUx># z$4yONm(ddShS}UEip9+~Vf*{bEvx5ST&g$cp|OFU>cM3Pwh#ayiNynHGV2AMM2J9u zkiwF!4YJ{&6$goE5-7qTwDJz=_&%zAHNiWtQilnWVtH>Nd+gGFK2i++QvcC&)~UxP zC=1Z^uJao^AA9UEj4!-DA%uS8H-5wG^}>N)huY}!k19I*vrpZlT4!OLJ;U!3oskQz z3wq(%FVWb^gU{>m_#6&bgw|^T+u{jCw{1$+#-duCJ#Ani?dFZC>XDc!(+EH!q z!n%gijTt}22mtgt7rikXh)Ep;Rv&LCgEBZwE9XD}Sf`nxyguPY0AK^vSu+=0$U<0V zm^C?b+-CzohwQ&8)jH}4?rt_k*>dVkR%DBOeK1Scd8$s+C8541#b#Z!LXj1&HdGK~ zp>ps1cggSn{SUwP(u!;QhUhi*qxc*O^`;|7=JHqUYDlI6l z`HVfM>))+UM%~`9$KwbFAn1dj8#`!JQy^Ud(^@Jp!qVUsAa^cHAx0jd-R*m?K$Le1juYG-@_Vvl?b9H52vsTi8R&X`Bj-eQtoO0}V?diwM5C3oN zp@*tZJuZ#x$Ey5hz2)nRjDjFCO|i(a(fRALAT_ovu5il@n_F6oO}6bF3sYkubJ}gS z7l^t5^2wM$gQWZ>@+vqjB0vZsWRV~mbV#EzehM=rqA5%hEVlJzpM8VH6m8c`t8S`?Xp}KB}f(MIEwKy6E zn>c0Z^mSAn4yANFd@6)glUQ0|hVDug=G~=~h?Z$WIekjJvsm2UY@38q6kIOZ*H_NX zdrb_n_EK2T@<(EejYwH%bTDHfs#@YOK-Y$p*TAKbs9q9-Yg2N~p*EOPJXNo zZ%&x@HYNfHz?LX+u%INCjH9MZi%k+HEVb+a02||;`)2$(UVEa|wh+H3myGYLbyh_YCA)D1)y$#AANCK@$z8zB19bUS3$Df|~`>+4x*<$X^u&Fy-{#$Pt{_k(UkV|K4Ql+n_ zYhos;o@CgXj$hnAGcz?^DAX(U@`km;hezjiMShEuQA9F-+(G|&m%rbZqvc$vUh+wm zHYa~?Jit@-&eCf(lUFVLBdPp_^5lQiMn7K}J!DlL5IP`L1j9HTkj7Bp6QOWUG727% zcko+<&^Kx+!?tWo(@jY=YnoYC&6;k>*w#)xub=Vu|90S}-w)l^$NF|_Dcv?<1uM9c zoWZhH$!;`kO~S^Ty!_R5mUB9@PLO{ECnE=R^N; zboJRtcBrH8p4Vdf!X#ru-C>)AIvQm6#aDF{*Su}gtc$w2>?K0r@5$CjV`mikM8JmR z%rlWDQSRED0(9Di92?BZvtCUh7prp>4>dbA=-reQM6+|SkUtPRRWH;uh~oa{_Q4d# zS>CYJ9H~|hH3NWU5Vgb6$WV%6PZuVXD||3yH3_&e7GC7OMp3kDl+e1AD{W(FOnIEG zRRq9?q=B1e$z1`pZUX`YU}QvuFd0z*z%~eT&c$>W7iq3B>SczCi?o{{tkB(aok>^t z@lJMulRC>b0=mMHHCFB{V*q~62{uS=RRX|uJg9jMEv}~83;$*Q&#!&?Gdp)2!*7;K zFtH%gblo&m0H{fTF%AVzrx;>WHKg3>|HWY0#90rkZzY>3{X4DX|7-U+3Ry^HKvlso zK+_?W43%=f+3NX|9^n$2wM?aM8Vj18(D4733;$Ffwb~-U^FSaV5D*0D1^|MX=j?$T z2!Y5#vea%ce-i3Ackj{9`c|cT{_tPC@BM(idV?PQb@8V8{!hKv)4xKWR%xGkmp{lni>0);b@rsuqj2MFJ??12(*N+fEn0ssPn0Fu;rBID({H34~C zM9@bz2knlK+8=BQ2E9>7;XwVrKBP^)cs2S=l63!?_fr&mDd#$XpL_c5iq4*AMBt?d zq42`FKBp+^;~)R{z4zXW&K4bu5W44{d;aXt{*0=;3@<$h)){BVy21S1)AyLK+W0Ao z?O*dCL0o>UePEB((&-X_NlJb z$@=~#L!}mpW_{kxnN+y%v}SF5eVWbCSfMC~ajIqcSj^d-Tg;Lo0Hg&sf$Ye(g}#jo z{)5f1vz>Ba2uX{ESpArfS(96&!se6*To&ok5P&)30m3FbYTo;1y8wI#!eoiV0FJSs z9MUgowzH z?hGQaR~A*;S9bFyZ0&nOt|iEh)rexQY@cbG7u`*T%+ZSp-+TosIy+hQzNd5IoKax5 z2FdRO7Xi=i{Tr;&m%2Mj(vzJS+gxu+ zo?8+?wN#4s$&6o@G6Df$1323n-P=>lcl*sE2LQks5Rq`w1ps!P!JP$Eb6| z!|XGy&-_*D?{^cGX%zmWG(89PB4sC#`l729f}h0EUF9A6y*FsPRXH#->xpHK99+}CLi698b# zFr4L${5?>mPs==&ShOmOr@e40U0SA~rA%TPD%=tuH7UemVsn<@HFsAvB-pX6N31wm zg7KyN6lMuTKw`2s`d!Nxq5|z#w%Z)<6`bKqOJ+Jz@o5%$+j%nUu?3k&p>`a6n}9xh z42Ik7Ubk-D{rBJh;DZl7_~3*0-+%x5_3J&X1P4C`6aV7C<)B9h^{;-f zH_&zQoj2>n>Va>vl)x%Mf$%#BACEi?A-LBU;Ygb$F=#g66)g9vH0_sp&MF>`pp&*( z3_x>sVAZ^Gpv}@r0sv#A&UswkM*QXklGwtbFv4j0E=)3Za3HH44u~zqMwK^YW_bZ8 zcf1-D4Xh!##OpG1DlFB|NQ$(Dj*3=i`c|jRogIck*>&F0SI}#$AuTn6C6@2asA->R zpuljxC0wHl98S5hL<0b-@n|?}C){9=fDzC(j#ps80|0i7B?pSuf=k?toM{03ogne$QskQrS#wQ*FG`&#f6!~n{pX- zxw(P9?%jKjW83h!xiv%GhmVey%V#jo;Z<$7-+aUOe*9=YlY1q<5h%kjC0Xh3>3aCB zK}Op}{GlKN*)mXP-2F6r{%Bz zkzKpOwQGIB-j2TeF73B}b7;d~9oTq*FQp!Wr#8dLAAvM;;TEMCIP!<^)MiLM^y&}) z;mEpA?%n$8zjyZE?+f<6=BGwmpi(Da7y<*ZEp@9#TXlL-T3tIH-jJfX(?OyHKy@ta;EXl*OxydK^eTe@Y@N_X1J0q$VikJ?pqF`Eb~sw| zzM(=}YmtAl6Yr1M1L>vtrjb_KLG>=_rr|jcBWSVdE zlmUQND6+^&-DLovC5leEYW)QSz-Jtm42`B51yBfQK3DwwXZL+sspj9T%V;8tc#dHQoxqL)XcMIP~9%}bB%M`Yjyc9 zvHvmy3|6p$w;5=K1qE-mnSf{V@GS$UO~83M>r>5)cIh z17-u%G?ey3;yZBs({Sw1puGPTdZLTQ#ZT_p`ln}SqW49cH@wzvYlWG{ksr~ThX=1f z1RaErCq3d&g`8_bbpZi^03kqtDbinMlTLmpD^)o|VlV*1Tfw1>ayV+L^zyrAqYauc zU``NL=V}R$WiEvrQk)%Mzo71Eu~f=xa13F)S7)oUKHEkZplM^mRdvWSUaP@5f-)Ve z*B9KUn?nghkLb4z{X^*5vP&e*eimd%=D)(=6N6VlnUCw{Gh0Zr-?d)%fJh@uQ=? zeN8RRp-i^g(-ZmBAO5y(7;cf;ym6?jGd`b@bX9uwN%c*iP0vvLhyCl{>tBDLxVaUr z0yF^ZDzJ6Hb%15$kEZh;-#^Y26UtT5QN~~wZR!1?K|51Gk_2@H)WwW@1Ym^=0g3v!wLh+KH8NM=MytYbB$hH!y@N-r{@UzB~W&^WS~` z`4?`!alL6ul1AQr>xRGnr|&-Z{EM454p~+slR2YYGPcd(!S;#StfpKaf?HkPk$1lB z)@_^CXqx`Lho9ZC<3O#Vrj_!>*0n-9db(P@LJ^S$q5w)f1^|zN1{TDosyklsAK?QB zf@FrWRMV26)SG2f0x}UoKmfs29JS$+HyPk83%(ky zr)eTA8<{2PS&RWRnjg-|lm5j^d-_YU)&_UD$xJx_09l01>2^>?X%}DsokV^WIdz;9 z0037wazlm=RpY$Y@=Tj7s>q<2I?E_bwYf-{6kFj)jnu-b&6`}oL94VBYuJS4EIACp zdbH~&J3`O;Vjj24v5?iUrM_{8Ug9dRa`xD4!@-#hO&=edc=Fk!*fxAVk)+6Mwo0>1 zB9+J&OB6-fwyh}Y)LhYc6&ZcgOFOORgP)7P=XdzGZI!!QYknxWpb-YW6WAW$d%>Cp zyRr0!M50G@^qFz#>UCzyvLiIC54D4Cfo{N3EqWVVPG}DPk2L$a{Mr38H#%GUxiC@E z&q8q#ps?p}Do-4dvv0n@=oPHsDw9z@_y%6Sp)z|9Pw7$-0J^*5imFni5%l{G9y|&F zp|IQKa!yRXBF@ZiY6{Sll}cUH1uzK4IW!o1|GV!U8t6TIZ1jhZ9X@#Ah*V!XYU`@% zZDRW5n@?@f2oTmO)KegBn%$7}Hs_nmT;Q&UeR+#A$TDex zWrIzbgf40jwB1<`i5L!XoXt@@WqT}F#YHr#>VY52wJEZBfMA3xa%+M!;_@_?@?-XE zH+PLyeBYhw*$~P$i&wak-rijJ?TK+@9Vn+g0NOigX}uYSi+QOU}+J&rABz z7y__zF3zC{t8$fDpTnz%douFNZLmx$%1F9gttD`2p^l1msL8A|XvvR=aE)_qT98s+ zT_@a~h30U>+|_OuMRsjc&$zHgEg47aEEOveETI&6@49SLu*yE!p$(?clpinx0HWrw zhtrUDgH8ef=%n41M+q;s5OSNYJCkvlX?~)M)@YqKlxRa-a038kFx7#AYsv=zNGB`3 zdH1v*VE_$Ty{hgo{yF~nzkc?A4;+~>v|3wB{GQu4bapf;x>RXUZvZR3`lae^Lz!zg>-vBV8G=B zzpv;*-`A4AnH(|Bp|o{Ko%vYoHq@||qDz;<&lgq>cRdWKRyx-JKQeUvE$PK5Q+LkK^PmKJN5mh=D;mCt?TRVw6Q&UV)oh`Q->#f z+s#Aoy8ou;rr7f@y!?ZQcF)hIUXecw040>$7`}ne`4^Am;5LYG&2>{gBuJfynu13| zT$;BP>oe?s&JwAY*^wU!&+TCMO_K{yw$+w0lVUYnGeEb%BI{J4JL61wX_KZA%^=1h zi$>hwY#v0wew|2<89TqL5-Qy^gw9+2@*=@Gy#DY&wKQw!ui1K0(b@k#F_@IZEs@MQ z>odK^2LJDiH-Bu`twoi8C2tl(LmPhf;&bO;4XrrYIQj%@yLiGQpn%AGJe@W%+D2Ip z0#OJE07UoZS)lAG?@3-l!i?Y7S8#R8#bZ88p--vYlZ@?MpTNh%R%1!-%F4MoMi+*1 zoKGefJZe^4zQ5TR=~-vn{WDbFQ#6=6pw)L7diLr8;+xM&>3ybdu5k}d!sWCoh6mPQah&A&d;bS$7E z!!zTz0Vs)S^p?1+Na!S8XUjc#z9vu-O(~SpTnCHbs~o3tGdGTXw(&RL+WiDJRcvYb zT=n?q%$_3&n$&LIx@p6j&Pc?Ekx?qXj&;4SJ{i3NeSGth(f51Td^Y;va6SYD87%9h zjMK^b52gi@0uToGFf=cm0Qz0~=a1INtKKc!+SMpMBF`5nlNR~M?fe(z>Axx-{c1U{ zTIZD9uUJOLD&F6;33Lmz)619bVNpEri^(q^QSvKh(G{%VIwPZ}*xUQwam(Y+>?r2) zv6w#=2_G4m0D#_}R)(QZjGZQ<495opF59+6Q8;*L>{=VmP|W|1dvCh)=5-k3C!XE; z*yFpi*)p6%=0lRrNL*|yZ?>HVwLaEq8=j~;Q17Of&>VH=yKZm7JZdK96+V;~4bkQ}M@NOrsIt1+RB)75Y?1~M1+ zRF8ij7%vs>y8NQ{G|h)%s|{VcwE9d33!yI_AFk-^u)iqKmspfMukxQgu<>V~zUReE z48Kw#1|m)C`q#XVVJ}O*QB54xC!XY73`h8QGw6wO9OZ|X zq2xtNq0Z2O%89OlT=a${@m!l-Sh`JI<>|JP31F6&M58Q)_G~J~+iJ{@dloaXkj$7p zSt9EJod5u`DwsnFBIO5z006KNb8|Ax$(=8?IH!D4dll&vTW2Ygtodrd+k9RC03cDL zwc?t0Ba95jFvFUtiBGS3;;+X4e%Il{aHa|vHkDMWxOe~YsfAoT>Kh*H+qix(5O6JI zbjx@h;%%-2a_}Z5qrVouE}lG&B^5J*0+pdJ}*~) zP?`Ng&Y%$b&Tp>WRwawcKtwuO3lj|*Ik<)w*`3k4j%nEdj$%Ewoj=n7VFU6Rp` z&d}TM-umcMJ7#C{0N@blf!?lt2aW^4npHj3T770Ved^1Kq)bnzPRvwR54Mbq6>RgG zD3FC{M^~r+eLr>g4I5X_%rE@-vE47fe572ukjW5R$ltj6_JNRBYR@@i#{%wIzmRlg z*Cm9so6txbYyjbfSg~jLUGes9h`8Kc zO-mdz5543lG6rt=gTC4({@s^P=2Q@bn%pgPNp!?5=>F4O5n+JUX}=;bCTaqPOJJmbUm=}#?; z+`Yv>vm!m$hRu_I#>lQS%<8n6@Gh44a`Y9$kvdxxtT`7l2ml~d8iKOT>nJY*0GI?J zns%rTDHrB!ZaC)|Dz-n`%M~2}U~#6@RC6wPFaX=&3agW@sUX5YC}g#>D3nA>r5t6U zvAy^M-}nAC^M%=rM9^*WVisEuFVFtnTRQjJLH$+FF_)e`f!w z63@%m?V7 zsfCHLitpP~J^yfI-7|@nshTIN2)acg1O&n~Vap~}Qn~SpcSpMEdsE$?Ik4%scHR1o ziN4XY-@>mF3P30lU)R6p{i5s26tAQUnz!JbZ(sO6|GmH4`OQMAXjwopoZCrqJZ~W<#`de7 z1K2joC24$Oe)s+f!)$EXuy)J(?xv;y#X!EK!&_1_{LM;6KNh;>XXx#yB!hi^lOY1x z3P*x_w6STueC^+tVw)$_;^U3!|E?a~)tHqn16Htt6krTD+!f9A%`{S-xh?*J`|lX&?dnKna!>Dg zapcJCB{X74rT>}!*0#{?&RI7;NlnCAU+ShwugjonBncFaSf}jts_r|V7jk9AaTQ zFbH9U4Z^WE=m{9w4Kvn4yFJI!UJW<}5@(bcKmmy)?8OjF0KgVO?rsYYXQ>C~GvDpR z%lwoWfD|pZwSacFV*q@pS=cm>Z<;UcXti|2h9$vMx1Z}-{HAd@BHTD-ugcYrgaCkx zNrBEH`B;~w(rin`?k?&l{HIzr4>j?(O<_!gnoI8IJ8YR^k4E*oPLQqu)EEpvRvku} zhR!k^3jhGrIa=k}ca63_*5;oI=&U7mrworyRTx%fhyv4SuJ|iq4B(v%<%d(QDGvtl zOor4O%6mL7|4r$0FF(Fi5CNO2R#UYaki3uQz$plpB{pQsQY)`6zm84i=*ZmBkvYy4 z-nJpWY2E7WH*kqmX2(m%&id}J;JQQ3tlM&fxR_i=42r4E>V@m+_OOMm6&0rytl)C- z23tl|S(%qBo?`j0=^{&@MoJl~sZ8H4KX~%BS7*+(6c$ zllIifq7NxIAFB~Rxb1Hx^A{0t#t{W@gfdj?T=dQeL-k_ibC&uI?piT$aeQ=AOU#@Mg7)-s0@K zi(3T^6YL8I;n+d?`_le|QHK?*Up!n;!L6>NcvrR2>un5DH!IE%7NAG6?{%F{V_i5-uVQkuvg2 zh}5(SZ`v0jW{&~tpii^qy^iG5uBqc(z66R5K#CZ$j+3Hf5RBxPq>1V zujO*?h~vHC*cxB3*R~BsDq?&UYZDLz6^ssb55BXx{YH-WT#ZXeC!Vusj|+s8_i-NE z7pONmklP`7e6ulk%wV>s)fpEqI`PR0+k{^w+H%x^*5z~yaTd8QO}*I6&baB-34^uF zya)i4Pje4u;pI3Or+pN7!Occ%;w|$`TChjXwDOt+S$5DvS+2F@TyW#*B?^lbilA(A zuw+bm7auxusm{KPOXAHULsXYCt5Air`tne7pvC&18U=2}4yfSN!UMVP=Q|cjwr%QfYl}DpI#V>UrLBkd79;1;@< zt;2=MC`IUg;?MFwk?j>*;|f-=LPoC#R26>Prr!NW=3fWRLV|VQbLZN3+Vq%$F>bky^_V65khWXTfA*s&+r4m$S}h?uin#_jy`24#vP>75n_XdcDEgH zAQy`S8Zoxl;4`9|v9$i2Ra+`zL~oj>W_?g}oY6{Ooo34Nw1?XZ^avW%Iz3V zu{qIBx?efv8oc+uDQm&4&v;((3@nKe+7!>$l=V;_Sj#GS6$PrTY#_@nJCIShi_ul2lhr;24HkER6P>h0>-e#3BUYot=I)ob#baxH$dlF_7I-0tmdmIGj1Aga>v5ecsT zx5Z~yHs%$qV18{YTMTNFim}eM)xJiYib(SOuk|<>4!#}AX`hi7ZCe)3{ORo@3kd)IM z3&++(n>UKi2uabFshj2{@_3H-`a(VNwr!pLZ;Li>bh={%an*yK8zYZHYK9khfprEe zaTnotAQy)m6i@0yMaQA2Ya-}WX>xr+cNv%fGE^gvG%eP2J=t%IT$5%GMnRzg08D~j z@ba-5y){FNn)Q79tEe^*8)t==TL@7#e2SfREXY)ppco!nHAkXS3;u$(%P0GU8$zgdc2Agd0eFAG&3Neob!T$2;qN|6IiLPE3v zXql2g~b4r%GQSR;*=L*M5v@3uhS~$FzAE*`~EincaQGf1DBMvflb9wB~=5{ zrra*l?Qs~$Y1?PdzPC*!ktiG)nK(9?6CLRG?OQjlAK-YZp_+=Uy_sZm-mGL)wykZR zjx~->sHo>VDI-M2eV?iPXpfv&QAb+A3RcMIb%WNHuw}loSm>3)nl&A7zwee!>xc7& z;+MX$^U#6AwW_@6Rn!&PLPF3_>$YH->J?cx^JHOLaAPDFJ{>tK(bbM3r*TY;F-5!5 zm%-fyH;LUc({?1p87u`Pg(%hp2PJbgqro7Hy!0CM76O?j>NH&vxPn(~h=PpN+RXFi z=f7xF7MMUA*9L_N3@X?HeBx!^Qgb4ej)0Uz*ism_o zS9C=^{*GW|Fy6MUz4xx>j+^|Ue!&?gN&0o0X7$4lqfCRvT#+6CV5-9f7Wx{?Krwr zX_n4A<<$u?<3Sn;0LVsQBCDr}Qf_qfd`!jBXWL4>dB=hmS%?4tL{wUeo}|yVftKk? zTanc`vc`}Y*#xc+6(1HK`9$)w$Hu4NG6OJd(>4`Fk|hO`H0ySf47cdMx6T@SqpQ;V zeD>wNBZYE))A}{*SNC;yHaXo~rexd3o55E4Ce|4pQ|8xuTjP!>)bz76Q3640@G&^_ zJDDH7HMJC0u!6TZsOz`ubBSbgQ|!>8=_}YKK?^r+?cTUh5x(f8Ooy(6b2*7MDQS+Q@K4fj1mi9J7Zpm^!T^-R6p+r>#nYFQNyn^T zU7ccgwqgJbz|8v9t^)P;6Y)t`^l%das34(6d)Yna#{lBIyV_N#2kK(Ri2-~kLWTZx zYodz;AVu^O{|`RD<2#0QC5tCvQ_*UQRwqc#!_c(LC)l=7ty{KUdo|xBSWmfX{l}NS zPtd~fK)AQNAVIlq?%%4He`;L8cR#~CVdd+;`Q-o02OPw^{Cds*I^27G(7MyqLv}FZW`W^=Oh|jp4o22tx`hAF-g}10ab0J^=ibUyU7ge9 z9FQZ4K!7=lq;jI7WlLUrZSS{QdDr$j?%I~uyOu1;mL=qF~eS$wlxlFB3+h|ERGouoqGl(bVEuy7MEs2d{uz;Gq%e@ zMWO)gHEFrZv!kbJR2Or31=h{DH3@}ve@j)~)kz5g0AzBQfVV0O)1mp|QM4=@4(WlX zyBn)h>`V}yo^g*$k~Nsawt%Vv01(mTHfNFy-}*!s1w;XahLl}76B>_G3M@q~=Nat{ zWja6sSe>u6l>|?oY@Ylq_t*dS)FYntI!V)0>Kd-4nHIG@KH$TuU-Gb@QcQ_Ek6jok z5((l`*#P2D;$*Ys<0r-soXBF(uHSs^)=ew@0m*i)x<;-GozsS#|uAyrVC(6M9XL&Mx4I^Y~b*H;Gv36#4BW{*fq}<-w zXx<8sOUQ-jbN~TCKrzB{T_`QpBXd64l_VsHNR&L8geb@IswVTm1Pl_anKpJzo`p*a zNzXzJ#MVn%X`+%om>=JkK7Rl7q3`9!o~ot~HcI2RmiKHOA;fa>>vREcq!oAkE7&E` zP%##5meyE3!{vvYPRwS?p@ts=2A~KK6^Xef6W!YdHY3ida!EkTvQAf>4LR(A1X$;! zAZT}$5iR+6k^o>$kPCiTGwU!EA%^eBNzZrDvpbV4jx9>~=1Hl$A#H2N`k4}5wyfZo z<|J!$Hh@|x{=R&4M-NjGfFXKcL6}{T!N&w)k1>1l++^7Eo6Oenou4+hbMKn)xxyRjOAD#P`Z&mis*jJJ0ReK|h_qT^T?u++)(x1GMkcO?zT)iik zgI&RCdP==)zR=p@o0)nwxjDp2YgV@0xMd?k=+Myu~i-))WGv0BebH ztzLU|xkBnW4_6+!;e#8*tkaT1u|pxw6kX9id2_}L7-Cgm03jfqHv^tQZ9ktQ~ji@(u!Iw&+?@L<*I^@;@6$Cq{P+BQ+j#ooI8wJQB8)ci!yYN=QoQlh`nbut;A43>;)Wm&;D?Z-9-fbd8xyCxMJk01*p z8;7Q%mMz5a)U(c8uBunE zzj!FChGU=opPww2$^d{l_RNU2mk|628*t9 z6<%LvFf`EJw)`(yp|fs?HsUD<$)%eUeVOdY-_^6vUA;e7!RV`xRrx}xy)`*A^~xr8 zsNvX#H63eLF1Kv^@ohVf59MEb(I>I0#XRQaNOO}fTToo%)kN-tso8Y@iFZD~5os8J z0JyBlDRV-h+h{u|QlJg@k zdExp*m}NN0wHoJBObY7+4IgMm76t%sZAO^& zF%{{oqB+1iCuDuBTXH+=kX7MaUY@MV%dG7d8Gx!pxI8@VF$JB}a!pG+e z#eegocYN=sKY#AI~I>(22sw-n-?x4L$Ri^{TzTkJNKKcnj5rA|}o!mZ+Pr4}K^vv{Q-z zs7sx_wTF&tPakU>Ag*!wT{Al$M1OTwoe=EqSpD}^vpX|=M)4LQH5^b|mj6vg_}j|# z!&mp_RWSN0Enh5kceL$3GSN$D68-WdtjFwOUB4d?Dy_*~{gLySC=q8bJDrUV%I1gK<+a zV&!ltXqGJ=8$c0A> zxq>XE{pQ+~ytADG*sXP;Cl}oxZ3Hw0)cN-$_BYRNom3|mR7iuTVx=|Nz+?!!m`AuG zmcA7E^5ff{e{(}-C=x)Jl=5Yu#B+_J0f-d^IS>l+ghUz!X=YeoS;5b;1?_kqKs0OTbjnzUpvdEa~AcJ0~~GpV@;e!1)U=a0;f z9=-HN9LvyMP$Ch|MSjmVUS9hNv8)t|CluG?ChF6xlRbTz4uFN?JnUjU>{@L6o&M%oNhXfXJ7-7WG>c*Mq?sjCc$U|y6pt!8Ha?V^gC!UN5 zvw;^h*V`LYVn$YGLP9D)BQ;|nk7h&2LzE+A^HgXk!RLJhfY16MWa=HI#gU%&rpa(a zh(6P4gc^2xO_)8SpU)S3W?vRLyyv&M_0xTOI(@^T?8-T*rf?cZ0XUO0Bc>HFeOVs? zkTjv(R^&WRrsB?PxBc(w&+giH@=a8HL<}E}1{{~EmWt=(<%#QBnxQ+k$MGB+3UfA5 zI@**Ez2~kcw(U4@V07_qv$J_#3H;7)ygd{Q{O}k1C6Qe|(7Nx?DD^Bs;`@6#vYDy& zw&sIJMuE7hU+n5=J$Pj7rJc#^`F$_1n$eZrLYZ%jU5M!6?S6#ud+xn)ptpP1-h)59f7kG-F;jotodR)m-Jpuh`+TD1 zu=C8#`B13HN#RJC=U6C}Ovk904U22VcbnH@V{ykI&O&p8wb+!3$O3lZb-voF0|j5% zXGE;jx`6A2|N-wVCyT2g30^F!}Diw3cy!Ir7kiMhxGby8gcui70JRY;-kSO` z`_s?QeKAusSl&;NNImC`$7hHYqcLB@V2x_-0)UuM&zv9WG|(4*|2yw_@Uf?k9+`Z> zn>^dtcPtI0v0+``_+)0;V8?;OqtvqlLAkG|b9{2TyR&^Bj7FpW&i2*=hla0$Q2_Y# zyX7DLQS+vyBq?aCy1lg>_#?Lm?_C>y?o@TIgsyIU06+}4(!b@`5`SmT@kRr^coZH2 zpcJeIwEJ5kzP7{qZsNUZ?6RNp|8DdDywCRuGs{+H!6<=V0?&jsfz`c%Wrww0x~IQ| zpH#5<4wv6h$e%A6jDQlL03oSZntkxFw$) zmdj5(v-8-|sW%#?xMsCzGEz7m6RLIDs29&J&_N8(DQsONNEJ!S%ca3=@=!CzkZsC*qxh}w9Dc?%DgeMr5uc1%HK3cU zsn_1HbRJ^GXjCaz!8KmKr?8_lde^Nt{>P8*pPV?S>IU=b#`W#H_s@Dp@x(B!UA3H0 z;8+$jJOS`2A|WJKW+YJrgaJU2CD(O-rK;#I6uJNSef*z(G6dOKIJ?8$WLo|4?|i21 zqo1GMH+&V3f`sM!l7FJ7nMM^ZRF97UTn94Ku)gz_;o$D4@;`bb^eE0}*9ULAN4|S@ zm{RwQ#EDgdLLJuiZ+v&+WB)w!`HMmfQiK9{M)3-IQq;4}`h*k#xNzTuN5Hdo9Xo>9tXML`ZUH3zZ6+)H}~~7-FxRPKfM2u z+36S7e^cVDTDF7`a`=R}YFW$J#8kapHca#SjUBrWve&FxH90-2SM#pxUbms=z_Hw# zmCH_zj$d8RYkTZJ{f%aCW{d&z9IlUejFah(a)0;h$s7MLd-X_J*8p1*H|wcLiU7ctIFA-gk9XzlnBbr|AJ8 z9QFnM{*loc%&TiwwZHqG8&|DZGBiB;?>~5Y=)_2)ei@Wz6W6sg%|yu<9|$U<%v(0D zSL%*Yz0h>~44=O(ydjzopROFGN?lC%m(`-k8)C7iHg#>vW2RdVT9$$m!}C&?fB{Jj zT<8T^XXOTF5atmpP?ixHyG2N5BpFGpBs7*F)wU$U1#C{X84(!OcEh!rq}6Q>T!yFU zD(&$~936qUVd6ODMageRB=Fg5%CUoOtR*182oM5JGyRam4{#jUP{9iicLD`=9BS^D<*{b1Tx}nF#U_1rY0eJy~`At}mx}0FuSn9rm_$PyE5r&z=|? zKQFJ~S(?^xJSqhJSXM+2e1yI(!t#t1jz_sd$t7mxW#2q7*mBPuH-GOZzf8{-&%5sq z4rQ+2xa`iG*XIhwhacSw)Sb&0Z{E7$hE2F?{^6nA=crG*t!zb+>CF@PV@m*5a`(mG@71=S)Ck?`Y7-Gh~p@v#n z(%-sjW&h?4tM0gU^TunIuU^*C+13&c1qDGcEjwQk=ZZ>2V40mKLsEx(Kk*+$AiI>akeC9H%{StH&*kB~m0rCwk|NPC%I5To5&K-eqT}|PwtnmTkCbv3OnrDp=|8^z$T`Qn zRN;$X{_Z(@ZKCkGFaG=0WxTlhI^zsD7k;LmLmVsY;{Yy~dIrp?H$^|#F0GLvL>-aA zEM+Vk)zaqiorQ0gt-|Z_M*#()$!c6IBDZX4rK-fdIZicarl<9>vvzAs(bTYJ0~kXpDcNmDlr-wbxp*Ip|FoCkxJ!)+E3K8epY|_V@uv^)WBWa`ci9WsyEhryE|Ev zr2wAd7;9$}&vb%|2!NPYns#;0Z5;=$l^+f28`84DhEB#^0C~*@~E9U=GKL3;L+b(`4II-)7 zT{m@!;p9+|$2d~1g6C+jaW1^zPlQ!BlWkng=UjX3;FgW+zxmx?mJ7wJEASE@u3WMx z<#Aq@Mu?{w-eq#N>!SB;4Szzi+o2?y=0fioLLhMv4_?#Pa??rciC?C^aOoX80*>XZ zi!QcD03Lu#-yC&SDZv@RGQPlJQx@Q4armEp@zsiMH0r$PxWs9^ETQ8WrKw4nnk)be z@k*>IMq|-%Yjg63%^N=c!PY{te01pK;bSAInad(56T2~Y>I-dazFxP*5?P$r9jNNly>4k>Bm35qCL+QpQZ=m9339*YHwD3 z(y58^pGSrhOG>b7H1lWk7+!E7nGL}43 z3l=>dI1#ZTa4O-nUVl@LRjHsLUO~K!cvj|(E;*KSRFeb@BU~*BW`j`b@B&;--(SFD zB|||<00qRb9IZtLrrWH6n%S-+ix)Mq(On^aD|)2q9PciW?7FGMi6*Hi2d2V|?3Axb zAxq#ZLVe?mKjl{^LyI&jr*TqVZLFTN2Wq_QHSO*My3nLAmPN|a%F;P`HiQXk43@lQ znWYa8P?KhtXM$sq`M<{7*z;&{Wj;6>o`=GsEg!jV-~Y`1uO|-eeKnZ`;u6;|G{dy8 ztnhx71J>_R_SJ1b$)E81++6OW5bc&ND>klQ^Dp0dyjCi_l~&Q^kfz5B`-ksU!-@-z zcK%rp2zh++@T7TQ)VoCAnqydz<0YSfEysODx9i5l$L{cdhGvrWB5Ug4y5M@?df>X? z*kEeF8Nt5L>SU;Ey#Bm%NwfBt5jXkXj;cP-g^O{E6d(|SUFQ7-bMEzx=u)`5)4yzK z_ofZ2Zog&IyY9W^p1ZE^=#K?RG+OQ_2718-a~v>D-VgI%JD3?>k8fjLujI_V(qa|Q z(W@0boi3gl%N{zBK6LbOxl&3dVz*qs>HY7%v$ZY8izrhhZ?5>iZDeh2xT$?pI4rX) z$TBE0G{+&N8ildHElvI8O)Sy5cvH7-?fTr8_*Gj<9liN*yb?`TqD{1IAhLX2=-Q3- z!~001aiuyyKC=9+;Ky0%{qNc`*w^!K-~Y+P_?xU-i-kZaz*0bU4Lf?_LXjS^qT~xG zqFXGx#5&KR_2w0;zu5EtxwTw)vXLC;fKtN;6I+5U6e|)SnAkGGRi)-5N$)h5GkN{Eobe@3#oYw? zLEn$Ql>W-(B^vUHScwySibN1bwK{dp^2GyOIhYVww^FWONCEAfO>xuO)hm{M`CE@$ zwYORi4d&G^{mt+F?q@#x<|5+%@m}#SKdeG|^!y-8^iNcpmi$isVjkAZz$RY#qjm7{ zr9qJaj}VDxGY#j{&t#vPMi;YqR)_C+f7Ab|rrB!gf-OW8K$M}W6P~Gm^WnKKUqY&a z<@|rr`CX;ZQ7^qb7^MIV1IaG>x%@|mYlmOk1Hu3pVGIZZ!qJG-k_;phv9^}x=47Hd z8P^SSE|bgT^0`7GmoLs`%Y_Oja?-2? zX8U$!136pLNTElOH7sc^ix?Id4q?^6#U)D99HV%gmsDzlxO=>sNLzYuBwlA#kC6~B zAy!1JNU?y3#96U?mN#?{fy-XyN&x^E*Ns#y6{%uCP-TBtro)f?5|YA|P}6MKSWz;1 z>ugzM>OAW(^Vrb}nAIhj*5^AI8=vVtY6x=HSH5SQYY5^@h&}zI`CqYByRtIX^>|OM zrR1ta$|z_5RGkYHub;6tWtRV7saO-|9lS5&&#X=Hwj@^g`Ko<6Cs)>1Y`^o5!GHei zWB*pll`r82^c>wZ9Lr^8nT>=+2l)x1K%AG}GJ!}G0BYsZ#k51+^S0}j4)*=yzdmX= z-hzWtE)ShiI+XT)^R|E>G4SHbUBv24>$kVno;vtiDXxGb{rjErCs+7_dQPclRHG>B z#i)$mzbp~+(Z^;0$V<^wAtCzF)_-ZF#aj8Ln%U<&*^N3Zi>;n<_80B+r5fTusAEBO zeel*s`J%vRBnHR%ZO@eMcQ0OQ6k)^)m=Um`vVtNiYF9^K>0sxEYnI-)W$it8UiZGY z-@JC^U?>=HTz4*;8yX(jv3uXs+n;}C&)9*(qod>LxpbjX(}|-|*QB1gtM*Jtj`X*5 za4IVV5f`S=WR!3&=NSom(4LX>4CfX_S`*uS{kJ9F{ap2@=4+voiA!C>(DbR9{DH%x zk3GHj)Yz#|P`!TBweNZR4NC{xgCWTyR>PD4VM@I>X1)gXY`Za2&plh3{$6?JCr0@g zCH9*oE&Pg1S-&RnN1vbL)QWMQJ4GnyE(noOV$}wH`lK_Px(Y_$*sGT!H(WQcWJ#yx zn6;`tGn3zaWcD3*ZeF{3;P9y&ao#8uUxZmH90*8~h{{z@tCp#2T;%$uuAyrdFDaoA zXS&kab>GCXT#N(@gU z5-YQ+Mgy7^YSe?Z0%sWnfy?s0%BWN@tgz-OSiuRdBi9!5qJHF;kt`sA2vBaSE%{|H z@z+Z$^CssBRfX|Te)Ft4qx#eSbCw7Tna$HpJ6hD7n7d|{>YP{;7o3hjiZ@P1MuX9@ zsGLy?%QCLdlTYJO3{dZ@pqQpq1gvv%L7sn|^)RoAb8BY(lVR4w03afErf23ag}?px zoevWG_0ZoY)H7{E*9^*VVnAhB!AC$M=abDx3?B*yOo!1gC~JR?z2{vwb#=7<<2N34 z^|xl7=xYa~tf)jHdMr+Of#}++6c08``r!W3J8o=N{VaG6AOtK1j6skL)clKm_V0c5 zwTcsA-uJybe0ulu`;MO&ni!u* z&(0Qd`Fg|TBoQZLj41IQ_y};Y&;&~W=$_iMyX#N8oLxqlVeiO~^8X?TP3`uY>J;|e zMGOgM6$z|xL(AJADS!7;ke3vw2gI#a^^wup9lH)ay6s@Cp6_gHecNp}-MD#qXM4o& z7Xi68Q3=Jbopiq#Pj&jAE5tdlV(g=zvX`#O8E~Q1MgbZGq<{}kjcG@Zyotl}e&xU@ zV#SZV@A^nMWLfqN*IhfEPSvWqXKBwL8td&!+;z+PnYr25Yv$*S2)v04Nta<*xpWRWI=O-*Cm2M)lbErs zp6N@6rmJGbQ?us0)Gq=gSKRap#h-V1gCM{d5Q9*#K!)xPdqHR5`I%tZ5`YyE1~VLk1QJmH_)~C)B8^Mw#&p0@VAJqEPJ16Tj7buvsZ8 zQcQ+ zyh_8UlwS=bEmZLjcIH=gMj0W@@;<{;%4Tr15PWvX`L(~l1Z;Y<&-u%1eNtr(4E=?~ zrem{UMZ%GPIpJQ2EEiejmdNig)wpF`Y`rFnQBVzzna@=1OU9`aR*WmLgxZ01&h^fJ zB@_T-kYi*{7=1MJjXEhU1}{zu1_DwduC%m7y1JT|E$v*ps%PW6zO5UV-?(}GHEUJ| z1Afc4XHs+f4;}sK!-pPz`0;0U>_2$;)adAJHd{9J^A4J()H5wZuT*s1<^+L>g^?`t zz{muNfLTDeZ08TucWtjezPq-~L*B2)|G1O_?_4~M0GtN$$M~!>nli^P=_2P5!y$z8 zMg92D%u_p#%*>7|vb=i5(i^VZuxy~YttA)?DZGG9qPXtsq91o9nzW=R@!$SDWq|XN z2$K@P0>u1*>fRlseuWi}Ucue;(Wnv%2IhrY?s*$ov9x!-o1QxQ_kQ@;lBKO5zwbT! z4;_8zk>_8JauCFd45x$wU^}>6xdZ|?#IEPFEGLH(Nq?~dj#dDGYN7o7&cmDix1q{u zjVGWTC)v?!yyz$cbYWrgbsEXyxqd2Xcyd`OlFGFmuNnd~b$v26!gIPif0$w%5*?{$ zRs_19DWQ4AW5D$;iN7i|KMsMgRl=0ca7U)?Mh@(S<1T0Q?12-lj}%m?~XA z&6Y$CyUovaEs8gBCfB*GcWUccaWxexvc4kK|4g@36)8a1?#_vglR{mPYT|rTbo0@s z>8;b{n@bNj9{cObFBj)3Z``e+#50O@0~)Nz%Yj&2u`IP-H-VC1NUGMUYrH%%Kn(w} z`)>EEzAt?BXVlT*s=dhi2i))cbNj006rci72SD8&+&}+)aBMR4pFfk?_RPi6KM3{m zL}8dP!`TAiB<3^UnEm*z;ntAwgXij$!Y`g@U!!2cqTSfag#-e5?K}$P2*A+ds&`wv z^VkJYP=sq~;g?Pq0bkso!vOU<1fy!FvUXZKb*aLEZI!<{@h5L@nZBj{lW0~ljfK5@ zHWFnp$YD~69{Wk-&rwT$WuPmds;a6evMfuIB1?)Q`xM#p$ZUFUE}I(}o0y%e6bjmF zztzO5HY{kA0dcY*so@Y{Bp9Y>IRVFUiKA1`yf$#BWr3xiUkM&r+;zdX?UB#eFBer2Xcky)14@5?H9dD_eakBtjD`Y&ZY(6VOO;AT zYs=X`9Xc`l`MIBc^24`&>Jy1?{a~k~W61_Ss=kC|MNH+#0piR9pM+L$fQIouE&w8VoQT#U5fh=NzLCbL|nf zVlh3iVQY|x;^0EJq`E95GEslf>b?=xkU z!dsRu6&sr10?3FXykf{4!!f{Mzz9%!RW3Fe;f!;(SR-P@pN$0azUlQdwUQJXjY|cQ z0OZ!sMu%f^U7U}T9sss*_p@D7*H7i%Gura~KE^|fA(Q|x4(@uYcl`aQ%7YW@zO+uP z2=j|W&P&MyO;cMYdYEaVyG!0_!Oa3 zF};h}IEa-#e%~z|$Nl5K+<&Q%&|A#9y6ta&rEAsl8qhgFXOm^cp3d0Uztr@BU!UE- z|7AAd3K4xM)_g1Hi&L5uWLLJ?e!ixfg+%F;~)J!qyfEoR{cAM`4z1 zZI&M!KmQ5erIzgxxL7Q@fJa>d7SUf)wd&Q_&r@HsBjlFYr^J%%dEi-qSO6C=4~h(- zCLl|TGs2VWxwZhmhUYnf7pk>du23AEn9Sx1GgSgU{pXK7arDUKYxkp)8u7`lW}(DBB6X<8$XkrZJ21#Tb&mV?TD`};*C>BZ6k-Sv2 z7e}789IK6PjmJ-Fi!lm2Br%~+FZ1%RQJ(_@@rRijFNNw{-&1_Mw;8K5jh zg9nPoZs`JDTY2D=V1R`slM<7<%A7O4qAm7ZCLduyHPpF!olzUq)uJ3 zEL9y^G7(fIrLL%kq`Gf0x|C9%Rscmn687tU9(WEo7FY%tD{5X9n`=YsZCDh+-sFh1gj11<~FN+OE&;|6zZ=r(US_{@RCbC4_$c-+oD5la(SLe$S>vEV^g^p=X{w1OUmF=tti7 zHjJ?AxxaYi$&ul?cyr{v_uQ-~^1&m=pM2)nuL6Gk^^Zi?u53E13fnj-p2c9FR?=vNY0=SOH=qB=9hZ38*<}0c_C3gMr z;rijj;{XtfMh5#5UF~gyeLVxc-5BF~Lz|eIIXO0)OaH3K3?qg^7ro>Wp8xkM7=5G6 zbzNCn7^m)26m-67Me5m)Ji2E#oq69o-qzl7_~FO)y}IIP#L2v*hE%Uohf9(}d0BI` zLf+(qAyt-x57Z8Sqw8coX4w+H#`%+hVs*d+i=+sWdQ+e4OL6l*2`#y|=3M3=D!g3Wsi z$)fHeK?33cu@M`ndTib-tZVnN&iZ3xE><)|8pLUUtGQ0r6=s$<$BxXph#25m;DvO{ z(sfNK8kCw?Z20`9sCvv5uchxV75y6FRD}J21;7Twy8`ENEU=lrLSj0`IOlkTnT>PN zk+7ig0Khm*%duo)Br>sec6!TP+x@+SrHqTb(}9yBI=g8qG8s$^MFSJT$!jL3Zy0Ub z+rjG`0;smu3hQSFc67;kapby*iR-4jo@)b&=zMB^C^_p(S8gjlT{`+#h0h-wo4hQ1 zjTDK7Q7&)I*R&KYk>QkJP(Z-fG~`<6$lYU3`Hhd>Uai%C_>-rA62!^B_sKgC9~*k` zv0d+b`;C@u?cP1q*VVjz*WP_caxBL>rjB{_{cpeZz>#C4lbH{^!$8cZdGHW%sbmuOV^wI%1FZ+)xE=2{qeMR9UuI^O`X1M1#{47*+5g zk&*WmpPZhZgW=2X5bfEnQFIMBV%THS$w*|dnmgxa5&+o`gtc~7pE~<+h!}xk1%U@i z@DK*i1q#UXD4}4OjO%%X5aOEDwJ%|5T)9x(RVeP-bpo+cYm3s^*4&hg_xE)7LZ&JUK~$K>(N+CT~czKD*Bjh1_UVEY>`Vc!WiuE@Jp; zE%%8f9eXE28kopuAlE=d2e&~TpCmJ)B!nZZ!D!&=)HSH9b5M|(Sg~r8n$xHlEUqhx z$w&q#I-KYT(iNA=7aR3(xh{doF?>9$21M3vZq$@Y#R!S44>LG17R6@;+j3jgl&tQN zwsRbZ%MgbyxxYvA>oeDn1*f9HvEY2=S!&&^QV^0SVjcizvi;k8=ayt=ZyQbQZ3hQR zYiIkP>s0a*1?YROdwk>6*v6@zU7ZVY7a)-Ff4lFyUpo44`Pu5_aJx7q>R0I5JBYfb z>zXA4Ft4hr$SR6q2Ta2xRuv1uPk!X)Y_2e0Nd^FzmG&Pxwtd$yb&bQvhk80YcJCfa z#G{_)y`w2{=;(>@v3k5Yf)ILc*AP&0;K;G=&i1!F7?ngU@D_l5K{60rIHZ4CjJ7n_ zp_T^M1-leQXp_KysNetgNVGYx`sT_|C;*^yu^|RRpfCrx1p+Y$kKDGZ^^-R;U*ASv zYkM{IelRNj`6f2%_d%oa!g56lAP0_B$O9J^)z_%5do`Bxd(Oo+FfjlKL)l4R{AH@) zSVxPTjK`XjiI%2>EK7}suIYMB*D6}$#LSd_Qu7*Cy`hzBUad~uv%wI-m|SxSo-MuZ{Mn?CS~|KJ~4dK$z-0_i#YR1m%}XE%k{}C8b0ga1#JbDLnB!9dxNwsu@=~A}6ik63 z3;49T_UGh98a0#(RFk!0S1B|T5&`mq<$vt^#^<*Epq9TZkf`8KC?YAB z&!1ADo^2VrX;DBN&+%<7@`v7Y>*VyzLk~Z9b{v|T&dzVZ+iu=?Y-l)>*YCc4b2e8f zm8-4INx&}gNN0QVfkUSNXeg|-wKN|-I&uX$v{%thulniTw+qcl{X7Mo^SftP5PlT) zk7l8q2g3x{1cig&p<OuARJo)Xn*PGsLX=RKxGvR9?0Rg-Pa_e9;UwE--x%C>@!=(B zrE*T{mbP036&RJuDhkFxh|!18KOFKN4h1>Cf?SUl%D7&w8-{C}hGRB7TO+PPJrjuY zrVK73j$STlv$Oe=BkAKK`H9J)xokch3a($X;yv%UZPm&?QDQ0$+tdwsOPE`zN-b?d zZ(r>tg_|)0aUQh$zf*g9`xPWyb;UEIK;2(H`uvmI#~22idi7#B%LgCcdHm$?``&T) zVBgfw9(?{nMW0v*$g<#*NwGp3)%u(7KB)Wb@tH@Lj=fJAEVbHm{WUc`H}H5R)2(Kf z2HW;5=Ce>}R!jH!>PcD6=%*E(NNl)1w=$F*Hi|vI>6Ko`fn(vRJTl$Xn&#f8h8NTK z*maU)h1AmKfmCg3O&HNa@6I6rCO(qNbtKBY@yKWf113O?Sg_J9t$ldsbYE+ELtp#$ zVHbfziG!HYb!~m6bjWlQQ>Edx1AZ!@Ot$Qg;4tgU>jqXdN(}G}>Qp5`B-l|Ej6~2( z$ELPx)ES$vnI0h?0*mELUNB{m66~@(VOfviJ%%OBo4aVKzf=mBY9jD578#!q*8@T9 z4?-;6fG**9oHRs_Mcpg?`1P!E`m>tLqjaFV~=B1($McsQlrdH49ug|Az*}rl= z|J2h*MOlp{BbE9KGvIG5!oqSO#xbN^e3_X{)HNN~q*CNv_uO^(*wB+t?LY6^ZoBmw zO*al490yAN-`{_G{>5d>+ppWO?wOr?2s!g7(64~XSXT#^O!xpU&}EVl;h88L%|W9C z_%!dicvmbA90BRo`Hr{?u@&GNpf%uF2M&#{Y-27>c73R!!DP2qXLuw z=BOG$K0lNjpyK&~@VuADqX-}nfCr2J zP_lCXAO{njEqrq_F+Z{>nTUBF$>odrVzB_iKs~=uEFV02{PAr&%2i7TFEJN(?7+94iX$guL?$-ft`sZtN2`WbBC}^=FTzcNN@)-X?}qBnijE1R-C(!q|HC zjUSuzl4Ol-*0K{dm>AFRJuuBlzOd?cwkLWzJ8rmcgCvT_PmUZtaq{p`>55i`qpn$e z==)9AY*jg5-9A52gAp`K5U7-n!z$gGv@=6sSCdTuh`|2+~_2C=;+wZ*R ztKWX4QO>;ph6Yp?VN}0OE7MAk#7)D+_b zT-U)8L2|%#mC@ALiouwLp1)1_X!|T*DsH?Fs(WJJ{W=-N|;vtTcQBAJ|c!k&; zP#1v%#B+(sxsK7`8m0$8fD)j#z`86VfL(?Mk0F2^k);#?V1h8gjK^TYU<8-~q6krp z3B~|`C=iSnWKb!k2q-?!;zxuaN&$c(z{EooAxaS;n0k~F#v`FpO>zhif`mjt5@hU) zTA?rwgiyebd@?KM2A!3MT7o4xmJV7WJJUT=*(Btb>79?9lb|Oe8DBTuxxe-7c6;pM zz>GgoP$GGMenq+w_a~1e5QX{9VJ&D(ZJzAi-4)0v)9dGkZyD*_)9%a3^LUg6XrF5R z*w`w|^X{>$)C7NHd8j2mly>D6-_bZ+(TrN1tG} z?=(O79zTHo!uBN!a6ACdd0Oy+-&QGUXGnp9oypJL|aq?gwA zrU1Suv4hnO*EQYR{cFw9mU5+*&F3?@{A_w|-=QNjbEaVsLOdW2r5^R{^RCs^lJe#D z+gCV#G*bpo2MT~uFs%Gj%dJi9uD>gsdI^GX9+et)J*}~bm1P+xS{1{V%T?r>wbyYf z=EB3mh~Y3Nu^cD!t}G#e$F@TZljaeqj=b<4{C^2vLjeD=9Ldxii23&Bu;p@6D&>Y0_x@L=)a(2;xj_&ay#umDbgGu_af zp6XXS4-^(7N^D9ibgNp3SBlnr?%tJot4XMIpv_-A%G%yM^u(^09L-IyY#Mx`y4bjY zh{LdW=7#tUpWTj}Mb$jy%T;}qa(Y>^WAD`D`c{8&E|AUvaMW>o_8uSIur63M1l=yK zZ0C&1h**^9U}qB{MxX(wU{GkyYqM=}Ec*ok zN$IkSSsOfu5(h{*An_#)F!F$UloB8{pCndvN<2$)Y#y)&j%SG#j{>DY0l*cI!vLo* zPVS|)jIj%hO-^rKYAFnFP&oYp1+W#w8I&-HvWOsrf$n62+kq@&{1R=pZ4}r)xzSj9~|NG&8H>zi<)2O32%DTpiyc~Gh?)6Jey@=7MqM58- zxhUlt(VzI#hi}@m|IqW#pFGc}aq@rq_+1>wed`BLV$6ULpa3^--CS>I<1eNM@M z>q0JdS6k-?df2ZVu>mn6FaBm5sk`;#)lV)9{ZUl7y)cb|z>E8tC;-CX4+GzwI^qBK zv60>BZM96!0OC?Y7LK>)KSXi!DWJui7-IN8NN!x|gkd@h&S`xe4S*g|Yx%YN-Ybg2==kLD*u>EAWVS$wYhD>zQPizI{y4(F-}&i3 zGYOZMl*Md;k3!Vd@yYSgzy0sd#OxL7&3+ZZ=)7&;ab$Wn{fQ61x4){(ZPfL|t`H9-h+v4qf?o8QJY`ihHG3Lkur!Q2FGL{=i>G?jNQnUa_HK|NrD@INp z6!L+3QzSIChzwA8s!-^TS6ait*&+Y~;N^Rpb*>!WnJ;(5W2dIiO5UON!;{0;Et_85 zX7Tl<&y65pC;$S+SE|NlXJ=M7`|^gQSK^rxL6`y}6bQmnsxnfjHplK0#u!0>s0V zSj4qSwaMqPoanl&;SowGKwV|Tx`)vM(j*u(2}>0Z7HTiS6|l{MLy&T$TEE zcGi=PslmB=Tdfwa^=xmC%=s6ENMkcWUqu<;Fa=T2%f{z~um1bqCyA|}mzc3?X1>m{ zVjvRcZAWbAo@drxzu!DpV^vuoE00C?h=9q)YG?f2fv9XUSq{JybY1wZzq zpST0PmCyWcvn-_nETG;(E0Q7t?}BMxnD?}SG=RX%Gov1ba2Z0uhY#u0b1se)=hn5` zpSel7saHBSXC9cb?mudd6mY&uUJTIy;GV8fg4V!2Uq_Ndp zwPzIb2ILXT%b}(iMaWmIGNxfs&w2qjc|qvOumFG%gIIyV49_Eh^CS^*EHW(G(2;3@ z*08B(UCK%`O6G-2=W2jhkrUK-7zAFa)@j2)o^4P{UjF*$!3XCPu*5Se#ylZ5p?2M^ z5~uzu+|9zRz#L+DmSaVZNFo(Da6Qls(lD5M-Iy3Z0B~TQcv`z6zH-^%J$Kw(Dp$uR zr^hCzre|}-Dq|V-%Y3p%<FMgxy~Xc-=Zbb^h>t9X zUtwdU@cZvw-;|7h=f}UioJGr6DI!UbNQhq(H(qyeeyh*>L^`%PE>+#;vIh`!9CkRzzSSeG+Ig{|HN06_G03%zX9*;4@TR!9~@p6ObT$Tq;Mxxn+ zTJzB+JrY5|C<=vf$QT4rh2{I(dBiY)8DKq;p4yUc9tww2zD0#l%FzQKnDm$Yt`3|n z#!}J1lnMa3-eRu5xa7%R#yTex>Im-9_nu^2#y{*Y%hNinA+;$oqK=BJ3gti_unA9?Rxk8j&?36y}ZWW&7rrN8;T z-~G&IU&ZhK(eEqodAq+UX-0xJLL49#rX~0qh68D+moG42hXd3DQy40R3)hSSfCupw zcz4-e%lz6mi$B?Y5vv6;e{`q#7k7ogF~BweQSdM*zEqig-?wM?Pofts82OiX`EO+A zprM`dHw1t|!0_OCAj>%+she`Ar9&wX%%xuZ!TX8*zDPRUD1?;nH z;>dLU`0nC&Gv-SjOS%M__Cx`^{~m4sgxVT&0bBw=fn!0EzFwdDbZYFkWBvb^+Xyq6 z^O48|LcT(a_`#_Mw>L@vuv}7qBf9<*{*?{KK4Io|*{SWu%+p%Qd&weE#EOzH5D9pe zLu(DzwoK|-XXs?a&QH+<%wfzh9Lr!3c~9Ud&mq@?hK>vqT-TwV`6d*IBbF5d;SdNM z(haJatm8N@rSXJN%(rB1;t%|2?Lzk&1xA2r?fzrAuT}M#i$R|VbBN(E#vI3R3=sq( zaL9FOU1uztc(!pdd}kycS-Y}(<+8!1M0|QSJ(tbRq|$|Ac{WSUdhv2gkaF$KtRf?f z!E*>j*4W&eTX}qy8NHO|8Kv+2@UhLCmwo29Kl3gfEH-tOb;^OIzHVxM%uZ<^$>x{Diu(0KX^Ui_$T0%o72DS}zh6TX-GZlWoDYQjn z6PeS`osEy>vi%7?BD;z(y+r8S{+z7o04SI*r2AUh4-TJxCnbWf5fi1;7Jj&E?^g^ zi`+sy65{#gdk)PEcGov_w;ssrEcF8Z;QGas|O{?Cx=rGVK^5k0k0hO1w}rP z@rXtn0kCC4>U?7*q@~O5Wu#0RRfr5wW5$!K#Z-)1q1ss~i(_$zt1j zBfwb~tiNN*f%>kr_us?u&K29!n=*xG-IbfKD zp`a)?P~#mwcm|0A0GeEpi=GU1>`NFvv)0_mcFj)rdp^rwj@6bu)&D{yD!M0b9BFR%^(0T1P=^6`WH|B{i(_HD_Zkq1F#SfB{AF_EY}(P(zR1y zArOtQxe|EBMIq6S&glE!b@#)MKYjezG+eb;Yk%{1+JF4G{EoWmh~}X^ z0?(rhCgG_AOasDgP^$pBkmjcgoB~N12E4EB%Kl`}MP1Ba-Xs5yyZtaX4W@o3=dS0H za`O8hZ@d0WvvcP*TqQ&;D28G2G&q03asVU+I0;M*L^;kXKwKCe0f(N6S~>)sU3a%1 zeIB>`g*m{9D+NZv2mvB>lsZ~^I#x zW#yC2EljgpM>3c;&i!VNTbgVOegZMS{3vi&oe z-R^~9B6Ur@V(JyZyc+OBGQycQ*U7=Fjf@EIT(*BqBKH3cgkAg|$?F3Gm= zUV_8^fLH`y!8Lp+AahaMBFsD(g;I=(Aryv%DmsFpkmST7@i7bGhj5Tju)!G+7(f6B zA;O|uh>cAl!NgDjA~R-$Z7h>R6_sTr){q5L2^0g>Wp49y)Zb7Tgb^SF$nrb+7Jccn zZD+v&RO{60NqfnYNdPJ}1Zh}^4^yqlIQq^RxuVQ0N&B<@a5lg;7yxi2cj$)E*jP9@ z5d(nML&^APcyeXxI{xjb*FGj>?Q#bt|cSj&S3buL9=TXY& znf9RgrT0WX@x1ZZ4gb6RA`F8 zOySJeVE`O}lyz;J1N7lXQcs=Dz41yo5f3;H)lJqiU%0k^Hx~KhXnWYAP^vGbEMOPB zG>8%eC8(Uv2I{GGF|&#?C!&0S|Ts>x^DntJn11 z&mSG=?|A23n`hF~mCBpB=P{@FLqSDCwFYR_;@MkH*PKvi_~x2_Q2-wRM9rI78BUDU zY*iTB7;Hq!y}R~;?loe;z+7oj(?xFR*{+!2BC)EUcITcE502m1*1GR-Y+?$4pa1); zYkE9eY;Our7XWBxc~?UcB}^VS$NJ9K+fGDXk~byk9XT-efUg z0A}*qVsK6krj$jZ#bv#bjk%7aNx38~X6+FJ6B~2UW0C%++FZu2wpNSXm2$L>MKrY{ z6`l+>k0j1)SDT5#GE!E6iYE^*Y%o-31fhfpP$j(5i0Hy(s4W@36 z&T`Hez#-sQ_UZiI(mD04o^3Q5rb8r21iv5ig6vXxUJ&#T>z*e=v`@PcZ~>J7F1Pm^-( zDl>WoI(=6BjgQ{h+15%ZIeOyMkACtb76Ko6@0RY)wqmI=J~{oN_rBwq=l1M;?!+74 z%rrmnNtV1)nRxbjBu*)Df1Drs_15OD6KBSL`f`R;x2JDtt@`!o1)dLaDzX5pw`?@SsA(RY2?Z^oftoISF;um5suCD zC`%vPi98Cxwj3WmephFuH6ENv1F*9j`h!!$a-jr(Iu9Q?c1JQl&=ET|l3u$+P0z@+ z%4xa^S3$3m|fzB;$ZJ(Ipfl$Oypp-JY8t6H26hf$QeShojS;jH4 z9kGZ>nk-6?KmZ63tGlVSY$qv4Fs48~3R+iF>&cvq<#>@mu~2KaMpj2zgpfZFob))| z)ncs2upNd43tS~lcZwZ#+C<4>;Pg7gmMQQfGVdk{3swi;eUg#q*-k)+MKk?u&!`a7 zd0ywZ6lPg=X6GQ6GByFspNsRLJyMq9&YSS4B7)AO4H&fB)pEqn9csQO~xu zeA(nNuLe}ihoglOJ@4|nknu_^pprsCzepgvZe8EoZoBDQ-}~wOJe8|VZ5u>wQ zdY1<8uE0;4VB7^$2lnhPbpQ;&H^Byst{bgviwB=>gJK;#7cd4&K@d%u|9oxkZ__o? zy4YnP2NS(fk#SNN?1^&Cx@PFL8RXbd%7Z3KS1 zZSxn5LlxHr%6J|klvpn7I>aM{x+bOGc{B%H*L97C0hm)*UY0~6i#*3gFKuuU3g zOBMhir1(2)1*lXnxIi#Ky@4$QShu5Aop{p(l22PERmh|Y+u;Znf?aJwXM1Zb8eXw< zaN~MO;DyPV+2bdNPn;^f#+=ein7DFD_}=@5ir~J0lt%ynWgXOLqV>Q2uZiFL^{Zg? z%CqJs-}G$y>)*V89{mBpT{kZ?E$e^%?YGvi=~z0@_oc7@;!_{FZN-v-um8ukH>_A> zzJT2)yVVBD&An7p|HNeZ{!OJ%3kq2C;!UIxmCYny4w_4Ty31Fr0I&d@uTtS^TDc<{ zA6l#jX9B5WYDr6}BO0DcXZqVR-DqI@Hc6}3o5!$_DJLA4?QiXSZogQqPOcc3y1B3IP*v*;5A2^65KjS7 zpoC-0=FqZdCRij8Kop1(mPJu&D>{Hg0+a%A1L1-Fh2~TFY+3L>duy*@GQ$rsWqEyQ{UBwe*?p z)9qCh0LiA9P8M39PBx9lrw8V8*XMn8MNTWR*^n!F-x>VbU(f#YY%2FUFd4RI6zAu2 z2K+o$)w+fqtMRe{PYxy|-Ypcgi;Nr_HY|DDZ8v`Pn?IaO72&E~I{T-8Eq&s{9RM86 z7hozL+>!;Ez_**AWI-*nkWRq>(J+7?Rxt3sS!l7PZsyO9JIxhYVbP%EJ7CmC%H6`Lr$#_ds0wJVny2I=S>%wC?5vpnCFZZM}Iq_V`W&Y=98sELW zbzQsz92>O8d0MI%0IdeD4Xsg_JqwRg0F2udo?(%Df#VagD!K&*E3$(82Tcj6YuGei zRF;5%5}3{lvvNgT~~G+W1*Q&>(^BsZigo+p>9;9kZeFlRIWt)cZv z@s2|F^bqO`Te$**kx!2mc2Y1elglSoWo#72Mza7Q_!Dgj)SOHt;?e6jUHk5P!j@$p zIWctP_-Jb85}&RU_x)DYqn3-#zpN0X4OqHtt#8Yw#*STA!RQrc@o1p8tE1;r?fGKq zrw{EXRy7t4?>%^gy5@mn`OVj^vuyH(ul(fw@7nsA-+ucK?|*P&JpVfHQY@-5RdyRX ztYRmEplX!)|Q}{J!`Tb(|UAr?1ojbq14&SxaGub zy1&ivF~uft$+OQ1x(t&2{kuy;ng#Fr@-f32f$$F4v+1;8!F1SOvh=4Qt? zuP}JhwR<=67P}v?Tq-x6IC9{F?_KlLM>#`3Yk|>HXA1$Vb^nmREjPO9y53#HSFB`v z;?bEj^bm3(pHj#~&D@;@<3(L7-Fvb~99#ZfJn0!sk^ zNNQ)(|YTqZbNp~IEA<;mHQVz)c#W?wANM~1CTFV|jX!}g-~ z4INn~^~|6E(8X6WOZb7KtRI~@i>8+2{)2*oFam@DA%v!v)8vHAxCj9NL4t;hiW@z^ zb?*&$qFV_YTFk9<;{3IqJSGiool-N9JQVp$*I>DUdkTuE#{ z)B*rKdpil|h)V!-Eza`FMjPurQB5{dWr4GVf^5u`aO5V08TfwaTK-`A?k;p`QfAt4h4#U zqtHxXwGLYgAUmLe5V1?$`sbb_;MqYmQ}TF1&PjQ*QlzVmZ)r*-6S3CjrbH}i+fJ!c zsn+V{N_Bj4djFxLwR*!aoOgXtXbTEpYZriIRFQ?Ipm6F%hpEXrd(STm-@7Stqu6*U zu_;3XbQXvt05S)D^|8sKYrl-_)clmMW;=j1{Q__Zf#-r{13v2tSR7N-LRtTf+3hn; zt3MF!NyeIiVqowQH}^l&&pmB8ATY8|hLU?>%~k{yPSvu7TAjX@{4yoPuG@CqF?obJ zmX`x6k>lZpMyvIUt<`?R=oN-jM3M2yMC74i>H$&G4PrYlgG4caRs&y1y=;f5S+(qF z4Ms;Y^Au7dOq!b#Z7oe7egD1TP;h!SedySU=MQFH=|rCM-$q`j5d0E5!llrt)!qW` z>sJwshC{)Irf=W%ysG-{zIDYfpBi#q&$4U)Aa=uXoJbHdDf0(EdVJaP_K)B9p1lW- zJoL!(uSeN3Vt7{chXSF{!(xa;??^%%?YqbLTk-qJdyirekG`pl#%`YMq zEL9sqp^{(L7C%0I8ck9)SJ&=}c_DMzgO4(fJ--J0xh&f#=Lb6z$4>!p00a=4yl!di zc5V$r~i?b<4XB(6CH?CG}pN(U>rY%GTtU1F&ROD2jI`1zDQ08~1_#V9_`&)0w= zK(6RzJG`aaf&i2;aU?BA(rA2Zz4d8dbVM=zw(GaD&9%|hwlPS7r(!EhpW9oeup@kUeOFzVg)sk@EN9BZ`j1H zpW$E-8;%7%4~qGVC1!59dEIpz*8kl<{kUGbnw@`L?9+do*|5Gd8jd1#`VLbG+Bo>g zH0U+}1`h#CfpbA3Ad-b1b{lS6>;J~LtHgB*hzTduj^=PnGBHniM#JHHL(3Hk`9djQ zERBp!TDC0;LapAIm~~ydakhfbL&xRi*9UmG!01IeT(i(K;}V>Y@ha)=GpWY)9pt6J z3L)T~+eZ}$K3Q~sHU}3uBt3{3z%Q{}5deU27T#6lr=7}C3sKMh!`#V#l8#0spI?;x zNKRpGT5=SIR_kE7Hb^Wm_=T6Z$c*y1n~QK|*1i8Ap+t#mQc5^qts_kEg&XS51Q8ApPaGyavKV1t!Mxn4jWAITrM~J6igCy54^0t&Za!8#;A#=+udmg;%YsPl4i>dj~>@ z;e@MT^vbid#$M;QY*^pXGJ+7o7|%03EX$J9tN-}1>FM-Oe*M1NKJ|&jw|=m5vBK$+ z92;3N5KzH#a6b2n=QI+>_?eX5)En-9WRF~~0U!XeX)=4Luf+_jVyV7Z@YFP%npoEt z9TTwW0T5S`CpL62jTxy{#m?FNv$*rvsZ*OaM8{_s!vuhtYggKSYvmI=Ca+zeUe@2f zci-7GXCoOGw4CV|C}4EPw@?a9YTdGxkN&LC+MVt1O$?s|5CE*~;4-mMR&qsP02m0( zWRSP#;Dbk3c{9w7gX>7yl_(`63fHSEt zui=FXcv9?+M9Y?Fx(k#h!vm1+LUBgo}dcm<#E0j0+t&ImIm!!bCuYPG~(Yuz=@777`hW900^X9^P7vKI03|sJTSZ=&&(j6k9GV)eOTK*xqTx zb*U(V#{dBM;IYANe_s8yUS){T^1Rgmq=mymcn$aWXpxrC>8yKdR_*&3u$wHpZgW>~$9?S45-GXcFqtgjy&8aDbRfSJF3=LY@P_ z&7Yt1ZOu}##5rbsY$A}!rB<&Txprgc?lkMow_p%Y5VWWgKaroGCl5dxAwQ9YaB2<# zo)1~&_MohLl4b)i0F*L9wb>UxScp%S0Q0pdQ|t^_ogIdw58ceN4jau2gc1<==*;3M zZdz&v-sXat#RMKIw0oj01~Tm8E5#1m#Z1%KVh264{od3Xv;Ua{@&I7o`{4AN8X;WA z?l=IbDH#9(?;gE#R-TcXrea!Lue4Px#^YU9l;myt&i^_75BXI2O=SRxYZQwHFj80& zSwRi)926>yqg^Z#z4ML@OZt01|IZIy$`jpHJD(jp$}HbJ@u`pbu30Ph_r$uI1eqb= z`hb`hjQj%s>|XbgXZB2`8ujx0N}Hb=L0;;ZQp=`wF&0<2a4=T_*Q`;`cFe}jU#>j- zo9#^j5%fHG1m>wQLACh!zwWL7(Jx+#wEL6&<@?^-0UQU8bDsI0JP)D>B?5^i+a-o5 z)mY*8kIX%q@h<-Ue65)JheS7?!$8P+BnCo3;5eulAaD=~G{W-d8&hALo5e_&tW?ie zi?VQw9;{BkBRKi70O`IZot=Po@Ho4b#(2s++W4w~1rC?C0mL(UQGS;O>0sm`4D7DiAt1 zm#YxB!HOZjO4OKQIZC8 z>5l7HQQE1mw{^wR!G>P#>un)~95^uQ4+!g5uc*{ZTdrN=dE~(UV~Z|kes_$F&Q|KB zci(fTBr{`E#aAsV!ARjySP=zOE}52Ac`e=0o~1XU;ysK{s4phakz6*25=(P|>kwmJKGxrq6Q6RH!$yeO;~`$oB^Z_ig7JCa{2P z!Z0M=*&Umlo~p(og6tM=3&Fs#&xmOSZr!&eBCOsO2tOimE`HA?Y++*MW;s;I--UHg!RZBI|(KMenakJ`4R13OhlCxw)IG9_< z1t(aa&S4KBK$JzPHPF6K;;n_l0O9HQM!WTZD%MZ)%?OQdXoTkck?BQvii`b?Y_~J` zObaGx;YCEpuFEmHH1I^1n)3%|l|afD$p^KN{@s?J|M{MOsbnvgQZVWoj_ZYjg5!cH zP!Icw=e_K9xcBZYoo%gO{?|t?69wPP(_Xu@6XIl6@QXgbBq~G0^6tIC2Y#7cIfy&@ z=D=2f*ykfy5OC3YP5qreJ32brunql;v=dxJdX%_Y-Ox;?Db9*AZ@Dt1UcN@Zwa*x6 zRszvDD~IY3NLl`4CE=kH`tRRwzVvEoIOv)<*B1*=y@9-Qho@r}CE9iryx}?=GSR~| z?<>>w|8m?Js=g90ir9k=eSb6>6(ndh&PCglvJC2INfGRXLryYyLZY8ZAO1!r4W3Iq z>t)LTeo>oT77X`?TJU^lDZ>E60MA20nsj?yl0$emChyvIy)^x8@s#nW(%g~9VQO^eA z=CYMz$H$&{diPViMnv9TxpeTIZ@X#r^7iJYfKL?&PzU*mM_#-;%%P#+jkmIiXu~T2D|Vt|JOWq>MApO<=K-@?ccCr$vt=6GBq>%^G6Q@b)S2FJQN7rd*?0rLg@z& z>^<+1>&W4W6T?6H#C_NQ-fwn)`v*@{i?8gAJFj4mFsjzcqJsTvw8uwE+m`p=J6D2* zN$iNRt;lpf-P_b#teg%dD3q&C+!;C5BQ5*+FZ}s3FaQYrsSMlKm+$V3jg6d^7iHvH zktfc{d#~O6{crLWZDDmV5T2aOZ)`90_D4rfrdO>-l9M* z)SBh-^oUr~=Kn-ElQRRuC+^sU9k*lOb7zwIF4z%YBOY!#ctWUX{dCvpb(`pOP;ZJv zre?8gEslMvbhSv88sDfc3ZRy|+SC(cJ$v`3mJg0@9So#HPB@S}l|iQ^y9vuwl7aqh zlZ%zC^{8SI8ptg|cAD>xM5Y?Zb?1MDVrFhI+OxgDn}|0ZDB4m;C@17)&o*2U)dIK{ zVW+P3Q&p8K_CymyJ>WHLHnX)L)?(BPQqDlE4%t3i%}Rls1TfFIplrW}T)yRK;50{q z^ng7(X!LJyWgT|0bZUG{&Sm(49qkKu2M|l8<84EKu7Bwl-`jnWm2hv2VP1_!`MI1+ ztO{a9Q4Yl7if;II-8z5s1j6sUcS|H3`sz0yCXR*}e#@r8NH}=t=!waR!u-CtadVGf z^$iV=%_~kbQsn0Ax)oVEdg9c4@9I@M?~P@|pd_+EmG~4v_4)j&FW^^IpD*B7{i@HW z$eM1R9Lad@I8YN90NM&(3aEY-%47ir!PoT2Beh&H0ARhkYaw=hcDl|=k)}9mXlk|Y zRT`D|eZ8=*le~Ln;Bd-3HfNqlGZ*=3?|QuOi#wvXw{$`!3-&z9VSwjQDE4TUy#28k zR2%Cr0~#0>A!dGxCdQcMFvpS)Ri?fZY+u5(LcR#DyRZ>C9wnj=Se5^qO$|zZn`3_r zRUaeqO3Zc4i%MZp@4m?g|98{IdpnmbB_YQn8K*Xjt3}BE)%3QbX8ny`B$T*DF_VJ% zt(uHdkN9dDV_6Py^u=Nc#PERd{9tzmW0u1L>k0zmSa4iu=(MgurK(?&I@Gz^ju!vc zP;_G<3*<#jWF7#+Lb4fr0x&O9D<)Q@Zb7{Sh?7N0ZHgh+lN&lRO~Q&u2(6Igt2tkr z=a`sbjr@K+f5ga-Q_s3I8;%tbVh}50%y1ls8eR2I%|ewz8)Kj{9euR?QEp>|r}i2}wTi_nTe z`^Ar{k39WWaB08dv*}+&47m4go7b;d@q?c|c;fiXMg0aRheHwoRO@ibg`(cMs{dcJ zj53!$ovin4NglajMfdJusZs*~!VBY@`mH1d%UX8-BWF$@9#mW6)5}&Zd-^$SI{+BK z)q;WXJ2q-9(X~JPG2hV6xC$5Q&GDJ8T0 z`swfD9DCbM-Fpto#qwz!NsiuqOYe@oQnd^~ET58EwPN;`n>!vIZ9SZ2ObdXNd*XA= zfu-9Q!KgQMb8mcHi%iZpT2WWxj@{O?>X)-I>(Rfx+$h#lLdu`letOB~C56 zLwe$lMC)OyR9sD_mI8W$pV<=W+(`*Wl*JaNmWr#ZMdcXc3=AH{4nh)BSxUo46n{lx z2rw2V44qhCO$fC5QIXpG?&d~^M&+Wc4m$&x|%=y|HME0eU*V3 zuwprK4<_f5UmN&c8i zEz2%Zcbdn?ZT+{Wrp{q&q(~?LECUS#>jv@6>cwP-n_1@9B5O6`9I-Nc^os6YF8V}> zl_Z}(?DuS!Hgwi;C}t3Yfnx~I5taehgSyT-j!PWvb<+5h_~;$IU$aYnr4m>coCa6G z0*ESvBOnlHl3{Q4%X{+Qd}%0&SV53Oz1O^t1~*y$6}2i*1TFyvfg*#zf;RH)+_8Ui zs<~Hpvk=Q;R+>kji?_(5P;aodt<8?>mMhh2tv;8{rP7({ zv`egt*VEDcU;l)z+NcZQIDi?DF({L>m8T!hef1yS8V>O4IM7#o*8IgoJB}Pb`N4PJ zyL`#ak003e5?ykLlNFy&mb_9K+>7&KuhbqIEAAfXy(LotIxoq@@J2()mh#=n_5+n_ zYs=)CSSWL<`=OJkHf$&k_C!vOovsmuz+8?WFbi#M@v%_=VyeO6Td(by*pJe}#Ok#J z&u%}1DOpgbb6lG~^xoT-Z+~C`i7t?R&^2=G=(V?1`a0W>?_e$WOivU6R}zG3mM7-y z>ZPrRP5=);!3y~rP0{XyI~QmAiP?IfmMISO%&qEc-FFO#2SCc*os6c-r9~v_lzMu& zdR?kk02ly9XjEm*=y>c2Y&*wp?+K?NGM-O$hPn72+^_XnL^m*0j`1l854l|O@IX)oWuzN00dKyhvPRf zeGl+~Y3lLdu|Qdvx*oOeQ+;!k@S4LCL-5kqIKHZC*^TL*8nB2WQd(;A)F+McBbz1& z11w?msC5*E|MuChjn7({KDnLCtB#J=#=pHWA*ZD-kF-*nmy2K-VRSv->XgMlmAG za)JQ!Ge{Xs0X*Bmx=HIb^Hn#+zie*d$l>~t!xI3YhGQ!R@DN{u7c55V^fob&wb_R|LJ45{MX-p*H^yv z_=_8g=hGrS*{#-Tqw+c`5<6P?-$`w2BFJY7i}IpvL(?a2Ts?X1l4>i{b$FLQl>va} z$+7AFWueI#Y}*U9n=T}WPR_1c8y}l6RpsPu*R*DigtHmK<5Y8RrL`$IJ-3h^rvNPS z!T|`el5wuXVgT1&*{SCT+WpU+t2#tra^>21b|jjfIJxvX(YB*QqrgC^yGyJWrE=r6 z*c3Qnu^~yTANo!{*?H>5^}WyTXIwke))bwd0qOy;02DBj?r3Ql9zUIAB%bKYCu2Rk z56hK8)5)>ffsWBzS5%TsO_L3!WC7R!bgn-Vo7K=lw-fb5z8aG|_LUZ=p_bZ1oP&IM zW3ldbwqK1;+Kf97?x`y>g%+v(pnDp9(|VlKqEg$Tg=dNhl-gLq6643wqA+oK4H0Je zwjGOd8+hhgBYaXF*uGezji#?H;}PG$Q=Q10|1GxAUHC`myI((be?C>YtQNfBPlQ!B zlf7`bqONC@<^}U*MM6^S-EZ4atJi<_z%ys(r@r}bznK63v1nv2lT#J2EPI~)EmbO= z?f*Y}?-_2_bzO(fwR<`H^mco%=p6*udy_~>R`0SB7unC&vz^cBapIRav7^|rBio8) zTe2w0Dx@fpVlQ9;(K~Q)d%ySewtHLa{WupFAVm;`XrwSd{vgiXr|h*?8EdRL$7pU$ zf?=BV@lq;Rdb>J)sV0`D#`Nbt{Q%1{EW;20j4>g^G_A#Ku23wO%9Z&%vTGN%OWAh- z{pUX~e(jHvkt7160D=wxP?Lalz==*4xPSj=`N?Ss;F9Io5zjO#re!E{Ku9Gx%}i)D z^&)^yMn{i~IsoWE&IND*Q4}Lmj6k!Dz+#TY7%yo86O27f*)HX|9`+rAz4MgGd$MXg zSzSI|Mel$W$^}4-$Vq1} zAvu&>@dc^>%To*B+VCcydjJ5iZJ1qvM07**w*NBq!f)8cskdh(S(#!4L7+w6$Mv#3 zAg+fDhw)q&yXF@cG$$zWXoRsHO0BBCT|2KjfOj$T&-idt zL#j2aE&)IwRwy`q=V~YHta{=JsZy=m0P>n%X>K9}$%V=(iFy!fMkyI{VyXEx-Kp}) z3;sDSJ^XC zr&pwWCCCt}&=yS}E3i)8Q5qN8qprZGPgYPpV}PcoSH+{#cA#9}Q)45_7doS@hjiLo zs*G)D4TspSj^=|$#sGW4kl51HIKP-lClg1G zjsid|uA~z2qsPX6d1jTyhVcD&-g@Nt$){d;{m9VtuKiQ{_Z~cYY;0_Neqo_lF6+L1 zG3e*$3BOpj8snjc_OL%EQoEus8X}WnG?CPgpqF;kP82VF!3Xgj$23e&WEeV?U_GR` zws}F5Az}oY5Ajk^QG{?rmI4CLGaL&Df$LGG1(r=r(=iR()HTP{JzK|~S+5tlOq0H6 z>z3tN9xw6`4l$A9tRV&8SROaBJ;lsnZay9D$3I>DitxY#> z>fd(5+H^w{gIg?`*TOP!9gJS(n4QhfW#&Hm@cj+x=!vl+V)#TtbR4QyQ9ZMIW%{vg z7<^~)eigvdJuxu1u5*4+X&Tw@(M)o78hL(wpdue=&(8Js$7W}jASM7{U@3I`6CY?9 zdm}wDu|!oOkW@9_(#qJrSgwK(wNzq$Ltp>I?ocsXN;bGiREkBQ05A}Q#y4+G*fTAY zM{_N0zQ+U#B3 zP!P)JSp5NSzMB5Vz~L0{qgZxsaCGPVufRc_SVi9 zcgLnCL#3<{aK`TF^>3H0pxXzPB5vzD-_nqrGha@W4)HI+yn;46!=LXDdu2fo3%fXZ(Sysq~9@u&N;oltpPp_OfLOjQ_4c&r(%ta!CjU|G; zt5(B=s6Zsa(4~Us0CaUWMkC=PzdT@+_a6?csa6nEhEbuTz))o;=gBP2J{29;K6_>B|0D>O2r5 z(0q`Sf(uzdNp#94D_)_#>2*<`TIq~}z6cov>{qww`(vSof~!~bf8f5GRECTkPUQdSPrvuE zhc^AeS3dOQb1xn{HhblTd4DuI`>XBU?PYF$Ws_vht=@SM>7KiZpB)%z+jn>=iIaxN zLT<6!t~57C$ESb>@W65W58d^N z8~@?2PZv^RsI<0mo+*_}%fC~}=fdR$FYbdmp%k-APb1|Ws*aB5OVUfs@= zI5JmB$g7@TKBXeL9$74dRCbs4-3Vqj1zPqluYJTwQmVqN+RHA#G_wXvIXN~j);+U5 z2~TXX(_?Wn;i-yhvyR)=68*1(WtRfFer11 zQdKF(C|_w^Jwz#ynCBs_e7@&Fj2QdXPv1H@J^So)d*1c~@3?JUM_bD`A9=Z6UQ;Z4 z6h%d&QZZ+?HaBJSh4}@O=Q%N$GHcm7QToeu-eOnw?5Pw><3= z+l69<^K6S;GZkj%6GkO_vH~Yzo?>MwASWWErKz#4rD@yd4Uur@=!ug@PYfS8vUt%F z=GU3g_cWtn9XmdOX#e5+@3vfRcJ@k_Tv(=^x^qKsnoA#jwc+GA0t^70ZRWdsLisFh zxl5-Q1O(fd8C;nf9S01xWMcHrjV-0)iP_=#*1u=l)10AD>#}D~q`eEx~-btXOj^ zqlMOh-WkjFCEE5^fgns%2*KRCSg?dbb9GvjV3wXcNyq`RM_zEX%T?AMci_I4&8xNFPM#FVaHf)==?9sbun>1JmdTpI{k znh=%}r+qN>cu3gRCVcyZ5BM_B@Q9&Uk)mjhg@8;&!)z$T^E`zKvTURoxKcGW%{5KO zHFe)LNc|icyMVoS+2I@5;1^>b`48#e{%Z2epNoF@Hxi%j;aho%9PH6G^Ke&i;hbX?7qtnrZ|NWg0dnf;!-Ro$r1}dIUc3!OU-4OmTT9QEUin@R&Qc| zv5P&^w*8vsdzeo|AQqK;6!3g__qX=uud;1lcYWK(&iNk!C02ggkK9-@sPmE=AwW@} zQ2FBc^VqIpS2qo(runABiULZ+xKLPfiGuMZzO~E0A#xo{uau4H+5EAQ?Cyi(hmRiM zId;`R-)BE|@AezkhQgvxoKnepPn_dlmv*|8(a;q80_blXCL9BNNq9=gMW6_{O6=r6gFV?~xuZIZ1 zj7!a~)69_2`*J4$@}lmc=HdTB{^pqz2grG(b09_th7?gCr3!Lw^|Ef|5hKRqQbncD z-z|v`rhe;-cke%R^yM9g-T~kuibV`hQ4|2>yG!2r*s(wbcv_%$U6ooundv7ro zm-;CPn>Tbkbl+Vsyz=^subg-XP>yI85LK@OdwW_AF)w{Cwk=eH$~)|n5lQ!c=&{A8 zMlW{VT5>C+5Je%Hr)ZAj8CmcI9?=w74wx1)E%33AU4xTC>8M}RNTqVQintNY|BLVk zen0t@h#BTe46=a$APU?7HloH}`@rul{+CJnl2Y%8LNw1w!DPg@Y*MNc->RL1sywsN z7?EK(Q22kS%;y{wg{yVpbt z8D^Or^&sEUUg>F#R5Ic00#IiRdJM8vJ+bjFnbex6j-WF$&3s^8V`9_o>D-KxSvV5} z&v&mBu^KJROKOD{$yCRxV6l>IZwnXa1Lexnl@4Tj`Y7-d^OJS*Ml5R(r+ABF)v4|9K|W=q)@DYXB5u!EzxBB zD_?kU=idFVzIx=GbPMrJ?4B|vslV)**fq{fX#2%iei;LM^YeuhqhnwA)Q3A-<41-I zznE=_7~!Us-k<(z63`O%aALK+uQTRwih{r@(qA40VE~Oi|S}`i6nx-1IY51;DFADK( zy{39JCne*oLlpn*yl37`Fl^v!4PX7Y;olNxC6uGE4cG(X0d@iDh%a%ya@&2W+lK6+ zDQEE#a#c&WRy7=7N<^tpNU;0>A$5Ot@|Je1H(F5PV=*xn6(o`JF*0qWs&=VR)>P9n zOzi5!w@$hrEL$_#Iq#M&b#qb^|gy3_#I$a_(jA)Lcd77pZ-M72a zO6|ONF)Rx~x}eU#fNkTgkBs=lw_QuGRgJ2K5iKU85DD`@OFoDM03qtCw){mrDVKO= zsi+N)OuzcZ(HCAHMxd?e?|u0GJ8s>+CY=llB5k_hVv!&O*9;ka9gMy!>SB2UrNx*a z1u>zBs~N+>G3 zVqoEhwH=dt!!t9>6-%`10nZj6+{;pzUt6<_>Yh%mdlZ;!ZMIEiFMUO_) z$43!?dZGRFs=;7U3uW?kY-)$X*{-&RqqD42FI~cmgB`R>$EI@t3;=dSzR=Oo@%nru zTMgy)NT%upBzfBI*qe>b>9JWgoOi16z>1$&V>4!C-ic(KN~_Xvgien6f)0#@^L?Bu zNS%9y`kYnn#My3k;KdXo$mj9=Ms4N>mogYzwjc)Im!AI5JO0m!;|mu&!PO7$ZHnW$ zc#OBPLa=)Y%bO@Z+?eLFML2(6Kiw4njW2%Wg;!pG+;__ZoWPAWcWJnM6ApR0Zs@g0agie(J&uWSe60Tr3?$Js#z{pYgNP44ey=n zk%{kEx~h{%hz^H12NZniAn9+#KK5@yzi!O|*3JSNHAqXLf$+d{+DkS6(z6EGGd0!F zZ8jaJ5^>Qbl8<_i=;h1mQr(K&te8)D8a>aD9 z7!8wXm_xMagGdkpLM|aHMKp(KmSRMjQ+P3;1i4s*3kF%&r}=0nmRD&ubDpjsJO?3| zDh>bq9EF(J^K4zM88y}OfsckE8s=!0$8>-I1Bg1kskqk3QGU7I0+Mf-#@@p-KY#wf z@smddp53}}-F~%2uZsOCQxVNJ%IXp5A00V=~U;fO4 zH*D{Dyow4F9!gv`+N?LiotzWLyxQbD0YMNZXvOB+5)>RJcGfiuf zxoLEY!y_~^w(7>F+Cf#6Y10!8b-5bJ3`XbLy9O6tm;B09%eru8fpJ^_G|{_0X3i^> z{1S4dK&n;p18ayN1?T5j!>U^`l^R=2CD1&1atWULP);`+p-AK8kf0m!{4_23C-1(K z@WJT#EN9jL2vBHluwTwsg1IaJ4dB_qNUo=&>Bt1*I`vwmY)?D*OmcF*UZ~`X!s6}( z^#nD&F3`JEW*h(jGe)L2(&>?y9&}1w=Foj5vw`n;zM<<_s>-N;YJcm`cRo=mR4#f_ zBiMBE3V*mRZnc05YH^9SLN+`&M8609=# z7Ptm@Iye=U^)~j!f|CE*Ny_s)0NCEjeXuVi*`;>|qaZ1mmA<}TgC(I#j$$R63(&m6 z3$i3}vdjj9Y&b}1wAj2Xu+PLnYu-%wkHuF?-G*s z3oYMk{%dy{i1tn-rdNYDIj#hQPicDyxn%qhqB+FyOHD^JmP7l#9}JLah>nC9f%8?J zu2i%-TkKdmzKBMz7*Y#LX1GM0h*HqIS>rckq{#a$aW}AcdO-!W9ry5)tWImxwv!J;b&iX zBUj8Oj3j{-ni*J^o*xlat?o5SXe!e+ zD3vq8QV|$H7(_$$0s#O`Ym5}qt)gZUVDjCaEr*6^-#-OCJBUvwr|Q*C#OL^#wF51O zC%L8CCS2%kaS7irzN8Z63HID^BBIsgUWms*utJkoK%Km-7Y z6J(~>ggf?8oJjz{=U{x3*mO)$@)Q6n_rQq%zA6Gyi4twt!DSpDNJMrMw$nfxvD zzy0Ls8<$3y5PP<17#0#mHW=jI<-t88#-b6(=1g+lHJDx9sV{%_6F+$T$%6;SuTKjX z7k&LrpZv%N2m5;Zd%L>Z;|Gt;Ewf^X5$?Qg^#|^~qo=cd{pyv4Qt8z<_TG2Lt<6ng zwU+&V?q@%9F9*39z~1Ra4z-o+yJFIHg( zp?{b9twFmF73p(a2taHIM3e*e-Z|&ut42nd4i-fog%u(Q49iP|k_p8D;HyX|B1WXx03!q?S&}6t6r?2)*)F9UezjE9 zYMN*3#JApdT_}~blf%<5zq;@B{Zj;MZ7q#kHmq%LZSL<$x3#6Bu>c05nQ+B+O4p^G zE;vGpf8fY5(^|q43?HCrdTQPUfbprh{@$)&DB$~kq399Md|}7VU;XUIKJ&2;?K^bj z=TGmx+*!j@bJZWV#Q%Lb05$ED!8^ppM^E1M07I+o3;V+Ph5GS#+rrRD&yDeg3FLdr zcr>{%SzOz7@Xosjvaf}zndL#=l07oicw?-vC{{}4baS~WF_?W70A#b8Q06AP*7P2I z4G1i>_VTnAug%uKB3YPF)5_$UE!fA=$`oU}XVf{Nna2Kx+H|Zq&3M+tmJRI(SlZM* z3L@Fea<6nGsU|C{hW0GKQ4dE{ie2^k3vPg~q*|tL>#L-@Lt_~Pb;BeV(|oD5x%-Xd z%aELe)Pn7Ng)w*3}b zs;P&WwZZTlCzo6R1QeRu$`KH03XR`vYeCy;6B47r!~sT7sbVi>SA&h?@$vf>k9Lj! z{fS3kJ$8xR+lXtZB|~E+QC1onBZUg>Sr;rW!^sIn#`&Ca{-x`E{Y{_#=tGbE=qD$R z&t9JsE}G1^>4r`F4jp;=ncaYxfA_Dx*x4qJjjGFk^?m9B%|hK*si@ksHK!{mgHt){%8dYXf$t7m z0fDw%+OUZ4xx{y_q?&fwsLdqIROFzzz(z|{Uorgv3aWgp`# zl}R-fhlU$&$TxIEOY`}bj_%y+;FD!PjIP{~1N|SuzSzBc_vsJxpps}JEETTK0|lXS zrq_9Ga^-qmY+3cjQ>V9ZJ}h*uh-IcJ$6xBF7#7+FlXK&MfHm#J@oc8k4KN#_8b5runDUSN`HVPu5D8>(LX}Fe-+riGg51P?Va%IC}X!At@hBNt{>A zSI=LeaBxM-habH6+uwh5Y&3IyLb&Llg^0lOa|@aJ$eo>EOeN#XO-fwj#g`5&FZ0=a zAs&lPP7MF(hd)n!ytnBV1~O;Qbi@Fjv3($sj=7m43y3*b@NaENfop?pzRk)_z!f7t z%RP0XM%=5an@zBz=d-rROTk3cv)y>5>RymRC8DTqzWqGU9y|;Ik4o{0bMjA!<{5^S zMa(eZE(lnmAcx49c?X54XJgjS8Un9QWQ16m>C|MI6hpy9G zMJ-_~>|>te5JdxkEE0}oJ&y=HU)SsiNQ@+k#a!|0-}vDJ_ig)kU;W6Be)`nWBU6`a zc@v{5hR5Z|@5ut_*1}+4ZdH5Qo@(E9aH!{&gfL8d_VS2L<;KT5HYbA$Z>Rv^2=egy zt!e8>$%_>eow35inPa;lGcw$|{lvyQ)9y%E%P%2I1jzSW3x~(LZYn2QBgTwus%N5D z@Q6rsTj8>aj@07B(&0PHJ;rSoiNI3H7!nzbo4B=cX#M2ZCXHqqXa5aaMk#s zC0Z1N6^ZCH*PWYN>b4#f8oDB5qn!u$T9H6L)l^&)D-3Rw#dP!+NFt` zA}HgGZm@aRHx;6W_|-pfg0mQaT3Cya9qc#|vcul=9dvUaJhH^+{~Iao%i2$>py(=vH97;^?Bf3 zO};Dx0Ql6=dAU+eCE{;C+wkE?IF!jPF%!9kQNS_4{yPyu9$C}I-@T>jhdX(mwH_I@ zR>aBO?Jba*0?Sz*zjZMUTMQQX*sni6N8D?Iq9dMZ)y%9Z^J1Ve1%?$bm-O@JXdQ5A z#GX&a3IYHG-Y<+1#0V5Cb1WkX9>;>`gXe*V!EzYSBpCa|vk39u4G6$?)v&83BQShW zk^N*OSkq9gs=jaJ%n;2Wil!)tg$Tp2zV9PMBuO$1b2bC6QGJ)_(5vMa-uPN0_PTpN zmn%S7gQerKQ%IEIAsq$D9-ZCsAI!}0%hFL@!*z|azSLn@mJtOU4#@zrsxh`@yi4VI ziVv~85R^QcMve=U(28nCfh18`G&&BEEg|h7aBwaa?z3 zce_9ONzA&K5kDWf_KZYzQg=-7xA^cuzjHb8aE? zp$G11NF99c#Y2~NABZbOS#d;n?luj#kIHHhToIZUqjVi(BuBn%u zxN!WY+q?GdkrxZ|{oS!jmND%mFzUffOK&PShg`1?YJsJ5>9)?J`+)(WrnTgTE4?lD zw49zD*V5sIo-PU)t-C*cc&3(&Q=UtEZn3?I^VvYv1eyikw-m*QN4j2L1ezukgK2hg zV{35Mu@nX~6atvKyTxJn>CM;_S=Mx{7AiJnCH7Yt(-kZjy(!xEIvt$#0if7J=i20! zgYx*z)yyh4mQAhNn>e^~^pE%a?Th0_uVhjYaSg3(=t~Fpps2|1uVdP92^0&ENxKK9E}*3c=k2Y zKG@YwS6{G0JTJ61%cWZ2Jo_qxXmb9!(*zhq144`t<#;9_c|40;4;&XP2UMNH7-Q_! zH8n3ec}YCW^{lcjR9RURsK$nXWy|HNf61J;t|<3tn>a3IyD*m_*w+bm z5uy>}vn&%24*sm9|H;`vl=yLW>YIV<_<0;K4U1QI~*A&OS@(o zH?+>}J#z!+&M|_O!hGxMhQbiS zWVr^v7EIZ^*pZo_i6<(>@y%&2>=xP zsAG4skr_JERrO;`a3K;hrN?f1^>6q7VE5S2Rq3Cn4(^3OPzforYJ}`F&H)i4rc!cM zr7vju*t&IK>&A6|`|T&I#p_7)l2Au)@`6t#;`w6f7cYC@zHOqwfA_IH%haIlV!#wo z)LD@k0`Spv-kn;gVS8zkuj$^uevy0ZWbIGyNw4AB*rN=M8OS?OR0Tvhp#LTwuZjGt zn)a1ziSx#G)pXQZJ1EO+TU&H7j~xA-rcHwJusPl@_Tcj%QYi{77Cgn1k{s(%j$3!v zbP0B^q!Vc!%4im4Xd=T&$v8p~%a_12ul0deKc|)iq{xJ(Kr@KxK)DKd$;}m?sjp4| zz}0<=u}zLdfqOPPIr} z{Yo|n@g3qj*ap{NG@7AUiDTJ#jF$L#RV6k3?R^jsBQSh0DEk2k*)HfNuBfP<`*At8 zK<}cXn$@CNEdsy{#fOvtmy9tjO%1(W9e3S&BhT?iPnjJgzP10*a4H#o`2Jh6g~dYQ zUD5cA7>h-D*QaU~)j#bmfwNle!3d6O#pUxj#&K;yt}3ZWX>qysmNGpvnw;5iQ=7go zUOIIyPe6353-JL(EwHW)0EQSE@7>UC?Ms;xbHM@L&;(nDQ%b+iG zU(_r0Kh33Avy7HfCx8ORvt_7EB-i?^;;^W-I1K1CcQMzrI%F&c^*m4@S!%?|POZMt zl~U=^BedhylQ|dK`dG(`EzB*S_0P2pMiyq}TD6Y0wP>W6Xl*%hlmZM02%>VGeZgZR ztw&BKre>4llQir5rr)|}CtJ>OT8>awzNe+@wL`R)7b`ijQpj~CdS4t%AD>B&W)hQm zJrQZ%Rf$cN8PoR}G`_W^?I?&97l71S#C%({?={8_!Q>X0ze#R5EHoZOB+8XqIEG`t z%RK!@k3TXoHhq=5DfS%GFm1%~d?dnpDCj#TVuVymE~^({^$7smx3Ao|cJ(*D^P*nK zT_66J=HdAMhBZC8LUCcC2mo6)tsI}6UR*o_k0R=$AGtl1OnmzXui4t^W|sv2!&^fV zsi7npqgIM?BMWOvA)g)$<7-2|_XL(U!~(uB!IuJJZs(X_SiEF#Q~bne z<|4)n#VO&4!gElrIF4R=%WRb^T9KCYErJHNvkWmMTb*y{52-oEa{vLjpe7m@y89tW zHD!;owz-U4Y0vX%C`5W<#c7{nPWEnVqlSXUBEpy^=6rZfygG}B4;U&+Lm}1Ft?y%e zHwfj)$l6F{k#Sv12+TGPcGvdP^@3jnylZl_abm@XJLV5bwZhVO5isOvCf?nh*|P*s z5g_c><@t!f@S$~sGq_F6Pnh&FW$A4aDXZDxB`2Nts7+>)%7 z9SSZqbam}Nh-d-~0D`gg8`};HEBTD5TXL;bZtF-)R#QV`fr=s5YPE(G;|PsMW+@K? z@$+3tJ(6lUT3D)}-`2=fgoa@gfVcs6=&nR0D-=5XnI5yH;7m>g%aTd0Ng3|pZ8 za`=(Ie(C47Ub|*ckLy~xVG@QF8qz{6D&)(QeIZEn)?3!D8tD7$e|*+8u5+T7a;wnR zmTGQn7@euMG|AhyY<%{m1D5GhoJ_C>i2l{jKiJXM^3RVwUDbSwmEe?6PPR;Y7~gSo z7@6wZ^GU3nQV~n&v1(QxpS;BCc-grs;~wD2TFTxg5dno8S(j0O&o|zJHng3~#dJ9f1u+1D7J- zu)h1P{1X(QC`0uLA(4Uz!`28QSFyq!d)PBg!>+0%AXCXWk15&p0IsmMC87Y)h-MJO zvtmREO7XZ9jqogoT#wRpTq*0ds$rXTC3h*df@tmi*gDy=AcP8m4d9yevU1OhqGNFaSQr`4UvCx>X0DS7#UWZu=|o zE#KBlMQv;{w`jU>}@91a{C8nwq*QWu|XL~f)!RS?sTGiNf zX!fS9gEwwnd2BT6Sm%41fEYmv#uORVG%#w#vuq{tlm~aTMU%@1JqT#Wb$GEBZio~X zz=wQu_sqbG4r@}Z;5x zilO-sCn~`pCx=;s)^Ch#W^9D*v(2I)Hp2_t-apIy#mB>)-*5crzlq%Z>!Hp6BDm?d zW7|Fu?m1-7EMoU;XU7a1OfiB?aY07lDb{5~eCaC`3Bj&qm^Ia-7%81(c!9V5(|eN3 zg#HoD)f-a~l~9OF#05oR5hA)tRjYcXr0S~STFc&Am&B3iw2i8&BVJ$|lME;F4ps>9 z5u&bHcJSQo$?)~Y6lEnA<>FC}qDZAimCAalSgRQX82 zTd91mdi=!1i#ztbyla%EjFkg@AN}AR8`pL>q=OufY>)DYL;%k0$%u=syuKt{-Ppc; z<*nPdKELDj-Mi17U&zYwutIc;F{;IL=zBwFOC+Y(GV&WP2w7el>|{y0$xpH?03|Zx##XJElmx7|J|3~R?7o1!l^09 zt3QkSEAN|%;A?uNqq+a_Me!4NhLS=RKm~*VXw3{4&G6I1@qhh|8ND?3i*I?gJ+aBM zVQvn9J}WX{S!iwk8`u7wx$;%P0e1zJC)#fURfDn)whPz?nt@aZ1pfakkN(eM#=scS zJk5%Y3Cyw#LI@#L)10bGyRPTE8UpH1(!c##=_ApsWM}~1X~aY!pm^Zo@UnE^pGyCD zk0O7Z+3XjKbj1bi10Y~1Xb3to`d6i={-$)C_-|r}Tlx6SfvtDTH-9{EpXCyPMvG2m zuYd5{)gL{jAM)JGb{>K#Mu;?}kmHhKg>oI8c-AElC`AmSS%fIW@H9n>0*C?;IItY3 z>9lRTORVP=4~h?mLyRnfrV~{M>{%Bf|8$k;d>$bRF#^jnvfxP~ay_W1v|}0A)!+7! zQJf;lVkC$?kEjN1T9-hs;TnwQ*7%wgz3bPkjK?CQ<5RQqixbl`g`!%hAlE2eXGX7n z%+BWK7H2>FfqNSoqbEkPXEQaS_;4f^U}#h>Ypzi}kIfUFu*p5$iR2mi{>a8i3LM;U ze?ThsR(JEB1qdi0oUboLSI4!}o}WOV812e8b)~f7ke-DzC=%pj9;~63`*^0>t{p(= zP1sAuwTX^9Qnj&QZQ;y!Wg>%wgS0-%`=(4+CzERg-6%xc6+0i&a?6EE*?2FZQK~e$ z^fn(%DNfn7M&smc*FY)V!CBT^`#|H&q*y2e1K@)lRx(XJ?MDw$b?l4L^okXsg+gdC z2NZw@g|1eIi#8n}sT~1B<&&}llU|_KM z_rCJk8@H~yaqFr~exX=Y*RSvXm!JRetv9Z1Z%-c`Es(3>Dfdeh#DDI9ePFbTXn86x zjb-G~Md2@hR{qn+idAOdb04`?Gi!76#WRU3isAn%9!AqMP?u>x%W?|X1)r27!S7Y= zE6?%YEK5(fZue$0)M6ei7hDfKA6ys8RnY94)9q^$;SteB62&sOP^Ky>2JmgyFI8#B zQn6D5>=W!gS9?8&vTf zFO%jD!Jb*I7^Wvif}kiIrUDr8MS*ToTFodItJ*UC zd6ig6;#;O})M}28#Aq0l0D~BbP!a$l#J|=I;!imt1q3Oe1ej2ekwx$^s5-6`mz|KD zv;A!1JC3E-s)k`vh~|?~q6An(^S~;kPM2cueK2Fys>bNp>?^PBfBN~|rlU4Bq;9+M zhSe*2+nd9QMDRK@daVS-hd%M})>Jb7gP%O}76nJd2!a#}DSp00{0pkDMAUEH+4pD6 zNu;TDva=FynD1X>HZ}B5{w$yu&IF62$r}UJLPPOn{q%e>F;Hr1YH*YrtD<4bWw8D6mb@loy1{*pV zx}7&s|Ip(!@#`;Qnj2}^o-PlC)g}KYOmRaETbqg_VKoB`ROE)a#JWOku;uj~srlJJ zApWEpk=E4^q`8!Q+AhFXWUt)t0&8+dF%AP@F?X9|#yq zAbu1otGP@Je`nuM|M~UTuGw8IA4~-VuT*+_ZDhma*w9a&I=ozzP1C&I(};$K;T#r<7=odnBqE=fDP3Wu zrx;5e>bxmBUuIPO?YLVEk_4@(|E*5^!NT}kxTR!*2Y_OQ@@#c^BNSx<$8HP{@=_Y!sUDYGlZh2x;7MhT3XzLlDbd~bjHlNGdF5Mr#KN= z8#fkd$IZsNbIl$7?(33QqZwFayW{4Y3d2X^TN>%3WhTkFuHe>|YorV=Iulzv;J&Ot zej>0rXw_I(2LjX4wK83ansdv-rL1oofd(}Y!7dZh>LxT$4z=h)sHt!Qo%+C1u*u{? zO@$#u0RRYw<_V%`7G<_lXlj{n>arUe^=NbI_)*Ss5D>ty(A_6y%hBm#?H%G=Qro)A^>h?!BXR(fe|9L#3gqaJ`?a(S(9mw{a)iI=*0?h{Ij-(=dqNO zldNZI;|v@8tLA@yhp`ziB61c0@9EGHOe>u7q`Kp>uNT;LEL}GVp`=I%OEOF7ppU6D z5b1~0x zAd5s4SwWP531UK#w^u57k3~mkV#C^=md1u+seB!bURyCeojEo-{=i)~cXl)mPgXfW z7I;!FX}(>%xTI#&aOha*rbcC=V+BfjJ=$K;Rs()zA)vHVzR(Dtkj;(g_{dPXHd=4*qv_LkSd%I9c^iKps4BO zx@2)ga@6`)+hSloGT1e_GgQe$tc4&dmD;rIV%AnXL?x$adBqZ7c;h@mmZ zjj!L>ete3xUCauuB8_a{5-d7^JtG>dbTo{8;6~!OG=Of(r~Xk5%! z&n?%0UC-7v%?gFYuYCDKwVL|KKRw_Rs| zYYsOwL~E+v+T3vH@CX2e!ctQ@edO5K^$~p)!_)vMLD#;Gy@w|o(!mehbBBkmsp$*= z`EpPWXgc_3M_@nzQ4k8gM#Ila)yvZ{MVb$CQZN(}1BxgJtRT=djZy;sZ;|fkLIv!1 z7)=NqFOp7{iE+Txe_;hTb6unv6<-8;-z=iMu!)p`n|nGVmeOf*b!qQvmBD9NJ83OvQJ1QTRh z$S^(Au=HBZHVy0=?{H*%&9gR+W9f$OI+&*@S`tA~SYDJJEL^U#!dzI=e5_}DWY(=ZL!!8`_5xb&2Ly zu57;N&h2;Jwxz4REfA1P<;scS(d(l3*IeWlivR2DKl;?K-1;AX{}ccCy&sK^WZzv^ z_MVxpeemwvH`SgEmu3M$T^gxXJvtrPxXQ?$*^e8lCx)9JRK?bQ>t)V6Er8nY9UBX5 z2wC&It>r_#YB)UTzXSjQKc8SG$D&*MN;{G7Er$A8-if+P)=F`2*5jn%#_fWoN8KsT zw@xpA6g@4jY;jL8zS(ELF&F9^>D?MB6~Qqg#_0n5Y9Q_UIA&y)b)X92PFXFmwgoiM zo+lC2^oCwrd#=&iY{b)I^;o7S z!1%VF5S5Y1o}EX9k_yBdz4M0VeOakc1Asz*lO0NRJeLE2sk>Vi`(n*IRiWbRs}n9q zkAIroojLwL|MH)TnUWAp#S=74;i56aqEyv-mnNLc zotEWfMaCQpjth>5O^bG2&-aW=Q#y80x9po>A&O#UniY8t!V0j_ux%4n2hXZr%LQJv z7~QZcxo-7}hEyV#FIK9xeFu+D&(6=xY4sG5>tOWS9B9@f-+y}j`mv8bbpOsh`|Bxs z7acQm>Z7k6zID(zlUxYdIf+yjgFOwE;bo{-QCjSX5FvR^d(&W++;T)%oKsdd;1dgx z&OWk>KGo?P@#x7wW7g>jX><8NLoeQa<{Q)Ya5d6eLMzuz{yh*_7H`T+EiCH=^`(r` zW_wuSYsXf8tYQ2R#x#YNQb=dQ{jJ3zsCzXLz$}-STUU&}uLBPz5 zvR0jM=sUKD^Bj+6EKwS1PIT{mQ7jb@5TMaaO6mE@p7_ixcs>9ezvsS=-A9E=831x! z?U)1`#wGxeD{zZFZS8xs{6KJab%2&48^2WoM2F~oP2fUFzF^?`hi#F4|3Lu2~KKCu2j{^4gH{n5`p=mJy&VCrW% z3MUW@ObGn{7+-AVnBR!5-WY7y2r*uDXK|uV~Vw% zSfOB?$(&WZdIrL|woE=`j8c?MrcnZ{^WqZy3T#ZQy^N!qm1stkB`P2hjEU_c$0eGM zs+eHUSlTqQI3Q7}I8#wmmQi~jml6`s^gL5DL1!h35k&zd6Fg1v#VT!I_>C_+A&CNV zJYrg)>XeWDt7ygfcK3|2qhd#ObS{^X`EVpeV;rg0oJ+Db zzgQ$H#^X{&MXr7UNR$y{fAE!uPL7U0_V_!cy9ol%aV!AXrX~pdy?1XYmMYDS>79G_ zYvr6}+aLYV&9n0h>sGIL;+Yq(58*2ij2QdECvMuXW>vLTd+f<)ckdZ~+r7|@o0`hi z>h8SuK&!RamX*}e+{3!8)$-CT!{&hL>> z(80IXj|eW+kgj{a2LqnOqk7v~E~OP*>{)MXTk3mO%@tIYm1Mf9Q8q29T(E6MS&!mWZRWW<#SMmb#7IWAs{1+K{H5AN9F1@XT^E8#hrMTeVWE3Ph4OZ|&N;aUDZ5qZ5;R4ji7CS}as(*C?EATwKo? zy{5x9jh%Z>HaAA@yJKS}zgQ_77u#jc8mHXT#)-?tMhH0H(%GQNghO^=DzQmRNBZ#V zoUhBII!UjLds&LOXRJ|lHn>8Q6Mgnh1aHddqOn_J8;apoz2<8acF!!jpXXNsk9**C zLyBjhD{3tuj0j#wrotVzmnqs5(t}s&Z#F6=?p{&}NNDQ$?8$Wbs zoHQwVAN%M3{H>oo@!H!rvTvEX=@BU$qG?WXJ$&WM0w`9F$Hh_=ybG~P;)AI__{|R< zK0b7|TU!px)o16kwW>j|dw6J}rz_Rc*s%Z5(ebe?0E|u-yW3N#L}J(8gC|bRULU_# zAU=5iCXQqO?{^*>n;3uS{<{typR&!j&Jv+m;w!)Uu}m)i_>;Sar^Xs@+7ghYv|(X} zp&S?RskMP)A(1Gi5}#d|ep#dcTjRP<3H@lg2$}&t1_D3`5CT31+og23Bb;uGMvus< z5D{gO0iY}!R2^5!hORr7VR(*C>gkE+=PP3ay5(W(Ctlvc=Xox=Q9{qZ8?+1k2Thyd?9s?Rtupno? zQU2b$K%W%FN{kp%f^sq`#iAm^AkU{X4VTM$y={F*C$8~M4U0YEJC1Fuy6<7WA;l;` z$#g~hUQ02&(6z2^!s*zys`<9V1{IV_3WyOMpC|qjUx;Xq7Q%sGAeoRtL5`x3X3*8D zrK*B9#Ojm}KXX{w1`{T+V8bufC(1Y!`))O$Z-1R)UP!~n$wJWD@0 zJZak6SAO+#G($$l7B6lpnaKGAJq@b^MezL7HcMV=J6I&3vJD7tEaYK;N zr9>7wBX(vYxVFPN!jaP{qrDwB9|l! z6ZIo|j~D0TgAFq$c*m@N&V2J~K39t67l8)wAlKICXryUutgb~m)4!6>TZ!=r004>_ zzu|`XXfc@20{GRIriI?Vc-EX=pI+<<0;{ZkbTl?qnAzB7hEhfZEvyc4O|dDe^rzqX z=8kivOkmHnET14D8D|_Ez*lfaqxf(<&J{~Ow#w)KE-9S)-7nw2@6gd_p51-Ui}Sf^ zt$NA@*LOz8=8ha2E0>lS7soVC3{4(BI-1RvuMg-eGG_?4-MH@1(G#P?bNRg5+tXs` zXzk?Ox*_*t6i z_)PL4MN{y3&}38?Y{mVn(s$1H_7Q_<2GJbF26#CX3JJ-C6bLMNzE>+oxuhAo>DmT% zjSFvE4A}EsqgHbahfhRNC?vR`_`VMWzYof>-}%O|XPSmpRWYH&#w1E4f}$)$qf#^~ zG7K>+x>`1>W!*H+a5R0-BXtbeBfjO>X02vxCZcFA9)WmF@+sK|5rAAWlP5$WR;2mh z%E8p#w{QLANA6j(a$s&D^VpLwJo>~N$4*S-vL$~>VD;Q_9gJQRL5s29`^ra3m29D) z0>B-&uKCg@@87VxV`X2{=;XZZz{a(`vLvRG@eS+x_8-q)#DNR(oq3+nQ$g7b)eSx;lhUb%($O+^kn!C*QCdiJIWF6{I8r}mbR=aa+}ks9fFeEs_&h(+ zyt@0yA;z@sK|*takDyw8ZSM2yZC z9PC_x2TUlI_^mHJ@anF;?=mm>dR&#@1F=nOyGF(*^7$G7>F;X;fQgBPGp|{{zLRBH zO*ag~9GzGM;$zR+eQYw93RG{u@o=sB*v!n2HEq9Ze|f&}PZeXtp;|=xZyIh-mt3eB zXV0oc;CToj7E)f;#>?KN5t^BD-E{$_Ux|WlqSH=hXz9Zdf`)i8B7UPham2icVHNYNRZp!c~(xrfj z?|8PZsb*Cp82D5SVo@H^yhkL05TfXd*^?lK5hLNKyk=GFJ-2WE)JN`UX=)gooc{h# zUU~ZI9m6BjYRv%bUTD9%o-=y&qko|3{=07L?dqt{y@(Nbp8L1|^;^qU;2oWbj<%Nn z_P-t>p7qX8=z>o{~FD5$Mm{&?}OOo4)G~#GFr>s>;lWmXjxK>|c7KQ$RpXc4`a{g#VXt6!2*E$IV zEGDqn)Hx(R=;|m@m=MY{;1j~2Y^bB>#A{1$@nEK5WpZJPb{wDqTv+Jt4`uU0tyW)2 z7utFwqjQ3(0|23!*{$2$TLe|80v~teS)xzyK)h$3-aR}#{>e{#*lI{V z^TaN_RAz*z#4{A_bce!&Bn0Ji%8??dnS%kPfm0^z;-$KaPtP8IzH{SEZ4HnqgX;pu zfB`5390OrxI?VjLg+o6mzpJnF&0^7niWL2?@z+?Hez>y_7Ig4j00aa90*K0!f$G_9P}6+Pq&4-* ziJ4x#IRC05+Xb&nHJHlkYn4#x6YZ;jTkWy3^XLz z_SWXE_SWvs_I#nZbI*Zq{qt*{c?pL9bufDM#}7@@PdxJ?#+arl0ATpQU|&yPcc&-_ zPrtC^z`==lELtj8>XXIr*aRWu!MpEhZaneai-#^~{1DIj>s|Q=A8Ki5rp6=d-3Z&u zye|4x9vL&tsud(pozWL#c)EgO!@=7<+3V$YQKt^5B&alSBjfIdLHm^g(_IrIE9sY( zXbbFh3wwtA8(9M~d}lko?=7jyvuIVy-^&EOVYsogd@$fFx~yDa8wbr-POo|h%`$zh z=F$3MCwN*1K2j39yJ5K0nVi7`!Agl@1V%M!*CPyr9M4k1mdAF_4TBHhfg6%FCenR! zCwKrfn6XGH)Y!N8^=e~-o=#*ot+xrQOim@|vzEa5La6uYBZ!#Uu1?G(Lb=MJPxLur zr1RCv{GH84U;6QV&;P|g{`jJ2YV7Lef==<_NQm~NgjzE$c^QEaOobIclQk}=bhNoO z{>hI#@XU)l4jsCp()1K76Cm}a7cpXemb^XLyVocsLT}(|D{>PvH=&Qf>;D7voKl8#XJ9q4w@?7j0u7_17%7N#ceSsiL|G8!W zk`a!-q{}9`bK<}cJ61Kfh@GYsMjY5KuyiTNy=)f#c=Gsh>(ZoR`$p-+4E$c~#o1_e zT~|}o<sFo;3h=dfMV>!bT3=8?Lc{cm__Y*92^+H|;Kol)R zg0dG2F_tacE^Ry5cWvyNXEqwe%8d;g2+}MyxMkC=|zOeV;k-z!-pI+Jyd>xEl z^`3!`ADaPy`|bpU5CAYVJv}@B)8~#kM)iTaH{dnc^E}g90z;nX4ULSw^xDY3{M_BY z^BdiN_sH{F`2yrErzVTvUflG#Z36)`(u7acE0MyG$)ffg)s^;#&ls-|;MAeW?Q6V8 zSo|iqkb- zB}SzpQE#5}jb&OiC-(5z3c07%MyI8X33V)~9#7KXQG7AhHW|KEEGCcHMl} zAqG>T;AbXIGq8|zZVF&0#OPGLD z_swG2gfaldha`!Phly&4mc?Pu;>AFFGuz$K9*c&RKtPtnsoA;bcf2+kYz*(}^Mk+TiFgcU#n&OR7R53NpZVjH4hYibo#xtSfra8 zjpNJM)TDzN33pq&>UB$uXZsZ2klou>Jmm7C#su=M9crMl$vdF+#wkFy7%s;8TaLbF z^#p0ptArAP+-&E**95f!K8&p0-uT90&e8#3V(X^hf}<4jMk;yYgWH*^pBSGnb~jPH zn7OA(Q@H>0#6Ldy+#8n?I+(@G0wXA~L{hG5AzRJAt5J=pKsb&NF6Ap1v~qNIB|r4w zJ>P%y=W{cKE8ou#ohWVJ5=fozr{PaK~`G}n+yzWT=A zGok9iqsKejTALcuK_x&42`S3ke$F$`?w*{U{qTeLY*@GIZ@>L4HVmNXx635MzzYzN zARGn{0mA_Rc=WGFwuY&|yj}fCb?Oq{-J*lOQ_Oz{@|S;ACTc1Fa<%e$AkVV2O$cJd zUnJ~_@BYs8|0p(89!lK3f^_&gAQun|hysvcI=t||&2N3P@RS^27=%rSagFzY=lk;1 zR5F2LWhE#@LI9yqRXvyA{nemADNbe>P85Kq2>>AQ9gosX4V*IjOx?C?{ zx>jQA=2a6@Gx=P#r?=q)_uYE<$Or%o^tV~IvzW>C_jVsRcoG0MtQ*MW^Ru&g05UQ< zJ3Tl3v4J;4SvXH2A-$&8eEz;ciX++?n-UixltG12 zHJAnyQ8g41Jfoh0niIQREHv3e%lcDu(rVGHMy(}Ndy5UsF@tTT!;J6HzAJiqO>Rp~ z9B9m+jOq&!ZJ{JLwhrxYoIM^XWZD=b@XJA4QLif!#`tgB%- zyRfot^saS@Nu&SgM>2!W<(0j7McV>4|LA-F`_)}XFUP3&Y~3(H5V%l?cl?X3Z9+^W z7Ir;auNE#SPrR?c=>zxP@x32EwJ=w_D*c>zW^;2w5;&T&MNt?XzHS-%?#K<|+;!WH zH*8sb>rLzP#nOwf49TI$UAL{7TC_c*Fg7-~cmMId`;RL@esX&5xfk}H?SqO%b>H#D z)q^cJ-mp@z@ai%f#vC{$O(05m&XVS|LS>^X` zTVmV6L<%WPD9AZj_C4pVMaRV7q3u1+9iLGaL-Fvzz_DVm`V_n4$Ieq`u?c zwr*O6{+{uCe^UdvwrQ9axIQ0{NkC?4F5vm}@~Ml&1e*dYIa+9vR~N16EAy);PT}N8 zC?qN&p64i*As(g-iD(wRF?4ZI1(r4T!!hv%DaAM0$TqVkyzY z_APz)-F4%JHNB!J7D}a|k+B`GA9((SJtLztCPBI?*=67E<&v4dZ#MqZUb&DtnfB(Jb z)Y5se2(%dg$FC$m)_oW(`wUJK9j9(mr4 z)*oCcyja1BX>(n$T5Pa}$Hc9j+AayJ^%c-$BBSi4m6aWoZ`Z4xCY4RJZnu_?)U`#+ zO7jBUw_@@I000llvE~J)d+_KE1Oy1owXU>leAkiv0N@4#$NILfcy2eRS1>Q_|Hw!9 zvdh_;o(e0or1!Pyp@&xIR`$w~#^LhJ@BiPgm-3f=BS^7wC?p^XRaJaJwM}({B~_;! z{lZA2!4)m{+B7xysirX z_8uH7=H3QL+ztg;ERS zI|{Sd$c`;DfEcmIoLgJDBVj5F2t2~iyWItEqo@`J%TF%J8WI?hwgs(XS|6_e)8ZpT z?4~u@mniH40YWoJW4CuqA5@Gy0APkcnckKjJsB-80)QEcjI?YUc=378w1I}v&9?@R zET%?>t$1SS;rl(CZryc=rcl0hu7G>-Tq=%NfkYLv6p=iSD;EvSkCtOOINX0n4T;oOpEV_f)5N zDP{$M;RA{ck^r6$riDxk>Q2Nd}7|Sm#9QjH^#>2$HwPP z{q6Htrf0HqnYoAVzbloF42@+0pCc77m)An+=9^nJZWw01panZDp}pDOKh+ts39Hk5Zn$CarmdU)?|06ZJHOmF&2ork*+T~oUmy6_VAM*+b8}fGL2V6o5=}>*3&99P zV=$|M?VY8tsh&pT#>HTZ5_r5e{@&vP8G#kUp^%tJ$f2-AQ&7{HV#QMpDiNVr2A9h^ zwrfk?Jnv_@_%qss=I>4ZZYTaoahlgPa9r@brT_ujol6FCe&AK-?*sH=NKUz z3QLKEtSB5INH?jP>S(HITb5tX*Sv7W%F8iL6VLP<(=druIBEzOJB+zYR~{=#cRhmK6mOwCm*2EN*hcfBkO2S(dv~FMYZ;vVzvpUSDIf!I`ETi ze-ZW8R%S))pJfYzAeMwuXwMI)zG}I(^KW)RXn0iJ>yf;M~bPS5CEsLFRCRLk&PE*<2-THpu5m6@Pjsvp^BLj!chNR_7n0r)VTSf%94 z(fk~tkSEGht(#a2XF6IdZHr~I#8@IqWpnn0W-Q%x=cY9)2fqG~&)Zt= z8tJ9?-Mh8DwfVW1j=ZQqXqX_%+m9NsGqrKHZ4+Ll$VxgO!8VMr!qAIY9ipK6$^b0dfmC^is@1#Z~f|L}vi ze*EEE1)e`}jzdR==DzTWd;5F39(i=vS<~_e z{^5@D9b0d^bH&sO=0zGg^|?37&sE)q8GEpeKT=N*(%jf6+0>bO$#9~h>gJx{-qQpL zf<<$H7b>a1Gbal-4~RP$O0T~wXSMqjX$cGghNv*hCG_#)nu^E*w5FrSbic@%T<#tWMr&!$E!eKYReXR(PatV_o@42i;Yedi#Og`YT^F- zkN*6n*AHDQ0KnCaif);qaEJvZUa8pFQ5i872|+e{!SW>!ec4l$!bc zs}sI=^8MiW@=LJ0eR+2FhQ%K|*Z+x|nGnEv;7bDFk!CJDVjEZYw__@UWx4f6{FUCcfk9g`5tE5d|sOnC1!L zi&fgO41(P&mRn4*vLFZ2F|ul~f3UAR8VQe#Prmrd8;6g~oRi2;#u=7j4;;-B*Elvb z($drrjY`FwxxAeS$WpOfBd(Fjl>~toq>x#=^xghC7=3?6DOdPkfBop^K7RWj{`QBy z`N&T)XQ4=aqwuX~Pu$XN(Yyox>E)zRI6AD~rsBLpEvjB@lx%EI9gIrZ5T6^iZpvDN zDeidv+N#@{!|i>^mj%uQjD|}$^oy_3lx^eCqPLNG%eZmv4yF<_oP&h@vo} z%7OlHan6aNfR_~*$;yZ;54}X0j;)9Vrm_3*Zm^-y+mcW9$F$ia4{QzP{eZ45-g}=B zW&ZU){P%;0C$6=}hwW-92aFg~6oKbC--CSif@P>b`jI=*$;8+H@!88~Lwa#>p`};X z<0^;e`<8RQvNnYH#IO2Sz=Npe%{^LCaypWTP1LPKihmX>V?b1%D&Kv5LWgDeu7f~rPJRdNy2 z*Lx3_dZt-3=W0N)vaCpn2Hvtc)d(%2(#x}Hp~YA_j#`=$Z7t2+9c`hYa`4FUAN=IW z@v#fY$clzV$90Hr1At}_ilX9Cp_p5~FYDOQ$g07fNLXoaX`Y>5G}X&ecyJwzzJJGt zYkccFPpn(l^`%cev~$n?mvS+)Uak6@}cw;LWiqf+#lCw_hAp6?#@3E;+-fUb2uPnbZ;}39VIpRzK0tE^x z#Qd_9l3d1y#lC~0l!@muZ{#})`N zD-pB3%vfH{_ZbM9Gkm#F@RZg*pwt-LV=*fEVX$46Z&U9d0#XV{;O~P{QV?E zay_ov=GM1}NFxmaIoIJM$A|(ep)0hqAVxqGOVJ!fQ5=Uj7IQ4n6c{GfOj_3*?5LOH zdwsK%nFmfzB%;`MgEf_SR{4EaUthH5BsYc5=TZU{qge6hLqSU7XaG=kKUeUvUHK&( zEZEi6lCGA37NcRsizu9BbA}UgZ3{d4B?0APFxAy2G&iQx$wVrVU|HtK@sof5$YYE1 z7jpte&KT4+oi;5i8VLcMHs>3in0)yDyKmXHrKV~>efs&!)Na?o==(el9vq*Vt^DSf zKGfIK^>>fF^ot}JV#KF+*Ph!vaR1MM@IhgPS47!*rOyeR>m(Ys>% zCvz*iX>;6I+nPM02)QNJ1Vc;s$Q-QRTl{pK8%ayUXVy8XPP}BtS0-PfksT4{Crj&8 zE9E&&QQ{`|SiTaE%?RO0zx>8euG_v}k4q9iDj&Nw-V!UE zGZBtBLHdN1dsV+|q78^bj6g9WO;H?&Xo@g2rWx=(Y*b4f8E ztau@Lh-+T?K>a1chgsY z?ZKZs`Rv%}=>u_2PJ}}^lePZixAVQf-_ac%SpuC1&6;c25EY@bnDB2}fiNgsCK(Fs zEq$RU{%lN|ddvA;fG>Dr$frdgv&-g87}#ljbBl72Mm7+T+0u&COT*>c<|q+u-0SNKDQ7y$O3-K&Q_1>0UvtM7^amh>5_a_~NW!R{?<pS{v>?8Na8eK6lQAg8-`O&tC2-+QE(xpu8$5Y0tnis?{w z#Z%%tMkQbCayKwnp9TPs3{rs?DZ~zaaUa)L&G`Fdr(FEqq19xPSI3;Q>3BC!Z zB5+-9rn+Kf^J6tLHk7}mFR+VcG(a$29hA9zR9all1VDg^@2yTg=6KxU%AE;+E&&sZ zZdW@w%%UacuR=AOMxfiEBmp+4;Xo6|{;jSJ3^U-H~^BP8?jF?VI6_t655)*L^wPaBI zsoJLUTPrXSD}DL1_gI$woqv9QIf-rCwiT9TA2={p-&lY8SMClffsygaAN_1EwyRAo z@sB-xk0gr6PmVnP)V}kX8L!7xiI%qb+LirJJiUkb&We?->15)C7x!O|FG{3iAAa!G zNGN#x4+fk znZoI<-F()iD2nD}?CPROg@VDEx%tb{KG&t4EHktY>ADK*f z&yk5+ZdkK+O|Pn#7c;u0RZeL%kb@IUe^*0G!W(lo$&pNVVm}2w$5{kJMq3q^W)NUN zK!6^vZo|C2rv2HB)?=EH&?$&X5Hno3F&dtZhh~Ce&ZEWY^4bWSHN9xo>gWpZrYV1U z0-M%0Q`l@)jt04GB#=?r*fIA5o-0J~6oUv2E+91GZ0L3lao7L^K+&Vrx@2uS=;Q&w zr@2XCL+kW@-ZX)Rsg~_UFDf8!wzGexZLnc{eBh1eups8;9;sLxz2jy-(JnqD9 zE!bhJI*xO9Hx2TP2(}Bp|E4qhfC#OLzjgNf?!xQj;xvyCLyKWv3PvJABqH-XL(`P& zQHF^OiJ!fc+7_lz?FNdA3!0nVH zTNa|ucFO<)2V7%uNA52x_QKoFSDvk#7I8dY7H~W+FuY_ra86s6_cd2)d$w+wuH~{A zxPU~IAm^c=Z|jJa)~{{*&Hc7C2?8hiJjXl_c}bNfw;*_lG&bmj_n zwVWBe`HtIL<2#eV$z=*t5z7@bty;0Lyht!LUfqg$r>AK@g>W>muu$#y9aa&G0BEYb z8S!>|@>pFhPLc97=T4M2maX=V;690~ofZ}~Q#rl8JG_rVJ`i9iM_>%Y3B|-|jY||! zQxzu`sr9r&8r)Gtd>~Nd+6+6~UOiO*wb{Ucqss!gnP^9*VO2i5DpsA4tgMU-$k=_m zU$cYC@%8s0-OCR2pi~zfNPO+J$G`LBbJud`p;$SQ5DVpV8Y~gwnVM!(oE!Snj6!)Vde{^@rijsiEmlo^W!J>`DWS0R$q75#9V33ijJQ? zwa2$>6oWh4T8|zdzdnSo&2TM!F~9ifUwLT5+P9<+%tNylwStcA+cQ=5vG!20-FK;h-T}Y=j@zj(m0gCHF!=24W>v z49WjLd+!|`$CclE{wj2Jb#d)M(juYLTEz3;8P zAgctzuevXb#v%0F#efw6`_x_?z zV^2}*^)yLBi4-Gg zQfV+4)%FyPN~MrwoaHcIIO>bHEKJ>j%Q(xzRrRQX1anTJCi?rP!2YkAkdh$r@kBz5 zaSFi56bnhws)V4t71C<%Aju*pBp8;7Q%d#5)x}Tl-tpj$bxNgjU}*S!P2Jh*_PYAs zp@ETbC@$Yx?Jji>1p5X$+q-(tUcA)OHVU#BVq}ju#4;?%;;1V$>T!1U_185tH#a+P z(Lw^b>2LO(NZ{W1;QU{H|Gpo+=m>=)$4@rR!VmfB-qU@9L%Sc?S)0{(@W|x}2f^9e z(cgdA{;%H=0H1Q_mm%L;)8<~|k7Y!XsgjZ}Os~a21{nwps2@8@YE@?{a zCnxVn64;FWqrox;%u(K~Q~EGW1Q`TbHN-5)P&JZx;)|V$-r({Syw$Gi2Y|S!^9u$3 zc&bkBZlP975+MT>QxvPEt|r??8IyU+oS@PTVq=0<(+a^ynu{7gv-9{=? z>F99x_74{1fz^D|E1Bfsz2TS|}*=t~x< z(+CA9amD^{w^)^xvLOTilNmzZuU0)crKOZgom$YSFkXOI9Ai0fGJ-56L6&4um=868 zWI;-VLjo0!s_j;SAgm*9e%1w&VkAKuR5W4KNdykjI4~R$9_3^)F;+ek0J;+AjuHQ| zIpx30Kt=r1?4vS(k_K&Bv_AgMdEYzNGa+R$DYAh$hqEz?RO(Z#7zP$^0OnsIg6l+Q zwyj!{yLdsl(V*|_={Yno<*Pl}DLH?>I|eYh zn#V~#!_ZVe`kdW-xg`DM_^k*4Bp}InVdnXUo}Drf%kn?OF=0}S;xOu~q{v8l&aqzi z(zeh&*_t|yGB^~fP~#z!#x<^YF&K^KVLWHo_m3T`CZdCkF;_TfRS!!tfnm@gZq~&v zXONdg5(gaXkXDxre`ewaFpzrAXh__Qk_ z{Bi#~C(d@xW~D`_EM^1v{OpZJZIZO35qeBA0rsns;5Rm%zz;t4q# zgFqO3zSwxn%{kElat4Z2Ov+-?<)R2mm+4R>c&pnJzms9v7!H8rlt!tfjXFU|VGJur z;@F5Q@fEE&>jIyKc;~&2e{`5KVquBI6g&qCC6Ia+QzV9y)yLhx9V=0J-Qyz30>=xS zo1+LyXEK1+VHx$|iFjm82hZng7$Y%)Omk?LE-G7IwGhYg=C+OlM^CnPN5mw1XY=sx zI7p1%iupzt!lTOqs*cD)KbXYZQtpc{3RB0fDmX~>~7Iga2$DZwQ`~L6OULGFw z>C842P5FGcs_x)7L7}l4b+XSFztLb;T5o^pnT;1}FW1y`eC^Ir2B#^7+`3w=l2`L!;q7%~f z{1&p%8@c#9?wK6Av_!w%N)^S`Aq$;x!uz|X@L^dJXKZj88yPQ$`$?6-K-h|eFDNTsws@f|%jawAe*fCr1A~#fHl6D#78w*XdXpy}LG9R9 zMJtuBy?5Zj9rw7rqk%x|&e_|{&py6!_d{EAa~;jyeuds2+-B{z5HLM?~-w}nefV^s?kHmdaFXrx)e37sr-v^gh+k-8 z0w3}LRji~~gFjgG3%9yA^BB#gbrRN-c(sha3|mcVWA3^b{>QE!N9`R6aYtp_hil#U zW&6J$%`YuiWGo0)$WEYviH0kxcpr%&8;B^-L?N0P}+89W+7&g)B4 zTS3|Ff%9wNc8~M;zjsi{DnIL}pE4B6_0s%dMKVobi0satJkq#?_u{eE0!caC1x$rr z<<*JzAHy1gS)CEv>>V#KE$Ga4JaU%zu95uji^tVZn@bV+Ml0Zy1zRmWdv33YkrZjX zRV78u%5PeDoyZ8~3^2y_i(|hXY)6EpZEwVB}WR8pPMHy8L zSB4tMOaRxTxrweundvO*`<{WB-hD8oqiO1x62J4m;rWv`$4md0GdCx>;I9zlZ70=S zjl)|FHMP~pOmB1^opL$3o98^9y?xk;G`n>l`{Qs<0v4k;BFVf-Rbl_mT~ycsahCJY zS$Qqy3LpuYkZUUpXzld=t8Rmhm!_At!+N;-s0+*W{aJ36LtT6IM-Ys8b#cE}q}nK3 zf{v=DQ{`Vh{6sIWFC}+LF7`E$DoaP$)Hj_qIRM>K+ zaku<+2$v92(ss3%kI1m6*-h0UnLb1g&X$wWg|zb}K%?SJl`T1;!Z}+mxkT06`K=%T zI@OPtO&PjAmnbIZS|4f(6cieqO;5<_9}@=dUNe3O(J>a6$C*5^gd1{wt)Lkh!BbhW z(*7lS)W+WK+UV z<9xZujiccdUs0BWw`4_Hmi^eG)ro19K5LcUugy^(gjg+9;w#Q4cRq|TK!*Yo9$h3fm>8&V0sk?2 zrF!TB_@xF2pg8E*tQ?JT9afJ$wXQpGlF+{Dq5}pe7?%C=sud87!lL|M;Lk&(b($&4CS%!t|pb zBD-Vh=Ha7|J0_!URkS=!TJkxPZ#Dkt%Cqd4$mU48GP^N!6YP69ITus;k@h&*``Q0} zkgDUM+sE*y|5V(~zt=I<`8PNMz(yKv1G$jFar(JEqd8&Lc$s64L+iy=o1WG!7A6+I zI2vOOv0f<7SAF=|ErdlSDmM9i_ zGI-VW=DfeaOutHt*Y;TiNHLQZfkKny2I{A=Mc+v=ZoD})d$q1$bddnC?gol^QbAUC z^`&}A61y^;z`U<)MKterQ>BE74AT``2%%0e{CBz!C@WK=l_MKOFl;b%JdmwTG~84+ zb2^g0Oo8y##v3kZ0=U@fF1i_lk7z&C3Dj*8*Hf=*vF?4{4_34n0OssneO`pxd?yi} zYShs_<@U$?U8b|N2$VP%s|R^tp7Fb#{CmG|2ReGkZ0Xx!8Ghq3QJ#Xky^oK45K@CS zAFSEHo}WMWORR@>V+LU7r`VetIXYS!2X^nix&PW@oO8DKxX_38qO$0Pdg-eleum0G zjPtr&d>xu0)S5ZdBu$2hpKjVWe;Vf~@r$`Y723A-MD=17lw3p4>dXQf5^NTF6#H=l(t)kcQ*KW!~qd z&y^*D+6Mdg(lEbDntUiVEXjg#Qun~N^DHWpH;31xz}z0EObT;Ar&A_K7J?W=!3K*2 zpr)szFRfo)Ub@?xjFXY53OjmJB--gdis=@}yx1if(?ys2lpmZ0`_`{dL6h|*^1nBkk%?&RzB5gA&L_Rezu2#xTb{=(QcdHua23&}| zX*zn=;3R0{{i)2z{oX(t0Tr@A7|U5Qcg+2Lj0AnHok=@NBW?7EE|@lrIA)!W$yu=3 z_W3#I4`B83D{oFqh{ z{c$W%k+|&JRa^hs`_4w}+u;44|E{){s~8RduGmU6z-?#W@K;jxUFGc7#J|iD#5jPX zqZg`}leE(r1btgw{pof|W_{ydXIz@HbqzBHk(=>~t#aodhrpyBPIZ1!*iMnYfn1Rg zNt>Y=k0@>;5_7Got|f)Mc*>8m3ez9vaec6k3q=w%+-o&Mf(gESnoF!7WVSlQ2>in? zT|9Ami}bcV3m3nEF(a1v=(#|yZC$Pv$v`p-+J4i^+KPy;TP(+v7BzNgwAAYjI(cre z^Y$6HY5+$Q1*Vn+$}e0`Uj7|BBh@>Tl~?pSeRbJdUCMu15(hbbXb@1Ewh11j0L}ij zPD)HrRmi2Guh*hxOa_h*CxEUfKbVQ`K*Fs$=B%O_71I{|8O2M&c9Fy>WX$e$DcIP6 z3<`e@Qj*d)19Q+aZCMm3Sw3vGs%91_az#TF3P1+xjqCgx-p@m&bqE&J4C&B`1?V5E z9PCd|NYet~-&i+M`zJ3n zDHT@17PH-{-XBVtMf9R2TI`#@yG>YF>BD-viRW1^5nwBrPx<&tdJzaOB~G&I84gI!u($If9fHU`504GaO5-(Fw-YShnk;XFi6e(#Ld>6LXR2Ls-4CgKnYPFE&7lH zUj8`5I4GdZuu#pV7?MyA%!13VZ#ABu7RSw|z!fycHdixPYsFdi3fd4w>@=bKqZ6j; zwZsnqps(mVb>^sj&!YK+k~)*EV~c^V^W6l6R=_00&sBw5iip7oTdZag3{+(Ph(YgP zUh)1&{ETxs5rx0*lmb^DI(2ve?~itk?<8kc|2yad#2k*t`{Zhu`rdB&=13q19fOiO zBGt^ZEj|>}17fnI9{cr(_^2ZoLCTUffdT}K(biRLT>L$8G$Th%4;POc2BfO~nh@C! zWpYD9_SBc91+w~Ys_tFyrir#f!Y&lZOmKss3ltd|iueE-^o8#!1rc`i$w3G5H7?XQ z`YG_A2if%#l0-_TWwgp@J{^MsJMdQNY5x@Jey*tU_MA_d9ge_5bv9n`YO2272{~Iz z5A71g`j{pAwNkC3vUJ4Z@F4vAHc$x~Fz?+Wc|Z3(mmFb~o{Ze&7mpbFFle zveSEeXI(#|ikP~t1tq#FrQiXEhh!KTS-1$f>`1$X#N+c`l1fAHx*Q+2Uw>M#PjU}v z;1)CMs+>9d+>@4O5XC1NZxb9f|700);f=^*NnTVFDG>^3n&lmf^;%|E_?wnh-8i~i z5>eB))q0J}Agn5a8$ja7q8*=)ut+O3$>h)|vLPEpfhaY670q3jK&V%Wv~_4`Bo+Q9 zh)8LS{c)uGEyA?%S0``hFIq?;dJUmIC*a0v+r`>ZHJ#->~MIwTo@n9 zIJ=^qQfDKQ$5*`Foz4KX=s^NYxCE87I`0Z0$%-QO&|YzN{S;85XxAS#!IQ*?Mkbmn zBZm)iW`>*o)xLupY!|X|766hyL8a~YK?-E-Xc)!fbmpe`0f=m>{4g9u0Tm@w9?(r+ z$1rG`ORYbQ#?z#s(k9!cEcSPF8v~Ja1GC{(Z~br1>wBb-fHFE>Qdh5v`jvVmB)Y{_YssP(Rm&*smvy`AsR^g7} z?b~x9m8_H^|I0;b|EJ^F{wInUzmol&wK*O(-zyEFB9-??d8{+Ab6%MXZn!Eu?2YAf zLr$~Ds$6d~9yu`v+;(*~$0BE=81_I=E86C7H|yX3OwQ_yU12a^gNL`BG{2mE`O4%+ z2G@D7 zhuZRA7NctONoD_Al*ou}iaoUNLs$Pk+CqK$`|&(07CQV{M5uyM-Bv+Togt&OwIKe_ zJSUDcnE^_V3a!k5_(m~{2Gt~3Vj{c(^BvoMIWrw|x0kA}cy!@MZaG|l2qFT)mpc)z zi`WnEC454yK+$+PzjQ?$3CCyiO@4V%6J9A5peSoe9jl%`B<|<-?c*_#Ug>djx2h_B zlb-f7E7kDRX)*aAl=;R!0u6rzT>esn*Z-P~M(_yp=9srOPCe|1GtN~Rj`b|wgCAf1 z^;UY#CZmR{_VDNj+b=dk$BGiH*Lrs>PJN=$G2ri(lL5`PwaMc)D&TPR zMg*8kuj|Ui>=wloJE8^^wR;pJ%5NlS$sl~U8t`_`3x5hIo?BP6-G+MxMq2&%HoHC$$jtja&1g)}2@{^Y zS$UDw(RMlpeO?;j4Gab=fVMtBb~*(0fwJ4E(TjlH-n8W1!pA0vkY8~9Z8SHAJ+vC| z^lxKM9|0Hx*XfxD8w$6PnB)ExRk2mz+yO-%|S`_uKgyd=&~{wu=>i#PIg5~AW9bd`IN*^mbQs$dbgUb2&i3C*MXOo)zxd@Z>Vg#q`rsy#62tdtVD1_w^|te3{4^tASiGF zJ!L>wJt7EOyz2n{jHcyGFC!=8HWEyRt8&L~nr*67{dTd8^$ge5AS_6DH~s^UKuYB! ztcG|b5#9z6o>C_>S%T#u8iX0DZX+KdiP`^0Cn+A`Y}iWuH%HCY`#OvjLcie;h$}kE zjINCG7Z-tdda^G$JnCrL*64`3WnDoZGQ)fOv;-Q(^5<-()CT^wX66O0Kw-L+yUL~E z=${!hz*ovZl#qeJI?0WLS_B^KuUr3N_(DE@?4|5LbHQNEcq=%+=wyL!VQ z*OoH@aybKQJ)#I%S>QTn9s2ekLG{}Oa8~ZrZ*ZZG7k)Rq(%fGpC{OnYBVo9L?#zT> zIbkh;VfdekFy!`Ww;lY=&`)of#)MZkqui1S`(MK4#_f|Fo0=8JAO}9$qx}QQ_f0JD zpD`2V$I-GMXJ7e*;I}@9g_3tbuc+93^BFI$U>0||`Xo06lrjb>ZZt+9;xRMIgt0p( z!NgnHpN*nY(M7LWPsnxAb#Y8Gf|Aq{&Bh-*id(q4Rs(>Avm1XfkXHPMzh~@iPRp4w zk4@9bs1@dMPLc4X5hAuh#|>09SCZXgh??TElao=lkVEbpz>``jxjiVxS4`*5*Jbm1M2J|9lP~*8A{rB6pW9X zH3-C8R3HvbNsimDMPUkG$U}r9 zD4aOt2z)#cKSuXn%~|93HXwyyhc%505#v|r)wecRZeE1XWn|JjN7^G#>p7{R%F3EJ zVdkMDhc8qZGMk~+PySM4sCG=+*xC#SOWV4P+~qX+h79(&MXD0w;x1I2>10|7;TWbcnNzfRNHDyV!4z!50~sy#Ixg#?)2) z#xN>A*_lGj^7ocn<$IpCf%{;1hj06~dD(l+ZTvf|ngu%{1wJhwjVJT?a}uIF&zXDA z1uglq!bXoCd1m9b5q@A}mbs-~&SD#5yh8ik8BB+jR%nqiZ{-9wDs@E0&4{I*~Y7+n3p%U_Gg{LMNh!J)#xLKDL0@|CqVxD)s%q*CP&Nn~M%7 z;L0*6o0XvBsel&pBm_Sl_=IXzUuwt^^#*FI4uW{aHo1al=6B0kL`MrtuXylAt>o1)eWNuFZCj6c}F^pqBp8H}U- zdnPCAV7!X_5XQ=Um+fy_v1+;M@!;v_ch2;v(I_Ua0?mf|oZ?^-sUZo_IA2soZt#G# zLj#YfOqJG*7rvVVlSX>(orH+K1%{mgrXnQH2x-B=x}qjkj>Qy6~pA7>!YmrEoC=kAdX_kK0{2+mv|PT}t%|jVz5% zXo{&5`?zjoBFDf(fd8kD&IRkj{MU%uT}$jf zf3qm;GN(v{B}4l`t5DE5wIQS0=y!##7Q?1?J7RV(VKzdWlO@K9>cmrPDtWkfTh`+J ze7;eN4kay=%$Az#qR5hgP~cJaaZ>3(=7Cvmi=)6w6}?-cY&C4e;g`Tmg~=*u z#7Ml6W_7q#f7Z)MJ|4XY`6&YJ6uiA%sk~}yroCH)C&V91&1S!knV@Ujf-5bx6x)71 zF%|MHvQTyJwCT>Wt<c01&J?Juxbb58_La2XGjB<`gr0P}`s0$3qncnG3w`hP+Ut zVz~_o5FsW#v;IA`MMrwwgcv|DsPJrRd+8pPaizx=*pI+C(}>n};9sgTgm;`RtuasN(3lSvRE4_9J-qKj&ChSi&^~nG zgLAmuz1+h)QAsjlzYs$SQp1JI+KJ8MBx=T6BFqyOk0Jv^RdhCPeiE6U<_8|^F63Ps zoU|b67Dzab>4Q=0wTdTyo5TKypG*U>U^85MWG}JpknlNPP^OC^_W)6&Z@YXL36k*6 zA5TQg#MdjH#T%!7YpK(;frdMKc0ChtJw@?(A^7{IE1#7PBjwhKE-jH>%mSZ{sH89u zWokX#8iZ-lYK07Nw5_#Rh9ULkLze6U(yOa}uh6K#o}3&-y6U0uY`uwQ)TF9i!=XM^ zn+bAr-tqD{*e=9Yu(tMr3;vNho5wG{Oz`u1H zbK$WXhBm})9FCHiYtySx{KbNyt10N<5bx($k_yRdq`=ewD_?S7*V2mG=R;|7CPsVz z`)0}K?25;=J6`sD zVo#Rdw87s_2w2H?EK{O5<{}a`5|WmFCAty??e?(2vE+a*FKz#BW!AEFMH)WMm&AaT zX*A-I2LMKOT^Sr8;BTm7|M4#nD?hNd*3KIcTFh4$Nr20$t76GPM5MO_Ui5FQ=cGhE z(JXsa4$&e;hK=n50^%gI!}}{NIXmkT^3WJu8YS{_n-sATT!kpvBT^e&-D2MA?z8r@ z7hcxi#;xv2g%>B-vVqIX#93e?obFk~jG(xnx63{T6R`B}5iMfUNZWpf3g6yIoBUU# zafcSqlDCmG8ZHxT4?L|5``!e}_iM1f5Et-itigS)rQ|55+8JBUZ_d!X+yUR zQ8(W9tUEhN@r@eC=X0z7Or~B4lVere<71x>KDg0^QI@R5wZ!(@qPt9DZ)c=4??#UI zPu#@-9$9*BnleQK!Aul#X?vcP zCR+6P6*mvwqW%yV(`u7l#YEE-CXmLKif$gHWRf?@Xu8T#Q_d>f@_a4cZ(}O}WBlC4 z__@*`dB>}v|9*Ks7ERy!d9GA*xYW~-*J9|-`27voj|P^4o?tCOSnmq%Lm!8N9nbT*w)-R?F3Yzz%uLfo-eiY9#JShA~@&2 z5NFev2up^bK-Idhw<>4_G7hOX{CyzM+;MZgkI>(-Pp$kfVPiJwxVP$9 zxgIeie%q7A>bN^Au05*BnM_Pls<(wzy()7^SED?+2UIjHpAs2~2&sB;v4VF)iapLB zZ#s1jU~_9Wc;D9FZj-~G9xZm$ycQwv+r{Ulnhzd1i*swIH_a+tf<3Kbh+hAMj7QQiHfdv@Ze5CzVQAD78-~R%cGut&Y+9P67s7(Dgo8J zSx3n#R@b{da7>dT#b&h-``-MgpsTjMph#>;lx2J^4#<1nl(r84yqFO}3_Pnh+g6yT&xoqY148%Tnl}QOh_c{6T!cE}a zW&3u%lD|!a-2fj$%^Mw>p%De===UBv)9gUAhwqzmWi%EL%O+Vy1JP`!(}=?NtM?a7 z00X}Hy8rnexXnip|3=~DV$iBsO8?A?+~0aIFCN_1HhzvldEOPxgs|heFx)q*o7HDi zh=ZaB`nRHn5KBKJ`B;?qvZB$VD4L)fZ8>wwXQV#AaMXsUrh}gt&3u|MUqw$pGXHz_ zl6M(A@H_f0q%h^kn}EQn<8E)?%t!d{U=P?m@=uNis;yn>kmTJM>nNw^ofdObsQGS0 z(NSX>KUuS6C-!+lTz}XoPeQgZhrFMJ&?2bDSv;7p=RQ5HIfBF(lLZ>=_3M6}XjhSB z%O2keJi}`eL4j2Vk@nm*G7fUAC%&j(XN!NVp`dD2d##lXf@PU%0_bp}T0MxaN?+HB zOjklReXmQSY~n<0gcZaRuM)Q%OV*||OpOzGu#-4o!yZDlP1H+ZER!(cs$w@Sj|F9F zMK!)P9wfhU<|^kYT6pl}!nR71%7>9xRPEInow0Q0K@hVr)UjcqA8CLv z3y!1Z9o#+W3N$x2w>B)zcpT{q0HCp+r|;Wqe>y0;iycE&zr_70L)R-iC!|A3TiMu& zy59DAubXxZSsw^R^tPTf(#5W~I9s6Pb9L?c*Mn|i54*CLomzE1NR0OS;`A&ZfAx5< zK*Q_itp{SLDXUP&^|}AmK*qWM%CwMG1plU7{;Zg1Yj_&du0=`fOuPN;6}a_H$syM2 zNZ{44-RSk~wR&D2f2c4dt%fNP#QrxVkB+Ma`&tP}maJ;roNGfaKM8r)+yXf$HA-2k z*Q@ngp|kIvfEqfKq(Y^wiaz#f-N9(J!)*8;x$pksw$)gE_6JS~K1d7(D~=&jly*`5 zHkYo;Z#zygq_5eu+UzpO8Bb9cc+`rMh%VLeC`zcI1+NLlQ)Cq-w%~NmY2e}B+(wVRolBQ8SyG){k4>a$ zYHB*J|5ap#qD?wa7aDTI97FQgh=}?C6|HpQ7>SRv!o4>umcGBNrRbFHq*g zkTz__jK{$1mk7q&@>@Gk+yO`(+LrSKBSA zJl>eyuhupPfx@~>tnB=@4N>1$)l%ADcgMvtdV&OVBVLtVs2K!Y8Eih zbF#;nf`(gKhze1L64j&cWmozf9pJB`|Wf!W#piMSJAVA;du7uv? zbf}O~D~W+#u58lvhTS^o(_Y4ttkn9`!B*3eJSqa;k!vuqaz4xkFl<}awk$10W^{0tP19u z-w@Ik=aS_Kw36^mfOC_xE$;*2stxPA$q4wbsOw=+ulC`m-iDaRxVBV^YLDXfrh%>4 z=0KARGr-wTe19M;$6^ad##T!MO4h(7*fA_UhnM|ROavv`vKsz|l8i|Fa)@AJKY&A?NI!6@3DObB$%|ByY&AQ}h%d2C2lbobBZcd_IR_PBOjs=)YO>X=i#Il=p#%BeixhJK%y zk;k?ldPf=FS>jajj{40lj5dDiY*&v~9{4+ZzOKJS8wDcxqx~I*)B?Zx_3*%J6Opy~ zf1xAc^DRIG$RzJ>W<}oldW&wQtq3mfVb~h3ySzP*+duV^-^+$yOchF6^oD$-kM5;D zj6GZW)>LBg-gN{?!i(HQtPKGb1c3Q#8{ck^@mb30UPo>FEo)Z^0#l`xIR(M%cOzz4 zZg)5B&zpxW6+^FzKPBqMOgY2t$@^$c0UWs#8Y$`c+9|9C8hnBr-X*yu?M?mLiUT;Y zp-(hmWjrE4qYugd`^Tl^Yya2VTKGW!y8B}FBVjJ$niKXQ4#-Vjn8Bp+;nQO4 z7gXC@OL}A_QeOsZ8h1s>QB#umCYUg*<9f5u~OpBU5$hKzz#dyAy~-qHP>G6oGAXmqFj*{+t{oqYB8qJ zJ56#24HxTXlIk>kT=by!$4q{ht%ijP3NNm>(Q(nQdw<2N&}e^J3txUg?vh!unT79W z6Q{+M60Wm_;+X!or}-QlWE9vQM43~5_e~Xtn9tHaSab9Dc`%P0Nqt(GRf7s13wBzG zlfMdnXTNndhwh!R5D<~T|A*~lL0K1Pkd~`jIB8oOe*0yYVbh`)QKwMVY~W+hSu{wr z^|nj4K;lE#Vz)R}xlw)j(N0t3^IeW~K6~ic*D|`lcsqO6GYsikSFID%V3qY17XkTc zD(wGI6Tli2&33Ip=LWgn%y9yNH=zpDBP z?Jmbc3YmVdueD!y&X`}4((Mg&vW@iPkN|_`3A;F?t3uJIft~|G)xXzjzNmW1s&e5A zc%EdsSf_vPP3}9*kc&jS3d+6k$(dCk3lX7!rm5q#i5f!hGnOr*cS8a>-ct6OZ#0F~ zkf?;=?y>SN9Hm1;Uw3&r5-Qa1bJg>XV(vxzyFhK0D7gx!E%Q)YQDY!z$G*g|6TG!)@_LcKJrJ>lgKm8-4>1 z2mgpsQ?3L5%PSL&227_~k;R)ZNEB#>#~r7j^*PWEoq)6n!P`|oyg4n6(8#Iq^2hq( z=AGxguPe!`K5|dFy`UCHWDqTX>ydj4~5Bq)mGKuD;kuy90%ls9ic3;Q0+2Nk#&_Xm)d3-J0 zz5P23^xGS(%(C_!S6VaGJzF6#>XJx80T`QvxLkzIyjEwa>#_GBy1|dkXVjTQmf|&_ z@e9Q;ohfD~$4OIj`_)#IT}H|sCZE~l1CJ0@sIB7Xgt*|hiIE{}HKOJ9*N0qaxkmXu zTNI29%l^Zj=4ZOJ3#Z~ZxT($KkAwSX%63&;qT{Do$yjjBYi^dUCf6$Tu%6KtkI&w? zx??;Ec7cdHvRg963iZ^|mZ!mNmKci44e6tODRX7txe5v(Da;JZ9<3q!K(2gj9)!9Y z(GiRSiHGQhdsc|r!|T3Bjx&(@r_PC`5vBKL4$q3QJMK%u;WlJ>=7zq@5oaogM5 zAz>Xak?rlEqo-++Y(13z+Ru8%ukCk8jA9B8>$D%&Yp$p$Ew6pR+U{cnaq5DaChVJ0 zn4dyQhe>t(tnv`GR3k$*a}J_X*4d87xBk`Dc84`;37q1?c_@J9urV~CD`xR+Gu&;p z4UWL(Nrm0FM-jg1@PkW~4%fFcF>!mPqwf0(mq&e`9gA+Lm710^mEic?4N{Sh*hO0Z zcCm2iQasL;yAB(eI(-}t9PXk*D!00*xI{jp7CMLGBJh+E zTCA2@%~rn8dD!Tt8f6v=6hYshIS`XgNnv3?4gJ^ME!;V9Ym3j*;07h;gp)#vPEa^? zgT(E0)dL>{GfMtH19uk__`UP&oAD3yf1RCf+-P0&SwfPe$br~7CMH(W&AYu;`bhBaQVrR7m|*>8a! zU_OtFjX~(=>m;=uikooQmf~yup4rJ8f^8Z7d+&%=q_V$H6!ZaxR`dOZXZ*k5nVYM) zSdW9#?y_Kn!-*>xx}`L%aM^#TTC26cuSgkU8+tv@XnQ2~C--p)@Es-hrtOVe?(5`u zKD@n3D|2z*<;P1?>=CBm4&S%m8Yk?pKYPAUbY|H~eBV4I+&fY5ahGZqt>Pra(5F;2 zn0KtUzxllLww-j=MXHHc*vlUJcu^Y+_bQw?>pY$wp^U{HkJ@{d6$vHmLc>UW`R4PB z%jRZ#E|>qTH#PwH_K=@36oF>wf1jUyR`w$hhe1Aqa7EYzk-f-lXSZ1JsWT=P44#?g ziwGqNOwGB+33)1!p0ltjA{TbrbN2zW)%=;z($cq9u4a%)pg@K)FP0`}p-F6b?+G?C z6k83`lYu(WZLC#~{{=#f|Bhsnd%wa~d4yu50Dk@EwVS^iJ^xnc?}^QAFGaD(7fG=1 zu-@9mcl7PGZJV?Gi#~0mm^#G1N>|5(J0s0gaPXQc{|tJ>D%U0|-lmbE%a7bMDqYg> ze(}hh0D3=CmZnLcQT;FUMt~iOl5a>#wpwfX@=AP8e$o759rq!uCGbY!_#>7>aq`f5 z`&0G0%QdU7ngyht*G*M2t@rEI(@U45`ONO&p+`)VgymcST%d?4ZeXg=G~s$piOu5H zkTMp@moH=*{{g_r2>G1t9okF-Yu@8a+Ur8V3yKUnSSJF}Ql@2|6efe#jn2tL0+zbf zB$p}g=Ov3Yc>-n?hGZxeI?ly)fRBSWAq+wFhX=gK9;^ysmvPPtCF;g0%sR!NhU(K& zKDaCGm<}@gpvjo3C5Qu@I70z`?0aH#fd7UqCZRy7XZOQ#Apgb9e_-toT)bkTw&%dg z?6+7<{g@vsoWjbQnq8sXjQ?Hub8yCihh?`SXfTJQZ9{SQ6H=h>ZUq(RT}E*ML`y5V z!k{T>Kjf}5yK=4l?Nb#i#dwEhK^Wl{U1$`7QGNG(#J`NPaM~V=e%Ub3D%(VdHbZ|a3m?t3|%dkp~to~ zFS*0>@%otC#1zUM33=S3Mq|X+N{YzSSYKIMm|EjW!u7n$K~W88j_v=O%by?S71q;#e6)OvILq16AeB0C zV7(EFx&G&yDip?bfJ*U+IznV+6}0GiyUUUuYUQy$>^S+sbI4glHnU@Bm|~jpk53Em84JqE073fDS-6_MZxs3YWFQwg56pn7+^M z9vy-lv;#X!&Z-RgzGqq^ z!@~m10|lJx{`xyU{9qNIj$I<}9gE*cdIj*Ee+@LT#Orv}TO;DVO4Xg4-rM4^I>>n~kL|ZUGM1wb|UsHsNVpqQyu{@>U~Zw3cDcyy-;>H7USYVEgU5aT+*dij8m} z%wsPU?Mb6p`tiUH`YA4bb>sO{u^q#qG}pi$%3o)GYdZLQp4cucgI_j6 z>olGn361JtEL>x9aJjkn1jG3?a~E-mMWJR}+srx`F4A72S58b2*>QZLP!@s>Yz%@!Vs*dA zGzNw~Re!RK;j?`~AZ}V40U-#D67k2^88&}e`F3~&WK4tyV3TG2y`Gsj;X&tyB}Q~X z++iXGYuO?qV91Tub?{m?X-ufJe!D`~K5+>-AbHkc=-!c14cP3v#QJRVi}d|0anSd_ ztb?sUjT}7${PF+~DA%dsrPAEQDrG}oZg>|2=r9-kd(jVQm*DVv^JN5(2)aA34()=! z$=;9k{}7}ylJJW!J#YK-5%BHx%BrT5km)Z$_DbpOZ~lwd5v zSqPid@qW~j#wlW!t|e%MTSR(rmif1Xt*y2Dy99oSt=8u((=m7ip$eAdE=;uZ;4w~P zM}?!+67FnI%!HE%qqMW*|K#4kL^NLC+}1>6Oko;Bkc4L9L)D2{S0?K2(wW8<3uBalQj=XCcdg=}@)b_S4$j6yotY+8JVhN&ozt%4MH zTyzu(pgt6%#xMZkc$Ce{w*7WbU-BOeviE>jQDe?`(QfFVO$)?$La^v99@8wF-ToP< zm7f9%mj}%-c>6+$ClQo@#?1Dd*O%yivQ>1z`8glImsHe-SKvMZAkH&I9>m2!nEYFc z0vox9Ik2GU)#dk>R^Ueklzx)LfFw&bBc)#rqFw2OnfE#XQ$yqy8o$@C2S-STxqiKe zvo6Jqy|PYety1J1%B(uheH8`j-0VEBk0rlo!AGth;229-)3ZE{1Zaska&8%>)4moH zGxkQnt3Kj0gc&Fb^#|zC_vlxMZH6TcW~gq>RBpx#d`=I~J~2w_c>q9-m}mkB1`1M^ zSQmnZ|J%G!RZgdtcGHb=du05Pj*;!GR?BA-8sYMIOnOrJk$Vb6=T^MF?H8Y}`B`cF zFNf?}`FcCI-vx)y;Iw$_hjJka3Mj=duczcTe6+^Iqn<_0r5Rm0K$yoSGIo6v;U{ z-p@;X*3XqA?VWx(RF6fCQJCyeFJLB4SMW?{;MWW-lQ+z=xKgLLmZ1mwGoxzzT0pmw zOU45)U9Wm?_#03gGQsOv(e;s&^T!znm{sKW5{WQByJ3 zH~7nla7+Kc?mlkvA*09MQ^N*qVQd_w-i#IR1hV_-qJZL&vfQq66gC+0IFE8>d_TJ7 z0|GMD;*%(Htyeuix8(yl+S%-AAi&drJhwzSCmZ=ETZqCa1p6||KYk=cJ$uNCHW;3y zuv7BW7D5|F4ZeR!3;BP{LyG>(yH|bIa3z0t^w--Dv41T*b1D^c(dY{~XrwOM}oniPv z*E^)wRgCT}5Ms+lXAN0o>g#F*XkvHz1 z@It)O_SF=zN(kxPXzX>RtaG*TQd-|IkMz=8Gq?3r1+L4`(PSOw0odQUf{z#a-gLt} zMMah678q-O(uiwAHu!)x@Uu&0=4Z;x_TVM=_hoA~ zPD9pg!oGb#9D)yw43GoArS-cX2xAeV^(pU?!&~YilSn}rCX%3P{!g$}2Mr-Ed+ID} za(+h9!mR%ZOR-1F&~1+ShF6gdh3o$Jk0L9&t|^1_BjuIo!98@)C;HDiw3_Lj(vm|n zlK&nNx^Bw@c;Oedz@*Oqw)=m-Y&84DpYMW!E`9eEek=6RS?@b>%fWwtaVmRwM*={Q WL@^%n@vZ>Sm#n0cM5UN<(EkAk>>)t_ literal 0 HcmV?d00001 diff --git a/www2/images/license.png b/www2/images/license.png new file mode 100644 index 0000000000000000000000000000000000000000..b2bf5bae57ca8e575753cdbe5d2d4768a9035232 GIT binary patch literal 57696 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

kt0haf?su@j((_h_@JbMM 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 literal 0 HcmV?d00001 diff --git a/www2/images/networkSlide.png b/www2/images/networkSlide.png new file mode 100644 index 0000000000000000000000000000000000000000..ba55e109e855ab7dc993542cab05404695987b94 GIT binary patch literal 115118 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

ICW*v44cNvI zl1-ZXUIcj230)Ln%@nk%R%yES@Dc^7!+w@T=`@(>Oe97GNi8=mGS_Ly<47q{OkmFL zh{h6#sN_i&%RCNwvxzAZQLS3la8@Dd79@pAjBXc#1thU$%jk%@uS7|-sT^j_HV5g%UaBwYvDXW9Y@om26+$T zo^vKua5DmT3ng>S8QdME7OoXcRam%Tv<$`b4)Q>?3ZMgkyAUBI0s~hkG$LSfn&rCg zPRxklOzdrgp+gk(LS}>rCA(!nAdV0MQlJn)A`*kCYxR;{FKTW?P%(lT5u!vSpUX1H z3|hd!0XQOs*2WB4kOe4QwCJt67O%y%xGEsIRxhKgdd)r!4vrj5)uzFAC$PQ(apC8; z9SB46Jo(gPY%X4HH_s!O!r=oDI(_>EJ-dZS^Ly`V?h0DU?xef==!ZY?qYSlHU3QD@ zn7{gazpiJuiD@o+Ac;ExqK$j2lc8W8oCKutVbk}0uatqY_K-(dKUmG^{_Cz2s6#DK zGj=Oi&|y3F+jM;6gCF{+Yptp&#BO!??6Y5d*ETU`CP* zp!Az&aiCVGyo(r2jZ@HJ^r}{}=CN5H&DA0lk(i)PZ@ux|oA18!`s=U#-oN_wSD*Xi zu4{+$QyqGifFgAqz_2+uB0-7`OOTkfR;zV={ox?=%8Ot9${+mOZ+-sXGU)R9!@1wr zJQ1T#6HC--G5`|MS|l_aLsmZa$W(P;!%iY){(ErLO7k(gM5)yl-q zKqalbUKUjFTe}%f&b;3&|Y*Bp@Q93q+jztU7Wx1eDayHzbJ> zXWK(crmEwNNCY!$k1s7BcyM>~jlA7ltdj0-YB{?bpa257fvVM_vjPneC2)uo5{869 zh}dUGc+*JJfrFN5&e6FU5HX8u)oEmjByl=FnKtLZB2CL7g3Vi%J0Qh~M1HYn7!19S zBe+)6s?|;DB2bER8Q0B71eu71Vj>P8LLm|oB3xL<=C8uVSsvWMV+dWFh=gdKgqhQ` zW$bHJk^qQ`=m<3HshEM;U>5OJE)(Sm%0ziY@^3J``0UHScIW)1tLvprXd1LeEoe1^ zqD^Fl45HTy=YT3$W~;%i5|Pc2FRL7KXu!<#)K8P=UJN1#iWoBig9HPpmaD^jo(5t> zMl192*_?zbQ&DUoE!Z*)BY1{7xq;6xX$~%N&IZl1Qc%l<1^Yev5Y!4*ki1fdW}uU+ znlR)EY6WI+hZ&3?l1=3zt~s9xh|ys#x?d145D*FGxla-Y2Q3Z+p+$1bBkb{qvr`i<7I-})1^mXaadn}4yHXV4jmcB-pAh2fdmmL@9*Ee6&`s1<4?T5 zY0~8Ud!PO7xBmDyqxf7s2djvPEFi)2Fjuy`KZiV;!$9eYkNnUFKK$`ZHy*uzzM1+# z5V`bFMw{y=vBlH?&e<^ywZHl9J9TmC`U4MjZ406K;#Z#iqks87gtIp>1d0oQS%b%D z3dmlkvELlM|NH-wU;Z0^=Er~f>5u=&E*-u5&9Bh31FHb$5{bym2qeIaNFEZH+0;8Q zq9I4%$WY<`k4KCVpZ>_lOUam8&7{69o-u0Zb%9>eMvUCfjUu9LUM7bQkU*4&&+J zIGqL;;#kz%RZBr!*@hlo!g7aL7*0)B`c3IK1jbxKFK~kzgqZ`!=!CM}*f>htI^em0 z+=^B$ICTpOsceoh4IxG+QgaZwLrXSQn9bz=I>N4t7!eWUOw~2h8Bfnt{T>eTl1&RU zZ;ua4Xx(kKT3vYc8;)LjemJ}dHxvcAsS#krMkF8>LJ+pOeV3Sd#xB-at63>k@dq>1 zG*3=c&4RUR!_75MT1se|ASn;qI?#4tu9|YkTx&<>W~B&o0M&Y1O37Spn&#GL2beiU zq5uGHAh?;SatJU-y{=Yi90Zoz>$|(V8VgfO0K|#it8;V8Q!$+f!d2C&pcxhh1*XW% z4l`F6NE9e=E`>}_ggNI5+3d^&LP1}M6p4svB2u3nP3&eMVlptil1v?D)hsW9Y;ugX!`4B&75V1Ca)bbIp$GyIn=k-2 zH@F!Q99A4owe8mDL;_~q6&2&4BZYt{C>cc&1Jv9g9r0o{T|Xo%#8TNrL_{0_cdwtI zYSuc_FSveLR5lM{2X`M&;TG00Q`JUseFTVJ#ui)sVX1RhiL;@DC^%|NnZrrhnyFc}x|6ktw?)O~1dS$&_ zZ4rLq|M}k?eDz~ZN)!{CB~)PrRv?jB;O1j*Bqm90^srE)q$mGLZWw^&aw!)sUv?0J zXr6qU%&ghjPs_DU({yqW+Aim^TrJzS4Q+RPco=3Ej_>%;Pkq<-{?O@mJbdZtygfbyCnkKcYRY=X| z){W)f`S#o;X!e|Ax0D!73y7!VBX=v~w7z%;gl|3ds9CXTbaOCU$(l*S}1bZ5-hwF;WU4wG0L*G>xQI zBy!uzLQtHhl1q-OWxHMynvy4GbmuNfYM7W~EJJVOAZ^E~5u%xt?UfuWEbQb^BY;A+ zm%%h^o`{Ix&1#(%%W`_enkhD;n$6*#TK!5QR11cvRw=SnCX9q2G0tzSspf22v}8=9 zs#*0i#>lDBk}tjKdw%90{G+$N??cC%;mS9@u)T5Bts=U`LB#AL2qA_bF>;6m4o#EV zg|w~2NFY;Hopc&CXMiL|gy3KhOKK%00w7gkHysDk61z@PQ}Ree!t7H&2Zr56go6N{ zhb@g`41%Ilzg2e^1|Ts>OkUFg%tTzRoHfPZ5QIRr&$?vG*;LKl!4C2>t)_zMiHJk= zl998zIze-`X%tYb(>bpZAvlB7LY`G%^WE9@Gwt#gDG+m0VrB-90z%^w}3<5D#G%=`> zf_4o)dz?F}NGr5-FY`HSTScF7~nOI0- z)mMa!IA~n4Phv_j*3l}tL0!5a&B6x-ftZPJAN~#XZF2MZBU}r+1?1pJ5{Sv2$dyE9 zu+QkSX?1CJ&zlCM;qcnx{GGIOhrRR&dEwO9xWTlA8->Uce45}@Mf9*( z`SFdH9{ti&4}D>H;o*)9?GmA-5CQl!P;AjG>qYjV!djFA!zse_9ICcO?A}HE4$$F1G!_5|ZqGRk2j&ELj;mJog&pp~Ar?#u$ zN=luZQfxUb+!a>9F}FMKc<+bK@9u8LEHvET6F~|HHrh75|=63dG`WWCnAyl9qdExwew?IONT7a_@G}6)Q0$ktEU| zUwJ-UxVU@o1Doqtvld8WS~#WUx$|b2h9Oy+%-;Q>AOFw(&Oc~F_|og%^lSg~(e~AhUJ9|M66}XV_yN4^@GvwUnGjtX4{@ygmV`+S6(RN*zD|*yNv@l zh7`KJbBJ*|Im|;JyF~~|OEEB1T`X?~iO0+Hm&&x&oI|_NQe2go$tm}JDTP^dzNR8B z*3_+S91tZ)Q??s8U{Ej3de@!$)0^$yx!ue6-hA$vY-obmIQ1uk5aQ16*!MMNIh>r3 zD}j92T2T;5*NHg^bBGSoX#x}6Lx@IHwi^Oz$(Az&&CXt0uBOAAD3eQY_ZR|5&Q77u zv7r!Ro%>@xtgCuez+H{4P!On9wYsVf)p<;_MbWigzxOA8?q~kWj}v2ix_$UhKDM)S zA+#OfW(4N?O9KE`ElO}UC6RIXvt(w;NF zP*Jm~7`%jF9GegroS7DC!aj6KiB|3eF7Cz6;bKNM7yu6w!GbfqmZ!#2YQsB|^iA?0 z5y1%n2RM_%oLtGxorORwrKZO~Agcgd5*db2_TT=N@BhKo&f*K#pS$_!Gv{|iOA7{kd7X8NuA$ip%=KdN?*nWcGH6(z6?d6}4-G*3$ybTCBj= zRW0j zX%_kTD5Ng!Uz$#iRCqLKE{88ZbN+$X?c9C;jVB*<@c^Tu9OCQqDZEy_ArWDg+N7^MUlf=!9t1PlSe@TnFme91^F0?-lDK^b=+@5av`s%`+W#~5t z*DK&9Nhl`=$Fcdn-}%k&d+!fizj5O;zx!|fx4i)9%Hlx(rdV=uxYO__SP$|m8mIq{}R&C;~! zG;(ZNq&9OhJS|qk=~01r)39K%e||c;RdP0n7p+eiu@S5u*S%yb#hHyjPE71nF;{`$ z#>CB%$W4_v%o%-mz`1S(AxV&w_2lqiGr$$6$A>%T_nVYlGfe9)KXXB{xf$r z&dHRT)nN{Buf9fiILy_V0x^mzoGGY*pGm*!M$R&UX4mTxYVu4wO*#TZzyJQ+t6S{@FGcn+r z$D&FhaEPj^B?q;j%32IoBupVvhzO0Bf;<9XRa4DOltQGYb*Sm!uEVyNl0yuA45NfZ z)i*#cB+k`xqA`j?hzd8+6w^4Fd*#Zw2el$XEU~xZu5Ln54rWeX>dlXsvjlN7EeazF z&ViWS*=a)F@{LEHefVqLYCXL0&E4oZtB*bTM9@+Sn-K@Ao#GPQ+0W8#YK15e$i280 zhJ(CvDM+UXEz%WklWxGtV+7zN5Vl&x!?AMYtGrehbhqqhFbs!7)!;xOQzvmays!G6 z5<>z>>`#tX_kGvT{;mJ!RhQ14oE+VA@!YFl{rX=%J$&*HKEG_DhlVABsFr_KwWp%o z>ixiBfY9Ukh(AUp0TTKLQ}?(RW?+Atklm1aRf zOqEj0{jrl%Xl-*q!!g#E(Jqi$KfH?Z#F;=0ojj|LCy?kwZpT=jgF8~o%&X?~(NBHk z*I8ckhPND_oIdzRzwXx_56eB`Xu~N;NCFX?W=z!`RG}c1s^H`x^KW0r{Xbw1ymGA% z90Q?@C#SJn?p(gRKe$oZiqI0;j)}I{uY}ZQ2@kya?XP{y+fNUVzVXFRA76Q9NxXaa zeVbcHdUOTDRu*e%TDPL0d~)!$FMs}xZ++YD-u~wweDK=S-^{nJ(rTUijifd-?Hp$} z3#phosau{32o4={8HZ_eEE0(6`bWR%R%qsaiox7R(Wd7 zOhl&DKVsDZNw7#<6QOWe(JHxf5CWMwNW5g#YMvo5F^FTB!T0Osmp<{k$Jbwk#IJtr zw`p@=wgkK=%$2pc*G{H-l4GKp>zN&w#2^YJY*tF1+^sr@YuK+QT+FS`c%^ArWVm@P zk3Gj$+9fk-o_y+w5kf>RdAlVE)FgNFeq%Y;0W7nqnopCP)l+yGM~*Rs=vEVU0+7Su zt~uA!BTQ>{lq4WEb+YH0Ii}dP?hb-#Q7tv`z~(dzu4OsH)*D9A#QRoc0F=E*0^*1MRM-552l`7hh_7=JcZ7LI`1XqHwkr2ElcFBnXF`FAy zD`gWko=)VHKnz#X;-D&Bz|_wUo$f|fO1t~E_x$L+7tdY0eigvB@6Vk(|Bmnf&@*5D z6KF3@MqL2?#lGdrLb&Lrt`1ex9--lr ztB-u?)9?7+_wMiQ9~~dHZM)jp|I~wDy!DMgSw*pX-%i^@8cxwHFbzKSWNK57{(xhm zW)I6fJA9l(!eUpCuDL1225MHaYbG7I-34GA!{t}et>?b>k$?X6KibXxNlVjWXV0B% z+&G9*>s6U46A}4L^<|@Z)po$i@f`^6^T|ELR8BXPhCZ(K{uWo)`}bK-7k zxuQvq4{yHrFaO=2`MJNbY!h*K^LM}N*MH%koWAg+v@2;6LfrJ*C?TdMG@ZDuy5+;4 z{o`L6hP~bWhrjYU*RkE%)m)?&QKm-g@}1f;4mu9?80Dp;^W#Kf`T5Yu{pIJ)Up zVz=NB%Jvj+FJoxhwA$5akQhwO$4SS&41K%a<+jP=L?OBFcR=bl$@Z{0}y z>t^@-!84Ch8Hkz6n0EKw9pgBSr;<8QuzW%k)QqNSIzB2iN@(E9F}ADqHy{3*Fg^3F zhhwA=QoSu{$;=W6oKn|zHf3i>XlgwJfoNwR%wU08eSRng2j#I}UcUDyf9`L->undh zw)@(rKb|6mrlFZ=g?h{yS-PqW4s#gYL2{BcE5HWFzMB;gp zuA4Te2hTqF zBC0|yyQ@eb*L-rqu8Z|92wI9}WA_+@+)BSySBi}Xv68K1E7dWL;yp`%gnIji)xo2a znW<82EKg+|>!6g}2~Hv`!Kuo;2FtaVxqcETHRjc@t^`W46LKH=GL7bDL>?kIfY{wx z3#+nQBrzdl;+WjcwQBiV`_2?PhS;zq=U8%2X68^6EmMqv$U>Zm*-VNPikK;(FdH-Z zK+aCYWYMXl26c5Kc#Oo6m|-UF=H%`S^IB;i#K7*(rp1kr!9pRxgEz%#0+NG0` zK%R5`2*Mqze*66DW+ZMVLA(?lhtRA@)!kW=O@lj8YB=}K>{c-KPV6i+oGfX&`t{HJ z=5PG!hd=z&=lA!w!}y1v_@giW!LKi3)Nw1A$2>v+#?R&A9+3wxE?|aA%wTR^)1i5?}H!vw=a-tf$l!=#9Jnh8akt%bAcJ`F0ftI4xXb2}AEH2lvSvYwa2Ahh~xOdO1De{ePes$Vxq-mSg&UA86 z`fZ4M*y?guTIV`C1} zQQ)cy4k30{Msuq@%+=sQ%x>=WIG@KF-7n+z@yEW^E|*U{@{n(iD2UZxK;+DxN6nMf zteP`~B}5YD7+8cV;t&K?o*y7E3e??^D{4MP80EgVDW}zL9;fY%>tVUGw^(^D@R}oJ z(#eexBUp&w)i>t`Rj;xixy=@tO0Y3^Koy`6gkvHCRL#k}0F=4~K+`aYM2bz$qvuIT znh;QV%w`^9j2+;bC)eVoke~f-B18l?31JqpRIR8ByE~N}Q&X5NXJVe8a1my#9C%Ww~eLDL4W`x#wqH-t+q7gPS*= z{zf8%{d@fIIhQ#4ib}z(m^2+H0 z4Bx@}9wtM#vo{{^D?qtvt#dD?E>tmI5A z9NWA(&3R}RD=)>9agdXjo-*z zX72XRPX{-DRz;HsqazBQ#E%MnAWyQr`i<- zK%rX79Gqbh7IHV3xtSMFO{2n=ClI;2YcWdZ1POEfcP?oWy5*VyE!hBssIFz2jEPbU zpIN|e?l1z0gu2RTJ)fJA8Jh<;6H(zR@;I1Gv)j@T!KXpM;w&CQOH3t8ncV%bX^CWK znp|}YH_OIi5-2txCgz2~KuW=>u2bv;s`OuwF;|!XV8nsM0ud1A@ugQ5JQ-0CBaZV) z&kB3dGO8f?wv60Un_MC*d2w=ZYaAV3099uzOv<&KOUX%~?xx0qS(-C~QH{tEwbo~8 zK_N*Au}J7SXrW|I#OZcfM9q%9{I?f%20#@rK@1j<5G8jd5JZ@0q2-A``OS~s``RD+ z!4K^%R|bCQvB$pfvEORkxm{Tvm;e@XcOo>4+JjD}ZVrIGs1nKvg=Eu~^2VEmZZ{GG zOQTFepy!A36M2-vzmItrjy>5;E zSPxzV6E3~l_b!tv9lb=Wea{mlQHZ`ds)d5C8SeFpJb&|QNDyZu^zZnG{KfzF|Ni9H zAM9^ljolhGhfO3B$}r?{kkmxxT)c=rSM-8T%wVzHnQKl#x=c;=zc5-8`arw8>@ zrDd|QACC{ry==E;g+rQ7j%!fFrZKHnR;H3CXeQ!z|B}1wuvN`v+)9iN=rn?vV-yKy zR`Mhg2*ymC!&}3q-yYv0z)J>@R=eb`c?5@g0IXn>)O0K|ZI8W}bc^= zZ#O%a@2vq#j!CztBte=ap=o#b;7~1ACYGSXm~HEm#?bEG^QzEvS08=I@|2cKA|5xJ z@zynmhi<_V0fT$9SaD1oBdki9zy zz40R4go%ZzNs?M2P?@Yurs{6>=<2Efb80v>RAWKRC704~YB9H@HZ4}MU8KcAn7tHO z2C63lp-VoHm>b6{3bkxppP~+c~S8S!IQ7KYJ%uITpKNDmCaZJ)ST%3hU zSQ3Xoju45M%0Q)O9pNyrfqnibpcz)U&RAxs6`aI5IM|upS*R#Qa~#|95SQ%qaKQs{ zz1`Kf0(92x1%miIL#k3EBvc|a2weT(ZloD`B4%uEKK<~Qp1XPL=E1?2KKIGb{N^u| zlbhY{WiJCYD@b&JOraThAXPGh7pLktHZYS!mWI0}U@on+OM-bGVQSOpspG&jZafbl z2^a6T{=`oXDYY>z!p>!hkzf)dZH}r(v}jq}|6PCSZ~TM%E?wB19GjN=@49p6(%s*D z4lzZe1fW{M#E$>`JnWzj1jhBf)C?m`$ z#9EFHt}RrU0cW)b%8AI?^*=Vo{MiZB|L*_$FTeKCS2a(~?tV;7NKIU>!g47oHK}Qr zyWP&-=Jep&jawJ)dDVKolg&T#sZW04(;ufYGE>P)T0~;#I(9cJTvJu%mPbiR%V^V- z^E93ug|RjTe@FS8cz;c0*4se&ds!D zUKlzJA+~Nl9v#3-vs{;98ioUjA*J=sUH7`%m4_cyTP7)i0|h z+cebOvGNc}Y8`Q~QYeJjc9NQAxf@sOcD)~B+T3`ll#w|wvE@8(+C*@&GL&)1{b}B8 zbsDuyFehQ+NFrQU=xRa_fr5}5OQ0AzMHsB)+C?eM&CZ^=PsfKLHIf<%EyYLx@}PP0 zQlQy2Th5+Gc4Ows1VwF*HnXB6BHb!tzI6kfh&iwX5#bPsn23qVRZYtrju)vYJ!;w*k~lTY zDTF}Gu2v>)yL9e?3r{(hJlWXWG>|)iVCtGHogX1OCzs$799(5X(n40CRu9ot52F}4 zHZgU>YNs!+%zN-V9XR)JOqsmg><;H`5 z9!TH)H!i;8$B+2J@X`|tJ8=M7#3r(lYL$}Lp>Vxq(roB6oj+i6ugdJwB?%N_XqJ*U zHy``TlVAMA^>2MCjfauUn}w6$^cGc93P}~y&NQU}5_TnFu#hUs2sM{Lxo2039i^^} zV-MDDXUYZJ!@%J4_j$iXf6OURY&fPOD{k7@brcuUG>8d{{q1J^hWGv0JKy#FhqrFj z3v@s97cN|W@x>QzTzftVy9*6Rp0{-IRXDwg@f2_p0W%~y1k(s|Nbs@u&5?9#xp1#< zZlM%tCMy(Tt-hh^`3Zq);U%*>n7j_yg`8$L1P7^8e)HhC`aRTNa5;Gaetc`{yLKW$3pz zuZ6Zt?0{%IK7hNVC4nJ? zC@Jpj-TQi=+<5X~Y1?MGl9aUXd9jq3v=kV0?Bi-p;PK=T%%NM9Y4m9#2{3h-NOS_R zNKEEdQ-IOonh&o&4=s>TW6(^|%rzHG*;R=_Auusgm;>A(E!lO%T>r*8jXF&fYBwTt zNC3PPB2J5C?R03CD=kwwIhHu%c9{vTriyBA5prcxr9ecnhByHdSI-7w4#Ke}?uY=j z+f13W8g?RXmrdI-u?`#Udz_ICO*2)SuA0Fmb&?u0vr+)JJbB5L3{@X)BCfW8S_^e{ zr>|TB`0bF4dtga1x>=Pk9h%2c%@jV3eOm2ym+ykP_NShQI$Z$BRNb{&hby0ls(LnG zgy2pPaTmA}krOkK3uOm`;26sE&ZFbM-ts4|Z9cVJSc*&m60-ycGX;u5X3S|=te@-q z7dUcC$qe&D>KUF&4r&DkvfCyYsLn928r*k-``j$#M&#@Q7Lw@T3ezGhKz-(`h1U$? zU;*5VSzr>50YL(jd6~R3mq0y*P|;)#Foi&DAgDS5+-x4)*L7TJKD}4<$^jwL(l$dfyLz;A0>E=%;`0H*Dy&6bQq#6n)M2 zec&g5_OEnNj*k!9w*AnLe)#H(&;IFe{c>nkv-vc3dlzH37`K~#*tqL<7O14}a#3B>|#Y9ZCDY#BA8RX=u#%}J&(_pGBLAqsV8mjZgJXWd3$x0rH41c@A2f)P+3zdFD10(B4vM=^zY08x{erS?YI zI8B>lCHKVwL{O`feX2TsXlnYZl87z|JHLL$Qg9=4AUGHxFkAip_&iWCq@_StCUMF5kLpBeWUiYjGM2AnB)B}Ty9oxD_Q4Ot~}S>)XHdr+?gbQ79OknGpiIy?1}#`_Es#e0qHRwFf_6 z`qSy?hE9DcR+r2>W?a9IF!X<0R(}Szi>2Zh+w^4^-n)-JC!g~J>*L-sI z`P}y;TsEg=nA}P(6N4oPH4VG~l=EbHWR^S*0OE4ZMAEhr8Y@{#uKpG<+cbq3LbvD- zZduN;?aYioV6b!{f`qM>i>g|w+(#o~sYfw$A+DZ~dKHk=5_1{0ny0#P%#{cZi7~Br zbee|KW5mcLfYIC?3aHLA#A=qILNUeIa7th?)iO&3#B<&1UE>a5L}CCj!jcTF7+$b=x7}=16~`UshTj|*dYX}^xBH8cb~|O z*hx52?Tkng+|jId?t0VrK*I6K!Pswx&0xk(@ir`zs8)3ofh*~(u4Q0xVPJM~u)EZm z#@XgnQ~N}4M_~Er9cBCQQ(wM#Pgt%bkAz~mQdu-;b|Z1Xm8Rk5gahMzoWuS40 z`&OvT(_;$eQP`P^o4c`Rb24zPD#ToTLUZGvXP5(}zEZ$R9cGTo!GXeD)Tt3-cNkbp zff@*AL^cqHDJ?RZ`v(+2M49_4k5ShCh*x_g6Vqze19S*yaXCin=a3ig+ik)f; zsp`RtvVWKD-QkB zefjba{ls7Y&8NTVrB?JQZElgXa|a@nLIi6Th>^T&^x)u|pZ&hlj_IH9!kIzpQ-2|T|kbM*8G&rOqd z_OLmbav`{vQidL&8D>(*)j~?S-#9$ysiaky3R?kuefjRG-{$coG_9mYhpi5_ymWW3 znl~pL8nY6Y3p*;q(P6vZ6Nw?oUH3g;Iaf6KF!Za{&V@Vfdj6@$V$)$7N*Q5#c;mV` zLWsFCScs304n>$i)39+Tx11qA{dfNB_rLE4%uPgI^TxOS+CTrt$5)<q#aH zt)a16)=Uy3zyzs@H3v9#5(3vWCZHwf?NJ#9IJjw;3B*Lg%p4`Q%iQ<<<`g2#B!D}) z8r)pf;mpD;A*Rr@5+jJ+REI&wamM=*u_Pw;nFCq%aVL>BCJ5eYjsNfxS^RpBsXLNaI7iHV6?VpA*R zBSADvHgSNtun^ZEB73!hXa-;q5D6798@J?2sC)&hLmFoYF|intA@~etaF#G51*$F6 z3)whvlW7@!@-o4#x}P2Fa2U>j@Oe|&`&D?eN(9cejl z5S8i9)tjqcKN1eReI_;3`w%<>aEVT=6bX@0n1#%U3^6(h&GgDbrYPBOJRSD$(w&Qb ze2q-Ok%O>hn0nc|Hx`y6h%CmPn~^Gews!CS*Sv{Mr)jDqv7@7dd+xb^_s;t^kAEqQ zBgZJqT~D3Jf`|~A@|LojGfEGlRlrl9{I|dO)Hm*V{o5V{fSm&l ziO>lSKYW3Rrro=Whx_03&ei$L&p!IqlPA8qn6}UfZbU#@AVjFkuKq55sr_VpRxc_zO^5y=;=Qu_f(#~$|I?FosTW0p6 z%2Q=ikO;=UKRI69asQ>u_w>iNPOd-KvgkOvW`K3OC6TyVxv5T5Y?c-CR7$}}>x-B3 zI616Y?rd*dzw+X9;oa{EA>^Fb>vb`^_WbkX(XFj!38F)fJbwKPfAT%=`@na-?Je7r z({|Cl@Y1!24@A>}Yqk~}>LI`ht^P8Xgfe-${bB}?T z+qR8Kb1qZQ6k@kj8$)W*55w`T#f8g@J03WH-)n^VxhEf5ox2lSbQ;Vw1Zj45br|!w zNz2B75R;cY4I4L%rzar<5|O6SeycV!52Yg9F2;U4ZjOZlle=mu zqpO}73WZrXBxw?hn3|qtdCoKt<``#%n!pmt)bd0mAx1UrhZ6@=(-7Q>5fM@4C1ik& zsnQCG#Wdte9iF9&vI92Nf=4G>5Xy)WCI}?Hc zRHpp9|MDMeDZ{tE;BZZegerUmresR6YHh6N#|o$isOk~MT!=w5OEC2;JZt`Tb`oVG zX^2@uaF~@uG=bEV;GRtkLTn-+h&hVpP$?~F%o_7;2!)b3f@J~N$>HiY5eXq!iCSw= z$hkh-p>RvC!3Q@OF<`FQ9fESZ0JmP@4aBBw#W0yM1=QGjadT&wk(HVwXhaJ_&deZ( z)SDEMRaWmTtB@EX!N?|4LbYk0tsU;HyjaI^2ZzdO096#1ab&1dP-1e2XSS(+8^gRT zkwdB-9)LNq7O$@~wjNrw+DAoXL{Py@3aWcUQL`J*$lje;p2y}^aTgtl$tAMqVutaU z1WM6JBQnfv+9LBX_H%dwaQ7JF(PkWmUi(c<2VRm+J$5dk>uekpS%@i+$Bu<*bpd%? z0kWq zU;7s?eCpR1TIdnSf3I$7}nyp=RXH zOBah%aT_U%%%vw!!${GlKI z(YL+x`$vSEH?HN=Bh7`F-BoIlSd$o{c>+60keIYTwR$p|1}jr++N;;D?_Ij<{s&&Q zTCLRl;~)LQuYBr{lK8Ya0w^taZRm%SgJ+(9ZWwjj_fI_W`0xJOFI|7`@#XFwhnSYT z#MI~Vt{?pH>tFxIlj9?1HnXN_w*Bz%SHGBI@=_$Vv27(ai=A^WZqwAXt7dnPn77Br zZ+ZV;_|N{{fBAzS{)x1E#}i-s(r|Foi|W{G&Uw4J?eKMy@#LUvPl+Q@b)-=27Sb&0 z%qcW&=oWAX@mU8n+&nFo6y)TkXQz{+%ItNuDy1?@h)tb^(mblsiYa$Eld;_tI%{D6S6Q^v`D5jW3?YFLlSj;_7LzyNck(8jS*=UA?l%mB-)@hsjjZR~=Zs;^= zztx<*x|_xkIa8i6j@0+I-Pm?hhV3+Lr=cIGVa&rc4%0Z~sn26yhOvyjj$;|K=WIGz zQPbIbQ?#fRGb`gbot{jmN7o+v#=$e+icy4#@<@4-oP%aD4eo4p@KK$Y(L(SLN(d%m z!pdYbgWNFZaqSGUHo zQ1d*x71Wc2Wh#SGGHRHLxRVvO>}K#;%b(Ly)%XRk4XiU!(hY8IFx1_EiP%XheMl*g zDVM&o{0-5-G!JE^y0(enEX09WxLRB|3M1%7@|L|+^Q)HvRjd3+s!l*LiZ=B~oyrPj zWY_A%S4ze)c=nR#n5@;42m5e*isp6S_1?W@r>b4sE_U`m`SIU>;!pozk(jNBM4x(+ z$lcmV%!{dJ3ADchrjfNTZe})UAgk9Pki*D&wX;SY?tRRPMdAsZa9X;xr1Uq)@*n^H(F;#CO#(>!9xxFpLrBGz#*D{!8dp*&8T)7ULTYBtxe5Gb@=)vP!) z#58*nh)uJV3@w#^6jB#rganF#h%INGMptuHcZ)H$>pf!8JXs#0#h7jO-0*O4y__Dg z$m|9c5s7?e+y=}`DZ?fYTN|h9Oou~FVK(z#0XFCP10$58SF~0x#4Oz+G@Yy3G?|%B zgXh6aYZDUy2_dA0No*WFj{*b`sfiXgLs2VP%T!Dima7{BbKNsJs_U`#YEx>YX+vx{ zMUIJTKZ(p0Pk{r2kS7cSt0fAFr3op3$?LIRoTLydON}6zun8%-)v`~jY*hQEbAO%Qs)S_Mkg|jE$nWKoa-Q4lr?RuVI#_W~T zMBK9WF!gD}9K2cEcp6d26_#mzkv0cDZpclDs98`R$#e?c+kW83@44g7&F0kIOUdnG z{mrj_ZhQ5q&@50{7iA*NAfmLy_Rz~HcfApL@L@A!0>E%1ot(p50860%&@gkR4}3dE zETt4EMDznffU24G2RFO(vby6Q9f#@kM5mFPWI3yZic^=AOvYEe^_}WR^9L7{|~wAhMz{ zMW^V~$P$*9?g}YQr^n19sc|zmwKBQ6*Ce{>KusqVv4vKE7*@_SQo1ekdRvYVe( zYE;u9qq_R)OjQet12x%HrDdupULwFub2ck1;vfS&G_$q3;tA)+z@d&(tp_}7I&?-- zorAv)yZvCyYr8X7Z+10JRt<*$t!Jc~5(le@01FB|)U=2hOH?Ozj41>)CfZ1Fa`p;3 zQ_fc39Xoq63)s2Fs6YhaDqT3-#Ow?Y7G2UDxVM6m6~bh5sG=qbUF+eR4MiBN2KJ(4 zg<>)iQ>}?Cf|G+iXG%rdpqWq&P6n#qVZmHjqHxk$)I#&n0u`V>_c>MYjaF7E!-!S6 zQ8WT$RHdyLL|xcatY_4@Duc)*x(I0|awazp+2btzco8b%!8pt+S)H^4rn%X^$lb0| zqtk@Is!>g&kIZao>E>KU0u(|Vmr|bm!(V#w;m@7F=XIw?2R9%8YL}v%zaPUPbhMH{ z0mcHsc&d5g)Q}fwR#q=Pg#>A=WFJn+tz;z!aV9T1PBv^n;vo4zxCXUN7t_e2|kZYnc5C{f*ZV`S^4RKUVl>Vd?W0e<>;!`%&yyPK7h>< z(4Qf~_@8Nd4>j}$GnU|GB&Po6)v#E!`xkP*jom^dSjl;7&1#23m`?lBpKeZ%r(9A> zIcE_e=561PCkI^G&Xa%hh@(pB|CH zwi^RWe;QJfrpu?N!|7pKu2Z|nLk$c?RSl_ex42mK*RLGE@XXGg_pSCWeB!tNx2L}P zg-iFn>iEXBN5A&v@$`s6g|gq||V`gu9orf5%;4`|KxM!V%pJW?<%&I0P7KM;#=<3|hPt7LlffL^B=ARD)Ny7xcL%ZT4l6 z1aVW(BNN4@Wfqvj)TV5zM9gBQMcuTRGfaeP)mVtNDhb(82fxf5TS+u~y3MOIy4pgZ zhB-1*S68cwtCNEQk(it2sg7D*&b(rE=?74^uIi?!*b#W0;a2q?uD8qI!1aITh5n3T z&h8abI$QbAylGXfKYN{LZ~aJQI(5W-OmKv1ea(}oM#qp6netgC$eAHRRwuPp%?F>c zdkh9U`_crkI72`n4o+I-c()leKxEG11$MSI5eQU>1Qy%_k4`o@D0b@Zd1UDPePD7T z0!7c{P{iO9Os)1%S64L=2?Ij2R$jk*23L3;DTxyklMp$@xiA2&KvKU9=76}77bC80 zNx%ilVC9s#5frX&&Jc{qb#xb}=x|mIKEPBdW(0+cZ^_+Bl)ae+u!vonmuIY0s-TOLBU z5*06#sf9@B)_!u!^aRbCToJ^wO6`)Q0523401%Srp$q)j=Rf+#Z+Pc>-ucco;n|zV zAN`GAD9?YRO$j-BU@wKEoN4F`FVu86J=AoKFTWPenmCrLkHO;z?{@b} zKk77@mM|_|LTEb6Q!D#!#wjfpt8sfw#A&fM%>*lD%4KYp>t^R1^635M!9Vzow7akU zX0cf8UAl8vteb8jLB{PSELw-zG^OPtq_#Lg%j&MXB!LE8HWj!NNSFgBu)7%<*o>^y&b%5Os(pQCT4}Hl zapJm=xtlXcgjmk-@n!yy+dQ_z**UzXljv;f=Z;r^1HHNp&YJ4$SheaBsKaDpW`eob zNk;8powr@DN3Pp0ZayQ9IfzO~06M41^`={Ax>qJh7=w7#!7HHo>;mmVj^M;IC=EU% zb>;<#$G89f=Ww(UMK*}8eMhTt)RgOw5mYu>_ScZ{OtFlAmaX`_y z;LyP)tD!LIL<(Cm%Oqa9)sj;5k;1~bwP^zoHESOZnT1Mr%e5NQ9G(YuV+lr`YoYnn zP)Gu(W$hL2B#fe3xLs0+KJ|4z5iZ>0x&P!Z{y(1j@_U-)-iwcYdGpj)7HwBSm^13N zI7?6~fHC0NDTH$K8SQpH@VEc358QwMM}GBxdEsNf)Yf&nM)` z&D^1BwLX6F*`2%YOUs?%_)yx;rqRaH+$nI3E9*}_@-P2?*Peg+)vtfk(c$4|KlZ!B z@vRu6jst}dV$+3gloPlICRf{Bdogo-!+SpX_V0aaV}p zF4nQ@wujfZ!=S6Z7+|M|tMlijSqw)vtxObCyR(0K^`)X)cav^irhaw)&efgwmZ9%& zyac9;uX-axr)^jItxi*1EDQw4baKdT?Dp=+dLki8)4{A=U*Z_X!<%Wj_RXo8(C$7- z*xb14kao2zjQ;4LjKh4sQyq_wG)lW#`*J65PIVedxQv62BbY%x93Ql+ot?YyA2uh$ z(J`5t7dH>>g5WFyPSq0QAkSG%NtxipTvMZERL!HS5u9V9rVSEdT67BCl9-_?F;NVb zvxLUs!|`Daje03k>AOwK#I9Mln=($-2W@U3=B6cy2Ge2VMMDTl61myf10F+UsR!*0 zbqa~w&do}{RV$F-bh|(xAyr3ZWQXO+rW`800B$}KF>$D-^?A9f&>^;G9jUW>_J>?oP(Dqp2zk z>Sw5#vv??he69>Jcfd&I7f_G+%rJMKMz>-XnBV-|fyD5_#k~oRT#v&{#AgTcfNK1% zsZzh~Wv_w}gI{scrn&mu957`#AP!=fz}bju(*?k=x_iw;m#Ked@7=5S{PmNsf6Sl# zPBIyDRFk>rjMS-|I;C7EvgM30Uc(byS5d(Pz z_!JMx;HEuW=Ec69+~nL-x64kd*+_|)S-sW=2S)6C+EnF}<3gngI>e*rp8Vr0nZi!F z)vfnYZ9)(-gK&jg5DPR{W3Cs`vF`%E?JaM6^Q$j>$MgP!L9P^)mD&AFG)Lan-omiHkLc&9vRHNZLE6rHrSCv1z4UY;Il!acZ06 zo7cncc{ignwcXN*^04uuXJx^aOCzRgs#Q2}H74f8BBZ94?O7h(G*tePj*?n}Ti=JK zHO;y?7SwNL`S#)?L%c!c8*|Z6t)IBMG%J3Lpv{g+N3l zXUmx-NNCAx63W~R013FbPlJ_A?#xU<2wsWd>cw?F?>W(Y5vlUaT*OIdz1U6$Sh2I3 zY~cWj_3Y^GT1s8kYa6G#zT!$se})~5UeQ=(R{onlb@3c00TGscE|2!)@fZ(~PxwM^?iE0f^$wXM+ zanI?M=eNUVv41hOiyjmZwXve$xkk?56_s`n4MXE?l_q10VR&XTJ5Y564~xD`k249=H~g5B}uO{m75~ zSgl!j{hQwM%m3n^J@d#zi`9+}gSn?g%kARwy|4YjANk2U?!3!^uRQpL&wupyDnd3c zR|HI(ljViG!qKh%;D*E~?Lu{Q%fVuqPD!G>wd;M9(jVTO`i;8^2O`SDR<$rd5_B37 z9V|lJEO)>m4?W7LH55ZA!*cpc181to?f+H}>1W!E&$G}<8wcvDnh7s2qkaa)uTfTz z6V<1f+04vX%lt>0?R|ur0CH#ZZ3y4$$ER|(xkJm`wfameJZq-+_^j&B{b}{jF%NHV zJ0Jd|Hnlnt0G!w;IKXxA0CtBU-xgwpZ12|RPJZj*UD+&ot2x}RJmN|NtMgh0jGSaH zbpjblMk*A9)SL>Z`KH50Gw{c%4ny;-M5zwUp{T8l^C+XL_5md19^ed9L~@I8vq{wm zflvZeDHcvdQ7{P#Y8!9We?Sg0ig1NPd}OoCt)XMj(FSqPl#oZ#kz(t_+AKM5$p)2$ zaS$KL3y;T6q!L}Cq>ci+sum?_96BA}jQf{uG_Q4!t?<~h1cCDQhR4>z0$SM0Jik#V zqO3X`-=gE2ZMPy2`{)!L=582!k{KstEM#nDf~5JKW4GMixMFTBv5fsx^c^4m z*&q4IpFKV~`MqEJS5JKUkJ6&c+Y=^^JNqPo83>J==Iu#r7P6Zhs*beiIE3xt!D7AB zHcj96^_lO7VcE62m+#8M4!P%k1NbzK_uT)w?|t{Xhtt!|<`lq%ix=PfgFk%b`DfbY zGKVy6j@65FJ3sv6fB9YSdgt-cQ3&BDf9hw3?dCJT{VPpiN1_;Wf9lg17R$zVPYw>6 zZbu{xr+uS+>N+P{>|bKW$(0vfl_iu(oxBXAmWgA-EM**}ZJCKYPzCG}r{y}xzQJ6J zscN1GytuFg*?4p?Zce-Xbz1N0*mKja?z(q4IgaadfBEnK!?(QQHALvvJOAQ^=cb!i zn&rx!tYnyxfJ7?K67JF@iHXQj%vC``WX3)>$Gb`B%-uyKMa`pT3ULisB~W=$x8i1i z7?CrF5I|H7DaA@fm?0(xshOA2Yt*x3(*j{>X8#Wno5578(mdlBt)TkyV+65QfT~$- z?*Ua_!kIE?vy}p8R4zD!xprQoa#p5N6Qe{zB0eV=YhHuBs9J^@)&G~=Uh!;pxXcpF z?Sbd*7Gd1hYtC*0FE=;OUC?LiXzih%!~64nf-6`C?lW2k2B=$c)wu!BUpdlx`KQtS zxkdP!&tFFq@_G?A$K_?wXkMnP1nPd<1W_C6a3&rx@a@0B?VV~~*Uw(26{l1X#A}2# z7)9}^UI~kPu<^Vfnze(cvnvRBoqf`6b}5LR-I$ELz=&WSQ96u9>z}aEqSu87J;iMkLM{xrMB6xL) zkQ+(nMm&?1h~jW1E?BS^fY{XyRtmEisBlMRvRp`rNSFh0{R56>ZWNfEf{;m3i_0A@ zgPz>V()6c&I6YjDqgi=Mw!KA?0Ad}=R7gT-7XXtD!{%uH+IPI}b>DS-<1Np8`H$nt zVYA*XVJ;K9f0Zf;O2eb_ro80&ktUE@r7p|`rLH$icV8nt_&D%T;=^c-uJ^l{?@lV zFim*rxgUD*`KQ;b4p~VWj^dg@RLpoj^>cgaoNJy=PXP)|isN|W#piF{y7`9JzBW%c zK(t)0zWK-_hc7(aF5227#T?9r#d6KW(=^swWX^fDTuDf(y0~~Lt#^*EzjW^d_uqg2 zeYbAjn5N0y_xJbT_KtTx^tnF~n*it7fvLZFwP>cr`gPy;-QV+l@7voy|MZhjeDCS1K#v4~1FosWs0A~RaORR@WZffrVlaQBbD%o-&!bAiKv2Eclsg)2bi*e_! zS0RY2S}E3c_3@L{?*1JQTs*gba(K+bcief$?)f_ouiprhm8>#9r7ji16g!ELn9JDb zaj0&#no4sx#ppT_xhg>fhu+XJu`|RI}wH8 zMT{G`Y01zDC}44kEP)Zs;X0uhNpz;^^q3=$vb^W*KXm844_tlj@n^pH@n$;a%wVB* zWo05FM45_7F2uAQ%LDKIi68s9|Kg7Q{mJp^Pk;Ak{>?wL!{>!ayL}&yNn*WoKmt(& z5{VFraezDJ!HK<0)qv~n&fwik)UEX7x=)!yKxmLhKyRyygg+-ZjNP^0?7rr0KmGUr z;rrhEj;q%;|Lgzw|N7>qf4^O>z#O{;Gw0Mk|J<{0e)AiTk2lw@zSyMblWLw=%uR;l z10vzJHCHz$qB8brwJXe~I-Q)b@N|0cN5A{q%fI?J@3?dkgvXzF@{j-U-|MiMbaE@E zHXPnC!n5t-*1^F8_uqSXaKOxMw|w%+$B$lmW@m3dZw^DVfCOd|k!lRDPeh2x;bj^m zL>;#PLFC}2XW#OJKk>K!tADiHwbMAf<*jeszi{#Qf8&={t zDE>?v z__?RQ_>Ome=)*tmj?ezyzkm8`pP@YP7>J2uln^;YisGgyy>2J9;%-!(Z&hF>lBTgd z(M$pe!bzt|%j9m=m^TNr-HDh&U^#mtzAQ<4zja3LnvlC>0J zad;WGT52Ct&43V#5Iai*)7fvSn7cIGtia}@boCdWsT^mxsOrm}P35i zZfbqsY)6zCdwce!&bS0l1gbn41|-a4b)5wGZTiOTdu-Lui`B3Xh*)atVI2m{a!1{n zTyd6Nsy-f=0zNX`J>>7*4v(bvv1LkD%_L5L)!_J1iGxvvxD7Y!HQG^qF zCMyOp67~$ZL#Q4+Q5Y~1bq0!)7{IfO_KeY7shc8Mm7JN(9TT_WSy13q$EN}((&X96 zGDW3M$fAyb8wUa4R%-h&)HtY%*c32T&#zJ&NXdG(#-xQ4CA zM#2up*l#qv^RN8;kAC)-$5 zf9;<0``2$=@7nf>IX$`Wdw=LJ{?)&QsqCy5S8pCX z^3WG!OwK|Q!*VTzXPgHwG+BBk+{@{j=gOyVH zZRs~G0`pR`jZ@Puu08wsj=zVWq>f8^g>d-9R>{sq-(JUN`Jc2xW0!^2^^ z^Zr-w?(9fxzWn7cec~g(VZ%vCA#YAK=h$_}M~8Rb`>NNx`n5Udwr$g5^~sO^!Q&5p zI&~dOggd9i649)F_^1EsYhUx)8`rOmv%Pd(OjorDy-rHFKU=h9+L zro^n{Xj93NxE#9mnmp z7a#q~=bwK1=`Z}r$Nu!+{UU}~73b1*K}coC8f2E6<^>o;U+}%ye?h4tIK` ztHox~iCGBb)eTweglZv)$eAAf3ITeqR4rDD)eFSS8oT?;3;UUEvECshP>3vX-Wckk zUKLtk3ZG*I;L5W!sLtni(5)DL`ufp7TX)ZIhL0`V<;!bjO>h2r4^^*l_Iw*B{1sOL z`Zn9opGgsUc`8jX1cEc_MB}zmNC{S7_h?BS=8P zbDt_ZYGetwFJR<0LzAIYftq#P0f(zQL&Q}p6~_#);-zG8F|M%;GgJ_&X~ke2y z3@`JL7Q&tx%H&)@Z5+Wd(ikW+u_CZAn=(`el@2SF~w(Je`BT(0}0n?!(fXcz99Hya%XiDF|OhTiiOQwnWYBk~-DC4d9R z7@CER+wtVMjD1|L+;ns6TI?2ZG^@4trw{(_uQE|;nr6L2s;HDcR~;susyzTqOfeCQ zm#n3(ZsZP~CJ7-fmylp;)6uOwj?By<5R<6^&Z!Bh~3B%&II$bjL~euIUAzBB70QFTp$t#NgY-@-F7$n%ZFX7 z_VHKbv+C6J_En?CV$U4zw;z>V)z9xN|J!kTXwj}`A;`a7G@(}%ebVe-_n5zNl zjLSu{L__qy^Tl4)ZYnsC0VkPH;vj+oWC(Ts$(7aaX9`e_-OacX1v8t2=FXq9*YEBw zHWC%(=4@Co?+{)~UR-@fBZFP5mr-2p_80-~Uo;Tj%i73(tkpqwi7Fx*f^mG!<@wsaYTc3$X{0;)Ki;Tu^a}Se>)(oF89jWJoiA z{ARoE*~sdww(4w-^c}ioR3)bI=9ORhAO8DKf8-svt~@s$AMRbcdwc6zNQq-ZEE+-# zq3Jp|C-87^qlVx$Ph}cI)3{E#@7vuy*P^A=lU@ zAAP~?GE9?>TW%I2fyT|1N4{|L`6s56Ba~r%;j)_%2QLN8q3xQsxpnoqU;khJ$DMQg zs(SsoCpizadyW7bhOw9(+^{kZ1us1R?Du}(_qTmNjKjHe=Z?3-^G|$hJh>IgycEPH zw4L_-czWFKUkHn}0XB?gMs8&sI5h&M7$ZQbB_WQ<4IDV6NGuMwJZz4SNRKO1q{Jai+l}SPtwM8Qs-bBqh>e4*dX3o|D8{r{*5r=% z{kS;>QR)`NY+BqA7Yj)(*AsL-+L+~Wusp&+EF{drOu>ONWi4AP8E(XLtx`x$NXb-n z>T8eMjGwDbd-YfiGBZEp#*l=U7Z|geAfFwF^W^7@K2F3lhmT&Kf6l0OtE!Bfn`%A9 z%&RF^4>zc-@_2c~G=EueK=riD+BIknVAh$O&Z%90`49MVBf=TW9BMP| z_CGo@cWTcp(nFrsz}oCT@}v2;OXGE|clyp2`s&W4Z(rYU=WCr_slxx6XZZTND|}}9 zgUAu94DAp{AQBiT!m!K{kjQ;Kw>o%^ z+IkUJ2P@bRVD7ecY0OF~wTVECuOVTh~x>yLXO6@-Vn&E15&$5JS^)2qaR5(M{88$4a)6W4ExPI&4W; zLXgzLDRhf64I&XW@K*~?nawP;ZCozhj7X;K>GsyO#l<@~#;M;n%QXjvX}8?z*1KuB z)Nv${wBGBFZZUXu@s4qOtbHGX^!@4P=1Y{vv{pQUQn z4Tjlhg?$ESCQ(C>P=)zS%DI`KbL=u=Zn9?#QkN2HGbLtn86qK*D+Y)Z%6Tkj8l#ya za_SN%A;hE|uNoVYHajHOB>(YP8Gu5{<1tvQEkP^I=7EtNu}i}13n&vh;0PY5 zC^AHEHZse$VdN*u*ezCb(zs1hgg+i~V`-s!P>2UKu_Vznks1-KQ+7-sOk4O7fDtG* z#M0zw$cBVQZHjM>DN+9jOj>1114317oSNAX39a?BY6KZ$Hjc$EPXa1h%m9cXHY`?jX>z~e;gXM(6PmM{h(XoZ12Cd7 z6UI4_1Lsg88W@sTW5-8G>-XNdLB)BGf6B`0+N7%g`h$Od)5kwJ%E=HJDWXr3_>>n2 zN+y}l4&L(F+yCK~yAG~@`r{w^{0HCW=j+@!xGVY0Bp4F7B2l|YL#k%dV77`1uw?@r z?~%=e&HR=c6S74D1@?%D8i3gh(Ij2MN$T=s7?D|);l-CeYdV>z#Kz*?`B2W;`;~Jp z2(#Jr;N7O0jaGbKa4{h7Ris=$?6SfQho;T8myje>D(Z_I*_#^Yxyv&XT{%P7mn`_GEg+3d)DG1lG>(78lPQwe4<8?TTXOg7dZ`=m>D??2;?+it$& zhEHdR#mZW&D`pOL9jXeYDpuBfF`9220RT5%)w*WKz*NmM#CMoSZU~1$VOiUuQNqhnIZ0kEV5Omw?rFIJ6(uV^b zZv{^kJwFNaga&Ilu^=}gSfd`ZeXZ!atPi#g00Ja5NhU;%>}GR2H28eeh`==BWXW|D zK$5mW+kj2gB7s;t+AHX>VZR`nrQ$j{HxWPsx0qISc+?O6^xh|2a>LvHBOSR5@*zU! zzL%QV)GR92=qfkOTQIUnX&ZE;>*uC|A`0hzWwlx*JeJ)VhrULNd*9+ z$Qe^Ug!vYzXt8E>iL?9fr?Y*W?pyKfSmsl6xg*7FVCB@1(2pe4Ld;>7OqM_cppzIO zAGz@^E4OsEY559<(%2{UGzN{76C%f{ac%$*Yk}0|G7ACe!LQQMXvF)^Jgc0~5+}h# zB-Ad;k+`00xqRS9Ba1PWJ>)Y;jvVD2*&(|y-O5I*DxxZc4#;KW6;KKF9L$_A++e6N zgy{sCM!WX|k;XdArt{hS>?b|_J6`zGr#|yJG}?9G%b(ZzWVpH)iP?EXFpbr8)6B9x zXP^1#C!F`_C-87}WBqV-IxK)(B%VmnZydr68>PI)5G^$2nOc7 zbH&J#%y)vtV+`||ggP6JkX=2Sm2+URhW#d@w$42%#}g}h5n(;8#)=l}!fJ?FVf zkWflp6EpiP)wvQX0AQc7bL2B(rxLZUVma4PrzHoOU6%V|$m~o-LY;c27Ne%p6_Kcs zghWF286w51(inh?(caMqQv4H^a8ent-+>*IDd4mt3)a z)3p@m$i9&wYo~vkEk&zQY={I(mgo#jriLh(C$p92>y{>FEdWrYEYg5XC{gJF4T&v~ zg#_&xfO1X{DVF96Gb2;*g@!;T=pCA+!B<2P@Zbjp){_HYIdIb#>-GBwDBc55jtGJd zO;}6IR~QiLIS?6<`4MsE2D`jx&I&6hrl!c?GBYx%Q5C#bRRAIrCPPd6RABGiUczz)Vev9kJI? z$7-%s$ytHkp(#1%iUB*XRV7uKcDNF1tt&SeNT~g2Opd@*4H3Y3kL*G@3*|gpStTZ^ zt1KU)qxp1t{!_p8$A9iM&v?c&F1X+^PrdBhwyJpGmM_V4L+UzTS)k~!yx!(>Ss>Upuci`Z|jAN4D{SNEU2xxQ`;YiFG+ zAxd4Yo^g&V90MSE&T>e0JOJoC`OGwi=~fKER1q{^+YQVn(GN!wVw}xnJ~6;hRe4dM z88j43BP5Zibqzqi7`kF;A{qkcMfxtW^PwyajEOBqlL!DRp+!Fs5y5#v;v|AGpGqCT zEE|rq@d^M)j9`jH=sY1Am?k%jSXYS1-m}Y)IibVsy~_$j&=5>S)hyxFF~k@(1`Pp3nzWQQpoz_r{F6IXaZZGK zFi$zn{DnMhd)FYB&o9L+#5o`Jbwli&>jxxU2gFRlBZ;xk3nUAf={D}{y{TmU8CE2K! zERBnVKz%wR6W*-VDDOGR?_NXlmHm?vNR%KcyZL}n4$ zH!_pm>$WQmf>F!0f@Z_fIDJRV0l`^?Ux3*7z9DdVyiQO z!UdR-)#wJAb}-pML@?H#5tsysObG;#lnTm+#bA)-UMbU1If#}Gk;p=2=$IKnOd^s? z%0Nn9Fmnz7!D4V)BN+G`Bq|UXqN5nq0L2&#QmYJoZrK0;V77rSLn4eNI!^$E#u|tj zxbRkD>Q@7qf>^WAq6)S=0D{HEup`lDS;qVJpAlkgT3OB`V)CI!VwGqT5im^;CXhGG zCuZP>Ba5P;1~92gR}6es)O9)Cnn+#dgJHJ1Hd{X!=kshdHdW-z`AkhUL>jJLapgaM z(i0wk=>GerlgW5cob%|%ef74lZXLQW8xFGZDj{d%)p9z2{3XwP$&dVKMpW13a8Nw< z2^ZaY*WHKiIgk~DMDVCKH)S@}eE5`Seb*1Z)Ga(cbRi}wRP0M zq^hMXvq8bW06?i`8bgetv9=gpJ|IGLE`|_hQ>$xYPd=+>n_5-iGR|@)0)!ZQ?G5x^CNFNVOJboZsMQ~#OR`_b4B zS4@IM0g={gPSfzZsi9*g*NM^qfP_@VhvvI$Ex^shK4+f+Bv}Xcc>zd?0Y%A}2`PaR z#E!iOvsjg}sx(GTut2MTn`ndW_p_B-X}Y70B3P=;6T2~~6d(~Y1A>WYGGu_30z(YU z$ex@Bb{#hn(hQMFGf4y;h+#=tDVg6ThrY(`q(>fT2`fmg+YclcP$WpZ;snYALXU~x z63-VC1JGN&+FakUFyZtS_15pf+A#_Hfl7FQ2QT5&uq~X^1QYiN^hktN z1T}U^O&-aB2oyn@ra3g2dTNKZ5KY<*0Co62GJ!b|WHxkZZlgu~yAGv1|;O!0)Ys6;ljl!GemGE!7-T|l2!(w=p6}|8hJE9Lgj&&^H@Wy1U$znuw$2D zm@9fkcEq3o0F*Mc$XcN<%ntxa=TnVA^RdNBjD#G-8rXwIF$T_At3)#;B0@k=W<*3# z?VtNp0Z}tMyqJf}vW)kibxsh$w5>5PiD}@w z5>}x;`@&~D?eg!Vd^p)!4_g~yy5-n&UH~%@GrKU~GKKN}v!D6xmk)~~O`=AL-nrZF zxT6vo?cL8lqdem*hpf2xTb}ut3m&~S*)p?oKHs&rcI4>#o%h~5UfbpJA+bY~jrH}% zJo)Lbxa#N5KI_cP^Wz@>gx!12y!k6PN;$2k>kWUFM7iN>NwJuc^=Ccqg zh%q5qGM_ah7KxyNeManII3AtznDXesINdY@BFc)P0ZKhjK13R7Dd!rh)P6(+M7CDm zHMKhZaGb5~LPK8+*}F68K~y-6vKV%@YE81E zl-3ihuc|4nrwb-QE=hczC^chMRe>nwadaM-5V@V&Z%l}qgq~(cu?MPj>NJaNhmDPR zvhXHO?%3GfQ#Gj|ARv-M=B7)j(nD;Hmkj$bkv8IJE%P$9cDea4(SlEMqUU_*r1z$r z?;5a8_J5!f{=xEl+IkT-LI>C$bRtkUy;eg?Z;_#%R=j!PE6d$a@b_KsNv+X*pl%qf zgU%7vfDIX&#GTFnCG-Zs3>|O=2xQV$_nmK0x2i2te3BJr&`1LSa9Rm@1R#hAh9=!- zoG>D6q&i*WQUXdQX`tI$8xTySa`d1=Ae=dgH5gzvP(YA~NX&`zL14lr%9$uS6eLmw zkbvH6zQ*+yNEP!vEM-!N2BOphz%X|*SM)4%@B^a^!wiTF2wY}~UW}C7r_ zE+-<00oelp#E|6Pg0itglg7*j$&eGl3=u(vj^T450wE9?p)ndE_VS zKk^foJ?lB2`uo5A>$m-`Y#qU3SWPxn6bSvw8X-!kBt}zHDUrwzN3Ix14D2%?)KFQJ zSWXAK_PIS-dGwIPC=#8|Fey`!Gc$>`AC7r2s3((HS4k)pp)rC^GoTt{Ge91LHhBuk zagwby6+|GPA-gnXDlvc>dymNiyPkuzjD@JG0!ZX@KokiYVp~x|GgH${vVehZAGEQy z=}JV2_Y6(j7L3?YUZm-CRW&eVCTra`q%k9Dwj*t8(H2EC_c}$ojiPQnu`ui^4@>fp zEm+YBwjdChp=q;2Pl!!(^b5rsd~o1;hrU6pRe*%eR-+y1Zw~cg`pq zgr)i$t(9rhmW4@znDV=Adyh#>m@HA|5zvG|YZ@z1E>i$dbb?-hodrsBOn?!+p!YgA zB%zG0LQ|zI;E=U$2<$)!%|I~Hpv+>KX=KHWP{Lfvab9R;DuRX%)uBalip*MTx_Gk; zEoeRS^%O_L;8(JERICm>&SVORpvq1OGzz)oV-4&fl`4b=4r3~dz>rapomuj?jatnu zx$=ezh=35I01|2dVj#~_HO`J{cA8j|ICI)Ur@dHzi)IOVZKXNEm@FBdr7?&;$5xxk zVIqxzn8SRk63KfmhKLlaEtBZ85wZ*AJR(2gY0o_W+;i3s9X#iZ{ZD-AGydVG8;}eX zTruJ-BVvsbQcbnB{x6{g0C#zN2#Ov0Bx_sJ(; z@{Grve_jlARt#_a%2z(~kq^RbGZ6ZLMycxgjMw%S#js-@i-^xMM^-v2*Y>h=5bJz(4-toIHrRi`v!4AO-}>}3eeu1Y{>TRo z-FU*(&7;a{ zNf=iIRQzzv#UM;JB-8}VE+cY{d4)t1U5G210U)z8A_7pA1gsM?IZkS;5^GgKX3D$) z#By$p93dO1#s~(SWk_ry662fk(s~a&jFaTOfBX8bcO_wTA%C1IU|b+sIf*W85)wi5rU9K z15#jXJcK&a?ZlRWcK6U=HZ_d_aG)CotVpDh8f%Ws8b?tfi)2yJMReZk^m77LYR&~* zCS_Wa5|alE*n%J%`k<&h@EKt}5gU@vpe{vBK+;S|B$sRo!Hl(xR2X?Lf#Q^yqubAM zilPA=kt3}TiBuy3AToqN1+yoq4NNilZ3$Tr%FP!fa}ZURL!5y|$X5_dV~yDWkj+9< z#~A<anwiX|v&|zK zY66&UY}|6wm)57#19#l9=|&5!thM-+c!UedPV`DmM=~=Y2ki z_1r`eS*2!QP?1TfOhi;Lc^Q|zQ)aAT9dVjUGp>z{iW3&$t+{^YwHK416)Hj?yLdD-jTQnRvhzTs zF-l#V86c$*P*Y>?Im^&Y>Plnih|fsW)YQ}zxvlyNC6hmLSsHhM)Y?j8K@BSg!OSFR zs4a%3;R(IDQ0QxWVbeZMI8V!*i3 zHv~%%O0QS2NYR~)Fq$#}kZ-x;UDLIlH$`f(puS9H(`coZTxf`foUE>UU=AuKqY_=% zs5EU=2{cr6nN8bDFY@HoF=g83|Ej)RkC6f>#Ck^x;*!L&wl3RKk)6} z{XMIzyY9R9p7;Oh+iw2s-)DppV?G+kYA#jHK6jb(qxS8f`#16^(mgfx?C4ns(Dn##! zoU;fV}=a{_# zBo>OsrGe)A5;3h^UnkJGtwuko7sVcC-Zh6$h7ND-SQE4o1<-HdDlmdz z!hxXEGfQ%wEpxH)_T^^g3HqNEwv~8eLTIhBaT-@^daa0J-q0A@20Iw0%nmNo2_UK^ zpkF(Nr6F}X{9qO^_gXR33N8sP7_tHp2$~9d!3;szYJ$cr(0q|*{Yj&ckJ&0o&0z~& zrha5$&S7qx0XYN_KcZL~AP_4!Rbw<}q$~@N>EsCK1pqQ=4Mj8{3#^rc0HPt=jbV$> z*o3?npoVistRg_f)s_MoWkd>fna0Ec(L_NbAp{zr)XuX?63`b@1(&00!tNo~CsQ1Z zMkBoB;!CEpnGoqhkS@)UL#jK>Ok2=J`(=4~9q953k>S zN6rMqp{m%C&j+!t3=GYXT{c`hddDqV&&|xQ>~hXY2oh>43IddBjzq2)7JK$c9X9Xz zTC7S2@Z(jN7aF3)T9O2TNHb+`>a)BN5ez|MNS_|MM)XQTG*!;MFNVY}TU*P9yUuyc zg|o@Vf$Kj>rm8WNrOan40of7zj=a%ma5o}x4Ly$7wd6vT5G>RHfWCPkh$gYzW~oL> zxRZfth?ZsrQ!e2&n$+akBVX!yoJvrn#07Wxw@bQi@O$4TxWZAK=NttGp8Y{p> zr-V8w;hsEOb5m!sVE~3nOH#=stq=;%kl1Rr3IR)65p=muT3y?QGt;PWw0+t@MXLH) zOK2c<#il$L07~?4QZ>X#IS{i2OmqO^)CVF|(%N_!{K#VMVhPTv8)BR%O)mfga%74U zEE|~1!n^`N8jL&yBPVrW(ujq_7^^za5Yb4h%;pFX-B_f~WDbBh7>O}R$&C?;X$&Ye zP-?U)Nl65T9zcvd#0mg~3zX71pD;i`0tx1dG(Z3kCAst7bIyxZMFyPQUz4s#a$#nd z&Qmqn%=e!C#Bci^9*pK&TR!vEWDCtWA0RWB5_2`#gc$O?@Q%3{fC@UF4M%=B^1~Gs zncaU6XSo}WOk;vafe0j;#%#1^X4U4A>G}~U2I(5&EO*&3l(TAcBMrok_MaW56RAtB z17;Z#6|1|nsthzA4i4V(r8~d;**M*F2xc(YvmaHH$7wcPnQyL7kKFIGA{&llH8<6K zwBqtYs<~g@)jgjiOaJQePkr{6zWk;8Zn+^=m4yh-ke)d10f;Vb~Lu5(HPoxh_>0*8#-*R zlNRYp4jur>0;xw-!o~CxZUX=k{k&t*^vU~8!o^N>-r6~%_9jq96N8N^7dK*ZnNG2_ z$?AAMNuCT^N)LewdO&gzDXFjkSz^65V^~07h75`8mA(unh^UD?1qLQc9yBrtuoqy` zionzl6*JTbsS^f3py&rgDj^_y0#(jH0z0p14iQM}DI)-93QQW92{nj11Z6VJMiOcS z2IR!ZvrrL$x`IKP4LLP?U+g5+h#90QUsPHjg0#~%cnIuiS1U=ZdrR}?-kG{&SRhQ!%ug`G#F zY&@2-1a@vPl&Z{z127==7S$xO=X|^?&ZpIM%MFIp$>i)OKJDV?d^h^Rk^Aq>GLJ~r ze3}i$Xuk#}HbQA}bdkJTtgnrSGdE}@mbN3ez( zm@eWb*&?zd=0^9f!GBt61Q9W{vq)+p&E+6p%$nlWc57>an+aMY{=20E)PSm8yMr^Om^Nm+&U!P!+<)N+n8vv@$eZ*52_}xC2 ztDpvnE!qqkQp%yH|Tsz zH96kkRVxe!+@bK6G!vQ+v-vfdFLh`Pnj%_@wwu-SjlGwxz2M(YX2IY8dFM#MEv!ry zuzT`2WCf>4UQ31;u}C(q3o;K9kTY_GM(L6>fke?s`ZE>)$dXY8bVPMd4J6c>v^GCb zAdrBFYD}oaE=^?f7||?Q+Q{Lx?evpO?rJ#5y|X%GL=nBHh)9#-)9Hu-*lSfi z@tK!j{`}{M&5g%D`hsu&?(e)BSQt9tXuY%=-Im;U7QzV8QCS61fp`86N?@ZY@itu9vic#YVZ zMI={mO+sDoee9FJrML5!dlwzgtbI-i>wGC@_RP6M%r zDCr9i$e@w9QD^}XFkt6X-x8S-NYzX$DPz(#Bi_}Qy zEdyPCPsDcXB*vQdDJ+OL?ZKpbLen?kMi!?X#p*9Gtyf$F>@?!W(1TDO?kE#(H(6RB zGuHc%vG-|roQc+YZvh`Q!w0q)vqEin^M(x+-{tp?WKy}^TYH{7oP2d$-z}IydXU+| zZnif^*0Poo6JI+8T0<7}2#O{MYQ_dkCWdH62!fVi@diu>05efHEcToY*%&0E5ww;} zDgQPLIw%?l=1S~!j-X)VpcW*7j4dJ}p(-!{DnK;ntV$>if{|9jnV>fWGGmC!-ZUmd za*QQ&hM*C>89A9VLU0AfIiQIjVLdbUm<=#i1ko%A=N3yCtg=i(RV#Tm6C;N~Km%oH zbI-A+BAR+MGC>WT=O$(%ik=Y(MI@y6nc@LPA~_CK8Olj9Sjkp*q2oB4&5s_e%b7X<_)9K(!4JK(aJasH zWHcJT@WnrT_^vxX{TJ^{oI*DkOANCk2mR{4ANuD%_sq+lIh$-c=g&L;C#w16hHE}F z9IYhaB9@+u0r`vxMWTif>p+CF$?T$U|GppliT`c)%ILzUKK*UK`|IWUefe-aTc5i; zCs#xh&I*aaRI~9Ifxu@FqhjE!uoe+UmjQxG;u_{)N=B-HOk#=#o zhygU|G8#bGI(qZR-owu4!!aUCU1Q6a1^~j=FBHr~tR1Ln2RM>&BLjej(BxcfR2-9m zMmmQrl`tXi*evMH94V@`$yi%|23(ltw6pK&sX87@f2_Y($u|GCCv?D_9no!u8z+(Y zh!#r13LO>1`kjBoZR^d#Y!BLr$2Qk5T(a9P8)!4X)0FnM;79iL;=xRG`zM1PIma3q zgVQHYu$bn~CC zOmBrOONgkYYrPTIT`YIqTva3fWq_d6aQ#`5p@$`@UQ(c>1Yp1jh8C&)*#KNVTsi#N zyZ-PO3#w?m*L21Z)e^*%(3sT4m54b2dYzML^HgArs^|roH7Fpe00c%7@PP`aH9<5$ zAao#P8qo*x4l0HKCTgmbfhubx1g9F^uvVApBy)Li1z99e5jAE66GJ3VaT;l?<{U9N zPw|M*pxt*m!+@Yd1ra!zL|$P+kj+#cSqv@Onxh7`+Q3I1keY%61TsZK1)>g?+&R0a zhJLZfePC%(CPV~L;4{uSw+g|)IE{D^5K$s6q^~zQK6KaZQ^CRReK&mm3)g($e{LT5 zidJQqY{qh0PBx{SOF5TNSqNdaWid)!YK$sTs!C%`-Y4o_J=utL>4zg`7w5B(Eb;0P zl)mM;Kk($IJY{qJC;-%TIU0@EH#fg}%U1^D6+~c{ndyA8_2g$i_j`WuMO*8K%d(u$ zXDh=&KHl}^>pu&zO3YmHnW;MO&}AB;#u}Z|80S^E?DFsXmT$Rab7OPY-o2my^tJcj zdeh38XAai(gt9aQMvGO2#OT;mHP(m}Lolft1#ndfwS-#gN=1AzFcYcEnBKcYRY9;u zxdoJo$on)#E1{BDBS6xbaX$BX#z-1#ivdhi1F2!oHD8w`(WTI`Wr&%xoPCyt%QPke zD*zHXPu?ebrK%*;>TW76`5XZ?@Cq1Mqi?P~R(m^fPmJku>|E;_$b~xR(nJ)8mOcR; z6utu|0qgT1PlAPFjoE3>C3R<+-|^q^xP*{J&vxMuo9b?8)q^{6v289<&;Z{=4Ugzp zIAvk?(Nmdhg%I%AVXM=qD2Y30LeMH3FNm1whehWB8Z|dW!X)sJq!c)5ym12&ndy<+ z2h%$|gvBNf8`*YPv{w6S0nig2qmHpo(7t*@q#*;>wp^1|K@$0*grR#V$9g!2GSDz$ zk;pAQfipy~h=WLZrZa|^mSIB%W&}(mdQhNbwF-!+Y!QHjazG-`Mu1oYnHrE988HB` z1vCI;0Rkjqau8IZ2G1JVF}MO^$x^B-0MJy8JQ6ZVq!E!JVW@<(LL@6U= zs1dV5ktj^rWe6w|(Uic<7bcOCNFNe{im@RRC@>o!SxjA!W?-8r&94wBlIzCBAE;($ zL}G{nKFgiO2qFTYD4rZe5oXGAlbB#)Vh6GQ$p8JDfB)V;CeWf77OQ(qMant*Jk*uO z+7Cv=PGb!K8f#$onb$gSQH1H%*3rY`GtLQ{>*U;cZI>ZV*AJ(XAk1g6D(ku~XOjl= zRRuuj{Cu)CJ9w85yX(o8AC9x(*pF9=(U<^4wB5KXAxbri>xZ+!D8@QgrIz!2byu-_ zUzluFn@1A@U2SdL@QJ^9^0z$m+;h+V)V0^%ebWtLJpZ&jGTCoI$9Q z$-Tv>BTzGn(F`o2rVqpnh_dmT)blW#HYp@sF-QggL|K*rn2K7gRnn9bfud?mC7w#? zNaENlhg-Z`V44Z=6DUKCrUI;(GYDx&bGgn+K@aAHid6nOD+SopiSvNybWRF^2CV2wYAV1P z$0@o@$SG(PaOl`OiIPD{J_D;6RFsW@5h8e}n&GVCF(a5^#KM87)PQV;jA~|RQIQNC zfuU9mUeHDJN#G4dAQ|BQpWWA9C3s7i7^8;%gsVnpOv&CS&110n}z)nudCcg|%$@Xs!| z@RGxa?u+v&5`#n}1ZE47*&(P_vw;4*$36M{N1YE~yLRus>;6L@_~Sn~df?`KFa!iY z9OdIRlz8;Wk;gvy>5n@9{MZ_(e&j>%|LW&Hkq-vseY)H^E3(1J6-6j#^>mAXTviO$ zb{)R!wl99}x*I{B0-n8|0H27FX3)GDHCh{WtHX=ydOh6$KScyFhc)v)xsYP#(oCP^Nj z{EW2O9JDnVJ7xz6Dk^og5L_fq&<&(nB-56n9--w{_A0`(Y&d9;b=yWIT=2eOk$nq0-L?Q)Spq$|G9Px3WKK4XHfh(klRpxiP1``ERwuGmHt3`bdaRs94_3QI zZo|o;M)Rj9H}(i6`kfcJ>88vtSyUuJ zX3)rE3^Rv9L}p+>5p(ZUjV;zlfD*_8WJ7R;A)(Z!>Pbsf4JlJG+z1Duio%KLuAFra0?rQK=kh|u0E`GR%aEN` zB|1hTjlop1!3e;@y!6EoIeEV^`wR@yCMF5NGch>_07>Ho(OL*435a7iS_5j0SZ;@b zG(0?J=ZJlmcFkJ4USk^#5<>!KQeBTt50*Q_@zyy{x9O)RrzFQnK5<^PGlT8}DR@ja z-v+kmspcPB%#;#tr^nbS4-jDwhCW43dPhuLw0>K2Kx*?f(89yAhWo zQld=}1G&UDGV*DVxy8L4GBFwvAQ7+!@}86lk+aR(%OyX0_6z>i(OW(@+`JhmOXFJY z=S__OW!u^%3$2TY5JYSKL`gnZksASeNd09YG(&DxqFV{HM44x2YQ$_YDlju5q`sMv zsc@m>nWKkT1u)7TD#W?DjERKC6sHI=^1#I@5~&-22&lAbX#(ug>SUozL;#qC02zcV z1{@fBr)9H9xBF2;PBnA~7%vdX%QF18EvfL%>pSCSe$(Ie-5u#SLIVPXA zE|=7d(lCLVgn6;H3jj6LB2nrZkqyul!+N?&>8 zj1n{e+sapWp>w0vT{r*T zU)}MAYtMSzg>_jTIe3rL=!?Ph@L|xHjaMy(u(gTK4R)VN+e-gn6|p<=4>#{V|MBFrqqpCT&Pj|4>VTa05fRK{RjI^mw1Ui1mVPiyO19~n z6U$Q7kdR!~a9dO@rlrb(nZ(fU{sBUA?EhKQEkF53!b2tVh!Bel(J9^_ng682SyQUr8 zqtNV}33@0`wBvWvUcufFgxY-9RJ$Fm#rj=`1qcpksr>8YFk4p7BWeG%5M=H=X^$CY zHA4ba(wG#|Q>!#7Q1zZkP%#;S5*R>8W*ypaFx!z=?4WrC2uW6qEFwl}th&=ETuiky zp%SE-J5pe>09Jc)^P>mWZ@$*c#HcWIiQduR&S~LkykJd{6|*!R6*2c#HTfM`(UVoq zD#2XQwel;3774wA05^B88+tj0%Qi5s(!en0lR>4JtRz;ubcYjC9lr z3*|mM?)S^4&AkR_}=-EgL#n+cI~wgrJ8FDNN6!2 zp&yQhd(RBBEh(p98p=7MWusL@6p6`jHI}njPC3g|)#|F;JUTk_Ttb>1zK`+&8ssah zrW)rHB&V@1R(83;KEHw2BLX*bO6s8fpHY5#=B z4*BBgO7q=pT7Na|I7UE#W`+#F2x7QR!=TY_1ZYh;+EmfjBaK*QLxFE4f|F5XQ#i*& zId2CIu=&*t8`h~Lz$jyb^{>@m`Pix*F+c2Rk!IBDWm>z(Qfg`Y>D@%iFzFB=0jA;A z#1?P92!;;K7!{JUVA9w_LxgCKK*@1RUStt01{^pP^m(M5ts){5foy1D-Z&ClP+($0 zrWjN(b6O%I4`_s_fTS_?pCc6rmRqHqNAM0JHheHz=FiGqXBo!rKWsjlk|zHA3wl3%VvpMfdHNJs_{W6)w%s%e&a&IS^KN+e<; z)vYKpyfoZfx5(|i(^F=79Qq4Il*n0^@+srZy+Z=J-V*fG&U<-^QCQ$|U=nuT~tN8kfQW^#$cKrK&$k-*dv zsMX|j=UkRk<^j+|Ok%?=ZonMC)M#C(=BDH;0Kq>tGk`&T*gg*?p?5lH!6>-{Ipel18qz6mN(niJ(b6=p1)K zTPIq7k89wkV8`!Iw2cSD*5Sy*luZl@D8O!gsyb6^Ou0?Ht%iXx*_8PsYJtN=f7q=*bAuHJ;fnnb}+0Wq`Ja*El2okOW2 zcvT{+LRm+#%w~vS=!HgT(aAKqkQ1m9tEQb`>Iyh)ygefrMmKaaPk?(Ps*`LRV0&^m zbBqCVQFBoDPkokUy#LIzLI}rzqN(tfMmP<@VnCqBea81T-N9(9#qkU&0Vm;d|cI{!Ghv}rAY`9_o z09mm@gt0E!#o z)ZXWuWyu3eLrex;P0Py~$wq7hq+03orr84RQo(KAn&6#NX0x0U@8zF1r$2z2Bev?s zr|tb3Y;$hvYu}#$Tes%>)yy$8Adj`c4^c|-T~DIbLrCYHs2N*rMGIOwX3|$kvrY?2 z{!Z04#6_Cyu|hkcm}u;e;+esG4mALv2|>h!dN1Z)t)u*7do?0cV~~=}KiUa0vZz32 zKo*m+7??nhc+*Zrb&@)YfP%RZrzuTpJp39#+nyAtZZjk@LlEN(z))*!vU%IZ#k8v+ zLQwK3ksts%KvqM7NCZZnR1DbC_%5iaC>O+Rt{|;sa(JdADQ5)-MMidNgw8vtEY=9X zq(^lRUHE;n_lf19d&aVEz5wTgWvnHoDzLR+P6JAc831{kE3moDX{pE&GiPXl2ipule_{{E_d}!MUHi?lYdCSlyKk zSKMI8S&^^q&c>^prM~NMxc5v#syB|-^GPvU&GVvR0jg@O{b&q`TGxma=Cd%LN;#Lh zc7w4m@@!>wzJ9naXMQkB^0~39TrnVWF_aSPycoOTaCYckP^Bz4Gp*}l*KS0rH#a2K z*?8;*BMl+Wwo?6z%vmv#7-KmNRq3*Vv)nYMQG0gGSwW5^gnF{M>%7Ogd@$QMj7aPp zd0(y{K?C-gsiv=%nQ0V@p@FZH054IRJOWiDrbLNhPP3+%7<4h3Mr%Bb7@cpsZD~j< zAu|pDHP#Y>#@OhpcOAb*KVY%JZg82T3EWuLrGzdZonPG}nb5bf-MhZx*FjD{CZ*z{ z&xsHFsBn8-+_P;$LVBM^o2+6*D9b+Qe%knUOR40cM4?VLXA(t6v@#YS{KZ4{cD znTV0o?M*d+L>Y!@%(kBLleYV@bpMyg=gNgru9OSsN`+CTlqu!H-pDI@MQ`X7*qR~X z9@b*03FXk(%2KuiX=#dfAp*g$&^$l@b5I+wf@|c6L8$T6M(pn#nn4D`#cVGsG5|2d zR>EGPl{!*#sTCYB2LMJ@%s?esQIpm{4pfpaBZ3KKxy^tb`n)RR#u?Av^^6y7NdX&o z6f!aAfpcKbs5aYRh?C0r;wvutftT-j?33?5T8BHYAGz8%2Mqy7jN+^k8h|NkNFw!- za!kSrU};-HAO;wqU<-(fricVCYdW-u2Id$Aa~1Vab+SDDQkq3pm1xo+>DW_1!6bXoe$Sio%bKCVv}J2ZZe2xr z@&v(C&*{`QW82{-?e|E(4s!Yf5a6+8$}dvz!%y_xJn*){8G0s4570fvUTK}CXRR}7 zpsr8cA6)H7Ed6yx7uyotj@&fO-UT7a)LJCEnS%vG00GV*=7+A&;#Lk7XiB?D5yN`^ zE3I@w`aF~O!w!9$MoH2MBAPNtvQldOvW-9hP{4DVWkpo*WL+&{POFGc$s<_Aj6hjq z>)MKl1f~EaXn;&+2r-$ulbBK#fY?IX6Qo8ff;kALz!;3sz^g^F7y*#j8e>Q^@}!lK zuQdZO1#((x^jrC(&U@Y~&VAgYhvz@(ws#+Nhd+Zw9%%rOt001B&dNFLTH8CwNEP#4 z`zJUW6M!kjIT@CI*AN5=%?OndM2*0Vtxo#JU_hV>;Iyi-C~j;`EyfheWV2(g2 zmnaPNv6(%EJDL5gsj$yc;$Qr?|MQa{de8jGeKzll6@vzno2CEoM-vk z?n*?n@#M%M2gICh-TO5F%0{b{Wm1)@QDdk!j=Ewn+A zm*;7?OhwaUK}FIX8snrUhcrz!ZfP#9youCR5^HPF)kYXZn}>HJkJd;DHTtgFNK9Zm zEeQ+NTeagBbdOMx4zy4?Nr=#C?7sfvWqIqmP1e&kI1Ty%3)P3_^bwMQ^(Ea;c!GMI z&SX&4)#k9>h@=Bi6A|SBwGg%`EieABTZ)>8S_H}{?7Q=WfPgMHi?kSC?VMeAOdU5~ zv#nrnZ>?{LIiyI6L?&#e$ju4{Os0sS=o-U6RBdyZH7r0yi>ZEBbcRSKtr~D@4hkVE zkhJv?CFfB?L9f8xN&`}G2nwwjy#fIdg(?mCAsA!RIZ#n@kw7D4NZ@25P>3IsMU&u* z0!^HAK)!aXP82B$uc|0fK}2g=b@Yah-8SB(0P`>Z^)8+V-iw$;M6@~Ud_wyNumL8? zfAas;ss){b-!$LsgY>Y7#7nPTsf@Rj>6c;fx{+;!yk zuYe`NHbWxLbB#f&(hbJ3F14Bu_ns-S7PU~$opYlz&ISdI0hl>2TwX|BS%}1p#8Q=3 zmx&Z;s$iPDpS7wr#zO~gz3(g6BPO@f2JB|XV492oDfK{;5`c<{Kz~GgVbst#q^YV& zOyAWsJw%Q3wOD6G)M@W6#vVJ_8R*%WLaXQvV2>!C-sN;|Sh-z=xozg?8$UV@$Z1&@ z`;bc`Sk__lw9rF7K{+h)q36_t;Ac4eJ@`9!RDuWPup!ZEEOE=Y@5SRXUc&| z?Du&8+GLM?Lv0`sYRp;_#YH;OWU^s`254ysI!RFr5zx@Eq39&BqlQ~*00`t-fZhO% z5+j&A03ZlMBrrh-KnyiP8VVIKF{CsFsz#KkGT@jHG@&yJX6g!5aVdKuOR)!u=;-Z7 zCL%Dr^Rpi-zIM&3pR19l$a(H$0#c#Ng@=BAaP#Kt>RbPAZGOAUGD8M(CN-J@nPOhy zD(j5m%whnSQ8V`8y3ZcWP$K{mLb9+QoHz+sW?TIpeKzp< z0FlfPOwoC*YhoA6nac-zpLp^7(7~;H4}gO6z5&wm0sxcvxW=e;?R-|(m6}OehS_AW z|4hn@`O!n5#)E-Mh~F3`6$7VL#y%&fy1Y`$l2&PpnphS+yCF$p6pPr=otQokVW)F-_+jC)2 zOHA!8rm747ptf0xfZZT|r-Zc-JvZoC2R)Jr9kw&mThPBz5B~ZEULIC4znD#h#Y%fx zYWW^#zQb)2A@8Ki`Qtqy=t2;zE9kqCy$Xjl*^g0hLA0~oNDhztN^g2ZNuNyPw(Ogso+kt!9os6f#;!vF>$Tf;CTjYe)v zGx*AT?)=K%4tSmyd5jSWf)Tg!m=z2NJub{=oA=zA z4M(mR#_1LqXbhw|0UF`tzI&Z7veC-c(L;M?OLuQu`$YsbR zbrtJsHk~}>d6)k1kNnuiWct?M_z!n{=3~Xmnja2bKG3ARk)&>!**Vh;Tm&Q)F+}zm z=Y_-&%UL#B1yvPwJ~IOi(Il7(AQ3w=jWH(eOlY>vjYCAEs@gg+n_A;jkkkiLC$?Xw zcQ&4l%|*K_Z#zfW%L~@YygZ_-*!2|*7d`BU3(YUGe9IH> z`X}vJte&*eWFNrUA(q(XgQxOZ2S@a_WbuvS%7)qg`7!5K&s0SPcea$OgrxXPc zg-2#{iX}Q0AS146C5yGC9wXMIb;KNj46!Kh*~l;4`#nFi@7!~5{hL3Z-1t97zEVsb zX;bpR3@DOT4PvV%vopWryzl+V80G#C{g=ImKY`ikK`%u2P-~FXKO_;gs;bHugUj5W z$6dU2&wCt0sts4a^@m>Z!k4~$Hl4lek9K|eBku{b zDLHSdROE?H1qR5T^E?~xTHSZ%(L4X)FW>j>Z~d<4-+tSzpZ(Z}hItOeQdg$x@-s1+n>DyRW~Lol{zNv8}fw^@L3jfIC& z$)Sp(10zHrjL~u=hgza30#rCsbVTfBj$oh>k$@dq5M)CSoJA8~AJyWFI*whKpqVF$ z5D`iI~yI*|PW1d(?ncjET z?EbsSxm2O2TEgWy=L44)el*q?!(^+TPu3oD(Ut$(FP?kG-o1Nw<>TF7_{=8;unM=+K?D@vT^^NcO2Z%Pk!vfw|@5TAk2}d-r9)eTZR%0#@Y!06djQBGD8HVoV9{(j5b*dvLixKOUV=v z9U1_ER?dQQZiZN_P^`6_DHn`@S`z|*svCxAWuP*klS#(rAd0!bqs%4%NEUz{qe&1$ zujG|-04l3cWxMMd4_@~d!^2;8-V1pHG9XA6q$&vHta4Tksf^R3_a7+_e&zc7A3i+d zxuQSuiGL`Vdp|d*R8{rVZ~y*(@eBVp%iJIS?r(hRU2h%lJwv-~7?Z}Rbwx-9ViLfN zvn)f4`sNHt)VYU)_aB?6Yh*wE5)V zfm@2TJ(T6sL-!Mrsn+E@VKOoK+c_6Djv`_)UYp!|$DjSy|G}WU_no=>QIDM-K3HvS zl6MvYi25v#F(8r43W!1Kd8|r_VX$kjh1%3O9}uI8gt|0UaxM)4r|$!?YaM@}(+TW$ z*o&DAGn1gliUMLIp|>c043g=*S&z>AkiW(!kTp>I1@-~4Z=vkCB^-9}orLKQ}953%qGP9dZUg!rM2eR+L9PA`G zOcXhyXA8J+dZLA#M{^4rk^rGaG)dka-bw`)@JgN`lEnn!Xt!xVFoOs_y>v|@FH?pH zriLC79Ebp$s$#AL9%@tt3ktplcA!cmW}aD*fIQ1ofFqA6&V6$T)q8H2p6CgPYWLo-h9;aI$dGmyGFY7#5sSOO2P|>uJbhpxs z2qFR)`Cav$8=rWy16v(}aB(tM+NmXXGvw91XADQqG30}hgix1LLox$Lq!LwC>)J#e zjUj0gggP6Jr+0q!-T&=34&Hs`=FvmfzW;w#2k&x&p{msLNtjM0*2BGLp((0@S(s0Q zZ6U(SIp?#_KtLLkssxhhEw%mR+I zj$D+ylF1xV5h+O&aIC=UNFEU=)?k9@97HvWmSq$sn_Cmg3Uo$XYhj!#a)x2Ogtd#m z`w7qaPL=qj$>x#2y?vLrzU!g@18e6!diA`=Y}|2+Nz_IUQ^`5>9*HCdl?aH$URBw7L^KgUUNZ@^Blr7aG}?cr z5o%cip_%|#DCZm^vBN9_Vn1G~wl?b7G}$Lf2t?SJ#F{1=jKqM%dn&`*Dwhn{#QY@a!@(?DwK0D9>d zE1k4J8c6Qtc{@F-!p9o^sRD>~SbUQ6T4?7&GX+WwTP7J7bj{nIh^@7mdSMJ|Km@7= zf=njIz&i^)OEN(~1ytZP#3$$t$Xj5o1f2l~^a#oj5C}CI8i1142JB@n=!J9E(hQi8 zAV!1WcV${qteP&GDWG`^Dsq(0!N-3)7b}~${QaQ3lh^|g%bYA`6wA${Wm#zq_100N zq6RZ?1XAc`$>YjgZEIvq;r=YA8Sh8XLN*LpD64tTC?3h;M#LP!&?NO#1)Vi&_<*KK z98JMLq^{dT$K2DJkmcpkgExQbnp>{@o3M3wuxqc05IbV0D(IZ^4v7uSk5?%7)y7d| z232$!B49mdG&dL)tGn6xSk6oY2|_s^?LEs4iuvY-)^)5aOSHlmTs|1=J+t20lxl8f z#FPr;Y&c399TGxX9yl-jXoa(^o^DlJ8!pcc42ehk&yH1NVK{fJ_WClR|Kq~*EjoXi1P^v-9su;LwK|`WN5JiGr*vAUVBcxJLo#dK z$+2nGPa7cwT;Mq~1OOE>MIwu2Nm>h) zaz)qJ!D~apVGy<`=#71>s`WTl)r^5Hvdj%hi3Po2q38{9R-;~Y#f9Jh@^dbF>SpaW zZ@YfvqZyzI5D!^44W`Cw1QAhM~~k7ysLJ7%MTn`pUKg? za;HPxK#kriZ}W&n;DNU}f(m90RD~HjXE7KcTar9WURnuYS=uD^kU@bw6(wBsYENPWx1d1vMYTJxr(vMA+PxK$Nw0DVSVCW5j zK*{Pxi-VjP2xR~%^@|}oo!5b87ktm2OP;rN`;D_3-?ai8HI1wpF%ba=z?s%y>hqy@ z%#40G1^~q@m_y1K>N*>*$dT%E|3i${#*F9@Ip7e$9K|r1j-K#@M?dZ9!$Ceh@*Vfx z^0&M4xnL%!2!JL-IXb6ZQ{Fe0L(URcQqTlV6&-1fARSrgp`M^qtlS%XhF#+T7Xv$o z>?G7p!`(YDl{yU8b`x{Cxz65Gmc??Gw70VHnjenBY*I}&2+8FIIj0hRK5~OmJz1Af zxh!X&huJg{v&xMlgWY@cU3<3fIRJ<*A0UDoj^lh5=5v?l8sl(nPd-|k9XS{#n{F`l z!x16HYOW!~x}rQE?LR9{r?IX80kYg;a6U5?sVdF~rov2^RJL1pDr*dskSlBqU+ zsvUbVRV8Uk5Ep$>QvvJAt(-{gdsbo5plJ(o(;z!T2D5JFdwh@Vo+`zmAYi-%z(23ov*hxxEN-m z@$ArjNK9EK5}JuMRTY^ZynnR+%)zd`vm=MdJBcwLuYyQoH~P_deCFBn!}rIk^u@qL zLOC~6?+fx764qNANIc$uPQ7(hWAx))Y4$&sb1n)%A_7b@VoBzuRqI6qRk6fqG(aW* zpoN?swJX8Ghkk*&z_Gx~F<+;Jq$0LrxjlCz=#LlbGL?T5<@%mvSjVkAJ>m!3C=gw) z?*Ta2NCR)s+xc!i(rZtot11AnS#Yxc4l-d_ulkHf8d&3a?nBTt!4{kNz}~9BKkp5 zADVylljT=Gxl-Nb^4wIJR3H=bnNFQmioT{1AR9VB%3#U}LD`dHxpCW7rvEts( zjB-#e0E}gh&8CF}eP;7WMTO&mY#6Zuvtv+cHGw-l5J9c+5ky3wFx_%lHa_Fr zYBm9%yUc4j2O>ZM5ldQNlB#t}uiI!e5+OTw4vENRkObLNA62FCHtPK5ZHFERE=riL z7^j5^=QiaK=-DCJv8f!FFv~YDM&B!!PGh3qp_Y@Nl7(b+=ha2WslHF8+uuHf9#B0W zx513`fb9iT12!VEBp^dQyWGX_Ei{q|ojx*lqgtw#ET0U`ky39mSgCXN76?3OCxwli9D(v$l z6wK^YV!pDAh+{bevubOjSlK<;wYQpXhO+co#_Y{hL#-jyb$IIczVynU{>5iJ`#WYq zZvWzEG}aKKst^)q8E2{68D~ci?RwN>iq+lo^}|#QrLJ6-kIz1@Tt8Azw}@CnZK_Dv zP8gfUU=o1{+11m{tQd~=omq-mUB>yAscBV;1QRut&K`!Ch?&^Yf|+h65mHYzhJ{Ml zHVB0l-gSgMv$ta?z#XpgfF=1dmH#hX*LM&~!ulS*nN+t;+!osPY&xm?h1mx+?jJkr zj|aajJJQZ#1nPvV!SUA+0<~sLDLK-$`enTxPwQ#WIUZmuMQwuKkP`caAp$vN4+dxg z00qoP@xGx=jIxq;5vYTzl|?fH0yD>eU{Rg=0RfU!2oPwP!wfB!v?iE2s1!Yup;Qhc zFjq8YsaZ<}?=XrRGc-Ot017I}idxVcFk49O-Zif%W_er>;8^B}Xux<%X7r~sxi|S; z4a{7Yo5pk&^3kdv4650r+S+92#%G>Wt{>#9J!${$ zUHRTKum8-abheeRuDN39@*J5l*-vH}s+Ai@#%G_)!xgu(7o5+BMLpRnj~q^%bO2Np z3o+^R5;J?xK5M%5-c_4N-FVmYuDoirw)<;0UXLck4xJ?>dY~-dbK~B&j3o95fhsu#*O_lXkHV0^e(O+aYwVq;@snN0<bV!xlZ|roND`3gj6hXHMZ;|C(7}7TK+56%d+wee zy$UIX{P1Y`qw`9sV6@3x&Pb0{r4~V>0bu)>tFi^08@!7 zVy4Wg*w2XB(o4jkD#;)^*7fA@edD!VgW;OQIN0_Sjri^2-|-xC9_Z_|jAfhzoV_4iZR5t!!XXwRa^K(r!3@}0HIO4EuGKUm2-->~H=H+eWDzw48W^CrQh@}#!#L8z zYP@ADoB3nbbuFkT(#&RL5da3d>7c539B`PZjqQ9JiaEAOAc_Rmcz?(FhCT6npY|{Q zkKuP*wH`;T)hVAzciJyPB$7}gA+tAC@=jw=k=1j~m#Uf{J?ydqh*F2g%q#{qCFbhr zeSh)){mp8!NzQ-t?f>`uo;&iZd&Z~IgQ=azS-}cyB?|tkw?|sMJ zH+(9maR)A{8i1sF*_z@0X4nr6Otm_E-=F;2zp--0p)_?dxr9SI@7*XzcS0gvO<}RF z&cF2X=ltl;{MCQ?54U~%{e!i=%gnQke}Y=xdWr`<7B2Ss_1lMr9(HNpj!1Qr)ooqB z@F554s{*%6#Nt>DIuDc1AZ0s8vzOngZw%tK3RDCbdYf5K%nqT^QcUmL5YeKbi&(JL zkX*SzNkdYiHzPwvP)r&%?RQ?mvxT7?p7U-{bXF#LgS65pc_%X^E_v1K3_&xSYGma+ zk4Ltk@X!9qbD#VzcV2&O_1Qn#BS#`+0SiS!lUyeTFz0`S>NCd$4{>bhC=?-uaZ^dfknCngp~+5SFvi%|Sqx^ztmk)* z&+j|`%sI2XU+4XPJzvk)^L5Vq@qSlHAB^4CnK6IAQ2MO4QK;AbzZL#4h*y_N%1rOy z+Of8T+^W$f^)>YBug{$d!iE3hhW%iL$5M0Mp1gE3Y|85~W|=MX(}9^CYQkPoFSU8V zefs1ryH5J(x4j2;JxYGmbiX5LM%055jPzjU^9`}uhdmhPd72;OK2YlO@2LE15UBjy zj_3QVgwtv2jXt=Si|@WO{&Fy8HV6r?aOneiLwYB>3<+r&63sT`36eoIrdYA6|89~xtNu%7 ze^E)5YH6FE3~aBtEPwX$MfFW#*9N}GB|NE;(y*{~RL*;8SLb+8TVwsE=8N2xwsDc2 z6|gTIJ-ONFCJ(jHuY1b*?scbrb@)qPhP&O1BF&M`<~8yd3-vrJFn=G z%N3o6|2pJ%OBr~1C&;{RdWimT5HUsSZd`X|iAA)ZkstGzz?%C%$V)>RFo90YBH1d7xm5WE-~+V(ufTz zWnt*H&f<@1*uZakCh<(dE8_2x(de>&nll}GIqIUU*y=)kz4$t`K zp%~fIq?@Fx)NgjvjJn40KLl>KxW4hy|8cDrY6p2=v~=~&k%M>CjhcJpivff5xN0~25U1YEr*VJ!PGT(ji<PbskBMdXjJ^ zW=CS@dB2R7zn@h%1C$x+h+4UOM}}R%raO}gl26;5jzr<4Fy5Ht=ty+oG zZ(j#q?A?5*;@Umge?Q7{N+*Ada1EQ?w%g>!6G2`T_!vUM&wCwW#G?jxl)J z`cC`YfQ~-m433L3op2OZooS(?K7G8=7`s*tC-P|`ZS~2(<~eDFg`b@2TfR=gUknng z^*%>+T>oz9xWj(<+^p4+qdGg_En^=-pD6VoEwmEnly`6UwyCFQYx!j!vWqydBQpPr z{mA8Szmpw`vp65Zhh_na;iQs^&&c4R6ZSh*7Ir@=-}ku6&U58WNSx!A8F!QT@+SYL zb9#o66~nK+_8&!t?Wg|m{l3Q~;Nd^dY>Llq*#Ud5{F-7yyuH%q`kQuQ-hC{sBB;OaIEyW~J|4JzDZG)MY=%BzqL5RRyHB`!gH&8CAr2Dy{?Zs2S|IL$m%8@ zQa8AHN$KS-b)#sfxZ3`h$=&YR_S+9_rd(mlYDJq`)cPLxIY{$g?(PmmU21%ooj7{v zJvXSTH0d|JXl|i(upVU$*HDeCEONKNCvO~>O9 zQEObHXWJQrAFs_Wq-f2TUtT(^`S<1=^UvSR+B>&{qmX;fOj=W6^PjtHnNsjaR%LT! z-|!I1D}DH>KT|92UCXX`;(L5b>XO*tu}w~`uy9>JFvD+>L%XII3 zp?>^l?SFdzv<&@sx;8@3Y$8@hIr&www8Qt(hi#86jJ)(X&fwg+53z6a^vp|owO`Ag zydaS6x_&J~mrr`SfWF@5euJ^{bxNNYPl%cR5#(unHPHG|Qq>LZ3eikf1JqHQvu)C~ zjCRMMD4LWokg{pq;Qik@0*2H*E!YEXeJ7OUt`0YG35DzF0pFL)k0B8U z+HZ<+7{KI65-Z}u^yqDKr;foTL(of@ymCe`dvG5MW%AHxe~RNb3vcHABU=hJuM&{J z6udpD2#1O%s_viTXy~6Q4rz@uU6I}zfei^d(Qw1J^r9Rp+SkHd_EsCyCx)u$bFgFm zPZw=i)9tFwx&sQHon=k0#%k`!?h_-D<><{>Y9}shtA1ksDP!Sqfs|yi+z58h=O7?+ z54P*}iHBzHfU%M5!CTK(FlXe}Z^JHSC$2-z%zk#vL(1fUdO~Z|r3EF^I;?~f;!+QX zj6K|8D~UCIa#-hoZYOM=S~^~*b%aCnHHq8+0>K4@$cxrH!S!$2K~qrVI)pnJvRdCC zPS@W!Hzcq#Hz(V* zs|$a9wosQd%cy-Yn!`>#fWuG&NK@=>p3C={*~5X{F&>^(*1$wBVSu8fwJSMp@oXn| zP9`82Am*XPnTS}5t)j;ZG=cr@6?$zSPDH{4ID?yFie0Uvx{Rn3oTGANTMT#WnrL*~ z8~q&Z`Q7AvUc{gau;?jqLlh$oly_cs6wTq{XBq$zmAL9ji#K#y|Dc9x4e$`#C+$>` z2x8KE0OlO4b|yE+J*wNqkBVa9brxEapB{IyO2s z&hW-WFP(v(WJ=s@Vi;DLW{9y?L#$qjy$|>eNr~|8#a1C7v8Y;6IWBi zr}o5+g@q7BD=f?0Bo?KH$HB!hR_^facGiftfDXU>c+NwTzx6MxgS$kjAp#B&XsH4g z$dV}nDh|VN#-aP2X=@q&!Vftw38% z1r{9081`d}V9~coEEA1Ze~vlW(GDWjG@q>tFlkav_oQV7xnjuIdPLqV+>N)e#)6J= z8rM_Siqkz-!CHnUCc?%=t38-0oQF7d#n_YkGiQ5J^V%x-=do%PDV zzhn*Yd$2bH6k!B0g@_mO704dKz5r_o3#&Z{1a&3P4^nN>M%;pebzs}lM6ab3^47`vSH zW;Ma%vXks~XYq86rT8|46U%DnFnWxLK@)UI^oZ+=|9>tHAD%XC04s|lmOK0_-oMJb^|=J)z7(^LDvul8okJshN7ar zvmh73Uk_j@e_RE+jeVK(Gy{} zbB=mP&XX!!@2T)aPDHMn+9^2iVve-z&No@d->#!IExw*y<0*r`^_IP4b%vc3f}%*j zW%<-uiCya>Z0e!GY@3mBbp!;SgOT(*B?+lh2|hcLdm9OVMt5| zxTPyW0b3g!8PluEF@%^{-i*L7>v23+BYG;~&QV?{T;J(s5XA5zk@iQnNdfDlU`< zM(2o6(L+@Mj9)to5!rkuuaSijvDJ8h;FF&_x5(LJxQFg6Uh8?+)nbR^ulI;XiS+RP zWcvk(=upZ}kMsOsVo}t*avj zoFq39mBjfZPcCQ(E*4k-oURgsF?`X~{ys3Hpm{Ps)+69Rw`8&}zt>)$P)pJ6yj5v! zF%MF-=bhz7Kw2#tBxv?$wYrrSdXaCqC#e1X0t16B=TYV_Bp2uMk#cZ@S6zZ}Y1rs; zE1ZKtt=KAZ3?>7ri(l+iymRfopY{0fA|8sxTkFe0!|%!(_7mqS*n@z?4qL~pXOaO@ zx_BtrzB}n421pJNs@V#>WyjISgZrr`OMAr@#2I;s7fBis+eJcvsa6N(eXG)?=76#Z zy3VAS3l6(k+5K;!rtx6R-5_OUM%}ace)NCA(&7`u`TCf>^R0L!A6f9tUfKMvKS@#e z<5`hT<;D5Qf;gs`jTOa~s2eKgkXb(rQIE!LgtA02z^4W`oKW8BlyN%d4jYWhF)14r z?f}V85R`CN_z^AIhpP8eD~l;SC4NTaze4XHt3dKsQcViRx6sxuI2`;m3dODp8rk!}Z06fhZVcfSte^^l;MfFrGJX2_x z9k!?hfD?D^f9fG=aUsWQxeSUBN=@f;AW@@YHVyW@*!_ru`k!j+lHyb_PE=ko)jqUz zWy0&{ZJw>A9gu@Tc~t>=x;w7|asZfNW7}F4kxI{%2;Ps;9h)xd=*$fS8Av zx2F%q1O^9Ny_rVO_fAMI@hTCk{TBPb{gH3J3==+ltlzk7ll!S->j0Rfu1tcYwhR(~ z3}$f!5+vHQXfU^+m&GgwjnAX4WS8{{lb!K~Usc@eF>j{!{%VHwf#t6xP$J~u*ADBb z#-n&~V?0RsAl=b1&K1_-EI~h(e}N}LjcT#~#?{SEQ5Og15|3EUjd|El-Iq-$H4kL8 z%y&uqa-D${B0swrQJM)@mYoPE`-=a?0>fEZS#y@cVbt~@(B<=4i17Q#G~XGpRLMJk zSG^g>SzoB`CWAEdInSw&CrOZ}NhnOYuZTsnPC9j&OdwU1i_Hw%qb;{fP> zT#xFFp7CFrsV`I;QbYrum|9^-&UNItnK)`b)YMYnb?v7;w$Eu$eyg`|z*AVYL|kvJ zk?;_UHBlDc)6U{`T@Rq1On}tn7!qGO%odSNh-?R<1k#A|gk@WCEKmV1=&&c-1*98{ zXb~s=XN1hVIzkf{@Z3552+EEE(ULO|j_F-Mh(|Co31AYV_gb3aE2^pndJf?%y+5wj zCY(jk#1hxBpZI(qfN|h7s@M2-lBdt~V;}-V0?-36MPj(R5poZ-Fh*@aQA&NfR!>s_(D)N&q2tIJ{64?e%r_pNnBak}T zJ5@xEw{%cFlEqc%x6SzHuS0Gkq zemtm5sh&s#qyxv>a$ao26&p$oo(-$rpaiKBav3P7*H}FLEyN*&P(B#?tzZzn*UBD^ z?svfPXUGL!qMIbsOT~)OpN>r@Pn81Vbbb8VLHEcQ5b*>?Ddk95hTCCS9!Rtn;g_+? zt20U=mhAFQ3xG~V-I$3e5YrVdH(nNf4-wC)TzZuL$7t+Qsl~{*t)VRRm_}bemKzI| zV<0^iTZBRKZ6GB2EKR9e`lf{1OnHE3Bk&~_M$Hq;l!8_I8>JEI%4KKw0pNk~aeK0b z@`iAazRrdctS=&bMu=FJ@_&0!`049M+VaCSTdTYC%PiuIUjDnGtx?jX!B@rmH>$m~ zMHx0EVA47X%@Y%A>KM|`Dz)B0xWdkgy)L}Rv%S4+wk`{0N zs%uP=h7`?$qcDd757VzCjpn>2{aEIXT(r9pNBsfju?h-UeAOv>}5ZnSG5Zoa+1OmYwf(Li_ zn3>&~S#~#P&-vc>pZBECX}WLSy0@x+b?bILML!*;q9lWgOoR*o08pRFN~+zz{!F zmNrlTz+*Z?-CRR`6HoYT{um_x%0FJ-UJVyWt_FJTj}t@7NP&bQ_lhEW3RkraQ%VZ{ z$>+DP;36aaBXCuj9)}};LtLfEiF}#+D!lJ%$vfA2qVa5f@b=@R$VTZ=#)o0VR^a1A zSx!}M|HnljQq0AdJ)PZ4t1Myx$kYx14B!V-3g;Ut7{Ix&kkC`gR>WoijK>%X5YVca z*2+d4dWXIRO3{Py4}xiRiQ$t6`r`n^ydpvQ05NG8|BPf>b--JAfKflhWCftY3^1be zTOR}XXPl>a!vJ*SDR5!l#sJ8%p|2zX7J`7%Va;$UfHoTd$4tJHAMlMC!1hebOcwCI z7SK9`fl>tkJ_fL$=2;f3rJQ@H1-p1hGkM`)sV+gH$Xox4W2F;Lp zs|DeX(!^xtc5S%CK@0#`a`7F#Wn%q6u6~p21nC<0Y5Clmw;Q%<-Pm0C3SFO_EH*Dw2XN>I$iSa3whtUD z$_HE-47ztOaszpeg0~$*^_!FA21Nx;gFtd%mF#ri({4)^Sm}2@Bj7hjQ zRU{BUCHS18O%@*OH8pwfD;!ly`510lcC~N~aXnc(OM}N-WT)qeLWn*jm36AaZuv zu(5P^fGYWzkm4Zym6WBAOS*~PYnH+_gq=W!E8XF-0;F1zc;MYZG+<+vzCd3gxS5>oG4n2~0THL$zg@s3x$Yuvsy@UrBWGQe%ZlaM0C7 z!#=Bgr||{ri}V*eHL6XfqBJg9BC5FFX;bSeME-at@~5AJS2I>SRykLntWq56B4?P0 zIlenrU#3^Yz``0i4VIhR1Hlr*CCrGHcAd(wBfWB13XA-FGlUYXMqrV$_#m=n4a zR3t0p6OO$m?9pK3W#3NTNI_4r2WvCdFuuTz=|fJCOQ217!pN#oRGeQtUyK4i0{3e~ z6&a}eluLs-)mMs;#uH1x#ThEw>QB_oiv$Zpi_Ht|HALU}>fD4O=yWJ_C`-IkeOqa` z(%4Oo0wMh1!9-z=S`y+Kz}-n(IXLygjj#Fb>n z^K=&_qz(Flq$A((d7OQQWripDTncsUP(AD7#H2*+64?^f5}EBLp7Py-jQl342A!(_ zH1QreIz2iW^QfUm85`T?Ci1$c_W0w?7x#nyRGvKu7bTkHzy zDEF)M8)@_i%Wl0D>J{5=+wNRi1X>DOdBrWoy;L>Dx_pLwK?OmDp22~^oWY3{?lfWc zNsf)QjkL+Mg<7NM9?zL-3Tr+=pH;0s&)3a$6E#dpMZwNExHMTWA#^xsY=Cxhr9eZ(2aX$4vZ*GJUQA4ND zN=TlQ_&QfR;Rt97%%={e?}_?!9Vc$GnrjbZ41eQXslo1N=(NmGPaBgl$2YHYetGoj zb(nl$KTDDbOWKp}xzA0jaxN#1`b%D4PBPLyq_yuB&Q$F2>{;%G&Snj8Wie#xa5|54 ze3n>LT^kie$x2|eUMTfdmQW5b|F}WL3So`WDw}*?o9AA9X1tFtaw_7KwIZ@2#5>P1 zuVXmC+gkg%wqLo!KGQIGLBfyf&h*afZWK`9PXl8P7ZxBMpbL9-?)8GAB~nyi26|dG zwJRR+woV*ZJSwm(aILM3!s7EzbQ#6jM)FY1kR@8MitqP{5k%v4lP&Zn8PEAv+{%W*S`6th?fP4m`s)r)qsnCT3B)y~j< zW+P9`&%#*FV`tO6aJ_pJx}33$vf_=O%=%g1!83cP{W!P)uZRVUNgz>7;gu3!{10&q z#zMRZnnP@Nnn+~Nc9M2;O4d=H(O2Ij^cYE%4rLh?y<&G_8o52GyEyZh*6M=jilQ48 zP!;CV1Tyhb-NHOdH+?_rZWpT^YbmxSFGOC8 znM8ZNsnm+UO32Z326+Yd(bEu3gi@hT;Wdo5UzJOCwUWwxn`pfhtpg0&`U2ZN!dP#k zfRWdNeYR&OclDLES#=gZ8efKFJQ2YS3opl+!B4{V`$j+OvGyd?zON-^Hom&3q_fU+ z*zAkh=K4HyrY>4yangDcnjPxYbT#UNX7%pLsniT>(jfgz!^;|py4)6_PmR!m-l0K3 zQH^&R#~PO!JbPc}J{nJ++l}r$@oqfj+W9)8+jw>((%U=(h5;*nHTw#^dUo~UOtd_# zc=J5*%2vNj$<}eV2kr~p4I&j<&1Bv9SCTKn8fsA!Pq$^zddQk@Gxpt?QF&0oZ_>M$ zsT?FdS2xd)7S2df1*Y91yi1o5$H?4B%t=_SK&gkR(rN0cSGp#;^~wVxqZ3>6Ue_`+ zWa#N!LOPyuM;g7B)0=@~aps4^5g7>?KE5m$vqm#HHQpPLp#>{+`~7+hm!&UKcds`D z8wH2-4nMgZR?VzoYkks6tq?G@-E!Fyx{VuC?rBJGNG-3^v##6oYWnDHcDDH>lXqzD zxXJSX?{4C2Ccp4p(~+0`S=ZUg0^Xdj6Wz^Ff5VhJ-CkLva--p~*sl1L#9ZiCQQh0w zZ~L=;R;})Dk49%@&JcoM4&TO{M4?MOib{#<4?zvt&g2u}=U*0ey4k!gkQg={rp?5^ z&AII_$H!y!J^#8rIW(F)nw@l*6xU+=BJXCab(^qarn|kHw7J)VlilE0^J=%veb$|1 zKX(CLdG!UkAN`%hMdgY5NWoPcVO-oDJY4e8HH4FS1^^J?u+-3Y(N@Q;#Oo+bdZ2rSju`iLDjvK zG$3Bq5PnliQ4wSz4}p6Jwon&iat~V@J7)n8VanhA3f#Z{t(cXP{P!v@*20wHzcom% zt*AmSVebSb=VswyhOn`7k@NDiuygb9^7As0bKJ|UY<#R7Y|L!@0^FPeY#ikOcuUjVn_puSdsi1>O3L3F`t$LRaoIZj*^r&{KiJ(< zWc4t1U}a}vWBo5iii$rsv$g$?md-9xZudR;$H@L;gU%YB4p3G#sI$GR69g*d2DNjc z`cIuOh5YHq!PUv;cRr>NR;Ufs_TI$#zVqz=u?r6WyaM^t{9n59r~1E+-o?`FugUor z+ut<*)eP!k`CrU_)BIufdno)dLqhlQCm`VjHFmLg(y+I;5&0v^{Fs>tcJ zEbUC~-JKbPSRb1FHQ#@EgGw5^Kt+DDWM=1J=HS#|=MdoJ65!-`%Em6h#`ZTSf7E>7 zL-9WLO^scQ{}(U+Qum=Bds9m@&;QBGUp4>LhoYjuGdpJ&V><}+nWV`5*jX$sO$8tv zyu1*e`*mgt;pAgB;p2iZ^YKHW%%(hi{OtV3Cfr<5j^79Qujc>eTGAfk`dc8~yZ&S0 zo7zL}-TxUL0zCXY+)z$qer7&neqLsFb|@D!pBWn$v#GHOFFyw#hbf;4_dgr@o3npw zNZHBqJ}(*D{H@M!V==vNjE9Gl4{FS1#>@#dPxW9|3MqYica*V2C~Y%G7zAP&Y(&d}c$rZD9{SLUB7 z=g*Ato6YYFT)-IeTka8o{1(1YQz6!WDgCQke_H;-%<|u-^M6C|hyTBs|MxcBEueNk z3;#b{{a)+8J8`x*b8$Czf{L5pN67!OGXL=UuVxS33$gx|t8Fa*FHD59vD^Q@Y53n( z)&CRI@K+Q=ER5~Up{63N{|w-N7W{8B_s4wx>&p6PLiqQUC}au|Ftc~EHFgoPv^6$| zvO3tA3$gxH_*a`kf8`(vdmDQvMSD}I2&WM1e=7cuR`(}wDt{cji8!mtfXJUoN${}q z^YAcpu(1E#&EM+%&ChQia=&Gp`^Y!`eU;za{9D<>`r5x`4I9_r>+^E3-9K2_fBX9n z)4!`9n(F-A^zZ72rhi$2?JQkH?(_cd9eq&zH>=-1i3NU#s(!y|go@k`?P1Zw+A5YF zP#bMY%lpp?=ihQ32iN_eem8ok`Hz-5e_68stL5J`|FHZcp#HYG`#n?qQF_01yx+C5 z{<&@awaQCw7+mY0P=J37p|Z4d7%A;>j99Ti@$LFoX-R8FI*3R{9OEn>*stPXn)~) z0OaT5FI+$8^FaFx*8?Cw7k}aUIiCmGU$`Cs`MLND*U$Mp(Eh^p0Lah9U$}nG=YjSY zt_MJVF8;#xb3PBWzi>SO@^kSQuAlRHp#6pG0g#`Izi|DW&jal*Tn~W!T>ORW=X@S$ zf8lxnG{V10X*af8qK$p9k7sxE=ucx%dm$&-pyi{=)SD$j`-JxPH#( zf%X@!2S9!<{=)ThJ`c3Na6JI>bMdFRkpH?76l!;W_ow^)ZJySc?Q!?Fh>}BO)f52$ zFB$;A|0Mu$ad-c^2>`gV0RUS@_ji{j0|5B;v4&mJ0D!9fGf8m`kLevB_jIU?>w1wx zM}MW^2C)9P;L?egFe&&k%o$^x!iFFnBI`K0%IV$deqy0Z|j^sF>zVj7TBLa9=!CqX?u3 zvQcnOgffH&9vlihf|P1AsmT?g&~~tW+2rch2DTBXgIysm)(mSo>+j+TRH9t= zztmuqVwm%vrwCFQb9oem0Rn&3W^z+pBcy<*s5S<65MYBeLEk$&xNp+O8ltfWg-%Co(LfvvNlCElA82JW)L#j9*`U+0Jyf(@AVt z!~ksrEg163w@IVSUv7{>^yqOOcc|b%=LApsm}&aYw*o4zTc`}TGld}2G%PA&C7;TC z&#v~a^0KDRIIW*h)<>cYWfWB9zrw%^Y!D1y)C*h%<$Nvk#vhq9flI*ePdGz^^N)vR znWhB+gDT}1R`ld3Xkeq0EGD@W^(T4N_8VjR(T9a@!z%7H7fh9%JH2HjoWDJhH!Dzz zGW6J4JtGr5zY)F66TSW1(USL6%cg(n>0B8`JAp9(35Xqm*&c)uEmqV%u=5(f9uth| zpToEjB|Ia_UQn{ywIb84_CY4gZ+*OuR6!G3hX4}vEyeS@N7o8xt+wtH z6;5OfD5G!EedQ7kV#<&3Y2U5h8ojG(Mt;(5;WUoW#6isGz1*2ET)|#dWR8|Of zJ#D5<&e|f&l0#M{NKP)92^wW|nU&uTtOz;W&0V*@OJS&E z6T_acw=uP`{YU9 ztgR=hq-n%N-w!;V=7f(5CYIP1qtUhN>)#v{Uygqp*z>t^rT!>Zn3vZ9H(jG>yIDs} zS{*HknBBK&g;qp za&kM2GrY66R^`{!f#0yAuZQ%wWh#QJYlDS=o{Z0D(j+R^=hBMDoHd=Lq;l%}o)s|i zxN?1+d}%shJgQw-_o0IxPj@D@5{Gw3+qnlxV`6W9f}NLt)N_Nyj3A(I{W2uAc$&Ek z$%@d+_4C5GN?c~@&bQj9m|?&+_#|9#W%ubiD7(5SH%4#=&y-dF_E5%;pM$qDFMm0v z$^P!5;qHoc?{32fbst^DUQ8AEb__eK5V`7X;bd|~_dsIzs+Q+b%jLCJLpQ5lfQHjq zTTBdQ)^IHm;qhi{=W3 zY{6KVWc$XEWok_%?fCe3y!X56SXv2S3?SZ!ftq}^+*k|p&3HX*B3i+q9>vvCy@&+J8g0-Nw1}IU1DNo zz={;f?4j(<7NWH9FL5H+!DG>@iGx5eusgiiX($h)X64gYzM8VldJH|eXSl&e3JgFB zy_*;eIb24*I2JtsrX2i=Nyj*pfjzreuC9Z)8;>v-U}Pv%5Dy5?Q43`1cUn+#h-A+u z;E$9j439za*yJ0^ky_4Fo5Siw=^qV%NN_@Qw*yRGU0L`PaxWivX(+U*_$!zz73Ivw zh-!95mc6kT627)Sa~CoBun}4iI$?psSS;YRw_3Mkx;In4cw;el8`!&Fe&!`{5uY)k3yb!JA5tFg%uoOvq_jud&i| zzdS>YkHDDXk#w?iB$62#l?F^(9uB^NkWl85`+TLAR&=ylwoBpFs%+|l^W<((bGZ;Q zZD6TsQJVuF!J$)k%r>>S6Kw*LmLzTjQ-A#;I_l( zwWBb}(u&%GB3o}q3$+TWj|rF93)g2O^Sldn)?-U>!&1C+2C^AK8T}4Lw>yIK#pEFv zeRML-Clz8l`)ra@}Iywq6uZP0aClWKxnTa5QGo)hntbMg6#p;q|zW9s9m)mW6D%D-HXE?D6fjAUQ|*Nr_1I&*VXNop{v>Z z#y;(=fi!7jRZ?PU;kneRWm$Om(R(^Mx_y9D$cxE-r9M)Lpy9{)>#5K^d!xp{l!-7Z zd`7FSGQD~1NHaC;a06jpP97fh>00|JUzC0TAbLPK@X^^vk?WbLYfd(aV?X?l*IWX} z4Wy;fh%F&M*ramn>p87ONzYnVjywHOu4;Tvf?Mj`XDUj+(#K`j;LOFl0cJ#&ry9^-4skVUDR~_btd~WMFxn5qYvs2jvHIdx| zvo2c0s=+1N0D-;^lhw@ z`ZD24oLAh652);weR+hIjH^B-$Rg7y z`HFh6aCp*vuk*N553C5a3o62qXP}W~2o}XT+C)}8W=n_?KJCzk2!23;sUUk*pT}@I z4v7jWDK<$s39tymEy{tf(fp|V&Wwl=GD$zQ2W=*5!!>l+m>=X0`|jdnY3DZHnpqsu zJzf7Cse4D;aBku>GXGLmA{X(9F4Lo`3W_aG40yLVj&E5KewHs~?P}wux%^+Wte+uSWJ(vM9kF$7Ubd1Luj}%|2F4tlca_`REGhih*nem+-9Ct zJk?mhvhIEGnWCwx>_Z+FKrT3E>wtnGC>}_GB!)qdUuMN9Z9&yY3;+Ts#DLG*Y-w?W zWhszo?l-)tEH?50T7qW`Bs1L_s<^>eHiD0-Fw{(fW|InnU_s8kOJt(X78}i1y4#d` zMsgVBog^~k5u?nkJufaUvnyK8`tP8tB=!+>E#12FNT=fDkGu9mc6e1*vR3LB(r>S` z%$tvu4;Iefaz%XM9Nr2`hNOO3P4GK0D!#S*(FZec*O=QELHDE<9T_R1CgLpzVU)?ndVGoroAL5!&$eu3=Gl z?9~Qq1iWy zQ2wLl7Hi!`fs0<0qJ`UWNAkj=?zzJ_Q~Fxbmyw;w+FkrAvrk#1iM z(|3~4_zU{9a5{3iV?>F9YUM=XnAJpv&(QR)Y5lnr$ zlj|4!v?jm@{?UB!$h+#{#p0-rfzZ4QjV}9Jv(pZ;$lEX8^6B_~#~RDZB8q0dN&Ya) zG2EW~7@6#xbDT|Lpkk{=!?f8nsH*% ztJ!9RxdFiLty)Z%?TPjNU~yB#AC?*iENmn?9>gF05C(l^+tF3t5><*aHmSs1r?nj2 zeDOX(G%!5+S}`(!_~=Sx{(>3VmOV6XEqx>AB%rwnXn7kVL)&G-RwH;@aKXmtG1%eRbgi{2K!7f1lW ze3yhNh6RsE?Mk)57b0tbe=vJH^uCg+U0kmXKiFT4Y=IMEan7Z`MEHD-{%is9kb(QM z?lYMW0wuW3n@9aT*`@i7fN1b?g-$LR5kMh8u&K`8W{YIo>bh;TTP684-r$O1H)SHx z8QpcRdld{b4WkydE|Peaa}xMMSB%+bujko*pubJO2B}9}{e~TVf}P^EqTc5{(WT*e zs*skjnHGwk`KQ%U#%n8-J<(BLiYsVD8Xu*5y}xCBWm)J21i#n{XEc0lfsSV$o_#g6 zdnxI0o!R{|)S$G*$Nns-?3=mtmU^VzC^$?R;T_1#PyYoz4wFLsUAVfQO4jEiZR+y5 zlf^QImfqlMQo5^_j;KaW46#fS`m=&BWbIokj}uewfe28e@B3`c9$KsI35WKF*X|}{;tt$P6q`sBS*JwG3dnsx(#i^onpE# zi3cGy0SEvOK*GSEgJ88@35w}fRIew&Okmfoa`%y`B_HWhdy0MgrLM_b%4hkH7i=q}()Gna%~ zz+}=ZNKvc<_ne;dK2OA(HC(N3j*gq6M8k4RtdwV)g|d*h9IXT~H6^gsliL|7DRmy0 z5~V48?KQSZ-D}}29W1H#-O0ln4VPa(R(l9#hJ}UcvAE~eR?M9-#R-)imd%Pi1-


il?}a+04D+mm9azX(f9iUkfRH^yjaWB5Mw5q zG+pSkJhf4aV`$p>T7J57GaGz+S8Wb`{1;bz8L&-V(n^rG^y}h_$Zf-fSQ3A!rbF)!#@@ z%db;8(OaY4mZmDh8rd`0i49~43T)76s2aI>zq9vAjw@buO^uK_BBQ?alqtx;HR0>= zkUr4Y@{%&+LO_GJh zTlZ%UD|~yM70m)ts#Q}v3C)s48qeXsOSODbv9PdkD2kX6I%C1mHy@jw)niO}PBUDL zA|q!>8&{`>;$&xMx8zp)V{HzRh=?fKyYl*L=w{56I!Nvf-_4<|uD=1_$eO-LjI7=!hGA0@B+n|Y_g%@XVW7He0ysf&*nw~7=%PFb!S=?Rmzx_( z5K>&MHC3Ty!OwmT4^VlGJtZSQ=$CtX^E#TiG&bEAbGcR@_iYl`p~CkS5=Edh{-b1- zz*a|MNg%8k5IfN3>JVmR@6?tcr2knXOJrabUZq(CWdu8*#p5=Ip3%G}S`3H@q7Uy& z>0tE~SYg!4w=9RW7>IYdrE@}LkRF9fG;`f=+G@F)=JqZSTf@KKp>4j{C)(1(k3(Sy z&nYY}W`u`mVQPUBFiNehtXQCq&v2zCPt?qc?JXh-iy=54>P+0+mXGV~kV@*s8G{@K zt4?BLN=gy2bLhkKi{h~&Dz6H1RHRhv)KmM`ffT9vmdJbiyM1ZtSVFwQ9m&pn17R8h zemc2sb5|#QqnYTaig%_Qx}OQ783LIX2fl5fr1_`nf{wYojwwrCc#?|e!k;8d^%<9sx#rDD=OpCui6 z+-80}0Kn2FaaC1kC=h^o#=IgY2k_3$V5Tr#?;5iEh7 zj=`Q2M;CdqJUe{5TvL}l7Dcu>J^kG0*mOT_UM&g}OUn*#;g}{t@KA5qJLj^e$4ou} zHkMF@-eLZ3X9s`5;Vi2dQFL$h^1`|0%`ri_w~++Q8z94=(&>pld9$S0HyPUe=`@Is z57nslV#AI$-oJ+%Eh{UN_NvNl za&_Zb(7=V(w#VVcSJsVYrQapN`S`7BIop4W$Uk}|uYv?bG6Np2w?J3AecZ2o2Rp^N zTro25_;xOY=a1R4w-8{6sOXbRKSE~C7sbLk(krfm+{RHlM47}{rM7cQNZg!+ zGI=L&c8x0-;U$QQO0DD+Ni+jfWoTj-l8HlKO(CFa*iP)WjhYs6@O=3iD%>2YxZAZE zR+*yH6BzzVRFuhFox#u56#_29Q3Lioc^#tR>tV!T%TJ2*nuHSBD~z7k%IgYUAS7`M$sM^ zSYP_1iy-RFn~N9CD)g%-UXwc*4(POVOxi^n;m*ED%hK*bLGd`*Hq8W&FOM#A_D-;< zVK94`9E!Y}h=6ojY}ajoPdK+A@(A%mlU_6gpCkk>kcEv66TxEy*npDFBwYi{QMY`^ z?Hc;sp?&6gTJ~tRq0h}sn$_v`WW@`t#^_gK1L)$c9vWgm1%wC*srTzidzTfW_diDp z37W*Rt^M*|T`p*mmZ34h{Do%OAf$@AcSCH zWQQ+)!3QF@*~5Ru#16!KzQ;z484(<$LQkLf7y<4`Qh;2zd8F|*g8ErYdD2W5YrYj* zA+VBK{t*ZmfKy?B<)=R?diuFXH%Tr@+g9--Xtt5<8x0mrv>s5d2qPVXvfr90ThB|t{MB@7(Be^JQPARx^6v+p zNYZ(r%t8S+X)eXwAV=~0!$p4_>E44!jZT@?=iujonIjzyq`n@L9e|N3j~Va%TdA>> z4fnhtMlDQ;qR7prGV5H@92L9%ByPfKx)6V2`ZH+NSKP{}sk*SeQ7oC7gj~tAluSl~ z5C~3`u=BJoAr?(f)oaca6MAB~g6=3X{%^cGvlCN&gzDT)+nvr)A_rVZT3RLDVI6Zz z^m}B)6I@LyE;z^oTyaG>-8ccOkqL5&GsGGRd_2x1)pdGGV6gsV1uZdX=;#6qK#%uY zO-}J_wV+2SbB`keE8o{49M*z`Gi`7kMLJuX11DHPi5dxPuKrAyT#=$?kPA%sWXJoq z&YVPeLYrhsuQ=7~xYGW`iKv0cVw*SjK$h>$XdqD^x`LBb@5Y9UzT$9x(S5J!Y!H*e zoe?@jqL2aiT^Qp!YyHmHAvEj!5*5XFIlTfBE+AJ3Dg@E%WP>R9^7?2l@Ba(a<4kx5 z3mPC!{YdIH_QWMo)Zx4AD4X+GqzLZ{(&AJv;U-YUQU&FCjpJokhZ61hmmPkm6|rm+cbb+8a7=BOxUhl7x5 z`W-#^zAx!*5#g$(Cgw6|$oAHaaMPsmHj;v~sWX^^VM!xmjQL3wD{VA6c4R+$kKXvx z<#SZNB3rkdRq1tdNw8wnZ|b86u;LbXS`Oa8Tt|pYE!S4U-MmEf>ZHP^k)9?^yZKcEx0*tJ zESgb-1-MZsTTLzqrW*nAgJ!w5*o^%Q>$ld$Zw}ivg0Kc_{eFj2m{0FNbyzrg9hYZ+ zWVr7}X@ON>;d4iqV*2vk8u)}cMBY3VqL}05;YacEr);XLgz|8U^q8T}n8A*xp$%d! z?zSBG!4^B+-A2OEA^4suHr#C(ir$7?)pSxd`&~vsSg*HbG=hDP{rq}1R6jhD(Av~* zc;0-N(SfUa$J(+xr0jb;np*rLbirpIGMst0v)_EedUuiHcX`=XE8Muz;&-kX@w(#f z$7)>Ym4UnaM%YnqLZyE>gQ)KksNCXqKkD{)kJ+{4Yc^qAMuVG+`$@Oej7dE)LB{my z`W$?E*s8`xTJ0d&LD;2&S*rR?DtFUH_Z25SXkLe9w0Oo(~83aU^O7!9Km=kq6EhX(T`WlP{0QcMJlsL zBQwt*8_=&pV*0N3%T{MGpC8A_%u|+v6rDE`CG*tN)B3eHi?TPOsL4F$ba7VCuZ%jFbvc0Brmj-YeT~Lay)5;>f%@ zv^kDu4{lj++PpIbCq#J?M!8d&lj{QcIoJg`Qkr4K?&4>-vtfg zp6sy#06DnMyE6&m8HJho@GHmvm;!c#g*%-EyiQEg`l^`=48?v!}I zXM9Bs|9CVA??Q$IL!RY_kgZoT>ZoIm#OnuEA)7*;p9%z)uMT<9o7T8z+-!<3YI~wW z;pW$;>ATNcE1OeX9Cf|9LG;AOogK}Y+2fTTsM24Lnagm$F^LdL4P^H^F5--juIyFd zv7c?JEwh;RJ4Vp>O(mnH3oXiMpMyKD~ zK3V5yCxFDN6l8;*9`C8n3kqpR6D+4#0poQU>swe*`B0i_iAv zu0|x#8B#-?BQf}D)|dzjJ$tg^@!UnccMRp+!c-E-2?sCzjC-h%HT&@*I_!pC=m6Vf z7S2-7ns$}sMk<=F=Jj>AM2})>U1~Ia4qsNZ_~>?w$z0{d+c(>%$&3jJ%#Eji8&5xv zV--0#vY+xkD^FanPhN45>wS48Fm$YNJ8o^K{^`Zp%o!wzaV5a;BBkN>q%yAM()sLq zHqA}B;Ar3LD6_u!v-PQK>50)J%Woq4WG(pqtf-ctcCMVPs+=ro%7)9los&lh4VeU+ z7q_PkerK;$9BVwOnx9Pu-}dZR8DDa|K{(S-=DGQRwJ9^HDm6v+k7mzPb3W4$v*!(g5C* zOoEl|k?cUvPQT=4Ko$uo3PU01;;X4!_ z-w8r7y>?N)r{Opm5{}He@2?k+dZ{WFjv@;($DhxrY6NS!$B?7zdBDCr_X`#AHs5Y& z_C3Tj?z^!iBa-!7x{YiZp2EJnzP?(h-N!hHy)EJlJ{ZGojyw@&NM{vT!#AV4y8Xc$ z@EQu6jB;x4XR)y%FsNYs5!KuE^5x5wDAM;D!*&PP{#rfoNvwJ>RVcv6^^}JH3CJr`iZx5fqK}4xU!@Ol-FzivM<3uyvy$ z*bKf<*m1aWKF)a}h!(+iT+J!nyk05miIOVFx(Oevt@irj%bv8Rn z=*1&=_>xClh&Y(tGUn(2!w@Qs)k7FaR@ir3B*_GmtWY(mXBiMuJz7i)OWfLT$c^Fe z0ci3ybOBgX&;vdb#h53f)dZ1}v3B4%_TqqFE#|$$?$49*CbZI8 z8To`~Bf+vk(0#sEHj|`n1gIW(U-=_xZ7t8#Lj1HID%H>Y{QVoa>iGK;oN}S%$w}96 z3@2i9pMoqk0YO1)oy3`s+h4_bfk${RSGW;fTwPsh9K71_Rn$I%!a-)1 zHwwhyP*j)OJn`!4%a^+Usuj3H*T1>OUlYtt^yYcu8m!mJVK@S zNR!f9PgAx*GIpD$fW13LwsYm6Gz71M##$2CWx`Go)Qe5dfHQN?yGT`+PbHp2jK1j^D|vRb2i z-Y_Gs)oFm|mTy_VT%+L9NpR#Lw5E(_#k$vy4LX0(EI;|;UKn~$TA#VT+?{fvfKo|E;V_*+LhC+rJ-?t<9l{v zxCzWmO=V1wgEpkIuOIS_mFOMF&taBBs%*Z0%7j0Y0KGCMh*#6vZ_GxpFf*eiMr(+5 zn!2FH?{8O15UsRLW7pIawG)FeBj}!;O)uZ(6~}|2ki17Gox7ITPvGn=$?I!68PnxU zK|CkR3-U zEQ84g5~nVBow)cm@=O@wlxFlCSRUbr=rAQR0j4HhbIe`TCgT-otyj%5uSd~sRZ8!_ zcb4hlWMgxF(Bqe!+K;7BZgKGG0@rTO!p2LYB|S$8Ekn@Dt99jw5|L4N+rr4l$>Wbo%)7gQ}QEcfn>qG{UJW=UOc( zH1!;AR}r%b>S$XX-a{IVHia40+|j}udWesN`hD&?8no37AA^hI7c{_(?0nJGQ{SHb zV?@L2PFOI2vupdc*2H3IdnIIQhEn^~0}orWoy%oON zWG_Qie>^P8>{szlXU&3q5ZA8>YCzsz2`(%v8}S-j`5z0u8zkwR6!7@4PoK+v%?p}2 zo7?-Qm638iZ6`)e`uLf@k9#-aN#_|MF(WZE;%c_1hAY{@Ns*ATVTVor_E+#A2n+(z6Ay;5q zPUm!sA;yg^wgd)2rzEq16kt^z4{PaU`lnga#-KiTe7*GNiGze2pn6Z#V2sH7L?KZG zVso=elLx@xf0q#?%K*=-h=LiOjT;cZu*n%96h?G|wD-E`~%KRG4a(B-a(FxbdOQ2=w_fCqspX zbM!9PJd(b?=R^U!SVaz_I~-J$gEOYy8y0WOCY2qe7KA|&Pw(RO<65iv5;dgowVG76 zd6dY}{(|Q$e3yc<$Wa^_iGZhOJ(2;A)w(=3)ys?6&C|BQn;ca>zv`YCAS8z#2U2QP zA45n+yhHbNjJP@HHE8KGf##Qu)>TJQsoXucThwSon zYx}^*LqFL4WmyUlu7apN zi8Ook(#N|dK${mDZ^AFaBa$%i82#8aYx7HEz400(Tf4^M3Mi+Wn6Q(Z9hqPJZE;mh zf5t3EaZq3@ZT?(LfZs9uOek)D1ehIu4C(IN4_i| z6E_aaM=QNW2dC3NTs8QqvERE-p0@3Ac0f9MhRz~}m9(@bWmZmh6Z)`~Z!Gu{guLC} z*VMcru>TEMqnaAI6jHtI+v$KqWTZO8Vzcyh^7 z(51rgTb*=4r$YHI1I#c<$J-vns5gqJC#d*ON&59miHme-ekfzC?$#uHxe2Ynkomg5zmPKuP56t@)aoiR)wHq#@V15jEf- zS^0tnX2lWvN6K}S?a?4EGqy0Pr-Ak!Y+MN}nq5|n^}I@BX|qcjKAN(t zj}Se18p|oA-_^Tx(3d#$7TpHH6%~~<%TCA4=O|Hoqyy9P`ws9KqKmDr{FtdzJtgVu zmKs=;Pur&%xsV%FLA$YTrSseq}94Xcn}ae1?=&AE&67vBya z_avJJN)_zzz}Y^znh89+D9zAt-<5XR{7UC1v1ltEN9(&d1PAA7L_p1(hFaTAC89K< zlCrwW)lO3hZyBH9^5XC<)Gi@$<@RG*)_uoYwwa}1jCHNE_oPo}Lp@4pSKO8yy{}-hnTHyTh zzHnnyajulioe){b&%O5%o*Y9|0YY#v42+3<77)mSqrd$f;V*nm7V@tKud|B*v>a&|z!>n2)GQGo z0&;y$E~RCPoGpsB+L~y3^m*gdv5~jF4XJ?OGB@*YzT$Alc5FZhgSdetG&9X$d)sTD z`kp)Wi|3CE849v17o`XgUa3rtPl}dAvXfxRKM>te8yfXz+J7MCTik zT$mZ`sd>qVDols-wQ-(H#F{{^umAlg%U%vLP4%TR!Q{`~j9p8wuAw6<-{&%S8)bq_wc8>vXyZA zAty5ukhBNRCx7PyJe8C=M-q@lkVXk!HF2c~P>ETb)2N zTB253Hs8Co+O)4sJlou9iB5f~OTtt-0Dvr&q-9+rdB%inh$wAwWhKzsO!74({T2eLs{bROLI^KIn~9LLZCNV5N`$n@ z?O$knox15w%wajZ2sczbG#4^gyp(9U(m6r^Oz@0RSWp83fR{O*ujRyZA&qO{a*$Hy zb8;O=>Xof>m?Z{`F;|_t4uEEim78BB`{)X@hAvHawCq=wZSG3zxop2K-Q3l@>e{~I z-jKbSXp=bSY(Z)~m-BL?0WGEU`~A6GZf0i2aU3_8eG!$>71d@KhRZy*`mZe8oRm^k z)iskQx?k6IeRg)%ahx)AT;?QIRj;&nF3FhVI3AB@_0%FRbJ9xh?+*UWL34@_3I>C7 zb90O_ceEYHsj8~F4iZ{b)%yB+!!S(KbmxARWR1%ylVWCOCLWJ36!w>0)hkDGDFcB(nLzroUvc?SSK=mi7se}>>2x7QoBRHXqPQZ`<+gJ*kn2DN z1_0S?*4-&wI$d{bUIU;_)6C^^^Lfj%7Lu4P+ni-trfKH$c^8PQ0raIMbTAlHRkh4J^$LP=p-`|a%W<4V zdy6|AZgKbd>thsVv)ObyUDgiWnOIv@;c$2jyZNP?TXwP$LfLFq2vLrQUdc#ZNY|?< z3g^7cdFM7gJw3e|y&q#72n5&_rUZ94-(_5cw(U4hZEY>Q(n3iYW0RAU9*@WUed%sr ze$0)zzYc&FLiqiDzu*4~x)_8pb{xk|VNoViz3h5eN|h^w&~-f$iEJ=~o^9KiOvbV- zSKoLAVcJdba9PRaT8D7mu3$-dZAjJ-C4_Ny(axhF1>=G$6of#S0LUwqc?)6ck{zzi zgk3m8Zn^SBMG%PjvlxUaA&fbIkU|OPf)K(v6JmLD(6v=e)6{i+!|s@@FIp}=V&(t7 z@)#Qs!peN1ln_^Qb&1(kDtm_eIbcOmbdP6Z;B42xxUQ?ok-_9lW}y4j(NkvtuYEdQ zpUgECu7uKZ=P<_ee^RPxdL}(FI-5}yMO8H_jAKU*nF0edySsXeh3vD>JT;vuk`*l1 zvL8^~jKQUpQdL#)b>WA;dNeaTckJi|!5pr5>*}jKn5L#DX0wHc`i7ydQ+XEH+|qvH z&;bj32hSbf_1d?AV;nvFLZZF%{Lv%ryY4|~?HQM^HFc*#Nq_(O)KtD`8rAjn;c&># z=O(Ae6<znWE zYTRO%LNg&l7fyE#P3_rzM=btIlhBxwOlmrx&oMQGvzhL5{ZkWt6UlT%P&s()Ofa4Z zR3&C7hH}zpO-=c0+ncMS0@Jq5xA__C?A+#*N?hK!1dftB>D2U0!LF*TI{o~K^h~m^ z=e(x+(-Rj)W?8JZA{fw5o*Sx+#|8&x?%2N%94lB+yQ!f;$KK7Y_0w|&j9+E^jR-rX z?1j;M&`XPqz4BBJBm}4GmTfykCMiR~0OeC@*4Wk-4%c=zR*nu$G*(muf+1^mQiek< zO|2>h?l8@-HgvS-GwFC`rHbJO6;KE{juonD+0qaj9vSP{-ZnZg?u*w~R@XMwZ9+y0 zb6>>otq5vkTu32Bw7Rk)5y@mrjkR&cUR~E!KuW54f=a1xDiaL_VS{N5 z+z)4FW^CK``Fv{+;lN0`MxGFWF_J<6!U%)_j6eW@6c`f;Qg8tP7-2vFQX-7`nl5w@ zLS|=YM@L6HIy$^wugBw|l$L1>+_R6RzPwVYTD zgkZsin~wqz7J_4fg^-jG&Y6@@cB8nHCssHkbQ~v{OvdAJzu&Lx`nu!;-xwN$%Z?Zz zjJer!exPB?rbIMyoh39?R8>{b%APMkSoe4|O~n|w`>B*ta3LiK&IJG^#3e8UgcU`h zib60337m5m%?M*ki4a@>AcQncqmWQ>E9 zoN*~7=Uf0NilR^=xBw{`V^RWD6pRrU0uTl%0bzu&s%dWT6h*no^bb|jbzNUfb0vkq zYRi^Qh+mJB!k3FZJkoP+&P1J^9bQf0jJXl(4r7EUszMxx*`?gUg9pGL+tS`DxCloB zj%8!25F{W40A33fKW0qJVbnv%6Kr7oTR=m zw{ukUT{zd{iPkpP#s>!ms_GgPbaSwPA&g|#@guXQvu(%DXwWMpNWl>zQgDe7b8L6( zrPoh3E6IVL;bcA-q;r|fNOH^@t1jhc{Xy@sr=Pj)zSqvAQk%BjW=##xOyv^_bX|a^ zs>-vY{gw4Cxv8F_^labS-uwKI{_39}|NTGxEY1!+{q(`%-tJBJym74W>9#vw*I6Is z0tm&=eEl0w_Lu(n4?i(@^vKbHT$Q(Yy8D8zC~tn-&&_n7nk#`{vxWzT1a~lqK(tbn z<{aXuPOgOfHDTq#_)JTCo3_5P4k2k3&K*8R>S}_~XmHZDY(6-rtPC)hY5uk zGpS60*%;I2mJWq;1?+Es`#T@_;0HW}1IBhH^~FE?+&#bW>n)9yFP=IQ?!4QaJzFTz ziJ5FA@m7ZD^UpkY*PDO3B@tl!CcrcTRy=dyh3ftH71Gm_!$rnyZ!l`-rb#fN^FmR2 zo9h$T6VMo=*-SoM-@1Qm_3>ke$I_-fd1PuL-MYEegA}W1be}kYz0vl7mK^DywyW>n z-SFH~FL;}4>S|bKX8Pp03k^+8EjxDZIC)A6NKK9xsPC6P@V+1aTb?;q$#TO93;OI!8cGtcpW%NhKY^#t;XJ#{IedpF>_w#+{`mm;qr6&9VJ(qWU zUP7a_Z@hi)6F+%kcrtUJ?!Tj>VV#W`07ccj-r$87PftvY`U9Z=i5C3Jtrh zAz$yAbB;HtNlq}1+_9&5>ahzB4f!>ann+^J8;@4q_uwv&js%G{qUx&2AX3}Rpg%n| zcRHQS7ILRfo@;;PKE`j78(9b=kIy%Lq2Hu_h3PMUEr9?aLxO?ZOhM7z@5{Ymlm(I=h zjgBFYB7{&hP4{>Jq^c-H$W(Gt@ddmp)l}Uw3gZ(~60oN0nx;trkLD>&j~zO3+86YL z1dP?T#)_U($8)Cic%tnc9pQkly0$(M2_!0OVk%5$)A4956plm#UcTPv5eN{WMA7w% zcr+XgR3s`w0iVK|#Y89`HjR;i(M)w+TT6XgLv@`-wVB~F|MJ~uZ`-?53O1cern5yt z72V^d1Pe#Ro10%e_57salgxAkRfLf@;LUG&*dq(GdGqFo>F1o+Hh0{)_qK2#5%iLw zl-)KRYx^p&*jq?@OAcbV2tybIfLP5n#yK8^ItG@8$lbiNGSQqhPj4j)i zQrNcR@dai_&Y$R=xnu8k4Y8-5KK$UD-|V4~nN8WCMuUDp$S7oy=A+y)CDjo#I1c&L zxlBG34pV~H*UKTL%+5}i7^L)*DTKx5|z1J#c9D%&L2LVV4m|!WK zOg1MmjYT4=sz}Zl7tFEU#0Lc9>FFsw5D9tIsbo?MguJS%>6&R2C8Ctzo5IV%nZu~6 za)%)#^M#_S>k6R+Bg-rqOa{E3cszcc-F6rgge2#}_Zx zGREg~wE_Z=oJ+=}8!@-;ZaYFKfKU`w(=?FMv_)zvqxnK!F9sa}LQ-%jmOx6EoRt#d zdOQ}W;;zvsbxoy|NFf*(jzm%j2~tXl5C$PY%A3S(hmfWqRV4r*1S%PhloBw;UJqjq zFO(|c@#}o_U8cu$!%yD(U%xvxk%c9RLcn4>chvl^-+I8ZIRGpq2XbL8rBoD6O2H+( z9L;Xs?vXF3swOxCgcW6;u@__czW04^*REJ=bW<=A3!G z-p_yj^9K$b06;(g_Ru@uS^&ZAqkijiwv-kG0_d}!g+Kr}UpA~tNKLJ-H1glL;KCEy}8 zq!6OI+P4yYRV@{>mjAV8VatVb;X08N8G{^Ltu;YJwSHal=) zFki9+#%&7xr`w{0lKEG*Y-F>W<`TG~;8W)_-}}}OAkZ|`y|E%pi#_%fb{zgI?|~a9 zILY1O-;+I$G8tI9i#besYiv}5U_FW3qy#DDop;tXG(fe^i)_+Qq@IRuL}cmYNK-EXLW^Xnut*0)WJ@mIh4;{ErxFvfoH zgYGxJamzxLBM`XJdE%s$6yutxFJGhrqlDs~@y~}vOCjJ@mdudeI5PtPRX_I@F}@cm zi{DCGHrcU7GPdq*axQ-7ckaq&ZH#eCOSGI1z%@fFDttHi{0S-j3i;E{kSLjeF#<^# zgYqteF`!$3zAgej(Q42!KVngP)0Xm)rwjSyMtLvWoi*G`8PLL?H2 z`uchR6pq9N@&l668-@l8qygbDtcD~+f^9p}vX?$AZAW4JrV-LY$XG-d@RnLI`%%=xY}~TE5do2qLa?LI9MP z?P|!LrDVARh~;iBNQpF+`hAXV-yGqioX=-e!UR#*8z$#j*d)OfiNuX{1EieMU6t`_L^UC#p`oErD3m!JS6V+VSz|OBbt6>> zA*E8uwr!VkWog$gO$A0Nb@>F>ai7^RK)WO6GFM$%=v+51hpy`wV^vjMvWPXak2;PM z3WZ#`bh(x(&Q@BkE`iA_k*Sdo;`8|~O%}`;yAJ%&FDZ2wc@16a#5J>z>bmar zdKUuP6Y{E1_RmfG&@i%lUK(K)Z>huaAT-539TE)+V7j=Zd1Z-z@`LQ502G%YQEF z|J4B66@F{uW?$O(OV{JFm%F_y1KP4I&bg|p%hCszsUk0-P_2@q^#-&E-JPwRynb0J zeoX-FuAzkkx)O!BJFF`qZEATmP?CBysSR3wk9)~%;@N-X`1C>HBED9XsA#qtTfP< zc*V<>>FMdQu`zd_b!#pbi^IdihGDFPn5$_nnM_VhOfbgE&E@m?p`jtSxs}`tYsS{Z z#Dr_wmn+F;vm+xTF1Pe0rhJ1Dc7rrm{uiB@nOP*mT(`p-nml&w*!1)?W2~j6MM_C2 z?e6X#7#PUqa$B}+ahJ-XcXAoX-N4o>)i(|wKAg|z5khr!b#8N~PoEwe8#7I_qoZTl zA#h17*Kkf|+xFqZhfUL@lqM1hxAGGwPNY&P+qT{QF4gcX%W_%Sue7;RsdVJXkusC4 zTkY}V$6ca$x4%o9a~Io&k&C)^*oI-+B|KlLIoB@<05lSbECRG;Sst$!U(|8Iy~8A> zkl>P`Tm%PSq^d=u(OfPUiA3DwG@7QxVzKe@@nA3*2n1a9Zqabhr=;+B-MFAdv_^}z z3;yzpDv?OUbz}Mce%EIbi^Zm=r$eET`^i$3%hjPh9*>j)A-uFjOcq=&kdiMrpbmvX z0N_^cCS-|3BCeOv?eEg&+@tSsIJ~H~a`(szOimt;ClClYj^hrUtLlWqVau}0{avcd zIgW!c)-DR8GI10DU`$+v%l!&pk9^>^ZBwc!7egaoRwqJa{TeDu2Tjvm1iGe|tJxAl zKnlxt3WWkJ8_VH1OfuvAxh^eSxuv}c0Jv>1P&Eo?P92xtScMl&rj6}eI~BTkK(pDb zD{eJSbG>8PY_@E!xvtQ~5?TmW%AV`$2~{?>H`Tlhe~xkD*vW8p12!{U3%57dp_lit zP$;-stlJ#tJe$qB0$5d5RaKWBy8u9Pc*s{-&vVJV^f%Q+7d|jMG1NbqZELLRI^W&4 zeQ#ytrSMVHG~Kh6a_<;pi~73+&<038Io#VloZNET?aejum%WT#>KjV7x3?@yuvjb> zP1AIbax_g-6vejfh5cQ+ejLW6V@zcY)h?K7Ab?RM5qIl0^Ror6MttPxkrVNT_O|-U zb&=3!e)iajlf)mZt*C8jd1>xAv(B746|8D$sjFBw3C*~XnR@YTU!=Nb+om?NP#_+! zLh#hs0QeFWA#Wy=iAJO3)1UtIQhj7@Y@la&+86XuVZC^!tLw!hY38Y`jCcdV@&5Bu z)7jbCbY)GwN27}bYS{*N&mi1STsv&pQwdjQO!RjRP33(7A2%F_75XmpboKQ4A{8Em z27~@{$6v?^uT_}wMytIlS!5Kt$7yAUlCY4+drPJOho3g*_z74!Y@)v-R4|Wx!b~`{w{W1ONfTNscf#PvNDs+ z7xFX11B25!GZu{$XGfns-rd>RzU0Q)d~>d=u3WS0ieA*;mq`aMC=&fWeW{tLnT)Bb zsF16ZveZIOXP6@>xpY zp;$%FaE~NZ%#ByJb`1BNlv-^_PL`ZaUa!BVGCFjAY-?vzX)e34Ef-`svbTx?zlHx~3`A7m8xVI(6b~=cWp#1S_K9ikiCq ziL;gfZM_Rr@ZTs#9(`stzjChq*Hn-3_wp94}qwzY4n4)+zH8(vGh&5DI)B$8w1*V1v zCvwj1TU)!&oZqzb_N9)YMa?aYpIp(Qfl1Kk4_AcGT{x%48aD?R4aPN$03aCfla*b2 zOMAEUlcl|jg(IfV6BY$M9NygCI++)Vh;L+MWOMyiBRz5G#M#~ZW3X-*lU`p)QIuFk zmF5?Mr-nwy+i$Dqj&=5Icf6{GuAl!!jbCgT8ShE5l+-@-PG>UUOM_+ zF&^O8xn$Jyq^9R%d*O$ zw#({2xm+$9jnZY8f@|+D5*e;kaH(3?eLh??FRdA2d`%BCmktoY2v(71^D5ff&~p#> zUfD~@<~C|P*B8wzNuQ;KE`1?4C)~!Ar4r>@JLhl8Q?!dhVM7DPH#p8|mCcpGBnG63-YoY=Lkb#Q2E+qRCu-gEv$b4AFzhUL1Eo!a2$R*4gQ>d3)!y+aaE zZBs`C6%L;stgeX<4fOU73>dcEbN>d~x8Wa+h@-vPas;i12gjIjI zqoZ|dbZ~fL)+iQl4b$591j*;pbCfDG$>ek@Ii1cEZk{@QmMAL1cxrqoTGtZvs(>I` zRo_?}@4L{I&Kvnc;nvWt5zrltb&UqYWNr<|H7ahj qowJC_mUw~+zBTOYTgqI+|9=1->x7Nz`NVbr00004h-Q8V+Hty~cBv_E(F2NyKa7lm=+%>pE@C26tud{t~ z&dxjk|KI!GxOb#Shg8+9Ip?acW>wEx%~*sf%1a<2;35D3fFva;stf>7K>z@80tX3h z*@<-qR{(f>Ni8P;c=-7HKL{W-9UA};6f8tU6cx?wob8; zD#||+Lx~nK9N`n}I&p4P;Oo%vzUvjQ*H%+4=bMAKwbT4tWycwBhhf{`5ECU?l-T?c zi-n&&S`O^)>{?l;7YslkwFgk)-kK0Q-8_W=E_``;X-L{&-vJQr;}7A0Ho3GmM*J6d zC_BO_x)Aw&f*)Q8mo z93sG|6dFtgKzjiOJx`yy13@VOy7-X>?^l{~)GcZ-sg!EoMp7=Z03A3w2Uraa`X`h_ zQdl(T?1qqrse<$!9w|7?0jwy?#{&S69g6`T?eUHK5OVp@5PMV|vOe9;dzd>CBcrw3 zjp0&zK>%2B_8q;YWq6D0&jaIcbDK+c0B!#4VYbV8glRR3U@efnJ*#nS|DBCkPE6y> z%*OiqC+SXM9m75ipIfsI{Wgso>q}qWZ|A4W?^a0znDqiApf8p?22N!2@rPf*2N}(8 zMoWCFe|YzeV4S2=%BWG38huR(%^^xOHS(A_pCnB971c+wu{)F1CE9B!{v|e`(vly- zE0(TE&lu`Vh5}X7xo!0v0FIjN+9xRCp#04PSBBm04h3!`vdI8{Q>j-D0PswdlwP&( ztw1*%0ElJ>P*)1!owQ@qw!z@HKbUWS_|1SlNSL&IUlu3@DjdNbPm1@La#jZQ(aLb;=b=FNz+sx}DZ5I4t)+|Tp)t-| zcUodAq|y+V0Jcu@s=*m=SL){E8-nHtzLMe`E)f=K7LB*c$ML2DuxrT<7wOLO@LQCH zNyon7i|B_`t5kRetg?+vAYH4H#H2*cQpr-KQi9i%GDH5O16@W}GWb`K5=<_=D!u%+=aO*3z$ZKX}8 zE!7)nyKB?d71cF>q^j4o3$zaET5N;0xwP^%)wK2AioeNtLpIg?rn&G@VWWJUd}-#C z*@w!nb-i`P^*EIqpJ3+7>uljM1jq_>pd3nPJi}Yd!xs*Vgz}Kn9 z5uIC|dogt={XoFy<4NK+gPGhLF)wYtasRGk(XDrw^qW>{v8PJzdv5n(dV`{|ST z>C^DK7J6FOrJYY5^j18_PBYTprgiKW%~c$*A6Oi`n9mwu&7#WGVsRSz&?B;}v@t61 zFe`!4YN^auK|~?Itaj@ugE2#_#+&KN`h2&NbHhU{{xg2ZtTp~MUXDfPMJ@dSj<))q z`hJBEcA5IYOCo+x?@aDI??!<_e=-O&sIUN`03FEd3r}z2_fZ1ebD*>8nSG(i>_#CB zq3Gvto^Q0jAvW*Xi+MwQzLh)_J7j?ztmylBY6RAB(=g(LFCsP25qY zBsRCvc@d{2(JRqJ(Zw_~CIzkvI%zg){t|ji-dT<&)+T{2dQ+`|NzDvRDQg*gE_&*6 zc3bOrOW*d7U#w=VK3wy{N@nQMv-iju>Np85#4M&qqvcK%lns^VjQ=8pN?n8*Np|$u zjVubmql2KsjD%s7eKhowh%WUL`6EecInP&nu`O&Kq#s%GX*U{!D2iiRWRYYS(zr7* zQ(cK{nEAL{nF3$M#yAL<5X;5YneCWun!5Ivfr6`VKiWprGdxLv?X`LvQ}#fM4xvuC z;IpbW@MAth;@*4z!h5b@?GO8gvAjo2_M* zT-Ce|9&-q57!PPd)M3ha8^Y_TZ6*~;_cfBreOt*r<*Wjpwf8-5uZ6JMeW-@85$v-& zKfSM~pvj=MRBLz@l7YvM5f)yKK8KZr;rEGh-hBh_gzOX1X`RPi*G)N36hohF3={?VzOMbB>%bA%}Ath`zt z(#NX37PH&W$K%Y7h9ff)GJJgLFXs*Ba_hXdjE9yiQS1(zP@PxC#O@-tcv^UdbdMUG zkE-W39&0pcq*ie2+w3^+@ZQFaD|9!fH>Z|2>RL4(c(&GhnVxUsWpWHHoV0p;#k`xE z%;e%*Xg&6{JO6lox`esl>qv1k)ZaYgMse__MWIFiL~vhdMr7f|q=3%t{HMctKg%|^ z?BmgSiF26Xz~S52(`Xct2hl0f{UJypyP2H)TwJRHjyK!i3PpxZhRHLrZgX$@%ds#S zd@m+xU zQ2^i-aJM%!wgNd58G+0!Z23qIo8OZVS(xyVXt2pK%Gry6%q=869YHFd@~Xz3R>oW= zBm(>hyzbm!12!OMLn3z@Yg;F7cRrF|>~e$4-f0|&X|#jm576jo{5c}gNuWfh#6dGVB}Blzf}D&UE$p2w>}-j?+ch+@b8+S)A^Gm;kJoSGva$cek*(8j?7$Qm+zss+nCKZ9 z{y|Aj?#F62Hvd-B$yv-5d?mk)?B6|7j;L1L~TTj!_$?jr1eKS}(1 zbAO2caTF%Te`wmfI9mS#*uZbrtx82Pp5JsWc1*f%kBHvCVl{H^bO zJ9Z`(rXK&1l|Os_-G-bTx0J1uv!SgqNJ^9+Ja&2u3lnY*E<+(VlBMv$yCJ-yw5hE*|3AoC|%*kxRX~gymO|YZC82cAT3XT@weaX=JFMYm`#RTk( zmD$jkmC=xkj)@gyO2@(UeJt!8-(9e=8ksV4vNIX7{O;o4nE4l1k`_+jX!7_=l!0UI zmz_riV{*2z0a;tvg8pZN zQvD|@|38n4$k@)_<9{|Z2}eVFb7t@^eUIM%B_m_`AC2tS`272#`zxvMkp5+@{$*MG z{;4hm&QiXA`2H7{^grYtj3!)MoU9zCbetSqoWJEBAP^h)*uiRS%)-WD$jk=LJ%0Rg z@(-q2*tnPtIT^pFHGi1?*RVTQ zUH?T3{LPKxuV38oJ1I*D6G@4QurqP7v(qutGyT=fU;6#Uj)^h1shy*Zp)^H`Tw2 z@2hJ4SoN>s`>KCxs@YmN^E3bE?OyX=w7#GDxPRfS0=_)~;s+1ye$)NliWcr5YfVw` z2a&DQ_w1VM`=EYNx-a>+np%Hqvi)82FOuIhe+{p{+(!5%<@mJ~e3Jrve}v(W8zldd zjr@_-|F10kIi&xUR`1#R>Es@eA6I|k`Z1q-(x15Q0r_$DC$1m!xhMUJ>mHCFSAXLA zF`s+VpSbP;`Em6pt{?NcC;f@*9*`ebf8zQvpL^1uxb6Y@arGyzAM?2<{fX-ykRMln z;`%Y4d(xk{?g9C6^(U?$^SLMeiR&JaA6I|k`Z1q-(x15Q0r_$DC$1m!xhMUJ>mHCF zSAXLAF`s+VpSbP;`Em6pt{?NcC;f@*9*`ebf8zQvpL^1uxb6Y@arGyzAM?2<{fX-y zkRMln;`%Y4d(xk{?g9C6^(U?$^SLMeiR&JaA6I|k`Z1q-(x15Q0r_$DC$1m!xhMUJ z>mHCFSAXLAF`s+VpSbP;`Em7!xDft)o)_y4bC?E4H^vjVx=@tix}McXE7dI?N=p5 z%D)tuN`5n?Ncm^cNcDFIihmY6i+*(j_V#BnOzAi0!NPwQ(O&<4Nx^>>|4+HPe~a-i z!2VMF6WIS}?EVkDy1#^AIe98IWU$dj_8vp(JA8<@gug{87-ZS=D^eoJK40J{kAhhc z+5mu)l#c#2iowxVH3k_^8Usy2vU0N>t|V%JuLRWNYn$8!UGuHY=%85RYO?jecE2;8-^*##Kdw*YHm@ zEy}Jbu595_o;A^o^>EF@YY(4IYv%C{?}5W%hUtv|i!%=s^Kuvr(g%_Oq#uG^K4LV7 zQ@dS%NQhW6b~$D^X}J?w=4K>FMwaxK4*O&1Oge#01&ZKdNkNPm0%D-Ka2hu(jf1Iy zWoB2K;L>nvoeoO5VM|ArkSJO!A|Yt06b&GEKZMPDjHrDT$h$eaIu2P|J<8mFgIEDYaIyy4=)(icOv5 zj4s(f_x`fE6i_M1O~kfbKHiF!_sjNRbbf@D%>n}2Hwur@C|DlMy(lT3itbUcqky65iVU%-@uq9 zU=OJ2s+dKwoF(dIprXRTQM?X7Yr2yR0|Z3{1=qV^6O`@!UMhLM)tZ2`#t5WWvu>6- zyfN!P%PC=UnVFx$;rUg6@ZC7)Arzxk@V97*y3Q@GgBlEn#d_0CpR9A@ z;rhF8haKr#iHCZbts?35M!h;XEAubZDa*s&U6gpp41HqJv#FO=_RY}RS4&H3(_z6T~#)ii!F$bmEcgvzOOSWI8IQkS|Aa&my_Bt&Uh8El0*nzLMMw zfg6-ZAsafao=q#QTin(sQ2C6QZ2D5G*^9?FN*!T<$P$wgx#1Oj3bm!}PV={d62c@2 zpK-m6E#Dd?vWFX`tBGHp+u8EE=iG#Ph9`C-#4pC9if9(q*A1C}a&_yzele+1bC!Re z23udYoKj?XmH&`3RYTcBs<*-<%PJSn;z0r#-TB^8!jrII_V&H^oTna^PVmdz9S`kU zoJhcH&%uDa37)Glq=$4=@#N_9+>+t^@;u`}_BPFz%ZP97)q+L3(>FA?C#tsZo6iHY z{40ex+n^cQUAV%n-tIO-Bv5Y17G|buw~okzqwsZRE@<&NC}~ku0N*Ku#r|k0w;GeW z{BbLoB9os9b4@&!=yRgvD|1`nWhUd>-q+jd|spYJWcZ#GsMq?bNAe- zM{5SsBcY~aVf}ZHS=*xG9Me@7F}!bA?G0@VzfL`04WT(NaDz`|g?YGZR3$V)M*=0) z$V636r?vAE&qM;Hz~#-BPoWq&yl~hks5*VDKcn|~IhqTUb0vN(cxf>;*(Oj9G7Mva zaPsrhaii<`ts{ zWc_=J3e7!qg|zp8bHSnd#lWoi5aLcg9>PCsDUn0@DifEUJ=6e$+ z(TQ6eJcwux!lBrONgr;$T^Hxdl*(j7$HDbwg{0wm;8b1v1aBK3Z+p-DTFByKd5PSc z0L9DdbM>avw#&y$iSjUPunoW}wOZ@y>}P8g^$>)ZA(IvsqFk|05*a4(dlR*vJ~TWj z(5HQKQXq$rp_+@24K-3-r=-gD0z*2oyg$`*2PMQDdp5Gq(DP6wu<_efp=E4w)PCft zV@CGYdF>0XmT9c_o2<+~AF0!B zR$_U(+*`aHUlb3_Qbm+DcB;9Ak7ac@MaYLjdEUD0<523{`YdZH#Sj zd@)Ni=p2*4nsl-e^|2$u$wD?&qfbh0Gswv~S{cMC5$MgDf;+8Jy?VnUA1X(VCYy^%VrpQ5&Vv;Yi`p>d@;l zv>d;OXxU;gKh}jtJjrO-nl%W3~EFGI9 z9(uuFZP%Q$D>Eb0O5H<~?W_Iq9r{?E&q?RZJ9B0p69x!URFy;}a3Z){H-#Gy-;%rvlbr{HOa$s>)&p%bM?@6Ek) z>BsD6p6)(Fx_Bu>`sQg=!~AtqPn2>zP5ap0CLsub&(`s0b*$iNOyC5d)o57pj%+#@~zjL1~MIQZtk9yx-VKF{s=;PI#p2^qWuLbrS&eRRIK zviqCf5Lxai*Bw8NiTO{J`%k*CKvL9mp36rmhh{!IWQ@uX5*7L9-XhO@4r-LpLdq*p z$Pn-hHuFF!A?3{+wo*)}=%uIJhR-i3+flzb7~m|sW+vc2mK0G6Qbnjnm0DU3F6jJx z)HHi(wxa8ipQM(4Jcu(`8i?f)a*4Oxs6O;4JI--RCEWk*#+t6{d`sa@Iq$h)7%3n{ zg}-g0T&%hknt?WLTRP@;`6jHYf9{-j^%#q;!Lic4R6sXVQZD-d6`oWMUg_f`=F0eU z)gs46+*Myp~W8>3bOXJ)=$du?&s9+*604%0~Ju`$46Yz;aI0Pr8~TgInx zlu?6rAhbgUP1K*er?;+J3niM}NU6}s>M%F%t2(Rn`F)=8O=|Fue3tq-b1ao{Jf0_d zpV*G^T5Bsz<#1~c&=M6LBS?*wCmll48<(CSdxGbFeQNjer8B+hMs)~^S8=k*RC11@ zZtKD6x>u4KOZe^=^3ARlWex`$P|?Jk<`)Xj&yf~nNJz5h5?NO^I0l~$EDg*JK4)8H ze@!=4lZicSIl0j^r+~Ks=Y0L8(3?K{$5N9xxKWsVdBQb8h-neUQH)ufnGU{hUkeRh zIF&b{kX>g?luK)`dlnC8bZay<0hDv^C2f&|JISCFbu znSmNzqkij+xcg+Q3awbktI@7N0j5AKB#|cVag}sjY<$@Tl`NPn?E`7GjKCG?vEH+n zk2G(_&W(F{*tMlf46iVNW0{h@$KtHUFK3KD!}U85_g#xc@!UPVdYVVko^OWDZU>mRP{2%2Gd_;xJwG@PlGKF{V5WMj)BE=d*q<4aHM~21{B?aJ>~uso-RqER z0TB~@0|n-Qq3rlY-{b9M++q!D{I8yq!OK^Qxzft|Y-A<1RsqMUFx*ftq0EXL98W2Y z+a6&<4FN!MS{2*eXDLV^1{ybjGzJYHo|dv97WZK3Fpn;q6hKAzq6b(7EeqFK;8U!j z6{IGQS4KTl=VE-5#|C=RtiHH@qylrvwRth{j9;aH^P#6eBd*eI_@|*f?}EDI657Xv zQ!=~t*7V4gDULWo1>((KXd#({grr73Nfc$(SNnr6*>1x!t0uf3tn|+GzKRhYi;c>V zC1()bxPqe-QBLPOMd|JA(WOD3T-e*tQ{_KJ2sR3o+SyeI!?m+$KW+k#s7KIqLNZ!= zTS?z^z%1H9lEg{T47@>rZayO|92*|-?!M)hZMseg1SyjqAv+3KeoWQZBr69gJ`ql38ERvN}*) z?Yc(oT_?*h{`PYp6aiNXfvX9@{;jhl2H#!P?uey`rK?i9*hxF*c)1g5;(>Z+E5WU7 zCPvl~#7Z`rxRMk}Rq0|VAQCdyrdm^}hzI}4*B8o7^lyC!mbEqWP6l$H2gJ0I!oi0m z!T{sb8w|Wp$>89HpAWV@B637x>GDU{lbxVqDoHMlOI>4s7ivqp$z&#vLUriNFlJ1J zx!(H~9xh(A#+f!z(hPru){k?28Yf#aiqzfklPK_NJIt_KA9rN`!a$p0OnKCt7U?#3 zOgIY$Zke>JEB7%~rLY);FqCr& z?~Mc(7zzsZ36}ICs?#J@tdGW~dR5Vb18pWDG<~R)T*)V5yn*`UOfX+7-xcRnNt41f zH^IDo1G?qyuq=Rj97`G_%$-uDX-V74zxDFOEsL7gf||-MbF#d0H5Kogp%s3N_?2WH z;%kjJGR5HrdZDAS<#J-MNmYid-1GC5c1lP_nVvlC^LiSsRuA@YcaWdONyj5)A3opB z&vRHtbVkO7)kxdHXML)NdazbD{PJrjb{?89ye_9F2?qAd2b#LL+8t(O{`in%h^x4H zuM7(9&D#zI)#L_oa;+mNwyBhc+FkvLP130z7qdnkPe>$StGPdSY@a{yU|}3g$mg?j zm0K|xp{?YE{M3sL6G4Xr0W@yE&8-VfHZOE}y2qE@vDx$h7?au!V19oPruUL5+nF}} z!GzB98qW^-0Bc$UOG zG+}`Q21@2;6`U{Ejwc7KUw8GGV@Zi5xKm`QXYllg*&MoO4zbWDt*!<}KjhBd++aO} zO37d^nJ6;)5W6FA`C&`nLPo0@nSY-7)~Mz(Hc|5AWW3@5VN2m6Bv81UPXVjV|Gol0 zeT9YL{mD_-P|^Da-|luVWOh*?w=jzzhZmdca&N^s;e9C`#1|y@FEZyG4>Eq~e9V&Z zLHp(%)C*)*EUQME4;lKN_7Wp}zFQG~X9HA#xt*2INk43jvA$iY*Ed0oldOx~q3Rdm zv--S_xsP4>E{d;HNr21YocD$E3tBa6`5#^=IEzDxoesV@;8G=2sz3L%I~XP3CD8C` zf>Gk|c*W!7JQgRlw#+sC)E?&D^B^okbP4h~exVrY?Jb50WaK1iNGZ}h(52{Fq6Q8u zm5@0lG#45)tehY5~OaH*=#&>Ye4BJY2}GE}Hwm%*=+2(-Cq zlf*tsnGo!AHnAiSU`cV_6TX(war5@>I_gNp3m}E(;Zd%Dpyn(2BzQu2H^jns&3}Ax z6RSF0wUx=Ebt_0CXxRW;qSIPF_eD@cZwA6&wL8{qc9;M3BZCBMXoklMUWLo;5Z@`| zeB90`jP`-g9{j_m=(>!>6Q1)49blAY$?r;Z<|dl|HZ);J;P#snMTEfn_p}MkN2KaE zd|AzJZ=5HMU+l2@e@e+Lsm26C#k{g#zkhwU{4|7oeNIrtN^8+cGWvu)u@+Kr zZ@zz+^V)AK>;+wD=IsH8{_e%T7cQ+!M1@tJgYY=PG|`T>I9uY4LoF3JXVF%VB=O`w zRf!@L#0_{->Bixf?mhe&XBH9AbxOsH)+T?{0Chszz@b)CA1&5xB~!{EMNTmXr4X&1 zM5$Ci1hbpKag$IyRyL5T-$Z{gIN*K+C)hzO((mSHLY{JDfeWYe8P|=>k~^h_^#FMv zFLi5&bU)Gp{OoA1TC)@>GP;Znju8^TUsA49I0V_1e1qeZmt^kRfFcf}|4UT9l@J$I z4)a&@jzXutunKm%A<9RO;E99j_G)_a#6E|Nih3>x(D^LbeeCiwb%h;NEGk;8jYN|o zDt<=u5r$;a<4AIJ!Hq)#Xe+T?R8myKfbjp^)>uL^T!I~OCR##*>py9KZj8d3Do>pd zUify~G8bwKlI~hNoDK+$I+;?#YV4YblUS`^nr`Za1WH?q$sC(X{jT~NMPGQ8l#ry> ze>m7#1%OTo`ou$?hWc5ZMot6aTPH~*HxZYr2SEE#*XB?XGNILOl$iFDt7_%k=~lE2 zK66nVPiECEe`r^Hv=5%%orHv6yCtBCnFy@ANO5gL6bM+OxFtelMYxCh61aF-6n= zd55K6oZI4Q`Yomk`nd0+f;sHmX4BT4F*Fa(UjR^)tK zoI@l43k>#=j&~exjYUOAb)MSCD7;nK@nn1?!~HI1NR*qMmn6K;N0)R=C1jX4e6~05 zxvA0_&B4RfkL?bAYRRD7z(B>inc<_LaW{f3_?G1}96_3fjg|A^n|O9%)u*{bP6C!Q z=T~Wr%&a;Y?m5y6XjGSQz=Lm_N%tE3s7> zCvSCQ2?f6V4h%6QNuc$~*S&RC5~)!09aSaw*yLv#I4=8ao}_M4G2d^IQ@l7D8_G=H_4D9_1R(;Vj3}+!>OHN&OtBcL95vRBoIHs>n(-SwGp{@x`ZsUr zdpy(}n$XA`^Niz+j|D}FZg0PSy{%d~##>hki_#4RztL?n$;C_0U0bhPIBX^!e#uiT z>(9Js;p9u=-l4XGwa?`nEx~jXE*zh9Z7R;e$iC}*yZ-5d1dara#>m-nP9h z#c|*^9rQKete_f75E>46dG5EJv$pyd{BI-zbsJ9UAfgHmcCeS60_WI z!w+d2J=O`2C;!%7Zi4o>SD30`do)b7U9@DmLojeya^HeeLxru=rH?&bQq*5Cs530| z6%&3$Fv^0b?pFCZG%75>{WWot&ymNGZaM4IjI(lf(zI`$f=q$5@P-dG5t}6VG5L8} z0Vf&YgQ~7aZD_-}Ol(P9PR0mguu~$-AQsh;+;sIkLXzeqyDc(I0CP3JZtlFv2|%l;&T=zSiLQzP#7gF zx{M|u&hRRKi&98^CE9pk@ztoGyqK!GB=gI>FluD=p)#bIZXSIuN7m{?CL|)vXmQzxfHG8Jbjygk_qFdsBJM`HlDm`Gr~59j z$QF#eBWmiKVSS(M-FTI)ARq-DE;9qh^+q=d9!Z|o6Y!0x`z!_06{jaSg^78Um5^(= z$sgFeXP1`j#1tC6UFFO?#LxYpH;MEJpsc9ic3d4;ymk{MVw)nQqfrk$nLanRc5RTJ zka-i7ZL!XPPftU@?hNDvvZ`!nqpR~`Nay#!(2nC+POo_Km?-RRosYVPIOM6ZJb z&&}S7R$bSveWUd=aVfl3(*f%8H#|oZ(<@HV^@%#Cuut%Lz70%g5r(W@5!5gE+(p54UOA~}p2@q` ztFiILOy(bOSD7p1m5u5U?+PWHl3ei=E=FE19-x78MJ zrIeiUmS4gD#v3Quz>{*^<1Fy4dZsG|7Yjmxj(Fh>*R^m#Vso5mzQ|att9JArqHPma z3P;=M?V{7oLLvL?Q#JL*=HiVc$0S|%HM^#vTfpam0gTc)#5j<|tF5o(q_VWZF^SjA z3%+~rvN9jdo;*TYp&f?|2P+z~ht5fbx~<=Q_f$^qrIk1TP4_$B>b;1*Z8My7p6T2D zEkDS4=t1EHNLygq-{JuKVY!vZT;={j)HzDUg>CSu@d$HBTFv<2R?6UdN^|GnPA@83 z7pjtRs6Rdq31eq(C&N>v-Hm#;$Vjhoaa&vdXZjq-f^d?8A3l6pTdS8u+_&Ivby2Ax zC3${6_vXCW79ADRKV)|LW@Xd_X4N4XJ3^2swVHShkX#RIu2A2;*=(m<;;lAP*_$}2 zp+PSh&%Ys=N`EwK5we^?jI%W?r%<_0+3T?ogjrT{Vl6NBj)Vwp*>iBN?)~PX z;tf=s^n}A$pwFRATeoS^U8J!>gfT|>C-{!9-pP56MH<$EtE0ECc1}5~BN*jN^Kjg-vRue%ZvN=pB5;W%DI@Kh72LSB@0z zQmz(0@r`J&Y1$x-Y#(_#xQ<+76c3q3%(mnxRJ3Fcx_OF!H{93s0cdw2rJ=`}y`JBMn? zbBx>7j0$wIF~k^RS3TBY-KK=*7lj@rV~7GI0+3 zdW$IO&?9w0QAQ_fiZ_yE!4c)iTd6G45v_|4&bW+2ig={rgJR^xO_WpLzstUi(9SmM zdJ@8(r!~=hc55+RjuRl5XG%R=q?~JYr(8baGB~1JgXM*YF&N1$UchmTx zI7vkC3EJZb=RZ>`$vN51Ih7H;l8&<4;Vu7Y*%GgM%I*a}OA{A>Pj1*O)i~D2KZWqJUBPSo-sMRKKX(otN zzM0PEoyPz+nkQGQULYkSbTyYHB7Ea!R6h%N?<`T)XhX}h!42!19#(|{x;aUhgUW4j z@hjf>D40#H2D+v$y4y*JLqiy-s0}X`u=ITV9C|j?I2DPAiFpDo+-m~E8unpSr;&;1 zQQqbkmslq8u+fc4p?Ex8_^oqp3dr=nFPwMDx4O529#gtS+@0Ra%oOVgL(iPbGl=DT zXK;39@8ahD&qxUztzXf$Y-mK<`z(&*5%BwAKrQI#&MPl^>4+&ftw(1)Q9lN zszFHwz)bQ;)FMh6+=cNAUqc~X zw3iaK#)WoL5ky- zlVqmR&sF+uX_InrrkZnlc4x8aMYhp>k}b1or37k_gVHMMf`m zh`#?q9HhUdv+MPN7!;YK(bPu3{_8L_;^Y3pn%AdM@_pm0Gc>j zMjI*Y{48$QW}o^FeLJj|bobe=>4OgPVI>!?oD4@#{f3yJ42#ip8D|pzj7WLeys;>Q zR0dU5Y*za^J(jzX7DEifWf zGHto`F0q&CtQi+?V4D9T)3fQ-)Fsh8btI30z0FXY?rA;EL#FO1g?Gie^*D`(zpBxg za^w2g&CPG^B(o~Ak))9IH8kW$Bp`;MfCA&{S=A8D@Jo)aR@|hr0)#SNYZAK;2<+l7 zO0K)>;ENedIfBJ4S>pt_gG6#r4t+l`>lG4^J~vU${FeRo9ZKtCgo4nPoQY$sz7X<0 zh~-T^I}EI7G8UlDHRsS2prqn4WI3Xxo_>#}X5>6`D6m1W>3YWmMI0wrLBu$n5w?kg znKjVHdMwwLk~XY$_o-@hG)P@jePh~$8vKWDph5XU#+$xJgP5paV>2I7m%c&isX91- zDA&LmNYpD{SqW2A({$UgILjk_bgVXE6)$y3eTb;O!0!h!>q?S>{p@x4gKh91&bwB) z)~Bme)~L=xqq)4>^SY_hJN(woVSBUtmWNEw;$e(*6ljd;!wJbSlPxp}+t+o<7}8fo ztLwvo0d^AcAko}!bFeonhy z4{w`Zb17J%MX96n*rF?w5CuK9*>F2(MMW?n%_cGcjE%o7M9e{C*KU}AX0qu3cy9VS z$uW{x`f&mB@itUM(JFdrJ@8^_y}KkxHjmwLsq0Knv3A-#;;nXx+Kf9f&`Kz@YcRw{ zmC4)Bt_saem;7k7%uve;oIEgeCQU?03~qdERUuGj(y5zQ%!{dg| z@P-bL|8k%n*$R9RYbR*`#v|Zy@@aeMER#~S1Q+jo!Q&b^Vb1A8Hdo_5EksPvfaXV% z1WMrBRU%6wJzRFN!O7ZW#@!g-xPy_~jaWzzDje`=$U8eJNl~bWT$scN4hQy`-CQp= ze#@mMCo4TXcHn2lUdghSmYUa<7rG>CGjC{dB5A-!;FY!@CoSY2@D0SFeN}DT_R0sv zCd?TQq>SZw{O|S6m|2)Mv4wg_mD%mb2@$mMAwrC8LsZ?D1NaY8S*H zf>;N?&(MV~bDT89=ZEL@na6p%t+>p{4oVW`;zExar69dF{pPE)l;wJO)C~I^$i8u+dL~hP@L{ zzCB9*e}0u-jyX)=u@mZaXRN?l7 zAPQY&v~DYt_fg~Z;)_F%5lDL@J&I@US1A`yvu5-Q4z5FlrHKG4i1981>)|~NTWb6Z zlZDIM_(MN8wlnh95z2&j?jtqudfoaBwJmma*mPl}*txsWOOp{9foTUeHc3IxTlVSC z(X|S`<=<2gIgt_rAhb;{z2?;V%##OKaX7=pODNX7E+4KaZ7|H7gKMdPytT(`kHPP? z(XU^Fv<{9R9kkxicu>8l4RoQ*U!E!c`bg^ce^oQi!YM- z)WhpDeSWv_vb&;4EaMsSZ3j04d>jS%m!-w{jWP-qM2wyEptD=*aA2OugNCaF zuG6;WAYGg`x#e71&R#ivxrLI;q*8r2RlDd$X}>-ornZMyDVGGGtv zUw?1mSwFUgLy7lXX*~$v|FPp3Vj~xJMwOvbGB%`HSz(s%#pV!?n|_b!y11ZZ;iV*r z<8r|{t6Y8sq^GJOH)d?uzVVh-d9Zb2>aiqIBQ8n+=zSzPo-0jPrG zY%o9%qF-lPN0=^0WY9_aXQc6EI6#)87G6qFp4>(od=K1INXzxCATDb67A=k#u%|(n z7H8?$T2slCI?xJR|2$%@3~0t?haCrnrrLVHZoy(>NsPmwLej&<4%ff}xKa$f%$;_pq=3WT*~UI`27Vg7I7a}wC}eBHxpZ{7 zi-NMl1IViV<`=J#Vuv*35o>v`+-cG|9oH|mGaca2Cpie4wiJCxr_L7aoZ03pGQ2KD z3sok(uc6NO>BfOv0*Pn5-nrw&b8btmFL0|>^mF$aTHR~jI6;S}*}cCr_UbQ0c_s0B zAGn4j2LwsS;80(7Ly%O4_LjALU4DJOAE;tuv+uE6u;^6iy2r!n10!E~nM0Af#my96 z%g5uf^4{D0g77+x5VH^^>vPbR57-T%d`t4p-ZQ-tFD5dT37?Zg*i^y={Y<*Kq}uBP zD^-;TQ)p6x(B@X~6vKc|KEnYEG%@jW+fWAf)^m!(#bh*GBJllBu9^5nMOJ5G_Wdy2 zC?f~#A=g!_tusuR{pZ=}(1=24{z2#5rFNF@hj?T!HS zs~JK_)u*Q#Z;gwSBVH@`?3Q-gH1k69h#_Wcl9qUIYyDo_rG8S{*ISvfK4* zspXyYU7rz47+AcTO=^ZYOG<(eEGr$fY|#LJp_?lKYGOUqKx(ICbnIS@RcbRMENNJO z+4HoKu1e>PHFEUur?cw{yXoY|atVN-%*{t@B+*btPBcoI@DC1DX>8f96_U@RjqWmk=mn=JvS|^gD z=qfk=b^;ZX%BnUKxd(9`2To~L=4;g4)xND?= zk1J!jRt18OlCkQP&``f#HdRW7W?r?_mYnCm(-wr32g)JB0HW2j6cVaTs^o8b9OLVo z5fGB(U#{);d@q)Fmpv+Lo0nsZ<5)1Jmol9V3Um?dd`7za;UGhLwbeCqsNCgB3?VUSq>{KARh~ulZ*L4-7 z*44!yW_rW&phrH41>d&RPa{rFg*dK>co=EFh4jUaEX>FzS7Bld|0aGQvvoBj6NAk4 z|M2!zL2)$U+KU8t2_D=bxCghz-8Ddv;IKe&h~Vz-?(Pf09fG^NyUU*a>i_S~{n?s} znXRp@>YnMIr{71q2~T-y!sH>5#r3$sNt@PxX?|!i+y8NB*_I#vF&vH!EUdZwiB(r$ z0Lgm*hgmm?7<`y2J=ZYRc&c7Tr3*6xyM%0~TybFNt>V+t<(p&Gf_mRPVc2cJiXRN? z8Z;r_pa0Kqd$Q}fv)=JC2eAy>GPwT4E&W1o@Vy@`U`n8W~ zHb|5(fK1S3wh5RcUa6_h>hjmf?$94oPlKtV>Dj(PZW-5^n2 zLf$2ixj_$t*pL*W_u$%&jC{G|09xoN%Dk^&eGJT75JnE0y7tE=mm440K$
    -A?M(1m=xobD;mrRB!n~Ew?Dl_*Zh9Y(w?esinMCw1mIFg9JV> zabcJIMcsDTq3G2u7nzbr^ZYzdvs6aZL8pL-4ywh69Og{e8cUYdo6Cz;4bfr%>i!sR zq|6G8KK0C5(b{0=^XzDqA{e58$&2`rESgJqW%c?r)b)k;EM!-7Wr_Y{_~+a~uA0R- zn1JJD@TAGHO;j1jbEEV#plH`f<~Nh?l`LO290CAjrPq8Sw1JHZ2b%*AZ@P}wx?=-=7gczL~lc(1cxNHqLI#E{BsrCB<~;~lPr&C=9n z@FP>Vp}4s0DX^#wso+_KTwoew{N=jqT3btU6t!5$p>hNJP~drY>#uM2iV23c(M>0T zvBJm$*1prV+a!)4U&TY!e+B?&~yEX-g%IyYAao$(EZwLg1 z_+b9fFb>rQHpJOy&;Lr)(dCb@VJ??Njkxu1^9`tIfYi<8GmKkm+zk4+m)#lWuzOwotig)EP-G)MnUcO8xIZowim&(q;5 z{%@(VKMMRN&oIfpr{oU63Z1_gK3}@3_}zI{`fa>no~DZq9Zp|MOQ(@Pnk}_z3}!ve zw+pKw;Vtl;uRu!K=4Dv`LmpnHJ{@YU4(4$FV!2IdCrN8GemF@R}mThdN{X#FkeetDf$WT;B{k}Li}1Ssc*kjKi0 zV?6g00NXWb^R&t0+BWE^(~XTNwg4VyTA7PmA^J_fqX|eU)`*$mRHUh})`wFxjuen5}#}~%}VAl@s>4xL$o9)W#MCfMn!?Hpq=)iOstN_5{OItcmz@!^E7Ut10 zGWb5i@DMHWf~2*^w&TT-Z-dwR&wS^t-_2&yf6gp3U%(uaQ7g~4&xl1tak$0A0RkT` zD&E*ML&tKZ4g~+9(T2^SOL)3dg%)6?a_8wyzb@gc)%p4_GCdY zSFdNM6Bq!GWt;n5fh1ipKArK9vo(69&PAfyj7i0rvh=SMN2T!i-$6=3nPGPo`~+p< z$u+~*7!53WnZ>!e@=MYS9p5H@41BlLffF+skxkht{|z5e7M@ocVW}V`13d>I^Gm%B zC**f6YwZny5oP`&xp|qMAhrg#eBI3}mm(5Vyg^T;)Ja_D_QD1b(;>W0?*lIWl+$yQ z!z~KTqXS^YU@cniWsc^>nYk-oWKx^#XuXtj`wr_^QErB3Qr$>do1)S()BR!-H(n7_ zz}c%@X}<2~i(llZj(|erE!CjG18$QmdHfs)cuK6Fc;HbOjoSeV+r7$@l&6F6>VOBYQAfRb_2#{auZ`lS|2-X2E*ztn-;5z zV;d0+m3th(E^$rWASO%B-aq?;fUsXUmYZ_15hdU34w=KBSX-ZP!Azb7e8r1NL)z z*BFEEm%dtS!Azf{iz=@ovfMP&>Y|_FQm2qlUV-p2fKXK`ILj~z>JNYo?`C9OcZ=-U zj}xng^Fp2>@zUug6?UF=?@fI5SI5jVxK+8_<6zH#H*G>dUfaUF;WdE(0GGw;3u}d= z?HFlUOF`dZP$SAes(HO1H%liLJDgJL zwQ*3o{T~Z^_BgRv+12bi4+lR2k@);rBO46<3Yty-TjA9eJ|eomG_F^|P$VrQtW77WS(gv)65K zVR2k^JbHp{*v#aNYiud;nGrO{NE9f2LK8h@fxrBe3sS+{HIKp;$CK5-+s+D@BXE2CxWQX=z;<9 z&E1#ABj5>Eii%UrgV>(!kgjT9rpHID(=KT%gE$BbflgbtM{7T@_WXFv6 zlRsM|jfTdBZdvH8%NGHadUL2lD7NdZ)%M&A^44Vn&V)>nzr}jxRgrnc!^r&&!2%HZ z7IYkt6gxgnqZf128J)zQB-b{#L4*#{{Vw0WUsxOD7$C{N4 zMpvr77CmIi8;0EbCm$g@XTs4NKjL!xDq=M;7s;zyUS~Sf9J`jTy%9}j_+cc>-&A{_ ztYyD&5B%!R5Wr*#EbWw{SCQBXmF(fG_hqxpDP;TUv(IqY;9Bj3T z#W%&|(j{#TDmir^Jubr%ZdsdKWB6x7-Dav6##(jM3bhu3p9b0|oUrM+){xWw#P`Rv z!~lt0U3&D9Ld;q`d^VKvj|!Qv*tObkhTK(w>8*GLtYJQjc>2Ef{kq$cS4@xIsYt)fFOBXQsG z<4^6^ z*`7d_Krda@>rcQIGfcjpsNpr09-)frmT@$8ac1}3HyAUMYD=x>Hxf`;sj9~8XAN4OQ0ML|zvU{oAmLMjlyM4x@8SHShBA=`%cqYt# z64s6jxNh-HoPtO3MHLmFe| z&Y!d7c0ziTZCFf8qL*W_Qq3X)*-cc{?f51gH~YcOJD2**WQ}>)is;T};wNv6^pNu$ zFB6{a;7|PN#wu;C+XbynZvv9KL=Mrf&3`)Wv}5#8^~>FrUV5b zSH|P~$VvLZW8?cot5N{WK{&ZzIVF~`Uc=GgxAFWm6#xGdb`a`(HGm`>r>GqmP<=% z6uwHkUH|?t5DPv@qrA!Z~Ii0(=OMMVM>4Fz-uZgQ$N=6XD zY8frMY#1dxz))C_IzGN#P)?kNiiey-!j_maufXg;K19tNhU0q@i=Shu=5h7=akbxL zFZn(l?BUUWAJ40Pg8zDr&1VZW=&Rz&z)(D`TMzHYmiz0><9;=UD(u|WABmog`-kKF zlHcHr6yA@vlZu9P|GEHZ*gMMKw^#CM^NCKRR0=2he(`0vzSJ4;Vm94Bd?Km%vf8va zU-TJDS($3nkZ-tNt8A=7_WMW5uALY7ci%0gQ@uq%O^q+tQ&CEeQAzGMr8P5&osUX? zel^>*+9lHeixCUZBe7#Ch4hnnFPKn5r-h7>aa@8PQzdrvLLDm61lt zfbZJ+5vWX|cMzZ;eLH+*<1OCf9_FuYvMm#JtpQ0J z3;?YK67<0K{$({Ct>a33JUFd=l|HA!c{f>h@@@3bv&!o0dqWrk%rE7w`&yHVs5Q~= zX#GA@Q-JSvZBDB!!1|cTwv4hYLW+Q$&E}}J6qnmOouTg&hdAwvG~)6&7|6lDm3k29 zsn56tZ0csFIX`ATG;Pu^C|f z!44~EnuMgmEDbts%>3mZ6msh(Do1(M&BK91H%%JPoaiO6#GSvs#ws1GR%iJ-z97Q= zai}jNu;^@gun!m7@UM23cXny}HrdbGd3D9HF}A!GiHYy>!#>aM1vnGjM(o&mx*<5B zFl{|_G?IvPM6Sa7ASHQH_dAi$ND4I(eE@zMW-DeWAf8f4+8u`zIW}}u(XhxoA!=9? zjjXukdf=@2&BVarsWL7NJoH$WMZQo0v@Zv#?=CJi+;Okau&-#RrFY?B!4PqNI(v4$ zF!2AJd7GB#_-&0gHqid%jv6Fj{!e+iaO zQ3+KW(}1DOH~b@b#s{Dv6*ckQHoNm;HRe$iZANpu`4$Jy7)S#QE&wnhsj|}{Bd1Cs zm|}504Ej0^c&~iM%sN<|b<1`Lf?}6FHk6mhZ@I(CH1-UAAhn7aG-<{{)2YF1ch!b4cHPuvC*?CuMPlY?C4I2Lv*J4t% zI1!eTza7dpv>ZXyNB%qOdOzvPTJwK7b@N;1vP#5eTqZ@EJo>=MiF|i%1okWbul2*B z-7aF!yG^cQ0OGZlRsyW|EeVa0sV>jcq79+PvVnk*k@TQX6CIG{KgU67rG1}eY(9>zlNzO*WYPWdR|zyyG}Tw#%MU<=@A00M_am8pFn8Ths= ze#Z|N&{Ocnw69*{2cg=chBtr2bDYwF5}G#q`biPsb>%lciCl-T2xNKL`R<90~jLBKKJgS2W#{n_5qgemo$JNPn$IjNrUs-}~ zOjZzjOP_R{*SmLtJxinBOw{{8yf8QF@x8PRO8hZW_~dyfi(FjjN1;lkk}q2+C3o!X7}&Ui82~Y-yeY&M_uO1 zLBG)r>1B*l=rfA{P=HuVpx*8f80%Gl6nqe8=ArP_25R%G#8s1t{+UEHo&yuZIw!A> zpJzHf*%|#>)9?BD`J?~8?(XhVQ3Ss)J1hBXjf}DWUNQyNt_9Zh zUNd+L{3+D5$tQq>afN0VTncRpgZ()+-9o8qZ{w44*aDN)dl(#w;=1EQ>V8}cE-b|Y z{s)1OfQU557DbFa-b5sh1MrAiHoKAUzP?<2w*US5e%4eClw_6-vQ)}d52y)5;>I1n zESvS0nua#ubuE`q!-g#76<(QtX?5NQ!7C{3)3O9w>`@&*oDThgA63cNO}2!xjn zzyh3|#oqxifdNmn?1Pa&%-`y;<^dTW{g5pgW|zwFC{zDs3pM(#5tQQOa~UN77Xbln zwkSq!1t0{k4WdI|di91@==1hL`fhX)87h$;NvA{DxKjTW2fyuU@~c$|6$yxh)-r&F zOvD)!QB40C^mZ$%wR)RU?KFCfFF~Pc3{`?(6ylDqyqbLGMJx1yD()tD1R*%?{`T*g z2}w!r9v*DhA%%s7>%~!y<28wxg+7qk)UFDqGDoza@{bxr*sAAGj2O`(ehpk5@5oaX(dB8t9%jzy zPV@3%0Ra(|Gbxtry@QoG`>1e&!qt!?;LC%~-8CQ2C(f~N%O>$r_mMN+`vyDP8Zn1y z{`B7Wr+Tm0;KcYfr>zyP&gbll#$BZ@iKmJcC{PBx9GA!UW8h*uVlvm=bg9XR&o(1Ao3=~--ROPbO z-E(p$*Tzn048CvwdU#)|)lgVw*Imye`s%_-V~2wQ6!3@m=_9fjq_&DP$53)kv`i?G zH^Zi}^;K>jJ{^4Sdgh@QXp<+Xve};}8zl$)r+SS3w%_SYg?{mc1M=y-?c}qe;oT%* z`$<(h0I>e#K~c0;w3TqTu`w(05bE!jIKFVv1w+}tg5@|Q)kD7S|-kA=Cp?mzUo z9+pu7)udfK)pVb$*EI~A4&_A4Y}Cr+65q-e>TI2~M$B3{ZV$bM)=$`ATq<*`zTpKB z%1N0m9iUqsPJM|UWT6%0C*>Da?GO)hh6|e-&h>=a88Q;Au#EN&Zxv|cqZ%`xgYO@* zlEWvG^mHL#U8Z-VW)(P2jNhmjEF`VI|MnBV*Hh4=FQWMkQ{w>R9mA$oRQ@Ua`UiZF3{ zihp!K=1xLr{32IwDP%0gAe&2UQ)(!Naz}k9!j>xY)cfY7J8VAAsB1(=bKIb_=Zx>m z>$(Ai*>=?k_Fw?T|7P!(zsDh>t8pIguZ2&6Nf6k(t}Mu5(%s`u^oGZV?*`=kVZ-|Z z+}$lc=*+~#Fa1V zsr5HblD}=Bwmj3ty9T$Glm=`-nsv+wjJ#V@S>CDLX7KCf1fCb7Hy-_0UGmsdMlgm| z_Eu#8X1i^xlM(EKgQ%D9d(-Gz0VJ{!`wVLIkw~V0s*?xSYc(#wcU{CD>n7T*-tRo9 z#}4Gy-t%te5}buJ1He^Ys05|V{EcHz;$Ece7NnKm*mmz4^#8>~xD zrKWT5_#Nv%^PY<`F*Cd$yhlU6JVSLcCz4YTm(g<9DoU=)`wMXh_Tt;%=A1ey+RPv#W60R4XCB}(c+jBBwbSPQ8u}M3^x6d56$S;W47}V-(=%?lvR!ZYRfCS6 z;kGz10INeac$ugCu>GCFhZ8={Bm0=I&!t$(y9F@VW0!YxWAS(g%Kp_4(^pSAT)l~w zE&3=c>AZqRbfU7ncx=-|ZNfZMF0?{0YE{e>*f;=A_<>YQr?uUp?3bTj6hAW%Hr~V6 zcOYGfZVhaec1zPf8`n*5Ga4`ZE;iYD7wjD%=8m^^_NmUxPxQ-MnH#^79VW`9prQd1 z$YEu=72C$NkBQA*+)gjDP$~DJRv9&3m@NSmUi|Ww$`r2sw}r{;oqq!>-r_2Q4Ic-< z0#*gjM8rPpamm`JSH2`Da4jMwO_9}p7(R_34n|0 zi;4?@gky?L30)yWjil6Sy!-H+7$H@TzS@mcoHVmUoCDm$+`DbFk%|p(*OPu-Ia@oi ztmKl0L^|vboTAp=Ux}isyIz*bdTmaaUrf@gVUukRUu~fWLkrA^2#WLz#Ui{VwzasE zSq#yi(1)+LN`(9<`HthXCVr5+mG=z|zCEqH#L+M`G4&sorvl?kVRJS>O>Bmw+cIO@ zqLE>MZvwv1?$XXak(mUoi;lVqI#;MHo5Q+>psp4kHL}Le9U348NJW87+54ro%jMSE z%6}?|xg*j!6{moUN9ERQ-)99ih=_$LlM5Xvein?d+$r0Gzz77I{TBH3f$Mu#2HGq< zO+W!2hTN8YU#aZf#9{j-fSB|Ms(^pTSuYc zj@xOT=WG7@1FuunosC_tU#=sC{788}%3llI^G1Ndvv1K>5gR^Fn;t@zmPFD61YEgh z6ZCVDY~{ou<#P$lyftZtah)9>UE(LM@T|-Us63kpGwN6Njx}lJboM*>(Km&<^Lpn)>At!3U-C|cMJYo_EK*DzXZ=9gvJfoAlU?f(uRC=ucTkp+*SxpneO#azP6&=% zK(i0$B?AoLHsTMj{#KQ&ZHd~YLiI*MRx5n;i^ zz)+f4V80CR4s|b>EO|x6*g;eP^kit)GN>G}6p9=h5e||lz*QDZjr_C+z|LcqQ*wBA z^VfZljSv&}x?LM(gS^DnPsR-yKHbTn@SWMbEd;9eb2hzE=sOLH3ct2juW^|86&124 zari$p3Z1_etN3AMF1ez^k23>1f}%tWWo5vx1` z)pBQ5;t_F9q&l=6NxJz5p5Lf|-Y%zAvQk=ZM-uszlBzF*(nY&E^irZMAa9xAmF)LZ z@~%dI{%@==q(SPPkn4Tc|GxA0x2mSL5>bH8JL^uP1W6zJ8U0;9*NbN+;DAxg6!Ckx zdtY7l7Usx$)^o4|6S4q_Pzz@PTo1xm?`*KBk=F5#vf228FnpYRym?TK!~xMVbV$%! z?nK0ijg_f5Rpv&$qz0Ov2Uk?$sci#So2SAYjLID+ZH5uX1Egiix{O0qZaq5u`5i?b z#N==ne5$VE3d9%#>-EM5P9MbySr~RQFpV6V&lIb^$kUk(OW9e}$Sx?EQ0!vL_;kY- z9Yq`s@oZ-}V+9Sgh(3>;iP5msnt))kn9XnWCOE{oUF7!{-86PO$~t z005B~FO?hbShiW}P)OBX+!mhIvS402;(%{qE)6B6BrI&u?||Pl$a?NU4C?bn_{d0D z$kyCj8`iYV#{DHi0x~f*Fo*gRwIJGCBft8Zg4!0lmDA@%lRDRm3)XHlx)`Fq6a-J| zP_J@aAk|ikxx&95TDRKRERdi|kIIVjiuuu1Ev1wtVbT_=?t6{HGto?pt0^fF)c;Qv zNAm%h;@@;_=i+47F|#$x+FeZ-XfV;xMa^a>viWVkAJcEu;|M<1@OU3;9c%M_fm+9W z(_C#mFM^r8(okiIQ3sfOoV(6{-;VvZ@3RMs9*Od4|8Q@(Jn+>Td}hA+uG+lGWb3dz z`$Ki6BGCur+J;!>pi|NGBi(D4UAB~=s!K*C2GqeMDQ^n<554dw_fgj|R6VYhN1P)h z5~jm1DY->u0sPP2iSm4Fv10;Wxb7Ptj14@{QvrnZAz_COk^B~eAM=`T|N4<{7q#Vc z|KYBt8Z?=?a!9b#|6s)!8k>;D8YH3h@;uQsMk8yGmnB}+KFPQ57=;AW%SURQdg>ZHe|chD_2SZ{_o%g0Kb)J*dp^K&u{W`(V6CsIC>)EIS zchg~+TImkZ7m)S^gF4hAM^q-Qt031jb!Y94Lun&6OQ7`r79HhXwUm%fYH7K#QTapi z!yGQPQNrC0MvA_@G`5x9nlLqpb&Y#~kaK`1azQ8A&as3SZH66fh8tvbU}zpeNoCF@ zJPmyd#^YMOK1CA)O6*AGSOf0(7VUr^Q zlxEP@X3=N6_Xjpd>AFD)e?5=f)nZ$eUljFA{-1}yQ@Uk8m zWvDv#Gmj>xM^tC&kX@3kq|J~-fKnr9G)3E8E7yxI7^&<=fO*+Q3^Yi+M2zqg-x7ef+ zRk2S3y9NRF=l7Zprtj2RbgHpfU^D2C9Q7}9Gm-0`hzrYv2A~ZuN|{jc#wbP<#G9wy z{d`4&UhT!Sfw{F#beUyJTX0vi^+ghrETD8-@{_ueP zHZoX>oLe-@_|S()(72oM4G-HAUh%&pNID}F$2f``CpVU@PEC|H14 zC3W&tsm!ZYU9CT`{?rj6z3j6wsokTRijl2N*FH}z{7~K1i?zO?jT9`bdeYR%L`*Cf zH~A%j{RTwOzXb(ghU;riok?;m6NT;pO;2&jY>%~l?+F6sAr8;v4`J2YV7Q!=4$IqK zo9ur`+59W8Lu@06{ObsTkHz8nwHxT;LzAStD>eORH<^Y~TKi{cZN2E}_m@C6RrOh? zoQ5ad_nvVbGsS-(6LGaSd`oG44UX^hFddt7#yLsD?BvE{Wbm5kL1u;U=#~eZlw$LH zf9k&=aHX-D8gVd*%NM-_*ig{s04$RBP~l{s3$_RilDKuX!Y^3zfzaC&lP&-plHH@`Qk?A06fJu63V2s)S`@JMxC_c z#w4?r>*=DQ6f>kbd%EJ%ORvXU=WDWXh5m!>r7g;F?J0DXHgNjvXrjt4$ZN!_-&A?f zYlI1QrXy|DCj9phGLeh2dVHF4S~t1|agycpYv~UbK^zrY9e1-T_?V%yzQf1%jrPm) zhnOp|7D3%kE>+D7w$>OxOGf^H`ny>!IspLafmI|QfLmf3^5^ctveh?3joDRo*{**Y~ zmR>v?0YZ4$SP6J=seyol_DxLfjnlPKY#HL~57?2-lhm?4Wa4EJ=LsXU?e!>7; zB+LRbxRf)vbmESSEFaNk$mRR#>11|>`$5s&vjdzc}%3^tInbJ55u=U9`K>8o_=O3i+LmmjKKYV)%u`#l&g4;2CAfKV*I^pvWh zE&Q~Mb=cO7BBcf5GgDjtO@~Wcq3-_!lAj;NLnfS*+l0^HQramqT{u49!?0&n4`R~( z1GEm|xb(x~M#zAXT%2?2yr|qJzguWZx^?9%i-Zrbkxz(mf|I>%kLoybgefrN5lxLzEcgy_ zk0ViVj-$Zj5Z@!jJBGC*hmDLQeQg7_q=odWY7s5EkK5jj>)o}M;i z7T+i*{%0TiGfMHbJoC<>ybizo>@ILx8V^m`ONf$cG?e%Nowz*s`x&`0tz`A*_rHq; zqH*a~17x9W3@HrgvWSD!S(1u3 ztIg9&QlVC7D#39}yT=Z5dRO6YUulB@?+pq@!yN{=Nka}Bs`1P{Z zq0vh6>bpbyGawv6B04S>hetGK!YE7(G>oObs?2>OenxDCLUXucuUHe5StLv z7S1RpZH2hcWnuS*#)gQ5QhjzI>VNx{^fejgiHcH(h$sW>@@P$oc^uoge+b5zlV;B4 z52bRd6%>1mL-VkTs`>T?QgOTFth{c5JFysTG9)A2Dop?0?13V<59Y(NR+zn;@FRGo zWtd^F0xVy6=(nt$WiP@JC!|rK#bTer=HtfBGU%QPdnz=8GJ*;t9*Ut;KZ6eUbmRnS zXk%#jB9=1FVjez^8TTsF|I(&O=juUM>;|OrIkCAFd1A|D_T_Yy2}BGp_UW>GYW}0j zGmGLjNjgRoke)*%))uB(3EkIf0V7w8jeTT}T|*rqw+_T$TC{C*(g$2(rA5`1Ve$=q z$m@rWLuw_*DxAA*zCSKEZC9tVwx5Xc6)j+5Dc@QsUEIbaXtt>jIyg?T|tX$FI{(Df_K?1u&Qh8hDJj(EmJ`@Ef zwQeM7fJ9Wdi)-XZ)XLp576&K9a$zO9IfJDsiI?%8>2}p}xW}CF>-Uq%PCu^;zKs>( zG~+K zD3kmzL4Ycqh#)79Qb2VM_wU*Oy=}0$o(;`eXl{3Gs1!nk>Q_&j!0h6eiHE4zfX?@y zBjbO%8$i>mw}?G|Qg;`J{#onG7XqtGJ|yynp#fpkVd?RCWOH@bk-96Cwhy8@2_1cX zi0J=qxECCDLQXW$i2;9eC++o@=Xc=F5*r^%R$4x>S29>o=e8=5$pJ)omZ9&6xA~`_ zgn!D>_-Bm7sRywRNJ_e^a-rx6s>w#ZJYxkojp7!>Y5reV-X|xjrR;@bBQUEoW2~+> z&P6=WXZ&vx->O-)LX}UH^-8Nx{m)K|-|w3}vS$|)Cpdru!DK=LZogX9jO$q|ie>ZV z7z>9i{?3Bi9jw%oz5@7_iQ}$lqBUpd7x3%1ejor&A5BeGSxW7#OPF~EgJrv2aFtZr z`1o<()|~4L+!Zu5B$e3LxbO(PO7e0gm~E_=YumqUFZhVBk#qd~BU7_zqH5G=V{7kb zuS*}v%(t>vt_GDB4Jr^@p{GbcAeWwuxUMKOTvf3wV#wF zYJtd14|hrgTsTRhU*O_Jr2wlnBuvmmT_=;ZpV7AymqS5Je{D59RN9!4v3LaK+DY zWv?OmA~Kv+Wx`Gzk5(tnv@Kb{*Ww5#t)W})yef{I**^B9Sp*(v>s94V#1UZrErfL z?x!dAZqei= zKi_fv*YxgH)n3A7l|emKh@x&L8t@blf!l|KcA;?h4$$Le=!A7nN$1l);o##$32-M8 zqBne?3!PSisOl!+pZo*nx@I%e4VIot9Tht;yw0 zH$`kt%(J!0i4f4#YM)Pc)!n^SZ(POK#OhrMZ|Dj-o#u8yDzp7={rzj~mxSc{5M268 zh^ojg1n3GV>dqRz26b@2(PwhP5eMuPyai%;m=MQ?rfYL7ULntr4=<0)p^X3YoR0}W zicyZ#eP?BPDaOM90G5Ue*vu$!pxf3A1r`JuA|A1??b>WT{@^#u6FtOymK8$Gj7gHC zosP;suIuk4Q&&ut)G8P2|uh3UnA@-env=)B~@>UmK78?ae3x5@Vm};6y_dCe)LZ$H9 ze^JS1XopMoEiRCcv)|^$?G&AB#T^k1qUf8lyHki@VjE z9|e1AWUSSLZv%PsQA|mvcGcY>QbFYHL8mK$fyl5Ae z*}=BU_i;W!lK9@|uc8E{QZT0W1BYE5504w4zH|^n_d_XJ@%O&G#O3=ens39zG2Y=Q z{r#I@7B3Nj`@mERJ(EUgi^&3DNKUSotW_4oX_H+DhZRy9@{2PQsGIe1962HzmwrP| zik_+nCRLNl;wb(|3|e++8Q_-W@>#vLMVsmG?-c7p`beCs?(e*4qOM_Nq+_K0X;!@d zr(Og&gf2cPp7Ws6da8`7r4#6u^+g@@ur`hjs3}YHz|+){hDPr?Rh13dc9~CQ0kx#y zYKYJMP6K6Tkuo3z-P|R8$Im zwDCL~l@B%c*AJsDgl80Qk=Oj`B&rZ21urIrgQU9Nbbh5vKF8=48X(2YtMMPW+R*!QwU+2{S`wh^ZIV$7p&ko4rHs1EKAY%q7VAVUgobkkWymmHISR-i)&E7yzl@ zc0R3d#UN?#&)U$`>WuT9NfCb*Vn&QK>BPXp_HXDftRe0oo#s`t;jo@ugoRvi*MV*a zYUf>JZ#-gI`vaC#JH5`i$n#vWF(M#fAF&Hmy)d!sAl!6ERwnT-Mg{8j~0b)US3yFY%rG&+n zhi8tls{+rum)<9KkEEj@qK*ro8$d@wX6zO^&d$*?c7Cfow-NZMDQFFo)r}w(WT&Na z1tok9;AjPhyViVND2`sBymnO$X@qI(C$wi(SSQgaOhfrP(*k}hGsa9fq}Z*t4czXg z%(@6Fz-Hj~^sTAN0pOWRIuO7vnQgpsC8n1-v$3|64bw}`R8@{n0vO(HVbkOZo2hg2w9rO_&{y*KWv?2aAaK+uDfG9nP_5TV%xTD zXJXqE+qN;WCbn%S6Hjd4{x0g)t-61@y1M&xckOfbK5M^gt>;aU8rnao7bVH5PuW#| zNiu*dq61SnwPjx-t^)k?+2u*FDend}prX`C1V) zA?OL(4j!Vm$Oq6-MK@T2NML|SU=j{w`4B&Pg$!|}R?wlaMJ%^B*Vq(s6?Aq^*Kh0a zHjcOk8CKk~8-e8$WhXqf)9)<7szcr5qxnYsyfc z!|AfJK$g}GQ)9lXjoioEh9y4nH^`Gh< z=0t^Ies@_HEr@v$s}YMIql#$>sPJGl)&|7ma{4}pw(M7)9-LKtE=a^St)zUj{Eu6V zb@S)gWMIqDoh4xZmJj^Wj(BP3aerYZH@3g&fANa{5mT(-fNnuFj|f>Hth6>J?6f1& z++OY3K8)b+Kiy~d5iFNNBd~Ij(qb9~Dm%-_I@5f-f1QM!W+grN{ovS~$z(Xgx+kUSM6q z-Icj#c901Q8tQjY#+Eb5QBt=hli}N~l6^m2ou8I8!V7c=%t6girQ=7HAydZNR*$qZ z_Il!{rmtN6EvkLl-g%xu+4JbMmea}s0j3V(5C^HzFSCHU@XMEc&b#Q}!1abesOBAK z|AD(1pNC&_l4>&N-OC*+yKgi4Ue0TD`Z0IeQdtV!(6OjTiFFZ?Y=#bD&R2e$E5f?2qOk}DQ2g^0*eRj!g1ip; zP2_Tv=M`?~$80tqbY($aGXP*9glL9h9N!Qo77!LdvQcae2y#IJput2KS*=Mr%UNt3 zzUCpTt83kO@}5_{M<^`ke95n*x^6e&Joy}2k1J}7f{H550X%k}x=TZr2b?f zUHcYe@qVvSGyfRQd$fn{j||to?|6&O8kayH57$6{>0Kt)=6$t3&sxzd7DM+>UbEDS zuzRw4p+P%epmT2N?|nwGeDjv!RnePGG|PhT7r)&!&-{XYCx#NxC&T8?Jn+$|L?Z^i^2cXmaoc1SMZvP za7vVu*|9u9_@4g%;)vZS{x6RB=Kq5u-hIi{SJ>JN`{@o!TYJ#Qc^q#q9G3Ws0?-Wn z?v4WMf7cqY!fzlTx*(Mzaf7^VY6GX0j!iA|9T(Z=aZYfFh(tso5|+0;+%29!JU5?) z$KV%IzAi514qUH$Y3VBtWV@H61k4FfPfYs%7WDy~ou$`05iVdvYM(Wg65!eRu5&`E zFqA|1MNjd+rnf#SFg`Fh3}#Z4H-NZ;@K>CnOZ|d^Js8)=LO zT20NiIZs?B6^uH}Ly_zjw=0Q~6S|Wz!iEPR{l#{LLFv5-+6IS~%C{N}#3o|N_MN(# z^Il|8zsZr&;W6G*uscgvfx~Dns z%=4}Ls&k%-0)-N6CPxWV!ihnWiOIDr?DE}o3#xnL8}cZQnV;F?6w;h5ndlw9PNGPI z5vTwrIcVw#2-v+!Wolc{z~nH2Cxqvq%2T97kD%X}awoZEKiK|AL1QJftVIk4XJ(V{ zN#r)b>|0NJ8OQK)DXwXF3~W}9jOr;jBXmj7p(gKO4+$de#NC;jR3*7s`o`L5fR z&q3WQ4=w_#@#-~2c^v8}fGOS!x1u1Jab20(6WPsF+> z?A~hcIONo#oDr#rd(@Uv}85{&%wf+2;7`Im!y8HzRg0x)m0-g99FYW*Feo#_A zl|dNDa!vl3QV)>?prWFpptZA4m@Q6BlxtGwtx>zn3Y>F>HX?z_#$ga}P$)}LrCii1 zCM%UsKU+$E;>BLTV@Vpp^O#sD--z-i$d=e{Xh9pvltAzSIzlsHWugBDAYeqsEL&)% zitA>{sjJQDe;d)WN57jn6Gx6CrW_Q1CQbN?Ve@@Lca7avmfJnZf;GocPt@8e{ zq5FHn+&8bYWfhqD=5Ix;C89Bc6Bj*ZFEZ-ZD;=nkWy2cRx&qzpMT62m3NeBmCR7w( z_YMiI?&^f{3H1FjvbjV`QZ>io>@S~3?qZ^-e`VY*MgrzkZ*xzVXU*Uj#MIZ){fU2g zQJ&Ps!c5}ztpt!+iYlX^Cge-0Wj3d0$`2E^l$a!q7OPZH6&pbySs9by329x>=W(xOGZIHA=VHc2JiEWdjm`TR=VVAA%siy?7v) zqIbRk+Zk z)U(7o;Exb@lv-p;11CjE0bztLgbwKGM@yk_L(OK=%3=pRnj~`sxwi#8y+@pp?y8di6SMU%PnnPF7my z0QqF@cr%w-8@giiQb(IF%E#vg-Sn>E@#cQ~`dP%L$3G>-4Zq1Yp}}YZdkmETF*;sb zjW+a>OkP46CO(1&tK-0@sHv`PctifszEG6L{rbD3g1zvtxgei!-Sd%o(XNgmGh2N( z+O0c{dPk)@{B&(iQ}v{KG{jWV{5n{rBGUH|NL}IrDh~yv;!ZpM@+iZgwHUx@6ie^L zyHE^|Fgzieml<}j%%t%T*)}JayZkIPgqXVyHYZ*Irf8|2QiU3Gl>!yr7Q_bTrxN2N z9p>3rkxuYAp<{p|rqP>N!I0uy&LNA8D#F9@RT6wQR6r(Y|+6$vS3+XZvN!i=z(4ZTPu;eu*~Wb5qAgtZrxsj8<(E@gdJ(%%=Q{_r3?h_t)|KNNe)b_X~ZZe*tV&`01DK zl+niBmy^XQF6)gc1XqOFj56oA!kMxN1|6I5&1{fI`?bQQ!@r8H~t8leRSkOtuWN1X>@kG=m7(`@J5?(6u-$|r|R}FVH z!+1mgsX^K~0#Oo)IH0VjG4gE%!JPa(%hKJUz~}yQ9i7VW)1iuT?JyxC!n+Wj@Uy<> zzs2L_>!zt!7^{ipw{7R`A-2sisjU=|lyGCm2q7{D!j5J3l+TcJ2__+u#uWA-T zOxfMGWPMNC4nrF!~sNA-1yW_O&%3V^lk$fO-14iqP8gzpAh*@-OprODq}c zY{$-SuRtR3Qs7DeUb#+wM!wbwROus0G|feEoBS!)<5F3y{3m9G^_u(j?q}uUFW8u7 z-zU7eWlHTTN&(ro^-}@gzbEz1IRg=bj?U*@gc}Aw>9><5AxO(WOfRF0PX@j=(j7WR zi?)x!dJ{^8CsAVEp0bBWaPO)bvFtNU{Zo8+j?$g^N`0nr6pBlt1K)WDG-(aX$n4(b zw4Y`C4xV&MK@HdoOQv28LTIM=@$)R94*C}RJ1_tgqX$%gu=B*-rv?((O`+$@-ltry07mb#G2 zN?)l&!2v^>r#hfd@o)-bJ%M>&<-5q?7`-$9QX+(VgOZ!++zqjtv!|^%8 zI}wG+kDpHw76zPZZaen;b7)eo_%F*UJApHN9X&pdrGtxt8?+L!*(YG50xCPF{Ezo{ z1Kx!1e@&jW0HB??fX`9JeQ=(2jsC=`Jy%-Y@Q#K|qIrvuIsBQPp^J2Ost%k$HE zOo3)8M9#&agpiCZA2Avk@R*1k21yspqL<9F7V1IwG>{nJMewQ;guzRG_USfNI2MuU zQN2BlQP(4^f00JPbD_>n#;oK1X{@w#xx|xR`{oyb!1ydwn<{z)3x^`^obJAZL4hwOd7eV z=cP|^?ei=k>j(+8kphB)I?N8pk>DtZlugQ5XLo&sXd08lg{3%S%>5FgFfLcfd&Y9b zYM<>b9h7FUR8z%C0{yi4=diL*tE5uek?r?*rrTm(Y%I9uZ`_uyv*nRo%PE4&N;vuK zOWak1?sTT6ToeDt#W_J|XVRwTV?Cqi`-Bz{-RCE@dzMnwpF@Z&$R$3UX7$w?RxbMidT& zTYQ`}*2-+(S6QVhT?IO_9--T-U9j=?4>JLr{;7sV;3Pw;v8v`TmydD@{Qw z0ufSt48Cmw3e;q}@vTGpyBNKk9y#E{G9xkmaxCL=O91|M%tXV3vC`YnrNH7*gsTR< z$awh0Q163pfinSj8DgIuTEfTAj~fl6NKA@E$U`yl0lhF7AwOcGH6Td1%82$&20}~N zKnA$tMxJ6jRKU?^O@rTm$O}mU*kWvK!8zy|AbeCvlrY7S{Ny5B>*XEAG&75`vT4~N zYu_<0A>YLa7bB7^_}|4myK=hd4HqM>G*f_W`XYjg{sn?-({x2 z%kOB-o;Qya0q^Q-USz6IEY7#gi+de7esrO9+>eLM@3q6vxs+-UE$+QuI0ap%B~(-T zMqr<*UGP!zEw05iwzv8e_|o$~m*kHrNOcjwhMGNt~cAO9kXBLm60x0FyDwYSO*K%RwD+r1m1TEH* z=Go9~LAghxY7k*1`(GEEoz=7JK% zL&q;AzXYiTM4RN}%Ct(EG8f9}Y?De&dXS^Kn6!O6Jgrt;)r71 z?fJSB@EO)nI0V~R`GKqk?9HwPulLYUGnGd#UvRx2Ggz8zH+F^Z|2+2* z2-)M?MgJNKO~3>5Esp==J?REK&-0`{czUQvL11V3%fp5X(0fh^Md15<6Rci+S7MPX zfa=-gs%&4n9>>d5H8`H;)`%ff!Nh8{BHf7v!0v_M%udV=6v4W4VKTGb2k#w@hyloe zPqZasgm743pmKtv@IxR1C0|Qm67Cazhv@y88+U#fJSl$rW0FyD!QoG^s!bM6O;sr| zh#7%r_1jbLH0qJwBu`II?-w#5zvr!~fdL_jx~l4?$3YCJ&vnGw#^zi5SA1?pYtaN; zB<|4_tU_vxRcP44X+TmspSZ%8|KlfbckDq2`p`_p*<~l#w>Rl(GQl9SL9t?pwFWUA zJo+K!T;2q9Gush$-dHr+8~a30b>^7}mNAci85~#SCdX?LERM$Hkwt^Kk^~dQbmPhN zQORNv#geEbeK`=40fSD!&6>`t>8rTQ&Zn+6P1pcmerDe}&_C95tvu7QfD}YYuo*A` zU18<+wa7d;}9_MB@?`0|bnwpkIa2@?;4YWOB!4b3T;j=G?)Wqn-(j zq+{yQ9VE)!6*oB-CMzv1CBIKtp`nr3FP?2J0Dxr0nOZ%GZeKgo<0G7_ z$9p$5Z(x20KZex3TPOyg1oR9x>#>OEa((VEWPstwbPjZnuN57lIQ)IOjLa`NCfa_E z#7J|NfX317`6bxa11!R5ZM<&L!rYuZMb#ZN-?%e)wHAfwoGgE}j=w|KmJVD0tQQ{s zgIR2My4zDIcDtO;m&l}be|=o-_NGLlLr9o)ig9Pi)HayX7y`n1fU1yV~s_s2p6zZ($tpp z2oOeSY}D|6SN5Hq$*c@p`>^SY5fb8N2YCU=HPzhxuB}6R$cux*4SF1Clp8Ci^7ucB z5olrt?^SoqEadVi*m_KB?rfe&R zL=3q+VZa*Psk_@~1<7KSmj^qeCuFXZ3I8>lvO!Oqel&_>UuHaV(AXZFw;cm@6()c?wo-tHhN^Sj>q5CH_{{^I|P2M_wr z`+Qht0K(1J3g2YG;eTXxoFnPuZq8+6&1MEmX+pmoAK$82on0McwS+ot&;3vOF(pWj~%eZiKzxzJK*DoJ`gBZ7#p z;Ak4fRA0e-m#$9|0|@Y0;={8+aaz2mQ`|W)v^cD~*oFxR_^$J>f74*2yT0W+fSBEh zzFfQdtitkQ+F_0atl4YpXKEiufp%B-%;$JVE&an*i}rU%ixi#}J(}qzyKkG=k=ecn z@oR5}v5p5W9+u@5$9tE{D1*P^E;cv-d_1zw*R#&Q&Ir7!EwJXN_C7V~S|2&Ugx&kFGFDss$BIE9R8m?l_cm%Yd0n*MIJ9l;X+#6mR5`wai zS3CBXK231FkCswfTT3{M1MTin^YtPlURB;zU3;G&Z&Te8=gJBtUe($Aq$3vuI=9g~ zKiZq{`=|iDy?a-K0~+i0o~C2`5wy9PVN(OazmBzL*2ZS(mqLTRGL;l3WGasPL*YR{ z0Q!=@+g;v-9=m}pE$jdQsym&tdBZNZ?!xZ~S{4X!IUYu0u=IKuk1DP1Q?kIM4nA

    zRzpbh(t=P9`eWhw3j5`;i3sOXs4m8 z{kRYK`Sk5unK`XZijX<}y`-z}Oc+nDp$s{BPHumbajE|n<7$2cEeqjqI8GlqH)eBBftG_mc)2xTAzjBRvs-c>JaN6AUsI!U%H$<$M6^q%9rE ztIfvpN((vR%){tNziiq%wezy74D;Ezh#rlDm)mI=kv7L_iOi37h$vh;SP;t!5(C-t zbM(Hs)$jTZT|^@7Xh0iODQfujuou?03uzzMrDV*vQmaS%Q9?>eI`)cuxDx~K=g>BH z)0bMfLmO@BrO0e(T)>y!KwM4w+N6R!H#wUIxIOr(w4LQFnkBaHdJe58)C+pO)rwEhOM|k|MsA>w+>S42h=apl^ii*-wNOpzS2Cwf zM>D58GleqTrM3AS%)LJ<{($}=y_E+p0+DZOoOO5QX_jpQOBdj~dcRw-SrL<9^z`N|cd-X~04&*`o6eqb-^?bGJ(ng#`x;L+zy8 zxctCY<-&0baJVlYWmIEsO;e49qf{v#XUP-6w$ES`8eiO6%yT;&8>tbv2s@>Ku`<&X zPSIIm$!m6J3oYn(HWTSU7KX&i<+&|tLGR0V(o}kZhm;bdnoq`x6*FDoUZ}vBN zShCRmmvwuob(5N7j~5#<&_x@q_N_M4Mdyw?Pt)9@{q~y9Hbj~n3&8Z@;gPcm8{&;( zCnOndILjk4RvOn|<1J5QL9OE3^nYTM&ag-l6D(`&elpm{6LB@%Cr`5rPr1l5%Ozn- zXN1_*x`Wmq&469EKp7b^W#vskfT#~|(w*Yrvg(CD}?dt~z^4Zc%vIkD3^ zgRxho{IA%EEDV|AuVuOYa5#mYEwCaO3=WbTVnu9A-eY zO#rVTSQf|oA%Sj}fBy89rTI1Ic2g?s$0H`Cw`o`RSbu!?u86&?hNUk%ue#C5U83tj zbdqm{X}kS9$2%WY=v^<|UQ;T|%dRuLGZQRuaS?D{3maa}G>-%m=1rQEyMNqTNTx=j zJ56Uks_Wd`71DI^59g31zalSqQaMBK?jkm*%|axk8V*)v%amP_iK$vsr0)LYn6oh7%2c)c_FQvfKeR zHi(Q7QmUVKC@*@$U~rt*d7)89k8GF}00`4;5Hgh+WrP7aAg2dKhE*c-0`HSUDSvc7 ze0(wTUf+^*HCMKD)|-uF6A~(Td|p31Vf^uR1?`5Gqf>ld7xKCfQ*|QK)*8$v>b_p< z2HNfWmiS)WzwT!*4kC1C*Jc}vK!+D66(zf2zwzdHMkp7OIEouljGd4WoKe&Nn?&_F zf>xMvjCVqm)*I(x>TKe+IyDQdE&4ldh%nF;UtVGgO*HSk_l>!UJhYUE#YERkyVAOk zA8ky4OGaM-OpCa2JIgAcYa=K8&ISB-jFBaab;K@#BfxiUz8eWhuha;}ThhRQF3a`u z%AxT7+>;qmG2~$*@#GuW@X96dx$=>PtVjF)TrUt{BS5boTu9~r{L3E%OtO;z403(V z{^Gw6W$+Qg5de&Q67}?Et(<=j~iCNg6{y=fIekq<;=a zi@uR8qhGnXXjrMSAZsy)^?|0rOva~(I& z@_yTD4)s6_4JMyVn!MX7`pQxHKO82gXi}A011|oT%^riVTuPc1TLZ(vsijFIVOeKj zU;vGbsU4j*bBA0|Z3h(e_Z7c2VRJIPujP+|{{wl7o%CCv4##$tj7 zNTQ|l5MtD}X&9{LKY7V(ht!eMa12T_8jO_dVl&rw11j`-JGgDFh2uu%RXB(L&OFVI z-?TYxUFbP+lefDJ^x=S#8|{3IAA*)m(GhRsFYtS3tt3LQ)x{6}C0R)$yxI}f<|(pT z;f0k%B8D)Dy^K=UTxa&GZ5IQ{jC9x1HwX?DWFLn$xPW=M`^AQSO#&1WfT>yI6N)xX zJ-L@^Ho2m{mLV(pn8R-PC;*2kR+s61wVv>6Ww_bh_1|+_AtctdufG4`@I~Br|2r${ zBjfnDOOGY=y3G%F_iv+_X7U3zasBjPkm~|Ue{xe(Q%4B>-)}|;XSy6euXZnXpfg4d zQv456Iu+zpj||UaHVE!sX)PKT;HH>Fl=}|)>DUuhxo0ufX%nHS2`8q1H!{*iWqvog zi6^eD%x|izsL>Pg${rpWJ2y*735~ys7O($-;yPAh=1J0vMgOUI;`NKt?q{bEMvpF+ zQ>Xv!i^CN8md>r`T1i%Dx*6>FYPEDJ>#b?JX)%B#p4f>zXw3svO}^uIv=FfblC_a4 zbs!h*s@{2BCpb}(*(Gqp+DEKml}6Z_)^v`M({Cx`hZt8%->TZm`{}vK>9^c+YO`B4c5)p zSkB>wv+W00%h}1{yZ7+)K9Nz257P`fG+Co*vZ0PR0FbU4b6jj74Tnmvdralo%SHcD z!76$3`-1E+S#>f?pUKQw6B)<&_oj0Tg3iQ8Gl5)X^qWsFr&NS(Y$*jbG9@SkIvtK` z4hYwjWV@utJBOE-m-Y5@@z~mRco|HtE2LZ274X!#D%q*%@p0&QmrzkN5)n&g72xfV z^}*3g8;3N^O-xX!ES60_MP%Ht$le#1cPMGvTpYGR;FQ6Ou5`;Or#6KH#5)GRWE`5C z1}@^?P%=ZP0S6|Zeu7CQBYh=55M?l5eCBCbG$3x?jwjAR+*zk$(%soC%hVvpGkxc? zW`3kOiVCzJCHeuxF3J9ykv&R({{>V*#bJ~mO`r}#^**Nb*I#%~a`nwyepiEEO0Hag zIA`Z)y`FY<_I^k9_xlx>)#EF(r+cUI)Z6?q`&c#mf`{@iyP)H=(cux#VUO_E_n7{b z(BA&dUcyPQZuzHId8OM&^+>Pmu$Lh8o@HPBEzX3QG_pRcAUZc#_vVvXff`kaL_z@P zvh3L*EX(*>xd9N-(HhRDnbA#e_~1`hPB_P?u&j{l}DRPToP|Xu>5- z?2ZaQ*6!`!m&|W|4ci!-iFnb`kaaQ8amb4T*Pltg7c1Vr3k-7V-@}u$Lhk0)8ImA- z^?uonZpuLquOug%mBmPxOn#$XcjQhwLF7tIh}uqvvXI3lx1{j_UimjZo&keKkM$6+q zTjlyag|@fzeEtHz!jtppX}c5bn?rZxd=uFF_Z2dJq3F+`YWHiGd$v-L9@+%$o++Il z@xZ?CT88n{JfZm|%6{|au+{B|PW#-8pxS<&`j65`VvYhgn4_;h6B#AAV0^Gh#(Tg&>-jyS0j?c}SjQvniyG_Ea6=1_E#z;uXXn7NLVG zHO0Zo9ijAbWK1JHsy4jDB^0(03|S*YO8{u5BFdtolIGBmrc!yhM@rsn+pXL`8(FW0R@d2`3{$SdF(zyb)r|3DR*!3*_lw=-S~KY#d`eAj9vP@ zFP+qUADRkB#nt@(ypG>!?uL$?otLshqgo|E8fF}*eiH`=&}3_XoUJMy51MI5m^r?k zd-;vY4yHN}`7xdV9a1@&;}R=6XX;q==Iel#v8_&%BAz8ZqgyVa{D?m5bY5Xb1;|1% z&h+OcW@bThCw75a>E3biMmO`rFy=n~(lm`JI*v?;evSvXVB1Ti1Bw1i7 zkp}5peG$WF+3RC>?03SI_oX{~4ZQ<;0tL^nIe+Gu_UDzagWgxt6`QXka0a`&?^>%! zJU(5QNenwH0=Z@xhA-2iFuD*jE9Lo?U>4?V? zHKKeCVw935kA%*|cfpTsxc z=bvw&Lx7A57^(x5W6rj(x6AIl6dyZcZ@iJ1S$;Ry;)aF*litnICoSnp*Ib*r8o>%A z$^5cl@dVzR71{m4n6yc1M=eQwZFt{2erh!2NbF@pid5gNI9_xItG979LsBYTf@$(S zbvzha5(GdO@=}C8KpQ1p*h+OA=!q5wMl2EAi_H`(3t5Y3;C1&}B0`TR@aHI10y~c( z1X-=wzUyP*Ln1Fm7I9|p=JTfV>9a1*&wOFSVAFG!OJIS{O8Cj=CZ@Z`>liD6{trU( z(vz*{B9Fj;R!0A(JkuWaMqtHYXmjyw?#qu0`8Cn+p|~M{#9HX3$n^4vERei1iE2GA zc&Mo}K$Z}nQ5lo{h@rG_d>Q$p{jXDhe}1v2eN1?moxB41JO6ZBA!W3ttbnJ_Ne*dR zhu7KF+tBvO?_9}jNZkPUDd2nxLH#t%OXtjXt4Gd9$xIu9#+f{5oXg06C9&o(eRhRq5E{V#nn|3x6*2|Bm1D&s)108%P zx|;T8kOWjRf={ZKESR9+xW zjNg4A!#%r?S_w9lCr5)iphM;0CBOts=iqj;8~?HJE^JU{lH06W+~w=OR-A22%r6Bka~qoZkkwae4C0OANg`>88WwA_B9@#SbRw)@m9Y#YOac<) z8clCTlhb;1t{Q{4^YB=q>x}fi+x!>kT4#`A$itdB-==XN!Ml!;YcP9}UJJxzp0$qP zsvyaJ0%|Jo{O&wzOo2Uwg-U!V_h+z4&PO-axbn-d3Leeni+c?PrTFQalFvU{8Q4=o zrxO`N%Oi#=Q~#ArAyRg2p9hQlbli&lHkPiX=1YdFR5VBb1GK_eo4n9Cs`@A{i!KaI zCqx&+zM7`CsUjAhL6#O1Qv(-yV7LhHR=6kH*g6GnDx1-hV2Vm9thdKX&lFs)B2X%fU_E zh>`6yE7KYu*`49hTW2L39n5F@U_?G7J_XpDnF=0>3!6O99*8@fsmI7oTPqEpM{BoByQ^KChN^2*T@Qoi^6%flME8=+g=oh0*b0!r z+cR*Jn9hbYOs6WRn`)b=1)8LKeBCmakAHMu^-(@uDsL}5uD2WNyC2UV*i`KCZN^}| z2;nH0gSR^mj^^hTwO(*Uw)88K5F1+Ouo4AY5WmyQ=igh8##Td->$$|lQNcP=Dx2;0&CT_5Xq3g{uaRkn zL&=cJb)A(@| zNj4k+G+X`q#jOA2Rs3Es`{4a1FLUl8+lw+y{>Pu^&#*i+_tm|Oj7Sg9?ZQy?r+V7Y z)cx{7S$~IQm{Lk3)90>ATzh*SZFO^X^|Obhx|rym9U8Y8?c~e;V{NZg4Nn)AAca&iy#IAv?BcC;|mVU2h}8H6LIKWOA?_@piWgF zV00mCiJt&Z03uMi9-wS)!d_p%Kfl4zd1Be1);8l!6j80^;qrO#{%;EHH-Ep2Ge_#F zp>v|)D~qp;pzTg$ zr8M(>_Ow*5oz}4Z#LJJ@=F*G6Q)uBLGpf>v9!8}Pbuy~Jt&pRFyD!71XFfvZC8=}8 z;`4y&Ner_Nr5}gb%)4}mhO)3V^b6mA+A~Ap1F_3#UQ-gNQns2u9DJ8BL>~J#6uRBW z9PQfpLPf9EZ?qXvSRkZ=;J;nZD~=}jB_pmM<>pDjCSc=XQ*oGO6v|40fuT?U%B!mL z(nOi9<-lq4`Iv=~K>9>@h2=996Rhc^ogLiw5P8O&YIU)RCJdBzX1~Md=iTFp%9R$o zx0K9g=chL0R1UYFer+ZLm**OB2B1sM>Ain5ah=B<&e+pT=jXr?D9;tSul0{9UVQNq zitea4`CKkfcL1Nf=w(ePDqoF`NRytM^CSSpsVKFhs#@j;y#@x`$XWz|Ebx0|at}JZ z?TtjNI5^YTH<;hKcJi z0I?8^qH4wOs8U-aUK(;3*a%Kdiek_T%|dqAOZP-7E-O^4$t*uxHWm&T<=UeI5=j;_ zA~$Zcx%%$r@EKgEu(8{}a3E&+1y+4>xyA2WfyC&6OdUi%ZYD2tP&Vc7V2Ou|tzEO{ zhuR?~Jt)gUTe(u1=|2{xB~7NE6?q=AcJdnox>PuEZt{adjY2|0e-rFs`4ur1>52>K zle*0o4jnj&(MkknYIHa`qL-xv5+{wQtS=WP{Fo_T`c7{lA*zB!2k|W zm~1OJAk7ht5mF?DH#@oyU4~IENjZph?*!Ff^>x=ZFOc``G;Hp#3(BLJeOltO0tph8 zfrQgN4;NknycKknQdD$dj;WAl7wX7g&T>k=nPrpbRrjy7;C-)xT3wZpcB71x&I=}C zx0%W^-cWS3q3Ol(FCO}FJM+!|9HGOEj%xppD%U5CJIX8VP>GE15`?# zCpryX{NTIENe)4Z6&Dj^JDe`Lm5&@Z2#t^r>{Ia_IQkQywE`|z#DuqS?i;hy#)RUvNuRM&J(5n@nQBkVkJ#JC9 zL)U_fH7#er%GVT3+!tNv%n1D(Q7(ciLPCoI%XP&nEirn3K5;h9&ClBGx2P3ktz^a- zgO6Rk4vbc2xpCm5ZYCb=f`#_-IK)cWGLzZ&1T8Jswg#_cDHwI!_2yQ@b%K}|pHCQ( z@IhWIkS9;WuB0q9YIISoOjNX0ah2wztKUD*>wb0j&h0lCq@_dpk z9fr4&Fb3qU(DD;7$si&;UpOONuwn?QDhI_Byc=Z*G62-%?Ui{iCle$lVjEN>bTszq zLL(~~eIPc+0MyglOVp`I8Ve5rPD)-!xhc zgjE#p1>h9I3+p;rnGN)bReHV*v}v7I=w{Ml({qIUgw6bCL5^jAhgXyhBzXom*|Q2i z#e_ZJCIOT-ZabJU8vy|6oNLQ2x_5{pXv?J(I(XasuBYq(>^y6{JnJet0sS4H44Cj< z9rN<*7T66$^pK{|27qC@ARG+Pm@QJ=9^-KwBY{~kEE-)SprYKemoMK#C@zr+kqD~- zl5Fa9j%A_9qPApxu&uS4NpWef&hjC2*<%9N=TJ^N-+UTu(F{WTz=+wkU?iMuh!jFp zS&|q?g;J@+>!+$Z%qA>2T);Xh=rKccsa1DY;#z>lT$5-qKVzY(C~&gGkc--QZ=(MC zu$qE-NJsq&k=-MxIae^}sO}cRn$152t9;HUW%Su8oz~oVeX)$?i*4VC6pJ17fXZ&X zH@a#@4Jj9UEPxLiw^*Y!!{?_66f_yd=kteyJay4kJ8oGtu0{WfK3QJwP9g(v5M5@LrL`s}E`+pqm~OBa?+ovnLP?H1H+|Q9pnwQq4PX)s(Og7^ z3EPW0??q9BL{k}^0Q8C%Rv=;~5#T`pifPIaO(+3W>#B?{yoZw*IM71pC`3j<$y5== z5Q2;du`tSDFM^|aOm~l=aP3z?bFwHwEz7w~hHy-nZDEn(mC%R+*he#2@zlBxOtnm66aMjza*?_VnpS5OQKkHd zqW$4AR`HA>IFx9@aj>K$lOe1Jpz-}IkT|*vjL;WdF%+b3?6QJP9l>Mnunk+K`9SQw?~9;x)o%(TRuY4TB^B;@-AUz`wdxw z6vaw@he44RlTuFwPOoGGp8@Fnn7U||el0Ka1pNR?8m!qj320#EDn3*4)=BMcA4rtH!1 zpaaHV(=rO-!9<|JBxQxj{v_Pc0K( zMgwhY_#8q*B6Y!sOhlAfzJ4OexoG6qx;JhU=uQi|5gqB<;@YsvVJEmOhd-i8`VutY&L zDjw_y>A=E%-Ea|)7KZdLz7k^U{{dh@pT5^`6XtQL4oNGjprL>aplC%_pK>*s9BWY2 zVPjGSv>lkjW8JE!-;8;UcqQ<4$b6`QDeERiyLtGyNC@B%zTVB0GhB@e1B6~C%?%b3 z1%O1flZ<}Sfypl5fJP^XD5yhVa4^;&UsXw%mX(Y*50at?bl(qHFoxjTI2r(Dsv=3$DOv5-;5ip*?Ru0;hYw2%OaqzNPzom~jh z+Kg2HtQJV>(!AtKC9^?^OTxf6yWsqn!bEgR@dim4 zBn6Q~U^#1K@pPai1$eTibYb_;?3nql}SRu-- z_o9GcTxCd1)mclhP9k2F6RqyGV*ckpxL8g+anp{q_F3I|B8$GIhc7S7}x2V=@@OKEl1R zp|NS(YRYPcBmg;!ooWX8B`r`rGuJ8f2$;rPK`j;h3-ecPMwpzBmIxuOnsR60&4ojg zOEpVw=eVfh(&j17%ra76Q8oYz-&ztRO}k1dfr;eV(zXO&DP+dNWW?vfx#_c13W;)H z3_wZBM$t7ua=~ai99Nz#DMzLN6GR$t4TS-UPO1;h0GJ6fVjvT9Omlw|lMr$|97dgi z$3!g#Oao+TFH2i+C;@;gK4C;NMg~iURylCT3Z9m99o-)t^sCWSp7~1OQQmm$mVMi(fJ<{x-ouN%akAgJP#b)u+5w6S1>>h$aUR_#}i(!XA$1CV2`h?9G>%RZDxh>ctY28 zkd)RaG6BR_DE2brlVHZPdTJI2dxVrYA2~7(qyPbMYq4~d^)487*fvv;6oC*JL&<@0 z;3`QCr3t1E!T{9=rVeI;%q5CWx{3rG(t?||^vgnK79IteOl3cxGjlTVP)a9GGWpxO zD@o`8SW&yaY5l#`Ejt%AjBEY+`_CTuOCbyp25=5CX)I-F=hH6#IoPgb3|bP1q(V2H zZxmf*g&rYCbyexI+ZhZ7tdwa8$bi}5R0sf5tbzzGAiep3C=epEY&N)+zU0Smz6$`F zrY`-ifvfj*3)MVb*I$11=Rg8vG9H}7q*xSJ9QrcjVGxOV?0jIKu8|Q}z=||&XUUd; z7A!?qQ-AY<(QIbPJ|0?o9x?>Qf>0y{C?1q1Ndrs+gidA zU_i$LSw&J88yp2Hg&K)@XFcaH$+pKZgm~kfv!l}quq;Qd5Ckp~y_xYSa@*LB6d<}9 zj{W10-mpEj9YUuqp*+L#N0gFCfVA2pE1I@U3>{6WWzkm7vW#GEg&s+o6xwcRaMRv#uy?pwtO9!3a>96^FJ`?hVkP= z?_LeZGDcYfF;_BrvxCv}&X%>2V&+do0^mRl83R&C3I-lfOpqoC1B4EyPC^G$mqwI? zPOkdC805D-4-k-$qphZAK$4Oo!;11Uug}Yp%P!_+sz^ECBLM+{lokvnk|0fzf&`cn z49N_MhC~yX1SU}h;DW^H)w5@=o>detSLyXt2FmIKW%a5SSlExQ?*5Rt z_L?u?^Olu){Xy01QxpXmXDJ+-H08%E3nPH!hi96`BIZMLOafNSe>T~Hsj@k!7c=lK zW_(vTsV63Ku{#IM;%$x z*v^hTi-g=pqA5F{8-iX4fFv-1QUD6;@T+)3z*Jy}r~u=@xCN%u(d61%StK3IcJKZYMSQtdORMl*Xyw$siJVkIAhDgd+COl^Ty)| z0Qkoj-yq~@*)62vtGIadW(K2FQqa0gb5dfQ0}(L=q(DUj;Q_@!X^=3u@RO;Nse>7n z!XP4d%XAVWVA>G@7$5;ig0ul8R}@Xv@+Em`3kS<36LEU##-tX^ADy;jxy^Z#Zo)TV_xL5?Ar$^4=W)9%2T zq53HskESACWkEe~0_ORTXC|ha#X?s!?P?)ccFb@EU8ogRRaI5tASEzq+y2_=TU@$X zVW}kjGHbI?k2=?=O zJ({Wl2}>4!Ll03d7+s!t6bf#)$ti6Mh{#It$QdvWM8E||4Ws~Rf-q2;Wa=OSOz33B zrI8?MkjrYRu4Gn73$&F`wi8blEMtr@&N2a6hVt6Z=RqJ5B$)l3T(L-173&Hj!`X!MTY??w28CahPU3u5<8yO^(Y(DlHD~a3Dh9 zz$`Vfupy~pf;2!FC=3)j2p!CXG~$v>k~g=klmM-;YK#G55|vsABkjh6h^aLz({d5* zpiI^ZZc1Uq5=J-y5uwtetWy*oJ0Bi9fA-xyH4U4ZT5k`QH_j1^Hs29D{j4-~Da~X$ z%`6E)@ij4jiE>P$nv?r9A86*oSqFeyJR@s?IG>mSEAtHr(k;Q6w}IS?xl1;!@EPFJ z9F}Obv*}u^hc$6Ha}X>odH*6LV}M8wXlAqnnN|i|u_dEiMXmxj9Yljz1 z9->?&stZQvz>C((h#5{!gdB;$Mx`opfh0%@kOm49gr&jPnb65hkdcsN5Z#n1od|#_ zn6#Zrr`5?t|ClzT#3V$OL?nR(36o4c64S>M7?VrET2h)LLq|u3j)tn*TRZOxRkhEy z2B!Fws?9QbTABt)lOz$(!j6bpP!F*nKBQzws7#B_5)xBcp-3ppTgnk=X6FmYKZoVu z^=$boI%4QtOk8R%$JKy7U0Pu5hp9ZekTmj1MbEf_z(N9w^ly@Y#5G^idnu`@=L#TC zo!uNBQIn5Y|Jva$Bmiof=JWYh%HbhJjHQ(G4CiVoy0G!5mdjq~YUf=rTI9%8%1)Ul za7w`e0#pzP7)Sf8Y^(24njlOPh9xltp_8dgGcJWeByT2uWWd$rip+{EJt==0w4;JZ zAPK^hrXGtYuE$_$U}z47$Ic%cJ6}=N(Z2q^U|GYgp7k}oH`;$(7`ik~(gYAE1O#S< zt1CUZl!M@~z{BX|QIrD{7wQOyPA$UHD#`Jw%2CrN+e@nhm%8GQIpZ5jvpS{?cZhCq z&)VK62oiuvkSv)qj3L)jzwICZ7BEeL(Snbl?ZafpxnqD#Q4~$nR?v9aIn=DsDYm9- z>kiznILSb;BlQ76g zNTHK7SGg0u5Wsz4>#8^~JGq~2|AltswQPVwB*DrT57ID=#I1-BPyt-WCQS7CPPC3YdVl|B_ji*<*b?nn6mP;A?Hj{_(~iu7lyjzg3-B%dGfp~@^u90u(cp&-nV^nkOKiQ zjwFc)r2soouL;6LDU!jV3@!{32AMjUaUsoBC@v)cLR37!J-}6DJe3sAai=CCL?B5Z z1qoA{`cyQ2J8*>iG&Ic$?UbrEznxebG1l!md1NUIqx}ZW*k2u!_wVd0bIIS!DtTm=X)>Nrt<{^PWhN1+xs2> zfRG~rFm5LwBFPkCrK3a=AkwImq{)RrmL6XiQW`|G8i1)VLGgp?MMX=-E-A9)5CV{t zB!x6}q3hQo=Crx&xJXY-_aFIA!vuCga~c?5^PQ7de=3ZGGz}>P;}Q`|@siK? zRWGQ3pY1MDxDIrJyD1!*yTKH7`OlP$I)#q9i6o;gEg&Ra9@__{?1_^3$H7Ycn9N0P zE2~rSSTMCUB4=PbO4_++4#mho;B|xS7$3 zI1nJ?2;5E=Bqb_D(nKjp3PuJcu_>3f^Anl66uOjxNJ?CRsy<-?Q&IDy;seElT($k^ z3&A7;DJ4i#ntCFh7>8=P`z8TEYp~us^ zMOp|YorID(l1c&~lBQ`Irn7Dx0Z3T(ponOtaT2<2CUjwvf{F&JhN=%WKl238Q^vey z%v;X=70h430#z(f#mj2dvN}&$ttU|J^@co}U*#%Cwjwf!Apn4aS^!i(s9xY2IP2&$ z`j-R=Ll}waNNjK#bXx8i@FLSAM-P5;V(i?ECAIq7Oe0~%coNb~@ls9(CYm_)(y4J- z0;Z8u7k>Wo5BI#>e_iAY^$|df_rHBLol#j%T|R!`N6$UCXWyaoVNvoNnNdJRB?7OT zezA6KMqRquDLioOLVOO-nZt*k`RZ4`{MCJDP4mJ_-+E(sR!_&z?)k@K;ZkAc+^~d8 z%b%9DH$4NBNiuMM?w#C!;s!>f~5-VNMx-|e*=93-Rq#F;k_U90cwv9Bbq96orpuJ5jg%e1NU z2i`nixocfTLA;n*TiT+lXuSHI7EX8TGD>V&b*8SSrN#RkQ7KF5lI0gNJ@~V?V(R8z$%FZk|b$kS+KCFg=lS( z06-)yJWVOUKt!oTo%ZVs8uAudl96j?k-~7SWG7SLAI_}uzJOxr2Tb(7FGrL$7_xVGo z7y_A@OEZnL-KEndmsS}V9lO|8b@v<|42MU1I(N)b}oJPVSN6cU)CG9gk`Ng)`bsV4*hS2UFarldqE zhbLQ5YNsS(sdRIa0T2l$CE2M*1V{;B{gy-$DRoQQ=}D5$CdIB9i61O)DjWMk3IUs@ z5sf7v)960k8CkwF_W!f2zQR;o62^gR%vXtQ3RDkr3yER@Bx>i=BVj}mVv0N~l-JMn zzktXZ*4$dCfLhso>eT)&J$zSzQ44IP^|wpHTwcV2q)5)ceu>Ad4Z>nkB6VE*LA6GOc1j@ujFImP@I+BHT8 zPuF=izWwr^L0xO!uw#3Bh&fFGC&}o{lPJT1X>N%mGAeObbC+CNRumsT{NnSk_Q$=O z?|!s*a!7^lp?a&b@Y$F4?mcua9H{E(xo7u19U*skT`;;F$cj~;6lB`j!WkfuB!~FoLYt?b@9x?De`vg{^VT)$C{qF zr&R%%J~7l(*9!pC;UPFXe75E8k3MmC{OsOu_K$S;)y2;`v>`EerK_$F0H#m9@~pY@ zb5A|$h48WOe&fK|-`U;ibw}R?qsw9jX6?dgi6sdU^RvYgft5(Yj=y0NGOIAlnaY_i z&XQ8Le;^5&Y8jUz;~Wht!LJ#U0qIzJhbG9#X-hU#1ppu*48*HK7c% zlOm$ff=M3`3n9_cVQr4-iz^v*$)y`3mvNSgo;$p+>i*C5gaE+X)U&Z-*b@SP@W`pA zmiz66COi~s>QVrd&ikL}G~@Aj+!TqVgJgK*RG|0cz13a-2#;N9ZQf=HQxETp-1%5v zn->7Q_1(Rp?_M0o_XGeSGIpVU$EUY7+l8wG9suw`q^ z2+enR0U%i4)wA!Vy$A2yvAL)BBcJbe2i^sv%Su*}X$G0xlJk?y5GCUR5D_K;9a@+V z9io$3az{!-Fe1sglFlAFBM5NXvs0?rqysim=H_pg$Po701#H=;{UM0SKdmx$wFCeR z6R2DASWMb?7Ltr+%X`xONJ(o{K%PXR42vRBgGjQn+SP$Xq%ht+@=sg({+(mIr|LCZ zMfgoA41MZ)S?wl@T)$dg)tU@cDh*u=`Z5#$(Ny?+Ma^BQNT#NlKmd@j@I*y(K`AoD zW8+F?gZ)%AcD12yvyxPZGgZ^nZ2X7d?0HlK9cCuGcQmJVgqt$~+{_8*l1nb#P#PUR z($#rq5*$vC#+!Nq0O8TWwx-QVqℜ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 S;aBtl0Jzy{(^3G!Y?n$Ho literal 0 HcmV?d00001 diff --git a/www2/images/timelineSlideDark.png b/www2/images/timelineSlideDark.png new file mode 100644 index 0000000000000000000000000000000000000000..16e210bc3473a7a8e0c06d23984cdd41bbc7eff9 GIT binary patch literal 95191 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

    afXWH&FP-JbSf?CJ`l}I9 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

    y5LR7ap>9B!kidsZ>0 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 SF9x)E1bvl|6R#B25BPsUwjg2v literal 0 HcmV?d00001 diff --git a/www2/index.html b/www2/index.html new file mode 100644 index 00000000..4610f963 --- /dev/null +++ b/www2/index.html @@ -0,0 +1,288 @@ + + + + + + + + + vis.js - A dynamic, browser based visualization library. + + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    +
    + Generic placeholder image +

    Network

    +

    Network is a visualization to display networks and networks consisting of nodes and edges. The visualization is easy to use and supports custom shapes, styles, colors, sizes, images, and more. + To handle a larger amount of nodes, Network has clustering support. Network uses HTML canvas for rendering.

    +

    View examples »

    +

    View docs »

    +
    +
    + Generic placeholder image +

    Timeline

    +

    The Timeline is an interactive chart to visualize data in time. The data items can take place on a single date, or have a start and end date (a range). + Timeline uses regular HTML DOM to render the timeline and items put on the timeline. This allows for flexible customization using css styling.

    +

    View examples »

    +

    View docs »

    +
    +
    + Generic placeholder image +

    Graph2d

    +

    Graph2d is an interactive visualization chart to draw data in a 2D graph. It can plot lines, point and bars. You can freely move and zoom in the graph by dragging and scrolling in the window. +
    + Graph2d uses HTML DOM and SVG for rendering. This allows for flexible customization using css styling.

    +

    View examples »

    +

    View docs »

    +
    +
    + Generic placeholder image +

    Graph3d

    +

    Graph3d is an interactive visualization chart to draw data in a three dimensional graph. + You can freely move and zoom in the graph by dragging and scrolling in the window. Graph3d also supports animation of a graph. + Graph3d uses HTML canvas to render graphs, and can render up to a few thousands of data points smoothly.

    +

    View examples »

    +

    View docs »

    +
    +
    + + + + +
    + +
    +
    +

    Showcase; see vis in action!

    +

    In this section you can see cool projects that vis was used in. If you have made something and would like it featured, + please make an issue on github with your project and how you'd like to be credited.

    +
    +
    + +
    +
    + +
    + +
    +
    + +
    +
    +

    Contributing; join the project

    +

    Since vis.js is an open source project, everybody can contribute to it. If you want to contribute, great! Here's how:

    +

    First, fork vis on Github, then add your feature, fix a bug, + rephrase our writing etc. and do a pull request to the develop branch on Github! + Pull requests to the master branch will not be merged. +

    + If you fork the codebase, you'll find all modules in seperate files. This makes it a lot easier to work on than the distributed and combined vis.js file. +

    + If you want to contribute but don't know how, feel free to pick up a feature request described below! + These come from ourselves as well as from Github issues. If you do, please post an issue on Github letting us know, so we can mark the feature + under development as well as help out when needed. If we are about to implement something from the list, we'll remove it before starting. +

    +
    + +
    + +
    + +
    +
    +

    Feature requests

    +

    We get a lot of feature requests on Github. Here's a list of them!

    +

    The requests that come in on Github usually have a good argumentation and a lot of these ideas have made it into vis! To keep a nice overview of them, to clean up + our Github issues and to supply a pool of ideas for people to contribute, we have made this list. +

    + This is by no means an end-of-the-line for your feature, but just something that we cannot pick up right away or cannot use in our projects at this time. + We'd like to invite people who want to contribute to pick up one (or more!) of these features. View the list here. +

    +
    +
    + +
    +
    + +
    + +
    +
    + +
    +
    +

    Licenses

    +

    Copyright (C) 2010-2015 Almende B.V.

    + Vis.js is dual licensed under both Apache 2.0 and MIT.

    + Vis.js may be distributed under either license. +

      +
    • http://www.apache.org/licenses/LICENSE-2.0
    • +
    • -The MIT License http://opensource.org/licenses/MIT
    • +
    +

    +
    + +
    + +
    + + + + + + + +
    + + + + + + + + + diff --git a/www2/js/bootstrap.js b/www2/js/bootstrap.js new file mode 100644 index 00000000..b6ac8d99 --- /dev/null +++ b/www2/js/bootstrap.js @@ -0,0 +1,2320 @@ +/*! + * Bootstrap v3.3.1 (http://getbootstrap.com) + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +if (typeof jQuery === 'undefined') { + throw new Error('Bootstrap\'s JavaScript requires jQuery') +} + ++function ($) { + var version = $.fn.jquery.split(' ')[0].split('.') + if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1)) { + throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher') + } +}(jQuery); + +/* ======================================================================== + * Bootstrap: transition.js v3.3.1 + * http://getbootstrap.com/javascript/#transitions + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) + // ============================================================ + + function transitionEnd() { + var el = document.createElement('bootstrap') + + var transEndEventNames = { + WebkitTransition : 'webkitTransitionEnd', + MozTransition : 'transitionend', + OTransition : 'oTransitionEnd otransitionend', + transition : 'transitionend' + } + + for (var name in transEndEventNames) { + if (el.style[name] !== undefined) { + return { end: transEndEventNames[name] } + } + } + + return false // explicit for ie8 ( ._.) + } + + // http://blog.alexmaccaw.com/css-transitions + $.fn.emulateTransitionEnd = function (duration) { + var called = false + var $el = this + $(this).one('bsTransitionEnd', function () { called = true }) + var callback = function () { if (!called) $($el).trigger($.support.transition.end) } + setTimeout(callback, duration) + return this + } + + $(function () { + $.support.transition = transitionEnd() + + if (!$.support.transition) return + + $.event.special.bsTransitionEnd = { + bindType: $.support.transition.end, + delegateType: $.support.transition.end, + handle: function (e) { + if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments) + } + } + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: alert.js v3.3.1 + * http://getbootstrap.com/javascript/#alerts + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // ALERT CLASS DEFINITION + // ====================== + + var dismiss = '[data-dismiss="alert"]' + var Alert = function (el) { + $(el).on('click', dismiss, this.close) + } + + Alert.VERSION = '3.3.1' + + Alert.TRANSITION_DURATION = 150 + + Alert.prototype.close = function (e) { + var $this = $(this) + var selector = $this.attr('data-target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 + } + + var $parent = $(selector) + + if (e) e.preventDefault() + + if (!$parent.length) { + $parent = $this.closest('.alert') + } + + $parent.trigger(e = $.Event('close.bs.alert')) + + if (e.isDefaultPrevented()) return + + $parent.removeClass('in') + + function removeElement() { + // detach from parent, fire event then clean up data + $parent.detach().trigger('closed.bs.alert').remove() + } + + $.support.transition && $parent.hasClass('fade') ? + $parent + .one('bsTransitionEnd', removeElement) + .emulateTransitionEnd(Alert.TRANSITION_DURATION) : + removeElement() + } + + + // ALERT PLUGIN DEFINITION + // ======================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.alert') + + if (!data) $this.data('bs.alert', (data = new Alert(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + var old = $.fn.alert + + $.fn.alert = Plugin + $.fn.alert.Constructor = Alert + + + // ALERT NO CONFLICT + // ================= + + $.fn.alert.noConflict = function () { + $.fn.alert = old + return this + } + + + // ALERT DATA-API + // ============== + + $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: button.js v3.3.1 + * http://getbootstrap.com/javascript/#buttons + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // BUTTON PUBLIC CLASS DEFINITION + // ============================== + + var Button = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Button.DEFAULTS, options) + this.isLoading = false + } + + Button.VERSION = '3.3.1' + + Button.DEFAULTS = { + loadingText: 'loading...' + } + + Button.prototype.setState = function (state) { + var d = 'disabled' + var $el = this.$element + var val = $el.is('input') ? 'val' : 'html' + var data = $el.data() + + state = state + 'Text' + + if (data.resetText == null) $el.data('resetText', $el[val]()) + + // push to event loop to allow forms to submit + setTimeout($.proxy(function () { + $el[val](data[state] == null ? this.options[state] : data[state]) + + if (state == 'loadingText') { + this.isLoading = true + $el.addClass(d).attr(d, d) + } else if (this.isLoading) { + this.isLoading = false + $el.removeClass(d).removeAttr(d) + } + }, this), 0) + } + + Button.prototype.toggle = function () { + var changed = true + var $parent = this.$element.closest('[data-toggle="buttons"]') + + if ($parent.length) { + var $input = this.$element.find('input') + if ($input.prop('type') == 'radio') { + if ($input.prop('checked') && this.$element.hasClass('active')) changed = false + else $parent.find('.active').removeClass('active') + } + if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change') + } else { + this.$element.attr('aria-pressed', !this.$element.hasClass('active')) + } + + if (changed) this.$element.toggleClass('active') + } + + + // BUTTON PLUGIN DEFINITION + // ======================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.button') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.button', (data = new Button(this, options))) + + if (option == 'toggle') data.toggle() + else if (option) data.setState(option) + }) + } + + var old = $.fn.button + + $.fn.button = Plugin + $.fn.button.Constructor = Button + + + // BUTTON NO CONFLICT + // ================== + + $.fn.button.noConflict = function () { + $.fn.button = old + return this + } + + + // BUTTON DATA-API + // =============== + + $(document) + .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) { + var $btn = $(e.target) + if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') + Plugin.call($btn, 'toggle') + e.preventDefault() + }) + .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) { + $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type)) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: carousel.js v3.3.1 + * http://getbootstrap.com/javascript/#carousel + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // CAROUSEL CLASS DEFINITION + // ========================= + + var Carousel = function (element, options) { + this.$element = $(element) + this.$indicators = this.$element.find('.carousel-indicators') + this.options = options + this.paused = + this.sliding = + this.interval = + this.$active = + this.$items = null + + this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this)) + + this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element + .on('mouseenter.bs.carousel', $.proxy(this.pause, this)) + .on('mouseleave.bs.carousel', $.proxy(this.cycle, this)) + } + + Carousel.VERSION = '3.3.1' + + Carousel.TRANSITION_DURATION = 600 + + Carousel.DEFAULTS = { + interval: 5000, + pause: 'hover', + wrap: true, + keyboard: true + } + + Carousel.prototype.keydown = function (e) { + if (/input|textarea/i.test(e.target.tagName)) return + switch (e.which) { + case 37: this.prev(); break + case 39: this.next(); break + default: return + } + + e.preventDefault() + } + + Carousel.prototype.cycle = function (e) { + e || (this.paused = false) + + this.interval && clearInterval(this.interval) + + this.options.interval + && !this.paused + && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) + + return this + } + + Carousel.prototype.getItemIndex = function (item) { + this.$items = item.parent().children('.item') + return this.$items.index(item || this.$active) + } + + Carousel.prototype.getItemForDirection = function (direction, active) { + var delta = direction == 'prev' ? -1 : 1 + var activeIndex = this.getItemIndex(active) + var itemIndex = (activeIndex + delta) % this.$items.length + return this.$items.eq(itemIndex) + } + + Carousel.prototype.to = function (pos) { + var that = this + var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active')) + + if (pos > (this.$items.length - 1) || pos < 0) return + + if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid" + if (activeIndex == pos) return this.pause().cycle() + + return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos)) + } + + Carousel.prototype.pause = function (e) { + e || (this.paused = true) + + if (this.$element.find('.next, .prev').length && $.support.transition) { + this.$element.trigger($.support.transition.end) + this.cycle(true) + } + + this.interval = clearInterval(this.interval) + + return this + } + + Carousel.prototype.next = function () { + if (this.sliding) return + return this.slide('next') + } + + Carousel.prototype.prev = function () { + if (this.sliding) return + return this.slide('prev') + } + + Carousel.prototype.slide = function (type, next) { + var $active = this.$element.find('.item.active') + var $next = next || this.getItemForDirection(type, $active) + var isCycling = this.interval + var direction = type == 'next' ? 'left' : 'right' + var fallback = type == 'next' ? 'first' : 'last' + var that = this + + if (!$next.length) { + if (!this.options.wrap) return + $next = this.$element.find('.item')[fallback]() + } + + if ($next.hasClass('active')) return (this.sliding = false) + + var relatedTarget = $next[0] + var slideEvent = $.Event('slide.bs.carousel', { + relatedTarget: relatedTarget, + direction: direction + }) + this.$element.trigger(slideEvent) + if (slideEvent.isDefaultPrevented()) return + + this.sliding = true + + isCycling && this.pause() + + if (this.$indicators.length) { + this.$indicators.find('.active').removeClass('active') + var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)]) + $nextIndicator && $nextIndicator.addClass('active') + } + + var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid" + if ($.support.transition && this.$element.hasClass('slide')) { + $next.addClass(type) + $next[0].offsetWidth // force reflow + $active.addClass(direction) + $next.addClass(direction) + $active + .one('bsTransitionEnd', function () { + $next.removeClass([type, direction].join(' ')).addClass('active') + $active.removeClass(['active', direction].join(' ')) + that.sliding = false + setTimeout(function () { + that.$element.trigger(slidEvent) + }, 0) + }) + .emulateTransitionEnd(Carousel.TRANSITION_DURATION) + } else { + $active.removeClass('active') + $next.addClass('active') + this.sliding = false + this.$element.trigger(slidEvent) + } + + isCycling && this.cycle() + + return this + } + + + // CAROUSEL PLUGIN DEFINITION + // ========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.carousel') + var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option) + var action = typeof option == 'string' ? option : options.slide + + if (!data) $this.data('bs.carousel', (data = new Carousel(this, options))) + if (typeof option == 'number') data.to(option) + else if (action) data[action]() + else if (options.interval) data.pause().cycle() + }) + } + + var old = $.fn.carousel + + $.fn.carousel = Plugin + $.fn.carousel.Constructor = Carousel + + + // CAROUSEL NO CONFLICT + // ==================== + + $.fn.carousel.noConflict = function () { + $.fn.carousel = old + return this + } + + + // CAROUSEL DATA-API + // ================= + + var clickHandler = function (e) { + var href + var $this = $(this) + var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7 + if (!$target.hasClass('carousel')) return + var options = $.extend({}, $target.data(), $this.data()) + var slideIndex = $this.attr('data-slide-to') + if (slideIndex) options.interval = false + + Plugin.call($target, options) + + if (slideIndex) { + $target.data('bs.carousel').to(slideIndex) + } + + e.preventDefault() + } + + $(document) + .on('click.bs.carousel.data-api', '[data-slide]', clickHandler) + .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler) + + $(window).on('load', function () { + $('[data-ride="carousel"]').each(function () { + var $carousel = $(this) + Plugin.call($carousel, $carousel.data()) + }) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: collapse.js v3.3.1 + * http://getbootstrap.com/javascript/#collapse + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // COLLAPSE PUBLIC CLASS DEFINITION + // ================================ + + var Collapse = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Collapse.DEFAULTS, options) + this.$trigger = $(this.options.trigger).filter('[href="#' + element.id + '"], [data-target="#' + element.id + '"]') + this.transitioning = null + + if (this.options.parent) { + this.$parent = this.getParent() + } else { + this.addAriaAndCollapsedClass(this.$element, this.$trigger) + } + + if (this.options.toggle) this.toggle() + } + + Collapse.VERSION = '3.3.1' + + Collapse.TRANSITION_DURATION = 350 + + Collapse.DEFAULTS = { + toggle: true, + trigger: '[data-toggle="collapse"]' + } + + Collapse.prototype.dimension = function () { + var hasWidth = this.$element.hasClass('width') + return hasWidth ? 'width' : 'height' + } + + Collapse.prototype.show = function () { + if (this.transitioning || this.$element.hasClass('in')) return + + var activesData + var actives = this.$parent && this.$parent.find('> .panel').children('.in, .collapsing') + + if (actives && actives.length) { + activesData = actives.data('bs.collapse') + if (activesData && activesData.transitioning) return + } + + var startEvent = $.Event('show.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + + if (actives && actives.length) { + Plugin.call(actives, 'hide') + activesData || actives.data('bs.collapse', null) + } + + var dimension = this.dimension() + + this.$element + .removeClass('collapse') + .addClass('collapsing')[dimension](0) + .attr('aria-expanded', true) + + this.$trigger + .removeClass('collapsed') + .attr('aria-expanded', true) + + this.transitioning = 1 + + var complete = function () { + this.$element + .removeClass('collapsing') + .addClass('collapse in')[dimension]('') + this.transitioning = 0 + this.$element + .trigger('shown.bs.collapse') + } + + if (!$.support.transition) return complete.call(this) + + var scrollSize = $.camelCase(['scroll', dimension].join('-')) + + this.$element + .one('bsTransitionEnd', $.proxy(complete, this)) + .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize]) + } + + Collapse.prototype.hide = function () { + if (this.transitioning || !this.$element.hasClass('in')) return + + var startEvent = $.Event('hide.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + + var dimension = this.dimension() + + this.$element[dimension](this.$element[dimension]())[0].offsetHeight + + this.$element + .addClass('collapsing') + .removeClass('collapse in') + .attr('aria-expanded', false) + + this.$trigger + .addClass('collapsed') + .attr('aria-expanded', false) + + this.transitioning = 1 + + var complete = function () { + this.transitioning = 0 + this.$element + .removeClass('collapsing') + .addClass('collapse') + .trigger('hidden.bs.collapse') + } + + if (!$.support.transition) return complete.call(this) + + this.$element + [dimension](0) + .one('bsTransitionEnd', $.proxy(complete, this)) + .emulateTransitionEnd(Collapse.TRANSITION_DURATION) + } + + Collapse.prototype.toggle = function () { + this[this.$element.hasClass('in') ? 'hide' : 'show']() + } + + Collapse.prototype.getParent = function () { + return $(this.options.parent) + .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]') + .each($.proxy(function (i, element) { + var $element = $(element) + this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element) + }, this)) + .end() + } + + Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) { + var isOpen = $element.hasClass('in') + + $element.attr('aria-expanded', isOpen) + $trigger + .toggleClass('collapsed', !isOpen) + .attr('aria-expanded', isOpen) + } + + function getTargetFromTrigger($trigger) { + var href + var target = $trigger.attr('data-target') + || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7 + + return $(target) + } + + + // COLLAPSE PLUGIN DEFINITION + // ========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.collapse') + var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) + + if (!data && options.toggle && option == 'show') options.toggle = false + if (!data) $this.data('bs.collapse', (data = new Collapse(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.collapse + + $.fn.collapse = Plugin + $.fn.collapse.Constructor = Collapse + + + // COLLAPSE NO CONFLICT + // ==================== + + $.fn.collapse.noConflict = function () { + $.fn.collapse = old + return this + } + + + // COLLAPSE DATA-API + // ================= + + $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) { + var $this = $(this) + + if (!$this.attr('data-target')) e.preventDefault() + + var $target = getTargetFromTrigger($this) + var data = $target.data('bs.collapse') + var option = data ? 'toggle' : $.extend({}, $this.data(), { trigger: this }) + + Plugin.call($target, option) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: dropdown.js v3.3.1 + * http://getbootstrap.com/javascript/#dropdowns + * ======================================================================== + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // DROPDOWN CLASS DEFINITION + // ========================= + + var backdrop = '.dropdown-backdrop' + var toggle = '[data-toggle="dropdown"]' + var Dropdown = function (element) { + $(element).on('click.bs.dropdown', this.toggle) + } + + Dropdown.VERSION = '3.3.1' + + Dropdown.prototype.toggle = function (e) { + var $this = $(this) + + if ($this.is('.disabled, :disabled')) return + + var $parent = getParent($this) + var isActive = $parent.hasClass('open') + + clearMenus() + + if (!isActive) { + if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { + // if mobile we use a backdrop because click events don't delegate + $('

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 literal 0 HcmV?d00001 diff --git a/www2/images/gallery/timeline/1.png b/www2/images/gallery/timeline/1.png new file mode 100644 index 0000000000000000000000000000000000000000..c1eac27ac38e464db18f8e2ab33d13ce578a3c3c GIT binary patch literal 23695 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 literal 0 HcmV?d00001 diff --git a/www2/images/gallery/timeline/10.png b/www2/images/gallery/timeline/10.png new file mode 100644 index 0000000000000000000000000000000000000000..7ab00000e8fce97be6d4dd19c5cacb06554199df GIT binary patch literal 24378 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 G;Qv1ny_cf^ literal 0 HcmV?d00001 diff --git a/www2/images/gallery/timeline/12.png b/www2/images/gallery/timeline/12.png new file mode 100644 index 0000000000000000000000000000000000000000..b02893cd2556a580ffd7998bfa8cb43b7908574e GIT binary patch literal 31327 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 SFI2 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 FV1mN7nt=cS literal 0 HcmV?d00001 diff --git a/www2/images/gallery/timeline/13.png b/www2/images/gallery/timeline/13.png new file mode 100644 index 0000000000000000000000000000000000000000..34036a6b21b04c2cb351b9b6523ce28313b4df9d GIT binary patch literal 28385 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 literal 0 HcmV?d00001 diff --git a/www2/images/gallery/timeline/14.png b/www2/images/gallery/timeline/14.png new file mode 100644 index 0000000000000000000000000000000000000000..cb4f716994faf1a6c893cc975909884a3d467dcb GIT binary patch literal 41478 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 PE4f3tG#r_sJ84nnjA_AeeNIx!I}UXZP2sRAtzw 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 literal 0 HcmV?d00001 diff --git a/www2/images/gallery/timeline/15.png b/www2/images/gallery/timeline/15.png new file mode 100644 index 0000000000000000000000000000000000000000..50ba8ae5235ed26ede3ca7888bdfdf9e667fd613 GIT binary patch literal 29027 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 VwMDkaGZ_GYsGyWU5ucXV{|7lKgv0;< literal 0 HcmV?d00001 diff --git a/www2/images/gallery/timeline/17.png b/www2/images/gallery/timeline/17.png new file mode 100644 index 0000000000000000000000000000000000000000..0994e9256fc6a60de1160bb1d82711b512308a5f GIT binary patch literal 28444 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 LMe#CGBj5iI0z1RG literal 0 HcmV?d00001 diff --git a/www2/images/gallery/timeline/2.png b/www2/images/gallery/timeline/2.png new file mode 100644 index 0000000000000000000000000000000000000000..73ba3bf9468b10881579ed908fde873aa7002f09 GIT binary patch literal 27189 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 G{C@x&o`{(M literal 0 HcmV?d00001 diff --git a/www2/images/gallery/timeline/20.png b/www2/images/gallery/timeline/20.png new file mode 100644 index 0000000000000000000000000000000000000000..7bb2ac714f31c90fd645b5ba83c993fed54223cc GIT binary patch literal 32328 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 WWNH6^09jH10000T(7U(?$f?I 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 Z#mc(WcX-=Bf3OlD{#r()Sm>S4{|609*t`G$ literal 0 HcmV?d00001 diff --git a/www2/images/gallery/timeline/22.png b/www2/images/gallery/timeline/22.png new file mode 100644 index 0000000000000000000000000000000000000000..fab34c851dcff90495facf97eb174ac08b6bfc4c GIT binary patch literal 51104 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

Jn=#|!g`0tks>eHlj*1iZ7#j&X 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�*;+&gfx?)D6>_FcWtl6)E;`EuCZ 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 HYZm%HOA7cS literal 0 HcmV?d00001 diff --git a/www2/images/gallery/network/18.png b/www2/images/gallery/network/18.png new file mode 100644 index 0000000000000000000000000000000000000000..db0a9bfd6379c7d034d03199839e26bc08cab1bc GIT binary patch literal 37472 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 literal 0 HcmV?d00001 diff --git a/www2/images/gallery/network/19.png b/www2/images/gallery/network/19.png new file mode 100644 index 0000000000000000000000000000000000000000..3961d982ad1cffdb9326f6c7f59d9070753a5b2c GIT binary patch literal 40471 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%0ALrLUD4KVn1%w=bp$HH5UcqJmh4Ul0~UI?0}C z6o+8|hKNYZ-5q*f@ZkdEfNU^<{QD*zTKBI@cU|xAlN@@&sd~$qck(7+Wu}Ht(wWx` zQC%ImP#Q~IX7#R<7$pu}xG%jTCc5~f^;?wkfAtb*JR zquY?Zq+9Cx^IL0W59E=vj|m!2TX_`v%W+w54~ifw7|bB0!sus=AUf&|)+eYm_T3sd zbL)Y}?c(~vI5}Sv&tsrdASjRKrcP@YKB+m%Z_kjgmEEyAEXve#$7Fx(8GI{0(9}4k@nx`BjwwP+fJHrxR}sSdrRwg~j|48W>boDR28EIYC_tyC zY?(_($nVw6Qhoyu-}n}zmvIUC5wLEzqbx5SP$`K$xZNi0M<3}=bOnYd4qVseV#QBR zp0Ac}RvlWhl&LSd?I8lC!Lvuvj!gXI z$`kdO(|9^S<94C@n({EI5E?|NTSg)YC*#a zF*cOu5J>B5V=iek0$zbVQ>}4!ozSkmN_!mMmk&WF{_e1QP~`3*@R8eCUwSoEv`;hw zPj2$1x=g%0;Wy^>Lu-@alS&c`*{aH~W2UKnr-tbg_a7S5Gf-_hV#;8n6P>!MLU!*3 z4&#;kH(WOaXx zf7)BLJ|9D>hUCP?jY-@6K@*+;W&e4aqP~;w0RVjGm6SE{F%wI+x~G~slnmP-g`%^;Og2Cr*tcy3&mJEw8`w2dhk3B3k|$+ zN8@qUTBeyebh?2gW9n{3E}0*g`Q6|<&TWOj`gol@D=S=iS==?2;;dElaD1m=;=~;L zMKzZ?R2~w~fbUqOzBq*Nb8j1yk#eF&%6;REZfk4V&(QDoDgf4#*3ST3B9luE$f2Z= zl8{m2M+2WJJ3TKOo=@e|L2e$M`@fHf`OGjMk+KU{Bej9uU!bNoL+pe%epd{%oeCBo zZ2v;=sOKSMknG=l<}9734n;WfNzH~x4IU$T7?)rPyf`A%M6Bo6pHI4(VT3mF$YA{nsuzU9Ua?TR%qqQny97{{FCP5#w&eb-(33!?=t`+yIsvPhk(C&d{L~1)P8y+p0DY4STslxXzF``ZZ9*1(iQV|&Mj6gPHwFUbG z-AmR6FT<>x;BB^)T4UrKPR651r7ofw0%|4+`5+Uu)a3bv4+cEbz;xGJXqLePQg+SX?%OaS8xa$=g#+vT!#w_oYZhfmro-asj(2+O5lDx3C86&uhkycehmM~BSuyy}3= zA=^V)cp+*1V&Ssk!jk@3m%8Zj$4zJ6{K|12JdTTu5Uq)xkUNQO#$`AM_?LUwABZaR zx*fSf8F+o98yhHYFIua}Wpdh?w}VSI_#cA=#pcL+tQs-1uX>z`|Tr-`r%JyPd$GG&HPmSfy((OGnF2sfDv8>Y?g| z^M@wSc5))y9HH6_u8B8lR~Ov|DaCpwR$Ff`G>b+;l6}}Btt`|G@8o5<)w2x{bqbK% zlzZ5sEh3deny7d2+56})sBC5Gjm=xN8Kw_;q{?|hI(8EAMu1e;(Ij*Tf8WKp7Hi-m z$J^5MS^7&4x9roZgp(X#cUgzvLJd8BS@N>Ywx_hdd6M&t;q~zRxAIiG*JA~~JS^U5 zB+zuQ{PTUWj}G<6BMf%#{?;UjtuEj1j^p&5PIlEXsl}hsjno5_YvsQs#EG9=U#Bm3 zPmWOCM)xlWS6HTzI?ycrz{Ql@u+QUDxYLpGQjV&#KU@G|^t~KaHb$vnmq}HocUrNH zJQyRqtZh$Bd{c8aR5*RJp-0x+G?u*>G}GC4GVkN0p&ud{h+H{J=%U|x(qRMs*Bcq1 zq#^g1Ep0XVT3S?5d*GpO?ZKINUZG~{>;2l$r^PXyIfzb~HNvosATrNQkY|D0$}=%{ zkCb4z)7P&C;L~f9IhoClDh*8ObQ%|39q{eAh6shh2a;M1pGNv#Xw_!8_2ar*`qprc zG_$zx&~?AM?6rGT+fMJZc}pQ&qpOOmZJc|lrQ@^a%=s!~ZJg%5c|IINXpg~(9#)Bm zm|*wN-j)~2m9+y3;MqVBf3`&BXPHSe>}K;US>{s7mpImYJC({kZ$9_6^s1kbVA6-J z@%zs`A~)MvKrHZDPGX}9^VKZhKytyP!A=b{VefBXHpm$qdUHUb883Hv<9$ju& z2uWpXuNJ3u^9sAkCVWT9_0%UpoXh6>CjqWPfH{oxCi`MjH$Cj2JR!u4ch$k+L5=6h zhxl=uc?jFf!DP$xT=sbAj>foYer6PTtIb#%$~Os_PG-*|OeI_QkGzW64xATU?Q?)t z0$i}LsSb`Phj9sa9sa?%U2 zMqb)LWBN?KKJcy_jpCs@d8W)_G5sjW$2rbGvRbfy^5zi6PMKMtC0PM-D!m|mtx<5P z_%@c7G|p*9{d)ja4)`e7FBgf`e2?Cf##5}-4$oo(1qzOm5Yxpwku8}qn9 z+wPeO>EFu8KRQ2+9SD+yuQqhijs}IT0^x~v4xbC$uoeqEQ+k!!{tzm$ma^-%$z~;4 z(ZiOm4w8D^Ih|Nh6?YM@L@oo(8=>G!i`^*qsn~}b${<7~=DaEkcTO{h6gcQ$^acjJ zp`pdJ-1$fk4|nv?;1dfYjLMx$)Kqg@@>pDplrn@XT$Z@;mO|f-j`}?OM$$o9Yl48` z1QBK`Px)eGssL^*A7{ZL1c{b*M#qZb1rU9l*D_jy%r-;lMWMP0Yd)OQE^UrO`WQMO z4AEqnGV&Fk;r8Hna`pe8W0b4GA0Ys4BrIL5k!da&dw0& z!(=WyURo(7&!0-CD@bJ|j!ny#9=*fC@Z)P<@N~7X)B*h{zY2Hn&PcrT!l9Kjbz}pn zK%6cn+Im)X$!fmmC|hLH)MCoj1Zs(fkfujE#CvHJ-k){vJ-mB9>xN*p#cP$jLQ5xdCXnWvo= zw}%eND||?zs4lsSifxI6VTzMffLM59%@@O$W^%m7s^9m~eHksVHzEWE>}kUlFrAuc z>G$_N(vtm&@8#yq%)(x6x)8UJx?jLuLscB_&JFRV4=>nzox}}q2nrBKp;}GX5SS0! zrufi_NJU-eAf$|rfjZ;`p1T`mGv=&{uh;2S|9Ioj zQ&F{V7%JKh!tZ;FmQT_Dfn;|6#n`tzzx0rJR33i#{( zCvs3bX?z&sKc2lH_F_8jnwx#N9fXze*JT))zt`s|%9hU|5N54c4fv#s*xh0#ARm8KsZZ=pE6v2apH=!MtyUn~XZJFlgc3QQ_*kWFJQ{S3P zJEV_?pNKTGnee;;c#$EjCy|*vgA>=*>a+Aa?UGlgc5TZ zomvy!Y{P60rj?9XV~c|J7|3++j-!&HcgZlqt|do=0%Jx7lJ^B%+ULPLvra(L$I78; z<=)rvaAV$Q)9)K;hF$LwjgYk}=5FrXi2*;(-7of7$xbEU8Sidu_#1b3&75+g=^Gu1 zocHT%1$fArJU>5jezfyzGv06pPj%m9hQ}+VAJBx&UoZZcA{u3!u}p*RfmNw2tC>JS zc}qg(A3DOj8&*yTEfRi5Bg&Lk%0rQCYp+HfQ{Yu5T|7EhO+R&eQ`lVcMq|?$Ie{H< zSIPWfS}!Z7w5DDM>-r#UFrLqa*mgm!cCjyaBLZ>X(uN@5^fgThE_j8MhoJe!!kEhH z#0|&HqCpWG`|<3JP8OHbHygs@Ta7euEN0|02L)+*c6n}?k#GK=Arsvj$yxN6%#6hZtw?)<+gF75b;}dt-T)^xxA5q ziNG~qd#M?}uhgc$Wet8$!Qi(4%mu@IqkpJR4ZQ7Z7ZJ7|HRMTuk+}DE=q+{7YSCM2eeDOsgRf4 zx}&8gW42JHSQ)?XB3sKO|JXmEQNX4ELzbotK@(>7{0a+0Il>|^sPnj+zG*zANTCv5 zLDz+m#S1IKfrTxXPYjhp%`6@pCpuQFshV2jlP| zx};X-wY20}s#Lg8`+P5ES+6%V+{Q@?oaW5l*e%Y#ikV|L86j9c zzrL?!K+xe5zIde^B~*L$z+vo_nsZJ*M_*orxU58ChC%CUPX%>S%ITx>+AlP`UW81# zOcqY)i^2r$s`J`luKj}lR61t``=I>SKGPA>oZ|p2D@i**oqgd+pJE!|?m}tV!(rR2 z_&oHJgN=h!T^8FKDN`LCi+)e{WveO3?q;+Ug`0rbO|{i1Km+4*Hw4}(_{JcP5bvuF zrO8rE+MP09OgT7b%V(BhYS8HF=~Q*!Y+Nic6{73aq1L#_m*mH7ae5FBWtx_PVv7Yzo)&R~knX#V%$34oADS>#3B;-ypjwRHI%%d;0vk6{6$~B+3pC_XRIn~- zr6k@&(@K1gCga88ZSdDq{B!W;SuBqK2tIjiARNiJyyYDFcPwcxr<&b%uW6?q1dhLH zWM6ZF#zaPGCCYJUk?3FvVS?Jw<`#ErWrhNrjVAS4%s;8A<6X6PzbxxttsZV1B&&Ao zjQ7QbLdIX5HGMPy|92lrb&c4>YFYP7*$*hM;;B%hz25aWv2*)=>?&7fA~f$m3LTO5 z^_Tfv34W`ah2%+QH(~#ds+9C9KqQb0J2N|yDd$-7r974dSEL@LPr6+*_b`#VA{;-1X372;FV6Q7q@%=40igJ-IB|q!w;hiW< zY=qHFX7Y2dS!>{uo|K`0FHH})dn4gEua{&}_piIF0dDiP^G&?vCM_)kPToys* z+)Hs%8Fs>5IHSk=Rv_IQhq(Za%}jie#|K3ufMYEew4QVD^aGmCNlF)@jBRTj zFBJzBv>|$FqU=E!?4o5PU2l`;nUn*AAMZgO6bua7%y{!R46+pba+W@0l$g`!kkO^* zvV~$IM9Iv~WWC~JhTCwXhZQ3?>HJ(C*`3oC?*U`v7%1Ael;bs(>vzY}>Pc7Go0WoYG@1!|L`hh% z(9q6KW#LCGL&ZfE;KQ#t z=>Esl{V3@1VQk432h~UO!PnUwQ|}>6gml0(aRP zNUEq~V-n=jZ?)(GQvq;F%cxYMKPP?ck+`6*l5|$pYL9L4@U_M z?O{jcCO8`uB})Ewb#JBN;_GpTWIB*Rw88Ae!F^6crJ#t79zckZqlUB_(?nq%+pWkj ze@ku-Lld^kp$O^eZy$v#yXKf}dt z=3S8EC=@)E!j|W3luh53R&A6`2DCc@ysLonG8KEMvpflo9PCbXF`t-x-2MW?Ja1NW z+za$3gy1U^(ql3;q#cZK+9**MQ`UT$%FI9t;s_+*Vr`c*NqZrAmh%VKtF9q2Ti+k!hwILdg7#u8_|Z5%n%TbKk?uw3&M^t}cTZ*Yy6WjE@9 zz7#@zN^MeMo6fH{J43o1r|v3LX0uB3@M~XGl z_m{D1;1E%yMow=6<^+Tx)94UvP1PquNMEM*w_bm4Kc8G?*7{Cxe{-GAO&*>Oc=Mjm zn1t*~<;15>PcF>kxNKGjx;&CGeCiNaj z{7((`hY}`(6^DYGp=a#Z;szF#uKLgJ_sqME@}<}Ewa>VrCU`dCzQ0|LE7{2U)ZL33 zuXCkgZXH$b*n0j|b2i%IwMU2>Hl8vK=@R&zImz9)tCYew$4Lu^Is`|3YuhzFahEmN z&$fGrLHNyE6?(>g3GLpDYxxSuzQiavM33T&=s z9+q??oN_~2#fcD;iI0Q6iMD{nD5j$zSwT!e605Uq=*@9kT#cg#cT<<|?X}(%0_2P5 zUq0rW2MBqC-;(y0A}h!`U$)KOx~n#M@I%KAF_u+9EzUf?)yR?@q6llC+a1vk6O+Y5 zJM^g|X&o)P2uV7q%zWV9N!)Q+`TV=p^L1IIA8KARvWHc=!FVWzz08>)kCOAlnq2BO z)zQ<}?jGh^mo>AO^vo9Ri^*R`@C-dHTgn8*D)MN59^@F-zn$nQOQlWYUlDWY;3cp} zl!Ki!R^vtT7Md1S4t`i!-`jtb?IkV^x;D9?tLTCFd8lK7Fb@v5~1z(?& z*a+zh>^s_WKJ#LBuQOTqG3fOi&5!BxdRh+?SG-PfLqubzFyZtLlg(x7>*5a^vFtfN z9!^|ZTAGC)bBE$7T@tyi^isVP`C@vwy9& z44YgsNo>!e_BzT!6cG~|S|*Elpo?tp$;2ty&D54-wJBkGS#FfCA>fnV-f7zmyB;(b z&$0t;$GbMkuaF`?jrnOj%UUx0Yv=poIsVwY`X^@vNf)*MuK@5Ku|XPZ(mvOC!gTJ)ApQS~QUydQU|PqCz?pgU6JKs$}oY7lnOPv-qIs3ADSz zN~C_poKv-%Dd?fMEjr9j69C`gx3=BAK?G3{eV7#-$FD}xI<}W8@%=aw57HbDe=$7B zfAYZ}5db8F$Ra5VQO$yy1e-Qk)-7yGIaN_ffByv}1+pn^$GSKD!Pu1fbF)c($ND$J z#pRsOCG`Ci5P~GY-d5Wu)2NRgNN_+XK8|s|Sp%~M`ns`JttcRTjcbC|SbdwzM#U`eE-W5)U8eC>5g=xE9h`>(F0Cg+V)Y=&=aH@~pJ zH?~}SZhiiYVIGeHwqAaqjV_b!xJ)XzRpIo;K*_s5ztON6UOY+dt^vZjRi%poiH*j?j=|WpDgp z$;3+O>>sz*CfV+vm8v}*#Ff@jvv_$(aPP~&b!JW+@+OWclkWUP=m(FaD#PM!7X_*! z;>~|ce&w%?SI!Jisg|M?gC0Sk2N%~60uIBR&YSX~rR%gM8`EQ|q&5GqWMZZCjen(A zY%<^ZNr`$KL+5mhdnDJeyVkw;;4sWv*xn{5QWEkIfs)VsIr-?zxw~(S-1ZT_&G6e# zW&XJ`pVA=g6NVH?r6EC}1QBe8O=+hl?qoDp9iv}4&;R9xegL@WS8Xr9o`3M0u`et* zt|Dl2h86i;PsXKtmw0Q3Aqk`l4T8Nch|9`RA1LcaS{=BIy8 z%|6Tfx0}Mlibc)BH@2H^?Jzgh+6^hj0R#dZp*$?i9i?0}Q8{CX+#XBZ_?J{m8++_a z(NCP|sZX-vKo3_MHKmzH?xA+lrTc(@Ve`K(x8B}E5uFRhlIzY?MS&oK#n80T=3qO> zksu-^APPj4NPE|Uyw|(zR$&1ErY~D22d*(1nvkumtC?&E0vPeAghY3l|!bFZUgpj9j1L%FP z=O26{zoXIisdQASIH6Lih|m&0S@Ps+VQalz9$?@3h_B!p92WyUR22lu8PhafAtC|dS7|_{eiaI; z%x#7(8E!ck>by?}0ls{m@5|@;HXN{D+iI?@vDejD@9e_%P*oPd@1bW6m%g#cckUSF z$o3@w5GYheguIFI9M9;i_-K1c(>k`~a7IO2zBxJ67uuFAb~w6p??=|%;rNdg#_m=u z3&IU&s{yso4qwaRe_v@Y*+q~$7mugc&QuEasyYnfIc7TOk!eZiHK6tuo{ETYC_!5@ z+@nDIN&{Jh0|{Oo5ybAL3KMyr(YYehl3=H^%}fXHdtF<-&!`TQhBR3?LH+dE9_q5a z|Iqz6ujbd+lhNf;P24H*v2S10$L{8e-KHeK8AA(%svMy;%QX|dG86}eu4%L{?!3?7~s$(tR`h$4b>EGy~=KzWFoHfhcA{c$JaqlI!WJjeIPna!~xOe?~|QMsPT zbKS-x%bAvg9eUM#3gH}%btj`Dk*bIg^9!jw9!N0#1T6h(%XO-EM+DPB-NxrOIT_6! ztL&UVIJYw{w`3gGx*r|4oa>GF#67Ki!5H-hOCh8&@T3a!0ps#(~B1=9hQ1XLlB=S>-|h)@y~#NN1OHF4+9%dL2xPOUO; zn(F}|mV*`p)5dnqeY-L=Yz!7kI>{pGy2G#=_5w;n zLVIF#Un>iHNe?a>BIq_YB%L-*m{^on^kmdGs7)tgmy?GVO;pYq!zIx}$tj%u>HEBU z)JJ^^X-F~M#uKz(t`N~NYj6OF`bZD*p$#b}3s7(krQPny95FbKaq!5bSJGgTK-x3( zi9FAmEbO7dZbU&A!<>Pp1B|0cA>g4?E3LP8dy9ghMAp1;+|i>?<gK^5ie1D?+a!Op3HGV z$OmPqt#wv)O#Hy#FdfY3Xft3O1d3jn_!RoV$l~WWnzadj&KPlQxda0M{YylU(Xlnl z!af@7{ERkiv>fb#`c`GF`arg%#>zZ|Nb!dUm zmLURoWRlT%uV1%zx9XAQ_SOUXMdRt_I_J?<%Gh!-c&hDA8d!91kLQNOg!&ZQ-^R*A zR1t~k;MX6^Jh&tm@zdEOFd$|9*xu_fEge=gUCmWdBsA6_&;>5S+Z9R&hWFZCba zjpqn;Nmd#Xx^P9(TBi-84hNBfDnjyvou)pSdPPnF{W72^l!fU)YehZv=-!UXu#nO? zC9tE(x$HM>I~$yPKNY(5f{vRF_p~^l`)lf=J6e8pL-_Vf1BVek&oc&63Nb(R_r|WQ zx&({(Xt48VrhTSYX(wVvhoLMILI?u1F9qp!%pOiw?DZ|#FQxO&qOlx-xMc6wzIzAg z77qEprksJh?k=qe3oG_m551XRS8JIzmW6~1CaB-NH~;{5KAXMc;pF|_h<))K9{|L2 zTr=@Fee@2fZDXQvlnr6=9Ak`>cCs{I}HaU&~dO%Hu0#k4zg<&YFEj)JvYeB{qAc zeCy-sUp=2&_mh$lC1OVB5nu0YO?h#XZaO$;q#_9)uGH)Fkw~!8AXN&b^K=`N`Gafs z+Q(`a2TpiWFQxHB9?L`2BfE_6_jKRU}1)6yx8 z=Pj)4#QZ1n+-A_;siaw$)_D0zsW9jkHl%pO*Eg#T`XT!7Rrvb~EfNu~pXFV#*Lq@^ zcFRYL&Ma+>eZ*7`_lu>2llL5@pi6x_h-&4-qz^skF!sn=`kIA_h`KA zCISipz_gC3yu%oFoz-bi{&e9pcn?W?69R+~-9AZ&sw|RW#iGq%f1Gi2>E2(_kYXcC zMF7~_;*713jhtRGWa7w4GfJx`r4wzc&o^f3{B+(d4}&Psm3z&wm--d5Ki)fLZ1N!S z+Uay>zHC#f{E`WLa+mYtZH5J#`WVLt-_XAMpX{FI!xXb31=BvM)T@dJeudP;Sw@4WCf9dBt{B6gUS!5GerwhR|C#lM-^-RL_Je z+qB8pio!Fp_r;yp-?Q5Cc;N(T$`OM_EeC)9roN_5jQZ8TtTaO&dwA)=LcJmq&EhBd zdKLw!N5+;6(=1vR8lbLxzx&zdnWcAKts?@iba zmpbo9U>qEdIir2=3L*jl@T+wG82Q(W^8oPu%Yu`?)$;akdF<$shMpfbb)u<5HlYn4 zQY{3l|L|gB?kJ@^On>=GP7=tO!%oup=67pA0&}#tl^}nuCcI*wJf^&3n5c@dsR7CY zQc`DCkq3cmFpV@(Y(w zRW**kdp0#}>ZHkIO1Xw20acads^NFPXeCm)SO2dh?4=jn({|+y^%FBs(oRFm!FP7q ziXx|NHLlT*PE{+zw1X*~R4r|9m2yn^QPZ z%R|EY26bE+suDFF;0QoEU9Wi{;r!$U?e%R|b%YchZI@+DoAca8b8EdbC@S>TH$AD= z{aKH~V5;c<#0+BC*gjNTphOlyqSUJtzPMEp;hUHEZ~a5!!U@XHuMSB9 zx%f>7K8UcEpiTofG7|OKq*K9 zNonjiuj!1c9*N%bs{WltT`lL>-e~_~vFTBjyooFK>EFFbEei{$Io)@+l3_9QL2`K1 zQ<7Zce-q>c1|5o$r9~R$rW$>nXzF)qQ-Pz=57N1xteDC7Ob+fzx z@cF-_9)BVGukROEM^EMjC6`Q=FPVf0aJ27J;HQcRW}hZW=8m9S>U}ktBHcEwoeskf zAudN?9Bl^ez2xm$AOg6#&Z$q@i$-RFJA3N9OLmCGK_PEqdt`4qC{k!|_6w-=g)J!a z?BqyNk%Z?q+3V}8E()LS)_qb1e`1{<<=ECX{eMO{UisJ@Yk|TW-zvKBp7@OKG=Jyn z(AUrR-}kA*uGxy+){TEjZQE%+{LP|kX7t5sX3|3$mMW371{|TUMz(lldh7X~ReQ}r zF{#5^JW7BHL=rkauG5D|&utV|9Pr2jlO=N2Fwv(_NkEQ(2(kne2&Di3q5#8UxO}Ii zfv+`(c}Fh`LVv&s7ZJR&#oSuwOdKShKd$HP>pyrV`-@j{riC+yNfW9hpG@kKY|VbV zrqMZbwEVm4!et8c zw=@vb;TMh*FPkj(2Q~63GZJ-Ai}UOT|?sS*1caLXJF(s?M@IVm=5;s2N+Ov@9*0?G6oU?9_jRqrDUOxt-Dty z;y@Bd_V@3a)_M5!Z9G#XV0{`YQUWh-(i@V_0HJ%ow(jk-kbI|aXK{P~Yx@YAlaHpf z^Wa-n-1I)XN&Cz!HhZLU+S9#X8_tx*!>9GS(1VS9eUxK;V<&E}%a4<{SBIRZHlS&9 zm+pNRp_&K){?okzB2uvWC|b1{;fRiH3IrvA41|!i|I$5?=MnGeA4W+c>8sTH!qHd~ z@x8| zGhkXrStO@x{;>lZQmiD<-Ic2@j>~oISD$7_lk>zHJD%eU#|W2BQ3uF9AONQAF1#LK zzI#iC{ru&8YsQNC#ec1}*VR}9kW=N4x62O(sB|ZgZ%BBzY43K*e@lw-qsW|XL)kL2CW2L28aMd(vL}~x6_&N-; z29Nl9ExKH@-_9Bw5eCJC5hbF_%K<_6Qv%x??fc%eEk@^$fa}gWu6UXw-1l1UPfN9Z zt&9U8A|g~rg-@R8{rZLekjD*PUAp%v3>&}yOrG0%d5FGSLq4~_f9@Dbw}F!Oe~2h_ zceuc^-PR`_Ow_eHH_Z24G*O*0Nb)OWdz16j8vWt7G({wjeIat$fJslebnkay95x-W zezDk`Kh*Gw?6uv>jA80cbJetl2p^1YML-|~1WF_UB!Lv%$Nkn0Yr+3(nL18>_RF#A zsK7X^-ERdwbWFJj0J@D=-=BElE$yG*F1q$ik9*}^x}Q{*XN-gUo=h8`T5D`>l7n8s zH1zL%L>W?aSUu9=U^{3tbU0WJas=c+C`bZPCE`;ECD4@S6}L8?J6e71wip21{I}F| z8}yWp0N|D3+_CB(Zis|DGrR`&b z{`Ibwv*6On%8}c#kA%h0v{ARga!{ls=pi>gl6rcrZah?B*f`|}EjyZ=tIrI!m+@=c zoPV#%suHfey<}vmIP|vW@-SWg-D3A%xODGLq%{`w(DtEV93heCnuQd=Ba@Ja_Ev?T zaoE-3Ot`)I?yExISmeLxm+?2YTfh8lMO6@N4x$8xb=~iXV&SLPxF)%iO;UrUAp%Q+=Xng ze7E_Zb>`H;ibs`x@k+iS#mYiLMY#95-i}QNoQklZN@VFyvnV7FiAt?$Lz2~{&;B*u zc%W?1h-99X`o&>o@=Kcy02o~=?rL$XP%hnj3A^LKnHgk_g9EvoNf1xSN^6dgGtqJ| zrE^sxc@t|B%%>2-d8BNpshfH(Z|Rn88PW2g%mGy*?L!J=@g%M3bLoEi!?1BwF;Qh@ zc|&;VUSZl`v8b08{Bi`%#6+GqrFlb&HKtisM~B0Zn9z`9K7}kCr`9L!wmiptlQ$3; zHhzYw#1{#JWZl?(s}60C0r>$$%BX@ceq%bRf4aJe!f{Cllc7ABvVacpIs z#+0+J#;K0dN$;;B(=E(fXgk0W0YDOoB7rJWStRYV&o7*yeCuE7HT$hgCaa|Z`qWxu zp;rsB%#=9`0H9^hHa*|+;uhVs*(cBPwq*Iv2InVN23@AQnVFs=YhXOfWf96kg3wdb zxvjza^%4iDWLW&dv3${ZS+@_yqaK;~6x!K*f$4X)$|9`zUh(7a>et@iHhom^nwe@e zAX5sdtog!5YsuQw?>`s)`~u(Qze~Kc%Q|pR=>X|;ajkprqanpII#z^*;PHu4{_(C8 zkemr+M$Uv6H<1w~;-o6EJ4=Xueob)UcUpe@T=w=$17+djPyZ?T-6wJ-Awd>MbB6h4 zc=!vko9206+H5@gdj9^eL=^!tItE<{jZ61q_0*d)Tp%#2OzefV8HDCEL(6NaJY+O~ zz|*aTTUi6o8>@Wly3qF@Nd-ORD+~Sme_rqV`qe%#j9CL)vpnP>F@HynY8Gy9be8V4_QjpN ziNlJ8IU|+!4Lr>m?kTid!)Dl$;SPt8hlEeTQ9SR}TS*Q3WJcdN_q_1vuO8i6i z*1&`++avdZn6^2?^9EK#Xa~<80czXW;FvINurzIO0gXV=Lt8Q|c*OH538XS2=+GaKC4tBiwB>n`zf&Gl0_9<$J;$2WS!swW{cN!h0d_Y#Wnm$3_`}ecW)W{k7vE;k zm}1pYp*zcdlX;%f(IY`ws9&TiH49rZoFV#T8uSpaOaNfjUNe!$^T(fT-_oUfuleXt ztu>$D%t9VIYbd#Bq7?0NCPzHS885I=wK2`3K60dOZcK4S>TbD!acIsk%Ymqmp3Fk* ziapkwJ8aX&|DC5+M#T2rpoD-xAnNZg2afB^^a57zv;VcqSU65$9G_TiOso>RpgZG` zH?blt6g2w(+-6C{%=noQbVjo-v>-Sa{f~!(rJjYxO>>G0j3AI;mQk zJwh(-sT%Z+?Z*9YI^(OoI>#SAuiY?99$qX)ytKcK=XdGe3qT+~1^kj_S(aCkj4tyH zty$)k$&qDIjsOG+DL^gqAF?O*kPB?U3*P^{csGzLKj?^01GD zRBAYw$a4a4!))(e9}C8gz3RMTA1U={<L-M1L&&x^(XaOdBLltdd@M zj}Riw9!@4!b$X{w2Mikq#R~9=W2e>~00Jt>8a!}}HL{Wb4S7g&n&(WXG$^PN$(gw5 zp7^rO=C$Ye{_i6H)c0o`#B=;F?`XF_o%#DR?Z01(oj0~yHK3e{c@sS{j4Z}?chj&p zqFbnnICW4z6*;)Rd+)&E_|zK1Bf&?fc2&u$PcffN!`=dC3SRSICMYnZHR@PIs zOd`)Yf??yOzi!*!;4J-K@fkxT#^I?o`pzc1I4GPyUKw62a)k4K9)EL&_-; z-!Dr2>WA-T*qAfXbPf)UQbgiciE^r~GI!~I^3a%K0hJuep+nI=xv7f;qGn-A&GWsw)qG@e_Dh$SUNBxsYv>6RONYuZ4lgVH>R%f^|JTHyKO6n*xxU}O zsogN!>ye2-$pP^-ce=MA=pn^{qgd|6Tg_Yl zmHpQ$y$7FU`5v=<|Ie=$XQxbvO)1H|`1GSWQ`@?BLw#-i>#w{hWp;k?qOyOlF=`X+ ze`a~&Io6!vMSfZwpx)DEle0_r6N@)?@#c7HVz6#*dCP{q=~Xp_UB}noGjD%JdwQMG z#Y_EngYob6j@RdZdLur)?${WwTiBZAld2>D*wy4r8R9W=saW;cmIJ%re)cb_+Q zDW}DQ=&U_WxI2+>*hwLRTsG6Tbk(LkR8!Ck12NEYwk3f z8dU=O<2=bCJDb_y=&>aj6p>U%#N~S|0GKvdTDiy44J*EX* zKioJ+@knI(K6UaS=cd{6v3`<;MXxq8ueCv>=VFY>(b{p zH4S}yUGhhl`vnU3zn&jmE{-fc-RR*aBKsb;!~e3}+>;QCz4lFWl#sV8n_8b@WkK2l zEn!`fRe!zd_KyaBbVcxiCD||iB|mdg$^4;q&_fK1Z%?TIekXp(B>vpjN_Mw6Bfr%6 z=dZ>JHp{wnchMU_gl=ejGX@8Qpr3wk~P{KGy zyyWI{{olPfpjlY?^`^l^!iGCbPQPpH()|=eTaI&t9!nRmejxGGlKg!)M{haL2LLr~ ztSQX`Dj8QH0l@lN`<%PuoWr)ClpH!S!KJ&4zCl_?)5hbOx^deRnO{7e897Ay%0mCe zlNFy#Il`)a)`M^4UtXop7^gh@)o6L}^c-a4()|=edsY89o0XRBvVQ(@?yViBX(Iv< z0D+Q`rQ*%!ct1DacN$+km+q$+3>(|>yfWMi*0(jww>8*V17(p6Eglf-i(R^(Vz3-+ z%klECJ2kH-aLY`mntdYR+9#Lp1LlSiLfjd^t}`=mU^^&@F6DayS441%;hA;%)&@4Z zOuXt0)x8?7bw8c)=cW0@+sWt(b$^RKq6ojb(A%@}s_VPE=0RR9XOG}BVfWL2k{=h?mf5Sx& zTY|ry*-L3V0RV{4fBrxK(lc=Z00cz~QBfr&b311{Cv!V{VrfxPVtYqBQwwV#0N_5K zrD~?8x{J+!xqK!f8|t4ZYo~$*Ppl#m;g1>jiiYGFnoKCk`#CJ-PIPf`Xo9b~p-|D$ z{*hS9bV%U{-{3Y#K12uRg@zB@u6pHJ&9q!@4L{V*3T&60W>t^Eb-*JfOR*}m`y+i8 zAwvHi*w@{=y1^h6fIw~!K!dL~A#u7Vg8*Fl^6}AH<1JjA~y~|{2Ul61~BIZl#FVGivzTn0GOt--Q0k0^Z+JlO;agAMLnQn1P!qY z0FMMgvE_-8>z zi(4_0clC&mcZ8Fq-O@&lS~QsJ$`}sOV(F2mEcv8iBJtEc6cdjoYb$iOPy#FLfC@_i z2(LK$LVaVX3t37uE$5E4O90@c*{*Yn3LeVeJaBc??eR$PUNV;g;BP7&?*IV279(d+ z8>klSg9iY_asy~8gbB_%ap^i>Uv$DOb|T)r;Rq5T@9q*o6G1TXf8qFsy5y}0)w|&e zLYg;>Q$mDn9m?kK66{eJy3`v``0Y_|4B@josagV_K?{F{e{M)J9|~ayR2+19yC(#tg`xU_Q_U>JaBy(awl`{Vn zQmtrXAt!#2#0SJN6KCf180_4PF~=Hw{z#7Z+hfJ%sPi!bqJ2yqJGgMH-PTMDyps37GoO45Wv*_u~P=-1u2Ml8%BT2gdmGZ-vuTr7J(G zO<+t&OxUWB?b3bDV3WcpOX#0Bv8saOPNXBI{TjTHwee+xb%S7oD>l86*i#xy4ecO`dHcA(DOkdWVD1@?uSQQ>9a!r_|Xx#5z|)ZB^Rp~Whw2e5~!Me<}C~mR@2+ zW4vm2Iua}7;&(0q?A@;_hv&RqX_`~-37aGMi$1^S7G;%T)vQ)IO*9pRTTgYk%5+wE zwoO%#a_SqtjCn-8MosXEO|Fp{sApA_oRX|nELE&rEVo&bMy?L)-Uy;0$mEV&GrK`v{exm-wE5|F>H#{`_VR$BuJ%gWlmSsC* zJ7YFurT&eMyAEAlVO;}Ix@tq`lQyWX#Wq-nTRUG%T}QuKqBN_NVy3yYxd6SOQ6WL0 zID5wIOT}?rf8FPLyo$|lunT2%Hg!IRW=1$>^*v=@Knbl0K21JR_xy0kA#*6jggS)2 zPBo60JQ_U9=_8pSL7$$pemZ>;Ne&j+cyEwWTICMC^q%o?2nPeUWZWZw=l zqzEu%5cDp6ZQYP@K6lVx^_)1*%BarhIxJi$2XTNbKp~4cLu@(J+1jj5V_&|CeplWc z7evfSVzOE(@l_O63^1$RCSx>ajMFTgt*Fm;E4nm1!V$O-aLid3Sm)zhW?9xY7~<@x z|5`t&_{A>UAb3U8kL=Op(erT}P~cAiVFnczARM3zd3)vQP0}7M$g=>vsG2(zj?8To z#uAQsTl#jhvy{aA>p^TO$>nzHNZg18O0bge&deB`;g(^<7hfdG;E-U=cY@LOp<4Lk z%qi?{9kqy$q(>L(^JWTGH0CFSr?K z$~bJT+g9!lPeazS))3dda8en+>f3v~AL%*^F2MfGfI-KTEF>4Iz?Jwz7>%Y7JCfq$ zxf?|^f=3r&ml-MJILCPCH&HzrB83wv8hOw7gSZxU5Aq(?e7eoXAj;3NEpo_mOBp=b z*y*msHZ1%+t;~V(aj^~}MI`bGb!K~JTc)mqCBWdShaTIAdPbroxPGhZ*b*3RdW1TW zPdjQlRI@a2Rc1g<)Ar%80q*4DY}(<&q3VH!SkBC&oX10qE{xUqy8L&tn)HNPTdgIQ z+*N!I9t#NTSTMBjG+;~k8p7*nY^D{94>eQDd|O|6%3B4z?i_gASqovckEo8Y8SJya zID4qCsKuzgQfqkgE{i|_D=fSWa{(s>%kLZ2qWdO6h}}SY+G1kO=i=^0lTp(N)7`CQ z`fOd4#*|^Ih33FI(Z;-XzJ?ZHLI21wub|pTwKKIF zH4f0kQmx_amF+l)z^mng?O=LAx8?F)pucTF9YS4x+H@LtD}7siDOeU(w0o6&YolMP zVB>Ju2Q>k84@ZVlH`_QhO*p}?rV=wlyDy2-_p&T5BnFCopDzkTu%wEi6WB2me z$|Vsp&%A4-SIH{eudoL<(bXVnPuY_0V&z1$_p<{Vi%YxOwBew>-k z=H_2&J@vG^?72K&!Cvxpq`V&)Y@TzY1eLZZwiuiV9SYBhE`>}B>OL%fJ6iO!>~PCH z9bc5ZgbfZHeTX}cK^29GNsAeLhx~3on@fP3dri>se)q0Gbkt<@RW{DUhljy39BfA4 ztLgpOk@3{=_bDeS3GFuC`S*Jr`*`IGyWn4H@u1c zs2=rLLlZkAAcMP&J$N7r z0PqRA+Z!5N0iB7BfMyo9{G>Y#ZM~yvqEAmc_m^|J4YZf zI|B#3F%vTzF()?zGdl+-Hzyr23s`1k;$mcBqG#gfVQ1xGVj=$9hg1Loyv65eV#=c; zCh@oGz!E>HxwEr94CcM(@%dZ3Z0!G0k*(9;*nufBx*OUvGBYqS z{ud*8`Cpsa*!)LJCueb2@R9tjW&g24Cp8ayAfpP<$m7%1)vv~?!?PX}RQ{0~3& zE{@iJ@G&uF1X=@az$Q-MgJ=GahhYEr8OT4(|K%|Lq5iL}ceXJ7>*V~4?N7~rH3Pa^ z{1>yInm^6{2!%h-5Fa@Hctjn6hR$}5YIb(k0)Ix?U-KvM^yz0*5mRYe*qYe6IZ^X5 zJ~jF4eE;PQC}!vk6!>XL&&)#4!luT|#KX$Y!^}p@#LUCQ^iNLyEcwKTJUI4E44n=C z7cc)(_NgB`6AM$1|H;c=CI8ijygZMzt&_8%tuatqOaR<=1`7)l9xfIWBV%SRW_o5I zxR(HdY(RQ$Rzq;NV>9M9G6gboas!$FXym_||C?(uJ7brhfdqE_XU8|OGX}f=M|kis z8?qTOadL6da~ZKS(K9mx+32}ASdHmTSlPIYm`s?BIGIiUUeP}}`?rb|9WB6l$VJ4K!<{wd-%scNhTu>C|78B(>u@s%+Wsp1|8(_7ssHZ8$GfaDp1S8_{F$q*E&eZ@2q#0=|9_|9f9qBMPn?FoqS)Bn(AErS zBEb0f0RH=q|Lx5Ec|QNOXZ^jm{(Dd4Gco2dwR5yFbQZ9%F*E}*+S{7(G5)pluR8hu z%0Z%b)^?8ab|ydpRzAl6wEI6=fmhy?{#w5G!HvMPy zQ`5gJ)om@D1z7%8+mqe@WcBk(%<~6SRq&t@C;)ES(_K$XD_OV$t+m7~z}E_=pE-|( z9o(otjGk)#qowwLwfrZ|-z@(OsDB#V{gEmD+zTE$f=8{4{}{IZTN3$4uKho`@mG`n zPkMdg>vttjfc#qgjqBHZo@jsLdIIFv;%{8P=JQ1R8`l#czZQSv`Zb>?+TXaI0Qt4} z8`rP-JkkEf^#sVT#oxGo&F6{sH?Ai@el7mS^=m#)w7+pZ0rG3{H?Cjvd7}M|>j{uw zi@$OGn$HvMZ(L7+{962t>(_jqXn*5+0_4}?Z(P6T^F;d_*ApPW7JuXVHJ>Ni-?*Lt z`L*~P*RT0J(f-Eu1jw(&-?)Cw=ZW?=t|vf#E&j&!Yd%l3zi~YQ@@w%ou3z(cqWz8Q z36Nilzj6JV&lBx$Tu*@fTKtXc*LH4{B~(70Dxl`Z_pzF0B~7JiwUc_&mXk9W$MkkYC-iut%@wNfDsVymi8BHACnPubhocVJwW ze5rr-a1eC(VIFPT8Ov1V#r=dXZIOlbZ6>SuueE2RY>BS}0 z;!HNT)%|AijG!OaPP>kQ;Af+AlQy66e7SuqCF~Sc(-8#b3{S?e-X_zV6=8zoGsvLQx=6|Gb`UhMKBD`*rE zBj8wj(GAV}VoTk~OkAgC%c$jh)N_!JKg-N~dx+Fm?ytdIi@PCYK1pNh=i8`z!ofLs zZpPz6TrZ~B)C-8w6_7Ge&nJ3idi-kJd{xMaV)~3Kjl9p2YOY4hzsYLr5SpUErQ~h? z2)W(qLnV0dI#;)BfbtjPV+FPGt%*C&qfvzLOh@Cdl-<&BuiW33;gWdi*5*oF)LA|> zpQ%^1-Re4W>G&%2Yo>j-Z7gIKJlHAbvmfRDTKGuhlLQAU15DS0+6JKA7?dspnSXAO zbdGuNgTRF@p<&ftx*2Q+@RFK`$26C-bSxdmVyxYQi$l5%ii(WI3|-N@T=bdoNs3^F zdKiK**nHbed6!sJUe&2DB}lhkY;C^{slL*5OM_!3@pdf)=$#bdl2XX@NO41hx`=-7 zC}jW)nHKqy#BPLF-hFHI3y`N?&a}%SOlst0yv$_&{*3PTC;p{MH{p%+=D=tNeDaMmpX`z3vG`d~KV z8XR(as?A9RPIbHJ;sftyl4r7QUnvo{@&N?}asgM`lm_`mOAz1fQy#S89xtpJFw_WW zQa{C}v1hZjDiUcB?Om>e+Lk578#63CqjK<1Kdq%!I+&61&*wW&fBqRe=?yCyq?CQh z*Y6bsYd4C;d@k#0b1_6h&#Xv&lAu5|WT86_Ic^3(|J%b}6wNEfaZSAMD1aa|#jBYm zO^@%`1eS_YT$*2tQ4HNA zr5k|?6mN*ihdvLl(gE`y<%+t2@-iJOrRxUjv!$^LXCmntZVoyZoG^ON3bLeQDuIV-ol!g2gy3~O-&z$2mlc@g?#)0Pyo`Pe*M+dIcrPt zcn;Bgt42~3QlK?+B`Mnb()1pYp*|np?Cj+>!ndyh!*VoaLH=TIkV>qLOwT-htlE?0 zNl7V)E40jNAV#Y6)E#MZ0#Jofaim(TXj@N@!AyN9IAlQI#E;{J`J&7eq zmGfIfOYoZ0^+fJhdGcA!2QR*rnU~YFO(usv9&0=Cja<|cCJ?@-gq83a2B4#e7xNEa!0U&5jPCvx1%LbXYV>>QJmPr)pcT3P^w#e zaI7z(&R)yE0q_U;@LMKZ`JFdy8mQOnM84g`LI5@E);vChI(pK%xqhv#%4JPWd(MbD zM>2f784~${cOjFEadb7nmMqQn_4Ul`p|z)jspCc$tv1d@?S9^%i9n~1nW>cnWjFOl z*2j)AA=UiLI~OWA(Cga$c0$9CAOd z`RQlnn42$(huep%kFVRBcRM3i(p2%3xEn>d3w6(Njq)hryq}J1f$`Tdj(nR@Ck#_w zX`Ea2sj{kxSw(x{8+WSQTQTc!<(HTANoDa}bm57i%gLBrnHlyu1Sj#>?}MbmhLf%; zz0S6@h?cFD3cPf`9vhw>>v!H}-{hu=j|M(Kd3}Z|M_Ta0ul!u~^@{qY*iwk3g;;j^ zSuB0w>)R3Webks{sq;>3V@apn^8QrC;`T>#91Ah z5(fxbep?S~r<36;Zkhmea!7h6$#}GH*7J6B?ki2?M00oudtzumUZ}Y^7AiJ#NI%}G z?<2lc-+6}`jCP{?63OTEt&ip66ea?IYI9ZNBqAhGcvz9uCd5UPDwW~gdDmJNhQB=Q zLwALyCLTQA#$7+ofnJl@5ftYLq1_JdqSt8KbIqjZWS~4KPXQzZk6gv#2+yTjnSpqE z=2G_v`0(X45@->g%GS3|E7ZaAE~aP>!$I>*mDW4Bd~#_R@aj7f?k=`S)P<2Fl&4!8 z!`o{RDF(&jnN z)%B5f@>uk_g`QNH7%+UdYj$K4tu#l_91{S_ctDrrNn*^ZXtokTy&syyAkGN7Ahh}3 zarKt?>&rdFtxeT6?l~=GQhn;48#C|Iw^`2L;uzSo);mHiV@oLTzDmN1Fd_{mon6$Q zF(U+7gQf~Zv*wNOH-h))(zFdJ<48R5aCN_bLEJKnw(u0-DWJpQe@3rPQFT_N^%!}q zZeFV5REG2}DJ_H3RD$uP@5#D~2)TdJz=(pU;-MjoKQB7Qoay|vA|WD&I#-|Fw`zwX zB`IAN?CzCYi@atAK|5CgYBpFJC~!kn2Qana2#nNZ5;2^~1~5fJp+9B|Nl5Y4-=|SZ zJcIa-!O^^Td7O1qN#tUr&PBvB;K;BQ;R4W->%R$C322qdN-Gq0fuTbU0OSi%rQx+U z)p3=>_$!m52hLxt6jMPEchs8@xhWO!W=um7&M$LBsW|!w2(o|p6j9c3VY#>7mPHy= zqZXgWg}SR||0aB*`AAqE6#)gZ^Sm3h^_EGhzVsHmxLTrrb{c3YALRUjWo^A}_-5`t zeZ3)}ScOtcUDxXfE~lg@Y!_2usRj-|w_KPWZLyWUopn}{n#9D20`+Ak8&I^ynJNtW5I0<7P;yax zS8FJg960IuJ+clUa%RR+RHgr_;=$?mO$5 zmwZP!8o+S_6e5ksEE~&}{BTD>b;VqKwYqT1Q73*leXuq0&OS%yxqdALaK0Y$Qg?89 zm_i!BV`X8`D#P(b2Mt3BvGR+kdY#Rkw_Phs?Ur1h_(D@lTuIc|Q7`8jLU$5v zAfu`s9`0i66NO1g3cIp3F0MLeu5&WZ&t-Ji{QP<|<%{8X0&f@2`Acs)N8TuyKR)1D zajZ<@H$ZE|YJv`X^&$Mjrq4572jVO3A4bpaKHlDrYNc#b0X@HtB}CuURn&pCc1|c5P6t*6)OfMb{k2l9vIBJr>U%-uWieRxpWvK_K(ioo&0Ap*0?KBmB_M zZSL_c`6zYh4F7RWc0|Z&2b@%!Xz-EamRk3Wc>_6N1mXxmr!wK*KZzGvLBM5)n;yr8QaCyZ5vMhTuk%)XJ4rzd$voJ6DRA$? z>^m8R3gIW50??GJ4uj(}`fDQM1gCMVTv~tl)q%a6I$sef8`Xj|X(?!luwCp@*2$Gz zG02AWI81WlnzMr?pM%foy(psrC4n?aP*EPNM0);WMwlk$@v?A5fdM(DTdtS3skj&rQI(kNGR{ZP>8|j~QRTg(^-NQF`!SB+Az~T5T2$THnQC`1 zJM~Adu{JDZ^9-ys56_%qB~*_GOIvC(8&y+`hWKPgWNqP|`)}`shy=f0Q~;hY8SvUX z^vl{#XxwH*)};&0tAnq24+aVwb^9JXR$4;AgRIN9^C+5ctg?+*LYW$AUcYoIA9YHK zTe%aW`fxmJ$Aj{o5JhK=A`tm8YcGAd_*xl99H4`#bhJ>%-OE+05LZA z+>lze@kr#``IF=yIr5=Nk&7!DLRiqF`qk~85`2}k9}8oL!-QgCo!3lO=d2oI2y+*v zxow-S_Cmc%BqQ*TEQxxPJ@{x*-7E+mOLPZGEo72}b+N3%eO_(`Q9qohdl^NU)8s+( zMML+Df>enJ7C)@C4)@$&XnNCAqE+&A+oINb8h-s8HP%{s4dLt_!29C#ynJ&L75wMF zQdeWq5q~(-;1!qZrndog8$nrK@fO_8ruWUL1ic)?EBLxw3B_y2Zf5(7LAvN4ea`pY z9JUjTI7sMm@*pO3%Y&c@e!p z_d$K6eMx~=CR7@WkoFGSy_bY{eiuA&Zp3*6E$7^v9h4S_ZO(=7_4aPf_hWe)2iVQN zozCU~3Xm|4x*wSn>P2hAxz?9#v(ckcYKW0i1_+759F{1rEPWyOTBvEYSvYmABY7?V z>;-5-A(Bg-LXQbd`EmZ-R-F#?x8(q{ z%L{Wxl)2%gl2<3|A+F79m$r=ePSVT-IA#773a%WqNu6&&x!T(FJC7!XCFLh)^Vh*dewPS$ zrgTZF)1;M8>Y1BrkD4I_kat~{&EL*XZMoccE0% zXo$2tNdZlJ?jvq0o2}nHUP&g95hUvTrvJyZEy;rkGWbr2ETjV#aMMS7Df(blEh*l2EbrZJ2O5zI!0Dv9WA)~4q5pqqfU zLM(t@b{*0=82(u&Q>204`fy5H8y{~kCV-fR44+Kt0}ZAIe8+o*^Su(cZSB;^KpEyp z;b;3nX!ZyeSqf5=pUBjMO;o=%Uv?G<-rDW!c8UlWxUPBaC#f2{ z?M;x&;Y~$+4^@|d7wV!RMr^MS&Zh@~mo3p9eqTlqf`_?r>u?LWiG>J*&v)#U z)L>IS9TlGUx-ysGgg8l4S1yTo;D+Rh;adC8+UdZv6$aSnL*gP-RIiuqH(fdx=7)QA zp1XtB{BoMN*wn%=iF&Eg^#VNX#J-Wkuv5h@`BytQ0B68UcfRXTt9F^yuiMg8F~x!1 z&%e7HDYAMWyt(SCnSEVaqgj2@!@vDCVscpq77Ky@+&b5x8p&T|RVl>NVZNBqy+Vx#+P{kUL zImZi>pKpuq7;pP-B659K{pnjxnlK!%+GJe4#!#I>7j!s_`Q7dO+ZUYprM2No9naa?l4Z=QQBn3RB(LY^!%(EAn|*rqs&-lvbEn5WOdOIf#Wv<_Zw&CFFnpifc#;rKOq=~+GnYWtQNq?j6- zeYXvf(C`puR%WdRIj76GPH-91UOY1fEc5DvM0>N~6z+!0Kx@0GSzTD%?L>kWUX)G~ zJYBp0T1NX-BR29|%CDBD&%g8s%F{q1G5*Lo6LZP`dP0m(c61?|zYnuF_mkF`dl4Lmpi2Ejg=Oj?pB_xQLgfCVZSc1@O%3j zS%TN!Dc@y59a@Txmt}juT=d#cP3&?MMpy=SqVOV5apg;aE2nApxD2P)KF~yj@IwVA zBc1t?nX)n>{s40XXf=!(X*#Juf@URH_6hYthEY${vpt3sS&M!c`+&n~acnYGJcsKo z-=NL4YiUJNKAv2g-tv`biTt*=*=?KbefEm7%Dq%8f@s$`<*8<``q#aXdi>Qeu#%vm zD(c>q$87oDga58)`W`)M!YAT;#$9xL?Q#ws6IJKyf+uTK7i^p;@-)x$&88^)*{|~=Iu1Ws?Rs|*+zSN zXDYpcWgnS?I-`Ef)XN?Y5axc@~fF*n@vPea`1UOV<;03jv3 zaV(4}>0n`+$d}p)C)<=m5l(0Cefez+KZZM^9!5^FyWZ)5)-T6$maQ;*gbQrA+4^E! zx4ErYa}qU8TV^clsx68uow!?=K};f`-7!eZXRE%tp|Q2WMX~ZK%-e6)%Savyc(?4v{y|iW~N2Bikk-^xzr=#Nu7cjVqG#`C``w|6PytZh4HQ3@v zX}h^rV5PPJ3^aRl?ZLIy^Oga`iE~|wB{25U6;m{7SU(k7gg7R_YXyT04RKs+N76TI z68n>l3FdO<8Jf8e%p{ZuHEFay_w+aJP^tY7?oQc5lwztS@V<&JNmQ6}a4W`Q>skA* zfp&CKFJCThA<7v9PGB0_DY!d5bEwcqF8nBFzcN59;gYHr0s(-fCK~pl*BFe z=KFEov!`$?`5V~Qckw9z%7HY&gqa_MQf-Os+bcT?X1bR(T)ZgRTJtLuh?d_+(VaXe zvo+w~r+H)7Hg;&_lPGiM4^Su0kXvf8|KRiko|H-E`6r~^u@}aO(hj_WiqDksf}Al> zV)xLd5$LeQ;nT|&rD6hh*BYP2D7%}4Xqbo9J;3Hu^o}TcOgd}}H8-^aMLd2i)yuY@ z9+pto+?UFXKrQ8#A&Z0}1h#US2rdS;I}cq2AVP;_%4ttHj&Frx`1_Z|=gQEC*6@gZ zb9K7`r$$H`ZMR%|9)_|}4}KS!fZ0ujvXfPqWt|>hYvO?)Z`~~3WiW_AZ73B~(WfPd z^!XSC$IzXam7Ultt&A6{2tnJ!WD>gViQKK+%k3-?W1rlfnGrhkVZtL&KqQGFs}O!z zJ%q+^c+zh5JeJ$eEyL*G| z&>N3vk@j^UA3W)Pi~l)n>>bshY?_%8nVY+Ac63B>^=rG<3C)eA4=QU$2ze0kgJIE~ z_nBU5%6O_DYxslwWmIO81r*?b3z_Tv#ST^;FC}*TSn#R`Fb$&-?jMc8h6t+z$A5S)=v+5`+3Ss0bqB=I3zV-)B zr*%!i3&w}?tF;;%)0<0BGW@vE^=eyu+;+j@J1Q@0AwN{!J;%kWaVTi;NY`#ux0XLu z@g#^^lQkX#e)r?&x9UqijF}=3Xe&^cVhY)5_WOC(3r_hSYPwh+w%-WMmD8Ku;K-78 z-CJsp{EG+@MfqqCQt22MM->}sEj%hjy;ii_^g8M`3ZZCPlBo4$273~5UvCHze~i1K zDs3mwlr-E}x;RB*JUIrwo*I6BRET;sZ9p)rkG~Cva)fTJXo*EIk3xXZ;=X)Xi1BjS zF7t(pI_y$yiR-Cmv8|bjDLdJyqSrKuXRdzhbIQ$whJ{%rs=+dqS0e>t^YMCb-^brj z*%WyjfQ~b^OJgOD_NTk-WO?R^vWYG+5hRLMy9yCl!bbsw~7ESE2BuaAU)|G_} z@R8oZ`zxUV%w(`Rz>RH85{~U&G9q&;!N^e^J}e5Wq}W!q?P|gQ)=1`c+HujB4WVY& zZCjys83cj*jM!m1u_Sw6l&A&T$y$%o^sFgy3%gdw z=7NjC@^r?fZYaWld3aH=kS||9P&S^92d0;e5k|?73*{mO!DAe^7IV*3IXb5;Fw6vj z%|2{T`z)y}QgroLFlHxt=}tEj9&y#a(qKLLzNNU|QhUHJxIu5`j|jhC(Viqwsp?m} z>dj4WhS7B#tIWiPF=5_K{7yy+^TqBElpPpstozOl3C=?Bkd z=cXff?B4Ww)(}SR5lXB)3&`flZ+<HVoOOJQ77vmYQNZ&QREUI_ku1rMjGX@cDSDsuOw@$w4!^PSJC zo_lYo=_xg@@8l`5jrh+G2rqY=UPxlMilMk99hfW8__9UUlR)Qp&)PL=nu*T@BLp7U zev)iryMf|#qaZ6AI*FAa0?l&zuEt_;xWHQW#t&-m6wb;?wp=VRzVzD5S>n3AyH068 z9`)TWhCpUZTGskb$nNH&H*JVL!<3yQ&x`=C629DuI>qKXj~&Fm=Gd4lKG~TIGJbq0 zikY}6Om?xi4$EoXgmszM?^_mlvp-RDd%4|OBkCONsiN|O2n2k&{PHUlh+6h;H)6&+ zTs;^|pQ0bSjl0KyfZgvtEVt`x<1Kz6|3M=vZ8C4bzr61*d2z&%+?nmq|0tqY*b*!ZNRe%GDiWK1NDgW$SnpQJv(*! z)9sMWwK+jolB2rRlCABE)!b+jq1^$m4#7j>mk-pJXGHXc{aG#M=@Wdbsy zJRb>l@;eT8fW2z+sH6kt>QKTz8cGa~_;H)`ehSO=&V$N^fR};@>Xj{*jQqT~oxof-H9maXT;T5qFC)GNW z#SZJd&%Nj_8>8hMdVt-2cuffSW_Lehhu5pmnZ)Nd%*_kacN19?9Il{=V@l236CVTD?E;wNc!^RFu|~7KO1YHPTzN)>9~bHuwd> z_?7?#(LgznL%oW#xAj=Psa`iDE34goEyI+D-D5p7X}H$8Hl4$S-r=LHe!EM1BV93B z_@NA$Tpxo$X0yxYkA$3D%omCr-BX)#*?GtuAuf@W?Yj4C?>my_7I$^+Ysw`MFfp9z zTT)|j3Wi3P%3+U|hb#E`*!RG5ZY)?Y@7SdU`gWhry+UPIHX1C6?~6exPCpKDFl2J8 zC3Z^!+!dl3j#Z66(1_jcB|+wxDif0oh6+zwXwNQY67ZE!S^9YS8F|bc=L*QovY0os z-2gel>iq?hKi{eD-S#Pg$U zbC!sJ&tNOlCQ#NqxYraO{bP_l3}L(L?$D`Uf>xT>@xEUdW)#|Y3^mw#zqDD4C1flO zr>|5}5cI9L3@vw2-6z&Qx=^dJl_s)mIY+N-NJuK!lMIuDZwOw(BM*CVrUcPe@Q5Al zj?In_S$bXV$=8=>xBB?$_e$*B++L#86ptD>B~Pp^L6*Fexu_}B>lmhZ*b2g#GR&2Z zx?;|BQ;|gGXQc=WdQ(&6b_69sHDCWoLXW2Q3_PzepkH)FoDI7bf@iR_#>N0i;NdolfZ739+QkG2uf7}U932hz8RhABe%-Z_x2 zC(WDFd~_=~vd@-=dNf8rwl-BrFhgvzL!U*69~i5kxLo69dEB<_?Mi84jmJQguw~E3 zy?4RU@`VE;B<~^5;6t`&FdDAD?_=jtP)D@HCU_25m@v5x%D1qK&|JZ6g1?@Ygi6bF za{Q{TpIAoCYISl$F6cFQH-%pN2)FJvYrvXNxtY^y5>*~oRDm%iHPTayv@#vkeiHh= z%A1F%z^-wac}Axv{O!4>MCP(*{%ID5$`O}_1v3RW8B@9~2M7FsMq+fAwU|@uht0rz zd0t@xz(z;UR@I0Ui36$@<0pQrII|0+_U*TT2Hsn^0^I%0NDzxkpv zJx)05!Nh9{)&`1uzVzkca<`;`jI0=y_e^k5isWK6{soafKKxbm+JgQN1n=j}5Qse!4cAW{G)>wmV(7LFCF$|%*BInIT zcD!3e;enNUbzS84%v|yccD*D-l=qOVEI!Hr8T7-62-2b8Y=GXH4bV}Yox zPn#8?RNdO#_rCdBO~SVRxn4SWx$D}r4c-CVE`1W^Jp0nyYR#-YwB`iE{7<(6>bAW2 zSd%?zSMT;1_wvq;g|h&Be#6?sH>N}g zFL90o+d5-uDJt6a^+&#PQnqdl9M#LDNAoeSDU`fFG|U%9sjK#}(ZO4LJvPH{Jh&&a z6n#Grj>-O3w-)Kq=Y?$s$WCU+s??3OnISG;T+na2bF(Xt=QBCmhWswu(^gvF(Q@}B z&Hq3EKQwkXYQRj9tpB0NKB{049UZ}G>=Zl=#%L&}Ce{<$BwTE4-v2hncT_g`#mf*g z`rKU93G{e_y0siV7JwfN4S;9cjP<|iitP!l?OC7p*?%ZYSCk>nt$ORU$SCKL-O)_H zbJ^C!|>#@9=#uty=T7pbgI=_C}}g`Wjtyxw`-e=KXX@ zAytd)-Xn8{?QJCh$`++sSHX8rms9U&&{engYR6*L#P|3 zm(pniqMdEH})dyk9&|UWViIp5uSGj zEgn8D8XV99(&Q=!6oC{EPJ3o9e{17y8Cz53Qlly*D?ltIJKh~K$fHQwu} zhbol(=z~2!ul3t}(NbJ)1B}&pw^PgQo9hz@o9#Rsui5KvrB0l-ZgcOI_FaU+*GySz2C@ElVuRG@!$-N3lI1o z1v=#E42MRry4Nr^V2>ghG|1sK-rV%hwp|)A2{qwInw6F1v_$&Mg6{&sW=y%G%<_-y z($}g{w_iH%kljjqQIs=ZWxu-KkFjXKT>bikbmdAAwB8oI;>pCe_G|+MIJOP50e+q?z}U3v zbJDvy0Z1VL9S&Y_eYxu#p9drrMKfyg)wH3VA8`Miie$$rLF zeY5yDrjb`e`s#Dq*S#a#?51uJ7|5|s&w+^+G@%&-Wu_Mgu~ts8D!6e)UPQO4Ma+HJ zNhF@YUj7M%x>ql>EtF!MK8Y~IRXJIJz719zXIn{wn$%Qxc=}SGJqvAU8<(OXTc^Dn zq&!RyHF6T_F2ldt5#~1#AD3*dJ<@lPNO8CG(O%R>1WMl-v>OWWLMt91VZ6--h>R)i zOmj0D&*wZ!nGeDSKU~y1%1t-zt5d*hVAld5Acuk{jYmc#jt5ao3%ba+zk`Fl!HU1d z@3iH7NPTXyP%{LVYzH1!`-f0N`@LEPgCgP$c+y4afZ}4Q%TzGzX4+P6(8PK5K5HYY zaxve+jblVIkDi9^ARXz4$V?*pKCNT?H`|oRsv_ZFFU-prdSF&R( zQDztwo59bQMPI;rEntbDtEnhUqqe9 zI`vr236T#@(o%FiFPrKbc?8Gn9|Qa$3nYgXU#g>Q+c7WHYBSod1^Q4BrPC3|*f`3A zANwE}A+uHU(y7hn*<7osPZbe)Uo0`VP!x~sz54=XZz)E2klT?RZdhFoO)ITked(J> zXdMeLi~AJ>32|=aXLgSUTEE!>?DKqrktA(9MQO%x8sf!*8FyX7Aq9jzwwS;%z36>h zRtj=bNEkJ?uGA(z*5&HU0KHdf(FH|CwD1sVN1@lE_cy1rhgz}NJ9(ZipSsKMwlWYC-*Y%wFi&DYXaXCJDS1by%dV zu^g1|)#SH1@v}vj)$$Pj# z$;(Jl;uOfTDygCcE$OVr0mc(2GOu6FW*9^IKkml8S%A6^nGO1)?qxj8tkx~OD@1q)_n<4;UNl+c1B%I!dcAG_o{lP|kU{@Dp97r+! zSa}~iOyTYX?Eh45gGx;;BWPn*{egO8SbDaP-%e*(CPnmhZxJRFsORR#<)wv{cBZTp z_z_|c7TOOrvkjvdI6tkWt-2Yo)==Bu4v-qm#WM3I|o>A z7dNncc}9}oBnCQ(^zu;v-++z-ph5CxB-*?ntwIMsT&fTmx_`Pn^65iNwoQSHL4RnD zo}wl`_WkHomsv z4WCvDEr%P)(d~CBbN8)H(6K`Bq6hc^FB8NjMm+8c7yg_C95`&x7dqi-JWlFAZQ z88o|>Wjf`NM)G3Q>NFI3spyO=L-#S4`~2tP>l@&ue|^%#|1T#7*!fnhyk-CuA(Fj4T$bKk(v^bLtk{+Z#I6t9RF`d%Cm_++!G8;0w>& zODXQ-{$84ji&8DBb~pw#!UakR!BAy7zBoB_HV_0MA!1NR6lFxu@#H^V<2ze}Diw3H z%aV|p@#)LwZw$68x~_fwyzArsu3F7Xmt(2MA9aN|94P@pAXeWT2t^w^23#8`0nf*^Ew#3I< zpzFlS*)yY;a;eo&B-VfM(dO>m@dRiJM2+G|jc;`z^3t^D3OL+Z%Kg7-Oa93V=2U{V zRH+ez#_I%Mant=R0P?Bz4VPyQ&H7u z*iaY?7)D4_7ZY+Z;e2RU(HO5Sy)TZhh>%7qgJm$Sijw>L^!6IImX)Qk!Sv@27?x{2 zcOzRHRja~G2v|yU&iSuAqW3oVxB~zHBECN6-B=W!fJ%d;Eb%k@%4j``Cx}8zry}T+ zM~%I$-kAw6Wl74QuL~aTH|i^j=_hLwaZj4!OE25gaZ(jg0xFEhA(@k&us`>pp{ukU zaOVOEEvW*yoz3dbVs5kCMBM-QxS6oE4<6QS2Qmp6Y@iC&Ub<#|=_T_wJ`gSo+$Asq zzDob9di=V*m{srV)6c$o=GM??C`RLJ@#U5D!-K}~GCe!)lm+f$J@dnS6(8=yi`Y=9 ztNkm3xv``UNE+|sk>;3L042nkozAP39EaI9R; zS66)8%iyXy*hs%|(dwx+p8Cx1c#h2!a`?%o91C3wk|rN$WaV(Uh^R83u`=-8pV+B4 zN5$E3x4P1(tcsxkZlTV|Yom5wEgtDAi)GCS;NxBv)*XQS+T+HbzG%I8jaNsMkWRC< zjA!{^1ODoxMp@ibB_I;jk3<%dHn&6!5l@V`H<#q?q0f6-*pV)^NE`C+R*r|4X1sek zRR6YG4%Qt2fDrP?4*iiG<#@7O0)iizDG%S>7nkTCu8(`U$Z~;8{}_DS%R>mL`ayRe z_j17B>1-7$Gx0z_j&hmFB{y^$KA)hY;Z^4y8F17jko~fd+$E(WgGd(^KYY(Ih1S<-9Ow+}Xbvz{ z|H5(Sdsl7$a0)?+e+2o`T2}n^Y42cXu%U_x2HB(thG|!WQWXq+{k+*<&%5gU)Ap@< zsp!?4o}wr%HEdyi<@)I};Yv0?esgMkx~7swgX+mq&p#p`_tMdP5~Bul1b9wvY5My7 zt;rML`buJHQc!59V5>R*gnZmf>DEtx5a1l5RSl|UObne%#}`s-i>8>-G)ktH`76V@j~!Hc z>iraJ0XUp~nkm1!I_rJ=qMNiS7r+=qb@@}flrou#>Em9W!pT*>n3h#R+Eb_ag0P__u2a9-wNITor#oCtMfM>Y5gGshcqlI?r2+eY^Ya(w z0qiew%*Zp?KU7CKeHQ=#9p~pS93VZD002N!wULxmQ?qt}I=EOnIFidtN|HM|J6PJ- zLI41d#Vk!LEzP|r!dD;9B^1N_5)~aZ@KDG#BqIHA<7gQvP_Y!kDDoEY)ZagrmPR1% z&kci*iSdiVQ)kAAK$}P2q{xp6EC`Djy#3@|@O-xIYJ22+{hY{7#aUL}7;+~HMzS2I zI=3H2sRY^MwZOif-cOsXV*Y5X*I?WpnV3srbIsv7~F zqgd#*02B-WP(3V|0f68QFzctH@&E*-0dQqbb%nk#RblNg!bqjn3N=&nOZyw5us9*> z>avp2kILgS;qrhUfYQZSyFAkfIsCaEt(^@60J(8^u-=~Cd5mIKjgIofG+>&t?7u_$ zL1}Kj@qKHo+))ew_yqNx_|D8$N8~4nOG zZb0=j5jgKSmez(X~Z6&U5cMAbSK@U7t&;ISHa1Z;olPE;NQcL{P3nYf&ulAg-E+-q_Y zYOcqNsJy7~LF!#}lnJjD-_o``{@O!e&cPn4C&x@Riye!@hUFb5*~3eX9WKd1*Zk^% zd`+R&B=)4tq`d~!9&>31mmCpQ!oZ@%^IBy7L}qfP{@~55&F)RkP2x?8Q$w^Yb1|pF zYt40fjlpLMgj-l!Tw6$xR1R_Nf^?0Q*Lhlxxnm6^D)SmN-l&JZ#^G{J=N}1tBCl9f znV&R8WQ}iqW%Fhi+VXfMiA*JBTz7J4Pj)wD7yjHG<6#J1U|*OOJz)j`GJzGLJHeY& zrDDRVNWwlXATRqt>Q36DGzV=x#sJNv|>w5 zG<~XMv^h05N>Qhi%eBk0)DAR>HLXeoUx$`iy>`$NE%epD3rEuLR_a!jEL6{}G2LkE zB}WGn)_E{fJbzdo;_A=cLt8Vl@WPF;HT90PHBz{&G>>1BQ-M>rPU9@mQWSY3)#*AD zs)D*hUy^d>8}SkMgkhb5xR^_+nH^&Eyev5-S+88KT)kZOpq;1cs3fbnUAk5O)*n;6 zPl3*ePSz@R6ftW@b3t>Z1g+$WvarBK6>Hh^BI3MODff5wCC91R9VUL+N)9C-J==F~ zNPO7twC?O~N-ktE^pNT>sF9X1MhS#Ia635&k+StIeNmS*?iQ0Q0wsY`J_W@!PY4yv z$VAILin8f7+MwRB>$U4GphcpkpjA}fS3XYHP;M?}C>B%_RO%ZU9?2h>P2!-rD33{U-BEuB} zhFDWXSTl%wSNhvG6`&VR#-F?xH0LQQRul7Z0?K~b$j zt#hp#EuQ1am3q+Jwf)2~v3J`g*Wt{PVcXT6$Uw)EHk`KdjO7gER{pl`O0+7xZ0|bx z*3P(6#m?!d4}KE<4w(wGVXk?4hICR`OCxrc=|C2T_!^_{npUjutjxPWMX#zqt`dtrKgWF zxrFpR70$E$drV^}9$D*>5vV445zb>0CQO9BiJT5 zYINEJJ*{2Z!qIKgO@AX`YPS#F7y6zsrP|k;*_vL}Z1lYO*sHzX+wy9UIGcBL<-FbV z%ab3oGuiyYEA3}q4p$$pE>@qc_&U?wjSjUgxYHe1wyCz6o{JrcFG#M0&WIX*U!Ff% ze)+7^J@;&4S@sGkIB@KH+(qmoNyON+*rAYzAqUxfBK-X8qRw}F-%2FMEXHWF@xSMP zAF9HC!sdHDb1*kLkvfr=a+;Fx&hACg-G1i*;hUx2u3oZ^0S``glXIQhqxbI1?xZIL ztB+JSUy#3~|6%>L=0bD4juCeCpXZFel3r03e8JqooJcQ&tiHJJ_*;EF8=s ztR8lbu!Sf9ASCMH2m(KcK*`M^RyOv+lqaq4D9LRsgei5om4V8Rk`QYfIWK33rk9Eq z*y}l%--1$91Wm|80Or6B0tJzK*xA~<2zUrn{^3^u_Woxv8zuQ4RiMv>DaC&_NUo=> zMlR{#3?b)c*}2Gh`B~Yyd3gDGnaMd|G8>SOjRVL6L|d*=I-v!>dwjP;B3Xl&d<-!2IOGl;9!B(U~%!Zhk`s< z>|Ln-bn;I>QVnB@gB{5~diGx%bkXv3gs^EqTpV1T!4PRTh&`0*za50* zKd&VIySsm>|7R~O!2hyzbal4<1F!{{4PpzigSF`bvt$3SeSq3n{xvxN)`g#%|JfYG z!{&dO{nY$v_D3lEIYL6P_!E$HhJc_B&RPx*wjzH<*Ms?7$Pqv0_!`gjg5r>2M?zun3K<(g&WAu z#{%T#01Hxqi;xo74;N|(FlmBl1AFibwz^*^z0OtD7iErTmhPnS&SP6hF z!5|P9J1+~LIX5Q@J3EAng^!05%woaG#b*w*U^nMwxA=1Yxj0zNf!us7AYL92EKzZA@&Y;k*~EWw^B+yg*|@-> z$@6bf28*>nGLI(2>EBELsj#*ABZD}CoLwM4C#EpvKWFB@QqI3J%1@g=Cb$3y{4@86 zfPaQB1V-WCO8+{ne_8&+%;rCb^Z$n6Pyc^2|KDx6TSM%B75;y^`lHtWcH-h-33UfK zL&U9M5%PbTnSXlyceDHMh1h=PYFnHC7Y4!wQ>owoRz^=Psd$i-xQOxxBO_4?8~(4+{q?``_LCt=`}KSbzmA9h~hzP!StDkQIc@ z(cVgk?XSYW)%j`n()K*o%$*=ih&r{#||F zRR7nee^=i({mW9@-Uced@sHN-75~lZ=K@3E56+sfwJ<~k*0uXZ_iL-!ctC9Rq-oJ)~tU7_MfG&6)|iv&i1d>_F6=$gjoUxPHy&p7uAcdq93I{>JrdKKHc0aoq#*Yw+TXbD0r|D~OI&DweZCc95BpH7JM7b|q-h3cuur~{gXJ`o0RS%=0KhL00QmX? z_J0oma0LPY`(^-uKq>%$?+|bLK?VR&GLn}P*Ya3A^l|qf{m}fKx9;M+>LbK3*}Kn7 zpmm%JI3!4U`B3zgJ}{W#fnsKM)vtU$Y6M%wCA%HICo zWV<9Po7K?1M~hjUR%3^)tG;L2Jp}MLw3bNK%?PwgEg3-2g>kvGZcXe7&P(+xq16)Yuk)2v@cgQ7?TitKo%dTD6jm0K+A>e4$&E{Bs}D8V3q* z3H&&kcABN^cq@#}>W5O{)R5{)pK+Bgzie;s7tAyNNPc)bMz?>H+al&{$Twm(BCf1{ zabg5AHlj@D9V)!tTQ4q*5*k2$ROdgxav&?d7~2k2~Rkv^8rB3)|XH;wR}n3=uFi1WVpM6Zp9B_Dv(3 z(7XA`9I*?Z-XLRnm+|>I$+0YOfgcxIx_Bs(s)w*Q8PgLLGL@o3*SjL@bil+$RN!?&5z^jfPK8@3C&--dW?ogd7?L(NZ9P{ZNo7y zb%sr|VnQW-j$X{<*ZM8vD#fnqhH9QqG)}Fk7vo^@(O={f>*}2ruZ6r%Jnn<WLj+qMQVd(Pj(72l@PH`)jUWr59`pcP7j<($mry9iAVE~*a^=aC zgAaAb8+<`KXZgvr z=c7(MdCY2Jeb&7BwBwbM#cTO1o8TdQ`H?#X84zCGU<8xZ7ZOu-VZpwg`NdS$i#(1W zJrh2z!C{1ZC`54Y-aXqxeA4RjA^2&TL9I;B>l$7cnGa1y10h~`PF;ja8nUvc9`sR& zDxB8TRjiCpaEPw9DP{_9-*zFo6h)Rdr(DuLa(ku_;+%T%h)DHBZV_RlL9qhIlg1a> z{lfgqj8C{+$kGBT(XItz9KVI)l*1f4rHMD;WgtwUVF(~6Y z-HP1Y&iy!Um3Vy}EZt>cJfO@}xicEq!1bIxSVr@$*^{e0?S?P6EfTy{Po+p+ZQnT< zR>bftjv329Tf0N)F?!@ny(3m+r$(U8VGwI-X*vyvs0h(*^n&NN>w)=VxVtK=sU01` z!zYB?NZD$>i=1Q|2Ewkx_raikj+j!unkH{#ole&4&kori$go zubLtVBhxFY=_V+z%q`+>j_X_`!=2QtFWm^Yd_Owmh)}b`+7?5>GB@Cnj@;z0c~_^ai|U5JQhM}Z4-m23=YqgAOkGVZfa>2COTFwY3+hkE;4 zUf|;^WUoU?kw^~NlX1~EHnT>sl@et6<0*eECfT5?o29}HIdvkZ7%IHjI6XkXe2f&t zAu^Quscz$vf&;6BuH2K;FI~mX_p#}2+IEp(aUk?0GTuQr?e&p_Z%I)P8}hQVRpPt5 zFFlvDPVy`pd<1Wpcc<__+rL1Ai@$Ak4ULKro_eP=l2{^`cWCv7+K9*Ih|;h_vO3Zz zPqry{v9@XXd*{utn)xBirjSe&+=xO4eiMI|7_}?5cjUG>Ro?j5DR*yy%H57idF5xz z>(2Z{Gq}<-T=k80mF)$sgJYf*lS8+CCY>$>^nn#45vY8Qx*l&IdGbknQ$iP_7@Byu z_Iz_!tHau60s?$SE^c|z19A_Z>7KpUlDXh34C$yzIqpXDo}Ha!yj%|&42hg1c^WZ_ zdA=Ko_LVvOm}}41oB)>qNk*(;aYiYfqvBwCiw%qANl$c25)wu3f&oZ+?bT|GA+qYB z^Ws7=o~K8w9TH(d$v4%9dNt;13UFBQ7Ug9$gn1nS&cozM)SkyqU;POnrN<&s&Y~$= zDp(Dk)w=F_j-FeWf3CTlfI7=iVe^l*a5vFhN8 z=J3bk%qlkco}2Zbw%2Y?+kL{QwRtidL6bg=6k{KJJW89|`4{jwv5Fob6YPq`3+W~_ zS&O_p;uunkKYli47|=V<$fIx4nKwKpJxT3SL4K_k-+)Op#n$AmWw3ir-&S*+d#V+U zmMVz?2jrHV9o`moy%a>$%eR>&q$Nx;pwU|U^rED)^7v>LeZ?rbX$*;HbOH zx6+Sa;Du$f(Qj)-%8x#clpX`a>BBTW8%&&PR59kb>wgAbD7TEEoXf~NL=gq?Lk=4^ zG7}!T**zqJz=;giJ^fz8a@RxFKFyYNgBUfgHaS0)oQ5Oz?pqj+C8MQ1UQN_!OE+~g z2&0psfP~IX|1&CKTZ!b7+MD{&*UAzuE?=UVSa=wSA>Udg_a%vEBJt<#o>c6MF(gPA z?wx-X9(ay__QSOSb_&6erk6(Eu$X59r&O={$Cf5?`kA&TFMm|=aeHsI!y!N%MU3t6 zVnf4_=RAv~Ci?rn=!Si$(POO1GP3;xAlHnp8mLY`1iO$b^?MHSp_?b|{;_2i;pc_V zpSQU)^8-;A2{{&#-cy>rA?3F?yjI0rqH-uPt)Swqg3epm65xWF6(+x99#vT-h_(-y z><;879Y$l%i1{Lys23J%*5rvOpu$&=8L!o^OA3gLgEQ3`(xEvMpBJlP$wy46JD))S ztE8QMkjhctNv439IO=)w0u3C^BvBu#m>xBesoo|=Zx8-uSz~sNG*j9HK`0zte$b+k zea6t7o1>x1fUN=?7>H8XR~Ih^FgB8n{;U~cD$Qos?3)BkF*upc3-bD$ki^nZ!bS61(9b>yry~nq+~qsVHbx0 z9={Z76MXR5Skv;>5S;)GhF@IbU_Aorn7^@vJrh|ure#BoRwFjv@M2GLTpb@4z$_y%_57#NA}#jR$3J7I2LE~b*{ez&p1I#dvWG_wewQ6TX|RoCF8jnK#ra(8)OrWxbaq#4j}g=uHV0h zsyytFqc(=pL}O-Q%tSf)x>Av;@GVl08FuKCCcZb(-nO#l(#>kwqqlur)rV=?)Txo?()QUuY7`qy(ZX5=ocR9pOAN7f zu_rY>fjw0I$Z%BI@MKh&@DiU5vQASfdy^E8;Nc~o(SADJ>XYyZuwY>vURg{{OHh0V z^=BbY-tx(5Hm(dAd!K?3WCl!+c!U^Xd2w}VV0SD{Gpl^DcOzowRKw-6dtAS9kR0*I zR?fJ&=hIu@Ai;wkfZJQ^C)q}Ie639?^h*=PY^-skmGK8H^~vHA^od`$AVqWyy?O{1 zkJUzBN?>ro<7P1kOkorgF&9a2DQm+62zpWAKNA?~wAE`r;`1;YK88vM7zgcQ>gK*F z__*hMo2k*K##o+2IH>0y)oj~l3CN=+A_|i&@F7JmPd45?H!yxO%`SzHKgQfTGNZ^` zHkw_jtj7{C3>IUKqxkaH?F5OL$ayE$hLOX|I zjWqR8hM@le5cZvkd84Bpmw_`(th?5)*`dMsh=BfV0h+#IL2xcHIjWgjXMnUeUbh?( zk~#+iV2zyvB{(gVSl1vWX^)urJUh((@kD%ZSHAi4mr>S8VftW~rPWHRpzY0=Tf}gZ zFp>wTaGm*-zN+{T40B0w6D(I{MLG#Lcd>OfA-hBmb)BiK?tTdP&ME%j2{0rxpZ|M+ zIa)50zyw7mb!4QawQzBSpW0)O*yHluiegRC0!pTJn^r37(%Kn3oFfSV?}qdF%j@?l zJ|Fb07;(7}BN&IM$pR=A7jxP!NW7DmJFXx{`42kiq%_d#`*mJ|YKqy-{YGe^p{~kw zLyFWuH~`>-2__uZxvKBL)q4cHr<6kqLE#RC8?U~ku+=u4mo#$IPoS_v)58+rk8aLd z*XP(0EO#swZSTIATV}5$EY2g853=x}bI@<_Pjg#vU0T|kuvAsNQqF%GqGD#1p_A07 zYA)w!05(j2TU69VE%WK*WcEh`4XGv&ahQtH@q93NeJhfA!KFk6i?X4^L|@l|90NO+ zgYiS>law{$!r0Dw=n0H37r*Z@~p(l*rgoT ze9~aEVqHbCb(ngm1HCg%U~RlV`jwG zAUcSR-WUWTwJz3cJl(0w2=I~Ejd?tLiC#%Twba6@^8NDZ`!0!3VsEOV3@67MbVevP z%%=>1ASf~*hjho#$*0l2YGXp-g|y$&Y#H$e`TCXXK?G)`vgRVk-CXSgOJ|xlDe=Fo+yIza`VuQ>rXb zZBu{ZL4vG%q+gly^(CBU@KaQ>0z|~F_a>6uy<*{yN_Ic8f!%!qqS$1_qfYDXStYIQ@@24iHZ`DZVy2y=%Qyz8We>Rqgkd3p{osOz~`PUrBE+mIce#jAIMA()g-|X76;-h)f-(a>EW;LsXU! zDyx*VO;3{@xc{P~<3uX}{h5HPzMn0Vq|GELz)U=E9GeSw1*4cS`~`2y!TNI*jqugg zO5&ij$7cEp?ipbbLPnA~rCm?q>ztcDC8HIPtYTA3G6DD4D<3(wqT-2Y|I%Qid2pDF=5|HT8vWW@N7TbdBXxKn#2T<88l28vR zAja{I#OSNKmmqF6J8HfH0KgU8*5|3Wb3bxBqlI~(uy4C8sA;hWo4`4wC|AX@_ttpJ z+NE3$`nm$)Y#z#|>La*)dhuobt0gKtz>j5QG1Ew7tuv1rwHGy3y)*~k(?V^2K399o zNt$fxkk55Ddv;fNjJh@db&HgnJ`e=N;!MApF310pV+7`&Gv=PpcC&L2b;?bl))GT; zKD0g(%IoP{qS1PmKHrDD0U5bF$|$YwHLdST*I?LY?_H~LrV;s+wkXwXD%|+2SQnzf zbvYh_Ar9LQ;E9c5eALr`Di`=>p8cnx*feKqFscRbW9q`Kq6_%&@!|_*HA8V zBu!O{mIDMJ0NhEifnZBewq&~Y`Q~A?GXXuKkLBuUv9IJ>wYCHjh$J*%W#r3e09$U9 zN~Dm)%LiQyQ?IyPcTGO^p$3x&0VSf?jkWK-ZuzD57no)0Av|#$wq6bIq`-s&0?bk+ zN$3g_;y^=i!m^ir@(XGiXH~CWMEDbD+F;^Z37>+f%g(i|#q9OL6Aj;su zo2=$kj6$C3S*H1;R}xmZj?b@D)juS3IStwu@@VA;r(hxJ={5gs0Bjpk6H zXoemgNy<$5RS{}R3X{t6PKjlH`!+MJhK(xJOF${_1EO%>(RTAoqglKKTac@0!&8%O z@u_uW!22CnJN0d#HX0kKQy9`HF&xCkt=OeW(6t^AwGMG0CbpNjL1t$TFtEs_Q1p$4 zUtW?tPnH#qqFVU@4hAkFJ&X(+d|@OJyicepz*kiB5hc8sP+}Oo716#N7Q)m1`1G^k z9(=pjCOiBqPqzV~?~6srHzMYbL2mXsY}0`U8VAIC0p<(OyHUgyAfaB`Z)}&n+q=_0 zv={ef9n0o-tdb{=u%&KKEZwnlV9^nh+G3Bof7&?5Cs3G7#~gu(qvYxHxAldbE|dGs;N^D~*j4K9I1`0E4y4S%dyZ7cFIVkF z`fGh{@zYwcvqd6ulUh8{R9E#d0aUiX%B?a_HO1p?g_NEabJWM8@uyVze$7`enUj-H z?9o4dEQ4tKAWOi(b)|lJux~q0is~k~%#W)_i`Pv+03ZK>*FFDA(hYS%Y8r>O=sQE3 z)eHvgA~cU0$D`lf#Z%=N*EwdL5k2#@@5%Cu4k{_P`sb06h=y*s4X_JK>@jmjJx{8v zDE%W=a{?7rOg5CVUV>K(&GGVA?&|9s#J3k3KN6|Em?c}gxT@63!z{Nlz1nR?%*sR< zPn=6*arj|@%tDXd)-b^9MUDW6d}u4LUE!SVeQ|*V$Ndm}RF4Ym;p5OUjtJ3b?x+1U zxUACyntoc~S;btdM;HVL7|YwxQ-_ULrGH;UaxzNtRJjqpyk?x_1Ku+E(-o4jJRjqm zL!%ByjVX};r^Uw{_D1&V54VaIH{&%HARkc3pM*vqDR2~gUrVouG09dN8V13xfnP?k zGL4`~8Y-&2bjn#I21kkeqZ>Dfl?~#5EVr0CM#;l{foZh9)!VbBziRcFWLO|=pM8RB zX`*aoU}NZ8LihEocmc11Vw+KTEEw>pEp2&99=J^pPgW;^zwGSKJvNXA744;Uko~zr zYOPFQUdvfd`r3zCKhCt(?1=zOBv-y0L{3J@5$Qt$7*k9VQvuX=2{&w8gpa&Re-ygr zy&ZIO-}Ph_daptc`$nn^B$VWo2w9P%FBrn(;N3)RgeJ-{-1#WwQ5s4F6XN6O$$_HV zQJ$kXyG6t^lCSox1@PqbV~+>nyAr&yb=cc0l$03N*0;`9z%Sw$k|+@D59G@wbx!OT&V(RcB4}8TYK=3E zP0dXT8>3IwRjSfTL@N-ufd~6&s_F90Ot$n$Xng!hg# zdeJoK)dIT=RyuWW$_*bG=ZsmR#=x^P{6s@r*2Z_^z}NYlWHnA4UyHPm05LV62}eeD zhTxYkb%ZmChPbsJdbG;p@agGLD%A;P%JW2dRJ^9+;J?8b^UsfK5MQwoPaJQHKiyBV ziirO}nF}jnsMA<&Iz%k6c}Cc3&k6DMHGzAXtNSQMJ#gu5??-!`b~mASW<(*+R5@1A zmyHa-ILm3=dDZDE?RH_y&K=xI>dytaLxXYrKv@ek)`xS*;C+^zXx%|=E@hT=y}@A; zIui|ME=+>Tk`-q9yz0h`w;E4*-P4O{lwwxyQyi zKgP7v!4!>d#ZeVmfo;3sQ4S6D&W#q~%uYK5X-uE2S#Euny-`4c9AK6jgSrS9&vVbp zHfxePsI-D_M8Hn$W6^;cO7w@eGYDiXOoBFc3{~SD=@Cz^rwUMp|qL~gOC%zNt8*s#oU4CRWrmC*cTay`C0yUdtjak_l^m0wC zzyT;6^*-}y_Z&yRs$?px3-n-e@sI~L)IU2r4c@paR(gJT zWND|uYI>OUIJl}d;MjzCo1IWWXB1KV$_ho5*S3`HQXmndH8g^=z}Oc7;d4OxN0q0&|a z{@R)3!HlcHNAcAq-C`)G#>*Rm97~JPByxl>+4I8%*!5}Nc(*o!rP_zutCccZyq0!t zVg-&I(ky+3#lkN>3pCnZuTv_R@m11xVJij$2pMrz|0gL{;w=C7e57Fs!8nF0lH7U+ zxnDkSL#+t3@ePFBFfb??YTqd`I8UvUAh5Lo%_SWqpzqxC~ zDh53Fur-KZNkV?T&V^1Mx(HiB#IH5vuf5`#U)djFk(WZg z5!67}tr)%1=b3)KA?w~6L=ea_Qf4frg3kKrb6?_aWuS}(#8aiMT5hdw$*Y%O`9i79 z7r??$*Hn?(XAM;GeaG%nJ$HS&h+4*Mg%!dMAP01zFRM9t3y?iQ2xsp-GgFf*<9yxN zBc~wEIc&8-;P+vhS_+?f!Q5RIsYP4a-QequFL!z|0aYA)xGcDwe$MUL%lTCK*Zp=M z7?QRH7U;%mM{iZd2Z9C{k)sO-+jNYw##F<+=udMbb+2;(PHaq?xO!cShttbmP@OWbGAOqsT7C9*bw>dPG1H`pxYy^*GB&b~39w zSDhMVcP(U25S45&#lm?nxBXj2<+QD<=sU2;3oVBeHCuhZo&zIZ7Md)?{+hZM}NjBRhW) zI`~ZN*S#wWSKIykGg;gafGdjuiC#bxT8vY?`${8Cyi~?do%XZ!bujs<-1?^lVTBmQ zVJBz#q+;wiEoeUuec`YOuc2{*R>Qxv-*6g`xZ$YQ>zpY86ro{4!uJ5?aTTe@NV+w?oXzL%A&>tM z%z$20I@NVb2kd+gc`w>DxwV9t(utzP$zKfsCKVYM}}9R6G_#QSa5Ld9NfO z&LEBgfZeo^E=R;~`HF~W?VjOmQqL{zI8nh5$Ys!42dTE!<|BMP!m$%$`SOKEq{DTb zk76$NOK7=d9=yx+FcU>{Pq z#6<)%?y#Qo6^=w3xJ{4(+T4Ve17W+QCW2%q_6m3+MoZ6!NAMHSXo8;TFgtp=go%qw zeJWJvvMNJzeQ|8GL>f!SGgFe1JctbdCUdPtZ%2(Oh`3&ETGz-22gg@X0+DpUtwAwb z=G^d;0?Or48lMIDnAgU|beWeOY6J*5F^st}vbqz#Rf)XUJkG*Gg$}&fs}Bs9Q#jSD z(b5}6{m_DjZTZlrC75nUTfc;UMVRMX0rBCx)mI-E(kD?UaixYCzd0_^xP=PwBhg~Q z%XIdN`~BRJb~EgB=ySsJ%X@!pDRG`35$tn>d}JSL8^@rYm0-{dKCMd&sp&9j{!ujC zh5cN+gB+c{sCrhsov!f35%$n2$KztY1}<2-xzLC6wHJA*bhQv9&OQI$1h$977M+oH z@Fi<+=h*-x@(4)=C9vuN8=wFXWG9r^WLMc%D3!SfRkfIZ=T>Zpyk~~SAy6AB7WO60 zrJ|gvL}(7q3@DBz0mdGA*>Xwwz_q=%g2eut2F(Vc^O7h|Epufy1e8dah)P0XEA9!q3P4&}l!o=%D<@a{+ez1pePAk?X-p$|Vac8YK1T3^Wl6t5HQ{}J1C0`~|<29H;`M>%i_l7;}DK3*5v}P`sNP)nq zBO$TxiBQPVzjf-=)1i&(5Rj=!Ifx?AgobkmLXtSZkFoNApih0A>Bmvxb|ofcYpR19 zaR-|y{%Xz&Xdak>(t}k8c~N_`D|7(Y_K>mBED6LfLilrdX6FYXPog$4%Z+lhL_W}X2;38i2`jcy9M{u$5s`QI z0GW(!+%;ccov`}`b43#mz6r-YE^G|NaPgNRs1 z!C$R^^dlNcKq4mXN*{)+a7$mv&^K_VIAvr%t?EO#oC(5E!qB?7<0m$>Ug^D2$5HIk zC4iF(Gw{3Y*?B%l`gUtmUTJOz6Ve8MVivd25oNl+69QPQPcL1>u;B279hXx7MxUpLW-?FO zP47AM^|GQxOJ7VrX_UStXI52sS~0RcV3a&T4k03%6#su+f+TeZA(?jR9QYz`^ue=ylLHXO0^^F({*qw}J;P~u-$KVyhs{5`oHf&3 z?nZJ?q?l%FYT54=wt3<8!G(f=={Mt(w(|Nb3uP;}8ZDG_&c5|x1VE$-uG_D~1HEt? z==h5z>??h_)cZL+MJ9sQa+EuX&4m(LSwQuI^-HHW znkG7oGE-Vu{Jnn2WdxsZzF)8C>f@(`(XPaX&WeK_QnIyDrvh}6BM~=NEe=LY)_vrU z*AW}uA}P=+GdRs3p%j$3_jEXRc)3H&RpqRvRmxJ_q!Fv;FAgGXnAZAaR$rrh#>1IU%(v;> zjp)*M*~IYg9~V3Dx1(`MR?rCznqSu#$_P!2+%cpb+I+RMPS&>Y^}0$)QEiHA6L&#h z@hh>8UhPh@yL9PL7pGZUSVB#IN2BTKP6`s*sRr7`($|mGqXa`Ohl>^Yw+IC_ro8l* z^G!j$SOFHc^jT3}d14bzF$v{_0ea~kwh7z5wF=jo&usx>gxw2$#JvPXofJLj!0FWq zH%DS{&}1Du>}fEWjTH}j4t8zfXSPkqG?4g_I71;pGNRl>xUTN@mbxG?9}{G=ff zQUGL-o;Yms;>hZx)TBmdu2fs>j=jArcH(^NHnGqff;mQ&K1u%o5b_NXZ|h8#qDPS= zvN&w%fj$`nf3u!3!xsPUch(u3PXr*$#=aa=axe;w&5)nLVV3zq=Ty$I%USRO+}k2{ z*t0+M10CNe%ey~Np#cOlICa^Qi_7=hN1Pii+wF)%>6GCASm_mODx z71K9;L&Ke@CbsrU(K3Y%m$f1p&JXS_QnXpXBDGeQXtHN7?TRX?BE$z!FoMifSWjw{L7V_lWqYassgMV$P*FI80I5y&QF$G< z^M#r*R=1#jf3j|fbe+pr<_bJ+A|;%_EM+N1_JJ1->#>Zu0_iFY~EVBbW5x-4h!%@tCEat`_&@A`rc;l~UP(G`4M=MS z9={VgziSNP;ih#Dc}orF7%36l?iFk`QZn>T=UKT>X=w`;b$mX0q>|w#yV_grR>q_B$q23C6}7C~B+KIxX9Vy&o%2!3*~iCQ*uxGT|spCW}k*=JpRI-S7df zr+TN+Z!ccNZq|VVJH>``r>{?glkv7n;>Axxdv8z5Z?mPP=AQU`TW>3mwB72|vue4h z|Gr~#^fG_~devt7viiENFC#!1Dcjl`fh_pPqL;K%EXGs$-I`0SgHLcT?eB`tY_1nS zs>b-LC@fU*u;i&(uD8#BEOQNwM!jt@Tb`dOu1AP|*OAorZEnK!4PC5l$;+hyvIW?W z%DW#9N5!F(4}ES1RJ>0js$C*Hy&{8XfL(%B(kf~W~t+4nNy5~ zOESy~7iMX?VyCsf6Y|*Mb^mewp*-i>c5g1GxxPEB6?j$F>|blx;FC9;-Pm7G$;8b0 z*lt&IN#y*3Cg=KNKn|J6^@kPSip%UDC&*!9Lx0*Gt>0RgXIO z_Jd^@qSJ6iF|w+wfN2?`s2>~k(!Gu(suFZjIk<{S-Tr@teP=uyUf6a@i`FV_jT-T< zDy>y}3#GKE4zq|+6tzmMSfQ<1q;`!`tx*)MJt9`^RaG$}Ay&*JsGafV`S?Cxo^R*V z`JLZ=U*|s8xz0J)fp}uje}9`ZK=wE#6sEP!-)BabNlo)&aG;QWb(&LohrHUW9*h<* zk46f4S|&C8yd*+4w^(Q(*QcPxIK z)9!S#PXn$t^)7eE{0s8$SnI?V=^VJz*jymI^64`wVTcqp#8i)wo zxxzb?KgJZ=oB-zMuZX^jcwRNW_;l!nmlEdyI*NL6Y1{d;>CP2_GlFayiG|Xcn|hzO|;WAw_E|oBysJGgm1DwA(4=-Nv$j%R#iY}XJ|~T<0I0L zEN0Jju#2&?-^iyO|JzD$?(<_dlhS~i1Y|N-um_br4jx`Z*oXR0@Vd3{OUVSt(85=n zU?J<3ep>3`#RE2$JJzSD-&-_j5%S8f$q3hP4>JKtEeyBy% z@f4cW+~Y9~%h=rr0s;;t^-%we}7y6nAIOJz8oQO8uIEWmWPbiOQg z$RPuE5Tj;g{}D131GOssGYG!mdo^SABs>yey{gtPzCvL0EpXYuW_kVAt@&ZqLBGp3 zA%q((tZdd3yA-F&v3olWQN6gvdsZ-W4dd^$ID~T&?pnz55iF4xeJxQXcb2qJ#qsOn zf8S;_JY?11$7>^PkY^_uQtJL-YZcXZQTBvfkN&aKaMr_S_CJJh{fF zXY`go1@+&H^bh^YCpFFQ@x!c%#|LrshaY5K--XEpKW*4qS6CY@Xc3dEl*npi{R++Lmrz$A_vBan1sQ==s{zfC&RBoL8()7?C7#>l zN_Sm7k)eLAG&ELtu2b8&s(vnNcwH(t>eU%PGn0ew``An0wN1|pI|eQ-^#_v=R-e-{ z6x*VpKfV<)1!nGt!vIp3vH++5eBMW)cBDFv!+)S}`Btirx9E5N@uZ9=shaZRxZnV% zU-u74VSg#+dQE>Kvxsk=M#fm^ySy|!r^3wMA@uldiZRc*)i7K~1?aLl(_tCPSo80; z_skv&X_4cZmF2Mg$L-p{wR1&Dy^@w0V5CH#ZV&b}n!u6TT{L6x-b`@uPmVXI%-7c zSy7uty>;w~7rn+0GUN_0#4fXo1Dn4rmVz1=V2^Og4SC9q{}eHi=uaxE_Ka)*T}=is zm&C~1(DhkT_ghynN$?nXX9KqSp%TJ~1%neF%lD@?mM7R})2yfmut4(eq=qbPdn7rI z({gT28+AY;44|Si#Qlg_W@M}BLX{YM+WsEi5Y%DOtu7bPeKXR4M2X2AfrKe#`YUtY zW=bfPpO)r%`M5@6ooG(;S`|1sQpN-gy9NtwYKsgL2TYmne&%OXw^kHBABlbQp5B)> z*V#+M=H+L{=NlOk>*@`>xeEkcnE-c}s6Uokz!Oa!=KEbeZ^)8$M49@m`jR|4XyKoN z*?{5IM?XQ0G_r;TsQkw$KZUHxq@!>@f`&i*SA#Vl^7poq`dJ8eZFec6AfRKsTLaGM z$;k~jreZ{#mG)7aUPovjwG1Mw+P~pXGki|hmjy)(M8@+p!gf#44DcPZ=}|bw+m(8? zB%>?-Z`I&MfX_n|%pDDdW_G}V1ZDL1|(Ot^-E9UIy~-d z-?;KjWAhwNZGVmEK2ZrtlGjbgA9r~Y{Vr|J2l^`OQu+Ym~@`r!w4Kor>@tJ(iW0fDdjmme_% z@o|4L7dJo-M-KGk+e)jFXa@p=*z+CDCWOs(f+uKw^foF(vH!h~gK65h#k0Y)>cRr> z#h`a8-WRJhF4rV){wK@|(dxAc!F8QlxRP61Wa0(pbVlM!{?<6W0)uZqDs^3RmkN+} zShvx(tP6}u?m%Sv2r=k{IDbvid2Zj0361u)X*64rdlsm}a{eLeFI%@Nm%u%iYgv~1 zX(o$hI|SFvqj?ML5%Tc17o@v2%Vh5E`KU~><5<_ReCLO)8+9>6c&e{<&ei+72q;g2 zVa8AQMDOp9VzSRyIuvF*v^eN%+qB%JR5txmQtVJUE*hK$v@6rJ#5F2W*R-LQm0mK~ z+d4f@5P1N-f4}Y}?~eDh;v@Rm1e*fay8d`?z0TQ(i7T#>cUB&x)eFuSKGaW}c(UK6 zKI+J7EZqQ(mD}llQ+1JOZ@j1Ga9Q4$q#>~r-k#dHuKd@B`uDQiN(}=i?lcVH~TlQpinQ8!qq?I zKj?D!Q$=&qb%9CHS~}`3TrgbDbU@f4OvB(Lx^#SS=u} zaCw%@S=lE%BHfaq^1X(hdU>|$j1J|9Ekk^GUxs)38{W3U<{Co5VF1R6mi8j7B;NJy zE8PZPD;KySDFQmyq-}p1^VD=I)eF%LEWr3_b_onniu#Yf zm<(pJ!c}@7{=K((d?oT~wLJ_)AiaExER!1h{O1ghS_mnOu2d;3H`{q<*88`pgeJ46 z$w706sTLmsp+=&csG`7ZFY6T;k1{(_K9{wv?a-6N67EKGvwx-9j1$=sa2e!dHM9ov zo>_TsHNEPvJHABclEW_}N)r0vM++BWZ*7}k-<6=Rf0biR&Nw;4%|f|-YA7S_r4{c9 zBnsI0TXw$G`B02fTK`hWlm%ene}Xq zV7vG$7)v6T&m{>pAQyYys((s3Bq$nMSOhmiC8acZ%3x@g>=ze)7wWGZ-5 zV1iC%9uF6#`FeLaC1rNRGs$Zi7PR^d^E*_voP0Ek$#9%dcungUxdA}V#3Y((SdG)nf4Ns62#TVpsntI*$ zq@ze-s#X%=ijzzcWtP0zemeRk&L%Q^q}&wo3B*@9%RjrHF4m#3x2S-D+wG$gnQaMY z*e+R=_@NN=Rb%_LNM|enYbwWJ)VK5{h7$O!Q&F;Fi^YV!)|LdZ?!BkK~ED9P=c1fsYIs99%)&)-=-X-!N?^$(+=g7nc3)urcr8_ zUH=V0vpP*rDRt+G54ZpPMx@0=CeIiXpgkw0m07lX_cOT0b}0(8-rzQ`s4uzBe|N||wZvpi$`eu@ z*?N|mJJWd0uy?B9BLS_qH7v9bh>|}%%Q}Ni9Al=CtoE8^jdLx0fRLNy@}2C*0kjK@ z${(F@-$5Ub+Uml2DfPIvosBiFfCV7hBTCM0IhgN`MJ{(>gb^?N0!MRwDwZ$YwdBYy zo5ZmJy}2^j8@LMw5R2Ljrdp2)o{6AK0C*r7$IMI<0JvZiqm0x4&LZE3zZes;I0C1I zVaD^2M>$|CnCsyY$oijyF~$?ihWsec-AG$8$>C%EF}IGQZ{?kj*~ysJ@hy|OJ>~O) za43grk}BYxT)#w7r%x4mP29Mnem(-V-%g9){ErwWiP=f?3QDl=$e6APfW5?L2L6nY zndtgY`+M&;B3*tiZ=)63FUI#@j7t`Dj9hquGkfmkAY$jqi-q#v5f6ahxOv#q58RT2 zwSR0U4Db7Bl6$C;eR=Qrds5x`aAzD5lr9vI;yk5(>89&V1Cwi$J!~HhL-70}BhC0l ztHxMV*@N27XEz)Nr9)xpaEH_b;zGe0=zdo4RbfeA_^VVdGY|8G>km6Jm;pyqu$?Qb z4%E|ppxkFR0OQ(amGFn}=Ot;4d#hz_G-_oQ5u6!pR#c+sebb_1uCw?oB>FD*gs8S0 zFMv?fv7GpZlj`0DjP+$__=UY_~w-W6Qp|Is(BWOVVKwcF->fy!WgWqL+FMZN0@0?Z|Lj^@7=+7}>!iDhUww1WMdS3c$sun8?m3?rd6i9Uv7{xVzTL z$}|O)a_rRP!E0pO<(@_3LY2atHLz^jR;$)G9iNJMB-EvZfOGk5MReq|*p$OPEqz(5 z+B&El!teR+G9+=uUG8S#%=Q3f%s8ytu>jPcijBR2Zzf4Pu^O-d?s!>bbkWy8izOG1 zT}v!=@DC03ZLg*pv}Ga?i8Ic3of-Y*WWQ8wRuoneVXx20s1seX67BkU{(10Le;#f#>XjRsjtzp*DB04cyDy7Ptn z!K01iXkl!Caj!}oa|U`%6SFU25Yok^2INn>(`1qS(P-^^Z)4(EfFyt%G695H!rb&~ zP5Ug_jvc=QS%nO*LRAd@{bqaw3Uwx(tQIIORJJ;FzOZeTbC9Xs4NA{gW=?9BKg$;` zxdMo6UhFDVnVp2~_mnG}$mT#hwVG4viXDhkBkA+Q6X8sJbS$DuLZpPy=O8p{-hJeSqoqL(#^) zhR#A;Sm3))$grur3y*_Arzu1cOb|6z&6fi~s%|mcX>;0|ZR_y`MmQ~CV8ac0R>BeF z5~R5AeCQz%9qG4|Wl=ceH(NcB)l-K2NmHPMJHCkCVwF@i#c;J#tFi>Et9{^%7)a=6^ADqenJcKnD+*AwkpNOi6b5kFS7 zGbI2doniP(G#*Ts&T!|p-pbmlqPv|Bgj+OerE@c5Yb!-u{n^b{qk&R$ipP6OC%_Z* zP;N$qP9cvBD0&Dly6SPCSntoiP6e#a=%dXeI$ zs%T;^K|1^#HQ;;;XWyaEC8Pj*Bd8T0>+J?BBcPmvu7yATZ1=r%^V&&AkUiH^JtF=$ z6<4HDJzu+|gFw09^uH+0Hj^x-nVSkUirEmr@<>$3G~I4#JH<;2=hZZYwL9Uay`t5{ z!PzP(PJtv+VGX-x@CH3Y4b&CY^n86pSZpz}@hCm)hV3|qoxcZxnWx3F`8?e8AhIEh zj>{C%TD)*;!;%30SXOw{i#EOcn`lF*thb;e@qe^jdZht$eo%gLWfmz`Ptf_YW8Tnfw z&KF@c4Vw;ErSqlyFbutCOAX%VYHdcDDFOQ^Qml8;BbFkK%19fJn(L!pN5ZX?6KsE0 zvz0?`7=|uovP$&=et+7aYZ(Y>#7`|uz@x4>Um4^#5aZzC5^Bk>h?aU@EPF_*(WAtS=oVO`9N0t}%nY4C)?3y^P zpYaer212Nlk__tEMga_5#xhv%Wg$GXOq()IlrM)ec#ECRW>)D*HUCoVap^L5>dI9+ zW$e#B*aZ89!o`V)#eanor?uy)l~|MPd-CU>vgIc?X@t17cpvsB`byVl&q}W9}bKaF!P{5t=vp-D%ZNFnI zJ&$>`;WLDwlm8A0j*e$3pz*6|A4>yNQ}p}>r`{-(ARR}D2UGy0RRAsq=cyA0Dy$`^9cb+NqYtWAj+GGh`fGnYU5yIZ)#&pA}Jz5Vryq(Y-VW$ z0JzMjE14)OZR7G?ET0NXhxo)x+bH6|lPC&@`(VdV(UBscONEeroWoIQ#}E^PCg}YT z0u>qQ6M>^Zj~s?L3%5a<73rTH64rmS=ALaa-F)$F=)Pu#f2-sqy?O+$4IVjBf>nXt z2f0xA1;(m>PgnQa2BV-aB84pg9lqL-)c%ef0&wZY%lne74em1l!es&p9?&M6+Qvi} z{D8J2oU8@m69CcX5W^)6?}H5xbc+r?@JWA9r3Cl@4bU3^8>|CfGXV6cy}wNW ze9|wI-5~&)@uWBqA7TI`SVkeD08<`7$%ty07(kr~fNd<@1p>@60GK4zj3odSb%3^E zbfhW(JTibuAtaC%0PPOY>m?_50R$uiuwNak@gBV_L*Jr%B$Zsn+du&l^VNiBcnhbd z#`uC}SQ76gHitf>eu^MthifuEi!U46>d7Dg@F520v9%|6F2ks0!^0erwWzubJFTz} zWCjN7_nRZdwt@h_nuFKaJw34cxepJlkJWt^kOVXf0oeq0l0rPF7XiCHhODP^m}dvqihshtFuIY4$~c7V3q^(kGn{fiMVDCy#{3 zOAfpwZI^(?45uLJ3&B<(la67RU{(xMCQ*?fI_9&31O;ooYK-CO1+e(t1~rQ_$NN?( z@J%Auh%^*%J`Z@6g*0mDz?>3=`yqAI?$dL=2#$|iqs69Z^HKaFJxp!ipTV(qSu!zp zcM4Z>(Idox2P(-*kc+#YSE!aiHHDsmM=G76F@43_5ICTng-P^Z2uY~RsLRbt6p#>7 zuwl$2a3VkjD0EPh#T7_@qH4sr>Uw6t!W^tFK~Fx78HEKzcMlQi;-tU~6=9)nh=!D` z%uyc49Dg-#tw_F2Uzo}!@ti!aZ{EQ;$+@^zm<%ZY@?!1S4-!C6Vs2FAeBIsKtKmnE-cC`S}sCTIZ+u}(U-l8s&Z(~!-=lx{T)$LIA2lWN011s6suab;z_)*0Nncfx0h)S zatK>A`AH{UVawQuv|nin^4Me=n2oe7iV~9&)r%#H6^g}oTR6)0^V9QM#F{j2d{KpZ zq^Py1#Z97yVbZsh=9HH55%Y0n`MA%@7>g`&2|hN7I=5QqAH2`_tmBg*W0Sw^+Ol;` z=n1@2zO%Z{KNCk*hpk4YfL%Zye#ZNS{jCiz5wK_BNI^uqQ&1#VKS4ifEg+_0j5mAg z)w@?{5oX<5>lEu&-B#V%RIpT}RMN6LvIi-OvJH8(c|0;aGCf0sLs>)9$?U0o%rh)o zsavTtsVjAQZ(QEc*A~>)8%b7eyvfrzsBN|md;`+RRabeVUHz&wy_9mgskA8{Bfmi| zPOdm(+N87MsJ5@Runxasa~5`?tk$a5Q{Th@&!p~4S?57qOPpt;=es*TIF#Ty)MBDH zL|*ov?6A32xtCLh(+&hYznms+15MON&_`xj*K4r`XuHhPl~O0fP4G+_?EOzd!b7F~ z1{jn08B+o*aWhO9Ltdw}ki^%($)NGLh!N3@`(wU07T<4+-{X;zdbAG$bb^di;&SjQm4c$S` zwz}TB0r^gw4BfyL5pVJb!w0vAF+jc#C4>o7sIQQ(Cgjbfn+IuYqyYDV(RtO}zEH%6 z1|b}wD8Ev_&Gu4K)84)4Qqqg9_ro#6W~hO$y}nP6!s&n05AXCsrVb1aR0|S_v<*>z zKE|BH?mV_AV!tAKEt)90oNB@>4=QJnVyELTVl?NS=WJwa6zFC&))<^pPgj?;lqLi* z(v@*oTYg@--9HKbn*J4O-5u{euvgpG_2Y2IX<$BXAtNR|ccP$7h#Xh^4;26hP$gGGK-3z&62|8J~*u9u$c2|lothw}?4FS}J(aka_GE1r4 z8MrA_pR#!;yMn@%OF+Q65jf-S~{yK`Qm-Gq%yA-DmPgRU!C@TzxEmki(MoY#LYm@ z-Nl)GZFzN|#!8L;bx=A1KTc>^8TJBR5{~yQ&7#XDL9k7KYw}|Jr^4c{2E!5KapUc8 z%M2NssEI{M-;z+RQRe19p{%HW+CMuNTL2~v(JVCi*NQY`xAN9E8|C*65Ag^n=O~{l zUn_GQj4##b&s3oY8dOuVtu zE|s%-yWayf4s{1dj#@j@FgZmu&Zn#xHT`l|9JPn|^L_fEGXn|-ipsmR?yuywqOKd; z7YHjCFHpGWog&;z*5D?Horp|`faby}$0@H;l~Qgr4Ky3&2l>aQcb465#TSUt(%5)4 zT%}Hw`^@II{U+i}jz=QW6Vg4s7_S!f7P4yHx4^?I=4dvDjpz<*<6;ltTRhD?!&=An z4#!msn^h?5JG}RC6Y@PxX-z3*4O$ir2W~Aj?#36}1R0#eOQ$WaN4O8u zQyCz>rIr&nn~N_OXDhf%UUt-X!vjro&eR8`&GOBBfz{OS{Y+>X;Vqj!qX3a--*wji!VrIxkrp7MIBx@^TWNIeiW@n`2CZ`N`vjBq( z$prWjd0n_49atGT=##iuSz6n3yYP|y;g|dI_-8SYjO33h4iSb!`n439M!>|L!L^j#RN?aBXi z@=rgaM)qJkGg}8U8*7rEe)SD(93A+`$bJU;*W(}Uva{-p0`mY$WDnWbHuy-%i5zpH~w9 z-QB;`|Fac_;D1@#I@($O0oV`>G_o|ZdW>oRXvh3t+u&ek{8#7vTN8e2{%1HN7qkCi z_EYnx*&nI!XAki{<{!6+osqtSjh(WMjV1q|S@zfU)8pmS&#WS$Q8TkPv~jklV`2a?v#>snNH#VmeHH^SnDx&_{=4~qxE8emJO0drN7sK2d_x=Xqx*lQ6*oJ( zF*~~v8w&%M0XsVbGqVvJ0~ZG?n8A>hjmv<^klBEf+3*jVkAeQ?>^}m@+nGJiOZt|7 ztMjuhhL6F(MqKP%ob37xOl$@$3>+M6#tizb983&sOol96Ohzp1>>%TRhWIaT{v(ux znf+rnx&AH79&_!FnMcX!?Z21)Q(Pm>?9TrifFSSK|J#YZ zjj@BXzMYYf$zz86Uqq}6W#Dv7K2Uo ztxb#!`GNmT;C~kU-+J!P{`~im_0Q4zpCgg?ubJhaGl9_K%=UA@+W&h-{4rpK^-cc0 z^yg{+BY*z;e8sHKX28VB#r1Q(V)~!+)qhLDKO6Gz5qW|CxAXm5vqWqxZR})i42}3% z|8D(P@n2Z~X7#vD`1;RXLVkNiabXfkF%b@C5C;bX3nTO2-TbZI-~1SYxs7e?tn?lD z&8+lIjDWV*CcMDE3jbE~=Vv$f<0Sexp!NTlydJ&(N7>W*>OUt#OUFOzbFwf!K7hc*I4eD_g^lqGpdDf%ZSAau)W-M*U&*RP$dgHU6jN-!%WQ{4>4&wr2e!vHvW6ToFGm#)1D@ zjsHi^|LY^<|H*^Dn)Lsq*C)Py2YCYI*WzznzvlBq`y1C2AioxWrJpuA-@i(qt^Le8Ejq3@J zUyHwS{hH4c?QdL9fc#qgjqBHZo@jsLdIIFv;%{8P=JQ1R8`l#czZQSv`Zb>?+TXaI z0Qt4}8`rP-JkkEf^#sVT#oxGo&F6{sH?Ai@el7mS^=m#)w7+pZ0rG3{H?Cjvd7}M| z>j{uwi@$OGn$HvMZ(L7+{962t>(_jqXn*5+0_4}?Z(P6T^F;d_*ApPW7JuXVHJ>Ni z-?*Lt`L*~P*RT0J(f-Eu1jw(&U*bai>;6_F>&Kf~ogeRBrCq5Ve!TOQ1T3K_3jnxL z0sub#0KnD5_ zC9!E0a}eDR0U@aLKKq-A_TO&6Lh#T+=LdU24Qbl8$~H!h6;l06AjLro!i%lt68wZ<=YoV=@*;`gw1 zHi?~9OiihIBWj|hjtU_NjuQM(1<3T?Q7c)UbT_6CzW)(?R9sw>Z|$TTc`lo}%xnI_ z5~q@09TF6~0#g$>=&)f@X5Yk?=Dl-bo2eLTvfb(>aQ>ZpM#SP>pH)L)kE@gWFt(KI z>$esKw(*!U!DNzS_%-~V@7x9yJ?{%gIz5YW`KTTi(7>(U`4^4cR#o$s`&bV@jBDvl z1DXe8wwCZsXefxRhxn>qHF#d}e%)F_9i5zHOW2Z2b!c4BP%d#fm1JTH`A{iN0)8I6 zrmGK4CXrgj(S__dF7sS;&;||(Z22QN{0_8nBB*py-z<}beAQH2>qIB7t3auFE$UjB zMT_OxJr+@78>eQnrB8%`VcLcjpvUupNkfH8K)(gkDCO<|##;6HDs>YfDfPTEop?&e zus^rRLjSoF2NuT03Ke96$S{QXV6fa^ClQIwg3Knz-j@%l>3da_vIXgBvWPr&aPa6v z3;jll9hJjGkkA3}ihkQNV@pE=5gf+oF(KWb5-1iF84jKIP372Lyd#43@xdrLRw+j= zYbe`z74@~n5NQ);@F0+N={yV5vBX5c83o!05a0tH5F&^j{)rqMX*H)R$H^N@0f{Mi z?;^_a+5Vju4_bLLze;IgA%5o`x~baXxwpX4Ma~8a7$7PLO%_B5K%ZSQidt4WE)YM` zt*V(=itMkXVv{SrcBmUw;eZF5ZjMJbDmanL7ky@noYXHsWO=bw;iQlE_8M_eX-Ib z)q46@UC>v?sbN0$`wok1axZTk2| zX#LR+|2T5U0^7EFIlcmh?v}g+3j*?NJp+JlpIA-8E2h)yn(8&pLq^&6@b(hTr=7aU zdpBde2euhqBj$dF)q5qHzg@vhD%0)T;6s0?%>9C_*oDBGBMsQSe4>%uy{_KaJDcroH!z@KmA861BfqvJC<$o(jotfW%2W`p$)JwhIM7lFC&jx|ZYv}Rtp3)eSoR3fEz zc(EfAsswrT7PJ(8*NN<}&6rVgI*xr|Q9f)gQbI~Lo=4cc!ZuXybyjTCdUx*n;zH}7 zSodz{+feEW9>%GjFH%m9vZ|p>azElgOc0rcNb{&a6QcK3g-P;7(}+-g)Sk4pG$&L? zIwcyOX&@fADwh%$o$KIR!VNMA0HF1at-Mrpr5K?1aDP{NzO z?p*04)XzP>E7Ma`ck|_U^Yb+p5F{_6yl)m(mK)ESs~`XKQId|^c7mD?LU3p1)u2gP z>%H5vv-uO=W@GNf+<5ZuMM0DJY)l_;0BvY*GKTv18du*Di?u-(vzbGDn66e=(sHp* z$MGeKJanyD7tbud1NzW!<^Y`%WvC`*XD@$rqCvIs95zqP%-|sgc32`Yg&@YRk)`wi-E>9OdnaRdJtL*AW1&udnA977iP> zUWh3mcfMvzBJVBscDRFjui5CZeZIdyKtKR@E=m?NJw1JM&?K)ApOTWIQmjhE?a+I8 zfo9F*otTl4QCnM^pW#O5ZRqKFm&|HXR9p-s#0=hV)4xD#zu^6vk99yU{mw=xl`E|R zEX1I^Rcs@bd3`WfzIDb8_X?0uHlG@PusnV8Drqk04hRn*fhutT%77412TNfYr|&;| z-t6q|s;I#D{0z)xtM`~OiALLvpUw3vc;HZ$=KCx&5M7MgU{k*9SmPdILwh4a!$@75n*$ zh3h?00ylfrP5*8NLdX?JRhsKrtX{@Kw zTjv!JlxhiKjl$I_>2uR-Uyic2TldP_jjhrq@S%t$dna7FbupU14{-8kH*or)?Osq~ zqfJ2PsNvQGP+~XZhV$Ti$r$7jYBTpkXSkN5dp64Z7F@URE<`xw(DTqeUp`Z()vIM@ zm(St*Xr8V5P)(+}sg*{q+f`HIG9UGm#aXI(vz8YzXg*5fskFA0rR9BfHb3 zB3-szS{fP+o;T;>#Gao@OZP`VipcYwDbry0b3Q{2PEAc+n4ecIQO7_H4i5{{ao?}$ zdEqXj5T7j`Wn4XHQPyA#-KA^y(EOP=n8My}LDIrIym#KmN3q{PKu0&5ciYIWt^1I@&(xAXFSgb$x8^Ok&KF-!$l1y7 z@da5r>J3$R9gvGh(rY)eMLCjvO)J-Faa;N98FJZ$C2zUhd{vmAF<)(R!9EZ^f%}Di z|EPy}rP=iaEA#r+*V8?`vmI$=s@?rD3DwH9l2@|L=GUVHmZzr9LghWa>fUea@?Z7I zGwL*}&z$*I?=83RJVS=`$urBm?4k}pZ$05@Jt>s;+$pVFrhEC4K%?ogo$slnPapws zDf_LSpp#)*TYNXMj|!>%XF1&!r~GVWRaI4XhFyo@tq)7z%2#x5 z+e9`qUo4J>Zmbc1@&Xq+Z&DX~{p@b8IR2y1{*f8i9XM2%rkg44N@q^oMF;821B9|w zi4O3-Q%n@zO(l;cDH+IhC8yKqT-SqGYR`KvZwbBg(Q@X_08DlJj#M`NC`4 zPSatQ<3v_<#iH{(BWdMt;e9gALkQNu>EIKm0a1$B_?3q?EuHOSQ&XhpKRigl0fRBG z-?Z^D?$7PxGdFTafFqNHy99KOo#8JBBJpa)yx1#R=e6-(`{yf(KOA%sXG#*I(X>l} z+X2&cXP+V3tdUj@Rh#3+F;XBMzcjxjl{Hy@_P+Y~*f(vav{BiC!Zy%85F*;PMASx& z4!4qF0z(-?xlz$lx0){n_Dc6|N*Co8Bm4^@A|hj9A8%Osvh!5gZ0*E0IFYG%5eX-c zPDbOq&htv1IJvC(npLn-=4mlZUhjUy=R2JhRZ%DHAJbiz=(cr5NKWT>@yczFBe504}WOQeYkjS za45aM;?-)i3+K6j9?d!&ZNCcWMaMsO^xd6?Ejyz1?Mo-3vfmg7U@SeK#3?pu+@G)b z%4+-Eq!@f$GXnO+9u^6aGx?nSU+oP@%fvW{oqFI3z%viKv27Yy2gM zqxB}50qo(ZcURQbcy76{cIkU=>8{iW;fqt?i<$jtxXvZlJ3;(Rj=P9LzdJS;B4cHJ zx}a79G_grfr_jtjNZ6&zVqobtWd{AW@O$q)GFY^iB92J5C%UpKC6M}}MXAYy98429 zXkugso2}uj*u9h7U>oj}a8M-WJk`5?Lt!1Ku{{>E34RBGK4!DpL6*x*hMPcRy`N3a z5KM?5+J*nUAGvCY`g^fi2v_hzT4X(i9~rTxMj1VW(zj=eo&2vvBLM(C!u6IVEd|y- zb&m96^-qmC=9S=qW_c#CLM7fig-LC~Zl_GAeXe6wi7*PIn5efLrwcBLDemcFltt2k zhLLU)w+E@nV0Rs4T;a7wZcA4*CM(LC?0M)iI zzdjriB$p_MH_J%qAzim(hvh#I!z_)e#EDegL_C_GFGtBjwPwYMiN>{_BOFl+G8(`2mRtFyBOO%i&H z#E4wUNjdzgMBYl-M!jSRzdm!%?sF}uu5n%#Ps8IIax7>kZ1a9cXv8#xE-2Ecbbp`q z>Ynnf_*{7}>tcFoA6~e;opFy;w1UXoI<7{)>}?u_OlO1J%vM5+aqscN&3AkLrQJoH zpw3?SLqT_$+a6SVq0oV1e^yf!F?9G3kZ32*%MK6w13WA>wh5Un6XR)|r(YhX4NoNz zKvRsM;l1WEmf@a@xfw}4Rfw%x-3yzWT`{1pc9@6_r>k(5Q*Y(^PG8Qn7e0BZ!c{9y zlxh61mYy+pw%2;CN@Y#A2@^&xsQ_BnOBJQShp8JPa2}3w%9%z7{Iyj=SV;k;%0np8FUO0b^m9kngx%b)lanQnCMFnpIR06Wh(j z=6RIUtUc_mu-{DEO0xoc{nBVU&y-ol_ulk_!J6|8+@KBb))79plFrMb5ZR=(9Xmhk zZ>+Y^NCSt2L{Z4fi}Xxq_RRY0>8K=SV1JVt0?l^?Cw7puw8>D{fqH&+VHzoV z7C3qAAkjr$oPOM?6DpJY$3b!Miu?Z2!*x`VxkRiGn!r4xs@iZ2Xm=XR*h-?I@m0%P zW>MBEKDwWa5DQ@~;u~m74zmk#tMindm<$8^%-0D~2O;*;j_04!2P~U+C-To*MYiY# zXxqURk@aa}7cT}RlESXow93rYmfW0|b_jCT39nX(#Kyvkagi1v0g`$J^s({wP`lJT z=`OEyv?m@${jF=WgtawG8EI8c-+~B?Q5H3`g*TH5AQGzu*Zl8%qNS;|mVJQghRGUh zT&@Cq5VipW+$N-uq}29r*l4gYpP94}Ee%m$ls4_J6TK6E9_8iYaq-PX9&Y^(Zs;BQ zwTtS3dDWo~D0wlWy8At7(zv{+xohegnQ%~81lrnLzh^ExW_qG=U_eC-F&Qp^T&RK9 z<~sP@^Z`{q->XCt?e;1_S-A=a7lMHliQT)LhwWJ8jxD#!d| zYsKko8RstNB71MIuc)fBJO|aA>#mhsmb;D@7@SkFA1W)lw6*k3ji$EvZSOC3x68T$ zdbf86aKz!0bxFU?qo8@|uNCbseU7$5fNnm|&{bmdmtg5KeKVOf4hg_iW$|u$IMkEz`CzBy>#LU8dQ+-|f_VCZ|cs#CIhfzA>(HSv^ zACgeZ;IH@}S&HZkk*VKFDPmGq<pU(aQMl@Z$4) zeFRe~De&S8BY8?<3QH|S3c!hK_2CowE@ue>C6j2k4|!J=CV*eF{RMoC4U4fbe)ya0 zjWK)(2*B2R$=pF17Ia1^pXJEvup*caBUjm!YC}iT2`VQ21n8KYG%c`YEQY{qW>bt(riI8w0 zKNPf8gSes%RxDx#!bdGyF6R^*$+`6HnQUH(2$)%Lq;pi$dKbipg!HPZr$wH{4vtV9 z_sGL*(#A0=o!Z&kpNMw0A{YvYkG?PeQA*x0mC$eW`L=;VLXH~d%dy|y6}dwbpRlD1-v<@gAMGx7 zVjA89h=7kk{4xN}zq6UQr>dR@ zBEM?X3r+R==D1Ea-kdkQ~;*yGifDsLP}V<&Tz zV#+QA-odfEVJeUz)TcNEOzh<4Na3tf^9J{QRzdLgX_KzRHT$LgG*w+>_7Ogk9d&APOsOmL`X~4M zYBLdja|5>PZ9~l0{zc)+_}ewUtfnjAK`NvpKiK zcu}+?_K61q5c%ai5!!~3*+!!Xj!(%-`X%e@n$){*hvM-u6AYg2xpI$j*aiE6QIA#wOYV?JdM0o%WXM-~k58-01+yX-?x5vgsi;flp1@c1VA1Xbr3GiD&~D{dBDIm6Q^uM-8< z4I{@d6X@{*cccbT>0F~x_)0rc4;f?dOnOW*^@nPjM>44W%9ob3o~=;ixO;MK3(Tv? z)0YC=Z`L;^NE185YXk(n@eu=$Pm@IBOΞuXo`>Xfcj%(;EjiU)0w`mEo?w)V=C& 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 literal 0 HcmV?d00001 diff --git a/www2/images/gallery/network/25.png b/www2/images/gallery/network/25.png new file mode 100644 index 0000000000000000000000000000000000000000..cb60af9970dbd14f375a6c57acc7e674339cb33a GIT binary patch literal 50417 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