{"version":3,"sources":["yasr.bundled.min.js"],"names":["e","exports","module","define","amd","f","window","global","self","YASR","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"./main.js",2,"S","$","d","document","h","drag","tables","count","ID","PX","SIGNATURE","I","parseInt","M","Math","ie","navigator","userAgent","indexOf","sessionStorage","append","init","tb","options","disable","destroy","id","attr","p","postbackSafe","is","addClass","before","opt","g","c","w","width","gc","prev","marginLeft","css","marginRight","cs","cellSpacing","currentStyle","borderSpacing","b","border","borderLeftWidth","createGrips","removeClass","remove","th","find","cg","ln","memento","each","this","lastChild","push","removeAttr","bind","onGripMouseDown","gripInnerHtml","hoverCursor","data","syncGrips","not","m","aux","flush","split","eq","left","offset","outerWidth","height","headerOnly","outerHeight","syncCols","isOver","inc","x","c2","w2","onGripDrag","originalEvent","touches","pageX","ox","mw","minWidth","max","position","min","liveDrag","cb","onDrag","currentTarget","onGripDragOver","unbind","draggingClass","onResize","dragCursor","round","fn","extend","colResizable","defaults","jquery",3,"RegExp","escape","replace","csv","separator","delimiter","headers","hooks","castToScalar","value","state","hasDot","isNaN","test","parseFloat","integer","parsers","parse","endOfEntry","start","rowNum","entry","colNum","undefined","onParseEntry","hookVal","end","exit","endOfValue","onParseValue","hook","escSeparator","escDelimiter","match","matchSrc","source","m0","splitLines","endOfLine","entries","prevChar","substr","parseEntry","toArray","callback","config","toArrays","toObjects","lines","headerOptions","headerLine","len","object","j","fromArrays","arrays","escaper","experimental","output","fromObjects2CSV","objects","csvEntry2Array","csv2Array","csv2Dictionary",4,"EventEmitter","_events","_maxListeners","isFunction","arg","isNumber","isObject","isUndefined","prototype","defaultMaxListeners","setMaxListeners","TypeError","emit","type","er","handler","args","listeners","error","arguments","Array","apply","slice","addListener","listener","newListener","warned","console","trace","on","once","removeListener","fired","list","splice","removeAllListeners","key","ret","listenerCount","emitter",5,"mod","CodeMirror","findMatchingBracket","cm","where","strict","line","getLineHandle","pos","ch","matching","text","charAt","dir","style","getTokenTypeAt","Pos","found","scanForBracket","from","to","forward","maxScanLen","maxScanLineLength","maxScanLines","stack","re","bracketRegex","lineEnd","lastLine","firstLine","lineNo","getLine","pop","matchBrackets","autoclear","maxHighlightLen","maxHighlightLineLength","marks","ranges","listSelections","empty","head","markText","className","ie_lt8","focused","display","input","focus","clear","operation","setTimeout","doMatchBrackets","currentlyHighlighted","documentMode","(",")","[","]","{","}","defineOption","val","old","Init","off","defineExtension","../../lib/codemirror",6,"registerHelper","findOpening","openCh","at","pass","lineText","lastIndexOf","tokenType","startCh","startToken","endToken","endCh","outer","nextOpen","nextClose","hasImport","getTokenAt","string","semi","has","next","clipPos","hasInclude",7,"doFold","force","getRange","allowFolded","range","finder","minSize","findMarksAt","__isFold","cleared","getOption","myWidget","makeWidget","myRange","e_preventDefault","replacedWith","clearOnEnter","signal","widget","createTextNode","createElement","appendChild","name","editorOptions","foldOptions","defaultOptions","newFoldFunction","rangeFinder","commands","toggleFold","foldCode","getCursor","fold","unfold","foldAll","unfoldAll","funcs","helpers","getHelpers","cur","auto","minFoldSize","scanUp",8,"State","parseOptions","opts","gutter","indicatorOpen","indicatorFolded","isFolded","marker","spec","elt","cloneNode","updateFoldInfo","foldGutter","foldOption","func","eachLine","mark","setGutterMarker","updateInViewport","vp","getViewport","onGutterClick","onChange","clearTimeout","changeUpdate","foldOnChangeTimeSpan","onViewportChange","updateViewportTimeSpan","onFold","clearGutter","./foldcode",9,"cmp","Iter","tagAt","iter","nextLine","prevLine","toTagEnd","gt","lastSlash","selfClose","toTagStart","lt","xmlTagStart","lastIndex","exec","index","toNextTag","toPrevTag","findMatchingClose","tag","startLine","findMatchingOpen","endLine","nameStartChar","nameChar","openTag","close","findMatchingTag","here","open","findEnclosingTag","scanForClosingTag",10,"place","copyObj","setGuttersForLineNumbers","doc","Doc","mode","Display","wrapper","updateGutters","themeChanged","lineWrapping","autofocus","mobile","focusInput","initScrollbars","keyMaps","overlays","modeGen","overwrite","suppressEdits","pasteIncoming","cutIncoming","draggingText","highlight","Delayed","keySeq","ie_version","resetInput","registerEventHandlers","ensureGlobalHandlers","startOperation","curOp","forceUpdate","attachDoc","activeElt","onFocus","onBlur","optionHandlers","hasOwnProperty","maybeUpdateLineNumberWidth","finishInit","initHooks","endOperation","webkit","getComputedStyle","lineDiv","textRendering","setAttribute","ios","inputDiv","scrollbarFiller","gutterFiller","selectionDiv","cursorDiv","measure","lineMeasure","lineSpace","mover","sizer","sizerWidth","heightForcer","scrollerGap","gutters","lineGutter","scroller","zIndex","paddingRight","draggable","khtml","viewFrom","viewTo","first","reportedViewFrom","reportedViewTo","view","renderedView","externalMeasured","viewOffset","lastWrapHeight","lastWrapWidth","updateLineNumbers","nativeBarWidth","barHeight","barWidth","scrollbarsClipped","lineNumWidth","lineNumInnerWidth","lineNumChars","prevInput","alignWidgets","pollingFast","poll","cachedCharWidth","cachedTextHeight","cachedPaddingH","inaccurateSelection","maxLine","maxLineLength","maxLineChanged","wheelDX","wheelDY","wheelStartX","wheelStartY","shift","selForContextMenu","loadMode","getMode","modeOption","resetModeState","stateAfter","styles","frontier","startWorker","regChange","wrappingChanged","rmClass","findMaxLine","estimateLineHeights","clearCaches","updateScrollbars","estimateHeight","textHeight","wrapping","perLine","clientWidth","charWidth","lineIsHidden","widgetsHeight","widgets","ceil","est","estHeight","updateLineHeight","theme","guttersChanged","alignHorizontally","specs","removeChildren","gutterClass","gElt","updateGutterSpace","offsetWidth","lineLength","merged","collapsedSpanAtStart","collapsedSpanAtEnd","lineNumbers","concat","measureForScrollbars","gutterW","docH","paddingVert","clientHeight","viewHeight","scrollWidth","viewWidth","barLeft","fixedGutter","docHeight","scrollHeight","scrollGap","gutterWidth","NativeScrollbars","scroll","vert","horiz","scrollTop","scrollLeft","checkedOverlay","minHeight","NullScrollbars","scrollbars","scrollbarModel","scrollbarStyle","node","insertBefore","axis","setScrollLeft","setScrollTop","startWidth","startHeight","updateScrollbarsInner","updateHeightsInViewport","sizes","update","right","paddingBottom","bottom","coverGutterNextToScrollbar","visibleLines","viewport","top","floor","paddingTop","lineAtHeight","ensure","ensureFrom","ensureTo","heightAtLine","firstChild","comp","compensateForHScroll","hidden","align","alignable","last","lineNumberFor","size","innerW","padding","String","lineNumberFormatter","firstLineNumber","getBoundingClientRect","DisplayUpdate","visible","editorIsHidden","wrapperHeight","wrapperWidth","oldDisplayWidth","displayWidth","dims","getDimensions","events","maybeClipScrollbars","marginBottom","borderRightWidth","updateDisplayIfNeeded","resetView","countDirtyView","viewportMargin","sawCollapsedSpans","visualLineNo","visualLineEndNo","different","adjustView","toUpdate","patchDisplay","offsetHeight","postUpdateDisplay","displayHeight","barMeasure","updateSelection","setDocumentHeight","updateDisplaySimple","finish","total","prevBottom","offsetTop","bot","box","diff","updateWidgetHeight","rest","gutterLeft","clientLeft","nextSibling","offsetLeft","fixedPos","gutterTotalWidth","updateNumbersFrom","rm","mac","currentWheelTarget","parentNode","removeChild","container","lineN","lineView","updateNumber","lineNumber","changes","updateLineForChanges","buildLineElement","updateLineText","updateLineGutter","updateLineClasses","updateLineWidgets","ensureLineWrapped","replaceChild","updateLineBackground","cls","bgClass","background","wrap","getLineContent","ext","built","buildLineContent","pre","textClass","wrapClass","markers","gutterMarkers","gutterWrap","k","insertLineWidgets","insertLineWidgetsFor","allowAbove","ws","handleMouseEvents","positionLineWidget","above","signalLater","noHScroll","coverGutter","paddingLeft","copyPos","maxPos","minPos","Selection","primIndex","Range","anchor","normalizeSelection","prim","sort","inv","simpleSelection","clipLine","clipToLen","linelen","isLine","clipPosArray","array","out","extendRange","other","posBefore","extendSelection","setSelection","sel","primary","extendSelections","heads","newSel","replaceOneSelection","setSimpleSelection","filterSelectionChange","obj","setSelectionReplaceHistory","done","history","lst","setSelectionNoUndo","addSelectionToHistory","NaN","hasHandler","bias","setSelectionInner","skipAtomicInSelection","ensureCursorVisible","equals","updateInput","selectionChanged","signalCursorActivity","reCheckSelection","sel_dontScroll","mayClear","newAnchor","skipAtomic","newHead","flipped","curPos","cantEdit","search","markedSpans","sp","inclusiveLeft","inclusiveRight","explicitlyCleared","atomic","newPos","drawSelection","result","curFragment","cursors","createDocumentFragment","selFragment","selection","collapsed","showCursorWhenSelecting","drawSelectionCursor","drawSelectionRange","moveInputWithCursor","headPos","cursorCoords","wrapOff","lineOff","teTop","teLeft","showSelection","drawn","removeChildrenAndAdd","singleCursorHeightPerLine","cursor","cursorHeight","otherCursor","add","fragment","rightSide","drawForLine","fromArg","toArg","coords","charCoords","lineObj","lineLen","iterateBidiSections","getOrder","rightPos","leftPos","tmp","leftSide","paddingH","sFrom","sTo","fromLine","toLine","singleVLine","visualLine","leftEnd","rightStart","restartBlink","clearInterval","blinker","visibility","cursorBlinkRate","setInterval","time","startState","set","highlightWorker","Date","workTime","copyState","getStateBefore","changedLines","oldStyles","highlighted","highlightLine","oldCls","styleClasses","newCls","classes","ischange","processLine","workDelay","runInOp","regLineChange","findStartLine","precise","minindent","minline","lim","innerMode","indented","countColumn","tabSize","save","ensureLineHeights","rect","curWidth","heights","rects","getClientRects","abs","mapFromLineView","map","cache","maps","caches","updateExternalMeasurement","LineView","measureChar","measureCharPrepared","prepareMeasureForLine","findViewForLine","findViewIndex","info","hasHeights","prepared","varHeight","measureCharInner","bogus","rtop","rbottom","collapse","mStart","mEnd","insertLeft","nodeType","isExtendingChar","nullRect","maybeUpdateRectForZooming","rSpan","rbot","mid","screen","logicalXDPI","deviceXDPI","hasBadZoomedRects","scaleX","scaleY","logicalYDPI","deviceYDPI","clearLineMeasurementCacheFor","clearLineMeasurementCache","externalMeasure","pageScrollX","pageXOffset","documentElement","body","pageScrollY","pageYOffset","intoCoordSystem","context","widgetHeight","yOff","lOff","xOff","fromCoordSystem","localBox","lineSpaceBox","preparedMeasure","get","getBidi","partPos","part","order","level","bidiLeft","bidiRight","getBidiPartAt","bidiOther","estimateCoords","PosWithInfo","outside","xRel","coordsChar","y","coordsCharInner","mergedPos","getX","wrongLine","innerOff","adjust","bidi","dist","lineLeft","lineRight","fromX","fromOutside","toX","toOutside","moveVisually","xDiff","step","middle","middleX","measureText","viewChanged","typing","changeObjs","cursorActivityHandlers","cursorActivityCalled","updateMaxLine","scrollToPos","nextOpId","operationGroup","ops","ownsGroup","delayedCallbacks","fireCallbacksForOps","group","callbacks","op","endOperations","endOperation_R1","endOperation_W1","endOperation_R2","endOperation_W2","endOperation_finish","mustUpdate","updatedDisplay","adjustWidthTo","maxScrollLeft","newSelectionNodes","forceScroll","scrollPosIntoView","margin","isCursor","maybeScrollWindow","maybeHiddenMarkers","unhidden","maybeUnhiddenMarkers","methodOp","docMethodOp","visualLineContinued","buildViewArray","nextPos","lendiff","cut","viewCuttingPoint","cutTop","cutBot","arr","oldN","newN","dirty","slowPoll","pollInterval","readInput","fastPoll","changed","missed","hasSelection","isReadOnly","disableInput","fakedLastChar","substring","somethingSelected","inputHasSelection","withOp","charCodeAt","same","inserted","textLines","multiPaste","lastCopied","join","changeEvent","origin","makeChange","electricChars","smartIndent","getModeAt","changeEnd","indentLine","electricInput","contextMenuPending","minimal","selected","hasCopyEvent","getSelection","content","selectInput","readOnly","ensureFocus","drag_","signalDOMEvent","e_stop","prepareCopyCut","getSelections","lineRange","setSelections","onMouseDown","posFromMouse","clickInGutter","eventInWidget","word","findWordAt","captureRightClick","onContextMenu","onScrollWheel","onKeyUp","onKeyDown","onKeyPress","dragDrop","onDragStart","onDrop","lastMiddleDown","selectionStart","selectionEnd","blur","setSize","e_target","getAttribute","liberal","forRect","space","clientX","clientY","colDiff","shiftKey","e_button","leftButtonDown","now","lastDoubleClick","lastClick","contained","modifier","metaKey","ctrlKey","dragAndDrop","contains","leftButtonStartDrag","leftButtonSelect","dragEnd","e2","addNew","extendTo","lastPos","startCol","posCol","findColumn","startSel","ourIndex","scrollIntoView","oldRange","ourRange","sel_mouse","curCount","counter","editorSize","Infinity","move","up","lastSelOrigin","altKey","gutterEvent","prevent","signalfn","mX","mY","lineBox","e_defaultPrevented","childNodes","lastDrop","files","dataTransfer","FileReader","File","read","loadFile","file","reader","onload","change","readAsText","getData","replaceRange","replaceSelection","setData","setDragImage","safari","img","src","presto","_top","gecko","isScroller","delta","wheelEventDelta","dx","dy","target","wheelPixelsPerUnit","pixels","wheelSamples","movedX","movedY","sample","doHandleBinding","bound","dropShift","prevShift","Pass","lookupKeyForEditor","handle","lookupKey","extraKeys","keyMap","dispatchKey","seq","isModifierKey","stopSeq","handleKeyBinding","keyName","motion","handleCharBinding","keyCode","returnValue","handled","lastStoppedKey","showCrossHair","charCode","which","fromCharCode","prepareSelectAllHack","extval","rehide","cssText","oldCSS","scrollPos","selectAll","detectingSelectAll","contextMenuInGutter","reset","resetSelectionOnContextMenu","oldScrollY","scrollY","scrollTo","mouseup","adjustForChange","computeSelAfterChange","offsetPos","nw","computeReplacedSel","hint","oldPrev","newPrev","filterChange","canceled","cancel","ignoreReadOnly","sawReadOnlySpans","removeReadOnlyRanges","makeChangeInner","selAfter","addChangeToHistory","makeChangeSingleDoc","stretchSpansOverChange","rebased","linkedDocs","sharedHist","rebaseHist","makeChangeFromHistory","allowSelectionOnly","event","hist","undone","dest","lastOrigin","pushSelectionToHistory","clearRedo","antiChanges","generation","maxGeneration","filter","historyChangeFromChange","after","mergeOldSpans","shiftDoc","distance","spans","removed","getBetween","makeChangeSingleDocInEditor","updateDoc","recomputeMaxLength","checkWidthStart","full","isWholeLineUpdate","changesHandler","changeHandler","doScroll","innerHeight","phantom","scrollNode","limit","endCoords","calculateScrollPos","startTop","startLeft","x1","y1","x2","y2","snapMargin","screentop","docBottom","atTop","atBottom","newTop","screenleft","screenw","tooWide","addToScrollPos","resolveScrollToPos","cursorScrollMargin","sPos","how","aggressive","indent","curSpace","indentation","curSpaceString","indentUnit","indentString","indentWithTabs","spaceStr","changeLine","changeType","no","deleteNearSelection","compute","kill","toKill","replaced","findPosH","unit","visually","findNextLine","possible","moveOnce","boundToLine","moveLogically","origDir","sawType","helper","getHelper","isWordChar","hitSide","findPosV","pageSize","option","deflt","notOnInit","normalizeKeyName","alt","ctrl","cmd","parts","getKeyMap","shared","markTextShared","TextMarker","clearWhenEmpty","widgetNode","conflictingCollapsedRange","addToHistory","curLine","addMarkedSpan","MarkedSpan","clearHistory","nextMarkerId","title","startStyle","endStyle","linked","isParent","SharedTextMarker","findSharedMarkers","findMarks","parent","copySharedMarkers","mFrom","mTo","subMark","detachSharedMarkers","subMarker","getMarkedSpanFor","span","removeMarkedSpan","attachLine","markedSpansBefore","isInsert","startsBefore","endsAfter","markedSpansAfter","oldFirst","oldLast","sameLine","clearEmptySpans","newMarkers","gapMarkers","gap","getOldSpans","stretched","oldCur","stretchCur","mk","newParts","dfrom","dto","detachMarkedSpans","detachLine","attachMarkedSpans","extraLeft","extraRight","compareCollapsedMarkers","lenDiff","aPos","bPos","fromCmp","toCmp","collapsedSpanAtSide","sps","vis","lineIsHiddenInner","adjustScrollWhenAboveVisible","parentStyle","addLineWidget","LineWidget","insertAt","aboveVisible","updateLine","cleanUpLine","extractLineClasses","lineClass","prop","callBlankLine","blankLine","inner","readToken","stream","token","takeToken","asArray","getObj","copy","current","tokens","StringStream","eol","runMode","lineClasses","forceToEnd","flattenSpans","curStart","curStyle","addModeClass","maxHighlightLength","mName","st","overlay","i_end","opaque","getLineStyles","updateFrontier","startAt","interpretTokenStyle","styleToClassCacheWithMode","styleToClassCache","builder","col","addToken","buildToken","buildTokenSplitSpaces","hasBadBidiRects","buildTokenBadBidi","allowFrontierUpdate","insertLineContent","joinClasses","zeroWidthElement","defaultSpecialCharPlaceholder","toString","special","specialChars","mustWrap","skipped","txt","tabWidth","specialCharPlaceholder","fullStyle","buildCollapsedSpan","ignoreWidget","allText","spanStyle","spanEndStyle","spanStartStyle","nextChange","foundBookmarks","upto","tokenText","wholeLineUpdateBefore","spansFor","linesFor","Line","lastText","lastSpans","nlines","insert","added","LeafChunk","BranchChunk","children","chunkSize","sharedHistOnly","propagate","skip","rel","chunk","child","sz","getLines","lh","bidiOrdering","History","startGen","undoDepth","lastModTime","lastSelTime","lastOp","lastSelOp","histChange","attachLocalSpans","clearSelectionEvents","lastChangeEvent","opId","historyEventDelay","selectionEventCanBeMerged","existing","removeClearedSpans","copyHistoryArray","newGroup","instantiateSel","deepCopy","newChanges","Number","rebaseHistSelSingle","rebaseHistArray","sub","ok","copied","defaultPrevented","srcElement","button","bnd","_handlers","orphanDelayedCallbacks","fireOrphanDelayed","delayed","override","preventDefault","codemirrorIgnore","cursorActivity","eventMixin","ctor","goal","nextTab","spaceStrs","createObj","base","props","inst","Object","create","isWordCharBasic","isEmpty","extendingChars","activeElement","classTest","as","forEachCodeMirror","getElementsByClassName","byClass","globalsRegistered","registerGlobalHandlers","resizeTimer","zwspSupported","badBidiRects","r0","r1","badZoomedRects","normal","fromRange","lineStart","visual","lineStartSmart","firstNonWS","inWS","compareBidiLevel","linedir","moveInLine","byUnit","ie_upto10","ie_11up","qtwebkit","chrome","vendor","mac_geMountainLion","platform","windows","presto_version","flipCtrlCmd","needsH","needsV","sWidth","totalHeight","totalWidth","overlayHack","barMouseDown","native","null","cmpPos","there","wheelDeltaX","wheelDeltaY","detail","HORIZONTAL_AXIS","VERTICAL_AXIS","wheelDelta","wheelEventPixels","constructor","setOption","getDoc","addKeyMap","removeKeyMap","addOverlay","modeSpec","removeOverlay","indentSelection","newRanges","getLineTokens","help","helperType","_global","pred","getStateAfter","defaultTextHeight","defaultCharWidth","gutterID","removeLineWidget","lineInfo","addWidget","vspace","hspace","triggerOnKeyDown","triggerOnKeyPress","triggerOnKeyUp","execCommand","amount","moveH","extendSelectionsBy","rtlMoveVisually","sel_move","deleteH","goalColumn","moveV","goals","startChar","check","toggleOverwrite","hasFocus","getScrollInfo","interpret","refresh","oldHeight","swapDoc","getInputField","getWrapperElement","getScrollerElement","getGutterElement","setValue","detach","attach","disabled","tabIndex","modes","mimeModes","defineMode","dependencies","defineMIME","mime","resolveMode","mfactory","modeObj","modeExtensions","exts","modeProps","skipToEnd","extendMode","properties","defineDocExtension","defineInitHook","registerGlobalHelper","predicate","nstate","a1","a2","singleSelection","killLine","deleteLine","delLineLeft","delWrappedLineLeft","delWrappedLineRight","undo","redo","undoSelection","redoSelection","goDocStart","goDocEnd","goLineStart","goLineStartSmart","goLineEnd","goLineRight","goLineLeft","goLineLeftSmart","goLineUp","goLineDown","goPageUp","goPageDown","goCharLeft","goCharRight","goColumnLeft","goColumnRight","goWordLeft","goGroupRight","goGroupLeft","goWordRight","delCharBefore","delCharAfter","delWordBefore","delWordAfter","delGroupBefore","delGroupAfter","indentAuto","indentMore","indentLess","insertTab","insertSoftTab","spaces","replaceSelections","defaultTab","transposeChars","newlineAndIndent","basic","Left","Right","Up","Down","End","Home","PageUp","PageDown","Delete","Backspace","Shift-Backspace","Tab","Shift-Tab","Enter","Insert","Esc","pcDefault","Ctrl-A","Ctrl-D","Ctrl-Z","Shift-Ctrl-Z","Ctrl-Y","Ctrl-Home","Ctrl-End","Ctrl-Up","Ctrl-Down","Ctrl-Left","Ctrl-Right","Alt-Left","Alt-Right","Ctrl-Backspace","Ctrl-Delete","Ctrl-S","Ctrl-F","Ctrl-G","Shift-Ctrl-G","Shift-Ctrl-F","Shift-Ctrl-R","Ctrl-[","Ctrl-]","Ctrl-U","Shift-Ctrl-U","Alt-U","fallthrough","emacsy","Ctrl-B","Ctrl-P","Ctrl-N","Alt-F","Alt-B","Ctrl-E","Ctrl-V","Shift-Ctrl-V","Ctrl-H","Alt-D","Alt-Backspace","Ctrl-K","Ctrl-T","macDefault","Cmd-A","Cmd-D","Cmd-Z","Shift-Cmd-Z","Cmd-Y","Cmd-Home","Cmd-Up","Cmd-End","Cmd-Down","Cmd-Left","Cmd-Right","Ctrl-Alt-Backspace","Alt-Delete","Cmd-S","Cmd-F","Cmd-G","Shift-Cmd-G","Cmd-Alt-F","Shift-Cmd-Alt-F","Cmd-[","Cmd-]","Cmd-Backspace","Cmd-Delete","Cmd-U","Shift-Cmd-U","normalizeKeyMap","keymap","keyname","keys","keyNames","noShift","altGraphKey","fromTextArea","textarea","getValue","tabindex","placeholder","form","leaveSubmitMethodAlone","realSubmit","submit","wrappedSubmit","getTextArea","toTextArea","lastColumnPos","lastColumnValue","sol","peek","eat","eatWhile","eatSpace","skipTo","backUp","column","pattern","consume","caseInsensitive","cased","str","toLowerCase","hideFirstChars","side","dHeight","oldH","removeInner","insertInner","iterN","spilled","newleaf","maybeSpill","me","sibling","myIndex","used","nextDocId","cleanGeneration","lineSep","getLineNumber","getLineHandleVisualStart","lineCount","setCursor","addSelection","dup","setExtending","getExtending","historySize","markClean","changeGeneration","forceSplit","isClean","gen","getHistory","setHistory","histData","addLineClass","removeLineClass","setBookmark","realOpts","getAllMarks","posFromIndex","indexFromPos","copyHistory","linkedDoc","unlinkDoc","link","splitIds","iterLinkedDocs","getEditor","dontDelegate","method","e_stopPropagation","stopPropagation","cancelBubble","addEventListener","attachEvent","removeEventListener","detachEvent","ms","startIndex","startValue","select","_e","nonASCIISingleCaseWordChar","toUpperCase","createRange","setEnd","setStart","createTextRange","moveToElementText","moveEnd","moveStart","host","div","nl","rt","te","ownerDocument","parentElement","compareEndPoints","oncopy",13,16,17,18,19,20,27,32,33,34,35,36,37,38,39,40,44,45,46,59,61,91,92,93,107,109,127,173,186,187,188,189,190,191,192,219,220,221,222,63232,63233,63234,63235,63272,63273,63275,63276,63277,63302,"charType","lowTypes","arabicTypes","BidiSpan","bidiRE","isNeutral","isStrong","countsAsLeft","countsAsNum","outerType","types","nstart","unshift","version",11,"parserConfig","readRegexp","escaped","inSet","tp","cont","tokenBase","tokenize","tokenString","tokenComment","lastType","isOperatorChar","tokenQuasi","wordRE","known","keywords","propertyIsEnumerable","quote","jsonldMode","isJsonldKeyword","maybeEnd","findFatArrow","fatArrowAt","arrow","depth","sawSomething","bracket","brackets","JSLexical","inScope","varname","v","localVars","cx","vars","parseJS","cc","marked","lexical","combinator","jsonMode","expression","statement","lex","register","inList","globalVars","pushcontext","defaultVars","popcontext","pushlex","poplex","expect","wanted","exp","vardef","block","maybeelse","functiondef","forspec","maybelabel","funarg","afterModule","afterExport","afterImport","expressionInner","expressionNoComma","noComma","arrowBodyNoComma","arrowBody","commasep","maybeop","maybeoperatorNoComma","maybeoperatorComma","atomicTypes","maybeexpressionNoComma","maybeexpression","comprehension","arrayLiteral","contCommasep","objprop","quasi","expr","property","continueQuasi","getterSetter","afterprop","what","proceed","maybetype","isTS","typedef","maybeAssign","vardefCont","proppattern","_type","forspec1","forspec2","formaybeinof","forspec3","classNameAfter","classBody","classGetterSetter","maybeFrom","importSpec","maybeArrayComprehension","isContinuedStatement","textAfter","statementIndent","jsonld","json","typescript","wordCharacters","kw","A","B","C","operator","atom","jsKeywords","if","while","with","else","do","try","finally","return","break","continue","new","delete","throw","debugger","var","const","let","function","catch","for","switch","case","default","in","typeof","instanceof","true","false","class","super","yield","export","import","extends","tsKeywords","interface","public","private","protected","static","number","bool","any","variable","regexp","jsonld-keyword","basecolumn","firstChar","closing","doubleIndentSwitch","blockCommentStart","blockCommentEnd","lineComment",12,"inText","chain","parser","inBlock","doctype","inTag","baseState","tagName","tagStart","inAttribute","stringStartCol","closure","isInAttribute","terminator","Context","startOfLine","Kludges","doNotIndent","noIndent","popContext","maybePopContext","nextTagName","parentTagName","contextGrabbers","tagNameState","closeTagNameState","setStyle","attrState","implicitlyClosed","closeState","closeStateErr","_stream","attrEqState","autoSelfClosers","attrValueState","allowMissing","attrContinuedState","allowUnquoted","multilineTagIndentFactor","multilineTagIndentPastTag","htmlMode","area","br","command","embed","frame","hr","keygen","meta","param","track","wbr","menuitem","dd","li","optgroup","rp","tbody","td","tfoot","tr","dt","address","article","aside","blockquote","dl","fieldset","footer","h1","h2","h3","h4","h5","h6","header","hgroup","menu","nav","ol","section","table","ul","thead","caseFold","alignCDATA","fullLine","tagAfter","grabbers","configuration","d3_documentElement","d3_window","defaultView","d3_ascending","d3_number","d3_numeric","d3_bisector","compare","lo","hi","d3_zipLength","d3_range_integerScale","d3_class","defineProperty","enumerable","d3_Map","_","d3_map_escape","d3_map_proto","d3_map_zero","d3_map_unescape","d3_map_has","d3_map_remove","d3_map_keys","d3_map_size","d3_map_empty","d3_Set","d3_identity","d3_rebind","d3_vendorSymbol","d3_vendorPrefixes","prefixName","d3_noop","d3_dispatch","d3_dispatch_event","dispatch","z","listenerByName","d3_eventPreventDefault","d3","d3_eventSource","sourceEvent","d3_eventDispatch","of","thiz","argumentz","e1","e0","d3_selection","groups","d3_subclass","d3_selectionPrototype","d3_selection_selector","selector","d3_select","d3_selection_selectorAll","d3_selectAll","d3_selection_attr","attrNull","removeAttribute","attrNullNS","removeAttributeNS","local","attrConstant","attrConstantNS","setAttributeNS","attrFunction","attrFunctionNS","ns","qualify","d3_collapse","trim","d3_selection_classedRe","requote","d3_selection_classes","d3_selection_classed","classedConstant","classedFunction","d3_selection_classedName","classList","d3_selection_style","priority","styleNull","removeProperty","styleConstant","setProperty","styleFunction","d3_selection_property","propertyNull","propertyConstant","propertyFunction","d3_selection_creator","namespace","namespaceURI","createElementNS","createNS","d3_selectionRemove","d3_selection_dataNode","__data__","d3_selection_filter","d3_selectMatches","d3_selection_sortComparator","comparator","d3_selection_each","d3_selection_enter","d3_selection_enterPrototype","d3_selection_enterInsertBefore","enter","i0","j0","d3_selection_on","capture","onRemove","onAdd","d3_array","removeAll","d3_selection_onListener","d3_selection_onFilters","d3_selection_onFilter","related","relatedTarget","compareDocumentPosition","d3_event_dragSuppress","d3_event_dragId","click","d3_event_dragSelect","suppressClick","d3_mousePoint","changedTouches","svg","ownerSVGElement","createSVGPoint","point","d3_mouse_bug44083","scrollX","ctm","getScreenCTM","pageY","matrixTransform","inverse","clientTop","d3_behavior_dragTouchId","identifier","d3_sgn","d3_cross2d","d3_acos","π","acos","d3_asin","halfπ","asin","d3_sinh","d3_cosh","d3_tanh","d3_haversin","sin","d3_color","d3_hsl","d3_rgb_parse","d3_rgb_hsl","d3_hsl_rgb","m1","m2","vv","d3_rgb","d3_hcl","d3_lab","d3_lab_hcl","d3_rgb_lab","rgb","d3_hcl_lab","cos","d3_radians","d3_lab_rgb","d3_lab_xyz","d3_lab_X","d3_lab_Y","d3_lab_Z","d3_xyz_rgb","atan2","d3_degrees","sqrt","d3_xyz_lab","pow","d3_rgbNumber","d3_rgbString","d3_rgb_hex","format","hsl","color","d3_rgb_parseNumber","d3_rgb_names","d3_rgb_xyz","d3_functor","d3_xhrType","response","url","mimeType","d3_xhr","respond","status","request","d3_xhrHasResponse","xhr","load","XMLHttpRequest","responseType","XDomainRequest","onerror","onreadystatechange","readyState","onprogress","progress","forEach","send","setRequestHeader","overrideMimeType","beforesend","abort","rebind","d3_xhr_fixCallback","responseText","d3_timer_step","d3_timer_mark","delay","d3_timer_sweep","isFinite","d3_timer_timeout","d3_timer_interval","d3_timer_frame","d3_timer_active","d3_timer_queueHead","t0","t1","d3_timer_queueTail","d3_format_precision","log","LN10","d3_formatPrefix","scale","symbol","d3_locale_numberFormat","locale","locale_decimal","decimal","locale_thousands","thousands","locale_grouping","grouping","locale_currency","currency","formatGroup","reverse","specifier","d3_format_re","fill","sign","zfill","comma","precision","prefix","suffix","exponent","d3_format_types","d3_format_typeDefault","zcomma","fullSuffix","negative","formatPrefix","d3_date_utc","UTC","d3_time_interval","date","d0","d1","d3_date","times","range_utc","utc","d3_time_interval_utc","d3_locale_timeFormat","d3_time_format","template","d3_time_formatPads","d3_time_formats","H","L","Z","d3_time_parse","localZ","setFullYear","W","getDay","U","setHours","d3_time_parsers","d3_time_parseWeekdayAbbrev","d3_time_dayAbbrevRe","d3_time_dayAbbrevLookup","d3_time_parseWeekday","d3_time_dayRe","d3_time_dayLookup","d3_time_parseMonthAbbrev","d3_time_monthAbbrevRe","d3_time_monthAbbrevLookup","d3_time_parseMonth","d3_time_monthRe","d3_time_monthLookup","d3_time_parseLocaleFull","d3_time_parseLocaleDate","d3_time_parseLocaleTime","X","d3_time_parseAmPm","d3_time_periodLookup","locale_dateTime","dateTime","locale_date","locale_time","locale_periods","periods","locale_days","days","locale_shortDays","shortDays","locale_months","months","locale_shortMonths","shortMonths","multi","d3_time_formatMulti","d3_time_formatRe","d3_time_formatLookup","getMonth","d3_time_formatPad","getDate","getHours","d3_time","dayOfYear","getMilliseconds","getMinutes","getSeconds","sundayOfYear","mondayOfYear","getFullYear","Y","d3_time_zone","%","d3_time_parseDay","d3_time_parseHour24","d3_time_parseDayOfYear","d3_time_parseMilliseconds","d3_time_parseMonthNumber","d3_time_parseMinutes","d3_time_parseSeconds","d3_time_parseWeekNumberSunday","d3_time_parseWeekdayNumber","d3_time_parseWeekNumberMonday","d3_time_parseYear","d3_time_parseFullYear","d3_time_parseZone","d3_time_parseLiteralPercent","names","d3_time_numberRe","d3_time_expandYear","getTimezoneOffset","zs","zh","zm","d3_time_percentRe","formats","d3_adder","d3_adderSum","bv","av","d3_geo_streamGeometry","geometry","d3_geo_streamGeometryType","d3_geo_streamLine","coordinates","closed","coordinate","d3_geo_streamPolygon","polygonStart","polygonEnd","d3_geo_areaRingStart","nextPoint","λ","φ","dλ","λ0","sdλ","adλ","cosφ","sinφ","sinφ0","cosφ0","d3_geo_areaRingSum","λ00","φ00","d3_geo_area","d3_geo_cartesian","spherical","d3_geo_cartesianDot","d3_geo_cartesianCross","d3_geo_cartesianAdd","d3_geo_cartesianScale","vector","d3_geo_cartesianNormalize","d3_geo_spherical","cartesian","d3_geo_sphericalEqual","ε","d3_geo_centroidPoint","d3_geo_centroidPointXYZ","d3_geo_centroidW0","d3_geo_centroidX0","d3_geo_centroidY0","d3_geo_centroidZ0","d3_geo_centroidLineStart","y0","z0","x0","d3_geo_centroidW1","d3_geo_centroidX1","d3_geo_centroidY1","d3_geo_centroidZ1","d3_geo_centroid","d3_geo_centroidLineEnd","d3_geo_centroidRingStart","cy","cz","d3_geo_centroidX2","d3_geo_centroidY2","d3_geo_centroidZ2","d3_geo_compose","compose","invert","d3_true","d3_geo_clipPolygon","segments","clipStartInside","interpolate","subject","clip","segment","p0","p1","d3_geo_clipPolygonIntersection","d3_geo_clipPolygonLinkCircular","points","isSubject","d3_geo_clip","pointVisible","clipStart","rotate","pointLine","pointRing","ring","ringListener","ringStart","ringEnd","clean","ringSegments","buffer","polygon","polygonStarted","d3_geo_clipSegmentLength1","rotatedClipStart","merge","d3_geo_pointInPolygon","d3_geo_clipSort","sphere","d3_geo_clipBufferListener","rejoin","d3_geo_clipAntimeridianLine","φ0","sλ0","λ1","φ1","sλ1","d3_geo_clipAntimeridianIntersect","cosφ1","sinλ0_λ1","atan","d3_geo_clipAntimeridianInterpolate","direction","meridian","parallel","meridianNormal","polarAngle","winding","point0","antimeridian","τ","arc","intersection","φarc","d3_geo_clipCircle","radius","cr","c0","v0","v00","point2","point1","smallRadius","intersect","notHemisphere","two","pa","pb","n1","n2","n2n2","n1n2","determinant","c1","n1xn2","uu","t2","q","δλ","polar","q1","d3_geo_circleInterpolate","d3_geom_clipLine","ax","ay","bx","by","d3_geo_clipExtent","corner","comparePoints","ca","insidePolygon","wn","linePoint","v_","x_","y_","x__","y__","v__","bufferListener","d3_geo_clipExtentMAX","listener_","inside","d3_geo_conic","projectAt","d3_geo_projectionMutator","parallels","d3_geo_conicEqualArea","ρ","ρ0","ρ0_y","d3_geo_pathAreaRingStart","d3_geo_pathAreaPolygon","x00","y00","d3_geo_pathArea","d3_geo_pathBoundsPoint","d3_geo_pathBoundsX0","d3_geo_pathBoundsX1","d3_geo_pathBoundsY0","d3_geo_pathBoundsY1","d3_geo_pathBuffer","pointCircle","pointLineStart","lineEndPolygon","d3_geo_pathBufferCircle","pointRadius","d3_geo_pathCentroidPoint","d3_geo_pathCentroidLineStart","d3_geo_pathCentroid","d3_geo_pathCentroidLineEnd","d3_geo_pathCentroidRingStart","d3_geo_pathContext","moveTo","lineTo","closePath","d3_geo_resample","project","resample","maxDepth","resampleRecursive","resampleNone","d3_geo_transformPoint","resampleLineTo","a0","b0","ringPoint","a00","b00","c00","b1","d2","δ2","φ2","λ2","dx2","dy2","dz","cosMinDistance","d3_geo_pathProjectStream","d3_geo_projectionRadians","d3_geo_transform","d3_geo_projection","projection","projectRotate","δx","δy","d3_geo_rotation","δφ","δγ","center","invalidate","valid","projectResample","preclip","d3_geo_clipAntimeridian","postclip","clipAngle","clipExtent","translate","d3_geo_equirectangular","d3_geo_identityRotation","d3_geo_rotationλ","d3_geo_rotationφγ","d3_geo_forwardRotationλ","rotation","cosδφ","sinδφ","cosδγ","sinδγ","sr","d3_geo_circleAngle","angle","PI","d3_geo_graticuleX","d3_geo_graticuleY","d3_source","d3_target","d3_geo_interpolate","cy0","sy0","cy1","sy1","kx0","ky0","kx1","ky1","d3_geo_lengthLineStart","cosΔλ","d3_geo_lengthSum","d3_geo_length","d3_geo_azimuthal","azimuthal","cosλ","sinc","cosc","d3_geo_conicConformal","F","tan","d3_geo_mercator","d3_geo_conicEquidistant","G","d3_geo_mercatorProjection","clipAuto","d3_geo_transverseMercator","d3_geom_pointX","d3_geom_pointY","d3_geom_hullUpper","hull","hs","d3_geom_hullOrder","d3_geom_polygonInside","d3_geom_polygonIntersect","x3","x21","x43","y3","y21","y43","ua","d3_geom_polygonClosed","d3_geom_voronoiBeach","d3_geom_voronoiRedBlackNode","edge","site","circle","d3_geom_voronoiCreateBeach","beach","d3_geom_voronoiBeachPool","d3_geom_voronoiDetachBeach","d3_geom_voronoiDetachCircle","d3_geom_voronoiBeaches","d3_geom_voronoiRemoveBeach","vertex","previous","P","N","disappearing","lArc","rArc","iArc","nArcs","d3_geom_voronoiSetEdgeEnd","d3_geom_voronoiCreateEdge","d3_geom_voronoiAttachCircle","d3_geom_voronoiAddBeach","dxl","dxr","directrix","d3_geom_voronoiLeftBreakPoint","d3_geom_voronoiRightBreakPoint","R","newArc","lSite","rSite","hb","hc","rfocx","rfocy","pby2","lfocx","lfocy","plby2","hl","aby2","d3_geom_voronoiCell","edges","d3_geom_voronoiCloseCells","extent","cell","iHalfEdge","halfEdges","nHalfEdges","cells","d3_geom_voronoiCells","iCell","prepare","d3_geom_voronoiHalfEdge","d3_geom_voronoiCreateBorderEdge","d3_geom_voronoiHalfEdgeOrder","d3_geom_voronoiCircle","cSite","ε2","ha","d3_geom_voronoiCirclePool","d3_geom_voronoiCircles","d3_geom_voronoiFirstCircle","d3_geom_voronoiClipEdges","d3_geom_voronoiEdges","d3_geom_voronoiConnectEdge","vb","fm","fb","va","lx","ly","rx","ry","fx","fy","d3_geom_voronoiEdge","d3_geom_voronoiRedBlackTree","d3_geom_voronoiRedBlackRotateLeft","tree","d3_geom_voronoiRedBlackRotateRight","d3_geom_voronoiRedBlackFirst","d3_geom_voronoi","sites","bbox","d3_geom_voronoiVertexOrder","diagram","d3_geom_voronoiTriangleArea","d3_geom_quadtreeCompatX","d3_geom_quadtreeCompatY","d3_geom_quadtreeNode","leaf","nodes","d3_geom_quadtreeVisit","sx","sy","d3_geom_quadtreeFind","root","closestPoint","minDistance2","distance2","xm","ym","below","d3_interpolateRgb","ar","ag","ab","bg","bb","d3_interpolateObject","d3_interpolate","d3_interpolateNumber","d3_interpolateString","am","bm","bs","bi","d3_interpolate_numberA","d3_interpolate_numberB","interpolators","d3_interpolateArray","na","nb","n0","d3_ease_clamp","d3_ease_reverse","d3_ease_reflect","d3_ease_quad","d3_ease_cubic","d3_ease_cubicInOut","t3","d3_ease_poly","d3_ease_sin","d3_ease_exp","d3_ease_circle","d3_ease_elastic","d3_ease_back","d3_ease_bounce","d3_interpolateHcl","hcl","ah","ac","al","bh","bc","bl","d3_interpolateHsl","d3_interpolateLab","lab","aa","ba","d3_interpolateRound","d3_transform","kx","d3_transformNormalize","kz","d3_transformDot","ky","d3_transformCombine","skew","d3_interpolateTransform","transform","ta","ra","rb","wa","wb","ka","kb","d3_uninterpolateNumber","d3_uninterpolateClamp","d3_layout_bundlePath","lca","d3_layout_bundleLeastCommonAncestor","d3_layout_bundleAncestors","ancestors","aNodes","bNodes","aNode","bNode","sharedNode","d3_layout_forceDragstart","fixed","d3_layout_forceDragend","d3_layout_forceMouseover","px","py","d3_layout_forceMouseout","d3_layout_forceAccumulate","quad","alpha","charges","charge","random","pointCharge","d3_layout_hierarchyRebind","hierarchy","links","d3_layout_hierarchyLinks","d3_layout_hierarchyVisitBefore","d3_layout_hierarchyVisitAfter","nodes2","d3_layout_hierarchyChildren","d3_layout_hierarchyValue","d3_layout_hierarchySort","d3_layout_stackX","d3_layout_stackY","d3_layout_stackOut","d3_layout_stackOrderDefault","d3_layout_stackOffsetZero","d3_layout_stackMaxIndex","d3_layout_stackReduceSum","reduce","d3_layout_stackSum","d3_layout_histogramBinSturges","values","d3_layout_histogramBinFixed","LN2","d3_layout_histogramRange","d3_layout_packSort","d3_layout_packInsert","_pack_next","_pack_prev","d3_layout_packSplice","d3_layout_packIntersects","dr","d3_layout_packSiblings","xMin","xMax","yMin","yMax","d3_layout_packLink","d3_layout_packPlace","isect","s1","s2","d3_layout_packUnlink","d3_layout_packTransform","db","da","dc","d3_layout_treeSeparation","d3_layout_treeLeft","d3_layout_treeRight","d3_layout_treeMove","wm","wp","d3_layout_treeShift","d3_layout_treeAncestor","vim","ancestor","d3_layout_clusterY","d3_layout_clusterX","d3_layout_clusterLeft","d3_layout_clusterRight","d3_layout_treemapPadNull","d3_layout_treemapPad","d3_scaleExtent","domain","stop","d3_scaleRange","rangeExtent","d3_scale_bilinear","uninterpolate","d3_scale_nice","nice","i1","d3_scale_niceStep","d3_scale_niceIdentity","d3_scale_polylinear","bisect","d3_scale_linear","clamp","rescale","linear","rangeRound","ticks","d3_scale_linearTicks","tickFormat","d3_scale_linearTickFormat","d3_scale_linearNice","d3_scale_linearRebind","d3_scale_linearTickRange","err","d3_scale_linearPrecision","d3_scale_linearFormatPrecision","d3_scale_linearFormatSignificant","d3_scale_log","positive","niced","d3_scale_logNiceNegative","d3_scale_logFormat","d3_scale_pow","powp","d3_scale_powPow","powb","d3_scale_ordinal","ranger","steps","rangeBand","xi","rangePoints","rangeRoundPoints","rangeBands","outerPadding","rangeRoundBands","d3_scale_quantile","thresholds","quantile","quantiles","invertExtent","d3_scale_quantize","d3_scale_threshold","d3_scale_identity","identity","d3_zero","d3_svg_arcInnerRadius","innerRadius","d3_svg_arcOuterRadius","outerRadius","d3_svg_arcStartAngle","startAngle","d3_svg_arcEndAngle","endAngle","d3_svg_arcPadAngle","padAngle","d3_svg_arcSweep","d3_svg_arcCornerTangents","rc","cw","x01","y01","oy","D","cx0","cx1","dx0","dy0","dx1","dy1","d3_svg_line","tension","defined","d3_svg_lineLinear","interpolateKey","d3_svg_lineInterpolators","d3_svg_lineLinearClosed","d3_svg_lineStep","path","d3_svg_lineStepBefore","d3_svg_lineStepAfter","d3_svg_lineCardinalOpen","d3_svg_lineHermite","d3_svg_lineCardinalTangents","d3_svg_lineCardinalClosed","d3_svg_lineCardinal","tangents","pi","lp","p2","d3_svg_lineBasis","d3_svg_lineDot4","d3_svg_lineBasisBezier3","d3_svg_lineBasisBezier","d3_svg_lineBasisOpen","d3_svg_lineBasisClosed","d3_svg_lineBundle","d3_svg_lineBasisBezier1","d3_svg_lineBasisBezier2","d3_svg_lineSlope","d3_svg_lineFiniteDifferences","d3_svg_lineMonotoneTangents","d3_svg_lineMonotone","d3_svg_lineRadial","d3_svg_area","points1","interpolateReverse","points0","fx0","fy0","fx1","fy1","d3_svg_chordRadius","d3_svg_diagonalProjection","d3_svg_diagonalRadialProjection","d3_svg_symbolSize","d3_svg_symbolType","d3_svg_symbolCircle","d3_selection_interruptNS","lock","active","interrupt","d3_transition","d3_transitionPrototype","d3_transition_tween","tween","d3_transition_text","textContent","d3_transitionNamespace","d3_transitionNode","inherit","transition","duration","ease","timer","elapsed","tweened","tick","d3_svg_axisX","d3_svg_axisY","d3_time_formatIsoNative","toISOString","d3_time_scale","methods","tickMethod","d3_time_scaleSteps","year","d3_time_scaleMilliseconds","d3_time_scaleDate","interval","d3_json","JSON","d3_html","d3_document","selectNode","createContextualFragment","d3_arraySlice","d3_element_prototype","Element","d3_element_setAttribute","d3_element_setAttributeNS","d3_style_prototype","CSSStyleDeclaration","d3_style_setProperty","ascending","descending","sum","mean","median","numbers","variance","deviation","d3_bisect","bisectLeft","bisectRight","bisector","shuffle","permute","indexes","permutes","pairs","zip","zips","transpose","matrix","isArray","nest","mapType","rollup","sortValues","keyValue","setter","valuesByKey","sortKey","sortKeys","behavior","d3_requote_re","__proto__","querySelector","querySelectorAll","d3_selectMatcher","matches","Sizzle","matchesSelector","subgroup","subnode","subgroups","d3_nsPrefix","xhtml","xlink","xml","xmlns","getAttributeNS","classed","getPropertyValue","html","innerHTML","groupData","nodeData","updateNodes","enterNodes","exitNodes","nodeByKeyValue","keyValues","datum","upgroup","mouseenter","mouseleave","mouse","touch","mousedown","touchstart","dragstart","moved","position1","dragId","position0","dragged","dragOffset","ended","dragSubject","dragName","dragRestore","that","τε","SQRT2","ρ2","ρ4","interpolateZoom","coshr0","w0","ux0","uy0","ux1","uy1","w1","zoom","mousedowned","d3_behavior_zoomWheel","mousewheeled","dblclicked","touchstarted","location","scaleTo","scaleExtent","translateTo","zoomTo","__chart__","center0","zoomstarted","zooming","zoomed","zoomended","location0","mousemove","d3_selection_interrupt","relocate","scale0","locations0","started","touchmove","touchend","targets","touchtime","distance0","l0","l1","distance1","scale1","zoomName","mousewheelTimer","translate0","d3_behavior_zoomDelta","d3_behavior_zoomInfinity","deltaY","deltaMode","view1","d3_transitionInheritId","d3_hslPrototype","brighter","darker","d3_hclPrototype","d3_lab_K","d3_labPrototype","d3_rgbPrototype","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","functor","dsv","row","typedResponse","formatRow","formatValue","reFormat","delimiterCode","parseRows","Function","stringify","EOF","EOL","rows","formatRows","fieldSet","fields","field","tsv","then","d3_formatPrefixes","toPrecision","toExponential","toFixed","getUTCDate","getUTCDay","getUTCFullYear","getUTCHours","getUTCMilliseconds","getUTCMinutes","getUTCMonth","getUTCSeconds","getTime","valueOf","setDate","d3_time_prototype","setUTCDate","setDay","setUTCDay","setUTCFullYear","setUTCHours","setMilliseconds","setUTCMilliseconds","setMinutes","setUTCMinutes","setMonth","setUTCMonth","setSeconds","setUTCSeconds","setTime","day","years","week","sunday","weeks","weekOfYear","-","0","numberFormat","timeFormat","d3_locale_enUS","geo","d3_adderTemp","d3_geo_streamObjectType","Feature","feature","FeatureCollection","features","Sphere","Point","MultiPoint","LineString","MultiLineString","Polygon","MultiPolygon","GeometryCollection","geometries","d3_geo_areaSum","bounds","equatorial","inflection","λ_","λi","φi","dλSum","λ__","φ__","compareRanges","withinRange","best","centroid","conicEqualArea","raw","albers","albersUsa","lower48Point","alaskaPoint","hawaiiPoint","lower48","alaska","hawaii","pointStream","lower48Stream","alaskaStream","hawaiiStream","d3_geo_pathAreaSum","d3_geo_pathBounds","contextStream","cacheStream","projectStream","projectionMutator","equirectangular","Δλ","sinΔλ","sinφ1","graticule","X0","DX","X1","Y0","DY","Y1","outline","majorExtent","minorExtent","majorStep","minorStep","greatArc","source_","target_","d3_geo_azimuthalEqualArea","cosλcosφ","azimuthalEqualArea","d3_geo_azimuthalEquidistant","azimuthalEquidistant","conicConformal","conicEquidistant","d3_geo_gnomonic","gnomonic","mercator","d3_geo_orthographic","orthographic","d3_geo_stereographic","stereographic","transverseMercator","geom","vertices","flippedPoints","upper","lower","skipLeft","skipRight","d3_geom_polygonPrototype","grandpa","uncle","voronoi","polygons","d3_geom_voronoiClipExtent","triangles","s0","delaunay","quadtree","nx","ny","insertChild","nPoint","xs","ys","x1_","y1_","x2_","y2_","compat","visit","interpolateRgb","interpolateObject","interpolateNumber","interpolateString","interpolateArray","d3_ease_default","d3_ease","poly","cubic","elastic","back","bounce","d3_ease_mode","in-out","out-in","interpolateHcl","interpolateHsl","interpolateLab","interpolateRound","baseVal","consolidate","d3_transformIdentity","interpolateTransform","layout","bundle","paths","chord","relayout","groupSums","groupIndex","subgroupIndex","chords","sortGroups","sortSubgroups","di","dj","subindex","sortChords","resort","repulse","dw","dn","theta2","chargeDistance2","dragmove","resume","distances","strengths","friction","linkDistance","d3_layout_forceLinkDistance","linkStrength","d3_layout_forceLinkStrength","d3_layout_forceChargeDistance2","gravity","weight","chargeDistance","theta","dimension","neighbors","candidates","childs","revalue","partition","pie","arcs","d3_layout_pieSortByValue","series","orders","offsets","d3_layout_stackOrders","d3_layout_stackOffsets","inside-out","sums","tops","bottoms","silhouette","wiggle","s3","o0","expand","zero","histogram","bin","bins","valuer","binner","frequency","pack","root0","root1","wrapTree","firstWalk","secondWalk","nodeSize","sizeNode","tx","separation","node1","queue","siblings","midpoint","apportion","vip","vop","vom","sip","sop","sim","som","cluster","previousNode","treemap","squarify","score","pad","remaining","worst","stickify","rmax","rmin","ratio","stickies","sticky","padFunction","padConstant","µ","σ","logNormal","bates","irwinHall","ordinal","category10","d3_category10","category20","d3_category20","category20b","d3_category20b","category20c","d3_category20c","quantize","threshold","circleSegment","ap","padRadius","d3_svg_arcAuto","h0","cornerRadius","oc","kc","lc","rc1","t30","t12","rc0","t03","t21","linear-closed","step-before","step-after","basis","basis-open","basis-closed","cardinal","cardinal-open","cardinal-closed","monotone","radial","curve","diagonal","p3","projection_","d3_svg_symbols","cross","diamond","d3_svg_symbolTan30","square","triangle-down","d3_svg_symbolSqrt3","triangle-up","symbolTypes","d3_transitionId","d3_transitionInherit","subnodes","nameNS","attrTween","attrTweenNS","styleString","styleTween","inheritId","id0","id1","tickTransform","tickValues","tickArguments_","tickFormat_","tickEnter","tickExit","tickUpdate","tickSpacing","innerTickSize","tickPadding","pathUpdate","lineEnter","lineUpdate","textEnter","textUpdate","orient","outerTickSize","d3_svg_axisDefaultOrient","d3_svg_axisOrients","tickSize","tickSubdivide","brush","brushstart","resize","resizes","d3_svg_brushCursor","gUpdate","backgroundUpdate","redrawX","redrawY","redraw","xExtent","yExtent","keydown","dragging","keyup","brushmove","resizingX","move1","resizingY","event_","yClamp","xClamp","yExtentDomain","xExtentDomain","brushend","eventTarget","resizing","ex","ey","d3_svg_brushResizes","extent1","extent0","yi","ne","se","sw","d3_time_formatUtc","d3_time_formatIso","iso","second","seconds","minute","minutes","hour","timezone","hours","month","d3_time_scaleLocalMethods","d3_time_scaleLocalFormat","d3_time_scaleUtcMethods","d3_time_scaleUtcFormat","responseXML",14,"factory","jQuery","dataTable","_fnHungarianMap","newKey","hungarian","_hungarianMap","_fnCamelToHungarian","user","hungarianKey","_fnLanguageCompat","lang","DataTable","oLanguage","zeroRecords","sZeroRecords","sEmptyTable","_fnMap","sLoadingRecords","sInfoThousands","sThousands","sDecimal","_addNumericSort","_fnCompatOpts","_fnCompatMap","searchCols","aoSearchCols","ien","models","oSearch","_fnCompatCols","dataSort","aDataSort","_fnBrowserDetect","settings","browser","oBrowser","overflow","appendTo","bScrollOversize","bScrollbarLeft","_fnReduce","isSet","_fnAddColumn","oSettings","nTh","oDefaults","iCol","aoColumns","oCol","oColumn","sTitle","mData","idx","aoPreSearchCols","_fnColumnOptions","oOptions","oClasses","sWidthOrig","mDataProp","sType","_sManualType","sClass","iDataSort","mDataSrc","_fnGetObjectDataFn","mRender","attrTest","_bAttrSrc","isPlainObject","fnGetData","rowData","innerData","fnSetData","_fnSetObjectDataFn","_rowReadObject","oFeatures","bSort","bSortable","sSortableNone","bAsc","inArray","asSorting","bDesc","sSortingClass","sSortableAsc","sSortingClassJUI","sSortJUIAscAllowed","sSortableDesc","sSortJUIDescAllowed","sSortable","sSortJUI","_fnAdjustColumnSizing","bAutoWidth","columns","_fnCalculateColumnWidths","iLen","oScroll","sY","sX","_fnScrollDraw","_fnCallbackFire","_fnVisibleToColumnIndex","iMatch","aiVis","_fnGetColumns","_fnColumnIndexToVisible","iPos","_fnVisbleColumns","sParam","_fnColumnTypes","jen","ken","detectedType","aoData","detect","_fnGetCellData","_fnApplyColumnDefs","aoColDefs","aoCols","jLen","kLen","def","aTargets","hasClass","_fnAddData","aDataIn","nTr","anTds","iRow","oData","oRow","_aData","_fnSetCellData","aiDisplayMaster","bDeferRender","_fnCreateTr","_fnAddTr","trs","el","_fnGetRowElements","_fnNodeToDataIndex","_DT_RowIndex","_fnNodeToColumnIndex","anCells","rowIdx","colIdx","draw","iDraw","defaultContent","sDefaultContent","cellData","iDrawError","_fnLog","_fnSplitObjNotation","mSource","fetchData","arrayNotation","funcNotation","innerSrc","__reArray","__reFn","aLast","_fnGetDataMaster","_pluck","_fnClearTable","aiDisplay","_fnDeleteIndex","iTarget","iTargetIndex","_fnInvalidate","cellWrite","_aSortData","_aFilterData","cols","_fnRowAttributes","contents","tds","objectRead","cellProcess","_setter","nodeName","nTrIn","nTd","sCellType","bVisible","fnCreatedCell","oInstance","DT_RowId","DT_RowClass","__rowc","_unique","DT_RowAttr","DT_RowData","_fnBuildHead","nTHead","nTFoot","createHeader","iTabIndex","sTableId","_fnSortAttachListener","_fnRenderer","_fnDetectHeader","aoHeader","sHeaderTH","sFooterTH","aoFooter","nTf","_fnDrawHead","aoSource","bIncludeHidden","nLocalTr","iRowspan","iColspan","aoLocal","aApplied","iColumns","_fnDraw","aPreDraw","anRows","iRowCount","asStripeClasses","iStripes","oLang","aoOpenRows","iInitDisplayStart","bServerSide","_fnDataSource","bDrawing","_iDisplayStart","fnRecordsDisplay","iDisplayStart","iDisplayEnd","fnDisplayEnd","bDeferLoading","_fnProcessingDisplay","bDestroying","_fnAjaxUpdate","iStart","iEnd","iDataIndex","nRow","sStripe","_sRowStripe","sZero","fnRecordsTotal","valign","colSpan","sRowEmpty","nTBody","bSorted","bFiltered","_fnReDraw","holdPosition","bFilter","_fnSort","_fnFilterComplete","oPreviousSearch","_drawHold","_fnAddOptionsHtml","nTable","holding","sWrapper","sNoFooter","nHolding","nTableWrapper","nTableReinsertBefore","featureNode","cOption","nNewNode","cNext","sAttr","aDom","sDom","sJUIHeader","sJUIFooter","aSplit","bPaginate","bLengthChange","_fnFeatureHtmlLength","_fnFeatureHtmlFilter","bProcessing","_fnFeatureHtmlProcessing","_fnFeatureHtmlTable","bInfo","_fnFeatureHtmlInfo","_fnFeatureHtmlPaginate","aoFeatures","cFeature","fnInit","aanFeatures","replaceWith","aLayout","nThead","nCell","iColShifted","iColumn","bUnique","nTrs","fnShiftCol","unique","_fnGetUniqueThs","nHeader","aReturn","bSortCellsTop","_fnBuildAjax","rbracket","ajaxData","ajax","instance","jqXHR","newData","baseAjax","success","sError","dataType","sServerMethod","thrown","oAjaxData","fnServerData","sAjaxSource","bAjaxDataGet","_fnAjaxParameters","_fnAjaxUpdateDraw","dataProp","columnSearch","columnCount","preSearch","preColSearch","_fnSortFlatten","displayStart","displayLength","_iDisplayLength","sSearch","regex","bRegex","sName","searchable","bSearchable","orderable","legacy","modern","_fnAjaxDataSrc","recordsTotal","recordsFiltered","_iRecordsTotal","_iRecordsDisplay","_bInitComplete","_fnInitComplete","dataSrc","sAjaxDataProp","aaData","tableId","language","previousSearch","sFilterInput","sFilter","searchFn","bSmart","bCaseInsensitive","searchDelay","jqFilter","sSearchPlaceholder","_fnThrottle","ev","oInput","iForce","oPrevSearch","aoPrevSearch","fnSaveFilter","oFilter","fnRegex","bEscapeRegex","_fnFilter","_fnFilterColumn","_fnFilterCustom","filters","displayRows","searchStr","smart","rpSearch","_fnFilterCreateSearch","invalidated","prevSearch","displayMaster","_fnFilterData","_sFilterRow","_fnEscapeRegex","sVal","_re_escape_regex","filterData","fomatters","wasInvalidated","__filter_div","__filter_div_textContent","innerText","_fnSearchToCamel","_fnSearchToHung","tid","sInfo","aoDrawCallback","_fnUpdateInfo","sInfoEmpty","sInfoFiltered","sInfoPostFix","_fnInfoMacros","fnInfoCallback","formatter","fnFormatNumber","all","_fnInitialise","iAjaxStart","bInitialised","_fnStringToCss","aData","_fnLengthChange","_fnLengthOverflow","aLengthMenu","lengths","aria-controls","sLengthSelect","Option","sLength","sLengthMenu","outerHTML","sPaginationType","plugin","pager","sPaging","visRecords","page","pages","buttons","fnUpdate","_fnPageChange","action","records","sProcessing","show","caption","captionSide","_captionSide","headerClone","footerClone","_div","sScrollWrapper","sScrollHead","sScrollHeadInner","box-sizing","sXInner","sScrollBody","sScrollFoot","sScrollFootInner","scrollHead","scrollBody","scrollFoot","nScrollHead","nScrollBody","nScrollFoot","headerTrgEls","footerTrgEls","headerSrcEls","footerSrcEls","headerCopy","footerCopy","correction","sanityWidth","scrollXInner","iBarWidth","divHeader","divHeaderStyle","divHeaderInner","divHeaderInnerStyle","divHeaderTable","divBodyEl","divBody","divBodyStyle","divFooter","divFooterInner","divFooterTable","tableEl","tableStyle","ie67","headerWidths","footerWidths","headerContent","zeroOut","nSizer","borderTopWidth","borderBottomWidth","clone","prependTo","_fnApplyToChildren","bCollapse","nToSize","iExtra","iOuterWidth","bScrolling","an1","an2","nNode1","nNode2","columnIdx","visibleColumns","headerCells","tableWidthAttr","tableContainer","userInputs","styleWidth","_fnConvertToWidth","tmpTable","_fnGetWidestNode","sContentPadding","_fnScrollingWidthAdjust","_reszEvt","bindResize","sInstance","freq","_fnGetMaxLenString","maxIdx","__re_html_remove","_fnScrollBarWidth","__scrollbarWidth","srcCol","aSort","aaSortingFixed","fixedObj","nestedSort","aaSorting","post","_idx","sortCol","aiOrig","oExtSort","formatters","_fnSortData","dataA","dataB","_fnSortAria","label","nextSort","oAria","sSortAscending","sSortDescending","_fnSortListener","nextSortIdx","sorting","bSortMulti","sortIdx","attachTo","_fnBindAction","_fnSortingClasses","oldSort","aLastSort","sortClass","sSortColumn","bSortClasses","customData","customSort","sSortDataType","_fnSaveState","bStateSave","oSavedState","fnStateSaveCallback","_fnLoadState","oInit","fnStateLoadCallback","abStateLoad","iStateDuration","oLoadedState","_fnSettingsFromNode","msg","tn","sErrMode","errMode","alert","mappedName","_fnExtend","extender","breakRefs","_fnCallbackReg","sStore","callbackArr","eventName","Event","trigger","renderer","_numbers","extPagination","numbers_length","half","_range","DT_el","decimalPlace","num","__numericReplace","num-fmt","_re_formatted_numeric","html-num","_re_html","html-num-fmt","_ext","_fnExternApiFunc","iApiIndex","internal","_Api","_api_register","_api_registerPlural","_re_dic","_re_new_lines","_re_date_start","_re_date_end","_empty","_intVal","_numToDecimal","decimalPoint","_isNumber","formatted","strType","_isHtml","_htmlNumeric","_stripHtml","prop2","_pluck_order","_removeEmpty","again","knew","sSelector","oOpts","api","traditional","fnAddData","flatten","fnAdjustColumnSizing","bRedraw","fnClearTable","fnClose","hide","fnDeleteRow","fnDestroy","fnDraw","complete","fnFilter","sInput","bShowGlobal","fnGetNodes","fnGetPosition","columnVisible","fnIsOpen","isShown","fnOpen","mHtml","fnPageChange","mAction","fnSetColumnVis","bShow","fnSettings","fnSort","aaSort","fnSortListener","nNode","fnCallback","mRow","bAction","fnVersionCheck","_that","emptyInit","oApi","sId","bInitHandedOff","$this","allSettings","bRetrieve","bDestroy","sDestroyWidth","iDisplayLength","fnDrawCallback","fnServerParams","fnStateSaveParams","fnStateLoadParams","fnStateLoaded","fnRowCallback","fnCreatedRow","fnHeaderCallback","fnFooterCallback","fnInitComplete","fnPreDrawCallback","bJQueryUI","oJUIClasses","sTable","iDeferLoading","sUrl","sStripeOdd","sStripeEven","stripeClasses","rowOne","asDestroyStripes","aoColumnsInit","anThs","getElementsByTagName","aoColumnDefs","oDef","sortedColumns","captions","__apiStruct","__arrayProto","_toSettings","mixed","jq","ctxSettings","Api","ctx","iterator","alwaysNew","items","item","apiInst","_selector_row_indexes","apiSelector","pluck","reduceRight","to$","toJQuery","scope","__dt_wrapper","struct","methodScoping","struc","methodExt","propExt","heir","registerPlural","pluralName","singularName","__table_selector","resetPaging","recordsDisplay","__reload","one","_selector_run","selectFn","res","selectorType","_selector_opts","_selector_first","displayFiltered","__row_selector","run","selInt","thatIdx","newRows","modRows","__details_add","klass","addRow","created","_details","_detailsShow","insertAfter","__details_remove","__details_display","__details_events","drawEvent","colvisEvent","destroyEvent","_emp","_child_obj","_child_mth","__re_column_selector","__columnData","r2","__column_selector","visColumns","__setColumnVis","recalc","calc","__cell_selector","allCells","fnSelector","rowSelector","columnSelector","caseInsen","versionCheck","iThis","iThat","aThis","aThat","isDataTable","fnIsDataTable","foot","fnTables","util","throttle","escapeRegex","camelToHungarian","jqRows","orig","jqTable","jqTbody","jqWrapper","bJUI","sSortIcon","sSortJUIWrapper","idx2","plural","resolved","bScrollCollapse","toFormat","localStorage","getItem","pathname","setItem","oPaginate","sFirst","sLast","sNext","sPrevious","sScrollX","sScrollXInner","sScrollY","aoRowCallback","aoHeaderCallback","aoFooterCallback","aoRowCreatedCallback","aoPreDrawCallback","aoInitComplete","aoStateSaveParams","aoStateLoadParams","aoStateLoaded","aoStateSave","aoStateLoad","aoServerParams","aoDestroyCallback","paginate","oPlugins","pageButton","sVersion","afnFiltering","aTypes","ofnSearch","oSort","afnSortData","oStdClasses","oPagination","sPageButton","sPageButtonActive","sPageButtonDisabled","sSortAsc","sSortDesc","sSortJUIAsc","sSortJUIDesc","_stateDefault","_sortIcon","_headerFooter","simple","simple_numbers","full_numbers","btnDisplay","btnClass","activeEl","clickHandler","data-dt-idx","parsed","re1","re2","date-pre","html-pre","string-pre","string-asc","string-desc","jqueryui","render","intPart","floatPart","_fnCalculateEnd","dataTableSettings","dataTableExt",15,"focusable","element","isTabIndexNotNaN","mapName","href","parents","addBack","uuid","runiqueId","ui","BACKSPACE","COMMA","DELETE","DOWN","END","ENTER","ESCAPE","HOME","LEFT","NUMPAD_ADD","NUMPAD_DECIMAL","NUMPAD_DIVIDE","NUMPAD_ENTER","NUMPAD_MULTIPLY","NUMPAD_SUBTRACT","PAGE_DOWN","PAGE_UP","PERIOD","RIGHT","SPACE","TAB","UP","elem","scrollParent","uniqueId","removeUniqueId","createPseudo","dataName","tabbable","isTabIndexNaN","innerWidth","prevObject","removeData","camelCase","support","selectstart","disableSelection","enableSelection","proto","plugins","hasScroll","mouseHandled","_mouseInit","widgetName","_mouseDown","stopImmediatePropagation","_mouseDestroy","_mouseMoveDelegate","_mouseUpDelegate","_mouseStarted","_mouseUp","_mouseDownEvent","btnIsLeft","elIsCancel","closest","_mouseCapture","mouseDelayMet","_mouseDelayTimer","_mouseDistanceMet","_mouseDelayMet","_mouseStart","_mouseMove","_mouseDrag","_mouseStop","./widget","isOverAxis","reference","isFloating","widgetEventPrefix","ready","connectWith","containment","cursorAt","dropOnEmpty","forcePlaceholderSize","forceHelperSize","grid","opacity","revert","scrollSensitivity","scrollSpeed","tolerance","activate","beforeStop","deactivate","over","receive","_create","containerCache","floating","_destroy","_setOption","toggleClass","Widget","overrideHandle","currentItem","validHandle","reverting","_refreshItems","_removeCurrentsFromItems","noActivation","currentContainer","refreshPositions","_createHelper","_cacheHelperProportions","_cacheMargins","margins","_getParentOffset","relative","_getRelativeOffset","cssPosition","originalPosition","_generatePosition","originalPageX","originalPageY","_adjustOffsetFromHelper","domPosition","_createPlaceholder","_setContainment","storedCursor","storedStylesheet","_storedOpacity","_storedZIndex","overflowOffset","_trigger","_uiHash","_preserveHelperProportions","containers","ddmanager","dropBehaviour","prepareOffsets","itemElement","scrolled","positionAbs","_convertPositionTo","lastPositionAbs","_intersectsWithPointer","_intersectsWithSides","_rearrange","_contactContainers","noPropagation","drop","animation","offsetParent","animate","_clear","_storedCSS","_noFinalSort","prepend","serialize","_getItemsAsjQuery","connected","attribute","_intersectsWith","helperProportions","dyClick","dxClick","isOverElementHeight","isOverElementWidth","isOverElement","forcePointerForContainers","verticalDirection","_getDragVerticalDirection","horizontalDirection","_getDragHorizontalDirection","isOverBottomHalf","isOverRightHalf","_connectWith","addItems","queries","widgetFullName","grep","targetData","_queries","queriesLength","fast","toleranceElement","custom","refreshContainers","itemWithLeastDistance","posProperty","sizeProperty","nearBottom","innermostContainer","innermostIndex","po","ce","co","scrollIsRootNode","hardRefresh","_delay","delayEvent","delayedTriggers","cancelHelperRemoval","_inst","sender","./core","./mouse","_cleanData","cleanData","elems","triggerHandler","fullName","existingConstructor","basePrototype","proxiedPrototype","_createWidget","_proto","_childConstructors","_super","_superApply","__super","__superApply","childPrototype","bridge","inputIndex","inputLength","isMethodCall","methodValue","pushStack","_init","defaultElement","eventNamespace","_getCreateOptions","bindings","hoverable","_on","parentWindow","_getCreateEventData","noop","curOption","_setOptions","enable","suppressDisabledCheck","handlers","delegateElement","handlerProxy","guid","delegate","_off","undelegate","_hoverable","_focusable","focusin","focusout","isDefaultPrevented","defaultEffect","effect","hasOptions","effectName","isEmptyObject","effects","easing","noGlobal","isArraylike","isWindow","winnow","elements","qualifier","risSimple","createOptions","optionsCache","rnotwhite","flag","completed","Data","expando","uid","dataAttr","rmultiDash","rbrace","parseJSON","data_user","returnTrue","returnFalse","safeActiveElement","manipulationTarget","disableScript","restoreScript","rscriptTypeMasked","setGlobalEval","refElements","data_priv","cloneCopyEvent","pdataOld","pdataCur","udataOld","udataCur","hasData","access","getAll","fixInput","rcheckableType","checked","defaultValue","actualDisplay","getDefaultComputedStyle","defaultDisplay","elemdisplay","iframe","contentDocument","write","curCSS","computed","maxWidth","getStyles","rnumnonpx","rmargin","addGetHookIf","conditionFn","hookFn","vendorPropName","capName","origName","cssPrefixes","setPositiveNumber","subtract","rnumsplit","augmentWidthOrHeight","extra","isBorderBox","cssExpand","getWidthOrHeight","valueIsBorderBox","boxSizingReliable","showHide","isHidden","Tween","createFxNow","fxNow","genFx","includeWidth","attrs","createTween","collection","tweeners","defaultPrefilter","toggle","oldfire","checkDisplay","anim","dataShow","_queueHooks","unqueued","fire","always","overflowX","overflowY","rfxtypes","propFilter","specialEasing","cssHooks","Animation","stopped","animationPrefilters","deferred","Deferred","currentTime","startTime","temp","percent","tweens","notifyWith","resolveWith","promise","originalProperties","originalOptions","gotoEnd","rejectWith","fail","addToPrefiltersOrTransports","structure","dataTypeExpression","dataTypes","inspectPrefiltersOrTransports","inspect","inspected","prefilterOrFactory","dataTypeOrTransport","seekingTransport","transports","ajaxExtend","deep","flatOptions","ajaxSettings","ajaxHandleResponses","responses","ct","finalDataType","firstDataType","getResponseHeader","converters","ajaxConvert","isSuccess","conv2","conv","responseFields","dataFilter","buildParams","getWindow","class2type","hasOwn","rtrim","rmsPrefix","rdashAlpha","fcamelCase","letter","copyIsArray","isReady","isNumeric","globalEval","script","indirect","eval","makeArray","results","callbackInverse","callbackExpect","proxy","seed","nid","newContext","newSelector","preferredDoc","setDocument","documentIsHTML","rquickExpr","getElementById","qsa","rbuggyQSA","rescape","toSelector","rsibling","testContext","qsaError","createCache","Expr","cacheLength","markFunction","assert","addHandle","attrHandle","siblingCheck","sourceIndex","MAX_NEGATIVE","createInputPseudo","createButtonPseudo","createPositionalPseudo","argument","matchIndexes","setFilters","addCombinator","matcher","checkNonElements","doneName","oldCache","outerCache","newCache","dirruns","elementMatcher","matchers","multipleContexts","contexts","condense","unmatched","newUnmatched","mapped","setMatcher","preFilter","postFilter","postFinder","postSelector","preMap","postMap","preexisting","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","outermostContext","matcherFromGroupMatchers","elementMatchers","setMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","uniqueSort","getText","isXML","compile","sortInput","hasDuplicate","docElem","rbuggyMatches","classCache","tokenCache","compilerCache","sortOrder","push_native","booleans","whitespace","characterEncoding","attributes","pseudos","rwhitespace","rcomma","rcombinators","rattributeQuotes","rpseudo","ridentifier","matchExpr","CLASS","TAG","ATTR","PSEUDO","CHILD","needsContext","rinputs","rheader","rnative","runescape","funescape","escapedWhitespace","high","unloadHandler","els","hasCompare","createComment","getById","getElementsByName","attrId","getAttributeNode","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","adown","bup","sortDetached","aup","bp","specified","duplicates","detectDuplicates","sortStable","nodeValue","selectors",">"," ","+","~","excess","unquoted","nodeNameSelector","ofType","nodeIndex","useCache","pseudo","matched","elemLang","hash","enabled","selectedIndex","even","odd","radio","checkbox","password","image","parseOnly","soFar","preFilters","cached","compiled","div1","isXMLDoc","rneedsContext","rsingleTag","rootjQuery","parseHTML","rparentsprev","guaranteedUnique","until","truncate","prevAll","parentsUntil","nextAll","nextUntil","prevUntil","Callbacks","memory","firing","firingStart","firingLength","firingIndex","stopOnFalse","locked","fireWith","tuples","fns","newDefer","tuple","returned","resolve","reject","notify","pipe","stateString","when","subordinate","progressValues","progressContexts","resolveContexts","resolveValues","updateFunc","readyList","readyWait","holdReady","hold","wait","chainable","emptyGet","bulk","acceptData","owner","accepts","descriptor","unlock","defineProperties","stored","camel","discard","_data","_removeData","camelKey","dequeue","startLength","clearQueue","defer","pnum","checkClone","noCloneChecked","strundefined","focusinBubbles","rkeyEvent","rmouseEvent","rfocusMorph","rtypenamespace","handleObjIn","eventHandle","handleObj","namespaces","origType","elemData","triggered","delegateType","bindType","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","onlyHandlers","bubbleType","ontype","eventPath","isTrigger","namespace_re","noBubble","isPropagationStopped","_default","fix","handlerQueue","delegateTarget","preDispatch","isImmediatePropagationStopped","postDispatch","fixHooks","keyHooks","original","mouseHooks","eventDoc","fixHook","beforeunload","simulate","bubble","isSimulated","timeStamp","pointerenter","pointerleave","attaches","origFn","rxhtmlTag","rtagName","rhtml","rnoInnerhtml","rchecked","rscriptType","rcleanScript","wrapMap","colgroup","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","buildFragment","scripts","domManip","keepData","hasScripts","iNoClone","_evalUrl","replaceAll","opener","computePixelPositionAndBoxSizingReliable","divStyle","pixelPositionVal","boxSizingReliableVal","backgroundClip","clearCloneStyle","pixelPosition","reliableMarginRight","marginDiv","swap","rdisplayswap","rrelNum","cssShow","cssNormalTransform","letterSpacing","fontWeight","cssNumber","fillOpacity","flexGrow","flexShrink","lineHeight","orphans","widows","cssProps","float","expanded","propHooks","eased","swing","timerId","rfxnum","rrun","*","maxIterations","tweener","prefilter","speed","speeds","fadeTo","optall","doAnimation","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","timeout","checkOn","optSelected","optDisabled","radioValue","nodeHook","boolHook","nType","attrHooks","propName","attrNames","propFix","getter","rfocusable","removeProp","notxml","hasAttribute","rclass","clazz","finalValue","stateVal","classNames","rreturn","valHooks","optionSet","hover","fnOver","fnOut","nonce","rquery","parseXML","DOMParser","parseFromString","rhash","rts","rheaders","rlocalProtocol","rnoContent","rprotocol","rurl","prefilters","allTypes","ajaxLocation","ajaxLocParts","lastModified","etag","isLocal","processData","async","contentType","* text","text html","text json","text xml","ajaxSetup","ajaxPrefilter","ajaxTransport","nativeStatusText","modified","statusText","timeoutTimer","transport","responseHeadersString","ifModified","cacheURL","callbackContext","statusCode","fireGlobals","globalEventContext","completeDeferred","responseHeaders","requestHeaders","requestHeadersNames","strAbort","getAllResponseHeaders","lname","finalText","crossDomain","hasContent","beforeSend","getJSON","getScript","throws","wrapAll","firstElementChild","wrapInner","unwrap","r20","rCRLF","rsubmitterTypes","rsubmittable","encodeURIComponent","serializeArray","xhrId","xhrCallbacks","xhrSuccessStatus",1223,"xhrSupported","cors","username","xhrFields","text script","charset","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","keepScripts","_load","params","animated","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","calculatePosition","curElem","using","win","parentOffset","Height","Width","defaultExtra","funcName","andSelf","_jQuery","_$","noConflict","callWithJQuery","pivotModule","pivotUtilities","d3_renderers","Treemap","pivotData","addToTree","ref","rowKey","localeStrings","newChild","getRowKeys","getAggregator",21,"makeGoogleChart","chartType","extraOptions","agg","base1","colKey","colKeys","dataArray","fullAggName","groupByTitle","hAxisTitle","len1","numCharsInHAxis","rowKeys","tree2","vAxisTitle","vs","gchart","getColKeys","aggregatorName","valAttrs","google","visualization","addColumn","colAttrs","rowAttrs","role","addRows","arrayToDataTable","hAxis","slantedText","vAxis","tooltip","textStyle","fontName","fontSize","minValue","legend","chartArea","ChartWrapper","editor","ChartEditor","getChartWrapper","openDialog","gchart_renderers","Line Chart","Bar Chart","Stacked Bar Chart","isStacked","Area Chart","Scatter Chart",22,"hasProp","PivotData","addSeparators","aggregatorTemplates","aggregators","dayNamesEn","derivers","getSort","locales","mthNamesEn","naturalSort","pivotTableRenderer","renderers","sortAs","usFmt","usFmtInt","usFmtPct","zeroPad","nStr","thousandsSep","decimalSep","rgx","digitsAfterDecimal","scaler","showZero","countUnique","uniq","record","numInputs","listUnique","sep","average","sumOverSum","denom","sumNum","sumDenom","sumOverSumBound80","fractionOf","wrapped","tpl","Count","Count Unique Values","List Unique Values","Sum","Integer Sum","Average","Minimum","Maximum","Sum over Sum","80% Upper Bound","80% Lower Bound","Sum as Fraction of Total","Sum as Fraction of Rows","Sum as Fraction of Columns","Count as Fraction of Total","Count as Fraction of Rows","Count as Fraction of Columns","Table","pvtData","Table Barchart","barchart","Heatmap","heatmap","Row Heatmap","Col Heatmap","en","renderError","computeError","uiRenderError","selectNone","tooMany","filterResults","totals","binWidth","dateFormat","formatString","utcOutput","mthNames","dayNames","_this","rd","rz","mapping","sorters","arrSort","aggregator","vals","rowTotals","colTotals","allTotal","sorted","forEachRecord","derivedAttributes","processRecord","addRecord","compactRecord","results1","tblCols","convertToArray","sortersArr","comparison","sorter","flatColKey","flatRowKey","len2","ref1","ref2","ref3","spanSize","totalAggregator","noDraw","pivot","rendererOptions","_error","hasChildNodes","pivotUI","inputOpts","attrLength","axisValues","colList","existingOpts","initialRender","len3","len4","pivotTable","ref4","refreshDelayed","rendererControl","shownAttributes","tr1","tr2","uiTable","unusedAttrsVerticalAutoCutoff","unusedAttrsVerticalAutoOverride","hiddenAttributes","menuLimit","exclusions","inclusions","unusedAttrsVertical","autoSortUnusedAttrs","onRefresh","attrElem","btns","checkContainer","filterItem","filterItemExcluded","hasExcludedItem","showFilterList","triangleLink","updateFilter","valueList","testString","unselectedCount","clickLeft","clickTop","rendererName","len5","newDropdown","numInputsToProcess","pivotUIOptions","pvtVals","ref5","ref6","subopts","unusedAttrsContainer","excludedItems","ref7","inclusionsInfo","sortable","colorGen","heatmapper","numCols","numRows","hexGen","hex","intensity","colorFor","forEachCell","barcharter","background-color","padding-left","padding-right","padding-top","text-align",23,"isLocalStorageNameSupported","localStorageName","ieKeyFix","forbiddenCharsRegex","storage","store","scriptTag","defaultVal","transact","transactionFn","deserialize","removeItem","addBehavior","storageOwner","storageContainer","ActiveXObject","frames","withIEStorage","storeFunction","XMLDocument","testKey",24,"description","main","repository","licenses","author","maintainers","email","bugs","homepage","readme","readmeFilename","_id","_from",25,"yasgui-utils","nestedExists","../package.json","./storage.js","./svg.js",26,"XMLSerializer","serializeToString","svgString","getElement","dom","svgContainer",28,"license","devDependencies","browserify","gulp","gulp-autoprefixer","gulp-bump","gulp-concat","gulp-connect","gulp-embedlr","gulp-filter","gulp-git","gulp-jsvalidate","gulp-livereload","gulp-minify-css","gulp-notify","gulp-rename","gulp-streamify","gulp-tag-version","gulp-uglify","require-dir","run-sequence","vinyl-buffer","vinyl-source-stream","watchify","gulp-sourcemaps","exorcist","vinyl-transform","gulp-sass","bootstrap-sass","browserify-transform-tools","gulp-cssimport","gulp-html-replace","browserify-shim","web","datatables","codemirror","pivottable","jquery-ui","optionalShim","jquery-ui/sortable",29,"lineBreak","variables","querySolutions","addValueToString","csvString","createBody","addQuerySolutionToString","querySolution","needToQuoteString","needQuoting",30,"yasr","resultsContainer","booleanVal","getBoolean","imgId","textVal","canHandleResults","hideFromSelection","getPriority","YASR-boolean","./imgs.js",31,"useGoogleCharts","outputPlugins","drawOutputSelector","drawDownloadIcon","getUsedPrefixes","persistency","outputSelector","maxSize","$container","getTryBtn","$tryBtn","tryQueryLink","getException","$header","corsMessage","GoogleTypeException","foundTypes","varName","toHtml","loadingMain","loadingFailed","loader","loadScript","maxTimeout","checkAndWait","googleLoad","packages","utils","chartWrapper","initEditor","getDataTable","setDataTable","chartConfig","toJSON","containerId","updateHeader","getPersistentSettings","motionChartState","setPersistentSettings","persSettings","getVariables","getDownloadInfo","svgEl","getContent","filename","buttonTitle","$table","tableToCsv","getEmbedHtml","htmlString","doDraw","wrapperId","jsonResults","getAsJson","getGoogleTypeForBindings","warn","usedPrefixes","binding","columnId","castGoogleType","getColumnType","getChartType","motionChart","getChart","getState","persistencyId","./exceptions.js","./gChartLoader.js","./utils.js","unsorted","sortDesc","sortAsc","download","fullscreen","smallscreen","./tableToCsv.js","addRowToString","rowArray","$el","rowspans","totalColCount","rowId","$tr","htmlColId","actualColId","rowSpan","$cell","colspan","rowspan","queryResults","getPersistencyId","postfix","pluginName","downloadIcon","embedButton","outputPlugin","selectedOutput","selectedOutputPriority","unsupportedOutputs","tryOutput","disableOutputs","outputToDraw","outputs","outputName","somethingDrawn","setResponse","dataOrJqXhr","textStatus","jqXhrOrErrorString","exception","resultsId","getOriginalResponseAsString","getAsStoreObject","$toggableWarning","$toggableWarningClose","$toggableWarningMsg","warning","blobDownloadSupported","checkBlobDownloadSupported","windowUrl","URL","webkitURL","mozURL","msURL","Blob","embedBtn","drawHeader","btnGroup","stringToUrl","blob","createObjectURL","currentPlugin","downloadInfo","downloadUrl","downloadMockLink","fireClick","drawFullscreenButton","drawSmallscreenButton","drawEmbedButton","embedLink","popup","prePopup","positions","persistentId","fromStorage","deprId","registerOutput","./boolean.js","./defaults.js","./error.js","./gchart.js","./jquery/extendJquery.js","./parsers/wrapper.js","./pivot.js","./rawResponse.js","./table.js","queryResponse","./dlv.js",41,"detectType","getBindings","rowIt","colIt","isBoolean","varsFetched","../../lib/jquery.csv-0.71.js",42,43,"origResponse","errorString","getParserFromContentType","doLuckyGuess","getOriginalResponse","responseString","getType","arg1","arg2","arg3","getOriginalContentType","./csv.js","./json.js","./tsv.js","./xml.js","parseHead","headNodeIt","headNode","parseResults","resultIt","resultNode","jsonResult","bindingIt","bindingNode","bindingInfIt","bindingInf","datatype","parseBoolean","mainXml","yUtils","imgs","useD3Chart","$pivotWrapper","mergeLabelPostfix","getShownVariables","mergeLabelsWithUris","shownVariables","formatForPivot","rowObj","uriToPrefixed","validatePivotTableOptions","pivotOptions","keepColsAndRows","pivotOptionse","pivotObj","openGchartBtn","dblclick","originalRefresh","icon","newSettings","YASR-rawResponse","../node_modules/pivottable/dist/d3_renderers.js","../node_modules/pivottable/dist/gchart_renderers.js",47,"cmOptions","codemirror/addon/edit/matchbrackets.js","codemirror/addon/fold/brace-fold.js","codemirror/addon/fold/foldcode.js","codemirror/addon/fold/foldgutter.js","codemirror/addon/fold/xml-fold.js","codemirror/mode/javascript/javascript.js","codemirror/mode/xml/xml.js",48,"yutils","tableLengthPersistencyId","tableLength","getRows","colId","sparqlVar","getCellContent","addEvents","drawSvgIcons","onCellClick","onCellMouseEnter","tdEl","fetchTitlesFromPreflabel","addPrefLabel","onCellMouseLeave","dataTableConfig","datatable","getColumns","pLength","pageLength","sortings","sorting_asc","sorting_desc","svgDiv","formatLiteral","literalBinding","stringRepresentation","escapeHtmlEntities","xmlSchemaNs","visibleString","postFix","addEmptyTitle","includeVariable","variableToCheck","autoWidth","lengthMenu","lengthChange","pagingType","drawCallback","activePaginateButton","columnDefs","YASR-table","jquery-datatables","../lib/colResizable-1.4.js","./bindingsToCsv.js",49,"unescaped","prefixes","uri","getGoogleTypeForBinding","typeCount","googleType","parseXmlSchemaDate","$els","dispatchEvent","oEvent","createEvent","initMouseEvent","fireEvent","dateString"],"mappings":"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","file":"yasr.bundled.min.js","sourcesContent":["!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{var f;\"undefined\"!=typeof window?f=window:\"undefined\"!=typeof global?f=global:\"undefined\"!=typeof self&&(f=self),f.YASR=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o0;\n\tvar S;\n\ttry{S = sessionStorage;}catch(e){}\t//Firefox crashes when executed as local file system\n\t\n\t//append required CSS rules \n\th.append(\"\");\n\n\t\n\t/**\n\t * Function to allow column resizing for table objects. It is the starting point to apply the plugin.\n\t * @param {DOM node} tb - refrence to the DOM table object to be enhanced\n\t * @param {Object} options\t- some customization values\n\t */\n\tvar init = function( tb, options){\t\n\t\tvar t = $(tb);\t\t\t\t\t\t\t\t\t\t//the table object is wrapped\n\t\tif(options.disable) return destroy(t);\t\t\t\t//the user is asking to destroy a previously colResized table\n\t\tvar\tid = t.id = t.attr(ID) || SIGNATURE+count++;\t//its id is obtained, if null new one is generated\t\t\n\t\tt.p = options.postbackSafe; \t\t\t\t\t\t//shortcut to detect postback safe \t\t\n\t\tif(!t.is(\"table\") || tables[id]) return; \t\t\t//if the object is not a table or if it was already processed then it is ignored.\n\t\tt.addClass(SIGNATURE).attr(ID, id).before('
');\t//the grips container object is added. Signature class forces table rendering in fixed-layout mode to prevent column's min-width\n\t\tt.opt = options; t.g = []; t.c = []; t.w = t.width(); t.gc = t.prev();\t//t.c and t.g are arrays of columns and grips respectively\t\t\t\t\n\t\tif(options.marginLeft) t.gc.css(\"marginLeft\", options.marginLeft); \t//if the table contains margins, it must be specified\n\t\tif(options.marginRight) t.gc.css(\"marginRight\", options.marginRight); \t//since there is no (direct) way to obtain margin values in its original units (%, em, ...)\n\t\tt.cs = I(ie? tb.cellSpacing || tb.currentStyle.borderSpacing :t.css('border-spacing'))||2;\t//table cellspacing (not even jQuery is fully cross-browser)\n\t\tt.b = I(ie? tb.border || tb.currentStyle.borderLeftWidth :t.css('border-left-width'))||1;\t//outer border width (again cross-browser isues)\n\t\t// if(!(tb.style.width || tb.width)) t.width(t.width()); //I am not an IE fan at all, but it is a pitty that only IE has the currentStyle attribute working as expected. For this reason I can not check easily if the table has an explicit width or if it is rendered as \"auto\"\n\t\ttables[id] = t; \t//the table object is stored using its id as key\t\n\t\tcreateGrips(t);\t\t//grips are created\n\t\n\t};\n\n\n\t/**\n\t * This function allows to remove any enhancements performed by this plugin on a previously processed table.\n\t * @param {jQuery ref} t - table object\n\t */\n\tvar destroy = function(t){\n\t\tvar id=t.attr(ID), t=tables[id];\t\t//its table object is found\n\t\tif(!t||!t.is(\"table\")) return;\t\t\t//if none, then it wasnt processed\t \n\t\tt.removeClass(SIGNATURE).gc.remove();\t//class and grips are removed\n\t\tdelete tables[id];\t\t\t\t\t\t//clean up data\n\t};\n\n\n\t/**\n\t * Function to create all the grips associated with the table given by parameters \n\t * @param {jQuery ref} t - table object\n\t */\n\tvar createGrips = function(t){\t\n\t\n\t\tvar th = t.find(\">thead>tr>th,>thead>tr>td\");\t//if table headers are specified in its semantically correct tag, are obtained\n\t\tif(!th.length) th = t.find(\">tbody>tr:first>th,>tr:first>th,>tbody>tr:first>td, >tr:first>td\");\t //but headers can also be included in different ways\n\t\tt.cg = t.find(\"col\"); \t\t\t\t\t\t//a table can also contain a colgroup with col elements\t\t\n\t\tt.ln = th.length;\t\t\t\t\t\t\t//table length is stored\t\n\t\tif(t.p && S && S[t.id])memento(t,th);\t\t//if 'postbackSafe' is enabled and there is data for the current table, its coloumn layout is restored\n\t\tth.each(function(i){\t\t\t\t\t\t//iterate through the table column headers\t\t\t\n\t\t\tvar c = $(this); \t\t\t\t\t\t//jquery wrap for the current column\t\t\t\n\t\t\tvar g = $(t.gc.append('
')[0].lastChild); //add the visual node to be used as grip\n\t\t\tg.t = t; g.i = i; g.c = c;\tc.w =c.width();\t\t//some values are stored in the grip's node data\n\t\t\tt.g.push(g); t.c.push(c);\t\t\t\t\t\t//the current grip and column are added to its table object\n\t\t\tc.width(c.w).removeAttr(\"width\");\t\t\t\t//the width of the column is converted into pixel-based measurements\n\t\t\tif (i < t.ln-1) {\n\t\t\t\tg.bind('touchstart mousedown', onGripMouseDown).append(t.opt.gripInnerHtml).append('
'); //bind the mousedown event to start dragging \n\t\t\t} else g.addClass(\"JCLRLastGrip\").removeClass(\"JCLRgrip\");\t//the last grip is used only to store data\t\t\t\n\t\t\tg.data(SIGNATURE, {i:i, t:t.attr(ID)});\t\t\t\t\t\t//grip index and its table name are stored in the HTML \t\t\t\t\t\t\t\t\t\t\t\t\n\t\t}); \t\n\t\tt.cg.removeAttr(\"width\");\t//remove the width attribute from elements in the colgroup (in any)\n\t\tsyncGrips(t); \t\t\t\t//the grips are positioned according to the current table layout\t\t\t\n\t\t//there is a small problem, some cells in the table could contain dimension values interfering with the \n\t\t//width value set by this plugin. Those values are removed\n\t\tt.find('td, th').not(th).not('table th, table td').each(function(){ \n\t\t\t$(this).removeAttr('width');\t//the width attribute is removed from all table cells which are not nested in other tables and dont belong to the header\n\t\t});\t\t\n\n\t\t\n\t};\n\t\n\n\t/**\n\t * Function to allow the persistence of columns dimensions after a browser postback. It is based in\n\t * the HTML5 sessionStorage object, which can be emulated for older browsers using sessionstorage.js\n\t * @param {jQuery ref} t - table object\n\t * @param {jQuery ref} th - reference to the first row elements (only set in deserialization)\n\t */\n\tvar memento = function(t, th){ \n\t\tvar w,m=0,i=0,aux =[];\n\t\tif(th){\t\t\t\t\t\t\t\t\t\t//in deserialization mode (after a postback)\n\t\t\tt.cg.removeAttr(\"width\");\n\t\t\tif(t.opt.flush){ S[t.id] =\"\"; return;} \t//if flush is activated, stored data is removed\n\t\t\tw = S[t.id].split(\";\");\t\t\t\t\t//column widths is obtained\n\t\t\tfor(;i*{cursor:\"+ t.opt.dragCursor +\"!important}\"); \t//change the mouse cursor\n\t\tg.addClass(t.opt.draggingClass); \t//add the dragging class (to allow some visual feedback)\t\t\t\t\n\t\tdrag = g;\t\t\t\t\t\t\t//the current grip is stored as the current dragging object\n\t\tif(t.c[o.i].l) for(var i=0,c; i= options.end) {\n exit = true;\n }\n \n // update global state\n options.state.rowNum++;\n options.state.colNum = 1;\n }\n\n function endOfValue() {\n if(options.onParseValue === undefined) {\n // onParseValue hook not set\n entry.push(value);\n } else {\n var hook = options.onParseValue(value, options.state); // onParseValue Hook\n // false skips the row, configurable through a hook\n if(hook !== false) {\n entry.push(hook);\n }\n }\n //console.log('value:' + value);\n // reset the state\n value = '';\n state = 0;\n // update global state\n options.state.colNum++;\n }\n\n // escape regex-specific control chars\n var escSeparator = RegExp.escape(separator);\n var escDelimiter = RegExp.escape(delimiter);\n\n // compile the regEx str using the custom delimiter/separator\n var match = /(D|S|\\n|\\r|[^DS\\r\\n]+)/;\n var matchSrc = match.source;\n matchSrc = matchSrc.replace(/S/g, escSeparator);\n matchSrc = matchSrc.replace(/D/g, escDelimiter);\n match = RegExp(matchSrc, 'gm');\n\n // put on your fancy pants...\n // process control chars individually, use look-ahead on non-control chars\n csv.replace(match, function (m0) {\n if(exit) {\n return;\n }\n switch (state) {\n // the start of a value\n case 0:\n // null last value\n if (m0 === separator) {\n value += '';\n endOfValue();\n break;\n }\n // opening delimiter\n if (m0 === delimiter) {\n state = 1;\n break;\n }\n // null last value\n if (m0 === '\\n') {\n endOfValue();\n endOfEntry();\n break;\n }\n // phantom carriage return\n if (/^\\r$/.test(m0)) {\n break;\n }\n // un-delimited value\n value += m0;\n state = 3;\n break;\n\n // delimited input\n case 1:\n // second delimiter? check further\n if (m0 === delimiter) {\n state = 2;\n break;\n }\n // delimited data\n value += m0;\n state = 1;\n break;\n\n // delimiter found in delimited input\n case 2:\n // escaped delimiter?\n if (m0 === delimiter) {\n value += m0;\n state = 1;\n break;\n }\n // null value\n if (m0 === separator) {\n endOfValue();\n break;\n }\n // end of entry\n if (m0 === '\\n') {\n endOfValue();\n endOfEntry();\n break;\n }\n // phantom carriage return\n if (/^\\r$/.test(m0)) {\n break;\n }\n // broken paser?\n throw new Error('CSVDataError: Illegal State [Row:' + options.state.rowNum + '][Col:' + options.state.colNum + ']');\n\n // un-delimited input\n case 3:\n // null last value\n if (m0 === separator) {\n endOfValue();\n break;\n }\n // end of entry\n if (m0 === '\\n') {\n endOfValue();\n endOfEntry();\n break;\n }\n // phantom carriage return\n if (/^\\r$/.test(m0)) {\n break;\n }\n if (m0 === delimiter) {\n // non-compliant data\n throw new Error('CSVDataError: Illegal Quote [Row:' + options.state.rowNum + '][Col:' + options.state.colNum + ']');\n }\n // broken parser?\n throw new Error('CSVDataError: Illegal Data [Row:' + options.state.rowNum + '][Col:' + options.state.colNum + ']');\n default:\n // shenanigans\n throw new Error('CSVDataError: Unknown State [Row:' + options.state.rowNum + '][Col:' + options.state.colNum + ']');\n }\n //console.log('val:' + m0 + ' state:' + state);\n });\n\n // submit the last entry\n // ignore null last line\n if(entry.length !== 0) {\n endOfValue();\n endOfEntry();\n }\n\n return data;\n },\n\n // a csv-specific line splitter\n splitLines: function(csv, options) {\n // cache settings\n var separator = options.separator;\n var delimiter = options.delimiter;\n\n // set initial state if it's missing\n if(!options.state.rowNum) {\n options.state.rowNum = 1;\n }\n\n // clear initial state\n var entries = [];\n var state = 0;\n var entry = '';\n var exit = false;\n\n function endOfLine() { \n // reset the state\n state = 0;\n \n // if 'start' hasn't been met, don't output\n if(options.start && options.state.rowNum < options.start) {\n // update global state\n entry = '';\n options.state.rowNum++;\n return;\n }\n \n if(options.onParseEntry === undefined) {\n // onParseEntry hook not set\n entries.push(entry);\n } else {\n var hookVal = options.onParseEntry(entry, options.state); // onParseEntry Hook\n // false skips the row, configurable through a hook\n if(hookVal !== false) {\n entries.push(hookVal);\n }\n }\n\n // cleanup\n entry = '';\n\n // if 'end' is met, stop parsing\n if(options.end && options.state.rowNum >= options.end) {\n exit = true;\n }\n \n // update global state\n options.state.rowNum++;\n }\n\n // escape regex-specific control chars\n var escSeparator = RegExp.escape(separator);\n var escDelimiter = RegExp.escape(delimiter);\n\n // compile the regEx str using the custom delimiter/separator\n var match = /(D|S|\\n|\\r|[^DS\\r\\n]+)/;\n var matchSrc = match.source;\n matchSrc = matchSrc.replace(/S/g, escSeparator);\n matchSrc = matchSrc.replace(/D/g, escDelimiter);\n match = RegExp(matchSrc, 'gm');\n \n // put on your fancy pants...\n // process control chars individually, use look-ahead on non-control chars\n csv.replace(match, function (m0) {\n if(exit) {\n return;\n }\n switch (state) {\n // the start of a value/entry\n case 0:\n // null value\n if (m0 === separator) {\n entry += m0;\n state = 0;\n break;\n }\n // opening delimiter\n if (m0 === delimiter) {\n entry += m0;\n state = 1;\n break;\n }\n // end of line\n if (m0 === '\\n') {\n endOfLine();\n break;\n }\n // phantom carriage return\n if (/^\\r$/.test(m0)) {\n break;\n }\n // un-delimit value\n entry += m0;\n state = 3;\n break;\n\n // delimited input\n case 1:\n // second delimiter? check further\n if (m0 === delimiter) {\n entry += m0;\n state = 2;\n break;\n }\n // delimited data\n entry += m0;\n state = 1;\n break;\n\n // delimiter found in delimited input\n case 2:\n // escaped delimiter?\n var prevChar = entry.substr(entry.length - 1);\n if (m0 === delimiter && prevChar === delimiter) {\n entry += m0;\n state = 1;\n break;\n }\n // end of value\n if (m0 === separator) {\n entry += m0;\n state = 0;\n break;\n }\n // end of line\n if (m0 === '\\n') {\n endOfLine();\n break;\n }\n // phantom carriage return\n if (m0 === '\\r') {\n break;\n }\n // broken paser?\n throw new Error('CSVDataError: Illegal state [Row:' + options.state.rowNum + ']');\n\n // un-delimited input\n case 3:\n // null value\n if (m0 === separator) {\n entry += m0;\n state = 0;\n break;\n }\n // end of line\n if (m0 === '\\n') {\n endOfLine();\n break;\n }\n // phantom carriage return\n if (m0 === '\\r') {\n break;\n }\n // non-compliant data\n if (m0 === delimiter) {\n throw new Error('CSVDataError: Illegal quote [Row:' + options.state.rowNum + ']');\n }\n // broken parser?\n throw new Error('CSVDataError: Illegal state [Row:' + options.state.rowNum + ']');\n default:\n // shenanigans\n throw new Error('CSVDataError: Unknown state [Row:' + options.state.rowNum + ']');\n }\n //console.log('val:' + m0 + ' state:' + state);\n });\n\n // submit the last entry\n // ignore null last line\n if(entry !== '') {\n endOfLine();\n }\n\n return entries;\n },\n\n // a csv entry parser\n parseEntry: function(csv, options) {\n // cache settings\n var separator = options.separator;\n var delimiter = options.delimiter;\n \n // set initial state if it's missing\n if(!options.state.rowNum) {\n options.state.rowNum = 1;\n }\n if(!options.state.colNum) {\n options.state.colNum = 1;\n }\n\n // clear initial state\n var entry = [];\n var state = 0;\n var value = '';\n\n function endOfValue() {\n if(options.onParseValue === undefined) {\n // onParseValue hook not set\n entry.push(value);\n } else {\n var hook = options.onParseValue(value, options.state); // onParseValue Hook\n // false skips the value, configurable through a hook\n if(hook !== false) {\n entry.push(hook);\n }\n }\n // reset the state\n value = '';\n state = 0;\n // update global state\n options.state.colNum++;\n }\n\n // checked for a cached regEx first\n if(!options.match) {\n // escape regex-specific control chars\n var escSeparator = RegExp.escape(separator);\n var escDelimiter = RegExp.escape(delimiter);\n \n // compile the regEx str using the custom delimiter/separator\n var match = /(D|S|\\n|\\r|[^DS\\r\\n]+)/;\n var matchSrc = match.source;\n matchSrc = matchSrc.replace(/S/g, escSeparator);\n matchSrc = matchSrc.replace(/D/g, escDelimiter);\n options.match = RegExp(matchSrc, 'gm');\n }\n\n // put on your fancy pants...\n // process control chars individually, use look-ahead on non-control chars\n csv.replace(options.match, function (m0) {\n switch (state) {\n // the start of a value\n case 0:\n // null last value\n if (m0 === separator) {\n value += '';\n endOfValue();\n break;\n }\n // opening delimiter\n if (m0 === delimiter) {\n state = 1;\n break;\n }\n // skip un-delimited new-lines\n if (m0 === '\\n' || m0 === '\\r') {\n break;\n }\n // un-delimited value\n value += m0;\n state = 3;\n break;\n\n // delimited input\n case 1:\n // second delimiter? check further\n if (m0 === delimiter) {\n state = 2;\n break;\n }\n // delimited data\n value += m0;\n state = 1;\n break;\n\n // delimiter found in delimited input\n case 2:\n // escaped delimiter?\n if (m0 === delimiter) {\n value += m0;\n state = 1;\n break;\n }\n // null value\n if (m0 === separator) {\n endOfValue();\n break;\n }\n // skip un-delimited new-lines\n if (m0 === '\\n' || m0 === '\\r') {\n break;\n }\n // broken paser?\n throw new Error('CSVDataError: Illegal State [Row:' + options.state.rowNum + '][Col:' + options.state.colNum + ']');\n\n // un-delimited input\n case 3:\n // null last value\n if (m0 === separator) {\n endOfValue();\n break;\n }\n // skip un-delimited new-lines\n if (m0 === '\\n' || m0 === '\\r') {\n break;\n }\n // non-compliant data\n if (m0 === delimiter) {\n throw new Error('CSVDataError: Illegal Quote [Row:' + options.state.rowNum + '][Col:' + options.state.colNum + ']');\n }\n // broken parser?\n throw new Error('CSVDataError: Illegal Data [Row:' + options.state.rowNum + '][Col:' + options.state.colNum + ']');\n default:\n // shenanigans\n throw new Error('CSVDataError: Unknown State [Row:' + options.state.rowNum + '][Col:' + options.state.colNum + ']');\n }\n //console.log('val:' + m0 + ' state:' + state);\n });\n\n // submit the last value\n endOfValue();\n\n return entry;\n }\n },\n\n /**\n * $.csv.toArray(csv)\n * Converts a CSV entry string to a javascript array.\n *\n * @param {Array} csv The string containing the CSV data.\n * @param {Object} [options] An object containing user-defined options.\n * @param {Character} [separator] An override for the separator character. Defaults to a comma(,).\n * @param {Character} [delimiter] An override for the delimiter character. Defaults to a double-quote(\").\n *\n * This method deals with simple CSV strings only. It's useful if you only\n * need to parse a single entry. If you need to parse more than one line,\n * use $.csv2Array instead.\n */\n toArray: function(csv, options, callback) {\n var options = (options !== undefined ? options : {});\n var config = {};\n config.callback = ((callback !== undefined && typeof(callback) === 'function') ? callback : false);\n config.separator = 'separator' in options ? options.separator : $.csv.defaults.separator;\n config.delimiter = 'delimiter' in options ? options.delimiter : $.csv.defaults.delimiter;\n var state = (options.state !== undefined ? options.state : {});\n\n // setup\n var options = {\n delimiter: config.delimiter,\n separator: config.separator,\n onParseEntry: options.onParseEntry,\n onParseValue: options.onParseValue,\n state: state\n }\n\n var entry = $.csv.parsers.parseEntry(csv, options);\n\n // push the value to a callback if one is defined\n if(!config.callback) {\n return entry;\n } else {\n config.callback('', entry);\n }\n },\n\n /**\n * $.csv.toArrays(csv)\n * Converts a CSV string to a javascript array.\n *\n * @param {String} csv The string containing the raw CSV data.\n * @param {Object} [options] An object containing user-defined options.\n * @param {Character} [separator] An override for the separator character. Defaults to a comma(,).\n * @param {Character} [delimiter] An override for the delimiter character. Defaults to a double-quote(\").\n *\n * This method deals with multi-line CSV. The breakdown is simple. The first\n * dimension of the array represents the line (or entry/row) while the second\n * dimension contains the values (or values/columns).\n */\n toArrays: function(csv, options, callback) {\n var options = (options !== undefined ? options : {});\n var config = {};\n config.callback = ((callback !== undefined && typeof(callback) === 'function') ? callback : false);\n config.separator = 'separator' in options ? options.separator : $.csv.defaults.separator;\n config.delimiter = 'delimiter' in options ? options.delimiter : $.csv.defaults.delimiter;\n \n // setup\n var data = [];\n var options = {\n delimiter: config.delimiter,\n separator: config.separator,\n onParseEntry: options.onParseEntry,\n onParseValue: options.onParseValue,\n start: options.start,\n end: options.end,\n state: {\n rowNum: 1,\n colNum: 1\n }\n };\n\n // break the data down to lines\n data = $.csv.parsers.parse(csv, options);\n\n // push the value to a callback if one is defined\n if(!config.callback) {\n return data;\n } else {\n config.callback('', data);\n }\n },\n\n /**\n * $.csv.toObjects(csv)\n * Converts a CSV string to a javascript object.\n * @param {String} csv The string containing the raw CSV data.\n * @param {Object} [options] An object containing user-defined options.\n * @param {Character} [separator] An override for the separator character. Defaults to a comma(,).\n * @param {Character} [delimiter] An override for the delimiter character. Defaults to a double-quote(\").\n * @param {Boolean} [headers] Indicates whether the data contains a header line. Defaults to true.\n *\n * This method deals with multi-line CSV strings. Where the headers line is\n * used as the key for each value per entry.\n */\n toObjects: function(csv, options, callback) {\n var options = (options !== undefined ? options : {});\n var config = {};\n config.callback = ((callback !== undefined && typeof(callback) === 'function') ? callback : false);\n config.separator = 'separator' in options ? options.separator : $.csv.defaults.separator;\n config.delimiter = 'delimiter' in options ? options.delimiter : $.csv.defaults.delimiter;\n config.headers = 'headers' in options ? options.headers : $.csv.defaults.headers;\n options.start = 'start' in options ? options.start : 1;\n \n // account for headers\n if(config.headers) {\n options.start++;\n }\n if(options.end && config.headers) {\n options.end++;\n }\n \n // setup\n var lines = [];\n var data = [];\n \n var options = {\n delimiter: config.delimiter,\n separator: config.separator,\n onParseEntry: options.onParseEntry,\n onParseValue: options.onParseValue,\n start: options.start,\n end: options.end,\n state: {\n rowNum: 1,\n colNum: 1\n },\n match: false\n };\n\n // fetch the headers\n var headerOptions = {\n delimiter: config.delimiter,\n separator: config.separator,\n start: 1,\n end: 1,\n state: {\n rowNum:1,\n colNum:1\n }\n }\n var headerLine = $.csv.parsers.splitLines(csv, headerOptions);\n var headers = $.csv.toArray(headerLine[0], options);\n\n // fetch the data\n var lines = $.csv.parsers.splitLines(csv, options);\n \n // reset the state for re-use\n options.state.colNum = 1;\n if(headers){\n options.state.rowNum = 2;\n } else {\n options.state.rowNum = 1;\n }\n \n // convert data to objects\n for(var i=0, len=lines.length; i 0 && this._events[type].length > m) {\n this._events[type].warned = true;\n console.error('(node) warning: possible EventEmitter memory ' +\n 'leak detected. %d listeners added. ' +\n 'Use emitter.setMaxListeners() to increase limit.',\n this._events[type].length);\n if (typeof console.trace === 'function') {\n // not supported in IE 10\n console.trace();\n }\n }\n }\n\n return this;\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.once = function(type, listener) {\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n var fired = false;\n\n function g() {\n this.removeListener(type, g);\n\n if (!fired) {\n fired = true;\n listener.apply(this, arguments);\n }\n }\n\n g.listener = listener;\n this.on(type, g);\n\n return this;\n};\n\n// emits a 'removeListener' event iff the listener was removed\nEventEmitter.prototype.removeListener = function(type, listener) {\n var list, position, length, i;\n\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n if (!this._events || !this._events[type])\n return this;\n\n list = this._events[type];\n length = list.length;\n position = -1;\n\n if (list === listener ||\n (isFunction(list.listener) && list.listener === listener)) {\n delete this._events[type];\n if (this._events.removeListener)\n this.emit('removeListener', type, listener);\n\n } else if (isObject(list)) {\n for (i = length; i-- > 0;) {\n if (list[i] === listener ||\n (list[i].listener && list[i].listener === listener)) {\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (list.length === 1) {\n list.length = 0;\n delete this._events[type];\n } else {\n list.splice(position, 1);\n }\n\n if (this._events.removeListener)\n this.emit('removeListener', type, listener);\n }\n\n return this;\n};\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n var key, listeners;\n\n if (!this._events)\n return this;\n\n // not listening for removeListener, no need to emit\n if (!this._events.removeListener) {\n if (arguments.length === 0)\n this._events = {};\n else if (this._events[type])\n delete this._events[type];\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n for (key in this._events) {\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = {};\n return this;\n }\n\n listeners = this._events[type];\n\n if (isFunction(listeners)) {\n this.removeListener(type, listeners);\n } else {\n // LIFO order\n while (listeners.length)\n this.removeListener(type, listeners[listeners.length - 1]);\n }\n delete this._events[type];\n\n return this;\n};\n\nEventEmitter.prototype.listeners = function(type) {\n var ret;\n if (!this._events || !this._events[type])\n ret = [];\n else if (isFunction(this._events[type]))\n ret = [this._events[type]];\n else\n ret = this._events[type].slice();\n return ret;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n var ret;\n if (!emitter._events || !emitter._events[type])\n ret = 0;\n else if (isFunction(emitter._events[type]))\n ret = 1;\n else\n ret = emitter._events[type].length;\n return ret;\n};\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\n\n},{}],5:[function(require,module,exports){\n// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n var ie_lt8 = /MSIE \\d/.test(navigator.userAgent) &&\n (document.documentMode == null || document.documentMode < 8);\n\n var Pos = CodeMirror.Pos;\n\n var matching = {\"(\": \")>\", \")\": \"(<\", \"[\": \"]>\", \"]\": \"[<\", \"{\": \"}>\", \"}\": \"{<\"};\n\n function findMatchingBracket(cm, where, strict, config) {\n var line = cm.getLineHandle(where.line), pos = where.ch - 1;\n var match = (pos >= 0 && matching[line.text.charAt(pos)]) || matching[line.text.charAt(++pos)];\n if (!match) return null;\n var dir = match.charAt(1) == \">\" ? 1 : -1;\n if (strict && (dir > 0) != (pos == where.ch)) return null;\n var style = cm.getTokenTypeAt(Pos(where.line, pos + 1));\n\n var found = scanForBracket(cm, Pos(where.line, pos + (dir > 0 ? 1 : 0)), dir, style || null, config);\n if (found == null) return null;\n return {from: Pos(where.line, pos), to: found && found.pos,\n match: found && found.ch == match.charAt(0), forward: dir > 0};\n }\n\n // bracketRegex is used to specify which type of bracket to scan\n // should be a regexp, e.g. /[[\\]]/\n //\n // Note: If \"where\" is on an open bracket, then this bracket is ignored.\n //\n // Returns false when no bracket was found, null when it reached\n // maxScanLines and gave up\n function scanForBracket(cm, where, dir, style, config) {\n var maxScanLen = (config && config.maxScanLineLength) || 10000;\n var maxScanLines = (config && config.maxScanLines) || 1000;\n\n var stack = [];\n var re = config && config.bracketRegex ? config.bracketRegex : /[(){}[\\]]/;\n var lineEnd = dir > 0 ? Math.min(where.line + maxScanLines, cm.lastLine() + 1)\n : Math.max(cm.firstLine() - 1, where.line - maxScanLines);\n for (var lineNo = where.line; lineNo != lineEnd; lineNo += dir) {\n var line = cm.getLine(lineNo);\n if (!line) continue;\n var pos = dir > 0 ? 0 : line.length - 1, end = dir > 0 ? line.length : -1;\n if (line.length > maxScanLen) continue;\n if (lineNo == where.line) pos = where.ch - (dir < 0 ? 1 : 0);\n for (; pos != end; pos += dir) {\n var ch = line.charAt(pos);\n if (re.test(ch) && (style === undefined || cm.getTokenTypeAt(Pos(lineNo, pos + 1)) == style)) {\n var match = matching[ch];\n if ((match.charAt(1) == \">\") == (dir > 0)) stack.push(ch);\n else if (!stack.length) return {pos: Pos(lineNo, pos), ch: ch};\n else stack.pop();\n }\n }\n }\n return lineNo - dir == (dir > 0 ? cm.lastLine() : cm.firstLine()) ? false : null;\n }\n\n function matchBrackets(cm, autoclear, config) {\n // Disable brace matching in long lines, since it'll cause hugely slow updates\n var maxHighlightLen = cm.state.matchBrackets.maxHighlightLineLength || 1000;\n var marks = [], ranges = cm.listSelections();\n for (var i = 0; i < ranges.length; i++) {\n var match = ranges[i].empty() && findMatchingBracket(cm, ranges[i].head, false, config);\n if (match && cm.getLine(match.from.line).length <= maxHighlightLen) {\n var style = match.match ? \"CodeMirror-matchingbracket\" : \"CodeMirror-nonmatchingbracket\";\n marks.push(cm.markText(match.from, Pos(match.from.line, match.from.ch + 1), {className: style}));\n if (match.to && cm.getLine(match.to.line).length <= maxHighlightLen)\n marks.push(cm.markText(match.to, Pos(match.to.line, match.to.ch + 1), {className: style}));\n }\n }\n\n if (marks.length) {\n // Kludge to work around the IE bug from issue #1193, where text\n // input stops going to the textare whever this fires.\n if (ie_lt8 && cm.state.focused) cm.display.input.focus();\n\n var clear = function() {\n cm.operation(function() {\n for (var i = 0; i < marks.length; i++) marks[i].clear();\n });\n };\n if (autoclear) setTimeout(clear, 800);\n else return clear;\n }\n }\n\n var currentlyHighlighted = null;\n function doMatchBrackets(cm) {\n cm.operation(function() {\n if (currentlyHighlighted) {currentlyHighlighted(); currentlyHighlighted = null;}\n currentlyHighlighted = matchBrackets(cm, false, cm.state.matchBrackets);\n });\n }\n\n CodeMirror.defineOption(\"matchBrackets\", false, function(cm, val, old) {\n if (old && old != CodeMirror.Init)\n cm.off(\"cursorActivity\", doMatchBrackets);\n if (val) {\n cm.state.matchBrackets = typeof val == \"object\" ? val : {};\n cm.on(\"cursorActivity\", doMatchBrackets);\n }\n });\n\n CodeMirror.defineExtension(\"matchBrackets\", function() {matchBrackets(this, true);});\n CodeMirror.defineExtension(\"findMatchingBracket\", function(pos, strict, config){\n return findMatchingBracket(this, pos, strict, config);\n });\n CodeMirror.defineExtension(\"scanForBracket\", function(pos, dir, style, config){\n return scanForBracket(this, pos, dir, style, config);\n });\n});\n\n},{\"../../lib/codemirror\":10}],6:[function(require,module,exports){\n// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.registerHelper(\"fold\", \"brace\", function(cm, start) {\n var line = start.line, lineText = cm.getLine(line);\n var startCh, tokenType;\n\n function findOpening(openCh) {\n for (var at = start.ch, pass = 0;;) {\n var found = at <= 0 ? -1 : lineText.lastIndexOf(openCh, at - 1);\n if (found == -1) {\n if (pass == 1) break;\n pass = 1;\n at = lineText.length;\n continue;\n }\n if (pass == 1 && found < start.ch) break;\n tokenType = cm.getTokenTypeAt(CodeMirror.Pos(line, found + 1));\n if (!/^(comment|string)/.test(tokenType)) return found + 1;\n at = found - 1;\n }\n }\n\n var startToken = \"{\", endToken = \"}\", startCh = findOpening(\"{\");\n if (startCh == null) {\n startToken = \"[\", endToken = \"]\";\n startCh = findOpening(\"[\");\n }\n\n if (startCh == null) return;\n var count = 1, lastLine = cm.lastLine(), end, endCh;\n outer: for (var i = line; i <= lastLine; ++i) {\n var text = cm.getLine(i), pos = i == line ? startCh : 0;\n for (;;) {\n var nextOpen = text.indexOf(startToken, pos), nextClose = text.indexOf(endToken, pos);\n if (nextOpen < 0) nextOpen = text.length;\n if (nextClose < 0) nextClose = text.length;\n pos = Math.min(nextOpen, nextClose);\n if (pos == text.length) break;\n if (cm.getTokenTypeAt(CodeMirror.Pos(i, pos + 1)) == tokenType) {\n if (pos == nextOpen) ++count;\n else if (!--count) { end = i; endCh = pos; break outer; }\n }\n ++pos;\n }\n }\n if (end == null || line == end && endCh == startCh) return;\n return {from: CodeMirror.Pos(line, startCh),\n to: CodeMirror.Pos(end, endCh)};\n});\n\nCodeMirror.registerHelper(\"fold\", \"import\", function(cm, start) {\n function hasImport(line) {\n if (line < cm.firstLine() || line > cm.lastLine()) return null;\n var start = cm.getTokenAt(CodeMirror.Pos(line, 1));\n if (!/\\S/.test(start.string)) start = cm.getTokenAt(CodeMirror.Pos(line, start.end + 1));\n if (start.type != \"keyword\" || start.string != \"import\") return null;\n // Now find closing semicolon, return its position\n for (var i = line, e = Math.min(cm.lastLine(), line + 10); i <= e; ++i) {\n var text = cm.getLine(i), semi = text.indexOf(\";\");\n if (semi != -1) return {startCh: start.end, end: CodeMirror.Pos(i, semi)};\n }\n }\n\n var start = start.line, has = hasImport(start), prev;\n if (!has || hasImport(start - 1) || ((prev = hasImport(start - 2)) && prev.end.line == start - 1))\n return null;\n for (var end = has.end;;) {\n var next = hasImport(end.line + 1);\n if (next == null) break;\n end = next.end;\n }\n return {from: cm.clipPos(CodeMirror.Pos(start, has.startCh + 1)), to: end};\n});\n\nCodeMirror.registerHelper(\"fold\", \"include\", function(cm, start) {\n function hasInclude(line) {\n if (line < cm.firstLine() || line > cm.lastLine()) return null;\n var start = cm.getTokenAt(CodeMirror.Pos(line, 1));\n if (!/\\S/.test(start.string)) start = cm.getTokenAt(CodeMirror.Pos(line, start.end + 1));\n if (start.type == \"meta\" && start.string.slice(0, 8) == \"#include\") return start.start + 8;\n }\n\n var start = start.line, has = hasInclude(start);\n if (has == null || hasInclude(start - 1) != null) return null;\n for (var end = start;;) {\n var next = hasInclude(end + 1);\n if (next == null) break;\n ++end;\n }\n return {from: CodeMirror.Pos(start, has + 1),\n to: cm.clipPos(CodeMirror.Pos(end))};\n});\n\n});\n\n},{\"../../lib/codemirror\":10}],7:[function(require,module,exports){\n// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n \"use strict\";\n\n function doFold(cm, pos, options, force) {\n if (options && options.call) {\n var finder = options;\n options = null;\n } else {\n var finder = getOption(cm, options, \"rangeFinder\");\n }\n if (typeof pos == \"number\") pos = CodeMirror.Pos(pos, 0);\n var minSize = getOption(cm, options, \"minFoldSize\");\n\n function getRange(allowFolded) {\n var range = finder(cm, pos);\n if (!range || range.to.line - range.from.line < minSize) return null;\n var marks = cm.findMarksAt(range.from);\n for (var i = 0; i < marks.length; ++i) {\n if (marks[i].__isFold && force !== \"fold\") {\n if (!allowFolded) return null;\n range.cleared = true;\n marks[i].clear();\n }\n }\n return range;\n }\n\n var range = getRange(true);\n if (getOption(cm, options, \"scanUp\")) while (!range && pos.line > cm.firstLine()) {\n pos = CodeMirror.Pos(pos.line - 1, 0);\n range = getRange(false);\n }\n if (!range || range.cleared || force === \"unfold\") return;\n\n var myWidget = makeWidget(cm, options);\n CodeMirror.on(myWidget, \"mousedown\", function(e) {\n myRange.clear();\n CodeMirror.e_preventDefault(e);\n });\n var myRange = cm.markText(range.from, range.to, {\n replacedWith: myWidget,\n clearOnEnter: true,\n __isFold: true\n });\n myRange.on(\"clear\", function(from, to) {\n CodeMirror.signal(cm, \"unfold\", cm, from, to);\n });\n CodeMirror.signal(cm, \"fold\", cm, range.from, range.to);\n }\n\n function makeWidget(cm, options) {\n var widget = getOption(cm, options, \"widget\");\n if (typeof widget == \"string\") {\n var text = document.createTextNode(widget);\n widget = document.createElement(\"span\");\n widget.appendChild(text);\n widget.className = \"CodeMirror-foldmarker\";\n }\n return widget;\n }\n\n // Clumsy backwards-compatible interface\n CodeMirror.newFoldFunction = function(rangeFinder, widget) {\n return function(cm, pos) { doFold(cm, pos, {rangeFinder: rangeFinder, widget: widget}); };\n };\n\n // New-style interface\n CodeMirror.defineExtension(\"foldCode\", function(pos, options, force) {\n doFold(this, pos, options, force);\n });\n\n CodeMirror.defineExtension(\"isFolded\", function(pos) {\n var marks = this.findMarksAt(pos);\n for (var i = 0; i < marks.length; ++i)\n if (marks[i].__isFold) return true;\n });\n\n CodeMirror.commands.toggleFold = function(cm) {\n cm.foldCode(cm.getCursor());\n };\n CodeMirror.commands.fold = function(cm) {\n cm.foldCode(cm.getCursor(), null, \"fold\");\n };\n CodeMirror.commands.unfold = function(cm) {\n cm.foldCode(cm.getCursor(), null, \"unfold\");\n };\n CodeMirror.commands.foldAll = function(cm) {\n cm.operation(function() {\n for (var i = cm.firstLine(), e = cm.lastLine(); i <= e; i++)\n cm.foldCode(CodeMirror.Pos(i, 0), null, \"fold\");\n });\n };\n CodeMirror.commands.unfoldAll = function(cm) {\n cm.operation(function() {\n for (var i = cm.firstLine(), e = cm.lastLine(); i <= e; i++)\n cm.foldCode(CodeMirror.Pos(i, 0), null, \"unfold\");\n });\n };\n\n CodeMirror.registerHelper(\"fold\", \"combine\", function() {\n var funcs = Array.prototype.slice.call(arguments, 0);\n return function(cm, start) {\n for (var i = 0; i < funcs.length; ++i) {\n var found = funcs[i](cm, start);\n if (found) return found;\n }\n };\n });\n\n CodeMirror.registerHelper(\"fold\", \"auto\", function(cm, start) {\n var helpers = cm.getHelpers(start, \"fold\");\n for (var i = 0; i < helpers.length; i++) {\n var cur = helpers[i](cm, start);\n if (cur) return cur;\n }\n });\n\n var defaultOptions = {\n rangeFinder: CodeMirror.fold.auto,\n widget: \"\\u2194\",\n minFoldSize: 0,\n scanUp: false\n };\n\n CodeMirror.defineOption(\"foldOptions\", null);\n\n function getOption(cm, options, name) {\n if (options && options[name] !== undefined)\n return options[name];\n var editorOptions = cm.options.foldOptions;\n if (editorOptions && editorOptions[name] !== undefined)\n return editorOptions[name];\n return defaultOptions[name];\n }\n\n CodeMirror.defineExtension(\"foldOption\", function(options, name) {\n return getOption(this, options, name);\n });\n});\n\n},{\"../../lib/codemirror\":10}],8:[function(require,module,exports){\n// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"), require(\"./foldcode\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\", \"./foldcode\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n \"use strict\";\n\n CodeMirror.defineOption(\"foldGutter\", false, function(cm, val, old) {\n if (old && old != CodeMirror.Init) {\n cm.clearGutter(cm.state.foldGutter.options.gutter);\n cm.state.foldGutter = null;\n cm.off(\"gutterClick\", onGutterClick);\n cm.off(\"change\", onChange);\n cm.off(\"viewportChange\", onViewportChange);\n cm.off(\"fold\", onFold);\n cm.off(\"unfold\", onFold);\n cm.off(\"swapDoc\", updateInViewport);\n }\n if (val) {\n cm.state.foldGutter = new State(parseOptions(val));\n updateInViewport(cm);\n cm.on(\"gutterClick\", onGutterClick);\n cm.on(\"change\", onChange);\n cm.on(\"viewportChange\", onViewportChange);\n cm.on(\"fold\", onFold);\n cm.on(\"unfold\", onFold);\n cm.on(\"swapDoc\", updateInViewport);\n }\n });\n\n var Pos = CodeMirror.Pos;\n\n function State(options) {\n this.options = options;\n this.from = this.to = 0;\n }\n\n function parseOptions(opts) {\n if (opts === true) opts = {};\n if (opts.gutter == null) opts.gutter = \"CodeMirror-foldgutter\";\n if (opts.indicatorOpen == null) opts.indicatorOpen = \"CodeMirror-foldgutter-open\";\n if (opts.indicatorFolded == null) opts.indicatorFolded = \"CodeMirror-foldgutter-folded\";\n return opts;\n }\n\n function isFolded(cm, line) {\n var marks = cm.findMarksAt(Pos(line));\n for (var i = 0; i < marks.length; ++i)\n if (marks[i].__isFold && marks[i].find().from.line == line) return true;\n }\n\n function marker(spec) {\n if (typeof spec == \"string\") {\n var elt = document.createElement(\"div\");\n elt.className = spec + \" CodeMirror-guttermarker-subtle\";\n return elt;\n } else {\n return spec.cloneNode(true);\n }\n }\n\n function updateFoldInfo(cm, from, to) {\n var opts = cm.state.foldGutter.options, cur = from;\n var minSize = cm.foldOption(opts, \"minFoldSize\");\n var func = cm.foldOption(opts, \"rangeFinder\");\n cm.eachLine(from, to, function(line) {\n var mark = null;\n if (isFolded(cm, cur)) {\n mark = marker(opts.indicatorFolded);\n } else {\n var pos = Pos(cur, 0);\n var range = func && func(cm, pos);\n if (range && range.to.line - range.from.line >= minSize)\n mark = marker(opts.indicatorOpen);\n }\n cm.setGutterMarker(line, opts.gutter, mark);\n ++cur;\n });\n }\n\n function updateInViewport(cm) {\n var vp = cm.getViewport(), state = cm.state.foldGutter;\n if (!state) return;\n cm.operation(function() {\n updateFoldInfo(cm, vp.from, vp.to);\n });\n state.from = vp.from; state.to = vp.to;\n }\n\n function onGutterClick(cm, line, gutter) {\n var state = cm.state.foldGutter;\n if (!state) return;\n var opts = state.options;\n if (gutter != opts.gutter) return;\n cm.foldCode(Pos(line, 0), opts.rangeFinder);\n }\n\n function onChange(cm) {\n var state = cm.state.foldGutter;\n if (!state) return;\n var opts = state.options;\n state.from = state.to = 0;\n clearTimeout(state.changeUpdate);\n state.changeUpdate = setTimeout(function() { updateInViewport(cm); }, opts.foldOnChangeTimeSpan || 600);\n }\n\n function onViewportChange(cm) {\n var state = cm.state.foldGutter;\n if (!state) return;\n var opts = state.options;\n clearTimeout(state.changeUpdate);\n state.changeUpdate = setTimeout(function() {\n var vp = cm.getViewport();\n if (state.from == state.to || vp.from - state.to > 20 || state.from - vp.to > 20) {\n updateInViewport(cm);\n } else {\n cm.operation(function() {\n if (vp.from < state.from) {\n updateFoldInfo(cm, vp.from, state.from);\n state.from = vp.from;\n }\n if (vp.to > state.to) {\n updateFoldInfo(cm, state.to, vp.to);\n state.to = vp.to;\n }\n });\n }\n }, opts.updateViewportTimeSpan || 400);\n }\n\n function onFold(cm, from) {\n var state = cm.state.foldGutter;\n if (!state) return;\n var line = from.line;\n if (line >= state.from && line < state.to)\n updateFoldInfo(cm, line, line + 1);\n }\n});\n\n},{\"../../lib/codemirror\":10,\"./foldcode\":7}],9:[function(require,module,exports){\n// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n \"use strict\";\n\n var Pos = CodeMirror.Pos;\n function cmp(a, b) { return a.line - b.line || a.ch - b.ch; }\n\n var nameStartChar = \"A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\";\n var nameChar = nameStartChar + \"\\-\\:\\.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040\";\n var xmlTagStart = new RegExp(\"<(/?)([\" + nameStartChar + \"][\" + nameChar + \"]*)\", \"g\");\n\n function Iter(cm, line, ch, range) {\n this.line = line; this.ch = ch;\n this.cm = cm; this.text = cm.getLine(line);\n this.min = range ? range.from : cm.firstLine();\n this.max = range ? range.to - 1 : cm.lastLine();\n }\n\n function tagAt(iter, ch) {\n var type = iter.cm.getTokenTypeAt(Pos(iter.line, ch));\n return type && /\\btag\\b/.test(type);\n }\n\n function nextLine(iter) {\n if (iter.line >= iter.max) return;\n iter.ch = 0;\n iter.text = iter.cm.getLine(++iter.line);\n return true;\n }\n function prevLine(iter) {\n if (iter.line <= iter.min) return;\n iter.text = iter.cm.getLine(--iter.line);\n iter.ch = iter.text.length;\n return true;\n }\n\n function toTagEnd(iter) {\n for (;;) {\n var gt = iter.text.indexOf(\">\", iter.ch);\n if (gt == -1) { if (nextLine(iter)) continue; else return; }\n if (!tagAt(iter, gt + 1)) { iter.ch = gt + 1; continue; }\n var lastSlash = iter.text.lastIndexOf(\"/\", gt);\n var selfClose = lastSlash > -1 && !/\\S/.test(iter.text.slice(lastSlash + 1, gt));\n iter.ch = gt + 1;\n return selfClose ? \"selfClose\" : \"regular\";\n }\n }\n function toTagStart(iter) {\n for (;;) {\n var lt = iter.ch ? iter.text.lastIndexOf(\"<\", iter.ch - 1) : -1;\n if (lt == -1) { if (prevLine(iter)) continue; else return; }\n if (!tagAt(iter, lt + 1)) { iter.ch = lt; continue; }\n xmlTagStart.lastIndex = lt;\n iter.ch = lt;\n var match = xmlTagStart.exec(iter.text);\n if (match && match.index == lt) return match;\n }\n }\n\n function toNextTag(iter) {\n for (;;) {\n xmlTagStart.lastIndex = iter.ch;\n var found = xmlTagStart.exec(iter.text);\n if (!found) { if (nextLine(iter)) continue; else return; }\n if (!tagAt(iter, found.index + 1)) { iter.ch = found.index + 1; continue; }\n iter.ch = found.index + found[0].length;\n return found;\n }\n }\n function toPrevTag(iter) {\n for (;;) {\n var gt = iter.ch ? iter.text.lastIndexOf(\">\", iter.ch - 1) : -1;\n if (gt == -1) { if (prevLine(iter)) continue; else return; }\n if (!tagAt(iter, gt + 1)) { iter.ch = gt; continue; }\n var lastSlash = iter.text.lastIndexOf(\"/\", gt);\n var selfClose = lastSlash > -1 && !/\\S/.test(iter.text.slice(lastSlash + 1, gt));\n iter.ch = gt + 1;\n return selfClose ? \"selfClose\" : \"regular\";\n }\n }\n\n function findMatchingClose(iter, tag) {\n var stack = [];\n for (;;) {\n var next = toNextTag(iter), end, startLine = iter.line, startCh = iter.ch - (next ? next[0].length : 0);\n if (!next || !(end = toTagEnd(iter))) return;\n if (end == \"selfClose\") continue;\n if (next[1]) { // closing tag\n for (var i = stack.length - 1; i >= 0; --i) if (stack[i] == next[2]) {\n stack.length = i;\n break;\n }\n if (i < 0 && (!tag || tag == next[2])) return {\n tag: next[2],\n from: Pos(startLine, startCh),\n to: Pos(iter.line, iter.ch)\n };\n } else { // opening tag\n stack.push(next[2]);\n }\n }\n }\n function findMatchingOpen(iter, tag) {\n var stack = [];\n for (;;) {\n var prev = toPrevTag(iter);\n if (!prev) return;\n if (prev == \"selfClose\") { toTagStart(iter); continue; }\n var endLine = iter.line, endCh = iter.ch;\n var start = toTagStart(iter);\n if (!start) return;\n if (start[1]) { // closing tag\n stack.push(start[2]);\n } else { // opening tag\n for (var i = stack.length - 1; i >= 0; --i) if (stack[i] == start[2]) {\n stack.length = i;\n break;\n }\n if (i < 0 && (!tag || tag == start[2])) return {\n tag: start[2],\n from: Pos(iter.line, iter.ch),\n to: Pos(endLine, endCh)\n };\n }\n }\n }\n\n CodeMirror.registerHelper(\"fold\", \"xml\", function(cm, start) {\n var iter = new Iter(cm, start.line, 0);\n for (;;) {\n var openTag = toNextTag(iter), end;\n if (!openTag || iter.line != start.line || !(end = toTagEnd(iter))) return;\n if (!openTag[1] && end != \"selfClose\") {\n var start = Pos(iter.line, iter.ch);\n var close = findMatchingClose(iter, openTag[2]);\n return close && {from: start, to: close.from};\n }\n }\n });\n CodeMirror.findMatchingTag = function(cm, pos, range) {\n var iter = new Iter(cm, pos.line, pos.ch, range);\n if (iter.text.indexOf(\">\") == -1 && iter.text.indexOf(\"<\") == -1) return;\n var end = toTagEnd(iter), to = end && Pos(iter.line, iter.ch);\n var start = end && toTagStart(iter);\n if (!end || !start || cmp(iter, pos) > 0) return;\n var here = {from: Pos(iter.line, iter.ch), to: to, tag: start[2]};\n if (end == \"selfClose\") return {open: here, close: null, at: \"open\"};\n\n if (start[1]) { // closing tag\n return {open: findMatchingOpen(iter, start[2]), close: here, at: \"close\"};\n } else { // opening tag\n iter = new Iter(cm, to.line, to.ch, range);\n return {open: here, close: findMatchingClose(iter, start[2]), at: \"open\"};\n }\n };\n\n CodeMirror.findEnclosingTag = function(cm, pos, range) {\n var iter = new Iter(cm, pos.line, pos.ch, range);\n for (;;) {\n var open = findMatchingOpen(iter);\n if (!open) break;\n var forward = new Iter(cm, pos.line, pos.ch, range);\n var close = findMatchingClose(forward, open.tag);\n if (close) return {open: open, close: close};\n }\n };\n\n // Used by addon/edit/closetag.js\n CodeMirror.scanForClosingTag = function(cm, pos, name, end) {\n var iter = new Iter(cm, pos.line, pos.ch, end ? {from: 0, to: end} : null);\n return findMatchingClose(iter, name);\n };\n});\n\n},{\"../../lib/codemirror\":10}],10:[function(require,module,exports){\n// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n// This is CodeMirror (http://codemirror.net), a code editor\n// implemented in JavaScript on top of the browser's DOM.\n//\n// You can find some technical background for some of the code below\n// at http://marijnhaverbeke.nl/blog/#cm-internals .\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n module.exports = mod();\n else if (typeof define == \"function\" && define.amd) // AMD\n return define([], mod);\n else // Plain browser env\n this.CodeMirror = mod();\n})(function() {\n \"use strict\";\n\n // BROWSER SNIFFING\n\n // Kludges for bugs and behavior differences that can't be feature\n // detected are enabled based on userAgent etc sniffing.\n\n var gecko = /gecko\\/\\d/i.test(navigator.userAgent);\n // ie_uptoN means Internet Explorer version N or lower\n var ie_upto10 = /MSIE \\d/.test(navigator.userAgent);\n var ie_11up = /Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(navigator.userAgent);\n var ie = ie_upto10 || ie_11up;\n var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : ie_11up[1]);\n var webkit = /WebKit\\//.test(navigator.userAgent);\n var qtwebkit = webkit && /Qt\\/\\d+\\.\\d+/.test(navigator.userAgent);\n var chrome = /Chrome\\//.test(navigator.userAgent);\n var presto = /Opera\\//.test(navigator.userAgent);\n var safari = /Apple Computer/.test(navigator.vendor);\n var khtml = /KHTML\\//.test(navigator.userAgent);\n var mac_geMountainLion = /Mac OS X 1\\d\\D([8-9]|\\d\\d)\\D/.test(navigator.userAgent);\n var phantom = /PhantomJS/.test(navigator.userAgent);\n\n var ios = /AppleWebKit/.test(navigator.userAgent) && /Mobile\\/\\w+/.test(navigator.userAgent);\n // This is woefully incomplete. Suggestions for alternative methods welcome.\n var mobile = ios || /Android|webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(navigator.userAgent);\n var mac = ios || /Mac/.test(navigator.platform);\n var windows = /win/i.test(navigator.platform);\n\n var presto_version = presto && navigator.userAgent.match(/Version\\/(\\d*\\.\\d*)/);\n if (presto_version) presto_version = Number(presto_version[1]);\n if (presto_version && presto_version >= 15) { presto = false; webkit = true; }\n // Some browsers use the wrong event properties to signal cmd/ctrl on OS X\n var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11));\n var captureRightClick = gecko || (ie && ie_version >= 9);\n\n // Optimize some code when these features are not used.\n var sawReadOnlySpans = false, sawCollapsedSpans = false;\n\n // EDITOR CONSTRUCTOR\n\n // A CodeMirror instance represents an editor. This is the object\n // that user code is usually dealing with.\n\n function CodeMirror(place, options) {\n if (!(this instanceof CodeMirror)) return new CodeMirror(place, options);\n\n this.options = options = options ? copyObj(options) : {};\n // Determine effective options based on given values and defaults.\n copyObj(defaults, options, false);\n setGuttersForLineNumbers(options);\n\n var doc = options.value;\n if (typeof doc == \"string\") doc = new Doc(doc, options.mode);\n this.doc = doc;\n\n var display = this.display = new Display(place, doc);\n display.wrapper.CodeMirror = this;\n updateGutters(this);\n themeChanged(this);\n if (options.lineWrapping)\n this.display.wrapper.className += \" CodeMirror-wrap\";\n if (options.autofocus && !mobile) focusInput(this);\n initScrollbars(this);\n\n this.state = {\n keyMaps: [], // stores maps added by addKeyMap\n overlays: [], // highlighting overlays, as added by addOverlay\n modeGen: 0, // bumped when mode/overlay changes, used to invalidate highlighting info\n overwrite: false, focused: false,\n suppressEdits: false, // used to disable editing during key handlers when in readOnly mode\n pasteIncoming: false, cutIncoming: false, // help recognize paste/cut edits in readInput\n draggingText: false,\n highlight: new Delayed(), // stores highlight worker timeout\n keySeq: null // Unfinished key sequence\n };\n\n // Override magic textarea content restore that IE sometimes does\n // on our hidden textarea on reload\n if (ie && ie_version < 11) setTimeout(bind(resetInput, this, true), 20);\n\n registerEventHandlers(this);\n ensureGlobalHandlers();\n\n startOperation(this);\n this.curOp.forceUpdate = true;\n attachDoc(this, doc);\n\n if ((options.autofocus && !mobile) || activeElt() == display.input)\n setTimeout(bind(onFocus, this), 20);\n else\n onBlur(this);\n\n for (var opt in optionHandlers) if (optionHandlers.hasOwnProperty(opt))\n optionHandlers[opt](this, options[opt], Init);\n maybeUpdateLineNumberWidth(this);\n if (options.finishInit) options.finishInit(this);\n for (var i = 0; i < initHooks.length; ++i) initHooks[i](this);\n endOperation(this);\n // Suppress optimizelegibility in Webkit, since it breaks text\n // measuring on line wrapping boundaries.\n if (webkit && options.lineWrapping &&\n getComputedStyle(display.lineDiv).textRendering == \"optimizelegibility\")\n display.lineDiv.style.textRendering = \"auto\";\n }\n\n // DISPLAY CONSTRUCTOR\n\n // The display handles the DOM integration, both for input reading\n // and content drawing. It holds references to DOM nodes and\n // display-related state.\n\n function Display(place, doc) {\n var d = this;\n\n // The semihidden textarea that is focused when the editor is\n // focused, and receives input.\n var input = d.input = elt(\"textarea\", null, null, \"position: absolute; padding: 0; width: 1px; height: 1em; outline: none\");\n // The textarea is kept positioned near the cursor to prevent the\n // fact that it'll be scrolled into view on input from scrolling\n // our fake cursor out of view. On webkit, when wrap=off, paste is\n // very slow. So make the area wide instead.\n if (webkit) input.style.width = \"1000px\";\n else input.setAttribute(\"wrap\", \"off\");\n // If border: 0; -- iOS fails to open keyboard (issue #1287)\n if (ios) input.style.border = \"1px solid black\";\n input.setAttribute(\"autocorrect\", \"off\"); input.setAttribute(\"autocapitalize\", \"off\"); input.setAttribute(\"spellcheck\", \"false\");\n\n // Wraps and hides input textarea\n d.inputDiv = elt(\"div\", [input], null, \"overflow: hidden; position: relative; width: 3px; height: 0px;\");\n // Covers bottom-right square when both scrollbars are present.\n d.scrollbarFiller = elt(\"div\", null, \"CodeMirror-scrollbar-filler\");\n d.scrollbarFiller.setAttribute(\"not-content\", \"true\");\n // Covers bottom of gutter when coverGutterNextToScrollbar is on\n // and h scrollbar is present.\n d.gutterFiller = elt(\"div\", null, \"CodeMirror-gutter-filler\");\n d.gutterFiller.setAttribute(\"not-content\", \"true\");\n // Will contain the actual code, positioned to cover the viewport.\n d.lineDiv = elt(\"div\", null, \"CodeMirror-code\");\n // Elements are added to these to represent selection and cursors.\n d.selectionDiv = elt(\"div\", null, null, \"position: relative; z-index: 1\");\n d.cursorDiv = elt(\"div\", null, \"CodeMirror-cursors\");\n // A visibility: hidden element used to find the size of things.\n d.measure = elt(\"div\", null, \"CodeMirror-measure\");\n // When lines outside of the viewport are measured, they are drawn in this.\n d.lineMeasure = elt(\"div\", null, \"CodeMirror-measure\");\n // Wraps everything that needs to exist inside the vertically-padded coordinate system\n d.lineSpace = elt(\"div\", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv],\n null, \"position: relative; outline: none\");\n // Moved around its parent to cover visible view.\n d.mover = elt(\"div\", [elt(\"div\", [d.lineSpace], \"CodeMirror-lines\")], null, \"position: relative\");\n // Set to the height of the document, allowing scrolling.\n d.sizer = elt(\"div\", [d.mover], \"CodeMirror-sizer\");\n d.sizerWidth = null;\n // Behavior of elts with overflow: auto and padding is\n // inconsistent across browsers. This is used to ensure the\n // scrollable area is big enough.\n d.heightForcer = elt(\"div\", null, null, \"position: absolute; height: \" + scrollerGap + \"px; width: 1px;\");\n // Will contain the gutters, if any.\n d.gutters = elt(\"div\", null, \"CodeMirror-gutters\");\n d.lineGutter = null;\n // Actual scrollable element.\n d.scroller = elt(\"div\", [d.sizer, d.heightForcer, d.gutters], \"CodeMirror-scroll\");\n d.scroller.setAttribute(\"tabIndex\", \"-1\");\n // The element in which the editor lives.\n d.wrapper = elt(\"div\", [d.inputDiv, d.scrollbarFiller, d.gutterFiller, d.scroller], \"CodeMirror\");\n\n // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported)\n if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; }\n // Needed to hide big blue blinking cursor on Mobile Safari\n if (ios) input.style.width = \"0px\";\n if (!webkit) d.scroller.draggable = true;\n // Needed to handle Tab key in KHTML\n if (khtml) { d.inputDiv.style.height = \"1px\"; d.inputDiv.style.position = \"absolute\"; }\n\n if (place) {\n if (place.appendChild) place.appendChild(d.wrapper);\n else place(d.wrapper);\n }\n\n // Current rendered range (may be bigger than the view window).\n d.viewFrom = d.viewTo = doc.first;\n d.reportedViewFrom = d.reportedViewTo = doc.first;\n // Information about the rendered lines.\n d.view = [];\n d.renderedView = null;\n // Holds info about a single rendered line when it was rendered\n // for measurement, while not in view.\n d.externalMeasured = null;\n // Empty space (in pixels) above the view\n d.viewOffset = 0;\n d.lastWrapHeight = d.lastWrapWidth = 0;\n d.updateLineNumbers = null;\n\n d.nativeBarWidth = d.barHeight = d.barWidth = 0;\n d.scrollbarsClipped = false;\n\n // Used to only resize the line number gutter when necessary (when\n // the amount of lines crosses a boundary that makes its width change)\n d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null;\n // See readInput and resetInput\n d.prevInput = \"\";\n // Set to true when a non-horizontal-scrolling line widget is\n // added. As an optimization, line widget aligning is skipped when\n // this is false.\n d.alignWidgets = false;\n // Flag that indicates whether we expect input to appear real soon\n // now (after some event like 'keypress' or 'input') and are\n // polling intensively.\n d.pollingFast = false;\n // Self-resetting timeout for the poller\n d.poll = new Delayed();\n\n d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;\n\n // Tracks when resetInput has punted to just putting a short\n // string into the textarea instead of the full selection.\n d.inaccurateSelection = false;\n\n // Tracks the maximum line length so that the horizontal scrollbar\n // can be kept static when scrolling.\n d.maxLine = null;\n d.maxLineLength = 0;\n d.maxLineChanged = false;\n\n // Used for measuring wheel scrolling granularity\n d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null;\n\n // True when shift is held down.\n d.shift = false;\n\n // Used to track whether anything happened since the context menu\n // was opened.\n d.selForContextMenu = null;\n }\n\n // STATE UPDATES\n\n // Used to get the editor into a consistent state again when options change.\n\n function loadMode(cm) {\n cm.doc.mode = CodeMirror.getMode(cm.options, cm.doc.modeOption);\n resetModeState(cm);\n }\n\n function resetModeState(cm) {\n cm.doc.iter(function(line) {\n if (line.stateAfter) line.stateAfter = null;\n if (line.styles) line.styles = null;\n });\n cm.doc.frontier = cm.doc.first;\n startWorker(cm, 100);\n cm.state.modeGen++;\n if (cm.curOp) regChange(cm);\n }\n\n function wrappingChanged(cm) {\n if (cm.options.lineWrapping) {\n addClass(cm.display.wrapper, \"CodeMirror-wrap\");\n cm.display.sizer.style.minWidth = \"\";\n cm.display.sizerWidth = null;\n } else {\n rmClass(cm.display.wrapper, \"CodeMirror-wrap\");\n findMaxLine(cm);\n }\n estimateLineHeights(cm);\n regChange(cm);\n clearCaches(cm);\n setTimeout(function(){updateScrollbars(cm);}, 100);\n }\n\n // Returns a function that estimates the height of a line, to use as\n // first approximation until the line becomes visible (and is thus\n // properly measurable).\n function estimateHeight(cm) {\n var th = textHeight(cm.display), wrapping = cm.options.lineWrapping;\n var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3);\n return function(line) {\n if (lineIsHidden(cm.doc, line)) return 0;\n\n var widgetsHeight = 0;\n if (line.widgets) for (var i = 0; i < line.widgets.length; i++) {\n if (line.widgets[i].height) widgetsHeight += line.widgets[i].height;\n }\n\n if (wrapping)\n return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th;\n else\n return widgetsHeight + th;\n };\n }\n\n function estimateLineHeights(cm) {\n var doc = cm.doc, est = estimateHeight(cm);\n doc.iter(function(line) {\n var estHeight = est(line);\n if (estHeight != line.height) updateLineHeight(line, estHeight);\n });\n }\n\n function themeChanged(cm) {\n cm.display.wrapper.className = cm.display.wrapper.className.replace(/\\s*cm-s-\\S+/g, \"\") +\n cm.options.theme.replace(/(^|\\s)\\s*/g, \" cm-s-\");\n clearCaches(cm);\n }\n\n function guttersChanged(cm) {\n updateGutters(cm);\n regChange(cm);\n setTimeout(function(){alignHorizontally(cm);}, 20);\n }\n\n // Rebuild the gutter elements, ensure the margin to the left of the\n // code matches their width.\n function updateGutters(cm) {\n var gutters = cm.display.gutters, specs = cm.options.gutters;\n removeChildren(gutters);\n for (var i = 0; i < specs.length; ++i) {\n var gutterClass = specs[i];\n var gElt = gutters.appendChild(elt(\"div\", null, \"CodeMirror-gutter \" + gutterClass));\n if (gutterClass == \"CodeMirror-linenumbers\") {\n cm.display.lineGutter = gElt;\n gElt.style.width = (cm.display.lineNumWidth || 1) + \"px\";\n }\n }\n gutters.style.display = i ? \"\" : \"none\";\n updateGutterSpace(cm);\n }\n\n function updateGutterSpace(cm) {\n var width = cm.display.gutters.offsetWidth;\n cm.display.sizer.style.marginLeft = width + \"px\";\n }\n\n // Compute the character length of a line, taking into account\n // collapsed ranges (see markText) that might hide parts, and join\n // other lines onto it.\n function lineLength(line) {\n if (line.height == 0) return 0;\n var len = line.text.length, merged, cur = line;\n while (merged = collapsedSpanAtStart(cur)) {\n var found = merged.find(0, true);\n cur = found.from.line;\n len += found.from.ch - found.to.ch;\n }\n cur = line;\n while (merged = collapsedSpanAtEnd(cur)) {\n var found = merged.find(0, true);\n len -= cur.text.length - found.from.ch;\n cur = found.to.line;\n len += cur.text.length - found.to.ch;\n }\n return len;\n }\n\n // Find the longest line in the document.\n function findMaxLine(cm) {\n var d = cm.display, doc = cm.doc;\n d.maxLine = getLine(doc, doc.first);\n d.maxLineLength = lineLength(d.maxLine);\n d.maxLineChanged = true;\n doc.iter(function(line) {\n var len = lineLength(line);\n if (len > d.maxLineLength) {\n d.maxLineLength = len;\n d.maxLine = line;\n }\n });\n }\n\n // Make sure the gutters options contains the element\n // \"CodeMirror-linenumbers\" when the lineNumbers option is true.\n function setGuttersForLineNumbers(options) {\n var found = indexOf(options.gutters, \"CodeMirror-linenumbers\");\n if (found == -1 && options.lineNumbers) {\n options.gutters = options.gutters.concat([\"CodeMirror-linenumbers\"]);\n } else if (found > -1 && !options.lineNumbers) {\n options.gutters = options.gutters.slice(0);\n options.gutters.splice(found, 1);\n }\n }\n\n // SCROLLBARS\n\n // Prepare DOM reads needed to update the scrollbars. Done in one\n // shot to minimize update/measure roundtrips.\n function measureForScrollbars(cm) {\n var d = cm.display, gutterW = d.gutters.offsetWidth;\n var docH = Math.round(cm.doc.height + paddingVert(cm.display));\n return {\n clientHeight: d.scroller.clientHeight,\n viewHeight: d.wrapper.clientHeight,\n scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth,\n viewWidth: d.wrapper.clientWidth,\n barLeft: cm.options.fixedGutter ? gutterW : 0,\n docHeight: docH,\n scrollHeight: docH + scrollGap(cm) + d.barHeight,\n nativeBarWidth: d.nativeBarWidth,\n gutterWidth: gutterW\n };\n }\n\n function NativeScrollbars(place, scroll, cm) {\n this.cm = cm;\n var vert = this.vert = elt(\"div\", [elt(\"div\", null, null, \"min-width: 1px\")], \"CodeMirror-vscrollbar\");\n var horiz = this.horiz = elt(\"div\", [elt(\"div\", null, null, \"height: 100%; min-height: 1px\")], \"CodeMirror-hscrollbar\");\n place(vert); place(horiz);\n\n on(vert, \"scroll\", function() {\n if (vert.clientHeight) scroll(vert.scrollTop, \"vertical\");\n });\n on(horiz, \"scroll\", function() {\n if (horiz.clientWidth) scroll(horiz.scrollLeft, \"horizontal\");\n });\n\n this.checkedOverlay = false;\n // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8).\n if (ie && ie_version < 8) this.horiz.style.minHeight = this.vert.style.minWidth = \"18px\";\n }\n\n NativeScrollbars.prototype = copyObj({\n update: function(measure) {\n var needsH = measure.scrollWidth > measure.clientWidth + 1;\n var needsV = measure.scrollHeight > measure.clientHeight + 1;\n var sWidth = measure.nativeBarWidth;\n\n if (needsV) {\n this.vert.style.display = \"block\";\n this.vert.style.bottom = needsH ? sWidth + \"px\" : \"0\";\n var totalHeight = measure.viewHeight - (needsH ? sWidth : 0);\n // A bug in IE8 can cause this value to be negative, so guard it.\n this.vert.firstChild.style.height =\n Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + \"px\";\n } else {\n this.vert.style.display = \"\";\n this.vert.firstChild.style.height = \"0\";\n }\n\n if (needsH) {\n this.horiz.style.display = \"block\";\n this.horiz.style.right = needsV ? sWidth + \"px\" : \"0\";\n this.horiz.style.left = measure.barLeft + \"px\";\n var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0);\n this.horiz.firstChild.style.width =\n (measure.scrollWidth - measure.clientWidth + totalWidth) + \"px\";\n } else {\n this.horiz.style.display = \"\";\n this.horiz.firstChild.style.width = \"0\";\n }\n\n if (!this.checkedOverlay && measure.clientHeight > 0) {\n if (sWidth == 0) this.overlayHack();\n this.checkedOverlay = true;\n }\n\n return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0};\n },\n setScrollLeft: function(pos) {\n if (this.horiz.scrollLeft != pos) this.horiz.scrollLeft = pos;\n },\n setScrollTop: function(pos) {\n if (this.vert.scrollTop != pos) this.vert.scrollTop = pos;\n },\n overlayHack: function() {\n var w = mac && !mac_geMountainLion ? \"12px\" : \"18px\";\n this.horiz.style.minHeight = this.vert.style.minWidth = w;\n var self = this;\n var barMouseDown = function(e) {\n if (e_target(e) != self.vert && e_target(e) != self.horiz)\n operation(self.cm, onMouseDown)(e);\n };\n on(this.vert, \"mousedown\", barMouseDown);\n on(this.horiz, \"mousedown\", barMouseDown);\n },\n clear: function() {\n var parent = this.horiz.parentNode;\n parent.removeChild(this.horiz);\n parent.removeChild(this.vert);\n }\n }, NativeScrollbars.prototype);\n\n function NullScrollbars() {}\n\n NullScrollbars.prototype = copyObj({\n update: function() { return {bottom: 0, right: 0}; },\n setScrollLeft: function() {},\n setScrollTop: function() {},\n clear: function() {}\n }, NullScrollbars.prototype);\n\n CodeMirror.scrollbarModel = {\"native\": NativeScrollbars, \"null\": NullScrollbars};\n\n function initScrollbars(cm) {\n if (cm.display.scrollbars) {\n cm.display.scrollbars.clear();\n if (cm.display.scrollbars.addClass)\n rmClass(cm.display.wrapper, cm.display.scrollbars.addClass);\n }\n\n cm.display.scrollbars = new CodeMirror.scrollbarModel[cm.options.scrollbarStyle](function(node) {\n cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller);\n on(node, \"mousedown\", function() {\n if (cm.state.focused) setTimeout(bind(focusInput, cm), 0);\n });\n node.setAttribute(\"not-content\", \"true\");\n }, function(pos, axis) {\n if (axis == \"horizontal\") setScrollLeft(cm, pos);\n else setScrollTop(cm, pos);\n }, cm);\n if (cm.display.scrollbars.addClass)\n addClass(cm.display.wrapper, cm.display.scrollbars.addClass);\n }\n\n function updateScrollbars(cm, measure) {\n if (!measure) measure = measureForScrollbars(cm);\n var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight;\n updateScrollbarsInner(cm, measure);\n for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) {\n if (startWidth != cm.display.barWidth && cm.options.lineWrapping)\n updateHeightsInViewport(cm);\n updateScrollbarsInner(cm, measureForScrollbars(cm));\n startWidth = cm.display.barWidth; startHeight = cm.display.barHeight;\n }\n }\n\n // Re-synchronize the fake scrollbars with the actual size of the\n // content.\n function updateScrollbarsInner(cm, measure) {\n var d = cm.display;\n var sizes = d.scrollbars.update(measure);\n\n d.sizer.style.paddingRight = (d.barWidth = sizes.right) + \"px\";\n d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + \"px\";\n\n if (sizes.right && sizes.bottom) {\n d.scrollbarFiller.style.display = \"block\";\n d.scrollbarFiller.style.height = sizes.bottom + \"px\";\n d.scrollbarFiller.style.width = sizes.right + \"px\";\n } else d.scrollbarFiller.style.display = \"\";\n if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) {\n d.gutterFiller.style.display = \"block\";\n d.gutterFiller.style.height = sizes.bottom + \"px\";\n d.gutterFiller.style.width = measure.gutterWidth + \"px\";\n } else d.gutterFiller.style.display = \"\";\n }\n\n // Compute the lines that are visible in a given viewport (defaults\n // the the current scroll position). viewport may contain top,\n // height, and ensure (see op.scrollToPos) properties.\n function visibleLines(display, doc, viewport) {\n var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop;\n top = Math.floor(top - paddingTop(display));\n var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight;\n\n var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom);\n // Ensure is a {from: {line, ch}, to: {line, ch}} object, and\n // forces those lines into the viewport (if possible).\n if (viewport && viewport.ensure) {\n var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line;\n if (ensureFrom < from) {\n from = ensureFrom;\n to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight);\n } else if (Math.min(ensureTo, doc.lastLine()) >= to) {\n from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight);\n to = ensureTo;\n }\n }\n return {from: from, to: Math.max(to, from + 1)};\n }\n\n // LINE NUMBERS\n\n // Re-align line numbers and gutter marks to compensate for\n // horizontal scrolling.\n function alignHorizontally(cm) {\n var display = cm.display, view = display.view;\n if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) return;\n var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft;\n var gutterW = display.gutters.offsetWidth, left = comp + \"px\";\n for (var i = 0; i < view.length; i++) if (!view[i].hidden) {\n if (cm.options.fixedGutter && view[i].gutter)\n view[i].gutter.style.left = left;\n var align = view[i].alignable;\n if (align) for (var j = 0; j < align.length; j++)\n align[j].style.left = left;\n }\n if (cm.options.fixedGutter)\n display.gutters.style.left = (comp + gutterW) + \"px\";\n }\n\n // Used to ensure that the line number gutter is still the right\n // size for the current document size. Returns true when an update\n // is needed.\n function maybeUpdateLineNumberWidth(cm) {\n if (!cm.options.lineNumbers) return false;\n var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display;\n if (last.length != display.lineNumChars) {\n var test = display.measure.appendChild(elt(\"div\", [elt(\"div\", last)],\n \"CodeMirror-linenumber CodeMirror-gutter-elt\"));\n var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW;\n display.lineGutter.style.width = \"\";\n display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding);\n display.lineNumWidth = display.lineNumInnerWidth + padding;\n display.lineNumChars = display.lineNumInnerWidth ? last.length : -1;\n display.lineGutter.style.width = display.lineNumWidth + \"px\";\n updateGutterSpace(cm);\n return true;\n }\n return false;\n }\n\n function lineNumberFor(options, i) {\n return String(options.lineNumberFormatter(i + options.firstLineNumber));\n }\n\n // Computes display.scroller.scrollLeft + display.gutters.offsetWidth,\n // but using getBoundingClientRect to get a sub-pixel-accurate\n // result.\n function compensateForHScroll(display) {\n return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left;\n }\n\n // DISPLAY DRAWING\n\n function DisplayUpdate(cm, viewport, force) {\n var display = cm.display;\n\n this.viewport = viewport;\n // Store some values that we'll need later (but don't want to force a relayout for)\n this.visible = visibleLines(display, cm.doc, viewport);\n this.editorIsHidden = !display.wrapper.offsetWidth;\n this.wrapperHeight = display.wrapper.clientHeight;\n this.wrapperWidth = display.wrapper.clientWidth;\n this.oldDisplayWidth = displayWidth(cm);\n this.force = force;\n this.dims = getDimensions(cm);\n this.events = [];\n }\n\n DisplayUpdate.prototype.signal = function(emitter, type) {\n if (hasHandler(emitter, type))\n this.events.push(arguments);\n };\n DisplayUpdate.prototype.finish = function() {\n for (var i = 0; i < this.events.length; i++)\n signal.apply(null, this.events[i]);\n };\n\n function maybeClipScrollbars(cm) {\n var display = cm.display;\n if (!display.scrollbarsClipped && display.scroller.offsetWidth) {\n display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth;\n display.heightForcer.style.height = scrollGap(cm) + \"px\";\n display.sizer.style.marginBottom = -display.nativeBarWidth + \"px\";\n display.sizer.style.borderRightWidth = scrollGap(cm) + \"px\";\n display.scrollbarsClipped = true;\n }\n }\n\n // Does the actual updating of the line display. Bails out\n // (returning false) when there is nothing to be done and forced is\n // false.\n function updateDisplayIfNeeded(cm, update) {\n var display = cm.display, doc = cm.doc;\n\n if (update.editorIsHidden) {\n resetView(cm);\n return false;\n }\n\n // Bail out if the visible area is already rendered and nothing changed.\n if (!update.force &&\n update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo &&\n (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) &&\n display.renderedView == display.view && countDirtyView(cm) == 0)\n return false;\n\n if (maybeUpdateLineNumberWidth(cm)) {\n resetView(cm);\n update.dims = getDimensions(cm);\n }\n\n // Compute a suitable new viewport (from & to)\n var end = doc.first + doc.size;\n var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first);\n var to = Math.min(end, update.visible.to + cm.options.viewportMargin);\n if (display.viewFrom < from && from - display.viewFrom < 20) from = Math.max(doc.first, display.viewFrom);\n if (display.viewTo > to && display.viewTo - to < 20) to = Math.min(end, display.viewTo);\n if (sawCollapsedSpans) {\n from = visualLineNo(cm.doc, from);\n to = visualLineEndNo(cm.doc, to);\n }\n\n var different = from != display.viewFrom || to != display.viewTo ||\n display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth;\n adjustView(cm, from, to);\n\n display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom));\n // Position the mover div to align with the current scroll position\n cm.display.mover.style.top = display.viewOffset + \"px\";\n\n var toUpdate = countDirtyView(cm);\n if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view &&\n (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo))\n return false;\n\n // For big changes, we hide the enclosing element during the\n // update, since that speeds up the operations on most browsers.\n var focused = activeElt();\n if (toUpdate > 4) display.lineDiv.style.display = \"none\";\n patchDisplay(cm, display.updateLineNumbers, update.dims);\n if (toUpdate > 4) display.lineDiv.style.display = \"\";\n display.renderedView = display.view;\n // There might have been a widget with a focused element that got\n // hidden or updated, if so re-focus it.\n if (focused && activeElt() != focused && focused.offsetHeight) focused.focus();\n\n // Prevent selection and cursors from interfering with the scroll\n // width and height.\n removeChildren(display.cursorDiv);\n removeChildren(display.selectionDiv);\n display.gutters.style.height = 0;\n\n if (different) {\n display.lastWrapHeight = update.wrapperHeight;\n display.lastWrapWidth = update.wrapperWidth;\n startWorker(cm, 400);\n }\n\n display.updateLineNumbers = null;\n\n return true;\n }\n\n function postUpdateDisplay(cm, update) {\n var force = update.force, viewport = update.viewport;\n for (var first = true;; first = false) {\n if (first && cm.options.lineWrapping && update.oldDisplayWidth != displayWidth(cm)) {\n force = true;\n } else {\n force = false;\n // Clip forced viewport to actual scrollable area.\n if (viewport && viewport.top != null)\n viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)};\n // Updated line heights might result in the drawn area not\n // actually covering the viewport. Keep looping until it does.\n update.visible = visibleLines(cm.display, cm.doc, viewport);\n if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo)\n break;\n }\n if (!updateDisplayIfNeeded(cm, update)) break;\n updateHeightsInViewport(cm);\n var barMeasure = measureForScrollbars(cm);\n updateSelection(cm);\n setDocumentHeight(cm, barMeasure);\n updateScrollbars(cm, barMeasure);\n }\n\n update.signal(cm, \"update\", cm);\n if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) {\n update.signal(cm, \"viewportChange\", cm, cm.display.viewFrom, cm.display.viewTo);\n cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo;\n }\n }\n\n function updateDisplaySimple(cm, viewport) {\n var update = new DisplayUpdate(cm, viewport);\n if (updateDisplayIfNeeded(cm, update)) {\n updateHeightsInViewport(cm);\n postUpdateDisplay(cm, update);\n var barMeasure = measureForScrollbars(cm);\n updateSelection(cm);\n setDocumentHeight(cm, barMeasure);\n updateScrollbars(cm, barMeasure);\n update.finish();\n }\n }\n\n function setDocumentHeight(cm, measure) {\n cm.display.sizer.style.minHeight = measure.docHeight + \"px\";\n var total = measure.docHeight + cm.display.barHeight;\n cm.display.heightForcer.style.top = total + \"px\";\n cm.display.gutters.style.height = Math.max(total + scrollGap(cm), measure.clientHeight) + \"px\";\n }\n\n // Read the actual heights of the rendered lines, and update their\n // stored heights to match.\n function updateHeightsInViewport(cm) {\n var display = cm.display;\n var prevBottom = display.lineDiv.offsetTop;\n for (var i = 0; i < display.view.length; i++) {\n var cur = display.view[i], height;\n if (cur.hidden) continue;\n if (ie && ie_version < 8) {\n var bot = cur.node.offsetTop + cur.node.offsetHeight;\n height = bot - prevBottom;\n prevBottom = bot;\n } else {\n var box = cur.node.getBoundingClientRect();\n height = box.bottom - box.top;\n }\n var diff = cur.line.height - height;\n if (height < 2) height = textHeight(display);\n if (diff > .001 || diff < -.001) {\n updateLineHeight(cur.line, height);\n updateWidgetHeight(cur.line);\n if (cur.rest) for (var j = 0; j < cur.rest.length; j++)\n updateWidgetHeight(cur.rest[j]);\n }\n }\n }\n\n // Read and store the height of line widgets associated with the\n // given line.\n function updateWidgetHeight(line) {\n if (line.widgets) for (var i = 0; i < line.widgets.length; ++i)\n line.widgets[i].height = line.widgets[i].node.offsetHeight;\n }\n\n // Do a bulk-read of the DOM positions and sizes needed to draw the\n // view, so that we don't interleave reading and writing to the DOM.\n function getDimensions(cm) {\n var d = cm.display, left = {}, width = {};\n var gutterLeft = d.gutters.clientLeft;\n for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) {\n left[cm.options.gutters[i]] = n.offsetLeft + n.clientLeft + gutterLeft;\n width[cm.options.gutters[i]] = n.clientWidth;\n }\n return {fixedPos: compensateForHScroll(d),\n gutterTotalWidth: d.gutters.offsetWidth,\n gutterLeft: left,\n gutterWidth: width,\n wrapperWidth: d.wrapper.clientWidth};\n }\n\n // Sync the actual display DOM structure with display.view, removing\n // nodes for lines that are no longer in view, and creating the ones\n // that are not there yet, and updating the ones that are out of\n // date.\n function patchDisplay(cm, updateNumbersFrom, dims) {\n var display = cm.display, lineNumbers = cm.options.lineNumbers;\n var container = display.lineDiv, cur = container.firstChild;\n\n function rm(node) {\n var next = node.nextSibling;\n // Works around a throw-scroll bug in OS X Webkit\n if (webkit && mac && cm.display.currentWheelTarget == node)\n node.style.display = \"none\";\n else\n node.parentNode.removeChild(node);\n return next;\n }\n\n var view = display.view, lineN = display.viewFrom;\n // Loop over the elements in the view, syncing cur (the DOM nodes\n // in display.lineDiv) with the view as we go.\n for (var i = 0; i < view.length; i++) {\n var lineView = view[i];\n if (lineView.hidden) {\n } else if (!lineView.node) { // Not drawn yet\n var node = buildLineElement(cm, lineView, lineN, dims);\n container.insertBefore(node, cur);\n } else { // Already drawn\n while (cur != lineView.node) cur = rm(cur);\n var updateNumber = lineNumbers && updateNumbersFrom != null &&\n updateNumbersFrom <= lineN && lineView.lineNumber;\n if (lineView.changes) {\n if (indexOf(lineView.changes, \"gutter\") > -1) updateNumber = false;\n updateLineForChanges(cm, lineView, lineN, dims);\n }\n if (updateNumber) {\n removeChildren(lineView.lineNumber);\n lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN)));\n }\n cur = lineView.node.nextSibling;\n }\n lineN += lineView.size;\n }\n while (cur) cur = rm(cur);\n }\n\n // When an aspect of a line changes, a string is added to\n // lineView.changes. This updates the relevant part of the line's\n // DOM structure.\n function updateLineForChanges(cm, lineView, lineN, dims) {\n for (var j = 0; j < lineView.changes.length; j++) {\n var type = lineView.changes[j];\n if (type == \"text\") updateLineText(cm, lineView);\n else if (type == \"gutter\") updateLineGutter(cm, lineView, lineN, dims);\n else if (type == \"class\") updateLineClasses(lineView);\n else if (type == \"widget\") updateLineWidgets(lineView, dims);\n }\n lineView.changes = null;\n }\n\n // Lines with gutter elements, widgets or a background class need to\n // be wrapped, and have the extra elements added to the wrapper div\n function ensureLineWrapped(lineView) {\n if (lineView.node == lineView.text) {\n lineView.node = elt(\"div\", null, null, \"position: relative\");\n if (lineView.text.parentNode)\n lineView.text.parentNode.replaceChild(lineView.node, lineView.text);\n lineView.node.appendChild(lineView.text);\n if (ie && ie_version < 8) lineView.node.style.zIndex = 2;\n }\n return lineView.node;\n }\n\n function updateLineBackground(lineView) {\n var cls = lineView.bgClass ? lineView.bgClass + \" \" + (lineView.line.bgClass || \"\") : lineView.line.bgClass;\n if (cls) cls += \" CodeMirror-linebackground\";\n if (lineView.background) {\n if (cls) lineView.background.className = cls;\n else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null; }\n } else if (cls) {\n var wrap = ensureLineWrapped(lineView);\n lineView.background = wrap.insertBefore(elt(\"div\", null, cls), wrap.firstChild);\n }\n }\n\n // Wrapper around buildLineContent which will reuse the structure\n // in display.externalMeasured when possible.\n function getLineContent(cm, lineView) {\n var ext = cm.display.externalMeasured;\n if (ext && ext.line == lineView.line) {\n cm.display.externalMeasured = null;\n lineView.measure = ext.measure;\n return ext.built;\n }\n return buildLineContent(cm, lineView);\n }\n\n // Redraw the line's text. Interacts with the background and text\n // classes because the mode may output tokens that influence these\n // classes.\n function updateLineText(cm, lineView) {\n var cls = lineView.text.className;\n var built = getLineContent(cm, lineView);\n if (lineView.text == lineView.node) lineView.node = built.pre;\n lineView.text.parentNode.replaceChild(built.pre, lineView.text);\n lineView.text = built.pre;\n if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) {\n lineView.bgClass = built.bgClass;\n lineView.textClass = built.textClass;\n updateLineClasses(lineView);\n } else if (cls) {\n lineView.text.className = cls;\n }\n }\n\n function updateLineClasses(lineView) {\n updateLineBackground(lineView);\n if (lineView.line.wrapClass)\n ensureLineWrapped(lineView).className = lineView.line.wrapClass;\n else if (lineView.node != lineView.text)\n lineView.node.className = \"\";\n var textClass = lineView.textClass ? lineView.textClass + \" \" + (lineView.line.textClass || \"\") : lineView.line.textClass;\n lineView.text.className = textClass || \"\";\n }\n\n function updateLineGutter(cm, lineView, lineN, dims) {\n if (lineView.gutter) {\n lineView.node.removeChild(lineView.gutter);\n lineView.gutter = null;\n }\n var markers = lineView.line.gutterMarkers;\n if (cm.options.lineNumbers || markers) {\n var wrap = ensureLineWrapped(lineView);\n var gutterWrap = lineView.gutter =\n wrap.insertBefore(elt(\"div\", null, \"CodeMirror-gutter-wrapper\", \"left: \" +\n (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) +\n \"px; width: \" + dims.gutterTotalWidth + \"px\"),\n lineView.text);\n if (lineView.line.gutterClass)\n gutterWrap.className += \" \" + lineView.line.gutterClass;\n if (cm.options.lineNumbers && (!markers || !markers[\"CodeMirror-linenumbers\"]))\n lineView.lineNumber = gutterWrap.appendChild(\n elt(\"div\", lineNumberFor(cm.options, lineN),\n \"CodeMirror-linenumber CodeMirror-gutter-elt\",\n \"left: \" + dims.gutterLeft[\"CodeMirror-linenumbers\"] + \"px; width: \"\n + cm.display.lineNumInnerWidth + \"px\"));\n if (markers) for (var k = 0; k < cm.options.gutters.length; ++k) {\n var id = cm.options.gutters[k], found = markers.hasOwnProperty(id) && markers[id];\n if (found)\n gutterWrap.appendChild(elt(\"div\", [found], \"CodeMirror-gutter-elt\", \"left: \" +\n dims.gutterLeft[id] + \"px; width: \" + dims.gutterWidth[id] + \"px\"));\n }\n }\n }\n\n function updateLineWidgets(lineView, dims) {\n if (lineView.alignable) lineView.alignable = null;\n for (var node = lineView.node.firstChild, next; node; node = next) {\n var next = node.nextSibling;\n if (node.className == \"CodeMirror-linewidget\")\n lineView.node.removeChild(node);\n }\n insertLineWidgets(lineView, dims);\n }\n\n // Build a line's DOM representation from scratch\n function buildLineElement(cm, lineView, lineN, dims) {\n var built = getLineContent(cm, lineView);\n lineView.text = lineView.node = built.pre;\n if (built.bgClass) lineView.bgClass = built.bgClass;\n if (built.textClass) lineView.textClass = built.textClass;\n\n updateLineClasses(lineView);\n updateLineGutter(cm, lineView, lineN, dims);\n insertLineWidgets(lineView, dims);\n return lineView.node;\n }\n\n // A lineView may contain multiple logical lines (when merged by\n // collapsed spans). The widgets for all of them need to be drawn.\n function insertLineWidgets(lineView, dims) {\n insertLineWidgetsFor(lineView.line, lineView, dims, true);\n if (lineView.rest) for (var i = 0; i < lineView.rest.length; i++)\n insertLineWidgetsFor(lineView.rest[i], lineView, dims, false);\n }\n\n function insertLineWidgetsFor(line, lineView, dims, allowAbove) {\n if (!line.widgets) return;\n var wrap = ensureLineWrapped(lineView);\n for (var i = 0, ws = line.widgets; i < ws.length; ++i) {\n var widget = ws[i], node = elt(\"div\", [widget.node], \"CodeMirror-linewidget\");\n if (!widget.handleMouseEvents) node.setAttribute(\"cm-ignore-events\", \"true\");\n positionLineWidget(widget, node, lineView, dims);\n if (allowAbove && widget.above)\n wrap.insertBefore(node, lineView.gutter || lineView.text);\n else\n wrap.appendChild(node);\n signalLater(widget, \"redraw\");\n }\n }\n\n function positionLineWidget(widget, node, lineView, dims) {\n if (widget.noHScroll) {\n (lineView.alignable || (lineView.alignable = [])).push(node);\n var width = dims.wrapperWidth;\n node.style.left = dims.fixedPos + \"px\";\n if (!widget.coverGutter) {\n width -= dims.gutterTotalWidth;\n node.style.paddingLeft = dims.gutterTotalWidth + \"px\";\n }\n node.style.width = width + \"px\";\n }\n if (widget.coverGutter) {\n node.style.zIndex = 5;\n node.style.position = \"relative\";\n if (!widget.noHScroll) node.style.marginLeft = -dims.gutterTotalWidth + \"px\";\n }\n }\n\n // POSITION OBJECT\n\n // A Pos instance represents a position within the text.\n var Pos = CodeMirror.Pos = function(line, ch) {\n if (!(this instanceof Pos)) return new Pos(line, ch);\n this.line = line; this.ch = ch;\n };\n\n // Compare two positions, return 0 if they are the same, a negative\n // number when a is less, and a positive number otherwise.\n var cmp = CodeMirror.cmpPos = function(a, b) { return a.line - b.line || a.ch - b.ch; };\n\n function copyPos(x) {return Pos(x.line, x.ch);}\n function maxPos(a, b) { return cmp(a, b) < 0 ? b : a; }\n function minPos(a, b) { return cmp(a, b) < 0 ? a : b; }\n\n // SELECTION / CURSOR\n\n // Selection objects are immutable. A new one is created every time\n // the selection changes. A selection is one or more non-overlapping\n // (and non-touching) ranges, sorted, and an integer that indicates\n // which one is the primary selection (the one that's scrolled into\n // view, that getCursor returns, etc).\n function Selection(ranges, primIndex) {\n this.ranges = ranges;\n this.primIndex = primIndex;\n }\n\n Selection.prototype = {\n primary: function() { return this.ranges[this.primIndex]; },\n equals: function(other) {\n if (other == this) return true;\n if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) return false;\n for (var i = 0; i < this.ranges.length; i++) {\n var here = this.ranges[i], there = other.ranges[i];\n if (cmp(here.anchor, there.anchor) != 0 || cmp(here.head, there.head) != 0) return false;\n }\n return true;\n },\n deepCopy: function() {\n for (var out = [], i = 0; i < this.ranges.length; i++)\n out[i] = new Range(copyPos(this.ranges[i].anchor), copyPos(this.ranges[i].head));\n return new Selection(out, this.primIndex);\n },\n somethingSelected: function() {\n for (var i = 0; i < this.ranges.length; i++)\n if (!this.ranges[i].empty()) return true;\n return false;\n },\n contains: function(pos, end) {\n if (!end) end = pos;\n for (var i = 0; i < this.ranges.length; i++) {\n var range = this.ranges[i];\n if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0)\n return i;\n }\n return -1;\n }\n };\n\n function Range(anchor, head) {\n this.anchor = anchor; this.head = head;\n }\n\n Range.prototype = {\n from: function() { return minPos(this.anchor, this.head); },\n to: function() { return maxPos(this.anchor, this.head); },\n empty: function() {\n return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch;\n }\n };\n\n // Take an unsorted, potentially overlapping set of ranges, and\n // build a selection out of it. 'Consumes' ranges array (modifying\n // it).\n function normalizeSelection(ranges, primIndex) {\n var prim = ranges[primIndex];\n ranges.sort(function(a, b) { return cmp(a.from(), b.from()); });\n primIndex = indexOf(ranges, prim);\n for (var i = 1; i < ranges.length; i++) {\n var cur = ranges[i], prev = ranges[i - 1];\n if (cmp(prev.to(), cur.from()) >= 0) {\n var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to());\n var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head;\n if (i <= primIndex) --primIndex;\n ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to));\n }\n }\n return new Selection(ranges, primIndex);\n }\n\n function simpleSelection(anchor, head) {\n return new Selection([new Range(anchor, head || anchor)], 0);\n }\n\n // Most of the external API clips given positions to make sure they\n // actually exist within the document.\n function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1));}\n function clipPos(doc, pos) {\n if (pos.line < doc.first) return Pos(doc.first, 0);\n var last = doc.first + doc.size - 1;\n if (pos.line > last) return Pos(last, getLine(doc, last).text.length);\n return clipToLen(pos, getLine(doc, pos.line).text.length);\n }\n function clipToLen(pos, linelen) {\n var ch = pos.ch;\n if (ch == null || ch > linelen) return Pos(pos.line, linelen);\n else if (ch < 0) return Pos(pos.line, 0);\n else return pos;\n }\n function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size;}\n function clipPosArray(doc, array) {\n for (var out = [], i = 0; i < array.length; i++) out[i] = clipPos(doc, array[i]);\n return out;\n }\n\n // SELECTION UPDATES\n\n // The 'scroll' parameter given to many of these indicated whether\n // the new cursor position should be scrolled into view after\n // modifying the selection.\n\n // If shift is held or the extend flag is set, extends a range to\n // include a given position (and optionally a second position).\n // Otherwise, simply returns the range between the given positions.\n // Used for cursor motion and such.\n function extendRange(doc, range, head, other) {\n if (doc.cm && doc.cm.display.shift || doc.extend) {\n var anchor = range.anchor;\n if (other) {\n var posBefore = cmp(head, anchor) < 0;\n if (posBefore != (cmp(other, anchor) < 0)) {\n anchor = head;\n head = other;\n } else if (posBefore != (cmp(head, other) < 0)) {\n head = other;\n }\n }\n return new Range(anchor, head);\n } else {\n return new Range(other || head, head);\n }\n }\n\n // Extend the primary selection range, discard the rest.\n function extendSelection(doc, head, other, options) {\n setSelection(doc, new Selection([extendRange(doc, doc.sel.primary(), head, other)], 0), options);\n }\n\n // Extend all selections (pos is an array of selections with length\n // equal the number of selections)\n function extendSelections(doc, heads, options) {\n for (var out = [], i = 0; i < doc.sel.ranges.length; i++)\n out[i] = extendRange(doc, doc.sel.ranges[i], heads[i], null);\n var newSel = normalizeSelection(out, doc.sel.primIndex);\n setSelection(doc, newSel, options);\n }\n\n // Updates a single range in the selection.\n function replaceOneSelection(doc, i, range, options) {\n var ranges = doc.sel.ranges.slice(0);\n ranges[i] = range;\n setSelection(doc, normalizeSelection(ranges, doc.sel.primIndex), options);\n }\n\n // Reset the selection to a single range.\n function setSimpleSelection(doc, anchor, head, options) {\n setSelection(doc, simpleSelection(anchor, head), options);\n }\n\n // Give beforeSelectionChange handlers a change to influence a\n // selection update.\n function filterSelectionChange(doc, sel) {\n var obj = {\n ranges: sel.ranges,\n update: function(ranges) {\n this.ranges = [];\n for (var i = 0; i < ranges.length; i++)\n this.ranges[i] = new Range(clipPos(doc, ranges[i].anchor),\n clipPos(doc, ranges[i].head));\n }\n };\n signal(doc, \"beforeSelectionChange\", doc, obj);\n if (doc.cm) signal(doc.cm, \"beforeSelectionChange\", doc.cm, obj);\n if (obj.ranges != sel.ranges) return normalizeSelection(obj.ranges, obj.ranges.length - 1);\n else return sel;\n }\n\n function setSelectionReplaceHistory(doc, sel, options) {\n var done = doc.history.done, last = lst(done);\n if (last && last.ranges) {\n done[done.length - 1] = sel;\n setSelectionNoUndo(doc, sel, options);\n } else {\n setSelection(doc, sel, options);\n }\n }\n\n // Set a new selection.\n function setSelection(doc, sel, options) {\n setSelectionNoUndo(doc, sel, options);\n addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options);\n }\n\n function setSelectionNoUndo(doc, sel, options) {\n if (hasHandler(doc, \"beforeSelectionChange\") || doc.cm && hasHandler(doc.cm, \"beforeSelectionChange\"))\n sel = filterSelectionChange(doc, sel);\n\n var bias = options && options.bias ||\n (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1);\n setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true));\n\n if (!(options && options.scroll === false) && doc.cm)\n ensureCursorVisible(doc.cm);\n }\n\n function setSelectionInner(doc, sel) {\n if (sel.equals(doc.sel)) return;\n\n doc.sel = sel;\n\n if (doc.cm) {\n doc.cm.curOp.updateInput = doc.cm.curOp.selectionChanged = true;\n signalCursorActivity(doc.cm);\n }\n signalLater(doc, \"cursorActivity\", doc);\n }\n\n // Verify that the selection does not partially select any atomic\n // marked ranges.\n function reCheckSelection(doc) {\n setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false), sel_dontScroll);\n }\n\n // Return a selection that does not partially select any atomic\n // ranges.\n function skipAtomicInSelection(doc, sel, bias, mayClear) {\n var out;\n for (var i = 0; i < sel.ranges.length; i++) {\n var range = sel.ranges[i];\n var newAnchor = skipAtomic(doc, range.anchor, bias, mayClear);\n var newHead = skipAtomic(doc, range.head, bias, mayClear);\n if (out || newAnchor != range.anchor || newHead != range.head) {\n if (!out) out = sel.ranges.slice(0, i);\n out[i] = new Range(newAnchor, newHead);\n }\n }\n return out ? normalizeSelection(out, sel.primIndex) : sel;\n }\n\n // Ensure a given position is not inside an atomic range.\n function skipAtomic(doc, pos, bias, mayClear) {\n var flipped = false, curPos = pos;\n var dir = bias || 1;\n doc.cantEdit = false;\n search: for (;;) {\n var line = getLine(doc, curPos.line);\n if (line.markedSpans) {\n for (var i = 0; i < line.markedSpans.length; ++i) {\n var sp = line.markedSpans[i], m = sp.marker;\n if ((sp.from == null || (m.inclusiveLeft ? sp.from <= curPos.ch : sp.from < curPos.ch)) &&\n (sp.to == null || (m.inclusiveRight ? sp.to >= curPos.ch : sp.to > curPos.ch))) {\n if (mayClear) {\n signal(m, \"beforeCursorEnter\");\n if (m.explicitlyCleared) {\n if (!line.markedSpans) break;\n else {--i; continue;}\n }\n }\n if (!m.atomic) continue;\n var newPos = m.find(dir < 0 ? -1 : 1);\n if (cmp(newPos, curPos) == 0) {\n newPos.ch += dir;\n if (newPos.ch < 0) {\n if (newPos.line > doc.first) newPos = clipPos(doc, Pos(newPos.line - 1));\n else newPos = null;\n } else if (newPos.ch > line.text.length) {\n if (newPos.line < doc.first + doc.size - 1) newPos = Pos(newPos.line + 1, 0);\n else newPos = null;\n }\n if (!newPos) {\n if (flipped) {\n // Driven in a corner -- no valid cursor position found at all\n // -- try again *with* clearing, if we didn't already\n if (!mayClear) return skipAtomic(doc, pos, bias, true);\n // Otherwise, turn off editing until further notice, and return the start of the doc\n doc.cantEdit = true;\n return Pos(doc.first, 0);\n }\n flipped = true; newPos = pos; dir = -dir;\n }\n }\n curPos = newPos;\n continue search;\n }\n }\n }\n return curPos;\n }\n }\n\n // SELECTION DRAWING\n\n // Redraw the selection and/or cursor\n function drawSelection(cm) {\n var display = cm.display, doc = cm.doc, result = {};\n var curFragment = result.cursors = document.createDocumentFragment();\n var selFragment = result.selection = document.createDocumentFragment();\n\n for (var i = 0; i < doc.sel.ranges.length; i++) {\n var range = doc.sel.ranges[i];\n var collapsed = range.empty();\n if (collapsed || cm.options.showCursorWhenSelecting)\n drawSelectionCursor(cm, range, curFragment);\n if (!collapsed)\n drawSelectionRange(cm, range, selFragment);\n }\n\n // Move the hidden textarea near the cursor to prevent scrolling artifacts\n if (cm.options.moveInputWithCursor) {\n var headPos = cursorCoords(cm, doc.sel.primary().head, \"div\");\n var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect();\n result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10,\n headPos.top + lineOff.top - wrapOff.top));\n result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10,\n headPos.left + lineOff.left - wrapOff.left));\n }\n\n return result;\n }\n\n function showSelection(cm, drawn) {\n removeChildrenAndAdd(cm.display.cursorDiv, drawn.cursors);\n removeChildrenAndAdd(cm.display.selectionDiv, drawn.selection);\n if (drawn.teTop != null) {\n cm.display.inputDiv.style.top = drawn.teTop + \"px\";\n cm.display.inputDiv.style.left = drawn.teLeft + \"px\";\n }\n }\n\n function updateSelection(cm) {\n showSelection(cm, drawSelection(cm));\n }\n\n // Draws a cursor for the given range\n function drawSelectionCursor(cm, range, output) {\n var pos = cursorCoords(cm, range.head, \"div\", null, null, !cm.options.singleCursorHeightPerLine);\n\n var cursor = output.appendChild(elt(\"div\", \"\\u00a0\", \"CodeMirror-cursor\"));\n cursor.style.left = pos.left + \"px\";\n cursor.style.top = pos.top + \"px\";\n cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + \"px\";\n\n if (pos.other) {\n // Secondary cursor, shown when on a 'jump' in bi-directional text\n var otherCursor = output.appendChild(elt(\"div\", \"\\u00a0\", \"CodeMirror-cursor CodeMirror-secondarycursor\"));\n otherCursor.style.display = \"\";\n otherCursor.style.left = pos.other.left + \"px\";\n otherCursor.style.top = pos.other.top + \"px\";\n otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + \"px\";\n }\n }\n\n // Draws the given range as a highlighted selection\n function drawSelectionRange(cm, range, output) {\n var display = cm.display, doc = cm.doc;\n var fragment = document.createDocumentFragment();\n var padding = paddingH(cm.display), leftSide = padding.left;\n var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right;\n\n function add(left, top, width, bottom) {\n if (top < 0) top = 0;\n top = Math.round(top);\n bottom = Math.round(bottom);\n fragment.appendChild(elt(\"div\", null, \"CodeMirror-selected\", \"position: absolute; left: \" + left +\n \"px; top: \" + top + \"px; width: \" + (width == null ? rightSide - left : width) +\n \"px; height: \" + (bottom - top) + \"px\"));\n }\n\n function drawForLine(line, fromArg, toArg) {\n var lineObj = getLine(doc, line);\n var lineLen = lineObj.text.length;\n var start, end;\n function coords(ch, bias) {\n return charCoords(cm, Pos(line, ch), \"div\", lineObj, bias);\n }\n\n iterateBidiSections(getOrder(lineObj), fromArg || 0, toArg == null ? lineLen : toArg, function(from, to, dir) {\n var leftPos = coords(from, \"left\"), rightPos, left, right;\n if (from == to) {\n rightPos = leftPos;\n left = right = leftPos.left;\n } else {\n rightPos = coords(to - 1, \"right\");\n if (dir == \"rtl\") { var tmp = leftPos; leftPos = rightPos; rightPos = tmp; }\n left = leftPos.left;\n right = rightPos.right;\n }\n if (fromArg == null && from == 0) left = leftSide;\n if (rightPos.top - leftPos.top > 3) { // Different lines, draw top part\n add(left, leftPos.top, null, leftPos.bottom);\n left = leftSide;\n if (leftPos.bottom < rightPos.top) add(left, leftPos.bottom, null, rightPos.top);\n }\n if (toArg == null && to == lineLen) right = rightSide;\n if (!start || leftPos.top < start.top || leftPos.top == start.top && leftPos.left < start.left)\n start = leftPos;\n if (!end || rightPos.bottom > end.bottom || rightPos.bottom == end.bottom && rightPos.right > end.right)\n end = rightPos;\n if (left < leftSide + 1) left = leftSide;\n add(left, rightPos.top, right - left, rightPos.bottom);\n });\n return {start: start, end: end};\n }\n\n var sFrom = range.from(), sTo = range.to();\n if (sFrom.line == sTo.line) {\n drawForLine(sFrom.line, sFrom.ch, sTo.ch);\n } else {\n var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line);\n var singleVLine = visualLine(fromLine) == visualLine(toLine);\n var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end;\n var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start;\n if (singleVLine) {\n if (leftEnd.top < rightStart.top - 2) {\n add(leftEnd.right, leftEnd.top, null, leftEnd.bottom);\n add(leftSide, rightStart.top, rightStart.left, rightStart.bottom);\n } else {\n add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom);\n }\n }\n if (leftEnd.bottom < rightStart.top)\n add(leftSide, leftEnd.bottom, null, rightStart.top);\n }\n\n output.appendChild(fragment);\n }\n\n // Cursor-blinking\n function restartBlink(cm) {\n if (!cm.state.focused) return;\n var display = cm.display;\n clearInterval(display.blinker);\n var on = true;\n display.cursorDiv.style.visibility = \"\";\n if (cm.options.cursorBlinkRate > 0)\n display.blinker = setInterval(function() {\n display.cursorDiv.style.visibility = (on = !on) ? \"\" : \"hidden\";\n }, cm.options.cursorBlinkRate);\n else if (cm.options.cursorBlinkRate < 0)\n display.cursorDiv.style.visibility = \"hidden\";\n }\n\n // HIGHLIGHT WORKER\n\n function startWorker(cm, time) {\n if (cm.doc.mode.startState && cm.doc.frontier < cm.display.viewTo)\n cm.state.highlight.set(time, bind(highlightWorker, cm));\n }\n\n function highlightWorker(cm) {\n var doc = cm.doc;\n if (doc.frontier < doc.first) doc.frontier = doc.first;\n if (doc.frontier >= cm.display.viewTo) return;\n var end = +new Date + cm.options.workTime;\n var state = copyState(doc.mode, getStateBefore(cm, doc.frontier));\n var changedLines = [];\n\n doc.iter(doc.frontier, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function(line) {\n if (doc.frontier >= cm.display.viewFrom) { // Visible\n var oldStyles = line.styles;\n var highlighted = highlightLine(cm, line, state, true);\n line.styles = highlighted.styles;\n var oldCls = line.styleClasses, newCls = highlighted.classes;\n if (newCls) line.styleClasses = newCls;\n else if (oldCls) line.styleClasses = null;\n var ischange = !oldStyles || oldStyles.length != line.styles.length ||\n oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass);\n for (var i = 0; !ischange && i < oldStyles.length; ++i) ischange = oldStyles[i] != line.styles[i];\n if (ischange) changedLines.push(doc.frontier);\n line.stateAfter = copyState(doc.mode, state);\n } else {\n processLine(cm, line.text, state);\n line.stateAfter = doc.frontier % 5 == 0 ? copyState(doc.mode, state) : null;\n }\n ++doc.frontier;\n if (+new Date > end) {\n startWorker(cm, cm.options.workDelay);\n return true;\n }\n });\n if (changedLines.length) runInOp(cm, function() {\n for (var i = 0; i < changedLines.length; i++)\n regLineChange(cm, changedLines[i], \"text\");\n });\n }\n\n // Finds the line to start with when starting a parse. Tries to\n // find a line with a stateAfter, so that it can start with a\n // valid state. If that fails, it returns the line with the\n // smallest indentation, which tends to need the least context to\n // parse correctly.\n function findStartLine(cm, n, precise) {\n var minindent, minline, doc = cm.doc;\n var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100);\n for (var search = n; search > lim; --search) {\n if (search <= doc.first) return doc.first;\n var line = getLine(doc, search - 1);\n if (line.stateAfter && (!precise || search <= doc.frontier)) return search;\n var indented = countColumn(line.text, null, cm.options.tabSize);\n if (minline == null || minindent > indented) {\n minline = search - 1;\n minindent = indented;\n }\n }\n return minline;\n }\n\n function getStateBefore(cm, n, precise) {\n var doc = cm.doc, display = cm.display;\n if (!doc.mode.startState) return true;\n var pos = findStartLine(cm, n, precise), state = pos > doc.first && getLine(doc, pos-1).stateAfter;\n if (!state) state = startState(doc.mode);\n else state = copyState(doc.mode, state);\n doc.iter(pos, n, function(line) {\n processLine(cm, line.text, state);\n var save = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo;\n line.stateAfter = save ? copyState(doc.mode, state) : null;\n ++pos;\n });\n if (precise) doc.frontier = pos;\n return state;\n }\n\n // POSITION MEASUREMENT\n\n function paddingTop(display) {return display.lineSpace.offsetTop;}\n function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight;}\n function paddingH(display) {\n if (display.cachedPaddingH) return display.cachedPaddingH;\n var e = removeChildrenAndAdd(display.measure, elt(\"pre\", \"x\"));\n var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle;\n var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)};\n if (!isNaN(data.left) && !isNaN(data.right)) display.cachedPaddingH = data;\n return data;\n }\n\n function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth; }\n function displayWidth(cm) {\n return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth;\n }\n function displayHeight(cm) {\n return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight;\n }\n\n // Ensure the lineView.wrapping.heights array is populated. This is\n // an array of bottom offsets for the lines that make up a drawn\n // line. When lineWrapping is on, there might be more than one\n // height.\n function ensureLineHeights(cm, lineView, rect) {\n var wrapping = cm.options.lineWrapping;\n var curWidth = wrapping && displayWidth(cm);\n if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) {\n var heights = lineView.measure.heights = [];\n if (wrapping) {\n lineView.measure.width = curWidth;\n var rects = lineView.text.firstChild.getClientRects();\n for (var i = 0; i < rects.length - 1; i++) {\n var cur = rects[i], next = rects[i + 1];\n if (Math.abs(cur.bottom - next.bottom) > 2)\n heights.push((cur.bottom + next.top) / 2 - rect.top);\n }\n }\n heights.push(rect.bottom - rect.top);\n }\n }\n\n // Find a line map (mapping character offsets to text nodes) and a\n // measurement cache for the given line number. (A line view might\n // contain multiple lines when collapsed ranges are present.)\n function mapFromLineView(lineView, line, lineN) {\n if (lineView.line == line)\n return {map: lineView.measure.map, cache: lineView.measure.cache};\n for (var i = 0; i < lineView.rest.length; i++)\n if (lineView.rest[i] == line)\n return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]};\n for (var i = 0; i < lineView.rest.length; i++)\n if (lineNo(lineView.rest[i]) > lineN)\n return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i], before: true};\n }\n\n // Render a line into the hidden node display.externalMeasured. Used\n // when measurement is needed for a line that's not in the viewport.\n function updateExternalMeasurement(cm, line) {\n line = visualLine(line);\n var lineN = lineNo(line);\n var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN);\n view.lineN = lineN;\n var built = view.built = buildLineContent(cm, view);\n view.text = built.pre;\n removeChildrenAndAdd(cm.display.lineMeasure, built.pre);\n return view;\n }\n\n // Get a {top, bottom, left, right} box (in line-local coordinates)\n // for a given character.\n function measureChar(cm, line, ch, bias) {\n return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias);\n }\n\n // Find a line view that corresponds to the given line number.\n function findViewForLine(cm, lineN) {\n if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo)\n return cm.display.view[findViewIndex(cm, lineN)];\n var ext = cm.display.externalMeasured;\n if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size)\n return ext;\n }\n\n // Measurement can be split in two steps, the set-up work that\n // applies to the whole line, and the measurement of the actual\n // character. Functions like coordsChar, that need to do a lot of\n // measurements in a row, can thus ensure that the set-up work is\n // only done once.\n function prepareMeasureForLine(cm, line) {\n var lineN = lineNo(line);\n var view = findViewForLine(cm, lineN);\n if (view && !view.text)\n view = null;\n else if (view && view.changes)\n updateLineForChanges(cm, view, lineN, getDimensions(cm));\n if (!view)\n view = updateExternalMeasurement(cm, line);\n\n var info = mapFromLineView(view, line, lineN);\n return {\n line: line, view: view, rect: null,\n map: info.map, cache: info.cache, before: info.before,\n hasHeights: false\n };\n }\n\n // Given a prepared measurement object, measures the position of an\n // actual character (or fetches it from the cache).\n function measureCharPrepared(cm, prepared, ch, bias, varHeight) {\n if (prepared.before) ch = -1;\n var key = ch + (bias || \"\"), found;\n if (prepared.cache.hasOwnProperty(key)) {\n found = prepared.cache[key];\n } else {\n if (!prepared.rect)\n prepared.rect = prepared.view.text.getBoundingClientRect();\n if (!prepared.hasHeights) {\n ensureLineHeights(cm, prepared.view, prepared.rect);\n prepared.hasHeights = true;\n }\n found = measureCharInner(cm, prepared, ch, bias);\n if (!found.bogus) prepared.cache[key] = found;\n }\n return {left: found.left, right: found.right,\n top: varHeight ? found.rtop : found.top,\n bottom: varHeight ? found.rbottom : found.bottom};\n }\n\n var nullRect = {left: 0, right: 0, top: 0, bottom: 0};\n\n function measureCharInner(cm, prepared, ch, bias) {\n var map = prepared.map;\n\n var node, start, end, collapse;\n // First, search the line map for the text node corresponding to,\n // or closest to, the target character.\n for (var i = 0; i < map.length; i += 3) {\n var mStart = map[i], mEnd = map[i + 1];\n if (ch < mStart) {\n start = 0; end = 1;\n collapse = \"left\";\n } else if (ch < mEnd) {\n start = ch - mStart;\n end = start + 1;\n } else if (i == map.length - 3 || ch == mEnd && map[i + 3] > ch) {\n end = mEnd - mStart;\n start = end - 1;\n if (ch >= mEnd) collapse = \"right\";\n }\n if (start != null) {\n node = map[i + 2];\n if (mStart == mEnd && bias == (node.insertLeft ? \"left\" : \"right\"))\n collapse = bias;\n if (bias == \"left\" && start == 0)\n while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) {\n node = map[(i -= 3) + 2];\n collapse = \"left\";\n }\n if (bias == \"right\" && start == mEnd - mStart)\n while (i < map.length - 3 && map[i + 3] == map[i + 4] && !map[i + 5].insertLeft) {\n node = map[(i += 3) + 2];\n collapse = \"right\";\n }\n break;\n }\n }\n\n var rect;\n if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates.\n for (var i = 0; i < 4; i++) { // Retry a maximum of 4 times when nonsense rectangles are returned\n while (start && isExtendingChar(prepared.line.text.charAt(mStart + start))) --start;\n while (mStart + end < mEnd && isExtendingChar(prepared.line.text.charAt(mStart + end))) ++end;\n if (ie && ie_version < 9 && start == 0 && end == mEnd - mStart) {\n rect = node.parentNode.getBoundingClientRect();\n } else if (ie && cm.options.lineWrapping) {\n var rects = range(node, start, end).getClientRects();\n if (rects.length)\n rect = rects[bias == \"right\" ? rects.length - 1 : 0];\n else\n rect = nullRect;\n } else {\n rect = range(node, start, end).getBoundingClientRect() || nullRect;\n }\n if (rect.left || rect.right || start == 0) break;\n end = start;\n start = start - 1;\n collapse = \"right\";\n }\n if (ie && ie_version < 11) rect = maybeUpdateRectForZooming(cm.display.measure, rect);\n } else { // If it is a widget, simply get the box for the whole widget.\n if (start > 0) collapse = bias = \"right\";\n var rects;\n if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1)\n rect = rects[bias == \"right\" ? rects.length - 1 : 0];\n else\n rect = node.getBoundingClientRect();\n }\n if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) {\n var rSpan = node.parentNode.getClientRects()[0];\n if (rSpan)\n rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom};\n else\n rect = nullRect;\n }\n\n var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top;\n var mid = (rtop + rbot) / 2;\n var heights = prepared.view.measure.heights;\n for (var i = 0; i < heights.length - 1; i++)\n if (mid < heights[i]) break;\n var top = i ? heights[i - 1] : 0, bot = heights[i];\n var result = {left: (collapse == \"right\" ? rect.right : rect.left) - prepared.rect.left,\n right: (collapse == \"left\" ? rect.left : rect.right) - prepared.rect.left,\n top: top, bottom: bot};\n if (!rect.left && !rect.right) result.bogus = true;\n if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot; }\n\n return result;\n }\n\n // Work around problem with bounding client rects on ranges being\n // returned incorrectly when zoomed on IE10 and below.\n function maybeUpdateRectForZooming(measure, rect) {\n if (!window.screen || screen.logicalXDPI == null ||\n screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure))\n return rect;\n var scaleX = screen.logicalXDPI / screen.deviceXDPI;\n var scaleY = screen.logicalYDPI / screen.deviceYDPI;\n return {left: rect.left * scaleX, right: rect.right * scaleX,\n top: rect.top * scaleY, bottom: rect.bottom * scaleY};\n }\n\n function clearLineMeasurementCacheFor(lineView) {\n if (lineView.measure) {\n lineView.measure.cache = {};\n lineView.measure.heights = null;\n if (lineView.rest) for (var i = 0; i < lineView.rest.length; i++)\n lineView.measure.caches[i] = {};\n }\n }\n\n function clearLineMeasurementCache(cm) {\n cm.display.externalMeasure = null;\n removeChildren(cm.display.lineMeasure);\n for (var i = 0; i < cm.display.view.length; i++)\n clearLineMeasurementCacheFor(cm.display.view[i]);\n }\n\n function clearCaches(cm) {\n clearLineMeasurementCache(cm);\n cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null;\n if (!cm.options.lineWrapping) cm.display.maxLineChanged = true;\n cm.display.lineNumChars = null;\n }\n\n function pageScrollX() { return window.pageXOffset || (document.documentElement || document.body).scrollLeft; }\n function pageScrollY() { return window.pageYOffset || (document.documentElement || document.body).scrollTop; }\n\n // Converts a {top, bottom, left, right} box from line-local\n // coordinates into another coordinate system. Context may be one of\n // \"line\", \"div\" (display.lineDiv), \"local\"/null (editor), \"window\",\n // or \"page\".\n function intoCoordSystem(cm, lineObj, rect, context) {\n if (lineObj.widgets) for (var i = 0; i < lineObj.widgets.length; ++i) if (lineObj.widgets[i].above) {\n var size = widgetHeight(lineObj.widgets[i]);\n rect.top += size; rect.bottom += size;\n }\n if (context == \"line\") return rect;\n if (!context) context = \"local\";\n var yOff = heightAtLine(lineObj);\n if (context == \"local\") yOff += paddingTop(cm.display);\n else yOff -= cm.display.viewOffset;\n if (context == \"page\" || context == \"window\") {\n var lOff = cm.display.lineSpace.getBoundingClientRect();\n yOff += lOff.top + (context == \"window\" ? 0 : pageScrollY());\n var xOff = lOff.left + (context == \"window\" ? 0 : pageScrollX());\n rect.left += xOff; rect.right += xOff;\n }\n rect.top += yOff; rect.bottom += yOff;\n return rect;\n }\n\n // Coverts a box from \"div\" coords to another coordinate system.\n // Context may be \"window\", \"page\", \"div\", or \"local\"/null.\n function fromCoordSystem(cm, coords, context) {\n if (context == \"div\") return coords;\n var left = coords.left, top = coords.top;\n // First move into \"page\" coordinate system\n if (context == \"page\") {\n left -= pageScrollX();\n top -= pageScrollY();\n } else if (context == \"local\" || !context) {\n var localBox = cm.display.sizer.getBoundingClientRect();\n left += localBox.left;\n top += localBox.top;\n }\n\n var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect();\n return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top};\n }\n\n function charCoords(cm, pos, context, lineObj, bias) {\n if (!lineObj) lineObj = getLine(cm.doc, pos.line);\n return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context);\n }\n\n // Returns a box for a given cursor position, which may have an\n // 'other' property containing the position of the secondary cursor\n // on a bidi boundary.\n function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) {\n lineObj = lineObj || getLine(cm.doc, pos.line);\n if (!preparedMeasure) preparedMeasure = prepareMeasureForLine(cm, lineObj);\n function get(ch, right) {\n var m = measureCharPrepared(cm, preparedMeasure, ch, right ? \"right\" : \"left\", varHeight);\n if (right) m.left = m.right; else m.right = m.left;\n return intoCoordSystem(cm, lineObj, m, context);\n }\n function getBidi(ch, partPos) {\n var part = order[partPos], right = part.level % 2;\n if (ch == bidiLeft(part) && partPos && part.level < order[partPos - 1].level) {\n part = order[--partPos];\n ch = bidiRight(part) - (part.level % 2 ? 0 : 1);\n right = true;\n } else if (ch == bidiRight(part) && partPos < order.length - 1 && part.level < order[partPos + 1].level) {\n part = order[++partPos];\n ch = bidiLeft(part) - part.level % 2;\n right = false;\n }\n if (right && ch == part.to && ch > part.from) return get(ch - 1);\n return get(ch, right);\n }\n var order = getOrder(lineObj), ch = pos.ch;\n if (!order) return get(ch);\n var partPos = getBidiPartAt(order, ch);\n var val = getBidi(ch, partPos);\n if (bidiOther != null) val.other = getBidi(ch, bidiOther);\n return val;\n }\n\n // Used to cheaply estimate the coordinates for a position. Used for\n // intermediate scroll updates.\n function estimateCoords(cm, pos) {\n var left = 0, pos = clipPos(cm.doc, pos);\n if (!cm.options.lineWrapping) left = charWidth(cm.display) * pos.ch;\n var lineObj = getLine(cm.doc, pos.line);\n var top = heightAtLine(lineObj) + paddingTop(cm.display);\n return {left: left, right: left, top: top, bottom: top + lineObj.height};\n }\n\n // Positions returned by coordsChar contain some extra information.\n // xRel is the relative x position of the input coordinates compared\n // to the found position (so xRel > 0 means the coordinates are to\n // the right of the character position, for example). When outside\n // is true, that means the coordinates lie outside the line's\n // vertical range.\n function PosWithInfo(line, ch, outside, xRel) {\n var pos = Pos(line, ch);\n pos.xRel = xRel;\n if (outside) pos.outside = true;\n return pos;\n }\n\n // Compute the character position closest to the given coordinates.\n // Input must be lineSpace-local (\"div\" coordinate system).\n function coordsChar(cm, x, y) {\n var doc = cm.doc;\n y += cm.display.viewOffset;\n if (y < 0) return PosWithInfo(doc.first, 0, true, -1);\n var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1;\n if (lineN > last)\n return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, true, 1);\n if (x < 0) x = 0;\n\n var lineObj = getLine(doc, lineN);\n for (;;) {\n var found = coordsCharInner(cm, lineObj, lineN, x, y);\n var merged = collapsedSpanAtEnd(lineObj);\n var mergedPos = merged && merged.find(0, true);\n if (merged && (found.ch > mergedPos.from.ch || found.ch == mergedPos.from.ch && found.xRel > 0))\n lineN = lineNo(lineObj = mergedPos.to.line);\n else\n return found;\n }\n }\n\n function coordsCharInner(cm, lineObj, lineNo, x, y) {\n var innerOff = y - heightAtLine(lineObj);\n var wrongLine = false, adjust = 2 * cm.display.wrapper.clientWidth;\n var preparedMeasure = prepareMeasureForLine(cm, lineObj);\n\n function getX(ch) {\n var sp = cursorCoords(cm, Pos(lineNo, ch), \"line\", lineObj, preparedMeasure);\n wrongLine = true;\n if (innerOff > sp.bottom) return sp.left - adjust;\n else if (innerOff < sp.top) return sp.left + adjust;\n else wrongLine = false;\n return sp.left;\n }\n\n var bidi = getOrder(lineObj), dist = lineObj.text.length;\n var from = lineLeft(lineObj), to = lineRight(lineObj);\n var fromX = getX(from), fromOutside = wrongLine, toX = getX(to), toOutside = wrongLine;\n\n if (x > toX) return PosWithInfo(lineNo, to, toOutside, 1);\n // Do a binary search between these bounds.\n for (;;) {\n if (bidi ? to == from || to == moveVisually(lineObj, from, 1) : to - from <= 1) {\n var ch = x < fromX || x - fromX <= toX - x ? from : to;\n var xDiff = x - (ch == from ? fromX : toX);\n while (isExtendingChar(lineObj.text.charAt(ch))) ++ch;\n var pos = PosWithInfo(lineNo, ch, ch == from ? fromOutside : toOutside,\n xDiff < -1 ? -1 : xDiff > 1 ? 1 : 0);\n return pos;\n }\n var step = Math.ceil(dist / 2), middle = from + step;\n if (bidi) {\n middle = from;\n for (var i = 0; i < step; ++i) middle = moveVisually(lineObj, middle, 1);\n }\n var middleX = getX(middle);\n if (middleX > x) {to = middle; toX = middleX; if (toOutside = wrongLine) toX += 1000; dist = step;}\n else {from = middle; fromX = middleX; fromOutside = wrongLine; dist -= step;}\n }\n }\n\n var measureText;\n // Compute the default text height.\n function textHeight(display) {\n if (display.cachedTextHeight != null) return display.cachedTextHeight;\n if (measureText == null) {\n measureText = elt(\"pre\");\n // Measure a bunch of lines, for browsers that compute\n // fractional heights.\n for (var i = 0; i < 49; ++i) {\n measureText.appendChild(document.createTextNode(\"x\"));\n measureText.appendChild(elt(\"br\"));\n }\n measureText.appendChild(document.createTextNode(\"x\"));\n }\n removeChildrenAndAdd(display.measure, measureText);\n var height = measureText.offsetHeight / 50;\n if (height > 3) display.cachedTextHeight = height;\n removeChildren(display.measure);\n return height || 1;\n }\n\n // Compute the default character width.\n function charWidth(display) {\n if (display.cachedCharWidth != null) return display.cachedCharWidth;\n var anchor = elt(\"span\", \"xxxxxxxxxx\");\n var pre = elt(\"pre\", [anchor]);\n removeChildrenAndAdd(display.measure, pre);\n var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10;\n if (width > 2) display.cachedCharWidth = width;\n return width || 10;\n }\n\n // OPERATIONS\n\n // Operations are used to wrap a series of changes to the editor\n // state in such a way that each change won't have to update the\n // cursor and display (which would be awkward, slow, and\n // error-prone). Instead, display updates are batched and then all\n // combined and executed at once.\n\n var operationGroup = null;\n\n var nextOpId = 0;\n // Start a new operation.\n function startOperation(cm) {\n cm.curOp = {\n cm: cm,\n viewChanged: false, // Flag that indicates that lines might need to be redrawn\n startHeight: cm.doc.height, // Used to detect need to update scrollbar\n forceUpdate: false, // Used to force a redraw\n updateInput: null, // Whether to reset the input textarea\n typing: false, // Whether this reset should be careful to leave existing text (for compositing)\n changeObjs: null, // Accumulated changes, for firing change events\n cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on\n cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already\n selectionChanged: false, // Whether the selection needs to be redrawn\n updateMaxLine: false, // Set when the widest line needs to be determined anew\n scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet\n scrollToPos: null, // Used to scroll to a specific position\n id: ++nextOpId // Unique ID\n };\n if (operationGroup) {\n operationGroup.ops.push(cm.curOp);\n } else {\n cm.curOp.ownsGroup = operationGroup = {\n ops: [cm.curOp],\n delayedCallbacks: []\n };\n }\n }\n\n function fireCallbacksForOps(group) {\n // Calls delayed callbacks and cursorActivity handlers until no\n // new ones appear\n var callbacks = group.delayedCallbacks, i = 0;\n do {\n for (; i < callbacks.length; i++)\n callbacks[i]();\n for (var j = 0; j < group.ops.length; j++) {\n var op = group.ops[j];\n if (op.cursorActivityHandlers)\n while (op.cursorActivityCalled < op.cursorActivityHandlers.length)\n op.cursorActivityHandlers[op.cursorActivityCalled++](op.cm);\n }\n } while (i < callbacks.length);\n }\n\n // Finish an operation, updating the display and signalling delayed events\n function endOperation(cm) {\n var op = cm.curOp, group = op.ownsGroup;\n if (!group) return;\n\n try { fireCallbacksForOps(group); }\n finally {\n operationGroup = null;\n for (var i = 0; i < group.ops.length; i++)\n group.ops[i].cm.curOp = null;\n endOperations(group);\n }\n }\n\n // The DOM updates done when an operation finishes are batched so\n // that the minimum number of relayouts are required.\n function endOperations(group) {\n var ops = group.ops;\n for (var i = 0; i < ops.length; i++) // Read DOM\n endOperation_R1(ops[i]);\n for (var i = 0; i < ops.length; i++) // Write DOM (maybe)\n endOperation_W1(ops[i]);\n for (var i = 0; i < ops.length; i++) // Read DOM\n endOperation_R2(ops[i]);\n for (var i = 0; i < ops.length; i++) // Write DOM (maybe)\n endOperation_W2(ops[i]);\n for (var i = 0; i < ops.length; i++) // Read DOM\n endOperation_finish(ops[i]);\n }\n\n function endOperation_R1(op) {\n var cm = op.cm, display = cm.display;\n maybeClipScrollbars(cm);\n if (op.updateMaxLine) findMaxLine(cm);\n\n op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null ||\n op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom ||\n op.scrollToPos.to.line >= display.viewTo) ||\n display.maxLineChanged && cm.options.lineWrapping;\n op.update = op.mustUpdate &&\n new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate);\n }\n\n function endOperation_W1(op) {\n op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update);\n }\n\n function endOperation_R2(op) {\n var cm = op.cm, display = cm.display;\n if (op.updatedDisplay) updateHeightsInViewport(cm);\n\n op.barMeasure = measureForScrollbars(cm);\n\n // If the max line changed since it was last measured, measure it,\n // and ensure the document's width matches it.\n // updateDisplay_W2 will use these properties to do the actual resizing\n if (display.maxLineChanged && !cm.options.lineWrapping) {\n op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3;\n cm.display.sizerWidth = op.adjustWidthTo;\n op.barMeasure.scrollWidth =\n Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth);\n op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm));\n }\n\n if (op.updatedDisplay || op.selectionChanged)\n op.newSelectionNodes = drawSelection(cm);\n }\n\n function endOperation_W2(op) {\n var cm = op.cm;\n\n if (op.adjustWidthTo != null) {\n cm.display.sizer.style.minWidth = op.adjustWidthTo + \"px\";\n if (op.maxScrollLeft < cm.doc.scrollLeft)\n setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true);\n cm.display.maxLineChanged = false;\n }\n\n if (op.newSelectionNodes)\n showSelection(cm, op.newSelectionNodes);\n if (op.updatedDisplay)\n setDocumentHeight(cm, op.barMeasure);\n if (op.updatedDisplay || op.startHeight != cm.doc.height)\n updateScrollbars(cm, op.barMeasure);\n\n if (op.selectionChanged) restartBlink(cm);\n\n if (cm.state.focused && op.updateInput)\n resetInput(cm, op.typing);\n }\n\n function endOperation_finish(op) {\n var cm = op.cm, display = cm.display, doc = cm.doc;\n\n if (op.updatedDisplay) postUpdateDisplay(cm, op.update);\n\n // Abort mouse wheel delta measurement, when scrolling explicitly\n if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos))\n display.wheelStartX = display.wheelStartY = null;\n\n // Propagate the scroll position to the actual DOM scroller\n if (op.scrollTop != null && (display.scroller.scrollTop != op.scrollTop || op.forceScroll)) {\n doc.scrollTop = Math.max(0, Math.min(display.scroller.scrollHeight - display.scroller.clientHeight, op.scrollTop));\n display.scrollbars.setScrollTop(doc.scrollTop);\n display.scroller.scrollTop = doc.scrollTop;\n }\n if (op.scrollLeft != null && (display.scroller.scrollLeft != op.scrollLeft || op.forceScroll)) {\n doc.scrollLeft = Math.max(0, Math.min(display.scroller.scrollWidth - displayWidth(cm), op.scrollLeft));\n display.scrollbars.setScrollLeft(doc.scrollLeft);\n display.scroller.scrollLeft = doc.scrollLeft;\n alignHorizontally(cm);\n }\n // If we need to scroll a specific position into view, do so.\n if (op.scrollToPos) {\n var coords = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from),\n clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin);\n if (op.scrollToPos.isCursor && cm.state.focused) maybeScrollWindow(cm, coords);\n }\n\n // Fire events for markers that are hidden/unidden by editing or\n // undoing\n var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers;\n if (hidden) for (var i = 0; i < hidden.length; ++i)\n if (!hidden[i].lines.length) signal(hidden[i], \"hide\");\n if (unhidden) for (var i = 0; i < unhidden.length; ++i)\n if (unhidden[i].lines.length) signal(unhidden[i], \"unhide\");\n\n if (display.wrapper.offsetHeight)\n doc.scrollTop = cm.display.scroller.scrollTop;\n\n // Fire change events, and delayed event handlers\n if (op.changeObjs)\n signal(cm, \"changes\", cm, op.changeObjs);\n if (op.update)\n op.update.finish();\n }\n\n // Run the given function in an operation\n function runInOp(cm, f) {\n if (cm.curOp) return f();\n startOperation(cm);\n try { return f(); }\n finally { endOperation(cm); }\n }\n // Wraps a function in an operation. Returns the wrapped function.\n function operation(cm, f) {\n return function() {\n if (cm.curOp) return f.apply(cm, arguments);\n startOperation(cm);\n try { return f.apply(cm, arguments); }\n finally { endOperation(cm); }\n };\n }\n // Used to add methods to editor and doc instances, wrapping them in\n // operations.\n function methodOp(f) {\n return function() {\n if (this.curOp) return f.apply(this, arguments);\n startOperation(this);\n try { return f.apply(this, arguments); }\n finally { endOperation(this); }\n };\n }\n function docMethodOp(f) {\n return function() {\n var cm = this.cm;\n if (!cm || cm.curOp) return f.apply(this, arguments);\n startOperation(cm);\n try { return f.apply(this, arguments); }\n finally { endOperation(cm); }\n };\n }\n\n // VIEW TRACKING\n\n // These objects are used to represent the visible (currently drawn)\n // part of the document. A LineView may correspond to multiple\n // logical lines, if those are connected by collapsed ranges.\n function LineView(doc, line, lineN) {\n // The starting line\n this.line = line;\n // Continuing lines, if any\n this.rest = visualLineContinued(line);\n // Number of logical lines in this visual line\n this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1;\n this.node = this.text = null;\n this.hidden = lineIsHidden(doc, line);\n }\n\n // Create a range of LineView objects for the given lines.\n function buildViewArray(cm, from, to) {\n var array = [], nextPos;\n for (var pos = from; pos < to; pos = nextPos) {\n var view = new LineView(cm.doc, getLine(cm.doc, pos), pos);\n nextPos = pos + view.size;\n array.push(view);\n }\n return array;\n }\n\n // Updates the display.view data structure for a given change to the\n // document. From and to are in pre-change coordinates. Lendiff is\n // the amount of lines added or subtracted by the change. This is\n // used for changes that span multiple lines, or change the way\n // lines are divided into visual lines. regLineChange (below)\n // registers single-line changes.\n function regChange(cm, from, to, lendiff) {\n if (from == null) from = cm.doc.first;\n if (to == null) to = cm.doc.first + cm.doc.size;\n if (!lendiff) lendiff = 0;\n\n var display = cm.display;\n if (lendiff && to < display.viewTo &&\n (display.updateLineNumbers == null || display.updateLineNumbers > from))\n display.updateLineNumbers = from;\n\n cm.curOp.viewChanged = true;\n\n if (from >= display.viewTo) { // Change after\n if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo)\n resetView(cm);\n } else if (to <= display.viewFrom) { // Change before\n if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) {\n resetView(cm);\n } else {\n display.viewFrom += lendiff;\n display.viewTo += lendiff;\n }\n } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap\n resetView(cm);\n } else if (from <= display.viewFrom) { // Top overlap\n var cut = viewCuttingPoint(cm, to, to + lendiff, 1);\n if (cut) {\n display.view = display.view.slice(cut.index);\n display.viewFrom = cut.lineN;\n display.viewTo += lendiff;\n } else {\n resetView(cm);\n }\n } else if (to >= display.viewTo) { // Bottom overlap\n var cut = viewCuttingPoint(cm, from, from, -1);\n if (cut) {\n display.view = display.view.slice(0, cut.index);\n display.viewTo = cut.lineN;\n } else {\n resetView(cm);\n }\n } else { // Gap in the middle\n var cutTop = viewCuttingPoint(cm, from, from, -1);\n var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1);\n if (cutTop && cutBot) {\n display.view = display.view.slice(0, cutTop.index)\n .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN))\n .concat(display.view.slice(cutBot.index));\n display.viewTo += lendiff;\n } else {\n resetView(cm);\n }\n }\n\n var ext = display.externalMeasured;\n if (ext) {\n if (to < ext.lineN)\n ext.lineN += lendiff;\n else if (from < ext.lineN + ext.size)\n display.externalMeasured = null;\n }\n }\n\n // Register a change to a single line. Type must be one of \"text\",\n // \"gutter\", \"class\", \"widget\"\n function regLineChange(cm, line, type) {\n cm.curOp.viewChanged = true;\n var display = cm.display, ext = cm.display.externalMeasured;\n if (ext && line >= ext.lineN && line < ext.lineN + ext.size)\n display.externalMeasured = null;\n\n if (line < display.viewFrom || line >= display.viewTo) return;\n var lineView = display.view[findViewIndex(cm, line)];\n if (lineView.node == null) return;\n var arr = lineView.changes || (lineView.changes = []);\n if (indexOf(arr, type) == -1) arr.push(type);\n }\n\n // Clear the view.\n function resetView(cm) {\n cm.display.viewFrom = cm.display.viewTo = cm.doc.first;\n cm.display.view = [];\n cm.display.viewOffset = 0;\n }\n\n // Find the view element corresponding to a given line. Return null\n // when the line isn't visible.\n function findViewIndex(cm, n) {\n if (n >= cm.display.viewTo) return null;\n n -= cm.display.viewFrom;\n if (n < 0) return null;\n var view = cm.display.view;\n for (var i = 0; i < view.length; i++) {\n n -= view[i].size;\n if (n < 0) return i;\n }\n }\n\n function viewCuttingPoint(cm, oldN, newN, dir) {\n var index = findViewIndex(cm, oldN), diff, view = cm.display.view;\n if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size)\n return {index: index, lineN: newN};\n for (var i = 0, n = cm.display.viewFrom; i < index; i++)\n n += view[i].size;\n if (n != oldN) {\n if (dir > 0) {\n if (index == view.length - 1) return null;\n diff = (n + view[index].size) - oldN;\n index++;\n } else {\n diff = n - oldN;\n }\n oldN += diff; newN += diff;\n }\n while (visualLineNo(cm.doc, newN) != newN) {\n if (index == (dir < 0 ? 0 : view.length - 1)) return null;\n newN += dir * view[index - (dir < 0 ? 1 : 0)].size;\n index += dir;\n }\n return {index: index, lineN: newN};\n }\n\n // Force the view to cover a given range, adding empty view element\n // or clipping off existing ones as needed.\n function adjustView(cm, from, to) {\n var display = cm.display, view = display.view;\n if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) {\n display.view = buildViewArray(cm, from, to);\n display.viewFrom = from;\n } else {\n if (display.viewFrom > from)\n display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view);\n else if (display.viewFrom < from)\n display.view = display.view.slice(findViewIndex(cm, from));\n display.viewFrom = from;\n if (display.viewTo < to)\n display.view = display.view.concat(buildViewArray(cm, display.viewTo, to));\n else if (display.viewTo > to)\n display.view = display.view.slice(0, findViewIndex(cm, to));\n }\n display.viewTo = to;\n }\n\n // Count the number of lines in the view whose DOM representation is\n // out of date (or nonexistent).\n function countDirtyView(cm) {\n var view = cm.display.view, dirty = 0;\n for (var i = 0; i < view.length; i++) {\n var lineView = view[i];\n if (!lineView.hidden && (!lineView.node || lineView.changes)) ++dirty;\n }\n return dirty;\n }\n\n // INPUT HANDLING\n\n // Poll for input changes, using the normal rate of polling. This\n // runs as long as the editor is focused.\n function slowPoll(cm) {\n if (cm.display.pollingFast) return;\n cm.display.poll.set(cm.options.pollInterval, function() {\n readInput(cm);\n if (cm.state.focused) slowPoll(cm);\n });\n }\n\n // When an event has just come in that is likely to add or change\n // something in the input textarea, we poll faster, to ensure that\n // the change appears on the screen quickly.\n function fastPoll(cm) {\n var missed = false;\n cm.display.pollingFast = true;\n function p() {\n var changed = readInput(cm);\n if (!changed && !missed) {missed = true; cm.display.poll.set(60, p);}\n else {cm.display.pollingFast = false; slowPoll(cm);}\n }\n cm.display.poll.set(20, p);\n }\n\n // This will be set to an array of strings when copying, so that,\n // when pasting, we know what kind of selections the copied text\n // was made out of.\n var lastCopied = null;\n\n // Read input from the textarea, and update the document to match.\n // When something is selected, it is present in the textarea, and\n // selected (unless it is huge, in which case a placeholder is\n // used). When nothing is selected, the cursor sits after previously\n // seen text (can be empty), which is stored in prevInput (we must\n // not reset the textarea when typing, because that breaks IME).\n function readInput(cm) {\n var input = cm.display.input, prevInput = cm.display.prevInput, doc = cm.doc;\n // Since this is called a *lot*, try to bail out as cheaply as\n // possible when it is clear that nothing happened. hasSelection\n // will be the case when there is a lot of text in the textarea,\n // in which case reading its value would be expensive.\n if (!cm.state.focused || (hasSelection(input) && !prevInput) || isReadOnly(cm) || cm.options.disableInput || cm.state.keySeq)\n return false;\n // See paste handler for more on the fakedLastChar kludge\n if (cm.state.pasteIncoming && cm.state.fakedLastChar) {\n input.value = input.value.substring(0, input.value.length - 1);\n cm.state.fakedLastChar = false;\n }\n var text = input.value;\n // If nothing changed, bail.\n if (text == prevInput && !cm.somethingSelected()) return false;\n // Work around nonsensical selection resetting in IE9/10, and\n // inexplicable appearance of private area unicode characters on\n // some key combos in Mac (#2689).\n if (ie && ie_version >= 9 && cm.display.inputHasSelection === text ||\n mac && /[\\uf700-\\uf7ff]/.test(text)) {\n resetInput(cm);\n return false;\n }\n\n var withOp = !cm.curOp;\n if (withOp) startOperation(cm);\n cm.display.shift = false;\n\n if (text.charCodeAt(0) == 0x200b && doc.sel == cm.display.selForContextMenu && !prevInput)\n prevInput = \"\\u200b\";\n // Find the part of the input that is actually new\n var same = 0, l = Math.min(prevInput.length, text.length);\n while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) ++same;\n var inserted = text.slice(same), textLines = splitLines(inserted);\n\n // When pasing N lines into N selections, insert one line per selection\n var multiPaste = null;\n if (cm.state.pasteIncoming && doc.sel.ranges.length > 1) {\n if (lastCopied && lastCopied.join(\"\\n\") == inserted)\n multiPaste = doc.sel.ranges.length % lastCopied.length == 0 && map(lastCopied, splitLines);\n else if (textLines.length == doc.sel.ranges.length)\n multiPaste = map(textLines, function(l) { return [l]; });\n }\n\n // Normal behavior is to insert the new text into every selection\n for (var i = doc.sel.ranges.length - 1; i >= 0; i--) {\n var range = doc.sel.ranges[i];\n var from = range.from(), to = range.to();\n // Handle deletion\n if (same < prevInput.length)\n from = Pos(from.line, from.ch - (prevInput.length - same));\n // Handle overwrite\n else if (cm.state.overwrite && range.empty() && !cm.state.pasteIncoming)\n to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length));\n var updateInput = cm.curOp.updateInput;\n var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i % multiPaste.length] : textLines,\n origin: cm.state.pasteIncoming ? \"paste\" : cm.state.cutIncoming ? \"cut\" : \"+input\"};\n makeChange(cm.doc, changeEvent);\n signalLater(cm, \"inputRead\", cm, changeEvent);\n // When an 'electric' character is inserted, immediately trigger a reindent\n if (inserted && !cm.state.pasteIncoming && cm.options.electricChars &&\n cm.options.smartIndent && range.head.ch < 100 &&\n (!i || doc.sel.ranges[i - 1].head.line != range.head.line)) {\n var mode = cm.getModeAt(range.head);\n var end = changeEnd(changeEvent);\n if (mode.electricChars) {\n for (var j = 0; j < mode.electricChars.length; j++)\n if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) {\n indentLine(cm, end.line, \"smart\");\n break;\n }\n } else if (mode.electricInput) {\n if (mode.electricInput.test(getLine(doc, end.line).text.slice(0, end.ch)))\n indentLine(cm, end.line, \"smart\");\n }\n }\n }\n ensureCursorVisible(cm);\n cm.curOp.updateInput = updateInput;\n cm.curOp.typing = true;\n\n // Don't leave long text in the textarea, since it makes further polling slow\n if (text.length > 1000 || text.indexOf(\"\\n\") > -1) input.value = cm.display.prevInput = \"\";\n else cm.display.prevInput = text;\n if (withOp) endOperation(cm);\n cm.state.pasteIncoming = cm.state.cutIncoming = false;\n return true;\n }\n\n // Reset the input to correspond to the selection (or to be empty,\n // when not typing and nothing is selected)\n function resetInput(cm, typing) {\n if (cm.display.contextMenuPending) return;\n var minimal, selected, doc = cm.doc;\n if (cm.somethingSelected()) {\n cm.display.prevInput = \"\";\n var range = doc.sel.primary();\n minimal = hasCopyEvent &&\n (range.to().line - range.from().line > 100 || (selected = cm.getSelection()).length > 1000);\n var content = minimal ? \"-\" : selected || cm.getSelection();\n cm.display.input.value = content;\n if (cm.state.focused) selectInput(cm.display.input);\n if (ie && ie_version >= 9) cm.display.inputHasSelection = content;\n } else if (!typing) {\n cm.display.prevInput = cm.display.input.value = \"\";\n if (ie && ie_version >= 9) cm.display.inputHasSelection = null;\n }\n cm.display.inaccurateSelection = minimal;\n }\n\n function focusInput(cm) {\n if (cm.options.readOnly != \"nocursor\" && (!mobile || activeElt() != cm.display.input)) {\n try { cm.display.input.focus(); }\n catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM\n }\n }\n\n function ensureFocus(cm) {\n if (!cm.state.focused) { focusInput(cm); onFocus(cm); }\n }\n\n function isReadOnly(cm) {\n return cm.options.readOnly || cm.doc.cantEdit;\n }\n\n // EVENT HANDLERS\n\n // Attach the necessary event handlers when initializing the editor\n function registerEventHandlers(cm) {\n var d = cm.display;\n on(d.scroller, \"mousedown\", operation(cm, onMouseDown));\n // Older IE's will not fire a second mousedown for a double click\n if (ie && ie_version < 11)\n on(d.scroller, \"dblclick\", operation(cm, function(e) {\n if (signalDOMEvent(cm, e)) return;\n var pos = posFromMouse(cm, e);\n if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) return;\n e_preventDefault(e);\n var word = cm.findWordAt(pos);\n extendSelection(cm.doc, word.anchor, word.head);\n }));\n else\n on(d.scroller, \"dblclick\", function(e) { signalDOMEvent(cm, e) || e_preventDefault(e); });\n // Prevent normal selection in the editor (we handle our own)\n on(d.lineSpace, \"selectstart\", function(e) {\n if (!eventInWidget(d, e)) e_preventDefault(e);\n });\n // Some browsers fire contextmenu *after* opening the menu, at\n // which point we can't mess with it anymore. Context menu is\n // handled in onMouseDown for these browsers.\n if (!captureRightClick) on(d.scroller, \"contextmenu\", function(e) {onContextMenu(cm, e);});\n\n // Sync scrolling between fake scrollbars and real scrollable\n // area, ensure viewport is updated when scrolling.\n on(d.scroller, \"scroll\", function() {\n if (d.scroller.clientHeight) {\n setScrollTop(cm, d.scroller.scrollTop);\n setScrollLeft(cm, d.scroller.scrollLeft, true);\n signal(cm, \"scroll\", cm);\n }\n });\n\n // Listen to wheel events in order to try and update the viewport on time.\n on(d.scroller, \"mousewheel\", function(e){onScrollWheel(cm, e);});\n on(d.scroller, \"DOMMouseScroll\", function(e){onScrollWheel(cm, e);});\n\n // Prevent wrapper from ever scrolling\n on(d.wrapper, \"scroll\", function() { d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; });\n\n on(d.input, \"keyup\", function(e) { onKeyUp.call(cm, e); });\n on(d.input, \"input\", function() {\n if (ie && ie_version >= 9 && cm.display.inputHasSelection) cm.display.inputHasSelection = null;\n readInput(cm);\n });\n on(d.input, \"keydown\", operation(cm, onKeyDown));\n on(d.input, \"keypress\", operation(cm, onKeyPress));\n on(d.input, \"focus\", bind(onFocus, cm));\n on(d.input, \"blur\", bind(onBlur, cm));\n\n function drag_(e) {\n if (!signalDOMEvent(cm, e)) e_stop(e);\n }\n if (cm.options.dragDrop) {\n on(d.scroller, \"dragstart\", function(e){onDragStart(cm, e);});\n on(d.scroller, \"dragenter\", drag_);\n on(d.scroller, \"dragover\", drag_);\n on(d.scroller, \"drop\", operation(cm, onDrop));\n }\n on(d.scroller, \"paste\", function(e) {\n if (eventInWidget(d, e)) return;\n cm.state.pasteIncoming = true;\n focusInput(cm);\n fastPoll(cm);\n });\n on(d.input, \"paste\", function() {\n // Workaround for webkit bug https://bugs.webkit.org/show_bug.cgi?id=90206\n // Add a char to the end of textarea before paste occur so that\n // selection doesn't span to the end of textarea.\n if (webkit && !cm.state.fakedLastChar && !(new Date - cm.state.lastMiddleDown < 200)) {\n var start = d.input.selectionStart, end = d.input.selectionEnd;\n d.input.value += \"$\";\n // The selection end needs to be set before the start, otherwise there\n // can be an intermediate non-empty selection between the two, which\n // can override the middle-click paste buffer on linux and cause the\n // wrong thing to get pasted.\n d.input.selectionEnd = end;\n d.input.selectionStart = start;\n cm.state.fakedLastChar = true;\n }\n cm.state.pasteIncoming = true;\n fastPoll(cm);\n });\n\n function prepareCopyCut(e) {\n if (cm.somethingSelected()) {\n lastCopied = cm.getSelections();\n if (d.inaccurateSelection) {\n d.prevInput = \"\";\n d.inaccurateSelection = false;\n d.input.value = lastCopied.join(\"\\n\");\n selectInput(d.input);\n }\n } else {\n var text = [], ranges = [];\n for (var i = 0; i < cm.doc.sel.ranges.length; i++) {\n var line = cm.doc.sel.ranges[i].head.line;\n var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)};\n ranges.push(lineRange);\n text.push(cm.getRange(lineRange.anchor, lineRange.head));\n }\n if (e.type == \"cut\") {\n cm.setSelections(ranges, null, sel_dontScroll);\n } else {\n d.prevInput = \"\";\n d.input.value = text.join(\"\\n\");\n selectInput(d.input);\n }\n lastCopied = text;\n }\n if (e.type == \"cut\") cm.state.cutIncoming = true;\n }\n on(d.input, \"cut\", prepareCopyCut);\n on(d.input, \"copy\", prepareCopyCut);\n\n // Needed to handle Tab key in KHTML\n if (khtml) on(d.sizer, \"mouseup\", function() {\n if (activeElt() == d.input) d.input.blur();\n focusInput(cm);\n });\n }\n\n // Called when the window resizes\n function onResize(cm) {\n var d = cm.display;\n if (d.lastWrapHeight == d.wrapper.clientHeight && d.lastWrapWidth == d.wrapper.clientWidth)\n return;\n // Might be a text scaling operation, clear size caches.\n d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;\n d.scrollbarsClipped = false;\n cm.setSize();\n }\n\n // MOUSE EVENTS\n\n // Return true when the given mouse event happened in a widget\n function eventInWidget(display, e) {\n for (var n = e_target(e); n != display.wrapper; n = n.parentNode) {\n if (!n || (n.nodeType == 1 && n.getAttribute(\"cm-ignore-events\") == \"true\") ||\n (n.parentNode == display.sizer && n != display.mover))\n return true;\n }\n }\n\n // Given a mouse event, find the corresponding position. If liberal\n // is false, it checks whether a gutter or scrollbar was clicked,\n // and returns null if it was. forRect is used by rectangular\n // selections, and tries to estimate a character position even for\n // coordinates beyond the right of the text.\n function posFromMouse(cm, e, liberal, forRect) {\n var display = cm.display;\n if (!liberal && e_target(e).getAttribute(\"not-content\") == \"true\") return null;\n\n var x, y, space = display.lineSpace.getBoundingClientRect();\n // Fails unpredictably on IE[67] when mouse is dragged around quickly.\n try { x = e.clientX - space.left; y = e.clientY - space.top; }\n catch (e) { return null; }\n var coords = coordsChar(cm, x, y), line;\n if (forRect && coords.xRel == 1 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) {\n var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length;\n coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff));\n }\n return coords;\n }\n\n // A mouse down can be a single click, double click, triple click,\n // start of selection drag, start of text drag, new cursor\n // (ctrl-click), rectangle drag (alt-drag), or xwin\n // middle-click-paste. Or it might be a click on something we should\n // not interfere with, such as a scrollbar or widget.\n function onMouseDown(e) {\n if (signalDOMEvent(this, e)) return;\n var cm = this, display = cm.display;\n display.shift = e.shiftKey;\n\n if (eventInWidget(display, e)) {\n if (!webkit) {\n // Briefly turn off draggability, to allow widgets to do\n // normal dragging things.\n display.scroller.draggable = false;\n setTimeout(function(){display.scroller.draggable = true;}, 100);\n }\n return;\n }\n if (clickInGutter(cm, e)) return;\n var start = posFromMouse(cm, e);\n window.focus();\n\n switch (e_button(e)) {\n case 1:\n if (start)\n leftButtonDown(cm, e, start);\n else if (e_target(e) == display.scroller)\n e_preventDefault(e);\n break;\n case 2:\n if (webkit) cm.state.lastMiddleDown = +new Date;\n if (start) extendSelection(cm.doc, start);\n setTimeout(bind(focusInput, cm), 20);\n e_preventDefault(e);\n break;\n case 3:\n if (captureRightClick) onContextMenu(cm, e);\n break;\n }\n }\n\n var lastClick, lastDoubleClick;\n function leftButtonDown(cm, e, start) {\n setTimeout(bind(ensureFocus, cm), 0);\n\n var now = +new Date, type;\n if (lastDoubleClick && lastDoubleClick.time > now - 400 && cmp(lastDoubleClick.pos, start) == 0) {\n type = \"triple\";\n } else if (lastClick && lastClick.time > now - 400 && cmp(lastClick.pos, start) == 0) {\n type = \"double\";\n lastDoubleClick = {time: now, pos: start};\n } else {\n type = \"single\";\n lastClick = {time: now, pos: start};\n }\n\n var sel = cm.doc.sel, modifier = mac ? e.metaKey : e.ctrlKey, contained;\n if (cm.options.dragDrop && dragAndDrop && !isReadOnly(cm) &&\n type == \"single\" && (contained = sel.contains(start)) > -1 &&\n !sel.ranges[contained].empty())\n leftButtonStartDrag(cm, e, start, modifier);\n else\n leftButtonSelect(cm, e, start, type, modifier);\n }\n\n // Start a text drag. When it ends, see if any dragging actually\n // happen, and treat as a click if it didn't.\n function leftButtonStartDrag(cm, e, start, modifier) {\n var display = cm.display;\n var dragEnd = operation(cm, function(e2) {\n if (webkit) display.scroller.draggable = false;\n cm.state.draggingText = false;\n off(document, \"mouseup\", dragEnd);\n off(display.scroller, \"drop\", dragEnd);\n if (Math.abs(e.clientX - e2.clientX) + Math.abs(e.clientY - e2.clientY) < 10) {\n e_preventDefault(e2);\n if (!modifier)\n extendSelection(cm.doc, start);\n focusInput(cm);\n // Work around unexplainable focus problem in IE9 (#2127)\n if (ie && ie_version == 9)\n setTimeout(function() {document.body.focus(); focusInput(cm);}, 20);\n }\n });\n // Let the drag handler handle this.\n if (webkit) display.scroller.draggable = true;\n cm.state.draggingText = dragEnd;\n // IE's approach to draggable\n if (display.scroller.dragDrop) display.scroller.dragDrop();\n on(document, \"mouseup\", dragEnd);\n on(display.scroller, \"drop\", dragEnd);\n }\n\n // Normal selection, as opposed to text dragging.\n function leftButtonSelect(cm, e, start, type, addNew) {\n var display = cm.display, doc = cm.doc;\n e_preventDefault(e);\n\n var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges;\n if (addNew && !e.shiftKey) {\n ourIndex = doc.sel.contains(start);\n if (ourIndex > -1)\n ourRange = ranges[ourIndex];\n else\n ourRange = new Range(start, start);\n } else {\n ourRange = doc.sel.primary();\n }\n\n if (e.altKey) {\n type = \"rect\";\n if (!addNew) ourRange = new Range(start, start);\n start = posFromMouse(cm, e, true, true);\n ourIndex = -1;\n } else if (type == \"double\") {\n var word = cm.findWordAt(start);\n if (cm.display.shift || doc.extend)\n ourRange = extendRange(doc, ourRange, word.anchor, word.head);\n else\n ourRange = word;\n } else if (type == \"triple\") {\n var line = new Range(Pos(start.line, 0), clipPos(doc, Pos(start.line + 1, 0)));\n if (cm.display.shift || doc.extend)\n ourRange = extendRange(doc, ourRange, line.anchor, line.head);\n else\n ourRange = line;\n } else {\n ourRange = extendRange(doc, ourRange, start);\n }\n\n if (!addNew) {\n ourIndex = 0;\n setSelection(doc, new Selection([ourRange], 0), sel_mouse);\n startSel = doc.sel;\n } else if (ourIndex == -1) {\n ourIndex = ranges.length;\n setSelection(doc, normalizeSelection(ranges.concat([ourRange]), ourIndex),\n {scroll: false, origin: \"*mouse\"});\n } else if (ranges.length > 1 && ranges[ourIndex].empty() && type == \"single\") {\n setSelection(doc, normalizeSelection(ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0));\n startSel = doc.sel;\n } else {\n replaceOneSelection(doc, ourIndex, ourRange, sel_mouse);\n }\n\n var lastPos = start;\n function extendTo(pos) {\n if (cmp(lastPos, pos) == 0) return;\n lastPos = pos;\n\n if (type == \"rect\") {\n var ranges = [], tabSize = cm.options.tabSize;\n var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize);\n var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize);\n var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol);\n for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line));\n line <= end; line++) {\n var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize);\n if (left == right)\n ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos)));\n else if (text.length > leftPos)\n ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize))));\n }\n if (!ranges.length) ranges.push(new Range(start, start));\n setSelection(doc, normalizeSelection(startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex),\n {origin: \"*mouse\", scroll: false});\n cm.scrollIntoView(pos);\n } else {\n var oldRange = ourRange;\n var anchor = oldRange.anchor, head = pos;\n if (type != \"single\") {\n if (type == \"double\")\n var range = cm.findWordAt(pos);\n else\n var range = new Range(Pos(pos.line, 0), clipPos(doc, Pos(pos.line + 1, 0)));\n if (cmp(range.anchor, anchor) > 0) {\n head = range.head;\n anchor = minPos(oldRange.from(), range.anchor);\n } else {\n head = range.anchor;\n anchor = maxPos(oldRange.to(), range.head);\n }\n }\n var ranges = startSel.ranges.slice(0);\n ranges[ourIndex] = new Range(clipPos(doc, anchor), head);\n setSelection(doc, normalizeSelection(ranges, ourIndex), sel_mouse);\n }\n }\n\n var editorSize = display.wrapper.getBoundingClientRect();\n // Used to ensure timeout re-tries don't fire when another extend\n // happened in the meantime (clearTimeout isn't reliable -- at\n // least on Chrome, the timeouts still happen even when cleared,\n // if the clear happens after their scheduled firing time).\n var counter = 0;\n\n function extend(e) {\n var curCount = ++counter;\n var cur = posFromMouse(cm, e, true, type == \"rect\");\n if (!cur) return;\n if (cmp(cur, lastPos) != 0) {\n ensureFocus(cm);\n extendTo(cur);\n var visible = visibleLines(display, doc);\n if (cur.line >= visible.to || cur.line < visible.from)\n setTimeout(operation(cm, function(){if (counter == curCount) extend(e);}), 150);\n } else {\n var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0;\n if (outside) setTimeout(operation(cm, function() {\n if (counter != curCount) return;\n display.scroller.scrollTop += outside;\n extend(e);\n }), 50);\n }\n }\n\n function done(e) {\n counter = Infinity;\n e_preventDefault(e);\n focusInput(cm);\n off(document, \"mousemove\", move);\n off(document, \"mouseup\", up);\n doc.history.lastSelOrigin = null;\n }\n\n var move = operation(cm, function(e) {\n if (!e_button(e)) done(e);\n else extend(e);\n });\n var up = operation(cm, done);\n on(document, \"mousemove\", move);\n on(document, \"mouseup\", up);\n }\n\n // Determines whether an event happened in the gutter, and fires the\n // handlers for the corresponding event.\n function gutterEvent(cm, e, type, prevent, signalfn) {\n try { var mX = e.clientX, mY = e.clientY; }\n catch(e) { return false; }\n if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) return false;\n if (prevent) e_preventDefault(e);\n\n var display = cm.display;\n var lineBox = display.lineDiv.getBoundingClientRect();\n\n if (mY > lineBox.bottom || !hasHandler(cm, type)) return e_defaultPrevented(e);\n mY -= lineBox.top - display.viewOffset;\n\n for (var i = 0; i < cm.options.gutters.length; ++i) {\n var g = display.gutters.childNodes[i];\n if (g && g.getBoundingClientRect().right >= mX) {\n var line = lineAtHeight(cm.doc, mY);\n var gutter = cm.options.gutters[i];\n signalfn(cm, type, cm, line, gutter, e);\n return e_defaultPrevented(e);\n }\n }\n }\n\n function clickInGutter(cm, e) {\n return gutterEvent(cm, e, \"gutterClick\", true, signalLater);\n }\n\n // Kludge to work around strange IE behavior where it'll sometimes\n // re-fire a series of drag-related events right after the drop (#1551)\n var lastDrop = 0;\n\n function onDrop(e) {\n var cm = this;\n if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e))\n return;\n e_preventDefault(e);\n if (ie) lastDrop = +new Date;\n var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files;\n if (!pos || isReadOnly(cm)) return;\n // Might be a file drop, in which case we simply extract the text\n // and insert it.\n if (files && files.length && window.FileReader && window.File) {\n var n = files.length, text = Array(n), read = 0;\n var loadFile = function(file, i) {\n var reader = new FileReader;\n reader.onload = operation(cm, function() {\n text[i] = reader.result;\n if (++read == n) {\n pos = clipPos(cm.doc, pos);\n var change = {from: pos, to: pos, text: splitLines(text.join(\"\\n\")), origin: \"paste\"};\n makeChange(cm.doc, change);\n setSelectionReplaceHistory(cm.doc, simpleSelection(pos, changeEnd(change)));\n }\n });\n reader.readAsText(file);\n };\n for (var i = 0; i < n; ++i) loadFile(files[i], i);\n } else { // Normal drop\n // Don't do a replace if the drop happened inside of the selected text.\n if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) {\n cm.state.draggingText(e);\n // Ensure the editor is re-focused\n setTimeout(bind(focusInput, cm), 20);\n return;\n }\n try {\n var text = e.dataTransfer.getData(\"Text\");\n if (text) {\n if (cm.state.draggingText && !(mac ? e.metaKey : e.ctrlKey))\n var selected = cm.listSelections();\n setSelectionNoUndo(cm.doc, simpleSelection(pos, pos));\n if (selected) for (var i = 0; i < selected.length; ++i)\n replaceRange(cm.doc, \"\", selected[i].anchor, selected[i].head, \"drag\");\n cm.replaceSelection(text, \"around\", \"paste\");\n focusInput(cm);\n }\n }\n catch(e){}\n }\n }\n\n function onDragStart(cm, e) {\n if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return; }\n if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) return;\n\n e.dataTransfer.setData(\"Text\", cm.getSelection());\n\n // Use dummy image instead of default browsers image.\n // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there.\n if (e.dataTransfer.setDragImage && !safari) {\n var img = elt(\"img\", null, null, \"position: fixed; left: 0; top: 0;\");\n img.src = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n if (presto) {\n img.width = img.height = 1;\n cm.display.wrapper.appendChild(img);\n // Force a relayout, or Opera won't use our image for some obscure reason\n img._top = img.offsetTop;\n }\n e.dataTransfer.setDragImage(img, 0, 0);\n if (presto) img.parentNode.removeChild(img);\n }\n }\n\n // SCROLL EVENTS\n\n // Sync the scrollable area and scrollbars, ensure the viewport\n // covers the visible area.\n function setScrollTop(cm, val) {\n if (Math.abs(cm.doc.scrollTop - val) < 2) return;\n cm.doc.scrollTop = val;\n if (!gecko) updateDisplaySimple(cm, {top: val});\n if (cm.display.scroller.scrollTop != val) cm.display.scroller.scrollTop = val;\n cm.display.scrollbars.setScrollTop(val);\n if (gecko) updateDisplaySimple(cm);\n startWorker(cm, 100);\n }\n // Sync scroller and scrollbar, ensure the gutter elements are\n // aligned.\n function setScrollLeft(cm, val, isScroller) {\n if (isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) return;\n val = Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth);\n cm.doc.scrollLeft = val;\n alignHorizontally(cm);\n if (cm.display.scroller.scrollLeft != val) cm.display.scroller.scrollLeft = val;\n cm.display.scrollbars.setScrollLeft(val);\n }\n\n // Since the delta values reported on mouse wheel events are\n // unstandardized between browsers and even browser versions, and\n // generally horribly unpredictable, this code starts by measuring\n // the scroll effect that the first few mouse wheel events have,\n // and, from that, detects the way it can convert deltas to pixel\n // offsets afterwards.\n //\n // The reason we want to know the amount a wheel event will scroll\n // is that it gives us a chance to update the display before the\n // actual scrolling happens, reducing flickering.\n\n var wheelSamples = 0, wheelPixelsPerUnit = null;\n // Fill in a browser-detected starting value on browsers where we\n // know one. These don't have to be accurate -- the result of them\n // being wrong would just be a slight flicker on the first wheel\n // scroll (if it is large enough).\n if (ie) wheelPixelsPerUnit = -.53;\n else if (gecko) wheelPixelsPerUnit = 15;\n else if (chrome) wheelPixelsPerUnit = -.7;\n else if (safari) wheelPixelsPerUnit = -1/3;\n\n var wheelEventDelta = function(e) {\n var dx = e.wheelDeltaX, dy = e.wheelDeltaY;\n if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) dx = e.detail;\n if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) dy = e.detail;\n else if (dy == null) dy = e.wheelDelta;\n return {x: dx, y: dy};\n };\n CodeMirror.wheelEventPixels = function(e) {\n var delta = wheelEventDelta(e);\n delta.x *= wheelPixelsPerUnit;\n delta.y *= wheelPixelsPerUnit;\n return delta;\n };\n\n function onScrollWheel(cm, e) {\n var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y;\n\n var display = cm.display, scroll = display.scroller;\n // Quit if there's nothing to scroll here\n if (!(dx && scroll.scrollWidth > scroll.clientWidth ||\n dy && scroll.scrollHeight > scroll.clientHeight)) return;\n\n // Webkit browsers on OS X abort momentum scrolls when the target\n // of the scroll event is removed from the scrollable element.\n // This hack (see related code in patchDisplay) makes sure the\n // element is kept around.\n if (dy && mac && webkit) {\n outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) {\n for (var i = 0; i < view.length; i++) {\n if (view[i].node == cur) {\n cm.display.currentWheelTarget = cur;\n break outer;\n }\n }\n }\n }\n\n // On some browsers, horizontal scrolling will cause redraws to\n // happen before the gutter has been realigned, causing it to\n // wriggle around in a most unseemly way. When we have an\n // estimated pixels/delta value, we just handle horizontal\n // scrolling entirely here. It'll be slightly off from native, but\n // better than glitching out.\n if (dx && !gecko && !presto && wheelPixelsPerUnit != null) {\n if (dy)\n setScrollTop(cm, Math.max(0, Math.min(scroll.scrollTop + dy * wheelPixelsPerUnit, scroll.scrollHeight - scroll.clientHeight)));\n setScrollLeft(cm, Math.max(0, Math.min(scroll.scrollLeft + dx * wheelPixelsPerUnit, scroll.scrollWidth - scroll.clientWidth)));\n e_preventDefault(e);\n display.wheelStartX = null; // Abort measurement, if in progress\n return;\n }\n\n // 'Project' the visible viewport to cover the area that is being\n // scrolled into view (if we know enough to estimate it).\n if (dy && wheelPixelsPerUnit != null) {\n var pixels = dy * wheelPixelsPerUnit;\n var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight;\n if (pixels < 0) top = Math.max(0, top + pixels - 50);\n else bot = Math.min(cm.doc.height, bot + pixels + 50);\n updateDisplaySimple(cm, {top: top, bottom: bot});\n }\n\n if (wheelSamples < 20) {\n if (display.wheelStartX == null) {\n display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop;\n display.wheelDX = dx; display.wheelDY = dy;\n setTimeout(function() {\n if (display.wheelStartX == null) return;\n var movedX = scroll.scrollLeft - display.wheelStartX;\n var movedY = scroll.scrollTop - display.wheelStartY;\n var sample = (movedY && display.wheelDY && movedY / display.wheelDY) ||\n (movedX && display.wheelDX && movedX / display.wheelDX);\n display.wheelStartX = display.wheelStartY = null;\n if (!sample) return;\n wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1);\n ++wheelSamples;\n }, 200);\n } else {\n display.wheelDX += dx; display.wheelDY += dy;\n }\n }\n }\n\n // KEY EVENTS\n\n // Run a handler that was bound to a key.\n function doHandleBinding(cm, bound, dropShift) {\n if (typeof bound == \"string\") {\n bound = commands[bound];\n if (!bound) return false;\n }\n // Ensure previous input has been read, so that the handler sees a\n // consistent view of the document\n if (cm.display.pollingFast && readInput(cm)) cm.display.pollingFast = false;\n var prevShift = cm.display.shift, done = false;\n try {\n if (isReadOnly(cm)) cm.state.suppressEdits = true;\n if (dropShift) cm.display.shift = false;\n done = bound(cm) != Pass;\n } finally {\n cm.display.shift = prevShift;\n cm.state.suppressEdits = false;\n }\n return done;\n }\n\n function lookupKeyForEditor(cm, name, handle) {\n for (var i = 0; i < cm.state.keyMaps.length; i++) {\n var result = lookupKey(name, cm.state.keyMaps[i], handle, cm);\n if (result) return result;\n }\n return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm))\n || lookupKey(name, cm.options.keyMap, handle, cm);\n }\n\n var stopSeq = new Delayed;\n function dispatchKey(cm, name, e, handle) {\n var seq = cm.state.keySeq;\n if (seq) {\n if (isModifierKey(name)) return \"handled\";\n stopSeq.set(50, function() {\n if (cm.state.keySeq == seq) {\n cm.state.keySeq = null;\n resetInput(cm);\n }\n });\n name = seq + \" \" + name;\n }\n var result = lookupKeyForEditor(cm, name, handle);\n\n if (result == \"multi\")\n cm.state.keySeq = name;\n if (result == \"handled\")\n signalLater(cm, \"keyHandled\", cm, name, e);\n\n if (result == \"handled\" || result == \"multi\") {\n e_preventDefault(e);\n restartBlink(cm);\n }\n\n if (seq && !result && /\\'$/.test(name)) {\n e_preventDefault(e);\n return true;\n }\n return !!result;\n }\n\n // Handle a key from the keydown event.\n function handleKeyBinding(cm, e) {\n var name = keyName(e, true);\n if (!name) return false;\n\n if (e.shiftKey && !cm.state.keySeq) {\n // First try to resolve full name (including 'Shift-'). Failing\n // that, see if there is a cursor-motion command (starting with\n // 'go') bound to the keyname without 'Shift-'.\n return dispatchKey(cm, \"Shift-\" + name, e, function(b) {return doHandleBinding(cm, b, true);})\n || dispatchKey(cm, name, e, function(b) {\n if (typeof b == \"string\" ? /^go[A-Z]/.test(b) : b.motion)\n return doHandleBinding(cm, b);\n });\n } else {\n return dispatchKey(cm, name, e, function(b) { return doHandleBinding(cm, b); });\n }\n }\n\n // Handle a key from the keypress event\n function handleCharBinding(cm, e, ch) {\n return dispatchKey(cm, \"'\" + ch + \"'\", e,\n function(b) { return doHandleBinding(cm, b, true); });\n }\n\n var lastStoppedKey = null;\n function onKeyDown(e) {\n var cm = this;\n ensureFocus(cm);\n if (signalDOMEvent(cm, e)) return;\n // IE does strange things with escape.\n if (ie && ie_version < 11 && e.keyCode == 27) e.returnValue = false;\n var code = e.keyCode;\n cm.display.shift = code == 16 || e.shiftKey;\n var handled = handleKeyBinding(cm, e);\n if (presto) {\n lastStoppedKey = handled ? code : null;\n // Opera has no cut event... we try to at least catch the key combo\n if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey))\n cm.replaceSelection(\"\", null, \"cut\");\n }\n\n // Turn mouse into crosshair when Alt is held on Mac.\n if (code == 18 && !/\\bCodeMirror-crosshair\\b/.test(cm.display.lineDiv.className))\n showCrossHair(cm);\n }\n\n function showCrossHair(cm) {\n var lineDiv = cm.display.lineDiv;\n addClass(lineDiv, \"CodeMirror-crosshair\");\n\n function up(e) {\n if (e.keyCode == 18 || !e.altKey) {\n rmClass(lineDiv, \"CodeMirror-crosshair\");\n off(document, \"keyup\", up);\n off(document, \"mouseover\", up);\n }\n }\n on(document, \"keyup\", up);\n on(document, \"mouseover\", up);\n }\n\n function onKeyUp(e) {\n if (e.keyCode == 16) this.doc.sel.shift = false;\n signalDOMEvent(this, e);\n }\n\n function onKeyPress(e) {\n var cm = this;\n if (signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) return;\n var keyCode = e.keyCode, charCode = e.charCode;\n if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return;}\n if (((presto && (!e.which || e.which < 10)) || khtml) && handleKeyBinding(cm, e)) return;\n var ch = String.fromCharCode(charCode == null ? keyCode : charCode);\n if (handleCharBinding(cm, e, ch)) return;\n if (ie && ie_version >= 9) cm.display.inputHasSelection = null;\n fastPoll(cm);\n }\n\n // FOCUS/BLUR EVENTS\n\n function onFocus(cm) {\n if (cm.options.readOnly == \"nocursor\") return;\n if (!cm.state.focused) {\n signal(cm, \"focus\", cm);\n cm.state.focused = true;\n addClass(cm.display.wrapper, \"CodeMirror-focused\");\n // The prevInput test prevents this from firing when a context\n // menu is closed (since the resetInput would kill the\n // select-all detection hack)\n if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) {\n resetInput(cm);\n if (webkit) setTimeout(bind(resetInput, cm, true), 0); // Issue #1730\n }\n }\n slowPoll(cm);\n restartBlink(cm);\n }\n function onBlur(cm) {\n if (cm.state.focused) {\n signal(cm, \"blur\", cm);\n cm.state.focused = false;\n rmClass(cm.display.wrapper, \"CodeMirror-focused\");\n }\n clearInterval(cm.display.blinker);\n setTimeout(function() {if (!cm.state.focused) cm.display.shift = false;}, 150);\n }\n\n // CONTEXT MENU HANDLING\n\n // To make the context menu work, we need to briefly unhide the\n // textarea (making it as unobtrusive as possible) to let the\n // right-click take effect on it.\n function onContextMenu(cm, e) {\n if (signalDOMEvent(cm, e, \"contextmenu\")) return;\n var display = cm.display;\n if (eventInWidget(display, e) || contextMenuInGutter(cm, e)) return;\n\n var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop;\n if (!pos || presto) return; // Opera is difficult.\n\n // Reset the current text selection only if the click is done outside of the selection\n // and 'resetSelectionOnContextMenu' option is true.\n var reset = cm.options.resetSelectionOnContextMenu;\n if (reset && cm.doc.sel.contains(pos) == -1)\n operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll);\n\n var oldCSS = display.input.style.cssText;\n display.inputDiv.style.position = \"absolute\";\n display.input.style.cssText = \"position: fixed; width: 30px; height: 30px; top: \" + (e.clientY - 5) +\n \"px; left: \" + (e.clientX - 5) + \"px; z-index: 1000; background: \" +\n (ie ? \"rgba(255, 255, 255, .05)\" : \"transparent\") +\n \"; outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);\";\n if (webkit) var oldScrollY = window.scrollY; // Work around Chrome issue (#2712)\n focusInput(cm);\n if (webkit) window.scrollTo(null, oldScrollY);\n resetInput(cm);\n // Adds \"Select all\" to context menu in FF\n if (!cm.somethingSelected()) display.input.value = display.prevInput = \" \";\n display.contextMenuPending = true;\n display.selForContextMenu = cm.doc.sel;\n clearTimeout(display.detectingSelectAll);\n\n // Select-all will be greyed out if there's nothing to select, so\n // this adds a zero-width space so that we can later check whether\n // it got selected.\n function prepareSelectAllHack() {\n if (display.input.selectionStart != null) {\n var selected = cm.somethingSelected();\n var extval = display.input.value = \"\\u200b\" + (selected ? display.input.value : \"\");\n display.prevInput = selected ? \"\" : \"\\u200b\";\n display.input.selectionStart = 1; display.input.selectionEnd = extval.length;\n // Re-set this, in case some other handler touched the\n // selection in the meantime.\n display.selForContextMenu = cm.doc.sel;\n }\n }\n function rehide() {\n display.contextMenuPending = false;\n display.inputDiv.style.position = \"relative\";\n display.input.style.cssText = oldCSS;\n if (ie && ie_version < 9) display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos);\n slowPoll(cm);\n\n // Try to detect the user choosing select-all\n if (display.input.selectionStart != null) {\n if (!ie || (ie && ie_version < 9)) prepareSelectAllHack();\n var i = 0, poll = function() {\n if (display.selForContextMenu == cm.doc.sel && display.input.selectionStart == 0)\n operation(cm, commands.selectAll)(cm);\n else if (i++ < 10) display.detectingSelectAll = setTimeout(poll, 500);\n else resetInput(cm);\n };\n display.detectingSelectAll = setTimeout(poll, 200);\n }\n }\n\n if (ie && ie_version >= 9) prepareSelectAllHack();\n if (captureRightClick) {\n e_stop(e);\n var mouseup = function() {\n off(window, \"mouseup\", mouseup);\n setTimeout(rehide, 20);\n };\n on(window, \"mouseup\", mouseup);\n } else {\n setTimeout(rehide, 50);\n }\n }\n\n function contextMenuInGutter(cm, e) {\n if (!hasHandler(cm, \"gutterContextMenu\")) return false;\n return gutterEvent(cm, e, \"gutterContextMenu\", false, signal);\n }\n\n // UPDATING\n\n // Compute the position of the end of a change (its 'to' property\n // refers to the pre-change end).\n var changeEnd = CodeMirror.changeEnd = function(change) {\n if (!change.text) return change.to;\n return Pos(change.from.line + change.text.length - 1,\n lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0));\n };\n\n // Adjust a position to refer to the post-change position of the\n // same text, or the end of the change if the change covers it.\n function adjustForChange(pos, change) {\n if (cmp(pos, change.from) < 0) return pos;\n if (cmp(pos, change.to) <= 0) return changeEnd(change);\n\n var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch;\n if (pos.line == change.to.line) ch += changeEnd(change).ch - change.to.ch;\n return Pos(line, ch);\n }\n\n function computeSelAfterChange(doc, change) {\n var out = [];\n for (var i = 0; i < doc.sel.ranges.length; i++) {\n var range = doc.sel.ranges[i];\n out.push(new Range(adjustForChange(range.anchor, change),\n adjustForChange(range.head, change)));\n }\n return normalizeSelection(out, doc.sel.primIndex);\n }\n\n function offsetPos(pos, old, nw) {\n if (pos.line == old.line)\n return Pos(nw.line, pos.ch - old.ch + nw.ch);\n else\n return Pos(nw.line + (pos.line - old.line), pos.ch);\n }\n\n // Used by replaceSelections to allow moving the selection to the\n // start or around the replaced test. Hint may be \"start\" or \"around\".\n function computeReplacedSel(doc, changes, hint) {\n var out = [];\n var oldPrev = Pos(doc.first, 0), newPrev = oldPrev;\n for (var i = 0; i < changes.length; i++) {\n var change = changes[i];\n var from = offsetPos(change.from, oldPrev, newPrev);\n var to = offsetPos(changeEnd(change), oldPrev, newPrev);\n oldPrev = change.to;\n newPrev = to;\n if (hint == \"around\") {\n var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0;\n out[i] = new Range(inv ? to : from, inv ? from : to);\n } else {\n out[i] = new Range(from, from);\n }\n }\n return new Selection(out, doc.sel.primIndex);\n }\n\n // Allow \"beforeChange\" event handlers to influence a change\n function filterChange(doc, change, update) {\n var obj = {\n canceled: false,\n from: change.from,\n to: change.to,\n text: change.text,\n origin: change.origin,\n cancel: function() { this.canceled = true; }\n };\n if (update) obj.update = function(from, to, text, origin) {\n if (from) this.from = clipPos(doc, from);\n if (to) this.to = clipPos(doc, to);\n if (text) this.text = text;\n if (origin !== undefined) this.origin = origin;\n };\n signal(doc, \"beforeChange\", doc, obj);\n if (doc.cm) signal(doc.cm, \"beforeChange\", doc.cm, obj);\n\n if (obj.canceled) return null;\n return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin};\n }\n\n // Apply a change to a document, and add it to the document's\n // history, and propagating it to all linked documents.\n function makeChange(doc, change, ignoreReadOnly) {\n if (doc.cm) {\n if (!doc.cm.curOp) return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly);\n if (doc.cm.state.suppressEdits) return;\n }\n\n if (hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\")) {\n change = filterChange(doc, change, true);\n if (!change) return;\n }\n\n // Possibly split or suppress the update based on the presence\n // of read-only spans in its range.\n var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to);\n if (split) {\n for (var i = split.length - 1; i >= 0; --i)\n makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [\"\"] : change.text});\n } else {\n makeChangeInner(doc, change);\n }\n }\n\n function makeChangeInner(doc, change) {\n if (change.text.length == 1 && change.text[0] == \"\" && cmp(change.from, change.to) == 0) return;\n var selAfter = computeSelAfterChange(doc, change);\n addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN);\n\n makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change));\n var rebased = [];\n\n linkedDocs(doc, function(doc, sharedHist) {\n if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n rebaseHist(doc.history, change);\n rebased.push(doc.history);\n }\n makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change));\n });\n }\n\n // Revert a change stored in a document's history.\n function makeChangeFromHistory(doc, type, allowSelectionOnly) {\n if (doc.cm && doc.cm.state.suppressEdits) return;\n\n var hist = doc.history, event, selAfter = doc.sel;\n var source = type == \"undo\" ? hist.done : hist.undone, dest = type == \"undo\" ? hist.undone : hist.done;\n\n // Verify that there is a useable event (so that ctrl-z won't\n // needlessly clear selection events)\n for (var i = 0; i < source.length; i++) {\n event = source[i];\n if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges)\n break;\n }\n if (i == source.length) return;\n hist.lastOrigin = hist.lastSelOrigin = null;\n\n for (;;) {\n event = source.pop();\n if (event.ranges) {\n pushSelectionToHistory(event, dest);\n if (allowSelectionOnly && !event.equals(doc.sel)) {\n setSelection(doc, event, {clearRedo: false});\n return;\n }\n selAfter = event;\n }\n else break;\n }\n\n // Build up a reverse change object to add to the opposite history\n // stack (redo when undoing, and vice versa).\n var antiChanges = [];\n pushSelectionToHistory(selAfter, dest);\n dest.push({changes: antiChanges, generation: hist.generation});\n hist.generation = event.generation || ++hist.maxGeneration;\n\n var filter = hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\");\n\n for (var i = event.changes.length - 1; i >= 0; --i) {\n var change = event.changes[i];\n change.origin = type;\n if (filter && !filterChange(doc, change, false)) {\n source.length = 0;\n return;\n }\n\n antiChanges.push(historyChangeFromChange(doc, change));\n\n var after = i ? computeSelAfterChange(doc, change) : lst(source);\n makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change));\n if (!i && doc.cm) doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)});\n var rebased = [];\n\n // Propagate to the linked documents\n linkedDocs(doc, function(doc, sharedHist) {\n if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n rebaseHist(doc.history, change);\n rebased.push(doc.history);\n }\n makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change));\n });\n }\n }\n\n // Sub-views need their line numbers shifted when text is added\n // above or below them in the parent document.\n function shiftDoc(doc, distance) {\n if (distance == 0) return;\n doc.first += distance;\n doc.sel = new Selection(map(doc.sel.ranges, function(range) {\n return new Range(Pos(range.anchor.line + distance, range.anchor.ch),\n Pos(range.head.line + distance, range.head.ch));\n }), doc.sel.primIndex);\n if (doc.cm) {\n regChange(doc.cm, doc.first, doc.first - distance, distance);\n for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++)\n regLineChange(doc.cm, l, \"gutter\");\n }\n }\n\n // More lower-level change function, handling only a single document\n // (not linked ones).\n function makeChangeSingleDoc(doc, change, selAfter, spans) {\n if (doc.cm && !doc.cm.curOp)\n return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans);\n\n if (change.to.line < doc.first) {\n shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line));\n return;\n }\n if (change.from.line > doc.lastLine()) return;\n\n // Clip the change to the size of this doc\n if (change.from.line < doc.first) {\n var shift = change.text.length - 1 - (doc.first - change.from.line);\n shiftDoc(doc, shift);\n change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch),\n text: [lst(change.text)], origin: change.origin};\n }\n var last = doc.lastLine();\n if (change.to.line > last) {\n change = {from: change.from, to: Pos(last, getLine(doc, last).text.length),\n text: [change.text[0]], origin: change.origin};\n }\n\n change.removed = getBetween(doc, change.from, change.to);\n\n if (!selAfter) selAfter = computeSelAfterChange(doc, change);\n if (doc.cm) makeChangeSingleDocInEditor(doc.cm, change, spans);\n else updateDoc(doc, change, spans);\n setSelectionNoUndo(doc, selAfter, sel_dontScroll);\n }\n\n // Handle the interaction of a change to a document with the editor\n // that this document is part of.\n function makeChangeSingleDocInEditor(cm, change, spans) {\n var doc = cm.doc, display = cm.display, from = change.from, to = change.to;\n\n var recomputeMaxLength = false, checkWidthStart = from.line;\n if (!cm.options.lineWrapping) {\n checkWidthStart = lineNo(visualLine(getLine(doc, from.line)));\n doc.iter(checkWidthStart, to.line + 1, function(line) {\n if (line == display.maxLine) {\n recomputeMaxLength = true;\n return true;\n }\n });\n }\n\n if (doc.sel.contains(change.from, change.to) > -1)\n signalCursorActivity(cm);\n\n updateDoc(doc, change, spans, estimateHeight(cm));\n\n if (!cm.options.lineWrapping) {\n doc.iter(checkWidthStart, from.line + change.text.length, function(line) {\n var len = lineLength(line);\n if (len > display.maxLineLength) {\n display.maxLine = line;\n display.maxLineLength = len;\n display.maxLineChanged = true;\n recomputeMaxLength = false;\n }\n });\n if (recomputeMaxLength) cm.curOp.updateMaxLine = true;\n }\n\n // Adjust frontier, schedule worker\n doc.frontier = Math.min(doc.frontier, from.line);\n startWorker(cm, 400);\n\n var lendiff = change.text.length - (to.line - from.line) - 1;\n // Remember that these lines changed, for updating the display\n if (change.full)\n regChange(cm);\n else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change))\n regLineChange(cm, from.line, \"text\");\n else\n regChange(cm, from.line, to.line + 1, lendiff);\n\n var changesHandler = hasHandler(cm, \"changes\"), changeHandler = hasHandler(cm, \"change\");\n if (changeHandler || changesHandler) {\n var obj = {\n from: from, to: to,\n text: change.text,\n removed: change.removed,\n origin: change.origin\n };\n if (changeHandler) signalLater(cm, \"change\", cm, obj);\n if (changesHandler) (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj);\n }\n cm.display.selForContextMenu = null;\n }\n\n function replaceRange(doc, code, from, to, origin) {\n if (!to) to = from;\n if (cmp(to, from) < 0) { var tmp = to; to = from; from = tmp; }\n if (typeof code == \"string\") code = splitLines(code);\n makeChange(doc, {from: from, to: to, text: code, origin: origin});\n }\n\n // SCROLLING THINGS INTO VIEW\n\n // If an editor sits on the top or bottom of the window, partially\n // scrolled out of view, this ensures that the cursor is visible.\n function maybeScrollWindow(cm, coords) {\n if (signalDOMEvent(cm, \"scrollCursorIntoView\")) return;\n\n var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null;\n if (coords.top + box.top < 0) doScroll = true;\n else if (coords.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) doScroll = false;\n if (doScroll != null && !phantom) {\n var scrollNode = elt(\"div\", \"\\u200b\", null, \"position: absolute; top: \" +\n (coords.top - display.viewOffset - paddingTop(cm.display)) + \"px; height: \" +\n (coords.bottom - coords.top + scrollGap(cm) + display.barHeight) + \"px; left: \" +\n coords.left + \"px; width: 2px;\");\n cm.display.lineSpace.appendChild(scrollNode);\n scrollNode.scrollIntoView(doScroll);\n cm.display.lineSpace.removeChild(scrollNode);\n }\n }\n\n // Scroll a given position into view (immediately), verifying that\n // it actually became visible (as line heights are accurately\n // measured, the position of something may 'drift' during drawing).\n function scrollPosIntoView(cm, pos, end, margin) {\n if (margin == null) margin = 0;\n for (var limit = 0; limit < 5; limit++) {\n var changed = false, coords = cursorCoords(cm, pos);\n var endCoords = !end || end == pos ? coords : cursorCoords(cm, end);\n var scrollPos = calculateScrollPos(cm, Math.min(coords.left, endCoords.left),\n Math.min(coords.top, endCoords.top) - margin,\n Math.max(coords.left, endCoords.left),\n Math.max(coords.bottom, endCoords.bottom) + margin);\n var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft;\n if (scrollPos.scrollTop != null) {\n setScrollTop(cm, scrollPos.scrollTop);\n if (Math.abs(cm.doc.scrollTop - startTop) > 1) changed = true;\n }\n if (scrollPos.scrollLeft != null) {\n setScrollLeft(cm, scrollPos.scrollLeft);\n if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) changed = true;\n }\n if (!changed) break;\n }\n return coords;\n }\n\n // Scroll a given set of coordinates into view (immediately).\n function scrollIntoView(cm, x1, y1, x2, y2) {\n var scrollPos = calculateScrollPos(cm, x1, y1, x2, y2);\n if (scrollPos.scrollTop != null) setScrollTop(cm, scrollPos.scrollTop);\n if (scrollPos.scrollLeft != null) setScrollLeft(cm, scrollPos.scrollLeft);\n }\n\n // Calculate a new scroll position needed to scroll the given\n // rectangle into view. Returns an object with scrollTop and\n // scrollLeft properties. When these are undefined, the\n // vertical/horizontal position does not need to be adjusted.\n function calculateScrollPos(cm, x1, y1, x2, y2) {\n var display = cm.display, snapMargin = textHeight(cm.display);\n if (y1 < 0) y1 = 0;\n var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop;\n var screen = displayHeight(cm), result = {};\n if (y2 - y1 > screen) y2 = y1 + screen;\n var docBottom = cm.doc.height + paddingVert(display);\n var atTop = y1 < snapMargin, atBottom = y2 > docBottom - snapMargin;\n if (y1 < screentop) {\n result.scrollTop = atTop ? 0 : y1;\n } else if (y2 > screentop + screen) {\n var newTop = Math.min(y1, (atBottom ? docBottom : y2) - screen);\n if (newTop != screentop) result.scrollTop = newTop;\n }\n\n var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft;\n var screenw = displayWidth(cm) - (cm.options.fixedGutter ? display.gutters.offsetWidth : 0);\n var tooWide = x2 - x1 > screenw;\n if (tooWide) x2 = x1 + screenw;\n if (x1 < 10)\n result.scrollLeft = 0;\n else if (x1 < screenleft)\n result.scrollLeft = Math.max(0, x1 - (tooWide ? 0 : 10));\n else if (x2 > screenw + screenleft - 3)\n result.scrollLeft = x2 + (tooWide ? 0 : 10) - screenw;\n return result;\n }\n\n // Store a relative adjustment to the scroll position in the current\n // operation (to be applied when the operation finishes).\n function addToScrollPos(cm, left, top) {\n if (left != null || top != null) resolveScrollToPos(cm);\n if (left != null)\n cm.curOp.scrollLeft = (cm.curOp.scrollLeft == null ? cm.doc.scrollLeft : cm.curOp.scrollLeft) + left;\n if (top != null)\n cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top;\n }\n\n // Make sure that at the end of the operation the current cursor is\n // shown.\n function ensureCursorVisible(cm) {\n resolveScrollToPos(cm);\n var cur = cm.getCursor(), from = cur, to = cur;\n if (!cm.options.lineWrapping) {\n from = cur.ch ? Pos(cur.line, cur.ch - 1) : cur;\n to = Pos(cur.line, cur.ch + 1);\n }\n cm.curOp.scrollToPos = {from: from, to: to, margin: cm.options.cursorScrollMargin, isCursor: true};\n }\n\n // When an operation has its scrollToPos property set, and another\n // scroll action is applied before the end of the operation, this\n // 'simulates' scrolling that position into view in a cheap way, so\n // that the effect of intermediate scroll commands is not ignored.\n function resolveScrollToPos(cm) {\n var range = cm.curOp.scrollToPos;\n if (range) {\n cm.curOp.scrollToPos = null;\n var from = estimateCoords(cm, range.from), to = estimateCoords(cm, range.to);\n var sPos = calculateScrollPos(cm, Math.min(from.left, to.left),\n Math.min(from.top, to.top) - range.margin,\n Math.max(from.right, to.right),\n Math.max(from.bottom, to.bottom) + range.margin);\n cm.scrollTo(sPos.scrollLeft, sPos.scrollTop);\n }\n }\n\n // API UTILITIES\n\n // Indent the given line. The how parameter can be \"smart\",\n // \"add\"/null, \"subtract\", or \"prev\". When aggressive is false\n // (typically set to true for forced single-line indents), empty\n // lines are not indented, and places where the mode returns Pass\n // are left alone.\n function indentLine(cm, n, how, aggressive) {\n var doc = cm.doc, state;\n if (how == null) how = \"add\";\n if (how == \"smart\") {\n // Fall back to \"prev\" when the mode doesn't have an indentation\n // method.\n if (!doc.mode.indent) how = \"prev\";\n else state = getStateBefore(cm, n);\n }\n\n var tabSize = cm.options.tabSize;\n var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize);\n if (line.stateAfter) line.stateAfter = null;\n var curSpaceString = line.text.match(/^\\s*/)[0], indentation;\n if (!aggressive && !/\\S/.test(line.text)) {\n indentation = 0;\n how = \"not\";\n } else if (how == \"smart\") {\n indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text);\n if (indentation == Pass || indentation > 150) {\n if (!aggressive) return;\n how = \"prev\";\n }\n }\n if (how == \"prev\") {\n if (n > doc.first) indentation = countColumn(getLine(doc, n-1).text, null, tabSize);\n else indentation = 0;\n } else if (how == \"add\") {\n indentation = curSpace + cm.options.indentUnit;\n } else if (how == \"subtract\") {\n indentation = curSpace - cm.options.indentUnit;\n } else if (typeof how == \"number\") {\n indentation = curSpace + how;\n }\n indentation = Math.max(0, indentation);\n\n var indentString = \"\", pos = 0;\n if (cm.options.indentWithTabs)\n for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += \"\\t\";}\n if (pos < indentation) indentString += spaceStr(indentation - pos);\n\n if (indentString != curSpaceString) {\n replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), \"+input\");\n } else {\n // Ensure that, if the cursor was in the whitespace at the start\n // of the line, it is moved to the end of that space.\n for (var i = 0; i < doc.sel.ranges.length; i++) {\n var range = doc.sel.ranges[i];\n if (range.head.line == n && range.head.ch < curSpaceString.length) {\n var pos = Pos(n, curSpaceString.length);\n replaceOneSelection(doc, i, new Range(pos, pos));\n break;\n }\n }\n }\n line.stateAfter = null;\n }\n\n // Utility for applying a change to a line by handle or number,\n // returning the number and optionally registering the line as\n // changed.\n function changeLine(doc, handle, changeType, op) {\n var no = handle, line = handle;\n if (typeof handle == \"number\") line = getLine(doc, clipLine(doc, handle));\n else no = lineNo(handle);\n if (no == null) return null;\n if (op(line, no) && doc.cm) regLineChange(doc.cm, no, changeType);\n return line;\n }\n\n // Helper for deleting text near the selection(s), used to implement\n // backspace, delete, and similar functionality.\n function deleteNearSelection(cm, compute) {\n var ranges = cm.doc.sel.ranges, kill = [];\n // Build up a set of ranges to kill first, merging overlapping\n // ranges.\n for (var i = 0; i < ranges.length; i++) {\n var toKill = compute(ranges[i]);\n while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) {\n var replaced = kill.pop();\n if (cmp(replaced.from, toKill.from) < 0) {\n toKill.from = replaced.from;\n break;\n }\n }\n kill.push(toKill);\n }\n // Next, remove those actual ranges.\n runInOp(cm, function() {\n for (var i = kill.length - 1; i >= 0; i--)\n replaceRange(cm.doc, \"\", kill[i].from, kill[i].to, \"+delete\");\n ensureCursorVisible(cm);\n });\n }\n\n // Used for horizontal relative motion. Dir is -1 or 1 (left or\n // right), unit can be \"char\", \"column\" (like char, but doesn't\n // cross line boundaries), \"word\" (across next word), or \"group\" (to\n // the start of next group of word or non-word-non-whitespace\n // chars). The visually param controls whether, in right-to-left\n // text, direction 1 means to move towards the next index in the\n // string, or towards the character to the right of the current\n // position. The resulting position will have a hitSide=true\n // property if it reached the end of the document.\n function findPosH(doc, pos, dir, unit, visually) {\n var line = pos.line, ch = pos.ch, origDir = dir;\n var lineObj = getLine(doc, line);\n var possible = true;\n function findNextLine() {\n var l = line + dir;\n if (l < doc.first || l >= doc.first + doc.size) return (possible = false);\n line = l;\n return lineObj = getLine(doc, l);\n }\n function moveOnce(boundToLine) {\n var next = (visually ? moveVisually : moveLogically)(lineObj, ch, dir, true);\n if (next == null) {\n if (!boundToLine && findNextLine()) {\n if (visually) ch = (dir < 0 ? lineRight : lineLeft)(lineObj);\n else ch = dir < 0 ? lineObj.text.length : 0;\n } else return (possible = false);\n } else ch = next;\n return true;\n }\n\n if (unit == \"char\") moveOnce();\n else if (unit == \"column\") moveOnce(true);\n else if (unit == \"word\" || unit == \"group\") {\n var sawType = null, group = unit == \"group\";\n var helper = doc.cm && doc.cm.getHelper(pos, \"wordChars\");\n for (var first = true;; first = false) {\n if (dir < 0 && !moveOnce(!first)) break;\n var cur = lineObj.text.charAt(ch) || \"\\n\";\n var type = isWordChar(cur, helper) ? \"w\"\n : group && cur == \"\\n\" ? \"n\"\n : !group || /\\s/.test(cur) ? null\n : \"p\";\n if (group && !first && !type) type = \"s\";\n if (sawType && sawType != type) {\n if (dir < 0) {dir = 1; moveOnce();}\n break;\n }\n\n if (type) sawType = type;\n if (dir > 0 && !moveOnce(!first)) break;\n }\n }\n var result = skipAtomic(doc, Pos(line, ch), origDir, true);\n if (!possible) result.hitSide = true;\n return result;\n }\n\n // For relative vertical movement. Dir may be -1 or 1. Unit can be\n // \"page\" or \"line\". The resulting position will have a hitSide=true\n // property if it reached the end of the document.\n function findPosV(cm, pos, dir, unit) {\n var doc = cm.doc, x = pos.left, y;\n if (unit == \"page\") {\n var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight);\n y = pos.top + dir * (pageSize - (dir < 0 ? 1.5 : .5) * textHeight(cm.display));\n } else if (unit == \"line\") {\n y = dir > 0 ? pos.bottom + 3 : pos.top - 3;\n }\n for (;;) {\n var target = coordsChar(cm, x, y);\n if (!target.outside) break;\n if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break; }\n y += dir * 5;\n }\n return target;\n }\n\n // EDITOR METHODS\n\n // The publicly visible API. Note that methodOp(f) means\n // 'wrap f in an operation, performed on its `this` parameter'.\n\n // This is not the complete set of editor methods. Most of the\n // methods defined on the Doc type are also injected into\n // CodeMirror.prototype, for backwards compatibility and\n // convenience.\n\n CodeMirror.prototype = {\n constructor: CodeMirror,\n focus: function(){window.focus(); focusInput(this); fastPoll(this);},\n\n setOption: function(option, value) {\n var options = this.options, old = options[option];\n if (options[option] == value && option != \"mode\") return;\n options[option] = value;\n if (optionHandlers.hasOwnProperty(option))\n operation(this, optionHandlers[option])(this, value, old);\n },\n\n getOption: function(option) {return this.options[option];},\n getDoc: function() {return this.doc;},\n\n addKeyMap: function(map, bottom) {\n this.state.keyMaps[bottom ? \"push\" : \"unshift\"](getKeyMap(map));\n },\n removeKeyMap: function(map) {\n var maps = this.state.keyMaps;\n for (var i = 0; i < maps.length; ++i)\n if (maps[i] == map || maps[i].name == map) {\n maps.splice(i, 1);\n return true;\n }\n },\n\n addOverlay: methodOp(function(spec, options) {\n var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec);\n if (mode.startState) throw new Error(\"Overlays may not be stateful.\");\n this.state.overlays.push({mode: mode, modeSpec: spec, opaque: options && options.opaque});\n this.state.modeGen++;\n regChange(this);\n }),\n removeOverlay: methodOp(function(spec) {\n var overlays = this.state.overlays;\n for (var i = 0; i < overlays.length; ++i) {\n var cur = overlays[i].modeSpec;\n if (cur == spec || typeof spec == \"string\" && cur.name == spec) {\n overlays.splice(i, 1);\n this.state.modeGen++;\n regChange(this);\n return;\n }\n }\n }),\n\n indentLine: methodOp(function(n, dir, aggressive) {\n if (typeof dir != \"string\" && typeof dir != \"number\") {\n if (dir == null) dir = this.options.smartIndent ? \"smart\" : \"prev\";\n else dir = dir ? \"add\" : \"subtract\";\n }\n if (isLine(this.doc, n)) indentLine(this, n, dir, aggressive);\n }),\n indentSelection: methodOp(function(how) {\n var ranges = this.doc.sel.ranges, end = -1;\n for (var i = 0; i < ranges.length; i++) {\n var range = ranges[i];\n if (!range.empty()) {\n var from = range.from(), to = range.to();\n var start = Math.max(end, from.line);\n end = Math.min(this.lastLine(), to.line - (to.ch ? 0 : 1)) + 1;\n for (var j = start; j < end; ++j)\n indentLine(this, j, how);\n var newRanges = this.doc.sel.ranges;\n if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0)\n replaceOneSelection(this.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll);\n } else if (range.head.line > end) {\n indentLine(this, range.head.line, how, true);\n end = range.head.line;\n if (i == this.doc.sel.primIndex) ensureCursorVisible(this);\n }\n }\n }),\n\n // Fetch the parser token for a given character. Useful for hacks\n // that want to inspect the mode state (say, for completion).\n getTokenAt: function(pos, precise) {\n return takeToken(this, pos, precise);\n },\n\n getLineTokens: function(line, precise) {\n return takeToken(this, Pos(line), precise, true);\n },\n\n getTokenTypeAt: function(pos) {\n pos = clipPos(this.doc, pos);\n var styles = getLineStyles(this, getLine(this.doc, pos.line));\n var before = 0, after = (styles.length - 1) / 2, ch = pos.ch;\n var type;\n if (ch == 0) type = styles[2];\n else for (;;) {\n var mid = (before + after) >> 1;\n if ((mid ? styles[mid * 2 - 1] : 0) >= ch) after = mid;\n else if (styles[mid * 2 + 1] < ch) before = mid + 1;\n else { type = styles[mid * 2 + 2]; break; }\n }\n var cut = type ? type.indexOf(\"cm-overlay \") : -1;\n return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1);\n },\n\n getModeAt: function(pos) {\n var mode = this.doc.mode;\n if (!mode.innerMode) return mode;\n return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode;\n },\n\n getHelper: function(pos, type) {\n return this.getHelpers(pos, type)[0];\n },\n\n getHelpers: function(pos, type) {\n var found = [];\n if (!helpers.hasOwnProperty(type)) return helpers;\n var help = helpers[type], mode = this.getModeAt(pos);\n if (typeof mode[type] == \"string\") {\n if (help[mode[type]]) found.push(help[mode[type]]);\n } else if (mode[type]) {\n for (var i = 0; i < mode[type].length; i++) {\n var val = help[mode[type][i]];\n if (val) found.push(val);\n }\n } else if (mode.helperType && help[mode.helperType]) {\n found.push(help[mode.helperType]);\n } else if (help[mode.name]) {\n found.push(help[mode.name]);\n }\n for (var i = 0; i < help._global.length; i++) {\n var cur = help._global[i];\n if (cur.pred(mode, this) && indexOf(found, cur.val) == -1)\n found.push(cur.val);\n }\n return found;\n },\n\n getStateAfter: function(line, precise) {\n var doc = this.doc;\n line = clipLine(doc, line == null ? doc.first + doc.size - 1: line);\n return getStateBefore(this, line + 1, precise);\n },\n\n cursorCoords: function(start, mode) {\n var pos, range = this.doc.sel.primary();\n if (start == null) pos = range.head;\n else if (typeof start == \"object\") pos = clipPos(this.doc, start);\n else pos = start ? range.from() : range.to();\n return cursorCoords(this, pos, mode || \"page\");\n },\n\n charCoords: function(pos, mode) {\n return charCoords(this, clipPos(this.doc, pos), mode || \"page\");\n },\n\n coordsChar: function(coords, mode) {\n coords = fromCoordSystem(this, coords, mode || \"page\");\n return coordsChar(this, coords.left, coords.top);\n },\n\n lineAtHeight: function(height, mode) {\n height = fromCoordSystem(this, {top: height, left: 0}, mode || \"page\").top;\n return lineAtHeight(this.doc, height + this.display.viewOffset);\n },\n heightAtLine: function(line, mode) {\n var end = false, last = this.doc.first + this.doc.size - 1;\n if (line < this.doc.first) line = this.doc.first;\n else if (line > last) { line = last; end = true; }\n var lineObj = getLine(this.doc, line);\n return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || \"page\").top +\n (end ? this.doc.height - heightAtLine(lineObj) : 0);\n },\n\n defaultTextHeight: function() { return textHeight(this.display); },\n defaultCharWidth: function() { return charWidth(this.display); },\n\n setGutterMarker: methodOp(function(line, gutterID, value) {\n return changeLine(this.doc, line, \"gutter\", function(line) {\n var markers = line.gutterMarkers || (line.gutterMarkers = {});\n markers[gutterID] = value;\n if (!value && isEmpty(markers)) line.gutterMarkers = null;\n return true;\n });\n }),\n\n clearGutter: methodOp(function(gutterID) {\n var cm = this, doc = cm.doc, i = doc.first;\n doc.iter(function(line) {\n if (line.gutterMarkers && line.gutterMarkers[gutterID]) {\n line.gutterMarkers[gutterID] = null;\n regLineChange(cm, i, \"gutter\");\n if (isEmpty(line.gutterMarkers)) line.gutterMarkers = null;\n }\n ++i;\n });\n }),\n\n addLineWidget: methodOp(function(handle, node, options) {\n return addLineWidget(this, handle, node, options);\n }),\n\n removeLineWidget: function(widget) { widget.clear(); },\n\n lineInfo: function(line) {\n if (typeof line == \"number\") {\n if (!isLine(this.doc, line)) return null;\n var n = line;\n line = getLine(this.doc, line);\n if (!line) return null;\n } else {\n var n = lineNo(line);\n if (n == null) return null;\n }\n return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers,\n textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass,\n widgets: line.widgets};\n },\n\n getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo};},\n\n addWidget: function(pos, node, scroll, vert, horiz) {\n var display = this.display;\n pos = cursorCoords(this, clipPos(this.doc, pos));\n var top = pos.bottom, left = pos.left;\n node.style.position = \"absolute\";\n node.setAttribute(\"cm-ignore-events\", \"true\");\n display.sizer.appendChild(node);\n if (vert == \"over\") {\n top = pos.top;\n } else if (vert == \"above\" || vert == \"near\") {\n var vspace = Math.max(display.wrapper.clientHeight, this.doc.height),\n hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth);\n // Default to positioning above (if specified and possible); otherwise default to positioning below\n if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight)\n top = pos.top - node.offsetHeight;\n else if (pos.bottom + node.offsetHeight <= vspace)\n top = pos.bottom;\n if (left + node.offsetWidth > hspace)\n left = hspace - node.offsetWidth;\n }\n node.style.top = top + \"px\";\n node.style.left = node.style.right = \"\";\n if (horiz == \"right\") {\n left = display.sizer.clientWidth - node.offsetWidth;\n node.style.right = \"0px\";\n } else {\n if (horiz == \"left\") left = 0;\n else if (horiz == \"middle\") left = (display.sizer.clientWidth - node.offsetWidth) / 2;\n node.style.left = left + \"px\";\n }\n if (scroll)\n scrollIntoView(this, left, top, left + node.offsetWidth, top + node.offsetHeight);\n },\n\n triggerOnKeyDown: methodOp(onKeyDown),\n triggerOnKeyPress: methodOp(onKeyPress),\n triggerOnKeyUp: onKeyUp,\n\n execCommand: function(cmd) {\n if (commands.hasOwnProperty(cmd))\n return commands[cmd](this);\n },\n\n findPosH: function(from, amount, unit, visually) {\n var dir = 1;\n if (amount < 0) { dir = -1; amount = -amount; }\n for (var i = 0, cur = clipPos(this.doc, from); i < amount; ++i) {\n cur = findPosH(this.doc, cur, dir, unit, visually);\n if (cur.hitSide) break;\n }\n return cur;\n },\n\n moveH: methodOp(function(dir, unit) {\n var cm = this;\n cm.extendSelectionsBy(function(range) {\n if (cm.display.shift || cm.doc.extend || range.empty())\n return findPosH(cm.doc, range.head, dir, unit, cm.options.rtlMoveVisually);\n else\n return dir < 0 ? range.from() : range.to();\n }, sel_move);\n }),\n\n deleteH: methodOp(function(dir, unit) {\n var sel = this.doc.sel, doc = this.doc;\n if (sel.somethingSelected())\n doc.replaceSelection(\"\", null, \"+delete\");\n else\n deleteNearSelection(this, function(range) {\n var other = findPosH(doc, range.head, dir, unit, false);\n return dir < 0 ? {from: other, to: range.head} : {from: range.head, to: other};\n });\n }),\n\n findPosV: function(from, amount, unit, goalColumn) {\n var dir = 1, x = goalColumn;\n if (amount < 0) { dir = -1; amount = -amount; }\n for (var i = 0, cur = clipPos(this.doc, from); i < amount; ++i) {\n var coords = cursorCoords(this, cur, \"div\");\n if (x == null) x = coords.left;\n else coords.left = x;\n cur = findPosV(this, coords, dir, unit);\n if (cur.hitSide) break;\n }\n return cur;\n },\n\n moveV: methodOp(function(dir, unit) {\n var cm = this, doc = this.doc, goals = [];\n var collapse = !cm.display.shift && !doc.extend && doc.sel.somethingSelected();\n doc.extendSelectionsBy(function(range) {\n if (collapse)\n return dir < 0 ? range.from() : range.to();\n var headPos = cursorCoords(cm, range.head, \"div\");\n if (range.goalColumn != null) headPos.left = range.goalColumn;\n goals.push(headPos.left);\n var pos = findPosV(cm, headPos, dir, unit);\n if (unit == \"page\" && range == doc.sel.primary())\n addToScrollPos(cm, null, charCoords(cm, pos, \"div\").top - headPos.top);\n return pos;\n }, sel_move);\n if (goals.length) for (var i = 0; i < doc.sel.ranges.length; i++)\n doc.sel.ranges[i].goalColumn = goals[i];\n }),\n\n // Find the word at the given position (as returned by coordsChar).\n findWordAt: function(pos) {\n var doc = this.doc, line = getLine(doc, pos.line).text;\n var start = pos.ch, end = pos.ch;\n if (line) {\n var helper = this.getHelper(pos, \"wordChars\");\n if ((pos.xRel < 0 || end == line.length) && start) --start; else ++end;\n var startChar = line.charAt(start);\n var check = isWordChar(startChar, helper)\n ? function(ch) { return isWordChar(ch, helper); }\n : /\\s/.test(startChar) ? function(ch) {return /\\s/.test(ch);}\n : function(ch) {return !/\\s/.test(ch) && !isWordChar(ch);};\n while (start > 0 && check(line.charAt(start - 1))) --start;\n while (end < line.length && check(line.charAt(end))) ++end;\n }\n return new Range(Pos(pos.line, start), Pos(pos.line, end));\n },\n\n toggleOverwrite: function(value) {\n if (value != null && value == this.state.overwrite) return;\n if (this.state.overwrite = !this.state.overwrite)\n addClass(this.display.cursorDiv, \"CodeMirror-overwrite\");\n else\n rmClass(this.display.cursorDiv, \"CodeMirror-overwrite\");\n\n signal(this, \"overwriteToggle\", this, this.state.overwrite);\n },\n hasFocus: function() { return activeElt() == this.display.input; },\n\n scrollTo: methodOp(function(x, y) {\n if (x != null || y != null) resolveScrollToPos(this);\n if (x != null) this.curOp.scrollLeft = x;\n if (y != null) this.curOp.scrollTop = y;\n }),\n getScrollInfo: function() {\n var scroller = this.display.scroller;\n return {left: scroller.scrollLeft, top: scroller.scrollTop,\n height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight,\n width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth,\n clientHeight: displayHeight(this), clientWidth: displayWidth(this)};\n },\n\n scrollIntoView: methodOp(function(range, margin) {\n if (range == null) {\n range = {from: this.doc.sel.primary().head, to: null};\n if (margin == null) margin = this.options.cursorScrollMargin;\n } else if (typeof range == \"number\") {\n range = {from: Pos(range, 0), to: null};\n } else if (range.from == null) {\n range = {from: range, to: null};\n }\n if (!range.to) range.to = range.from;\n range.margin = margin || 0;\n\n if (range.from.line != null) {\n resolveScrollToPos(this);\n this.curOp.scrollToPos = range;\n } else {\n var sPos = calculateScrollPos(this, Math.min(range.from.left, range.to.left),\n Math.min(range.from.top, range.to.top) - range.margin,\n Math.max(range.from.right, range.to.right),\n Math.max(range.from.bottom, range.to.bottom) + range.margin);\n this.scrollTo(sPos.scrollLeft, sPos.scrollTop);\n }\n }),\n\n setSize: methodOp(function(width, height) {\n var cm = this;\n function interpret(val) {\n return typeof val == \"number\" || /^\\d+$/.test(String(val)) ? val + \"px\" : val;\n }\n if (width != null) cm.display.wrapper.style.width = interpret(width);\n if (height != null) cm.display.wrapper.style.height = interpret(height);\n if (cm.options.lineWrapping) clearLineMeasurementCache(this);\n var lineNo = cm.display.viewFrom;\n cm.doc.iter(lineNo, cm.display.viewTo, function(line) {\n if (line.widgets) for (var i = 0; i < line.widgets.length; i++)\n if (line.widgets[i].noHScroll) { regLineChange(cm, lineNo, \"widget\"); break; }\n ++lineNo;\n });\n cm.curOp.forceUpdate = true;\n signal(cm, \"refresh\", this);\n }),\n\n operation: function(f){return runInOp(this, f);},\n\n refresh: methodOp(function() {\n var oldHeight = this.display.cachedTextHeight;\n regChange(this);\n this.curOp.forceUpdate = true;\n clearCaches(this);\n this.scrollTo(this.doc.scrollLeft, this.doc.scrollTop);\n updateGutterSpace(this);\n if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5)\n estimateLineHeights(this);\n signal(this, \"refresh\", this);\n }),\n\n swapDoc: methodOp(function(doc) {\n var old = this.doc;\n old.cm = null;\n attachDoc(this, doc);\n clearCaches(this);\n resetInput(this);\n this.scrollTo(doc.scrollLeft, doc.scrollTop);\n this.curOp.forceScroll = true;\n signalLater(this, \"swapDoc\", this, old);\n return old;\n }),\n\n getInputField: function(){return this.display.input;},\n getWrapperElement: function(){return this.display.wrapper;},\n getScrollerElement: function(){return this.display.scroller;},\n getGutterElement: function(){return this.display.gutters;}\n };\n eventMixin(CodeMirror);\n\n // OPTION DEFAULTS\n\n // The default configuration options.\n var defaults = CodeMirror.defaults = {};\n // Functions to run when options are changed.\n var optionHandlers = CodeMirror.optionHandlers = {};\n\n function option(name, deflt, handle, notOnInit) {\n CodeMirror.defaults[name] = deflt;\n if (handle) optionHandlers[name] =\n notOnInit ? function(cm, val, old) {if (old != Init) handle(cm, val, old);} : handle;\n }\n\n // Passed to option handlers when there is no old value.\n var Init = CodeMirror.Init = {toString: function(){return \"CodeMirror.Init\";}};\n\n // These two are, on init, called from the constructor because they\n // have to be initialized before the editor can start at all.\n option(\"value\", \"\", function(cm, val) {\n cm.setValue(val);\n }, true);\n option(\"mode\", null, function(cm, val) {\n cm.doc.modeOption = val;\n loadMode(cm);\n }, true);\n\n option(\"indentUnit\", 2, loadMode, true);\n option(\"indentWithTabs\", false);\n option(\"smartIndent\", true);\n option(\"tabSize\", 4, function(cm) {\n resetModeState(cm);\n clearCaches(cm);\n regChange(cm);\n }, true);\n option(\"specialChars\", /[\\t\\u0000-\\u0019\\u00ad\\u200b-\\u200f\\u2028\\u2029\\ufeff]/g, function(cm, val) {\n cm.options.specialChars = new RegExp(val.source + (val.test(\"\\t\") ? \"\" : \"|\\t\"), \"g\");\n cm.refresh();\n }, true);\n option(\"specialCharPlaceholder\", defaultSpecialCharPlaceholder, function(cm) {cm.refresh();}, true);\n option(\"electricChars\", true);\n option(\"rtlMoveVisually\", !windows);\n option(\"wholeLineUpdateBefore\", true);\n\n option(\"theme\", \"default\", function(cm) {\n themeChanged(cm);\n guttersChanged(cm);\n }, true);\n option(\"keyMap\", \"default\", function(cm, val, old) {\n var next = getKeyMap(val);\n var prev = old != CodeMirror.Init && getKeyMap(old);\n if (prev && prev.detach) prev.detach(cm, next);\n if (next.attach) next.attach(cm, prev || null);\n });\n option(\"extraKeys\", null);\n\n option(\"lineWrapping\", false, wrappingChanged, true);\n option(\"gutters\", [], function(cm) {\n setGuttersForLineNumbers(cm.options);\n guttersChanged(cm);\n }, true);\n option(\"fixedGutter\", true, function(cm, val) {\n cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + \"px\" : \"0\";\n cm.refresh();\n }, true);\n option(\"coverGutterNextToScrollbar\", false, function(cm) {updateScrollbars(cm);}, true);\n option(\"scrollbarStyle\", \"native\", function(cm) {\n initScrollbars(cm);\n updateScrollbars(cm);\n cm.display.scrollbars.setScrollTop(cm.doc.scrollTop);\n cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft);\n }, true);\n option(\"lineNumbers\", false, function(cm) {\n setGuttersForLineNumbers(cm.options);\n guttersChanged(cm);\n }, true);\n option(\"firstLineNumber\", 1, guttersChanged, true);\n option(\"lineNumberFormatter\", function(integer) {return integer;}, guttersChanged, true);\n option(\"showCursorWhenSelecting\", false, updateSelection, true);\n\n option(\"resetSelectionOnContextMenu\", true);\n\n option(\"readOnly\", false, function(cm, val) {\n if (val == \"nocursor\") {\n onBlur(cm);\n cm.display.input.blur();\n cm.display.disabled = true;\n } else {\n cm.display.disabled = false;\n if (!val) resetInput(cm);\n }\n });\n option(\"disableInput\", false, function(cm, val) {if (!val) resetInput(cm);}, true);\n option(\"dragDrop\", true);\n\n option(\"cursorBlinkRate\", 530);\n option(\"cursorScrollMargin\", 0);\n option(\"cursorHeight\", 1, updateSelection, true);\n option(\"singleCursorHeightPerLine\", true, updateSelection, true);\n option(\"workTime\", 100);\n option(\"workDelay\", 100);\n option(\"flattenSpans\", true, resetModeState, true);\n option(\"addModeClass\", false, resetModeState, true);\n option(\"pollInterval\", 100);\n option(\"undoDepth\", 200, function(cm, val){cm.doc.history.undoDepth = val;});\n option(\"historyEventDelay\", 1250);\n option(\"viewportMargin\", 10, function(cm){cm.refresh();}, true);\n option(\"maxHighlightLength\", 10000, resetModeState, true);\n option(\"moveInputWithCursor\", true, function(cm, val) {\n if (!val) cm.display.inputDiv.style.top = cm.display.inputDiv.style.left = 0;\n });\n\n option(\"tabindex\", null, function(cm, val) {\n cm.display.input.tabIndex = val || \"\";\n });\n option(\"autofocus\", null);\n\n // MODE DEFINITION AND QUERYING\n\n // Known modes, by name and by MIME\n var modes = CodeMirror.modes = {}, mimeModes = CodeMirror.mimeModes = {};\n\n // Extra arguments are stored as the mode's dependencies, which is\n // used by (legacy) mechanisms like loadmode.js to automatically\n // load a mode. (Preferred mechanism is the require/define calls.)\n CodeMirror.defineMode = function(name, mode) {\n if (!CodeMirror.defaults.mode && name != \"null\") CodeMirror.defaults.mode = name;\n if (arguments.length > 2)\n mode.dependencies = Array.prototype.slice.call(arguments, 2);\n modes[name] = mode;\n };\n\n CodeMirror.defineMIME = function(mime, spec) {\n mimeModes[mime] = spec;\n };\n\n // Given a MIME type, a {name, ...options} config object, or a name\n // string, return a mode config object.\n CodeMirror.resolveMode = function(spec) {\n if (typeof spec == \"string\" && mimeModes.hasOwnProperty(spec)) {\n spec = mimeModes[spec];\n } else if (spec && typeof spec.name == \"string\" && mimeModes.hasOwnProperty(spec.name)) {\n var found = mimeModes[spec.name];\n if (typeof found == \"string\") found = {name: found};\n spec = createObj(found, spec);\n spec.name = found.name;\n } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+xml$/.test(spec)) {\n return CodeMirror.resolveMode(\"application/xml\");\n }\n if (typeof spec == \"string\") return {name: spec};\n else return spec || {name: \"null\"};\n };\n\n // Given a mode spec (anything that resolveMode accepts), find and\n // initialize an actual mode object.\n CodeMirror.getMode = function(options, spec) {\n var spec = CodeMirror.resolveMode(spec);\n var mfactory = modes[spec.name];\n if (!mfactory) return CodeMirror.getMode(options, \"text/plain\");\n var modeObj = mfactory(options, spec);\n if (modeExtensions.hasOwnProperty(spec.name)) {\n var exts = modeExtensions[spec.name];\n for (var prop in exts) {\n if (!exts.hasOwnProperty(prop)) continue;\n if (modeObj.hasOwnProperty(prop)) modeObj[\"_\" + prop] = modeObj[prop];\n modeObj[prop] = exts[prop];\n }\n }\n modeObj.name = spec.name;\n if (spec.helperType) modeObj.helperType = spec.helperType;\n if (spec.modeProps) for (var prop in spec.modeProps)\n modeObj[prop] = spec.modeProps[prop];\n\n return modeObj;\n };\n\n // Minimal default mode.\n CodeMirror.defineMode(\"null\", function() {\n return {token: function(stream) {stream.skipToEnd();}};\n });\n CodeMirror.defineMIME(\"text/plain\", \"null\");\n\n // This can be used to attach properties to mode objects from\n // outside the actual mode definition.\n var modeExtensions = CodeMirror.modeExtensions = {};\n CodeMirror.extendMode = function(mode, properties) {\n var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {});\n copyObj(properties, exts);\n };\n\n // EXTENSIONS\n\n CodeMirror.defineExtension = function(name, func) {\n CodeMirror.prototype[name] = func;\n };\n CodeMirror.defineDocExtension = function(name, func) {\n Doc.prototype[name] = func;\n };\n CodeMirror.defineOption = option;\n\n var initHooks = [];\n CodeMirror.defineInitHook = function(f) {initHooks.push(f);};\n\n var helpers = CodeMirror.helpers = {};\n CodeMirror.registerHelper = function(type, name, value) {\n if (!helpers.hasOwnProperty(type)) helpers[type] = CodeMirror[type] = {_global: []};\n helpers[type][name] = value;\n };\n CodeMirror.registerGlobalHelper = function(type, name, predicate, value) {\n CodeMirror.registerHelper(type, name, value);\n helpers[type]._global.push({pred: predicate, val: value});\n };\n\n // MODE STATE HANDLING\n\n // Utility functions for working with state. Exported because nested\n // modes need to do this for their inner modes.\n\n var copyState = CodeMirror.copyState = function(mode, state) {\n if (state === true) return state;\n if (mode.copyState) return mode.copyState(state);\n var nstate = {};\n for (var n in state) {\n var val = state[n];\n if (val instanceof Array) val = val.concat([]);\n nstate[n] = val;\n }\n return nstate;\n };\n\n var startState = CodeMirror.startState = function(mode, a1, a2) {\n return mode.startState ? mode.startState(a1, a2) : true;\n };\n\n // Given a mode and a state (for that mode), find the inner mode and\n // state at the position that the state refers to.\n CodeMirror.innerMode = function(mode, state) {\n while (mode.innerMode) {\n var info = mode.innerMode(state);\n if (!info || info.mode == mode) break;\n state = info.state;\n mode = info.mode;\n }\n return info || {mode: mode, state: state};\n };\n\n // STANDARD COMMANDS\n\n // Commands are parameter-less actions that can be performed on an\n // editor, mostly used for keybindings.\n var commands = CodeMirror.commands = {\n selectAll: function(cm) {cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll);},\n singleSelection: function(cm) {\n cm.setSelection(cm.getCursor(\"anchor\"), cm.getCursor(\"head\"), sel_dontScroll);\n },\n killLine: function(cm) {\n deleteNearSelection(cm, function(range) {\n if (range.empty()) {\n var len = getLine(cm.doc, range.head.line).text.length;\n if (range.head.ch == len && range.head.line < cm.lastLine())\n return {from: range.head, to: Pos(range.head.line + 1, 0)};\n else\n return {from: range.head, to: Pos(range.head.line, len)};\n } else {\n return {from: range.from(), to: range.to()};\n }\n });\n },\n deleteLine: function(cm) {\n deleteNearSelection(cm, function(range) {\n return {from: Pos(range.from().line, 0),\n to: clipPos(cm.doc, Pos(range.to().line + 1, 0))};\n });\n },\n delLineLeft: function(cm) {\n deleteNearSelection(cm, function(range) {\n return {from: Pos(range.from().line, 0), to: range.from()};\n });\n },\n delWrappedLineLeft: function(cm) {\n deleteNearSelection(cm, function(range) {\n var top = cm.charCoords(range.head, \"div\").top + 5;\n var leftPos = cm.coordsChar({left: 0, top: top}, \"div\");\n return {from: leftPos, to: range.from()};\n });\n },\n delWrappedLineRight: function(cm) {\n deleteNearSelection(cm, function(range) {\n var top = cm.charCoords(range.head, \"div\").top + 5;\n var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, \"div\");\n return {from: range.from(), to: rightPos };\n });\n },\n undo: function(cm) {cm.undo();},\n redo: function(cm) {cm.redo();},\n undoSelection: function(cm) {cm.undoSelection();},\n redoSelection: function(cm) {cm.redoSelection();},\n goDocStart: function(cm) {cm.extendSelection(Pos(cm.firstLine(), 0));},\n goDocEnd: function(cm) {cm.extendSelection(Pos(cm.lastLine()));},\n goLineStart: function(cm) {\n cm.extendSelectionsBy(function(range) { return lineStart(cm, range.head.line); },\n {origin: \"+move\", bias: 1});\n },\n goLineStartSmart: function(cm) {\n cm.extendSelectionsBy(function(range) {\n return lineStartSmart(cm, range.head);\n }, {origin: \"+move\", bias: 1});\n },\n goLineEnd: function(cm) {\n cm.extendSelectionsBy(function(range) { return lineEnd(cm, range.head.line); },\n {origin: \"+move\", bias: -1});\n },\n goLineRight: function(cm) {\n cm.extendSelectionsBy(function(range) {\n var top = cm.charCoords(range.head, \"div\").top + 5;\n return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, \"div\");\n }, sel_move);\n },\n goLineLeft: function(cm) {\n cm.extendSelectionsBy(function(range) {\n var top = cm.charCoords(range.head, \"div\").top + 5;\n return cm.coordsChar({left: 0, top: top}, \"div\");\n }, sel_move);\n },\n goLineLeftSmart: function(cm) {\n cm.extendSelectionsBy(function(range) {\n var top = cm.charCoords(range.head, \"div\").top + 5;\n var pos = cm.coordsChar({left: 0, top: top}, \"div\");\n if (pos.ch < cm.getLine(pos.line).search(/\\S/)) return lineStartSmart(cm, range.head);\n return pos;\n }, sel_move);\n },\n goLineUp: function(cm) {cm.moveV(-1, \"line\");},\n goLineDown: function(cm) {cm.moveV(1, \"line\");},\n goPageUp: function(cm) {cm.moveV(-1, \"page\");},\n goPageDown: function(cm) {cm.moveV(1, \"page\");},\n goCharLeft: function(cm) {cm.moveH(-1, \"char\");},\n goCharRight: function(cm) {cm.moveH(1, \"char\");},\n goColumnLeft: function(cm) {cm.moveH(-1, \"column\");},\n goColumnRight: function(cm) {cm.moveH(1, \"column\");},\n goWordLeft: function(cm) {cm.moveH(-1, \"word\");},\n goGroupRight: function(cm) {cm.moveH(1, \"group\");},\n goGroupLeft: function(cm) {cm.moveH(-1, \"group\");},\n goWordRight: function(cm) {cm.moveH(1, \"word\");},\n delCharBefore: function(cm) {cm.deleteH(-1, \"char\");},\n delCharAfter: function(cm) {cm.deleteH(1, \"char\");},\n delWordBefore: function(cm) {cm.deleteH(-1, \"word\");},\n delWordAfter: function(cm) {cm.deleteH(1, \"word\");},\n delGroupBefore: function(cm) {cm.deleteH(-1, \"group\");},\n delGroupAfter: function(cm) {cm.deleteH(1, \"group\");},\n indentAuto: function(cm) {cm.indentSelection(\"smart\");},\n indentMore: function(cm) {cm.indentSelection(\"add\");},\n indentLess: function(cm) {cm.indentSelection(\"subtract\");},\n insertTab: function(cm) {cm.replaceSelection(\"\\t\");},\n insertSoftTab: function(cm) {\n var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize;\n for (var i = 0; i < ranges.length; i++) {\n var pos = ranges[i].from();\n var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize);\n spaces.push(new Array(tabSize - col % tabSize + 1).join(\" \"));\n }\n cm.replaceSelections(spaces);\n },\n defaultTab: function(cm) {\n if (cm.somethingSelected()) cm.indentSelection(\"add\");\n else cm.execCommand(\"insertTab\");\n },\n transposeChars: function(cm) {\n runInOp(cm, function() {\n var ranges = cm.listSelections(), newSel = [];\n for (var i = 0; i < ranges.length; i++) {\n var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text;\n if (line) {\n if (cur.ch == line.length) cur = new Pos(cur.line, cur.ch - 1);\n if (cur.ch > 0) {\n cur = new Pos(cur.line, cur.ch + 1);\n cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2),\n Pos(cur.line, cur.ch - 2), cur, \"+transpose\");\n } else if (cur.line > cm.doc.first) {\n var prev = getLine(cm.doc, cur.line - 1).text;\n if (prev)\n cm.replaceRange(line.charAt(0) + \"\\n\" + prev.charAt(prev.length - 1),\n Pos(cur.line - 1, prev.length - 1), Pos(cur.line, 1), \"+transpose\");\n }\n }\n newSel.push(new Range(cur, cur));\n }\n cm.setSelections(newSel);\n });\n },\n newlineAndIndent: function(cm) {\n runInOp(cm, function() {\n var len = cm.listSelections().length;\n for (var i = 0; i < len; i++) {\n var range = cm.listSelections()[i];\n cm.replaceRange(\"\\n\", range.anchor, range.head, \"+input\");\n cm.indentLine(range.from().line + 1, null, true);\n ensureCursorVisible(cm);\n }\n });\n },\n toggleOverwrite: function(cm) {cm.toggleOverwrite();}\n };\n\n\n // STANDARD KEYMAPS\n\n var keyMap = CodeMirror.keyMap = {};\n\n keyMap.basic = {\n \"Left\": \"goCharLeft\", \"Right\": \"goCharRight\", \"Up\": \"goLineUp\", \"Down\": \"goLineDown\",\n \"End\": \"goLineEnd\", \"Home\": \"goLineStartSmart\", \"PageUp\": \"goPageUp\", \"PageDown\": \"goPageDown\",\n \"Delete\": \"delCharAfter\", \"Backspace\": \"delCharBefore\", \"Shift-Backspace\": \"delCharBefore\",\n \"Tab\": \"defaultTab\", \"Shift-Tab\": \"indentAuto\",\n \"Enter\": \"newlineAndIndent\", \"Insert\": \"toggleOverwrite\",\n \"Esc\": \"singleSelection\"\n };\n // Note that the save and find-related commands aren't defined by\n // default. User code or addons can define them. Unknown commands\n // are simply ignored.\n keyMap.pcDefault = {\n \"Ctrl-A\": \"selectAll\", \"Ctrl-D\": \"deleteLine\", \"Ctrl-Z\": \"undo\", \"Shift-Ctrl-Z\": \"redo\", \"Ctrl-Y\": \"redo\",\n \"Ctrl-Home\": \"goDocStart\", \"Ctrl-End\": \"goDocEnd\", \"Ctrl-Up\": \"goLineUp\", \"Ctrl-Down\": \"goLineDown\",\n \"Ctrl-Left\": \"goGroupLeft\", \"Ctrl-Right\": \"goGroupRight\", \"Alt-Left\": \"goLineStart\", \"Alt-Right\": \"goLineEnd\",\n \"Ctrl-Backspace\": \"delGroupBefore\", \"Ctrl-Delete\": \"delGroupAfter\", \"Ctrl-S\": \"save\", \"Ctrl-F\": \"find\",\n \"Ctrl-G\": \"findNext\", \"Shift-Ctrl-G\": \"findPrev\", \"Shift-Ctrl-F\": \"replace\", \"Shift-Ctrl-R\": \"replaceAll\",\n \"Ctrl-[\": \"indentLess\", \"Ctrl-]\": \"indentMore\",\n \"Ctrl-U\": \"undoSelection\", \"Shift-Ctrl-U\": \"redoSelection\", \"Alt-U\": \"redoSelection\",\n fallthrough: \"basic\"\n };\n // Very basic readline/emacs-style bindings, which are standard on Mac.\n keyMap.emacsy = {\n \"Ctrl-F\": \"goCharRight\", \"Ctrl-B\": \"goCharLeft\", \"Ctrl-P\": \"goLineUp\", \"Ctrl-N\": \"goLineDown\",\n \"Alt-F\": \"goWordRight\", \"Alt-B\": \"goWordLeft\", \"Ctrl-A\": \"goLineStart\", \"Ctrl-E\": \"goLineEnd\",\n \"Ctrl-V\": \"goPageDown\", \"Shift-Ctrl-V\": \"goPageUp\", \"Ctrl-D\": \"delCharAfter\", \"Ctrl-H\": \"delCharBefore\",\n \"Alt-D\": \"delWordAfter\", \"Alt-Backspace\": \"delWordBefore\", \"Ctrl-K\": \"killLine\", \"Ctrl-T\": \"transposeChars\"\n };\n keyMap.macDefault = {\n \"Cmd-A\": \"selectAll\", \"Cmd-D\": \"deleteLine\", \"Cmd-Z\": \"undo\", \"Shift-Cmd-Z\": \"redo\", \"Cmd-Y\": \"redo\",\n \"Cmd-Home\": \"goDocStart\", \"Cmd-Up\": \"goDocStart\", \"Cmd-End\": \"goDocEnd\", \"Cmd-Down\": \"goDocEnd\", \"Alt-Left\": \"goGroupLeft\",\n \"Alt-Right\": \"goGroupRight\", \"Cmd-Left\": \"goLineLeft\", \"Cmd-Right\": \"goLineRight\", \"Alt-Backspace\": \"delGroupBefore\",\n \"Ctrl-Alt-Backspace\": \"delGroupAfter\", \"Alt-Delete\": \"delGroupAfter\", \"Cmd-S\": \"save\", \"Cmd-F\": \"find\",\n \"Cmd-G\": \"findNext\", \"Shift-Cmd-G\": \"findPrev\", \"Cmd-Alt-F\": \"replace\", \"Shift-Cmd-Alt-F\": \"replaceAll\",\n \"Cmd-[\": \"indentLess\", \"Cmd-]\": \"indentMore\", \"Cmd-Backspace\": \"delWrappedLineLeft\", \"Cmd-Delete\": \"delWrappedLineRight\",\n \"Cmd-U\": \"undoSelection\", \"Shift-Cmd-U\": \"redoSelection\", \"Ctrl-Up\": \"goDocStart\", \"Ctrl-Down\": \"goDocEnd\",\n fallthrough: [\"basic\", \"emacsy\"]\n };\n keyMap[\"default\"] = mac ? keyMap.macDefault : keyMap.pcDefault;\n\n // KEYMAP DISPATCH\n\n function normalizeKeyName(name) {\n var parts = name.split(/-(?!$)/), name = parts[parts.length - 1];\n var alt, ctrl, shift, cmd;\n for (var i = 0; i < parts.length - 1; i++) {\n var mod = parts[i];\n if (/^(cmd|meta|m)$/i.test(mod)) cmd = true;\n else if (/^a(lt)?$/i.test(mod)) alt = true;\n else if (/^(c|ctrl|control)$/i.test(mod)) ctrl = true;\n else if (/^s(hift)$/i.test(mod)) shift = true;\n else throw new Error(\"Unrecognized modifier name: \" + mod);\n }\n if (alt) name = \"Alt-\" + name;\n if (ctrl) name = \"Ctrl-\" + name;\n if (cmd) name = \"Cmd-\" + name;\n if (shift) name = \"Shift-\" + name;\n return name;\n }\n\n // This is a kludge to keep keymaps mostly working as raw objects\n // (backwards compatibility) while at the same time support features\n // like normalization and multi-stroke key bindings. It compiles a\n // new normalized keymap, and then updates the old object to reflect\n // this.\n CodeMirror.normalizeKeyMap = function(keymap) {\n var copy = {};\n for (var keyname in keymap) if (keymap.hasOwnProperty(keyname)) {\n var value = keymap[keyname];\n if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) continue;\n if (value == \"...\") { delete keymap[keyname]; continue; }\n\n var keys = map(keyname.split(\" \"), normalizeKeyName);\n for (var i = 0; i < keys.length; i++) {\n var val, name;\n if (i == keys.length - 1) {\n name = keyname;\n val = value;\n } else {\n name = keys.slice(0, i + 1).join(\" \");\n val = \"...\";\n }\n var prev = copy[name];\n if (!prev) copy[name] = val;\n else if (prev != val) throw new Error(\"Inconsistent bindings for \" + name);\n }\n delete keymap[keyname];\n }\n for (var prop in copy) keymap[prop] = copy[prop];\n return keymap;\n };\n\n var lookupKey = CodeMirror.lookupKey = function(key, map, handle, context) {\n map = getKeyMap(map);\n var found = map.call ? map.call(key, context) : map[key];\n if (found === false) return \"nothing\";\n if (found === \"...\") return \"multi\";\n if (found != null && handle(found)) return \"handled\";\n\n if (map.fallthrough) {\n if (Object.prototype.toString.call(map.fallthrough) != \"[object Array]\")\n return lookupKey(key, map.fallthrough, handle, context);\n for (var i = 0; i < map.fallthrough.length; i++) {\n var result = lookupKey(key, map.fallthrough[i], handle, context);\n if (result) return result;\n }\n }\n };\n\n // Modifier key presses don't count as 'real' key presses for the\n // purpose of keymap fallthrough.\n var isModifierKey = CodeMirror.isModifierKey = function(value) {\n var name = typeof value == \"string\" ? value : keyNames[value.keyCode];\n return name == \"Ctrl\" || name == \"Alt\" || name == \"Shift\" || name == \"Mod\";\n };\n\n // Look up the name of a key as indicated by an event object.\n var keyName = CodeMirror.keyName = function(event, noShift) {\n if (presto && event.keyCode == 34 && event[\"char\"]) return false;\n var base = keyNames[event.keyCode], name = base;\n if (name == null || event.altGraphKey) return false;\n if (event.altKey && base != \"Alt\") name = \"Alt-\" + name;\n if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != \"Ctrl\") name = \"Ctrl-\" + name;\n if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != \"Cmd\") name = \"Cmd-\" + name;\n if (!noShift && event.shiftKey && base != \"Shift\") name = \"Shift-\" + name;\n return name;\n };\n\n function getKeyMap(val) {\n return typeof val == \"string\" ? keyMap[val] : val;\n }\n\n // FROMTEXTAREA\n\n CodeMirror.fromTextArea = function(textarea, options) {\n options = options ? copyObj(options) : {};\n options.value = textarea.value;\n if (!options.tabindex && textarea.tabindex)\n options.tabindex = textarea.tabindex;\n if (!options.placeholder && textarea.placeholder)\n options.placeholder = textarea.placeholder;\n // Set autofocus to true if this textarea is focused, or if it has\n // autofocus and no other element is focused.\n if (options.autofocus == null) {\n var hasFocus = activeElt();\n options.autofocus = hasFocus == textarea ||\n textarea.getAttribute(\"autofocus\") != null && hasFocus == document.body;\n }\n\n function save() {textarea.value = cm.getValue();}\n if (textarea.form) {\n on(textarea.form, \"submit\", save);\n // Deplorable hack to make the submit method do the right thing.\n if (!options.leaveSubmitMethodAlone) {\n var form = textarea.form, realSubmit = form.submit;\n try {\n var wrappedSubmit = form.submit = function() {\n save();\n form.submit = realSubmit;\n form.submit();\n form.submit = wrappedSubmit;\n };\n } catch(e) {}\n }\n }\n\n options.finishInit = function(cm) {\n cm.save = save;\n cm.getTextArea = function() { return textarea; };\n cm.toTextArea = function() {\n cm.toTextArea = isNaN; // Prevent this from being ran twice\n save();\n textarea.parentNode.removeChild(cm.getWrapperElement());\n textarea.style.display = \"\";\n if (textarea.form) {\n off(textarea.form, \"submit\", save);\n if (typeof textarea.form.submit == \"function\")\n textarea.form.submit = realSubmit;\n }\n };\n };\n\n textarea.style.display = \"none\";\n var cm = CodeMirror(function(node) {\n textarea.parentNode.insertBefore(node, textarea.nextSibling);\n }, options);\n return cm;\n };\n\n // STRING STREAM\n\n // Fed to the mode parsers, provides helper functions to make\n // parsers more succinct.\n\n var StringStream = CodeMirror.StringStream = function(string, tabSize) {\n this.pos = this.start = 0;\n this.string = string;\n this.tabSize = tabSize || 8;\n this.lastColumnPos = this.lastColumnValue = 0;\n this.lineStart = 0;\n };\n\n StringStream.prototype = {\n eol: function() {return this.pos >= this.string.length;},\n sol: function() {return this.pos == this.lineStart;},\n peek: function() {return this.string.charAt(this.pos) || undefined;},\n next: function() {\n if (this.pos < this.string.length)\n return this.string.charAt(this.pos++);\n },\n eat: function(match) {\n var ch = this.string.charAt(this.pos);\n if (typeof match == \"string\") var ok = ch == match;\n else var ok = ch && (match.test ? match.test(ch) : match(ch));\n if (ok) {++this.pos; return ch;}\n },\n eatWhile: function(match) {\n var start = this.pos;\n while (this.eat(match)){}\n return this.pos > start;\n },\n eatSpace: function() {\n var start = this.pos;\n while (/[\\s\\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos;\n return this.pos > start;\n },\n skipToEnd: function() {this.pos = this.string.length;},\n skipTo: function(ch) {\n var found = this.string.indexOf(ch, this.pos);\n if (found > -1) {this.pos = found; return true;}\n },\n backUp: function(n) {this.pos -= n;},\n column: function() {\n if (this.lastColumnPos < this.start) {\n this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue);\n this.lastColumnPos = this.start;\n }\n return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0);\n },\n indentation: function() {\n return countColumn(this.string, null, this.tabSize) -\n (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0);\n },\n match: function(pattern, consume, caseInsensitive) {\n if (typeof pattern == \"string\") {\n var cased = function(str) {return caseInsensitive ? str.toLowerCase() : str;};\n var substr = this.string.substr(this.pos, pattern.length);\n if (cased(substr) == cased(pattern)) {\n if (consume !== false) this.pos += pattern.length;\n return true;\n }\n } else {\n var match = this.string.slice(this.pos).match(pattern);\n if (match && match.index > 0) return null;\n if (match && consume !== false) this.pos += match[0].length;\n return match;\n }\n },\n current: function(){return this.string.slice(this.start, this.pos);},\n hideFirstChars: function(n, inner) {\n this.lineStart += n;\n try { return inner(); }\n finally { this.lineStart -= n; }\n }\n };\n\n // TEXTMARKERS\n\n // Created with markText and setBookmark methods. A TextMarker is a\n // handle that can be used to clear or find a marked position in the\n // document. Line objects hold arrays (markedSpans) containing\n // {from, to, marker} object pointing to such marker objects, and\n // indicating that such a marker is present on that line. Multiple\n // lines may point to the same marker when it spans across lines.\n // The spans will have null for their from/to properties when the\n // marker continues beyond the start/end of the line. Markers have\n // links back to the lines they currently touch.\n\n var TextMarker = CodeMirror.TextMarker = function(doc, type) {\n this.lines = [];\n this.type = type;\n this.doc = doc;\n };\n eventMixin(TextMarker);\n\n // Clear the marker.\n TextMarker.prototype.clear = function() {\n if (this.explicitlyCleared) return;\n var cm = this.doc.cm, withOp = cm && !cm.curOp;\n if (withOp) startOperation(cm);\n if (hasHandler(this, \"clear\")) {\n var found = this.find();\n if (found) signalLater(this, \"clear\", found.from, found.to);\n }\n var min = null, max = null;\n for (var i = 0; i < this.lines.length; ++i) {\n var line = this.lines[i];\n var span = getMarkedSpanFor(line.markedSpans, this);\n if (cm && !this.collapsed) regLineChange(cm, lineNo(line), \"text\");\n else if (cm) {\n if (span.to != null) max = lineNo(line);\n if (span.from != null) min = lineNo(line);\n }\n line.markedSpans = removeMarkedSpan(line.markedSpans, span);\n if (span.from == null && this.collapsed && !lineIsHidden(this.doc, line) && cm)\n updateLineHeight(line, textHeight(cm.display));\n }\n if (cm && this.collapsed && !cm.options.lineWrapping) for (var i = 0; i < this.lines.length; ++i) {\n var visual = visualLine(this.lines[i]), len = lineLength(visual);\n if (len > cm.display.maxLineLength) {\n cm.display.maxLine = visual;\n cm.display.maxLineLength = len;\n cm.display.maxLineChanged = true;\n }\n }\n\n if (min != null && cm && this.collapsed) regChange(cm, min, max + 1);\n this.lines.length = 0;\n this.explicitlyCleared = true;\n if (this.atomic && this.doc.cantEdit) {\n this.doc.cantEdit = false;\n if (cm) reCheckSelection(cm.doc);\n }\n if (cm) signalLater(cm, \"markerCleared\", cm, this);\n if (withOp) endOperation(cm);\n if (this.parent) this.parent.clear();\n };\n\n // Find the position of the marker in the document. Returns a {from,\n // to} object by default. Side can be passed to get a specific side\n // -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the\n // Pos objects returned contain a line object, rather than a line\n // number (used to prevent looking up the same line twice).\n TextMarker.prototype.find = function(side, lineObj) {\n if (side == null && this.type == \"bookmark\") side = 1;\n var from, to;\n for (var i = 0; i < this.lines.length; ++i) {\n var line = this.lines[i];\n var span = getMarkedSpanFor(line.markedSpans, this);\n if (span.from != null) {\n from = Pos(lineObj ? line : lineNo(line), span.from);\n if (side == -1) return from;\n }\n if (span.to != null) {\n to = Pos(lineObj ? line : lineNo(line), span.to);\n if (side == 1) return to;\n }\n }\n return from && {from: from, to: to};\n };\n\n // Signals that the marker's widget changed, and surrounding layout\n // should be recomputed.\n TextMarker.prototype.changed = function() {\n var pos = this.find(-1, true), widget = this, cm = this.doc.cm;\n if (!pos || !cm) return;\n runInOp(cm, function() {\n var line = pos.line, lineN = lineNo(pos.line);\n var view = findViewForLine(cm, lineN);\n if (view) {\n clearLineMeasurementCacheFor(view);\n cm.curOp.selectionChanged = cm.curOp.forceUpdate = true;\n }\n cm.curOp.updateMaxLine = true;\n if (!lineIsHidden(widget.doc, line) && widget.height != null) {\n var oldHeight = widget.height;\n widget.height = null;\n var dHeight = widgetHeight(widget) - oldHeight;\n if (dHeight)\n updateLineHeight(line, line.height + dHeight);\n }\n });\n };\n\n TextMarker.prototype.attachLine = function(line) {\n if (!this.lines.length && this.doc.cm) {\n var op = this.doc.cm.curOp;\n if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1)\n (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this);\n }\n this.lines.push(line);\n };\n TextMarker.prototype.detachLine = function(line) {\n this.lines.splice(indexOf(this.lines, line), 1);\n if (!this.lines.length && this.doc.cm) {\n var op = this.doc.cm.curOp;\n (op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this);\n }\n };\n\n // Collapsed markers have unique ids, in order to be able to order\n // them, which is needed for uniquely determining an outer marker\n // when they overlap (they may nest, but not partially overlap).\n var nextMarkerId = 0;\n\n // Create a marker, wire it up to the right lines, and\n function markText(doc, from, to, options, type) {\n // Shared markers (across linked documents) are handled separately\n // (markTextShared will call out to this again, once per\n // document).\n if (options && options.shared) return markTextShared(doc, from, to, options, type);\n // Ensure we are in an operation.\n if (doc.cm && !doc.cm.curOp) return operation(doc.cm, markText)(doc, from, to, options, type);\n\n var marker = new TextMarker(doc, type), diff = cmp(from, to);\n if (options) copyObj(options, marker, false);\n // Don't connect empty markers unless clearWhenEmpty is false\n if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false)\n return marker;\n if (marker.replacedWith) {\n // Showing up as a widget implies collapsed (widget replaces text)\n marker.collapsed = true;\n marker.widgetNode = elt(\"span\", [marker.replacedWith], \"CodeMirror-widget\");\n if (!options.handleMouseEvents) marker.widgetNode.setAttribute(\"cm-ignore-events\", \"true\");\n if (options.insertLeft) marker.widgetNode.insertLeft = true;\n }\n if (marker.collapsed) {\n if (conflictingCollapsedRange(doc, from.line, from, to, marker) ||\n from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker))\n throw new Error(\"Inserting collapsed marker partially overlapping an existing one\");\n sawCollapsedSpans = true;\n }\n\n if (marker.addToHistory)\n addChangeToHistory(doc, {from: from, to: to, origin: \"markText\"}, doc.sel, NaN);\n\n var curLine = from.line, cm = doc.cm, updateMaxLine;\n doc.iter(curLine, to.line + 1, function(line) {\n if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine)\n updateMaxLine = true;\n if (marker.collapsed && curLine != from.line) updateLineHeight(line, 0);\n addMarkedSpan(line, new MarkedSpan(marker,\n curLine == from.line ? from.ch : null,\n curLine == to.line ? to.ch : null));\n ++curLine;\n });\n // lineIsHidden depends on the presence of the spans, so needs a second pass\n if (marker.collapsed) doc.iter(from.line, to.line + 1, function(line) {\n if (lineIsHidden(doc, line)) updateLineHeight(line, 0);\n });\n\n if (marker.clearOnEnter) on(marker, \"beforeCursorEnter\", function() { marker.clear(); });\n\n if (marker.readOnly) {\n sawReadOnlySpans = true;\n if (doc.history.done.length || doc.history.undone.length)\n doc.clearHistory();\n }\n if (marker.collapsed) {\n marker.id = ++nextMarkerId;\n marker.atomic = true;\n }\n if (cm) {\n // Sync editor state\n if (updateMaxLine) cm.curOp.updateMaxLine = true;\n if (marker.collapsed)\n regChange(cm, from.line, to.line + 1);\n else if (marker.className || marker.title || marker.startStyle || marker.endStyle || marker.css)\n for (var i = from.line; i <= to.line; i++) regLineChange(cm, i, \"text\");\n if (marker.atomic) reCheckSelection(cm.doc);\n signalLater(cm, \"markerAdded\", cm, marker);\n }\n return marker;\n }\n\n // SHARED TEXTMARKERS\n\n // A shared marker spans multiple linked documents. It is\n // implemented as a meta-marker-object controlling multiple normal\n // markers.\n var SharedTextMarker = CodeMirror.SharedTextMarker = function(markers, primary) {\n this.markers = markers;\n this.primary = primary;\n for (var i = 0; i < markers.length; ++i)\n markers[i].parent = this;\n };\n eventMixin(SharedTextMarker);\n\n SharedTextMarker.prototype.clear = function() {\n if (this.explicitlyCleared) return;\n this.explicitlyCleared = true;\n for (var i = 0; i < this.markers.length; ++i)\n this.markers[i].clear();\n signalLater(this, \"clear\");\n };\n SharedTextMarker.prototype.find = function(side, lineObj) {\n return this.primary.find(side, lineObj);\n };\n\n function markTextShared(doc, from, to, options, type) {\n options = copyObj(options);\n options.shared = false;\n var markers = [markText(doc, from, to, options, type)], primary = markers[0];\n var widget = options.widgetNode;\n linkedDocs(doc, function(doc) {\n if (widget) options.widgetNode = widget.cloneNode(true);\n markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type));\n for (var i = 0; i < doc.linked.length; ++i)\n if (doc.linked[i].isParent) return;\n primary = lst(markers);\n });\n return new SharedTextMarker(markers, primary);\n }\n\n function findSharedMarkers(doc) {\n return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())),\n function(m) { return m.parent; });\n }\n\n function copySharedMarkers(doc, markers) {\n for (var i = 0; i < markers.length; i++) {\n var marker = markers[i], pos = marker.find();\n var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to);\n if (cmp(mFrom, mTo)) {\n var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type);\n marker.markers.push(subMark);\n subMark.parent = marker;\n }\n }\n }\n\n function detachSharedMarkers(markers) {\n for (var i = 0; i < markers.length; i++) {\n var marker = markers[i], linked = [marker.primary.doc];;\n linkedDocs(marker.primary.doc, function(d) { linked.push(d); });\n for (var j = 0; j < marker.markers.length; j++) {\n var subMarker = marker.markers[j];\n if (indexOf(linked, subMarker.doc) == -1) {\n subMarker.parent = null;\n marker.markers.splice(j--, 1);\n }\n }\n }\n }\n\n // TEXTMARKER SPANS\n\n function MarkedSpan(marker, from, to) {\n this.marker = marker;\n this.from = from; this.to = to;\n }\n\n // Search an array of spans for a span matching the given marker.\n function getMarkedSpanFor(spans, marker) {\n if (spans) for (var i = 0; i < spans.length; ++i) {\n var span = spans[i];\n if (span.marker == marker) return span;\n }\n }\n // Remove a span from an array, returning undefined if no spans are\n // left (we don't store arrays for lines without spans).\n function removeMarkedSpan(spans, span) {\n for (var r, i = 0; i < spans.length; ++i)\n if (spans[i] != span) (r || (r = [])).push(spans[i]);\n return r;\n }\n // Add a span to a line.\n function addMarkedSpan(line, span) {\n line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span];\n span.marker.attachLine(line);\n }\n\n // Used for the algorithm that adjusts markers for a change in the\n // document. These functions cut an array of spans at a given\n // character position, returning an array of remaining chunks (or\n // undefined if nothing remains).\n function markedSpansBefore(old, startCh, isInsert) {\n if (old) for (var i = 0, nw; i < old.length; ++i) {\n var span = old[i], marker = span.marker;\n var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh);\n if (startsBefore || span.from == startCh && marker.type == \"bookmark\" && (!isInsert || !span.marker.insertLeft)) {\n var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh);\n (nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to));\n }\n }\n return nw;\n }\n function markedSpansAfter(old, endCh, isInsert) {\n if (old) for (var i = 0, nw; i < old.length; ++i) {\n var span = old[i], marker = span.marker;\n var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh);\n if (endsAfter || span.from == endCh && marker.type == \"bookmark\" && (!isInsert || span.marker.insertLeft)) {\n var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh);\n (nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh,\n span.to == null ? null : span.to - endCh));\n }\n }\n return nw;\n }\n\n // Given a change object, compute the new set of marker spans that\n // cover the line in which the change took place. Removes spans\n // entirely within the change, reconnects spans belonging to the\n // same marker that appear on both sides of the change, and cuts off\n // spans partially within the change. Returns an array of span\n // arrays with one element for each line in (after) the change.\n function stretchSpansOverChange(doc, change) {\n if (change.full) return null;\n var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans;\n var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans;\n if (!oldFirst && !oldLast) return null;\n\n var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0;\n // Get the spans that 'stick out' on both sides\n var first = markedSpansBefore(oldFirst, startCh, isInsert);\n var last = markedSpansAfter(oldLast, endCh, isInsert);\n\n // Next, merge those two ends\n var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0);\n if (first) {\n // Fix up .to properties of first\n for (var i = 0; i < first.length; ++i) {\n var span = first[i];\n if (span.to == null) {\n var found = getMarkedSpanFor(last, span.marker);\n if (!found) span.to = startCh;\n else if (sameLine) span.to = found.to == null ? null : found.to + offset;\n }\n }\n }\n if (last) {\n // Fix up .from in last (or move them into first in case of sameLine)\n for (var i = 0; i < last.length; ++i) {\n var span = last[i];\n if (span.to != null) span.to += offset;\n if (span.from == null) {\n var found = getMarkedSpanFor(first, span.marker);\n if (!found) {\n span.from = offset;\n if (sameLine) (first || (first = [])).push(span);\n }\n } else {\n span.from += offset;\n if (sameLine) (first || (first = [])).push(span);\n }\n }\n }\n // Make sure we didn't create any zero-length spans\n if (first) first = clearEmptySpans(first);\n if (last && last != first) last = clearEmptySpans(last);\n\n var newMarkers = [first];\n if (!sameLine) {\n // Fill gap with whole-line-spans\n var gap = change.text.length - 2, gapMarkers;\n if (gap > 0 && first)\n for (var i = 0; i < first.length; ++i)\n if (first[i].to == null)\n (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i].marker, null, null));\n for (var i = 0; i < gap; ++i)\n newMarkers.push(gapMarkers);\n newMarkers.push(last);\n }\n return newMarkers;\n }\n\n // Remove spans that are empty and don't have a clearWhenEmpty\n // option of false.\n function clearEmptySpans(spans) {\n for (var i = 0; i < spans.length; ++i) {\n var span = spans[i];\n if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false)\n spans.splice(i--, 1);\n }\n if (!spans.length) return null;\n return spans;\n }\n\n // Used for un/re-doing changes from the history. Combines the\n // result of computing the existing spans with the set of spans that\n // existed in the history (so that deleting around a span and then\n // undoing brings back the span).\n function mergeOldSpans(doc, change) {\n var old = getOldSpans(doc, change);\n var stretched = stretchSpansOverChange(doc, change);\n if (!old) return stretched;\n if (!stretched) return old;\n\n for (var i = 0; i < old.length; ++i) {\n var oldCur = old[i], stretchCur = stretched[i];\n if (oldCur && stretchCur) {\n spans: for (var j = 0; j < stretchCur.length; ++j) {\n var span = stretchCur[j];\n for (var k = 0; k < oldCur.length; ++k)\n if (oldCur[k].marker == span.marker) continue spans;\n oldCur.push(span);\n }\n } else if (stretchCur) {\n old[i] = stretchCur;\n }\n }\n return old;\n }\n\n // Used to 'clip' out readOnly ranges when making a change.\n function removeReadOnlyRanges(doc, from, to) {\n var markers = null;\n doc.iter(from.line, to.line + 1, function(line) {\n if (line.markedSpans) for (var i = 0; i < line.markedSpans.length; ++i) {\n var mark = line.markedSpans[i].marker;\n if (mark.readOnly && (!markers || indexOf(markers, mark) == -1))\n (markers || (markers = [])).push(mark);\n }\n });\n if (!markers) return null;\n var parts = [{from: from, to: to}];\n for (var i = 0; i < markers.length; ++i) {\n var mk = markers[i], m = mk.find(0);\n for (var j = 0; j < parts.length; ++j) {\n var p = parts[j];\n if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) continue;\n var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to);\n if (dfrom < 0 || !mk.inclusiveLeft && !dfrom)\n newParts.push({from: p.from, to: m.from});\n if (dto > 0 || !mk.inclusiveRight && !dto)\n newParts.push({from: m.to, to: p.to});\n parts.splice.apply(parts, newParts);\n j += newParts.length - 1;\n }\n }\n return parts;\n }\n\n // Connect or disconnect spans from a line.\n function detachMarkedSpans(line) {\n var spans = line.markedSpans;\n if (!spans) return;\n for (var i = 0; i < spans.length; ++i)\n spans[i].marker.detachLine(line);\n line.markedSpans = null;\n }\n function attachMarkedSpans(line, spans) {\n if (!spans) return;\n for (var i = 0; i < spans.length; ++i)\n spans[i].marker.attachLine(line);\n line.markedSpans = spans;\n }\n\n // Helpers used when computing which overlapping collapsed span\n // counts as the larger one.\n function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0; }\n function extraRight(marker) { return marker.inclusiveRight ? 1 : 0; }\n\n // Returns a number indicating which of two overlapping collapsed\n // spans is larger (and thus includes the other). Falls back to\n // comparing ids when the spans cover exactly the same range.\n function compareCollapsedMarkers(a, b) {\n var lenDiff = a.lines.length - b.lines.length;\n if (lenDiff != 0) return lenDiff;\n var aPos = a.find(), bPos = b.find();\n var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b);\n if (fromCmp) return -fromCmp;\n var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b);\n if (toCmp) return toCmp;\n return b.id - a.id;\n }\n\n // Find out whether a line ends or starts in a collapsed span. If\n // so, return the marker for that span.\n function collapsedSpanAtSide(line, start) {\n var sps = sawCollapsedSpans && line.markedSpans, found;\n if (sps) for (var sp, i = 0; i < sps.length; ++i) {\n sp = sps[i];\n if (sp.marker.collapsed && (start ? sp.from : sp.to) == null &&\n (!found || compareCollapsedMarkers(found, sp.marker) < 0))\n found = sp.marker;\n }\n return found;\n }\n function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true); }\n function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false); }\n\n // Test whether there exists a collapsed span that partially\n // overlaps (covers the start or end, but not both) of a new span.\n // Such overlap is not allowed.\n function conflictingCollapsedRange(doc, lineNo, from, to, marker) {\n var line = getLine(doc, lineNo);\n var sps = sawCollapsedSpans && line.markedSpans;\n if (sps) for (var i = 0; i < sps.length; ++i) {\n var sp = sps[i];\n if (!sp.marker.collapsed) continue;\n var found = sp.marker.find(0);\n var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker);\n var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker);\n if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) continue;\n if (fromCmp <= 0 && (cmp(found.to, from) > 0 || (sp.marker.inclusiveRight && marker.inclusiveLeft)) ||\n fromCmp >= 0 && (cmp(found.from, to) < 0 || (sp.marker.inclusiveLeft && marker.inclusiveRight)))\n return true;\n }\n }\n\n // A visual line is a line as drawn on the screen. Folding, for\n // example, can cause multiple logical lines to appear on the same\n // visual line. This finds the start of the visual line that the\n // given line is part of (usually that is the line itself).\n function visualLine(line) {\n var merged;\n while (merged = collapsedSpanAtStart(line))\n line = merged.find(-1, true).line;\n return line;\n }\n\n // Returns an array of logical lines that continue the visual line\n // started by the argument, or undefined if there are no such lines.\n function visualLineContinued(line) {\n var merged, lines;\n while (merged = collapsedSpanAtEnd(line)) {\n line = merged.find(1, true).line;\n (lines || (lines = [])).push(line);\n }\n return lines;\n }\n\n // Get the line number of the start of the visual line that the\n // given line number is part of.\n function visualLineNo(doc, lineN) {\n var line = getLine(doc, lineN), vis = visualLine(line);\n if (line == vis) return lineN;\n return lineNo(vis);\n }\n // Get the line number of the start of the next visual line after\n // the given line.\n function visualLineEndNo(doc, lineN) {\n if (lineN > doc.lastLine()) return lineN;\n var line = getLine(doc, lineN), merged;\n if (!lineIsHidden(doc, line)) return lineN;\n while (merged = collapsedSpanAtEnd(line))\n line = merged.find(1, true).line;\n return lineNo(line) + 1;\n }\n\n // Compute whether a line is hidden. Lines count as hidden when they\n // are part of a visual line that starts with another line, or when\n // they are entirely covered by collapsed, non-widget span.\n function lineIsHidden(doc, line) {\n var sps = sawCollapsedSpans && line.markedSpans;\n if (sps) for (var sp, i = 0; i < sps.length; ++i) {\n sp = sps[i];\n if (!sp.marker.collapsed) continue;\n if (sp.from == null) return true;\n if (sp.marker.widgetNode) continue;\n if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp))\n return true;\n }\n }\n function lineIsHiddenInner(doc, line, span) {\n if (span.to == null) {\n var end = span.marker.find(1, true);\n return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker));\n }\n if (span.marker.inclusiveRight && span.to == line.text.length)\n return true;\n for (var sp, i = 0; i < line.markedSpans.length; ++i) {\n sp = line.markedSpans[i];\n if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to &&\n (sp.to == null || sp.to != span.from) &&\n (sp.marker.inclusiveLeft || span.marker.inclusiveRight) &&\n lineIsHiddenInner(doc, line, sp)) return true;\n }\n }\n\n // LINE WIDGETS\n\n // Line widgets are block elements displayed above or below a line.\n\n var LineWidget = CodeMirror.LineWidget = function(cm, node, options) {\n if (options) for (var opt in options) if (options.hasOwnProperty(opt))\n this[opt] = options[opt];\n this.cm = cm;\n this.node = node;\n };\n eventMixin(LineWidget);\n\n function adjustScrollWhenAboveVisible(cm, line, diff) {\n if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop))\n addToScrollPos(cm, null, diff);\n }\n\n LineWidget.prototype.clear = function() {\n var cm = this.cm, ws = this.line.widgets, line = this.line, no = lineNo(line);\n if (no == null || !ws) return;\n for (var i = 0; i < ws.length; ++i) if (ws[i] == this) ws.splice(i--, 1);\n if (!ws.length) line.widgets = null;\n var height = widgetHeight(this);\n runInOp(cm, function() {\n adjustScrollWhenAboveVisible(cm, line, -height);\n regLineChange(cm, no, \"widget\");\n updateLineHeight(line, Math.max(0, line.height - height));\n });\n };\n LineWidget.prototype.changed = function() {\n var oldH = this.height, cm = this.cm, line = this.line;\n this.height = null;\n var diff = widgetHeight(this) - oldH;\n if (!diff) return;\n runInOp(cm, function() {\n cm.curOp.forceUpdate = true;\n adjustScrollWhenAboveVisible(cm, line, diff);\n updateLineHeight(line, line.height + diff);\n });\n };\n\n function widgetHeight(widget) {\n if (widget.height != null) return widget.height;\n if (!contains(document.body, widget.node)) {\n var parentStyle = \"position: relative;\";\n if (widget.coverGutter)\n parentStyle += \"margin-left: -\" + widget.cm.display.gutters.offsetWidth + \"px;\";\n if (widget.noHScroll)\n parentStyle += \"width: \" + widget.cm.display.wrapper.clientWidth + \"px;\";\n removeChildrenAndAdd(widget.cm.display.measure, elt(\"div\", [widget.node], null, parentStyle));\n }\n return widget.height = widget.node.offsetHeight;\n }\n\n function addLineWidget(cm, handle, node, options) {\n var widget = new LineWidget(cm, node, options);\n if (widget.noHScroll) cm.display.alignWidgets = true;\n changeLine(cm.doc, handle, \"widget\", function(line) {\n var widgets = line.widgets || (line.widgets = []);\n if (widget.insertAt == null) widgets.push(widget);\n else widgets.splice(Math.min(widgets.length - 1, Math.max(0, widget.insertAt)), 0, widget);\n widget.line = line;\n if (!lineIsHidden(cm.doc, line)) {\n var aboveVisible = heightAtLine(line) < cm.doc.scrollTop;\n updateLineHeight(line, line.height + widgetHeight(widget));\n if (aboveVisible) addToScrollPos(cm, null, widget.height);\n cm.curOp.forceUpdate = true;\n }\n return true;\n });\n return widget;\n }\n\n // LINE DATA STRUCTURE\n\n // Line objects. These hold state related to a line, including\n // highlighting info (the styles array).\n var Line = CodeMirror.Line = function(text, markedSpans, estimateHeight) {\n this.text = text;\n attachMarkedSpans(this, markedSpans);\n this.height = estimateHeight ? estimateHeight(this) : 1;\n };\n eventMixin(Line);\n Line.prototype.lineNo = function() { return lineNo(this); };\n\n // Change the content (text, markers) of a line. Automatically\n // invalidates cached information and tries to re-estimate the\n // line's height.\n function updateLine(line, text, markedSpans, estimateHeight) {\n line.text = text;\n if (line.stateAfter) line.stateAfter = null;\n if (line.styles) line.styles = null;\n if (line.order != null) line.order = null;\n detachMarkedSpans(line);\n attachMarkedSpans(line, markedSpans);\n var estHeight = estimateHeight ? estimateHeight(line) : 1;\n if (estHeight != line.height) updateLineHeight(line, estHeight);\n }\n\n // Detach a line from the document tree and its markers.\n function cleanUpLine(line) {\n line.parent = null;\n detachMarkedSpans(line);\n }\n\n function extractLineClasses(type, output) {\n if (type) for (;;) {\n var lineClass = type.match(/(?:^|\\s+)line-(background-)?(\\S+)/);\n if (!lineClass) break;\n type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length);\n var prop = lineClass[1] ? \"bgClass\" : \"textClass\";\n if (output[prop] == null)\n output[prop] = lineClass[2];\n else if (!(new RegExp(\"(?:^|\\s)\" + lineClass[2] + \"(?:$|\\s)\")).test(output[prop]))\n output[prop] += \" \" + lineClass[2];\n }\n return type;\n }\n\n function callBlankLine(mode, state) {\n if (mode.blankLine) return mode.blankLine(state);\n if (!mode.innerMode) return;\n var inner = CodeMirror.innerMode(mode, state);\n if (inner.mode.blankLine) return inner.mode.blankLine(inner.state);\n }\n\n function readToken(mode, stream, state, inner) {\n for (var i = 0; i < 10; i++) {\n if (inner) inner[0] = CodeMirror.innerMode(mode, state).mode;\n var style = mode.token(stream, state);\n if (stream.pos > stream.start) return style;\n }\n throw new Error(\"Mode \" + mode.name + \" failed to advance stream.\");\n }\n\n // Utility for getTokenAt and getLineTokens\n function takeToken(cm, pos, precise, asArray) {\n function getObj(copy) {\n return {start: stream.start, end: stream.pos,\n string: stream.current(),\n type: style || null,\n state: copy ? copyState(doc.mode, state) : state};\n }\n\n var doc = cm.doc, mode = doc.mode, style;\n pos = clipPos(doc, pos);\n var line = getLine(doc, pos.line), state = getStateBefore(cm, pos.line, precise);\n var stream = new StringStream(line.text, cm.options.tabSize), tokens;\n if (asArray) tokens = [];\n while ((asArray || stream.pos < pos.ch) && !stream.eol()) {\n stream.start = stream.pos;\n style = readToken(mode, stream, state);\n if (asArray) tokens.push(getObj(true));\n }\n return asArray ? tokens : getObj();\n }\n\n // Run the given mode's parser over a line, calling f for each token.\n function runMode(cm, text, mode, state, f, lineClasses, forceToEnd) {\n var flattenSpans = mode.flattenSpans;\n if (flattenSpans == null) flattenSpans = cm.options.flattenSpans;\n var curStart = 0, curStyle = null;\n var stream = new StringStream(text, cm.options.tabSize), style;\n var inner = cm.options.addModeClass && [null];\n if (text == \"\") extractLineClasses(callBlankLine(mode, state), lineClasses);\n while (!stream.eol()) {\n if (stream.pos > cm.options.maxHighlightLength) {\n flattenSpans = false;\n if (forceToEnd) processLine(cm, text, state, stream.pos);\n stream.pos = text.length;\n style = null;\n } else {\n style = extractLineClasses(readToken(mode, stream, state, inner), lineClasses);\n }\n if (inner) {\n var mName = inner[0].name;\n if (mName) style = \"m-\" + (style ? mName + \" \" + style : mName);\n }\n if (!flattenSpans || curStyle != style) {\n while (curStart < stream.start) {\n curStart = Math.min(stream.start, curStart + 50000);\n f(curStart, curStyle);\n }\n curStyle = style;\n }\n stream.start = stream.pos;\n }\n while (curStart < stream.pos) {\n // Webkit seems to refuse to render text nodes longer than 57444 characters\n var pos = Math.min(stream.pos, curStart + 50000);\n f(pos, curStyle);\n curStart = pos;\n }\n }\n\n // Compute a style array (an array starting with a mode generation\n // -- for invalidation -- followed by pairs of end positions and\n // style strings), which is used to highlight the tokens on the\n // line.\n function highlightLine(cm, line, state, forceToEnd) {\n // A styles array always starts with a number identifying the\n // mode/overlays that it is based on (for easy invalidation).\n var st = [cm.state.modeGen], lineClasses = {};\n // Compute the base array of styles\n runMode(cm, line.text, cm.doc.mode, state, function(end, style) {\n st.push(end, style);\n }, lineClasses, forceToEnd);\n\n // Run overlays, adjust style array.\n for (var o = 0; o < cm.state.overlays.length; ++o) {\n var overlay = cm.state.overlays[o], i = 1, at = 0;\n runMode(cm, line.text, overlay.mode, true, function(end, style) {\n var start = i;\n // Ensure there's a token end at the current position, and that i points at it\n while (at < end) {\n var i_end = st[i];\n if (i_end > end)\n st.splice(i, 1, end, st[i+1], i_end);\n i += 2;\n at = Math.min(end, i_end);\n }\n if (!style) return;\n if (overlay.opaque) {\n st.splice(start, i - start, end, \"cm-overlay \" + style);\n i = start + 2;\n } else {\n for (; start < i; start += 2) {\n var cur = st[start+1];\n st[start+1] = (cur ? cur + \" \" : \"\") + \"cm-overlay \" + style;\n }\n }\n }, lineClasses);\n }\n\n return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null};\n }\n\n function getLineStyles(cm, line, updateFrontier) {\n if (!line.styles || line.styles[0] != cm.state.modeGen) {\n var result = highlightLine(cm, line, line.stateAfter = getStateBefore(cm, lineNo(line)));\n line.styles = result.styles;\n if (result.classes) line.styleClasses = result.classes;\n else if (line.styleClasses) line.styleClasses = null;\n if (updateFrontier === cm.doc.frontier) cm.doc.frontier++;\n }\n return line.styles;\n }\n\n // Lightweight form of highlight -- proceed over this line and\n // update state, but don't save a style array. Used for lines that\n // aren't currently visible.\n function processLine(cm, text, state, startAt) {\n var mode = cm.doc.mode;\n var stream = new StringStream(text, cm.options.tabSize);\n stream.start = stream.pos = startAt || 0;\n if (text == \"\") callBlankLine(mode, state);\n while (!stream.eol() && stream.pos <= cm.options.maxHighlightLength) {\n readToken(mode, stream, state);\n stream.start = stream.pos;\n }\n }\n\n // Convert a style as returned by a mode (either null, or a string\n // containing one or more styles) to a CSS style. This is cached,\n // and also looks for line-wide styles.\n var styleToClassCache = {}, styleToClassCacheWithMode = {};\n function interpretTokenStyle(style, options) {\n if (!style || /^\\s*$/.test(style)) return null;\n var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache;\n return cache[style] ||\n (cache[style] = style.replace(/\\S+/g, \"cm-$&\"));\n }\n\n // Render the DOM representation of the text of a line. Also builds\n // up a 'line map', which points at the DOM nodes that represent\n // specific stretches of text, and is used by the measuring code.\n // The returned object contains the DOM node, this map, and\n // information about line-wide styles that were set by the mode.\n function buildLineContent(cm, lineView) {\n // The padding-right forces the element to have a 'border', which\n // is needed on Webkit to be able to get line-level bounding\n // rectangles for it (in measureChar).\n var content = elt(\"span\", null, null, webkit ? \"padding-right: .1px\" : null);\n var builder = {pre: elt(\"pre\", [content]), content: content, col: 0, pos: 0, cm: cm};\n lineView.measure = {};\n\n // Iterate over the logical lines that make up this visual line.\n for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) {\n var line = i ? lineView.rest[i - 1] : lineView.line, order;\n builder.pos = 0;\n builder.addToken = buildToken;\n // Optionally wire in some hacks into the token-rendering\n // algorithm, to deal with browser quirks.\n if ((ie || webkit) && cm.getOption(\"lineWrapping\"))\n builder.addToken = buildTokenSplitSpaces(builder.addToken);\n if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line)))\n builder.addToken = buildTokenBadBidi(builder.addToken, order);\n builder.map = [];\n var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line);\n insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate));\n if (line.styleClasses) {\n if (line.styleClasses.bgClass)\n builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || \"\");\n if (line.styleClasses.textClass)\n builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || \"\");\n }\n\n // Ensure at least a single node is present, for measuring.\n if (builder.map.length == 0)\n builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure)));\n\n // Store the map and a cache object for the current logical line\n if (i == 0) {\n lineView.measure.map = builder.map;\n lineView.measure.cache = {};\n } else {\n (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map);\n (lineView.measure.caches || (lineView.measure.caches = [])).push({});\n }\n }\n\n // See issue #2901\n if (webkit && /\\bcm-tab\\b/.test(builder.content.lastChild.className))\n builder.content.className = \"cm-tab-wrap-hack\";\n\n signal(cm, \"renderLine\", cm, lineView.line, builder.pre);\n if (builder.pre.className)\n builder.textClass = joinClasses(builder.pre.className, builder.textClass || \"\");\n\n return builder;\n }\n\n function defaultSpecialCharPlaceholder(ch) {\n var token = elt(\"span\", \"\\u2022\", \"cm-invalidchar\");\n token.title = \"\\\\u\" + ch.charCodeAt(0).toString(16);\n token.setAttribute(\"aria-label\", token.title);\n return token;\n }\n\n // Build up the DOM representation for a single token, and add it to\n // the line map. Takes care to render special characters separately.\n function buildToken(builder, text, style, startStyle, endStyle, title, css) {\n if (!text) return;\n var special = builder.cm.options.specialChars, mustWrap = false;\n if (!special.test(text)) {\n builder.col += text.length;\n var content = document.createTextNode(text);\n builder.map.push(builder.pos, builder.pos + text.length, content);\n if (ie && ie_version < 9) mustWrap = true;\n builder.pos += text.length;\n } else {\n var content = document.createDocumentFragment(), pos = 0;\n while (true) {\n special.lastIndex = pos;\n var m = special.exec(text);\n var skipped = m ? m.index - pos : text.length - pos;\n if (skipped) {\n var txt = document.createTextNode(text.slice(pos, pos + skipped));\n if (ie && ie_version < 9) content.appendChild(elt(\"span\", [txt]));\n else content.appendChild(txt);\n builder.map.push(builder.pos, builder.pos + skipped, txt);\n builder.col += skipped;\n builder.pos += skipped;\n }\n if (!m) break;\n pos += skipped + 1;\n if (m[0] == \"\\t\") {\n var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize;\n var txt = content.appendChild(elt(\"span\", spaceStr(tabWidth), \"cm-tab\"));\n txt.setAttribute(\"role\", \"presentation\");\n builder.col += tabWidth;\n } else {\n var txt = builder.cm.options.specialCharPlaceholder(m[0]);\n if (ie && ie_version < 9) content.appendChild(elt(\"span\", [txt]));\n else content.appendChild(txt);\n builder.col += 1;\n }\n builder.map.push(builder.pos, builder.pos + 1, txt);\n builder.pos++;\n }\n }\n if (style || startStyle || endStyle || mustWrap || css) {\n var fullStyle = style || \"\";\n if (startStyle) fullStyle += startStyle;\n if (endStyle) fullStyle += endStyle;\n var token = elt(\"span\", [content], fullStyle, css);\n if (title) token.title = title;\n return builder.content.appendChild(token);\n }\n builder.content.appendChild(content);\n }\n\n function buildTokenSplitSpaces(inner) {\n function split(old) {\n var out = \" \";\n for (var i = 0; i < old.length - 2; ++i) out += i % 2 ? \" \" : \"\\u00a0\";\n out += \" \";\n return out;\n }\n return function(builder, text, style, startStyle, endStyle, title) {\n inner(builder, text.replace(/ {3,}/g, split), style, startStyle, endStyle, title);\n };\n }\n\n // Work around nonsense dimensions being reported for stretches of\n // right-to-left text.\n function buildTokenBadBidi(inner, order) {\n return function(builder, text, style, startStyle, endStyle, title) {\n style = style ? style + \" cm-force-border\" : \"cm-force-border\";\n var start = builder.pos, end = start + text.length;\n for (;;) {\n // Find the part that overlaps with the start of this text\n for (var i = 0; i < order.length; i++) {\n var part = order[i];\n if (part.to > start && part.from <= start) break;\n }\n if (part.to >= end) return inner(builder, text, style, startStyle, endStyle, title);\n inner(builder, text.slice(0, part.to - start), style, startStyle, null, title);\n startStyle = null;\n text = text.slice(part.to - start);\n start = part.to;\n }\n };\n }\n\n function buildCollapsedSpan(builder, size, marker, ignoreWidget) {\n var widget = !ignoreWidget && marker.widgetNode;\n if (widget) {\n builder.map.push(builder.pos, builder.pos + size, widget);\n builder.content.appendChild(widget);\n }\n builder.pos += size;\n }\n\n // Outputs a number of spans to make up a line, taking highlighting\n // and marked text into account.\n function insertLineContent(line, builder, styles) {\n var spans = line.markedSpans, allText = line.text, at = 0;\n if (!spans) {\n for (var i = 1; i < styles.length; i+=2)\n builder.addToken(builder, allText.slice(at, at = styles[i]), interpretTokenStyle(styles[i+1], builder.cm.options));\n return;\n }\n\n var len = allText.length, pos = 0, i = 1, text = \"\", style, css;\n var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, title, collapsed;\n for (;;) {\n if (nextChange == pos) { // Update current marker set\n spanStyle = spanEndStyle = spanStartStyle = title = css = \"\";\n collapsed = null; nextChange = Infinity;\n var foundBookmarks = [];\n for (var j = 0; j < spans.length; ++j) {\n var sp = spans[j], m = sp.marker;\n if (sp.from <= pos && (sp.to == null || sp.to > pos)) {\n if (sp.to != null && nextChange > sp.to) { nextChange = sp.to; spanEndStyle = \"\"; }\n if (m.className) spanStyle += \" \" + m.className;\n if (m.css) css = m.css;\n if (m.startStyle && sp.from == pos) spanStartStyle += \" \" + m.startStyle;\n if (m.endStyle && sp.to == nextChange) spanEndStyle += \" \" + m.endStyle;\n if (m.title && !title) title = m.title;\n if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0))\n collapsed = sp;\n } else if (sp.from > pos && nextChange > sp.from) {\n nextChange = sp.from;\n }\n if (m.type == \"bookmark\" && sp.from == pos && m.widgetNode) foundBookmarks.push(m);\n }\n if (collapsed && (collapsed.from || 0) == pos) {\n buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos,\n collapsed.marker, collapsed.from == null);\n if (collapsed.to == null) return;\n }\n if (!collapsed && foundBookmarks.length) for (var j = 0; j < foundBookmarks.length; ++j)\n buildCollapsedSpan(builder, 0, foundBookmarks[j]);\n }\n if (pos >= len) break;\n\n var upto = Math.min(len, nextChange);\n while (true) {\n if (text) {\n var end = pos + text.length;\n if (!collapsed) {\n var tokenText = end > upto ? text.slice(0, upto - pos) : text;\n builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle,\n spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : \"\", title, css);\n }\n if (end >= upto) {text = text.slice(upto - pos); pos = upto; break;}\n pos = end;\n spanStartStyle = \"\";\n }\n text = allText.slice(at, at = styles[i++]);\n style = interpretTokenStyle(styles[i++], builder.cm.options);\n }\n }\n }\n\n // DOCUMENT DATA STRUCTURE\n\n // By default, updates that start and end at the beginning of a line\n // are treated specially, in order to make the association of line\n // widgets and marker elements with the text behave more intuitive.\n function isWholeLineUpdate(doc, change) {\n return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == \"\" &&\n (!doc.cm || doc.cm.options.wholeLineUpdateBefore);\n }\n\n // Perform a change on the document data structure.\n function updateDoc(doc, change, markedSpans, estimateHeight) {\n function spansFor(n) {return markedSpans ? markedSpans[n] : null;}\n function update(line, text, spans) {\n updateLine(line, text, spans, estimateHeight);\n signalLater(line, \"change\", line, change);\n }\n function linesFor(start, end) {\n for (var i = start, result = []; i < end; ++i)\n result.push(new Line(text[i], spansFor(i), estimateHeight));\n return result;\n }\n\n var from = change.from, to = change.to, text = change.text;\n var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line);\n var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line;\n\n // Adjust the line structure\n if (change.full) {\n doc.insert(0, linesFor(0, text.length));\n doc.remove(text.length, doc.size - text.length);\n } else if (isWholeLineUpdate(doc, change)) {\n // This is a whole-line replace. Treated specially to make\n // sure line objects move the way they are supposed to.\n var added = linesFor(0, text.length - 1);\n update(lastLine, lastLine.text, lastSpans);\n if (nlines) doc.remove(from.line, nlines);\n if (added.length) doc.insert(from.line, added);\n } else if (firstLine == lastLine) {\n if (text.length == 1) {\n update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans);\n } else {\n var added = linesFor(1, text.length - 1);\n added.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight));\n update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n doc.insert(from.line + 1, added);\n }\n } else if (text.length == 1) {\n update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0));\n doc.remove(from.line + 1, nlines);\n } else {\n update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans);\n var added = linesFor(1, text.length - 1);\n if (nlines > 1) doc.remove(from.line + 1, nlines - 1);\n doc.insert(from.line + 1, added);\n }\n\n signalLater(doc, \"change\", doc, change);\n }\n\n // The document is represented as a BTree consisting of leaves, with\n // chunk of lines in them, and branches, with up to ten leaves or\n // other branch nodes below them. The top node is always a branch\n // node, and is the document object itself (meaning it has\n // additional methods and properties).\n //\n // All nodes have parent links. The tree is used both to go from\n // line numbers to line objects, and to go from objects to numbers.\n // It also indexes by height, and is used to convert between height\n // and line object, and to find the total height of the document.\n //\n // See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html\n\n function LeafChunk(lines) {\n this.lines = lines;\n this.parent = null;\n for (var i = 0, height = 0; i < lines.length; ++i) {\n lines[i].parent = this;\n height += lines[i].height;\n }\n this.height = height;\n }\n\n LeafChunk.prototype = {\n chunkSize: function() { return this.lines.length; },\n // Remove the n lines at offset 'at'.\n removeInner: function(at, n) {\n for (var i = at, e = at + n; i < e; ++i) {\n var line = this.lines[i];\n this.height -= line.height;\n cleanUpLine(line);\n signalLater(line, \"delete\");\n }\n this.lines.splice(at, n);\n },\n // Helper used to collapse a small branch into a single leaf.\n collapse: function(lines) {\n lines.push.apply(lines, this.lines);\n },\n // Insert the given array of lines at offset 'at', count them as\n // having the given height.\n insertInner: function(at, lines, height) {\n this.height += height;\n this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at));\n for (var i = 0; i < lines.length; ++i) lines[i].parent = this;\n },\n // Used to iterate over a part of the tree.\n iterN: function(at, n, op) {\n for (var e = at + n; at < e; ++at)\n if (op(this.lines[at])) return true;\n }\n };\n\n function BranchChunk(children) {\n this.children = children;\n var size = 0, height = 0;\n for (var i = 0; i < children.length; ++i) {\n var ch = children[i];\n size += ch.chunkSize(); height += ch.height;\n ch.parent = this;\n }\n this.size = size;\n this.height = height;\n this.parent = null;\n }\n\n BranchChunk.prototype = {\n chunkSize: function() { return this.size; },\n removeInner: function(at, n) {\n this.size -= n;\n for (var i = 0; i < this.children.length; ++i) {\n var child = this.children[i], sz = child.chunkSize();\n if (at < sz) {\n var rm = Math.min(n, sz - at), oldHeight = child.height;\n child.removeInner(at, rm);\n this.height -= oldHeight - child.height;\n if (sz == rm) { this.children.splice(i--, 1); child.parent = null; }\n if ((n -= rm) == 0) break;\n at = 0;\n } else at -= sz;\n }\n // If the result is smaller than 25 lines, ensure that it is a\n // single leaf node.\n if (this.size - n < 25 &&\n (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) {\n var lines = [];\n this.collapse(lines);\n this.children = [new LeafChunk(lines)];\n this.children[0].parent = this;\n }\n },\n collapse: function(lines) {\n for (var i = 0; i < this.children.length; ++i) this.children[i].collapse(lines);\n },\n insertInner: function(at, lines, height) {\n this.size += lines.length;\n this.height += height;\n for (var i = 0; i < this.children.length; ++i) {\n var child = this.children[i], sz = child.chunkSize();\n if (at <= sz) {\n child.insertInner(at, lines, height);\n if (child.lines && child.lines.length > 50) {\n while (child.lines.length > 50) {\n var spilled = child.lines.splice(child.lines.length - 25, 25);\n var newleaf = new LeafChunk(spilled);\n child.height -= newleaf.height;\n this.children.splice(i + 1, 0, newleaf);\n newleaf.parent = this;\n }\n this.maybeSpill();\n }\n break;\n }\n at -= sz;\n }\n },\n // When a node has grown, check whether it should be split.\n maybeSpill: function() {\n if (this.children.length <= 10) return;\n var me = this;\n do {\n var spilled = me.children.splice(me.children.length - 5, 5);\n var sibling = new BranchChunk(spilled);\n if (!me.parent) { // Become the parent node\n var copy = new BranchChunk(me.children);\n copy.parent = me;\n me.children = [copy, sibling];\n me = copy;\n } else {\n me.size -= sibling.size;\n me.height -= sibling.height;\n var myIndex = indexOf(me.parent.children, me);\n me.parent.children.splice(myIndex + 1, 0, sibling);\n }\n sibling.parent = me.parent;\n } while (me.children.length > 10);\n me.parent.maybeSpill();\n },\n iterN: function(at, n, op) {\n for (var i = 0; i < this.children.length; ++i) {\n var child = this.children[i], sz = child.chunkSize();\n if (at < sz) {\n var used = Math.min(n, sz - at);\n if (child.iterN(at, used, op)) return true;\n if ((n -= used) == 0) break;\n at = 0;\n } else at -= sz;\n }\n }\n };\n\n var nextDocId = 0;\n var Doc = CodeMirror.Doc = function(text, mode, firstLine) {\n if (!(this instanceof Doc)) return new Doc(text, mode, firstLine);\n if (firstLine == null) firstLine = 0;\n\n BranchChunk.call(this, [new LeafChunk([new Line(\"\", null)])]);\n this.first = firstLine;\n this.scrollTop = this.scrollLeft = 0;\n this.cantEdit = false;\n this.cleanGeneration = 1;\n this.frontier = firstLine;\n var start = Pos(firstLine, 0);\n this.sel = simpleSelection(start);\n this.history = new History(null);\n this.id = ++nextDocId;\n this.modeOption = mode;\n\n if (typeof text == \"string\") text = splitLines(text);\n updateDoc(this, {from: start, to: start, text: text});\n setSelection(this, simpleSelection(start), sel_dontScroll);\n };\n\n Doc.prototype = createObj(BranchChunk.prototype, {\n constructor: Doc,\n // Iterate over the document. Supports two forms -- with only one\n // argument, it calls that for each line in the document. With\n // three, it iterates over the range given by the first two (with\n // the second being non-inclusive).\n iter: function(from, to, op) {\n if (op) this.iterN(from - this.first, to - from, op);\n else this.iterN(this.first, this.first + this.size, from);\n },\n\n // Non-public interface for adding and removing lines.\n insert: function(at, lines) {\n var height = 0;\n for (var i = 0; i < lines.length; ++i) height += lines[i].height;\n this.insertInner(at - this.first, lines, height);\n },\n remove: function(at, n) { this.removeInner(at - this.first, n); },\n\n // From here, the methods are part of the public interface. Most\n // are also available from CodeMirror (editor) instances.\n\n getValue: function(lineSep) {\n var lines = getLines(this, this.first, this.first + this.size);\n if (lineSep === false) return lines;\n return lines.join(lineSep || \"\\n\");\n },\n setValue: docMethodOp(function(code) {\n var top = Pos(this.first, 0), last = this.first + this.size - 1;\n makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length),\n text: splitLines(code), origin: \"setValue\", full: true}, true);\n setSelection(this, simpleSelection(top));\n }),\n replaceRange: function(code, from, to, origin) {\n from = clipPos(this, from);\n to = to ? clipPos(this, to) : from;\n replaceRange(this, code, from, to, origin);\n },\n getRange: function(from, to, lineSep) {\n var lines = getBetween(this, clipPos(this, from), clipPos(this, to));\n if (lineSep === false) return lines;\n return lines.join(lineSep || \"\\n\");\n },\n\n getLine: function(line) {var l = this.getLineHandle(line); return l && l.text;},\n\n getLineHandle: function(line) {if (isLine(this, line)) return getLine(this, line);},\n getLineNumber: function(line) {return lineNo(line);},\n\n getLineHandleVisualStart: function(line) {\n if (typeof line == \"number\") line = getLine(this, line);\n return visualLine(line);\n },\n\n lineCount: function() {return this.size;},\n firstLine: function() {return this.first;},\n lastLine: function() {return this.first + this.size - 1;},\n\n clipPos: function(pos) {return clipPos(this, pos);},\n\n getCursor: function(start) {\n var range = this.sel.primary(), pos;\n if (start == null || start == \"head\") pos = range.head;\n else if (start == \"anchor\") pos = range.anchor;\n else if (start == \"end\" || start == \"to\" || start === false) pos = range.to();\n else pos = range.from();\n return pos;\n },\n listSelections: function() { return this.sel.ranges; },\n somethingSelected: function() {return this.sel.somethingSelected();},\n\n setCursor: docMethodOp(function(line, ch, options) {\n setSimpleSelection(this, clipPos(this, typeof line == \"number\" ? Pos(line, ch || 0) : line), null, options);\n }),\n setSelection: docMethodOp(function(anchor, head, options) {\n setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options);\n }),\n extendSelection: docMethodOp(function(head, other, options) {\n extendSelection(this, clipPos(this, head), other && clipPos(this, other), options);\n }),\n extendSelections: docMethodOp(function(heads, options) {\n extendSelections(this, clipPosArray(this, heads, options));\n }),\n extendSelectionsBy: docMethodOp(function(f, options) {\n extendSelections(this, map(this.sel.ranges, f), options);\n }),\n setSelections: docMethodOp(function(ranges, primary, options) {\n if (!ranges.length) return;\n for (var i = 0, out = []; i < ranges.length; i++)\n out[i] = new Range(clipPos(this, ranges[i].anchor),\n clipPos(this, ranges[i].head));\n if (primary == null) primary = Math.min(ranges.length - 1, this.sel.primIndex);\n setSelection(this, normalizeSelection(out, primary), options);\n }),\n addSelection: docMethodOp(function(anchor, head, options) {\n var ranges = this.sel.ranges.slice(0);\n ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor)));\n setSelection(this, normalizeSelection(ranges, ranges.length - 1), options);\n }),\n\n getSelection: function(lineSep) {\n var ranges = this.sel.ranges, lines;\n for (var i = 0; i < ranges.length; i++) {\n var sel = getBetween(this, ranges[i].from(), ranges[i].to());\n lines = lines ? lines.concat(sel) : sel;\n }\n if (lineSep === false) return lines;\n else return lines.join(lineSep || \"\\n\");\n },\n getSelections: function(lineSep) {\n var parts = [], ranges = this.sel.ranges;\n for (var i = 0; i < ranges.length; i++) {\n var sel = getBetween(this, ranges[i].from(), ranges[i].to());\n if (lineSep !== false) sel = sel.join(lineSep || \"\\n\");\n parts[i] = sel;\n }\n return parts;\n },\n replaceSelection: function(code, collapse, origin) {\n var dup = [];\n for (var i = 0; i < this.sel.ranges.length; i++)\n dup[i] = code;\n this.replaceSelections(dup, collapse, origin || \"+input\");\n },\n replaceSelections: docMethodOp(function(code, collapse, origin) {\n var changes = [], sel = this.sel;\n for (var i = 0; i < sel.ranges.length; i++) {\n var range = sel.ranges[i];\n changes[i] = {from: range.from(), to: range.to(), text: splitLines(code[i]), origin: origin};\n }\n var newSel = collapse && collapse != \"end\" && computeReplacedSel(this, changes, collapse);\n for (var i = changes.length - 1; i >= 0; i--)\n makeChange(this, changes[i]);\n if (newSel) setSelectionReplaceHistory(this, newSel);\n else if (this.cm) ensureCursorVisible(this.cm);\n }),\n undo: docMethodOp(function() {makeChangeFromHistory(this, \"undo\");}),\n redo: docMethodOp(function() {makeChangeFromHistory(this, \"redo\");}),\n undoSelection: docMethodOp(function() {makeChangeFromHistory(this, \"undo\", true);}),\n redoSelection: docMethodOp(function() {makeChangeFromHistory(this, \"redo\", true);}),\n\n setExtending: function(val) {this.extend = val;},\n getExtending: function() {return this.extend;},\n\n historySize: function() {\n var hist = this.history, done = 0, undone = 0;\n for (var i = 0; i < hist.done.length; i++) if (!hist.done[i].ranges) ++done;\n for (var i = 0; i < hist.undone.length; i++) if (!hist.undone[i].ranges) ++undone;\n return {undo: done, redo: undone};\n },\n clearHistory: function() {this.history = new History(this.history.maxGeneration);},\n\n markClean: function() {\n this.cleanGeneration = this.changeGeneration(true);\n },\n changeGeneration: function(forceSplit) {\n if (forceSplit)\n this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null;\n return this.history.generation;\n },\n isClean: function (gen) {\n return this.history.generation == (gen || this.cleanGeneration);\n },\n\n getHistory: function() {\n return {done: copyHistoryArray(this.history.done),\n undone: copyHistoryArray(this.history.undone)};\n },\n setHistory: function(histData) {\n var hist = this.history = new History(this.history.maxGeneration);\n hist.done = copyHistoryArray(histData.done.slice(0), null, true);\n hist.undone = copyHistoryArray(histData.undone.slice(0), null, true);\n },\n\n addLineClass: docMethodOp(function(handle, where, cls) {\n return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", function(line) {\n var prop = where == \"text\" ? \"textClass\"\n : where == \"background\" ? \"bgClass\"\n : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n if (!line[prop]) line[prop] = cls;\n else if (classTest(cls).test(line[prop])) return false;\n else line[prop] += \" \" + cls;\n return true;\n });\n }),\n removeLineClass: docMethodOp(function(handle, where, cls) {\n return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", function(line) {\n var prop = where == \"text\" ? \"textClass\"\n : where == \"background\" ? \"bgClass\"\n : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n var cur = line[prop];\n if (!cur) return false;\n else if (cls == null) line[prop] = null;\n else {\n var found = cur.match(classTest(cls));\n if (!found) return false;\n var end = found.index + found[0].length;\n line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? \"\" : \" \") + cur.slice(end) || null;\n }\n return true;\n });\n }),\n\n markText: function(from, to, options) {\n return markText(this, clipPos(this, from), clipPos(this, to), options, \"range\");\n },\n setBookmark: function(pos, options) {\n var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options),\n insertLeft: options && options.insertLeft,\n clearWhenEmpty: false, shared: options && options.shared};\n pos = clipPos(this, pos);\n return markText(this, pos, pos, realOpts, \"bookmark\");\n },\n findMarksAt: function(pos) {\n pos = clipPos(this, pos);\n var markers = [], spans = getLine(this, pos.line).markedSpans;\n if (spans) for (var i = 0; i < spans.length; ++i) {\n var span = spans[i];\n if ((span.from == null || span.from <= pos.ch) &&\n (span.to == null || span.to >= pos.ch))\n markers.push(span.marker.parent || span.marker);\n }\n return markers;\n },\n findMarks: function(from, to, filter) {\n from = clipPos(this, from); to = clipPos(this, to);\n var found = [], lineNo = from.line;\n this.iter(from.line, to.line + 1, function(line) {\n var spans = line.markedSpans;\n if (spans) for (var i = 0; i < spans.length; i++) {\n var span = spans[i];\n if (!(lineNo == from.line && from.ch > span.to ||\n span.from == null && lineNo != from.line||\n lineNo == to.line && span.from > to.ch) &&\n (!filter || filter(span.marker)))\n found.push(span.marker.parent || span.marker);\n }\n ++lineNo;\n });\n return found;\n },\n getAllMarks: function() {\n var markers = [];\n this.iter(function(line) {\n var sps = line.markedSpans;\n if (sps) for (var i = 0; i < sps.length; ++i)\n if (sps[i].from != null) markers.push(sps[i].marker);\n });\n return markers;\n },\n\n posFromIndex: function(off) {\n var ch, lineNo = this.first;\n this.iter(function(line) {\n var sz = line.text.length + 1;\n if (sz > off) { ch = off; return true; }\n off -= sz;\n ++lineNo;\n });\n return clipPos(this, Pos(lineNo, ch));\n },\n indexFromPos: function (coords) {\n coords = clipPos(this, coords);\n var index = coords.ch;\n if (coords.line < this.first || coords.ch < 0) return 0;\n this.iter(this.first, coords.line, function (line) {\n index += line.text.length + 1;\n });\n return index;\n },\n\n copy: function(copyHistory) {\n var doc = new Doc(getLines(this, this.first, this.first + this.size), this.modeOption, this.first);\n doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft;\n doc.sel = this.sel;\n doc.extend = false;\n if (copyHistory) {\n doc.history.undoDepth = this.history.undoDepth;\n doc.setHistory(this.getHistory());\n }\n return doc;\n },\n\n linkedDoc: function(options) {\n if (!options) options = {};\n var from = this.first, to = this.first + this.size;\n if (options.from != null && options.from > from) from = options.from;\n if (options.to != null && options.to < to) to = options.to;\n var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from);\n if (options.sharedHist) copy.history = this.history;\n (this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist});\n copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}];\n copySharedMarkers(copy, findSharedMarkers(this));\n return copy;\n },\n unlinkDoc: function(other) {\n if (other instanceof CodeMirror) other = other.doc;\n if (this.linked) for (var i = 0; i < this.linked.length; ++i) {\n var link = this.linked[i];\n if (link.doc != other) continue;\n this.linked.splice(i, 1);\n other.unlinkDoc(this);\n detachSharedMarkers(findSharedMarkers(this));\n break;\n }\n // If the histories were shared, split them again\n if (other.history == this.history) {\n var splitIds = [other.id];\n linkedDocs(other, function(doc) {splitIds.push(doc.id);}, true);\n other.history = new History(null);\n other.history.done = copyHistoryArray(this.history.done, splitIds);\n other.history.undone = copyHistoryArray(this.history.undone, splitIds);\n }\n },\n iterLinkedDocs: function(f) {linkedDocs(this, f);},\n\n getMode: function() {return this.mode;},\n getEditor: function() {return this.cm;}\n });\n\n // Public alias.\n Doc.prototype.eachLine = Doc.prototype.iter;\n\n // Set up methods on CodeMirror's prototype to redirect to the editor's document.\n var dontDelegate = \"iter insert remove copy getEditor\".split(\" \");\n for (var prop in Doc.prototype) if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0)\n CodeMirror.prototype[prop] = (function(method) {\n return function() {return method.apply(this.doc, arguments);};\n })(Doc.prototype[prop]);\n\n eventMixin(Doc);\n\n // Call f for all linked documents.\n function linkedDocs(doc, f, sharedHistOnly) {\n function propagate(doc, skip, sharedHist) {\n if (doc.linked) for (var i = 0; i < doc.linked.length; ++i) {\n var rel = doc.linked[i];\n if (rel.doc == skip) continue;\n var shared = sharedHist && rel.sharedHist;\n if (sharedHistOnly && !shared) continue;\n f(rel.doc, shared);\n propagate(rel.doc, doc, shared);\n }\n }\n propagate(doc, null, true);\n }\n\n // Attach a document to an editor.\n function attachDoc(cm, doc) {\n if (doc.cm) throw new Error(\"This document is already in use.\");\n cm.doc = doc;\n doc.cm = cm;\n estimateLineHeights(cm);\n loadMode(cm);\n if (!cm.options.lineWrapping) findMaxLine(cm);\n cm.options.mode = doc.modeOption;\n regChange(cm);\n }\n\n // LINE UTILITIES\n\n // Find the line object corresponding to the given line number.\n function getLine(doc, n) {\n n -= doc.first;\n if (n < 0 || n >= doc.size) throw new Error(\"There is no line \" + (n + doc.first) + \" in the document.\");\n for (var chunk = doc; !chunk.lines;) {\n for (var i = 0;; ++i) {\n var child = chunk.children[i], sz = child.chunkSize();\n if (n < sz) { chunk = child; break; }\n n -= sz;\n }\n }\n return chunk.lines[n];\n }\n\n // Get the part of a document between two positions, as an array of\n // strings.\n function getBetween(doc, start, end) {\n var out = [], n = start.line;\n doc.iter(start.line, end.line + 1, function(line) {\n var text = line.text;\n if (n == end.line) text = text.slice(0, end.ch);\n if (n == start.line) text = text.slice(start.ch);\n out.push(text);\n ++n;\n });\n return out;\n }\n // Get the lines between from and to, as array of strings.\n function getLines(doc, from, to) {\n var out = [];\n doc.iter(from, to, function(line) { out.push(line.text); });\n return out;\n }\n\n // Update the height of a line, propagating the height change\n // upwards to parent nodes.\n function updateLineHeight(line, height) {\n var diff = height - line.height;\n if (diff) for (var n = line; n; n = n.parent) n.height += diff;\n }\n\n // Given a line object, find its line number by walking up through\n // its parent links.\n function lineNo(line) {\n if (line.parent == null) return null;\n var cur = line.parent, no = indexOf(cur.lines, line);\n for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) {\n for (var i = 0;; ++i) {\n if (chunk.children[i] == cur) break;\n no += chunk.children[i].chunkSize();\n }\n }\n return no + cur.first;\n }\n\n // Find the line at the given vertical position, using the height\n // information in the document tree.\n function lineAtHeight(chunk, h) {\n var n = chunk.first;\n outer: do {\n for (var i = 0; i < chunk.children.length; ++i) {\n var child = chunk.children[i], ch = child.height;\n if (h < ch) { chunk = child; continue outer; }\n h -= ch;\n n += child.chunkSize();\n }\n return n;\n } while (!chunk.lines);\n for (var i = 0; i < chunk.lines.length; ++i) {\n var line = chunk.lines[i], lh = line.height;\n if (h < lh) break;\n h -= lh;\n }\n return n + i;\n }\n\n\n // Find the height above the given line.\n function heightAtLine(lineObj) {\n lineObj = visualLine(lineObj);\n\n var h = 0, chunk = lineObj.parent;\n for (var i = 0; i < chunk.lines.length; ++i) {\n var line = chunk.lines[i];\n if (line == lineObj) break;\n else h += line.height;\n }\n for (var p = chunk.parent; p; chunk = p, p = chunk.parent) {\n for (var i = 0; i < p.children.length; ++i) {\n var cur = p.children[i];\n if (cur == chunk) break;\n else h += cur.height;\n }\n }\n return h;\n }\n\n // Get the bidi ordering for the given line (and cache it). Returns\n // false for lines that are fully left-to-right, and an array of\n // BidiSpan objects otherwise.\n function getOrder(line) {\n var order = line.order;\n if (order == null) order = line.order = bidiOrdering(line.text);\n return order;\n }\n\n // HISTORY\n\n function History(startGen) {\n // Arrays of change events and selections. Doing something adds an\n // event to done and clears undo. Undoing moves events from done\n // to undone, redoing moves them in the other direction.\n this.done = []; this.undone = [];\n this.undoDepth = Infinity;\n // Used to track when changes can be merged into a single undo\n // event\n this.lastModTime = this.lastSelTime = 0;\n this.lastOp = this.lastSelOp = null;\n this.lastOrigin = this.lastSelOrigin = null;\n // Used by the isClean() method\n this.generation = this.maxGeneration = startGen || 1;\n }\n\n // Create a history change event from an updateDoc-style change\n // object.\n function historyChangeFromChange(doc, change) {\n var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)};\n attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);\n linkedDocs(doc, function(doc) {attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);}, true);\n return histChange;\n }\n\n // Pop all selection events off the end of a history array. Stop at\n // a change event.\n function clearSelectionEvents(array) {\n while (array.length) {\n var last = lst(array);\n if (last.ranges) array.pop();\n else break;\n }\n }\n\n // Find the top change event in the history. Pop off selection\n // events that are in the way.\n function lastChangeEvent(hist, force) {\n if (force) {\n clearSelectionEvents(hist.done);\n return lst(hist.done);\n } else if (hist.done.length && !lst(hist.done).ranges) {\n return lst(hist.done);\n } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) {\n hist.done.pop();\n return lst(hist.done);\n }\n }\n\n // Register a change in the history. Merges changes that are within\n // a single operation, ore are close together with an origin that\n // allows merging (starting with \"+\") into a single event.\n function addChangeToHistory(doc, change, selAfter, opId) {\n var hist = doc.history;\n hist.undone.length = 0;\n var time = +new Date, cur;\n\n if ((hist.lastOp == opId ||\n hist.lastOrigin == change.origin && change.origin &&\n ((change.origin.charAt(0) == \"+\" && doc.cm && hist.lastModTime > time - doc.cm.options.historyEventDelay) ||\n change.origin.charAt(0) == \"*\")) &&\n (cur = lastChangeEvent(hist, hist.lastOp == opId))) {\n // Merge this change into the last event\n var last = lst(cur.changes);\n if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) {\n // Optimized case for simple insertion -- don't want to add\n // new changesets for every character typed\n last.to = changeEnd(change);\n } else {\n // Add new sub-event\n cur.changes.push(historyChangeFromChange(doc, change));\n }\n } else {\n // Can not be merged, start a new event.\n var before = lst(hist.done);\n if (!before || !before.ranges)\n pushSelectionToHistory(doc.sel, hist.done);\n cur = {changes: [historyChangeFromChange(doc, change)],\n generation: hist.generation};\n hist.done.push(cur);\n while (hist.done.length > hist.undoDepth) {\n hist.done.shift();\n if (!hist.done[0].ranges) hist.done.shift();\n }\n }\n hist.done.push(selAfter);\n hist.generation = ++hist.maxGeneration;\n hist.lastModTime = hist.lastSelTime = time;\n hist.lastOp = hist.lastSelOp = opId;\n hist.lastOrigin = hist.lastSelOrigin = change.origin;\n\n if (!last) signal(doc, \"historyAdded\");\n }\n\n function selectionEventCanBeMerged(doc, origin, prev, sel) {\n var ch = origin.charAt(0);\n return ch == \"*\" ||\n ch == \"+\" &&\n prev.ranges.length == sel.ranges.length &&\n prev.somethingSelected() == sel.somethingSelected() &&\n new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500);\n }\n\n // Called whenever the selection changes, sets the new selection as\n // the pending selection in the history, and pushes the old pending\n // selection into the 'done' array when it was significantly\n // different (in number of selected ranges, emptiness, or time).\n function addSelectionToHistory(doc, sel, opId, options) {\n var hist = doc.history, origin = options && options.origin;\n\n // A new event is started when the previous origin does not match\n // the current, or the origins don't allow matching. Origins\n // starting with * are always merged, those starting with + are\n // merged when similar and close together in time.\n if (opId == hist.lastSelOp ||\n (origin && hist.lastSelOrigin == origin &&\n (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin ||\n selectionEventCanBeMerged(doc, origin, lst(hist.done), sel))))\n hist.done[hist.done.length - 1] = sel;\n else\n pushSelectionToHistory(sel, hist.done);\n\n hist.lastSelTime = +new Date;\n hist.lastSelOrigin = origin;\n hist.lastSelOp = opId;\n if (options && options.clearRedo !== false)\n clearSelectionEvents(hist.undone);\n }\n\n function pushSelectionToHistory(sel, dest) {\n var top = lst(dest);\n if (!(top && top.ranges && top.equals(sel)))\n dest.push(sel);\n }\n\n // Used to store marked span information in the history.\n function attachLocalSpans(doc, change, from, to) {\n var existing = change[\"spans_\" + doc.id], n = 0;\n doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function(line) {\n if (line.markedSpans)\n (existing || (existing = change[\"spans_\" + doc.id] = {}))[n] = line.markedSpans;\n ++n;\n });\n }\n\n // When un/re-doing restores text containing marked spans, those\n // that have been explicitly cleared should not be restored.\n function removeClearedSpans(spans) {\n if (!spans) return null;\n for (var i = 0, out; i < spans.length; ++i) {\n if (spans[i].marker.explicitlyCleared) { if (!out) out = spans.slice(0, i); }\n else if (out) out.push(spans[i]);\n }\n return !out ? spans : out.length ? out : null;\n }\n\n // Retrieve and filter the old marked spans stored in a change event.\n function getOldSpans(doc, change) {\n var found = change[\"spans_\" + doc.id];\n if (!found) return null;\n for (var i = 0, nw = []; i < change.text.length; ++i)\n nw.push(removeClearedSpans(found[i]));\n return nw;\n }\n\n // Used both to provide a JSON-safe object in .getHistory, and, when\n // detaching a document, to split the history in two\n function copyHistoryArray(events, newGroup, instantiateSel) {\n for (var i = 0, copy = []; i < events.length; ++i) {\n var event = events[i];\n if (event.ranges) {\n copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event);\n continue;\n }\n var changes = event.changes, newChanges = [];\n copy.push({changes: newChanges});\n for (var j = 0; j < changes.length; ++j) {\n var change = changes[j], m;\n newChanges.push({from: change.from, to: change.to, text: change.text});\n if (newGroup) for (var prop in change) if (m = prop.match(/^spans_(\\d+)$/)) {\n if (indexOf(newGroup, Number(m[1])) > -1) {\n lst(newChanges)[prop] = change[prop];\n delete change[prop];\n }\n }\n }\n }\n return copy;\n }\n\n // Rebasing/resetting history to deal with externally-sourced changes\n\n function rebaseHistSelSingle(pos, from, to, diff) {\n if (to < pos.line) {\n pos.line += diff;\n } else if (from < pos.line) {\n pos.line = from;\n pos.ch = 0;\n }\n }\n\n // Tries to rebase an array of history events given a change in the\n // document. If the change touches the same lines as the event, the\n // event, and everything 'behind' it, is discarded. If the change is\n // before the event, the event's positions are updated. Uses a\n // copy-on-write scheme for the positions, to avoid having to\n // reallocate them all on every rebase, but also avoid problems with\n // shared position objects being unsafely updated.\n function rebaseHistArray(array, from, to, diff) {\n for (var i = 0; i < array.length; ++i) {\n var sub = array[i], ok = true;\n if (sub.ranges) {\n if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true; }\n for (var j = 0; j < sub.ranges.length; j++) {\n rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff);\n rebaseHistSelSingle(sub.ranges[j].head, from, to, diff);\n }\n continue;\n }\n for (var j = 0; j < sub.changes.length; ++j) {\n var cur = sub.changes[j];\n if (to < cur.from.line) {\n cur.from = Pos(cur.from.line + diff, cur.from.ch);\n cur.to = Pos(cur.to.line + diff, cur.to.ch);\n } else if (from <= cur.to.line) {\n ok = false;\n break;\n }\n }\n if (!ok) {\n array.splice(0, i + 1);\n i = 0;\n }\n }\n }\n\n function rebaseHist(hist, change) {\n var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1;\n rebaseHistArray(hist.done, from, to, diff);\n rebaseHistArray(hist.undone, from, to, diff);\n }\n\n // EVENT UTILITIES\n\n // Due to the fact that we still support jurassic IE versions, some\n // compatibility wrappers are needed.\n\n var e_preventDefault = CodeMirror.e_preventDefault = function(e) {\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n };\n var e_stopPropagation = CodeMirror.e_stopPropagation = function(e) {\n if (e.stopPropagation) e.stopPropagation();\n else e.cancelBubble = true;\n };\n function e_defaultPrevented(e) {\n return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false;\n }\n var e_stop = CodeMirror.e_stop = function(e) {e_preventDefault(e); e_stopPropagation(e);};\n\n function e_target(e) {return e.target || e.srcElement;}\n function e_button(e) {\n var b = e.which;\n if (b == null) {\n if (e.button & 1) b = 1;\n else if (e.button & 2) b = 3;\n else if (e.button & 4) b = 2;\n }\n if (mac && e.ctrlKey && b == 1) b = 3;\n return b;\n }\n\n // EVENT HANDLING\n\n // Lightweight event framework. on/off also work on DOM nodes,\n // registering native DOM handlers.\n\n var on = CodeMirror.on = function(emitter, type, f) {\n if (emitter.addEventListener)\n emitter.addEventListener(type, f, false);\n else if (emitter.attachEvent)\n emitter.attachEvent(\"on\" + type, f);\n else {\n var map = emitter._handlers || (emitter._handlers = {});\n var arr = map[type] || (map[type] = []);\n arr.push(f);\n }\n };\n\n var off = CodeMirror.off = function(emitter, type, f) {\n if (emitter.removeEventListener)\n emitter.removeEventListener(type, f, false);\n else if (emitter.detachEvent)\n emitter.detachEvent(\"on\" + type, f);\n else {\n var arr = emitter._handlers && emitter._handlers[type];\n if (!arr) return;\n for (var i = 0; i < arr.length; ++i)\n if (arr[i] == f) { arr.splice(i, 1); break; }\n }\n };\n\n var signal = CodeMirror.signal = function(emitter, type /*, values...*/) {\n var arr = emitter._handlers && emitter._handlers[type];\n if (!arr) return;\n var args = Array.prototype.slice.call(arguments, 2);\n for (var i = 0; i < arr.length; ++i) arr[i].apply(null, args);\n };\n\n var orphanDelayedCallbacks = null;\n\n // Often, we want to signal events at a point where we are in the\n // middle of some work, but don't want the handler to start calling\n // other methods on the editor, which might be in an inconsistent\n // state or simply not expect any other events to happen.\n // signalLater looks whether there are any handlers, and schedules\n // them to be executed when the last operation ends, or, if no\n // operation is active, when a timeout fires.\n function signalLater(emitter, type /*, values...*/) {\n var arr = emitter._handlers && emitter._handlers[type];\n if (!arr) return;\n var args = Array.prototype.slice.call(arguments, 2), list;\n if (operationGroup) {\n list = operationGroup.delayedCallbacks;\n } else if (orphanDelayedCallbacks) {\n list = orphanDelayedCallbacks;\n } else {\n list = orphanDelayedCallbacks = [];\n setTimeout(fireOrphanDelayed, 0);\n }\n function bnd(f) {return function(){f.apply(null, args);};};\n for (var i = 0; i < arr.length; ++i)\n list.push(bnd(arr[i]));\n }\n\n function fireOrphanDelayed() {\n var delayed = orphanDelayedCallbacks;\n orphanDelayedCallbacks = null;\n for (var i = 0; i < delayed.length; ++i) delayed[i]();\n }\n\n // The DOM events that CodeMirror handles can be overridden by\n // registering a (non-DOM) handler on the editor for the event name,\n // and preventDefault-ing the event in that handler.\n function signalDOMEvent(cm, e, override) {\n if (typeof e == \"string\")\n e = {type: e, preventDefault: function() { this.defaultPrevented = true; }};\n signal(cm, override || e.type, cm, e);\n return e_defaultPrevented(e) || e.codemirrorIgnore;\n }\n\n function signalCursorActivity(cm) {\n var arr = cm._handlers && cm._handlers.cursorActivity;\n if (!arr) return;\n var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []);\n for (var i = 0; i < arr.length; ++i) if (indexOf(set, arr[i]) == -1)\n set.push(arr[i]);\n }\n\n function hasHandler(emitter, type) {\n var arr = emitter._handlers && emitter._handlers[type];\n return arr && arr.length > 0;\n }\n\n // Add on and off methods to a constructor's prototype, to make\n // registering events on such objects more convenient.\n function eventMixin(ctor) {\n ctor.prototype.on = function(type, f) {on(this, type, f);};\n ctor.prototype.off = function(type, f) {off(this, type, f);};\n }\n\n // MISC UTILITIES\n\n // Number of pixels added to scroller and sizer to hide scrollbar\n var scrollerGap = 30;\n\n // Returned or thrown by various protocols to signal 'I'm not\n // handling this'.\n var Pass = CodeMirror.Pass = {toString: function(){return \"CodeMirror.Pass\";}};\n\n // Reused option objects for setSelection & friends\n var sel_dontScroll = {scroll: false}, sel_mouse = {origin: \"*mouse\"}, sel_move = {origin: \"+move\"};\n\n function Delayed() {this.id = null;}\n Delayed.prototype.set = function(ms, f) {\n clearTimeout(this.id);\n this.id = setTimeout(f, ms);\n };\n\n // Counts the column offset in a string, taking tabs into account.\n // Used mostly to find indentation.\n var countColumn = CodeMirror.countColumn = function(string, end, tabSize, startIndex, startValue) {\n if (end == null) {\n end = string.search(/[^\\s\\u00a0]/);\n if (end == -1) end = string.length;\n }\n for (var i = startIndex || 0, n = startValue || 0;;) {\n var nextTab = string.indexOf(\"\\t\", i);\n if (nextTab < 0 || nextTab >= end)\n return n + (end - i);\n n += nextTab - i;\n n += tabSize - (n % tabSize);\n i = nextTab + 1;\n }\n };\n\n // The inverse of countColumn -- find the offset that corresponds to\n // a particular column.\n function findColumn(string, goal, tabSize) {\n for (var pos = 0, col = 0;;) {\n var nextTab = string.indexOf(\"\\t\", pos);\n if (nextTab == -1) nextTab = string.length;\n var skipped = nextTab - pos;\n if (nextTab == string.length || col + skipped >= goal)\n return pos + Math.min(skipped, goal - col);\n col += nextTab - pos;\n col += tabSize - (col % tabSize);\n pos = nextTab + 1;\n if (col >= goal) return pos;\n }\n }\n\n var spaceStrs = [\"\"];\n function spaceStr(n) {\n while (spaceStrs.length <= n)\n spaceStrs.push(lst(spaceStrs) + \" \");\n return spaceStrs[n];\n }\n\n function lst(arr) { return arr[arr.length-1]; }\n\n var selectInput = function(node) { node.select(); };\n if (ios) // Mobile Safari apparently has a bug where select() is broken.\n selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length; };\n else if (ie) // Suppress mysterious IE10 errors\n selectInput = function(node) { try { node.select(); } catch(_e) {} };\n\n function indexOf(array, elt) {\n for (var i = 0; i < array.length; ++i)\n if (array[i] == elt) return i;\n return -1;\n }\n function map(array, f) {\n var out = [];\n for (var i = 0; i < array.length; i++) out[i] = f(array[i], i);\n return out;\n }\n\n function createObj(base, props) {\n var inst;\n if (Object.create) {\n inst = Object.create(base);\n } else {\n var ctor = function() {};\n ctor.prototype = base;\n inst = new ctor();\n }\n if (props) copyObj(props, inst);\n return inst;\n };\n\n function copyObj(obj, target, overwrite) {\n if (!target) target = {};\n for (var prop in obj)\n if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop)))\n target[prop] = obj[prop];\n return target;\n }\n\n function bind(f) {\n var args = Array.prototype.slice.call(arguments, 1);\n return function(){return f.apply(null, args);};\n }\n\n var nonASCIISingleCaseWordChar = /[\\u00df\\u0590-\\u05f4\\u0600-\\u06ff\\u3040-\\u309f\\u30a0-\\u30ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\uac00-\\ud7af]/;\n var isWordCharBasic = CodeMirror.isWordChar = function(ch) {\n return /\\w/.test(ch) || ch > \"\\x80\" &&\n (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch));\n };\n function isWordChar(ch, helper) {\n if (!helper) return isWordCharBasic(ch);\n if (helper.source.indexOf(\"\\\\w\") > -1 && isWordCharBasic(ch)) return true;\n return helper.test(ch);\n }\n\n function isEmpty(obj) {\n for (var n in obj) if (obj.hasOwnProperty(n) && obj[n]) return false;\n return true;\n }\n\n // Extending unicode characters. A series of a non-extending char +\n // any number of extending chars is treated as a single unit as far\n // as editing and measuring is concerned. This is not fully correct,\n // since some scripts/fonts/browsers also treat other configurations\n // of code points as a group.\n var extendingChars = /[\\u0300-\\u036f\\u0483-\\u0489\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u065e\\u0670\\u06d6-\\u06dc\\u06de-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0900-\\u0902\\u093c\\u0941-\\u0948\\u094d\\u0951-\\u0955\\u0962\\u0963\\u0981\\u09bc\\u09be\\u09c1-\\u09c4\\u09cd\\u09d7\\u09e2\\u09e3\\u0a01\\u0a02\\u0a3c\\u0a41\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a70\\u0a71\\u0a75\\u0a81\\u0a82\\u0abc\\u0ac1-\\u0ac5\\u0ac7\\u0ac8\\u0acd\\u0ae2\\u0ae3\\u0b01\\u0b3c\\u0b3e\\u0b3f\\u0b41-\\u0b44\\u0b4d\\u0b56\\u0b57\\u0b62\\u0b63\\u0b82\\u0bbe\\u0bc0\\u0bcd\\u0bd7\\u0c3e-\\u0c40\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0cbc\\u0cbf\\u0cc2\\u0cc6\\u0ccc\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0d3e\\u0d41-\\u0d44\\u0d4d\\u0d57\\u0d62\\u0d63\\u0dca\\u0dcf\\u0dd2-\\u0dd4\\u0dd6\\u0ddf\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0eb1\\u0eb4-\\u0eb9\\u0ebb\\u0ebc\\u0ec8-\\u0ecd\\u0f18\\u0f19\\u0f35\\u0f37\\u0f39\\u0f71-\\u0f7e\\u0f80-\\u0f84\\u0f86\\u0f87\\u0f90-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102d-\\u1030\\u1032-\\u1037\\u1039\\u103a\\u103d\\u103e\\u1058\\u1059\\u105e-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108d\\u109d\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b7-\\u17bd\\u17c6\\u17c9-\\u17d3\\u17dd\\u180b-\\u180d\\u18a9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193b\\u1a17\\u1a18\\u1a56\\u1a58-\\u1a5e\\u1a60\\u1a62\\u1a65-\\u1a6c\\u1a73-\\u1a7c\\u1a7f\\u1b00-\\u1b03\\u1b34\\u1b36-\\u1b3a\\u1b3c\\u1b42\\u1b6b-\\u1b73\\u1b80\\u1b81\\u1ba2-\\u1ba5\\u1ba8\\u1ba9\\u1c2c-\\u1c33\\u1c36\\u1c37\\u1cd0-\\u1cd2\\u1cd4-\\u1ce0\\u1ce2-\\u1ce8\\u1ced\\u1dc0-\\u1de6\\u1dfd-\\u1dff\\u200c\\u200d\\u20d0-\\u20f0\\u2cef-\\u2cf1\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua66f-\\ua672\\ua67c\\ua67d\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua825\\ua826\\ua8c4\\ua8e0-\\ua8f1\\ua926-\\ua92d\\ua947-\\ua951\\ua980-\\ua982\\ua9b3\\ua9b6-\\ua9b9\\ua9bc\\uaa29-\\uaa2e\\uaa31\\uaa32\\uaa35\\uaa36\\uaa43\\uaa4c\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uabe5\\uabe8\\uabed\\udc00-\\udfff\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe26\\uff9e\\uff9f]/;\n function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch); }\n\n // DOM UTILITIES\n\n function elt(tag, content, className, style) {\n var e = document.createElement(tag);\n if (className) e.className = className;\n if (style) e.style.cssText = style;\n if (typeof content == \"string\") e.appendChild(document.createTextNode(content));\n else if (content) for (var i = 0; i < content.length; ++i) e.appendChild(content[i]);\n return e;\n }\n\n var range;\n if (document.createRange) range = function(node, start, end) {\n var r = document.createRange();\n r.setEnd(node, end);\n r.setStart(node, start);\n return r;\n };\n else range = function(node, start, end) {\n var r = document.body.createTextRange();\n try { r.moveToElementText(node.parentNode); }\n catch(e) { return r; }\n r.collapse(true);\n r.moveEnd(\"character\", end);\n r.moveStart(\"character\", start);\n return r;\n };\n\n function removeChildren(e) {\n for (var count = e.childNodes.length; count > 0; --count)\n e.removeChild(e.firstChild);\n return e;\n }\n\n function removeChildrenAndAdd(parent, e) {\n return removeChildren(parent).appendChild(e);\n }\n\n var contains = CodeMirror.contains = function(parent, child) {\n if (parent.contains)\n return parent.contains(child);\n while (child = child.parentNode) {\n if (child.nodeType == 11) child = child.host;\n if (child == parent) return true;\n }\n };\n\n function activeElt() { return document.activeElement; }\n // Older versions of IE throws unspecified error when touching\n // document.activeElement in some cases (during loading, in iframe)\n if (ie && ie_version < 11) activeElt = function() {\n try { return document.activeElement; }\n catch(e) { return document.body; }\n };\n\n function classTest(cls) { return new RegExp(\"(^|\\\\s)\" + cls + \"(?:$|\\\\s)\\\\s*\"); }\n var rmClass = CodeMirror.rmClass = function(node, cls) {\n var current = node.className;\n var match = classTest(cls).exec(current);\n if (match) {\n var after = current.slice(match.index + match[0].length);\n node.className = current.slice(0, match.index) + (after ? match[1] + after : \"\");\n }\n };\n var addClass = CodeMirror.addClass = function(node, cls) {\n var current = node.className;\n if (!classTest(cls).test(current)) node.className += (current ? \" \" : \"\") + cls;\n };\n function joinClasses(a, b) {\n var as = a.split(\" \");\n for (var i = 0; i < as.length; i++)\n if (as[i] && !classTest(as[i]).test(b)) b += \" \" + as[i];\n return b;\n }\n\n // WINDOW-WIDE EVENTS\n\n // These must be handled carefully, because naively registering a\n // handler for each editor will cause the editors to never be\n // garbage collected.\n\n function forEachCodeMirror(f) {\n if (!document.body.getElementsByClassName) return;\n var byClass = document.body.getElementsByClassName(\"CodeMirror\");\n for (var i = 0; i < byClass.length; i++) {\n var cm = byClass[i].CodeMirror;\n if (cm) f(cm);\n }\n }\n\n var globalsRegistered = false;\n function ensureGlobalHandlers() {\n if (globalsRegistered) return;\n registerGlobalHandlers();\n globalsRegistered = true;\n }\n function registerGlobalHandlers() {\n // When the window resizes, we need to refresh active editors.\n var resizeTimer;\n on(window, \"resize\", function() {\n if (resizeTimer == null) resizeTimer = setTimeout(function() {\n resizeTimer = null;\n forEachCodeMirror(onResize);\n }, 100);\n });\n // When the window loses focus, we want to show the editor as blurred\n on(window, \"blur\", function() {\n forEachCodeMirror(onBlur);\n });\n }\n\n // FEATURE DETECTION\n\n // Detect drag-and-drop\n var dragAndDrop = function() {\n // There is *some* kind of drag-and-drop support in IE6-8, but I\n // couldn't get it to work yet.\n if (ie && ie_version < 9) return false;\n var div = elt('div');\n return \"draggable\" in div || \"dragDrop\" in div;\n }();\n\n var zwspSupported;\n function zeroWidthElement(measure) {\n if (zwspSupported == null) {\n var test = elt(\"span\", \"\\u200b\");\n removeChildrenAndAdd(measure, elt(\"span\", [test, document.createTextNode(\"x\")]));\n if (measure.firstChild.offsetHeight != 0)\n zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8);\n }\n if (zwspSupported) return elt(\"span\", \"\\u200b\");\n else return elt(\"span\", \"\\u00a0\", null, \"display: inline-block; width: 1px; margin-right: -1px\");\n }\n\n // Feature-detect IE's crummy client rect reporting for bidi text\n var badBidiRects;\n function hasBadBidiRects(measure) {\n if (badBidiRects != null) return badBidiRects;\n var txt = removeChildrenAndAdd(measure, document.createTextNode(\"A\\u062eA\"));\n var r0 = range(txt, 0, 1).getBoundingClientRect();\n if (!r0 || r0.left == r0.right) return false; // Safari returns null in some cases (#2780)\n var r1 = range(txt, 1, 2).getBoundingClientRect();\n return badBidiRects = (r1.right - r0.right < 3);\n }\n\n // See if \"\".split is the broken IE version, if so, provide an\n // alternative way to split lines.\n var splitLines = CodeMirror.splitLines = \"\\n\\nb\".split(/\\n/).length != 3 ? function(string) {\n var pos = 0, result = [], l = string.length;\n while (pos <= l) {\n var nl = string.indexOf(\"\\n\", pos);\n if (nl == -1) nl = string.length;\n var line = string.slice(pos, string.charAt(nl - 1) == \"\\r\" ? nl - 1 : nl);\n var rt = line.indexOf(\"\\r\");\n if (rt != -1) {\n result.push(line.slice(0, rt));\n pos += rt + 1;\n } else {\n result.push(line);\n pos = nl + 1;\n }\n }\n return result;\n } : function(string){return string.split(/\\r\\n?|\\n/);};\n\n var hasSelection = window.getSelection ? function(te) {\n try { return te.selectionStart != te.selectionEnd; }\n catch(e) { return false; }\n } : function(te) {\n try {var range = te.ownerDocument.selection.createRange();}\n catch(e) {}\n if (!range || range.parentElement() != te) return false;\n return range.compareEndPoints(\"StartToEnd\", range) != 0;\n };\n\n var hasCopyEvent = (function() {\n var e = elt(\"div\");\n if (\"oncopy\" in e) return true;\n e.setAttribute(\"oncopy\", \"return;\");\n return typeof e.oncopy == \"function\";\n })();\n\n var badZoomedRects = null;\n function hasBadZoomedRects(measure) {\n if (badZoomedRects != null) return badZoomedRects;\n var node = removeChildrenAndAdd(measure, elt(\"span\", \"x\"));\n var normal = node.getBoundingClientRect();\n var fromRange = range(node, 0, 1).getBoundingClientRect();\n return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1;\n }\n\n // KEY NAMES\n\n var keyNames = {3: \"Enter\", 8: \"Backspace\", 9: \"Tab\", 13: \"Enter\", 16: \"Shift\", 17: \"Ctrl\", 18: \"Alt\",\n 19: \"Pause\", 20: \"CapsLock\", 27: \"Esc\", 32: \"Space\", 33: \"PageUp\", 34: \"PageDown\", 35: \"End\",\n 36: \"Home\", 37: \"Left\", 38: \"Up\", 39: \"Right\", 40: \"Down\", 44: \"PrintScrn\", 45: \"Insert\",\n 46: \"Delete\", 59: \";\", 61: \"=\", 91: \"Mod\", 92: \"Mod\", 93: \"Mod\", 107: \"=\", 109: \"-\", 127: \"Delete\",\n 173: \"-\", 186: \";\", 187: \"=\", 188: \",\", 189: \"-\", 190: \".\", 191: \"/\", 192: \"`\", 219: \"[\", 220: \"\\\\\",\n 221: \"]\", 222: \"'\", 63232: \"Up\", 63233: \"Down\", 63234: \"Left\", 63235: \"Right\", 63272: \"Delete\",\n 63273: \"Home\", 63275: \"End\", 63276: \"PageUp\", 63277: \"PageDown\", 63302: \"Insert\"};\n CodeMirror.keyNames = keyNames;\n (function() {\n // Number keys\n for (var i = 0; i < 10; i++) keyNames[i + 48] = keyNames[i + 96] = String(i);\n // Alphabetic keys\n for (var i = 65; i <= 90; i++) keyNames[i] = String.fromCharCode(i);\n // Function keys\n for (var i = 1; i <= 12; i++) keyNames[i + 111] = keyNames[i + 63235] = \"F\" + i;\n })();\n\n // BIDI HELPERS\n\n function iterateBidiSections(order, from, to, f) {\n if (!order) return f(from, to, \"ltr\");\n var found = false;\n for (var i = 0; i < order.length; ++i) {\n var part = order[i];\n if (part.from < to && part.to > from || from == to && part.to == from) {\n f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? \"rtl\" : \"ltr\");\n found = true;\n }\n }\n if (!found) f(from, to, \"ltr\");\n }\n\n function bidiLeft(part) { return part.level % 2 ? part.to : part.from; }\n function bidiRight(part) { return part.level % 2 ? part.from : part.to; }\n\n function lineLeft(line) { var order = getOrder(line); return order ? bidiLeft(order[0]) : 0; }\n function lineRight(line) {\n var order = getOrder(line);\n if (!order) return line.text.length;\n return bidiRight(lst(order));\n }\n\n function lineStart(cm, lineN) {\n var line = getLine(cm.doc, lineN);\n var visual = visualLine(line);\n if (visual != line) lineN = lineNo(visual);\n var order = getOrder(visual);\n var ch = !order ? 0 : order[0].level % 2 ? lineRight(visual) : lineLeft(visual);\n return Pos(lineN, ch);\n }\n function lineEnd(cm, lineN) {\n var merged, line = getLine(cm.doc, lineN);\n while (merged = collapsedSpanAtEnd(line)) {\n line = merged.find(1, true).line;\n lineN = null;\n }\n var order = getOrder(line);\n var ch = !order ? line.text.length : order[0].level % 2 ? lineLeft(line) : lineRight(line);\n return Pos(lineN == null ? lineNo(line) : lineN, ch);\n }\n function lineStartSmart(cm, pos) {\n var start = lineStart(cm, pos.line);\n var line = getLine(cm.doc, start.line);\n var order = getOrder(line);\n if (!order || order[0].level == 0) {\n var firstNonWS = Math.max(0, line.text.search(/\\S/));\n var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch;\n return Pos(start.line, inWS ? 0 : firstNonWS);\n }\n return start;\n }\n\n function compareBidiLevel(order, a, b) {\n var linedir = order[0].level;\n if (a == linedir) return true;\n if (b == linedir) return false;\n return a < b;\n }\n var bidiOther;\n function getBidiPartAt(order, pos) {\n bidiOther = null;\n for (var i = 0, found; i < order.length; ++i) {\n var cur = order[i];\n if (cur.from < pos && cur.to > pos) return i;\n if ((cur.from == pos || cur.to == pos)) {\n if (found == null) {\n found = i;\n } else if (compareBidiLevel(order, cur.level, order[found].level)) {\n if (cur.from != cur.to) bidiOther = found;\n return i;\n } else {\n if (cur.from != cur.to) bidiOther = i;\n return found;\n }\n }\n }\n return found;\n }\n\n function moveInLine(line, pos, dir, byUnit) {\n if (!byUnit) return pos + dir;\n do pos += dir;\n while (pos > 0 && isExtendingChar(line.text.charAt(pos)));\n return pos;\n }\n\n // This is needed in order to move 'visually' through bi-directional\n // text -- i.e., pressing left should make the cursor go left, even\n // when in RTL text. The tricky part is the 'jumps', where RTL and\n // LTR text touch each other. This often requires the cursor offset\n // to move more than one unit, in order to visually move one unit.\n function moveVisually(line, start, dir, byUnit) {\n var bidi = getOrder(line);\n if (!bidi) return moveLogically(line, start, dir, byUnit);\n var pos = getBidiPartAt(bidi, start), part = bidi[pos];\n var target = moveInLine(line, start, part.level % 2 ? -dir : dir, byUnit);\n\n for (;;) {\n if (target > part.from && target < part.to) return target;\n if (target == part.from || target == part.to) {\n if (getBidiPartAt(bidi, target) == pos) return target;\n part = bidi[pos += dir];\n return (dir > 0) == part.level % 2 ? part.to : part.from;\n } else {\n part = bidi[pos += dir];\n if (!part) return null;\n if ((dir > 0) == part.level % 2)\n target = moveInLine(line, part.to, -1, byUnit);\n else\n target = moveInLine(line, part.from, 1, byUnit);\n }\n }\n }\n\n function moveLogically(line, start, dir, byUnit) {\n var target = start + dir;\n if (byUnit) while (target > 0 && isExtendingChar(line.text.charAt(target))) target += dir;\n return target < 0 || target > line.text.length ? null : target;\n }\n\n // Bidirectional ordering algorithm\n // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm\n // that this (partially) implements.\n\n // One-char codes used for character types:\n // L (L): Left-to-Right\n // R (R): Right-to-Left\n // r (AL): Right-to-Left Arabic\n // 1 (EN): European Number\n // + (ES): European Number Separator\n // % (ET): European Number Terminator\n // n (AN): Arabic Number\n // , (CS): Common Number Separator\n // m (NSM): Non-Spacing Mark\n // b (BN): Boundary Neutral\n // s (B): Paragraph Separator\n // t (S): Segment Separator\n // w (WS): Whitespace\n // N (ON): Other Neutrals\n\n // Returns null if characters are ordered as they appear\n // (left-to-right), or an array of sections ({from, to, level}\n // objects) in the order in which they occur visually.\n var bidiOrdering = (function() {\n // Character types for codepoints 0 to 0xff\n var lowTypes = \"bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN\";\n // Character types for codepoints 0x600 to 0x6ff\n var arabicTypes = \"rrrrrrrrrrrr,rNNmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmrrrrrrrnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmNmmmm\";\n function charType(code) {\n if (code <= 0xf7) return lowTypes.charAt(code);\n else if (0x590 <= code && code <= 0x5f4) return \"R\";\n else if (0x600 <= code && code <= 0x6ed) return arabicTypes.charAt(code - 0x600);\n else if (0x6ee <= code && code <= 0x8ac) return \"r\";\n else if (0x2000 <= code && code <= 0x200b) return \"w\";\n else if (code == 0x200c) return \"b\";\n else return \"L\";\n }\n\n var bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/;\n var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/;\n // Browsers seem to always treat the boundaries of block elements as being L.\n var outerType = \"L\";\n\n function BidiSpan(level, from, to) {\n this.level = level;\n this.from = from; this.to = to;\n }\n\n return function(str) {\n if (!bidiRE.test(str)) return false;\n var len = str.length, types = [];\n for (var i = 0, type; i < len; ++i)\n types.push(type = charType(str.charCodeAt(i)));\n\n // W1. Examine each non-spacing mark (NSM) in the level run, and\n // change the type of the NSM to the type of the previous\n // character. If the NSM is at the start of the level run, it will\n // get the type of sor.\n for (var i = 0, prev = outerType; i < len; ++i) {\n var type = types[i];\n if (type == \"m\") types[i] = prev;\n else prev = type;\n }\n\n // W2. Search backwards from each instance of a European number\n // until the first strong type (R, L, AL, or sor) is found. If an\n // AL is found, change the type of the European number to Arabic\n // number.\n // W3. Change all ALs to R.\n for (var i = 0, cur = outerType; i < len; ++i) {\n var type = types[i];\n if (type == \"1\" && cur == \"r\") types[i] = \"n\";\n else if (isStrong.test(type)) { cur = type; if (type == \"r\") types[i] = \"R\"; }\n }\n\n // W4. A single European separator between two European numbers\n // changes to a European number. A single common separator between\n // two numbers of the same type changes to that type.\n for (var i = 1, prev = types[0]; i < len - 1; ++i) {\n var type = types[i];\n if (type == \"+\" && prev == \"1\" && types[i+1] == \"1\") types[i] = \"1\";\n else if (type == \",\" && prev == types[i+1] &&\n (prev == \"1\" || prev == \"n\")) types[i] = prev;\n prev = type;\n }\n\n // W5. A sequence of European terminators adjacent to European\n // numbers changes to all European numbers.\n // W6. Otherwise, separators and terminators change to Other\n // Neutral.\n for (var i = 0; i < len; ++i) {\n var type = types[i];\n if (type == \",\") types[i] = \"N\";\n else if (type == \"%\") {\n for (var end = i + 1; end < len && types[end] == \"%\"; ++end) {}\n var replace = (i && types[i-1] == \"!\") || (end < len && types[end] == \"1\") ? \"1\" : \"N\";\n for (var j = i; j < end; ++j) types[j] = replace;\n i = end - 1;\n }\n }\n\n // W7. Search backwards from each instance of a European number\n // until the first strong type (R, L, or sor) is found. If an L is\n // found, then change the type of the European number to L.\n for (var i = 0, cur = outerType; i < len; ++i) {\n var type = types[i];\n if (cur == \"L\" && type == \"1\") types[i] = \"L\";\n else if (isStrong.test(type)) cur = type;\n }\n\n // N1. A sequence of neutrals takes the direction of the\n // surrounding strong text if the text on both sides has the same\n // direction. European and Arabic numbers act as if they were R in\n // terms of their influence on neutrals. Start-of-level-run (sor)\n // and end-of-level-run (eor) are used at level run boundaries.\n // N2. Any remaining neutrals take the embedding direction.\n for (var i = 0; i < len; ++i) {\n if (isNeutral.test(types[i])) {\n for (var end = i + 1; end < len && isNeutral.test(types[end]); ++end) {}\n var before = (i ? types[i-1] : outerType) == \"L\";\n var after = (end < len ? types[end] : outerType) == \"L\";\n var replace = before || after ? \"L\" : \"R\";\n for (var j = i; j < end; ++j) types[j] = replace;\n i = end - 1;\n }\n }\n\n // Here we depart from the documented algorithm, in order to avoid\n // building up an actual levels array. Since there are only three\n // levels (0, 1, 2) in an implementation that doesn't take\n // explicit embedding into account, we can build up the order on\n // the fly, without following the level-based algorithm.\n var order = [], m;\n for (var i = 0; i < len;) {\n if (countsAsLeft.test(types[i])) {\n var start = i;\n for (++i; i < len && countsAsLeft.test(types[i]); ++i) {}\n order.push(new BidiSpan(0, start, i));\n } else {\n var pos = i, at = order.length;\n for (++i; i < len && types[i] != \"L\"; ++i) {}\n for (var j = pos; j < i;) {\n if (countsAsNum.test(types[j])) {\n if (pos < j) order.splice(at, 0, new BidiSpan(1, pos, j));\n var nstart = j;\n for (++j; j < i && countsAsNum.test(types[j]); ++j) {}\n order.splice(at, 0, new BidiSpan(2, nstart, j));\n pos = j;\n } else ++j;\n }\n if (pos < i) order.splice(at, 0, new BidiSpan(1, pos, i));\n }\n }\n if (order[0].level == 1 && (m = str.match(/^\\s+/))) {\n order[0].from = m[0].length;\n order.unshift(new BidiSpan(0, 0, m[0].length));\n }\n if (lst(order).level == 1 && (m = str.match(/\\s+$/))) {\n lst(order).to -= m[0].length;\n order.push(new BidiSpan(0, len - m[0].length, len));\n }\n if (order[0].level != lst(order).level)\n order.push(new BidiSpan(order[0].level, len, len));\n\n return order;\n };\n })();\n\n // THE END\n\n CodeMirror.version = \"4.13.0\";\n\n return CodeMirror;\n});\n\n},{}],11:[function(require,module,exports){\n// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n// TODO actually recognize syntax of TypeScript constructs\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.defineMode(\"javascript\", function(config, parserConfig) {\n var indentUnit = config.indentUnit;\n var statementIndent = parserConfig.statementIndent;\n var jsonldMode = parserConfig.jsonld;\n var jsonMode = parserConfig.json || jsonldMode;\n var isTS = parserConfig.typescript;\n var wordRE = parserConfig.wordCharacters || /[\\w$\\xa1-\\uffff]/;\n\n // Tokenizer\n\n var keywords = function(){\n function kw(type) {return {type: type, style: \"keyword\"};}\n var A = kw(\"keyword a\"), B = kw(\"keyword b\"), C = kw(\"keyword c\");\n var operator = kw(\"operator\"), atom = {type: \"atom\", style: \"atom\"};\n\n var jsKeywords = {\n \"if\": kw(\"if\"), \"while\": A, \"with\": A, \"else\": B, \"do\": B, \"try\": B, \"finally\": B,\n \"return\": C, \"break\": C, \"continue\": C, \"new\": C, \"delete\": C, \"throw\": C, \"debugger\": C,\n \"var\": kw(\"var\"), \"const\": kw(\"var\"), \"let\": kw(\"var\"),\n \"function\": kw(\"function\"), \"catch\": kw(\"catch\"),\n \"for\": kw(\"for\"), \"switch\": kw(\"switch\"), \"case\": kw(\"case\"), \"default\": kw(\"default\"),\n \"in\": operator, \"typeof\": operator, \"instanceof\": operator,\n \"true\": atom, \"false\": atom, \"null\": atom, \"undefined\": atom, \"NaN\": atom, \"Infinity\": atom,\n \"this\": kw(\"this\"), \"module\": kw(\"module\"), \"class\": kw(\"class\"), \"super\": kw(\"atom\"),\n \"yield\": C, \"export\": kw(\"export\"), \"import\": kw(\"import\"), \"extends\": C\n };\n\n // Extend the 'normal' keywords with the TypeScript language extensions\n if (isTS) {\n var type = {type: \"variable\", style: \"variable-3\"};\n var tsKeywords = {\n // object-like things\n \"interface\": kw(\"interface\"),\n \"extends\": kw(\"extends\"),\n \"constructor\": kw(\"constructor\"),\n\n // scope modifiers\n \"public\": kw(\"public\"),\n \"private\": kw(\"private\"),\n \"protected\": kw(\"protected\"),\n \"static\": kw(\"static\"),\n\n // types\n \"string\": type, \"number\": type, \"bool\": type, \"any\": type\n };\n\n for (var attr in tsKeywords) {\n jsKeywords[attr] = tsKeywords[attr];\n }\n }\n\n return jsKeywords;\n }();\n\n var isOperatorChar = /[+\\-*&%=<>!?|~^]/;\n var isJsonldKeyword = /^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)\"/;\n\n function readRegexp(stream) {\n var escaped = false, next, inSet = false;\n while ((next = stream.next()) != null) {\n if (!escaped) {\n if (next == \"/\" && !inSet) return;\n if (next == \"[\") inSet = true;\n else if (inSet && next == \"]\") inSet = false;\n }\n escaped = !escaped && next == \"\\\\\";\n }\n }\n\n // Used as scratch variables to communicate multiple values without\n // consing up tons of objects.\n var type, content;\n function ret(tp, style, cont) {\n type = tp; content = cont;\n return style;\n }\n function tokenBase(stream, state) {\n var ch = stream.next();\n if (ch == '\"' || ch == \"'\") {\n state.tokenize = tokenString(ch);\n return state.tokenize(stream, state);\n } else if (ch == \".\" && stream.match(/^\\d+(?:[eE][+\\-]?\\d+)?/)) {\n return ret(\"number\", \"number\");\n } else if (ch == \".\" && stream.match(\"..\")) {\n return ret(\"spread\", \"meta\");\n } else if (/[\\[\\]{}\\(\\),;\\:\\.]/.test(ch)) {\n return ret(ch);\n } else if (ch == \"=\" && stream.eat(\">\")) {\n return ret(\"=>\", \"operator\");\n } else if (ch == \"0\" && stream.eat(/x/i)) {\n stream.eatWhile(/[\\da-f]/i);\n return ret(\"number\", \"number\");\n } else if (/\\d/.test(ch)) {\n stream.match(/^\\d*(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/);\n return ret(\"number\", \"number\");\n } else if (ch == \"/\") {\n if (stream.eat(\"*\")) {\n state.tokenize = tokenComment;\n return tokenComment(stream, state);\n } else if (stream.eat(\"/\")) {\n stream.skipToEnd();\n return ret(\"comment\", \"comment\");\n } else if (state.lastType == \"operator\" || state.lastType == \"keyword c\" ||\n state.lastType == \"sof\" || /^[\\[{}\\(,;:]$/.test(state.lastType)) {\n readRegexp(stream);\n stream.match(/^\\b(([gimyu])(?![gimyu]*\\2))+\\b/);\n return ret(\"regexp\", \"string-2\");\n } else {\n stream.eatWhile(isOperatorChar);\n return ret(\"operator\", \"operator\", stream.current());\n }\n } else if (ch == \"`\") {\n state.tokenize = tokenQuasi;\n return tokenQuasi(stream, state);\n } else if (ch == \"#\") {\n stream.skipToEnd();\n return ret(\"error\", \"error\");\n } else if (isOperatorChar.test(ch)) {\n stream.eatWhile(isOperatorChar);\n return ret(\"operator\", \"operator\", stream.current());\n } else if (wordRE.test(ch)) {\n stream.eatWhile(wordRE);\n var word = stream.current(), known = keywords.propertyIsEnumerable(word) && keywords[word];\n return (known && state.lastType != \".\") ? ret(known.type, known.style, word) :\n ret(\"variable\", \"variable\", word);\n }\n }\n\n function tokenString(quote) {\n return function(stream, state) {\n var escaped = false, next;\n if (jsonldMode && stream.peek() == \"@\" && stream.match(isJsonldKeyword)){\n state.tokenize = tokenBase;\n return ret(\"jsonld-keyword\", \"meta\");\n }\n while ((next = stream.next()) != null) {\n if (next == quote && !escaped) break;\n escaped = !escaped && next == \"\\\\\";\n }\n if (!escaped) state.tokenize = tokenBase;\n return ret(\"string\", \"string\");\n };\n }\n\n function tokenComment(stream, state) {\n var maybeEnd = false, ch;\n while (ch = stream.next()) {\n if (ch == \"/\" && maybeEnd) {\n state.tokenize = tokenBase;\n break;\n }\n maybeEnd = (ch == \"*\");\n }\n return ret(\"comment\", \"comment\");\n }\n\n function tokenQuasi(stream, state) {\n var escaped = false, next;\n while ((next = stream.next()) != null) {\n if (!escaped && (next == \"`\" || next == \"$\" && stream.eat(\"{\"))) {\n state.tokenize = tokenBase;\n break;\n }\n escaped = !escaped && next == \"\\\\\";\n }\n return ret(\"quasi\", \"string-2\", stream.current());\n }\n\n var brackets = \"([{}])\";\n // This is a crude lookahead trick to try and notice that we're\n // parsing the argument patterns for a fat-arrow function before we\n // actually hit the arrow token. It only works if the arrow is on\n // the same line as the arguments and there's no strange noise\n // (comments) in between. Fallback is to only notice when we hit the\n // arrow, and not declare the arguments as locals for the arrow\n // body.\n function findFatArrow(stream, state) {\n if (state.fatArrowAt) state.fatArrowAt = null;\n var arrow = stream.string.indexOf(\"=>\", stream.start);\n if (arrow < 0) return;\n\n var depth = 0, sawSomething = false;\n for (var pos = arrow - 1; pos >= 0; --pos) {\n var ch = stream.string.charAt(pos);\n var bracket = brackets.indexOf(ch);\n if (bracket >= 0 && bracket < 3) {\n if (!depth) { ++pos; break; }\n if (--depth == 0) break;\n } else if (bracket >= 3 && bracket < 6) {\n ++depth;\n } else if (wordRE.test(ch)) {\n sawSomething = true;\n } else if (/[\"'\\/]/.test(ch)) {\n return;\n } else if (sawSomething && !depth) {\n ++pos;\n break;\n }\n }\n if (sawSomething && !depth) state.fatArrowAt = pos;\n }\n\n // Parser\n\n var atomicTypes = {\"atom\": true, \"number\": true, \"variable\": true, \"string\": true, \"regexp\": true, \"this\": true, \"jsonld-keyword\": true};\n\n function JSLexical(indented, column, type, align, prev, info) {\n this.indented = indented;\n this.column = column;\n this.type = type;\n this.prev = prev;\n this.info = info;\n if (align != null) this.align = align;\n }\n\n function inScope(state, varname) {\n for (var v = state.localVars; v; v = v.next)\n if (v.name == varname) return true;\n for (var cx = state.context; cx; cx = cx.prev) {\n for (var v = cx.vars; v; v = v.next)\n if (v.name == varname) return true;\n }\n }\n\n function parseJS(state, style, type, content, stream) {\n var cc = state.cc;\n // Communicate our context to the combinators.\n // (Less wasteful than consing up a hundred closures on every call.)\n cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc; cx.style = style;\n\n if (!state.lexical.hasOwnProperty(\"align\"))\n state.lexical.align = true;\n\n while(true) {\n var combinator = cc.length ? cc.pop() : jsonMode ? expression : statement;\n if (combinator(type, content)) {\n while(cc.length && cc[cc.length - 1].lex)\n cc.pop()();\n if (cx.marked) return cx.marked;\n if (type == \"variable\" && inScope(state, content)) return \"variable-2\";\n return style;\n }\n }\n }\n\n // Combinator utils\n\n var cx = {state: null, column: null, marked: null, cc: null};\n function pass() {\n for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]);\n }\n function cont() {\n pass.apply(null, arguments);\n return true;\n }\n function register(varname) {\n function inList(list) {\n for (var v = list; v; v = v.next)\n if (v.name == varname) return true;\n return false;\n }\n var state = cx.state;\n if (state.context) {\n cx.marked = \"def\";\n if (inList(state.localVars)) return;\n state.localVars = {name: varname, next: state.localVars};\n } else {\n if (inList(state.globalVars)) return;\n if (parserConfig.globalVars)\n state.globalVars = {name: varname, next: state.globalVars};\n }\n }\n\n // Combinators\n\n var defaultVars = {name: \"this\", next: {name: \"arguments\"}};\n function pushcontext() {\n cx.state.context = {prev: cx.state.context, vars: cx.state.localVars};\n cx.state.localVars = defaultVars;\n }\n function popcontext() {\n cx.state.localVars = cx.state.context.vars;\n cx.state.context = cx.state.context.prev;\n }\n function pushlex(type, info) {\n var result = function() {\n var state = cx.state, indent = state.indented;\n if (state.lexical.type == \"stat\") indent = state.lexical.indented;\n else for (var outer = state.lexical; outer && outer.type == \")\" && outer.align; outer = outer.prev)\n indent = outer.indented;\n state.lexical = new JSLexical(indent, cx.stream.column(), type, null, state.lexical, info);\n };\n result.lex = true;\n return result;\n }\n function poplex() {\n var state = cx.state;\n if (state.lexical.prev) {\n if (state.lexical.type == \")\")\n state.indented = state.lexical.indented;\n state.lexical = state.lexical.prev;\n }\n }\n poplex.lex = true;\n\n function expect(wanted) {\n function exp(type) {\n if (type == wanted) return cont();\n else if (wanted == \";\") return pass();\n else return cont(exp);\n };\n return exp;\n }\n\n function statement(type, value) {\n if (type == \"var\") return cont(pushlex(\"vardef\", value.length), vardef, expect(\";\"), poplex);\n if (type == \"keyword a\") return cont(pushlex(\"form\"), expression, statement, poplex);\n if (type == \"keyword b\") return cont(pushlex(\"form\"), statement, poplex);\n if (type == \"{\") return cont(pushlex(\"}\"), block, poplex);\n if (type == \";\") return cont();\n if (type == \"if\") {\n if (cx.state.lexical.info == \"else\" && cx.state.cc[cx.state.cc.length - 1] == poplex)\n cx.state.cc.pop()();\n return cont(pushlex(\"form\"), expression, statement, poplex, maybeelse);\n }\n if (type == \"function\") return cont(functiondef);\n if (type == \"for\") return cont(pushlex(\"form\"), forspec, statement, poplex);\n if (type == \"variable\") return cont(pushlex(\"stat\"), maybelabel);\n if (type == \"switch\") return cont(pushlex(\"form\"), expression, pushlex(\"}\", \"switch\"), expect(\"{\"),\n block, poplex, poplex);\n if (type == \"case\") return cont(expression, expect(\":\"));\n if (type == \"default\") return cont(expect(\":\"));\n if (type == \"catch\") return cont(pushlex(\"form\"), pushcontext, expect(\"(\"), funarg, expect(\")\"),\n statement, poplex, popcontext);\n if (type == \"module\") return cont(pushlex(\"form\"), pushcontext, afterModule, popcontext, poplex);\n if (type == \"class\") return cont(pushlex(\"form\"), className, poplex);\n if (type == \"export\") return cont(pushlex(\"form\"), afterExport, poplex);\n if (type == \"import\") return cont(pushlex(\"form\"), afterImport, poplex);\n return pass(pushlex(\"stat\"), expression, expect(\";\"), poplex);\n }\n function expression(type) {\n return expressionInner(type, false);\n }\n function expressionNoComma(type) {\n return expressionInner(type, true);\n }\n function expressionInner(type, noComma) {\n if (cx.state.fatArrowAt == cx.stream.start) {\n var body = noComma ? arrowBodyNoComma : arrowBody;\n if (type == \"(\") return cont(pushcontext, pushlex(\")\"), commasep(pattern, \")\"), poplex, expect(\"=>\"), body, popcontext);\n else if (type == \"variable\") return pass(pushcontext, pattern, expect(\"=>\"), body, popcontext);\n }\n\n var maybeop = noComma ? maybeoperatorNoComma : maybeoperatorComma;\n if (atomicTypes.hasOwnProperty(type)) return cont(maybeop);\n if (type == \"function\") return cont(functiondef, maybeop);\n if (type == \"keyword c\") return cont(noComma ? maybeexpressionNoComma : maybeexpression);\n if (type == \"(\") return cont(pushlex(\")\"), maybeexpression, comprehension, expect(\")\"), poplex, maybeop);\n if (type == \"operator\" || type == \"spread\") return cont(noComma ? expressionNoComma : expression);\n if (type == \"[\") return cont(pushlex(\"]\"), arrayLiteral, poplex, maybeop);\n if (type == \"{\") return contCommasep(objprop, \"}\", null, maybeop);\n if (type == \"quasi\") { return pass(quasi, maybeop); }\n return cont();\n }\n function maybeexpression(type) {\n if (type.match(/[;\\}\\)\\],]/)) return pass();\n return pass(expression);\n }\n function maybeexpressionNoComma(type) {\n if (type.match(/[;\\}\\)\\],]/)) return pass();\n return pass(expressionNoComma);\n }\n\n function maybeoperatorComma(type, value) {\n if (type == \",\") return cont(expression);\n return maybeoperatorNoComma(type, value, false);\n }\n function maybeoperatorNoComma(type, value, noComma) {\n var me = noComma == false ? maybeoperatorComma : maybeoperatorNoComma;\n var expr = noComma == false ? expression : expressionNoComma;\n if (type == \"=>\") return cont(pushcontext, noComma ? arrowBodyNoComma : arrowBody, popcontext);\n if (type == \"operator\") {\n if (/\\+\\+|--/.test(value)) return cont(me);\n if (value == \"?\") return cont(expression, expect(\":\"), expr);\n return cont(expr);\n }\n if (type == \"quasi\") { return pass(quasi, me); }\n if (type == \";\") return;\n if (type == \"(\") return contCommasep(expressionNoComma, \")\", \"call\", me);\n if (type == \".\") return cont(property, me);\n if (type == \"[\") return cont(pushlex(\"]\"), maybeexpression, expect(\"]\"), poplex, me);\n }\n function quasi(type, value) {\n if (type != \"quasi\") return pass();\n if (value.slice(value.length - 2) != \"${\") return cont(quasi);\n return cont(expression, continueQuasi);\n }\n function continueQuasi(type) {\n if (type == \"}\") {\n cx.marked = \"string-2\";\n cx.state.tokenize = tokenQuasi;\n return cont(quasi);\n }\n }\n function arrowBody(type) {\n findFatArrow(cx.stream, cx.state);\n return pass(type == \"{\" ? statement : expression);\n }\n function arrowBodyNoComma(type) {\n findFatArrow(cx.stream, cx.state);\n return pass(type == \"{\" ? statement : expressionNoComma);\n }\n function maybelabel(type) {\n if (type == \":\") return cont(poplex, statement);\n return pass(maybeoperatorComma, expect(\";\"), poplex);\n }\n function property(type) {\n if (type == \"variable\") {cx.marked = \"property\"; return cont();}\n }\n function objprop(type, value) {\n if (type == \"variable\" || cx.style == \"keyword\") {\n cx.marked = \"property\";\n if (value == \"get\" || value == \"set\") return cont(getterSetter);\n return cont(afterprop);\n } else if (type == \"number\" || type == \"string\") {\n cx.marked = jsonldMode ? \"property\" : (cx.style + \" property\");\n return cont(afterprop);\n } else if (type == \"jsonld-keyword\") {\n return cont(afterprop);\n } else if (type == \"[\") {\n return cont(expression, expect(\"]\"), afterprop);\n }\n }\n function getterSetter(type) {\n if (type != \"variable\") return pass(afterprop);\n cx.marked = \"property\";\n return cont(functiondef);\n }\n function afterprop(type) {\n if (type == \":\") return cont(expressionNoComma);\n if (type == \"(\") return pass(functiondef);\n }\n function commasep(what, end) {\n function proceed(type) {\n if (type == \",\") {\n var lex = cx.state.lexical;\n if (lex.info == \"call\") lex.pos = (lex.pos || 0) + 1;\n return cont(what, proceed);\n }\n if (type == end) return cont();\n return cont(expect(end));\n }\n return function(type) {\n if (type == end) return cont();\n return pass(what, proceed);\n };\n }\n function contCommasep(what, end, info) {\n for (var i = 3; i < arguments.length; i++)\n cx.cc.push(arguments[i]);\n return cont(pushlex(end, info), commasep(what, end), poplex);\n }\n function block(type) {\n if (type == \"}\") return cont();\n return pass(statement, block);\n }\n function maybetype(type) {\n if (isTS && type == \":\") return cont(typedef);\n }\n function typedef(type) {\n if (type == \"variable\"){cx.marked = \"variable-3\"; return cont();}\n }\n function vardef() {\n return pass(pattern, maybetype, maybeAssign, vardefCont);\n }\n function pattern(type, value) {\n if (type == \"variable\") { register(value); return cont(); }\n if (type == \"[\") return contCommasep(pattern, \"]\");\n if (type == \"{\") return contCommasep(proppattern, \"}\");\n }\n function proppattern(type, value) {\n if (type == \"variable\" && !cx.stream.match(/^\\s*:/, false)) {\n register(value);\n return cont(maybeAssign);\n }\n if (type == \"variable\") cx.marked = \"property\";\n return cont(expect(\":\"), pattern, maybeAssign);\n }\n function maybeAssign(_type, value) {\n if (value == \"=\") return cont(expressionNoComma);\n }\n function vardefCont(type) {\n if (type == \",\") return cont(vardef);\n }\n function maybeelse(type, value) {\n if (type == \"keyword b\" && value == \"else\") return cont(pushlex(\"form\", \"else\"), statement, poplex);\n }\n function forspec(type) {\n if (type == \"(\") return cont(pushlex(\")\"), forspec1, expect(\")\"), poplex);\n }\n function forspec1(type) {\n if (type == \"var\") return cont(vardef, expect(\";\"), forspec2);\n if (type == \";\") return cont(forspec2);\n if (type == \"variable\") return cont(formaybeinof);\n return pass(expression, expect(\";\"), forspec2);\n }\n function formaybeinof(_type, value) {\n if (value == \"in\" || value == \"of\") { cx.marked = \"keyword\"; return cont(expression); }\n return cont(maybeoperatorComma, forspec2);\n }\n function forspec2(type, value) {\n if (type == \";\") return cont(forspec3);\n if (value == \"in\" || value == \"of\") { cx.marked = \"keyword\"; return cont(expression); }\n return pass(expression, expect(\";\"), forspec3);\n }\n function forspec3(type) {\n if (type != \")\") cont(expression);\n }\n function functiondef(type, value) {\n if (value == \"*\") {cx.marked = \"keyword\"; return cont(functiondef);}\n if (type == \"variable\") {register(value); return cont(functiondef);}\n if (type == \"(\") return cont(pushcontext, pushlex(\")\"), commasep(funarg, \")\"), poplex, statement, popcontext);\n }\n function funarg(type) {\n if (type == \"spread\") return cont(funarg);\n return pass(pattern, maybetype);\n }\n function className(type, value) {\n if (type == \"variable\") {register(value); return cont(classNameAfter);}\n }\n function classNameAfter(type, value) {\n if (value == \"extends\") return cont(expression, classNameAfter);\n if (type == \"{\") return cont(pushlex(\"}\"), classBody, poplex);\n }\n function classBody(type, value) {\n if (type == \"variable\" || cx.style == \"keyword\") {\n cx.marked = \"property\";\n if (value == \"get\" || value == \"set\") return cont(classGetterSetter, functiondef, classBody);\n return cont(functiondef, classBody);\n }\n if (value == \"*\") {\n cx.marked = \"keyword\";\n return cont(classBody);\n }\n if (type == \";\") return cont(classBody);\n if (type == \"}\") return cont();\n }\n function classGetterSetter(type) {\n if (type != \"variable\") return pass();\n cx.marked = \"property\";\n return cont();\n }\n function afterModule(type, value) {\n if (type == \"string\") return cont(statement);\n if (type == \"variable\") { register(value); return cont(maybeFrom); }\n }\n function afterExport(_type, value) {\n if (value == \"*\") { cx.marked = \"keyword\"; return cont(maybeFrom, expect(\";\")); }\n if (value == \"default\") { cx.marked = \"keyword\"; return cont(expression, expect(\";\")); }\n return pass(statement);\n }\n function afterImport(type) {\n if (type == \"string\") return cont();\n return pass(importSpec, maybeFrom);\n }\n function importSpec(type, value) {\n if (type == \"{\") return contCommasep(importSpec, \"}\");\n if (type == \"variable\") register(value);\n return cont();\n }\n function maybeFrom(_type, value) {\n if (value == \"from\") { cx.marked = \"keyword\"; return cont(expression); }\n }\n function arrayLiteral(type) {\n if (type == \"]\") return cont();\n return pass(expressionNoComma, maybeArrayComprehension);\n }\n function maybeArrayComprehension(type) {\n if (type == \"for\") return pass(comprehension, expect(\"]\"));\n if (type == \",\") return cont(commasep(maybeexpressionNoComma, \"]\"));\n return pass(commasep(expressionNoComma, \"]\"));\n }\n function comprehension(type) {\n if (type == \"for\") return cont(forspec, comprehension);\n if (type == \"if\") return cont(expression, comprehension);\n }\n\n function isContinuedStatement(state, textAfter) {\n return state.lastType == \"operator\" || state.lastType == \",\" ||\n isOperatorChar.test(textAfter.charAt(0)) ||\n /[,.]/.test(textAfter.charAt(0));\n }\n\n // Interface\n\n return {\n startState: function(basecolumn) {\n var state = {\n tokenize: tokenBase,\n lastType: \"sof\",\n cc: [],\n lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, \"block\", false),\n localVars: parserConfig.localVars,\n context: parserConfig.localVars && {vars: parserConfig.localVars},\n indented: 0\n };\n if (parserConfig.globalVars && typeof parserConfig.globalVars == \"object\")\n state.globalVars = parserConfig.globalVars;\n return state;\n },\n\n token: function(stream, state) {\n if (stream.sol()) {\n if (!state.lexical.hasOwnProperty(\"align\"))\n state.lexical.align = false;\n state.indented = stream.indentation();\n findFatArrow(stream, state);\n }\n if (state.tokenize != tokenComment && stream.eatSpace()) return null;\n var style = state.tokenize(stream, state);\n if (type == \"comment\") return style;\n state.lastType = type == \"operator\" && (content == \"++\" || content == \"--\") ? \"incdec\" : type;\n return parseJS(state, style, type, content, stream);\n },\n\n indent: function(state, textAfter) {\n if (state.tokenize == tokenComment) return CodeMirror.Pass;\n if (state.tokenize != tokenBase) return 0;\n var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical;\n // Kludge to prevent 'maybelse' from blocking lexical scope pops\n if (!/^\\s*else\\b/.test(textAfter)) for (var i = state.cc.length - 1; i >= 0; --i) {\n var c = state.cc[i];\n if (c == poplex) lexical = lexical.prev;\n else if (c != maybeelse) break;\n }\n if (lexical.type == \"stat\" && firstChar == \"}\") lexical = lexical.prev;\n if (statementIndent && lexical.type == \")\" && lexical.prev.type == \"stat\")\n lexical = lexical.prev;\n var type = lexical.type, closing = firstChar == type;\n\n if (type == \"vardef\") return lexical.indented + (state.lastType == \"operator\" || state.lastType == \",\" ? lexical.info + 1 : 0);\n else if (type == \"form\" && firstChar == \"{\") return lexical.indented;\n else if (type == \"form\") return lexical.indented + indentUnit;\n else if (type == \"stat\")\n return lexical.indented + (isContinuedStatement(state, textAfter) ? statementIndent || indentUnit : 0);\n else if (lexical.info == \"switch\" && !closing && parserConfig.doubleIndentSwitch != false)\n return lexical.indented + (/^(?:case|default)\\b/.test(textAfter) ? indentUnit : 2 * indentUnit);\n else if (lexical.align) return lexical.column + (closing ? 0 : 1);\n else return lexical.indented + (closing ? 0 : indentUnit);\n },\n\n electricInput: /^\\s*(?:case .*?:|default:|\\{|\\})$/,\n blockCommentStart: jsonMode ? null : \"/*\",\n blockCommentEnd: jsonMode ? null : \"*/\",\n lineComment: jsonMode ? null : \"//\",\n fold: \"brace\",\n\n helperType: jsonMode ? \"json\" : \"javascript\",\n jsonldMode: jsonldMode,\n jsonMode: jsonMode\n };\n});\n\nCodeMirror.registerHelper(\"wordChars\", \"javascript\", /[\\w$]/);\n\nCodeMirror.defineMIME(\"text/javascript\", \"javascript\");\nCodeMirror.defineMIME(\"text/ecmascript\", \"javascript\");\nCodeMirror.defineMIME(\"application/javascript\", \"javascript\");\nCodeMirror.defineMIME(\"application/x-javascript\", \"javascript\");\nCodeMirror.defineMIME(\"application/ecmascript\", \"javascript\");\nCodeMirror.defineMIME(\"application/json\", {name: \"javascript\", json: true});\nCodeMirror.defineMIME(\"application/x-json\", {name: \"javascript\", json: true});\nCodeMirror.defineMIME(\"application/ld+json\", {name: \"javascript\", jsonld: true});\nCodeMirror.defineMIME(\"text/typescript\", { name: \"javascript\", typescript: true });\nCodeMirror.defineMIME(\"application/typescript\", { name: \"javascript\", typescript: true });\n\n});\n\n},{\"../../lib/codemirror\":10}],12:[function(require,module,exports){\n// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.defineMode(\"xml\", function(config, parserConfig) {\n var indentUnit = config.indentUnit;\n var multilineTagIndentFactor = parserConfig.multilineTagIndentFactor || 1;\n var multilineTagIndentPastTag = parserConfig.multilineTagIndentPastTag;\n if (multilineTagIndentPastTag == null) multilineTagIndentPastTag = true;\n\n var Kludges = parserConfig.htmlMode ? {\n autoSelfClosers: {'area': true, 'base': true, 'br': true, 'col': true, 'command': true,\n 'embed': true, 'frame': true, 'hr': true, 'img': true, 'input': true,\n 'keygen': true, 'link': true, 'meta': true, 'param': true, 'source': true,\n 'track': true, 'wbr': true, 'menuitem': true},\n implicitlyClosed: {'dd': true, 'li': true, 'optgroup': true, 'option': true, 'p': true,\n 'rp': true, 'rt': true, 'tbody': true, 'td': true, 'tfoot': true,\n 'th': true, 'tr': true},\n contextGrabbers: {\n 'dd': {'dd': true, 'dt': true},\n 'dt': {'dd': true, 'dt': true},\n 'li': {'li': true},\n 'option': {'option': true, 'optgroup': true},\n 'optgroup': {'optgroup': true},\n 'p': {'address': true, 'article': true, 'aside': true, 'blockquote': true, 'dir': true,\n 'div': true, 'dl': true, 'fieldset': true, 'footer': true, 'form': true,\n 'h1': true, 'h2': true, 'h3': true, 'h4': true, 'h5': true, 'h6': true,\n 'header': true, 'hgroup': true, 'hr': true, 'menu': true, 'nav': true, 'ol': true,\n 'p': true, 'pre': true, 'section': true, 'table': true, 'ul': true},\n 'rp': {'rp': true, 'rt': true},\n 'rt': {'rp': true, 'rt': true},\n 'tbody': {'tbody': true, 'tfoot': true},\n 'td': {'td': true, 'th': true},\n 'tfoot': {'tbody': true},\n 'th': {'td': true, 'th': true},\n 'thead': {'tbody': true, 'tfoot': true},\n 'tr': {'tr': true}\n },\n doNotIndent: {\"pre\": true},\n allowUnquoted: true,\n allowMissing: true,\n caseFold: true\n } : {\n autoSelfClosers: {},\n implicitlyClosed: {},\n contextGrabbers: {},\n doNotIndent: {},\n allowUnquoted: false,\n allowMissing: false,\n caseFold: false\n };\n var alignCDATA = parserConfig.alignCDATA;\n\n // Return variables for tokenizers\n var type, setStyle;\n\n function inText(stream, state) {\n function chain(parser) {\n state.tokenize = parser;\n return parser(stream, state);\n }\n\n var ch = stream.next();\n if (ch == \"<\") {\n if (stream.eat(\"!\")) {\n if (stream.eat(\"[\")) {\n if (stream.match(\"CDATA[\")) return chain(inBlock(\"atom\", \"]]>\"));\n else return null;\n } else if (stream.match(\"--\")) {\n return chain(inBlock(\"comment\", \"-->\"));\n } else if (stream.match(\"DOCTYPE\", true, true)) {\n stream.eatWhile(/[\\w\\._\\-]/);\n return chain(doctype(1));\n } else {\n return null;\n }\n } else if (stream.eat(\"?\")) {\n stream.eatWhile(/[\\w\\._\\-]/);\n state.tokenize = inBlock(\"meta\", \"?>\");\n return \"meta\";\n } else {\n type = stream.eat(\"/\") ? \"closeTag\" : \"openTag\";\n state.tokenize = inTag;\n return \"tag bracket\";\n }\n } else if (ch == \"&\") {\n var ok;\n if (stream.eat(\"#\")) {\n if (stream.eat(\"x\")) {\n ok = stream.eatWhile(/[a-fA-F\\d]/) && stream.eat(\";\");\n } else {\n ok = stream.eatWhile(/[\\d]/) && stream.eat(\";\");\n }\n } else {\n ok = stream.eatWhile(/[\\w\\.\\-:]/) && stream.eat(\";\");\n }\n return ok ? \"atom\" : \"error\";\n } else {\n stream.eatWhile(/[^&<]/);\n return null;\n }\n }\n\n function inTag(stream, state) {\n var ch = stream.next();\n if (ch == \">\" || (ch == \"/\" && stream.eat(\">\"))) {\n state.tokenize = inText;\n type = ch == \">\" ? \"endTag\" : \"selfcloseTag\";\n return \"tag bracket\";\n } else if (ch == \"=\") {\n type = \"equals\";\n return null;\n } else if (ch == \"<\") {\n state.tokenize = inText;\n state.state = baseState;\n state.tagName = state.tagStart = null;\n var next = state.tokenize(stream, state);\n return next ? next + \" tag error\" : \"tag error\";\n } else if (/[\\'\\\"]/.test(ch)) {\n state.tokenize = inAttribute(ch);\n state.stringStartCol = stream.column();\n return state.tokenize(stream, state);\n } else {\n stream.match(/^[^\\s\\u00a0=<>\\\"\\']*[^\\s\\u00a0=<>\\\"\\'\\/]/);\n return \"word\";\n }\n }\n\n function inAttribute(quote) {\n var closure = function(stream, state) {\n while (!stream.eol()) {\n if (stream.next() == quote) {\n state.tokenize = inTag;\n break;\n }\n }\n return \"string\";\n };\n closure.isInAttribute = true;\n return closure;\n }\n\n function inBlock(style, terminator) {\n return function(stream, state) {\n while (!stream.eol()) {\n if (stream.match(terminator)) {\n state.tokenize = inText;\n break;\n }\n stream.next();\n }\n return style;\n };\n }\n function doctype(depth) {\n return function(stream, state) {\n var ch;\n while ((ch = stream.next()) != null) {\n if (ch == \"<\") {\n state.tokenize = doctype(depth + 1);\n return state.tokenize(stream, state);\n } else if (ch == \">\") {\n if (depth == 1) {\n state.tokenize = inText;\n break;\n } else {\n state.tokenize = doctype(depth - 1);\n return state.tokenize(stream, state);\n }\n }\n }\n return \"meta\";\n };\n }\n\n function Context(state, tagName, startOfLine) {\n this.prev = state.context;\n this.tagName = tagName;\n this.indent = state.indented;\n this.startOfLine = startOfLine;\n if (Kludges.doNotIndent.hasOwnProperty(tagName) || (state.context && state.context.noIndent))\n this.noIndent = true;\n }\n function popContext(state) {\n if (state.context) state.context = state.context.prev;\n }\n function maybePopContext(state, nextTagName) {\n var parentTagName;\n while (true) {\n if (!state.context) {\n return;\n }\n parentTagName = state.context.tagName;\n if (!Kludges.contextGrabbers.hasOwnProperty(parentTagName) ||\n !Kludges.contextGrabbers[parentTagName].hasOwnProperty(nextTagName)) {\n return;\n }\n popContext(state);\n }\n }\n\n function baseState(type, stream, state) {\n if (type == \"openTag\") {\n state.tagStart = stream.column();\n return tagNameState;\n } else if (type == \"closeTag\") {\n return closeTagNameState;\n } else {\n return baseState;\n }\n }\n function tagNameState(type, stream, state) {\n if (type == \"word\") {\n state.tagName = stream.current();\n setStyle = \"tag\";\n return attrState;\n } else {\n setStyle = \"error\";\n return tagNameState;\n }\n }\n function closeTagNameState(type, stream, state) {\n if (type == \"word\") {\n var tagName = stream.current();\n if (state.context && state.context.tagName != tagName &&\n Kludges.implicitlyClosed.hasOwnProperty(state.context.tagName))\n popContext(state);\n if (state.context && state.context.tagName == tagName) {\n setStyle = \"tag\";\n return closeState;\n } else {\n setStyle = \"tag error\";\n return closeStateErr;\n }\n } else {\n setStyle = \"error\";\n return closeStateErr;\n }\n }\n\n function closeState(type, _stream, state) {\n if (type != \"endTag\") {\n setStyle = \"error\";\n return closeState;\n }\n popContext(state);\n return baseState;\n }\n function closeStateErr(type, stream, state) {\n setStyle = \"error\";\n return closeState(type, stream, state);\n }\n\n function attrState(type, _stream, state) {\n if (type == \"word\") {\n setStyle = \"attribute\";\n return attrEqState;\n } else if (type == \"endTag\" || type == \"selfcloseTag\") {\n var tagName = state.tagName, tagStart = state.tagStart;\n state.tagName = state.tagStart = null;\n if (type == \"selfcloseTag\" ||\n Kludges.autoSelfClosers.hasOwnProperty(tagName)) {\n maybePopContext(state, tagName);\n } else {\n maybePopContext(state, tagName);\n state.context = new Context(state, tagName, tagStart == state.indented);\n }\n return baseState;\n }\n setStyle = \"error\";\n return attrState;\n }\n function attrEqState(type, stream, state) {\n if (type == \"equals\") return attrValueState;\n if (!Kludges.allowMissing) setStyle = \"error\";\n return attrState(type, stream, state);\n }\n function attrValueState(type, stream, state) {\n if (type == \"string\") return attrContinuedState;\n if (type == \"word\" && Kludges.allowUnquoted) {setStyle = \"string\"; return attrState;}\n setStyle = \"error\";\n return attrState(type, stream, state);\n }\n function attrContinuedState(type, stream, state) {\n if (type == \"string\") return attrContinuedState;\n return attrState(type, stream, state);\n }\n\n return {\n startState: function() {\n return {tokenize: inText,\n state: baseState,\n indented: 0,\n tagName: null, tagStart: null,\n context: null};\n },\n\n token: function(stream, state) {\n if (!state.tagName && stream.sol())\n state.indented = stream.indentation();\n\n if (stream.eatSpace()) return null;\n type = null;\n var style = state.tokenize(stream, state);\n if ((style || type) && style != \"comment\") {\n setStyle = null;\n state.state = state.state(type || style, stream, state);\n if (setStyle)\n style = setStyle == \"error\" ? style + \" error\" : setStyle;\n }\n return style;\n },\n\n indent: function(state, textAfter, fullLine) {\n var context = state.context;\n // Indent multi-line strings (e.g. css).\n if (state.tokenize.isInAttribute) {\n if (state.tagStart == state.indented)\n return state.stringStartCol + 1;\n else\n return state.indented + indentUnit;\n }\n if (context && context.noIndent) return CodeMirror.Pass;\n if (state.tokenize != inTag && state.tokenize != inText)\n return fullLine ? fullLine.match(/^(\\s*)/)[0].length : 0;\n // Indent the starts of attribute names.\n if (state.tagName) {\n if (multilineTagIndentPastTag)\n return state.tagStart + state.tagName.length + 2;\n else\n return state.tagStart + indentUnit * multilineTagIndentFactor;\n }\n if (alignCDATA && /$/,\n blockCommentStart: \"\",\n\n configuration: parserConfig.htmlMode ? \"html\" : \"xml\",\n helperType: parserConfig.htmlMode ? \"html\" : \"xml\"\n };\n});\n\nCodeMirror.defineMIME(\"text/xml\", \"xml\");\nCodeMirror.defineMIME(\"application/xml\", \"xml\");\nif (!CodeMirror.mimeModes.hasOwnProperty(\"text/html\"))\n CodeMirror.defineMIME(\"text/html\", {name: \"xml\", htmlMode: true});\n\n});\n\n},{\"../../lib/codemirror\":10}],13:[function(require,module,exports){\n!function() {\n var d3 = {\n version: \"3.5.5\"\n };\n var d3_arraySlice = [].slice, d3_array = function(list) {\n return d3_arraySlice.call(list);\n };\n var d3_document = this.document;\n function d3_documentElement(node) {\n return node && (node.ownerDocument || node.document || node).documentElement;\n }\n function d3_window(node) {\n return node && (node.ownerDocument && node.ownerDocument.defaultView || node.document && node || node.defaultView);\n }\n if (d3_document) {\n try {\n d3_array(d3_document.documentElement.childNodes)[0].nodeType;\n } catch (e) {\n d3_array = function(list) {\n var i = list.length, array = new Array(i);\n while (i--) array[i] = list[i];\n return array;\n };\n }\n }\n if (!Date.now) Date.now = function() {\n return +new Date();\n };\n if (d3_document) {\n try {\n d3_document.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\");\n } catch (error) {\n var d3_element_prototype = this.Element.prototype, d3_element_setAttribute = d3_element_prototype.setAttribute, d3_element_setAttributeNS = d3_element_prototype.setAttributeNS, d3_style_prototype = this.CSSStyleDeclaration.prototype, d3_style_setProperty = d3_style_prototype.setProperty;\n d3_element_prototype.setAttribute = function(name, value) {\n d3_element_setAttribute.call(this, name, value + \"\");\n };\n d3_element_prototype.setAttributeNS = function(space, local, value) {\n d3_element_setAttributeNS.call(this, space, local, value + \"\");\n };\n d3_style_prototype.setProperty = function(name, value, priority) {\n d3_style_setProperty.call(this, name, value + \"\", priority);\n };\n }\n }\n d3.ascending = d3_ascending;\n function d3_ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n }\n d3.descending = function(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n };\n d3.min = function(array, f) {\n var i = -1, n = array.length, a, b;\n if (arguments.length === 1) {\n while (++i < n) if ((b = array[i]) != null && b >= b) {\n a = b;\n break;\n }\n while (++i < n) if ((b = array[i]) != null && a > b) a = b;\n } else {\n while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) {\n a = b;\n break;\n }\n while (++i < n) if ((b = f.call(array, array[i], i)) != null && a > b) a = b;\n }\n return a;\n };\n d3.max = function(array, f) {\n var i = -1, n = array.length, a, b;\n if (arguments.length === 1) {\n while (++i < n) if ((b = array[i]) != null && b >= b) {\n a = b;\n break;\n }\n while (++i < n) if ((b = array[i]) != null && b > a) a = b;\n } else {\n while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) {\n a = b;\n break;\n }\n while (++i < n) if ((b = f.call(array, array[i], i)) != null && b > a) a = b;\n }\n return a;\n };\n d3.extent = function(array, f) {\n var i = -1, n = array.length, a, b, c;\n if (arguments.length === 1) {\n while (++i < n) if ((b = array[i]) != null && b >= b) {\n a = c = b;\n break;\n }\n while (++i < n) if ((b = array[i]) != null) {\n if (a > b) a = b;\n if (c < b) c = b;\n }\n } else {\n while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) {\n a = c = b;\n break;\n }\n while (++i < n) if ((b = f.call(array, array[i], i)) != null) {\n if (a > b) a = b;\n if (c < b) c = b;\n }\n }\n return [ a, c ];\n };\n function d3_number(x) {\n return x === null ? NaN : +x;\n }\n function d3_numeric(x) {\n return !isNaN(x);\n }\n d3.sum = function(array, f) {\n var s = 0, n = array.length, a, i = -1;\n if (arguments.length === 1) {\n while (++i < n) if (d3_numeric(a = +array[i])) s += a;\n } else {\n while (++i < n) if (d3_numeric(a = +f.call(array, array[i], i))) s += a;\n }\n return s;\n };\n d3.mean = function(array, f) {\n var s = 0, n = array.length, a, i = -1, j = n;\n if (arguments.length === 1) {\n while (++i < n) if (d3_numeric(a = d3_number(array[i]))) s += a; else --j;\n } else {\n while (++i < n) if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) s += a; else --j;\n }\n if (j) return s / j;\n };\n d3.quantile = function(values, p) {\n var H = (values.length - 1) * p + 1, h = Math.floor(H), v = +values[h - 1], e = H - h;\n return e ? v + e * (values[h] - v) : v;\n };\n d3.median = function(array, f) {\n var numbers = [], n = array.length, a, i = -1;\n if (arguments.length === 1) {\n while (++i < n) if (d3_numeric(a = d3_number(array[i]))) numbers.push(a);\n } else {\n while (++i < n) if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) numbers.push(a);\n }\n if (numbers.length) return d3.quantile(numbers.sort(d3_ascending), .5);\n };\n d3.variance = function(array, f) {\n var n = array.length, m = 0, a, d, s = 0, i = -1, j = 0;\n if (arguments.length === 1) {\n while (++i < n) {\n if (d3_numeric(a = d3_number(array[i]))) {\n d = a - m;\n m += d / ++j;\n s += d * (a - m);\n }\n }\n } else {\n while (++i < n) {\n if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) {\n d = a - m;\n m += d / ++j;\n s += d * (a - m);\n }\n }\n }\n if (j > 1) return s / (j - 1);\n };\n d3.deviation = function() {\n var v = d3.variance.apply(this, arguments);\n return v ? Math.sqrt(v) : v;\n };\n function d3_bisector(compare) {\n return {\n left: function(a, x, lo, hi) {\n if (arguments.length < 3) lo = 0;\n if (arguments.length < 4) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1; else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (arguments.length < 3) lo = 0;\n if (arguments.length < 4) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid; else lo = mid + 1;\n }\n return lo;\n }\n };\n }\n var d3_bisect = d3_bisector(d3_ascending);\n d3.bisectLeft = d3_bisect.left;\n d3.bisect = d3.bisectRight = d3_bisect.right;\n d3.bisector = function(f) {\n return d3_bisector(f.length === 1 ? function(d, x) {\n return d3_ascending(f(d), x);\n } : f);\n };\n d3.shuffle = function(array, i0, i1) {\n if ((m = arguments.length) < 3) {\n i1 = array.length;\n if (m < 2) i0 = 0;\n }\n var m = i1 - i0, t, i;\n while (m) {\n i = Math.random() * m-- | 0;\n t = array[m + i0], array[m + i0] = array[i + i0], array[i + i0] = t;\n }\n return array;\n };\n d3.permute = function(array, indexes) {\n var i = indexes.length, permutes = new Array(i);\n while (i--) permutes[i] = array[indexes[i]];\n return permutes;\n };\n d3.pairs = function(array) {\n var i = 0, n = array.length - 1, p0, p1 = array[0], pairs = new Array(n < 0 ? 0 : n);\n while (i < n) pairs[i] = [ p0 = p1, p1 = array[++i] ];\n return pairs;\n };\n d3.zip = function() {\n if (!(n = arguments.length)) return [];\n for (var i = -1, m = d3.min(arguments, d3_zipLength), zips = new Array(m); ++i < m; ) {\n for (var j = -1, n, zip = zips[i] = new Array(n); ++j < n; ) {\n zip[j] = arguments[j][i];\n }\n }\n return zips;\n };\n function d3_zipLength(d) {\n return d.length;\n }\n d3.transpose = function(matrix) {\n return d3.zip.apply(d3, matrix);\n };\n d3.keys = function(map) {\n var keys = [];\n for (var key in map) keys.push(key);\n return keys;\n };\n d3.values = function(map) {\n var values = [];\n for (var key in map) values.push(map[key]);\n return values;\n };\n d3.entries = function(map) {\n var entries = [];\n for (var key in map) entries.push({\n key: key,\n value: map[key]\n });\n return entries;\n };\n d3.merge = function(arrays) {\n var n = arrays.length, m, i = -1, j = 0, merged, array;\n while (++i < n) j += arrays[i].length;\n merged = new Array(j);\n while (--n >= 0) {\n array = arrays[n];\n m = array.length;\n while (--m >= 0) {\n merged[--j] = array[m];\n }\n }\n return merged;\n };\n var abs = Math.abs;\n d3.range = function(start, stop, step) {\n if (arguments.length < 3) {\n step = 1;\n if (arguments.length < 2) {\n stop = start;\n start = 0;\n }\n }\n if ((stop - start) / step === Infinity) throw new Error(\"infinite range\");\n var range = [], k = d3_range_integerScale(abs(step)), i = -1, j;\n start *= k, stop *= k, step *= k;\n if (step < 0) while ((j = start + step * ++i) > stop) range.push(j / k); else while ((j = start + step * ++i) < stop) range.push(j / k);\n return range;\n };\n function d3_range_integerScale(x) {\n var k = 1;\n while (x * k % 1) k *= 10;\n return k;\n }\n function d3_class(ctor, properties) {\n for (var key in properties) {\n Object.defineProperty(ctor.prototype, key, {\n value: properties[key],\n enumerable: false\n });\n }\n }\n d3.map = function(object, f) {\n var map = new d3_Map();\n if (object instanceof d3_Map) {\n object.forEach(function(key, value) {\n map.set(key, value);\n });\n } else if (Array.isArray(object)) {\n var i = -1, n = object.length, o;\n if (arguments.length === 1) while (++i < n) map.set(i, object[i]); else while (++i < n) map.set(f.call(object, o = object[i], i), o);\n } else {\n for (var key in object) map.set(key, object[key]);\n }\n return map;\n };\n function d3_Map() {\n this._ = Object.create(null);\n }\n var d3_map_proto = \"__proto__\", d3_map_zero = \"\\x00\";\n d3_class(d3_Map, {\n has: d3_map_has,\n get: function(key) {\n return this._[d3_map_escape(key)];\n },\n set: function(key, value) {\n return this._[d3_map_escape(key)] = value;\n },\n remove: d3_map_remove,\n keys: d3_map_keys,\n values: function() {\n var values = [];\n for (var key in this._) values.push(this._[key]);\n return values;\n },\n entries: function() {\n var entries = [];\n for (var key in this._) entries.push({\n key: d3_map_unescape(key),\n value: this._[key]\n });\n return entries;\n },\n size: d3_map_size,\n empty: d3_map_empty,\n forEach: function(f) {\n for (var key in this._) f.call(this, d3_map_unescape(key), this._[key]);\n }\n });\n function d3_map_escape(key) {\n return (key += \"\") === d3_map_proto || key[0] === d3_map_zero ? d3_map_zero + key : key;\n }\n function d3_map_unescape(key) {\n return (key += \"\")[0] === d3_map_zero ? key.slice(1) : key;\n }\n function d3_map_has(key) {\n return d3_map_escape(key) in this._;\n }\n function d3_map_remove(key) {\n return (key = d3_map_escape(key)) in this._ && delete this._[key];\n }\n function d3_map_keys() {\n var keys = [];\n for (var key in this._) keys.push(d3_map_unescape(key));\n return keys;\n }\n function d3_map_size() {\n var size = 0;\n for (var key in this._) ++size;\n return size;\n }\n function d3_map_empty() {\n for (var key in this._) return false;\n return true;\n }\n d3.nest = function() {\n var nest = {}, keys = [], sortKeys = [], sortValues, rollup;\n function map(mapType, array, depth) {\n if (depth >= keys.length) return rollup ? rollup.call(nest, array) : sortValues ? array.sort(sortValues) : array;\n var i = -1, n = array.length, key = keys[depth++], keyValue, object, setter, valuesByKey = new d3_Map(), values;\n while (++i < n) {\n if (values = valuesByKey.get(keyValue = key(object = array[i]))) {\n values.push(object);\n } else {\n valuesByKey.set(keyValue, [ object ]);\n }\n }\n if (mapType) {\n object = mapType();\n setter = function(keyValue, values) {\n object.set(keyValue, map(mapType, values, depth));\n };\n } else {\n object = {};\n setter = function(keyValue, values) {\n object[keyValue] = map(mapType, values, depth);\n };\n }\n valuesByKey.forEach(setter);\n return object;\n }\n function entries(map, depth) {\n if (depth >= keys.length) return map;\n var array = [], sortKey = sortKeys[depth++];\n map.forEach(function(key, keyMap) {\n array.push({\n key: key,\n values: entries(keyMap, depth)\n });\n });\n return sortKey ? array.sort(function(a, b) {\n return sortKey(a.key, b.key);\n }) : array;\n }\n nest.map = function(array, mapType) {\n return map(mapType, array, 0);\n };\n nest.entries = function(array) {\n return entries(map(d3.map, array, 0), 0);\n };\n nest.key = function(d) {\n keys.push(d);\n return nest;\n };\n nest.sortKeys = function(order) {\n sortKeys[keys.length - 1] = order;\n return nest;\n };\n nest.sortValues = function(order) {\n sortValues = order;\n return nest;\n };\n nest.rollup = function(f) {\n rollup = f;\n return nest;\n };\n return nest;\n };\n d3.set = function(array) {\n var set = new d3_Set();\n if (array) for (var i = 0, n = array.length; i < n; ++i) set.add(array[i]);\n return set;\n };\n function d3_Set() {\n this._ = Object.create(null);\n }\n d3_class(d3_Set, {\n has: d3_map_has,\n add: function(key) {\n this._[d3_map_escape(key += \"\")] = true;\n return key;\n },\n remove: d3_map_remove,\n values: d3_map_keys,\n size: d3_map_size,\n empty: d3_map_empty,\n forEach: function(f) {\n for (var key in this._) f.call(this, d3_map_unescape(key));\n }\n });\n d3.behavior = {};\n function d3_identity(d) {\n return d;\n }\n d3.rebind = function(target, source) {\n var i = 1, n = arguments.length, method;\n while (++i < n) target[method = arguments[i]] = d3_rebind(target, source, source[method]);\n return target;\n };\n function d3_rebind(target, source, method) {\n return function() {\n var value = method.apply(source, arguments);\n return value === source ? target : value;\n };\n }\n function d3_vendorSymbol(object, name) {\n if (name in object) return name;\n name = name.charAt(0).toUpperCase() + name.slice(1);\n for (var i = 0, n = d3_vendorPrefixes.length; i < n; ++i) {\n var prefixName = d3_vendorPrefixes[i] + name;\n if (prefixName in object) return prefixName;\n }\n }\n var d3_vendorPrefixes = [ \"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\" ];\n function d3_noop() {}\n d3.dispatch = function() {\n var dispatch = new d3_dispatch(), i = -1, n = arguments.length;\n while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch);\n return dispatch;\n };\n function d3_dispatch() {}\n d3_dispatch.prototype.on = function(type, listener) {\n var i = type.indexOf(\".\"), name = \"\";\n if (i >= 0) {\n name = type.slice(i + 1);\n type = type.slice(0, i);\n }\n if (type) return arguments.length < 2 ? this[type].on(name) : this[type].on(name, listener);\n if (arguments.length === 2) {\n if (listener == null) for (type in this) {\n if (this.hasOwnProperty(type)) this[type].on(name, null);\n }\n return this;\n }\n };\n function d3_dispatch_event(dispatch) {\n var listeners = [], listenerByName = new d3_Map();\n function event() {\n var z = listeners, i = -1, n = z.length, l;\n while (++i < n) if (l = z[i].on) l.apply(this, arguments);\n return dispatch;\n }\n event.on = function(name, listener) {\n var l = listenerByName.get(name), i;\n if (arguments.length < 2) return l && l.on;\n if (l) {\n l.on = null;\n listeners = listeners.slice(0, i = listeners.indexOf(l)).concat(listeners.slice(i + 1));\n listenerByName.remove(name);\n }\n if (listener) listeners.push(listenerByName.set(name, {\n on: listener\n }));\n return dispatch;\n };\n return event;\n }\n d3.event = null;\n function d3_eventPreventDefault() {\n d3.event.preventDefault();\n }\n function d3_eventSource() {\n var e = d3.event, s;\n while (s = e.sourceEvent) e = s;\n return e;\n }\n function d3_eventDispatch(target) {\n var dispatch = new d3_dispatch(), i = 0, n = arguments.length;\n while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch);\n dispatch.of = function(thiz, argumentz) {\n return function(e1) {\n try {\n var e0 = e1.sourceEvent = d3.event;\n e1.target = target;\n d3.event = e1;\n dispatch[e1.type].apply(thiz, argumentz);\n } finally {\n d3.event = e0;\n }\n };\n };\n return dispatch;\n }\n d3.requote = function(s) {\n return s.replace(d3_requote_re, \"\\\\$&\");\n };\n var d3_requote_re = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g;\n var d3_subclass = {}.__proto__ ? function(object, prototype) {\n object.__proto__ = prototype;\n } : function(object, prototype) {\n for (var property in prototype) object[property] = prototype[property];\n };\n function d3_selection(groups) {\n d3_subclass(groups, d3_selectionPrototype);\n return groups;\n }\n var d3_select = function(s, n) {\n return n.querySelector(s);\n }, d3_selectAll = function(s, n) {\n return n.querySelectorAll(s);\n }, d3_selectMatches = function(n, s) {\n var d3_selectMatcher = n.matches || n[d3_vendorSymbol(n, \"matchesSelector\")];\n d3_selectMatches = function(n, s) {\n return d3_selectMatcher.call(n, s);\n };\n return d3_selectMatches(n, s);\n };\n if (typeof Sizzle === \"function\") {\n d3_select = function(s, n) {\n return Sizzle(s, n)[0] || null;\n };\n d3_selectAll = Sizzle;\n d3_selectMatches = Sizzle.matchesSelector;\n }\n d3.selection = function() {\n return d3.select(d3_document.documentElement);\n };\n var d3_selectionPrototype = d3.selection.prototype = [];\n d3_selectionPrototype.select = function(selector) {\n var subgroups = [], subgroup, subnode, group, node;\n selector = d3_selection_selector(selector);\n for (var j = -1, m = this.length; ++j < m; ) {\n subgroups.push(subgroup = []);\n subgroup.parentNode = (group = this[j]).parentNode;\n for (var i = -1, n = group.length; ++i < n; ) {\n if (node = group[i]) {\n subgroup.push(subnode = selector.call(node, node.__data__, i, j));\n if (subnode && \"__data__\" in node) subnode.__data__ = node.__data__;\n } else {\n subgroup.push(null);\n }\n }\n }\n return d3_selection(subgroups);\n };\n function d3_selection_selector(selector) {\n return typeof selector === \"function\" ? selector : function() {\n return d3_select(selector, this);\n };\n }\n d3_selectionPrototype.selectAll = function(selector) {\n var subgroups = [], subgroup, node;\n selector = d3_selection_selectorAll(selector);\n for (var j = -1, m = this.length; ++j < m; ) {\n for (var group = this[j], i = -1, n = group.length; ++i < n; ) {\n if (node = group[i]) {\n subgroups.push(subgroup = d3_array(selector.call(node, node.__data__, i, j)));\n subgroup.parentNode = node;\n }\n }\n }\n return d3_selection(subgroups);\n };\n function d3_selection_selectorAll(selector) {\n return typeof selector === \"function\" ? selector : function() {\n return d3_selectAll(selector, this);\n };\n }\n var d3_nsPrefix = {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: \"http://www.w3.org/1999/xhtml\",\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n };\n d3.ns = {\n prefix: d3_nsPrefix,\n qualify: function(name) {\n var i = name.indexOf(\":\"), prefix = name;\n if (i >= 0) {\n prefix = name.slice(0, i);\n name = name.slice(i + 1);\n }\n return d3_nsPrefix.hasOwnProperty(prefix) ? {\n space: d3_nsPrefix[prefix],\n local: name\n } : name;\n }\n };\n d3_selectionPrototype.attr = function(name, value) {\n if (arguments.length < 2) {\n if (typeof name === \"string\") {\n var node = this.node();\n name = d3.ns.qualify(name);\n return name.local ? node.getAttributeNS(name.space, name.local) : node.getAttribute(name);\n }\n for (value in name) this.each(d3_selection_attr(value, name[value]));\n return this;\n }\n return this.each(d3_selection_attr(name, value));\n };\n function d3_selection_attr(name, value) {\n name = d3.ns.qualify(name);\n function attrNull() {\n this.removeAttribute(name);\n }\n function attrNullNS() {\n this.removeAttributeNS(name.space, name.local);\n }\n function attrConstant() {\n this.setAttribute(name, value);\n }\n function attrConstantNS() {\n this.setAttributeNS(name.space, name.local, value);\n }\n function attrFunction() {\n var x = value.apply(this, arguments);\n if (x == null) this.removeAttribute(name); else this.setAttribute(name, x);\n }\n function attrFunctionNS() {\n var x = value.apply(this, arguments);\n if (x == null) this.removeAttributeNS(name.space, name.local); else this.setAttributeNS(name.space, name.local, x);\n }\n return value == null ? name.local ? attrNullNS : attrNull : typeof value === \"function\" ? name.local ? attrFunctionNS : attrFunction : name.local ? attrConstantNS : attrConstant;\n }\n function d3_collapse(s) {\n return s.trim().replace(/\\s+/g, \" \");\n }\n d3_selectionPrototype.classed = function(name, value) {\n if (arguments.length < 2) {\n if (typeof name === \"string\") {\n var node = this.node(), n = (name = d3_selection_classes(name)).length, i = -1;\n if (value = node.classList) {\n while (++i < n) if (!value.contains(name[i])) return false;\n } else {\n value = node.getAttribute(\"class\");\n while (++i < n) if (!d3_selection_classedRe(name[i]).test(value)) return false;\n }\n return true;\n }\n for (value in name) this.each(d3_selection_classed(value, name[value]));\n return this;\n }\n return this.each(d3_selection_classed(name, value));\n };\n function d3_selection_classedRe(name) {\n return new RegExp(\"(?:^|\\\\s+)\" + d3.requote(name) + \"(?:\\\\s+|$)\", \"g\");\n }\n function d3_selection_classes(name) {\n return (name + \"\").trim().split(/^|\\s+/);\n }\n function d3_selection_classed(name, value) {\n name = d3_selection_classes(name).map(d3_selection_classedName);\n var n = name.length;\n function classedConstant() {\n var i = -1;\n while (++i < n) name[i](this, value);\n }\n function classedFunction() {\n var i = -1, x = value.apply(this, arguments);\n while (++i < n) name[i](this, x);\n }\n return typeof value === \"function\" ? classedFunction : classedConstant;\n }\n function d3_selection_classedName(name) {\n var re = d3_selection_classedRe(name);\n return function(node, value) {\n if (c = node.classList) return value ? c.add(name) : c.remove(name);\n var c = node.getAttribute(\"class\") || \"\";\n if (value) {\n re.lastIndex = 0;\n if (!re.test(c)) node.setAttribute(\"class\", d3_collapse(c + \" \" + name));\n } else {\n node.setAttribute(\"class\", d3_collapse(c.replace(re, \" \")));\n }\n };\n }\n d3_selectionPrototype.style = function(name, value, priority) {\n var n = arguments.length;\n if (n < 3) {\n if (typeof name !== \"string\") {\n if (n < 2) value = \"\";\n for (priority in name) this.each(d3_selection_style(priority, name[priority], value));\n return this;\n }\n if (n < 2) {\n var node = this.node();\n return d3_window(node).getComputedStyle(node, null).getPropertyValue(name);\n }\n priority = \"\";\n }\n return this.each(d3_selection_style(name, value, priority));\n };\n function d3_selection_style(name, value, priority) {\n function styleNull() {\n this.style.removeProperty(name);\n }\n function styleConstant() {\n this.style.setProperty(name, value, priority);\n }\n function styleFunction() {\n var x = value.apply(this, arguments);\n if (x == null) this.style.removeProperty(name); else this.style.setProperty(name, x, priority);\n }\n return value == null ? styleNull : typeof value === \"function\" ? styleFunction : styleConstant;\n }\n d3_selectionPrototype.property = function(name, value) {\n if (arguments.length < 2) {\n if (typeof name === \"string\") return this.node()[name];\n for (value in name) this.each(d3_selection_property(value, name[value]));\n return this;\n }\n return this.each(d3_selection_property(name, value));\n };\n function d3_selection_property(name, value) {\n function propertyNull() {\n delete this[name];\n }\n function propertyConstant() {\n this[name] = value;\n }\n function propertyFunction() {\n var x = value.apply(this, arguments);\n if (x == null) delete this[name]; else this[name] = x;\n }\n return value == null ? propertyNull : typeof value === \"function\" ? propertyFunction : propertyConstant;\n }\n d3_selectionPrototype.text = function(value) {\n return arguments.length ? this.each(typeof value === \"function\" ? function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n } : value == null ? function() {\n this.textContent = \"\";\n } : function() {\n this.textContent = value;\n }) : this.node().textContent;\n };\n d3_selectionPrototype.html = function(value) {\n return arguments.length ? this.each(typeof value === \"function\" ? function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n } : value == null ? function() {\n this.innerHTML = \"\";\n } : function() {\n this.innerHTML = value;\n }) : this.node().innerHTML;\n };\n d3_selectionPrototype.append = function(name) {\n name = d3_selection_creator(name);\n return this.select(function() {\n return this.appendChild(name.apply(this, arguments));\n });\n };\n function d3_selection_creator(name) {\n function create() {\n var document = this.ownerDocument, namespace = this.namespaceURI;\n return namespace ? document.createElementNS(namespace, name) : document.createElement(name);\n }\n function createNS() {\n return this.ownerDocument.createElementNS(name.space, name.local);\n }\n return typeof name === \"function\" ? name : (name = d3.ns.qualify(name)).local ? createNS : create;\n }\n d3_selectionPrototype.insert = function(name, before) {\n name = d3_selection_creator(name);\n before = d3_selection_selector(before);\n return this.select(function() {\n return this.insertBefore(name.apply(this, arguments), before.apply(this, arguments) || null);\n });\n };\n d3_selectionPrototype.remove = function() {\n return this.each(d3_selectionRemove);\n };\n function d3_selectionRemove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n }\n d3_selectionPrototype.data = function(value, key) {\n var i = -1, n = this.length, group, node;\n if (!arguments.length) {\n value = new Array(n = (group = this[0]).length);\n while (++i < n) {\n if (node = group[i]) {\n value[i] = node.__data__;\n }\n }\n return value;\n }\n function bind(group, groupData) {\n var i, n = group.length, m = groupData.length, n0 = Math.min(n, m), updateNodes = new Array(m), enterNodes = new Array(m), exitNodes = new Array(n), node, nodeData;\n if (key) {\n var nodeByKeyValue = new d3_Map(), keyValues = new Array(n), keyValue;\n for (i = -1; ++i < n; ) {\n if (nodeByKeyValue.has(keyValue = key.call(node = group[i], node.__data__, i))) {\n exitNodes[i] = node;\n } else {\n nodeByKeyValue.set(keyValue, node);\n }\n keyValues[i] = keyValue;\n }\n for (i = -1; ++i < m; ) {\n if (!(node = nodeByKeyValue.get(keyValue = key.call(groupData, nodeData = groupData[i], i)))) {\n enterNodes[i] = d3_selection_dataNode(nodeData);\n } else if (node !== true) {\n updateNodes[i] = node;\n node.__data__ = nodeData;\n }\n nodeByKeyValue.set(keyValue, true);\n }\n for (i = -1; ++i < n; ) {\n if (nodeByKeyValue.get(keyValues[i]) !== true) {\n exitNodes[i] = group[i];\n }\n }\n } else {\n for (i = -1; ++i < n0; ) {\n node = group[i];\n nodeData = groupData[i];\n if (node) {\n node.__data__ = nodeData;\n updateNodes[i] = node;\n } else {\n enterNodes[i] = d3_selection_dataNode(nodeData);\n }\n }\n for (;i < m; ++i) {\n enterNodes[i] = d3_selection_dataNode(groupData[i]);\n }\n for (;i < n; ++i) {\n exitNodes[i] = group[i];\n }\n }\n enterNodes.update = updateNodes;\n enterNodes.parentNode = updateNodes.parentNode = exitNodes.parentNode = group.parentNode;\n enter.push(enterNodes);\n update.push(updateNodes);\n exit.push(exitNodes);\n }\n var enter = d3_selection_enter([]), update = d3_selection([]), exit = d3_selection([]);\n if (typeof value === \"function\") {\n while (++i < n) {\n bind(group = this[i], value.call(group, group.parentNode.__data__, i));\n }\n } else {\n while (++i < n) {\n bind(group = this[i], value);\n }\n }\n update.enter = function() {\n return enter;\n };\n update.exit = function() {\n return exit;\n };\n return update;\n };\n function d3_selection_dataNode(data) {\n return {\n __data__: data\n };\n }\n d3_selectionPrototype.datum = function(value) {\n return arguments.length ? this.property(\"__data__\", value) : this.property(\"__data__\");\n };\n d3_selectionPrototype.filter = function(filter) {\n var subgroups = [], subgroup, group, node;\n if (typeof filter !== \"function\") filter = d3_selection_filter(filter);\n for (var j = 0, m = this.length; j < m; j++) {\n subgroups.push(subgroup = []);\n subgroup.parentNode = (group = this[j]).parentNode;\n for (var i = 0, n = group.length; i < n; i++) {\n if ((node = group[i]) && filter.call(node, node.__data__, i, j)) {\n subgroup.push(node);\n }\n }\n }\n return d3_selection(subgroups);\n };\n function d3_selection_filter(selector) {\n return function() {\n return d3_selectMatches(this, selector);\n };\n }\n d3_selectionPrototype.order = function() {\n for (var j = -1, m = this.length; ++j < m; ) {\n for (var group = this[j], i = group.length - 1, next = group[i], node; --i >= 0; ) {\n if (node = group[i]) {\n if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n return this;\n };\n d3_selectionPrototype.sort = function(comparator) {\n comparator = d3_selection_sortComparator.apply(this, arguments);\n for (var j = -1, m = this.length; ++j < m; ) this[j].sort(comparator);\n return this.order();\n };\n function d3_selection_sortComparator(comparator) {\n if (!arguments.length) comparator = d3_ascending;\n return function(a, b) {\n return a && b ? comparator(a.__data__, b.__data__) : !a - !b;\n };\n }\n d3_selectionPrototype.each = function(callback) {\n return d3_selection_each(this, function(node, i, j) {\n callback.call(node, node.__data__, i, j);\n });\n };\n function d3_selection_each(groups, callback) {\n for (var j = 0, m = groups.length; j < m; j++) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; i++) {\n if (node = group[i]) callback(node, i, j);\n }\n }\n return groups;\n }\n d3_selectionPrototype.call = function(callback) {\n var args = d3_array(arguments);\n callback.apply(args[0] = this, args);\n return this;\n };\n d3_selectionPrototype.empty = function() {\n return !this.node();\n };\n d3_selectionPrototype.node = function() {\n for (var j = 0, m = this.length; j < m; j++) {\n for (var group = this[j], i = 0, n = group.length; i < n; i++) {\n var node = group[i];\n if (node) return node;\n }\n }\n return null;\n };\n d3_selectionPrototype.size = function() {\n var n = 0;\n d3_selection_each(this, function() {\n ++n;\n });\n return n;\n };\n function d3_selection_enter(selection) {\n d3_subclass(selection, d3_selection_enterPrototype);\n return selection;\n }\n var d3_selection_enterPrototype = [];\n d3.selection.enter = d3_selection_enter;\n d3.selection.enter.prototype = d3_selection_enterPrototype;\n d3_selection_enterPrototype.append = d3_selectionPrototype.append;\n d3_selection_enterPrototype.empty = d3_selectionPrototype.empty;\n d3_selection_enterPrototype.node = d3_selectionPrototype.node;\n d3_selection_enterPrototype.call = d3_selectionPrototype.call;\n d3_selection_enterPrototype.size = d3_selectionPrototype.size;\n d3_selection_enterPrototype.select = function(selector) {\n var subgroups = [], subgroup, subnode, upgroup, group, node;\n for (var j = -1, m = this.length; ++j < m; ) {\n upgroup = (group = this[j]).update;\n subgroups.push(subgroup = []);\n subgroup.parentNode = group.parentNode;\n for (var i = -1, n = group.length; ++i < n; ) {\n if (node = group[i]) {\n subgroup.push(upgroup[i] = subnode = selector.call(group.parentNode, node.__data__, i, j));\n subnode.__data__ = node.__data__;\n } else {\n subgroup.push(null);\n }\n }\n }\n return d3_selection(subgroups);\n };\n d3_selection_enterPrototype.insert = function(name, before) {\n if (arguments.length < 2) before = d3_selection_enterInsertBefore(this);\n return d3_selectionPrototype.insert.call(this, name, before);\n };\n function d3_selection_enterInsertBefore(enter) {\n var i0, j0;\n return function(d, i, j) {\n var group = enter[j].update, n = group.length, node;\n if (j != j0) j0 = j, i0 = 0;\n if (i >= i0) i0 = i + 1;\n while (!(node = group[i0]) && ++i0 < n) ;\n return node;\n };\n }\n d3.select = function(node) {\n var group;\n if (typeof node === \"string\") {\n group = [ d3_select(node, d3_document) ];\n group.parentNode = d3_document.documentElement;\n } else {\n group = [ node ];\n group.parentNode = d3_documentElement(node);\n }\n return d3_selection([ group ]);\n };\n d3.selectAll = function(nodes) {\n var group;\n if (typeof nodes === \"string\") {\n group = d3_array(d3_selectAll(nodes, d3_document));\n group.parentNode = d3_document.documentElement;\n } else {\n group = nodes;\n group.parentNode = null;\n }\n return d3_selection([ group ]);\n };\n d3_selectionPrototype.on = function(type, listener, capture) {\n var n = arguments.length;\n if (n < 3) {\n if (typeof type !== \"string\") {\n if (n < 2) listener = false;\n for (capture in type) this.each(d3_selection_on(capture, type[capture], listener));\n return this;\n }\n if (n < 2) return (n = this.node()[\"__on\" + type]) && n._;\n capture = false;\n }\n return this.each(d3_selection_on(type, listener, capture));\n };\n function d3_selection_on(type, listener, capture) {\n var name = \"__on\" + type, i = type.indexOf(\".\"), wrap = d3_selection_onListener;\n if (i > 0) type = type.slice(0, i);\n var filter = d3_selection_onFilters.get(type);\n if (filter) type = filter, wrap = d3_selection_onFilter;\n function onRemove() {\n var l = this[name];\n if (l) {\n this.removeEventListener(type, l, l.$);\n delete this[name];\n }\n }\n function onAdd() {\n var l = wrap(listener, d3_array(arguments));\n onRemove.call(this);\n this.addEventListener(type, this[name] = l, l.$ = capture);\n l._ = listener;\n }\n function removeAll() {\n var re = new RegExp(\"^__on([^.]+)\" + d3.requote(type) + \"$\"), match;\n for (var name in this) {\n if (match = name.match(re)) {\n var l = this[name];\n this.removeEventListener(match[1], l, l.$);\n delete this[name];\n }\n }\n }\n return i ? listener ? onAdd : onRemove : listener ? d3_noop : removeAll;\n }\n var d3_selection_onFilters = d3.map({\n mouseenter: \"mouseover\",\n mouseleave: \"mouseout\"\n });\n if (d3_document) {\n d3_selection_onFilters.forEach(function(k) {\n if (\"on\" + k in d3_document) d3_selection_onFilters.remove(k);\n });\n }\n function d3_selection_onListener(listener, argumentz) {\n return function(e) {\n var o = d3.event;\n d3.event = e;\n argumentz[0] = this.__data__;\n try {\n listener.apply(this, argumentz);\n } finally {\n d3.event = o;\n }\n };\n }\n function d3_selection_onFilter(listener, argumentz) {\n var l = d3_selection_onListener(listener, argumentz);\n return function(e) {\n var target = this, related = e.relatedTarget;\n if (!related || related !== target && !(related.compareDocumentPosition(target) & 8)) {\n l.call(target, e);\n }\n };\n }\n var d3_event_dragSelect, d3_event_dragId = 0;\n function d3_event_dragSuppress(node) {\n var name = \".dragsuppress-\" + ++d3_event_dragId, click = \"click\" + name, w = d3.select(d3_window(node)).on(\"touchmove\" + name, d3_eventPreventDefault).on(\"dragstart\" + name, d3_eventPreventDefault).on(\"selectstart\" + name, d3_eventPreventDefault);\n if (d3_event_dragSelect == null) {\n d3_event_dragSelect = \"onselectstart\" in node ? false : d3_vendorSymbol(node.style, \"userSelect\");\n }\n if (d3_event_dragSelect) {\n var style = d3_documentElement(node).style, select = style[d3_event_dragSelect];\n style[d3_event_dragSelect] = \"none\";\n }\n return function(suppressClick) {\n w.on(name, null);\n if (d3_event_dragSelect) style[d3_event_dragSelect] = select;\n if (suppressClick) {\n var off = function() {\n w.on(click, null);\n };\n w.on(click, function() {\n d3_eventPreventDefault();\n off();\n }, true);\n setTimeout(off, 0);\n }\n };\n }\n d3.mouse = function(container) {\n return d3_mousePoint(container, d3_eventSource());\n };\n var d3_mouse_bug44083 = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n function d3_mousePoint(container, e) {\n if (e.changedTouches) e = e.changedTouches[0];\n var svg = container.ownerSVGElement || container;\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n if (d3_mouse_bug44083 < 0) {\n var window = d3_window(container);\n if (window.scrollX || window.scrollY) {\n svg = d3.select(\"body\").append(\"svg\").style({\n position: \"absolute\",\n top: 0,\n left: 0,\n margin: 0,\n padding: 0,\n border: \"none\"\n }, \"important\");\n var ctm = svg[0][0].getScreenCTM();\n d3_mouse_bug44083 = !(ctm.f || ctm.e);\n svg.remove();\n }\n }\n if (d3_mouse_bug44083) point.x = e.pageX, point.y = e.pageY; else point.x = e.clientX, \n point.y = e.clientY;\n point = point.matrixTransform(container.getScreenCTM().inverse());\n return [ point.x, point.y ];\n }\n var rect = container.getBoundingClientRect();\n return [ e.clientX - rect.left - container.clientLeft, e.clientY - rect.top - container.clientTop ];\n }\n d3.touch = function(container, touches, identifier) {\n if (arguments.length < 3) identifier = touches, touches = d3_eventSource().changedTouches;\n if (touches) for (var i = 0, n = touches.length, touch; i < n; ++i) {\n if ((touch = touches[i]).identifier === identifier) {\n return d3_mousePoint(container, touch);\n }\n }\n };\n d3.behavior.drag = function() {\n var event = d3_eventDispatch(drag, \"drag\", \"dragstart\", \"dragend\"), origin = null, mousedown = dragstart(d3_noop, d3.mouse, d3_window, \"mousemove\", \"mouseup\"), touchstart = dragstart(d3_behavior_dragTouchId, d3.touch, d3_identity, \"touchmove\", \"touchend\");\n function drag() {\n this.on(\"mousedown.drag\", mousedown).on(\"touchstart.drag\", touchstart);\n }\n function dragstart(id, position, subject, move, end) {\n return function() {\n var that = this, target = d3.event.target, parent = that.parentNode, dispatch = event.of(that, arguments), dragged = 0, dragId = id(), dragName = \".drag\" + (dragId == null ? \"\" : \"-\" + dragId), dragOffset, dragSubject = d3.select(subject(target)).on(move + dragName, moved).on(end + dragName, ended), dragRestore = d3_event_dragSuppress(target), position0 = position(parent, dragId);\n if (origin) {\n dragOffset = origin.apply(that, arguments);\n dragOffset = [ dragOffset.x - position0[0], dragOffset.y - position0[1] ];\n } else {\n dragOffset = [ 0, 0 ];\n }\n dispatch({\n type: \"dragstart\"\n });\n function moved() {\n var position1 = position(parent, dragId), dx, dy;\n if (!position1) return;\n dx = position1[0] - position0[0];\n dy = position1[1] - position0[1];\n dragged |= dx | dy;\n position0 = position1;\n dispatch({\n type: \"drag\",\n x: position1[0] + dragOffset[0],\n y: position1[1] + dragOffset[1],\n dx: dx,\n dy: dy\n });\n }\n function ended() {\n if (!position(parent, dragId)) return;\n dragSubject.on(move + dragName, null).on(end + dragName, null);\n dragRestore(dragged && d3.event.target === target);\n dispatch({\n type: \"dragend\"\n });\n }\n };\n }\n drag.origin = function(x) {\n if (!arguments.length) return origin;\n origin = x;\n return drag;\n };\n return d3.rebind(drag, event, \"on\");\n };\n function d3_behavior_dragTouchId() {\n return d3.event.changedTouches[0].identifier;\n }\n d3.touches = function(container, touches) {\n if (arguments.length < 2) touches = d3_eventSource().touches;\n return touches ? d3_array(touches).map(function(touch) {\n var point = d3_mousePoint(container, touch);\n point.identifier = touch.identifier;\n return point;\n }) : [];\n };\n var ε = 1e-6, ε2 = ε * ε, π = Math.PI, τ = 2 * π, τε = τ - ε, halfπ = π / 2, d3_radians = π / 180, d3_degrees = 180 / π;\n function d3_sgn(x) {\n return x > 0 ? 1 : x < 0 ? -1 : 0;\n }\n function d3_cross2d(a, b, c) {\n return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]);\n }\n function d3_acos(x) {\n return x > 1 ? 0 : x < -1 ? π : Math.acos(x);\n }\n function d3_asin(x) {\n return x > 1 ? halfπ : x < -1 ? -halfπ : Math.asin(x);\n }\n function d3_sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n }\n function d3_cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n }\n function d3_tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n }\n function d3_haversin(x) {\n return (x = Math.sin(x / 2)) * x;\n }\n var ρ = Math.SQRT2, ρ2 = 2, ρ4 = 4;\n d3.interpolateZoom = function(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2], ux1 = p1[0], uy1 = p1[1], w1 = p1[2];\n var dx = ux1 - ux0, dy = uy1 - uy0, d2 = dx * dx + dy * dy, d1 = Math.sqrt(d2), b0 = (w1 * w1 - w0 * w0 + ρ4 * d2) / (2 * w0 * ρ2 * d1), b1 = (w1 * w1 - w0 * w0 - ρ4 * d2) / (2 * w1 * ρ2 * d1), r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0), r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1), dr = r1 - r0, S = (dr || Math.log(w1 / w0)) / ρ;\n function interpolate(t) {\n var s = t * S;\n if (dr) {\n var coshr0 = d3_cosh(r0), u = w0 / (ρ2 * d1) * (coshr0 * d3_tanh(ρ * s + r0) - d3_sinh(r0));\n return [ ux0 + u * dx, uy0 + u * dy, w0 * coshr0 / d3_cosh(ρ * s + r0) ];\n }\n return [ ux0 + t * dx, uy0 + t * dy, w0 * Math.exp(ρ * s) ];\n }\n interpolate.duration = S * 1e3;\n return interpolate;\n };\n d3.behavior.zoom = function() {\n var view = {\n x: 0,\n y: 0,\n k: 1\n }, translate0, center0, center, size = [ 960, 500 ], scaleExtent = d3_behavior_zoomInfinity, duration = 250, zooming = 0, mousedown = \"mousedown.zoom\", mousemove = \"mousemove.zoom\", mouseup = \"mouseup.zoom\", mousewheelTimer, touchstart = \"touchstart.zoom\", touchtime, event = d3_eventDispatch(zoom, \"zoomstart\", \"zoom\", \"zoomend\"), x0, x1, y0, y1;\n if (!d3_behavior_zoomWheel) {\n d3_behavior_zoomWheel = \"onwheel\" in d3_document ? (d3_behavior_zoomDelta = function() {\n return -d3.event.deltaY * (d3.event.deltaMode ? 120 : 1);\n }, \"wheel\") : \"onmousewheel\" in d3_document ? (d3_behavior_zoomDelta = function() {\n return d3.event.wheelDelta;\n }, \"mousewheel\") : (d3_behavior_zoomDelta = function() {\n return -d3.event.detail;\n }, \"MozMousePixelScroll\");\n }\n function zoom(g) {\n g.on(mousedown, mousedowned).on(d3_behavior_zoomWheel + \".zoom\", mousewheeled).on(\"dblclick.zoom\", dblclicked).on(touchstart, touchstarted);\n }\n zoom.event = function(g) {\n g.each(function() {\n var dispatch = event.of(this, arguments), view1 = view;\n if (d3_transitionInheritId) {\n d3.select(this).transition().each(\"start.zoom\", function() {\n view = this.__chart__ || {\n x: 0,\n y: 0,\n k: 1\n };\n zoomstarted(dispatch);\n }).tween(\"zoom:zoom\", function() {\n var dx = size[0], dy = size[1], cx = center0 ? center0[0] : dx / 2, cy = center0 ? center0[1] : dy / 2, i = d3.interpolateZoom([ (cx - view.x) / view.k, (cy - view.y) / view.k, dx / view.k ], [ (cx - view1.x) / view1.k, (cy - view1.y) / view1.k, dx / view1.k ]);\n return function(t) {\n var l = i(t), k = dx / l[2];\n this.__chart__ = view = {\n x: cx - l[0] * k,\n y: cy - l[1] * k,\n k: k\n };\n zoomed(dispatch);\n };\n }).each(\"interrupt.zoom\", function() {\n zoomended(dispatch);\n }).each(\"end.zoom\", function() {\n zoomended(dispatch);\n });\n } else {\n this.__chart__ = view;\n zoomstarted(dispatch);\n zoomed(dispatch);\n zoomended(dispatch);\n }\n });\n };\n zoom.translate = function(_) {\n if (!arguments.length) return [ view.x, view.y ];\n view = {\n x: +_[0],\n y: +_[1],\n k: view.k\n };\n rescale();\n return zoom;\n };\n zoom.scale = function(_) {\n if (!arguments.length) return view.k;\n view = {\n x: view.x,\n y: view.y,\n k: +_\n };\n rescale();\n return zoom;\n };\n zoom.scaleExtent = function(_) {\n if (!arguments.length) return scaleExtent;\n scaleExtent = _ == null ? d3_behavior_zoomInfinity : [ +_[0], +_[1] ];\n return zoom;\n };\n zoom.center = function(_) {\n if (!arguments.length) return center;\n center = _ && [ +_[0], +_[1] ];\n return zoom;\n };\n zoom.size = function(_) {\n if (!arguments.length) return size;\n size = _ && [ +_[0], +_[1] ];\n return zoom;\n };\n zoom.duration = function(_) {\n if (!arguments.length) return duration;\n duration = +_;\n return zoom;\n };\n zoom.x = function(z) {\n if (!arguments.length) return x1;\n x1 = z;\n x0 = z.copy();\n view = {\n x: 0,\n y: 0,\n k: 1\n };\n return zoom;\n };\n zoom.y = function(z) {\n if (!arguments.length) return y1;\n y1 = z;\n y0 = z.copy();\n view = {\n x: 0,\n y: 0,\n k: 1\n };\n return zoom;\n };\n function location(p) {\n return [ (p[0] - view.x) / view.k, (p[1] - view.y) / view.k ];\n }\n function point(l) {\n return [ l[0] * view.k + view.x, l[1] * view.k + view.y ];\n }\n function scaleTo(s) {\n view.k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], s));\n }\n function translateTo(p, l) {\n l = point(l);\n view.x += p[0] - l[0];\n view.y += p[1] - l[1];\n }\n function zoomTo(that, p, l, k) {\n that.__chart__ = {\n x: view.x,\n y: view.y,\n k: view.k\n };\n scaleTo(Math.pow(2, k));\n translateTo(center0 = p, l);\n that = d3.select(that);\n if (duration > 0) that = that.transition().duration(duration);\n that.call(zoom.event);\n }\n function rescale() {\n if (x1) x1.domain(x0.range().map(function(x) {\n return (x - view.x) / view.k;\n }).map(x0.invert));\n if (y1) y1.domain(y0.range().map(function(y) {\n return (y - view.y) / view.k;\n }).map(y0.invert));\n }\n function zoomstarted(dispatch) {\n if (!zooming++) dispatch({\n type: \"zoomstart\"\n });\n }\n function zoomed(dispatch) {\n rescale();\n dispatch({\n type: \"zoom\",\n scale: view.k,\n translate: [ view.x, view.y ]\n });\n }\n function zoomended(dispatch) {\n if (!--zooming) dispatch({\n type: \"zoomend\"\n });\n center0 = null;\n }\n function mousedowned() {\n var that = this, target = d3.event.target, dispatch = event.of(that, arguments), dragged = 0, subject = d3.select(d3_window(that)).on(mousemove, moved).on(mouseup, ended), location0 = location(d3.mouse(that)), dragRestore = d3_event_dragSuppress(that);\n d3_selection_interrupt.call(that);\n zoomstarted(dispatch);\n function moved() {\n dragged = 1;\n translateTo(d3.mouse(that), location0);\n zoomed(dispatch);\n }\n function ended() {\n subject.on(mousemove, null).on(mouseup, null);\n dragRestore(dragged && d3.event.target === target);\n zoomended(dispatch);\n }\n }\n function touchstarted() {\n var that = this, dispatch = event.of(that, arguments), locations0 = {}, distance0 = 0, scale0, zoomName = \".zoom-\" + d3.event.changedTouches[0].identifier, touchmove = \"touchmove\" + zoomName, touchend = \"touchend\" + zoomName, targets = [], subject = d3.select(that), dragRestore = d3_event_dragSuppress(that);\n started();\n zoomstarted(dispatch);\n subject.on(mousedown, null).on(touchstart, started);\n function relocate() {\n var touches = d3.touches(that);\n scale0 = view.k;\n touches.forEach(function(t) {\n if (t.identifier in locations0) locations0[t.identifier] = location(t);\n });\n return touches;\n }\n function started() {\n var target = d3.event.target;\n d3.select(target).on(touchmove, moved).on(touchend, ended);\n targets.push(target);\n var changed = d3.event.changedTouches;\n for (var i = 0, n = changed.length; i < n; ++i) {\n locations0[changed[i].identifier] = null;\n }\n var touches = relocate(), now = Date.now();\n if (touches.length === 1) {\n if (now - touchtime < 500) {\n var p = touches[0];\n zoomTo(that, p, locations0[p.identifier], Math.floor(Math.log(view.k) / Math.LN2) + 1);\n d3_eventPreventDefault();\n }\n touchtime = now;\n } else if (touches.length > 1) {\n var p = touches[0], q = touches[1], dx = p[0] - q[0], dy = p[1] - q[1];\n distance0 = dx * dx + dy * dy;\n }\n }\n function moved() {\n var touches = d3.touches(that), p0, l0, p1, l1;\n d3_selection_interrupt.call(that);\n for (var i = 0, n = touches.length; i < n; ++i, l1 = null) {\n p1 = touches[i];\n if (l1 = locations0[p1.identifier]) {\n if (l0) break;\n p0 = p1, l0 = l1;\n }\n }\n if (l1) {\n var distance1 = (distance1 = p1[0] - p0[0]) * distance1 + (distance1 = p1[1] - p0[1]) * distance1, scale1 = distance0 && Math.sqrt(distance1 / distance0);\n p0 = [ (p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2 ];\n l0 = [ (l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2 ];\n scaleTo(scale1 * scale0);\n }\n touchtime = null;\n translateTo(p0, l0);\n zoomed(dispatch);\n }\n function ended() {\n if (d3.event.touches.length) {\n var changed = d3.event.changedTouches;\n for (var i = 0, n = changed.length; i < n; ++i) {\n delete locations0[changed[i].identifier];\n }\n for (var identifier in locations0) {\n return void relocate();\n }\n }\n d3.selectAll(targets).on(zoomName, null);\n subject.on(mousedown, mousedowned).on(touchstart, touchstarted);\n dragRestore();\n zoomended(dispatch);\n }\n }\n function mousewheeled() {\n var dispatch = event.of(this, arguments);\n if (mousewheelTimer) clearTimeout(mousewheelTimer); else translate0 = location(center0 = center || d3.mouse(this)), \n d3_selection_interrupt.call(this), zoomstarted(dispatch);\n mousewheelTimer = setTimeout(function() {\n mousewheelTimer = null;\n zoomended(dispatch);\n }, 50);\n d3_eventPreventDefault();\n scaleTo(Math.pow(2, d3_behavior_zoomDelta() * .002) * view.k);\n translateTo(center0, translate0);\n zoomed(dispatch);\n }\n function dblclicked() {\n var p = d3.mouse(this), k = Math.log(view.k) / Math.LN2;\n zoomTo(this, p, location(p), d3.event.shiftKey ? Math.ceil(k) - 1 : Math.floor(k) + 1);\n }\n return d3.rebind(zoom, event, \"on\");\n };\n var d3_behavior_zoomInfinity = [ 0, Infinity ], d3_behavior_zoomDelta, d3_behavior_zoomWheel;\n d3.color = d3_color;\n function d3_color() {}\n d3_color.prototype.toString = function() {\n return this.rgb() + \"\";\n };\n d3.hsl = d3_hsl;\n function d3_hsl(h, s, l) {\n return this instanceof d3_hsl ? void (this.h = +h, this.s = +s, this.l = +l) : arguments.length < 2 ? h instanceof d3_hsl ? new d3_hsl(h.h, h.s, h.l) : d3_rgb_parse(\"\" + h, d3_rgb_hsl, d3_hsl) : new d3_hsl(h, s, l);\n }\n var d3_hslPrototype = d3_hsl.prototype = new d3_color();\n d3_hslPrototype.brighter = function(k) {\n k = Math.pow(.7, arguments.length ? k : 1);\n return new d3_hsl(this.h, this.s, this.l / k);\n };\n d3_hslPrototype.darker = function(k) {\n k = Math.pow(.7, arguments.length ? k : 1);\n return new d3_hsl(this.h, this.s, k * this.l);\n };\n d3_hslPrototype.rgb = function() {\n return d3_hsl_rgb(this.h, this.s, this.l);\n };\n function d3_hsl_rgb(h, s, l) {\n var m1, m2;\n h = isNaN(h) ? 0 : (h %= 360) < 0 ? h + 360 : h;\n s = isNaN(s) ? 0 : s < 0 ? 0 : s > 1 ? 1 : s;\n l = l < 0 ? 0 : l > 1 ? 1 : l;\n m2 = l <= .5 ? l * (1 + s) : l + s - l * s;\n m1 = 2 * l - m2;\n function v(h) {\n if (h > 360) h -= 360; else if (h < 0) h += 360;\n if (h < 60) return m1 + (m2 - m1) * h / 60;\n if (h < 180) return m2;\n if (h < 240) return m1 + (m2 - m1) * (240 - h) / 60;\n return m1;\n }\n function vv(h) {\n return Math.round(v(h) * 255);\n }\n return new d3_rgb(vv(h + 120), vv(h), vv(h - 120));\n }\n d3.hcl = d3_hcl;\n function d3_hcl(h, c, l) {\n return this instanceof d3_hcl ? void (this.h = +h, this.c = +c, this.l = +l) : arguments.length < 2 ? h instanceof d3_hcl ? new d3_hcl(h.h, h.c, h.l) : h instanceof d3_lab ? d3_lab_hcl(h.l, h.a, h.b) : d3_lab_hcl((h = d3_rgb_lab((h = d3.rgb(h)).r, h.g, h.b)).l, h.a, h.b) : new d3_hcl(h, c, l);\n }\n var d3_hclPrototype = d3_hcl.prototype = new d3_color();\n d3_hclPrototype.brighter = function(k) {\n return new d3_hcl(this.h, this.c, Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1)));\n };\n d3_hclPrototype.darker = function(k) {\n return new d3_hcl(this.h, this.c, Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1)));\n };\n d3_hclPrototype.rgb = function() {\n return d3_hcl_lab(this.h, this.c, this.l).rgb();\n };\n function d3_hcl_lab(h, c, l) {\n if (isNaN(h)) h = 0;\n if (isNaN(c)) c = 0;\n return new d3_lab(l, Math.cos(h *= d3_radians) * c, Math.sin(h) * c);\n }\n d3.lab = d3_lab;\n function d3_lab(l, a, b) {\n return this instanceof d3_lab ? void (this.l = +l, this.a = +a, this.b = +b) : arguments.length < 2 ? l instanceof d3_lab ? new d3_lab(l.l, l.a, l.b) : l instanceof d3_hcl ? d3_hcl_lab(l.h, l.c, l.l) : d3_rgb_lab((l = d3_rgb(l)).r, l.g, l.b) : new d3_lab(l, a, b);\n }\n var d3_lab_K = 18;\n var d3_lab_X = .95047, d3_lab_Y = 1, d3_lab_Z = 1.08883;\n var d3_labPrototype = d3_lab.prototype = new d3_color();\n d3_labPrototype.brighter = function(k) {\n return new d3_lab(Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1)), this.a, this.b);\n };\n d3_labPrototype.darker = function(k) {\n return new d3_lab(Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1)), this.a, this.b);\n };\n d3_labPrototype.rgb = function() {\n return d3_lab_rgb(this.l, this.a, this.b);\n };\n function d3_lab_rgb(l, a, b) {\n var y = (l + 16) / 116, x = y + a / 500, z = y - b / 200;\n x = d3_lab_xyz(x) * d3_lab_X;\n y = d3_lab_xyz(y) * d3_lab_Y;\n z = d3_lab_xyz(z) * d3_lab_Z;\n return new d3_rgb(d3_xyz_rgb(3.2404542 * x - 1.5371385 * y - .4985314 * z), d3_xyz_rgb(-.969266 * x + 1.8760108 * y + .041556 * z), d3_xyz_rgb(.0556434 * x - .2040259 * y + 1.0572252 * z));\n }\n function d3_lab_hcl(l, a, b) {\n return l > 0 ? new d3_hcl(Math.atan2(b, a) * d3_degrees, Math.sqrt(a * a + b * b), l) : new d3_hcl(NaN, NaN, l);\n }\n function d3_lab_xyz(x) {\n return x > .206893034 ? x * x * x : (x - 4 / 29) / 7.787037;\n }\n function d3_xyz_lab(x) {\n return x > .008856 ? Math.pow(x, 1 / 3) : 7.787037 * x + 4 / 29;\n }\n function d3_xyz_rgb(r) {\n return Math.round(255 * (r <= .00304 ? 12.92 * r : 1.055 * Math.pow(r, 1 / 2.4) - .055));\n }\n d3.rgb = d3_rgb;\n function d3_rgb(r, g, b) {\n return this instanceof d3_rgb ? void (this.r = ~~r, this.g = ~~g, this.b = ~~b) : arguments.length < 2 ? r instanceof d3_rgb ? new d3_rgb(r.r, r.g, r.b) : d3_rgb_parse(\"\" + r, d3_rgb, d3_hsl_rgb) : new d3_rgb(r, g, b);\n }\n function d3_rgbNumber(value) {\n return new d3_rgb(value >> 16, value >> 8 & 255, value & 255);\n }\n function d3_rgbString(value) {\n return d3_rgbNumber(value) + \"\";\n }\n var d3_rgbPrototype = d3_rgb.prototype = new d3_color();\n d3_rgbPrototype.brighter = function(k) {\n k = Math.pow(.7, arguments.length ? k : 1);\n var r = this.r, g = this.g, b = this.b, i = 30;\n if (!r && !g && !b) return new d3_rgb(i, i, i);\n if (r && r < i) r = i;\n if (g && g < i) g = i;\n if (b && b < i) b = i;\n return new d3_rgb(Math.min(255, r / k), Math.min(255, g / k), Math.min(255, b / k));\n };\n d3_rgbPrototype.darker = function(k) {\n k = Math.pow(.7, arguments.length ? k : 1);\n return new d3_rgb(k * this.r, k * this.g, k * this.b);\n };\n d3_rgbPrototype.hsl = function() {\n return d3_rgb_hsl(this.r, this.g, this.b);\n };\n d3_rgbPrototype.toString = function() {\n return \"#\" + d3_rgb_hex(this.r) + d3_rgb_hex(this.g) + d3_rgb_hex(this.b);\n };\n function d3_rgb_hex(v) {\n return v < 16 ? \"0\" + Math.max(0, v).toString(16) : Math.min(255, v).toString(16);\n }\n function d3_rgb_parse(format, rgb, hsl) {\n var r = 0, g = 0, b = 0, m1, m2, color;\n m1 = /([a-z]+)\\((.*)\\)/i.exec(format);\n if (m1) {\n m2 = m1[2].split(\",\");\n switch (m1[1]) {\n case \"hsl\":\n {\n return hsl(parseFloat(m2[0]), parseFloat(m2[1]) / 100, parseFloat(m2[2]) / 100);\n }\n\n case \"rgb\":\n {\n return rgb(d3_rgb_parseNumber(m2[0]), d3_rgb_parseNumber(m2[1]), d3_rgb_parseNumber(m2[2]));\n }\n }\n }\n if (color = d3_rgb_names.get(format.toLowerCase())) {\n return rgb(color.r, color.g, color.b);\n }\n if (format != null && format.charAt(0) === \"#\" && !isNaN(color = parseInt(format.slice(1), 16))) {\n if (format.length === 4) {\n r = (color & 3840) >> 4;\n r = r >> 4 | r;\n g = color & 240;\n g = g >> 4 | g;\n b = color & 15;\n b = b << 4 | b;\n } else if (format.length === 7) {\n r = (color & 16711680) >> 16;\n g = (color & 65280) >> 8;\n b = color & 255;\n }\n }\n return rgb(r, g, b);\n }\n function d3_rgb_hsl(r, g, b) {\n var min = Math.min(r /= 255, g /= 255, b /= 255), max = Math.max(r, g, b), d = max - min, h, s, l = (max + min) / 2;\n if (d) {\n s = l < .5 ? d / (max + min) : d / (2 - max - min);\n if (r == max) h = (g - b) / d + (g < b ? 6 : 0); else if (g == max) h = (b - r) / d + 2; else h = (r - g) / d + 4;\n h *= 60;\n } else {\n h = NaN;\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new d3_hsl(h, s, l);\n }\n function d3_rgb_lab(r, g, b) {\n r = d3_rgb_xyz(r);\n g = d3_rgb_xyz(g);\n b = d3_rgb_xyz(b);\n var x = d3_xyz_lab((.4124564 * r + .3575761 * g + .1804375 * b) / d3_lab_X), y = d3_xyz_lab((.2126729 * r + .7151522 * g + .072175 * b) / d3_lab_Y), z = d3_xyz_lab((.0193339 * r + .119192 * g + .9503041 * b) / d3_lab_Z);\n return d3_lab(116 * y - 16, 500 * (x - y), 200 * (y - z));\n }\n function d3_rgb_xyz(r) {\n return (r /= 255) <= .04045 ? r / 12.92 : Math.pow((r + .055) / 1.055, 2.4);\n }\n function d3_rgb_parseNumber(c) {\n var f = parseFloat(c);\n return c.charAt(c.length - 1) === \"%\" ? Math.round(f * 2.55) : f;\n }\n var d3_rgb_names = d3.map({\n aliceblue: 15792383,\n antiquewhite: 16444375,\n aqua: 65535,\n aquamarine: 8388564,\n azure: 15794175,\n beige: 16119260,\n bisque: 16770244,\n black: 0,\n blanchedalmond: 16772045,\n blue: 255,\n blueviolet: 9055202,\n brown: 10824234,\n burlywood: 14596231,\n cadetblue: 6266528,\n chartreuse: 8388352,\n chocolate: 13789470,\n coral: 16744272,\n cornflowerblue: 6591981,\n cornsilk: 16775388,\n crimson: 14423100,\n cyan: 65535,\n darkblue: 139,\n darkcyan: 35723,\n darkgoldenrod: 12092939,\n darkgray: 11119017,\n darkgreen: 25600,\n darkgrey: 11119017,\n darkkhaki: 12433259,\n darkmagenta: 9109643,\n darkolivegreen: 5597999,\n darkorange: 16747520,\n darkorchid: 10040012,\n darkred: 9109504,\n darksalmon: 15308410,\n darkseagreen: 9419919,\n darkslateblue: 4734347,\n darkslategray: 3100495,\n darkslategrey: 3100495,\n darkturquoise: 52945,\n darkviolet: 9699539,\n deeppink: 16716947,\n deepskyblue: 49151,\n dimgray: 6908265,\n dimgrey: 6908265,\n dodgerblue: 2003199,\n firebrick: 11674146,\n floralwhite: 16775920,\n forestgreen: 2263842,\n fuchsia: 16711935,\n gainsboro: 14474460,\n ghostwhite: 16316671,\n gold: 16766720,\n goldenrod: 14329120,\n gray: 8421504,\n green: 32768,\n greenyellow: 11403055,\n grey: 8421504,\n honeydew: 15794160,\n hotpink: 16738740,\n indianred: 13458524,\n indigo: 4915330,\n ivory: 16777200,\n khaki: 15787660,\n lavender: 15132410,\n lavenderblush: 16773365,\n lawngreen: 8190976,\n lemonchiffon: 16775885,\n lightblue: 11393254,\n lightcoral: 15761536,\n lightcyan: 14745599,\n lightgoldenrodyellow: 16448210,\n lightgray: 13882323,\n lightgreen: 9498256,\n lightgrey: 13882323,\n lightpink: 16758465,\n lightsalmon: 16752762,\n lightseagreen: 2142890,\n lightskyblue: 8900346,\n lightslategray: 7833753,\n lightslategrey: 7833753,\n lightsteelblue: 11584734,\n lightyellow: 16777184,\n lime: 65280,\n limegreen: 3329330,\n linen: 16445670,\n magenta: 16711935,\n maroon: 8388608,\n mediumaquamarine: 6737322,\n mediumblue: 205,\n mediumorchid: 12211667,\n mediumpurple: 9662683,\n mediumseagreen: 3978097,\n mediumslateblue: 8087790,\n mediumspringgreen: 64154,\n mediumturquoise: 4772300,\n mediumvioletred: 13047173,\n midnightblue: 1644912,\n mintcream: 16121850,\n mistyrose: 16770273,\n moccasin: 16770229,\n navajowhite: 16768685,\n navy: 128,\n oldlace: 16643558,\n olive: 8421376,\n olivedrab: 7048739,\n orange: 16753920,\n orangered: 16729344,\n orchid: 14315734,\n palegoldenrod: 15657130,\n palegreen: 10025880,\n paleturquoise: 11529966,\n palevioletred: 14381203,\n papayawhip: 16773077,\n peachpuff: 16767673,\n peru: 13468991,\n pink: 16761035,\n plum: 14524637,\n powderblue: 11591910,\n purple: 8388736,\n rebeccapurple: 6697881,\n red: 16711680,\n rosybrown: 12357519,\n royalblue: 4286945,\n saddlebrown: 9127187,\n salmon: 16416882,\n sandybrown: 16032864,\n seagreen: 3050327,\n seashell: 16774638,\n sienna: 10506797,\n silver: 12632256,\n skyblue: 8900331,\n slateblue: 6970061,\n slategray: 7372944,\n slategrey: 7372944,\n snow: 16775930,\n springgreen: 65407,\n steelblue: 4620980,\n tan: 13808780,\n teal: 32896,\n thistle: 14204888,\n tomato: 16737095,\n turquoise: 4251856,\n violet: 15631086,\n wheat: 16113331,\n white: 16777215,\n whitesmoke: 16119285,\n yellow: 16776960,\n yellowgreen: 10145074\n });\n d3_rgb_names.forEach(function(key, value) {\n d3_rgb_names.set(key, d3_rgbNumber(value));\n });\n function d3_functor(v) {\n return typeof v === \"function\" ? v : function() {\n return v;\n };\n }\n d3.functor = d3_functor;\n d3.xhr = d3_xhrType(d3_identity);\n function d3_xhrType(response) {\n return function(url, mimeType, callback) {\n if (arguments.length === 2 && typeof mimeType === \"function\") callback = mimeType, \n mimeType = null;\n return d3_xhr(url, mimeType, response, callback);\n };\n }\n function d3_xhr(url, mimeType, response, callback) {\n var xhr = {}, dispatch = d3.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"), headers = {}, request = new XMLHttpRequest(), responseType = null;\n if (this.XDomainRequest && !(\"withCredentials\" in request) && /^(http(s)?:)?\\/\\//.test(url)) request = new XDomainRequest();\n \"onload\" in request ? request.onload = request.onerror = respond : request.onreadystatechange = function() {\n request.readyState > 3 && respond();\n };\n function respond() {\n var status = request.status, result;\n if (!status && d3_xhrHasResponse(request) || status >= 200 && status < 300 || status === 304) {\n try {\n result = response.call(xhr, request);\n } catch (e) {\n dispatch.error.call(xhr, e);\n return;\n }\n dispatch.load.call(xhr, result);\n } else {\n dispatch.error.call(xhr, request);\n }\n }\n request.onprogress = function(event) {\n var o = d3.event;\n d3.event = event;\n try {\n dispatch.progress.call(xhr, request);\n } finally {\n d3.event = o;\n }\n };\n xhr.header = function(name, value) {\n name = (name + \"\").toLowerCase();\n if (arguments.length < 2) return headers[name];\n if (value == null) delete headers[name]; else headers[name] = value + \"\";\n return xhr;\n };\n xhr.mimeType = function(value) {\n if (!arguments.length) return mimeType;\n mimeType = value == null ? null : value + \"\";\n return xhr;\n };\n xhr.responseType = function(value) {\n if (!arguments.length) return responseType;\n responseType = value;\n return xhr;\n };\n xhr.response = function(value) {\n response = value;\n return xhr;\n };\n [ \"get\", \"post\" ].forEach(function(method) {\n xhr[method] = function() {\n return xhr.send.apply(xhr, [ method ].concat(d3_array(arguments)));\n };\n });\n xhr.send = function(method, data, callback) {\n if (arguments.length === 2 && typeof data === \"function\") callback = data, data = null;\n request.open(method, url, true);\n if (mimeType != null && !(\"accept\" in headers)) headers[\"accept\"] = mimeType + \",*/*\";\n if (request.setRequestHeader) for (var name in headers) request.setRequestHeader(name, headers[name]);\n if (mimeType != null && request.overrideMimeType) request.overrideMimeType(mimeType);\n if (responseType != null) request.responseType = responseType;\n if (callback != null) xhr.on(\"error\", callback).on(\"load\", function(request) {\n callback(null, request);\n });\n dispatch.beforesend.call(xhr, request);\n request.send(data == null ? null : data);\n return xhr;\n };\n xhr.abort = function() {\n request.abort();\n return xhr;\n };\n d3.rebind(xhr, dispatch, \"on\");\n return callback == null ? xhr : xhr.get(d3_xhr_fixCallback(callback));\n }\n function d3_xhr_fixCallback(callback) {\n return callback.length === 1 ? function(error, request) {\n callback(error == null ? request : null);\n } : callback;\n }\n function d3_xhrHasResponse(request) {\n var type = request.responseType;\n return type && type !== \"text\" ? request.response : request.responseText;\n }\n d3.dsv = function(delimiter, mimeType) {\n var reFormat = new RegExp('[\"' + delimiter + \"\\n]\"), delimiterCode = delimiter.charCodeAt(0);\n function dsv(url, row, callback) {\n if (arguments.length < 3) callback = row, row = null;\n var xhr = d3_xhr(url, mimeType, row == null ? response : typedResponse(row), callback);\n xhr.row = function(_) {\n return arguments.length ? xhr.response((row = _) == null ? response : typedResponse(_)) : row;\n };\n return xhr;\n }\n function response(request) {\n return dsv.parse(request.responseText);\n }\n function typedResponse(f) {\n return function(request) {\n return dsv.parse(request.responseText, f);\n };\n }\n dsv.parse = function(text, f) {\n var o;\n return dsv.parseRows(text, function(row, i) {\n if (o) return o(row, i - 1);\n var a = new Function(\"d\", \"return {\" + row.map(function(name, i) {\n return JSON.stringify(name) + \": d[\" + i + \"]\";\n }).join(\",\") + \"}\");\n o = f ? function(row, i) {\n return f(a(row), i);\n } : a;\n });\n };\n dsv.parseRows = function(text, f) {\n var EOL = {}, EOF = {}, rows = [], N = text.length, I = 0, n = 0, t, eol;\n function token() {\n if (I >= N) return EOF;\n if (eol) return eol = false, EOL;\n var j = I;\n if (text.charCodeAt(j) === 34) {\n var i = j;\n while (i++ < N) {\n if (text.charCodeAt(i) === 34) {\n if (text.charCodeAt(i + 1) !== 34) break;\n ++i;\n }\n }\n I = i + 2;\n var c = text.charCodeAt(i + 1);\n if (c === 13) {\n eol = true;\n if (text.charCodeAt(i + 2) === 10) ++I;\n } else if (c === 10) {\n eol = true;\n }\n return text.slice(j + 1, i).replace(/\"\"/g, '\"');\n }\n while (I < N) {\n var c = text.charCodeAt(I++), k = 1;\n if (c === 10) eol = true; else if (c === 13) {\n eol = true;\n if (text.charCodeAt(I) === 10) ++I, ++k;\n } else if (c !== delimiterCode) continue;\n return text.slice(j, I - k);\n }\n return text.slice(j);\n }\n while ((t = token()) !== EOF) {\n var a = [];\n while (t !== EOL && t !== EOF) {\n a.push(t);\n t = token();\n }\n if (f && (a = f(a, n++)) == null) continue;\n rows.push(a);\n }\n return rows;\n };\n dsv.format = function(rows) {\n if (Array.isArray(rows[0])) return dsv.formatRows(rows);\n var fieldSet = new d3_Set(), fields = [];\n rows.forEach(function(row) {\n for (var field in row) {\n if (!fieldSet.has(field)) {\n fields.push(fieldSet.add(field));\n }\n }\n });\n return [ fields.map(formatValue).join(delimiter) ].concat(rows.map(function(row) {\n return fields.map(function(field) {\n return formatValue(row[field]);\n }).join(delimiter);\n })).join(\"\\n\");\n };\n dsv.formatRows = function(rows) {\n return rows.map(formatRow).join(\"\\n\");\n };\n function formatRow(row) {\n return row.map(formatValue).join(delimiter);\n }\n function formatValue(text) {\n return reFormat.test(text) ? '\"' + text.replace(/\\\"/g, '\"\"') + '\"' : text;\n }\n return dsv;\n };\n d3.csv = d3.dsv(\",\", \"text/csv\");\n d3.tsv = d3.dsv(\"\t\", \"text/tab-separated-values\");\n var d3_timer_queueHead, d3_timer_queueTail, d3_timer_interval, d3_timer_timeout, d3_timer_active, d3_timer_frame = this[d3_vendorSymbol(this, \"requestAnimationFrame\")] || function(callback) {\n setTimeout(callback, 17);\n };\n d3.timer = function(callback, delay, then) {\n var n = arguments.length;\n if (n < 2) delay = 0;\n if (n < 3) then = Date.now();\n var time = then + delay, timer = {\n c: callback,\n t: time,\n f: false,\n n: null\n };\n if (d3_timer_queueTail) d3_timer_queueTail.n = timer; else d3_timer_queueHead = timer;\n d3_timer_queueTail = timer;\n if (!d3_timer_interval) {\n d3_timer_timeout = clearTimeout(d3_timer_timeout);\n d3_timer_interval = 1;\n d3_timer_frame(d3_timer_step);\n }\n };\n function d3_timer_step() {\n var now = d3_timer_mark(), delay = d3_timer_sweep() - now;\n if (delay > 24) {\n if (isFinite(delay)) {\n clearTimeout(d3_timer_timeout);\n d3_timer_timeout = setTimeout(d3_timer_step, delay);\n }\n d3_timer_interval = 0;\n } else {\n d3_timer_interval = 1;\n d3_timer_frame(d3_timer_step);\n }\n }\n d3.timer.flush = function() {\n d3_timer_mark();\n d3_timer_sweep();\n };\n function d3_timer_mark() {\n var now = Date.now();\n d3_timer_active = d3_timer_queueHead;\n while (d3_timer_active) {\n if (now >= d3_timer_active.t) d3_timer_active.f = d3_timer_active.c(now - d3_timer_active.t);\n d3_timer_active = d3_timer_active.n;\n }\n return now;\n }\n function d3_timer_sweep() {\n var t0, t1 = d3_timer_queueHead, time = Infinity;\n while (t1) {\n if (t1.f) {\n t1 = t0 ? t0.n = t1.n : d3_timer_queueHead = t1.n;\n } else {\n if (t1.t < time) time = t1.t;\n t1 = (t0 = t1).n;\n }\n }\n d3_timer_queueTail = t0;\n return time;\n }\n function d3_format_precision(x, p) {\n return p - (x ? Math.ceil(Math.log(x) / Math.LN10) : 1);\n }\n d3.round = function(x, n) {\n return n ? Math.round(x * (n = Math.pow(10, n))) / n : Math.round(x);\n };\n var d3_formatPrefixes = [ \"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"µ\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\" ].map(d3_formatPrefix);\n d3.formatPrefix = function(value, precision) {\n var i = 0;\n if (value) {\n if (value < 0) value *= -1;\n if (precision) value = d3.round(value, d3_format_precision(value, precision));\n i = 1 + Math.floor(1e-12 + Math.log(value) / Math.LN10);\n i = Math.max(-24, Math.min(24, Math.floor((i - 1) / 3) * 3));\n }\n return d3_formatPrefixes[8 + i / 3];\n };\n function d3_formatPrefix(d, i) {\n var k = Math.pow(10, abs(8 - i) * 3);\n return {\n scale: i > 8 ? function(d) {\n return d / k;\n } : function(d) {\n return d * k;\n },\n symbol: d\n };\n }\n function d3_locale_numberFormat(locale) {\n var locale_decimal = locale.decimal, locale_thousands = locale.thousands, locale_grouping = locale.grouping, locale_currency = locale.currency, formatGroup = locale_grouping && locale_thousands ? function(value, width) {\n var i = value.length, t = [], j = 0, g = locale_grouping[0], length = 0;\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = locale_grouping[j = (j + 1) % locale_grouping.length];\n }\n return t.reverse().join(locale_thousands);\n } : d3_identity;\n return function(specifier) {\n var match = d3_format_re.exec(specifier), fill = match[1] || \" \", align = match[2] || \">\", sign = match[3] || \"-\", symbol = match[4] || \"\", zfill = match[5], width = +match[6], comma = match[7], precision = match[8], type = match[9], scale = 1, prefix = \"\", suffix = \"\", integer = false, exponent = true;\n if (precision) precision = +precision.substring(1);\n if (zfill || fill === \"0\" && align === \"=\") {\n zfill = fill = \"0\";\n align = \"=\";\n }\n switch (type) {\n case \"n\":\n comma = true;\n type = \"g\";\n break;\n\n case \"%\":\n scale = 100;\n suffix = \"%\";\n type = \"f\";\n break;\n\n case \"p\":\n scale = 100;\n suffix = \"%\";\n type = \"r\";\n break;\n\n case \"b\":\n case \"o\":\n case \"x\":\n case \"X\":\n if (symbol === \"#\") prefix = \"0\" + type.toLowerCase();\n\n case \"c\":\n exponent = false;\n\n case \"d\":\n integer = true;\n precision = 0;\n break;\n\n case \"s\":\n scale = -1;\n type = \"r\";\n break;\n }\n if (symbol === \"$\") prefix = locale_currency[0], suffix = locale_currency[1];\n if (type == \"r\" && !precision) type = \"g\";\n if (precision != null) {\n if (type == \"g\") precision = Math.max(1, Math.min(21, precision)); else if (type == \"e\" || type == \"f\") precision = Math.max(0, Math.min(20, precision));\n }\n type = d3_format_types.get(type) || d3_format_typeDefault;\n var zcomma = zfill && comma;\n return function(value) {\n var fullSuffix = suffix;\n if (integer && value % 1) return \"\";\n var negative = value < 0 || value === 0 && 1 / value < 0 ? (value = -value, \"-\") : sign === \"-\" ? \"\" : sign;\n if (scale < 0) {\n var unit = d3.formatPrefix(value, precision);\n value = unit.scale(value);\n fullSuffix = unit.symbol + suffix;\n } else {\n value *= scale;\n }\n value = type(value, precision);\n var i = value.lastIndexOf(\".\"), before, after;\n if (i < 0) {\n var j = exponent ? value.lastIndexOf(\"e\") : -1;\n if (j < 0) before = value, after = \"\"; else before = value.substring(0, j), after = value.substring(j);\n } else {\n before = value.substring(0, i);\n after = locale_decimal + value.substring(i + 1);\n }\n if (!zfill && comma) before = formatGroup(before, Infinity);\n var length = prefix.length + before.length + after.length + (zcomma ? 0 : negative.length), padding = length < width ? new Array(length = width - length + 1).join(fill) : \"\";\n if (zcomma) before = formatGroup(padding + before, padding.length ? width - after.length : Infinity);\n negative += prefix;\n value = before + after;\n return (align === \"<\" ? negative + value + padding : align === \">\" ? padding + negative + value : align === \"^\" ? padding.substring(0, length >>= 1) + negative + value + padding.substring(length) : negative + (zcomma ? value : padding + value)) + fullSuffix;\n };\n };\n }\n var d3_format_re = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i;\n var d3_format_types = d3.map({\n b: function(x) {\n return x.toString(2);\n },\n c: function(x) {\n return String.fromCharCode(x);\n },\n o: function(x) {\n return x.toString(8);\n },\n x: function(x) {\n return x.toString(16);\n },\n X: function(x) {\n return x.toString(16).toUpperCase();\n },\n g: function(x, p) {\n return x.toPrecision(p);\n },\n e: function(x, p) {\n return x.toExponential(p);\n },\n f: function(x, p) {\n return x.toFixed(p);\n },\n r: function(x, p) {\n return (x = d3.round(x, d3_format_precision(x, p))).toFixed(Math.max(0, Math.min(20, d3_format_precision(x * (1 + 1e-15), p))));\n }\n });\n function d3_format_typeDefault(x) {\n return x + \"\";\n }\n var d3_time = d3.time = {}, d3_date = Date;\n function d3_date_utc() {\n this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0]);\n }\n d3_date_utc.prototype = {\n getDate: function() {\n return this._.getUTCDate();\n },\n getDay: function() {\n return this._.getUTCDay();\n },\n getFullYear: function() {\n return this._.getUTCFullYear();\n },\n getHours: function() {\n return this._.getUTCHours();\n },\n getMilliseconds: function() {\n return this._.getUTCMilliseconds();\n },\n getMinutes: function() {\n return this._.getUTCMinutes();\n },\n getMonth: function() {\n return this._.getUTCMonth();\n },\n getSeconds: function() {\n return this._.getUTCSeconds();\n },\n getTime: function() {\n return this._.getTime();\n },\n getTimezoneOffset: function() {\n return 0;\n },\n valueOf: function() {\n return this._.valueOf();\n },\n setDate: function() {\n d3_time_prototype.setUTCDate.apply(this._, arguments);\n },\n setDay: function() {\n d3_time_prototype.setUTCDay.apply(this._, arguments);\n },\n setFullYear: function() {\n d3_time_prototype.setUTCFullYear.apply(this._, arguments);\n },\n setHours: function() {\n d3_time_prototype.setUTCHours.apply(this._, arguments);\n },\n setMilliseconds: function() {\n d3_time_prototype.setUTCMilliseconds.apply(this._, arguments);\n },\n setMinutes: function() {\n d3_time_prototype.setUTCMinutes.apply(this._, arguments);\n },\n setMonth: function() {\n d3_time_prototype.setUTCMonth.apply(this._, arguments);\n },\n setSeconds: function() {\n d3_time_prototype.setUTCSeconds.apply(this._, arguments);\n },\n setTime: function() {\n d3_time_prototype.setTime.apply(this._, arguments);\n }\n };\n var d3_time_prototype = Date.prototype;\n function d3_time_interval(local, step, number) {\n function round(date) {\n var d0 = local(date), d1 = offset(d0, 1);\n return date - d0 < d1 - date ? d0 : d1;\n }\n function ceil(date) {\n step(date = local(new d3_date(date - 1)), 1);\n return date;\n }\n function offset(date, k) {\n step(date = new d3_date(+date), k);\n return date;\n }\n function range(t0, t1, dt) {\n var time = ceil(t0), times = [];\n if (dt > 1) {\n while (time < t1) {\n if (!(number(time) % dt)) times.push(new Date(+time));\n step(time, 1);\n }\n } else {\n while (time < t1) times.push(new Date(+time)), step(time, 1);\n }\n return times;\n }\n function range_utc(t0, t1, dt) {\n try {\n d3_date = d3_date_utc;\n var utc = new d3_date_utc();\n utc._ = t0;\n return range(utc, t1, dt);\n } finally {\n d3_date = Date;\n }\n }\n local.floor = local;\n local.round = round;\n local.ceil = ceil;\n local.offset = offset;\n local.range = range;\n var utc = local.utc = d3_time_interval_utc(local);\n utc.floor = utc;\n utc.round = d3_time_interval_utc(round);\n utc.ceil = d3_time_interval_utc(ceil);\n utc.offset = d3_time_interval_utc(offset);\n utc.range = range_utc;\n return local;\n }\n function d3_time_interval_utc(method) {\n return function(date, k) {\n try {\n d3_date = d3_date_utc;\n var utc = new d3_date_utc();\n utc._ = date;\n return method(utc, k)._;\n } finally {\n d3_date = Date;\n }\n };\n }\n d3_time.year = d3_time_interval(function(date) {\n date = d3_time.day(date);\n date.setMonth(0, 1);\n return date;\n }, function(date, offset) {\n date.setFullYear(date.getFullYear() + offset);\n }, function(date) {\n return date.getFullYear();\n });\n d3_time.years = d3_time.year.range;\n d3_time.years.utc = d3_time.year.utc.range;\n d3_time.day = d3_time_interval(function(date) {\n var day = new d3_date(2e3, 0);\n day.setFullYear(date.getFullYear(), date.getMonth(), date.getDate());\n return day;\n }, function(date, offset) {\n date.setDate(date.getDate() + offset);\n }, function(date) {\n return date.getDate() - 1;\n });\n d3_time.days = d3_time.day.range;\n d3_time.days.utc = d3_time.day.utc.range;\n d3_time.dayOfYear = function(date) {\n var year = d3_time.year(date);\n return Math.floor((date - year - (date.getTimezoneOffset() - year.getTimezoneOffset()) * 6e4) / 864e5);\n };\n [ \"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\" ].forEach(function(day, i) {\n i = 7 - i;\n var interval = d3_time[day] = d3_time_interval(function(date) {\n (date = d3_time.day(date)).setDate(date.getDate() - (date.getDay() + i) % 7);\n return date;\n }, function(date, offset) {\n date.setDate(date.getDate() + Math.floor(offset) * 7);\n }, function(date) {\n var day = d3_time.year(date).getDay();\n return Math.floor((d3_time.dayOfYear(date) + (day + i) % 7) / 7) - (day !== i);\n });\n d3_time[day + \"s\"] = interval.range;\n d3_time[day + \"s\"].utc = interval.utc.range;\n d3_time[day + \"OfYear\"] = function(date) {\n var day = d3_time.year(date).getDay();\n return Math.floor((d3_time.dayOfYear(date) + (day + i) % 7) / 7);\n };\n });\n d3_time.week = d3_time.sunday;\n d3_time.weeks = d3_time.sunday.range;\n d3_time.weeks.utc = d3_time.sunday.utc.range;\n d3_time.weekOfYear = d3_time.sundayOfYear;\n function d3_locale_timeFormat(locale) {\n var locale_dateTime = locale.dateTime, locale_date = locale.date, locale_time = locale.time, locale_periods = locale.periods, locale_days = locale.days, locale_shortDays = locale.shortDays, locale_months = locale.months, locale_shortMonths = locale.shortMonths;\n function d3_time_format(template) {\n var n = template.length;\n function format(date) {\n var string = [], i = -1, j = 0, c, p, f;\n while (++i < n) {\n if (template.charCodeAt(i) === 37) {\n string.push(template.slice(j, i));\n if ((p = d3_time_formatPads[c = template.charAt(++i)]) != null) c = template.charAt(++i);\n if (f = d3_time_formats[c]) c = f(date, p == null ? c === \"e\" ? \" \" : \"0\" : p);\n string.push(c);\n j = i + 1;\n }\n }\n string.push(template.slice(j, i));\n return string.join(\"\");\n }\n format.parse = function(string) {\n var d = {\n y: 1900,\n m: 0,\n d: 1,\n H: 0,\n M: 0,\n S: 0,\n L: 0,\n Z: null\n }, i = d3_time_parse(d, template, string, 0);\n if (i != string.length) return null;\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n var localZ = d.Z != null && d3_date !== d3_date_utc, date = new (localZ ? d3_date_utc : d3_date)();\n if (\"j\" in d) date.setFullYear(d.y, 0, d.j); else if (\"w\" in d && (\"W\" in d || \"U\" in d)) {\n date.setFullYear(d.y, 0, 1);\n date.setFullYear(d.y, 0, \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (date.getDay() + 5) % 7 : d.w + d.U * 7 - (date.getDay() + 6) % 7);\n } else date.setFullYear(d.y, d.m, d.d);\n date.setHours(d.H + (d.Z / 100 | 0), d.M + d.Z % 100, d.S, d.L);\n return localZ ? date._ : date;\n };\n format.toString = function() {\n return template;\n };\n return format;\n }\n function d3_time_parse(date, template, string, j) {\n var c, p, t, i = 0, n = template.length, m = string.length;\n while (i < n) {\n if (j >= m) return -1;\n c = template.charCodeAt(i++);\n if (c === 37) {\n t = template.charAt(i++);\n p = d3_time_parsers[t in d3_time_formatPads ? template.charAt(i++) : t];\n if (!p || (j = p(date, string, j)) < 0) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n return j;\n }\n d3_time_format.utc = function(template) {\n var local = d3_time_format(template);\n function format(date) {\n try {\n d3_date = d3_date_utc;\n var utc = new d3_date();\n utc._ = date;\n return local(utc);\n } finally {\n d3_date = Date;\n }\n }\n format.parse = function(string) {\n try {\n d3_date = d3_date_utc;\n var date = local.parse(string);\n return date && date._;\n } finally {\n d3_date = Date;\n }\n };\n format.toString = local.toString;\n return format;\n };\n d3_time_format.multi = d3_time_format.utc.multi = d3_time_formatMulti;\n var d3_time_periodLookup = d3.map(), d3_time_dayRe = d3_time_formatRe(locale_days), d3_time_dayLookup = d3_time_formatLookup(locale_days), d3_time_dayAbbrevRe = d3_time_formatRe(locale_shortDays), d3_time_dayAbbrevLookup = d3_time_formatLookup(locale_shortDays), d3_time_monthRe = d3_time_formatRe(locale_months), d3_time_monthLookup = d3_time_formatLookup(locale_months), d3_time_monthAbbrevRe = d3_time_formatRe(locale_shortMonths), d3_time_monthAbbrevLookup = d3_time_formatLookup(locale_shortMonths);\n locale_periods.forEach(function(p, i) {\n d3_time_periodLookup.set(p.toLowerCase(), i);\n });\n var d3_time_formats = {\n a: function(d) {\n return locale_shortDays[d.getDay()];\n },\n A: function(d) {\n return locale_days[d.getDay()];\n },\n b: function(d) {\n return locale_shortMonths[d.getMonth()];\n },\n B: function(d) {\n return locale_months[d.getMonth()];\n },\n c: d3_time_format(locale_dateTime),\n d: function(d, p) {\n return d3_time_formatPad(d.getDate(), p, 2);\n },\n e: function(d, p) {\n return d3_time_formatPad(d.getDate(), p, 2);\n },\n H: function(d, p) {\n return d3_time_formatPad(d.getHours(), p, 2);\n },\n I: function(d, p) {\n return d3_time_formatPad(d.getHours() % 12 || 12, p, 2);\n },\n j: function(d, p) {\n return d3_time_formatPad(1 + d3_time.dayOfYear(d), p, 3);\n },\n L: function(d, p) {\n return d3_time_formatPad(d.getMilliseconds(), p, 3);\n },\n m: function(d, p) {\n return d3_time_formatPad(d.getMonth() + 1, p, 2);\n },\n M: function(d, p) {\n return d3_time_formatPad(d.getMinutes(), p, 2);\n },\n p: function(d) {\n return locale_periods[+(d.getHours() >= 12)];\n },\n S: function(d, p) {\n return d3_time_formatPad(d.getSeconds(), p, 2);\n },\n U: function(d, p) {\n return d3_time_formatPad(d3_time.sundayOfYear(d), p, 2);\n },\n w: function(d) {\n return d.getDay();\n },\n W: function(d, p) {\n return d3_time_formatPad(d3_time.mondayOfYear(d), p, 2);\n },\n x: d3_time_format(locale_date),\n X: d3_time_format(locale_time),\n y: function(d, p) {\n return d3_time_formatPad(d.getFullYear() % 100, p, 2);\n },\n Y: function(d, p) {\n return d3_time_formatPad(d.getFullYear() % 1e4, p, 4);\n },\n Z: d3_time_zone,\n \"%\": function() {\n return \"%\";\n }\n };\n var d3_time_parsers = {\n a: d3_time_parseWeekdayAbbrev,\n A: d3_time_parseWeekday,\n b: d3_time_parseMonthAbbrev,\n B: d3_time_parseMonth,\n c: d3_time_parseLocaleFull,\n d: d3_time_parseDay,\n e: d3_time_parseDay,\n H: d3_time_parseHour24,\n I: d3_time_parseHour24,\n j: d3_time_parseDayOfYear,\n L: d3_time_parseMilliseconds,\n m: d3_time_parseMonthNumber,\n M: d3_time_parseMinutes,\n p: d3_time_parseAmPm,\n S: d3_time_parseSeconds,\n U: d3_time_parseWeekNumberSunday,\n w: d3_time_parseWeekdayNumber,\n W: d3_time_parseWeekNumberMonday,\n x: d3_time_parseLocaleDate,\n X: d3_time_parseLocaleTime,\n y: d3_time_parseYear,\n Y: d3_time_parseFullYear,\n Z: d3_time_parseZone,\n \"%\": d3_time_parseLiteralPercent\n };\n function d3_time_parseWeekdayAbbrev(date, string, i) {\n d3_time_dayAbbrevRe.lastIndex = 0;\n var n = d3_time_dayAbbrevRe.exec(string.slice(i));\n return n ? (date.w = d3_time_dayAbbrevLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n function d3_time_parseWeekday(date, string, i) {\n d3_time_dayRe.lastIndex = 0;\n var n = d3_time_dayRe.exec(string.slice(i));\n return n ? (date.w = d3_time_dayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n function d3_time_parseMonthAbbrev(date, string, i) {\n d3_time_monthAbbrevRe.lastIndex = 0;\n var n = d3_time_monthAbbrevRe.exec(string.slice(i));\n return n ? (date.m = d3_time_monthAbbrevLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n function d3_time_parseMonth(date, string, i) {\n d3_time_monthRe.lastIndex = 0;\n var n = d3_time_monthRe.exec(string.slice(i));\n return n ? (date.m = d3_time_monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n function d3_time_parseLocaleFull(date, string, i) {\n return d3_time_parse(date, d3_time_formats.c.toString(), string, i);\n }\n function d3_time_parseLocaleDate(date, string, i) {\n return d3_time_parse(date, d3_time_formats.x.toString(), string, i);\n }\n function d3_time_parseLocaleTime(date, string, i) {\n return d3_time_parse(date, d3_time_formats.X.toString(), string, i);\n }\n function d3_time_parseAmPm(date, string, i) {\n var n = d3_time_periodLookup.get(string.slice(i, i += 2).toLowerCase());\n return n == null ? -1 : (date.p = n, i);\n }\n return d3_time_format;\n }\n var d3_time_formatPads = {\n \"-\": \"\",\n _: \" \",\n \"0\": \"0\"\n }, d3_time_numberRe = /^\\s*\\d+/, d3_time_percentRe = /^%/;\n function d3_time_formatPad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\", string = (sign ? -value : value) + \"\", length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n }\n function d3_time_formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(d3.requote).join(\"|\") + \")\", \"i\");\n }\n function d3_time_formatLookup(names) {\n var map = new d3_Map(), i = -1, n = names.length;\n while (++i < n) map.set(names[i].toLowerCase(), i);\n return map;\n }\n function d3_time_parseWeekdayNumber(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i, i + 1));\n return n ? (date.w = +n[0], i + n[0].length) : -1;\n }\n function d3_time_parseWeekNumberSunday(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i));\n return n ? (date.U = +n[0], i + n[0].length) : -1;\n }\n function d3_time_parseWeekNumberMonday(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i));\n return n ? (date.W = +n[0], i + n[0].length) : -1;\n }\n function d3_time_parseFullYear(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i, i + 4));\n return n ? (date.y = +n[0], i + n[0].length) : -1;\n }\n function d3_time_parseYear(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i, i + 2));\n return n ? (date.y = d3_time_expandYear(+n[0]), i + n[0].length) : -1;\n }\n function d3_time_parseZone(date, string, i) {\n return /^[+-]\\d{4}$/.test(string = string.slice(i, i + 5)) ? (date.Z = -string, \n i + 5) : -1;\n }\n function d3_time_expandYear(d) {\n return d + (d > 68 ? 1900 : 2e3);\n }\n function d3_time_parseMonthNumber(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i, i + 2));\n return n ? (date.m = n[0] - 1, i + n[0].length) : -1;\n }\n function d3_time_parseDay(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i, i + 2));\n return n ? (date.d = +n[0], i + n[0].length) : -1;\n }\n function d3_time_parseDayOfYear(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i, i + 3));\n return n ? (date.j = +n[0], i + n[0].length) : -1;\n }\n function d3_time_parseHour24(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i, i + 2));\n return n ? (date.H = +n[0], i + n[0].length) : -1;\n }\n function d3_time_parseMinutes(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i, i + 2));\n return n ? (date.M = +n[0], i + n[0].length) : -1;\n }\n function d3_time_parseSeconds(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i, i + 2));\n return n ? (date.S = +n[0], i + n[0].length) : -1;\n }\n function d3_time_parseMilliseconds(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i, i + 3));\n return n ? (date.L = +n[0], i + n[0].length) : -1;\n }\n function d3_time_zone(d) {\n var z = d.getTimezoneOffset(), zs = z > 0 ? \"-\" : \"+\", zh = abs(z) / 60 | 0, zm = abs(z) % 60;\n return zs + d3_time_formatPad(zh, \"0\", 2) + d3_time_formatPad(zm, \"0\", 2);\n }\n function d3_time_parseLiteralPercent(date, string, i) {\n d3_time_percentRe.lastIndex = 0;\n var n = d3_time_percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n }\n function d3_time_formatMulti(formats) {\n var n = formats.length, i = -1;\n while (++i < n) formats[i][0] = this(formats[i][0]);\n return function(date) {\n var i = 0, f = formats[i];\n while (!f[1](date)) f = formats[++i];\n return f[0](date);\n };\n }\n d3.locale = function(locale) {\n return {\n numberFormat: d3_locale_numberFormat(locale),\n timeFormat: d3_locale_timeFormat(locale)\n };\n };\n var d3_locale_enUS = d3.locale({\n decimal: \".\",\n thousands: \",\",\n grouping: [ 3 ],\n currency: [ \"$\", \"\" ],\n dateTime: \"%a %b %e %X %Y\",\n date: \"%m/%d/%Y\",\n time: \"%H:%M:%S\",\n periods: [ \"AM\", \"PM\" ],\n days: [ \"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\" ],\n shortDays: [ \"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\" ],\n months: [ \"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\" ],\n shortMonths: [ \"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\" ]\n });\n d3.format = d3_locale_enUS.numberFormat;\n d3.geo = {};\n function d3_adder() {}\n d3_adder.prototype = {\n s: 0,\n t: 0,\n add: function(y) {\n d3_adderSum(y, this.t, d3_adderTemp);\n d3_adderSum(d3_adderTemp.s, this.s, this);\n if (this.s) this.t += d3_adderTemp.t; else this.s = d3_adderTemp.t;\n },\n reset: function() {\n this.s = this.t = 0;\n },\n valueOf: function() {\n return this.s;\n }\n };\n var d3_adderTemp = new d3_adder();\n function d3_adderSum(a, b, o) {\n var x = o.s = a + b, bv = x - a, av = x - bv;\n o.t = a - av + (b - bv);\n }\n d3.geo.stream = function(object, listener) {\n if (object && d3_geo_streamObjectType.hasOwnProperty(object.type)) {\n d3_geo_streamObjectType[object.type](object, listener);\n } else {\n d3_geo_streamGeometry(object, listener);\n }\n };\n function d3_geo_streamGeometry(geometry, listener) {\n if (geometry && d3_geo_streamGeometryType.hasOwnProperty(geometry.type)) {\n d3_geo_streamGeometryType[geometry.type](geometry, listener);\n }\n }\n var d3_geo_streamObjectType = {\n Feature: function(feature, listener) {\n d3_geo_streamGeometry(feature.geometry, listener);\n },\n FeatureCollection: function(object, listener) {\n var features = object.features, i = -1, n = features.length;\n while (++i < n) d3_geo_streamGeometry(features[i].geometry, listener);\n }\n };\n var d3_geo_streamGeometryType = {\n Sphere: function(object, listener) {\n listener.sphere();\n },\n Point: function(object, listener) {\n object = object.coordinates;\n listener.point(object[0], object[1], object[2]);\n },\n MultiPoint: function(object, listener) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) object = coordinates[i], listener.point(object[0], object[1], object[2]);\n },\n LineString: function(object, listener) {\n d3_geo_streamLine(object.coordinates, listener, 0);\n },\n MultiLineString: function(object, listener) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) d3_geo_streamLine(coordinates[i], listener, 0);\n },\n Polygon: function(object, listener) {\n d3_geo_streamPolygon(object.coordinates, listener);\n },\n MultiPolygon: function(object, listener) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) d3_geo_streamPolygon(coordinates[i], listener);\n },\n GeometryCollection: function(object, listener) {\n var geometries = object.geometries, i = -1, n = geometries.length;\n while (++i < n) d3_geo_streamGeometry(geometries[i], listener);\n }\n };\n function d3_geo_streamLine(coordinates, listener, closed) {\n var i = -1, n = coordinates.length - closed, coordinate;\n listener.lineStart();\n while (++i < n) coordinate = coordinates[i], listener.point(coordinate[0], coordinate[1], coordinate[2]);\n listener.lineEnd();\n }\n function d3_geo_streamPolygon(coordinates, listener) {\n var i = -1, n = coordinates.length;\n listener.polygonStart();\n while (++i < n) d3_geo_streamLine(coordinates[i], listener, 1);\n listener.polygonEnd();\n }\n d3.geo.area = function(object) {\n d3_geo_areaSum = 0;\n d3.geo.stream(object, d3_geo_area);\n return d3_geo_areaSum;\n };\n var d3_geo_areaSum, d3_geo_areaRingSum = new d3_adder();\n var d3_geo_area = {\n sphere: function() {\n d3_geo_areaSum += 4 * π;\n },\n point: d3_noop,\n lineStart: d3_noop,\n lineEnd: d3_noop,\n polygonStart: function() {\n d3_geo_areaRingSum.reset();\n d3_geo_area.lineStart = d3_geo_areaRingStart;\n },\n polygonEnd: function() {\n var area = 2 * d3_geo_areaRingSum;\n d3_geo_areaSum += area < 0 ? 4 * π + area : area;\n d3_geo_area.lineStart = d3_geo_area.lineEnd = d3_geo_area.point = d3_noop;\n }\n };\n function d3_geo_areaRingStart() {\n var λ00, φ00, λ0, cosφ0, sinφ0;\n d3_geo_area.point = function(λ, φ) {\n d3_geo_area.point = nextPoint;\n λ0 = (λ00 = λ) * d3_radians, cosφ0 = Math.cos(φ = (φ00 = φ) * d3_radians / 2 + π / 4), \n sinφ0 = Math.sin(φ);\n };\n function nextPoint(λ, φ) {\n λ *= d3_radians;\n φ = φ * d3_radians / 2 + π / 4;\n var dλ = λ - λ0, sdλ = dλ >= 0 ? 1 : -1, adλ = sdλ * dλ, cosφ = Math.cos(φ), sinφ = Math.sin(φ), k = sinφ0 * sinφ, u = cosφ0 * cosφ + k * Math.cos(adλ), v = k * sdλ * Math.sin(adλ);\n d3_geo_areaRingSum.add(Math.atan2(v, u));\n λ0 = λ, cosφ0 = cosφ, sinφ0 = sinφ;\n }\n d3_geo_area.lineEnd = function() {\n nextPoint(λ00, φ00);\n };\n }\n function d3_geo_cartesian(spherical) {\n var λ = spherical[0], φ = spherical[1], cosφ = Math.cos(φ);\n return [ cosφ * Math.cos(λ), cosφ * Math.sin(λ), Math.sin(φ) ];\n }\n function d3_geo_cartesianDot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n }\n function d3_geo_cartesianCross(a, b) {\n return [ a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0] ];\n }\n function d3_geo_cartesianAdd(a, b) {\n a[0] += b[0];\n a[1] += b[1];\n a[2] += b[2];\n }\n function d3_geo_cartesianScale(vector, k) {\n return [ vector[0] * k, vector[1] * k, vector[2] * k ];\n }\n function d3_geo_cartesianNormalize(d) {\n var l = Math.sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n d[0] /= l;\n d[1] /= l;\n d[2] /= l;\n }\n function d3_geo_spherical(cartesian) {\n return [ Math.atan2(cartesian[1], cartesian[0]), d3_asin(cartesian[2]) ];\n }\n function d3_geo_sphericalEqual(a, b) {\n return abs(a[0] - b[0]) < ε && abs(a[1] - b[1]) < ε;\n }\n d3.geo.bounds = function() {\n var λ0, φ0, λ1, φ1, λ_, λ__, φ__, p0, dλSum, ranges, range;\n var bound = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() {\n bound.point = ringPoint;\n bound.lineStart = ringStart;\n bound.lineEnd = ringEnd;\n dλSum = 0;\n d3_geo_area.polygonStart();\n },\n polygonEnd: function() {\n d3_geo_area.polygonEnd();\n bound.point = point;\n bound.lineStart = lineStart;\n bound.lineEnd = lineEnd;\n if (d3_geo_areaRingSum < 0) λ0 = -(λ1 = 180), φ0 = -(φ1 = 90); else if (dλSum > ε) φ1 = 90; else if (dλSum < -ε) φ0 = -90;\n range[0] = λ0, range[1] = λ1;\n }\n };\n function point(λ, φ) {\n ranges.push(range = [ λ0 = λ, λ1 = λ ]);\n if (φ < φ0) φ0 = φ;\n if (φ > φ1) φ1 = φ;\n }\n function linePoint(λ, φ) {\n var p = d3_geo_cartesian([ λ * d3_radians, φ * d3_radians ]);\n if (p0) {\n var normal = d3_geo_cartesianCross(p0, p), equatorial = [ normal[1], -normal[0], 0 ], inflection = d3_geo_cartesianCross(equatorial, normal);\n d3_geo_cartesianNormalize(inflection);\n inflection = d3_geo_spherical(inflection);\n var dλ = λ - λ_, s = dλ > 0 ? 1 : -1, λi = inflection[0] * d3_degrees * s, antimeridian = abs(dλ) > 180;\n if (antimeridian ^ (s * λ_ < λi && λi < s * λ)) {\n var φi = inflection[1] * d3_degrees;\n if (φi > φ1) φ1 = φi;\n } else if (λi = (λi + 360) % 360 - 180, antimeridian ^ (s * λ_ < λi && λi < s * λ)) {\n var φi = -inflection[1] * d3_degrees;\n if (φi < φ0) φ0 = φi;\n } else {\n if (φ < φ0) φ0 = φ;\n if (φ > φ1) φ1 = φ;\n }\n if (antimeridian) {\n if (λ < λ_) {\n if (angle(λ0, λ) > angle(λ0, λ1)) λ1 = λ;\n } else {\n if (angle(λ, λ1) > angle(λ0, λ1)) λ0 = λ;\n }\n } else {\n if (λ1 >= λ0) {\n if (λ < λ0) λ0 = λ;\n if (λ > λ1) λ1 = λ;\n } else {\n if (λ > λ_) {\n if (angle(λ0, λ) > angle(λ0, λ1)) λ1 = λ;\n } else {\n if (angle(λ, λ1) > angle(λ0, λ1)) λ0 = λ;\n }\n }\n }\n } else {\n point(λ, φ);\n }\n p0 = p, λ_ = λ;\n }\n function lineStart() {\n bound.point = linePoint;\n }\n function lineEnd() {\n range[0] = λ0, range[1] = λ1;\n bound.point = point;\n p0 = null;\n }\n function ringPoint(λ, φ) {\n if (p0) {\n var dλ = λ - λ_;\n dλSum += abs(dλ) > 180 ? dλ + (dλ > 0 ? 360 : -360) : dλ;\n } else λ__ = λ, φ__ = φ;\n d3_geo_area.point(λ, φ);\n linePoint(λ, φ);\n }\n function ringStart() {\n d3_geo_area.lineStart();\n }\n function ringEnd() {\n ringPoint(λ__, φ__);\n d3_geo_area.lineEnd();\n if (abs(dλSum) > ε) λ0 = -(λ1 = 180);\n range[0] = λ0, range[1] = λ1;\n p0 = null;\n }\n function angle(λ0, λ1) {\n return (λ1 -= λ0) < 0 ? λ1 + 360 : λ1;\n }\n function compareRanges(a, b) {\n return a[0] - b[0];\n }\n function withinRange(x, range) {\n return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;\n }\n return function(feature) {\n φ1 = λ1 = -(λ0 = φ0 = Infinity);\n ranges = [];\n d3.geo.stream(feature, bound);\n var n = ranges.length;\n if (n) {\n ranges.sort(compareRanges);\n for (var i = 1, a = ranges[0], b, merged = [ a ]; i < n; ++i) {\n b = ranges[i];\n if (withinRange(b[0], a) || withinRange(b[1], a)) {\n if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];\n if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];\n } else {\n merged.push(a = b);\n }\n }\n var best = -Infinity, dλ;\n for (var n = merged.length - 1, i = 0, a = merged[n], b; i <= n; a = b, ++i) {\n b = merged[i];\n if ((dλ = angle(a[1], b[0])) > best) best = dλ, λ0 = b[0], λ1 = a[1];\n }\n }\n ranges = range = null;\n return λ0 === Infinity || φ0 === Infinity ? [ [ NaN, NaN ], [ NaN, NaN ] ] : [ [ λ0, φ0 ], [ λ1, φ1 ] ];\n };\n }();\n d3.geo.centroid = function(object) {\n d3_geo_centroidW0 = d3_geo_centroidW1 = d3_geo_centroidX0 = d3_geo_centroidY0 = d3_geo_centroidZ0 = d3_geo_centroidX1 = d3_geo_centroidY1 = d3_geo_centroidZ1 = d3_geo_centroidX2 = d3_geo_centroidY2 = d3_geo_centroidZ2 = 0;\n d3.geo.stream(object, d3_geo_centroid);\n var x = d3_geo_centroidX2, y = d3_geo_centroidY2, z = d3_geo_centroidZ2, m = x * x + y * y + z * z;\n if (m < ε2) {\n x = d3_geo_centroidX1, y = d3_geo_centroidY1, z = d3_geo_centroidZ1;\n if (d3_geo_centroidW1 < ε) x = d3_geo_centroidX0, y = d3_geo_centroidY0, z = d3_geo_centroidZ0;\n m = x * x + y * y + z * z;\n if (m < ε2) return [ NaN, NaN ];\n }\n return [ Math.atan2(y, x) * d3_degrees, d3_asin(z / Math.sqrt(m)) * d3_degrees ];\n };\n var d3_geo_centroidW0, d3_geo_centroidW1, d3_geo_centroidX0, d3_geo_centroidY0, d3_geo_centroidZ0, d3_geo_centroidX1, d3_geo_centroidY1, d3_geo_centroidZ1, d3_geo_centroidX2, d3_geo_centroidY2, d3_geo_centroidZ2;\n var d3_geo_centroid = {\n sphere: d3_noop,\n point: d3_geo_centroidPoint,\n lineStart: d3_geo_centroidLineStart,\n lineEnd: d3_geo_centroidLineEnd,\n polygonStart: function() {\n d3_geo_centroid.lineStart = d3_geo_centroidRingStart;\n },\n polygonEnd: function() {\n d3_geo_centroid.lineStart = d3_geo_centroidLineStart;\n }\n };\n function d3_geo_centroidPoint(λ, φ) {\n λ *= d3_radians;\n var cosφ = Math.cos(φ *= d3_radians);\n d3_geo_centroidPointXYZ(cosφ * Math.cos(λ), cosφ * Math.sin(λ), Math.sin(φ));\n }\n function d3_geo_centroidPointXYZ(x, y, z) {\n ++d3_geo_centroidW0;\n d3_geo_centroidX0 += (x - d3_geo_centroidX0) / d3_geo_centroidW0;\n d3_geo_centroidY0 += (y - d3_geo_centroidY0) / d3_geo_centroidW0;\n d3_geo_centroidZ0 += (z - d3_geo_centroidZ0) / d3_geo_centroidW0;\n }\n function d3_geo_centroidLineStart() {\n var x0, y0, z0;\n d3_geo_centroid.point = function(λ, φ) {\n λ *= d3_radians;\n var cosφ = Math.cos(φ *= d3_radians);\n x0 = cosφ * Math.cos(λ);\n y0 = cosφ * Math.sin(λ);\n z0 = Math.sin(φ);\n d3_geo_centroid.point = nextPoint;\n d3_geo_centroidPointXYZ(x0, y0, z0);\n };\n function nextPoint(λ, φ) {\n λ *= d3_radians;\n var cosφ = Math.cos(φ *= d3_radians), x = cosφ * Math.cos(λ), y = cosφ * Math.sin(λ), z = Math.sin(φ), w = Math.atan2(Math.sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);\n d3_geo_centroidW1 += w;\n d3_geo_centroidX1 += w * (x0 + (x0 = x));\n d3_geo_centroidY1 += w * (y0 + (y0 = y));\n d3_geo_centroidZ1 += w * (z0 + (z0 = z));\n d3_geo_centroidPointXYZ(x0, y0, z0);\n }\n }\n function d3_geo_centroidLineEnd() {\n d3_geo_centroid.point = d3_geo_centroidPoint;\n }\n function d3_geo_centroidRingStart() {\n var λ00, φ00, x0, y0, z0;\n d3_geo_centroid.point = function(λ, φ) {\n λ00 = λ, φ00 = φ;\n d3_geo_centroid.point = nextPoint;\n λ *= d3_radians;\n var cosφ = Math.cos(φ *= d3_radians);\n x0 = cosφ * Math.cos(λ);\n y0 = cosφ * Math.sin(λ);\n z0 = Math.sin(φ);\n d3_geo_centroidPointXYZ(x0, y0, z0);\n };\n d3_geo_centroid.lineEnd = function() {\n nextPoint(λ00, φ00);\n d3_geo_centroid.lineEnd = d3_geo_centroidLineEnd;\n d3_geo_centroid.point = d3_geo_centroidPoint;\n };\n function nextPoint(λ, φ) {\n λ *= d3_radians;\n var cosφ = Math.cos(φ *= d3_radians), x = cosφ * Math.cos(λ), y = cosφ * Math.sin(λ), z = Math.sin(φ), cx = y0 * z - z0 * y, cy = z0 * x - x0 * z, cz = x0 * y - y0 * x, m = Math.sqrt(cx * cx + cy * cy + cz * cz), u = x0 * x + y0 * y + z0 * z, v = m && -d3_acos(u) / m, w = Math.atan2(m, u);\n d3_geo_centroidX2 += v * cx;\n d3_geo_centroidY2 += v * cy;\n d3_geo_centroidZ2 += v * cz;\n d3_geo_centroidW1 += w;\n d3_geo_centroidX1 += w * (x0 + (x0 = x));\n d3_geo_centroidY1 += w * (y0 + (y0 = y));\n d3_geo_centroidZ1 += w * (z0 + (z0 = z));\n d3_geo_centroidPointXYZ(x0, y0, z0);\n }\n }\n function d3_geo_compose(a, b) {\n function compose(x, y) {\n return x = a(x, y), b(x[0], x[1]);\n }\n if (a.invert && b.invert) compose.invert = function(x, y) {\n return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n };\n return compose;\n }\n function d3_true() {\n return true;\n }\n function d3_geo_clipPolygon(segments, compare, clipStartInside, interpolate, listener) {\n var subject = [], clip = [];\n segments.forEach(function(segment) {\n if ((n = segment.length - 1) <= 0) return;\n var n, p0 = segment[0], p1 = segment[n];\n if (d3_geo_sphericalEqual(p0, p1)) {\n listener.lineStart();\n for (var i = 0; i < n; ++i) listener.point((p0 = segment[i])[0], p0[1]);\n listener.lineEnd();\n return;\n }\n var a = new d3_geo_clipPolygonIntersection(p0, segment, null, true), b = new d3_geo_clipPolygonIntersection(p0, null, a, false);\n a.o = b;\n subject.push(a);\n clip.push(b);\n a = new d3_geo_clipPolygonIntersection(p1, segment, null, false);\n b = new d3_geo_clipPolygonIntersection(p1, null, a, true);\n a.o = b;\n subject.push(a);\n clip.push(b);\n });\n clip.sort(compare);\n d3_geo_clipPolygonLinkCircular(subject);\n d3_geo_clipPolygonLinkCircular(clip);\n if (!subject.length) return;\n for (var i = 0, entry = clipStartInside, n = clip.length; i < n; ++i) {\n clip[i].e = entry = !entry;\n }\n var start = subject[0], points, point;\n while (1) {\n var current = start, isSubject = true;\n while (current.v) if ((current = current.n) === start) return;\n points = current.z;\n listener.lineStart();\n do {\n current.v = current.o.v = true;\n if (current.e) {\n if (isSubject) {\n for (var i = 0, n = points.length; i < n; ++i) listener.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.n.x, 1, listener);\n }\n current = current.n;\n } else {\n if (isSubject) {\n points = current.p.z;\n for (var i = points.length - 1; i >= 0; --i) listener.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.p.x, -1, listener);\n }\n current = current.p;\n }\n current = current.o;\n points = current.z;\n isSubject = !isSubject;\n } while (!current.v);\n listener.lineEnd();\n }\n }\n function d3_geo_clipPolygonLinkCircular(array) {\n if (!(n = array.length)) return;\n var n, i = 0, a = array[0], b;\n while (++i < n) {\n a.n = b = array[i];\n b.p = a;\n a = b;\n }\n a.n = b = array[0];\n b.p = a;\n }\n function d3_geo_clipPolygonIntersection(point, points, other, entry) {\n this.x = point;\n this.z = points;\n this.o = other;\n this.e = entry;\n this.v = false;\n this.n = this.p = null;\n }\n function d3_geo_clip(pointVisible, clipLine, interpolate, clipStart) {\n return function(rotate, listener) {\n var line = clipLine(listener), rotatedClipStart = rotate.invert(clipStart[0], clipStart[1]);\n var clip = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() {\n clip.point = pointRing;\n clip.lineStart = ringStart;\n clip.lineEnd = ringEnd;\n segments = [];\n polygon = [];\n },\n polygonEnd: function() {\n clip.point = point;\n clip.lineStart = lineStart;\n clip.lineEnd = lineEnd;\n segments = d3.merge(segments);\n var clipStartInside = d3_geo_pointInPolygon(rotatedClipStart, polygon);\n if (segments.length) {\n if (!polygonStarted) listener.polygonStart(), polygonStarted = true;\n d3_geo_clipPolygon(segments, d3_geo_clipSort, clipStartInside, interpolate, listener);\n } else if (clipStartInside) {\n if (!polygonStarted) listener.polygonStart(), polygonStarted = true;\n listener.lineStart();\n interpolate(null, null, 1, listener);\n listener.lineEnd();\n }\n if (polygonStarted) listener.polygonEnd(), polygonStarted = false;\n segments = polygon = null;\n },\n sphere: function() {\n listener.polygonStart();\n listener.lineStart();\n interpolate(null, null, 1, listener);\n listener.lineEnd();\n listener.polygonEnd();\n }\n };\n function point(λ, φ) {\n var point = rotate(λ, φ);\n if (pointVisible(λ = point[0], φ = point[1])) listener.point(λ, φ);\n }\n function pointLine(λ, φ) {\n var point = rotate(λ, φ);\n line.point(point[0], point[1]);\n }\n function lineStart() {\n clip.point = pointLine;\n line.lineStart();\n }\n function lineEnd() {\n clip.point = point;\n line.lineEnd();\n }\n var segments;\n var buffer = d3_geo_clipBufferListener(), ringListener = clipLine(buffer), polygonStarted = false, polygon, ring;\n function pointRing(λ, φ) {\n ring.push([ λ, φ ]);\n var point = rotate(λ, φ);\n ringListener.point(point[0], point[1]);\n }\n function ringStart() {\n ringListener.lineStart();\n ring = [];\n }\n function ringEnd() {\n pointRing(ring[0][0], ring[0][1]);\n ringListener.lineEnd();\n var clean = ringListener.clean(), ringSegments = buffer.buffer(), segment, n = ringSegments.length;\n ring.pop();\n polygon.push(ring);\n ring = null;\n if (!n) return;\n if (clean & 1) {\n segment = ringSegments[0];\n var n = segment.length - 1, i = -1, point;\n if (n > 0) {\n if (!polygonStarted) listener.polygonStart(), polygonStarted = true;\n listener.lineStart();\n while (++i < n) listener.point((point = segment[i])[0], point[1]);\n listener.lineEnd();\n }\n return;\n }\n if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n segments.push(ringSegments.filter(d3_geo_clipSegmentLength1));\n }\n return clip;\n };\n }\n function d3_geo_clipSegmentLength1(segment) {\n return segment.length > 1;\n }\n function d3_geo_clipBufferListener() {\n var lines = [], line;\n return {\n lineStart: function() {\n lines.push(line = []);\n },\n point: function(λ, φ) {\n line.push([ λ, φ ]);\n },\n lineEnd: d3_noop,\n buffer: function() {\n var buffer = lines;\n lines = [];\n line = null;\n return buffer;\n },\n rejoin: function() {\n if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n }\n };\n }\n function d3_geo_clipSort(a, b) {\n return ((a = a.x)[0] < 0 ? a[1] - halfπ - ε : halfπ - a[1]) - ((b = b.x)[0] < 0 ? b[1] - halfπ - ε : halfπ - b[1]);\n }\n var d3_geo_clipAntimeridian = d3_geo_clip(d3_true, d3_geo_clipAntimeridianLine, d3_geo_clipAntimeridianInterpolate, [ -π, -π / 2 ]);\n function d3_geo_clipAntimeridianLine(listener) {\n var λ0 = NaN, φ0 = NaN, sλ0 = NaN, clean;\n return {\n lineStart: function() {\n listener.lineStart();\n clean = 1;\n },\n point: function(λ1, φ1) {\n var sλ1 = λ1 > 0 ? π : -π, dλ = abs(λ1 - λ0);\n if (abs(dλ - π) < ε) {\n listener.point(λ0, φ0 = (φ0 + φ1) / 2 > 0 ? halfπ : -halfπ);\n listener.point(sλ0, φ0);\n listener.lineEnd();\n listener.lineStart();\n listener.point(sλ1, φ0);\n listener.point(λ1, φ0);\n clean = 0;\n } else if (sλ0 !== sλ1 && dλ >= π) {\n if (abs(λ0 - sλ0) < ε) λ0 -= sλ0 * ε;\n if (abs(λ1 - sλ1) < ε) λ1 -= sλ1 * ε;\n φ0 = d3_geo_clipAntimeridianIntersect(λ0, φ0, λ1, φ1);\n listener.point(sλ0, φ0);\n listener.lineEnd();\n listener.lineStart();\n listener.point(sλ1, φ0);\n clean = 0;\n }\n listener.point(λ0 = λ1, φ0 = φ1);\n sλ0 = sλ1;\n },\n lineEnd: function() {\n listener.lineEnd();\n λ0 = φ0 = NaN;\n },\n clean: function() {\n return 2 - clean;\n }\n };\n }\n function d3_geo_clipAntimeridianIntersect(λ0, φ0, λ1, φ1) {\n var cosφ0, cosφ1, sinλ0_λ1 = Math.sin(λ0 - λ1);\n return abs(sinλ0_λ1) > ε ? Math.atan((Math.sin(φ0) * (cosφ1 = Math.cos(φ1)) * Math.sin(λ1) - Math.sin(φ1) * (cosφ0 = Math.cos(φ0)) * Math.sin(λ0)) / (cosφ0 * cosφ1 * sinλ0_λ1)) : (φ0 + φ1) / 2;\n }\n function d3_geo_clipAntimeridianInterpolate(from, to, direction, listener) {\n var φ;\n if (from == null) {\n φ = direction * halfπ;\n listener.point(-π, φ);\n listener.point(0, φ);\n listener.point(π, φ);\n listener.point(π, 0);\n listener.point(π, -φ);\n listener.point(0, -φ);\n listener.point(-π, -φ);\n listener.point(-π, 0);\n listener.point(-π, φ);\n } else if (abs(from[0] - to[0]) > ε) {\n var s = from[0] < to[0] ? π : -π;\n φ = direction * s / 2;\n listener.point(-s, φ);\n listener.point(0, φ);\n listener.point(s, φ);\n } else {\n listener.point(to[0], to[1]);\n }\n }\n function d3_geo_pointInPolygon(point, polygon) {\n var meridian = point[0], parallel = point[1], meridianNormal = [ Math.sin(meridian), -Math.cos(meridian), 0 ], polarAngle = 0, winding = 0;\n d3_geo_areaRingSum.reset();\n for (var i = 0, n = polygon.length; i < n; ++i) {\n var ring = polygon[i], m = ring.length;\n if (!m) continue;\n var point0 = ring[0], λ0 = point0[0], φ0 = point0[1] / 2 + π / 4, sinφ0 = Math.sin(φ0), cosφ0 = Math.cos(φ0), j = 1;\n while (true) {\n if (j === m) j = 0;\n point = ring[j];\n var λ = point[0], φ = point[1] / 2 + π / 4, sinφ = Math.sin(φ), cosφ = Math.cos(φ), dλ = λ - λ0, sdλ = dλ >= 0 ? 1 : -1, adλ = sdλ * dλ, antimeridian = adλ > π, k = sinφ0 * sinφ;\n d3_geo_areaRingSum.add(Math.atan2(k * sdλ * Math.sin(adλ), cosφ0 * cosφ + k * Math.cos(adλ)));\n polarAngle += antimeridian ? dλ + sdλ * τ : dλ;\n if (antimeridian ^ λ0 >= meridian ^ λ >= meridian) {\n var arc = d3_geo_cartesianCross(d3_geo_cartesian(point0), d3_geo_cartesian(point));\n d3_geo_cartesianNormalize(arc);\n var intersection = d3_geo_cartesianCross(meridianNormal, arc);\n d3_geo_cartesianNormalize(intersection);\n var φarc = (antimeridian ^ dλ >= 0 ? -1 : 1) * d3_asin(intersection[2]);\n if (parallel > φarc || parallel === φarc && (arc[0] || arc[1])) {\n winding += antimeridian ^ dλ >= 0 ? 1 : -1;\n }\n }\n if (!j++) break;\n λ0 = λ, sinφ0 = sinφ, cosφ0 = cosφ, point0 = point;\n }\n }\n return (polarAngle < -ε || polarAngle < ε && d3_geo_areaRingSum < 0) ^ winding & 1;\n }\n function d3_geo_clipCircle(radius) {\n var cr = Math.cos(radius), smallRadius = cr > 0, notHemisphere = abs(cr) > ε, interpolate = d3_geo_circleInterpolate(radius, 6 * d3_radians);\n return d3_geo_clip(visible, clipLine, interpolate, smallRadius ? [ 0, -radius ] : [ -π, radius - π ]);\n function visible(λ, φ) {\n return Math.cos(λ) * Math.cos(φ) > cr;\n }\n function clipLine(listener) {\n var point0, c0, v0, v00, clean;\n return {\n lineStart: function() {\n v00 = v0 = false;\n clean = 1;\n },\n point: function(λ, φ) {\n var point1 = [ λ, φ ], point2, v = visible(λ, φ), c = smallRadius ? v ? 0 : code(λ, φ) : v ? code(λ + (λ < 0 ? π : -π), φ) : 0;\n if (!point0 && (v00 = v0 = v)) listener.lineStart();\n if (v !== v0) {\n point2 = intersect(point0, point1);\n if (d3_geo_sphericalEqual(point0, point2) || d3_geo_sphericalEqual(point1, point2)) {\n point1[0] += ε;\n point1[1] += ε;\n v = visible(point1[0], point1[1]);\n }\n }\n if (v !== v0) {\n clean = 0;\n if (v) {\n listener.lineStart();\n point2 = intersect(point1, point0);\n listener.point(point2[0], point2[1]);\n } else {\n point2 = intersect(point0, point1);\n listener.point(point2[0], point2[1]);\n listener.lineEnd();\n }\n point0 = point2;\n } else if (notHemisphere && point0 && smallRadius ^ v) {\n var t;\n if (!(c & c0) && (t = intersect(point1, point0, true))) {\n clean = 0;\n if (smallRadius) {\n listener.lineStart();\n listener.point(t[0][0], t[0][1]);\n listener.point(t[1][0], t[1][1]);\n listener.lineEnd();\n } else {\n listener.point(t[1][0], t[1][1]);\n listener.lineEnd();\n listener.lineStart();\n listener.point(t[0][0], t[0][1]);\n }\n }\n }\n if (v && (!point0 || !d3_geo_sphericalEqual(point0, point1))) {\n listener.point(point1[0], point1[1]);\n }\n point0 = point1, v0 = v, c0 = c;\n },\n lineEnd: function() {\n if (v0) listener.lineEnd();\n point0 = null;\n },\n clean: function() {\n return clean | (v00 && v0) << 1;\n }\n };\n }\n function intersect(a, b, two) {\n var pa = d3_geo_cartesian(a), pb = d3_geo_cartesian(b);\n var n1 = [ 1, 0, 0 ], n2 = d3_geo_cartesianCross(pa, pb), n2n2 = d3_geo_cartesianDot(n2, n2), n1n2 = n2[0], determinant = n2n2 - n1n2 * n1n2;\n if (!determinant) return !two && a;\n var c1 = cr * n2n2 / determinant, c2 = -cr * n1n2 / determinant, n1xn2 = d3_geo_cartesianCross(n1, n2), A = d3_geo_cartesianScale(n1, c1), B = d3_geo_cartesianScale(n2, c2);\n d3_geo_cartesianAdd(A, B);\n var u = n1xn2, w = d3_geo_cartesianDot(A, u), uu = d3_geo_cartesianDot(u, u), t2 = w * w - uu * (d3_geo_cartesianDot(A, A) - 1);\n if (t2 < 0) return;\n var t = Math.sqrt(t2), q = d3_geo_cartesianScale(u, (-w - t) / uu);\n d3_geo_cartesianAdd(q, A);\n q = d3_geo_spherical(q);\n if (!two) return q;\n var λ0 = a[0], λ1 = b[0], φ0 = a[1], φ1 = b[1], z;\n if (λ1 < λ0) z = λ0, λ0 = λ1, λ1 = z;\n var δλ = λ1 - λ0, polar = abs(δλ - π) < ε, meridian = polar || δλ < ε;\n if (!polar && φ1 < φ0) z = φ0, φ0 = φ1, φ1 = z;\n if (meridian ? polar ? φ0 + φ1 > 0 ^ q[1] < (abs(q[0] - λ0) < ε ? φ0 : φ1) : φ0 <= q[1] && q[1] <= φ1 : δλ > π ^ (λ0 <= q[0] && q[0] <= λ1)) {\n var q1 = d3_geo_cartesianScale(u, (-w + t) / uu);\n d3_geo_cartesianAdd(q1, A);\n return [ q, d3_geo_spherical(q1) ];\n }\n }\n function code(λ, φ) {\n var r = smallRadius ? radius : π - radius, code = 0;\n if (λ < -r) code |= 1; else if (λ > r) code |= 2;\n if (φ < -r) code |= 4; else if (φ > r) code |= 8;\n return code;\n }\n }\n function d3_geom_clipLine(x0, y0, x1, y1) {\n return function(line) {\n var a = line.a, b = line.b, ax = a.x, ay = a.y, bx = b.x, by = b.y, t0 = 0, t1 = 1, dx = bx - ax, dy = by - ay, r;\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n if (t0 > 0) line.a = {\n x: ax + t0 * dx,\n y: ay + t0 * dy\n };\n if (t1 < 1) line.b = {\n x: ax + t1 * dx,\n y: ay + t1 * dy\n };\n return line;\n };\n }\n var d3_geo_clipExtentMAX = 1e9;\n d3.geo.clipExtent = function() {\n var x0, y0, x1, y1, stream, clip, clipExtent = {\n stream: function(output) {\n if (stream) stream.valid = false;\n stream = clip(output);\n stream.valid = true;\n return stream;\n },\n extent: function(_) {\n if (!arguments.length) return [ [ x0, y0 ], [ x1, y1 ] ];\n clip = d3_geo_clipExtent(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]);\n if (stream) stream.valid = false, stream = null;\n return clipExtent;\n }\n };\n return clipExtent.extent([ [ 0, 0 ], [ 960, 500 ] ]);\n };\n function d3_geo_clipExtent(x0, y0, x1, y1) {\n return function(listener) {\n var listener_ = listener, bufferListener = d3_geo_clipBufferListener(), clipLine = d3_geom_clipLine(x0, y0, x1, y1), segments, polygon, ring;\n var clip = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() {\n listener = bufferListener;\n segments = [];\n polygon = [];\n clean = true;\n },\n polygonEnd: function() {\n listener = listener_;\n segments = d3.merge(segments);\n var clipStartInside = insidePolygon([ x0, y1 ]), inside = clean && clipStartInside, visible = segments.length;\n if (inside || visible) {\n listener.polygonStart();\n if (inside) {\n listener.lineStart();\n interpolate(null, null, 1, listener);\n listener.lineEnd();\n }\n if (visible) {\n d3_geo_clipPolygon(segments, compare, clipStartInside, interpolate, listener);\n }\n listener.polygonEnd();\n }\n segments = polygon = ring = null;\n }\n };\n function insidePolygon(p) {\n var wn = 0, n = polygon.length, y = p[1];\n for (var i = 0; i < n; ++i) {\n for (var j = 1, v = polygon[i], m = v.length, a = v[0], b; j < m; ++j) {\n b = v[j];\n if (a[1] <= y) {\n if (b[1] > y && d3_cross2d(a, b, p) > 0) ++wn;\n } else {\n if (b[1] <= y && d3_cross2d(a, b, p) < 0) --wn;\n }\n a = b;\n }\n }\n return wn !== 0;\n }\n function interpolate(from, to, direction, listener) {\n var a = 0, a1 = 0;\n if (from == null || (a = corner(from, direction)) !== (a1 = corner(to, direction)) || comparePoints(from, to) < 0 ^ direction > 0) {\n do {\n listener.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n } while ((a = (a + direction + 4) % 4) !== a1);\n } else {\n listener.point(to[0], to[1]);\n }\n }\n function pointVisible(x, y) {\n return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n }\n function point(x, y) {\n if (pointVisible(x, y)) listener.point(x, y);\n }\n var x__, y__, v__, x_, y_, v_, first, clean;\n function lineStart() {\n clip.point = linePoint;\n if (polygon) polygon.push(ring = []);\n first = true;\n v_ = false;\n x_ = y_ = NaN;\n }\n function lineEnd() {\n if (segments) {\n linePoint(x__, y__);\n if (v__ && v_) bufferListener.rejoin();\n segments.push(bufferListener.buffer());\n }\n clip.point = point;\n if (v_) listener.lineEnd();\n }\n function linePoint(x, y) {\n x = Math.max(-d3_geo_clipExtentMAX, Math.min(d3_geo_clipExtentMAX, x));\n y = Math.max(-d3_geo_clipExtentMAX, Math.min(d3_geo_clipExtentMAX, y));\n var v = pointVisible(x, y);\n if (polygon) ring.push([ x, y ]);\n if (first) {\n x__ = x, y__ = y, v__ = v;\n first = false;\n if (v) {\n listener.lineStart();\n listener.point(x, y);\n }\n } else {\n if (v && v_) listener.point(x, y); else {\n var l = {\n a: {\n x: x_,\n y: y_\n },\n b: {\n x: x,\n y: y\n }\n };\n if (clipLine(l)) {\n if (!v_) {\n listener.lineStart();\n listener.point(l.a.x, l.a.y);\n }\n listener.point(l.b.x, l.b.y);\n if (!v) listener.lineEnd();\n clean = false;\n } else if (v) {\n listener.lineStart();\n listener.point(x, y);\n clean = false;\n }\n }\n }\n x_ = x, y_ = y, v_ = v;\n }\n return clip;\n };\n function corner(p, direction) {\n return abs(p[0] - x0) < ε ? direction > 0 ? 0 : 3 : abs(p[0] - x1) < ε ? direction > 0 ? 2 : 1 : abs(p[1] - y0) < ε ? direction > 0 ? 1 : 0 : direction > 0 ? 3 : 2;\n }\n function compare(a, b) {\n return comparePoints(a.x, b.x);\n }\n function comparePoints(a, b) {\n var ca = corner(a, 1), cb = corner(b, 1);\n return ca !== cb ? ca - cb : ca === 0 ? b[1] - a[1] : ca === 1 ? a[0] - b[0] : ca === 2 ? a[1] - b[1] : b[0] - a[0];\n }\n }\n function d3_geo_conic(projectAt) {\n var φ0 = 0, φ1 = π / 3, m = d3_geo_projectionMutator(projectAt), p = m(φ0, φ1);\n p.parallels = function(_) {\n if (!arguments.length) return [ φ0 / π * 180, φ1 / π * 180 ];\n return m(φ0 = _[0] * π / 180, φ1 = _[1] * π / 180);\n };\n return p;\n }\n function d3_geo_conicEqualArea(φ0, φ1) {\n var sinφ0 = Math.sin(φ0), n = (sinφ0 + Math.sin(φ1)) / 2, C = 1 + sinφ0 * (2 * n - sinφ0), ρ0 = Math.sqrt(C) / n;\n function forward(λ, φ) {\n var ρ = Math.sqrt(C - 2 * n * Math.sin(φ)) / n;\n return [ ρ * Math.sin(λ *= n), ρ0 - ρ * Math.cos(λ) ];\n }\n forward.invert = function(x, y) {\n var ρ0_y = ρ0 - y;\n return [ Math.atan2(x, ρ0_y) / n, d3_asin((C - (x * x + ρ0_y * ρ0_y) * n * n) / (2 * n)) ];\n };\n return forward;\n }\n (d3.geo.conicEqualArea = function() {\n return d3_geo_conic(d3_geo_conicEqualArea);\n }).raw = d3_geo_conicEqualArea;\n d3.geo.albers = function() {\n return d3.geo.conicEqualArea().rotate([ 96, 0 ]).center([ -.6, 38.7 ]).parallels([ 29.5, 45.5 ]).scale(1070);\n };\n d3.geo.albersUsa = function() {\n var lower48 = d3.geo.albers();\n var alaska = d3.geo.conicEqualArea().rotate([ 154, 0 ]).center([ -2, 58.5 ]).parallels([ 55, 65 ]);\n var hawaii = d3.geo.conicEqualArea().rotate([ 157, 0 ]).center([ -3, 19.9 ]).parallels([ 8, 18 ]);\n var point, pointStream = {\n point: function(x, y) {\n point = [ x, y ];\n }\n }, lower48Point, alaskaPoint, hawaiiPoint;\n function albersUsa(coordinates) {\n var x = coordinates[0], y = coordinates[1];\n point = null;\n (lower48Point(x, y), point) || (alaskaPoint(x, y), point) || hawaiiPoint(x, y);\n return point;\n }\n albersUsa.invert = function(coordinates) {\n var k = lower48.scale(), t = lower48.translate(), x = (coordinates[0] - t[0]) / k, y = (coordinates[1] - t[1]) / k;\n return (y >= .12 && y < .234 && x >= -.425 && x < -.214 ? alaska : y >= .166 && y < .234 && x >= -.214 && x < -.115 ? hawaii : lower48).invert(coordinates);\n };\n albersUsa.stream = function(stream) {\n var lower48Stream = lower48.stream(stream), alaskaStream = alaska.stream(stream), hawaiiStream = hawaii.stream(stream);\n return {\n point: function(x, y) {\n lower48Stream.point(x, y);\n alaskaStream.point(x, y);\n hawaiiStream.point(x, y);\n },\n sphere: function() {\n lower48Stream.sphere();\n alaskaStream.sphere();\n hawaiiStream.sphere();\n },\n lineStart: function() {\n lower48Stream.lineStart();\n alaskaStream.lineStart();\n hawaiiStream.lineStart();\n },\n lineEnd: function() {\n lower48Stream.lineEnd();\n alaskaStream.lineEnd();\n hawaiiStream.lineEnd();\n },\n polygonStart: function() {\n lower48Stream.polygonStart();\n alaskaStream.polygonStart();\n hawaiiStream.polygonStart();\n },\n polygonEnd: function() {\n lower48Stream.polygonEnd();\n alaskaStream.polygonEnd();\n hawaiiStream.polygonEnd();\n }\n };\n };\n albersUsa.precision = function(_) {\n if (!arguments.length) return lower48.precision();\n lower48.precision(_);\n alaska.precision(_);\n hawaii.precision(_);\n return albersUsa;\n };\n albersUsa.scale = function(_) {\n if (!arguments.length) return lower48.scale();\n lower48.scale(_);\n alaska.scale(_ * .35);\n hawaii.scale(_);\n return albersUsa.translate(lower48.translate());\n };\n albersUsa.translate = function(_) {\n if (!arguments.length) return lower48.translate();\n var k = lower48.scale(), x = +_[0], y = +_[1];\n lower48Point = lower48.translate(_).clipExtent([ [ x - .455 * k, y - .238 * k ], [ x + .455 * k, y + .238 * k ] ]).stream(pointStream).point;\n alaskaPoint = alaska.translate([ x - .307 * k, y + .201 * k ]).clipExtent([ [ x - .425 * k + ε, y + .12 * k + ε ], [ x - .214 * k - ε, y + .234 * k - ε ] ]).stream(pointStream).point;\n hawaiiPoint = hawaii.translate([ x - .205 * k, y + .212 * k ]).clipExtent([ [ x - .214 * k + ε, y + .166 * k + ε ], [ x - .115 * k - ε, y + .234 * k - ε ] ]).stream(pointStream).point;\n return albersUsa;\n };\n return albersUsa.scale(1070);\n };\n var d3_geo_pathAreaSum, d3_geo_pathAreaPolygon, d3_geo_pathArea = {\n point: d3_noop,\n lineStart: d3_noop,\n lineEnd: d3_noop,\n polygonStart: function() {\n d3_geo_pathAreaPolygon = 0;\n d3_geo_pathArea.lineStart = d3_geo_pathAreaRingStart;\n },\n polygonEnd: function() {\n d3_geo_pathArea.lineStart = d3_geo_pathArea.lineEnd = d3_geo_pathArea.point = d3_noop;\n d3_geo_pathAreaSum += abs(d3_geo_pathAreaPolygon / 2);\n }\n };\n function d3_geo_pathAreaRingStart() {\n var x00, y00, x0, y0;\n d3_geo_pathArea.point = function(x, y) {\n d3_geo_pathArea.point = nextPoint;\n x00 = x0 = x, y00 = y0 = y;\n };\n function nextPoint(x, y) {\n d3_geo_pathAreaPolygon += y0 * x - x0 * y;\n x0 = x, y0 = y;\n }\n d3_geo_pathArea.lineEnd = function() {\n nextPoint(x00, y00);\n };\n }\n var d3_geo_pathBoundsX0, d3_geo_pathBoundsY0, d3_geo_pathBoundsX1, d3_geo_pathBoundsY1;\n var d3_geo_pathBounds = {\n point: d3_geo_pathBoundsPoint,\n lineStart: d3_noop,\n lineEnd: d3_noop,\n polygonStart: d3_noop,\n polygonEnd: d3_noop\n };\n function d3_geo_pathBoundsPoint(x, y) {\n if (x < d3_geo_pathBoundsX0) d3_geo_pathBoundsX0 = x;\n if (x > d3_geo_pathBoundsX1) d3_geo_pathBoundsX1 = x;\n if (y < d3_geo_pathBoundsY0) d3_geo_pathBoundsY0 = y;\n if (y > d3_geo_pathBoundsY1) d3_geo_pathBoundsY1 = y;\n }\n function d3_geo_pathBuffer() {\n var pointCircle = d3_geo_pathBufferCircle(4.5), buffer = [];\n var stream = {\n point: point,\n lineStart: function() {\n stream.point = pointLineStart;\n },\n lineEnd: lineEnd,\n polygonStart: function() {\n stream.lineEnd = lineEndPolygon;\n },\n polygonEnd: function() {\n stream.lineEnd = lineEnd;\n stream.point = point;\n },\n pointRadius: function(_) {\n pointCircle = d3_geo_pathBufferCircle(_);\n return stream;\n },\n result: function() {\n if (buffer.length) {\n var result = buffer.join(\"\");\n buffer = [];\n return result;\n }\n }\n };\n function point(x, y) {\n buffer.push(\"M\", x, \",\", y, pointCircle);\n }\n function pointLineStart(x, y) {\n buffer.push(\"M\", x, \",\", y);\n stream.point = pointLine;\n }\n function pointLine(x, y) {\n buffer.push(\"L\", x, \",\", y);\n }\n function lineEnd() {\n stream.point = point;\n }\n function lineEndPolygon() {\n buffer.push(\"Z\");\n }\n return stream;\n }\n function d3_geo_pathBufferCircle(radius) {\n return \"m0,\" + radius + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + -2 * radius + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + 2 * radius + \"z\";\n }\n var d3_geo_pathCentroid = {\n point: d3_geo_pathCentroidPoint,\n lineStart: d3_geo_pathCentroidLineStart,\n lineEnd: d3_geo_pathCentroidLineEnd,\n polygonStart: function() {\n d3_geo_pathCentroid.lineStart = d3_geo_pathCentroidRingStart;\n },\n polygonEnd: function() {\n d3_geo_pathCentroid.point = d3_geo_pathCentroidPoint;\n d3_geo_pathCentroid.lineStart = d3_geo_pathCentroidLineStart;\n d3_geo_pathCentroid.lineEnd = d3_geo_pathCentroidLineEnd;\n }\n };\n function d3_geo_pathCentroidPoint(x, y) {\n d3_geo_centroidX0 += x;\n d3_geo_centroidY0 += y;\n ++d3_geo_centroidZ0;\n }\n function d3_geo_pathCentroidLineStart() {\n var x0, y0;\n d3_geo_pathCentroid.point = function(x, y) {\n d3_geo_pathCentroid.point = nextPoint;\n d3_geo_pathCentroidPoint(x0 = x, y0 = y);\n };\n function nextPoint(x, y) {\n var dx = x - x0, dy = y - y0, z = Math.sqrt(dx * dx + dy * dy);\n d3_geo_centroidX1 += z * (x0 + x) / 2;\n d3_geo_centroidY1 += z * (y0 + y) / 2;\n d3_geo_centroidZ1 += z;\n d3_geo_pathCentroidPoint(x0 = x, y0 = y);\n }\n }\n function d3_geo_pathCentroidLineEnd() {\n d3_geo_pathCentroid.point = d3_geo_pathCentroidPoint;\n }\n function d3_geo_pathCentroidRingStart() {\n var x00, y00, x0, y0;\n d3_geo_pathCentroid.point = function(x, y) {\n d3_geo_pathCentroid.point = nextPoint;\n d3_geo_pathCentroidPoint(x00 = x0 = x, y00 = y0 = y);\n };\n function nextPoint(x, y) {\n var dx = x - x0, dy = y - y0, z = Math.sqrt(dx * dx + dy * dy);\n d3_geo_centroidX1 += z * (x0 + x) / 2;\n d3_geo_centroidY1 += z * (y0 + y) / 2;\n d3_geo_centroidZ1 += z;\n z = y0 * x - x0 * y;\n d3_geo_centroidX2 += z * (x0 + x);\n d3_geo_centroidY2 += z * (y0 + y);\n d3_geo_centroidZ2 += z * 3;\n d3_geo_pathCentroidPoint(x0 = x, y0 = y);\n }\n d3_geo_pathCentroid.lineEnd = function() {\n nextPoint(x00, y00);\n };\n }\n function d3_geo_pathContext(context) {\n var pointRadius = 4.5;\n var stream = {\n point: point,\n lineStart: function() {\n stream.point = pointLineStart;\n },\n lineEnd: lineEnd,\n polygonStart: function() {\n stream.lineEnd = lineEndPolygon;\n },\n polygonEnd: function() {\n stream.lineEnd = lineEnd;\n stream.point = point;\n },\n pointRadius: function(_) {\n pointRadius = _;\n return stream;\n },\n result: d3_noop\n };\n function point(x, y) {\n context.moveTo(x + pointRadius, y);\n context.arc(x, y, pointRadius, 0, τ);\n }\n function pointLineStart(x, y) {\n context.moveTo(x, y);\n stream.point = pointLine;\n }\n function pointLine(x, y) {\n context.lineTo(x, y);\n }\n function lineEnd() {\n stream.point = point;\n }\n function lineEndPolygon() {\n context.closePath();\n }\n return stream;\n }\n function d3_geo_resample(project) {\n var δ2 = .5, cosMinDistance = Math.cos(30 * d3_radians), maxDepth = 16;\n function resample(stream) {\n return (maxDepth ? resampleRecursive : resampleNone)(stream);\n }\n function resampleNone(stream) {\n return d3_geo_transformPoint(stream, function(x, y) {\n x = project(x, y);\n stream.point(x[0], x[1]);\n });\n }\n function resampleRecursive(stream) {\n var λ00, φ00, x00, y00, a00, b00, c00, λ0, x0, y0, a0, b0, c0;\n var resample = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() {\n stream.polygonStart();\n resample.lineStart = ringStart;\n },\n polygonEnd: function() {\n stream.polygonEnd();\n resample.lineStart = lineStart;\n }\n };\n function point(x, y) {\n x = project(x, y);\n stream.point(x[0], x[1]);\n }\n function lineStart() {\n x0 = NaN;\n resample.point = linePoint;\n stream.lineStart();\n }\n function linePoint(λ, φ) {\n var c = d3_geo_cartesian([ λ, φ ]), p = project(λ, φ);\n resampleLineTo(x0, y0, λ0, a0, b0, c0, x0 = p[0], y0 = p[1], λ0 = λ, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n stream.point(x0, y0);\n }\n function lineEnd() {\n resample.point = point;\n stream.lineEnd();\n }\n function ringStart() {\n lineStart();\n resample.point = ringPoint;\n resample.lineEnd = ringEnd;\n }\n function ringPoint(λ, φ) {\n linePoint(λ00 = λ, φ00 = φ), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n resample.point = linePoint;\n }\n function ringEnd() {\n resampleLineTo(x0, y0, λ0, a0, b0, c0, x00, y00, λ00, a00, b00, c00, maxDepth, stream);\n resample.lineEnd = lineEnd;\n lineEnd();\n }\n return resample;\n }\n function resampleLineTo(x0, y0, λ0, a0, b0, c0, x1, y1, λ1, a1, b1, c1, depth, stream) {\n var dx = x1 - x0, dy = y1 - y0, d2 = dx * dx + dy * dy;\n if (d2 > 4 * δ2 && depth--) {\n var a = a0 + a1, b = b0 + b1, c = c0 + c1, m = Math.sqrt(a * a + b * b + c * c), φ2 = Math.asin(c /= m), λ2 = abs(abs(c) - 1) < ε || abs(λ0 - λ1) < ε ? (λ0 + λ1) / 2 : Math.atan2(b, a), p = project(λ2, φ2), x2 = p[0], y2 = p[1], dx2 = x2 - x0, dy2 = y2 - y0, dz = dy * dx2 - dx * dy2;\n if (dz * dz / d2 > δ2 || abs((dx * dx2 + dy * dy2) / d2 - .5) > .3 || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) {\n resampleLineTo(x0, y0, λ0, a0, b0, c0, x2, y2, λ2, a /= m, b /= m, c, depth, stream);\n stream.point(x2, y2);\n resampleLineTo(x2, y2, λ2, a, b, c, x1, y1, λ1, a1, b1, c1, depth, stream);\n }\n }\n }\n resample.precision = function(_) {\n if (!arguments.length) return Math.sqrt(δ2);\n maxDepth = (δ2 = _ * _) > 0 && 16;\n return resample;\n };\n return resample;\n }\n d3.geo.path = function() {\n var pointRadius = 4.5, projection, context, projectStream, contextStream, cacheStream;\n function path(object) {\n if (object) {\n if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n if (!cacheStream || !cacheStream.valid) cacheStream = projectStream(contextStream);\n d3.geo.stream(object, cacheStream);\n }\n return contextStream.result();\n }\n path.area = function(object) {\n d3_geo_pathAreaSum = 0;\n d3.geo.stream(object, projectStream(d3_geo_pathArea));\n return d3_geo_pathAreaSum;\n };\n path.centroid = function(object) {\n d3_geo_centroidX0 = d3_geo_centroidY0 = d3_geo_centroidZ0 = d3_geo_centroidX1 = d3_geo_centroidY1 = d3_geo_centroidZ1 = d3_geo_centroidX2 = d3_geo_centroidY2 = d3_geo_centroidZ2 = 0;\n d3.geo.stream(object, projectStream(d3_geo_pathCentroid));\n return d3_geo_centroidZ2 ? [ d3_geo_centroidX2 / d3_geo_centroidZ2, d3_geo_centroidY2 / d3_geo_centroidZ2 ] : d3_geo_centroidZ1 ? [ d3_geo_centroidX1 / d3_geo_centroidZ1, d3_geo_centroidY1 / d3_geo_centroidZ1 ] : d3_geo_centroidZ0 ? [ d3_geo_centroidX0 / d3_geo_centroidZ0, d3_geo_centroidY0 / d3_geo_centroidZ0 ] : [ NaN, NaN ];\n };\n path.bounds = function(object) {\n d3_geo_pathBoundsX1 = d3_geo_pathBoundsY1 = -(d3_geo_pathBoundsX0 = d3_geo_pathBoundsY0 = Infinity);\n d3.geo.stream(object, projectStream(d3_geo_pathBounds));\n return [ [ d3_geo_pathBoundsX0, d3_geo_pathBoundsY0 ], [ d3_geo_pathBoundsX1, d3_geo_pathBoundsY1 ] ];\n };\n path.projection = function(_) {\n if (!arguments.length) return projection;\n projectStream = (projection = _) ? _.stream || d3_geo_pathProjectStream(_) : d3_identity;\n return reset();\n };\n path.context = function(_) {\n if (!arguments.length) return context;\n contextStream = (context = _) == null ? new d3_geo_pathBuffer() : new d3_geo_pathContext(_);\n if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\n return reset();\n };\n path.pointRadius = function(_) {\n if (!arguments.length) return pointRadius;\n pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n return path;\n };\n function reset() {\n cacheStream = null;\n return path;\n }\n return path.projection(d3.geo.albersUsa()).context(null);\n };\n function d3_geo_pathProjectStream(project) {\n var resample = d3_geo_resample(function(x, y) {\n return project([ x * d3_degrees, y * d3_degrees ]);\n });\n return function(stream) {\n return d3_geo_projectionRadians(resample(stream));\n };\n }\n d3.geo.transform = function(methods) {\n return {\n stream: function(stream) {\n var transform = new d3_geo_transform(stream);\n for (var k in methods) transform[k] = methods[k];\n return transform;\n }\n };\n };\n function d3_geo_transform(stream) {\n this.stream = stream;\n }\n d3_geo_transform.prototype = {\n point: function(x, y) {\n this.stream.point(x, y);\n },\n sphere: function() {\n this.stream.sphere();\n },\n lineStart: function() {\n this.stream.lineStart();\n },\n lineEnd: function() {\n this.stream.lineEnd();\n },\n polygonStart: function() {\n this.stream.polygonStart();\n },\n polygonEnd: function() {\n this.stream.polygonEnd();\n }\n };\n function d3_geo_transformPoint(stream, point) {\n return {\n point: point,\n sphere: function() {\n stream.sphere();\n },\n lineStart: function() {\n stream.lineStart();\n },\n lineEnd: function() {\n stream.lineEnd();\n },\n polygonStart: function() {\n stream.polygonStart();\n },\n polygonEnd: function() {\n stream.polygonEnd();\n }\n };\n }\n d3.geo.projection = d3_geo_projection;\n d3.geo.projectionMutator = d3_geo_projectionMutator;\n function d3_geo_projection(project) {\n return d3_geo_projectionMutator(function() {\n return project;\n })();\n }\n function d3_geo_projectionMutator(projectAt) {\n var project, rotate, projectRotate, projectResample = d3_geo_resample(function(x, y) {\n x = project(x, y);\n return [ x[0] * k + δx, δy - x[1] * k ];\n }), k = 150, x = 480, y = 250, λ = 0, φ = 0, δλ = 0, δφ = 0, δγ = 0, δx, δy, preclip = d3_geo_clipAntimeridian, postclip = d3_identity, clipAngle = null, clipExtent = null, stream;\n function projection(point) {\n point = projectRotate(point[0] * d3_radians, point[1] * d3_radians);\n return [ point[0] * k + δx, δy - point[1] * k ];\n }\n function invert(point) {\n point = projectRotate.invert((point[0] - δx) / k, (δy - point[1]) / k);\n return point && [ point[0] * d3_degrees, point[1] * d3_degrees ];\n }\n projection.stream = function(output) {\n if (stream) stream.valid = false;\n stream = d3_geo_projectionRadians(preclip(rotate, projectResample(postclip(output))));\n stream.valid = true;\n return stream;\n };\n projection.clipAngle = function(_) {\n if (!arguments.length) return clipAngle;\n preclip = _ == null ? (clipAngle = _, d3_geo_clipAntimeridian) : d3_geo_clipCircle((clipAngle = +_) * d3_radians);\n return invalidate();\n };\n projection.clipExtent = function(_) {\n if (!arguments.length) return clipExtent;\n clipExtent = _;\n postclip = _ ? d3_geo_clipExtent(_[0][0], _[0][1], _[1][0], _[1][1]) : d3_identity;\n return invalidate();\n };\n projection.scale = function(_) {\n if (!arguments.length) return k;\n k = +_;\n return reset();\n };\n projection.translate = function(_) {\n if (!arguments.length) return [ x, y ];\n x = +_[0];\n y = +_[1];\n return reset();\n };\n projection.center = function(_) {\n if (!arguments.length) return [ λ * d3_degrees, φ * d3_degrees ];\n λ = _[0] % 360 * d3_radians;\n φ = _[1] % 360 * d3_radians;\n return reset();\n };\n projection.rotate = function(_) {\n if (!arguments.length) return [ δλ * d3_degrees, δφ * d3_degrees, δγ * d3_degrees ];\n δλ = _[0] % 360 * d3_radians;\n δφ = _[1] % 360 * d3_radians;\n δγ = _.length > 2 ? _[2] % 360 * d3_radians : 0;\n return reset();\n };\n d3.rebind(projection, projectResample, \"precision\");\n function reset() {\n projectRotate = d3_geo_compose(rotate = d3_geo_rotation(δλ, δφ, δγ), project);\n var center = project(λ, φ);\n δx = x - center[0] * k;\n δy = y + center[1] * k;\n return invalidate();\n }\n function invalidate() {\n if (stream) stream.valid = false, stream = null;\n return projection;\n }\n return function() {\n project = projectAt.apply(this, arguments);\n projection.invert = project.invert && invert;\n return reset();\n };\n }\n function d3_geo_projectionRadians(stream) {\n return d3_geo_transformPoint(stream, function(x, y) {\n stream.point(x * d3_radians, y * d3_radians);\n });\n }\n function d3_geo_equirectangular(λ, φ) {\n return [ λ, φ ];\n }\n (d3.geo.equirectangular = function() {\n return d3_geo_projection(d3_geo_equirectangular);\n }).raw = d3_geo_equirectangular.invert = d3_geo_equirectangular;\n d3.geo.rotation = function(rotate) {\n rotate = d3_geo_rotation(rotate[0] % 360 * d3_radians, rotate[1] * d3_radians, rotate.length > 2 ? rotate[2] * d3_radians : 0);\n function forward(coordinates) {\n coordinates = rotate(coordinates[0] * d3_radians, coordinates[1] * d3_radians);\n return coordinates[0] *= d3_degrees, coordinates[1] *= d3_degrees, coordinates;\n }\n forward.invert = function(coordinates) {\n coordinates = rotate.invert(coordinates[0] * d3_radians, coordinates[1] * d3_radians);\n return coordinates[0] *= d3_degrees, coordinates[1] *= d3_degrees, coordinates;\n };\n return forward;\n };\n function d3_geo_identityRotation(λ, φ) {\n return [ λ > π ? λ - τ : λ < -π ? λ + τ : λ, φ ];\n }\n d3_geo_identityRotation.invert = d3_geo_equirectangular;\n function d3_geo_rotation(δλ, δφ, δγ) {\n return δλ ? δφ || δγ ? d3_geo_compose(d3_geo_rotationλ(δλ), d3_geo_rotationφγ(δφ, δγ)) : d3_geo_rotationλ(δλ) : δφ || δγ ? d3_geo_rotationφγ(δφ, δγ) : d3_geo_identityRotation;\n }\n function d3_geo_forwardRotationλ(δλ) {\n return function(λ, φ) {\n return λ += δλ, [ λ > π ? λ - τ : λ < -π ? λ + τ : λ, φ ];\n };\n }\n function d3_geo_rotationλ(δλ) {\n var rotation = d3_geo_forwardRotationλ(δλ);\n rotation.invert = d3_geo_forwardRotationλ(-δλ);\n return rotation;\n }\n function d3_geo_rotationφγ(δφ, δγ) {\n var cosδφ = Math.cos(δφ), sinδφ = Math.sin(δφ), cosδγ = Math.cos(δγ), sinδγ = Math.sin(δγ);\n function rotation(λ, φ) {\n var cosφ = Math.cos(φ), x = Math.cos(λ) * cosφ, y = Math.sin(λ) * cosφ, z = Math.sin(φ), k = z * cosδφ + x * sinδφ;\n return [ Math.atan2(y * cosδγ - k * sinδγ, x * cosδφ - z * sinδφ), d3_asin(k * cosδγ + y * sinδγ) ];\n }\n rotation.invert = function(λ, φ) {\n var cosφ = Math.cos(φ), x = Math.cos(λ) * cosφ, y = Math.sin(λ) * cosφ, z = Math.sin(φ), k = z * cosδγ - y * sinδγ;\n return [ Math.atan2(y * cosδγ + z * sinδγ, x * cosδφ + k * sinδφ), d3_asin(k * cosδφ - x * sinδφ) ];\n };\n return rotation;\n }\n d3.geo.circle = function() {\n var origin = [ 0, 0 ], angle, precision = 6, interpolate;\n function circle() {\n var center = typeof origin === \"function\" ? origin.apply(this, arguments) : origin, rotate = d3_geo_rotation(-center[0] * d3_radians, -center[1] * d3_radians, 0).invert, ring = [];\n interpolate(null, null, 1, {\n point: function(x, y) {\n ring.push(x = rotate(x, y));\n x[0] *= d3_degrees, x[1] *= d3_degrees;\n }\n });\n return {\n type: \"Polygon\",\n coordinates: [ ring ]\n };\n }\n circle.origin = function(x) {\n if (!arguments.length) return origin;\n origin = x;\n return circle;\n };\n circle.angle = function(x) {\n if (!arguments.length) return angle;\n interpolate = d3_geo_circleInterpolate((angle = +x) * d3_radians, precision * d3_radians);\n return circle;\n };\n circle.precision = function(_) {\n if (!arguments.length) return precision;\n interpolate = d3_geo_circleInterpolate(angle * d3_radians, (precision = +_) * d3_radians);\n return circle;\n };\n return circle.angle(90);\n };\n function d3_geo_circleInterpolate(radius, precision) {\n var cr = Math.cos(radius), sr = Math.sin(radius);\n return function(from, to, direction, listener) {\n var step = direction * precision;\n if (from != null) {\n from = d3_geo_circleAngle(cr, from);\n to = d3_geo_circleAngle(cr, to);\n if (direction > 0 ? from < to : from > to) from += direction * τ;\n } else {\n from = radius + direction * τ;\n to = radius - .5 * step;\n }\n for (var point, t = from; direction > 0 ? t > to : t < to; t -= step) {\n listener.point((point = d3_geo_spherical([ cr, -sr * Math.cos(t), -sr * Math.sin(t) ]))[0], point[1]);\n }\n };\n }\n function d3_geo_circleAngle(cr, point) {\n var a = d3_geo_cartesian(point);\n a[0] -= cr;\n d3_geo_cartesianNormalize(a);\n var angle = d3_acos(-a[1]);\n return ((-a[2] < 0 ? -angle : angle) + 2 * Math.PI - ε) % (2 * Math.PI);\n }\n d3.geo.distance = function(a, b) {\n var Δλ = (b[0] - a[0]) * d3_radians, φ0 = a[1] * d3_radians, φ1 = b[1] * d3_radians, sinΔλ = Math.sin(Δλ), cosΔλ = Math.cos(Δλ), sinφ0 = Math.sin(φ0), cosφ0 = Math.cos(φ0), sinφ1 = Math.sin(φ1), cosφ1 = Math.cos(φ1), t;\n return Math.atan2(Math.sqrt((t = cosφ1 * sinΔλ) * t + (t = cosφ0 * sinφ1 - sinφ0 * cosφ1 * cosΔλ) * t), sinφ0 * sinφ1 + cosφ0 * cosφ1 * cosΔλ);\n };\n d3.geo.graticule = function() {\n var x1, x0, X1, X0, y1, y0, Y1, Y0, dx = 10, dy = dx, DX = 90, DY = 360, x, y, X, Y, precision = 2.5;\n function graticule() {\n return {\n type: \"MultiLineString\",\n coordinates: lines()\n };\n }\n function lines() {\n return d3.range(Math.ceil(X0 / DX) * DX, X1, DX).map(X).concat(d3.range(Math.ceil(Y0 / DY) * DY, Y1, DY).map(Y)).concat(d3.range(Math.ceil(x0 / dx) * dx, x1, dx).filter(function(x) {\n return abs(x % DX) > ε;\n }).map(x)).concat(d3.range(Math.ceil(y0 / dy) * dy, y1, dy).filter(function(y) {\n return abs(y % DY) > ε;\n }).map(y));\n }\n graticule.lines = function() {\n return lines().map(function(coordinates) {\n return {\n type: \"LineString\",\n coordinates: coordinates\n };\n });\n };\n graticule.outline = function() {\n return {\n type: \"Polygon\",\n coordinates: [ X(X0).concat(Y(Y1).slice(1), X(X1).reverse().slice(1), Y(Y0).reverse().slice(1)) ]\n };\n };\n graticule.extent = function(_) {\n if (!arguments.length) return graticule.minorExtent();\n return graticule.majorExtent(_).minorExtent(_);\n };\n graticule.majorExtent = function(_) {\n if (!arguments.length) return [ [ X0, Y0 ], [ X1, Y1 ] ];\n X0 = +_[0][0], X1 = +_[1][0];\n Y0 = +_[0][1], Y1 = +_[1][1];\n if (X0 > X1) _ = X0, X0 = X1, X1 = _;\n if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;\n return graticule.precision(precision);\n };\n graticule.minorExtent = function(_) {\n if (!arguments.length) return [ [ x0, y0 ], [ x1, y1 ] ];\n x0 = +_[0][0], x1 = +_[1][0];\n y0 = +_[0][1], y1 = +_[1][1];\n if (x0 > x1) _ = x0, x0 = x1, x1 = _;\n if (y0 > y1) _ = y0, y0 = y1, y1 = _;\n return graticule.precision(precision);\n };\n graticule.step = function(_) {\n if (!arguments.length) return graticule.minorStep();\n return graticule.majorStep(_).minorStep(_);\n };\n graticule.majorStep = function(_) {\n if (!arguments.length) return [ DX, DY ];\n DX = +_[0], DY = +_[1];\n return graticule;\n };\n graticule.minorStep = function(_) {\n if (!arguments.length) return [ dx, dy ];\n dx = +_[0], dy = +_[1];\n return graticule;\n };\n graticule.precision = function(_) {\n if (!arguments.length) return precision;\n precision = +_;\n x = d3_geo_graticuleX(y0, y1, 90);\n y = d3_geo_graticuleY(x0, x1, precision);\n X = d3_geo_graticuleX(Y0, Y1, 90);\n Y = d3_geo_graticuleY(X0, X1, precision);\n return graticule;\n };\n return graticule.majorExtent([ [ -180, -90 + ε ], [ 180, 90 - ε ] ]).minorExtent([ [ -180, -80 - ε ], [ 180, 80 + ε ] ]);\n };\n function d3_geo_graticuleX(y0, y1, dy) {\n var y = d3.range(y0, y1 - ε, dy).concat(y1);\n return function(x) {\n return y.map(function(y) {\n return [ x, y ];\n });\n };\n }\n function d3_geo_graticuleY(x0, x1, dx) {\n var x = d3.range(x0, x1 - ε, dx).concat(x1);\n return function(y) {\n return x.map(function(x) {\n return [ x, y ];\n });\n };\n }\n function d3_source(d) {\n return d.source;\n }\n function d3_target(d) {\n return d.target;\n }\n d3.geo.greatArc = function() {\n var source = d3_source, source_, target = d3_target, target_;\n function greatArc() {\n return {\n type: \"LineString\",\n coordinates: [ source_ || source.apply(this, arguments), target_ || target.apply(this, arguments) ]\n };\n }\n greatArc.distance = function() {\n return d3.geo.distance(source_ || source.apply(this, arguments), target_ || target.apply(this, arguments));\n };\n greatArc.source = function(_) {\n if (!arguments.length) return source;\n source = _, source_ = typeof _ === \"function\" ? null : _;\n return greatArc;\n };\n greatArc.target = function(_) {\n if (!arguments.length) return target;\n target = _, target_ = typeof _ === \"function\" ? null : _;\n return greatArc;\n };\n greatArc.precision = function() {\n return arguments.length ? greatArc : 0;\n };\n return greatArc;\n };\n d3.geo.interpolate = function(source, target) {\n return d3_geo_interpolate(source[0] * d3_radians, source[1] * d3_radians, target[0] * d3_radians, target[1] * d3_radians);\n };\n function d3_geo_interpolate(x0, y0, x1, y1) {\n var cy0 = Math.cos(y0), sy0 = Math.sin(y0), cy1 = Math.cos(y1), sy1 = Math.sin(y1), kx0 = cy0 * Math.cos(x0), ky0 = cy0 * Math.sin(x0), kx1 = cy1 * Math.cos(x1), ky1 = cy1 * Math.sin(x1), d = 2 * Math.asin(Math.sqrt(d3_haversin(y1 - y0) + cy0 * cy1 * d3_haversin(x1 - x0))), k = 1 / Math.sin(d);\n var interpolate = d ? function(t) {\n var B = Math.sin(t *= d) * k, A = Math.sin(d - t) * k, x = A * kx0 + B * kx1, y = A * ky0 + B * ky1, z = A * sy0 + B * sy1;\n return [ Math.atan2(y, x) * d3_degrees, Math.atan2(z, Math.sqrt(x * x + y * y)) * d3_degrees ];\n } : function() {\n return [ x0 * d3_degrees, y0 * d3_degrees ];\n };\n interpolate.distance = d;\n return interpolate;\n }\n d3.geo.length = function(object) {\n d3_geo_lengthSum = 0;\n d3.geo.stream(object, d3_geo_length);\n return d3_geo_lengthSum;\n };\n var d3_geo_lengthSum;\n var d3_geo_length = {\n sphere: d3_noop,\n point: d3_noop,\n lineStart: d3_geo_lengthLineStart,\n lineEnd: d3_noop,\n polygonStart: d3_noop,\n polygonEnd: d3_noop\n };\n function d3_geo_lengthLineStart() {\n var λ0, sinφ0, cosφ0;\n d3_geo_length.point = function(λ, φ) {\n λ0 = λ * d3_radians, sinφ0 = Math.sin(φ *= d3_radians), cosφ0 = Math.cos(φ);\n d3_geo_length.point = nextPoint;\n };\n d3_geo_length.lineEnd = function() {\n d3_geo_length.point = d3_geo_length.lineEnd = d3_noop;\n };\n function nextPoint(λ, φ) {\n var sinφ = Math.sin(φ *= d3_radians), cosφ = Math.cos(φ), t = abs((λ *= d3_radians) - λ0), cosΔλ = Math.cos(t);\n d3_geo_lengthSum += Math.atan2(Math.sqrt((t = cosφ * Math.sin(t)) * t + (t = cosφ0 * sinφ - sinφ0 * cosφ * cosΔλ) * t), sinφ0 * sinφ + cosφ0 * cosφ * cosΔλ);\n λ0 = λ, sinφ0 = sinφ, cosφ0 = cosφ;\n }\n }\n function d3_geo_azimuthal(scale, angle) {\n function azimuthal(λ, φ) {\n var cosλ = Math.cos(λ), cosφ = Math.cos(φ), k = scale(cosλ * cosφ);\n return [ k * cosφ * Math.sin(λ), k * Math.sin(φ) ];\n }\n azimuthal.invert = function(x, y) {\n var ρ = Math.sqrt(x * x + y * y), c = angle(ρ), sinc = Math.sin(c), cosc = Math.cos(c);\n return [ Math.atan2(x * sinc, ρ * cosc), Math.asin(ρ && y * sinc / ρ) ];\n };\n return azimuthal;\n }\n var d3_geo_azimuthalEqualArea = d3_geo_azimuthal(function(cosλcosφ) {\n return Math.sqrt(2 / (1 + cosλcosφ));\n }, function(ρ) {\n return 2 * Math.asin(ρ / 2);\n });\n (d3.geo.azimuthalEqualArea = function() {\n return d3_geo_projection(d3_geo_azimuthalEqualArea);\n }).raw = d3_geo_azimuthalEqualArea;\n var d3_geo_azimuthalEquidistant = d3_geo_azimuthal(function(cosλcosφ) {\n var c = Math.acos(cosλcosφ);\n return c && c / Math.sin(c);\n }, d3_identity);\n (d3.geo.azimuthalEquidistant = function() {\n return d3_geo_projection(d3_geo_azimuthalEquidistant);\n }).raw = d3_geo_azimuthalEquidistant;\n function d3_geo_conicConformal(φ0, φ1) {\n var cosφ0 = Math.cos(φ0), t = function(φ) {\n return Math.tan(π / 4 + φ / 2);\n }, n = φ0 === φ1 ? Math.sin(φ0) : Math.log(cosφ0 / Math.cos(φ1)) / Math.log(t(φ1) / t(φ0)), F = cosφ0 * Math.pow(t(φ0), n) / n;\n if (!n) return d3_geo_mercator;\n function forward(λ, φ) {\n if (F > 0) {\n if (φ < -halfπ + ε) φ = -halfπ + ε;\n } else {\n if (φ > halfπ - ε) φ = halfπ - ε;\n }\n var ρ = F / Math.pow(t(φ), n);\n return [ ρ * Math.sin(n * λ), F - ρ * Math.cos(n * λ) ];\n }\n forward.invert = function(x, y) {\n var ρ0_y = F - y, ρ = d3_sgn(n) * Math.sqrt(x * x + ρ0_y * ρ0_y);\n return [ Math.atan2(x, ρ0_y) / n, 2 * Math.atan(Math.pow(F / ρ, 1 / n)) - halfπ ];\n };\n return forward;\n }\n (d3.geo.conicConformal = function() {\n return d3_geo_conic(d3_geo_conicConformal);\n }).raw = d3_geo_conicConformal;\n function d3_geo_conicEquidistant(φ0, φ1) {\n var cosφ0 = Math.cos(φ0), n = φ0 === φ1 ? Math.sin(φ0) : (cosφ0 - Math.cos(φ1)) / (φ1 - φ0), G = cosφ0 / n + φ0;\n if (abs(n) < ε) return d3_geo_equirectangular;\n function forward(λ, φ) {\n var ρ = G - φ;\n return [ ρ * Math.sin(n * λ), G - ρ * Math.cos(n * λ) ];\n }\n forward.invert = function(x, y) {\n var ρ0_y = G - y;\n return [ Math.atan2(x, ρ0_y) / n, G - d3_sgn(n) * Math.sqrt(x * x + ρ0_y * ρ0_y) ];\n };\n return forward;\n }\n (d3.geo.conicEquidistant = function() {\n return d3_geo_conic(d3_geo_conicEquidistant);\n }).raw = d3_geo_conicEquidistant;\n var d3_geo_gnomonic = d3_geo_azimuthal(function(cosλcosφ) {\n return 1 / cosλcosφ;\n }, Math.atan);\n (d3.geo.gnomonic = function() {\n return d3_geo_projection(d3_geo_gnomonic);\n }).raw = d3_geo_gnomonic;\n function d3_geo_mercator(λ, φ) {\n return [ λ, Math.log(Math.tan(π / 4 + φ / 2)) ];\n }\n d3_geo_mercator.invert = function(x, y) {\n return [ x, 2 * Math.atan(Math.exp(y)) - halfπ ];\n };\n function d3_geo_mercatorProjection(project) {\n var m = d3_geo_projection(project), scale = m.scale, translate = m.translate, clipExtent = m.clipExtent, clipAuto;\n m.scale = function() {\n var v = scale.apply(m, arguments);\n return v === m ? clipAuto ? m.clipExtent(null) : m : v;\n };\n m.translate = function() {\n var v = translate.apply(m, arguments);\n return v === m ? clipAuto ? m.clipExtent(null) : m : v;\n };\n m.clipExtent = function(_) {\n var v = clipExtent.apply(m, arguments);\n if (v === m) {\n if (clipAuto = _ == null) {\n var k = π * scale(), t = translate();\n clipExtent([ [ t[0] - k, t[1] - k ], [ t[0] + k, t[1] + k ] ]);\n }\n } else if (clipAuto) {\n v = null;\n }\n return v;\n };\n return m.clipExtent(null);\n }\n (d3.geo.mercator = function() {\n return d3_geo_mercatorProjection(d3_geo_mercator);\n }).raw = d3_geo_mercator;\n var d3_geo_orthographic = d3_geo_azimuthal(function() {\n return 1;\n }, Math.asin);\n (d3.geo.orthographic = function() {\n return d3_geo_projection(d3_geo_orthographic);\n }).raw = d3_geo_orthographic;\n var d3_geo_stereographic = d3_geo_azimuthal(function(cosλcosφ) {\n return 1 / (1 + cosλcosφ);\n }, function(ρ) {\n return 2 * Math.atan(ρ);\n });\n (d3.geo.stereographic = function() {\n return d3_geo_projection(d3_geo_stereographic);\n }).raw = d3_geo_stereographic;\n function d3_geo_transverseMercator(λ, φ) {\n return [ Math.log(Math.tan(π / 4 + φ / 2)), -λ ];\n }\n d3_geo_transverseMercator.invert = function(x, y) {\n return [ -y, 2 * Math.atan(Math.exp(x)) - halfπ ];\n };\n (d3.geo.transverseMercator = function() {\n var projection = d3_geo_mercatorProjection(d3_geo_transverseMercator), center = projection.center, rotate = projection.rotate;\n projection.center = function(_) {\n return _ ? center([ -_[1], _[0] ]) : (_ = center(), [ _[1], -_[0] ]);\n };\n projection.rotate = function(_) {\n return _ ? rotate([ _[0], _[1], _.length > 2 ? _[2] + 90 : 90 ]) : (_ = rotate(), \n [ _[0], _[1], _[2] - 90 ]);\n };\n return rotate([ 0, 0, 90 ]);\n }).raw = d3_geo_transverseMercator;\n d3.geom = {};\n function d3_geom_pointX(d) {\n return d[0];\n }\n function d3_geom_pointY(d) {\n return d[1];\n }\n d3.geom.hull = function(vertices) {\n var x = d3_geom_pointX, y = d3_geom_pointY;\n if (arguments.length) return hull(vertices);\n function hull(data) {\n if (data.length < 3) return [];\n var fx = d3_functor(x), fy = d3_functor(y), i, n = data.length, points = [], flippedPoints = [];\n for (i = 0; i < n; i++) {\n points.push([ +fx.call(this, data[i], i), +fy.call(this, data[i], i), i ]);\n }\n points.sort(d3_geom_hullOrder);\n for (i = 0; i < n; i++) flippedPoints.push([ points[i][0], -points[i][1] ]);\n var upper = d3_geom_hullUpper(points), lower = d3_geom_hullUpper(flippedPoints);\n var skipLeft = lower[0] === upper[0], skipRight = lower[lower.length - 1] === upper[upper.length - 1], polygon = [];\n for (i = upper.length - 1; i >= 0; --i) polygon.push(data[points[upper[i]][2]]);\n for (i = +skipLeft; i < lower.length - skipRight; ++i) polygon.push(data[points[lower[i]][2]]);\n return polygon;\n }\n hull.x = function(_) {\n return arguments.length ? (x = _, hull) : x;\n };\n hull.y = function(_) {\n return arguments.length ? (y = _, hull) : y;\n };\n return hull;\n };\n function d3_geom_hullUpper(points) {\n var n = points.length, hull = [ 0, 1 ], hs = 2;\n for (var i = 2; i < n; i++) {\n while (hs > 1 && d3_cross2d(points[hull[hs - 2]], points[hull[hs - 1]], points[i]) <= 0) --hs;\n hull[hs++] = i;\n }\n return hull.slice(0, hs);\n }\n function d3_geom_hullOrder(a, b) {\n return a[0] - b[0] || a[1] - b[1];\n }\n d3.geom.polygon = function(coordinates) {\n d3_subclass(coordinates, d3_geom_polygonPrototype);\n return coordinates;\n };\n var d3_geom_polygonPrototype = d3.geom.polygon.prototype = [];\n d3_geom_polygonPrototype.area = function() {\n var i = -1, n = this.length, a, b = this[n - 1], area = 0;\n while (++i < n) {\n a = b;\n b = this[i];\n area += a[1] * b[0] - a[0] * b[1];\n }\n return area * .5;\n };\n d3_geom_polygonPrototype.centroid = function(k) {\n var i = -1, n = this.length, x = 0, y = 0, a, b = this[n - 1], c;\n if (!arguments.length) k = -1 / (6 * this.area());\n while (++i < n) {\n a = b;\n b = this[i];\n c = a[0] * b[1] - b[0] * a[1];\n x += (a[0] + b[0]) * c;\n y += (a[1] + b[1]) * c;\n }\n return [ x * k, y * k ];\n };\n d3_geom_polygonPrototype.clip = function(subject) {\n var input, closed = d3_geom_polygonClosed(subject), i = -1, n = this.length - d3_geom_polygonClosed(this), j, m, a = this[n - 1], b, c, d;\n while (++i < n) {\n input = subject.slice();\n subject.length = 0;\n b = this[i];\n c = input[(m = input.length - closed) - 1];\n j = -1;\n while (++j < m) {\n d = input[j];\n if (d3_geom_polygonInside(d, a, b)) {\n if (!d3_geom_polygonInside(c, a, b)) {\n subject.push(d3_geom_polygonIntersect(c, d, a, b));\n }\n subject.push(d);\n } else if (d3_geom_polygonInside(c, a, b)) {\n subject.push(d3_geom_polygonIntersect(c, d, a, b));\n }\n c = d;\n }\n if (closed) subject.push(subject[0]);\n a = b;\n }\n return subject;\n };\n function d3_geom_polygonInside(p, a, b) {\n return (b[0] - a[0]) * (p[1] - a[1]) < (b[1] - a[1]) * (p[0] - a[0]);\n }\n function d3_geom_polygonIntersect(c, d, a, b) {\n var x1 = c[0], x3 = a[0], x21 = d[0] - x1, x43 = b[0] - x3, y1 = c[1], y3 = a[1], y21 = d[1] - y1, y43 = b[1] - y3, ua = (x43 * (y1 - y3) - y43 * (x1 - x3)) / (y43 * x21 - x43 * y21);\n return [ x1 + ua * x21, y1 + ua * y21 ];\n }\n function d3_geom_polygonClosed(coordinates) {\n var a = coordinates[0], b = coordinates[coordinates.length - 1];\n return !(a[0] - b[0] || a[1] - b[1]);\n }\n var d3_geom_voronoiEdges, d3_geom_voronoiCells, d3_geom_voronoiBeaches, d3_geom_voronoiBeachPool = [], d3_geom_voronoiFirstCircle, d3_geom_voronoiCircles, d3_geom_voronoiCirclePool = [];\n function d3_geom_voronoiBeach() {\n d3_geom_voronoiRedBlackNode(this);\n this.edge = this.site = this.circle = null;\n }\n function d3_geom_voronoiCreateBeach(site) {\n var beach = d3_geom_voronoiBeachPool.pop() || new d3_geom_voronoiBeach();\n beach.site = site;\n return beach;\n }\n function d3_geom_voronoiDetachBeach(beach) {\n d3_geom_voronoiDetachCircle(beach);\n d3_geom_voronoiBeaches.remove(beach);\n d3_geom_voronoiBeachPool.push(beach);\n d3_geom_voronoiRedBlackNode(beach);\n }\n function d3_geom_voronoiRemoveBeach(beach) {\n var circle = beach.circle, x = circle.x, y = circle.cy, vertex = {\n x: x,\n y: y\n }, previous = beach.P, next = beach.N, disappearing = [ beach ];\n d3_geom_voronoiDetachBeach(beach);\n var lArc = previous;\n while (lArc.circle && abs(x - lArc.circle.x) < ε && abs(y - lArc.circle.cy) < ε) {\n previous = lArc.P;\n disappearing.unshift(lArc);\n d3_geom_voronoiDetachBeach(lArc);\n lArc = previous;\n }\n disappearing.unshift(lArc);\n d3_geom_voronoiDetachCircle(lArc);\n var rArc = next;\n while (rArc.circle && abs(x - rArc.circle.x) < ε && abs(y - rArc.circle.cy) < ε) {\n next = rArc.N;\n disappearing.push(rArc);\n d3_geom_voronoiDetachBeach(rArc);\n rArc = next;\n }\n disappearing.push(rArc);\n d3_geom_voronoiDetachCircle(rArc);\n var nArcs = disappearing.length, iArc;\n for (iArc = 1; iArc < nArcs; ++iArc) {\n rArc = disappearing[iArc];\n lArc = disappearing[iArc - 1];\n d3_geom_voronoiSetEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);\n }\n lArc = disappearing[0];\n rArc = disappearing[nArcs - 1];\n rArc.edge = d3_geom_voronoiCreateEdge(lArc.site, rArc.site, null, vertex);\n d3_geom_voronoiAttachCircle(lArc);\n d3_geom_voronoiAttachCircle(rArc);\n }\n function d3_geom_voronoiAddBeach(site) {\n var x = site.x, directrix = site.y, lArc, rArc, dxl, dxr, node = d3_geom_voronoiBeaches._;\n while (node) {\n dxl = d3_geom_voronoiLeftBreakPoint(node, directrix) - x;\n if (dxl > ε) node = node.L; else {\n dxr = x - d3_geom_voronoiRightBreakPoint(node, directrix);\n if (dxr > ε) {\n if (!node.R) {\n lArc = node;\n break;\n }\n node = node.R;\n } else {\n if (dxl > -ε) {\n lArc = node.P;\n rArc = node;\n } else if (dxr > -ε) {\n lArc = node;\n rArc = node.N;\n } else {\n lArc = rArc = node;\n }\n break;\n }\n }\n }\n var newArc = d3_geom_voronoiCreateBeach(site);\n d3_geom_voronoiBeaches.insert(lArc, newArc);\n if (!lArc && !rArc) return;\n if (lArc === rArc) {\n d3_geom_voronoiDetachCircle(lArc);\n rArc = d3_geom_voronoiCreateBeach(lArc.site);\n d3_geom_voronoiBeaches.insert(newArc, rArc);\n newArc.edge = rArc.edge = d3_geom_voronoiCreateEdge(lArc.site, newArc.site);\n d3_geom_voronoiAttachCircle(lArc);\n d3_geom_voronoiAttachCircle(rArc);\n return;\n }\n if (!rArc) {\n newArc.edge = d3_geom_voronoiCreateEdge(lArc.site, newArc.site);\n return;\n }\n d3_geom_voronoiDetachCircle(lArc);\n d3_geom_voronoiDetachCircle(rArc);\n var lSite = lArc.site, ax = lSite.x, ay = lSite.y, bx = site.x - ax, by = site.y - ay, rSite = rArc.site, cx = rSite.x - ax, cy = rSite.y - ay, d = 2 * (bx * cy - by * cx), hb = bx * bx + by * by, hc = cx * cx + cy * cy, vertex = {\n x: (cy * hb - by * hc) / d + ax,\n y: (bx * hc - cx * hb) / d + ay\n };\n d3_geom_voronoiSetEdgeEnd(rArc.edge, lSite, rSite, vertex);\n newArc.edge = d3_geom_voronoiCreateEdge(lSite, site, null, vertex);\n rArc.edge = d3_geom_voronoiCreateEdge(site, rSite, null, vertex);\n d3_geom_voronoiAttachCircle(lArc);\n d3_geom_voronoiAttachCircle(rArc);\n }\n function d3_geom_voronoiLeftBreakPoint(arc, directrix) {\n var site = arc.site, rfocx = site.x, rfocy = site.y, pby2 = rfocy - directrix;\n if (!pby2) return rfocx;\n var lArc = arc.P;\n if (!lArc) return -Infinity;\n site = lArc.site;\n var lfocx = site.x, lfocy = site.y, plby2 = lfocy - directrix;\n if (!plby2) return lfocx;\n var hl = lfocx - rfocx, aby2 = 1 / pby2 - 1 / plby2, b = hl / plby2;\n if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;\n return (rfocx + lfocx) / 2;\n }\n function d3_geom_voronoiRightBreakPoint(arc, directrix) {\n var rArc = arc.N;\n if (rArc) return d3_geom_voronoiLeftBreakPoint(rArc, directrix);\n var site = arc.site;\n return site.y === directrix ? site.x : Infinity;\n }\n function d3_geom_voronoiCell(site) {\n this.site = site;\n this.edges = [];\n }\n d3_geom_voronoiCell.prototype.prepare = function() {\n var halfEdges = this.edges, iHalfEdge = halfEdges.length, edge;\n while (iHalfEdge--) {\n edge = halfEdges[iHalfEdge].edge;\n if (!edge.b || !edge.a) halfEdges.splice(iHalfEdge, 1);\n }\n halfEdges.sort(d3_geom_voronoiHalfEdgeOrder);\n return halfEdges.length;\n };\n function d3_geom_voronoiCloseCells(extent) {\n var x0 = extent[0][0], x1 = extent[1][0], y0 = extent[0][1], y1 = extent[1][1], x2, y2, x3, y3, cells = d3_geom_voronoiCells, iCell = cells.length, cell, iHalfEdge, halfEdges, nHalfEdges, start, end;\n while (iCell--) {\n cell = cells[iCell];\n if (!cell || !cell.prepare()) continue;\n halfEdges = cell.edges;\n nHalfEdges = halfEdges.length;\n iHalfEdge = 0;\n while (iHalfEdge < nHalfEdges) {\n end = halfEdges[iHalfEdge].end(), x3 = end.x, y3 = end.y;\n start = halfEdges[++iHalfEdge % nHalfEdges].start(), x2 = start.x, y2 = start.y;\n if (abs(x3 - x2) > ε || abs(y3 - y2) > ε) {\n halfEdges.splice(iHalfEdge, 0, new d3_geom_voronoiHalfEdge(d3_geom_voronoiCreateBorderEdge(cell.site, end, abs(x3 - x0) < ε && y1 - y3 > ε ? {\n x: x0,\n y: abs(x2 - x0) < ε ? y2 : y1\n } : abs(y3 - y1) < ε && x1 - x3 > ε ? {\n x: abs(y2 - y1) < ε ? x2 : x1,\n y: y1\n } : abs(x3 - x1) < ε && y3 - y0 > ε ? {\n x: x1,\n y: abs(x2 - x1) < ε ? y2 : y0\n } : abs(y3 - y0) < ε && x3 - x0 > ε ? {\n x: abs(y2 - y0) < ε ? x2 : x0,\n y: y0\n } : null), cell.site, null));\n ++nHalfEdges;\n }\n }\n }\n }\n function d3_geom_voronoiHalfEdgeOrder(a, b) {\n return b.angle - a.angle;\n }\n function d3_geom_voronoiCircle() {\n d3_geom_voronoiRedBlackNode(this);\n this.x = this.y = this.arc = this.site = this.cy = null;\n }\n function d3_geom_voronoiAttachCircle(arc) {\n var lArc = arc.P, rArc = arc.N;\n if (!lArc || !rArc) return;\n var lSite = lArc.site, cSite = arc.site, rSite = rArc.site;\n if (lSite === rSite) return;\n var bx = cSite.x, by = cSite.y, ax = lSite.x - bx, ay = lSite.y - by, cx = rSite.x - bx, cy = rSite.y - by;\n var d = 2 * (ax * cy - ay * cx);\n if (d >= -ε2) return;\n var ha = ax * ax + ay * ay, hc = cx * cx + cy * cy, x = (cy * ha - ay * hc) / d, y = (ax * hc - cx * ha) / d, cy = y + by;\n var circle = d3_geom_voronoiCirclePool.pop() || new d3_geom_voronoiCircle();\n circle.arc = arc;\n circle.site = cSite;\n circle.x = x + bx;\n circle.y = cy + Math.sqrt(x * x + y * y);\n circle.cy = cy;\n arc.circle = circle;\n var before = null, node = d3_geom_voronoiCircles._;\n while (node) {\n if (circle.y < node.y || circle.y === node.y && circle.x <= node.x) {\n if (node.L) node = node.L; else {\n before = node.P;\n break;\n }\n } else {\n if (node.R) node = node.R; else {\n before = node;\n break;\n }\n }\n }\n d3_geom_voronoiCircles.insert(before, circle);\n if (!before) d3_geom_voronoiFirstCircle = circle;\n }\n function d3_geom_voronoiDetachCircle(arc) {\n var circle = arc.circle;\n if (circle) {\n if (!circle.P) d3_geom_voronoiFirstCircle = circle.N;\n d3_geom_voronoiCircles.remove(circle);\n d3_geom_voronoiCirclePool.push(circle);\n d3_geom_voronoiRedBlackNode(circle);\n arc.circle = null;\n }\n }\n function d3_geom_voronoiClipEdges(extent) {\n var edges = d3_geom_voronoiEdges, clip = d3_geom_clipLine(extent[0][0], extent[0][1], extent[1][0], extent[1][1]), i = edges.length, e;\n while (i--) {\n e = edges[i];\n if (!d3_geom_voronoiConnectEdge(e, extent) || !clip(e) || abs(e.a.x - e.b.x) < ε && abs(e.a.y - e.b.y) < ε) {\n e.a = e.b = null;\n edges.splice(i, 1);\n }\n }\n }\n function d3_geom_voronoiConnectEdge(edge, extent) {\n var vb = edge.b;\n if (vb) return true;\n var va = edge.a, x0 = extent[0][0], x1 = extent[1][0], y0 = extent[0][1], y1 = extent[1][1], lSite = edge.l, rSite = edge.r, lx = lSite.x, ly = lSite.y, rx = rSite.x, ry = rSite.y, fx = (lx + rx) / 2, fy = (ly + ry) / 2, fm, fb;\n if (ry === ly) {\n if (fx < x0 || fx >= x1) return;\n if (lx > rx) {\n if (!va) va = {\n x: fx,\n y: y0\n }; else if (va.y >= y1) return;\n vb = {\n x: fx,\n y: y1\n };\n } else {\n if (!va) va = {\n x: fx,\n y: y1\n }; else if (va.y < y0) return;\n vb = {\n x: fx,\n y: y0\n };\n }\n } else {\n fm = (lx - rx) / (ry - ly);\n fb = fy - fm * fx;\n if (fm < -1 || fm > 1) {\n if (lx > rx) {\n if (!va) va = {\n x: (y0 - fb) / fm,\n y: y0\n }; else if (va.y >= y1) return;\n vb = {\n x: (y1 - fb) / fm,\n y: y1\n };\n } else {\n if (!va) va = {\n x: (y1 - fb) / fm,\n y: y1\n }; else if (va.y < y0) return;\n vb = {\n x: (y0 - fb) / fm,\n y: y0\n };\n }\n } else {\n if (ly < ry) {\n if (!va) va = {\n x: x0,\n y: fm * x0 + fb\n }; else if (va.x >= x1) return;\n vb = {\n x: x1,\n y: fm * x1 + fb\n };\n } else {\n if (!va) va = {\n x: x1,\n y: fm * x1 + fb\n }; else if (va.x < x0) return;\n vb = {\n x: x0,\n y: fm * x0 + fb\n };\n }\n }\n }\n edge.a = va;\n edge.b = vb;\n return true;\n }\n function d3_geom_voronoiEdge(lSite, rSite) {\n this.l = lSite;\n this.r = rSite;\n this.a = this.b = null;\n }\n function d3_geom_voronoiCreateEdge(lSite, rSite, va, vb) {\n var edge = new d3_geom_voronoiEdge(lSite, rSite);\n d3_geom_voronoiEdges.push(edge);\n if (va) d3_geom_voronoiSetEdgeEnd(edge, lSite, rSite, va);\n if (vb) d3_geom_voronoiSetEdgeEnd(edge, rSite, lSite, vb);\n d3_geom_voronoiCells[lSite.i].edges.push(new d3_geom_voronoiHalfEdge(edge, lSite, rSite));\n d3_geom_voronoiCells[rSite.i].edges.push(new d3_geom_voronoiHalfEdge(edge, rSite, lSite));\n return edge;\n }\n function d3_geom_voronoiCreateBorderEdge(lSite, va, vb) {\n var edge = new d3_geom_voronoiEdge(lSite, null);\n edge.a = va;\n edge.b = vb;\n d3_geom_voronoiEdges.push(edge);\n return edge;\n }\n function d3_geom_voronoiSetEdgeEnd(edge, lSite, rSite, vertex) {\n if (!edge.a && !edge.b) {\n edge.a = vertex;\n edge.l = lSite;\n edge.r = rSite;\n } else if (edge.l === rSite) {\n edge.b = vertex;\n } else {\n edge.a = vertex;\n }\n }\n function d3_geom_voronoiHalfEdge(edge, lSite, rSite) {\n var va = edge.a, vb = edge.b;\n this.edge = edge;\n this.site = lSite;\n this.angle = rSite ? Math.atan2(rSite.y - lSite.y, rSite.x - lSite.x) : edge.l === lSite ? Math.atan2(vb.x - va.x, va.y - vb.y) : Math.atan2(va.x - vb.x, vb.y - va.y);\n }\n d3_geom_voronoiHalfEdge.prototype = {\n start: function() {\n return this.edge.l === this.site ? this.edge.a : this.edge.b;\n },\n end: function() {\n return this.edge.l === this.site ? this.edge.b : this.edge.a;\n }\n };\n function d3_geom_voronoiRedBlackTree() {\n this._ = null;\n }\n function d3_geom_voronoiRedBlackNode(node) {\n node.U = node.C = node.L = node.R = node.P = node.N = null;\n }\n d3_geom_voronoiRedBlackTree.prototype = {\n insert: function(after, node) {\n var parent, grandpa, uncle;\n if (after) {\n node.P = after;\n node.N = after.N;\n if (after.N) after.N.P = node;\n after.N = node;\n if (after.R) {\n after = after.R;\n while (after.L) after = after.L;\n after.L = node;\n } else {\n after.R = node;\n }\n parent = after;\n } else if (this._) {\n after = d3_geom_voronoiRedBlackFirst(this._);\n node.P = null;\n node.N = after;\n after.P = after.L = node;\n parent = after;\n } else {\n node.P = node.N = null;\n this._ = node;\n parent = null;\n }\n node.L = node.R = null;\n node.U = parent;\n node.C = true;\n after = node;\n while (parent && parent.C) {\n grandpa = parent.U;\n if (parent === grandpa.L) {\n uncle = grandpa.R;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.R) {\n d3_geom_voronoiRedBlackRotateLeft(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n d3_geom_voronoiRedBlackRotateRight(this, grandpa);\n }\n } else {\n uncle = grandpa.L;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.L) {\n d3_geom_voronoiRedBlackRotateRight(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n d3_geom_voronoiRedBlackRotateLeft(this, grandpa);\n }\n }\n parent = after.U;\n }\n this._.C = false;\n },\n remove: function(node) {\n if (node.N) node.N.P = node.P;\n if (node.P) node.P.N = node.N;\n node.N = node.P = null;\n var parent = node.U, sibling, left = node.L, right = node.R, next, red;\n if (!left) next = right; else if (!right) next = left; else next = d3_geom_voronoiRedBlackFirst(right);\n if (parent) {\n if (parent.L === node) parent.L = next; else parent.R = next;\n } else {\n this._ = next;\n }\n if (left && right) {\n red = next.C;\n next.C = node.C;\n next.L = left;\n left.U = next;\n if (next !== right) {\n parent = next.U;\n next.U = node.U;\n node = next.R;\n parent.L = node;\n next.R = right;\n right.U = next;\n } else {\n next.U = parent;\n parent = next;\n node = next.R;\n }\n } else {\n red = node.C;\n node = next;\n }\n if (node) node.U = parent;\n if (red) return;\n if (node && node.C) {\n node.C = false;\n return;\n }\n do {\n if (node === this._) break;\n if (node === parent.L) {\n sibling = parent.R;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n d3_geom_voronoiRedBlackRotateLeft(this, parent);\n sibling = parent.R;\n }\n if (sibling.L && sibling.L.C || sibling.R && sibling.R.C) {\n if (!sibling.R || !sibling.R.C) {\n sibling.L.C = false;\n sibling.C = true;\n d3_geom_voronoiRedBlackRotateRight(this, sibling);\n sibling = parent.R;\n }\n sibling.C = parent.C;\n parent.C = sibling.R.C = false;\n d3_geom_voronoiRedBlackRotateLeft(this, parent);\n node = this._;\n break;\n }\n } else {\n sibling = parent.L;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n d3_geom_voronoiRedBlackRotateRight(this, parent);\n sibling = parent.L;\n }\n if (sibling.L && sibling.L.C || sibling.R && sibling.R.C) {\n if (!sibling.L || !sibling.L.C) {\n sibling.R.C = false;\n sibling.C = true;\n d3_geom_voronoiRedBlackRotateLeft(this, sibling);\n sibling = parent.L;\n }\n sibling.C = parent.C;\n parent.C = sibling.L.C = false;\n d3_geom_voronoiRedBlackRotateRight(this, parent);\n node = this._;\n break;\n }\n }\n sibling.C = true;\n node = parent;\n parent = parent.U;\n } while (!node.C);\n if (node) node.C = false;\n }\n };\n function d3_geom_voronoiRedBlackRotateLeft(tree, node) {\n var p = node, q = node.R, parent = p.U;\n if (parent) {\n if (parent.L === p) parent.L = q; else parent.R = q;\n } else {\n tree._ = q;\n }\n q.U = parent;\n p.U = q;\n p.R = q.L;\n if (p.R) p.R.U = p;\n q.L = p;\n }\n function d3_geom_voronoiRedBlackRotateRight(tree, node) {\n var p = node, q = node.L, parent = p.U;\n if (parent) {\n if (parent.L === p) parent.L = q; else parent.R = q;\n } else {\n tree._ = q;\n }\n q.U = parent;\n p.U = q;\n p.L = q.R;\n if (p.L) p.L.U = p;\n q.R = p;\n }\n function d3_geom_voronoiRedBlackFirst(node) {\n while (node.L) node = node.L;\n return node;\n }\n function d3_geom_voronoi(sites, bbox) {\n var site = sites.sort(d3_geom_voronoiVertexOrder).pop(), x0, y0, circle;\n d3_geom_voronoiEdges = [];\n d3_geom_voronoiCells = new Array(sites.length);\n d3_geom_voronoiBeaches = new d3_geom_voronoiRedBlackTree();\n d3_geom_voronoiCircles = new d3_geom_voronoiRedBlackTree();\n while (true) {\n circle = d3_geom_voronoiFirstCircle;\n if (site && (!circle || site.y < circle.y || site.y === circle.y && site.x < circle.x)) {\n if (site.x !== x0 || site.y !== y0) {\n d3_geom_voronoiCells[site.i] = new d3_geom_voronoiCell(site);\n d3_geom_voronoiAddBeach(site);\n x0 = site.x, y0 = site.y;\n }\n site = sites.pop();\n } else if (circle) {\n d3_geom_voronoiRemoveBeach(circle.arc);\n } else {\n break;\n }\n }\n if (bbox) d3_geom_voronoiClipEdges(bbox), d3_geom_voronoiCloseCells(bbox);\n var diagram = {\n cells: d3_geom_voronoiCells,\n edges: d3_geom_voronoiEdges\n };\n d3_geom_voronoiBeaches = d3_geom_voronoiCircles = d3_geom_voronoiEdges = d3_geom_voronoiCells = null;\n return diagram;\n }\n function d3_geom_voronoiVertexOrder(a, b) {\n return b.y - a.y || b.x - a.x;\n }\n d3.geom.voronoi = function(points) {\n var x = d3_geom_pointX, y = d3_geom_pointY, fx = x, fy = y, clipExtent = d3_geom_voronoiClipExtent;\n if (points) return voronoi(points);\n function voronoi(data) {\n var polygons = new Array(data.length), x0 = clipExtent[0][0], y0 = clipExtent[0][1], x1 = clipExtent[1][0], y1 = clipExtent[1][1];\n d3_geom_voronoi(sites(data), clipExtent).cells.forEach(function(cell, i) {\n var edges = cell.edges, site = cell.site, polygon = polygons[i] = edges.length ? edges.map(function(e) {\n var s = e.start();\n return [ s.x, s.y ];\n }) : site.x >= x0 && site.x <= x1 && site.y >= y0 && site.y <= y1 ? [ [ x0, y1 ], [ x1, y1 ], [ x1, y0 ], [ x0, y0 ] ] : [];\n polygon.point = data[i];\n });\n return polygons;\n }\n function sites(data) {\n return data.map(function(d, i) {\n return {\n x: Math.round(fx(d, i) / ε) * ε,\n y: Math.round(fy(d, i) / ε) * ε,\n i: i\n };\n });\n }\n voronoi.links = function(data) {\n return d3_geom_voronoi(sites(data)).edges.filter(function(edge) {\n return edge.l && edge.r;\n }).map(function(edge) {\n return {\n source: data[edge.l.i],\n target: data[edge.r.i]\n };\n });\n };\n voronoi.triangles = function(data) {\n var triangles = [];\n d3_geom_voronoi(sites(data)).cells.forEach(function(cell, i) {\n var site = cell.site, edges = cell.edges.sort(d3_geom_voronoiHalfEdgeOrder), j = -1, m = edges.length, e0, s0, e1 = edges[m - 1].edge, s1 = e1.l === site ? e1.r : e1.l;\n while (++j < m) {\n e0 = e1;\n s0 = s1;\n e1 = edges[j].edge;\n s1 = e1.l === site ? e1.r : e1.l;\n if (i < s0.i && i < s1.i && d3_geom_voronoiTriangleArea(site, s0, s1) < 0) {\n triangles.push([ data[i], data[s0.i], data[s1.i] ]);\n }\n }\n });\n return triangles;\n };\n voronoi.x = function(_) {\n return arguments.length ? (fx = d3_functor(x = _), voronoi) : x;\n };\n voronoi.y = function(_) {\n return arguments.length ? (fy = d3_functor(y = _), voronoi) : y;\n };\n voronoi.clipExtent = function(_) {\n if (!arguments.length) return clipExtent === d3_geom_voronoiClipExtent ? null : clipExtent;\n clipExtent = _ == null ? d3_geom_voronoiClipExtent : _;\n return voronoi;\n };\n voronoi.size = function(_) {\n if (!arguments.length) return clipExtent === d3_geom_voronoiClipExtent ? null : clipExtent && clipExtent[1];\n return voronoi.clipExtent(_ && [ [ 0, 0 ], _ ]);\n };\n return voronoi;\n };\n var d3_geom_voronoiClipExtent = [ [ -1e6, -1e6 ], [ 1e6, 1e6 ] ];\n function d3_geom_voronoiTriangleArea(a, b, c) {\n return (a.x - c.x) * (b.y - a.y) - (a.x - b.x) * (c.y - a.y);\n }\n d3.geom.delaunay = function(vertices) {\n return d3.geom.voronoi().triangles(vertices);\n };\n d3.geom.quadtree = function(points, x1, y1, x2, y2) {\n var x = d3_geom_pointX, y = d3_geom_pointY, compat;\n if (compat = arguments.length) {\n x = d3_geom_quadtreeCompatX;\n y = d3_geom_quadtreeCompatY;\n if (compat === 3) {\n y2 = y1;\n x2 = x1;\n y1 = x1 = 0;\n }\n return quadtree(points);\n }\n function quadtree(data) {\n var d, fx = d3_functor(x), fy = d3_functor(y), xs, ys, i, n, x1_, y1_, x2_, y2_;\n if (x1 != null) {\n x1_ = x1, y1_ = y1, x2_ = x2, y2_ = y2;\n } else {\n x2_ = y2_ = -(x1_ = y1_ = Infinity);\n xs = [], ys = [];\n n = data.length;\n if (compat) for (i = 0; i < n; ++i) {\n d = data[i];\n if (d.x < x1_) x1_ = d.x;\n if (d.y < y1_) y1_ = d.y;\n if (d.x > x2_) x2_ = d.x;\n if (d.y > y2_) y2_ = d.y;\n xs.push(d.x);\n ys.push(d.y);\n } else for (i = 0; i < n; ++i) {\n var x_ = +fx(d = data[i], i), y_ = +fy(d, i);\n if (x_ < x1_) x1_ = x_;\n if (y_ < y1_) y1_ = y_;\n if (x_ > x2_) x2_ = x_;\n if (y_ > y2_) y2_ = y_;\n xs.push(x_);\n ys.push(y_);\n }\n }\n var dx = x2_ - x1_, dy = y2_ - y1_;\n if (dx > dy) y2_ = y1_ + dx; else x2_ = x1_ + dy;\n function insert(n, d, x, y, x1, y1, x2, y2) {\n if (isNaN(x) || isNaN(y)) return;\n if (n.leaf) {\n var nx = n.x, ny = n.y;\n if (nx != null) {\n if (abs(nx - x) + abs(ny - y) < .01) {\n insertChild(n, d, x, y, x1, y1, x2, y2);\n } else {\n var nPoint = n.point;\n n.x = n.y = n.point = null;\n insertChild(n, nPoint, nx, ny, x1, y1, x2, y2);\n insertChild(n, d, x, y, x1, y1, x2, y2);\n }\n } else {\n n.x = x, n.y = y, n.point = d;\n }\n } else {\n insertChild(n, d, x, y, x1, y1, x2, y2);\n }\n }\n function insertChild(n, d, x, y, x1, y1, x2, y2) {\n var xm = (x1 + x2) * .5, ym = (y1 + y2) * .5, right = x >= xm, below = y >= ym, i = below << 1 | right;\n n.leaf = false;\n n = n.nodes[i] || (n.nodes[i] = d3_geom_quadtreeNode());\n if (right) x1 = xm; else x2 = xm;\n if (below) y1 = ym; else y2 = ym;\n insert(n, d, x, y, x1, y1, x2, y2);\n }\n var root = d3_geom_quadtreeNode();\n root.add = function(d) {\n insert(root, d, +fx(d, ++i), +fy(d, i), x1_, y1_, x2_, y2_);\n };\n root.visit = function(f) {\n d3_geom_quadtreeVisit(f, root, x1_, y1_, x2_, y2_);\n };\n root.find = function(point) {\n return d3_geom_quadtreeFind(root, point[0], point[1], x1_, y1_, x2_, y2_);\n };\n i = -1;\n if (x1 == null) {\n while (++i < n) {\n insert(root, data[i], xs[i], ys[i], x1_, y1_, x2_, y2_);\n }\n --i;\n } else data.forEach(root.add);\n xs = ys = data = d = null;\n return root;\n }\n quadtree.x = function(_) {\n return arguments.length ? (x = _, quadtree) : x;\n };\n quadtree.y = function(_) {\n return arguments.length ? (y = _, quadtree) : y;\n };\n quadtree.extent = function(_) {\n if (!arguments.length) return x1 == null ? null : [ [ x1, y1 ], [ x2, y2 ] ];\n if (_ == null) x1 = y1 = x2 = y2 = null; else x1 = +_[0][0], y1 = +_[0][1], x2 = +_[1][0], \n y2 = +_[1][1];\n return quadtree;\n };\n quadtree.size = function(_) {\n if (!arguments.length) return x1 == null ? null : [ x2 - x1, y2 - y1 ];\n if (_ == null) x1 = y1 = x2 = y2 = null; else x1 = y1 = 0, x2 = +_[0], y2 = +_[1];\n return quadtree;\n };\n return quadtree;\n };\n function d3_geom_quadtreeCompatX(d) {\n return d.x;\n }\n function d3_geom_quadtreeCompatY(d) {\n return d.y;\n }\n function d3_geom_quadtreeNode() {\n return {\n leaf: true,\n nodes: [],\n point: null,\n x: null,\n y: null\n };\n }\n function d3_geom_quadtreeVisit(f, node, x1, y1, x2, y2) {\n if (!f(node, x1, y1, x2, y2)) {\n var sx = (x1 + x2) * .5, sy = (y1 + y2) * .5, children = node.nodes;\n if (children[0]) d3_geom_quadtreeVisit(f, children[0], x1, y1, sx, sy);\n if (children[1]) d3_geom_quadtreeVisit(f, children[1], sx, y1, x2, sy);\n if (children[2]) d3_geom_quadtreeVisit(f, children[2], x1, sy, sx, y2);\n if (children[3]) d3_geom_quadtreeVisit(f, children[3], sx, sy, x2, y2);\n }\n }\n function d3_geom_quadtreeFind(root, x, y, x0, y0, x3, y3) {\n var minDistance2 = Infinity, closestPoint;\n (function find(node, x1, y1, x2, y2) {\n if (x1 > x3 || y1 > y3 || x2 < x0 || y2 < y0) return;\n if (point = node.point) {\n var point, dx = x - node.x, dy = y - node.y, distance2 = dx * dx + dy * dy;\n if (distance2 < minDistance2) {\n var distance = Math.sqrt(minDistance2 = distance2);\n x0 = x - distance, y0 = y - distance;\n x3 = x + distance, y3 = y + distance;\n closestPoint = point;\n }\n }\n var children = node.nodes, xm = (x1 + x2) * .5, ym = (y1 + y2) * .5, right = x >= xm, below = y >= ym;\n for (var i = below << 1 | right, j = i + 4; i < j; ++i) {\n if (node = children[i & 3]) switch (i & 3) {\n case 0:\n find(node, x1, y1, xm, ym);\n break;\n\n case 1:\n find(node, xm, y1, x2, ym);\n break;\n\n case 2:\n find(node, x1, ym, xm, y2);\n break;\n\n case 3:\n find(node, xm, ym, x2, y2);\n break;\n }\n }\n })(root, x0, y0, x3, y3);\n return closestPoint;\n }\n d3.interpolateRgb = d3_interpolateRgb;\n function d3_interpolateRgb(a, b) {\n a = d3.rgb(a);\n b = d3.rgb(b);\n var ar = a.r, ag = a.g, ab = a.b, br = b.r - ar, bg = b.g - ag, bb = b.b - ab;\n return function(t) {\n return \"#\" + d3_rgb_hex(Math.round(ar + br * t)) + d3_rgb_hex(Math.round(ag + bg * t)) + d3_rgb_hex(Math.round(ab + bb * t));\n };\n }\n d3.interpolateObject = d3_interpolateObject;\n function d3_interpolateObject(a, b) {\n var i = {}, c = {}, k;\n for (k in a) {\n if (k in b) {\n i[k] = d3_interpolate(a[k], b[k]);\n } else {\n c[k] = a[k];\n }\n }\n for (k in b) {\n if (!(k in a)) {\n c[k] = b[k];\n }\n }\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n }\n d3.interpolateNumber = d3_interpolateNumber;\n function d3_interpolateNumber(a, b) {\n a = +a, b = +b;\n return function(t) {\n return a * (1 - t) + b * t;\n };\n }\n d3.interpolateString = d3_interpolateString;\n function d3_interpolateString(a, b) {\n var bi = d3_interpolate_numberA.lastIndex = d3_interpolate_numberB.lastIndex = 0, am, bm, bs, i = -1, s = [], q = [];\n a = a + \"\", b = b + \"\";\n while ((am = d3_interpolate_numberA.exec(a)) && (bm = d3_interpolate_numberB.exec(b))) {\n if ((bs = bm.index) > bi) {\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) {\n if (s[i]) s[i] += bm; else s[++i] = bm;\n } else {\n s[++i] = null;\n q.push({\n i: i,\n x: d3_interpolateNumber(am, bm)\n });\n }\n bi = d3_interpolate_numberB.lastIndex;\n }\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; else s[++i] = bs;\n }\n return s.length < 2 ? q[0] ? (b = q[0].x, function(t) {\n return b(t) + \"\";\n }) : function() {\n return b;\n } : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n }\n var d3_interpolate_numberA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g, d3_interpolate_numberB = new RegExp(d3_interpolate_numberA.source, \"g\");\n d3.interpolate = d3_interpolate;\n function d3_interpolate(a, b) {\n var i = d3.interpolators.length, f;\n while (--i >= 0 && !(f = d3.interpolators[i](a, b))) ;\n return f;\n }\n d3.interpolators = [ function(a, b) {\n var t = typeof b;\n return (t === \"string\" ? d3_rgb_names.has(b) || /^(#|rgb\\(|hsl\\()/.test(b) ? d3_interpolateRgb : d3_interpolateString : b instanceof d3_color ? d3_interpolateRgb : Array.isArray(b) ? d3_interpolateArray : t === \"object\" && isNaN(b) ? d3_interpolateObject : d3_interpolateNumber)(a, b);\n } ];\n d3.interpolateArray = d3_interpolateArray;\n function d3_interpolateArray(a, b) {\n var x = [], c = [], na = a.length, nb = b.length, n0 = Math.min(a.length, b.length), i;\n for (i = 0; i < n0; ++i) x.push(d3_interpolate(a[i], b[i]));\n for (;i < na; ++i) c[i] = a[i];\n for (;i < nb; ++i) c[i] = b[i];\n return function(t) {\n for (i = 0; i < n0; ++i) c[i] = x[i](t);\n return c;\n };\n }\n var d3_ease_default = function() {\n return d3_identity;\n };\n var d3_ease = d3.map({\n linear: d3_ease_default,\n poly: d3_ease_poly,\n quad: function() {\n return d3_ease_quad;\n },\n cubic: function() {\n return d3_ease_cubic;\n },\n sin: function() {\n return d3_ease_sin;\n },\n exp: function() {\n return d3_ease_exp;\n },\n circle: function() {\n return d3_ease_circle;\n },\n elastic: d3_ease_elastic,\n back: d3_ease_back,\n bounce: function() {\n return d3_ease_bounce;\n }\n });\n var d3_ease_mode = d3.map({\n \"in\": d3_identity,\n out: d3_ease_reverse,\n \"in-out\": d3_ease_reflect,\n \"out-in\": function(f) {\n return d3_ease_reflect(d3_ease_reverse(f));\n }\n });\n d3.ease = function(name) {\n var i = name.indexOf(\"-\"), t = i >= 0 ? name.slice(0, i) : name, m = i >= 0 ? name.slice(i + 1) : \"in\";\n t = d3_ease.get(t) || d3_ease_default;\n m = d3_ease_mode.get(m) || d3_identity;\n return d3_ease_clamp(m(t.apply(null, d3_arraySlice.call(arguments, 1))));\n };\n function d3_ease_clamp(f) {\n return function(t) {\n return t <= 0 ? 0 : t >= 1 ? 1 : f(t);\n };\n }\n function d3_ease_reverse(f) {\n return function(t) {\n return 1 - f(1 - t);\n };\n }\n function d3_ease_reflect(f) {\n return function(t) {\n return .5 * (t < .5 ? f(2 * t) : 2 - f(2 - 2 * t));\n };\n }\n function d3_ease_quad(t) {\n return t * t;\n }\n function d3_ease_cubic(t) {\n return t * t * t;\n }\n function d3_ease_cubicInOut(t) {\n if (t <= 0) return 0;\n if (t >= 1) return 1;\n var t2 = t * t, t3 = t2 * t;\n return 4 * (t < .5 ? t3 : 3 * (t - t2) + t3 - .75);\n }\n function d3_ease_poly(e) {\n return function(t) {\n return Math.pow(t, e);\n };\n }\n function d3_ease_sin(t) {\n return 1 - Math.cos(t * halfπ);\n }\n function d3_ease_exp(t) {\n return Math.pow(2, 10 * (t - 1));\n }\n function d3_ease_circle(t) {\n return 1 - Math.sqrt(1 - t * t);\n }\n function d3_ease_elastic(a, p) {\n var s;\n if (arguments.length < 2) p = .45;\n if (arguments.length) s = p / τ * Math.asin(1 / a); else a = 1, s = p / 4;\n return function(t) {\n return 1 + a * Math.pow(2, -10 * t) * Math.sin((t - s) * τ / p);\n };\n }\n function d3_ease_back(s) {\n if (!s) s = 1.70158;\n return function(t) {\n return t * t * ((s + 1) * t - s);\n };\n }\n function d3_ease_bounce(t) {\n return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375;\n }\n d3.interpolateHcl = d3_interpolateHcl;\n function d3_interpolateHcl(a, b) {\n a = d3.hcl(a);\n b = d3.hcl(b);\n var ah = a.h, ac = a.c, al = a.l, bh = b.h - ah, bc = b.c - ac, bl = b.l - al;\n if (isNaN(bc)) bc = 0, ac = isNaN(ac) ? b.c : ac;\n if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah; else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360;\n return function(t) {\n return d3_hcl_lab(ah + bh * t, ac + bc * t, al + bl * t) + \"\";\n };\n }\n d3.interpolateHsl = d3_interpolateHsl;\n function d3_interpolateHsl(a, b) {\n a = d3.hsl(a);\n b = d3.hsl(b);\n var ah = a.h, as = a.s, al = a.l, bh = b.h - ah, bs = b.s - as, bl = b.l - al;\n if (isNaN(bs)) bs = 0, as = isNaN(as) ? b.s : as;\n if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah; else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360;\n return function(t) {\n return d3_hsl_rgb(ah + bh * t, as + bs * t, al + bl * t) + \"\";\n };\n }\n d3.interpolateLab = d3_interpolateLab;\n function d3_interpolateLab(a, b) {\n a = d3.lab(a);\n b = d3.lab(b);\n var al = a.l, aa = a.a, ab = a.b, bl = b.l - al, ba = b.a - aa, bb = b.b - ab;\n return function(t) {\n return d3_lab_rgb(al + bl * t, aa + ba * t, ab + bb * t) + \"\";\n };\n }\n d3.interpolateRound = d3_interpolateRound;\n function d3_interpolateRound(a, b) {\n b -= a;\n return function(t) {\n return Math.round(a + b * t);\n };\n }\n d3.transform = function(string) {\n var g = d3_document.createElementNS(d3.ns.prefix.svg, \"g\");\n return (d3.transform = function(string) {\n if (string != null) {\n g.setAttribute(\"transform\", string);\n var t = g.transform.baseVal.consolidate();\n }\n return new d3_transform(t ? t.matrix : d3_transformIdentity);\n })(string);\n };\n function d3_transform(m) {\n var r0 = [ m.a, m.b ], r1 = [ m.c, m.d ], kx = d3_transformNormalize(r0), kz = d3_transformDot(r0, r1), ky = d3_transformNormalize(d3_transformCombine(r1, r0, -kz)) || 0;\n if (r0[0] * r1[1] < r1[0] * r0[1]) {\n r0[0] *= -1;\n r0[1] *= -1;\n kx *= -1;\n kz *= -1;\n }\n this.rotate = (kx ? Math.atan2(r0[1], r0[0]) : Math.atan2(-r1[0], r1[1])) * d3_degrees;\n this.translate = [ m.e, m.f ];\n this.scale = [ kx, ky ];\n this.skew = ky ? Math.atan2(kz, ky) * d3_degrees : 0;\n }\n d3_transform.prototype.toString = function() {\n return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\";\n };\n function d3_transformDot(a, b) {\n return a[0] * b[0] + a[1] * b[1];\n }\n function d3_transformNormalize(a) {\n var k = Math.sqrt(d3_transformDot(a, a));\n if (k) {\n a[0] /= k;\n a[1] /= k;\n }\n return k;\n }\n function d3_transformCombine(a, b, k) {\n a[0] += k * b[0];\n a[1] += k * b[1];\n return a;\n }\n var d3_transformIdentity = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: 0,\n f: 0\n };\n d3.interpolateTransform = d3_interpolateTransform;\n function d3_interpolateTransform(a, b) {\n var s = [], q = [], n, A = d3.transform(a), B = d3.transform(b), ta = A.translate, tb = B.translate, ra = A.rotate, rb = B.rotate, wa = A.skew, wb = B.skew, ka = A.scale, kb = B.scale;\n if (ta[0] != tb[0] || ta[1] != tb[1]) {\n s.push(\"translate(\", null, \",\", null, \")\");\n q.push({\n i: 1,\n x: d3_interpolateNumber(ta[0], tb[0])\n }, {\n i: 3,\n x: d3_interpolateNumber(ta[1], tb[1])\n });\n } else if (tb[0] || tb[1]) {\n s.push(\"translate(\" + tb + \")\");\n } else {\n s.push(\"\");\n }\n if (ra != rb) {\n if (ra - rb > 180) rb += 360; else if (rb - ra > 180) ra += 360;\n q.push({\n i: s.push(s.pop() + \"rotate(\", null, \")\") - 2,\n x: d3_interpolateNumber(ra, rb)\n });\n } else if (rb) {\n s.push(s.pop() + \"rotate(\" + rb + \")\");\n }\n if (wa != wb) {\n q.push({\n i: s.push(s.pop() + \"skewX(\", null, \")\") - 2,\n x: d3_interpolateNumber(wa, wb)\n });\n } else if (wb) {\n s.push(s.pop() + \"skewX(\" + wb + \")\");\n }\n if (ka[0] != kb[0] || ka[1] != kb[1]) {\n n = s.push(s.pop() + \"scale(\", null, \",\", null, \")\");\n q.push({\n i: n - 4,\n x: d3_interpolateNumber(ka[0], kb[0])\n }, {\n i: n - 2,\n x: d3_interpolateNumber(ka[1], kb[1])\n });\n } else if (kb[0] != 1 || kb[1] != 1) {\n s.push(s.pop() + \"scale(\" + kb + \")\");\n }\n n = q.length;\n return function(t) {\n var i = -1, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n }\n function d3_uninterpolateNumber(a, b) {\n b = (b -= a = +a) || 1 / b;\n return function(x) {\n return (x - a) / b;\n };\n }\n function d3_uninterpolateClamp(a, b) {\n b = (b -= a = +a) || 1 / b;\n return function(x) {\n return Math.max(0, Math.min(1, (x - a) / b));\n };\n }\n d3.layout = {};\n d3.layout.bundle = function() {\n return function(links) {\n var paths = [], i = -1, n = links.length;\n while (++i < n) paths.push(d3_layout_bundlePath(links[i]));\n return paths;\n };\n };\n function d3_layout_bundlePath(link) {\n var start = link.source, end = link.target, lca = d3_layout_bundleLeastCommonAncestor(start, end), points = [ start ];\n while (start !== lca) {\n start = start.parent;\n points.push(start);\n }\n var k = points.length;\n while (end !== lca) {\n points.splice(k, 0, end);\n end = end.parent;\n }\n return points;\n }\n function d3_layout_bundleAncestors(node) {\n var ancestors = [], parent = node.parent;\n while (parent != null) {\n ancestors.push(node);\n node = parent;\n parent = parent.parent;\n }\n ancestors.push(node);\n return ancestors;\n }\n function d3_layout_bundleLeastCommonAncestor(a, b) {\n if (a === b) return a;\n var aNodes = d3_layout_bundleAncestors(a), bNodes = d3_layout_bundleAncestors(b), aNode = aNodes.pop(), bNode = bNodes.pop(), sharedNode = null;\n while (aNode === bNode) {\n sharedNode = aNode;\n aNode = aNodes.pop();\n bNode = bNodes.pop();\n }\n return sharedNode;\n }\n d3.layout.chord = function() {\n var chord = {}, chords, groups, matrix, n, padding = 0, sortGroups, sortSubgroups, sortChords;\n function relayout() {\n var subgroups = {}, groupSums = [], groupIndex = d3.range(n), subgroupIndex = [], k, x, x0, i, j;\n chords = [];\n groups = [];\n k = 0, i = -1;\n while (++i < n) {\n x = 0, j = -1;\n while (++j < n) {\n x += matrix[i][j];\n }\n groupSums.push(x);\n subgroupIndex.push(d3.range(n));\n k += x;\n }\n if (sortGroups) {\n groupIndex.sort(function(a, b) {\n return sortGroups(groupSums[a], groupSums[b]);\n });\n }\n if (sortSubgroups) {\n subgroupIndex.forEach(function(d, i) {\n d.sort(function(a, b) {\n return sortSubgroups(matrix[i][a], matrix[i][b]);\n });\n });\n }\n k = (τ - padding * n) / k;\n x = 0, i = -1;\n while (++i < n) {\n x0 = x, j = -1;\n while (++j < n) {\n var di = groupIndex[i], dj = subgroupIndex[di][j], v = matrix[di][dj], a0 = x, a1 = x += v * k;\n subgroups[di + \"-\" + dj] = {\n index: di,\n subindex: dj,\n startAngle: a0,\n endAngle: a1,\n value: v\n };\n }\n groups[di] = {\n index: di,\n startAngle: x0,\n endAngle: x,\n value: (x - x0) / k\n };\n x += padding;\n }\n i = -1;\n while (++i < n) {\n j = i - 1;\n while (++j < n) {\n var source = subgroups[i + \"-\" + j], target = subgroups[j + \"-\" + i];\n if (source.value || target.value) {\n chords.push(source.value < target.value ? {\n source: target,\n target: source\n } : {\n source: source,\n target: target\n });\n }\n }\n }\n if (sortChords) resort();\n }\n function resort() {\n chords.sort(function(a, b) {\n return sortChords((a.source.value + a.target.value) / 2, (b.source.value + b.target.value) / 2);\n });\n }\n chord.matrix = function(x) {\n if (!arguments.length) return matrix;\n n = (matrix = x) && matrix.length;\n chords = groups = null;\n return chord;\n };\n chord.padding = function(x) {\n if (!arguments.length) return padding;\n padding = x;\n chords = groups = null;\n return chord;\n };\n chord.sortGroups = function(x) {\n if (!arguments.length) return sortGroups;\n sortGroups = x;\n chords = groups = null;\n return chord;\n };\n chord.sortSubgroups = function(x) {\n if (!arguments.length) return sortSubgroups;\n sortSubgroups = x;\n chords = null;\n return chord;\n };\n chord.sortChords = function(x) {\n if (!arguments.length) return sortChords;\n sortChords = x;\n if (chords) resort();\n return chord;\n };\n chord.chords = function() {\n if (!chords) relayout();\n return chords;\n };\n chord.groups = function() {\n if (!groups) relayout();\n return groups;\n };\n return chord;\n };\n d3.layout.force = function() {\n var force = {}, event = d3.dispatch(\"start\", \"tick\", \"end\"), size = [ 1, 1 ], drag, alpha, friction = .9, linkDistance = d3_layout_forceLinkDistance, linkStrength = d3_layout_forceLinkStrength, charge = -30, chargeDistance2 = d3_layout_forceChargeDistance2, gravity = .1, theta2 = .64, nodes = [], links = [], distances, strengths, charges;\n function repulse(node) {\n return function(quad, x1, _, x2) {\n if (quad.point !== node) {\n var dx = quad.cx - node.x, dy = quad.cy - node.y, dw = x2 - x1, dn = dx * dx + dy * dy;\n if (dw * dw / theta2 < dn) {\n if (dn < chargeDistance2) {\n var k = quad.charge / dn;\n node.px -= dx * k;\n node.py -= dy * k;\n }\n return true;\n }\n if (quad.point && dn && dn < chargeDistance2) {\n var k = quad.pointCharge / dn;\n node.px -= dx * k;\n node.py -= dy * k;\n }\n }\n return !quad.charge;\n };\n }\n force.tick = function() {\n if ((alpha *= .99) < .005) {\n event.end({\n type: \"end\",\n alpha: alpha = 0\n });\n return true;\n }\n var n = nodes.length, m = links.length, q, i, o, s, t, l, k, x, y;\n for (i = 0; i < m; ++i) {\n o = links[i];\n s = o.source;\n t = o.target;\n x = t.x - s.x;\n y = t.y - s.y;\n if (l = x * x + y * y) {\n l = alpha * strengths[i] * ((l = Math.sqrt(l)) - distances[i]) / l;\n x *= l;\n y *= l;\n t.x -= x * (k = s.weight / (t.weight + s.weight));\n t.y -= y * k;\n s.x += x * (k = 1 - k);\n s.y += y * k;\n }\n }\n if (k = alpha * gravity) {\n x = size[0] / 2;\n y = size[1] / 2;\n i = -1;\n if (k) while (++i < n) {\n o = nodes[i];\n o.x += (x - o.x) * k;\n o.y += (y - o.y) * k;\n }\n }\n if (charge) {\n d3_layout_forceAccumulate(q = d3.geom.quadtree(nodes), alpha, charges);\n i = -1;\n while (++i < n) {\n if (!(o = nodes[i]).fixed) {\n q.visit(repulse(o));\n }\n }\n }\n i = -1;\n while (++i < n) {\n o = nodes[i];\n if (o.fixed) {\n o.x = o.px;\n o.y = o.py;\n } else {\n o.x -= (o.px - (o.px = o.x)) * friction;\n o.y -= (o.py - (o.py = o.y)) * friction;\n }\n }\n event.tick({\n type: \"tick\",\n alpha: alpha\n });\n };\n force.nodes = function(x) {\n if (!arguments.length) return nodes;\n nodes = x;\n return force;\n };\n force.links = function(x) {\n if (!arguments.length) return links;\n links = x;\n return force;\n };\n force.size = function(x) {\n if (!arguments.length) return size;\n size = x;\n return force;\n };\n force.linkDistance = function(x) {\n if (!arguments.length) return linkDistance;\n linkDistance = typeof x === \"function\" ? x : +x;\n return force;\n };\n force.distance = force.linkDistance;\n force.linkStrength = function(x) {\n if (!arguments.length) return linkStrength;\n linkStrength = typeof x === \"function\" ? x : +x;\n return force;\n };\n force.friction = function(x) {\n if (!arguments.length) return friction;\n friction = +x;\n return force;\n };\n force.charge = function(x) {\n if (!arguments.length) return charge;\n charge = typeof x === \"function\" ? x : +x;\n return force;\n };\n force.chargeDistance = function(x) {\n if (!arguments.length) return Math.sqrt(chargeDistance2);\n chargeDistance2 = x * x;\n return force;\n };\n force.gravity = function(x) {\n if (!arguments.length) return gravity;\n gravity = +x;\n return force;\n };\n force.theta = function(x) {\n if (!arguments.length) return Math.sqrt(theta2);\n theta2 = x * x;\n return force;\n };\n force.alpha = function(x) {\n if (!arguments.length) return alpha;\n x = +x;\n if (alpha) {\n if (x > 0) alpha = x; else alpha = 0;\n } else if (x > 0) {\n event.start({\n type: \"start\",\n alpha: alpha = x\n });\n d3.timer(force.tick);\n }\n return force;\n };\n force.start = function() {\n var i, n = nodes.length, m = links.length, w = size[0], h = size[1], neighbors, o;\n for (i = 0; i < n; ++i) {\n (o = nodes[i]).index = i;\n o.weight = 0;\n }\n for (i = 0; i < m; ++i) {\n o = links[i];\n if (typeof o.source == \"number\") o.source = nodes[o.source];\n if (typeof o.target == \"number\") o.target = nodes[o.target];\n ++o.source.weight;\n ++o.target.weight;\n }\n for (i = 0; i < n; ++i) {\n o = nodes[i];\n if (isNaN(o.x)) o.x = position(\"x\", w);\n if (isNaN(o.y)) o.y = position(\"y\", h);\n if (isNaN(o.px)) o.px = o.x;\n if (isNaN(o.py)) o.py = o.y;\n }\n distances = [];\n if (typeof linkDistance === \"function\") for (i = 0; i < m; ++i) distances[i] = +linkDistance.call(this, links[i], i); else for (i = 0; i < m; ++i) distances[i] = linkDistance;\n strengths = [];\n if (typeof linkStrength === \"function\") for (i = 0; i < m; ++i) strengths[i] = +linkStrength.call(this, links[i], i); else for (i = 0; i < m; ++i) strengths[i] = linkStrength;\n charges = [];\n if (typeof charge === \"function\") for (i = 0; i < n; ++i) charges[i] = +charge.call(this, nodes[i], i); else for (i = 0; i < n; ++i) charges[i] = charge;\n function position(dimension, size) {\n if (!neighbors) {\n neighbors = new Array(n);\n for (j = 0; j < n; ++j) {\n neighbors[j] = [];\n }\n for (j = 0; j < m; ++j) {\n var o = links[j];\n neighbors[o.source.index].push(o.target);\n neighbors[o.target.index].push(o.source);\n }\n }\n var candidates = neighbors[i], j = -1, l = candidates.length, x;\n while (++j < l) if (!isNaN(x = candidates[j][dimension])) return x;\n return Math.random() * size;\n }\n return force.resume();\n };\n force.resume = function() {\n return force.alpha(.1);\n };\n force.stop = function() {\n return force.alpha(0);\n };\n force.drag = function() {\n if (!drag) drag = d3.behavior.drag().origin(d3_identity).on(\"dragstart.force\", d3_layout_forceDragstart).on(\"drag.force\", dragmove).on(\"dragend.force\", d3_layout_forceDragend);\n if (!arguments.length) return drag;\n this.on(\"mouseover.force\", d3_layout_forceMouseover).on(\"mouseout.force\", d3_layout_forceMouseout).call(drag);\n };\n function dragmove(d) {\n d.px = d3.event.x, d.py = d3.event.y;\n force.resume();\n }\n return d3.rebind(force, event, \"on\");\n };\n function d3_layout_forceDragstart(d) {\n d.fixed |= 2;\n }\n function d3_layout_forceDragend(d) {\n d.fixed &= ~6;\n }\n function d3_layout_forceMouseover(d) {\n d.fixed |= 4;\n d.px = d.x, d.py = d.y;\n }\n function d3_layout_forceMouseout(d) {\n d.fixed &= ~4;\n }\n function d3_layout_forceAccumulate(quad, alpha, charges) {\n var cx = 0, cy = 0;\n quad.charge = 0;\n if (!quad.leaf) {\n var nodes = quad.nodes, n = nodes.length, i = -1, c;\n while (++i < n) {\n c = nodes[i];\n if (c == null) continue;\n d3_layout_forceAccumulate(c, alpha, charges);\n quad.charge += c.charge;\n cx += c.charge * c.cx;\n cy += c.charge * c.cy;\n }\n }\n if (quad.point) {\n if (!quad.leaf) {\n quad.point.x += Math.random() - .5;\n quad.point.y += Math.random() - .5;\n }\n var k = alpha * charges[quad.point.index];\n quad.charge += quad.pointCharge = k;\n cx += k * quad.point.x;\n cy += k * quad.point.y;\n }\n quad.cx = cx / quad.charge;\n quad.cy = cy / quad.charge;\n }\n var d3_layout_forceLinkDistance = 20, d3_layout_forceLinkStrength = 1, d3_layout_forceChargeDistance2 = Infinity;\n d3.layout.hierarchy = function() {\n var sort = d3_layout_hierarchySort, children = d3_layout_hierarchyChildren, value = d3_layout_hierarchyValue;\n function hierarchy(root) {\n var stack = [ root ], nodes = [], node;\n root.depth = 0;\n while ((node = stack.pop()) != null) {\n nodes.push(node);\n if ((childs = children.call(hierarchy, node, node.depth)) && (n = childs.length)) {\n var n, childs, child;\n while (--n >= 0) {\n stack.push(child = childs[n]);\n child.parent = node;\n child.depth = node.depth + 1;\n }\n if (value) node.value = 0;\n node.children = childs;\n } else {\n if (value) node.value = +value.call(hierarchy, node, node.depth) || 0;\n delete node.children;\n }\n }\n d3_layout_hierarchyVisitAfter(root, function(node) {\n var childs, parent;\n if (sort && (childs = node.children)) childs.sort(sort);\n if (value && (parent = node.parent)) parent.value += node.value;\n });\n return nodes;\n }\n hierarchy.sort = function(x) {\n if (!arguments.length) return sort;\n sort = x;\n return hierarchy;\n };\n hierarchy.children = function(x) {\n if (!arguments.length) return children;\n children = x;\n return hierarchy;\n };\n hierarchy.value = function(x) {\n if (!arguments.length) return value;\n value = x;\n return hierarchy;\n };\n hierarchy.revalue = function(root) {\n if (value) {\n d3_layout_hierarchyVisitBefore(root, function(node) {\n if (node.children) node.value = 0;\n });\n d3_layout_hierarchyVisitAfter(root, function(node) {\n var parent;\n if (!node.children) node.value = +value.call(hierarchy, node, node.depth) || 0;\n if (parent = node.parent) parent.value += node.value;\n });\n }\n return root;\n };\n return hierarchy;\n };\n function d3_layout_hierarchyRebind(object, hierarchy) {\n d3.rebind(object, hierarchy, \"sort\", \"children\", \"value\");\n object.nodes = object;\n object.links = d3_layout_hierarchyLinks;\n return object;\n }\n function d3_layout_hierarchyVisitBefore(node, callback) {\n var nodes = [ node ];\n while ((node = nodes.pop()) != null) {\n callback(node);\n if ((children = node.children) && (n = children.length)) {\n var n, children;\n while (--n >= 0) nodes.push(children[n]);\n }\n }\n }\n function d3_layout_hierarchyVisitAfter(node, callback) {\n var nodes = [ node ], nodes2 = [];\n while ((node = nodes.pop()) != null) {\n nodes2.push(node);\n if ((children = node.children) && (n = children.length)) {\n var i = -1, n, children;\n while (++i < n) nodes.push(children[i]);\n }\n }\n while ((node = nodes2.pop()) != null) {\n callback(node);\n }\n }\n function d3_layout_hierarchyChildren(d) {\n return d.children;\n }\n function d3_layout_hierarchyValue(d) {\n return d.value;\n }\n function d3_layout_hierarchySort(a, b) {\n return b.value - a.value;\n }\n function d3_layout_hierarchyLinks(nodes) {\n return d3.merge(nodes.map(function(parent) {\n return (parent.children || []).map(function(child) {\n return {\n source: parent,\n target: child\n };\n });\n }));\n }\n d3.layout.partition = function() {\n var hierarchy = d3.layout.hierarchy(), size = [ 1, 1 ];\n function position(node, x, dx, dy) {\n var children = node.children;\n node.x = x;\n node.y = node.depth * dy;\n node.dx = dx;\n node.dy = dy;\n if (children && (n = children.length)) {\n var i = -1, n, c, d;\n dx = node.value ? dx / node.value : 0;\n while (++i < n) {\n position(c = children[i], x, d = c.value * dx, dy);\n x += d;\n }\n }\n }\n function depth(node) {\n var children = node.children, d = 0;\n if (children && (n = children.length)) {\n var i = -1, n;\n while (++i < n) d = Math.max(d, depth(children[i]));\n }\n return 1 + d;\n }\n function partition(d, i) {\n var nodes = hierarchy.call(this, d, i);\n position(nodes[0], 0, size[0], size[1] / depth(nodes[0]));\n return nodes;\n }\n partition.size = function(x) {\n if (!arguments.length) return size;\n size = x;\n return partition;\n };\n return d3_layout_hierarchyRebind(partition, hierarchy);\n };\n d3.layout.pie = function() {\n var value = Number, sort = d3_layout_pieSortByValue, startAngle = 0, endAngle = τ, padAngle = 0;\n function pie(data) {\n var n = data.length, values = data.map(function(d, i) {\n return +value.call(pie, d, i);\n }), a = +(typeof startAngle === \"function\" ? startAngle.apply(this, arguments) : startAngle), da = (typeof endAngle === \"function\" ? endAngle.apply(this, arguments) : endAngle) - a, p = Math.min(Math.abs(da) / n, +(typeof padAngle === \"function\" ? padAngle.apply(this, arguments) : padAngle)), pa = p * (da < 0 ? -1 : 1), k = (da - n * pa) / d3.sum(values), index = d3.range(n), arcs = [], v;\n if (sort != null) index.sort(sort === d3_layout_pieSortByValue ? function(i, j) {\n return values[j] - values[i];\n } : function(i, j) {\n return sort(data[i], data[j]);\n });\n index.forEach(function(i) {\n arcs[i] = {\n data: data[i],\n value: v = values[i],\n startAngle: a,\n endAngle: a += v * k + pa,\n padAngle: p\n };\n });\n return arcs;\n }\n pie.value = function(_) {\n if (!arguments.length) return value;\n value = _;\n return pie;\n };\n pie.sort = function(_) {\n if (!arguments.length) return sort;\n sort = _;\n return pie;\n };\n pie.startAngle = function(_) {\n if (!arguments.length) return startAngle;\n startAngle = _;\n return pie;\n };\n pie.endAngle = function(_) {\n if (!arguments.length) return endAngle;\n endAngle = _;\n return pie;\n };\n pie.padAngle = function(_) {\n if (!arguments.length) return padAngle;\n padAngle = _;\n return pie;\n };\n return pie;\n };\n var d3_layout_pieSortByValue = {};\n d3.layout.stack = function() {\n var values = d3_identity, order = d3_layout_stackOrderDefault, offset = d3_layout_stackOffsetZero, out = d3_layout_stackOut, x = d3_layout_stackX, y = d3_layout_stackY;\n function stack(data, index) {\n if (!(n = data.length)) return data;\n var series = data.map(function(d, i) {\n return values.call(stack, d, i);\n });\n var points = series.map(function(d) {\n return d.map(function(v, i) {\n return [ x.call(stack, v, i), y.call(stack, v, i) ];\n });\n });\n var orders = order.call(stack, points, index);\n series = d3.permute(series, orders);\n points = d3.permute(points, orders);\n var offsets = offset.call(stack, points, index);\n var m = series[0].length, n, i, j, o;\n for (j = 0; j < m; ++j) {\n out.call(stack, series[0][j], o = offsets[j], points[0][j][1]);\n for (i = 1; i < n; ++i) {\n out.call(stack, series[i][j], o += points[i - 1][j][1], points[i][j][1]);\n }\n }\n return data;\n }\n stack.values = function(x) {\n if (!arguments.length) return values;\n values = x;\n return stack;\n };\n stack.order = function(x) {\n if (!arguments.length) return order;\n order = typeof x === \"function\" ? x : d3_layout_stackOrders.get(x) || d3_layout_stackOrderDefault;\n return stack;\n };\n stack.offset = function(x) {\n if (!arguments.length) return offset;\n offset = typeof x === \"function\" ? x : d3_layout_stackOffsets.get(x) || d3_layout_stackOffsetZero;\n return stack;\n };\n stack.x = function(z) {\n if (!arguments.length) return x;\n x = z;\n return stack;\n };\n stack.y = function(z) {\n if (!arguments.length) return y;\n y = z;\n return stack;\n };\n stack.out = function(z) {\n if (!arguments.length) return out;\n out = z;\n return stack;\n };\n return stack;\n };\n function d3_layout_stackX(d) {\n return d.x;\n }\n function d3_layout_stackY(d) {\n return d.y;\n }\n function d3_layout_stackOut(d, y0, y) {\n d.y0 = y0;\n d.y = y;\n }\n var d3_layout_stackOrders = d3.map({\n \"inside-out\": function(data) {\n var n = data.length, i, j, max = data.map(d3_layout_stackMaxIndex), sums = data.map(d3_layout_stackReduceSum), index = d3.range(n).sort(function(a, b) {\n return max[a] - max[b];\n }), top = 0, bottom = 0, tops = [], bottoms = [];\n for (i = 0; i < n; ++i) {\n j = index[i];\n if (top < bottom) {\n top += sums[j];\n tops.push(j);\n } else {\n bottom += sums[j];\n bottoms.push(j);\n }\n }\n return bottoms.reverse().concat(tops);\n },\n reverse: function(data) {\n return d3.range(data.length).reverse();\n },\n \"default\": d3_layout_stackOrderDefault\n });\n var d3_layout_stackOffsets = d3.map({\n silhouette: function(data) {\n var n = data.length, m = data[0].length, sums = [], max = 0, i, j, o, y0 = [];\n for (j = 0; j < m; ++j) {\n for (i = 0, o = 0; i < n; i++) o += data[i][j][1];\n if (o > max) max = o;\n sums.push(o);\n }\n for (j = 0; j < m; ++j) {\n y0[j] = (max - sums[j]) / 2;\n }\n return y0;\n },\n wiggle: function(data) {\n var n = data.length, x = data[0], m = x.length, i, j, k, s1, s2, s3, dx, o, o0, y0 = [];\n y0[0] = o = o0 = 0;\n for (j = 1; j < m; ++j) {\n for (i = 0, s1 = 0; i < n; ++i) s1 += data[i][j][1];\n for (i = 0, s2 = 0, dx = x[j][0] - x[j - 1][0]; i < n; ++i) {\n for (k = 0, s3 = (data[i][j][1] - data[i][j - 1][1]) / (2 * dx); k < i; ++k) {\n s3 += (data[k][j][1] - data[k][j - 1][1]) / dx;\n }\n s2 += s3 * data[i][j][1];\n }\n y0[j] = o -= s1 ? s2 / s1 * dx : 0;\n if (o < o0) o0 = o;\n }\n for (j = 0; j < m; ++j) y0[j] -= o0;\n return y0;\n },\n expand: function(data) {\n var n = data.length, m = data[0].length, k = 1 / n, i, j, o, y0 = [];\n for (j = 0; j < m; ++j) {\n for (i = 0, o = 0; i < n; i++) o += data[i][j][1];\n if (o) for (i = 0; i < n; i++) data[i][j][1] /= o; else for (i = 0; i < n; i++) data[i][j][1] = k;\n }\n for (j = 0; j < m; ++j) y0[j] = 0;\n return y0;\n },\n zero: d3_layout_stackOffsetZero\n });\n function d3_layout_stackOrderDefault(data) {\n return d3.range(data.length);\n }\n function d3_layout_stackOffsetZero(data) {\n var j = -1, m = data[0].length, y0 = [];\n while (++j < m) y0[j] = 0;\n return y0;\n }\n function d3_layout_stackMaxIndex(array) {\n var i = 1, j = 0, v = array[0][1], k, n = array.length;\n for (;i < n; ++i) {\n if ((k = array[i][1]) > v) {\n j = i;\n v = k;\n }\n }\n return j;\n }\n function d3_layout_stackReduceSum(d) {\n return d.reduce(d3_layout_stackSum, 0);\n }\n function d3_layout_stackSum(p, d) {\n return p + d[1];\n }\n d3.layout.histogram = function() {\n var frequency = true, valuer = Number, ranger = d3_layout_histogramRange, binner = d3_layout_histogramBinSturges;\n function histogram(data, i) {\n var bins = [], values = data.map(valuer, this), range = ranger.call(this, values, i), thresholds = binner.call(this, range, values, i), bin, i = -1, n = values.length, m = thresholds.length - 1, k = frequency ? 1 : 1 / n, x;\n while (++i < m) {\n bin = bins[i] = [];\n bin.dx = thresholds[i + 1] - (bin.x = thresholds[i]);\n bin.y = 0;\n }\n if (m > 0) {\n i = -1;\n while (++i < n) {\n x = values[i];\n if (x >= range[0] && x <= range[1]) {\n bin = bins[d3.bisect(thresholds, x, 1, m) - 1];\n bin.y += k;\n bin.push(data[i]);\n }\n }\n }\n return bins;\n }\n histogram.value = function(x) {\n if (!arguments.length) return valuer;\n valuer = x;\n return histogram;\n };\n histogram.range = function(x) {\n if (!arguments.length) return ranger;\n ranger = d3_functor(x);\n return histogram;\n };\n histogram.bins = function(x) {\n if (!arguments.length) return binner;\n binner = typeof x === \"number\" ? function(range) {\n return d3_layout_histogramBinFixed(range, x);\n } : d3_functor(x);\n return histogram;\n };\n histogram.frequency = function(x) {\n if (!arguments.length) return frequency;\n frequency = !!x;\n return histogram;\n };\n return histogram;\n };\n function d3_layout_histogramBinSturges(range, values) {\n return d3_layout_histogramBinFixed(range, Math.ceil(Math.log(values.length) / Math.LN2 + 1));\n }\n function d3_layout_histogramBinFixed(range, n) {\n var x = -1, b = +range[0], m = (range[1] - b) / n, f = [];\n while (++x <= n) f[x] = m * x + b;\n return f;\n }\n function d3_layout_histogramRange(values) {\n return [ d3.min(values), d3.max(values) ];\n }\n d3.layout.pack = function() {\n var hierarchy = d3.layout.hierarchy().sort(d3_layout_packSort), padding = 0, size = [ 1, 1 ], radius;\n function pack(d, i) {\n var nodes = hierarchy.call(this, d, i), root = nodes[0], w = size[0], h = size[1], r = radius == null ? Math.sqrt : typeof radius === \"function\" ? radius : function() {\n return radius;\n };\n root.x = root.y = 0;\n d3_layout_hierarchyVisitAfter(root, function(d) {\n d.r = +r(d.value);\n });\n d3_layout_hierarchyVisitAfter(root, d3_layout_packSiblings);\n if (padding) {\n var dr = padding * (radius ? 1 : Math.max(2 * root.r / w, 2 * root.r / h)) / 2;\n d3_layout_hierarchyVisitAfter(root, function(d) {\n d.r += dr;\n });\n d3_layout_hierarchyVisitAfter(root, d3_layout_packSiblings);\n d3_layout_hierarchyVisitAfter(root, function(d) {\n d.r -= dr;\n });\n }\n d3_layout_packTransform(root, w / 2, h / 2, radius ? 1 : 1 / Math.max(2 * root.r / w, 2 * root.r / h));\n return nodes;\n }\n pack.size = function(_) {\n if (!arguments.length) return size;\n size = _;\n return pack;\n };\n pack.radius = function(_) {\n if (!arguments.length) return radius;\n radius = _ == null || typeof _ === \"function\" ? _ : +_;\n return pack;\n };\n pack.padding = function(_) {\n if (!arguments.length) return padding;\n padding = +_;\n return pack;\n };\n return d3_layout_hierarchyRebind(pack, hierarchy);\n };\n function d3_layout_packSort(a, b) {\n return a.value - b.value;\n }\n function d3_layout_packInsert(a, b) {\n var c = a._pack_next;\n a._pack_next = b;\n b._pack_prev = a;\n b._pack_next = c;\n c._pack_prev = b;\n }\n function d3_layout_packSplice(a, b) {\n a._pack_next = b;\n b._pack_prev = a;\n }\n function d3_layout_packIntersects(a, b) {\n var dx = b.x - a.x, dy = b.y - a.y, dr = a.r + b.r;\n return .999 * dr * dr > dx * dx + dy * dy;\n }\n function d3_layout_packSiblings(node) {\n if (!(nodes = node.children) || !(n = nodes.length)) return;\n var nodes, xMin = Infinity, xMax = -Infinity, yMin = Infinity, yMax = -Infinity, a, b, c, i, j, k, n;\n function bound(node) {\n xMin = Math.min(node.x - node.r, xMin);\n xMax = Math.max(node.x + node.r, xMax);\n yMin = Math.min(node.y - node.r, yMin);\n yMax = Math.max(node.y + node.r, yMax);\n }\n nodes.forEach(d3_layout_packLink);\n a = nodes[0];\n a.x = -a.r;\n a.y = 0;\n bound(a);\n if (n > 1) {\n b = nodes[1];\n b.x = b.r;\n b.y = 0;\n bound(b);\n if (n > 2) {\n c = nodes[2];\n d3_layout_packPlace(a, b, c);\n bound(c);\n d3_layout_packInsert(a, c);\n a._pack_prev = c;\n d3_layout_packInsert(c, b);\n b = a._pack_next;\n for (i = 3; i < n; i++) {\n d3_layout_packPlace(a, b, c = nodes[i]);\n var isect = 0, s1 = 1, s2 = 1;\n for (j = b._pack_next; j !== b; j = j._pack_next, s1++) {\n if (d3_layout_packIntersects(j, c)) {\n isect = 1;\n break;\n }\n }\n if (isect == 1) {\n for (k = a._pack_prev; k !== j._pack_prev; k = k._pack_prev, s2++) {\n if (d3_layout_packIntersects(k, c)) {\n break;\n }\n }\n }\n if (isect) {\n if (s1 < s2 || s1 == s2 && b.r < a.r) d3_layout_packSplice(a, b = j); else d3_layout_packSplice(a = k, b);\n i--;\n } else {\n d3_layout_packInsert(a, c);\n b = c;\n bound(c);\n }\n }\n }\n }\n var cx = (xMin + xMax) / 2, cy = (yMin + yMax) / 2, cr = 0;\n for (i = 0; i < n; i++) {\n c = nodes[i];\n c.x -= cx;\n c.y -= cy;\n cr = Math.max(cr, c.r + Math.sqrt(c.x * c.x + c.y * c.y));\n }\n node.r = cr;\n nodes.forEach(d3_layout_packUnlink);\n }\n function d3_layout_packLink(node) {\n node._pack_next = node._pack_prev = node;\n }\n function d3_layout_packUnlink(node) {\n delete node._pack_next;\n delete node._pack_prev;\n }\n function d3_layout_packTransform(node, x, y, k) {\n var children = node.children;\n node.x = x += k * node.x;\n node.y = y += k * node.y;\n node.r *= k;\n if (children) {\n var i = -1, n = children.length;\n while (++i < n) d3_layout_packTransform(children[i], x, y, k);\n }\n }\n function d3_layout_packPlace(a, b, c) {\n var db = a.r + c.r, dx = b.x - a.x, dy = b.y - a.y;\n if (db && (dx || dy)) {\n var da = b.r + c.r, dc = dx * dx + dy * dy;\n da *= da;\n db *= db;\n var x = .5 + (db - da) / (2 * dc), y = Math.sqrt(Math.max(0, 2 * da * (db + dc) - (db -= dc) * db - da * da)) / (2 * dc);\n c.x = a.x + x * dx + y * dy;\n c.y = a.y + x * dy - y * dx;\n } else {\n c.x = a.x + db;\n c.y = a.y;\n }\n }\n d3.layout.tree = function() {\n var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ], nodeSize = null;\n function tree(d, i) {\n var nodes = hierarchy.call(this, d, i), root0 = nodes[0], root1 = wrapTree(root0);\n d3_layout_hierarchyVisitAfter(root1, firstWalk), root1.parent.m = -root1.z;\n d3_layout_hierarchyVisitBefore(root1, secondWalk);\n if (nodeSize) d3_layout_hierarchyVisitBefore(root0, sizeNode); else {\n var left = root0, right = root0, bottom = root0;\n d3_layout_hierarchyVisitBefore(root0, function(node) {\n if (node.x < left.x) left = node;\n if (node.x > right.x) right = node;\n if (node.depth > bottom.depth) bottom = node;\n });\n var tx = separation(left, right) / 2 - left.x, kx = size[0] / (right.x + separation(right, left) / 2 + tx), ky = size[1] / (bottom.depth || 1);\n d3_layout_hierarchyVisitBefore(root0, function(node) {\n node.x = (node.x + tx) * kx;\n node.y = node.depth * ky;\n });\n }\n return nodes;\n }\n function wrapTree(root0) {\n var root1 = {\n A: null,\n children: [ root0 ]\n }, queue = [ root1 ], node1;\n while ((node1 = queue.pop()) != null) {\n for (var children = node1.children, child, i = 0, n = children.length; i < n; ++i) {\n queue.push((children[i] = child = {\n _: children[i],\n parent: node1,\n children: (child = children[i].children) && child.slice() || [],\n A: null,\n a: null,\n z: 0,\n m: 0,\n c: 0,\n s: 0,\n t: null,\n i: i\n }).a = child);\n }\n }\n return root1.children[0];\n }\n function firstWalk(v) {\n var children = v.children, siblings = v.parent.children, w = v.i ? siblings[v.i - 1] : null;\n if (children.length) {\n d3_layout_treeShift(v);\n var midpoint = (children[0].z + children[children.length - 1].z) / 2;\n if (w) {\n v.z = w.z + separation(v._, w._);\n v.m = v.z - midpoint;\n } else {\n v.z = midpoint;\n }\n } else if (w) {\n v.z = w.z + separation(v._, w._);\n }\n v.parent.A = apportion(v, w, v.parent.A || siblings[0]);\n }\n function secondWalk(v) {\n v._.x = v.z + v.parent.m;\n v.m += v.parent.m;\n }\n function apportion(v, w, ancestor) {\n if (w) {\n var vip = v, vop = v, vim = w, vom = vip.parent.children[0], sip = vip.m, sop = vop.m, sim = vim.m, som = vom.m, shift;\n while (vim = d3_layout_treeRight(vim), vip = d3_layout_treeLeft(vip), vim && vip) {\n vom = d3_layout_treeLeft(vom);\n vop = d3_layout_treeRight(vop);\n vop.a = v;\n shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);\n if (shift > 0) {\n d3_layout_treeMove(d3_layout_treeAncestor(vim, v, ancestor), v, shift);\n sip += shift;\n sop += shift;\n }\n sim += vim.m;\n sip += vip.m;\n som += vom.m;\n sop += vop.m;\n }\n if (vim && !d3_layout_treeRight(vop)) {\n vop.t = vim;\n vop.m += sim - sop;\n }\n if (vip && !d3_layout_treeLeft(vom)) {\n vom.t = vip;\n vom.m += sip - som;\n ancestor = v;\n }\n }\n return ancestor;\n }\n function sizeNode(node) {\n node.x *= size[0];\n node.y = node.depth * size[1];\n }\n tree.separation = function(x) {\n if (!arguments.length) return separation;\n separation = x;\n return tree;\n };\n tree.size = function(x) {\n if (!arguments.length) return nodeSize ? null : size;\n nodeSize = (size = x) == null ? sizeNode : null;\n return tree;\n };\n tree.nodeSize = function(x) {\n if (!arguments.length) return nodeSize ? size : null;\n nodeSize = (size = x) == null ? null : sizeNode;\n return tree;\n };\n return d3_layout_hierarchyRebind(tree, hierarchy);\n };\n function d3_layout_treeSeparation(a, b) {\n return a.parent == b.parent ? 1 : 2;\n }\n function d3_layout_treeLeft(v) {\n var children = v.children;\n return children.length ? children[0] : v.t;\n }\n function d3_layout_treeRight(v) {\n var children = v.children, n;\n return (n = children.length) ? children[n - 1] : v.t;\n }\n function d3_layout_treeMove(wm, wp, shift) {\n var change = shift / (wp.i - wm.i);\n wp.c -= change;\n wp.s += shift;\n wm.c += change;\n wp.z += shift;\n wp.m += shift;\n }\n function d3_layout_treeShift(v) {\n var shift = 0, change = 0, children = v.children, i = children.length, w;\n while (--i >= 0) {\n w = children[i];\n w.z += shift;\n w.m += shift;\n shift += w.s + (change += w.c);\n }\n }\n function d3_layout_treeAncestor(vim, v, ancestor) {\n return vim.a.parent === v.parent ? vim.a : ancestor;\n }\n d3.layout.cluster = function() {\n var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ], nodeSize = false;\n function cluster(d, i) {\n var nodes = hierarchy.call(this, d, i), root = nodes[0], previousNode, x = 0;\n d3_layout_hierarchyVisitAfter(root, function(node) {\n var children = node.children;\n if (children && children.length) {\n node.x = d3_layout_clusterX(children);\n node.y = d3_layout_clusterY(children);\n } else {\n node.x = previousNode ? x += separation(node, previousNode) : 0;\n node.y = 0;\n previousNode = node;\n }\n });\n var left = d3_layout_clusterLeft(root), right = d3_layout_clusterRight(root), x0 = left.x - separation(left, right) / 2, x1 = right.x + separation(right, left) / 2;\n d3_layout_hierarchyVisitAfter(root, nodeSize ? function(node) {\n node.x = (node.x - root.x) * size[0];\n node.y = (root.y - node.y) * size[1];\n } : function(node) {\n node.x = (node.x - x0) / (x1 - x0) * size[0];\n node.y = (1 - (root.y ? node.y / root.y : 1)) * size[1];\n });\n return nodes;\n }\n cluster.separation = function(x) {\n if (!arguments.length) return separation;\n separation = x;\n return cluster;\n };\n cluster.size = function(x) {\n if (!arguments.length) return nodeSize ? null : size;\n nodeSize = (size = x) == null;\n return cluster;\n };\n cluster.nodeSize = function(x) {\n if (!arguments.length) return nodeSize ? size : null;\n nodeSize = (size = x) != null;\n return cluster;\n };\n return d3_layout_hierarchyRebind(cluster, hierarchy);\n };\n function d3_layout_clusterY(children) {\n return 1 + d3.max(children, function(child) {\n return child.y;\n });\n }\n function d3_layout_clusterX(children) {\n return children.reduce(function(x, child) {\n return x + child.x;\n }, 0) / children.length;\n }\n function d3_layout_clusterLeft(node) {\n var children = node.children;\n return children && children.length ? d3_layout_clusterLeft(children[0]) : node;\n }\n function d3_layout_clusterRight(node) {\n var children = node.children, n;\n return children && (n = children.length) ? d3_layout_clusterRight(children[n - 1]) : node;\n }\n d3.layout.treemap = function() {\n var hierarchy = d3.layout.hierarchy(), round = Math.round, size = [ 1, 1 ], padding = null, pad = d3_layout_treemapPadNull, sticky = false, stickies, mode = \"squarify\", ratio = .5 * (1 + Math.sqrt(5));\n function scale(children, k) {\n var i = -1, n = children.length, child, area;\n while (++i < n) {\n area = (child = children[i]).value * (k < 0 ? 0 : k);\n child.area = isNaN(area) || area <= 0 ? 0 : area;\n }\n }\n function squarify(node) {\n var children = node.children;\n if (children && children.length) {\n var rect = pad(node), row = [], remaining = children.slice(), child, best = Infinity, score, u = mode === \"slice\" ? rect.dx : mode === \"dice\" ? rect.dy : mode === \"slice-dice\" ? node.depth & 1 ? rect.dy : rect.dx : Math.min(rect.dx, rect.dy), n;\n scale(remaining, rect.dx * rect.dy / node.value);\n row.area = 0;\n while ((n = remaining.length) > 0) {\n row.push(child = remaining[n - 1]);\n row.area += child.area;\n if (mode !== \"squarify\" || (score = worst(row, u)) <= best) {\n remaining.pop();\n best = score;\n } else {\n row.area -= row.pop().area;\n position(row, u, rect, false);\n u = Math.min(rect.dx, rect.dy);\n row.length = row.area = 0;\n best = Infinity;\n }\n }\n if (row.length) {\n position(row, u, rect, true);\n row.length = row.area = 0;\n }\n children.forEach(squarify);\n }\n }\n function stickify(node) {\n var children = node.children;\n if (children && children.length) {\n var rect = pad(node), remaining = children.slice(), child, row = [];\n scale(remaining, rect.dx * rect.dy / node.value);\n row.area = 0;\n while (child = remaining.pop()) {\n row.push(child);\n row.area += child.area;\n if (child.z != null) {\n position(row, child.z ? rect.dx : rect.dy, rect, !remaining.length);\n row.length = row.area = 0;\n }\n }\n children.forEach(stickify);\n }\n }\n function worst(row, u) {\n var s = row.area, r, rmax = 0, rmin = Infinity, i = -1, n = row.length;\n while (++i < n) {\n if (!(r = row[i].area)) continue;\n if (r < rmin) rmin = r;\n if (r > rmax) rmax = r;\n }\n s *= s;\n u *= u;\n return s ? Math.max(u * rmax * ratio / s, s / (u * rmin * ratio)) : Infinity;\n }\n function position(row, u, rect, flush) {\n var i = -1, n = row.length, x = rect.x, y = rect.y, v = u ? round(row.area / u) : 0, o;\n if (u == rect.dx) {\n if (flush || v > rect.dy) v = rect.dy;\n while (++i < n) {\n o = row[i];\n o.x = x;\n o.y = y;\n o.dy = v;\n x += o.dx = Math.min(rect.x + rect.dx - x, v ? round(o.area / v) : 0);\n }\n o.z = true;\n o.dx += rect.x + rect.dx - x;\n rect.y += v;\n rect.dy -= v;\n } else {\n if (flush || v > rect.dx) v = rect.dx;\n while (++i < n) {\n o = row[i];\n o.x = x;\n o.y = y;\n o.dx = v;\n y += o.dy = Math.min(rect.y + rect.dy - y, v ? round(o.area / v) : 0);\n }\n o.z = false;\n o.dy += rect.y + rect.dy - y;\n rect.x += v;\n rect.dx -= v;\n }\n }\n function treemap(d) {\n var nodes = stickies || hierarchy(d), root = nodes[0];\n root.x = 0;\n root.y = 0;\n root.dx = size[0];\n root.dy = size[1];\n if (stickies) hierarchy.revalue(root);\n scale([ root ], root.dx * root.dy / root.value);\n (stickies ? stickify : squarify)(root);\n if (sticky) stickies = nodes;\n return nodes;\n }\n treemap.size = function(x) {\n if (!arguments.length) return size;\n size = x;\n return treemap;\n };\n treemap.padding = function(x) {\n if (!arguments.length) return padding;\n function padFunction(node) {\n var p = x.call(treemap, node, node.depth);\n return p == null ? d3_layout_treemapPadNull(node) : d3_layout_treemapPad(node, typeof p === \"number\" ? [ p, p, p, p ] : p);\n }\n function padConstant(node) {\n return d3_layout_treemapPad(node, x);\n }\n var type;\n pad = (padding = x) == null ? d3_layout_treemapPadNull : (type = typeof x) === \"function\" ? padFunction : type === \"number\" ? (x = [ x, x, x, x ], \n padConstant) : padConstant;\n return treemap;\n };\n treemap.round = function(x) {\n if (!arguments.length) return round != Number;\n round = x ? Math.round : Number;\n return treemap;\n };\n treemap.sticky = function(x) {\n if (!arguments.length) return sticky;\n sticky = x;\n stickies = null;\n return treemap;\n };\n treemap.ratio = function(x) {\n if (!arguments.length) return ratio;\n ratio = x;\n return treemap;\n };\n treemap.mode = function(x) {\n if (!arguments.length) return mode;\n mode = x + \"\";\n return treemap;\n };\n return d3_layout_hierarchyRebind(treemap, hierarchy);\n };\n function d3_layout_treemapPadNull(node) {\n return {\n x: node.x,\n y: node.y,\n dx: node.dx,\n dy: node.dy\n };\n }\n function d3_layout_treemapPad(node, padding) {\n var x = node.x + padding[3], y = node.y + padding[0], dx = node.dx - padding[1] - padding[3], dy = node.dy - padding[0] - padding[2];\n if (dx < 0) {\n x += dx / 2;\n dx = 0;\n }\n if (dy < 0) {\n y += dy / 2;\n dy = 0;\n }\n return {\n x: x,\n y: y,\n dx: dx,\n dy: dy\n };\n }\n d3.random = {\n normal: function(µ, σ) {\n var n = arguments.length;\n if (n < 2) σ = 1;\n if (n < 1) µ = 0;\n return function() {\n var x, y, r;\n do {\n x = Math.random() * 2 - 1;\n y = Math.random() * 2 - 1;\n r = x * x + y * y;\n } while (!r || r > 1);\n return µ + σ * x * Math.sqrt(-2 * Math.log(r) / r);\n };\n },\n logNormal: function() {\n var random = d3.random.normal.apply(d3, arguments);\n return function() {\n return Math.exp(random());\n };\n },\n bates: function(m) {\n var random = d3.random.irwinHall(m);\n return function() {\n return random() / m;\n };\n },\n irwinHall: function(m) {\n return function() {\n for (var s = 0, j = 0; j < m; j++) s += Math.random();\n return s;\n };\n }\n };\n d3.scale = {};\n function d3_scaleExtent(domain) {\n var start = domain[0], stop = domain[domain.length - 1];\n return start < stop ? [ start, stop ] : [ stop, start ];\n }\n function d3_scaleRange(scale) {\n return scale.rangeExtent ? scale.rangeExtent() : d3_scaleExtent(scale.range());\n }\n function d3_scale_bilinear(domain, range, uninterpolate, interpolate) {\n var u = uninterpolate(domain[0], domain[1]), i = interpolate(range[0], range[1]);\n return function(x) {\n return i(u(x));\n };\n }\n function d3_scale_nice(domain, nice) {\n var i0 = 0, i1 = domain.length - 1, x0 = domain[i0], x1 = domain[i1], dx;\n if (x1 < x0) {\n dx = i0, i0 = i1, i1 = dx;\n dx = x0, x0 = x1, x1 = dx;\n }\n domain[i0] = nice.floor(x0);\n domain[i1] = nice.ceil(x1);\n return domain;\n }\n function d3_scale_niceStep(step) {\n return step ? {\n floor: function(x) {\n return Math.floor(x / step) * step;\n },\n ceil: function(x) {\n return Math.ceil(x / step) * step;\n }\n } : d3_scale_niceIdentity;\n }\n var d3_scale_niceIdentity = {\n floor: d3_identity,\n ceil: d3_identity\n };\n function d3_scale_polylinear(domain, range, uninterpolate, interpolate) {\n var u = [], i = [], j = 0, k = Math.min(domain.length, range.length) - 1;\n if (domain[k] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n while (++j <= k) {\n u.push(uninterpolate(domain[j - 1], domain[j]));\n i.push(interpolate(range[j - 1], range[j]));\n }\n return function(x) {\n var j = d3.bisect(domain, x, 1, k) - 1;\n return i[j](u[j](x));\n };\n }\n d3.scale.linear = function() {\n return d3_scale_linear([ 0, 1 ], [ 0, 1 ], d3_interpolate, false);\n };\n function d3_scale_linear(domain, range, interpolate, clamp) {\n var output, input;\n function rescale() {\n var linear = Math.min(domain.length, range.length) > 2 ? d3_scale_polylinear : d3_scale_bilinear, uninterpolate = clamp ? d3_uninterpolateClamp : d3_uninterpolateNumber;\n output = linear(domain, range, uninterpolate, interpolate);\n input = linear(range, domain, uninterpolate, d3_interpolate);\n return scale;\n }\n function scale(x) {\n return output(x);\n }\n scale.invert = function(y) {\n return input(y);\n };\n scale.domain = function(x) {\n if (!arguments.length) return domain;\n domain = x.map(Number);\n return rescale();\n };\n scale.range = function(x) {\n if (!arguments.length) return range;\n range = x;\n return rescale();\n };\n scale.rangeRound = function(x) {\n return scale.range(x).interpolate(d3_interpolateRound);\n };\n scale.clamp = function(x) {\n if (!arguments.length) return clamp;\n clamp = x;\n return rescale();\n };\n scale.interpolate = function(x) {\n if (!arguments.length) return interpolate;\n interpolate = x;\n return rescale();\n };\n scale.ticks = function(m) {\n return d3_scale_linearTicks(domain, m);\n };\n scale.tickFormat = function(m, format) {\n return d3_scale_linearTickFormat(domain, m, format);\n };\n scale.nice = function(m) {\n d3_scale_linearNice(domain, m);\n return rescale();\n };\n scale.copy = function() {\n return d3_scale_linear(domain, range, interpolate, clamp);\n };\n return rescale();\n }\n function d3_scale_linearRebind(scale, linear) {\n return d3.rebind(scale, linear, \"range\", \"rangeRound\", \"interpolate\", \"clamp\");\n }\n function d3_scale_linearNice(domain, m) {\n return d3_scale_nice(domain, d3_scale_niceStep(d3_scale_linearTickRange(domain, m)[2]));\n }\n function d3_scale_linearTickRange(domain, m) {\n if (m == null) m = 10;\n var extent = d3_scaleExtent(domain), span = extent[1] - extent[0], step = Math.pow(10, Math.floor(Math.log(span / m) / Math.LN10)), err = m / span * step;\n if (err <= .15) step *= 10; else if (err <= .35) step *= 5; else if (err <= .75) step *= 2;\n extent[0] = Math.ceil(extent[0] / step) * step;\n extent[1] = Math.floor(extent[1] / step) * step + step * .5;\n extent[2] = step;\n return extent;\n }\n function d3_scale_linearTicks(domain, m) {\n return d3.range.apply(d3, d3_scale_linearTickRange(domain, m));\n }\n function d3_scale_linearTickFormat(domain, m, format) {\n var range = d3_scale_linearTickRange(domain, m);\n if (format) {\n var match = d3_format_re.exec(format);\n match.shift();\n if (match[8] === \"s\") {\n var prefix = d3.formatPrefix(Math.max(abs(range[0]), abs(range[1])));\n if (!match[7]) match[7] = \".\" + d3_scale_linearPrecision(prefix.scale(range[2]));\n match[8] = \"f\";\n format = d3.format(match.join(\"\"));\n return function(d) {\n return format(prefix.scale(d)) + prefix.symbol;\n };\n }\n if (!match[7]) match[7] = \".\" + d3_scale_linearFormatPrecision(match[8], range);\n format = match.join(\"\");\n } else {\n format = \",.\" + d3_scale_linearPrecision(range[2]) + \"f\";\n }\n return d3.format(format);\n }\n var d3_scale_linearFormatSignificant = {\n s: 1,\n g: 1,\n p: 1,\n r: 1,\n e: 1\n };\n function d3_scale_linearPrecision(value) {\n return -Math.floor(Math.log(value) / Math.LN10 + .01);\n }\n function d3_scale_linearFormatPrecision(type, range) {\n var p = d3_scale_linearPrecision(range[2]);\n return type in d3_scale_linearFormatSignificant ? Math.abs(p - d3_scale_linearPrecision(Math.max(abs(range[0]), abs(range[1])))) + +(type !== \"e\") : p - (type === \"%\") * 2;\n }\n d3.scale.log = function() {\n return d3_scale_log(d3.scale.linear().domain([ 0, 1 ]), 10, true, [ 1, 10 ]);\n };\n function d3_scale_log(linear, base, positive, domain) {\n function log(x) {\n return (positive ? Math.log(x < 0 ? 0 : x) : -Math.log(x > 0 ? 0 : -x)) / Math.log(base);\n }\n function pow(x) {\n return positive ? Math.pow(base, x) : -Math.pow(base, -x);\n }\n function scale(x) {\n return linear(log(x));\n }\n scale.invert = function(x) {\n return pow(linear.invert(x));\n };\n scale.domain = function(x) {\n if (!arguments.length) return domain;\n positive = x[0] >= 0;\n linear.domain((domain = x.map(Number)).map(log));\n return scale;\n };\n scale.base = function(_) {\n if (!arguments.length) return base;\n base = +_;\n linear.domain(domain.map(log));\n return scale;\n };\n scale.nice = function() {\n var niced = d3_scale_nice(domain.map(log), positive ? Math : d3_scale_logNiceNegative);\n linear.domain(niced);\n domain = niced.map(pow);\n return scale;\n };\n scale.ticks = function() {\n var extent = d3_scaleExtent(domain), ticks = [], u = extent[0], v = extent[1], i = Math.floor(log(u)), j = Math.ceil(log(v)), n = base % 1 ? 2 : base;\n if (isFinite(j - i)) {\n if (positive) {\n for (;i < j; i++) for (var k = 1; k < n; k++) ticks.push(pow(i) * k);\n ticks.push(pow(i));\n } else {\n ticks.push(pow(i));\n for (;i++ < j; ) for (var k = n - 1; k > 0; k--) ticks.push(pow(i) * k);\n }\n for (i = 0; ticks[i] < u; i++) {}\n for (j = ticks.length; ticks[j - 1] > v; j--) {}\n ticks = ticks.slice(i, j);\n }\n return ticks;\n };\n scale.tickFormat = function(n, format) {\n if (!arguments.length) return d3_scale_logFormat;\n if (arguments.length < 2) format = d3_scale_logFormat; else if (typeof format !== \"function\") format = d3.format(format);\n var k = Math.max(.1, n / scale.ticks().length), f = positive ? (e = 1e-12, Math.ceil) : (e = -1e-12, \n Math.floor), e;\n return function(d) {\n return d / pow(f(log(d) + e)) <= k ? format(d) : \"\";\n };\n };\n scale.copy = function() {\n return d3_scale_log(linear.copy(), base, positive, domain);\n };\n return d3_scale_linearRebind(scale, linear);\n }\n var d3_scale_logFormat = d3.format(\".0e\"), d3_scale_logNiceNegative = {\n floor: function(x) {\n return -Math.ceil(-x);\n },\n ceil: function(x) {\n return -Math.floor(-x);\n }\n };\n d3.scale.pow = function() {\n return d3_scale_pow(d3.scale.linear(), 1, [ 0, 1 ]);\n };\n function d3_scale_pow(linear, exponent, domain) {\n var powp = d3_scale_powPow(exponent), powb = d3_scale_powPow(1 / exponent);\n function scale(x) {\n return linear(powp(x));\n }\n scale.invert = function(x) {\n return powb(linear.invert(x));\n };\n scale.domain = function(x) {\n if (!arguments.length) return domain;\n linear.domain((domain = x.map(Number)).map(powp));\n return scale;\n };\n scale.ticks = function(m) {\n return d3_scale_linearTicks(domain, m);\n };\n scale.tickFormat = function(m, format) {\n return d3_scale_linearTickFormat(domain, m, format);\n };\n scale.nice = function(m) {\n return scale.domain(d3_scale_linearNice(domain, m));\n };\n scale.exponent = function(x) {\n if (!arguments.length) return exponent;\n powp = d3_scale_powPow(exponent = x);\n powb = d3_scale_powPow(1 / exponent);\n linear.domain(domain.map(powp));\n return scale;\n };\n scale.copy = function() {\n return d3_scale_pow(linear.copy(), exponent, domain);\n };\n return d3_scale_linearRebind(scale, linear);\n }\n function d3_scale_powPow(e) {\n return function(x) {\n return x < 0 ? -Math.pow(-x, e) : Math.pow(x, e);\n };\n }\n d3.scale.sqrt = function() {\n return d3.scale.pow().exponent(.5);\n };\n d3.scale.ordinal = function() {\n return d3_scale_ordinal([], {\n t: \"range\",\n a: [ [] ]\n });\n };\n function d3_scale_ordinal(domain, ranger) {\n var index, range, rangeBand;\n function scale(x) {\n return range[((index.get(x) || (ranger.t === \"range\" ? index.set(x, domain.push(x)) : NaN)) - 1) % range.length];\n }\n function steps(start, step) {\n return d3.range(domain.length).map(function(i) {\n return start + step * i;\n });\n }\n scale.domain = function(x) {\n if (!arguments.length) return domain;\n domain = [];\n index = new d3_Map();\n var i = -1, n = x.length, xi;\n while (++i < n) if (!index.has(xi = x[i])) index.set(xi, domain.push(xi));\n return scale[ranger.t].apply(scale, ranger.a);\n };\n scale.range = function(x) {\n if (!arguments.length) return range;\n range = x;\n rangeBand = 0;\n ranger = {\n t: \"range\",\n a: arguments\n };\n return scale;\n };\n scale.rangePoints = function(x, padding) {\n if (arguments.length < 2) padding = 0;\n var start = x[0], stop = x[1], step = domain.length < 2 ? (start = (start + stop) / 2, \n 0) : (stop - start) / (domain.length - 1 + padding);\n range = steps(start + step * padding / 2, step);\n rangeBand = 0;\n ranger = {\n t: \"rangePoints\",\n a: arguments\n };\n return scale;\n };\n scale.rangeRoundPoints = function(x, padding) {\n if (arguments.length < 2) padding = 0;\n var start = x[0], stop = x[1], step = domain.length < 2 ? (start = stop = Math.round((start + stop) / 2), \n 0) : (stop - start) / (domain.length - 1 + padding) | 0;\n range = steps(start + Math.round(step * padding / 2 + (stop - start - (domain.length - 1 + padding) * step) / 2), step);\n rangeBand = 0;\n ranger = {\n t: \"rangeRoundPoints\",\n a: arguments\n };\n return scale;\n };\n scale.rangeBands = function(x, padding, outerPadding) {\n if (arguments.length < 2) padding = 0;\n if (arguments.length < 3) outerPadding = padding;\n var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = (stop - start) / (domain.length - padding + 2 * outerPadding);\n range = steps(start + step * outerPadding, step);\n if (reverse) range.reverse();\n rangeBand = step * (1 - padding);\n ranger = {\n t: \"rangeBands\",\n a: arguments\n };\n return scale;\n };\n scale.rangeRoundBands = function(x, padding, outerPadding) {\n if (arguments.length < 2) padding = 0;\n if (arguments.length < 3) outerPadding = padding;\n var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = Math.floor((stop - start) / (domain.length - padding + 2 * outerPadding));\n range = steps(start + Math.round((stop - start - (domain.length - padding) * step) / 2), step);\n if (reverse) range.reverse();\n rangeBand = Math.round(step * (1 - padding));\n ranger = {\n t: \"rangeRoundBands\",\n a: arguments\n };\n return scale;\n };\n scale.rangeBand = function() {\n return rangeBand;\n };\n scale.rangeExtent = function() {\n return d3_scaleExtent(ranger.a[0]);\n };\n scale.copy = function() {\n return d3_scale_ordinal(domain, ranger);\n };\n return scale.domain(domain);\n }\n d3.scale.category10 = function() {\n return d3.scale.ordinal().range(d3_category10);\n };\n d3.scale.category20 = function() {\n return d3.scale.ordinal().range(d3_category20);\n };\n d3.scale.category20b = function() {\n return d3.scale.ordinal().range(d3_category20b);\n };\n d3.scale.category20c = function() {\n return d3.scale.ordinal().range(d3_category20c);\n };\n var d3_category10 = [ 2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175 ].map(d3_rgbString);\n var d3_category20 = [ 2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725 ].map(d3_rgbString);\n var d3_category20b = [ 3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654 ].map(d3_rgbString);\n var d3_category20c = [ 3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081 ].map(d3_rgbString);\n d3.scale.quantile = function() {\n return d3_scale_quantile([], []);\n };\n function d3_scale_quantile(domain, range) {\n var thresholds;\n function rescale() {\n var k = 0, q = range.length;\n thresholds = [];\n while (++k < q) thresholds[k - 1] = d3.quantile(domain, k / q);\n return scale;\n }\n function scale(x) {\n if (!isNaN(x = +x)) return range[d3.bisect(thresholds, x)];\n }\n scale.domain = function(x) {\n if (!arguments.length) return domain;\n domain = x.map(d3_number).filter(d3_numeric).sort(d3_ascending);\n return rescale();\n };\n scale.range = function(x) {\n if (!arguments.length) return range;\n range = x;\n return rescale();\n };\n scale.quantiles = function() {\n return thresholds;\n };\n scale.invertExtent = function(y) {\n y = range.indexOf(y);\n return y < 0 ? [ NaN, NaN ] : [ y > 0 ? thresholds[y - 1] : domain[0], y < thresholds.length ? thresholds[y] : domain[domain.length - 1] ];\n };\n scale.copy = function() {\n return d3_scale_quantile(domain, range);\n };\n return rescale();\n }\n d3.scale.quantize = function() {\n return d3_scale_quantize(0, 1, [ 0, 1 ]);\n };\n function d3_scale_quantize(x0, x1, range) {\n var kx, i;\n function scale(x) {\n return range[Math.max(0, Math.min(i, Math.floor(kx * (x - x0))))];\n }\n function rescale() {\n kx = range.length / (x1 - x0);\n i = range.length - 1;\n return scale;\n }\n scale.domain = function(x) {\n if (!arguments.length) return [ x0, x1 ];\n x0 = +x[0];\n x1 = +x[x.length - 1];\n return rescale();\n };\n scale.range = function(x) {\n if (!arguments.length) return range;\n range = x;\n return rescale();\n };\n scale.invertExtent = function(y) {\n y = range.indexOf(y);\n y = y < 0 ? NaN : y / kx + x0;\n return [ y, y + 1 / kx ];\n };\n scale.copy = function() {\n return d3_scale_quantize(x0, x1, range);\n };\n return rescale();\n }\n d3.scale.threshold = function() {\n return d3_scale_threshold([ .5 ], [ 0, 1 ]);\n };\n function d3_scale_threshold(domain, range) {\n function scale(x) {\n if (x <= x) return range[d3.bisect(domain, x)];\n }\n scale.domain = function(_) {\n if (!arguments.length) return domain;\n domain = _;\n return scale;\n };\n scale.range = function(_) {\n if (!arguments.length) return range;\n range = _;\n return scale;\n };\n scale.invertExtent = function(y) {\n y = range.indexOf(y);\n return [ domain[y - 1], domain[y] ];\n };\n scale.copy = function() {\n return d3_scale_threshold(domain, range);\n };\n return scale;\n }\n d3.scale.identity = function() {\n return d3_scale_identity([ 0, 1 ]);\n };\n function d3_scale_identity(domain) {\n function identity(x) {\n return +x;\n }\n identity.invert = identity;\n identity.domain = identity.range = function(x) {\n if (!arguments.length) return domain;\n domain = x.map(identity);\n return identity;\n };\n identity.ticks = function(m) {\n return d3_scale_linearTicks(domain, m);\n };\n identity.tickFormat = function(m, format) {\n return d3_scale_linearTickFormat(domain, m, format);\n };\n identity.copy = function() {\n return d3_scale_identity(domain);\n };\n return identity;\n }\n d3.svg = {};\n function d3_zero() {\n return 0;\n }\n d3.svg.arc = function() {\n var innerRadius = d3_svg_arcInnerRadius, outerRadius = d3_svg_arcOuterRadius, cornerRadius = d3_zero, padRadius = d3_svg_arcAuto, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle, padAngle = d3_svg_arcPadAngle;\n function arc() {\n var r0 = Math.max(0, +innerRadius.apply(this, arguments)), r1 = Math.max(0, +outerRadius.apply(this, arguments)), a0 = startAngle.apply(this, arguments) - halfπ, a1 = endAngle.apply(this, arguments) - halfπ, da = Math.abs(a1 - a0), cw = a0 > a1 ? 0 : 1;\n if (r1 < r0) rc = r1, r1 = r0, r0 = rc;\n if (da >= τε) return circleSegment(r1, cw) + (r0 ? circleSegment(r0, 1 - cw) : \"\") + \"Z\";\n var rc, cr, rp, ap, p0 = 0, p1 = 0, x0, y0, x1, y1, x2, y2, x3, y3, path = [];\n if (ap = (+padAngle.apply(this, arguments) || 0) / 2) {\n rp = padRadius === d3_svg_arcAuto ? Math.sqrt(r0 * r0 + r1 * r1) : +padRadius.apply(this, arguments);\n if (!cw) p1 *= -1;\n if (r1) p1 = d3_asin(rp / r1 * Math.sin(ap));\n if (r0) p0 = d3_asin(rp / r0 * Math.sin(ap));\n }\n if (r1) {\n x0 = r1 * Math.cos(a0 + p1);\n y0 = r1 * Math.sin(a0 + p1);\n x1 = r1 * Math.cos(a1 - p1);\n y1 = r1 * Math.sin(a1 - p1);\n var l1 = Math.abs(a1 - a0 - 2 * p1) <= π ? 0 : 1;\n if (p1 && d3_svg_arcSweep(x0, y0, x1, y1) === cw ^ l1) {\n var h1 = (a0 + a1) / 2;\n x0 = r1 * Math.cos(h1);\n y0 = r1 * Math.sin(h1);\n x1 = y1 = null;\n }\n } else {\n x0 = y0 = 0;\n }\n if (r0) {\n x2 = r0 * Math.cos(a1 - p0);\n y2 = r0 * Math.sin(a1 - p0);\n x3 = r0 * Math.cos(a0 + p0);\n y3 = r0 * Math.sin(a0 + p0);\n var l0 = Math.abs(a0 - a1 + 2 * p0) <= π ? 0 : 1;\n if (p0 && d3_svg_arcSweep(x2, y2, x3, y3) === 1 - cw ^ l0) {\n var h0 = (a0 + a1) / 2;\n x2 = r0 * Math.cos(h0);\n y2 = r0 * Math.sin(h0);\n x3 = y3 = null;\n }\n } else {\n x2 = y2 = 0;\n }\n if ((rc = Math.min(Math.abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments))) > .001) {\n cr = r0 < r1 ^ cw ? 0 : 1;\n var oc = x3 == null ? [ x2, y2 ] : x1 == null ? [ x0, y0 ] : d3_geom_polygonIntersect([ x0, y0 ], [ x3, y3 ], [ x1, y1 ], [ x2, y2 ]), ax = x0 - oc[0], ay = y0 - oc[1], bx = x1 - oc[0], by = y1 - oc[1], kc = 1 / Math.sin(Math.acos((ax * bx + ay * by) / (Math.sqrt(ax * ax + ay * ay) * Math.sqrt(bx * bx + by * by))) / 2), lc = Math.sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n if (x1 != null) {\n var rc1 = Math.min(rc, (r1 - lc) / (kc + 1)), t30 = d3_svg_arcCornerTangents(x3 == null ? [ x2, y2 ] : [ x3, y3 ], [ x0, y0 ], r1, rc1, cw), t12 = d3_svg_arcCornerTangents([ x1, y1 ], [ x2, y2 ], r1, rc1, cw);\n if (rc === rc1) {\n path.push(\"M\", t30[0], \"A\", rc1, \",\", rc1, \" 0 0,\", cr, \" \", t30[1], \"A\", r1, \",\", r1, \" 0 \", 1 - cw ^ d3_svg_arcSweep(t30[1][0], t30[1][1], t12[1][0], t12[1][1]), \",\", cw, \" \", t12[1], \"A\", rc1, \",\", rc1, \" 0 0,\", cr, \" \", t12[0]);\n } else {\n path.push(\"M\", t30[0], \"A\", rc1, \",\", rc1, \" 0 1,\", cr, \" \", t12[0]);\n }\n } else {\n path.push(\"M\", x0, \",\", y0);\n }\n if (x3 != null) {\n var rc0 = Math.min(rc, (r0 - lc) / (kc - 1)), t03 = d3_svg_arcCornerTangents([ x0, y0 ], [ x3, y3 ], r0, -rc0, cw), t21 = d3_svg_arcCornerTangents([ x2, y2 ], x1 == null ? [ x0, y0 ] : [ x1, y1 ], r0, -rc0, cw);\n if (rc === rc0) {\n path.push(\"L\", t21[0], \"A\", rc0, \",\", rc0, \" 0 0,\", cr, \" \", t21[1], \"A\", r0, \",\", r0, \" 0 \", cw ^ d3_svg_arcSweep(t21[1][0], t21[1][1], t03[1][0], t03[1][1]), \",\", 1 - cw, \" \", t03[1], \"A\", rc0, \",\", rc0, \" 0 0,\", cr, \" \", t03[0]);\n } else {\n path.push(\"L\", t21[0], \"A\", rc0, \",\", rc0, \" 0 0,\", cr, \" \", t03[0]);\n }\n } else {\n path.push(\"L\", x2, \",\", y2);\n }\n } else {\n path.push(\"M\", x0, \",\", y0);\n if (x1 != null) path.push(\"A\", r1, \",\", r1, \" 0 \", l1, \",\", cw, \" \", x1, \",\", y1);\n path.push(\"L\", x2, \",\", y2);\n if (x3 != null) path.push(\"A\", r0, \",\", r0, \" 0 \", l0, \",\", 1 - cw, \" \", x3, \",\", y3);\n }\n path.push(\"Z\");\n return path.join(\"\");\n }\n function circleSegment(r1, cw) {\n return \"M0,\" + r1 + \"A\" + r1 + \",\" + r1 + \" 0 1,\" + cw + \" 0,\" + -r1 + \"A\" + r1 + \",\" + r1 + \" 0 1,\" + cw + \" 0,\" + r1;\n }\n arc.innerRadius = function(v) {\n if (!arguments.length) return innerRadius;\n innerRadius = d3_functor(v);\n return arc;\n };\n arc.outerRadius = function(v) {\n if (!arguments.length) return outerRadius;\n outerRadius = d3_functor(v);\n return arc;\n };\n arc.cornerRadius = function(v) {\n if (!arguments.length) return cornerRadius;\n cornerRadius = d3_functor(v);\n return arc;\n };\n arc.padRadius = function(v) {\n if (!arguments.length) return padRadius;\n padRadius = v == d3_svg_arcAuto ? d3_svg_arcAuto : d3_functor(v);\n return arc;\n };\n arc.startAngle = function(v) {\n if (!arguments.length) return startAngle;\n startAngle = d3_functor(v);\n return arc;\n };\n arc.endAngle = function(v) {\n if (!arguments.length) return endAngle;\n endAngle = d3_functor(v);\n return arc;\n };\n arc.padAngle = function(v) {\n if (!arguments.length) return padAngle;\n padAngle = d3_functor(v);\n return arc;\n };\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2, a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - halfπ;\n return [ Math.cos(a) * r, Math.sin(a) * r ];\n };\n return arc;\n };\n var d3_svg_arcAuto = \"auto\";\n function d3_svg_arcInnerRadius(d) {\n return d.innerRadius;\n }\n function d3_svg_arcOuterRadius(d) {\n return d.outerRadius;\n }\n function d3_svg_arcStartAngle(d) {\n return d.startAngle;\n }\n function d3_svg_arcEndAngle(d) {\n return d.endAngle;\n }\n function d3_svg_arcPadAngle(d) {\n return d && d.padAngle;\n }\n function d3_svg_arcSweep(x0, y0, x1, y1) {\n return (x0 - x1) * y0 - (y0 - y1) * x0 > 0 ? 0 : 1;\n }\n function d3_svg_arcCornerTangents(p0, p1, r1, rc, cw) {\n var x01 = p0[0] - p1[0], y01 = p0[1] - p1[1], lo = (cw ? rc : -rc) / Math.sqrt(x01 * x01 + y01 * y01), ox = lo * y01, oy = -lo * x01, x1 = p0[0] + ox, y1 = p0[1] + oy, x2 = p1[0] + ox, y2 = p1[1] + oy, x3 = (x1 + x2) / 2, y3 = (y1 + y2) / 2, dx = x2 - x1, dy = y2 - y1, d2 = dx * dx + dy * dy, r = r1 - rc, D = x1 * y2 - x2 * y1, d = (dy < 0 ? -1 : 1) * Math.sqrt(r * r * d2 - D * D), cx0 = (D * dy - dx * d) / d2, cy0 = (-D * dx - dy * d) / d2, cx1 = (D * dy + dx * d) / d2, cy1 = (-D * dx + dy * d) / d2, dx0 = cx0 - x3, dy0 = cy0 - y3, dx1 = cx1 - x3, dy1 = cy1 - y3;\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n return [ [ cx0 - ox, cy0 - oy ], [ cx0 * r1 / r, cy0 * r1 / r ] ];\n }\n function d3_svg_line(projection) {\n var x = d3_geom_pointX, y = d3_geom_pointY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, tension = .7;\n function line(data) {\n var segments = [], points = [], i = -1, n = data.length, d, fx = d3_functor(x), fy = d3_functor(y);\n function segment() {\n segments.push(\"M\", interpolate(projection(points), tension));\n }\n while (++i < n) {\n if (defined.call(this, d = data[i], i)) {\n points.push([ +fx.call(this, d, i), +fy.call(this, d, i) ]);\n } else if (points.length) {\n segment();\n points = [];\n }\n }\n if (points.length) segment();\n return segments.length ? segments.join(\"\") : null;\n }\n line.x = function(_) {\n if (!arguments.length) return x;\n x = _;\n return line;\n };\n line.y = function(_) {\n if (!arguments.length) return y;\n y = _;\n return line;\n };\n line.defined = function(_) {\n if (!arguments.length) return defined;\n defined = _;\n return line;\n };\n line.interpolate = function(_) {\n if (!arguments.length) return interpolateKey;\n if (typeof _ === \"function\") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key;\n return line;\n };\n line.tension = function(_) {\n if (!arguments.length) return tension;\n tension = _;\n return line;\n };\n return line;\n }\n d3.svg.line = function() {\n return d3_svg_line(d3_identity);\n };\n var d3_svg_lineInterpolators = d3.map({\n linear: d3_svg_lineLinear,\n \"linear-closed\": d3_svg_lineLinearClosed,\n step: d3_svg_lineStep,\n \"step-before\": d3_svg_lineStepBefore,\n \"step-after\": d3_svg_lineStepAfter,\n basis: d3_svg_lineBasis,\n \"basis-open\": d3_svg_lineBasisOpen,\n \"basis-closed\": d3_svg_lineBasisClosed,\n bundle: d3_svg_lineBundle,\n cardinal: d3_svg_lineCardinal,\n \"cardinal-open\": d3_svg_lineCardinalOpen,\n \"cardinal-closed\": d3_svg_lineCardinalClosed,\n monotone: d3_svg_lineMonotone\n });\n d3_svg_lineInterpolators.forEach(function(key, value) {\n value.key = key;\n value.closed = /-closed$/.test(key);\n });\n function d3_svg_lineLinear(points) {\n return points.join(\"L\");\n }\n function d3_svg_lineLinearClosed(points) {\n return d3_svg_lineLinear(points) + \"Z\";\n }\n function d3_svg_lineStep(points) {\n var i = 0, n = points.length, p = points[0], path = [ p[0], \",\", p[1] ];\n while (++i < n) path.push(\"H\", (p[0] + (p = points[i])[0]) / 2, \"V\", p[1]);\n if (n > 1) path.push(\"H\", p[0]);\n return path.join(\"\");\n }\n function d3_svg_lineStepBefore(points) {\n var i = 0, n = points.length, p = points[0], path = [ p[0], \",\", p[1] ];\n while (++i < n) path.push(\"V\", (p = points[i])[1], \"H\", p[0]);\n return path.join(\"\");\n }\n function d3_svg_lineStepAfter(points) {\n var i = 0, n = points.length, p = points[0], path = [ p[0], \",\", p[1] ];\n while (++i < n) path.push(\"H\", (p = points[i])[0], \"V\", p[1]);\n return path.join(\"\");\n }\n function d3_svg_lineCardinalOpen(points, tension) {\n return points.length < 4 ? d3_svg_lineLinear(points) : points[1] + d3_svg_lineHermite(points.slice(1, -1), d3_svg_lineCardinalTangents(points, tension));\n }\n function d3_svg_lineCardinalClosed(points, tension) {\n return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite((points.push(points[0]), \n points), d3_svg_lineCardinalTangents([ points[points.length - 2] ].concat(points, [ points[1] ]), tension));\n }\n function d3_svg_lineCardinal(points, tension) {\n return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineCardinalTangents(points, tension));\n }\n function d3_svg_lineHermite(points, tangents) {\n if (tangents.length < 1 || points.length != tangents.length && points.length != tangents.length + 2) {\n return d3_svg_lineLinear(points);\n }\n var quad = points.length != tangents.length, path = \"\", p0 = points[0], p = points[1], t0 = tangents[0], t = t0, pi = 1;\n if (quad) {\n path += \"Q\" + (p[0] - t0[0] * 2 / 3) + \",\" + (p[1] - t0[1] * 2 / 3) + \",\" + p[0] + \",\" + p[1];\n p0 = points[1];\n pi = 2;\n }\n if (tangents.length > 1) {\n t = tangents[1];\n p = points[pi];\n pi++;\n path += \"C\" + (p0[0] + t0[0]) + \",\" + (p0[1] + t0[1]) + \",\" + (p[0] - t[0]) + \",\" + (p[1] - t[1]) + \",\" + p[0] + \",\" + p[1];\n for (var i = 2; i < tangents.length; i++, pi++) {\n p = points[pi];\n t = tangents[i];\n path += \"S\" + (p[0] - t[0]) + \",\" + (p[1] - t[1]) + \",\" + p[0] + \",\" + p[1];\n }\n }\n if (quad) {\n var lp = points[pi];\n path += \"Q\" + (p[0] + t[0] * 2 / 3) + \",\" + (p[1] + t[1] * 2 / 3) + \",\" + lp[0] + \",\" + lp[1];\n }\n return path;\n }\n function d3_svg_lineCardinalTangents(points, tension) {\n var tangents = [], a = (1 - tension) / 2, p0, p1 = points[0], p2 = points[1], i = 1, n = points.length;\n while (++i < n) {\n p0 = p1;\n p1 = p2;\n p2 = points[i];\n tangents.push([ a * (p2[0] - p0[0]), a * (p2[1] - p0[1]) ]);\n }\n return tangents;\n }\n function d3_svg_lineBasis(points) {\n if (points.length < 3) return d3_svg_lineLinear(points);\n var i = 1, n = points.length, pi = points[0], x0 = pi[0], y0 = pi[1], px = [ x0, x0, x0, (pi = points[1])[0] ], py = [ y0, y0, y0, pi[1] ], path = [ x0, \",\", y0, \"L\", d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier3, py) ];\n points.push(points[n - 1]);\n while (++i <= n) {\n pi = points[i];\n px.shift();\n px.push(pi[0]);\n py.shift();\n py.push(pi[1]);\n d3_svg_lineBasisBezier(path, px, py);\n }\n points.pop();\n path.push(\"L\", pi);\n return path.join(\"\");\n }\n function d3_svg_lineBasisOpen(points) {\n if (points.length < 4) return d3_svg_lineLinear(points);\n var path = [], i = -1, n = points.length, pi, px = [ 0 ], py = [ 0 ];\n while (++i < 3) {\n pi = points[i];\n px.push(pi[0]);\n py.push(pi[1]);\n }\n path.push(d3_svg_lineDot4(d3_svg_lineBasisBezier3, px) + \",\" + d3_svg_lineDot4(d3_svg_lineBasisBezier3, py));\n --i;\n while (++i < n) {\n pi = points[i];\n px.shift();\n px.push(pi[0]);\n py.shift();\n py.push(pi[1]);\n d3_svg_lineBasisBezier(path, px, py);\n }\n return path.join(\"\");\n }\n function d3_svg_lineBasisClosed(points) {\n var path, i = -1, n = points.length, m = n + 4, pi, px = [], py = [];\n while (++i < 4) {\n pi = points[i % n];\n px.push(pi[0]);\n py.push(pi[1]);\n }\n path = [ d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier3, py) ];\n --i;\n while (++i < m) {\n pi = points[i % n];\n px.shift();\n px.push(pi[0]);\n py.shift();\n py.push(pi[1]);\n d3_svg_lineBasisBezier(path, px, py);\n }\n return path.join(\"\");\n }\n function d3_svg_lineBundle(points, tension) {\n var n = points.length - 1;\n if (n) {\n var x0 = points[0][0], y0 = points[0][1], dx = points[n][0] - x0, dy = points[n][1] - y0, i = -1, p, t;\n while (++i <= n) {\n p = points[i];\n t = i / n;\n p[0] = tension * p[0] + (1 - tension) * (x0 + t * dx);\n p[1] = tension * p[1] + (1 - tension) * (y0 + t * dy);\n }\n }\n return d3_svg_lineBasis(points);\n }\n function d3_svg_lineDot4(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];\n }\n var d3_svg_lineBasisBezier1 = [ 0, 2 / 3, 1 / 3, 0 ], d3_svg_lineBasisBezier2 = [ 0, 1 / 3, 2 / 3, 0 ], d3_svg_lineBasisBezier3 = [ 0, 1 / 6, 2 / 3, 1 / 6 ];\n function d3_svg_lineBasisBezier(path, x, y) {\n path.push(\"C\", d3_svg_lineDot4(d3_svg_lineBasisBezier1, x), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier1, y), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier2, x), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier2, y), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier3, x), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier3, y));\n }\n function d3_svg_lineSlope(p0, p1) {\n return (p1[1] - p0[1]) / (p1[0] - p0[0]);\n }\n function d3_svg_lineFiniteDifferences(points) {\n var i = 0, j = points.length - 1, m = [], p0 = points[0], p1 = points[1], d = m[0] = d3_svg_lineSlope(p0, p1);\n while (++i < j) {\n m[i] = (d + (d = d3_svg_lineSlope(p0 = p1, p1 = points[i + 1]))) / 2;\n }\n m[i] = d;\n return m;\n }\n function d3_svg_lineMonotoneTangents(points) {\n var tangents = [], d, a, b, s, m = d3_svg_lineFiniteDifferences(points), i = -1, j = points.length - 1;\n while (++i < j) {\n d = d3_svg_lineSlope(points[i], points[i + 1]);\n if (abs(d) < ε) {\n m[i] = m[i + 1] = 0;\n } else {\n a = m[i] / d;\n b = m[i + 1] / d;\n s = a * a + b * b;\n if (s > 9) {\n s = d * 3 / Math.sqrt(s);\n m[i] = s * a;\n m[i + 1] = s * b;\n }\n }\n }\n i = -1;\n while (++i <= j) {\n s = (points[Math.min(j, i + 1)][0] - points[Math.max(0, i - 1)][0]) / (6 * (1 + m[i] * m[i]));\n tangents.push([ s || 0, m[i] * s || 0 ]);\n }\n return tangents;\n }\n function d3_svg_lineMonotone(points) {\n return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineMonotoneTangents(points));\n }\n d3.svg.line.radial = function() {\n var line = d3_svg_line(d3_svg_lineRadial);\n line.radius = line.x, delete line.x;\n line.angle = line.y, delete line.y;\n return line;\n };\n function d3_svg_lineRadial(points) {\n var point, i = -1, n = points.length, r, a;\n while (++i < n) {\n point = points[i];\n r = point[0];\n a = point[1] - halfπ;\n point[0] = r * Math.cos(a);\n point[1] = r * Math.sin(a);\n }\n return points;\n }\n function d3_svg_area(projection) {\n var x0 = d3_geom_pointX, x1 = d3_geom_pointX, y0 = 0, y1 = d3_geom_pointY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, interpolateReverse = interpolate, L = \"L\", tension = .7;\n function area(data) {\n var segments = [], points0 = [], points1 = [], i = -1, n = data.length, d, fx0 = d3_functor(x0), fy0 = d3_functor(y0), fx1 = x0 === x1 ? function() {\n return x;\n } : d3_functor(x1), fy1 = y0 === y1 ? function() {\n return y;\n } : d3_functor(y1), x, y;\n function segment() {\n segments.push(\"M\", interpolate(projection(points1), tension), L, interpolateReverse(projection(points0.reverse()), tension), \"Z\");\n }\n while (++i < n) {\n if (defined.call(this, d = data[i], i)) {\n points0.push([ x = +fx0.call(this, d, i), y = +fy0.call(this, d, i) ]);\n points1.push([ +fx1.call(this, d, i), +fy1.call(this, d, i) ]);\n } else if (points0.length) {\n segment();\n points0 = [];\n points1 = [];\n }\n }\n if (points0.length) segment();\n return segments.length ? segments.join(\"\") : null;\n }\n area.x = function(_) {\n if (!arguments.length) return x1;\n x0 = x1 = _;\n return area;\n };\n area.x0 = function(_) {\n if (!arguments.length) return x0;\n x0 = _;\n return area;\n };\n area.x1 = function(_) {\n if (!arguments.length) return x1;\n x1 = _;\n return area;\n };\n area.y = function(_) {\n if (!arguments.length) return y1;\n y0 = y1 = _;\n return area;\n };\n area.y0 = function(_) {\n if (!arguments.length) return y0;\n y0 = _;\n return area;\n };\n area.y1 = function(_) {\n if (!arguments.length) return y1;\n y1 = _;\n return area;\n };\n area.defined = function(_) {\n if (!arguments.length) return defined;\n defined = _;\n return area;\n };\n area.interpolate = function(_) {\n if (!arguments.length) return interpolateKey;\n if (typeof _ === \"function\") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key;\n interpolateReverse = interpolate.reverse || interpolate;\n L = interpolate.closed ? \"M\" : \"L\";\n return area;\n };\n area.tension = function(_) {\n if (!arguments.length) return tension;\n tension = _;\n return area;\n };\n return area;\n }\n d3_svg_lineStepBefore.reverse = d3_svg_lineStepAfter;\n d3_svg_lineStepAfter.reverse = d3_svg_lineStepBefore;\n d3.svg.area = function() {\n return d3_svg_area(d3_identity);\n };\n d3.svg.area.radial = function() {\n var area = d3_svg_area(d3_svg_lineRadial);\n area.radius = area.x, delete area.x;\n area.innerRadius = area.x0, delete area.x0;\n area.outerRadius = area.x1, delete area.x1;\n area.angle = area.y, delete area.y;\n area.startAngle = area.y0, delete area.y0;\n area.endAngle = area.y1, delete area.y1;\n return area;\n };\n d3.svg.chord = function() {\n var source = d3_source, target = d3_target, radius = d3_svg_chordRadius, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle;\n function chord(d, i) {\n var s = subgroup(this, source, d, i), t = subgroup(this, target, d, i);\n return \"M\" + s.p0 + arc(s.r, s.p1, s.a1 - s.a0) + (equals(s, t) ? curve(s.r, s.p1, s.r, s.p0) : curve(s.r, s.p1, t.r, t.p0) + arc(t.r, t.p1, t.a1 - t.a0) + curve(t.r, t.p1, s.r, s.p0)) + \"Z\";\n }\n function subgroup(self, f, d, i) {\n var subgroup = f.call(self, d, i), r = radius.call(self, subgroup, i), a0 = startAngle.call(self, subgroup, i) - halfπ, a1 = endAngle.call(self, subgroup, i) - halfπ;\n return {\n r: r,\n a0: a0,\n a1: a1,\n p0: [ r * Math.cos(a0), r * Math.sin(a0) ],\n p1: [ r * Math.cos(a1), r * Math.sin(a1) ]\n };\n }\n function equals(a, b) {\n return a.a0 == b.a0 && a.a1 == b.a1;\n }\n function arc(r, p, a) {\n return \"A\" + r + \",\" + r + \" 0 \" + +(a > π) + \",1 \" + p;\n }\n function curve(r0, p0, r1, p1) {\n return \"Q 0,0 \" + p1;\n }\n chord.radius = function(v) {\n if (!arguments.length) return radius;\n radius = d3_functor(v);\n return chord;\n };\n chord.source = function(v) {\n if (!arguments.length) return source;\n source = d3_functor(v);\n return chord;\n };\n chord.target = function(v) {\n if (!arguments.length) return target;\n target = d3_functor(v);\n return chord;\n };\n chord.startAngle = function(v) {\n if (!arguments.length) return startAngle;\n startAngle = d3_functor(v);\n return chord;\n };\n chord.endAngle = function(v) {\n if (!arguments.length) return endAngle;\n endAngle = d3_functor(v);\n return chord;\n };\n return chord;\n };\n function d3_svg_chordRadius(d) {\n return d.radius;\n }\n d3.svg.diagonal = function() {\n var source = d3_source, target = d3_target, projection = d3_svg_diagonalProjection;\n function diagonal(d, i) {\n var p0 = source.call(this, d, i), p3 = target.call(this, d, i), m = (p0.y + p3.y) / 2, p = [ p0, {\n x: p0.x,\n y: m\n }, {\n x: p3.x,\n y: m\n }, p3 ];\n p = p.map(projection);\n return \"M\" + p[0] + \"C\" + p[1] + \" \" + p[2] + \" \" + p[3];\n }\n diagonal.source = function(x) {\n if (!arguments.length) return source;\n source = d3_functor(x);\n return diagonal;\n };\n diagonal.target = function(x) {\n if (!arguments.length) return target;\n target = d3_functor(x);\n return diagonal;\n };\n diagonal.projection = function(x) {\n if (!arguments.length) return projection;\n projection = x;\n return diagonal;\n };\n return diagonal;\n };\n function d3_svg_diagonalProjection(d) {\n return [ d.x, d.y ];\n }\n d3.svg.diagonal.radial = function() {\n var diagonal = d3.svg.diagonal(), projection = d3_svg_diagonalProjection, projection_ = diagonal.projection;\n diagonal.projection = function(x) {\n return arguments.length ? projection_(d3_svg_diagonalRadialProjection(projection = x)) : projection;\n };\n return diagonal;\n };\n function d3_svg_diagonalRadialProjection(projection) {\n return function() {\n var d = projection.apply(this, arguments), r = d[0], a = d[1] - halfπ;\n return [ r * Math.cos(a), r * Math.sin(a) ];\n };\n }\n d3.svg.symbol = function() {\n var type = d3_svg_symbolType, size = d3_svg_symbolSize;\n function symbol(d, i) {\n return (d3_svg_symbols.get(type.call(this, d, i)) || d3_svg_symbolCircle)(size.call(this, d, i));\n }\n symbol.type = function(x) {\n if (!arguments.length) return type;\n type = d3_functor(x);\n return symbol;\n };\n symbol.size = function(x) {\n if (!arguments.length) return size;\n size = d3_functor(x);\n return symbol;\n };\n return symbol;\n };\n function d3_svg_symbolSize() {\n return 64;\n }\n function d3_svg_symbolType() {\n return \"circle\";\n }\n function d3_svg_symbolCircle(size) {\n var r = Math.sqrt(size / π);\n return \"M0,\" + r + \"A\" + r + \",\" + r + \" 0 1,1 0,\" + -r + \"A\" + r + \",\" + r + \" 0 1,1 0,\" + r + \"Z\";\n }\n var d3_svg_symbols = d3.map({\n circle: d3_svg_symbolCircle,\n cross: function(size) {\n var r = Math.sqrt(size / 5) / 2;\n return \"M\" + -3 * r + \",\" + -r + \"H\" + -r + \"V\" + -3 * r + \"H\" + r + \"V\" + -r + \"H\" + 3 * r + \"V\" + r + \"H\" + r + \"V\" + 3 * r + \"H\" + -r + \"V\" + r + \"H\" + -3 * r + \"Z\";\n },\n diamond: function(size) {\n var ry = Math.sqrt(size / (2 * d3_svg_symbolTan30)), rx = ry * d3_svg_symbolTan30;\n return \"M0,\" + -ry + \"L\" + rx + \",0\" + \" 0,\" + ry + \" \" + -rx + \",0\" + \"Z\";\n },\n square: function(size) {\n var r = Math.sqrt(size) / 2;\n return \"M\" + -r + \",\" + -r + \"L\" + r + \",\" + -r + \" \" + r + \",\" + r + \" \" + -r + \",\" + r + \"Z\";\n },\n \"triangle-down\": function(size) {\n var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2;\n return \"M0,\" + ry + \"L\" + rx + \",\" + -ry + \" \" + -rx + \",\" + -ry + \"Z\";\n },\n \"triangle-up\": function(size) {\n var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2;\n return \"M0,\" + -ry + \"L\" + rx + \",\" + ry + \" \" + -rx + \",\" + ry + \"Z\";\n }\n });\n d3.svg.symbolTypes = d3_svg_symbols.keys();\n var d3_svg_symbolSqrt3 = Math.sqrt(3), d3_svg_symbolTan30 = Math.tan(30 * d3_radians);\n d3_selectionPrototype.transition = function(name) {\n var id = d3_transitionInheritId || ++d3_transitionId, ns = d3_transitionNamespace(name), subgroups = [], subgroup, node, transition = d3_transitionInherit || {\n time: Date.now(),\n ease: d3_ease_cubicInOut,\n delay: 0,\n duration: 250\n };\n for (var j = -1, m = this.length; ++j < m; ) {\n subgroups.push(subgroup = []);\n for (var group = this[j], i = -1, n = group.length; ++i < n; ) {\n if (node = group[i]) d3_transitionNode(node, i, ns, id, transition);\n subgroup.push(node);\n }\n }\n return d3_transition(subgroups, ns, id);\n };\n d3_selectionPrototype.interrupt = function(name) {\n return this.each(name == null ? d3_selection_interrupt : d3_selection_interruptNS(d3_transitionNamespace(name)));\n };\n var d3_selection_interrupt = d3_selection_interruptNS(d3_transitionNamespace());\n function d3_selection_interruptNS(ns) {\n return function() {\n var lock, active;\n if ((lock = this[ns]) && (active = lock[lock.active])) {\n if (--lock.count) delete lock[lock.active]; else delete this[ns];\n lock.active += .5;\n active.event && active.event.interrupt.call(this, this.__data__, active.index);\n }\n };\n }\n function d3_transition(groups, ns, id) {\n d3_subclass(groups, d3_transitionPrototype);\n groups.namespace = ns;\n groups.id = id;\n return groups;\n }\n var d3_transitionPrototype = [], d3_transitionId = 0, d3_transitionInheritId, d3_transitionInherit;\n d3_transitionPrototype.call = d3_selectionPrototype.call;\n d3_transitionPrototype.empty = d3_selectionPrototype.empty;\n d3_transitionPrototype.node = d3_selectionPrototype.node;\n d3_transitionPrototype.size = d3_selectionPrototype.size;\n d3.transition = function(selection, name) {\n return selection && selection.transition ? d3_transitionInheritId ? selection.transition(name) : selection : d3.selection().transition(selection);\n };\n d3.transition.prototype = d3_transitionPrototype;\n d3_transitionPrototype.select = function(selector) {\n var id = this.id, ns = this.namespace, subgroups = [], subgroup, subnode, node;\n selector = d3_selection_selector(selector);\n for (var j = -1, m = this.length; ++j < m; ) {\n subgroups.push(subgroup = []);\n for (var group = this[j], i = -1, n = group.length; ++i < n; ) {\n if ((node = group[i]) && (subnode = selector.call(node, node.__data__, i, j))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n d3_transitionNode(subnode, i, ns, id, node[ns][id]);\n subgroup.push(subnode);\n } else {\n subgroup.push(null);\n }\n }\n }\n return d3_transition(subgroups, ns, id);\n };\n d3_transitionPrototype.selectAll = function(selector) {\n var id = this.id, ns = this.namespace, subgroups = [], subgroup, subnodes, node, subnode, transition;\n selector = d3_selection_selectorAll(selector);\n for (var j = -1, m = this.length; ++j < m; ) {\n for (var group = this[j], i = -1, n = group.length; ++i < n; ) {\n if (node = group[i]) {\n transition = node[ns][id];\n subnodes = selector.call(node, node.__data__, i, j);\n subgroups.push(subgroup = []);\n for (var k = -1, o = subnodes.length; ++k < o; ) {\n if (subnode = subnodes[k]) d3_transitionNode(subnode, k, ns, id, transition);\n subgroup.push(subnode);\n }\n }\n }\n }\n return d3_transition(subgroups, ns, id);\n };\n d3_transitionPrototype.filter = function(filter) {\n var subgroups = [], subgroup, group, node;\n if (typeof filter !== \"function\") filter = d3_selection_filter(filter);\n for (var j = 0, m = this.length; j < m; j++) {\n subgroups.push(subgroup = []);\n for (var group = this[j], i = 0, n = group.length; i < n; i++) {\n if ((node = group[i]) && filter.call(node, node.__data__, i, j)) {\n subgroup.push(node);\n }\n }\n }\n return d3_transition(subgroups, this.namespace, this.id);\n };\n d3_transitionPrototype.tween = function(name, tween) {\n var id = this.id, ns = this.namespace;\n if (arguments.length < 2) return this.node()[ns][id].tween.get(name);\n return d3_selection_each(this, tween == null ? function(node) {\n node[ns][id].tween.remove(name);\n } : function(node) {\n node[ns][id].tween.set(name, tween);\n });\n };\n function d3_transition_tween(groups, name, value, tween) {\n var id = groups.id, ns = groups.namespace;\n return d3_selection_each(groups, typeof value === \"function\" ? function(node, i, j) {\n node[ns][id].tween.set(name, tween(value.call(node, node.__data__, i, j)));\n } : (value = tween(value), function(node) {\n node[ns][id].tween.set(name, value);\n }));\n }\n d3_transitionPrototype.attr = function(nameNS, value) {\n if (arguments.length < 2) {\n for (value in nameNS) this.attr(value, nameNS[value]);\n return this;\n }\n var interpolate = nameNS == \"transform\" ? d3_interpolateTransform : d3_interpolate, name = d3.ns.qualify(nameNS);\n function attrNull() {\n this.removeAttribute(name);\n }\n function attrNullNS() {\n this.removeAttributeNS(name.space, name.local);\n }\n function attrTween(b) {\n return b == null ? attrNull : (b += \"\", function() {\n var a = this.getAttribute(name), i;\n return a !== b && (i = interpolate(a, b), function(t) {\n this.setAttribute(name, i(t));\n });\n });\n }\n function attrTweenNS(b) {\n return b == null ? attrNullNS : (b += \"\", function() {\n var a = this.getAttributeNS(name.space, name.local), i;\n return a !== b && (i = interpolate(a, b), function(t) {\n this.setAttributeNS(name.space, name.local, i(t));\n });\n });\n }\n return d3_transition_tween(this, \"attr.\" + nameNS, value, name.local ? attrTweenNS : attrTween);\n };\n d3_transitionPrototype.attrTween = function(nameNS, tween) {\n var name = d3.ns.qualify(nameNS);\n function attrTween(d, i) {\n var f = tween.call(this, d, i, this.getAttribute(name));\n return f && function(t) {\n this.setAttribute(name, f(t));\n };\n }\n function attrTweenNS(d, i) {\n var f = tween.call(this, d, i, this.getAttributeNS(name.space, name.local));\n return f && function(t) {\n this.setAttributeNS(name.space, name.local, f(t));\n };\n }\n return this.tween(\"attr.\" + nameNS, name.local ? attrTweenNS : attrTween);\n };\n d3_transitionPrototype.style = function(name, value, priority) {\n var n = arguments.length;\n if (n < 3) {\n if (typeof name !== \"string\") {\n if (n < 2) value = \"\";\n for (priority in name) this.style(priority, name[priority], value);\n return this;\n }\n priority = \"\";\n }\n function styleNull() {\n this.style.removeProperty(name);\n }\n function styleString(b) {\n return b == null ? styleNull : (b += \"\", function() {\n var a = d3_window(this).getComputedStyle(this, null).getPropertyValue(name), i;\n return a !== b && (i = d3_interpolate(a, b), function(t) {\n this.style.setProperty(name, i(t), priority);\n });\n });\n }\n return d3_transition_tween(this, \"style.\" + name, value, styleString);\n };\n d3_transitionPrototype.styleTween = function(name, tween, priority) {\n if (arguments.length < 3) priority = \"\";\n function styleTween(d, i) {\n var f = tween.call(this, d, i, d3_window(this).getComputedStyle(this, null).getPropertyValue(name));\n return f && function(t) {\n this.style.setProperty(name, f(t), priority);\n };\n }\n return this.tween(\"style.\" + name, styleTween);\n };\n d3_transitionPrototype.text = function(value) {\n return d3_transition_tween(this, \"text\", value, d3_transition_text);\n };\n function d3_transition_text(b) {\n if (b == null) b = \"\";\n return function() {\n this.textContent = b;\n };\n }\n d3_transitionPrototype.remove = function() {\n var ns = this.namespace;\n return this.each(\"end.transition\", function() {\n var p;\n if (this[ns].count < 2 && (p = this.parentNode)) p.removeChild(this);\n });\n };\n d3_transitionPrototype.ease = function(value) {\n var id = this.id, ns = this.namespace;\n if (arguments.length < 1) return this.node()[ns][id].ease;\n if (typeof value !== \"function\") value = d3.ease.apply(d3, arguments);\n return d3_selection_each(this, function(node) {\n node[ns][id].ease = value;\n });\n };\n d3_transitionPrototype.delay = function(value) {\n var id = this.id, ns = this.namespace;\n if (arguments.length < 1) return this.node()[ns][id].delay;\n return d3_selection_each(this, typeof value === \"function\" ? function(node, i, j) {\n node[ns][id].delay = +value.call(node, node.__data__, i, j);\n } : (value = +value, function(node) {\n node[ns][id].delay = value;\n }));\n };\n d3_transitionPrototype.duration = function(value) {\n var id = this.id, ns = this.namespace;\n if (arguments.length < 1) return this.node()[ns][id].duration;\n return d3_selection_each(this, typeof value === \"function\" ? function(node, i, j) {\n node[ns][id].duration = Math.max(1, value.call(node, node.__data__, i, j));\n } : (value = Math.max(1, value), function(node) {\n node[ns][id].duration = value;\n }));\n };\n d3_transitionPrototype.each = function(type, listener) {\n var id = this.id, ns = this.namespace;\n if (arguments.length < 2) {\n var inherit = d3_transitionInherit, inheritId = d3_transitionInheritId;\n try {\n d3_transitionInheritId = id;\n d3_selection_each(this, function(node, i, j) {\n d3_transitionInherit = node[ns][id];\n type.call(node, node.__data__, i, j);\n });\n } finally {\n d3_transitionInherit = inherit;\n d3_transitionInheritId = inheritId;\n }\n } else {\n d3_selection_each(this, function(node) {\n var transition = node[ns][id];\n (transition.event || (transition.event = d3.dispatch(\"start\", \"end\", \"interrupt\"))).on(type, listener);\n });\n }\n return this;\n };\n d3_transitionPrototype.transition = function() {\n var id0 = this.id, id1 = ++d3_transitionId, ns = this.namespace, subgroups = [], subgroup, group, node, transition;\n for (var j = 0, m = this.length; j < m; j++) {\n subgroups.push(subgroup = []);\n for (var group = this[j], i = 0, n = group.length; i < n; i++) {\n if (node = group[i]) {\n transition = node[ns][id0];\n d3_transitionNode(node, i, ns, id1, {\n time: transition.time,\n ease: transition.ease,\n delay: transition.delay + transition.duration,\n duration: transition.duration\n });\n }\n subgroup.push(node);\n }\n }\n return d3_transition(subgroups, ns, id1);\n };\n function d3_transitionNamespace(name) {\n return name == null ? \"__transition__\" : \"__transition_\" + name + \"__\";\n }\n function d3_transitionNode(node, i, ns, id, inherit) {\n var lock = node[ns] || (node[ns] = {\n active: 0,\n count: 0\n }), transition = lock[id];\n if (!transition) {\n var time = inherit.time;\n transition = lock[id] = {\n tween: new d3_Map(),\n time: time,\n delay: inherit.delay,\n duration: inherit.duration,\n ease: inherit.ease,\n index: i\n };\n inherit = null;\n ++lock.count;\n d3.timer(function(elapsed) {\n var delay = transition.delay, duration, ease, timer = d3_timer_active, tweened = [];\n timer.t = delay + time;\n if (delay <= elapsed) return start(elapsed - delay);\n timer.c = start;\n function start(elapsed) {\n if (lock.active > id) return stop();\n var active = lock[lock.active];\n if (active) {\n --lock.count;\n delete lock[lock.active];\n active.event && active.event.interrupt.call(node, node.__data__, active.index);\n }\n lock.active = id;\n transition.event && transition.event.start.call(node, node.__data__, i);\n transition.tween.forEach(function(key, value) {\n if (value = value.call(node, node.__data__, i)) {\n tweened.push(value);\n }\n });\n ease = transition.ease;\n duration = transition.duration;\n d3.timer(function() {\n timer.c = tick(elapsed || 1) ? d3_true : tick;\n return 1;\n }, 0, time);\n }\n function tick(elapsed) {\n if (lock.active !== id) return 1;\n var t = elapsed / duration, e = ease(t), n = tweened.length;\n while (n > 0) {\n tweened[--n].call(node, e);\n }\n if (t >= 1) {\n transition.event && transition.event.end.call(node, node.__data__, i);\n return stop();\n }\n }\n function stop() {\n if (--lock.count) delete lock[id]; else delete node[ns];\n return 1;\n }\n }, 0, time);\n }\n }\n d3.svg.axis = function() {\n var scale = d3.scale.linear(), orient = d3_svg_axisDefaultOrient, innerTickSize = 6, outerTickSize = 6, tickPadding = 3, tickArguments_ = [ 10 ], tickValues = null, tickFormat_;\n function axis(g) {\n g.each(function() {\n var g = d3.select(this);\n var scale0 = this.__chart__ || scale, scale1 = this.__chart__ = scale.copy();\n var ticks = tickValues == null ? scale1.ticks ? scale1.ticks.apply(scale1, tickArguments_) : scale1.domain() : tickValues, tickFormat = tickFormat_ == null ? scale1.tickFormat ? scale1.tickFormat.apply(scale1, tickArguments_) : d3_identity : tickFormat_, tick = g.selectAll(\".tick\").data(ticks, scale1), tickEnter = tick.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", ε), tickExit = d3.transition(tick.exit()).style(\"opacity\", ε).remove(), tickUpdate = d3.transition(tick.order()).style(\"opacity\", 1), tickSpacing = Math.max(innerTickSize, 0) + tickPadding, tickTransform;\n var range = d3_scaleRange(scale1), path = g.selectAll(\".domain\").data([ 0 ]), pathUpdate = (path.enter().append(\"path\").attr(\"class\", \"domain\"), \n d3.transition(path));\n tickEnter.append(\"line\");\n tickEnter.append(\"text\");\n var lineEnter = tickEnter.select(\"line\"), lineUpdate = tickUpdate.select(\"line\"), text = tick.select(\"text\").text(tickFormat), textEnter = tickEnter.select(\"text\"), textUpdate = tickUpdate.select(\"text\"), sign = orient === \"top\" || orient === \"left\" ? -1 : 1, x1, x2, y1, y2;\n if (orient === \"bottom\" || orient === \"top\") {\n tickTransform = d3_svg_axisX, x1 = \"x\", y1 = \"y\", x2 = \"x2\", y2 = \"y2\";\n text.attr(\"dy\", sign < 0 ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\");\n pathUpdate.attr(\"d\", \"M\" + range[0] + \",\" + sign * outerTickSize + \"V0H\" + range[1] + \"V\" + sign * outerTickSize);\n } else {\n tickTransform = d3_svg_axisY, x1 = \"y\", y1 = \"x\", x2 = \"y2\", y2 = \"x2\";\n text.attr(\"dy\", \".32em\").style(\"text-anchor\", sign < 0 ? \"end\" : \"start\");\n pathUpdate.attr(\"d\", \"M\" + sign * outerTickSize + \",\" + range[0] + \"H0V\" + range[1] + \"H\" + sign * outerTickSize);\n }\n lineEnter.attr(y2, sign * innerTickSize);\n textEnter.attr(y1, sign * tickSpacing);\n lineUpdate.attr(x2, 0).attr(y2, sign * innerTickSize);\n textUpdate.attr(x1, 0).attr(y1, sign * tickSpacing);\n if (scale1.rangeBand) {\n var x = scale1, dx = x.rangeBand() / 2;\n scale0 = scale1 = function(d) {\n return x(d) + dx;\n };\n } else if (scale0.rangeBand) {\n scale0 = scale1;\n } else {\n tickExit.call(tickTransform, scale1, scale0);\n }\n tickEnter.call(tickTransform, scale0, scale1);\n tickUpdate.call(tickTransform, scale1, scale1);\n });\n }\n axis.scale = function(x) {\n if (!arguments.length) return scale;\n scale = x;\n return axis;\n };\n axis.orient = function(x) {\n if (!arguments.length) return orient;\n orient = x in d3_svg_axisOrients ? x + \"\" : d3_svg_axisDefaultOrient;\n return axis;\n };\n axis.ticks = function() {\n if (!arguments.length) return tickArguments_;\n tickArguments_ = arguments;\n return axis;\n };\n axis.tickValues = function(x) {\n if (!arguments.length) return tickValues;\n tickValues = x;\n return axis;\n };\n axis.tickFormat = function(x) {\n if (!arguments.length) return tickFormat_;\n tickFormat_ = x;\n return axis;\n };\n axis.tickSize = function(x) {\n var n = arguments.length;\n if (!n) return innerTickSize;\n innerTickSize = +x;\n outerTickSize = +arguments[n - 1];\n return axis;\n };\n axis.innerTickSize = function(x) {\n if (!arguments.length) return innerTickSize;\n innerTickSize = +x;\n return axis;\n };\n axis.outerTickSize = function(x) {\n if (!arguments.length) return outerTickSize;\n outerTickSize = +x;\n return axis;\n };\n axis.tickPadding = function(x) {\n if (!arguments.length) return tickPadding;\n tickPadding = +x;\n return axis;\n };\n axis.tickSubdivide = function() {\n return arguments.length && axis;\n };\n return axis;\n };\n var d3_svg_axisDefaultOrient = \"bottom\", d3_svg_axisOrients = {\n top: 1,\n right: 1,\n bottom: 1,\n left: 1\n };\n function d3_svg_axisX(selection, x0, x1) {\n selection.attr(\"transform\", function(d) {\n var v0 = x0(d);\n return \"translate(\" + (isFinite(v0) ? v0 : x1(d)) + \",0)\";\n });\n }\n function d3_svg_axisY(selection, y0, y1) {\n selection.attr(\"transform\", function(d) {\n var v0 = y0(d);\n return \"translate(0,\" + (isFinite(v0) ? v0 : y1(d)) + \")\";\n });\n }\n d3.svg.brush = function() {\n var event = d3_eventDispatch(brush, \"brushstart\", \"brush\", \"brushend\"), x = null, y = null, xExtent = [ 0, 0 ], yExtent = [ 0, 0 ], xExtentDomain, yExtentDomain, xClamp = true, yClamp = true, resizes = d3_svg_brushResizes[0];\n function brush(g) {\n g.each(function() {\n var g = d3.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", brushstart).on(\"touchstart.brush\", brushstart);\n var background = g.selectAll(\".background\").data([ 0 ]);\n background.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\");\n g.selectAll(\".extent\").data([ 0 ]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n var resize = g.selectAll(\".resize\").data(resizes, d3_identity);\n resize.exit().remove();\n resize.enter().append(\"g\").attr(\"class\", function(d) {\n return \"resize \" + d;\n }).style(\"cursor\", function(d) {\n return d3_svg_brushCursor[d];\n }).append(\"rect\").attr(\"x\", function(d) {\n return /[ew]$/.test(d) ? -3 : null;\n }).attr(\"y\", function(d) {\n return /^[ns]/.test(d) ? -3 : null;\n }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\");\n resize.style(\"display\", brush.empty() ? \"none\" : null);\n var gUpdate = d3.transition(g), backgroundUpdate = d3.transition(background), range;\n if (x) {\n range = d3_scaleRange(x);\n backgroundUpdate.attr(\"x\", range[0]).attr(\"width\", range[1] - range[0]);\n redrawX(gUpdate);\n }\n if (y) {\n range = d3_scaleRange(y);\n backgroundUpdate.attr(\"y\", range[0]).attr(\"height\", range[1] - range[0]);\n redrawY(gUpdate);\n }\n redraw(gUpdate);\n });\n }\n brush.event = function(g) {\n g.each(function() {\n var event_ = event.of(this, arguments), extent1 = {\n x: xExtent,\n y: yExtent,\n i: xExtentDomain,\n j: yExtentDomain\n }, extent0 = this.__chart__ || extent1;\n this.__chart__ = extent1;\n if (d3_transitionInheritId) {\n d3.select(this).transition().each(\"start.brush\", function() {\n xExtentDomain = extent0.i;\n yExtentDomain = extent0.j;\n xExtent = extent0.x;\n yExtent = extent0.y;\n event_({\n type: \"brushstart\"\n });\n }).tween(\"brush:brush\", function() {\n var xi = d3_interpolateArray(xExtent, extent1.x), yi = d3_interpolateArray(yExtent, extent1.y);\n xExtentDomain = yExtentDomain = null;\n return function(t) {\n xExtent = extent1.x = xi(t);\n yExtent = extent1.y = yi(t);\n event_({\n type: \"brush\",\n mode: \"resize\"\n });\n };\n }).each(\"end.brush\", function() {\n xExtentDomain = extent1.i;\n yExtentDomain = extent1.j;\n event_({\n type: \"brush\",\n mode: \"resize\"\n });\n event_({\n type: \"brushend\"\n });\n });\n } else {\n event_({\n type: \"brushstart\"\n });\n event_({\n type: \"brush\",\n mode: \"resize\"\n });\n event_({\n type: \"brushend\"\n });\n }\n });\n };\n function redraw(g) {\n g.selectAll(\".resize\").attr(\"transform\", function(d) {\n return \"translate(\" + xExtent[+/e$/.test(d)] + \",\" + yExtent[+/^s/.test(d)] + \")\";\n });\n }\n function redrawX(g) {\n g.select(\".extent\").attr(\"x\", xExtent[0]);\n g.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", xExtent[1] - xExtent[0]);\n }\n function redrawY(g) {\n g.select(\".extent\").attr(\"y\", yExtent[0]);\n g.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", yExtent[1] - yExtent[0]);\n }\n function brushstart() {\n var target = this, eventTarget = d3.select(d3.event.target), event_ = event.of(target, arguments), g = d3.select(target), resizing = eventTarget.datum(), resizingX = !/^(n|s)$/.test(resizing) && x, resizingY = !/^(e|w)$/.test(resizing) && y, dragging = eventTarget.classed(\"extent\"), dragRestore = d3_event_dragSuppress(target), center, origin = d3.mouse(target), offset;\n var w = d3.select(d3_window(target)).on(\"keydown.brush\", keydown).on(\"keyup.brush\", keyup);\n if (d3.event.changedTouches) {\n w.on(\"touchmove.brush\", brushmove).on(\"touchend.brush\", brushend);\n } else {\n w.on(\"mousemove.brush\", brushmove).on(\"mouseup.brush\", brushend);\n }\n g.interrupt().selectAll(\"*\").interrupt();\n if (dragging) {\n origin[0] = xExtent[0] - origin[0];\n origin[1] = yExtent[0] - origin[1];\n } else if (resizing) {\n var ex = +/w$/.test(resizing), ey = +/^n/.test(resizing);\n offset = [ xExtent[1 - ex] - origin[0], yExtent[1 - ey] - origin[1] ];\n origin[0] = xExtent[ex];\n origin[1] = yExtent[ey];\n } else if (d3.event.altKey) center = origin.slice();\n g.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null);\n d3.select(\"body\").style(\"cursor\", eventTarget.style(\"cursor\"));\n event_({\n type: \"brushstart\"\n });\n brushmove();\n function keydown() {\n if (d3.event.keyCode == 32) {\n if (!dragging) {\n center = null;\n origin[0] -= xExtent[1];\n origin[1] -= yExtent[1];\n dragging = 2;\n }\n d3_eventPreventDefault();\n }\n }\n function keyup() {\n if (d3.event.keyCode == 32 && dragging == 2) {\n origin[0] += xExtent[1];\n origin[1] += yExtent[1];\n dragging = 0;\n d3_eventPreventDefault();\n }\n }\n function brushmove() {\n var point = d3.mouse(target), moved = false;\n if (offset) {\n point[0] += offset[0];\n point[1] += offset[1];\n }\n if (!dragging) {\n if (d3.event.altKey) {\n if (!center) center = [ (xExtent[0] + xExtent[1]) / 2, (yExtent[0] + yExtent[1]) / 2 ];\n origin[0] = xExtent[+(point[0] < center[0])];\n origin[1] = yExtent[+(point[1] < center[1])];\n } else center = null;\n }\n if (resizingX && move1(point, x, 0)) {\n redrawX(g);\n moved = true;\n }\n if (resizingY && move1(point, y, 1)) {\n redrawY(g);\n moved = true;\n }\n if (moved) {\n redraw(g);\n event_({\n type: \"brush\",\n mode: dragging ? \"move\" : \"resize\"\n });\n }\n }\n function move1(point, scale, i) {\n var range = d3_scaleRange(scale), r0 = range[0], r1 = range[1], position = origin[i], extent = i ? yExtent : xExtent, size = extent[1] - extent[0], min, max;\n if (dragging) {\n r0 -= position;\n r1 -= size + position;\n }\n min = (i ? yClamp : xClamp) ? Math.max(r0, Math.min(r1, point[i])) : point[i];\n if (dragging) {\n max = (min += position) + size;\n } else {\n if (center) position = Math.max(r0, Math.min(r1, 2 * center[i] - min));\n if (position < min) {\n max = min;\n min = position;\n } else {\n max = position;\n }\n }\n if (extent[0] != min || extent[1] != max) {\n if (i) yExtentDomain = null; else xExtentDomain = null;\n extent[0] = min;\n extent[1] = max;\n return true;\n }\n }\n function brushend() {\n brushmove();\n g.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", brush.empty() ? \"none\" : null);\n d3.select(\"body\").style(\"cursor\", null);\n w.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null);\n dragRestore();\n event_({\n type: \"brushend\"\n });\n }\n }\n brush.x = function(z) {\n if (!arguments.length) return x;\n x = z;\n resizes = d3_svg_brushResizes[!x << 1 | !y];\n return brush;\n };\n brush.y = function(z) {\n if (!arguments.length) return y;\n y = z;\n resizes = d3_svg_brushResizes[!x << 1 | !y];\n return brush;\n };\n brush.clamp = function(z) {\n if (!arguments.length) return x && y ? [ xClamp, yClamp ] : x ? xClamp : y ? yClamp : null;\n if (x && y) xClamp = !!z[0], yClamp = !!z[1]; else if (x) xClamp = !!z; else if (y) yClamp = !!z;\n return brush;\n };\n brush.extent = function(z) {\n var x0, x1, y0, y1, t;\n if (!arguments.length) {\n if (x) {\n if (xExtentDomain) {\n x0 = xExtentDomain[0], x1 = xExtentDomain[1];\n } else {\n x0 = xExtent[0], x1 = xExtent[1];\n if (x.invert) x0 = x.invert(x0), x1 = x.invert(x1);\n if (x1 < x0) t = x0, x0 = x1, x1 = t;\n }\n }\n if (y) {\n if (yExtentDomain) {\n y0 = yExtentDomain[0], y1 = yExtentDomain[1];\n } else {\n y0 = yExtent[0], y1 = yExtent[1];\n if (y.invert) y0 = y.invert(y0), y1 = y.invert(y1);\n if (y1 < y0) t = y0, y0 = y1, y1 = t;\n }\n }\n return x && y ? [ [ x0, y0 ], [ x1, y1 ] ] : x ? [ x0, x1 ] : y && [ y0, y1 ];\n }\n if (x) {\n x0 = z[0], x1 = z[1];\n if (y) x0 = x0[0], x1 = x1[0];\n xExtentDomain = [ x0, x1 ];\n if (x.invert) x0 = x(x0), x1 = x(x1);\n if (x1 < x0) t = x0, x0 = x1, x1 = t;\n if (x0 != xExtent[0] || x1 != xExtent[1]) xExtent = [ x0, x1 ];\n }\n if (y) {\n y0 = z[0], y1 = z[1];\n if (x) y0 = y0[1], y1 = y1[1];\n yExtentDomain = [ y0, y1 ];\n if (y.invert) y0 = y(y0), y1 = y(y1);\n if (y1 < y0) t = y0, y0 = y1, y1 = t;\n if (y0 != yExtent[0] || y1 != yExtent[1]) yExtent = [ y0, y1 ];\n }\n return brush;\n };\n brush.clear = function() {\n if (!brush.empty()) {\n xExtent = [ 0, 0 ], yExtent = [ 0, 0 ];\n xExtentDomain = yExtentDomain = null;\n }\n return brush;\n };\n brush.empty = function() {\n return !!x && xExtent[0] == xExtent[1] || !!y && yExtent[0] == yExtent[1];\n };\n return d3.rebind(brush, event, \"on\");\n };\n var d3_svg_brushCursor = {\n n: \"ns-resize\",\n e: \"ew-resize\",\n s: \"ns-resize\",\n w: \"ew-resize\",\n nw: \"nwse-resize\",\n ne: \"nesw-resize\",\n se: \"nwse-resize\",\n sw: \"nesw-resize\"\n };\n var d3_svg_brushResizes = [ [ \"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\" ], [ \"e\", \"w\" ], [ \"n\", \"s\" ], [] ];\n var d3_time_format = d3_time.format = d3_locale_enUS.timeFormat;\n var d3_time_formatUtc = d3_time_format.utc;\n var d3_time_formatIso = d3_time_formatUtc(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n d3_time_format.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? d3_time_formatIsoNative : d3_time_formatIso;\n function d3_time_formatIsoNative(date) {\n return date.toISOString();\n }\n d3_time_formatIsoNative.parse = function(string) {\n var date = new Date(string);\n return isNaN(date) ? null : date;\n };\n d3_time_formatIsoNative.toString = d3_time_formatIso.toString;\n d3_time.second = d3_time_interval(function(date) {\n return new d3_date(Math.floor(date / 1e3) * 1e3);\n }, function(date, offset) {\n date.setTime(date.getTime() + Math.floor(offset) * 1e3);\n }, function(date) {\n return date.getSeconds();\n });\n d3_time.seconds = d3_time.second.range;\n d3_time.seconds.utc = d3_time.second.utc.range;\n d3_time.minute = d3_time_interval(function(date) {\n return new d3_date(Math.floor(date / 6e4) * 6e4);\n }, function(date, offset) {\n date.setTime(date.getTime() + Math.floor(offset) * 6e4);\n }, function(date) {\n return date.getMinutes();\n });\n d3_time.minutes = d3_time.minute.range;\n d3_time.minutes.utc = d3_time.minute.utc.range;\n d3_time.hour = d3_time_interval(function(date) {\n var timezone = date.getTimezoneOffset() / 60;\n return new d3_date((Math.floor(date / 36e5 - timezone) + timezone) * 36e5);\n }, function(date, offset) {\n date.setTime(date.getTime() + Math.floor(offset) * 36e5);\n }, function(date) {\n return date.getHours();\n });\n d3_time.hours = d3_time.hour.range;\n d3_time.hours.utc = d3_time.hour.utc.range;\n d3_time.month = d3_time_interval(function(date) {\n date = d3_time.day(date);\n date.setDate(1);\n return date;\n }, function(date, offset) {\n date.setMonth(date.getMonth() + offset);\n }, function(date) {\n return date.getMonth();\n });\n d3_time.months = d3_time.month.range;\n d3_time.months.utc = d3_time.month.utc.range;\n function d3_time_scale(linear, methods, format) {\n function scale(x) {\n return linear(x);\n }\n scale.invert = function(x) {\n return d3_time_scaleDate(linear.invert(x));\n };\n scale.domain = function(x) {\n if (!arguments.length) return linear.domain().map(d3_time_scaleDate);\n linear.domain(x);\n return scale;\n };\n function tickMethod(extent, count) {\n var span = extent[1] - extent[0], target = span / count, i = d3.bisect(d3_time_scaleSteps, target);\n return i == d3_time_scaleSteps.length ? [ methods.year, d3_scale_linearTickRange(extent.map(function(d) {\n return d / 31536e6;\n }), count)[2] ] : !i ? [ d3_time_scaleMilliseconds, d3_scale_linearTickRange(extent, count)[2] ] : methods[target / d3_time_scaleSteps[i - 1] < d3_time_scaleSteps[i] / target ? i - 1 : i];\n }\n scale.nice = function(interval, skip) {\n var domain = scale.domain(), extent = d3_scaleExtent(domain), method = interval == null ? tickMethod(extent, 10) : typeof interval === \"number\" && tickMethod(extent, interval);\n if (method) interval = method[0], skip = method[1];\n function skipped(date) {\n return !isNaN(date) && !interval.range(date, d3_time_scaleDate(+date + 1), skip).length;\n }\n return scale.domain(d3_scale_nice(domain, skip > 1 ? {\n floor: function(date) {\n while (skipped(date = interval.floor(date))) date = d3_time_scaleDate(date - 1);\n return date;\n },\n ceil: function(date) {\n while (skipped(date = interval.ceil(date))) date = d3_time_scaleDate(+date + 1);\n return date;\n }\n } : interval));\n };\n scale.ticks = function(interval, skip) {\n var extent = d3_scaleExtent(scale.domain()), method = interval == null ? tickMethod(extent, 10) : typeof interval === \"number\" ? tickMethod(extent, interval) : !interval.range && [ {\n range: interval\n }, skip ];\n if (method) interval = method[0], skip = method[1];\n return interval.range(extent[0], d3_time_scaleDate(+extent[1] + 1), skip < 1 ? 1 : skip);\n };\n scale.tickFormat = function() {\n return format;\n };\n scale.copy = function() {\n return d3_time_scale(linear.copy(), methods, format);\n };\n return d3_scale_linearRebind(scale, linear);\n }\n function d3_time_scaleDate(t) {\n return new Date(t);\n }\n var d3_time_scaleSteps = [ 1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6 ];\n var d3_time_scaleLocalMethods = [ [ d3_time.second, 1 ], [ d3_time.second, 5 ], [ d3_time.second, 15 ], [ d3_time.second, 30 ], [ d3_time.minute, 1 ], [ d3_time.minute, 5 ], [ d3_time.minute, 15 ], [ d3_time.minute, 30 ], [ d3_time.hour, 1 ], [ d3_time.hour, 3 ], [ d3_time.hour, 6 ], [ d3_time.hour, 12 ], [ d3_time.day, 1 ], [ d3_time.day, 2 ], [ d3_time.week, 1 ], [ d3_time.month, 1 ], [ d3_time.month, 3 ], [ d3_time.year, 1 ] ];\n var d3_time_scaleLocalFormat = d3_time_format.multi([ [ \".%L\", function(d) {\n return d.getMilliseconds();\n } ], [ \":%S\", function(d) {\n return d.getSeconds();\n } ], [ \"%I:%M\", function(d) {\n return d.getMinutes();\n } ], [ \"%I %p\", function(d) {\n return d.getHours();\n } ], [ \"%a %d\", function(d) {\n return d.getDay() && d.getDate() != 1;\n } ], [ \"%b %d\", function(d) {\n return d.getDate() != 1;\n } ], [ \"%B\", function(d) {\n return d.getMonth();\n } ], [ \"%Y\", d3_true ] ]);\n var d3_time_scaleMilliseconds = {\n range: function(start, stop, step) {\n return d3.range(Math.ceil(start / step) * step, +stop, step).map(d3_time_scaleDate);\n },\n floor: d3_identity,\n ceil: d3_identity\n };\n d3_time_scaleLocalMethods.year = d3_time.year;\n d3_time.scale = function() {\n return d3_time_scale(d3.scale.linear(), d3_time_scaleLocalMethods, d3_time_scaleLocalFormat);\n };\n var d3_time_scaleUtcMethods = d3_time_scaleLocalMethods.map(function(m) {\n return [ m[0].utc, m[1] ];\n });\n var d3_time_scaleUtcFormat = d3_time_formatUtc.multi([ [ \".%L\", function(d) {\n return d.getUTCMilliseconds();\n } ], [ \":%S\", function(d) {\n return d.getUTCSeconds();\n } ], [ \"%I:%M\", function(d) {\n return d.getUTCMinutes();\n } ], [ \"%I %p\", function(d) {\n return d.getUTCHours();\n } ], [ \"%a %d\", function(d) {\n return d.getUTCDay() && d.getUTCDate() != 1;\n } ], [ \"%b %d\", function(d) {\n return d.getUTCDate() != 1;\n } ], [ \"%B\", function(d) {\n return d.getUTCMonth();\n } ], [ \"%Y\", d3_true ] ]);\n d3_time_scaleUtcMethods.year = d3_time.year.utc;\n d3_time.scale.utc = function() {\n return d3_time_scale(d3.scale.linear(), d3_time_scaleUtcMethods, d3_time_scaleUtcFormat);\n };\n d3.text = d3_xhrType(function(request) {\n return request.responseText;\n });\n d3.json = function(url, callback) {\n return d3_xhr(url, \"application/json\", d3_json, callback);\n };\n function d3_json(request) {\n return JSON.parse(request.responseText);\n }\n d3.html = function(url, callback) {\n return d3_xhr(url, \"text/html\", d3_html, callback);\n };\n function d3_html(request) {\n var range = d3_document.createRange();\n range.selectNode(d3_document.body);\n return range.createContextualFragment(request.responseText);\n }\n d3.xml = d3_xhrType(function(request) {\n return request.responseXML;\n });\n if (typeof define === \"function\" && define.amd) define(d3); else if (typeof module === \"object\" && module.exports) module.exports = d3;\n this.d3 = d3;\n}();\n},{}],14:[function(require,module,exports){\n/*! DataTables 1.10.7\n * ©2008-2014 SpryMedia Ltd - datatables.net/license\n */\n\n/**\n * @summary DataTables\n * @description Paginate, search and order HTML tables\n * @version 1.10.7\n * @file jquery.dataTables.js\n * @author SpryMedia Ltd (www.sprymedia.co.uk)\n * @contact www.sprymedia.co.uk/contact\n * @copyright Copyright 2008-2014 SpryMedia Ltd.\n *\n * This source file is free software, available under the following license:\n * MIT license - http://datatables.net/license\n *\n * This source file is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.\n *\n * For details please refer to: http://www.datatables.net\n */\n\n/*jslint evil: true, undef: true, browser: true */\n/*globals $,require,jQuery,define,_selector_run,_selector_opts,_selector_first,_selector_row_indexes,_ext,_Api,_api_register,_api_registerPlural,_re_new_lines,_re_html,_re_formatted_numeric,_re_escape_regex,_empty,_intVal,_numToDecimal,_isNumber,_isHtml,_htmlNumeric,_pluck,_pluck_order,_range,_stripHtml,_unique,_fnBuildAjax,_fnAjaxUpdate,_fnAjaxParameters,_fnAjaxUpdateDraw,_fnAjaxDataSrc,_fnAddColumn,_fnColumnOptions,_fnAdjustColumnSizing,_fnVisibleToColumnIndex,_fnColumnIndexToVisible,_fnVisbleColumns,_fnGetColumns,_fnColumnTypes,_fnApplyColumnDefs,_fnHungarianMap,_fnCamelToHungarian,_fnLanguageCompat,_fnBrowserDetect,_fnAddData,_fnAddTr,_fnNodeToDataIndex,_fnNodeToColumnIndex,_fnGetCellData,_fnSetCellData,_fnSplitObjNotation,_fnGetObjectDataFn,_fnSetObjectDataFn,_fnGetDataMaster,_fnClearTable,_fnDeleteIndex,_fnInvalidate,_fnGetRowElements,_fnCreateTr,_fnBuildHead,_fnDrawHead,_fnDraw,_fnReDraw,_fnAddOptionsHtml,_fnDetectHeader,_fnGetUniqueThs,_fnFeatureHtmlFilter,_fnFilterComplete,_fnFilterCustom,_fnFilterColumn,_fnFilter,_fnFilterCreateSearch,_fnEscapeRegex,_fnFilterData,_fnFeatureHtmlInfo,_fnUpdateInfo,_fnInfoMacros,_fnInitialise,_fnInitComplete,_fnLengthChange,_fnFeatureHtmlLength,_fnFeatureHtmlPaginate,_fnPageChange,_fnFeatureHtmlProcessing,_fnProcessingDisplay,_fnFeatureHtmlTable,_fnScrollDraw,_fnApplyToChildren,_fnCalculateColumnWidths,_fnThrottle,_fnConvertToWidth,_fnScrollingWidthAdjust,_fnGetWidestNode,_fnGetMaxLenString,_fnStringToCss,_fnScrollBarWidth,_fnSortFlatten,_fnSort,_fnSortAria,_fnSortListener,_fnSortAttachListener,_fnSortingClasses,_fnSortData,_fnSaveState,_fnLoadState,_fnSettingsFromNode,_fnLog,_fnMap,_fnBindAction,_fnCallbackReg,_fnCallbackFire,_fnLengthOverflow,_fnRenderer,_fnDataSource,_fnRowAttributes*/\n\n(/** @lends */function( window, document, undefined ) {\n\n(function( factory ) {\n\t\"use strict\";\n\n\tif ( typeof define === 'function' && define.amd ) {\n\t\t// Define as an AMD module if possible\n\t\tdefine( 'datatables', ['jquery'], factory );\n\t}\n else if ( typeof exports === 'object' ) {\n // Node/CommonJS\n module.exports = factory( require( 'jquery' ) );\n }\n\telse if ( jQuery && !jQuery.fn.dataTable ) {\n\t\t// Define using browser globals otherwise\n\t\t// Prevent multiple instantiations if the script is loaded twice\n\t\tfactory( jQuery );\n\t}\n}\n(/** @lends */function( $ ) {\n\t\"use strict\";\n\n\t/**\n\t * DataTables is a plug-in for the jQuery Javascript library. It is a highly\n\t * flexible tool, based upon the foundations of progressive enhancement,\n\t * which will add advanced interaction controls to any HTML table. For a\n\t * full list of features please refer to\n\t * [DataTables.net](href=\"http://datatables.net).\n\t *\n\t * Note that the `DataTable` object is not a global variable but is aliased\n\t * to `jQuery.fn.DataTable` and `jQuery.fn.dataTable` through which it may\n\t * be accessed.\n\t *\n\t * @class\n\t * @param {object} [init={}] Configuration object for DataTables. Options\n\t * are defined by {@link DataTable.defaults}\n\t * @requires jQuery 1.7+\n\t *\n\t * @example\n\t * // Basic initialisation\n\t * $(document).ready( function {\n\t * $('#example').dataTable();\n\t * } );\n\t *\n\t * @example\n\t * // Initialisation with configuration options - in this case, disable\n\t * // pagination and sorting.\n\t * $(document).ready( function {\n\t * $('#example').dataTable( {\n\t * \"paginate\": false,\n\t * \"sort\": false\n\t * } );\n\t * } );\n\t */\n\tvar DataTable;\n\n\t\n\t/*\n\t * It is useful to have variables which are scoped locally so only the\n\t * DataTables functions can access them and they don't leak into global space.\n\t * At the same time these functions are often useful over multiple files in the\n\t * core and API, so we list, or at least document, all variables which are used\n\t * by DataTables as private variables here. This also ensures that there is no\n\t * clashing of variable names and that they can easily referenced for reuse.\n\t */\n\t\n\t\n\t// Defined else where\n\t// _selector_run\n\t// _selector_opts\n\t// _selector_first\n\t// _selector_row_indexes\n\t\n\tvar _ext; // DataTable.ext\n\tvar _Api; // DataTable.Api\n\tvar _api_register; // DataTable.Api.register\n\tvar _api_registerPlural; // DataTable.Api.registerPlural\n\t\n\tvar _re_dic = {};\n\tvar _re_new_lines = /[\\r\\n]/g;\n\tvar _re_html = /<.*?>/g;\n\tvar _re_date_start = /^[\\w\\+\\-]/;\n\tvar _re_date_end = /[\\w\\+\\-]$/;\n\t\n\t// Escape regular expression special characters\n\tvar _re_escape_regex = new RegExp( '(\\\\' + [ '/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\\\', '$', '^', '-' ].join('|\\\\') + ')', 'g' );\n\t\n\t// http://en.wikipedia.org/wiki/Foreign_exchange_market\n\t// - \\u20BD - Russian ruble.\n\t// - \\u20a9 - South Korean Won\n\t// - \\u20BA - Turkish Lira\n\t// - \\u20B9 - Indian Rupee\n\t// - R - Brazil (R$) and South Africa\n\t// - fr - Swiss Franc\n\t// - kr - Swedish krona, Norwegian krone and Danish krone\n\t// - \\u2009 is thin space and \\u202F is narrow no-break space, both used in many\n\t// standards as thousands separators.\n\tvar _re_formatted_numeric = /[',$£€¥%\\u2009\\u202F\\u20BD\\u20a9\\u20BArfk]/gi;\n\t\n\t\n\tvar _empty = function ( d ) {\n\t\treturn !d || d === true || d === '-' ? true : false;\n\t};\n\t\n\t\n\tvar _intVal = function ( s ) {\n\t\tvar integer = parseInt( s, 10 );\n\t\treturn !isNaN(integer) && isFinite(s) ? integer : null;\n\t};\n\t\n\t// Convert from a formatted number with characters other than `.` as the\n\t// decimal place, to a Javascript number\n\tvar _numToDecimal = function ( num, decimalPoint ) {\n\t\t// Cache created regular expressions for speed as this function is called often\n\t\tif ( ! _re_dic[ decimalPoint ] ) {\n\t\t\t_re_dic[ decimalPoint ] = new RegExp( _fnEscapeRegex( decimalPoint ), 'g' );\n\t\t}\n\t\treturn typeof num === 'string' && decimalPoint !== '.' ?\n\t\t\tnum.replace( /\\./g, '' ).replace( _re_dic[ decimalPoint ], '.' ) :\n\t\t\tnum;\n\t};\n\t\n\t\n\tvar _isNumber = function ( d, decimalPoint, formatted ) {\n\t\tvar strType = typeof d === 'string';\n\t\n\t\t// If empty return immediately so there must be a number if it is a\n\t\t// formatted string (this stops the string \"k\", or \"kr\", etc being detected\n\t\t// as a formatted number for currency\n\t\tif ( _empty( d ) ) {\n\t\t\treturn true;\n\t\t}\n\t\n\t\tif ( decimalPoint && strType ) {\n\t\t\td = _numToDecimal( d, decimalPoint );\n\t\t}\n\t\n\t\tif ( formatted && strType ) {\n\t\t\td = d.replace( _re_formatted_numeric, '' );\n\t\t}\n\t\n\t\treturn !isNaN( parseFloat(d) ) && isFinite( d );\n\t};\n\t\n\t\n\t// A string without HTML in it can be considered to be HTML still\n\tvar _isHtml = function ( d ) {\n\t\treturn _empty( d ) || typeof d === 'string';\n\t};\n\t\n\t\n\tvar _htmlNumeric = function ( d, decimalPoint, formatted ) {\n\t\tif ( _empty( d ) ) {\n\t\t\treturn true;\n\t\t}\n\t\n\t\tvar html = _isHtml( d );\n\t\treturn ! html ?\n\t\t\tnull :\n\t\t\t_isNumber( _stripHtml( d ), decimalPoint, formatted ) ?\n\t\t\t\ttrue :\n\t\t\t\tnull;\n\t};\n\t\n\t\n\tvar _pluck = function ( a, prop, prop2 ) {\n\t\tvar out = [];\n\t\tvar i=0, ien=a.length;\n\t\n\t\t// Could have the test in the loop for slightly smaller code, but speed\n\t\t// is essential here\n\t\tif ( prop2 !== undefined ) {\n\t\t\tfor ( ; i')\n\t\t\t.css( {\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: 0,\n\t\t\t\tleft: 0,\n\t\t\t\theight: 1,\n\t\t\t\twidth: 1,\n\t\t\t\toverflow: 'hidden'\n\t\t\t} )\n\t\t\t.append(\n\t\t\t\t$('
')\n\t\t\t\t\t.css( {\n\t\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\t\ttop: 1,\n\t\t\t\t\t\tleft: 1,\n\t\t\t\t\t\twidth: 100,\n\t\t\t\t\t\toverflow: 'scroll'\n\t\t\t\t\t} )\n\t\t\t\t\t.append(\n\t\t\t\t\t\t$('
')\n\t\t\t\t\t\t\t.css( {\n\t\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t\t\theight: 10\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t)\n\t\t\t)\n\t\t\t.appendTo( 'body' );\n\t\n\t\tvar test = n.find('.test');\n\t\n\t\t// IE6/7 will oversize a width 100% element inside a scrolling element, to\n\t\t// include the width of the scrollbar, while other browsers ensure the inner\n\t\t// element is contained without forcing scrolling\n\t\tbrowser.bScrollOversize = test[0].offsetWidth === 100;\n\t\n\t\t// In rtl text layout, some browsers (most, but not all) will place the\n\t\t// scrollbar on the left, rather than the right.\n\t\tbrowser.bScrollbarLeft = Math.round( test.offset().left ) !== 1;\n\t\n\t\tn.remove();\n\t}\n\t\n\t\n\t/**\n\t * Array.prototype reduce[Right] method, used for browsers which don't support\n\t * JS 1.6. Done this way to reduce code size, since we iterate either way\n\t * @param {object} settings dataTables settings object\n\t * @memberof DataTable#oApi\n\t */\n\tfunction _fnReduce ( that, fn, init, start, end, inc )\n\t{\n\t\tvar\n\t\t\ti = start,\n\t\t\tvalue,\n\t\t\tisSet = false;\n\t\n\t\tif ( init !== undefined ) {\n\t\t\tvalue = init;\n\t\t\tisSet = true;\n\t\t}\n\t\n\t\twhile ( i !== end ) {\n\t\t\tif ( ! that.hasOwnProperty(i) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\n\t\t\tvalue = isSet ?\n\t\t\t\tfn( value, that[i], i, that ) :\n\t\t\t\tthat[i];\n\t\n\t\t\tisSet = true;\n\t\t\ti += inc;\n\t\t}\n\t\n\t\treturn value;\n\t}\n\t\n\t/**\n\t * Add a column to the list used for the table with default values\n\t * @param {object} oSettings dataTables settings object\n\t * @param {node} nTh The th element for this column\n\t * @memberof DataTable#oApi\n\t */\n\tfunction _fnAddColumn( oSettings, nTh )\n\t{\n\t\t// Add column to aoColumns array\n\t\tvar oDefaults = DataTable.defaults.column;\n\t\tvar iCol = oSettings.aoColumns.length;\n\t\tvar oCol = $.extend( {}, DataTable.models.oColumn, oDefaults, {\n\t\t\t\"nTh\": nTh ? nTh : document.createElement('th'),\n\t\t\t\"sTitle\": oDefaults.sTitle ? oDefaults.sTitle : nTh ? nTh.innerHTML : '',\n\t\t\t\"aDataSort\": oDefaults.aDataSort ? oDefaults.aDataSort : [iCol],\n\t\t\t\"mData\": oDefaults.mData ? oDefaults.mData : iCol,\n\t\t\tidx: iCol\n\t\t} );\n\t\toSettings.aoColumns.push( oCol );\n\t\n\t\t// Add search object for column specific search. Note that the `searchCols[ iCol ]`\n\t\t// passed into extend can be undefined. This allows the user to give a default\n\t\t// with only some of the parameters defined, and also not give a default\n\t\tvar searchCols = oSettings.aoPreSearchCols;\n\t\tsearchCols[ iCol ] = $.extend( {}, DataTable.models.oSearch, searchCols[ iCol ] );\n\t\n\t\t// Use the default column options function to initialise classes etc\n\t\t_fnColumnOptions( oSettings, iCol, $(nTh).data() );\n\t}\n\t\n\t\n\t/**\n\t * Apply options for a column\n\t * @param {object} oSettings dataTables settings object\n\t * @param {int} iCol column index to consider\n\t * @param {object} oOptions object with sType, bVisible and bSearchable etc\n\t * @memberof DataTable#oApi\n\t */\n\tfunction _fnColumnOptions( oSettings, iCol, oOptions )\n\t{\n\t\tvar oCol = oSettings.aoColumns[ iCol ];\n\t\tvar oClasses = oSettings.oClasses;\n\t\tvar th = $(oCol.nTh);\n\t\n\t\t// Try to get width information from the DOM. We can't get it from CSS\n\t\t// as we'd need to parse the CSS stylesheet. `width` option can override\n\t\tif ( ! oCol.sWidthOrig ) {\n\t\t\t// Width attribute\n\t\t\toCol.sWidthOrig = th.attr('width') || null;\n\t\n\t\t\t// Style attribute\n\t\t\tvar t = (th.attr('style') || '').match(/width:\\s*(\\d+[pxem%]+)/);\n\t\t\tif ( t ) {\n\t\t\t\toCol.sWidthOrig = t[1];\n\t\t\t}\n\t\t}\n\t\n\t\t/* User specified column options */\n\t\tif ( oOptions !== undefined && oOptions !== null )\n\t\t{\n\t\t\t// Backwards compatibility\n\t\t\t_fnCompatCols( oOptions );\n\t\n\t\t\t// Map camel case parameters to their Hungarian counterparts\n\t\t\t_fnCamelToHungarian( DataTable.defaults.column, oOptions );\n\t\n\t\t\t/* Backwards compatibility for mDataProp */\n\t\t\tif ( oOptions.mDataProp !== undefined && !oOptions.mData )\n\t\t\t{\n\t\t\t\toOptions.mData = oOptions.mDataProp;\n\t\t\t}\n\t\n\t\t\tif ( oOptions.sType )\n\t\t\t{\n\t\t\t\toCol._sManualType = oOptions.sType;\n\t\t\t}\n\t\n\t\t\t// `class` is a reserved word in Javascript, so we need to provide\n\t\t\t// the ability to use a valid name for the camel case input\n\t\t\tif ( oOptions.className && ! oOptions.sClass )\n\t\t\t{\n\t\t\t\toOptions.sClass = oOptions.className;\n\t\t\t}\n\t\n\t\t\t$.extend( oCol, oOptions );\n\t\t\t_fnMap( oCol, oOptions, \"sWidth\", \"sWidthOrig\" );\n\t\n\t\t\t/* iDataSort to be applied (backwards compatibility), but aDataSort will take\n\t\t\t * priority if defined\n\t\t\t */\n\t\t\tif ( oOptions.iDataSort !== undefined )\n\t\t\t{\n\t\t\t\toCol.aDataSort = [ oOptions.iDataSort ];\n\t\t\t}\n\t\t\t_fnMap( oCol, oOptions, \"aDataSort\" );\n\t\t}\n\t\n\t\t/* Cache the data get and set functions for speed */\n\t\tvar mDataSrc = oCol.mData;\n\t\tvar mData = _fnGetObjectDataFn( mDataSrc );\n\t\tvar mRender = oCol.mRender ? _fnGetObjectDataFn( oCol.mRender ) : null;\n\t\n\t\tvar attrTest = function( src ) {\n\t\t\treturn typeof src === 'string' && src.indexOf('@') !== -1;\n\t\t};\n\t\toCol._bAttrSrc = $.isPlainObject( mDataSrc ) && (\n\t\t\tattrTest(mDataSrc.sort) || attrTest(mDataSrc.type) || attrTest(mDataSrc.filter)\n\t\t);\n\t\n\t\toCol.fnGetData = function (rowData, type, meta) {\n\t\t\tvar innerData = mData( rowData, type, undefined, meta );\n\t\n\t\t\treturn mRender && type ?\n\t\t\t\tmRender( innerData, type, rowData, meta ) :\n\t\t\t\tinnerData;\n\t\t};\n\t\toCol.fnSetData = function ( rowData, val, meta ) {\n\t\t\treturn _fnSetObjectDataFn( mDataSrc )( rowData, val, meta );\n\t\t};\n\t\n\t\t// Indicate if DataTables should read DOM data as an object or array\n\t\t// Used in _fnGetRowElements\n\t\tif ( typeof mDataSrc !== 'number' ) {\n\t\t\toSettings._rowReadObject = true;\n\t\t}\n\t\n\t\t/* Feature sorting overrides column specific when off */\n\t\tif ( !oSettings.oFeatures.bSort )\n\t\t{\n\t\t\toCol.bSortable = false;\n\t\t\tth.addClass( oClasses.sSortableNone ); // Have to add class here as order event isn't called\n\t\t}\n\t\n\t\t/* Check that the class assignment is correct for sorting */\n\t\tvar bAsc = $.inArray('asc', oCol.asSorting) !== -1;\n\t\tvar bDesc = $.inArray('desc', oCol.asSorting) !== -1;\n\t\tif ( !oCol.bSortable || (!bAsc && !bDesc) )\n\t\t{\n\t\t\toCol.sSortingClass = oClasses.sSortableNone;\n\t\t\toCol.sSortingClassJUI = \"\";\n\t\t}\n\t\telse if ( bAsc && !bDesc )\n\t\t{\n\t\t\toCol.sSortingClass = oClasses.sSortableAsc;\n\t\t\toCol.sSortingClassJUI = oClasses.sSortJUIAscAllowed;\n\t\t}\n\t\telse if ( !bAsc && bDesc )\n\t\t{\n\t\t\toCol.sSortingClass = oClasses.sSortableDesc;\n\t\t\toCol.sSortingClassJUI = oClasses.sSortJUIDescAllowed;\n\t\t}\n\t\telse\n\t\t{\n\t\t\toCol.sSortingClass = oClasses.sSortable;\n\t\t\toCol.sSortingClassJUI = oClasses.sSortJUI;\n\t\t}\n\t}\n\t\n\t\n\t/**\n\t * Adjust the table column widths for new data. Note: you would probably want to\n\t * do a redraw after calling this function!\n\t * @param {object} settings dataTables settings object\n\t * @memberof DataTable#oApi\n\t */\n\tfunction _fnAdjustColumnSizing ( settings )\n\t{\n\t\t/* Not interested in doing column width calculation if auto-width is disabled */\n\t\tif ( settings.oFeatures.bAutoWidth !== false )\n\t\t{\n\t\t\tvar columns = settings.aoColumns;\n\t\n\t\t\t_fnCalculateColumnWidths( settings );\n\t\t\tfor ( var i=0 , iLen=columns.length ; i